ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1kcml2ZXItaWJfc3JwIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci1pYl9zcnAKaW5kZXggYjk2ODhkZS4uNzA0OWEyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci1pYl9zcnAKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci1pYl9zcnAKQEAgLTU1LDEyICs1NSwxMiBAQAogCQkgIG9ubHkgc2FmZSB3aXRoIHBhcnRpYWwgbWVtb3J5IGRlc2NyaXB0b3IgbGlzdCBzdXBwb3J0IGVuYWJsZWQKIAkJICAoYWxsb3dfZXh0X3NnPTEpLgogCQkqIGNvbXBfdmVjdG9yLCBhIG51bWJlciBpbiB0aGUgcmFuZ2UgMC4ubi0xIHNwZWNpZnlpbmcgdGhlCi0JCSAgTVNJLVggY29tcGxldGlvbiB2ZWN0b3IuIFNvbWUgSENBJ3MgYWxsb2NhdGUgbXVsdGlwbGUgKG4pCi0JCSAgTVNJLVggdmVjdG9ycyBwZXIgSENBIHBvcnQuIElmIHRoZSBJUlEgYWZmaW5pdHkgbWFza3Mgb2YKLQkJICB0aGVzZSBpbnRlcnJ1cHRzIGhhdmUgYmVlbiBjb25maWd1cmVkIHN1Y2ggdGhhdCBlYWNoIE1TSS1YCi0JCSAgaW50ZXJydXB0IGlzIGhhbmRsZWQgYnkgYSBkaWZmZXJlbnQgQ1BVIHRoZW4gdGhlIGNvbXBfdmVjdG9yCi0JCSAgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNwcmVhZCB0aGUgU1JQIGNvbXBsZXRpb24gd29ya2xvYWQKLQkJICBvdmVyIG11bHRpcGxlIENQVSdzLgorCQkgIE1TSS1YIGNvbXBsZXRpb24gdmVjdG9yIG9mIHRoZSBmaXJzdCBSRE1BIGNoYW5uZWwuIFNvbWUKKwkJICBIQ0EncyBhbGxvY2F0ZSBtdWx0aXBsZSAobikgTVNJLVggdmVjdG9ycyBwZXIgSENBIHBvcnQuIElmCisJCSAgdGhlIElSUSBhZmZpbml0eSBtYXNrcyBvZiB0aGVzZSBpbnRlcnJ1cHRzIGhhdmUgYmVlbgorCQkgIGNvbmZpZ3VyZWQgc3VjaCB0aGF0IGVhY2ggTVNJLVggaW50ZXJydXB0IGlzIGhhbmRsZWQgYnkgYQorCQkgIGRpZmZlcmVudCBDUFUgdGhlbiB0aGUgY29tcF92ZWN0b3IgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvCisJCSAgc3ByZWFkIHRoZSBTUlAgY29tcGxldGlvbiB3b3JrbG9hZCBvdmVyIG11bHRpcGxlIENQVSdzLgogCQkqIHRsX3JldHJ5X2NvdW50LCBhIG51bWJlciBpbiB0aGUgcmFuZ2UgMi4uNyBzcGVjaWZ5aW5nIHRoZQogCQkgIElCIFJDIHJldHJ5IGNvdW50LgogCQkqIHF1ZXVlX3NpemUsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb21tYW5kcyB0aGF0IHRoZQpAQCAtODgsNiArODgsMTMgQEAKIAkJZGVzY3JpcHRvciBsaXN0IGluIGFuIFNSUF9DTUQgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggYW4gU1JQCiAJCXRhcmdldC4KIAorV2hhdDoJCS9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3Q8bj4vY2hfY291bnQKK0RhdGU6CQlBcHJpbCAxLCAyMDE1CitLZXJuZWxWZXJzaW9uOgkzLjE5CitDb250YWN0OglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CU51bWJlciBvZiBSRE1BIGNoYW5uZWxzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgU1JQCisJCXRhcmdldC4KKwogV2hhdDoJCS9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3Q8bj4vY21kX3NnX2VudHJpZXMKIERhdGU6CQlNYXkgMTksIDIwMTEKIEtlcm5lbFZlcnNpb246CTIuNi4zOQpAQCAtOTUsNiArMTAyLDEyIEBACiBEZXNjcmlwdGlvbjoJTWF4aW11bSBudW1iZXIgb2YgZGF0YSBidWZmZXIgZGVzY3JpcHRvcnMgdGhhdCBtYXkgYmUgc2VudCB0bwogCQl0aGUgdGFyZ2V0IGluIGEgc2luZ2xlIFNSUF9DTUQgcmVxdWVzdC4KIAorV2hhdDoJCS9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3Q8bj4vY29tcF92ZWN0b3IKK0RhdGU6CQlTZXB0ZW1iZXIgMiwgMjAxMworS2VybmVsVmVyc2lvbjoJMy4xMQorQ29udGFjdDoJbGludXgtcmRtYUB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOglDb21wbGV0aW9uIHZlY3RvciB1c2VkIGZvciB0aGUgZmlyc3QgUkRNQSBjaGFubmVsLgorCiBXaGF0OgkJL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdDxuPi9kZ2lkCiBEYXRlOgkJSnVuZSAxNywgMjAwNgogS2VybmVsVmVyc2lvbjoJMi42LjE3CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0lSUS1kb21haW4udHh0IGIvRG9jdW1lbnRhdGlvbi9JUlEtZG9tYWluLnR4dAppbmRleCA4YThiODJjLi4zOWNmYTcyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0lSUS1kb21haW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vSVJRLWRvbWFpbi50eHQKQEAgLTE1MSwzICsxNTEsNzQgQEAKIHRoYXQgdGhlIGRyaXZlciB1c2luZyB0aGUgc2ltcGxlIGRvbWFpbiBjYWxsIGlycV9jcmVhdGVfbWFwcGluZygpCiBiZWZvcmUgYW55IGlycV9maW5kX21hcHBpbmcoKSBzaW5jZSB0aGUgbGF0dGVyIHdpbGwgYWN0dWFsbHkgd29yawogZm9yIHRoZSBzdGF0aWMgSVJRIGFzc2lnbm1lbnQgY2FzZS4KKworPT09PSBIaWVyYXJjaHkgSVJRIGRvbWFpbiA9PT09CitPbiBzb21lIGFyY2hpdGVjdHVyZXMsIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBpbnRlcnJ1cHQgY29udHJvbGxlcnMKK2ludm9sdmVkIGluIGRlbGl2ZXJpbmcgYW4gaW50ZXJydXB0IGZyb20gdGhlIGRldmljZSB0byB0aGUgdGFyZ2V0IENQVS4KK0xldCdzIGxvb2sgYXQgYSB0eXBpY2FsIGludGVycnVwdCBkZWxpdmVyaW5nIHBhdGggb24geDg2IHBsYXRmb3JtczoKKworRGV2aWNlIC0tPiBJT0FQSUMgLT4gSW50ZXJydXB0IHJlbWFwcGluZyBDb250cm9sbGVyIC0+IExvY2FsIEFQSUMgLT4gQ1BVCisKK1RoZXJlIGFyZSB0aHJlZSBpbnRlcnJ1cHQgY29udHJvbGxlcnMgaW52b2x2ZWQ6CisxKSBJT0FQSUMgY29udHJvbGxlcgorMikgSW50ZXJydXB0IHJlbWFwcGluZyBjb250cm9sbGVyCiszKSBMb2NhbCBBUElDIGNvbnRyb2xsZXIKKworVG8gc3VwcG9ydCBzdWNoIGEgaGFyZHdhcmUgdG9wb2xvZ3kgYW5kIG1ha2Ugc29mdHdhcmUgYXJjaGl0ZWN0dXJlIG1hdGNoCitoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIGFuIGlycV9kb21haW4gZGF0YSBzdHJ1Y3R1cmUgaXMgYnVpbHQgZm9yIGVhY2gKK2ludGVycnVwdCBjb250cm9sbGVyIGFuZCB0aG9zZSBpcnFfZG9tYWlucyBhcmUgb3JnYW5pemVkIGludG8gaGllcmFyY2h5LgorV2hlbiBidWlsZGluZyBpcnFfZG9tYWluIGhpZXJhcmNoeSwgdGhlIGlycV9kb21haW4gbmVhciB0byB0aGUgZGV2aWNlIGlzCitjaGlsZCBhbmQgdGhlIGlycV9kb21haW4gbmVhciB0byBDUFUgaXMgcGFyZW50LiBTbyBhIGhpZXJhcmNoeSBzdHJ1Y3R1cmUKK2FzIGJlbG93IHdpbGwgYmUgYnVpbHQgZm9yIHRoZSBleGFtcGxlIGFib3ZlLgorCUNQVSBWZWN0b3IgaXJxX2RvbWFpbiAocm9vdCBpcnFfZG9tYWluIHRvIG1hbmFnZSBDUFUgdmVjdG9ycykKKwkJXgorCQl8CisJSW50ZXJydXB0IFJlbWFwcGluZyBpcnFfZG9tYWluIChtYW5hZ2UgaXJxX3JlbWFwcGluZyBlbnRyaWVzKQorCQleCisJCXwKKwlJT0FQSUMgaXJxX2RvbWFpbiAobWFuYWdlIElPQVBJQyBkZWxpdmVyeSBlbnRyaWVzL3BpbnMpCisKK1RoZXJlIGFyZSBmb3VyIG1ham9yIGludGVyZmFjZXMgdG8gdXNlIGhpZXJhcmNoeSBpcnFfZG9tYWluOgorMSkgaXJxX2RvbWFpbl9hbGxvY19pcnFzKCk6IGFsbG9jYXRlIElSUSBkZXNjcmlwdG9ycyBhbmQgaW50ZXJydXB0CisgICBjb250cm9sbGVyIHJlbGF0ZWQgcmVzb3VyY2VzIHRvIGRlbGl2ZXIgdGhlc2UgaW50ZXJydXB0cy4KKzIpIGlycV9kb21haW5fZnJlZV9pcnFzKCk6IGZyZWUgSVJRIGRlc2NyaXB0b3JzIGFuZCBpbnRlcnJ1cHQgY29udHJvbGxlcgorICAgcmVsYXRlZCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGludGVycnVwdHMuCiszKSBpcnFfZG9tYWluX2FjdGl2YXRlX2lycSgpOiBhY3RpdmF0ZSBpbnRlcnJ1cHQgY29udHJvbGxlciBoYXJkd2FyZSB0bworICAgZGVsaXZlciB0aGUgaW50ZXJydXB0LgorMykgaXJxX2RvbWFpbl9kZWFjdGl2YXRlX2lycSgpOiBkZWFjdGl2YXRlIGludGVycnVwdCBjb250cm9sbGVyIGhhcmR3YXJlCisgICB0byBzdG9wIGRlbGl2ZXJpbmcgdGhlIGludGVycnVwdC4KKworRm9sbG93aW5nIGNoYW5nZXMgYXJlIG5lZWRlZCB0byBzdXBwb3J0IGhpZXJhcmNoeSBpcnFfZG9tYWluLgorMSkgYSBuZXcgZmllbGQgJ3BhcmVudCcgaXMgYWRkZWQgdG8gc3RydWN0IGlycV9kb21haW47IGl0J3MgdXNlZCB0bworICAgbWFpbnRhaW4gaXJxX2RvbWFpbiBoaWVyYXJjaHkgaW5mb3JtYXRpb24uCisyKSBhIG5ldyBmaWVsZCAncGFyZW50X2RhdGEnIGlzIGFkZGVkIHRvIHN0cnVjdCBpcnFfZGF0YTsgaXQncyB1c2VkIHRvCisgICBidWlsZCBoaWVyYXJjaHkgaXJxX2RhdGEgdG8gbWF0Y2ggaGllcmFyY2h5IGlycV9kb21haW5zLiBUaGUgaXJxX2RhdGEKKyAgIGlzIHVzZWQgdG8gc3RvcmUgaXJxX2RvbWFpbiBwb2ludGVyIGFuZCBoYXJkd2FyZSBpcnEgbnVtYmVyLgorMykgbmV3IGNhbGxiYWNrcyBhcmUgYWRkZWQgdG8gc3RydWN0IGlycV9kb21haW5fb3BzIHRvIHN1cHBvcnQgaGllcmFyY2h5CisgICBpcnFfZG9tYWluIG9wZXJhdGlvbnMuCisKK1dpdGggc3VwcG9ydCBvZiBoaWVyYXJjaHkgaXJxX2RvbWFpbiBhbmQgaGllcmFyY2h5IGlycV9kYXRhIHJlYWR5LCBhbgoraXJxX2RvbWFpbiBzdHJ1Y3R1cmUgaXMgYnVpbHQgZm9yIGVhY2ggaW50ZXJydXB0IGNvbnRyb2xsZXIsIGFuZCBhbgoraXJxX2RhdGEgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBmb3IgZWFjaCBpcnFfZG9tYWluIGFzc29jaWF0ZWQgd2l0aCBhbgorSVJRLiBOb3cgd2UgY291bGQgZ28gb25lIHN0ZXAgZnVydGhlciB0byBzdXBwb3J0IHN0YWNrZWQoaGllcmFyY2h5KQoraXJxX2NoaXAuIFRoYXQgaXMsIGFuIGlycV9jaGlwIGlzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGlycV9kYXRhIGFsb25nCit0aGUgaGllcmFyY2h5LiBBIGNoaWxkIGlycV9jaGlwIG1heSBpbXBsZW1lbnQgYSByZXF1aXJlZCBhY3Rpb24gYnkKK2l0c2VsZiBvciBieSBjb29wZXJhdGluZyB3aXRoIGl0cyBwYXJlbnQgaXJxX2NoaXAuCisKK1dpdGggc3RhY2tlZCBpcnFfY2hpcCwgaW50ZXJydXB0IGNvbnRyb2xsZXIgZHJpdmVyIG9ubHkgbmVlZHMgdG8gZGVhbAord2l0aCB0aGUgaGFyZHdhcmUgbWFuYWdlZCBieSBpdHNlbGYgYW5kIG1heSBhc2sgZm9yIHNlcnZpY2VzIGZyb20gaXRzCitwYXJlbnQgaXJxX2NoaXAgd2hlbiBuZWVkZWQuIFNvIHdlIGNvdWxkIGFjaGlldmUgYSBtdWNoIGNsZWFuZXIKK3NvZnR3YXJlIGFyY2hpdGVjdHVyZS4KKworRm9yIGFuIGludGVycnVwdCBjb250cm9sbGVyIGRyaXZlciB0byBzdXBwb3J0IGhpZXJhcmNoeSBpcnFfZG9tYWluLCBpdAorbmVlZHMgdG86CisxKSBJbXBsZW1lbnQgaXJxX2RvbWFpbl9vcHMuYWxsb2MgYW5kIGlycV9kb21haW5fb3BzLmZyZWUKKzIpIE9wdGlvbmFsbHkgaW1wbGVtZW50IGlycV9kb21haW5fb3BzLmFjdGl2YXRlIGFuZAorICAgaXJxX2RvbWFpbl9vcHMuZGVhY3RpdmF0ZS4KKzMpIE9wdGlvbmFsbHkgaW1wbGVtZW50IGFuIGlycV9jaGlwIHRvIG1hbmFnZSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAgIGhhcmR3YXJlLgorNCkgTm8gbmVlZCB0byBpbXBsZW1lbnQgaXJxX2RvbWFpbl9vcHMubWFwIGFuZCBpcnFfZG9tYWluX29wcy51bm1hcCwKKyAgIHRoZXkgYXJlIHVudXNlZCB3aXRoIGhpZXJhcmNoeSBpcnFfZG9tYWluLgorCitIaWVyYXJjaHkgaXJxX2RvbWFpbiBtYXkgYWxzbyBiZSB1c2VkIHRvIHN1cHBvcnQgb3RoZXIgYXJjaGl0ZWN0dXJlcywKK3N1Y2ggYXMgQVJNLCBBUk02NCBldGMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAppbmRleCBiZjc3ODMzLi43NDVmNDI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKQEAgLTM2LDcgKzM2LDcgQEAKIAlleGVjdXRlZCBpbiB1c2VyIG1vZGUsIG9yIGV4ZWN1dGVkIGluIHRoZSBpZGxlIGxvb3AsIHdlIGNhbgogCXNhZmVseSBmcmVlIHVwIHRoYXQgaXRlbS4KIAotCVByZWVtcHRpYmxlIHZhcmlhbnRzIG9mIFJDVSAoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpIGdldCB0aGUKKwlQcmVlbXB0aWJsZSB2YXJpYW50cyBvZiBSQ1UgKENPTkZJR19QUkVFTVBUX1JDVSkgZ2V0IHRoZQogCXNhbWUgZWZmZWN0LCBidXQgcmVxdWlyZSB0aGF0IHRoZSByZWFkZXJzIG1hbmlwdWxhdGUgQ1BVLWxvY2FsCiAJY291bnRlcnMuICBUaGVzZSBjb3VudGVycyBhbGxvdyBsaW1pdGVkIHR5cGVzIG9mIGJsb2NraW5nIHdpdGhpbgogCVJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuICBTUkNVIGFsc28gdXNlcyBDUFUtbG9jYWwKQEAgLTgxLDcgKzgxLDcgQEAKIG8JSSBoZWFyIHRoYXQgUkNVIG5lZWRzIHdvcmsgaW4gb3JkZXIgdG8gc3VwcG9ydCByZWFsdGltZSBrZXJuZWxzPwogCiAJVGhpcyB3b3JrIGlzIGxhcmdlbHkgY29tcGxldGVkLiAgUmVhbHRpbWUtZnJpZW5kbHkgUkNVIGNhbiBiZQotCWVuYWJsZWQgdmlhIHRoZSBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBrZXJuZWwgY29uZmlndXJhdGlvbgorCWVuYWJsZWQgdmlhIHRoZSBDT05GSUdfUFJFRU1QVF9SQ1Uga2VybmVsIGNvbmZpZ3VyYXRpb24KIAlwYXJhbWV0ZXIuICBIb3dldmVyLCB3b3JrIGlzIGluIHByb2dyZXNzIGZvciBlbmFibGluZyBwcmlvcml0eQogCWJvb3N0aW5nIG9mIHByZWVtcHRlZCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLglUaGlzIGlzCiAJbmVlZGVkIGlmIHlvdSBoYXZlIENQVS1ib3VuZCByZWFsdGltZSB0aHJlYWRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKaW5kZXggZWY1YTJmZC4uZWQxODZhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0CkBAIC0yNiwxMiArMjYsNiBAQAogCVN0YWxsLXdhcm5pbmcgbWVzc2FnZXMgbWF5IGJlIGVuYWJsZWQgYW5kIGRpc2FibGVkIGNvbXBsZXRlbHkgdmlhCiAJL3N5cy9tb2R1bGUvcmN1cGRhdGUvcGFyYW1ldGVycy9yY3VfY3B1X3N0YWxsX3N1cHByZXNzLgogCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFCi0KLQlUaGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBjYXVzZXMgdGhlIHN0YWxsIHdhcm5pbmcgdG8KLQlhbHNvIGR1bXAgdGhlIHN0YWNrcyBvZiBhbnkgdGFza3MgdGhhdCBhcmUgYmxvY2tpbmcgdGhlIGN1cnJlbnQKLQlSQ1UtcHJlZW1wdCBncmFjZSBwZXJpb2QuCi0KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8KIAogCVRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGNhdXNlcyB0aGUgc3RhbGwgd2FybmluZyB0bwpAQCAtNzcsNyArNzEsNyBAQAogYW5kIHRoYXQgdGhlIHN0YWxsIHdhcyBhZmZlY3RpbmcgUkNVLXNjaGVkLiAgVGhpcyBtZXNzYWdlIHdpbGwgbm9ybWFsbHkgYmUKIGZvbGxvd2VkIGJ5IGEgc3RhY2sgZHVtcCBvZiB0aGUgb2ZmZW5kaW5nIENQVS4gIE9uIFRSRUVfUkNVIGtlcm5lbCBidWlsZHMsCiBSQ1UgYW5kIFJDVS1zY2hlZCBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlIHNhbWUgdW5kZXJseWluZyBtZWNoYW5pc20sCi13aGlsZSBvbiBUUkVFX1BSRUVNUFRfUkNVIGtlcm5lbCBidWlsZHMsIFJDVSBpcyBpbnN0ZWFkIGltcGxlbWVudGVkCit3aGlsZSBvbiBQUkVFTVBUX1JDVSBrZXJuZWwgYnVpbGRzLCBSQ1UgaXMgaW5zdGVhZCBpbXBsZW1lbnRlZAogYnkgcmN1X3ByZWVtcHRfc3RhdGUuCiAKIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgb2ZmZW5kaW5nIENQVSBmYWlscyB0byBwcmludCBvdXQgYSBzdGFsbC13YXJuaW5nCkBAIC04OSw3ICs4Myw3IEBACiBUaGlzIG1lc3NhZ2UgaW5kaWNhdGVzIHRoYXQgQ1BVIDIgZGV0ZWN0ZWQgdGhhdCBDUFVzIDMgYW5kIDUgd2VyZSBib3RoCiBjYXVzaW5nIHN0YWxscywgYW5kIHRoYXQgdGhlIHN0YWxsIHdhcyBhZmZlY3RpbmcgUkNVLWJoLiAgVGhpcyBtZXNzYWdlCiB3aWxsIG5vcm1hbGx5IGJlIGZvbGxvd2VkIGJ5IHN0YWNrIGR1bXBzIGZvciBlYWNoIENQVS4gIFBsZWFzZSBub3RlIHRoYXQKLVRSRUVfUFJFRU1QVF9SQ1UgYnVpbGRzIGNhbiBiZSBzdGFsbGVkIGJ5IHRhc2tzIGFzIHdlbGwgYXMgYnkgQ1BVcywKK1BSRUVNUFRfUkNVIGJ1aWxkcyBjYW4gYmUgc3RhbGxlZCBieSB0YXNrcyBhcyB3ZWxsIGFzIGJ5IENQVXMsCiBhbmQgdGhhdCB0aGUgdGFza3Mgd2lsbCBiZSBpbmRpY2F0ZWQgYnkgUElELCBmb3IgZXhhbXBsZSwgIlAzNDIxIi4KIEl0IGlzIGV2ZW4gcG9zc2libGUgZm9yIGEgcmN1X3ByZWVtcHRfc3RhdGUgc3RhbGwgdG8gYmUgY2F1c2VkIGJ5IGJvdGgKIENQVXMgLWFuZC0gdGFza3MsIGluIHdoaWNoIGNhc2UgdGhlIG9mZmVuZGluZyBDUFVzIGFuZCB0YXNrcyB3aWxsIGFsbApAQCAtMjA1LDEwICsxOTksMTAgQEAKIG8JQSBDUFUtYm91bmQgcmVhbC10aW1lIHRhc2sgaW4gYSBDT05GSUdfUFJFRU1QVF9SVCBrZXJuZWwgdGhhdAogCWlzIHJ1bm5pbmcgYXQgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgUkNVIHNvZnRpcnEgdGhyZWFkcy4KIAlUaGlzIHdpbGwgcHJldmVudCBSQ1UgY2FsbGJhY2tzIGZyb20gZXZlciBiZWluZyBpbnZva2VkLAotCWFuZCBpbiBhIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGtlcm5lbCB3aWxsIGZ1cnRoZXIgcHJldmVudAorCWFuZCBpbiBhIENPTkZJR19QUkVFTVBUX1JDVSBrZXJuZWwgd2lsbCBmdXJ0aGVyIHByZXZlbnQKIAlSQ1UgZ3JhY2UgcGVyaW9kcyBmcm9tIGV2ZXIgY29tcGxldGluZy4gIEVpdGhlciB3YXksIHRoZQogCXN5c3RlbSB3aWxsIGV2ZW50dWFsbHkgcnVuIG91dCBvZiBtZW1vcnkgYW5kIGhhbmcuICBJbiB0aGUKLQlDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBjYXNlLCB5b3UgbWlnaHQgc2VlIHN0YWxsLXdhcm5pbmcKKwlDT05GSUdfUFJFRU1QVF9SQ1UgY2FzZSwgeW91IG1pZ2h0IHNlZSBzdGFsbC13YXJuaW5nCiAJbWVzc2FnZXMuCiAKIG8JQSBoYXJkd2FyZSBvciBzb2Z0d2FyZSBpc3N1ZSBzaHV0cyBvZmYgdGhlIHNjaGVkdWxlci1jbG9jawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0CmluZGV4IDkxMDg3MGIuLmI2M2I5YmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQKQEAgLTgsNyArOCw3IEBACiBmb3IgcmN1dHJlZSBhbmQgbmV4dCBmb3IgcmN1dGlueS4KIAogCi1DT05GSUdfVFJFRV9SQ1UgYW5kIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKK0NPTkZJR19UUkVFX1JDVSBhbmQgQ09ORklHX1BSRUVNUFRfUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKIAogVGhlc2UgaW1wbGVtZW50YXRpb25zIG9mIFJDVSBwcm92aWRlIHNldmVyYWwgZGVidWdmcyBkaXJlY3RvcmllcyB1bmRlciB0aGUKIHRvcC1sZXZlbCBkaXJlY3RvcnkgInJjdSI6CkBAIC0xOCw3ICsxOCw3IEBACiByY3UvcmN1X3NjaGVkCiAKIEVhY2ggZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmbGF2b3Igb2YgUkNVLgotTm90ZSB0aGF0IHJjdS9yY3VfcHJlZW1wdCBpcyBvbmx5IHByZXNlbnQgZm9yIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVLgorTm90ZSB0aGF0IHJjdS9yY3VfcHJlZW1wdCBpcyBvbmx5IHByZXNlbnQgZm9yIENPTkZJR19QUkVFTVBUX1JDVS4KIEZvciBDT05GSUdfVFJFRV9SQ1UsIHRoZSBSQ1UgZmxhdm9yIG1hcHMgb250byB0aGUgUkNVLXNjaGVkIGZsYXZvciwKIHNvIHRoYXQgYWN0aXZpdHkgZm9yIGJvdGggYXBwZWFycyBpbiByY3UvcmN1X3NjaGVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAppbmRleCBlNDhjNTdmLi44OGRmY2UxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKQEAgLTEzNyw3ICsxMzcsNyBAQAogCVVzZWQgYnkgYSByZWFkZXIgdG8gaW5mb3JtIHRoZSByZWNsYWltZXIgdGhhdCB0aGUgcmVhZGVyIGlzCiAJZW50ZXJpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSXQgaXMgaWxsZWdhbAogCXRvIGJsb2NrIHdoaWxlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwgdGhvdWdoCi0Ja2VybmVscyBidWlsdCB3aXRoIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGNhbiBwcmVlbXB0IFJDVQorCWtlcm5lbHMgYnVpbHQgd2l0aCBDT05GSUdfUFJFRU1QVF9SQ1UgY2FuIHByZWVtcHQgUkNVCiAJcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiAgQW55IFJDVS1wcm90ZWN0ZWQgZGF0YSBzdHJ1Y3R1cmUKIAlhY2Nlc3NlZCBkdXJpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGlzIGd1YXJhbnRlZWQgdG8KIAlyZW1haW4gdW5yZWNsYWltZWQgZm9yIHRoZSBmdWxsIGR1cmF0aW9uIG9mIHRoYXQgY3JpdGljYWwgc2VjdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL2Zpcm13YXJlLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL2Zpcm13YXJlLnR4dAppbmRleCBjMmU0NjhmLi5kYTY3MTNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9maXJtd2FyZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vZmlybXdhcmUudHh0CkBAIC03LDMyICs3LDE0IEBACiBhIG5lZWQgdG8gcHJvdmlkZSBhbiBpbnRlcmZhY2UgZm9yIHN1Y2ggcGxhdGZvcm1zIHRvIHNwZWNpZnkgYXZhaWxhYmxlIGZpcm13YXJlCiBvcGVyYXRpb25zIGFuZCBjYWxsIHRoZW0gd2hlbiBuZWVkZWQuCiAKLUZpcm13YXJlIG9wZXJhdGlvbnMgY2FuIGJlIHNwZWNpZmllZCB1c2luZyBzdHJ1Y3QgZmlybXdhcmVfb3BzCi0KLQlzdHJ1Y3QgZmlybXdhcmVfb3BzIHsKLQkJLyoKLQkJKiBFbnRlcnMgQ1BVIGlkbGUgbW9kZQotCQkqLwotCQlpbnQgKCpkb19pZGxlKSh2b2lkKTsKLQkJLyoKLQkJKiBTZXRzIGJvb3QgYWRkcmVzcyBvZiBzcGVjaWZpZWQgcGh5c2ljYWwgQ1BVCi0JCSovCi0JCWludCAoKnNldF9jcHVfYm9vdF9hZGRyKShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGJvb3RfYWRkcik7Ci0JCS8qCi0JCSogQm9vdHMgc3BlY2lmaWVkIHBoeXNpY2FsIENQVQotCQkqLwotCQlpbnQgKCpjcHVfYm9vdCkoaW50IGNwdSk7Ci0JCS8qCi0JCSogSW5pdGlhbGl6ZXMgTDIgY2FjaGUKLQkJKi8KLQkJaW50ICgqbDJ4MF9pbml0KSh2b2lkKTsKLQl9OwotCi1hbmQgdGhlbiByZWdpc3RlcmVkIHdpdGggcmVnaXN0ZXJfZmlybXdhcmVfb3BzIGZ1bmN0aW9uCitGaXJtd2FyZSBvcGVyYXRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgZmlsbGluZyBpbiBhIHN0cnVjdCBmaXJtd2FyZV9vcHMKK3dpdGggYXBwcm9wcmlhdGUgY2FsbGJhY2tzIGFuZCB0aGVuIHJlZ2lzdGVyaW5nIGl0IHdpdGggcmVnaXN0ZXJfZmlybXdhcmVfb3BzKCkKK2Z1bmN0aW9uLgogCiAJdm9pZCByZWdpc3Rlcl9maXJtd2FyZV9vcHMoY29uc3Qgc3RydWN0IGZpcm13YXJlX29wcyAqb3BzKQogCi10aGUgb3BzIHBvaW50ZXIgbXVzdCBiZSBub24tTlVMTC4KK1RoZSBvcHMgcG9pbnRlciBtdXN0IGJlIG5vbi1OVUxMLiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHN0cnVjdCBmaXJtd2FyZV9vcHMKK2FuZCBpdHMgbWVtYmVycyBjYW4gYmUgZm91bmQgaW4gYXJjaC9hcm0vaW5jbHVkZS9hc20vZmlybXdhcmUuaCBoZWFkZXIuCiAKIFRoZXJlIGlzIGEgZGVmYXVsdCwgZW1wdHkgc2V0IG9mIG9wZXJhdGlvbnMgcHJvdmlkZWQsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KIHNldCBhbnl0aGluZyBpZiBwbGF0Zm9ybSBkb2VzIG5vdCByZXF1aXJlIGZpcm13YXJlIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9zdW54aS9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2FybS9zdW54aS9SRUFETUUKaW5kZXggNzk0NTIzODQuLmU2OGQxNjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL3N1bnhpL1JFQURNRQorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9zdW54aS9SRUFETUUKQEAgLTM3LDE2ICszNywyNiBAQAogICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTIwL0EyMCUyMFVzZXIlMjBNYW51YWwlMjAyMDEzLTAzLTIyLnBkZgogCiAgICAgICAtIEFsbHdpbm5lciBBMjMKLSAgICAgICAgKyBOb3QgU3VwcG9ydGVkCisgICAgICAgICsgRGF0YXNoZWV0CisgICAgICAgICAgaHR0cDovL2RsLmxpbnV4LXN1bnhpLm9yZy9BMjMvQTIzJTIwRGF0YXNoZWV0JTIwVjEuMCUyMDIwMTMwODMwLnBkZgorICAgICAgICArIFVzZXIgTWFudWFsCisgICAgICAgICAgaHR0cDovL2RsLmxpbnV4LXN1bnhpLm9yZy9BMjMvQTIzJTIwVXNlciUyME1hbnVhbCUyMFYxLjAlMjAyMDEzMDgzMC5wZGYKIAogICAgICogUXVhZCBBUk0gQ29ydGV4LUE3IGJhc2VkIFNvQ3MKICAgICAgIC0gQWxsd2lubmVyIEEzMSAoc3VuNmkpCiAgICAgICAgICsgRGF0YXNoZWV0Ci0gICAgICAgICAgaHR0cDovL2RsLmxpbnV4LXN1bnhpLm9yZy9BMzEvQTMxJTIwRGF0YXNoZWV0JTIwLSUyMHYxLjAwJTIwKDIwMTItMTItMjQpLnBkZgorICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTMxL0EzeF9yZWxlYXNlX2RvY3VtZW50L0EzMS9JQy9BMzElMjBkYXRhc2hlZXQlMjBWMS4zJTIwMjAxMzExMDYucGRmCisgICAgICAgICsgVXNlciBNYW51YWwKKyAgICAgICAgICBodHRwOi8vZGwubGludXgtc3VueGkub3JnL0EzMS9BM3hfcmVsZWFzZV9kb2N1bWVudC9BMzEvSUMvQTMxJTIwdXNlciUyMG1hbnVhbCUyMFYxLjElMjAyMDEzMDYzMC5wZGYKIAogICAgICAgLSBBbGx3aW5uZXIgQTMxcyAoc3VuNmkpCiAgICAgICAgICsgTm90IFN1cHBvcnRlZAorICAgICAgICArIERhdGFzaGVldAorICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTMxL0EzeF9yZWxlYXNlX2RvY3VtZW50L0EzMXMvSUMvQTMxcyUyMGRhdGFzaGVldCUyMFYxLjMlMjAyMDEzMTEwNi5wZGYKKyAgICAgICAgKyBVc2VyIE1hbnVhbAorICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTMxL0EzeF9yZWxlYXNlX2RvY3VtZW50L0EzMXMvSUMvQTMxcyUyMFVzZXIlMjBNYW51YWwlMjAlMjBWMS4wJTIwMjAxMzAzMjIucGRmCiAKICAgICAqIFF1YWQgQVJNIENvcnRleC1BMTUsIFF1YWQgQVJNIENvcnRleC1BNyBiYXNlZCBTb0NzCiAgICAgICAtIEFsbHdpbm5lciBBODAKLSAgICAgICAgKyBOb3QgU3VwcG9ydGVkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICAgICAgICArIERhdGFzaGVldAorCSAgaHR0cDovL2RsLmxpbnV4LXN1bnhpLm9yZy9BODAvQTgwX0RhdGFzaGVldF9SZXZpc2lvbl8xLjBfMDQwNC5wZGYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtNjQvbGVnYWN5X2luc3RydWN0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2FybTY0L2xlZ2FjeV9pbnN0cnVjdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjNkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybTY0L2xlZ2FjeV9pbnN0cnVjdGlvbnMudHh0CkBAIC0wLDAgKzEsNDUgQEAKK1RoZSBhcm02NCBwb3J0IG9mIHRoZSBMaW51eCBrZXJuZWwgcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydAorZW11bGF0aW9uIG9mIGluc3RydWN0aW9ucyB3aGljaCBoYXZlIGJlZW4gZGVwcmVjYXRlZCwgb3Igb2Jzb2xldGVkIGluCit0aGUgYXJjaGl0ZWN0dXJlLiBUaGUgaW5mcmFzdHJ1Y3R1cmUgY29kZSB1c2VzIHVuZGVmaW5lZCBpbnN0cnVjdGlvbgoraG9va3MgdG8gc3VwcG9ydCBlbXVsYXRpb24uIFdoZXJlIGF2YWlsYWJsZSBpdCBhbHNvIGFsbG93cyB0dXJuaW5nIG9uCit0aGUgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGluIGhhcmR3YXJlLgorCitUaGUgZW11bGF0aW9uIG1vZGUgY2FuIGJlIGNvbnRyb2xsZWQgYnkgd3JpdGluZyB0byBzeXNjdGwgbm9kZXMKKygvcHJvYy9zeXMvYWJpKS4gVGhlIGZvbGxvd2luZyBleHBsYWlucyB0aGUgZGlmZmVyZW50IGV4ZWN1dGlvbgorYmVoYXZpb3VycyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIG9mIHRoZSBzeXNjdGwgbm9kZXMgLQorCisqIFVuZGVmCisgIFZhbHVlOiAwCisgIEdlbmVyYXRlcyB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gYWJvcnQuIERlZmF1bHQgZm9yIGluc3RydWN0aW9ucyB0aGF0CisgIGhhdmUgYmVlbiBvYnNvbGV0ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZSwgZS5nLiwgU1dQCisKKyogRW11bGF0ZQorICBWYWx1ZTogMQorICBVc2VzIHNvZnR3YXJlIGVtdWxhdGlvbi4gVG8gYWlkIG1pZ3JhdGlvbiBvZiBzb2Z0d2FyZSwgaW4gdGhpcyBtb2RlCisgIHVzYWdlIG9mIGVtdWxhdGVkIGluc3RydWN0aW9uIGlzIHRyYWNlZCBhcyB3ZWxsIGFzIHJhdGUgbGltaXRlZAorICB3YXJuaW5ncyBhcmUgaXNzdWVkLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBkZXByZWNhdGVkCisgIGluc3RydWN0aW9ucywgLmUuZy4sIENQMTUgYmFycmllcnMKKworKiBIYXJkd2FyZSBFeGVjdXRpb24KKyAgVmFsdWU6IDIKKyAgQWx0aG91Z2ggbWFya2VkIGFzIGRlcHJlY2F0ZWQsIHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBzdXBwb3J0IHRoZQorICBlbmFibGluZy9kaXNhYmxpbmcgb2YgaGFyZHdhcmUgc3VwcG9ydCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZQorICBpbnN0cnVjdGlvbnMuIFVzaW5nIGhhcmR3YXJlIGV4ZWN1dGlvbiBnZW5lcmFsbHkgcHJvdmlkZXMgYmV0dGVyCisgIHBlcmZvcm1hbmNlLCBidXQgYXQgdGhlIGxvc3Mgb2YgYWJpbGl0eSB0byBnYXRoZXIgcnVudGltZSBzdGF0aXN0aWNzCisgIGFib3V0IHRoZSB1c2Ugb2YgdGhlIGRlcHJlY2F0ZWQgaW5zdHJ1Y3Rpb25zLgorCitUaGUgZGVmYXVsdCBtb2RlIGRlcGVuZHMgb24gdGhlIHN0YXR1cyBvZiB0aGUgaW5zdHJ1Y3Rpb24gaW4gdGhlCithcmNoaXRlY3R1cmUuIERlcHJlY2F0ZWQgaW5zdHJ1Y3Rpb25zIHNob3VsZCBkZWZhdWx0IHRvIGVtdWxhdGlvbgord2hpbGUgb2Jzb2xldGUgaW5zdHJ1Y3Rpb25zIG11c3QgYmUgdW5kZWZpbmVkIGJ5IGRlZmF1bHQuCisKK1N1cHBvcnRlZCBsZWdhY3kgaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBTV1B7Qn0KK05vZGU6IC9wcm9jL3N5cy9hYmkvc3dwCitTdGF0dXM6IE9ic29sZXRlCitEZWZhdWx0OiBVbmRlZiAoMCkKKworKiBDUDE1IEJhcnJpZXJzCitOb2RlOiAvcHJvYy9zeXMvYWJpL2NwMTVfYmFycmllcgorU3RhdHVzOiBEZXByZWNhdGVkCitEZWZhdWx0OiBFbXVsYXRlICgxKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dCBiL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKaW5kZXggNjg1NDJmZS4uMTgzZTQxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2F0b21pY19vcHMudHh0CkBAIC03LDEyICs3LDEzIEBACiBtYWludGFpbmVycyBvbiBob3cgdG8gaW1wbGVtZW50IGF0b21pYyBjb3VudGVyLCBiaXRvcHMsIGFuZCBzcGlubG9jawogaW50ZXJmYWNlcyBwcm9wZXJseS4KIAotCVRoZSBhdG9taWNfdCB0eXBlIHNob3VsZCBiZSBkZWZpbmVkIGFzIGEgc2lnbmVkIGludGVnZXIuCi1BbHNvLCBpdCBzaG91bGQgYmUgbWFkZSBvcGFxdWUgc3VjaCB0aGF0IGFueSBraW5kIG9mIGNhc3QgdG8gYSBub3JtYWwKLUMgaW50ZWdlciB0eXBlIHdpbGwgZmFpbC4gIFNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgc2hvdWxkCi1zdWZmaWNlOgorCVRoZSBhdG9taWNfdCB0eXBlIHNob3VsZCBiZSBkZWZpbmVkIGFzIGEgc2lnbmVkIGludGVnZXIgYW5kCit0aGUgYXRvbWljX2xvbmdfdCB0eXBlIGFzIGEgc2lnbmVkIGxvbmcgaW50ZWdlci4gIEFsc28sIHRoZXkgc2hvdWxkCitiZSBtYWRlIG9wYXF1ZSBzdWNoIHRoYXQgYW55IGtpbmQgb2YgY2FzdCB0byBhIG5vcm1hbCBDIGludGVnZXIgdHlwZQord2lsbCBmYWlsLiAgU29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBzaG91bGQgc3VmZmljZToKIAogCXR5cGVkZWYgc3RydWN0IHsgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisJdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIGNvdW50ZXI7IH0gYXRvbWljX2xvbmdfdDsKIAogSGlzdG9yaWNhbGx5LCBjb3VudGVyIGhhcyBiZWVuIGRlY2xhcmVkIHZvbGF0aWxlLiAgVGhpcyBpcyBub3cgZGlzY291cmFnZWQuCiBTZWUgRG9jdW1lbnRhdGlvbi92b2xhdGlsZS1jb25zaWRlcmVkLWhhcm1mdWwudHh0IGZvciB0aGUgY29tcGxldGUgcmF0aW9uYWxlLgpAQCAtMzcsNiArMzgsOSBAQAogcHJvcGVyIGltcGxpY2l0IG9yIGV4cGxpY2l0IHJlYWQgbWVtb3J5IGJhcnJpZXIgaXMgbmVlZGVkIGJlZm9yZSByZWFkaW5nIHRoZQogdmFsdWUgd2l0aCBhdG9taWNfcmVhZCBmcm9tIGFub3RoZXIgdGhyZWFkLgogCitBcyB3aXRoIGFsbCBvZiB0aGUgYXRvbWljXyBpbnRlcmZhY2VzLCByZXBsYWNlIHRoZSBsZWFkaW5nICJhdG9taWNfIgord2l0aCAiYXRvbWljX2xvbmdfIiB0byBvcGVyYXRlIG9uIGF0b21pY19sb25nX3QuCisKIFRoZSBzZWNvbmQgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIGF0IHJ1bnRpbWUsIGFzIGluOgogCiAJc3RydWN0IGZvbyB7IGF0b21pY190IGNvdW50ZXI7IH07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKaW5kZXggMjEwMWU3MS4uNmI5NzJiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dApAQCAtODI3LDEwICs4MjcsNiBAQAogdGhhdCByZXF1ZXN0cyBhcmUgcmVzdGFydGVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcXVldWUuIFRoaXMgbWF5IGhhcHBlbgogaWYgdGhlIGRyaXZlciBuZWVkcyB0byB1c2UgYmxrX3F1ZXVlX2ludmFsaWRhdGVfdGFncygpLgogCi1UYWdnaW5nIGFsc28gZGVmaW5lcyBhIG5ldyByZXF1ZXN0IGZsYWcsIFJFUV9RVUVVRUQuIFRoaXMgaXMgc2V0IHdoZW5ldmVyCi1hIHJlcXVlc3QgaXMgY3VycmVudGx5IHRhZ2dlZC4gWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZmxhZyBkaXJlY3RseSwKLWJsa19ycV90YWdnZWQocnEpIGlzIHRoZSBwb3J0YWJsZSB3YXkgdG8gZG8gc28uCi0KIDMuMyBJL08gU3VibWlzc2lvbgogCiBUaGUgcm91dGluZSBzdWJtaXRfYmlvKCkgaXMgdXNlZCB0byBzdWJtaXQgYSBzaW5nbGUgaW8uIEhpZ2hlciBsZXZlbCBpL28KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9jYWNoZS1wb2xpY2llcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvY2FjaGUtcG9saWNpZXMudHh0CmluZGV4IDY2YzI3NzQuLjBkMTI0YTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9jYWNoZS1wb2xpY2llcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2NhY2hlLXBvbGljaWVzLnR4dApAQCAtNDcsMjAgKzQ3LDI2IEBACiAJJ2Rpc2NhcmRfcHJvbW90ZV9hZGp1c3RtZW50IDx2YWx1ZT4nCiAKIFRoZSBzZXF1ZW50aWFsIHRocmVzaG9sZCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBjb250aWd1b3VzIEkvT3MKLXJlcXVpcmVkIGJlZm9yZSBhIHN0cmVhbSBpcyB0cmVhdGVkIGFzIHNlcXVlbnRpYWwuICBUaGUgcmFuZG9tIHRocmVzaG9sZAorcmVxdWlyZWQgYmVmb3JlIGEgc3RyZWFtIGlzIHRyZWF0ZWQgYXMgc2VxdWVudGlhbC4gIE9uY2UgYSBzdHJlYW0gaXMKK2NvbnNpZGVyZWQgc2VxdWVudGlhbCBpdCB3aWxsIGJ5cGFzcyB0aGUgY2FjaGUuICBUaGUgcmFuZG9tIHRocmVzaG9sZAogaXMgdGhlIG51bWJlciBvZiBpbnRlcnZlbmluZyBub24tY29udGlndW91cyBJL09zIHRoYXQgbXVzdCBiZSBzZWVuCiBiZWZvcmUgdGhlIHN0cmVhbSBpcyB0cmVhdGVkIGFzIHJhbmRvbSBhZ2Fpbi4KIAogVGhlIHNlcXVlbnRpYWwgYW5kIHJhbmRvbSB0aHJlc2hvbGRzIGRlZmF1bHQgdG8gNTEyIGFuZCA0IHJlc3BlY3RpdmVseS4KIAotTGFyZ2UsIHNlcXVlbnRpYWwgaW9zIGFyZSBwcm9iYWJseSBiZXR0ZXIgbGVmdCBvbiB0aGUgb3JpZ2luIGRldmljZQotc2luY2Ugc3BpbmRsZXMgdGVuZCB0byBoYXZlIGdvb2QgYmFuZHdpZHRoLiBUaGUgaW9fdHJhY2tlciBjb3VudHMKLWNvbnRpZ3VvdXMgSS9PcyB0byB0cnkgdG8gc3BvdCB3aGVuIHRoZSBpbyBpcyBpbiBvbmUgb2YgdGhlc2Ugc2VxdWVudGlhbAotbW9kZXMuCitMYXJnZSwgc2VxdWVudGlhbCBJL09zIGFyZSBwcm9iYWJseSBiZXR0ZXIgbGVmdCBvbiB0aGUgb3JpZ2luIGRldmljZQorc2luY2Ugc3BpbmRsZXMgdGVuZCB0byBoYXZlIGdvb2Qgc2VxdWVudGlhbCBJL08gYmFuZHdpZHRoLiAgVGhlCitpb190cmFja2VyIGNvdW50cyBjb250aWd1b3VzIEkvT3MgdG8gdHJ5IHRvIHNwb3Qgd2hlbiB0aGUgSS9PIGlzIGluIG9uZQorb2YgdGhlc2Ugc2VxdWVudGlhbCBtb2Rlcy4gIEJ1dCB0aGVyZSBhcmUgdXNlLWNhc2VzIGZvciB3YW50aW5nIHRvCitwcm9tb3RlIHNlcXVlbnRpYWwgYmxvY2tzIHRvIHRoZSBjYWNoZSAoZS5nLiBmYXN0IGFwcGxpY2F0aW9uIHN0YXJ0dXApLgorSWYgc2VxdWVudGlhbCB0aHJlc2hvbGQgaXMgc2V0IHRvIDAgdGhlIHNlcXVlbnRpYWwgSS9PIGRldGVjdGlvbiBpcworZGlzYWJsZWQgYW5kIHNlcXVlbnRpYWwgSS9PIHdpbGwgbm8gbG9uZ2VyIGltcGxpY2l0bHkgYnlwYXNzIHRoZSBjYWNoZS4KK1NldHRpbmcgdGhlIHJhbmRvbSB0aHJlc2hvbGQgdG8gMCBkb2VzIF9ub3RfIGRpc2FibGUgdGhlIHJhbmRvbSBJL08KK3N0cmVhbSBkZXRlY3Rpb24uCiAKLUludGVybmFsbHkgdGhlIG1xIHBvbGljeSBtYWludGFpbnMgYSBwcm9tb3Rpb24gdGhyZXNob2xkIHZhcmlhYmxlLiAgSWYKLXRoZSBoaXQgY291bnQgb2YgYSBibG9jayBub3QgaW4gdGhlIGNhY2hlIGdvZXMgYWJvdmUgdGhpcyB0aHJlc2hvbGQgaXQKLWdldHMgcHJvbW90ZWQgdG8gdGhlIGNhY2hlLiAgVGhlIHJlYWQsIHdyaXRlIGFuZCBkaXNjYXJkIHByb21vdGUgYWRqdXN0bWVudAorSW50ZXJuYWxseSB0aGUgbXEgcG9saWN5IGRldGVybWluZXMgYSBwcm9tb3Rpb24gdGhyZXNob2xkLiAgSWYgdGhlIGhpdAorY291bnQgb2YgYSBibG9jayBub3QgaW4gdGhlIGNhY2hlIGdvZXMgYWJvdmUgdGhpcyB0aHJlc2hvbGQgaXQgZ2V0cworcHJvbW90ZWQgdG8gdGhlIGNhY2hlLiAgVGhlIHJlYWQsIHdyaXRlIGFuZCBkaXNjYXJkIHByb21vdGUgYWRqdXN0bWVudAogdHVuYWJsZXMgYWxsb3cgeW91IHRvIHR3ZWFrIHRoZSBwcm9tb3Rpb24gdGhyZXNob2xkIGJ5IGFkZGluZyBhIHNtYWxsCiB2YWx1ZSBiYXNlZCBvbiB0aGUgaW8gdHlwZS4gIFRoZXkgZGVmYXVsdCB0byA0LCA4IGFuZCAxIHJlc3BlY3RpdmVseS4KIElmIHlvdSdyZSB0cnlpbmcgdG8gcXVpY2tseSB3YXJtIGEgbmV3IGNhY2hlIGRldmljZSB5b3UgbWF5IHdpc2ggdG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYW1sb2dpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FtbG9naWMudHh0CmluZGV4IDdlZWNlNzIuLjhmZTgxNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYW1sb2dpYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hbWxvZ2ljLnR4dApAQCAtMiw3ICsyLDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQm9hcmRzIHdpdGggdGhlIEFtbG9naWMgTWVzb242IFNvQyBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgorICAgIGNvbXBhdGlibGU6ICJhbWxvZ2ljLG1lc29uNiIKIAotUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgotCi1jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb242IjsKK0JvYXJkcyB3aXRoIHRoZSBBbWxvZ2ljIE1lc29uOCBTb0Mgc2hhbGwgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0eToKKyAgICBjb21wYXRpYmxlOiAiYW1sb2dpYyxtZXNvbjgiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcmNoX3RpbWVyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJjaF90aW1lci50eHQKaW5kZXggMzdiMmNhZi4uMjU2YjRkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcmNoX3RpbWVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FyY2hfdGltZXIudHh0CkBAIC0yMiw2ICsyMiwxNCBAQAogLSBhbHdheXMtb24gOiBhIGJvb2xlYW4gcHJvcGVydHkuIElmIHByZXNlbnQsIHRoZSB0aW1lciBpcyBwb3dlcmVkIHRocm91Z2ggYW4KICAgYWx3YXlzLW9uIHBvd2VyIGRvbWFpbiwgdGhlcmVmb3JlIGl0IG5ldmVyIGxvc2VzIGNvbnRleHQuCiAKKyoqIE9wdGlvbmFsIHByb3BlcnRpZXM6CisKKy0gYXJtLGNwdS1yZWdpc3RlcnMtbm90LWZ3LWNvbmZpZ3VyZWQgOiBGaXJtd2FyZSBkb2VzIG5vdCBpbml0aWFsaXplCisgIGFueSBvZiB0aGUgZ2VuZXJpYyB0aW1lciBDUFUgcmVnaXN0ZXJzLCB3aGljaCBjb250YWluIHRoZWlyCisgIGFyY2hpdGVjdHVyYWxseS1kZWZpbmVkIHJlc2V0IHZhbHVlcy4gT25seSBzdXBwb3J0ZWQgZm9yIDMyLWJpdAorICBzeXN0ZW1zIHdoaWNoIGZvbGxvdyB0aGUgQVJNdjcgYXJjaGl0ZWN0ZWQgcmVzZXQgdmFsdWVzLgorCisKIEV4YW1wbGU6CiAKIAl0aW1lciB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FybS1ib2FyZHMgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FybS1ib2FyZHMKaW5kZXggYzU1NGVkMy4uNTU2Yzg2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcm0tYm9hcmRzCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtLWJvYXJkcwpAQCAtOTIsMyArOTIsNjggQEAKIC0gY29yZS1tb2R1bGU6IHRoZSByb290IG5vZGUgdG8gdGhlIFZlcnNhdGlsZSBwbGF0Zm9ybXMgbXVzdCBoYXZlCiAgIGEgY29yZS1tb2R1bGUgd2l0aCByZWdzIGFuZCB0aGUgY29tcGF0aWJsZSBzdHJpbmdzCiAgICJhcm0sY29yZS1tb2R1bGUtdmVyc2F0aWxlIiwgInN5c2NvbiIKKworQVJNIFJlYWxWaWV3IEJvYXJkcworLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIFJlYWxWaWV3IGJvYXJkcyBjb3ZlciB0YWlsb3JlZCBldmFsdWF0aW9uIGJvYXJkcyB0aGF0IGFyZSB1c2VkIHRvIGV4cGxvcmUKK3RoZSBBUk0xMSBhbmQgQ29ydGV4IEEtOCBhbmQgQ29ydGV4IEEtOSBwcm9jZXNzb3JzLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzIChpbiByb290IG5vZGUpOgorCS8qIFJlYWxWaWV3IEVtdWxhdGlvbiBCYXNlYm9hcmQgKi8KKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1lYiI7CisJIC8qIFJlYWxWaWV3IFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IgQVJNMTE3NkpaRi1TICovCisJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGIxMTc2IjsKKwkvKiBSZWFsVmlldyBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIEFSTTExIE1QQ29yZSAqLworCWNvbXBhdGlibGUgPSAiYXJtLHJlYWx2aWV3LXBiMTFtcCI7CisJLyogUmVhbFZpZXcgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBDb3J0ZXggQS04ICovCisJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGJhOCI7CisJLyogUmVhbFZpZXcgUGxhdGZvcm0gQmFzZWJvYXJkIEV4cGxvcmUgZm9yIENvcnRleCBBLTkgKi8KKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYngiOworCitSZXF1aXJlZCBub2RlczoKKworLSBzb2M6IHNvbWUgbm9kZSBvZiB0aGUgUmVhbFZpZXcgcGxhdGZvcm1zIG11c3QgYmUgdGhlIFNvQworICBub2RlIHRoYXQgY29udGFpbiB0aGUgU29DLXNwZWNpZmljIGRldmljZXMsIHdpdGhlIHRoZSBjb21wYXRpYmxlCisgIHN0cmluZyBzZXQgdG8gb25lIG9mIHRoZXNlIHR1cGxlczoKKyAgICJhcm0scmVhbHZpZXctZWItc29jIiwgInNpbXBsZS1idXMiCisgICAiYXJtLHJlYWx2aWV3LXBiMTE3Ni1zb2MiLCAic2ltcGxlLWJ1cyIKKyAgICJhcm0scmVhbHZpZXctcGIxMW1wLXNvYyIsICJzaW1wbGUtYnVzIgorICAgImFybSxyZWFsdmlldy1wYmE4LXNvYyIsICJzaW1wbGUtYnVzIgorICAgImFybSxyZWFsdmlldy1wYngtc29jIiwgInNpbXBsZS1idXMiCisKKy0gc3lzY29uOiBzb21lIHN1Ym5vZGUgb2YgdGhlIFJlYWxWaWV3IFNvQyBub2RlIG11c3QgYmUgYQorICBzeXN0ZW0gY29udHJvbGxlciBub2RlIHBvaW50aW5nIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVycywKKyAgd2l0aCB0aGUgY29tcGF0aWJsZSBzdHJpbmcgc2V0IHRvIG9uZSBvZiB0aGVzZSB0dXBsZXM6CisgICAiYXJtLHJlYWx2aWV3LWViLXN5c2NvbiIsICJzeXNjb24iCisgICAiYXJtLHJlYWx2aWV3LXBiMTE3Ni1zeXNjb24iLCAic3lzY29uIgorICAgImFybSxyZWFsdmlldy1wYjExbXAtc3lzY29uIiwgInN5c2NvbiIKKyAgICJhcm0scmVhbHZpZXctcGJhOC1zeXNjb24iLCAic3lzY29uIgorICAgImFybSxyZWFsdmlldy1wYngtc3lzY29uIiwgInN5c2NvbiIKKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciB0aGUgc3lzdGVtIGNvbnRyb2xsZXI6CisgIC0gcmVnczogdGhlIGxvY2F0aW9uIGFuZCBzaXplIG9mIHRoZSBzeXN0ZW0gY29udHJvbGxlciByZWdpc3RlcnMsCisgICAgb25lIHJhbmdlIG9mIDB4MTAwMCBieXRlcy4KKworRXhhbXBsZToKKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQVJNIFJlYWxWaWV3IFBCMTE3NiB3aXRoIGRldmljZSB0cmVlIjsKKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYiOworCisJc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYtc29jIiwgInNpbXBsZS1idXMiOworCQlyYW5nZXM7CisKKwkJc3lzY29uOiBzeXNjb25AMTAwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctc3lzY29uIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgxMDAwMDAwMCAweDEwMDA+OworCQl9OworCisJfTsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2JjbS9jeWdudXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9iY20vY3lnbnVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzc3MTY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9iY20vY3lnbnVzLnR4dApAQCAtMCwwICsxLDMxIEBACitCcm9hZGNvbSBDeWdudXMgZGV2aWNlIHRyZWUgYmluZGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0JvYXJkcyB3aXRoIEN5Z251cyBTb0NzIHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorCitSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydHk6CisKK0JDTTExMzAwCitjb21wYXRpYmxlID0gImJyY20sYmNtMTEzMDAiLCAiYnJjbSxjeWdudXMiOworCitCQ00xMTMyMAorY29tcGF0aWJsZSA9ICJicmNtLGJjbTExMzIwIiwgImJyY20sY3lnbnVzIjsKKworQkNNMTEzNTAKK2NvbXBhdGlibGUgPSAiYnJjbSxiY20xMTM1MCIsICJicmNtLGN5Z251cyI7CisKK0JDTTExMzYwCitjb21wYXRpYmxlID0gImJyY20sYmNtMTEzNjAiLCAiYnJjbSxjeWdudXMiOworCitCQ001ODMwMAorY29tcGF0aWJsZSA9ICJicmNtLGJjbTU4MzAwIiwgImJyY20sY3lnbnVzIjsKKworQkNNNTgzMDIKK2NvbXBhdGlibGUgPSAiYnJjbSxiY201ODMwMiIsICJicmNtLGN5Z251cyI7CisKK0JDTTU4MzAzCitjb21wYXRpYmxlID0gImJyY20sYmNtNTgzMDMiLCAiYnJjbSxjeWdudXMiOworCitCQ001ODMwNQorY29tcGF0aWJsZSA9ICJicmNtLGJjbTU4MzA1IiwgImJyY20sY3lnbnVzIjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vY3B1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2NwdXMudHh0CmluZGV4IGZjNDQ2MzQ3Li5iMmFhY2JlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2NwdXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vY3B1cy50eHQKQEAgLTIyNyw2ICsyMjcsMTUgQEAKIAkJCSMgTGlzdCBvZiBwaGFuZGxlcyB0byBpZGxlIHN0YXRlIG5vZGVzIHN1cHBvcnRlZAogCQkJICBieSB0aGlzIGNwdSBbM10uCiAKKwktIHJvY2tjaGlwLHBtdQorCQlVc2FnZTogb3B0aW9uYWwgZm9yIHN5c3RlbXMgdGhhdCBoYXZlIGFuICJlbmFibGUtbWV0aG9kIgorCQkgICAgICAgcHJvcGVydHkgdmFsdWUgb2YgInJvY2tjaGlwLHJrMzA2Ni1zbXAiCisJCSAgICAgICBXaGlsZSBvcHRpb25hbCwgaXQgaXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gZ2V0IGFjY2VzcyB0bworCQkgICAgICAgdGhlIGNwdS1jb3JlIHBvd2VyLWRvbWFpbnMuCisJCVZhbHVlIHR5cGU6IDxwaGFuZGxlPgorCQlEZWZpbml0aW9uOiBTcGVjaWZpZXMgdGhlIHN5c2NvbiBub2RlIGNvbnRyb2xsaW5nIHRoZSBjcHUgY29yZQorCQkJICAgIHBvd2VyIGRvbWFpbnMuCisKIEV4YW1wbGUgMSAoZHVhbC1jbHVzdGVyIGJpZy5MSVRUTEUgc3lzdGVtIDMyLWJpdCk6CiAKIAljcHVzIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZnNsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZnNsLnR4dAppbmRleCBlOTM1ZDdkLi40ZThiN2RmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2ZzbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9mc2wudHh0CkBAIC03NCwzICs3NCw0MSBAQAogaS5NWDZxIGdlbmVyaWMgYm9hcmQKIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0aWVzOgogICAgIC0gY29tcGF0aWJsZSA9ICJmc2wsaW14NnEiOworCisKK0ZyZWVzY2FsZSBMUzEwMjFBIFBsYXRmb3JtIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVxdWlyZWQgcm9vdCBub2RlIGNvbXBhdGlibGUgcHJvcGVydGllczoKKyAgLSBjb21wYXRpYmxlID0gImZzbCxsczEwMjFhIjsKKworRnJlZXNjYWxlIExTMTAyMUEgU29DLXNwZWNpZmljIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZyZWVzY2FsZSBTQ0ZHCisgIFNDRkcgaXMgdGhlIHN1cHBsZW1lbnRhbCBjb25maWd1cmF0aW9uIHVuaXQsIHRoYXQgcHJvdmlkZXMgU29DIHNwZWNpZmljCitjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIGZvciB0aGUgY2hpcC4gU3VjaCBhcyBnZXR0aW5nIFBFWCBwb3J0CitzdGF0dXMuCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgIC0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJmc2wsbHMxMDIxYS1zY2ZnIgorICAtIHJlZzogc2hvdWxkIGNvbnRhaW4gYmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgU0NGRyBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycworCitFeGFtcGxlOgorCXNjZmc6IHNjZmdAMTU3MDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtc2NmZyI7CisJCXJlZyA9IDwweDAgMHgxNTcwMDAwIDB4MCAweDEwMDAwPjsKKwl9OworCitGcmVlc2NhbGUgRENGRworICBEQ0ZHIGlzIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiB1bml0LCB0aGF0IHByb3ZpZGVzIGdlbmVyYWwgcHVycG9zZQorY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzIGZvciB0aGUgZGV2aWNlLiBTdWNoIGFzIHNldHRpbmcgdGhlIHNlY29uZGFyeQorY29yZSBzdGFydCBhZGRyZXNzIGFuZCByZWxlYXNlIHRoZSBzZWNvbmRhcnkgY29yZSBmcm9tIGhvbGRvZmYgYW5kIHN0YXJ0dXAuCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgIC0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJmc2wsbHMxMDIxYS1kY2ZnIgorICAtIHJlZyA6IHNob3VsZCBjb250YWluIGJhc2UgYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIERDRkcgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMKKworRXhhbXBsZToKKwlkY2ZnOiBkY2ZnQDFlZTAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWRjZmciOworCQlyZWcgPSA8MHgwIDB4MWVlMDAwMCAweDAgMHgxMDAwMD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZ2ljLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZ2ljLnR4dAppbmRleCBjN2QyZmExLi5iMzg2MDhhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2dpYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9naWMudHh0CkBAIC0xNyw2ICsxNyw3IEBACiAJImFybSxjb3J0ZXgtYTctZ2ljIgogCSJhcm0sYXJtMTFtcC1naWMiCiAJImJyY20sYnJhaG1hLWIxNS1naWMiCisJImFybSxhcm0xMTc2anpmLWRldmNoaXAtZ2ljIgogLSBpbnRlcnJ1cHQtY29udHJvbGxlciA6IElkZW50aWZpZXMgdGhlIG5vZGUgYXMgYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIKIC0gI2ludGVycnVwdC1jZWxscyA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNlbGxzIG5lZWRlZCB0byBlbmNvZGUgYW4KICAgaW50ZXJydXB0IHNvdXJjZS4gIFRoZSB0eXBlIHNoYWxsIGJlIGEgPHUzMj4gYW5kIHRoZSB2YWx1ZSBzaGFsbCBiZSAzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tYXJ2ZWxsLGJlcmxpbi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21hcnZlbGwsYmVybGluLnR4dAppbmRleCA5MDRkZTU3Li5hOTllYjllIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21hcnZlbGwsYmVybGluLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21hcnZlbGwsYmVybGluLnR4dApAQCAtMTA2LDExICsxMDYsMjEgQEAKIC0gZ3JvdXBzOiBhIGxpc3Qgb2Ygc3RyaW5ncyBkZXNjcmliaW5nIHRoZSBncm91cCBuYW1lcy4KIC0gZnVuY3Rpb246IGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gbXV4IHRoZSBncm91cHMuCiAKKyogUmVzZXQgY29udHJvbGxlciBiaW5kaW5nCisKK0EgcmVzZXQgY29udHJvbGxlciBpcyBwYXJ0IG9mIHRoZSBjaGlwIGNvbnRyb2wgcmVnaXN0ZXJzIHNldC4gVGhlIGNoaXAgY29udHJvbAorbm9kZSBhbHNvIHByb3ZpZGVzIHRoZSByZXNldC4gVGhlIHJlZ2lzdGVyIHNldCBpcyBub3QgYXQgdGhlIHNhbWUgb2Zmc2V0IGJldHdlZW4KK0JlcmxpbiBTb0NzLgorCitSZXF1aXJlZCBwcm9wZXJ0eToKKy0gI3Jlc2V0LWNlbGxzOiBtdXN0IGJlIHNldCB0byAyCisKIEV4YW1wbGU6CiAKIGNoaXA6IGNoaXAtY29udHJvbEBlYTAwMDAgewogCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLWNoaXAtY3RybCI7CiAJI2Nsb2NrLWNlbGxzID0gPDE+OworCSNyZXNldC1jZWxscyA9IDwyPjsKIAlyZWcgPSA8MHhlYTAwMDAgMHg0MDA+OwogCWNsb2NrcyA9IDwmcmVmY2xrPiwgPCZleHRlcm5hbGRldiAwPjsKIAljbG9jay1uYW1lcyA9ICJyZWZjbGsiLCAidmlkZW9fZXh0MCI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21lZGlhdGVrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWVkaWF0ZWsudHh0CmluZGV4IGZhMjUyMjYuLjNiZTQwMTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWVkaWF0ZWsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWVkaWF0ZWsudHh0CkBAIC0xLDEwICsxLDE0IEBACi1NZWRpYXRlayBNVDY1ODkgUGxhdGZvcm1zIERldmljZSBUcmVlIEJpbmRpbmdzCitNZWRpYVRlayBtdDY1eHggJiBtdDgxeHggUGxhdGZvcm1zIERldmljZSBUcmVlIEJpbmRpbmdzCiAKLUJvYXJkcyB3aXRoIGEgU29DIG9mIHRoZSBNZWRpYXRlayBNVDY1ODkgc2hhbGwgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5OgorQm9hcmRzIHdpdGggYSBNZWRpYVRlayBtdDY1eHgvbXQ4MXh4IFNvQyBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHk6CiAKIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0eToKIAotY29tcGF0aWJsZTogbXVzdCBjb250YWluICJtZWRpYXRlayxtdDY1ODkiCitjb21wYXRpYmxlOiBNdXN0IGNvbnRhaW4gb25lIG9mCisgICAibWVkaWF0ZWssbXQ2NTg5IgorICAgIm1lZGlhdGVrLG10NjU5MiIKKyAgICJtZWRpYXRlayxtdDgxMjciCisgICAibWVkaWF0ZWssbXQ4MTM1IgogCiAKIFN1cHBvcnRlZCBib2FyZHM6CkBAIC0xMiwzICsxNiwxMiBAQAogLSBicSBBcXVhcmlzNSBzbWFydCBwaG9uZToKICAgICBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKICAgICAgIC0gY29tcGF0aWJsZSA9ICJtdW5kb3JlYWRlcixicS1hcXVhcmlzNSIsICJtZWRpYXRlayxtdDY1ODkiOworLSBFdmFsdWF0aW9uIGJvYXJkIGZvciBNVDY1OTI6CisgICAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnRpZXM6CisgICAgICAtIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2NTkyLWV2YiIsICJtZWRpYXRlayxtdDY1OTIiOworLSBNVEsgbXQ4MTI3IHRhYmxldCBtb29zZSBFVkI6CisgICAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnRpZXM6CisgICAgICAtIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTI3LW1vb3NlIiwgIm1lZGlhdGVrLG10ODEyNyI7CistIE1USyBtdDgxMzUgdGFibGV0IEVWQjoKKyAgICBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKKyAgICAgIC0gY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxMzUtZXZicDEiLCAibWVkaWF0ZWssbXQ4MTM1IjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vb21hcC9vbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vb21hcC9vbWFwLnR4dAppbmRleCBkZGQ5YmNkLi40ZjZhODJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL29tYXAvb21hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9vbWFwL29tYXAudHh0CkBAIC0xMzIsNiArMTMyLDkgQEAKIC0gQU0zMzVYIEJvbmUgOiBMb3cgY29zdCBjb21tdW5pdHkgYm9hcmQKICAgY29tcGF0aWJsZSA9ICJ0aSxhbTMzNXgtYm9uZSIsICJ0aSxhbTMzeHgiLCAidGksb21hcDMiCiAKKy0gQU0zMzVYIE9yaW9uTFhtIDogU3Vic3RhdGlvbiBBdXRvbWF0aW9uIFBsYXRmb3JtCisgIGNvbXBhdGlibGUgPSAibm92YXRlY2gsYW0zMzV4LWx4bSIsICJ0aSxhbTMzeHgiCisKIC0gT01BUDUgRVZNIDogRXZhbHVhdGlvbiBNb2R1bGUKICAgY29tcGF0aWJsZSA9ICJ0aSxvbWFwNS1ldm0iLCAidGksb21hcDUiCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vcm9ja2NoaXAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9yb2NrY2hpcC50eHQKaW5kZXggODU3ZjEyNi4uZWFhM2QxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9yb2NrY2hpcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9yb2NrY2hpcC50eHQKQEAgLTEsNiArMSwxMCBAQAogUm9ja2NoaXAgcGxhdGZvcm1zIGRldmljZSB0cmVlIGJpbmRpbmdzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBNYXJzQm9hcmQgUkszMDY2IGJvYXJkOgorICAgIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0aWVzOgorICAgICAgLSBjb21wYXRpYmxlID0gImhhb3l1LG1hcnNib2FyZC1yazMwNjYiLCAicm9ja2NoaXAscmszMDY2YSI7CisKIC0gYnEgQ3VyaWUgMiB0YWJsZXQ6CiAgICAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnRpZXM6CiAgICAgICAtIGNvbXBhdGlibGUgPSAibXVuZG9yZWFkZXIsYnEtY3VyaWUyIiwgInJvY2tjaGlwLHJrMzA2NmEiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9zYW1zdW5nLWJvYXJkcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3NhbXN1bmctYm9hcmRzLnR4dAppbmRleCAyMTY4ZWQzLi40MzU4OWQyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3NhbXN1bmctYm9hcmRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3NhbXN1bmctYm9hcmRzLnR4dApAQCAtMSwxMSArMSwyMCBAQAotKiBTYW1zdW5nJ3MgRXh5bm9zNDIxMCBiYXNlZCBTTURLVjMxMCBldmFsdWF0aW9uIGJvYXJkCi0KLVNNREtWMzEwIGV2YWx1YXRpb24gYm9hcmQgaXMgYmFzZWQgb24gU2Ftc3VuZydzIEV4eW5vczQyMTAgU29DLgorKiBTYW1zdW5nJ3MgRXh5bm9zIFNvQyBiYXNlZCBib2FyZHMKIAogUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnRpZXM6CiAgICAgLSBjb21wYXRpYmxlID0gc2hvdWxkIGJlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcuCi0gICAgICAgIChhKSAic2Ftc3VuZyxzbWRrdjMxMCIgLSBmb3IgU2Ftc3VuZydzIFNNREtWMzEwIGV2YWwgYm9hcmQuCi0gICAgICAgIChiKSAic2Ftc3VuZyxleHlub3M0MjEwIiAgLSBmb3IgYm9hcmRzIGJhc2VkIG9uIEV4eW5vczQyMTAgU29DLgorCS0gInNhbXN1bmcsbW9uayIJLSBmb3IgRXh5bm9zMzI1MC1iYXNlZCBTYW1zdW5nIFNpbWJhbmQgYm9hcmQuCisJLSAic2Ftc3VuZyxyaW5hdG8iCS0gZm9yIEV4eW5vczMyNTAtYmFzZWQgU2Ftc3VuZyBHZWFyMiBib2FyZC4KKwktICJzYW1zdW5nLHNtZGt2MzEwIgktIGZvciBFeHlub3M0MjEwLWJhc2VkIFNhbXN1bmcgU01ES1YzMTAgZXZhbCBib2FyZC4KKwktICJzYW1zdW5nLHRyYXRzIgktIGZvciBFeHlub3M0MjEwLWJhc2VkIFRpemVuIFJlZmVyZW5jZSBib2FyZC4KKwktICJzYW1zdW5nLHVuaXZlcnNhbF9jMjEwIiAtIGZvciBFeHlub3M0MjEwLWJhc2VkIFNhbXN1bmcgYm9hcmQuCisJLSAic2Ftc3VuZyxzbWRrNDQxMiIsCS0gZm9yIEV4eW5vczQ0MTItYmFzZWQgU2Ftc3VuZyBTTURLNDQxMiBldmFsIGJvYXJkLgorCS0gInNhbXN1bmcsdHJhdHMyIgktIGZvciBFeHlub3M0NDEyLWJhc2VkIFRpemVuIFJlZmVyZW5jZSBib2FyZC4KKwktICJzYW1zdW5nLHNtZGs1MjUwIgktIGZvciBFeHlub3M1MjUwLWJhc2VkIFNhbXN1bmcgU01ESzUyNTAgZXZhbCBib2FyZC4KKwktICJzYW1zdW5nLHh5cmVmNTI2MCIJLSBmb3IgRXh5bm9zNTI2MC1iYXNlZCBTYW1zdW5nIGJvYXJkLgorCS0gInNhbXN1bmcsc21kazU0MTAiCS0gZm9yIEV4eW5vczU0MTAtYmFzZWQgU2Ftc3VuZyBTTURLNTQxMCBldmFsIGJvYXJkLgorCS0gInNhbXN1bmcsc21kazU0MjAiCS0gZm9yIEV4eW5vczU0MjAtYmFzZWQgU2Ftc3VuZyBTTURLNTQyMCBldmFsIGJvYXJkLgorCS0gInNhbXN1bmcsc2Q1djEiCS0gZm9yIEV4eW5vczU0NDAtYmFzZWQgU2Ftc3VuZyBib2FyZC4KKwktICJzYW1zdW5nLHNzZGs1NDQwIgktIGZvciBFeHlub3M1NDQwLWJhc2VkIFNhbXN1bmcgYm9hcmQuCiAKIE9wdGlvbmFsOgogICAgIC0gZmlybXdhcmUgbm9kZSwgc3BlY2lmeWluZyBwcmVzZW5jZSBhbmQgdHlwZSBvZiBzZWN1cmUgZmlybXdhcmU6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3N0ZS1ub21hZGlrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3RlLW5vbWFkaWsudHh0CmluZGV4IDYyNTZlYzMuLjJmZGZmNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3RlLW5vbWFkaWsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3RlLW5vbWFkaWsudHh0CkBAIC0xMCw2ICsxMCwxMiBAQAogCiBCb2FyZHMgd2l0aCB0aGUgTm9tYWRpayBTb0MgaW5jbHVkZToKIAorTm9tYWRpayBOSEstMTUgYm9hcmQgbWFudWZhY3R1cmVkIGJ5IFNUIE1pY3JvZWxlY3Ryb25pY3M6CisKK1JlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0eToKKworY29tcGF0aWJsZT0ic3Qsbm9tYWRpay1uaGstMTUiOworCiBTODgxNSAiTWluaUtpdCIgbWFudWZhY3R1cmVkIGJ5IENhbGFvIFN5c3RlbXM6CiAKIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0eToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3VueGkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9zdW54aS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5NDFmZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3VueGkudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0FsbHdpbm5lciBzdW5YaSBQbGF0Zm9ybXMgRGV2aWNlIFRyZWUgQmluZGluZ3MKKworRWFjaCBkZXZpY2UgdHJlZSBtdXN0IHNwZWNpZnkgd2hpY2ggQWxsd2lubmVyIFNvQyBpdCB1c2VzLAordXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tcGF0aWJsZSBzdHJpbmdzOgorCisgIGFsbHdpbm5lcixzdW40aS1hMTAKKyAgYWxsd2lubmVyLHN1bjVpLWExMHMKKyAgYWxsd2lubmVyLHN1bjVpLWExMworICBhbGx3aW5uZXIsc3VuNmktYTMxCisgIGFsbHdpbm5lcixzdW43aS1hMjAKKyAgYWxsd2lubmVyLHN1bjhpLWEyMworICBhbGx3aW5uZXIsc3VuOWktYTgwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3V4NTAwL3Bvd2VyX2RvbWFpbi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3V4NTAwL3Bvd2VyX2RvbWFpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3OWQxNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vdXg1MDAvcG93ZXJfZG9tYWluLnR4dApAQCAtMCwwICsxLDM1IEBACisqIFNULUVyaWNzc29uIFVYNTAwIFBNIERvbWFpbnMKKworVVg1MDAgc3VwcG9ydHMgbXVsdGlwbGUgUE0gZG9tYWlucyB3aGljaCBhcmUgdXNlZCB0byBnYXRlIHBvd2VyIHRvIG9uZSBvcgorbW9yZSBwZXJpcGhlcmFscyBvbiB0aGUgU09DLgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgUE0gZG9tYWlucyBmb3IgVVg1MDAgYXJlIGJhc2VkIHVwb24gdGhlIGdlbmVyaWMgUE0gZG9tYWluCithbmQgdXNlIHRoZSBjb3JyZXNwb25kaW5nIERUIGJpbmRpbmdzLgorCis9PVBNIGRvbWFpbiBwcm92aWRlcnM9PQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorIC0gY29tcGF0aWJsZTogTXVzdCBiZSAic3Rlcmljc3Nvbix1eDUwMC1wbS1kb21haW5zIi4KKyAtICNwb3dlci1kb21haW4tY2VsbHMgOiBOdW1iZXIgb2YgY2VsbHMgaW4gYSBwb3dlciBkb21haW4gc3BlY2lmaWVyLCBtdXN0IGJlIDEuCisKK0V4YW1wbGU6CisJcG1fZG9tYWluczogcG1fZG9tYWluczAgeworCQljb21wYXRpYmxlID0gInN0ZXJpY3Nzb24sdXg1MDAtcG0tZG9tYWlucyI7CisJCSNwb3dlci1kb21haW4tY2VsbHMgPSA8MT47CisJfTsKKworPT1QTSBkb21haW4gY29uc3VtZXJzPT0KKworUmVxdWlyZWQgcHJvcGVydGllczoKKyAtIHBvd2VyLWRvbWFpbnM6IEEgcGhhbmRsZSBhbmQgUE0gZG9tYWluIHNwZWNpZmllci4gQmVsb3cgYXJlIHRoZSBsaXN0IG9mCisJCXZhbGlkIHNwZWNpZmllcnM6CisKKwkJSW5kZXgJU3BlY2lmaWVyCisJCS0tLS0tCS0tLS0tLS0tLQorCQkwCURPTUFJTl9WQVBFCisKK0V4YW1wbGU6CisJc2RpMF9wZXIxQDgwMTI2MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwxOHgiLCAiYXJtLHByaW1lY2VsbCI7CisJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hdGEvc2F0YV9yY2FyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hdGEvc2F0YV9yY2FyLnR4dAppbmRleCAxZTYxMTEzLi44MGFlODdhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXRhL3NhdGFfcmNhci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2F0YS9zYXRhX3JjYXIudHh0CkBAIC0zLDggKzMsMTAgQEAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAtIGNvbXBhdGlibGUJCTogc2hvdWxkIGNvbnRhaW4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAJCQkgIC0gInJlbmVzYXMsc2F0YS1yOGE3Nzc5IiBmb3IgUi1DYXIgSDEKLQkJCSAgLSAicmVuZXNhcyxzYXRhLXI4YTc3OTAiIGZvciBSLUNhciBIMgotCQkJICAtICJyZW5lc2FzLHNhdGEtcjhhNzc5MSIgZm9yIFItQ2FyIE0yCisJCQkgIC0gInJlbmVzYXMsc2F0YS1yOGE3NzkwLWVzMSIgZm9yIFItQ2FyIEgyIEVTMQorCQkJICAtICJyZW5lc2FzLHNhdGEtcjhhNzc5MCIgZm9yIFItQ2FyIEgyIG90aGVyIHRoYW4gRVMxCisJCQkgIC0gInJlbmVzYXMsc2F0YS1yOGE3NzkxIiBmb3IgUi1DYXIgTTItVworCQkJICAtICJyZW5lc2FzLHNhdGEtcjhhNzc5MyIgZm9yIFItQ2FyIE0yLU4KIC0gcmVnCQkJOiBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIFNBVEEgcmVnaXN0ZXJzOwogLSBpbnRlcnJ1cHRzCQk6IG11c3QgY29uc2lzdCBvZiBvbmUgaW50ZXJydXB0IHNwZWNpZmllci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9icmNtLGdpc2ItYXJiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvYnJjbSxnaXNiLWFyYi50eHQKaW5kZXggZTJkNTAxZC4uMWVjZWVmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9icmNtLGdpc2ItYXJiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL2JyY20sZ2lzYi1hcmIudHh0CkBAIC0yLDcgKzIsMTEgQEAKIAogUmVxdWlyZWQgcHJvcGVydGllczoKIAotLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgImJyY20sZ2lzYi1hcmIiCistIGNvbXBhdGlibGU6CisgICAgImJyY20sZ2lzYi1hcmIiIG9yICJicmNtLGJjbTc0NDUtZ2lzYi1hcmIiIGZvciAyOG5tIGNoaXBzCisgICAgImJyY20sYmNtNzQzNS1naXNiLWFyYiIgZm9yIG5ld2VyIDQwbm0gY2hpcHMKKyAgICAiYnJjbSxiY203NDAwLWdpc2ItYXJiIiBmb3Igb2xkZXIgNDBubSBjaGlwcyBhbmQgYWxsIDY1bm0gY2hpcHMKKyAgICAiYnJjbSxiY203MDM4LWdpc2ItYXJiIiBmb3IgMTMwbm0gY2hpcHMKIC0gcmVnOiBzcGVjaWZpZXMgdGhlIGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJzCiAtIGludGVycnVwdC1wYXJlbnQ6IHNwZWNpZmllcyB0aGUgcGhhbmRsZSB0byB0aGUgcGFyZW50IGludGVycnVwdCBjb250cm9sbGVyCiAgIHRoaXMgYXJiaXRlciBnZXRzIGludGVycnVwdCBsaW5lIGZyb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvbXZlYnUtbWJ1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL212ZWJ1LW1idXMudHh0CmluZGV4IDVmYTQ0ZjUuLjVlMTZjM2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvbXZlYnUtbWJ1cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9tdmVidS1tYnVzLnR4dApAQCAtNDgsOSArNDgsMTIgQEAKIC0gY29tcGF0aWJsZToJU2hvdWxkIGJlIHNldCB0byAibWFydmVsbCxtYnVzLWNvbnRyb2xsZXIiLgogCiAtIHJlZzogICAgICAgICAgRGV2aWNlJ3MgcmVnaXN0ZXIgc3BhY2UuCi0JCVR3byBlbnRyaWVzIGFyZSBleHBlY3RlZCAoc2VlIHRoZSBleGFtcGxlcyBiZWxvdyk6Ci0JCXRoZSBmaXJzdCBvbmUgY29udHJvbHMgdGhlIGRldmljZXMgZGVjb2Rpbmcgd2luZG93IGFuZAotCQl0aGUgc2Vjb25kIG9uZSBjb250cm9scyB0aGUgU0RSQU0gZGVjb2Rpbmcgd2luZG93LgorCQlUd28gb3IgdGhyZWUgZW50cmllcyBhcmUgZXhwZWN0ZWQgKHNlZSB0aGUgZXhhbXBsZXMgYmVsb3cpOgorCQl0aGUgZmlyc3Qgb25lIGNvbnRyb2xzIHRoZSBkZXZpY2VzIGRlY29kaW5nIHdpbmRvdywKKwkJdGhlIHNlY29uZCBvbmUgY29udHJvbHMgdGhlIFNEUkFNIGRlY29kaW5nIHdpbmRvdyBhbmQKKwkJdGhlIHRoaXJkIGNvbnRyb2xzIHRoZSBNQnVzIGJyaWRnZSAob25seSB3aXRoIHRoZQorCQltYXJ2ZWxsLGFybWFkYTM3MC1tYnVzIGFuZCBtYXJ2ZWxsLGFybWFkYXhwLW1idXMKKwkJY29tcGF0aWJsZSBzdHJpbmdzKQogCiBFeGFtcGxlOgogCkBAIC02Nyw3ICs3MCw3IEBACiAKIAkJCW1idXNjOiBtYnVzLWNvbnRyb2xsZXJAMjAwMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtYnVzLWNvbnRyb2xsZXIiOwotCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MjAxODAgMHgyMD47CisJCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPiwgPDB4MjAyNTAgMHg4PjsKIAkJCX07CiAKIAkJCS8qIG1vcmUgY2hpbGRyZW4gLi4uKi8KQEAgLTEyNiw3ICsxMjksNyBAQAogCiAJCQltYnVzYzogbWJ1cy1jb250cm9sbGVyQDIwMDAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbWJ1cy1jb250cm9sbGVyIjsKLQkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+OworCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MjAxODAgMHgyMD4sIDwweDIwMjUwIDB4OD47CiAJCQl9OwogCiAJCQkvKiBtb3JlIGNoaWxkcmVuIC4uLiovCkBAIC0xNzAsNyArMTczLDcgQEAKIAogCQkJbWJ1c2M6IG1idXMtY29udHJvbGxlckAyMDAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG1idXMtY29udHJvbGxlciI7Ci0JCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPjsKKwkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+LCA8MHgyMDI1MCAweDg+OwogCQkJfTsKIAogCQkJLyogb3RoZXIgY2hpbGRyZW4gKi8KQEAgLTI2Niw3ICsyNjksNyBAQAogCQkJcmFuZ2VzID0gPDAgTUJVU19JRCgweGYwLCAweDAxKSAwIDB4MTAwMDAwPjsKIAogCQkJbWJ1c2M6IG1idXMtY29udHJvbGxlckAyMDAwMCB7Ci0JCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPjsKKwkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+LCA8MHgyMDI1MCAweDg+OwogCQkJfTsKIAogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXJAMjAwMDAgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2JjbS1jeWdudXMtY2xvY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2JjbS1jeWdudXMtY2xvY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZDI2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svYmNtLWN5Z251cy1jbG9jay50eHQKQEAgLTAsMCArMSwzNCBAQAorQnJvYWRjb20gQ3lnbnVzIENsb2NrcworCitUaGlzIGJpbmRpbmcgdXNlcyB0aGUgY29tbW9uIGNsb2NrIGJpbmRpbmc6CitEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svY2xvY2stYmluZGluZ3MudHh0CisKK0N1cnJlbnRseSB2YXJpb3VzICJmaXhlZCIgY2xvY2tzIGFyZSBkZWNsYXJlZCBmb3IgcGVyaXBoZXJhbCBkcml2ZXJzIHRoYXQgdXNlCit0aGUgY29tbW9uIGNsb2NrIGZyYW1ld29yayB0byByZWZlcmVuY2UgdGhlaXIgY29yZSBjbG9ja3MuIFByb3BlciBzdXBwb3J0IG9mCit0aGVzZSBjbG9ja3Mgd2lsbCBiZSBhZGRlZCBsYXRlcgorCitEZXZpY2UgdHJlZSBleGFtcGxlOgorCisJY2xvY2tzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJb3NjOiBvc2NpbGxhdG9yIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKKwkJfTsKKworCQlhcGJfY2xrOiBhcGJfY2xrIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMDA+OworCQl9OworCisJCXBlcmlwaF9jbGs6IHBlcmlwaF9jbGsgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDAwPjsKKwkJfTsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay92ZjYxMC1jbG9jay50eHQKaW5kZXggYzgwODYzZC4uNjNmOWYxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svdmY2MTAtY2xvY2sudHh0CkBAIC01LDYgKzUsMTkgQEAKIC0gcmVnOiBBZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldAogLSAjY2xvY2stY2VsbHM6IFNob3VsZCBiZSA8MT4KIAorT3B0aW9uYWwgcHJvcGVydGllczoKKy0gY2xvY2tzOiBsaXN0IG9mIGNsb2NrIGlkZW50aWZpZXJzIHdoaWNoIGFyZSBleHRlcm5hbCBpbnB1dCBjbG9ja3MgdG8gdGhlCisJZ2l2ZW4gY2xvY2sgY29udHJvbGxlci4gUGxlYXNlIHJlZmVyIHRoZSBuZXh0IHNlY3Rpb24gdG8gZmluZAorCXRoZSBpbnB1dCBjbG9ja3MgZm9yIGEgZ2l2ZW4gY29udHJvbGxlci4KKy0gY2xvY2stbmFtZXM6IGxpc3Qgb2YgbmFtZXMgb2YgY2xvY2tzIHdoaWNoIGFyZSBleHRlcmFsIGlucHV0IGNsb2NrcyB0byB0aGUKKwlnaXZlbiBjbG9jayBjb250cm9sbGVyLgorCitJbnB1dCBjbG9ja3MgZm9yIHRvcCBjbG9jayBjb250cm9sbGVyOgorCS0gc3hvc2MgKGV4dGVybmFsIGNyeXN0YWwgb3NjaWxsYXRvciAzMktIeiwgcmVjb21tZW5kZWQpCisJLSBmeG9zYyAoZXh0ZXJuYWwgY3J5c3RhbCBvc2NpbGxhdG9yIDI0TUh6LCByZWNvbW1lbmRlZCkKKwktIGF1ZGlvX2V4dAorCS0gZW5ldF9leHQKKwogVGhlIGNsb2NrIGNvbnN1bWVyIHNob3VsZCBzcGVjaWZ5IHRoZSBkZXNpcmVkIGNsb2NrIGJ5IGhhdmluZyB0aGUgY2xvY2sKIElEIGluIGl0cyAiY2xvY2tzIiBwaGFuZGxlIGNlbGwuIFNlZSBpbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLmgKIGZvciB0aGUgZnVsbCBsaXN0IG9mIFZGNjEwIGNsb2NrIElEcy4KQEAgLTE1LDYgKzI4LDggQEAKIAljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1jY20iOwogCXJlZyA9IDwweDQwMDZiMDAwIDB4MTAwMD47CiAJI2Nsb2NrLWNlbGxzID0gPDE+OworCWNsb2NrcyA9IDwmc3hvc2M+LCA8JmZ4b3NjPjsKKwljbG9jay1uYW1lcyA9ICJzeG9zYyIsICJmeG9zYyI7CiB9OwogCiB1YXJ0MTogc2VyaWFsQDQwMDI4MDAwIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEveGlsaW54L3hpbGlueF92ZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEveGlsaW54L3hpbGlueF92ZG1hLnR4dAppbmRleCAxNDA1ZWQwLi5lNGM0ZDQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3hpbGlueC94aWxpbnhfdmRtYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS94aWxpbngveGlsaW54X3ZkbWEudHh0CkBAIC0yNSw3ICsyNSw3IEBACiAtIGNvbXBhdGlibGU6IEl0IHNob3VsZCBiZSBlaXRoZXIgInhsbngsYXhpLXZkbWEtbW0ycy1jaGFubmVsIiBvcgogCSJ4bG54LGF4aS12ZG1hLXMybW0tY2hhbm5lbCIuCiAtIGludGVycnVwdHM6IFNob3VsZCBjb250YWluIHBlciBjaGFubmVsIFZETUEgaW50ZXJydXB0cy4KLS0geGxueCxkYXRhLXdpZHRoOiBTaG91bGQgY29udGFpbiB0aGUgc3RyZWFtIGRhdGEgd2lkdGgsIHRha2UgdmFsdWVzCistIHhsbngsZGF0YXdpZHRoOiBTaG91bGQgY29udGFpbiB0aGUgc3RyZWFtIGRhdGEgd2lkdGgsIHRha2UgdmFsdWVzCiAJezMyLDY0Li4uMTAyNH0uCiAKIE9wdGlvbmFsIGNoaWxkIG5vZGUgcHJvcGVydGllczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9od21vbi9sdGMyOTc4LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9od21vbi9sdGMyOTc4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDJmMDlkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2h3bW9uL2x0YzI5NzgudHh0CkBAIC0wLDAgKzEsMzkgQEAKK2x0YzI5NzgKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogc2hvdWxkIGNvbnRhaW4gb25lIG9mOgorICAqICJsbHRjLGx0YzI5NzQiCisgICogImxsdGMsbHRjMjk3NyIKKyAgKiAibGx0YyxsdGMyOTc4IgorICAqICJsbHRjLGx0YzM4ODAiCisgICogImxsdGMsbHRjMzg4MyIKKyAgKiAibGx0YyxsdG00Njc2IgorLSByZWc6IEkyQyBzbGF2ZSBhZGRyZXNzCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIHJlZ3VsYXRvcnM6IEEgbm9kZSB0aGF0IGhvdXNlcyBhIHN1Yi1ub2RlIGZvciBlYWNoIHJlZ3VsYXRvciBjb250cm9sbGVkIGJ5CisgIHRoZSBkZXZpY2UuIEVhY2ggc3ViLW5vZGUgaXMgaWRlbnRpZmllZCB1c2luZyB0aGUgbm9kZSdzIG5hbWUsIHdpdGggdmFsaWQKKyAgdmFsdWVzIGxpc3RlZCBiZWxvdy4gVGhlIGNvbnRlbnQgb2YgZWFjaCBzdWItbm9kZSBpcyBkZWZpbmVkIGJ5IHRoZQorICBzdGFuZGFyZCBiaW5kaW5nIGZvciByZWd1bGF0b3JzOyBzZWUgcmVndWxhdG9yLnR4dC4KKworVmFsaWQgbmFtZXMgb2YgcmVndWxhdG9ycyBkZXBlbmQgb24gbnVtYmVyIG9mIHN1cHBsaWVzIHN1cHBvcnRlZCBwZXIgZGV2aWNlOgorICAqIGx0YzI5NzQgOiB2b3V0MCAtIHZvdXQzCisgICogbHRjMjk3NyA6IHZvdXQwIC0gdm91dDcKKyAgKiBsdGMyOTc4IDogdm91dDAgLSB2b3V0NworICAqIGx0YzM4ODAgOiB2b3V0MCAtIHZvdXQxCisgICogbHRjMzg4MyA6IHZvdXQwCisgICogbHRtNDY3NiA6IHZvdXQwIC0gdm91dDEKKworRXhhbXBsZToKK2x0YzI5NzhANWUgeworCWNvbXBhdGlibGUgPSAibGx0YyxsdGMyOTc4IjsKKwlyZWcgPSA8MHg1ZT47CisJcmVndWxhdG9ycyB7CisJCXZvdXQwIHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIkZQR0EtMi41ViI7CisJCX07CisJCXZvdXQyIHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIkZQR0EtMS41ViI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2kyYy1zM2MyNDEwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXMzYzI0MTAudHh0CmluZGV4IDI3OGRlOGUuLjg5YjMyNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXMzYzI0MTAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXMzYzI0MTAudHh0CkBAIC0zMiw2ICszMiw3IEBACiAgICAgc3BlY2lmaWVkLCBkZWZhdWx0IHZhbHVlIGlzIDAuCiAgIC0gc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxOiBEZXNpcmVkIGZyZXF1ZW5jeSBpbiBIeiBvZiB0aGUgYnVzLiBJZiBub3QKICAgICBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGluIEh6IGlzIDEwMDAwMC4KKyAgLSBzYW1zdW5nLHN5c3JlZy1waGFuZGxlIC0gaGFuZGxlIHRvIHN5c2NvbiB1c2VkIHRvIGNvbnRyb2wgdGhlIHN5c3RlbSByZWdpc3RlcnMKIAogRXhhbXBsZToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0CmluZGV4IGZiZGU0MTUuLjYwNWRjY2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQKQEAgLTU2LDYgKzU2LDggQEAKIGluZmluZW9uLHNsYjk2MzV0dAlJbmZpbmVvbiBTTEI5NjM1IChTb2Z0LSkgSTJDIFRQTSAob2xkIHByb3RvY29sLCBtYXggMTAwa2h6KQogaW5maW5lb24sc2xiOTY0NXR0CUluZmluZW9uIFNMQjk2NDUgSTJDIFRQTSAobmV3IHByb3RvY29sLCBtYXggNDAwa2h6KQogaXNsLGlzbDEyMDU3CQlJbnRlcnNpbCBJU0wxMjA1NyBJMkMgUlRDIENoaXAKK2lzaWwsaXNsMjkwMjggICAgICAgICAgIChkZXByZWNhdGVkLCB1c2UgaXNsKQoraXNsLGlzbDI5MDI4ICAgICAgICAgICAgSW50ZXJzaWwgSVNMMjkwMjggQW1iaWVudCBMaWdodCBhbmQgUHJveGltaXR5IFNlbnNvcgogbWF4aW0sZHMxMDUwCQk1IEJpdCBQcm9ncmFtbWFibGUsIFB1bHNlLVdpZHRoIE1vZHVsYXRvcgogbWF4aW0sbWF4MTIzNwkJTG93LVBvd2VyLCA0LS8xMi1DaGFubmVsLCAyLVdpcmUgU2VyaWFsLCAxMi1CaXQgQURDcwogbWF4aW0sbWF4NjYyNQkJOS1CaXQvMTItQml0IFRlbXBlcmF0dXJlIFNlbnNvcnMgd2l0aCBJwrJDLUNvbXBhdGlibGUgU2VyaWFsIEludGVyZmFjZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2JyY20sYmNtNzEyMC1sMi1pbnRjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9icmNtLGJjbTcxMjAtbDItaW50Yy50eHQKaW5kZXggZmY4MTJhOC4uYmFlMWYyMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2JyY20sYmNtNzEyMC1sMi1pbnRjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYnJjbSxiY203MTIwLWwyLWludGMudHh0CkBAIC0xMyw3ICsxMywxMiBAQAogICBvciBpZiB0aGV5IHdpbGwgb3V0cHV0IGFuIGludGVycnVwdCBzaWduYWwgYXQgdGhpcyAybmQgbGV2ZWwgaW50ZXJydXB0CiAgIGNvbnRyb2xsZXIsIGluIHBhcnRpY3VsYXIgZm9yIFVBUlRzCiAKLS0gbm90IGFsbCAzMi1iaXRzIHdpdGhpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgYWN0dWFsbHkgbWFwIHRvIGFuIGludGVycnVwdAorLSB0eXBpY2FsbHkgaGFzIG9uZSAzMi1iaXQgZW5hYmxlIHdvcmQgYW5kIG9uZSAzMi1iaXQgc3RhdHVzIHdvcmQsIGJ1dCBvbgorICBzb21lIGhhcmR3YXJlIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgZW5hYmxlL3N0YXR1cyBwYWlyCisKKy0gbm8gYXRvbWljIHNldC9jbGVhciBvcGVyYXRpb25zCisKKy0gbm90IGFsbCBiaXRzIHdpdGhpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgYWN0dWFsbHkgbWFwIHRvIGFuIGludGVycnVwdAogCiBUaGUgdHlwaWNhbCBoYXJkd2FyZSBsYXlvdXQgZm9yIHRoaXMgY29udHJvbGxlciBpcyByZXByZXNlbnRlZCBiZWxvdzoKIApAQCAtNDgsNyArNTMsOSBAQAogUmVxdWlyZWQgcHJvcGVydGllczoKIAogLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgImJyY20sYmNtNzEyMC1sMi1pbnRjIgotLSByZWc6IHNwZWNpZmllcyB0aGUgYmFzZSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSByZWdpc3RlcnMKKy0gcmVnOiBzcGVjaWZpZXMgdGhlIGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJzOworICBtdWx0aXBsZSBwYWlycyBtYXkgYmUgc3BlY2lmaWVkLCB3aXRoIHRoZSBmaXJzdCBwYWlyIGhhbmRsaW5nIElSUSBvZmZzZXRzCisgIDAuLjMxIGFuZCB0aGUgc2Vjb25kIHBhaXIgaGFuZGxpbmcgMzIuLjYzCiAtIGludGVycnVwdC1jb250cm9sbGVyOiBpZGVudGlmaWVzIHRoZSBub2RlIGFzIGFuIGludGVycnVwdCBjb250cm9sbGVyCiAtICNpbnRlcnJ1cHQtY2VsbHM6IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNlbGxzIG5lZWRlZCB0byBlbmNvZGUgYW4gaW50ZXJydXB0CiAgIHNvdXJjZSwgc2hvdWxkIGJlIDEuCkBAIC01OSwxOCArNjYsMjEgQEAKIC0gYnJjbSxpbnQtbWFwLW1hc2s6IDMyLWJpdHMgYml0IG1hc2sgZGVzY3JpYmluZyBob3cgbWFueSBhbmQgd2hpY2ggaW50ZXJydXB0cwogICBhcmUgd2lyZWQgdG8gdGhpcyAybmQgbGV2ZWwgaW50ZXJydXB0IGNvbnRyb2xsZXIsIGFuZCBob3cgdGhleSBtYXRjaCB0aGVpcgogICByZXNwZWN0aXZlIGludGVycnVwdCBwYXJlbnRzLiBTaG91bGQgbWF0Y2ggZXhhY3RseSB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMKLSAgc3BlY2lmaWVkIGluIHRoZSAnaW50ZXJydXB0cycgcHJvcGVydHkuCisgIHNwZWNpZmllZCBpbiB0aGUgJ2ludGVycnVwdHMnIHByb3BlcnR5LCBtdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YKKyAgZW5hYmxlL3N0YXR1cyByZWdpc3RlciBwYWlycyBpbXBsZW1lbnRlZCBieSB0aGlzIGNvbnRyb2xsZXIuICBGb3IKKyAgbXVsdGlwbGUgcGFyZW50IElSUXMgd2l0aCBtdWx0aXBsZSBlbmFibGUvc3RhdHVzIHdvcmRzLCB0aGlzIGxvb2tzIGxpa2U6CisgIDxpcnEwX3cwIGlycTBfdzEgaXJxMV93MCBpcnExX3cxIC4uLj4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKIAogLSBicmNtLGlycS1jYW4td2FrZTogaWYgcHJlc2VudCwgdGhpcyBtZWFucyB0aGUgTDIgY29udHJvbGxlciBjYW4gYmUgdXNlZCBhcyBhCiAgIHdha2V1cCBzb3VyY2UgZm9yIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZS4KIAotLSBicmNtLGludC1md2QtbWFzazogaWYgcHJlc2VudCwgYSAzMi1iaXRzIGJpdCBtYXNrIHRvIGNvbmZpZ3VyZSBmb3IgdGhlCi0gIGludGVycnVwdHMgd2hpY2ggaGF2ZSBhIG11eCBnYXRlLCB0eXBpY2FsbHkgVUFSVHMuIFNldHRpbmcgdGhlc2UgYml0cyB3aWxsCi0gIG1ha2UgdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcnJ1cHRzIG91dHB1dHMgYnlwYXNzIHRoaXMgMm5kIGxldmVsIGludGVycnVwdAotICBjb250cm9sbGVyIGNvbXBsZXRlbHksIGl0IGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgotICBwYXJlbnQKKy0gYnJjbSxpbnQtZndkLW1hc2s6IGlmIHByZXNlbnQsIGEgYml0IG1hc2sgdG8gY29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzIHdoaWNoCisgIGhhdmUgYSBtdXggZ2F0ZSwgdHlwaWNhbGx5IFVBUlRzLiBTZXR0aW5nIHRoZXNlIGJpdHMgd2lsbCBtYWtlIHRoZWlyCisgIHJlc3BlY3RpdmUgaW50ZXJydXB0IG91dHB1dHMgYnlwYXNzIHRoaXMgMm5kIGxldmVsIGludGVycnVwdCBjb250cm9sbGVyCisgIGNvbXBsZXRlbHk7IGl0IGlzIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICBwYXJlbnQuIFRoaXMgc2hvdWxkIGhhdmUgb25lIDMyLWJpdCB3b3JkIHBlciBlbmFibGUvc3RhdHVzIHBhaXIuCiAKIEV4YW1wbGU6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pbnRlcnJ1cHRzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pbnRlcnJ1cHRzLnR4dAppbmRleCBjZTZhMWEwLi44YTNjNDA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaW50ZXJydXB0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2ludGVycnVwdHMudHh0CkBAIC0zMCwxMCArMzAsNiBAQAogICBFeGFtcGxlOgogCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmludGMxIDUgMT4sIDwmaW50YzIgMSAwPjsKIAotQSBkZXZpY2Ugbm9kZSBtYXkgY29udGFpbiBlaXRoZXIgImludGVycnVwdHMiIG9yICJpbnRlcnJ1cHRzLWV4dGVuZGVkIiwgYnV0IG5vdAotYm90aC4gSWYgYm90aCBwcm9wZXJ0aWVzIGFyZSBwcmVzZW50LCB0aGVuIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHNob3VsZCBsb2cgYW4KLWVycm9yIGFuZCB1c2Ugb25seSB0aGUgZGF0YSBpbiAiaW50ZXJydXB0cyIuCi0KIDIpIEludGVycnVwdCBjb250cm9sbGVyIG5vZGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL212ZWJ1LXNkcmFtLWNvbnRyb2xsZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lbW9yeS1jb250cm9sbGVycy9tdmVidS1zZHJhbS1jb250cm9sbGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTY1N2QxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lbW9yeS1jb250cm9sbGVycy9tdmVidS1zZHJhbS1jb250cm9sbGVyLnR4dApAQCAtMCwwICsxLDIxIEBACitEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgTVZFQlUgU0RSQU0gY29udHJvbGxlcnMKKworVGhlIE1hcnZlbGwgRUJVIFNvQ3MgYWxsIGhhdmUgYSBTRFJBTSBjb250cm9sbGVyLiBUaGUgU0RSQU0gY29udHJvbGxlcgorZGlmZmVycyBmcm9tIG9uZSBTb0MgdmFyaWFudCB0byBhbm90aGVyLCBidXQgdGhleSBhbHNvIHNoYXJlIGEgbnVtYmVyCitvZiBjb21tb25hbGl0aWVzLgorCitGb3Igbm93LCB0aGlzIERldmljZSBUcmVlIGJpbmRpbmcgZG9jdW1lbnRhdGlvbiBvbmx5IGRvY3VtZW50cyB0aGUKK0FybWFkYSBYUCBTRFJBTSBjb250cm9sbGVyLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgLSBjb21wYXRpYmxlOiBmb3IgQXJtYWRhIFhQLCAibWFydmVsbCxhcm1hZGEteHAtc2RyYW0tY29udHJvbGxlciIKKyAtIHJlZzogYSByZXNvdXJjZSBzcGVjaWZpZXIgZm9yIHRoZSByZWdpc3RlciBzcGFjZSwgd2hpY2ggc2hvdWxkCisgICBpbmNsdWRlIGFsbCBTRFJBTSBjb250cm9sbGVyIHJlZ2lzdGVycyBhcyBwZXIgdGhlIGRhdGFzaGVldC4KKworRXhhbXBsZToKKworc2RyYW1jQDE0MDAgeworCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEteHAtc2RyYW0tY29udHJvbGxlciI7CisJcmVnID0gPDB4MTQwMCAweDUwMD47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lbW9yeS1jb250cm9sbGVycy9udmlkaWEsdGVncmEtbWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lbW9yeS1jb250cm9sbGVycy9udmlkaWEsdGVncmEtbWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZGI5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL252aWRpYSx0ZWdyYS1tYy50eHQKQEAgLTAsMCArMSwzNiBAQAorTlZJRElBIFRlZ3JhIE1lbW9yeSBDb250cm9sbGVyIGRldmljZSB0cmVlIGJpbmRpbmdzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogU2hvdWxkIGJlICJudmlkaWEsdGVncmE8Y2hpcD4tbWMiCistIHJlZzogUGh5c2ljYWwgYmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIGNvbnRyb2xsZXIncyByZWdpc3RlcnMuCistIGNsb2NrczogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgorICBTZWUgLi4vY2xvY2tzL2Nsb2NrLWJpbmRpbmdzLnR4dCBmb3IgZGV0YWlscy4KKy0gY2xvY2stbmFtZXM6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJpZXM6CisgIC0gbWM6IHRoZSBtb2R1bGUncyBjbG9jayBpbnB1dAorLSBpbnRlcnJ1cHRzOiBUaGUgaW50ZXJydXB0IG91dHB1dHMgZnJvbSB0aGUgY29udHJvbGxlci4KKy0gI2lvbW11LWNlbGxzOiBTaG91bGQgYmUgMS4gVGhlIHNpbmdsZSBjZWxsIG9mIHRoZSBJT01NVSBzcGVjaWZpZXIgZGVmaW5lcworICB0aGUgU1dHUk9VUCBvZiB0aGUgbWFzdGVyLgorCitUaGlzIGRldmljZSBpbXBsZW1lbnRzIGFuIElPTU1VIHRoYXQgY29tcGxpZXMgd2l0aCB0aGUgZ2VuZXJpYyBJT01NVSBiaW5kaW5nLgorU2VlIC4uL2lvbW11L2lvbW11LnR4dCBmb3IgZGV0YWlscy4KKworRXhhbXBsZToKKy0tLS0tLS0tCisKKwltYzogbWVtb3J5LWNvbnRyb2xsZXJAMCw3MDAxOTAwMCB7CisJCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LW1jIjsKKwkJcmVnID0gPDB4MCAweDcwMDE5MDAwIDB4MCAweDEwMDA+OworCQljbG9ja3MgPSA8JnRlZ3JhX2NhciBURUdSQTEyNF9DTEtfTUM+OworCQljbG9jay1uYW1lcyA9ICJtYyI7CisKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCSNpb21tdS1jZWxscyA9IDwxPjsKKwl9OworCisJc2RoY2lAMCw3MDBiMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LXNkaGNpIjsKKwkJLi4uCisJCWlvbW11cyA9IDwmbWMgVEVHUkFfU1dHUk9VUF9TRE1NQzFBPjsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9hdG1lbC1obGNkYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL2F0bWVsLWhsY2RjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjRkZTk1YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvYXRtZWwtaGxjZGMudHh0CkBAIC0wLDAgKzEsNTEgQEAKK0RldmljZS1UcmVlIGJpbmRpbmdzIGZvciBBdG1lbCdzIEhMQ0RDIChIaWdoIExDRCBDb250cm9sbGVyKSBNRkQgZHJpdmVyCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisgLSBjb21wYXRpYmxlOiB2YWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAiYXRtZWwsc2FtYTVkMy1obGNkYyIKKyAtIHJlZzogYmFzZSBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBITENEQyBkZXZpY2UgcmVnaXN0ZXJzLgorIC0gY2xvY2stbmFtZXM6IHRoZSBuYW1lIG9mIHRoZSAzIGNsb2NrcyByZXF1ZXN0ZWQgYnkgdGhlIEhMQ0RDIGRldmljZS4KKyAgIFNob3VsZCBjb250YWluICJwZXJpcGhfY2xrIiwgInN5c19jbGsiIGFuZCAic2xvd19jbGsiLgorIC0gY2xvY2tzOiBzaG91bGQgY29udGFpbiB0aGUgMyBjbG9ja3MgcmVxdWVzdGVkIGJ5IHRoZSBITENEQyBkZXZpY2UuCisgLSBpbnRlcnJ1cHRzOiBzaG91bGQgY29udGFpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhMQ0RDIGludGVycnVwdCBsaW5lCisKK1RoZSBITENEQyBJUCBleHBvc2VzIHR3byBzdWJkZXZpY2VzOgorIC0gYSBQV00gY2hpcDogc2VlIC4uL3B3bS9hdG1lbC1obGNkYy1wd20udHh0CisgLSBhIERpc3BsYXkgQ29udHJvbGxlcjogc2VlIC4uL2RybS9hdG1lbC1obGNkYy1kYy50eHQKKworRXhhbXBsZToKKworCWhsY2RjOiBobGNkY0BmMDAzMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkMy1obGNkYyI7CisJCXJlZyA9IDwweGYwMDMwMDAwIDB4MjAwMD47CisJCWNsb2NrcyA9IDwmbGNkY19jbGs+LCA8JmxjZGNrPiwgPCZjbGszMms+OworCQljbG9jay1uYW1lcyA9ICJwZXJpcGhfY2xrIiwic3lzX2NsayIsICJzbG93X2NsayI7CisJCWludGVycnVwdHMgPSA8MzYgSVJRX1RZUEVfTEVWRUxfSElHSCAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQlobGNkYy1kaXNwbGF5LWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxobGNkYy1kaXNwbGF5LWNvbnRyb2xsZXIiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9sY2RfYmFzZSAmcGluY3RybF9sY2RfcmdiODg4PjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJcmVnID0gPDA+OworCisJCQkJaGxjZGNfcGFuZWxfb3V0cHV0OiBlbmRwb2ludEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnBhbmVsX2lucHV0PjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlobGNkY19wd206IGhsY2RjLXB3bSB7CisJCQljb21wYXRpYmxlID0gImF0bWVsLGhsY2RjLXB3bSI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2xjZF9wd20+OworCQkJI3B3bS1jZWxscyA9IDwzPjsKKwkJfTsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9tYXg3NzY4Ni50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dAppbmRleCA2NzhmM2NmLi43NWZkZmFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dApAQCAtMzQsNiArMzQsMTIgQEAKIAktQlVDS24gCToJZm9yIEJVQ0tzLCB3aGVyZSBuIGNhbiBsaWUgaW4gcmFuZ2UgMSB0byA5LgogCQkJZXhhbXBsZTogQlVDSzEsIEJVQ0s1LCBCVUNLOS4KIAorICBSZWd1bGF0b3JzIHdoaWNoIGNhbiBiZSB0dXJuZWQgb2ZmIGR1cmluZyBzeXN0ZW0gc3VzcGVuZDoKKwktTERPbgk6CTIsIDYtOCwgMTAtMTIsIDE0LTE2LAorCS1CVUNLbgk6CTEtNC4KKyAgVXNlIHN0YW5kYXJkIHJlZ3VsYXRvciBiaW5kaW5ncyBmb3IgaXQgKCdyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQnKS4KKworCiBFeGFtcGxlOgogCiAJbWF4Nzc2ODZAMDkgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9tYXg3NzY5My50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3NjkzLnR4dAppbmRleCAxMTkyMWNjLi4wMWU5ZjMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3NjkzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3NjkzLnR4dApAQCAtMjcsNiArMjcsMjAgQEAKIAogCVsqXSByZWZlciBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKIAorLSBoYXB0aWMgOiBUaGUgTUFYNzc2OTMgaGFwdGljIGRldmljZSB1dGlsaXNlcyBhIFBXTSBjb250cm9sbGVkIG1vdG9yIHRvIHByb3ZpZGUKKyAgdXNlcnMgd2l0aCB0YWN0aWxlIGZlZWRiYWNrLiBQV00gcGVyaW9kIGFuZCBkdXR5LWN5Y2xlIGFyZSB2YXJpZWQgaW4KKyAgb3JkZXIgdG8gcHJvdmlkZSB0aGUgYXBwcm9wcml0ZSBsZXZlbCBvZiBmZWVkYmFjay4KKworIFJlcXVpcmVkIHByb3BlcnRpZXM6CisJLSBjb21wYXRpYmxlIDogTXVzdCBiZSAibWF4aW0sbWF4Nzc2OTMtaHBhdGljIgorCS0gaGFwdGljLXN1cHBseSA6IHBvd2VyIHN1cHBseSBmb3IgdGhlIGhhcHRpYyBtb3RvcgorCVsqXSByZWZlciBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKKwktIHB3bXMgOiBwaGFuZGxlIHRvIHRoZSBwaHlzaWNhbCBQV00oUHVsc2UgV2lkdGggTW9kdWxhdGlvbikgZGV2aWNlLgorCSBQV00gcHJvcGVydGllcyBzaG91bGQgYmUgbmFtZWQgInB3bXMiLiBBbmQgbnVtYmVyIG9mIGNlbGwgaXMgZGlmZmVyZW50CisJIGZvciBlYWNoIHB3bSBkZXZpY2UuCisJIFRvIGdldCBtb3JlIGluZm9ybWF0aW9ucywgcGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YWlvbi4KKwlbKl0gcmVmZXIgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3B3bS9wd20udHh0CisKIEV4YW1wbGU6CiAJbWF4Nzc2OTNANjYgewogCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3NjkzIjsKQEAgLTUyLDQgKzY2LDExIEBACiAJCQkJCXJlZ3VsYXRvci1ib290LW9uOwogCQkJfTsKIAkJfTsKKworCQloYXB0aWMgeworCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY5My1oYXB0aWMiOworCQkJaGFwdGljLXN1cHBseSA9IDwmaGFwdGljX3N1cHBseT47CisJCQlwd21zID0gPCZwd20gMCA0MDAwMCAwPjsKKwkJCXB3bS1uYW1lcyA9ICJoYXB0aWMiOworCQl9OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3MybXBzMTEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9zMm1wczExLnR4dAppbmRleCAwZTQwMjZhLi41N2EwNDUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3MybXBzMTEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvczJtcHMxMS50eHQKQEAgLTEsNSArMSw1IEBACiAKLSogU2Ftc3VuZyBTMk1QUzExLCBTMk1QUzE0IGFuZCBTMk1QVTAyIFZvbHRhZ2UgYW5kIEN1cnJlbnQgUmVndWxhdG9yCisqIFNhbXN1bmcgUzJNUFMxMSwgUzJNUFMxMywgUzJNUFMxNCBhbmQgUzJNUFUwMiBWb2x0YWdlIGFuZCBDdXJyZW50IFJlZ3VsYXRvcgogCiBUaGUgU2Ftc3VuZyBTMk1QUzExIGlzIGEgbXVsdGktZnVuY3Rpb24gZGV2aWNlIHdoaWNoIGluY2x1ZGVzIHZvbHRhZ2UgYW5kCiBjdXJyZW50IHJlZ3VsYXRvcnMsIFJUQywgY2hhcmdlciBjb250cm9sbGVyIGFuZCBvdGhlciBzdWItYmxvY2tzLiBJdCBpcwpAQCAtNyw4ICs3LDggQEAKIGFkZHJlc3NlZCBieSB0aGUgaG9zdCBzeXN0ZW0gdXNpbmcgZGlmZmVyZW50IEkyQyBzbGF2ZSBhZGRyZXNzZXMuCiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6Ci0tIGNvbXBhdGlibGU6IFNob3VsZCBiZSAic2Ftc3VuZyxzMm1wczExLXBtaWMiIG9yICJzYW1zdW5nLHMybXBzMTQtcG1pYyIKLSAgICAgICAgICAgICAgb3IgInNhbXN1bmcsczJtcHUwMi1wbWljIi4KKy0gY29tcGF0aWJsZTogU2hvdWxkIGJlICJzYW1zdW5nLHMybXBzMTEtcG1pYyIgb3IgInNhbXN1bmcsczJtcHMxMy1wbWljIgorCSAgICAgIG9yICJzYW1zdW5nLHMybXBzMTQtcG1pYyIgb3IgInNhbXN1bmcsczJtcHUwMi1wbWljIi4KIC0gcmVnOiBTcGVjaWZpZXMgdGhlIEkyQyBzbGF2ZSBhZGRyZXNzIG9mIHRoZSBwbWljIGJsb2NrLiBJdCBzaG91bGQgYmUgMHg2Ni4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKQEAgLTE3LDggKzE3LDggQEAKIC0gaW50ZXJydXB0czogSW50ZXJydXB0IHNwZWNpZmllcnMgZm9yIGludGVycnVwdCBzb3VyY2VzLgogCiBPcHRpb25hbCBub2RlczoKLS0gY2xvY2tzOiBzMm1wczExIGFuZCBzNW04NzY3IHByb3ZpZGUgdGhyZWUoQVAvQ1AvQlQpIGJ1ZmZlcmVkIDMyLjc2OCBLSHoKLSAgb3V0cHV0cywgc28gdG8gcmVnaXN0ZXIgdGhlc2UgYXMgY2xvY2tzIHdpdGggY29tbW9uIGNsb2NrIGZyYW1ld29yaworLSBjbG9ja3M6IHMybXBzMTEsIHMybXBzMTMgYW5kIHM1bTg3NjcgcHJvdmlkZSB0aHJlZShBUC9DUC9CVCkgYnVmZmVyZWQgMzIuNzY4CisgIEtIeiBvdXRwdXRzLCBzbyB0byByZWdpc3RlciB0aGVzZSBhcyBjbG9ja3Mgd2l0aCBjb21tb24gY2xvY2sgZnJhbWV3b3JrCiAgIGluc3RhbnRpYXRlIGEgc3ViLW5vZGUgbmFtZWQgImNsb2NrcyIuIEl0IHVzZXMgdGhlIGNvbW1vbiBjbG9jayBiaW5kaW5nCiAgIGRvY3VtZW50ZWQgaW4gOgogICBbRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2Nsb2NrLWJpbmRpbmdzLnR4dF0KQEAgLTMwLDEyICszMCwxMiBAQAogICAgIHRoZSBjbG9jayB3aGljaCB0aGV5IGNvbnN1bWUuCiAgICAgQ2xvY2sgICAgICAgICAgICAgICBJRCAgICAgICAgICAgRGV2aWNlcwogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAzMktoekFQCQkwICAgICAgICAgICAgUzJNUFMxMSwgUzJNUFMxNCwgUzVNODc2NwotICAgIDMyS2h6Q1AJCTEgICAgICAgICAgICBTMk1QUzExLCBTNU04NzY3Ci0gICAgMzJLaHpCVAkJMiAgICAgICAgICAgIFMyTVBTMTEsIFMyTVBTMTQsIFM1TTg3NjcKKyAgICAzMktoekFQCQkwICAgICAgICAgICAgUzJNUFMxMSwgUzJNUFMxMywgUzJNUFMxNCwgUzVNODc2NworICAgIDMyS2h6Q1AJCTEgICAgICAgICAgICBTMk1QUzExLCBTMk1QUzEzLCBTNU04NzY3CisgICAgMzJLaHpCVAkJMiAgICAgICAgICAgIFMyTVBTMTEsIFMyTVBTMTMsIFMyTVBTMTQsIFM1TTg3NjcKIAotICAtIGNvbXBhdGlibGU6IFNob3VsZCBiZSBvbmUgb2Y6ICJzYW1zdW5nLHMybXBzMTEtY2xrIiwgInNhbXN1bmcsczJtcHMxNC1jbGsiLAotCQkic2Ftc3VuZyxzNW04NzY3LWNsayIKKyAgLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mOiAic2Ftc3VuZyxzMm1wczExLWNsayIsICJzYW1zdW5nLHMybXBzMTMtY2xrIiwKKwkJInNhbXN1bmcsczJtcHMxNC1jbGsiLCAic2Ftc3VuZyxzNW04NzY3LWNsayIKIAogLSByZWd1bGF0b3JzOiBUaGUgcmVndWxhdG9ycyBvZiBzMm1wczExIHRoYXQgaGF2ZSB0byBiZSBpbnN0YW50aWF0ZWQgc2hvdWxkIGJlCiBpbmNsdWRlZCBpbiBhIHN1Yi1ub2RlIG5hbWVkICdyZWd1bGF0b3JzJy4gUmVndWxhdG9yIG5vZGVzIGluY2x1ZGVkIGluIHRoaXMKQEAgLTgxLDEyICs4MSwxNCBAQAogCS0gTERPbgogCQkgIC0gdmFsaWQgdmFsdWVzIGZvciBuIGFyZToKIAkJCS0gUzJNUFMxMTogMSB0byAzOAorCQkJLSBTMk1QUzEzOiAxIHRvIDQwCiAJCQktIFMyTVBTMTQ6IDEgdG8gMjUKIAkJCS0gUzJNUFUwMjogMSB0byAyOAogCQkgIC0gRXhhbXBsZTogTERPMSwgTERPMiwgTERPMjgKIAktIEJVQ0tuCiAJCSAgLSB2YWxpZCB2YWx1ZXMgZm9yIG4gYXJlOgogCQkJLSBTMk1QUzExOiAxIHRvIDEwCisJCQktIFMyTVBTMTM6IDEgdG8gMTAKIAkJCS0gUzJNUFMxNDogMSB0byA1CiAJCQktIFMyTVBVMDI6IDEgdG8gNwogCQkgIC0gRXhhbXBsZTogQlVDSzEsIEJVQ0syLCBCVUNLOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9leHlub3MtZHctbXNoYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2V4eW5vcy1kdy1tc2hjLnR4dAppbmRleCA2Y2QzNTI1Li5lZTRmYzA1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2V4eW5vcy1kdy1tc2hjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2V4eW5vcy1kdy1tc2hjLnR4dApAQCAtMTgsNiArMTgsMTAgQEAKIAkgIHNwZWNpZmljIGV4dGVuc2lvbnMuCiAJLSAic2Ftc3VuZyxleHlub3M1NDIwLWR3LW1zaGMiOiBmb3IgY29udHJvbGxlcnMgd2l0aCBTYW1zdW5nIEV4eW5vczU0MjAKIAkgIHNwZWNpZmljIGV4dGVuc2lvbnMuCisJLSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMiOiBmb3IgY29udHJvbGxlcnMgd2l0aCBTYW1zdW5nIEV4eW5vczcKKwkgIHNwZWNpZmljIGV4dGVuc2lvbnMuCisJLSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMtc211IjogZm9yIGNvbnRyb2xsZXJzIHdpdGggU2Ftc3VuZyBFeHlub3M3CisJICBzcGVjaWZpYyBleHRlbnNpb25zIGhhdmluZyBhbiBTTVUuCiAKICogc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXY6IFNwZWNpZmllcyB0aGUgZGl2aWRlciB2YWx1ZSBmb3IgdGhlIGNhcmQgaW50ZXJmYWNlCiAgIHVuaXQgKGNpdSkgY2xvY2suIFRoaXMgcHJvcGVydHkgaXMgYXBwbGljYWJsZSBvbmx5IGZvciBFeHlub3M1IFNvQydzIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9pbWctZHctbXNoYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2ltZy1kdy1tc2hjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWRlOTlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9pbWctZHctbXNoYy50eHQKQEAgLTAsMCArMSwyOSBAQAorKiBJbWFnaW5hdGlvbiBzcGVjaWZpYyBleHRlbnNpb25zIHRvIHRoZSBTeW5vcHN5cyBEZXNpZ253YXJlIE1vYmlsZSBTdG9yYWdlCisgIEhvc3QgQ29udHJvbGxlcgorCitUaGUgU3lub3BzeXMgZGVzaWdud2FyZSBtb2JpbGUgc3RvcmFnZSBob3N0IGNvbnRyb2xsZXIgaXMgdXNlZCB0byBpbnRlcmZhY2UKK2EgU29DIHdpdGggc3RvcmFnZSBtZWRpdW0gc3VjaCBhcyBlTU1DIG9yIFNEL01NQyBjYXJkcy4gVGhpcyBmaWxlIGRvY3VtZW50cworZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgY29yZSBTeW5vcHN5cyBkdyBtc2hjIGNvbnRyb2xsZXIgcHJvcGVydGllcyBkZXNjcmliZWQKK2J5IHN5bm9wc3lzLWR3LW1zaGMudHh0IGFuZCB0aGUgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBJbWFnaW5hdGlvbiBzcGVjaWZpYworZXh0ZW5zaW9ucyB0byB0aGUgU3lub3BzeXMgRGVzaWdud2FyZSBNb2JpbGUgU3RvcmFnZSBIb3N0IENvbnRyb2xsZXIuCisKK1JlcXVpcmVkIFByb3BlcnRpZXM6CisKKyogY29tcGF0aWJsZTogc2hvdWxkIGJlCisJLSAiaW1nLHBpc3RhY2hpby1kdy1tc2hjIjogZm9yIFBpc3RhY2hpbyBTb0NzCisKK0V4YW1wbGU6CisKKwltbWNAMTgxNDIwMDAgeworCQljb21wYXRpYmxlID0gImltZyxwaXN0YWNoaW8tZHctbXNoYyI7CisJCXJlZyA9IDwweDE4MTQyMDAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU0hBUkVEIDM5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sIDwmc2Rob3N0X2Nsaz47CisJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOworCisJCWZpZm8tZGVwdGggPSA8MHgyMD47CisJCWJ1cy13aWR0aCA9IDw0PjsKKwkJbnVtLXNsb3RzID0gPDE+OworCQlkaXNhYmxlLXdwOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL3NkaGNpLXB4YS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL3NkaGNpLXB4YS50eHQKaW5kZXggODYyMjNjMy4uNGRkNmRlYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9zZGhjaS1weGEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2RoY2ktcHhhLnR4dApAQCAtMTIsNiArMTIsMTAgQEAKICAgKiBmb3IgIm1hcnZlbGwsYXJtYWRhLTM4MC1zZGhjaSIsIHR3byByZWdpc3RlciBhcmVhcy4gVGhlIGZpcnN0IG9uZQogICAgIGZvciB0aGUgU0RIQ0kgcmVnaXN0ZXJzIHRoZW1zZWx2ZXMsIGFuZCB0aGUgc2Vjb25kIG9uZSBmb3IgdGhlCiAgICAgQVhJL01idXMgYnJpZGdlIHJlZ2lzdGVycyBvZiB0aGUgU0RIQ0kgdW5pdC4KKy0gY2xvY2tzOiBBcnJheSBvZiBjbG9ja3MgcmVxdWlyZWQgZm9yIFNESENJOyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZm9yCisgICAgSS9PIGNsb2NrLgorLSBjbG9jay1uYW1lczogQXJyYXkgb2YgbmFtZXMgY29ycmVzcG9uZGluZyB0byBjbG9ja3MgcHJvcGVydHk7IHNoYWxsIGJlCisgICAgImlvIiBmb3IgSS9PIGNsb2NrIGFuZCAiY29yZSIgZm9yIG9wdGlvbmFsIGNvcmUgY2xvY2suCiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIG1ydmwsY2xrLWRlbGF5LWN5Y2xlczogU3BlY2lmeSBhIG51bWJlciBvZiBjeWNsZXMgdG8gZGVsYXkgZm9yIHR1bmluZy4KQEAgLTIzLDYgKzI3LDggQEAKIAlyZWcgPSA8MHhkNDI4MDgwMCAweDgwMD47CiAJYnVzLXdpZHRoID0gPDg+OwogCWludGVycnVwdHMgPSA8Mjc+OworCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9TRElPMVhJTj4sIDwmY2hpcCBDTEtJRF9TRElPMT47CisJY2xvY2stbmFtZXMgPSAiaW8iLCAiY29yZSI7CiAJbm9uLXJlbW92YWJsZTsKIAltcnZsLGNsay1kZWxheS1jeWNsZXMgPSA8MzE+OwogfTsKQEAgLTMyLDUgKzM4LDYgQEAKIAlyZWcgPSA8MHhkODAwMCAweDEwMDA+LCA8MHhkYzAwMCAweDEwMD47CiAJaW50ZXJydXB0cyA9IDwwIDI1IDB4ND47CiAJY2xvY2tzID0gPCZnYXRlY2xrIDE3PjsKKwljbG9jay1uYW1lcyA9ICJpbyI7CiAJbXJ2bCxjbGstZGVsYXktY3ljbGVzID0gPDB4MUY+OwogfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uaW9zMi9uaW9zMi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmlvczIvbmlvczIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZDBhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmlvczIvbmlvczIudHh0CkBAIC0wLDAgKzEsNjIgQEAKKyogTmlvcyBJSSBQcm9jZXNzb3IgQmluZGluZworCitUaGlzIGJpbmRpbmcgc3BlY2lmaWVzIHdoYXQgcHJvcGVydGllcyBhdmFpbGFibGUgaW4gdGhlIGRldmljZSB0cmVlCityZXByZXNlbnRhdGlvbiBvZiBhIE5pb3MgSUkgUHJvY2Vzc29yIENvcmUuCisKK1VzZXJzIGNhbiB1c2Ugc29wYzJkdHMgdG9vbCBmb3IgZ2VuZXJhdGluZyBkZXZpY2UgdHJlZSBzb3VyY2VzIChkdHMpIGZyb20gYQorUXN5cyBzeXN0ZW0uIFNlZSBtb3JlIGRldGFpbCBpbjogaHR0cDovL3d3dy5hbHRlcmF3aWtpLmNvbS93aWtpL1NvcGMyZHRzCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKy0gY29tcGF0aWJsZTogQ29tcGF0aWJsZSBwcm9wZXJ0eSB2YWx1ZSBzaG91bGQgYmUgImFsdHIsbmlvczItMS4wIi4KKy0gcmVnOiBDb250YWlucyBDUFUgaW5kZXguCistIGludGVycnVwdC1jb250cm9sbGVyOiBTcGVjaWZpZXMgdGhhdCB0aGUgbm9kZSBpcyBhbiBpbnRlcnJ1cHQgY29udHJvbGxlcgorLSAjaW50ZXJydXB0LWNlbGxzOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjZWxscyBuZWVkZWQgdG8gZW5jb2RlIGFuCisJCWludGVycnVwdCBzb3VyY2UsIHNob3VsZCBiZSAxLgorLSBjbG9jay1mcmVxdWVuY3k6IENvbnRhaW5zIHRoZSBjbG9jayBmcmVxdWVuY3kgZm9yIENQVSwgaW4gSHouCistIGRjYWNoZS1saW5lLXNpemU6IENvbnRhaW5zIGRhdGEgY2FjaGUgbGluZSBzaXplLgorLSBpY2FjaGUtbGluZS1zaXplOiBDb250YWlucyBpbnN0cnVjdGlvbiBsaW5lIHNpemUuCistIGRjYWNoZS1zaXplOiBDb250YWlucyBkYXRhIGNhY2hlIHNpemUuCistIGljYWNoZS1zaXplOiBDb250YWlucyBpbnN0cnVjdGlvbiBjYWNoZSBzaXplLgorLSBhbHRyLHBpZC1udW0tYml0czogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYml0cyB0byB1c2UgdG8gcmVwcmVzZW50IHRoZSBwcm9jZXNzCisJCWlkZW50aWZpZXIgKFBJRCkuCistIGFsdHIsdGxiLW51bS13YXlzOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZXQtYXNzb2NpYXRpdml0eSB3YXlzIGluIHRoZSBUTEIuCistIGFsdHIsdGxiLW51bS1lbnRyaWVzOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBUTEIuCistIGFsdHIsdGxiLXB0ci1zejogU3BlY2lmaWVzIHNpemUgb2YgVExCIHBvaW50ZXIuCistIGFsdHIsaGFzLW11bDogU3BlY2lmaWVzIENQVSBoYXJkd2FyZSBtdWx0aXB5IHN1cHBvcnQsIHNob3VsZCBiZSAxLgorLSBhbHRyLGhhcy1tbXU6IFNwZWNpZmllcyBDUFUgc3VwcG9ydCBNTVUgc3VwcG9ydCwgc2hvdWxkIGJlIDEuCistIGFsdHIsaGFzLWluaXRkYTogU3BlY2lmaWVzIENQVSBzdXBwb3J0IGluaXRkYSBpbnN0cnVjdGlvbiwgc2hvdWxkIGJlIDEuCistIGFsdHIscmVzZXQtYWRkcjogU3BlY2lmaWVzIENQVSByZXNldCBhZGRyZXNzCistIGFsdHIsZmFzdC10bGItbWlzcy1hZGRyOiBTcGVjaWZpZXMgQ1BVIGZhc3QgVExCIG1pc3MgZXhjZXB0aW9uIGFkZHJlc3MKKy0gYWx0cixleGNlcHRpb24tYWRkcjogU3BlY2lmaWVzIENQVSBleGNlcHRpb24gYWRkcmVzcworCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBhbHRyLGhhcy1kaXY6IFNwZWNpZmllcyBDUFUgaGFyZHdhcmUgZGl2aWRlIHN1cHBvcnQKKy0gYWx0cixpbXBsZW1lbnRhdGlvbjogTmlvcyBJSSBjb3JlIGltcGxlbWVudGF0aW9uLCB0aGlzIHNob3VsZCBiZSAiZmFzdCI7CisKK0V4YW1wbGU6CisKK2NwdUAweDAgeworCWRldmljZV90eXBlID0gImNwdSI7CisJY29tcGF0aWJsZSA9ICJhbHRyLG5pb3MyLTEuMCI7CisJcmVnID0gPDA+OworCWludGVycnVwdC1jb250cm9sbGVyOworCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJY2xvY2stZnJlcXVlbmN5ID0gPDEyNTAwMDAwMD47CisJZGNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJaWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJZGNhY2hlLXNpemUgPSA8MzI3Njg+OworCWljYWNoZS1zaXplID0gPDMyNzY4PjsKKwlhbHRyLGltcGxlbWVudGF0aW9uID0gImZhc3QiOworCWFsdHIscGlkLW51bS1iaXRzID0gPDg+OworCWFsdHIsdGxiLW51bS13YXlzID0gPDE2PjsKKwlhbHRyLHRsYi1udW0tZW50cmllcyA9IDwxMjg+OworCWFsdHIsdGxiLXB0ci1zeiA9IDw3PjsKKwlhbHRyLGhhcy1kaXYgPSA8MT47CisJYWx0cixoYXMtbXVsID0gPDE+OworCWFsdHIscmVzZXQtYWRkciA9IDwweGMyODAwMDAwPjsKKwlhbHRyLGZhc3QtdGxiLW1pc3MtYWRkciA9IDwweGM3ZmZmNDAwPjsKKwlhbHRyLGV4Y2VwdGlvbi1hZGRyID0gPDB4ZDAwMDAwMjA+OworCWFsdHIsaGFzLWluaXRkYSA9IDwxPjsKKwlhbHRyLGhhcy1tbXUgPSA8MT47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25pb3MyL3RpbWVyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uaW9zMi90aW1lci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0YTU4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uaW9zMi90aW1lci50eHQKQEAgLTAsMCArMSwxOSBAQAorQWx0ZXJhIFRpbWVyCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKy0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAiYWx0cix0aW1lci0xLjAiCistIHJlZyA6IFNwZWNpZmllcyBiYXNlIHBoeXNpY2FsIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIHJlZ2lzdGVycy4KKy0gaW50ZXJydXB0LXBhcmVudDogcGhhbmRsZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKy0gaW50ZXJydXB0cyA6IFNob3VsZCBjb250YWluIHRoZSB0aW1lciBpbnRlcnJ1cHQgbnVtYmVyCistIGNsb2NrLWZyZXF1ZW5jeSA6IFRoZSBmcmVxdWVuY3kgb2YgdGhlIGNsb2NrIHRoYXQgZHJpdmVzIHRoZSBjb3VudGVyLCBpbiBIei4KKworRXhhbXBsZToKKwordGltZXIgeworCWNvbXBhdGlibGUgPSAiYWx0cix0aW1lci0xLjAiOworCXJlZyA9IDwweDAwNDAwMDAwIDB4MDAwMDAwMjA+OworCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdT47CisJaW50ZXJydXB0cyA9IDwxMT47CisJY2xvY2stZnJlcXVlbmN5ID0gPDEyNTAwMDAwMD47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9wY2kudHh0CmluZGV4IDQxYWVlZDMuLmY4ZmJlOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL3BjaS50eHQKQEAgLTcsMyArNywxNCBAQAogCiBPcGVuIEZpcm13YXJlIFJlY29tbWVuZGVkIFByYWN0aWNlOiBJbnRlcnJ1cHQgTWFwcGluZwogaHR0cDovL3d3dy5vcGVuZmlybXdhcmUub3JnLzEyNzUvcHJhY3RpY2UvaW1hcC9pbWFwMF85ZC5wZGYKKworQWRkaXRpb25hbGx5IHRvIHRoZSBwcm9wZXJ0aWVzIHNwZWNpZmllZCBpbiB0aGUgYWJvdmUgc3RhbmRhcmRzIGEgaG9zdCBicmlkZ2UKK2RyaXZlciBpbXBsZW1lbnRhdGlvbiBtYXkgc3VwcG9ydCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisKKy0gbGludXgscGNpLWRvbWFpbjoKKyAgIElmIHByZXNlbnQgdGhpcyBwcm9wZXJ0eSBhc3NpZ25zIGEgZml4ZWQgUENJIGRvbWFpbiBudW1iZXIgdG8gYSBob3N0IGJyaWRnZSwKKyAgIG90aGVyd2lzZSBhbiB1bnN0YWJsZSAoYWNyb3NzIGJvb3RzKSB1bmlxdWUgbnVtYmVyIHdpbGwgYmUgYXNzaWduZWQuCisgICBJdCBpcyByZXF1aXJlZCB0byBlaXRoZXIgbm90IHNldCB0aGlzIHByb3BlcnR5IGF0IGFsbCBvciBzZXQgaXQgZm9yIGFsbAorICAgaG9zdCBicmlkZ2VzIGluIHRoZSBzeXN0ZW0sIG90aGVyd2lzZSBwb3RlbnRpYWxseSBjb25mbGljdGluZyBkb21haW4gbnVtYmVycworICAgbWF5IGJlIGFzc2lnbmVkIHRvIHJvb3QgYnVzZXMgYmVoaW5kIGRpZmZlcmVudCBob3N0IGJyaWRnZXMuICBUaGUgZG9tYWluCisgICBudW1iZXIgZm9yIGVhY2ggaG9zdCBicmlkZ2UgaW4gdGhlIHN5c3RlbSBtdXN0IGJlIHVuaXF1ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2ltZyx0ejEwOTAtcGRjLXBpbmN0cmwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvaW1nLHR6MTA5MC1wZGMtcGluY3RybC50eHQKaW5kZXggYTE4NjE4MS4uNTFiOTQzYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvaW1nLHR6MTA5MC1wZGMtcGluY3RybC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvaW1nLHR6MTA5MC1wZGMtcGluY3RybC50eHQKQEAgLTksNyArOSw3IEBACiBjb21tb24gcGluY3RybCBiaW5kaW5ncyB1c2VkIGJ5IGNsaWVudCBkZXZpY2VzLCBpbmNsdWRpbmcgdGhlIG1lYW5pbmcgb2YgdGhlCiBwaHJhc2UgInBpbiBjb25maWd1cmF0aW9uIG5vZGUiLgogCi1UWjEwOTAtUERDJ3MgcGluIGNvbmZpZ3VyYXRpb24gbm9kZXMgYWN0IGFzIGEgY29udGFpbmVyIGZvciBhbiBhYml0cmFyeSBudW1iZXIKK1RaMTA5MC1QREMncyBwaW4gY29uZmlndXJhdGlvbiBub2RlcyBhY3QgYXMgYSBjb250YWluZXIgZm9yIGFuIGFyYml0cmFyeSBudW1iZXIKIG9mIHN1Ym5vZGVzLiBFYWNoIG9mIHRoZXNlIHN1Ym5vZGVzIHJlcHJlc2VudHMgc29tZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gZm9yIGEKIHBpbiwgYSBncm91cCwgb3IgYSBsaXN0IG9mIHBpbnMgb3IgZ3JvdXBzLiBUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIGluY2x1ZGUgdGhlCiBtdXggZnVuY3Rpb24gdG8gc2VsZWN0IG9uIHRob3NlIHBpbihzKS9ncm91cChzKSwgYW5kIHZhcmlvdXMgcGluIGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2ltZyx0ejEwOTAtcGluY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9pbWcsdHoxMDkwLXBpbmN0cmwudHh0CmluZGV4IDRiMjdjOTkuLjQ5ZDBlNjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2ltZyx0ejEwOTAtcGluY3RybC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvaW1nLHR6MTA5MC1waW5jdHJsLnR4dApAQCAtOSw3ICs5LDcgQEAKIGNvbW1vbiBwaW5jdHJsIGJpbmRpbmdzIHVzZWQgYnkgY2xpZW50IGRldmljZXMsIGluY2x1ZGluZyB0aGUgbWVhbmluZyBvZiB0aGUKIHBocmFzZSAicGluIGNvbmZpZ3VyYXRpb24gbm9kZSIuCiAKLVRaMTA5MCdzIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYWJpdHJhcnkgbnVtYmVyIG9mCitUWjEwOTAncyBwaW4gY29uZmlndXJhdGlvbiBub2RlcyBhY3QgYXMgYSBjb250YWluZXIgZm9yIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKIHN1Ym5vZGVzLiBFYWNoIG9mIHRoZXNlIHN1Ym5vZGVzIHJlcHJlc2VudHMgc29tZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gZm9yIGEKIHBpbiwgYSBncm91cCwgb3IgYSBsaXN0IG9mIHBpbnMgb3IgZ3JvdXBzLiBUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIGluY2x1ZGUgdGhlCiBtdXggZnVuY3Rpb24gdG8gc2VsZWN0IG9uIHRob3NlIHBpbihzKS9ncm91cChzKSwgYW5kIHZhcmlvdXMgcGluIGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2xhbnRpcSxmYWxjb24tcGludW14LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2xhbnRpcSxmYWxjb24tcGludW14LnR4dAppbmRleCBkYWE3Njg5Li5hYzRkYTlmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9sYW50aXEsZmFsY29uLXBpbnVteC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvbGFudGlxLGZhbGNvbi1waW51bXgudHh0CkBAIC05LDcgKzksNyBAQAogY29tbW9uIHBpbmN0cmwgYmluZGluZ3MgdXNlZCBieSBjbGllbnQgZGV2aWNlcywgaW5jbHVkaW5nIHRoZSBtZWFuaW5nIG9mIHRoZQogcGhyYXNlICJwaW4gY29uZmlndXJhdGlvbiBub2RlIi4KIAotTGFudGlxJ3MgcGluIGNvbmZpZ3VyYXRpb24gbm9kZXMgYWN0IGFzIGEgY29udGFpbmVyIGZvciBhbiBhYml0cmFyeSBudW1iZXIgb2YKK0xhbnRpcSdzIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgogc3Vibm9kZXMuIEVhY2ggb2YgdGhlc2Ugc3Vibm9kZXMgcmVwcmVzZW50cyBzb21lIGRlc2lyZWQgY29uZmlndXJhdGlvbiBmb3IgYQogcGluLCBhIGdyb3VwLCBvciBhIGxpc3Qgb2YgcGlucyBvciBncm91cHMuIFRoaXMgY29uZmlndXJhdGlvbiBjYW4gaW5jbHVkZSB0aGUKIG11eCBmdW5jdGlvbiB0byBzZWxlY3Qgb24gdGhvc2UgZ3JvdXAocyksIGFuZCB0d28gcGluIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2xhbnRpcSx4d2F5LXBpbnVteC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9sYW50aXEseHdheS1waW51bXgudHh0CmluZGV4IGI1NDY5ZGIuLmU4OWI0NjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2xhbnRpcSx4d2F5LXBpbnVteC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvbGFudGlxLHh3YXktcGludW14LnR4dApAQCAtOSw3ICs5LDcgQEAKIGNvbW1vbiBwaW5jdHJsIGJpbmRpbmdzIHVzZWQgYnkgY2xpZW50IGRldmljZXMsIGluY2x1ZGluZyB0aGUgbWVhbmluZyBvZiB0aGUKIHBocmFzZSAicGluIGNvbmZpZ3VyYXRpb24gbm9kZSIuCiAKLUxhbnRpcSdzIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYWJpdHJhcnkgbnVtYmVyIG9mCitMYW50aXEncyBwaW4gY29uZmlndXJhdGlvbiBub2RlcyBhY3QgYXMgYSBjb250YWluZXIgZm9yIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKIHN1Ym5vZGVzLiBFYWNoIG9mIHRoZXNlIHN1Ym5vZGVzIHJlcHJlc2VudHMgc29tZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gZm9yIGEKIHBpbiwgYSBncm91cCwgb3IgYSBsaXN0IG9mIHBpbnMgb3IgZ3JvdXBzLiBUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIGluY2x1ZGUgdGhlCiBtdXggZnVuY3Rpb24gdG8gc2VsZWN0IG9uIHRob3NlIGdyb3VwKHMpLCBhbmQgdHdvIHBpbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9udmlkaWEsdGVncmEyMC1waW5tdXgudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvbnZpZGlhLHRlZ3JhMjAtcGlubXV4LnR4dAppbmRleCA2MWU3M2NkLi4zYzhjZTI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9udmlkaWEsdGVncmEyMC1waW5tdXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL252aWRpYSx0ZWdyYTIwLXBpbm11eC50eHQKQEAgLTksNyArOSw3IEBACiBjb21tb24gcGluY3RybCBiaW5kaW5ncyB1c2VkIGJ5IGNsaWVudCBkZXZpY2VzLCBpbmNsdWRpbmcgdGhlIG1lYW5pbmcgb2YgdGhlCiBwaHJhc2UgInBpbiBjb25maWd1cmF0aW9uIG5vZGUiLgogCi1UZWdyYSdzIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYWJpdHJhcnkgbnVtYmVyIG9mCitUZWdyYSdzIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgogc3Vibm9kZXMuIEVhY2ggb2YgdGhlc2Ugc3Vibm9kZXMgcmVwcmVzZW50cyBzb21lIGRlc2lyZWQgY29uZmlndXJhdGlvbiBmb3IgYQogcGluLCBhIGdyb3VwLCBvciBhIGxpc3Qgb2YgcGlucyBvciBncm91cHMuIFRoaXMgY29uZmlndXJhdGlvbiBjYW4gaW5jbHVkZSB0aGUKIG11eCBmdW5jdGlvbiB0byBzZWxlY3Qgb24gdGhvc2UgcGluKHMpL2dyb3VwKHMpLCBhbmQgdmFyaW91cyBwaW4gY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcGluY3RybC1zaXJmLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3BpbmN0cmwtc2lyZi50eHQKaW5kZXggYzU5NmE2YS4uNWY1NWJlNTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3BpbmN0cmwtc2lyZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcGluY3RybC1zaXJmLnR4dApAQCAtMTMsNyArMTMsNyBAQAogUGxlYXNlIHJlZmVyIHRvIHBpbmN0cmwtYmluZGluZ3MudHh0IGluIHRoaXMgZGlyZWN0b3J5IGZvciBkZXRhaWxzIG9mIHRoZSBjb21tb24KIHBpbmN0cmwgYmluZGluZ3MgdXNlZCBieSBjbGllbnQgZGV2aWNlcy4KIAotU2lSRnByaW1hSUkncyBwaW5tdXggbm9kZXMgYWN0IGFzIGEgY29udGFpbmVyIGZvciBhbiBhYml0cmFyeSBudW1iZXIgb2Ygc3Vibm9kZXMuCitTaVJGcHJpbWFJSSdzIHBpbm11eCBub2RlcyBhY3QgYXMgYSBjb250YWluZXIgZm9yIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3Vibm9kZXMuCiBFYWNoIG9mIHRoZXNlIHN1Ym5vZGVzIHJlcHJlc2VudHMgc29tZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ3JvdXAgb2YgcGlucy4KIAogUmVxdWlyZWQgc3Vibm9kZS1wcm9wZXJ0aWVzOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcGluY3RybF9zcGVhci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9waW5jdHJsX3NwZWFyLnR4dAppbmRleCBiNDQ4MGQ1Li40NTg2MTU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9waW5jdHJsX3NwZWFyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9waW5jdHJsX3NwZWFyLnR4dApAQCAtMzIsNyArMzIsNyBAQAogUGxlYXNlIHJlZmVyIHRvIHBpbmN0cmwtYmluZGluZ3MudHh0IGluIHRoaXMgZGlyZWN0b3J5IGZvciBkZXRhaWxzIG9mIHRoZSBjb21tb24KIHBpbmN0cmwgYmluZGluZ3MgdXNlZCBieSBjbGllbnQgZGV2aWNlcy4KIAotU1BFQXIncyBwaW5tdXggbm9kZXMgYWN0IGFzIGEgY29udGFpbmVyIGZvciBhbiBhYml0cmFyeSBudW1iZXIgb2Ygc3Vibm9kZXMuIEVhY2gKK1NQRUFyJ3MgcGlubXV4IG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBzdWJub2Rlcy4gRWFjaAogb2YgdGhlc2Ugc3Vibm9kZXMgcmVwcmVzZW50cyBtdXhpbmcgZm9yIGEgcGluLCBhIGdyb3VwLCBvciBhIGxpc3Qgb2YgcGlucyBvcgogZ3JvdXBzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLGFwcTgwNjQtcGluY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLGFwcTgwNjQtcGluY3RybC50eHQKaW5kZXggMmZiOTBiMy4uYTdiZGU2NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcWNvbSxhcHE4MDY0LXBpbmN0cmwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20sYXBxODA2NC1waW5jdHJsLnR4dApAQCAtMTgsNyArMTgsNyBAQAogY29tbW9uIHBpbmN0cmwgYmluZGluZ3MgdXNlZCBieSBjbGllbnQgZGV2aWNlcywgaW5jbHVkaW5nIHRoZSBtZWFuaW5nIG9mIHRoZQogcGhyYXNlICJwaW4gY29uZmlndXJhdGlvbiBub2RlIi4KIAotUXVhbGNvbW0ncyBwaW4gY29uZmlndXJhdGlvbiBub2RlcyBhY3QgYXMgYSBjb250YWluZXIgZm9yIGFuIGFiaXRyYXJ5IG51bWJlciBvZgorUXVhbGNvbW0ncyBwaW4gY29uZmlndXJhdGlvbiBub2RlcyBhY3QgYXMgYSBjb250YWluZXIgZm9yIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKIHN1Ym5vZGVzLiBFYWNoIG9mIHRoZXNlIHN1Ym5vZGVzIHJlcHJlc2VudHMgc29tZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gZm9yIGEKIHBpbiwgYSBncm91cCwgb3IgYSBsaXN0IG9mIHBpbnMgb3IgZ3JvdXBzLiBUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIGluY2x1ZGUgdGhlCiBtdXggZnVuY3Rpb24gdG8gc2VsZWN0IG9uIHRob3NlIHBpbihzKS9ncm91cChzKSwgYW5kIHZhcmlvdXMgcGluIGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20sYXBxODA4NC1waW5jdHJsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20sYXBxODA4NC1waW5jdHJsLnR4dAppbmRleCBmZmFmYTE5Li5jNGVhNjFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLGFwcTgwODQtcGluY3RybC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcWNvbSxhcHE4MDg0LXBpbmN0cmwudHh0CkBAIC00Nyw3ICs0Nyw3IEBACiBjb21tb24gcGluY3RybCBiaW5kaW5ncyB1c2VkIGJ5IGNsaWVudCBkZXZpY2VzLCBpbmNsdWRpbmcgdGhlIG1lYW5pbmcgb2YgdGhlCiBwaHJhc2UgInBpbiBjb25maWd1cmF0aW9uIG5vZGUiLgogCi1UaGUgcGluIGNvbmZpZ3VyYXRpb24gbm9kZXMgYWN0IGFzIGEgY29udGFpbmVyIGZvciBhbiBhYml0cmFyeSBudW1iZXIgb2YKK1RoZSBwaW4gY29uZmlndXJhdGlvbiBub2RlcyBhY3QgYXMgYSBjb250YWluZXIgZm9yIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKIHN1Ym5vZGVzLiBFYWNoIG9mIHRoZXNlIHN1Ym5vZGVzIHJlcHJlc2VudHMgc29tZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gZm9yIGEKIHBpbiwgYSBncm91cCwgb3IgYSBsaXN0IG9mIHBpbnMgb3IgZ3JvdXBzLiBUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIGluY2x1ZGUgdGhlCiBtdXggZnVuY3Rpb24gdG8gc2VsZWN0IG9uIHRob3NlIHBpbihzKS9ncm91cChzKSwgYW5kIHZhcmlvdXMgcGluIGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20saXBxODA2NC1waW5jdHJsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20saXBxODA2NC1waW5jdHJsLnR4dAppbmRleCBlMzNlNGRjLi42ZTg4ZTkxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLGlwcTgwNjQtcGluY3RybC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcWNvbSxpcHE4MDY0LXBpbmN0cmwudHh0CkBAIC0xOCw3ICsxOCw3IEBACiBjb21tb24gcGluY3RybCBiaW5kaW5ncyB1c2VkIGJ5IGNsaWVudCBkZXZpY2VzLCBpbmNsdWRpbmcgdGhlIG1lYW5pbmcgb2YgdGhlCiBwaHJhc2UgInBpbiBjb25maWd1cmF0aW9uIG5vZGUiLgogCi1RdWFsY29tbSdzIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYWJpdHJhcnkgbnVtYmVyIG9mCitRdWFsY29tbSdzIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgogc3Vibm9kZXMuIEVhY2ggb2YgdGhlc2Ugc3Vibm9kZXMgcmVwcmVzZW50cyBzb21lIGRlc2lyZWQgY29uZmlndXJhdGlvbiBmb3IgYQogcGluLCBhIGdyb3VwLCBvciBhIGxpc3Qgb2YgcGlucyBvciBncm91cHMuIFRoaXMgY29uZmlndXJhdGlvbiBjYW4gaW5jbHVkZSB0aGUKIG11eCBmdW5jdGlvbiB0byBzZWxlY3Qgb24gdGhvc2UgcGluKHMpL2dyb3VwKHMpLCBhbmQgdmFyaW91cyBwaW4gY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcWNvbSxtc204OTYwLXBpbmN0cmwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcWNvbSxtc204OTYwLXBpbmN0cmwudHh0CmluZGV4IDkzYjdkZTkuLmViOGQ4YWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20sbXNtODk2MC1waW5jdHJsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLG1zbTg5NjAtcGluY3RybC50eHQKQEAgLTQ3LDcgKzQ3LDcgQEAKIGNvbW1vbiBwaW5jdHJsIGJpbmRpbmdzIHVzZWQgYnkgY2xpZW50IGRldmljZXMsIGluY2x1ZGluZyB0aGUgbWVhbmluZyBvZiB0aGUKIHBocmFzZSAicGluIGNvbmZpZ3VyYXRpb24gbm9kZSIuCiAKLVRoZSBwaW4gY29uZmlndXJhdGlvbiBub2RlcyBhY3QgYXMgYSBjb250YWluZXIgZm9yIGFuIGFiaXRyYXJ5IG51bWJlciBvZgorVGhlIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgogc3Vibm9kZXMuIEVhY2ggb2YgdGhlc2Ugc3Vibm9kZXMgcmVwcmVzZW50cyBzb21lIGRlc2lyZWQgY29uZmlndXJhdGlvbiBmb3IgYQogcGluLCBhIGdyb3VwLCBvciBhIGxpc3Qgb2YgcGlucyBvciBncm91cHMuIFRoaXMgY29uZmlndXJhdGlvbiBjYW4gaW5jbHVkZSB0aGUKIG11eCBmdW5jdGlvbiB0byBzZWxlY3Qgb24gdGhvc2UgcGluKHMpL2dyb3VwKHMpLCBhbmQgdmFyaW91cyBwaW4gY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcWNvbSxtc204OTc0LXBpbmN0cmwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcWNvbSxtc204OTc0LXBpbmN0cmwudHh0CmluZGV4IGQyZWE4MGQuLmU0ZDZhOWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20sbXNtODk3NC1waW5jdHJsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLG1zbTg5NzQtcGluY3RybC50eHQKQEAgLTE4LDcgKzE4LDcgQEAKIGNvbW1vbiBwaW5jdHJsIGJpbmRpbmdzIHVzZWQgYnkgY2xpZW50IGRldmljZXMsIGluY2x1ZGluZyB0aGUgbWVhbmluZyBvZiB0aGUKIHBocmFzZSAicGluIGNvbmZpZ3VyYXRpb24gbm9kZSIuCiAKLVF1YWxjb21tJ3MgcGluIGNvbmZpZ3VyYXRpb24gbm9kZXMgYWN0IGFzIGEgY29udGFpbmVyIGZvciBhbiBhYml0cmFyeSBudW1iZXIgb2YKK1F1YWxjb21tJ3MgcGluIGNvbmZpZ3VyYXRpb24gbm9kZXMgYWN0IGFzIGEgY29udGFpbmVyIGZvciBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCiBzdWJub2Rlcy4gRWFjaCBvZiB0aGVzZSBzdWJub2RlcyByZXByZXNlbnRzIHNvbWUgZGVzaXJlZCBjb25maWd1cmF0aW9uIGZvciBhCiBwaW4sIGEgZ3JvdXAsIG9yIGEgbGlzdCBvZiBwaW5zIG9yIGdyb3Vwcy4gVGhpcyBjb25maWd1cmF0aW9uIGNhbiBpbmNsdWRlIHRoZQogbXV4IGZ1bmN0aW9uIHRvIHNlbGVjdCBvbiB0aG9zZSBwaW4ocykvZ3JvdXAocyksIGFuZCB2YXJpb3VzIHBpbiBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXIvcG93ZXItY29udHJvbGxlci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXIvcG93ZXItY29udHJvbGxlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3YTNiYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlci9wb3dlci1jb250cm9sbGVyLnR4dApAQCAtMCwwICsxLDE4IEBACisqIEdlbmVyaWMgc3lzdGVtIHBvd2VyIGNvbnRyb2wgY2FwYWJpbGl0eQorCitQb3dlci1tYW5hZ2VtZW50IGludGVncmF0ZWQgY2lyY3VpdHMgb3IgbWlzY2VsbGFuZW91cyBoYXJkd2FyZSBjb21wb25lbnRzIGFyZQorc29tZXRpbWVzIGFibGUgdG8gY29udHJvbCB0aGUgc3lzdGVtIHBvd2VyLiBUaGUgZGV2aWNlIGRyaXZlciBhc3NvY2lhdGVkIHdpdGggdGhlc2UKK2NvbXBvbmVudHMgbWlnaHQgbmVlZCB0byBkZWZpbmUgdGhpcyBjYXBhYmlsaXR5LCB3aGljaCB0ZWxscyB0aGUga2VybmVsIHRoYXQKK2l0IGNhbiBiZSB1c2VkIHRvIHN3aXRjaCBvZmYgdGhlIHN5c3RlbS4gVGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIG11c3QgaGF2ZSB0aGUKK3N0YW5kYXJkIHByb3BlcnR5ICJzeXN0ZW0tcG93ZXItY29udHJvbGxlciIgaW4gaXRzIGRldmljZSBub2RlLiBUaGlzIHByb3BlcnR5CittYXJrcyB0aGUgZGV2aWNlIGFzIGFibGUgdG8gY29udHJvbCB0aGUgc3lzdGVtIHBvd2VyLiBJbiBvcmRlciB0byB0ZXN0IGlmIHRoaXMKK3Byb3BlcnR5IGlzIGZvdW5kIHByb2dyYW1tYXRpY2FsbHksIHVzZSB0aGUgaGVscGVyIGZ1bmN0aW9uCisib2ZfZGV2aWNlX2lzX3N5c3RlbV9wb3dlcl9jb250cm9sbGVyIiBmcm9tIG9mLmggLgorCitFeGFtcGxlOgorCithY3Q4ODQ2OiBhY3Q4ODQ2QDUgeworCSBjb21wYXRpYmxlID0gImFjdGl2ZS1zZW1pLGFjdDg4NDYiOworCSBzdGF0dXMgPSAib2theSI7CisJIHN5c3RlbS1wb3dlci1jb250cm9sbGVyOworfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyX3N1cHBseS9pbXgtc252cy1wb3dlcm9mZi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJfc3VwcGx5L2lteC1zbnZzLXBvd2Vyb2ZmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzdjOWJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyX3N1cHBseS9pbXgtc252cy1wb3dlcm9mZi50eHQKQEAgLTAsMCArMSwyMyBAQAoraS5teDYgUG93ZXJvZmYgRHJpdmVyCisKK1NOVlNfTFBDUiBpbiBTTlZTIG1vZHVsZSBjYW4gcG93ZXIgb2ZmIHRoZSB3aG9sZSBzeXN0ZW0gYnkgcHVsbAorUE1JQ19PTl9SRVEgbG93IGlmIFBNSUNfT05fUkVRIGlzIGNvbm5lY3RlZCB3aXRoIGV4dGVybmFsIFBNSUMuCitJZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgUE1JQ19PTl9SRVEgYXMgcG93ZXIgb24vb2ZmIGNvbnRyb2wsCitwbGVhc2Ugc2V0IHN0YXR1cz0nZGlzYWJsZWQnIHRvIGRpc2FibGUgdGhpcyBkcml2ZXIuCisKK1JlcXVpcmVkIFByb3BlcnRpZXM6CistY29tcGF0aWJsZTogImZzbCxzZWMtdjQuMC1wb3dlcm9mZiIKKy1yZWc6IFNwZWNpZmllcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgU05WU19MUENSIHJlZ2lzdGVyCisKK0V4YW1wbGU6CisJc252c0AwMjBjYzAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLW1vbiIsICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXMgPSA8MCAweDAyMGNjMDAwIDB4NDAwMD47CisJCS4uLi4uCisJCXNudnNfcG93ZXJvZmY6IHNudnMtcG93ZXJvZmZAMzggeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcG93ZXJvZmYiOworCQkJcmVnID0gPDB4MzggMHg0PjsKKwkJfTsKKwl9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2FjdDg4NjUtcmVndWxhdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IudHh0CmluZGV4IDg2NTYxNGIuLmRhZDYzNTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IudHh0CkBAIC01LDYgKzUsMTAgQEAKIC0gY29tcGF0aWJsZTogImFjdGl2ZS1zZW1pLGFjdDg4NDYiIG9yICJhY3RpdmUtc2VtaSxhY3Q4ODY1IgogLSByZWc6IEkyQyBzbGF2ZSBhZGRyZXNzCiAKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIHN5c3RlbS1wb3dlci1jb250cm9sbGVyOiBUZWxsaW5nIHdoZXRoZXIgb3Igbm90IHRoaXMgcG1pYyBpcyBjb250cm9sbGluZworICB0aGUgc3lzdGVtIHBvd2VyLiBTZWUgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3Bvd2VyLWNvbnRyb2xsZXIudHh0IC4KKwogQW55IHN0YW5kYXJkIHJlZ3VsYXRvciBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc2luZ2xlIHJlZ3VsYXRvci4KIAogVGhlIHZhbGlkIG5hbWVzIGZvciByZWd1bGF0b3JzIGFyZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvbWF4Nzc4MDIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9tYXg3NzgwMi50eHQKaW5kZXggNWFlYWZmYy4uNzllNTQ3NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9tYXg3NzgwMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9tYXg3NzgwMi50eHQKQEAgLTI1LDYgKzI1LDI5IEBACiAJCQlleGFtcGxlOiBMRE8xLCBMRE8yLCBMRE8zNS4KIAktQlVDS24gCToJZm9yIEJVQ0tzLCB3aGVyZSBuIGNhbiBsaWUgaW4gcmFuZ2UgMSB0byAxMC4KIAkJCWV4YW1wbGU6IEJVQ0sxLCBCVUNLNSwgQlVDSzEwLgorCitUaGUgbWF4Nzc4MDIgcmVndWxhdG9yIHN1cHBvcnRzIHR3byBkaWZmZXJlbnQgb3BlcmF0aW5nIG1vZGVzOiBOb3JtYWwgYW5kIExvdworUG93ZXIgTW9kZS4gU29tZSByZWd1bGF0b3JzIHN1cHBvcnQgdGhlIG1vZGVzIHRvIGJlIGNoYW5nZWQgYXQgc3RhcnR1cCBvciBieQordGhlIGNvbnN1bWVycyBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiB3aGlsZSBvdGhlcnMgb25seSBzdXBwb3J0IHRvIGNoYW5nZSB0aGUKK21vZGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kLiBUaGUgc3RhbmRhcmQgcmVndWxhdG9yIHN1c3BlbmQgc3RhdGVzIGJpbmRpbmcgY2FuCitiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlLgorCitUaGUgcmVndWxhdG9ycyB0aGF0IHN1cHBvcnQgdGhlIHN0YW5kYXJkICJyZWd1bGF0b3ItaW5pdGlhbC1tb2RlIiBwcm9wZXJ0eSwKK2NoYW5naW5nIHRoZWlyIG1vZGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gYXJlOiBMRE9zIDEsIDMsIDIwIGFuZCAyMS4KKworVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgInJlZ3VsYXRvci1pbml0aWFsLW1vZGUiIGFuZCAicmVndWxhdG9yLW1vZGUiIGFyZToKKwkxOiBOb3JtYWwgcmVndWxhdG9yIHZvbHRhZ2Ugb3V0cHV0IG1vZGUuCisJMzogTG93IFBvd2VyIHdoaWNoIHJlZHVjZXMgdGhlIHF1aWVzY2VudCBjdXJyZW50IGRvd24gdG8gb25seSAxdUEKKworVGhlIGxpc3Qgb2YgdmFsaWQgbW9kZXMgYXJlIGRlZmluZWQgaW4gdGhlIGR0LWJpbmRpbmdzL2Nsb2NrL21heGltLG1heDc3ODAyLmgKK2hlYWRlciBhbmQgY2FuIGJlIGluY2x1ZGVkIGJ5IGRldmljZSB0cmVlIHNvdXJjZSBmaWxlcy4KKworVGhlIHN0YW5kYXJkICJyZWd1bGF0b3ItbW9kZSIgcHJvcGVydHkgY2FuIG9ubHkgYmUgdXNlZCBmb3IgcmVndWxhdG9ycyB0aGF0CitzdXBwb3J0IGNoYW5naW5nIHRoZWlyIG1vZGUgdG8gTG93IFBvd2VyIE1vZGUgZHVyaW5nIHN1c3BlbmQuIFRoZXNlIHJlZ3VsYXRvcnMKK2FyZTogQlVDS3MgMi00IGFuZCBMRE9zIDEtMzUuIEFsc28sIGl0IG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZSByZWd1bGF0b3IgaGFzCitiZWVuIGVuYWJsZWQgZm9yIHRoZSBnaXZlbiBzdXNwZW5kIHN0YXRlIHVzaW5nICJyZWd1bGF0b3Itb24taW4tc3VzcGVuZCIgYW5kCitoYXMgbm90IGJlZW4gZGlzYWJsZWQgZm9yIHRoYXQgc3RhdGUgdXNpbmcgInJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZCIuCisKIEV4YW1wbGU6CiAKIAltYXg3NzgwMkAwOSB7CkBAIC0zNiwxMSArNTksMjMgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAKIAkJcmVndWxhdG9ycyB7CisJCQlsZG8xX3JlZzogTERPMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkXzF2MCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItaW5pdGlhbC1tb2RlID0gPE1BWDc3ODAyX09QTU9ERV9MUD47CisJCQl9OworCiAJCQlsZG8xMV9yZWc6IExETzExIHsKIAkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbGRvMTEiOwogCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE5MDAwMDA+OwogCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE5MDAwMDA+OwogCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vbi1pbi1zdXNwZW5kOworCQkJCQlyZWd1bGF0b3ItbW9kZSA9IDxNQVg3NzgwMl9PUE1PREVfTFA+OworCQkJCX07CiAJCQl9OwogCiAJCQlidWNrMV9yZWc6IEJVQ0sxIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dAppbmRleCA4NjA3NDMzLi5hYmIyNmI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0CkBAIC0xOSw2ICsxOSwyNCBAQAogICBkZXNpZ24gcmVxdWlyZXMuIFRoaXMgcHJvcGVydHkgZGVzY3JpYmVzIHRoZSB0b3RhbCBzeXN0ZW0gcmFtcCB0aW1lCiAgIHJlcXVpcmVkIGR1ZSB0byB0aGUgY29tYmluYXRpb24gb2YgaW50ZXJuYWwgcmFtcGluZyBvZiB0aGUgcmVndWxhdG9yIGl0c2VsZiwKICAgYW5kIGJvYXJkIGRlc2lnbiBpc3N1ZXMgc3VjaCBhcyB0cmFjZSBjYXBhY2l0YW5jZSBhbmQgbG9hZCBvbiB0aGUgc3VwcGx5LgorLSByZWd1bGF0b3Itc3RhdGUtbWVtIHN1Yi1yb290IG5vZGUgZm9yIFN1c3BlbmQtdG8tUkFNIG1vZGUKKyAgOiBzdXNwZW5kIHRvIG1lbW9yeSwgdGhlIGRldmljZSBnb2VzIHRvIHNsZWVwLCBidXQgYWxsIGRhdGEgc3RvcmVkIGluIG1lbW9yeSwKKyAgb25seSBzb21lIGV4dGVybmFsIGludGVycnVwdCBjYW4gd2FrZSB0aGUgZGV2aWNlLgorLSByZWd1bGF0b3Itc3RhdGUtZGlzayBzdWItcm9vdCBub2RlIGZvciBTdXNwZW5kLXRvLURJU0sgbW9kZQorICA6IHN1c3BlbmQgdG8gZGlzaywgdGhpcyBzdGF0ZSBvcGVyYXRlcyBzaW1pbGFybHkgdG8gU3VzcGVuZC10by1SQU0sCisgIGJ1dCBpbmNsdWRlcyBhIGZpbmFsIHN0ZXAgb2Ygd3JpdGluZyBtZW1vcnkgY29udGVudHMgdG8gZGlzay4KKy0gcmVndWxhdG9yLXN0YXRlLVttZW0vZGlza10gbm9kZSBoYXMgZm9sbG93aW5nIGNvbW1vbiBwcm9wZXJ0aWVzOgorCS0gcmVndWxhdG9yLW9uLWluLXN1c3BlbmQ6IHJlZ3VsYXRvciBzaG91bGQgYmUgb24gaW4gc3VzcGVuZCBzdGF0ZS4KKwktIHJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDogcmVndWxhdG9yIHNob3VsZCBiZSBvZmYgaW4gc3VzcGVuZCBzdGF0ZS4KKwktIHJlZ3VsYXRvci1zdXNwZW5kLW1pY3Jvdm9sdDogcmVndWxhdG9yIHNob3VsZCBiZSBzZXQgdG8gdGhpcyB2b2x0YWdlCisJICBpbiBzdXNwZW5kLgorCS0gcmVndWxhdG9yLW1vZGU6IG9wZXJhdGluZyBtb2RlIGluIHRoZSBnaXZlbiBzdXNwZW5kIHN0YXRlLgorCSAgVGhlIHNldCBvZiBwb3NzaWJsZSBvcGVyYXRpbmcgbW9kZXMgZGVwZW5kcyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mCisJICBldmVyeSBoYXJkd2FyZSBzbyB0aGUgdmFsaWQgbW9kZXMgYXJlIGRvY3VtZW50ZWQgb24gZWFjaCByZWd1bGF0b3IKKwkgIGRldmljZSB0cmVlIGJpbmRpbmcgZG9jdW1lbnQuCistIHJlZ3VsYXRvci1pbml0aWFsLW1vZGU6IGluaXRpYWwgb3BlcmF0aW5nIG1vZGUuIFRoZSBzZXQgb2YgcG9zc2libGUgb3BlcmF0aW5nCisgIG1vZGVzIGRlcGVuZHMgb24gdGhlIGNhcGFiaWxpdGllcyBvZiBldmVyeSBoYXJkd2FyZSBzbyBlYWNoIGRldmljZSBiaW5kaW5nCisgIGRvY3VtZW50YXRpb24gZXhwbGFpbnMgd2hpY2ggdmFsdWVzIHRoZSByZWd1bGF0b3Igc3VwcG9ydHMuCiAKIERlcHJlY2F0ZWQgcHJvcGVydGllczoKIC0gcmVndWxhdG9yLWNvbXBhdGlibGU6IElmIGEgcmVndWxhdG9yIGNoaXAgY29udGFpbnMgbXVsdGlwbGUKQEAgLTM0LDYgKzUyLDEwIEBACiAJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI1MDAwMDA+OwogCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQl2aW4tc3VwcGx5ID0gPCZ2aW4+OworCisJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJcmVndWxhdG9yLW9uLWluLXN1c3BlbmQ7CisJCX07CiAJfTsKIAogUmVndWxhdG9yIENvbnN1bWVyczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLnR4dAppbmRleCA4ODI0NTVlLi5mOWFjYmMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3NreTgxNDUyLXJlZ3VsYXRvci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9za3k4MTQ1Mi1yZWd1bGF0b3IudHh0CkBAIC0xLDYgKzEsNyBAQAogU0tZODE0NTIgdm9sdGFnZSByZWd1bGF0b3IKIAogUmVxdWlyZWQgcHJvcGVydGllczoKKy0gcmVndWxhdG9yIG5vZGUgbmFtZWQgbG91dC4KIC0gYW55IHJlcXVpcmVkIGdlbmVyaWMgcHJvcGVydGllcyBkZWZpbmVkIGluIHJlZ3VsYXRvci50eHQKIAogT3B0aW9uYWwgcHJvcGVydGllczoKQEAgLTksOCArMTAsOSBAQAogRXhhbXBsZToKIAogCXJlZ3VsYXRvciB7Ci0JCS8qIGdlbmVyaWMgcmVndWxhdG9yIHByb3BlcnRpZXMgKi8KLQkJcmVndWxhdG9yLW5hbWUgPSAidG91Y2hfZW4iOwotCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw0NTAwMDAwPjsKLQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8ODAwMDAwMD47CisJCWxvdXQgeworCQkJcmVndWxhdG9yLW5hbWUgPSAic2t5ODE0NTItbG91dCI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw0NTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDgwMDAwMDA+OworCQl9OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXQvc3Qsc3RpLXBpY29waHlyZXNldC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXQvc3Qsc3RpLXBpY29waHlyZXNldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhZTlmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNldC9zdCxzdGktcGljb3BoeXJlc2V0LnR4dApAQCAtMCwwICsxLDQyIEBACitTVE1pY3JvZWxlY3Ryb25pY3MgU1RpIGZhbWlseSBTeXNjb25maWcgUGljb3BoeSBTb2Z0UmVzZXQgQ29udHJvbGxlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBiaW5kaW5nIGRlc2NyaWJlcyBhIHJlc2V0IGNvbnRyb2xsZXIgZGV2aWNlIHRoYXQgaXMgdXNlZCB0byBlbmFibGUgYW5kCitkaXNhYmxlIG9uLWNoaXAgUGljb1BIWSBVU0IyIHBoeShzKSB1c2luZyAic29mdHJlc2V0IiBjb250cm9sIGJpdHMgZm91bmQgaW4KK3RoZSBTVGkgZmFtaWx5IFNvQyBzeXN0ZW0gY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisKK1RoZSBhY3R1YWwgYWN0aW9uIHRha2VuIHdoZW4gc29mdHJlc2V0IGlzIGFzc2VydGVkIGlzIGhhcmR3YXJlIGRlcGVuZGVudC4KK0hvd2V2ZXIsIHdoZW4gYXNzZXJ0ZWQgaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIGhhcmR3YXJlJ3MKK3JlZ2lzdGVycyBhbmQgYWZ0ZXIgYW4gYXNzZXJ0L2RlYXNzZXJ0IHNlcXVlbmNlIHRoZSBoYXJkd2FyZSdzIHByZXZpb3VzIHN0YXRlCittYXkgbm8gbG9uZ2VyIGJlIHZhbGlkLgorCitQbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2V0L3Jlc2V0LnR4dAorZm9yIGNvbW1vbiByZXNldCBjb250cm9sbGVyIGJpbmRpbmcgdXNhZ2UuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6IFNob3VsZCBiZSAic3Qsc3RpaDQwNy1waWNvcGh5cmVzZXQiCistICNyZXNldC1jZWxsczogMSwgc2VlIGJlbG93CisKK0V4YW1wbGU6CisKKwlwaWNvcGh5cmVzZXQ6IHBpY29waHlyZXNldC1jb250cm9sbGVyIHsKKwkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBpY29waHlyZXNldCI7CisJCSNyZXNldC1jZWxscyA9IDwxPjsKKwl9OworCitTcGVjaWZ5aW5nIHBpY29waHlyZXNldCBjb250cm9sIG9mIGRldmljZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitEZXZpY2Ugbm9kZXMgc2hvdWxkIHNwZWNpZnkgdGhlIHJlc2V0IGNoYW5uZWwgcmVxdWlyZWQgaW4gdGhlaXIgInJlc2V0cyIKK3Byb3BlcnR5LCBjb250YWluaW5nIGEgcGhhbmRsZSB0byB0aGUgcGljb3BoeXJlc2V0IGRldmljZSBub2RlIGFuZCBhbgoraW5kZXggc3BlY2lmeWluZyB3aGljaCBjaGFubmVsIHRvIHVzZSwgYXMgZGVzY3JpYmVkIGluCitEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXQvcmVzZXQudHh0LgorCitFeGFtcGxlOgorCisJdXNiMl9waWNvcGh5MDogdXNicGljb3BoeUAwIHsKKwkJcmVzZXRzID0gPCZwaWNvcGh5cmVzZXQgU1RJSDQwN19QSUNPUEhZMF9SRVNFVD47CisJfTsKKworTWFjcm8gZGVmaW5pdGlvbnMgZm9yIHRoZSBzdXBwb3J0ZWQgcmVzZXQgY2hhbm5lbHMgY2FuIGJlIGZvdW5kIGluOgoraW5jbHVkZS9kdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MDctcmVzZXRzLmgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ydGMvYXRtZWwsYXQ5MXNhbTktcnRjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ydGMvYXRtZWwsYXQ5MXNhbTktcnRjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWU3OWQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3J0Yy9hdG1lbCxhdDkxc2FtOS1ydGMudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0F0bWVsIEFUOTFTQU05MjYwIFJlYWwgVGltZSBUaW1lcgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBzaG91bGQgYmU6ICJhdG1lbCxhdDkxc2FtOTI2MC1ydHQiCistIHJlZzogc2hvdWxkIGVuY29kZSB0aGUgbWVtb3J5IHJlZ2lvbiBvZiB0aGUgUlRUIGNvbnRyb2xsZXIKKy0gaW50ZXJydXB0czogcnR0IGFsYXJtL2V2ZW50IGludGVycnVwdAorLSBjbG9ja3M6IHNob3VsZCBjb250YWluIHRoZSAzMiBLSHogc2xvdyBjbGsgdGhhdCB3aWxsIGRyaXZlIHRoZSBSVFQgYmxvY2suCistIGF0bWVsLHJ0dC1ydGMtdGltZS1yZWc6IHNob3VsZCBlbmNvZGUgdGhlIEdQQlIgcmVnaXN0ZXIgdXNlZCB0byBzdG9yZQorCXRoZSB0aW1lIGJhc2Ugd2hlbiB0aGUgUlRUIGlzIHVzZWQgYXMgYW4gUlRDLgorCVRoZSBmaXJzdCBjZWxsIHNob3VsZCBwb2ludCB0byB0aGUgR1BCUiBub2RlIGFuZCB0aGUgc2Vjb25kIG9uZQorCWVuY29kZSB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgR1BCUiBibG9jayAob3IgaW4gb3RoZXIgd29yZHMsIHRoZQorCUdQQlIgcmVnaXN0ZXIgdXNlZCB0byBzdG9yZSB0aGUgdGltZSBiYXNlKS4KKworCitFeGFtcGxlOgorCitydHRAZmZmZmZkMjAgeworCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjAtcnR0IjsKKwlyZWcgPSA8MHhmZmZmZmQyMCAweDEwPjsKKwlpbnRlcnJ1cHRzID0gPDEgNCA3PjsKKwljbG9ja3MgPSA8JmNsazMyaz47CisJYXRtZWwscnR0LXJ0Yy10aW1lLXJlZyA9IDwmZ3BiciAweDA+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aGVybWFsL3JjYXItdGhlcm1hbC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGhlcm1hbC9yY2FyLXRoZXJtYWwudHh0CmluZGV4IDBlZjAwYmUuLjQzNDA0YjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aGVybWFsL3JjYXItdGhlcm1hbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3RoZXJtYWwvcmNhci10aGVybWFsLnR4dApAQCAtNyw3ICs3LDEwIEBACiAJCQkgICAgLSAicmVuZXNhcyx0aGVybWFsLXI4YTczYTQiIChSLU1vYmlsZSBBUDYpCiAJCQkgICAgLSAicmVuZXNhcyx0aGVybWFsLXI4YTc3NzkiIChSLUNhciBIMSkKIAkJCSAgICAtICJyZW5lc2FzLHRoZXJtYWwtcjhhNzc5MCIgKFItQ2FyIEgyKQotCQkJICAgIC0gInJlbmVzYXMsdGhlcm1hbC1yOGE3NzkxIiAoUi1DYXIgTTIpCisJCQkgICAgLSAicmVuZXNhcyx0aGVybWFsLXI4YTc3OTEiIChSLUNhciBNMi1XKQorCQkJICAgIC0gInJlbmVzYXMsdGhlcm1hbC1yOGE3NzkyIiAoUi1DYXIgVjJIKQorCQkJICAgIC0gInJlbmVzYXMsdGhlcm1hbC1yOGE3NzkzIiAoUi1DYXIgTTItTikKKwkJCSAgICAtICJyZW5lc2FzLHRoZXJtYWwtcjhhNzc5NCIgKFItQ2FyIEUyKQogLSByZWcJCQk6IEFkZHJlc3MgcmFuZ2Ugb2YgdGhlIHRoZXJtYWwgcmVnaXN0ZXJzLgogCQkJICBUaGUgMXN0IHJlZyB3aWxsIGJlIHJlY29nbml6ZWQgYXMgY29tbW9uIHJlZ2lzdGVyCiAJCQkgIGlmIGl0IGhhcyAiaW50ZXJydXB0cyIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvbWFydmVsbCxhcm1hZGEtMzcwLXhwLXRpbWVyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9tYXJ2ZWxsLGFybWFkYS0zNzAteHAtdGltZXIudHh0CmluZGV4IGY0NTUxODIuLmU5Yzc4Y2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9tYXJ2ZWxsLGFybWFkYS0zNzAteHAtdGltZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9tYXJ2ZWxsLGFybWFkYS0zNzAteHAtdGltZXIudHh0CkBAIC0yLDggKzIsMTAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgZWl0aGVyICJtYXJ2ZWxsLGFybWFkYS0zNzAtdGltZXIiIG9yCi0gICJtYXJ2ZWxsLGFybWFkYS14cC10aW1lciIgYXMgYXBwcm9wcmlhdGUuCistIGNvbXBhdGlibGU6IFNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAibWFydmVsbCxhcm1hZGEtMzcwLXRpbWVyIiwKKwkgICAgICAibWFydmVsbCxhcm1hZGEtMzc1LXRpbWVyIiwKKwkgICAgICAibWFydmVsbCxhcm1hZGEteHAtdGltZXIiLgogLSBpbnRlcnJ1cHRzOiBTaG91bGQgY29udGFpbiB0aGUgbGlzdCBvZiBHbG9iYWwgVGltZXIgaW50ZXJydXB0cyBhbmQKICAgdGhlbiBsb2NhbCB0aW1lciBpbnRlcnJ1cHRzCiAtIHJlZzogU2hvdWxkIGNvbnRhaW4gbG9jYXRpb24gYW5kIGxlbmd0aCBmb3IgdGltZXJzIHJlZ2lzdGVyLiBGaXJzdApAQCAtMTMsNyArMTUsOCBAQAogQ2xvY2tzIHJlcXVpcmVkIGZvciBjb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC10aW1lciI6CiAtIGNsb2NrcyA6IE11c3QgY29udGFpbiBhIHNpbmdsZSBlbnRyeSBkZXNjcmliaW5nIHRoZSBjbG9jayBpbnB1dAogCi1DbG9ja3MgcmVxdWlyZWQgZm9yIGNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEteHAtdGltZXIiOgorQ2xvY2tzIHJlcXVpcmVkIGZvciBjb21wYXRpYmxlcyA9ICJtYXJ2ZWxsLGFybWFkYS14cC10aW1lciIsCisJCQkJICAibWFydmVsbCxhcm1hZGEtMzc1LXRpbWVyIjoKIC0gY2xvY2tzIDogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgogLSBjbG9jay1uYW1lcyA6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJpZXM6CiAgICJuYmNsayIgKEwyL2NvaGVyZW5jeSBmYWJyaWMgY2xvY2spLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3RpbWVyL3JlbmVzYXMsbXR1Mi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyxtdHUyLnR4dAppbmRleCBkOWE4ZDVhLi5iYTBhMzRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyxtdHUyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyxtdHUyLnR4dApAQCAtMSw0ICsxLDQgQEAKLSogUmVuZXNhcyBSLUNhciBNdWx0aS1GdW5jdGlvbiBUaW1lciBQdWxzZSBVbml0IDIgKE1UVTIpCisqIFJlbmVzYXMgTXVsdGktRnVuY3Rpb24gVGltZXIgUHVsc2UgVW5pdCAyIChNVFUyKQogCiBUaGUgTVRVMiBpcyBhIG11bHRpLXB1cnBvc2UsIG11bHRpLWNoYW5uZWwgdGltZXIvY291bnRlciB3aXRoIGNvbmZpZ3VyYWJsZQogY2xvY2sgaW5wdXRzIGFuZCBwcm9ncmFtbWFibGUgY29tcGFyZSBtYXRjaC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9yZW5lc2FzLHRtdS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyx0bXUudHh0CmluZGV4IDdkYjg5ZmIuLmNkNWYyMGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9yZW5lc2FzLHRtdS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3RpbWVyL3JlbmVzYXMsdG11LnR4dApAQCAtMSw0ICsxLDQgQEAKLSogUmVuZXNhcyBSLUNhciBUaW1lciBVbml0IChUTVUpCisqIFJlbmVzYXMgUi1Nb2JpbGUvUi1DYXIgVGltZXIgVW5pdCAoVE1VKQogCiBUaGUgVE1VIGlzIGEgMzItYml0IHRpbWVyL2NvdW50ZXIgd2l0aCBjb25maWd1cmFibGUgY2xvY2sgaW5wdXRzIGFuZAogcHJvZ3JhbW1hYmxlIGNvbXBhcmUgbWF0Y2guCkBAIC05LDYgKzksOCBAQAogUmVxdWlyZWQgUHJvcGVydGllczoKIAogICAtIGNvbXBhdGlibGU6IG11c3QgY29udGFpbiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOgorICAgIC0gInJlbmVzYXMsdG11LXI4YTc3NDAiIGZvciB0aGUgcjhhNzc0MCBUTVUKKyAgICAtICJyZW5lc2FzLHRtdS1yOGE3Nzc4IiBmb3IgdGhlIHI4YTc3NzggVE1VCiAgICAgLSAicmVuZXNhcyx0bXUtcjhhNzc3OSIgZm9yIHRoZSByOGE3Nzc5IFRNVQogICAgIC0gInJlbmVzYXMsdG11IiBmb3IgYW55IFRNVS4KICAgICAgIFRoaXMgaXMgYSBmYWxsYmFjayBmb3IgdGhlIGFib3ZlIHJlbmVzYXMsdG11LSogZW50cmllcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZlbmRvci1wcmVmaXhlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dAppbmRleCA3MjM5OTlkLi4wZDM1NDYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dApAQCAtMzQsMTIgKzM0LDE0IEBACiBjaHJwCUNvbW1vbiBIYXJkd2FyZSBSZWZlcmVuY2UgUGxhdGZvcm0KIGNodW5naHdhCUNodW5naHdhIFBpY3R1cmUgVHViZXMgTHRkLgogY2lycnVzCUNpcnJ1cyBMb2dpYywgSW5jLgorY25tCUNoaXBzJk1lZGlhLCBJbmMuCiBjb3J0aW5hCUNvcnRpbmEgU3lzdGVtcywgSW5jLgogY3J5c3RhbGZvbnR6CUNyeXN0YWxmb250eiBBbWVyaWNhLCBJbmMuCiBkYWxsYXMJTWF4aW0gSW50ZWdyYXRlZCBQcm9kdWN0cyAoZm9ybWVybHkgRGFsbGFzIFNlbWljb25kdWN0b3IpCiBkYXZpY29tCURBVklDT00gU2VtaWNvbmR1Y3RvciwgSW5jLgogZGVueAlEZW54IFNvZnR3YXJlIEVuZ2luZWVyaW5nCiBkaWdpCURpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCitkaWdpbGVudAlEaWdsZW50LCBJbmMuCiBkbGcJRGlhbG9nIFNlbWljb25kdWN0b3IKIGRsaW5rCUQtTGluayBDb3Jwb3JhdGlvbgogZG1vCURhdGEgTW9kdWwgQUcKQEAgLTc3LDYgKzc5LDcgQEAKIGludGVsCUludGVsIENvcnBvcmF0aW9uCiBpbnRlcmNvbnRyb2wJSW50ZXIgQ29udHJvbCBHcm91cAogaXNlZQlJU0VFIDIwMDcgUy5MLgoraXNpbCAgICBJbnRlcnNpbCAoZGVwcmVjYXRlZCwgdXNlIGlzbCkKIGlzbAlJbnRlcnNpbAoga2FybwlLYS1SbyBlbGVjdHJvbmljcyBHbWJICiBrZXltaWxlCUtleW1pbGUgR21iSApAQCAtOTAsOCArOTMsMTAgQEAKIG1hcnZlbGwJTWFydmVsbCBUZWNobm9sb2d5IEdyb3VwIEx0ZC4KIG1heGltCU1heGltIEludGVncmF0ZWQgUHJvZHVjdHMKIG1lZGlhdGVrCU1lZGlhVGVrIEluYy4KK21lcnJpaQlNZXJyaWkgVGVjaG5vbG9neSBDby4sIEx0ZC4KIG1pY3JlbAlNaWNyZWwgSW5jLgogbWljcm9jaGlwCU1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4KK21pY3JvbglNaWNyb24gVGVjaG5vbG9neSBJbmMuCiBtaXRzdWJpc2hpCU1pdHN1YmlzaGkgRWxlY3RyaWMgQ29ycG9yYXRpb24KIG1vc2FpeHRlY2gJTW9zYWl4IFRlY2hub2xvZ2llcywgSW5jLgogbW94YQlNb3hhCkBAIC0xMjcsNiArMTMyLDcgQEAKIHJpY29oCVJpY29oIENvLiBMdGQuCiByb2NrY2hpcAlGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uLCBMdGQKIHNhbXN1bmcJU2Ftc3VuZyBTZW1pY29uZHVjdG9yCitzYW5kaXNrCVNhbmRpc2sgQ29ycG9yYXRpb24KIHNicwlTbWFydCBCYXR0ZXJ5IFN5c3RlbQogc2NoaW5kbGVyCVNjaGluZGxlcgogc2VhZ2F0ZQlTZWFnYXRlIFRlY2hub2xvZ3kgUExDCkBAIC0xMzgsNyArMTQ0LDcgQEAKIHNpcmYJU2lSRiBUZWNobm9sb2d5LCBJbmMuCiBzaXRyb25peAlTaXRyb25peCBUZWNobm9sb2d5IENvcnBvcmF0aW9uCiBzbXNjCVN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3Jwb3JhdGlvbgotc25wcyAJU3lub3BzeXMsIEluYy4KK3NucHMJU3lub3BzeXMsIEluYy4KIHNvbGlkcnVuCVNvbGlkUnVuCiBzb255CVNvbnkgQ29ycG9yYXRpb24KIHNwYW5zaW9uCVNwYW5zaW9uIEluYy4KQEAgLTE0Niw2ICsxNTIsNyBAQAogc3RlCVNULUVyaWNzc29uCiBzdGVyaWNzc29uCVNULUVyaWNzc29uCiBzeW5vbG9neQlTeW5vbG9neSwgSW5jLgordGJzCVRCUyBUZWNobm9sb2dpZXMKIHRoaW5lCVRIaW5lIEVsZWN0cm9uaWNzLCBJbmMuCiB0aQlUZXhhcyBJbnN0cnVtZW50cwogdGxtCVRydXN0ZWQgTG9naWMgTW9iaWxpdHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy93MS9vbWFwLWhkcS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdzEvb21hcC1oZHEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZjc5NDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdzEvb21hcC1oZHEudHh0CkBAIC0wLDAgKzEsMTcgQEAKKyogT01BUCBIRFEgT25lIHdpcmUgYnVzIG1hc3RlciBjb250cm9sbGVyCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgInRpLG9tYXAzLTF3IgorLSByZWcgOiBBZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZQorLSBpbnRlcnJ1cHRzIDogaW50ZXJydXB0IGxpbmUuCistIHRpLGh3bW9kcyA6ICJoZHExdyIKKworRXhhbXBsZToKKworLSBGcm9tIG9tYXAzLmR0c2kKKyAgaGRxdzF3OiAxd0A0ODBiMjAwMCB7CisJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy0xdyI7CisJcmVnID0gPDB4NDgwYjIwMDAgMHgxMDAwPjsKKwlpbnRlcnJ1cHRzID0gPDU4PjsKKwl0aSxod21vZHMgPSAiaGRxMXciOworICB9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3dhdGNoZG9nL21hcnZlbC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvd2F0Y2hkb2cvbWFydmVsLnR4dAppbmRleCA5NzIyM2ZkLi44NThlZDkyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvd2F0Y2hkb2cvbWFydmVsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvd2F0Y2hkb2cvbWFydmVsLnR4dApAQCAtMTcsNiArMTcsMTggQEAKIC0gcmVnCQk6IEEgdGhpcmQgZW50cnkgaXMgbWFuZGF0b3J5IGFuZCBzaG91bGQgY29udGFpbiB0aGUKICAgICAgICAgICAgICAgICAgIHNoYXJlZCBtYXNrL3VubWFzayBSU1RPVVQgYWRkcmVzcy4KIAorQ2xvY2tzIHJlcXVpcmVkIGZvciBjb21wYXRpYmxlcyA9ICJtYXJ2ZWxsLG9yaW9uLXdkdCIsCisJCQkJICAibWFydmVsbCxhcm1hZGEtMzcwLXdkdCI6CistIGNsb2NrcyA6IE11c3QgY29udGFpbiBhIHNpbmdsZSBlbnRyeSBkZXNjcmliaW5nIHRoZSBjbG9jayBpbnB1dAorCitDbG9ja3MgcmVxdWlyZWQgZm9yIGNvbXBhdGlibGVzID0gIm1hcnZlbGwsYXJtYWRhLXhwLXdkdCIKKwkJCQkgICJtYXJ2ZWxsLGFybWFkYS0zNzUtd2R0IgorCQkJCSAgIm1hcnZlbGwsYXJtYWRhLTM4MC13ZHQiOgorLSBjbG9ja3MgOiBNdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIGVhY2ggZW50cnkgaW4gY2xvY2stbmFtZXMuCistIGNsb2NrLW5hbWVzIDogTXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZW50cmllczoKKyAgIm5iY2xrIiAoTDIvY29oZXJlbmN5IGZhYnJpYyBjbG9jayksCisgICJmaXhlZCIgKFJlZmVyZW5jZSAyNSBNSHogZml4ZWQtY2xvY2spLgorCiBPcHRpb25hbCBwcm9wZXJ0aWVzOgogCiAtIGludGVycnVwdHMJOiBDb250YWlucyB0aGUgSVJRIGZvciB3YXRjaGRvZyBleHBpcmF0aW9uCkBAIC0zMCw0ICs0Miw1IEBACiAJCWludGVycnVwdHMgPSA8Mz47CiAJCXRpbWVvdXQtc2VjID0gPDEwPjsKIAkJc3RhdHVzID0gIm9rYXkiOworCQljbG9ja3MgPSA8JmdhdGVfY2xrIDc+OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy50eHQKaW5kZXggNTMwODUwYS4uYTI3Yzk1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vdmVybGF5ZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnR4dApAQCAtNjQsNyArNjQsNyBAQAogQXQgbW91bnQgdGltZSwgdGhlIHR3byBkaXJlY3RvcmllcyBnaXZlbiBhcyBtb3VudCBvcHRpb25zICJsb3dlcmRpciIgYW5kCiAidXBwZXJkaXIiIGFyZSBjb21iaW5lZCBpbnRvIGEgbWVyZ2VkIGRpcmVjdG9yeToKIAotICBtb3VudCAtdCBvdmVybGF5ZnMgb3ZlcmxheWZzIC1vbG93ZXJkaXI9L2xvd2VyLHVwcGVyZGlyPS91cHBlcixcCisgIG1vdW50IC10IG92ZXJsYXkgb3ZlcmxheSAtb2xvd2VyZGlyPS9sb3dlcix1cHBlcmRpcj0vdXBwZXIsXAogd29ya2Rpcj0vd29yayAvbWVyZ2VkCiAKIFRoZSAid29ya2RpciIgbmVlZHMgdG8gYmUgYW4gZW1wdHkgZGlyZWN0b3J5IG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG03NSBiL0RvY3VtZW50YXRpb24vaHdtb24vbG03NQppbmRleCBjNmE1ZmYxLi42NzY5MWEwYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG03NQpAQCAtNTMsNiArNTMsMTEgQEAKICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvdG1wNzUKICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvdG1wMTc1CiAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnRpLmNvbS9wcm9kdWN0L3RtcDI3NQorICAqIE5YUCBMTTc1QgorICAgIFByZWZpeDogJ2xtNzViJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE5YUCB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm54cC5jb20vZG9jdW1lbnRzL2RhdGFfc2hlZXQvTE03NUIucGRmCiAKIEF1dGhvcjogRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTUyMzQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTUyMzQKaW5kZXggYTBlOTVkZC4uMzJiNzc3ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTk1MjM0CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTIzNApAQCAtMiw2ICsyLDEwIEBACiA9PT09PT09PT09PT09PT09PT09PT0KIAogU3VwcG9ydGVkIGNoaXBzOgorICAqIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgLyBUZXhhcyBJbnN0cnVtZW50cyBMTTk1MjMzCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4LCAweDJhLCAweDJiCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIFRleGFzIEluc3RydW1lbnRzIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvbG05NTIzMwogICAqIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgLyBUZXhhcyBJbnN0cnVtZW50cyBMTTk1MjM0CiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4LCAweDRkLCAweDRlCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIFRleGFzIEluc3RydW1lbnRzIHdlYnNpdGUKQEAgLTEzLDExICsxNywxMiBAQAogRGVzY3JpcHRpb24KIC0tLS0tLS0tLS0tCiAKLUxNOTUyMzQgaXMgYW4gMTEtYml0IGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29yIHdpdGggYSAyLXdpcmUgU3lzdGVtIE1hbmFnZW1lbnQKLUJ1cyAoU01CdXMpIGludGVyZmFjZSBhbmQgVHJ1ZVRoZXJtIHRlY2hub2xvZ3kgdGhhdCBjYW4gdmVyeSBhY2N1cmF0ZWx5IG1vbml0b3IKLXRoZSB0ZW1wZXJhdHVyZSBvZiBmb3VyIHJlbW90ZSBkaW9kZXMgYXMgd2VsbCBhcyBpdHMgb3duIHRlbXBlcmF0dXJlLgotVGhlIGZvdXIgcmVtb3RlIGRpb2RlcyBjYW4gYmUgZXh0ZXJuYWwgZGV2aWNlcyBzdWNoIGFzIG1pY3JvcHJvY2Vzc29ycywKLWdyYXBoaWNzIHByb2Nlc3NvcnMgb3IgZGlvZGUtY29ubmVjdGVkIDJOMzkwNHMuIFRoZSBMTTk1MjM0J3MgVHJ1VGhlcm0KK0xNOTUyMzMgYW5kIExNOTUyMzQgYXJlIDExLWJpdCBkaWdpdGFsIHRlbXBlcmF0dXJlIHNlbnNvcnMgd2l0aCBhIDItd2lyZQorU3lzdGVtIE1hbmFnZW1lbnQgQnVzIChTTUJ1cykgaW50ZXJmYWNlIGFuZCBUcnVlVGhlcm0gdGVjaG5vbG9neQordGhhdCBjYW4gdmVyeSBhY2N1cmF0ZWx5IG1vbml0b3IgdGhlIHRlbXBlcmF0dXJlIG9mIHR3byAoTE05NTIzMykKK29yIGZvdXIgKExNOTUyMzQpIHJlbW90ZSBkaW9kZXMgYXMgd2VsbCBhcyBpdHMgb3duIHRlbXBlcmF0dXJlLgorVGhlIHJlbW90ZSBkaW9kZXMgY2FuIGJlIGV4dGVybmFsIGRldmljZXMgc3VjaCBhcyBtaWNyb3Byb2Nlc3NvcnMsCitncmFwaGljcyBwcm9jZXNzb3JzIG9yIGRpb2RlLWNvbm5lY3RlZCAyTjM5MDRzLiBUaGUgY2hpcCdzIFRydVRoZXJtCiBiZXRhIGNvbXBlbnNhdGlvbiB0ZWNobm9sb2d5IGFsbG93cyBzZW5zaW5nIG9mIDkwIG5tIG9yIDY1IG5tIHByb2Nlc3MKIHRoZXJtYWwgZGlvZGVzIGFjY3VyYXRlbHkuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTI0NSBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTI0NQppbmRleCA3N2VhZjI4Li5kNzU1OTAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTUyNDUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTk1MjQ1CkBAIC0yLDEwICsyLDE0IEBACiA9PT09PT09PT09PT09PT09PT0KIAogU3VwcG9ydGVkIGNoaXBzOgotICAqIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05NTI0NQorICAqIFRJIExNOTUyMzUKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTgsIDB4MjksIDB4NGMKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVEkgd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vbGl0L2RzL3N5bWxpbmsvbG05NTIzNS5wZGYKKyAgKiBUSSAvIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05NTI0NQogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCwgMHgxOSwgMHgyOSwgMHg0YywgMHg0ZAotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL21wZi9MTS9MTTk1MjQ1Lmh0bWwKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVEkgd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vbGl0L2RzL3N5bWxpbmsvbG05NTI0NS5wZGYKIAogCiBBdXRob3I6IEFsZXhhbmRlciBTdGVpbiA8YWxleGFuZGVyLnN0ZWluQHN5c3RlYy1lbGVjdHJvbmljLmNvbT4KQEAgLTEzLDEwICsxNywxMCBAQAogRGVzY3JpcHRpb24KIC0tLS0tLS0tLS0tCiAKLVRoZSBMTTk1MjQ1IGlzIGFuIDExLWJpdCBkaWdpdGFsIHRlbXBlcmF0dXJlIHNlbnNvciB3aXRoIGEgMi13aXJlIFN5c3RlbQorTE05NTIzNSBhbmQgTE05NTI0NSBhcmUgMTEtYml0IGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29ycyB3aXRoIGEgMi13aXJlIFN5c3RlbQogTWFuYWdlbWVudCBCdXMgKFNNQnVzKSBpbnRlcmZhY2UgYW5kIFRydVRoZXJtIHRlY2hub2xvZ3kgdGhhdCBjYW4gbW9uaXRvcgogdGhlIHRlbXBlcmF0dXJlIG9mIGEgcmVtb3RlIGRpb2RlIGFzIHdlbGwgYXMgaXRzIG93biB0ZW1wZXJhdHVyZS4KLVRoZSBMTTk1MjQ1IGNhbiBiZSB1c2VkIHRvIHZlcnkgYWNjdXJhdGVseSBtb25pdG9yIHRoZSB0ZW1wZXJhdHVyZSBvZgorVGhlIGNoaXBzIGNhbiBiZSB1c2VkIHRvIHZlcnkgYWNjdXJhdGVseSBtb25pdG9yIHRoZSB0ZW1wZXJhdHVyZSBvZgogZXh0ZXJuYWwgZGV2aWNlcyBzdWNoIGFzIG1pY3JvcHJvY2Vzc29ycy4KIAogQWxsIHRlbXBlcmF0dXJlIHZhbHVlcyBhcmUgZ2l2ZW4gaW4gbWlsbGlkZWdyZWVzIENlbHNpdXMuIExvY2FsIHRlbXBlcmF0dXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDY3NzUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDY3NzUKaW5kZXggNGU5ZWY2MC4uZjBkZDNkMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9uY3Q2Nzc1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbmN0Njc3NQpAQCAtOCwxMSArOCwxNSBAQAogPT09PT09PT09PT09PT09PT09PT09CiAKIFN1cHBvcnRlZCBjaGlwczoKKyAgKiBOdXZvdG9uIE5DVDYxMDJEL05DVDYxMDREL05DVDYxMDZECisgICAgUHJlZml4OiAnbmN0NjEwNicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSVNBIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gU3VwZXIgSS9PIHJlZ2lzdGVycworICAgIERhdGFzaGVldDogQXZhaWxhYmxlIGZyb20gdGhlIE51dm90b24gd2ViIHNpdGUKICAgKiBOdXZvdG9uIE5DVDU1NzJEL05DVDY3NzFGL05DVDY3NzJGL05DVDY3NzVGL1c4MzY3N0hHLUkKICAgICBQcmVmaXg6ICduY3Q2Nzc1JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCiAgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdAotICAqIE51dm90b24gTkNUNTU3N0QvTkNUNjc3NkQvTkNUNjc3NkYKKyAgKiBOdXZvdG9uIE5DVDU1NzNEL05DVDU1NzdEL05DVDY3NzZEL05DVDY3NzZGCiAgICAgUHJlZml4OiAnbmN0Njc3NicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSVNBIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gU3VwZXIgSS9PIHJlZ2lzdGVycwogICAgIERhdGFzaGVldDogQXZhaWxhYmxlIGZyb20gTnV2b3RvbiB1cG9uIHJlcXVlc3QKQEAgLTIwLDYgKzI0LDE0IEBACiAgICAgUHJlZml4OiAnbmN0Njc3OScKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSVNBIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gU3VwZXIgSS9PIHJlZ2lzdGVycwogICAgIERhdGFzaGVldDogQXZhaWxhYmxlIGZyb20gTnV2b3RvbiB1cG9uIHJlcXVlc3QKKyAgKiBOdXZvdG9uIE5DVDY3OTFECisgICAgUHJlZml4OiAnbmN0Njc5MScKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSVNBIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gU3VwZXIgSS9PIHJlZ2lzdGVycworICAgIERhdGFzaGVldDogQXZhaWxhYmxlIGZyb20gTnV2b3RvbiB1cG9uIHJlcXVlc3QKKyAgKiBOdXZvdG9uIE5DVDY3OTJECisgICAgUHJlZml4OiAnbmN0Njc5MicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSVNBIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gU3VwZXIgSS9PIHJlZ2lzdGVycworICAgIERhdGFzaGVldDogQXZhaWxhYmxlIGZyb20gTnV2b3RvbiB1cG9uIHJlcXVlc3QKIAogQXV0aG9yczoKICAgICAgICAgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9uY3Q3ODAyIGIvRG9jdW1lbnRhdGlvbi9od21vbi9uY3Q3ODAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDBmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDc4MDIKQEAgLTAsMCArMSwzMiBAQAorS2VybmVsIGRyaXZlciBuY3Q3ODAyCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIE51dm90b24gTkNUNzgwMlkKKyAgICBQcmVmaXg6ICduY3Q3ODAyJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyOC4uMHgyZgorICAgIERhdGFzaGVldDogQXZhaWxhYmxlIGZyb20gTnV2b3RvbiB3ZWIgc2l0ZQorCitBdXRob3JzOgorICAgICAgICBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBOdXZvdG9uIE5DVDc4MDJZIGhhcmR3YXJlIG1vbml0b3JpbmcKK2NoaXAuIE5DVDc4MDJZIHN1cHBvcnRzIDYgdGVtcGVyYXR1cmUgc2Vuc29ycywgNSB2b2x0YWdlIHNlbnNvcnMsIGFuZCAzIGZhbgorc3BlZWQgc2Vuc29ycy4KKworVGhlIGNoaXAgYWxzbyBzdXBwb3J0cyBpbnRlbGxpZ2VudCBmYW4gc3BlZWQgY29udHJvbC4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzCitub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgorCitUZXN0ZWQgQm9hcmRzIGFuZCBCSU9TIFZlcnNpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcgYm9hcmRzIGFuZAorQklPUyB2ZXJzaW9ucy4KKworQm9hcmQJCQlCSU9TIHZlcnNpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorS29udHJvbiBDT01lLWJTQzIJQ0hSMkU5MzQuMDAxLkdHTworS29udHJvbiBDT01lLWJJUDIJQ0NSMkUyMTIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdG1wNDAxIGIvRG9jdW1lbnRhdGlvbi9od21vbi90bXA0MDEKaW5kZXggZjkxZTNmYS4uOGViODhlOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi90bXA0MDEKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi90bXA0MDEKQEAgLTE4LDYgKzE4LDEwIEBACiAgICAgUHJlZml4OiAndG1wNDMyJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YywgMHg0ZAogICAgIERhdGFzaGVldDogaHR0cDovL2ZvY3VzLnRpLmNvbS9kb2NzL3Byb2QvZm9sZGVycy9wcmludC90bXA0MzIuaHRtbAorICAqIFRleGFzIEluc3RydW1lbnRzIFRNUDQzNQorICAgIFByZWZpeDogJ3RtcDQzNScKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MzcsIDB4NDggLSAweDRmCisgICAgRGF0YXNoZWV0OiBodHRwOi8vZm9jdXMudGkuY29tL2RvY3MvcHJvZC9mb2xkZXJzL3ByaW50L3RtcDQzNS5odG1sCiAKIEF1dGhvcnM6CiAgICAgICAgICBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgpAQCAtMjcsOCArMzEsOCBAQAogLS0tLS0tLS0tLS0KIAogVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBUZXhhcyBJbnN0cnVtZW50cyBUTVA0MDEsIFRNUDQxMSwKLVRNUDQzMSwgYW5kIFRNUDQzMiBjaGlwcy4gVGhlc2UgY2hpcHMgaW1wbGVtZW50IG9uZSBvciB0d28gcmVtb3RlIGFuZAotb25lIGxvY2FsIHRlbXBlcmF0dXJlIHNlbnNvcnMuIFRlbXBlcmF0dXJlIGlzIG1lYXN1cmVkIGluIGRlZ3JlZXMKK1RNUDQzMSwgVE1QNDMyIGFuZCBUTVA0MzUgY2hpcHMuIFRoZXNlIGNoaXBzIGltcGxlbWVudCBvbmUgb3IgdHdvIHJlbW90ZQorYW5kIG9uZSBsb2NhbCB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBUZW1wZXJhdHVyZSBpcyBtZWFzdXJlZCBpbiBkZWdyZWVzCiBDZWxzaXVzLiBSZXNvbHV0aW9uIG9mIHRoZSByZW1vdGUgc2Vuc29yIGlzIDAuMDYyNSBkZWdyZWUuIExvY2FsCiBzZW5zb3IgcmVzb2x1dGlvbiBjYW4gYmUgc2V0IHRvIDAuNSwgMC4yNSwgMC4xMjUgb3IgMC4wNjI1IGRlZ3JlZSAobm90CiBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBzbyBmYXIsIHNvIHVzaW5nIHRoZSBkZWZhdWx0IHJlc29sdXRpb24gb2YgMC41CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2VsYW50ZWNoLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvZWxhbnRlY2gudHh0CmluZGV4IGUxYWUxMjcuLjFlYzBkYjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQvZWxhbnRlY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvZWxhbnRlY2gudHh0CkBAIC0zOCwyMiArMzgsMzggQEAKICAgICAgICAgNy4yLjEgU3RhdHVzIHBhY2tldAogICAgICAgICA3LjIuMiBIZWFkIHBhY2tldAogICAgICAgICA3LjIuMyBNb3Rpb24gcGFja2V0CisgOC4gVHJhY2twb2ludCAoZm9yIEhhcmR3YXJlIHZlcnNpb24gMyBhbmQgNCkKKyAgICA4LjEgUmVnaXN0ZXJzCisgICAgOC4yIE5hdGl2ZSByZWxhdGl2ZSBtb2RlIDYgYnl0ZSBwYWNrZXQgZm9ybWF0CisgICAgICAgIDguMi4xIFN0YXR1cyBQYWNrZXQKIAogCiAKIDEuIEludHJvZHVjdGlvbgogICAgfn5+fn5+fn5+fn5+CiAKLUN1cnJlbnRseSB0aGUgTGludXggRWxhbnRlY2ggdG91Y2hwYWQgZHJpdmVyIGlzIGF3YXJlIG9mIHR3byBkaWZmZXJlbnQKLWhhcmR3YXJlIHZlcnNpb25zIHVuaW1hZ2luYXRpdmVseSBjYWxsZWQgdmVyc2lvbiAxIGFuZCB2ZXJzaW9uIDIuIFZlcnNpb24gMQotaXMgZm91bmQgaW4gIm9sZGVyIiBsYXB0b3BzIGFuZCB1c2VzIDQgYnl0ZXMgcGVyIHBhY2tldC4gVmVyc2lvbiAyIHNlZW1zIHRvCi1iZSBpbnRyb2R1Y2VkIHdpdGggdGhlIEVlZVBDIGFuZCB1c2VzIDYgYnl0ZXMgcGVyIHBhY2tldCwgYW5kIHByb3ZpZGVzCi1hZGRpdGlvbmFsIGZlYXR1cmVzIHN1Y2ggYXMgcG9zaXRpb24gb2YgdHdvIGZpbmdlcnMsIGFuZCB3aWR0aCBvZiB0aGUgdG91Y2guCitDdXJyZW50bHkgdGhlIExpbnV4IEVsYW50ZWNoIHRvdWNocGFkIGRyaXZlciBpcyBhd2FyZSBvZiBmb3VyIGRpZmZlcmVudAoraGFyZHdhcmUgdmVyc2lvbnMgdW5pbWFnaW5hdGl2ZWx5IGNhbGxlZCB2ZXJzaW9uIDEsdmVyc2lvbiAyLCB2ZXJzaW9uIDMKK2FuZCB2ZXJzaW9uIDQuIFZlcnNpb24gMSBpcyBmb3VuZCBpbiAib2xkZXIiIGxhcHRvcHMgYW5kIHVzZXMgNCBieXRlcyBwZXIKK3BhY2tldC4gVmVyc2lvbiAyIHNlZW1zIHRvIGJlIGludHJvZHVjZWQgd2l0aCB0aGUgRWVlUEMgYW5kIHVzZXMgNiBieXRlcworcGVyIHBhY2tldCwgYW5kIHByb3ZpZGVzIGFkZGl0aW9uYWwgZmVhdHVyZXMgc3VjaCBhcyBwb3NpdGlvbiBvZiB0d28gZmluZ2VycywKK2FuZCB3aWR0aCBvZiB0aGUgdG91Y2guICBIYXJkd2FyZSB2ZXJzaW9uIDMgdXNlcyA2IGJ5dGVzIHBlciBwYWNrZXQgKGFuZAorZm9yIDIgZmluZ2VycyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0d28gNiBieXRlcyBwYWNrZXRzKSBhbmQgYWxsb3dzIHRyYWNraW5nCitvZiB1cCB0byAzIGZpbmdlcnMuIEhhcmR3YXJlIHZlcnNpb24gNCB1c2VzIDYgYnl0ZXMgcGVyIHBhY2tldCwgYW5kIGNhbgorY29tYmluZSBhIHN0YXR1cyBwYWNrZXQgd2l0aCBtdWx0aXBsZSBoZWFkIG9yIG1vdGlvbiBwYWNrZXRzLiBIYXJkd2FyZSB2ZXJzaW9uCis0IGFsbG93cyB0cmFja2luZyB1cCB0byA1IGZpbmdlcnMuCisKK1NvbWUgSGFyZHdhcmUgdmVyc2lvbiAzIGFuZCB2ZXJzaW9uIDQgYWxzbyBoYXZlIGEgdHJhY2twb2ludCB3aGljaCB1c2VzIGEKK3NlcGFyYXRlIHBhY2tldCBmb3JtYXQuIEl0IGlzIGFsc28gNiBieXRlcyBwZXIgcGFja2V0LgogCiBUaGUgZHJpdmVyIHRyaWVzIHRvIHN1cHBvcnQgYm90aCBoYXJkd2FyZSB2ZXJzaW9ucyBhbmQgc2hvdWxkIGJlIGNvbXBhdGlibGUKIHdpdGggdGhlIFhvcmcgU3luYXB0aWNzIHRvdWNocGFkIGRyaXZlciBhbmQgaXRzIGdyYXBoaWNhbCBjb25maWd1cmF0aW9uCiB1dGlsaXRpZXMuCiAKK05vdGUgdGhhdCBhIG1vdXNlIGJ1dHRvbiBpcyBhbHNvIGFzc29jaWF0ZWQgd2l0aCBlaXRoZXIgdGhlIHRvdWNocGFkIG9yIHRoZQordHJhY2twb2ludCB3aGVuIGEgdHJhY2twb2ludCBpcyBhdmFpbGFibGUuICBEaXNhYmxpbmcgdGhlIFRvdWNocGFkIGluIHhvcmcKKyhUb3VjaFBhZE9mZj0wKSB3aWxsIGFsc28gZGlzYWJsZSB0aGUgYnV0dG9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHRvdWNocGFkLgorCiBBZGRpdGlvbmFsbHkgdGhlIG9wZXJhdGlvbiBvZiB0aGUgdG91Y2hwYWQgY2FuIGJlIGFsdGVyZWQgYnkgYWRqdXN0aW5nIHRoZQogY29udGVudHMgb2Ygc29tZSBvZiBpdHMgaW50ZXJuYWwgcmVnaXN0ZXJzLiBUaGVzZSByZWdpc3RlcnMgYXJlIHJlcHJlc2VudGVkCiBieSB0aGUgZHJpdmVyIGFzIHN5c2ZzIGVudHJpZXMgdW5kZXIgL3N5cy9idXMvc2VyaW8vZHJpdmVycy9wc21vdXNlL3NlcmlvPwpAQCAtNzgsNyArOTQsNyBAQAogMi4gRXh0cmEga25vYnMKICAgIH5+fn5+fn5+fn5+CiAKLUN1cnJlbnRseSB0aGUgTGludXggRWxhbnRlY2ggdG91Y2hwYWQgZHJpdmVyIHByb3ZpZGVzIHR3byBleHRyYSBrbm9icyB1bmRlcgorQ3VycmVudGx5IHRoZSBMaW51eCBFbGFudGVjaCB0b3VjaHBhZCBkcml2ZXIgcHJvdmlkZXMgdGhyZWUgZXh0cmEga25vYnMgdW5kZXIKIC9zeXMvYnVzL3NlcmlvL2RyaXZlcnMvcHNtb3VzZS9zZXJpbz8gZm9yIHRoZSB1c2VyLgogCiAqIGRlYnVnCkBAIC0xMTIsNiArMTI4LDIwIEBACiAgICBkYXRhIGNvbnNpc3RlbmN5IGNoZWNraW5nIGNhbiBiZSBkb25lLiBGb3Igbm93IGNoZWNraW5nIGlzIGRpc2FibGVkIGJ5CiAgICBkZWZhdWx0LiBDdXJyZW50bHkgZXZlbiB0dXJuaW5nIGl0IG9uIHdpbGwgZG8gbm90aGluZy4KIAorKiBjcmNfZW5hYmxlZAorCisgICBTZXRzIGNyY19lbmFibGVkIHRvIDAvMS4gVGhlIG5hbWUgImNyY19lbmFibGVkIiBpcyB0aGUgb2ZmaWNpYWwgbmFtZSBvZgorICAgdGhpcyBpbnRlZ3JpdHkgY2hlY2ssIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCBhbiBhY3R1YWwgY3ljbGljIHJlZHVuZGFuY3kKKyAgIGNoZWNrLgorCisgICBEZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIGNyY19lbmFibGVkLCBjZXJ0YWluIGJhc2ljIGRhdGEgaW50ZWdyaXR5CisgICB2ZXJpZmljYXRpb24gaXMgZG9uZSBieSB0aGUgZHJpdmVyIG9uIGhhcmR3YXJlIHZlcnNpb24gMyBhbmQgNC4gVGhlCisgICBkcml2ZXIgd2lsbCByZWplY3QgYW55IHBhY2tldCB0aGF0IGFwcGVhcnMgY29ycnVwdGVkLiBVc2luZyB0aGlzIGtub2IsCisgICBUaGUgc3RhdGUgb2YgY3JjX2VuYWJsZWQgY2FuIGJlIGFsdGVyZWQgd2l0aCB0aGlzIGtub2IuCisKKyAgIFJlYWRpbmcgdGhlIGNyY19lbmFibGVkIHZhbHVlIHdpbGwgc2hvdyB0aGUgYWN0aXZlIHZhbHVlLiBFY2hvaW5nCisgICAiMCIgb3IgIjEiIHRvIHRoaXMgZmlsZSB3aWxsIHNldCB0aGUgc3RhdGUgdG8gIjAiIG9yICIxIi4KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogMy4gRGlmZmVyZW50aWF0aW5nIGhhcmR3YXJlIHZlcnNpb25zCkBAIC03NDYsMyArNzc2LDQyIEBACiAKICAgICAgICAgYnl0ZSAwIH4gMiBmb3Igb25lIGZpbmdlcgogICAgICAgICBieXRlIDMgfiA1IGZvciBhbm90aGVyCisKKworOC4gVHJhY2twb2ludCAoZm9yIEhhcmR3YXJlIHZlcnNpb24gMyBhbmQgNCkKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LjEgUmVnaXN0ZXJzCisgICAgfn5+fn5+fn5+CitObyBzcGVjaWFsIHJlZ2lzdGVycyBoYXZlIGJlZW4gaWRlbnRpZmllZC4KKworOC4yIE5hdGl2ZSByZWxhdGl2ZSBtb2RlIDYgYnl0ZSBwYWNrZXQgZm9ybWF0CisgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKzguMi4xIFN0YXR1cyBQYWNrZXQKKyAgICAgIH5+fn5+fn5+fn5+fn4KKworYnl0ZSAwOgorICAgYml0ICAgNyAgIDYgICA1ICAgNCAgIDMgICAyICAgMSAgIDAKKyAgICAgICAgIDAgICAwICBzeCAgc3kgICAwICAgTSAgIFIgICBMCitieXRlIDE6CisgICBiaXQgICA3ICAgNiAgIDUgICA0ICAgMyAgIDIgICAxICAgMAorICAgICAgIH5zeCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKK2J5dGUgMjoKKyAgIGJpdCAgIDcgICA2ICAgNSAgIDQgICAzICAgMiAgIDEgICAwCisgICAgICAgfnN5ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAorYnl0ZSAzOgorICAgYml0ICAgNyAgIDYgICA1ICAgNCAgIDMgICAyICAgMSAgIDAKKyAgICAgICAgIDAgICAwIH5zeSB+c3ggICAwICAgMSAgIDEgICAwCitieXRlIDQ6CisgICBiaXQgICA3ICAgNiAgIDUgICA0ICAgMyAgIDIgICAxICAgMAorICAgICAgICB4NyAgeDYgIHg1ICB4NCAgeDMgIHgyICB4MSAgeDAKK2J5dGUgNToKKyAgIGJpdCAgIDcgICA2ICAgNSAgIDQgICAzICAgMiAgIDEgICAwCisgICAgICAgIHk3ICB5NiAgeTUgIHk0ICB5MyAgeTIgIHkxICB5MAorCisKKyAgICAgICAgIHggYW5kIHkgYXJlIHdyaXR0ZW4gaW4gdHdvJ3MgY29tcGxlbWVudCBzcHJlYWQKKyAgICAgICAgICAgICBvdmVyIDkgYml0cyB3aXRoIHN4L3N5IHRoZSByZWxhdGl2ZSB0b3AgYml0IGFuZAorICAgICAgICAgICAgIHg3Li54MCBhbmQgeTcuLnkwIHRoZSBsb3dlciBiaXRzLgorCSB+c3ggaXMgdGhlIGludmVyc2Ugb2Ygc3gsIH5zeSBpcyB0aGUgaW52ZXJzZSBvZiBzeS4KKyAgICAgICAgIFRoZSBzaWduIG9mIHkgaXMgb3Bwb3NpdGUgdG8gd2hhdCB0aGUgaW5wdXQgZHJpdmVyCisgICAgICAgICAgICAgZXhwZWN0cyBmb3IgYSByZWxhdGl2ZSBtb3ZlbWVudApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA0YzgxYTg2Li44MzhmMzc3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMjk0MCw2ICsyOTQwLDEzIEBACiAJCQlxdWllc2NlbnQgc3RhdGVzLiAgVW5pdHMgYXJlIGppZmZpZXMsIG1pbmltdW0KIAkJCXZhbHVlIGlzIG9uZSwgYW5kIG1heGltdW0gdmFsdWUgaXMgSFouCiAKKwlyY3V0cmVlLmt0aHJlYWRfcHJpbz0gCSBbS05MLEJPT1RdCisJCQlTZXQgdGhlIFNDSEVEX0ZJRk8gcHJpb3JpdHkgb2YgdGhlIFJDVQorCQkJcGVyLUNQVSBrdGhyZWFkcyAocmN1Yy9OKS4gVGhpcyB2YWx1ZSBpcyBhbHNvCisJCQl1c2VkIGZvciB0aGUgcHJpb3JpdHkgb2YgdGhlIFJDVSBib29zdCB0aHJlYWRzCisJCQkocmN1Yi9OKS4gVmFsaWQgdmFsdWVzIGFyZSAxLTk5IGFuZCB0aGUgZGVmYXVsdAorCQkJaXMgMSAodGhlIGxlYXN0LWZhdm9yZWQgcHJpb3JpdHkpLgorCiAJcmN1dHJlZS5yY3Vfbm9jYl9sZWFkZXJfc3RyaWRlPSBbS05MXQogCQkJU2V0IHRoZSBudW1iZXIgb2YgTk9DQiBrdGhyZWFkIGdyb3Vwcywgd2hpY2gKIAkJCWRlZmF1bHRzIHRvIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgbnVtYmVyIG9mCkBAIC0zMDg5LDYgKzMwOTYsMTUgQEAKIAkJCW1lc3NhZ2VzLiAgRGlzYWJsZSB3aXRoIGEgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsCiAJCQl0byB6ZXJvLgogCisJcmN1cGRhdGUucmN1X3NlbGZfdGVzdD0gW0tOTF0KKwkJCVJ1biB0aGUgUkNVIGVhcmx5IGJvb3Qgc2VsZiB0ZXN0cworCisJcmN1cGRhdGUucmN1X3NlbGZfdGVzdF9iaD0gW0tOTF0KKwkJCVJ1biB0aGUgUkNVIGJoIGVhcmx5IGJvb3Qgc2VsZiB0ZXN0cworCisJcmN1cGRhdGUucmN1X3NlbGZfdGVzdF9zY2hlZD0gW0tOTF0KKwkJCVJ1biB0aGUgUkNVIHNjaGVkIGVhcmx5IGJvb3Qgc2VsZiB0ZXN0cworCiAJcmRpbml0PQkJW0tOTF0KIAkJCUZvcm1hdDogPGZ1bGxfcGF0aD4KIAkJCVJ1biBzcGVjaWZpZWQgYmluYXJ5IGluc3RlYWQgb2YgL2luaXQgZnJvbSB0aGUgcmFtZGlzaywKQEAgLTM2MjEsNyArMzYzNyw3IEBACiAKIAl1c2Itc3RvcmFnZS5kZWxheV91c2U9CiAJCQlbVU1TXSBUaGUgZGVsYXkgaW4gc2Vjb25kcyBiZWZvcmUgYSBuZXcgZGV2aWNlIGlzCi0JCQlzY2FubmVkIGZvciBMb2dpY2FsIFVuaXRzIChkZWZhdWx0IDUpLgorCQkJc2Nhbm5lZCBmb3IgTG9naWNhbCBVbml0cyAoZGVmYXVsdCAxKS4KIAogCXVzYi1zdG9yYWdlLnF1aXJrcz0KIAkJCVtVTVNdIEEgbGlzdCBvZiBxdWlya3MgZW50cmllcyB0byBzdXBwbGVtZW50IG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbGdsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vbG9ja2luZy9sZ2xvY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTcxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbGdsb2NrLnR4dApAQCAtMCwwICsxLDE2NiBAQAorbGdsb2NrIC0gbG9jYWwvZ2xvYmFsIGxvY2tzIGZvciBtb3N0bHkgbG9jYWwgYWNjZXNzIHBhdHRlcm5zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3JpZ2luOiBOaWNrIFBpZ2dpbidzIFZGUyBzY2FsYWJpbGl0eSBzZXJpZXMgaW50cm9kdWNlZCBkdXJpbmcKKwkyLjYuMzUrKyBbMV0gWzJdCitMb2NhdGlvbjoga2VybmVsL2xvY2tpbmcvbGdsb2NrLmMKKwlpbmNsdWRlL2xpbnV4L2xnbG9jay5oCitVc2VyczogY3VycmVudGx5IG9ubHkgdGhlIFZGUyBhbmQgc3RvcF9tYWNoaW5lIHJlbGF0ZWQgY29kZQorCitEZXNpZ24gR29hbDoKKy0tLS0tLS0tLS0tLQorCitJbXByb3ZlIHNjYWxhYmlsaXR5IG9mIGdsb2JhbGx5IHVzZWQgbGFyZ2UgZGF0YSBzZXRzIHRoYXQgYXJlCitkaXN0cmlidXRlZCBvdmVyIGFsbCBDUFVzIGFzIHBlcl9jcHUgZWxlbWVudHMuCisKK1RvIG1hbmFnZSBnbG9iYWwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhcnRpdGlvbmVkIG92ZXIgYWxsIENQVXMKK2FzIHBlcl9jcHUgZWxlbWVudHMgYnV0IGNhbiBiZSBtb3N0bHkgaGFuZGxlZCBieSBDUFUgbG9jYWwgYWN0aW9ucworbGdsb2NrIHdpbGwgYmUgdXNlZCB3aGVyZSB0aGUgbWFqb3JpdHkgb2YgYWNjZXNzZXMgYXJlIGNwdSBsb2NhbAorcmVhZGluZyBhbmQgb2NjYXNpb25hbCBjcHUgbG9jYWwgd3JpdGluZyB3aXRoIHZlcnkgaW5mcmVxdWVudAorZ2xvYmFsIHdyaXRlIGFjY2Vzcy4KKworCisqIGRlYWwgd2l0aCB0aGluZ3MgbG9jYWxseSB3aGVuZXZlciBwb3NzaWJsZQorCS0gdmVyeSBmYXN0IGFjY2VzcyB0byB0aGUgbG9jYWwgcGVyX2NwdSBkYXRhCisJLSByZWFzb25hYmx5IGZhc3QgYWNjZXNzIHRvIHNwZWNpZmljIHBlcl9jcHUgZGF0YSBvbiBhIGRpZmZlcmVudAorCSAgQ1BVCisqIHdoaWxlIG1ha2luZyBnbG9iYWwgYWN0aW9uIHBvc3NpYmxlIHdoZW4gbmVlZGVkCisJLSBieSBleHBlbnNpdmUgYWNjZXNzIHRvIGFsbCBDUFVzIGxvY2tzIC0gZWZmZWN0aXZlbHkKKwkgIHJlc3VsdGluZyBpbiBhIGdsb2JhbGx5IHZpc2libGUgY3JpdGljYWwgc2VjdGlvbi4KKworRGVzaWduOgorLS0tLS0tLQorCitCYXNpY2FsbHkgaXQgaXMgYW4gYXJyYXkgb2YgcGVyX2NwdSBzcGlubG9ja3Mgd2l0aCB0aGUKK2xnX2xvY2FsX2xvY2svdW5sb2NrIGFjY2Vzc2luZyB0aGUgbG9jYWwgQ1BVcyBsb2NrIG9iamVjdCBhbmQgdGhlCitsZ19sb2NhbF9sb2NrX2NwdS91bmxvY2tfY3B1IGFjY2Vzc2luZyBhIHJlbW90ZSBDUFVzIGxvY2sgb2JqZWN0Cit0aGUgbGdfbG9jYWxfbG9jayBoYXMgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFzIG1pZ3JhdGlvbiBwcm90ZWN0aW9uIHNvCit0aGF0IHRoZSByZWZlcmVuY2UgdG8gdGhlIGxvY2FsIENQVXMgbG9jayBkb2VzIG5vdCBnbyBvdXQgb2Ygc2NvcGUuCitEdWUgdG8gdGhlIGxnX2xvY2FsX2xvY2svdW5sb2NrIG9ubHkgdG91Y2hpbmcgY3B1LWxvY2FsIHJlc291cmNlcyBpdAoraXMgZmFzdC4gVGFraW5nIHRoZSBsb2NhbCBsb2NrIG9uIGEgZGlmZmVyZW50IENQVSB3aWxsIGJlIG1vcmUKK2V4cGVuc2l2ZSBidXQgc3RpbGwgcmVsYXRpdmVseSBjaGVhcC4KKworT25lIGNhbiByZWxheCB0aGUgbWlncmF0aW9uIGNvbnN0cmFpbnRzIGJ5IGFjcXVpcmluZyB0aGUgY3VycmVudAorQ1BVcyBsb2NrIHdpdGggbGdfbG9jYWxfbG9ja19jcHUsIHJlbWVtYmVyIHRoZSBjcHUsIGFuZCByZWxlYXNlIHRoYXQKK2xvY2sgYXQgdGhlIGVuZCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBldmVuIGlmIG1pZ3JhdGVkLiBUaGlzIHNob3VsZAorZ2l2ZSBtb3N0IG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0cyB3aXRob3V0IGluaGliaXRpbmcgbWlncmF0aW9uCit0aG91Z2ggbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9ucyBmb3IgbmVzdGluZyBvZiBsZ2xvY2tzIGFuZAorY29uc2lkZXJhdGlvbiBvZiBkZWFkbG9ja3Mgd2l0aCBsZ19nbG9iYWxfbG9jay4KKworVGhlIGxnX2dsb2JhbF9sb2NrL3VubG9jayBsb2NrcyBhbGwgdW5kZXJseWluZyBzcGlubG9ja3Mgb2YgYWxsCitwb3NzaWJsZSBDUFVzIChpbmNsdWRpbmcgdGhvc2Ugb2ZmLWxpbmUpLiBUaGUgcHJlZW1wdGlvbiBkaXNhYmxlL2VuYWJsZQorYXJlIG5lZWRlZCBpbiB0aGUgbm9uLVJUIGtlcm5lbHMgdG8gcHJldmVudCBkZWFkbG9ja3MgbGlrZToKKworICAgICAgICAgICAgICAgICAgICAgb24gY3B1IDEKKworICAgICAgICAgICAgICB0YXNrIEEgICAgICAgICAgdGFzayBCCisgICAgICAgICBsZ19nbG9iYWxfbG9jaworICAgICAgICAgICBnb3QgY3B1IDAgbG9jaworICAgICAgICAgICAgICAgICA8PDw8IHByZWVtcHQgPDw8PAorICAgICAgICAgICAgICAgICAgICAgICAgIGxnX2xvY2FsX2xvY2tfY3B1IGZvciBjcHUgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpbiBvbiBjcHUgMCBsb2NrCisKK09uIC1SVCB0aGlzIGRlYWRsb2NrIHNjZW5hcmlvIGlzIHJlc29sdmVkIGJ5IHRoZSBhcmNoX3NwaW5fbG9ja3MgaW4gdGhlCitsZ2xvY2tzIGJlaW5nIHJlcGxhY2VkIGJ5IHJ0X211dGV4ZXMgd2hpY2ggcmVzb2x2ZSB0aGUgYWJvdmUgZGVhZGxvY2sKK2J5IGJvb3N0aW5nIHRoZSBsb2NrLWhvbGRlci4KKworCitJbXBsZW1lbnRhdGlvbjoKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW5pdGlhbCBsZ2xvY2sgaW1wbGVtZW50YXRpb24gZnJvbSBOaWNrIFBpZ2dpbiB1c2VkIHNvbWUgY29tcGxleAorbWFjcm9zIHRvIGdlbmVyYXRlIHRoZSBsZ2xvY2svYnJsb2NrIGluIGxnbG9jay5oIC0gdGhleSB3ZXJlIGxhdGVyCit0dXJuZWQgaW50byBhIHNldCBvZiBmdW5jdGlvbnMgYnkgQW5kaSBLbGVlbiBbN10uIFRoZSBjaGFuZ2UgdG8gZnVuY3Rpb25zCit3YXMgbW90aXZhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBtdWx0aXBsZSBsb2NrIHVzZXJzIGFuZCBhbHNvIGJ5IHRoZW0KK2JlaW5nIGVhc2llciB0byBtYWludGFpbiB0aGFuIHRoZSBnZW5lcmF0aW5nIG1hY3Jvcy4gVGhpcyBjaGFuZ2UgdG8KK2Z1bmN0aW9ucyBpcyBhbHNvIHRoZSBiYXNpcyB0byBlbGltaW5hdGVkIHRoZSByZXN0cmljdGlvbiBvZiBub3QKK2JlaW5nIGluaXRpYWxpemVhYmxlIGluIGtlcm5lbCBtb2R1bGVzICh0aGUgcmVtYWluaW5nIHByb2JsZW0gaXMgdGhhdAorbG9ja3MgYXJlIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkIC0gc2VlIGxvY2tkZXAtZGVzaWduLnR4dCkKKworRGVjbGFyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICNpbmNsdWRlIDxsaW51eC9sZ2xvY2suaD4KKworICBERUZJTkVfTEdMT0NLKG5hbWUpCisgIG9yOgorICBERUZJTkVfU1RBVElDX0xHTE9DSyhuYW1lKTsKKworICBsZ19sb2NrX2luaXQoJm5hbWUsICJsb2NrZGVwX25hbWVfc3RyaW5nIik7CisKKyAgb24gVVAgdGhpcyBpcyBtYXBwZWQgdG8gREVGSU5FX1NQSU5MT0NLKG5hbWUpIGluIGJvdGggY2FzZXMsIG5vdGUKKyAgYWxzbyB0aGF0IGFzIG9mIDMuMTgtcmM2IGFsbCBkZWNsYXJhdGlvbiBpbiB1c2UgYXJlIG9mIHRoZSBfU1RBVElDXworICB2YXJpYW50IChhbmQgaXQgc2VlbXMgdGhhdCB0aGUgbm9uLXN0YXRpYyB3YXMgbmV2ZXIgaW4gdXNlKS4KKyAgbGdfbG9ja19pbml0IGlzIGluaXRpYWxpemluZyB0aGUgbG9ja2RlcCBtYXAgb25seS4KKworVXNhZ2U6CistLS0tLS0KKworRnJvbSB0aGUgbG9ja2luZyBzZW1hbnRpY3MgaXQgaXMgYSBzcGlubG9jay4gSXQgY291bGQgYmUgY2FsbGVkIGEKK2xvY2FsaXR5IGF3YXJlIHNwaW5sb2NrLiBsZ19sb2NhbF8qIGJlaGF2ZXMgbGlrZSBhIHBlcl9jcHUKK3NwaW5sb2NrIGFuZCBsZ19nbG9iYWxfKiBsaWtlIGEgZ2xvYmFsIHNwaW5sb2NrLgorTm8gc3VycHJpc2VzIGluIHRoZSBBUEkuCisKKyAgbGdfbG9jYWxfbG9jaygqbGdsb2NrKTsKKyAgICAgYWNjZXNzIHRvIHByb3RlY3RlZCBwZXJfY3B1IG9iamVjdCBvbiB0aGlzIENQVQorICBsZ19sb2NhbF91bmxvY2soKmxnbG9jayk7CisKKyAgbGdfbG9jYWxfbG9ja19jcHUoKmxnbG9jaywgY3B1KTsKKyAgICAgYWNjZXNzIHRvIHByb3RlY3RlZCBwZXJfY3B1IG9iamVjdCBvbiBvdGhlciBDUFUgY3B1CisgIGxnX2xvY2FsX3VubG9ja19jcHUoKmxnbG9jaywgY3B1KTsKKworICBsZ19nbG9iYWxfbG9jaygqbGdsb2NrKTsKKyAgICAgYWNjZXNzIGFsbCBwcm90ZWN0ZWQgcGVyX2NwdSBvYmplY3RzIG9uIGFsbCBDUFVzCisgIGxnX2dsb2JhbF91bmxvY2soKmxnbG9jayk7CisKKyAgVGhlcmUgYXJlIG5vIF90cnlsb2NrIHZhcmlhbnRzIG9mIHRoZSBsZ2xvY2tzLgorCitOb3RlIHRoYXQgdGhlIGxnX2dsb2JhbF9sb2NrL3VubG9jayBoYXMgdG8gaXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJsZQorQ1BVcyByYXRoZXIgdGhhbiB0aGUgYWN0dWFsbHkgcHJlc2VudCBDUFVzIG9yIGEgQ1BVIGNvdWxkIGdvIG9mZi1saW5lCit3aXRoIGEgaGVsZCBsb2NrIFs0XSBhbmQgdGhhdCBtYWtlcyBpdCB2ZXJ5IGV4cGVuc2l2ZS4gQSBkaXNjdXNzaW9uIG9uCit0aGVzZSBpc3N1ZXMgY2FuIGJlIGZvdW5kIGF0IFs1XQorCitDb25zdHJhaW50czoKKy0tLS0tLS0tLS0tLQorCisgICogY3VycmVudGx5IHRoZSBkZWNsYXJhdGlvbiBvZiBsZ2xvY2tzIGluIGtlcm5lbCBtb2R1bGVzIGlzIG5vdAorICAgIHBvc3NpYmxlLCB0aG91Z2ggdGhpcyBzaG91bGQgYmUgZG9hYmxlIHdpdGggbGl0dGxlIGNoYW5nZS4KKyAgKiBsZ2xvY2tzIGFyZSBub3QgcmVjdXJzaXZlLgorICAqIHN1aXRhYmxlIGZvciBjb2RlIHRoYXQgY2FuIGRvIG1vc3Qgb3BlcmF0aW9ucyBvbiB0aGUgQ1BVIGxvY2FsCisgICAgZGF0YSBhbmQgd2lsbCB2ZXJ5IHJhcmVseSBuZWVkIHRoZSBnbG9iYWwgbG9jaworICAqIGxnX2dsb2JhbF9sb2NrL3VubG9jayBpcyAqdmVyeSogZXhwZW5zaXZlIGFuZCBkb2VzIG5vdCBzY2FsZQorICAqIG9uIFVQIHN5c3RlbXMgYWxsIGxnXyogcHJpbWl0aXZlcyBhcmUgc2ltcGx5IHNwaW5sb2NrcworICAqIGluIFBSRUVNUFRfUlQgdGhlIHNwaW5sb2NrIGJlY29tZXMgYW4gcnQtbXV0ZXggYW5kIGNhbiBzbGVlcCBidXQKKyAgICBkb2VzIG5vdCBjaGFuZ2UgdGhlIHRhc2tzIHN0YXRlIHdoaWxlIHNsZWVwaW5nIFs2XS4KKyAgKiBpbiBQUkVFTVBUX1JUIHRoZSBwcmVlbXB0X2Rpc2FibGUvZW5hYmxlIGluIGxnX2xvY2FsX2xvY2svdW5sb2NrCisgICAgaXMgZG93bmdyYWRlZCB0byBhIG1pZ3JhdGVfZGlzYWJsZS9lbmFibGUsIHRoZSBvdGhlcgorICAgIHByZWVtcHRfZGlzYWJsZS9lbmFibGUgYXJlIGRvd25ncmFkZWQgdG8gYmFycmllcnMgWzZdLgorICAgIFRoZSBkZWFkbG9jayBub3RlZCBmb3Igbm9uLVJUIGFib3ZlIGlzIHJlc29sdmVkIGR1ZSB0byBydF9tdXRleGVzCisgICAgYm9vc3RpbmcgdGhlIGxvY2staG9sZGVyIGluIHRoaXMgY2FzZSB3aGljaCBhcmNoX3NwaW5fbG9ja3MgZG8KKyAgICBub3QgZG8uCisKK2xnbG9ja3Mgd2VyZSBkZXNpZ25lZCBmb3IgdmVyeSBzcGVjaWZpYyBwcm9ibGVtcyBpbiB0aGUgVkZTIGFuZCBwcm9iYWJseQorb25seSBhcmUgdGhlIHJpZ2h0IGFuc3dlciBpbiB0aGVzZSBjb3JuZXIgY2FzZXMuIEFueSBuZXcgdXNlciB0aGF0IGxvb2tzCithdCBsZ2xvY2tzIHByb2JhYmx5IHdhbnRzIHRvIGxvb2sgYXQgdGhlIHNlcWxvY2sgYW5kIFJDVSBhbHRlcm5hdGl2ZXMgYXMKK2hlciBmaXJzdCBjaG9pY2UuIFRoZXJlIGFyZSBhbHNvIGVmZm9ydHMgdG8gcmVzb2x2ZSB0aGUgUkNVIGlzc3VlcyB0aGF0CitjdXJyZW50bHkgcHJldmVudCB1c2luZyBSQ1UgaW4gcGxhY2Ugb2YgdmlldyByZW1haW5pbmcgbGdsb2Nrcy4KKworTm90ZSBvbiBicmxvY2sgaGlzdG9yeToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnQmlnIFJlYWRlcicgcmVhZC13cml0ZSBzcGlubG9ja3Mgd2VyZSBvcmlnaW5hbGx5IGludHJvZHVjZWQgYnkKK0luZ28gTW9sbmFyIGluIDIwMDAgKDIuNC8yLjUga2VybmVsIHNlcmllcykgYW5kIHJlbW92ZWQgaW4gMjAwMy4gVGhleQorbGF0ZXIgd2VyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBWRlMgc2NhbGFiaWxpdHkgcGF0Y2ggc2V0IGluIDIuNiBzZXJpZXMKK2FnYWluIGFzIHRoZSAiYmlnIHJlYWRlciBsb2NrIiBicmxvY2sgWzJdIHZhcmlhbnQgb2YgbGdsb2NrIHdoaWNoIGhhcworYmVlbiByZXBsYWNlZCBieSBzZXFsb2NrIHByaW1pdGl2ZXMgb3IgYnkgUkNVIGJhc2VkIHByaW1pdGl2ZXMgaW4gdGhlCiszLjEzIGtlcm5lbCBzZXJpZXMgYXMgd2FzIHN1Z2dlc3RlZCBpbiBbM10gaW4gMjAwMy4gVGhlIGJybG9jayB3YXMKK2VudGlyZWx5IHJlbW92ZWQgaW4gdGhlIDMuMTMga2VybmVsIHNlcmllcy4KKworTGluazogMSBodHRwOi8vbGttbC5vcmcvbGttbC8yMDEwLzgvMi84MQorTGluazogMiBodHRwOi8vbHduLm5ldC9BcnRpY2xlcy80MDE3MzgvCitMaW5rOiAzIGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDMvMy85LzIwNQorTGluazogNCBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMS84LzI0LzE4NQorTGluazogNSBodHRwOi8vbGttbC5vcmcvbGttbC8yMDExLzEyLzE4LzE4OQorTGluazogNiBodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcHJvamVjdHMvcnQvCisgICAgICAgIHBhdGNoIHNlcmllcyAtIGxnbG9ja3MtcnQucGF0Y2gucGF0Y2gKK0xpbms6IDcgaHR0cDovL2xrbWwub3JnL2xrbWwvMjAxMi8zLzUvMjYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAppbmRleCAyMmE5NjljLi43ZWUyYWU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CkBAIC0xMjEsMjIgKzEyMSwyMiBAQAogVGhlIHNldCBvZiBhY2Nlc3NlcyBhcyBzZWVuIGJ5IHRoZSBtZW1vcnkgc3lzdGVtIGluIHRoZSBtaWRkbGUgY2FuIGJlIGFycmFuZ2VkCiBpbiAyNCBkaWZmZXJlbnQgY29tYmluYXRpb25zOgogCi0JU1RPUkUgQT0zLAlTVE9SRSBCPTQsCXg9TE9BRCBBLT4zLAl5PUxPQUQgQi0+NAotCVNUT1JFIEE9MywJU1RPUkUgQj00LAl5PUxPQUQgQi0+NCwJeD1MT0FEIEEtPjMKLQlTVE9SRSBBPTMsCXg9TE9BRCBBLT4zLAlTVE9SRSBCPTQsCXk9TE9BRCBCLT40Ci0JU1RPUkUgQT0zLAl4PUxPQUQgQS0+MywJeT1MT0FEIEItPjIsCVNUT1JFIEI9NAotCVNUT1JFIEE9MywJeT1MT0FEIEItPjIsCVNUT1JFIEI9NCwJeD1MT0FEIEEtPjMKLQlTVE9SRSBBPTMsCXk9TE9BRCBCLT4yLAl4PUxPQUQgQS0+MywJU1RPUkUgQj00Ci0JU1RPUkUgQj00LAlTVE9SRSBBPTMsCXg9TE9BRCBBLT4zLAl5PUxPQUQgQi0+NAorCVNUT1JFIEE9MywJU1RPUkUgQj00LAl5PUxPQUQgQS0+MywJeD1MT0FEIEItPjQKKwlTVE9SRSBBPTMsCVNUT1JFIEI9NCwJeD1MT0FEIEItPjQsCXk9TE9BRCBBLT4zCisJU1RPUkUgQT0zLAl5PUxPQUQgQS0+MywJU1RPUkUgQj00LAl4PUxPQUQgQi0+NAorCVNUT1JFIEE9MywJeT1MT0FEIEEtPjMsCXg9TE9BRCBCLT4yLAlTVE9SRSBCPTQKKwlTVE9SRSBBPTMsCXg9TE9BRCBCLT4yLAlTVE9SRSBCPTQsCXk9TE9BRCBBLT4zCisJU1RPUkUgQT0zLAl4PUxPQUQgQi0+MiwJeT1MT0FEIEEtPjMsCVNUT1JFIEI9NAorCVNUT1JFIEI9NCwJU1RPUkUgQT0zLAl5PUxPQUQgQS0+MywJeD1MT0FEIEItPjQKIAlTVE9SRSBCPTQsIC4uLgogCS4uLgogCiBhbmQgY2FuIHRodXMgcmVzdWx0IGluIGZvdXIgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXM6CiAKLQl4ID09IDEsIHkgPT0gMgotCXggPT0gMSwgeSA9PSA0Ci0JeCA9PSAzLCB5ID09IDIKLQl4ID09IDMsIHkgPT0gNAorCXggPT0gMiwgeSA9PSAxCisJeCA9PSAyLCB5ID09IDMKKwl4ID09IDQsIHkgPT0gMQorCXggPT0gNCwgeSA9PSAzCiAKIAogRnVydGhlcm1vcmUsIHRoZSBzdG9yZXMgY29tbWl0dGVkIGJ5IGEgQ1BVIHRvIHRoZSBtZW1vcnkgc3lzdGVtIG1heSBub3QgYmUKQEAgLTY5NCw2ICs2OTQsMjQgQEAKIGlkZW50aWNhbCwgYXMgbm90ZWQgZWFybGllciwgdGhlIGNvbXBpbGVyIGNvdWxkIHB1bGwgdGhpcyBzdG9yZSBvdXRzaWRlCiBvZiB0aGUgJ2lmJyBzdGF0ZW1lbnQuCiAKK1lvdSBtdXN0IGFsc28gYmUgY2FyZWZ1bCBub3QgdG8gcmVseSB0b28gbXVjaCBvbiBib29sZWFuIHNob3J0LWNpcmN1aXQKK2V2YWx1YXRpb24uICBDb25zaWRlciB0aGlzIGV4YW1wbGU6CisKKwlxID0gQUNDRVNTX09OQ0UoYSk7CisJaWYgKGEgfHwgMSA+IDApCisJCUFDQ0VTU19PTkNFKGIpID0gMTsKKworQmVjYXVzZSB0aGUgc2Vjb25kIGNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZSwgdGhlIGNvbXBpbGVyIGNhbiB0cmFuc2Zvcm0KK3RoaXMgZXhhbXBsZSBhcyBmb2xsb3dpbmcsIGRlZmVhdGluZyBjb250cm9sIGRlcGVuZGVuY3k6CisKKwlxID0gQUNDRVNTX09OQ0UoYSk7CisJQUNDRVNTX09OQ0UoYikgPSAxOworCitUaGlzIGV4YW1wbGUgdW5kZXJzY29yZXMgdGhlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGNhbm5vdAorb3V0LWd1ZXNzIHlvdXIgY29kZS4gIE1vcmUgZ2VuZXJhbGx5LCBhbHRob3VnaCBBQ0NFU1NfT05DRSgpIGRvZXMgZm9yY2UKK3RoZSBjb21waWxlciB0byBhY3R1YWxseSBlbWl0IGNvZGUgZm9yIGEgZ2l2ZW4gbG9hZCwgaXQgZG9lcyBub3QgZm9yY2UKK3RoZSBjb21waWxlciB0byB1c2UgdGhlIHJlc3VsdHMuCisKIEZpbmFsbHksIGNvbnRyb2wgZGVwZW5kZW5jaWVzIGRvIC1ub3QtIHByb3ZpZGUgdHJhbnNpdGl2aXR5LiAgVGhpcyBpcwogZGVtb25zdHJhdGVkIGJ5IHR3byByZWxhdGVkIGV4YW1wbGVzLCB3aXRoIHRoZSBpbml0aWFsIHZhbHVlcyBvZgogeCBhbmQgeSBib3RoIGJlaW5nIHplcm86CkBAIC0yNDY1LDEwICsyNDgzLDE1IEBACiAgICAgIFBsZWFzZSByZWZlciB0byB0aGUgUENJIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaW50ZXJhY3Rpb25zCiAgICAgIGJldHdlZW4gUENJIHRyYW5zYWN0aW9ucy4KIAotICgqKSByZWFkWF9yZWxheGVkKCkKKyAoKikgcmVhZFhfcmVsYXhlZCgpLCB3cml0ZVhfcmVsYXhlZCgpCiAKLSAgICAgVGhlc2UgYXJlIHNpbWlsYXIgdG8gcmVhZFgoKSwgYnV0IGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBvcmRlcmVkIGluIGFueQotICAgICB3YXkuIEJlIGF3YXJlIHRoYXQgdGhlcmUgaXMgbm8gSS9PIHJlYWQgYmFycmllciBhdmFpbGFibGUuCisgICAgIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHJlYWRYKCkgYW5kIHdyaXRlWCgpLCBidXQgcHJvdmlkZSB3ZWFrZXIgbWVtb3J5CisgICAgIG9yZGVyaW5nIGd1YXJhbnRlZXMuIFNwZWNpZmljYWxseSwgdGhleSBkbyBub3QgZ3VhcmFudGVlIG9yZGVyaW5nIHdpdGgKKyAgICAgcmVzcGVjdCB0byBub3JtYWwgbWVtb3J5IGFjY2Vzc2VzIChlLmcuIERNQSBidWZmZXJzKSBub3IgZG8gdGhleSBndWFyYW50ZWUKKyAgICAgb3JkZXJpbmcgd2l0aCByZXNwZWN0IHRvIExPQ0sgb3IgVU5MT0NLIG9wZXJhdGlvbnMuIElmIHRoZSBsYXR0ZXIgaXMKKyAgICAgcmVxdWlyZWQsIGFuIG1taW93YigpIGJhcnJpZXIgY2FuIGJlIHVzZWQuIE5vdGUgdGhhdCByZWxheGVkIGFjY2Vzc2VzIHRvCisgICAgIHRoZSBzYW1lIHBlcmlwaGVyYWwgYXJlIGd1YXJhbnRlZWQgdG8gYmUgb3JkZXJlZCB3aXRoIHJlc3BlY3QgdG8gZWFjaAorICAgICBvdGhlci4KIAogICgqKSBpb3JlYWRYKCksIGlvd3JpdGVYKCkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAppbmRleCAwMzA3ZTI4Li5hNDc2YjA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtNTYsNiArNTYsMTMgQEAKIAkwIC0gZGlzYWJsZWQKIAkxIC0gZW5hYmxlZAogCitmd21hcmtfcmVmbGVjdCAtIEJPT0xFQU4KKwlDb250cm9scyB0aGUgZndtYXJrIG9mIGtlcm5lbC1nZW5lcmF0ZWQgSVB2NCByZXBseSBwYWNrZXRzIHRoYXQgYXJlIG5vdAorCWFzc29jaWF0ZWQgd2l0aCBhIHNvY2tldCBmb3IgZXhhbXBsZSwgVENQIFJTVHMgb3IgSUNNUCBlY2hvIHJlcGxpZXMpLgorCUlmIHVuc2V0LCB0aGVzZSBwYWNrZXRzIGhhdmUgYSBmd21hcmsgb2YgemVyby4gSWYgc2V0LCB0aGV5IGhhdmUgdGhlCisJZndtYXJrIG9mIHRoZSBwYWNrZXQgdGhleSBhcmUgcmVwbHlpbmcgdG8uCisJRGVmYXVsdDogMAorCiByb3V0ZS9tYXhfc2l6ZSAtIElOVEVHRVIKIAlNYXhpbXVtIG51bWJlciBvZiByb3V0ZXMgYWxsb3dlZCBpbiB0aGUga2VybmVsLiAgSW5jcmVhc2UKIAl0aGlzIHdoZW4gdXNpbmcgbGFyZ2UgbnVtYmVycyBvZiBpbnRlcmZhY2VzIGFuZC9vciByb3V0ZXMuCkBAIC0xMjAxLDYgKzEyMDgsMTMgQEAKIHByb3h5X25kcCAtIEJPT0xFQU4KIAlEbyBwcm94eSBuZHAuCiAKK2Z3bWFya19yZWZsZWN0IC0gQk9PTEVBTgorCUNvbnRyb2xzIHRoZSBmd21hcmsgb2Yga2VybmVsLWdlbmVyYXRlZCBJUHY2IHJlcGx5IHBhY2tldHMgdGhhdCBhcmUgbm90CisJYXNzb2NpYXRlZCB3aXRoIGEgc29ja2V0IGZvciBleGFtcGxlLCBUQ1AgUlNUcyBvciBJQ01QdjYgZWNobyByZXBsaWVzKS4KKwlJZiB1bnNldCwgdGhlc2UgcGFja2V0cyBoYXZlIGEgZndtYXJrIG9mIHplcm8uIElmIHNldCwgdGhleSBoYXZlIHRoZQorCWZ3bWFyayBvZiB0aGUgcGFja2V0IHRoZXkgYXJlIHJlcGx5aW5nIHRvLgorCURlZmF1bHQ6IDAKKwogY29uZi9pbnRlcmZhY2UvKjoKIAlDaGFuZ2Ugc3BlY2lhbCBzZXR0aW5ncyBwZXIgaW50ZXJmYWNlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcudHh0CmluZGV4IDQxMmY0NWMuLjFkNmQwMmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcudHh0CkBAIC0xMzYsNyArMTM2LDcgQEAKIAogICBUaGlzIG9wdGlvbiBpcyBpbXBsZW1lbnRlZCBvbmx5IGZvciB0cmFuc21pdCB0aW1lc3RhbXBzLiBUaGVyZSwgdGhlCiAgIHRpbWVzdGFtcCBpcyBhbHdheXMgbG9vcGVkIGFsb25nIHdpdGggYSBzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIuCi0gIFRoZSBvcHRpb24gbW9kaWZpZXMgZmllbGQgZWVfaW5mbyB0byBwYXNzIGFuIGlkIHRoYXQgaXMgdW5pcXVlCisgIFRoZSBvcHRpb24gbW9kaWZpZXMgZmllbGQgZWVfZGF0YSB0byBwYXNzIGFuIGlkIHRoYXQgaXMgdW5pcXVlCiAgIGFtb25nIGFsbCBwb3NzaWJseSBjb25jdXJyZW50bHkgb3V0c3RhbmRpbmcgdGltZXN0YW1wIHJlcXVlc3RzIGZvcgogICB0aGF0IHNvY2tldC4gSW4gcHJhY3RpY2UsIGl0IGlzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHUzMgogICAodGhhdCB3cmFwcykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25pb3MyL1JFQURNRSBiL0RvY3VtZW50YXRpb24vbmlvczIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NGE2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25pb3MyL1JFQURNRQpAQCAtMCwwICsxLDIzIEBACitMaW51eCBvbiB0aGUgTmlvcyBJSSBhcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgcG9ydCBvZiBMaW51eCB0byBOaW9zIElJIChuaW9zMikgcHJvY2Vzc29yLgorCitJbiBvcmRlciB0byBjb21waWxlIGZvciBOaW9zIElJLCB5b3UgbmVlZCBhIHZlcnNpb24gb2YgR0NDIHdpdGggc3VwcG9ydCBmb3IgdGhlIGdlbmVyaWMKK3N5c3RlbSBjYWxsIEFCSS4gUGxlYXNlIHNlZSB0aGlzIGxpbmsgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IGNvbXBpbGluZyBhbmQgYm9vdGluZworc29mdHdhcmUgZm9yIHRoZSBOaW9zIElJIHBsYXRmb3JtOgoraHR0cDovL3d3dy5yb2NrZXRib2FyZHMub3JnL2Zvc3dpa2kvRG9jdW1lbnRhdGlvbi9OaW9zSUlMaW51eFVzZXJNYW51YWwKKworRm9yIHJlZmVyZW5jZSwgcGxlYXNlIHNlZSB0aGUgZm9sbG93aW5nIGxpbms6CitodHRwOi8vd3d3LmFsdGVyYS5jb20vbGl0ZXJhdHVyZS9saXQtbmlvMi5qc3AKKworV2hhdCBpcyBOaW9zIElJPworPT09PT09PT09PT09PT09PQorTmlvcyBJSSBpcyBhIDMyLWJpdCBlbWJlZGRlZC1wcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgdGhlCitBbHRlcmEgZmFtaWx5IG9mIEZQR0FzLiBJbiBvcmRlciB0byBzdXBwb3J0IExpbnV4LCBOaW9zIElJIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQKK3dpdGggTU1VIGFuZCBoYXJkd2FyZSBtdWx0aXBsaWVyIGVuYWJsZWQuCisKK05pb3MgSUkgQUJJCis9PT09PT09PT09PQorUGxlYXNlIHJlZmVyIHRvIGNoYXB0ZXIgIkFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UiIGluIE5pb3MgSUkgUHJvY2Vzc29yIFJlZmVyZW5jZQorSGFuZGJvb2suCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvbGlic2FzLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9saWJzYXMudHh0CmluZGV4IDNjYzljNzguLjhjYWM2NDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9saWJzYXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9saWJzYXMudHh0CkBAIC0yMjYsOSArMjI2LDYgQEAKIAlteV9oYS0+c2FzX2hhLmxsZGRfZGV2X2ZvdW5kID0gbXlfZGV2X2ZvdW5kOwogCW15X2hhLT5zYXNfaGEubGxkZF9kZXZfZ29uZSA9IG15X2Rldl9nb25lOwogCi0JbXlfaGEtPnNhc19oYS5sbGRkX21heF9leGVjdXRlX251bSA9IGxsZGRfbWF4X2V4ZWN1dGVfbnVtOyAoMSkKLQotCW15X2hhLT5zYXNfaGEubGxkZF9xdWV1ZV9zaXplID0gaGFfY2FuX3F1ZXVlOwogCW15X2hhLT5zYXNfaGEubGxkZF9leGVjdXRlX3Rhc2sgPSBteV9leGVjdXRlX3Rhc2s7CiAKIAlteV9oYS0+c2FzX2hhLmxsZGRfYWJvcnRfdGFzayAgICAgPSBteV9hYm9ydF90YXNrOwpAQCAtMjQ3LDI4ICsyNDQsNiBAQAogCXJldHVybiBzYXNfcmVnaXN0ZXJfaGEoJm15X2hhLT5zYXNfaGEpOwogfQogCi0oMSkgVGhpcyBpcyBub3JtYWxseSBhIExMREQgcGFyYW1ldGVyLCBzb21ldGhpbmcgb2YgdGhlCi1saW5lcyBvZiBhIHRhc2sgY29sbGVjdG9yLiAgV2hhdCBpdCB0ZWxscyB0aGUgU0FTIExheWVyIGlzCi13aGV0aGVyIHRoZSBTQVMgbGF5ZXIgc2hvdWxkIHJ1biBpbiBEaXJlY3QgTW9kZSAoZGVmYXVsdDoKLXZhbHVlIDAgb3IgMSkgb3IgVGFzayBDb2xsZWN0b3IgTW9kZSAodmFsdWUgZ3JlYXRlciB0aGFuIDEpLgotCi1JbiBEaXJlY3QgTW9kZSwgdGhlIFNBUyBMYXllciBjYWxscyBFeGVjdXRlIFRhc2sgYXMgc29vbiBhcwotaXQgaGFzIGEgY29tbWFuZCB0byBzZW5kIHRvIHRoZSBTRFMsIF9hbmRfIHRoaXMgaXMgYSBzaW5nbGUKLWNvbW1hbmQsIGkuZS4gbm90IGxpbmtlZC4KLQotU29tZSBoYXJkd2FyZSAoZS5nLiBhaWM5NHh4KSBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gRE1BIG1vcmUKLXRoYW4gb25lIHRhc2sgYXQgYSB0aW1lIChpbnRlcnJ1cHQpIGZyb20gaG9zdCBtZW1vcnkuICBUYXNrCi1Db2xsZWN0b3IgTW9kZSBpcyBhbiBvcHRpb25hbCBmZWF0dXJlIGZvciBIQXMgd2hpY2ggc3VwcG9ydAotdGhpcyBpbiB0aGVpciBoYXJkd2FyZS4gIChBZ2FpbiwgaXQgaXMgY29tcGxldGVseSBvcHRpb25hbAotZXZlbiBpZiB5b3VyIGhhcmR3YXJlIHN1cHBvcnRzIGl0LikKLQotSW4gVGFzayBDb2xsZWN0b3IgTW9kZSwgdGhlIFNBUyBMYXllciB3b3VsZCBkbyBfbmF0dXJhbF8KLWNvYWxlc2Npbmcgb2YgdGFza3MgYW5kIGF0IHRoZSBhcHByb3ByaWF0ZSBtb21lbnQgaXQgd291bGQKLWNhbGwgeW91ciBkcml2ZXIgdG8gRE1BIG1vcmUgdGhhbiBvbmUgdGFzayBpbiBhIHNpbmdsZSBIQQotaW50ZXJydXB0LiBETUJTIG1heSB3YW50IHRvIHVzZSB0aGlzIGJ5IGluc21vZC9tb2Rwcm9iZQotc2V0dGluZyB0aGUgbGxkZF9tYXhfZXhlY3V0ZV9udW0gdG8gc29tZXRoaW5nIGdyZWF0ZXIgdGhhbgotMS4KLQogKDIpIFNBUyAxLjEgZG9lcyBub3QgZGVmaW5lIElfVCBOZXh1cyBSZXNldCBUTUYuCiAKIEV2ZW50cwpAQCAtMzI1LDcxICszMDAsMjIgQEAKIAogVGhlIEV4ZWN1dGUgQ29tbWFuZCBTQ1NJIFJQQzoKIAotCWludCAoKmxsZGRfZXhlY3V0ZV90YXNrKShzdHJ1Y3Qgc2FzX3Rhc2sgKiwgaW50IG51bSwKLQkJCQkgdW5zaWduZWQgbG9uZyBnZnBfZmxhZ3MpOworCWludCAoKmxsZGRfZXhlY3V0ZV90YXNrKShzdHJ1Y3Qgc2FzX3Rhc2sgKiwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIAotVXNlZCB0byBxdWV1ZSBhIHRhc2sgdG8gdGhlIFNBUyBMTERELiAgQHRhc2sgaXMgdGhlIHRhc2tzIHRvCi1iZSBleGVjdXRlZC4gIEBudW0gc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgdGFza3MgYmVpbmcKLXF1ZXVlZCBhdCB0aGlzIGZ1bmN0aW9uIGNhbGwgKHRoZXkgYXJlIGxpbmtlZCBsaXN0ZWQgdmlhCi10YXNrOjpsaXN0KSwgQGdmcF9tYXNrIHNob3VsZCBiZSB0aGUgZ2ZwX21hc2sgZGVmaW5pbmcgdGhlCi1jb250ZXh0IG9mIHRoZSBjYWxsZXIuCitVc2VkIHRvIHF1ZXVlIGEgdGFzayB0byB0aGUgU0FTIExMREQuICBAdGFzayBpcyB0aGUgdGFzayB0byBiZSBleGVjdXRlZC4KK0BnZnBfbWFzayBpcyB0aGUgZ2ZwX21hc2sgZGVmaW5pbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxlci4KIAogVGhpcyBmdW5jdGlvbiBzaG91bGQgaW1wbGVtZW50IHRoZSBFeGVjdXRlIENvbW1hbmQgU0NTSSBSUEMsCi1vciBpZiB5b3UncmUgc2VuZGluZyBhIFNDU0kgVGFzayBhcyBsaW5rZWQgY29tbWFuZHMsIHlvdQotc2hvdWxkIGFsc28gdXNlIHRoaXMgZnVuY3Rpb24uCiAKLVRoYXQgaXMsIHdoZW4gbGxkZF9leGVjdXRlX3Rhc2soKSBpcyBjYWxsZWQsIHRoZSBjb21tYW5kKHMpCitUaGF0IGlzLCB3aGVuIGxsZGRfZXhlY3V0ZV90YXNrKCkgaXMgY2FsbGVkLCB0aGUgY29tbWFuZAogZ28gb3V0IG9uIHRoZSB0cmFuc3BvcnQgKmltbWVkaWF0ZWx5Ki4gIFRoZXJlIGlzICpubyoKIHF1ZXVpbmcgb2YgYW55IHNvcnQgYW5kIGF0IGFueSBsZXZlbCBpbiBhIFNBUyBMTERELgogCi1UaGUgdXNlIG9mIHRhc2s6Omxpc3QgaXMgdHdvLWZvbGQsIG9uZSBmb3IgbGlua2VkIGNvbW1hbmRzLAotdGhlIG90aGVyIGRpc2N1c3NlZCBiZWxvdy4KLQotSXQgaXMgcG9zc2libGUgdG8gcXVldWUgdXAgbW9yZSB0aGFuIG9uZSB0YXNrIGF0IGEgdGltZSwgYnkKLWluaXRpYWxpemluZyB0aGUgbGlzdCBlbGVtZW50IG9mIHN0cnVjdCBzYXNfdGFzaywgYW5kCi1wYXNzaW5nIHRoZSBudW1iZXIgb2YgdGFza3MgZW5saXN0ZWQgaW4gdGhpcyBtYW5uZXIgaW4gbnVtLgotCiBSZXR1cm5zOiAtU0FTX1FVRVVFX0ZVTEwsIC1FTk9NRU0sIG5vdGhpbmcgd2FzIHF1ZXVlZDsKIAkgMCwgdGhlIHRhc2socykgd2VyZSBxdWV1ZWQuCiAKLUlmIHlvdSB3YW50IHRvIHBhc3MgbnVtID4gMSwgdGhlbiBlaXRoZXIKLUEpIHlvdSdyZSB0aGUgb25seSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBhbmQga2VlcCB0cmFjawotICAgb2Ygd2hhdCB5b3UndmUgcXVldWVkIHRvIHRoZSBMTERELCBvcgotQikgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcgYW5kIGhhdmUgYSBzdHJhdGVneSBvZgotICAgcmV0cnlpbmcuCi0KLUFzIG9wcG9zZWQgdG8gcXVldWluZyBvbmUgdGFzayBhdCBhIHRpbWUgKGZ1bmN0aW9uIGNhbGwpLAotYmF0Y2ggcXVldWluZyBvZiB0YXNrcywgYnkgaGF2aW5nIG51bSA+IDEsIGdyZWF0bHkKLXNpbXBsaWZpZXMgTExERCBjb2RlLCBzZXF1ZW5jZXIgY29kZSwgYW5kIF9oYXJkd2FyZSBkZXNpZ25fLAotYW5kIGhhcyBzb21lIHBlcmZvcm1hbmNlIGFkdmFudGFnZXMgaW4gY2VydGFpbiBzaXR1YXRpb25zCi0oREJNUykuCi0KLVRoZSBMTEREIGFkdmVydGlzZXMgaWYgaXQgY2FuIHRha2UgbW9yZSB0aGFuIG9uZSBjb21tYW5kIGF0Ci1hIHRpbWUgYXQgbGxkZF9leGVjdXRlX3Rhc2soKSwgYnkgc2V0dGluZyB0aGUKLWxsZGRfbWF4X2V4ZWN1dGVfbnVtIHBhcmFtZXRlciAoY29udHJvbGxlZCBieSAiY29sbGVjdG9yIgotbW9kdWxlIHBhcmFtZXRlciBpbiBhaWM5NHh4IFNBUyBMTEREKS4KLQotWW91IHNob3VsZCBsZWF2ZSB0aGlzIHRvIHRoZSBkZWZhdWx0IDEsIHVubGVzcyB5b3Uga25vdyB3aGF0Ci15b3UncmUgZG9pbmcuCi0KLVRoaXMgaXMgYSBmdW5jdGlvbiBvZiB0aGUgTExERCwgdG8gd2hpY2ggdGhlIFNBUyBsYXllciBjYW4KLWNhdGVyIHRvLgotCi1pbnQgbGxkZF9xdWV1ZV9zaXplCi0JVGhlIGhvc3QgYWRhcHRlcidzIHF1ZXVlIHNpemUuICBUaGlzIGlzIHRoZSBtYXhpbXVtCi1udW1iZXIgb2YgY29tbWFuZHMgdGhlIGxsZGQgY2FuIGhhdmUgcGVuZGluZyB0byBkb21haW4KLWRldmljZXMgb24gYmVoYWxmIG9mIGFsbCB1cHBlciBsYXllcnMgc3VibWl0dGluZyB0aHJvdWdoCi1sbGRkX2V4ZWN1dGVfdGFzaygpLgotCi1Zb3UgcmVhbGx5IHdhbnQgdG8gc2V0IHRoaXMgdG8gc29tZXRoaW5nIChtdWNoKSBsYXJnZXIgdGhhbgotMS4KLQotVGhpcyBfcmVhbGx5XyBoYXMgYWJzb2x1dGVseSBub3RoaW5nIHRvIGRvIHdpdGggcXVldWluZy4KLVRoZXJlIGlzIG5vIHF1ZXVpbmcgaW4gU0FTIExMRERzLgotCiBzdHJ1Y3Qgc2FzX3Rhc2sgewogCWRldiAtLSB0aGUgZGV2aWNlIHRoaXMgdGFzayBpcyBkZXN0aW5lZCB0bwotCWxpc3QgLS0gbXVzdCBiZSBpbml0aWFsaXplZCAoSU5JVF9MSVNUX0hFQUQpCiAJdGFza19wcm90byAtLSBfb25lXyBvZiBlbnVtIHNhc19wcm90bwogCXNjYXR0ZXIgLS0gcG9pbnRlciB0byBzY2F0dGVyIGdhdGhlciBsaXN0IGFycmF5CiAJbnVtX3NjYXR0ZXIgLS0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHNjYXR0ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dAppbmRleCBkNmE5YmRlLi43MzFiYzRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CkBAIC0xNDksNyArMTQ5LDcgQEAKIHNjc2lfc2Nhbl9ob3N0KCkgIC0tLS0tLS0rCiAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCi0gICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpIC0tPiAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKQorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAtLT4gIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKCkKICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKICAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkKQEAgLTE1OSw3ICsxNTksNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIElmIHRoZSBMTEQgd2FudHMgdG8gYWRqdXN0IHRoZSBkZWZhdWx0IHF1ZXVlIHNldHRpbmdzLCBpdCBjYW4gaW52b2tlCi1zY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpIGluIGl0cyBzbGF2ZV9jb25maWd1cmUoKSByb3V0aW5lLgorc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoKSBpbiBpdHMgc2xhdmVfY29uZmlndXJlKCkgcm91dGluZS4KIAogKioqIEZvciBzY3NpIGRldmljZXMgdGhhdCB0aGUgbWlkIGxldmVsIHRyaWVzIHRvIHNjYW4gYnV0IGRvIG5vdAogICAgIHJlc3BvbmQsIGEgc2xhdmVfYWxsb2MoKSwgc2xhdmVfZGVzdHJveSgpIHBhaXIgaXMgY2FsbGVkLgpAQCAtMjAzLDcgKzIwMyw3IEBACiBzY3NpX2FkZF9kZXZpY2UoKSAgLS0tLS0tKwogICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQotICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAgIFstLT4gc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKV0KKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgICBbLS0+IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKCldCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSW4gYSBzaW1pbGFyIGZhc2hpb24sIGFuIExMRCBtYXkgYmVjb21lIGF3YXJlIHRoYXQgYSBTQ1NJIGRldmljZSBoYXMgYmVlbgpAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBzY3NpX3JlZ2lzdGVyKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQotICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpICAtLT4gIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAgLS0+ICBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpCiAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKSAgICoqKgogICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKSAqKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC0yNzEsOSArMjcxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkgKioqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIG1pZCBsZXZlbCBpbnZva2VzIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkgd2l0aCB0YWdnZWQgcXVldWluZyBvZmYgYW5kCi0iY21kX3Blcl9sdW4iIGZvciB0aGF0IGhvc3QgYXMgdGhlIHF1ZXVlIGxlbmd0aC4gVGhlc2Ugc2V0dGluZ3MgY2FuIGJlCi1vdmVycmlkZGVuIGJ5IGEgc2xhdmVfY29uZmlndXJlKCkgc3VwcGxpZWQgYnkgdGhlIExMRC4KK1RoZSBtaWQgbGV2ZWwgaW52b2tlcyBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpIHdpdGggImNtZF9wZXJfbHVuIiBmb3IgdGhhdAoraG9zdCBhcyB0aGUgcXVldWUgbGVuZ3RoLiBUaGVzZSBzZXR0aW5ncyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhCitzbGF2ZV9jb25maWd1cmUoKSBzdXBwbGllZCBieSB0aGUgTExELgogCiAqKiogRm9yIHNjc2kgZGV2aWNlcyB0aGF0IHRoZSBtaWQgbGV2ZWwgdHJpZXMgdG8gc2NhbiBidXQgZG8gbm90CiAgICAgcmVzcG9uZCwgYSBzbGF2ZV9hbGxvYygpLCBzbGF2ZV9kZXN0cm95KCkgcGFpciBpcyBjYWxsZWQuCkBAIC0zNjYsMTMgKzM2NiwxMSBAQAogbmFtZXMgYWxsIHN0YXJ0IHdpdGggInNjc2lfIi4KIAogU3VtbWFyeToKLSAgIHNjc2lfYWN0aXZhdGVfdGNxIC0gdHVybiBvbiB0YWcgY29tbWFuZCBxdWV1ZWluZwogICAgc2NzaV9hZGRfZGV2aWNlIC0gY3JlYXRlcyBuZXcgc2NzaSBkZXZpY2UgKGx1KSBpbnN0YW5jZQogICAgc2NzaV9hZGRfaG9zdCAtIHBlcmZvcm0gc3lzZnMgcmVnaXN0cmF0aW9uIGFuZCBzZXQgdXAgdHJhbnNwb3J0IGNsYXNzCi0gICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCAtIGNoYW5nZSB0aGUgcXVldWUgZGVwdGggb24gYSBTQ1NJIGRldmljZQorICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGggLSBjaGFuZ2UgdGhlIHF1ZXVlIGRlcHRoIG9uIGEgU0NTSSBkZXZpY2UKICAgIHNjc2lfYmlvc19wdGFibGUgLSByZXR1cm4gY29weSBvZiBibG9jayBkZXZpY2UncyBwYXJ0aXRpb24gdGFibGUKICAgIHNjc2lfYmxvY2tfcmVxdWVzdHMgLSBwcmV2ZW50IGZ1cnRoZXIgY29tbWFuZHMgYmVpbmcgcXVldWVkIHRvIGdpdmVuIGhvc3QKLSAgIHNjc2lfZGVhY3RpdmF0ZV90Y3EgLSB0dXJuIG9mZiB0YWcgY29tbWFuZCBxdWV1ZWluZwogICAgc2NzaV9ob3N0X2FsbG9jIC0gcmV0dXJuIGEgbmV3IHNjc2lfaG9zdCBpbnN0YW5jZSB3aG9zZSByZWZjb3VudD09MQogICAgc2NzaV9ob3N0X2dldCAtIGluY3JlbWVudHMgU2NzaV9Ib3N0IGluc3RhbmNlJ3MgcmVmY291bnQKICAgIHNjc2lfaG9zdF9wdXQgLSBkZWNyZW1lbnRzIFNjc2lfSG9zdCBpbnN0YW5jZSdzIHJlZmNvdW50IChmcmVlIGlmIDApCkBAIC0zOTAsMjQgKzM4OCw2IEBACiBEZXRhaWxzOgogCiAvKioKLSAqIHNjc2lfYWN0aXZhdGVfdGNxIC0gdHVybiBvbiB0YWcgY29tbWFuZCBxdWV1ZWluZyAoIm9yZGVyZWQiIHRhc2sgYXR0cmlidXRlKQotICogQHNkZXY6ICAgICAgIGRldmljZSB0byB0dXJuIG9uIFRDUSBmb3IKLSAqIEBkZXB0aDogICAgICBxdWV1ZSBkZXB0aAotICoKLSAqICAgICAgUmV0dXJucyBub3RoaW5nCi0gKgotICogICAgICBNaWdodCBibG9jazogbm8KLSAqCi0gKiAgICAgIE5vdGVzOiBFdmVudHVhbGx5LCBpdCBpcyBob3BlZCBkZXB0aCB3b3VsZCBiZSB0aGUgbWF4aW11bSBkZXB0aAotICogICAgICB0aGUgZGV2aWNlIGNvdWxkIGNvcGUgd2l0aCBhbmQgdGhlIHJlYWwgcXVldWUgZGVwdGgKLSAqICAgICAgd291bGQgYmUgYWRqdXN0YWJsZSBmcm9tIDAgdG8gZGVwdGguCi0gKgotICogICAgICBEZWZpbmVkIChpbmxpbmUpIGluOiBpbmNsdWRlL3Njc2kvc2NzaV90Y3EuaAotICoqLwotdm9pZCBzY3NpX2FjdGl2YXRlX3RjcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKLQotCi0vKioKICAqIHNjc2lfYWRkX2RldmljZSAtIGNyZWF0ZXMgbmV3IHNjc2kgZGV2aWNlIChsdSkgaW5zdGFuY2UKICAqIEBzaG9zdDogICBwb2ludGVyIHRvIHNjc2kgaG9zdCBpbnN0YW5jZQogICogQGNoYW5uZWw6IGNoYW5uZWwgbnVtYmVyIChyYXJlbHkgb3RoZXIgdGhhbiAwKQpAQCAtNDU2LDExICs0MzYsOCBAQAogCiAKIC8qKgotICogc2NzaV9hZGp1c3RfcXVldWVfZGVwdGggLSBhbGxvdyBMTEQgdG8gY2hhbmdlIHF1ZXVlIGRlcHRoIG9uIGEgU0NTSSBkZXZpY2UKKyAqIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gYWxsb3cgTExEIHRvIGNoYW5nZSBxdWV1ZSBkZXB0aCBvbiBhIFNDU0kgZGV2aWNlCiAgKiBAc2RldjogICAgICAgcG9pbnRlciB0byBTQ1NJIGRldmljZSB0byBjaGFuZ2UgcXVldWUgZGVwdGggb24KLSAqIEB0YWdnZWQ6ICAgICAwIC0gbm8gdGFnZ2VkIHF1ZXVpbmcKLSAqICAgICAgICAgICAgICBNU0dfU0lNUExFX1RBRyAtIHNpbXBsZSB0YWdnZWQgcXVldWluZwotICogICAgICAgICAgICAgIE1TR19PUkRFUkVEX1RBRyAtIG9yZGVyZWQgdGFnZ2VkIHF1ZXVpbmcKICAqIEB0YWdzICAgICAgICBOdW1iZXIgb2YgdGFncyBhbGxvd2VkIGlmIHRhZ2dlZCBxdWV1aW5nIGVuYWJsZWQsCiAgKiAgICAgICAgICAgICAgb3IgbnVtYmVyIG9mIGNvbW1hbmRzIHRoZSBMTEQgY2FuIHF1ZXVlIHVwCiAgKiAgICAgICAgICAgICAgaW4gbm9uLXRhZ2dlZCBtb2RlIChhcyBwZXIgY21kX3Blcl9sdW4pLgpAQCAtNDcxLDE1ICs0NDgsMTIgQEAKICAqCiAgKiAgICAgIE5vdGVzOiBDYW4gYmUgaW52b2tlZCBhbnkgdGltZSBvbiBhIFNDU0kgZGV2aWNlIGNvbnRyb2xsZWQgYnkgdGhpcwogICogICAgICBMTEQuIFtTcGVjaWZpY2FsbHkgZHVyaW5nIGFuZCBhZnRlciBzbGF2ZV9jb25maWd1cmUoKSBhbmQgcHJpb3IgdG8KLSAqICAgICAgc2xhdmVfZGVzdHJveSgpLl0gQ2FuIHNhZmVseSBiZSBpbnZva2VkIGZyb20gaW50ZXJydXB0IGNvZGUuIEFjdHVhbAotICogICAgICBxdWV1ZSBkZXB0aCBjaGFuZ2UgbWF5IGJlIGRlbGF5ZWQgdW50aWwgdGhlIG5leHQgY29tbWFuZCBpcyBiZWluZwotICogICAgICBwcm9jZXNzZWQuIFNlZSBhbHNvIHNjc2lfYWN0aXZhdGVfdGNxKCkgYW5kIHNjc2lfZGVhY3RpdmF0ZV90Y3EoKS4KKyAqICAgICAgc2xhdmVfZGVzdHJveSgpLl0gQ2FuIHNhZmVseSBiZSBpbnZva2VkIGZyb20gaW50ZXJydXB0IGNvZGUuCiAgKgogICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaS5jIFtzZWUgc291cmNlIGNvZGUgZm9yIG1vcmUgbm90ZXNdCiAgKgogICoqLwotdm9pZCBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZGV2LCBpbnQgdGFnZ2VkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZ3MpCitpbnQgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFncykKIAogCiAvKioKQEAgLTUxNSwyMCArNDg5LDYgQEAKIAogCiAvKioKLSAqIHNjc2lfZGVhY3RpdmF0ZV90Y3EgLSB0dXJuIG9mZiB0YWcgY29tbWFuZCBxdWV1ZWluZwotICogQHNkZXY6ICAgICAgIGRldmljZSB0byB0dXJuIG9mZiBUQ1EgZm9yCi0gKiBAZGVwdGg6ICAgICAgcXVldWUgZGVwdGggKHN0b3JlZCBpbiBzZGV2KQotICoKLSAqICAgICAgUmV0dXJucyBub3RoaW5nCi0gKgotICogICAgICBNaWdodCBibG9jazogbm8KLSAqCi0gKiAgICAgIERlZmluZWQgKGlubGluZSkgaW46IGluY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCi0gKiovCi12b2lkIHNjc2lfZGVhY3RpdmF0ZV90Y3Eoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCi0KLQotLyoqCiAgKiBzY3NpX2hvc3RfYWxsb2MgLSBjcmVhdGUgYSBzY3NpIGhvc3QgYWRhcHRlciBpbnN0YW5jZSBhbmQgcGVyZm9ybSBiYXNpYwogICogICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24uCiAgKiBAc2h0OiAgICAgICAgcG9pbnRlciB0byBzY3NpIGhvc3QgdGVtcGxhdGUKQEAgLTEyNTQsNyArMTIxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgZm9yIGRpc2sgZmlybXdhcmUgdXBsb2Fkcy4KICAgICBjbWRfcGVyX2x1biAgLSBtYXhpbXVtIG51bWJlciBvZiBjb21tYW5kcyB0aGF0IGNhbiBiZSBxdWV1ZWQgb24gZGV2aWNlcwogICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWQgYnkgdGhlIGhvc3QuIE92ZXJyaWRkZW4gYnkgTExEIGNhbGxzIHRvCi0gICAgICAgICAgICAgICAgICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKS4KKyAgICAgICAgICAgICAgICAgICBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpLgogICAgIHVuY2hlY2tlZF9pc2FfZG1hIC0gMT0+b25seSB1c2UgYm90dG9tIDE2IE1CIG9mIHJhbSAoSVNBIERNQSBhZGRyZXNzaW5nCiAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24pLCAwPT5jYW4gdXNlIGZ1bGwgMzIgYml0IChvciBiZXR0ZXIpIERNQQogICAgICAgICAgICAgICAgICAgIGFkZHJlc3Mgc3BhY2UKQEAgLTEyOTQsNyArMTI1NCw3IEBACiBJbnN0YW5jZXMgb2YgdGhpcyBzdHJ1Y3R1cmUgY29udmV5IFNDU0kgY29tbWFuZHMgdG8gdGhlIExMRCBhbmQgcmVzcG9uc2VzCiBiYWNrIHRvIHRoZSBtaWQgbGV2ZWwuIFRoZSBTQ1NJIG1pZCBsZXZlbCB3aWxsIGVuc3VyZSB0aGF0IG5vIG1vcmUgU0NTSQogY29tbWFuZHMgYmVjb21lIHF1ZXVlZCBhZ2FpbnN0IHRoZSBMTEQgdGhhbiBhcmUgaW5kaWNhdGVkIGJ5Ci1zY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpIChvciBzdHJ1Y3QgU2NzaV9Ib3N0OjpjbWRfcGVyX2x1bikuIFRoZXJlIHdpbGwKK3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKCkgKG9yIHN0cnVjdCBTY3NpX0hvc3Q6OmNtZF9wZXJfbHVuKS4gVGhlcmUgd2lsbAogYmUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIHN0cnVjdCBzY3NpX2NtbmQgYXZhaWxhYmxlIGZvciBlYWNoIFNDU0kgZGV2aWNlLgogTWVtYmVycyBvZiBpbnRlcmVzdDoKICAgICBjbW5kICAgICAgICAgLSBhcnJheSBjb250YWluaW5nIFNDU0kgY29tbWFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQKaW5kZXggZjM0NmFiYi4uMGQ1YmRiMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0CkBAIC01MDYsOSArNTA2LDExIEBACiAKIERFQlVHR0lORyBISU5UUwogCi1UbyBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzLCBlZGl0IHN0LmMgYW5kICNkZWZpbmUgREVCVUcgMS4gQXMgc2VlbgotYWJvdmUsIGRlYnVnZ2luZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIHdpdGggYW4gaW9jdGwgaWYgZGVidWdnaW5nIGlzCi1jb21waWxlZCBpbnRvIHRoZSBkcml2ZXIuIFRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGlzIG5vdCB2b2x1bWlub3VzLgorRGVidWdnaW5nIGNvZGUgaXMgbm93IGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYnV0IGRlYnVnZ2luZyBpcyB0dXJuZWQgb2ZmCit3aXRoIHRoZSBrZXJuZWwgbW9kdWxlIHBhcmFtZXRlciBkZWJ1Z19mbGFnIGRlZmF1bHRpbmcgdG8gMC4gIERlYnVnZ2luZworY2FuIHN0aWxsIGJlIHN3aXRjaGVkIG9uIGFuZCBvZmYgd2l0aCBhbiBpb2N0bC4gIFRvIGVuYWJsZSBkZWJ1ZyBhdAorbW9kdWxlIGxvYWQgdGltZSBhZGQgZGVidWdfZmxhZz0xIHRvIHRoZSBtb2R1bGUgbG9hZCBvcHRpb25zLCB0aGUKK2RlYnVnZ2luZyBvdXRwdXQgaXMgbm90IHZvbHVtaW5vdXMuCiAKIElmIHRoZSB0YXBlIHNlZW1zIHRvIGhhbmcsIEkgd291bGQgYmUgdmVyeSBpbnRlcmVzdGVkIHRvIGhlYXIgd2hlcmUKIHRoZSBkcml2ZXIgaXMgd2FpdGluZy4gV2l0aCB0aGUgY29tbWFuZCAncHMgLWwnIHlvdSBjYW4gc2VlIHRoZSBzdGF0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3dkNzE5eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvd2Q3MTl4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODE2YjAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3dkNzE5eC50eHQKQEAgLTAsMCArMSwyMSBAQAorRHJpdmVyIGZvciBXZXN0ZXJuIERpZ2l0YWwgV0Q3MTkzLCBXRDcxOTcgYW5kIFdENzI5NiBTQ1NJIGNhcmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhcmQgcmVxdWlyZXMgZmlybXdhcmUgdGhhdCBjYW4gYmUgY3V0IG91dCBvZiB0aGUgV2luZG93cyBOVCBkcml2ZXIgdGhhdAorY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBXRCBhdDoKK2h0dHA6Ly9zdXBwb3J0LndkYy5jb20vcHJvZHVjdC9kb3dubG9hZC5hc3A/Z3JvdXBpZD04MDEmc2lkPTI3Jmxhbmc9ZW4KKworVGhlcmUgaXMgbm8gbGljZW5zZSBhbnl3aGVyZSBpbiB0aGUgZmlsZSBvciBvbiB0aGUgcGFnZSAtIHNvIHRoZSBmaXJtd2FyZQorcHJvYmFibHkgY2Fubm90IGJlIGFkZGVkIHRvIGxpbnV4LWZpcm13YXJlLgorCitUaGlzIHNjcmlwdCBkb3dubG9hZHMgYW5kIGV4dHJhY3RzIHRoZSBmaXJtd2FyZSwgY3JlYXRpbmcgd2Q3MTl4LXJpc2MuYmluIGFuZAorZDcxOXgtd2NzLmJpbiBmaWxlcy4gUHV0IHRoZW0gaW4gL2xpYi9maXJtd2FyZS8uCisKKyMhL2Jpbi9zaAord2dldCBodHRwOi8vc3VwcG9ydC53ZGMuY29tL2Rvd25sb2FkL2FyY2hpdmUvcGNpc2NzaS5leGUKK2xoYSB4aSBwY2lzY3NpLmV4ZSBwY2ktc2NzaS5leGUKK2xoYSB4aSBwY2ktc2NzaS5leGUgbnQvd2Q3Mjk2YS5zeXMKK3JtIHBjaS1zY3NpLmV4ZQorZGQgaWY9d2Q3Mjk2YS5zeXMgb2Y9d2Q3MTl4LXJpc2MuYmluIGJzPTEgc2tpcD01NzYwIGNvdW50PTE0MzM2CitkZCBpZj13ZDcyOTZhLnN5cyBvZj13ZDcxOXgtd2NzLmJpbiBicz0xIHNraXA9MjAwOTYgY291bnQ9NTE0CitybSB3ZDcyOTZhLnN5cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aXZpZC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3ZpdmlkLnR4dAppbmRleCBlZWIxMWEyLi5lNWE5NDBlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3ZpdmlkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3ZpdmlkLnR4dApAQCAtMjIxLDEyICsyMjEsMTEgQEAKIAkJICAgICAgIGtleSwgbm90IHF1YWxpdHkuCiAKIG11bHRpcGxhbmFyOiBzZWxlY3Qgd2hldGhlciBlYWNoIGRldmljZSBpbnN0YW5jZSBzdXBwb3J0cyBtdWx0aS1wbGFuYXIgZm9ybWF0cywKLQlhbmQgdGh1cyB0aGUgVjRMMiBtdWx0aS1wbGFuYXIgQVBJLiBCeSBkZWZhdWx0IHRoZSBmaXJzdCBkZXZpY2UgaW5zdGFuY2UKLQlpcyBzaW5nbGUtcGxhbmFyLCB0aGUgc2Vjb25kIG11bHRpLXBsYW5hciwgYW5kIGl0IGtlZXBzIGFsdGVybmF0aW5nLgorCWFuZCB0aHVzIHRoZSBWNEwyIG11bHRpLXBsYW5hciBBUEkuIEJ5IGRlZmF1bHQgZGV2aWNlIGluc3RhbmNlcyBhcmUKKwlzaW5nbGUtcGxhbmFyLgogCiAJVGhpcyBtb2R1bGUgb3B0aW9uIGNhbiBvdmVycmlkZSB0aGF0IGZvciBlYWNoIGluc3RhbmNlLiBWYWx1ZXMgYXJlOgogCi0JCTA6IHVzZSBhbHRlcm5hdGluZyBzaW5nbGUgYW5kIG11bHRpLXBsYW5hciBkZXZpY2VzLgogCQkxOiB0aGlzIGlzIGEgc2luZ2xlLXBsYW5hciBpbnN0YW5jZS4KIAkJMjogdGhpcyBpcyBhIG11bHRpLXBsYW5hciBpbnN0YW5jZS4KIApAQCAtOTc1LDkgKzk3NCw4IEBACiAwIG90aGVyd2lzZS4KIAogVGhlIGRyaXZlciBoYXMgdG8gYmUgY29uZmlndXJlZCB0byBzdXBwb3J0IHRoZSBtdWx0aXBsYW5hciBmb3JtYXRzLiBCeSBkZWZhdWx0Ci10aGUgZmlyc3QgZHJpdmVyIGluc3RhbmNlIGlzIHNpbmdsZS1wbGFuYXIsIHRoZSBzZWNvbmQgaXMgbXVsdGktcGxhbmFyLCBhbmQgaXQKLWtlZXBzIGFsdGVybmF0aW5nLiBUaGlzIGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIG11bHRpcGxhbmFyIG1vZHVsZSBvcHRpb24sCi1zZWUgc2VjdGlvbiAxIGZvciBtb3JlIGRldGFpbHMgb24gdGhhdCBvcHRpb24uCit0aGUgZHJpdmVyIGluc3RhbmNlcyBhcmUgc2luZ2xlLXBsYW5hci4gVGhpcyBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZQorbXVsdGlwbGFuYXIgbW9kdWxlIG9wdGlvbiwgc2VlIHNlY3Rpb24gMSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoYXQgb3B0aW9uLgogCiBJZiB0aGUgZHJpdmVyIGluc3RhbmNlIGlzIHVzaW5nIHRoZSBtdWx0aXBsYW5hciBmb3JtYXRzL0FQSSwgdGhlbiB0aGUgZmlyc3QKIHNpbmdsZSBwbGFuYXIgZm9ybWF0IChZVVlWKSBhbmQgdGhlIG11bHRpcGxhbmFyIE5WMTZNIGFuZCBOVjYxTSBmb3JtYXRzIHRoZQpAQCAtMTAyMSw3ICsxMDE5LDcgQEAKIHRvIHNlZSB0aGUgYmxlbmRlZCBmcmFtZWJ1ZmZlciBvdmVybGF5IHRoYXQncyBiZWluZyB3cml0dGVuIHRvIGJ5IHRoZSBzZWNvbmQKIGluc3RhbmNlLiBUaGlzIHNldHVwIHdvdWxkIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKIAotCSQgc3VkbyBtb2Rwcm9iZSB2aXZpZCBuX2RldnM9MiBub2RlX3R5cGVzPTB4MTAxMDEsMHgxIG11bHRpcGxhbmFyPTEsMQorCSQgc3VkbyBtb2Rwcm9iZSB2aXZpZCBuX2RldnM9MiBub2RlX3R5cGVzPTB4MTAxMDEsMHgxCiAJJCB2NGwyLWN0bCAtZDEgLS1maW5kLWZiCiAJL2Rldi9mYjEgaXMgdGhlIGZyYW1lYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBiYXNlIGFkZHJlc3MgMHgxMjgwMDAwMAogCSQgc3VkbyB2NGwyLWN0bCAtZDIgLS1zZXQtZmJ1ZiBmYj0xCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Ni9pbnRlbF9tcHgudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYvaW50ZWxfbXB4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDcyZWQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYvaW50ZWxfbXB4LnR4dApAQCAtMCwwICsxLDIzNCBAQAorMS4gSW50ZWwoUikgTVBYIE92ZXJ2aWV3Cis9PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50ZWwoUikgTWVtb3J5IFByb3RlY3Rpb24gRXh0ZW5zaW9ucyAoSW50ZWwoUikgTVBYKSBpcyBhIG5ldyBjYXBhYmlsaXR5CitpbnRyb2R1Y2VkIGludG8gSW50ZWwgQXJjaGl0ZWN0dXJlLiBJbnRlbCBNUFggcHJvdmlkZXMgaGFyZHdhcmUgZmVhdHVyZXMKK3RoYXQgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBjb21waWxlciBjaGFuZ2VzIHRvIGNoZWNrIG1lbW9yeQorcmVmZXJlbmNlcywgZm9yIHRob3NlIHJlZmVyZW5jZXMgd2hvc2UgY29tcGlsZS10aW1lIG5vcm1hbCBpbnRlbnRpb25zIGFyZQordXN1cnBlZCBhdCBydW50aW1lIGR1ZSB0byBidWZmZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIEludGVsKFIpIEFyY2hpdGVjdHVyZSBJbnN0cnVjdGlvbgorU2V0IEV4dGVuc2lvbnMgUHJvZ3JhbW1pbmcgUmVmZXJlbmNlLCBDaGFwdGVyIDk6IEludGVsKFIpIE1lbW9yeSBQcm90ZWN0aW9uCitFeHRlbnNpb25zLgorCitOb3RlOiBDdXJyZW50bHkgbm8gaGFyZHdhcmUgd2l0aCBNUFggSVNBIGlzIGF2YWlsYWJsZSBidXQgaXQgaXMgYWx3YXlzCitwb3NzaWJsZSB0byB1c2UgU0RFIChJbnRlbChSKSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBFbXVsYXRvcikgaW5zdGVhZCwgd2hpY2gKK2NhbiBiZSBkb3dubG9hZGVkIGZyb20KK2h0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vZW4tdXMvYXJ0aWNsZXMvaW50ZWwtc29mdHdhcmUtZGV2ZWxvcG1lbnQtZW11bGF0b3IKKworCisyLiBIb3cgdG8gZ2V0IHRoZSBhZHZhbnRhZ2Ugb2YgTVBYCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBNUFggdG8gd29yaywgY2hhbmdlcyBhcmUgcmVxdWlyZWQgaW4gdGhlIGtlcm5lbCwgYmludXRpbHMgYW5kIGNvbXBpbGVyLgorTm8gc291cmNlIGNoYW5nZXMgYXJlIHJlcXVpcmVkIGZvciBhcHBsaWNhdGlvbnMsIGp1c3QgYSByZWNvbXBpbGUuCisKK1RoZXJlIGFyZSBhIGxvdCBvZiBtb3ZpbmcgcGFydHMgb2YgdGhpcyB0byBhbGwgd29yayByaWdodC4gVGhlIGZvbGxvd2luZworaXMgaG93IHdlIGV4cGVjdCB0aGUgY29tcGlsZXIsIGFwcGxpY2F0aW9uIGFuZCBrZXJuZWwgdG8gd29yayB0b2dldGhlci4KKworMSkgQXBwbGljYXRpb24gZGV2ZWxvcGVyIGNvbXBpbGVzIHdpdGggLWZtcHguIFRoZSBjb21waWxlciB3aWxsIGFkZCB0aGUKKyAgIGluc3RydW1lbnRhdGlvbiBhcyB3ZWxsIGFzIHNvbWUgc2V0dXAgY29kZSBjYWxsZWQgZWFybHkgYWZ0ZXIgdGhlIGFwcAorICAgc3RhcnRzLiBOZXcgaW5zdHJ1Y3Rpb24gcHJlZml4ZXMgYXJlIG5vb3BzIGZvciBvbGQgQ1BVcy4KKzIpIFRoYXQgc2V0dXAgY29kZSBhbGxvY2F0ZXMgKHZpcnR1YWwpIHNwYWNlIGZvciB0aGUgImJvdW5kcyBkaXJlY3RvcnkiLAorICAgcG9pbnRzIHRoZSAiYm5kY2ZndSIgcmVnaXN0ZXIgdG8gdGhlIGRpcmVjdG9yeSBhbmQgbm90aWZpZXMgdGhlIGtlcm5lbAorICAgKHZpYSB0aGUgbmV3IHByY3RsKFBSX01QWF9FTkFCTEVfTUFOQUdFTUVOVCkpIHRoYXQgdGhlIGFwcCB3aWxsIGJlIHVzaW5nCisgICBNUFguCiszKSBUaGUga2VybmVsIGRldGVjdHMgdGhhdCB0aGUgQ1BVIGhhcyBNUFgsIGFsbG93cyB0aGUgbmV3IHByY3RsKCkgdG8KKyAgIHN1Y2NlZWQsIGFuZCBub3RlcyB0aGUgbG9jYXRpb24gb2YgdGhlIGJvdW5kcyBkaXJlY3RvcnkuIFVzZXJzcGFjZSBpcworICAgZXhwZWN0ZWQgdG8ga2VlcCB0aGUgYm91bmRzIGRpcmVjdG9yeSBhdCB0aGF0IGxvY2F0aW9uV2Ugbm90ZSBpdAorICAgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGVhY2ggdGltZSBiZWNhdXNlIHRoZSAneHNhdmUnIG9wZXJhdGlvbiBuZWVkZWQKKyAgIHRvIGFjY2VzcyB0aGUgYm91bmRzIGRpcmVjdG9yeSByZWdpc3RlciBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLgorNCkgSWYgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHNwaWxsIGJvdW5kcyBvdXQgb2YgdGhlIDQgcmVnaXN0ZXJzLCBpdAorICAgaXNzdWVzIGEgYm5kc3R4IGluc3RydWN0aW9uLiBTaW5jZSB0aGUgYm91bmRzIGRpcmVjdG9yeSBpcyBlbXB0eSBhdAorICAgdGhpcyBwb2ludCwgYSBib3VuZHMgZmF1bHQgKCNCUikgaXMgcmFpc2VkLCB0aGUga2VybmVsIGFsbG9jYXRlcyBhCisgICBib3VuZHMgdGFibGUgKGluIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UpIGFuZCBtYWtlcyB0aGUgcmVsZXZhbnQgZW50cnkKKyAgIGluIHRoZSBib3VuZHMgZGlyZWN0b3J5IHBvaW50IHRvIHRoZSBuZXcgdGFibGUuCis1KSBJZiB0aGUgYXBwbGljYXRpb24gdmlvbGF0ZXMgdGhlIGJvdW5kcyBzcGVjaWZpZWQgaW4gdGhlIGJvdW5kcyByZWdpc3RlcnMsCisgICBhIHNlcGFyYXRlIGtpbmQgb2YgI0JSIGlzIHJhaXNlZCB3aGljaCB3aWxsIGRlbGl2ZXIgYSBzaWduYWwgd2l0aAorICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZpb2xhdGlvbiBpbiB0aGUgJ3N0cnVjdCBzaWdpbmZvJy4KKzYpIFdoZW5ldmVyIG1lbW9yeSBpcyBmcmVlZCwgd2Uga25vdyB0aGF0IGl0IGNhbiBubyBsb25nZXIgY29udGFpbiB2YWxpZAorICAgcG9pbnRlcnMsIGFuZCB3ZSBhdHRlbXB0IHRvIGZyZWUgdGhlIGFzc29jaWF0ZWQgc3BhY2UgaW4gdGhlIGJvdW5kcworICAgdGFibGVzLiBJZiBhbiBlbnRpcmUgdGFibGUgYmVjb21lcyB1bnVzZWQsIHdlIHdpbGwgYXR0ZW1wdCB0byBmcmVlCisgICB0aGUgdGFibGUgYW5kIHJlbW92ZSB0aGUgZW50cnkgaW4gdGhlIGRpcmVjdG9yeS4KKworVG8gc3VtbWFyaXplLCB0aGVyZSBhcmUgZXNzZW50aWFsbHkgdGhyZWUgdGhpbmdzIGludGVyYWN0aW5nIGhlcmU6CisKK0dDQyB3aXRoIC1mbXB4OgorICogZW5hYmxlcyBhbm5vdGF0aW9uIG9mIGNvZGUgd2l0aCBNUFggaW5zdHJ1Y3Rpb25zIGFuZCBwcmVmaXhlcworICogaW5zZXJ0cyBjb2RlIGVhcmx5IGluIHRoZSBhcHBsaWNhdGlvbiB0byBjYWxsIGluIHRvIHRoZSAiZ2NjIHJ1bnRpbWUiCitHQ0MgTVBYIFJ1bnRpbWU6CisgKiBDaGVja3MgZm9yIGhhcmR3YXJlIE1QWCBzdXBwb3J0IGluIGNwdWlkIGxlYWYKKyAqIGFsbG9jYXRlcyB2aXJ0dWFsIHNwYWNlIGZvciB0aGUgYm91bmRzIGRpcmVjdG9yeSAobWFsbG9jKCkgZXNzZW50aWFsbHkpCisgKiBwb2ludHMgdGhlIGhhcmR3YXJlIEJORENGR1UgcmVnaXN0ZXIgYXQgdGhlIGRpcmVjdG9yeQorICogY2FsbHMgYSBuZXcgcHJjdGwoUFJfTVBYX0VOQUJMRV9NQU5BR0VNRU5UKSB0byBub3RpZnkgdGhlIGtlcm5lbCB0bworICAgc3RhcnQgbWFuYWdpbmcgdGhlIGJvdW5kcyBkaXJlY3RvcmllcworS2VybmVsIE1QWCBDb2RlOgorICogQ2hlY2tzIGZvciBoYXJkd2FyZSBNUFggc3VwcG9ydCBpbiBjcHVpZCBsZWFmCisgKiBIYW5kbGVzICNCUiBleGNlcHRpb25zIGFuZCBzZW5kcyBTSUdTRUdWIHRvIHRoZSBhcHAgd2hlbiBpdCB2aW9sYXRlcworICAgYm91bmRzLCBsaWtlIGR1cmluZyBhIGJ1ZmZlciBvdmVyZmxvdy4KKyAqIFdoZW4gYm91bmRzIGFyZSBzcGlsbGVkIGluIHRvIGFuIHVuYWxsb2NhdGVkIGJvdW5kcyB0YWJsZSwgdGhlIGtlcm5lbAorICAgbm90aWNlcyBpbiB0aGUgI0JSIGV4Y2VwdGlvbiwgYWxsb2NhdGVzIHRoZSB2aXJ0dWFsIHNwYWNlLCB0aGVuCisgICB1cGRhdGVzIHRoZSBib3VuZHMgZGlyZWN0b3J5IHRvIHBvaW50IHRvIHRoZSBuZXcgdGFibGUuIEl0IGtlZXBzCisgICBzcGVjaWFsIHRyYWNrIG9mIHRoZSBtZW1vcnkgd2l0aCBhIFZNX01QWCBmbGFnLgorICogRnJlZXMgdW51c2VkIGJvdW5kcyB0YWJsZXMgYXQgdGhlIHRpbWUgdGhhdCB0aGUgbWVtb3J5IHRoZXkgZGVzY3JpYmVkCisgICBpcyB1bm1hcHBlZC4KKworCiszLiBIb3cgZG9lcyBNUFgga2VybmVsIGNvZGUgd29yaworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSGFuZGxpbmcgI0JSIGZhdWx0cyBjYXVzZWQgYnkgTVBYCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBNUFggaXMgZW5hYmxlZCwgdGhlcmUgYXJlIDIgbmV3IHNpdHVhdGlvbnMgdGhhdCBjYW4gZ2VuZXJhdGUKKyNCUiBmYXVsdHMuCisgICogbmV3IGJvdW5kcyB0YWJsZXMgKEJUKSBuZWVkIHRvIGJlIGFsbG9jYXRlZCB0byBzYXZlIGJvdW5kcy4KKyAgKiBib3VuZHMgdmlvbGF0aW9uIGNhdXNlZCBieSBNUFggaW5zdHJ1Y3Rpb25zLgorCitXZSBob29rICNCUiBoYW5kbGVyIHRvIGhhbmRsZSB0aGVzZSB0d28gbmV3IHNpdHVhdGlvbnMuCisKK09uLWRlbWFuZCBrZXJuZWwgYWxsb2NhdGlvbiBvZiBib3VuZHMgdGFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNUFggb25seSBoYXMgNCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHN0b3JpbmcgYm91bmRzIGluZm9ybWF0aW9uLiBJZgorTVBYLWVuYWJsZWQgY29kZSBuZWVkcyBtb3JlIHRoYW4gdGhlc2UgNCByZWdpc3RlcnMsIGl0IG5lZWRzIHRvIHNwaWxsCit0aGVtIHNvbWV3aGVyZS4gSXQgaGFzIHR3byBzcGVjaWFsIGluc3RydWN0aW9ucyBmb3IgdGhpcyB3aGljaCBhbGxvdwordGhlIGJvdW5kcyB0byBiZSBtb3ZlZCBiZXR3ZWVuIHRoZSBib3VuZHMgcmVnaXN0ZXJzIGFuZCBzb21lIG5ldyAiYm91bmRzCit0YWJsZXMiLgorCisjQlIgZXhjZXB0aW9ucyBhcmUgYSBuZXcgY2xhc3Mgb2YgZXhjZXB0aW9ucyBqdXN0IGZvciBNUFguIFRoZXkgYXJlCitzaW1pbGFyIGNvbmNlcHR1YWxseSB0byBhIHBhZ2UgZmF1bHQgYW5kIHdpbGwgYmUgcmFpc2VkIGJ5IHRoZSBNUFgKK2hhcmR3YXJlIGR1cmluZyBib3RoIGJvdW5kcyB2aW9sYXRpb25zIG9yIHdoZW4gdGhlIHRhYmxlcyBhcmUgbm90CitwcmVzZW50LiBUaGUga2VybmVsIGhhbmRsZXMgdGhvc2UgI0JSIGV4Y2VwdGlvbnMgZm9yIG5vdC1wcmVzZW50IHRhYmxlcworYnkgY2FydmluZyB0aGUgc3BhY2Ugb3V0IG9mIHRoZSBub3JtYWwgcHJvY2Vzc2VzIGFkZHJlc3Mgc3BhY2UgYW5kIHRoZW4KK3BvaW50aW5nIHRoZSBib3VuZHMtZGlyZWN0b3J5IG92ZXIgdG8gaXQuCisKK1RoZSB0YWJsZXMgbmVlZCB0byBiZSBhY2Nlc3NlZCBhbmQgY29udHJvbGxlZCBieSB1c2Vyc3BhY2UgYmVjYXVzZQordGhlIGluc3RydWN0aW9ucyBmb3IgbW92aW5nIGJvdW5kcyBpbiBhbmQgb3V0IG9mIHRoZW0gYXJlIGV4dHJlbWVseQorZnJlcXVlbnQuIFRoZXkgcG90ZW50aWFsbHkgaGFwcGVuIGV2ZXJ5IHRpbWUgYSByZWdpc3RlciBwb2ludHMgdG8KK21lbW9yeS4gQW55IGRpcmVjdCBrZXJuZWwgaW52b2x2ZW1lbnQgKGxpa2UgYSBzeXNjYWxsKSB0byBhY2Nlc3MgdGhlCit0YWJsZXMgd291bGQgb2J2aW91c2x5IGRlc3Ryb3kgcGVyZm9ybWFuY2UuCisKK1doeSBub3QgZG8gdGhpcyBpbiB1c2Vyc3BhY2U/IE1QWCBkb2VzIG5vdCBzdHJpY3RseSByZXF1aXJlIGFueXRoaW5nIGluCit0aGUga2VybmVsLiBJdCBjYW4gdGhlb3JldGljYWxseSBiZSBkb25lIGNvbXBsZXRlbHkgZnJvbSB1c2Vyc3BhY2UuIEhlcmUKK2FyZSBhIGZldyB3YXlzIHRoaXMgY291bGQgYmUgZG9uZS4gV2UgZG9uJ3QgdGhpbmsgYW55IG9mIHRoZW0gYXJlIHByYWN0aWNhbAoraW4gdGhlIHJlYWwtd29ybGQsIGJ1dCBoZXJlIHRoZXkgYXJlLgorCitROiBDYW4gdmlydHVhbCBzcGFjZSBzaW1wbHkgYmUgcmVzZXJ2ZWQgZm9yIHRoZSBib3VuZHMgdGFibGVzIHNvIHRoYXQgd2UKKyAgIG5ldmVyIGhhdmUgdG8gYWxsb2NhdGUgdGhlbT8KK0E6IE1QWC1lbmFibGVkIGFwcGxpY2F0aW9uIHdpbGwgcG9zc2libHkgY3JlYXRlIGEgbG90IG9mIGJvdW5kcyB0YWJsZXMgaW4KKyAgIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSB0byBzYXZlIGJvdW5kcyBpbmZvcm1hdGlvbi4gVGhlc2UgdGFibGVzIGNhbiB0YWtlCisgICB1cCBodWdlIHN3YXRocyBvZiBtZW1vcnkgKGFzIG11Y2ggYXMgODAlIG9mIHRoZSBtZW1vcnkgb24gdGhlIHN5c3RlbSkKKyAgIGV2ZW4gaWYgd2UgY2xlYW4gdGhlbSB1cCBhZ2dyZXNzaXZlbHkuIEluIHRoZSB3b3JzdC1jYXNlIHNjZW5hcmlvLCB0aGUKKyAgIHRhYmxlcyBjYW4gYmUgNHggdGhlIHNpemUgb2YgdGhlIGRhdGEgc3RydWN0dXJlIGJlaW5nIHRyYWNrZWQuIElPVywgYQorICAgMS1wYWdlIHN0cnVjdHVyZSBjYW4gcmVxdWlyZSA0IGJvdW5kcy10YWJsZSBwYWdlcy4gQW4gWC1HQiB2aXJ0dWFsCisgICBhcmVhIG5lZWRzIDQqWCBHQiBvZiB2aXJ0dWFsIHNwYWNlLCBwbHVzIDJHQiBmb3IgdGhlIGJvdW5kcyBkaXJlY3RvcnkuCisgICBJZiB3ZSB3ZXJlIHRvIHByZWFsbG9jYXRlIHRoZW0gZm9yIHRoZSAxMjhUQiBvZiB1c2VyIHZpcnR1YWwgYWRkcmVzcworICAgc3BhY2UsIHdlIHdvdWxkIG5lZWQgdG8gcmVzZXJ2ZSA1MTJUQisyR0IsIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZQorICAgZW50aXJlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0b2RheS4gVGhpcyBtZWFucyB0aGV5IGNhbiBub3QgYmUgcmVzZXJ2ZWQKKyAgIGFoZWFkIG9mIHRpbWUuIEFsc28sIGEgc2luZ2xlIHByb2Nlc3MncyBwcmUtcG9wdWFsYXRlZCBib3VuZHMgZGlyZWN0b3J5CisgICBjb25zdW1lcyAyR0Igb2YgdmlydHVhbCAqQU5EKiBwaHlzaWNhbCBtZW1vcnkuIElPVywgaXQncyBjb21wbGV0ZWx5CisgICBpbmZlYXNpYmxlIHRvIHByZXBvcHVsYXRlIGJvdW5kcyBkaXJlY3Rvcmllcy4KKworUTogQ2FuIHdlIHByZWFsbG9jYXRlIGJvdW5kcyB0YWJsZSBzcGFjZSBhdCB0aGUgc2FtZSB0aW1lIG1lbW9yeSBpcworICAgYWxsb2NhdGVkIHdoaWNoIG1pZ2h0IGNvbnRhaW4gcG9pbnRlcnMgdGhhdCBtaWdodCBldmVudHVhbGx5IG5lZWQKKyAgIGJvdW5kcyB0YWJsZXM/CitBOiBUaGlzIHdvdWxkIHdvcmsgaWYgd2UgY291bGQgaG9vayB0aGUgc2l0ZSBvZiBlYWNoIGFuZCBldmVyeSBtZW1vcnkKKyAgIGFsbG9jYXRpb24gc3lzY2FsbC4gVGhpcyBjYW4gYmUgZG9uZSBmb3Igc21hbGwsIGNvbnN0cmFpbmVkIGFwcGxpY2F0aW9ucy4KKyAgIEJ1dCwgaXQgaXNuJ3QgcHJhY3RpY2FsIGF0IGEgbGFyZ2VyIHNjYWxlIHNpbmNlIGEgZ2l2ZW4gYXBwIGhhcyBubworICAgd2F5IG9mIGNvbnRyb2xsaW5nIGhvdyBhbGwgdGhlIHBhcnRzIG9mIHRoZSBhcHAgbWlnaHQgYWxsb2NhdGUgbWVtb3J5CisgICAodGhpbmsgbGlicmFyaWVzKS4gVGhlIGtlcm5lbCBpcyByZWFsbHkgdGhlIG9ubHkgcGxhY2UgdG8gaW50ZXJjZXB0CisgICB0aGVzZSBjYWxscy4KKworUTogQ291bGQgYSBib3VuZHMgZmF1bHQgYmUgaGFuZGVkIHRvIHVzZXJzcGFjZSBhbmQgdGhlIHRhYmxlcyBhbGxvY2F0ZWQKKyAgIHRoZXJlIGluIGEgc2lnbmFsIGhhbmRsZXIgaW50ZWFkIG9mIGluIHRoZSBrZXJuZWw/CitBOiBtbWFwKCkgaXMgbm90IG9uIHRoZSBsaXN0IG9mIHNhZmUgYXN5bmMgaGFuZGxlciBmdW5jdGlvbnMgYW5kIGV2ZW4KKyAgIGlmIG1tYXAoKSB3b3VsZCB3b3JrIGl0IHN0aWxsIHJlcXVpcmVzIGxvY2tpbmcgb3IgbmFzdHkgdHJpY2tzIHRvCisgICBrZWVwIHRyYWNrIG9mIHRoZSBhbGxvY2F0aW9uIHN0YXRlIHRoZXJlLgorCitIYXZpbmcgcnVsZWQgb3V0IGFsbCBvZiB0aGUgdXNlcnNwYWNlLW9ubHkgYXBwcm9hY2hlcyBmb3IgbWFuYWdpbmcKK2JvdW5kcyB0YWJsZXMgdGhhdCB3ZSBjb3VsZCB0aGluayBvZiwgd2UgY3JlYXRlIHRoZW0gb24gZGVtYW5kIGluCit0aGUga2VybmVsLgorCitEZWNvZGluZyBNUFggaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGEgI0JSIGlzIGdlbmVyYXRlZCBkdWUgdG8gYSBib3VuZHMgdmlvbGF0aW9uIGNhdXNlZCBieSBNUFguCitXZSBuZWVkIHRvIGRlY29kZSBNUFggaW5zdHJ1Y3Rpb25zIHRvIGdldCB2aW9sYXRpb24gYWRkcmVzcyBhbmQKK3NldCB0aGlzIGFkZHJlc3MgaW50byBleHRlbmRlZCBzdHJ1Y3Qgc2lnaW5mby4KKworVGhlIF9zaWdmYXVsdCBmZWlsZCBvZiBzdHJ1Y3Qgc2lnaW5mbyBpcyBleHRlbmRlZCBhcyBmb2xsb3c6CisKKzg3CQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCis4OAkJc3RydWN0IHsKKzg5CQkJdm9pZCBfX3VzZXIgKl9hZGRyOyAvKiBmYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICovCis5MCAjaWZkZWYgX19BUkNIX1NJX1RSQVBOTworOTEJCQlpbnQgX3RyYXBubzsJLyogVFJBUCAjIHdoaWNoIGNhdXNlZCB0aGUgc2lnbmFsICovCis5MiAjZW5kaWYKKzkzCQkJc2hvcnQgX2FkZHJfbHNiOyAvKiBMU0Igb2YgdGhlIHJlcG9ydGVkIGFkZHJlc3MgKi8KKzk0CQkJc3RydWN0IHsKKzk1CQkJCXZvaWQgX191c2VyICpfbG93ZXI7Cis5NgkJCQl2b2lkIF9fdXNlciAqX3VwcGVyOworOTcJCQl9IF9hZGRyX2JuZDsKKzk4CQl9IF9zaWdmYXVsdDsKKworVGhlICdfYWRkcicgZmllbGQgcmVmZXJzIHRvIHZpb2xhdGlvbiBhZGRyZXNzLCBhbmQgbmV3ICdfYWRkcl9hbmQnCitmaWVsZCByZWZlcnMgdG8gdGhlIHVwcGVyL2xvd2VyIGJvdW5kcyB3aGVuIGEgI0JSIGlzIGNhdXNlZC4KKworR2xpYmMgd2lsbCBiZSBhbHNvIHVwZGF0ZWQgdG8gc3VwcG9ydCB0aGlzIG5ldyBzaWdpbmZvLiBTbyB1c2VyCitjYW4gZ2V0IHZpb2xhdGlvbiBhZGRyZXNzIGFuZCBib3VuZHMgd2hlbiBib3VuZHMgdmlvbGF0aW9ucyBvY2N1ci4KKworQ2xlYW51cCB1bnVzZWQgYm91bmRzIHRhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgQk5EU1RYIGluc3RydWN0aW9uIGF0dGVtcHRzIHRvIHNhdmUgYm91bmRzIHRvIGEgYm91bmRzIGRpcmVjdG9yeQorZW50cnkgbWFya2VkIGFzIGludmFsaWQsIGEgI0JSIGlzIGdlbmVyYXRlZC4gVGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRoYXQKK25vIGJvdW5kcyB0YWJsZSBleGlzdHMgZm9yIHRoaXMgZW50cnkuIEluIHRoaXMgY2FzZSB0aGUgZmF1bHQgaGFuZGxlcgord2lsbCBhbGxvY2F0ZSBhIG5ldyBib3VuZHMgdGFibGUgb24gZGVtYW5kLgorCitTaW5jZSB0aGUga2VybmVsIGFsbG9jYXRlZCB0aG9zZSB0YWJsZXMgb24tZGVtYW5kIHdpdGhvdXQgdXNlcnNwYWNlCitrbm93bGVkZ2UsIGl0IGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlbSB3aGVuIHRoZSBhc3NvY2lhdGVkCittYXBwaW5ncyBnbyBhd2F5LgorCitIZXJlLCB0aGUgc29sdXRpb24gZm9yIHRoaXMgaXNzdWUgaXMgdG8gaG9vayBkb19tdW5tYXAoKSB0byBjaGVjaword2hldGhlciBvbmUgcHJvY2VzcyBpcyBNUFggZW5hYmxlZC4gSWYgeWVzLCB0aG9zZSBib3VuZHMgdGFibGVzIGNvdmVyZWQKK2luIHRoZSB2aXJ0dWFsIGFkZHJlc3MgcmVnaW9uIHdoaWNoIGlzIGJlaW5nIHVubWFwcGVkIHdpbGwgYmUgZnJlZWQgYWxzby4KKworQWRkaW5nIG5ldyBwcmN0bCBjb21tYW5kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUd28gbmV3IHByY3RsIGNvbW1hbmRzIGFyZSBhZGRlZCB0byBlbmFibGUgYW5kIGRpc2FibGUgTVBYIGJvdW5kcyB0YWJsZXMKK21hbmFnZW1lbnQgaW4ga2VybmVsLgorCisxNTUJI2RlZmluZSBQUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQJNDMKKzE1NgkjZGVmaW5lIFBSX01QWF9ESVNBQkxFX01BTkFHRU1FTlQJNDQKKworUnVudGltZSBsaWJyYXJ5IGluIHVzZXJzcGFjZSBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGlvbiBvZiBib3VuZHMKK2RpcmVjdG9yeS4gU28ga2VybmVsIGhhdmUgdG8gdXNlIFhTQVZFIGluc3RydWN0aW9uIHRvIGdldCB0aGUgYmFzZQorb2YgYm91bmRzIGRpcmVjdG9yeSBmcm9tIEJORENGRyByZWdpc3Rlci4KKworQnV0IFhTQVZFIGlzIGV4cGVjdGVkIHRvIGJlIHZlcnkgZXhwZW5zaXZlLiBJbiBvcmRlciB0byBkbyBwZXJmb3JtYW5jZQorb3B0aW1pemF0aW9uLCB3ZSBoYXZlIHRvIGdldCB0aGUgYmFzZSBvZiBib3VuZHMgZGlyZWN0b3J5IGFuZCBzYXZlIGl0CitpbnRvIHN0cnVjdCBtbV9zdHJ1Y3QgdG8gYmUgdXNlZCBpbiBmdXR1cmUgZHVyaW5nIFBSX01QWF9FTkFCTEVfTUFOQUdFTUVOVAorY29tbWFuZCBleGVjdXRpb24uCisKKworNC4gU3BlY2lhbCBydWxlcworPT09PT09PT09PT09PT09PQorCisxKSBJZiB1c2Vyc3BhY2UgaXMgcmVxdWVzdGluZyBoZWxwIGZyb20gdGhlIGtlcm5lbCB0byBkbyB0aGUgbWFuYWdlbWVudAorb2YgYm91bmRzIHRhYmxlcywgaXQgbWF5IG5vdCBjcmVhdGUgb3IgbW9kaWZ5IGVudHJpZXMgaW4gdGhlIGJvdW5kcyBkaXJlY3RvcnkuCisKK0NlcnRhaW5seSB1c2VycyBjYW4gYWxsb2NhdGUgYm91bmRzIHRhYmxlcyBhbmQgZm9yY2libHkgcG9pbnQgdGhlIGJvdW5kcworZGlyZWN0b3J5IGF0IHRoZW0gdGhyb3VnaCBYU0FWRSBpbnN0cnVjdGlvbiwgYW5kIHRoZW4gc2V0IHZhbGlkIGJpdAorb2YgYm91bmRzIGVudHJ5IHRvIGhhdmUgdGhpcyBlbnRyeSB2YWxpZC4gIEJ1dCwgdGhlIGtlcm5lbCB3aWxsIGRlY2xpbmUKK3RvIGFzc2lzdCBpbiBtYW5hZ2luZyB0aGVzZSB0YWJsZXMuCisKKzIpIFVzZXJzcGFjZSBtYXkgbm90IHRha2UgbXVsdGlwbGUgYm91bmRzIGRpcmVjdG9yeSBlbnRyaWVzIGFuZCBwb2ludAordGhlbSBhdCB0aGUgc2FtZSBib3VuZHMgdGFibGUuCisKK1RoaXMgaXMgYWxsb3dlZCBhcmNoaXRlY3R1cmFsbHkuICBTZWUgbW9yZSBpbmZvcm1hdGlvbiAiSW50ZWwoUikgQXJjaGl0ZWN0dXJlCitJbnN0cnVjdGlvbiBTZXQgRXh0ZW5zaW9ucyBQcm9ncmFtbWluZyBSZWZlcmVuY2UiICg5LjMuNCkuCisKK0hvd2V2ZXIsIGlmIHVzZXJzIGRpZCB0aGlzLCB0aGUga2VybmVsIG1pZ2h0IGJlIGZvb2xlZCBpbiB0byB1bm1hcGluZyBhbgoraW4tdXNlIGJvdW5kcyB0YWJsZSBzaW5jZSBpdCBkb2VzIG5vdCByZWNvZ25pemUgc2hhcmluZy4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggM2M2NDI3MS4uMGQ2NDY5YSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTg2MSw2ICs4NjEsNyBAQAogVzoJaHR0cDovL3d3dy5saW51eDRzYW0ub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWFyY2gvYXJtL21hY2gtYXQ5MS8KK0Y6CWluY2x1ZGUvc29jL2F0OTEvCiBGOglhcmNoL2FybS9ib290L2R0cy9hdDkxKi5kdHMKIEY6CWFyY2gvYXJtL2Jvb3QvZHRzL2F0OTEqLmR0c2kKIEY6CWFyY2gvYXJtL2Jvb3QvZHRzL3NhbWEqLmR0cwpAQCAtMTMwOCwzMCArMTMwOSwyMiBAQAogRjoJZHJpdmVycy8qLyovKnJvY2tjaGlwKgogRjoJc291bmQvc29jL3JvY2tjaGlwLwogCi1BUk0vU0FNU1VORyBBUk0gQVJDSElURUNUVVJFUwotTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTToJS3VramluIEtpbSA8a2dlbmUua2ltQHNhbXN1bmcuY29tPgorQVJNL1NBTVNVTkcgRVhZTk9TIEFSTSBBUkNISVRFQ1RVUkVTCitNOglLdWtqaW4gS2ltIDxrZ2VuZUBrZXJuZWwub3JnPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEw6CWxpbnV4LXNhbXN1bmctc29jQHZnZXIua2VybmVsLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1XOglodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vbGludXgvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9ib290L2R0cy9zM2MqCiBGOglhcmNoL2FybS9ib290L2R0cy9leHlub3MqCiBGOglhcmNoL2FybS9wbGF0LXNhbXN1bmcvCiBGOglhcmNoL2FybS9tYWNoLXMzYzI0Ki8KIEY6CWFyY2gvYXJtL21hY2gtczNjNjR4eC8KK0Y6CWFyY2gvYXJtL21hY2gtczVwKi8KK0Y6CWFyY2gvYXJtL21hY2gtZXh5bm9zKi8KIEY6CWRyaXZlcnMvKi8qczNjMjQxMCoKIEY6CWRyaXZlcnMvKi8qLypzM2MyNDEwKgogRjoJZHJpdmVycy9zcGkvc3BpLXMzYyoKIEY6CXNvdW5kL3NvYy9zYW1zdW5nLyoKLQotQVJNL1M1UCBFWFlOT1MgQVJNIEFSQ0hJVEVDVFVSRVMKLU06CUt1a2ppbiBLaW0gPGtnZW5lLmtpbUBzYW1zdW5nLmNvbT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1MOglsaW51eC1zYW1zdW5nLXNvY0B2Z2VyLmtlcm5lbC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJTWFpbnRhaW5lZAotRjoJYXJjaC9hcm0vbWFjaC1zNXAqLwotRjoJYXJjaC9hcm0vbWFjaC1leHlub3MqLwogTjoJZXh5bm9zCiAKIEFSTS9TQU1TVU5HIE1PQklMRSBNQUNISU5FIFNVUFBPUlQKQEAgLTEzODEsMTIgKzEzNzQsMTIgQEAKIEY6CWFyY2gvYXJtL2NvbmZpZ3MvYXBlNmV2bV9kZWZjb25maWcKIEY6CWFyY2gvYXJtL2NvbmZpZ3MvYXJtYWRpbGxvODAwZXZhX2RlZmNvbmZpZwogRjoJYXJjaC9hcm0vY29uZmlncy9ib2Nrd19kZWZjb25maWcKLUY6CWFyY2gvYXJtL2NvbmZpZ3Mva29lbHNjaF9kZWZjb25maWcKIEY6CWFyY2gvYXJtL2NvbmZpZ3Mva3ptOWdfZGVmY29uZmlnCiBGOglhcmNoL2FybS9jb25maWdzL2xhZ2VyX2RlZmNvbmZpZwogRjoJYXJjaC9hcm0vY29uZmlncy9tYWNrZXJlbF9kZWZjb25maWcKIEY6CWFyY2gvYXJtL2NvbmZpZ3MvbWFyemVuX2RlZmNvbmZpZwogRjoJYXJjaC9hcm0vY29uZmlncy9zaG1vYmlsZV9kZWZjb25maWcKK0Y6CWFyY2gvYXJtL2luY2x1ZGUvZGVidWcvcmVuZXNhcy1zY2lmLlMKIEY6CWFyY2gvYXJtL21hY2gtc2htb2JpbGUvCiBGOglkcml2ZXJzL3NoLwogCkBAIC0xNDMwLDYgKzE0MjMsNyBAQAogRjoJZHJpdmVycy91c2IvZHdjMy9kd2MzLXN0LmMKIEY6CWRyaXZlcnMvdXNiL2hvc3QvZWhjaS1zdC5jCiBGOglkcml2ZXJzL3VzYi9ob3N0L29oY2ktc3QuYworRjoJZHJpdmVycy9hdGEvYWhjaV9zdC5jCiAKIEFSTS9URUNITk9MT0dJQyBTWVNURU1TIFRTNzI1MCBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CkBAIC0xNTAzLDYgKzE0OTcsMTkgQEAKIEY6CWRyaXZlcnMvY2xrL3V4NTAwLwogRjoJaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2Nsay11eDUwMC5oCiAKK0FSTS9WRVJTQVRJTEUgRVhQUkVTUyBQTEFURk9STQorTToJTGl2aXUgRHVkYXUgPGxpdml1LmR1ZGF1QGFybS5jb20+CitNOglTdWRlZXAgSG9sbGEgPHN1ZGVlcC5ob2xsYUBhcm0uY29tPgorTToJTG9yZW56byBQaWVyYWxpc2kgPGxvcmVuem8ucGllcmFsaXNpQGFybS5jb20+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vYm9vdC9kdHMvdmV4cHJlc3MqCitGOglhcmNoL2FybS9tYWNoLXZleHByZXNzLworRjoJKi8qL3ZleHByZXNzKgorRjoJKi8qLyovdmV4cHJlc3MqCitGOglkcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLW9zYy5jCitGOglkcml2ZXJzL2Nsb2Nrc291cmNlL3ZlcnNhdGlsZS5jCisKIEFSTS9WRlAgU1VQUE9SVAogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKQEAgLTE1NDMsNiArMTU1MCw3IEBACiAKIEFSTS9aWU5RIEFSQ0hJVEVDVFVSRQogTToJTWljaGFsIFNpbWVrIDxtaWNoYWwuc2ltZWtAeGlsaW54LmNvbT4KK1I6CVPDtnJlbiBCcmlua21hbm4gPHNvcmVuLmJyaW5rbWFubkB4aWxpbnguY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93aWtpLnhpbGlueC5jb20KIFQ6CWdpdCBnaXQ6Ly9naXQueGlsaW54LmNvbS9saW51eC14bG54LmdpdApAQCAtMTgyNyw3ICsxODM1LDcgQEAKIEY6CW5ldC9heDI1LwogCiBBWjYwMDcgRFZCIERSSVZFUgotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZwogVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0CkBAIC0yMDcxLDggKzIwNzksOSBAQAogCiBCUk9BRENPTSBCQ00yODM1IEFSTSBBUkNISVRFQ1RVUkUKIE06CVN0ZXBoZW4gV2FycmVuIDxzd2FycmVuQHd3d2RvdG9yZy5vcmc+CitNOglMZWUgSm9uZXMgPGxlZUBrZXJuZWwub3JnPgogTDoJbGludXgtcnBpLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvc3dhcnJlbi9saW51eC1ycGkuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3JwaS9saW51eC1ycGkuZ2l0CiBTOglNYWludGFpbmVkCiBOOgliY20yODM1CiAKQEAgLTIwOTUsMTAgKzIxMDQsMTMgQEAKIEJST0FEQ09NIEJDTTdYWFggQVJNIEFSQ0hJVEVDVFVSRQogTToJTWFyYyBDYXJpbm8gPG1hcmMuY2VlZWVlQGdtYWlsLmNvbT4KIE06CUJyaWFuIE5vcnJpcyA8Y29tcHV0ZXJzZm9ycGVhY2VAZ21haWwuY29tPgorTToJR3JlZ29yeSBGb25nIDxncmVnb3J5LjB4ZjBAZ21haWwuY29tPgorTToJRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1iY20vKmJyY21zdGIqCiBGOglhcmNoL2FybS9ib290L2R0cy9iY203Ki5kdHMqCitGOglkcml2ZXJzL2J1cy9icmNtc3RiX2dpc2IuYwogCiBCUk9BRENPTSBURzMgR0lHQUJJVCBFVEhFUk5FVCBEUklWRVIKIE06CVByYXNoYW50IFNyZWVkaGFyYW4gPHByYXNoYW50QGJyb2FkY29tLmNvbT4KQEAgLTIxMjksNiArMjE0MSwyMCBAQAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3Njc2kvYm54MmkvCiAKK0JST0FEQ09NIENZR05VUy9JUFJPQyBBUk0gQVJDSElURUNUVVJFCitNOglSYXkgSnVpIDxyanVpQGJyb2FkY29tLmNvbT4KK006CVNjb3R0IEJyYW5kZW4gPHNicmFuZGVuQGJyb2FkY29tLmNvbT4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOgliY20ta2VybmVsLWZlZWRiYWNrLWxpc3RAYnJvYWRjb20uY29tCitUOglnaXQgZ2l0Oi8vZ2l0LmdpdGh1Yi5jb20vYnJjbS9saW51eC5naXQKK1M6CU1haW50YWluZWQKK046CWlwcm9jCitOOgljeWdudXMKK046CWJjbTkxMTMqCitOOgliY205NTgzKgorTjoJYmNtNTgzKgorTjoJYmNtMTEzKgorCiBCUk9BRENPTSBLT05BIEdQSU8gRFJJVkVSCiBNOglSYXkgSnVpIDxyanVpQGJyb2FkY29tLmNvbT4KIEw6CWJjbS1rZXJuZWwtZmVlZGJhY2stbGlzdEBicm9hZGNvbS5jb20KQEAgLTIxOTYsNyArMjIyMiw3IEBACiBGOglmcy9idHJmcy8KIAogQlRUViBWSURFTzRMSU5VWCBEUklWRVIKLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdApAQCAtMjcxNyw3ICsyNzQzLDcgQEAKIEY6CWluY2x1ZGUvbWVkaWEvY3gyMzQxeCoKIAogQ1g4OCBWSURFTzRMSU5VWCBEUklWRVIKLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdApAQCAtMjc0Miw2ICsyNzY4LDEzIEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvCiAKK0NYR0IzIElTQ1NJIERSSVZFUiAoQ1hHQjNJKQorTTogICAgICBLYXJlbiBYaWUgPGt4aWVAY2hlbHNpby5jb20+CitMOiAgICAgIGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitXOiAgICAgIGh0dHA6Ly93d3cuY2hlbHNpby5jb20KK1M6ICAgICAgU3VwcG9ydGVkCitGOiAgICAgIGRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kKKwogQ1hHQjMgSVdBUlAgUk5JQyBEUklWRVIgKElXX0NYR0IzKQogTToJU3RldmUgV2lzZSA8c3dpc2VAY2hlbHNpby5jb20+CiBMOglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZwpAQCAtMjc1Niw2ICsyNzg5LDEzIEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvCiAKK0NYR0I0IElTQ1NJIERSSVZFUiAoQ1hHQjRJKQorTTogICAgICBLYXJlbiBYaWUgPGt4aWVAY2hlbHNpby5jb20+CitMOiAgICAgIGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitXOiAgICAgIGh0dHA6Ly93d3cuY2hlbHNpby5jb20KK1M6ICAgICAgU3VwcG9ydGVkCitGOiAgICAgIGRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkKKwogQ1hHQjQgSVdBUlAgUk5JQyBEUklWRVIgKElXX0NYR0I0KQogTToJU3RldmUgV2lzZSA8c3dpc2VAY2hlbHNpby5jb20+CiBMOglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZwpAQCAtMjg0NiwxMSArMjg4NiwxMCBAQAogRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL2RtZmUuYwogCiBEQzM5MC9BTTUzQzk3NCBTQ1NJIGRyaXZlcgotTToJS3VydCBHYXJsb2ZmIDxnYXJsb2ZmQHN1c2UuZGU+Ci1XOglodHRwOi8vd3d3LmdhcmxvZmYuZGUva3VydC9saW51eC9kYzM5MC8KLU06CUd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorTToJSGFubmVzIFJlaW5lY2tlIDxoYXJlQHN1c2UuZGU+CitMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9zY3NpL3Rtc2NzaW0uKgorRjoJZHJpdmVycy9zY3NpL2FtNTNjOTc0LmMKIAogREMzOTV4IFNDU0kgZHJpdmVyCiBNOglPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm9yZz4KQEAgLTMzODYsNyArMzQyNSw3IEBACiBFREFDLUNPUkUKIE06CURvdWcgVGhvbXBzb24gPGRvdWd0aG9tcHNvbkB4bWlzc2lvbi5jb20+CiBNOglCb3Jpc2xhdiBQZXRrb3YgPGJwQGFsaWVuOC5kZT4KLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWJsdWVzbW9rZS5zb3VyY2Vmb3JnZS5uZXQKIFM6CVN1cHBvcnRlZApAQCAtMzQzNSw3ICszNDc0LDcgQEAKIEY6CWRyaXZlcnMvZWRhYy9lN3h4eF9lZGFjLmMKIAogRURBQy1HSEVTCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiBXOglibHVlc21va2Uuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCkBAIC0zNDYzLDIxICszNTAyLDIxIEBACiBGOglkcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCiAKIEVEQUMtSTU0MDAKLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWJsdWVzbW9rZS5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKIAogRURBQy1JNzMwMAotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogVzoJYmx1ZXNtb2tlLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9lZGFjL2k3MzAwX2VkYWMuYwogCiBFREFDLUk3Q09SRQotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogVzoJYmx1ZXNtb2tlLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZApAQCAtMzUyMCw3ICszNTU5LDcgQEAKIEY6CWRyaXZlcnMvZWRhYy9yODI2MDBfZWRhYy5jCiAKIEVEQUMtU0JSSURHRQotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogVzoJYmx1ZXNtb2tlLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZApAQCAtMzU4MCw3ICszNjE5LDcgQEAKIEY6CWRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9laGVhLwogCiBFTTI4WFggVklERU80TElOVVggRFJJVkVSCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKQEAgLTQ3MTQsNiArNDc1Myw3IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2lpby8KIEY6CWRyaXZlcnMvc3RhZ2luZy9paW8vCitGOglpbmNsdWRlL2xpbnV4L2lpby8KIAogSUtBTk9TL0FESSBFQUdMRSBBRFNMIFVTQiBEUklWRVIKIE06CU1hdHRoaWV1IENhc3RldCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+CkBAIC01OTQ1LDcgKzU5ODUsNyBAQAogRjoJZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8qCiAKIE1FRElBIElOUFVUIElORlJBU1RSVUNUVVJFIChWNEwvRFZCKQotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBQOglMaW51eFRWLm9yZyBQcm9qZWN0CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZwpAQCAtNTk3NCwxMCArNjAxNCwxMyBAQAogUzoJT2RkIEZpeGVzCiBGOglkcml2ZXJzL21lZGlhL3BhcnBvcnQvcG1zKgogCi1NRUdBUkFJRCBTQ1NJIERSSVZFUlMKLU06CU5lZWxhIFN5YW0gS29sbGkgPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KK01FR0FSQUlEIFNDU0kvU0FTIERSSVZFUlMKK006CUthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KK006CVN1bWl0IFNheGVuYSA8c3VtaXQuc2F4ZW5hQGF2YWdvdGVjaC5jb20+CitNOglVZGF5IExpbmdhbGEgPHVkYXkubGluZ2FsYUBhdmFnb3RlY2guY29tPgorTDoJbWVnYXJhaWRsaW51eC5wZGxAYXZhZ290ZWNoLmNvbQogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly9tZWdhcmFpZC5sc2lsb2dpYy5jb20KK1c6CWh0dHA6Ly93d3cubHNpLmNvbQogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9zY3NpL21lZ2FyYWlkLnR4dAogRjoJZHJpdmVycy9zY3NpL21lZ2FyYWlkLioKQEAgLTYyODgsNyArNjMzMSw2IEBACiBGOglkcml2ZXJzL3Njc2kvZ19OQ1I1MzgwX21taW8uYwogRjoJZHJpdmVycy9zY3NpL21hY19zY3NpLioKIEY6CWRyaXZlcnMvc2NzaS9wYXMxNi4qCi1GOglkcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKIEY6CWRyaXZlcnMvc2NzaS9zdW4zX3Njc2kuKgogRjoJZHJpdmVycy9zY3NpL3N1bjNfc2NzaV92bWUuYwogRjoJZHJpdmVycy9zY3NpL3QxMjguKgpAQCAtNjU0NCw2ICs2NTg2LDEzIEBACiBGOglEb2N1bWVudGF0aW9uL3Njc2kvTmluamFTQ1NJLnR4dAogRjoJZHJpdmVycy9zY3NpL25zcDMyKgogCitOSU9TMiBBUkNISVRFQ1RVUkUKK006CUxleSBGb29uIFRhbiA8bGZ0YW5AYWx0ZXJhLmNvbT4KK0w6CW5pb3MyLWRldkBsaXN0cy5yb2NrZXRib2FyZHMub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1Q6CWdpdCBnaXQ6Ly9naXQucm9ja2V0Ym9hcmRzLm9yZy9saW51eC1zb2NmcGdhLmdpdAorUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9uaW9zMi8KKwogTlRCIERSSVZFUgogTToJSm9uIE1hc29uIDxqZG1hc29uQGt1ZHp1LnVzPgogTToJRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CkBAIC02NTk0LDYgKzY2NDMsMjMgQEAKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtLypvbWFwKi8KIEY6CWRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCitGOglkcml2ZXJzL2lycWNoaXAvaXJxLW9tYXAtaW50Yy5jCitGOglkcml2ZXJzL21mZC8qb21hcCouYworRjoJZHJpdmVycy9tZmQvbWVuZWxhdXMuYworRjoJZHJpdmVycy9tZmQvcGFsbWFzLmMKK0Y6CWRyaXZlcnMvbWZkL3RwczY1MjE3LmMKK0Y6CWRyaXZlcnMvbWZkL3RwczY1MjE4LmMKK0Y6CWRyaXZlcnMvbWZkL3RwczY1OTEwLmMKK0Y6CWRyaXZlcnMvbWZkL3R3bC1jb3JlLltjaF0KK0Y6CWRyaXZlcnMvbWZkL3R3bDQwMzAqLmMKK0Y6CWRyaXZlcnMvbWZkL3R3bDYwMzAqLmMKK0Y6CWRyaXZlcnMvbWZkL3R3bDYwNDAqLmMKK0Y6CWRyaXZlcnMvcmVndWxhdG9yL3BhbG1hcy1yZWd1bGF0b3IqLmMKK0Y6CWRyaXZlcnMvcmVndWxhdG9yL3BiaWFzLXJlZ3VsYXRvci5jCitGOglkcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxNy1yZWd1bGF0b3IuYworRjoJZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUyMTgtcmVndWxhdG9yLmMKK0Y6CWRyaXZlcnMvcmVndWxhdG9yL3RwczY1OTEwLXJlZ3VsYXRvci5jCitGOglkcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMKIEY6CWluY2x1ZGUvbGludXgvaTJjLW9tYXAuaAogCiBPTUFQIERFVklDRSBUUkVFIFNVUFBPUlQKQEAgLTY2MDQsNiArNjY3MCw5IEBACiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9ib290L2R0cy8qb21hcCoKIEY6CWFyY2gvYXJtL2Jvb3QvZHRzLyphbTMqCitGOglhcmNoL2FybS9ib290L2R0cy8qYW00KgorRjoJYXJjaC9hcm0vYm9vdC9kdHMvKmFtNSoKK0Y6CWFyY2gvYXJtL2Jvb3QvZHRzLypkcmE3KgogCiBPTUFQIENMT0NLIEZSQU1FV09SSyBTVVBQT1JUCiBNOglQYXVsIFdhbG1zbGV5IDxwYXVsQHB3c2FuLmNvbT4KQEAgLTY2MzMsNiArNjcwMiwxNCBAQAogUzoJTWFpbnRhaW5lZAogRjoJc291bmQvc29jL29tYXAvCiAKK09NQVAgR0VORVJBTCBQVVJQT1NFIE1FTU9SWSBDT05UUk9MTEVSIFNVUFBPUlQKK006CVJvZ2VyIFF1YWRyb3MgPHJvZ2VycUB0aS5jb20+CitNOglUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorTDoJbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbWVtb3J5L29tYXAtZ3BtYy5jCitGOglhcmNoL2FybS9tYWNoLW9tYXAyLypncG1jKgorCiBPTUFQIEZSQU1FQlVGRkVSIFNVUFBPUlQKIE06CVRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+CiBMOglsaW51eC1mYmRldkB2Z2VyLmtlcm5lbC5vcmcKQEAgLTY4NTEsMTEgKzY5MjgsMTIgQEAKIEY6CWluY2x1ZGUvc2NzaS9vc2RfKgogRjoJZnMvZXhvZnMvCiAKLU9WRVJMQVlGUyBGSUxFU1lTVEVNCitPVkVSTEFZIEZJTEVTWVNURU0KIE06CU1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KLUw6CWxpbnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC11bmlvbmZzQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9tc3plcmVkaS92ZnMuZ2l0CiBTOglTdXBwb3J0ZWQKLUY6CWZzL292ZXJsYXlmcy8qCitGOglmcy9vdmVybGF5ZnMvCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy50eHQKIAogUDU0IFdJUkVMRVNTIERSSVZFUgpAQCAtNzE3OSw2ICs3MjU3LDcgQEAKIAogUElOIENPTlRST0wgU1VCU1lTVEVNCiBNOglMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CitMOglsaW51eC1ncGlvQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9waW5jdHJsLwogRjoJaW5jbHVkZS9saW51eC9waW5jdHJsLwpAQCAtNzk3NCw3ICs4MDUzLDcgQEAKIEY6CWRyaXZlcnMvbWVkaWEvaTJjL3NhYTY1ODgqCiAKIFNBQTcxMzQgVklERU80TElOVVggRFJJVkVSCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKQEAgLTg0MzIsNyArODUxMSw3IEBACiBGOglkcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy9yYWRpby11c2Itc2k0NzEzLmMKIAogU0lBTk8gRFZCIERSSVZFUgotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZwogVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0CkBAIC04NDgzLDcgKzg1NjIsNiBAQAogVEkgREFWSU5DSSBNQUNISU5FIFNVUFBPUlQKIE06CVNla2hhciBOb3JpIDxuc2VraGFyQHRpLmNvbT4KIE06CUtldmluIEhpbG1hbiA8a2hpbG1hbkBkZWVwcm9vdHN5c3RlbXMuY29tPgotTDoJZGF2aW5jaS1saW51eC1vcGVuLXNvdXJjZUBsaW51eC5kYXZpbmNpZHNwLmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBUOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9saW51eC1kYXZpbmNpL2xpbnV4LWRhdmluY2kuZ2l0CiBROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1kYXZpbmNpL2xpc3QvCiBTOglTdXBwb3J0ZWQKQEAgLTg0OTMsNyArODU3MSw2IEBACiBUSSBEQVZJTkNJIFNFUklFUyBNRURJQSBEUklWRVIKIE06CUxhZCwgUHJhYmhha2FyIDxwcmFiaGFrYXIuY3NlbmdnQGdtYWlsLmNvbT4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwotTDoJZGF2aW5jaS1saW51eC1vcGVuLXNvdXJjZUBsaW51eC5kYXZpbmNpZHNwLmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vbGludXh0di5vcmcvCiBROglodHRwOi8vcGF0Y2h3b3JrLmxpbnV4dHYub3JnL3Byb2plY3QvbGludXgtbWVkaWEvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9taGFkbGkvdjRsLWR2Yi1kYXZpbmNpX2RldmljZXMuZ2l0CkBAIC04NjQ1LDcgKzg3MjIsOSBAQAogRjoJZHJpdmVycy9sZWRzL2xlZHMtbmV0NDh4eC5jCiAKIFNPRlRMT0dJQyA2eDEwIE1QRUcgQ09ERUMKLU06CUlzbWFlbCBMdWNlbm8gPGlzbWFlbC5sdWNlbm9AY29ycC5ibHVlY2hlcnJ5Lm5ldD4KK006CUJsdWVjaGVycnkgTWFpbnRhaW5lcnMgPG1haW50YWluZXJzQGJsdWVjaGVycnlkdnIuY29tPgorTToJQW5kcmV5IFV0a2luIDxhbmRyZXkudXRraW5AY29ycC5ibHVlY2hlcnJ5Lm5ldD4KK006CUFuZHJleSBVdGtpbiA8YW5kcmV5LmtyaWVnZXIudXRraW5AZ21haWwuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwLwpAQCAtOTExOSw3ICs5MTk4LDcgQEAKIEY6CWRyaXZlcnMvbWVkaWEvaTJjL3RkYTk4NDAqCiAKIFRFQTU3NjEgVFVORVIgRFJJVkVSCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKQEAgLTkxMjcsNyArOTIwNiw3IEBACiBGOglkcml2ZXJzL21lZGlhL3R1bmVycy90ZWE1NzYxLioKIAogVEVBNTc2NyBUVU5FUiBEUklWRVIKLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdApAQCAtOTQzOSw3ICs5NTE4LDcgQEAKIEY6CW1tL3NobWVtLmMKIAogVE02MDAwIFZJREVPNExJTlVYIERSSVZFUgotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZwogVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0CkBAIC05NzAzLDExICs5NzgyLDYgQEAKIEY6CURvY3VtZW50YXRpb24vaGlkL2hpZGRldi50eHQKIEY6CWRyaXZlcnMvaGlkL3VzYmhpZC8KIAotVVNCL0lQIERSSVZFUlMKLUw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU9ycGhhbgotRjoJZHJpdmVycy9zdGFnaW5nL3VzYmlwLwotCiBVU0IgSVNQMTE2WCBEUklWRVIKIE06CU9sYXYgS29uZ2FzIDxva0BhcnRlY2Rlc2lnbi5lZT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKQEAgLTEwMjY1LDcgKzEwMzM5LDcgQEAKIEY6CWFyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrLyoKIAogWEMyMDI4LzMwMjggVFVORVIgRFJJVkVSCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZmZjMWNlMi4uZmQ4MGM2ZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMwogUEFUQ0hMRVZFTCA9IDE4CiBTVUJMRVZFTCA9IDAKLUVYVFJBVkVSU0lPTiA9IC1yYzMKK0VYVFJBVkVSU0lPTiA9CiBOQU1FID0gRGlzZWFzZWQgTmV3dAogCiAjICpET0NVTUVOVEFUSU9OKgpAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIEhPU1RDQyAgICAgICA9IGdjYwogSE9TVENYWCAgICAgID0gZysrCi1IT1NUQ0ZMQUdTICAgPSAtV2FsbCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgorSE9TVENGTEFHUyAgID0gLVdhbGwgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLXN0ZD1nbnU4OQogSE9TVENYWEZMQUdTID0gLU8yCiAKIGlmZXEgKCQoc2hlbGwgJChIT1NUQ0MpIC12IDI+JjEgfCBncmVwIC1jICJjbGFuZyB2ZXJzaW9uIiksIDEpCkBAIC00MDEsNyArNDAxLDggQEAKIEtCVUlMRF9DRkxBR1MgICA6PSAtV2FsbCAtV3VuZGVmIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVduby10cmlncmFwaHMgXAogCQkgICAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiBcCiAJCSAgIC1XZXJyb3ItaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gXAotCQkgICAtV25vLWZvcm1hdC1zZWN1cml0eQorCQkgICAtV25vLWZvcm1hdC1zZWN1cml0eSBcCisJCSAgIC1zdGQ9Z251ODkKIAogS0JVSUxEX0FGTEFHU19LRVJORUwgOj0KIEtCVUlMRF9DRkxBR1NfS0VSTkVMIDo9CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vaW8uaAppbmRleCAzMzRjZTcwLi5jYWJkNTE4IDEwMDY0NAotLS0gYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTEzLDggKzEzLDYgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotI2RlZmluZSBQQ0lfSU9CQVNFICgodm9pZCBfX2lvbWVtICopMCkKLQogZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9wcm90KHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA4OWM0YjVjLi5jODQyNGE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTMyMCwyNCArMzIwLDYgQEAKIAlzZWxlY3QgU1BBUlNFX0lSUQogCXNlbGVjdCBVU0VfT0YKIAotY29uZmlnIEFSQ0hfSU5URUdSQVRPUgotCWJvb2wgIkFSTSBMdGQuIEludGVncmF0b3IgZmFtaWx5IgotCXNlbGVjdCBBUk1fQU1CQQotCXNlbGVjdCBBUk1fUEFUQ0hfUEhZU19WSVJUIGlmIE1NVQotCXNlbGVjdCBBVVRPX1pSRUxBRERSCi0Jc2VsZWN0IENPTU1PTl9DTEsKLQlzZWxlY3QgQ09NTU9OX0NMS19WRVJTQVRJTEUKLQlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwotCXNlbGVjdCBIQVZFX1RDTQotCXNlbGVjdCBJQ1NUCi0Jc2VsZWN0IE1VTFRJX0lSUV9IQU5ETEVSCi0Jc2VsZWN0IFBMQVRfVkVSU0FUSUxFCi0Jc2VsZWN0IFNQQVJTRV9JUlEKLQlzZWxlY3QgVVNFX09GCi0Jc2VsZWN0IFZFUlNBVElMRV9GUEdBX0lSUQotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIEFSTSdzIEludGVncmF0b3IgcGxhdGZvcm0uCi0KIGNvbmZpZyBBUkNIX1JFQUxWSUVXCiAJYm9vbCAiQVJNIEx0ZC4gUmVhbFZpZXcgZmFtaWx5IgogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgpAQCAtMzUwLDYgKzMzMiw3IEBACiAJc2VsZWN0IElDU1QKIAlzZWxlY3QgTkVFRF9NQUNIX01FTU9SWV9ICiAJc2VsZWN0IFBMQVRfVkVSU0FUSUxFCisJc2VsZWN0IFBMQVRfVkVSU0FUSUxFX1NDSEVEX0NMT0NLCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEFSTSBMdGQgUmVhbFZpZXcgYm9hcmRzLgogCkBAIC0zNjUsNiArMzQ4LDcgQEAKIAlzZWxlY3QgSUNTVAogCXNlbGVjdCBQTEFUX1ZFUlNBVElMRQogCXNlbGVjdCBQTEFUX1ZFUlNBVElMRV9DTE9DSworCXNlbGVjdCBQTEFUX1ZFUlNBVElMRV9TQ0hFRF9DTE9DSwogCXNlbGVjdCBWRVJTQVRJTEVfRlBHQV9JUlEKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgQVJNIEx0ZCBWZXJzYXRpbGUgYm9hcmQuCkBAIC0zNzYsMTAgKzM2MCwxMSBAQAogCXNlbGVjdCBJUlFfRE9NQUlOCiAJc2VsZWN0IE5FRURfTUFDSF9JT19IIGlmIFBDQ0FSRAogCXNlbGVjdCBQSU5DVFJMCi0Jc2VsZWN0IFBJTkNUUkxfQVQ5MSBpZiBVU0VfT0YKKwlzZWxlY3QgUElOQ1RSTF9BVDkxCisJc2VsZWN0IFVTRV9PRgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIEF0bWVsCi0JICBBVDkxUk05MjAwIGFuZCBBVDkxU0FNOSogcHJvY2Vzc29ycy4KKwkgIEFUOTFSTTkyMDAsIEFUOTFTQU05IGFuZCBTQU1BNSBwcm9jZXNzb3JzLgogCiBjb25maWcgQVJDSF9DTFBTNzExWAogCWJvb2wgIkNpcnJ1cyBMb2dpYyBDTFBTNzExeC9FUDcyMXgvRVA3MzF4LWJhc2VkIgpAQCAtODU0LDYgKzgzOSw4IEBACiAjCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbXZlYnUvS2NvbmZpZyIKIAorc291cmNlICJhcmNoL2FybS9tYWNoLWFzbTkyNjAvS2NvbmZpZyIKKwogc291cmNlICJhcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWF4eGlhL0tjb25maWciCkBAIC0xMjU5LDkgKzEyNDYsNiBAQAogCiBtZW51ICJCdXMgc3VwcG9ydCIKIAotY29uZmlnIEFSTV9BTUJBCi0JYm9vbAotCiBjb25maWcgSVNBCiAJYm9vbAogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IDAzZGM0YzEuLmY5Mjk1YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtOTMsNiArOTMsMjcgQEAKIAlwcm9tcHQgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHBvcnQiCiAJZGVwZW5kcyBvbiBERUJVR19MTAogCisJY29uZmlnIERFQlVHX0FTTTkyNjBfVUFSVAorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyB2aWEgYXNtOTI2MCBVQVJUIgorCQlkZXBlbmRzIG9uIE1BQ0hfQVNNOTI2MAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0CisJCSAgdGhlaXIgb3V0cHV0IHRvIGFuIFVBUlQgb3IgVVNBUlQgcG9ydCBvbiBhc205MjYwIGJhc2VkCisJCSAgbWFjaGluZXMuCisKKwkJICAgIERFQlVHX1VBUlRfUEhZUyB8IERFQlVHX1VBUlRfVklSVAorCisJCSAgICAweDgwMDAwMDAwICAgICAgfCAweGYwMDAwMDAwICAgICB8IFVBUlQwCisJCSAgICAweDgwMDA0MDAwICAgICAgfCAweGYwMDA0MDAwICAgICB8IFVBUlQxCisJCSAgICAweDgwMDA4MDAwICAgICAgfCAweGYwMDA4MDAwICAgICB8IFVBUlQyCisJCSAgICAweDgwMDBjMDAwICAgICAgfCAweGYwMDBjMDAwICAgICB8IFVBUlQzCisJCSAgICAweDgwMDEwMDAwICAgICAgfCAweGYwMDEwMDAwICAgICB8IFVBUlQ0CisJCSAgICAweDgwMDE0MDAwICAgICAgfCAweGYwMDE0MDAwICAgICB8IFVBUlQ1CisJCSAgICAweDgwMDE4MDAwICAgICAgfCAweGYwMDE4MDAwICAgICB8IFVBUlQ2CisJCSAgICAweDgwMDFjMDAwICAgICAgfCAweGYwMDFjMDAwICAgICB8IFVBUlQ3CisJCSAgICAweDgwMDIwMDAwICAgICAgfCAweGYwMDIwMDAwICAgICB8IFVBUlQ4CisJCSAgICAweDgwMDI0MDAwICAgICAgfCAweGYwMDI0MDAwICAgICB8IFVBUlQ5CisKIAljb25maWcgQVQ5MV9ERUJVR19MTF9EQkdVMAogCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBvbiBybTkyMDAsIDkyNjAvOWcyMCwgOTI2MS85ZzEwIGFuZCA5cmwiCiAJCWRlcGVuZHMgb24gSEFWRV9BVDkxX0RCR1UwCkBAIC0xMTMsNyArMTM0LDcgQEAKIAljb25maWcgREVCVUdfQkNNXzUzMDFYCiAJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG9uIEJDTTUzMDFYIFVBUlQxIgogCQlkZXBlbmRzIG9uIEFSQ0hfQkNNXzUzMDFYCi0JCXNlbGVjdCBERUJVR19VQVJUX1BMMDFYCisJCXNlbGVjdCBERUJVR19VQVJUXzgyNTAKIAogCWNvbmZpZyBERUJVR19CQ01fS09OQV9VQVJUCiAJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBCQ00gS09OQSBVQVJUIgpAQCAtMTM5LDYgKzE2MCwxNyBAQAogCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAogCQkgIG9uIE1hcnZlbGwgQmVybGluIFNvQyBiYXNlZCBwbGF0Zm9ybXMuCiAKKwljb25maWcgREVCVUdfQlJDTVNUQl9VQVJUCisJCWJvb2wgIlVzZSBCUkNNU1RCIFVBUlQgZm9yIGxvdy1sZXZlbCBkZWJ1ZyIKKwkJZGVwZW5kcyBvbiBBUkNIX0JSQ01TVEIKKwkJc2VsZWN0IERFQlVHX1VBUlRfODI1MAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0CisJCSAgdGhlaXIgb3V0cHV0IHRvIHRoZSBmaXJzdCBzZXJpYWwgcG9ydCBvbiB0aGVzZSBkZXZpY2VzLgorCisJCSAgSWYgeW91IGhhdmUgYSBCcm9hZGNvbSBTVEIgY2hpcCBhbmQgd291bGQgbGlrZSBlYXJseSBwcmludAorCQkgIG1lc3NhZ2VzIHRvIGFwcGVhciBvdmVyIHRoZSBVQVJULCBzZWxlY3QgdGhpcyBvcHRpb24uCisKIAljb25maWcgREVCVUdfQ0xQUzcxMVhfVUFSVDEKIAkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFVBUlQxIgogCQlkZXBlbmRzIG9uIEFSQ0hfQ0xQUzcxMVgKQEAgLTY1Myw2ICs2ODUsNjQgQEAKIAkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKIAkJICBvbiBSb2NrY2hpcCBSSzMyeHggYmFzZWQgcGxhdGZvcm1zLgogCisJY29uZmlnIERFQlVHX1I3UzcyMTAwX1NDSUYyCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBTQ0lGMiBvbiBSN1M3MjEwMCIKKwkJZGVwZW5kcyBvbiBBUkNIX1I3UzcyMTAwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICB2aWEgU0NJRjIgb24gUmVuZXNhcyBSWi9BMUggKFI3UzcyMTAwKS4KKworCWNvbmZpZyBERUJVR19SQ0FSX0dFTjFfU0NJRjAKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFNDSUYwIG9uIFI4QTc3NzgiCisJCWRlcGVuZHMgb24gQVJDSF9SOEE3Nzc4CisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICB2aWEgU0NJRjAgb24gUmVuZXNhcyBSLUNhciBNMUEgKFI4QTc3NzgpLgorCisJY29uZmlnIERFQlVHX1JDQVJfR0VOMV9TQ0lGMgorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgU0NJRjIgb24gUjhBNzc3OSIKKwkJZGVwZW5kcyBvbiBBUkNIX1I4QTc3NzkKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIHZpYSBTQ0lGMiBvbiBSZW5lc2FzIFItQ2FyIEgxIChSOEE3Nzc5KS4KKworCWNvbmZpZyBERUJVR19SQ0FSX0dFTjJfU0NJRjAKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFNDSUYwIG9uIFI4QTc3OTAvUjhBNzc5MS9SOEE3NzkzKSIKKwkJZGVwZW5kcyBvbiBBUkNIX1I4QTc3OTAgfHwgQVJDSF9SOEE3NzkxIHx8IEFSQ0hfUjhBNzc5MworCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgdmlhIFNDSUYwIG9uIFJlbmVzYXMgUi1DYXIgSDIgKFI4QTc3OTApLCBNMi1XIChSOEE3NzkxKSwgb3IKKwkJICBNMi1OIChSOEE3NzkzKS4KKworCWNvbmZpZyBERUJVR19SQ0FSX0dFTjJfU0NJRjIKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFNDSUYyIG9uIFI4QTc3OTQiCisJCWRlcGVuZHMgb24gQVJDSF9SOEE3Nzk0CisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICB2aWEgU0NJRjIgb24gUmVuZXNhcyBSLUNhciBFMiAoUjhBNzc5NCkuCisKKwljb25maWcgREVCVUdfUk1PQklMRV9TQ0lGQTAKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFNDSUZBMCBvbiBSOEE3M0E0L1NINzM3MiIKKwkJZGVwZW5kcyBvbiBBUkNIX1I4QTczQTQgfHwgQVJDSF9TSDczNzIKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIHZpYSBTQ0lGQTAgb24gUmVuZXNhcyBSLU1vYmlsZSBBUEU2IChSOEE3M0E0KSBvciBTSC1Nb2JpbGUKKwkJICBBUDQgKFNINzM3MikuCisKKwljb25maWcgREVCVUdfUk1PQklMRV9TQ0lGQTEKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFNDSUZBMSBvbiBSOEE3NzQwIgorCQlkZXBlbmRzIG9uIEFSQ0hfUjhBNzc0MAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgdmlhIFNDSUZBMSBvbiBSZW5lc2FzIFItTW9iaWxlIEExIChSOEE3NzQwKS4KKworCWNvbmZpZyBERUJVR19STU9CSUxFX1NDSUZBNAorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgU0NJRkE0IG9uIFNINzNBMCIKKwkJZGVwZW5kcyBvbiBBUkNIX1NINzNBMAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgdmlhIFNDSUZBNCBvbiBSZW5lc2FzIFNILU1vYmlsZSBBRzUgKFNINzNBMCkuCisKIAljb25maWcgREVCVUdfUzNDX1VBUlQwCiAJCWRlcGVuZHMgb24gUExBVF9TQU1TVU5HCiAJCXNlbGVjdCBERUJVR19FWFlOT1NfVUFSVCBpZiBBUkNIX0VYWU5PUwpAQCAtNzIzLDYgKzgxMywxNCBAQAogCQkgIHRoZWlyIG91dHB1dCB0byBVQVJUIDIuIFRoZSBwb3J0IG11c3QgaGF2ZSBiZWVuIGluaXRpYWxpc2VkCiAJCSAgYnkgdGhlIGJvb3QtbG9hZGVyIGJlZm9yZSB1c2UuCiAKKwljb25maWcgREVCVUdfU0ExMTAwCisJCWRlcGVuZHMgb24gQVJDSF9TQTExMDAKKwkJYm9vbCAiVXNlIFNBMTEwMCBVQVJUcyBmb3IgbG93LWxldmVsIGRlYnVnIgorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgb24gU0EtMTF4MCBVQVJUIHBvcnRzLiBUaGUga2VybmVsIHdpbGwgY2hlY2sgZm9yIHRoZSBmaXJzdAorCQkgIGVuYWJsZWQgVUFSVCBpbiBhIHNlcXVlbmNlIDMtMS0yLgorCiAJY29uZmlnIERFQlVHX1NPQ0ZQR0FfVUFSVAogCQlkZXBlbmRzIG9uIEFSQ0hfU09DRlBHQQogCQlib29sICJVc2UgU09DRlBHQSBVQVJUIGZvciBsb3ctbGV2ZWwgZGVidWciCkBAIC03MzEsNiArODI5LDE0IEBACiAJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CiAJCSAgb24gU09DRlBHQSBiYXNlZCBwbGF0Zm9ybXMuCiAKKwljb25maWcgREVCVUdfU1VOOUlfVUFSVDAKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIHN1bjlpIFVBUlQwIgorCQlkZXBlbmRzIG9uIE1BQ0hfU1VOOUkKKwkJc2VsZWN0IERFQlVHX1VBUlRfODI1MAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgb24gQWxsd2lubmVyIEE4MCBiYXNlZCBwbGF0Zm9ybXMgb24gdGhlIFVBUlQwLgorCiAJY29uZmlnIERFQlVHX1NVTlhJX1VBUlQwCiAJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBzdW5YaSBVQVJUMCIKIAkJZGVwZW5kcyBvbiBBUkNIX1NVTlhJCkBAIC04NjYsNiArOTcyLDIyIEBACiAJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CiAJCSAgZm9yIE1lZGlhdGVrIG10NjU4OSBiYXNlZCBwbGF0Zm9ybXMgb24gVUFSVDAuCiAKKwljb25maWcgREVCVUdfTVQ4MTI3X1VBUlQwCisJCWJvb2wgIk1lZGlhdGVrIG10ODEyNyBVQVJUMCIKKwkJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLCisJCXNlbGVjdCBERUJVR19VQVJUXzgyNTAKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIGZvciBNZWRpYXRlayBtdDgxMjcgYmFzZWQgcGxhdGZvcm1zIG9uIFVBUlQwLgorCisJY29uZmlnIERFQlVHX01UODEzNV9VQVJUMworCQlib29sICJNZWRpYXRlayBtdDgxMzUgVUFSVDMiCisJCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSworCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBmb3IgTWVkaWF0ZWsgbXQ4MTM1IGJhc2VkIHBsYXRmb3JtcyBvbiBVQVJUMy4KKwogCWNvbmZpZyBERUJVR19WRVhQUkVTU19VQVJUMF9ERVRFQ1QKIAkJYm9vbCAiQXV0b2RldGVjdCBVQVJUMCBvbiBWZXJzYXRpbGUgRXhwcmVzcyBDb3J0ZXgtQSBjb3JlIHRpbGVzIgogCQlkZXBlbmRzIG9uIEFSQ0hfVkVYUFJFU1MgJiYgQ1BVX0NQMTVfTU1VCkBAIC0xMDQxLDcgKzExNjMsOSBAQAogCiBjb25maWcgREVCVUdfTExfSU5DTFVERQogCXN0cmluZworCWRlZmF1bHQgImRlYnVnL3NhMTEwMC5TIiBpZiBERUJVR19TQTExMDAKIAlkZWZhdWx0ICJkZWJ1Zy84MjUwLlMiIGlmIERFQlVHX0xMX1VBUlRfODI1MCB8fCBERUJVR19VQVJUXzgyNTAKKwlkZWZhdWx0ICJkZWJ1Zy9hc205MjYwLlMiIGlmIERFQlVHX0FTTTkyNjBfVUFSVAogCWRlZmF1bHQgImRlYnVnL2NscHM3MTF4LlMiIGlmIERFQlVHX0NMUFM3MTFYX1VBUlQxIHx8IERFQlVHX0NMUFM3MTFYX1VBUlQyCiAJZGVmYXVsdCAiZGVidWcvbWVzb24uUyIgaWYgREVCVUdfTUVTT05fVUFSVEFPCiAJZGVmYXVsdCAiZGVidWcvcGwwMXguUyIgaWYgREVCVUdfTExfVUFSVF9QTDAxWCB8fCBERUJVR19VQVJUX1BMMDFYCkBAIC0xMDYxLDYgKzExODUsMTQgQEAKIAkJCQkgREVCVUdfSU1YNlNYX1VBUlQKIAlkZWZhdWx0ICJkZWJ1Zy9tc20uUyIgaWYgREVCVUdfTVNNX1VBUlQgfHwgREVCVUdfUUNPTV9VQVJURE0KIAlkZWZhdWx0ICJkZWJ1Zy9vbWFwMnBsdXMuUyIgaWYgREVCVUdfT01BUDJQTFVTX1VBUlQKKwlkZWZhdWx0ICJkZWJ1Zy9yZW5lc2FzLXNjaWYuUyIgaWYgREVCVUdfUjdTNzIxMDBfU0NJRjIKKwlkZWZhdWx0ICJkZWJ1Zy9yZW5lc2FzLXNjaWYuUyIgaWYgREVCVUdfUkNBUl9HRU4xX1NDSUYwCisJZGVmYXVsdCAiZGVidWcvcmVuZXNhcy1zY2lmLlMiIGlmIERFQlVHX1JDQVJfR0VOMV9TQ0lGMgorCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19SQ0FSX0dFTjJfU0NJRjAKKwlkZWZhdWx0ICJkZWJ1Zy9yZW5lc2FzLXNjaWYuUyIgaWYgREVCVUdfUkNBUl9HRU4yX1NDSUYyCisJZGVmYXVsdCAiZGVidWcvcmVuZXNhcy1zY2lmLlMiIGlmIERFQlVHX1JNT0JJTEVfU0NJRkEwCisJZGVmYXVsdCAiZGVidWcvcmVuZXNhcy1zY2lmLlMiIGlmIERFQlVHX1JNT0JJTEVfU0NJRkExCisJZGVmYXVsdCAiZGVidWcvcmVuZXNhcy1zY2lmLlMiIGlmIERFQlVHX1JNT0JJTEVfU0NJRkE0CiAJZGVmYXVsdCAiZGVidWcvczNjMjR4eC5TIiBpZiBERUJVR19TM0MyNFhYX1VBUlQKIAlkZWZhdWx0ICJkZWJ1Zy9zNXB2MjEwLlMiIGlmIERFQlVHX1M1UFYyMTBfVUFSVAogCWRlZmF1bHQgImRlYnVnL3NpcmYuUyIgaWYgREVCVUdfU0lSRlBSSU1BMl9VQVJUMSB8fCBERUJVR19TSVJGTUFSQ09fVUFSVDEKQEAgLTExMDYsNiArMTIzOCw3IEBACiAJZGVmYXVsdCAweDAyNTMwYzAwIGlmIERFQlVHX0tFWVNUT05FX1VBUlQwCiAJZGVmYXVsdCAweDAyNTMxMDAwIGlmIERFQlVHX0tFWVNUT05FX1VBUlQxCiAJZGVmYXVsdCAweDAzMDEwZmUwIGlmIEFSQ0hfUlBDCisJZGVmYXVsdCAweDA3MDAwMDAwIGlmIERFQlVHX1NVTjlJX1VBUlQwCiAJZGVmYXVsdCAweDEwMDA5MDAwIGlmIERFQlVHX1JFQUxWSUVXX1NURF9QT1JUIHx8IFwKIAkJCQlERUJVR19WRVhQUkVTU19VQVJUMF9DQTkKIAlkZWZhdWx0IDB4MTAxMGMwMDAgaWYgREVCVUdfUkVBTFZJRVdfUEIxMTc2X1BPUlQKQEAgLTExMTMsNyArMTI0Niw5IEBACiAJZGVmYXVsdCAweDEwMTI2MDAwIGlmIERFQlVHX1JLM1hfVUFSVDEKIAlkZWZhdWx0IDB4MTAxZjEwMDAgaWYgQVJDSF9WRVJTQVRJTEUKIAlkZWZhdWx0IDB4MTAxZmIwMDAgaWYgREVCVUdfTk9NQURJS19VQVJUCisJZGVmYXVsdCAweDExMDAyMDAwIGlmIERFQlVHX01UODEyN19VQVJUMAogCWRlZmF1bHQgMHgxMTAwNjAwMCBpZiBERUJVR19NVDY1ODlfVUFSVDAKKwlkZWZhdWx0IDB4MTEwMDkwMDAgaWYgREVCVUdfTVQ4MTM1X1VBUlQzCiAJZGVmYXVsdCAweDE2MDAwMDAwIGlmIEFSQ0hfSU5URUdSQVRPUgogCWRlZmF1bHQgMHgxODAwMDMwMCBpZiBERUJVR19CQ01fNTMwMVgKIAlkZWZhdWx0IDB4MWMwOTAwMDAgaWYgREVCVUdfVkVYUFJFU1NfVUFSVDBfUlMxCkBAIC0xMTM1LDYgKzEyNzAsNyBAQAogCWRlZmF1bHQgMHg3ODAwMDAwMCBpZiBERUJVR19DTlMzWFhYCiAJZGVmYXVsdCAweDdjMDAwM2Y4IGlmIEZPT1RCUklER0UKIAlkZWZhdWx0IDB4NzgwMDAwMDAgaWYgREVCVUdfQ05TM1hYWAorCWRlZmF1bHQgMHg4MDAxMDAwMCBpZiBERUJVR19BU005MjYwX1VBUlQKIAlkZWZhdWx0IDB4ODAwNzAwMDAgaWYgREVCVUdfSU1YMjNfVUFSVAogCWRlZmF1bHQgMHg4MDA3NDAwMCBpZiBERUJVR19JTVgyOF9VQVJUCiAJZGVmYXVsdCAweDgwMjMwMDAwIGlmIERFQlVHX1BJQ09YQ0VMTF9VQVJUCkBAIC0xMTUyLDcgKzEyODgsMTQgQEAKIAlkZWZhdWx0IDB4ZDQwMTgwMDAgaWYgREVCVUdfTU1QX1VBUlQzCiAJZGVmYXVsdCAweGUwMDAwMDAwIGlmIEFSQ0hfU1BFQVIxM1hYCiAJZGVmYXVsdCAweGU0MDA3MDAwIGlmIERFQlVHX0hJUDA0X1VBUlQKKwlkZWZhdWx0IDB4ZTZjNDAwMDAgaWYgREVCVUdfUk1PQklMRV9TQ0lGQTAKKwlkZWZhdWx0IDB4ZTZjNTAwMDAgaWYgREVCVUdfUk1PQklMRV9TQ0lGQTEKKwlkZWZhdWx0IDB4ZTZjODAwMDAgaWYgREVCVUdfUk1PQklMRV9TQ0lGQTQKKwlkZWZhdWx0IDB4ZTZlNTgwMDAgaWYgREVCVUdfUkNBUl9HRU4yX1NDSUYyCisJZGVmYXVsdCAweGU2ZTYwMDAwIGlmIERFQlVHX1JDQVJfR0VOMl9TQ0lGMAorCWRlZmF1bHQgMHhlODAwODAwMCBpZiBERUJVR19SN1M3MjEwMF9TQ0lGMgogCWRlZmF1bHQgMHhmMDAwMGJlMCBpZiBBUkNIX0VCU0ExMTAKKwlkZWZhdWx0IDB4ZjA0MGFiMDAgaWYgREVCVUdfQlJDTVNUQl9VQVJUCiAJZGVmYXVsdCAweGYxMDEyMDAwIGlmIERFQlVHX01WRUJVX1VBUlRfQUxURVJOQVRFCiAJZGVmYXVsdCAweGYxMDEyMDAwIGlmIEFSQ0hfRE9WRSB8fCBBUkNIX01WNzhYWDAgfHwgXAogCQkJCUFSQ0hfT1JJT041WApAQCAtMTE2NCwzMiArMTMwNyw0MiBAQAogCWRlZmF1bHQgMHhmZjY5MDAwMCBpZiBERUJVR19SSzMyX1VBUlQyCiAJZGVmYXVsdCAweGZmYzAyMDAwIGlmIERFQlVHX1NPQ0ZQR0FfVUFSVAogCWRlZmF1bHQgMHhmZmQ4MjM0MCBpZiBBUkNIX0lPUDEzWFgKKwlkZWZhdWx0IDB4ZmZlNDAwMDAgaWYgREVCVUdfUkNBUl9HRU4xX1NDSUYwCisJZGVmYXVsdCAweGZmZTQyMDAwIGlmIERFQlVHX1JDQVJfR0VOMV9TQ0lGMgogCWRlZmF1bHQgMHhmZmYzNjAwMCBpZiBERUJVR19ISUdIQkFOS19VQVJUCiAJZGVmYXVsdCAweGZmZmU4NjAwIGlmIERFQlVHX1VBUlRfQkNNNjNYWAogCWRlZmF1bHQgMHhmZmZmZjcwMCBpZiBBUkNIX0lPUDMzWAogCWRlcGVuZHMgb24gREVCVUdfTExfVUFSVF84MjUwIHx8IERFQlVHX0xMX1VBUlRfUEwwMVggfHwgXAogCQlERUJVR19MTF9VQVJUX0VGTTMyIHx8IFwKIAkJREVCVUdfVUFSVF84MjUwIHx8IERFQlVHX1VBUlRfUEwwMVggfHwgREVCVUdfTUVTT05fVUFSVEFPIHx8IFwKLQkJREVCVUdfTVNNX1VBUlQgfHwgREVCVUdfUUNPTV9VQVJURE0gfHwgREVCVUdfUzNDMjRYWF9VQVJUIHx8IFwKLQkJREVCVUdfVUFSVF9CQ002M1hYCisJCURFQlVHX01TTV9VQVJUIHx8IERFQlVHX1FDT01fVUFSVERNIHx8IERFQlVHX1I3UzcyMTAwX1NDSUYyIHx8IFwKKwkJREVCVUdfUkNBUl9HRU4xX1NDSUYwIHx8IERFQlVHX1JDQVJfR0VOMV9TQ0lGMiB8fCBcCisJCURFQlVHX1JDQVJfR0VOMl9TQ0lGMCB8fCBERUJVR19SQ0FSX0dFTjJfU0NJRjIgfHwgXAorCQlERUJVR19STU9CSUxFX1NDSUZBMCB8fCBERUJVR19STU9CSUxFX1NDSUZBMSB8fCBcCisJCURFQlVHX1JNT0JJTEVfU0NJRkE0IHx8IERFQlVHX1MzQzI0WFhfVUFSVCB8fCBcCisJCURFQlVHX1VBUlRfQkNNNjNYWCB8fCBERUJVR19BU005MjYwX1VBUlQKIAogY29uZmlnIERFQlVHX1VBUlRfVklSVAogCWhleCAiVmlydHVhbCBiYXNlIGFkZHJlc3Mgb2YgZGVidWcgVUFSVCIKIAlkZWZhdWx0IDB4ZTAwMTBmZTAgaWYgQVJDSF9SUEMKIAlkZWZhdWx0IDB4ZTEwMDAwMDAgaWYgREVCVUdfTVNNX1VBUlQKIAlkZWZhdWx0IDB4ZjAwMDBiZTAgaWYgQVJDSF9FQlNBMTEwCisJZGVmYXVsdCAweGYwMDEwMDAwIGlmIERFQlVHX0FTTTkyNjBfVUFSVAogCWRlZmF1bHQgMHhmMDFmYjAwMCBpZiBERUJVR19OT01BRElLX1VBUlQKIAlkZWZhdWx0IDB4ZjAyMDEwMDAgaWYgREVCVUdfQkNNMjgzNQogCWRlZmF1bHQgMHhmMTAwMDMwMCBpZiBERUJVR19CQ01fNTMwMVgKKwlkZWZhdWx0IDB4ZjEwMDIwMDAgaWYgREVCVUdfTVQ4MTI3X1VBUlQwCiAJZGVmYXVsdCAweGYxMDA2MDAwIGlmIERFQlVHX01UNjU4OV9VQVJUMAorCWRlZmF1bHQgMHhmMTAwOTAwMCBpZiBERUJVR19NVDgxMzVfVUFSVDMKIAlkZWZhdWx0IDB4ZjExZjEwMDAgaWYgQVJDSF9WRVJTQVRJTEUKIAlkZWZhdWx0IDB4ZjE2MDAwMDAgaWYgQVJDSF9JTlRFR1JBVE9SCiAJZGVmYXVsdCAweGYxYzI4MDAwIGlmIERFQlVHX1NVTlhJX1VBUlQwCiAJZGVmYXVsdCAweGYxYzI4NDAwIGlmIERFQlVHX1NVTlhJX1VBUlQxCiAJZGVmYXVsdCAweGYxZjAyODAwIGlmIERFQlVHX1NVTlhJX1JfVUFSVAotCWRlZmF1bHQgMHhmMjEwMDAwMCBpZiBERUJVR19QWEFfVUFSVDEKKwlkZWZhdWx0IDB4ZjYyMDAwMDAgaWYgREVCVUdfUFhBX1VBUlQxCiAJZGVmYXVsdCAweGY0MDkwMDAwIGlmIEFSQ0hfTFBDMzJYWAogCWRlZmF1bHQgMHhmNDIwMDAwMCBpZiBBUkNIX0dFTUlOSQorCWRlZmF1bHQgMHhmNzAwMDAwMCBpZiBERUJVR19TVU45SV9VQVJUMAogCWRlZmF1bHQgMHhmNzAwMDAwMCBpZiBERUJVR19TM0MyNFhYX1VBUlQgJiYgKERFQlVHX1MzQ19VQVJUMCB8fCBcCiAJCQkJREVCVUdfUzNDMjQxMF9VQVJUMCkKIAlkZWZhdWx0IDB4ZjcwMDQwMDAgaWYgREVCVUdfUzNDMjRYWF9VQVJUICYmIChERUJVR19TM0NfVUFSVDEgfHwgXApAQCAtMTIwNCw2ICsxMzU3LDcgQEAKIAlkZWZhdWx0IDB4ZmIwMDIwMDAgaWYgREVCVUdfQ05TM1hYWAogCWRlZmF1bHQgMHhmYjAwOTAwMCBpZiBERUJVR19SRUFMVklFV19TVERfUE9SVAogCWRlZmF1bHQgMHhmYjEwYzAwMCBpZiBERUJVR19SRUFMVklFV19QQjExNzZfUE9SVAorCWRlZmF1bHQgMHhmYzQwYWIwMCBpZiBERUJVR19CUkNNU1RCX1VBUlQKIAlkZWZhdWx0IDB4ZmNmZTg2MDAgaWYgREVCVUdfVUFSVF9CQ002M1hYCiAJZGVmYXVsdCAweGZkMDAwMDAwIGlmIEFSQ0hfU1BFQVIzWFggfHwgQVJDSF9TUEVBUjZYWAogCWRlZmF1bHQgMHhmZDAwMDAwMCBpZiBBUkNIX1NQRUFSMTNYWApAQCAtMTI0NCwxMiArMTM5OCwxMiBAQAogCWRlcGVuZHMgb24gREVCVUdfTExfVUFSVF84MjUwIHx8IERFQlVHX0xMX1VBUlRfUEwwMVggfHwgXAogCQlERUJVR19VQVJUXzgyNTAgfHwgREVCVUdfVUFSVF9QTDAxWCB8fCBERUJVR19NRVNPTl9VQVJUQU8gfHwgXAogCQlERUJVR19NU01fVUFSVCB8fCBERUJVR19RQ09NX1VBUlRETSB8fCBERUJVR19TM0MyNFhYX1VBUlQgfHwgXAotCQlERUJVR19VQVJUX0JDTTYzWFgKKwkJREVCVUdfVUFSVF9CQ002M1hYIHx8IERFQlVHX0FTTTkyNjBfVUFSVAogCiBjb25maWcgREVCVUdfVUFSVF84MjUwX1NISUZUCiAJaW50ICJSZWdpc3RlciBvZmZzZXQgc2hpZnQgZm9yIHRoZSA4MjUwIGRlYnVnIFVBUlQiCiAJZGVwZW5kcyBvbiBERUJVR19MTF9VQVJUXzgyNTAgfHwgREVCVUdfVUFSVF84MjUwCi0JZGVmYXVsdCAwIGlmIEZPT1RCUklER0UgfHwgQVJDSF9JT1AzMlgKKwlkZWZhdWx0IDAgaWYgRk9PVEJSSURHRSB8fCBBUkNIX0lPUDMyWCB8fCBERUJVR19CQ01fNTMwMVgKIAlkZWZhdWx0IDIKIAogY29uZmlnIERFQlVHX1VBUlRfODI1MF9XT1JECkBAIC0xMjYwLDcgKzE0MTQsOCBAQAogCQlBUkNIX0tFWVNUT05FIHx8IFwKIAkJREVCVUdfREFWSU5DSV9ETXhfVUFSVDAgfHwgREVCVUdfREFWSU5DSV9EQThYWF9VQVJUMSB8fCBcCiAJCURFQlVHX0RBVklOQ0lfREE4WFhfVUFSVDIgfHwgXAotCQlERUJVR19CQ01fS09OQV9VQVJUIHx8IERFQlVHX1JLMzJfVUFSVDIKKwkJREVCVUdfQkNNX0tPTkFfVUFSVCB8fCBERUJVR19SSzMyX1VBUlQyIHx8IFwKKwkJREVCVUdfQlJDTVNUQl9VQVJUCiAKIGNvbmZpZyBERUJVR19VQVJUXzgyNTBfRkxPV19DT05UUk9MCiAJYm9vbCAiRW5hYmxlIGZsb3cgY29udHJvbCBmb3IgODI1MCBVQVJUIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCAwMzRhOTQ5Li5jMTc4NWVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMzEyLDggKzMxMiwxMiBAQAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkvZHRzIE1BQ0hJTkU9JChNQUNISU5FKSAkKGJvb3QpL2R0cy8kQAogCiBQSE9OWSArPSBkdGJzIGR0YnNfaW5zdGFsbAotZHRicyBkdGJzX2luc3RhbGw6IHByZXBhcmUgc2NyaXB0cwotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkvZHRzIE1BQ0hJTkU9JChNQUNISU5FKSAkQAorCitkdGJzOiBwcmVwYXJlIHNjcmlwdHMKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpL2R0cworCitkdGJzX2luc3RhbGw6CisJJChRKSQoTUFLRSkgJChkdGJpbnN0KT0kKGJvb3QpL2R0cwogCiAjIFdlIHVzZSBNUlBST1BFUl9GSUxFUyBhbmQgQ0xFQU5fRklMRVMgbm93CiBhcmNoY2xlYW46CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCA0MTNmZDk0Li42OGJlOTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTM5Nyw4ICszOTcsNyBAQAogCQlhZGQJc3AsIHNwLCByNgogI2VuZGlmCiAKLQkJdHN0CXI0LCAjMQotCQlibGVxCWNhY2hlX2NsZWFuX2ZsdXNoCisJCWJsCWNhY2hlX2NsZWFuX2ZsdXNoCiAKIAkJYWRyCXIwLCBCU1lNKHJlc3RhcnQpCiAJCWFkZAlyMCwgcjAsIHI2CkBAIC0xMDQ3LDYgKzEwNDYsOCBAQAogCQliCWNhbGxfY2FjaGVfZm4KIAogX19hcm12NF9tcHVfY2FjaGVfZmx1c2g6CisJCXRzdAlyNCwgIzEKKwkJbW92bmUJcGMsIGxyCiAJCW1vdglyMiwgIzEKIAkJbW92CXIzLCAjMAogCQltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAwCUAgaW52YWxpZGF0ZSBEIGNhY2hlCkBAIC0xMDY0LDYgKzEwNjUsOCBAQAogCQltb3YJcGMsIGxyCiAJCQogX19mYTUyNl9jYWNoZV9mbHVzaDoKKwkJdHN0CXI0LCAjMQorCQltb3ZuZQlwYywgbHIKIAkJbW92CXIxLCAjMAogCQltY3IJcDE1LCAwLCByMSwgYzcsIGMxNCwgMAlAIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQgY2FjaGUKIAkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAlAIGZsdXNoIEkgY2FjaGUKQEAgLTEwNzIsMTMgKzEwNzUsMTYgQEAKIAogX19hcm12Nl9tbXVfY2FjaGVfZmx1c2g6CiAJCW1vdglyMSwgIzAKLQkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTQsIDAJQCBjbGVhbitpbnZhbGlkYXRlIEQKKwkJdHN0CXI0LCAjMQorCQltY3JlcQlwMTUsIDAsIHIxLCBjNywgYzE0LCAwCUAgY2xlYW4raW52YWxpZGF0ZSBECiAJCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEkrQlRCCi0JCW1jcglwMTUsIDAsIHIxLCBjNywgYzE1LCAwCUAgY2xlYW4raW52YWxpZGF0ZSB1bmlmaWVkCisJCW1jcmVxCXAxNSwgMCwgcjEsIGM3LCBjMTUsIDAJQCBjbGVhbitpbnZhbGlkYXRlIHVuaWZpZWQKIAkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJQCBkcmFpbiBXQgogCQltb3YJcGMsIGxyCiAKIF9fYXJtdjdfbW11X2NhY2hlX2ZsdXNoOgorCQl0c3QJcjQsICMxCisJCWJuZQlpZmx1c2gKIAkJbXJjCXAxNSwgMCwgcjEwLCBjMCwgYzEsIDUJQCByZWFkIElEX01NRlIxCiAJCXRzdAlyMTAsICMweGYgPDwgMTYJCUAgaGllcmFyY2hpY2FsIGNhY2hlIChBUk12NykKIAkJbW92CXIxMCwgIzAKQEAgLTExMzksNiArMTE0NSw4IEBACiAJCW1vdglwYywgbHIKIAogX19hcm12NXRlal9tbXVfY2FjaGVfZmx1c2g6CisJCXRzdAlyNCwgIzEKKwkJbW92bmUJcGMsIGxyCiAxOgkJbXJjCXAxNSwgMCwgcjE1LCBjNywgYzE0LCAzCUAgdGVzdCxjbGVhbixpbnZhbGlkYXRlIEQgY2FjaGUKIAkJYm5lCTFiCiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJQCBmbHVzaCBJIGNhY2hlCkBAIC0xMTQ2LDYgKzExNTQsOCBAQAogCQltb3YJcGMsIGxyCiAKIF9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoOgorCQl0c3QJcjQsICMxCisJCW1vdm5lCXBjLCBscgogCQltb3YJcjIsICM2NCoxMDI0CQlAIGRlZmF1bHQ6IDMySyBkY2FjaGUgc2l6ZSAoKjIpCiAJCW1vdglyMTEsICMzMgkJQCBkZWZhdWx0OiAzMiBieXRlIGxpbmUgc2l6ZQogCQltcmMJcDE1LCAwLCByMywgYzAsIGMwLCAxCUAgcmVhZCBjYWNoZSB0eXBlCkBAIC0xMTc5LDYgKzExODksOCBAQAogCiBfX2FybXYzX21tdV9jYWNoZV9mbHVzaDoKIF9fYXJtdjNfbXB1X2NhY2hlX2ZsdXNoOgorCQl0c3QJcjQsICMxCisJCW1vdm5lCXBjLCBscgogCQltb3YJcjEsICMwCiAJCW1jcglwMTUsIDAsIHIxLCBjNywgYzAsIDAJQCBpbnZhbGlkYXRlIHdob2xlIGNhY2hlIHYzCiAJCW1vdglwYywgbHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9kdHMvTWFrZWZpbGUKaW5kZXggMzhjODljYS4uNmEzZDlhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvTWFrZWZpbGUKQEAgLTU0LDggKzU0LDE3IEBACiBkdGItJChDT05GSUdfQVJDSF9BVExBUzYpICs9IGF0bGFzNi1ldmIuZHRiCiBkdGItJChDT05GSUdfQVJDSF9BWFhJQSkgKz0gYXhtNTUxNi1hbWFyaWxsby5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX0JDTTI4MzUpICs9IGJjbTI4MzUtcnBpLWIuZHRiCi1kdGItJChDT05GSUdfQVJDSF9CQ01fNTMwMVgpICs9IGJjbTQ3MDgtbmV0Z2Vhci1yNjI1MC5kdGIKK2R0Yi0kKENPTkZJR19BUkNIX0JDTTI4MzUpICs9IGJjbTI4MzUtcnBpLWItcGx1cy5kdGIKK2R0Yi0kKENPTkZJR19BUkNIX0JDTV81MzAxWCkgKz0gXAorCWJjbTQ3MDgtYnVmZmFsby13enItMTc1MGRocC5kdGIgXAorCWJjbTQ3MDgtbmV0Z2Vhci1yNjI1MC5kdGIgXAorCWJjbTQ3MDgtbmV0Z2Vhci1yNjMwMC12Mi5kdGIgXAorCWJjbTQ3MDgxLWFzdXMtcnQtbjE4dS5kdGIgXAorCWJjbTQ3MDgxLWJ1ZmZhbG8td3pyLTYwMGRocDIuZHRiCiBkdGItJChDT05GSUdfQVJDSF9CQ01fNjNYWCkgKz0gYmNtOTYzMTM4ZHZ0LmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfQkNNX0NZR05VUykgKz0gYmNtOTExMzYwX2VudHBobi5kdGIgXAorCWJjbTkxMTM2MGsuZHRiIFwKKwliY205NTgzMDBrLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfQkNNX01PQklMRSkgKz0gYmNtMjgxNTUtYXAuZHRiIFwKIAliY20yMTY2NC1nYXJuZXQuZHRiCiBkdGItJChDT05GSUdfQVJDSF9CRVJMSU4pICs9IFwKQEAgLTY3LDcgKzc2LDkgQEAKIGR0Yi0kKENPTkZJR19BUkNIX0RBVklOQ0kpICs9IGRhODUwLWVuYnctY21jLmR0YiBcCiAJZGE4NTAtZXZtLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfRUZNMzIpICs9IGVmbTMyZ2ctZGszNzUwLmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfRVhZTk9TKSArPSBleHlub3M0MjEwLW9yaWdlbi5kdGIgXAorZHRiLSQoQ09ORklHX0FSQ0hfRVhZTk9TKSArPSBleHlub3MzMjUwLW1vbmsuZHRiIFwKKwlleHlub3MzMjUwLXJpbmF0by5kdGIgXAorCWV4eW5vczQyMTAtb3JpZ2VuLmR0YiBcCiAJZXh5bm9zNDIxMC1zbWRrdjMxMC5kdGIgXAogCWV4eW5vczQyMTAtdHJhdHMuZHRiIFwKIAlleHlub3M0MjEwLXVuaXZlcnNhbF9jMjEwLmR0YiBcCkBAIC04MSw2ICs5Miw3IEBACiAJZXh5bm9zNTI1MC1hcm5kYWxlLmR0YiBcCiAJZXh5bm9zNTI1MC1zbWRrNTI1MC5kdGIgXAogCWV4eW5vczUyNTAtc25vdy5kdGIgXAorCWV4eW5vczUyNTAtc3ByaW5nLmR0YiBcCiAJZXh5bm9zNTI2MC14eXJlZjUyNjAuZHRiIFwKIAlleHlub3M1NDEwLXNtZGs1NDEwLmR0YiBcCiAJZXh5bm9zNTQyMC1hcm5kYWxlLW9jdGEuZHRiIFwKQEAgLTEwNCw2ICsxMTYsNyBAQAogCWtpcmt3b29kLWQybmV0LmR0YiBcCiAJa2lya3dvb2QtZGItODhmNjI4MS5kdGIgXAogCWtpcmt3b29kLWRiLTg4ZjYyODIuZHRiIFwKKwlraXJrd29vZC1kaXI2NjUuZHRiIFwKIAlraXJrd29vZC1kbnMzMjAuZHRiIFwKIAlraXJrd29vZC1kbnMzMjUuZHRiIFwKIAlraXJrd29vZC1kb2Nrc3Rhci5kdGIgXApAQCAtMjQwLDYgKzI1Myw3IEBACiAJaW14NnEtc2FicmVsaXRlLmR0YiBcCiAJaW14NnEtc2FicmVzZC5kdGIgXAogCWlteDZxLXNiYzZ4LmR0YiBcCisJaW14NnEtdGJzMjkxMC5kdGIgXAogCWlteDZxLXVkb28uZHRiIFwKIAlpbXg2cS13YW5kYm9hcmQuZHRiIFwKIAlpbXg2cS13YW5kYm9hcmQtcmV2YjEuZHRiIFwKQEAgLTI1MCw2ICsyNjQsOSBAQAogCWlteDZxLXR4NnEtMTExMC5kdGIgXAogCWlteDZzbC1ldmsuZHRiIFwKIAlpbXg2c3gtc2RiLmR0YiBcCisJbHMxMDIxYS1xZHMuZHRiIFwKKwlsczEwMjFhLXR3ci5kdGIgXAorCXZmNTAwLWNvbGlicmktZXZhbC12My5kdGIgXAogCXZmNjEwLWNvbGlicmktZXZhbC12My5kdGIgXAogCXZmNjEwLWNvc21pYy5kdGIgXAogCXZmNjEwLXR3ci5kdGIKQEAgLTI3NCw3ICsyOTEsOCBAQAogCWlteDI4LW0yOGV2ay5kdGIgXAogCWlteDI4LXNwczEuZHRiIFwKIAlpbXgyOC10eDI4LmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfTk9NQURJSykgKz0gc3RlLW5vbWFkaWstczg4MTUuZHRiCitkdGItJChDT05GSUdfQVJDSF9OT01BRElLKSArPSBzdGUtbm9tYWRpay1zODgxNS5kdGIgXAorCXN0ZS1ub21hZGlrLW5oazE1LmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfTlNQSVJFKSArPSBuc3BpcmUtY3guZHRiIFwKIAluc3BpcmUtdHAuZHRiIFwKIAluc3BpcmUtY2xwLmR0YgpAQCAtMzAyLDcgKzMyMCw5IEBACiAJb21hcDMtaGEuZHRiIFwKIAlvbWFwMy1oYS1sY2QuZHRiIFwKIAlvbWFwMy1pZ2VwMDAyMC5kdGIgXAorCW9tYXAzLWlnZXAwMDIwLXJldi1mLmR0YiBcCiAJb21hcDMtaWdlcDAwMzAuZHRiIFwKKwlvbWFwMy1pZ2VwMDAzMC1yZXYtZy5kdGIgXAogCW9tYXAzLWxkcC5kdGIgXAogCW9tYXAzLWxpbGx5LWRiYjA1Ni5kdGIgXAogCW9tYXAzLW45MDAuZHRiIFwKQEAgLTMzMSw3ICszNTEsOCBAQAogCWFtMzM1eC1ldm0uZHRiIFwKIAlhbTMzNXgtZXZtc2suZHRiIFwKIAlhbTMzNXgtbmFuby5kdGIgXAotCWFtMzM1eC1wZXBwZXIuZHRiCisJYW0zMzV4LXBlcHBlci5kdGIgXAorCWFtMzM1eC1seG0uZHRiCiBkdGItJChDT05GSUdfQVJDSF9PTUFQNCkgKz0gb21hcDQtZHVvdmVyby1wYXJsb3IuZHRiIFwKIAlvbWFwNC1wYW5kYS5kdGIgXAogCW9tYXA0LXBhbmRhLWE0LmR0YiBcCkBAIC0zNDcsNiArMzY4LDcgQEAKIAlvbWFwNS1zYmMtdDU0LmR0YiBcCiAJb21hcDUtdWV2bS5kdGIKIGR0Yi0kKENPTkZJR19TT0NfRFJBN1hYKSArPSBkcmE3LWV2bS5kdGIgXAorCWFtNTd4eC1iZWFnbGUteDE1LmR0YiBcCiAJZHJhNzItZXZtLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfT1JJT041WCkgKz0gb3Jpb241eC1sYWNpZS1kMi1uZXR3b3JrLmR0YiBcCiAJb3Jpb241eC1sYWNpZS1ldGhlcm5ldC1kaXNrLW1pbmktdjIuZHRiIFwKQEAgLTM2Myw4ICszODUsMTAgQEAKIAlxY29tLW1zbTg2NjAtc3VyZi5kdGIgXAogCXFjb20tbXNtODk2MC1jZHAuZHRiIFwKIAlxY29tLW1zbTg5NzQtc29ueS14cGVyaWEtaG9uYW1pLmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfUkVBTFZJRVcpICs9IGFybS1yZWFsdmlldy1wYjExNzYuZHRiCiBkdGItJChDT05GSUdfQVJDSF9ST0NLQ0hJUCkgKz0gXAogCXJrMzA2NmEtYnFjdXJpZTIuZHRiIFwKKwlyazMwNjZhLW1hcnNib2FyZC5kdGIgXAogCXJrMzE4OC1yYWR4YXJvY2suZHRiIFwKIAlyazMyODgtZXZiLWFjdDg4NDYuZHRiIFwKIAlyazMyODgtZXZiLXJrODA4LmR0YgpAQCAtMzc2LDI3ICs0MDAsMjcgQEAKIAlzNXB2MjEwLXNtZGtjMTEwLmR0YiBcCiAJczVwdjIxMC1zbWRrdjIxMC5kdGIgXAogCXM1cHYyMTAtdG9yYnJlY2suZHRiCi1kdGItJChDT05GSUdfQVJDSF9TSE1PQklMRV9MRUdBQ1kpICs9IHI3czcyMTAwLWdlbm1haS5kdGIgXAorZHRiLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEVfTEVHQUNZKSArPSBcCisJcjhhNzNhNC1hcGU2ZXZtLmR0YiBcCisJcjhhNzNhNC1hcGU2ZXZtLXJlZmVyZW5jZS5kdGIgXAogCXI4YTc3NDAtYXJtYWRpbGxvODAwZXZhLmR0YiBcCiAJcjhhNzc3OC1ib2Nrdy5kdGIgXAogCXI4YTc3NzgtYm9ja3ctcmVmZXJlbmNlLmR0YiBcCiAJcjhhNzc3OS1tYXJ6ZW4uZHRiIFwKLQlyOGE3NzkxLWtvZWxzY2guZHRiIFwKIAlyOGE3NzkwLWxhZ2VyLmR0YiBcCisJc2g3MzcyLW1hY2tlcmVsLmR0YiBcCiAJc2g3M2EwLWt6bTlnLmR0YiBcCi0Jc2g3M2EwLWt6bTlnLXJlZmVyZW5jZS5kdGIgXAotCXI4YTczYTQtYXBlNmV2bS5kdGIgXAotCXI4YTczYTQtYXBlNmV2bS1yZWZlcmVuY2UuZHRiIFwKLQlzaDczNzItbWFja2VyZWwuZHRiCisJc2g3M2EwLWt6bTlnLXJlZmVyZW5jZS5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1NITU9CSUxFX01VTFRJKSArPSBlbWV2Mi1rem05ZC5kdGIgXAogCXI3czcyMTAwLWdlbm1haS5kdGIgXAogCXI4YTc3NDAtYXJtYWRpbGxvODAwZXZhLmR0YiBcCisJcjhhNzc3OS1tYXJ6ZW4uZHRiIFwKKwlyOGE3NzkwLWxhZ2VyLmR0YiBcCiAJcjhhNzc5MS1oZW5uaW5nZXIuZHRiIFwKIAlyOGE3NzkxLWtvZWxzY2guZHRiIFwKLQlyOGE3NzkwLWxhZ2VyLmR0YiBcCi0JcjhhNzc3OS1tYXJ6ZW4uZHRiIFwKIAlyOGE3Nzk0LWFsdC5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1NPQ0ZQR0EpICs9IHNvY2ZwZ2FfYXJyaWE1X3NvY2RrLmR0YiBcCisJc29jZnBnYV9hcnJpYTEwX3NvY2RrLmR0YiBcCiAJc29jZnBnYV9jeWNsb25lNV9zb2Nkay5kdGIgXAogCXNvY2ZwZ2FfY3ljbG9uZTVfc29ja2l0LmR0YiBcCiAJc29jZnBnYV9jeWNsb25lNV9zb2NyYXRlcy5kdGIgXApAQCAtNDA5LDYgKzQzMyw3IEBACiAJc3BlYXIzMjAtaG1pLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfU1BFQVI2WFgpKz0gc3BlYXI2MDAtZXZiLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfU1RJKSs9IHN0aWg0MDctYjIxMjAuZHRiIFwKKwlzdGloNDEwLWIyMTIwLmR0YiBcCiAJc3RpaDQxNS1iMjAwMC5kdGIgXAogCXN0aWg0MTUtYjIwMjAuZHRiIFwKIAlzdGloNDE2LWIyMDAwLmR0YiBcCkBAIC00MzUsMTUgKzQ2MCwyMCBAQAogCXN1bjZpLWEzMS1odW1taW5nYmlyZC5kdGIgXAogCXN1bjZpLWEzMS1tOS5kdGIKIGR0Yi0kKENPTkZJR19NQUNIX1NVTjdJKSArPSBcCisJc3VuN2ktYTIwLWJhbmFuYXBpLmR0YiBcCiAJc3VuN2ktYTIwLWN1YmllYm9hcmQyLmR0YiBcCiAJc3VuN2ktYTIwLWN1YmlldHJ1Y2suZHRiIFwKIAlzdW43aS1hMjAtaHVtbWluZ2JpcmQuZHRiIFwKIAlzdW43aS1hMjAtaTEyLXR2Ym94LmR0YiBcCisJc3VuN2ktYTIwLW0zLmR0YiBcCiAJc3VuN2ktYTIwLW9saW51eGluby1saW1lLmR0YiBcCisJc3VuN2ktYTIwLW9saW51eGluby1saW1lMi5kdGIgXAogCXN1bjdpLWEyMC1vbGludXhpbm8tbWljcm8uZHRiIFwKIAlzdW43aS1hMjAtcGNkdWlubzMuZHRiCiBkdGItJChDT05GSUdfTUFDSF9TVU44SSkgKz0gXAogCXN1bjhpLWEyMy1pcHBvLXE4aC12NS5kdGIKK2R0Yi0kKENPTkZJR19NQUNIX1NVTjlJKSArPSBcCisJc3VuOWktYTgwLW9wdGltdXMuZHRiCiBkdGItJChDT05GSUdfQVJDSF9URUdSQSkgKz0gdGVncmEyMC1oYXJtb255LmR0YiBcCiAJdGVncmEyMC1pcmlzLTUxMi5kdGIgXAogCXRlZ3JhMjAtbWVkY29tLXdpZGUuZHRiIFwKQEAgLTQ4OSwxMyArNTE5LDE1IEBACiAJenlucS1wYXJhbGxlbGxhLmR0YiBcCiAJenlucS16YzcwMi5kdGIgXAogCXp5bnEtemM3MDYuZHRiIFwKLQl6eW5xLXplZC5kdGIKKwl6eW5xLXplZC5kdGIgXAorCXp5bnEtenliby5kdGIKIGR0Yi0kKENPTkZJR19NQUNIX0FSTUFEQV8zNzApICs9IFwKIAlhcm1hZGEtMzcwLWRiLmR0YiBcCiAJYXJtYWRhLTM3MC1taXJhYm94LmR0YiBcCiAJYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTAyLmR0YiBcCiAJYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTA0LmR0YiBcCi0JYXJtYWRhLTM3MC1yZC5kdGIKKwlhcm1hZGEtMzcwLXJkLmR0YiBcCisJYXJtYWRhLTM3MC1zeW5vbG9neS1kczIxM2ouZHRiCiBkdGItJChDT05GSUdfTUFDSF9BUk1BREFfMzc1KSArPSBcCiAJYXJtYWRhLTM3NS1kYi5kdGIKIGR0Yi0kKENPTkZJR19NQUNIX0FSTUFEQV8zOFgpICs9IFwKQEAgLTUwOCwyNCArNTQwLDIwIEBACiAJYXJtYWRhLXhwLWxlbm92by1peDQtMzAwZC5kdGIgXAogCWFybWFkYS14cC1tYXRyaXguZHRiIFwKIAlhcm1hZGEteHAtbmV0Z2Vhci1ybjIxMjAuZHRiIFwKLQlhcm1hZGEteHAtb3BlbmJsb2Nrcy1heDMtNC5kdGIKKwlhcm1hZGEteHAtb3BlbmJsb2Nrcy1heDMtNC5kdGIgXAorCWFybWFkYS14cC1zeW5vbG9neS1kczQxNC5kdGIKIGR0Yi0kKENPTkZJR19NQUNIX0RPVkUpICs9IGRvdmUtY20tYTUxMC5kdGIgXAogCWRvdmUtY3Vib3guZHRiIFwKIAlkb3ZlLWN1Ym94LWVzLmR0YiBcCiAJZG92ZS1kMnBsdWcuZHRiIFwKIAlkb3ZlLWQzcGx1Zy5kdGIgXAogCWRvdmUtZG92ZS1kYi5kdGIKLWR0Yi0kKENPTkZJR19BUkNIX01FRElBVEVLKSArPSBtdDY1ODktYXF1YXJpczUuZHRiCitkdGItJChDT05GSUdfQVJDSF9NRURJQVRFSykgKz0gbXQ2NTg5LWFxdWFyaXM1LmR0YiBcCisJbXQ2NTkyLWV2Yi5kdGIgXAorCW10ODEyNy1tb29zZS5kdGIgXAorCW10ODEzNS1ldmJwMS5kdGIKIAotdGFyZ2V0cyArPSBkdGJzIGR0YnNfaW5zdGFsbAotdGFyZ2V0cyArPSAkKGR0Yi15KQogZW5kaWYKIAotIyAqLmR0YiB1c2VkIHRvIGJlIGdlbmVyYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGFib3ZlLiBDbGVhbiBvdXQgdGhlCi0jIG9sZCBidWlsZCByZXN1bHRzIHNvIHBlb3BsZSBkb24ndCBhY2NpZGVudGFsbHkgdXNlIHRoZW0uCi1kdGJzOiAkKGFkZHByZWZpeCAkKG9iaikvLCAkKGR0Yi15KSkKLQkkKFEpcm0gLWYgJChvYmopLy4uLyouZHRiCi0KLWNsZWFuLWZpbGVzIDo9ICouZHRiCi0KLWR0YnNfaW5zdGFsbDogJChhZGRzdWZmaXggX2R0Ymluc3RfLCAkKGR0Yi15KSkKK2Fsd2F5cwkJOj0gJChkdGIteSkKK2NsZWFuLWZpbGVzCTo9ICouZHRiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzCmluZGV4IGUyMTU2YTUuLjU0ZjExOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzCkBAIC0zMDcsNiArMzA3LDEzIEBACiAJCQkweDE0NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU0KSAvKiBybWlpMV9yZWZfY2xrLm1jYXNwMV9heHIzICovCiAJCT47CiAJfTsKKworCWRjYW4xX3BpbnNfZGVmYXVsdDogZGNhbjFfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MTY4IChQSU5fT1VUUFVUIHwgTVVYX01PREUyKSAvKiB1YXJ0MF9jdHNuLmRfY2FuMV90eCAqLworCQkJMHgxNmMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMikgLyogdWFydDBfcnRzbi5kX2NhbjFfcnggKi8KKwkJPjsKKwl9OwogfTsKIAogJnVhcnQwIHsKQEAgLTQzNyw5ICs0NDQsOSBAQAogCXN0YXR1cyA9ICJva2F5IjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmbmFuZGZsYXNoX3BpbnNfczA+OwotCXJhbmdlcyA9IDwwIDAgMHgwODAwMDAwMCAweDEwMDAwMDAwPjsJLyogQ1MwOiBOQU5EICovCisJcmFuZ2VzID0gPDAgMCAweDA4MDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMDogMTZNQiBmb3IgTkFORCAqLwogCW5hbmRAMCwwIHsKLQkJcmVnID0gPDAgMCAwPjsgLyogQ1MwLCBvZmZzZXQgMCAqLworCQlyZWcgPSA8MCAwIDQ+OyAvKiBDUzAsIG9mZnNldCAwLCBJTyBzaXplIDQgKi8KIAkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOwogCQl0aSxlbG0taWQgPSA8JmVsbT47CiAJCW5hbmQtYnVzLXdpZHRoID0gPDg+OwpAQCAtNDg5LDcgKzQ5Niw3IEBACiAJCQlyZWcgPSA8MHgwMDA2MDAwMCAweDAwMDIwMDAwPjsKIAkJfTsKIAkJcGFydGl0aW9uQDQgewotCQkJbGFiZWwgPSAiTkFORC51LWJvb3Qtc3BsIjsKKwkJCWxhYmVsID0gIk5BTkQudS1ib290LXNwbC1vcyI7CiAJCQlyZWcgPSA8MHgwMDA4MDAwMCAweDAwMDQwMDAwPjsKIAkJfTsKIAkJcGFydGl0aW9uQDUgewpAQCAtNjY0LDMgKzY3MSw5IEBACiAmYWVzIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismZGNhbjEgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7CS8qIEVuYWJsZSBvbmx5IGlmIFByb2ZpbGUgMSBpcyBzZWxlY3RlZCAqLworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZkY2FuMV9waW5zX2RlZmF1bHQ+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1pZ2VwMDAzMy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWlnZXAwMDMzLmR0c2kKaW5kZXggYTFhMGNjNS4uYzBlMTEzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWlnZXAwMDMzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWlnZXAwMDMzLmR0c2kKQEAgLTEyNiwxMCArMTI2LDEwIEBACiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8Jm5hbmRmbGFzaF9waW5zPjsKIAotCXJhbmdlcyA9IDwwIDAgMHgwODAwMDAwMCAweDEwMDAwMDAwPjsJLyogQ1MwOiBOQU5EICovCisJcmFuZ2VzID0gPDAgMCAweDA4MDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMDogMTZNQiBmb3IgTkFORCAqLwogCiAJbmFuZEAwLDAgewotCQlyZWcgPSA8MCAwIDA+OyAvKiBDUzAsIG9mZnNldCAwICovCisJCXJlZyA9IDwwIDAgND47IC8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQluYW5kLWJ1cy13aWR0aCA9IDw4PjsKIAkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOwogCQlncG1jLGRldmljZS13aWR0aCA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1seG0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWx4bS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2NmEwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1seG0uZHRzCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5vdmFUZWNoIExMQyAtIGh0dHA6Ly93d3cubm92YXRlY2h3ZWIuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworL2R0cy12MS87CisKKyNpbmNsdWRlICJhbTMzeHguZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTm92YVRlY2ggT3Jpb25MWG0iOworCWNvbXBhdGlibGUgPSAibm92YXRlY2gsYW0zMzV4LWx4bSIsICJ0aSxhbTMzeHgiOworCisJY3B1cyB7CisJCWNwdUAwIHsKKwkJCWNwdTAtc3VwcGx5ID0gPCZ2ZGQxX3JlZz47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDgwMDAwMDAwIDB4MjAwMDAwMDA+OyAvKiA1MTIgTUIgKi8KKwl9OworCisJLyogUG93ZXIgc3VwcGx5IHByb3ZpZGVzIGEgZml4ZWQgNVYgQDJBICovCisJdmJhdDogZml4ZWRyZWd1bGF0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidmJhdCI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJfTsKKworCS8qIFBvd2VyIHN1cHBseSBwcm92aWRlcyBhIGZpeGVkIDMuM1YgQDNBICovCisJdm1tY3NkX2ZpeGVkOiBmaXhlZHJlZ3VsYXRvckAxIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJ2bW1jc2RfZml4ZWQiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworCX07Cit9OworCismYW0zM3h4X3Bpbm11eCB7CisJbW1jMV9waW5zOiBwaW5tdXhfbW1jMV9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4ZjAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1tYzBfZGF0MyAqLworCQkJMHhmNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogbW1jMF9kYXQyICovCisJCQkweGY4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBtbWMwX2RhdDEgKi8KKwkJCTB4ZmMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1tYzBfZGF0MCAqLworCQkJMHgxMDAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1tYzBfY2xrICovCisJCQkweDEwNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogbW1jMF9jbWQgKi8KKwkJPjsKKwl9OworCisJaTJjMF9waW5zOiBwaW5tdXhfaTJjMF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MTg4IChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIGkyYzBfc2RhLmkyYzBfc2RhICovCisJCQkweDE4YyAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBpMmMwX3NjbC5pMmMwX3NjbCAqLworCQk+OworCX07CisKKwljcHN3X2RlZmF1bHQ6IGNwc3dfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBTbGF2ZSAxICovCisJCQkweDY0IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX2ludCAqLworCQkJMHgxMGMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTFfY3JzX2R2ICovCisJCQkweDExMCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUxKQkvKiBybWlpMV9yeGVyICovCisJCQkweDExNCAoUElOX09VVFBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTFfdHhlbiAqLworCQkJMHgxMjQgKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTEpCS8qIHJtaWkxX3RkMSAqLworCQkJMHgxMjggKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTEpCS8qIHJtaWkxX3RkMCAqLworCQkJMHgxM2MgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTFfcmQxICovCisJCQkweDE0MCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUxKQkvKiBybWlpMV9yZDAgKi8KKwkJCTB4MTQ0IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTApCS8qIHJtaWkxX3JlZmNsayAqLworCisJCQkvKiBTbGF2ZSAyICovCisJCQkweDQwIChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl90eGVuICovCisJCQkweDUwIChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl90ZDEgKi8KKwkJCTB4NTQgKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIHJtaWkyX3RkMCAqLworCQkJMHg2OCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl9yZDEgKi8KKwkJCTB4NmMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogcm1paTJfcmQwICovCisJCQkweDcwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIHJtaWkyX2Nyc19kdiAqLworCQkJMHg3NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl9yeGVyICovCisJCQkweDc4IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX2ludCAqLworCQkJMHgxMDggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTJfcmVmY2xrICovCisJCT47CisJfTsKKworCWNwc3dfc2xlZXA6IGNwc3dfc2xlZXAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogU2xhdmUgMSByZXNldCB2YWx1ZSAqLworCQkJMHg2NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMV9pbnQgKi8KKwkJCTB4MTBjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX2Nyc19kdiAqLworCQkJMHgxMTAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfcnhlciAqLworCQkJMHgxMTQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfdHhlbiAqLworCQkJMHgxMjQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfdGQxICovCisJCQkweDEyOCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMV90ZDAgKi8KKwkJCTB4MTNjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX3JkMSAqLworCQkJMHgxNDAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfcmQwICovCisJCQkweDE0NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMV9yZWZjbGsgKi8KKworCQkJLyogU2xhdmUgMiByZXNldCB2YWx1ZSovCisJCQkweDQwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX3R4ZW4gKi8KKwkJCTB4NTAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTJfdGQxICovCisJCQkweDU0IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX3RkMCAqLworCQkJMHg2OCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMl9yZDEgKi8KKwkJCTB4NmMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTJfcmQwICovCisJCQkweDcwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX2Nyc19kdiAqLworCQkJMHg3NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMl9yeGVyICovCisJCQkweDc4IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX2ludCAqLworCQkJMHgxMDggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTJfcmVmY2xrICovCisJCT47CisJfTsKKworCWRhdmluY2lfbWRpb19kZWZhdWx0OiBkYXZpbmNpX21kaW9fZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBNRElPICovCisJCQkweDE0OCAoUElOX0lOUFVUX1BVTExVUCB8IFNMRVdDVFJMX0ZBU1QgfCBNVVhfTU9ERTApCS8qIG1kaW9fZGF0YS5tZGlvX2RhdGEgKi8KKwkJCTB4MTRjIChQSU5fT1VUUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJCQkvKiBtZGlvX2Nsay5tZGlvX2NsayAqLworCQk+OworCX07CisKKwlkYXZpbmNpX21kaW9fc2xlZXA6IGRhdmluY2lfbWRpb19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBNRElPIHJlc2V0IHZhbHVlICovCisJCQkweDE0OCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQorCQkJMHgxNGMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykKKwkJPjsKKwl9OworCisJZW1tY19waW5zOiBwaW5tdXhfZW1tY19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4ODAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTIpIC8qIGdwbWNfY3NuMS5tbWMxX2NsayAqLworCQkJMHg4NCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMikgLyogZ3BtY19jc24yLm1tYzFfY21kICovCisJCQkweDAwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2FkMC5tbWMxX2RhdDAgKi8KKwkJCTB4MDQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYWQxLm1tYzFfZGF0MSAqLworCQkJMHgwOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hZDIubW1jMV9kYXQyICovCisJCQkweDBjIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2FkMy5tbWMxX2RhdDMgKi8KKwkJCTB4MTAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYWQ0Lm1tYzFfZGF0NCAqLworCQkJMHgxNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hZDUubW1jMV9kYXQ1ICovCisJCQkweDE4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2FkNi5tbWMxX2RhdDYgKi8KKwkJCTB4MWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYWQ3Lm1tYzFfZGF0NyAqLworCQk+OworCX07CisKKwl1YXJ0MF9waW5zOiBwaW5tdXhfdWFydDBfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDE3MCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogdWFydDBfcnhkLnVhcnQwX3J4ZCAqLworCQkJMHgxNzQgKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTApCS8qIHVhcnQwX3R4ZC51YXJ0MF90eGQgKi8KKwkJPjsKKwl9OworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmMwX3BpbnM+OworCisJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJc2VyaWFsX2NvbmZpZzE6IHNlcmlhbF9jb25maWcxQDIwIHsKKwkJY29tcGF0aWJsZSA9ICJueHAscGNhOTUzOSI7CisJCXJlZyA9IDwweDIwPjsKKwl9OworCisJc2VyaWFsX2NvbmZpZzI6IHNlcmlhbF9jb25maWcyQDIxIHsKKwkJY29tcGF0aWJsZSA9ICJueHAscGNhOTUzOSI7CisJCXJlZyA9IDwweDIxPjsKKwl9OworCisJdHBzOiB0cHNAMmQgeworCQljb21wYXRpYmxlID0gInRpLHRwczY1OTEwIjsKKwkJcmVnID0gPDB4MmQ+OworCX07Cit9OworCisvaW5jbHVkZS8gInRwczY1OTEwLmR0c2kiCisKKyZ0cHMgeworCXZjYzEtc3VwcGx5ID0gPCZ2YmF0PjsKKwl2Y2MyLXN1cHBseSA9IDwmdmJhdD47CisJdmNjMy1zdXBwbHkgPSA8JnZiYXQ+OworCXZjYzQtc3VwcGx5ID0gPCZ2YmF0PjsKKwl2Y2M1LXN1cHBseSA9IDwmdmJhdD47CisJdmNjNi1zdXBwbHkgPSA8JnZiYXQ+OworCXZjYzctc3VwcGx5ID0gPCZ2YmF0PjsKKwl2Y2Npby1zdXBwbHkgPSA8JnZiYXQ+OworCisJcmVndWxhdG9ycyB7CisJCS8qIHZydGMgLSB1bnVzZWQgKi8KKworCQl2aW9fcmVnOiByZWd1bGF0b3JAMSB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2aW9fMXY1LGRkciI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZkZDFfcmVnOiByZWd1bGF0b3JAMiB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGQxLG1wdSI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw2MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCX07CisKKwkJdmRkMl9yZWc6IHJlZ3VsYXRvckAzIHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZkZDJfMXYxLGNvcmUiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQkvKiB2ZGQzIC0gdW51c2VkICovCisKKwkJLyogdmRpZzEgLSB1bnVzZWQgKi8KKworCQl2ZGlnMl9yZWc6IHJlZ3VsYXRvckA2IHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZkaWcyXzF2OCx2ZGRzX3BsbCI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCS8qIHZwbGwgLSB1bnVzZWQgKi8KKworCQl2ZGFjX3JlZzogcmVndWxhdG9yQDggeworCQkJcmVndWxhdG9yLW5hbWUgPSAidmRhY18xdjgsdmRkcyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZhdXgxX3JlZzogcmVndWxhdG9yQDkgeworCQkJcmVndWxhdG9yLW5hbWUgPSAidmF1eDFfMXY4LHVzYiI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZhdXgyX3JlZzogcmVndWxhdG9yQDEwIHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZhdXgyXzN2MyxpbyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZhdXgzM19yZWc6IHJlZ3VsYXRvckAxMSB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2YXV4MzNfM3YzLHVzYiI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZtbWNfcmVnOiByZWd1bGF0b3JAMTIgeworCQkJcmVndWxhdG9yLW5hbWUgPSAidm1tY18zdjMsaW8iOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKwl9OworfTsKKworJnNoYW0geworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZhZXMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQwX3BpbnM+OworCisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYiB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYl9jdHJsX21vZCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYjBfcGh5IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiMV9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2IwIHsKKwlzdGF0dXMgPSAib2theSI7CisJZHJfbW9kZSA9ICJob3N0IjsKK307CisKKyZ1c2IxIHsKKwlzdGF0dXMgPSAib2theSI7CisJZHJfbW9kZSA9ICJob3N0IjsKK307CisKKyZjcHBpNDFkbWEgIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismY3Bzd19lbWFjMCB7CisJcGh5X2lkID0gPCZkYXZpbmNpX21kaW8+LCA8NT47CisJcGh5LW1vZGUgPSAicm1paSI7CisJZHVhbF9lbWFjX3Jlc192bGFuID0gPDI+OworfTsKKworJmNwc3dfZW1hYzEgeworCXBoeV9pZCA9IDwmZGF2aW5jaV9tZGlvPiwgPDQ+OworCXBoeS1tb2RlID0gInJtaWkiOworCWR1YWxfZW1hY19yZXNfdmxhbiA9IDwzPjsKK307CisKKyZtYWMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZjcHN3X2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmY3Bzd19zbGVlcD47CisJZHVhbF9lbWFjID0gPDE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZkYXZpbmNpX21kaW8geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZkYXZpbmNpX21kaW9fZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZkYXZpbmNpX21kaW9fc2xlZXA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtbWMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jMV9waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmdm1tY3NkX2ZpeGVkPjsKKwlidXMtd2lkdGggPSA8ND47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZlbW1jX3BpbnM+OworCXZtbWMtc3VwcGx5ID0gPCZ2bW1jc2RfZml4ZWQ+OworCWJ1cy13aWR0aCA9IDw4PjsKKwl0aSxub24tcmVtb3ZhYmxlOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zM3h4LmR0c2kKaW5kZXggODMxODEwNS4uYmVmZTcxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zM3h4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zM3h4LmR0c2kKQEAgLTgzLDYgKzgzLDExIEBACiAJCX07CiAJfTsKIAorCWFtMzN4eF9jb250cm9sX21vZHVsZTogY29udHJvbF9tb2R1bGVANGEwMDIwMDAgeworCQljb21wYXRpYmxlID0gInN5c2NvbiI7CisJCXJlZyA9IDwweDQ0ZTEwMDAwIDB4N2ZjPjsKKwl9OworCiAJYW0zM3h4X3Bpbm11eDogcGlubXV4QDQ0ZTEwODAwIHsKIAkJY29tcGF0aWJsZSA9ICJwaW5jdHJsLXNpbmdsZSI7CiAJCXJlZyA9IDwweDQ0ZTEwODAwIDB4MDIzOD47CkBAIC0yMDQsNiArMjA5LDggQEAKIAkJCXJlZyA9IDwweDQ0ZTA5MDAwIDB4MjAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDcyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZlZG1hIDI2PiwgPCZlZG1hIDI3PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDE6IHNlcmlhbEA0ODAyMjAwMCB7CkBAIC0yMTMsNiArMjIwLDggQEAKIAkJCXJlZyA9IDwweDQ4MDIyMDAwIDB4MjAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDczPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZlZG1hIDI4PiwgPCZlZG1hIDI5PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDI6IHNlcmlhbEA0ODAyNDAwMCB7CkBAIC0yMjIsNiArMjMxLDggQEAKIAkJCXJlZyA9IDwweDQ4MDI0MDAwIDB4MjAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDc0PjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZlZG1hIDMwPiwgPCZlZG1hIDMxPjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDM6IHNlcmlhbEA0ODFhNjAwMCB7CkBAIC0zMzMsMjAgKzM0NCwyNCBAQAogCQkJaW50ZXJydXB0cyA9IDw5MT47CiAJCX07CiAKLQkJZGNhbjA6IGRfY2FuQDQ4MWNjMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiYm9zY2gsZF9jYW4iOworCQlkY2FuMDogY2FuQDQ4MWNjMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksYW0zMzUyLWRfY2FuIjsKIAkJCXRpLGh3bW9kcyA9ICJkX2NhbjAiOwotCQkJcmVnID0gPDB4NDgxY2MwMDAgMHgyMDAwCi0JCQkJMHg0NGUxMDY0NCAweDQ+OworCQkJcmVnID0gPDB4NDgxY2MwMDAgMHgyMDAwPjsKKwkJCWNsb2NrcyA9IDwmZGNhbjBfZmNrPjsKKwkJCWNsb2NrLW5hbWVzID0gImZjayI7CisJCQlzeXNjb24tcmFtaW5pdCA9IDwmYW0zM3h4X2NvbnRyb2xfbW9kdWxlIDB4NjQ0IDA+OwogCQkJaW50ZXJydXB0cyA9IDw1Mj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCi0JCWRjYW4xOiBkX2NhbkA0ODFkMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImJvc2NoLGRfY2FuIjsKKwkJZGNhbjE6IGNhbkA0ODFkMDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGFtMzM1Mi1kX2NhbiI7CiAJCQl0aSxod21vZHMgPSAiZF9jYW4xIjsKLQkJCXJlZyA9IDwweDQ4MWQwMDAwIDB4MjAwMAotCQkJCTB4NDRlMTA2NDQgMHg0PjsKKwkJCXJlZyA9IDwweDQ4MWQwMDAwIDB4MjAwMD47CisJCQljbG9ja3MgPSA8JmRjYW4xX2Zjaz47CisJCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkJc3lzY29uLXJhbWluaXQgPSA8JmFtMzN4eF9jb250cm9sX21vZHVsZSAweDY0NCAxPjsKIAkJCWludGVycnVwdHMgPSA8NTU+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTM1Niw2ICszNzEsNyBAQAogCQkJcmVnID0gPDB4NDgwQzgwMDAgMHgyMDA+OwogCQkJaW50ZXJydXB0cyA9IDw3Nz47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8OD47CiAJCQltYm94X3drdXBtMzogd2t1cF9tMyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTQzNzIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3Mi5kdHNpCmluZGV4IDQ2NjYwZmYuLmQ0MmQ3ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3Mi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3Mi5kdHNpCkBAIC01Nyw2ICs1NywxMSBAQAogCQljYWNoZS1sZXZlbCA9IDwyPjsKIAl9OwogCisJYW00M3h4X2NvbnRyb2xfbW9kdWxlOiBjb250cm9sX21vZHVsZUA0YTAwMjAwMCB7CisJCWNvbXBhdGlibGUgPSAic3lzY29uIjsKKwkJcmVnID0gPDB4NDRlMTAwMDAgMHg3ZjQ+OworCX07CisKIAlhbTQzeHhfcGlubXV4OiBwaW5tdXhANDRlMTA4MDAgewogCQljb21wYXRpYmxlID0gInRpLGFtNDM3LXBhZGNvbmYiLCAicGluY3RybC1zaW5nbGUiOwogCQlyZWcgPSA8MHg0NGUxMDgwMCAweDMxYz47CkBAIC0xNjgsNiArMTczLDcgQEAKIAkJCXJlZyA9IDwweDQ4MEM4MDAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA3NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDw4PjsKIAkJCW1ib3hfd2t1cG0zOiB3a3VwX20zIHsKQEAgLTY2Nyw2ICs2NzMsMjYgQEAKIAkJCX07CiAJCX07CiAKKwkJdHNjYWRjOiB0c2NhZGNANDRlMGQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTMzNTktdHNjYWRjIjsKKwkJCXJlZyA9IDwweDQ0ZTBkMDAwIDB4MTAwMD47CisJCQl0aSxod21vZHMgPSAiYWRjX3RzYyI7CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmFkY190c2NfZmNrPjsKKwkJCWNsb2NrLW5hbWVzID0gImZjayI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQl0c2MgeworCQkJCWNvbXBhdGlibGUgPSAidGksYW0zMzU5LXRzYyI7CisJCQl9OworCisJCQlhZGMgeworCQkJCSNpby1jaGFubmVsLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAidGksYW0zMzU5LWFkYyI7CisJCQl9OworCisJCX07CisKIAkJc2hhbTogc2hhbUA1MzEwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA1LXNoYW0iOwogCQkJdGksaHdtb2RzID0gInNoYW0iOwpAQCAtODk2LDYgKzkyMiwyOCBAQAogCQkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOwogCQkJcmVnID0gPDB4NDAzMDAwMDAgMHg0MDAwMD47IC8qIDI1NmsgKi8KIAkJfTsKKworCQlkY2FuMDogY2FuQDQ4MWNjMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksYW00MzcyLWRfY2FuIiwgInRpLGFtMzM1Mi1kX2NhbiI7CisJCQl0aSxod21vZHMgPSAiZF9jYW4wIjsKKwkJCWNsb2NrcyA9IDwmZGNhbjBfZmNrPjsKKwkJCWNsb2NrLW5hbWVzID0gImZjayI7CisJCQlyZWcgPSA8MHg0ODFjYzAwMCAweDIwMDA+OworCQkJc3lzY29uLXJhbWluaXQgPSA8JmFtNDN4eF9jb250cm9sX21vZHVsZSAweDY0NCAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZGNhbjE6IGNhbkA0ODFkMDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGFtNDM3Mi1kX2NhbiIsICJ0aSxhbTMzNTItZF9jYW4iOworCQkJdGksaHdtb2RzID0gImRfY2FuMSI7CisJCQljbG9ja3MgPSA8JmRjYW4xX2Zjaz47CisJCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkJcmVnID0gPDB4NDgxZDAwMDAgMHgyMDAwPjsKKwkJCXN5c2Nvbi1yYW1pbml0ID0gPCZhbTQzeHhfY29udHJvbF9tb2R1bGUgMHg2NDQgMT47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTQzN3gtZ3AtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3eC1ncC1ldm0uZHRzCmluZGV4IGU3YWM0N2YuLjdlYWFlNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3eC1ncC1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3eC1ncC1ldm0uZHRzCkBAIC0yNTQsNiArMjU0LDIwIEBACiAJCQkweDIzOCAoUElOX09VVFBVVF9QVUxMVVAgfCBNVVhfTU9ERTcpCiAJCT47CiAJfTsKKworCWRjYW4wX2RlZmF1bHQ6IGRjYW4wX2RlZmF1bHRfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDE3OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMikJCS8qIHVhcnQxX2N0c24uZF9jYW4wX3R4ICovCisJCQkweDE3YyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMikJLyogdWFydDFfcnRzbi5kX2NhbjBfcnggKi8KKwkJPjsKKwl9OworCisJZGNhbjFfZGVmYXVsdDogZGNhbjFfZGVmYXVsdF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MTgwIChQSU5fT1VUUFVUIHwgTVVYX01PREUyKQkJLyogdWFydDFfcnhkLmRfY2FuMV90eCAqLworCQkJMHgxODQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTIpCS8qIHVhcnQxX3R4ZC5kX2NhbjFfcnggKi8KKwkJPjsKKwl9OwogfTsKIAogJmkyYzAgewpAQCAtMjkxLDggKzMwNSw4IEBACiAJCWRjZGMzOiByZWd1bGF0b3ItZGNkYzMgewogCQkJY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTIxOC1kY2RjMyI7CiAJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGNkYzMiOwotCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTM1MDAwMD47Ci0JCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CiAJCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCX07CkBAIC0zNDMsNiArMzU3LDE0IEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnRzY2FkYyB7CisJc3RhdHVzID0gIm9rYXkiOworCisJYWRjIHsKKwkJdGksYWRjLWNoYW5uZWxzID0gPDAgMSAyIDMgNCA1IDYgNz47CisJfTsKK307CisKICZlY2FwMCB7CiAJc3RhdHVzID0gIm9rYXkiOwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC01MTEsMyArNTMzLDE1IEBACiAJCX07CiAJfTsKIH07CisKKyZkY2FuMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRjYW4wX2RlZmF1bHQ+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZkY2FuMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRjYW4xX2RlZmF1bHQ+OworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTQzN3gtc2stZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3eC1zay1ldm0uZHRzCmluZGV4IDg1OWZmM2QuLjg3YWE0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3eC1zay1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3eC1zay1ldm0uZHRzCkBAIC0zNjMsOCArMzYzLDggQEAKIAkJZGNkYzM6IHJlZ3VsYXRvci1kY2RjMyB7CiAJCQljb21wYXRpYmxlID0gInRpLHRwczY1MjE4LWRjZGMzIjsKIAkJCXJlZ3VsYXRvci1uYW1lID0gInZkZHNfZGRyIjsKLQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEzNTAwMDA+OwotCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OwogCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00M3gtZXBvcy1ldm0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00M3gtZXBvcy1ldm0uZHRzCmluZGV4IGFjM2U0ODUuLjY2MjI2MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDN4LWVwb3MtZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzeC1lcG9zLWV2bS5kdHMKQEAgLTM1OCw4ICszNTgsOCBAQAogCQlkY2RjMzogcmVndWxhdG9yLWRjZGMzIHsKIAkJCWNvbXBhdGlibGUgPSAidGksdHBzNjUyMTgtZGNkYzMiOwogCQkJcmVndWxhdG9yLW5hbWUgPSAidmRjZGMzIjsKLQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEzNTAwMDA+OwotCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OwogCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQl9OwpAQCAtNDM4LDkgKzQzOCw5IEBACiAJc3RhdHVzID0gIm9rYXkiOwkvKiBEaXNhYmxlIFFTUEkgd2hlbiBlbmFibGluZyBHUE1DIChOQU5EKSAqLwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZuYW5kX2ZsYXNoX3g4PjsKLQlyYW5nZXMgPSA8MCAwIDB4MDgwMDAwMDAgMHgxMDAwMDAwMD47CS8qIENTMDogTkFORCAqLworCXJhbmdlcyA9IDwwIDAgMHgwODAwMDAwMCAweDEwMDAwMDA+OwkvKiBDUzA6IDE2TUIgZm9yIE5BTkQgKi8KIAluYW5kQDAsMCB7Ci0JCXJlZyA9IDwwIDAgMD47IC8qIENTMCwgb2Zmc2V0IDAgKi8KKwkJcmVnID0gPDAgMCA0PjsgLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2gxNiI7CiAJCXRpLGVsbS1pZCA9IDwmZWxtPjsKIAkJbmFuZC1idXMtd2lkdGggPSA8OD47CkBAIC01MTksNiArNTE5LDE0IEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnRzY2FkYyB7CisJc3RhdHVzID0gIm9rYXkiOworCisJYWRjIHsKKwkJdGksYWRjLWNoYW5uZWxzID0gPDAgMSAyIDMgNCA1IDYgNz47CisJfTsKK307CisKICZlY2FwMCB7CiAJCXN0YXR1cyA9ICJva2F5IjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNTd4eC1iZWFnbGUteDE1LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNTd4eC1iZWFnbGUteDE1LmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWVkYmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW01N3h4LWJlYWdsZS14MTUuZHRzCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKy9kdHMtdjEvOworCisjaW5jbHVkZSAiZHJhNzR4LmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xrL3RpLWRyYTctYXRsLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisKKy8geworCW1vZGVsID0gIlRJIEFNNTcyOCBCZWFnbGVCb2FyZC1YMTUiOworCWNvbXBhdGlibGUgPSAidGksYW01NzJ4LWJlYWdsZS14MTUiLCAidGksYW01NzI4IiwgInRpLGRyYTc0MiIsICJ0aSxkcmE3NCIsICJ0aSxkcmE3IjsKKworCWFsaWFzZXMgeworCQlydGMwID0gJm1jcF9ydGM7CisJCXJ0YzEgPSAmdHBzNjU5MDM4X3J0YzsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4ODAwMDAwMDAgMHg4MDAwMDAwMD47CisJfTsKKworCXZkZF8zdjM6IGZpeGVkcmVndWxhdG9yLXZkZF8zdjMgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInZkZF8zdjMiOworCQl2aW4tc3VwcGx5ID0gPCZyZWdlbjE+OworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJfTsKKworCXZ0dF9maXhlZDogZml4ZWRyZWd1bGF0b3ItdnR0IHsKKwkJLyogVFBTNTEyMDAgKi8KKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJ2dHRfZml4ZWQiOworCQl2aW4tc3VwcGx5ID0gPCZzbXBzM19yZWc+OworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCXJlZ3VsYXRvci1ib290LW9uOworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCWdwaW8gPSA8JmdwaW83IDExIEdQSU9fQUNUSVZFX0hJR0g+OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmxlZHNfcGluc19kZWZhdWx0PjsKKworCQlsZWRAMCB7CisJCQlsYWJlbCA9ICJiZWFnbGUteDE1OnVzcjAiOworCQkJZ3Bpb3MgPSA8JmdwaW83IDkgR1BJT19BQ1RJVkVfSElHSD47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKworCQlsZWRAMSB7CisJCQlsYWJlbCA9ICJiZWFnbGUteDE1OnVzcjEiOworCQkJZ3Bpb3MgPSA8JmdwaW83IDggR1BJT19BQ1RJVkVfSElHSD47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiY3B1MCI7CisJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCX07CisKKwkJbGVkQDIgeworCQkJbGFiZWwgPSAiYmVhZ2xlLXgxNTp1c3IyIjsKKwkJCWdwaW9zID0gPCZncGlvNyAxNCBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJtbWMwIjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKworCQlsZWRAMyB7CisJCQlsYWJlbCA9ICJiZWFnbGUteDE1OnVzcjMiOworCQkJZ3Bpb3MgPSA8JmdwaW83IDE1IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImlkZS1kaXNrIjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKwl9OworfTsKKworJmRyYTdfcG14X2NvcmUgeworCWxlZHNfcGluc19kZWZhdWx0OiBsZWRzX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDNhOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMTQpCS8qIHNwaTFfZDEuZ3BpbzdfOCAqLworCQkJMHgzYWMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTE0KQkvKiBzcGkxX2QwLmdwaW83XzkgKi8KKwkJCTB4M2MwIChQSU5fT1VUUFVUIHwgTVVYX01PREUxNCkJLyogc3BpMl9zY2xrLmdwaW83XzE0ICovCisJCQkweDNjNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMTQpCS8qIHNwaTJfZDEuZ3BpbzdfMTUgKi8KKwkJPjsKKwl9OworCisJaTJjMV9waW5zX2RlZmF1bHQ6IGkyYzFfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4NDAwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMxX3NkYS5zZGEgKi8KKwkJCTB4NDA0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMxX3NjbC5zY2wgKi8KKwkJPjsKKwl9OworCisJaTJjM19waW5zX2RlZmF1bHQ6IGkyYzNfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MmE0IChQSU5fSU5QVVR8IE1VWF9NT0RFMTApCS8qIG1jYXNwMV9hY2xreC5pMmMzX3NkYSAqLworCQkJMHgyYTggKFBJTl9JTlBVVHwgTVVYX01PREUxMCkJLyogbWNhc3AxX2ZzeC5pMmMzX3NjbCAqLworCQk+OworCX07CisKKwl1YXJ0M19waW5zX2RlZmF1bHQ6IHVhcnQzX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDI0OCAoUElOX0lOUFVUX1NMRVcgfCBNVVhfTU9ERTApIC8qIHVhcnQzX3J4ZC5yeGQgKi8KKwkJCTB4MjRjIChQSU5fSU5QVVRfU0xFVyB8IE1VWF9NT0RFMCkgLyogdWFydDNfdHhkLnR4ZCAqLworCQk+OworCX07CisKKwltbWMxX3BpbnNfZGVmYXVsdDogbW1jMV9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgzNmMgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMTQpCS8qIG1tYzFzZGNkLmdwaW8yMTkgKi8KKwkJCTB4MzU0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2Nsay5jbGsgKi8KKwkJCTB4MzU4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2NtZC5jbWQgKi8KKwkJCTB4MzVjIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2RhdDAuZGF0MCAqLworCQkJMHgzNjAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0MS5kYXQxICovCisJCQkweDM2NCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogbW1jMV9kYXQyLmRhdDIgKi8KKwkJCTB4MzY4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2RhdDMuZGF0MyAqLworCQk+OworCX07CisKKwltbWMyX3BpbnNfZGVmYXVsdDogbW1jMl9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg5YyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjMubW1jMl9jbGsgKi8KKwkJCTB4YjAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfY3MxLm1tYzJfY21kICovCisJCQkweGEwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyNC5tbWMyX2RhdDAgKi8KKwkJCTB4YTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI1Lm1tYzJfZGF0MSAqLworCQkJMHhhOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjYubW1jMl9kYXQyICovCisJCQkweGFjIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyNy5tbWMyX2RhdDMgKi8KKwkJCTB4OGMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTE5Lm1tYzJfZGF0NCAqLworCQkJMHg5MCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjAubW1jMl9kYXQ1ICovCisJCQkweDk0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMS5tbWMyX2RhdDYgKi8KKwkJCTB4OTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTIyLm1tYzJfZGF0NyAqLworCQk+OworCX07CisKKwl0cHM2NTkwMzhfcGluc19kZWZhdWx0OiB0cHM2NTkwMzhfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4NDE4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxNCkJLyogd2FrZXVwMC5ncGlvMV8wICovCisJCT47CisJfTsKKworCXRtcDEwMl9waW5zX2RlZmF1bHQ6IHRtcDEwMl9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgzQzggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTE0KQkvKiBzcGkyX2QwLmdwaW83XzE2ICovCisJCT47CisJfTsKKworCW1jcDc5NDEwX3BpbnNfZGVmYXVsdDogbWNwNzk0MTBfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4NDI0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKQkvKiB3YWtldXAzLnN5c19uaXJxMSAqLworCQk+OworCX07CisKKwl1c2IxX3BpbnM6IHBpbm11eF91c2IxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgyODAgKFBJTl9JTlBVVF9TTEVXIHwgTVVYX01PREUwKSAvKiB1c2IxX2RydnZidXMgKi8KKwkJPjsKKwl9OworCit9OworCismaTJjMSB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmMxX3BpbnNfZGVmYXVsdD47CisJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisKKwl0cHM2NTkwMzg6IHRwczY1OTAzOEA1OCB7CisJCWNvbXBhdGlibGUgPSAidGksdHBzNjU5MDM4IjsKKwkJcmVnID0gPDB4NTg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMT47CisJCWludGVycnVwdHMgPSA8MCBJUlFfVFlQRV9MRVZFTF9MT1c+OworCisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdHBzNjU5MDM4X3BpbnNfZGVmYXVsdD47CisKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisKKwkJdGksc3lzdGVtLXBvd2VyLWNvbnRyb2xsZXI7CisKKwkJdHBzNjU5MDM4X3BtaWMgeworCQkJY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTkwMzgtcG1pYyI7CisKKwkJCXJlZ3VsYXRvcnMgeworCQkJCXNtcHMxMl9yZWc6IHNtcHMxMiB7CisJCQkJCS8qIFZERF9NUFUgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczEyIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8IDg1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJc21wczNfcmVnOiBzbXBzMyB7CisJCQkJCS8qIFZERF9ERFIgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczMiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlzbXBzNDVfcmVnOiBzbXBzNDUgeworCQkJCQkvKiBWRERfRFNQRVZFLCBWRERfSVZBLCBWRERfR1BVICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gInNtcHM0NSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA4NTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXNtcHM2X3JlZzogc21wczYgeworCQkJCQkvKiBWRERfQ09SRSAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzNiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMzAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJLyogU01QUzcgdW51c2VkICovCisKKwkJCQlzbXBzOF9yZWc6IHNtcHM4IHsKKwkJCQkJLyogVkREXzFWOCAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzOCI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCS8qIFNNUFM5IHVudXNlZCAqLworCisJCQkJbGRvMV9yZWc6IGxkbzEgeworCQkJCQkvKiBWRERfU0QgICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzEiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG8yX3JlZzogbGRvMiB7CisJCQkJCS8qIFZERF9TSFY1ICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzIiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG8zX3JlZzogbGRvMyB7CisJCQkJCS8qIFZEREFfMVY4X1BIWSAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJsZG8zIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJbGRvOV9yZWc6IGxkbzkgeworCQkJCQkvKiBWRERfUlRDICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzkiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTA1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG9sbl9yZWc6IGxkb2xuIHsKKwkJCQkJLyogVkREQV8xVjhfUExMICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkb2xuIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJbGRvdXNiX3JlZzogbGRvdXNiIHsKKwkJCQkJLyogVkREQV8zVl9VU0I6IFZEREFfVVNCSFMzMyAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJsZG91c2IiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlyZWdlbjE6IHJlZ2VuMSB7CisJCQkJCS8qIFZERF8zVjNfT04gKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAicmVnZW4xIjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJdHBzNjU5MDM4X3J0YzogdHBzNjU5MDM4X3J0YyB7CisJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1ydGMiOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmdHBzNjU5MDM4PjsKKwkJCWludGVycnVwdHMgPSA8OCBJUlFfVFlQRV9FREdFX0ZBTExJTkc+OworCQkJd2FrZXVwLXNvdXJjZTsKKwkJfTsKKworCQl0cHM2NTkwMzhfcHdyX2J1dHRvbjogdHBzNjU5MDM4X3B3cl9idXR0b24geworCQkJY29tcGF0aWJsZSA9ICJ0aSxwYWxtYXMtcHdyYnV0dG9uIjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnRwczY1OTAzOD47CisJCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfRURHRV9GQUxMSU5HPjsKKwkJCXdha2V1cC1zb3VyY2U7CisJCQl0aSxwYWxtYXMtbG9uZy1wcmVzcy1zZWNvbmRzID0gPDEyPjsKKwkJfTsKKwl9OworCisJdG1wMTAyOiB0bXAxMDJANDggeworCQljb21wYXRpYmxlID0gInRpLHRtcDEwMiI7CisJCXJlZyA9IDwweDQ4PjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ0bXAxMDJfcGluc19kZWZhdWx0PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3Bpbzc+OworCQlpbnRlcnJ1cHRzID0gPDE2IElSUV9UWVBFX0xFVkVMX0xPVz47CisJfTsKK307CisKKyZpMmMzIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzNfcGluc19kZWZhdWx0PjsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCW1jcF9ydGM6IHJ0Y0A2ZiB7CisJCWNvbXBhdGlibGUgPSAibWljcm9jaGlwLG1jcDc5NDF4IjsKKwkJcmVnID0gPDB4NmY+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMiBJUlFfVFlQRV9MRVZFTF9MT1c+OyAgLyogSVJRX1NZU18xTiAqLworCisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmbWNwNzk0MTBfcGluc19kZWZhdWx0PjsKKworCQl2Y2Mtc3VwcGx5ID0gPCZ2ZGRfM3YzPjsKKwkJd2FrZXVwLXNvdXJjZTsKKwl9OworfTsKKworJmdwaW83IHsKKwl0aSxuby1yZXNldC1vbi1pbml0OworCXRpLG5vLWlkbGUtb24taW5pdDsKK307CisKKyZjcHUwIHsKKwljcHUwLXN1cHBseSA9IDwmc21wczEyX3JlZz47CisJdm9sdGFnZS10b2xlcmFuY2UgPSA8MT47Cit9OworCismdWFydDMgeworCXN0YXR1cyA9ICJva2F5IjsKKwlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZnaWMgR0lDX1NQSSA2OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgIDwmZHJhN19wbXhfY29yZSAweDI0OD47CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDNfcGluc19kZWZhdWx0PjsKK307CisKKyZtbWMxIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jMV9waW5zX2RlZmF1bHQ+OworCisJdm1tYy1zdXBwbHkgPSA8JmxkbzFfcmVnPjsKKwl2bW1jX2F1eC1zdXBwbHkgPSA8JnZkZF8zdjM+OworCXBiaWFzLXN1cHBseSA9IDwmcGJpYXNfbW1jX3JlZz47CisJYnVzLXdpZHRoID0gPDQ+OworCWNkLWdwaW9zID0gPCZncGlvNiAyNyAwPjsgLyogZ3BpbyAyMTkgKi8KK307CisKKyZtbWMyIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jMl9waW5zX2RlZmF1bHQ+OworCisJdm1tYy1zdXBwbHkgPSA8JnZkZF8zdjM+OworCWJ1cy13aWR0aCA9IDw4PjsKKwl0aSxub24tcmVtb3ZhYmxlOworCWNhcC1tbWMtZHVhbC1kYXRhLXJhdGU7Cit9OworCismc2F0YSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYjJfcGh5MSB7CisJcGh5LXN1cHBseSA9IDwmbGRvdXNiX3JlZz47Cit9OworCismdXNiMSB7CisJZHJfbW9kZSA9ICJob3N0IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdXNiMV9waW5zPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm0tcmVhbHZpZXctcGIxMTc2LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybS1yZWFsdmlldy1wYjExNzYuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMjZjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm0tcmVhbHZpZXctcGIxMTc2LmR0cwpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IExpbmFybyBMdGQKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQVJNIFJlYWxWaWV3IFBCMTE3NiI7CisJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGIxMTc2IjsKKworCWNob3NlbiB7IH07CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZwYjExNzZfc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZwYjExNzZfc2VyaWFsMTsKKwkJc2VyaWFsMiA9ICZwYjExNzZfc2VyaWFsMjsKKwkJc2VyaWFsMyA9ICZwYjExNzZfc2VyaWFsMzsKKwkJc2VyaWFsNCA9ICZmcGdhX3NlcmlhbDsKKwl9OworCisJbWVtb3J5IHsKKwkJLyogMTI4IE1pQiBtZW1vcnkgQCAweDAgKi8KKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwODAwMDAwMD47CisJfTsKKworCS8qIFRoZSB2b2x0YWdlIHRvIHRoZSBNTUMgY2FyZCBpcyBoYXJkd2lyZWQgYXQgMy4zViAqLworCXZtbWM6IGZpeGVkcmVndWxhdG9yQDAgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInZtbWMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworICAgICAgICB9OworCisJeHRhbDI0bWh6OiB4dGFsMjRtaHpAMjRNIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwl9OworCisJdGltY2xrOiB0aW1jbGtAMU0geworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2stZGl2ID0gPDI0PjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2tzID0gPCZ4dGFsMjRtaHo+OworCX07CisKKwltY2xrOiBtY2xrQDI0TSB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9jay1kaXYgPSA8MT47CisJCWNsb2NrLW11bHQgPSA8MT47CisJCWNsb2NrcyA9IDwmeHRhbDI0bWh6PjsKKwl9OworCisJa21pY2xrOiBrbWljbGtAMjRNIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrLWRpdiA9IDwxPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2tzID0gPCZ4dGFsMjRtaHo+OworCX07CisKKwlzc3BjbGs6IHNzcGNsa0AyNE0geworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2stZGl2ID0gPDE+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9ja3MgPSA8Jnh0YWwyNG1oej47CisJfTsKKworCXVhcnRjbGs6IHVhcnRjbGtAMjRNIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrLWRpdiA9IDwxPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2tzID0gPCZ4dGFsMjRtaHo+OworCX07CisKKwkvKiBGSVhNRTogdGhpcyBhY3R1YWxseSBoYW5ncyBvZmYgdGhlIFBMTCBjbG9ja3MgKi8KKwlwY2xrOiBwY2xrQDAgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJfTsKKworCXNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGIxMTc2LXNvYyIsICJzaW1wbGUtYnVzIjsKKwkJcmVnbWFwID0gPCZzeXNjb24+OworCQlyYW5nZXM7CisKKwkJc3lzY29uOiBzeXNjb25AMTAwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGIxMTc2LXN5c2NvbiIsICJzeXNjb24iOworCQkJcmVnID0gPDB4MTAwMDAwMDAgMHgxMDAwPjsKKworCQkJbGVkQDA4LjAgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHgwMT47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjAiOworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib24iOworCQkJfTsKKwkJCWxlZEAwOC4xIHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA4PjsKKwkJCQltYXNrID0gPDB4MDI+OworCQkJCWxhYmVsID0gInZlcnNhdGlsZToxIjsKKwkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAibW1jMCI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJCWxlZEAwOC4yIHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA4PjsKKwkJCQltYXNrID0gPDB4MDQ+OworCQkJCWxhYmVsID0gInZlcnNhdGlsZToyIjsKKwkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiY3B1MCI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJCWxlZEAwOC4zIHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA4PjsKKwkJCQltYXNrID0gPDB4MDg+OworCQkJCWxhYmVsID0gInZlcnNhdGlsZTozIjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA4LjQgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHgxMD47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjQiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCQlsZWRAMDguNSB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwOD47CisJCQkJbWFzayA9IDwweDIwPjsKKwkJCQlsYWJlbCA9ICJ2ZXJzYXRpbGU6NSI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJCWxlZEAwOC42IHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA4PjsKKwkJCQltYXNrID0gPDB4NDA+OworCQkJCWxhYmVsID0gInZlcnNhdGlsZTo2IjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA4LjcgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHg4MD47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjciOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCX07CisKKwkJLyogUHJpbWFyeSBEZXZDaGlwIEdJQyBzeW50aGVzaXplZCB3aXRoIHRoZSBDUFUgKi8KKwkJaW50Y19kYzExNzY6IGludGVycnVwdC1jb250cm9sbGVyQDEwMTIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGFybTExNzZqemYtZGV2Y2hpcC1naWMiLCAiYXJtLGFybTExbXAtZ2ljIjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJcmVnID0gPDB4MTAxMjEwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDEwMTIwMDAwIDB4MTAwPjsKKwkJfTsKKworCQlMMjogbDItY2FjaGUgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sbDIyMC1jYWNoZSI7CisJCQlyZWcgPSA8MHgxMDExMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19kYzExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDEzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2FjaGUtdW5pZmllZDsKKwkJCWNhY2hlLWxldmVsID0gPDI+OworCQkJLyoKKwkJCSAqIE92ZXJyaWRlIGRlZmF1bHQgY2FjaGUgc2l6ZSwgc2V0cyBhbmQKKwkJCSAqIGFzc29jaWF0aXZpdHkgYXMgdGhlc2UgbWF5IGJlIGVycm9uZW91c2x5IHNldAorCQkJICogdXAgYnkgYm9vdCBsb2FkZXIocykuCisJCQkgKi8KKwkJCWFybSxvdmVycmlkZS1hdXhyZWc7CisJCQljYWNoZS1zaXplID0gPDEzMTA3Mj47IC8vIDEyOGtCCisJCQljYWNoZS1zZXRzID0gPDUxMj47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQl9OworCisJCXBtdSB7CisJCQljb21wYXRpYmxlID0gImFybSxhcm0xMTc2LXBtdSI7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJfTsKKworCQl0aW1lcjAxOiB0aW1lckAxMDEwNDAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxzcDgwNCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMTA0MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgOCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwgPDAgOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmdGltY2xrPiwgPCZ0aW1jbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAidGltZXIxIiwgInRpbWVyMiIsICJhcGJfcGNsayI7CisJCX07CisKKwkJdGltZXIyMzogdGltZXJAMTAxMDUwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sc3A4MDQiLCAiYXJtLHByaW1lY2VsbCI7CisJCQlyZWcgPSA8MHgxMDEwNTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19kYzExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDEwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJYXJtLHNwODA0LWhhcy1pcnEgPSA8MT47CisJCQljbG9ja3MgPSA8JnRpbWNsaz4sIDwmdGltY2xrPiwgPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInRpbWVyMSIsICJ0aW1lcjIiLCAiYXBiX3BjbGsiOworCQl9OworCisJCXBiMTE3Nl9ydGM6IHJ0Y0AxMDEwODAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAzMSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMTA4MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQl9OworCisJCXBiMTE3Nl9ncGlvMDogZ3Bpb0AxMDEwYTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMTBhMDAwIDB4MTAwMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCWNsb2NrcyA9IDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJcGIxMTc2X3NzcDogc3NwQDEwMTBiMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDIyIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAxNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmc3NwY2xrPiwgPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gIlNTUENMSyIsICJhcGJfcGNsayI7CisJCX07CisKKwkJcGIxMTc2X3NlcmlhbDA6IHNlcmlhbEAxMDEwYzAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAxMSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMTBjMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnVhcnRjbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAidWFydGNsayIsICJhcGJfcGNsayI7CisJCX07CisKKwkJcGIxMTc2X3NlcmlhbDE6IHNlcmlhbEAxMDEwZDAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAxMSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMTBkMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnVhcnRjbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAidWFydGNsayIsICJhcGJfcGNsayI7CisJCX07CisKKwkJcGIxMTc2X3NlcmlhbDI6IHNlcmlhbEAxMDEwZTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAxMSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMTBlMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnVhcnRjbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAidWFydGNsayIsICJhcGJfcGNsayI7CisJCX07CisKKwkJcGIxMTc2X3NlcmlhbDM6IHNlcmlhbEAxMDEwZjAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAxMSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMTBmMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMjEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnVhcnRjbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAidWFydGNsayIsICJhcGJfcGNsayI7CisJCX07CisJfTsKKworCS8qIFRoZXNlIHBlcmlwaGVyYWxzIGFyZSBpbnNpZGUgdGhlIEZQR0EgcmF0aGVyIHRoYW4gdGhlIERldkNoaXAgKi8KKwlmcGdhIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXM7CisKKwkJZnBnYV9tY2k6IG1tY3NkQDEwMDA1MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMTh4IiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMDUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCTwwIDIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkvKiBEdWUgdG8gZnJlcXVlbnQgRklGTyBvdmVycnVucywgdXNlIGp1c3QgNTAwIGtIeiAqLworCQkJbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDA+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJY2FwLXNkLWhpZ2hzcGVlZDsKKwkJCWNhcC1tbWMtaGlnaHNwZWVkOworCQkJY2xvY2tzID0gPCZtY2xrPiwgPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gIm1jbGsiLCAiYXBiX3BjbGsiOworCQkJdm1tYy1zdXBwbHkgPSA8JnZtbWM+OworCQkJY2QtZ3Bpb3MgPSA8JmZwZ2FfZ3BpbzEgMCBHUElPX0FDVElWRV9MT1c+OworCQkJd3AtZ3Bpb3MgPSA8JmZwZ2FfZ3BpbzEgMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlmcGdhX2ttaTA6IGttaUAxMDAwNjAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDA1MCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMDA2MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2ZwZ2ExMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZrbWljbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAiS01JUkVGQ0xLIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlmcGdhX2ttaTE6IGttaUAxMDAwNzAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDA1MCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMDA3MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2ZwZ2ExMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCA0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZrbWljbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAiS01JUkVGQ0xLIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlmcGdhX2NoYXJsY2Q6IGNoYXJsY2RAMTAwMDgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sdmVyc2F0aWxlLWxjZCI7CisJCQlyZWcgPSA8MHgxMDAwODAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19mcGdhMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJZnBnYV9zZXJpYWw6IHNlcmlhbEAxMDAwOTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAxMSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMDA5MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2ZwZ2ExMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCA2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZ1YXJ0Y2xrPiwgPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInVhcnRjbGsiLCAiYXBiX3BjbGsiOworCQl9OworCisJCS8qIFRoaXMgR0lDIG9uIHRoZSBib2FyZCBpcyBjYXNjYWRlZCBvZmYgdGhlIERldkNoaXAgR0lDICovCisJCWludGNfZnBnYTExNzY6IGludGVycnVwdC1jb250cm9sbGVyQDEwMDQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGFybTExNzZqemYtZGV2Y2hpcC1naWMiLCAiYXJtLGFybTExbXAtZ2ljIjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJcmVnID0gPDB4MTAwNDEwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDEwMDQwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAzMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJfTsKKworCQlmcGdhX2dwaW8wOiBncGlvQDEwMDE0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMTQwMDAgMHgxMDAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCWNsb2NrcyA9IDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJZnBnYV9ncGlvMTogZ3Bpb0AxMDAxNTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMDE1MDAwIDB4MTAwMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2ZwZ2ExMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQljbG9ja3MgPSA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQl9OworCisJCWZwZ2FfcnRjOiBydGNAMTAwMTcwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMzEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQlyZWcgPSA8MHgxMDAxNzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19mcGdhMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQl9OworCisKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtZGIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMKaW5kZXggYTQ5NWU1OC4uMTQ2NjU4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMKQEAgLTc1LDYgKzc1LDcgQEAKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQkJYXVkaW9fY29kZWM6IGF1ZGlvLWNvZGVjQDRhIHsKKwkJCQkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKIAkJCQkJY29tcGF0aWJsZSA9ICJjaXJydXMsY3M0Mmw1MSI7CiAJCQkJCXJlZyA9IDwweDRhPjsKIAkJCQl9OwpAQCAtMTAyLDMwICsxMDMsNiBAQAogCQkJCWJyb2tlbi1jZDsKIAkJCX07CiAKLQkJCXBpbmN0cmwgewotCQkJCS8qCi0JCQkJICogVGhlc2UgcGlucyBtaWdodCBiZSBtdXhlZCBhcyBJMlMgYnkKLQkJCQkgKiB0aGUgYm9vdGxvYWRlciwgYnV0IGl0IGNvbmZsaWN0cwotCQkJCSAqIHdpdGggdGhlIHJlYWwgSTJTIHBpbnMgdGhhdCBhcmUKLQkJCQkgKiBtdXhlZCB1c2luZyBpMnNfcGlucy4gV2UgbXVzdCBtdXgKLQkJCQkgKiB0aG9zZSBwaW5zIHRvIGEgZnVuY3Rpb24gb3RoZXIgdGhhbgotCQkJCSAqIEkyUy4KLQkJCQkgKi8KLQkJCQlwaW5jdHJsLTAgPSA8JmhvZ19waW5zMSAmaG9nX3BpbnMyPjsKLQkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCi0JCQkJaG9nX3BpbnMxOiBob2ctcGluczEgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNiIsICAibXBwOCIsICJtcHAxMCIsCi0JCQkJCQkgICAgICAgIm1wcDEyIiwgIm1wcDEzIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJaG9nX3BpbnMyOiBob2ctcGluczIgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNSIsICJtcHA3IiwgIm1wcDkiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwbyI7Ci0JCQkJfTsKLQkJCX07Ci0KIAkJCXVzYkA1MDAwMCB7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKQEAgLTEzNSw2ICsxMTIsOCBAQAogCQkJfTsKIAogCQkJc3BpMDogc3BpQDEwNjAwIHsKKwkJCQlwaW5jdHJsLTAgPSA8JnNwaTBfcGluczI+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCiAJCQkJc3BpLWZsYXNoQDAgewpAQCAtMTY3LDE3ICsxNDYsODQgQEAKIAl9OwogCiAJc291bmQgewotCSAgICAgIGNvbXBhdGlibGUgPSAibWFydmVsbCxhMzcwZGItYXVkaW8iOwotCSAgICAgIG1hcnZlbGwsYXVkaW8tY29udHJvbGxlciA9IDwmYXVkaW9fY29udHJvbGxlcj47Ci0JICAgICAgbWFydmVsbCxhdWRpby1jb2RlYyA9IDwmYXVkaW9fY29kZWMgJnNwZGlmX291dCAmc3BkaWZfaW4+OwotCSAgICAgIHN0YXR1cyA9ICJva2F5IjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYXVkaW8tY2FyZCI7CisJCXNpbXBsZS1hdWRpby1jYXJkLG5hbWUgPSAiQXJtYWRhIDM3MCBEQiBBdWRpbyI7CisJCXNpbXBsZS1hdWRpby1jYXJkLG1jbGstZnMgPSA8MjU2PjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsd2lkZ2V0cyA9CisJCQkiSGVhZHBob25lIiwgIk91dCBKYWNrIiwKKwkJCSJMaW5lIiwgIkluIEphY2siOworCQlzaW1wbGUtYXVkaW8tY2FyZCxyb3V0aW5nID0KKwkJCSJPdXQgSmFjayIsICJIUEwiLAorCQkJIk91dCBKYWNrIiwgIkhQUiIsCisJCQkiQUlOMUwiLCAiSW4gSmFjayIsCisJCQkiQUlOMUwiLCAiSW4gSmFjayI7CisJCXN0YXR1cyA9ICJva2F5IjsKKworCQlzaW1wbGUtYXVkaW8tY2FyZCxkYWktbGlua0AwIHsKKwkJCWZvcm1hdCA9ICJpMnMiOworCQkJY3B1IHsKKwkJCQlzb3VuZC1kYWkgPSA8JmF1ZGlvX2NvbnRyb2xsZXIgMD47CisJCQl9OworCisJCQljb2RlYyB7CisJCQkJc291bmQtZGFpID0gPCZhdWRpb19jb2RlYz47CisJCQl9OworCQl9OworCisJCXNpbXBsZS1hdWRpby1jYXJkLGRhaS1saW5rQDEgeworCQkJZm9ybWF0ID0gImkycyI7CisJCQljcHUgeworCQkJCXNvdW5kLWRhaSA9IDwmYXVkaW9fY29udHJvbGxlciAxPjsKKwkJCX07CisKKwkJCWNvZGVjIHsKKwkJCQlzb3VuZC1kYWkgPSA8JnNwZGlmX291dD47CisJCQl9OworCQl9OworCisJCXNpbXBsZS1hdWRpby1jYXJkLGRhaS1saW5rQDIgeworCQkJZm9ybWF0ID0gImkycyI7CisJCQljcHUgeworCQkJCXNvdW5kLWRhaSA9IDwmYXVkaW9fY29udHJvbGxlciAxPjsKKwkJCX07CisKKwkJCWNvZGVjIHsKKwkJCQlzb3VuZC1kYWkgPSA8JnNwZGlmX2luPjsKKwkJCX07CisJCX07CiAJfTsKIAogCXNwZGlmX291dDogc3BkaWYtb3V0IHsKLQkgICAgICBjb21wYXRpYmxlID0gImxpbnV4LHNwZGlmLWRpdCI7CisJCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAibGludXgsc3BkaWYtZGl0IjsKIAl9OwogCiAJc3BkaWZfaW46IHNwZGlmLWluIHsKLQkgICAgICBjb21wYXRpYmxlID0gImxpbnV4LHNwZGlmLWRpciI7CisJCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAibGludXgsc3BkaWYtZGlyIjsKKwl9OworfTsKKworJnBpbmN0cmwgeworCS8qCisJICogVGhlc2UgcGlucyBtaWdodCBiZSBtdXhlZCBhcyBJMlMgYnkKKwkgKiB0aGUgYm9vdGxvYWRlciwgYnV0IGl0IGNvbmZsaWN0cworCSAqIHdpdGggdGhlIHJlYWwgSTJTIHBpbnMgdGhhdCBhcmUKKwkgKiBtdXhlZCB1c2luZyBpMnNfcGlucy4gV2UgbXVzdCBtdXgKKwkgKiB0aG9zZSBwaW5zIHRvIGEgZnVuY3Rpb24gb3RoZXIgdGhhbgorCSAqIEkyUy4KKwkgKi8KKwlwaW5jdHJsLTAgPSA8JmhvZ19waW5zMSAmaG9nX3BpbnMyPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJaG9nX3BpbnMxOiBob2ctcGluczEgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNiIsICAibXBwOCIsICJtcHAxMCIsCisJCQkgICAgICAgIm1wcDEyIiwgIm1wcDEzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJaG9nX3BpbnMyOiBob2ctcGluczIgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNSIsICJtcHA3IiwgIm1wcDkiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwbyI7CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW1pcmFib3guZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1taXJhYm94LmR0cwppbmRleCAyYjZkMjRlLi5lMWIwZWI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW1pcmFib3guZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbWlyYWJveC5kdHMKQEAgLTU0LDE4ICs1NCw2IEBACiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAotCQkJcGluY3RybCB7Ci0JCQkJcHdyX2xlZF9waW46IHB3ci1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDYzIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncG8iOwotCQkJCX07Ci0KLQkJCQlzdGF0X2xlZF9waW5zOiBzdGF0LWxlZC1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDY0IiwgIm1wcDY1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJZ3Bpb19sZWRzIHsKIAkJCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTE2OSwzICsxNTcsMTYgQEAKIAkJfTsKIAl9OwogfTsKKworJnBpbmN0cmwgeworCXB3cl9sZWRfcGluOiBwd3ItbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2MyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKKwl9OworCisJc3RhdF9sZWRfcGluczogc3RhdC1sZWQtcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2NCIsICJtcHA2NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDIuZHRzCmluZGV4IDNhZWJkOTMuLjRlMjQ5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTAyLmR0cwpAQCAtMzUsNyArMzUsNyBAQAogCQlwY2llLWNvbnRyb2xsZXIgewogCQkJc3RhdHVzID0gIm9rYXkiOwogCi0JCQkvKiBDb25uZWN0ZWQgdG8gTWFydmVsbCBTQVRBIGNvbnRyb2xsZXIgKi8KKwkJCS8qIENvbm5lY3RlZCB0byBNYXJ2ZWxsIDg4U0U5MTcwIFNBVEEgY29udHJvbGxlciAqLwogCQkJcGNpZUAxLDAgewogCQkJCS8qIFBvcnQgMCwgTGFuZSAwICovCiAJCQkJc3RhdHVzID0gIm9rYXkiOwpAQCAtNTMsNTMgKzUzLDEyIEBACiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAorCQkJLyogZVNBVEEgaW50ZXJmYWNlICovCiAJCQlzYXRhQGEwMDAwIHsKLQkJCQluci1wb3J0cyA9IDwyPjsKKwkJCQluci1wb3J0cyA9IDwxPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCi0JCQlwaW5jdHJsIHsKLQkJCQlwb3dlcl9sZWRfcGluOiBwb3dlci1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDU3IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTFfbGVkX3Bpbjogc2F0YTEtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxNSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGEyX2xlZF9waW46IHNhdGEyLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTQiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQliYWNrdXBfbGVkX3BpbjogYmFja3VwLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTYiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQliYWNrdXBfYnV0dG9uX3BpbjogYmFja3VwLWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTgiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlwb3dlcl9idXR0b25fcGluOiBwb3dlci1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDYyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJcmVzZXRfYnV0dG9uX3BpbjogcmVzZXQtYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJcG93ZXJvZmY6IHBvd2Vyb2ZmIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDgiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQl9OwotCiAJCQltZGlvIHsKIAkJCQlwaW5jdHJsLTAgPSA8Jm1kaW9fcGlucz47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTIwNCwyMCArMTYzLDIwIEBACiAJCQlkZWZhdWx0LXN0YXRlID0gImtlZXAiOwogCQl9OwogCi0JCWdyZWVuLXNhdGExLWxlZCB7Ci0JCQlsYWJlbCA9ICJybjEwMjpncmVlbjpzYXRhMSI7CisJCWJsdWUtc2F0YTEtbGVkIHsKKwkJCWxhYmVsID0gInJuMTAyOmJsdWU6c2F0YTEiOwogCQkJZ3Bpb3MgPSA8JmdwaW8wIDE1IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKIAkJfTsKIAotCQlncmVlbi1zYXRhMi1sZWQgewotCQkJbGFiZWwgPSAicm4xMDI6Z3JlZW46c2F0YTIiOworCQlibHVlLXNhdGEyLWxlZCB7CisJCQlsYWJlbCA9ICJybjEwMjpibHVlOnNhdGEyIjsKIAkJCWdwaW9zID0gPCZncGlvMCAxNCBHUElPX0FDVElWRV9MT1c+OwogCQkJZGVmYXVsdC1zdGF0ZSA9ICJvbiI7CiAJCX07CiAKLQkJZ3JlZW4tYmFja3VwLWxlZCB7Ci0JCQlsYWJlbCA9ICJybjEwMjpncmVlbjpiYWNrdXAiOworCQlibHVlLWJhY2t1cC1sZWQgeworCQkJbGFiZWwgPSAicm4xMDI6Ymx1ZTpiYWNrdXAiOwogCQkJZ3Bpb3MgPSA8JmdwaW8xIDI0IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKIAkJfTsKQEAgLTI1NiwzICsyMTUsNDUgQEAKIAkJZ3Bpb3MgPSA8JmdwaW8wIDggR1BJT19BQ1RJVkVfTE9XPjsKIAl9OwogfTsKKworJnBpbmN0cmwgeworCXBvd2VyX2xlZF9waW46IHBvd2VyLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTciOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMV9sZWRfcGluOiBzYXRhMS1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDE1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTJfbGVkX3Bpbjogc2F0YTItbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAxNCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWJhY2t1cF9sZWRfcGluOiBiYWNrdXAtbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1NiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWJhY2t1cF9idXR0b25fcGluOiBiYWNrdXAtYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1OCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXBvd2VyX2J1dHRvbl9waW46IHBvd2VyLWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlyZXNldF9idXR0b25fcGluOiByZXNldC1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwb3dlcm9mZjogcG93ZXJvZmYgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwOCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTA0LmR0cwppbmRleCBjMmY0MTRiLi4zMDU4NmU0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTA0LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDQuZHRzCkBAIC01MywzOCArNTMsNiBAQAogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKLQkJCXBpbmN0cmwgewotCQkJCXBvd2Vyb2ZmOiBwb3dlcm9mZiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2MCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWJhY2t1cF9idXR0b25fcGluOiBiYWNrdXAtYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1MiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXBvd2VyX2J1dHRvbl9waW46IHBvd2VyLWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjIiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQliYWNrdXBfbGVkX3BpbjogYmFja3VwLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwbyI7Ci0JCQkJfTsKLQotCQkJCXBvd2VyX2xlZF9waW46IHBvd2VyLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjQiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlyZXNldF9idXR0b25fcGluOiByZXNldC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDY1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJbWRpbyB7CiAJCQkJcGluY3RybC0wID0gPCZtZGlvX3BpbnM+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0yNjksMyArMjM3LDM1IEBACiAJCWdwaW9zID0gPCZncGlvMSAyOCBHUElPX0FDVElWRV9MT1c+OwogCX07CiB9OworCismcGluY3RybCB7CisJcG93ZXJvZmY6IHBvd2Vyb2ZmIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYwIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJYmFja3VwX2J1dHRvbl9waW46IGJhY2t1cC1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDUyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2MiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWJhY2t1cF9sZWRfcGluOiBiYWNrdXAtbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2MyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKKwl9OworCisJcG93ZXJfbGVkX3BpbjogcG93ZXItbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2NCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1yZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXJkLmR0cwppbmRleCBmNTdhOGY4NC4uMzk0MzA4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1yZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1yZC5kdHMKQEAgLTU5LDE4ICs1OSw2IEBACiAJCX07CiAKIAkJaW50ZXJuYWwtcmVncyB7Ci0JCQlwaW5jdHJsIHsKLQkJCQlmYW5fcGluczogZmFuLXBpbnMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwOCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWxlZF9waW5zOiBsZWQtcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzMiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQkJCX07Ci0KIAkJCXNlcmlhbEAxMjAwMCB7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKQEAgLTg1LDEwICs3Myw2IEBACiAJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewogCQkJCQlyZWcgPSA8MD47CiAJCQkJfTsKLQotCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQkJcmVnID0gPDE+OwotCQkJCX07CiAJCQl9OwogCiAJCQlldGhlcm5ldEA3MDAwMCB7CkBAIC0xMDAsOCArODQsMTEgQEAKIAkJCQlwaW5jdHJsLTAgPSA8JmdlMV9yZ21paV9waW5zPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXN0YXR1cyA9ICJva2F5IjsKLQkJCQlwaHkgPSA8JnBoeTE+OwogCQkJCXBoeS1tb2RlID0gInJnbWlpLWlkIjsKKwkJCQlmaXhlZC1saW5rIHsKKwkJCQkJICAgc3BlZWQgPSA8MTAwMD47CisJCQkJCSAgIGZ1bGwtZHVwbGV4OworCQkJCX07CiAJCQl9OwogCiAJCQltdnNkaW9AZDQwMDAgewpAQCAtMTczLDQgKzE2MCw1NiBAQAogCQkJfTsKIAkJfTsKIAl9OworCisJZHNhQDAgeworCQljb21wYXRpYmxlID0gIm1hcnZlbGwsZHNhIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWRzYSxldGhlcm5ldCA9IDwmZXRoMT47CisJCWRzYSxtaWktYnVzID0gPCZtZGlvPjsKKworCQlzd2l0Y2hAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MTAgMD47CS8qIE1ESU8gYWRkcmVzcyAxNiwgc3dpdGNoIDAgaW4gdHJlZSAqLworCisJCQlwb3J0QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCX07CisKKwkJCXBvcnRAMSB7CisJCQkgICAgICAgcmVnID0gPDE+OworCQkJICAgICAgIGxhYmVsID0gImxhbjEiOworCQkJfTsKKworCQkJcG9ydEAyIHsKKwkJCSAgICAgICByZWcgPSA8Mj47CisJCQkgICAgICAgbGFiZWwgPSAibGFuMiI7CisJCQl9OworCisJCQlwb3J0QDMgeworCQkJICAgICAgIHJlZyA9IDwzPjsKKwkJCSAgICAgICBsYWJlbCA9ICJsYW4zIjsKKwkJCX07CisKKwkJCXBvcnRANSB7CisJCQkgICAgICByZWcgPSA8NT47CisJCQkgICAgICBsYWJlbCA9ICJjcHUiOworCQkJfTsKKwkJfTsKKwkgfTsKICB9OworCismcGluY3RybCB7CisJZmFuX3BpbnM6IGZhbi1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDgiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlsZWRfcGluczogbGVkLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1zeW5vbG9neS1kczIxM2ouZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1zeW5vbG9neS1kczIxM2ouZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZmVjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXN5bm9sb2d5LWRzMjEzai5kdHMKQEAgLTAsMCArMSwzMTYgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBmaWxlIGZvciBTeW5vbG9neSBEUzIxM2oKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIEFybmF1ZCBFQkFMQVJEIDxhcm5vQG5hdGlzYmFkLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIE5vdGU6IHRoaXMgRGV2aWNlIFRyZWUgYXNzdW1lcyB0aGF0IHRoZSBib290bG9hZGVyIGhhcyByZW1hcHBlZCB0aGUKKyAqIGludGVybmFsIHJlZ2lzdGVycyB0byAweGYxMDAwMDAwIChpbnN0ZWFkIG9mIHRoZSBvbGQgMHhkMDAwMDAwMCkuCisgKiBUaGUgMHhmMTAwMDAwMCBpcyB0aGUgZGVmYXVsdCB1c2VkIGJ5IHRoZSByZWNlbnQsIERULWNhcGFibGUsIFUtQm9vdAorICogYm9vdGxvYWRlcnMgcHJvdmlkZWQgYnkgTWFydmVsbC4gSXQgaXMgdXNlZCBpbiByZWNlbnQgdmVyc2lvbnMgb2YKKyAqIERTTSBzb2Z0d2FyZSBwcm92aWRlZCBieSBTeW5vbG9neS4gTm9uZXRoZWxlc3MsIHNvbWUgZWFybGllciBib2FyZHMKKyAqIHdlcmUgZGVsaXZlcmVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiB1LWJvb3QgdGhhdCBsZWZ0IGludGVybmFsCisgKiByZWdpc3RlcnMgbWFwcGVkIGF0IDB4ZDAwMDAwMDAuIElmIHlvdSBoYXZlIHN1Y2ggYSBkZXZpY2UgeW91IHdpbGwKKyAqIG5vdCBiZSBhYmxlIHRvIGRpcmVjdGx5IGJvb3QgYSBrZXJuZWwgYmFzZWQgb24gdGhpcyBEZXZpY2UgVHJlZS4gSW4KKyAqIHRoYXQgY2FzZSwgdGhlIHByZWZlcnJlZCBzb2x1dGlvbiBpcyB0byB1cGRhdGUgeW91ciBib290bG9hZGVyIChlLmcuCisgKiBieSB1cGdyYWRpbmcgdG8gbGF0ZXN0IHZlcnNpb24gb2YgRFNNLCBvciBidWlsZGluZyBhIG5ldyBvbmUgYW5kCisgKiBpbnN0YWxsaW5nIGl0IGZyb20gdS1ib290IHByb21wdCkgb3IgYWRqdXN0IHRoZSBEZXZpdmUgVHJlZQorICogKHMvMHhmMTAwMDAwMC8weGQwMDAwMDAwLyBpbiAncmFuZ2VzJyBiZWxvdykuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgImFybWFkYS0zNzAuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiU3lub2xvZ3kgRFMyMTNqIjsKKwljb21wYXRpYmxlID0gInN5bm9sb2d5LGRzMjEzaiIsICJtYXJ2ZWxsLGFybWFkYTM3MCIsCisJCSAgICAgIm1hcnZlbGwsYXJtYWRhLTM3MC14cCI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCBlYXJseXByaW50ayI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDIwMDAwMDAwPjsgLyogNTEyIE1CICovCisJfTsKKworCXNvYyB7CisJCXJhbmdlcyA9IDxNQlVTX0lEKDB4ZjAsIDB4MDEpIDAgMHhmMTAwMDAwMCAweDEwMDAwMAorCQkJICBNQlVTX0lEKDB4MDEsIDB4ZTApIDAgMHhmZmYwMDAwMCAweDEwMDAwMD47CisKKwkJaW50ZXJuYWwtcmVncyB7CisKKwkJCS8qIFJUQyBwcm92aWRlZCBieSBTZWlrbyBTLTM1MzkwQSBJMkMgUlRDIGNoaXAgYmVsb3cgKi8KKwkJCXJ0Y0AxMDMwMCB7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXNwaTA6IHNwaUAxMDYwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQkJc3BpLWZsYXNoQDAgeworCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJCWNvbXBhdGlibGUgPSAibWljcm9uLG4yNXEwNjQiOworCQkJCQlyZWcgPSA8MD47IC8qIENoaXAgc2VsZWN0IDAgKi8KKwkJCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCisJCQkJCS8qCisJCQkJCSAqIFdhcm5pbmchCisJCQkJCSAqCisJCQkJCSAqIFN5bm9sb2d5IHUtYm9vdCB1c2VzIGl0cyBjb21waWxlZC1pbiBlbnZpcm9ubWVudAorCQkJCQkgKiBhbmQgaXQgc2VlbXMgU3lub2xvZ3kgZGlkIG5vdCBjYXJlIHRvIGNoYW5nZSB1LWJvb3QKKwkJCQkJICogZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIGFsbG93IHNhdmluZyBhCisJCQkJCSAqIG1vZGlmaWVkIGVudmlyb25tZW50IGF0IGEgc2Vuc2libGUgbG9jYXRpb24uIFNvLAorCQkJCQkgKiBpZiB5b3UgZG8gYSAnc2F2ZWVudicgdW5kZXIgdS1ib290LCB5b3VyIG1vZGlmaWVkCisJCQkJCSAqIGVudmlyb25tZW50IHdpbGwgYmUgc2F2ZWQgYXQgMU1CIGFmdGVyIHRoZSBzdGFydAorCQkJCQkgKiBvZiB0aGUgZmxhc2gsIGkuZS4gaW4gdGhlIG1pZGRsZSBvZiB0aGUgdUltYWdlLgorCQkJCQkgKiBGb3IgdGhhdCByZWFzb24sIGl0IGlzIHN0cm9uZ2x5IGFkdmlzZWQgbm90IHRvCisJCQkJCSAqIGNoYW5nZSB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCwgdW5sZXNzIHlvdSBrbm93CisJCQkJCSAqIHdoYXQgeW91IGFyZSBkb2luZy4KKwkJCQkJICovCisJCQkJCXBhcnRpdGlvbkAwMDAwMDAwMCB7IC8qIHUtYm9vdCAqLworCQkJCQkJbGFiZWwgPSAiUmVkQm9vdCI7CisJCQkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMGMwMDAwPjsgLyogNzY4S0IgKi8KKwkJCQkJfTsKKworCQkJCQlwYXJ0aXRpb25AMDAwYzAwMDAgeyAvKiB1SW1hZ2UgKi8KKwkJCQkJCWxhYmVsID0gInpJbWFnZSI7CisJCQkJCQlyZWcgPSA8MHgwMDBjMDAwMCAweDAwMmQwMDAwPjsgLyogMjg4MEtCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwMzkwMDAwIHsgLyogdUluaXRyYW1mcyAqLworCQkJCQkJbGFiZWwgPSAicmQuZ3oiOworCQkJCQkJcmVnID0gPDB4MDAzOTAwMDAgMHgwMDQ0MDAwMD47IC8qIDQyNTBLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDdkMDAwMCB7IC8qIE1BQyBhZGRyZXNzIGFuZCBzZXJpYWwgbnVtYmVyICovCisJCQkJCQlsYWJlbCA9ICJ2ZW5kb3IiOworCQkJCQkJcmVnID0gPDB4MDA3ZDAwMDAgMHgwMDAxMDAwMD47IC8qIDY0S0IgKi8KKwkJCQkJfTsKKworCQkJCQlwYXJ0aXRpb25AMDA3ZTAwMDAgeworCQkJCQkJbGFiZWwgPSAiUmVkQm9vdCBjb25maWciOworCQkJCQkJcmVnID0gPDB4MDA3ZTAwMDAgMHgwMDAxMDAwMD47IC8qIDY0S0IgKi8KKwkJCQkJfTsKKworCQkJCQlwYXJ0aXRpb25AMDA3ZjAwMDAgeworCQkJCQkJbGFiZWwgPSAiRklTIGRpcmVjdG9yeSI7CisJCQkJCQlyZWcgPSA8MHgwMDdmMDAwMCAweDAwMDEwMDAwPjsgLyogNjRLQiAqLworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQlpMmNAMTEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eHh4LWkyYyI7CisJCQkJcGluY3RybC0wID0gPCZpMmMwX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQkJLyogTWFpbiBkZXZpY2UgUlRDIGNoaXAgKi8KKwkJCQlzMzUzOTBhOiBzMzUzOTBhQDMwIHsKKwkJCQkJIGNvbXBhdGlibGUgPSAic2lpLHMzNTM5MGEiOworCQkJCQkgcmVnID0gPDB4MzA+OworCQkJCX07CisJCQl9OworCisJCQkvKiBDb25uZWN0ZWQgdG8gYSBoZWFkZXIgb24gZGV2aWNlJ3MgUENCICovCisJCQlzZXJpYWxAMTIwMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKKwkJCS8qIENvbm5lY3RlZCB0byBhIFRJIE1TUDQzMEYyMTExIGZvciBwb3dlciBjb250cm9sICovCisJCQlzZXJpYWxAMTIxMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKKwkJCXBvd2Vyb2ZmQDEyMTAwIHsKKwkJCQljb21wYXRpYmxlID0gInN5bm9sb2d5LHBvd2VyLW9mZiI7CisJCQkJcmVnID0gPDB4MTIxMDAgMHgxMDA+OworCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKKwkJCX07CisKKwkJCS8qIHJlYXIgVVNCIHBvcnQsIG5lYXIgcmVzZXQgYnV0dG9uICovCisJCQl1c2JANTAwMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKKwkJCS8qIHJlYXIgVVNCIHBvcnQsIG5lYXIgUko0NSBwb3J0ICovCisJCQl1c2JANTEwMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKKwkJCW1kaW8geworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsgLyogTWFydmVsbCA4OEUxNTEyICovCisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJfTsKKworCQkJZXRoZXJuZXRANzAwMDAgeworCQkJICAgICAgIHN0YXR1cyA9ICJva2F5IjsKKwkJCSAgICAgICBwaHkgPSA8JnBoeTE+OworCQkJICAgICAgIHBoeS1tb2RlID0gInNnbWlpIjsKKwkJCX07CisKKwkJCXNhdGFAYTAwMDAgeworCQkJCW5yLXBvcnRzID0gPDI+OworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisJCX07CisJfTsKKworCWdwaW8tZmFuLTMyLTM4IHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQljb21wYXRpYmxlID0gImdwaW8tZmFuIjsKKwkJcGluY3RybC0wID0gPCZmYW5fY3RybF9sb3dfcGluICZmYW5fY3RybF9taWRfcGluCisJCQkgICAgICZmYW5fY3RybF9oaWdoX3BpbiAmZmFuX2FsYXJtX3Bpbj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCWdwaW9zID0gPCZncGlvMSAzMSBHUElPX0FDVElWRV9ISUdICisJCQkgJmdwaW8yICAwIEdQSU9fQUNUSVZFX0hJR0gKKwkJCSAmZ3BpbzIgIDEgR1BJT19BQ1RJVkVfSElHSD47CisJCWFsYXJtLWdwaW9zID0gPCZncGlvMSA2IEdQSU9fQUNUSVZFX0hJR0g+OworCQlncGlvLWZhbixzcGVlZC1tYXAgPSA8ICAgIDAgMAorCQkJCSAgICAgICAxMDAwIDEKKwkJCQkgICAgICAgMTE1MCAyCisJCQkJICAgICAgIDEzNTAgNAorCQkJCSAgICAgICAxNTAwIDMKKwkJCQkgICAgICAgMTY1MCA1CisJCQkJICAgICAgIDE3NTAgNgorCQkJCSAgICAgICAxOTAwIDcgPjsKKwl9OworCisJZ3Bpby1sZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQlwaW5jdHJsLTAgPSA8JmRpc2sxX2xlZF9waW4KKwkJCSAgICAgJmRpc2syX2xlZF9waW4+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJCWRpc2sxLWxlZC1hbWJlciB7CisJCQlsYWJlbCA9ICJzeW5vbG9neTphbWJlcjpkaXNrMSI7CisJCQlncGlvcyA9IDwmZ3BpbzAgMzEgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAia2VlcCI7CisJCX07CisKKwkJZGlzazItbGVkLWFtYmVyIHsKKwkJCWxhYmVsID0gInN5bm9sb2d5OmFtYmVyOmRpc2syIjsKKwkJCWdwaW9zID0gPCZncGlvMSAwIEdQSU9fQUNUSVZFX0xPVz47CisJCQlkZWZhdWx0LXN0YXRlID0gImtlZXAiOworCQl9OworCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwaW5jdHJsLTAgPSA8JnNhdGExX3B3cl9waW4gJnNhdGEyX3B3cl9waW4+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJCXNhdGExX3JlZ3VsYXRvcjogc2F0YTEtcmVndWxhdG9yIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwxPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIlNBVEExIFBvd2VyIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlzdGFydHVwLWRlbGF5LXVzID0gPDIwMDAwMDA+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJZ3BpbyA9IDwmZ3BpbzEgNSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlzYXRhMl9yZWd1bGF0b3I6IHNhdGEyLXJlZ3VsYXRvciB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Mj47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJTQVRBMiBQb3dlciI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJc3RhcnR1cC1kZWxheS11cyA9IDw0MDAwMDAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCWdwaW8gPSA8JmdwaW8xIDMwIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCX07Cit9OworCismcGluY3RybCB7CisJZGlzazFfbGVkX3BpbjogZGlzazEtbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWRpc2syX2xlZF9waW46IGRpc2syLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMV9wd3JfcGluOiBzYXRhMS1wd3ItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDM3IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTJfcHdyX3Bpbjogc2F0YTItcHdyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2MiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGExX3ByZXNfcGluOiBzYXRhMS1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2MCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEyX3ByZXNfcGluOiBzYXRhMi1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0OCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXN5bm9faWRfYml0MF9waW46IHN5bm8taWQtYml0MC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzeW5vX2lkX2JpdDFfcGluOiBzeW5vLWlkLWJpdDEtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDU2IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc3lub19pZF9iaXQyX3Bpbjogc3luby1pZC1iaXQyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1NyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXN5bm9faWRfYml0M19waW46IHN5bm8taWQtYml0My1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTgiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlmYW5fY3RybF9sb3dfcGluOiBmYW4tY3RybC1sb3ctcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDY1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJZmFuX2N0cmxfbWlkX3BpbjogZmFuLWN0cmwtbWlkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2NCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWZhbl9jdHJsX2hpZ2hfcGluOiBmYW4tY3RybC1oaWdoLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2MyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKKwl9OworCisJZmFuX2FsYXJtX3BpbjogZmFuLWFsYXJtLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzOCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXhwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXhwLmR0c2kKaW5kZXggODMyODZlYy4uMWFmNDI4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC14cC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAteHAuZHRzaQpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKLQkJCXNlcmlhbEAxMjAwMCB7CisJCQl1YXJ0MDogc2VyaWFsQDEyMDAwIHsKIAkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOwogCQkJCXJlZyA9IDwweDEyMDAwIDB4MTAwPjsKIAkJCQlyZWctc2hpZnQgPSA8Mj47CkBAIC0xNjAsNyArMTYwLDggQEAKIAkJCQljbG9ja3MgPSA8JmNvcmVjbGsgMD47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07Ci0JCQlzZXJpYWxAMTIxMDAgeworCisJCQl1YXJ0MTogc2VyaWFsQDEyMTAwIHsKIAkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOwogCQkJCXJlZyA9IDwweDEyMTAwIDB4MTAwPjsKIAkJCQlyZWctc2hpZnQgPSA8Mj47CkBAIC0xNzAsNiArMTcxLDEwIEBACiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKKwkJCXBpbmN0cmw6IHBpbi1jdHJsQDE4MDAwIHsKKwkJCQlyZWcgPSA8MHgxODAwMCAweDM4PjsKKwkJCX07CisKIAkJCWNvcmVkaXZjbGs6IGNvcmVkaXYtY2xvY2tAMTg3NDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLWNvcmVkaXYtY2xvY2siOwogCQkJCXJlZyA9IDwweDE4NzQwIDB4Yz47CkBAIC0xODAsNyArMTg1LDggQEAKIAogCQkJbWJ1c2M6IG1idXMtY29udHJvbGxlckAyMDAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG1idXMtY29udHJvbGxlciI7Ci0JCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPjsKKwkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+LAorCQkJCSAgICAgIDwweDIwMjUwIDB4OD47CiAJCQl9OwogCiAJCQltcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckAyMDAwMCB7CkBAIC0yMzIsNyArMjM4LDcgQEAKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAotCQkJbWRpbyB7CisJCQltZGlvOiBtZGlvIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tbWRpbyI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLmR0c2kKaW5kZXggNmIzYzIzYi4uZmRiM2MxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAuZHRzaQpAQCAtOTUsOSArOTUsMjQgQEAKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXVyb3JhLW91dGVyLWNhY2hlIjsKIAkJCQlyZWcgPSA8MHgwODAwMCAweDEwMDA+OwogCQkJCWNhY2hlLWlkLXBhcnQgPSA8MHgxMDA+OworCQkJCWNhY2hlLXVuaWZpZWQ7CiAJCQkJd3Qtb3ZlcnJpZGU7CiAJCQl9OwogCisJCQkvKgorCQkJICogRGVmYXVsdCBTUEkgcGluY3RybCBzZXR0aW5nLCBjYW4gYmUgb3ZlcndyaXR0ZW4gb24KKwkJCSAqIGJvYXJkIGxldmVsIGlmIGEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gaXMgdXNlZC4KKwkJCSAqLworCQkJc3BpMDogc3BpQDEwNjAwIHsKKwkJCQlwaW5jdHJsLTAgPSA8JnNwaTBfcGluczE+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQl9OworCisJCQlzcGkxOiBzcGlAMTA2ODAgeworCQkJCXBpbmN0cmwtMCA9IDwmc3BpMV9waW5zPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJfTsKKwogCQkJaTJjMDogaTJjQDExMDAwIHsKIAkJCQlyZWcgPSA8MHgxMTAwMCAweDIwPjsKIAkJCX07CkBAIC0xMDYsNzIgKzEyMSw2IEBACiAJCQkJcmVnID0gPDB4MTExMDAgMHgyMD47CiAJCQl9OwogCi0JCQlzeXN0ZW0tY29udHJvbGxlckAxODIwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zNzAteHAtc3lzdGVtLWNvbnRyb2xsZXIiOwotCQkJCXJlZyA9IDwweDE4MjAwIDB4MTAwPjsKLQkJCX07Ci0KLQkJCXBpbmN0cmwgewotCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjg4ZjY3MTAtcGluY3RybCI7Ci0JCQkJcmVnID0gPDB4MTgwMDAgMHgzOD47Ci0KLQkJCQlzZGlvX3BpbnMxOiBzZGlvLXBpbnMxIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDkiLCAgIm1wcDExIiwgIm1wcDEyIiwKLQkJCQkJCQkibXBwMTMiLCAibXBwMTQiLCAibXBwMTUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7Ci0JCQkJfTsKLQotCQkJCXNkaW9fcGluczI6IHNkaW8tcGluczIgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDciLCAibXBwNDgiLCAibXBwNDkiLAotCQkJCQkJCSJtcHA1MCIsICJtcHA1MSIsICJtcHA1MiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKLQkJCQl9OwotCi0JCQkJc2Rpb19waW5zMzogc2Rpby1waW5zMyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0OCIsICJtcHA0OSIsICJtcHA1MCIsCi0JCQkJCQkJIm1wcDUxIiwgIm1wcDUyIiwgIm1wcDUzIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzZDAiOwotCQkJCX07Ci0KLQkJCQlpMmMwX3BpbnM6IGkyYzAtcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyIiwgIm1wcDMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImkyYzAiOwotCQkJCX07Ci0KLQkJCQlpMnNfcGluczE6IGkycy1waW5zMSB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDYiLCAibXBwNyIsCi0JCQkJCQkgICAgICAgIm1wcDgiLCAibXBwOSIsICJtcHAxMCIsCi0JCQkJCQkgICAgICAgIm1wcDEyIiwgIm1wcDEzIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJhdWRpbyI7Ci0JCQkJfTsKLQotCQkJCWkyc19waW5zMjogaTJzLXBpbnMyIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ5IiwgIm1wcDQ3IiwgIm1wcDUwIiwKLQkJCQkJCSAgICAgICAibXBwNTkiLCAibXBwNTciLCAibXBwNjEiLAotCQkJCQkJICAgICAgICJtcHA2MiIsICJtcHA2MCIsICJtcHA1OCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiYXVkaW8iOwotCQkJCX07Ci0KLQkJCQltZGlvX3BpbnM6IG1kaW8tcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxNyIsICJtcHAxOCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UiOwotCQkJCX07Ci0KLQkJCQlnZTBfcmdtaWlfcGluczogZ2UwLXJnbWlpLXBpbnMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNSIsICJtcHA2IiwgIm1wcDciLCAibXBwOCIsCi0JCQkJCQkgICAgICAgIm1wcDkiLCAibXBwMTAiLCAibXBwMTEiLCAibXBwMTIiLAotCQkJCQkJICAgICAgICJtcHAxMyIsICJtcHAxNCIsICJtcHAxNSIsICJtcHAxNiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UwIjsKLQkJCQl9OwotCi0JCQkJZ2UxX3JnbWlpX3BpbnM6IGdlMS1yZ21paS1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDE5IiwgIm1wcDIwIiwgIm1wcDIxIiwgIm1wcDIyIiwKLQkJCQkJCSAgICAgICAibXBwMjMiLCAibXBwMjQiLCAibXBwMjUiLCAibXBwMjYiLAotCQkJCQkJICAgICAgICJtcHAyNyIsICJtcHAyOCIsICJtcHAyOSIsICJtcHAzMCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UxIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJZ3BpbzA6IGdwaW9AMTgxMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1ncGlvIjsKIAkJCQlyZWcgPSA8MHgxODEwMCAweDQwPjsKQEAgLTIwNSw2ICsxNTQsMjYgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDkxPjsKIAkJCX07CiAKKwkJCS8qCisJCQkgKiBEZWZhdWx0IFVBUlQgcGluY3RybCBzZXR0aW5nIHdpdGhvdXQgUlRTL0NUUywgY2FuCisJCQkgKiBiZSBvdmVyd3JpdHRlbiBvbiBib2FyZCBsZXZlbCBpZiBhIGRpZmZlcmVudAorCQkJICogY29uZmlndXJhdGlvbiBpcyB1c2VkLgorCQkJICovCisJCQl1YXJ0MDogc2VyaWFsQDEyMDAwIHsKKwkJCQlwaW5jdHJsLTAgPSA8JnVhcnQwX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQl9OworCisJCQl1YXJ0MTogc2VyaWFsQDEyMTAwIHsKKwkJCQlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQl9OworCisJCQlzeXN0ZW0tY29udHJvbGxlckAxODIwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zNzAteHAtc3lzdGVtLWNvbnRyb2xsZXIiOworCQkJCXJlZyA9IDwweDE4MjAwIDB4MTAwPjsKKwkJCX07CisKIAkJCWdhdGVjbGs6IGNsb2NrLWdhdGluZy1jb250cm9sQDE4MjIwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC1nYXRpbmctY2xvY2siOwogCQkJCXJlZyA9IDwweDE4MjIwIDB4ND47CkBAIC0yNDksNiArMjE4LDcgQEAKIAkJCX07CiAKIAkJCWF1ZGlvX2NvbnRyb2xsZXI6IGF1ZGlvLWNvbnRyb2xsZXJAMzAwMDAgeworCQkJCSNzb3VuZC1kYWktY2VsbHMgPSA8MT47CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYTM3MC1hdWRpbyI7CiAJCQkJcmVnID0gPDB4MzAwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDkzPjsKQEAgLTMwNSwzICsyNzUsOTEgQEAKIAkJfTsKIAl9OwogfTsKKworJnBpbmN0cmwgeworCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjg4ZjY3MTAtcGluY3RybCI7CisKKwlzcGkwX3BpbnMxOiBzcGkwLXBpbnMxIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMzIiwgIm1wcDM0IiwKKwkJCSAgICAgICAibXBwMzUiLCAibXBwMzYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNwaTAiOworCX07CisKKwlzcGkwX3BpbnMyOiBzcGkwX3BpbnMyIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMyIiwgIm1wcDYzIiwKKwkJCSAgICAgICAibXBwNjQiLCAibXBwNjUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNwaTAiOworCX07CisKKwlzcGkxX3BpbnM6IHNwaTEtcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0OSIsICJtcHA1MCIsCisJCQkgICAgICAgIm1wcDUxIiwgIm1wcDUyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJzcGkxIjsKKwl9OworCisJdWFydDBfcGluczogdWFydDAtcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAwIiwgIm1wcDEiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInVhcnQwIjsKKwl9OworCisJdWFydDFfcGluczogdWFydDEtcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MSIsICJtcHA0MiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDEiOworCX07CisKKwlzZGlvX3BpbnMxOiBzZGlvLXBpbnMxIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDkiLCAgIm1wcDExIiwgIm1wcDEyIiwKKwkJCQkibXBwMTMiLCAibXBwMTQiLCAibXBwMTUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7CisJfTsKKworCXNkaW9fcGluczI6IHNkaW8tcGluczIgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDciLCAibXBwNDgiLCAibXBwNDkiLAorCQkJCSJtcHA1MCIsICJtcHA1MSIsICJtcHA1MiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKKwl9OworCisJc2Rpb19waW5zMzogc2Rpby1waW5zMyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0OCIsICJtcHA0OSIsICJtcHA1MCIsCisJCQkJIm1wcDUxIiwgIm1wcDUyIiwgIm1wcDUzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJzZDAiOworCX07CisKKwlpMmMwX3BpbnM6IGkyYzAtcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAyIiwgIm1wcDMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImkyYzAiOworCX07CisKKwlpMnNfcGluczE6IGkycy1waW5zMSB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDYiLCAibXBwNyIsCisJCQkgICAgICAgIm1wcDgiLCAibXBwOSIsICJtcHAxMCIsCisJCQkgICAgICAgIm1wcDEyIiwgIm1wcDEzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJhdWRpbyI7CisJfTsKKworCWkyc19waW5zMjogaTJzLXBpbnMyIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ5IiwgIm1wcDQ3IiwgIm1wcDUwIiwKKwkJCSAgICAgICAibXBwNTkiLCAibXBwNTciLCAibXBwNjEiLAorCQkJICAgICAgICJtcHA2MiIsICJtcHA2MCIsICJtcHA1OCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiYXVkaW8iOworCX07CisKKwltZGlvX3BpbnM6IG1kaW8tcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAxNyIsICJtcHAxOCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UiOworCX07CisKKwlnZTBfcmdtaWlfcGluczogZ2UwLXJnbWlpLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNSIsICJtcHA2IiwgIm1wcDciLCAibXBwOCIsCisJCQkgICAgICAgIm1wcDkiLCAibXBwMTAiLCAibXBwMTEiLCAibXBwMTIiLAorCQkJICAgICAgICJtcHAxMyIsICJtcHAxNCIsICJtcHAxNSIsICJtcHAxNiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UwIjsKKwl9OworCisJZ2UxX3JnbWlpX3BpbnM6IGdlMS1yZ21paS1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDE5IiwgIm1wcDIwIiwgIm1wcDIxIiwgIm1wcDIyIiwKKwkJCSAgICAgICAibXBwMjMiLCAibXBwMjQiLCAibXBwMjUiLCAibXBwMjYiLAorCQkJICAgICAgICJtcHAyNyIsICJtcHAyOCIsICJtcHAyOSIsICJtcHAzMCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UxIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzUuZHRzaQppbmRleCBkZTY1NzE0Li45NzIxZTU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzc1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3NS5kdHNpCkBAIC0zNiw2ICszNiwxMiBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDIwMDAwMDAwMDA+OwogCQl9OworCQkvKiAyNSBNSHogcmVmZXJlbmNlIGNyeXN0YWwgKi8KKwkJcmVmY2xrOiBvc2NpbGxhdG9yIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKKwkJfTsKIAl9OwogCiAJY3B1cyB7CkBAIC0zNjYsMTMgKzM3MiwxNSBAQAogCQkJCQkJICAgICAgPCZnaWMgIEdJQ19TUEkgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkJCQkgICAgICA8Jm1waWMgNT4sCiAJCQkJCQkgICAgICA8Jm1waWMgNj47Ci0JCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OworCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPiwgPCZyZWZjbGs+OworCQkJCWNsb2NrLW5hbWVzID0gIm5iY2xrIiwgImZpeGVkIjsKIAkJCX07CiAKIAkJCXdhdGNoZG9nQDIwMzAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3NS13ZHQiOwogCQkJCXJlZyA9IDwweDIwMzAwIDB4MzQ+LCA8MHgyMDcwNCAweDQ+LCA8MHgxODI1NCAweDQ+OwotCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKKwkJCQljbG9ja3MgPSA8JmNvcmVjbGsgMD4sIDwmcmVmY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJuYmNsayIsICJmaXhlZCI7CiAJCQl9OwogCiAJCQljcHVyc3RAMjA4MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4NS1kYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LWRiLmR0cwppbmRleCAxYWY4ODZmLi4yYWFhOWQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LWRiLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LWRiLmR0cwpAQCAtMTE2LDExICsxMTYsMTEgQEAKIAkJCX07CiAKIAkJCXNkaGNpQGQ4MDAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsKIAkJCQlicm9rZW4tY2Q7CiAJCQkJd3AtaW52ZXJ0ZWQ7CiAJCQkJYnVzLXdpZHRoID0gPDg+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCQluby0xLTgtdjsKIAkJCX07CiAKIAkJCXVzYjNAZjAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4eC5kdHNpCmluZGV4IDI0MmQwZWMuLjc0MzkxZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zOHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzh4LmR0c2kKQEAgLTI1LDkgKzI1LDkgQEAKIAlhbGlhc2VzIHsKIAkJZ3BpbzAgPSAmZ3BpbzA7CiAJCWdwaW8xID0gJmdwaW8xOwotCQlldGgwID0gJmV0aDA7Ci0JCWV0aDEgPSAmZXRoMTsKLQkJZXRoMiA9ICZldGgyOworCQlldGhlcm5ldDAgPSAmZXRoMDsKKwkJZXRoZXJuZXQxID0gJmV0aDE7CisJCWV0aGVybmV0MiA9ICZldGgyOwogCX07CiAKIAlzb2MgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWF4cHdpZmlhcC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtYXhwd2lmaWFwLmR0cwppbmRleCBhNTVhOTdhLi5jYTAyMDBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtYXhwd2lmaWFwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtYXhwd2lmaWFwLmR0cwpAQCAtNjAsNDAgKzYwLDYgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCXBpbmN0cmwtMCA9IDwmcG14X3BoeV9pbnQ+OwotCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0KLQkJCQlwbXhfZ2UwOiBwbXgtZ2UwIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDAiLCAibXBwMSIsICJtcHAyIiwgIm1wcDMiLAotCQkJCQkJICAgICAgICJtcHA0IiwgIm1wcDUiLCAibXBwNiIsICJtcHA3IiwKLQkJCQkJCSAgICAgICAibXBwOCIsICJtcHA5IiwgIm1wcDEwIiwgIm1wcDExIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTAiOwotCQkJCX07Ci0KLQkJCQlwbXhfZ2UxOiBwbXgtZ2UxIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEyIiwgIm1wcDEzIiwgIm1wcDE0IiwgIm1wcDE1IiwKLQkJCQkJCSAgICAgICAibXBwMTYiLCAibXBwMTciLCAibXBwMTgiLCAibXBwMTkiLAotCQkJCQkJICAgICAgICJtcHAyMCIsICJtcHAyMSIsICJtcHAyMiIsICJtcHAyMyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UxIjsKLQkJCQl9OwotCi0JCQkJcG14X2tleXM6IHBteC1rZXlzIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMzIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJcG14X3NwaTogcG14LXNwaSB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzNiIsICJtcHAzNyIsICJtcHAzOCIsICJtcHAzOSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic3BpIjsKLQkJCQl9OwotCi0JCQkJcG14X3BoeV9pbnQ6IHBteC1waHktaW50IHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJc2VyaWFsQDEyMDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtMTE4LDE0ICs4NCwxNCBAQAogCQkJfTsKIAogCQkJZXRoZXJuZXRANzAwMDAgewotCQkJCXBpbmN0cmwtMCA9IDwmcG14X2dlMD47CisJCQkJcGluY3RybC0wID0gPCZnZTBfcmdtaWlfcGlucz47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQkJcGh5ID0gPCZwaHkwPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paS1pZCI7CiAJCQl9OwogCQkJZXRoZXJuZXRANzQwMDAgewotCQkJCXBpbmN0cmwtMCA9IDwmcG14X2dlMT47CisJCQkJcGluY3RybC0wID0gPCZnZTFfcmdtaWlfcGlucz47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQkJcGh5ID0gPCZwaHkxPjsKQEAgLTEzNCw4ICsxMDAsNiBAQAogCiAJCQlzcGkwOiBzcGlAMTA2MDAgewogCQkJCXN0YXR1cyA9ICJva2F5IjsKLQkJCQlwaW5jdHJsLTAgPSA8JnBteF9zcGk+OwotCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKIAkJCQlzcGktZmxhc2hAMCB7CiAJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMTUyLDcgKzExNiw3IEBACiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQlwaW5jdHJsLTAgPSA8JnBteF9rZXlzPjsKKwkJcGluY3RybC0wID0gPCZrZXlzX3Bpbj47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKIAkJYnV0dG9uQDEgewpAQCAtMTYyLDMgKzEyNiwxOCBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJcGluY3RybC0wID0gPCZwaHlfaW50X3Bpbj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCWtleXNfcGluOiBrZXlzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXBoeV9pbnRfcGluOiBwaHktaW50LXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtZ3AuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWdwLmR0cwppbmRleCAwNDc4YzU1Li5lYTg2NzM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtZ3AuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1ncC5kdHMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogCiAvZHRzLXYxLzsKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KICNpbmNsdWRlICJhcm1hZGEteHAtbXY3ODQ2MC5kdHNpIgogCiAvIHsKQEAgLTQ4LDYgKzQ5LDE0IEBACiAJCSAgICAgIDwweDAwMDAwMDAxIDB4MDAwMDAwMDAgMHgwMDAwMDAwMSAweDAwMDAwMDAwPjsKIAl9OwogCisJY3B1cyB7CisJCXBtX3BpYyB7CisJCQljdHJsLWdwaW9zID0gPCZncGlvMCAxNiBHUElPX0FDVElWRV9MT1c+LAorCQkJCSAgICAgPCZncGlvMCAxNyBHUElPX0FDVElWRV9MT1c+LAorCQkJCSAgICAgPCZncGlvMCAxOCBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CisKIAlzb2MgewogCQlyYW5nZXMgPSA8TUJVU19JRCgweGYwLCAweDAxKSAwIDAgMHhmMTAwMDAwMCAweDEwMDAwMAogCQkJICBNQlVTX0lEKDB4MDEsIDB4MWQpIDAgMCAweGZmZjAwMDAwIDB4MTAwMDAwCkBAIC0xMTUsNyArMTI0LDE1IEBACiAJCQlzZXJpYWxAMTIzMDAgewogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07Ci0KKwkJCXBpbmN0cmwgeworCQkJCXBpbmN0cmwtMCA9IDwmcGljX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJcGljX3BpbnM6IHBpYy1waW5zLTAgeworCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTYiLCAibXBwMTciLAorCQkJCQkJICAgICAgICJtcHAxOCI7CisJCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQkJfTsKKwkJCX07CiAJCQlzYXRhQGEwMDAwIHsKIAkJCQluci1wb3J0cyA9IDwyPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbGVub3ZvLWl4NC0zMDBkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1sZW5vdm8taXg0LTMwMGQuZHRzCmluZGV4IDQ2OWNmNzEuLmEyZWY5M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1sZW5vdm8taXg0LTMwMGQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1sZW5vdm8taXg0LTMwMGQuZHRzCkBAIC0yMiw3ICsyMiw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCBlYXJseXByaW50ayI7Ci0JCXN0ZG91dC1wYXRoID0gIi9zb2MvaW50ZXJuYWwtcmVncy9zZXJpYWxAMTIwMDAiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJbWVtb3J5IHsKQEAgLTUxLDM3ICs1MSw2IEBACiAJCX07CiAKIAkJaW50ZXJuYWwtcmVncyB7Ci0JCQlwaW5jdHJsIHsKLQkJCQlwb3dlcm9mZl9waW46IHBvd2Vyb2ZmLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyNCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXBvd2VyX2J1dHRvbl9waW46IHBvd2VyLWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDQiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlyZXNldF9idXR0b25fcGluOiByZXNldC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCQkJCXNlbGVjdF9idXR0b25fcGluOiBzZWxlY3QtYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0MSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNjcm9sbF9idXR0b25fcGluOiBzY3JvbGwtYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0MiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWhkZF9sZWRfcGluOiBoZGQtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyNiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQkJCX07Ci0KIAkJCXNlcmlhbEAxMjAwMCB7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKQEAgLTk3LDEyICs2NiwxNiBAQAogCQkJfTsKIAogCQkJZXRoZXJuZXRANzAwMDAgeworCQkJCXBpbmN0cmwtMCA9IDwmZ2UwX3JnbWlpX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJCXBoeSA9IDwmcGh5MD47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOwogCQkJfTsKIAogCQkJZXRoZXJuZXRANzQwMDAgeworCQkJCXBpbmN0cmwtMCA9IDwmZ2UxX3JnbWlpX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJCXBoeSA9IDwmcGh5MT47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOwpAQCAtMTI1LDYgKzk4LDExIEBACiAJCQkJCXJlZyA9IDwweDJlPjsKIAkJCQl9OwogCisJCQkJZWVwcm9tQDUwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCwyNGM2NCI7CisJCQkJCXJlZyA9IDwweDUwPjsKKwkJCQl9OworCiAJCQkJcGNmODU2M0A1MSB7CiAJCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOwogCQkJCQlyZWcgPSA8MHg1MT47CkBAIC0yMjYsNyArMjA0LDcgQEAKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDA+OwotCQkJcmVnaXN0ZXJzLW51bWJlciA9IDwyPjsKKwkJCXJlZ2lzdGVycy1udW1iZXIgPSA8MT47CiAJCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCQl9OwogCX07CkBAIC0yODIsMyArMjYwLDM0IEBACiAJCWdwaW9zID0gPCZncGlvMCAyNCBHUElPX0FDVElWRV9ISUdIPjsKIAl9OwogfTsKKworJnBpbmN0cmwgeworCXBvd2Vyb2ZmX3BpbjogcG93ZXJvZmYtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDI0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisJc2VsZWN0X2J1dHRvbl9waW46IHNlbGVjdC1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQxIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2Nyb2xsX2J1dHRvbl9waW46IHNjcm9sbC1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJaGRkX2xlZF9waW46IGhkZC1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDI2IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjMwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODIzMC5kdHNpCmluZGV4IDI1OTJlMWMuLjI4MWNjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjMwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyMzAuZHRzaQpAQCAtMTY3LDE3ICsxNjcsNiBAQAogCQl9OwogCiAJCWludGVybmFsLXJlZ3MgewotCQkJcGluY3RybCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NzgyMzAtcGluY3RybCI7Ci0JCQkJcmVnID0gPDB4MTgwMDAgMHgzOD47Ci0KLQkJCQlzZGlvX3BpbnM6IHNkaW8tcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzMCIsICJtcHAzMSIsICJtcHAzMiIsCi0JCQkJCQkgICAgICAgIm1wcDMzIiwgIm1wcDM0IiwgIm1wcDM1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzZDAiOwotCQkJCX07Ci0JCQl9OwotCiAJCQlncGlvMDogZ3Bpb0AxODEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWdwaW8iOwogCQkJCXJlZyA9IDwweDE4MTAwIDB4NDA+OwpAQCAtMjAyLDMgKzE5MSw3IEBACiAJCX07CiAJfTsKIH07CisKKyZwaW5jdHJsIHsKKwljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY3ODIzMC1waW5jdHJsIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODI2MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyNjAuZHRzaQppbmRleCA0ODBlMjM3Li5kN2E4ZDBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODI2MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjYwLmR0c2kKQEAgLTI1MSwxNyArMjUxLDYgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjc4MjYwLXBpbmN0cmwiOwotCQkJCXJlZyA9IDwweDE4MDAwIDB4Mzg+OwotCi0JCQkJc2Rpb19waW5zOiBzZGlvLXBpbnMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzAiLCAibXBwMzEiLCAibXBwMzIiLAotCQkJCQkJICAgICAgICJtcHAzMyIsICJtcHAzNCIsICJtcHAzNSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJZ3BpbzA6IGdwaW9AMTgxMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1ncGlvIjsKIAkJCQlyZWcgPSA8MHgxODEwMCAweDQwPjsKQEAgLTMwNSwzICsyOTQsNyBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NzgyNjAtcGluY3RybCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12Nzg0NjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4NDYwLmR0c2kKaW5kZXggMmM3YjFmZS4uOWM0MGMxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12Nzg0NjAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODQ2MC5kdHNpCkBAIC0yODksMTcgKzI4OSw2IEBACiAJCX07CiAKIAkJaW50ZXJuYWwtcmVncyB7Ci0JCQlwaW5jdHJsIHsKLQkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY3ODQ2MC1waW5jdHJsIjsKLQkJCQlyZWcgPSA8MHgxODAwMCAweDM4PjsKLQotCQkJCXNkaW9fcGluczogc2Rpby1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMwIiwgIm1wcDMxIiwgIm1wcDMyIiwKLQkJCQkJCSAgICAgICAibXBwMzMiLCAibXBwMzQiLCAibXBwMzUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7Ci0JCQkJfTsKLQkJCX07Ci0KIAkJCWdwaW8wOiBncGlvQDE4MTAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tZ3BpbyI7CiAJCQkJcmVnID0gPDB4MTgxMDAgMHg0MD47CkBAIC0zNDMsMyArMzMyLDcgQEAKIAkJfTsKIAl9OwogfTsKKworJnBpbmN0cmwgeworCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjc4NDYwLXBpbmN0cmwiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1uZXRnZWFyLXJuMjEyMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbmV0Z2Vhci1ybjIxMjAuZHRzCmluZGV4IDdkOGYzMjguLmQ4MTQzMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1uZXRnZWFyLXJuMjEyMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW5ldGdlYXItcm4yMTIwLmR0cwpAQCAtNTUsODYgKzU1LDEwIEBACiAJCX07CiAKIAkJaW50ZXJuYWwtcmVncyB7Ci0JCQlwaW5jdHJsIHsKLQkJCQlwb3dlcm9mZjogcG93ZXJvZmYgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDIiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlwb3dlcl9idXR0b25fcGluOiBwb3dlci1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI3IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJcmVzZXRfYnV0dG9uX3BpbjogcmVzZXQtYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0MSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGExX2xlZF9waW46IHNhdGExLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzEiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlzYXRhMl9sZWRfcGluOiBzYXRhMi1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQwIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTNfbGVkX3Bpbjogc2F0YTMtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGE0X2xlZF9waW46IHNhdGE0LWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDciOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlzYXRhMV9wb3dlcl9waW46IHNhdGExLXBvd2VyLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyNCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGEyX3Bvd2VyX3Bpbjogc2F0YTItcG93ZXItcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTNfcG93ZXJfcGluOiBzYXRhMy1wb3dlci1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjYiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlzYXRhNF9wb3dlcl9waW46IHNhdGE0LXBvd2VyLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyOCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGExX3ByZXNfcGluOiBzYXRhMS1wcmVzLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzMiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGEyX3ByZXNfcGluOiBzYXRhMi1wcmVzLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzMyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGEzX3ByZXNfcGluOiBzYXRhMy1wcmVzLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzNCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGE0X3ByZXNfcGluOiBzYXRhNC1wcmVzLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzNSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWVycl9sZWRfcGluOiBlcnItbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKKwkJCS8qIFR3byByZWFyIGVTQVRBIHBvcnRzICovCisJCQlzYXRhQGEwMDAwIHsKKwkJCQluci1wb3J0cyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCiAJCQlzZXJpYWxAMTIwMDAgewpAQCAtMzI4LDMgKzI1Miw4NSBAQAogCQlncGlvcyA9IDwmZ3BpbzEgMTAgR1BJT19BQ1RJVkVfTE9XPjsKIAl9OwogfTsKKworJnBpbmN0cmwgeworCXBvd2Vyb2ZmOiBwb3dlcm9mZiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXBvd2VyX2J1dHRvbl9waW46IHBvd2VyLWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjciOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlyZXNldF9idXR0b25fcGluOiByZXNldC1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQxIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTFfbGVkX3Bpbjogc2F0YTEtbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEyX2xlZF9waW46IHNhdGEyLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDAiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhM19sZWRfcGluOiBzYXRhMy1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTRfbGVkX3Bpbjogc2F0YTQtbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGExX3Bvd2VyX3Bpbjogc2F0YTEtcG93ZXItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDI0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTJfcG93ZXJfcGluOiBzYXRhMi1wb3dlci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhM19wb3dlcl9waW46IHNhdGEzLXBvd2VyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAyNiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGE0X3Bvd2VyX3Bpbjogc2F0YTQtcG93ZXItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDI4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTFfcHJlc19waW46IHNhdGExLXByZXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTJfcHJlc19waW46IHNhdGEyLXByZXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTNfcHJlc19waW46IHNhdGEzLXByZXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDM0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTRfcHJlc19waW46IHNhdGE0LXByZXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDM1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJZXJyX2xlZF9waW46IGVyci1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1vcGVuYmxvY2tzLWF4My00LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1vcGVuYmxvY2tzLWF4My00LmR0cwppbmRleCA0ZTVhNTllLi42ZjZiMDkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtb3BlbmJsb2Nrcy1heDMtNC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW9wZW5ibG9ja3MtYXgzLTQuZHRzCkBAIC03NywxMiArNzcsNyBAQAogCQkJc2VyaWFsQDEyMTAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwotCQkJcGluY3RybCB7Ci0JCQkJbGVkX3BpbnM6IGxlZC1waW5zLTAgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiLCAibXBwNTEiLCAibXBwNTMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQl9OworCiAJCQlsZWRzIHsKIAkJCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTE4NywzICsxODIsMTAgQEAKIAkJfTsKIAl9OwogfTsKKworJnBpbmN0cmwgeworCWxlZF9waW5zOiBsZWQtcGlucy0wIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ5IiwgIm1wcDUxIiwgIm1wcDUzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1zeW5vbG9neS1kczQxNC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtc3lub2xvZ3ktZHM0MTQuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OWZkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtc3lub2xvZ3ktZHM0MTQuZHRzCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogRGV2aWNlIFRyZWUgZmlsZSBmb3IgU3lub2xvZ3kgRFM0MTQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIEFybmF1ZCBFQkFMQVJEIDxhcm5vQG5hdGlzYmFkLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIE5vdGU6IHRoaXMgRGV2aWNlIFRyZWUgYXNzdW1lcyB0aGF0IHRoZSBib290bG9hZGVyIGhhcyByZW1hcHBlZCB0aGUKKyAqIGludGVybmFsIHJlZ2lzdGVycyB0byAweGYxMDAwMDAwIChpbnN0ZWFkIG9mIHRoZSBvbGQgMHhkMDAwMDAwMCkuCisgKiBUaGUgMHhmMTAwMDAwMCBpcyB0aGUgZGVmYXVsdCB1c2VkIGJ5IHRoZSByZWNlbnQsIERULWNhcGFibGUsIFUtQm9vdAorICogYm9vdGxvYWRlcnMgcHJvdmlkZWQgYnkgTWFydmVsbC4gSXQgaXMgdXNlZCBpbiByZWNlbnQgdmVyc2lvbnMgb2YKKyAqIERTTSBzb2Z0d2FyZSBwcm92aWRlZCBieSBTeW5vbG9neS4gTm9uZXRoZWxlc3MsIHNvbWUgZWFybGllciBib2FyZHMKKyAqIHdlcmUgZGVsaXZlcmVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiB1LWJvb3QgdGhhdCBsZWZ0IGludGVybmFsCisgKiByZWdpc3RlcnMgbWFwcGVkIGF0IDB4ZDAwMDAwMDAuIElmIHlvdSBoYXZlIHN1Y2ggYSBkZXZpY2UgeW91IHdpbGwKKyAqIG5vdCBiZSBhYmxlIHRvIGRpcmVjdGx5IGJvb3QgYSBrZXJuZWwgYmFzZWQgb24gdGhpcyBEZXZpY2UgVHJlZS4gSW4KKyAqIHRoYXQgY2FzZSwgdGhlIHByZWZlcnJlZCBzb2x1dGlvbiBpcyB0byB1cGRhdGUgeW91ciBib290bG9hZGVyIChlLmcuCisgKiBieSB1cGdyYWRpbmcgdG8gbGF0ZXN0IHZlcnNpb24gb2YgRFNNLCBvciBidWlsZGluZyBhIG5ldyBvbmUgYW5kCisgKiBpbnN0YWxsaW5nIGl0IGZyb20gdS1ib290IHByb21wdCkgb3IgYWRqdXN0IHRoZSBEZXZpdmUgVHJlZQorICogKHMvMHhmMTAwMDAwMC8weGQwMDAwMDAwLyBpbiAncmFuZ2VzJyBiZWxvdykuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgImFybWFkYS14cC1tdjc4MjMwLmR0c2kiCisKKy8geworCW1vZGVsID0gIlN5bm9sb2d5IERTNDE0IjsKKwljb21wYXRpYmxlID0gInN5bm9sb2d5LGRzNDE0IiwgIm1hcnZlbGwsYXJtYWRheHAtbXY3ODIzMCIsCisJCSAgICAgIm1hcnZlbGwsYXJtYWRheHAiLCAibWFydmVsbCxhcm1hZGEtMzcwLXhwIjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwwIDB4MDAwMDAwMDAgMCAweDQwMDAwMDAwPjsgLyogMUdCICovCisJfTsKKworCXNvYyB7CisJCXJhbmdlcyA9IDxNQlVTX0lEKDB4ZjAsIDB4MDEpIDAgMCAweGYxMDAwMDAwIDB4MTAwMDAwCisJCQkgIE1CVVNfSUQoMHgwMSwgMHgxZCkgMCAwIDB4ZmZmMDAwMDAgMHgxMDAwMDA+OworCisJCXBjaWUtY29udHJvbGxlciB7CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCS8qCisJCQkgKiBDb25uZWN0ZWQgdG8gTWFydmVsbCA4OFNYNzA0MiBTQVRBLUlJIGNvbnRyb2xsZXIKKwkJCSAqIGhhbmRsaW5nIHRoZSBmb3VyIGRpc2tzLgorCQkJICovCisJCQlwY2llQDEsMCB7CisJCQkJLyogUG9ydCAwLCBMYW5lIDAgKi8KKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQkvKgorCQkJICogQ29ubmVjdGVkIHRvIEV0cm9uVGVjaCBFSjE2OEEgWEhDSSBjb250cm9sbGVyCisJCQkgKiBwcm92aWRpbmcgdGhlIHR3byByZWFyIFVTQiAzLjAgcG9ydHMuCisJCQkgKi8KKwkJCXBjaWVANSwwIHsKKwkJCQkvKiBQb3J0IDEsIExhbmUgMCAqLworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisJCX07CisKKwkJaW50ZXJuYWwtcmVncyB7CisKKwkJCS8qIFJUQyBpcyBwcm92aWRlZCBieSBTZWlrbyBTLTM1MzkwQSBiZWxvdyAqLworCQkJcnRjQDEwMzAwIHsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJc3BpMDogc3BpQDEwNjAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCQlzcGktZmxhc2hAMCB7CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQkJY29tcGF0aWJsZSA9ICJtaWNyb24sbjI1cTA2NCI7CisJCQkJCXJlZyA9IDwwPjsgLyogQ2hpcCBzZWxlY3QgMCAqLworCQkJCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisKKwkJCQkJLyoKKwkJCQkJICogV2FybmluZyEKKwkJCQkJICoKKwkJCQkJICogU3lub2xvZ3kgdS1ib290IHVzZXMgaXRzIGNvbXBpbGVkLWluIGVudmlyb25tZW50CisJCQkJCSAqIGFuZCBpdCBzZWVtcyBTeW5vbG9neSBkaWQgbm90IGNhcmUgdG8gY2hhbmdlIHUtYm9vdAorCQkJCQkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgdG8gYWxsb3cgc2F2aW5nIGEKKwkJCQkJICogbW9kaWZpZWQgZW52aXJvbm1lbnQgYXQgYSBzZW5zaWJsZSBsb2NhdGlvbi4gU28sCisJCQkJCSAqIGlmIHlvdSBkbyBhICdzYXZlZW52JyB1bmRlciB1LWJvb3QsIHlvdXIgbW9kaWZpZWQKKwkJCQkJICogZW52aXJvbm1lbnQgd2lsbCBiZSBzYXZlZCBhdCAxTUIgYWZ0ZXIgdGhlIHN0YXJ0CisJCQkJCSAqIG9mIHRoZSBmbGFzaCwgaS5lLiBpbiB0aGUgbWlkZGxlIG9mIHRoZSB1SW1hZ2UuCisJCQkJCSAqIEZvciB0aGF0IHJlYXNvbiwgaXQgaXMgc3Ryb25nbHkgYWR2aXNlZCBub3QgdG8KKwkJCQkJICogY2hhbmdlIHRoZSBkZWZhdWx0IGVudmlyb25tZW50LCB1bmxlc3MgeW91IGtub3cKKwkJCQkJICogd2hhdCB5b3UgYXJlIGRvaW5nLgorCQkJCQkgKi8KKwkJCQkJcGFydGl0aW9uQDAwMDAwMDAwIHsgLyogdS1ib290ICovCisJCQkJCQlsYWJlbCA9ICJSZWRCb290IjsKKwkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwZDAwMDA+OyAvKiA4MzJLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDBjMDAwMCB7IC8qIHVJbWFnZSAqLworCQkJCQkJbGFiZWwgPSAiekltYWdlIjsKKwkJCQkJCXJlZyA9IDwweDAwMGQwMDAwIDB4MDAyZDAwMDA+OyAvKiAyODgwS0IgKi8KKwkJCQkJfTsKKworCQkJCQlwYXJ0aXRpb25AMDAzYTAwMDAgeyAvKiB1SW5pdHJhbWZzICovCisJCQkJCQlsYWJlbCA9ICJyZC5neiI7CisJCQkJCQlyZWcgPSA8MHgwMDNhMDAwMCAweDAwNDMwMDAwPjsgLyogNDI1MEtCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwN2QwMDAwIHsgLyogTUFDIGFkZHJlc3MgYW5kIHNlcmlhbCBudW1iZXIgKi8KKwkJCQkJCWxhYmVsID0gInZlbmRvciI7CisJCQkJCQlyZWcgPSA8MHgwMDdkMDAwMCAweDAwMDEwMDAwPjsgLyogNjRLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDdlMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJSZWRCb290IGNvbmZpZyI7CisJCQkJCQlyZWcgPSA8MHgwMDdlMDAwMCAweDAwMDEwMDAwPjsgLyogNjRLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDdmMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJGSVMgZGlyZWN0b3J5IjsKKwkJCQkJCXJlZyA9IDwweDAwN2YwMDAwIDB4MDAwMTAwMDA+OyAvKiA2NEtCICovCisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWkyY0AxMTAwMCB7CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQkJczM1MzkwYTogczM1MzkwYUAzMCB7CisJCQkJCSBjb21wYXRpYmxlID0gInNpaSxzMzUzOTBhIjsKKwkJCQkJIHJlZyA9IDwweDMwPjsKKwkJCQl9OworCQkJfTsKKworCQkJLyogQ29ubmVjdGVkIHRvIGEgaGVhZGVyIG9uIGRldmljZSdzIFBDQi4gVGhpcworCQkJICogcHJvdmlkZXMgdGhlIG1haW4gY29uc29sZSBmb3IgdGhlIGRldmljZS4KKwkJCSAqCisJCQkgKiBXYXJuaW5nOiB0aGUgZGV2aWNlIG1heSBub3QgYm9vdCB3aXRoIGEgMy4zVgorCQkJICogVVNCLXNlcmlhbCBjb252ZXJ0ZXIgY29ubmVjdGVkIHdoZW4gdGhlIHBvd2VyCisJCQkgKiBidXR0b24gaXMgcHJlc3NlZC4gVGhlIGNvbnZlcnRlciBuZWVkcyB0byBiZQorCQkJICogY29ubmVjdGVkIGEgZmV3IHNlY29uZHMgYWZ0ZXIgcHJlc3NpbmcgdGhlCisJCQkgKiBwb3dlciBidXR0b24uIFRoaXMgaXMgcG9zc2libHkgZHVlIHRvIFVBUlQwX1RYRAorCQkJICogcGluIGJlaW5nIHNhbXBsZWQgYXQgcmVzZXQgKGJpdCAwIG9mIFNBUikuCisJCQkgKi8KKwkJCXNlcmlhbEAxMjAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJLyogQ29ubmVjdGVkIHRvIGEgTWljcm9jaGlwIFBJQzE2Rjg4MyBmb3IgcG93ZXIgY29udHJvbCAqLworCQkJc2VyaWFsQDEyMTAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQlwb3dlcm9mZkAxMjEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzeW5vbG9neSxwb3dlci1vZmYiOworCQkJCXJlZyA9IDwweDEyMTAwIDB4MTAwPjsKKwkJCQljbG9ja3MgPSA8JmNvcmVjbGsgMD47CisJCQl9OworCisJCQkvKiBGcm9udCBVU0IgMi4wIHBvcnQgKi8KKwkJCXVzYkA1MDAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJbWRpbyB7CisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeyAvKiBNYXJ2ZWxsIDg4RTE1MTIgKi8KKwkJCQkJcmVnID0gPDA+OworCQkJCX07CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7IC8qIE1hcnZlbGwgODhFMTUxMiAqLworCQkJCQlyZWcgPSA8MT47CisJCQkJfTsKKwkJCX07CisKKwkJCWV0aGVybmV0QDcwMDAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQkJcGluY3RybC0wID0gPCZnZTBfcmdtaWlfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQlwaHkgPSA8JnBoeTE+OworCQkJCXBoeS1tb2RlID0gInJnbWlpLWlkIjsKKwkJCX07CisKKwkJCWV0aGVybmV0QDc0MDAwIHsKKwkJCQlwaW5jdHJsLTAgPSA8JmdlMV9yZ21paV9waW5zPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCQlwaHkgPSA8JnBoeTA+OworCQkJCXBoeS1tb2RlID0gInJnbWlpLWlkIjsKKwkJCX07CisJCX07CisJfTsKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtMCA9IDwmc2F0YTFfcHdyX3BpbiAmc2F0YTJfcHdyX3BpbgorCQkJICAgICAmc2F0YTNfcHdyX3BpbiAmc2F0YTRfcHdyX3Bpbj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJc2F0YTFfcmVndWxhdG9yOiBzYXRhMS1yZWd1bGF0b3IgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FUQTEgUG93ZXIiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXN0YXJ0dXAtZGVsYXktdXMgPSA8MjAwMDAwMD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlncGlvID0gPCZncGlvMSAxMCBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlzYXRhMl9yZWd1bGF0b3I6IHNhdGEyLXJlZ3VsYXRvciB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Mj47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJTQVRBMiBQb3dlciI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJc3RhcnR1cC1kZWxheS11cyA9IDw0MDAwMDAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCWdwaW8gPSA8JmdwaW8xIDEyIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCXNhdGEzX3JlZ3VsYXRvcjogc2F0YTMtcmVndWxhdG9yIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwzPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIlNBVEEzIFBvd2VyIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlzdGFydHVwLWRlbGF5LXVzID0gPDYwMDAwMDA+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJZ3BpbyA9IDwmZ3BpbzEgMTMgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisKKwkJc2F0YTRfcmVndWxhdG9yOiBzYXRhNC1yZWd1bGF0b3IgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDQ+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FUQTQgUG93ZXIiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXN0YXJ0dXAtZGVsYXktdXMgPSA8ODAwMDAwMD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlncGlvID0gPCZncGlvMSAxNCBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwl9OworfTsKKworJnBpbmN0cmwgeworCXNhdGExX3B3cl9waW46IHNhdGExLXB3ci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9wd3JfcGluOiBzYXRhMi1wd3ItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTNfcHdyX3Bpbjogc2F0YTMtcHdyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGE0X3B3cl9waW46IHNhdGE0LXB3ci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMV9wcmVzX3Bpbjogc2F0YTEtcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9wcmVzX3Bpbjogc2F0YTItcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhM19wcmVzX3Bpbjogc2F0YTMtcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDAiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhNF9wcmVzX3Bpbjogc2F0YTQtcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDEiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzeW5vX2lkX2JpdDBfcGluOiBzeW5vLWlkLWJpdDAtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDI2IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc3lub19pZF9iaXQxX3Bpbjogc3luby1pZC1iaXQxLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAyOCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXN5bm9faWRfYml0Ml9waW46IHN5bm8taWQtYml0Mi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjkiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlmYW4xX2FsYXJtX3BpbjogZmFuMS1hbGFybS1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlmYW4yX2FsYXJtX3BpbjogZmFuMi1hbGFybS1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAuZHRzaQppbmRleCBiZmY5ZjZjLi42MmMzYmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAuZHRzaQpAQCAtMzUsMTMgKzM1LDI0IEBACiAJCX07CiAKIAkJaW50ZXJuYWwtcmVncyB7CisJCQlzZHJhbWNAMTQwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS14cC1zZHJhbS1jb250cm9sbGVyIjsKKwkJCQlyZWcgPSA8MHgxNDAwIDB4NTAwPjsKKwkJCX07CisKIAkJCUwyOiBsMi1jYWNoZSB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGF1cm9yYS1zeXN0ZW0tY2FjaGUiOwogCQkJCXJlZyA9IDwweDA4MDAwIDB4MTAwMD47CiAJCQkJY2FjaGUtaWQtcGFydCA9IDwweDEwMD47CisJCQkJY2FjaGUtdW5pZmllZDsKIAkJCQl3dC1vdmVycmlkZTsKIAkJCX07CiAKKwkJCXNwaTA6IHNwaUAxMDYwMCB7CisJCQkJcGluY3RybC0wID0gPCZzcGkwX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQl9OworCiAJCQlpMmMwOiBpMmNAMTEwMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjc4MjMwLWkyYyIsICJtYXJ2ZWxsLG12NjR4eHgtaTJjIjsKIAkJCQlyZWcgPSA8MHgxMTAwMCAweDEwMD47CkBAIC01Miw4ICs2MywxMCBAQAogCQkJCXJlZyA9IDwweDExMTAwIDB4MTAwPjsKIAkJCX07CiAKLQkJCXNlcmlhbEAxMjIwMCB7CisJCQl1YXJ0Mjogc2VyaWFsQDEyMjAwIHsKIAkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlyZWcgPSA8MHgxMjIwMCAweDEwMD47CiAJCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJCWludGVycnVwdHMgPSA8NDM+OwpAQCAtNjEsOCArNzQsMTEgQEAKIAkJCQljbG9ja3MgPSA8JmNvcmVjbGsgMD47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07Ci0JCQlzZXJpYWxAMTIzMDAgeworCisJCQl1YXJ0Mzogc2VyaWFsQDEyMzAwIHsKIAkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJCXBpbmN0cmwtMCA9IDwmdWFydDNfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlyZWcgPSA8MHgxMjMwMCAweDEwMD47CiAJCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJCWludGVycnVwdHMgPSA8NDQ+OwpAQCAtMTk5LDMgKzIxNSw1NCBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJZ2UwX2dtaWlfcGluczogZ2UwLWdtaWktcGlucyB7CisJCW1hcnZlbGwscGlucyA9CisJCSAgICAgIm1wcDAiLCAgIm1wcDEiLCAgIm1wcDIiLCAgIm1wcDMiLAorCQkgICAgICJtcHA0IiwgICJtcHA1IiwgICJtcHA2IiwgICJtcHA3IiwKKwkJICAgICAibXBwOCIsICAibXBwOSIsICAibXBwMTAiLCAibXBwMTEiLAorCQkgICAgICJtcHAxMiIsICJtcHAxMyIsICJtcHAxNCIsICJtcHAxNSIsCisJCSAgICAgIm1wcDE2IiwgIm1wcDE3IiwgIm1wcDE4IiwgIm1wcDE5IiwKKwkJICAgICAibXBwMjAiLCAibXBwMjEiLCAibXBwMjIiLCAibXBwMjMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdlMCI7CisJfTsKKworCWdlMF9yZ21paV9waW5zOiBnZTAtcmdtaWktcGlucyB7CisJCW1hcnZlbGwscGlucyA9CisJCSAgICAgIm1wcDAiLCAibXBwMSIsICJtcHAyIiwgIm1wcDMiLAorCQkgICAgICJtcHA0IiwgIm1wcDUiLCAibXBwNiIsICJtcHA3IiwKKwkJICAgICAibXBwOCIsICJtcHA5IiwgIm1wcDEwIiwgIm1wcDExIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTAiOworCX07CisKKwlnZTFfcmdtaWlfcGluczogZ2UxLXJnbWlpLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPQorCQkgICAgICJtcHAxMiIsICJtcHAxMyIsICJtcHAxNCIsICJtcHAxNSIsCisJCSAgICAgIm1wcDE2IiwgIm1wcDE3IiwgIm1wcDE4IiwgIm1wcDE5IiwKKwkJICAgICAibXBwMjAiLCAibXBwMjEiLCAibXBwMjIiLCAibXBwMjMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdlMSI7CisJfTsKKworCXNkaW9fcGluczogc2Rpby1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMwIiwgIm1wcDMxIiwgIm1wcDMyIiwKKwkJCSAgICAgICAibXBwMzMiLCAibXBwMzQiLCAibXBwMzUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7CisJfTsKKworCXNwaTBfcGluczogc3BpMC1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDM2IiwgIm1wcDM3IiwKKwkJCSAgICAgICAibXBwMzgiLCAibXBwMzkiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNwaSI7CisJfTsKKworCXVhcnQyX3BpbnM6IHVhcnQyLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDIiLCAibXBwNDMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInVhcnQyIjsKKwl9OworCisJdWFydDNfcGluczogdWFydDMtcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NCIsICJtcHA0NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDMiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYzLmR0c2kKaW5kZXggNTE0MTZjN2QuLjY1M2U0MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjMuZHRzaQpAQCAtNjc3LDYgKzY3NywxNCBAQAogCQkJCQl9OwogCQkJCX07CiAKKwkJCQljYW4geworCQkJCQlwaW5jdHJsX2Nhbl9yeF90eDogY2FuX3J4X3R4IHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0EgMTQgQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfTk9ORQkvKiBDQU5SWCwgY29uZmxpY3RzIHdpdGggSVJRMCAqLworCQkJCQkJCSBBVDkxX1BJT0EgMTMgQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfTk9ORT47CS8qIENBTlRYLCBjb25mbGljdHMgd2l0aCBQQ0swICovCisJCQkJCX07CisJCQkJfTsKKwogCQkJCXBpb0E6IGdwaW9AZmZmZmYyMDAgewogCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtZ3BpbyI7CiAJCQkJCXJlZyA9IDwweGZmZmZmMjAwIDB4MjAwPjsKQEAgLTkwNSw2ICs5MTMsMTcgQEAKIAkJCQljbG9jay1uYW1lcyA9ICJwd21fY2xrIjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKKworCQkJY2FuOiBjYW5AZmZmYWMwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjMtY2FuIjsKKwkJCQlyZWcgPSA8MHhmZmZhYzAwMCAweDMwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxMiBJUlFfVFlQRV9MRVZFTF9ISUdIIDM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2Nhbl9yeF90eD47CisJCQkJY2xvY2tzID0gPCZjYW5fY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJjYW5fY2xrIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKIAkJfTsKIAogCQlmYjA6IGZiQDB4MDA3MDAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4MjUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDI1LmR0c2kKaW5kZXggYzI1NTQyMS4uM2M1ZmEzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4MjUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXgyNS5kdHNpCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAiYXQ5MXNhbTl4NV91c2FydDMuZHRzaSIKICNpbmNsdWRlICJhdDkxc2FtOXg1X21hY2IwLmR0c2kiCiAjaW5jbHVkZSAiYXQ5MXNhbTl4NV9tYWNiMS5kdHNpIgorI2luY2x1ZGUgImF0OTFzYW05eDVfY2FuLmR0c2kiCiAKIC8gewogCW1vZGVsID0gIkF0bWVsIEFUOTFTQU05WDI1IFNvQyI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXgzNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4MzUuZHRzaQppbmRleCA4ZWFjNjZjLi40OTljZGM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXgzNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDM1LmR0c2kKQEAgLTgsNiArOCw3IEBACiAKICNpbmNsdWRlICJhdDkxc2FtOXg1LmR0c2kiCiAjaW5jbHVkZSAiYXQ5MXNhbTl4NV9tYWNiMC5kdHNpIgorI2luY2x1ZGUgImF0OTFzYW05eDVfY2FuLmR0c2kiCiAKIC8gewogCW1vZGVsID0gIkF0bWVsIEFUOTFTQU05WDM1IFNvQyI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1LmR0c2kKaW5kZXggNzI2Mjc0Zi4uYmJiM2JhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDUuZHRzaQpAQCAtODYwLDYgKzg2MCw5IEBACiAJCQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0xFVkVMX0hJR0ggNz47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZGJndT47CisJCQkJZG1hcyA9IDwmZG1hMSAxIEFUOTFfRE1BX0NGR19QRVJfSUQoOCk+LAorCQkJCSAgICAgICA8JmRtYTEgMSAoQVQ5MV9ETUFfQ0ZHX1BFUl9JRCg5KSB8IEFUOTFfRE1BX0NGR19GSUZPQ0ZHX0FTQVApPjsKKwkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQkJCWNsb2NrcyA9IDwmbWNrPjsKIAkJCQljbG9jay1uYW1lcyA9ICJ1c2FydCI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTg3MSw2ICs4NzQsOSBAQAogCQkJCWludGVycnVwdHMgPSA8NSBJUlFfVFlQRV9MRVZFTF9ISUdIIDU+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYXJ0MD47CisJCQkJZG1hcyA9IDwmZG1hMCAxIEFUOTFfRE1BX0NGR19QRVJfSUQoMyk+LAorCQkJCSAgICAgICA8JmRtYTAgMSAoQVQ5MV9ETUFfQ0ZHX1BFUl9JRCg0KSB8IEFUOTFfRE1BX0NGR19GSUZPQ0ZHX0FTQVApPjsKKwkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQkJCWNsb2NrcyA9IDwmdXNhcnQwX2Nsaz47CiAJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC04ODIsNiArODg4LDkgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDYgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDE+OworCQkJCWRtYXMgPSA8JmRtYTAgMSBBVDkxX0RNQV9DRkdfUEVSX0lEKDUpPiwKKwkJCQkgICAgICAgPCZkbWEwIDEgKEFUOTFfRE1BX0NGR19QRVJfSUQoNikgfCBBVDkxX0RNQV9DRkdfRklGT0NGR19BU0FQKT47CisJCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCQljbG9ja3MgPSA8JnVzYXJ0MV9jbGs+OwogCQkJCWNsb2NrLW5hbWVzID0gInVzYXJ0IjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtODkzLDYgKzkwMiw5IEBACiAJCQkJaW50ZXJydXB0cyA9IDw3IElSUV9UWVBFX0xFVkVMX0hJR0ggNT47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNhcnQyPjsKKwkJCQlkbWFzID0gPCZkbWExIDEgQVQ5MV9ETUFfQ0ZHX1BFUl9JRCgxMik+LAorCQkJCSAgICAgICA8JmRtYTEgMSAoQVQ5MV9ETUFfQ0ZHX1BFUl9JRCgxMykgfCBBVDkxX0RNQV9DRkdfRklGT0NGR19BU0FQKT47CisJCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCQljbG9ja3MgPSA8JnVzYXJ0Ml9jbGs+OwogCQkJCWNsb2NrLW5hbWVzID0gInVzYXJ0IjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV9jYW4uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfY2FuLmR0c2kKaW5kZXggZjQ0YWI3Ny4uOGViMmY5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV9jYW4uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2Nhbi5kdHNpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGF0OTFzYW05eDVfbWFjYjAuZHRzaSAtIERldmljZSBUcmVlIEluY2x1ZGUgZmlsZSBmb3IgQVQ5MVNBTTl4NSBTb0Mgd2l0aCAxCisgKiBhdDkxc2FtOXg1X2Nhbi5kdHNpIC0gRGV2aWNlIFRyZWUgSW5jbHVkZSBmaWxlIGZvciBBVDkxU0FNOXg1IFNvQyB3aXRoIDEKICAqIEV0aGVybmV0IGludGVyZmFjZS4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQm9yaXMgQlJFWklMTE9OIDxiLmJyZXppbGxvbkBvdmVya2l6LmNvbT4KQEAgLTIwLDEwICsyMCw1MCBAQAogCQkJCQkJcmVnID0gPDI5PjsKIAkJCQkJfTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbjFfY2xrOiBjYW4xX2NsayB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2xvY2stY2VsbHMgPSA8MD47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MzA+OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisJCQkJCWNhbjFfY2xrOiBjYW4xX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MzA+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQljYW4wOiBjYW5AZjgwMDAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jYW4iOworCQkJCXJlZyA9IDwweGY4MDAwMDAwIDB4MzAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDI5IElSUV9UWVBFX0xFVkVMX0hJR0ggMz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfY2FuMF9yeF90eD47CisJCQkJY2xvY2tzID0gPCZjYW4wX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAiY2FuX2NsayI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWNhbjE6IGNhbkBmODAwNDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNhbiI7CisJCQkJcmVnID0gPDB4ZjgwMDQwMDAgMHgzMDA+OworCQkJCWludGVycnVwdHMgPSA8MzAgSVJRX1RZUEVfTEVWRUxfSElHSCAzPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9jYW4xX3J4X3R4PjsKKwkJCQljbG9ja3MgPSA8JmNhbjFfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJjYW5fY2xrIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJcGluY3RybEBmZmZmZjQwMCB7CisJCQkJY2FuMCB7CisJCQkJCXBpbmN0cmxfY2FuMF9yeF90eDogY2FuMF9yeF90eCB7CisJCQkJCQlhdG1lbCxwaW5zID0KKwkJCQkJCQk8QVQ5MV9QSU9BIDkgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORQkvKiBDQU5SWDAsIGNvbmZsaWN0cyB3aXRoIERSWEQgKi8KKwkJCQkJCQlBVDkxX1BJT0EgMTAgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CS8qIENBTlRYMCwgY29uZmxpY3RzIHdpdGggRFRYRCAqLworCQkJCQl9OworCQkJCX07CisKKwkJCQljYW4xIHsKKwkJCQkJcGluY3RybF9jYW4xX3J4X3R4OiBjYW4xX3J4X3R4IHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0EgNiBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FCS8qIENBTlJYMSwgY29uZmxpY3RzIHdpdGggUlhEMSAqLworCQkJCQkJCUFUOTFfUElPQSA1IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+OwkvKiBDQU5UWDEsIGNvbmZsaWN0cyB3aXRoIFRYRDEgKi8KKwkJCQkJfTsKIAkJCQl9OwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfdXNhcnQzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X3VzYXJ0My5kdHNpCmluZGV4IDE0MDIxN2E1Li40M2JiNWI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X3VzYXJ0My5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfdXNhcnQzLmR0c2kKQEAgLTU3LDYgKzU3LDkgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDggSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDM+OworCQkJCWRtYXMgPSA8JmRtYTEgMSBBVDkxX0RNQV9DRkdfUEVSX0lEKDE0KT4sCisJCQkJICAgICAgIDwmZG1hMSAxIChBVDkxX0RNQV9DRkdfUEVSX0lEKDE1KSB8IEFUOTFfRE1BX0NGR19GSUZPQ0ZHX0FTQVApPjsKKwkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQkJCWNsb2NrcyA9IDwmdXNhcnQzX2Nsaz47CiAJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdGxhczYuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0bGFzNi5kdHNpCmluZGV4IGJiMjI4NDIuLjI5NTk4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0bGFzNi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0bGFzNi5kdHNpCkBAIC0xMzEsNiArMTMxLDcgQEAKIAkJCQlyZWcgPSA8MHg5MDAyMDAwMCAweDEwMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDMxPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMzU+OworCQkJCXJlc2V0cyA9IDwmcnN0YyA2PjsKIAkJCX07CiAJCX07CiAKQEAgLTMxMiw2ICszMTMsNyBAQAogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNsb2NrcyA9IDwmY2xrcyAxOT47CisJCQkJcmVzZXRzID0gPCZyc3RjIDI2PjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtMzI3LDYgKzMyOSw3IEBACiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJY2xvY2tzID0gPCZjbGtzIDIwPjsKKwkJCQlyZXNldHMgPSA8JnJzdGMgMjc+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC01MjIsNiArNTI1LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLGZ1bmN0aW9uID0gInNkbW1jNSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQlpMnNfbWNsa19waW5zX2E6IGkyc19tY2xrQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyc19tY2xrIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJpMnNtY2xrZ3JwIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAiaTJzX21jbGsiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisJCQkJaTJzX2V4dF9jbGtfaW5wdXRfcGluc19hOiBpMnNfZXh0X2Nsa19pbnB1dEAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMnNfZXh0X2Nsa19pbnB1dCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLHBpbnMgPSAiaTJzX2V4dF9jbGtfaW5wdXRncnAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixmdW5jdGlvbiA9ICJpMnNfZXh0X2Nsa19pbnB1dCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzX3BpbnNfYTogaTJzQDAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkycyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLHBpbnMgPSAiaTJzZ3JwIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbS1jeWdudXMtY2xvY2suZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbS1jeWdudXMtY2xvY2suZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGQ4Mzg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy1jbG9jay5kdHNpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiAgQlNEIExJQ0VOU0UKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgICBkaXN0cmlidXRpb24uCisgKiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQnJvYWRjb20gQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitjbG9ja3MgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCXJhbmdlczsKKworCW9zYzogb3NjaWxsYXRvciB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47CisJfTsKKworCWFwYl9jbGs6IGFwYl9jbGsgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwMD47CisJfTsKKworCXBlcmlwaF9jbGs6IHBlcmlwaF9jbGsgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDAwPjsKKwl9OworCisJc2Rpb19jbGs6IGxjcGxsX2NoMiB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OworCX07CisKKwlheGk4MV9jbGs6IGF4aTgxX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCX07CisKKwlrZXlwYWRfY2xrOiBrZXlwYWRfY2xrIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMxODA2PjsKKwl9OworCisJYWRjX2NsazogYWRjX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNTYyNTAwPjsKKwl9OworCisJcHdtX2NsazogcHdtX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwPjsKKwl9OworCisJbGNkX2NsazogbWlwaXBsbF9jaDEgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbS1jeWdudXMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbS1jeWdudXMuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTI2ZjllCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy5kdHNpCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogIEJTRCBMSUNFTlNFCisgKgorICogIENvcHlyaWdodChjKSAyMDE0IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqCisgKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgICAgZGlzdHJpYnV0aW9uLgorICogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEJyb2FkY29tIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKworI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisKKy8geworCWNvbXBhdGlibGUgPSAiYnJjbSxjeWdudXMiOworCW1vZGVsID0gIkJyb2FkY29tIEN5Z251cyBTb0MiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MD47CisJCX07CisJfTsKKworCS9pbmNsdWRlLyAiYmNtLWN5Z251cy1jbG9jay5kdHNpIgorCisJYW1iYSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYW1iYS1idXMiLCAic2ltcGxlLWJ1cyI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCXJhbmdlczsKKworCQl3ZHRAMTgwMDkwMDAgeworCQkJIGNvbXBhdGlibGUgPSAiYXJtLHNwODA1IiAsICJhcm0scHJpbWVjZWxsIjsKKwkJCSByZWcgPSA8MHgxODAwOTAwMCAweDEwMDA+OworCQkJIGludGVycnVwdHMgPSA8R0lDX1NQSSA5MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCSBjbG9ja3MgPSA8JmF4aTgxX2Nsaz47CisJCQkgY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQl9OworCX07CisKKwl1YXJ0MDogc2VyaWFsQDE4MDIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJcmVnID0gPDB4MTgwMjAwMDAgMHgxMDA+OworCQlyZWctc2hpZnQgPSA8Mj47CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDczIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmF4aTgxX2Nsaz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0MTogc2VyaWFsQDE4MDIxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJcmVnID0gPDB4MTgwMjEwMDAgMHgxMDA+OworCQlyZWctc2hpZnQgPSA8Mj47CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmF4aTgxX2Nsaz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0Mjogc2VyaWFsQDE4MDIyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJcmVnID0gPDB4MTgwMjAwMDAgMHgxMDA+OworCQlyZWctc2hpZnQgPSA8Mj47CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmF4aTgxX2Nsaz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0Mzogc2VyaWFsQDE4MDIzMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJcmVnID0gPDB4MTgwMjMwMDAgMHgxMDA+OworCQlyZWctc2hpZnQgPSA8Mj47CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmF4aTgxX2Nsaz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQDE5MDIxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJcmVnID0gPDB4MTkwMjEwMDAgMHgxMDAwPiwKKwkJICAgICAgPDB4MTkwMjAxMDAgMHgxMDA+OworCX07CisKKwlMMjogbDItY2FjaGUgeworCQljb21wYXRpYmxlID0gImFybSxwbDMxMC1jYWNoZSI7CisJCXJlZyA9IDwweDE5MDIyMDAwIDB4MTAwMD47CisJCWNhY2hlLXVuaWZpZWQ7CisJCWNhY2hlLWxldmVsID0gPDI+OworCX07CisKKwl0aW1lckAxOTAyMDIwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1nbG9iYWwtdGltZXIiOworCQlyZWcgPSA8MHgxOTAyMDIwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1BQSSAxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZwZXJpcGhfY2xrPjsKKwl9OworCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi1wbHVzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MzUtcnBpLWItcGx1cy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3OTUxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MzUtcnBpLWItcGx1cy5kdHMKQEAgLTAsMCArMSwzMCBAQAorL2R0cy12MS87CisvaW5jbHVkZS8gImJjbTI4MzUtcnBpLmR0c2kiCisKKy8geworCWNvbXBhdGlibGUgPSAicmFzcGJlcnJ5cGksbW9kZWwtYi1wbHVzIiwgImJyY20sYmNtMjgzNSI7CisJbW9kZWwgPSAiUmFzcGJlcnJ5IFBpIE1vZGVsIEIrIjsKKworCWxlZHMgeworCQlhY3QgeworCQkJZ3Bpb3MgPSA8JmdwaW8gNDcgMD47CisJCX07CisKKwkJcHdyIHsKKwkJCWxhYmVsID0gIlBXUiI7CisJCQlncGlvcyA9IDwmZ3BpbyAzNSAwPjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAia2VlcCI7CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCX07CisJfTsKK307CisKKyZncGlvIHsKKwlwaW5jdHJsLTAgPSA8JmdwaW9vdXQgJmFsdDAgJmkyc19hbHQwICZhbHQzPjsKKworCS8qIEkyUyBpbnRlcmZhY2UgKi8KKwlpMnNfYWx0MDogaTJzX2FsdDAgeworCQlicmNtLHBpbnMgPSA8MTggMTkgMjAgMjE+OworCQlicmNtLGZ1bmN0aW9uID0gPDQ+OyAvKiBhbHQwICovCisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY20yODM1LXJwaS1iLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MzUtcnBpLWIuZHRzCmluZGV4IDU4YTBkNjAuLmJhZmE0NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MzUtcnBpLWIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MzUtcnBpLWIuZHRzCkBAIC0xLDYzICsxLDIzIEBACiAvZHRzLXYxLzsKLS9pbmNsdWRlLyAiYmNtMjgzNS5kdHNpIgorL2luY2x1ZGUvICJiY20yODM1LXJwaS5kdHNpIgogCiAvIHsKIAljb21wYXRpYmxlID0gInJhc3BiZXJyeXBpLG1vZGVsLWIiLCAiYnJjbSxiY20yODM1IjsKIAltb2RlbCA9ICJSYXNwYmVycnkgUGkgTW9kZWwgQiI7CiAKLQltZW1vcnkgewotCQlyZWcgPSA8MCAweDEwMDAwMDAwPjsKLQl9OwotCiAJbGVkcyB7Ci0JCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKLQogCQlhY3QgewotCQkJbGFiZWwgPSAiQUNUIjsKIAkJCWdwaW9zID0gPCZncGlvIDE2IDE+OwotCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKLQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOwogCQl9OwogCX07CiB9OwogCiAmZ3BpbyB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JmdwaW9vdXQgJmFsdDAgJmFsdDIgJmFsdDM+OwotCi0JZ3Bpb291dDogZ3Bpb291dCB7Ci0JCWJyY20scGlucyA9IDw2PjsKLQkJYnJjbSxmdW5jdGlvbiA9IDwxPjsgLyogR1BJTyBvdXQgKi8KLQl9OwotCi0JYWx0MDogYWx0MCB7Ci0JCWJyY20scGlucyA9IDwwIDEgMiAzIDQgNSA3IDggOSAxMCAxMSAxNCAxNSA0MCA0NT47Ci0JCWJyY20sZnVuY3Rpb24gPSA8ND47IC8qIGFsdDAgKi8KLQl9OwotCi0JYWx0MzogYWx0MyB7Ci0JCWJyY20scGlucyA9IDw0OCA0OSA1MCA1MSA1MiA1Mz47Ci0JCWJyY20sZnVuY3Rpb24gPSA8Nz47IC8qIGFsdDMgKi8KLQl9OworCXBpbmN0cmwtMCA9IDwmZ3Bpb291dCAmYWx0MCAmaTJzX2FsdDIgJmFsdDM+OwogCiAJLyogSTJTIGludGVyZmFjZSAqLwotCWFsdDI6IGFsdDIgeworCWkyc19hbHQyOiBpMnNfYWx0MiB7CiAJCWJyY20scGlucyA9IDwyOCAyOSAzMCAzMT47CiAJCWJyY20sZnVuY3Rpb24gPSA8Nj47IC8qIGFsdDIgKi8KIAl9OwogfTsKLQotJmkyYzAgewotCXN0YXR1cyA9ICJva2F5IjsKLQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLX07Ci0KLSZpMmMxIHsKLQlzdGF0dXMgPSAib2theSI7Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Ci19OwotCi0mc2RoY2kgewotCXN0YXR1cyA9ICJva2F5IjsKLQlidXMtd2lkdGggPSA8ND47Ci19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MzUtcnBpLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwNjQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MzUtcnBpLmR0c2kKQEAgLTAsMCArMSw1MSBAQAorL2luY2x1ZGUvICJiY20yODM1LmR0c2kiCisKKy8geworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4MTAwMDAwMDA+OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCWFjdCB7CisJCQlsYWJlbCA9ICJBQ1QiOworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQl9OworCX07Cit9OworCismZ3BpbyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCWdwaW9vdXQ6IGdwaW9vdXQgeworCQlicmNtLHBpbnMgPSA8Nj47CisJCWJyY20sZnVuY3Rpb24gPSA8MT47IC8qIEdQSU8gb3V0ICovCisJfTsKKworCWFsdDA6IGFsdDAgeworCQlicmNtLHBpbnMgPSA8MCAxIDIgMyA0IDUgNyA4IDkgMTAgMTEgMTQgMTUgNDAgNDU+OworCQlicmNtLGZ1bmN0aW9uID0gPDQ+OyAvKiBhbHQwICovCisJfTsKKworCWFsdDM6IGFsdDMgeworCQlicmNtLHBpbnMgPSA8NDggNDkgNTAgNTEgNTIgNTM+OworCQlicmNtLGZ1bmN0aW9uID0gPDc+OyAvKiBhbHQzICovCisJfTsKK307CisKKyZpMmMwIHsKKwlzdGF0dXMgPSAib2theSI7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Cit9OworCismaTJjMSB7CisJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworfTsKKworJnNkaGNpIHsKKwlzdGF0dXMgPSAib2theSI7CisJYnVzLXdpZHRoID0gPDQ+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtYnVmZmFsby13enItMTc1MGRocC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4LWJ1ZmZhbG8td3pyLTE3NTBkaHAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYzBmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4LWJ1ZmZhbG8td3pyLTE3NTBkaHAuZHRzCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBCcm9hZGNvbSBCQ000NzBYIC8gQkNNNTMwMVggQVJNIHBsYXRmb3JtIGNvZGUuCisgKiBEVFMgZm9yIEJ1ZmZhbG8gV1pSLTE3NTBESFAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImJjbTQ3MDguZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJidWZmYWxvLHd6ci0xNzUwZGhwIiwgImJyY20sYmNtNDcwOCI7CisJbW9kZWwgPSAiQnVmZmFsbyBXWlItMTc1MERIUCAoQkNNNDcwOCkiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA4MDAwMDAwPjsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBvbGwtaW50ZXJ2YWwgPSA8MjAwPjsKKworCQlyZXN0YXJ0IHsKKwkJCWxhYmVsID0gIlJlc2V0IjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1JFU1RBUlQ+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTEgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQlhb3NzIHsKKwkJCWxhYmVsID0gIkFPU1MiOworCQkJbGludXgsY29kZSA9IDxLRVlfV1BTX0JVVFRPTj47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxMiBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCS8qIENvbW1pdCBtb2RlIHNldCBieSBzd2l0Y2g/ICovCisJCW1vZGUgeworCQkJbGFiZWwgPSAiTW9kZSI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9TRVRVUD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxMyBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCS8qIFN3aXRjaDogQVAgbW9kZSAqLworCQlzd19hcCB7CisJCQlsYWJlbCA9ICJBUCI7CisJCQlsaW51eCxjb2RlID0gPEJUTl8wPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDE0IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJZWplY3QgeworCQkJbGFiZWwgPSAiVVNCIGVqZWN0IjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX0VKRUNUQ0Q+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTUgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtbmV0Z2Vhci1yNjI1MC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4LW5ldGdlYXItcjYyNTAuZHRzCmluZGV4IDNiNTI1OWQuLjRlZDdkZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtbmV0Z2Vhci1yNjI1MC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1uZXRnZWFyLXI2MjUwLmR0cwpAQCAtMzIsNCArMzIsNjMgQEAKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKIAl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQlsb2dvIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6d2hpdGU6bG9nbyI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb24iOworCQl9OworCisJCXBvd2VyMCB7CisJCQlsYWJlbCA9ICJiY201M3h4OmdyZWVuOnBvd2VyIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDIgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9mZiI7CisJCX07CisKKwkJcG93ZXIxIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6YW1iZXI6cG93ZXIiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMyBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb24iOworCQl9OworCisJCXVzYiB7CisJCQlsYWJlbCA9ICJiY201M3h4OmJsdWU6dXNiIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDggR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9mZiI7CisJCX07CisKKwkJd2lyZWxlc3MgeworCQkJbGFiZWwgPSAiYmNtNTN4eDpibHVlOndpcmVsZXNzIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDExIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vZmYiOworCQl9OworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG9sbC1pbnRlcnZhbCA9IDwyMDA+OworCisJCXdwcyB7CisJCQlsYWJlbCA9ICJXUFMiOworCQkJbGludXgsY29kZSA9IDxLRVlfV1BTX0JVVFRPTj47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA0IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJcmZraWxsIHsKKwkJCWxhYmVsID0gIldpRmkiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkZLSUxMPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDUgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQlyZXN0YXJ0IHsKKwkJCWxhYmVsID0gIlJlc2V0IjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1JFU1RBUlQ+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gNiBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1uZXRnZWFyLXI2MzAwLXYyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtbmV0Z2Vhci1yNjMwMC12Mi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmYzJhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4LW5ldGdlYXItcjYzMDAtdjIuZHRzCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBCcm9hZGNvbSBCQ000NzBYIC8gQkNNNTMwMVggQVJNIHBsYXRmb3JtIGNvZGUuCisgKiBEVFMgZm9yIE5ldGdlYXIgUjYzMDAgVjIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImJjbTQ3MDguZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJuZXRnZWFyLHI2MzAwdjIiLCAiYnJjbSxiY200NzA4IjsKKwltb2RlbCA9ICJOZXRnZWFyIFI2MzAwIFYyIChCQ000NzA4KSI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDgwMDAwMDA+OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCWxvZ28geworCQkJbGFiZWwgPSAiYmNtNTN4eDp3aGl0ZTpsb2dvIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDEgR1BJT19BQ1RJVkVfSElHSD47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCX07CisKKwkJcG93ZXIwIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Z3JlZW46cG93ZXIiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMiBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb2ZmIjsKKwkJfTsKKworCQlwb3dlcjEgeworCQkJbGFiZWwgPSAiYmNtNTN4eDphbWJlcjpwb3dlciI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAzIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCX07CisKKwkJdXNiIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp1c2IiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gOCBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb2ZmIjsKKwkJfTsKKworCQl3aXJlbGVzcyB7CisJCQlsYWJlbCA9ICJiY201M3h4OmJsdWU6d2lyZWxlc3MiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTEgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9mZiI7CisJCX07CisJfTsKKworCWdwaW8ta2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwb2xsLWludGVydmFsID0gPDIwMD47CisKKwkJd3BzIHsKKwkJCWxhYmVsID0gIldQUyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDQgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQlyZmtpbGwgeworCQkJbGFiZWwgPSAiV2lGaSI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9SRktJTEw+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gNSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCXJlc3RhcnQgeworCQkJbGFiZWwgPSAiUmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA2IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1hc3VzLXJ0LW4xOHUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwODEtYXN1cy1ydC1uMTh1LmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjc2Mzc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwODEtYXN1cy1ydC1uMTh1LmR0cwpAQCAtMCwwICsxLDc4IEBACisvKgorICogQnJvYWRjb20gQkNNNDcwWCAvIEJDTTUzMDFYIEFSTSBwbGF0Zm9ybSBjb2RlLgorICogRFRTIGZvciBBc3VzIFJULU4xOFUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImJjbTQ3MDgxLmR0c2kiCisKKy8geworCWNvbXBhdGlibGUgPSAiYXN1cyxydC1uMTh1IiwgImJyY20sYmNtNDcwODEiLCAiYnJjbSxiY200NzA4IjsKKwltb2RlbCA9ICJBc3VzIFJULU4xOFUgKEJDTTQ3MDgxKSI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDgwMDAwMDA+OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCXBvd2VyIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTpwb3dlciI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAwIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCX07CisKKwkJdXNiMiB7CisJCQlsYWJlbCA9ICJiY201M3h4OmJsdWU6dXNiMiI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAzIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vZmYiOworCQl9OworCisJCXdhbiB7CisJCQlsYWJlbCA9ICJiY201M3h4OmJsdWU6d2FuIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKworCQlsYW4geworCQkJbGFiZWwgPSAiYmNtNTN4eDpibHVlOmxhbiI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA5IEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCX07CisKKwkJdXNiMyB7CisJCQlsYWJlbCA9ICJiY201M3h4OmJsdWU6dXNiMyI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxNCBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb2ZmIjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBvbGwtaW50ZXJ2YWwgPSA8MjAwPjsKKworCQlyZXN0YXJ0IHsKKwkJCWxhYmVsID0gIlJlc2V0IjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1JFU1RBUlQ+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gNyBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCXdwcyB7CisJCQlsYWJlbCA9ICJXUFMiOworCQkJbGludXgsY29kZSA9IDxLRVlfV1BTX0JVVFRPTj47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxMSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwODEtYnVmZmFsby13enItNjAwZGhwMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1idWZmYWxvLXd6ci02MDBkaHAyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmI0MTRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwODEtYnVmZmFsby13enItNjAwZGhwMi5kdHMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIEJyb2FkY29tIEJDTTQ3MFggLyBCQ001MzAxWCBBUk0gcGxhdGZvcm0gY29kZS4KKyAqIERUUyBmb3IgQnVmZmFsbyBXWlItNjAwREhQMgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYmNtNDcwODEuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJidWZmYWxvLHd6ci02MDBkaHAyIiwgImJyY20sYmNtNDcwODEiLCAiYnJjbSxiY200NzA4IjsKKwltb2RlbCA9ICJCdWZmYWxvIFdaUi02MDBESFAyIChCQ000NzA4MSkiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA4MDAwMDAwPjsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBvbGwtaW50ZXJ2YWwgPSA8MjAwPjsKKworCQlhb3NzIHsKKwkJCWxhYmVsID0gIkFPU1MiOworCQkJbGludXgsY29kZSA9IDxLRVlfV1BTX0JVVFRPTj47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA5IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJcmVzdGFydCB7CisJCQlsYWJlbCA9ICJSZXNldCI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9SRVNUQVJUPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDExIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJLyogU3dpdGNoIGRldmljZSBtb2RlPyAqLworCQltb2RlIHsKKwkJCWxhYmVsID0gIk1vZGUiOworCQkJbGludXgsY29kZSA9IDxLRVlfU0VUVVA+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTQgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQllamVjdCB7CisJCQlsYWJlbCA9ICJVU0IgZWplY3QiOworCQkJbGludXgsY29kZSA9IDxLRVlfRUpFQ1RDRD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxNSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwODEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgxLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyMDAxMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgxLmR0c2kKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIEJyb2FkY29tIEJDTTQ3MFggLyBCQ001MzAxWCBBUk0gcGxhdGZvcm0gY29kZS4KKyAqIERUUyBmb3IgQkNNNDcwODEgU29DLgorICoKKyAqIENvcHlyaWdodCDCqSAyMDE0IFJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJjbTUzMDF4LmR0c2kiCisKKy8geworCWNvbXBhdGlibGUgPSAiYnJjbSxiY200NzA4MSI7CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY201MzAxeC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNTMwMXguZHRzaQppbmRleCA1M2M2MjRmLi43OGFlYzYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iY201MzAxeC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTUzMDF4LmR0c2kKQEAgLTgsNiArOCw4IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCiAgKi8KIAorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgogI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCkBAIC05Miw0ICs5NCw1MyBAQAogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMDAwMD47CiAJCX07CiAJfTsKKworCWF4aUAxODAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYnJjbSxidXMtYXhpIjsKKwkJcmVnID0gPDB4MTgwMDAwMDAgMHgxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDAwMDAwMDAgMHgxODAwMDAwMCAweDAwMTAwMDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweDAwMGZmZmZmIDB4ZmZmZj47CisJCWludGVycnVwdC1tYXAgPSAKKwkJCS8qIENoaXBDb21tb24gKi8KKwkJCTwweDAwMDAwMDAwIDAgJmdpYyBHSUNfU1BJIDg1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCisJCQkvKiBVU0IgMi4wIENvbnRyb2xsZXIgKi8KKwkJCTwweDAwMDIxMDAwIDAgJmdpYyBHSUNfU1BJIDc5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCisJCQkvKiBVU0IgMy4wIENvbnRyb2xsZXIgKi8KKwkJCTwweDAwMDIzMDAwIDAgJmdpYyBHSUNfU1BJIDgwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCisJCQkvKiBFdGhlcm5ldCBDb250cm9sbGVyIDAgKi8KKwkJCTwweDAwMDI0MDAwIDAgJmdpYyBHSUNfU1BJIDE0NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKworCQkJLyogRXRoZXJuZXQgQ29udHJvbGxlciAxICovCisJCQk8MHgwMDAyNTAwMCAwICZnaWMgR0lDX1NQSSAxNDggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisKKwkJCS8qIEV0aGVybmV0IENvbnRyb2xsZXIgMiAqLworCQkJPDB4MDAwMjYwMDAgMCAmZ2ljIEdJQ19TUEkgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCisJCQkvKiBFdGhlcm5ldCBDb250cm9sbGVyIDMgKi8KKwkJCTwweDAwMDI3MDAwIDAgJmdpYyBHSUNfU1BJIDE1MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKworCQkJLyogTkFORCBDb250cm9sbGVyICovCisJCQk8MHgwMDAyODAwMCAwICZnaWMgR0lDX1NQSSA2NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCTwweDAwMDI4MDAwIDEgJmdpYyBHSUNfU1BJIDY1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPDB4MDAwMjgwMDAgMiAmZ2ljIEdJQ19TUEkgNjYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQk8MHgwMDAyODAwMCAzICZnaWMgR0lDX1NQSSA2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCTwweDAwMDI4MDAwIDQgJmdpYyBHSUNfU1BJIDY4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPDB4MDAwMjgwMDAgNSAmZ2ljIEdJQ19TUEkgNjkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQk8MHgwMDAyODAwMCA2ICZnaWMgR0lDX1NQSSA3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCTwweDAwMDI4MDAwIDcgJmdpYyBHSUNfU1BJIDcxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCWNoaXBjb21tb246IGNoaXBjb21tb25AMCB7CisJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDEwMDA+OworCisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTkxMTM2MF9lbnRwaG4uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtOTExMzYwX2VudHBobi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlZTk1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTkxMTM2MF9lbnRwaG4uZHRzCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQlNEIExJQ0VOU0UKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgICBkaXN0cmlidXRpb24uCisgKiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQnJvYWRjb20gQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImJjbS1jeWdudXMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQ3lnbnVzIEVudGVycHJpc2UgUGhvbmUgKEJDTTkxMTM2MF9FTlRQSE4pIjsKKwljb21wYXRpYmxlID0gImJyY20sYmNtMTEzNjAiLCAiYnJjbSxjeWdudXMiOworCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDM7CisJfTsKKworCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQzOworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCXVhcnQzOiBzZXJpYWxAMTgwMjMwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY205MTEzNjBrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTkxMTM2MGsuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NThkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY205MTEzNjBrLmR0cwpAQCAtMCwwICsxLDUzIEBACisvKgorICogIEJTRCBMSUNFTlNFCisgKgorICogIENvcHlyaWdodChjKSAyMDE0IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqCisgKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgICAgZGlzdHJpYnV0aW9uLgorICogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEJyb2FkY29tIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlICJiY20tY3lnbnVzLmR0c2kiCisKKy8geworCW1vZGVsID0gIkN5Z251cyBTVksgKEJDTTkxMTM2MEspIjsKKwljb21wYXRpYmxlID0gImJyY20sYmNtMTEzNjAiLCAiYnJjbSxjeWdudXMiOworCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDM7CisJfTsKKworCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQzOworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCXVhcnQzOiBzZXJpYWxAMTgwMjMwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY205NTgzMDBrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTk1ODMwMGsuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYmIzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY205NTgzMDBrLmR0cwpAQCAtMCwwICsxLDUzIEBACisvKgorICogIEJTRCBMSUNFTlNFCisgKgorICogIENvcHlyaWdodChjKSAyMDE0IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqCisgKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgICAgZGlzdHJpYnV0aW9uLgorICogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEJyb2FkY29tIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlICJiY20tY3lnbnVzLmR0c2kiCisKKy8geworCW1vZGVsID0gIkN5Z251cyBTVksgKEJDTTk1ODMwMEspIjsKKwljb21wYXRpYmxlID0gImJyY20sYmNtNTgzMDAiLCAiYnJjbSxjeWdudXMiOworCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDM7CisJfTsKKworCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQzOworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCXVhcnQzOiBzZXJpYWxAMTgwMjMwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLXNvbnktbnN6LWdzNy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLXNvbnktbnN6LWdzNy5kdHMKaW5kZXggYzcyYmZkNC4uODZkODVkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMi1zb255LW5zei1nczcuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjItc29ueS1uc3otZ3M3LmR0cwpAQCAtMjYsNCArMjYsMjAgQEAKIAl9OwogfTsKIAorJmFoY2kgeyBzdGF0dXMgPSAib2theSI7IH07CisKKyZldGgxIHsgc3RhdHVzID0gIm9rYXkiOyB9OworCisvKiBVbnBvcHVsYXRlZCBTQVRBIHBsdWcgb24gc29sZGVyIHNpZGUgKi8KKyZzYXRhMCB7IHN0YXR1cyA9ICJva2F5IjsgfTsKKworJnNhdGFfcGh5IHsgc3RhdHVzID0gIm9rYXkiOyB9OworCisvKiBTYW1zdW5nIE04RzJGQSA4R0IgZU1NQyAqLworJnNkaGNpMiB7CisJbm9uLXJlbW92YWJsZTsKKwlidXMtd2lkdGggPSA8OD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnVhcnQwIHsgc3RhdHVzID0gIm9rYXkiOyB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMi5kdHNpCmluZGV4IDlkN2M4MTAuLjAxNWEwNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLmR0c2kKQEAgLTUzLDYgKzUzLDM1IEBACiAKIAkJcmFuZ2VzID0gPDAgMHhmNzAwMDAwMCAweDEwMDAwMDA+OwogCisJCXNkaGNpMDogc2RoY2lAYWIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibXJ2bCxweGF2My1tbWMiOworCQkJcmVnID0gPDB4YWIwMDAwIDB4MjAwPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9TRElPMFhJTj4sIDwmY2hpcCBDTEtJRF9TRElPMD47CisJCQljbG9jay1uYW1lcyA9ICJpbyIsICJjb3JlIjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2RoY2kxOiBzZGhjaUBhYjA4MDAgeworCQkJY29tcGF0aWJsZSA9ICJtcnZsLHB4YXYzLW1tYyI7CisJCQlyZWcgPSA8MHhhYjA4MDAgMHgyMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NESU8xWElOPiwgPCZjaGlwIENMS0lEX1NESU8xPjsKKwkJCWNsb2NrLW5hbWVzID0gImlvIiwgImNvcmUiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzZGhjaTI6IHNkaGNpQGFiMTAwMCB7CisJCQljb21wYXRpYmxlID0gIm1ydmwscHhhdjMtbW1jIjsKKwkJCXJlZyA9IDwweGFiMTAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfTkZDX0VDQz4sIDwmY2hpcCBDTEtJRF9ORkM+OworCQkJY2xvY2stbmFtZXMgPSAiaW8iLCAiY29yZSI7CisJCQlwaW5jdHJsLTAgPSA8JmVtbWNfcG11eD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlsMjogbDItY2FjaGUtY29udHJvbGxlckBhYzAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHRhdXJvczMtY2FjaGUiLCAiYXJtLHBsMzEwLWNhY2hlIjsKIAkJCXJlZyA9IDwweGFjMDAwMCAweDEwMDA+OwpAQCAtNzksMTEgKzEwOCw0NyBAQAogCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1RXRD47CiAJCX07CiAKKwkJZXRoMTogZXRoZXJuZXRAYjkwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxweGExNjgtZXRoIjsKKwkJCXJlZyA9IDwweGI5MDAwMCAweDEwMDAwPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9HRVRIMT47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkvKiBzZXQgYnkgYm9vdGxvYWRlciAqLworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKKwkJCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJZXRocGh5MTogZXRoZXJuZXQtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKIAkJY3B1LWN0cmxAZGQwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4tY3B1LWN0cmwiOwogCQkJcmVnID0gPDB4ZGQwMDAwIDB4MTAwMDA+OwogCQl9OwogCisJCWV0aDA6IGV0aGVybmV0QGU1MDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwscHhhMTY4LWV0aCI7CisJCQlyZWcgPSA8MHhlNTAwMDAgMHgxMDAwMD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfR0VUSDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkvKiBzZXQgYnkgYm9vdGxvYWRlciAqLworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKKwkJCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJZXRocGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKIAkJYXBiQGU4MDAwMCB7CiAJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0yNDYsMTIgKzMxMSw1NyBAQAogCQkJfTsKIAkJfTsKIAorCQlhaGNpOiBzYXRhQGU5MDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMi1haGNpIiwgImdlbmVyaWMtYWhjaSI7CisJCQlyZWcgPSA8MHhlOTAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NBVEE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJc2F0YTA6IHNhdGEtcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJcGh5cyA9IDwmc2F0YV9waHkgMD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXNhdGExOiBzYXRhLXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCXBoeXMgPSA8JnNhdGFfcGh5IDE+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCQl9OworCisJCXNhdGFfcGh5OiBwaHlAZTkwMGEwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLXNhdGEtcGh5IjsKKwkJCXJlZyA9IDwweGU5MDBhMCAweDIwMD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0FUQT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCXNhdGEtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisKKwkJCXNhdGEtcGh5QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCX07CisKIAkJY2hpcDogY2hpcC1jb250cm9sQGVhMDAwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMi1jaGlwLWN0cmwiOwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJI3Jlc2V0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4ZWEwMDAwIDB4NDAwPjsKIAkJCWNsb2NrcyA9IDwmcmVmY2xrPjsKIAkJCWNsb2NrLW5hbWVzID0gInJlZmNsayI7CisKKwkJCWVtbWNfcG11eDogZW1tYy1wbXV4IHsKKwkJCQlncm91cHMgPSAiRzI2IjsKKwkJCQlmdW5jdGlvbiA9ICJlbW1jIjsKKwkJCX07CiAJCX07CiAKIAkJYXBiQGZjMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QtZ29vZ2xlLWNocm9tZWNhc3QuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMmNkLWdvb2dsZS1jaHJvbWVjYXN0LmR0cwppbmRleCBiY2Q4MWZmLi4zMDI3MGJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QtZ29vZ2xlLWNocm9tZWNhc3QuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJjZC1nb29nbGUtY2hyb21lY2FzdC5kdHMKQEAgLTExLDYgKzExLDcgQEAKIC9kdHMtdjEvOwogCiAjaW5jbHVkZSAiYmVybGluMmNkLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CiAKIC8gewogCW1vZGVsID0gIkdvb2dsZSBDaHJvbWVjYXN0IjsKQEAgLTI0LDYgKzI1LDM1IEBACiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJCXJlZyA9IDwweDAwMDAwMDAwIDB4MjAwMDAwMDA+OyAvKiA1MTIgTUIgKi8KIAl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQl3aGl0ZSB7CisJCQlsYWJlbCA9ICJ3aGl0ZSI7CisJCQlncGlvcyA9IDwmcG9ydGMgMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAia2VlcCI7CisJCX07CisKKwkJcmVkIHsKKwkJCWxhYmVsID0gInJlZCI7CisJCQlncGlvcyA9IDwmcG9ydGMgMiBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAia2VlcCI7CisJCX07CisJfTsKK307CisKKy8qCisgKiBBenVyZVdhdmUgQVctTkgzODcgKE1hcnZlbGwgODhXODc4NykKKyAqIDgwMi4xMWIvZy9uICsgQmx1ZXRvb3RoIDIuMQorICovCismc2RoY2kwIHsKKwlub24tcmVtb3ZhYmxlOworCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKICZ1YXJ0MCB7IHN0YXR1cyA9ICJva2F5IjsgfTsKKworJnVzYl9waHkxIHsgc3RhdHVzID0gIm9rYXkiOyB9OworCismdXNiMSB7IHN0YXR1cyA9ICJva2F5IjsgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJjZC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMmNkLmR0c2kKaW5kZXggY2MxZGY2NS4uMjMwZGYzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMmNkLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMmNkLmR0c2kKQEAgLTQ1LDYgKzQ1LDE1IEBACiAKIAkJcmFuZ2VzID0gPDAgMHhmNzAwMDAwMCAweDEwMDAwMDA+OwogCisJCXNkaGNpMDogc2RoY2lAYWIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibXJ2bCxweGF2My1tbWMiOworCQkJcmVnID0gPDB4YWIwMDAwIDB4MjAwPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9TRElPMFhJTj4sIDwmY2hpcCBDTEtJRF9TRElPMD47CisJCQljbG9jay1uYW1lcyA9ICJpbyIsICJjb3JlIjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJbDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAYWMwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzEwLWNhY2hlIjsKIAkJCXJlZyA9IDwweGFjMDAwMCAweDEwMDA+OwpAQCAtNjYsNiArNzUsNTggQEAKIAkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9UV0Q+OwogCQl9OwogCisJCXVzYl9waHkwOiB1c2ItcGh5QGI3NDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMmNkLXVzYi1waHkiOworCQkJcmVnID0gPDB4Yjc0MDAwIDB4MTI4PjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQlyZXNldHMgPSA8JmNoaXAgMHgxNzggMjM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2JfcGh5MTogdXNiLXBoeUBiNzgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJjZC11c2ItcGh5IjsKKwkJCXJlZyA9IDwweGI3ODAwMCAweDEyOD47CisJCQkjcGh5LWNlbGxzID0gPDA+OworCQkJcmVzZXRzID0gPCZjaGlwIDB4MTc4IDI0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZXRoMTogZXRoZXJuZXRAYjkwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxweGExNjgtZXRoIjsKKwkJCXJlZyA9IDwweGI5MDAwMCAweDEwMDAwPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9HRVRIMT47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkvKiBzZXQgYnkgYm9vdGxvYWRlciAqLworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKKwkJCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJZXRocGh5MTogZXRoZXJuZXQtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJZXRoMDogZXRoZXJuZXRAZTUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxweGExNjgtZXRoIjsKKwkJCXJlZyA9IDwweGU1MDAwMCAweDEwMDAwPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9HRVRIMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCS8qIHNldCBieSBib290bG9hZGVyICovCisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOworCQkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlldGhwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKwogCQlhcGJAZTgwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTIzMSw2ICsyOTIsNyBAQAogCQljaGlwOiBjaGlwLWNvbnRyb2xAZWEwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yY2QtY2hpcC1jdHJsIjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCSNyZXNldC1jZWxscyA9IDwyPjsKIAkJCXJlZyA9IDwweGVhMDAwMCAweDQwMD47CiAJCQljbG9ja3MgPSA8JnJlZmNsaz47CiAJCQljbG9jay1uYW1lcyA9ICJyZWZjbGsiOwpAQCAtMjQxLDYgKzMwMywyNiBAQAogCQkJfTsKIAkJfTsKIAorCQl1c2IwOiB1c2JAZWQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2hpcGlkZWEsdXNiMiI7CisJCQlyZWcgPSA8MHhlZDAwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1VTQjA+OworCQkJcGh5cyA9IDwmdXNiX3BoeTA+OworCQkJcGh5LW5hbWVzID0gInVzYi1waHkiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2IxOiB1c2JAZWUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2hpcGlkZWEsdXNiMiI7CisJCQlyZWcgPSA8MHhlZTAwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1VTQjE+OworCQkJcGh5cyA9IDwmdXNiX3BoeTE+OworCQkJcGh5LW5hbWVzID0gInVzYi1waHkiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlhcGJAZmMwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cwppbmRleCBlYTFmOTliLi4yOGU3ZTIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS1tYXJ2ZWxsLWRtcC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEtbWFydmVsbC1kbXAuZHRzCkBAIC03LDYgKzcsOCBAQAogICovCiAKIC9kdHMtdjEvOworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CiAjaW5jbHVkZSAiYmVybGluMnEuZHRzaSIKIAogLyB7CkBAIC0yMSw2ICsyMywzOSBAQAogCWNob29zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCBlYXJseXByaW50ayI7CiAJfTsKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcmVnX3VzYjBfdmJ1czogcmVndWxhdG9yQDAgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiMF92YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZwb3J0YiA4IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQl9OworCisJCXJlZ191c2IxX3ZidXM6IHJlZ3VsYXRvckAxIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInVzYjFfdmJ1cyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJZ3BpbyA9IDwmcG9ydGIgMTAgR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCX07CisKKwkJcmVnX3VzYjJfdmJ1czogcmVndWxhdG9yQDIgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiMl92YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZwb3J0YiAxMiBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJfTsKKwl9OwogfTsKIAogJnNkaGNpMSB7CkBAIC00Niw2ICs4MSwzMiBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZ1c2JfcGh5MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYl9waHkyIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiMCB7CisJdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IwX3ZidXM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2IyIHsKKwl2YnVzLXN1cHBseSA9IDwmcmVnX3VzYjJfdmJ1cz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmV0aDAgewogCXN0YXR1cyA9ICJva2F5IjsKIH07CisKKyZzYXRhMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNhdGFfcGh5IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLmR0c2kKaW5kZXggODkxZDU2Yi4uMzUyNTNjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpCkBAIC0xMTQsNiArMTE0LDQwIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwogCQl9OwogCisJCXVzYl9waHkyOiBwaHlAYTJmNDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLXVzYi1waHkiOworCQkJcmVnID0gPDB4YTJmNDAwIDB4MTI4PjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQlyZXNldHMgPSA8JmNoaXAgMHgxMDQgMTQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2IyOiB1c2JAYTMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2hpcGlkZWEsdXNiMiI7CisJCQlyZWcgPSA8MHhhMzAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVVNCMj47CisJCQlwaHlzID0gPCZ1c2JfcGh5Mj47CisJCQlwaHktbmFtZXMgPSAidXNiLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYl9waHkwOiBwaHlAYjc0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLXVzYi1waHkiOworCQkJcmVnID0gPDB4Yjc0MDAwIDB4MTI4PjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQlyZXNldHMgPSA8JmNoaXAgMHgxMDQgMTI+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2JfcGh5MTogcGh5QGI3ODAwMCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMi11c2ItcGh5IjsKKwkJCXJlZyA9IDwweGI3ODAwMCAweDEyOD47CisJCQkjcGh5LWNlbGxzID0gPDA+OworCQkJcmVzZXRzID0gPCZjaGlwIDB4MTA0IDEzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJZXRoMDogZXRoZXJuZXRAYjkwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxweGExNjgtZXRoIjsKIAkJCXJlZyA9IDwweGI5MDAwMCAweDEwMDAwPjsKQEAgLTEyMyw2ICsxNTcsNyBAQAogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIApAQCAtMjU1LDcgKzI5MCw2IEBACiAJCQkJcmVnID0gPDB4MmMxNCAweDE0PjsKIAkJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfQ0ZHPjsKIAkJCQljbG9jay1uYW1lcyA9ICJ0aW1lciI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKIAkJCXRpbWVyMjogdGltZXJAMmMyOCB7CkBAIC0zNDksNiArMzgzLDcgQEAKIAkJY2hpcDogY2hpcC1jb250cm9sQGVhMDAwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMnEtY2hpcC1jdHJsIjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCSNyZXNldC1jZWxscyA9IDwyPjsKIAkJCXJlZyA9IDwweGVhMDAwMCAweDQwMD4sIDwweGRkMDE3MCAweDEwPjsKIAkJCWNsb2NrcyA9IDwmcmVmY2xrPjsKIAkJCWNsb2NrLW5hbWVzID0gInJlZmNsayI7CkBAIC0zNjQsNiArMzk5LDY1IEBACiAJCQl9OwogCQl9OwogCisJCWFoY2k6IHNhdGFAZTkwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4ycS1haGNpIiwgImdlbmVyaWMtYWhjaSI7CisJCQlyZWcgPSA8MHhlOTAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NBVEE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJc2F0YTA6IHNhdGEtcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJcGh5cyA9IDwmc2F0YV9waHkgMD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXNhdGExOiBzYXRhLXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCXBoeXMgPSA8JnNhdGFfcGh5IDE+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCQl9OworCisJCXNhdGFfcGh5OiBwaHlAZTkwMGEwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4ycS1zYXRhLXBoeSI7CisJCQlyZWcgPSA8MHhlOTAwYTAgMHgyMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NBVEE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlzYXRhLXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCisJCQlzYXRhLXBoeUAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCQl9OworCisJCXVzYjA6IHVzYkBlZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJjaGlwaWRlYSx1c2IyIjsKKwkJCXJlZyA9IDwweGVkMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9VU0IwPjsKKwkJCXBoeXMgPSA8JnVzYl9waHkwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2ItcGh5IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdXNiMTogdXNiQGVlMDAwMCB7CisJCQljb21wYXRpYmxlID0gImNoaXBpZGVhLHVzYjIiOworCQkJcmVnID0gPDB4ZWUwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1VTQjE+OworCQkJcGh5cyA9IDwmdXNiX3BoeTE+OworCQkJcGh5LW5hbWVzID0gInVzYi1waHkiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlhcGJAZmMwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTctZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTctZXZtLmR0cwppbmRleCBjNmNlNjI1Li43MzYwOTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9kcmE3LWV2bS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy1ldm0uZHRzCkBAIC0xNzEsNiArMTcxLDEwMSBAQAogCQkJMHhkMAkoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZ3BtY19iZTBuX2NsZSAqLwogCQk+OwogCX07CisKKwljcHN3X2RlZmF1bHQ6IGNwc3dfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBTbGF2ZSAxICovCisJCQkweDI1MCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3R4Yy5yZ21paTBfdHhjICovCisJCQkweDI1NCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3R4Y3RsLnJnbWlpMF90eGN0bCAqLworCQkJMHgyNTggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIHJnbWlpMF90ZDMucmdtaWkwX3R4ZDMgKi8KKwkJCTB4MjVjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfdHhkMi5yZ21paTBfdHhkMiAqLworCQkJMHgyNjAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIHJnbWlpMF90eGQxLnJnbWlpMF90eGQxICovCisJCQkweDI2NCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3R4ZDAucmdtaWkwX3R4ZDAgKi8KKwkJCTB4MjY4IChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHJnbWlpMF9yeGMucmdtaWkwX3J4YyAqLworCQkJMHgyNmMgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3J4Y3RsLnJnbWlpMF9yeGN0bCAqLworCQkJMHgyNzAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3J4ZDMucmdtaWkwX3J4ZDMgKi8KKwkJCTB4Mjc0IChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHJnbWlpMF9yeGQyLnJnbWlpMF9yeGQyICovCisJCQkweDI3OCAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfcnhkMS5yZ21paTBfcnhkMSAqLworCQkJMHgyN2MgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3J4ZDAucmdtaWkwX3J4ZDAgKi8KKworCQkJLyogU2xhdmUgMiAqLworCQkJMHgxOTggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxMi5yZ21paTFfdHhjICovCisJCQkweDE5YyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDEzLnJnbWlpMV90Y3RsICovCisJCQkweDFhMCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE0LnJnbWlpMV90ZDMgKi8KKwkJCTB4MWE0IChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTUucmdtaWkxX3RkMiAqLworCQkJMHgxYTggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxNi5yZ21paTFfdGQxICovCisJCQkweDFhYyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE3LnJnbWlpMV90ZDAgKi8KKwkJCTB4MWIwIChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxOC5yZ21paTFfcmNsayAqLworCQkJMHgxYjQgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE5LnJnbWlpMV9yY3RsICovCisJCQkweDFiOCAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMjAucmdtaWkxX3JkMyAqLworCQkJMHgxYmMgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDIxLnJnbWlpMV9yZDIgKi8KKwkJCTB4MWMwIChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMi5yZ21paTFfcmQxICovCisJCQkweDFjNCAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMjMucmdtaWkxX3JkMCAqLworCQk+OworCisJfTsKKworCWNwc3dfc2xlZXA6IGNwc3dfc2xlZXAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogU2xhdmUgMSAqLworCQkJMHgyNTAgKE1VWF9NT0RFMTUpCisJCQkweDI1NCAoTVVYX01PREUxNSkKKwkJCTB4MjU4IChNVVhfTU9ERTE1KQorCQkJMHgyNWMgKE1VWF9NT0RFMTUpCisJCQkweDI2MCAoTVVYX01PREUxNSkKKwkJCTB4MjY0IChNVVhfTU9ERTE1KQorCQkJMHgyNjggKE1VWF9NT0RFMTUpCisJCQkweDI2YyAoTVVYX01PREUxNSkKKwkJCTB4MjcwIChNVVhfTU9ERTE1KQorCQkJMHgyNzQgKE1VWF9NT0RFMTUpCisJCQkweDI3OCAoTVVYX01PREUxNSkKKwkJCTB4MjdjIChNVVhfTU9ERTE1KQorCisJCQkvKiBTbGF2ZSAyICovCisJCQkweDE5OCAoTVVYX01PREUxNSkKKwkJCTB4MTljIChNVVhfTU9ERTE1KQorCQkJMHgxYTAgKE1VWF9NT0RFMTUpCisJCQkweDFhNCAoTVVYX01PREUxNSkKKwkJCTB4MWE4IChNVVhfTU9ERTE1KQorCQkJMHgxYWMgKE1VWF9NT0RFMTUpCisJCQkweDFiMCAoTVVYX01PREUxNSkKKwkJCTB4MWI0IChNVVhfTU9ERTE1KQorCQkJMHgxYjggKE1VWF9NT0RFMTUpCisJCQkweDFiYyAoTVVYX01PREUxNSkKKwkJCTB4MWMwIChNVVhfTU9ERTE1KQorCQkJMHgxYzQgKE1VWF9NT0RFMTUpCisJCT47CisJfTsKKworCWRhdmluY2lfbWRpb19kZWZhdWx0OiBkYXZpbmNpX21kaW9fZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDIzYyAoUElOX09VVFBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1kaW9fZC5tZGlvX2QgKi8KKwkJCTB4MjQwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBtZGlvX2Nsay5tZGlvX2NsayAqLworCQk+OworCX07CisKKwlkYXZpbmNpX21kaW9fc2xlZXA6IGRhdmluY2lfbWRpb19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDIzYyAoTVVYX01PREUxNSkKKwkJCTB4MjQwIChNVVhfTU9ERTE1KQorCQk+OworCX07CisKKwlkY2FuMV9waW5zX2RlZmF1bHQ6IGRjYW4xX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDNkMCAgIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAvKiBkY2FuMV90eCAqLworCQkJMHgzZDQgICAoTVVYX01PREUxNSkJCS8qIGRjYW4xX3J4Lm9mZiAqLworCQkJMHg0MTggICAoUFVMTF9ESVMgfCBNVVhfTU9ERTEpIC8qIHdha2V1cDAuZGNhbjFfcnggKi8KKwkJPjsKKwl9OworCisJZGNhbjFfcGluc19zbGVlcDogZGNhbjFfcGluc19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDNkMCAgIChNVVhfTU9ERTE1KQkvKiBkY2FuMV90eC5vZmYgKi8KKwkJCTB4M2Q0ICAgKE1VWF9NT0RFMTUpCS8qIGRjYW4xX3J4Lm9mZiAqLworCQkJMHg0MTggICAoTVVYX01PREUxNSkJLyogd2FrZXVwMC5vZmYgKi8KKwkJPjsKKwl9OwogfTsKIAogJmkyYzEgewpAQCAtMjAxLDYgKzI5Niw3IEBACiAJCQkJCXJlZ3VsYXRvci1uYW1lID0gInNtcHM0NSI7CiAJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA4NTAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKIAkJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQkJfTsKIApAQCAtMjA5LDYgKzMwNSw3IEBACiAJCQkJCXJlZ3VsYXRvci1uYW1lID0gInNtcHM2IjsKIAkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKIAkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTI1MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAkJCQl9OwogCkBAIC0yMjYsNiArMzIzLDcgQEAKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczgiOwogCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwgODUwMDAwPjsKIAkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTI1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJCXJlZ3VsYXRvci1ib290LW9uOwogCQkJCX07CiAKQEAgLTI1Miw2ICszNTAsNyBAQAogCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJsZG8yIjsKIAkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CiAJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAkJCQl9OwogCkBAIC0yNjksNiArMzY4LDcgQEAKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvOSI7CiAJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwNTAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKIAkJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQkJfTsKIApAQCAtNTI4LDMgKzYyOCwzNiBAQAogCXRpLG5vLXJlc2V0LW9uLWluaXQ7CiAJdGksbm8taWRsZS1vbi1pbml0OwogfTsKKworJm1hYyB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZjcHN3X2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmY3Bzd19zbGVlcD47CisJZHVhbF9lbWFjOworfTsKKworJmNwc3dfZW1hYzAgeworCXBoeV9pZCA9IDwmZGF2aW5jaV9tZGlvPiwgPDI+OworCXBoeS1tb2RlID0gInJnbWlpIjsKKwlkdWFsX2VtYWNfcmVzX3ZsYW4gPSA8MT47Cit9OworCismY3Bzd19lbWFjMSB7CisJcGh5X2lkID0gPCZkYXZpbmNpX21kaW8+LCA8Mz47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCWR1YWxfZW1hY19yZXNfdmxhbiA9IDwyPjsKK307CisKKyZkYXZpbmNpX21kaW8geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZkYXZpbmNpX21kaW9fZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZkYXZpbmNpX21kaW9fc2xlZXA+OworfTsKKworJmRjYW4xIHsKKwlzdGF0dXMgPSAib2siOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZkY2FuMV9waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmZGNhbjFfcGluc19zbGVlcD47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy5kdHNpCmluZGV4IDljYzk4NDMuLjYzYmY5OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3LmR0c2kKQEAgLTM0LDYgKzM0LDE0IEBACiAJCXNlcmlhbDMgPSAmdWFydDQ7CiAJCXNlcmlhbDQgPSAmdWFydDU7CiAJCXNlcmlhbDUgPSAmdWFydDY7CisJCXNlcmlhbDYgPSAmdWFydDc7CisJCXNlcmlhbDcgPSAmdWFydDg7CisJCXNlcmlhbDggPSAmdWFydDk7CisJCXNlcmlhbDkgPSAmdWFydDEwOworCQlldGhlcm5ldDAgPSAmY3Bzd19lbWFjMDsKKwkJZXRoZXJuZXQxID0gJmNwc3dfZW1hYzE7CisJCWRfY2FuMCA9ICZkY2FuMTsKKwkJZF9jYW4xID0gJmRjYW4yOwogCX07CiAKIAl0aW1lciB7CkBAIC0yMDEsNiArMjA5LDExIEBACiAJCQl0aSxod21vZHMgPSAiY291bnRlcl8zMmsiOwogCQl9OwogCisJCWRyYTdfY3RybF9jb3JlOiBjdHJsX2NvcmVANGEwMDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzeXNjb24iOworCQkJcmVnID0gPDB4NGEwMDIwMDAgMHg2ZDA+OworCQl9OworCiAJCWRyYTdfY3RybF9nZW5lcmFsOiB0aXN5c2NvbkA0YTAwMmUwMCB7CiAJCQljb21wYXRpYmxlID0gInN5c2NvbiI7CiAJCQlyZWcgPSA8MHg0YTAwMmUwMCAweDdjPjsKQEAgLTMzNSw2ICszNDgsOCBAQAogCQkJdGksaHdtb2RzID0gInVhcnQxIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJZG1hcyA9IDwmc2RtYSA0OT4sIDwmc2RtYSA1MD47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQl9OwogCiAJCXVhcnQyOiBzZXJpYWxANDgwNmMwMDAgewpAQCAtMzQ0LDYgKzM1OSw4IEBACiAJCQl0aSxod21vZHMgPSAidWFydDIiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQ4MDAwMDAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZzZG1hIDUxPiwgPCZzZG1hIDUyPjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDM6IHNlcmlhbEA0ODAyMDAwMCB7CkBAIC0zNTMsNiArMzcwLDggQEAKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0MyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWRtYXMgPSA8JnNkbWEgNTM+LCA8JnNkbWEgNTQ+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJfTsKIAogCQl1YXJ0NDogc2VyaWFsQDQ4MDZlMDAwIHsKQEAgLTM2Miw2ICszODEsOCBAQAogCQkJdGksaHdtb2RzID0gInVhcnQ0IjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJZG1hcyA9IDwmc2RtYSA1NT4sIDwmc2RtYSA1Nj47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQl9OwogCiAJCXVhcnQ1OiBzZXJpYWxANDgwNjYwMDAgewpAQCAtMzcxLDYgKzM5Miw4IEBACiAJCQl0aSxod21vZHMgPSAidWFydDUiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQ4MDAwMDAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZzZG1hIDYzPiwgPCZzZG1hIDY0PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDY6IHNlcmlhbEA0ODA2ODAwMCB7CkBAIC0zODAsNiArNDAzLDggQEAKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0NiI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWRtYXMgPSA8JnNkbWEgNzk+LCA8JnNkbWEgODA+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJfTsKIAogCQl1YXJ0Nzogc2VyaWFsQDQ4NDIwMDAwIHsKQEAgLTQyMSw3ICs0NDYsMTEgQEAKIAkJbWFpbGJveDE6IG1haWxib3hANGEwZjQwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1tYWlsYm94IjsKIAkJCXJlZyA9IDwweDRhMGY0MDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDEzNSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDEzNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94MSI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDM+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8OD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDMwLDcgKzQ1OSwxMiBAQAogCQltYWlsYm94MjogbWFpbGJveEA0ODgzYTAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4M2EwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIzNyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDIzOCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDIzOSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI0MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94MiI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTQzOSw3ICs0NzMsMTIgQEAKIAkJbWFpbGJveDM6IG1haWxib3hANDg4M2MwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1tYWlsYm94IjsKIAkJCXJlZyA9IDwweDQ4ODNjMDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNDEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNDIgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNDMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNDQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveDMiOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC00NDgsNyArNDg3LDEyIEBACiAJCW1haWxib3g0OiBtYWlsYm94QDQ4ODNlMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODgzZTAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjQ1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjQ2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjQ3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjQ4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3g0IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwxMj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDU3LDcgKzUwMSwxMiBAQAogCQltYWlsYm94NTogbWFpbGJveEA0ODg0MDAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4NDAwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI0OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI1MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI1MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI1MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94NSI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTQ2Niw3ICs1MTUsMTIgQEAKIAkJbWFpbGJveDY6IG1haWxib3hANDg4NDIwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1tYWlsYm94IjsKIAkJCXJlZyA9IDwweDQ4ODQyMDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNTMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNTQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNTUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveDYiOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC00NzUsNyArNTI5LDEyIEBACiAJCW1haWxib3g3OiBtYWlsYm94QDQ4ODQ0MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg0NDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjU3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjU4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjU5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjYwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3g3IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwxMj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDg0LDcgKzU0MywxMiBAQAogCQltYWlsYm94ODogbWFpbGJveEA0ODg0NjAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4NDYwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI2MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI2MiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI2MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI2NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94OCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTQ5Myw3ICs1NTcsMTIgQEAKIAkJbWFpbGJveDk6IG1haWxib3hANDg4NWUwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1tYWlsYm94IjsKIAkJCXJlZyA9IDwweDQ4ODVlMDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNjUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNjYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNjcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNjggSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveDkiOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC01MDIsNyArNTcxLDEyIEBACiAJCW1haWxib3gxMDogbWFpbGJveEA0ODg2MDAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4NjAwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI2OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI3MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI3MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94MTAiOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC01MTEsNyArNTg1LDEyIEBACiAJCW1haWxib3gxMTogbWFpbGJveEA0ODg2MjAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4NjIwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI3NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI3NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94MTEiOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC01MjAsNyArNTk5LDEyIEBACiAJCW1haWxib3gxMjogbWFpbGJveEA0ODg2NDAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4NjQwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI3NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI3OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI3OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI4MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94MTIiOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC01MjksNyArNjEzLDEyIEBACiAJCW1haWxib3gxMzogbWFpbGJveEA0ODgwMjAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4MDIwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM3OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDM4MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDM4MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDM4MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94MTMiOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0xMDc1LDYgKzExNjQsMTUgQEAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKKwkJcnRjQDQ4ODM4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksYW0zMzUyLXJ0YyI7CisJCQlyZWcgPSA8MHg0ODgzODAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjE3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJdGksaHdtb2RzID0gInJ0Y3NzIjsKKwkJCWNsb2NrcyA9IDwmc3lzXzMya19jaz47CisJCX07CisKIAkJb21hcF9jb250cm9sX3VzYjJwaHkxOiBjb250cm9sLXBoeUA0YTAwMjMwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLGNvbnRyb2wtcGh5LXVzYjIiOwogCQkJcmVnID0gPDB4NGEwMDIzMDAgMHg0PjsKQEAgLTExNDEsNyArMTIzOSw3IEBACiAJCQl9OwogCQl9OwogCi0JCW9tYXBfZHdjM18xQDQ4ODgwMDAwIHsKKwkJb21hcF9kd2MzXzE6IG9tYXBfZHdjM18xQDQ4ODgwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksZHdjMyI7CiAJCQl0aSxod21vZHMgPSAidXNiX290Z19zczEiOwogCQkJcmVnID0gPDB4NDg4ODAwMDAgMHgxMDAwMD47CkBAIC0xMTYyLDcgKzEyNjAsNyBAQAogCQkJfTsKIAkJfTsKIAotCQlvbWFwX2R3YzNfMkA0ODhjMDAwMCB7CisJCW9tYXBfZHdjM18yOiBvbWFwX2R3YzNfMkA0ODhjMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLGR3YzMiOwogCQkJdGksaHdtb2RzID0gInVzYl9vdGdfc3MyIjsKIAkJCXJlZyA9IDwweDQ4OGMwMDAwIDB4MTAwMDA+OwpAQCAtMTE4NCw3ICsxMjgyLDcgQEAKIAkJfTsKIAogCQkvKiBJUlEgZm9yIERXQzNfMyBhbmQgRFdDM180IG5lZWQgSVJRIGNyb3NzYmFyICovCi0JCW9tYXBfZHdjM18zQDQ4OTAwMDAwIHsKKwkJb21hcF9kd2MzXzM6IG9tYXBfZHdjM18zQDQ4OTAwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksZHdjMyI7CiAJCQl0aSxod21vZHMgPSAidXNiX290Z19zczMiOwogCQkJcmVnID0gPDB4NDg5MDAwMDAgMHgxMDAwMD47CkBAIC0xMjA0LDI2ICsxMzAyLDYgQEAKIAkJCX07CiAJCX07CiAKLQkJb21hcF9kd2MzXzRANDg5NDAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxkd2MzIjsKLQkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX3NzNCI7Ci0JCQlyZWcgPSA8MHg0ODk0MDAwMCAweDEwMDAwPjsKLQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzNDYgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJdXRtaS1tb2RlID0gPDI+OwotCQkJcmFuZ2VzOwotCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCXVzYjQ6IHVzYkA0ODk1MDAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3YzMiOwotCQkJCXJlZyA9IDwweDQ4OTUwMDAwIDB4MTcwMDA+OwotCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzNDUgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJdHgtZmlmby1yZXNpemU7Ci0JCQkJbWF4aW11bS1zcGVlZCA9ICJoaWdoLXNwZWVkIjsKLQkJCQlkcl9tb2RlID0gIm90ZyI7Ci0JCQl9OwotCQl9OwotCiAJCWVsbTogZWxtQDQ4MDc4MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksYW0zMzUyLWVsbSI7CiAJCQlyZWcgPSA8MHg0ODA3ODAwMCAweGZjMD47ICAgICAgLyogZGV2aWNlIElPIHJlZ2lzdGVycyAqLwpAQCAtMTI2NSw2ICsxMzQzLDg0IEBACiAJCQl0aSxpcnFzLXNraXAgPSA8MTAgMTMzIDEzOSAxNDA+OwogCQkJdGksaXJxcy1zYWZlLW1hcCA9IDwwPjsKIAkJfTsKKworCQltYWM6IGV0aGVybmV0QDRhMTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksY3BzdyI7CisJCQl0aSxod21vZHMgPSAiZ21hYyI7CisJCQljbG9ja3MgPSA8JmRwbGxfZ21hY19jaz4sIDwmZ21hY19nbWlpX3JlZl9jbGtfZGl2PjsKKwkJCWNsb2NrLW5hbWVzID0gImZjayIsICJjcHRzIjsKKwkJCWNwZG1hX2NoYW5uZWxzID0gPDg+OworCQkJYWxlX2VudHJpZXMgPSA8MTAyND47CisJCQliZF9yYW1fc2l6ZSA9IDwweDIwMDA+OworCQkJbm9fYmRfcmFtID0gPDA+OworCQkJcnhfZGVzY3MgPSA8NjQ+OworCQkJbWFjX2NvbnRyb2wgPSA8MHgyMD47CisJCQlzbGF2ZXMgPSA8Mj47CisJCQlhY3RpdmVfc2xhdmUgPSA8MD47CisJCQljcHRzX2Nsb2NrX211bHQgPSA8MHg4MDAwMDAwMD47CisJCQljcHRzX2Nsb2NrX3NoaWZ0ID0gPDI5PjsKKwkJCXJlZyA9IDwweDQ4NDg0MDAwIDB4MTAwMAorCQkJICAgICAgIDB4NDg0ODUyMDAgMHgyRTAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkvKgorCQkJICogcnhfdGhyZXNoX3BlbmQKKwkJCSAqIHJ4X3BlbmQKKwkJCSAqIHR4X3BlbmQKKwkJCSAqIG1pc2NfcGVuZAorCQkJICovCisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzM0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMzM1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMzM2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMzM3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcmFuZ2VzOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJZGF2aW5jaV9tZGlvOiBtZGlvQDQ4NDg1MDAwIHsKKwkJCQljb21wYXRpYmxlID0gInRpLGRhdmluY2lfbWRpbyI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJdGksaHdtb2RzID0gImRhdmluY2lfbWRpbyI7CisJCQkJYnVzX2ZyZXEgPSA8MTAwMDAwMD47CisJCQkJcmVnID0gPDB4NDg0ODUwMDAgMHgxMDA+OworCQkJfTsKKworCQkJY3Bzd19lbWFjMDogc2xhdmVANDg0ODAyMDAgeworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQltYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCX07CisKKwkJCWNwc3dfZW1hYzE6IHNsYXZlQDQ4NDgwMzAwIHsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQl9OworCisJCQlwaHlfc2VsOiBjcHN3LXBoeS1zZWxANGEwMDI1NTQgeworCQkJCWNvbXBhdGlibGUgPSAidGksZHJhN3h4LWNwc3ctcGh5LXNlbCI7CisJCQkJcmVnPSA8MHg0YTAwMjU1NCAweDQ+OworCQkJCXJlZy1uYW1lcyA9ICJnbWlpLXNlbCI7CisJCQl9OworCQl9OworCisJCWRjYW4xOiBjYW5ANDgxY2MwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxkcmE3LWRfY2FuIjsKKwkJCXRpLGh3bW9kcyA9ICJkY2FuMSI7CisJCQlyZWcgPSA8MHg0YWUzYzAwMCAweDIwMDA+OworCQkJc3lzY29uLXJhbWluaXQgPSA8JmRyYTdfY3RybF9jb3JlIDB4NTU4IDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIyMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmZGNhbjFfc3lzX2Nsa19tdXg+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlkY2FuMjogY2FuQDQ4MWQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksZHJhNy1kX2NhbiI7CisJCQl0aSxod21vZHMgPSAiZGNhbjIiOworCQkJcmVnID0gPDB4NDg0ODAwMDAgMHgyMDAwPjsKKwkJCXN5c2Nvbi1yYW1pbml0ID0gPCZkcmE3X2N0cmxfY29yZSAweDU1OCAxPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnN5c19jbGtpbjE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNzItZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcyLWV2bS5kdHMKaW5kZXggNDEwNzQyOC4uYWZjNzRmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNzItZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3Mi1ldm0uZHRzCkBAIC0xNyw2ICsxNywxMyBAQAogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwogCQlyZWcgPSA8MHg4MDAwMDAwMCAweDQwMDAwMDAwPjsgLyogMTAyNCBNQiAqLwogCX07CisKKwlldm1fM3YzOiBmaXhlZHJlZ3VsYXRvci1ldm1fM3YzIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJldm1fM3YzIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCX07CiB9OwogCiAmZHJhN19wbXhfY29yZSB7CkBAIC0yNiw2ICszMyw5NCBAQAogCQkJMHg0MDQgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkgLyogaTJjMV9zY2wuaTJjMV9zY2wgKi8KIAkJPjsKIAl9OworCisJbmFuZF9kZWZhdWx0OiBuYW5kX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgwCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMCAqLworCQkJMHg0CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMSAqLworCQkJMHg4CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMiAqLworCQkJMHhjCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMyAqLworCQkJMHgxMAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDQgKi8KKwkJCTB4MTQJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQ1ICovCisJCQkweDE4CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkNiAqLworCQkJMHgxYwkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDcgKi8KKwkJCTB4MjAJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQ4ICovCisJCQkweDI0CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkOSAqLworCQkJMHgyOAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDEwICovCisJCQkweDJjCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMTEgKi8KKwkJCTB4MzAJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQxMiAqLworCQkJMHgzNAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDEzICovCisJCQkweDM4CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMTQgKi8KKwkJCTB4M2MJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQxNSAqLworCQkJMHhiNAkoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgLyogZ3BtY19jczAgKi8KKwkJCTB4YzQJKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWR2bl9hbGUgKi8KKwkJCTB4Y2MJKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApIC8qIGdwbWNfd2VuICovCisJCQkweGM4CShQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAvKiBncG1jX29lbl9yZW4gKi8KKwkJCTB4ZDAJKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApIC8qIGdwbWNfYmVuMCAqLworCQkJMHhkOAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY193YWl0MCAqLworCQk+OworCX07CisKKwl1c2IxX3BpbnM6IHBpbm11eF91c2IxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgyODAgKFBJTl9JTlBVVF9TTEVXIHwgTVVYX01PREUwKSAvKiB1c2IxX2RydnZidXMgKi8KKwkJPjsKKwl9OworCisJdXNiMl9waW5zOiBwaW5tdXhfdXNiMl9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4Mjg0IChQSU5fSU5QVVRfU0xFVyB8IE1VWF9NT0RFMCkgLyogdXNiMl9kcnZ2YnVzICovCisJCT47CisJfTsKKworCXRwczY1OTE3X3BpbnNfZGVmYXVsdDogdHBzNjU5MTdfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4NDI0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiB3YWtldXAzLnN5c19uaXJxMSAqLworCQk+OworCX07CisKKwltbWMxX3BpbnNfZGVmYXVsdDogbW1jMV9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgzNmMgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMTQpCS8qIG1tYzFzZGNkLmdwaW8yMTkgKi8KKwkJCTB4MzU0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2Nsay5jbGsgKi8KKwkJCTB4MzU4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2NtZC5jbWQgKi8KKwkJCTB4MzVjIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2RhdDAuZGF0MCAqLworCQkJMHgzNjAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0MS5kYXQxICovCisJCQkweDM2NCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogbW1jMV9kYXQyLmRhdDIgKi8KKwkJCTB4MzY4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2RhdDMuZGF0MyAqLworCQk+OworCX07CisKKwltbWMyX3BpbnNfZGVmYXVsdDogbW1jMl9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg5YyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjMubW1jMl9jbGsgKi8KKwkJCTB4YjAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfY3MxLm1tYzJfY21kICovCisJCQkweGEwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyNC5tbWMyX2RhdDAgKi8KKwkJCTB4YTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI1Lm1tYzJfZGF0MSAqLworCQkJMHhhOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjYubW1jMl9kYXQyICovCisJCQkweGFjIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyNy5tbWMyX2RhdDMgKi8KKwkJCTB4OGMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTE5Lm1tYzJfZGF0NCAqLworCQkJMHg5MCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjAubW1jMl9kYXQ1ICovCisJCQkweDk0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMS5tbWMyX2RhdDYgKi8KKwkJCTB4OTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTIyLm1tYzJfZGF0NyAqLworCQk+OworCX07CisKKwlkY2FuMV9waW5zX2RlZmF1bHQ6IGRjYW4xX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDNkMCAgIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAvKiBkY2FuMV90eCAqLworCQkJMHgzZDQgICAoTVVYX01PREUxNSkJCS8qIGRjYW4xX3J4Lm9mZiAqLworCQkJMHg0MTggICAoUFVMTF9ESVMgfCBNVVhfTU9ERTEpIC8qIHdha2V1cDAuZGNhbjFfcnggKi8KKwkJPjsKKwl9OworCisJZGNhbjFfcGluc19zbGVlcDogZGNhbjFfcGluc19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDNkMCAgIChNVVhfTU9ERTE1KQkvKiBkY2FuMV90eC5vZmYgKi8KKwkJCTB4M2Q0ICAgKE1VWF9NT0RFMTUpCS8qIGRjYW4xX3J4Lm9mZiAqLworCQkJMHg0MTggICAoTVVYX01PREUxNSkJLyogd2FrZXVwMC5vZmYgKi8KKwkJPjsKKwl9OwogfTsKIAogJmkyYzEgewpAQCAtMzgsNiArMTMzLDkgQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTkxNyI7CiAJCXJlZyA9IDwweDU4PjsKIAorCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnRwczY1OTE3X3BpbnNfZGVmYXVsdD47CisKIAkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIgSVJRX1RZUEVfTk9ORT47ICAvKiBJUlFfU1lTXzFOICovCiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMTM2LDkgKzIzNCwyMzAgQEAKIAkJCQl9OwogCQkJfTsKIAkJfTsKKworCQl0cHM2NTkxN19wb3dlcl9idXR0b24geworCQkJY29tcGF0aWJsZSA9ICJ0aSxwYWxtYXMtcHdyYnV0dG9uIjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnRwczY1OTE3PjsKKwkJCWludGVycnVwdHMgPSA8MSBJUlFfVFlQRV9OT05FPjsKKwkJCXdha2V1cC1zb3VyY2U7CisJCQl0aSxwYWxtYXMtbG9uZy1wcmVzcy1zZWNvbmRzID0gPDY+OworCQl9OwogCX07CiB9OwogCiAmdWFydDEgewogCXN0YXR1cyA9ICJva2F5IjsKIH07CisKKyZlbG0geworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZncG1jIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm5hbmRfZGVmYXVsdD47CisJcmFuZ2VzID0gPDAgMCAwIDB4MDEwMDAwMDA+OwkvKiBtaW5pbXVtIEdQTUMgcGFydGl0aW9uID0gMTZNQiAqLworCW5hbmRAMCwwIHsKKwkJLyogVG8gdXNlIE5BTkQsIERJUCBzd2l0Y2ggU1c1IG11c3QgYmUgc2V0IGxpa2Ugc286CisJCSAqIFNXNS4xIChOQU5EX1NFTG4pID0gT04gKExPVykKKwkJICogU1c1LjkgKEdQTUNfV1BOKSA9IE9GRiAoSElHSCkKKwkJICovCisJCXJlZyA9IDwwIDAgND47CQkvKiBkZXZpY2UgSU8gcmVnaXN0ZXJzICovCisJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKKwkJdGksZWxtLWlkID0gPCZlbG0+OworCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDI+OworCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OworCQlncG1jLGNzLW9uLW5zID0gPDA+OworCQlncG1jLGNzLXJkLW9mZi1ucyA9IDw4MD47CisJCWdwbWMsY3Mtd3Itb2ZmLW5zID0gPDgwPjsKKwkJZ3BtYyxhZHYtb24tbnMgPSA8MD47CisJCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDw2MD47CisJCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw2MD47CisJCWdwbWMsd2Utb24tbnMgPSA8MTA+OworCQlncG1jLHdlLW9mZi1ucyA9IDw1MD47CisJCWdwbWMsb2Utb24tbnMgPSA8ND47CisJCWdwbWMsb2Utb2ZmLW5zID0gPDQwPjsKKwkJZ3BtYyxhY2Nlc3MtbnMgPSA8NDA+OworCQlncG1jLHdyLWFjY2Vzcy1ucyA9IDw4MD47CisJCWdwbWMscmQtY3ljbGUtbnMgPSA8ODA+OworCQlncG1jLHdyLWN5Y2xlLW5zID0gPDgwPjsKKwkJZ3BtYyxidXMtdHVybmFyb3VuZC1ucyA9IDwwPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDwwPjsKKwkJZ3BtYyxjbGstYWN0aXZhdGlvbi1ucyA9IDwwPjsKKwkJZ3BtYyx3YWl0LW1vbml0b3JpbmctbnMgPSA8MD47CisJCWdwbWMsd3ItZGF0YS1tdXgtYnVzLW5zID0gPDA+OworCQkvKiBNVEQgcGFydGl0aW9uIHRhYmxlICovCisJCS8qIEFsbCBTUEwtKiBwYXJ0aXRpb25zIGFyZSBzaXplZCB0byBtaW5pbWFsIGxlbmd0aAorCQkgKiB3aGljaCBjYW4gYmUgaW5kZXBlbmRlbnRseSBwcm9ncmFtbWFibGUuIEZvcgorCQkgKiBOQU5EIGZsYXNoIHRoaXMgaXMgZXF1YWwgdG8gc2l6ZSBvZiBlcmFzZS1ibG9jayAqLworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gIk5BTkQuU1BMIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwMDIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDEgeworCQkJbGFiZWwgPSAiTkFORC5TUEwuYmFja3VwMSI7CisJCQlyZWcgPSA8MHgwMDAyMDAwMCAweDAwMDIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDIgeworCQkJbGFiZWwgPSAiTkFORC5TUEwuYmFja3VwMiI7CisJCQlyZWcgPSA8MHgwMDA0MDAwMCAweDAwMDIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDMgeworCQkJbGFiZWwgPSAiTkFORC5TUEwuYmFja3VwMyI7CisJCQlyZWcgPSA8MHgwMDA2MDAwMCAweDAwMDIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDQgeworCQkJbGFiZWwgPSAiTkFORC51LWJvb3Qtc3BsLW9zIjsKKwkJCXJlZyA9IDwweDAwMDgwMDAwIDB4MDAwNDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANSB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdCI7CisJCQlyZWcgPSA8MHgwMDBjMDAwMCAweDAwMTAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDYgeworCQkJbGFiZWwgPSAiTkFORC51LWJvb3QtZW52IjsKKwkJCXJlZyA9IDwweDAwMWMwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANyB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdC1lbnYuYmFja3VwMSI7CisJCQlyZWcgPSA8MHgwMDFlMDAwMCAweDAwMDIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDggeworCQkJbGFiZWwgPSAiTkFORC5rZXJuZWwiOworCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMDgwMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA5IHsKKwkJCWxhYmVsID0gIk5BTkQuZmlsZS1zeXN0ZW0iOworCQkJcmVnID0gPDB4MDBhMDAwMDAgMHgwZjYwMDAwMD47CisJCX07CisJfTsKK307CisKKyZ1c2IyX3BoeTEgeworCXBoeS1zdXBwbHkgPSA8JmxkbzRfcmVnPjsKK307CisKKyZ1c2IyX3BoeTIgeworCXBoeS1zdXBwbHkgPSA8JmxkbzRfcmVnPjsKK307CisKKyZ1c2IxIHsKKwlkcl9tb2RlID0gInBlcmlwaGVyYWwiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1c2IxX3BpbnM+OworfTsKKworJnVzYjIgeworCWRyX21vZGUgPSAiaG9zdCI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVzYjJfcGlucz47Cit9OworCismbW1jMSB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMxX3BpbnNfZGVmYXVsdD47CisKKwl2bW1jLXN1cHBseSA9IDwmbGRvMV9yZWc+OworCWJ1cy13aWR0aCA9IDw0PjsKKwkvKgorCSAqIFNEQ0Qgc2lnbmFsIGlzIG5vdCBiZWluZyB1c2VkIGhlcmUgLSB1c2luZyB0aGUgZmFjdCB0aGF0IEdQSU8gbW9kZQorCSAqIGlzIGEgdmlhYmxlIGFsdGVybmF0aXZlCisJICovCisJY2QtZ3Bpb3MgPSA8JmdwaW82IDI3IDA+OworfTsKKworJm1tYzIgeworCS8qIFNXNS0zIGluIE9OIHBvc2l0aW9uICovCisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMyX3BpbnNfZGVmYXVsdD47CisKKwl2bW1jLXN1cHBseSA9IDwmZXZtXzN2Mz47CisJYnVzLXdpZHRoID0gPDg+OworCXRpLG5vbi1yZW1vdmFibGU7Cit9OworCismZHJhN19wbXhfY29yZSB7CisJY3Bzd19kZWZhdWx0OiBjcHN3X2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogU2xhdmUgMiAqLworCQkJMHgxOTggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxMi5yZ21paTFfdHhjICovCisJCQkweDE5YyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDEzLnJnbWlpMV90Y3RsICovCisJCQkweDFhMCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE0LnJnbWlpMV90ZDMgKi8KKwkJCTB4MWE0IChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTUucmdtaWkxX3RkMiAqLworCQkJMHgxYTggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxNi5yZ21paTFfdGQxICovCisJCQkweDFhYyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE3LnJnbWlpMV90ZDAgKi8KKwkJCTB4MWIwIChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxOC5yZ21paTFfcmNsayAqLworCQkJMHgxYjQgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE5LnJnbWlpMV9yY3RsICovCisJCQkweDFiOCAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMjAucmdtaWkxX3JkMyAqLworCQkJMHgxYmMgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDIxLnJnbWlpMV9yZDIgKi8KKwkJCTB4MWMwIChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMi5yZ21paTFfcmQxICovCisJCQkweDFjNCAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMjMucmdtaWkxX3JkMCAqLworCQk+OworCisJfTsKKworCWNwc3dfc2xlZXA6IGNwc3dfc2xlZXAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogU2xhdmUgMiAqLworCQkJMHgxOTggKE1VWF9NT0RFMTUpCisJCQkweDE5YyAoTVVYX01PREUxNSkKKwkJCTB4MWEwIChNVVhfTU9ERTE1KQorCQkJMHgxYTQgKE1VWF9NT0RFMTUpCisJCQkweDFhOCAoTVVYX01PREUxNSkKKwkJCTB4MWFjIChNVVhfTU9ERTE1KQorCQkJMHgxYjAgKE1VWF9NT0RFMTUpCisJCQkweDFiNCAoTVVYX01PREUxNSkKKwkJCTB4MWI4IChNVVhfTU9ERTE1KQorCQkJMHgxYmMgKE1VWF9NT0RFMTUpCisJCQkweDFjMCAoTVVYX01PREUxNSkKKwkJCTB4MWM0IChNVVhfTU9ERTE1KQorCQk+OworCX07CisKKwlkYXZpbmNpX21kaW9fZGVmYXVsdDogZGF2aW5jaV9tZGlvX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogTURJTyAqLworCQkJMHgyM2MgKFBJTl9PVVRQVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBtZGlvX2QubWRpb19kICovCisJCQkweDI0MCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogbWRpb19jbGsubWRpb19jbGsgKi8KKwkJPjsKKwl9OworCisJZGF2aW5jaV9tZGlvX3NsZWVwOiBkYXZpbmNpX21kaW9fc2xlZXAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgyM2MgKE1VWF9NT0RFMTUpCisJCQkweDI0MCAoTVVYX01PREUxNSkKKwkJPjsKKwl9OworfTsKKworJm1hYyB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZjcHN3X2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmY3Bzd19zbGVlcD47Cit9OworCismY3Bzd19lbWFjMSB7CisJcGh5X2lkID0gPCZkYXZpbmNpX21kaW8+LCA8Mz47CisJcGh5LW1vZGUgPSAicmdtaWkiOworfTsKKworJmRhdmluY2lfbWRpbyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmRhdmluY2lfbWRpb19kZWZhdWx0PjsKKwlwaW5jdHJsLTEgPSA8JmRhdmluY2lfbWRpb19zbGVlcD47CisJYWN0aXZlX3NsYXZlID0gPDE+OworfTsKKworJmRjYW4xIHsKKwlzdGF0dXMgPSAib2siOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZkY2FuMV9waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmZGNhbjFfcGluc19zbGVlcD47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNzR4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3NHguZHRzaQppbmRleCAzYmU1NDRjLi4xMDE3M2ZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9kcmE3NHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3NHguZHRzaQpAQCAtNDQsNCArNDQsMjYgQEAKIAkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIERJUkVDVF9JUlEoMTMxKSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgPEdJQ19TUEkgRElSRUNUX0lSUSgxMzIpIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCX07CisKKwlvY3AgeworCQlvbWFwX2R3YzNfNDogb21hcF9kd2MzXzRANDg5NDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxkd2MzIjsKKwkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX3NzNCI7CisJCQlyZWcgPSA8MHg0ODk0MDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzNDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJdXRtaS1tb2RlID0gPDI+OworCQkJcmFuZ2VzOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCXVzYjQ6IHVzYkA0ODk1MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3YzMiOworCQkJCXJlZyA9IDwweDQ4OTUwMDAwIDB4MTcwMDA+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzNDUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkJdHgtZmlmby1yZXNpemU7CisJCQkJbWF4aW11bS1zcGVlZCA9ICJoaWdoLXNwZWVkIjsKKwkJCQlkcl9tb2RlID0gIm90ZyI7CisJCQl9OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZW1ldjIta3ptOWQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZW1ldjIta3ptOWQuZHRzCmluZGV4IDUwY2NkMTUuLjY2N2QzMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2VtZXYyLWt6bTlkLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi1rem05ZC5kdHMKQEAgLTI1LDM3ICsyNSw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMxLDExNTIwMG44MSBpZ25vcmVfbG9nbGV2ZWwgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKLQl9OwotCi0JcmVnXzFwOHY6IHJlZ3VsYXRvckAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOwotCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0xLjhWIjsKLQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQl9OwotCi0JcmVnXzNwM3Y6IHJlZ3VsYXRvckAxIHsKLQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOwotCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKLQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQl9OwotCi0JbGFuOTIyMEAyMDAwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAic21zYyxsYW45MjIwIiwgInNtc2MsbGFuOTExNSI7Ci0JCXJlZyA9IDwweDIwMDAwMDAwIDB4MTAwMDA+OwotCQlwaHktbW9kZSA9ICJtaWkiOwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMD47Ci0JCWludGVycnVwdHMgPSA8MSBJUlFfVFlQRV9FREdFX1JJU0lORz47Ci0JCXJlZy1pby13aWR0aCA9IDw0PjsKLQkJc21zYyxpcnEtYWN0aXZlLWhpZ2g7Ci0JCXNtc2MsaXJxLXB1c2gtcHVsbDsKLQkJdmRkdmFyaW8tc3VwcGx5ID0gPCZyZWdfMXA4dj47Ci0JCXZkZDMzYS1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDE7CiAJfTsKIAogCWdwaW9fa2V5cyB7CkBAIC05Miw0ICs2MiwzNSBAQAogCQkJZ3Bpb3MgPSA8JmdwaW8wIDE3IEdQSU9fQUNUSVZFX0hJR0g+OwogCQl9OwogCX07CisKKwlyZWdfMXA4djogcmVndWxhdG9yQDAgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTEuOFYiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCXJlZ3VsYXRvci1ib290LW9uOworCX07CisKKwlyZWdfM3AzdjogcmVndWxhdG9yQDEgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTMuM1YiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCXJlZ3VsYXRvci1ib290LW9uOworCX07CisKKwlsYW45MjIwQDIwMDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkyMjAiLCAic21zYyxsYW45MTE1IjsKKwkJcmVnID0gPDB4MjAwMDAwMDAgMHgxMDAwMD47CisJCXBoeS1tb2RlID0gIm1paSI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8wPjsKKwkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlzbXNjLGlycS1hY3RpdmUtaGlnaDsKKwkJc21zYyxpcnEtcHVzaC1wdWxsOworCQl2ZGR2YXJpby1zdXBwbHkgPSA8JnJlZ18xcDh2PjsKKwkJdmRkMzNhLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZW1ldjIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2VtZXYyLmR0c2kKaW5kZXggMDBlZWVkMy4uY2M3YmZlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZW1ldjIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi5kdHNpCkBAIC01NSw3ICs1NSw3IEBACiAJCQkgICAgIDwwIDEyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAl9OwogCi0Jc211QGUwMTEwMDAwIHsKKwljbG9ja3NAZTAxMTAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsZW1ldjItc211IjsKIAkJcmVnID0gPDB4ZTAxMTAwMDAgMHgxMDAwMD47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJCX07CiAJfTsKIAotCXN0aUBlMDE4MDAwMCB7CisJdGltZXJAZTAxODAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsZW0tc3RpIjsKIAkJcmVnID0gPDB4ZTAxODAwMDAgMHg1ND47CiAJCWludGVycnVwdHMgPSA8MCAxMjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJY2xvY2stbmFtZXMgPSAic2NsayI7CiAJfTsKIAotCXVhcnRAZTEwMjAwMDAgeworCXVhcnQwOiBzZXJpYWxAZTEwMjAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsZW0tdWFydCI7CiAJCXJlZyA9IDwweGUxMDIwMDAwIDB4Mzg+OwogCQlpbnRlcnJ1cHRzID0gPDAgOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQljbG9jay1uYW1lcyA9ICJzY2xrIjsKIAl9OwogCi0JdWFydEBlMTAzMDAwMCB7CisJdWFydDE6IHNlcmlhbEBlMTAzMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxlbS11YXJ0IjsKIAkJcmVnID0gPDB4ZTEwMzAwMDAgMHgzOD47CiAJCWludGVycnVwdHMgPSA8MCA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJCWNsb2NrLW5hbWVzID0gInNjbGsiOwogCX07CiAKLQl1YXJ0QGUxMDQwMDAwIHsKKwl1YXJ0Mjogc2VyaWFsQGUxMDQwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGVtLXVhcnQiOwogCQlyZWcgPSA8MHhlMTA0MDAwMCAweDM4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJCWNsb2NrLW5hbWVzID0gInNjbGsiOwogCX07CiAKLQl1YXJ0QGUxMDUwMDAwIHsKKwl1YXJ0Mzogc2VyaWFsQGUxMDUwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGVtLXVhcnQiOwogCQlyZWcgPSA8MHhlMTA1MDAwMCAweDM4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC1tb25rLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtbW9uay5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4MjJhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtbW9uay5kdHMKQEAgLTAsMCArMSw1NzkgQEAKKy8qCisgKiBTYW1zdW5nJ3MgRXh5bm9zMzI1MCBiYXNlZCBNb25rIGJvYXJkIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBEZXZpY2UgdHJlZSBzb3VyY2UgZmlsZSBmb3IgU2Ftc3VuZydzIE1vbmsgYm9hcmQgd2hpY2ggaXMgYmFzZWQgb24KKyAqIFNhbXN1bmcgRXh5bm9zMzI1MCBTb0MuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJleHlub3MzMjUwLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKworLyB7CisJbW9kZWwgPSAiU2Ftc3VuZyBNb25rIGJvYXJkIjsKKwljb21wYXRpYmxlID0gInNhbXN1bmcsbW9uayIsICJzYW1zdW5nLGV4eW5vczMyNTAiLCAic2Ftc3VuZyxleHlub3MzIjsKKworCWFsaWFzZXMgeworCQlpMmM3ID0gJmkyY19tYXg3NzgzNjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gIDwweDQwMDAwMDAwIDB4MWZmMDAwMDA+OworCX07CisKKwlmaXJtd2FyZUAwMjA1RjAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzZWN1cmUtZmlybXdhcmUiOworCQlyZWcgPSA8MHgwMjA1RjAwMCAweDEwMDA+OworCX07CisKKwlncGlvX2tleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisKKwkJcG93ZXJfa2V5IHsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDI+OworCQkJaW50ZXJydXB0cyA9IDw3IDA+OworCQkJZ3Bpb3MgPSA8JmdweDIgNyAxPjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1BPV0VSPjsKKwkJCWxhYmVsID0gInBvd2VyIGtleSI7CisJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwxMD47CisJCQlncGlvLWtleSx3YWtldXA7CisJCX07CisJfTsKKworCXZlbW1jX3JlZzogdm9sdGFnZS1yZWd1bGF0b3ItMCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiVl9FTU1DXzIuOFYtZml4ZWQiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCWdwaW8gPSA8JmdwazAgMiAwPjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCX07CisKKwlpMmNfbWF4Nzc4MzY6IGkyYy1ncGlvLTAgeworCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKKwkJZ3Bpb3MgPSA8JmdwZDAgMiAwPiwgPCZncGQwIDMgMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQltYXg3NzgzNjogc3VicG1pY0AyNSB7CisJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2IjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQkJaW50ZXJydXB0cyA9IDw1IDA+OworCQkJcmVnID0gPDB4MjU+OworCQkJd2FrZXVwOworCisJCQltdWljOiBtYXg3NzgzNi1tdWljIHsKKwkJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LW11aWMiOworCQkJfTsKKworCQkJcmVndWxhdG9ycyB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgzNi1yZWd1bGF0b3IiOworCQkJCXNhZmVvdXRfcmVnOiBTQUZFT1VUIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FGRU9VVCI7CisJCQkJfTsKKworCQkJCWNoYXJnZXJfcmVnOiBDSEFSR0VSIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiQ0hBUkdFUiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm9hbXAgPSA8NDUwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3JvYW1wID0gPDQ3NTAwMD47CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQltb3Rvcl9yZWc6IExETzEgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJNT1RfMi43ViI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNzAwMDAwPjsKKwkJCQl9OworCisJCQkJTERPMiB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8Mzk1MDAwMD47CisJCQkJfTsKKwkJCX07CisKKwkJCWNoYXJnZXIgeworCQkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtY2hhcmdlciI7CisKKwkJCQltYXhpbSxjb25zdGFudC11dm9sdCA9IDw0MzUwMDAwPjsKKwkJCQltYXhpbSxmYXN0LWNoYXJnZS11YW1wID0gPDIyNTAwMD47CisJCQkJbWF4aW0sZW9jLXVhbXAgPSA8NzUwMD47CisJCQkJbWF4aW0sb3ZwLXV2b2x0ID0gPDY1MDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmFkYyB7CisJdmRkLXN1cHBseSA9IDwmbGRvM19yZWc+OworCXN0YXR1cyA9ICJva2F5IjsKKwlhc3NpZ25lZC1jbG9ja3MgPSA8JmNtdSBDTEtfU0NMS19UU0FEQz47CisJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8NjAwMDAwMD47CisKKwl0aGVybWlzdG9yLWFwIHsKKwkJY29tcGF0aWJsZSA9ICJudGMsbmNwMTV3YjQ3MyI7CisJCXB1bGx1cC11diA9IDwxODAwMDAwPjsKKwkJcHVsbHVwLW9obSA9IDwxMDAwMDA+OworCQlwdWxsZG93bi1vaG0gPSA8MTAwMDAwPjsKKwkJaW8tY2hhbm5lbHMgPSA8JmFkYyAwPjsKKwl9OworCisJdGhlcm1pc3Rvci1iYXR0ZXJ5IHsKKwkJY29tcGF0aWJsZSA9ICJudGMsbmNwMTV3YjQ3MyI7CisJCXB1bGx1cC11diA9IDwxODAwMDAwPjsKKwkJcHVsbHVwLW9obSA9IDwxMDAwMDA+OworCQlwdWxsZG93bi1vaG0gPSA8MTAwMDAwPjsKKwkJaW8tY2hhbm5lbHMgPSA8JmFkYyAxPjsKKwl9OworfTsKKworJmkyY18wIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4MTA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwxMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXMybXBzMTRfcG1pY0A2NiB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczE0LXBtaWMiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgwPjsKKwkJaW50ZXJydXB0cyA9IDw3IDA+OworCQlyZWcgPSA8MHg2Nj47CisJCXdha2V1cDsKKworCQlzMm1wczE0X29zYzogY2xvY2tzIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczE0LWNsayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiczJtcHMxNF9hcCIsICJ1bnVzZWQiLAorCQkJCSJzMm1wczE0X2J0IjsKKwkJfTsKKworCQlyZWd1bGF0b3JzIHsKKwkJCWxkbzFfcmVnOiBMRE8xIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQUxJVkVfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzJfcmVnOiBMRE8yIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfTTFfMS4yViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzNfcmVnOiBMRE8zIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQ0NfQVBfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzRfcmVnOiBMRE80IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQVZERF9QTEwxIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvNV9yZWc6IExETzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9QTExfSVNPXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG82X3JlZzogTERPNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX01JUElfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQl9OworCisJCQlsZG83X3JlZzogTERPNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX0FWRERfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzhfcmVnOiBMRE84IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfVVNCXzMuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG85X3JlZzogTERPOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVl9MUEREUl8xLjJWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvMTBfcmVnOiBMRE8xMCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzEwIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzExX3JlZzogTERPMTEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZfRU1NQ18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlzYW1zdW5nLGV4dC1jb250cm9sLWdwaW9zID0gPCZncGswIDIgMD47CisJCQl9OworCisJCQlsZG8xMl9yZWc6IExETzEyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0VNTUNfMi44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJc2Ftc3VuZyxleHQtY29udHJvbC1ncGlvcyA9IDwmZ3BrMCAyIDA+OworCQkJfTsKKworCQkJbGRvMTNfcmVnOiBMRE8xMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVlNFTlNPUl8yLjg1ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8Mjg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8Mjg1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzE0X3JlZzogTERPMTQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8xNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8xNV9yZWc6IExETzE1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJUU1BfQVZERF8zLjNWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzE2X3JlZzogTERPMTYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkxDRF9WRERfMy4zViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQl9OworCisJCQlsZG8xN19yZWc6IExETzE3IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMTciOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJbGRvMThfcmVnOiBMRE8xOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzE4IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzE5X3JlZzogTERPMTkgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlRTUF9WRERfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8yMF9yZWc6IExETzIwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJMQ0RfVkREXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJbGRvMjFfcmVnOiBMRE8yMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzIxIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzIyX3JlZzogTERPMjIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yMiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQl9OworCisJCQlsZG8yM19yZWc6IExETzIzIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMjMiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG8yNF9yZWc6IExETzI0IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMjQiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJbGRvMjVfcmVnOiBMRE8yNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzI1IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWJ1Y2sxX3JlZzogQlVDSzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9NSUZfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw5MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlidWNrMl9yZWc6IEJVQ0syIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQVJNXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTE1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWJ1Y2szX3JlZzogQlVDSzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9JTlQzRF8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlidWNrNF9yZWc6IEJVQ0s0IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQ0NfU1VCXzEuOTVWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxOTUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxOTUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJYnVjazVfcmVnOiBCVUNLNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkNDX1NVQl8xLjM1ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZpMmNfMSB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MD47CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDEwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NDAwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlmdWVsZ2F1Z2VAMzYgeworCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LWJhdHRlcnkiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgxPjsKKwkJaW50ZXJydXB0cyA9IDwyIDg+OworCQlyZWcgPSA8MHgzNj47CisJfTsKK307CisKKyZpMnMyIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbXNoY18wIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwludW0tc2xvdHMgPSA8MT47CisJYnJva2VuLWNkOworCW5vbi1yZW1vdmFibGU7CisJY2FwLW1tYy1oaWdoc3BlZWQ7CisJZGVzYy1udW0gPSA8ND47CisJbW1jLWhzMjAwLTFfOHY7CisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwl2bW1jLXN1cHBseSA9IDwmdmVtbWNfcmVnPjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKKwljbG9jay1mcmVxLW1pbi1tYXggPSA8NDAwMDAwIDEwMDAwMDAwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8MT47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MCAxPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDBfY21kICZzZDBfYnVzMSAmc2QwX2J1czQgJnNkMF9idXM4PjsKKwlidXMtd2lkdGggPSA8OD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNlcmlhbF8wIHsKKwlhc3NpZ25lZC1jbG9ja3MgPSA8JmNtdSBDTEtfU0NMS19VQVJUMD47CisJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MTAwMDAwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2VyaWFsXzEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ0bXUgeworCXZ0bXUtc3VwcGx5ID0gPCZsZG83X3JlZz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnJ0YyB7CisJY2xvY2tzID0gPCZjbXUgQ0xLX1JUQz4sIDwmczJtcHMxNF9vc2MgMD47CisJY2xvY2stbmFtZXMgPSAicnRjIiwgInJ0Y19zcmMiOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ4dXNieHRpIHsKKwljbG9jay1mcmVxdWVuY3kgPSA8MjQwMDAwMDA+OworfTsKKworJnBpbmN0cmxfMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNsZWVwMD47CisKKwlzbGVlcDA6IHNsZWVwLXN0YXRlIHsKKwkJUElOX1NMUChncGEwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYTEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtNSwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BiLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwYi0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGItMiwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTMsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwYi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BiLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGItNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYi03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGMwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTQsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYzEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzEtNCwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BkMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BkMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BkMC0yLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BkMC0zLCBJTlBVVCwgTk9ORSk7CisKKwkJUElOX1NMUChncGQxLTAsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQxLTEsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQxLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQxLTMsIElOUFVULCBOT05FKTsKKwl9OworfTsKKworJnBpbmN0cmxfMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNsZWVwMT47CisKKwlzbGVlcDE6IHNsZWVwLXN0YXRlIHsKKwkJUElOX1NMUChncGUwLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwZTAtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMC00LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGUwLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUwLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUwLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwZTEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMS01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMS02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMS03LCBJTlBVVCwgTk9ORSk7CisKKwkJUElOX1NMUChncGUyLTAsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGUyLTEsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGUyLTIsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwazAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtMiwgT1VUMCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGsxLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazEtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0zLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGsxLTQsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazEtNSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMS02LCBQUkVWLCBOT05FKTsKKworCQlQSU5fU0xQKGdwazItMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItNiwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BsMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC0zLCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0wLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTEtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTEtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTEtNiwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMi0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMi00LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0zLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0zLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0zLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0zLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0zLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0zLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0zLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0zLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTQtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTQtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTQtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTQtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTQtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTQtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTQtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTQtNywgSU5QVVQsIERPV04pOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC1waW5jdHJsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXBpbmN0cmwuZHRzaQppbmRleCA0N2I5MmMxLi41YWI4MWMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXBpbmN0cmwuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXBpbmN0cmwuZHRzaQpAQCAtMTIsNiArMTIsMjIgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKi8KIAorI2RlZmluZSBQSU5fUFVMTF9OT05FCQkwCisjZGVmaW5lIFBJTl9QVUxMX0RPV04JCTEKKyNkZWZpbmUgUElOX1BVTExfVVAJCTMKKworI2RlZmluZSBQSU5fUEROX09VVDAJCTAKKyNkZWZpbmUgUElOX1BETl9PVVQxCQkxCisjZGVmaW5lIFBJTl9QRE5fSU5QVVQJCTIKKyNkZWZpbmUgUElOX1BETl9QUkVWCQkzCisKKyNkZWZpbmUgUElOX1NMUChfcGluLCBfbW9kZSwgX3B1bGwpCQkJCVwKKwlfcGluIHsJCQkJCQkJXAorCQlzYW1zdW5nLHBpbnMgPSAjX3BpbjsJCQkJXAorCQlzYW1zdW5nLHBpbi1jb24tcGRuID0gPFBJTl9QRE5fICMjX21vZGU+OwlcCisJCXNhbXN1bmcscGluLXB1ZC1wZG4gPSA8UElOX1BVTExfICMjX3B1bGw+OwlcCisJfQorCiAmcGluY3RybF8wIHsKIAlncGEwOiBncGEwIHsKIAkJZ3Bpby1jb250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC1yaW5hdG8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC1yaW5hdG8uZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYWE4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXJpbmF0by5kdHMKQEAgLTAsMCArMSw2ODIgQEAKKy8qCisgKiBTYW1zdW5nJ3MgRXh5bm9zMzI1MCBiYXNlZCBSaW5hdG8gYm9hcmQgZGV2aWNlIHRyZWUgc291cmNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIERldmljZSB0cmVlIHNvdXJjZSBmaWxlIGZvciBTYW1zdW5nJ3MgUmluYXRvIGJvYXJkIHdoaWNoIGlzIGJhc2VkIG9uCisgKiBTYW1zdW5nIEV4eW5vczMyNTAgU29DLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSAiZXh5bm9zMzI1MC5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisKKy8geworCW1vZGVsID0gIlNhbXN1bmcgUmluYXRvIGJvYXJkIjsKKwljb21wYXRpYmxlID0gInNhbXN1bmcscmluYXRvIiwgInNhbXN1bmcsZXh5bm9zMzI1MCIsICJzYW1zdW5nLGV4eW5vczMiOworCisJYWxpYXNlcyB7CisJCWkyYzcgPSAmaTJjX21heDc3ODM2OworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSAgPDB4NDAwMDAwMDAgMHgxZmYwMDAwMD47CisJfTsKKworCWZpcm13YXJlQDAyMDVGMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHNlY3VyZS1maXJtd2FyZSI7CisJCXJlZyA9IDwweDAyMDVGMDAwIDB4MTAwMD47CisJfTsKKworCWdwaW9fa2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKworCQlwb3dlcl9rZXkgeworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDcgMD47CisJCQlncGlvcyA9IDwmZ3B4MiA3IDE+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OworCQkJbGFiZWwgPSAicG93ZXIga2V5IjsKKwkJCWRlYm91bmNlLWludGVydmFsID0gPDEwPjsKKwkJCWdwaW8ta2V5LHdha2V1cDsKKwkJfTsKKwl9OworCisJaTJjX21heDc3ODM2OiBpMmMtZ3Bpby0wIHsKKwkJY29tcGF0aWJsZSA9ICJpMmMtZ3BpbyI7CisJCWdwaW9zID0gPCZncGQwIDIgMD4sIDwmZ3BkMCAzIDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJbWF4Nzc4MzY6IHN1YnBtaWNAMjUgeworCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgzNiI7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgxPjsKKwkJCWludGVycnVwdHMgPSA8NSAwPjsKKwkJCXJlZyA9IDwweDI1PjsKKwkJCXdha2V1cDsKKworCQkJbXVpYzogbWF4Nzc4MzYtbXVpYyB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgzNi1tdWljIjsKKwkJCX07CisKKwkJCXJlZ3VsYXRvcnMgeworCQkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtcmVndWxhdG9yIjsKKwkJCQlzYWZlb3V0X3JlZzogU0FGRU9VVCB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIlNBRkVPVVQiOworCQkJCX07CisKKwkJCQljaGFyZ2VyX3JlZzogQ0hBUkdFUiB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIkNIQVJHRVIiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3JvYW1wID0gPDQ1MDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb2FtcCA9IDw0NzUwMDA+OworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJbW90b3JfcmVnOiBMRE8xIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiTU9UXzIuN1YiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjcwMDAwMD47CisJCQkJfTsKKworCQkJCUxETzIgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDM5NTAwMDA+OworCQkJCX07CisJCQl9OworCisJCQljaGFyZ2VyIHsKKwkJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LWNoYXJnZXIiOworCisJCQkJbWF4aW0sY29uc3RhbnQtdXZvbHQgPSA8NDM1MDAwMD47CisJCQkJbWF4aW0sZmFzdC1jaGFyZ2UtdWFtcCA9IDwyMjUwMDA+OworCQkJCW1heGltLGVvYy11YW1wID0gPDc1MDA+OworCQkJCW1heGltLG92cC11dm9sdCA9IDw2NTAwMDAwPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZhZGMgeworCXZkZC1zdXBwbHkgPSA8JmxkbzNfcmVnPjsKKwlzdGF0dXMgPSAib2theSI7CisJYXNzaWduZWQtY2xvY2tzID0gPCZjbXUgQ0xLX1NDTEtfVFNBREM+OworCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDYwMDAwMDA+OworCisJdGhlcm1pc3Rvci1hcCB7CisJCWNvbXBhdGlibGUgPSAibnRjLG5jcDE1d2I0NzMiOworCQlwdWxsdXAtdXYgPSA8MTgwMDAwMD47CisJCXB1bGx1cC1vaG0gPSA8MTAwMDAwPjsKKwkJcHVsbGRvd24tb2htID0gPDEwMDAwMD47CisJCWlvLWNoYW5uZWxzID0gPCZhZGMgMD47CisJfTsKKworCXRoZXJtaXN0b3ItYmF0dGVyeSB7CisJCWNvbXBhdGlibGUgPSAibnRjLG5jcDE1d2I0NzMiOworCQlwdWxsdXAtdXYgPSA8MTgwMDAwMD47CisJCXB1bGx1cC1vaG0gPSA8MTAwMDAwPjsKKwkJcHVsbGRvd24tb2htID0gPDEwMDAwMD47CisJCWlvLWNoYW5uZWxzID0gPCZhZGMgMT47CisJfTsKK307CisKKyZpMmNfMCB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MD47CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDEwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MTAwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlzMm1wczE0X3BtaWNANjYgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczJtcHMxNC1wbWljIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4MD47CisJCWludGVycnVwdHMgPSA8NyAwPjsKKwkJcmVnID0gPDB4NjY+OworCQl3YWtldXA7CisKKwkJczJtcHMxNF9vc2M6IGNsb2NrcyB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczJtcHMxNC1jbGsiOworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInMybXBzMTRfYXAiLCAidW51c2VkIiwKKwkJCQkiczJtcHMxNF9idCI7CisJCX07CisKKwkJcmVndWxhdG9ycyB7CisJCQlsZG8xX3JlZzogTERPMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX0FMSVZFXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9uLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzJfcmVnOiBMRE8yIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfTTFfMS4yViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzNfcmVnOiBMRE8zIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQ0NfQVBfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzRfcmVnOiBMRE80IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQVZERF9QTEwxIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvNV9yZWc6IExETzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9QTExfSVNPXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG82X3JlZzogTERPNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX1ZNSVBJXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG83X3JlZzogTERPNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX0FWRERfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzhfcmVnOiBMRE84IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfVVNCXzMuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG85X3JlZzogTERPOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVl9MUEREUl8xLjJWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vbi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8xMF9yZWc6IExETzEwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMTAiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMTFfcmVnOiBMRE8xMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVl9FTU1DXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXNhbXN1bmcsZXh0LWNvbnRyb2wtZ3Bpb3MgPSA8JmdwazAgMiAwPjsKKwkJCX07CisKKwkJCWxkbzEyX3JlZzogTERPMTIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZfRU1NQ18yLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlzYW1zdW5nLGV4dC1jb250cm9sLWdwaW9zID0gPCZncGswIDIgMD47CisJCQl9OworCisJCQlsZG8xM19yZWc6IExETzEzIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDQU1fQVZERF8yLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzE0X3JlZzogTERPMTQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8xNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjcwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjcwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8xNV9yZWc6IExETzE1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJUU1BfQVZERF8zLjNWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzE2X3JlZzogTERPMTYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkxDRF9WRERfMy4zViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8xN19yZWc6IExETzE3IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0lSTEVEXzMuM1YiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMThfcmVnOiBMRE8xOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiQ0FNX0FGXzIuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMTlfcmVnOiBMRE8xOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVFNQX1ZERF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzIwX3JlZzogTERPMjAgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkxDRF9WRERfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8yMV9yZWc6IExETzIxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDQU1fSU9fMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8yMl9yZWc6IExETzIyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDQU1fRFZERF8xLjJWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzIzX3JlZzogTERPMjMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkhSTV9WQ0NfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzI0X3JlZzogTERPMjQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkhSTV9WQ0NfMy4zViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8yNV9yZWc6IExETzI1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMjUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJYnVjazFfcmVnOiBCVUNLMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX01JRl8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDkwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWJ1Y2syX3JlZzogQlVDSzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9BUk1fMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJYnVjazNfcmVnOiBCVUNLMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX0lOVDNEXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWJ1Y2s0X3JlZzogQlVDSzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZDQ19TVUJfMS45NVYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9uLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWJ1Y2s1X3JlZzogQlVDSzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZDQ19TVUJfMS4zNVYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9uLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZpMmNfMSB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MD47CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDEwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NDAwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlmdWVsZ2F1Z2VAMzYgeworCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LWJhdHRlcnkiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgxPjsKKwkJaW50ZXJydXB0cyA9IDwyIDg+OworCQlyZWcgPSA8MHgzNj47CisJfTsKK307CisKKyZpMnMyIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWZjIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbXNoY18wIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwludW0tc2xvdHMgPSA8MT47CisJYnJva2VuLWNkOworCW5vbi1yZW1vdmFibGU7CisJY2FwLW1tYy1oaWdoc3BlZWQ7CisJZGVzYy1udW0gPSA8ND47CisJbW1jLWhzMjAwLTFfOHY7CisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwl2bW1jLXN1cHBseSA9IDwmbGRvMTJfcmVnPjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKKwljbG9jay1mcmVxLW1pbi1tYXggPSA8NDAwMDAwIDEwMDAwMDAwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8MT47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MCAxPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDBfY21kICZzZDBfYnVzMSAmc2QwX2J1czQgJnNkMF9idXM4PjsKKwlidXMtd2lkdGggPSA8OD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNlcmlhbF8wIHsKKwlhc3NpZ25lZC1jbG9ja3MgPSA8JmNtdSBDTEtfU0NMS19VQVJUMD47CisJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MTAwMDAwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2VyaWFsXzEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ0bXUgeworCXZ0bXUtc3VwcGx5ID0gPCZsZG83X3JlZz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnJ0YyB7CisJY2xvY2tzID0gPCZjbXUgQ0xLX1JUQz4sIDwmczJtcHMxNF9vc2MgMD47CisJY2xvY2stbmFtZXMgPSAicnRjIiwgInJ0Y19zcmMiOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ4dXNieHRpIHsKKwljbG9jay1mcmVxdWVuY3kgPSA8MjQwMDAwMDA+OworfTsKKworJnBpbmN0cmxfMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNsZWVwMD47CisKKwlzbGVlcDA6IHNsZWVwLXN0YXRlIHsKKwkJUElOX1NMUChncGEwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYTEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTEtNSwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BiLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwYi0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGItMiwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTMsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwYi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BiLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGItNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYi03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGMwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTQsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYzEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzEtNCwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BkMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BkMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BkMC0yLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BkMC0zLCBJTlBVVCwgTk9ORSk7CisKKwkJUElOX1NMUChncGQxLTAsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQxLTEsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQxLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQxLTMsIElOUFVULCBOT05FKTsKKwl9OworfTsKKworJnBpbmN0cmxfMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNsZWVwMT47CisKKwlzbGVlcDE6IHNsZWVwLXN0YXRlIHsKKwkJUElOX1NMUChncGUwLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwZTAtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMC0zLCBJTlBVVCwgVVApOworCQlQSU5fU0xQKGdwZTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BlMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMS0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGUxLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTcsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZTItMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZTItMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZTItMiwgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BrMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC0yLCBPVVQwLCBOT05FKTsKKwkJUElOX1NMUChncGswLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwazEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazEtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazEtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazEtNiwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BrMi0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGwwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGwwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGwwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGwwLTMsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0yLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTQsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTMtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtNC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC03LCBJTlBVVCwgRE9XTik7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLmR0c2kKaW5kZXggNjkzYTMyNy4uMjQyZGRkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAuZHRzaQpAQCAtMzIwLDYgKzMyMCwxNiBAQAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAorCQltZmM6IGNvZGVjQDEzNDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxtZmMtdjciOworCQkJcmVnID0gPDB4MTM0MDAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTAyIDA+OworCQkJY2xvY2stbmFtZXMgPSAibWZjIiwgInNjbGtfbWZjIjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19NRkM+LCA8JmNtdSBDTEtfU0NMS19NRkM+OworCQkJc2Ftc3VuZyxwb3dlci1kb21haW4gPSA8JnBkX21mYz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCXNlcmlhbF8wOiBzZXJpYWxAMTM4MDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCI7CiAJCQlyZWcgPSA8MHgxMzgwMDAwMCAweDEwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0LmR0c2kKaW5kZXggZTAyNzhlYy4uYjgxNjhmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQuZHRzaQpAQCAtMzkyLDggKzM5Miw4IEBACiAJCXJlZyA9IDwweDEzNDAwMDAwIDB4MTAwMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgOTQgMD47CiAJCXNhbXN1bmcscG93ZXItZG9tYWluID0gPCZwZF9tZmM+OwotCQljbG9ja3MgPSA8JmNsb2NrIENMS19NRkM+OwotCQljbG9jay1uYW1lcyA9ICJtZmMiOworCQljbG9ja3MgPSA8JmNsb2NrIENMS19NRkM+LCA8JmNsb2NrIENMS19TQ0xLX01GQz47CisJCWNsb2NrLW5hbWVzID0gIm1mYyIsICJzY2xrX21mYyI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC10cmF0cy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXRyYXRzLmR0cwppbmRleCBmNTE2ZGE5Li43MjA4MzYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXRyYXRzLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXRyYXRzLmR0cwpAQCAtNDMxLDE4ICs0MzEsMzQgQEAKIAogCQlmaW1jXzA6IGZpbWNAMTE4MDAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMD4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzA+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX1NDTEtfTVBMTD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE2MDAwMDAwMD47CiAJCX07CiAKIAkJZmltY18xOiBmaW1jQDExODEwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzE+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMxPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19TQ0xLX01QTEw+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNjAwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMjogZmltY0AxMTgyMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMyPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMj47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfU0NMS19NUExMPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTYwMDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzM6IGZpbWNAMTE4MzAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMz4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzM+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX1NDTEtfTVBMTD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE2MDAwMDAwMD47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXVuaXZlcnNhbF9jMjEwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdW5pdmVyc2FsX2MyMTAuZHRzCmluZGV4IGQ1MGViM2EuLmFhZjBjYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdW5pdmVyc2FsX2MyMTAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdW5pdmVyc2FsX2MyMTAuZHRzCkBAIC00NzMsMTggKzQ3MywzNCBAQAogCiAJCWZpbWNfMDogZmltY0AxMTgwMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMwPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMD47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfU0NMS19NUExMPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTYwMDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzE6IGZpbWNAMTE4MTAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMT4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzE+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX1NDTEtfTVBMTD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE2MDAwMDAwMD47CiAJCX07CiAKIAkJZmltY18yOiBmaW1jQDExODIwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzI+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMyPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19TQ0xLX01QTEw+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNjAwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMzogZmltY0AxMTgzMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMzPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMz47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfU0NMS19NUExMPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTYwMDAwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAuZHRzaQppbmRleCA4MDdiYjViLi5iY2M5ZTYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC5kdHNpCkBAIC0zMSw2ICszMSwyMyBAQAogCQlwaW5jdHJsMiA9ICZwaW5jdHJsXzI7CiAJfTsKIAorCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDkwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweDkwMD47CisJCX07CisKKwkJY3B1QDkwMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweDkwMT47CisJCX07CisJfTsKKwogCXBtdV9zeXN0ZW1fY29udHJvbGxlcjogc3lzdGVtLWNvbnRyb2xsZXJAMTAwMjAwMDAgewogCQljbG9jay1uYW1lcyA9ICJjbGtvdXQwIiwgImNsa291dDEiLCAiY2xrb3V0MiIsICJjbGtvdXQzIiwKIAkJCQkiY2xrb3V0NCIsICJjbGtvdXQ4IiwgImNsa291dDkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMi5kdHNpCmluZGV4IDNjMDBlNmUuLmRkMGE0M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEyLmR0c2kKQEAgLTIyLDYgKzIyLDIzIEBACiAvIHsKIAljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMiIsICJzYW1zdW5nLGV4eW5vczQiOwogCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAQTAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAwPjsKKwkJfTsKKworCQljcHVAQTAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAxPjsKKwkJfTsKKwl9OworCiAJY29tYmluZXI6IGludGVycnVwdC1jb250cm9sbGVyQDEwNDQwMDAwIHsKIAkJc2Ftc3VuZyxjb21iaW5lci1uciA9IDwxOD47CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItb2Ryb2lkLWNvbW1vbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vZHJvaWQtY29tbW9uLmR0c2kKaW5kZXggYzY5N2ZmMC4uM2ZiZjU4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vZHJvaWQtY29tbW9uLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vZHJvaWQtY29tbW9uLmR0c2kKQEAgLTQ1LDYgKzQ1LDE2IEBACiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxvZHJvaWR4Mi1hdWRpbyI7CiAJCXNhbXN1bmcsaTJzLWNvbnRyb2xsZXIgPSA8JmkyczA+OwogCQlzYW1zdW5nLGF1ZGlvLWNvZGVjID0gPCZtYXg5ODA5MD47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2tfYXVkc3MgRVhZTk9TX01PVVRfQVVEU1M+LAorCQkJCTwmY2xvY2tfYXVkc3MgRVhZTk9TX01PVVRfSTJTPiwKKwkJCQk8JmNsb2NrX2F1ZHNzIEVYWU5PU19ET1VUX1NSUD4sCisJCQkJPCZjbG9ja19hdWRzcyBFWFlOT1NfRE9VVF9BVURfQlVTPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX0ZPVVRfRVBMTD4sCisJCQkJPCZjbG9ja19hdWRzcyBFWFlOT1NfTU9VVF9BVURTUz47CisJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LAorCQkJCTwwPiwKKwkJCQk8MTkyMDAwMDAwPiwKKwkJCQk8MTkyMDAwMDA+OwogCX07CiAKIAltbWNAMTI1NTAwMDAgewpAQCAtODIsMTggKzkyLDM0IEBACiAKIAkJZmltY18wOiBmaW1jQDExODAwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzA+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMwPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTc2MDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzE6IGZpbWNAMTE4MTAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMT4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzE+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMjogZmltY0AxMTgyMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMyPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMj47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAJCX07CiAKIAkJZmltY18zOiBmaW1jQDExODMwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzM+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMzPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTc2MDAwMDAwPjsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLXRyYXRzMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLXRyYXRzMi5kdHMKaW5kZXggNWUwNjZjZC4uMjkyMzFiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi10cmF0czIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItdHJhdHMyLmR0cwpAQCAtMTQsNiArMTQsNyBAQAogCiAvZHRzLXYxLzsKICNpbmNsdWRlICJleHlub3M0NDEyLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CiAKIC8gewogCW1vZGVsID0gIlNhbXN1bmcgVHJhdHMgMiBiYXNlZCBvbiBFeHlub3M0NDEyIjsKQEAgLTIyLDYgKzIzLDcgQEAKIAlhbGlhc2VzIHsKIAkJaTJjOSA9ICZpMmNfYWs4OTc1OwogCQlpMmMxMCA9ICZpMmNfY20zNjY1MTsKKwkJaTJjMTEgPSAmaTJjX21heDc3NjkzOwogCX07CiAKIAltZW1vcnkgewpAQCAtMzk5LDggKzQwMSw2IEBACiAJCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZNRU1fVkREXzIuOFYiOwogCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKIAkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1tZW0tb2ZmOwogCQkJCX07CiAKIAkJCQlsZG8yM19yZWc6IGxkbzIzIHsKQEAgLTUwMyw4ICs1MDMsNiBAQAogCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWTUVNX1ZEREZfMy4wViI7CiAJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4NTAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODUwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLW1lbS1vZmY7CiAJCQkJfTsKIAogCQkJCWJ1Y2s5X3JlZzogYnVjazkgewpAQCAtNTE4LDYgKzUxNiw0MiBAQAogCQl9OwogCX07CiAKKwlpMmNfbWF4Nzc2OTM6IGkyYy1ncGlvLTEgeworCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKKwkJZ3Bpb3MgPSA8JmdwbTIgMCBHUElPX0FDVElWRV9ISUdIPiwgPCZncG0yIDEgR1BJT19BQ1RJVkVfSElHSD47CisJCWkyYy1ncGlvLGRlbGF5LXVzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKworCQltYXg3NzY5M0A2NiB7CisJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3NjkzIjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQkJaW50ZXJydXB0cyA9IDw1IDI+OworCQkJcmVnID0gPDB4NjY+OworCisJCQlyZWd1bGF0b3JzIHsKKwkJCQllc2FmZW91dDFfcmVnOiBFU0FGRU9VVDFAMSB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVTQUZFT1VUMSI7CisJCQkJfTsKKwkJCQllc2FmZW91dDJfcmVnOiBFU0FGRU9VVDJAMiB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVTQUZFT1VUMiI7CisJCQkJfTsKKwkJCQljaGFyZ2VyX3JlZzogQ0hBUkdFUkAwIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiQ0hBUkdFUiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm9hbXAgPSA8NjAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3JvYW1wID0gPDI1ODAwMDA+OworCQkJCX07CisJCQl9OworCisJCQltYXg3NzY5M19oYXB0aWMgeworCQkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc2OTMtaGFwdGljIjsKKwkJCQloYXB0aWMtc3VwcGx5ID0gPCZsZG8yNl9yZWc+OworCQkJCXB3bXMgPSA8JnB3bSAwIDM4MDIyIDA+OworCQkJfTsKKwkJfTsKKwl9OworCiAJbW1jQDEyNTUwMDAwIHsKIAkJbnVtLXNsb3RzID0gPDE+OwogCQlicm9rZW4tY2Q7CkBAIC01MzUsNiArNTY5LDE2IEBACiAJCWNhcC1tbWMtaGlnaHNwZWVkOwogCX07CiAKKwlzZGhjaUAxMjUzMDAwMCB7CisJCWJ1cy13aWR0aCA9IDw0PjsKKwkJY2QtZ3Bpb3MgPSA8JmdweDMgNCAwPjsKKwkJY2QtaW52ZXJ0ZWQ7CisJCXBpbmN0cmwtMCA9IDwmc2QyX2NsayAmc2QyX2NtZCAmc2QyX2J1czQ+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQl2bW1jLXN1cHBseSA9IDwmbGRvMjFfcmVnPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKIAlzZXJpYWxAMTM4MDAwMDAgewogCQlzdGF0dXMgPSAib2theSI7CiAJfTsKQEAgLTU1MSw2ICs1OTUsMTEgQEAKIAkJc3RhdHVzID0gIm9rYXkiOwogCX07CiAKKwl0bXVAMTAwQzAwMDAgeworCQl2dG11LXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKIAlpMmNfYWs4OTc1OiBpMmMtZ3Bpby0wIHsKIAkJY29tcGF0aWJsZSA9ICJpMmMtZ3BpbyI7CiAJCWdwaW9zID0gPCZncHkyIDQgMD4sIDwmZ3B5MiA1IDA+OwpAQCAtNTk4LDYgKzY0NywxMyBAQAogCQl9OwogCX07CiAKKwlwd206IHB3bUAxMzlEMDAwMCB7CisJCXBpbmN0cmwtMCA9IDwmcHdtMF9vdXQ+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlzYW1zdW5nLHB3bS1vdXRwdXRzID0gPDA+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCWRzaV8wOiBkc2lAMTFDODAwMDAgewogCQl2ZGRjb3JlLXN1cHBseSA9IDwmbGRvOF9yZWc+OwogCQl2ZGRpby1zdXBwbHkgPSA8JmxkbzEwX3JlZz47CkBAIC02NjMsMjggKzcxOSw1MSBAQAogCQlwaW5jdHJsLTAgPSA8JmNhbV9wb3J0X2FfY2xrX2FjdGl2ZSAmY2FtX3BvcnRfYl9jbGtfYWN0aXZlPjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJc3RhdHVzID0gIm9rYXkiOworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0NBTTA+LAorCQkJCSAgPCZjbG9jayBDTEtfTU9VVF9DQU0xPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+LAorCQkJCQkgPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CiAKIAkJZmltY18wOiBmaW1jQDExODAwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzA+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMwPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTc2MDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzE6IGZpbWNAMTE4MTAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMT4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzE+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMjogZmltY0AxMTgyMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMyPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMj47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAJCX07CiAKIAkJZmltY18zOiBmaW1jQDExODMwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzM+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMzPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTc2MDAwMDAwPjsKIAkJfTsKIAogCQljc2lzXzA6IGNzaXNAMTE4ODAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJdmRkY29yZS1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKIAkJCXZkZGlvLXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNzYwMDAwMDA+OworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9DU0lTMD4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfQ1NJUzA+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCiAJCQkvKiBDYW1lcmEgQyAoMykgTUlQSSBDU0ktMiAoQ1NJUzApICovCiAJCQlwb3J0QDMgewpAQCAtNjk4LDEwICs3NzcsMTMgQEAKIAkJfTsKIAogCQljc2lzXzE6IGNzaXNAMTE4OTAwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJdmRkY29yZS1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKIAkJCXZkZGlvLXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMDA+OwotCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9DU0lTMT4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfQ1NJUzE+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCiAJCQkvKiBDYW1lcmEgRCAoNCkgTUlQSSBDU0ktMiAoQ1NJUzEpICovCiAJCQlwb3J0QDQgewpAQCAtNzgyLDMgKzg2NCwzMTkgQEAKIAkJaW8tY2hhbm5lbHMgPSA8JmFkYyAyPjsgIC8qIEJhdHRlcnkgdGVtcGVyYXR1cmUgKi8KIAl9OwogfTsKKworJnBpbmN0cmxfMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNsZWVwMD47CisKKwlzbGVlcDA6IHNsZWVwLXN0YXRlcyB7CisJCVBJTl9TTFAoZ3BhMC0wLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BhMC0xLCBPVVQwLCBOT05FKTsKKwkJUElOX1NMUChncGEwLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGEwLTMsIElOUFVULCBVUCk7CisJCVBJTl9TTFAoZ3BhMC00LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BhMC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMC03LCBJTlBVVCwgVVApOworCisJCVBJTl9TTFAoZ3BhMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS01LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGItMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYi0xLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGItMywgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BiLTUsIElOUFVULCBVUCk7CisJCVBJTl9TTFAoZ3BiLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGItNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BjMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMC00LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGMxLTAsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGMxLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwYzEtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYzEtMywgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYzEtNCwgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BkMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BkMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BkMC0yLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BkMC0zLCBJTlBVVCwgTk9ORSk7CisKKwkJUElOX1NMUChncGQxLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQxLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQxLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQxLTMsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZjAtMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZjAtMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZjAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZjAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZjAtNCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZjAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZjAtNiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZjAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BmMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMS00LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMS01LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMS02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMS03LCBQUkVWLCBOT05FKTsKKworCQlQSU5fU0xQKGdwZjItMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMi01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMi02LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMi03LCBJTlBVVCwgTk9ORSk7CisKKwkJUElOX1NMUChncGYzLTAsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGYzLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwZjMtMiwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMy0zLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGYzLTQsIE9VVDEsIE5PTkUpOworCQlQSU5fU0xQKGdwZjMtNSwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BqMC0wLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGowLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwajAtMiwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BqMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BqMC00LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGowLTUsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwajAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwajAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BqMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BqMS0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGoxLTIsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwajEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwajEtNCwgSU5QVVQsIERPV04pOworCX07Cit9OworCismcGluY3RybF8xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAxPjsKKworCXNsZWVwMTogc2xlZXAtc3RhdGVzIHsKKwkJUElOX1NMUChncGswLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazAtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMC0yLCBPVVQwLCBOT05FKTsKKwkJUElOX1NMUChncGswLTMsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazAtNCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMC01LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGswLTYsIFBSRVYsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BrMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0zLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGsxLTQsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazEtNSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMS02LCBQUkVWLCBOT05FKTsKKworCQlQSU5fU0xQKGdwazItMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazItNiwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BrMy0wLCBPVVQwLCBOT05FKTsKKwkJUElOX1NMUChncGszLTEsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGszLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGszLTMsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGszLTQsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGszLTUsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGszLTYsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwbDAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtNCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BsMC02LCBQUkVWLCBOT05FKTsKKworCQlQSU5fU0xQKGdwbDEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDItMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDItMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDItMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDItMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDItNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDItNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDItNiwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BsMi03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0wLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0wLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTEtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwbTEtMywgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwbTEtNCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwbTEtNSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwbTEtNiwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMi0wLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMi0xLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMi00LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0zLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwbTMtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMy0yLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncG0zLTMsIE9VVDEsIE5PTkUpOworCQlQSU5fU0xQKGdwbTMtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtNC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncHkwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHkwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHkwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHkwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHkwLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHkwLTUsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdweTEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTEtMywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B5Mi0wLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncHkyLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHkyLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncHkyLTMsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncHkyLTQsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncHkyLTUsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdweTMtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTMtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTMtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTMtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTMtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTMtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTMtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTMtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B5NC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5NC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5NC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5NC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5NC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5NC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5NC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5NC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncHk1LTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk1LTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk1LTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk1LTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk1LTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk1LTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk1LTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk1LTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdweTYtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTYtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTYtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTYtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTYtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTYtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTYtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTYtNywgSU5QVVQsIERPV04pOworCX07Cit9OworCismcGluY3RybF8yIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAyPjsKKworCXNsZWVwMjogc2xlZXAtc3RhdGVzIHsKKwkJUElOX1NMUChncHotMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwei0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B6LTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHotMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwei00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B6LTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHotNiwgSU5QVVQsIERPV04pOworCX07Cit9OworCismcGluY3RybF8zIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAzPjsKKworCXNsZWVwMzogc2xlZXAtc3RhdGVzIHsKKwkJUElOX1NMUChncHYwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYwLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYwLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYwLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYwLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwdjEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjEtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjEtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjEtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjEtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B2Mi0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2Mi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2Mi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2Mi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2Mi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2Mi01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2Mi02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2Mi03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncHYzLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYzLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYzLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYzLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYzLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYzLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYzLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYzLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwdjQtMCwgSU5QVVQsIERPV04pOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi5kdHNpCmluZGV4IGQ4YmMwNTllLi4wZjZlYzkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi5kdHNpCkBAIC0yMiw2ICsyMiwzNSBAQAogLyB7CiAJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTIiLCAic2Ftc3VuZyxleHlub3M0IjsKIAorCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QEEwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweEEwMD47CisJCX07CisKKwkJY3B1QEEwMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweEEwMT47CisJCX07CisKKwkJY3B1QEEwMiB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweEEwMj47CisJCX07CisKKwkJY3B1QEEwMyB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweEEwMz47CisJCX07CisJfTsKKwogCWNvbWJpbmVyOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxMDQ0MDAwMCB7CiAJCXNhbXN1bmcsY29tYmluZXItbnIgPSA8MjA+OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDE1LXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTUtcGluY3RybC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YWY5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDE1LXBpbmN0cmwuZHRzaQpAQCAtMCwwICsxLDU3MyBAQAorLyoKKyAqIFNhbXN1bmcncyBFeHlub3M0NDE1IFNvQ3MgcGluLW11eCBhbmQgcGluLWNvbmZpZyBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBTYW1zdW5nJ3MgRXh5bm9zNDQxNSBTb0NzIHBpbi1tdXggYW5kIHBpbi1jb25maWcgb3B0aW9zbiBhcmUgbGlzdGVkIGFzIGRldmljZQorICogdHJlZSBub2RlcyBhcmUgbGlzdGVkIGluIHRoaXMgZmlsZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworJnBpbmN0cmxfMCB7CisJZ3BhMDogZ3BhMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYTE6IGdwYTEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGI6IGdwYiB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYzA6IGdwYzAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGMxOiBncGMxIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BkMDogZ3BkMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwZDE6IGdwZDEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGYwOiBncGYwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BmMTogZ3BmMSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwZjI6IGdwZjIgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwl1YXJ0MF9kYXRhOiB1YXJ0MC1kYXRhIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTAtMCIsICJncGEwLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwweDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdWFydDBfZmN0bDogdWFydDAtZmN0bCB7CisJCXNhbXN1bmcscGlucyA9ICJncGEwLTIiLCAiZ3BhMC0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1YXJ0MV9kYXRhOiB1YXJ0MS1kYXRhIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTAtNCIsICJncGEwLTUiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVhcnQxX2ZjdGw6IHVhcnQxLWZjdGwgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMC02IiwgImdwYTAtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdWFydDJfZGF0YTogdWFydDItZGF0YSB7CisJCXNhbXN1bmcscGlucyA9ICJncGExLTAiLCAiZ3BhMS0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1YXJ0Ml9mY3RsOiB1YXJ0Mi1mY3RsIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTEtMiIsICJncGExLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVhcnQzX2RhdGE6IHVhcnQzLWRhdGEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMS00IiwgImdwYTEtNSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjMl9idXM6IGkyYzItYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTAtNiIsICJncGEwLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzNfYnVzOiBpMmMzLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGExLTIiLCAiZ3BhMS0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlzcGkwX2J1czogc3BpMC1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiLTAiLCAiZ3BiLTIiLCAiZ3BiLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzRfYnVzOiBpMmM0LWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGItMCIsICJncGItMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJc3BpMV9idXM6IHNwaTEtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYi00IiwgImdwYi02IiwgImdwYi03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmM1X2J1czogaTJjNS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiLTIiLCAiZ3BiLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyczFfYnVzOiBpMnMxLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGMwLTAiLCAiZ3BjMC0xIiwgImdwYzAtMiIsICJncGMwLTMiLAorCQkJCSJncGMwLTQiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyczJfYnVzOiBpMnMyLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGMxLTAiLCAiZ3BjMS0xIiwgImdwYzEtMiIsICJncGMxLTMiLAorCQkJCSJncGMxLTQiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXBjbTJfYnVzOiBwY20yLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGMxLTAiLCAiZ3BjMS0xIiwgImdwYzEtMiIsICJncGMxLTMiLAorCQkJCSJncGMxLTQiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzZfYnVzOiBpMmM2LWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGMxLTMiLCAiZ3BjMS00IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8ND47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlzcGkyX2J1czogc3BpMi1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMS0xIiwgImdwYzEtMyIsICJncGMxLTQiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDw1PjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXB3bTBfb3V0OiBwd20wLW91dCB7CisJCXNhbXN1bmcscGlucyA9ICJncGQwLTAiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXB3bTFfb3V0OiBwd20xLW91dCB7CisJCXNhbXN1bmcscGlucyA9ICJncGQwLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXB3bTJfb3V0OiBwd20yLW91dCB7CisJCXNhbXN1bmcscGlucyA9ICJncGQwLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXB3bTNfb3V0OiBwd20zLW91dCB7CisJCXNhbXN1bmcscGlucyA9ICJncGQwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzdfYnVzOiBpMmM3LWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGQwLTIiLCAiZ3BkMC0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMwX2J1czogaTJjMC1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BkMS0wIiwgImdwZDEtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjMV9idXM6IGkyYzEtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDEtMiIsICJncGQxLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZwaW5jdHJsXzEgeworCWdwazA6IGdwazAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGsxOiBncGsxIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BrMjogZ3BrMiB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwazM6IGdwazMgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGwwOiBncGwwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BtMDogZ3BtMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwbTE6IGdwbTEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncG0yOiBncG0yIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BtMzogZ3BtMyB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwbTQ6IGdwbTQgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncHgwOiBncHgwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0cyA9IDwwIDMyIDA+LCA8MCAzMyAwPiwgPDAgMzQgMD4sIDwwIDM1IDA+LAorCQkJCTwwIDM2IDA+LCA8MCAzNyAwPiwgPDAgMzggMD4sIDwwIDM5IDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncHgxOiBncHgxIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0cyA9IDwwIDQwIDA+LCA8MCA0MSAwPiwgPDAgNDIgMD4sIDwwIDQzIDA+LAorCQkJCTwwIDQ0IDA+LCA8MCA0NSAwPiwgPDAgNDYgMD4sIDwwIDQ3IDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncHgyOiBncHgyIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3B4MzogZ3B4MyB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCXNkMF9jbGs6IHNkMC1jbGsgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMC0wIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDBfY21kOiBzZDAtY21kIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazAtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QwX2NkOiBzZDAtY2QgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMC0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDBfcmRxczogc2QwLXJkcXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMC03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDBfYnVzMTogc2QwLWJ1cy13aWR0aDEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMC0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDBfYnVzNDogc2QwLWJ1cy13aWR0aDQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMC00IiwgImdwazAtNSIsICJncGswLTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9idXM4OiBzZDAtYnVzLXdpZHRoOCB7CisJCXNhbXN1bmcscGlucyA9ICJncGwwLTAiLCAiZ3BsMC0xIiwgImdwbDAtMiIsICJncGwwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9jbGs6IHNkMS1jbGsgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMS0wIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDFfY21kOiBzZDEtY21kIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazEtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QxX2NkOiBzZDEtY2QgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMS0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDFfYnVzMTogc2QxLWJ1cy13aWR0aDEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMS0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDFfYnVzNDogc2QxLWJ1cy13aWR0aDQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMS00IiwgImdwazEtNSIsICJncGsxLTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMl9jbGs6IHNkMi1jbGsgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMi0wIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDQ+OworCX07CisKKwlzZDJfY21kOiBzZDItY21kIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazItMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDw0PjsKKwl9OworCisJc2QyX2NkOiBzZDItY2QgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMi0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDJfYnVzMTogc2QyLWJ1cy13aWR0aDEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMi0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDQ+OworCX07CisKKwlzZDJfYnVzNDogc2QyLWJ1cy13aWR0aDQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMi00IiwgImdwazItNSIsICJncGsyLTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8ND47CisJfTsKKworCWNhbV9wb3J0X2JfaW86IGNhbS1wb3J0LWItaW8geworCQlzYW1zdW5nLHBpbnMgPSAiZ3BtMC0wIiwgImdwbTAtMSIsICJncG0wLTIiLCAiZ3BtMC0zIiwKKwkJCQkiZ3BtMC00IiwgImdwbTAtNSIsICJncG0wLTYiLCAiZ3BtMC03IiwKKwkJCQkiZ3BtMS0wIiwgImdwbTEtMSIsICJncG0yLTAiLCAiZ3BtMi0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwljYW1fcG9ydF9iX2Nsa19hY3RpdmU6IGNhbS1wb3J0LWItY2xrLWFjdGl2ZSB7CisJCXNhbXN1bmcscGlucyA9ICJncG0yLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCWNhbV9wb3J0X2JfY2xrX2lkbGU6IGNhbS1wb3J0LWItY2xrLWlkbGUgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BtMi0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlmaW1jX2lzX2kyYzA6IGZpbWMtaXMtaTJjMCB7CisJCXNhbXN1bmcscGlucyA9ICJncG00LTAiLCAiZ3BtNC0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlmaW1jX2lzX2kyYzE6IGZpbWMtaXMtaTJjMSB7CisJCXNhbXN1bmcscGlucyA9ICJncG00LTIiLCAiZ3BtNC0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlmaW1jX2lzX3VhcnQ6IGZpbWMtaXMtdWFydCB7CisJCXNhbXN1bmcscGlucyA9ICJncG0zLTUiLCAiZ3BtMy03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07Cit9OworCismcGluY3RybF8yIHsKKwlncHo6IGdweiB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWkyczBfYnVzOiBpMnMwLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncHotMCIsICJncHotMSIsICJncHotMiIsICJncHotMyIsCisJCQkJImdwei00IiwgImdwei01IiwgImdwei02IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxNS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYzliMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDE1LmR0c2kKQEAgLTAsMCArMSw2MDQgQEAKKy8qCisgKiBTYW1zdW5nJ3MgRXh5bm9zNDQxNSBTb0MgZGV2aWNlIHRyZWUgc291cmNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgorICogU2Ftc3VuZydzIEV4eW5vczQ0MTUgU29DIGRldmljZSBub2RlcyBhcmUgbGlzdGVkIGluIHRoaXMgZmlsZS4gRXh5bm9zNDQxNQorICogYmFzZWQgYm9hcmQgZmlsZXMgY2FuIGluY2x1ZGUgdGhpcyBmaWxlIGFuZCBwcm92aWRlIHZhbHVlcyBmb3IgYm9hcmQKKyAqIHNwZWNpZmljIGJpbmRpbmdzLgorICoKKyAqIE5vdGU6IFRoaXMgZmlsZSBkb2VzIG5vdCBpbmNsdWRlIGRldmljZSBub2RlcyBmb3IgYWxsIHRoZSBjb250cm9sbGVycyBpbgorICogRXh5bm9zNDQxNSBTb0MuIEFzIGRldmljZSB0cmVlIGNvdmVyYWdlIGZvciBFeHlub3M0NDE1IGluY3JlYXNlcywgYWRkaXRpb25hbAorICogbm9kZXMgY2FuIGJlIGFkZGVkIHRvIHRoaXMgZmlsZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJza2VsZXRvbi5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2V4eW5vczQ0MTUuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9leHlub3MtYXVkc3MtY2xrLmg+CisKKy8geworCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDE1IjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCisJYWxpYXNlcyB7CisJCXBpbmN0cmwwID0gJnBpbmN0cmxfMDsKKwkJcGluY3RybDEgPSAmcGluY3RybF8xOworCQlwaW5jdHJsMiA9ICZwaW5jdHJsXzI7CisJCW1zaGMwID0gJm1zaGNfMDsKKwkJbXNoYzEgPSAmbXNoY18xOworCQltc2hjMiA9ICZtc2hjXzI7CisJCXNwaTAgPSAmc3BpXzA7CisJCXNwaTEgPSAmc3BpXzE7CisJCXNwaTIgPSAmc3BpXzI7CisJCWkyYzAgPSAmaTJjXzA7CisJCWkyYzEgPSAmaTJjXzE7CisJCWkyYzIgPSAmaTJjXzI7CisJCWkyYzMgPSAmaTJjXzM7CisJCWkyYzQgPSAmaTJjXzQ7CisJCWkyYzUgPSAmaTJjXzU7CisJCWkyYzYgPSAmaTJjXzY7CisJCWkyYzcgPSAmaTJjXzc7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1MDogY3B1QGEwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweGEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTYwMDAwMDAwMD47CisJCX07CisKKwkJY3B1MTogY3B1QGEwMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweGEwMT47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTYwMDAwMDAwMD47CisJCX07CisKKwkJY3B1MjogY3B1QGEwMiB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweGEwMj47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTYwMDAwMDAwMD47CisJCX07CisKKwkJY3B1MzogY3B1QGEwMyB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwweGEwMz47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTYwMDAwMDAwMD47CisJCX07CisJfTsKKworCXNvYzogc29jIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJc3lzcmFtQDAyMDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKKwkJCXJlZyA9IDwweDAyMDIwMDAwIDB4NTAwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlcyA9IDwwIDB4MDIwMjAwMDAgMHg1MDAwMD47CisKKwkJCXNtcC1zeXNyYW1AMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3lzcmFtIjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMD47CisJCQl9OworCisJCQlzbXAtc3lzcmFtQDRmMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0tbnMiOworCQkJCXJlZyA9IDwweDRmMDAwIDB4MTAwMD47CisJCQl9OworCQl9OworCisJCXBpbmN0cmxfMjogcGluY3RybEAwMzg2MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxNS1waW5jdHJsIjsKKwkJCXJlZyA9IDwweDAzODYwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMjQyIDA+OworCQl9OworCisJCWNoaXBpZEAxMDAwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1jaGlwaWQiOworCQkJcmVnID0gPDB4MTAwMDAwMDAgMHgxMDA+OworCQl9OworCisJCXN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcjogc3lzY29uQDEwMDEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0LXN5c3JlZyIsICJzeXNjb24iOworCQkJcmVnID0gPDB4MTAwMTAwMDAgMHg0MDA+OworCQl9OworCisJCXBtdV9zeXN0ZW1fY29udHJvbGxlcjogc3lzdGVtLWNvbnRyb2xsZXJAMTAwMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTUtcG11IiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgxMDAyMDAwMCAweDQwMDA+OworCQl9OworCisJCW1pcGlfcGh5OiB2aWRlby1waHlAMTAwMjA3MTAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1cHYyMTAtbWlwaS12aWRlby1waHkiOworCQkJcmVnID0gPDB4MTAwMjA3MTAgOD47CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQl9OworCisJCXBkX2NhbTogY2FtLXBvd2VyLWRvbWFpbkAxMDAyNDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDAwMCAweDIwPjsKKwkJfTsKKworCQlwZF90djogdHYtcG93ZXItZG9tYWluQDEwMDI0MDIwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBkIjsKKwkJCXJlZyA9IDwweDEwMDI0MDIwIDB4MjA+OworCQl9OworCisJCXBkX21mYzogbWZjLXBvd2VyLWRvbWFpbkAxMDAyNDA0MCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDA0MCAweDIwPjsKKwkJfTsKKworCQlwZF9nM2Q6IGczZC1wb3dlci1kb21haW5AMTAwMjQwNjAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcGQiOworCQkJcmVnID0gPDB4MTAwMjQwNjAgMHgyMD47CisJCX07CisKKwkJcGRfbGNkMDogbGNkMC1wb3dlci1kb21haW5AMTAwMjQwODAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcGQiOworCQkJcmVnID0gPDB4MTAwMjQwODAgMHgyMD47CisJCX07CisKKwkJcGRfaXNwMDogaXNwMC1wb3dlci1kb21haW5AMTAwMjQwQTAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcGQiOworCQkJcmVnID0gPDB4MTAwMjQwQTAgMHgyMD47CisJCX07CisKKwkJcGRfaXNwMTogaXNwMS1wb3dlci1kb21haW5AMTAwMjQwRTAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcGQiOworCQkJcmVnID0gPDB4MTAwMjQwRTAgMHgyMD47CisJCX07CisKKwkJY211OiBjbG9jay1jb250cm9sbGVyQDEwMDMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDE1LWNtdSI7CisJCQlyZWcgPSA8MHgxMDAzMDAwMCAweDE4MDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJfTsKKworCQlydGM6IHJ0Y0AxMDA3MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zMzI1MC1ydGMiOworCQkJcmVnID0gPDB4MTAwNzAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDczIDA+LCA8MCA3NCAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbWN0QDEwMDUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLW1jdCI7CisJCQlyZWcgPSA8MHgxMDA1MDAwMCAweDgwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMjE4IDA+LCA8MCAyMTkgMD4sIDwwIDIyMCAwPiwgPDAgMjIxIDA+LAorCQkJCSAgICAgPDAgMjIzIDA+LCA8MCAyMjYgMD4sIDwwIDIyNyAwPiwgPDAgMjI4IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0ZJTl9QTEw+LCA8JmNtdSBDTEtfTUNUPjsKKwkJCWNsb2NrLW5hbWVzID0gImZpbl9wbGwiLCAibWN0IjsKKwkJfTsKKworCQlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQDEwNDgxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJcmVnID0gPDB4MTA0ODEwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDEwNDgyMDAwIDB4MTAwMD4sCisJCQkgICAgICA8MHgxMDQ4NDAwMCAweDIwMDA+LAorCQkJICAgICAgPDB4MTA0ODYwMDAgMHgyMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MSA5IDB4ZjA0PjsKKwkJfTsKKworCQlsMmM6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMTA1MDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOworCQkJcmVnID0gPDB4MTA1MDIwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLXVuaWZpZWQ7CisJCQljYWNoZS1sZXZlbCA9IDwyPjsKKwkJCWFybSx0YWctbGF0ZW5jeSA9IDwyIDIgMT47CisJCQlhcm0sZGF0YS1sYXRlbmN5ID0gPDMgMiAxPjsKKwkJCWFybSxkb3VibGUtbGluZWZpbGwgPSA8MT47CisJCQlhcm0sZG91YmxlLWxpbmVmaWxsLWluY3IgPSA8MD47CisJCQlhcm0sZG91YmxlLWxpbmVmaWxsLXdyYXAgPSA8MT47CisJCQlhcm0scHJlZmV0Y2gtZHJvcCA9IDwxPjsKKwkJCWFybSxwcmVmZXRjaC1vZmZzZXQgPSA8Nz47CisJCX07CisKKwkJY211X2RtYzogY2xvY2stY29udHJvbGxlckAxMDVDMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxNS1jbXUtZG1jIjsKKwkJCXJlZyA9IDwweDEwNUMwMDAwIDB4MzAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCX07CisKKwkJcGluY3RybF8xOiBwaW5jdHJsQDExMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDE1LXBpbmN0cmwiOworCQkJcmVnID0gPDB4MTEwMDAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAyMjUgMD47CisKKwkJCXdha2V1cC1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtd2FrZXVwLWVpbnQiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCQkJaW50ZXJydXB0cyA9IDwwIDQ4IDA+OworCQkJfTsKKwkJfTsKKworCQlwaW5jdHJsXzA6IHBpbmN0cmxAMTE0MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTUtcGluY3RybCI7CisJCQlyZWcgPSA8MHgxMTQwMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDI0MCAwPjsKKwkJfTsKKworCQloc290ZzogaHNvdGdAMTI0ODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzY0MDAtaHNvdGciOworCQkJcmVnID0gPDB4MTI0ODAwMDAgMHgyMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQxIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VTQkRFVklDRT47CisJCQljbG9jay1uYW1lcyA9ICJvdGciOworCQkJcGh5cyA9IDwmZXh5bm9zX3VzYnBoeSAwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IyLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1zaGNfMDogbXNoY0AxMjUxMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kdy1tc2hjIjsKKwkJCXJlZyA9IDwweDEyNTEwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQyIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1NETU1DMD4sIDwmY211IENMS19TQ0xLX01NQzA+OworCQkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7CisJCQlmaWZvLWRlcHRoID0gPDB4ODA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbXNoY18xOiBtc2hjQDEyNTIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLWR3LW1zaGMiOworCQkJcmVnID0gPDB4MTI1MjAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNDMgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfU0RNTUMxPiwgPCZjbXUgQ0xLX1NDTEtfTU1DMT47CisJCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKKwkJCWZpZm8tZGVwdGggPSA8MHg4MD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltc2hjXzI6IG1zaGNAMTI1MzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtZHctbXNoYyI7CisJCQlyZWcgPSA8MHgxMjUzMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE0NCAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19TRE1NQzI+LCA8JmNtdSBDTEtfU0NMS19NTUMyPjsKKwkJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOworCQkJZmlmby1kZXB0aCA9IDwweDgwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWVoY2k6IGVoY2lAMTI1ODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtZWhjaSI7CisJCQlyZWcgPSA8MHgxMjU4MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQwIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VTQkhPU1Q+OworCQkJY2xvY2stbmFtZXMgPSAidXNiaG9zdCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCXBoeXMgPSA8JmV4eW5vc191c2JwaHkgMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCQlwb3J0QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCQlwaHlzID0gPCZleHlub3NfdXNicGh5IDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCQkJcG9ydEAyIHsKKwkJCQlyZWcgPSA8Mj47CisJCQkJcGh5cyA9IDwmZXh5bm9zX3VzYnBoeSAzPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwkJfTsKKworCQlvaGNpOiBvaGNpQDEyNTkwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLW9oY2kiOworCQkJcmVnID0gPDB4MTI1OTAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE0MCAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19VU0JIT1NUPjsKKwkJCWNsb2NrLW5hbWVzID0gInVzYmhvc3QiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlwb3J0QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCQlwaHlzID0gPCZleHlub3NfdXNicGh5IDE+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCQl9OworCisJCWV4eW5vc191c2JwaHk6IGV4eW5vcy11c2JwaHlAMTI1QjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczR4MTItdXNiMi1waHkiOworCQkJcmVnID0gPDB4MTI1QjAwMDAgMHgxMDA+OworCQkJc2Ftc3VuZyxwbXVyZWctcGhhbmRsZSA9IDwmcG11X3N5c3RlbV9jb250cm9sbGVyPjsKKwkJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVVNCREVWSUNFPiwgPCZ4dXNieHRpPjsKKwkJCWNsb2NrLW5hbWVzID0gInBoeSIsICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJYW1iYSB7CisJCQljb21wYXRpYmxlID0gImFybSxhbWJhLWJ1cyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJCXJhbmdlczsKKworCQkJcGRtYTA6IHBkbWFAMTI2ODAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzMwIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweDEyNjgwMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEzOCAwPjsKKwkJCQljbG9ja3MgPSA8JmNtdSBDTEtfUERNQTA+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQkjZG1hLWNlbGxzID0gPDE+OworCQkJCSNkbWEtY2hhbm5lbHMgPSA8OD47CisJCQkJI2RtYS1yZXF1ZXN0cyA9IDwzMj47CisJCQl9OworCisJCQlwZG1hMTogcGRtYUAxMjY5MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMzAiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MTI2OTAwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTM5IDA+OworCQkJCWNsb2NrcyA9IDwmY211IENMS19QRE1BMT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCSNkbWEtY2VsbHMgPSA8MT47CisJCQkJI2RtYS1jaGFubmVscyA9IDw4PjsKKwkJCQkjZG1hLXJlcXVlc3RzID0gPDMyPjsKKwkJCX07CisJCX07CisKKwkJYWRjOiBhZGNAMTI2QzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczMyNTAtYWRjIiwKKwkJCQkgICAgICJzYW1zdW5nLGV4eW5vcy1hZGMtdjIiOworCQkJcmVnID0gPDB4MTI2QzAwMDAgMHgxMDA+LCA8MHgxMDAyMDcxOCAweDQ+OworCQkJaW50ZXJydXB0cyA9IDwwIDEzNyAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImFkYyIsICJzY2xrIjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19UU0FEQz4sIDwmY211IENMS19TQ0xLX1RTQURDPjsKKwkJCSNpby1jaGFubmVsLWNlbGxzID0gPDE+OworCQkJaW8tY2hhbm5lbC1yYW5nZXM7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbF8wOiBzZXJpYWxAMTM4MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCI7CisJCQlyZWcgPSA8MHgxMzgwMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTA5IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VBUlQwPiwgPCZjbXUgQ0xLX1NDTEtfVUFSVDA+OworCQkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbF8xOiBzZXJpYWxAMTM4MTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCI7CisJCQlyZWcgPSA8MHgxMzgxMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTEwIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VBUlQxPiwgPCZjbXUgQ0xLX1NDTEtfVUFSVDE+OworCQkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbF8yOiBzZXJpYWxAMTM4MjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCI7CisJCQlyZWcgPSA8MHgxMzgyMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTExIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VBUlQyPiwgPCZjbXUgQ0xLX1NDTEtfVUFSVDI+OworCQkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbF8zOiBzZXJpYWxAMTM4MzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCI7CisJCQlyZWcgPSA8MHgxMzgzMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTEyIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VBUlQzPiwgPCZjbXUgQ0xLX1NDTEtfVUFSVDM+OworCQkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY18wOiBpMmNAMTM4NjAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzg2MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTEzIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzA+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzBfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzE6IGkyY0AxMzg3MDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzODcwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTQgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDMT47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMV9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfMjogaTJjQDEzODgwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4ODAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExNSAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkMyPjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMyX2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY18zOiBpMmNAMTM4OTAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzg5MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE2IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzM+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzNfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzQ6IGkyY0AxMzhBMDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzOEEwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTcgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDND47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjNF9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfNTogaTJjQDEzOEIwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4QjAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExOCAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkM1PjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmM1X2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY182OiBpMmNAMTM4QzAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzhDMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE5IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzY+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzZfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzc6IGkyY0AxMzhEMDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzOEQwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMjAgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDNz47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjN19idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzcGlfMDogc3BpQDEzOTIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXNwaSI7CisJCQlyZWcgPSA8MHgxMzkyMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTIxIDA+OworCQkJZG1hcyA9IDwmcGRtYTAgNz4sIDwmcGRtYTAgNj47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19TUEkwPiwgPCZjbXUgQ0xLX1NDTEtfU1BJMD47CisJCQljbG9jay1uYW1lcyA9ICJzcGkiLCAic3BpX2J1c2NsazAiOworCQkJc2Ftc3VuZyxzcGktc3JjLWNsayA9IDwwPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnNwaTBfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc3BpXzE6IHNwaUAxMzkzMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zcGkiOworCQkJcmVnID0gPDB4MTM5MzAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyMiAwPjsKKwkJCWRtYXMgPSA8JnBkbWExIDc+LCA8JnBkbWExIDY+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfU1BJMT4sIDwmY211IENMS19TQ0xLX1NQSTE+OworCQkJY2xvY2stbmFtZXMgPSAic3BpIiwgInNwaV9idXNjbGswIjsKKwkJCXNhbXN1bmcsc3BpLXNyYy1jbGsgPSA8MD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZzcGkxX2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNwaV8yOiBzcGlAMTM5NDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3BpIjsKKwkJCXJlZyA9IDwweDEzOTQwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMjMgMD47CisJCQlkbWFzID0gPCZwZG1hMCA5PiwgPCZwZG1hMCA4PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1NQSTI+LCA8JmNtdSBDTEtfU0NMS19TUEkyPjsKKwkJCWNsb2NrLW5hbWVzID0gInNwaSIsICJzcGlfYnVzY2xrMCI7CisJCQlzYW1zdW5nLHNwaS1zcmMtY2xrID0gPDA+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmc3BpMl9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQljbG9ja19hdWRzczogY2xvY2stY29udHJvbGxlckAwMzgxMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1hdWRzcy1jbG9jayI7CisJCQlyZWcgPSA8MHgwMzgxMDAwMCAweDBDPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJfTsKKworCQlpMnMwOiBpMnNAMzgzMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVwdjIxMC1pMnMiOworCQkJcmVnID0gPDB4MDM4MzAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyNCAwPjsKKwkJCWNsb2NrcyA9IDwmY2xvY2tfYXVkc3MgRVhZTk9TX0kyU19CVVM+LAorCQkJCTwmY2xvY2tfYXVkc3MgRVhZTk9TX1NDTEtfSTJTPjsKKwkJCWNsb2NrLW5hbWVzID0gImlpcyIsICJpMnNfb3BjbGswIjsKKwkJCWRtYXMgPSA8JnBkbWExIDEwPiwgPCZwZG1hMSA5PiwgPCZwZG1hMSA4PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCIsICJ0eC1zZWMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJzMF9idXM+OworCQkJc2Ftc3VuZyxpZG1hLWFkZHIgPSA8MHgwMzAwMDAwMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXB3bTogcHdtQDEzOUQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXB3bSI7CisJCQlyZWcgPSA8MHgxMzlEMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEwNCAwPiwgPDAgMTA1IDA+LCA8MCAxMDYgMD4sCisJCQkJICAgICA8MCAxMDcgMD4sIDwwIDEwOCAwPjsKKwkJCSNwd20tY2VsbHMgPSA8Mz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXBtdSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktcG11IjsKKwkJCWludGVycnVwdHMgPSA8MCAxOCAwPiwgPDAgMTkgMD4sIDwwIDIwIDA+LCA8MCAyMSAwPjsKKwkJfTsKKwl9OworfTsKKworI2luY2x1ZGUgImV4eW5vczQ0MTUtcGluY3RybC5kdHNpIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNHgxMi1waW5jdHJsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLXBpbmN0cmwuZHRzaQppbmRleCAwODY1YTJlLi5jMTQxOTMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLXBpbmN0cmwuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLXBpbmN0cmwuZHRzaQpAQCAtMTIsNiArMTIsMjIgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKi8KIAorI2RlZmluZSBQSU5fUFVMTF9OT05FCQkwCisjZGVmaW5lIFBJTl9QVUxMX0RPV04JCTEKKyNkZWZpbmUgUElOX1BVTExfVVAJCTMKKworI2RlZmluZSBQSU5fUEROX09VVDAJCTAKKyNkZWZpbmUgUElOX1BETl9PVVQxCQkxCisjZGVmaW5lIFBJTl9QRE5fSU5QVVQJCTIKKyNkZWZpbmUgUElOX1BETl9QUkVWCQkzCisKKyNkZWZpbmUgUElOX1NMUChfcGluLCBfbW9kZSwgX3B1bGwpCQkJCVwKKwlfcGluIHsJCQkJCQkJXAorCQlzYW1zdW5nLHBpbnMgPSAjX3BpbjsJCQkJXAorCQlzYW1zdW5nLHBpbi1jb24tcGRuID0gPFBJTl9QRE5fICMjX21vZGU+OwlcCisJCXNhbXN1bmcscGluLXB1ZC1wZG4gPSA8UElOX1BVTExfICMjX3B1bGw+OwlcCisJfQorCiAvIHsKIAlwaW5jdHJsQDExNDAwMDAwIHsKIAkJZ3BhMDogZ3BhMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLmR0c2kKaW5kZXggODYxYmI5MS4uMmU5ZjFmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNHgxMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTIuZHRzaQpAQCAtMjcxLDQgKzI3MSwxNCBAQAogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNHgxMi11c2IyLXBoeSI7CiAJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c19yZWc+OwogCX07CisKKwl0bXVAMTAwQzAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxMi10bXUiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZjb21iaW5lcj47CisJCWludGVycnVwdHMgPSA8MiA0PjsKKwkJcmVnID0gPDB4MTAwQzAwMDAgMHgxMDA+OworCQljbG9ja3MgPSA8JmNsb2NrIDM4Mz47CisJCWNsb2NrLW5hbWVzID0gInRtdV9hcGJpZiI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLWFybmRhbGUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1hcm5kYWxlLmR0cwppbmRleCAzYWNkOTdlLi43ZTcyOGExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLWFybmRhbGUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtYXJuZGFsZS5kdHMKQEAgLTcsMTIgKzcsMTMgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLworICovCiAKIC9kdHMtdjEvOwotI2luY2x1ZGUgImV4eW5vczUyNTAuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgorI2luY2x1ZGUgImV4eW5vczUyNTAuZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiSW5zaWduYWwgQXJuZGFsZSBldmFsdWF0aW9uIGJvYXJkIGJhc2VkIG9uIEVYWU5PUzUyNTAiOwpAQCAtMjYsNDY1ICsyNyw1MiBAQAogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNBQzIsMTE1MjAwIjsKIAl9OwogCi0JcnRjQDEwMUUwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07Ci0KLQljb2RlY0AxMTAwMDAwMCB7Ci0JCXNhbXN1bmcsbWZjLXIgPSA8MHg0MzAwMDAwMCAweDgwMDAwMD47Ci0JCXNhbXN1bmcsbWZjLWwgPSA8MHg1MTAwMDAwMCAweDgwMDAwMD47Ci0JfTsKLQotCWkyY0AxMkM2MDAwMCB7Ci0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OwotCQlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4NjY+OwotCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJczVtODc2N19wbWljQDY2IHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNW04NzY3LXBtaWMiOwotCQkJcmVnID0gPDB4NjY+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mz47Ci0JCQlpbnRlcnJ1cHRzID0gPDIgSVJRX1RZUEVfTEVWRUxfTE9XPjsKLQotCQkJdmluYjEtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5iMi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmIzLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmluYjQtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5iNS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmI2LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmluYjctc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5iOC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmI5LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCi0JCQl2aW5sMS1zdXBwbHkgPSA8JmJ1Y2s3X3JlZz47Ci0JCQl2aW5sMi1zdXBwbHkgPSA8JmJ1Y2s3X3JlZz47Ci0JCQl2aW5sMy1zdXBwbHkgPSA8JmJ1Y2s3X3JlZz47Ci0JCQl2aW5sNC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmw1LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmlubDYtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5sNy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmw4LXN1cHBseSA9IDwmYnVjazhfcmVnPjsKLQkJCXZpbmw5LXN1cHBseSA9IDwmYnVjazhfcmVnPjsKLQotCQkJczVtODc2NyxwbWljLWJ1Y2syLWR2cy12b2x0YWdlID0gPDEzMDAwMDA+OwotCQkJczVtODc2NyxwbWljLWJ1Y2szLWR2cy12b2x0YWdlID0gPDExMDAwMDA+OwotCQkJczVtODc2NyxwbWljLWJ1Y2s0LWR2cy12b2x0YWdlID0gPDEyMDAwMDA+OwotCQkJczVtODc2NyxwbWljLWJ1Y2stZHZzLWdwaW9zID0gPCZncGQxIDAgMD4sCi0JCQkJCQkJPCZncGQxIDEgMD4sCi0JCQkJCQkJPCZncGQxIDIgMD47Ci0JCQlzNW04NzY3LHBtaWMtYnVjay1kcy1ncGlvcyA9IDwmZ3B4MiAzIDA+LAotCQkJCQkJCTwmZ3B4MiA0IDA+LAotCQkJCQkJCTwmZ3B4MiA1IDA+OwotCQkJcmVndWxhdG9ycyB7Ci0JCQkJbGRvMV9yZWc6IExETzEgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfQUxJVkVfMS4wViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzJfcmVnOiBMRE8yIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREXzI4SU9fRFBfMS4zNVYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8zX3JlZzogTERPMyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9DT01NT04xXzEuOFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG80X3JlZzogTERPNCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9JT1BFUklfMS44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvNV9yZWc6IExETzUgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfRVhUXzEuOFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG82X3JlZzogTERPNiB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9NUExMXzEuMVYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG83X3JlZzogTERPNyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9YUExMXzEuMVYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG84X3JlZzogTERPOCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9DT01NT04yXzEuMFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG85X3JlZzogTERPOSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF8zM09OXzMuMFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzEwX3JlZzogTERPMTAgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfQ09NTU9OM18xLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMTFfcmVnOiBMRE8xMSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9BQkIyXzEuOFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8xMl9yZWc6IExETzEyIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX1VTQl8zLjBWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMTNfcmVnOiBMRE8xMyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERFFfQzJDX1dfMS44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzE0X3JlZzogTERPMTQgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWREQxOF9BQkIwXzNfMS44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzE1X3JlZzogTERPMTUgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWREQxMF9DT01NT040XzEuMFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8xNl9yZWc6IExETzE2IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREMThfSFNJQ18xLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMTdfcmVnOiBMRE8xNyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERFFfTU1DMl8zXzIuOFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8xOF9yZWc6IExETzE4IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREXzMzT05fMi44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMjJfcmVnOiBMRE8yMiB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVYVF8zM19PRkYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzIzX3JlZzogTERPMjMgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJFWFRfMjhfT0ZGIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8yNV9yZWc6IExETzI1IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUFZERF9MRE8yNSI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMjZfcmVnOiBMRE8yNiB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVYVF8xOF9PRkYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWJ1Y2sxX3JlZzogQlVDSzEgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbWlmIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTUwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlidWNrMl9yZWc6IEJVQ0syIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2FybSI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDkxMjUwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJYnVjazNfcmVnOiBCVUNLMyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9pbnQiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWJ1Y2s0X3JlZzogQlVDSzQgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfZzNkIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJYnVjazVfcmVnOiBCVUNLNSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9NRU1fMS4zNVYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3NTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzU1MDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWJ1Y2s3X3JlZzogQlVDSzcgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQVkREX0JVQ0s3IjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJYnVjazhfcmVnOiBCVUNLOCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlBWRERfQlVDSzgiOwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlidWNrOV9yZWc6IEJVQ0s5IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREXzMzX09GRl9FWFQxIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzUwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQkJCX07Ci0JCX07Ci0JfTsKLQotCWkyY0AxMkM4MDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKLQkJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDUwPjsKLQotCQloZG1pZGRjQDUwIHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWhkbWlkZGMiOwotCQkJcmVnID0gPDB4NTA+OwotCQl9OwotCX07Ci0KLQlpMmNAMTJDOTAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJd20xODExYUAxYSB7Ci0KLQkJCWNvbXBhdGlibGUgPSAid2xmLHdtMTgxMSI7Ci0JCQlyZWcgPSA8MHgxYT47Ci0KLQkJCUFWREQyLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJQ1BWREQtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQlEQlZERDEtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQlEQlZERDItc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQlEQlZERDMtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQlMRE8xVkRELXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJU1BLVkREMS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCVNQS1ZERDItc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0KLQkJCXdsZixsZG8xZW5hID0gPCZncGIwIDAgMD47Ci0JCQl3bGYsbGRvMmVuYSA9IDwmZ3BiMCAxIDA+OwotCQl9OwotCX07Ci0KLQlpMmNAMTJDRTAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47Ci0JCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47Ci0JCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHgzOD47Ci0KLQkJaGRtaXBoeUAzOCB7Ci0JCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1oZG1pcGh5IjsKLQkJCXJlZyA9IDwweDM4PjsKLQkJfTsKLQl9OwotCi0JaTJjQDEyMUQwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDQwMDAwPjsKLQkJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDM4PjsKLQotCQlzYXRhX3BoeV9pMmM6c2F0YS1waHlAMzggewotCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vcy1zYXRhcGh5LWkyYyI7Ci0JCQlyZWcgPSA8MHgzOD47Ci0JCX07Ci0JfTsKLQotCXNhdGFAMTIyRjAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQotCXNhdGEtcGh5QDEyMTcwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlzYW1zdW5nLGV4eW5vcy1zYXRhcGh5LWkyYy1waGFuZGxlID0gPCZzYXRhX3BoeV9pMmM+OwotCX07Ci0KLQltbWNfMDogbW1jQDEyMjAwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQludW0tc2xvdHMgPSA8MT47Ci0JCWJyb2tlbi1jZDsKLQkJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47Ci0JCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47Ci0JCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47Ci0JCXZtbWMtc3VwcGx5ID0gPCZtbWNfcmVnPjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZzZDBfY2xrICZzZDBfY21kICZzZDBfYnVzNCAmc2QwX2J1czg+OwotCQlidXMtd2lkdGggPSA8OD47Ci0JCWNhcC1tbWMtaGlnaHNwZWVkOwotCX07Ci0KLQltbWNfMjogbW1jQDEyMjIwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQludW0tc2xvdHMgPSA8MT47Ci0JCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47Ci0JCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OwotCQlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwyIDM+OwotCQlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OwotCQl2bW1jLXN1cHBseSA9IDwmbW1jX3JlZz47Ci0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmc2QyX2NsayAmc2QyX2NtZCAmc2QyX2NkICZzZDJfYnVzND47Ci0JCWJ1cy13aWR0aCA9IDw0PjsKLQkJZGlzYWJsZS13cDsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQl9OwotCi0JaTJzMDogaTJzQDAzODMwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07Ci0KIAlncGlvX2tleXMgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CiAKIAkJbWVudSB7CiAJCQlsYWJlbCA9ICJTVy1UQUNUMiI7Ci0JCQlncGlvcyA9IDwmZ3B4MSA0IDE+OworCQkJZ3Bpb3MgPSA8JmdweDEgNCBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDxLRVlfTUVOVT47CiAJCQlncGlvLWtleSx3YWtldXA7CiAJCX07CiAKIAkJaG9tZSB7CiAJCQlsYWJlbCA9ICJTVy1UQUNUMyI7Ci0JCQlncGlvcyA9IDwmZ3B4MSA1IDE+OworCQkJZ3Bpb3MgPSA8JmdweDEgNSBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDxLRVlfSE9NRT47CiAJCQlncGlvLWtleSx3YWtldXA7CiAJCX07CiAKIAkJdXAgewogCQkJbGFiZWwgPSAiU1ctVEFDVDQiOwotCQkJZ3Bpb3MgPSA8JmdweDEgNiAxPjsKKwkJCWdwaW9zID0gPCZncHgxIDYgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8S0VZX1VQPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQlkb3duIHsKIAkJCWxhYmVsID0gIlNXLVRBQ1Q1IjsKLQkJCWdwaW9zID0gPCZncHgxIDcgMT47CisJCQlncGlvcyA9IDwmZ3B4MSA3IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPEtFWV9ET1dOPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQliYWNrIHsKIAkJCWxhYmVsID0gIlNXLVRBQ1Q2IjsKLQkJCWdwaW9zID0gPCZncHgyIDAgMT47CisJCQlncGlvcyA9IDwmZ3B4MiAwIEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPEtFWV9CQUNLPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQl3YWtldXAgewogCQkJbGFiZWwgPSAiU1ctVEFDVDciOwotCQkJZ3Bpb3MgPSA8JmdweDIgMSAxPjsKKwkJCWdwaW9zID0gPCZncHgyIDEgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8S0VZX1dBS0VVUD47CiAJCQlncGlvLWtleSx3YWtldXA7CiAJCX07CiAJfTsKIAotCWhkbWkgewotCQlocGQtZ3BpbyA9IDwmZ3B4MyA3IDI+OwotCQl2ZGRfb3NjLXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKLQkJdmRkX3BsbC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKLQkJdmRkLXN1cHBseSA9IDwmbGRvOF9yZWc+OwotCX07Ci0KIAlyZWd1bGF0b3JzIHsKIAkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC01MDIsNyArOTAsNyBAQAogCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREXzMzT05fMi44ViI7CiAJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKIAkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OwotCQkJZ3BpbyA9IDwmZ3B4MSAxIDE+OworCQkJZ3BpbyA9IDwmZ3B4MSAxIEdQSU9fQUNUSVZFX0xPVz47CiAJCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJCX07CiAKQEAgLTUyMCw0NiArMTA4LDQ1NSBAQAogCQl9OwogCX07CiAKLQlkcC1jb250cm9sbGVyQDE0NUIwMDAwIHsKLQkJc2Ftc3VuZyxjb2xvci1zcGFjZSA9IDwwPjsKLQkJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OwotCQlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OwotCQlzYW1zdW5nLGNvbG9yLWRlcHRoID0gPDE+OwotCQlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKLQkJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDQ+OwotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKKwkvLyBTTVNDIFVTQjM1MDMgY29ubmVjdGVkIGluIGhhcmR3YXJlIG9ubHkgbW9kZSBhcyBhIFBIWQorCXVzYl9odWI6IHVzYi1odWIgeworCQljb21wYXRpYmxlID0gInNtc2MsdXNiMzUwM2EiOwogCi0JZmltZDogZmltZEAxNDQwMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQkJZGlzcGxheS10aW1pbmdzIHsKLQkJCW5hdGl2ZS1tb2RlID0gPCZ0aW1pbmcwPjsKLQkJCXRpbWluZzA6IHRpbWluZ0AwIHsKLQkJCQkvKiAyNTYweDE2MDAgRFAgcGFuZWwgKi8KLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDA+OwotCQkJCWhhY3RpdmUgPSA8MjU2MD47Ci0JCQkJdmFjdGl2ZSA9IDwxNjAwPjsKLQkJCQloZnJvbnQtcG9yY2ggPSA8NDg+OwotCQkJCWhiYWNrLXBvcmNoID0gPDgwPjsKLQkJCQloc3luYy1sZW4gPSA8MzI+OwotCQkJCXZiYWNrLXBvcmNoID0gPDE2PjsKLQkJCQl2ZnJvbnQtcG9yY2ggPSA8OD47Ci0JCQkJdnN5bmMtbGVuID0gPDY+OworCQlyZXNldC1ncGlvcyA9IDwmZ3B4MyA1IEdQSU9fQUNUSVZFX0xPVz47CisJCWNvbm5lY3QtZ3Bpb3MgPSA8JmdwZDEgNyBHUElPX0FDVElWRV9MT1c+OworCX07Cit9OworCismZHAgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGNvbG9yLXNwYWNlID0gPDA+OworCXNhbXN1bmcsZHluYW1pYy1yYW5nZSA9IDwwPjsKKwlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OworCXNhbXN1bmcsY29sb3ItZGVwdGggPSA8MT47CisJc2Ftc3VuZyxsaW5rLXJhdGUgPSA8MHgwYT47CisJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDQ+OworfTsKKworJmZpbWQgeworCXN0YXR1cyA9ICJva2F5IjsKKworCWRpc3BsYXktdGltaW5ncyB7CisJCW5hdGl2ZS1tb2RlID0gPCZ0aW1pbmcwPjsKKworCQl0aW1pbmcwOiB0aW1pbmdAMCB7CisJCQkvKiAyNTYweDE2MDAgRFAgcGFuZWwgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMD47CisJCQloYWN0aXZlID0gPDI1NjA+OworCQkJdmFjdGl2ZSA9IDwxNjAwPjsKKwkJCWhmcm9udC1wb3JjaCA9IDw0OD47CisJCQloYmFjay1wb3JjaCA9IDw4MD47CisJCQloc3luYy1sZW4gPSA8MzI+OworCQkJdmJhY2stcG9yY2ggPSA8MTY+OworCQkJdmZyb250LXBvcmNoID0gPDg+OworCQkJdnN5bmMtbGVuID0gPDY+OworCQl9OworCX07Cit9OworCismaGRtaSB7CisJaHBkLWdwaW8gPSA8JmdweDMgNyBHUElPX0FDVElWRV9MT1c+OworCXZkZF9vc2Mtc3VwcGx5ID0gPCZsZG8xMF9yZWc+OworCXZkZF9wbGwtc3VwcGx5ID0gPCZsZG84X3JlZz47CisJdmRkLXN1cHBseSA9IDwmbGRvOF9yZWc+OworfTsKKworJmkyY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDIwMDAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4NjY+OworCisJczVtODc2N19wbWljQDY2IHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1bTg3NjctcG1pYyI7CisJCXJlZyA9IDwweDY2PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mz47CisJCWludGVycnVwdHMgPSA8MiBJUlFfVFlQRV9MRVZFTF9MT1c+OworCisJCXZpbmIxLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5iMi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmluYjMtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmI0LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5iNS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmluYjYtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmI3LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5iOC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmluYjktc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisKKwkJdmlubDEtc3VwcGx5ID0gPCZidWNrN19yZWc+OworCQl2aW5sMi1zdXBwbHkgPSA8JmJ1Y2s3X3JlZz47CisJCXZpbmwzLXN1cHBseSA9IDwmYnVjazdfcmVnPjsKKwkJdmlubDQtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmw1LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5sNi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmlubDctc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmw4LXN1cHBseSA9IDwmYnVjazhfcmVnPjsKKwkJdmlubDktc3VwcGx5ID0gPCZidWNrOF9yZWc+OworCisJCXM1bTg3NjcscG1pYy1idWNrMi1kdnMtdm9sdGFnZSA9IDwxMzAwMDAwPjsKKwkJczVtODc2NyxwbWljLWJ1Y2szLWR2cy12b2x0YWdlID0gPDExMDAwMDA+OworCQlzNW04NzY3LHBtaWMtYnVjazQtZHZzLXZvbHRhZ2UgPSA8MTIwMDAwMD47CisJCXM1bTg3NjcscG1pYy1idWNrLWR2cy1ncGlvcyA9IDwmZ3BkMSAwIEdQSU9fQUNUSVZFX0hJR0g+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdwZDEgMSBHUElPX0FDVElWRV9ISUdIPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZncGQxIDIgR1BJT19BQ1RJVkVfSElHSD47CisJCXM1bTg3NjcscG1pYy1idWNrLWRzLWdwaW9zID0gPCZncHgyIDMgR1BJT19BQ1RJVkVfSElHSD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZncHgyIDQgR1BJT19BQ1RJVkVfSElHSD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZncHgyIDUgR1BJT19BQ1RJVkVfSElHSD47CisKKwkJcmVndWxhdG9ycyB7CisJCQlsZG8xX3JlZzogTERPMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0FMSVZFXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzJfcmVnOiBMRE8yIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMjhJT19EUF8xLjM1ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvM19yZWc6IExETzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9DT01NT04xXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzRfcmVnOiBMRE80IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfSU9QRVJJXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzVfcmVnOiBMRE81IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfRVhUXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzZfcmVnOiBMRE82IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfTVBMTF8xLjFWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG83X3JlZzogTERPNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX1hQTExfMS4xViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvOF9yZWc6IExETzggeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9DT01NT04yXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzlfcmVnOiBMRE85IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMzNPTl8zLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMTBfcmVnOiBMRE8xMCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0NPTU1PTjNfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMTFfcmVnOiBMRE8xMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0FCQjJfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMTJfcmVnOiBMRE8xMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX1VTQl8zLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xM19yZWc6IExETzEzIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERRX0MyQ19XXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzE0X3JlZzogTERPMTQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERDE4X0FCQjBfM18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xNV9yZWc6IExETzE1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWREQxMF9DT01NT040XzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzE2X3JlZzogTERPMTYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERDE4X0hTSUNfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMTdfcmVnOiBMRE8xNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREUV9NTUMyXzNfMi44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMThfcmVnOiBMRE8xOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREXzMzT05fMi44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzIyX3JlZzogTERPMjIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVYVF8zM19PRkYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8yM19yZWc6IExETzIzIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJFWFRfMjhfT0ZGIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMjVfcmVnOiBMRE8yNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUFZERF9MRE8yNSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzI2X3JlZzogTERPMjYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVYVF8xOF9PRkYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlidWNrMV9yZWc6IEJVQ0sxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbWlmIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2syX3JlZzogQlVDSzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9hcm0iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDkxMjUwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazNfcmVnOiBCVUNLMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2ludCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlidWNrNF9yZWc6IEJVQ0s0IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfZzNkIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlidWNrNV9yZWc6IEJVQ0s1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfTUVNXzEuMzVWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTUwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2s3X3JlZzogQlVDSzcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlBWRERfQlVDSzciOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2s4X3JlZzogQlVDSzggeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlBWRERfQlVDSzgiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2s5X3JlZzogQlVDSzkgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF8zM19PRkZfRVhUMSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlvcF9tb2RlID0gPDE+OwogCQkJfTsKIAkJfTsKIAl9OworfTsKIAotCXVzYl9odWJfYnVzIHsKLQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OworJmkyY18yIHsKKwlzdGF0dXMgPSAib2theSI7CiAKLQkJLy8gU01TQyBVU0IzNTAzIGNvbm5lY3RlZCBpbiBoYXJkd2FyZSBvbmx5IG1vZGUgYXMgYSBQSFkKLQkJdXNiX2h1YjogdXNiX2h1YiB7Ci0JCQljb21wYXRpYmxlID0gInNtc2MsdXNiMzUwM2EiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDUwPjsKIAotCQkJcmVzZXQtZ3Bpb3MgPSA8JmdweDMgNSAxPjsKLQkJCWNvbm5lY3QtZ3Bpb3MgPSA8JmdwZDEgNyAxPjsKLQkJfTsKKwloZG1pZGRjQDUwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtaGRtaWRkYyI7CisJCXJlZyA9IDwweDUwPjsKIAl9OwogfTsKKworJmkyY18zIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTE4MTFhQDFhIHsKKwkJY29tcGF0aWJsZSA9ICJ3bGYsd20xODExIjsKKwkJcmVnID0gPDB4MWE+OworCisJCUFWREQyLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlDUFZERC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJREJWREQxLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlEQlZERDItc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCURCVkREMy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJTERPMVZERC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJU1BLVkREMS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJU1BLVkREMi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKworCQl3bGYsbGRvMWVuYSA9IDwmZ3BiMCAwIEdQSU9fQUNUSVZFX0hJR0g+OworCQl3bGYsbGRvMmVuYSA9IDwmZ3BiMCAxIEdQSU9fQUNUSVZFX0hJR0g+OworCX07Cit9OworCismaTJjXzggeworCXN0YXR1cyA9ICJva2F5IjsKKworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDM4PjsKKworCWhkbWlwaHlAMzggeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1oZG1pcGh5IjsKKwkJcmVnID0gPDB4Mzg+OworCX07Cit9OworCismaTJjXzkgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NDAwMDA+OworCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHgzOD47CisKKwlzYXRhX3BoeV9pMmM6c2F0YS1waHlAMzggeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjIjsKKwkJcmVnID0gPDB4Mzg+OworCX07Cit9OworCismaTJzMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1mYyB7CisJc2Ftc3VuZyxtZmMtciA9IDwweDQzMDAwMDAwIDB4ODAwMDAwPjsKKwlzYW1zdW5nLG1mYy1sID0gPDB4NTEwMDAwMDAgMHg4MDAwMDA+OworfTsKKworJm1tY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCWJyb2tlbi1jZDsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OworCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47CisJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKKwl2bW1jLXN1cHBseSA9IDwmbW1jX3JlZz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9jbGsgJnNkMF9jbWQgJnNkMF9idXM0ICZzZDBfYnVzOD47CisJYnVzLXdpZHRoID0gPDg+OworCWNhcC1tbWMtaGlnaHNwZWVkOworfTsKKworJm1tY18yIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXZtbWMtc3VwcGx5ID0gPCZtbWNfcmVnPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QyX2NsayAmc2QyX2NtZCAmc2QyX2NkICZzZDJfYnVzND47CisJYnVzLXdpZHRoID0gPDQ+OworCWRpc2FibGUtd3A7CisJY2FwLXNkLWhpZ2hzcGVlZDsKK307CisKKyZydGMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzYXRhIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2F0YV9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGV4eW5vcy1zYXRhcGh5LWkyYy1waGFuZGxlID0gPCZzYXRhX3BoeV9pMmM+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtc21kazUyNTAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbWRrNTI1MC5kdHMKaW5kZXggNmEwZjRjMC4uYmMyN2NjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbWRrNTI1MC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbWRrNTI1MC5kdHMKQEAgLTcsOSArNywxMSBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCisgKi8KIAogL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CiAjaW5jbHVkZSAiZXh5bm9zNTI1MC5kdHNpIgogCiAvIHsKQEAgLTI3LDE2NSArMjksNiBAQAogCQlib290YXJncyA9ICJyb290PS9kZXYvcmFtMCBydyByYW1kaXNrPTgxOTIgaW5pdHJkPTB4NDEwMDAwMDAsOE0gY29uc29sZT10dHlTQUMyLDExNTIwMCBpbml0PS9saW51eHJjIjsKIAl9OwogCi0JcnRjQDEwMUUwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07Ci0KLQlpMmNAMTJDNjAwMDAgewotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDIwMDAwPjsKLQkJc3RhdHVzID0gIm9rYXkiOwotCi0JCWVlcHJvbUA1MCB7Ci0JCQljb21wYXRpYmxlID0gInNhbXN1bmcsczUyNGFkMHhkMSI7Ci0JCQlyZWcgPSA8MHg1MD47Ci0JCX07Ci0KLQkJbWF4Nzc2ODZAMDkgewotCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY4NiI7Ci0JCQlyZWcgPSA8MHgwOT47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgzPjsKLQkJCWludGVycnVwdHMgPSA8MiAwPjsKLQotCQkJdm9sdGFnZS1yZWd1bGF0b3JzIHsKLQkJCQlsZG8xX3JlZzogTERPMSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjBWX0xET19PVVQxIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCX07Ci0KLQkJCQlsZG8yX3JlZzogTERPMiB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjJWX0xET19PVVQyIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCX07Ci0KLQkJCQlsZG8zX3JlZzogTERPMyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQzIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCX07Ci0KLQkJCQlsZG80X3JlZzogTERPNCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAyLjhWX0xET19PVVQ0IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OwotCQkJCX07Ci0KLQkJCQlsZG81X3JlZzogTERPNSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQ1IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCX07Ci0KLQkJCQlsZG82X3JlZzogTERPNiB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjFWX0xET19PVVQ2IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCX07Ci0KLQkJCQlsZG83X3JlZzogTERPNyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjFWX0xET19PVVQ3IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCX07Ci0KLQkJCQlsZG84X3JlZzogTERPOCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjBWX0xET19PVVQ4IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OwotCQkJCX07Ci0KLQkJCQlsZG8xMF9yZWc6IExETzEwIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDEwIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCX07Ci0KLQkJCQlsZG8xMV9yZWc6IExETzExIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDExIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCX07Ci0KLQkJCQlsZG8xMl9yZWc6IExETzEyIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDMuMFZfTERPX09VVDEyIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OwotCQkJCX07Ci0KLQkJCQlsZG8xM19yZWc6IExETzEzIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDEzIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCX07Ci0KLQkJCQlsZG8xNF9yZWc6IExETzE0IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDE0IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCX07Ci0KLQkJCQlsZG8xNV9yZWc6IExETzE1IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDE1IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OwotCQkJCX07Ci0KLQkJCQlsZG8xNl9yZWc6IExETzE2IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDE2IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCX07Ci0KLQkJCQlidWNrMV9yZWc6IEJVQ0sxIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX21pZiI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDk1MDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQl9OwotCi0JCQkJYnVjazJfcmVnOiBCVUNLMiB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9hcm0iOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJfTsKLQotCQkJCWJ1Y2szX3JlZzogQlVDSzMgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfaW50IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCX07Ci0KLQkJCQlidWNrNF9yZWc6IEJVQ0s0IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2czZCI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQl9OwotCi0JCQkJYnVjazVfcmVnOiBCVUNLNSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0JVQ0tfT1VUNSI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJfTsKLQkJCX07Ci0JCX07Ci0JfTsKLQogCXZkZDogZml4ZWQtcmVndWxhdG9yQDAgewogCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CiAJCXJlZ3VsYXRvci1uYW1lID0gInZkZC1zdXBwbHkiOwpAQCAtMjEwLDE0NiArNTMsNiBAQAogCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCX07CiAKLQlpMmNAMTJDNzAwMDAgewotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDIwMDAwPjsKLQkJc3RhdHVzID0gIm9rYXkiOwotCi0JCWVlcHJvbUA1MSB7Ci0JCQljb21wYXRpYmxlID0gInNhbXN1bmcsczUyNGFkMHhkMSI7Ci0JCQlyZWcgPSA8MHg1MT47Ci0JCX07Ci0KLQkJd204OTk0OiB3bTg5OTRAMWEgewotCQkJY29tcGF0aWJsZSA9ICJ3bGYsd204OTk0IjsKLQkJCXJlZyA9IDwweDFhPjsKLQotCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0KLQkJCWNsb2NrcyA9IDwmY29kZWNfbWNsaz47Ci0JCQljbG9jay1uYW1lcyA9ICJNQ0xLMSI7Ci0KLQkJCUFWREQyLXN1cHBseSA9IDwmdmRkPjsKLQkJCUNQVkRELXN1cHBseSA9IDwmdmRkPjsKLQkJCURCVkRELXN1cHBseSA9IDwmZGJ2ZGQ+OwotCQkJU1BLVkREMS1zdXBwbHkgPSA8JnNwa3ZkZD47Ci0JCQlTUEtWREQyLXN1cHBseSA9IDwmc3BrdmRkPjsKLQkJfTsKLQl9OwotCi0JaTJjQDEyMUQwMDAwIHsKLQkJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47Ci0JCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw0MDAwMD47Ci0JCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHgzOD47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQlzYXRhX3BoeV9pMmM6c2F0YS1waHlAMzggewotCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vcy1zYXRhcGh5LWkyYyI7Ci0JCQlyZWcgPSA8MHgzOD47Ci0JCX07Ci0JfTsKLQotCWkyY0AxMkM4MDAwMCB7Ci0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NjYwMDA+OwotCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJaGRtaWRkY0A1MCB7Ci0JCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1oZG1pZGRjIjsKLQkJCXJlZyA9IDwweDUwPjsKLQkJfTsKLQl9OwotCi0JaTJjQDEyQ0UwMDAwIHsKLQkJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47Ci0JCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQloZG1pcGh5QDM4IHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyLWhkbWlwaHkiOwotCQkJcmVnID0gPDB4Mzg+OwotCQl9OwotCX07Ci0KLQlzYXRhQDEyMkYwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07Ci0KLQlzYXRhLXBoeUAxMjE3MDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQkJc2Ftc3VuZyxleHlub3Mtc2F0YXBoeS1pMmMtcGhhbmRsZSA9IDwmc2F0YV9waHlfaTJjPjsKLQl9OwotCi0JbW1jQDEyMjAwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQludW0tc2xvdHMgPSA8MT47Ci0JCWJyb2tlbi1jZDsKLQkJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47Ci0JCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47Ci0JCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47Ci0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmc2QwX2NsayAmc2QwX2NtZCAmc2QwX2J1czQgJnNkMF9idXM4PjsKLQkJYnVzLXdpZHRoID0gPDg+OwotCQljYXAtbW1jLWhpZ2hzcGVlZDsKLQl9OwotCi0JbW1jQDEyMjIwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQludW0tc2xvdHMgPSA8MT47Ci0JCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47Ci0JCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OwotCQlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwyIDM+OwotCQlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OwotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JnNkMl9jbGsgJnNkMl9jbWQgJnNkMl9jZCAmc2QyX2J1czQ+OwotCQlidXMtd2lkdGggPSA8ND47Ci0JCWRpc2FibGUtd3A7Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7Ci0JfTsKLQotCXNwaV8xOiBzcGlAMTJkMzAwMDAgewotCQljcy1ncGlvcyA9IDwmZ3BhMiA1IDA+OwotCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJdzI1cTgwYndAMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJ3MjV4ODAiOwotCQkJcmVnID0gPDA+OwotCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTAwMDAwMD47Ci0KLQkJCWNvbnRyb2xsZXItZGF0YSB7Ci0JCQkJc2Ftc3VuZyxzcGktZmVlZGJhY2stZGVsYXkgPSA8MD47Ci0JCQl9OwotCi0JCQlwYXJ0aXRpb25AMCB7Ci0JCQkJbGFiZWwgPSAiVS1Cb290IjsKLQkJCQlyZWcgPSA8MHgwIDB4NDAwMDA+OwotCQkJCXJlYWQtb25seTsKLQkJCX07Ci0KLQkJCXBhcnRpdGlvbkA0MDAwMCB7Ci0JCQkJbGFiZWwgPSAiS2VybmVsIjsKLQkJCQlyZWcgPSA8MHg0MDAwMCAweGMwMDAwPjsKLQkJCX07Ci0JCX07Ci0JfTsKLQotCWhkbWkgewotCQlocGQtZ3BpbyA9IDwmZ3B4MyA3IDA+OwotCX07Ci0KLQljb2RlY0AxMTAwMDAwMCB7Ci0JCXNhbXN1bmcsbWZjLXIgPSA8MHg0MzAwMDAwMCAweDgwMDAwMD47Ci0JCXNhbXN1bmcsbWZjLWwgPSA8MHg1MTAwMDAwMCAweDgwMDAwMD47Ci0JfTsKLQotCWkyczA6IGkyc0AwMzgzMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OwotCiAJc291bmQgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsc21kay13bTg5OTQiOwogCkBAIC0zNTcsNDIgKzYwLDYgQEAKIAkJc2Ftc3VuZyxhdWRpby1jb2RlYyA9IDwmd204OTk0PjsKIAl9OwogCi0JdXNiQDEyMTEwMDAwIHsKLQkJc2Ftc3VuZyx2YnVzLWdwaW8gPSA8JmdweDIgNiAwPjsKLQl9OwotCi0JZHAtY29udHJvbGxlckAxNDVCMDAwMCB7Ci0JCXNhbXN1bmcsY29sb3Itc3BhY2UgPSA8MD47Ci0JCXNhbXN1bmcsZHluYW1pYy1yYW5nZSA9IDwwPjsKLQkJc2Ftc3VuZyx5Y2Jjci1jb2VmZiA9IDwwPjsKLQkJc2Ftc3VuZyxjb2xvci1kZXB0aCA9IDwxPjsKLQkJc2Ftc3VuZyxsaW5rLXJhdGUgPSA8MHgwYT47Ci0JCXNhbXN1bmcsbGFuZS1jb3VudCA9IDw0PjsKLQotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JmRwX2hwZD47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OwotCi0JZmltZEAxNDQwMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQkJZGlzcGxheS10aW1pbmdzIHsKLQkJCW5hdGl2ZS1tb2RlID0gPCZ0aW1pbmcwPjsKLQkJCXRpbWluZzA6IHRpbWluZ0AwIHsKLQkJCQkvKiAxMjgweDgwMCAqLwotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMD47Ci0JCQkJaGFjdGl2ZSA9IDwxMjgwPjsKLQkJCQl2YWN0aXZlID0gPDgwMD47Ci0JCQkJaGZyb250LXBvcmNoID0gPDQ+OwotCQkJCWhiYWNrLXBvcmNoID0gPDQ+OwotCQkJCWhzeW5jLWxlbiA9IDw0PjsKLQkJCQl2YmFjay1wb3JjaCA9IDw0PjsKLQkJCQl2ZnJvbnQtcG9yY2ggPSA8ND47Ci0JCQkJdnN5bmMtbGVuID0gPDQ+OwotCQkJfTsKLQkJfTsKLQl9OwotCiAJZml4ZWQtcmF0ZS1jbG9ja3MgewogCQl4eHRpIHsKIAkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxjbG9jay14eHRpIjsKQEAgLTQwNiwzICs3MywzNDAgQEAKIAkJfTsKIAl9OwogfTsKKworJmRwIHsKKwlzYW1zdW5nLGNvbG9yLXNwYWNlID0gPDA+OworCXNhbXN1bmcsZHluYW1pYy1yYW5nZSA9IDwwPjsKKwlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OworCXNhbXN1bmcsY29sb3ItZGVwdGggPSA8MT47CisJc2Ftc3VuZyxsaW5rLXJhdGUgPSA8MHgwYT47CisJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDQ+OworCisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRwX2hwZD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmVoY2kgeworCXNhbXN1bmcsdmJ1cy1ncGlvID0gPCZncHgyIDYgR1BJT19BQ1RJVkVfSElHSD47Cit9OworCismZmltZCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZGlzcGxheS10aW1pbmdzIHsKKwkJbmF0aXZlLW1vZGUgPSA8JnRpbWluZzA+OworCisJCXRpbWluZzA6IHRpbWluZ0AwIHsKKwkJCS8qIDEyODB4ODAwICovCisJCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDA+OworCQkJaGFjdGl2ZSA9IDwxMjgwPjsKKwkJCXZhY3RpdmUgPSA8ODAwPjsKKwkJCWhmcm9udC1wb3JjaCA9IDw0PjsKKwkJCWhiYWNrLXBvcmNoID0gPDQ+OworCQkJaHN5bmMtbGVuID0gPDQ+OworCQkJdmJhY2stcG9yY2ggPSA8ND47CisJCQl2ZnJvbnQtcG9yY2ggPSA8ND47CisJCQl2c3luYy1sZW4gPSA8ND47CisJCX07CisJfTsKK307CisKKyZoZG1pIHsKKwlocGQtZ3BpbyA9IDwmZ3B4MyA3IEdQSU9fQUNUSVZFX0hJR0g+OworfTsKKworJmkyY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDIwMDAwPjsKKworCWVlcHJvbUA1MCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNTI0YWQweGQxIjsKKwkJcmVnID0gPDB4NTA+OworCX07CisKKwltYXg3NzY4NkAwOSB7CisJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc2ODYiOworCQlyZWcgPSA8MHgwOT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDM+OworCQlpbnRlcnJ1cHRzID0gPDIgSVJRX1RZUEVfTk9ORT47CisKKwkJdm9sdGFnZS1yZWd1bGF0b3JzIHsKKwkJCWxkbzFfcmVnOiBMRE8xIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4wVl9MRE9fT1VUMSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzJfcmVnOiBMRE8yIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4yVl9MRE9fT1VUMiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzNfcmVnOiBMRE8zIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzRfcmVnOiBMRE80IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMi44Vl9MRE9fT1VUNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQl9OworCisJCQlsZG81X3JlZzogTERPNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJbGRvNl9yZWc6IExETzYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjFWX0xET19PVVQ2IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvN19yZWc6IExETzcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjFWX0xET19PVVQ3IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvOF9yZWc6IExETzggeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjBWX0xET19PVVQ4IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzEwX3JlZzogTERPMTAgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxMCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8xMV9yZWc6IExETzExIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTEiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJbGRvMTJfcmVnOiBMRE8xMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDMuMFZfTERPX09VVDEyIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzEzX3JlZzogTERPMTMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxMyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8xNF9yZWc6IExETzE0IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTQiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJbGRvMTVfcmVnOiBMRE8xNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDE1IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzE2X3JlZzogTERPMTYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxNiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlidWNrMV9yZWc6IEJVQ0sxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbWlmIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl9OworCisJCQlidWNrMl9yZWc6IEJVQ0syIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfYXJtIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl9OworCisJCQlidWNrM19yZWc6IEJVQ0szIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfaW50IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl9OworCisJCQlidWNrNF9yZWc6IEJVQ0s0IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfZzNkIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl9OworCisJCQlidWNrNV9yZWc6IEJVQ0s1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9CVUNLX09VVDUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl9OworCQl9OworCX07Cit9OworCismaTJjXzEgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OworCisJZWVwcm9tQDUxIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1MjRhZDB4ZDEiOworCQlyZWcgPSA8MHg1MT47CisJfTsKKworCXdtODk5NDogd204OTk0QDFhIHsKKwkJY29tcGF0aWJsZSA9ICJ3bGYsd204OTk0IjsKKwkJcmVnID0gPDB4MWE+OworCisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJY2xvY2tzID0gPCZjb2RlY19tY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAiTUNMSzEiOworCisJCUFWREQyLXN1cHBseSA9IDwmdmRkPjsKKwkJQ1BWREQtc3VwcGx5ID0gPCZ2ZGQ+OworCQlEQlZERC1zdXBwbHkgPSA8JmRidmRkPjsKKwkJU1BLVkREMS1zdXBwbHkgPSA8JnNwa3ZkZD47CisJCVNQS1ZERDItc3VwcGx5ID0gPCZzcGt2ZGQ+OworCX07Cit9OworCismaTJjXzIgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NjYwMDA+OworCisJaGRtaWRkY0A1MCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWhkbWlkZGMiOworCQlyZWcgPSA8MHg1MD47CisJfTsKK307CisKKyZpMmNfOCB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisKKwloZG1pcGh5QDM4IHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItaGRtaXBoeSI7CisJCXJlZyA9IDwweDM4PjsKKwl9OworfTsKKworJmkyY185IHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDQwMDAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4Mzg+OworCisJc2F0YV9waHlfaTJjOiBzYXRhLXBoeUAzOCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3Mtc2F0YXBoeS1pMmMiOworCQlyZWcgPSA8MHgzOD47CisJfTsKK307CisKKyZpMnMwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWZjIHsKKwlzYW1zdW5nLG1mYy1yID0gPDB4NDMwMDAwMDAgMHg4MDAwMDA+OworCXNhbXN1bmcsbWZjLWwgPSA8MHg1MTAwMDAwMCAweDgwMDAwMD47Cit9OworCismbW1jXzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJYnJva2VuLWNkOworCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDBfY2xrICZzZDBfY21kICZzZDBfYnVzNCAmc2QwX2J1czg+OworCWJ1cy13aWR0aCA9IDw4PjsKKwljYXAtbW1jLWhpZ2hzcGVlZDsKK307CisKKyZtbWNfMiB7CisJc3RhdHVzID0gIm9rYXkiOworCW51bS1zbG90cyA9IDwxPjsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OworCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47CisJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QyX2NsayAmc2QyX2NtZCAmc2QyX2NkICZzZDJfYnVzND47CisJYnVzLXdpZHRoID0gPDQ+OworCWRpc2FibGUtd3A7CisJY2FwLXNkLWhpZ2hzcGVlZDsKK307CisKKyZydGMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzYXRhIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2F0YV9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGV4eW5vcy1zYXRhcGh5LWkyYy1waGFuZGxlID0gPCZzYXRhX3BoeV9pMmM+OworfTsKKworJnNwaV8xIHsKKwlzdGF0dXMgPSAib2theSI7CisJY3MtZ3Bpb3MgPSA8JmdwYTIgNSBHUElPX0FDVElWRV9ISUdIPjsKKworCXcyNXE4MGJ3QDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAidzI1eDgwIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwxMDAwMDAwPjsKKworCQljb250cm9sbGVyLWRhdGEgeworCQkJc2Ftc3VuZyxzcGktZmVlZGJhY2stZGVsYXkgPSA8MD47CisJCX07CisKKwkJcGFydGl0aW9uQDAgeworCQkJbGFiZWwgPSAiVS1Cb290IjsKKwkJCXJlZyA9IDwweDAgMHg0MDAwMD47CisJCQlyZWFkLW9ubHk7CisJCX07CisKKwkJcGFydGl0aW9uQDQwMDAwIHsKKwkJCWxhYmVsID0gIktlcm5lbCI7CisJCQlyZWcgPSA8MHg0MDAwMCAweGMwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtc25vdy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNub3cuZHRzCmluZGV4IGU1MWZjZWYuLmVmZmFmMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtc25vdy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbm93LmR0cwpAQCAtNiwxMCArNiwxMyBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCisgKi8KIAogL2R0cy12MS87CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svbWF4aW0sbWF4Nzc2ODYuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgogI2luY2x1ZGUgImV4eW5vczUyNTAuZHRzaSIKIAogLyB7CkBAIC0yNSw3NiArMjgsNyBAQAogCX07CiAKIAljaG9zZW4gewotCX07Ci0KLQlydGNAMTAxRTAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQotCXBpbmN0cmxAMTE0MDAwMDAgewotCQllY19pcnE6IGVjLWlycSB7Ci0JCQlzYW1zdW5nLHBpbnMgPSAiZ3B4MS02IjsKLQkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwotCQl9OwotCi0JCXNkM19jbGs6IHNkMy1jbGsgewotCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwotCQl9OwotCi0JCXNkM19jbWQ6IHNkMy1jbWQgewotCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OwotCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwotCQl9OwotCi0JCXNkM19idXM0OiBzZDMtYnVzLXdpZHRoNCB7Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJbWF4OTgwOTVfZW46IG1heDk4MDk1LWVuIHsKLQkJCXNhbXN1bmcscGlucyA9ICJncHgxLTciOwotCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJdHBzNjUwOTBfaXJxOiB0cHM2NTA5MC1pcnEgewotCQkJc2Ftc3VuZyxwaW5zID0gImdweDItNiI7Ci0JCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKLQkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKLQkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKLQkJfTsKLQotCQl1c2IzX3ZidXNfZW46IHVzYjMtdmJ1cy1lbiB7Ci0JCQlzYW1zdW5nLHBpbnMgPSAiZ3B4Mi03IjsKLQkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OwotCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwotCQl9OwotCi0JCWhkbWlfaHBkX2lycTogaGRtaS1ocGQtaXJxIHsKLQkJCXNhbXN1bmcscGlucyA9ICJncHgzLTciOwotCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8MT47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0JfTsKLQotCXBpbmN0cmxAMTM0MDAwMDAgewotCQlhcmJfdGhlaXJfY2xhaW06IGFyYi10aGVpci1jbGFpbSB7Ci0JCQlzYW1zdW5nLHBpbnMgPSAiZ3BlMC00IjsKLQkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OwotCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwotCQl9OwotCi0JCWFyYl9vdXJfY2xhaW06IGFyYi1vdXItY2xhaW0gewotCQkJc2Ftc3VuZyxwaW5zID0gImdwZjAtMyI7Ci0JCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwxPjsKLQkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKLQkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKLQkJfTsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHkxIjsKIAl9OwogCiAJZ3Bpby1rZXlzIHsKQEAgLTEwMiwxNCArMzYsMTQgQEAKIAogCQlwb3dlciB7CiAJCQlsYWJlbCA9ICJQb3dlciI7Ci0JCQlncGlvcyA9IDwmZ3B4MSAzIDE+OwotCQkJbGludXgsY29kZSA9IDwxMTY+OyAvKiBLRVlfUE9XRVIgKi8KKwkJCWdwaW9zID0gPCZncHgxIDMgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1BPV0VSPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQlsaWQtc3dpdGNoIHsKIAkJCWxhYmVsID0gIkxpZCI7Ci0JCQlncGlvcyA9IDwmZ3B4MyA1IDE+OworCQkJZ3Bpb3MgPSA8JmdweDMgNSBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsaW5wdXQtdHlwZSA9IDw1PjsgLyogRVZfU1cgKi8KIAkJCWxpbnV4LGNvZGUgPSA8MD47IC8qIFNXX0xJRCAqLwogCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MT47CkBAIC0xMzAsOCArNjQsOCBAQAogCiAJCWkyYy1wYXJlbnQgPSA8JnsvaTJjQDEyQ0EwMDAwfT47CiAKLQkJb3VyLWNsYWltLWdwaW8gPSA8JmdwZjAgMyAxPjsKLQkJdGhlaXItY2xhaW0tZ3Bpb3MgPSA8JmdwZTAgNCAxPjsKKwkJb3VyLWNsYWltLWdwaW8gPSA8JmdwZjAgMyBHUElPX0FDVElWRV9MT1c+OworCQl0aGVpci1jbGFpbS1ncGlvcyA9IDwmZ3BlMCA0IEdQSU9fQUNUSVZFX0xPVz47CiAJCXNsZXctZGVsYXktdXMgPSA8MTA+OwogCQl3YWl0LXJldHJ5LXVzID0gPDMwMDA+OwogCQl3YWl0LWZyZWUtdXMgPSA8NTAwMDA+OwpAQCAtMTU0LDcgKzg4LDcgQEAKIAkJCWNyb3NfZWM6IGVtYmVkZGVkLWNvbnRyb2xsZXIgewogCQkJCWNvbXBhdGlibGUgPSAiZ29vZ2xlLGNyb3MtZWMtaTJjIjsKIAkJCQlyZWcgPSA8MHgxZT47Ci0JCQkJaW50ZXJydXB0cyA9IDw2IDA+OworCQkJCWludGVycnVwdHMgPSA8NiBJUlFfVFlQRV9OT05FPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgxPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmZWNfaXJxPjsKQEAgLTI0MSwxMyArMTc1LDYgQEAKIAl9OwogCiAJaTJjQDEyQ0QwMDAwIHsKLQkJbWF4OTgwOTU6IGNvZGVjQDExIHsKLQkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4OTgwOTUiOwotCQkJcmVnID0gPDB4MTE+OwotCQkJcGluY3RybC0wID0gPCZtYXg5ODA5NV9lbj47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQl9OwotCiAJCXB0bjM0NjA6IGx2ZHMtYnJpZGdlQDIwIHsKIAkJCWNvbXBhdGlibGUgPSAibnhwLHB0bjM0NjAiOwogCQkJcmVnID0gPDB4MjA+OwpAQCAtMjU4LDEwICsxODUsNiBAQAogCQl9OwogCX07CiAKLQlpMnMwOiBpMnNAMDM4MzAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQogCXNvdW5kIHsKIAkJY29tcGF0aWJsZSA9ICJnb29nbGUsc25vdy1hdWRpby1tYXg5ODA5NSI7CiAKQEAgLTI3NSwyMCArMTk4LDEyIEBACiAJCXJlZ3VsYXRvci1uYW1lID0gIlA1LjBWX1VTQjNDT04iOwogCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKIAkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47Ci0JCWdwaW8gPSA8JmdweDIgNyAwPjsKKwkJZ3BpbyA9IDwmZ3B4MiA3IEdQSU9fQUNUSVZFX0hJR0g+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JnVzYjNfdmJ1c19lbj47CiAJCWVuYWJsZS1hY3RpdmUtaGlnaDsKIAl9OwogCi0JcGh5QDEyMTAwMDAwIHsKLQkJdmJ1cy1zdXBwbHkgPSA8JnVzYjNfdmJ1c19yZWc+OwotCX07Ci0KLQl1c2JAMTIxMTAwMDAgewotCQlzYW1zdW5nLHZidXMtZ3BpbyA9IDwmZ3B4MSAxIDA+OwotCX07Ci0KIAlmaXhlZC1yYXRlLWNsb2NrcyB7CiAJCXh4dGkgewogCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGNsb2NrLXh4dGkiOwpAQCAtMjk2LDE4ICsyMTEsNiBAQAogCQl9OwogCX07CiAKLQloZG1pIHsKLQkJaHBkLWdwaW8gPSA8JmdweDMgNyAwPjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZoZG1pX2hwZF9pcnE+OwotCQlwaHkgPSA8JmhkbWlwaHk+OwotCQlkZGMgPSA8JmkyY18yPjsKLQkJaGRtaS1lbi1zdXBwbHkgPSA8JnRwczY1MDkwX2ZldDc+OwotCQl2ZGQtc3VwcGx5ID0gPCZsZG84X3JlZz47Ci0JCXZkZF9vc2Mtc3VwcGx5ID0gPCZsZG8xMF9yZWc+OwotCQl2ZGRfcGxsLXN1cHBseSA9IDwmbGRvOF9yZWc+OwotCX07Ci0KIAliYWNrbGlnaHQ6IGJhY2tsaWdodCB7CiAJCWNvbXBhdGlibGUgPSAicHdtLWJhY2tsaWdodCI7CiAJCXB3bXMgPSA8JnB3bSAwIDEwMDAwMDAgMD47CkBAIC0zMTksMzAgKzIyMiw0NiBAQAogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCX07CiAKLQlmaW1kQDE0NDAwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlzYW1zdW5nLGludmVydC12Y2xrOwotCX07Ci0KIAlwYW5lbDogcGFuZWwgewogCQljb21wYXRpYmxlID0gImF1byxiMTE2eHcwMyI7CiAJCXBvd2VyLXN1cHBseSA9IDwmZmV0Nj47CiAJCWJhY2tsaWdodCA9IDwmYmFja2xpZ2h0PjsKIAl9OworfTsKIAotCWRwLWNvbnRyb2xsZXJAMTQ1QjAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmZHBfaHBkPjsKLQkJc2Ftc3VuZyxjb2xvci1zcGFjZSA9IDwwPjsKLQkJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OwotCQlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OwotCQlzYW1zdW5nLGNvbG9yLWRlcHRoID0gPDE+OwotCQlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKLQkJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDI+OwotCQlzYW1zdW5nLGhwZC1ncGlvID0gPCZncHgwIDcgMD47Ci0JCWJyaWRnZSA9IDwmcHRuMzQ2MD47Ci0JfTsKKyZkcCB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZkcF9ocGQ+OworCXNhbXN1bmcsY29sb3Itc3BhY2UgPSA8MD47CisJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OworCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47CisJc2Ftc3VuZyxjb2xvci1kZXB0aCA9IDwxPjsKKwlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKKwlzYW1zdW5nLGxhbmUtY291bnQgPSA8Mj47CisJc2Ftc3VuZyxocGQtZ3BpbyA9IDwmZ3B4MCA3IEdQSU9fQUNUSVZFX0hJR0g+OworCWJyaWRnZSA9IDwmcHRuMzQ2MD47Cit9OworCismZWhjaSB7CisJc2Ftc3VuZyx2YnVzLWdwaW8gPSA8JmdweDEgMSBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZmaW1kIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpbnZlcnQtdmNsazsKK307CisKKyZoZG1pIHsKKwlocGQtZ3BpbyA9IDwmZ3B4MyA3IEdQSU9fQUNUSVZFX0hJR0g+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZoZG1pX2hwZF9pcnE+OworCXBoeSA9IDwmaGRtaXBoeT47CisJZGRjID0gPCZpMmNfMj47CisJaGRtaS1lbi1zdXBwbHkgPSA8JnRwczY1MDkwX2ZldDc+OworCXZkZC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKKwl2ZGRfb3NjLXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKKwl2ZGRfcGxsLXN1cHBseSA9IDwmbGRvOF9yZWc+OwogfTsKIAogJmkyY18wIHsKQEAgLTM1MCwxMCArMjY5LDEwIEBACiAJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CiAJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDM3ODAwMD47CiAKLQltYXg3NzY4NkAwOSB7CisJbWF4Nzc2ODY6IG1heDc3Njg2QDA5IHsKIAkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY4NiI7CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDM+OwotCQlpbnRlcnJ1cHRzID0gPDIgMD47CisJCWludGVycnVwdHMgPSA8MiBJUlFfVFlQRV9OT05FPjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZtYXg3NzY4Nl9pcnE+OwogCQl3YWtldXAtc291cmNlOwpAQCAtNTAzLDcgKzQyMiw3IEBACiAJdHJhY2twYWQgewogCQlyZWcgPSA8MHg2Nz47CiAJCWNvbXBhdGlibGUgPSAiY3lwcmVzcyxjeWFwYSI7Ci0JCWludGVycnVwdHMgPSA8MiAwPjsKKwkJaW50ZXJydXB0cyA9IDwyIElSUV9UWVBFX05PTkU+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgxPjsKIAkJd2FrZXVwLXNvdXJjZTsKIAl9OwpAQCAtNTUwLDYgKzQ2OSwxMyBAQAogCXN0YXR1cyA9ICJva2F5IjsKIAlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKIAlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NjYwMDA+OworCisJbWF4OTgwOTU6IGNvZGVjQDExIHsKKwkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg5ODA5NSI7CisJCXJlZyA9IDwweDExPjsKKwkJcGluY3RybC0wID0gPCZtYXg5ODA5NV9lbj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJfTsKIH07CiAKICZpMmNfOCB7CkBAIC01NjMsNiArNDg5LDEwIEBACiAJfTsKIH07CiAKKyZpMnMwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmbW1jXzAgewogCXN0YXR1cyA9ICJva2F5IjsKIAludW0tc2xvdHMgPSA8MT47CkBAIC01ODcsNyArNTE3LDcgQEAKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmc2QyX2NsayAmc2QyX2NtZCAmc2QyX2NkICZzZDJfYnVzND47CiAJYnVzLXdpZHRoID0gPDQ+OwotCXdwLWdwaW9zID0gPCZncGMyIDEgMD47CisJd3AtZ3Bpb3MgPSA8JmdwYzIgMSBHUElPX0FDVElWRV9ISUdIPjsKIAljYXAtc2QtaGlnaHNwZWVkOwogfTsKIApAQCAtNjEwLDEyICs1NDAsODIgQEAKIH07CiAKICZwaW5jdHJsXzAgeworCWVjX2lycTogZWMtaXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDEtNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJbWF4OTgwOTVfZW46IG1heDk4MDk1LWVuIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDEtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdHBzNjUwOTBfaXJxOiB0cHM2NTA5MC1pcnEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4Mi02IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1c2IzX3ZidXNfZW46IHVzYjMtdmJ1cy1lbiB7CisJCXNhbXN1bmcscGlucyA9ICJncHgyLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwxPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKwogCW1heDc3Njg2X2lycTogbWF4Nzc2ODYtaXJxIHsKIAkJc2Ftc3VuZyxwaW5zID0gImdweDMtMiI7CiAJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OwogCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CiAJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKIAl9OworCisJaGRtaV9ocGRfaXJxOiBoZG1pLWhwZC1pcnEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4My03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwxPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07Cit9OworCismcGluY3RybF8xIHsKKwlhcmJfdGhlaXJfY2xhaW06IGFyYi10aGVpci1jbGFpbSB7CisJCXNhbXN1bmcscGlucyA9ICJncGUwLTQiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWFyYl9vdXJfY2xhaW06IGFyYi1vdXItY2xhaW0geworCQlzYW1zdW5nLHBpbnMgPSAiZ3BmMC0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MT47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07Cit9OworCismcnRjIHsKKwlzdGF0dXMgPSAib2theSI7CisJY2xvY2tzID0gPCZjbG9jayBDTEtfUlRDPiwgPCZtYXg3NzY4NiBNQVg3NzY4Nl9DTEtfQVA+OworCWNsb2NrLW5hbWVzID0gInJ0YyIsICJydGNfc3JjIjsKK307CisKKyZzZDNfYnVzNCB7CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworfTsKKworJnNkM19jbGsgeworCXNhbXN1bmcscGluLWRydiA9IDwwPjsKK307CisKKyZzZDNfY21kIHsKKwlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwogfTsKIAogJnNwaV8xIHsKQEAgLTYyNCw0ICs2MjQsMTIgQEAKIAludW0tY3MgPSA8MT47CiB9OwogCismdXNiZHJkX2R3YzMgeworCWRyX21vZGUgPSAiaG9zdCI7Cit9OworCismdXNiZHJkX3BoeSB7CisJdmJ1cy1zdXBwbHkgPSA8JnVzYjNfdmJ1c19yZWc+OworfTsKKwogI2luY2x1ZGUgImNyb3MtZWMta2V5Ym9hcmQuZHRzaSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtc3ByaW5nLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtc3ByaW5nLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDI3NzU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zcHJpbmcuZHRzCkBAIC0wLDAgKzEsNTY2IEBACisvKgorICogR29vZ2xlIFNwcmluZyBib2FyZCBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgR29vZ2xlLCBJbmMKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTVVNFIExJTlVYIFByb2R1Y3RzIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSAiZXh5bm9zNTI1MC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJHb29nbGUgU3ByaW5nIjsKKwljb21wYXRpYmxlID0gImdvb2dsZSxzcHJpbmciLCAic2Ftc3VuZyxleHlub3M1MjUwIiwgInNhbXN1bmcsZXh5bm9zNSI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHg0MDAwMDAwMCAweDgwMDAwMDAwPjsKKwl9OworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHkxIjsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnBvd2VyX2tleV9pcnE+LCA8JmxpZF9pcnE+OworCisJCXBvd2VyIHsKKwkJCWxhYmVsID0gIlBvd2VyIjsKKwkJCWdwaW9zID0gPCZncHgxIDMgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1BPV0VSPjsKKwkJCWdwaW8ta2V5LHdha2V1cDsKKwkJfTsKKworCQlsaWQtc3dpdGNoIHsKKwkJCWxhYmVsID0gIkxpZCI7CisJCQlncGlvcyA9IDwmZ3B4MyA1IEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxpbnB1dC10eXBlID0gPDU+OyAvKiBFVl9TVyAqLworCQkJbGludXgsY29kZSA9IDwwPjsgLyogU1dfTElEICovCisJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwxPjsKKwkJCWdwaW8ta2V5LHdha2V1cDsKKwkJfTsKKwl9OworCisJdXNiLWh1YiB7CisJCWNvbXBhdGlibGUgPSAic21zYyx1c2IzNTAzYSI7CisJCXJlc2V0LWdwaW9zID0gPCZncGUxIDAgR1BJT19BQ1RJVkVfTE9XPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZoc2ljX3Jlc2V0PjsKKwl9OworCisJZml4ZWQtcmF0ZS1jbG9ja3MgeworCQl4eHRpIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxjbG9jay14eHRpIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47CisJCX07CisJfTsKK307CisKKyZkcCB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZkcF9ocGRfZ3Bpbz47CisJc2Ftc3VuZyxjb2xvci1zcGFjZSA9IDwwPjsKKwlzYW1zdW5nLGR5bmFtaWMtcmFuZ2UgPSA8MD47CisJc2Ftc3VuZyx5Y2Jjci1jb2VmZiA9IDwwPjsKKwlzYW1zdW5nLGNvbG9yLWRlcHRoID0gPDE+OworCXNhbXN1bmcsbGluay1yYXRlID0gPDB4MGE+OworCXNhbXN1bmcsbGFuZS1jb3VudCA9IDwxPjsKKwlzYW1zdW5nLGhwZC1ncGlvID0gPCZncGMzIDAgR1BJT19BQ1RJVkVfSElHSD47Cit9OworCismZWhjaSB7CisJc2Ftc3VuZyx2YnVzLWdwaW8gPSA8JmdweDEgMSBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZmaW1kIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpbnZlcnQtdmNsazsKK307CisKKyZoZG1pIHsKKwlocGQtZ3BpbyA9IDwmZ3B4MyA3IEdQSU9fQUNUSVZFX0hJR0g+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZoZG1pX2hwZF9pcnE+OworCXBoeSA9IDwmaGRtaXBoeT47CisJZGRjID0gPCZpMmNfMj47CisJaGRtaS1lbi1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKKwl2ZGQtc3VwcGx5ID0gPCZsZG84X3JlZz47CisJdmRkX29zYy1zdXBwbHkgPSA8JmxkbzEwX3JlZz47CisJdmRkX3BsbC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKK307CisKKyZpMmNfMCB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwzNzgwMDA+OworCisJczVtODc2Ny1wbWljQDY2IHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1bTg3NjctcG1pYyI7CisJCXJlZyA9IDwweDY2PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mz47CisJCWludGVycnVwdHMgPSA8MiBJUlFfVFlQRV9OT05FPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZzNW04NzY3X2lycSAmczVtODc2N19kdnMgJnM1bTg3NjdfZHM+OworCQl3YWtldXAtc291cmNlOworCisJCXM1bTg3NjcscG1pYy1idWNrLWR2cy1ncGlvcyA9IDwmZ3BkMSAwIEdQSU9fQUNUSVZFX0xPVz4sIC8qIERWUzEgKi8KKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZncGQxIDEgR1BJT19BQ1RJVkVfTE9XPiwgLyogRFZTMiAqLworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdwZDEgMiBHUElPX0FDVElWRV9MT1c+OyAvKiBEVlMzICovCisKKwkJczVtODc2NyxwbWljLWJ1Y2stZHMtZ3Bpb3MgPSA8JmdweDIgMyBHUElPX0FDVElWRV9MT1c+LCAvKiBTRVQxICovCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZncHgyIDQgR1BJT19BQ1RJVkVfTE9XPiwgLyogU0VUMiAqLworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwmZ3B4MiA1IEdQSU9fQUNUSVZFX0xPVz47IC8qIFNFVDMgKi8KKworCQkvKgorCQkgKiBUaGUgZm9sbG93aW5nIGFycmF5cyBvZiBEVlMgdm9sdGFnZXMgYXJlIG5vdCB1c2VkLCBzaW5jZSB3ZSBhcmUKKwkJICogbm90IHVzaW5nIEdQSU9zIHRvIGNvbnRyb2wgUE1JQyBidWNrcywgYnV0IHRoZXkgbXVzdCBiZSBkZWZpbmVkCisJCSAqIHRvIHBsZWFzZSB0aGUgZHJpdmVyLgorCQkgKi8KKwkJczVtODc2NyxwbWljLWJ1Y2syLWR2cy12b2x0YWdlID0gPDEzNTAwMDA+LCA8MTMwMDAwMD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxMjUwMDAwPiwgPDEyMDAwMDA+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MTE1MDAwMD4sIDwxMTAwMDAwPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEwMDAwMDA+LCA8OTUwMDAwPjsKKworCQlzNW04NzY3LHBtaWMtYnVjazMtZHZzLXZvbHRhZ2UgPSA8MTEwMDAwMD4sIDwxMTAwMDAwPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDExMDAwMDA+LCA8MTEwMDAwMD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxMDAwMDAwPiwgPDEwMDAwMDA+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MTAwMDAwMD4sIDwxMDAwMDAwPjsKKworCQlzNW04NzY3LHBtaWMtYnVjazQtZHZzLXZvbHRhZ2UgPSA8MTIwMDAwMD4sIDwxMjAwMDAwPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEyMDAwMDA+LCA8MTIwMDAwMD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxMjAwMDAwPiwgPDEyMDAwMDA+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MTIwMDAwMD4sIDwxMjAwMDAwPjsKKworCQljbG9ja3MgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1bTg3NjctY2xrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJlbjMya2h6X2FwIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICJlbjMya2h6X2NwIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICJlbjMya2h6X2J0IjsKKwkJfTsKKworCQlyZWd1bGF0b3JzIHsKKwkJCWxkbzRfcmVnOiBMRE80IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4wVl9MRE9fT1VUNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDA+OworCQkJfTsKKworCQkJbGRvNV9yZWc6IExETzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjBWX0xET19PVVQ1IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8MD47CisJCQl9OworCisJCQlsZG82X3JlZzogTERPNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX215ZHAiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWxkbzdfcmVnOiBMRE83IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4xVl9MRE9fT1VUNyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJbGRvOF9yZWc6IExETzggeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjBWX0xET19PVVQ4IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlsZG8xMF9yZWc6IExETzEwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTAiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWxkbzExX3JlZzogTERPMTEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxMSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDA+OworCQkJfTsKKworCQkJbGRvMTJfcmVnOiBMRE8xMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDMuMFZfTERPX09VVDEyIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlsZG8xM19yZWc6IExETzEzIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTMiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwwPjsKKwkJCX07CisKKwkJCWxkbzE0X3JlZzogTERPMTQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJbGRvMTVfcmVnOiBMRE8xNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDE1IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlsZG8xNl9yZWc6IExETzE2IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWxkbzE3X3JlZzogTERPMTcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAyLjhWX0xET19PVVQxNyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDA+OworCQkJfTsKKworCQkJbGRvMjVfcmVnOiBMRE8yNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2JyaWRnZSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazFfcmVnOiBCVUNLMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX21pZiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlidWNrMl9yZWc6IEJVQ0syIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfYXJtIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWJ1Y2szX3JlZzogQlVDSzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9pbnQiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDkwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJYnVjazRfcmVnOiBCVUNLNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2czZCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJYnVjazVfcmVnOiBCVUNLNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfQlVDS19PVVQ1IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlidWNrNl9yZWc6IEJVQ0s2IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4yVl9CVUNLX09VVDYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwwPjsKKwkJCX07CisKKwkJCWJ1Y2s5X3JlZzogQlVDSzkgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF91bW1jIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZpMmNfMSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwzNzgwMDA+OworCisJdHJhY2twYWRANGIgeworCQljb21wYXRpYmxlID0gImF0bWVsLG1heHRvdWNoIjsKKwkJcmVnID0gPDB4NGI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgxPjsKKwkJaW50ZXJydXB0cyA9IDwyIElSUV9UWVBFX0VER0VfRkFMTElORz47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdHJhY2twYWRfaXJxPjsKKwkJbGludXgsZ3Bpby1rZXltYXAgPSA8S0VZX1JFU0VSVkVECisJCQkJICAgICBLRVlfUkVTRVJWRUQKKwkJCQkgICAgIEtFWV9SRVNFUlZFRAorCQkJCSAgICAgS0VZX1JFU0VSVkVECisJCQkJICAgICBLRVlfUkVTRVJWRUQKKwkJCQkgICAgIEJUTl9MRUZUPjsKKwkJd2FrZXVwLXNvdXJjZTsKKwl9OworfTsKKworLyoKKyAqIERpc2FibGVkIHB1bGx1cHMgc2luY2UgZXh0ZXJuYWwgcGFydCBoYXMgaXRzIG93biBwdWxsdXBzIGFuZAorICogZG91YmxlLXB1bGxpbmcgZ2V0cyB1cyBvdXQgb2Ygc3BlYyBpbiBzb21lIGNhc2VzLgorICovCismaTJjMl9idXMgeworCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKK307CisKKyZpMmNfMiB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisKKwloZG1pZGRjQDUwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtaGRtaWRkYyI7CisJCXJlZyA9IDwweDUwPjsKKwl9OworfTsKKworJmkyY18zIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKK307CisKKyZpMmNfNCB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisKKwljcm9zX2VjOiBlbWJlZGRlZC1jb250cm9sbGVyIHsKKwkJY29tcGF0aWJsZSA9ICJnb29nbGUsY3Jvcy1lYy1pMmMiOworCQlyZWcgPSA8MHgxZT47CisJCWludGVycnVwdHMgPSA8NiBJUlFfVFlQRV9OT05FPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4MT47CisJCXdha2V1cC1zb3VyY2U7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmZWNfaXJxPjsKKwl9OworfTsKKworJmkyY181IHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKK307CisKKyZpMmNfNyB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisKKwl0ZW1wZXJhdHVyZS1zZW5zb3JANGMgeworCQljb21wYXRpYmxlID0gImdtdCxnNzgxIjsKKwkJcmVnID0gPDB4NGM+OworCX07Cit9OworCismaTJjXzggeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8Mzc4MDAwPjsKKworCWhkbWlwaHk6IGhkbWlwaHlAMzggeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1oZG1pcGh5IjsKKwkJcmVnID0gPDB4Mzg+OworCX07Cit9OworCismaTJzMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1mYyB7CisJc2Ftc3VuZyxtZmMtciA9IDwweDQzMDAwMDAwIDB4ODAwMDAwPjsKKwlzYW1zdW5nLG1mYy1sID0gPDB4NTEwMDAwMDAgMHg4MDAwMDA+OworfTsKKworJm1tY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCXN1cHBvcnRzLWhpZ2hzcGVlZDsKKwlicm9rZW4tY2Q7CisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwyIDM+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9jbGsgJnNkMF9jbWQgJnNkMF9jZCAmc2QwX2J1czQgJnNkMF9idXM4PjsKKworCXNsb3RAMCB7CisJCXJlZyA9IDwwPjsKKwkJYnVzLXdpZHRoID0gPDg+OworCX07Cit9OworCisvKgorICogT24gU3ByaW5nIHdlJ3ZlIGdvdCBTSVAgV2lGaSBhbmQgc28gY2FuIGtlZXAgZHJpdmUgc3RyZW5ndGhzIGxvdyB0bworICogcmVkdWNlIEVNSS4KKyAqLworJm1tY18xIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCXN1cHBvcnRzLWhpZ2hzcGVlZDsKKwlicm9rZW4tY2Q7CisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwyIDM+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMV9jbGsgJnNkMV9jbWQgJnNkMV9jZCAmc2QxX2J1czQ+OworCisJc2xvdEAwIHsKKwkJcmVnID0gPDA+OworCQlidXMtd2lkdGggPSA8ND47CisJfTsKK307CisKKyZwaW5jdHJsXzAgeworCXM1bTg3NjdfZHZzOiBzNW04NzY3LWR2cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGQxLTAiLCAiZ3BkMS0xIiwgImdwZDEtMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJZHBfaHBkX2dwaW86IGRwLWhwZC1ncGlvIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzMtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdHJhY2twYWRfaXJxOiB0cmFja3BhZC1pcnEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4MS0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MHhmPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXBvd2VyX2tleV9pcnE6IHBvd2VyLWtleS1pcnEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4MS0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwllY19pcnE6IGVjLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgxLTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXM1bTg3NjdfZHM6IHM1bTg3NjctZHMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4Mi0zIiwgImdweDItNCIsICJncHgyLTUiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDE+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXM1bTg3NjdfaXJxOiBzNW04NzY3LWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgzLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWxpZF9pcnE6IGxpZC1pcnEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4My01IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwloZG1pX2hwZF9pcnE6IGhkbWktaHBkLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgzLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDE+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZwaW5jdHJsXzEgeworCWhzaWNfcmVzZXQ6IGhzaWMtcmVzZXQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BlMS0wIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MT47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07Cit9OworCismc2QxX2J1czQgeworCXNhbXN1bmcscGluLWRydiA9IDwwPjsKK307CisKKyZzZDFfY2QgeworCXNhbXN1bmcscGluLWRydiA9IDwwPjsKK307CisKKyZzZDFfY2xrIHsKKwlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Cit9OworCismc2QxX2NtZCB7CisJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCXNhbXN1bmcscGluLWRydiA9IDwwPjsKK307CisKKyZzcGlfMSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsc3BpLXNyYy1jbGsgPSA8MD47CisJbnVtLWNzID0gPDE+OworfTsKKworI2luY2x1ZGUgImNyb3MtZWMta2V5Ym9hcmQuZHRzaSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAuZHRzaQppbmRleCBmMjFiOWFhLi5kNDVhMDdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpCkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiZmltZzJkIjsKIAl9OwogCi0JY29kZWNAMTEwMDAwMDAgeworCW1mYzogY29kZWNAMTEwMDAwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsbWZjLXY2IjsKIAkJcmVnID0gPDB4MTEwMDAwMDAgMHgxMDAwMD47CiAJCWludGVycnVwdHMgPSA8MCA5NiAwPjsKQEAgLTIyNyw3ICsyMjcsNyBAQAogCQljbG9jay1uYW1lcyA9ICJtZmMiOwogCX07CiAKLQlydGNAMTAxRTAwMDAgeworCXJ0YzogcnRjQDEwMUUwMDAwIHsKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfUlRDPjsKIAkJY2xvY2stbmFtZXMgPSAicnRjIjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTI2MSw3ICsyNjEsNyBAQAogCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKIAl9OwogCi0Jc2F0YUAxMjJGMDAwMCB7CisJc2F0YTogc2F0YUAxMjJGMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic25wcyxkd2MtYWhjaSI7CiAJCXNhbXN1bmcsc2F0YS1mcmVxID0gPDY2PjsKIAkJcmVnID0gPDB4MTIyRjAwMDAgMHgxZmY+OwpAQCAtMjkzLDYgKzI5Myw3IEBACiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjMF9idXM+OworCQlzYW1zdW5nLHN5c3JlZy1waGFuZGxlID0gPCZzeXNyZWdfc3lzdGVtX2NvbnRyb2xsZXI+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTMwNiw2ICszMDcsNyBAQAogCQljbG9jay1uYW1lcyA9ICJpMmMiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JmkyYzFfYnVzPjsKKwkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zMTksNiArMzIxLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMyX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzMyLDYgKzMzNSw3IEBACiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjM19idXM+OworCQlzYW1zdW5nLHN5c3JlZy1waGFuZGxlID0gPCZzeXNyZWdfc3lzdGVtX2NvbnRyb2xsZXI+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTU1NSw3ICs1NTksNyBAQAogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzOwogCi0JCWR3YzMgeworCQl1c2JkcmRfZHdjMzogZHdjMyB7CiAJCQljb21wYXRpYmxlID0gInN5bm9wc3lzLGR3YzMiOwogCQkJcmVnID0gPDB4MTIwMDAwMDAgMHgxMDAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDAgNzIgMD47CkBAIC01NzMsNyArNTc3LDcgQEAKIAkJI3BoeS1jZWxscyA9IDwxPjsKIAl9OwogCi0JdXNiQDEyMTEwMDAwIHsKKwllaGNpOiB1c2JAMTIxMTAwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1laGNpIjsKIAkJcmVnID0gPDB4MTIxMTAwMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgNzEgMD47CkBAIC01ODgsNyArNTkyLDcgQEAKIAkJfTsKIAl9OwogCi0JdXNiQDEyMTIwMDAwIHsKKwlvaGNpOiB1c2JAMTIxMjAwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1vaGNpIjsKIAkJcmVnID0gPDB4MTIxMjAwMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgNzEgMD47CkBAIC03MTAsNyArNzE0LDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiZ3NjbCI7CiAJfTsKIAotCWhkbWkgeworCWhkbWk6IGhkbWkgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1oZG1pIjsKIAkJcmVnID0gPDB4MTQ1MzAwMDAgMHg3MDAwMD47CiAJCWludGVycnVwdHMgPSA8MCA5NSAwPjsKQEAgLTczNiwxNCArNzQwLDE0IEBACiAJCSNwaHktY2VsbHMgPSA8MD47CiAJfTsKIAotCWRwLWNvbnRyb2xsZXJAMTQ1QjAwMDAgeworCWRwOiBkcC1jb250cm9sbGVyQDE0NUIwMDAwIHsKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfRFA+OwogCQljbG9jay1uYW1lcyA9ICJkcCI7CiAJCXBoeXMgPSA8JmRwX3BoeT47CiAJCXBoeS1uYW1lcyA9ICJkcCI7CiAJfTsKIAotCWZpbWRAMTQ0MDAwMDAgeworCWZpbWQ6IGZpbWRAMTQ0MDAwMDAgewogCQljbG9ja3MgPSA8JmNsb2NrIENMS19TQ0xLX0ZJTUQxPiwgPCZjbG9jayBDTEtfRklNRDE+OwogCQljbG9jay1uYW1lcyA9ICJzY2xrX2ZpbWQiLCAiZmltZCI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtcGVhY2gtcGl0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtcGVhY2gtcGl0LmR0cwppbmRleCA4MmNkYjc0Li45YTA1MGUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLXBlYWNoLXBpdC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC1wZWFjaC1waXQuZHRzCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9tYXhpbSxtYXg3NzgwMi5oPgogI2luY2x1ZGUgImV4eW5vczU0MjAuZHRzaSIKIAogLyB7CkBAIC0xNTEsNyArMTUyLDcgQEAKIAlzdGF0dXMgPSAib2theSI7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAKLQltYXg3NzgwMi1wbWljQDkgeworCW1heDc3ODAyOiBtYXg3NzgwMi1wbWljQDkgewogCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODAyIjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mz47CiAJCWludGVycnVwdHMgPSA8MSBJUlFfVFlQRV9OT05FPjsKQEAgLTU2MCw3ICs1NjEsNyBAQAogCXN0YXR1cyA9ICJva2F5IjsKIAludW0tc2xvdHMgPSA8MT47CiAJYnJva2VuLWNkOwotCWNhcHMyLW1tYy1oczIwMC0xXzh2OworCW1tYy1oczIwMC0xXzh2OwogCWNhcC1tbWMtaGlnaHNwZWVkOwogCW5vbi1yZW1vdmFibGU7CiAJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKQEAgLTcyNyw2ICs3MjgsOCBAQAogCiAmcnRjIHsKIAlzdGF0dXMgPSAib2theSI7CisJY2xvY2tzID0gPCZjbG9jayBDTEtfUlRDPiwgPCZtYXg3NzgwMiBNQVg3NzgwMl9DTEtfMzJLX0FQPjsKKwljbG9jay1uYW1lcyA9ICJydGMiLCAicnRjX3NyYyI7CiB9OwogCiAmc3BpXzIgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC5kdHNpCmluZGV4IDg2MTdhMDMuLjkwYmY0MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLmR0c2kKQEAgLTU2MCw2ICs1NjAsNyBAQAogCQljbG9jay1uYW1lcyA9ICJpMmMiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JmkyYzBfYnVzPjsKKwkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC01NzMsNiArNTc0LDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMxX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNTg2LDYgKzU4OCw3IEBACiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjMl9idXM+OworCQlzYW1zdW5nLHN5c3JlZy1waGFuZGxlID0gPCZzeXNyZWdfc3lzdGVtX2NvbnRyb2xsZXI+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTU5OSw2ICs2MDIsNyBAQAogCQljbG9jay1uYW1lcyA9ICJpMmMiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JmkyYzNfYnVzPjsKKwkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLXBlYWNoLXBpLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU4MDAtcGVhY2gtcGkuZHRzCmluZGV4IDdiYjFjOGQuLmU4ZmRkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU4MDAtcGVhY2gtcGkuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU4MDAtcGVhY2gtcGkuZHRzCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9tYXhpbSxtYXg3NzgwMi5oPgogI2luY2x1ZGUgImV4eW5vczU4MDAuZHRzaSIKIAogLyB7CkBAIC0xNTAsNyArMTUxLDcgQEAKIAlzdGF0dXMgPSAib2theSI7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAKLQltYXg3NzgwMi1wbWljQDkgeworCW1heDc3ODAyOiBtYXg3NzgwMi1wbWljQDkgewogCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODAyIjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mz47CiAJCWludGVycnVwdHMgPSA8MSBJUlFfVFlQRV9OT05FPjsKQEAgLTU0OCw3ICs1NDksNyBAQAogCXN0YXR1cyA9ICJva2F5IjsKIAludW0tc2xvdHMgPSA8MT47CiAJYnJva2VuLWNkOwotCWNhcHMyLW1tYy1oczIwMC0xXzh2OworCW1tYy1oczIwMC0xXzh2OwogCWNhcC1tbWMtaGlnaHNwZWVkOwogCW5vbi1yZW1vdmFibGU7CiAJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKQEAgLTcxNSw2ICs3MTYsOCBAQAogCiAmcnRjIHsKIAlzdGF0dXMgPSAib2theSI7CisJY2xvY2tzID0gPCZjbG9jayBDTEtfUlRDPiwgPCZtYXg3NzgwMiBNQVg3NzgwMl9DTEtfMzJLX0FQPjsKKwljbG9jay1uYW1lcyA9ICJydGMiLCAicnRjX3NyYyI7CiB9OwogCiAmc3BpXzIgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaGlzaS14NWhkMi1ka2IuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaGlzaS14NWhkMi1ka2IuZHRzCmluZGV4IDA1YjQ0YzIuLjcyMWIwOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2hpc2kteDVoZDItZGtiLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9oaXNpLXg1aGQyLWRrYi5kdHMKQEAgLTUxLDMgKzUxLDM2IEBACiAmdWFydDAgewogCXN0YXR1cyA9ICJva2F5IjsKIH07CisKKyZnbWFjMCB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MD47CisJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJcGh5LW1vZGUgPSAibWlpIjsKKwkvKiBQbGFjZWhvbGRlciwgb3ZlcndyaXR0ZW4gYnkgYm9vdGxvYWRlciAqLworCW1hYy1hZGRyZXNzID0gWzAwIDAwIDAwIDAwIDAwIDAwXTsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCXJlZyA9IDwyPjsKKwl9OworfTsKKworJmdtYWMxIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwlwaHktbW9kZSA9ICJyZ21paSI7CisJLyogUGxhY2Vob2xkZXIsIG92ZXJ3cml0dGVuIGJ5IGJvb3Rsb2FkZXIgKi8KKwltYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJc3RhdHVzID0gIm9rYXkiOworCisJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQlyZWcgPSA8MT47CisJfTsKK307CisKKyZhaGNpIHsKKwlwaHlzID0gPCZzYXRhX3BoeT47CisJcGh5LW5hbWVzID0gInNhdGEtcGh5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9oaXNpLXg1aGQyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9oaXNpLXg1aGQyLmR0c2kKaW5kZXggZjg1YmEyOS4uYzUyNzIyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaGlzaS14NWhkMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2hpc2kteDVoZDIuZHRzaQpAQCAtMTMxLDYgKzEzMSwyNDkgQEAKIAkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CisKKwkJCWdwaW8wOiBncGlvQGIyMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjIwMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEwOCAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8xOiBncGlvQGIyMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjIxMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEwOSAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8yOiBncGlvQGIyMjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjIyMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExMCAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8zOiBncGlvQGIyMzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjIzMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExMSAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW80OiBncGlvQGIyNDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjI0MDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExMiAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW81OiBncGlvQDAwNDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MDA0MDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExMyAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW82OiBncGlvQGIyNjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjI2MDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExNCAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW83OiBncGlvQGIyNzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjI3MDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExNSAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW84OiBncGlvQGIyODAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjI4MDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExNiAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW85OiBncGlvQGIyOTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjI5MDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExNyAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8xMDogZ3Bpb0BiMmEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyYTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTggMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTE6IGdwaW9AYjJiMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhiMmIwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTE5IDB4ND47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9GSVhFRF8xMDBNPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZ3BpbzEyOiBncGlvQGIyYzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjJjMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEyMCAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8xMzogZ3Bpb0BiMmQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyZDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMjEgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTQ6IGdwaW9AYjJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhiMmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTIyIDB4ND47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9GSVhFRF8xMDBNPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZ3BpbzE1OiBncGlvQGIyZjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjJmMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEyMyAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8xNjogZ3Bpb0BiMzAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIzMDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMjQgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTc6IGdwaW9AYjMxMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhiMzEwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTI1IDB4ND47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9GSVhFRF8xMDBNPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJd2R0MDogd2F0Y2hkb2dAYTJjMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxzcDgwNSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlhcm0scHJpbWVjZWxsLXBlcmlwaGlkID0gPDB4MDAxNDE4MDU+OworCQkJCXJlZyA9IDwweGEyYzAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAyOSA0PjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfV0RHMF9SU1Q+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCX07CiAJCX07CiAKIAkJbG9jYWxfdGltZXJAMDBhMDA2MDAgewpAQCAtMTQ4LDkgKzM5MSwxNSBAQAogCQl9OwogCiAJCXN5c2N0cmw6IHN5c3RlbS1jb250cm9sbGVyQDAwMDAwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLHN5c2N0cmwiOworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24sc3lzY3RybCIsICJzeXNjb24iOwogCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgxMDAwPjsKLQkJCXJlYm9vdC1vZmZzZXQgPSA8MHg0PjsKKwkJfTsKKworCQlyZWJvb3QgeworCQkJY29tcGF0aWJsZSA9ICJzeXNjb24tcmVib290IjsKKwkJCXJlZ21hcCA9IDwmc3lzY3RybD47CisJCQlvZmZzZXQgPSA8MHg0PjsKKwkJCW1hc2sgPSA8MHhkZWFkYmVlZj47CiAJCX07CiAKIAkJY3B1Y3RybEAwMGEyMjAwMCB7CkBAIC0xNjYsNSArNDE1LDE0MiBAQAogCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCX07CiAJCX07CisKKwkJLyogdW5yZW1vdmFibGUgZW1tYyBhcyBtbWNibGswICovCisJCW1tYzogbW1jQDE4MzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LW1zaGMiOworCQkJcmVnID0gPDB4MTgzMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDM1IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX01NQ19DSVVfUlNUPiwKKwkJCQkgPCZjbG9jayBISVg1SEQyX01NQ19CSVVfQ0xLPjsKKwkJCWNsb2NrLW5hbWVzID0gImNpdSIsICJiaXUiOworCQl9OworCisJCXNkOiBtbWNAMTgyMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctbXNoYyI7CisJCQlyZWcgPSA8MHgxODIwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzQgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfU0RfQ0lVX1JTVD4sCisJCQkJIDwmY2xvY2sgSElYNUhEMl9TRF9CSVVfQ0xLPjsKKwkJCWNsb2NrLW5hbWVzID0gImNpdSIsImJpdSI7CisJCX07CisKKwkJZ21hYzA6IGV0aGVybmV0QDE4NDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGl4NWhkMi1nbWFjIjsKKwkJCXJlZyA9IDwweDE4NDAwMDAgMHgxMDAwPiw8MHgxODQzMDBjIDB4ND47CisJCQlpbnRlcnJ1cHRzID0gPDAgNzEgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfTUFDMF9DTEs+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlnbWFjMTogZXRoZXJuZXRAMTg0MTAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLWdtYWMiOworCQkJcmVnID0gPDB4MTg0MTAwMCAweDEwMDA+LDwweDE4NDMwMTAgMHg0PjsKKwkJCWludGVycnVwdHMgPSA8MCA3MiA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9NQUMxX0NMSz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYjA6IGVoY2lAMTg5MDAwMCB7CisJCQljb21wYXRpYmxlID0gImdlbmVyaWMtZWhjaSI7CisJCQlyZWcgPSA8MHgxODkwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNjYgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfVVNCX0NMSz47CisJCX07CisKKwkJdXNiMTogb2hjaUAxODgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VuZXJpYy1vaGNpIjsKKwkJCXJlZyA9IDwweDE4ODAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA2NyA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9VU0JfQ0xLPjsKKwkJfTsKKworCQlwZXJpcGhlcmFsX2N0cmw6IHN5c2NvbkBhMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzeXNjb24iOworCQkJcmVnID0gPDB4YTIwMDAwIDB4MTAwMD47CisJCX07CisKKwkJc2F0YV9waHk6IHBoeUAxOTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItc2F0YS1waHkiOworCQkJcmVnID0gPDB4MTkwMDAwMCAweDEwMDAwPjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQloaXNpbGljb24scGVyaXBoZXJhbC1zeXNjb24gPSA8JnBlcmlwaGVyYWxfY3RybD47CisJCQloaXNpbGljb24scG93ZXItcmVnID0gPDB4OCAxMD47CisJCX07CisKKwkJYWhjaTogc2F0YUAxOTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpc2ktYWhjaSI7CisJCQlyZWcgPSA8MHgxOTAwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDcwIDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX1NBVEFfQ0xLPjsKKwkJfTsKKworCQlpcjogaXJAMDAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItaXIiOworCQkJcmVnID0gPDB4MDAxMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNDcgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMjRNPjsKKwkJCWhpc2lsaWNvbixwb3dlci1zeXNjb24gPSA8JnN5c2N0cmw+OworCQl9OworCisJCWkyYzA6IGkyY0BiMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGl4NWhkMi1pMmMiOworCQkJcmVnID0gPDB4YjEwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzggND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfSTJDMF9SU1Q+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMTogaTJjQGIxMTAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLWkyYyI7CisJCQlyZWcgPSA8MHhiMTEwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAzOSA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9JMkMxX1JTVD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMyOiBpMmNAYjEyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItaTJjIjsKKwkJCXJlZyA9IDwweGIxMjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDQwIDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0kyQzJfUlNUPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzM6IGkyY0BiMTMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGl4NWhkMi1pMmMiOworCQkJcmVnID0gPDB4YjEzMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNDEgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfSTJDM19SU1Q+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjNDogaTJjQGIxNjAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLWkyYyI7CisJCQlyZWcgPSA8MHhiMTYwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA0MyA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9JMkM0X1JTVD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmM1OiBpMmNAYjE3MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItaTJjIjsKKwkJCXJlZyA9IDwweGIxNzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDQ0IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0kyQzVfUlNUPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLmR0c2kKaW5kZXggOTI2NjBlMS4uYzAxMTZjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MS5kdHNpCkBAIC0yMTQsNyArMjE0LDkgQEAKIAkJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NTEtc3NpIiwgImZzbCxpbXgyMS1zc2kiOwogCQkJCQlyZWcgPSA8MHg3MDAxNDAwMCAweDQwMDA+OwogCQkJCQlpbnRlcnJ1cHRzID0gPDMwPjsKLQkJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTJfSVBHX0dBVEU+OworCQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJMl9JUEdfR0FURT4sCisJCQkJCQkgPCZjbGtzIElNWDVfQ0xLX1NTSTJfUk9PVF9HQVRFPjsKKwkJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImJhdWQiOwogCQkJCQlkbWFzID0gPCZzZG1hIDI0IDEgMD4sCiAJCQkJCSAgICAgICA8JnNkbWEgMjUgMSAwPjsKIAkJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKQEAgLTUwNCw3ICs1MDYsOSBAQAogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDUxLXNzaSIsICJmc2wsaW14MjEtc3NpIjsKIAkJCQlyZWcgPSA8MHg4M2ZjYzAwMCAweDQwMDA+OwogCQkJCWludGVycnVwdHMgPSA8Mjk+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kxX0lQR19HQVRFPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJMV9JUEdfR0FURT4sCisJCQkJCSA8JmNsa3MgSU1YNV9DTEtfU1NJMV9ST09UX0dBVEU+OworCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJiYXVkIjsKIAkJCQlkbWFzID0gPCZzZG1hIDI4IDAgMD4sCiAJCQkJICAgICAgIDwmc2RtYSAyOSAwIDA+OwogCQkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CkBAIC01NjAsNyArNTY0LDkgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXg1MS1zc2kiLCAiZnNsLGlteDIxLXNzaSI7CiAJCQkJcmVnID0gPDB4ODNmZTgwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDk2PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJM19JUEdfR0FURT47CisJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTNfSVBHX0dBVEU+LAorCQkJCQkgPCZjbGtzIElNWDVfQ0xLX1NTSTNfUk9PVF9HQVRFPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYmF1ZCI7CiAJCQkJZG1hcyA9IDwmc2RtYSA0NiAwIDA+LAogCQkJCSAgICAgICA8JnNkbWEgNDcgMCAwPjsKIAkJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLmR0c2kKaW5kZXggZjkxNzI1Yi4uYTMwYmRkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1My5kdHNpCkBAIC00NiwxMCArNDYsMjEgQEAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljcHVAMCB7CisJCWNwdTA6IGNwdUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTgiOwogCQkJcmVnID0gPDB4MD47CisJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfQVJNPjsKKwkJCWNsb2NrLWxhdGVuY3kgPSA8NjEwMzY+OworCQkJdm9sdGFnZS10b2xlcmFuY2UgPSA8NT47CisJCQlvcGVyYXRpbmctcG9pbnRzID0gPAorCQkJCS8qIGtIeiAqLworCQkJCSAxNjY2NjYgIDg1MDAwMAorCQkJCSA0MDAwMDAgIDkwMDAwMAorCQkJCSA4MDAwMDAgMTA1MDAwMAorCQkJCTEwMDAwMDAgMTIwMDAwMAorCQkJCTEyMDAwMDAgMTMwMDAwMAorCQkJPjsKIAkJfTsKIAl9OwogCkBAIC0yMjcsNyArMjM4LDkgQEAKIAkJCQkJCQkiZnNsLGlteDIxLXNzaSI7CiAJCQkJCXJlZyA9IDwweDUwMDE0MDAwIDB4NDAwMD47CiAJCQkJCWludGVycnVwdHMgPSA8MzA+OwotCQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJMl9JUEdfR0FURT47CisJCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kyX0lQR19HQVRFPiwKKwkJCQkJCSA8JmNsa3MgSU1YNV9DTEtfU1NJMl9ST09UX0dBVEU+OworCQkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYmF1ZCI7CiAJCQkJCWRtYXMgPSA8JnNkbWEgMjQgMSAwPiwKIAkJCQkJICAgICAgIDwmc2RtYSAyNSAxIDA+OwogCQkJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOwpAQCAtNjc1LDcgKzY4OCw5IEBACiAJCQkJCQkiZnNsLGlteDIxLXNzaSI7CiAJCQkJcmVnID0gPDB4NjNmY2MwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDI5PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJMV9JUEdfR0FURT47CisJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTFfSVBHX0dBVEU+LAorCQkJCQkgPCZjbGtzIElNWDVfQ0xLX1NTSTFfUk9PVF9HQVRFPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYmF1ZCI7CiAJCQkJZG1hcyA9IDwmc2RtYSAyOCAwIDA+LAogCQkJCSAgICAgICA8JnNkbWEgMjkgMCAwPjsKIAkJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOwpAQCAtNzAzLDcgKzcxOCw5IEBACiAJCQkJCQkiZnNsLGlteDIxLXNzaSI7CiAJCQkJcmVnID0gPDB4NjNmZTgwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDk2PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJM19JUEdfR0FURT47CisJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTNfSVBHX0dBVEU+LAorCQkJCQkgPCZjbGtzIElNWDVfQ0xLX1NTSTNfUk9PVF9HQVRFPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYmF1ZCI7CiAJCQkJZG1hcyA9IDwmc2RtYSA0NiAwIDA+LAogCQkJCSAgICAgICA8JnNkbWEgNDcgMCAwPjsKIAkJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwuZHRzaQppbmRleCBiNDUzZTBlLi4xYWMyZmU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwuZHRzaQpAQCAtMTMsNiArMTMsMTAgQEAKICNpbmNsdWRlICJpbXg2cWRsLmR0c2kiCiAKIC8geworCWFsaWFzZXMgeworCQlpMmMzID0gJmkyYzQ7CisJfTsKKwogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0xMTQsMyArMTE4LDcgQEAKIAkJICAgICAgImRpMF9zZWwiLCAiZGkxX3NlbCIsCiAJCSAgICAgICJkaTAiLCAiZGkxIjsKIH07CisKKyZ2cHUgeworCWNvbXBhdGlibGUgPSAiZnNsLGlteDZkbC12cHUiLCAiY25tLGNvZGE5NjAiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLXRiczI5MTAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtdGJzMjkxMC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzYWJmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLXRiczI5MTAuZHRzCkBAIC0wLDAgKzEsNDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgU29lcmVuIE1vY2ggPHNtb2NoQHdlYi5kZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImlteDZxLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKworLyB7CisJbW9kZWwgPSAiVEJTMjkxMCBNYXRyaXggQVJNIG1pbmkgUEMiOworCWNvbXBhdGlibGUgPSAidGJzLGlteDZxLXRiczI5MTAiLCAiZnNsLGlteDZxIjsKKworCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQxOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHgxMDAwMDAwMCAweDgwMDAwMDAwPjsKKwl9OworCisJZmFuIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWZhbiI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9ncGlvX2Zhbj47CisJCWdwaW9zID0gPCZncGlvMyAyOCBHUElPX0FDVElWRV9ISUdIPjsKKwkJZ3Bpby1mYW4sc3BlZWQtbWFwID0gPDAgICAgMAorCQkJCSAgICAgIDMwMDAgMT47CisJfTsKKworCWlyX3JlY3YgeworCQljb21wYXRpYmxlID0gImdwaW8taXItcmVjZWl2ZXIiOworCQlncGlvcyA9IDwmZ3BpbzMgMTggR1BJT19BQ1RJVkVfTE9XPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZwaW5jdHJsX2lyPjsKKwl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZwaW5jdHJsX2dwaW9fbGVkcz47CisKKwkJYmx1ZSB7CisJCQlsYWJlbCA9ICJibHVlX3N0YXR1c19sZWQiOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDIgR1BJT19BQ1RJVkVfSElHSD47CisJCQlkZWZhdWx0LXN0YXRlID0gImtlZXAiOworCQl9OworCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXJlZ18ycDV2OiByZWd1bGF0b3JAMCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MD47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICIyUDVWIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI1MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjUwMDAwMD47CisJCX07CisKKwkJcmVnXzNwM3Y6IHJlZ3VsYXRvckAxIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwxPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIjNQM1YiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJfTsKKworCQlyZWdfNXAwdjogcmVndWxhdG9yQDIgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDI+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiNVAwViI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQl9OworCX07CisKKwlzb3VuZC1zZ3RsNTAwMCB7CisJCWF1ZGlvLWNvZGVjID0gPCZzZ3RsNTAwMD47CisJCWF1ZGlvLXJvdXRpbmcgPQorCQkJIk1JQ19JTiIsICJNaWMgSmFjayIsCisJCQkiTWljIEphY2siLCAiTWljIEJpYXMiLAorCQkJIkhlYWRwaG9uZSBKYWNrIiwgIkhQX09VVCI7CisJCWNvbXBhdGlibGUgPSAiZnNsLGlteC1hdWRpby1zZ3RsNTAwMCI7CisJCW1vZGVsID0gIk9uLWJvYXJkIENvZGVjIjsKKwkJbXV4LWV4dC1wb3J0ID0gPDM+OworCQltdXgtaW50LXBvcnQgPSA8MT47CisJCXNzaS1jb250cm9sbGVyID0gPCZzc2kxPjsKKwl9OworCisJc291bmQtc3BkaWYgeworCQljb21wYXRpYmxlID0gImZzbCxpbXgtYXVkaW8tc3BkaWYiOworCQltb2RlbCA9ICJPbi1ib2FyZCBTUERJRiI7CisJCXNwZGlmLWNvbnRyb2xsZXIgPSA8JnNwZGlmPjsKKwkJc3BkaWYtb3V0OworCX07Cit9OworCismYXVkbXV4IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZmVjIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0PjsKKwlwaHktbW9kZSA9ICJyZ21paSI7CisJcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMSAyNSBHUElPX0FDVElWRV9ISUdIPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaGRtaSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaGRtaT47CisJZGRjLWkyYy1idXMgPSA8JmkyYzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMxIHsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMxPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlzZ3RsNTAwMDogc2d0bDUwMDBAMGEgeworCQljbG9ja3MgPSA8JmNsa3MgMjAxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2d0bDUwMDAiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc2d0bDUwMDA+OworCQlyZWcgPSA8MHgwYT47CisJCVZEREEtc3VwcGx5ID0gPCZyZWdfMnA1dj47CisJCVZERElPLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCX07Cit9OworCismaTJjMiB7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmkyYzMgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzM+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXJ0YzogZHMxMzA3QDY4IHsKKwkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzA3IjsKKwkJcmVnID0gPDB4Njg+OworCX07Cit9OworCismcGNpZSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfcGNpZT47CisJcmVzZXQtZ3BpbyA9IDwmZ3BpbzcgMTIgR1BJT19BQ1RJVkVfSElHSD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNhdGEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzbnZzX3Bvd2Vyb2ZmIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BkaWYgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3NwZGlmPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3NpMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYmgxIHsKKwl2YnVzLXN1cHBseSA9IDwmcmVnXzVwMHY+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JvdGcgeworCXZidXMtc3VwcGx5ID0gPCZyZWdfNXAwdj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNib3RnPjsKKwlkaXNhYmxlLW92ZXItY3VycmVudDsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNkaGMyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2RoYzI+OworCWJ1cy13aWR0aCA9IDw0PjsKKwljZC1ncGlvcyA9IDwmZ3BpbzIgMiBHUElPX0FDVElWRV9ISUdIPjsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2RoYzMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzZGhjMz47CisJYnVzLXdpZHRoID0gPDQ+OworCWNkLWdwaW9zID0gPCZncGlvMiAwIEdQSU9fQUNUSVZFX0hJR0g+OworCXdwLWdwaW9zID0gPCZncGlvMiAxIEdQSU9fQUNUSVZFX0hJR0g+OworCXZtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzZGhjNCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNkaGM0PjsKKwlidXMtd2lkdGggPSA8OD47CisJbm9uLXJlbW92YWJsZTsKKwluby0xLTgtdjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaW9tdXhjIHsKKwlpbXg2cS10YnMyOTEwIHsKKwkJcGluY3RybF9lbmV0OiBlbmV0Z3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRU5FVF9NRElPX19FTkVUX01ESU8gICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfRU5FVF9NRENfX0VORVRfTURDICAgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVFhDX19SR01JSV9UWEMgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVEQwX19SR01JSV9URDAgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVEQxX19SR01JSV9URDEgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVEQyX19SR01JSV9URDIgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVEQzX19SR01JSV9URDMgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVFhfQ1RMX19SR01JSV9UWF9DVEwgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfRU5FVF9SRUZfQ0xLX19FTkVUX1RYX0NMSyAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfUlhDX19SR01JSV9SWEMgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfUkQwX19SR01JSV9SRDAgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfUkQxX19SR01JSV9SRDEgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfUkQyX19SR01JSV9SRDIgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfUkQzX19SR01JSV9SRDMgICAgICAgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfUlhfQ1RMX19SR01JSV9SWF9DVEwgMHgxYjBiMAorCQkJCU1YNlFETF9QQURfR1BJT18xNl9fRU5FVF9SRUZfQ0xLICAgICAgMHg0MDAxYjBhOAorCQkJCU1YNlFETF9QQURfRU5FVF9DUlNfRFZfX0dQSU8xX0lPMjUgICAgMHgxYjA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2hkbWk6IGhkbWlncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9LRVlfUk9XMl9fSERNSV9UWF9DRUNfTElORSAweDFmOGIwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfaTJjMTogaTJjMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUOV9fSTJDMV9TQ0wgICAgICAgIDB4NDAwMWI4YjEKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUOF9fSTJDMV9TREEgICAgICAgIDB4NDAwMWI4YjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9pMmMyOiBpMmMyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfS0VZX0NPTDNfX0kyQzJfU0NMICAgICAgICAgMHg0MDAxYjhiMQorCQkJCU1YNlFETF9QQURfS0VZX1JPVzNfX0kyQzJfU0RBICAgICAgICAgMHg0MDAxYjhiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2kyYzM6IGkyYzNncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9HUElPXzNfX0kyQzNfU0NMICAgICAgICAgICAweDQwMDFiOGIxCisJCQkJTVg2UURMX1BBRF9HUElPXzZfX0kyQzNfU0RBICAgICAgICAgICAweDQwMDFiOGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfaXI6IGlyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRUlNX0QxOF9fR1BJTzNfSU8xOCAgICAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3BjaWU6IHBjaWVncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9HUElPXzE3X19HUElPN19JTzEyICAgICAgICAweDE3MDU5CisJCQk+OworCQl9OworCisJCXBpbmN0cmxfc2d0bDUwMDA6IHNndGw1MDAwZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfQ1NJMF9EQVQ3X19BVUQzX1JYRCAgICAgICAgMHgxMzBiMAorCQkJCU1YNlFETF9QQURfQ1NJMF9EQVQ0X19BVUQzX1RYQyAgICAgICAgMHgxMzBiMAorCQkJCU1YNlFETF9QQURfQ1NJMF9EQVQ1X19BVUQzX1RYRCAgICAgICAgMHgxMTBiMAorCQkJCU1YNlFETF9QQURfQ1NJMF9EQVQ2X19BVUQzX1RYRlMgICAgICAgMHgxMzBiMAorCQkJCU1YNlFETF9QQURfR1BJT18wX19DQ01fQ0xLTzEgICAgICAgICAgMHgxMzBiMAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3NwZGlmOiBzcGRpZmdycCB7CisJCQlmc2wscGlucyA9IDxNWDZRRExfUEFEX0dQSU9fMTlfX1NQRElGX09VVCAgICAgMHgxMzA5MQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VhcnQxOiB1YXJ0MWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUMTBfX1VBUlQxX1RYX0RBVEEgIDB4MWIwYjEKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUMTFfX1VBUlQxX1JYX0RBVEEgIDB4MWIwYjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MjogdWFydDJncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9FSU1fRDI2X19VQVJUMl9UWF9EQVRBICAgICAweDFiMGIxCisJCQkJTVg2UURMX1BBRF9FSU1fRDI3X19VQVJUMl9SWF9EQVRBICAgICAweDFiMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdXNib3RnOiB1c2JvdGdncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9FTkVUX1JYX0VSX19VU0JfT1RHX0lEICAgICAweDE3MDU5CisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdXNkaGMyOiB1c2RoYzJncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9TRDJfQ01EX19TRDJfQ01EICAgICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDJfQ0xLX19TRDJfQ0xLICAgICAgICAgICAweDEwMDU5CisJCQkJTVg2UURMX1BBRF9TRDJfREFUMF9fU0QyX0RBVEEwICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDJfREFUMV9fU0QyX0RBVEExICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDJfREFUMl9fU0QyX0RBVEEyICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDJfREFUM19fU0QyX0RBVEEzICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9OQU5ERl9EMl9fR1BJTzJfSU8wMiAgICAgICAweDE3MDU5CisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdXNkaGMzOiB1c2RoYzNncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9TRDNfQ01EX19TRDNfQ01EICAgICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDNfQ0xLX19TRDNfQ0xLICAgICAgICAgICAweDEwMDU5CisJCQkJTVg2UURMX1BBRF9TRDNfREFUMF9fU0QzX0RBVEEwICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDNfREFUMV9fU0QzX0RBVEExICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDNfREFUMl9fU0QzX0RBVEEyICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDNfREFUM19fU0QzX0RBVEEzICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9OQU5ERl9EMF9fR1BJTzJfSU8wMCAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9OQU5ERl9EMV9fR1BJTzJfSU8wMSAgICAgICAweDE3MDU5CisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdXNkaGM0OiB1c2RoYzRncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9TRDRfQ01EX19TRDRfQ01EICAgICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDRfQ0xLX19TRDRfQ0xLICAgICAgICAgICAweDEwMDU5CisJCQkJTVg2UURMX1BBRF9TRDRfREFUMF9fU0Q0X0RBVEEwICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDRfREFUMV9fU0Q0X0RBVEExICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDRfREFUMl9fU0Q0X0RBVEEyICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDRfREFUM19fU0Q0X0RBVEEzICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDRfREFUNF9fU0Q0X0RBVEE0ICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDRfREFUNV9fU0Q0X0RBVEE1ICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDRfREFUNl9fU0Q0X0RBVEE2ICAgICAgICAweDE3MDU5CisJCQkJTVg2UURMX1BBRF9TRDRfREFUN19fU0Q0X0RBVEE3ICAgICAgICAweDE3MDU5CisJCQk+OworCQl9OworCX07CisKKwlncGlvX2ZhbiB7CisJCXBpbmN0cmxfZ3Bpb19mYW46IGdwaW9mYW5ncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9FSU1fRDI4X19HUElPM19JTzI4ICAgICAgICAweDEzMGIxCisJCQk+OworCQl9OworCX07CisKKwlncGlvX2xlZHMgeworCQlwaW5jdHJsX2dwaW9fbGVkczogZ3Bpb2xlZHNncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9HUElPXzJfX0dQSU8xX0lPMDIgICAgICAgICAweDEzMGIxCisJCQk+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLmR0c2kKaW5kZXggZTlmMzY0Ni4uODVmNzJlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cS5kdHNpCkBAIC0zMDgsMyArMzA4LDcgQEAKIAkJfTsKIAl9OwogfTsKKworJnZwdSB7CisJY29tcGF0aWJsZSA9ICJmc2wsaW14NnEtdnB1IiwgImNubSxjb2RhOTYwIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTJ4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUyeHguZHRzaQppbmRleCBkM2MwYmY1Li5iNTc1NmMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTJ4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1Mnh4LmR0c2kKQEAgLTI4Miw3ICsyODIsNiBAQAogfTsKIAogJnNzaTEgewotCWZzbCxtb2RlID0gImkycy1zbGF2ZSI7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUzeHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1M3h4LmR0c2kKaW5kZXggY2FkZTFiZC4uODZmMDNjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUzeHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTN4eC5kdHNpCkBAIC0yODcsNyArMjg3LDYgQEAKIH07CiAKICZzc2kxIHsKLQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1NHh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTR4eC5kdHNpCmluZGV4IGNmMTMyMzkuLjRhOGQ5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1NHh4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzU0eHguZHRzaQpAQCAtMzc2LDEyICszNzYsMTAgQEAKIH07CiAKICZzc2kxIHsKLQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKICZzc2kyIHsKLQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBiYWIwMS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1waHl0ZWMtcGJhYjAxLmR0c2kKaW5kZXggNTg0NzIxMi4uNTg1YjRmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1waHl0ZWMtcGJhYjAxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1waHl0ZWMtcGJhYjAxLmR0c2kKQEAgLTksMTcgKzksMTAzIEBACiAgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKICAqLwogCisjaW5jbHVkZSA8ZHQtYmluZGluZ3Mvc291bmQvZnNsLWlteC1hdWRtdXguaD4KKwogLyB7CiAJY2hvc2VuIHsKIAkJbGludXgsc3Rkb3V0LXBhdGggPSAmdWFydDQ7CiAJfTsKKworCXJlZ3VsYXRvcnMgeworCQlzb3VuZF8xdjg6IHJlZ3VsYXRvckAyIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gImkycy1hdWRpby0xdjgiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJfTsKKworCQlzb3VuZF8zdjM6IHJlZ3VsYXRvckAzIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwzPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gImkycy1hdWRpby0zdjMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJfTsKKwl9OworCisJdGx2MzIwX21jbGs6IG9zY2lsbGF0b3IgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTkyMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAidGx2MzIwLW1jbGsiOworCX07CisKKwlzb3VuZCB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWF1ZGlvLWNhcmQiOworCQlzaW1wbGUtYXVkaW8tY2FyZCxuYW1lID0gIk9uYm9hcmRUTFYzMjBBSUMzMDA3IjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZm9ybWF0ID0gImkycyI7CisJCXNpbXBsZS1hdWRpby1jYXJkLGJpdGNsb2NrLW1hc3RlciA9IDwmZGFpbGlua19tYXN0ZXI+OworCQlzaW1wbGUtYXVkaW8tY2FyZCxmcmFtZS1tYXN0ZXIgPSA8JmRhaWxpbmtfbWFzdGVyPjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsd2lkZ2V0cyA9CisJCQkiTWljcm9waG9uZSIsICJNaWMgSmFjayIsCisJCQkiTGluZSIsICJMaW5lIEluIiwKKwkJCSJMaW5lIiwgIkxpbmUgT3V0IiwKKwkJCSJTcGVha2VyIiwgIlNwZWFrZXIiLAorCQkJIkhlYWRwaG9uZSIsICJIZWFkcGhvbmUgSmFjayI7CisJCXNpbXBsZS1hdWRpby1jYXJkLHJvdXRpbmcgPQorCQkJIkxpbmUgT3V0IiwgIkxMT1VUIiwKKwkJCSJMaW5lIE91dCIsICJSTE9VVCIsCisJCQkiU3BlYWtlciIsICJTUE9QIiwKKwkJCSJTcGVha2VyIiwgIlNQT00iLAorCQkJIkhlYWRwaG9uZSBKYWNrIiwgIkhQTE9VVCIsCisJCQkiSGVhZHBob25lIEphY2siLCAiSFBST1VUIiwKKwkJCSJNSUMzTCIsICJNaWMgSmFjayIsCisJCQkiTUlDM1IiLCAiTWljIEphY2siLAorCQkJIk1pYyBKYWNrIiwgIk1pYyBCaWFzIiwKKwkJCSJMSU5FMUwiLCAiTGluZSBJbiIsCisJCQkiTElORTFSIiwgIkxpbmUgSW4iOworCisJCXNpbXBsZS1hdWRpby1jYXJkLGNwdSB7CisJCQlzb3VuZC1kYWkgPSA8JnNzaTI+OworCQl9OworCisJCWRhaWxpbmtfbWFzdGVyOiBzaW1wbGUtYXVkaW8tY2FyZCxjb2RlYyB7CisJCQlzb3VuZC1kYWkgPSA8JmNvZGVjPjsKKwkJCWNsb2NrcyA9IDwmdGx2MzIwX21jbGs+OworCQl9OworCX07CisKIH07CiAKLSZmZWMgeworJmF1ZG11eCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJc3NpMiB7CisJCWZzbCxhdWRtdXgtcG9ydCA9IDwxPjsKKwkJZnNsLHBvcnQtY29uZmlnID0gPAorCQkJKElNWF9BVURNVVhfVjJfUFRDUl9URlNESVIgfAorCQkJSU1YX0FVRE1VWF9WMl9QVENSX1RGU0VMKDQpIHwKKwkJCUlNWF9BVURNVVhfVjJfUFRDUl9UQ0xLRElSIHwKKwkJCUlNWF9BVURNVVhfVjJfUFRDUl9UQ1NFTCg0KSkKKwkJCUlNWF9BVURNVVhfVjJfUERDUl9SWERTRUwoNCkKKwkJPjsKKwl9OworCisJcGluczUgeworCQlmc2wsYXVkbXV4LXBvcnQgPSA8ND47CisJCWZzbCxwb3J0LWNvbmZpZyA9IDwKKwkJCTB4MDAwMDAwMDAKKwkJCUlNWF9BVURNVVhfVjJfUERDUl9SWERTRUwoMSkKKwkJPjsKKwl9OworfTsKKworJmNhbjEgewogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKLSZncG1pIHsKKyZmZWMgewogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKQEAgLTI4LDE0ICsxMTQsMTggQEAKIH07CiAKICZpMmMyIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMyPjsKLQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAlzdGF0dXMgPSAib2theSI7CiAKLQl0bHYzMjBAMTggewotCQljb21wYXRpYmxlID0gInRpLHRsdjMyMGFpYzN4IjsKKwljb2RlYzogdGx2MzIwQDE4IHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0bHYzMjBhaWMzMDA3IjsKKwkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKIAkJcmVnID0gPDB4MTg+OworCQlhaTN4LW1pY2JpYXMtdmcgPSA8Mj47CisKKwkJQVZERC1zdXBwbHkgPSA8JnNvdW5kXzN2Mz47CisJCUlPVkRELXN1cHBseSA9IDwmc291bmRfM3YzPjsKKwkJRFJWREQtc3VwcGx5ID0gPCZzb3VuZF8zdjM+OworCQlEVkRELXN1cHBseSA9IDwmc291bmRfMXY4PjsKIAl9OwogCiAJc3RtcGVANDEgewpAQCAtNTUsOSArMTQ1LDE0IEBACiB9OwogCiAmaTJjMyB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMz47Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnBjaWUgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzc2kyIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCkBAIC04NCwxOSArMTc5LDMgQEAKICZ1c2RoYzMgewogCXN0YXR1cyA9ICJva2F5IjsKIH07Ci0KLSZpb211eGMgewotCXBpbmN0cmxfaTJjMjogaTJjMmdycCB7Ci0JCWZzbCxwaW5zID0gPAotCQkJTVg2UURMX1BBRF9FSU1fRUIyX19JMkMyX1NDTAkJMHg0MDAxYjhiMQotCQkJTVg2UURMX1BBRF9FSU1fRDE2X19JMkMyX1NEQQkJMHg0MDAxYjhiMQotCQk+OwotCX07Ci0KLQlwaW5jdHJsX2kyYzM6IGkyYzNncnAgewotCQlmc2wscGlucyA9IDwKLQkJCU1YNlFETF9QQURfRUlNX0QxN19fSTJDM19TQ0wJCTB4NDAwMWI4YjEKLQkJCU1YNlFETF9QQURfRUlNX0QxOF9fSTJDM19TREEJCTB4NDAwMWI4YjEKLQkJPjsKLQl9OwotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1waHl0ZWMtcGZsYTAyLmR0c2kKaW5kZXggMGU1MGJiMC4uMTljYzI2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1waHl0ZWMtcGZsYTAyLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1waHl0ZWMtcGZsYTAyLmR0c2kKQEAgLTU4LDYgKzU4LDE4IEBACiAJfTsKIH07CiAKKyZhdWRtdXggeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2F1ZG11eD47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZjYW4xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9mbGV4Y2FuMT47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKICZlY3NwaTMgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2Vjc3BpMz47CkBAIC03Miw2ICs4NCwyMiBAQAogCX07CiB9OwogCismZmVjIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0PjsKKwlwaHktbW9kZSA9ICJyZ21paSI7CisJcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMyAyMyBHUElPX0FDVElWRV9MT1c+OworCXBoeS1zdXBwbHkgPSA8JnZkZF9ldGhfaW9fcmVnPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmdwbWkgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2dwbWlfbmFuZD47CisJbmFuZC1vbi1mbGFzaC1iYnQ7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmkyYzEgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzE+OwpAQCAtODUsOCArMTEzLDggQEAKIAlwbWljQDU4IHsKIAkJY29tcGF0aWJsZSA9ICJkbGcsZGE5MDYzIjsKIAkJcmVnID0gPDB4NTg+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvND47Ci0JCWludGVycnVwdHMgPSA8MTcgMHg4PjsgLyogYWN0aXZlLWxvdyBHUElPNF8xNyAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMj47CisJCWludGVycnVwdHMgPSA8OSAweDg+OyAvKiBhY3RpdmUtbG93IEdQSU8yXzkgKi8KIAogCQlyZWd1bGF0b3JzIHsKIAkJCXZkZGNvcmVfcmVnOiBiY29yZTEgewpAQCAtMTYyLDYgKzE5MCwxOCBAQAogCX07CiB9OwogCismaTJjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMj47CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Cit9OworCismaTJjMyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMz47CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Cit9OworCiAmaW9tdXhjIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9ob2c+OwpAQCAtMTcxLDcgKzIxMSw3IEBACiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDZRRExfUEFEX0VJTV9EMjNfX0dQSU8zX0lPMjMgMHg4MDAwMDAwMAogCQkJCU1YNlFETF9QQURfRElTUDBfREFUM19fR1BJTzRfSU8yNCAweDgwMDAwMDAwIC8qIFNQSSBOT1IgY2hpcHNlbGVjdCAqLwotCQkJCU1YNlFETF9QQURfREkwX1BJTjE1X19HUElPNF9JTzE3ICAweDgwMDAwMDAwIC8qIFBNSUMgaW50ZXJydXB0ICovCisJCQkJTVg2UURMX1BBRF9TRDRfREFUMV9fR1BJTzJfSU8wOSAgMHg4MDAwMDAwMCAvKiBQTUlDIGludGVycnVwdCAqLwogCQkJCU1YNlFETF9QQURfRU5FVF9UWEQwX19HUElPMV9JTzMwIDB4ODAwMDAwMDAgLyogR3JlZW4gTEVEICovCiAJCQkJTVg2UURMX1BBRF9FSU1fRUIzX19HUElPMl9JTzMxIDB4ODAwMDAwMDAgLyogUmVkIExFRCAqLwogCQkJPjsKQEAgLTIwNiw2ICsyNDYsMTMgQEAKIAkJCT47CiAJCX07CiAKKwkJcGluY3RybF9mbGV4Y2FuMTogZmxleGNhbjFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9LRVlfUk9XMl9fRkxFWENBTjFfUlgJMHgxYjBiMAorCQkJCU1YNlFETF9QQURfS0VZX0NPTDJfX0ZMRVhDQU4xX1RYCTB4MWIwYjAKKwkJCT47CisJCX07CisKIAkJcGluY3RybF9ncG1pX25hbmQ6IGdwbWluYW5kZ3JwIHsKIAkJCWZzbCxwaW5zID0gPAogCQkJCU1YNlFETF9QQURfTkFOREZfQ0xFX19OQU5EX0NMRQkJMHhiMGIxCkBAIC0yMzUsNiArMjgyLDI0IEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfaTJjMjogaTJjMmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VJTV9FQjJfX0kyQzJfU0NMCQkweDQwMDFiOGIxCisJCQkJTVg2UURMX1BBRF9FSU1fRDE2X19JMkMyX1NEQQkJMHg0MDAxYjhiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2kyYzM6IGkyYzNncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9FSU1fRDE3X19JMkMzX1NDTAkJMHg0MDAxYjhiMQorCQkJCU1YNlFETF9QQURfRUlNX0QxOF9fSTJDM19TREEJCTB4NDAwMWI4YjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9wY2llOiBwY2llZ3JwIHsKKwkJCWZzbCxwaW5zID0gPE1YNlFETF9QQURfREkwX1BJTjE1X19HUElPNF9JTzE3ICAweDgwMDAwMDAwPjsKKwkJfTsKKwogCQlwaW5jdHJsX3VhcnQzOiB1YXJ0M2dycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDZRRExfUEFEX0VJTV9EMjRfX1VBUlQzX1RYX0RBVEEJMHgxYjBiMQpAQCAtMjkzLDIyICszNTgsMjIgQEAKIAkJCQlNWDZRRExfUEFEX0VORVRfVFhEMV9fR1BJTzFfSU8yOSAweDgwMDAwMDAwCiAJCQk+OwogCQl9OworCisJCXBpbmN0cmxfYXVkbXV4OiBhdWRtdXhncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9ESVNQMF9EQVQxNl9fQVVENV9UWEMJMHgxMzBiMAorCQkJCU1YNlFETF9QQURfRElTUDBfREFUMTdfX0FVRDVfVFhECTB4MTEwYjAKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDE4X19BVUQ1X1RYRlMJMHgxMzBiMAorCQkJCU1YNlFETF9QQURfRElTUDBfREFUMTlfX0FVRDVfUlhECTB4MTMwYjAKKwkJCT47CisJCX07CiAJfTsKIH07CiAKLSZmZWMgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2VuZXQ+OwotCXBoeS1tb2RlID0gInJnbWlpIjsKLQlwaHktcmVzZXQtZ3Bpb3MgPSA8JmdwaW8zIDIzIEdQSU9fQUNUSVZFX0xPVz47Ci0JcGh5LXN1cHBseSA9IDwmdmRkX2V0aF9pb19yZWc+OwotCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci19OwotCi0mZ3BtaSB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZ3BtaV9uYW5kPjsKLQluYW5kLW9uLWZsYXNoLWJidDsKKyZwY2llIHsKKwlwaW5jdHJsLW5hbWUgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3BjaWU+OworCXJlc2V0LWdwaW8gPSA8JmdwaW80IDE3IDA+OwogCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXJleC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1yZXguZHRzaQppbmRleCBkZjdiY2Y4Li40ODhhNjQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXJleC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcmV4LmR0c2kKQEAgLTMwOCw3ICszMDgsNiBAQAogfTsKIAogJnNzaTEgewotCWZzbCxtb2RlID0gImkycy1zbGF2ZSI7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZXNkLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlc2QuZHRzaQppbmRleCBiYWYyZjAwLi5mMWNkMjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlc2QuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlc2QuZHRzaQpAQCAtMTA3LDEwICsxMDcsOCBAQAogCQkJIkhlYWRwaG9uZSBKYWNrIiwgIkhQT1VUUiIsCiAJCQkiRXh0IFNwayIsICJTUEtPVVRMIiwKIAkJCSJFeHQgU3BrIiwgIlNQS09VVFIiLAotCQkJIk1JQ0JJQVMiLCAiQU1JQyIsCi0JCQkiSU4zUiIsICJNSUNCSUFTIiwKLQkJCSJETUlDIiwgIk1JQ0JJQVMiLAotCQkJIkRNSUNEQVQiLCAiRE1JQyI7CisJCQkiQU1JQyIsICJNSUNCSUFTIiwKKwkJCSJJTjNSIiwgIkFNSUMiOwogCQltdXgtaW50LXBvcnQgPSA8Mj47CiAJCW11eC1leHQtcG9ydCA9IDwzPjsKIAl9OwpAQCAtMTc5LDcgKzE3Nyw3IEBACiAJY29kZWM6IHdtODk2MkAxYSB7CiAJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MiI7CiAJCXJlZyA9IDwweDFhPjsKLQkJY2xvY2tzID0gPCZjbGtzIDIwMT47CisJCWNsb2NrcyA9IDwmY2xrcyBJTVg2UURMX0NMS19DS08+OwogCQlEQ1ZERC1zdXBwbHkgPSA8JnJlZ19hdWRpbz47CiAJCURCVkRELXN1cHBseSA9IDwmcmVnX2F1ZGlvPjsKIAkJQVZERC1zdXBwbHkgPSA8JnJlZ19hdWRpbz47CkBAIC01MzEsNiArNTI5LDEwIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnNudnNfcG93ZXJvZmYgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZzc2kyIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC5kdHNpCmluZGV4IDk1OTZlZDUuLjRmYzAzYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLmR0c2kKQEAgLTMzMyw5ICszMzMsMTcgQEAKIAkJCX07CiAKIAkJCXZwdTogdnB1QDAyMDQwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImNubSxjb2RhOTYwIjsKIAkJCQlyZWcgPSA8MHgwMjA0MDAwMCAweDNjMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDAgMyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCQkgICAgICAgICAgICAgPDAgMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkJaW50ZXJydXB0LW5hbWVzID0gImJpdCIsICJqcGVnIjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNlFETF9DTEtfVlBVX0FYST4sCisJCQkJCSA8JmNsa3MgSU1YNlFETF9DTEtfTU1EQ19DSDBfQVhJPiwKKwkJCQkJIDwmY2xrcyBJTVg2UURMX0NMS19PQ1JBTT47CisJCQkJY2xvY2stbmFtZXMgPSAicGVyIiwgImFoYiIsICJvY3JhbSI7CisJCQkJcmVzZXRzID0gPCZzcmMgMT47CisJCQkJaXJhbSA9IDwmb2NyYW0+OwogCQkJfTsKIAogCQkJYWlwc3R6QDAyMDdjMDAwIHsgLyogQUlQU1RaMSAqLwpAQCAtNjU3LDYgKzY2NSwxMiBAQAogCQkJCQlpbnRlcnJ1cHRzID0gPDAgMTkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkJCQkgICAgIDwwIDIwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJCX07CisKKwkJCQlzbnZzX3Bvd2Vyb2ZmOiBzbnZzLXBvd2Vyb2ZmQDM4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcG93ZXJvZmYiOworCQkJCQlyZWcgPSA8MHgzOCAweDQ+OworCQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJCX07CiAJCQl9OwogCiAJCQllcGl0MTogZXBpdEAwMjBkMDAwMCB7IC8qIEVQSVQxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wtZXZrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzbC1ldmsuZHRzCmluZGV4IDg5OGQxNGYuLmZkYTQ5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzbC1ldmsuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzbC1ldmsuZHRzCkBAIC01ODAsNiArNTgwLDEwIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnNudnNfcG93ZXJvZmYgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZzc2kyIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wuZHRzaQppbmRleCBkZmQ4M2U2Li4zNmFiOGUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wuZHRzaQpAQCAtNTc0LDYgKzU3NCwxMiBAQAogCQkJCQlpbnRlcnJ1cHRzID0gPDAgMTkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkJCQkgICAgIDwwIDIwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJCX07CisKKwkJCQlzbnZzX3Bvd2Vyb2ZmOiBzbnZzLXBvd2Vyb2ZmQDM4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcG93ZXJvZmYiOworCQkJCQlyZWcgPSA8MHgzOCAweDQ+OworCQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJCX07CiAJCQl9OwogCiAJCQllcGl0MTogZXBpdEAwMjBkMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1zZGIuZHRzCmluZGV4IDgyZDZiMzQuLjFlNmU1Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1zZGIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1zZGIuZHRzCkBAIC0xMDUsNiArMTA1LDMwIEBACiAJCQlncGlvID0gPCZncGlvMyAyNyAwPjsKIAkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKIAkJfTsKKworCQlyZWdfcGVyaV8zdjM6IHJlZ3VsYXRvckA1IHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfcGVyaV8zdjM+OworCQkJcmVndWxhdG9yLW5hbWUgPSAicGVyaV8zdjMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCWdwaW9zID0gPCZncGlvNCAxNiBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCX07CisKKwkJcmVnX2VuZXRfM3YzOiByZWd1bGF0b3JANiB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Nj47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2VuZXRfM3YzPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gImVuZXRfM3YzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlncGlvcyA9IDwmZ3BpbzIgNiBHUElPX0FDVElWRV9MT1c+OworCQl9OwogCX07CiAKIAlzb3VuZCB7CkBAIC0xMzMsNiArMTU3LDE0IEBACiAmZmVjMSB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldDE+OworCXBoeS1zdXBwbHkgPSA8JnJlZ19lbmV0XzN2Mz47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZmZWMyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0Mj47CiAJcGh5LW1vZGUgPSAicmdtaWkiOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CkBAIC0zMDQsNiArMzM2LDEwIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnNudnNfcG93ZXJvZmYgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZzc2kyIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwpAQCAtMzk0LDYgKzQzMCwzMCBAQAogCQkJCU1YNlNYX1BBRF9SR01JSTFfUkQyX19FTkVUMV9SWF9EQVRBXzIJMHgzMDgxCiAJCQkJTVg2U1hfUEFEX1JHTUlJMV9SRDNfX0VORVQxX1JYX0RBVEFfMwkweDMwODEKIAkJCQlNWDZTWF9QQURfUkdNSUkxX1JYX0NUTF9fRU5FVDFfUlhfRU4JMHgzMDgxCisJCQkJTVg2U1hfUEFEX0VORVQyX1JYX0NMS19fRU5FVDJfUkVGX0NMS18yNU0JMHg5MQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2VuZXRfM3YzOiBlbmV0M3YzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlNYX1BBRF9FTkVUMl9DT0xfX0dQSU8yX0lPXzYJCTB4ODAwMDAwMDAKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9lbmV0MjogZW5ldDJncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2U1hfUEFEX1JHTUlJMl9UWENfX0VORVQyX1JHTUlJX1RYQwkweGEwYjkKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1REMF9fRU5FVDJfVFhfREFUQV8wCTB4YTBiMQorCQkJCU1YNlNYX1BBRF9SR01JSTJfVEQxX19FTkVUMl9UWF9EQVRBXzEJMHhhMGIxCisJCQkJTVg2U1hfUEFEX1JHTUlJMl9URDJfX0VORVQyX1RYX0RBVEFfMgkweGEwYjEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1REM19fRU5FVDJfVFhfREFUQV8zCTB4YTBiMQorCQkJCU1YNlNYX1BBRF9SR01JSTJfVFhfQ1RMX19FTkVUMl9UWF9FTgkweGEwYjEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1JYQ19fRU5FVDJfUlhfQ0xLCTB4MzA4MQorCQkJCU1YNlNYX1BBRF9SR01JSTJfUkQwX19FTkVUMl9SWF9EQVRBXzAJMHgzMDgxCisJCQkJTVg2U1hfUEFEX1JHTUlJMl9SRDFfX0VORVQyX1JYX0RBVEFfMQkweDMwODEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1JEMl9fRU5FVDJfUlhfREFUQV8yCTB4MzA4MQorCQkJCU1YNlNYX1BBRF9SR01JSTJfUkQzX19FTkVUMl9SWF9EQVRBXzMJMHgzMDgxCisJCQkJTVg2U1hfUEFEX1JHTUlJMl9SWF9DVExfX0VORVQyX1JYX0VOCTB4MzA4MQogCQkJPjsKIAkJfTsKIApAQCAtNDUyLDYgKzUxMiwxMiBAQAogCQkJPjsKIAkJfTsKIAorCQlwaW5jdHJsX3BlcmlfM3YzOiBwZXJpM3YzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlNYX1BBRF9RU1BJMUFfREFUQTBfX0dQSU80X0lPXzE2CTB4ODAwMDAwMDAKKwkJCT47CisJCX07CisKIAkJcGluY3RybF9wd20zOiBwd20zZ3JwLTEgewogCQkJZnNsLHBpbnMgPSA8CiAJCQkJTVg2U1hfUEFEX1NEMV9EQVRBMl9fUFdNM19PVVQgMHgxMTBiMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3guZHRzaQppbmRleCBmM2U4OGMwLi43YTI0ZmVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c3guZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3guZHRzaQpAQCAtNjcxLDYgKzY3MSwxMiBAQAogCQkJCQlyZWcgPSA8MHgzNCAweDU4PjsKIAkJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE5IElSUV9UWVBFX0xFVkVMX0hJR0g+LCA8R0lDX1NQSSAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCQl9OworCisJCQkJc252c19wb3dlcm9mZjogc252cy1wb3dlcm9mZkAzOCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXBvd2Vyb2ZmIjsKKwkJCQkJcmVnID0gPDB4MzggMHg0PjsKKwkJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCQl9OwogCQkJfTsKIAogCQkJZXBpdDE6IGVwaXRAMDIwZDAwMDAgewpAQCAtODc3LDcgKzg4Myw3IEBACiAJCQl9OwogCiAJCQlmZWMyOiBldGhlcm5ldEAwMjFiNDAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NnN4LWZlYyI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NnN4LWZlYyIsICJmc2wsaW14NnEtZmVjIjsKIAkJCQlyZWcgPSA8MHgwMjFiNDAwMCAweDQwMDA+OwogCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMDIgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkJCSAgICAgPEdJQ19TUEkgMTAzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW50ZWdyYXRvci5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW50ZWdyYXRvci5kdHNpCmluZGV4IDg4ZTNkNDc3Li4yOGUzOGY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbnRlZ3JhdG9yLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW50ZWdyYXRvci5kdHNpCkBAIC02LDggKzYsMTggQEAKIAogLyB7CiAJY29yZS1tb2R1bGVAMTAwMDAwMDAgewotCQljb21wYXRpYmxlID0gImFybSxjb3JlLW1vZHVsZS1pbnRlZ3JhdG9yIjsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29yZS1tb2R1bGUtaW50ZWdyYXRvciIsICJzeXNjb24iOwogCQlyZWcgPSA8MHgxMDAwMDAwMCAweDIwMD47CisKKwkJLyogVXNlIGNvcmUgbW9kdWxlIExFRCB0byBpbmRpY2F0ZSBDUFUgbG9hZCAqLworCQlsZWRAMGMuMCB7CisJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJb2Zmc2V0ID0gPDB4MGM+OworCQkJbWFzayA9IDwweDAxPjsKKwkJCWxhYmVsID0gImludGVncmF0b3I6Y29yZV9tb2R1bGUiOworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImNwdTAiOworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvbiI7CisJCX07CiAJfTsKIAogCWViaUAxMjAwMDAwMCB7CkBAIC04Miw1ICs5Miw0MSBAQAogCQkJcmVnID0gPDB4MTkwMDAwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8ND47CiAJCX07CisKKwkJc3lzY29uIHsKKwkJCS8qIERlYnVnIHJlZ2lzdGVycyBtYXBwZWQgYXMgc3lzY29uICovCisJCQljb21wYXRpYmxlID0gInN5c2NvbiI7CisJCQlyZWcgPSA8MHgxYTAwMDAwMCAweDEwPjsKKworCQkJbGVkQDA0LjAgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDQ+OworCQkJCW1hc2sgPSA8MHgwMT47CisJCQkJbGFiZWwgPSAiaW50ZWdyYXRvcjpncmVlbjAiOworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib24iOworCQkJfTsKKwkJCWxlZEAwNC4xIHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA0PjsKKwkJCQltYXNrID0gPDB4MDI+OworCQkJCWxhYmVsID0gImludGVncmF0b3I6eWVsbG93IjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA0LjIgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDQ+OworCQkJCW1hc2sgPSA8MHgwND47CisJCQkJbGFiZWwgPSAiaW50ZWdyYXRvcjpyZWQiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCQlsZWRAMDQuMyB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwND47CisJCQkJbWFzayA9IDwweDA4PjsKKwkJCQlsYWJlbCA9ICJpbnRlZ3JhdG9yOmdyZWVuMSI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS1ldm0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvazJlLWV2bS5kdHMKaW5kZXggYzU2OGYwNi4uNTYwZDYyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvazJlLWV2bS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvazJlLWV2bS5kdHMKQEAgLTEzOSwzICsxMzksMTUgQEAKIAkJfTsKIAl9OwogfTsKKworJm1kaW8geworCWV0aHBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLDg4RTE1MTQiLCAibWFydmVsbCw4OEUxNTEwIiwgImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyIjsKKwkJcmVnID0gPDA+OworCX07CisKKwlldGhwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCWNvbXBhdGlibGUgPSAibWFydmVsbCw4OEUxNTE0IiwgIm1hcnZlbGwsODhFMTUxMCIsICJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMiI7CisJCXJlZyA9IDwxPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvazJlLmR0c2kKaW5kZXggYzM1OGI0Yi4uNWZjMTQ2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS5kdHNpCkBAIC04NSw2ICs4NSw1MSBAQAogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCQlncGlvLHN5c2Nvbi1kZXYgPSA8JmRldmN0cmwgMHgyNDA+OwogCQl9OworCisJCXBjaWVAMjEwMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxrZXlzdG9uZS1wY2llIiwic25wcyxkdy1wY2llIjsKKwkJCWNsb2NrcyA9IDwmY2xrcGNpZTE+OworCQkJY2xvY2stbmFtZXMgPSAicGNpZSI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJcmVnID0gIDwweDIxMDIxMDAwIDB4MjAwMD4sIDwweDIxMDIwMDAwIDB4MTAwMD4sIDwweDAyNjIwMTI4IDQ+OworCQkJcmFuZ2VzID0gPDB4ODEwMDAwMDAgMCAwIDB4MjMyNjAwMDAgMHg0MDAwIDB4NDAwMAorCQkJCTB4ODIwMDAwMDAgMCAweDYwMDAwMDAwIDB4NjAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCW51bS1sYW5lcyA9IDwyPjsKKworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDwwIDAgMCA3PjsKKwkJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmcGNpZV9pbnRjMSAwPiwgLyogSU5UIEEgKi8KKwkJCQkJPDAgMCAwIDIgJnBjaWVfaW50YzEgMT4sIC8qIElOVCBCICovCisJCQkJCTwwIDAgMCAzICZwY2llX2ludGMxIDI+LCAvKiBJTlQgQyAqLworCQkJCQk8MCAwIDAgNCAmcGNpZV9pbnRjMSAzPjsgLyogSU5UIEQgKi8KKworCQkJcGNpZV9tc2lfaW50YzE6IG1zaS1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzNzcgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNzggSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNzkgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzODAgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzODEgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzODIgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzODMgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzODQgSVJRX1RZUEVfRURHRV9SSVNJTkc+OworCQkJfTsKKworCQkJcGNpZV9pbnRjMTogbGVnYWN5LWludGVycnVwdC1jb250cm9sbGVyIHsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM3MyBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDM3NCBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDM3NSBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDM3NiBJUlFfVFlQRV9FREdFX1JJU0lORz47CisJCQl9OworCQl9OwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9rMmwtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2sybC1ldm0uZHRzCmluZGV4IGZlYzQzMTIuLjg1Y2M3ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2sybC1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2sybC1ldm0uZHRzCkBAIC0xMTYsMyArMTE2LDE1IEBACiAJCX07CiAJfTsKIH07CisKKyZtZGlvIHsKKwlldGhwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCWNvbXBhdGlibGUgPSAibWFydmVsbCw4OEUxNTE0IiwgIm1hcnZlbGwsODhFMTUxMCIsICJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMiI7CisJCXJlZyA9IDwwPjsKKwl9OworCisJZXRocGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQljb21wYXRpYmxlID0gIm1hcnZlbGwsODhFMTUxNCIsICJtYXJ2ZWxsLDg4RTE1MTAiLCAiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjIiOworCQlyZWcgPSA8MT47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9rZXlzdG9uZS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMva2V5c3RvbmUuZHRzaQppbmRleCA1ZDNlODNmLi5jMDY1NDJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9rZXlzdG9uZS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tleXN0b25lLmR0c2kKQEAgLTI4NSw1ICsyODUsNTAgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQl0aSxzeXNjb24tZGV2ID0gPCZkZXZjdHJsIDB4MmEwPjsKIAkJfTsKKworCQlwY2llQDIxODAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksa2V5c3RvbmUtcGNpZSIsICJzbnBzLGR3LXBjaWUiOworCQkJY2xvY2tzID0gPCZjbGtwY2llPjsKKwkJCWNsb2NrLW5hbWVzID0gInBjaWUiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCXJlZyA9ICA8MHgyMTgwMTAwMCAweDIwMDA+LCA8MHgyMTgwMDAwMCAweDEwMDA+LCA8MHgwMjYyMDEyOCA0PjsKKwkJCXJhbmdlcyA9IDwweDgxMDAwMDAwIDAgMCAweDIzMjUwMDAwIDAgMHg0MDAwCisJCQkJMHg4MjAwMDAwMCAwIDB4NTAwMDAwMDAgMHg1MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJbnVtLWxhbmVzID0gPDI+OworCisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAwIDc+OworCQkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZwY2llX2ludGMwIDA+LCAvKiBJTlQgQSAqLworCQkJCQk8MCAwIDAgMiAmcGNpZV9pbnRjMCAxPiwgLyogSU5UIEIgKi8KKwkJCQkJPDAgMCAwIDMgJnBjaWVfaW50YzAgMj4sIC8qIElOVCBDICovCisJCQkJCTwwIDAgMCA0ICZwY2llX2ludGMwIDM+OyAvKiBJTlQgRCAqLworCisJCQlwY2llX21zaV9pbnRjMDogbXNpLWludGVycnVwdC1jb250cm9sbGVyIHsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDMwIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzEgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzMiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDMzIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzQgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNSBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDM2IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzcgSVJRX1RZUEVfRURHRV9SSVNJTkc+OworCQkJfTsKKworCQkJcGNpZV9pbnRjMDogbGVnYWN5LWludGVycnVwdC1jb250cm9sbGVyIHsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI2IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMjcgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAyOCBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDI5IElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJCX07CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kaXI2NjUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZGlyNjY1LmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODY5NTllCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZGlyNjY1LmR0cwpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBDbGF1ZGlvIExlaXRlIDxsZWl0ZWNAc3RhdGlja3kuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAia2lya3dvb2QuZHRzaSIKKyNpbmNsdWRlICJraXJrd29vZC02MjgxLmR0c2kiCisKKy8geworCW1vZGVsID0gIkQtTGluayBESVItNjY1IjsKKwljb21wYXRpYmxlID0gImRsaW5rLGRpci02NjUiLCAibWFydmVsbCxraXJrd29vZC04OGY2MjgxIiwgIm1hcnZlbGwsa2lya3dvb2QiOworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHg4MDAwMDAwPjsgLyogMTI4IE1CICovCisJfTsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKKwl9OworCisJbWJ1cyB7CisJCXBjaWUtY29udHJvbGxlciB7CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCXBjaWVAMSwwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCQl9OworCX07CisKKwlvY3BAZjEwMDAwMDAgeworCQlwaW5jdHJsOiBwaW4tY29udHJvbGxlckAxMDAwMCB7CisJCQlwaW5jdHJsLTAgPTwgJnBteF9sZWRfdXNiCisJCQkJICAgICAmcG14X2xlZF9pbnRlcm5ldF9ibHVlCisJCQkJICAgICAmcG14X2xlZF9pbnRlcm5ldF9hbWJlcgorCQkJCSAgICAgJnBteF9sZWRfNWcgJnBteF9sZWRfc3RhdHVzX2JsdWUKKwkJCQkgICAgICZwbXhfbGVkX3dwcyAmcG14X2xlZF9zdGF0dXNfYW1iZXIKKwkJCQkgICAgICZwbXhfbGVkXzI0ZworCQkJCSAgICAgJnBteF9idG5fcmVzdGFydCAmcG14X2J0bl93cHM+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCQkJcG14X2xlZF91c2I6IHBteC1sZWQtdXNiIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTIiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF9pbnRlcm5ldF9ibHVlOiBwbXgtbGVkLWludGVybmV0LWJsdWUgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0MiI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCQlwbXhfbGVkX2ludGVybmV0X2FtYmVyOiBwbXgtbGVkLWludGVybmV0LWFtYmVyIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDMiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF81ZzogcG14LWxlZC01ZyB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ0IjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKwkJCXBteF9sZWRfc3RhdHVzX2JsdWU6IHBteC1sZWQtc3RhdHVzLWJsdWUgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NSI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCQlwbXhfbGVkX3dwczogcG14LWxlZC13cHMgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NyI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCQlwbXhfbGVkX3N0YXR1c19hbWJlcjogcG14LWxlZC1zdGF0dXMtYW1iZXIgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0OCI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCQlwbXhfbGVkXzI0ZzogcG14LWxlZC0yNGcgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0OSI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCQlwbXhfYnRuX3Jlc3RhcnQ6IHBteC1idG4tcmVzdGFydCB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI4IjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKwkJCXBteF9idG5fd3BzOiBwbXgtYnRuLXdwcyB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ2IjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKwkJfTsKKworCQlzcGlAMTA2MDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQkJbTI1cDgwQDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAibXhpY3ksbXgyNWwxMjgwNWQiOworCQkJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKKwkJCQlyZWcgPSA8MD47CisKKwkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCWxhYmVsID0gInVib290IjsKKwkJCQkJcmVnID0gPDB4MCAweDMwMDAwPjsKKwkJCQkJcmVhZC1vbmx5OworCQkJCX07CisKKwkJCQlwYXJ0aXRpb25AMzAwMDAgeworCQkJCQlsYWJlbCA9ICJudnJhbSI7CisJCQkJCXJlZyA9IDwweDMwMDAwIDB4MTAwMDA+OworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJCXJlZyA9IDwweDQwMDAwIDB4MTgwMDAwPjsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDFjMDAwMCB7CisJCQkJCWxhYmVsID0gInJvb3RmcyI7CisJCQkJCXJlZyA9IDwweDFjMDAwMCAweGUwMDAwMD47CisJCQkJfTsKKworCQkJCWNhbF9kYXRhOiBwYXJ0aXRpb25AZmMwMDAwIHsKKwkJCQkJbGFiZWwgPSAiY2FsX2RhdGEiOworCQkJCQlyZWcgPSA8MHhmYzAwMDAgMHgxMDAwMD47CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQGZkMDAwMCB7CisJCQkJCWxhYmVsID0gImxhbmdfcGFjayI7CisJCQkJCXJlZyA9IDwweGZkMDAwMCAweDMwMDAwPjsKKwkJCQkJcmVhZC1vbmx5OworCQkJCX07CisJCQl9OworCQl9OworCisJCXNlcmlhbEAxMjAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJaTJjQDExMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpQDUwMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworCisJZ3Bpby1sZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCWJsdWUtdXNiIHsKKwkJCWxhYmVsID0gImRpcjY2NTpibHVlOnVzYiI7CisJCQlncGlvcyA9IDwmZ3BpbzAgMTIgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJCWJsdWUtaW50ZXJuZXQgeworCQkJLyogQ2FuIG9ubHkgYmUgdHVybmVkIG9uIGlmIHRoZSBJbnRlcm5ldAorCQkJICogRXRoZXJuZXQgcG9ydCBoYXMgTGluaworCQkJICovCisJCQlsYWJlbCA9ICJkaXI2NjU6Ymx1ZTppbnRlcm5ldCI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMTAgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwkJYW1iZXItaW50ZXJuZXQgeworCQkJbGFiZWwgPSAiZGlyNjY1OmFtYmVyOmludGVybmV0IjsKKwkJCWdwaW9zID0gPCZncGlvMSAxMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwkJYmx1ZS13aWZpNWcgeworCQkJbGFiZWwgPSAiZGlyNjY1OmJsdWU6NWciOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDEyIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJCWJsdWUtc3RhdHVzIHsKKwkJCWxhYmVsID0gImRpcjY2NTpibHVlOnN0YXR1cyI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMTMgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJCWJsdWUtd3BzIHsKKwkJCWxhYmVsID0gImRpcjY2NTpibHVlOndwcyI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMTUgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJCWFtYmVyLXN0YXR1cyB7CisJCQlsYWJlbCA9ICJkaXI2NjU6YW1iZXI6c3RhdHVzIjsKKwkJCWdwaW9zID0gPCZncGlvMSAxNiBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwkJYmx1ZS0yNGcgeworCQkJbGFiZWwgPSAiZGlyNjY1OmJsdWU6MjRnIjsKKwkJCWdwaW9zID0gPCZncGlvMSAxNyBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlyZXNldCB7CisJCQlsYWJlbCA9ICJyZXNldCI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9SRVNUQVJUPjsKKwkJCWdwaW9zID0gPCZncGlvMCAyOCBHUElPX0FDVElWRV9MT1c+OworCQl9OworCQl3cHMgeworCQkJbGFiZWwgPSAid3BzIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1dQU19CVVRUT04+OworCQkJZ3Bpb3MgPSA8JmdwaW8xIDE0IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKKworCWRzYUAwIHsKKwkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGRzYSI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlkc2EsZXRoZXJuZXQgPSA8JmV0aDBwb3J0PjsKKwkJZHNhLG1paS1idXMgPSA8Jm1kaW8+OworCisJCXN3aXRjaEAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MCAwPjsJLyogTURJTyBhZGRyZXNzIDAsIHN3aXRjaCAwIGluIHRyZWUgKi8KKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJbGFiZWwgPSAibGFuNCI7CisJCQl9OworCisJCQlwb3J0QDEgeworCQkJICAgICAgIHJlZyA9IDwxPjsKKwkJCSAgICAgICBsYWJlbCA9ICJsYW4zIjsKKwkJCX07CisKKwkJCXBvcnRAMiB7CisJCQkgICAgICAgcmVnID0gPDI+OworCQkJICAgICAgIGxhYmVsID0gImxhbjIiOworCQkJfTsKKworCQkJcG9ydEAzIHsKKwkJCSAgICAgICByZWcgPSA8Mz47CisJCQkgICAgICAgbGFiZWwgPSAibGFuMSI7CisJCQl9OworCisJCQlwb3J0QDQgeworCQkJCXJlZyA9IDw0PjsKKwkJCQlsYWJlbCA9ICJ3YW4iOworCQkJfTsKKworCQkJcG9ydEA2IHsKKwkJCSAgICAgICByZWcgPSA8Nj47CisJCQkgICAgICAgbGFiZWwgPSAiY3B1IjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZtZGlvIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisvKiBldGgwIGlzIGNvbm5lY3RlZCB0byBhIE1hcnZlbGwgODhFNjE3MSBzd2l0Y2gsIHdpdGhvdXQgYSBQSFkuIFNvIHNldAorICogZml4ZWQgc3BlZWQgYW5kIGR1cGxleC4gKi8KKyZldGgwIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlldGhlcm5ldDAtcG9ydEAwIHsKKwkJc3BlZWQgPSA8MTAwMD47CisJCWR1cGxleCA9IDwxPjsKKwl9OworfTsKKworLyogZXRoMSBpcyBjb25uZWN0ZWQgdG8gdGhlIHN3aXRjaCBhcyB3ZWxsLiBIb3dldmVyIERTQSBvbmx5IHN1cHBvcnRzIGEKKyAqIHNpbmdsZSBDUFUgcG9ydC4gU28gbGVhdmUgdGhpcyBwb3J0IGRpc2FibGVkIHRvIGF2b2lkIGNvbmZ1c2lvbi4gKi8KKworJmV0aDEgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCisvKiBUaGVyZSBpcyBubyBiYXR0ZXJ5IG9uIHRoZSBib2FyZHMsIHNvIHRoZSBSVEMgZG9lcyBub3Qga2VlcCB0aW1lCisgKiB3aGVuIHRoZXJlIGlzIG5vIHBvd2VyLCBtYWtpbmcgaXQgdXNlbGVzcy4gKi8KKyZydGMgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtc3lub2xvZ3kuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXN5bm9sb2d5LmR0c2kKaW5kZXggODExZTA5Ny4uOGJlNWIyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtc3lub2xvZ3kuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1zeW5vbG9neS5kdHNpCkBAIC0yNjYsNyArMjY2LDcgQEAKIAogCQkJczM1MzkwYTogczM1MzkwYUAzMCB7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCQljb21wYXRpYmxlID0gInNzaSxzMzUzOTBhIjsKKwkJCQljb21wYXRpYmxlID0gInNpaSxzMzUzOTBhIjsKIAkJCQlyZWcgPSA8MHgzMD47CiAJCQl9OwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbHMxMDIxYS1xZHMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvbHMxMDIxYS1xZHMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNWUxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLXFkcy5kdHMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSAibHMxMDIxYS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJMUzEwMjFBIFFEUyBCb2FyZCI7CisKKwlhbGlhc2VzIHsKKwkJZW5ldDBfcmdtaWlfcGh5ID0gJnJnbWlpX3BoeTE7CisJCWVuZXQxX3JnbWlpX3BoeSA9ICZyZ21paV9waHkyOworCQllbmV0Ml9yZ21paV9waHkgPSAmcmdtaWlfcGh5MzsKKwkJZW5ldDBfc2dtaWlfcGh5ID0gJnNnbWlpX3BoeTFjOworCQllbmV0MV9zZ21paV9waHkgPSAmc2dtaWlfcGh5MWQ7CisJfTsKK307CisKKyZkc3BpMCB7CisJYnVzLW51bSA9IDwwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlkc3BpZmxhc2g6IGF0NDVkYjAyMWRAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDQ1ZGIwMjFkIiwgImF0bWVsLGF0NDUiLCAiYXRtZWwsZGF0YWZsYXNoIjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTYwMDAwMDA+OworCQlzcGktY3BvbDsKKwkJc3BpLWNwaGE7CisJCXJlZyA9IDwwPjsKKwl9OworfTsKKworJmkyYzAgeworCXN0YXR1cyA9ICJva2F5IjsKKworCXBjYTk1NDc6IG11eEA3NyB7CisJCXJlZyA9IDwweDc3PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWkyY0AwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgwPjsKKworCQkJZHMzMjMyOiBydGNANjggeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMzIzMiI7CisJCQkJcmVnID0gPDB4Njg+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQl9OworCQl9OworCisJCWkyY0AyIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgyPjsKKworCQkJaW5hMjIwQDQwIHsKKwkJCQljb21wYXRpYmxlID0gInRpLGluYTIyMCI7CisJCQkJcmVnID0gPDB4NDA+OworCQkJCXNodW50LXJlc2lzdG9yID0gPDEwMDA+OworCQkJfTsKKworCQkJaW5hMjIwQDQxIHsKKwkJCQljb21wYXRpYmxlID0gInRpLGluYTIyMCI7CisJCQkJcmVnID0gPDB4NDE+OworCQkJCXNodW50LXJlc2lzdG9yID0gPDEwMDA+OworCQkJfTsKKwkJfTsKKworCQlpMmNAMyB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4Mz47CisKKwkJCWVlcHJvbUA1NiB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCwyNGM1MTIiOworCQkJCXJlZyA9IDwweDU2PjsKKwkJCX07CisKKwkJCWVlcHJvbUA1NyB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCwyNGM1MTIiOworCQkJCXJlZyA9IDwweDU3PjsKKwkJCX07CisKKwkJCWFkdDc0NjFhQDRjIHsKKwkJCQljb21wYXRpYmxlID0gImFkaSxhZHQ3NDYxYSI7CisJCQkJcmVnID0gPDB4NGM+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmlmYyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8MT47CisJLyogTk9SLCBOQU5EIEZsYXNoZXMgYW5kIEZQR0Egb24gYm9hcmQgKi8KKwlyYW5nZXMgPSA8MHgwIDB4MCAweDAgMHg2MDAwMDAwMCAweDA4MDAwMDAwCisJCSAgMHgyIDB4MCAweDAgMHg3ZTgwMDAwMCAweDAwMDEwMDAwCisJCSAgMHgzIDB4MCAweDAgMHg3ZmIwMDAwMCAweDAwMDAwMTAwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlub3JAMCwwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCXJlZyA9IDwweDAgMHgwIDB4ODAwMDAwMD47CisJCWJhbmstd2lkdGggPSA8Mj47CisJCWRldmljZS13aWR0aCA9IDwxPjsKKwl9OworCisJZnBnYTogYm9hcmQtY29udHJvbEAzLDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweDMgMHgwIDB4MDAwMDEwMD47CisJCWJhbmstd2lkdGggPSA8MT47CisJCWRldmljZS13aWR0aCA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMyAwIDB4MTAwPjsKKworCQltZGlvLW11eC1lbWkxIHsKKwkJCWNvbXBhdGlibGUgPSAibWRpby1tdXgtbW1pb3JlZyI7CisJCQltZGlvLXBhcmVudC1idXMgPSA8Jm1kaW8wPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHg1NCAxPjsgLyogQlJEQ0ZHNCAqLworCQkJbXV4LW1hc2sgPSA8MHhlMD47IC8qIEVNSTFbMjowXSAqLworCisJCQkvKiBPbmJvYXJkIFBIWXMgKi8KKwkJCWxzMTAyMWFtZGlvMDogbWRpb0AwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJcmdtaWlfcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQl9OworCQkJfTsKKworCQkJbHMxMDIxYW1kaW8xOiBtZGlvQDIwIHsKKwkJCQlyZWcgPSA8MHgyMD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJcmdtaWlfcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQl9OworCQkJfTsKKworCQkJbHMxMDIxYW1kaW8yOiBtZGlvQDQwIHsKKwkJCQlyZWcgPSA8MHg0MD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJcmdtaWlfcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQl9OworCQkJfTsKKworCQkJbHMxMDIxYW1kaW8zOiBtZGlvQDYwIHsKKwkJCQlyZWcgPSA8MHg2MD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJc2dtaWlfcGh5MWM6IGV0aGVybmV0LXBoeUAxYyB7CisJCQkJCXJlZyA9IDwweDFjPjsKKwkJCQl9OworCQkJfTsKKworCQkJbHMxMDIxYW1kaW80OiBtZGlvQDgwIHsKKwkJCQlyZWcgPSA8MHg4MD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJc2dtaWlfcGh5MWQ6IGV0aGVybmV0LXBoeUAxZCB7CisJCQkJCXJlZyA9IDwweDFkPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmxwdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtZGlvMCB7CisJdGJpMDogdGJpLXBoeUA4IHsKKwkJcmVnID0gPDB4OD47CisJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEtdHdyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEtdHdyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmM1OTFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbHMxMDIxYS10d3IuZHRzCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KKyAqCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgImxzMTAyMWEuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTFMxMDIxQSBUV1IgQm9hcmQiOworCisJYWxpYXNlcyB7CisJCWVuZXQyX3JnbWlpX3BoeSA9ICZyZ21paV9waHkxOworCQllbmV0MF9zZ21paV9waHkgPSAmc2dtaWlfcGh5MjsKKwkJZW5ldDFfc2dtaWlfcGh5ID0gJnNnbWlpX3BoeTA7CisJfTsKK307CisKKyZkc3BpMSB7CisJYnVzLW51bSA9IDwwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlkc3BpZmxhc2g6IHMyNWZsMDY0a0AwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gInNwYW5zaW9uLHMyNWZsMDY0ayI7CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDE2MDAwMDAwPjsKKwkJc3BpLWNwb2w7CisJCXNwaS1jcGhhOworCQlyZWcgPSA8MD47CisJfTsKK307CisKKyZpMmMwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmlmYyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8MT47CisJLyogTk9SIEZsYXNoIG9uIGJvYXJkICovCisJcmFuZ2VzID0gPDB4MCAweDAgMHgwIDB4NjAwMDAwMDAgMHgwODAwMDAwMD47CisJc3RhdHVzID0gIm9rYXkiOworCisJbm9yQDAsMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQlyZWcgPSA8MHgwIDB4MCAweDgwMDAwMDA+OworCQliYW5rLXdpZHRoID0gPDI+OworCQlkZXZpY2Utd2lkdGggPSA8MT47CisJfTsKK307CisKKyZscHVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWRpbzAgeworCXNnbWlpX3BoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJcmVnID0gPDB4MD47CisJfTsKKwlyZ21paV9waHkxOiBldGhlcm5ldC1waHlAMSB7CisJCXJlZyA9IDwweDE+OworCX07CisJc2dtaWlfcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQlyZWcgPSA8MHgyPjsKKwl9OworCXRiaTE6IHRiaS1waHlAMWYgeworCQlyZWcgPSA8MHgxZj47CisJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTdkYTE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbHMxMDIxYS5kdHNpCkBAIC0wLDAgKzEsNDA4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KKyAqCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJza2VsZXRvbjY0LmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorCisvIHsKKwljb21wYXRpYmxlID0gImZzbCxsczEwMjFhIjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmbHB1YXJ0MDsKKwkJc2VyaWFsMSA9ICZscHVhcnQxOworCQlzZXJpYWwyID0gJmxwdWFydDI7CisJCXNlcmlhbDMgPSAmbHB1YXJ0MzsKKwkJc2VyaWFsNCA9ICZscHVhcnQ0OworCQlzZXJpYWw1ID0gJmxwdWFydDU7CisJCXN5c2NsayA9ICZzeXNjbGs7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QGYwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweGYwMD47CisJCQljbG9ja3MgPSA8JmNsdXN0ZXIxX2Nsaz47CisJCX07CisKKwkJY3B1QGYwMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweGYwMT47CisJCQljbG9ja3MgPSA8JmNsdXN0ZXIxX2Nsaz47CisJCX07CisJfTsKKworCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjctdGltZXIiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgKEdJQ19DUFVfTUFTS19TSU1QTEUoMikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPEdJQ19QUEkgMTQgKEdJQ19DUFVfTUFTS19TSU1QTEUoMikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPEdJQ19QUEkgMTEgKEdJQ19DUFVfTUFTS19TSU1QTEUoMikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPEdJQ19QUEkgMTAgKEdJQ19DUFVfTUFTS19TSU1QTEUoMikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPjsKKwl9OworCisJcG11IHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3LXBtdSI7CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMzggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDEzOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJc29jIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlyYW5nZXM7CisKKwkJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxNDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNy1naWMiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJcmVnID0gPDB4MCAweDE0MDEwMDAgMHgwIDB4MTAwMD4sCisJCQkgICAgICA8MHgwIDB4MTQwMjAwMCAweDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDAgMHgxNDA0MDAwIDB4MCAweDIwMDA+LAorCQkJICAgICAgPDB4MCAweDE0MDYwMDAgMHgwIDB4MjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgOSAoR0lDX0NQVV9NQVNLX1NJTVBMRSgyKSB8IElSUV9UWVBFX0xFVkVMX0hJR0gpPjsKKworCQl9OworCisJCWlmYzogaWZjQDE1MzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsaWZjIiwgInNpbXBsZS1idXMiOworCQkJcmVnID0gPDB4MCAweDE1MzAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQl9OworCisJCWRjZmc6IGRjZmdAMWVlMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWRjZmciLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDAgMHgxZWUwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWJpZy1lbmRpYW47CisJCX07CisKKwkJZXNkaGM6IGVzZGhjQDE1NjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNkaGMiOworCQkJcmVnID0gPDB4MCAweDE1NjAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDk0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJdm9sdGFnZS1yYW5nZXMgPSA8MTgwMCAxODAwIDMzMDAgMzMwMD47CisJCQlzZGhjaSxhdXRvLWNtZDEyOworCQkJYmlnLWVuZGlhbjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2NmZzogc2NmZ0AxNTcwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtc2NmZyIsICJzeXNjb24iOworCQkJcmVnID0gPDB4MCAweDE1NzAwMDAgMHgwIDB4MTAwMDA+OworCQl9OworCisJCWNsb2NrZ2VuOiBjbG9ja2luZ0AxZWUxMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXMgPSA8MHgwIDB4MCAweDFlZTEwMDAgMHgxMDAwMD47CisKKwkJCXN5c2Nsazogc3lzY2xrIHsKKwkJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInN5c2NsayI7CisJCQl9OworCisJCQljZ2FfcGxsMTogcGxsQDgwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wscW9yaXEtY29yZS1wbGwtMi4wIjsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJcmVnID0gPDB4ODAwIDB4MTA+OworCQkJCWNsb2NrcyA9IDwmc3lzY2xrPjsKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2dhLXBsbDEiLCAiY2dhLXBsbDEtZGl2MiIsCisJCQkJCQkgICAgICJjZ2EtcGxsMS1kaXY0IjsKKwkJCX07CisKKwkJCXBsYXRmb3JtX2NsazogcGxsQGMwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wscW9yaXEtY29yZS1wbGwtMi4wIjsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJcmVnID0gPDB4YzAwIDB4MTA+OworCQkJCWNsb2NrcyA9IDwmc3lzY2xrPjsKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAicGxhdGZvcm0tY2xrIiwgInBsYXRmb3JtLWNsay1kaXYyIjsKKwkJCX07CisKKwkJCWNsdXN0ZXIxX2NsazogY2xrMGMwQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHFvcmlxLWNvcmUtbXV4LTIuMCI7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCXJlZyA9IDwweDAgMHgxMD47CisJCQkJY2xvY2stbmFtZXMgPSAicGxsMWNnYSIsICJwbGwxY2dhLWRpdjIiLCAicGxsMWNnYS1kaXY0IjsKKwkJCQljbG9ja3MgPSA8JmNnYV9wbGwxIDA+LCA8JmNnYV9wbGwxIDE+LCA8JmNnYV9wbGwxIDI+OworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbHVzdGVyMS1jbGsiOworCQkJfTsKKwkJfTsKKworCQlkc3BpMDogZHNwaUAyMTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWRzcGkiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDAgMHgyMTAwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA5NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLW5hbWVzID0gImRzcGkiOworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQlzcGktbnVtLWNoaXBzZWxlY3RzID0gPDU+OworCQkJYmlnLWVuZGlhbjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZHNwaTE6IGRzcGlAMjExMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1kc3BpIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgwIDB4MjExMDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1uYW1lcyA9ICJkc3BpIjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJc3BpLW51bS1jaGlwc2VsZWN0cyA9IDw1PjsKKwkJCWJpZy1lbmRpYW47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzA6IGkyY0AyMTgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWkyYyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MCAweDIxODAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMxOiBpMmNAMjE5MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1pMmMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDAgMHgyMTkwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMjogaTJjQDIxYTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtaTJjIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgwIDB4MjFhMDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMjFjMDUwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCwxNjU1MC1GSUZPNjQiLCAibnMxNjU1MGEiOworCQkJcmVnID0gPDB4MCAweDIxYzA1MDAgMHgwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWZpZm8tc2l6ZSA9IDwxNT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQxOiBzZXJpYWxAMjFjMDYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCwxNjU1MC1GSUZPNjQiLCAibnMxNjU1MGEiOworCQkJcmVnID0gPDB4MCAweDIxYzA2MDAgMHgwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWZpZm8tc2l6ZSA9IDwxNT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQyOiBzZXJpYWxAMjFkMDUwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCwxNjU1MC1GSUZPNjQiLCAibnMxNjU1MGEiOworCQkJcmVnID0gPDB4MCAweDIxZDA1MDAgMHgwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWZpZm8tc2l6ZSA9IDwxNT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQzOiBzZXJpYWxAMjFkMDYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCwxNjU1MC1GSUZPNjQiLCAibnMxNjU1MGEiOworCQkJcmVnID0gPDB4MCAweDIxZDA2MDAgMHgwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWZpZm8tc2l6ZSA9IDwxNT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWxwdWFydDA6IHNlcmlhbEAyOTUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtbHB1YXJ0IjsKKwkJCXJlZyA9IDwweDAgMHgyOTUwMDAwIDB4MCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDgwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZzeXNjbGs+OworCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbHB1YXJ0MTogc2VyaWFsQDI5NjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYS1scHVhcnQiOworCQkJcmVnID0gPDB4MCAweDI5NjAwMDAgMHgwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWxwdWFydDI6IHNlcmlhbEAyOTcwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtbHB1YXJ0IjsKKwkJCXJlZyA9IDwweDAgMHgyOTcwMDAwIDB4MCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDgyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlscHVhcnQzOiBzZXJpYWxAMjk4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWxwdWFydCI7CisJCQlyZWcgPSA8MHgwIDB4Mjk4MDAwMCAweDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbHB1YXJ0NDogc2VyaWFsQDI5OTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYS1scHVhcnQiOworCQkJcmVnID0gPDB4MCAweDI5OTAwMDAgMHgwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWxwdWFydDU6IHNlcmlhbEAyOWEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtbHB1YXJ0IjsKKwkJCXJlZyA9IDwweDAgMHgyOWEwMDAwIDB4MCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl3ZG9nMDogd2F0Y2hkb2dAMmFkMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxpbXgyMS13ZHQiOworCQkJcmVnID0gPDB4MCAweDJhZDAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJY2xvY2stbmFtZXMgPSAid2RvZy1lbiI7CisJCQliaWctZW5kaWFuOworCQl9OworCisJCXNhaTE6IHNhaUAyYjUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXNhaSI7CisJCQlyZWcgPSA8MHgwIDB4MmI1MDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTMyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQljbG9jay1uYW1lcyA9ICJzYWkiOworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJCWRtYXMgPSA8JmVkbWEwIDEgNDc+LAorCQkJICAgICAgIDwmZWRtYTAgMSA0Nj47CisJCQliaWctZW5kaWFuOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzYWkyOiBzYWlAMmI2MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1zYWkiOworCQkJcmVnID0gPDB4MCAweDJiNjAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEzMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJY2xvY2stbmFtZXMgPSAic2FpIjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCQlkbWFzID0gPCZlZG1hMCAxIDQ1PiwKKwkJCSAgICAgICA8JmVkbWEwIDEgNDQ+OworCQkJYmlnLWVuZGlhbjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZWRtYTA6IGVkbWFAMmMwMDAwMCB7CisJCQkjZG1hLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZWRtYSI7CisJCQlyZWcgPSA8MHgwIDB4MmMwMDAwMCAweDAgMHgxMDAwMD4sCisJCQkgICAgICA8MHgwIDB4MmMxMDAwMCAweDAgMHgxMDAwMD4sCisJCQkgICAgICA8MHgwIDB4MmMyMDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMTM1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJaW50ZXJydXB0LW5hbWVzID0gImVkbWEtdHgiLCAiZWRtYS1lcnIiOworCQkJZG1hLWNoYW5uZWxzID0gPDMyPjsKKwkJCWJpZy1lbmRpYW47CisJCQljbG9jay1uYW1lcyA9ICJkbWFtdXgwIiwgImRtYW11eDEiOworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT4sCisJCQkJIDwmcGxhdGZvcm1fY2xrIDE+OworCQl9OworCisJCW1kaW8wOiBtZGlvQDJkMjQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCWRldmljZV90eXBlID0gIm1kaW8iOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDAgMHgyZDI0MDAwIDB4MCAweDQwMDA+OworCQl9OworCisJCXVzYkA4NjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHItdjIuNSIsICJmc2wtdXNiMi1kciI7CisJCQlyZWcgPSA8MHgwIDB4ODYwMDAwMCAweDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNzEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlkcl9tb2RlID0gImhvc3QiOworCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCX07CisKKwkJdXNiM0AzMTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkd2MzIjsKKwkJCXJlZyA9IDwweDAgMHgzMTAwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA5MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWRyX21vZGUgPSAiaG9zdCI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tZXNvbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb24uZHRzaQppbmRleCBlNjUzOWVhLi4wM2JjZmY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9tZXNvbi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uLmR0c2kKQEAgLTUwLDYgKzUwLDEzIEBACiAvIHsKIAlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCisJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAYzQyMDAwMDAgeworCQljb21wYXRpYmxlID0gImFybSxwbDMxMC1jYWNoZSI7CisJCXJlZyA9IDwweGM0MjAwMDAwIDB4MTAwMD47CisJCWNhY2hlLXVuaWZpZWQ7CisJCWNhY2hlLWxldmVsID0gPDI+OworCX07CisKIAlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQGM0MzAxMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7CiAJCXJlZyA9IDwweGM0MzAxMDAwIDB4MTAwMD4sCkBAIC0xMDYsNSArMTEzLDM1IEBACiAJCQljbG9ja3MgPSA8JmNsazgxPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CisKKwkJaTJjX0FPOiBpMmNAYzgxMDA1MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uNi1pMmMiOworCQkJcmVnID0gPDB4YzgxMDA1MDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgOTIgMT47CisJCQljbG9ja3MgPSA8JmNsazgxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY19BOiBpMmNAYzExMDg1MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uNi1pMmMiOworCQkJcmVnID0gPDB4YzExMDg1MDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMjEgMT47CisJCQljbG9ja3MgPSA8JmNsazgxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY19COiBpMmNAYzExMDg3YzAgeworCQkJY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uNi1pMmMiOworCQkJcmVnID0gPDB4YzExMDg3YzAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTI4IDE+OworCQkJY2xvY2tzID0gPCZjbGs4MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKIAl9OwogfTsgLyogZW5kIG9mIC8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uNi1hdHYxMjAwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uNi1hdHYxMjAwLmR0cwppbmRleCBkYzI1NDFmYS4uZDdkMzUxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb242LWF0djEyMDAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uNi1hdHYxMjAwLmR0cwpAQCAtNTAsNyArNTAsNyBAQAogCiAvIHsKIAltb2RlbCA9ICJHZW5pYXRlY2ggQVRWMTIwMCI7Ci0JY29tcGF0aWJsZSA9ICJnZW5pYXRlY2gsYXR2MTIwMCI7CisJY29tcGF0aWJsZSA9ICJnZW5pYXRlY2gsYXR2MTIwMCIsICJhbWxvZ2ljLG1lc29uNiI7CiAKIAlhbGlhc2VzIHsKIAkJc2VyaWFsMCA9ICZ1YXJ0X0FPOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb242LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYuZHRzaQppbmRleCA0YmE0OTEyLi44YjMzYmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYuZHRzaQpAQCAtNjAsMTIgKzYwLDE0IEBACiAJCWNwdUAyMDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CiAJCQlyZWcgPSA8MHgyMDA+OwogCQl9OwogCiAJCWNwdUAyMDEgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CiAJCQlyZWcgPSA8MHgyMDE+OwogCQl9OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tZXNvbjguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uOC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDQyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjguZHRzaQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgQ2FybG8gQ2Fpb25lIDxjYXJsb0BjYWlvbmUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KKyAqCisgKiAgYSkgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvaW5jbHVkZS8gIm1lc29uLmR0c2kiCisKKy8geworCW1vZGVsID0gIkFtbG9naWMgTWVzb244IFNvQyI7CisJY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uOCI7CisKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMjAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MjAwPjsKKwkJfTsKKworCQljcHVAMjAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MjAxPjsKKwkJfTsKKworCQljcHVAMjAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MjAyPjsKKwkJfTsKKworCQljcHVAMjAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MjAzPjsKKwkJfTsKKwl9OworCisJY2xrODE6IGNsa0AwIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDE0MTY2NjY2Nj47CisJfTsKK307IC8qIGVuZCBvZiAvICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tdDY1OTItZXZiLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210NjU5Mi1ldmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzIzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9tdDY1OTItZXZiLmR0cwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSG93YXJkIENoZW4gPGliYW5lemNoZW5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDY1OTIuZHRzaSIKKworLyB7CisJbW9kZWwgPSAibXQ2NTkyIGV2YiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1OTItZXZiIiwgIm1lZGlhdGVrLG10NjU5MiI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDQwMDAwMDAwPjsKKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ2NTkyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9tdDY1OTIuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWU1YTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ2NTkyLmR0c2kKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEhvd2FyZCBDaGVuIDxpYmFuZXpjaGVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKyNpbmNsdWRlICJza2VsZXRvbi5kdHNpIgorCisvIHsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NjU5MiI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgwPjsKKwkJfTsKKwkJY3B1QDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgxPjsKKwkJfTsKKwkJY3B1QDIgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgyPjsKKwkJfTsKKwkJY3B1QDMgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgzPjsKKwkJfTsKKwkJY3B1QDQgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHg0PjsKKwkJfTsKKwkJY3B1QDUgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHg1PjsKKwkJfTsKKwkJY3B1QDYgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHg2PjsKKwkJfTsKKwkJY3B1QDcgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHg3PjsKKwkJfTsKKwl9OworCisJc3lzdGVtX2NsazogZHVtbXkxM20geworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwlydGNfY2xrOiBkdW1teTMyayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MzIwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCXRpbWVyOiB0aW1lckAxMDAwODAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2NTc3LXRpbWVyIjsKKwkJcmVnID0gPDB4MTAwMDgwMDAgMHg4MD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNDQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sIDwmcnRjX2Nsaz47CisJCWNsb2NrLW5hbWVzID0gInN5c3RlbS1jbGsiLCAicnRjLWNsayI7CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTAyMTEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctZ2ljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweDEwMjExMDAwIDB4MTAwMD4sCisJCSAgICAgIDwweDEwMjEyMDAwIDB4MTAwMD47CisJfTsKKworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTI3LW1vb3NlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEyNy1tb29zZS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjYmEwZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEyNy1tb29zZS5kdHMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpvZS5DIDx5aW5nam9lLmNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDgxMjcuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ4MTI3IE1vb3NlIEJvYXJkIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODEyNy1tb29zZSIsICJtZWRpYXRlayxtdDgxMjciOworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg4MDAwMDAwMCAwIDB4NDAwMDAwMDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTI3LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9tdDgxMjcuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjRjMGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTI3LmR0c2kKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpvZS5DIDx5aW5nam9lLmNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgInNrZWxldG9uNjQuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxMjciOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4MD47CisJCX07CisJCWNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4MT47CisJCX07CisJCWNwdUAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4Mj47CisJCX07CisJCWNwdUAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4Mz47CisJCX07CisKKwl9OworCisJY2xvY2tzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXM7CisKKwkJc3lzdGVtX2NsazogZHVtbXkxM20geworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMwMDAwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQl9OworCisJCXJ0Y19jbGs6IGR1bW15MzJrIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJfTsKKwl9OworCisJc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXM7CisKKwkJdGltZXI6IHRpbWVyQDEwMDA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTI3LXRpbWVyIiwKKwkJCQkJIm1lZGlhdGVrLG10NjU3Ny10aW1lciI7CisJCQlyZWcgPSA8MCAweDEwMDA4MDAwIDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPiwgPCZydGNfY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInN5c3RlbS1jbGsiLCAicnRjLWNsayI7CisJCX07CisKKwkJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxMDIxMTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctZ2ljIjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCXJlZyA9IDwwIDB4MTAyMTEwMDAgMCAweDEwMDA+LAorCQkJICAgICAgPDAgMHgxMDIxMjAwMCAwIDB4MTAwMD4sCisJCQkgICAgICA8MCAweDEwMjE0MDAwIDAgMHgyMDAwPiwKKwkJCSAgICAgIDwwIDB4MTAyMTYwMDAgMCAweDIwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTM1LWV2YnAxLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEzNS1ldmJwMS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhZGY5NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEzNS1ldmJwMS5kdHMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpvZS5DIDx5aW5nam9lLmNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDgxMzUuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ4MTM1IGV2YWx1YXRpb24gYm9hcmQiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTM1LWV2YnAxIiwgIm1lZGlhdGVrLG10ODEzNSI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDgwMDAwMDAwIDAgMHg0MDAwMDAwMD47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tdDgxMzUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEzNS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNTZhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9tdDgxMzUuZHRzaQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpvZS5DIDx5aW5nam9lLmNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgInNrZWxldG9uNjQuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxMzUiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwljcHUtbWFwIHsKKwkJY2x1c3RlcjAgeworCQkJY29yZTAgeworCQkJCWNwdSA9IDwmY3B1MD47CisJCQl9OworCQkJY29yZTEgeworCQkJCWNwdSA9IDwmY3B1MT47CisJCQl9OworCQl9OworCisJCWNsdXN0ZXIxIHsKKwkJCWNvcmUwIHsKKwkJCQljcHUgPSA8JmNwdTI+OworCQkJfTsKKwkJCWNvcmUxIHsKKwkJCQljcHUgPSA8JmNwdTM+OworCQkJfTsKKwkJfTsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHUwOiBjcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCXJlZyA9IDwweDAwMD47CisJCX07CisKKwkJY3B1MTogY3B1QDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgwMDE+OworCQl9OworCisJCWNwdTI6IGNwdUAxMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4MTAwPjsKKwkJfTsKKworCQljcHUzOiBjcHVAMTAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDEwMT47CisJCX07CisJfTsKKworCWNsb2NrcyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzOworCisJCXN5c3RlbV9jbGs6IGR1bW15MTNtIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlydGNfY2xrOiBkdW1teTMyayB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCX07CisJfTsKKworCXNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzOworCisJCXRpbWVyOiB0aW1lckAxMDAwODAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODEzNS10aW1lciIsCisJCQkJCSJtZWRpYXRlayxtdDY1NzctdGltZXIiOworCQkJcmVnID0gPDAgMHgxMDAwODAwMCAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sIDwmcnRjX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJzeXN0ZW0tY2xrIiwgInJ0Yy1jbGsiOworCQl9OworCisJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTAyMTEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNS1naWMiOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJcmVnID0gPDAgMHgxMDIxMTAwMCAwIDB4MTAwMD4sCisJCQkgICAgICA8MCAweDEwMjEyMDAwIDAgMHgxMDAwPiwKKwkJCSAgICAgIDwwIDB4MTAyMTQwMDAgMCAweDIwMDA+LAorCQkJICAgICAgPDAgMHgxMDIxNjAwMCAwIDB4MjAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwLWdwbWMtc21zYzkxMXguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtZ3BtYy1zbXNjOTExeC5kdHNpCmluZGV4IDUyMWM1ODcuLjQ0NWZhZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtZ3BtYy1zbXNjOTExeC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtZ3BtYy1zbXNjOTExeC5kdHNpCkBAIC0yMywyNCArMjMsMjkgQEAKIAlldGhlcm5ldEBncG1jIHsKIAkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkyMjEiLCAic21zYyxsYW45MTE1IjsKIAkJYmFuay13aWR0aCA9IDwyPjsKLQkJZ3BtYyxtdXgtYWRkLWRhdGE7Ci0JCWdwbWMsY3Mtb24tbnMgPSA8MT47Ci0JCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDE4MD47Ci0JCWdwbWMsY3Mtd3Itb2ZmLW5zID0gPDE4MD47Ci0JCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDwxOD47Ci0JCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0OD47Ci0JCWdwbWMsb2Utb24tbnMgPSA8NTQ+OwotCQlncG1jLG9lLW9mZi1ucyA9IDwxNjg+OwotCQlncG1jLHdlLW9uLW5zID0gPDU0PjsKLQkJZ3BtYyx3ZS1vZmYtbnMgPSA8MTY4PjsKLQkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwxODY+OwotCQlncG1jLHdyLWN5Y2xlLW5zID0gPDE4Nj47Ci0JCWdwbWMsYWNjZXNzLW5zID0gPDE0ND47Ci0JCWdwbWMscGFnZS1idXJzdC1hY2Nlc3MtbnMgPSA8MjQ+OwotCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDkwPjsKLQkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDw5MD47Ci0JCWdwbWMsY3ljbGUyY3ljbGUtc2FtZWNzZW47Ci0JCWdwbWMsY3ljbGUyY3ljbGUtZGlmZmNzZW47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLXNhbWVjc2VuID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRpZmZjc2VuID0gPDE+OworCQlncG1jLGNzLW9uLW5zID0gPDU+OworCQlncG1jLGNzLXJkLW9mZi1ucyA9IDwxNTA+OworCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwxNTA+OworCQlncG1jLGFkdi1vbi1ucyA9IDwwPjsKKwkJZ3BtYyxhZHYtcmQtb2ZmLW5zID0gPDE1PjsKKwkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDQwPjsKKwkJZ3BtYyxvZS1vbi1ucyA9IDw0NT47CisJCWdwbWMsb2Utb2ZmLW5zID0gPDE0MD47CisJCWdwbWMsd2Utb24tbnMgPSA8NDU+OworCQlncG1jLHdlLW9mZi1ucyA9IDwxNDA+OworCQlncG1jLHJkLWN5Y2xlLW5zID0gPDE1NT47CisJCWdwbWMsd3ItY3ljbGUtbnMgPSA8MTU1PjsKKwkJZ3BtYyxhY2Nlc3MtbnMgPSA8MTIwPjsKKwkJZ3BtYyxwYWdlLWJ1cnN0LWFjY2Vzcy1ucyA9IDwyMD47CisJCWdwbWMsYnVzLXR1cm5hcm91bmQtbnMgPSA8NzU+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRlbGF5LW5zID0gPDc1PjsKKwkJZ3BtYyx3YWl0LW1vbml0b3JpbmctbnMgPSA8MD47CisJCWdwbWMsY2xrLWFjdGl2YXRpb24tbnMgPSA8MD47CisJCWdwbWMsd3ItZGF0YS1tdXgtYnVzLW5zID0gPDA+OworCQlncG1jLHdyLWFjY2Vzcy1ucyA9IDwwPjsKIAkJdmRkdmFyaW8tc3VwcGx5ID0gPCZ2ZGR2YXJpbz47CiAJCXZkZDMzYS1zdXBwbHkgPSA8JnZkZDMzYT47CiAJCXJlZy1pby13aWR0aCA9IDw0PjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtem9vbS1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtem9vbS1jb21tb24uZHRzaQppbmRleCA2ODIyMWZhLi40NmVmM2U0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwLXpvb20tY29tbW9uLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcC16b29tLWNvbW1vbi5kdHNpCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgIm9tYXAtZ3BtYy1zbXNjOTExeC5kdHNpIgogCiAmZ3BtYyB7Ci0JcmFuZ2VzID0gPDMgMCAweDEwMDAwMDAwIDB4MDAwMDA0MDA+LAorCXJhbmdlcyA9IDwzIDAgMHgxMDAwMDAwMCAweDEwMDAwMDA+LAkvKiBDUzM6IDE2TUIgZm9yIFVBUlQgKi8KIAkJIDw3IDAgMHgyYzAwMDAwMCAweDAxMDAwMDAwPjsKIAogCS8qCkBAIC0xNSw3ICsxNSw2NSBAQAogCSAqLwogCXVhcnRAMywwIHsKIAkJY29tcGF0aWJsZSA9ICJuczE2NTUwYSI7Ci0JCXJlZyA9IDwzIDAgMHgxMDA+OworCQlyZWcgPSA8MyAwIDg+OwkvKiBDUzMsIG9mZnNldCAwLCBJTyBzaXplIDggKi8KKwkJYmFuay13aWR0aCA9IDwyPjsKKwkJcmVnLXNoaWZ0ID0gPDE+OworCQlyZWctaW8td2lkdGggPSA8MT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW80PjsKKwkJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX0VER0VfUklTSU5HPjsJLyogZ3BpbzEwMiAqLworCQljbG9jay1mcmVxdWVuY3kgPSA8MTg0MzIwMD47CisJCWN1cnJlbnQtc3BlZWQgPSA8MTE1MjAwPjsKKwkJZ3BtYyxtdXgtYWRkLWRhdGEgPSA8MD47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDE+OworCQlncG1jLHdhaXQtcGluID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLXNhbWVjc2VuID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRpZmZjc2VuID0gPDE+OworCQlncG1jLGNzLW9uLW5zID0gPDU+OworCQlncG1jLGNzLXJkLW9mZi1ucyA9IDwxNTU+OworCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwxNTU+OworCQlncG1jLGFkdi1vbi1ucyA9IDwxNT47CisJCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsb2Utb24tbnMgPSA8NDU+OworCQlncG1jLG9lLW9mZi1ucyA9IDwxNDU+OworCQlncG1jLHdlLW9uLW5zID0gPDQ1PjsKKwkJZ3BtYyx3ZS1vZmYtbnMgPSA8MTQ1PjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwxNTU+OworCQlncG1jLHdyLWN5Y2xlLW5zID0gPDE1NT47CisJCWdwbWMsYWNjZXNzLW5zID0gPDE0NT47CisJCWdwbWMscGFnZS1idXJzdC1hY2Nlc3MtbnMgPSA8MjA+OworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDIwPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDwyMD47CisJCWdwbWMsd2FpdC1tb25pdG9yaW5nLW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDw0NT47CisJCWdwbWMsd3ItYWNjZXNzLW5zID0gPDE0NT47CisJfTsKKwl1YXJ0QDMsMSB7CisJCWNvbXBhdGlibGUgPSAibnMxNjU1MGEiOworCQlyZWcgPSA8MyAweDEwMCA4PjsJLyogQ1MzLCBvZmZzZXQgMHgxMDAsIElPIHNpemUgOCAqLworCQliYW5rLXdpZHRoID0gPDI+OworCQlyZWctc2hpZnQgPSA8MT47CisJCXJlZy1pby13aWR0aCA9IDwxPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzQ+OworCQlpbnRlcnJ1cHRzID0gPDYgSVJRX1RZUEVfRURHRV9SSVNJTkc+OwkvKiBncGlvMTAyICovCisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwPjsKKwkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OworCX07CisJdWFydEAzLDIgeworCQljb21wYXRpYmxlID0gIm5zMTY1NTBhIjsKKwkJcmVnID0gPDMgMHgyMDAgOD47CS8qIENTMywgb2Zmc2V0IDB4MjAwLCBJTyBzaXplIDggKi8KKwkJYmFuay13aWR0aCA9IDwyPjsKKwkJcmVnLXNoaWZ0ID0gPDE+OworCQlyZWctaW8td2lkdGggPSA8MT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW80PjsKKwkJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX0VER0VfUklTSU5HPjsJLyogZ3BpbzEwMiAqLworCQljbG9jay1mcmVxdWVuY3kgPSA8MTg0MzIwMD47CisJCWN1cnJlbnQtc3BlZWQgPSA8MTE1MjAwPjsKKwl9OworCXVhcnRAMywzIHsKKwkJY29tcGF0aWJsZSA9ICJuczE2NTUwYSI7CisJCXJlZyA9IDwzIDB4MzAwIDg+OwkvKiBDUzMsIG9mZnNldCAweDMwMCwgSU8gc2l6ZSA4ICovCiAJCWJhbmstd2lkdGggPSA8Mj47CiAJCXJlZy1zaGlmdCA9IDwxPjsKIAkJcmVnLWlvLXdpZHRoID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAtbjh4MC1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLW44eDAtY29tbW9uLmR0c2kKaW5kZXggMjRjNTBkYi4uYzlmMWU5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAtbjh4MC1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQyMC1uOHgwLWNvbW1vbi5kdHNpCkBAIC00MCwxNCArNDAsMTQgQEAKIH07CiAKICZncG1jIHsKLQlyYW5nZXMgPSA8MCAwIDB4MDQwMDAwMDAgMHgxMDAwMDAwMD47CisJcmFuZ2VzID0gPDAgMCAweDA0MDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMDogMTZNQiBmb3IgT25lTkFORCAqLwogCiAJLyogZ3Bpby1pcnEgZm9yIGRtYTogMjYgKi8KIAogCW9uZW5hbmRAMCwwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwotCQlyZWcgPSA8MCAwIDB4MTAwMDAwMDA+OworCQlyZWcgPSA8MCAwIDB4MjAwMDA+OwkvKiBDUzAsIG9mZnNldCAwLCBJTyBzaXplIDEyOEsgKi8KIAogCQlncG1jLHN5bmMtcmVhZDsKIAkJZ3BtYyxidXJzdC1sZW5ndGggPSA8MTY+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLmR0c2kKaW5kZXggYWU4OWFhZC4uZTJiMmU5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQyMC5kdHNpCkBAIC0xNTcsNiArMTU3LDcgQEAKIAkJCWludGVycnVwdHMgPSA8MjY+LCA8MzQ+OwogCQkJaW50ZXJydXB0LW5hbWVzID0gImRzcCIsICJpdmEiOwogCQkJdGksaHdtb2RzID0gIm1haWxib3giOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDY+OwogCQkJbWJveF9kc3A6IGRzcCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC1zZHAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MzAtc2RwLmR0cwppbmRleCAyYzkwZDI5Li4wNWVjYTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC1zZHAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDMwLXNkcC5kdHMKQEAgLTQzLDcgKzQzLDMxIEBACiAJCWludGVycnVwdHMgPSA8MjEgSVJRX1RZUEVfTEVWRUxfTE9XPjsJLyogZ3BpbzE0OSAqLwogCQlyZWcgPSA8NSAweDMwMCAweGY+OwogCQliYW5rLXdpZHRoID0gPDI+OwotCQlncG1jLG11eC1hZGQtZGF0YTsKLSAgICAgICAgfTsKKwkJZ3BtYyxzeW5jLWNsay1wcyA9IDwwPjsKKwkJZ3BtYyxtdXgtYWRkLWRhdGEgPSA8Mj47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLXNhbWVjc2VuID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRpZmZjc2VuID0gPDE+OworCQlncG1jLGNzLW9uLW5zID0gPDc+OworCQlncG1jLGNzLXJkLW9mZi1ucyA9IDwyMzM+OworCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwyMzM+OworCQlncG1jLGFkdi1vbi1ucyA9IDwyMj47CisJCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDw2MD47CisJCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw2MD47CisJCWdwbWMsb2Utb24tbnMgPSA8Njc+OworCQlncG1jLG9lLW9mZi1ucyA9IDwyMTA+OworCQlncG1jLHdlLW9uLW5zID0gPDY3PjsKKwkJZ3BtYyx3ZS1vZmYtbnMgPSA8MjEwPjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwyMzM+OworCQlncG1jLHdyLWN5Y2xlLW5zID0gPDIzMz47CisJCWdwbWMsYWNjZXNzLW5zID0gPDIzMz47CisJCWdwbWMscGFnZS1idXJzdC1hY2Nlc3MtbnMgPSA8MzA+OworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDMwPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDwzMD47CisJCWdwbWMsd2FpdC1tb25pdG9yaW5nLW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1hY2Nlc3MtbnMgPSA8MD47CisJfTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDMwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC5kdHNpCmluZGV4IGI1NmQ3MTYxLi4wZGM4ZGUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDMwLmR0c2kKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCQkJcmVnID0gPDB4NDgwOTQwMDAgMHgyMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyNj47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8Nj47CiAJCQltYm94X2RzcDogZHNwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTE3LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTE3LmR0cwppbmRleCBkMDA1MDJmLi4wYWI3NDhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzUxNy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM1MTcuZHRzCkBAIC0xMzQsMyArMTM0LDE0IEBACiAJYnVzLXdpZHRoID0gPDQ+OwogCWNhcC1wb3dlci1vZmYtY2FyZDsKIH07CisKKyZkc3MgeworCXN0YXR1cyA9ICJvayI7CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwKKwkJJmRzc19kcGlfcGluc19jb21tb24KKwkJJmRzc19kcGlfcGluc19jbV90MzV4CisJPjsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTMwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTMwLmR0cwppbmRleCBkMTQ1ODQ5Li44ZGQxNGZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzUzMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM1MzAuZHRzCkBAIC00NiwzICs0NiwxNCBAQAogCWJ1cy13aWR0aCA9IDw0PjsKIAljYXAtcG93ZXItb2ZmLWNhcmQ7CiB9OworCismZHNzIHsKKwlzdGF0dXMgPSAib2siOworCisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8CisJCSZkc3NfZHBpX3BpbnNfY29tbW9uCisJCSZkc3NfZHBpX3BpbnNfY21fdDM1eAorCT47Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzczMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzczMC5kdHMKaW5kZXggYjNmOWE1MC4uNDZlYWRiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM3MzAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNzMwLmR0cwpAQCAtMzEsNiArMzEsMTkgQEAKIAl9OwogfTsKIAorJm9tYXAzX3BteF93a3VwIHsKKwlkc3NfZHBpX3BpbnNfY21fdDM3MzA6IHBpbm11eF9kc3NfZHBpX3BpbnNfY21fdDM3MzAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfV0tVUF9JT1BBRCgweDJhMDgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpICAgLyogc3lzX2Jvb3QwLmRzc19kYXRhMTggKi8KKwkJCU9NQVAzX1dLVVBfSU9QQUQoMHgyYTBjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKSAgIC8qIHN5c19ib290MS5kc3NfZGF0YTE5ICovCisJCQlPTUFQM19XS1VQX0lPUEFEKDB4MmExMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykgICAvKiBzeXNfYm9vdDMuZHNzX2RhdGEyMCAqLworCQkJT01BUDNfV0tVUF9JT1BBRCgweDJhMTIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpICAgLyogc3lzX2Jvb3Q0LmRzc19kYXRhMjEgKi8KKwkJCU9NQVAzX1dLVVBfSU9QQUQoMHgyYTE0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKSAgIC8qIHN5c19ib290NS5kc3NfZGF0YTIyICovCisJCQlPTUFQM19XS1VQX0lPUEFEKDB4MmExNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykgICAvKiBzeXNfYm9vdDYuZHNzX2RhdGEyMyAqLworCQk+OworCX07Cit9OworCiAmb21hcDNfcG14X2NvcmUgewogCiAJbW1jMl9waW5zOiBwaW5tdXhfbW1jMl9waW5zIHsKQEAgLTYxLDMgKzc0LDE0IEBACiAJYnVzLXdpZHRoID0gPDQ+OwogCWNhcC1wb3dlci1vZmYtY2FyZDsKIH07CisKKyZkc3MgeworCXN0YXR1cyA9ICJvayI7CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwKKwkJJmRzc19kcGlfcGluc19jb21tb24KKwkJJmRzc19kcGlfcGluc19jbV90MzczMAorCT47Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10M3guZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeC5kdHNpCmluZGV4IGM2NzFhMjIuLjZlYTZkNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeC5kdHNpCkBAIC00OSw2ICs0OSwyNCBAQAogCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOwogCQl2Y2Mtc3VwcGx5ID0gPCZoc3VzYjJfcG93ZXI+OwogCX07CisKKwlhZHM3ODQ2cmVnOiBhZHM3ODQ2LXJlZyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiYWRzNzg0Ni1yZWciOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJfTsKKworCXR2MDogY29ubmVjdG9yQDEgeworCQljb21wYXRpYmxlID0gInN2aWRlby1jb25uZWN0b3IiOworCQlsYWJlbCA9ICJ0diI7CisKKwkJcG9ydCB7CisJCQl0dl9jb25uZWN0b3JfaW46IGVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnZlbmNfb3V0PjsKKwkJCX07CisJCX07CisJfTsKIH07CiAKICZvbWFwM19wbXhfY29yZSB7CkBAIC03Niw2ICs5NCw3NiBAQAogCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWUyLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzeXNfY2xrb3V0Mi5ncGlvXzE4NiAqLwogCQk+OwogCX07CisKKwlkc3NfZHBpX3BpbnNfY29tbW9uOiBwaW5tdXhfZHNzX2RwaV9waW5zX2NvbW1vbiB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZDQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19wY2xrLmRzc19wY2xrICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZDYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19oc3luYy5kc3NfaHN5bmMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX3ZzeW5jLmRzc192c3luYyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGRhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfYWNiaWFzLmRzc19hY2JpYXMgKi8KKworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGU4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTYuZHNzX2RhdGE2ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZWEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhNy5kc3NfZGF0YTcgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlYywgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGE4LmRzc19kYXRhOCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGVlLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTkuZHNzX2RhdGE5ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZjAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTAuZHNzX2RhdGExMCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGYyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTExLmRzc19kYXRhMTEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExMi5kc3NfZGF0YTEyICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTMuZHNzX2RhdGExMyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGY4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTE0LmRzc19kYXRhMTQgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExNS5kc3NfZGF0YTE1ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZmMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTYuZHNzX2RhdGExNiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGZlLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTE3LmRzc19kYXRhMTcgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExOC5kc3NfZGF0YTE4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxMDIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTkuZHNzX2RhdGExOSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTA0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTIwLmRzc19kYXRhMjAgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGEyMS5kc3NfZGF0YTIxICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxMDgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMjIuZHNzX2RhdGEyMiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTBhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTIzLmRzc19kYXRhMjMgKi8KKwkJPjsKKwl9OworCisJZHNzX2RwaV9waW5zX2NtX3QzNXg6IHBpbm11eF9kc3NfZHBpX3BpbnNfY21fdDM1eCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZGMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMC5kc3NfZGF0YTAgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExLmRzc19kYXRhMSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGUwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTIuZHNzX2RhdGEyICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZTIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMy5kc3NfZGF0YTMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGE0LmRzc19kYXRhNCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGU2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTUuZHNzX2RhdGE1ICovCisJCT47CisJfTsKKworCWFkczc4NDZfcGluczogcGlubXV4X2Fkczc4NDZfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwYmEsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTQpCS8qIGdwbWNfbmNzNi5ncGlvXzU3ICovCisJCT47CisJfTsKKworCW1jc3BpMV9waW5zOiBwaW5tdXhfbWNzcGkxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWM4LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIG1jc3BpMV9jbGsgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjFjYSwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBtY3NwaTFfc2ltbyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWNjLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIG1jc3BpMV9zb21pICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxY2UsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMCkgLyogbWNzcGkxX2NzMCAqLworCQk+OworCX07CisKKwlpMmMxX3BpbnM6IHBpbm11eF9pMmMxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWJhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMxX3NjbCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWJjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMxX3NkYSAqLworCQk+OworCX07CisKKwltY2JzcDJfcGluczogcGlubXV4X21jYnNwMl9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEzYywgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBtY2JzcDJfZnN4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxM2UsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogbWNic3AyX2Nsa3ggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0MCwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBtY2JzcDJfZHIgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0MiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogbWNic3AyX2R4ICovCisJCT47CisJfTsKIH07CiAKICZ1YXJ0MyB7CkBAIC05NCwxMiArMTgyLDIyIEBACiB9OwogCiAmaTJjMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzFfcGlucz47CisKIAljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCWF0MjRANTAgeworCQljb21wYXRpYmxlID0gImF0MjQsMjRjMDIiOworCQlwYWdlc2l6ZSA9IDwxNj47CisJCXJlZyA9IDwweDUwPjsKKwl9OwogfTsKIAogJmkyYzMgewogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogfTsKKwogJnVzYmhzaG9zdCB7CiAJcG9ydDEtbW9kZSA9ICJlaGNpLXBoeSI7CiAJcG9ydDItbW9kZSA9ICJlaGNpLXBoeSI7CkBAIC0xMDgsMyArMjA2LDU2IEBACiAmdXNiaHNlaGNpIHsKIAlwaHlzID0gPCZoc3VzYjFfcGh5ICZoc3VzYjJfcGh5PjsKIH07CisKKyZtY3NwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtY3NwaTFfcGlucz47CisKKwkvKiB0b3VjaCBjb250cm9sbGVyICovCisJYWRzNzg0NkAwIHsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZhZHM3ODQ2X3BpbnM+OworCisJCWNvbXBhdGlibGUgPSAidGksYWRzNzg0NiI7CisJCXZjYy1zdXBwbHkgPSA8JmFkczc4NDZyZWc+OworCisJCXJlZyA9IDwwPjsJCQkvKiBDUzAgKi8KKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTUwMDAwMD47CisKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzI+OworCQlpbnRlcnJ1cHRzID0gPDI1IDA+OwkJLyogZ3Bpb181NyAqLworCQlwZW5kb3duLWdwaW8gPSA8JmdwaW8yIDI1IDA+OworCisJCXRpLHgtbWluID0gL2JpdHMvIDE2IDwweDA+OworCQl0aSx4LW1heCA9IC9iaXRzLyAxNiA8MHgwZmZmPjsKKwkJdGkseS1taW4gPSAvYml0cy8gMTYgPDB4MD47CisJCXRpLHktbWF4ID0gL2JpdHMvIDE2IDwweDBmZmY+OworCisJCXRpLHgtcGxhdGUtb2htcyA9IC9iaXRzLyAxNiA8MTgwPjsKKwkJdGkscHJlc3N1cmUtbWF4ID0gL2JpdHMvIDE2IDwyNTU+OworCisJCXRpLGRlYm91bmNlLW1heCA9IC9iaXRzLyAxNiA8MzA+OworCQl0aSxkZWJvdW5jZS10b2wgPSAvYml0cy8gMTYgPDEwPjsKKwkJdGksZGVib3VuY2UtcmVwID0gL2JpdHMvIDE2IDwxPjsKKworCQlsaW51eCx3YWtldXA7CisJfTsKK307CisKKyZ2ZW5jIHsKKwlzdGF0dXMgPSAib2siOworCisJcG9ydCB7CisJCXZlbmNfb3V0OiBlbmRwb2ludCB7CisJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnR2X2Nvbm5lY3Rvcl9pbj47CisJCQl0aSxjaGFubmVscyA9IDwyPjsKKwkJfTsKKwl9OworfTsKKworJm1jYnNwMiB7CisJc3RhdHVzID0gIm9rIjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtY2JzcDJfcGlucz47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDN4MzAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeDMwLmR0c2kKaW5kZXggMjViYTA4My4uOWE0YTNhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDN4MzAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10M3gzMC5kdHNpCkBAIC0xMCw2ICsxMCwxNCBAQAogCQkJY3B1MC1zdXBwbHkgPSA8JnZjYz47CiAJCX07CiAJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwLXR3bDQwMzAiOworCQl0aSxtb2RlbCA9ICJjbS10MzUiOworCisJCXRpLG1jYnNwID0gPCZtY2JzcDI+OworCQl0aSxjb2RlYyA9IDwmdHdsX2F1ZGlvPjsKKwl9OwogfTsKIAogJm9tYXAzX3BteF9jb3JlIHsKQEAgLTU5LDExICs2NywyMiBAQAogCQlyZWcgPSA8MHg0OD47CiAJCWludGVycnVwdHMgPSA8Nz47IC8qIFNZU19OSVJRIGNhc2NhZGVkIHRvIGludGMgKi8KIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47CisKKwkJdHdsX2F1ZGlvOiBhdWRpbyB7CisJCQljb21wYXRpYmxlID0gInRpLHR3bDQwMzAtYXVkaW8iOworCQkJY29kZWMgeworCQkJfTsKKwkJfTsKIAl9OwogfTsKIAogI2luY2x1ZGUgInR3bDQwMzAuZHRzaSIKICNpbmNsdWRlICJ0d2w0MDMwX29tYXAzLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKworJnZlbmMgeworCXZkZGEtc3VwcGx5ID0gPCZ2ZGFjPjsKK307CiAKICZtbWMxIHsKIAl2bW1jLXN1cHBseSA9IDwmdm1tYzE+OwpAQCAtNzUsNiArOTQsMjIgQEAKIAl0aSxwdWxsdXBzID0gPDB4MDAwMDAxPjsKIH07CiAKKyZ0d2xfa2V5cGFkIHsKKwlsaW51eCxrZXltYXAgPSA8CisJCQkJTUFUUklYX0tFWSgweDAwLCAweDAxLCBLRVlfQSkKKwkJCQlNQVRSSVhfS0VZKDB4MDAsIDB4MDIsIEtFWV9CKQorCQkJCU1BVFJJWF9LRVkoMHgwMCwgMHgwMywgS0VZX0xFRlQpCisKKwkJCQlNQVRSSVhfS0VZKDB4MDEsIDB4MDEsIEtFWV9VUCkKKwkJCQlNQVRSSVhfS0VZKDB4MDEsIDB4MDIsIEtFWV9FTlRFUikKKwkJCQlNQVRSSVhfS0VZKDB4MDEsIDB4MDMsIEtFWV9ET1dOKQorCisJCQkJTUFUUklYX0tFWSgweDAyLCAweDAxLCBLRVlfUklHSFQpCisJCQkJTUFUUklYX0tFWSgweDAyLCAweDAyLCBLRVlfQykKKwkJCQlNQVRSSVhfS0VZKDB4MDIsIDB4MDMsIEtFWV9EKQorCQkJPjsKK307CisKICZoc3VzYjFfcGh5IHsKIAlyZXNldC1ncGlvcyA9IDwmdHdsX2dwaW8gNiBHUElPX0FDVElWRV9MT1c+OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWRldmtpdDgwMDAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZGV2a2l0ODAwMC5kdHMKaW5kZXggZGE0MDJmMC4uMTY5MDM3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZGV2a2l0ODAwMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZGV2a2l0ODAwMC5kdHMKQEAgLTEwNiwxMCArMTA2LDEwIEBACiB9OwogCiAmZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDMwMDAwMDAwIDB4MDQ+OyAgICAgICAvKiBDUzA6IE5BTkQgKi8KKwlyYW5nZXMgPSA8MCAwIDB4MzAwMDAwMDAgMHgxMDAwMDAwPjsgICAgICAgLyogQ1MwOiAxNk1CIGZvciBOQU5EICovCiAKIAluYW5kQDAsMCB7Ci0JCXJlZyA9IDwwIDAgMD47IC8qIENTMCwgb2Zmc2V0IDAgKi8KKwkJcmVnID0gPDAgMCA0PjsgLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKIAogCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLTM3eHguZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLTM3eHguZHRzCmluZGV4IGE4YmQ0MzQuLjE2ZThjZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWV2bS0zN3h4LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ldm0tMzd4eC5kdHMKQEAgLTE1NCwxMyArMTU0LDE0IEBACiB9OwogCiAmZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDAwMDAwMDAwIDB4MjAwMDAwMDA+LAorCXJhbmdlcyA9IDwwIDAgMHgwMDAwMDAwMCAweDEwMDAwMDA+LAkvKiBDUzA6IDE2TUIgZm9yIE5BTkQgKi8KIAkJIDw1IDAgMHgyYzAwMDAwMCAweDAxMDAwMDAwPjsKIAogCW5hbmRAMCwwIHsKIAkJbGludXgsbXRkLW5hbWU9ICJoeW5peCxoOGtkczB1bjBtZXItNGVtIjsKLQkJcmVnID0gPDAgMCAwPjsKKwkJcmVnID0gPDAgMCA0PjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKKwkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8Mj47CiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKIAogCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLWNvbW1vbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLWNvbW1vbi5kdHNpCmluZGV4IGM4NzQ3YzcuLjEyN2YzZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWV2bS1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ldm0tY29tbW9uLmR0c2kKQEAgLTIsNiArMiw3IEBACiAgKiBDb21tb24gc3VwcG9ydCBmb3Igb21hcDMgRVZNIGJvYXJkcwogICovCiAKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgogI2luY2x1ZGUgIm9tYXAtZ3BtYy1zbXNjOTExeC5kdHNpIgogCiAvIHsKQEAgLTExMSw2ICsxMTIsMjYgQEAKIAl0aSx1c2UtbGVkczsKIH07CiAKKyZ0d2xfa2V5cGFkIHsKKwlsaW51eCxrZXltYXAgPSA8CisJCQlNQVRSSVhfS0VZKDIsIDIsIEtFWV8xKQorCQkJTUFUUklYX0tFWSgxLCAxLCBLRVlfMikKKwkJCU1BVFJJWF9LRVkoMCwgMCwgS0VZXzMpCisJCQlNQVRSSVhfS0VZKDMsIDIsIEtFWV80KQorCQkJTUFUUklYX0tFWSgyLCAxLCBLRVlfNSkKKwkJCU1BVFJJWF9LRVkoMSwgMCwgS0VZXzYpCisJCQlNQVRSSVhfS0VZKDEsIDMsIEtFWV83KQorCQkJTUFUUklYX0tFWSgzLCAxLCBLRVlfOCkKKwkJCU1BVFJJWF9LRVkoMiwgMCwgS0VZXzkpCisJCQlNQVRSSVhfS0VZKDIsIDMsIEtFWV9LUEFTVEVSSVNLKQorCQkJTUFUUklYX0tFWSgwLCAyLCBLRVlfMCkKKwkJCU1BVFJJWF9LRVkoMywgMCwgS0VZX0tQRE9UKQorCQkJLyogczQgbm90IHdpcmVkICovCisJCQlNQVRSSVhfS0VZKDEsIDIsIEtFWV9CQUNLU1BBQ0UpCisJCQlNQVRSSVhfS0VZKDAsIDEsIEtFWV9FTlRFUikKKwkJCT47Cit9OworCiAmdXNiX290Z19ocyB7CiAJaW50ZXJmYWNlLXR5cGUgPSA8MD47CiAJdXNiLXBoeSA9IDwmdXNiMl9waHk+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZ3RhMDQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWd0YTA0LmR0c2kKaW5kZXggZmQzNGY5MS4uNjU1ZDZlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZ3RhMDQuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ndGEwNC5kdHNpCkBAIC0xMDQsNjcgKzEwNCw2NyBAQAogCiAJdWFydDFfcGluczogcGlubXV4X3VhcnQxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxNTIgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQxX3J4LnVhcnQxX3J4ICovCi0JCQkweDE0YyAoUElOX09VVFBVVCB8TVVYX01PREUwKQkJLyogdWFydDFfdHgudWFydDFfdHggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE4MiwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDFfcngudWFydDFfcnggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3YywgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQxX3R4LnVhcnQxX3R4ICovCiAJCT47CiAJfTsKIAogCXVhcnQyX3BpbnM6IHBpbm11eF91YXJ0Ml9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4MTRhIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0Ml9yeC51YXJ0Ml9yeCAqLwotCQkJMHgxNDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0Ml90eC51YXJ0Ml90eCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTdhLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0Ml9yeC51YXJ0Ml9yeCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDJfdHgudWFydDJfdHggKi8KIAkJPjsKIAl9OwogCiAJdWFydDNfcGluczogcGlubXV4X3VhcnQzX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxNmUgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQzX3J4LnVhcnQzX3J4ICovCi0JCQkweDE3MCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQzX3R4LnVhcnQzX3R4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxOWUsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQzX3J4LnVhcnQzX3J4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxYTAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0M190eC51YXJ0M190eCAqLwogCQk+OwogCX07CiAKIAltbWMxX3BpbnM6IHBpbm11eF9tbWMxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxMTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9jbGsuc2RtbWMxX2NsayAqLwotCQkJMHgxMTYgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9jbWQuc2RtbWMxX2NtZCAqLwotCQkJMHgxMTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIAkvKiBzZG1tYzFfZGF0MC5zZG1tYzFfZGF0MCAqLwotCQkJMHgxMWEgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9kYXQxLnNkbW1jMV9kYXQxICovCi0JCQkweDExYyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWMxX2RhdDIuc2RtbWMxX2RhdDIgKi8KLQkJCTB4MTFlIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzFfZGF0My5zZG1tYzFfZGF0MyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTQ0LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkJLyogc2RtbWMxX2Nsay5zZG1tYzFfY2xrICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNDYsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCQkvKiBzZG1tYzFfY21kLnNkbW1jMV9jbWQgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0OCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJCS8qIHNkbW1jMV9kYXQwLnNkbW1jMV9kYXQwICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNGEsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCQkvKiBzZG1tYzFfZGF0MS5zZG1tYzFfZGF0MSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTRjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkJLyogc2RtbWMxX2RhdDIuc2RtbWMxX2RhdDIgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0ZSwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJCS8qIHNkbW1jMV9kYXQzLnNkbW1jMV9kYXQzICovCiAJCT47CiAJfTsKIAogCWRzc19kcGlfcGluczogcGlubXV4X2Rzc19kcGlfcGlucyB7CiAgICAgICAgICAgICAgICBwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotICAgICAgICAgICAgICAgICAgICAgICAweDBhNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfcGNsay5kc3NfcGNsayAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBhNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfaHN5bmMuZHNzX2hzeW5jICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGE4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc192c3luYy5kc3NfdnN5bmMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYWEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2FjYmlhcy5kc3NfYWNiaWFzICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGFjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMC5kc3NfZGF0YTAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYWUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExLmRzc19kYXRhMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBiMCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIuZHNzX2RhdGEyICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGIyIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMy5kc3NfZGF0YTMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYjQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE0LmRzc19kYXRhNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBiNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTUuZHNzX2RhdGE1ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGI4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNi5kc3NfZGF0YTYgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYmEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE3LmRzc19kYXRhNyAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBiYyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTguZHNzX2RhdGE4ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGJlIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhOS5kc3NfZGF0YTkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMC5kc3NfZGF0YTEwICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGMyIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTEuZHNzX2RhdGExMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBjNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTEyLmRzc19kYXRhMTIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYzYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMy5kc3NfZGF0YTEzICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGM4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTQuZHNzX2RhdGExNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBjYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE1LmRzc19kYXRhMTUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwY2MgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNi5kc3NfZGF0YTE2ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGNlIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTcuZHNzX2RhdGExNyAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBkMCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE4LmRzc19kYXRhMTggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwZDIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExOS5kc3NfZGF0YTE5ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGQ0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjAuZHNzX2RhdGEyMCAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBkNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIxLmRzc19kYXRhMjEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwZDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMi5kc3NfZGF0YTIyICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGRhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjMuZHNzX2RhdGEyMyAqLwotICAgICAgICAgICAgICAgPjsKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfcGNsay5kc3NfcGNsayAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGQ2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19oc3luYy5kc3NfaHN5bmMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfdnN5bmMuZHNzX3ZzeW5jICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZGEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2FjYmlhcy5kc3NfYWNiaWFzICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZGMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEwLmRzc19kYXRhMCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGRlLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMS5kc3NfZGF0YTEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIuZHNzX2RhdGEyICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZTIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEzLmRzc19kYXRhMyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGU0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNC5kc3NfZGF0YTQgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTUuZHNzX2RhdGE1ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZTgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE2LmRzc19kYXRhNiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGVhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNy5kc3NfZGF0YTcgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlYywgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTguZHNzX2RhdGE4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZWUsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE5LmRzc19kYXRhOSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGYwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTAuZHNzX2RhdGExMCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGYyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTEuZHNzX2RhdGExMSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGY0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTIuZHNzX2RhdGExMiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGY2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTMuZHNzX2RhdGExMyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGY4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTQuZHNzX2RhdGExNCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGZhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTUuZHNzX2RhdGExNSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGZjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTYuZHNzX2RhdGExNiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGZlLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTcuZHNzX2RhdGExNyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTAwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTguZHNzX2RhdGExOCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTAyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTkuZHNzX2RhdGExOSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTA0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjAuZHNzX2RhdGEyMCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTA2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjEuZHNzX2RhdGEyMSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTA4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjIuZHNzX2RhdGEyMiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTBhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjMuZHNzX2RhdGEyMyAqLworCQk+OwogICAgICAgIH07CiB9OwogCkBAIC0zOTcsMTAgKzM5NywxMCBAQAogfTsKIAogJmdwbWMgewotCXJhbmdlcyA9IDwwIDAgMHgzMDAwMDAwMCAweDA0PjsgLyogQ1MwOiBOQU5EICovCisJcmFuZ2VzID0gPDAgMCAweDMwMDAwMDAwIDB4MTAwMDAwMD47IC8qIENTMDogMTZNQiBmb3IgTkFORCAqLwogCiAJbmFuZEAwLDAgewotCQlyZWcgPSA8MCAwIDA+OyAvKiBDUzAsIG9mZnNldCAwICovCisJCXJlZyA9IDwwIDAgND47IC8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcC5kdHNpCmluZGV4IGUyZDE2M2IuLjhhNjNhZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwLmR0c2kKQEAgLTMxLDE4ICszMSw2IEBACiAJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJfTsKIAotCWxiZWUxdXNqeWNfdm1tYzogbGJlZTF1c2p5Y192bW1jIHsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZsYmVlMXVzanljX3BpbnM+OwotCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0JCXJlZ3VsYXRvci1uYW1lID0gInJlZ3VsYXRvci1sYmVlMXVzanljIjsKLQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQlncGlvID0gPCZncGlvNSAxMCBHUElPX0FDVElWRV9ISUdIPjsJLyogZ3Bpb18xMzggV0lGSV9QRE4gKi8KLQkJc3RhcnR1cC1kZWxheS11cyA9IDwxMDAwMD47Ci0JCWVuYWJsZS1hY3RpdmUtaGlnaDsKLQkJdmluLXN1cHBseSA9IDwmdmRkMzM+OwotCX07CiB9OwogCiAmb21hcDNfcG14X2NvcmUgewpAQCAtNTMsMTMgKzQxLDYgQEAKIAkJPjsKIAl9OwogCi0JdWFydDJfcGluczogcGlubXV4X3VhcnQyX3BpbnMgewotCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxNGEgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQyX3J4LnVhcnQyX3J4ICovCi0JCQkweDE0OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQyX3R4LnVhcnQyX3R4ICovCi0JCT47Ci0JfTsKLQogCXVhcnQzX3BpbnM6IHBpbm11eF91YXJ0M19waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKIAkJCTB4MTZlIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0M19yeC51YXJ0M19yeCAqLwpAQCAtNjcsMTUgKzQ4LDYgQEAKIAkJPjsKIAl9OwogCi0JLyogV2lGaS9CVCBjb21ibyAqLwotCWxiZWUxdXNqeWNfcGluczogcGlubXV4X2xiZWUxdXNqeWNfcGlucyB7Ci0JCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQkweDEzNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDUuZ3Bpb18xMzcgKi8KLQkJCTB4MTM4IChQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0Ni5ncGlvXzEzOCAqLwotCQkJMHgxM2EgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ3LmdwaW9fMTM5ICovCi0JCT47Ci0JfTsKLQogCW1jYnNwMl9waW5zOiBwaW5tdXhfbWNic3AyX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAogCQkJMHgxMGMgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIG1jYnNwMl9mc3gubWNic3AyX2ZzeCAqLwpAQCAtMTIwLDEzICs5Miw2IEBACiAJCT47CiAJfTsKIAotCWkyYzJfcGluczogcGlubXV4X2kyYzJfcGlucyB7Ci0JCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQkweDE4ZSAoUElOX0lOUFVUIHwgTVVYX01PREUwKSAgIC8qIGkyYzJfc2NsLmkyYzJfc2NsICovCi0JCQkweDE5MCAoUElOX0lOUFVUIHwgTVVYX01PREUwKSAgIC8qIGkyYzJfc2RhLmkyYzJfc2RhICovCi0JCT47Ci0JfTsKLQogCWkyYzNfcGluczogcGlubXV4X2kyYzNfcGlucyB7CiAJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CiAJCQkweDE5MiAoUElOX0lOUFVUIHwgTVVYX01PREUwKSAgIC8qIGkyYzNfc2NsLmkyYzNfc2NsICovCkBAIC0xMzUsNiArMTAwLDU1IEBACiAJfTsKIH07CiAKKyZncG1jIHsKKwluYW5kQDAsMCB7CisJCWxpbnV4LG10ZC1uYW1lPSAibWljcm9uLG10MjljNGc5Nm1heiI7CisJCXJlZyA9IDwwIDAgND47CS8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLworCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDI+OworCQl0aSxuYW5kLWVjYy1vcHQgPSAiYmNoOCI7CisKKwkJZ3BtYyxzeW5jLWNsay1wcyA9IDwwPjsKKwkJZ3BtYyxjcy1vbi1ucyA9IDwwPjsKKwkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8NDQ+OworCQlncG1jLGNzLXdyLW9mZi1ucyA9IDw0ND47CisJCWdwbWMsYWR2LW9uLW5zID0gPDY+OworCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8MzQ+OworCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8NDQ+OworCQlncG1jLHdlLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsb2Utb2ZmLW5zID0gPDU0PjsKKwkJZ3BtYyxhY2Nlc3MtbnMgPSA8NjQ+OworCQlncG1jLHJkLWN5Y2xlLW5zID0gPDgyPjsKKwkJZ3BtYyx3ci1jeWNsZS1ucyA9IDw4Mj47CisJCWdwbWMsd3ItYWNjZXNzLW5zID0gPDQwPjsKKwkJZ3BtYyx3ci1kYXRhLW11eC1idXMtbnMgPSA8MD47CisKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gIlNQTCI7CisJCQlyZWcgPSA8MCAweDEwMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA4MDAwMCB7CisJCQlsYWJlbCA9ICJVLUJvb3QiOworCQkJcmVnID0gPDB4MTAwMDAwIDB4MTgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDFjMDAwMCB7CisJCQlsYWJlbCA9ICJFbnZpcm9ubWVudCI7CisJCQlyZWcgPSA8MHgyODAwMDAgMHgxMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMjgwMDAwIHsKKwkJCWxhYmVsID0gIktlcm5lbCI7CisJCQlyZWcgPSA8MHgzODAwMDAgMHgzMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANzgwMDAwIHsKKwkJCWxhYmVsID0gIkZpbGVzeXN0ZW0iOworCQkJcmVnID0gPDB4NjgwMDAwIDB4MWY5ODAwMDA+OworCQl9OworCX07Cit9OworCiAmaTJjMSB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JmkyYzFfcGlucz47CkBAIC0xNTYsMTIgKzE3MCw2IEBACiAjaW5jbHVkZSAidHdsNDAzMC5kdHNpIgogI2luY2x1ZGUgInR3bDQwMzBfb21hcDMuZHRzaSIKIAotJmkyYzIgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZpMmMyX3BpbnM+OwotCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwotfTsKLQogJmkyYzMgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZpMmMzX3BpbnM+OwpAQCAtMTgxLDE0ICsxODksNiBAQAogICAgICAgYnVzLXdpZHRoID0gPDQ+OwogfTsKIAotJm1tYzIgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZtbWMyX3BpbnM+OwotCXZtbWMtc3VwcGx5ID0gPCZsYmVlMXVzanljX3ZtbWM+OwotCWJ1cy13aWR0aCA9IDw0PjsKLQlub24tcmVtb3ZhYmxlOwotfTsKLQogJm1tYzMgewogCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiB9OwpAQCAtMTk4LDExICsxOTgsNiBAQAogICAgICAgIHBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CiB9OwogCi0mdWFydDIgewotICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0gICAgICAgcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKLX07Ci0KICZ1YXJ0MyB7CiAgICAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKICAgICAgICBwaW5jdHJsLTAgPSA8JnVhcnQzX3BpbnM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAtY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC1jb21tb24uZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU4YzIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAtY29tbW9uLmR0c2kKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb21tb24gRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQdjIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDE0IEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib21hcDMtaWdlcC5kdHNpIgorI2luY2x1ZGUgIm9tYXAtZ3BtYy1zbXNjOTIyMS5kdHNpIgorCisvIHsKKworCWxlZHMgeworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmxlZHNfcGlucz47CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQlib290IHsKKwkJCSBsYWJlbCA9ICJvbWFwMzpncmVlbjpib290IjsKKwkJCSBncGlvcyA9IDwmZ3BpbzEgMjYgR1BJT19BQ1RJVkVfSElHSD47CisJCQkgZGVmYXVsdC1zdGF0ZSA9ICJvbiI7CisJCX07CisKKwkJdXNlcjAgeworCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMCI7CisJCQkgZ3Bpb3MgPSA8JmdwaW8xIDI3IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJIGRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKworCQl1c2VyMSB7CisJCQkgbGFiZWwgPSAib21hcDM6cmVkOnVzZXIxIjsKKwkJCSBncGlvcyA9IDwmZ3BpbzEgMjggR1BJT19BQ1RJVkVfSElHSD47CisJCQkgZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCisJCXVzZXIyIHsKKwkJCWxhYmVsID0gIm9tYXAzOmdyZWVuOnVzZXIxIjsKKwkJCWdwaW9zID0gPCZ0d2xfZ3BpbyAxOSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CisKKwkvKiBIUyBVU0IgUG9ydCAxIFBvd2VyICovCisJaHN1c2IxX3Bvd2VyOiBoc3VzYjFfcG93ZXJfcmVnIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJoc3VzYjFfdmJ1cyI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJZ3BpbyA9IDwmdHdsX2dwaW8gMTggR1BJT19BQ1RJVkVfTE9XPjsJLyogR1BJTyBMRURBICovCisJCXN0YXJ0dXAtZGVsYXktdXMgPSA8NzAwMDA+OworCX07CisKKwkvKiBIUyBVU0IgSG9zdCBQSFkgb24gUE9SVCAxICovCisJaHN1c2IxX3BoeTogaHN1c2IxX3BoeSB7CisJCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7CisJCXJlc2V0LWdwaW9zID0gPCZncGlvMSAyNCBHUElPX0FDVElWRV9MT1c+OyAvKiBncGlvXzI0ICovCisJCXZjYy1zdXBwbHkgPSA8JmhzdXNiMV9wb3dlcj47CisJfTsKKworCXRmcDQxMDogZW5jb2RlckAwIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0ZnA0MTAiOworCQlwb3dlcmRvd24tZ3Bpb3MgPSA8JmdwaW82IDEwIEdQSU9fQUNUSVZFX0xPVz47IC8qIGdwaW9fMTcwICovCisKKwkJcG9ydHMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisKKwkJCQl0ZnA0MTBfaW46IGVuZHBvaW50QDAgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRwaV9vdXQ+OworCQkJCX07CisJCQl9OworCisJCQlwb3J0QDEgeworCQkJCXJlZyA9IDwxPjsKKworCQkJCXRmcDQxMF9vdXQ6IGVuZHBvaW50QDAgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmR2aV9jb25uZWN0b3JfaW4+OworCQkJCX07CisJCQl9OworCQl9OworCX07CisKKwlkdmkwOiBjb25uZWN0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAiZHZpLWNvbm5lY3RvciI7CisJCWxhYmVsID0gImR2aSI7CisKKwkJZGlnaXRhbDsKKworCQlkZGMtaTJjLWJ1cyA9IDwmaTJjMz47CisKKwkJcG9ydCB7CisJCQlkdmlfY29ubmVjdG9yX2luOiBlbmRwb2ludCB7CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfb3V0PjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZvbWFwM19wbXhfY29yZSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8CisJCSZ0ZnA0MTBfcGlucworCQkmZHNzX2RwaV9waW5zCisJPjsKKworCXRmcDQxMF9waW5zOiBwaW5tdXhfdGZwNDEwX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgxOTYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpICAgLyogaGRxX3Npby5ncGlvXzE3MCAqLworCQk+OworCX07CisKKwlkc3NfZHBpX3BpbnM6IHBpbm11eF9kc3NfZHBpX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgwYTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX3BjbGsuZHNzX3BjbGsgKi8KKwkJCTB4MGE2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19oc3luYy5kc3NfaHN5bmMgKi8KKwkJCTB4MGE4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc192c3luYy5kc3NfdnN5bmMgKi8KKwkJCTB4MGFhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19hY2JpYXMuZHNzX2FjYmlhcyAqLworCQkJMHgwYWMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEwLmRzc19kYXRhMCAqLworCQkJMHgwYWUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExLmRzc19kYXRhMSAqLworCQkJMHgwYjAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyLmRzc19kYXRhMiAqLworCQkJMHgwYjIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEzLmRzc19kYXRhMyAqLworCQkJMHgwYjQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE0LmRzc19kYXRhNCAqLworCQkJMHgwYjYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE1LmRzc19kYXRhNSAqLworCQkJMHgwYjggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE2LmRzc19kYXRhNiAqLworCQkJMHgwYmEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE3LmRzc19kYXRhNyAqLworCQkJMHgwYmMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE4LmRzc19kYXRhOCAqLworCQkJMHgwYmUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE5LmRzc19kYXRhOSAqLworCQkJMHgwYzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMC5kc3NfZGF0YTEwICovCisJCQkweDBjMiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTExLmRzc19kYXRhMTEgKi8KKwkJCTB4MGM0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTIuZHNzX2RhdGExMiAqLworCQkJMHgwYzYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMy5kc3NfZGF0YTEzICovCisJCQkweDBjOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE0LmRzc19kYXRhMTQgKi8KKwkJCTB4MGNhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTUuZHNzX2RhdGExNSAqLworCQkJMHgwY2MgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNi5kc3NfZGF0YTE2ICovCisJCQkweDBjZSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE3LmRzc19kYXRhMTcgKi8KKwkJCTB4MGQwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTguZHNzX2RhdGExOCAqLworCQkJMHgwZDIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExOS5kc3NfZGF0YTE5ICovCisJCQkweDBkNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIwLmRzc19kYXRhMjAgKi8KKwkJCTB4MGQ2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjEuZHNzX2RhdGEyMSAqLworCQkJMHgwZDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMi5kc3NfZGF0YTIyICovCisJCQkweDBkYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIzLmRzc19kYXRhMjMgKi8KKwkJPjsKKwl9OworCisJdWFydDJfcGluczogcGlubXV4X3VhcnQyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX2N0cy51YXJ0Ml9jdHMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogdWFydDJfcnRzIC51YXJ0Ml9ydHMqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml90eC51YXJ0Ml90eCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTdhLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX3J4LnVhcnQyX3J4ICovCisJCT47CisJfTsKK307CisKKyZvbWFwM19wbXhfY29yZTIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPAorCQkmaHN1c2JiMV9waW5zCisJPjsKKworCWhzdXNiYjFfcGluczogcGlubXV4X2hzdXNiYjFfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZGEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCQkvKiBldGtfY3RsLmhzdXNiMV9jbGsgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGV0a19jbGsuaHN1c2IxX3N0cCAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWVjLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kOC5oc3VzYjFfZGlyICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZWUsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q5LmhzdXNiMV9ueHQgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkYywgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDAuaHN1c2IxX2RhdGEwICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZGUsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2QxLmhzdXNiMV9kYXRhMSAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWUwLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kMi5oc3VzYjFfZGF0YTIgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlMiwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDMuaHN1c2IxX2RhdGE3ICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTQsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q0LmhzdXNiMV9kYXRhNCAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWU2LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kNS5oc3VzYjFfZGF0YTUgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlOCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDYuaHN1c2IxX2RhdGE2ICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZWEsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q3LmhzdXNiMV9kYXRhMyAqLworCQk+OworCX07CisKKwlsZWRzX3BpbnM6IHBpbm11eF9sZWRzX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWY0LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KSAvKiBldGtfZDEyLmdwaW9fMjYgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVmNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkgLyogZXRrX2QxMy5ncGlvXzI3ICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZjgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpIC8qIGV0a19kMTQuZ3Bpb18yOCAqLworCQk+OworCX07Cit9OworCismaTJjMyB7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisKKwkvKgorCSAqIERpc3BsYXkgbW9uaXRvciBmZWF0dXJlcyBhcmUgYnVybnQgaW4gdGhlIEVFUFJPTQorCSAqIGFzIEVESUQgZGF0YS4KKwkgKi8KKwllZXByb21ANTAgeworCQljb21wYXRpYmxlID0gInRpLGVlcHJvbSI7CisJCXJlZyA9IDwweDUwPjsKKwl9OworfTsKKworJmdwbWMgeworCXJhbmdlcyA9IDwwIDAgMHgwMDAwMDAwMCAweDIwMDAwMDAwPiwKKwkJIDw1IDAgMHgyYzAwMDAwMCAweDAxMDAwMDAwPjsKKworCWV0aGVybmV0QGdwbWMgeworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnNtc2M5MjIxX3BpbnM+OworCQlyZWcgPSA8NSAwIDB4ZmY+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvNj47CisJCWludGVycnVwdHMgPSA8MTYgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwl9OworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47Cit9OworCismdXNiaHNob3N0IHsKKwlwb3J0MS1tb2RlID0gImVoY2ktcGh5IjsKK307CisKKyZ1c2Joc2VoY2kgeworCXBoeXMgPSA8JmhzdXNiMV9waHk+OworfTsKKworJnZwbGwyIHsKKwkvKiBOZWVkZWQgZm9yIERTUyAqLworCXJlZ3VsYXRvci1uYW1lID0gInZkZHNfZHNpIjsKK307CisKKyZkc3MgeworCXN0YXR1cyA9ICJvayI7CisKKwlwb3J0IHsKKwkJZHBpX291dDogZW5kcG9pbnQgeworCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfaW4+OworCQkJZGF0YS1saW5lcyA9IDwyND47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC1yZXYtZi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC1yZXYtZi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4YmQwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDIwLXJldi1mLmR0cwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQdjIgUmV2LiBGIChUSSBPTUFQIEFNL0RNMzd4KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBKYXZpZXIgTWFydGluZXogQ2FuaWxsYXMgPGphdmllckBjb2xsYWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRW5yaWMgQmFsbGV0Ym8gaSBTZXJyYSA8ZWJhbGxldGJvQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJvbWFwMy1pZ2VwMDAyMC1jb21tb24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiSUdFUHYyIFJldi4gRiAoVEkgT01BUCBBTS9ETTM3eCkiOworCWNvbXBhdGlibGUgPSAiaXNlZSxvbWFwMy1pZ2VwMDAyMC1yZXYtZiIsICJ0aSxvbWFwMzZ4eCIsICJ0aSxvbWFwMyI7CisKKwkvKiBSZWd1bGF0b3IgdG8gdHJpZ2dlciB0aGUgV0xfRU4gc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZXA1Y2x3bWNfd2xlbjogcmVndWxhdG9yLWxiZXA1Y2x3bWMtd2xlbiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZXA1Y2x3bWMtd2xlbiI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BpbzUgMTEgR1BJT19BQ1RJVkVfSElHSD47CQkvKiBncGlvXzEzOSAtIFdMX0VOICovCisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwl9OworfTsKKworJm9tYXAzX3BteF9jb3JlIHsKKwlsYmVwNWNsd21jX3BpbnM6IHBpbm11eF9sYmVwNWNsd21jX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWQ0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTQpCS8qIG1jc3BpMV9jczMuZ3Bpb18xNzcgLSBXX0lSUSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTY2LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0NS5ncGlvXzEzNyAtIEJUX0VOICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNmEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ3LmdwaW9fMTM5IC0gV0xfRU4gKi8KKwkJPjsKKwl9OworfTsKKworJm1tYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMyX3BpbnMgJmxiZXA1Y2x3bWNfcGlucz47CisJdm1tYy1zdXBwbHkgPSA8JmxiZXA1Y2x3bWNfd2xlbj47CisJYnVzLXdpZHRoID0gPDQ+OworCW5vbi1yZW1vdmFibGU7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAuZHRzCmluZGV4IGIyMmNhYWEuLmZlYTdmN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDIwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC5kdHMKQEAgLTEsNSArMSw1IEBACiAvKgotICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQdjIgUmV2LiAoVEkgT01BUCBBTS9ETTM3eCkKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgSUdFUHYyIFJldi4gQyAoVEkgT01BUCBBTS9ETTM3eCkKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDEyIEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CkBAIC05LDI3MiArOSw1OSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgIm9tYXAzLWlnZXAuZHRzaSIKLSNpbmNsdWRlICJvbWFwLWdwbWMtc21zYzkyMjEuZHRzaSIKKyNpbmNsdWRlICJvbWFwMy1pZ2VwMDAyMC1jb21tb24uZHRzaSIKIAogLyB7Ci0JbW9kZWwgPSAiSUdFUHYyIChUSSBPTUFQIEFNL0RNMzd4KSI7CisJbW9kZWwgPSAiSUdFUHYyIFJldi4gQyAoVEkgT01BUCBBTS9ETTM3eCkiOwogCWNvbXBhdGlibGUgPSAiaXNlZSxvbWFwMy1pZ2VwMDAyMCIsICJ0aSxvbWFwMzZ4eCIsICJ0aSxvbWFwMyI7CiAKLQlsZWRzIHsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZsZWRzX3BpbnM+OwotCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7Ci0KLQkJYm9vdCB7Ci0JCQkgbGFiZWwgPSAib21hcDM6Z3JlZW46Ym9vdCI7Ci0JCQkgZ3Bpb3MgPSA8JmdwaW8xIDI2IEdQSU9fQUNUSVZFX0hJR0g+OwotCQkJIGRlZmF1bHQtc3RhdGUgPSAib24iOwotCQl9OwotCi0JCXVzZXIwIHsKLQkJCSBsYWJlbCA9ICJvbWFwMzpyZWQ6dXNlcjAiOwotCQkJIGdwaW9zID0gPCZncGlvMSAyNyBHUElPX0FDVElWRV9ISUdIPjsKLQkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7Ci0JCX07Ci0KLQkJdXNlcjEgewotCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMSI7Ci0JCQkgZ3Bpb3MgPSA8JmdwaW8xIDI4IEdQSU9fQUNUSVZFX0hJR0g+OwotCQkJIGRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKLQkJfTsKLQotCQl1c2VyMiB7Ci0JCQlsYWJlbCA9ICJvbWFwMzpncmVlbjp1c2VyMSI7Ci0JCQlncGlvcyA9IDwmdHdsX2dwaW8gMTkgR1BJT19BQ1RJVkVfTE9XPjsKLQkJfTsKKwkvKiBSZWd1bGF0b3IgdG8gdHJpZ2dlciB0aGUgV0lGSV9QRE4gc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZWUxdXNqeWNfcGRuOiBsYmVlMXVzanljX3BkbiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZWUxdXNqeWMtcGRuIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlncGlvID0gPCZncGlvNSAxMCBHUElPX0FDVElWRV9ISUdIPjsJLyogZ3Bpb18xMzggLSBXSUZJX1BETiAqLworCQlzdGFydHVwLWRlbGF5LXVzID0gPDEwMDAwPjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOwogCX07CiAKLSAgICAgICAvKiBIUyBVU0IgUG9ydCAxIFBvd2VyICovCi0gICAgICAgaHN1c2IxX3Bvd2VyOiBoc3VzYjFfcG93ZXJfcmVnIHsKLSAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKLSAgICAgICAgICAgICAgIHJlZ3VsYXRvci1uYW1lID0gImhzdXNiMV92YnVzIjsKLSAgICAgICAgICAgICAgIHJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OwotICAgICAgICAgICAgICAgcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0gICAgICAgICAgICAgICBncGlvID0gPCZ0d2xfZ3BpbyAxOCBHUElPX0FDVElWRV9MT1c+OwkvKiBHUElPIExFREEgKi8KLSAgICAgICAgICAgICAgIHN0YXJ0dXAtZGVsYXktdXMgPSA8NzAwMDA+OwotICAgICAgIH07Ci0KLQkvKiBIUyBVU0IgSG9zdCBQSFkgb24gUE9SVCAxICovCi0JaHN1c2IxX3BoeTogaHN1c2IxX3BoeSB7Ci0JCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7Ci0JCXJlc2V0LWdwaW9zID0gPCZncGlvMSAyNCBHUElPX0FDVElWRV9MT1c+OyAvKiBncGlvXzI0ICovCi0JCXZjYy1zdXBwbHkgPSA8JmhzdXNiMV9wb3dlcj47Ci0JfTsKLQotCXRmcDQxMDogZW5jb2RlckAwIHsKLQkJY29tcGF0aWJsZSA9ICJ0aSx0ZnA0MTAiOwotCQlwb3dlcmRvd24tZ3Bpb3MgPSA8JmdwaW82IDEwIEdQSU9fQUNUSVZFX0xPVz47IC8qIGdwaW9fMTcwICovCi0KLQkJcG9ydHMgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQkJcG9ydEAwIHsKLQkJCQlyZWcgPSA8MD47Ci0KLQkJCQl0ZnA0MTBfaW46IGVuZHBvaW50QDAgewotCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRwaV9vdXQ+OwotCQkJCX07Ci0JCQl9OwotCi0JCQlwb3J0QDEgewotCQkJCXJlZyA9IDwxPjsKLQotCQkJCXRmcDQxMF9vdXQ6IGVuZHBvaW50QDAgewotCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmR2aV9jb25uZWN0b3JfaW4+OwotCQkJCX07Ci0JCQl9OwotCQl9OwotCX07Ci0KLQlkdmkwOiBjb25uZWN0b3JAMCB7Ci0JCWNvbXBhdGlibGUgPSAiZHZpLWNvbm5lY3RvciI7Ci0JCWxhYmVsID0gImR2aSI7Ci0KLQkJZGlnaXRhbDsKLQotCQlkZGMtaTJjLWJ1cyA9IDwmaTJjMz47Ci0KLQkJcG9ydCB7Ci0JCQlkdmlfY29ubmVjdG9yX2luOiBlbmRwb2ludCB7Ci0JCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfb3V0PjsKLQkJCX07Ci0JCX07CisJLyogUmVndWxhdG9yIHRvIHRyaWdnZXIgdGhlIFJFU0VUX05fVyBzaWduYWwgb2YgdGhlIFdpZmkgbW9kdWxlICovCisJbGJlZTF1c2p5Y19yZXNldF9uX3c6IGxiZWUxdXNqeWNfcmVzZXRfbl93IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJyZWd1bGF0b3ItbGJlZTF1c2p5Yy1yZXNldC1uLXciOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCWdwaW8gPSA8JmdwaW81IDExIEdQSU9fQUNUSVZFX0hJR0g+OwkvKiBncGlvXzEzOSAtIFJFU0VUX05fVyAqLworCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJfTsKIH07CiAKICZvbWFwM19wbXhfY29yZSB7CisJbGJlZTF1c2p5Y19waW5zOiBwaW5tdXhfbGJlZTF1c2p5Y19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDUuZ3Bpb18xMzcgLSBSRVNFVF9OX1cgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2OCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDYuZ3Bpb18xMzggLSBXSUZJX1BETiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTZhLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0Ny5ncGlvXzEzOSAtIFJTVF9OX0IgKi8KKwkJPjsKKwl9OworCisJdWFydDJfcGluczogcGlubXV4X3VhcnQyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX2N0cy51YXJ0Ml9jdHMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogdWFydDJfcnRzIC51YXJ0Ml9ydHMqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml90eC51YXJ0Ml90eCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTdhLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX3J4LnVhcnQyX3J4ICovCisJCT47CisJfTsKK307CisKKy8qIE9uIGJvYXJkIFdpZmkgbW9kdWxlICovCismbW1jMiB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8Ci0JCSZ0ZnA0MTBfcGlucwotCQkmZHNzX2RwaV9waW5zCi0JPjsKLQotCXRmcDQxMF9waW5zOiBwaW5tdXhfdGZwNDEwX3BpbnMgewotCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxOTYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpICAgLyogaGRxX3Npby5ncGlvXzE3MCAqLwotCQk+OwotCX07Ci0KLQlkc3NfZHBpX3BpbnM6IHBpbm11eF9kc3NfZHBpX3BpbnMgewotCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgwYTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX3BjbGsuZHNzX3BjbGsgKi8KLQkJCTB4MGE2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19oc3luYy5kc3NfaHN5bmMgKi8KLQkJCTB4MGE4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc192c3luYy5kc3NfdnN5bmMgKi8KLQkJCTB4MGFhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19hY2JpYXMuZHNzX2FjYmlhcyAqLwotCQkJMHgwYWMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEwLmRzc19kYXRhMCAqLwotCQkJMHgwYWUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExLmRzc19kYXRhMSAqLwotCQkJMHgwYjAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyLmRzc19kYXRhMiAqLwotCQkJMHgwYjIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEzLmRzc19kYXRhMyAqLwotCQkJMHgwYjQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE0LmRzc19kYXRhNCAqLwotCQkJMHgwYjYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE1LmRzc19kYXRhNSAqLwotCQkJMHgwYjggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE2LmRzc19kYXRhNiAqLwotCQkJMHgwYmEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE3LmRzc19kYXRhNyAqLwotCQkJMHgwYmMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE4LmRzc19kYXRhOCAqLwotCQkJMHgwYmUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE5LmRzc19kYXRhOSAqLwotCQkJMHgwYzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMC5kc3NfZGF0YTEwICovCi0JCQkweDBjMiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTExLmRzc19kYXRhMTEgKi8KLQkJCTB4MGM0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTIuZHNzX2RhdGExMiAqLwotCQkJMHgwYzYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMy5kc3NfZGF0YTEzICovCi0JCQkweDBjOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE0LmRzc19kYXRhMTQgKi8KLQkJCTB4MGNhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTUuZHNzX2RhdGExNSAqLwotCQkJMHgwY2MgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNi5kc3NfZGF0YTE2ICovCi0JCQkweDBjZSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE3LmRzc19kYXRhMTcgKi8KLQkJCTB4MGQwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTguZHNzX2RhdGExOCAqLwotCQkJMHgwZDIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExOS5kc3NfZGF0YTE5ICovCi0JCQkweDBkNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIwLmRzc19kYXRhMjAgKi8KLQkJCTB4MGQ2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjEuZHNzX2RhdGEyMSAqLwotCQkJMHgwZDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMi5kc3NfZGF0YTIyICovCi0JCQkweDBkYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIzLmRzc19kYXRhMjMgKi8KLQkJPjsKLQl9OwotfTsKLQotJm9tYXAzX3BteF9jb3JlMiB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8Ci0JCSZoc3VzYmIxX3BpbnMKLQk+OwotCi0JaHN1c2JiMV9waW5zOiBwaW5tdXhfaHN1c2JiMV9waW5zIHsKLQkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGV0a19jdGwuaHN1c2IxX2NsayAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWQ4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkJLyogZXRrX2Nsay5oc3VzYjFfc3RwICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZWMsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q4LmhzdXNiMV9kaXIgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlZSwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDkuaHN1c2IxX254dCAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWRjLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kMC5oc3VzYjFfZGF0YTAgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkZSwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDEuaHN1c2IxX2RhdGExICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTAsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2QyLmhzdXNiMV9kYXRhMiAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWUyLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kMy5oc3VzYjFfZGF0YTcgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlNCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDQuaHN1c2IxX2RhdGE0ICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTYsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q1LmhzdXNiMV9kYXRhNSAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWU4LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kNi5oc3VzYjFfZGF0YTYgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlYSwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDcuaHN1c2IxX2RhdGEzICovCi0JCT47Ci0JfTsKLQotCWxlZHNfcGluczogcGlubXV4X2xlZHNfcGlucyB7Ci0JCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZjQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpIC8qIGV0a19kMTIuZ3Bpb18yNiAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWY2LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KSAvKiBldGtfZDEzLmdwaW9fMjcgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVmOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkgLyogZXRrX2QxNC5ncGlvXzI4ICovCi0JCT47Ci0JfTsKLX07Ci0KLSZpMmMzIHsKLQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLQotCS8qCi0JICogRGlzcGxheSBtb25pdG9yIGZlYXR1cmVzIGFyZSBidXJudCBpbiB0aGUgRUVQUk9NCi0JICogYXMgRURJRCBkYXRhLgotCSAqLwotCWVlcHJvbUA1MCB7Ci0JCWNvbXBhdGlibGUgPSAidGksZWVwcm9tIjsKLQkJcmVnID0gPDB4NTA+OwotCX07Ci19OwotCi0mZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDAwMDAwMDAwIDB4MjAwMDAwMDA+LAotCQkgPDUgMCAweDJjMDAwMDAwIDB4MDEwMDAwMDA+OwotCi0JbmFuZEAwLDAgewotCQlsaW51eCxtdGQtbmFtZT0gIm1pY3JvbixtdDI5YzRnOTZtYXoiOwotCQlyZWcgPSA8MCAwIDA+OwotCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47Ci0JCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKLQotCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwotCQlncG1jLGNzLW9uLW5zID0gPDA+OwotCQlncG1jLGNzLXJkLW9mZi1ucyA9IDw0ND47Ci0JCWdwbWMsY3Mtd3Itb2ZmLW5zID0gPDQ0PjsKLQkJZ3BtYyxhZHYtb24tbnMgPSA8Nj47Ci0JCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDwzND47Ci0JCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0ND47Ci0JCWdwbWMsd2Utb2ZmLW5zID0gPDQwPjsKLQkJZ3BtYyxvZS1vZmYtbnMgPSA8NTQ+OwotCQlncG1jLGFjY2Vzcy1ucyA9IDw2ND47Ci0JCWdwbWMscmQtY3ljbGUtbnMgPSA8ODI+OwotCQlncG1jLHdyLWN5Y2xlLW5zID0gPDgyPjsKLQkJZ3BtYyx3ci1hY2Nlc3MtbnMgPSA8NDA+OwotCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDwwPjsKLQotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0KLQkJcGFydGl0aW9uQDAgewotCQkJbGFiZWwgPSAiU1BMIjsKLQkJCXJlZyA9IDwwIDB4MTAwMDAwPjsKLQkJfTsKLQkJcGFydGl0aW9uQDgwMDAwIHsKLQkJCWxhYmVsID0gIlUtQm9vdCI7Ci0JCQlyZWcgPSA8MHgxMDAwMDAgMHgxODAwMDA+OwotCQl9OwotCQlwYXJ0aXRpb25AMWMwMDAwIHsKLQkJCWxhYmVsID0gIkVudmlyb25tZW50IjsKLQkJCXJlZyA9IDwweDI4MDAwMCAweDEwMDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkAyODAwMDAgewotCQkJbGFiZWwgPSAiS2VybmVsIjsKLQkJCXJlZyA9IDwweDM4MDAwMCAweDMwMDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkA3ODAwMDAgewotCQkJbGFiZWwgPSAiRmlsZXN5c3RlbSI7Ci0JCQlyZWcgPSA8MHg2ODAwMDAgMHgxZjk4MDAwMD47Ci0JCX07Ci0JfTsKLQotCWV0aGVybmV0QGdwbWMgewotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JnNtc2M5MjIxX3BpbnM+OwotCQlyZWcgPSA8NSAwIDB4ZmY+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvNj47Ci0JCWludGVycnVwdHMgPSA8MTYgSVJRX1RZUEVfTEVWRUxfTE9XPjsKLQl9OwotfTsKLQotJnVzYmhzaG9zdCB7Ci0JcG9ydDEtbW9kZSA9ICJlaGNpLXBoeSI7Ci19OwotCi0mdXNiaHNlaGNpIHsKLQlwaHlzID0gPCZoc3VzYjFfcGh5PjsKLX07Ci0KLSZ2cGxsMiB7Ci0gICAgICAgIC8qIE5lZWRlZCBmb3IgRFNTICovCi0gICAgICAgIHJlZ3VsYXRvci1uYW1lID0gInZkZHNfZHNpIjsKLX07Ci0KLSZkc3MgewotCXN0YXR1cyA9ICJvayI7Ci0KLQlwb3J0IHsKLQkJZHBpX291dDogZW5kcG9pbnQgewotCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfaW4+OwotCQkJZGF0YS1saW5lcyA9IDwyND47Ci0JCX07Ci0JfTsKKwlwaW5jdHJsLTAgPSA8Jm1tYzJfcGlucyAmbGJlZTF1c2p5Y19waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmbGJlZTF1c2p5Y19wZG4+OworCXZtbWNfYXV4LXN1cHBseSA9IDwmbGJlZTF1c2p5Y19yZXNldF9uX3c+OworCWJ1cy13aWR0aCA9IDw0PjsKKwlub24tcmVtb3ZhYmxlOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLWNvbW1vbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMzAtY29tbW9uLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNiMTUyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLWNvbW1vbi5kdHNpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb21tb24gRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQIENPTSBNT0RVTEUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDE0IEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib21hcDMtaWdlcC5kdHNpIgorCisvIHsKKwlsZWRzOiBncGlvX2xlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJdXNlcjAgeworCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMCI7CisJCQkgZ3Bpb3MgPSA8JnR3bF9ncGlvIDE4IEdQSU9fQUNUSVZFX0xPVz47CS8qIExFREEgKi8KKwkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCX07CisKKwkJdXNlcjEgeworCQkJIGxhYmVsID0gIm9tYXAzOmdyZWVuOnVzZXIxIjsKKwkJCSBncGlvcyA9IDwmdHdsX2dwaW8gMTkgR1BJT19BQ1RJVkVfTE9XPjsJLyogTEVEQiAqLworCQkJIGRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKworCQl1c2VyMiB7CisJCQkgbGFiZWwgPSAib21hcDM6cmVkOnVzZXIxIjsKKwkJCSBncGlvcyA9IDwmZ3BpbzEgMTYgR1BJT19BQ1RJVkVfTE9XPjsJCS8qIGdwaW9fMTYgKi8KKwkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCX07CisJfTsKK307CisKKyZvbWFwM19wbXhfY29yZSB7CisJdWFydDJfcGluczogcGlubXV4X3VhcnQyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTZjLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTEpCS8qIG1jYnNwM19keC51YXJ0Ml9jdHMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2ZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMSkJLyogbWNic3AzX2RyLnVhcnQyX3J0cyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTcwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUxKQkvKiBtY2JzcDNfY2xrLnVhcnQyX3R4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNzIsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMSkJLyogbWNic3AzX2ZzeC51YXJ0Ml9yeCAqLworCQk+OworCX07Cit9OworCismb21hcDNfcG14X2NvcmUyIHsKKwlsZWRzX2NvcmUyX3BpbnM6IHBpbm11eF9sZWRzX2NvcmUyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWUwLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBldGtfZDIuZ3Bpb18xNiAqLworCQk+OworCX07Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC1yZXYtZy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC1yZXYtZy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyNmIyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLXJldi1nLmR0cwpAQCAtMCwwICsxLDY3IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQIENPTSBNT0RVTEUgUmV2LiBHIChUSSBPTUFQIEFNL0RNMzd4KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBKYXZpZXIgTWFydGluZXogQ2FuaWxsYXMgPGphdmllckBjb2xsYWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgRW5yaWMgQmFsbGV0Ym8gaSBTZXJyYSA8ZWJhbGxldGJvQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJvbWFwMy1pZ2VwMDAzMC1jb21tb24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiSUdFUCBDT00gTU9EVUxFIFJldi4gRyAoVEkgT01BUCBBTS9ETTM3eCkiOworCWNvbXBhdGlibGUgPSAiaXNlZSxvbWFwMy1pZ2VwMDAzMC1yZXYtZyIsICJ0aSxvbWFwMzZ4eCIsICJ0aSxvbWFwMyI7CisKKwkvKiBSZWd1bGF0b3IgdG8gdHJpZ2dlciB0aGUgV0xfRU4gc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZXA1Y2x3bWNfd2xlbjogcmVndWxhdG9yLWxiZXA1Y2x3bWMtd2xlbiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZXA1Y2x3bWMtd2xlbiI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BpbzUgMTEgR1BJT19BQ1RJVkVfSElHSD47CQkvKiBncGlvXzEzOSAtIFdMX0VOICovCisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwl9OworfTsKKworJm9tYXAzX3BteF9jb3JlIHsKKwlsYmVwNWNsd21jX3BpbnM6IHBpbm11eF9sYmVwNWNsd21jX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTY0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ0LmdwaW9fMTM2IC0gV19JUlEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDUuZ3Bpb18xMzcgLSBCVF9FTiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTZhLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0Ny5ncGlvXzEzOSAtIFdMX0VOICovCisJCT47CisJfTsKKworCWxlZHNfcGluczogcGlubXV4X2xlZHNfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxYmUsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIGkyYzJfc2NsLmdwaW9fMTY4ICovCisJCT47CisJfTsKKworfTsKKworJmkyYzIgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismbGVkcyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmxlZHNfcGlucyAmbGVkc19jb3JlMl9waW5zPjsKKworCWJvb3QgeworCQlsYWJlbCA9ICJvbWFwMzpncmVlbjpib290IjsKKwkJZ3Bpb3MgPSA8JmdwaW82IDggR1BJT19BQ1RJVkVfSElHSD47CisJCWRlZmF1bHQtc3RhdGUgPSAib24iOworCX07Cit9OworCismbW1jMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm1tYzJfcGlucyAmbGJlcDVjbHdtY19waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmbGJlcDVjbHdtY193bGVuPjsKKwlidXMtd2lkdGggPSA8ND47CisJbm9uLXJlbW92YWJsZTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC5kdHMKaW5kZXggMjc5Mzc0OS4uODE1MGY0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMzAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLmR0cwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIElHRVAgQ09NIE1PRFVMRSAoVEkgT01BUCBBTS9ETTM3eCkKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgSUdFUCBDT00gTU9EVUxFIFJldi4gRSAoVEkgT01BUCBBTS9ETTM3eCkKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDEyIEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CkBAIC05LDk3ICs5LDYyIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSAib21hcDMtaWdlcC5kdHNpIgorI2luY2x1ZGUgIm9tYXAzLWlnZXAwMDMwLWNvbW1vbi5kdHNpIgogCiAvIHsKLQltb2RlbCA9ICJJR0VQIENPTSBNT0RVTEUgKFRJIE9NQVAgQU0vRE0zN3gpIjsKKwltb2RlbCA9ICJJR0VQIENPTSBNT0RVTEUgUmV2LiBFIChUSSBPTUFQIEFNL0RNMzd4KSI7CiAJY29tcGF0aWJsZSA9ICJpc2VlLG9tYXAzLWlnZXAwMDMwIiwgInRpLG9tYXAzNnh4IiwgInRpLG9tYXAzIjsKIAotCWxlZHMgewotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JmxlZHNfcGlucz47Ci0JCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkvKiBSZWd1bGF0b3IgdG8gdHJpZ2dlciB0aGUgV0lGSV9QRE4gc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZWUxdXNqeWNfcGRuOiBsYmVlMXVzanljX3BkbiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZWUxdXNqeWMtcGRuIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlncGlvID0gPCZncGlvNSAxMCBHUElPX0FDVElWRV9ISUdIPjsJLyogZ3Bpb18xMzggLSBXSUZJX1BETiAqLworCQlzdGFydHVwLWRlbGF5LXVzID0gPDEwMDAwPjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCX07CiAKLQkJYm9vdCB7Ci0JCQkgbGFiZWwgPSAib21hcDM6Z3JlZW46Ym9vdCI7Ci0JCQkgZ3Bpb3MgPSA8JnR3bF9ncGlvIDEzIEdQSU9fQUNUSVZFX0xPVz47Ci0JCQkgZGVmYXVsdC1zdGF0ZSA9ICJvbiI7Ci0JCX07Ci0KLQkJdXNlcjAgewotCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMCI7Ci0JCQkgZ3Bpb3MgPSA8JnR3bF9ncGlvIDE4IEdQSU9fQUNUSVZFX0xPVz47IC8qIExFREEgKi8KLQkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7Ci0JCX07Ci0KLQkJdXNlcjEgewotCQkJIGxhYmVsID0gIm9tYXAzOmdyZWVuOnVzZXIxIjsKLQkJCSBncGlvcyA9IDwmdHdsX2dwaW8gMTkgR1BJT19BQ1RJVkVfTE9XPjsgLyogTEVEQiAqLwotCQkJIGRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKLQkJfTsKLQotCQl1c2VyMiB7Ci0JCQkgbGFiZWwgPSAib21hcDM6cmVkOnVzZXIxIjsKLQkJCSBncGlvcyA9IDwmZ3BpbzEgMTYgR1BJT19BQ1RJVkVfTE9XPjsKLQkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7Ci0JCX07CisJLyogUmVndWxhdG9yIHRvIHRyaWdnZXIgdGhlIFJFU0VUX05fVyBzaWduYWwgb2YgdGhlIFdpZmkgbW9kdWxlICovCisJbGJlZTF1c2p5Y19yZXNldF9uX3c6IGxiZWUxdXNqeWNfcmVzZXRfbl93IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJyZWd1bGF0b3ItbGJlZTF1c2p5Yy1yZXNldC1uLXciOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCWdwaW8gPSA8JmdwaW81IDExIEdQSU9fQUNUSVZFX0hJR0g+OwkvKiBncGlvXzEzOSAtIFJFU0VUX05fVyAqLworCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJfTsKIH07CiAKLSZvbWFwM19wbXhfY29yZTIgewotCWxlZHNfcGluczogcGlubXV4X2xlZHNfcGlucyB7Cismb21hcDNfcG14X2NvcmUgeworCWxiZWUxdXNqeWNfcGluczogcGlubXV4X2xiZWUxdXNqeWNfcGlucyB7CiAJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpIC8qIGV0a19kMi5ncGlvXzE2ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ1LmdwaW9fMTM3IC0gUkVTRVRfTl9XICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNjgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ2LmdwaW9fMTM4IC0gV0lGSV9QRE4gKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2YSwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDcuZ3Bpb18xMzkgLSBSU1RfTl9CICovCiAJCT47CiAJfTsKIH07CiAKLSZncG1jIHsKLQlyYW5nZXMgPSA8MCAwIDB4MDAwMDAwMDAgMHgyMDAwMDAwMD47CismbGVkcyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmxlZHNfY29yZTJfcGlucz47CiAKLQluYW5kQDAsMCB7Ci0JCWxpbnV4LG10ZC1uYW1lPSAibWljcm9uLG10MjljNGc5Nm1heiI7Ci0JCXJlZyA9IDwwIDAgMD47Ci0JCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKLQkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOwotCi0JCWdwbWMsc3luYy1jbGstcHMgPSA8MD47Ci0JCWdwbWMsY3Mtb24tbnMgPSA8MD47Ci0JCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDQ0PjsKLQkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8NDQ+OwotCQlncG1jLGFkdi1vbi1ucyA9IDw2PjsKLQkJZ3BtYyxhZHYtcmQtb2ZmLW5zID0gPDM0PjsKLQkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDQ0PjsKLQkJZ3BtYyx3ZS1vZmYtbnMgPSA8NDA+OwotCQlncG1jLG9lLW9mZi1ucyA9IDw1ND47Ci0JCWdwbWMsYWNjZXNzLW5zID0gPDY0PjsKLQkJZ3BtYyxyZC1jeWNsZS1ucyA9IDw4Mj47Ci0JCWdwbWMsd3ItY3ljbGUtbnMgPSA8ODI+OwotCQlncG1jLHdyLWFjY2Vzcy1ucyA9IDw0MD47Ci0JCWdwbWMsd3ItZGF0YS1tdXgtYnVzLW5zID0gPDA+OwotCi0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQotCQlwYXJ0aXRpb25AMCB7Ci0JCQlsYWJlbCA9ICJTUEwiOwotCQkJcmVnID0gPDAgMHgxMDAwMDA+OwotCQl9OwotCQlwYXJ0aXRpb25AODAwMDAgewotCQkJbGFiZWwgPSAiVS1Cb290IjsKLQkJCXJlZyA9IDwweDEwMDAwMCAweDE4MDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkAxYzAwMDAgewotCQkJbGFiZWwgPSAiRW52aXJvbm1lbnQiOwotCQkJcmVnID0gPDB4MjgwMDAwIDB4MTAwMDAwPjsKLQkJfTsKLQkJcGFydGl0aW9uQDI4MDAwMCB7Ci0JCQlsYWJlbCA9ICJLZXJuZWwiOwotCQkJcmVnID0gPDB4MzgwMDAwIDB4MzAwMDAwPjsKLQkJfTsKLQkJcGFydGl0aW9uQDc4MDAwMCB7Ci0JCQlsYWJlbCA9ICJGaWxlc3lzdGVtIjsKLQkJCXJlZyA9IDwweDY4MDAwMCAweDFmOTgwMDAwPjsKLQkJfTsKKwlib290IHsKKwkJbGFiZWwgPSAib21hcDM6Z3JlZW46Ym9vdCI7CisJCWdwaW9zID0gPCZ0d2xfZ3BpbyAxMyBHUElPX0FDVElWRV9MT1c+OwkvKiBMRURTWU5DICovCisJCWRlZmF1bHQtc3RhdGUgPSAib24iOwogCX07CiB9OworCisvKiBPbiBib2FyZCBXaWZpIG1vZHVsZSAqLworJm1tYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMyX3BpbnMgJmxiZWUxdXNqeWNfcGlucz47CisJdm1tYy1zdXBwbHkgPSA8JmxiZWUxdXNqeWNfcGRuPjsKKwl2bW1jX2F1eC1zdXBwbHkgPSA8JmxiZWUxdXNqeWNfcmVzZXRfbl93PjsKKwlidXMtd2lkdGggPSA8ND47CisJbm9uLXJlbW92YWJsZTsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxkcC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1sZHAuZHRzCmluZGV4IDcyZGNhMGIuLmI2OTliYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxkcC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGRwLmR0cwpAQCAtNyw2ICs3LDcgQEAKICAqLwogL2R0cy12MS87CiAKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgogI2luY2x1ZGUgIm9tYXAzNHh4LmR0c2kiCiAjaW5jbHVkZSAib21hcC1ncG1jLXNtc2M5MTF4LmR0c2kiCiAKQEAgLTEwMSw4ICsxMDIsOSBAQAogCiAJbmFuZEAwLDAgewogCQlsaW51eCxtdGQtbmFtZT0gIm1pY3JvbixuYW5kIjsKLQkJcmVnID0gPDAgMCAwPjsKKwkJcmVnID0gPDAgMCA0PjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKKwkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8Mj47CiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKIAogCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwpAQCAtMTQxLDcgKzE0Myw3IEBACiAJCX07CiAJCXBhcnRpdGlvbkAyMDAwMDAwIHsKIAkJCWxhYmVsID0gIkZpbGVzeXN0ZW0iOwotCQkJcmVnID0gPDB4MjAwMDAwMCAweGUwMDAwMDA+OworCQkJcmVnID0gPDB4MjAwMDAwMCAweDYwMDAwMDA+OwogCQl9OwogCX07CiAKQEAgLTI2Myw2ICsyNjUsMjYgQEAKIAl9OwogfTsKIAorJnR3bF9rZXlwYWQgeworCWxpbnV4LGtleW1hcCA9IDxNQVRSSVhfS0VZKDAsIDAsIEtFWV8xKQorCQkJTUFUUklYX0tFWSgwLCAxLCBLRVlfMikKKwkJCU1BVFJJWF9LRVkoMCwgMiwgS0VZXzMpCisJCQlNQVRSSVhfS0VZKDEsIDAsIEtFWV80KQorCQkJTUFUUklYX0tFWSgxLCAxLCBLRVlfNSkKKwkJCU1BVFJJWF9LRVkoMSwgMiwgS0VZXzYpCisJCQlNQVRSSVhfS0VZKDEsIDMsIEtFWV9GNSkKKwkJCU1BVFJJWF9LRVkoMiwgMCwgS0VZXzcpCisJCQlNQVRSSVhfS0VZKDIsIDEsIEtFWV84KQorCQkJTUFUUklYX0tFWSgyLCAyLCBLRVlfOSkKKwkJCU1BVFJJWF9LRVkoMiwgMywgS0VZX0Y2KQorCQkJTUFUUklYX0tFWSgzLCAwLCBLRVlfRjcpCisJCQlNQVRSSVhfS0VZKDMsIDEsIEtFWV8wKQorCQkJTUFUUklYX0tFWSgzLCAyLCBLRVlfRjgpCisJCQlNQVRSSVhfS0VZKDUsIDQsIEtFWV9SRVNFUlZFRCkKKwkJCU1BVFJJWF9LRVkoNCwgNCwgS0VZX1ZPTFVNRVVQKQorCQkJTUFUUklYX0tFWSg1LCA1LCBLRVlfVk9MVU1FRE9XTik+OworfTsKKwogJnVhcnQzIHsKIAlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZpbnRjIDc0ICZvbWFwM19wbXhfY29yZSBPTUFQM19VQVJUM19SWD47CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGlsbHktYTgzeC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGlsbHktYTgzeC5kdHNpCmluZGV4IGQ5NzMwODguLmU4MWZiNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxpbGx5LWE4M3guZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1saWxseS1hODN4LmR0c2kKQEAgLTM2Myw3ICszNjMsNyBAQAogCQk8NyAwIDB4MTUwMDAwMDAgMHgwMTAwMDAwMD47CiAKIAluYW5kQDAsMCB7Ci0JCXJlZyA9IDwwIDAgMHgxMDAwMDAwPjsKKwkJcmVnID0gPDAgMCA0PjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKIAkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOwogCQkvKiBubyBlbG0gb24gb21hcDMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45MDAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMKaW5kZXggYmM4MmExMi4uNTNmM2NhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMKQEAgLTExNSw2ICsxMTUsMTIgQEAKIAkJZWNpLXN3aXRjaC1ncGlvcyA9IDwmZ3BpbzYgMjIgR1BJT19BQ1RJVkVfSElHSD47IC8qIDE4MiAqLwogCQlzcGVha2VyLWFtcGxpZmllci1ncGlvcyA9IDwmdHdsX2dwaW8gNyBHUElPX0FDVElWRV9ISUdIPjsKIAl9OworCisJYmF0dGVyeTogbjkwMC1iYXR0ZXJ5IHsKKwkJY29tcGF0aWJsZSA9ICJub2tpYSxuOTAwLWJhdHRlcnkiOworCQlpby1jaGFubmVscyA9IDwmdHdsX21hZGMgMD4sIDwmdHdsX21hZGMgND4sIDwmdHdsX21hZGMgMTI+OworCQlpby1jaGFubmVsLW5hbWVzID0gInRlbXAiLCAiYnNpIiwgInZiYXQiOworCX07CiB9OwogCiAmb21hcDNfcG14X2NvcmUgewpAQCAtMTQyLDYgKzE0OCwzMyBAQAogCQk+OwogCX07CiAKKwlncG1jX3BpbnM6IHBpbm11eF9ncG1jX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCisJCQkvKiBhZGRyZXNzIGxpbmVzICovCisgICAgICAgICAgICAgICAgICAgICAgICBPTUFQM19DT1JFMV9JT1BBRCgweDIwN2EsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgICAgIC8qIGdwbWNfYTEuZ3BtY19hMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMDdjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgICAgICAvKiBncG1jX2EyLmdwbWNfYTIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjA3ZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAgICAgLyogZ3BtY19hMy5ncG1jX2EzICovCisKKwkJCS8qIGRhdGEgbGluZXMsIGdwbWNfZDAuLmQ3IG5vdCBtdXhhYmxlIGFjY29yZGluZyB0byBUUk0gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjA5ZSwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgICAgICAgLyogZ3BtY19kOC5ncG1jX2Q4ICovCisgICAgICAgICAgICAgICAgICAgICAgICBPTUFQM19DT1JFMV9JT1BBRCgweDIwYTAsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkgICAgICAgIC8qIGdwbWNfZDkuZ3BtY19kOSAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGEyLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxMC5ncG1jX2QxMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGE0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxMS5ncG1jX2QxMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGE2LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxMi5ncG1jX2QxMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGE4LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxMy5ncG1jX2QxMyAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGFhLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxNC5ncG1jX2QxNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGFjLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxNS5ncG1jX2QxNSAqLworCisJCQkvKgorCQkJICogZ3BtY19uY3MwLCBncG1jX25hZHZfYWxlLCBncG1jX25vZSwgZ3BtY19ud2UsIGdwbWNfd2FpdDAgbm90IG11eGFibGUKKwkJCSAqIGFjY29yZGluZyB0byBUUk0uIE9uZU5BTkQgc2VlbXMgdG8gcmVxdWlyZSBQSU5fSU5QVVQgb24gY2xvY2suCisJCQkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjBiMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAgICAgLyogZ3BtY19uY3MxLmdwbWNfbmNzMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGJlLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2Nsay5ncG1jX2NsayAqLworCQk+OworCX07CisKIAlpMmMxX3BpbnM6IHBpbm11eF9pMmMxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAogCQkJMHgxOGEgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIGkyYzFfc2NsICovCkBAIC01NDAsNiArNTczLDE2IEBACiAJCXBvd2VyLWdwaW8gPSA8JmdwaW80IDIgR1BJT19BQ1RJVkVfSElHSD47IC8qIDk4ICovCiAJfTsKIAorCXNpNDcxMzogc2k0NzEzQDYzIHsKKwkJY29tcGF0aWJsZSA9ICJzaWxhYnMsc2k0NzEzIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MHg2Mz47CisKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZncGlvMiAyMSBJUlFfVFlQRV9FREdFX0ZBTExJTkc+OyAvKiA1MyAqLworICAgICAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gPCZncGlvNiAzIEdQSU9fQUNUSVZFX0hJR0g+OyAvKiAxNjMgKi8KKyAgICAgICAgICAgICAgICB2aW8tc3VwcGx5ID0gPCZ2aW8+OworICAgICAgICAgICAgICAgIHZkZC1zdXBwbHkgPSA8JnZhdXgxPjsKKwl9OworCiAJYnEyNDE1MGE6IGJxMjQxNTBhQDZiIHsKIAkJY29tcGF0aWJsZSA9ICJ0aSxicTI0MTUwYSI7CiAJCXJlZyA9IDwweDZiPjsKQEAgLTU4NSwxNiArNjI4LDE2IEBACiB9OwogCiAmZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDA0MDAwMDAwIDB4MTAwMDAwMDA+OyAvKiAyNTZNQiAqLwogCXJhbmdlcyA9IDwwIDAgMHgwMTAwMDAwMCAweDAxMDAwMDAwPiwJLyogMTYgTUIgZm9yIE9uZU5BTkQgKi8KIAkJIDwxIDAgMHgwMjAwMDAwMCAweDAxMDAwMDAwPjsJLyogMTYgTUIgZm9yIHNtYzkxYzk2ICovCisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmdwbWNfcGlucz47CiAKLQkvKiBncGlvLWlycSBmb3IgZG1hOiA2NSAqLwotCisJLyogc3lzX25kbWFyZXExIGNvdWxkIGJlIHVzZWQgYnkgdGhlIGRyaXZlciwgbm90IGFzIGdwaW82NSB0aG91Z2ggKi8KIAlvbmVuYW5kQDAsMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPDAgMCAweDEwMDAwMDAwPjsKKwkJcmVnID0gPDAgMCAweDIwMDAwPjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSAxMjhLICovCiAKIAkJZ3BtYyxzeW5jLXJlYWQ7CiAJCWdwbWMsc3luYy13cml0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45NTAtbjkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45NTAtbjkuZHRzaQppbmRleCA3MGFkZGNiLi4xZTQ5ZGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTUwLW45LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjk1MC1uOS5kdHNpCkBAIC0xMTUsMTIgKzExNSwxMiBAQAogfTsKIAogJmdwbWMgewotCXJhbmdlcyA9IDwwIDAgMHgwNDAwMDAwMCAweDIwMDAwMDAwPjsKKwlyYW5nZXMgPSA8MCAwIDB4MDQwMDAwMDAgMHgxMDAwMDAwPjsJLyogQ1MwOiAxNk1CIGZvciBPbmVOQU5EICovCiAKIAlvbmVuYW5kQDAsMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPDAgMCAweDIwMDAwMDAwPjsKKwkJcmVnID0gPDAgMCAweDIwMDAwPjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSAxMjhLICovCiAKIAkJZ3BtYyxzeW5jLXJlYWQ7CiAJCWdwbWMsc3luYy13cml0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiLXQzNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2ItdDM1LmR0c2kKaW5kZXggZDU5ZTNkZS4uODI3ZjYxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2ItdDM1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2ItdDM1LmR0c2kKQEAgLTIsNiArMiw1OSBAQAogICogQ29tbW9uIHN1cHBvcnQgZm9yIENvbXB1TGFiIFNCLVQzNSB1c2VkIG9uIFNCQy1UMzUzMCwgU0JDLVQzNTE3IGFuZCBTQkMtVDM3MzAKICAqLwogCisvIHsKKwl0ZnA0MTA6IGVuY29kZXJAMCB7CisJCWNvbXBhdGlibGUgPSAidGksdGZwNDEwIjsKKworCQlwb3dlcmRvd24tZ3Bpb3MgPSA8JmdwaW8yIDIyIEdQSU9fQUNUSVZFX0xPVz47ICAvKiBncGlvXzU0ICovCisKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ0ZnA0MTBfcGlucz47CisKKwkJcG9ydHMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisKKwkJCQl0ZnA0MTBfaW46IGVuZHBvaW50QDAgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRwaV9vdXQ+OworCQkJCX07CisJCQl9OworCisJCQlwb3J0QDEgeworCQkJCXJlZyA9IDwxPjsKKworCQkJCXRmcDQxMF9vdXQ6IGVuZHBvaW50QDAgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmR2aV9jb25uZWN0b3JfaW4+OworCQkJCX07CisJCQl9OworCQl9OworCX07CisKKwlkdmkwOiBjb25uZWN0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAiZHZpLWNvbm5lY3RvciI7CisJCWxhYmVsID0gImR2aSI7CisKKwkJcG9ydCB7CisJCQlkdmlfY29ubmVjdG9yX2luOiBlbmRwb2ludCB7CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfb3V0PjsKKwkJCX07CisJCX07CisJfTsKKworCWF1ZGlvX2FtcDogYXVkaW9fYW1wIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJhdWRpb19hbXAiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnNiX3QzNV9hdWRpb19hbXA+OworCQlncGlvID0gPCZncGlvMiAyOSBHUElPX0FDVElWRV9MT1c+OyAgIC8qIGdwaW9fNjEgKi8KKwkJZW5hYmxlLWFjdGl2ZS1sb3c7CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKK307CisKICZvbWFwM19wbXhfY29yZSB7CiAJc21zYzJfcGluczogcGlubXV4X3Ntc2MyX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPApAQCAtOSw2ICs2MiwzOCBAQAogCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGQyLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREU0KQkvKiBncG1jX3dhaXQzLmdwaW9fNjUgKi8KIAkJPjsKIAl9OworCisJdGZwNDEwX3BpbnM6IHBpbm11eF90ZnA0MTBfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwYjQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIGdwbWNfbmNzMy5ncGlvXzU0ICovCisJCT47CisJfTsKKworCWkyYzNfcGluczogcGlubXV4X2kyYzNfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxYzIsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGkyYzNfc2NsICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxYzQsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGkyYzNfc2RhICovCisJCT47CisJfTsKKworCXNiX3QzNV9hdWRpb19hbXA6IHBpbm11eF9zYl90MzVfYXVkaW9fYW1wIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBjOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkgLyogZ3BtY19uYmUxLmdwaW9fNjEgKi8KKwkJPjsKKwl9OworfTsKKworJmkyYzMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmMzX3BpbnM+OworCisJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisKKwlhdDI0QDUwIHsKKwkJY29tcGF0aWJsZSA9ICJhdDI0LDI0YzAyIjsKKwkJcGFnZXNpemUgPSA8MTY+OworCQlyZWcgPSA8MHg1MD47CisJfTsKIH07CiAKICZncG1jIHsKQEAgLTIyLDI0ICsxMDcsMjkgQEAKIAkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0xFVkVMX0xPVz47CiAJCXJlZyA9IDw0IDAgMHhmZj47CiAJCWJhbmstd2lkdGggPSA8Mj47Ci0JCWdwbWMsbXV4LWFkZC1kYXRhOwotCQlncG1jLGNzLW9uLW5zID0gPDE+OwotCQlncG1jLGNzLXJkLW9mZi1ucyA9IDwxODA+OwotCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwxODA+OwotCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8MTg+OwotCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8NDg+OwotCQlncG1jLG9lLW9uLW5zID0gPDU0PjsKLQkJZ3BtYyxvZS1vZmYtbnMgPSA8MTY4PjsKLQkJZ3BtYyx3ZS1vbi1ucyA9IDw1ND47Ci0JCWdwbWMsd2Utb2ZmLW5zID0gPDE2OD47Ci0JCWdwbWMscmQtY3ljbGUtbnMgPSA8MTg2PjsKLQkJZ3BtYyx3ci1jeWNsZS1ucyA9IDwxODY+OwotCQlncG1jLGFjY2Vzcy1ucyA9IDwxNDQ+OwotCQlncG1jLHBhZ2UtYnVyc3QtYWNjZXNzLW5zID0gPDI0PjsKLQkJZ3BtYyxidXMtdHVybmFyb3VuZC1ucyA9IDw5MD47Ci0JCWdwbWMsY3ljbGUyY3ljbGUtZGVsYXktbnMgPSA8OTA+OwotCQlncG1jLGN5Y2xlMmN5Y2xlLXNhbWVjc2VuOwotCQlncG1jLGN5Y2xlMmN5Y2xlLWRpZmZjc2VuOworCQlncG1jLGRldmljZS13aWR0aCA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1zYW1lY3NlbiA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kaWZmY3NlbiA9IDwxPjsKKwkJZ3BtYyxjcy1vbi1ucyA9IDw1PjsKKwkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8MTUwPjsKKwkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8MTUwPjsKKwkJZ3BtYyxhZHYtb24tbnMgPSA8MD47CisJCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDwxNT47CisJCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsb2Utb24tbnMgPSA8NDU+OworCQlncG1jLG9lLW9mZi1ucyA9IDwxNDA+OworCQlncG1jLHdlLW9uLW5zID0gPDQ1PjsKKwkJZ3BtYyx3ZS1vZmYtbnMgPSA8MTQwPjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwxNTU+OworCQlncG1jLHdyLWN5Y2xlLW5zID0gPDE1NT47CisJCWdwbWMsYWNjZXNzLW5zID0gPDEyMD47CisJCWdwbWMscGFnZS1idXJzdC1hY2Nlc3MtbnMgPSA8MjA+OworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDc1PjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDw3NT47CisJCWdwbWMsd2FpdC1tb25pdG9yaW5nLW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1hY2Nlc3MtbnMgPSA8MD47CiAJCXZkZHZhcmlvLXN1cHBseSA9IDwmdmRkdmFyaW8+OwogCQl2ZGQzM2Etc3VwcGx5ID0gPCZ2ZGQzM2E+OwogCQlyZWctaW8td2lkdGggPSA8ND47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MTcuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNTE3LmR0cwppbmRleCA0MjE4OWI2Li4xNzk4NjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MTcuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzUxNy5kdHMKQEAgLTksNiArOSwxMSBAQAogCW1vZGVsID0gIkNvbXB1TGFiIFNCQy1UMzUxNyB3aXRoIENNLVQzNTE3IjsKIAljb21wYXRpYmxlID0gImNvbXB1bGFiLG9tYXAzLXNiYy10MzUxNyIsICJjb21wdWxhYixvbWFwMy1jbS10MzUxNyIsICJ0aSxhbTM1MTciLCAidGksb21hcDMiOwogCisJYWxpYXNlcyB7CisJCWRpc3BsYXkwID0gJmR2aTA7CisJCWRpc3BsYXkxID0gJnR2MDsKKwl9OworCiAJLyogT25seSBvbmUgR1BNQyBzbXNjOTIyMCBvbiBTQkMtVDM1MTcsIENNLVQzNTE3IHVzZXMgYW0zNXggRXRoZXJuZXQgKi8KIAl2ZGR2YXJpbzogcmVndWxhdG9yLXZkZHZhcmlvLXNiLXQzNSB7CiAJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKQEAgLTU0LDMgKzU5LDEzIEBACiAJd3AtZ3Bpb3MgPSAgPCZncGlvMiAyNyBHUElPX0FDVElWRV9ISUdIPjsgLyogZ3Bpb181OSAgKi8KIAljZC1ncGlvcyA9ICA8JmdwaW81IDE2IEdQSU9fQUNUSVZFX0hJR0g+OyAvKiBncGlvXzE0NCAqLwogfTsKKworJmRzcyB7CisJcG9ydCB7CisJCWRwaV9vdXQ6IGVuZHBvaW50IHsKKwkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdGZwNDEwX2luPjsKKwkJCWRhdGEtbGluZXMgPSA8MjQ+OworCQl9OworCX07Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MzAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNTMwLmR0cwppbmRleCBiYmJlZWE2Li5jOTk0ZjBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MzAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzUzMC5kdHMKQEAgLTgsNiArOCwxMSBAQAogLyB7CiAJbW9kZWwgPSAiQ29tcHVMYWIgU0JDLVQzNTMwIHdpdGggQ00tVDM1MzAiOwogCWNvbXBhdGlibGUgPSAiY29tcHVsYWIsb21hcDMtc2JjLXQzNTMwIiwgImNvbXB1bGFiLG9tYXAzLWNtLXQzNTMwIiwgInRpLG9tYXAzNHh4IiwgInRpLG9tYXAzIjsKKworCWFsaWFzZXMgeworCQlkaXNwbGF5MCA9ICZkdmkwOworCQlkaXNwbGF5MSA9ICZ0djA7CisJfTsKIH07CiAKICZvbWFwM19wbXhfY29yZSB7CkBAIC0zNCwzICszOSwxMyBAQAogJm1tYzEgewogCWNkLWdwaW9zID0gIDwmdHdsX2dwaW8gMCBHUElPX0FDVElWRV9ISUdIPjsKIH07CisKKyZkc3MgeworCXBvcnQgeworCQlkcGlfb3V0OiBlbmRwb2ludCB7CisJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnRmcDQxMF9pbj47CisJCQlkYXRhLWxpbmVzID0gPDI0PjsKKwkJfTsKKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNzMwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzczMC5kdHMKaW5kZXggMDhlNGE3MC4uNWJkZGRmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNzMwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM3MzAuZHRzCkBAIC04LDYgKzgsMTEgQEAKIC8gewogCW1vZGVsID0gIkNvbXB1TGFiIFNCQy1UMzczMCB3aXRoIENNLVQzNzMwIjsKIAljb21wYXRpYmxlID0gImNvbXB1bGFiLG9tYXAzLXNiYy10MzczMCIsICJjb21wdWxhYixvbWFwMy1jbS10MzczMCIsICJ0aSxvbWFwMzZ4eCIsICJ0aSxvbWFwMyI7CisKKwlhbGlhc2VzIHsKKwkJZGlzcGxheTAgPSAmZHZpMDsKKwkJZGlzcGxheTEgPSAmdHYwOworCX07CiB9OwogCiAmb21hcDNfcG14X2NvcmUgewpAQCAtMjUsMyArMzAsMTMgQEAKIAlyYW5nZXMgPSA8NSAwIDB4MmMwMDAwMDAgMHgwMTAwMDAwMD4sCiAJCSA8NCAwIDB4MmQwMDAwMDAgMHgwMTAwMDAwMD47CiB9OworCismZHNzIHsKKwlwb3J0IHsKKwkJZHBpX291dDogZW5kcG9pbnQgeworCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfaW4+OworCQkJZGF0YS1saW5lcyA9IDwyND47CisJCX07CisJfTsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXRhbzM1MzAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXRhbzM1MzAuZHRzaQppbmRleCBiMzBmMzg3Li5lODk4MjBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy10YW8zNTMwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtdGFvMzUzMC5kdHNpCkBAIC0yNzAsNyArMjcwLDcgQEAKIAlyYW5nZXMgPSA8MCAwIDB4MDAwMDAwMDAgMHgwMTAwMDAwMD47CiAKIAluYW5kQDAsMCB7Ci0JCXJlZyA9IDwwIDAgMD47IC8qIENTMCwgb2Zmc2V0IDAgKi8KKwkJcmVnID0gPDAgMCA0PjsgLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKIAkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8Mj47CS8qIEdQTUNfREVWV0lEVEhfMTZCSVQgKi8KIAkJdGksbmFuZC1lY2Mtb3B0ID0gInN3IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy5kdHNpCmluZGV4IGQwZTg4NGQuLjAxYjcxMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMuZHRzaQpAQCAtNzksNyArNzksNyBAQAogCSAqIGhpZXJhcmNoeS4KIAkgKi8KIAlvY3AgewotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWwzLXNteCIsICJzaW1wbGUtYnVzIjsKIAkJcmVnID0gPDB4NjgwMDAwMDAgMHgxMDAwMD47CiAJCWludGVycnVwdHMgPSA8OSAxMD47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMzMyLDYgKzMzMiw3IEBACiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODA5NDAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDI2PjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8Mj47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwyPjsKIAkJCW1ib3hfZHNwOiBkc3AgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDM0MzAtc2RwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzNDMwLXNkcC5kdHMKaW5kZXggOWJhZDk0ZS4uMTZiMGNkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDM0MzAtc2RwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMzQzMC1zZHAuZHRzCkBAIC01MSw4ICs1MSw4IEBACiAKICZncG1jIHsKIAlyYW5nZXMgPSA8MCAwIDB4MTAwMDAwMDAgMHgwODAwMDAwMD4sCi0JCSA8MSAwIDB4MjgwMDAwMDAgMHgwODAwMDAwMD4sCi0JCSA8MiAwIDB4MjAwMDAwMDAgMHgxMDAwMDAwMD47CisJCSA8MSAwIDB4MjgwMDAwMDAgMHgxMDAwMDAwPiwJLyogQ1MxOiAxNk1CIGZvciBOQU5EICovCisJCSA8MiAwIDB4MjAwMDAwMDAgMHgxMDAwMDAwPjsJLyogQ1MyOiAxNk1CIGZvciBPbmVOQU5EICovCiAKIAlub3JAMCwwIHsKIAkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJCWxpbnV4LG10ZC1uYW1lPSAibWljcm9uLG10MjlmMWcwOGFiYiI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPDEgMCAweDA4MDAwMDAwPjsKKwkJcmVnID0gPDEgMCA0PjsJLyogQ1MxLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJzdyI7CiAJCW5hbmQtYnVzLXdpZHRoID0gPDg+OwogCQlncG1jLGNzLW9uLW5zID0gPDA+OwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCWxpbnV4LG10ZC1uYW1lPSAic2Ftc3VuZyxrZm0yZzE2cTJtLWRlYjgiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJlZyA9IDwyIDAgMHgxMDAwMDAwMD47CisJCXJlZyA9IDwyIDAgMHgyMDAwMD47CS8qIENTMiwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCiAJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDI+OwogCQlncG1jLG11eC1hZGQtZGF0YSA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LWR1b3Zlcm8tcGFybG9yLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LWR1b3Zlcm8tcGFybG9yLmR0cwppbmRleCA2ZGM4NGQ5Li4xYTc4ZjAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLXBhcmxvci5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtZHVvdmVyby1wYXJsb3IuZHRzCkBAIC0xNzcsNiArMTc3LDcgQEAKIAogJmhkbWkgewogCXN0YXR1cyA9ICJvayI7CisJdmRkYS1zdXBwbHkgPSA8JnZkYWM+OwogCiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JmRzc19oZG1pX3BpbnM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LmR0c2kKaW5kZXggODc4Yzk3OS4uMDc0MTQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC5kdHNpCkBAIC02NjEsNiArNjYxLDcgQEAKIAkJCXJlZyA9IDwweDRhMGY0MDAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8Mz47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDw4PjsKIAkJCW1ib3hfaXB1OiBtYm94X2lwdSB7CkBAIC04OTUsNyArODk2LDcgQEAKIAkJCQlyZWcgPSA8MHg1ODAwMjAwMCAweDEwMDA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQkJdGksaHdtb2RzID0gImRzc19yZmJpIjsKLQkJCQljbG9ja3MgPSA8JmRzc19kc3NfY2xrPiwgPCZkc3NfZmNrPjsKKwkJCQljbG9ja3MgPSA8JmRzc19kc3NfY2xrPiwgPCZsM19kaXZfY2s+OwogCQkJCWNsb2NrLW5hbWVzID0gImZjayIsICJpY2siOwogCQkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQ0eHgtY2xvY2tzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNDR4eC1jbG9ja3MuZHRzaQppbmRleCBjODIxZmY1Li5mMmM0OGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNDR4eC1jbG9ja3MuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNDR4eC1jbG9ja3MuZHRzaQpAQCAtMTAxOCwxNCArMTAxOCw2IEBACiAJCXJlZyA9IDwweDExMjA+OwogCX07CiAKLQlkc3NfZmNrOiBkc3NfZmNrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmwzX2Rpdl9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxPjsKLQkJcmVnID0gPDB4MTEyMD47Ci0JfTsKLQogCWZkaWZfZmNrOiBmZGlmX2ZjayB7CiAJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNS5kdHNpCmluZGV4IDI1NmI3ZjYuLmIzMjFmZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDUuZHRzaQpAQCAtNjUxLDYgKzY1MSw3IEBACiAJCQlyZWcgPSA8MHg0YTBmNDAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDM+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8OD47CiAJCQltYm94X2lwdTogbWJveF9pcHUgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcHJpbWEyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9wcmltYTIuZHRzaQppbmRleCA5NjNiN2U1Li4xY2ExYTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9wcmltYTIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9wcmltYTIuZHRzaQpAQCAtNDEsNiArNDEsMTEgQEAKIAkJfTsKIAl9OwogCisJYXJtLXBtdSB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1wbXUiOworCQlpbnRlcnJ1cHRzID0gPDI5PjsKKwl9OworCiAJYXhpIHsKIAkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0xMzIsNiArMTM3LDcgQEAKIAkJCQlyZWcgPSA8MHg5MDAyMDAwMCAweDEwMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDMxPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMzU+OworCQkJCXJlc2V0cyA9IDwmcnN0YyA2PjsKIAkJCX07CiAJCX07CiAKQEAgLTE3Myw2ICsxNzksNyBAQAogCQkJCWNvbXBhdGlibGUgPSAic2lyZixwcmltYTItZHNwaWYiOwogCQkJCXJlZyA9IDwweGE4MDAwMDAwIDB4MTAwMDA+OwogCQkJCWludGVycnVwdHMgPSA8OT47CisJCQkJcmVzZXRzID0gPCZyc3RjIDE+OwogCQkJfTsKIAogCQkJZ3BzQGE4MDEwMDAwIHsKQEAgLTE4MCw2ICsxODcsNyBAQAogCQkJCXJlZyA9IDwweGE4MDEwMDAwIDB4MTAwMDA+OwogCQkJCWludGVycnVwdHMgPSA8Nz47CiAJCQkJY2xvY2tzID0gPCZjbGtzIDk+OworCQkJCXJlc2V0cyA9IDwmcnN0YyAyPjsKIAkJCX07CiAKIAkJCWRzcEBhOTAwMDAwMCB7CkBAIC0xODcsNiArMTk1LDcgQEAKIAkJCQlyZWcgPSA8MHhhOTAwMDAwMCAweDEwMDAwMDA+OwogCQkJCWludGVycnVwdHMgPSA8OD47CiAJCQkJY2xvY2tzID0gPCZjbGtzIDg+OworCQkJCXJlc2V0cyA9IDwmcnN0YyAwPjsKIAkJCX07CiAJCX07CiAKQEAgLTUyNCwxMiArNTMzLDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLGZ1bmN0aW9uID0gInNkbW1jNSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQlpMnNfbWNsa19waW5zX2E6IGkyc19tY2xrQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyc19tY2xrIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJpMnNtY2xrZ3JwIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAiaTJzX21jbGsiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisJCQkJaTJzX2V4dF9jbGtfaW5wdXRfcGluc19hOiBpMnNfZXh0X2Nsa19pbnB1dEAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMnNfZXh0X2Nsa19pbnB1dCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLHBpbnMgPSAiaTJzX2V4dF9jbGtfaW5wdXRncnAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixmdW5jdGlvbiA9ICJpMnNfZXh0X2Nsa19pbnB1dCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzX3BpbnNfYTogaTJzQDAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkycyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLHBpbnMgPSAiaTJzZ3JwIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAiaTJzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQkJCWkyc19ub19kaW5fcGluc19hOiBpMnNfbm9fZGluQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyc19ub19kaW4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImkyc19ub19kaW5ncnAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixmdW5jdGlvbiA9ICJpMnNfbm9fZGluIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQkJCWkyc182Y2huX3BpbnNfYTogaTJzXzZjaG5AMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzXzZjaG4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImkyc182Y2huZ3JwIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAiaTJzXzZjaG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjOTdfcGluc19hOiBhYzk3QDAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjOTcgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImFjOTdncnAiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAtZ2VubWFpLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLWdlbm1haS5kdHMKaW5kZXggYTNlZDIzYy4uMTUxOGM1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAtZ2VubWFpLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC1nZW5tYWkuZHRzCkBAIC0yMSw3ICsyMSw4IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0MyLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKKwkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWYyOwogCX07CiAKIAltZW1vcnkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLmR0c2kKaW5kZXggODAxYTU1Ni4uMjc3ZTczYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC5kdHNpCkBAIC01MiwxNiArNTIsNiBAQAogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInVzYl94MSI7CiAJCX07CiAKLQkJLyogU3BlY2lhbCBDUEcgY2xvY2tzICovCi0JCWNwZ19jbG9ja3M6IGNwZ19jbG9ja3NAZmNmZTAwMDAgewotCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI3czcyMTAwLWNwZy1jbG9ja3MiLAotCQkJCSAgICAgInJlbmVzYXMscnotY3BnLWNsb2NrcyI7Ci0JCQlyZWcgPSA8MHhmY2ZlMDAwMCAweDE4PjsKLQkJCWNsb2NrcyA9IDwmZXh0YWxfY2xrPiwgPCZ1c2JfeDFfY2xrPjsKLQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwbGwiLCAiaSIsICJnIjsKLQkJfTsKLQogCQkvKiBGaXhlZCBmYWN0b3IgY2xvY2tzICovCiAJCWJfY2xrOiBiX2NsayB7CiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CkBAIC04OCw2ICs3OCwxNiBAQAogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInAwIjsKIAkJfTsKIAorCQkvKiBTcGVjaWFsIENQRyBjbG9ja3MgKi8KKwkJY3BnX2Nsb2NrczogY3BnX2Nsb2Nrc0BmY2ZlMDAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjdzNzIxMDAtY3BnLWNsb2NrcyIsCisJCQkJICAgICAicmVuZXNhcyxyei1jcGctY2xvY2tzIjsKKwkJCXJlZyA9IDwweGZjZmUwMDAwIDB4MTg+OworCQkJY2xvY2tzID0gPCZleHRhbF9jbGs+LCA8JnVzYl94MV9jbGs+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInBsbCIsICJpIiwgImciOworCQl9OworCiAJCS8qIE1TVFAgY2xvY2tzICovCiAJCW1zdHAzX2Nsa3M6IG1zdHAzX2Nsa3NAZmNmZTA0MjAgewogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwpAQCAtMTQ4LDk3ICsxNDgsNiBAQAogCQl9OwogCX07CiAKLQlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQGU4MjAxMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDA+OwotCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJcmVnID0gPDB4ZTgyMDEwMDAgMHgxMDAwPiwKLQkJCTwweGU4MjAyMDAwIDB4MTAwMD47Ci0JfTsKLQotCWkyYzA6IGkyY0BmY2ZlZTAwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKLQkJcmVnID0gPDB4ZmNmZWUwMDAgMHg0ND47Ci0JCWludGVycnVwdHMgPSA8MCAxNTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE1OCBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE1OSBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE2MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTYxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNjIgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE2MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTY0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQl9OwotCi0JaTJjMTogaTJjQGZjZmVlNDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscmlpYy1yN3M3MjEwMCIsICJyZW5lc2FzLHJpaWMtcnoiOwotCQlyZWcgPSA8MHhmY2ZlZTQwMCAweDQ0PjsKLQkJaW50ZXJydXB0cyA9IDwwIDE2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTY2IElSUV9UWVBFX0VER0VfUklTSU5HPiwKLQkJCSAgICAgPDAgMTY3IElSUV9UWVBFX0VER0VfUklTSU5HPiwKLQkJCSAgICAgPDAgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTcxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNzIgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSN1M3MjEwMF9DTEtfSTJDMT47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KLQlpMmMyOiBpMmNAZmNmZWU4MDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyaWljLXI3czcyMTAwIiwgInJlbmVzYXMscmlpYy1yeiI7Ci0JCXJlZyA9IDwweGZjZmVlODAwIDB4NDQ+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTczIElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNzQgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAotCQkJICAgICA8MCAxNzUgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAotCQkJICAgICA8MCAxNzYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE3NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTc4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNzkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE4MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI3UzcyMTAwX0NMS19JMkMyPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQotCWkyYzM6IGkyY0BmY2ZlZWMwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKLQkJcmVnID0gPDB4ZmNmZWVjMDAgMHg0ND47Ci0JCWludGVycnVwdHMgPSA8MCAxODEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE4MiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE4MyBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE4NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTg1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxODYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTg4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzM+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQl9OwotCi0JbXR1MjogdGltZXJAZmNmZjAwMDAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMsbXR1Mi1yN3M3MjEwMCIsICJyZW5lc2FzLG10dTIiOwotCQlyZWcgPSA8MHhmY2ZmMDAwMCAweDQwMD47Ci0JCWludGVycnVwdHMgPSA8MCAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCWludGVycnVwdC1uYW1lcyA9ICJ0Z2kwYSI7Ci0JCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSN1M3MjEwMF9DTEtfTVRVMj47Ci0JCWNsb2NrLW5hbWVzID0gImZjayI7Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQogCXNjaWYwOiBzZXJpYWxAZTgwMDcwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZi1yN3M3MjEwMCIsICJyZW5lc2FzLHNjaWYiOwogCQlyZWcgPSA8MHhlODAwNzAwMCA2ND47CkBAIC00MDQsNCArMzEzLDk1IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CisKKwlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQGU4MjAxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJcmVnID0gPDB4ZTgyMDEwMDAgMHgxMDAwPiwKKwkJCTwweGU4MjAyMDAwIDB4MTAwMD47CisJfTsKKworCWkyYzA6IGkyY0BmY2ZlZTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKKwkJcmVnID0gPDB4ZmNmZWUwMDAgMHg0ND47CisJCWludGVycnVwdHMgPSA8MCAxNTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE1OCBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE1OSBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE2MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTYxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNjIgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE2MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTY0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJaTJjMTogaTJjQGZjZmVlNDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInJlbmVzYXMscmlpYy1yN3M3MjEwMCIsICJyZW5lc2FzLHJpaWMtcnoiOworCQlyZWcgPSA8MHhmY2ZlZTQwMCAweDQ0PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTY2IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCSAgICAgPDAgMTY3IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCSAgICAgPDAgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTcxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNzIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSN1M3MjEwMF9DTEtfSTJDMT47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpMmMyOiBpMmNAZmNmZWU4MDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyaWljLXI3czcyMTAwIiwgInJlbmVzYXMscmlpYy1yeiI7CisJCXJlZyA9IDwweGZjZmVlODAwIDB4NDQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMTczIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNzQgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJICAgICA8MCAxNzUgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJICAgICA8MCAxNzYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE3NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTc4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNzkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE4MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI3UzcyMTAwX0NMS19JMkMyPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWkyYzM6IGkyY0BmY2ZlZWMwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKKwkJcmVnID0gPDB4ZmNmZWVjMDAgMHg0ND47CisJCWludGVycnVwdHMgPSA8MCAxODEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE4MiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE4MyBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE4NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTg1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxODYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTg4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzM+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbXR1MjogdGltZXJAZmNmZjAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsbXR1Mi1yN3M3MjEwMCIsICJyZW5lc2FzLG10dTIiOworCQlyZWcgPSA8MHhmY2ZmMDAwMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8MCAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWludGVycnVwdC1uYW1lcyA9ICJ0Z2kwYSI7CisJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSN1M3MjEwMF9DTEtfTVRVMj47CisJCWNsb2NrLW5hbWVzID0gImZjayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3M2E0LWFwZTZldm0tcmVmZXJlbmNlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQtYXBlNmV2bS1yZWZlcmVuY2UuZHRzCmluZGV4IGE4NjBmMzIuLjg0ZTA1ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQtYXBlNmV2bS1yZWZlcmVuY2UuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQtYXBlNmV2bS1yZWZlcmVuY2UuZHRzCkBAIC0yMSw3ICsyMSw4IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0MwLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcnciOworCQlib290YXJncyA9ICJpZ25vcmVfbG9nbGV2ZWwgcnciOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmYTA7CiAJfTsKIAogCW1lbW9yeUA0MDAwMDAwMCB7CkBAIC05Myw2ICs5NCwxMCBAQAogCXZvbHRhZ2UtdG9sZXJhbmNlID0gPDE+OyAvKiAxJSAqLwogfTsKIAorJmNtdDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZwZmMgewogCXNjaWZhMF9waW5zOiBzZXJpYWwwIHsKIAkJcmVuZXNhcyxncm91cHMgPSAic2NpZmEwX2RhdGEiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzNhNC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzNhNC5kdHNpCmluZGV4IGVmMTUyZTMuLjVhYzU3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3M2E0LmR0c2kKQEAgLTMwLDE4ICszMCw2IEBACiAJCX07CiAJfTsKIAotCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAZjEwMDEwMDAgewotCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1LWdpYyI7Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDA+OwotCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJcmVnID0gPDAgMHhmMTAwMTAwMCAwIDB4MTAwMD4sCi0JCQk8MCAweGYxMDAyMDAwIDAgMHgxMDAwPiwKLQkJCTwwIDB4ZjEwMDQwMDAgMCAweDIwMDA+LAotCQkJPDAgMHhmMTAwNjAwMCAwIDB4MjAwMD47Ci0JCWludGVycnVwdHMgPSA8MSA5IChHSUNfQ1BVX01BU0tfU0lNUExFKDQpIHwgSVJRX1RZUEVfTEVWRUxfSElHSCk+OwotCX07Ci0KIAl0aW1lciB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY3LXRpbWVyIjsKIAkJaW50ZXJydXB0cyA9IDwxIDEzIChHSUNfQ1BVX01BU0tfU0lNUExFKDQpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCkBAIC01MCw2ICszOCw5MSBAQAogCQkJICAgICA8MSAxMCAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0xPVyk+OwogCX07CiAKKwlkbWFjOiBkbWEtbXVsdGlwbGV4ZXIgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2hkbWEtbXV4IjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDIwPjsKKwkJZG1hLXJlcXVlc3RzID0gPDI1Nj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCisJCWRtYTA6IGRtYS1jb250cm9sbGVyQGU2NzAwMDIwIHsKKwkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaGRtYS1yOGE3M2E0IjsKKwkJCXJlZyA9IDwwIDB4ZTY3MDAwMjAgMCAweDg5ZTA+OworCQkJaW50ZXJydXB0cyA9IDwwIDIyMCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjAwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMDEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwMiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjAzIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMDQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwNSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjA2IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMDcgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwOCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjA5IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTAgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIxMSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjEyIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTMgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIxNCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjE1IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIxNyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjE4IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlpbnRlcnJ1cHQtbmFtZXMgPSAiZXJyb3IiLAorCQkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkJImNoNCIsICJjaDUiLCAiY2g2IiwgImNoNyIsCisJCQkJCSJjaDgiLCAiY2g5IiwgImNoMTAiLCAiY2gxMSIsCisJCQkJCSJjaDEyIiwgImNoMTMiLCAiY2gxNCIsICJjaDE1IiwKKwkJCQkJImNoMTYiLCAiY2gxNyIsICJjaDE4IiwgImNoMTkiOworCQl9OworCX07CisKKwlwZmM6IHBmY0BlNjA1MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxwZmMtcjhhNzNhNCI7CisJCXJlZyA9IDwwIDB4ZTYwNTAwMDAgMCAweDkwMDA+OworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0KKwkJCTwmaXJxYzAgIDAgMD4sIDwmaXJxYzAgIDEgMD4sIDwmaXJxYzAgIDIgMD4sIDwmaXJxYzAgIDMgMD4sCisJCQk8JmlycWMwICA0IDA+LCA8JmlycWMwICA1IDA+LCA8JmlycWMwICA2IDA+LCA8JmlycWMwICA3IDA+LAorCQkJPCZpcnFjMCAgOCAwPiwgPCZpcnFjMCAgOSAwPiwgPCZpcnFjMCAxMCAwPiwgPCZpcnFjMCAxMSAwPiwKKwkJCTwmaXJxYzAgMTIgMD4sIDwmaXJxYzAgMTMgMD4sIDwmaXJxYzAgMTQgMD4sIDwmaXJxYzAgMTUgMD4sCisJCQk8JmlycWMwIDE2IDA+LCA8JmlycWMwIDE3IDA+LCA8JmlycWMwIDE4IDA+LCA8JmlycWMwIDE5IDA+LAorCQkJPCZpcnFjMCAyMCAwPiwgPCZpcnFjMCAyMSAwPiwgPCZpcnFjMCAyMiAwPiwgPCZpcnFjMCAyMyAwPiwKKwkJCTwmaXJxYzAgMjQgMD4sIDwmaXJxYzAgMjUgMD4sIDwmaXJxYzAgMjYgMD4sIDwmaXJxYzAgMjcgMD4sCisJCQk8JmlycWMwIDI4IDA+LCA8JmlycWMwIDI5IDA+LCA8JmlycWMwIDMwIDA+LCA8JmlycWMwIDMxIDA+LAorCQkJPCZpcnFjMSAgMCAwPiwgPCZpcnFjMSAgMSAwPiwgPCZpcnFjMSAgMiAwPiwgPCZpcnFjMSAgMyAwPiwKKwkJCTwmaXJxYzEgIDQgMD4sIDwmaXJxYzEgIDUgMD4sIDwmaXJxYzEgIDYgMD4sIDwmaXJxYzEgIDcgMD4sCisJCQk8JmlycWMxICA4IDA+LCA8JmlycWMxICA5IDA+LCA8JmlycWMxIDEwIDA+LCA8JmlycWMxIDExIDA+LAorCQkJPCZpcnFjMSAxMiAwPiwgPCZpcnFjMSAxMyAwPiwgPCZpcnFjMSAxNCAwPiwgPCZpcnFjMSAxNSAwPiwKKwkJCTwmaXJxYzEgMTYgMD4sIDwmaXJxYzEgMTcgMD4sIDwmaXJxYzEgMTggMD4sIDwmaXJxYzEgMTkgMD4sCisJCQk8JmlycWMxIDIwIDA+LCA8JmlycWMxIDIxIDA+LCA8JmlycWMxIDIyIDA+LCA8JmlycWMxIDIzIDA+LAorCQkJPCZpcnFjMSAyNCAwPiwgPCZpcnFjMSAyNSAwPjsKKwl9OworCisJaTJjNTogaTJjQGU2MGIwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCXJlZyA9IDwwIDB4ZTYwYjAwMDAgMCAweDQyOD47CisJCWludGVycnVwdHMgPSA8MCAxNzkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJY210MTogdGltZXJAZTYxMzAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsY210LTQ4LXI4YTczYTQiLCAicmVuZXNhcyxjbXQtNDgtZ2VuMiI7CisJCXJlZyA9IDwwIDB4ZTYxMzAwMDAgMCAweDEwMDQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMTIwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCXJlbmVzYXMsY2hhbm5lbHMtbWFzayA9IDwweGZmPjsKKworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAlpcnFjMDogaW50ZXJydXB0LWNvbnRyb2xsZXJAZTYxYzAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsaXJxYy1yOGE3M2E0IiwgInJlbmVzYXMsaXJxYyI7CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CkBAIC0xMjIsNDggKzE5NSw2IEBACiAJCQkgICAgIDwwIDU3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCX07CiAKLQlkbWFjOiBkbWEtbXVsdGlwbGV4ZXJAMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaGRtYS1tdXgiOwotCQkjZG1hLWNlbGxzID0gPDE+OwotCQlkbWEtY2hhbm5lbHMgPSA8MjA+OwotCQlkbWEtcmVxdWVzdHMgPSA8MjU2PjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCSNzaXplLWNlbGxzID0gPDI+OwotCQlyYW5nZXM7Ci0KLQkJZG1hMDogZG1hLWNvbnRyb2xsZXJAZTY3MDAwMjAgewotCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNoZG1hLXI4YTczYTQiOwotCQkJcmVnID0gPDAgMHhlNjcwMDAyMCAwIDB4ODllMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDAgMjIwIElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDAgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIwMSBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjAyIElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDMgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIwNCBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjA1IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDYgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIwNyBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjA4IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDkgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxMCBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjExIElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTIgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxMyBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjE0IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTUgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxNiBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjE3IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTggSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWludGVycnVwdC1uYW1lcyA9ICJlcnJvciIsCi0JCQkJCSJjaDAiLCAiY2gxIiwgImNoMiIsICJjaDMiLAotCQkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKLQkJCQkJImNoOCIsICJjaDkiLCAiY2gxMCIsICJjaDExIiwKLQkJCQkJImNoMTIiLCAiY2gxMyIsICJjaDE0IiwgImNoMTUiLAotCQkJCQkiY2gxNiIsICJjaDE3IiwgImNoMTgiLCAiY2gxOSI7Ci0JCX07Ci0JfTsKLQogCXRoZXJtYWxAZTYxZjAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsdGhlcm1hbC1yOGE3M2E0IiwgInJlbmVzYXMscmNhci10aGVybWFsIjsKIAkJcmVnID0gPDAgMHhlNjFmMDAwMCAwIDB4MTQ+LCA8MCAweGU2MWYwMTAwIDAgMHgzOD4sCkBAIC0xNzQsNyArMjA1LDcgQEAKIAlpMmMwOiBpMmNAZTY1MDAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzNhNCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjUwMDAwMCAwIDB4NDI4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTE4Myw3ICsyMTQsNyBAQAogCWkyYzE6IGkyY0BlNjUxMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1yOGE3M2E0IiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MCAweGU2NTEwMDAwIDAgMHg0Mjg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTc1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtMTkyLDcgKzIyMyw3IEBACiAJaTJjMjogaTJjQGU2NTIwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1MjAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxNzYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0yMDEsNyArMjMyLDcgQEAKIAlpMmMzOiBpMmNAZTY1MzAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzNhNCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjUzMDAwMCAwIDB4NDI4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTIxMCwyNSArMjQxLDE2IEBACiAJaTJjNDogaTJjQGU2NTQwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1NDAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxNzggSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCWkyYzU6IGkyY0BlNjBiMDAwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKLQkJcmVnID0gPDAgMHhlNjBiMDAwMCAwIDB4NDI4PjsKLQkJaW50ZXJydXB0cyA9IDwwIDE3OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQl9OwotCiAJaTJjNjogaTJjQGU2NTUwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1NTAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxODQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0yMzcsNyArMjU5LDcgQEAKIAlpMmM3OiBpMmNAZTY1NjAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzNhNCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjU2MDAwMCAwIDB4NDI4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTI0NiwxMiArMjY4LDI2IEBACiAJaTJjODogaTJjQGU2NTcwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1NzAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXNjaWZiMDogc2VyaWFsQGU2YzIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZiLXI4YTczYTQiLCAicmVuZXNhcyxzY2lmYiI7CisJCXJlZyA9IDwwIDB4ZTZjMjAwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8MCAxNDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNjaWZiMTogc2VyaWFsQGU2YzMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZiLXI4YTczYTQiLCAicmVuZXNhcyxzY2lmYiI7CisJCXJlZyA9IDwwIDB4ZTZjMzAwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8MCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXNjaWZhMDogc2VyaWFsQGU2YzQwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZhLXI4YTczYTQiLCAicmVuZXNhcyxzY2lmYSI7CiAJCXJlZyA9IDwwIDB4ZTZjNDAwMDAgMCAweDEwMD47CkBAIC0yNjYsNzMgKzMwMiwyMCBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKLQlzY2lmYjI6IHNlcmlhbEBlNmMyMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmYi1yOGE3M2E0IiwgInJlbmVzYXMsc2NpZmIiOwotCQlyZWcgPSA8MCAweGU2YzIwMDAwIDAgMHgxMDA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTQ4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KLQlzY2lmYjM6IHNlcmlhbEBlNmMzMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmYi1yOGE3M2E0IiwgInJlbmVzYXMsc2NpZmIiOwotCQlyZWcgPSA8MCAweGU2YzMwMDAwIDAgMHgxMDA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KLQlzY2lmYjQ6IHNlcmlhbEBlNmNlMDAwMCB7CisJc2NpZmIyOiBzZXJpYWxAZTZjZTAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZmItcjhhNzNhNCIsICJyZW5lc2FzLHNjaWZiIjsKIAkJcmVnID0gPDAgMHhlNmNlMDAwMCAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE1MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCi0Jc2NpZmI1OiBzZXJpYWxAZTZjZjAwMDAgeworCXNjaWZiMzogc2VyaWFsQGU2Y2YwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZiLXI4YTczYTQiLCAicmVuZXNhcyxzY2lmYiI7CiAJCXJlZyA9IDwwIDB4ZTZjZjAwMDAgMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCW1tY2lmMDogbW1jQGVlMjAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNoLW1tY2lmIjsKLQkJcmVnID0gPDAgMHhlZTIwMDAwMCAwIDB4ODA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQlyZWctaW8td2lkdGggPSA8ND47Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQotCW1tY2lmMTogbW1jQGVlMjIwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNoLW1tY2lmIjsKLQkJcmVnID0gPDAgMHhlZTIyMDAwMCAwIDB4ODA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTcwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQlyZWctaW8td2lkdGggPSA8ND47Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQotCXBmYzogcGZjQGU2MDUwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHBmYy1yOGE3M2E0IjsKLQkJcmVnID0gPDAgMHhlNjA1MDAwMCAwIDB4OTAwMD47Ci0JCWdwaW8tY29udHJvbGxlcjsKLQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCWludGVycnVwdHMtZXh0ZW5kZWQgPQotCQkJPCZpcnFjMCAgMCAwPiwgPCZpcnFjMCAgMSAwPiwgPCZpcnFjMCAgMiAwPiwgPCZpcnFjMCAgMyAwPiwKLQkJCTwmaXJxYzAgIDQgMD4sIDwmaXJxYzAgIDUgMD4sIDwmaXJxYzAgIDYgMD4sIDwmaXJxYzAgIDcgMD4sCi0JCQk8JmlycWMwICA4IDA+LCA8JmlycWMwICA5IDA+LCA8JmlycWMwIDEwIDA+LCA8JmlycWMwIDExIDA+LAotCQkJPCZpcnFjMCAxMiAwPiwgPCZpcnFjMCAxMyAwPiwgPCZpcnFjMCAxNCAwPiwgPCZpcnFjMCAxNSAwPiwKLQkJCTwmaXJxYzAgMTYgMD4sIDwmaXJxYzAgMTcgMD4sIDwmaXJxYzAgMTggMD4sIDwmaXJxYzAgMTkgMD4sCi0JCQk8JmlycWMwIDIwIDA+LCA8JmlycWMwIDIxIDA+LCA8JmlycWMwIDIyIDA+LCA8JmlycWMwIDIzIDA+LAotCQkJPCZpcnFjMCAyNCAwPiwgPCZpcnFjMCAyNSAwPiwgPCZpcnFjMCAyNiAwPiwgPCZpcnFjMCAyNyAwPiwKLQkJCTwmaXJxYzAgMjggMD4sIDwmaXJxYzAgMjkgMD4sIDwmaXJxYzAgMzAgMD4sIDwmaXJxYzAgMzEgMD4sCi0JCQk8JmlycWMxICAwIDA+LCA8JmlycWMxICAxIDA+LCA8JmlycWMxICAyIDA+LCA8JmlycWMxICAzIDA+LAotCQkJPCZpcnFjMSAgNCAwPiwgPCZpcnFjMSAgNSAwPiwgPCZpcnFjMSAgNiAwPiwgPCZpcnFjMSAgNyAwPiwKLQkJCTwmaXJxYzEgIDggMD4sIDwmaXJxYzEgIDkgMD4sIDwmaXJxYzEgMTAgMD4sIDwmaXJxYzEgMTEgMD4sCi0JCQk8JmlycWMxIDEyIDA+LCA8JmlycWMxIDEzIDA+LCA8JmlycWMxIDE0IDA+LCA8JmlycWMxIDE1IDA+LAotCQkJPCZpcnFjMSAxNiAwPiwgPCZpcnFjMSAxNyAwPiwgPCZpcnFjMSAxOCAwPiwgPCZpcnFjMSAxOSAwPiwKLQkJCTwmaXJxYzEgMjAgMD4sIDwmaXJxYzEgMjEgMD4sIDwmaXJxYzEgMjIgMD4sIDwmaXJxYzEgMjMgMD4sCi0JCQk8JmlycWMxIDI0IDA+LCA8JmlycWMxIDI1IDA+OwotCX07Ci0KIAlzZGhpMDogc2RAZWUxMDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3M2E0IjsKIAkJcmVnID0gPDAgMHhlZTEwMDAwMCAwIDB4MTAwPjsKQEAgLTM1Niw0ICszMzksMzIgQEAKIAkJY2FwLXNkLWhpZ2hzcGVlZDsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OworCisJbW1jaWYwOiBtbWNAZWUyMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2gtbW1jaWYiOworCQlyZWcgPSA8MCAweGVlMjAwMDAwIDAgMHg4MD47CisJCWludGVycnVwdHMgPSA8MCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbW1jaWYxOiBtbWNAZWUyMjAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2gtbW1jaWYiOworCQlyZWcgPSA8MCAweGVlMjIwMDAwIDAgMHg4MD47CisJCWludGVycnVwdHMgPSA8MCAxNzAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBmMTAwMTAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUtZ2ljIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlyZWcgPSA8MCAweGYxMDAxMDAwIDAgMHgxMDAwPiwKKwkJCTwwIDB4ZjEwMDIwMDAgMCAweDEwMDA+LAorCQkJPDAgMHhmMTAwNDAwMCAwIDB4MjAwMD4sCisJCQk8MCAweGYxMDA2MDAwIDAgMHgyMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxIDkgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKT47CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLWFybWFkaWxsbzgwMGV2YS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLWFybWFkaWxsbzgwMGV2YS5kdHMKaW5kZXggZWZmYjdiNC4uZDRhZjRkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC1hcm1hZGlsbG84MDBldmEuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAtYXJtYWRpbGxvODAwZXZhLmR0cwpAQCAtMjUsNiArMjUsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MxLDExNTIwMCBlYXJseXByaW50az1zaC1zY2kuMSwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBydyI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWZhMTsKIAl9OwogCiAJbWVtb3J5IHsKQEAgLTc3LDcgKzc4LDcgQEAKIAkJcmVndWxhdG9yLWJvb3Qtb247CiAJfTsKIAotCWdwaW8ta2V5cyB7CisJa2V5Ym9hcmQgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CiAKIAkJcG93ZXIta2V5IHsKQEAgLTI5OCwzICsyOTksNyBAQAogCiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJnRtdTAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLmR0c2kKaW5kZXggZDQ2YzIxMy4uYThhNjc0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAuZHRzaQpAQCAtNzEsNiArNzEsNyBAQAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19JTlRDQT47CiAJfTsKIAogCS8qIGlycXBpbjE6IElSUTggLSBJUlExNSAqLwpAQCAtOTEsNiArOTIsNyBAQAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19JTlRDQT47CiAJfTsKIAogCS8qIGlycXBpbjI6IElSUTE2IC0gSVJRMjMgKi8KQEAgLTExMSw2ICsxMTMsNyBAQAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19JTlRDQT47CiAJfTsKIAogCS8qIGlycXBpbjM6IElSUTI0IC0gSVJRMzEgKi8KQEAgLTEzMSw2ICsxMzQsNyBAQAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19JTlRDQT47CiAJfTsKIAogCWV0aGVyOiBldGhlcm5ldEBlOWEwMDAwMCB7CkBAIC0xOTMsNyArMTk3LDcgQEAKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZhLXI4YTc3NDAiLCAicmVuZXNhcyxzY2lmYSI7CiAJCXJlZyA9IDwweGU2YzYwMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJY2xvY2tzID0gPCZtc3RwMl9jbGtzIFI4QTc3NDBfQ0xLX1NDSUZBMD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19TQ0lGQTI+OwogCQljbG9jay1uYW1lcyA9ICJzY2lfaWNrIjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtMzMxLDYgKzMzNSwzNCBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwl0bXUwOiB0aW1lckBmZmY4MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx0bXUtcjhhNzc0MCIsICJyZW5lc2FzLHRtdSI7CisJCXJlZyA9IDwweGZmZjgwMDAwIDB4MmM+OworCQlpbnRlcnJ1cHRzID0gPDAgMTk4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxOTkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDIwMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3NDBfQ0xLX1RNVTA+OworCQljbG9jay1uYW1lcyA9ICJmY2siOworCisJCSNyZW5lc2FzLGNoYW5uZWxzID0gPDM+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXRtdTE6IHRpbWVyQGZmZjkwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHRtdS1yOGE3NzQwIiwgInJlbmVzYXMsdG11IjsKKwkJcmVnID0gPDB4ZmZmOTAwMDAgMHgyYz47CisJCWludGVycnVwdHMgPSA8MCAxNzAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE3MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTcyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc0MF9DTEtfVE1VMT47CisJCWNsb2NrLW5hbWVzID0gImZjayI7CisKKwkJI3JlbmVzYXMsY2hhbm5lbHMgPSA8Mz47CisKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJY2xvY2tzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtNDMzLDcgKzQ2NSw3IEBACiAJCQljbG9ja3MgPSA8JmNwZ19jbG9ja3MgUjhBNzc0MF9DTEtfUz4sCiAJCQkJIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19TPiwgPCZzdWJfY2xrPiwKIAkJCQkgPCZjcGdfY2xvY2tzIFI4QTc3NDBfQ0xLX0I+LAotCQkJCSA8JnN1Yl9jbGs+LCA8JnN1Yl9jbGs+LAorCQkJCSA8JmNwZ19jbG9ja3MgUjhBNzc0MF9DTEtfSFBQPiwgPCZzdWJfY2xrPiwKIAkJCQkgPCZjcGdfY2xvY2tzIFI4QTc3NDBfQ0xLX0I+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPApAQCAtNDQ4LDggKzQ4MCw4IEBACiAJCW1zdHAyX2Nsa3M6IG1zdHAyX2Nsa3NAZTYxNTAxMzggewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3NDAtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDB4ZTYxNTAxMzggND4sIDwweGU2MTUwMDQwIDQ+OwotCQkJY2xvY2tzID0gPCZzdWJfY2xrPiwgPCZzdWJfY2xrPiwKLQkJCQkgPCZjcGdfY2xvY2tzIFI4QTc3NDBfQ0xLX0hQPiwKKwkJCWNsb2NrcyA9IDwmc3ViX2Nsaz4sIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCisJCQkJIDwmc3ViX2Nsaz4sIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCiAJCQkJIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCiAJCQkJIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCiAJCQkJIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCkBAIC00NTgsNyArNDkwLDggQEAKIAkJCQkgPCZzdWJfY2xrPjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDwKLQkJCQlSOEE3NzQwX0NMS19TQ0lGQTYgUjhBNzc0MF9DTEtfU0NJRkE3CisJCQkJUjhBNzc0MF9DTEtfU0NJRkE2IFI4QTc3NDBfQ0xLX0lOVENBCisJCQkJUjhBNzc0MF9DTEtfU0NJRkE3CiAJCQkJUjhBNzc0MF9DTEtfRE1BQzEgUjhBNzc0MF9DTEtfRE1BQzIKIAkJCQlSOEE3NzQwX0NMS19ETUFDMyBSOEE3NzQwX0NMS19VU0JETUFDCiAJCQkJUjhBNzc0MF9DTEtfU0NJRkE1IFI4QTc3NDBfQ0xLX1NDSUZCCkBAIC00NjcsNyArNTAwLDggQEAKIAkJCQlSOEE3NzQwX0NMS19TQ0lGQTQKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQotCQkJCSJzY2lmYTYiLCAic2NpZmE3IiwgImRtYWMxIiwgImRtYWMyIiwgImRtYWMzIiwKKwkJCQkic2NpZmE2IiwgImludGNhIiwKKwkJCQkic2NpZmE3IiwgImRtYWMxIiwgImRtYWMyIiwgImRtYWMzIiwKIAkJCQkidXNiZG1hYyIsICJzY2lmYTUiLCAic2NpZmIiLCAic2NpZmEwIiwgInNjaWZhMSIsCiAJCQkJInNjaWZhMiIsICJzY2lmYTMiLCAic2NpZmE0IjsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzgtYm9ja3ctcmVmZXJlbmNlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzgtYm9ja3ctcmVmZXJlbmNlLmR0cwppbmRleCAzMzQyYzc0Li4wNGMwYzM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LWJvY2t3LXJlZmVyZW5jZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OC1ib2Nrdy1yZWZlcmVuY2UuZHRzCkBAIC0yOCw3ICsyOCw4IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0MwLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcm9vdD0vZGV2L25mcyBpcD1kaGNwIHJ3IjsKKwkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBydyI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWYwOwogCX07CiAKIAltZW1vcnkgewpAQCAtNzMsNiArNzQsMTAgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismdG11MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnBmYyB7CiAJc2NpZjBfcGluczogc2VyaWFsMCB7CiAJCXJlbmVzYXMsZ3JvdXBzID0gInNjaWYwX2RhdGFfYSIsICJzY2lmMF9jdHJsIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzguZHRzaQppbmRleCAzMTVlYzYyLi5lZjg1MzM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OC5kdHNpCkBAIC0xNjIsNiArMTYyLDQyIEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXRtdTA6IHRpbWVyQGZmZDgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHRtdS1yOGE3Nzc4IiwgInJlbmVzYXMsdG11IjsKKwkJcmVnID0gPDB4ZmZkODAwMDAgMHgzMD47CisJCWludGVycnVwdHMgPSA8MCAzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMzMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDM0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCSNyZW5lc2FzLGNoYW5uZWxzID0gPDM+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXRtdTE6IHRpbWVyQGZmZDgxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHRtdS1yOGE3Nzc4IiwgInJlbmVzYXMsdG11IjsKKwkJcmVnID0gPDB4ZmZkODEwMDAgMHgzMD47CisJCWludGVycnVwdHMgPSA8MCAzNiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMzcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDM4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCSNyZW5lc2FzLGNoYW5uZWxzID0gPDM+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXRtdTI6IHRpbWVyQGZmZDgyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHRtdS1yOGE3Nzc4IiwgInJlbmVzYXMsdG11IjsKKwkJcmVnID0gPDB4ZmZkODIwMDAgMHgzMD47CisJCWludGVycnVwdHMgPSA8MCA0MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgNDEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDQyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCSNyZW5lc2FzLGNoYW5uZWxzID0gPDM+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXNjaWYwOiBzZXJpYWxAZmZlNDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZi1yOGE3Nzc4IiwgInJlbmVzYXMsc2NpZiI7CiAJCXJlZyA9IDwweGZmZTQwMDAwIDB4MTAwPjsKQEAgLTIxNSw4ICsyNTEsNiBAQAogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3Nzc4IjsKIAkJcmVnID0gPDB4ZmZlNGMwMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgODcgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7Ci0JCWNhcC1zZGlvLWlycTsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0yMjQsOCArMjU4LDYgQEAKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc3OCI7CiAJCXJlZyA9IDwweGZmZTRkMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDg4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQljYXAtc2QtaGlnaHNwZWVkOwotCQljYXAtc2Rpby1pcnE7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMjMzLDggKzI2NSw2IEBACiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzZGhpLXI4YTc3NzgiOwogCQlyZWcgPSA8MHhmZmU0ZjAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQkJY2FwLXNkaW8taXJxOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzktbWFyemVuLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzktbWFyemVuLmR0cwppbmRleCBjMTYwNDA0Li5lODNkNDBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LW1hcnplbi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OS1tYXJ6ZW4uZHRzCkBAIC0yNSw2ICsyNSw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDMiwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJvb3Q9L2Rldi9uZnMgaXA9b24iOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmMjsKIAl9OwogCiAJbWVtb3J5IHsKQEAgLTY4LDYgKzY5LDc4IEBACiAJCQlncGlvcyA9IDwmZ3BpbzQgMzEgR1BJT19BQ1RJVkVfSElHSD47CiAJCX07CiAJfTsKKworCXZnYS1lbmNvZGVyIHsKKwkJY29tcGF0aWJsZSA9ICJhZGksYWR2NzEyMyI7CisKKwkJcG9ydHMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJdmdhX2VuY19pbjogZW5kcG9pbnQgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmR1X291dF9yZ2IwPjsKKwkJCQl9OworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCXZnYV9lbmNfb3V0OiBlbmRwb2ludCB7CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdmdhX2luPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCisJdmdhIHsKKwkJY29tcGF0aWJsZSA9ICJ2Z2EtY29ubmVjdG9yIjsKKworCQlwb3J0IHsKKwkJCXZnYV9pbjogZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdmdhX2VuY19vdXQ+OworCQkJfTsKKwkJfTsKKwl9OworCisJbHZkcy1lbmNvZGVyIHsKKwkJY29tcGF0aWJsZSA9ICJ0aGluZSx0aGM2M2x2ZG04M2QiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWx2ZHNfZW5jX2luOiBlbmRwb2ludCB7CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmZHVfb3V0X3JnYjE+OworCQkJCX07CisJCQl9OworCQkJcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJbHZkc19jb25uZWN0b3I6IGVuZHBvaW50IHsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmR1IHsKKwlwaW5jdHJsLTAgPSA8JmR1X3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJc3RhdHVzID0gIm9rYXkiOworCisJcG9ydHMgeworCQlwb3J0QDAgeworCQkJZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdmdhX2VuY19pbj47CisJCQl9OworCQl9OworCQlwb3J0QDEgeworCQkJZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmbHZkc19lbmNfaW4+OworCQkJfTsKKwkJfTsKKwl9OwogfTsKIAogJmlycXBpbjAgewpAQCAtODMsNiArMTU2LDE3IEBACiB9OwogCiAmcGZjIHsKKwlkdV9waW5zOiBkdSB7CisJCWR1MCB7CisJCQlyZW5lc2FzLGdyb3VwcyA9ICJkdTBfcmdiODg4IiwgImR1MF9zeW5jXzEiLCAiZHUwX2Nsa19vdXRfMCI7CisJCQlyZW5lc2FzLGZ1bmN0aW9uID0gImR1MCI7CisJCX07CisJCWR1MSB7CisJCQlyZW5lc2FzLGdyb3VwcyA9ICJkdTFfcmdiNjY2IiwgImR1MV9zeW5jXzEiLCAiZHUxX2Nsa19vdXQiOworCQkJcmVuZXNhcyxmdW5jdGlvbiA9ICJkdTEiOworCQl9OworCX07CisKIAlsYW4wX3BpbnM6IGxhbjAgewogCQlpbnRjIHsKIAkJCXJlbmVzYXMsZ3JvdXBzID0gImludGNfaXJxMV9iIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzkuZHRzaQppbmRleCA3Y2ZiYTlhLi5lZGU5YTI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OS5kdHNpCkBAIC0zMDMsNyArMzAzLDcgQEAKIAl9OwogCiAJc2F0YTogc2F0YUBmYzYwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLXNhdGEiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2F0YS1yOGE3Nzc5IiwgInJlbmVzYXMscmNhci1zYXRhIjsKIAkJcmVnID0gPDB4ZmM2MDAwMDAgMHgyMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3NzlfQ0xLX1NBVEE+OwpAQCAtMzE0LDggKzMxNCw2IEBACiAJCXJlZyA9IDwweGZmZTRjMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3NzlfQ0xLX1NESEkwPjsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQkJY2FwLXNkaW8taXJxOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTMyNCw4ICszMjIsNiBAQAogCQlyZWcgPSA8MHhmZmU0ZDAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxMDUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3Nzc5X0NMS19TREhJMT47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7Ci0JCWNhcC1zZGlvLWlycTsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zMzQsOCArMzMwLDYgQEAKIAkJcmVnID0gPDB4ZmZlNGUwMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc3OV9DTEtfU0RISTI+OwotCQljYXAtc2QtaGlnaHNwZWVkOwotCQljYXAtc2Rpby1pcnE7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzQ0LDggKzMzOCw2IEBACiAJCXJlZyA9IDwweGZmZTRmMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3NzlfQ0xLX1NESEkzPjsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQkJY2FwLXNkaW8taXJxOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTM3OSw2ICszNzEsMzAgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJZHU6IGRpc3BsYXlAZmZmODAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsZHUtcjhhNzc3OSI7CisJCXJlZyA9IDwwIDB4ZmZmODAwMDAgMCAweDQwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDMxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc3OV9DTEtfRFU+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWR1X291dF9yZ2IwOiBlbmRwb2ludCB7CisJCQkJfTsKKwkJCX07CisJCQlwb3J0QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCQlkdV9vdXRfcmdiMTogZW5kcG9pbnQgeworCQkJCX07CisJCQl9OworCQl9OworCX07CisKIAljbG9ja3MgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkwLWxhZ2VyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAtbGFnZXIuZHRzCmluZGV4IDY5MDk4YjkuLjYzNmQ1M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAtbGFnZXIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAtbGFnZXIuZHRzCkBAIC05LDYgKzksMzQgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKKy8qCisgKiBTU0ktQUs0NjQzCisgKgorICogU1cxOiAxOiBBSzQ2NDMKKyAqICAgICAgMjogQ04yMgorICogICAgICAzOiBBRFY3NTExCisgKgorICogVGhpcyBjb21tYW5kIGlzIHJlcXVpcmVkIHdoZW4gUGxheWJhY2svQ2FwdHVyZQorICoKKyAqCWFtaXhlciBzZXQgIkxJTkVPVVQgTWl4ZXIgREFDTCIgb24KKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQiIDEwMCUKKyAqCWFtaXhlciBzZXQgIkRWQyBJbiIgMTAwJQorICoKKyAqIFlvdSBjYW4gdXNlIE11dGUKKyAqCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IE11dGUiIG9uCisgKglhbWl4ZXIgc2V0ICJEVkMgSW4gTXV0ZSIgb24KKyAqCisgKiBZb3UgY2FuIHVzZSBWb2x1bWUgUmFtcAorICoKKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQgUmFtcCBVcCBSYXRlIiAgICIwLjEyNSBkQi82NCBzdGVwcyIKKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQgUmFtcCBEb3duIFJhdGUiICIwLjEyNSBkQi81MTIgc3RlcHMiCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IFJhbXAiIG9uCisgKglhcGxheSB4eHgud2F2ICYKKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQiICA4MCUgIC8vIFZvbHVtZSBEb3duCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IiAxMDAlICAvLyBWb2x1bWUgVXAKKyAqLworCiAvZHRzLXYxLzsKICNpbmNsdWRlICJyOGE3NzkwLmR0c2kiCiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CkBAIC0xOSwxMiArNDcsMTMgQEAKIAljb21wYXRpYmxlID0gInJlbmVzYXMsbGFnZXIiLCAicmVuZXNhcyxyOGE3NzkwIjsKIAogCWFsaWFzZXMgewotCQlzZXJpYWw2ID0gJnNjaWYwOwotCQlzZXJpYWw3ID0gJnNjaWYxOworCQlzZXJpYWw2ID0gJnNjaWZhMDsKKwkJc2VyaWFsNyA9ICZzY2lmYTE7CiAJfTsKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0M2LDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKKwkJc3Rkb3V0LXBhdGggPSAmc2NpZmEwOwogCX07CiAKIAltZW1vcnlANDAwMDAwMDAgewpAQCAtNDIsNyArNzEsNyBAQAogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAl9OwogCi0JZ3Bpb19rZXlzIHsKKwlrZXlib2FyZCB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKIAogCQlidXR0b25AMSB7CkBAIC0xNDQsNiArMTczLDczIEBACiAJCXN0YXRlcyA9IDwzMzAwMDAwIDEKIAkJCSAgMTgwMDAwMCAwPjsKIAl9OworCisJc291bmQgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKKworCQlzaW1wbGUtYXVkaW8tY2FyZCxmb3JtYXQgPSAibGVmdF9qIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsYml0Y2xvY2stbWFzdGVyID0gPCZzbmRjb2RlYz47CisJCXNpbXBsZS1hdWRpby1jYXJkLGZyYW1lLW1hc3RlciA9IDwmc25kY29kZWM+OworCisJCXNuZGNwdTogc2ltcGxlLWF1ZGlvLWNhcmQsY3B1IHsKKwkJCXNvdW5kLWRhaSA9IDwmcmNhcl9zb3VuZD47CisJCX07CisKKwkJc25kY29kZWM6IHNpbXBsZS1hdWRpby1jYXJkLGNvZGVjIHsKKwkJCXNvdW5kLWRhaSA9IDwmYWs0NjQzPjsKKwkJCXN5c3RlbS1jbG9jay1mcmVxdWVuY3kgPSA8MTEyODk2MDA+OworCQl9OworCX07CisKKwl2Z2EtZW5jb2RlciB7CisJCWNvbXBhdGlibGUgPSAiYWRpLGFkdjcxMjMiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWFkdjcxMjNfaW46IGVuZHBvaW50IHsKKwkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkdV9vdXRfcmdiPjsKKwkJCQl9OworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCWFkdjcxMjNfb3V0OiBlbmRwb2ludCB7CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdmdhX2luPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCisJdmdhIHsKKwkJY29tcGF0aWJsZSA9ICJ2Z2EtY29ubmVjdG9yIjsKKworCQlwb3J0IHsKKwkJCXZnYV9pbjogZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmYWR2NzEyM19vdXQ+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmR1IHsKKwlwaW5jdHJsLTAgPSA8JmR1X3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJc3RhdHVzID0gIm9rYXkiOworCisJcG9ydHMgeworCQlwb3J0QDAgeworCQkJZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmYWR2NzEyM19pbj47CisJCQl9OworCQl9OworCQlwb3J0QDIgeworCQkJbHZkc19jb25uZWN0b3I6IGVuZHBvaW50IHsKKwkJCX07CisJCX07CisJfTsKIH07CiAKICZleHRhbF9jbGsgewpAQCAtMTUxLDE3ICsyNDcsMTQgQEAKIH07CiAKICZwZmMgewotCXBpbmN0cmwtMCA9IDwmZHVfcGlucz47Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQogCWR1X3BpbnM6IGR1IHsKIAkJcmVuZXNhcyxncm91cHMgPSAiZHVfcmdiNjY2IiwgImR1X3N5bmNfMSIsICJkdV9jbGtfb3V0XzAiOwogCQlyZW5lc2FzLGZ1bmN0aW9uID0gImR1IjsKIAl9OwogCi0Jc2NpZjBfcGluczogc2VyaWFsMCB7Ci0JCXJlbmVzYXMsZ3JvdXBzID0gInNjaWYwX2RhdGEiOwotCQlyZW5lc2FzLGZ1bmN0aW9uID0gInNjaWYwIjsKKwlzY2lmYTBfcGluczogc2VyaWFsMCB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInNjaWZhMF9kYXRhIjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzY2lmYTAiOwogCX07CiAKIAlldGhlcl9waW5zOiBldGhlciB7CkBAIC0xNzQsOSArMjY3LDkgQEAKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJpbnRjIjsKIAl9OwogCi0Jc2NpZjFfcGluczogc2VyaWFsMSB7Ci0JCXJlbmVzYXMsZ3JvdXBzID0gInNjaWYxX2RhdGEiOwotCQlyZW5lc2FzLGZ1bmN0aW9uID0gInNjaWYxIjsKKwlzY2lmYTFfcGluczogc2VyaWFsMSB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInNjaWZhMV9kYXRhIjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzY2lmYTEiOwogCX07CiAKIAlzZGhpMF9waW5zOiBzZDAgewpAQCAtMjIwLDYgKzMxMywxMSBAQAogCQlyZW5lc2FzLGZ1bmN0aW9uID0gImlpYzMiOwogCX07CiAKKwloc3VzYl9waW5zOiBoc3VzYiB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInVzYjBfb3ZjX3ZidXMiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gInVzYjAiOworCX07CisKIAl1c2IwX3BpbnM6IHVzYjAgewogCQlyZW5lc2FzLGdyb3VwcyA9ICJ1c2IwIjsKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJ1c2IwIjsKQEAgLTIzOSw2ICszMzcsMTYgQEAKIAkJcmVuZXNhcyxncm91cHMgPSAidmluMV9kYXRhOCIsICJ2aW4xX2NsayI7CiAJCXJlbmVzYXMsZnVuY3Rpb24gPSAidmluMSI7CiAJfTsKKworCXNvdW5kX3BpbnM6IHNvdW5kIHsKKwkJcmVuZXNhcyxncm91cHMgPSAic3NpMDEyOV9jdHJsIiwgInNzaTBfZGF0YSIsICJzc2kxX2RhdGEiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gInNzaSI7CisJfTsKKworCXNvdW5kX2Nsa19waW5zOiBzb3VuZF9jbGsgeworCQlyZW5lc2FzLGdyb3VwcyA9ICJhdWRpb19jbGtfYSI7CisJCXJlbmVzYXMsZnVuY3Rpb24gPSAiYXVkaW9fY2xrIjsKKwl9OwogfTsKIAogJmV0aGVyIHsKQEAgLTMwOCwxNSArNDE2LDE1IEBACiAJfTsKIH07CiAKLSZzY2lmMCB7Ci0JcGluY3RybC0wID0gPCZzY2lmMF9waW5zPjsKKyZzY2lmYTAgeworCXBpbmN0cmwtMCA9IDwmc2NpZmEwX3BpbnM+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCi0mc2NpZjEgewotCXBpbmN0cmwtMCA9IDwmc2NpZjFfcGlucz47Cismc2NpZmExIHsKKwlwaW5jdHJsLTAgPSA8JnNjaWZhMV9waW5zPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJc3RhdHVzID0gIm9rYXkiOwpAQCAtMzc2LDYgKzQ4NCwxNCBAQAogCXBpbmN0cmwtMCA9IDwmaWljMl9waW5zPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisKKwlhazQ2NDM6IHNvdW5kLWNvZGVjQDEyIHsKKwkJY29tcGF0aWJsZSA9ICJhc2FoaS1rYXNlaSxhazQ2NDMiOworCQkjc291bmQtZGFpLWNlbGxzID0gPDA+OworCQlyZWcgPSA8MHgxMj47CisJfTsKKwogCWNvbXBvc2l0ZS1pbkAyMCB7CiAJCWNvbXBhdGlibGUgPSAiYWRpLGFkdjcxODAiOwogCQlyZWcgPSA8MHgyMD47CkBAIC00MTgsMTIgKzUzNCwyOSBAQAogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiB9OwogCismeGhjaSB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtMCA9IDwmdXNiMl9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworfTsKKwogJnBjaTIgewogCXN0YXR1cyA9ICJva2F5IjsKIAlwaW5jdHJsLTAgPSA8JnVzYjJfcGlucz47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIH07CiAKKyZoc3VzYiB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtMCA9IDwmaHN1c2JfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlyZW5lc2FzLGVuYWJsZS1ncGlvID0gPCZncGlvNSAxOCBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZ1c2JwaHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKIC8qIGNvbXBvc2l0ZSB2aWRlbyBpbnB1dCAqLwogJnZpbjEgewogCXBpbmN0cmwtMCA9IDwmdmluMV9waW5zPjsKQEAgLTQ0MSwzICs1NzQsMjMgQEAKIAkJfTsKIAl9OwogfTsKKworJnJjYXJfc291bmQgeworCXBpbmN0cmwtMCA9IDwmc291bmRfcGlucyAmc291bmRfY2xrX3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkjc291bmQtZGFpLWNlbGxzID0gPDA+OworCisJc3RhdHVzID0gIm9rYXkiOworCisJcmNhcl9zb3VuZCxkYWkgeworCQlkYWkwIHsKKwkJCXBsYXliYWNrID0gPCZzc2kwICZzcmMyICZkdmMwPjsKKwkJCWNhcHR1cmUgID0gPCZzc2kxICZzcmMzICZkdmMxPjsKKwkJfTsKKwl9OworfTsKKworJnNzaTEgeworCXNoYXJlZC1waW47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC5kdHNpCmluZGV4IGQwZTE3NzMuLmFmN2UyNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkwLmR0c2kKQEAgLTMxMiw2ICszMTIsNzAgQEAKIAkJI2RtYS1jZWxscyA9IDwxPjsKIAkJZG1hLWNoYW5uZWxzID0gPDE1PjsKIAl9OworCisJYXVkbWEwOiBkbWEtY29udHJvbGxlckBlYzcwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLWRtYWMiOworCQlyZWcgPSA8MCAweGVjNzAwMDAwIDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPQk8MCAzNDYgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzIxIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjIgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjUgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyNiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjggSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyOSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzMwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwKKwkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKKwkJCQkiY2g4IiwgImNoOSIsICJjaDEwIiwgImNoMTEiLAorCQkJCSJjaDEyIjsKKwkJY2xvY2tzID0gPCZtc3RwNV9jbGtzIFI4QTc3OTBfQ0xLX0FVRElPX0RNQUMwPjsKKwkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDEzPjsKKwl9OworCisJYXVkbWExOiBkbWEtY29udHJvbGxlckBlYzcyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLWRtYWMiOworCQlyZWcgPSA8MCAweGVjNzIwMDAwIDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPQk8MCAzNDcgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzUgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzNiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzggSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzOSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0MiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQzIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwKKwkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKKwkJCQkiY2g4IiwgImNoOSIsICJjaDEwIiwgImNoMTEiLAorCQkJCSJjaDEyIjsKKwkJY2xvY2tzID0gPCZtc3RwNV9jbGtzIFI4QTc3OTBfQ0xLX0FVRElPX0RNQUMxPjsKKwkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDEzPjsKKwl9OworCisJYXVkbWFwcDogZG1hLWNvbnRyb2xsZXJAZWM3NDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMscmNhci1hdWRtYXBwIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKworCQlyZWcgPSA8MCAweGVjNzQwMDAwIDAgMHgyMDA+OworCX07CisKIAlpMmMwOiBpMmNAZTY1MDgwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0zNTksNiArNDIzLDggQEAKIAkJcmVnID0gPDAgMHhlNjUwMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX0lJQzA+OworCQlkbWFzID0gPCZkbWFjMCAweDYxPiwgPCZkbWFjMCAweDYyPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zNjksNiArNDM1LDggQEAKIAkJcmVnID0gPDAgMHhlNjUxMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX0lJQzE+OworCQlkbWFzID0gPCZkbWFjMCAweDY1PiwgPCZkbWFjMCAweDY2PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zNzksNiArNDQ3LDggQEAKIAkJcmVnID0gPDAgMHhlNjUyMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX0lJQzI+OworCQlkbWFzID0gPCZkbWFjMCAweDY5PiwgPCZkbWFjMCAweDZhPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zODksMTQgKzQ1OSwxOCBAQAogCQlyZWcgPSA8MCAweGU2MGIwMDAwIDAgMHg0MjU+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTczIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MF9DTEtfSUlDRFZGUz47CisJCWRtYXMgPSA8JmRtYWMwIDB4Nzc+LCA8JmRtYWMwIDB4Nzg+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKLQltbWNpZjA6IG1tY2lmQGVlMjAwMDAwIHsKKwltbWNpZjA6IG1tY0BlZTIwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxtbWNpZi1yOGE3NzkwIiwgInJlbmVzYXMsc2gtbW1jaWYiOwogCQlyZWcgPSA8MCAweGVlMjAwMDAwIDAgMHg4MD47CiAJCWludGVycnVwdHMgPSA8MCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19NTUNJRjA+OworCQlkbWFzID0gPCZkbWFjMCAweGQxPiwgPCZkbWFjMCAweGQyPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJcmVnLWlvLXdpZHRoID0gPDQ+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC00MDYsNiArNDgwLDggQEAKIAkJcmVnID0gPDAgMHhlZTIyMDAwMCAwIDB4ODA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTcwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MF9DTEtfTU1DSUYxPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHhlMT4sIDwmZG1hYzAgMHhlMj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXJlZy1pby13aWR0aCA9IDw0PjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtNDIwLDcgKzQ5Niw2IEBACiAJCXJlZyA9IDwwIDB4ZWUxMDAwMDAgMCAweDIwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19TREhJMD47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNDI5LDcgKzUwNCw2IEBACiAJCXJlZyA9IDwwIDB4ZWUxMjAwMDAgMCAweDIwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNjYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19TREhJMT47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNDM4LDcgKzUxMiw2IEBACiAJCXJlZyA9IDwwIDB4ZWUxNDAwMDAgMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNjcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19TREhJMj47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNDQ3LDcgKzUyMCw2IEBACiAJCXJlZyA9IDwwIDB4ZWUxNjAwMDAgMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNjggSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19TREhJMz47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNTY4LDYgKzY0MCwzNiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwloc3VzYjogdXNiQGU2NTkwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHVzYmhzLXI4YTc3OTAiOworCQlyZWcgPSA8MCAweGU2NTkwMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA3X2Nsa3MgUjhBNzc5MF9DTEtfSFNVU0I+OworCQlyZW5lc2FzLGJ1c3dhaXQgPSA8ND47CisJCXBoeXMgPSA8JnVzYjAgMT47CisJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1c2JwaHk6IHVzYi1waHlAZTY1OTAxMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdXNiLXBoeS1yOGE3NzkwIjsKKwkJcmVnID0gPDAgMHhlNjU5MDEwMCAwIDB4MTAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljbG9ja3MgPSA8Jm1zdHA3X2Nsa3MgUjhBNzc5MF9DTEtfSFNVU0I+OworCQljbG9jay1uYW1lcyA9ICJ1c2JocyI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJdXNiMDogdXNiLWNoYW5uZWxAMCB7CisJCQlyZWcgPSA8MD47CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQl9OworCQl1c2IyOiB1c2ItY2hhbm5lbEAyIHsKKwkJCXJlZyA9IDwyPjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCX07CisJfTsKKwogCXZpbjA6IHZpZGVvQGU2ZWYwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZpbi1yOGE3NzkwIjsKIAkJY2xvY2tzID0gPCZtc3RwOF9jbGtzIFI4QTc3OTBfQ0xLX1ZJTjA+OwpAQCAtNjAwLDYgKzcwMiw5NiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwl2c3AxQGZlOTIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZzcDEiOworCQlyZWcgPSA8MCAweGZlOTIwMDAwIDAgMHg4MDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDI2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3OTBfQ0xLX1ZTUDFfUj47CisKKwkJcmVuZXNhcyxoYXMtc3J1OworCQlyZW5lc2FzLCNycGYgPSA8NT47CisJCXJlbmVzYXMsI3VkcyA9IDwxPjsKKwkJcmVuZXNhcywjd3BmID0gPDQ+OworCX07CisKKwl2c3AxQGZlOTI4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZzcDEiOworCQlyZWcgPSA8MCAweGZlOTI4MDAwIDAgMHg4MDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDI2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3OTBfQ0xLX1ZTUDFfUz47CisKKwkJcmVuZXNhcyxoYXMtbHV0OworCQlyZW5lc2FzLGhhcy1zcnU7CisJCXJlbmVzYXMsI3JwZiA9IDw1PjsKKwkJcmVuZXNhcywjdWRzID0gPDM+OworCQlyZW5lc2FzLCN3cGYgPSA8ND47CisJfTsKKworCXZzcDFAZmU5MzAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdnNwMSI7CisJCXJlZyA9IDwwIDB4ZmU5MzAwMDAgMCAweDgwMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMjQ2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc5MF9DTEtfVlNQMV9EVTA+OworCisJCXJlbmVzYXMsaGFzLWxpZjsKKwkJcmVuZXNhcyxoYXMtbHV0OworCQlyZW5lc2FzLCNycGYgPSA8ND47CisJCXJlbmVzYXMsI3VkcyA9IDwxPjsKKwkJcmVuZXNhcywjd3BmID0gPDQ+OworCX07CisKKwl2c3AxQGZlOTM4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZzcDEiOworCQlyZWcgPSA8MCAweGZlOTM4MDAwIDAgMHg4MDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDI0NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3OTBfQ0xLX1ZTUDFfRFUxPjsKKworCQlyZW5lc2FzLGhhcy1saWY7CisJCXJlbmVzYXMsaGFzLWx1dDsKKwkJcmVuZXNhcywjcnBmID0gPDQ+OworCQlyZW5lc2FzLCN1ZHMgPSA8MT47CisJCXJlbmVzYXMsI3dwZiA9IDw0PjsKKwl9OworCisJZHU6IGRpc3BsYXlAZmViMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsZHUtcjhhNzc5MCI7CisJCXJlZyA9IDwwIDB4ZmViMDAwMDAgMCAweDcwMDAwPiwKKwkJICAgICAgPDAgMHhmZWI5MDAwMCAwIDB4MWM+LAorCQkgICAgICA8MCAweGZlYjk0MDAwIDAgMHgxYz47CisJCXJlZy1uYW1lcyA9ICJkdSIsICJsdmRzLjAiLCAibHZkcy4xIjsKKwkJaW50ZXJydXB0cyA9IDwwIDI1NiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMjY4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDdfY2xrcyBSOEE3NzkwX0NMS19EVTA+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkwX0NMS19EVTE+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkwX0NMS19EVTI+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkwX0NMS19MVkRTMD4sCisJCQkgPCZtc3RwN19jbGtzIFI4QTc3OTBfQ0xLX0xWRFMxPjsKKwkJY2xvY2stbmFtZXMgPSAiZHUuMCIsICJkdS4xIiwgImR1LjIiLCAibHZkcy4wIiwgImx2ZHMuMSI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJcG9ydHMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJZHVfb3V0X3JnYjogZW5kcG9pbnQgeworCQkJCX07CisJCQl9OworCQkJcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJZHVfb3V0X2x2ZHMwOiBlbmRwb2ludCB7CisJCQkJfTsKKwkJCX07CisJCQlwb3J0QDIgeworCQkJCXJlZyA9IDwyPjsKKwkJCQlkdV9vdXRfbHZkczE6IGVuZHBvaW50IHsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCiAJY2xvY2tzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtNjY2LDkgKzg1OCw5IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic2QyIjsKIAkJfTsKLQkJc2QzX2Nsazogc2QzX2Nsa0BlNjE1MDA3YyB7CisJCXNkM19jbGs6IHNkM19jbGtAZTYxNTAyNmMgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTAtZGl2Ni1jbG9jayIsICJyZW5lc2FzLGNwZy1kaXY2LWNsb2NrIjsKLQkJCXJlZyA9IDwwIDB4ZTYxNTAwN2MgMCA0PjsKKwkJCXJlZyA9IDwwIDB4ZTYxNTAyNmMgMCA0PjsKIAkJCWNsb2NrcyA9IDwmcGxsMV9kaXYyX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic2QzIjsKQEAgLTg2OCwxOCArMTA2MCwyNSBAQAogCQltc3RwMV9jbGtzOiBtc3RwMV9jbGtzQGU2MTUwMTM0IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTAxMzQgMCA0PiwgPDAgMHhlNjE1MDAzOCAwIDQ+OwotCQkJY2xvY2tzID0gPCZtMl9jbGs+LCA8JnBfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JnJjbGtfY2xrPiwKLQkJCQkgPCZjcF9jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+LAotCQkJCSA8JnpzX2Nsaz47CisJCQljbG9ja3MgPSA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmbTJfY2xrPiwKKwkJCQkgPCZ6c19jbGs+LCA8JnBfY2xrPiwgPCZ6Z19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwKKwkJCQkgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZyY2xrX2Nsaz4sCisJCQkJIDwmY3BfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAotCQkJCVI4QTc3OTBfQ0xLX0pQVSBSOEE3NzkwX0NMS19UTVUxIFI4QTc3OTBfQ0xLX1RNVTMgUjhBNzc5MF9DTEtfVE1VMgotCQkJCVI4QTc3OTBfQ0xLX0NNVDAgUjhBNzc5MF9DTEtfVE1VMCBSOEE3NzkwX0NMS19WU1AxX0RVMQotCQkJCVI4QTc3OTBfQ0xLX1ZTUDFfRFUwIFI4QTc3OTBfQ0xLX1ZTUDFfUiBSOEE3NzkwX0NMS19WU1AxX1MKKwkJCQlSOEE3NzkwX0NMS19WQ1AxIFI4QTc3OTBfQ0xLX1ZDUDAgUjhBNzc5MF9DTEtfVlBDMQorCQkJCVI4QTc3OTBfQ0xLX1ZQQzAgUjhBNzc5MF9DTEtfSlBVIFI4QTc3OTBfQ0xLX1NTUDEKKwkJCQlSOEE3NzkwX0NMS19UTVUxIFI4QTc3OTBfQ0xLXzNERyBSOEE3NzkwX0NMS18yRERNQUMKKwkJCQlSOEE3NzkwX0NMS19GRFAxXzIgUjhBNzc5MF9DTEtfRkRQMV8xIFI4QTc3OTBfQ0xLX0ZEUDFfMAorCQkJCVI4QTc3OTBfQ0xLX1RNVTMgUjhBNzc5MF9DTEtfVE1VMiBSOEE3NzkwX0NMS19DTVQwCisJCQkJUjhBNzc5MF9DTEtfVE1VMCBSOEE3NzkwX0NMS19WU1AxX0RVMSBSOEE3NzkwX0NMS19WU1AxX0RVMAorCQkJCVI4QTc3OTBfQ0xLX1ZTUDFfUiBSOEE3NzkwX0NMS19WU1AxX1MKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQotCQkJCSJqcHUiLCAidG11MSIsICJ0bXUzIiwgInRtdTIiLCAiY210MCIsICJ0bXUwIiwgInZzcDEtZHUxIiwKLQkJCQkidnNwMS1kdTAiLCAidnNwMS1ydCIsICJ2c3AxLXN5IjsKKwkJCQkidmNwMSIsICJ2Y3AwIiwgInZwYzEiLCAidnBjMCIsICJqcHUiLCAic3NwMSIsCisJCQkJInRtdTEiLCAiM2RnIiwgIjJkZG1hYyIsICJmZHAxLTIiLCAiZmRwMS0xIiwKKwkJCQkiZmRwMS0wIiwgInRtdTMiLCAidG11MiIsICJjbXQwIiwgInRtdTAiLAorCQkJCSJ2c3AxLWR1MSIsICJ2c3AxLWR1MCIsICJ2c3AxLXJ0IiwgInZzcDEtc3kiOwogCQl9OwogCQltc3RwMl9jbGtzOiBtc3RwMl9jbGtzQGU2MTUwMTM4IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKQEAgLTkwNCwyNSArMTEwMywyOSBAQAogCQkJcmVnID0gPDAgMHhlNjE1MDEzYyAwIDQ+LCA8MCAweGU2MTUwMDQ4IDAgND47CiAJCQljbG9ja3MgPSA8JmhwX2Nsaz4sIDwmY3BfY2xrPiwgPCZtbWMxX2Nsaz4sIDwmc2QzX2Nsaz4sCiAJCQkJIDwmc2QyX2Nsaz4sIDwmY3BnX2Nsb2NrcyBSOEE3NzkwX0NMS19TRDE+LCA8JmNwZ19jbG9ja3MgUjhBNzc5MF9DTEtfU0QwPiwgPCZtbWMwX2Nsaz4sCi0JCQkJIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JmhwX2Nsaz4sIDwmbXBfY2xrPiwgPCZyY2xrX2Nsaz47CisJCQkJIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JmhwX2Nsaz4sIDwmbXBfY2xrPiwgPCZyY2xrX2Nsaz4sCisJCQkJIDwmaHBfY2xrPiwgPCZocF9jbGs+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAogCQkJCVI4QTc3OTBfQ0xLX0lJQzIgUjhBNzc5MF9DTEtfVFBVMCBSOEE3NzkwX0NMS19NTUNJRjEgUjhBNzc5MF9DTEtfU0RISTMKIAkJCQlSOEE3NzkwX0NMS19TREhJMiBSOEE3NzkwX0NMS19TREhJMSBSOEE3NzkwX0NMS19TREhJMCBSOEE3NzkwX0NMS19NTUNJRjAKIAkJCQlSOEE3NzkwX0NMS19JSUMwIFI4QTc3OTBfQ0xLX1BDSUVDIFI4QTc3OTBfQ0xLX0lJQzEgUjhBNzc5MF9DTEtfU1NVU0IgUjhBNzc5MF9DTEtfQ01UMQorCQkJCVI4QTc3OTBfQ0xLX1VTQkRNQUMwIFI4QTc3OTBfQ0xLX1VTQkRNQUMxCiAJCQk+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0KIAkJCQkiaWljMiIsICJ0cHUwIiwgIm1tY2lmMSIsICJzZGhpMyIsCiAJCQkJInNkaGkyIiwgInNkaGkxIiwgInNkaGkwIiwgIm1tY2lmMCIsCi0JCQkJImlpYzAiLCAicGNpZWMiLCAiaWljMSIsICJzc3VzYiIsICJjbXQxIjsKKwkJCQkiaWljMCIsICJwY2llYyIsICJpaWMxIiwgInNzdXNiIiwgImNtdDEiLAorCQkJCSJ1c2JkbWFjMCIsICJ1c2JkbWFjMSI7CiAJCX07CiAJCW1zdHA1X2Nsa3M6IG1zdHA1X2Nsa3NAZTYxNTAxNDQgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTAtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDAgMHhlNjE1MDE0NCAwIDQ+LCA8MCAweGU2MTUwMDNjIDAgND47Ci0JCQljbG9ja3MgPSA8JmV4dGFsX2Nsaz4sIDwmcF9jbGs+OworCQkJY2xvY2tzID0gPCZocF9jbGs+LCA8JmhwX2Nsaz4sIDwmZXh0YWxfY2xrPiwgPCZwX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47Ci0JCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8UjhBNzc5MF9DTEtfVEhFUk1BTCBSOEE3NzkwX0NMS19QV00+OwotCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInRoZXJtYWwiLCAicHdtIjsKKwkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDxSOEE3NzkwX0NMS19BVURJT19ETUFDMCBSOEE3NzkwX0NMS19BVURJT19ETUFDMQorCQkJCQkJIFI4QTc3OTBfQ0xLX1RIRVJNQUwgUjhBNzc5MF9DTEtfUFdNPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhdWRtYWMwIiwgImF1ZG1hYzEiLCAidGhlcm1hbCIsICJwd20iOwogCQl9OwogCQltc3RwN19jbGtzOiBtc3RwN19jbGtzQGU2MTUwMTRjIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKQEAgLTEwNzAsNiArMTI3MywxNiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwl4aGNpOiB1c2JAZWUwMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMseGhjaS1yOGE3NzkwIjsKKwkJcmVnID0gPDAgMHhlZTAwMDAwMCAwIDB4YzAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDEwMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX1NTVVNCPjsKKwkJcGh5cyA9IDwmdXNiMiAxPjsKKwkJcGh5LW5hbWVzID0gInVzYiI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXBjaTA6IHBjaUBlZTA5MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxwY2ktcjhhNzc5MCI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CkBAIC0xMDg4LDYgKzEzMDEsMjAgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwweDAwMDAgMCAwIDEgJmdpYyAwIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkJIDB4MDgwMCAwIDAgMSAmZ2ljIDAgMTA4IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgxMDAwIDAgMCAyICZnaWMgMCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJdXNiQDAsMSB7CisJCQlyZWcgPSA8MHg4MDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNiMCAwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCisJCXVzYkAwLDIgeworCQkJcmVnID0gPDB4MTAwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IwIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CiAJfTsKIAogCXBjaTE6IHBjaUBlZTBiMDAwMCB7CkBAIC0xMTI4LDYgKzEzNTUsMjAgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwweDAwMDAgMCAwIDEgJmdpYyAwIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkJIDB4MDgwMCAwIDAgMSAmZ2ljIDAgMTEzIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgxMDAwIDAgMCAyICZnaWMgMCAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJdXNiQDAsMSB7CisJCQlyZWcgPSA8MHg4MDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNiMiAwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCisJCXVzYkAwLDIgeworCQkJcmVnID0gPDB4MTAwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IyIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CiAJfTsKIAogCXBjaWVjOiBwY2llQGZlMDAwMDAwIHsKQEAgLTExNTUsNyArMTM5Niw3IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCXJjYXJfc291bmQ6IHJjYXJfc291bmRAMHhlYzUwMDAwMCB7CisJcmNhcl9zb3VuZDogcmNhcl9zb3VuZEBlYzUwMDAwMCB7CiAJCSNzb3VuZC1kYWktY2VsbHMgPSA8MT47CiAJCWNvbXBhdGlibGUgPSAgInJlbmVzYXMscmNhcl9zb3VuZC1yOGE3NzkwIiwgInJlbmVzYXMscmNhcl9zb3VuZC1nZW4yIiwgInJlbmVzYXMscmNhcl9zb3VuZCI7CiAJCXJlZyA9CTwwIDB4ZWM1MDAwMDAgMCAweDEwMDA+LCAvKiBTQ1UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEtaGVubmluZ2VyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEtaGVubmluZ2VyLmR0cwppbmRleCBmMWI1NmRlMS4uNzQwZTM4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS1oZW5uaW5nZXIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEtaGVubmluZ2VyLmR0cwpAQCAtMjMsNiArMjMsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTQzAsMzg0MDAgaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWYwOwogCX07CiAKIAltZW1vcnlANDAwMDAwMDAgewpAQCAtMjcxLDYgKzI3MiwxNyBAQAogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiB9OwogCismaHN1c2IgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLTAgPSA8JnVzYjBfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlyZW5lc2FzLGVuYWJsZS1ncGlvID0gPCZncGlvNSAzMSBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZ1c2JwaHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZwY2llX2J1c19jbGsgewogCXN0YXR1cyA9ICJva2F5IjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWtvZWxzY2guZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS1rb2Vsc2NoLmR0cwppbmRleCAwNzU1MGU3Li45OTBhZjE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWtvZWxzY2guZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEta29lbHNjaC5kdHMKQEAgLTEwLDYgKzEwLDM0IEBACiAgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCisvKgorICogU1NJLUFLNDY0MworICoKKyAqIFNXMTogMTogQUs0NjQzCisgKiAgICAgIDI6IENOMjIKKyAqICAgICAgMzogQURWNzUxMQorICoKKyAqIFRoaXMgY29tbWFuZCBpcyByZXF1aXJlZCB3aGVuIFBsYXliYWNrL0NhcHR1cmUKKyAqCisgKglhbWl4ZXIgc2V0ICJMSU5FT1VUIE1peGVyIERBQ0wiIG9uCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IiAxMDAlCisgKglhbWl4ZXIgc2V0ICJEVkMgSW4iIDEwMCUKKyAqCisgKiBZb3UgY2FuIHVzZSBNdXRlCisgKgorICoJYW1peGVyIHNldCAiRFZDIE91dCBNdXRlIiBvbgorICoJYW1peGVyIHNldCAiRFZDIEluIE11dGUiIG9uCisgKgorICogWW91IGNhbiB1c2UgVm9sdW1lIFJhbXAKKyAqCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IFJhbXAgVXAgUmF0ZSIgICAiMC4xMjUgZEIvNjQgc3RlcHMiCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IFJhbXAgRG93biBSYXRlIiAiMC4xMjUgZEIvNTEyIHN0ZXBzIgorICoJYW1peGVyIHNldCAiRFZDIE91dCBSYW1wIiBvbgorICoJYXBsYXkgeHh4LndhdiAmCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IiAgODAlICAvLyBWb2x1bWUgRG93bgorICoJYW1peGVyIHNldCAiRFZDIE91dCIgMTAwJSAgLy8gVm9sdW1lIFVwCisgKi8KKwogL2R0cy12MS87CiAjaW5jbHVkZSAicjhhNzc5MS5kdHNpIgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgpAQCAtMjUsNyArNTMsOCBAQAogCX07CiAKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDNiwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCWJvb3RhcmdzID0gImlnbm9yZV9sb2dsZXZlbCBydyByb290PS9kZXYvbmZzIGlwPWRoY3AiOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmMDsKIAl9OwogCiAJbWVtb3J5QDQwMDAwMDAwIHsKQEAgLTQzLDcgKzcyLDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJfTsKIAotCWdwaW8ta2V5cyB7CisJa2V5Ym9hcmQgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CiAKIAkJa2V5LTEgewpAQCAtMTI5LDEyICsxNTgsMTUgQEAKIAkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwogCQlsZWQ2IHsKIAkJCWdwaW9zID0gPCZncGlvMiAxOSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxhYmVsID0gIkxFRDYiOwogCQl9OwogCQlsZWQ3IHsKIAkJCWdwaW9zID0gPCZncGlvMiAyMCBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxhYmVsID0gIkxFRDciOwogCQl9OwogCQlsZWQ4IHsKIAkJCWdwaW9zID0gPCZncGlvMiAyMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxhYmVsID0gIkxFRDgiOwogCQl9OwogCX07CiAKQEAgLTIwOSw2ICsyNDEsMzYgQEAKIAkJc3RhdGVzID0gPDMzMDAwMDAgMQogCQkJICAxODAwMDAwIDA+OwogCX07CisKKwlzb3VuZCB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWF1ZGlvLWNhcmQiOworCisJCXNpbXBsZS1hdWRpby1jYXJkLGZvcm1hdCA9ICJsZWZ0X2oiOworCQlzaW1wbGUtYXVkaW8tY2FyZCxiaXRjbG9jay1tYXN0ZXIgPSA8JnNuZGNvZGVjPjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZnJhbWUtbWFzdGVyID0gPCZzbmRjb2RlYz47CisKKwkJc25kY3B1OiBzaW1wbGUtYXVkaW8tY2FyZCxjcHUgeworCQkJc291bmQtZGFpID0gPCZyY2FyX3NvdW5kPjsKKwkJfTsKKworCQlzbmRjb2RlYzogc2ltcGxlLWF1ZGlvLWNhcmQsY29kZWMgeworCQkJc291bmQtZGFpID0gPCZhazQ2NDM+OworCQkJc3lzdGVtLWNsb2NrLWZyZXF1ZW5jeSA9IDwxMTI4OTYwMD47CisJCX07CisJfTsKK307CisKKyZkdSB7CisJcGluY3RybC0wID0gPCZkdV9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXN0YXR1cyA9ICJva2F5IjsKKworCXBvcnRzIHsKKwkJcG9ydEAxIHsKKwkJCWx2ZHNfY29ubmVjdG9yOiBlbmRwb2ludCB7CisJCQl9OworCQl9OworCX07CiB9OwogCiAmZXh0YWxfY2xrIHsKQEAgLTIxNiw5ICsyNzgsNiBAQAogfTsKIAogJnBmYyB7Ci0JcGluY3RybC0wID0gPCZkdV9waW5zPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCiAJaTJjMl9waW5zOiBpMmMyIHsKIAkJcmVuZXNhcyxncm91cHMgPSAiaTJjMiI7CiAJCXJlbmVzYXMsZnVuY3Rpb24gPSAiaTJjMiI7CkBAIC0yODksNiArMzQ4LDE2IEBACiAJCXJlbmVzYXMsZ3JvdXBzID0gInZpbjFfZGF0YTgiLCAidmluMV9jbGsiOwogCQlyZW5lc2FzLGZ1bmN0aW9uID0gInZpbjEiOwogCX07CisKKwlzb3VuZF9waW5zOiBzb3VuZCB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInNzaTAxMjlfY3RybCIsICJzc2kwX2RhdGEiLCAic3NpMV9kYXRhIjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzc2kiOworCX07CisKKwlzb3VuZF9jbGtfcGluczogc291bmRfY2xrIHsKKwkJcmVuZXNhcyxncm91cHMgPSAiYXVkaW9fY2xrX2EiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gImF1ZGlvX2NsayI7CisJfTsKIH07CiAKICZldGhlciB7CkBAIC00MTQsNyArNDgzLDEzIEBACiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCXN0YXR1cyA9ICJva2F5IjsKLQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKworCWFrNDY0Mzogc291bmQtY29kZWNAMTIgeworCQljb21wYXRpYmxlID0gImFzYWhpLWthc2VpLGFrNDY0MyI7CisJCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CisJCXJlZyA9IDwweDEyPjsKKwl9OwogCiAJY29tcG9zaXRlLWluQDIwIHsKIAkJY29tcGF0aWJsZSA9ICJhZGksYWR2NzE4MCI7CkBAIC00NjMsNiArNTM4LDE3IEBACiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIH07CiAKKyZoc3VzYiB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtMCA9IDwmdXNiMF9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXJlbmVzYXMsZW5hYmxlLWdwaW8gPSA8JmdwaW81IDMxIEdQSU9fQUNUSVZFX0hJR0g+OworfTsKKworJnVzYnBoeSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnBjaWVfYnVzX2NsayB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKQEAgLTQ5MSwzICs1NzcsMjMgQEAKIAkJfTsKIAl9OwogfTsKKworJnJjYXJfc291bmQgeworCXBpbmN0cmwtMCA9IDwmc291bmRfcGlucyAmc291bmRfY2xrX3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkjc291bmQtZGFpLWNlbGxzID0gPDA+OworCisJc3RhdHVzID0gIm9rYXkiOworCisJcmNhcl9zb3VuZCxkYWkgeworCQlkYWkwIHsKKwkJCXBsYXliYWNrID0gPCZzc2kwICZzcmMyICZkdmMwPjsKKwkJCWNhcHR1cmUgID0gPCZzc2kxICZzcmMzICZkdmMxPjsKKwkJfTsKKwl9OworfTsKKworJnNzaTEgeworCXNoYXJlZC1waW47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS5kdHNpCmluZGV4IGUwNmMxMWYuLjc3YzBiZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLmR0c2kKQEAgLTEsNyArMSw3IEBACiAvKgogICogRGV2aWNlIFRyZWUgU291cmNlIGZvciB0aGUgcjhhNzc5MSBTb0MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KICAqIENvcHlyaWdodCAoQykgMjAxNCBDb2dlbnQgRW1iZWRkZWQgSW5jLgogICoKQEAgLTMwMSw2ICszMDEsNjkgQEAKIAkJZG1hLWNoYW5uZWxzID0gPDE1PjsKIAl9OwogCisJYXVkbWEwOiBkbWEtY29udHJvbGxlckBlYzcwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLWRtYWMiOworCQlyZWcgPSA8MCAweGVjNzAwMDAwIDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPQk8MCAzNDYgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzIxIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjIgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjUgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyNiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjggSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyOSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzMwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwKKwkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKKwkJCQkiY2g4IiwgImNoOSIsICJjaDEwIiwgImNoMTEiLAorCQkJCSJjaDEyIjsKKwkJY2xvY2tzID0gPCZtc3RwNV9jbGtzIFI4QTc3OTFfQ0xLX0FVRElPX0RNQUMwPjsKKwkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDEzPjsKKwl9OworCisJYXVkbWExOiBkbWEtY29udHJvbGxlckBlYzcyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLWRtYWMiOworCQlyZWcgPSA8MCAweGVjNzIwMDAwIDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPQk8MCAzNDcgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzUgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzNiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzggSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzOSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0MiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQzIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwKKwkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKKwkJCQkiY2g4IiwgImNoOSIsICJjaDEwIiwgImNoMTEiLAorCQkJCSJjaDEyIjsKKwkJY2xvY2tzID0gPCZtc3RwNV9jbGtzIFI4QTc3OTFfQ0xLX0FVRElPX0RNQUMxPjsKKwkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDEzPjsKKwl9OworCisJYXVkbWFwcDogZG1hLWNvbnRyb2xsZXJAZWM3NDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMscmNhci1hdWRtYXBwIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKworCQlyZWcgPSA8MCAweGVjNzQwMDAwIDAgMHgyMDA+OworCX07CisKIAkvKiBUaGUgbWVtb3J5IG1hcCBpbiB0aGUgVXNlcidzIE1hbnVhbCBtYXBzIHRoZSBjb3JlcyB0byBidXMgbnVtYmVycyAqLwogCWkyYzA6IGkyY0BlNjUwODAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMzcxLDYgKzQzNCw4IEBACiAJCXJlZyA9IDwwIDB4ZTYwYjAwMDAgMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSOEE3NzkxX0NMS19JSUNEVkZTPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHg3Nz4sIDwmZG1hYzAgMHg3OD47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzgxLDYgKzQ0Niw4IEBACiAJCXJlZyA9IDwwIDB4ZTY1MDAwMDAgMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkxX0NMS19JSUMwPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHg2MT4sIDwmZG1hYzAgMHg2Mj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzkxLDYgKzQ1OCw4IEBACiAJCXJlZyA9IDwwIDB4ZTY1MTAwMDAgMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkxX0NMS19JSUMxPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHg2NT4sIDwmZG1hYzAgMHg2Nj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNDAwLDYgKzQ2OSwxNyBAQAogCQkjZ3Bpby1yYW5nZS1jZWxscyA9IDwzPjsKIAl9OwogCisJbW1jaWYwOiBtbWNAZWUyMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsbW1jaWYtcjhhNzc5MSIsICJyZW5lc2FzLHNoLW1tY2lmIjsKKwkJcmVnID0gPDAgMHhlZTIwMDAwMCAwIDB4ODA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MV9DTEtfTU1DSUYwPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHhkMT4sIDwmZG1hYzAgMHhkMj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJc2RoaTA6IHNkQGVlMTAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc5MSI7CiAJCXJlZyA9IDwwIDB4ZWUxMDAwMDAgMCAweDIwMD47CkBAIC02MTMsNiArNjkzLDM2IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCWhzdXNiOiB1c2JAZTY1OTAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdXNiaHMtcjhhNzc5MSI7CisJCXJlZyA9IDwwIDB4ZTY1OTAwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8MCAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19IU1VTQj47CisJCXJlbmVzYXMsYnVzd2FpdCA9IDw0PjsKKwkJcGh5cyA9IDwmdXNiMCAxPjsKKwkJcGh5LW5hbWVzID0gInVzYiI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVzYnBoeTogdXNiLXBoeUBlNjU5MDEwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx1c2ItcGh5LXI4YTc3OTEiOworCQlyZWcgPSA8MCAweGU2NTkwMTAwIDAgMHgxMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNsb2NrcyA9IDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19IU1VTQj47CisJCWNsb2NrLW5hbWVzID0gInVzYmhzIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQl1c2IwOiB1c2ItY2hhbm5lbEAwIHsKKwkJCXJlZyA9IDwwPjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCX07CisJCXVzYjI6IHVzYi1jaGFubmVsQDIgeworCQkJcmVnID0gPDI+OworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJfTsKKwl9OworCiAJdmluMDogdmlkZW9AZTZlZjAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsdmluLXI4YTc3OTEiOwogCQljbG9ja3MgPSA8Jm1zdHA4X2Nsa3MgUjhBNzc5MV9DTEtfVklOMD47CkBAIC02MzcsNiArNzQ3LDc1IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXZzcDFAZmU5MjgwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdnNwMSI7CisJCXJlZyA9IDwwIDB4ZmU5MjgwMDAgMCAweDgwMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMjY3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc5MV9DTEtfVlNQMV9TPjsKKworCQlyZW5lc2FzLGhhcy1sdXQ7CisJCXJlbmVzYXMsaGFzLXNydTsKKwkJcmVuZXNhcywjcnBmID0gPDU+OworCQlyZW5lc2FzLCN1ZHMgPSA8Mz47CisJCXJlbmVzYXMsI3dwZiA9IDw0PjsKKwl9OworCisJdnNwMUBmZTkzMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx2c3AxIjsKKwkJcmVnID0gPDAgMHhmZTkzMDAwMCAwIDB4ODAwMD47CisJCWludGVycnVwdHMgPSA8MCAyNDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDFfY2xrcyBSOEE3NzkxX0NMS19WU1AxX0RVMD47CisKKwkJcmVuZXNhcyxoYXMtbGlmOworCQlyZW5lc2FzLGhhcy1sdXQ7CisJCXJlbmVzYXMsI3JwZiA9IDw0PjsKKwkJcmVuZXNhcywjdWRzID0gPDE+OworCQlyZW5lc2FzLCN3cGYgPSA8ND47CisJfTsKKworCXZzcDFAZmU5MzgwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdnNwMSI7CisJCXJlZyA9IDwwIDB4ZmU5MzgwMDAgMCAweDgwMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMjQ3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc5MV9DTEtfVlNQMV9EVTE+OworCisJCXJlbmVzYXMsaGFzLWxpZjsKKwkJcmVuZXNhcyxoYXMtbHV0OworCQlyZW5lc2FzLCNycGYgPSA8ND47CisJCXJlbmVzYXMsI3VkcyA9IDwxPjsKKwkJcmVuZXNhcywjd3BmID0gPDQ+OworCX07CisKKwlkdTogZGlzcGxheUBmZWIwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxkdS1yOGE3NzkxIjsKKwkJcmVnID0gPDAgMHhmZWIwMDAwMCAwIDB4NDAwMDA+LAorCQkgICAgICA8MCAweGZlYjkwMDAwIDAgMHgxYz47CisJCXJlZy1uYW1lcyA9ICJkdSIsICJsdmRzLjAiOworCQlpbnRlcnJ1cHRzID0gPDAgMjU2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyNjggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19EVTA+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19EVTE+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19MVkRTMD47CisJCWNsb2NrLW5hbWVzID0gImR1LjAiLCAiZHUuMSIsICJsdmRzLjAiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWR1X291dF9yZ2I6IGVuZHBvaW50IHsKKwkJCQl9OworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCWR1X291dF9sdmRzMDogZW5kcG9pbnQgeworCQkJCX07CisJCQl9OworCQl9OworCX07CisKIAljbG9ja3MgewogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC04ODksMTcgKzEwNjgsMjMgQEAKIAkJbXN0cDFfY2xrczogbXN0cDFfY2xrc0BlNjE1MDEzNCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5MS1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CiAJCQlyZWcgPSA8MCAweGU2MTUwMTM0IDAgND4sIDwwIDB4ZTYxNTAwMzggMCA0PjsKLQkJCWNsb2NrcyA9IDwmbTJfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZyY2xrX2Nsaz4sCi0JCQkJIDwmY3BfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPjsKKwkJCWNsb2NrcyA9IDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8Jm0yX2Nsaz4sIDwmenNfY2xrPiwgPCZwX2Nsaz4sCisJCQkJIDwmemdfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZwX2Nsaz4sCisJCQkJIDwmcF9jbGs+LCA8JnJjbGtfY2xrPiwgPCZjcF9jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwKKwkJCQkgPCZ6c19jbGs+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAotCQkJCVI4QTc3OTFfQ0xLX0pQVSBSOEE3NzkxX0NMS19UTVUxIFI4QTc3OTFfQ0xLX1RNVTMgUjhBNzc5MV9DTEtfVE1VMgotCQkJCVI4QTc3OTFfQ0xLX0NNVDAgUjhBNzc5MV9DTEtfVE1VMCBSOEE3NzkxX0NMS19WU1AxX0RVMQotCQkJCVI4QTc3OTFfQ0xLX1ZTUDFfRFUwIFI4QTc3OTFfQ0xLX1ZTUDFfUworCQkJCVI4QTc3OTFfQ0xLX1ZDUDAgUjhBNzc5MV9DTEtfVlBDMCBSOEE3NzkxX0NMS19KUFUKKwkJCQlSOEE3NzkxX0NMS19TU1AxIFI4QTc3OTFfQ0xLX1RNVTEgUjhBNzc5MV9DTEtfM0RHCisJCQkJUjhBNzc5MV9DTEtfMkRETUFDIFI4QTc3OTFfQ0xLX0ZEUDFfMSBSOEE3NzkxX0NMS19GRFAxXzAKKwkJCQlSOEE3NzkxX0NMS19UTVUzIFI4QTc3OTFfQ0xLX1RNVTIgUjhBNzc5MV9DTEtfQ01UMAorCQkJCVI4QTc3OTFfQ0xLX1RNVTAgUjhBNzc5MV9DTEtfVlNQMV9EVTEgUjhBNzc5MV9DTEtfVlNQMV9EVTAKKwkJCQlSOEE3NzkxX0NMS19WU1AxX1MKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQotCQkJCSJqcHUiLCAidG11MSIsICJ0bXUzIiwgInRtdTIiLCAiY210MCIsICJ0bXUwIiwgInZzcDEtZHUxIiwKLQkJCQkidnNwMS1kdTAiLCAidnNwMS1zeSI7CisJCQkJInZjcDAiLCAidnBjMCIsICJqcHUiLCAic3NwMSIsICJ0bXUxIiwgIjNkZyIsCisJCQkJIjJkZG1hYyIsICJmZHAxLTEiLCAiZmRwMS0wIiwgInRtdTMiLCAidG11MiIsICJjbXQwIiwKKwkJCQkidG11MCIsICJ2c3AxLWR1MSIsICJ2c3AxLWR1MCIsICJ2c3AxLXN5IjsKIAkJfTsKIAkJbXN0cDJfY2xrczogbXN0cDJfY2xrc0BlNjE1MDEzOCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5MS1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CkBAIC05MjMsMjQgKzExMDgsMjggQEAKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkxLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTAxM2MgMCA0PiwgPDAgMHhlNjE1MDA0OCAwIDQ+OwogCQkJY2xvY2tzID0gPCZjcF9jbGs+LCA8JnNkMl9jbGs+LCA8JnNkMV9jbGs+LCA8JmNwZ19jbG9ja3MgUjhBNzc5MV9DTEtfU0QwPiwKLQkJCQkgPCZtbWMwX2Nsaz4sIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JmhwX2Nsaz4sIDwmbXBfY2xrPiwgPCZyY2xrX2Nsaz47CisJCQkJIDwmbW1jMF9jbGs+LCA8JmhwX2Nsaz4sIDwmbXBfY2xrPiwgPCZocF9jbGs+LCA8Jm1wX2Nsaz4sIDwmcmNsa19jbGs+LAorCQkJCSA8JmhwX2Nsaz4sIDwmaHBfY2xrPjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDwKIAkJCQlSOEE3NzkxX0NMS19UUFUwIFI4QTc3OTFfQ0xLX1NESEkyIFI4QTc3OTFfQ0xLX1NESEkxIFI4QTc3OTFfQ0xLX1NESEkwCiAJCQkJUjhBNzc5MV9DTEtfTU1DSUYwIFI4QTc3OTFfQ0xLX0lJQzAgUjhBNzc5MV9DTEtfUENJRUMgUjhBNzc5MV9DTEtfSUlDMQogCQkJCVI4QTc3OTFfQ0xLX1NTVVNCIFI4QTc3OTFfQ0xLX0NNVDEKKwkJCQlSOEE3NzkxX0NMS19VU0JETUFDMCBSOEE3NzkxX0NMS19VU0JETUFDMQogCQkJPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9CiAJCQkJInRwdTAiLCAic2RoaTIiLCAic2RoaTEiLCAic2RoaTAiLAotCQkJCSJtbWNpZjAiLCAiaTJjNyIsICJwY2llYyIsICJpMmM4IiwgInNzdXNiIiwgImNtdDEiOworCQkJCSJtbWNpZjAiLCAiaTJjNyIsICJwY2llYyIsICJpMmM4IiwgInNzdXNiIiwgImNtdDEiLAorCQkJCSJ1c2JkbWFjMCIsICJ1c2JkbWFjMSI7CiAJCX07CiAJCW1zdHA1X2Nsa3M6IG1zdHA1X2Nsa3NAZTYxNTAxNDQgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTEtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDAgMHhlNjE1MDE0NCAwIDQ+LCA8MCAweGU2MTUwMDNjIDAgND47Ci0JCQljbG9ja3MgPSA8JmV4dGFsX2Nsaz4sIDwmcF9jbGs+OworCQkJY2xvY2tzID0gPCZocF9jbGs+LCA8JmhwX2Nsaz4sIDwmZXh0YWxfY2xrPiwgPCZwX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47Ci0JCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8UjhBNzc5MV9DTEtfVEhFUk1BTCBSOEE3NzkxX0NMS19QV00+OwotCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInRoZXJtYWwiLCAicHdtIjsKKwkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDxSOEE3NzkxX0NMS19BVURJT19ETUFDMCBSOEE3NzkxX0NMS19BVURJT19ETUFDMQorCQkJCQkJIFI4QTc3OTFfQ0xLX1RIRVJNQUwgUjhBNzc5MV9DTEtfUFdNPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhdWRtYWMwIiwgImF1ZG1hYzEiLCAidGhlcm1hbCIsICJwd20iOwogCQl9OwogCQltc3RwN19jbGtzOiBtc3RwN19jbGtzQGU2MTUwMTRjIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkxLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKQEAgLTEwODgsNiArMTI3NywxNiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwl4aGNpOiB1c2JAZWUwMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMseGhjaS1yOGE3NzkxIjsKKwkJcmVnID0gPDAgMHhlZTAwMDAwMCAwIDB4YzAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDEwMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTFfQ0xLX1NTVVNCPjsKKwkJcGh5cyA9IDwmdXNiMiAxPjsKKwkJcGh5LW5hbWVzID0gInVzYiI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXBjaTA6IHBjaUBlZTA5MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxwY2ktcjhhNzc5MSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CkBAIC0xMTA2LDYgKzEzMDUsMjAgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwweDAwMDAgMCAwIDEgJmdpYyAwIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkJIDB4MDgwMCAwIDAgMSAmZ2ljIDAgMTA4IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgxMDAwIDAgMCAyICZnaWMgMCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJdXNiQDAsMSB7CisJCQlyZWcgPSA8MHg4MDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNiMCAwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCisJCXVzYkAwLDIgeworCQkJcmVnID0gPDB4MTAwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IwIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CiAJfTsKIAogCXBjaTE6IHBjaUBlZTBkMDAwMCB7CkBAIC0xMTI2LDYgKzEzMzksMjAgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwweDAwMDAgMCAwIDEgJmdpYyAwIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkJIDB4MDgwMCAwIDAgMSAmZ2ljIDAgMTEzIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgxMDAwIDAgMCAyICZnaWMgMCAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJdXNiQDAsMSB7CisJCQlyZWcgPSA8MHg4MDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNiMiAwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCisJCXVzYkAwLDIgeworCQkJcmVnID0gPDB4MTAwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IyIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CiAJfTsKIAogCXBjaWVjOiBwY2llQGZlMDAwMDAwIHsKQEAgLTExNTMsNyArMTM4MCw3IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCXJjYXJfc291bmQ6IHJjYXJfc291bmRAMHhlYzUwMDAwMCB7CisJcmNhcl9zb3VuZDogcmNhcl9zb3VuZEBlYzUwMDAwMCB7CiAJCSNzb3VuZC1kYWktY2VsbHMgPSA8MT47CiAJCWNvbXBhdGlibGUgPSAgInJlbmVzYXMscmNhcl9zb3VuZC1yOGE3NzkxIiwgInJlbmVzYXMscmNhcl9zb3VuZC1nZW4yIiwgInJlbmVzYXMscmNhcl9zb3VuZCI7CiAJCXJlZyA9CTwwIDB4ZWM1MDAwMDAgMCAweDEwMDA+LCAvKiBTQ1UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTQtYWx0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTQtYWx0LmR0cwppbmRleCA3OWQwNmVmMC4uZjJjZjc1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC1hbHQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTQtYWx0LmR0cwpAQCAtMjAsNyArMjAsOCBAQAogCX07CiAKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDMCwzODQwMCBpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKKwkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWYyOwogCX07CiAKIAltZW1vcnlANDAwMDAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC5kdHNpCmluZGV4IGQ0ZThiY2UuLjE5YzlkZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTQuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzk0LmR0c2kKQEAgLTgyLDYgKzgyLDE0IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjctdGltZXIiOworCQlpbnRlcnJ1cHRzID0gPDEgMTMgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPDEgMTQgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPDEgMTEgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPDEgMTAgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPjsKKwl9OworCiAJaXJxYzA6IGludGVycnVwdC1jb250cm9sbGVyQGU2MWMwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlycWMtcjhhNzc5NCIsICJyZW5lc2FzLGlycWMiOwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpAQCAtNDUzLDE2ICs0NjEsMTkgQEAKIAkJbXN0cDFfY2xrczogbXN0cDFfY2xrc0BlNjE1MDEzNCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5NC1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CiAJCQlyZWcgPSA8MCAweGU2MTUwMTM0IDAgND4sIDwwIDB4ZTYxNTAwMzggMCA0PjsKLQkJCWNsb2NrcyA9IDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZwX2Nsaz4sIDwmcmNsa19jbGs+LAotCQkJCSA8JmNwX2Nsaz4sCi0JCQkJIDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz47CisJCQljbG9ja3MgPSA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZwX2Nsaz4sIDwmemdfY2xrPiwgPCZ6c19jbGs+LAorCQkJCSA8JnpzX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZyY2xrX2Nsaz4sIDwmY3BfY2xrPiwKKwkJCQkgPCZ6c19jbGs+LCA8JnpzX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8Ci0JCQkJUjhBNzc5NF9DTEtfVE1VMSBSOEE3Nzk0X0NMS19UTVUzIFI4QTc3OTRfQ0xLX1RNVTIKLQkJCQlSOEE3Nzk0X0NMS19DTVQwIFI4QTc3OTRfQ0xLX1RNVTAKKwkJCQlSOEE3Nzk0X0NMS19WQ1AwIFI4QTc3OTRfQ0xLX1ZQQzAgUjhBNzc5NF9DTEtfVE1VMQorCQkJCVI4QTc3OTRfQ0xLXzNERyBSOEE3Nzk0X0NMS18yRERNQUMgUjhBNzc5NF9DTEtfRkRQMV8wCisJCQkJUjhBNzc5NF9DTEtfVE1VMyBSOEE3Nzk0X0NMS19UTVUyIFI4QTc3OTRfQ0xLX0NNVDAKKwkJCQlSOEE3Nzk0X0NMS19UTVUwIFI4QTc3OTRfQ0xLX1ZTUDFfRFUwIFI4QTc3OTRfQ0xLX1ZTUDFfUwogCQkJPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9Ci0JCQkJInRtdTEiLCAidG11MyIsICJ0bXUyIiwgImNtdDAiLCAidG11MCI7CisJCQkJInZjcDAiLCAidnBjMCIsICJ0bXUxIiwgIjNkZyIsICIyZGRtYWMiLCAiZmRwMS0wIiwKKwkJCQkidG11MyIsICJ0bXUyIiwgImNtdDAiLCAidG11MCIsICJ2c3AxLWR1MCIsICJ2c3BzIjsKIAkJfTsKIAkJbXN0cDJfY2xrczogbXN0cDJfY2xrc0BlNjE1MDEzOCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5NC1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CkBAIC01MDksMTMgKzUyMCwxMyBAQAogCQltc3RwOF9jbGtzOiBtc3RwOF9jbGtzQGU2MTUwOTkwIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3Nzk0LW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTA5OTAgMCA0PiwgPDAgMHhlNjE1MDlhMCAwIDQ+OwotCQkJY2xvY2tzID0gPCZwX2Nsaz47CisJCQljbG9ja3MgPSA8JnpnX2Nsaz4sIDwmemdfY2xrPiwgPCZwX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8Ci0JCQkJUjhBNzc5NF9DTEtfRVRIRVIKKwkJCQlSOEE3Nzk0X0NMS19WSU4xIFI4QTc3OTRfQ0xLX1ZJTjAgUjhBNzc5NF9DTEtfRVRIRVIKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQotCQkJCSJldGhlciI7CisJCQkJInZpbjEiLCAidmluMCIsICJldGhlciI7CiAJCX07CiAJCW1zdHAxMV9jbGtzOiBtc3RwMTFfY2xrc0BlNjE1MDk5YyB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5NC1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3N3h4LWFhMTA0eGQxMi1wYW5lbC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzd4eC1hYTEwNHhkMTItcGFuZWwuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWNiNTBmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzd4eC1hYTEwNHhkMTItcGFuZWwuZHRzaQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29tbW9uIGZpbGUgZm9yIHRoZSBBQTEwNFhEMTIgcGFuZWwgY29ubmVjdGVkIHRvIFJlbmVzYXMgUi1DYXIgYm9hcmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvIHsKKwlwYW5lbCB7CisJCWNvbXBhdGlibGUgPSAibWl0c3ViaXNoaSxhYTEwNHhkMTIiLCAicGFuZWwtZHBpIjsKKworCQl3aWR0aC1tbSA9IDwyMTA+OworCQloZWlnaHQtbW0gPSA8MTU4PjsKKworCQlwYW5lbC10aW1pbmcgeworCQkJLyogMTAyNHg3NjggQDY1SHogKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NTAwMDAwMD47CisJCQloYWN0aXZlID0gPDEwMjQ+OworCQkJdmFjdGl2ZSA9IDw3Njg+OworCQkJaHN5bmMtbGVuID0gPDEzNj47CisJCQloZnJvbnQtcG9yY2ggPSA8MjA+OworCQkJaGJhY2stcG9yY2ggPSA8MTYwPjsKKwkJCXZmcm9udC1wb3JjaCA9IDwzPjsKKwkJCXZiYWNrLXBvcmNoID0gPDI5PjsKKwkJCXZzeW5jLWxlbiA9IDw2PjsKKwkJfTsKKworCQlwb3J0IHsKKwkJCXBhbmVsX2luOiBlbmRwb2ludCB7CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZsdmRzX2Nvbm5lY3Rvcj47CisJCQl9OworCQl9OworCX07Cit9OworCismbHZkc19jb25uZWN0b3IgeworCXJlbW90ZS1lbmRwb2ludCA9IDwmcGFuZWxfaW4+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzA2NmEtYnFjdXJpZTIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1icWN1cmllMi5kdHMKaW5kZXggZDUzNDQ1MS4uYmFmMjFhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1icWN1cmllMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1icWN1cmllMi5kdHMKQEAgLTYwLDYgKzYwLDEwIEBACiAJfTsKIH07CiAKKyZjcHUwIHsKKwljcHUwLXN1cHBseSA9IDwmdmRkX2FybT47Cit9OworCiAmaTJjMSB7CiAJc3RhdHVzID0gIm9rYXkiOwogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1tYXJzYm9hcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1tYXJzYm9hcmQuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzMwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLW1hcnNib2FyZC5kdHMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgUm9tYWluIFBlcmllciA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJyazMwNjZhLmR0c2kiCisKKy8geworCW1vZGVsID0gIk1hcnNCb2FyZCBSSzMwNjYiOworCWNvbXBhdGlibGUgPSAiaGFveXUsbWFyc2JvYXJkLXJrMzA2NiIsICJyb2NrY2hpcCxyazMwNjZhIjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDYwMDAwMDAwIDB4NDAwMDAwMDA+OworCX07CisKKwl2Y2Nfc2QwOiBzZG1tYy1yZWd1bGF0b3IgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInNkbW1jLXN1cHBseSI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BpbzMgNyBHUElPX0FDVElWRV9MT1c+OworCQlzdGFydHVwLWRlbGF5LXVzID0gPDEwMDAwMD47CisJCXZpbi1zdXBwbHkgPSA8JnZjY19pbz47CisJfTsKKworCXZzeXM6IHZzeXMtcmVndWxhdG9yIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJ2c3lzIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwl9OworfTsKKworJmkyYzEgeworCXN0YXR1cyA9ICJva2F5IjsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCXRwczogdHBzQDJkIHsKKwkJcmVnID0gPDB4MmQ+OworCisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW82PjsKKwkJaW50ZXJydXB0cyA9IDw0IElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwkJdmNjMS1zdXBwbHkgPSA8JnZzeXM+OworCQl2Y2MyLXN1cHBseSA9IDwmdnN5cz47CisJCXZjYzMtc3VwcGx5ID0gPCZ2c3lzPjsKKwkJdmNjNC1zdXBwbHkgPSA8JnZzeXM+OworCQl2Y2M1LXN1cHBseSA9IDwmdmNjX2lvPjsKKwkJdmNjNi1zdXBwbHkgPSA8JnZjY19pbz47CisJCXZjYzctc3VwcGx5ID0gPCZ2c3lzPjsKKwkJdmNjaW8tc3VwcGx5ID0gPCZ2c3lzPjsKKworCQlyZWd1bGF0b3JzIHsKKwkJCXZjY19ydGM6IHJlZ3VsYXRvckAwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NfcnRjIjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmNjX2lvOiByZWd1bGF0b3JAMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmNjX2lvIjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmRkX2FybTogcmVndWxhdG9yQDIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9hcm0iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDYwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjY19kZHI6IHJlZ3VsYXRvckAzIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NfZGRyIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw2MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2MxOF9jaWY6IHJlZ3VsYXRvckA1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2MxOF9jaWYiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2ZGRfMTE6IHJlZ3VsYXRvckA2IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfMTEiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2NfMjU6IHJlZ3VsYXRvckA3IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NfMjUiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2NfMTg6IHJlZ3VsYXRvckA4IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NfMTgiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2MyNV9oZG1pOiByZWd1bGF0b3JAOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmNjMjVfaGRtaSI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjY2FfMzM6IHJlZ3VsYXRvckAxMCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmNjYV8zMyI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjY19ybWlpOiByZWd1bGF0b3JAMTEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjY19ybWlpIjsKKwkJCX07CisKKwkJCXZjYzI4X2NpZjogcmVndWxhdG9yQDEyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2MyOF9jaWYiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCQl9OworCX07Cit9OworCisvKiBtdXN0IGJlIGluY2x1ZGVkIGFmdGVyICZ0cHMgZ2V0cyBkZWZpbmVkICovCisjaW5jbHVkZSAidHBzNjU5MTAuZHRzaSIKKworJmVtYWMgeworCXN0YXR1cyA9ICJva2F5IjsKKworCXBoeSA9IDwmcGh5MD47CisJcGh5LXN1cHBseSA9IDwmdmNjX3JtaWk+OworCisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmVtYWNfeGZlcj4sIDwmZW1hY19tZGlvPiwgPCZwaHlfaW50PjsKKworCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJcmVnID0gPDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMT47CisJCWludGVycnVwdHMgPSA8MjYgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwl9OworfTsKKworJnBpbmN0cmwgeworCWxhbjg3MjBhIHsKKwkJcGh5X2ludDogcGh5LWludCB7CisJCQlyb2NrY2hpcCxwaW5zID0gPFJLX0dQSU8xIDI2IFJLX0ZVTkNfR1BJTyAmcGNmZ19wdWxsX25vbmU+OworCQl9OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3ZHQgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLmR0c2kKaW5kZXggYWQ5YzJkYi4uNDFmZmQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzA2NmEuZHRzaQpAQCAtMjYsMTEgKzI2LDIxIEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQllbmFibGUtbWV0aG9kID0gInJvY2tjaGlwLHJrMzA2Ni1zbXAiOwogCi0JCWNwdUAwIHsKKwkJY3B1MDogY3B1QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CiAJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CiAJCQlyZWcgPSA8MHgwPjsKKwkJCW9wZXJhdGluZy1wb2ludHMgPSA8CisJCQkJLyoga0h6ICAgIHVWICovCisJCQkJMTAwODAwMCAxMDc1MDAwCisJCQkJIDgxNjAwMCAxMDI1MDAwCisJCQkJIDYwMDAwMCAxMDI1MDAwCisJCQkJIDUwNDAwMCAxMDAwMDAwCisJCQkJIDMxMjAwMCAgOTc1MDAwCisJCQk+OworCQkJY2xvY2stbGF0ZW5jeSA9IDw0MDAwMD47CisJCQljbG9ja3MgPSA8JmNydSBBUk1DTEs+OwogCQl9OwogCQljcHVAMSB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwpAQCAtNTMsNiArNjMsNTEgQEAKIAkJfTsKIAl9OwogCisJaTJzMDogaTJzQDEwMTE4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwNjYtaTJzIjsKKwkJcmVnID0gPDB4MTAxMTgwMDAgMHgyMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDMxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmaTJzMF9idXM+OworCQlkbWFzID0gPCZkbWFjMV9zIDQ+LCA8JmRtYWMxX3MgNT47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCWNsb2NrLW5hbWVzID0gImkyc19oY2xrIiwgImkyc19jbGsiOworCQljbG9ja3MgPSA8JmNydSBIQ0xLX0kyUzA+LCA8JmNydSBTQ0xLX0kyUzA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpMnMxOiBpMnNAMTAxMWEwMDAgeworCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzA2Ni1pMnMiOworCQlyZWcgPSA8MHgxMDExYTAwMCAweDIwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZpMnMxX2J1cz47CisJCWRtYXMgPSA8JmRtYWMxX3MgNj4sIDwmZG1hYzFfcyA3PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJY2xvY2stbmFtZXMgPSAiaTJzX2hjbGsiLCAiaTJzX2NsayI7CisJCWNsb2NrcyA9IDwmY3J1IEhDTEtfSTJTMT4sIDwmY3J1IFNDTEtfSTJTMT47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWkyczI6IGkyc0AxMDExYzAwMCB7CisJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2LWkycyI7CisJCXJlZyA9IDwweDEwMTFjMDAwIDB4MjAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmkyczJfYnVzPjsKKwkJZG1hcyA9IDwmZG1hYzFfcyA5PiwgPCZkbWFjMV9zIDEwPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJY2xvY2stbmFtZXMgPSAiaTJzX2hjbGsiLCAiaTJzX2NsayI7CisJCWNsb2NrcyA9IDwmY3J1IEhDTEtfSTJTMj4sIDwmY3J1IFNDTEtfSTJTMj47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCWNydTogY2xvY2stY29udHJvbGxlckAyMDAwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2YS1jcnUiOwogCQlyZWcgPSA8MHgyMDAwMDAwMCAweDEwMDA+OwpAQCAtMTc5LDYgKzIzNCwyNCBAQAogCQkJYmlhcy1kaXNhYmxlOwogCQl9OwogCisJCWVtYWMgeworCQkJZW1hY194ZmVyOiBlbWFjLXhmZXIgeworCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzEgMTYgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIG1hY19jbGsgKi8KKwkJCQkJCTxSS19HUElPMSAxNyBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPiwgLyogdHhfZW4gKi8KKwkJCQkJCTxSS19HUElPMSAxOCBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPiwgLyogdHhkMSAqLworCQkJCQkJPFJLX0dQSU8xIDE5IFJLX0ZVTkNfMiAmcGNmZ19wdWxsX25vbmU+LCAvKiB0eGQwICovCisJCQkJCQk8UktfR1BJTzEgMjAgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIHJ4X2VyciAqLworCQkJCQkJPFJLX0dQSU8xIDIxIFJLX0ZVTkNfMiAmcGNmZ19wdWxsX25vbmU+LCAvKiBjcnNfZHZhbGlkICovCisJCQkJCQk8UktfR1BJTzEgMjIgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIHJ4ZDEgKi8KKwkJCQkJCTxSS19HUElPMSAyMyBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPjsgLyogcnhkMCAqLworCQkJfTsKKworCQkJZW1hY19tZGlvOiBlbWFjLW1kaW8geworCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzEgMjQgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIG1hY19tZCAqLworCQkJCQkJPFJLX0dQSU8xIDI1IFJLX0ZVTkNfMiAmcGNmZ19wdWxsX25vbmU+OyAvKiBtYWNfbWRjbGsgKi8KKwkJCX07CisJCX07CisKIAkJZW1tYyB7CiAJCQllbW1jX2NsazogZW1tYy1jbGsgewogCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzMgMzEgUktfRlVOQ18yICZwY2ZnX3B1bGxfZGVmYXVsdD47CkBAIC00MDUsNiArNDc4LDQyIEBACiAJCQkJCQk8UktfR1BJTzMgMjAgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD47CiAJCQl9OwogCQl9OworCisJCWkyczAgeworCQkJaTJzMF9idXM6IGkyczAtYnVzIHsKKwkJCQlyb2NrY2hpcCxwaW5zID0gPFJLX0dQSU8wIDcgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgOCBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCA5IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDEwIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDExIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDEyIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDEzIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDE0IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDE1IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+OworCQkJfTsKKwkJfTsKKworCQlpMnMxIHsKKwkJCWkyczFfYnVzOiBpMnMxLWJ1cyB7CisJCQkJcm9ja2NoaXAscGlucyA9IDxSS19HUElPMCAxNiBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAxNyBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAxOCBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAxOSBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAyMCBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAyMSBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PjsKKwkJCX07CisJCX07CisKKwkJaTJzMiB7CisJCQlpMnMyX2J1czogaTJzMi1idXMgeworCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzAgMjQgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjUgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjYgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjcgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjggUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjkgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD47CisJCQl9OworCQl9OwogCX07CiB9OwogCkBAIC00OTYsMyArNjA1LDcgQEAKICZ3ZHQgewogCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2LXdkdCIsICJzbnBzLGR3LXdkdCI7CiB9OworCismZW1hYyB7CisJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwNjYtZW1hYyI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LXJhZHhhcm9jay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cwppbmRleCAxNTkxMGM5Li45YTA5NTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cwpAQCAtNDMsMTYgKzQzLDE5IEBACiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIAogCQlncmVlbiB7CisJCQlsYWJlbCA9ICJyb2NrOmdyZWVuOnVzZXIxIjsKIAkJCWdwaW9zID0gPCZncGlvMCAxMiBHUElPX0FDVElWRV9MT1c+OwogCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwogCQl9OwogCi0JCXllbGxvdyB7CisJCWJsdWUgeworCQkJbGFiZWwgPSAicm9jazpibHVlOnVzZXIyIjsKIAkJCWdwaW9zID0gPCZncGlvMCAxNCBHUElPX0FDVElWRV9MT1c+OwogCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwogCQl9OwogCiAJCXNsZWVwIHsKKwkJCWxhYmVsID0gInJvY2s6cmVkOnBvd2VyIjsKIAkJCWdwaW9zID0gPCZncGlvMCAxNSAwPjsKIAkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKIAkJfTsKQEAgLTExOCw2ICsxMjEsMTAgQEAKIAl9OwogfTsKIAorJmNwdTAgeworCWNwdTAtc3VwcGx5ID0gPCZ2ZGRfYXJtPjsKK307CisKICZpMmMxIHsKIAlzdGF0dXMgPSAib2theSI7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CkBAIC0xNTksNyArMTY2LDcgQEAKIAkJCXZkZF9hcm06IFJFRzMgewogCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9BUk0iOwogCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg3NTAwMD47Ci0JCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CiAJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKIAkJCX07CiAKQEAgLTIzOSw2ICsyNDYsMTggQEAKIAlkaXNhYmxlLXdwOwogfTsKIAorJnB3bTEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwd20yIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcHdtMyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnBpbmN0cmwgewogCXBjZmdfb3V0cHV0X2xvdzogcGNmZy1vdXRwdXQtbG93IHsKIAkJb3V0cHV0LWxvdzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzE4OC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LmR0c2kKaW5kZXggZGRhYWRhNy4uMWQ0ZDc5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LmR0c2kKQEAgLTI2LDExICsyNiwyNCBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJZW5hYmxlLW1ldGhvZCA9ICJyb2NrY2hpcCxyazMwNjYtc21wIjsKIAotCQljcHVAMCB7CisJCWNwdTA6IGNwdUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOwogCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwogCQkJcmVnID0gPDB4MD47CisJCQlvcGVyYXRpbmctcG9pbnRzID0gPAorCQkJCS8qIGtIeiAgICB1ViAqLworCQkJCTE2MDgwMDAgMTM1MDAwMAorCQkJCTE0MTYwMDAgMTI1MDAwMAorCQkJCTEyMDAwMDAgMTE1MDAwMAorCQkJCTEwMDgwMDAgMTA3NTAwMAorCQkJCSA4MTYwMDAgIDk3NTAwMAorCQkJCSA2MDAwMDAgIDk1MDAwMAorCQkJCSA1MDQwMDAgIDkyNTAwMAorCQkJCSAzMTIwMDAgIDg3NTAwMAorCQkJPjsKKwkJCWNsb2NrLWxhdGVuY3kgPSA8NDAwMDA+OworCQkJY2xvY2tzID0gPCZjcnUgQVJNQ0xLPjsKIAkJfTsKIAkJY3B1QDEgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKQEAgLTY1LDYgKzc4LDIxIEBACiAJCX07CiAJfTsKIAorCWkyczA6IGkyc0AxMDExYTAwMCB7CisJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMTg4LWkycyIsICJyb2NrY2hpcCxyazMwNjYtaTJzIjsKKwkJcmVnID0gPDB4MTAxMWEwMDAgMHgyMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDMyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmaTJzMF9idXM+OworCQlkbWFzID0gPCZkbWFjMV9zIDY+LCA8JmRtYWMxX3MgNz47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCWNsb2NrLW5hbWVzID0gImkyc19oY2xrIiwgImkyc19jbGsiOworCQljbG9ja3MgPSA8JmNydSBIQ0xLX0kyUzA+LCA8JmNydSBTQ0xLX0kyUzA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAljcnU6IGNsb2NrLWNvbnRyb2xsZXJAMjAwMDAwMDAgewogCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzE4OC1jcnUiOwogCQlyZWcgPSA8MHgyMDAwMDAwMCAweDEwMDA+OwpAQCAtODMsNyArMTExLDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCXJhbmdlczsKIAotCQlncGlvMDogZ3BpbzBAMHgyMDAwYTAwMCB7CisJCWdwaW8wOiBncGlvMEAyMDAwYTAwMCB7CiAJCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzE4OC1ncGlvLWJhbmswIjsKIAkJCXJlZyA9IDwweDIwMDBhMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTk2LDcgKzEyNCw3IEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwaW8xOiBncGlvMUAweDIwMDNjMDAwIHsKKwkJZ3BpbzE6IGdwaW8xQDIwMDNjMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAsZ3Bpby1iYW5rIjsKIAkJCXJlZyA9IDwweDIwMDNjMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTM5NSw2ICs0MjMsMTcgQEAKIAkJCQkJCTxSS19HUElPMyAyMCBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPjsKIAkJCX07CiAJCX07CisKKwkJaTJzMCB7CisJCQlpMnMwX2J1czogaTJzMC1idXMgeworCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzEgMTYgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMTcgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMTggUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMTkgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMjAgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMjEgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT47CisJCQl9OworCQl9OwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLXJrODA4LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmItcms4MDguZHRzCmluZGV4IGZmNTIyZjguLmQ4Yzc3NWU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLXJrODA4LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLXJrODA4LmR0cwpAQCAtMTcsNiArMTcsMTAgQEAKIAljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1ldmItcms4MDgiLCAicm9ja2NoaXAscmszMjg4IjsKIH07CiAKKyZjcHUwIHsKKwljcHUwLXN1cHBseSA9IDwmdmRkX2NwdT47Cit9OworCiAmaTJjMCB7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJc3RhdHVzID0gIm9rYXkiOwpAQCAtNDQsNyArNDgsNyBAQAogCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzUwMDAwPjsKLQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKIAkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfYXJtIjsKIAkJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmIuZHRzaQppbmRleCBjYjgzY2VhLi4zZTA2N2RkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi5kdHNpCkBAIC0xNDgsNiArMTQ4LDEyIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnRzYWRjIHsKKwlyb2NrY2hpcCxody10c2h1dC1tb2RlID0gPDA+OyAvKiB0c2h1dCBtb2RlIDA6Q1JVIDE6R1BJTyAqLworCXJvY2tjaGlwLGh3LXRzaHV0LXBvbGFyaXR5ID0gPDA+OyAvKiB0c2h1dCBwb2xhcml0eSAwOkxPVyAxOkhJR0ggKi8KKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmcGluY3RybCB7CiAJYmFja2xpZ2h0IHsKIAkJYmxfZW46IGJsLWVuIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC10aGVybWFsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtdGhlcm1hbC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OTUyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtdGhlcm1hbC5kdHNpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIFJLMzI4OCBTb0MgdGhlcm1hbAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLiwgTHRkCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3RoZXJtYWwvdGhlcm1hbC5oPgorCityZXNlcnZlX3RoZXJtYWw6IHJlc2VydmVfdGhlcm1hbCB7CisJcG9sbGluZy1kZWxheS1wYXNzaXZlID0gPDEwMDA+OyAvKiBtaWxsaXNlY29uZHMgKi8KKwlwb2xsaW5nLWRlbGF5ID0gPDUwMDA+OyAvKiBtaWxsaXNlY29uZHMgKi8KKworCXRoZXJtYWwtc2Vuc29ycyA9IDwmdHNhZGMgMD47Cit9OworCitjcHVfdGhlcm1hbDogY3B1X3RoZXJtYWwgeworCXBvbGxpbmctZGVsYXktcGFzc2l2ZSA9IDwxMDAwPjsgLyogbWlsbGlzZWNvbmRzICovCisJcG9sbGluZy1kZWxheSA9IDw1MDAwPjsgLyogbWlsbGlzZWNvbmRzICovCisKKwl0aGVybWFsLXNlbnNvcnMgPSA8JnRzYWRjIDE+OworCisJdHJpcHMgeworCQljcHVfYWxlcnQwOiBjcHVfYWxlcnQwIHsKKwkJCXRlbXBlcmF0dXJlID0gPDcwMDAwPjsgLyogbWlsbGljZWxzaXVzICovCisJCQloeXN0ZXJlc2lzID0gPDIwMDA+OyAvKiBtaWxsaWNlbHNpdXMgKi8KKwkJCXR5cGUgPSAicGFzc2l2ZSI7CisJCX07CisJCWNwdV9jcml0OiBjcHVfY3JpdCB7CisJCQl0ZW1wZXJhdHVyZSA9IDw5MDAwMD47IC8qIG1pbGxpY2Vsc2l1cyAqLworCQkJaHlzdGVyZXNpcyA9IDwyMDAwPjsgLyogbWlsbGljZWxzaXVzICovCisJCQl0eXBlID0gImNyaXRpY2FsIjsKKwkJfTsKKwl9OworCisJY29vbGluZy1tYXBzIHsKKwkJbWFwMCB7CisJCQl0cmlwID0gPCZjcHVfYWxlcnQwPjsKKwkJCWNvb2xpbmctZGV2aWNlID0KKwkJCQk8JmNwdTAgVEhFUk1BTF9OT19MSU1JVCBUSEVSTUFMX05PX0xJTUlUPjsKKwkJfTsKKwl9OworfTsKKworZ3B1X3RoZXJtYWw6IGdwdV90aGVybWFsIHsKKwlwb2xsaW5nLWRlbGF5LXBhc3NpdmUgPSA8MTAwMD47IC8qIG1pbGxpc2Vjb25kcyAqLworCXBvbGxpbmctZGVsYXkgPSA8NTAwMD47IC8qIG1pbGxpc2Vjb25kcyAqLworCisJdGhlcm1hbC1zZW5zb3JzID0gPCZ0c2FkYyAyPjsKKworCXRyaXBzIHsKKwkJZ3B1X2FsZXJ0MDogZ3B1X2FsZXJ0MCB7CisJCQl0ZW1wZXJhdHVyZSA9IDw3MDAwMD47IC8qIG1pbGxpY2Vsc2l1cyAqLworCQkJaHlzdGVyZXNpcyA9IDwyMDAwPjsgLyogbWlsbGljZWxzaXVzICovCisJCQl0eXBlID0gInBhc3NpdmUiOworCQl9OworCQlncHVfY3JpdDogZ3B1X2NyaXQgeworCQkJdGVtcGVyYXR1cmUgPSA8OTAwMDA+OyAvKiBtaWxsaWNlbHNpdXMgKi8KKwkJCWh5c3RlcmVzaXMgPSA8MjAwMD47IC8qIG1pbGxpY2Vsc2l1cyAqLworCQkJdHlwZSA9ICJjcml0aWNhbCI7CisJCX07CisJfTsKKworCWNvb2xpbmctbWFwcyB7CisJCW1hcDAgeworCQkJdHJpcCA9IDwmZ3B1X2FsZXJ0MD47CisJCQljb29saW5nLWRldmljZSA9CisJCQkJPCZjcHUwIFRIRVJNQUxfTk9fTElNSVQgVEhFUk1BTF9OT19MSU1JVD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC5kdHNpCmluZGV4IDg3NGU2NmQuLmZkMTlmMDA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaQpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waW5jdHJsL3JvY2tjaGlwLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svcmszMjg4LWNydS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3RoZXJtYWwvdGhlcm1hbC5oPgogI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCiAKIC8gewpAQCAtNDYsMjYgKzQ3LDUwIEBACiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJZW5hYmxlLW1ldGhvZCA9ICJyb2NrY2hpcCxyazMwNjYtc21wIjsKKwkJcm9ja2NoaXAscG11ID0gPCZwbXU+OwogCi0JCWNwdUA1MDAgeworCQljcHUwOiBjcHVANTAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTEyIjsKIAkJCXJlZyA9IDwweDUwMD47CisJCQlyZXNldHMgPSA8JmNydSBTUlNUX0NPUkUwPjsKKwkJCW9wZXJhdGluZy1wb2ludHMgPSA8CisJCQkJLyogS0h6ICAgIHVWICovCisJCQkJMTYwODAwMCAxMzUwMDAwCisJCQkJMTUxMjAwMCAxMzAwMDAwCisJCQkJMTQxNjAwMCAxMjAwMDAwCisJCQkJMTIwMDAwMCAxMTAwMDAwCisJCQkJMTAwODAwMCAxMDUwMDAwCisJCQkJIDgxNjAwMCAxMDAwMDAwCisJCQkJIDY5NjAwMCAgOTUwMDAwCisJCQkJIDYwMDAwMCAgOTAwMDAwCisJCQkJIDQwODAwMCAgOTAwMDAwCisJCQkJIDMxMjAwMCAgOTAwMDAwCisJCQkJIDIxNjAwMCAgOTAwMDAwCisJCQkJIDEyNjAwMCAgOTAwMDAwCisJCQk+OworCQkJI2Nvb2xpbmctY2VsbHMgPSA8Mj47IC8qIG1pbiBmb2xsb3dlZCBieSBtYXggKi8KKwkJCWNsb2NrLWxhdGVuY3kgPSA8NDAwMDA+OworCQkJY2xvY2tzID0gPCZjcnUgQVJNQ0xLPjsKIAkJfTsKIAkJY3B1QDUwMSB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExMiI7CiAJCQlyZWcgPSA8MHg1MDE+OworCQkJcmVzZXRzID0gPCZjcnUgU1JTVF9DT1JFMT47CiAJCX07CiAJCWNwdUA1MDIgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTIiOwogCQkJcmVnID0gPDB4NTAyPjsKKwkJCXJlc2V0cyA9IDwmY3J1IFNSU1RfQ09SRTI+OwogCQl9OwogCQljcHVANTAzIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTEyIjsKIAkJCXJlZyA9IDwweDUwMz47CisJCQlyZXNldHMgPSA8JmNydSBTUlNUX0NPUkUzPjsKIAkJfTsKIAl9OwogCkBAIC0xMTYsNiArMTQxLDcgQEAKIAogCXRpbWVyIHsKIAkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjctdGltZXIiOworCQlhcm0sY3B1LXJlZ2lzdGVycy1ub3QtZnctY29uZmlndXJlZDsKIAkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIChHSUNfQ1BVX01BU0tfU0lNUExFKDQpIHwgSVJRX1RZUEVfTEVWRUxfSElHSCk+LAogCQkJICAgICA8R0lDX1BQSSAxNCAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0hJR0gpPiwKIAkJCSAgICAgPEdJQ19QUEkgMTEgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKT4sCkBAIC0xNzcsNiArMjAzLDggQEAKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtc3BpIiwgInJvY2tjaGlwLHJrMzA2Ni1zcGkiOwogCQljbG9ja3MgPSA8JmNydSBTQ0xLX1NQSTA+LCA8JmNydSBQQ0xLX1NQSTA+OwogCQljbG9jay1uYW1lcyA9ICJzcGljbGsiLCAiYXBiX3BjbGsiOworCQlkbWFzID0gPCZkbWFjX3BlcmkgMTE+LCA8JmRtYWNfcGVyaSAxMj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCWludGVycnVwdHMgPSA8R0lDX1NQSSA0NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZzcGkwX2NsayAmc3BpMF90eCAmc3BpMF9yeCAmc3BpMF9jczA+OwpAQCAtMTkwLDYgKzIxOCw4IEBACiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LXNwaSIsICJyb2NrY2hpcCxyazMwNjYtc3BpIjsKIAkJY2xvY2tzID0gPCZjcnUgU0NMS19TUEkxPiwgPCZjcnUgUENMS19TUEkxPjsKIAkJY2xvY2stbmFtZXMgPSAic3BpY2xrIiwgImFwYl9wY2xrIjsKKwkJZG1hcyA9IDwmZG1hY19wZXJpIDEzPiwgPCZkbWFjX3BlcmkgMTQ+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNDUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmc3BpMV9jbGsgJnNwaTFfdHggJnNwaTFfcnggJnNwaTFfY3MwPjsKQEAgLTIwMyw2ICsyMzMsOCBAQAogCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1zcGkiLCAicm9ja2NoaXAscmszMDY2LXNwaSI7CiAJCWNsb2NrcyA9IDwmY3J1IFNDTEtfU1BJMj4sIDwmY3J1IFBDTEtfU1BJMj47CiAJCWNsb2NrLW5hbWVzID0gInNwaWNsayIsICJhcGJfcGNsayI7CisJCWRtYXMgPSA8JmRtYWNfcGVyaSAxNT4sIDwmZG1hY19wZXJpIDE2PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDQ2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JnNwaTJfY2xrICZzcGkyX3R4ICZzcGkyX3J4ICZzcGkyX2NzMD47CkBAIC0zMjksNiArMzYxLDI1IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXRoZXJtYWwtem9uZXMgeworCQkjaW5jbHVkZSAicmszMjg4LXRoZXJtYWwuZHRzaSIKKwl9OworCisJdHNhZGM6IHRzYWRjQGZmMjgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtdHNhZGMiOworCQlyZWcgPSA8MHhmZjI4MDAwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZjcnUgU0NMS19UU0FEQz4sIDwmY3J1IFBDTEtfVFNBREM+OworCQljbG9jay1uYW1lcyA9ICJ0c2FkYyIsICJhcGJfcGNsayI7CisJCXJlc2V0cyA9IDwmY3J1IFNSU1RfVFNBREM+OworCQlyZXNldC1uYW1lcyA9ICJ0c2FkYy1hcGIiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8Jm90cF9vdXQ+OworCQkjdGhlcm1hbC1zZW5zb3ItY2VsbHMgPSA8MT47CisJCXJvY2tjaGlwLGh3LXRzaHV0LXRlbXAgPSA8OTUwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAl1c2JfaG9zdDBfZWhjaTogdXNiQGZmNTAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJnZW5lcmljLWVoY2kiOwogCQlyZWcgPSA8MHhmZjUwMDAwMCAweDEwMD47CkBAIC00MzksNiArNDkwLDE4IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCWJ1c19pbnRtZW1AZmY3MDAwMDAgeworCQljb21wYXRpYmxlID0gIm1taW8tc3JhbSI7CisJCXJlZyA9IDwweGZmNzAwMDAwIDB4MTgwMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlcyA9IDwwIDB4ZmY3MDAwMDAgMHgxODAwMD47CisJCXNtcC1zcmFtQDAgeworCQkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwNjYtc21wLXNyYW0iOworCQkJcmVnID0gPDB4MDAgMHgxMD47CisJCX07CisJfTsKKwogCXBtdTogcG93ZXItbWFuYWdlbWVudEBmZjczMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LXBtdSIsICJzeXNjb24iOwogCQlyZWcgPSA8MHhmZjczMDAwMCAweDEwMD47CkBAIC00NTUsNiArNTE4LDE2IEBACiAJCXJvY2tjaGlwLGdyZiA9IDwmZ3JmPjsKIAkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY3J1IFBMTF9HUExMPiwgPCZjcnUgUExMX0NQTEw+LAorCQkJCSAgPCZjcnUgUExMX05QTEw+LCA8JmNydSBBQ0xLX0NQVT4sCisJCQkJICA8JmNydSBIQ0xLX0NQVT4sIDwmY3J1IFBDTEtfQ1BVPiwKKwkJCQkgIDwmY3J1IEFDTEtfUEVSST4sIDwmY3J1IEhDTEtfUEVSST4sCisJCQkJICA8JmNydSBQQ0xLX1BFUkk+OworCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDw1OTQwMDAwMDA+LCA8NDAwMDAwMDAwPiwKKwkJCQkgICAgICAgPDUwMDAwMDAwMD4sIDwzMDAwMDAwMDA+LAorCQkJCSAgICAgICA8MTUwMDAwMDAwPiwgPDc1MDAwMDAwPiwKKwkJCQkgICAgICAgPDMwMDAwMDAwMD4sIDwxNTAwMDAwMDA+LAorCQkJCSAgICAgICA8NzUwMDAwMDA+OwogCX07CiAKIAlncmY6IHN5c2NvbkBmZjc3MDAwMCB7CkBAIC00ODQsNiArNTU3LDI0IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXZvcGJfbW11OiBpb21tdUBmZjkzMDMwMCB7CisJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAsaW9tbXUiOworCQlyZWcgPSA8MHhmZjkzMDMwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gInZvcGJfbW11IjsKKwkJI2lvbW11LWNlbGxzID0gPDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl2b3BsX21tdTogaW9tbXVAZmY5NDAzMDAgeworCQljb21wYXRpYmxlID0gInJvY2tjaGlwLGlvbW11IjsKKwkJcmVnID0gPDB4ZmY5NDAzMDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWludGVycnVwdC1uYW1lcyA9ICJ2b3BsX21tdSI7CisJCSNpb21tdS1jZWxscyA9IDwwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBmZmMwMTAwMCB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGdpYy00MDAiOwogCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTk0OCw2ICsxMDM5LDEyIEBACiAJCQl9OwogCQl9OwogCisJCXRzYWRjIHsKKwkJCW90cF9vdXQ6IG90cC1vdXQgeworCQkJCXJvY2tjaGlwLHBpbnMgPSA8MCAxMCBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPjsKKwkJCX07CisJCX07CisKIAkJcHdtMCB7CiAJCQlwd20wX3BpbjogcHdtMC1waW4gewogCQkJCXJvY2tjaGlwLHBpbnMgPSA8NyAwIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX25vbmU+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszeHh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yazN4eHguZHRzaQppbmRleCA0OTk0NjhkLi5jNTRhOTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazN4eHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazN4eHguZHRzaQpAQCAtMjksNiArMjksMTAgQEAKIAkJbXNoYzAgPSAmZW1tYzsKIAkJbXNoYzEgPSAmbW1jMDsKIAkJbXNoYzIgPSAmbW1jMTsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0MTsKKwkJc2VyaWFsMiA9ICZ1YXJ0MjsKKwkJc2VyaWFsMyA9ICZ1YXJ0MzsKIAkJc3BpMCA9ICZzcGkwOwogCQlzcGkxID0gJnNwaTE7CiAJfTsKQEAgLTE3MywxMCArMTc3LDkgQEAKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazI5MjgtZHctbXNoYyI7CiAJCXJlZyA9IDwweDEwMjE0MDAwIDB4MTAwMD47CiAJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQogCQljbG9ja3MgPSA8JmNydSBIQ0xLX1NETU1DPiwgPCZjcnUgU0NMS19TRE1NQz47CiAJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOwotCisJCWZpZm8tZGVwdGggPSA8MjU2PjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0xODQsMTAgKzE4Nyw5IEBACiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmsyOTI4LWR3LW1zaGMiOwogCQlyZWcgPSA8MHgxMDIxODAwMCAweDEwMDA+OwogCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0KIAkJY2xvY2tzID0gPCZjcnUgSENMS19TRElPPiwgPCZjcnUgU0NMS19TRElPPjsKIAkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7Ci0KKwkJZmlmby1kZXB0aCA9IDwyNTY+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTE5NSwxMCArMTk3LDkgQEAKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazI5MjgtZHctbXNoYyI7CiAJCXJlZyA9IDwweDEwMjFjMDAwIDB4MTAwMD47CiAJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQogCQljbG9ja3MgPSA8JmNydSBIQ0xLX0VNTUM+LCA8JmNydSBTQ0xLX0VNTUM+OwogCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKLQorCQlmaWZvLWRlcHRoID0gPDI1Nj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzY3LDYgKzM2OCw4IEBACiAJCXJlZyA9IDwweDIwMDcwMDAwIDB4MTAwMD47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJZG1hcyA9IDwmZG1hYzIgMTA+LCA8JmRtYWMyIDExPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zNzgsNiArMzgxLDggQEAKIAkJcmVnID0gPDB4MjAwNzQwMDAgMHgxMDAwPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OworCQlkbWFzID0gPCZkbWFjMiAxMj4sIDwmZG1hYzIgMTM+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvczNjNjQxMC1taW5pNjQxMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zM2M2NDEwLW1pbmk2NDEwLmR0cwppbmRleCA1N2UwMGY5Li5hMjVkZWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zM2M2NDEwLW1pbmk2NDEwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zM2M2NDEwLW1pbmk2NDEwLmR0cwpAQCAtMTk4LDEwICsxOTgsNiBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKLSZwd20gewotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KICZwaW5jdHJsMCB7CiAJZ3Bpb19sZWRzOiBncGlvLWxlZHMgewogCQlzYW1zdW5nLHBpbnMgPSAiZ3BrLTQiLCAiZ3BrLTUiLCAiZ3BrLTYiLCAiZ3BrLTciOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvczNjNjR4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvczNjNjR4eC5kdHNpCmluZGV4IGZmNWJkYWEuLjBjY2I0MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3MzYzY0eHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zM2M2NHh4LmR0c2kKQEAgLTE3Miw3ICsxNzIsNiBAQAogCQkJY2xvY2tzID0gPCZjbG9ja3MgUENMS19QV00+OwogCQkJc2Ftc3VuZyxwd20tb3V0cHV0cyA9IDwwPiwgPDE+OwogCQkJI3B3bS1jZWxscyA9IDwzPjsKLQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKIAkJcGluY3RybDA6IHBpbmN0cmxAN2YwMDgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkMzEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDMxLmR0c2kKaW5kZXggNzk5N2RjOS4uODgzODc4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkMzEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzMS5kdHNpCkBAIC0xMiw1ICsxMiw1IEBACiAjaW5jbHVkZSAic2FtYTVkM191YXJ0LmR0c2kiCiAKIC8gewotCWNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYWQzMSIsICJhdG1lbCxzYW1hNWQzIiwgImF0bWVsLHNhbWE1IjsKKwljb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDMxIiwgImF0bWVsLHNhbWE1ZDMiLCAiYXRtZWwsc2FtYTUiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDMzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzMy5kdHNpCmluZGV4IDM5ZjgzMjIuLjRiNDQzNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDMzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkMzMuZHRzaQpAQCAtMTAsNSArMTAsNSBAQAogI2luY2x1ZGUgInNhbWE1ZDNfZ21hYy5kdHNpIgogCiAvIHsKLQljb21wYXRpYmxlID0gImF0bWVsLHNhbWFkMzMiLCAiYXRtZWwsc2FtYTVkMyIsICJhdG1lbCxzYW1hNSI7CisJY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQzMyIsICJhdG1lbCxzYW1hNWQzIiwgImF0bWVsLHNhbWE1IjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzNC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkMzQuZHRzaQppbmRleCA4OWNkYTJjLi5hYTAxNTczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzNC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDM0LmR0c2kKQEAgLTEyLDUgKzEyLDUgQEAKICNpbmNsdWRlICJzYW1hNWQzX21jaTIuZHRzaSIKIAogLyB7Ci0JY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hZDM0IiwgImF0bWVsLHNhbWE1ZDMiLCAiYXRtZWwsc2FtYTUiOworCWNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkMzQiLCAiYXRtZWwsc2FtYTVkMyIsICJhdG1lbCxzYW1hNSI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkMzUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDM1LmR0c2kKaW5kZXggZDIwY2Q3MS4uMTZjMzlmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkMzUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzNS5kdHNpCkBAIC0xNCw1ICsxNCw1IEBACiAjaW5jbHVkZSAic2FtYTVkM190Y2IxLmR0c2kiCiAKIC8gewotCWNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYWQzNSIsICJhdG1lbCxzYW1hNWQzIiwgImF0bWVsLHNhbWE1IjsKKwljb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDM1IiwgImF0bWVsLHNhbWE1ZDMiLCAiYXRtZWwsc2FtYTUiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDM2LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzNi5kdHNpCmluZGV4IGRiNThjYWQuLmU4NTEzOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDM2LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkMzYuZHRzaQpAQCAtMTYsNSArMTYsNSBAQAogI2luY2x1ZGUgInNhbWE1ZDNfdWFydC5kdHNpIgogCiAvIHsKLQljb21wYXRpYmxlID0gImF0bWVsLHNhbWFkMzYiLCAiYXRtZWwsc2FtYTVkMyIsICJhdG1lbCxzYW1hNSI7CisJY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQzNiIsICJhdG1lbCxzYW1hNWQzIiwgImF0bWVsLHNhbWE1IjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzeGNtLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzeGNtLmR0c2kKaW5kZXggOTYyZGMyOC4uY2ZjZDIwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkM3hjbS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDN4Y20uZHRzaQpAQCAtOCw3ICs4LDcgQEAKICAqLwogCiAvIHsKLQljb21wYXRpYmxlID0gImF0bWVsLHNhbWFkM3hjbSIsICJhdG1lbCxzYW1hNWQzIiwgImF0bWVsLHNhbWE1IjsKKwljb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDN4Y20iLCAiYXRtZWwsc2FtYTVkMyIsICJhdG1lbCxzYW1hNSI7CiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCByb290ZnN0eXBlPXViaWZzIHViaS5tdGQ9NSByb290PXViaTA6cm9vdGZzIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NoNzNhMC1rem05Zy1yZWZlcmVuY2UuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2g3M2EwLWt6bTlnLXJlZmVyZW5jZS5kdHMKaW5kZXggMzBlZjk3ZS4uOTM5YmUxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc2g3M2EwLWt6bTlnLXJlZmVyZW5jZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2g3M2EwLWt6bTlnLXJlZmVyZW5jZS5kdHMKQEAgLTQwLDYgKzQwLDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDNCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIGlnbm9yZV9sb2dsZXZlbCBydyI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWZhNDsKIAl9OwogCiAJbWVtb3J5IHsKQEAgLTEwMCwxOSArMTAxLDIzIEBACiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIAkJbGVkMSB7CiAJCQlncGlvcyA9IDwmcGZjIDIwIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsYWJlbCA9ICJMRUQxIjsKIAkJfTsKIAkJbGVkMiB7CiAJCQlncGlvcyA9IDwmcGZjIDIxIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsYWJlbCA9ICJMRUQyIjsKIAkJfTsKIAkJbGVkMyB7CiAJCQlncGlvcyA9IDwmcGZjIDIyIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsYWJlbCA9ICJMRUQzIjsKIAkJfTsKIAkJbGVkNCB7CiAJCQlncGlvcyA9IDwmcGZjIDIzIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsYWJlbCA9ICJMRUQ0IjsKIAkJfTsKIAl9OwogCi0JZ3Bpby1rZXlzIHsKKwlrZXlib2FyZCB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKIAogCQliYWNrLWtleSB7CkBAIC0yNTAsNyArMjU1LDcgQEAKIAkJfTsKIAl9OwogCi0JYWs0NjQ4OiBhazQ2NDhAMHgxMiB7CisJYWs0NjQ4OiBhazQ2NDhAMTIgewogCQkjc291bmQtZGFpLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gImFzYWhpLWthc2VpLGFrNDY0OCI7CiAJCXJlZyA9IDwweDEyPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NoNzNhMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2g3M2EwLmR0c2kKaW5kZXggMDMwYTU5Mi4uZDhkZWY1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc2g3M2EwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2g3M2EwLmR0c2kKQEAgLTEzOCw3ICsxMzgsNyBAQAogCWkyYzA6IGkyY0BlNjgyMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1zaDczYTAiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwweGU2ODIwMDAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE2NyBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDE2OCBJUlFfVFlQRV9MRVZFTF9ISUdICkBAIC0xNTAsNyArMTUwLDcgQEAKIAlpMmMxOiBpMmNAZTY4MjIwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtc2g3M2EwIiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MHhlNjgyMjAwMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCA1MSBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDUyIElSUV9UWVBFX0xFVkVMX0hJR0gKQEAgLTE2Miw3ICsxNjIsNyBAQAogCWkyYzI6IGkyY0BlNjgyNDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1zaDczYTAiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwweGU2ODI0MDAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3MSBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDE3MiBJUlFfVFlQRV9MRVZFTF9ISUdICkBAIC0xNzQsNyArMTc0LDcgQEAKIAlpMmMzOiBpMmNAZTY4MjYwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtc2g3M2EwIiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MHhlNjgyNjAwMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxODMgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxODQgSVJRX1RZUEVfTEVWRUxfSElHSApAQCAtMTg2LDcgKzE4Niw3IEBACiAJaTJjNDogaTJjQGU2ODI4MDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXNoNzNhMCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDB4ZTY4MjgwMDAgMHg0MjU+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTg3IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTg4IElSUV9UWVBFX0xFVkVMX0hJR0gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2EuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2EuZHRzaQppbmRleCA0NDcyZmQ5Li4yNTJjM2QxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYS5kdHNpCkBAIC02MzksNiArNjM5LDMzIEBACiAJCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKIAkJfTsKIAorCQlvY3JhbTogc3JhbUBmZmZmMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1taW8tc3JhbSI7CisJCQlyZWcgPSA8MHhmZmZmMDAwMCAweDEwMDAwPjsKKwkJfTsKKworCQlzcGkwOiBzcGlAZmZmMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1zc2kiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweGZmZjAwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTU0IDQ+OworCQkJbnVtLWNzID0gPDQ+OworCQkJY2xvY2tzID0gPCZzcGlfbV9jbGs+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzcGkxOiBzcGlAZmZmMDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1zc2kiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweGZmZjAxMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTU2IDQ+OworCQkJbnVtLWNzID0gPDQ+OworCQkJY2xvY2tzID0gPCZzcGlfbV9jbGs+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQkvKiBMb2NhbCB0aW1lciAqLwogCQl0aW1lckBmZmZlYzYwMCB7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktdHdkLXRpbWVyIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWExMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9hcnJpYTEwLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwNWM0NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWExMC5kdHNpCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogQ29weXJpZ2h0IEFsdGVyYSBDb3Jwb3JhdGlvbiAoQykgMjAxNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlICJza2VsZXRvbi5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKworLyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmdtYWMwOworCQlldGhlcm5ldDEgPSAmZ21hYzE7CisJCWV0aGVybmV0MiA9ICZnbWFjMjsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0MTsKKwkJdGltZXIwID0gJnRpbWVyMDsKKwkJdGltZXIxID0gJnRpbWVyMTsKKwkJdGltZXIyID0gJnRpbWVyMjsKKwkJdGltZXIzID0gJnRpbWVyMzsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwkJY3B1QDEgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MT47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJfTsKKworCWludGM6IGludGNAZmZmZmQwMDAgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktZ2ljIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCXJlZyA9IDwweGZmZmZkMDAwIDB4MTAwMD4sCisJCSAgICAgIDwweGZmZmZjMTAwIDB4MTAwPjsKKwl9OworCisJc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKKwkJcmFuZ2VzOworCisJCWFtYmEgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sYW1iYS1idXMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlczsKKworCQkJcGRtYTogcGRtYUBmZmRhMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMzAiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4ZmZkYTEwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgODMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSAgICAgPDAgODQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSAgICAgPDAgODUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSAgICAgPDAgODYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSAgICAgPDAgODcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSAgICAgPDAgODggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSAgICAgPDAgODkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSAgICAgPDAgOTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkJI2RtYS1jZWxscyA9IDwxPjsKKwkJCQkjZG1hLWNoYW5uZWxzID0gPDg+OworCQkJCSNkbWEtcmVxdWVzdHMgPSA8MzI+OworCQkJfTsKKwkJfTsKKworCQljbGttZ3JAZmZkMDQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYWx0cixjbGstbWdyIjsKKwkJCQlyZWcgPSA8MHhmZmQwNDAwMCAweDEwMDA+OworCisJCQkJY2xvY2tzIHsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJCW9zYzE6IG9zYzEgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkJCX07CisKKwkJCQkJbWFpbl9wbGw6IG1haW5fcGxsIHsKKwkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQljb21wYXRpYmxlID0gImFsdHIsc29jZnBnYS1wbGwtY2xvY2siOworCQkJCQkJY2xvY2tzID0gPCZvc2MxPjsKKwkJCQkJfTsKKworCQkJCQlwZXJpcGhfcGxsOiBwZXJpcGhfcGxsIHsKKwkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQljb21wYXRpYmxlID0gImFsdHIsc29jZnBnYS1wbGwtY2xvY2siOworCQkJCQkJY2xvY2tzID0gPCZvc2MxPjsKKwkJCQkJfTsKKwkJCQl9OworCQl9OworCisJCWdtYWMwOiBldGhlcm5ldEBmZjgwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFsdHIsc29jZnBnYS1zdG1tYWMiLCAic25wcyxkd21hYy0zLjcyYSIsICJzbnBzLGR3bWFjIjsKKwkJCXJlZyA9IDwweGZmODAwMDAwIDB4MjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgOTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlpbnRlcnJ1cHQtbmFtZXMgPSAibWFjaXJxIjsKKwkJCS8qIEZpbGxlZCBpbiBieSBib290bG9hZGVyICovCisJCQltYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWdtYWMxOiBldGhlcm5ldEBmZjgwMjAwMCB7CisJCQljb21wYXRpYmxlID0gImFsdHIsc29jZnBnYS1zdG1tYWMiLCAic25wcyxkd21hYy0zLjcyYSIsICJzbnBzLGR3bWFjIjsKKwkJICAgICAgICByZWcgPSA8MHhmZjgwMjAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDkzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJaW50ZXJydXB0LW5hbWVzID0gIm1hY2lycSI7CisJCQkvKiBGaWxsZWQgaW4gYnkgYm9vdGxvYWRlciAqLworCQkJbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlnbWFjMjogZXRoZXJuZXRAZmY4MDQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbHRyLHNvY2ZwZ2Etc3RtbWFjIiwgInNucHMsZHdtYWMtMy43MmEiLCAic25wcyxkd21hYyI7CisJCQlyZWcgPSA8MHhmZjgwNDAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDk0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJaW50ZXJydXB0LW5hbWVzID0gIm1hY2lycSI7CisJCQkvKiBGaWxsZWQgaW4gYnkgYm9vdGxvYWRlciAqLworCQkJbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlncGlvMDogZ3Bpb0BmZmMwMjkwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCXJlZyA9IDwweGZmYzAyOTAwIDB4MTAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCXBvcnRhOiBncGlvLWNvbnRyb2xsZXJAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlzbnBzLG5yLWdwaW9zID0gPDI5PjsKKwkJCQlyZWcgPSA8MD47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJfTsKKwkJfTsKKworCQlncGlvMTogZ3Bpb0BmZmMwMmEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCXJlZyA9IDwweGZmYzAyYTAwIDB4MTAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCXBvcnRiOiBncGlvLWNvbnRyb2xsZXJAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlzbnBzLG5yLWdwaW9zID0gPDI5PjsKKwkJCQlyZWcgPSA8MD47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTEzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJfTsKKwkJfTsKKworCQlncGlvMjogZ3Bpb0BmZmMwMmIwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCXJlZyA9IDwweGZmYzAyYjAwIDB4MTAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCXBvcnRjOiBncGlvLWNvbnRyb2xsZXJAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlzbnBzLG5yLWdwaW9zID0gPDI3PjsKKwkJCQlyZWcgPSA8MD47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTE0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJfTsKKwkJfTsKKworCQlpMmMwOiBpMmNAZmZjMDIyMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MHhmZmMwMjIwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTA1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMxOiBpMmNAZmZjMDIzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MHhmZmMwMjMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTA2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMyOiBpMmNAZmZjMDI0MDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MHhmZmMwMjQwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMzOiBpMmNAZmZjMDI1MDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MHhmZmMwMjUwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTA4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmM0OiBpMmNAZmZjMDI2MDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MHhmZmMwMjYwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlMMjogbDItY2FjaGVAZmZmZmYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOworCQkJcmVnID0gPDB4ZmZmZmYwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNhY2hlLXVuaWZpZWQ7CisJCQljYWNoZS1sZXZlbCA9IDwyPjsKKwkJfTsKKworCQltbWM6IGR3bW1jMEBmZjgwODAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbHRyLHNvY2ZwZ2EtZHctbXNoYyI7CisJCQlyZWcgPSA8MHhmZjgwODAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDk4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJZmlmby1kZXB0aCA9IDwweDQwMD47CisJCX07CisKKwkJb2NyYW06IHNyYW1AZmZlMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOworCQkJcmVnID0gPDB4ZmZlMDAwMDAgMHg0MDAwMD47CisJCX07CisKKwkJcnN0OiByc3RtZ3JAZmZkMDUwMDAgeworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbHRyLHJzdC1tZ3IiOworCQkJcmVnID0gPDB4ZmZkMDUwMDAgMHgxMDA+OworCQl9OworCisJCXN5c21ncjogc3lzbWdyQGZmZDA2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWx0cixzeXMtbWdyIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHhmZmQwNjAwMCAweDMwMD47CisJCX07CisKKwkJLyogTG9jYWwgdGltZXIgKi8KKwkJdGltZXJAZmZmZmM2MDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXR3ZC10aW1lciI7CisJCQlyZWcgPSA8MHhmZmZmYzYwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMHhmMDQ+OworCQl9OworCisJCXRpbWVyMDogdGltZXIwQGZmYzAyNzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJaW50ZXJydXB0cyA9IDwwIDExNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXJlZyA9IDwweGZmYzAyNzAwIDB4MTAwPjsKKwkJfTsKKworCQl0aW1lcjE6IHRpbWVyMUBmZmMwMjgwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXRpbWVyIjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlyZWcgPSA8MHhmZmMwMjgwMCAweDEwMD47CisJCX07CisKKwkJdGltZXIyOiB0aW1lcjJAZmZkMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcmVnID0gPDB4ZmZkMDAwMDAgMHgxMDA+OworCQl9OworCisJCXRpbWVyMzogdGltZXIzQGZmZDAwMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJaW50ZXJydXB0cyA9IDwwIDExOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXJlZyA9IDwweGZmZDAxMDAwIDB4MTAwPjsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsMEBmZmMwMjAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJcmVnID0gPDB4ZmZjMDIwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJfTsKKworCQl1YXJ0MTogc2VyaWFsMUBmZmMwMjEwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJcmVnID0gPDB4ZmZjMDIxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJfTsKKworCQl1c2JwaHkwOiB1c2JwaHlAMCB7CisJCQkjcGh5LWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJ1c2Itbm9wLXhjZWl2IjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1c2IwOiB1c2JAZmZiMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3YzIiOworCQkJcmVnID0gPDB4ZmZiMDAwMDAgMHhmZmZmPjsKKwkJCWludGVycnVwdHMgPSA8MCA5NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXBoeXMgPSA8JnVzYnBoeTA+OworCQkJcGh5LW5hbWVzID0gInVzYjItcGh5IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdXNiMTogdXNiQGZmYjQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkd2MyIjsKKwkJCXJlZyA9IDwweGZmYjQwMDAwIDB4ZmZmZj47CisJCQlpbnRlcnJ1cHRzID0gPDAgOTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlwaHlzID0gPCZ1c2JwaHkwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IyLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXdhdGNoZG9nMDogd2F0Y2hkb2dAZmZkMDAyMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LXdkdCI7CisJCQlyZWcgPSA8MHhmZmQwMDIwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl3YXRjaGRvZzE6IHdhdGNoZG9nQGZmZDAwMzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy13ZHQiOworCQkJcmVnID0gPDB4ZmZkMDAzMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2FycmlhMTBfc29jZGsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9hcnJpYTEwX3NvY2RrLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDE1Y2U4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9hcnJpYTEwX3NvY2RrLmR0cwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFsdGVyYSBDb3Jwb3JhdGlvbiA8d3d3LmFsdGVyYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJzb2NmcGdhX2FycmlhMTAuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQWx0ZXJhIFNPQ0ZQR0EgQXJyaWEgMTAiOworCWNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLWFycmlhMTAiLCAiYWx0cixzb2NmcGdhIjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIHJvb3R3YWl0IjsKKwl9OworCisJbWVtb3J5IHsKKwkJbmFtZSA9ICJtZW1vcnkiOworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDA+OyAvKiAxR0IgKi8KKwl9OworCisJc29jIHsKKwkJY2xrbWdyQGZmZDA0MDAwIHsKKwkJCWNsb2NrcyB7CisJCQkJb3NjMSB7CisJCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsMEBmZmMwMjAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2N5Y2xvbmU1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2N5Y2xvbmU1LmR0c2kKaW5kZXggMjhjMDVlNy4uMDZkYjk1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9jeWNsb25lNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTUuZHRzaQpAQCAtNDksMyArNDksNyBAQAogCQl9OwogCX07CiB9OworCismd2F0Y2hkb2cwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLWRieDV4MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLWRieDV4MC5kdHNpCmluZGV4IDlkMjMyMzAuLmJmZDNmMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1kYng1eDAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtZGJ4NXgwLmR0c2kKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL21mZC9kYng1MDAtcHJjbXUuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9hcm0vdXg1MDBfcG1fZG9tYWlucy5oPgogI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCiAKIC8gewpAQCAtNDMsNiArNDQsMTAgQEAKIAkJCWludGVycnVwdHMgPSA8MCA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQl9OwogCisJCXBtX2RvbWFpbnM6IHBtX2RvbWFpbnMwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Rlcmljc3Nvbix1eDUwMC1wbS1kb21haW5zIjsKKwkJCSNwb3dlci1kb21haW4tY2VsbHMgPSA8MT47CisJCX07CiAKIAkJY2xvY2tzIHsKIAkJCWNvbXBhdGlibGUgPSAic3Rlcmljc3Nvbix1ODUwMC1jbGtzIjsKQEAgLTYzNiw2ICs2NDEsNyBAQAogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAzIDM+LCA8JnByY2NfcGNsayAzIDM+OwogCQkJY2xvY2stbmFtZXMgPSAiaTJjY2xrIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCWkyY0A4MDEyMjAwMCB7CkBAIC02NTEsNiArNjU3LDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMSAyPiwgPCZwcmNjX3BjbGsgMSAyPjsKIAkJCWNsb2NrLW5hbWVzID0gImkyY2NsayIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlpMmNAODAxMjgwMDAgewpAQCAtNjY2LDYgKzY3Myw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDEgNj4sIDwmcHJjY19wY2xrIDEgNj47CiAJCQljbG9jay1uYW1lcyA9ICJpMmNjbGsiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJaTJjQDgwMTEwMDAwIHsKQEAgLTY4MSw2ICs2ODksNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAyIDA+LCA8JnByY2NfcGNsayAyIDA+OwogCQkJY2xvY2stbmFtZXMgPSAiaTJjY2xrIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCWkyY0A4MDEyYTAwMCB7CkBAIC02OTYsNiArNzA1LDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMSA5PiwgPCZwcmNjX3BjbGsgMSAxMD47CiAJCQljbG9jay1uYW1lcyA9ICJpMmNjbGsiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJc3NwQDgwMDAyMDAwIHsKQEAgLTcwOSw2ICs3MTksNyBAQAogCQkJZG1hcyA9IDwmZG1hIDggMCAweDI+LCAvKiBMb2dpY2FsIC0gRGV2VG9NZW0gKi8KIAkJCSAgICAgICA8JmRtYSA4IDAgMHgwPjsgLyogTG9naWNhbCAtIE1lbVRvRGV2ICovCiAJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJc3NwQDgwMDAzMDAwIHsKQEAgLTcyMiw2ICs3MzMsNyBAQAogCQkJZG1hcyA9IDwmZG1hIDkgMCAweDI+LCAvKiBMb2dpY2FsIC0gRGV2VG9NZW0gKi8KIAkJCSAgICAgICA8JmRtYSA5IDAgMHgwPjsgLyogTG9naWNhbCAtIE1lbVRvRGV2ICovCiAJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJc3BpQDgwMTFhMDAwIHsKQEAgLTczNiw2ICs3NDgsNyBAQAogCQkJZG1hcyA9IDwmZG1hIDAgMCAweDI+LCAvKiBMb2dpY2FsIC0gRGV2VG9NZW0gKi8KIAkJCSAgICAgICA8JmRtYSAwIDAgMHgwPjsgLyogTG9naWNhbCAtIE1lbVRvRGV2ICovCiAJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJc3BpQDgwMTEyMDAwIHsKQEAgLTc1MCw2ICs3NjMsNyBAQAogCQkJZG1hcyA9IDwmZG1hIDM1IDAgMHgyPiwgLyogTG9naWNhbCAtIERldlRvTWVtICovCiAJCQkgICAgICAgPCZkbWEgMzUgMCAweDA+OyAvKiBMb2dpY2FsIC0gTWVtVG9EZXYgKi8KIAkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlzcGlAODAxMTEwMDAgewpAQCAtNzY0LDYgKzc3OCw3IEBACiAJCQlkbWFzID0gPCZkbWEgMzMgMCAweDI+LCAvKiBMb2dpY2FsIC0gRGV2VG9NZW0gKi8KIAkJCSAgICAgICA8JmRtYSAzMyAwIDB4MD47IC8qIExvZ2ljYWwgLSBNZW1Ub0RldiAqLwogCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCXNwaUA4MDEyOTAwMCB7CkBAIC03NzgsNiArNzkzLDcgQEAKIAkJCWRtYXMgPSA8JmRtYSA0MCAwIDB4Mj4sIC8qIExvZ2ljYWwgLSBEZXZUb01lbSAqLwogCQkJICAgICAgIDwmZG1hIDQwIDAgMHgwPjsgLyogTG9naWNhbCAtIE1lbVRvRGV2ICovCiAJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJdWFydEA4MDEyMDAwMCB7CkBAIC04MzYsNiArODUyLDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMSA1PiwgPCZwcmNjX3BjbGsgMSA1PjsKIAkJCWNsb2NrLW5hbWVzID0gInNkaSIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTg1MSw2ICs4NjgsNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAyIDQ+LCA8JnByY2NfcGNsayAyIDY+OwogCQkJY2xvY2stbmFtZXMgPSAic2RpIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtODY2LDYgKzg4NCw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDMgND4sIDwmcHJjY19wY2xrIDMgND47CiAJCQljbG9jay1uYW1lcyA9ICJzZGkiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC04ODEsNiArOTAwLDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMiA1PiwgPCZwcmNjX3BjbGsgMiA3PjsKIAkJCWNsb2NrLW5hbWVzID0gInNkaSIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTg5Niw2ICs5MTYsNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAyIDI+LCA8JnByY2NfcGNsayAyIDQ+OwogCQkJY2xvY2stbmFtZXMgPSAic2RpIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtOTExLDYgKzkzMiw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDMgNz4sIDwmcHJjY19wY2xrIDMgNz47CiAJCQljbG9jay1uYW1lcyA9ICJzZGkiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1uaGsxNS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1uaGsxNS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjMDBlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLW5oazE1LmR0cwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIERldmljZSBUcmVlIGZvciB0aGUgU1QtRXJpY3Nzb24gTm9tYWRpayBTODgxNSBib2FyZAorICogUHJvZHVjZWQgYnkgQ2FsYW8gU3lzdGVtcworICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgInN0ZS1ub21hZGlrLXN0bjg4MTUuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTm9tYWRpayBTVE44ODE1TkhLIjsKKwljb21wYXRpYmxlID0gInN0LG5vbWFkaWstbmhrLTE1IjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gInJvb3Q9L2Rldi9yYW0wIGNvbnNvbGU9dHR5QU1BMSwxMTUyMDBuOCBlYXJseXByaW50ayI7CisJfTsKKworCWFsaWFzZXMgeworCQlzdG1wZS1pMmMwID0gJnN0bXBlMDsKKwkJc3RtcGUtaTJjMSA9ICZzdG1wZTE7CisJfTsKKworCXBpbmN0cmwgeworCQlzdG1wZTI0MDFfMSB7CisJCQlzdG1wZTI0MDFfMV9uaGtfbW9kZTogc3RtcGUyNDAxXzFfbmhrIHsKKwkJCQluaGtfY2ZnMSB7CisJCQkJCXN0ZSxwaW5zID0gIkdQSU83Nl9CMjAiOyAvLyBJUlEgbGluZQorCQkJCQlzdGUsaW5wdXQgPSA8MD47CisJCQkJfTsKKwkJCQluaGtfY2ZnMiB7CisJCQkJCXN0ZSxwaW5zID0gIkdQSU83N19COCI7IC8vIHJlc2V0IGxpbmUKKwkJCQkJc3RlLG91dHB1dCA9IDwxPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwkJc3RtcGUyNDAxXzIgeworCQkJc3RtcGUyNDAxXzJfbmhrX21vZGU6IHN0bXBlMjQwMV8yX25oayB7CisJCQkJbmhrX2NmZzEgeworCQkJCQlzdGUscGlucyA9ICJHUElPNzhfQTgiOyAvLyBJUlEgbGluZQorCQkJCQlzdGUsaW5wdXQgPSA8MD47CisJCQkJfTsKKwkJCQluaGtfY2ZnMiB7CisJCQkJCXN0ZSxwaW5zID0gIkdQSU83OV9DOSI7IC8vIHJlc2V0IGxpbmUKKwkJCQkJc3RlLG91dHB1dCA9IDwxPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCisJc3JjQDEwMWUwMDAwIHsKKwkJLyogVGhlc2UgY2hyeXN0YWwgb3V0cHV0cyBhcmUgbm90IHVzZWQgb24gdGhpcyBib2FyZCAqLworCQlkaXNhYmxlLXN4dGFsbzsKKwkJZGlzYWJsZS1teHRhbG87CisJfTsKKworCS8qIFRoaXMgaXMgd2hlcmUgdGhlIGludGVycnVwdCBpcyByb3V0ZWQgb24gdGhlIE5ISy0xNSBkZWJ1ZyBib2FyZCAqLworCWV4dGVybmFsLWJ1c0AzNDAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweDM0MDAwMDAwIDB4MTAwMDAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMHgzNDAwMDAwMCAweDEwMDAwMDA+OworCQlldGhlcm5ldEAzMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkxYzExMSI7CisJCQlyZWcgPSA8MHgzMDAgMHgwZmQwMD47CisJCQlyZWctaW8td2lkdGggPSA8Mj47CisJCQlyZXNldC1ncGlvcyA9IDwmc3RtcGVfZ3BpbzQ0IDEwIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc3RtcGVfZ3BpbzQ0PjsKKwkJCWludGVycnVwdHMgPSA8MTEgSVJRX1RZUEVfRURHRV9SSVNJTkc+OworCQl9OworCX07CisKKwlpMmMwIHsKKwkJc3RtcGUwOiBzdG1wZTI0MDFANDMgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdG1wZTI0MDEiOworCQkJcmVnID0gPDB4NDM+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JmdwaW8yIDEzIEdQSU9fQUNUSVZFX0xPVz47IC8vIEdQSU83NworCQkJaW50ZXJydXB0cyA9IDwxMiBJUlFfVFlQRV9FREdFX0ZBTExJTkc+OyAvLyBHUElPNzYKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8yPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJd2FrZXVwLXNvdXJjZTsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnN0bXBlMjQwMV8xX25oa19tb2RlPjsKKwkJCXN0bXBlX2dwaW80Mzogc3RtcGVfZ3BpbyB7CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdG1wZS1ncGlvIjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkvKiBTb21lIHBpbnMgaW4gYWx0ZXJuYXRlIGZ1bmN0aW9ucyAqLworCQkJCXN0LG5vcmVxdWVzdC1tYXNrID0gPDB4ZjBmMDAyPjsKKwkJCX07CisJCQlzdG1wZV9rZXlwYWQgeworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RtcGUta2V5cGFkIjsKKwkJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDw2ND47CisJCQkJc3Qsc2Nhbi1jb3VudCA9IDw4PjsKKwkJCQlzdCxuby1hdXRvcmVwZWF0OworCQkJCWtleXBhZCxudW0tcm93cyA9IDw4PjsKKwkJCQlrZXlwYWQsbnVtLWNvbHVtbnMgPSA8OD47CisJCQkJbGludXgsa2V5bWFwID0gPDB4MDAwMjAwNzIgLy8gVm9sIGRvd24KKwkJCQkJCTB4MDAwMzAwNzMgLy8gVm9sIHVwCisJCQkJCQkweDAxMDAwMDllIC8vIEJhY2sKKwkJCQkJCTB4MDEwMTAwZTMgLy8gVFYgb3V0CisJCQkJCQkweDAxMDIwMDk4IC8vIExvY2sKKwkJCQkJCTB4MDEwMzAxM2IgLy8gU3RhcnQKKwkJCQkJCTB4MDIwMDAwYTMgLy8gTmV4dAorCQkJCQkJMHgwMjAxMDBhNCAvLyBQbGF5CisJCQkJCQkweDAyMDIwMGE1IC8vIFByZXYKKwkJCQkJCTB4MDIwMzAxNjAgLy8gT0sKKwkJCQkJCTB4MDMwMDAwNjkgLy8gTGVmdAorCQkJCQkJMHgwMzAxMDA2YSAvLyBSaWdodAorCQkJCQkJMHgwMzAyMDA2NyAvLyBVcAorCQkJCQkJMHgwMzAzMDA2Yz47IC8vIERvd24KKwkJCX07CisJCX07CisJCXN0bXBlMTogc3RtcGUyNDAxQDQ0IHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RtcGUyNDAxIjsKKwkJCXJlZyA9IDwweDQ0PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZncGlvMiAxNSBHUElPX0FDVElWRV9MT1c+OyAvLyBHUElPNzkKKwkJCWludGVycnVwdHMgPSA8MTQgSVJRX1RZUEVfRURHRV9GQUxMSU5HPjsgLy8gR1BJTzc4CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMj47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCXdha2V1cC1zb3VyY2U7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZzdG1wZTI0MDFfMl9uaGtfbW9kZT47CisJCQlzdG1wZV9ncGlvNDQ6IHN0bXBlX2dwaW8geworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RtcGUtZ3BpbyI7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQl9OworCQl9OworCX07CisKKwlhbWJhIHsKKwkJbW1jc2Q6IHNkaUAxMDFmNjAwMCB7CisJCQljZC1ncGlvcyA9IDwmc3RtcGVfZ3BpbzQ0IDcgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCXdwLWdwaW9zID0gPCZzdG1wZV9ncGlvNDQgMTggR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJfTsKKworCS8qIEN1c3RvbSBib2FyZCBub2RlIHdpdGggR1BJTyBwaW5zIHRvIGFjdGl2ZSBldGMgKi8KKwl1c2Itczg4MTUgeworCQkvKiBUaGlzIHdpbGwgdHVybiBvZmYgU0FUQSBzbyB0aGF0IE1NQy9TRCBjYW4gdGhyaXZlICovCisJCW1tY3NkLWdwaW8geworCQkJZ3Bpb3MgPSA8JnN0bXBlX2dwaW80NCAyIDB4MT47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1zODgxNS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1zODgxNS5kdHMKaW5kZXggOTBkOGI2Yy4uZTQxMWZmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstczg4MTUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXM4ODE1LmR0cwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAvZHRzLXYxLzsKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KICNpbmNsdWRlICJzdGUtbm9tYWRpay1zdG44ODE1LmR0c2kiCiAKIC8gewpAQCAtMTQsMTQgKzE1LDYgQEAKIAkJYm9vdGFyZ3MgPSAicm9vdD0vZGV2L3JhbTAgY29uc29sZT10dHlBTUExLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKIAl9OwogCi0JLyogVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJydXB0IGlzIHJvdXRlZCBvbiB0aGUgUzg4MTUgYm9hcmQgKi8KLQlleHRlcm5hbC1idXNAMzQwMDAwMDAgewotCQlldGhlcm5ldEAzMDAgewotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzM+OwotCQkJaW50ZXJydXB0cyA9IDw4IDB4MT47Ci0JCX07Ci0JfTsKLQogCXNyY0AxMDFlMDAwMCB7CiAJCS8qIFRoZXNlIGNocnlzdGFsIGRyaXZlcnMgYXJlIG5vdCB1c2VkIG9uIHRoaXMgYm9hcmQgKi8KIAkJZGlzYWJsZS1zeHRhbG87CkBAIC00Nyw2ICs0MCwxNCBAQAogCQkJCX07CiAJCQl9OwogCQl9OworCQlncGlvaTJjIHsKKwkJCWdwaW9pMmNfZGVmYXVsdF9tb2RlOiBncGlvaTJjX2RlZmF1bHQgeworCQkJCWdwaW9pMmNfZGVmYXVsdF9jZmcgeworCQkJCQlzdGUscGlucyA9ICJHUElPNzNfQzIxIiwgIkdQSU83NF9DMjAiOworCQkJCQlzdGUsaW5wdXQgPSA8MD47CisJCQkJfTsKKwkJCX07CisJCX07CiAJCXVzZXItbGVkIHsKIAkJCXVzZXJfbGVkX2RlZmF1bHRfbW9kZTogdXNlcl9sZWRfZGVmYXVsdCB7CiAJCQkJdXNlcl9sZWRfZGVmYXVsdF9jZmcgewpAQCAtNjUsNiArNjYsNDUgQEAKIAkJfTsKIAl9OwogCisJLyogRXRoZXJuZXQgKi8KKwlleHRlcm5hbC1idXNAMzQwMDAwMDAgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHgzNDAwMDAwMCAweDEwMDAwMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlcyA9IDwwIDB4MzQwMDAwMDAgMHgxMDAwMDAwPjsKKwkJZXRoZXJuZXRAMzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic21zYyxsYW45MWMxMTEiOworCQkJcmVnID0gPDB4MzAwIDB4MGZkMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzM+OworCQkJaW50ZXJydXB0cyA9IDw4IElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJfTsKKwl9OworCisJLyogR1BJTyBJMkMgY29ubmVjdGVkIHRvIHRoZSBVU0IgcG9ydGlvbnMgb2YgdGhlIFNUdzQ4MTEgb25seSAqLworCWdwaW8taTJjIHsKKwkJY29tcGF0aWJsZSA9ICJpMmMtZ3BpbyI7CisJCWdwaW9zID0gPCZncGlvMiAxMCAwPiwgLyogc2RhICovCisJCQk8JmdwaW8yIDkgMD47IC8qIHNjbCAqLworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmZ3Bpb2kyY19kZWZhdWx0X21vZGU+OworCisJCXN0dzQ4MTFAMmQgeworCQkJICAgY29tcGF0aWJsZSA9ICJzdCxzdHc0ODExLXVzYiI7CisJCQkgICByZWcgPSA8MHgyZD47CisJCX07CisJfTsKKworCisJLyogQ29uZmlndXJlIGNhcmQgZGV0ZWN0IGZvciB0aGUgdVNEIHNsb3QgKi8KKwlhbWJhIHsKKwkJbW1jc2Q6IHNkaUAxMDFmNjAwMCB7CisJCQljZC1ncGlvcyA9IDwmZ3BpbzMgMTUgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworCiAJLyogQ3VzdG9tIGJvYXJkIG5vZGUgd2l0aCBHUElPIHBpbnMgdG8gYWN0aXZlIGV0YyAqLwogCXVzYi1zODgxNSB7CiAJCS8qIFRoaXMgd2lsbCBiaWFzIHRoZSBNTUMvU0QgY2FyZCBkZXRlY3QgbGluZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstc3RuODgxNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstc3RuODgxNS5kdHNpCmluZGV4IGRiY2Y1MjEuLmY0MzVmZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXN0bjg4MTUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1zdG44ODE1LmR0c2kKQEAgLTExNyw3ICsxMTcsNyBAQAogCQkJbW1jc2RfZGVmYXVsdF9tdXg6IG1tY3NkX211eCB7CiAJCQkJbW1jc2RfZGVmYXVsdF9tdXggewogCQkJCQlzdGUsZnVuY3Rpb24gPSAibW1jc2QiOwotCQkJCQlzdGUscGlucyA9ICJtbWNzZF9hXzEiOworCQkJCQlzdGUscGlucyA9ICJtbWNzZF9hXzEiLCAibW1jc2RfYl8xIjsKIAkJCQl9OwogCQkJfTsKIAkJCW1tY3NkX2RlZmF1bHRfbW9kZTogbW1jc2RfZGVmYXVsdCB7CkBAIC0xMjcsOSArMTI3LDkgQEAKIAkJCQkJc3RlLG91dHB1dCA9IDwwPjsKIAkJCQl9OwogCQkJCW1tY3NkX2RlZmF1bHRfY2ZnMiB7Ci0JCQkJCS8qIE1DQ01ERElSLCBNQ0RBVDBESVIsIE1DREFUMzFESVIgKi8KKwkJCQkJLyogTUNDTURESVIsIE1DREFUMERJUiwgTUNEQVQzMURJUiwgTUNEQVRESVIyICovCiAJCQkJCXN0ZSxwaW5zID0gIkdQSU8xMF9DMTEiLCAiR1BJTzE1X0ExMiIsCi0JCQkJCSJHUElPMTZfQzEzIjsKKwkJCQkJIkdQSU8xNl9DMTMiLCAiR1BJTzIzX0QxNSI7CiAJCQkJCXN0ZSxvdXRwdXQgPSA8MT47CiAJCQkJfTsKIAkJCQltbWNzZF9kZWZhdWx0X2NmZzMgewpAQCAtMTY5LDIxICsxNjksMTEgQEAKIAkJCQl9OwogCQkJfTsKIAkJfTsKLQkJaTJjMiB7Ci0JCQlpMmMyX2RlZmF1bHRfbW9kZTogaTJjMl9kZWZhdWx0IHsKLQkJCQlpMmMyX2RlZmF1bHRfY2ZnIHsKLQkJCQkJc3RlLHBpbnMgPSAiR1BJTzczX0MyMSIsICJHUElPNzRfQzIwIjsKLQkJCQkJc3RlLGlucHV0ID0gPDA+OwotCQkJCX07Ci0JCQl9OwotCQl9OwogCX07CiAKIAlzcmM6IHNyY0AxMDFlMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic3Rlcmljc3Nvbixub21hZGlrLXNyYyI7CiAJCXJlZyA9IDwweDEwMWUwMDAwIDB4MTAwMD47Ci0JCWRpc2FibGUtc3h0YWxvOwotCQlkaXNhYmxlLW14dGFsbzsKIAogCQkvKgogCQkgKiBNWFRBTCAiTWFpbiBDaHJ5c3RhbCIgaXMgYSBjaHJ5c3RhbCBvc2NpbGxhdG9yIEAxOS4yIE1IegpAQCAtNjgzLDE4ICs2NzMsNiBAQAogCQl9OwogCX07CiAKLQlleHRlcm5hbC1idXNAMzQwMDAwMDAgewotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwotCQlyZWcgPSA8MHgzNDAwMDAwMCAweDEwMDAwMDA+OwotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJhbmdlcyA9IDwwIDB4MzQwMDAwMDAgMHgxMDAwMDAwPjsKLQkJZXRoZXJuZXRAMzAwIHsKLQkJCWNvbXBhdGlibGUgPSAic21zYyxsYW45MWMxMTEiOwotCQkJcmVnID0gPDB4MzAwIDB4MGZkMDA+OwotCQl9OwotCX07Ci0KIAkvKiBJMkMwIGNvbm5lY3RlZCB0byB0aGUgU1R3NDgxMSBwb3dlciBtYW5hZ2VtZW50IGNoaXAgKi8KIAlpMmMwIHsKIAkJY29tcGF0aWJsZSA9ICJzdCxub21hZGlrLWkyYyIsICJhcm0scHJpbWVjZWxsIjsKQEAgLTc0OSwyMiArNzI3LDYgQEAKIAkJfTsKIAl9OwogCi0JLyogSTJDMiBjb25uZWN0ZWQgdG8gdGhlIFVTQiBwb3J0aW9ucyBvZiB0aGUgU1R3NDgxMSBvbmx5ICovCi0JaTJjMiB7Ci0JCWNvbXBhdGlibGUgPSAiaTJjLWdwaW8iOwotCQlncGlvcyA9IDwmZ3BpbzIgMTAgMD4sIC8qIHNkYSAqLwotCQkJPCZncGlvMiA5IDA+OyAvKiBzY2wgKi8KLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JmkyYzJfZGVmYXVsdF9tb2RlPjsKLQotCQlzdHc0ODExQDJkIHsKLQkJCSAgIGNvbXBhdGlibGUgPSAic3Qsc3R3NDgxMS11c2IiOwotCQkJICAgcmVnID0gPDB4MmQ+OwotCQl9OwotCX07Ci0KIAlhbWJhIHsKIAkJY29tcGF0aWJsZSA9ICJhcm0sYW1iYS1idXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTg0NCw3ICs4MDYsNiBAQAogCQkJYnVzLXdpZHRoID0gPDQ+OwogCQkJY2FwLW1tYy1oaWdoc3BlZWQ7CiAJCQljYXAtc2QtaGlnaHNwZWVkOwotCQkJY2QtZ3Bpb3MgPSA8JmdwaW8zIDE1IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wID0gPCZtbWNzZF9kZWZhdWx0X211eD4sIDwmbW1jc2RfZGVmYXVsdF9tb2RlPjsKIAkJCXZtbWMtc3VwcGx5ID0gPCZ2bW1jX3JlZ3VsYXRvcj47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWIyMTIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctYjIxMjAuZHRzCmluZGV4IGZlNjlmOTIuLjI2MWQ1ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctYjIxMjAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctYjIxMjAuZHRzCkBAIC03LDEzICs3LDE1IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogL2R0cy12MS87Ci0jaW5jbHVkZSAic3RpaDQwNy5kdHNpIgorI2luY2x1ZGUgInN0aWg0MDctY2xvY2suZHRzaSIKKyNpbmNsdWRlICJzdGloNDA3LWZhbWlseS5kdHNpIgorI2luY2x1ZGUgInN0aWh4eHgtYjIxMjAuZHRzaSIKIC8gewogCW1vZGVsID0gIlNUaUg0MDcgQjIxMjAiOwogCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1iMjEyMCIsICJzdCxzdGloNDA3IjsKIAogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5QVMwLDExNTIwMCI7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5QVMwLDExNTIwMCBjbGtfaWdub3JlX3VudXNlZCI7CiAJCWxpbnV4LHN0ZG91dC1wYXRoID0gJnNiY19zZXJpYWwwOwogCX07CiAKQEAgLTI2LDUzICsyOCw0IEBACiAJCXR0eUFTMCA9ICZzYmNfc2VyaWFsMDsKIAl9OwogCi0Jc29jIHsKLQkJc2JjX3NlcmlhbDA6IHNlcmlhbEA5NTMwMDAwIHsKLQkJCXN0YXR1cyA9ICJva2F5IjsKLQkJfTsKLQotCQlsZWRzIHsKLQkJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKLQkJCXJlZCB7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJbGFiZWwgPSAiRnJvbnQgUGFuZWwgTEVEIjsKLQkJCQlncGlvcyA9IDwmcGlvNCAxIDA+OwotCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOwotCQkJfTsKLQkJCWdyZWVuIHsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQlncGlvcyA9IDwmcGlvMSAzIDA+OwotCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKLQkJCX07Ci0JCX07Ci0KLQkJaTJjQDk4NDIwMDAgewotCQkJc3RhdHVzID0gIm9rYXkiOwotCQl9OwotCi0JCWkyY0A5ODQzMDAwIHsKLQkJCXN0YXR1cyA9ICJva2F5IjsKLQkJfTsKLQotCQlpMmNAOTg0NDAwMCB7Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0JCX07Ci0KLQkJaTJjQDk4NDUwMDAgewotCQkJc3RhdHVzID0gIm9rYXkiOwotCQl9OwotCi0JCWkyY0A5NTQwMDAwIHsKLQkJCXN0YXR1cyA9ICJva2F5IjsKLQkJfTsKLQotCQkvKiBTU0MxMSB0byBIRE1JICovCi0JCWkyY0A5NTQxMDAwIHsKLQkJCXN0YXR1cyA9ICJva2F5IjsKLQkJCS8qIEhETUkgVjEuM2Egc3VwcG9ydHMgU3RhbmRhcmQgbW9kZSBvbmx5ICovCi0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLQkJCXN0LGkyYy1taW4tc2NsLXB1bHNlLXdpZHRoLXVzID0gPDA+OwotCQkJc3QsaTJjLW1pbi1zZGEtcHVsc2Utd2lkdGgtdXMgPSA8NT47Ci0JCX07Ci0JfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWNsb2NrLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWNsb2NrLmR0c2kKaW5kZXggODAwZjQ2Zi4uZTY1NzQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1jbG9jay5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctY2xvY2suZHRzaQpAQCAtNSw4ICs1LDEzIEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9zdGloNDA3LWNsa3MuaD4KIC8gewogCWNsb2NrcyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCiAJCS8qCiAJCSAqIEZpeGVkIDMwTUh6IG9zY2lsbGF0b3IgaW5wdXRzIHRvIFNvQwogCQkgKi8KQEAgLTE5LDEwICsyNCw1OSBAQAogCQkvKgogCQkgKiBBUk0gUGVyaXBoZXJhbCBjbG9jayBmb3IgdGltZXJzCiAJCSAqLwotCQlhcm1fcGVyaXBoX2NsazogYXJtLXBlcmlwaC1jbGsgeworCQlhcm1fcGVyaXBoX2NsazogY2xrLW0tYTktcGVyaXBocyB7CiAJCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2MDAwMDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCisJCQljbG9ja3MgPSA8JmNsa19tX2E5PjsKKwkJCWNsb2NrLWRpdiA9IDwyPjsKKwkJCWNsb2NrLW11bHQgPSA8MT47CisJCX07CisKKwkJLyoKKwkJICogQTkgUExMLgorCQkgKi8KKwkJY2xvY2tnZW4tYTlAOTJiMDAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTJiMDAwMCAweGZmZmY+OworCisJCQljbG9ja2dlbl9hOV9wbGw6IGNsb2NrZ2VuLWE5LXBsbCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wbGxzLWMzMi1hOSIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsb2NrZ2VuLWE5LXBsbC1vZGYiOworCQkJfTsKKwkJfTsKKworCQkvKgorCQkgKiBBUk0gQ1BVIHJlbGF0ZWQgY2xvY2tzLgorCQkgKi8KKwkJY2xrX21fYTk6IGNsay1tLWE5QDkyYjAwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LWNsa2dlbi1hOS1tdXgiLCAic3QsY2xrZ2VuLW11eCI7CisJCQlyZWcgPSA8MHg5MmIwMDAwIDB4MTAwMDA+OworCisJCQljbG9ja3MgPSA8JmNsb2NrZ2VuX2E5X3BsbCAwPiwKKwkJCQkgPCZjbG9ja2dlbl9hOV9wbGwgMD4sCisJCQkJIDwmY2xrX3NfYzBfZmxleGdlbiAxMz4sCisJCQkJIDwmY2xrX21fYTlfZXh0MmZfZGl2Mj47CisJCX07CisKKwkJLyoKKwkJICogQVJNIFBlcmlwaGVyYWwgY2xvY2sgZm9yIHRpbWVycworCQkgKi8KKwkJY2xrX21fYTlfZXh0MmZfZGl2MjogY2xrLW0tYTktZXh0MmYtZGl2MnMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gMTM+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tYTktZXh0MmYtZGl2MiI7CisKKwkJCWNsb2NrLWRpdiA9IDwyPjsKKwkJCWNsb2NrLW11bHQgPSA8MT47CiAJCX07CiAKIAkJLyoKQEAgLTM1LDUgKzg5LDIzOCBAQAogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDIwMDAwMDAwMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtaWNuLXJlZy0wIjsKIAkJfTsKKworCQljbG9ja2dlbi1hQDA5MGZmMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MGZmMDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2EwX3BsbDogY2xrLXMtYTAtcGxsIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBsbHMtYzMyLWEwIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYTAtcGxsLW9mZC0wIjsKKwkJCX07CisKKwkJCWNsa19zX2EwX2ZsZXhnZW46IGNsay1zLWEwLWZsZXhnZW4geworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2EwX3BsbCAwPiwKKwkJCQkJIDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstaWMtbG1pMCI7CisJCQl9OworCQl9OworCisJCWNsa19zX2MwX3F1YWRmczogY2xrLXMtYzAtcXVhZGZzQDkxMDMwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXF1YWRmczY2MC1DIiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHg5MTAzMDAwIDB4MTAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWMwLWZzMC1jaDAiLAorCQkJCQkgICAgICJjbGstcy1jMC1mczAtY2gxIiwKKwkJCQkJICAgICAiY2xrLXMtYzAtZnMwLWNoMiIsCisJCQkJCSAgICAgImNsay1zLWMwLWZzMC1jaDMiOworCQl9OworCisJCWNsa19zX2MwOiBjbG9ja2dlbi1jQDA5MTAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MTAzMDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2MwX3BsbDA6IGNsay1zLWMwLXBsbDAgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGxscy1jMzItYzBfMCIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWMwLXBsbDAtb2RmLTAiOworCQkJfTsKKworCQkJY2xrX3NfYzBfcGxsMTogY2xrLXMtYzAtcGxsMSB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wbGxzLWMzMi1jMF8xIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYzAtcGxsMS1vZGYtMCI7CisJCQl9OworCisJCQljbGtfc19jMF9mbGV4Z2VuOiBjbGstcy1jMC1mbGV4Z2VuIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfcGxsMCAwPiwKKwkJCQkJIDwmY2xrX3NfYzBfcGxsMSAwPiwKKwkJCQkJIDwmY2xrX3NfYzBfcXVhZGZzIDA+LAorCQkJCQkgPCZjbGtfc19jMF9xdWFkZnMgMT4sCisJCQkJCSA8JmNsa19zX2MwX3F1YWRmcyAyPiwKKwkJCQkJIDwmY2xrX3NfYzBfcXVhZGZzIDM+LAorCQkJCQkgPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1pY24tZ3B1IiwKKwkJCQkJCSAgICAgImNsay1mZG1hIiwKKwkJCQkJCSAgICAgImNsay1uYW5kIiwKKwkJCQkJCSAgICAgImNsay1odmEiLAorCQkJCQkJICAgICAiY2xrLXByb2Mtc3RmZSIsCisJCQkJCQkgICAgICJjbGstcHJvYy10cCIsCisJCQkJCQkgICAgICJjbGstcngtaWNuLWRtdSIsCisJCQkJCQkgICAgICJjbGstcngtaWNuLWh2YSIsCisJCQkJCQkgICAgICJjbGstaWNuLWNwdSIsCisJCQkJCQkgICAgICJjbGstdHgtaWNuLWRtdSIsCisJCQkJCQkgICAgICJjbGstbW1jLTAiLAorCQkJCQkJICAgICAiY2xrLW1tYy0xIiwKKwkJCQkJCSAgICAgImNsay1qcGVnZGVjIiwKKwkJCQkJCSAgICAgImNsay1leHQyZmE5IiwKKwkJCQkJCSAgICAgImNsay1pYy1iZGlzcC0wIiwKKwkJCQkJCSAgICAgImNsay1pYy1iZGlzcC0xIiwKKwkJCQkJCSAgICAgImNsay1wcC1kbXUiLAorCQkJCQkJICAgICAiY2xrLXZpZC1kbXUiLAorCQkJCQkJICAgICAiY2xrLWRzcy1scGMiLAorCQkJCQkJICAgICAiY2xrLXN0MjMxLWF1ZC0wIiwKKwkJCQkJCSAgICAgImNsay1zdDIzMS1ncC0xIiwKKwkJCQkJCSAgICAgImNsay1zdDIzMS1kbXUiLAorCQkJCQkJICAgICAiY2xrLWljbi1sbWkiLAorCQkJCQkJICAgICAiY2xrLXR4LWljbi1kaXNwLTEiLAorCQkJCQkJICAgICAiY2xrLWljbi1zYmMiLAorCQkJCQkJICAgICAiY2xrLXN0ZmUtZnJjMiIsCisJCQkJCQkgICAgICJjbGstZXRoLXBoeSIsCisJCQkJCQkgICAgICJjbGstZXRoLXJlZi1waHljbGsiLAorCQkJCQkJICAgICAiY2xrLWZsYXNoLXByb21pcCIsCisJCQkJCQkgICAgICJjbGstbWFpbi1kaXNwIiwKKwkJCQkJCSAgICAgImNsay1hdXgtZGlzcCIsCisJCQkJCQkgICAgICJjbGstY29tcG8tZHZwIjsKKwkJCX07CisJCX07CisKKwkJY2xrX3NfZDBfcXVhZGZzOiBjbGstcy1kMC1xdWFkZnNAOTEwNDAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcXVhZGZzNjYwLUQiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweDkxMDQwMDAgMHgxMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtZDAtZnMwLWNoMCIsCisJCQkJCSAgICAgImNsay1zLWQwLWZzMC1jaDEiLAorCQkJCQkgICAgICJjbGstcy1kMC1mczAtY2gyIiwKKwkJCQkJICAgICAiY2xrLXMtZDAtZnMwLWNoMyI7CisJCX07CisKKwkJY2xvY2tnZW4tZDBAMDkxMDQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkxMDQwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfZDBfZmxleGdlbjogY2xrLXMtZDAtZmxleGdlbiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2QwX3F1YWRmcyAwPiwKKwkJCQkJIDwmY2xrX3NfZDBfcXVhZGZzIDE+LAorCQkJCQkgPCZjbGtfc19kMF9xdWFkZnMgMj4sCisJCQkJCSA8JmNsa19zX2QwX3F1YWRmcyAzPiwKKwkJCQkJIDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcGNtLTAiLAorCQkJCQkJICAgICAiY2xrLXBjbS0xIiwKKwkJCQkJCSAgICAgImNsay1wY20tMiIsCisJCQkJCQkgICAgICJjbGstc3BkaWZmIjsKKwkJCX07CisJCX07CisKKwkJY2xrX3NfZDJfcXVhZGZzOiBjbGstcy1kMi1xdWFkZnNAOTEwNjAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcXVhZGZzNjYwLUQiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweDkxMDYwMDAgMHgxMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtZDItZnMwLWNoMCIsCisJCQkJCSAgICAgImNsay1zLWQyLWZzMC1jaDEiLAorCQkJCQkgICAgICJjbGstcy1kMi1mczAtY2gyIiwKKwkJCQkJICAgICAiY2xrLXMtZDItZnMwLWNoMyI7CisJCX07CisKKwkJY2xrX3RtZHNvdXRfaGRtaTogY2xrLXRtZHNvdXQtaGRtaSB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJfTsKKworCQljbG9ja2dlbi1kMkB4OTEwNjAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTEwNjAwMCAweDEwMDA+OworCisJCQljbGtfc19kMl9mbGV4Z2VuOiBjbGstcy1kMi1mbGV4Z2VuIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfZDJfcXVhZGZzIDA+LAorCQkJCQkgPCZjbGtfc19kMl9xdWFkZnMgMT4sCisJCQkJCSA8JmNsa19zX2QyX3F1YWRmcyAyPiwKKwkJCQkJIDwmY2xrX3NfZDJfcXVhZGZzIDM+LAorCQkJCQkgPCZjbGtfc3lzaW4+LAorCQkJCQkgPCZjbGtfc3lzaW4+LAorCQkJCQkgPCZjbGtfdG1kc291dF9oZG1pPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcGl4LW1haW4tZGlzcCIsCisJCQkJCQkgICAgICJjbGstcGl4LXBpcCIsCisJCQkJCQkgICAgICJjbGstcGl4LWdkcDEiLAorCQkJCQkJICAgICAiY2xrLXBpeC1nZHAyIiwKKwkJCQkJCSAgICAgImNsay1waXgtZ2RwMyIsCisJCQkJCQkgICAgICJjbGstcGl4LWdkcDQiLAorCQkJCQkJICAgICAiY2xrLXBpeC1hdXgtZGlzcCIsCisJCQkJCQkgICAgICJjbGstZGVuYyIsCisJCQkJCQkgICAgICJjbGstcGl4LWhkZGFjIiwKKwkJCQkJCSAgICAgImNsay1oZGRhYyIsCisJCQkJCQkgICAgICJjbGstc2RkYWMiLAorCQkJCQkJICAgICAiY2xrLXBpeC1kdm8iLAorCQkJCQkJICAgICAiY2xrLWR2byIsCisJCQkJCQkgICAgICJjbGstcGl4LWhkbWkiLAorCQkJCQkJICAgICAiY2xrLXRtZHMtaGRtaSIsCisJCQkJCQkgICAgICJjbGstcmVmLWhkbWlwaHkiOworCQkJCQkJICAgICB9OworCQl9OworCisJCWNsa19zX2QzX3F1YWRmczogY2xrLXMtZDMtcXVhZGZzQDkxMDcwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXF1YWRmczY2MC1EIiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHg5MTA3MDAwIDB4MTAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWQzLWZzMC1jaDAiLAorCQkJCQkgICAgICJjbGstcy1kMy1mczAtY2gxIiwKKwkJCQkJICAgICAiY2xrLXMtZDMtZnMwLWNoMiIsCisJCQkJCSAgICAgImNsay1zLWQzLWZzMC1jaDMiOworCQl9OworCisJCWNsb2NrZ2VuLWQzQDkxMDcwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkxMDcwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfZDNfZmxleGdlbjogY2xrLXMtZDMtZmxleGdlbiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2QzX3F1YWRmcyAwPiwKKwkJCQkJIDwmY2xrX3NfZDNfcXVhZGZzIDE+LAorCQkJCQkgPCZjbGtfc19kM19xdWFkZnMgMj4sCisJCQkJCSA8JmNsa19zX2QzX3F1YWRmcyAzPiwKKwkJCQkJIDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstc3RmZS1mcmMxIiwKKwkJCQkJCSAgICAgImNsay10c291dC0wIiwKKwkJCQkJCSAgICAgImNsay10c291dC0xIiwKKwkJCQkJCSAgICAgImNsay1tY2hpIiwKKwkJCQkJCSAgICAgImNsay12c2Vucy1jb21wbyIsCisJCQkJCQkgICAgICJjbGstZnJjMS1yZW1vdGUiLAorCQkJCQkJICAgICAiY2xrLWxwYy0wIiwKKwkJCQkJCSAgICAgImNsay1scGMtMSI7CisJCQl9OworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1mYW1pbHkuZHRzaQpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9ib290L2R0cy9zdGloNDA3LmR0c2kKcmVuYW1lIHRvIGFyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctZmFtaWx5LmR0c2kKaW5kZXggNGY5MDI0Zi4uM2UzMWQzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctZmFtaWx5LmR0c2kKQEAgLTYsOCArNiw4IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSAic3RpaDQwNy1jbG9jay5kdHNpIgogI2luY2x1ZGUgInN0aWg0MDctcGluY3RybC5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQwNy1yZXNldHMuaD4KIC8gewogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtNjMsNiArNjMsMjEgQEAKIAkJcmFuZ2VzOwogCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwogCisJCXBvd2VyZG93bjogcG93ZXJkb3duLWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBvd2VyZG93biI7CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCX07CisKKwkJc29mdHJlc2V0OiBzb2Z0cmVzZXQtY29udHJvbGxlciB7CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctc29mdHJlc2V0IjsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJfTsKKworCQlwaWNvcGh5cmVzZXQ6IHBpY29waHlyZXNldC1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1waWNvcGh5cmVzZXQiOworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQl9OworCiAJCXN5c2NmZ19zYmM6IHNiYy1zeXNjZmdAOTYyMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctc2JjLXN5c2NmZyIsICJzeXNjb24iOwogCQkJcmVnID0gPDB4OTYyMDAwMCAweDEwMDA+OwpAQCAtMTA0LDcgKzExOSw3IEBACiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIyIElSUV9UWVBFX05PTkU+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zZXJpYWwwPjsKLQkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OwogCiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtMTE1LDcgKzEzMCw3IEBACiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIzIElSUV9UWVBFX05PTkU+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zZXJpYWwxPjsKLQkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OwogCiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtMTI2LDcgKzE0MSw3IEBACiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTI0IElSUV9UWVBFX05PTkU+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zZXJpYWwyPjsKLQkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OwogCiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtMTU4LDcgKzE3Myw3IEBACiAJCQljb21wYXRpYmxlID0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQlyZWcgPSA8MHg5ODQwMDAwIDB4MTEwPjsKLQkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OwogCQkJY2xvY2stbmFtZXMgPSAic3NjIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTE3MSw3ICsxODYsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CiAJCQlyZWcgPSA8MHg5ODQxMDAwIDB4MTEwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gQ0xLX0VYVDJGX0E5PjsKIAkJCWNsb2NrLW5hbWVzID0gInNzYyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0xODQsNyArMTk5LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAic3QsY29tbXMtc3NjNC1pMmMiOwogCQkJcmVnID0gPDB4OTg0MjAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTE0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19FWFQyRl9BOT47CiAJCQljbG9jay1uYW1lcyA9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTk3LDcgKzIxMiw3IEBACiAJCQljb21wYXRpYmxlID0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZyA9IDwweDk4NDMwMDAgMHgxMTA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OwogCQkJY2xvY2stbmFtZXMgPSAic3NjIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTIxMCw3ICsyMjUsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CiAJCQlyZWcgPSA8MHg5ODQ0MDAwIDB4MTEwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gQ0xLX0VYVDJGX0E5PjsKIAkJCWNsb2NrLW5hbWVzID0gInNzYyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0yMjMsNyArMjM4LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAic3QsY29tbXMtc3NjNC1pMmMiOwogCQkJcmVnID0gPDB4OTg0NTAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19FWFQyRl9BOT47CiAJCQljbG9jay1uYW1lcyA9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC1iMjEyMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLWIyMTIwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjYxYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC1iMjEyMC5kdHMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3MgKFImRCkgTGltaXRlZC4KKyAqIEF1dGhvcjogUGV0ZXIgR3JpZmZpbiA8cGV0ZXIuZ3JpZmZpbkBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKy9kdHMtdjEvOworI2luY2x1ZGUgInN0aWg0MTAuZHRzaSIKKyNpbmNsdWRlICJzdGloeHh4LWIyMTIwLmR0c2kiCisvIHsKKwltb2RlbCA9ICJTVGlINDEwIEIyMTIwIjsKKwljb21wYXRpYmxlID0gInN0LHN0aWg0MTAtYjIxMjAiLCAic3Qsc3RpaDQxMCI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eUFTMCwxMTUyMDAgY2xrX2lnbm9yZV91bnVzZWQiOworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZzYmNfc2VyaWFsMDsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4NDAwMDAwMDAgMHg4MDAwMDAwMD47CisJfTsKKworCWFsaWFzZXMgeworCQl0dHlBUzAgPSAmc2JjX3NlcmlhbDA7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLWNsb2NrLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLWNsb2NrLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1ODAzYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAtY2xvY2suZHRzaQpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3MgUiZEIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svc3RpaDQxMC1jbGtzLmg+CisvIHsKKwljbG9ja3MgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKworCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTAtY2xrIiwgInNpbXBsZS1idXMiOworCisJCS8qCisJCSAqIEZpeGVkIDMwTUh6IG9zY2lsbGF0b3IgaW5wdXRzIHRvIFNvQworCQkgKi8KKwkJY2xrX3N5c2luOiBjbGstc3lzaW4geworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MzAwMDAwMDA+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIkNMS19TWVNJTiI7CisJCX07CisKKwkJLyoKKwkJICogQVJNIFBlcmlwaGVyYWwgY2xvY2sgZm9yIHRpbWVycworCQkgKi8KKwkJYXJtX3BlcmlwaF9jbGs6IGNsay1tLWE5LXBlcmlwaHMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQkJY2xvY2tzID0gPCZjbGtfbV9hOT47CisJCQljbG9jay1kaXYgPSA8Mj47CisJCQljbG9jay1tdWx0ID0gPDE+OworCQl9OworCisJCS8qCisJCSAqIEE5IFBMTC4KKwkJICovCisJCWNsb2NrZ2VuLWE5QDkyYjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkyYjAwMDAgMHhmZmZmPjsKKworCQkJY2xvY2tnZW5fYTlfcGxsOiBjbG9ja2dlbi1hOS1wbGwgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGxscy1jMzItYTkiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbG9ja2dlbi1hOS1wbGwtb2RmIjsKKwkJCX07CisJCX07CisKKwkJLyoKKwkJICogQVJNIENQVSByZWxhdGVkIGNsb2Nrcy4KKwkJICovCisJCWNsa19tX2E5OiBjbGstbS1hOUA5MmIwMDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1jbGtnZW4tYTktbXV4IiwgInN0LGNsa2dlbi1tdXgiOworCQkJcmVnID0gPDB4OTJiMDAwMCAweDEwMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbG9ja2dlbl9hOV9wbGwgMD4sCisJCQkJIDwmY2xvY2tnZW5fYTlfcGxsIDA+LAorCQkJCSA8JmNsa19zX2MwX2ZsZXhnZW4gMTM+LAorCQkJCSA8JmNsa19tX2E5X2V4dDJmX2RpdjI+OworCQl9OworCisJCS8qCisJCSAqIEFSTSBQZXJpcGhlcmFsIGNsb2NrIGZvciB0aW1lcnMKKwkJICovCisJCWNsa19tX2E5X2V4dDJmX2RpdjI6IGNsay1tLWE5LWV4dDJmLWRpdjJzIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIDEzPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWE5LWV4dDJmLWRpdjIiOworCisJCQljbG9jay1kaXYgPSA8Mj47CisJCQljbG9jay1tdWx0ID0gPDE+OworCQl9OworCisJCS8qCisJCSAqIEJvb3Rsb2FkZXIgaW5pdGlhbGl6ZWQgc3lzdGVtIGluZnJhc3RydWN0dXJlIGNsb2NrIGZvcgorCQkgKiBzZXJpYWwgZGV2aWNlcy4KKwkJICovCisJCWNsa19leHQyZl9hOTogY2xvY2tnZW4tYzBAMTMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1pY24tcmVnLTAiOworCQl9OworCisJCWNsb2NrZ2VuLWFAMDkwZmYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkwZmYwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfYTBfcGxsOiBjbGstcy1hMC1wbGwgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGxscy1jMzItYTAiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1hMC1wbGwtb2ZkLTAiOworCQkJfTsKKworCQkJY2xrX3NfYTBfZmxleGdlbjogY2xrLXMtYTAtZmxleGdlbiB7CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfYTBfcGxsIDA+LAorCQkJCQkgPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1pYy1sbWkwIiwKKwkJCQkJCSAgICAgImNsay1pYy1sbWkxIjsKKwkJCX07CisJCX07CisKKwkJY2xrX3NfYzBfcXVhZGZzOiBjbGstcy1jMC1xdWFkZnNAOTEwMzAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcXVhZGZzNjYwLUMiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweDkxMDMwMDAgMHgxMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYzAtZnMwLWNoMCIsCisJCQkJCSAgICAgImNsay1zLWMwLWZzMC1jaDEiLAorCQkJCQkgICAgICJjbGstcy1jMC1mczAtY2gyIiwKKwkJCQkJICAgICAiY2xrLXMtYzAtZnMwLWNoMyI7CisJCX07CisKKwkJY2xrX3NfYzA6IGNsb2NrZ2VuLWNAMDkxMDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkxMDMwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfYzBfcGxsMDogY2xrLXMtYzAtcGxsMCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wbGxzLWMzMi1jMF8wIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYzAtcGxsMC1vZGYtMCI7CisJCQl9OworCisJCQljbGtfc19jMF9wbGwxOiBjbGstcy1jMC1wbGwxIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBsbHMtYzMyLWMwXzEiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1jMC1wbGwxLW9kZi0wIjsKKwkJCX07CisKKwkJCWNsa19zX2MwX2ZsZXhnZW46IGNsay1zLWMwLWZsZXhnZW4geworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19jMF9wbGwwIDA+LAorCQkJCQkgPCZjbGtfc19jMF9wbGwxIDA+LAorCQkJCQkgPCZjbGtfc19jMF9xdWFkZnMgMD4sCisJCQkJCSA8JmNsa19zX2MwX3F1YWRmcyAxPiwKKwkJCQkJIDwmY2xrX3NfYzBfcXVhZGZzIDI+LAorCQkJCQkgPCZjbGtfc19jMF9xdWFkZnMgMz4sCisJCQkJCSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLWljbi1ncHUiLAorCQkJCQkJICAgICAiY2xrLWZkbWEiLAorCQkJCQkJICAgICAiY2xrLW5hbmQiLAorCQkJCQkJICAgICAiY2xrLWh2YSIsCisJCQkJCQkgICAgICJjbGstcHJvYy1zdGZlIiwKKwkJCQkJCSAgICAgImNsay1wcm9jLXRwIiwKKwkJCQkJCSAgICAgImNsay1yeC1pY24tZG11IiwKKwkJCQkJCSAgICAgImNsay1yeC1pY24taHZhIiwKKwkJCQkJCSAgICAgImNsay1pY24tY3B1IiwKKwkJCQkJCSAgICAgImNsay10eC1pY24tZG11IiwKKwkJCQkJCSAgICAgImNsay1tbWMtMCIsCisJCQkJCQkgICAgICJjbGstbW1jLTEiLAorCQkJCQkJICAgICAiY2xrLWpwZWdkZWMiLAorCQkJCQkJICAgICAiY2xrLWV4dDJmYTkiLAorCQkJCQkJICAgICAiY2xrLWljLWJkaXNwLTAiLAorCQkJCQkJICAgICAiY2xrLWljLWJkaXNwLTEiLAorCQkJCQkJICAgICAiY2xrLXBwLWRtdSIsCisJCQkJCQkgICAgICJjbGstdmlkLWRtdSIsCisJCQkJCQkgICAgICJjbGstZHNzLWxwYyIsCisJCQkJCQkgICAgICJjbGstc3QyMzEtYXVkLTAiLAorCQkJCQkJICAgICAiY2xrLXN0MjMxLWdwLTEiLAorCQkJCQkJICAgICAiY2xrLXN0MjMxLWRtdSIsCisJCQkJCQkgICAgICJjbGstaWNuLWxtaSIsCisJCQkJCQkgICAgICJjbGstdHgtaWNuLWRpc3AtMSIsCisJCQkJCQkgICAgICJjbGstaWNuLXNiYyIsCisJCQkJCQkgICAgICJjbGstc3RmZS1mcmMyIiwKKwkJCQkJCSAgICAgImNsay1ldGgtcGh5IiwKKwkJCQkJCSAgICAgImNsay1ldGgtcmVmLXBoeWNsayIsCisJCQkJCQkgICAgICJjbGstZmxhc2gtcHJvbWlwIiwKKwkJCQkJCSAgICAgImNsay1tYWluLWRpc3AiLAorCQkJCQkJICAgICAiY2xrLWF1eC1kaXNwIiwKKwkJCQkJCSAgICAgImNsay1jb21wby1kdnAiLAorCQkJCQkJICAgICAiY2xrLXR4LWljbi1oYWRlcyIsCisJCQkJCQkgICAgICJjbGstcngtaWNuLWhhZGVzIiwKKwkJCQkJCSAgICAgImNsay1pY24tcmVnLTE2IiwKKwkJCQkJCSAgICAgImNsay1wcC1oYWRlcyIsCisJCQkJCQkgICAgICJjbGstY2x1c3QtaGFkZXMiLAorCQkJCQkJICAgICAiY2xrLWh3cGUtaGFkZXMiLAorCQkJCQkJICAgICAiY2xrLWZjLWhhZGVzIjsKKwkJCX07CisJCX07CisKKwkJY2xrX3NfZDBfcXVhZGZzOiBjbGstcy1kMC1xdWFkZnNAOTEwNDAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcXVhZGZzNjYwLUQiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweDkxMDQwMDAgMHgxMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtZDAtZnMwLWNoMCIsCisJCQkJCSAgICAgImNsay1zLWQwLWZzMC1jaDEiLAorCQkJCQkgICAgICJjbGstcy1kMC1mczAtY2gyIiwKKwkJCQkJICAgICAiY2xrLXMtZDAtZnMwLWNoMyI7CisJCX07CisKKwkJY2xvY2tnZW4tZDBAMDkxMDQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkxMDQwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfZDBfZmxleGdlbjogY2xrLXMtZDAtZmxleGdlbiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2QwX3F1YWRmcyAwPiwKKwkJCQkJIDwmY2xrX3NfZDBfcXVhZGZzIDE+LAorCQkJCQkgPCZjbGtfc19kMF9xdWFkZnMgMj4sCisJCQkJCSA8JmNsa19zX2QwX3F1YWRmcyAzPiwKKwkJCQkJIDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcGNtLTAiLAorCQkJCQkJICAgICAiY2xrLXBjbS0xIiwKKwkJCQkJCSAgICAgImNsay1wY20tMiIsCisJCQkJCQkgICAgICJjbGstc3BkaWZmIiwKKwkJCQkJCSAgICAgImNsay1wY21yMTAtbWFzdGVyIiwKKwkJCQkJCSAgICAgImNsay11c2IyLXBoeSI7CisJCQl9OworCQl9OworCisJCWNsa19zX2QyX3F1YWRmczogY2xrLXMtZDItcXVhZGZzQDkxMDYwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXF1YWRmczY2MC1EIiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHg5MTA2MDAwIDB4MTAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWQyLWZzMC1jaDAiLAorCQkJCQkgICAgICJjbGstcy1kMi1mczAtY2gxIiwKKwkJCQkJICAgICAiY2xrLXMtZDItZnMwLWNoMiIsCisJCQkJCSAgICAgImNsay1zLWQyLWZzMC1jaDMiOworCQl9OworCisJCWNsa190bWRzb3V0X2hkbWk6IGNsay10bWRzb3V0LWhkbWkgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCX07CisKKwkJY2xvY2tnZW4tZDJAeDkxMDYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkxMDYwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfZDJfZmxleGdlbjogY2xrLXMtZDItZmxleGdlbiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2QyX3F1YWRmcyAwPiwKKwkJCQkJIDwmY2xrX3NfZDJfcXVhZGZzIDE+LAorCQkJCQkgPCZjbGtfc19kMl9xdWFkZnMgMj4sCisJCQkJCSA8JmNsa19zX2QyX3F1YWRmcyAzPiwKKwkJCQkJIDwmY2xrX3N5c2luPiwKKwkJCQkJIDwmY2xrX3N5c2luPiwKKwkJCQkJIDwmY2xrX3RtZHNvdXRfaGRtaT47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXBpeC1tYWluLWRpc3AiLAorCQkJCQkJICAgICAiY2xrLXBpeC1waXAiLAorCQkJCQkJICAgICAiY2xrLXBpeC1nZHAxIiwKKwkJCQkJCSAgICAgImNsay1waXgtZ2RwMiIsCisJCQkJCQkgICAgICJjbGstcGl4LWdkcDMiLAorCQkJCQkJICAgICAiY2xrLXBpeC1nZHA0IiwKKwkJCQkJCSAgICAgImNsay1waXgtYXV4LWRpc3AiLAorCQkJCQkJICAgICAiY2xrLWRlbmMiLAorCQkJCQkJICAgICAiY2xrLXBpeC1oZGRhYyIsCisJCQkJCQkgICAgICJjbGstaGRkYWMiLAorCQkJCQkJICAgICAiY2xrLXNkZGFjIiwKKwkJCQkJCSAgICAgImNsay1waXgtZHZvIiwKKwkJCQkJCSAgICAgImNsay1kdm8iLAorCQkJCQkJICAgICAiY2xrLXBpeC1oZG1pIiwKKwkJCQkJCSAgICAgImNsay10bWRzLWhkbWkiLAorCQkJCQkJICAgICAiY2xrLXJlZi1oZG1pcGh5IjsKKwkJCQkJCSAgICAgfTsKKwkJfTsKKworCQljbGtfc19kM19xdWFkZnM6IGNsay1zLWQzLXF1YWRmc0A5MTA3MDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1xdWFkZnM2NjAtRCIsICJzdCxxdWFkZnMiOworCQkJcmVnID0gPDB4OTEwNzAwMCAweDEwMDA+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1kMy1mczAtY2gwIiwKKwkJCQkJICAgICAiY2xrLXMtZDMtZnMwLWNoMSIsCisJCQkJCSAgICAgImNsay1zLWQzLWZzMC1jaDIiLAorCQkJCQkgICAgICJjbGstcy1kMy1mczAtY2gzIjsKKwkJfTsKKworCQljbG9ja2dlbi1kM0A5MTA3MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MTA3MDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2QzX2ZsZXhnZW46IGNsay1zLWQzLWZsZXhnZW4geworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19kM19xdWFkZnMgMD4sCisJCQkJCSA8JmNsa19zX2QzX3F1YWRmcyAxPiwKKwkJCQkJIDwmY2xrX3NfZDNfcXVhZGZzIDI+LAorCQkJCQkgPCZjbGtfc19kM19xdWFkZnMgMz4sCisJCQkJCSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXN0ZmUtZnJjMSIsCisJCQkJCQkgICAgICJjbGstdHNvdXQtMCIsCisJCQkJCQkgICAgICJjbGstdHNvdXQtMSIsCisJCQkJCQkgICAgICJjbGstbWNoaSIsCisJCQkJCQkgICAgICJjbGstdnNlbnMtY29tcG8iLAorCQkJCQkJICAgICAiY2xrLWZyYzEtcmVtb3RlIiwKKwkJCQkJCSAgICAgImNsay1scGMtMCIsCisJCQkJCQkgICAgICJjbGstbHBjLTEiOworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAtcGluY3RybC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC1waW5jdHJsLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlOWRmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAtcGluY3RybC5kdHNpCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1RNaWNyb2VsZWN0cm9uaWNzIExpbWl0ZWQuCisgKiBBdXRob3I6IFBldGVyIEdyaWZmaW4gPHBldGVyLmdyaWZmaW5AbGluYXJvLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgInN0LXBpbmNmZy5oIgorLyB7CisKKwlzb2MgeworCQlwaW4tY29udHJvbGxlci1yZWFyIHsKKworCQkJdXNiMCB7CisJCQkJcGluY3RybF91c2IwOiB1c2IyLTAgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCXVzYi1vYy1kZXRlY3QgPSA8JnBpbzM1IDAgQUxUMSBJTj47CisJCQkJCQl1c2ItcHdyLWVuYWJsZSA9IDwmcGlvMzUgMSBBTFQxIE9VVD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCXVzYjEgeworCQkJCXBpbmN0cmxfdXNiMTogdXNiMi0xIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQl1c2Itb2MtZGV0ZWN0ID0gPCZwaW8zNSAyIEFMVDEgSU4+OworCQkJCQkJdXNiLXB3ci1lbmFibGUgPSA8JnBpbzM1IDMgQUxUMSBPVVQ+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTYyN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLmR0c2kKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3MgTGltaXRlZC4KKyAqIEF1dGhvcjogUGV0ZXIgR3JpZmZpbiA8cGV0ZXIuZ3JpZmZpbkBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSAic3RpaDQxMC1jbG9jay5kdHNpIgorI2luY2x1ZGUgInN0aWg0MDctZmFtaWx5LmR0c2kiCisjaW5jbHVkZSAic3RpaDQxMC1waW5jdHJsLmR0c2kiCisvIHsKKworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUtcGluY3RybC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS1waW5jdHJsLmR0c2kKaW5kZXggODUwOWEwMy4uMzc5MWFkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS1waW5jdHJsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS1waW5jdHJsLmR0c2kKQEAgLTExLDMzICsxMSwzMyBAQAogLyB7CiAKIAlhbGlhc2VzIHsKLQkJZ3BpbzAJPSAmUElPMDsKLQkJZ3BpbzEJPSAmUElPMTsKLQkJZ3BpbzIJPSAmUElPMjsKLQkJZ3BpbzMJPSAmUElPMzsKLQkJZ3BpbzQJPSAmUElPNDsKLQkJZ3BpbzUJPSAmUElPNTsKLQkJZ3BpbzYJPSAmUElPNjsKLQkJZ3BpbzcJPSAmUElPNzsKLQkJZ3BpbzgJPSAmUElPODsKLQkJZ3BpbzkJPSAmUElPOTsKLQkJZ3BpbzEwCT0gJlBJTzEwOwotCQlncGlvMTEJPSAmUElPMTE7Ci0JCWdwaW8xMgk9ICZQSU8xMjsKLQkJZ3BpbzEzCT0gJlBJTzEzOwotCQlncGlvMTQJPSAmUElPMTQ7Ci0JCWdwaW8xNQk9ICZQSU8xNTsKLQkJZ3BpbzE2CT0gJlBJTzE2OwotCQlncGlvMTcJPSAmUElPMTc7Ci0JCWdwaW8xOAk9ICZQSU8xODsKLQkJZ3BpbzE5CT0gJlBJTzEwMDsKLQkJZ3BpbzIwCT0gJlBJTzEwMTsKLQkJZ3BpbzIxCT0gJlBJTzEwMjsKLQkJZ3BpbzIyCT0gJlBJTzEwMzsKLQkJZ3BpbzIzCT0gJlBJTzEwNDsKLQkJZ3BpbzI0CT0gJlBJTzEwNTsKLQkJZ3BpbzI1CT0gJlBJTzEwNjsKLQkJZ3BpbzI2CT0gJlBJTzEwNzsKKwkJZ3BpbzAJPSAmcGlvMDsKKwkJZ3BpbzEJPSAmcGlvMTsKKwkJZ3BpbzIJPSAmcGlvMjsKKwkJZ3BpbzMJPSAmcGlvMzsKKwkJZ3BpbzQJPSAmcGlvNDsKKwkJZ3BpbzUJPSAmcGlvNTsKKwkJZ3BpbzYJPSAmcGlvNjsKKwkJZ3BpbzcJPSAmcGlvNzsKKwkJZ3BpbzgJPSAmcGlvODsKKwkJZ3BpbzkJPSAmcGlvOTsKKwkJZ3BpbzEwCT0gJnBpbzEwOworCQlncGlvMTEJPSAmcGlvMTE7CisJCWdwaW8xMgk9ICZwaW8xMjsKKwkJZ3BpbzEzCT0gJnBpbzEzOworCQlncGlvMTQJPSAmcGlvMTQ7CisJCWdwaW8xNQk9ICZwaW8xNTsKKwkJZ3BpbzE2CT0gJnBpbzE2OworCQlncGlvMTcJPSAmcGlvMTc7CisJCWdwaW8xOAk9ICZwaW8xODsKKwkJZ3BpbzE5CT0gJnBpbzEwMDsKKwkJZ3BpbzIwCT0gJnBpbzEwMTsKKwkJZ3BpbzIxCT0gJnBpbzEwMjsKKwkJZ3BpbzIyCT0gJnBpbzEwMzsKKwkJZ3BpbzIzCT0gJnBpbzEwNDsKKwkJZ3BpbzI0CT0gJnBpbzEwNTsKKwkJZ3BpbzI1CT0gJnBpbzEwNjsKKwkJZ3BpbzI2CT0gJnBpbzEwNzsKIAl9OwogCiAJc29jIHsKQEAgLTUyLDcgKzUyLDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzIAkJPSA8MCAweGZlNjEwMDAwIDB4NTAwMD47CiAKLQkJCVBJTzA6IGdwaW9AZmU2MTAwMDAgeworCQkJcGlvMDogZ3Bpb0BmZTYxMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNjAsNyArNjAsNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzAiOwogCQkJfTsKLQkJCVBJTzE6IGdwaW9AZmU2MTEwMDAgeworCQkJcGlvMTogZ3Bpb0BmZTYxMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNjgsNyArNjgsNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMSI7CiAJCQl9OwotCQkJUElPMjogZ3Bpb0BmZTYxMjAwMCB7CisJCQlwaW8yOiBncGlvQGZlNjEyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC03Niw3ICs3Niw3IEBACiAJCQkJcmVnCQk9IDwweDIwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8yIjsKIAkJCX07Ci0JCQlQSU8zOiBncGlvQGZlNjEzMDAwIHsKKwkJCXBpbzM6IGdwaW9AZmU2MTMwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTg0LDcgKzg0LDcgQEAKIAkJCQlyZWcJCT0gPDB4MzAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzMiOwogCQkJfTsKLQkJCVBJTzQ6IGdwaW9AZmU2MTQwMDAgeworCQkJcGlvNDogZ3Bpb0BmZTYxNDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtOTYsOCArOTYsOCBAQAogCQkJc2JjX3NlcmlhbDEgewogCQkJCXBpbmN0cmxfc2JjX3NlcmlhbDE6c2JjX3NlcmlhbDEgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXR4CT0gPCZQSU8yIDYgQUxUMyBPVVQ+OwotCQkJCQkJcngJPSA8JlBJTzIgNyBBTFQzIElOPjsKKwkJCQkJCXR4CT0gPCZwaW8yIDYgQUxUMyBPVVQ+OworCQkJCQkJcngJPSA8JnBpbzIgNyBBTFQzIElOPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTEwNSwxNSArMTA1LDE1IEBACiAJCQlrZXlzY2FuIHsKIAkJCQlwaW5jdHJsX2tleXNjYW46IGtleXNjYW4gewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCWtleWluMCA9IDwmUElPMCAyIEFMVDIgSU4+OwotCQkJCQkJa2V5aW4xID0gPCZQSU8wIDMgQUxUMiBJTj47Ci0JCQkJCQlrZXlpbjIgPSA8JlBJTzAgNCBBTFQyIElOPjsKLQkJCQkJCWtleWluMyA9IDwmUElPMiA2IEFMVDIgSU4+OworCQkJCQkJa2V5aW4wID0gPCZwaW8wIDIgQUxUMiBJTj47CisJCQkJCQlrZXlpbjEgPSA8JnBpbzAgMyBBTFQyIElOPjsKKwkJCQkJCWtleWluMiA9IDwmcGlvMCA0IEFMVDIgSU4+OworCQkJCQkJa2V5aW4zID0gPCZwaW8yIDYgQUxUMiBJTj47CiAKLQkJCQkJCWtleW91dDAgPSA8JlBJTzEgNiBBTFQyIE9VVD47Ci0JCQkJCQlrZXlvdXQxID0gPCZQSU8xIDcgQUxUMiBPVVQ+OwotCQkJCQkJa2V5b3V0MiA9IDwmUElPMCA2IEFMVDIgT1VUPjsKLQkJCQkJCWtleW91dDMgPSA8JlBJTzIgNyBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQwID0gPCZwaW8xIDYgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MSA9IDwmcGlvMSA3IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDIgPSA8JnBpbzAgNiBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQzID0gPCZwaW8yIDcgQUxUMiBPVVQ+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMTIxLDggKzEyMSw4IEBACiAJCQlzYmNfaTJjMCB7CiAJCQkJcGluY3RybF9zYmNfaTJjMF9kZWZhdWx0OiBzYmNfaTJjMC1kZWZhdWx0IHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlzZGEgPSA8JlBJTzQgNiBBTFQxIEJJRElSPjsKLQkJCQkJCXNjbCA9IDwmUElPNCA1IEFMVDEgQklESVI+OworCQkJCQkJc2RhID0gPCZwaW80IDYgQUxUMSBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzQgNSBBTFQxIEJJRElSPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTEzMCw4ICsxMzAsOCBAQAogCQkJc2JjX2kyYzEgewogCQkJCXBpbmN0cmxfc2JjX2kyYzFfZGVmYXVsdDogc2JjX2kyYzEtZGVmYXVsdCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJc2RhID0gPCZQSU8zIDIgQUxUMiBCSURJUj47Ci0JCQkJCQlzY2wgPSA8JlBJTzMgMSBBTFQyIEJJRElSPjsKKwkJCQkJCXNkYSA9IDwmcGlvMyAyIEFMVDIgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW8zIDEgQUxUMiBCSURJUj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0xMzksNyArMTM5LDcgQEAKIAkJCXJjewogCQkJCXBpbmN0cmxfaXI6IGlyMCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJaXIgPSA8JlBJTzQgMCBBTFQyIElOPjsKKwkJCQkJCWlyID0gPCZwaW80IDAgQUxUMiBJTj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0xNDcsNDkgKzE0Nyw0OSBAQAogCQkJZ21hYzEgewogCQkJCXBpbmN0cmxfbWlpMTogbWlpMSB7CiAJCQkJCQlzdCxwaW5zIHsKLQkJCQkJCSB0eGQwICAgPSA8JlBJTzAgMCBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgdHhkMSAgID0gPCZQSU8wIDEgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHR4ZDIgICA9IDwmUElPMCAyIEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSB0eGQzICAgPSA8JlBJTzAgMyBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgdHhlciAgID0gPCZQSU8wIDQgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHR4ZW4gICA9IDwmUElPMCA1IEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSB0eGNsayAgPSA8JlBJTzAgNiBBTFQxIElOICAgTklDTEsJMAlDTEtfQT47Ci0JCQkJCQkgY29sICAgID0gPCZQSU8wIDcgQUxUMSBJTiAgIEJZUEFTUwkxMDAwPjsKLQkJCQkJCSBtZGlvICAgPSA8JlBJTzEgMCBBTFQxIE9VVCAgQllQQVNTCTA+OwotCQkJCQkJIG1kYyAgICA9IDwmUElPMSAxIEFMVDEgT1VUICBOSUNMSwkwCUNMS19BPjsKLQkJCQkJCSBjcnMgICAgPSA8JlBJTzEgMiBBTFQxIElOICAgQllQQVNTCTEwMDA+OwotCQkJCQkJIG1kaW50ICA9IDwmUElPMSAzIEFMVDEgSU4gICBCWVBBU1MJMD47Ci0JCQkJCQkgcnhkMCAgID0gPCZQSU8xIDQgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHJ4ZDEgICA9IDwmUElPMSA1IEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSByeGQyICAgPSA8JlBJTzEgNiBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgcnhkMyAgID0gPCZQSU8xIDcgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHJ4ZHYgICA9IDwmUElPMiAwIEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSByeF9lciAgPSA8JlBJTzIgMSBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgcnhjbGsgID0gPCZQSU8yIDIgQUxUMSBJTiAgIE5JQ0xLCTAJQ0xLX0E+OwotCQkJCQkJIHBoeWNsayA9IDwmUElPMiAzIEFMVDEgSU4gICBOSUNMSwkxMDAwCUNMS19BPjsKKwkJCQkJCSB0eGQwICAgPSA8JnBpbzAgMCBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgdHhkMSAgID0gPCZwaW8wIDEgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHR4ZDIgICA9IDwmcGlvMCAyIEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSB0eGQzICAgPSA8JnBpbzAgMyBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgdHhlciAgID0gPCZwaW8wIDQgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHR4ZW4gICA9IDwmcGlvMCA1IEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSB0eGNsayAgPSA8JnBpbzAgNiBBTFQxIElOICAgTklDTEsJMAlDTEtfQT47CisJCQkJCQkgY29sICAgID0gPCZwaW8wIDcgQUxUMSBJTiAgIEJZUEFTUwkxMDAwPjsKKwkJCQkJCSBtZGlvICAgPSA8JnBpbzEgMCBBTFQxIE9VVCAgQllQQVNTCTA+OworCQkJCQkJIG1kYyAgICA9IDwmcGlvMSAxIEFMVDEgT1VUICBOSUNMSwkwCUNMS19BPjsKKwkJCQkJCSBjcnMgICAgPSA8JnBpbzEgMiBBTFQxIElOICAgQllQQVNTCTEwMDA+OworCQkJCQkJIG1kaW50ICA9IDwmcGlvMSAzIEFMVDEgSU4gICBCWVBBU1MJMD47CisJCQkJCQkgcnhkMCAgID0gPCZwaW8xIDQgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHJ4ZDEgICA9IDwmcGlvMSA1IEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSByeGQyICAgPSA8JnBpbzEgNiBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgcnhkMyAgID0gPCZwaW8xIDcgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHJ4ZHYgICA9IDwmcGlvMiAwIEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSByeF9lciAgPSA8JnBpbzIgMSBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgcnhjbGsgID0gPCZwaW8yIDIgQUxUMSBJTiAgIE5JQ0xLCTAJQ0xLX0E+OworCQkJCQkJIHBoeWNsayA9IDwmcGlvMiAzIEFMVDEgSU4gICBOSUNMSwkxMDAwCUNMS19BPjsKIAkJCQkJfTsKIAkJCQl9OwogCiAJCQkJcGluY3RybF9yZ21paTE6IHJnbWlpMS0wIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQkgdHhkMCA9CSA8JlBJTzAgMCBBTFQxIE9VVCBERV9JTwkxMDAwCUNMS19BPjsKLQkJCQkJCSB0eGQxID0JIDwmUElPMCAxIEFMVDEgT1VUIERFX0lPCTEwMDAJQ0xLX0E+OwotCQkJCQkJIHR4ZDIgPQkgPCZQSU8wIDIgQUxUMSBPVVQgREVfSU8JMTAwMAlDTEtfQT47Ci0JCQkJCQkgdHhkMyA9CSA8JlBJTzAgMyBBTFQxIE9VVCBERV9JTwkxMDAwCUNMS19BPjsKLQkJCQkJCSB0eGVuID0JIDwmUElPMCA1IEFMVDEgT1VUIERFX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHR4Y2xrID0gPCZQSU8wIDYgQUxUMSBJTglOSUNMSwkwCUNMS19BPjsKLQkJCQkJCSBtZGlvID0JIDwmUElPMSAwIEFMVDEgT1VUCUJZUEFTUwkwPjsKLQkJCQkJCSBtZGMgPQkgPCZQSU8xIDEgQUxUMSBPVVQJTklDTEsJMAlDTEtfQT47Ci0JCQkJCQkgcnhkMCA9CSA8JlBJTzEgNCBBTFQxIElOIERFX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHJ4ZDEgPQkgPCZQSU8xIDUgQUxUMSBJTiBERV9JTwkwCUNMS19BPjsKLQkJCQkJCSByeGQyID0JIDwmUElPMSA2IEFMVDEgSU4gREVfSU8JMAlDTEtfQT47Ci0JCQkJCQkgcnhkMyA9CSA8JlBJTzEgNyBBTFQxIElOIERFX0lPCTAJQ0xLX0E+OworCQkJCQkJIHR4ZDAgPQkgPCZwaW8wIDAgQUxUMSBPVVQgREVfSU8JMTAwMAlDTEtfQT47CisJCQkJCQkgdHhkMSA9CSA8JnBpbzAgMSBBTFQxIE9VVCBERV9JTwkxMDAwCUNMS19BPjsKKwkJCQkJCSB0eGQyID0JIDwmcGlvMCAyIEFMVDEgT1VUIERFX0lPCTEwMDAJQ0xLX0E+OworCQkJCQkJIHR4ZDMgPQkgPCZwaW8wIDMgQUxUMSBPVVQgREVfSU8JMTAwMAlDTEtfQT47CisJCQkJCQkgdHhlbiA9CSA8JnBpbzAgNSBBTFQxIE9VVCBERV9JTwkwCUNMS19BPjsKKwkJCQkJCSB0eGNsayA9IDwmcGlvMCA2IEFMVDEgSU4JTklDTEsJMAlDTEtfQT47CisJCQkJCQkgbWRpbyA9CSA8JnBpbzEgMCBBTFQxIE9VVAlCWVBBU1MJMD47CisJCQkJCQkgbWRjID0JIDwmcGlvMSAxIEFMVDEgT1VUCU5JQ0xLCTAJQ0xLX0E+OworCQkJCQkJIHJ4ZDAgPQkgPCZwaW8xIDQgQUxUMSBJTiBERV9JTwkwCUNMS19BPjsKKwkJCQkJCSByeGQxID0JIDwmcGlvMSA1IEFMVDEgSU4gREVfSU8JMAlDTEtfQT47CisJCQkJCQkgcnhkMiA9CSA8JnBpbzEgNiBBTFQxIElOIERFX0lPCTAJQ0xLX0E+OworCQkJCQkJIHJ4ZDMgPQkgPCZwaW8xIDcgQUxUMSBJTiBERV9JTwkwCUNMS19BPjsKIAotCQkJCQkJIHJ4ZHYgPQkgIDwmUElPMiAwIEFMVDEgSU4gREVfSU8JNTAwCUNMS19BPjsKLQkJCQkJCSByeGNsayA9ICA8JlBJTzIgMiBBTFQxIElOCU5JQ0xLCTAJQ0xLX0E+OwotCQkJCQkJIHBoeWNsayA9IDwmUElPMiAzIEFMVDQgT1VUCU5JQ0xLCTAJQ0xLX0I+OworCQkJCQkJIHJ4ZHYgPQkgIDwmcGlvMiAwIEFMVDEgSU4gREVfSU8JNTAwCUNMS19BPjsKKwkJCQkJCSByeGNsayA9ICA8JnBpbzIgMiBBTFQxIElOCU5JQ0xLCTAJQ0xLX0E+OworCQkJCQkJIHBoeWNsayA9IDwmcGlvMiAzIEFMVDQgT1VUCU5JQ0xLCTAJQ0xLX0I+OwogCi0JCQkJCQkgY2xrMTI1PSA8JlBJTzMgNyBBTFQ0IElOIAlOSUNMSwkwCUNMS19BPjsKKwkJCQkJCSBjbGsxMjU9IDwmcGlvMyA3IEFMVDQgSU4gCU5JQ0xLCTAJQ0xLX0E+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcwkJPSA8MCAweGZlZTAwMDAwIDB4ODAwMD47CiAKLQkJCVBJTzU6IGdwaW9AZmVlMDAwMDAgeworCQkJcGlvNTogZ3Bpb0BmZWUwMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPNSI7CiAJCQl9OwotCQkJUElPNjogZ3Bpb0BmZWUwMTAwMCB7CisJCQlwaW82OiBncGlvQGZlZTAxMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzYiOwogCQkJfTsKLQkJCVBJTzc6IGdwaW9AZmVlMDIwMDAgeworCQkJcGlvNzogZ3Bpb0BmZWUwMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJCQkJcmVnCQk9IDwweDIwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU83IjsKIAkJCX07Ci0JCQlQSU84OiBncGlvQGZlZTAzMDAwIHsKKwkJCXBpbzg6IGdwaW9AZmVlMDMwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTIzOCw3ICsyMzgsNyBAQAogCQkJCXJlZwkJPSA8MHgzMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPOCI7CiAJCQl9OwotCQkJUElPOTogZ3Bpb0BmZWUwNDAwMCB7CisJCQlwaW85OiBncGlvQGZlZTA0MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkJCQlyZWcJCT0gPDB4NDAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzkiOwogCQkJfTsKLQkJCVBJTzEwOiBncGlvQGZlZTA1MDAwIHsKKwkJCXBpbzEwOiBncGlvQGZlZTA1MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJCQlyZWcJCT0gPDB4NTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwIjsKIAkJCX07Ci0JCQlQSU8xMTogZ3Bpb0BmZWUwNjAwMCB7CisJCQlwaW8xMTogZ3Bpb0BmZWUwNjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJCQkJcmVnCQk9IDwweDYwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMSI7CiAJCQl9OwotCQkJUElPMTI6IGdwaW9AZmVlMDcwMDAgeworCQkJcGlvMTI6IGdwaW9AZmVlMDcwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI3NCw4ICsyNzQsOCBAQAogCQkJaTJjMCB7CiAJCQkJcGluY3RybF9pMmMwX2RlZmF1bHQ6IGkyYzAtZGVmYXVsdCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJc2RhID0gPCZQSU85IDMgQUxUMSBCSURJUj47Ci0JCQkJCQlzY2wgPSA8JlBJTzkgMiBBTFQxIEJJRElSPjsKKwkJCQkJCXNkYSA9IDwmcGlvOSAzIEFMVDEgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW85IDIgQUxUMSBCSURJUj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0yODMsOCArMjgzLDggQEAKIAkJCWkyYzEgewogCQkJCXBpbmN0cmxfaTJjMV9kZWZhdWx0OiBpMmMxLWRlZmF1bHQgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXNkYSA9IDwmUElPMTIgMSBBTFQxIEJJRElSPjsKLQkJCQkJCXNjbCA9IDwmUElPMTIgMCBBTFQxIEJJRElSPjsKKwkJCQkJCXNkYSA9IDwmcGlvMTIgMSBBTFQxIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvMTIgMCBBTFQxIEJJRElSPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTMwMSw3ICszMDEsNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMJCT0gPDAgMHhmZTgyMDAwMCAweDgwMDA+OwogCi0JCQlQSU8xMzogZ3Bpb0BmZTgyMDAwMCB7CisJCQlwaW8xMzogZ3Bpb0BmZTgyMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTMiOwogCQkJfTsKLQkJCVBJTzE0OiBncGlvQGZlODIxMDAwIHsKKwkJCXBpbzE0OiBncGlvQGZlODIxMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zMTcsNyArMzE3LDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzE0IjsKIAkJCX07Ci0JCQlQSU8xNTogZ3Bpb0BmZTgyMjAwMCB7CisJCQlwaW8xNTogZ3Bpb0BmZTgyMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJCQkJcmVnCQk9IDwweDIwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xNSI7CiAJCQl9OwotCQkJUElPMTY6IGdwaW9AZmU4MjMwMDAgeworCQkJcGlvMTY6IGdwaW9AZmU4MjMwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTMzMyw3ICszMzMsNyBAQAogCQkJCXJlZwkJPSA8MHgzMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTYiOwogCQkJfTsKLQkJCVBJTzE3OiBncGlvQGZlODI0MDAwIHsKKwkJCXBpbzE3OiBncGlvQGZlODI0MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJCQlyZWcJCT0gPDB4NDAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzE3IjsKIAkJCX07Ci0JCQlQSU8xODogZ3Bpb0BmZTgyNTAwMCB7CisJCQlwaW8xODogZ3Bpb0BmZTgyNTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzUzLDggKzM1Myw4IEBACiAJCQlzZXJpYWwyIHsKIAkJCQlwaW5jdHJsX3NlcmlhbDI6IHNlcmlhbDItMCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJdHgJPSA8JlBJTzE3IDQgQUxUMiBPVVQ+OwotCQkJCQkJcngJPSA8JlBJTzE3IDUgQUxUMiBJTj47CisJCQkJCQl0eAk9IDwmcGlvMTcgNCBBTFQyIE9VVD47CisJCQkJCQlyeAk9IDwmcGlvMTcgNSBBTFQyIElOPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTM2Miw3MyArMzYyLDk0IEBACiAJCQlnbWFjMHsKIAkJCQlwaW5jdHJsX21paTA6IG1paTAgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJIG1kaW50ID0JPCZQSU8xMyA2IEFMVDIJSU4JQllQQVNTCQkwPjsKLQkJCQkJIHR4ZW4gPQkJPCZQSU8xMyA3IEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgbWRpbnQgPQk8JnBpbzEzIDYgQUxUMglJTglCWVBBU1MJCTA+OworCQkJCQkgdHhlbiA9CQk8JnBpbzEzIDcgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQT47CiAKLQkJCQkJIHR4ZDAgPQkJPCZQSU8xNCAwIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkgdHhkMSA9CQk8JlBJTzE0IDEgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCSB0eGQyID0JCTwmUElPMTQgMiBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19CPjsKLQkJCQkJIHR4ZDMgPQkJPCZQSU8xNCAzIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0I+OworCQkJCQkgdHhkMCA9CQk8JnBpbzE0IDAgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSB0eGQxID0JCTwmcGlvMTQgMSBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIHR4ZDIgPQkJPCZwaW8xNCAyIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0I+OworCQkJCQkgdHhkMyA9CQk8JnBpbzE0IDMgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQj47CiAKLQkJCQkJIHR4Y2xrID0JPCZQSU8xNSAwIEFMVDIJSU4JTklDTEsJCTAJQ0xLX0E+OwotCQkJCQkgdHhlciA9CQk8JlBJTzE1IDEgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCSBjcnMgPQkJPCZQSU8xNSAyIEFMVDIJSU4JQllQQVNTCQkxMDAwPjsKLQkJCQkJIGNvbCA9CQk8JlBJTzE1IDMgQUxUMglJTglCWVBBU1MJCTEwMDA+OwotCQkJCQkgbWRpbyAgPSAgICAgICAgPCZQSU8xNSA0IEFMVDIJT1VUCUJZUEFTUyAJMzAwMD47Ci0JCQkJCSBtZGMgICA9ICAgICAgICA8JlBJTzE1IDUgQUxUMglPVVQgICAgIE5JQ0xLICAJMCAgICAJQ0xLX0I+OworCQkJCQkgdHhjbGsgPQk8JnBpbzE1IDAgQUxUMglJTglOSUNMSwkJMAlDTEtfQT47CisJCQkJCSB0eGVyID0JCTwmcGlvMTUgMSBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIGNycyA9CQk8JnBpbzE1IDIgQUxUMglJTglCWVBBU1MJCTEwMDA+OworCQkJCQkgY29sID0JCTwmcGlvMTUgMyBBTFQyCUlOCUJZUEFTUwkJMTAwMD47CisJCQkJCSBtZGlvICA9ICAgICAgICA8JnBpbzE1IDQgQUxUMglPVVQJQllQQVNTIAkzMDAwPjsKKwkJCQkJIG1kYyAgID0gICAgICAgIDwmcGlvMTUgNSBBTFQyCU9VVCAgICAgTklDTEsgIAkwICAgIAlDTEtfQj47CiAKLQkJCQkJIHJ4ZDAgPQkJPCZQSU8xNiAwIEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCSByeGQxID0JCTwmUElPMTYgMSBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkgcnhkMiA9CQk8JlBJTzE2IDIgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJIHJ4ZDMgPQkJPCZQSU8xNiAzIEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCSByeGR2ID0JCTwmUElPMTUgNiBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkgcnhfZXIgPQk8JlBJTzE1IDcgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJIHJ4Y2xrID0JPCZQSU8xNyAwIEFMVDIJSU4JTklDTEsJCTAJQ0xLX0E+OwotCQkJCQkgcGh5Y2xrID0JPCZQSU8xMyA1IEFMVDIJT1VUCU5JQ0xLCTEwMDAJQ0xLX0E+OworCQkJCQkgcnhkMCA9CQk8JnBpbzE2IDAgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIHJ4ZDEgPQkJPCZwaW8xNiAxIEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSByeGQyID0JCTwmcGlvMTYgMiBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgcnhkMyA9CQk8JnBpbzE2IDMgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIHJ4ZHYgPQkJPCZwaW8xNSA2IEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSByeF9lciA9CTwmcGlvMTUgNyBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgcnhjbGsgPQk8JnBpbzE3IDAgQUxUMglJTglOSUNMSwkJMAlDTEtfQT47CisJCQkJCSBwaHljbGsgPQk8JnBpbzEzIDUgQUxUMglPVVQJTklDTEsJMTAwMAlDTEtfQT47CiAKIAkJCQkJfTsKIAkJCQl9OwogCiAJCQlwaW5jdHJsX2dtaWkwOiBnbWlpMCB7CiAJCQkJc3QscGlucyB7Ci0JCQkJCSBtZGludCA9CTwmUElPMTMgNglBTFQyIElOCQlCWVBBU1MJMD47Ci0JCQkJCSBtZGlvICA9ICAgICAgICA8JlBJTzE1IDQgCUFMVDIgT1VUCUJZUEFTUyAJMzAwMD47Ci0JCQkJCSBtZGMgICA9ICAgICAgICA8JlBJTzE1IDUgCUFMVDIgT1VUICAgIAlOSUNMSyAgCTAgICAgCUNMS19CPjsKLQkJCQkJIHR4ZW4gPQkJPCZQSU8xMyA3CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0E+OworCQkJCQkgbWRpbnQgPQk8JnBpbzEzIDYJQUxUMiBJTgkJQllQQVNTCTA+OworCQkJCQkgbWRpbyAgPSAgICAgICAgPCZwaW8xNSA0IAlBTFQyIE9VVAlCWVBBU1MgCTMwMDA+OworCQkJCQkgbWRjICAgPSAgICAgICAgPCZwaW8xNSA1IAlBTFQyIE9VVCAgICAJTklDTEsgIAkwICAgIAlDTEtfQj47CisJCQkJCSB0eGVuID0JCTwmcGlvMTMgNwlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19BPjsKIAotCQkJCQkgdHhkMCA9CQk8JlBJTzE0IDAJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQT47Ci0JCQkJCSB0eGQxID0JCTwmUElPMTQgMQlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19BPjsKLQkJCQkJIHR4ZDIgPQkJPCZQSU8xNCAyCUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OwotCQkJCQkgdHhkMyA9CQk8JlBJTzE0IDMJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47Ci0JCQkJCSB0eGQ0ID0JCTwmUElPMTQgNAlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKLQkJCQkJIHR4ZDUgPQkJPCZQSU8xNCA1CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OwotCQkJCQkgdHhkNiA9CQk8JlBJTzE0IDYJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47Ci0JCQkJCSB0eGQ3ID0JCTwmUElPMTQgNwlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKKwkJCQkJIHR4ZDAgPQkJPCZwaW8xNCAwCUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0E+OworCQkJCQkgdHhkMSA9CQk8JnBpbzE0IDEJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQT47CisJCQkJCSB0eGQyID0JCTwmcGlvMTQgMglBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKKwkJCQkJIHR4ZDMgPQkJPCZwaW8xNCAzCUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OworCQkJCQkgdHhkNCA9CQk8JnBpbzE0IDQJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47CisJCQkJCSB0eGQ1ID0JCTwmcGlvMTQgNQlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKKwkJCQkJIHR4ZDYgPQkJPCZwaW8xNCA2CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OworCQkJCQkgdHhkNyA9CQk8JnBpbzE0IDcJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47CiAKLQkJCQkJIHR4Y2xrID0JPCZQSU8xNSAwCUFMVDIgSU4JCU5JQ0xLCTAJQ0xLX0E+OwotCQkJCQkgdHhlciA9CQk8JlBJTzE1IDEJQUxUMiBPVVQgCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0E+OwotCQkJCQkgY3JzID0JCTwmUElPMTUgMglBTFQyIElOCQlCWVBBU1MJMTAwMD47Ci0JCQkJCSBjb2wgPQkJPCZQSU8xNSAzCUFMVDIgSU4JCUJZUEFTUwkxMDAwPjsKLQkJCQkJIHJ4ZHYgPQkJPCZQSU8xNSA2CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwotCQkJCQkgcnhfZXIgPQk8JlBJTzE1IDcJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSB0eGNsayA9CTwmcGlvMTUgMAlBTFQyIElOCQlOSUNMSwkwCUNMS19BPjsKKwkJCQkJIHR4ZXIgPQkJPCZwaW8xNSAxCUFMVDIgT1VUIAlTRV9OSUNMS19JTwkzMDAwCUNMS19BPjsKKwkJCQkJIGNycyA9CQk8JnBpbzE1IDIJQUxUMiBJTgkJQllQQVNTCTEwMDA+OworCQkJCQkgY29sID0JCTwmcGlvMTUgMwlBTFQyIElOCQlCWVBBU1MJMTAwMD47CisJCQkJCSByeGR2ID0JCTwmcGlvMTUgNglBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHJ4X2VyID0JPCZwaW8xNSA3CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwogCi0JCQkJCSByeGQwID0JCTwmUElPMTYgMAlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKLQkJCQkJIHJ4ZDEgPQkJPCZQSU8xNiAxCUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwotCQkJCQkgcnhkMiA9CQk8JlBJTzE2IDIJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47Ci0JCQkJCSByeGQzID0JCTwmUElPMTYgMwlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKLQkJCQkJIHJ4ZDQgPQkJPCZQSU8xNiA0CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwotCQkJCQkgcnhkNSA9CQk8JlBJTzE2IDUJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47Ci0JCQkJCSByeGQ2ID0JCTwmUElPMTYgNglBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKLQkJCQkJIHJ4ZDcgPQkJPCZQSU8xNiA3CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgcnhkMCA9CQk8JnBpbzE2IDAJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSByeGQxID0JCTwmcGlvMTYgMQlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHJ4ZDIgPQkJPCZwaW8xNiAyCUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgcnhkMyA9CQk8JnBpbzE2IDMJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSByeGQ0ID0JCTwmcGlvMTYgNAlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHJ4ZDUgPQkJPCZwaW8xNiA1CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgcnhkNiA9CQk8JnBpbzE2IDYJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSByeGQ3ID0JCTwmcGlvMTYgNwlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKIAotCQkJCQkgcnhjbGsgPQk8JlBJTzE3IDAJQUxUMiBJTglOSUNMSwkwCUNMS19BPjsKLQkJCQkJIGNsazEyNSA9CTwmUElPMTcgNglBTFQxIElOCU5JQ0xLCTAJQ0xLX0E+OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHljbGsgPSAgICAgICA8JlBJTzEzIDUgICAgICAgQUxUNCBPVVQgTklDTEsgICAwICAgICAgIENMS19CPjsKKwkJCQkJIHJ4Y2xrID0JPCZwaW8xNyAwCUFMVDIgSU4JTklDTEsJMAlDTEtfQT47CisJCQkJCSBjbGsxMjUgPQk8JnBpbzE3IDYJQUxUMSBJTglOSUNMSwkwCUNMS19BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5Y2xrID0gICAgICAgPCZwaW8xMyA1ICAgICAgIEFMVDQgT1VUIE5JQ0xLICAgMCAgICAgICBDTEtfQj47CiAKIAogCQkJCQl9OwogCQkJCX07CiAJCQl9OworCisJCQltbWMwIHsKKwkJCQlwaW5jdHJsX21tYzA6IG1tYzAgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCW1tY2NsayA9IDwmcGlvMTMgNCBBTFQ0IEJJRElSX1BVIE5JQ0xLIDAgQ0xLX0I+OworCQkJCQkJZGF0YTAgID0gPCZwaW8xNCA0IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTEgID0gPCZwaW8xNCA1IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTIgID0gPCZwaW8xNCA2IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTMgID0gPCZwaW8xNCA3IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJY21kICAgID0gPCZwaW8xNSAxIEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJd3AgICAgID0gPCZwaW8xNSAzIEFMVDQgSU4+OworCQkJCQkJZGF0YTQgID0gPCZwaW8xNiA0IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTUgID0gPCZwaW8xNiA1IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTYgID0gPCZwaW8xNiA2IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTcgID0gPCZwaW8xNiA3IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJcHdyICAgID0gPCZwaW8xNyAxIEFMVDQgT1VUPjsKKwkJCQkJCWNkICAgICA9IDwmcGlvMTcgMiBBTFQ0IElOPjsKKwkJCQkJCWxlZCAgICA9IDwmcGlvMTcgMyBBTFQ0IE9VVD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJcGluLWNvbnRyb2xsZXItbGVmdCB7CkBAIC00NDIsNyArNDYzLDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzCQk9IDwwIDB4ZmQ2YjAwMDAgMHgzMDAwPjsKIAotCQkJUElPMTAwOiBncGlvQGZkNmIwMDAwIHsKKwkJCXBpbzEwMDogZ3Bpb0BmZDZiMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNDUwLDcgKzQ3MSw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTAwIjsKIAkJCX07Ci0JCQlQSU8xMDE6IGdwaW9AZmQ2YjEwMDAgeworCQkJcGlvMTAxOiBncGlvQGZkNmIxMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC00NTgsNyArNDc5LDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwMSI7CiAJCQl9OwotCQkJUElPMTAyOiBncGlvQGZkNmIyMDAwIHsKKwkJCXBpbzEwMjogZ3Bpb0BmZDZiMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNDc5LDcgKzUwMCw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcwkJPSA8MCAweGZkMzMwMDAwIDB4NTAwMD47CiAKLQkJCVBJTzEwMzogZ3Bpb0BmZDMzMDAwMCB7CisJCQlwaW8xMDM6IGdwaW9AZmQzMzAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTQ4Nyw3ICs1MDgsNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwMyI7CiAJCQl9OwotCQkJUElPMTA0OiBncGlvQGZkMzMxMDAwIHsKKwkJCXBpbzEwNDogZ3Bpb0BmZDMzMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNDk1LDcgKzUxNiw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDQiOwogCQkJfTsKLQkJCVBJTzEwNTogZ3Bpb0BmZDMzMjAwMCB7CisJCQlwaW8xMDU6IGdwaW9AZmQzMzIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTUwMyw3ICs1MjQsNyBAQAogCQkJCXJlZwkJPSA8MHgyMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTA1IjsKIAkJCX07Ci0JCQlQSU8xMDY6IGdwaW9AZmQzMzMwMDAgeworCQkJcGlvMTA2OiBncGlvQGZkMzMzMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC01MTEsNyArNTMyLDcgQEAKIAkJCQlyZWcJCT0gPDB4MzAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwNiI7CiAJCQl9OwotCQkJUElPMTA3OiBncGlvQGZkMzM0MDAwIHsKKwkJCXBpbzEwNzogZ3Bpb0BmZDMzNDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS5kdHNpCmluZGV4IGEwZjZmNzUuLjkxOThjMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LmR0c2kKQEAgLTIxOCw1ICsyMTgsMTcgQEAKIAkJCXJlc2V0cwk9IDwmcG93ZXJkb3duIFNUSUg0MTVfS0VZU0NBTl9QT1dFUkRPV04+LAogCQkJCSAgPCZzb2Z0cmVzZXQgU1RJSDQxNV9LRVlTQ0FOX1NPRlRSRVNFVD47CiAJCX07CisKKwkJbW1jMDogc2RoY2lAZmU4MWUwMDAgeworCQkJY29tcGF0aWJsZSAgICAgID0gInN0LHNkaGNpIjsKKwkJCXN0YXR1cyAgICAgICAgICA9ICJkaXNhYmxlZCI7CisJCQlyZWcgICAgICAgICAgICAgPSA8MHhmZTgxZTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyAgICAgID0gPEdJQ19TUEkgMTQ1IElSUV9UWVBFX05PTkU+OworCQkJaW50ZXJydXB0LW5hbWVzID0gIm1tY2lycSI7CisJCQlwaW5jdHJsLW5hbWVzICAgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgICAgICAgPSA8JnBpbmN0cmxfbW1jMD47CisJCQljbG9jay1uYW1lcyAgICAgPSAibW1jIjsKKwkJCWNsb2NrcyAgICAgICAgICA9IDwmY2xrX3NfYTFfbHMgMT47CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjAuZHRzCmluZGV4IDRlMmRmNjYuLjIwMGE4MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjAuZHRzCkBAIC0xMiw0ICsxMiwyNiBAQAogLyB7CiAJbW9kZWwgPSAiU1RpSDQxNiBCMjAyMCI7CiAJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2LWIyMDIwIiwgInN0LHN0aWg0MTYiOworCisJc29jIHsKKwkJbW1jMTogc2RoY2lAZmU4MWYwMDAgeworCQkJc3RhdHVzICAgICAgID0gIm9rYXkiOworCQkJYnVzLXdpZHRoICAgID0gPDg+OworCQkJbm9uLXJlbW92YWJsZTsKKwkJfTsKKworCQltaXBoeTM2NXhfcGh5OiBwaHlAZmUzODIwMDAgeworCQkJcGh5X3BvcnQwOiBwb3J0QGZlMzgyMDAwIHsKKwkJCQlzdCxzYXRhLWdlbiA9IDwzPjsKKwkJCX07CisKKwkJCXBoeV9wb3J0MTogcG9ydEBmZTM4YTAwMCB7CisJCQkJc3QscGNpZS10eC1wb2wtaW52OworCQkJfTsKKwkJfTsKKworCQlzYXRhMDogc2F0YUBmZTM4MDAwMHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjBlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjBlLmR0cwppbmRleCBiYTBmYTJjLi45NjE3OTllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMGUuZHRzCkBAIC0xOSwxNyArMTksMzcgQEAKIAkJCXJlZCB7CiAJCQkJI2dwaW8tY2VsbHMJCT0gPDE+OwogCQkJCWxhYmVsCQkJPSAiRnJvbnQgUGFuZWwgTEVEIjsKLQkJCQlncGlvcwkJCT0gPCZQSU80IDE+OworCQkJCWdwaW9zCQkJPSA8JnBpbzQgMT47CiAJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyCT0gImhlYXJ0YmVhdCI7CiAJCQl9OwogCQkJZ3JlZW4gewotCQkJCWdwaW9zCQkJPSA8JlBJTzEgMz47CisJCQkJZ3Bpb3MJCQk9IDwmcGlvMSAzPjsKIAkJCQlkZWZhdWx0LXN0YXRlIAkJPSAib2ZmIjsKIAkJCX07CiAJCX07CiAKIAkJZXRoZXJuZXQxOiBkd21hY0BmZWYwODAwMCB7Ci0JCQlzbnBzLHJlc2V0LWdwaW8gPSA8JlBJTzAgNz47CisJCQlzbnBzLHJlc2V0LWdwaW8gPSA8JnBpbzAgNz47CisJCX07CisKKwkJbW1jMTogc2RoY2lAZmU4MWYwMDAgeworCQkJc3RhdHVzICAgICAgID0gIm9rYXkiOworCQkJYnVzLXdpZHRoICAgID0gPDg+OworCQkJbm9uLXJlbW92YWJsZTsKKwkJfTsKKworCQltaXBoeTM2NXhfcGh5OiBwaHlAZmUzODIwMDAgeworCQkJcGh5X3BvcnQwOiBwb3J0QGZlMzgyMDAwIHsKKwkJCQlzdCxzYXRhLWdlbiA9IDwzPjsKKwkJCX07CisKKwkJCXBoeV9wb3J0MTogcG9ydEBmZTM4YTAwMCB7CisJCQkJc3QscGNpZS10eC1wb2wtaW52OworCQkJfTsKKwkJfTsKKworCQlzYXRhMDogc2F0YUBmZTM4MDAwMHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtcGluY3RybC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1waW5jdHJsLmR0c2kKaW5kZXggZWU2YzExOS4uOWNjY2YyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1waW5jdHJsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1waW5jdHJsLmR0c2kKQEAgLTEyLDM2ICsxMiwzNiBAQAogLyB7CiAKIAlhbGlhc2VzIHsKLQkJZ3BpbzAJPSAmUElPMDsKLQkJZ3BpbzEJPSAmUElPMTsKLQkJZ3BpbzIJPSAmUElPMjsKLQkJZ3BpbzMJPSAmUElPMzsKLQkJZ3BpbzQJPSAmUElPNDsKLQkJZ3BpbzUJPSAmUElPNDA7Ci0JCWdwaW82CT0gJlBJTzU7Ci0JCWdwaW83CT0gJlBJTzY7Ci0JCWdwaW84CT0gJlBJTzc7Ci0JCWdwaW85CT0gJlBJTzg7Ci0JCWdwaW8xMAk9ICZQSU85OwotCQlncGlvMTEJPSAmUElPMTA7Ci0JCWdwaW8xMgk9ICZQSU8xMTsKLQkJZ3BpbzEzCT0gJlBJTzEyOwotCQlncGlvMTQJPSAmUElPMzA7Ci0JCWdwaW8xNQk9ICZQSU8zMTsKLQkJZ3BpbzE2CT0gJlBJTzEzOwotCQlncGlvMTcJPSAmUElPMTQ7Ci0JCWdwaW8xOAk9ICZQSU8xNTsKLQkJZ3BpbzE5CT0gJlBJTzE2OwotCQlncGlvMjAJPSAmUElPMTc7Ci0JCWdwaW8yMQk9ICZQSU8xODsKLQkJZ3BpbzIyCT0gJlBJTzEwMDsKLQkJZ3BpbzIzCT0gJlBJTzEwMTsKLQkJZ3BpbzI0CT0gJlBJTzEwMjsKLQkJZ3BpbzI1CT0gJlBJTzEwMzsKLQkJZ3BpbzI2CT0gJlBJTzEwNDsKLQkJZ3BpbzI3CT0gJlBJTzEwNTsKLQkJZ3BpbzI4CT0gJlBJTzEwNjsKLQkJZ3BpbzI5CT0gJlBJTzEwNzsKKwkJZ3BpbzAJPSAmcGlvMDsKKwkJZ3BpbzEJPSAmcGlvMTsKKwkJZ3BpbzIJPSAmcGlvMjsKKwkJZ3BpbzMJPSAmcGlvMzsKKwkJZ3BpbzQJPSAmcGlvNDsKKwkJZ3BpbzUJPSAmcGlvNDA7CisJCWdwaW82CT0gJnBpbzU7CisJCWdwaW83CT0gJnBpbzY7CisJCWdwaW84CT0gJnBpbzc7CisJCWdwaW85CT0gJnBpbzg7CisJCWdwaW8xMAk9ICZwaW85OworCQlncGlvMTEJPSAmcGlvMTA7CisJCWdwaW8xMgk9ICZwaW8xMTsKKwkJZ3BpbzEzCT0gJnBpbzEyOworCQlncGlvMTQJPSAmcGlvMzA7CisJCWdwaW8xNQk9ICZwaW8zMTsKKwkJZ3BpbzE2CT0gJnBpbzEzOworCQlncGlvMTcJPSAmcGlvMTQ7CisJCWdwaW8xOAk9ICZwaW8xNTsKKwkJZ3BpbzE5CT0gJnBpbzE2OworCQlncGlvMjAJPSAmcGlvMTc7CisJCWdwaW8yMQk9ICZwaW8xODsKKwkJZ3BpbzIyCT0gJnBpbzEwMDsKKwkJZ3BpbzIzCT0gJnBpbzEwMTsKKwkJZ3BpbzI0CT0gJnBpbzEwMjsKKwkJZ3BpbzI1CT0gJnBpbzEwMzsKKwkJZ3BpbzI2CT0gJnBpbzEwNDsKKwkJZ3BpbzI3CT0gJnBpbzEwNTsKKwkJZ3BpbzI4CT0gJnBpbzEwNjsKKwkJZ3BpbzI5CT0gJnBpbzEwNzsKIAl9OwogCiAJc29jIHsKQEAgLTU2LDcgKzU2LDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzCQk9IDwwIDB4ZmU2MTAwMDAgMHg2MDAwPjsKIAotCQkJUElPMDogZ3Bpb0BmZTYxMDAwMCB7CisJCQlwaW8wOiBncGlvQGZlNjEwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMgPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC02NCw3ICs2NCw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMCI7CiAJCQl9OwotCQkJUElPMTogZ3Bpb0BmZTYxMTAwMCB7CisJCQlwaW8xOiBncGlvQGZlNjExMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC03Miw3ICs3Miw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xIjsKIAkJCX07Ci0JCQlQSU8yOiBncGlvQGZlNjEyMDAwIHsKKwkJCXBpbzI6IGdwaW9AZmU2MTIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTgwLDcgKzgwLDcgQEAKIAkJCQlyZWcJCT0gPDB4MjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzIiOwogCQkJfTsKLQkJCVBJTzM6IGdwaW9AZmU2MTMwMDAgeworCQkJcGlvMzogZ3Bpb0BmZTYxMzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtODgsNyArODgsNyBAQAogCQkJCXJlZwkJPSA8MHgzMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMyI7CiAJCQl9OwotCQkJUElPNDogZ3Bpb0BmZTYxNDAwMCB7CisJCQlwaW80OiBncGlvQGZlNjE0MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC05Niw3ICs5Niw3IEBACiAJCQkJcmVnCQk9IDwweDQwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU80IjsKIAkJCX07Ci0JCQlQSU80MDogZ3Bpb0BmZTYxNTAwMCB7CisJCQlwaW80MDogZ3Bpb0BmZTYxNTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMTA5LDE1ICsxMDksMTUgQEAKIAkJCXJjewogCQkJCXBpbmN0cmxfaXI6IGlyMCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJaXIgPSA8JlBJTzQgMCBBTFQyIElOPjsKKwkJCQkJCWlyID0gPCZwaW80IDAgQUxUMiBJTj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CiAJCQlzYmNfc2VyaWFsMSB7CiAJCQkJcGluY3RybF9zYmNfc2VyaWFsMTogc2JjX3NlcmlhbDEgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXR4CT0gPCZQSU8yIDYgQUxUMyBPVVQ+OwotCQkJCQkJcngJPSA8JlBJTzIgNyBBTFQzIElOPjsKKwkJCQkJCXR4CT0gPCZwaW8yIDYgQUxUMyBPVVQ+OworCQkJCQkJcngJPSA8JnBpbzIgNyBBTFQzIElOPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTEyNSwxNSArMTI1LDE1IEBACiAJCQlrZXlzY2FuIHsKIAkJCQlwaW5jdHJsX2tleXNjYW46IGtleXNjYW4gewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCWtleWluMCA9IDwmUElPMCAyIEFMVDIgSU4+OwotCQkJCQkJa2V5aW4xID0gPCZQSU8wIDMgQUxUMiBJTj47Ci0JCQkJCQlrZXlpbjIgPSA8JlBJTzAgNCBBTFQyIElOPjsKLQkJCQkJCWtleWluMyA9IDwmUElPMiA2IEFMVDIgSU4+OworCQkJCQkJa2V5aW4wID0gPCZwaW8wIDIgQUxUMiBJTj47CisJCQkJCQlrZXlpbjEgPSA8JnBpbzAgMyBBTFQyIElOPjsKKwkJCQkJCWtleWluMiA9IDwmcGlvMCA0IEFMVDIgSU4+OworCQkJCQkJa2V5aW4zID0gPCZwaW8yIDYgQUxUMiBJTj47CiAKLQkJCQkJCWtleW91dDAgPSA8JlBJTzEgNiBBTFQyIE9VVD47Ci0JCQkJCQlrZXlvdXQxID0gPCZQSU8xIDcgQUxUMiBPVVQ+OwotCQkJCQkJa2V5b3V0MiA9IDwmUElPMCA2IEFMVDIgT1VUPjsKLQkJCQkJCWtleW91dDMgPSA8JlBJTzIgNyBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQwID0gPCZwaW8xIDYgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MSA9IDwmcGlvMSA3IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDIgPSA8JnBpbzAgNiBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQzID0gPCZwaW8yIDcgQUxUMiBPVVQ+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMTQxLDggKzE0MSwxNyBAQAogCQkJc2JjX2kyYzAgewogCQkJCXBpbmN0cmxfc2JjX2kyYzBfZGVmYXVsdDogc2JjX2kyYzAtZGVmYXVsdCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJc2RhID0gPCZQSU80IDYgQUxUMSBCSURJUj47Ci0JCQkJCQlzY2wgPSA8JlBJTzQgNSBBTFQxIEJJRElSPjsKKwkJCQkJCXNkYSA9IDwmcGlvNCA2IEFMVDEgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW80IDUgQUxUMSBCSURJUj47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCXVzYiB7CisJCQkJcGluY3RybF91c2IzOiB1c2IzIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQlvYy1kZXRlY3QgPSA8JnBpbzQwIDAgQUxUMSBJTj47CisJCQkJCQlwd3ItZW5hYmxlID0gPCZwaW80MCAxIEFMVDEgT1VUPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTE1MCw4ICsxNTksOCBAQAogCQkJc2JjX2kyYzEgewogCQkJCXBpbmN0cmxfc2JjX2kyYzFfZGVmYXVsdDogc2JjX2kyYzEtZGVmYXVsdCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJc2RhID0gPCZQSU8zIDIgQUxUMiBCSURJUj47Ci0JCQkJCQlzY2wgPSA8JlBJTzMgMSBBTFQyIEJJRElSPjsKKwkJCQkJCXNkYSA9IDwmcGlvMyAyIEFMVDIgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW8zIDEgQUxUMiBCSURJUj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0xNTksNTEgKzE2OCw1MSBAQAogCQkJZ21hYzEgewogCQkJCXBpbmN0cmxfbWlpMTogbWlpMSB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJdHhkMCA9IDwmUElPMCAwIEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJdHhkMSA9IDwmUElPMCAxIEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJdHhkMiA9IDwmUElPMCAyIEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJdHhkMyA9IDwmUElPMCAzIEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJdHhlciA9IDwmUElPMCA0IEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJdHhlbiA9IDwmUElPMCA1IEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJdHhjbGsgPSA8JlBJTzAgNiBBTFQxIElOIE5JQ0xLIDAgQ0xLX0E+OwotCQkJCQkJY29sID0gICA8JlBJTzAgNyBBTFQxIElOIEJZUEFTUyAxMDAwPjsKKwkJCQkJCXR4ZDAgPSA8JnBpbzAgMCBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXR4ZDEgPSA8JnBpbzAgMSBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXR4ZDIgPSA8JnBpbzAgMiBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXR4ZDMgPSA8JnBpbzAgMyBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXR4ZXIgPSA8JnBpbzAgNCBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXR4ZW4gPSA8JnBpbzAgNSBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXR4Y2xrID0gPCZwaW8wIDYgQUxUMSBJTiBOSUNMSyAwIENMS19BPjsKKwkJCQkJCWNvbCA9ICAgPCZwaW8wIDcgQUxUMSBJTiBCWVBBU1MgMTAwMD47CiAKLQkJCQkJCW1kaW8gPSAgPCZQSU8xIDAgQUxUMSBPVVQgQllQQVNTIDE1MDA+OwotCQkJCQkJbWRjID0gICA8JlBJTzEgMSBBTFQxIE9VVCBOSUNMSyAwIENMS19BPjsKLQkJCQkJCWNycyA9ICAgPCZQSU8xIDIgQUxUMSBJTiBCWVBBU1MgMTAwMD47Ci0JCQkJCQltZGludCA9IDwmUElPMSAzIEFMVDEgSU4gQllQQVNTIDA+OwotCQkJCQkJcnhkMCA9ICA8JlBJTzEgNCBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhkMSA9ICA8JlBJTzEgNSBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhkMiA9ICA8JlBJTzEgNiBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhkMyA9ICA8JlBJTzEgNyBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJbWRpbyA9ICA8JnBpbzEgMCBBTFQxIE9VVCBCWVBBU1MgMTUwMD47CisJCQkJCQltZGMgPSAgIDwmcGlvMSAxIEFMVDEgT1VUIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJY3JzID0gICA8JnBpbzEgMiBBTFQxIElOIEJZUEFTUyAxMDAwPjsKKwkJCQkJCW1kaW50ID0gPCZwaW8xIDMgQUxUMSBJTiBCWVBBU1MgMD47CisJCQkJCQlyeGQwID0gIDwmcGlvMSA0IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGQxID0gIDwmcGlvMSA1IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGQyID0gIDwmcGlvMSA2IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGQzID0gIDwmcGlvMSA3IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CiAKLQkJCQkJCXJ4ZHYgPSAgPCZQSU8yIDAgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4X2VyID0gPCZQSU8yIDEgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4Y2xrID0gPCZQSU8yIDIgQUxUMSBJTiBOSUNMSyAwIENMS19BPjsKLQkJCQkJCXBoeWNsayA9IDwmUElPMiAzIEFMVDEgT1VUIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJcnhkdiA9ICA8JnBpbzIgMCBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhfZXIgPSA8JnBpbzIgMSBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhjbGsgPSA8JnBpbzIgMiBBTFQxIElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJcGh5Y2xrID0gPCZwaW8yIDMgQUxUMSBPVVQgTklDTEsgMCBDTEtfQT47CiAJCQkJCX07CiAJCQkJfTsKIAkJCQlwaW5jdHJsX3JnbWlpMTogcmdtaWkxLTAgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXR4ZDAgPSAgPCZQSU8wIDAgQUxUMSBPVVQgREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCXR4ZDEgPSAgPCZQSU8wIDEgQUxUMSBPVVQgREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCXR4ZDIgPSAgPCZQSU8wIDIgQUxUMSBPVVQgREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCXR4ZDMgPSAgPCZQSU8wIDMgQUxUMSBPVVQgREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCXR4ZW4gPSAgPCZQSU8wIDUgQUxUMSBPVVQgREVfSU8gMCAgIENMS19BPjsKLQkJCQkJCXR4Y2xrID0gPCZQSU8wIDYgQUxUMSBJTiAgTklDTEsgMCAgIENMS19BPjsKKwkJCQkJCXR4ZDAgPSAgPCZwaW8wIDAgQUxUMSBPVVQgREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCXR4ZDEgPSAgPCZwaW8wIDEgQUxUMSBPVVQgREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCXR4ZDIgPSAgPCZwaW8wIDIgQUxUMSBPVVQgREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCXR4ZDMgPSAgPCZwaW8wIDMgQUxUMSBPVVQgREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCXR4ZW4gPSAgPCZwaW8wIDUgQUxUMSBPVVQgREVfSU8gMCAgIENMS19BPjsKKwkJCQkJCXR4Y2xrID0gPCZwaW8wIDYgQUxUMSBJTiAgTklDTEsgMCAgIENMS19BPjsKIAotCQkJCQkJbWRpbyA9IDwmUElPMSAwIEFMVDEgT1VUIEJZUEFTUyAwPjsKLQkJCQkJCW1kYyAgPSA8JlBJTzEgMSBBTFQxIE9VVCBOSUNMSyAgMCBDTEtfQT47Ci0JCQkJCQlyeGQwID0gPCZQSU8xIDQgQUxUMSBJTiBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJcnhkMSA9IDwmUElPMSA1IEFMVDEgSU4gREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCXJ4ZDIgPSA8JlBJTzEgNiBBTFQxIElOIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQlyeGQzID0gPCZQSU8xIDcgQUxUMSBJTiBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJbWRpbyA9IDwmcGlvMSAwIEFMVDEgT1VUIEJZUEFTUyAwPjsKKwkJCQkJCW1kYyAgPSA8JnBpbzEgMSBBTFQxIE9VVCBOSUNMSyAgMCBDTEtfQT47CisJCQkJCQlyeGQwID0gPCZwaW8xIDQgQUxUMSBJTiBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJcnhkMSA9IDwmcGlvMSA1IEFMVDEgSU4gREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCXJ4ZDIgPSA8JnBpbzEgNiBBTFQxIElOIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQlyeGQzID0gPCZwaW8xIDcgQUxUMSBJTiBERV9JTyA1MDAgQ0xLX0E+OwogCi0JCQkJCQlyeGR2ICAgPSA8JlBJTzIgMCBBTFQxIElOICBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJcnhjbGsgID0gPCZQSU8yIDIgQUxUMSBJTiAgTklDTEsgMCAgIENMS19BPjsKLQkJCQkJCXBoeWNsayA9IDwmUElPMiAzIEFMVDQgT1VUIE5JQ0xLIDAgICBDTEtfQj47CisJCQkJCQlyeGR2ICAgPSA8JnBpbzIgMCBBTFQxIElOICBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJcnhjbGsgID0gPCZwaW8yIDIgQUxUMSBJTiAgTklDTEsgMCAgIENMS19BPjsKKwkJCQkJCXBoeWNsayA9IDwmcGlvMiAzIEFMVDQgT1VUIE5JQ0xLIDAgICBDTEtfQj47CiAKLQkJCQkJCWNsazEyNT0gPCZQSU8zIDcgQUxUNCBJTiBOSUNMSyAwIENMS19BPjsKKwkJCQkJCWNsazEyNT0gPCZwaW8zIDcgQUxUNCBJTiBOSUNMSyAwIENMS19BPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTIyMCw3ICsyMjksNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMJCT0gPDAgMHhmZWUwMDAwMCAweDEwMDAwPjsKIAotCQkJUElPNTogZ3Bpb0BmZWUwMDAwMCB7CisJCQlwaW81OiBncGlvQGZlZTAwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yMjgsNyArMjM3LDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU81IjsKIAkJCX07Ci0JCQlQSU82OiBncGlvQGZlZTAxMDAwIHsKKwkJCXBpbzY6IGdwaW9AZmVlMDEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTIzNiw3ICsyNDUsNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPNiI7CiAJCQl9OwotCQkJUElPNzogZ3Bpb0BmZWUwMjAwMCB7CisJCQlwaW83OiBncGlvQGZlZTAyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yNDQsNyArMjUzLDcgQEAKIAkJCQlyZWcJCT0gPDB4MjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzciOwogCQkJfTsKLQkJCVBJTzg6IGdwaW9AZmVlMDMwMDAgeworCQkJcGlvODogZ3Bpb0BmZWUwMzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjUyLDcgKzI2MSw3IEBACiAJCQkJcmVnCQk9IDwweDMwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU84IjsKIAkJCX07Ci0JCQlQSU85OiBncGlvQGZlZTA0MDAwIHsKKwkJCXBpbzk6IGdwaW9AZmVlMDQwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI2MCw3ICsyNjksNyBAQAogCQkJCXJlZwkJPSA8MHg0MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPOSI7CiAJCQl9OwotCQkJUElPMTA6IGdwaW9AZmVlMDUwMDAgeworCQkJcGlvMTA6IGdwaW9AZmVlMDUwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI2OCw3ICsyNzcsNyBAQAogCQkJCXJlZwkJPSA8MHg1MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTAiOwogCQkJfTsKLQkJCVBJTzExOiBncGlvQGZlZTA2MDAwIHsKKwkJCXBpbzExOiBncGlvQGZlZTA2MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yNzYsNyArMjg1LDcgQEAKIAkJCQlyZWcJCT0gPDB4NjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzExIjsKIAkJCX07Ci0JCQlQSU8xMjogZ3Bpb0BmZWUwNzAwMCB7CisJCQlwaW8xMjogZ3Bpb0BmZWUwNzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjg0LDcgKzI5Myw3IEBACiAJCQkJcmVnCQk9IDwweDcwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMiI7CiAJCQl9OwotCQkJUElPMzA6IGdwaW9AZmVlMDgwMDAgeworCQkJcGlvMzA6IGdwaW9AZmVlMDgwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI5Miw3ICszMDEsNyBAQAogCQkJCXJlZwkJPSA8MHg4MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMzAiOwogCQkJfTsKLQkJCVBJTzMxOiBncGlvQGZlZTA5MDAwIHsKKwkJCXBpbzMxOiBncGlvQGZlZTA5MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zMDQsNyArMzEzLDcgQEAKIAkJCXNlcmlhbDItb2UgewogCQkJCXBpbmN0cmxfc2VyaWFsMl9vZTogc2VyaWFsMi0xIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlvdXRwdXQtZW5hYmxlCT0gPCZQSU8xMSAzIEFMVDIgT1VUPjsKKwkJCQkJCW91dHB1dC1lbmFibGUJPSA8JnBpbzExIDMgQUxUMiBPVVQ+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMzEyLDE3ICszMjEsMjcgQEAKIAkJCWkyYzAgewogCQkJCXBpbmN0cmxfaTJjMF9kZWZhdWx0OiBpMmMwLWRlZmF1bHQgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXNkYSA9IDwmUElPOSAzIEFMVDEgQklESVI+OwotCQkJCQkJc2NsID0gPCZQSU85IDIgQUxUMSBCSURJUj47CisJCQkJCQlzZGEgPSA8JnBpbzkgMyBBTFQxIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvOSAyIEFMVDEgQklESVI+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwogCisJCQl1c2IgeworCQkJCXBpbmN0cmxfdXNiMDogdXNiMCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJb2MtZGV0ZWN0ID0gPCZwaW85IDQgQUxUMSBJTj47CisJCQkJCQlwd3ItZW5hYmxlID0gPCZwaW85IDUgQUxUMSBPVVQ+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisKIAkJCWkyYzEgewogCQkJCXBpbmN0cmxfaTJjMV9kZWZhdWx0OiBpMmMxLWRlZmF1bHQgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXNkYSA9IDwmUElPMTIgMSBBTFQxIEJJRElSPjsKLQkJCQkJCXNjbCA9IDwmUElPMTIgMCBBTFQxIEJJRElSPjsKKwkJCQkJCXNkYSA9IDwmcGlvMTIgMSBBTFQxIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvMTIgMCBBTFQxIEJJRElSPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTMzMCwxMiArMzQ5LDEyIEBACiAJCQlmc20gewogCQkJCXBpbmN0cmxfZnNtOiBmc20gewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXNwaS1mc20tY2xrICA9IDwmUElPMTIgMiBBTFQxIE9VVD47Ci0JCQkJCQlzcGktZnNtLWNzICAgPSA8JlBJTzEyIDMgQUxUMSBPVVQ+OwotCQkJCQkJc3BpLWZzbS1tb3NpID0gPCZQSU8xMiA0IEFMVDEgT1VUPjsKLQkJCQkJCXNwaS1mc20tbWlzbyA9IDwmUElPMTIgNSBBTFQxIElOPjsKLQkJCQkJCXNwaS1mc20taG9sICA9IDwmUElPMTIgNiBBTFQxIE9VVD47Ci0JCQkJCQlzcGktZnNtLXdwICAgPSA8JlBJTzEyIDcgQUxUMSBPVVQ+OworCQkJCQkJc3BpLWZzbS1jbGsgID0gPCZwaW8xMiAyIEFMVDEgT1VUPjsKKwkJCQkJCXNwaS1mc20tY3MgICA9IDwmcGlvMTIgMyBBTFQxIE9VVD47CisJCQkJCQlzcGktZnNtLW1vc2kgPSA8JnBpbzEyIDQgQUxUMSBPVVQ+OworCQkJCQkJc3BpLWZzbS1taXNvID0gPCZwaW8xMiA1IEFMVDEgSU4+OworCQkJCQkJc3BpLWZzbS1ob2wgID0gPCZwaW8xMiA2IEFMVDEgT1VUPjsKKwkJCQkJCXNwaS1mc20td3AgICA9IDwmcGlvMTIgNyBBTFQxIE9VVD47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0zNTIsNyArMzcxLDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzIAkJPSA8MCAweGZlODIwMDAwIDB4NjAwMD47CiAKLQkJCVBJTzEzOiBncGlvQGZlODIwMDAwIHsKKwkJCXBpbzEzOiBncGlvQGZlODIwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zNjAsNyArMzc5LDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMyI7CiAJCQl9OwotCQkJUElPMTQ6IGdwaW9AZmU4MjEwMDAgeworCQkJcGlvMTQ6IGdwaW9AZmU4MjEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTM2OCw3ICszODcsNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTQiOwogCQkJfTsKLQkJCVBJTzE1OiBncGlvQGZlODIyMDAwIHsKKwkJCXBpbzE1OiBncGlvQGZlODIyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zNzYsNyArMzk1LDcgQEAKIAkJCQlyZWcJCT0gPDB4MjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzE1IjsKIAkJCX07Ci0JCQlQSU8xNjogZ3Bpb0BmZTgyMzAwMCB7CisJCQlwaW8xNjogZ3Bpb0BmZTgyMzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzg0LDcgKzQwMyw3IEBACiAJCQkJcmVnCQk9IDwweDMwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xNiI7CiAJCQl9OwotCQkJUElPMTc6IGdwaW9AZmU4MjQwMDAgeworCQkJcGlvMTc6IGdwaW9AZmU4MjQwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTM5Miw3ICs0MTEsNyBAQAogCQkJCXJlZwkJPSA8MHg0MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTciOwogCQkJfTsKLQkJCVBJTzE4OiBncGlvQGZlODI1MDAwIHsKKwkJCXBpbzE4OiBncGlvQGZlODI1MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC00MDUsOCArNDI0LDggQEAKIAkJCXNlcmlhbDIgewogCQkJCXBpbmN0cmxfc2VyaWFsMjogc2VyaWFsMi0wIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQl0eAk9IDwmUElPMTcgNCBBTFQyIE9VVD47Ci0JCQkJCQlyeAk9IDwmUElPMTcgNSBBTFQyIElOPjsKKwkJCQkJCXR4CT0gPCZwaW8xNyA0IEFMVDIgT1VUPjsKKwkJCQkJCXJ4CT0gPCZwaW8xNyA1IEFMVDIgSU4+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtNDE0LDI4ICs0MzMsMjggQEAKIAkJCWdtYWMwIHsKIAkJCQlwaW5jdHJsX21paTA6IG1paTAgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCW1kaW50ID0gPCZQSU8xMyA2IEFMVDIgSU4gIEJZUEFTUyAgICAgIDA+OwotCQkJCQkJdHhlbiA9ICA8JlBJTzEzIDcgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQl0eGQwID0gIDwmUElPMTQgMCBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXR4ZDEgPSAgPCZQSU8xNCAxIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJdHhkMiA9ICA8JlBJTzE0IDIgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQj47Ci0JCQkJCQl0eGQzID0gIDwmUElPMTQgMyBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19CPjsKKwkJCQkJCW1kaW50ID0gPCZwaW8xMyA2IEFMVDIgSU4gIEJZUEFTUyAgICAgIDA+OworCQkJCQkJdHhlbiA9ICA8JnBpbzEzIDcgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGQwID0gIDwmcGlvMTQgMCBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXR4ZDEgPSAgPCZwaW8xNCAxIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhkMiA9ICA8JnBpbzE0IDIgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQj47CisJCQkJCQl0eGQzID0gIDwmcGlvMTQgMyBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19CPjsKIAotCQkJCQkJdHhjbGsgPSA8JlBJTzE1IDAgQUxUMiBJTiAgTklDTEsgICAgICAgMCBDTEtfQT47Ci0JCQkJCQl0eGVyID0gIDwmUElPMTUgMSBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCWNycyA9IDwmUElPMTUgMiBBTFQyIElOICBCWVBBU1MgMTAwMD47Ci0JCQkJCQljb2wgPSA8JlBJTzE1IDMgQUxUMiBJTiAgQllQQVNTIDEwMDA+OwotCQkJCQkJbWRpbz0gPCZQSU8xNSA0IEFMVDIgT1VUIEJZUEFTUyAxNTAwPjsKLQkJCQkJCW1kYyA9IDwmUElPMTUgNSBBTFQyIE9VVCBOSUNMSyAgMCAgICBDTEtfQj47CisJCQkJCQl0eGNsayA9IDwmcGlvMTUgMCBBTFQyIElOICBOSUNMSyAgICAgICAwIENMS19BPjsKKwkJCQkJCXR4ZXIgPSAgPCZwaW8xNSAxIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJY3JzID0gPCZwaW8xNSAyIEFMVDIgSU4gIEJZUEFTUyAxMDAwPjsKKwkJCQkJCWNvbCA9IDwmcGlvMTUgMyBBTFQyIElOICBCWVBBU1MgMTAwMD47CisJCQkJCQltZGlvPSA8JnBpbzE1IDQgQUxUMiBPVVQgQllQQVNTIDE1MDA+OworCQkJCQkJbWRjID0gPCZwaW8xNSA1IEFMVDIgT1VUIE5JQ0xLICAwICAgIENMS19CPjsKIAotCQkJCQkJcnhkMCA9ICA8JlBJTzE2IDAgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4ZDEgPSAgPCZQSU8xNiAxIEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeGQyID0gIDwmUElPMTYgMiBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhkMyA9ICA8JlBJTzE2IDMgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4ZHYgPSAgPCZQSU8xNSA2IEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeF9lciA9IDwmUElPMTUgNyBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhjbGsgPSA8JlBJTzE3IDAgQUxUMiBJTiBOSUNMSyAwIENMS19BPjsKLQkJCQkJCXBoeWNsayA9IDwmUElPMTMgNSBBTFQyIE9VVCBOSUNMSyAwIENMS19CPjsKKwkJCQkJCXJ4ZDAgPSAgPCZwaW8xNiAwIEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGQxID0gIDwmcGlvMTYgMSBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhkMiA9ICA8JnBpbzE2IDIgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4ZDMgPSAgPCZwaW8xNiAzIEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGR2ID0gIDwmcGlvMTUgNiBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhfZXIgPSA8JnBpbzE1IDcgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4Y2xrID0gPCZwaW8xNyAwIEFMVDIgSU4gTklDTEsgMCBDTEtfQT47CisJCQkJCQlwaHljbGsgPSA8JnBpbzEzIDUgQUxUMiBPVVQgTklDTEsgMCBDTEtfQj47CiAJCQkJCX07CiAJCQkJfTsKIApAQCAtNDQ1LDI1ICs0NjQsNzkgQEAKIAkJCQl9OwogCQkJCXBpbmN0cmxfcmdtaWkwOiByZ21paTAgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCSBwaHljbGsgPSA8JlBJTzEzICA1IEFMVDQgT1VUIE5JQ0xLIDAgQ0xLX0I+OwotCQkJCQkJIHR4ZW4gPSA8JlBJTzEzIDcgQUxUMiBPVVQgREVfSU8gMCBDTEtfQT47Ci0JCQkJCQkgdHhkMCAgPSA8JlBJTzE0IDAgQUxUMiBPVVQgREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCSB0eGQxICA9IDwmUElPMTQgMSBBTFQyIE9VVCBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJIHR4ZDIgID0gPCZQSU8xNCAyIEFMVDIgT1VUIERFX0lPIDUwMCBDTEtfQj47Ci0JCQkJCQkgdHhkMyAgPSA8JlBJTzE0IDMgQUxUMiBPVVQgREVfSU8gNTAwIENMS19CPjsKLQkJCQkJCSB0eGNsayA9IDwmUElPMTUgMCBBTFQyIElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJIHBoeWNsayA9IDwmcGlvMTMgIDUgQUxUNCBPVVQgTklDTEsgMCBDTEtfQj47CisJCQkJCQkgdHhlbiA9IDwmcGlvMTMgNyBBTFQyIE9VVCBERV9JTyAwIENMS19BPjsKKwkJCQkJCSB0eGQwICA9IDwmcGlvMTQgMCBBTFQyIE9VVCBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJIHR4ZDEgID0gPCZwaW8xNCAxIEFMVDIgT1VUIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQkgdHhkMiAgPSA8JnBpbzE0IDIgQUxUMiBPVVQgREVfSU8gNTAwIENMS19CPjsKKwkJCQkJCSB0eGQzICA9IDwmcGlvMTQgMyBBTFQyIE9VVCBERV9JTyA1MDAgQ0xLX0I+OworCQkJCQkJIHR4Y2xrID0gPCZwaW8xNSAwIEFMVDIgSU4gTklDTEsgMCBDTEtfQT47CiAKLQkJCQkJCSBtZGlvID0gPCZQSU8xNSA0IEFMVDIgT1VUIEJZUEFTUyAwPjsKLQkJCQkJCSBtZGMgPSA8JlBJTzE1IDUgQUxUMiBPVVQgTklDTEsgMCBDTEtfQj47CisJCQkJCQkgbWRpbyA9IDwmcGlvMTUgNCBBTFQyIE9VVCBCWVBBU1MgMD47CisJCQkJCQkgbWRjID0gPCZwaW8xNSA1IEFMVDIgT1VUIE5JQ0xLIDAgQ0xLX0I+OwogCi0JCQkJCQkgcnhkdiA9IDwmUElPMTUgNiBBTFQyIElOIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQkgcnhkMCA9PCZQSU8xNiAwIEFMVDIgSU4gREVfSU8JNTAwIENMS19BPjsKLQkJCQkJCSByeGQxID08JlBJTzE2IDEgQUxUMiBJTiBERV9JTwk1MDAgQ0xLX0E+OwotCQkJCQkJIHJ4ZDIgPTwmUElPMTYgMiBBTFQyIElOIERFX0lPCTUwMCBDTEtfQT47Ci0JCQkJCQkgcnhkMyAgPTwmUElPMTYgMyBBTFQyIElOIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQkgcnhjbGsgPTwmUElPMTcgMCBBTFQyIElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJIHJ4ZHYgPSA8JnBpbzE1IDYgQUxUMiBJTiBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJIHJ4ZDAgPTwmcGlvMTYgMCBBTFQyIElOIERFX0lPCTUwMCBDTEtfQT47CisJCQkJCQkgcnhkMSA9PCZwaW8xNiAxIEFMVDIgSU4gREVfSU8JNTAwIENMS19BPjsKKwkJCQkJCSByeGQyID08JnBpbzE2IDIgQUxUMiBJTiBERV9JTwk1MDAgQ0xLX0E+OworCQkJCQkJIHJ4ZDMgID08JnBpbzE2IDMgQUxUMiBJTiBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJIHJ4Y2xrID08JnBpbzE3IDAgQUxUMiBJTiBOSUNMSyAwIENMS19BPjsKIAotCQkJCQkJIGNsazEyNT08JlBJTzE3IDYgQUxUMSBJTiBOSUNMSyAwIENMS19BPjsKKwkJCQkJCSBjbGsxMjU9PCZwaW8xNyA2IEFMVDEgSU4gTklDTEsgMCBDTEtfQT47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCW1tYzAgeworCQkJCXBpbmN0cmxfbW1jMDogbW1jMCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJbW1jY2xrICA9IDwmcGlvMTMgNCBBTFQ0IEJJRElSX1BVIE5JQ0xLIDAgQ0xLX0I+OworCQkJCQkJZGF0YTAgICA9IDwmcGlvMTQgNCBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGExICAgPSA8JnBpbzE0IDUgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhMiAgID0gPCZwaW8xNCA2IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTMgICA9IDwmcGlvMTQgNyBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWNtZCAgICAgPSA8JnBpbzE1IDEgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQl3cCAgICAgID0gPCZwaW8xNSAzIEFMVDQgSU4+OworCQkJCQkJZGF0YTQgICA9IDwmcGlvMTYgNCBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE1ICAgPSA8JnBpbzE2IDUgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNiAgID0gPCZwaW8xNiA2IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTcgICA9IDwmcGlvMTYgNyBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCXB3ciAgICAgPSA8JnBpbzE3IDEgQUxUNCBPVVQ+OworCQkJCQkJY2QgICAgICA9IDwmcGlvMTcgMiBBTFQ0IElOPjsKKwkJCQkJCWxlZCAgICAgPSA8JnBpbzE3IDMgQUxUNCBPVVQ+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCQkJbW1jMSB7CisJCQkJcGluY3RybF9tbWMxOiBtbWMxIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQltbWNjbGsgID0gPCZwaW8xNSAwIEFMVDMgQklESVJfUFUgTklDTEsgMCBDTEtfQj47CisJCQkJCQlkYXRhMCAgID0gPCZwaW8xMyA3IEFMVDMgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTEgICA9IDwmcGlvMTQgMSBBTFQzIEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGEyICAgPSA8JnBpbzE0IDIgQUxUMyBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhMyAgID0gPCZwaW8xNCAzIEFMVDMgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJY21kICAgICA9IDwmcGlvMTUgNCBBTFQzIEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE0ICAgPSA8JnBpbzE1IDYgQUxUMyBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNSAgID0gPCZwaW8xNSA3IEFMVDMgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTYgICA9IDwmcGlvMTYgMCBBTFQzIEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE3ICAgPSA8JnBpbzE2IDEgQUxUMyBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlwd3IgICAgID0gPCZwaW8xNiAyIEFMVDMgT1VUPjsKKwkJCQkJCW5yZXNldCAgPSA8JnBpbzEzIDYgQUxUMyBPVVQ+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQl1c2IgeworCQkJCXBpbmN0cmxfdXNiMTogdXNiMSB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJb2MtZGV0ZWN0ID0gPCZwaW8xOCAwIEFMVDEgSU4+OworCQkJCQkJcHdyLWVuYWJsZSA9IDwmcGlvMTggMSBBTFQxIE9VVD47CisJCQkJCX07CisJCQkJfTsKKwkJCQlwaW5jdHJsX3VzYjI6IHVzYjIgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCW9jLWRldGVjdCA9IDwmcGlvMTggMiBBTFQxIElOPjsKKwkJCQkJCXB3ci1lbmFibGUgPSA8JnBpbzE4IDMgQUxUMSBPVVQ+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtNDgwLDcgKzU1Myw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcwkJPSA8MCAweGZkNmIwMDAwIDB4MzAwMD47CiAKLQkJCVBJTzEwMDogZ3Bpb0BmZDZiMDAwMCB7CisJCQlwaW8xMDA6IGdwaW9AZmQ2YjAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTQ4OCw3ICs1NjEsNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwMCI7CiAJCQl9OwotCQkJUElPMTAxOiBncGlvQGZkNmIxMDAwIHsKKwkJCXBpbzEwMTogZ3Bpb0BmZDZiMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNDk2LDcgKzU2OSw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDEiOwogCQkJfTsKLQkJCVBJTzEwMjogZ3Bpb0BmZDZiMjAwMCB7CisJCQlwaW8xMDI6IGdwaW9AZmQ2YjIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTUxNyw3ICs1OTAsNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMJCQk9IDwwIDB4ZmQzMzAwMDAgMHg1MDAwPjsKIAotCQkJUElPMTAzOiBncGlvQGZkMzMwMDAwIHsKKwkJCXBpbzEwMzogZ3Bpb0BmZDMzMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNTI1LDcgKzU5OCw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTAzIjsKIAkJCX07Ci0JCQlQSU8xMDQ6IGdwaW9AZmQzMzEwMDAgeworCQkJcGlvMTA0OiBncGlvQGZkMzMxMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC01MzMsNyArNjA2LDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwNCI7CiAJCQl9OwotCQkJUElPMTA1OiBncGlvQGZkMzMyMDAwIHsKKwkJCXBpbzEwNTogZ3Bpb0BmZDMzMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNTQxLDcgKzYxNCw3IEBACiAJCQkJcmVnCQk9IDwweDIwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDUiOwogCQkJfTsKLQkJCVBJTzEwNjogZ3Bpb0BmZDMzMzAwMCB7CisJCQlwaW8xMDY6IGdwaW9AZmQzMzMwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTU1MCw3ICs2MjMsNyBAQAogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDYiOwogCQkJfTsKIAotCQkJUElPMTA3OiBncGlvQGZkMzM0MDAwIHsKKwkJCXBpbzEwNzogZ3Bpb0BmZDMzNDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi5kdHNpCmluZGV4IDg0NzU4ZDcuLmZhZDkwNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LmR0c2kKQEAgLTksNiArOSw4IEBACiAjaW5jbHVkZSAic3RpaDQxeC5kdHNpIgogI2luY2x1ZGUgInN0aWg0MTYtY2xvY2suZHRzaSIKICNpbmNsdWRlICJzdGloNDE2LXBpbmN0cmwuZHRzaSIKKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BoeS9waHktbWlwaHkzNjV4Lmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQxNi1yZXNldHMuaD4KIC8gewpAQCAtMjM2LDUgKzIzOCwyMTIgQEAKIAkJCXJlc2V0cwk9IDwmcG93ZXJkb3duIFNUSUg0MTZfS0VZU0NBTl9QT1dFUkRPV04+LAogCQkJCSAgPCZzb2Z0cmVzZXQgU1RJSDQxNl9LRVlTQ0FOX1NPRlRSRVNFVD47CiAJCX07CisKKwkJdGVtcDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2LXNhcy10aGVybWFsIjsKKwkJCWNsb2NrLW5hbWVzID0gInRoZXJtYWwiOworCQkJY2xvY2tzID0gPCZjbG9ja2dlbl9jX3ZjYyAxND47CisKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl0ZW1wMUBmZGZlODAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtbXBlLXRoZXJtYWwiOworCQkJcmVnID0gPDB4ZmRmZTgwMDAgMHgxMD47CisJCQljbG9ja3MgPSA8JmNsb2NrZ2VuX2UgMz47CisJCQljbG9jay1uYW1lcyA9ICJ0aGVybWFsIjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMyBJUlFfVFlQRV9FREdFX1JJU0lORz47CisKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQltbWMwOiBzZGhjaUBmZTgxZTAwMCB7CisJCQljb21wYXRpYmxlCT0gInN0LHNkaGNpIjsKKwkJCXN0YXR1cwkJPSAiZGlzYWJsZWQiOworCQkJcmVnCQk9IDwweGZlODFlMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzCT0gPEdJQ19TUEkgMTI3IElSUV9UWVBFX05PTkU+OworCQkJaW50ZXJydXB0LW5hbWVzCT0gIm1tY2lycSI7CisJCQlwaW5jdHJsLW5hbWVzCT0gImRlZmF1bHQiOworCQkJcGluY3RybC0wCT0gPCZwaW5jdHJsX21tYzA+OworCQkJY2xvY2stbmFtZXMJPSAibW1jIjsKKwkJCWNsb2NrcwkJPSA8JmNsa19zX2ExX2xzIDE+OworCQl9OworCisJCW1tYzE6IHNkaGNpQGZlODFmMDAwIHsKKwkJCWNvbXBhdGlibGUJPSAic3Qsc2RoY2kiOworCQkJc3RhdHVzCQk9ICJkaXNhYmxlZCI7CisJCQlyZWcJCT0gPDB4ZmU4MWYwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMJPSA8R0lDX1NQSSAxMjggSVJRX1RZUEVfTk9ORT47CisJCQlpbnRlcnJ1cHQtbmFtZXMJPSAibW1jaXJxIjsKKwkJCXBpbmN0cmwtbmFtZXMJPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAJPSA8JnBpbmN0cmxfbW1jMT47CisJCQljbG9jay1uYW1lcwk9ICJtbWMiOworCQkJY2xvY2tzCQk9IDwmY2xrX3NfYTFfbHMgOD47CisJCX07CisKKwkJbWlwaHkzNjV4X3BoeTogcGh5QGZlMzgyMDAwIHsKKwkJCWNvbXBhdGlibGUgICAgICA9ICJzdCxtaXBoeTM2NXgtcGh5IjsKKwkJCXN0LHN5c2NmZyAgCT0gPCZzeXNjZmdfcmVhcj47CisJCQkjYWRkcmVzcy1jZWxscwk9IDwxPjsKKwkJCSNzaXplLWNlbGxzCT0gPDE+OworCQkJcmFuZ2VzOworCisJCQlwaHlfcG9ydDA6IHBvcnRAZmUzODIwMDAgeworCQkJCSNwaHktY2VsbHMgPSA8MT47CisJCQkJcmVnID0gPDB4ZmUzODIwMDAgMHgxMDA+LCA8MHhmZTM5NDAwMCAweDEwMD4sIDwweDgyNCAweDQ+OworCQkJCXJlZy1uYW1lcyA9ICJzYXRhIiwgInBjaWUiLCAic3lzY2ZnIjsKKwkJCX07CisKKwkJCXBoeV9wb3J0MTogcG9ydEBmZTM4YTAwMCB7CisJCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCQlyZWcgPSA8MHhmZTM4YTAwMCAweDEwMD4sIDwweGZlODA0MDAwIDB4MTAwPiwgPDB4ODI4IDB4ND47CisJCQkJcmVnLW5hbWVzID0gInNhdGEiLCAicGNpZSIsICJzeXNjZmciOworCQkJfTsKKwkJfTsKKworCQlzYXRhMDogc2F0YUBmZTM4MDAwMCB7CisJCQljb21wYXRpYmxlICAgICAgPSAic3Qsc3RpLWFoY2kiOworCQkJcmVnICAgICAgICAgICAgID0gPDB4ZmUzODAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgICAgICA9IDxHSUNfU1BJIDE1NyBJUlFfVFlQRV9OT05FPjsKKwkJCWludGVycnVwdC1uYW1lcyA9ICJob3N0YyI7CisJCQlwaHlzCSAgICAgICAgPSA8JnBoeV9wb3J0MCBNSVBIWV9UWVBFX1NBVEE+OworCQkJcGh5LW5hbWVzICAgICAgID0gInNhdGEtcGh5IjsKKwkJCXJlc2V0cwkgICAgICAgID0gPCZwb3dlcmRvd24gU1RJSDQxNl9TQVRBMF9QT1dFUkRPV04+LAorCQkJCQkgIDwmc29mdHJlc2V0IFNUSUg0MTZfU0FUQTBfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzICAgICA9ICJwd3ItZHduIiwgInN3LXJzdCI7CisJCQljbG9jay1uYW1lcyAgICAgPSAiYWhjaV9jbGsiOworCQkJY2xvY2tzCSAgICAgICAgPSA8JmNsa19zX2EwX2xzIENMS19JQ05fUkVHPjsKKworCQkJc3RhdHVzCSAgICAgICAgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYjJfcGh5OiBwaHlAMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtdXNiLXBoeSI7CisJCQkjcGh5LWNlbGxzID0gPDA+OworCQkJc3Qsc3lzY2ZnID0gPCZzeXNjZmdfcmVhcj47CisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisJCQljbG9jay1uYW1lcyA9ICJvc2NfcGh5IjsKKwkJfTsKKworCQllaGNpMDogdXNiQGZlMWZmZTAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3QtZWhjaS0zMDB4IjsKKwkJCXJlZyA9IDwweGZlMWZmZTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNDggSVJRX1RZUEVfTk9ORT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYjA+OworCQkJY2xvY2tzID0gPCZjbGtfc19hMV9scyAwPiwKKwkJCQkgPCZjbG9ja2dlbl9iMCAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImljIiwgImNsazQ4IjsKKwkJCXBoeXMgPSA8JnVzYjJfcGh5PjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJcmVzZXRzID0gPCZwb3dlcmRvd24gU1RJSDQxNl9VU0IwX1BPV0VSRE9XTj4sCisJCQkJIDwmc29mdHJlc2V0IFNUSUg0MTZfVVNCMF9TT0ZUUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgPSAicG93ZXIiLCAic29mdHJlc2V0IjsKKwkJfTsKKworCQlvaGNpMDogdXNiQGZlMWZmYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3Qtb2hjaS0zMDB4IjsKKwkJCXJlZyA9IDwweGZlMWZmYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNDkgSVJRX1RZUEVfTk9ORT47CisJCQljbG9ja3MgPSA8JmNsa19zX2ExX2xzIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2IwIDA+OworCQkJY2xvY2stbmFtZXMgPSAiaWMiLCAiY2xrNDgiOworCQkJcGh5cyA9IDwmdXNiMl9waHk+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDE2X1VTQjBfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQxNl9VU0IwX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQl9OworCisJCWVoY2kxOiB1c2JAZmUyMDNlMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1laGNpLTMwMHgiOworCQkJcmVnID0gPDB4ZmUyMDNlMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE1MCBJUlFfVFlQRV9OT05FPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNiMT47CisJCQljbG9ja3MgPSA8JmNsa19zX2ExX2xzIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2IwIDA+OworCQkJY2xvY2stbmFtZXMgPSAiaWMiLCAiY2xrNDgiOworCQkJcGh5cyA9IDwmdXNiMl9waHk+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDE2X1VTQjFfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQxNl9VU0IxX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQl9OworCisJCW9oY2kxOiB1c2JAZmUyMDNjMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1vaGNpLTMwMHgiOworCQkJcmVnID0gPDB4ZmUyMDNjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE1MSBJUlFfVFlQRV9OT05FPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfbHMgMD4sCisJCQkJIDwmY2xvY2tnZW5fYjAgMD47CisJCQljbG9jay1uYW1lcyA9ICJpYyIsICJjbGs0OCI7CisJCQlwaHlzID0gPCZ1c2IyX3BoeT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MTZfVVNCMV9QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDE2X1VTQjFfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCX07CisKKwkJZWhjaTI6IHVzYkBmZTMwM2UwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0LWVoY2ktMzAweCI7CisJCQlyZWcgPSA8MHhmZTMwM2UwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTUyIElSUV9UWVBFX05PTkU+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2IyPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfbHMgMD4sCisJCQkJIDwmY2xvY2tnZW5fYjAgMD47CisJCQljbG9jay1uYW1lcyA9ICJpYyIsICJjbGs0OCI7CisJCQlwaHlzID0gPCZ1c2IyX3BoeT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MTZfVVNCMl9QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDE2X1VTQjJfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCX07CisKKwkJb2hjaTI6IHVzYkBmZTMwM2MwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0LW9oY2ktMzAweCI7CisJCQlyZWcgPSA8MHhmZTMwM2MwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTUzIElSUV9UWVBFX05PTkU+OworCQkJY2xvY2tzID0gPCZjbGtfc19hMV9scyAwPiwKKwkJCQkgPCZjbG9ja2dlbl9iMCAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImljIiwgImNsazQ4IjsKKwkJCXBoeXMgPSA8JnVzYjJfcGh5PjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJcmVzZXRzID0gPCZwb3dlcmRvd24gU1RJSDQxNl9VU0IyX1BPV0VSRE9XTj4sCisJCQkJIDwmc29mdHJlc2V0IFNUSUg0MTZfVVNCMl9TT0ZUUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgPSAicG93ZXIiLCAic29mdHJlc2V0IjsKKwkJfTsKKworCQllaGNpMzogdXNiQGZlMzQzZTAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3QtZWhjaS0zMDB4IjsKKwkJCXJlZyA9IDwweGZlMzQzZTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNTQgSVJRX1RZUEVfTk9ORT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYjM+OworCQkJY2xvY2tzID0gPCZjbGtfc19hMV9scyAwPiwKKwkJCQkgPCZjbG9ja2dlbl9iMCAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImljIiwgImNsazQ4IjsKKwkJCXBoeXMgPSA8JnVzYjJfcGh5PjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJcmVzZXRzID0gPCZwb3dlcmRvd24gU1RJSDQxNl9VU0IzX1BPV0VSRE9XTj4sCisJCQkJIDwmc29mdHJlc2V0IFNUSUg0MTZfVVNCM19TT0ZUUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgPSAicG93ZXIiLCAic29mdHJlc2V0IjsKKwkJfTsKKworCQlvaGNpMzogdXNiQGZlMzQzYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3Qtb2hjaS0zMDB4IjsKKwkJCXJlZyA9IDwweGZlMzQzYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNTUgSVJRX1RZUEVfTk9ORT47CisJCQljbG9ja3MgPSA8JmNsa19zX2ExX2xzIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2IwIDA+OworCQkJY2xvY2stbmFtZXMgPSAiaWMiLCAiY2xrNDgiOworCQkJcGh5cyA9IDwmdXNiMl9waHk+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDE2X1VTQjNfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQxNl9VU0IzX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAwMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAwMC5kdHNpCmluZGV4IGIzZGQ2Y2EuLjVmOTFmNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMDAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDAwLmR0c2kKQEAgLTM1LDcgKzM1LDcgQEAKIAkJCWZwX2xlZCB7CiAJCQkJI2dwaW8tY2VsbHMgPSA8MT47CiAJCQkJbGFiZWwJPSAiRnJvbnQgUGFuZWwgTEVEIjsKLQkJCQlncGlvcwk9IDwmUElPMTA1IDc+OworCQkJCWdwaW9zCT0gPCZwaW8xMDUgNz47CiAJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyCT0gImhlYXJ0YmVhdCI7CiAJCQl9OwogCQl9OwpAQCAtNTUsNyArNTUsNyBAQAogCQkJcGh5LW1vZGUJCT0gIm1paSI7CiAJCQlwaW5jdHJsLTAJCT0gPCZwaW5jdHJsX21paTA+OwogCi0JCQlzbnBzLHJlc2V0LWdwaW8gCT0gPCZQSU8xMDYgMj47CisJCQlzbnBzLHJlc2V0LWdwaW8gCT0gPCZwaW8xMDYgMj47CiAJCQlzbnBzLHJlc2V0LWFjdGl2ZS1sb3c7CiAJCQlzbnBzLHJlc2V0LWRlbGF5cy11cyAJPSA8MCAxMDAwMCAxMDAwMD47CiAJCX07CkBAIC02NSw3ICs2NSw3IEBACiAJCQlwaHktbW9kZQkJPSAibWlpIjsKIAkJCXN0LHR4LXJldGltZS1zcmMJPSAidHhjbGsiOwogCi0JCQlzbnBzLHJlc2V0LWdwaW8gCT0gPCZQSU80IDc+OworCQkJc25wcyxyZXNldC1ncGlvIAk9IDwmcGlvNCA3PjsKIAkJCXNucHMscmVzZXQtYWN0aXZlLWxvdzsKIAkJCXNucHMscmVzZXQtZGVsYXlzLXVzIAk9IDwwIDEwMDAwIDEwMDAwPjsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMjAuZHRzaQppbmRleCBkOGE4NDI5Li40ODdkN2Q4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDIwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMC5kdHNpCkBAIC0zMiwxMSArMzIsMTEgQEAKIAkJCXJlZCB7CiAJCQkJI2dwaW8tY2VsbHMgPSA8MT47CiAJCQkJbGFiZWwJPSAiRnJvbnQgUGFuZWwgTEVEIjsKLQkJCQlncGlvcwk9IDwmUElPNCAxPjsKKwkJCQlncGlvcwk9IDwmcGlvNCAxPjsKIAkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIJPSAiaGVhcnRiZWF0IjsKIAkJCX07CiAJCQlncmVlbiB7Ci0JCQkJZ3Bpb3MJPSA8JlBJTzQgNz47CisJCQkJZ3Bpb3MJPSA8JnBpbzQgNz47CiAJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwogCQkJfTsKIAkJfTsKQEAgLTY4LDExICs2OCwxNSBAQAogCQkJcGh5LW1vZGUJCT0gInJnbWlpLWlkIjsKIAkJCW1heC1zcGVlZAkJPSA8MTAwMD47CiAJCQlzdCx0eC1yZXRpbWUtc3JjCT0gImNsa18xMjUiOwotCQkJc25wcyxyZXNldC1ncGlvIAk9IDwmUElPMyAwPjsKKwkJCXNucHMscmVzZXQtZ3BpbyAJPSA8JnBpbzMgMD47CiAJCQlzbnBzLHJlc2V0LWFjdGl2ZS1sb3c7CiAJCQlzbnBzLHJlc2V0LWRlbGF5cy11cyAJPSA8MCAxMDAwMCAxMDAwMD47CiAKIAkJCXBpbmN0cmwtMAk9IDwmcGluY3RybF9yZ21paTE+OwogCQl9OworCisJCW1tYzA6IHNkaGNpQGZlODFlMDAwIHsKKwkJCWJ1cy13aWR0aCA9IDw4PjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMjB4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDIweC5kdHNpCmluZGV4IGRmMDFjMTIuLmY3OTdhMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMjB4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMHguZHRzaQpAQCAtOCw2ICs4LDEwIEBACiAgKi8KIC8gewogCXNvYyB7CisJCW1tYzA6IHNkaGNpQGZlODFlMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwogCQlzcGlmc206IHNwaWZzbUBmZTkwMjAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzICAgID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaHh4eC1iMjEyMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaHh4eC1iMjEyMC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzRiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloeHh4LWIyMTIwLmR0c2kKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3MgKFImRCkgTGltaXRlZC4KKyAqIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKy8geworCXNvYyB7CisJCXNiY19zZXJpYWwwOiBzZXJpYWxAOTUzMDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJbGVkcyB7CisJCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCQlyZWQgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWxhYmVsID0gIkZyb250IFBhbmVsIExFRCI7CisJCQkJZ3Bpb3MgPSA8JnBpbzQgMSAwPjsKKwkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsKKwkJCX07CisJCQlncmVlbiB7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJZ3Bpb3MgPSA8JnBpbzEgMyAwPjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQl9OworCisJCWkyY0A5ODQyMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlpMmNAOTg0MzAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJaTJjQDk4NDQwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyY0A5ODQ1MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlpMmNAOTU0MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJLyogU1NDMTEgdG8gSERNSSAqLworCQlpMmNAOTU0MTAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCQkvKiBIRE1JIFYxLjNhIHN1cHBvcnRzIFN0YW5kYXJkIG1vZGUgb25seSAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJCQlzdCxpMmMtbWluLXNjbC1wdWxzZS13aWR0aC11cyA9IDwwPjsKKwkJCXN0LGkyYy1taW4tc2RhLXB1bHNlLXdpZHRoLXVzID0gPDU+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWExMDAwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1hMTAwMC5kdHMKaW5kZXggOWU5OWFkZS4uM2JjZmQ4MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1hMTAwMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWExMDAwLmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIEVtaWxpbyBMw7NwZXogPGVtaWxpb0BlbG9wZXouY29tLmFyPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWJhMTAtdHZib3guZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWJhMTAtdHZib3guZHRzCmluZGV4IDE3NjNjYzcuLmYzZjI5NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1iYTEwLXR2Ym94LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYmExMC10dmJveC5kdHMKQEAgLTEsMTIgKzEsNDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAxNCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWN1YmllYm9hcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWN1YmllYm9hcmQuZHRzCmluZGV4IDNjZTU2YmZiLi42YTMxMGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtY3ViaWVib2FyZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWN1YmllYm9hcmQuZHRzCkBAIC0yLDEyICsyLDQ4IEBACiAgKiBDb3B5cmlnaHQgMjAxMiBTdGVmYW4gUm9lc2UKICAqIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1oYWNrYmVycnkuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWhhY2tiZXJyeS5kdHMKaW5kZXggODkxZWE0NC4uZWZjMTE2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWhhY2tiZXJyeS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWhhY2tiZXJyeS5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1pbmV0OTdmdjIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWluZXQ5N2Z2Mi5kdHMKaW5kZXggNmIwYzM3OC4uM2UyNWVlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWluZXQ5N2Z2Mi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWluZXQ5N2Z2Mi5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBEYXZpZCBMYW56ZW5k9nJmZXIgPGRhdmlkLmxhbnplbmRvZXJmZXJAbzJzLmNoPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW1pbmkteHBsdXMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW1pbmkteHBsdXMuZHRzCmluZGV4IGI5ZWNjZTYuLjhiM2Y5NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1taW5pLXhwbHVzLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtbWluaS14cGx1cy5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1vbGludXhpbm8tbGltZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtb2xpbnV4aW5vLWxpbWUuZHRzCmluZGV4IGQwNDZkNTYuLjg4Y2YxYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1vbGludXhpbm8tbGltZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW9saW51eGluby1saW1lLmR0cwpAQCAtMSwxMiArMSw0OCBAQAogLyoKICAqIENvcHlyaWdodCAyMDE0IC0gSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1wY2R1aW5vLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1wY2R1aW5vLmR0cwppbmRleCA2Njc1YmNkLi5jZTU5OTQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtcGNkdWluby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLXBjZHVpbm8uZHRzCkBAIC0yLDEyICsyLDQ4IEBACiAgKiBDb3B5cmlnaHQgMjAxNCBab2x0YW4gSEVSUEFJCiAgKiBab2x0YW4gSEVSUEFJIDx3aWd5b3JpQHVpZDAuaHU+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC5kdHNpCmluZGV4IDM4MGY5MTQuLmUzYWI5NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC5kdHNpCkBAIC0yNyw2ICsyNywyMCBAQAogCQlzZXJpYWw3ID0gJnVhcnQ3OwogCX07CiAKKwljaG9zZW4geworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKworCQlmcmFtZWJ1ZmZlckAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHNpbXBsZS1mcmFtZWJ1ZmZlciIsICJzaW1wbGUtZnJhbWVidWZmZXIiOworCQkJYWxsd2lubmVyLHBpcGVsaW5lID0gImRlX2JlMC1sY2QwLWhkbWkiOworCQkJY2xvY2tzID0gPCZwbGw1IDE+LCA8JmFoYl9nYXRlcyAzNj4sIDwmYWhiX2dhdGVzIDQzPiwKKwkJCQkgPCZhaGJfZ2F0ZXMgNDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwl9OworCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCBlYTk1MTlkLi5mZTNjNTU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1vbGludXhpbm8tbWljcm8uZHRzCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLXI3LXR2LWRvbmdsZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLXI3LXR2LWRvbmdsZS5kdHMKaW5kZXggNDNhOTM3Ni4uMWZhMjkxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1yNy10di1kb25nbGUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtcjctdHYtZG9uZ2xlLmR0cwpAQCAtMSwxMiArMSw0OCBAQAogLyoKICAqIENvcHlyaWdodCAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kKaW5kZXggNTMxMjcyYy4uODFhZDRiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMuZHRzaQpAQCAtMjQsNiArMjQsMjAgQEAKIAkJc2VyaWFsMyA9ICZ1YXJ0MzsKIAl9OwogCisJY2hvc2VuIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJZnJhbWVidWZmZXJAMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzaW1wbGUtZnJhbWVidWZmZXIiLCAic2ltcGxlLWZyYW1lYnVmZmVyIjsKKwkJCWFsbHdpbm5lcixwaXBlbGluZSA9ICJkZV9iZTAtbGNkMC1oZG1pIjsKKwkJCWNsb2NrcyA9IDwmcGxsNSAxPiwgPCZhaGJfZ2F0ZXMgMzY+LCA8JmFoYl9nYXRlcyA0Mz4sCisJCQkJIDwmYWhiX2dhdGVzIDQ0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKKwogCWNwdXMgewogCQljcHVAMCB7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTgiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLWhzZy1oNzAyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMKaW5kZXggOGIzY2QwOTAuLmVlZWQxZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLWhzZy1oNzAyLmR0cwpAQCAtNiwxOCArNiwxOCBAQAogICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKICAqIHdob2xlLgogICoKLSAqICBhKSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCiAgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKICAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKICAqICAgICBNQSAwMjExMC0xMzAxIFVTQQogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8tbWljcm8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKaW5kZXggZmE0NGIwMi4uOTE2ZWU4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKQEAgLTEsMTUgKzEsNDkgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAxMiBNYXhpbWUgUmlwYXJkCisgKiBDb3B5cmlnaHQgMjAxMiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KICAqIENvcHlyaWdodCAyMDEzIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgotICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby5kdHMKaW5kZXggNDI5OTk0ZS4uZTMxZDI5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1hcHA0LWV2YjEuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWFwcDQtZXZiMS5kdHMKaW5kZXggMmJiZjg4Ni4uYzc0YTYzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWFwcDQtZXZiMS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWFwcDQtZXZiMS5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtY29sb21idXMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWNvbG9tYnVzLmR0cwppbmRleCA1NDZjZjZlLi5jMzZiNGRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtY29sb21idXMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1jb2xvbWJ1cy5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1odW1taW5nYmlyZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtaHVtbWluZ2JpcmQuZHRzCmluZGV4IGYxNDIwNjUuLjZlOTI0ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1odW1taW5nYmlyZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWh1bW1pbmdiaXJkLmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLW05LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1tOS5kdHMKaW5kZXggYmM2MTE1ZC4uM2FiNTQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLW05LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtbTkuZHRzCkBAIC0xLDEyICsxLDQ4IEBACiAvKgogICogQ29weXJpZ2h0IDIwMTQgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKQEAgLTMyLDEzICs2OCw0MCBAQAogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCisJCXVzYnBoeTogcGh5QDAxYzE5NDAwIHsKKwkJCXVzYjFfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IxX3ZidXM+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kwOiB1c2JAMDFjMWEwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kxOiB1c2JAMDFjMWIwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCiAJCXBpbzogcGluY3RybEAwMWMyMDgwMCB7CisJCQlsZWRfcGluc19tOTogbGVkX3BpbnNAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgxMyI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCiAJCQltbWMwX2NkX3Bpbl9tOTogbW1jMF9jZF9waW5AMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgyMiI7CiAJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9faW4iOwogCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKIAkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKIAkJCX07CisKKwkJCXVzYjFfdmJ1c19waW5fbTk6IHVzYjFfdmJ1c19waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEMyNyI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OwogCQl9OwogCiAJCXVhcnQwOiBzZXJpYWxAMDFjMjgwMDAgewpAQCAtNDYsNSArMTA5LDM1IEBACiAJCQlwaW5jdHJsLTAgPSA8JnVhcnQwX3BpbnNfYT47CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CisKKwkJZ21hYzogZXRoZXJuZXRAMDFjMzAwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmZ21hY19waW5zX21paV9hPjsKKwkJCXBoeSA9IDwmcGh5MT47CisJCQlwaHktbW9kZSA9ICJtaWkiOworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJcmVnID0gPDE+OworCQkJfTsKKwkJfTsKKwl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZsZWRfcGluc19tOT47CisKKwkJYmx1ZSB7CisJCQlsYWJlbCA9ICJtOTpibHVlOnVzciI7CisJCQlncGlvcyA9IDwmcGlvIDcgMTMgMD47CisJCX07CisJfTsKKworCXJlZ191c2IxX3ZidXM6IHVzYjEtdmJ1cyB7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdXNiMV92YnVzX3Bpbl9tOT47CisJCWdwaW8gPSA8JnBpbyAyIDI3IDA+OworCQlzdGF0dXMgPSAib2theSI7CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCmluZGV4IDU0M2Y4OTUuLmE0MDAxNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCkBAIC04LDE4ICs4LDE4IEBACiAgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQogICogd2hvbGUuCiAgKgotICogIGEpIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKICAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQogICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAogICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCiAgKgpAQCAtNjIsNiArNjIsMTggQEAKIAkJZXRoZXJuZXQwID0gJmdtYWM7CiAJfTsKIAorCWNob3NlbiB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCisJCWZyYW1lYnVmZmVyQDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc2ltcGxlLWZyYW1lYnVmZmVyIiwgInNpbXBsZS1mcmFtZWJ1ZmZlciI7CisJCQlhbGx3aW5uZXIscGlwZWxpbmUgPSAiZGVfYmUwLWxjZDAtaGRtaSI7CisJCQljbG9ja3MgPSA8JnBsbDYgMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCX07CiAKIAljcHVzIHsKIAkJZW5hYmxlLW1ldGhvZCA9ICJhbGx3aW5uZXIsc3VuNmktYTMxIjsKQEAgLTEzMiwxMSArMTQ0LDExIEBACiAJCX07CiAKIAkJcGxsNjogY2xrQDAxYzIwMDI4IHsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1wbGw2LWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDAyOCAweDQ+OwogCQkJY2xvY2tzID0gPCZvc2MyNE0+OwotCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInBsbDYiOworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInBsbDYiLCAicGxsNngyIjsKIAkJfTsKIAogCQljcHU6IGNwdUAwMWMyMDA1MCB7CkBAIC0xNjYsNyArMTc4LDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1haGIxLW11eC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwNTQgMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMzJrPiwgPCZvc2MyNE0+LCA8JmF4aT4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzMyaz4sIDwmb3NjMjRNPiwgPCZheGk+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYWhiMV9tdXgiOwogCQl9OwogCkBAIC0yMjEsNyArMjMzLDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1hcGIxLW11eC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwNTggMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMzJrPiwgPCZvc2MyNE0+LCA8JnBsbDY+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MzMms+LCA8Jm9zYzI0TT4sIDwmcGxsNiAwPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFwYjJfbXV4IjsKIAkJfTsKIApAQCAtMjQ4LDcgKzI2MCw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwODggMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIm1tYzAiOwogCQl9OwogCkBAIC0yNTYsNyArMjY4LDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDA4YyAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAibW1jMSI7CiAJCX07CiAKQEAgLTI2NCw3ICsyNzYsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1vZDAtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMDkwIDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJtbWMyIjsKIAkJfTsKIApAQCAtMjcyLDcgKzI4NCw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwOTQgMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIm1tYzMiOwogCQl9OwogCkBAIC0yODAsNyArMjkyLDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDBhMCAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic3BpMCI7CiAJCX07CiAKQEAgLTI4OCw3ICszMDAsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1vZDAtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMGE0IDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJzcGkxIjsKIAkJfTsKIApAQCAtMjk2LDcgKzMwOCw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwYTggMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInNwaTIiOwogCQl9OwogCkBAIC0zMDQsNyArMzE2LDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDBhYyAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic3BpMyI7CiAJCX07CiAKQEAgLTM2MSw2ICszNzMsMTAgQEAKIAkJCWNsb2NrcyA9IDwmYWhiMV9nYXRlcyA2PjsKIAkJCXJlc2V0cyA9IDwmYWhiMV9yc3QgNj47CiAJCQkjZG1hLWNlbGxzID0gPDE+OworCisJCQkvKiBETUEgY29udHJvbGxlciByZXF1aXJlcyBBSEIxIGNsb2NrZWQgZnJvbSBQTEw2ICovCisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmFoYjFfbXV4PjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnBsbDYgMD47CiAJCX07CiAKIAkJbW1jMDogbW1jQDAxYzBmMDAwIHsKQEAgLTg0MCw3ICs4NTYsNyBAQAogCQkJYXIxMDA6IGFyMTAwX2NsayB7CiAJCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWFyMTAwLWNsayI7CiAJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJCWNsb2NrcyA9IDwmb3NjMzJrPiwgPCZvc2MyNE0+LCA8JnBsbDY+LCA8JnBsbDY+OworCQkJCWNsb2NrcyA9IDwmb3NjMzJrPiwgPCZvc2MyNE0+LCA8JnBsbDYgMD4sIDwmcGxsNiAwPjsKIAkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXIxMDAiOwogCQkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWJhbmFuYXBpLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1iYW5hbmFwaS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmMTIxNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1iYW5hbmFwaS5kdHMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisvaW5jbHVkZS8gInN1bjdpLWEyMC5kdHNpIgorL2luY2x1ZGUvICJzdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJMZU1ha2VyIEJhbmFuYSBQaSI7CisJY29tcGF0aWJsZSA9ICJsZW1ha2VyLGJhbmFuYXBpIiwgImFsbHdpbm5lcixzdW43aS1hMjAiOworCisJc29jQDAxYzAwMDAwIHsKKwkJc3BpMDogc3BpQDAxYzA1MDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnNwaTBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX2JhbmFuYXBpPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNyAxMCAwPjsgLyogUEgxMCAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdXNicGh5OiBwaHlAMDFjMTM0MDAgeworCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CisJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMDogdXNiQDAxYzE0MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMDogdXNiQDAxYzE0NDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlhaGNpOiBzYXRhQDAxYzE4MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMTogdXNiQDAxYzFjMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMTogdXNiQDAxYzFjNDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlwaW5jdHJsQDAxYzIwODAwIHsKKwkJCW1tYzBfY2RfcGluX2JhbmFuYXBpOiBtbWMwX2NkX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDEwIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19pbiI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OworCQkJfTsKKworCQkJZ21hY19wb3dlcl9waW5fYmFuYW5hcGk6IGdtYWNfcG93ZXJfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMjMiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKworCQkJbGVkX3BpbnNfYmFuYW5hcGk6IGxlZF9waW5zQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMjQiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlpcjA6IGlyQDAxYzIxODAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmlyMF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMDFjMjgwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1YXJ0Mzogc2VyaWFsQDAxYzI4YzAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnVhcnQzX3BpbnNfYj47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdWFydDc6IHNlcmlhbEAwMWMyOWMwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZ1YXJ0N19waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyYzA6IGkyY0AwMWMyYWMwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMwX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCWF4cDIwOTogcG1pY0AzNCB7CisJCQkJY29tcGF0aWJsZSA9ICJ4LXBvd2VycyxheHAyMDkiOworCQkJCXJlZyA9IDwweDM0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZubWlfaW50Yz47CisJCQkJaW50ZXJydXB0cyA9IDwwIDg+OworCisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCX07CisJCX07CisKKwkJaTJjMjogaTJjQDAxYzJiNDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzJfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlnbWFjOiBldGhlcm5ldEAwMWM1MDAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZnbWFjX3BpbnNfcmdtaWlfYT47CisJCQlwaHkgPSA8JnBoeTE+OworCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJcGh5LXN1cHBseSA9IDwmcmVnX2dtYWNfM3YzPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmbGVkX3BpbnNfYmFuYW5hcGk+OworCisJCWdyZWVuIHsKKwkJCWxhYmVsID0gImJhbmFuYXBpOmdyZWVuOnVzciI7CisJCQlncGlvcyA9IDwmcGlvIDcgMjQgMD47CisJCX07CisJfTsKKworCXJlZ191c2IxX3ZidXM6IHVzYjEtdmJ1cyB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJcmVnX3VzYjJfdmJ1czogdXNiMi12YnVzIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlyZWdfZ21hY18zdjM6IGdtYWMtM3YzIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmdtYWNfcG93ZXJfcGluX2JhbmFuYXBpPjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZ21hYy0zdjMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXN0YXJ0dXAtZGVsYXktdXMgPSA8MTAwMDAwPjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQlncGlvID0gPCZwaW8gNyAyMyAwPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1jdWJpZXRydWNrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1jdWJpZXRydWNrLmR0cwppbmRleCBhNmMxYTNjLi5hMjgxZDI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtY3ViaWV0cnVjay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWN1YmlldHJ1Y2suZHRzCkBAIC00MCw2ICs0MCw3IEBACiAJCX07CiAKIAkJdXNicGh5OiBwaHlAMDFjMTM0MDAgeworCQkJdXNiMF92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjBfdmJ1cz47CiAJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKIAkJCXVzYjJfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IyX3ZidXM+OwogCQkJc3RhdHVzID0gIm9rYXkiOwpAQCAtOTIsNiArOTMsMTMgQEAKIAkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CiAJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CiAJCQl9OworCisJCQl1c2IwX3ZidXNfcGluX2E6IHVzYjBfdmJ1c19waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgxNyI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OwogCQl9OwogCiAJCXB3bTogcHdtQDAxYzIwZTAwIHsKQEAgLTE4NSw2ICsxOTMsMTIgQEAKIAkJc3RhdHVzID0gIm9rYXkiOwogCX07CiAKKwlyZWdfdXNiMF92YnVzOiB1c2IwLXZidXMgeworCQlwaW5jdHJsLTAgPSA8JnVzYjBfdmJ1c19waW5fYT47CisJCWdwaW8gPSA8JnBpbyA3IDE3IDA+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCXJlZ191c2IxX3ZidXM6IHVzYjEtdmJ1cyB7CiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWkxMi10dmJveC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaTEyLXR2Ym94LmR0cwppbmRleCA2YTY3NzEyLi5mMzhiYjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaTEyLXR2Ym94LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaTEyLXR2Ym94LmR0cwpAQCAtMSwxMiArMSw0OCBAQAogLyoKICAqIENvcHlyaWdodCAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtbTMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW0zLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU1NjhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW0zLmR0cwpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKgorICogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKy9pbmNsdWRlLyAic3VuN2ktYTIwLmR0c2kiCisvaW5jbHVkZS8gInN1bnhpLWNvbW1vbi1yZWd1bGF0b3JzLmR0c2kiCisKKy8geworCW1vZGVsID0gIk1lbGUgTTMiOworCWNvbXBhdGlibGUgPSAibWVsZSxtMyIsICJhbGx3aW5uZXIsc3VuN2ktYTIwIjsKKworCXNvY0AwMWMwMDAwMCB7CisJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfYT4sIDwmbW1jMF9jZF9waW5fcmVmZXJlbmNlX2Rlc2lnbj47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZjYzN2Mz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljZC1ncGlvcyA9IDwmcGlvIDcgMSAwPjsgLyogUEgxICovCisJCQljZC1pbnZlcnRlZDsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQltbWMyOiBtbWNAMDFjMTEwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMl9waW5zX2E+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJbm9uLXJlbW92YWJsZTsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CisJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKKwkJCXVzYjJfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IyX3ZidXM+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kwOiB1c2JAMDFjMTQwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW9oY2kwOiB1c2JAMDFjMTQ0MDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kxOiB1c2JAMDFjMWMwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW9oY2kxOiB1c2JAMDFjMWM0MDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXBpbmN0cmxAMDFjMjA4MDAgeworCQkJbGVkX3BpbnNfbTM6IGxlZF9waW5zQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMjAiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlpcjA6IGlyQDAxYzIxODAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmlyMF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMDFjMjgwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlpMmMwOiBpMmNAMDFjMmFjMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlheHAyMDk6IHBtaWNAMzQgeworCQkJCWNvbXBhdGlibGUgPSAieC1wb3dlcnMsYXhwMjA5IjsKKwkJCQlyZWcgPSA8MHgzND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbm1pX2ludGM+OworCQkJCWludGVycnVwdHMgPSA8MCA4PjsKKworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQl9OworCQl9OworCisJCWdtYWM6IGV0aGVybmV0QDAxYzUwMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmdtYWNfcGluc19taWlfYT47CisJCQlwaHkgPSA8JnBoeTE+OworCQkJcGh5LW1vZGUgPSAibWlpIjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmbGVkX3BpbnNfbTM+OworCisJCWJsdWUgeworCQkJbGFiZWwgPSAibTM6Ymx1ZTp1c3IiOworCQkJZ3Bpb3MgPSA8JnBpbyA3IDIwIDA+OworCQl9OworCX07CisKKwlyZWdfdXNiMV92YnVzOiB1c2IxLXZidXMgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXJlZ191c2IyX3ZidXM6IHVzYjItdmJ1cyB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1vbGludXhpbm8tbGltZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUuZHRzCmluZGV4IDFlYjgxNzUuLjNmM2ZmOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1vbGludXhpbm8tbGltZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1saW1lLmR0cwpAQCAtNCwxMiArNCw0OCBAQAogICogQ29weXJpZ2h0IDIwMTQgLSBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICogQ29weXJpZ2h0IChjKSAyMDE0IEZVS0FVTUkgTmFva2kgPG5hb2JzZEBnbWFpbC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1vbGludXhpbm8tbGltZTIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMzY0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUyLmR0cwpAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IC0gSWFpbiBQYXRvbiA8aXBhdG9uMEBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisvaW5jbHVkZS8gInN1bjdpLWEyMC5kdHNpIgorL2luY2x1ZGUvICJzdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJPbGltZXggQTIwLU9MaW51WGluby1MSU1FMiI7CisJY29tcGF0aWJsZSA9ICJvbGltZXgsYTIwLW9saW51eGluby1saW1lMiIsICJhbGx3aW5uZXIsc3VuN2ktYTIwIjsKKworCXNvY0AwMWMwMDAwMCB7CisJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfYT4sIDwmbW1jMF9jZF9waW5fcmVmZXJlbmNlX2Rlc2lnbj47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZjYzN2Mz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljZC1ncGlvcyA9IDwmcGlvIDcgMSAwPjsgLyogUEgxICovCisJCQljZC1pbnZlcnRlZDsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CisJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKKwkJCXVzYjJfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IyX3ZidXM+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kwOiB1c2JAMDFjMTQwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW9oY2kwOiB1c2JAMDFjMTQ0MDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWFoY2k6IHNhdGFAMDFjMTgwMDAgeworCQkJdGFyZ2V0LXN1cHBseSA9IDwmcmVnX2FoY2lfNXY+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kxOiB1c2JAMDFjMWMwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW9oY2kxOiB1c2JAMDFjMWM0MDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXBpbmN0cmxAMDFjMjA4MDAgeworCQkJYWhjaV9wd3JfcGluX29saW51eGlub2xpbWU6IGFoY2lfcHdyX3BpbkAxIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQQzMiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKworCQkJbGVkX3BpbnNfb2xpbnV4aW5vbGltZTogbGVkX3BpbnNAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgyIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwxPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJdWFydDA6IHNlcmlhbEAwMWMyODAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZ1YXJ0MF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyYzA6IGkyY0AwMWMyYWMwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMwX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCWF4cDIwOTogcG1pY0AzNCB7CisJCQkJY29tcGF0aWJsZSA9ICJ4LXBvd2VycyxheHAyMDkiOworCQkJCXJlZyA9IDwweDM0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZubWlfaW50Yz47CisJCQkJaW50ZXJydXB0cyA9IDwwIDg+OworCisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKworCQkJCWFjaW4tc3VwcGx5ID0gPCZyZWdfYXhwX2lwc291dD47CisJCQkJdmluMi1zdXBwbHkgPSA8JnJlZ19heHBfaXBzb3V0PjsKKwkJCQl2aW4zLXN1cHBseSA9IDwmcmVnX2F4cF9pcHNvdXQ+OworCQkJCWxkbzI0aW4tc3VwcGx5ID0gPCZyZWdfYXhwX2lwc291dD47CisJCQkJbGRvM2luLXN1cHBseSA9IDwmcmVnX2F4cF9pcHNvdXQ+OworCisJCQkJcmVndWxhdG9ycyB7CisJCQkJCXZkZF9ydGM6IGxkbzEgeworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCX07CisKKwkJCQkJYXZjYzogbGRvMiB7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJfTsKKworCQkJCQl2Y2NfY3NpMDogbGRvMyB7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzUwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQl9OworCisJCQkJCXZjY19jc2kxOiBsZG80IHsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyNTAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQl9OworCisJCQkJCXZkZF9jcHU6IGRjZGMyIHsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDcwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyMjc1MDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCX07CisKKwkJCQkJdmRkX2ludDogZGNkYzMgeworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDM1MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlpMmMxOiBpMmNAMDFjMmIwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMV9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWdtYWM6IGV0aGVybmV0QDAxYzUwMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmdtYWNfcGluc19yZ21paV9hPjsKKwkJCXBoeSA9IDwmcGh5MT47CisJCQlwaHktbW9kZSA9ICJyZ21paSI7CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCQl9OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmxlZF9waW5zX29saW51eGlub2xpbWU+OworCisJCWdyZWVuIHsKKwkJCWxhYmVsID0gImEyMC1vbGludXhpbm8tbGltZTI6Z3JlZW46dXNyIjsKKwkJCWdwaW9zID0gPCZwaW8gNyAyIDA+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvbiI7CisJCX07CisJfTsKKworCXJlZ19haGNpXzV2OiBhaGNpLTV2IHsKKwkJcGluY3RybC0wID0gPCZhaGNpX3B3cl9waW5fb2xpbnV4aW5vbGltZT47CisJCWdwaW8gPSA8JnBpbyAyIDMgMD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJcmVnX3VzYjFfdmJ1czogdXNiMS12YnVzIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlyZWdfdXNiMl92YnVzOiB1c2IyLXZidXMgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXJlZ19heHBfaXBzb3V0OiBheHBfaXBzb3V0IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJheHAtaXBzb3V0IjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLXBjZHVpbm8zLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1wY2R1aW5vMy5kdHMKaW5kZXggMDQ2ZGZjMC4uOGRjYTQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLXBjZHVpbm8zLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtcGNkdWlubzMuZHRzCkBAIC0yLDEyICsyLDQ4IEBACiAgKiBDb3B5cmlnaHQgMjAxNCBab2x0YW4gSEVSUEFJCiAgKiBab2x0YW4gSEVSUEFJIDx3aWd5b3JpQHVpZDAuaHU+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCmluZGV4IDgyMDk3YzkuLjgyYTUyNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCkBAIC04LDE4ICs4LDE4IEBACiAgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQogICogd2hvbGUuCiAgKgotICogIGEpIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKICAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQogICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAogICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCiAgKgpAQCAtNjQsNiArNjQsMjAgQEAKIAkJc2VyaWFsNyA9ICZ1YXJ0NzsKIAl9OwogCisJY2hvc2VuIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJZnJhbWVidWZmZXJAMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzaW1wbGUtZnJhbWVidWZmZXIiLCAic2ltcGxlLWZyYW1lYnVmZmVyIjsKKwkJCWFsbHdpbm5lcixwaXBlbGluZSA9ICJkZV9iZTAtbGNkMC1oZG1pIjsKKwkJCWNsb2NrcyA9IDwmcGxsNSAxPiwgPCZhaGJfZ2F0ZXMgMzY+LCA8JmFoYl9nYXRlcyA0Mz4sCisJCQkJIDwmYWhiX2dhdGVzIDQ0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKKwogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC01NTIsOCArNTY2LDggQEAKIAkJCXJlZy1uYW1lcyA9ICJwaHlfY3RybCIsICJwbXUxIiwgInBtdTIiOwogCQkJY2xvY2tzID0gPCZ1c2JfY2xrIDg+OwogCQkJY2xvY2stbmFtZXMgPSAidXNiX3BoeSI7Ci0JCQlyZXNldHMgPSA8JnVzYl9jbGsgMT4sIDwmdXNiX2NsayAyPjsKLQkJCXJlc2V0LW5hbWVzID0gInVzYjFfcmVzZXQiLCAidXNiMl9yZXNldCI7CisJCQlyZXNldHMgPSA8JnVzYl9jbGsgMD4sIDwmdXNiX2NsayAxPiwgPCZ1c2JfY2xrIDI+OworCQkJcmVzZXQtbmFtZXMgPSAidXNiMF9yZXNldCIsICJ1c2IxX3Jlc2V0IiwgInVzYjJfcmVzZXQiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIApAQCAtNjc3LDYgKzY5MSwxMyBAQAogCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OwogCQkJfTsKIAorCQkJdWFydDNfcGluc19iOiB1YXJ0M0AxIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDAiLCAiUEgxIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAidWFydDMiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKIAkJCXVhcnQ0X3BpbnNfYTogdWFydDRAMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEcxMCIsICJQRzExIjsKIAkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAidWFydDQiOwpAQCAtNzg0LDYgKzgwNSwxMyBAQAogCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OwogCQkJfTsKIAorCQkJc3BpMF9waW5zX2E6IHNwaTBAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEkxMCIsICJQSTExIiwgIlBJMTIiLCAiUEkxMyIsICJQSTE0IjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAic3BpMCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwogCQkJc3BpMV9waW5zX2E6IHNwaTFAMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEkxNiIsICJQSTE3IiwgIlBJMTgiLCAiUEkxOSI7CiAJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gInNwaTEiOwpAQCAtODE5LDYgKzg0NywxMyBAQAogCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OwogCQkJfTsKIAorCQkJbW1jMl9waW5zX2E6IG1tYzJAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEM2IiwiUEM3IiwiUEM4IiwiUEM5IiwiUEMxMCIsIlBDMTEiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJtbWMyIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8Mj47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MT47CisJCQl9OworCiAJCQltbWMzX3BpbnNfYTogbW1jM0AwIHsKIAkJCQlhbGx3aW5uZXIscGlucyA9ICJQSTQiLCJQSTUiLCJQSTYiLCJQSTciLCJQSTgiLCJQSTkiOwogCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJtbWMzIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy1pcHBvLXE4aC12NS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMtaXBwby1xOGgtdjUuZHRzCmluZGV4IGU5YjhjY2EuLjdmMjExN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy1pcHBvLXE4aC12NS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIENoZW4tWXUgVHNhaSA8d2Vuc0Bjc2llLm9yZz4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLmR0c2kKaW5kZXggNjE0NmVmMS4uNjA4NmFkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLmR0c2kKQEAgLTgsMTggKzgsMTggQEAKICAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCiAgKiB3aG9sZS4KICAqCi0gKiAgYSkgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQogICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCiAgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAtb3B0aW11cy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAtb3B0aW11cy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2OTQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC1vcHRpbXVzLmR0cwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IENoZW4tWXUgVHNhaQorICoKKyAqIENoZW4tWXUgVHNhaSA8d2Vuc0Bjc2llLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKy9pbmNsdWRlLyAic3VuOWktYTgwLmR0c2kiCisKKy8geworCW1vZGVsID0gIk1lcnJpaSBBODAgT3B0aW11cyBCb2FyZCI7CisJY29tcGF0aWJsZSA9ICJtZXJyaWksYTgwLW9wdGltdXMiLCAiYWxsd2lubmVyLHN1bjlpLWE4MCI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJlYXJseXByaW50ayBjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCXNvYyB7CisJCXBpbzogcGluY3RybEAwNjAwMDgwMCB7CisJCQlpMmMzX3BpbnNfYTogaTJjM0AwIHsKKwkJCQkvKiBFbmFibGUgaW50ZXJuYWwgcHVsbC11cCAqLworCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OworCQkJfTsKKworCQkJbGVkX3BpbnNfb3B0aW11czogbGVkLXBpbnNAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgwIiwgIlBIMSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCisJCQl1YXJ0NF9waW5zX2E6IHVhcnQ0QDAgeworCQkJCS8qIEVuYWJsZSBpbnRlcm5hbCBwdWxsLXVwICovCisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MT47CisJCQl9OworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMDcwMDAwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1YXJ0NDogc2VyaWFsQDA3MDAxMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnVhcnQ0X3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJaTJjMzogaTJjQDA3MDAzNDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzNfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZsZWRfcGluc19vcHRpbXVzPjsKKworCQkvKiBUaGUgTEVEIG5hbWVzIG1hdGNoIHRob3NlIGZvdW5kIG9uIHRoZSBib2FyZCAqLworCisJCWxlZDIgeworCQkJbGFiZWwgPSAib3B0aW11czpsZWQyOnVzciI7CisJCQlncGlvcyA9IDwmcGlvIDcgMSAwPjsKKwkJfTsKKworCQkvKiBsZWQzIGlzIG9uIFBNMTUsIGluIFJfUElPICovCisKKwkJbGVkNCB7CisJCQlsYWJlbCA9ICJvcHRpbXVzOmxlZDQ6dXNyIjsKKwkJCWdwaW9zID0gPCZwaW8gNyAwIDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQ3MTRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLmR0c2kKQEAgLTAsMCArMSw1MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBDaGVuLVl1IFRzYWkKKyAqCisgKiBDaGVuLVl1IFRzYWkgPHdlbnNAY3NpZS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2luY2x1ZGUvICJza2VsZXRvbjY0LmR0c2kiCisKKy8geworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0MTsKKwkJc2VyaWFsMiA9ICZ1YXJ0MjsKKwkJc2VyaWFsMyA9ICZ1YXJ0MzsKKwkJc2VyaWFsNCA9ICZ1YXJ0NDsKKwkJc2VyaWFsNSA9ICZ1YXJ0NTsKKwkJc2VyaWFsNiA9ICZyX3VhcnQ7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1MDogY3B1QDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgwPjsKKwkJfTsKKworCQljcHUxOiBjcHVAMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDE+OworCQl9OworCisJCWNwdTI6IGNwdUAyIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4Mj47CisJCX07CisKKwkJY3B1MzogY3B1QDMgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgzPjsKKwkJfTsKKworCQljcHU0OiBjcHVAMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDEwMD47CisJCX07CisKKwkJY3B1NTogY3B1QDEwMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxMDE+OworCQl9OworCisJCWNwdTY6IGNwdUAxMDIgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MTAyPjsKKwkJfTsKKworCQljcHU3OiBjcHVAMTAzIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDEwMz47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCS8qIDhHQiBtYXguIHdpdGggTFBBRSAqLworCQlyZWcgPSA8MCAweDIwMDAwMDAwIDB4MDIgMD47CisJfTsKKworCWNsb2NrcyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJLyoKKwkJICogbWFwIDY0IGJpdCBhZGRyZXNzIHJhbmdlIGRvd24gdG8gMzIgYml0cywKKwkJICogYXMgdGhlIHBlcmlwaGVyYWxzIGFyZSBhbGwgdW5kZXIgNTEyTUIuCisJCSAqLworCQlyYW5nZXMgPSA8MCAwIDAgMHgyMDAwMDAwMD47CisKKwkJb3NjMjRNOiBvc2MyNE1fY2xrIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJvc2MyNE0iOworCQl9OworCisJCW9zYzMyazogb3NjMzJrX2NsayB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAib3NjMzJrIjsKKwkJfTsKKworCQlwbGw0OiBjbGtAMDYwMDAwMGMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLXBsbDQtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDBjIDB4ND47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAicGxsNCI7CisJCX07CisKKwkJcGxsMTI6IGNsa0AwNjAwMDAyYyB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtcGxsNC1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwMmMgMHg0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwbGwxMiI7CisJCX07CisKKwkJZ3RfY2xrOiBjbGtAMDYwMDAwNWMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWd0LWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDA1YyAweDQ+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDQ+LCA8JnBsbDEyPiwgPCZwbGwxMj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiZ3QiOworCQl9OworCisJCWFoYjA6IGNsa0AwNjAwMDA2MCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYWhiLWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDA2MCAweDQ+OworCQkJY2xvY2tzID0gPCZndF9jbGs+LCA8JnBsbDQ+LCA8JnBsbDEyPiwgPCZwbGwxMj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYWhiMCI7CisJCX07CisKKwkJYWhiMTogY2xrQDA2MDAwMDY0IHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1haGItY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDY0IDB4ND47CisJCQljbG9ja3MgPSA8Jmd0X2Nsaz4sIDwmcGxsND4sIDwmcGxsMTI+LCA8JnBsbDEyPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhaGIxIjsKKwkJfTsKKworCQlhaGIyOiBjbGtAMDYwMDAwNjggeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFoYi1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwNjggMHg0PjsKKwkJCWNsb2NrcyA9IDwmZ3RfY2xrPiwgPCZwbGw0PiwgPCZwbGwxMj4sIDwmcGxsMTI+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFoYjIiOworCQl9OworCisJCWFwYjA6IGNsa0AwNjAwMDA3MCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYXBiMC1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwNzAgMHg0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw0PjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhcGIwIjsKKwkJfTsKKworCQlhcGIxOiBjbGtAMDYwMDAwNzQgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFwYjEtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDc0IDB4ND47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsND47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXBiMSI7CisJCX07CisKKwkJY2NpNDAwX2NsazogY2xrQDA2MDAwMDc4IHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1ndC1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwNzggMHg0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw0PiwgPCZwbGwxMj4sIDwmcGxsMTI+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNjaTQwMCI7CisJCX07CisKKwkJYWhiMF9nYXRlczogY2xrQDA2MDAwNTgwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1haGIwLWdhdGVzLWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDU4MCAweDQ+OworCQkJY2xvY2tzID0gPCZhaGIwPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhaGIwX2ZkIiwgImFoYjBfdmUiLCAiYWhiMF9ncHUiLAorCQkJCQkiYWhiMF9zcyIsICJhaGIwX3NkIiwgImFoYjBfbmFuZDEiLAorCQkJCQkiYWhiMF9uYW5kMCIsICJhaGIwX3NkcmFtIiwKKwkJCQkJImFoYjBfbWlwaV9oc2kiLCAiYWhiMF9zYXRhIiwgImFoYjBfdHMiLAorCQkJCQkiYWhiMF9zcGkwIiwiYWhiMF9zcGkxIiwgImFoYjBfc3BpMiIsCisJCQkJCSJhaGIwX3NwaTMiOworCQl9OworCisJCWFoYjFfZ2F0ZXM6IGNsa0AwNjAwMDU4NCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYWhiMS1nYXRlcy1jbGsiOworCQkJcmVnID0gPDB4MDYwMDA1ODQgMHg0PjsKKwkJCWNsb2NrcyA9IDwmYWhiMT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYWhiMV91c2JvdGciLCAiYWhiMV91c2JoY2kiLAorCQkJCQkiYWhiMV9nbWFjIiwgImFoYjFfbXNnYm94IiwKKwkJCQkJImFoYjFfc3BpbmxvY2siLCAiYWhiMV9oc3RpbWVyIiwKKwkJCQkJImFoYjFfZG1hIjsKKwkJfTsKKworCQlhaGIyX2dhdGVzOiBjbGtAMDYwMDA1ODggeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFoYjItZ2F0ZXMtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwNTg4IDB4ND47CisJCQljbG9ja3MgPSA8JmFoYjI+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFoYjJfbGNkMCIsICJhaGIyX2xjZDEiLAorCQkJCQkiYWhiMl9lZHAiLCAiYWhiMl9jc2kiLCAiYWhiMl9oZG1pIiwKKwkJCQkJImFoYjJfZGUiLCAiYWhiMl9tcCIsICJhaGIyX21pcGlfZHNpIjsKKwkJfTsKKworCQlhcGIwX2dhdGVzOiBjbGtAMDYwMDA1OTAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFwYjAtZ2F0ZXMtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwNTkwIDB4ND47CisJCQljbG9ja3MgPSA8JmFwYjA+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFwYjBfc3BkaWYiLCAiYXBiMF9waW8iLAorCQkJCQkiYXBiMF9hYzk3IiwgImFwYjBfaTJzMCIsICJhcGIwX2kyczEiLAorCQkJCQkiYXBiMF9scmFkYyIsICJhcGIwX2dwYWRjIiwgImFwYjBfdHdkIiwKKwkJCQkJImFwYjBfY2lydHgiOworCQl9OworCisJCWFwYjFfZ2F0ZXM6IGNsa0AwNjAwMDU5NCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYXBiMS1nYXRlcy1jbGsiOworCQkJcmVnID0gPDB4MDYwMDA1OTQgMHg0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXBiMV9pMmMwIiwgImFwYjFfaTJjMSIsCisJCQkJCSJhcGIxX2kyYzIiLCAiYXBiMV9pMmMzIiwgImFwYjFfaTJjNCIsCisJCQkJCSJhcGIxX3VhcnQwIiwgImFwYjFfdWFydDEiLAorCQkJCQkiYXBiMV91YXJ0MiIsICJhcGIxX3VhcnQzIiwKKwkJCQkJImFwYjFfdWFydDQiLCAiYXBiMV91YXJ0NSI7CisJCX07CisJfTsKKworCXNvYyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJLyoKKwkJICogbWFwIDY0IGJpdCBhZGRyZXNzIHJhbmdlIGRvd24gdG8gMzIgYml0cywKKwkJICogYXMgdGhlIHBlcmlwaGVyYWxzIGFyZSBhbGwgdW5kZXIgNTEyTUIuCisJCSAqLworCQlyYW5nZXMgPSA8MCAwIDAgMHgyMDAwMDAwMD47CisKKwkJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckAwMWM0MTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctZ2ljIiwgImFybSxjb3J0ZXgtYTE1LWdpYyI7CisJCQlyZWcgPSA8MHgwMWM0MTAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MDFjNDIwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDAxYzQ0MDAwIDB4MjAwMD4sCisJCQkgICAgICA8MHgwMWM0NjAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMHhmMDQ+OworCQl9OworCisJCWFoYjBfcmVzZXRzOiByZXNldEAwNjAwMDVhMCB7CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtY2xvY2stcmVzZXQiOworCQkJcmVnID0gPDB4MDYwMDA1YTAgMHg0PjsKKwkJfTsKKworCQlhaGIxX3Jlc2V0czogcmVzZXRAMDYwMDA1YTQgeworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWNsb2NrLXJlc2V0IjsKKwkJCXJlZyA9IDwweDA2MDAwNWE0IDB4ND47CisJCX07CisKKwkJYWhiMl9yZXNldHM6IHJlc2V0QDA2MDAwNWE4IHsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1jbG9jay1yZXNldCI7CisJCQlyZWcgPSA8MHgwNjAwMDVhOCAweDQ+OworCQl9OworCisJCWFwYjBfcmVzZXRzOiByZXNldEAwNjAwMDViMCB7CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtY2xvY2stcmVzZXQiOworCQkJcmVnID0gPDB4MDYwMDA1YjAgMHg0PjsKKwkJfTsKKworCQlhcGIxX3Jlc2V0czogcmVzZXRAMDYwMDA1YjQgeworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWNsb2NrLXJlc2V0IjsKKwkJCXJlZyA9IDwweDA2MDAwNWI0IDB4ND47CisJCX07CisKKwkJdGltZXJAMDYwMDBjMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLXRpbWVyIjsKKwkJCXJlZyA9IDwweDA2MDAwYzAwIDB4YTA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE4IDQ+LAorCQkJCSAgICAgPDAgMTkgND4sCisJCQkJICAgICA8MCAyMCA0PiwKKwkJCQkgICAgIDwwIDIxIDQ+LAorCQkJCSAgICAgPDAgMjIgND4sCisJCQkJICAgICA8MCAyMyA0PjsKKworCQkJY2xvY2tzID0gPCZvc2MyNE0+OworCQl9OworCisJCXBpbzogcGluY3RybEAwNjAwMDgwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtcGluY3RybCI7CisJCQlyZWcgPSA8MHgwNjAwMDgwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTEgND4sCisJCQkJICAgICA8MCAxNSA0PiwKKwkJCQkgICAgIDwwIDE2IDQ+LAorCQkJCSAgICAgPDAgMTcgND4sCisJCQkJICAgICA8MCAxMjAgND47CisJCQljbG9ja3MgPSA8JmFwYjBfZ2F0ZXMgNT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCSNncGlvLWNlbGxzID0gPDM+OworCisJCQlpMmMzX3BpbnNfYTogaTJjM0AwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQRzEwIiwgIlBHMTEiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJpMmMzIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCisJCQl1YXJ0MF9waW5zX2E6IHVhcnQwQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMTIiLCAiUEgxMyI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gInVhcnQwIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCisJCQl1YXJ0NF9waW5zX2E6IHVhcnQ0QDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBHMTIiLCAiUEcxMyIsICJQRzE0IiwgIlBHMTUiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJ1YXJ0NCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsQDA3MDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQlyZWcgPSA8MHgwNzAwMDAwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMCA0PjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAxNj47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDE2PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdWFydDE6IHNlcmlhbEAwNzAwMDQwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJcmVnID0gPDB4MDcwMDA0MDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEgND47CisJCQlyZWctc2hpZnQgPSA8Mj47CisJCQlyZWctaW8td2lkdGggPSA8ND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMTc+OworCQkJcmVzZXRzID0gPCZhcGIxX3Jlc2V0cyAxNz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQyOiBzZXJpYWxAMDcwMDA4MDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweDA3MDAwODAwIDB4NDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAyIDQ+OworCQkJcmVnLXNoaWZ0ID0gPDI+OworCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDE4PjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMTg+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0Mzogc2VyaWFsQDA3MDAwYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQlyZWcgPSA8MHgwNzAwMGMwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMyA0PjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAxOT47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDE5PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdWFydDQ6IHNlcmlhbEAwNzAwMTAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJcmVnID0gPDB4MDcwMDEwMDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDQgND47CisJCQlyZWctc2hpZnQgPSA8Mj47CisJCQlyZWctaW8td2lkdGggPSA8ND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMjA+OworCQkJcmVzZXRzID0gPCZhcGIxX3Jlc2V0cyAyMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQ1OiBzZXJpYWxAMDcwMDE0MDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweDA3MDAxNDAwIDB4NDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA1IDQ+OworCQkJcmVnLXNoaWZ0ID0gPDI+OworCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDIxPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMjE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMwOiBpMmNAMDcwMDI4MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMjgwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNiA0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAwPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlpMmMxOiBpMmNAMDcwMDJjMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMmMwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNyA0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAxPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlpMmMyOiBpMmNAMDcwMDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMzAwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgOCA0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAyPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMj47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlpMmMzOiBpMmNAMDcwMDM0MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMzQwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgOSA0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAzPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlpMmM0OiBpMmNAMDcwMDM4MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMzgwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTAgND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgND47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCX07CisKKwkJcl93ZHQ6IHdhdGNoZG9nQDA4MDAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS13ZHQiOworCQkJcmVnID0gPDB4MDgwMDEwMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzYgND47CisJCX07CisKKwkJcl91YXJ0OiBzZXJpYWxAMDgwMDI4MDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweDA4MDAyODAwIDB4NDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAzOCA0PjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VueGktY29tbW9uLXJlZ3VsYXRvcnMuZHRzaQppbmRleCBjOWM1YjEwLi5kODg3NjYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bnhpLWNvbW1vbi1yZWd1bGF0b3JzLmR0c2kKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAxNCAtIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogLyB7CkBAIC0yMSw2ICs1NywxMyBAQAogCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OwogCQkJfTsKIAorCQkJdXNiMF92YnVzX3Bpbl9hOiB1c2IwX3ZidXNfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBCOSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCiAJCQl1c2IxX3ZidXNfcGluX2E6IHVzYjFfdmJ1c19waW5AMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEg2IjsKIAkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOwpAQCAtNDQsMTEgKzg3LDI0IEBACiAJCXJlZ3VsYXRvci1uYW1lID0gImFoY2ktNXYiOwogCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKIAkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOwogCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJCWdwaW8gPSA8JnBpbyAxIDggMD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXJlZ191c2IwX3ZidXM6IHVzYjAtdmJ1cyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ1c2IwX3ZidXNfcGluX2E+OworCQlyZWd1bGF0b3ItbmFtZSA9ICJ1c2IwLXZidXMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJZ3BpbyA9IDwmcGlvIDEgOSAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJcmVnX3VzYjFfdmJ1czogdXNiMS12YnVzIHsKIAkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMTQtZGFsbW9yZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC1kYWxtb3JlLmR0cwppbmRleCA1YzIxZDIxLi44YjdhYTBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC1kYWxtb3JlLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC1kYWxtb3JlLmR0cwpAQCAtMTUsNiArMTUsNyBAQAogCWFsaWFzZXMgewogCQlydGMwID0gIi9pMmNANzAwMGQwMDAvdHBzNjU5MTNANTgiOwogCQlydGMxID0gIi9ydGNANzAwMGUwMDAiOworCQlzZXJpYWwwID0gJnVhcnRkOwogCX07CiAKIAltZW1vcnkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMTQtcm90aC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC1yb3RoLmR0cwppbmRleCBjN2M2ODI1Li4zOGFjZjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC1yb3RoLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC1yb3RoLmR0cwpAQCAtMTUsNiArMTUsMTAgQEAKIAkJbGludXgsaW5pdHJkLWVuZCA9IDwweDgyODAwMDAwPjsKIAl9OwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydGQ7CisJfTsKKwogCWZpcm13YXJlIHsKIAkJdHJ1c3RlZC1mb3VuZGF0aW9ucyB7CiAJCQljb21wYXRpYmxlID0gInRsbSx0cnVzdGVkLWZvdW5kYXRpb25zIjsKQEAgLTkxNiw4ICs5MjAsNiBAQAogCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkaW8tc2RtbWMzIjsKIAkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwogCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQkJCX07CiAKIAkJCQkJbGRvdXNiIHsKQEAgLTk2Miw3ICs5NjQsNyBAQAogCXNkaGNpQDc4MDAwNDAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCQlidXMtd2lkdGggPSA8ND47Ci0JCXZtbWMtc3VwcGx5ID0gPCZ2ZGRpb19zZG1tYzM+OworCQl2cW1tYy1zdXBwbHkgPSA8JnZkZGlvX3NkbW1jMz47CiAJCWNkLWdwaW9zID0gPCZncGlvIFRFR1JBX0dQSU8oViwgMikgR1BJT19BQ1RJVkVfTE9XPjsKIAkJcG93ZXItZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhILCAwKSBHUElPX0FDVElWRV9ISUdIPjsKIAl9OwpAQCAtOTcxLDcgKzk3Myw2IEBACiAJc2RoY2lANzgwMDA2MDAgewogCQlzdGF0dXMgPSAib2theSI7CiAJCWJ1cy13aWR0aCA9IDw4PjsKLQkJdm1tYy1zdXBwbHkgPSA8JnZkZF8xdjg+OwogCQlub24tcmVtb3ZhYmxlOwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTE0LXRuNy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC10bjcuZHRzCmluZGV4IDk2MzY2MjEuLmY5MWMyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTE0LXRuNy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMTQtdG43LmR0cwpAQCAtMTUsNiArMTUsMTAgQEAKIAkJbGludXgsaW5pdHJkLWVuZCA9IDwweDgyODAwMDAwPjsKIAl9OwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydGQ7CisJfTsKKwogCWZpcm13YXJlIHsKIAkJdHJ1c3RlZC1mb3VuZGF0aW9ucyB7CiAJCQljb21wYXRpYmxlID0gInRsbSx0cnVzdGVkLWZvdW5kYXRpb25zIjsKQEAgLTI0MCw3ICsyNDQsNiBAQAogCXNkaGNpQDc4MDAwNjAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCQlidXMtd2lkdGggPSA8OD47Ci0JCXZtbWMtc3VwcGx5ID0gPCZ2ZGRfMXY4PjsKIAkJbm9uLXJlbW92YWJsZTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMTQuZHRzaQppbmRleCAyY2E5YzE4Li4yMjJmM2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTE0LmR0c2kKQEAgLTksMTMgKzksNiBAQAogCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTE0IjsKIAlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCi0JYWxpYXNlcyB7Ci0JCXNlcmlhbDAgPSAmdWFydGE7Ci0JCXNlcmlhbDEgPSAmdWFydGI7Ci0JCXNlcmlhbDIgPSAmdWFydGM7Ci0JCXNlcmlhbDMgPSAmdWFydGQ7Ci0JfTsKLQogCWhvc3QxeEA1MDAwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTE0LWhvc3QxeCIsICJzaW1wbGUtYnVzIjsKIAkJcmVnID0gPDB4NTAwMDAwMDAgMHgwMDAyODAwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC1qZXRzb24tdGsxLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTI0LWpldHNvbi10azEuZHRzCmluZGV4IDAyOWM5YTAyLi41MWIzNzNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC1qZXRzb24tdGsxLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC1qZXRzb24tdGsxLmR0cwpAQCAtMTAsNiArMTAsNyBAQAogCWFsaWFzZXMgewogCQlydGMwID0gIi9pMmNAMCw3MDAwZDAwMC9wbWljQDQwIjsKIAkJcnRjMSA9ICIvcnRjQDAsNzAwMGUwMDAiOworCQlzZXJpYWwwID0gJnVhcnRkOwogCX07CiAKIAltZW1vcnkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtbnlhbi1iaWcuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtbnlhbi1iaWcuZHRzCmluZGV4IDdkMDc4NGMuLjUzMTgxZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTI0LW55YW4tYmlnLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC1ueWFuLWJpZy5kdHMKQEAgLTEwLDYgKzEwLDcgQEAKIAlhbGlhc2VzIHsKIAkJcnRjMCA9ICIvaTJjQDAsNzAwMGQwMDAvcG1pY0A0MCI7CiAJCXJ0YzEgPSAiL3J0Y0AwLDcwMDBlMDAwIjsKKwkJc2VyaWFsMCA9ICZ1YXJ0YTsKIAl9OwogCiAJbWVtb3J5IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTI0LXZlbmljZTIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtdmVuaWNlMi5kdHMKaW5kZXggMTMwMDg4NS4uNWMzZjc4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtdmVuaWNlMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtdmVuaWNlMi5kdHMKQEAgLTEwLDYgKzEwLDcgQEAKIAlhbGlhc2VzIHsKIAkJcnRjMCA9ICIvaTJjQDAsNzAwMGQwMDAvcG1pY0A0MCI7CiAJCXJ0YzEgPSAiL3J0Y0AwLDcwMDBlMDAwIjsKKwkJc2VyaWFsMCA9ICZ1YXJ0YTsKIAl9OwogCiAJbWVtb3J5IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTI0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC5kdHNpCmluZGV4IDQ3OGM1NTUuLmRmMmIwNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTI0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQuZHRzaQpAQCAtMjg2LDcgKzI4Niw3IEBACiAJICogdGhlIEFQQiBETUEgYmFzZWQgc2VyaWFsIGRyaXZlciwgdGhlIGNvbXB0aWJsZSBpcwogCSAqICJudmlkaWEsdGVncmExMjQtaHN1YXJ0IiwgIm52aWRpYSx0ZWdyYTMwLWhzdWFydCIuCiAJICovCi0Jc2VyaWFsQDAsNzAwMDYwMDAgeworCXVhcnRhOiBzZXJpYWxAMCw3MDAwNjAwMCB7CiAJCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LXVhcnQiLCAibnZpZGlhLHRlZ3JhMjAtdWFydCI7CiAJCXJlZyA9IDwweDAgMHg3MDAwNjAwMCAweDAgMHg0MD47CiAJCXJlZy1zaGlmdCA9IDwyPjsKQEAgLTI5OSw3ICsyOTksNyBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKLQlzZXJpYWxAMCw3MDAwNjA0MCB7CisJdWFydGI6IHNlcmlhbEAwLDcwMDA2MDQwIHsKIAkJY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmExMjQtdWFydCIsICJudmlkaWEsdGVncmEyMC11YXJ0IjsKIAkJcmVnID0gPDB4MCAweDcwMDA2MDQwIDB4MCAweDQwPjsKIAkJcmVnLXNoaWZ0ID0gPDI+OwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCXNlcmlhbEAwLDcwMDA2MjAwIHsKKwl1YXJ0Yzogc2VyaWFsQDAsNzAwMDYyMDAgewogCQljb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTEyNC11YXJ0IiwgIm52aWRpYSx0ZWdyYTIwLXVhcnQiOwogCQlyZWcgPSA8MHgwIDB4NzAwMDYyMDAgMHgwIDB4NDA+OwogCQlyZWctc2hpZnQgPSA8Mj47CkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCi0Jc2VyaWFsQDAsNzAwMDYzMDAgeworCXVhcnRkOiBzZXJpYWxAMCw3MDAwNjMwMCB7CiAJCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LXVhcnQiLCAibnZpZGlhLHRlZ3JhMjAtdWFydCI7CiAJCXJlZyA9IDwweDAgMHg3MDAwNjMwMCAweDAgMHg0MD47CiAJCXJlZy1zaGlmdCA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtaGFybW9ueS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLWhhcm1vbnkuZHRzCmluZGV4IGEzNzI3OWEuLmI5MjZhMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtaGFybW9ueS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEyMC1oYXJtb255LmR0cwpAQCAtMTAsNiArMTAsNyBAQAogCWFsaWFzZXMgewogCQlydGMwID0gIi9pMmNANzAwMGQwMDAvdHBzNjU4NnhAMzQiOwogCQlydGMxID0gIi9ydGNANzAwMGUwMDAiOworCQlzZXJpYWwwID0gJnVhcnRkOwogCX07CiAKIAltZW1vcnkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEyMC1pcmlzLTUxMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLWlyaXMtNTEyLmR0cwppbmRleCA4Y2ZiODNmLi4xZGQ3ZDdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLWlyaXMtNTEyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLWlyaXMtNTEyLmR0cwpAQCAtNiw2ICs2LDExIEBACiAJbW9kZWwgPSAiVG9yYWRleCBDb2xpYnJpIFQyMCA1MTJNQiBvbiBJcmlzIjsKIAljb21wYXRpYmxlID0gInRvcmFkZXgsaXJpcyIsICJ0b3JhZGV4LGNvbGlicmlfdDIwLTUxMiIsICJudmlkaWEsdGVncmEyMCI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0YTsKKwkJc2VyaWFsMSA9ICZ1YXJ0ZDsKKwl9OworCiAJaG9zdDF4QDUwMDAwMDAwIHsKIAkJaGRtaUA1NDI4MDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLW1lZGNvbS13aWRlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtbWVkY29tLXdpZGUuZHRzCmluZGV4IDFiN2M1NmIuLjliODc1MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtbWVkY29tLXdpZGUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtbWVkY29tLXdpZGUuZHRzCkBAIC02LDYgKzYsMTAgQEAKIAltb2RlbCA9ICJBdmlvbmljIERlc2lnbiBNZWRjb20tV2lkZSBib2FyZCI7CiAJY29tcGF0aWJsZSA9ICJhZCxtZWRjb20td2lkZSIsICJhZCx0YW1vbnRlbiIsICJudmlkaWEsdGVncmEyMCI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0ZDsKKwl9OworCiAJcHdtQDcwMDBhMDAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLXBhejAwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtcGF6MDAuZHRzCmluZGV4IGQ0NDM4ZTMuLmVkN2UxMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtcGF6MDAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtcGF6MDAuZHRzCkBAIC0xMCw2ICsxMCw4IEBACiAJYWxpYXNlcyB7CiAJCXJ0YzAgPSAiL2kyY0A3MDAwZDAwMC90cHM2NTg2eEAzNCI7CiAJCXJ0YzEgPSAiL3J0Y0A3MDAwZTAwMCI7CisJCXNlcmlhbDAgPSAmdWFydGE7CisJCXNlcmlhbDEgPSAmdWFydGM7CiAJfTsKIAogCW1lbW9yeSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLXNlYWJvYXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtc2VhYm9hcmQuZHRzCmluZGV4IGExZDRiZjkuLmVhMjgyYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtc2VhYm9hcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtc2VhYm9hcmQuZHRzCkBAIC0xMCw2ICsxMCw3IEBACiAJYWxpYXNlcyB7CiAJCXJ0YzAgPSAiL2kyY0A3MDAwZDAwMC90cHM2NTg2eEAzNCI7CiAJCXJ0YzEgPSAiL3J0Y0A3MDAwZTAwMCI7CisJCXNlcmlhbDAgPSAmdWFydGQ7CiAJfTsKIAogCW1lbW9yeSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLXRhbW9udGVuLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLXRhbW9udGVuLmR0c2kKaW5kZXggODBlN2QzOC4uMTNkNGU2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEyMC10YW1vbnRlbi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtdGFtb250ZW4uZHRzaQpAQCAtNyw2ICs3LDcgQEAKIAlhbGlhc2VzIHsKIAkJcnRjMCA9ICIvaTJjQDcwMDBkMDAwL3RwczY1ODZ4QDM0IjsKIAkJcnRjMSA9ICIvcnRjQDcwMDBlMDAwIjsKKwkJc2VyaWFsMCA9ICZ1YXJ0ZDsKIAl9OwogCiAJbWVtb3J5IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtdHJpbXNsaWNlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtdHJpbXNsaWNlLmR0cwppbmRleCA1YWQ4Nzk3Li5kOTlhZjRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLXRyaW1zbGljZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEyMC10cmltc2xpY2UuZHRzCkBAIC0xMCw2ICsxMCw3IEBACiAJYWxpYXNlcyB7CiAJCXJ0YzAgPSAiL2kyY0A3MDAwYzUwMC9ydGNANTYiOwogCQlydGMxID0gIi9ydGNANzAwMGUwMDAiOworCQlzZXJpYWwwID0gJnVhcnRhOwogCX07CiAKIAltZW1vcnkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEyMC12ZW50YW5hLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtdmVudGFuYS5kdHMKaW5kZXggY2E4NDg0Yy4uMDRjNThlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEyMC12ZW50YW5hLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLXZlbnRhbmEuZHRzCkBAIC0xMCw2ICsxMCw3IEBACiAJYWxpYXNlcyB7CiAJCXJ0YzAgPSAiL2kyY0A3MDAwZDAwMC90cHM2NTg2eEAzNCI7CiAJCXJ0YzEgPSAiL3J0Y0A3MDAwZTAwMCI7CisJCXNlcmlhbDAgPSAmdWFydGQ7CiAJfTsKIAogCW1lbW9yeSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLXdoaXN0bGVyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtd2hpc3RsZXIuZHRzCmluZGV4IDE4NDM3MjUuLjM0MGQ4MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtd2hpc3RsZXIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtd2hpc3RsZXIuZHRzCkBAIC0xMCw2ICsxMCw3IEBACiAJYWxpYXNlcyB7CiAJCXJ0YzAgPSAiL2kyY0A3MDAwZDAwMC9tYXg4OTA3QDNjIjsKIAkJcnRjMSA9ICIvcnRjQDcwMDBlMDAwIjsKKwkJc2VyaWFsMCA9ICZ1YXJ0YTsKIAl9OwogCiAJbWVtb3J5IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAuZHRzaQppbmRleCAzYjM3NGM0Li44YWNmNWQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEyMC5kdHNpCkBAIC05LDE0ICs5LDYgQEAKIAljb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTIwIjsKIAlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKIAotCWFsaWFzZXMgewotCQlzZXJpYWwwID0gJnVhcnRhOwotCQlzZXJpYWwxID0gJnVhcnRiOwotCQlzZXJpYWwyID0gJnVhcnRjOwotCQlzZXJpYWwzID0gJnVhcnRkOwotCQlzZXJpYWw0ID0gJnVhcnRlOwotCX07Ci0KIAlob3N0MXhANTAwMDAwMDAgewogCQljb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTIwLWhvc3QxeCIsICJzaW1wbGUtYnVzIjsKIAkJcmVnID0gPDB4NTAwMDAwMDAgMHgwMDAyNDAwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTMwLWFwYWxpcy1ldmFsLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtYXBhbGlzLWV2YWwuZHRzCmluZGV4IDQ1ZDQwZjAuLjYyMzZiZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtYXBhbGlzLWV2YWwuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtYXBhbGlzLWV2YWwuZHRzCkBAIC0xMSw2ICsxMSwxMCBAQAogCQlydGMwID0gIi9pMmNANzAwMGMwMDAvcnRjQDY4IjsKIAkJcnRjMSA9ICIvaTJjQDcwMDBkMDAwL3RwczY1OTExQDJkIjsKIAkJcnRjMiA9ICIvcnRjQDcwMDBlMDAwIjsKKwkJc2VyaWFsMCA9ICZ1YXJ0YTsKKwkJc2VyaWFsMSA9ICZ1YXJ0YjsKKwkJc2VyaWFsMiA9ICZ1YXJ0YzsKKwkJc2VyaWFsMyA9ICZ1YXJ0ZDsKIAl9OwogCiAJcGNpZS1jb250cm9sbGVyQDAwMDAzMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtYmVhdmVyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtYmVhdmVyLmR0cwppbmRleCBjZWU4ZjIyLi42YjE1N2VlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTMwLWJlYXZlci5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1iZWF2ZXIuZHRzCkBAIC05LDYgKzksNyBAQAogCWFsaWFzZXMgewogCQlydGMwID0gIi9pMmNANzAwMGQwMDAvdHBzNjU5MTFAMmQiOwogCQlydGMxID0gIi9ydGNANzAwMGUwMDAiOworCQlzZXJpYWwwID0gJnVhcnRhOwogCX07CiAKIAltZW1vcnkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1jYXJkaHUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtY2FyZGh1LmR0c2kKaW5kZXggMjA2Mzc5NS4uY2JmNWExYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1jYXJkaHUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTMwLWNhcmRodS5kdHNpCkBAIC0zMCw2ICszMCw4IEBACiAJYWxpYXNlcyB7CiAJCXJ0YzAgPSAiL2kyY0A3MDAwZDAwMC90cHM2NTkxMUAyZCI7CiAJCXJ0YzEgPSAiL3J0Y0A3MDAwZTAwMCI7CisJCXNlcmlhbDAgPSAmdWFydGE7CisJCXNlcmlhbDEgPSAmdWFydGM7CiAJfTsKIAogCW1lbW9yeSB7CkBAIC0xODcsNyArMTg5LDcgQEAKIAogCQkvKiBBTFMgYW5kIFByb3hpbWl0eSBzZW5zb3IgKi8KIAkJaXNsMjkwMjhANDQgewotCQkJY29tcGF0aWJsZSA9ICJpc2lsLGlzbDI5MDI4IjsKKwkJCWNvbXBhdGlibGUgPSAiaXNsLGlzbDI5MDI4IjsKIAkJCXJlZyA9IDwweDQ0PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8+OwogCQkJaW50ZXJydXB0cyA9IDxURUdSQV9HUElPKEwsIDApIElSUV9UWVBFX0xFVkVMX0hJR0g+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1jb2xpYnJpLWV2YWwtdjMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1jb2xpYnJpLWV2YWwtdjMuZHRzCmluZGV4IDc3OTNhYmQuLjRkM2RkYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtY29saWJyaS1ldmFsLXYzLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTMwLWNvbGlicmktZXZhbC12My5kdHMKQEAgLTEwLDYgKzEwLDkgQEAKIAkJcnRjMCA9ICIvaTJjQDcwMDBjMDAwL3J0Y0A2OCI7CiAJCXJ0YzEgPSAiL2kyY0A3MDAwZDAwMC90cHM2NTkxMUAyZCI7CiAJCXJ0YzIgPSAiL3J0Y0A3MDAwZTAwMCI7CisJCXNlcmlhbDAgPSAmdWFydGE7CisJCXNlcmlhbDEgPSAmdWFydGI7CisJCXNlcmlhbDIgPSAmdWFydGQ7CiAJfTsKIAogCWhvc3QxeEA1MDAwMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTMwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTMwLmR0c2kKaW5kZXggYWE2Y2NlYS4uYjI3MGI5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAuZHRzaQpAQCAtOSwxNCArOSw2IEBACiAJY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEzMCI7CiAJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47CiAKLQlhbGlhc2VzIHsKLQkJc2VyaWFsMCA9ICZ1YXJ0YTsKLQkJc2VyaWFsMSA9ICZ1YXJ0YjsKLQkJc2VyaWFsMiA9ICZ1YXJ0YzsKLQkJc2VyaWFsMyA9ICZ1YXJ0ZDsKLQkJc2VyaWFsNCA9ICZ1YXJ0ZTsKLQl9OwotCiAJcGNpZS1jb250cm9sbGVyQDAwMDAzMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEzMC1wY2llIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmLWNvbGlicmktZXZhbC12My5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmYtY29saWJyaS1ldmFsLXYzLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhNDUyYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmLWNvbGlicmktZXZhbC12My5kdHNpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBUb3JhZGV4IEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvIHsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eUxQMCwxMTUyMDAiOworCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXN5c181djBfcmVnOiByZWd1bGF0b3JAMCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MD47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICI1djAiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCX07CisKKwkJLyogVVNCSF9QRU4gKi8KKwkJdXNiaF92YnVzX3JlZzogcmVndWxhdG9yQDEgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2JoMV9yZWc+OworCQkJcmVnID0gPDE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiaF92YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvMyAxOSBHUElPX0FDVElWRV9MT1c+OworCQkJdmluLXN1cHBseSA9IDwmc3lzXzV2MF9yZWc+OworCQl9OworCX07Cit9OworCismYmwgeworCWJyaWdodG5lc3MtbGV2ZWxzID0gPDAgNCA4IDE2IDMyIDY0IDEyOCAyNTU+OworCWRlZmF1bHQtYnJpZ2h0bmVzcy1sZXZlbCA9IDw2PjsKKwlzdGF0dXMgID0gIm9rYXkiOworfTsKKworJmVzZGhjMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKKwlidXMtd2lkdGggPSA8ND47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmZlYzEgeworCXBoeS1tb2RlID0gInJtaWkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMwIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwkvKiBNNDFUME02IHJlYWwgdGltZSBjbG9jayBvbiBjYXJyaWVyIGJvYXJkICovCisJcnRjOiBtNDF0MG02QDY4IHsKKwkJY29tcGF0aWJsZSA9ICJzdCxtNDF0MDAiOworCQlyZWcgPSA8MHg2OD47CisJfTsKK307CisKKyZwd20wIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcHdtMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYmgxIHsKKwl2YnVzLXN1cHBseSA9IDwmdXNiaF92YnVzX3JlZz47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmYtY29saWJyaS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmYtY29saWJyaS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjU3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy92Zi1jb2xpYnJpLmR0c2kKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBUb3JhZGV4IEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvIHsKKwlibDogYmFja2xpZ2h0IHsKKwkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKKwkJcHdtcyA9IDwmcHdtMCAwIDUwMDAwMDAgMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKK307CisKKyZhZGMwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismYWRjMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmVkbWEwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXNkaGMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lc2RoYzE+OworCWJ1cy13aWR0aCA9IDw0PjsKKwljZC1ncGlvcyA9IDwmZ3BpbzIgMTAgR1BJT19BQ1RJVkVfTE9XPjsKK307CisKKyZmZWMxIHsKKwlwaHktbW9kZSA9ICJybWlpIjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9mZWMxPjsKK307CisKKyZpMmMwIHsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMwPjsKK307CisKKyZwd20wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wd20wPjsKK307CisKKyZwd20xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wd20xPjsKK307CisKKyZ1YXJ0MCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDA+OworfTsKKworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQyPjsKK307CisKKyZ1c2JkZXYwIHsKKwlkaXNhYmxlLW92ZXItY3VycmVudDsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiaDEgeworCWRpc2FibGUtb3Zlci1jdXJyZW50OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JtaXNjMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYm1pc2MxIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNicGh5MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYnBoeTEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpb211eGMgeworCXZmNjEwLWNvbGlicmkgeworCQlwaW5jdHJsX2dwaW9fZXh0OiBncGlvX2V4dCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFREMTBfX0dQSU9fODkJMHgyMmVkIC8qIEVYVF9JT18wICovCisJCQkJVkY2MTBfUEFEX1BURDlfX0dQSU9fODgJCTB4MjJlZCAvKiBFWFRfSU9fMSAqLworCQkJCVZGNjEwX1BBRF9QVEQyNl9fR1BJT182OAkweDIyZWQgLyogRVhUX0lPXzIgKi8KKwkJCT47CisJCX07CisKKwkJcGluY3RybF9lc2RoYzE6IGVzZGhjMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRBMjRfX0VTREhDMV9DTEsJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI1X19FU0RIQzFfQ01ECTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEEyNl9fRVNESEMxX0RBVDAJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI3X19FU0RIQzFfREFUMQkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjhfX0VTREhDMV9EQVRBMgkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjlfX0VTREhDMV9EQVQzCTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEIyMF9fR1BJT180MgkweDIxOWQKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9mZWMxOiBmZWMxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEM5X19FTkVUX1JNSUkxX01EQwkJMHgzMGQyCisJCQkJVkY2MTBfUEFEX1BUQzEwX19FTkVUX1JNSUkxX01ESU8JMHgzMGQzCisJCQkJVkY2MTBfUEFEX1BUQzExX19FTkVUX1JNSUkxX0NSUwkJMHgzMGQxCisJCQkJVkY2MTBfUEFEX1BUQzEyX19FTkVUX1JNSUlfUlhEMQkJMHgzMGQxCisJCQkJVkY2MTBfUEFEX1BUQzEzX19FTkVUX1JNSUkxX1JYRDAJMHgzMGQxCisJCQkJVkY2MTBfUEFEX1BUQzE0X19FTkVUX1JNSUkxX1JYRVIJMHgzMGQxCisJCQkJVkY2MTBfUEFEX1BUQzE1X19FTkVUX1JNSUkxX1RYRDEJMHgzMGQyCisJCQkJVkY2MTBfUEFEX1BUQzE2X19FTkVUX1JNSUkxX1RYRDAJMHgzMGQyCisJCQkJVkY2MTBfUEFEX1BUQzE3X19FTkVUX1JNSUkxX1RYRU4JMHgzMGQyCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfaTJjMDogaTJjMGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRCMTRfX0kyQzBfU0NMCQkweDM3ZmYKKwkJCQlWRjYxMF9QQURfUFRCMTVfX0kyQzBfU0RBCQkweDM3ZmYKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9wd20wOiBwd20wZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEIwX19GVE0wX0NIMAkJMHgxMTgyCisJCQkJVkY2MTBfUEFEX1BUQjFfX0ZUTTBfQ0gxCQkweDExODIKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9wd20xOiBwd20xZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEI4X19GVE0xX0NIMAkJMHgxMTgyCisJCQkJVkY2MTBfUEFEX1BUQjlfX0ZUTTFfQ0gxCQkweDExODIKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MDogdWFydDBncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BUQjEwX19VQVJUMF9UWAkJMHgyMWEyCisJCQkJVkY2MTBfUEFEX1BUQjExX19VQVJUMF9SWAkJMHgyMWExCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdWFydDE6IHVhcnQxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEI0X19VQVJUMV9UWAkJMHgyMWEyCisJCQkJVkY2MTBfUEFEX1BUQjVfX1VBUlQxX1JYCQkweDIxYTEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MjogdWFydDJncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BURDBfX1VBUlQyX1RYCQkweDIxYTIKKwkJCQlWRjYxMF9QQURfUFREMV9fVUFSVDJfUlgJCTB4MjFhMQorCQkJCVZGNjEwX1BBRF9QVEQyX19VQVJUMl9SVFMJCTB4MjFhMgorCQkJCVZGNjEwX1BBRF9QVEQzX19VQVJUMl9DVFMJCTB4MjFhMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzYmgxX3JlZzogZ3Bpb191c2JfdmJ1cyB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRENF9fR1BJT184MwkJCTB4MjJlZAorCQkJPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNTAwLWNvbGlicmktZXZhbC12My5kdHMgYi9hcmNoL2FybS9ib290L2R0cy92ZjUwMC1jb2xpYnJpLWV2YWwtdjMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzc4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjUwMC1jb2xpYnJpLWV2YWwtdjMuZHRzCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBUb3JhZGV4IEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJ2ZjUwMC1jb2xpYnJpLmR0c2kiCisjaW5jbHVkZSAidmYtY29saWJyaS1ldmFsLXYzLmR0c2kiCisKKy8geworCW1vZGVsID0gIlRvcmFkZXggQ29saWJyaSBWRjUwIG9uIENvbGlicmkgRXZhbHVhdGlvbiBCb2FyZCI7CisJY29tcGF0aWJsZSA9ICJ0b3JhZGV4LHZmNTAwLWNvbGlicmlfdmY1MC1vbi1ldmFsIiwgInRvcmFkZXgsdmY1MDAtY29saWJyaV92ZjUwIiwgImZzbCx2ZjUwMCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY1MDAtY29saWJyaS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY1MDAtY29saWJyaS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTM0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjUwMC1jb2xpYnJpLmR0c2kKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFRvcmFkZXggQUcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlICJ2ZjUwMC5kdHNpIgorI2luY2x1ZGUgInZmLWNvbGlicmkuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiVG9yYWRleCBDb2xpYnJpIFZGNTAgQ09NIjsKKwljb21wYXRpYmxlID0gInRvcmFkZXgsdmY2MTAtY29saWJyaV92ZjUwIiwgImZzbCx2ZjUwMCI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDgwMDAwMDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY1MDAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNTAwLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2NzAwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNTAwLmR0c2kKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisjaW5jbHVkZSAidmZ4eHguZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisKKy8geworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJYTVfY3B1OiBjcHVAMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDA+OworCQl9OworCX07CisKKwlzb2MgeworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKKworCQlhaXBzLWJ1c0A0MDAwMDAwMCB7CisKKwkJCWludGM6IGludGVycnVwdC1jb250cm9sbGVyQDQwMDAyMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktZ2ljIjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCXJlZyA9IDwweDQwMDAzMDAwIDB4MTAwMD4sCisJCQkJICAgICAgPDB4NDAwMDIxMDAgMHgxMDA+OworCQkJfTsKKworCQkJZ2xvYmFsX3RpbWVyOiB0aW1lckA0MDAwMjIwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdsb2JhbC10aW1lciI7CisJCQkJcmVnID0gPDB4NDAwMDIyMDAgMHgyMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfUExBVEZPUk1fQlVTPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZhZGMwIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTMgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismYWRjMSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDU0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJmNhbjAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA1OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZjYW4xIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTkgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZHNwaTAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZlZG1hMCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQk8R0lDX1NQSSA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCWludGVycnVwdC1uYW1lcyA9ICJlZG1hLXR4IiwgImVkbWEtZXJyIjsKK307CisKKyZlZG1hMSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPEdJQ19TUEkgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJaW50ZXJydXB0LW5hbWVzID0gImVkbWEtdHgiLCAiZWRtYS1lcnIiOworfTsKKworJmVzZGhjMSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJmZlYzAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA3OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZmZWMxIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzkgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZnRtIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNDQgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzEgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzIgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzMgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMDkgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzQgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzUgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismaTJjMCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDcxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnBpdCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnFzcGkwIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismc2FpMiB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVhcnQwIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNjEgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismdWFydDEgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA2MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1YXJ0MiB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDYzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVhcnQzIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNjQgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismdWFydDQgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1YXJ0NSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDY2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVzYmRldjAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1c2JoMSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVzYnBoeTAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA1MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1c2JwaHkxIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTEgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS1ldmFsLXYzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmktZXZhbC12My5kdHMKaW5kZXggN2ZiMzA2Ni4uMTBlYmU5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS1ldmFsLXYzLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb2xpYnJpLWV2YWwtdjMuZHRzCkBAIC05LDM4ICs5LDkgQEAKIAogL2R0cy12MS87CiAjaW5jbHVkZSAidmY2MTAtY29saWJyaS5kdHNpIgorI2luY2x1ZGUgInZmLWNvbGlicmktZXZhbC12My5kdHNpIgogCiAvIHsKIAltb2RlbCA9ICJUb3JhZGV4IENvbGlicmkgVkY2MSBvbiBDb2xpYnJpIEV2YWx1YXRpb24gQm9hcmQiOwogCWNvbXBhdGlibGUgPSAidG9yYWRleCx2ZjYxMC1jb2xpYnJpX3ZmNjEtb24tZXZhbCIsICJ0b3JhZGV4LHZmNjEwLWNvbGlicmlfdmY2MSIsICJmc2wsdmY2MTAiOwotCi0JY2hvc2VuIHsKLQkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlMUDAsMTE1MjAwIjsKLQl9OwotfTsKLQotJmVzZGhjMSB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKLQlidXMtd2lkdGggPSA8ND47Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJmZlYzEgewotCXBoeS1tb2RlID0gInJtaWkiOwotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzE+OwotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KLSZ1YXJ0MCB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJnVhcnQxIHsKLQlzdGF0dXMgPSAib2theSI7Ci19OwotCi0mdWFydDIgewotCXN0YXR1cyA9ICJva2F5IjsKLX07Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmkuZHRzaQppbmRleCAwY2Q4MzQzLi4xOWZlMDQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb2xpYnJpLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS5kdHNpCkBAIC04LDYgKzgsNyBAQAogICovCiAKICNpbmNsdWRlICJ2ZjYxMC5kdHNpIgorI2luY2x1ZGUgInZmLWNvbGlicmkuZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiVG9yYWRleCBDb2xpYnJpIFZGNjEgQ09NIjsKQEAgLTE2LDEwOCArMTcsOSBAQAogCW1lbW9yeSB7CiAJCXJlZyA9IDwweDgwMDAwMDAwIDB4MTAwMDAwMDA+OwogCX07Ci0KLQljbG9ja3MgewotCQllbmV0X2V4dCB7Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47Ci0JCX07Ci0JfTsKLQotfTsKLQotJmVzZGhjMSB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKLQlidXMtd2lkdGggPSA8ND47Ci19OwotCi0mZmVjMSB7Ci0JcGh5LW1vZGUgPSAicm1paSI7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmVjMT47CiB9OwogCiAmTDIgewogCWFybSxkYXRhLWxhdGVuY3kgPSA8MiAxIDI+OwogCWFybSx0YWctbGF0ZW5jeSA9IDwzIDIgMz47CiB9OwotCi0mdWFydDAgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQwPjsKLX07Ci0KLSZ1YXJ0MSB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDE+OwotfTsKLQotJnVhcnQyIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0Mj47Ci19OwotCi0mdXNiZGV2MCB7Ci0JZGlzYWJsZS1vdmVyLWN1cnJlbnQ7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJnVzYmgxIHsKLQlkaXNhYmxlLW92ZXItY3VycmVudDsKLQlzdGF0dXMgPSAib2theSI7Ci19OwotCi0maW9tdXhjIHsKLQl2ZjYxMC1jb2xpYnJpIHsKLQkJcGluY3RybF9lc2RoYzE6IGVzZGhjMWdycCB7Ci0JCQlmc2wscGlucyA9IDwKLQkJCQlWRjYxMF9QQURfUFRBMjRfX0VTREhDMV9DTEsJMHgzMWVmCi0JCQkJVkY2MTBfUEFEX1BUQTI1X19FU0RIQzFfQ01ECTB4MzFlZgotCQkJCVZGNjEwX1BBRF9QVEEyNl9fRVNESEMxX0RBVDAJMHgzMWVmCi0JCQkJVkY2MTBfUEFEX1BUQTI3X19FU0RIQzFfREFUMQkweDMxZWYKLQkJCQlWRjYxMF9QQURfUFRBMjhfX0VTREhDMV9EQVRBMgkweDMxZWYKLQkJCQlWRjYxMF9QQURfUFRBMjlfX0VTREhDMV9EQVQzCTB4MzFlZgotCQkJCVZGNjEwX1BBRF9QVEIyMF9fR1BJT180MgkweDIxOWQKLQkJCT47Ci0JCX07Ci0KLQkJcGluY3RybF9mZWMxOiBmZWMxZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCVZGNjEwX1BBRF9QVEM5X19FTkVUX1JNSUkxX01EQwkJMHgzMGQyCi0JCQkJVkY2MTBfUEFEX1BUQzEwX19FTkVUX1JNSUkxX01ESU8JMHgzMGQzCi0JCQkJVkY2MTBfUEFEX1BUQzExX19FTkVUX1JNSUkxX0NSUwkJMHgzMGQxCi0JCQkJVkY2MTBfUEFEX1BUQzEyX19FTkVUX1JNSUlfUlhEMQkJMHgzMGQxCi0JCQkJVkY2MTBfUEFEX1BUQzEzX19FTkVUX1JNSUkxX1JYRDAJMHgzMGQxCi0JCQkJVkY2MTBfUEFEX1BUQzE0X19FTkVUX1JNSUkxX1JYRVIJMHgzMGQxCi0JCQkJVkY2MTBfUEFEX1BUQzE1X19FTkVUX1JNSUkxX1RYRDEJMHgzMGQyCi0JCQkJVkY2MTBfUEFEX1BUQzE2X19FTkVUX1JNSUkxX1RYRDAJMHgzMGQyCi0JCQkJVkY2MTBfUEFEX1BUQzE3X19FTkVUX1JNSUkxX1RYRU4JMHgzMGQyCi0JCQk+OwotCQl9OwotCi0JCXBpbmN0cmxfdWFydDA6IHVhcnQwZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCVZGNjEwX1BBRF9QVEIxMF9fVUFSVDBfVFgJCTB4MjFhMgotCQkJCVZGNjEwX1BBRF9QVEIxMV9fVUFSVDBfUlgJCTB4MjFhMQotCQkJPjsKLQkJfTsKLQotCQlwaW5jdHJsX3VhcnQxOiB1YXJ0MWdycCB7Ci0JCQlmc2wscGlucyA9IDwKLQkJCQlWRjYxMF9QQURfUFRCNF9fVUFSVDFfVFgJCTB4MjFhMgotCQkJCVZGNjEwX1BBRF9QVEI1X19VQVJUMV9SWAkJMHgyMWExCi0JCQk+OwotCQl9OwotCi0JCXBpbmN0cmxfdWFydDI6IHVhcnQyZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCVZGNjEwX1BBRF9QVEQwX19VQVJUMl9UWAkJMHgyMWEyCi0JCQkJVkY2MTBfUEFEX1BURDFfX1VBUlQyX1JYCQkweDIxYTEKLQkJCQlWRjYxMF9QQURfUFREMl9fVUFSVDJfUlRTCQkweDIxYTIKLQkJCQlWRjYxMF9QQURfUFREM19fVUFSVDJfQ1RTCQkweDIxYTEKLQkJCT47Ci0JCX07Ci0JfTsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb3NtaWMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29zbWljLmR0cwppbmRleCAzZmQxYjc0Li5mZDg3NThiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb3NtaWMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvc21pYy5kdHMKQEAgLTIzLDE0ICsyMywyMyBAQAogCQlyZWcgPSA8MHg4MDAwMDAwMCAweDEwMDAwMDAwPjsKIAl9OwogCi0JY2xvY2tzIHsKLQkJZW5ldF9leHQgewotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OwotCQl9OworCWVuZXRfZXh0OiBlbmV0X2V4dCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CiAJfTsKK307CiAKKyZjbGtzIHsKKwljbG9ja3MgPSA8JnN4b3NjPiwgPCZmeG9zYz4sIDwmZW5ldF9leHQ+OworCWNsb2NrLW5hbWVzID0gInN4b3NjIiwgImZ4b3NjIiwgImVuZXRfZXh0IjsKK307CisKKyZlc2RoYzEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2VzZGhjMT47CisJYnVzLXdpZHRoID0gPDQ+OworCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKICZmZWMxIHsKQEAgLTQyLDYgKzUxLDE4IEBACiAKICZpb211eGMgewogCXZmNjEwLWNvc21pYyB7CisJCXBpbmN0cmxfZXNkaGMxOiBlc2RoYzFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BUQTI0X19FU0RIQzFfQ0xLCTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEEyNV9fRVNESEMxX0NNRAkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjZfX0VTREhDMV9EQVQwCTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEEyN19fRVNESEMxX0RBVDEJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI4X19FU0RIQzFfREFUQTIJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI5X19FU0RIQzFfREFUMwkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRCMjhfX0dQSU9fOTgJMHgyMTlkCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfZmVjMTogZmVjMWdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlWRjYxMF9QQURfUFRDOV9fRU5FVF9STUlJMV9NREMJCTB4MzBkMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtdHdyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLXR3ci5kdHMKaW5kZXggMTg5YjY5Ny4uYTBmNzYyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtdHdyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC10d3IuZHRzCkBAIC0yMiwxOCArMjIsMTYgQEAKIAkJcmVnID0gPDB4ODAwMDAwMDAgMHg4MDAwMDAwPjsKIAl9OwogCi0JY2xvY2tzIHsKLQkJYXVkaW9fZXh0IHsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0NTc2MDAwPjsKLQkJfTsKKwlhdWRpb19leHQ6IG1jbGtfb3NjIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI0NTc2MDAwPjsKKwl9OwogCi0JCWVuZXRfZXh0IHsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKLQkJfTsKKwllbmV0X2V4dDogZXRoX29zYyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CiAJfTsKIAogCXJlZ3VsYXRvcnMgewpAQCAtOTUsNiArOTMsMTEgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismY2xrcyB7CisJY2xvY2tzID0gPCZzeG9zYz4sIDwmZnhvc2M+LCA8JmVuZXRfZXh0PiwgPCZhdWRpb19leHQ+OworCWNsb2NrLW5hbWVzID0gInN4b3NjIiwgImZ4b3NjIiwgImVuZXRfZXh0IiwgImF1ZGlvX2V4dCI7Cit9OworCiAmZHNwaTAgewogCWJ1cy1udW0gPSA8MD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTExMiwxMCArMTE1LDE1IEBACiAJfTsKIH07CiAKKyZlZG1hMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmVzZGhjMSB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKIAlidXMtd2lkdGggPSA8ND47CisJY2QtZ3Bpb3MgPSA8JmdwaW81IDYgR1BJT19BQ1RJVkVfTE9XPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCkBAIC0yODUsMyArMjkzLDE5IEBACiAJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJnVzYm1pc2MwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNibWlzYzEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JwaHkwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNicGh5MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC5kdHNpCmluZGV4IDRkMmVjMzIuLjVmOGViMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAuZHRzaQpAQCAtNyw0ODEgKzcsMTkgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCi0jaW5jbHVkZSAidmY2MTAtcGluZnVuYy5oIgotI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLmg+Ci0jaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSAidmY1MDAuZHRzaSIKIAotLyB7Ci0JYWxpYXNlcyB7Ci0JCWNhbjAgPSAmY2FuMDsKLQkJY2FuMSA9ICZjYW4xOwotCQlzZXJpYWwwID0gJnVhcnQwOwotCQlzZXJpYWwxID0gJnVhcnQxOwotCQlzZXJpYWwyID0gJnVhcnQyOwotCQlzZXJpYWwzID0gJnVhcnQzOwotCQlzZXJpYWw0ID0gJnVhcnQ0OwotCQlzZXJpYWw1ID0gJnVhcnQ1OwotCQlncGlvMCA9ICZncGlvMTsKLQkJZ3BpbzEgPSAmZ3BpbzI7Ci0JCWdwaW8yID0gJmdwaW8zOwotCQlncGlvMyA9ICZncGlvNDsKLQkJZ3BpbzQgPSAmZ3BpbzU7Ci0JCXVzYnBoeTAgPSAmdXNicGh5MDsKLQkJdXNicGh5MSA9ICZ1c2JwaHkxOwotCX07CismYTVfY3B1IHsKKwluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47Cit9OwogCi0JY3B1cyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQljcHVAMCB7Ci0JCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUiOwotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwweDA+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwotCQl9OwotCX07Ci0KLQljbG9ja3MgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0KLQkJc3hvc2MgewotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OwotCQl9OwotCi0JCWZ4b3NjIHsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKLQkJfTsKLQl9OwotCi0Jc29jIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKLQkJcmFuZ2VzOwotCi0JCWFpcHMwOiBhaXBzLWJ1c0A0MDAwMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxhaXBzLWJ1cyIsICJzaW1wbGUtYnVzIjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKLQkJCXJlZyA9IDwweDQwMDAwMDAwIDB4NzAwMDA+OwotCQkJcmFuZ2VzOwotCi0JCQlpbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlckA0MDAwMjAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7Ci0JCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKLQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCQlyZWcgPSA8MHg0MDAwMzAwMCAweDEwMDA+LAotCQkJCSAgICAgIDwweDQwMDAyMTAwIDB4MTAwPjsKLQkJCX07Ci0KLQkJCUwyOiBsMi1jYWNoZUA0MDAwNjAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOwotCQkJCXJlZyA9IDwweDQwMDA2MDAwIDB4MTAwMD47Ci0JCQkJY2FjaGUtdW5pZmllZDsKLQkJCQljYWNoZS1sZXZlbCA9IDwyPjsKLQkJCQlhcm0sZGF0YS1sYXRlbmN5ID0gPDEgMSAxPjsKLQkJCQlhcm0sdGFnLWxhdGVuY3kgPSA8MiAyIDI+OwotCQkJfTsKLQotCQkJZWRtYTA6IGRtYS1jb250cm9sbGVyQDQwMDE4MDAwIHsKLQkJCQkjZG1hLWNlbGxzID0gPDI+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWVkbWEiOwotCQkJCXJlZyA9IDwweDQwMDE4MDAwIDB4MjAwMD4sCi0JCQkJCTwweDQwMDI0MDAwIDB4MTAwMD4sCi0JCQkJCTwweDQwMDI1MDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDggSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkJCQk8MCA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWludGVycnVwdC1uYW1lcyA9ICJlZG1hLXR4IiwgImVkbWEtZXJyIjsKLQkJCQlkbWEtY2hhbm5lbHMgPSA8MzI+OwotCQkJCWNsb2NrLW5hbWVzID0gImRtYW11eDAiLCAiZG1hbXV4MSI7Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgwPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgxPjsKLQkJCX07Ci0KLQkJCWNhbjA6IGZsZXhjYW5ANDAwMjAwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWZsZXhjYW4iOwotCQkJCXJlZyA9IDwweDQwMDIwMDAwIDB4NDAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDU4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRkxFWENBTjA+LAotCQkJCQkgPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXVhcnQwOiBzZXJpYWxANDAwMjcwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7Ci0JCQkJcmVnID0gPDB4NDAwMjcwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNjEgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VQVJUMD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKLQkJCQlkbWFzID0gPCZlZG1hMCAwIDI+LAotCQkJCQk8JmVkbWEwIDAgMz47Ci0JCQkJZG1hLW5hbWVzID0gInJ4IiwidHgiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl1YXJ0MTogc2VyaWFsQDQwMDI4MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1scHVhcnQiOwotCQkJCXJlZyA9IDwweDQwMDI4MDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDYyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVUFSVDE+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7Ci0JCQkJZG1hcyA9IDwmZWRtYTAgMCA0PiwKLQkJCQkJPCZlZG1hMCAwIDU+OwotCQkJCWRtYS1uYW1lcyA9ICJyeCIsInR4IjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJdWFydDI6IHNlcmlhbEA0MDAyOTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKLQkJCQlyZWcgPSA8MHg0MDAyOTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA2MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQyPjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciOwotCQkJCWRtYXMgPSA8JmVkbWEwIDAgNj4sCi0JCQkJCTwmZWRtYTAgMCA3PjsKLQkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXVhcnQzOiBzZXJpYWxANDAwMmEwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7Ci0JCQkJcmVnID0gPDB4NDAwMmEwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNjQgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VQVJUMz47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKLQkJCQlkbWFzID0gPCZlZG1hMCAwIDg+LAotCQkJCQk8JmVkbWEwIDAgOT47Ci0JCQkJZG1hLW5hbWVzID0gInJ4IiwidHgiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQlkc3BpMDogZHNwaTBANDAwMmMwMDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWRzcGkiOwotCQkJCXJlZyA9IDwweDQwMDJjMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDY3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRFNQSTA+OwotCQkJCWNsb2NrLW5hbWVzID0gImRzcGkiOwotCQkJCXNwaS1udW0tY2hpcHNlbGVjdHMgPSA8NT47Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXNhaTI6IHNhaUA0MDAzMTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtc2FpIjsKLQkJCQlyZWcgPSA8MHg0MDAzMTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1NBSTI+OwotCQkJCWNsb2NrLW5hbWVzID0gInNhaSI7Ci0JCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKLQkJCQlkbWFzID0gPCZlZG1hMCAwIDIxPiwKLQkJCQkJPCZlZG1hMCAwIDIwPjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJcGl0OiBwaXRANDAwMzcwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXBpdCI7Ci0JCQkJcmVnID0gPDB4NDAwMzcwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgMzkgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19QSVQ+OwotCQkJCWNsb2NrLW5hbWVzID0gInBpdCI7Ci0JCQl9OwotCi0JCQlwd20wOiBwd21ANDAwMzgwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWZ0bS1wd20iOwotCQkJCSNwd20tY2VsbHMgPSA8Mz47Ci0JCQkJcmVnID0gPDB4NDAwMzgwMDAgMHgxMDAwPjsKLQkJCQljbG9jay1uYW1lcyA9ICJmdG1fc3lzIiwgImZ0bV9leHQiLAotCQkJCQkgICAgICAiZnRtX2ZpeCIsICJmdG1fY250X2Nsa19lbiI7Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19GVE0wPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0wX0VYVF9TRUw+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTBfRklYX1NFTD4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMF9FWFRfRklYX0VOPjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJYWRjMDogYWRjQDQwMDNiMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1hZGMiOwotCQkJCXJlZyA9IDwweDQwMDNiMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDUzIDB4MDQ+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfQURDMD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiYWRjIjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJd2RvZ0A0MDAzZTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtd2R0IiwgImZzbCxpbXgyMS13ZHQiOwotCQkJCXJlZyA9IDwweDQwMDNlMDAwIDB4MTAwMD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19XRFQ+OwotCQkJCWNsb2NrLW5hbWVzID0gIndkb2ciOwotCQkJfTsKLQotCQkJcXNwaTA6IHF1YWRzcGlANDAwNDQwMDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXFzcGkiOwotCQkJCXJlZyA9IDwweDQwMDQ0MDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDI0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfUVNQSTBfRU4+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX1FTUEkwPjsKLQkJCQljbG9jay1uYW1lcyA9ICJxc3BpX2VuIiwgInFzcGkiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQlpb211eGM6IGlvbXV4Y0A0MDA0ODAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtaW9tdXhjIjsKLQkJCQlyZWcgPSA8MHg0MDA0ODAwMCAweDEwMDA+OwotCQkJCSNncGlvLXJhbmdlLWNlbGxzID0gPDM+OwotCQkJfTsKLQotCQkJZ3BpbzE6IGdwaW9ANDAwNDkwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOwotCQkJCXJlZyA9IDwweDQwMDQ5MDAwIDB4MTAwMCAweDQwMGZmMDAwIDB4NDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDAgMzI+OwotCQkJfTsKLQotCQkJZ3BpbzI6IGdwaW9ANDAwNGEwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOwotCQkJCXJlZyA9IDwweDQwMDRhMDAwIDB4MTAwMCAweDQwMGZmMDQwIDB4NDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDMyIDMyPjsKLQkJCX07Ci0KLQkJCWdwaW8zOiBncGlvQDQwMDRiMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1ncGlvIjsKLQkJCQlyZWcgPSA8MHg0MDA0YjAwMCAweDEwMDAgMHg0MDBmZjA4MCAweDQwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgMTA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWdwaW8tY29udHJvbGxlcjsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJCWdwaW8tcmFuZ2VzID0gPCZpb211eGMgMCA2NCAzMj47Ci0JCQl9OwotCi0JCQlncGlvNDogZ3Bpb0A0MDA0YzAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZ3BpbyI7Ci0JCQkJcmVnID0gPDB4NDAwNGMwMDAgMHgxMDAwIDB4NDAwZmYwYzAgMHg0MD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDExMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQlncGlvLWNvbnRyb2xsZXI7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgOTYgMzI+OwotCQkJfTsKLQotCQkJZ3BpbzU6IGdwaW9ANDAwNGQwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOwotCQkJCXJlZyA9IDwweDQwMDRkMDAwIDB4MTAwMCAweDQwMGZmMTAwIDB4NDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAxMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDEyOCA3PjsKLQkJCX07Ci0KLQkJCWFuYXRvcDogYW5hdG9wQDQwMDUwMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1hbmF0b3AiLCAic3lzY29uIjsKLQkJCQlyZWcgPSA8MHg0MDA1MDAwMCAweDQwMD47Ci0JCQl9OwotCi0JCQl1c2JwaHkwOiB1c2JwaHlANDAwNTA4MDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYnBoeSI7Ci0JCQkJcmVnID0gPDB4NDAwNTA4MDAgMHg0MDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA1MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQlBIWTA+OwotCQkJCWZzbCxhbmF0b3AgPSA8JmFuYXRvcD47Ci0JCQl9OwotCi0JCQl1c2JwaHkxOiB1c2JwaHlANDAwNTBjMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYnBoeSI7Ci0JCQkJcmVnID0gPDB4NDAwNTBjMDAgMHg0MDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA1MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQlBIWTE+OwotCQkJCWZzbCxhbmF0b3AgPSA8JmFuYXRvcD47Ci0JCQl9OwotCi0JCQlpMmMwOiBpMmNANDAwNjYwMDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWkyYyI7Ci0JCQkJcmVnID0gPDB4NDAwNjYwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID08MCA3MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0kyQzA+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7Ci0JCQkJZG1hcyA9IDwmZWRtYTAgMCA1MD4sCi0JCQkJCTwmZWRtYTAgMCA1MT47Ci0JCQkJZG1hLW5hbWVzID0gInJ4IiwidHgiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQljbGtzOiBjY21ANDAwNmIwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWNjbSI7Ci0JCQkJcmVnID0gPDB4NDAwNmIwMDAgMHgxMDAwPjsKLQkJCQkjY2xvY2stY2VsbHMgPSA8MT47Ci0JCQl9OwotCi0JCQl1c2JkZXYwOiB1c2JANDAwMzQwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYiIsICJmc2wsaW14MjctdXNiIjsKLQkJCQlyZWcgPSA8MHg0MDAzNDAwMCAweDgwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDc1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCQzA+OwotCQkJCWZzbCx1c2JwaHkgPSA8JnVzYnBoeTA+OwotCQkJCWZzbCx1c2JtaXNjID0gPCZ1c2JtaXNjMCAwPjsKLQkJCQlkcl9tb2RlID0gInBlcmlwaGVyYWwiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl1c2JtaXNjMDogdXNiQDQwMDM0ODAwIHsKLQkJCQkjaW5kZXgtY2VsbHMgPSA8MT47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNibWlzYyI7Ci0JCQkJcmVnID0gPDB4NDAwMzQ4MDAgMHgyMDA+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCQzA+OwotCQkJfTsKLQkJfTsKLQotCQlhaXBzMTogYWlwcy1idXNANDAwODAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsYWlwcy1idXMiLCAic2ltcGxlLWJ1cyI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJcmVnID0gPDB4NDAwODAwMDAgMHg4MDAwMD47Ci0JCQlyYW5nZXM7Ci0KLQkJCWVkbWExOiBkbWEtY29udHJvbGxlckA0MDA5ODAwMCB7Ci0JCQkJI2RtYS1jZWxscyA9IDwyPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1lZG1hIjsKLQkJCQlyZWcgPSA8MHg0MDA5ODAwMCAweDIwMDA+LAotCQkJCQk8MHg0MDBhMTAwMCAweDEwMDA+LAotCQkJCQk8MHg0MDBhMjAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAxMCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCQkJCTwwIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWludGVycnVwdC1uYW1lcyA9ICJlZG1hLXR4IiwgImVkbWEtZXJyIjsKLQkJCQlkbWEtY2hhbm5lbHMgPSA8MzI+OwotCQkJCWNsb2NrLW5hbWVzID0gImRtYW11eDAiLCAiZG1hbXV4MSI7Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgyPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgzPjsKLQkJCX07Ci0KLQkJCXVhcnQ0OiBzZXJpYWxANDAwYTkwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7Ci0JCQkJcmVnID0gPDB4NDAwYTkwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNjUgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VQVJUND47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJdWFydDU6IHNlcmlhbEA0MDBhYTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKLQkJCQlyZWcgPSA8MHg0MDBhYTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQ1PjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQlhZGMxOiBhZGNANDAwYmIwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWFkYyI7Ci0JCQkJcmVnID0gPDB4NDAwYmIwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNTQgMHgwND47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19BREMxPjsKLQkJCQljbG9jay1uYW1lcyA9ICJhZGMiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQllc2RoYzE6IGVzZGhjQDQwMGIyMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxpbXg1My1lc2RoYyI7Ci0JCQkJcmVnID0gPDB4NDAwYjIwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgMjggMHgwND47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19JUEdfQlVTPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19QTEFURk9STV9CVVM+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VTREhDMT47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwZXIiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl1c2JoMTogdXNiQDQwMGI0MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC11c2IiLCAiZnNsLGlteDI3LXVzYiI7Ci0JCQkJcmVnID0gPDB4NDAwYjQwMDAgMHg4MDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA3NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQkMxPjsKLQkJCQlmc2wsdXNicGh5ID0gPCZ1c2JwaHkxPjsKLQkJCQlmc2wsdXNibWlzYyA9IDwmdXNibWlzYzEgMD47Ci0JCQkJZHJfbW9kZSA9ICJob3N0IjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJdXNibWlzYzE6IHVzYkA0MDBiNDgwMCB7Ci0JCQkJI2luZGV4LWNlbGxzID0gPDE+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYm1pc2MiOwotCQkJCXJlZyA9IDwweDQwMGI0ODAwIDB4MjAwPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQkMxPjsKLQkJCX07Ci0KLQkJCWZ0bTogZnRtQDQwMGI4MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxmdG0tdGltZXIiOwotCQkJCXJlZyA9IDwweDQwMGI4MDAwIDB4MTAwMCAweDQwMGI5MDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDQ0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrLW5hbWVzID0gImZ0bS1ldnQiLCAiZnRtLXNyYyIsCi0JCQkJCSJmdG0tZXZ0LWNvdW50ZXItZW4iLCAiZnRtLXNyYy1jb3VudGVyLWVuIjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0ZUTTI+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTM+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTJfRVhUX0ZJWF9FTj4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNM19FWFRfRklYX0VOPjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJZmVjMDogZXRoZXJuZXRANDAwZDAwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLG12ZjYwMC1mZWMiOwotCQkJCXJlZyA9IDwweDQwMGQwMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDc4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRU5FVDA+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VORVQwPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUPjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYWhiIiwgInB0cCI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCWZlYzE6IGV0aGVybmV0QDQwMGQxMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxtdmY2MDAtZmVjIjsKLQkJCQlyZWcgPSA8MHg0MDBkMTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA3OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0VORVQxPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUMT4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRU5FVD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwdHAiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQljYW4xOiBmbGV4Y2FuQDQwMGQ0MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1mbGV4Y2FuIjsKLQkJCQlyZWcgPSA8MHg0MDBkNDAwMCAweDQwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA1OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0ZMRVhDQU4xPiwKLQkJCQkJIDwmY2xrcyBWRjYxMF9DTEtfRkxFWENBTjE+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJwZXIiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCX07CismYWlwczAgeworCUwyOiBsMi1jYWNoZUA0MDAwNjAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzEwLWNhY2hlIjsKKwkJcmVnID0gPDB4NDAwMDYwMDAgMHgxMDAwPjsKKwkJY2FjaGUtdW5pZmllZDsKKwkJY2FjaGUtbGV2ZWwgPSA8Mj47CisJCWFybSxkYXRhLWxhdGVuY3kgPSA8MSAxIDE+OworCQlhcm0sdGFnLWxhdGVuY3kgPSA8MiAyIDI+OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmZ4eHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmeHh4LmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1OTY5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmeHh4LmR0c2kKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgInZmNjEwLXBpbmZ1bmMuaCIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay92ZjYxMC1jbG9jay5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorCisvIHsKKwlhbGlhc2VzIHsKKwkJY2FuMCA9ICZjYW4wOworCQljYW4xID0gJmNhbjE7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDE7CisJCXNlcmlhbDIgPSAmdWFydDI7CisJCXNlcmlhbDMgPSAmdWFydDM7CisJCXNlcmlhbDQgPSAmdWFydDQ7CisJCXNlcmlhbDUgPSAmdWFydDU7CisJCWdwaW8wID0gJmdwaW8xOworCQlncGlvMSA9ICZncGlvMjsKKwkJZ3BpbzIgPSAmZ3BpbzM7CisJCWdwaW8zID0gJmdwaW80OworCQlncGlvNCA9ICZncGlvNTsKKwkJdXNicGh5MCA9ICZ1c2JwaHkwOworCQl1c2JwaHkxID0gJnVzYnBoeTE7CisJfTsKKworCWZ4b3NjOiBmeG9zYyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47CisJfTsKKworCXN4b3NjOiBzeG9zYyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJfTsKKworCXNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzOworCisJCWFpcHMwOiBhaXBzLWJ1c0A0MDAwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxhaXBzLWJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXM7CisKKwkJCWVkbWEwOiBkbWEtY29udHJvbGxlckA0MDAxODAwMCB7CisJCQkJI2RtYS1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1lZG1hIjsKKwkJCQlyZWcgPSA8MHg0MDAxODAwMCAweDIwMDA+LAorCQkJCQk8MHg0MDAyNDAwMCAweDEwMDA+LAorCQkJCQk8MHg0MDAyNTAwMCAweDEwMDA+OworCQkJCWRtYS1jaGFubmVscyA9IDwzMj47CisJCQkJY2xvY2stbmFtZXMgPSAiZG1hbXV4MCIsICJkbWFtdXgxIjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0RNQU1VWDA+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0RNQU1VWDE+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQljYW4wOiBmbGV4Y2FuQDQwMDIwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1mbGV4Y2FuIjsKKwkJCQlyZWcgPSA8MHg0MDAyMDAwMCAweDQwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRkxFWENBTjA+LAorCQkJCQkgPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMD47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQwOiBzZXJpYWxANDAwMjcwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwMjcwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgMj4sCisJCQkJCTwmZWRtYTAgMCAzPjsKKwkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQxOiBzZXJpYWxANDAwMjgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwMjgwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQxPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgND4sCisJCQkJCTwmZWRtYTAgMCA1PjsKKwkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQyOiBzZXJpYWxANDAwMjkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwMjkwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQyPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgNj4sCisJCQkJCTwmZWRtYTAgMCA3PjsKKwkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQzOiBzZXJpYWxANDAwMmEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwMmEwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQzPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgOD4sCisJCQkJCTwmZWRtYTAgMCA5PjsKKwkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWRzcGkwOiBkc3BpMEA0MDAyYzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZHNwaSI7CisJCQkJcmVnID0gPDB4NDAwMmMwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0RTUEkwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJkc3BpIjsKKwkJCQlzcGktbnVtLWNoaXBzZWxlY3RzID0gPDU+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlzYWkyOiBzYWlANDAwMzEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXNhaSI7CisJCQkJcmVnID0gPDB4NDAwMzEwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1NBSTI+OworCQkJCWNsb2NrLW5hbWVzID0gInNhaSI7CisJCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJCQlkbWFzID0gPCZlZG1hMCAwIDIxPiwKKwkJCQkJPCZlZG1hMCAwIDIwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJcGl0OiBwaXRANDAwMzcwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXBpdCI7CisJCQkJcmVnID0gPDB4NDAwMzcwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1BJVD47CisJCQkJY2xvY2stbmFtZXMgPSAicGl0IjsKKwkJCX07CisKKwkJCXB3bTA6IHB3bUA0MDAzODAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZnRtLXB3bSI7CisJCQkJI3B3bS1jZWxscyA9IDwzPjsKKwkJCQlyZWcgPSA8MHg0MDAzODAwMCAweDEwMDA+OworCQkJCWNsb2NrLW5hbWVzID0gImZ0bV9zeXMiLCAiZnRtX2V4dCIsCisJCQkJCSAgICAgICJmdG1fZml4IiwgImZ0bV9jbnRfY2xrX2VuIjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0ZUTTA+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTBfRVhUX1NFTD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMF9GSVhfU0VMPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0wX0VYVF9GSVhfRU4+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlwd20xOiBwd21ANDAwMzkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWZ0bS1wd20iOworCQkJCSNwd20tY2VsbHMgPSA8Mz47CisJCQkJcmVnID0gPDB4NDAwMzkwMDAgMHgxMDAwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJmdG1fc3lzIiwgImZ0bV9leHQiLAorCQkJCQkgICAgICAiZnRtX2ZpeCIsICJmdG1fY250X2Nsa19lbiI7CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19GVE0xPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0xX0VYVF9TRUw+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTFfRklYX1NFTD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMV9FWFRfRklYX0VOPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJYWRjMDogYWRjQDQwMDNiMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1hZGMiOworCQkJCXJlZyA9IDwweDQwMDNiMDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19BREMwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhZGMiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl3ZG9nQDQwMDNlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC13ZHQiLCAiZnNsLGlteDIxLXdkdCI7CisJCQkJcmVnID0gPDB4NDAwM2UwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1dEVD47CisJCQkJY2xvY2stbmFtZXMgPSAid2RvZyI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXFzcGkwOiBxdWFkc3BpQDQwMDQ0MDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1xc3BpIjsKKwkJCQlyZWcgPSA8MHg0MDA0NDAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfUVNQSTBfRU4+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX1FTUEkwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJxc3BpX2VuIiwgInFzcGkiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlpb211eGM6IGlvbXV4Y0A0MDA0ODAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtaW9tdXhjIjsKKwkJCQlyZWcgPSA8MHg0MDA0ODAwMCAweDEwMDA+OworCQkJCSNncGlvLXJhbmdlLWNlbGxzID0gPDM+OworCQkJfTsKKworCQkJZ3BpbzE6IGdwaW9ANDAwNDkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOworCQkJCXJlZyA9IDwweDQwMDQ5MDAwIDB4MTAwMCAweDQwMGZmMDAwIDB4NDA+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWdwaW8tcmFuZ2VzID0gPCZpb211eGMgMCAwIDMyPjsKKwkJCX07CisKKwkJCWdwaW8yOiBncGlvQDQwMDRhMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1ncGlvIjsKKwkJCQlyZWcgPSA8MHg0MDA0YTAwMCAweDEwMDAgMHg0MDBmZjA0MCAweDQwPjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgMzIgMzI+OworCQkJfTsKKworCQkJZ3BpbzM6IGdwaW9ANDAwNGIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOworCQkJCXJlZyA9IDwweDQwMDRiMDAwIDB4MTAwMCAweDQwMGZmMDgwIDB4NDA+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWdwaW8tcmFuZ2VzID0gPCZpb211eGMgMCA2NCAzMj47CisJCQl9OworCisJCQlncGlvNDogZ3Bpb0A0MDA0YzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZ3BpbyI7CisJCQkJcmVnID0gPDB4NDAwNGMwMDAgMHgxMDAwIDB4NDAwZmYwYzAgMHg0MD47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDk2IDMyPjsKKwkJCX07CisKKwkJCWdwaW81OiBncGlvQDQwMDRkMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1ncGlvIjsKKwkJCQlyZWcgPSA8MHg0MDA0ZDAwMCAweDEwMDAgMHg0MDBmZjEwMCAweDQwPjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgMTI4IDc+OworCQkJfTsKKworCQkJYW5hdG9wOiBhbmF0b3BANDAwNTAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWFuYXRvcCIsICJzeXNjb24iOworCQkJCXJlZyA9IDwweDQwMDUwMDAwIDB4NDAwPjsKKwkJCX07CisKKwkJCXVzYnBoeTA6IHVzYnBoeUA0MDA1MDgwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNicGh5IjsKKwkJCQlyZWcgPSA8MHg0MDA1MDgwMCAweDQwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JQSFkwPjsKKwkJCQlmc2wsYW5hdG9wID0gPCZhbmF0b3A+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl1c2JwaHkxOiB1c2JwaHlANDAwNTBjMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYnBoeSI7CisJCQkJcmVnID0gPDB4NDAwNTBjMDAgMHg0MDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCUEhZMT47CisJCQkJZnNsLGFuYXRvcCA9IDwmYW5hdG9wPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJaTJjMDogaTJjQDQwMDY2MDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1pMmMiOworCQkJCXJlZyA9IDwweDQwMDY2MDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19JMkMwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgNTA+LAorCQkJCQk8JmVkbWEwIDAgNTE+OworCQkJCWRtYS1uYW1lcyA9ICJyeCIsInR4IjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJY2xrczogY2NtQDQwMDZiMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1jY20iOworCQkJCXJlZyA9IDwweDQwMDZiMDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZzeG9zYz4sIDwmZnhvc2M+OworCQkJCWNsb2NrLW5hbWVzID0gInN4b3NjIiwgImZ4b3NjIjsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQl9OworCisJCQl1c2JkZXYwOiB1c2JANDAwMzQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYiIsICJmc2wsaW14MjctdXNiIjsKKwkJCQlyZWcgPSA8MHg0MDAzNDAwMCAweDgwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMD47CisJCQkJZnNsLHVzYnBoeSA9IDwmdXNicGh5MD47CisJCQkJZnNsLHVzYm1pc2MgPSA8JnVzYm1pc2MwIDA+OworCQkJCWRyX21vZGUgPSAicGVyaXBoZXJhbCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVzYm1pc2MwOiB1c2JANDAwMzQ4MDAgeworCQkJCSNpbmRleC1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC11c2JtaXNjIjsKKwkJCQlyZWcgPSA8MHg0MDAzNDgwMCAweDIwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisKKwkJYWlwczE6IGFpcHMtYnVzQDQwMDgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGFpcHMtYnVzIiwgInNpbXBsZS1idXMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlczsKKworCQkJZWRtYTE6IGRtYS1jb250cm9sbGVyQDQwMDk4MDAwIHsKKwkJCQkjZG1hLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWVkbWEiOworCQkJCXJlZyA9IDwweDQwMDk4MDAwIDB4MjAwMD4sCisJCQkJCTwweDQwMGExMDAwIDB4MTAwMD4sCisJCQkJCTwweDQwMGEyMDAwIDB4MTAwMD47CisJCQkJZG1hLWNoYW5uZWxzID0gPDMyPjsKKwkJCQljbG9jay1uYW1lcyA9ICJkbWFtdXgwIiwgImRtYW11eDEiOworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRE1BTVVYMj4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRE1BTVVYMz47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQ0OiBzZXJpYWxANDAwYTkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwYTkwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQ0PjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl1YXJ0NTogc2VyaWFsQDQwMGFhMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1scHVhcnQiOworCQkJCXJlZyA9IDwweDQwMGFhMDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VQVJUNT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJYWRjMTogYWRjQDQwMGJiMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1hZGMiOworCQkJCXJlZyA9IDwweDQwMGJiMDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19BREMxPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhZGMiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQllc2RoYzE6IGVzZGhjQDQwMGIyMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxpbXg1My1lc2RoYyI7CisJCQkJcmVnID0gPDB4NDAwYjIwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0lQR19CVVM+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX1BMQVRGT1JNX0JVUz4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRVNESEMxPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYWhiIiwgInBlciI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVzYmgxOiB1c2JANDAwYjQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYiIsICJmc2wsaW14MjctdXNiIjsKKwkJCQlyZWcgPSA8MHg0MDBiNDAwMCAweDgwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMT47CisJCQkJZnNsLHVzYnBoeSA9IDwmdXNicGh5MT47CisJCQkJZnNsLHVzYm1pc2MgPSA8JnVzYm1pc2MxIDA+OworCQkJCWRyX21vZGUgPSAiaG9zdCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVzYm1pc2MxOiB1c2JANDAwYjQ4MDAgeworCQkJCSNpbmRleC1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC11c2JtaXNjIjsKKwkJCQlyZWcgPSA8MHg0MDBiNDgwMCAweDIwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWZ0bTogZnRtQDQwMGI4MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxmdG0tdGltZXIiOworCQkJCXJlZyA9IDwweDQwMGI4MDAwIDB4MTAwMCAweDQwMGI5MDAwIDB4MTAwMD47CisJCQkJY2xvY2stbmFtZXMgPSAiZnRtLWV2dCIsICJmdG0tc3JjIiwKKwkJCQkJImZ0bS1ldnQtY291bnRlci1lbiIsICJmdG0tc3JjLWNvdW50ZXItZW4iOworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRlRNMj4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMz4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMl9FWFRfRklYX0VOPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0zX0VYVF9GSVhfRU4+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlmZWMwOiBldGhlcm5ldEA0MDBkMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXZmNjAwLWZlYyI7CisJCQkJcmVnID0gPDB4NDAwZDAwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0VORVQwPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUMD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRU5FVD47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwdHAiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlmZWMxOiBldGhlcm5ldEA0MDBkMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXZmNjAwLWZlYyI7CisJCQkJcmVnID0gPDB4NDAwZDEwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0VORVQxPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUMT4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRU5FVD47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwdHAiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQljYW4xOiBmbGV4Y2FuQDQwMGQ0MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1mbGV4Y2FuIjsKKwkJCQlyZWcgPSA8MHg0MDBkNDAwMCAweDQwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRkxFWENBTjE+LAorCQkJCQkgPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtNzAwMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kKaW5kZXggY2UyZWY1Yi4uZWUzZTVkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kKQEAgLTI0Myw3ICsyNDMsNiBAQAogCQkJY2xrYzogY2xrY0AxMDAgewogCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCQljb21wYXRpYmxlID0gInhsbngscHM3LWNsa2MiOwotCQkJCXBzLWNsay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQkJCWZjbGstZW5hYmxlID0gPDA+OwogCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhcm1wbGwiLCAiZGRycGxsIiwgImlvcGxsIiwgImNwdV82b3I0eCIsCiAJCQkJCQkiY3B1XzNvcjJ4IiwgImNwdV8yeCIsICJjcHVfMXgiLCAiZGRyMngiLCAiZGRyM3giLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS1wYXJhbGxlbGxhLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtcGFyYWxsZWxsYS5kdHMKaW5kZXggZTFmNTFjYS4uYWIxZGMwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS1wYXJhbGxlbGxhLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXBhcmFsbGVsbGEuZHRzCkBAIC0zNCw2ICszNCwxMSBAQAogCX07CiB9OwogCismY2xrYyB7CisJZmNsay1lbmFibGUgPSA8MHhmPjsKKwlwcy1jbGstZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKK307CisKICZnZW0wIHsKIAlzdGF0dXMgPSAib2theSI7CiAJcGh5LW1vZGUgPSAicmdtaWktaWQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16YzcwMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzAyLmR0cwppbmRleCA5NGUyY2RhLi4yODBmMDJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzAyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzAyLmR0cwpAQCAtNDIsNiArNDIsMTAgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismY2xrYyB7CisJcHMtY2xrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Cit9OworCiAmZ2VtMCB7CiAJc3RhdHVzID0gIm9rYXkiOwogCXBoeS1tb2RlID0gInJnbWlpLWlkIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtemM3MDYuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16YzcwNi5kdHMKaW5kZXggYThiYmRmYi4uMzRmNzgxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16YzcwNi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16YzcwNi5kdHMKQEAgLTI5LDYgKzI5LDEwIEBACiAKIH07CiAKKyZjbGtjIHsKKwlwcy1jbGstZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKK307CisKICZnZW0wIHsKIAlzdGF0dXMgPSAib2theSI7CiAJcGh5LW1vZGUgPSAicmdtaWktaWQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16ZWQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16ZWQuZHRzCmluZGV4IDY5Nzc3OWEuLjFjN2NjOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtemVkLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXplZC5kdHMKQEAgLTI5LDYgKzI5LDEwIEBACiAKIH07CiAKKyZjbGtjIHsKKwlwcy1jbGstZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKK307CisKICZnZW0wIHsKIAlzdGF0dXMgPSAib2theSI7CiAJcGh5LW1vZGUgPSAicmdtaWktaWQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16eWJvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtenliby5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhMTJjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtenliby5kdHMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgLSAyMDE0IFhpbGlueAorICogIENvcHlyaWdodCAoQykgMjAxMiBOYXRpb25hbCBJbnN0cnVtZW50cyBDb3JwLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy9kdHMtdjEvOworL2luY2x1ZGUvICJ6eW5xLTcwMDAuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiWnlucSBaWUJPIERldmVsb3BtZW50IEJvYXJkIjsKKwljb21wYXRpYmxlID0gImRpZ2lsZW50LHp5bnEtenlibyIsICJ4bG54LHp5bnEtNzAwMCI7CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwIDB4MjAwMDAwMDA+OworCX07CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVBTMCwxMTUyMDAgZWFybHlwcmludGsiOworCX07CisKK307CisKKyZjbGtjIHsKKwlwcy1jbGstZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKK307CisKKyZnZW0wIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCXBoeS1oYW5kbGUgPSA8JmV0aGVybmV0X3BoeT47CisKKwlldGhlcm5ldF9waHk6IGV0aGVybmV0LXBoeUAwIHsKKwkJcmVnID0gPDA+OworCX07Cit9OworCismc2RoY2kwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZWRtYS5jIGIvYXJjaC9hcm0vY29tbW9uL2VkbWEuYwppbmRleCBkODY3NzFhLi41NjYyYTg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZWRtYS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9lZG1hLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lZG1hLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZG1hLmg+CkBAIC0yNDQsNiArMjQ1LDggQEAKIAkvKiBsaXN0IG9mIGNoYW5uZWxzIHdpdGggbm8gZXZlbiB0cmlnZ2VyOyB0ZXJtaW5hdGVkIGJ5ICItMSIgKi8KIAljb25zdCBzOAkqbm9ldmVudDsKIAorCXN0cnVjdCBlZG1hX3NvY19pbmZvICppbmZvOworCiAJLyogVGhlIGVkbWFfaW51c2UgYml0IGZvciBlYWNoIFBhUkFNIHNsb3QgaXMgY2xlYXIgdW5sZXNzIHRoZQogCSAqIGNoYW5uZWwgaXMgaW4gdXNlIC4uLiBieSBBUk0gb3IgRFNQLCBmb3IgUURNQSwgb3Igd2hhdGV2ZXIuCiAJICovCkBAIC0yOTUsNyArMjk4LDcgQEAKIAkJCX4oMHg3IDw8IGJpdCksIHF1ZXVlX25vIDw8IGJpdCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhc3NpZ25fcHJpb3JpdHlfdG9fcXVldWUodW5zaWduZWQgY3RsciwgaW50IHF1ZXVlX25vLAorc3RhdGljIHZvaWQgYXNzaWduX3ByaW9yaXR5X3RvX3F1ZXVlKHVuc2lnbmVkIGN0bHIsIGludCBxdWV1ZV9ubywKIAkJaW50IHByaW9yaXR5KQogewogCWludCBiaXQgPSBxdWV1ZV9ubyAqIDQ7CkBAIC0zMTQsNyArMzE3LDcgQEAKICAqIGluY2x1ZGVkIGluIHRoYXQgcGFydGljdWxhciBFRE1BIHZhcmlhbnQgKEVnIDogZG02NDZ4KQogICoKICAqLwotc3RhdGljIHZvaWQgX19pbml0IG1hcF9kbWFjaF9wYXJhbSh1bnNpZ25lZCBjdGxyKQorc3RhdGljIHZvaWQgbWFwX2RtYWNoX3BhcmFtKHVuc2lnbmVkIGN0bHIpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IEVETUFfTUFYX0RNQUNIOyBpKyspCkBAIC0xNjIzLDYgKzE2MjYsMTEgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUJKm5vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2ID0gJnBkZXYtPmRldjsKIAlpbnQJCQlyZXQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGVkbWFfZGV2X2luZm8gPSB7CisJCS5uYW1lID0gImVkbWEtZG1hLWVuZ2luZSIsCisJCS5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJCS5wYXJlbnQgPSAmcGRldi0+ZGV2LAorCX07CiAKIAlpZiAobm9kZSkgewogCQkvKiBDaGVjayBpZiB0aGlzIGlzIGEgc2Vjb25kIGluc3RhbmNlIHJlZ2lzdGVyZWQgKi8KQEAgLTE3OTIsMTUgKzE4MDAsNjYgQEAKIAkJCWVkbWFfd3JpdGVfYXJyYXkyKGosIEVETUFfRFJBRSwgaSwgMSwgMHgwKTsKIAkJCWVkbWFfd3JpdGVfYXJyYXkoaiwgRURNQV9RUkFFLCBpLCAweDApOwogCQl9CisJCWVkbWFfY2Nbal0tPmluZm8gPSBpbmZvW2pdOwogCQlhcmNoX251bV9jYysrOworCisJCWVkbWFfZGV2X2luZm8uaWQgPSBqOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgmZWRtYV9kZXZfaW5mbyk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgZWRtYV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBpLCBqOworCisJZm9yIChqID0gMDsgaiA8IGFyY2hfbnVtX2NjOyBqKyspIHsKKwkJc3RydWN0IGVkbWEgKmNjID0gZWRtYV9jY1tqXTsKKworCQlzOCAoKnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcpWzJdOworCisJCXF1ZXVlX3ByaW9yaXR5X21hcHBpbmcgPSBjYy0+aW5mby0+cXVldWVfcHJpb3JpdHlfbWFwcGluZzsKKworCQkvKiBFdmVudCBxdWV1ZSBwcmlvcml0eSBtYXBwaW5nICovCisJCWZvciAoaSA9IDA7IHF1ZXVlX3ByaW9yaXR5X21hcHBpbmdbaV1bMF0gIT0gLTE7IGkrKykKKwkJCWFzc2lnbl9wcmlvcml0eV90b19xdWV1ZShqLAorCQkJCQkJIHF1ZXVlX3ByaW9yaXR5X21hcHBpbmdbaV1bMF0sCisJCQkJCQkgcXVldWVfcHJpb3JpdHlfbWFwcGluZ1tpXVsxXSk7CisKKwkJLyoKKwkJICogTWFwIHRoZSBjaGFubmVsIHRvIHBhcmFtIGVudHJ5IGlmIGNoYW5uZWwgbWFwcGluZyBsb2dpYworCQkgKiBleGlzdAorCQkgKi8KKwkJaWYgKGVkbWFfcmVhZChqLCBFRE1BX0NDQ0ZHKSAmIENITUFQX0VYSVNUKQorCQkJbWFwX2RtYWNoX3BhcmFtKGopOworCisJCWZvciAoaSA9IDA7IGkgPCBjYy0+bnVtX2NoYW5uZWxzOyBpKyspIHsKKwkJCWlmICh0ZXN0X2JpdChpLCBjYy0+ZWRtYV9pbnVzZSkpIHsKKwkJCQkvKiBlbnN1cmUgYWNjZXNzIHRocm91Z2ggc2hhZG93IHJlZ2lvbiAwICovCisJCQkJZWRtYV9vcl9hcnJheTIoaiwgRURNQV9EUkFFLCAwLCBpID4+IDUsCisJCQkJCSAgICAgICBCSVQoaSAmIDB4MWYpKTsKKworCQkJCXNldHVwX2RtYV9pbnRlcnJ1cHQoaSwKKwkJCQkJCSAgICBjYy0+aW50cl9kYXRhW2ldLmNhbGxiYWNrLAorCQkJCQkJICAgIGNjLT5pbnRyX2RhdGFbaV0uZGF0YSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZWRtYV9wbV9vcHMgPSB7CisJU0VUX0xBVEVfU1lTVEVNX1NMRUVQX1BNX09QUyhOVUxMLCBlZG1hX3BtX3Jlc3VtZSkKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVkbWFfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImVkbWEiLAorCQkucG0JPSAmZWRtYV9wbV9vcHMsCiAJCS5vZl9tYXRjaF90YWJsZSA9IGVkbWFfb2ZfaWRzLAogCX0sCiAJLnByb2JlID0gZWRtYV9wcm9iZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXBlNmV2bV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FwZTZldm1fZGVmY29uZmlnCmluZGV4IGI1NGIyOGYuLmRiODFkOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXBlNmV2bV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hcGU2ZXZtX2RlZmNvbmZpZwpAQCAtMzMsNiArMzMsNyBAQAogQ09ORklHX1ZGUD15CiBDT05GSUdfTkVPTj15CiBDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnCmluZGV4IDNiNTE1YzEuLmE2NzM3NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxX2R0X2RlZmNvbmZpZwpAQCAtODAsNiArODAsNyBAQAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX01BQ0I9eQogIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0CitDT05GSUdfRE05MDAwPXkKICMgQ09ORklHX05FVF9WRU5ET1JfRkFSQURBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0CkBAIC0xMTMsNiArMTE0LDcgQEAKIENPTkZJR19JTlBVVF9KT1lERVY9eQogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9RVDEwNzA9eQogQ09ORklHX0tFWUJPQVJEX0dQSU89eQogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKQEAgLTE4Niw2ICsxODgsNyBAQAogQ09ORklHX0FUOTFfQURDPXkKIENPTkZJR19QV009eQogQ09ORklHX1BXTV9BVE1FTD15CitDT05GSUdfUFdNX0FUTUVMX1RDQj15CiBDT05GSUdfRVhUNF9GUz15CiBDT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX1ZGQVRfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMDU3NzEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1VTRVJfTlM9eQotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRD15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQotQ09ORklHX01BQ0hfT05FQVJNPXkKLUNPTkZJR19NQUNIX0FUOTFSTTkyMDBFSz15Ci1DT05GSUdfTUFDSF9DU0IzMzc9eQotQ09ORklHX01BQ0hfQ1NCNjM3PXkKLUNPTkZJR19NQUNIX0NBUk1FVkE9eQotQ09ORklHX01BQ0hfQVRFQjkyMDA9eQotQ09ORklHX01BQ0hfS0I5MjAwPXkKLUNPTkZJR19NQUNIX1BJQ09UVVgyWFg9eQotQ09ORklHX01BQ0hfS0FGQT15Ci1DT05GSUdfTUFDSF9FQ0JBVDkxPXkKLUNPTkZJR19NQUNIX1lMOTIwMD15Ci1DT05GSUdfTUFDSF9DUFVBVDkxPXkKLUNPTkZJR19NQUNIX0VDTzkyMD15Ci1DT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQ9eQotQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX1BDQ0FSRD15Ci1DT05GSUdfQVQ5MV9DRj15Ci1DT05GSUdfQUVBQkk9eQotIyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgxMDAwMDAwMAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgyMDA0MDAwMAotQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVVRPX1pSRUxBRERSPXkKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj15Ci1DT05GSUdfSVBWNl9QUklWQUNZPXkKLUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKLUNPTkZJR19JUFY2X1JPVVRFX0lORk89eQotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLUNPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BMQVRSQU09eQotQ09ORklHX01URF9EQVRBRkxBU0g9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX05BTkRfUExBVEZPUk09eQotQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfR0xVRUJJPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19NSUk9eQotQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKLUNPTkZJR19EQVZJQ09NX1BIWT15Ci1DT05GSUdfU01TQ19QSFk9eQotQ09ORklHX01JQ1JFTF9QSFk9eQotIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQVRNRUw9eQotQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19HUElPPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9BVE1FTD15Ci1DT05GSUdfR1BJT19TWVNGUz15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19GQl9USUxFQkxJVFRJTkc9eQotQ09ORklHX0ZCX1MxRDEzWFhYPXkKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZPTlRTPXkKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19VU0I9eQotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0FUOTE9eQotQ09ORklHX1VTQl9HX1NFUklBTD15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfQVRNRUxNQ0k9eQotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLUNPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKLUNPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19MTD15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19DUllQVE9fUENCQz15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQotQ09ORklHX1haX0RFQ19BUk1USFVNQj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwXzlnMjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MF85ZzIwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FkYTA1ZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwXzlnMjBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXQVAgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFTQU05MjYwPXkKLUNPTkZJR19NQUNIX0FUOTFTQU05MjYwRUs9eQotQ09ORklHX01BQ0hfQ0FNNjA9eQotQ09ORklHX01BQ0hfU0FNOV9MOTI2MD15Ci1DT05GSUdfTUFDSF9BRkVCOTI2MD15Ci1DT05GSUdfTUFDSF9DUFU5MjYwPXkKLUNPTkZJR19NQUNIX0ZMRVhJQklUWT15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOUcyMEVLPXkKLUNPTkZJR19NQUNIX0FUOTFTQU05RzIwRUtfMk1NQz15Ci1DT05GSUdfTUFDSF9DUFU5RzIwPXkKLUNPTkZJR19NQUNIX0FDTUVORVRVU0ZPWEcyMD15Ci1DT05GSUdfTUFDSF9QT1JUVVhHMjA9eQotQ09ORklHX01BQ0hfU1RBTVA5RzIwPXkKLUNPTkZJR19NQUNIX1BDT05UUk9MX0cyMD15Ci1DT05GSUdfTUFDSF9HU0lBMThTPXkKLUNPTkZJR19NQUNIX1NOQVBQRVJfOTI2MD15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOV9EVD15Ci1DT05GSUdfQVQ5MV9TTE9XX0NMT0NLPXkKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQVJNX0FQUEVOREVEX0RUQj15Ci1DT05GSUdfQVJNX0FUQUdfRFRCX0NPTVBBVD15Ci1DT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCBpbml0cmQ9MHgyMTEwMDAwMCwzMTQ1NzI4IHJvb3Q9L2Rldi9yYW0wIHJ3IgotQ09ORklHX0FVVE9fWlJFTEFERFI9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX0RBVEFGTEFTSD15Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX0FUTUVMPXkKLUNPTkZJR19NVERfVUJJPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19FRVBST01fQVQyNT15Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19NQUNCPXkKLSMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9GQVJBREFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfTUlDUk9DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0Ci1DT05GSUdfU01TQ19QSFk9eQotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9BVE1FTD15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0dQSU89eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX0FUTUVMPXkKLUNPTkZJR19TUElfU1BJREVWPXkKLUNPTkZJR19HUElPX1NZU0ZTPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotQ09ORklHX1BPV0VSX1JFU0VUPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci1DT05GSUdfU09VTkQ9eQotQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1NFUVVFTkNFUj15Ci1DT05GSUdfU05EX01JWEVSX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9TVE9SQUdFPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfQVQ5MT15Ci1DT05GSUdfVVNCX0dfU0VSSUFMPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19BVE1FTE1DST15Ci1DT05GSUdfTU1DX1NQST15Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfUlYzMDI5QzI9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQotQ09ORklHX0lJTz15Ci1DT05GSUdfQVQ5MV9BREM9eQotQ09ORklHX0VYVDRfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19VQklGU19GUz15Ci1DT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFI9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX05MU19JU084ODU5XzE1PXkKLUNPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTEw9eQotQ09ORklHX0VBUkxZX1BSSU5USz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxXzlnMTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MV85ZzEwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM1MDVkOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxXzlnMTBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLSMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19LRVJORUxfTFpNQT15Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX05BTUVTUEFDRVM9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxU0FNOTI2MT15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOTI2MUVLPXkKLUNPTkZJR19NQUNIX0FUOTFTQU05RzEwRUs9eQotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIxMTAwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCi1DT05GSUdfQVVUT19aUkVMQUREUj15Ci1DT05GSUdfVkZQPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTE9eQotQ09ORklHX01BQzgwMjExPXkKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfREVWVE1QRlM9eQotQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfTVREX1VCSV9HTFVFQkk9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19BVE1FTF9UQ0xJQj15Ci1DT05GSUdfQVRNRUxfU1NDPXkKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ETTkwMDA9eQotQ09ORklHX1VTQl9aRDEyMDE9bQotQ09ORklHX1JUTDgxODc9bQotQ09ORklHX0xJQkVSVEFTPW0KLUNPTkZJR19MSUJFUlRBU19VU0I9bQotQ09ORklHX0xJQkVSVEFTX1NESU89bQotQ09ORklHX0xJQkVSVEFTX1NQST1tCi1DT05GSUdfUlQyWDAwPW0KLUNPTkZJR19SVDI1MDBVU0I9bQotQ09ORklHX1JUNzNVU0I9bQotQ09ORklHX1pEMTIxMVJXPW0KLUNPTkZJR19JTlBVVF9QT0xMREVWPW0KLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0yNDAKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0zMjAKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVM9eQotQ09ORklHX1NFUklBTF9BVE1FTD15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0dQSU89eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX0FUTUVMPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotQ09ORklHX1BPV0VSX1JFU0VUPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZCX0FUTUVMPXkKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0FUTUVMX0xDREM9eQotIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotQ09ORklHX0xPR089eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9TRVFVRU5DRVI9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9BVDczQzIxMz15Ci1DT05GSUdfU05EX1VTQl9BVURJTz1tCi0jIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0I9eQotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9BVDkxPXkKLUNPTkZJR19VU0JfR19TRVJJQUw9eQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX0FUTUVMTUNJPW0KLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci1DT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19TUVVBU0hGUz15Ci1DT05GSUdfU1FVQVNIRlNfTFpPPXkKLUNPTkZJR19TUVVBU0hGU19YWj15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMTU9eQotQ09ORklHX05MU19VVEY4PXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2NzFjOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX05BTUVTUEFDRVM9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxU0FNOTI2Mz15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOTI2M0VLPXkKLUNPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRD15Ci0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLUNPTkZJR19BVVRPX1pSRUxBRERSPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotQ09ORklHX05FVF9JUElQPXkKLUNPTkZJR19JUF9NUk9VVEU9eQotQ09ORklHX0lQX1BJTVNNX1YxPXkKLUNPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PXkKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfREVWVE1QRlM9eQotQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX05GVEw9eQotQ09ORklHX05GVExfUlc9eQotQ09ORklHX01URF9EQVRBRkxBU0g9eQotQ09ORklHX01URF9CTE9DSzJNVEQ9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfTVREX1VCSV9HTFVFQkk9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0FUTUVMX1RDTElCPXkKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19NQUNCPXkKLUNPTkZJR19TTVNDX1BIWT15Ci0jIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9QT0xMREVWPW0KLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9BVE1FTD15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0dQSU89eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX0FUTUVMPXkKLUNPTkZJR19HUElPX1NZU0ZTPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotQ09ORklHX1BPV0VSX1JFU0VUPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZCX0FUTUVMPXkKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotQ09ORklHX0xPR089eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9TRVFVRU5DRVI9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9BVE1FTF9BQzk3Qz15Ci0jIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVVNCX0FVRElPPW0KLUNPTkZJR19VU0I9eQotQ09ORklHX1VTQl9NT049eQotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9BVE1FTF9VU0JBPXkKLUNPTkZJR19VU0JfR19TRVJJQUw9eQotQ09ORklHX01NQz15Ci1DT05GSUdfU0RJT19VQVJUPW0KLUNPTkZJR19NTUNfQVRNRUxNQ0k9bQotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLUNPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfUFdNPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQotQ09ORklHX1BXTT15Ci1DT05GSUdfUFdNX0FUTUVMPXkKLUNPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WM19BQ0w9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX05MU19VVEY4PXkKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19YWl9ERUM9eQotQ09ORklHX0ZPTlRTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnNDVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWc0NV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NmQxYTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWc0NV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFTQU05RzQ1PXkKLUNPTkZJR19NQUNIX0FUOTFTQU05TTEwRzQ1RUs9eQotQ09ORklHX01BQ0hfQVQ5MVNBTTlfRFQ9eQotQ09ORklHX0FUOTFfU0xPV19DTE9DSz15Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTEyOE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4NzExMDAwMDAsMjUxNjU4MjQgcm9vdD0vZGV2L3JhbTAgcnciCi1DT05GSUdfQVVUT19aUkVMQUREUj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVF82UkQ9eQotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9EQVRBRkxBU0g9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfTVREX1VCSV9HTFVFQkk9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTQKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19BVE1FTF9UQ0xJQj15Ci1DT05GSUdfQVRNRUxfU1NDPXkKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX01BQ0I9eQotQ09ORklHX0RBVklDT01fUEhZPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9KT1lERVY9eQotQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9RVDEwNzA9eQotQ09ORklHX0tFWUJPQVJEX1FUMjE2MD15Ci1DT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX01YVD1tCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0FUTUVMPXkKLUNPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfR1BJTz15Ci1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfQVRNRUw9eQotQ09ORklHX1BPV0VSX1NVUFBMWT15Ci1DT05GSUdfUE9XRVJfUkVTRVQ9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci1DT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfQVRNRUw9eQotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15Ci1DT05GSUdfTENEX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0FUTUVMX0xDREM9eQotIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAotQ09ORklHX0JBQ0tMSUdIVF9QV009eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotQ09ORklHX0xPR089eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9TRVFVRU5DRVI9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9BVE1FTF9BQzk3Qz15Ci0jIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfQUNNPXkKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0FUTUVMX1VTQkE9eQotQ09ORklHX1VTQl9HX01VTFRJPXkKLUNPTkZJR19VU0JfR19NVUxUSV9DREM9eQotQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQVRNRUxNQ0k9eQotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLUNPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfUFdNPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMD15Ci1DT05GSUdfRE1BREVWSUNFUz15Ci1DT05GSUdfQVRfSERNQUM9eQotQ09ORklHX0RNQVRFU1Q9bQotIyBDT05GSUdfSU9NTVVfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUlPPXkKLUNPTkZJR19BVDkxX0FEQz15Ci1DT05GSUdfUFdNPXkKLUNPTkZJR19QV01fQVRNRUw9eQotQ09ORklHX0VYVDRfRlM9eQotQ09ORklHX0ZBTk9USUZZPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19TVFJJUF9BU01fU1lNUz15Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19MTD15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fVVNFUl9BUElfSEFTSD1tCi1DT05GSUdfQ1JZUFRPX1VTRVJfQVBJX1NLQ0lQSEVSPW0KLSMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVFM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMjZkMzQ0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxU0FNOVJMPXkKLUNPTkZJR19NQUNIX0FUOTFTQU05UkxFSz15Ci0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMTcxMDUzNjMgcm9vdD0vZGV2L3JhbTAgcnciCi1DT05GSUdfQVVUT19aUkVMQUREUj15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfREVWVE1QRlM9eQotQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9EQVRBRkxBU0g9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9NAotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MjQ1NzYKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0zMjAKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0yNDAKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9BVE1FTD15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfR1BJTz15Ci1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfQVRNRUw9eQotQ09ORklHX1BPV0VSX1NVUFBMWT15Ci1DT05GSUdfUE9XRVJfUkVTRVQ9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci1DT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfQVRNRUw9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9BVE1FTF9VU0JBPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19BVE1FTE1DST1tCi1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19QV009eQotQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0RSVl9BVDkxU0FNOT15Ci1DT05GSUdfSUlPPXkKLUNPTkZJR19BVDkxX0FEQz15Ci1DT05GSUdfUFdNPXkKLUNPTkZJR19QV01fQVRNRUw9eQotQ09ORklHX0VYVDRfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19VQklGU19GUz15Ci1DT05GSUdfQ1JBTUZTPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xNT15Ci1DT05GSUdfTkxTX1VURjg9eQotQ09ORklHX0RFQlVHX0lORk89eQotQ09ORklHX0RFQlVHX1VTRVI9eQotQ09ORklHX0RFQlVHX0xMPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXg0MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTF4NDBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTVlOTIxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXg0MF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUkZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotQ09ORklHX1NMQUI9eQotIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTVUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxWDQwPXkKLUNPTkZJR19NQUNIX0FUOTFFQjAxPXkKLUNPTkZJR19BVDkxX0VBUkxZX1VTQVJUMD15Ci1DT05GSUdfQ1BVX0FSTTdURE1JPXkKLUNPTkZJR19TRVRfTUVNX1BBUkFNPXkKLUNPTkZJR19EUkFNX0JBU0U9MHgwMTAwMDAwMAotQ09ORklHX0RSQU1fU0laRT0weDAwNDAwMDAwCi1DT05GSUdfRkxBU0hfTUVNX0JBU0U9MHgwMTQwMDAwMAotQ09ORklHX1BST0NFU1NPUl9JRD0weDE0MDAwMDQwCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19CSU5GTVRfRkxBVD15Ci0jIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX1JBTT15Ci1DT05GSUdfTVREX1JPTT15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfRlM9eQotIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9iY21fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9iY21fZGVmY29uZmlnCmluZGV4IGJjNjE0ZjQuLjgzYTg3ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2JjbV9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDggQEAKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX0FSQ0hfQkNNPXkKLUNPTkZJR19BUkNIX0JDTV9NT0JJTEU9eQorQ09ORklHX0FSQ0hfQkNNXzIxNjY0PXkKK0NPTkZJR19BUkNIX0JDTV8yODFYWD15CiBDT05GSUdfQVJNX1RIVU1CRUU9eQogQ09ORklHX1NNUD15CiBDT05GSUdfUFJFRU1QVD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWcKaW5kZXggNzIwNThiOC4uYzQxOTkwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZwpAQCAtMTM0LDYgKzEzNCw3IEBACiBDT05GSUdfVVNCX0RXQzM9eQogQ09ORklHX1VTQl9IU0lDX1VTQjM1MDM9eQogQ09ORklHX01NQz15CitDT05GSUdfTU1DX0JMT0NLX01JTk9SUz0xNgogQ09ORklHX01NQ19TREhDST15CiBDT05GSUdfTU1DX1NESENJX1MzQz15CiBDT05GSUdfTU1DX1NESENJX1MzQ19ETUE9eQpAQCAtMTQyLDExICsxNDMsMTMgQEAKIENPTkZJR19NTUNfRFdfRVhZTk9TPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfTUFYNzc2ODY9eQorQ09ORklHX1JUQ19EUlZfTUFYNzc4MDI9eQogQ09ORklHX1JUQ19EUlZfUzVNPXkKIENPTkZJR19SVENfRFJWX1MzQz15CiBDT05GSUdfRE1BREVWSUNFUz15CiBDT05GSUdfUEwzMzBfRE1BPXkKIENPTkZJR19DT01NT05fQ0xLX01BWDc3Njg2PXkKK0NPTkZJR19DT01NT05fQ0xLX01BWDc3ODAyPXkKIENPTkZJR19DT01NT05fQ0xLX1MyTVBTMTE9eQogQ09ORklHX0VYWU5PU19JT01NVT15CiBDT05GSUdfSUlPPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaGlzaV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2hpc2lfZGVmY29uZmlnCmluZGV4IDE3NzI1MDUuLjFmZTM2MjFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2hpc2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaGlzaV9kZWZjb25maWcKQEAgLTUsNiArNSw4IEBACiBDT05GSUdfUkRfTFpNQT15CiBDT05GSUdfQVJDSF9ISVNJPXkKIENPTkZJR19BUkNIX0hJM3h4eD15CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19DTURMSU5FX1BBUlRJVElPTj15CiBDT05GSUdfQVJDSF9ISVg1SEQyPXkKIENPTkZJR19BUkNIX0hJUDA0PXkKIENPTkZJR19TTVA9eQpAQCAtMTQsOCArMTYsMTEgQEAKIENPTkZJR19ISUdITUVNPXkKIENPTkZJR19BUk1fQVBQRU5ERURfRFRCPXkKIENPTkZJR19BUk1fQVRBR19EVEJfQ09NUEFUPXkKK0NPTkZJR19ORU9OPXkKIENPTkZJR19BUk1fQVRBR19EVEJfQ09NUEFUX0NNRExJTkVfRlJPTV9CT09UTE9BREVSPXkKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfUE5QPXkKQEAgLTI2LDYgKzMxLDcgQEAKIENPTkZJR19BVEE9eQogQ09ORklHX1NBVEFfQUhDSV9QTEFURk9STT15CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfSElYNUhEMl9HTUFDPXkKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVQUkVDQVRFRF9PUFRJT05TPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKQEAgLTM5LDggKzQ1LDEzIEBACiBDT05GSUdfU1BJPXkKIENPTkZJR19TUElfUEwwMjI9eQogQ09ORklHX1BJTkNUUkxfU0lOR0xFPXkKK0NPTkZJR19ERUJVR19HUElPPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKK0NPTkZJR19HUElPTElCPXkKIENPTkZJR19HUElPX0dFTkVSSUNfUExBVEZPUk09eQogQ09ORklHX1JFR1VMQVRPUl9HUElPPXkKK0NPTkZJR19NRkRfU1lTQ09OPXkKK0NPTkZJR19QT1dFUl9SRVNFVF9TWVNDT049eQogQ09ORklHX0RSTT15CiBDT05GSUdfRkJfU0lNUExFPXkKIENPTkZJR19VU0I9eQpAQCAtNDgsMTUgKzU5LDIxIEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9NWEM9eQogQ09ORklHX1VTQl9FSENJX0hDRF9QTEFURk9STT15CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk09eQogQ09ORklHX1VTQl9TVE9SQUdFPXkKIENPTkZJR19OT1BfVVNCX1hDRUlWPXkKIENPTkZJR19NTUM9eQogQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfTU1DX0RXPXkKK0NPTkZJR19NTUNfRFdfSURNQUM9eQorQ09ORklHX01NQ19EV19QTFRGTT15CiBDT05GSUdfUlRDX0RSVl9QTDAzMT15CiBDT05GSUdfRE1BREVWSUNFUz15CiBDT05GSUdfRFdfRE1BQz15CiBDT05GSUdfUEwzMzBfRE1BPXkKIENPTkZJR19QV009eQorQ09ORklHX1BIWV9ISVg1SEQyX1NBVEE9eQogQ09ORklHX0VYVDRfRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19ORlNfRlM9eQpAQCAtNjUsNiArODIsOCBAQAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19QUklOVEtfVElNRT15CiBDT05GSUdfREVCVUdfRlM9eQorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9DS1VQX0RFVEVDVE9SPXkKIENPTkZJR19WRlA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pbXhfdjRfdjVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pbXhfdjRfdjVfZGVmY29uZmlnCmluZGV4IGU2ODg3NDEuLmU2YjAwMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW14X3Y0X3Y1X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lteF92NF92NV9kZWZjb25maWcKQEAgLTk3LDYgKzk3LDcgQEAKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19JTVg9eQorQ09ORklHX1NQST15CiBDT05GSUdfU1BJX0lNWD15CiBDT05GSUdfU1BJX1NQSURFVj15CiBDT05GSUdfR1BJT19TWVNGUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lteF92Nl92N19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lteF92Nl92N19kZWZjb25maWcKaW5kZXggOGZjYTZlMi4uZjcwN2NkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pbXhfdjZfdjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW14X3Y2X3Y3X2RlZmNvbmZpZwpAQCAtMTU4LDExICsxNTgsMTggQEAKIENPTkZJR19JMkNfQUxHT1BDRj1tCiBDT05GSUdfSTJDX0FMR09QQ0E9bQogQ09ORklHX0kyQ19JTVg9eQorQ09ORklHX1NQST15CiBDT05GSUdfU1BJX0lNWD15CiBDT05GSUdfR1BJT19TWVNGUz15CiBDT05GSUdfR1BJT19NQzlTMDhEWjYwPXkKIENPTkZJR19HUElPX1NUTVBFPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0dQSU9fRkFOPXkKK0NPTkZJR19USEVSTUFMPXkKK0NPTkZJR19DUFVfVEhFUk1BTD15CitDT05GSUdfSU1YX1RIRVJNQUw9eQorQ09ORklHX1BPV0VSX1NVUFBMWT15CitDT05GSUdfUE9XRVJfUkVTRVQ9eQorQ09ORklHX1BPV0VSX1JFU0VUX0lNWD15CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX0lNWDJfV0RUPXkKIENPTkZJR19NRkRfREE5MDUyX0kyQz15CkBAIC0yMTAsNiArMjE3LDcgQEAKIENPTkZJR19TTkRfU09DX0lNWF9TR1RMNTAwMD15CiBDT05GSUdfU05EX1NPQ19JTVhfU1BESUY9eQogQ09ORklHX1NORF9TT0NfSU1YX01DMTM3ODM9eQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDM1g9eQogQ09ORklHX1NORF9TSU1QTEVfQ0FSRD15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQpAQCAtMjM4LDYgKzI0Niw3IEBACiBDT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CiBDT05GSUdfUlRDX0RSVl9JU0wxMjA4PXkKIENPTkZJR19SVENfRFJWX1BDRjg1NjM9eQogQ09ORklHX1JUQ19EUlZfTUMxM1hYWD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZwppbmRleCBjMWY1YWRjLi43MWYxNDY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKQEAgLTgsNiArOCw5IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19BUkNIX01VTFRJX1Y0VD15CitDT05GSUdfQVJDSF9NVUxUSV9WNT15CisjIENPTkZJR19BUkNIX01VTFRJX1Y3IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lOVEVHUkFUT1I9eQogQ09ORklHX0FSQ0hfSU5URUdSQVRPUl9BUD15CiBDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0NQPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWcKaW5kZXggOTMyYWU0MC4uMjBhM2ZmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWcKQEAgLTIwLDYgKzIwLDkgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfQVJDSF9LRVlTVE9ORT15CiBDT05GSUdfQVJNX0xQQUU9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX01TST15CitDT05GSUdfUENJX0tFWVNUT05FPXkKIENPTkZJR19TTVA9eQogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0FFQUJJPXkKQEAgLTE5NCwzICsxOTcsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKK0NPTkZJR19LRVlTVE9ORV9JUlE9eQorQ09ORklHX0dQSU9fU1lTQ09OPXkKK0NPTkZJR19USV9EQVZJTkNJX01ESU89eQorQ09ORklHX01BUlZFTExfUEhZPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva29lbHNjaF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tvZWxzY2hfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzNkMTliLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva29lbHNjaF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1BFUkZfRVZFTlRTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWT15Ci1DT05GSUdfQVJDSF9SOEE3NzkxPXkKLUNPTkZJR19NQUNIX0tPRUxTQ0g9eQotIyBDT05GSUdfU1dQX0VNVUxBVEUgaXMgbm90IHNldAotQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFPXkKLUNPTkZJR19QTDMxMF9FUlJBVEFfNTg4MzY5PXkKLUNPTkZJR19BUk1fRVJSQVRBXzc1NDMyMj15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfUkNBUl9HRU4yPXkKLUNPTkZJR19QQ0lfUkNBUl9HRU4yX1BDSUU9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfU0NIRURfTUM9eQotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0FSTV9BUFBFTkRFRF9EVEI9eQotQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVVRPX1pSRUxBRERSPXkKLUNPTkZJR19WRlA9eQotQ09ORklHX05FT049eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19BVEE9eQotQ09ORklHX1NBVEFfUkNBUj15Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfTTI1UDgwPXkKLUNPTkZJR19NVERfU1BJX05PUj15Ci1DT05GSUdfRUVQUk9NX0FUMjQ9eQotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUX1ZFTkRPUl9BUkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NBREVOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX0ZBUkFEQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNSRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKLUNPTkZJR19TSF9FVEg9eQotIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU01TQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9TSF9TQ0k9eQotQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MjAKLUNPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX01VWD15Ci1DT05GSUdfSTJDX1NIX01PQklMRT15Ci1DT05GSUdfSTJDX1JDQVI9eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX1JTUEk9eQotQ09ORklHX1NQSV9TSF9NU0lPRj15Ci1DT05GSUdfR1BJT0xJQj15Ci1DT05GSUdfR1BJT19SQ0FSPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19USEVSTUFMPXkKLUNPTkZJR19SQ0FSX1RIRVJNQUw9eQotQ09ORklHX1JFR1VMQVRPUj15Ci1DT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQotQ09ORklHX1JFR1VMQVRPUl9EQTkyMTA9eQotQ09ORklHX1JFR1VMQVRPUl9HUElPPXkKLUNPTkZJR19NRURJQV9TVVBQT1JUPXkKLUNPTkZJR19NRURJQV9DQU1FUkFfU1VQUE9SVD15Ci1DT05GSUdfVjRMX1BMQVRGT1JNX0RSSVZFUlM9eQotQ09ORklHX1NPQ19DQU1FUkE9eQotQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk09eQotQ09ORklHX1ZJREVPX1JDQVJfVklOPXkKLSMgQ09ORklHX01FRElBX1NVQkRSVl9BVVRPU0VMRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19BRFY3MTgwPXkKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfU0RIST15Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci0jIENPTkZJR19JT01NVV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19DT05GSUdGU19GUz15Ci0jIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX1VOV0lORCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnCmluZGV4IDAxOGJlZjkuLjlkNTY3ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnCkBAIC02Nyw5ICs2NywxMSBAQAogQ09ORklHX1NBVEFfTVY9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX05FVF9EU0FfTVY4OEU2MTIzXzYxXzY1PXkKK0NPTkZJR19ORVRfRFNBX01WODhFNjE3MT15CiBDT05GSUdfTVY2NDNYWF9FVEg9eQogQ09ORklHX1I4MTY5PXkKIENPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfTVdMOEs9bQogQ09ORklHX0xJQkVSVEFTPXkKIENPTkZJR19MSUJFUlRBU19TRElPPXkKIENPTkZJR19JTlBVVF9FVkRFVj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCmluZGV4IGYxZGM3ZmMuLmQ3ODk2NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCkBAIC0zLDEyICszLDE0IEBACiBDT05GSUdfSVJRX0RPTUFJTl9ERUJVRz15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfQ0dST1VQUz15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19QRVJGX0VWRU5UUz15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19DTURMSU5FX1BBUlRJVElPTj15CiBDT05GSUdfQVJDSF9WSVJUPXkKIENPTkZJR19BUkNIX01WRUJVPXkKIENPTkZJR19NQUNIX0FSTUFEQV8zNzA9eQpAQCAtMTcsNyArMTksOSBAQAogQ09ORklHX01BQ0hfQVJNQURBX1hQPXkKIENPTkZJR19NQUNIX0RPVkU9eQogQ09ORklHX0FSQ0hfQkNNPXkKLUNPTkZJR19BUkNIX0JDTV9NT0JJTEU9eQorQ09ORklHX0FSQ0hfQkNNX0NZR05VUz15CitDT05GSUdfQVJDSF9CQ01fMjE2NjQ9eQorQ09ORklHX0FSQ0hfQkNNXzI4MVhYPXkKIENPTkZJR19BUkNIX0JDTV81MzAxWD15CiBDT05GSUdfQVJDSF9CUkNNU1RCPXkKIENPTkZJR19BUkNIX0JFUkxJTj15CkBAIC0xMjQsOCArMTI4LDEyIEBACiBDT05GSUdfQ01BX1NJWkVfTUJZVEVTPTY0CiBDT05GSUdfT01BUF9PQ1AyU0NQPXkKIENPTkZJR19NVEQ9eQorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9NMjVQODA9eQorQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfU1BJX05PUj15CitDT05GSUdfTVREX1VCST15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19BRDUyNVhfRFBPVD15CiBDT05GSUdfQUQ1MjVYX0RQT1RfSTJDPXkKQEAgLTE0Niw2ICsxNTQsNyBAQAogQ09ORklHX1NBVEFfSElHSEJBTks9eQogQ09ORklHX1NBVEFfTVY9eQogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0hJWDVIRDJfR01BQz15CiBDT05GSUdfU1VONElfRU1BQz15CiBDT05GSUdfTUFDQj15CiBDT05GSUdfTkVUX0NBTFhFREFfWEdNQUM9eQpAQCAtMTYwLDYgKzE2OSw3IEBACiBDT05GSUdfWElMSU5YX0VNQUNMSVRFPXkKIENPTkZJR19BVDgwM1hfUEhZPXkKIENPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKIENPTkZJR19JQ1BMVVNfUEhZPXkKIENPTkZJR19VU0JfUEVHQVNVUz15CiBDT05GSUdfVVNCX1VTQk5FVD15CkBAIC0yMTcsNiArMjI3LDcgQEAKIENPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STT15CiBDT05GSUdfSTJDX0VYWU5PUzU9eQogQ09ORklHX0kyQ19NVjY0WFhYPXkKK0NPTkZJR19JMkNfUzNDMjQxMD15CiBDT05GSUdfSTJDX1NJUkY9eQogQ09ORklHX0kyQ19URUdSQT15CiBDT05GSUdfSTJDX1NUPXkKQEAgLTIzMyw4ICsyNDQsMTAgQEAKIENPTkZJR19TUElfVEVHUkEyMF9TRkxBU0g9eQogQ09ORklHX1NQSV9URUdSQTIwX1NMSU5LPXkKIENPTkZJR19TUElfWElMSU5YPXkKK0NPTkZJR19TUElfU1BJREVWPXkKIENPTkZJR19QSU5DVFJMX0FTMzcyMj15CiBDT05GSUdfUElOQ1RSTF9QQUxNQVM9eQorQ09ORklHX1BJTkNUUkxfQVBRODA4ND15CiBDT05GSUdfR1BJT19TWVNGUz15CiBDT05GSUdfR1BJT19HRU5FUklDX1BMQVRGT1JNPXkKIENPTkZJR19HUElPX0RXQVBCPXkKQEAgLTI1OSw2ICsyNzIsNyBAQAogQ09ORklHX1NUX1RIRVJNQUxfTUVNTUFQPXkKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfWElMSU5YX1dBVENIRE9HPXkKK0NPTkZJR19BUk1fU1A4MDVfV0FUQ0hET0c9eQogQ09ORklHX09SSU9OX1dBVENIRE9HPXkKIENPTkZJR19TVU5YSV9XQVRDSERPRz15CiBDT05GSUdfTUVTT05fV0FUQ0hET0c9eQpAQCAtMjY2LDYgKzI4MCw3IEBACiBDT05GSUdfTUZEX0JDTTU5MFhYPXkKIENPTkZJR19NRkRfQ1JPU19FQz15CiBDT05GSUdfTUZEX0NST1NfRUNfU1BJPXkKK0NPTkZJR19NRkRfTUFYNzc2ODY9eQogQ09ORklHX01GRF9NQVg4OTA3PXkKIENPTkZJR19NRkRfU0VDX0NPUkU9eQogQ09ORklHX01GRF9TVE1QRT15CkBAIC0yNzcsNyArMjkyLDEwIEBACiBDT05GSUdfUkVHVUxBVE9SX0FTMzcyMj15CiBDT05GSUdfUkVHVUxBVE9SX0JDTTU5MFhYPXkKIENPTkZJR19SRUdVTEFUT1JfR1BJTz15CitDT05GSUdfTUZEX1NZU0NPTj15CitDT05GSUdfUE9XRVJfUkVTRVRfU1lTQ09OPXkKIENPTkZJR19SRUdVTEFUT1JfTUFYODkwNz15CitDT05GSUdfUkVHVUxBVE9SX01BWDc3Njg2PXkKIENPTkZJR19SRUdVTEFUT1JfUEFMTUFTPXkKIENPTkZJR19SRUdVTEFUT1JfUzJNUFMxMT15CiBDT05GSUdfUkVHVUxBVE9SX1M1TTg3Njc9eQpAQCAtMzA2LDYgKzMyNCw4IEBACiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NORD15CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19TTkRfVVNCX0FVRElPPXkKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfU09DX1RFR1JBPXkKIENPTkZJR19TTkRfU09DX1RFR1JBX1JUNTY0MD15CkBAIC0zMTksOSArMzM5LDExIEBACiBDT05GSUdfVVNCX1hIQ0lfTVZFQlU9eQogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfVEVHUkE9eQorQ09ORklHX1VTQl9FSENJX0hDRF9TVEk9eQogQ09ORklHX1VTQl9FSENJX0hDRF9QTEFURk9STT15CiBDT05GSUdfVVNCX0lTUDE3NjBfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9TVEk9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QTEFURk9STT15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9DSElQSURFQT15CkBAIC0zNTMsNiArMzc1LDggQEAKIENPTkZJR19NTUNfTVZTRElPPXkKIENPTkZJR19NTUNfU1VOWEk9eQogQ09ORklHX01NQ19EVz15CitDT05GSUdfTU1DX0RXX0lETUFDPXkKK0NPTkZJR19NTUNfRFdfUExURk09eQogQ09ORklHX01NQ19EV19FWFlOT1M9eQogQ09ORklHX01NQ19EV19ST0NLQ0hJUD15CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtMzc3LDYgKzQwMSw3IEBACiBDT05GSUdfUlRDX0RSVl9BUzM3MjI9eQogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKIENPTkZJR19SVENfRFJWX01BWDg5MDc9eQorQ09ORklHX1JUQ19EUlZfTUFYNzc2ODY9eQogQ09ORklHX1JUQ19EUlZfUEFMTUFTPXkKIENPTkZJR19SVENfRFJWX1RXTDQwMzA9eQogQ09ORklHX1JUQ19EUlZfVFBTNjU4Nlg9eQpAQCAtNDExLDYgKzQzNiw4IEBACiBDT05GSUdfTlZFQ19QQVowMD15CiBDT05GSUdfUUNPTV9HU0JJPXkKIENPTkZJR19DT01NT05fQ0xLX1FDT009eQorQ09ORklHX0NPTU1PTl9DTEtfTUFYNzc2ODY9eQorQ09ORklHX0FQUV9NTUNDXzgwODQ9eQogQ09ORklHX01TTV9HQ0NfODY2MD15CiBDT05GSUdfTVNNX01NQ0NfODk2MD15CiBDT05GSUdfTVNNX01NQ0NfODk3ND15CkBAIC00MjMsMTIgKzQ1MCwxOSBAQAogQ09ORklHX1BXTT15CiBDT05GSUdfUFdNX1RFR1JBPXkKIENPTkZJR19QV01fVlQ4NTAwPXkKK0NPTkZJR19QSFlfSElYNUhEMl9TQVRBPXkKIENPTkZJR19PTUFQX1VTQjI9eQogQ09ORklHX1RJX1BJUEUzPXkKIENPTkZJR19QSFlfTUlQSFkzNjVYPXkKK0NPTkZJR19QSFlfU1RJSDQxWF9VU0I9eQogQ09ORklHX1BIWV9TVU40SV9VU0I9eQogQ09ORklHX0VYVDRfRlM9eQorQ09ORklHX0FVVE9GUzRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19OVEZTX0ZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorQ09ORklHX1VCSUZTX0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfU1FVQVNIRlM9eQogQ09ORklHX1NRVUFTSEZTX0xaTz15CkBAIC00MzcsNiArNDcxLDkgQEAKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfVVRGOD15CiBDT05GSUdfUFJJTlRLX1RJTUU9eQogQ09ORklHX0RFQlVHX0ZTPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjVfZGVmY29uZmlnCmluZGV4IDIyMDU4ZTEuLjgyNGRlNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjVfZGVmY29uZmlnCkBAIC02Nyw5ICs2NywxMSBAQAogQ09ORklHX1NBVEFfTVY9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX05FVF9EU0FfTVY4OEU2MTIzXzYxXzY1PXkKK0NPTkZJR19ORVRfRFNBX01WODhFNjE3MT15CiBDT05GSUdfTVY2NDNYWF9FVEg9eQogQ09ORklHX1I4MTY5PXkKIENPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfTVdMOEs9bQogQ09ORklHX0xJQkVSVEFTPXkKIENPTkZJR19MSUJFUlRBU19TRElPPXkKIENPTkZJR19JTlBVVF9FVkRFVj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnCmluZGV4IGVkMGEwZDEuLjYyN2FjY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnCkBAIC00NSw2ICs0NSw3IEBACiBDT05GSUdfREVWVE1QRlM9eQogQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKIENPTkZJR19NVEQ9eQorQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpAQCAtNTksMTAgKzYwLDEyIEBACiBDT05GSUdfQUhDSV9NVkVCVT15CiBDT05GSUdfU0FUQV9NVj15CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfTkVUX0RTQV9NVjg4RTYxNzE9eQogQ09ORklHX01WNjQzWFhfRVRIPXkKIENPTkZJR19NVk5FVEE9eQogQ09ORklHX01WUFAyPXkKIENPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfRklYRURfUEhZPXkKIENPTkZJR19NV0lGSUVYPXkKIENPTkZJR19NV0lGSUVYX1NESU89eQogQ09ORklHX0lOUFVUX0VWREVWPXkKQEAgLTcyLDYgKzc1LDcgQEAKIENPTkZJR19TRVJJQUxfODI1MF9EVz15CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKIENPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfTVY2NFhYWD15CiBDT05GSUdfU1BJPXkKIENPTkZJR19TUElfT1JJT049eQpAQCAtODUsNyArODksOSBAQAogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX0tJUktXT09EX1NPQz15Ci1DT05GSUdfU05EX0tJUktXT09EX1NPQ19BUk1BREEzNzBfREI9eQorQ09ORklHX1NORF9TT0NfQ1M0Mkw1MV9JMkM9eQorQ09ORklHX1NORF9TT0NfU1BESUY9eQorQ09ORklHX1NORF9TSU1QTEVfQ0FSRD15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfWEhDSV9IQ0Q9eQogQ09ORklHX1VTQl9YSENJX01WRUJVPXkKQEAgLTk2LDYgKzEwMiw3IEBACiBDT05GSUdfTU1DX1NESENJPXkKIENPTkZJR19NTUNfU0RIQ0lfUExURk09eQogQ09ORklHX01NQ19TREhDSV9ET1ZFPXkKK0NPTkZJR19NTUNfU0RIQ0lfUFhBVjM9eQogQ09ORklHX01NQ19NVlNESU89eQogQ09ORklHX0xFRFNfR1BJTz15CiBDT05GSUdfTEVEU19DTEFTUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZwppbmRleCAyNjNhZTM4Li43ZDJhZDMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKQEAgLTIwLDcgKzIwLDYgQEAKIENPTkZJR19BRUFCST15CiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19GUEVfTldGUEU9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTU3LDE0ICs1NiwxMiBAQAogQ09ORklHX01URF9PTkVOQU5EPXkKIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEU9eQogQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19TQ1NJPXkKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NHPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15CiBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKQEAgLTgzLDIxICs4MCwyMSBAQAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKK0NPTkZJR19LRVlCT0FSRF9TVE1QRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKIENPTkZJR19IV19SQU5ET009eQotQ09ORklHX0hXX1JBTkRPTV9OT01BRElLPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0dQSU89eQotQ09ORklHX0kyQ19OT01BRElLPXkKIENPTkZJR19ERUJVR19HUElPPXkKK0NPTkZJR19HUElPX1NUTVBFPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU1RNUEU9eQogQ09ORklHX1JFR1VMQVRPUj15CiBDT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15CiAjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfQVJNTU1DST15CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtMTI1LDEyICsxMjIsMTIgQEAKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzE1PXkKK0NPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19TSEExPXkKIENPTkZJR19DUllQVE9fREVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZwppbmRleCAxNmU3MTljLi4zZTA5Mjg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnCkBAIC04Niw3ICs4Niw2IEBACiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj15CiBDT05GSUdfTkVURklMVEVSPXkKIENPTkZJR19DQU49bQogQ09ORklHX0NBTl9DX0NBTj1tCkBAIC0xMTIsNiArMTExLDcgQEAKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfRUNDX0JDSD15CiBDT05GSUdfTVREX05BTkRfT01BUDI9eQogQ09ORklHX01URF9PTkVOQU5EPXkKIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEU9eQpAQCAtMTI5LDExICsxMjksMjcgQEAKIENPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogQ09ORklHX01EPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVF9WRU5ET1JfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DQURFTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9GQVJBREFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfSElTSUxJQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKIENPTkZJR19LUzg4NTE9eQogQ09ORklHX0tTODg1MV9NTEw9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNST0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUVVBTENPTU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKIENPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldAogQ09ORklHX1RJX0NQU1c9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQgaXMgbm90IHNldAogQ09ORklHX0FUODAzWF9QSFk9eQogQ09ORklHX1NNU0NfUEhZPXkKIENPTkZJR19VU0JfVVNCTkVUPXkKQEAgLTE2MSw2ICsxNzcsNyBAQAogQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PW0KK0NPTkZJR19UT1VDSFNDUkVFTl9FRFRfRlQ1WDA2PW0KIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA1PW0KIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3PW0KIENPTkZJR19JTlBVVF9NSVNDPXkKQEAgLTI2NCw2ICsyODEsOCBAQAogQ09ORklHX1NORF9ERUJVRz15CiBDT05GSUdfU05EX1VTQl9BVURJTz1tCiBDT05GSUdfU05EX1NPQz1tCitDT05GSUdfU05EX0VETUFfU09DPW0KK0NPTkZJR19TTkRfQU0zM1hYX1NPQ19FVk09bQogQ09ORklHX1NORF9PTUFQX1NPQz1tCiBDT05GSUdfU05EX09NQVBfU09DX09NQVBfVFdMNDAzMD1tCiBDT05GSUdfU05EX09NQVBfU09DX09NQVBfQUJFX1RXTDYwNDA9bQpAQCAtMjcxLDYgKzI5MCw3IEBACiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQogQ09ORklHX1VTQl9NT049eQorQ09ORklHX1VTQl9YSENJX0hDRD1tCiBDT05GSUdfVVNCX1dETT15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9EV0MzPW0KQEAgLTMwNiw2ICszMjYsOCBAQAogQ09ORklHX0VYVENPTj15CiBDT05GSUdfRVhUQ09OX1BBTE1BUz15CiBDT05GSUdfUFdNPXkKK0NPTkZJR19QV01fVElFQ0FQPXkKK0NPTkZJR19QV01fVElFSFJQV009eQogQ09ORklHX1BXTV9UV0w9eQogQ09ORklHX1BXTV9UV0xfTEVEPXkKIENPTkZJR19PTUFQX1VTQjI9eQpAQCAtMzE3LDcgKzMzOSw3IEBACiBDT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX1FVT1RBPXkKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKK0NPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15CiBDT05GSUdfVE1QRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZwppbmRleCBjOTA4OWM5Li5iNThmYjMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZwpAQCAtMTIsNyArMTIsNyBAQAogQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKQEAgLTIwLDcgKzIwLDYgQEAKIENPTkZJR19TT0NfU0FNX1Y3PXkKIENPTkZJR19TT0NfU0FNQTVEMz15CiBDT05GSUdfU09DX1NBTUE1RDQ9eQotQ09ORklHX01BQ0hfU0FNQTVfRFQ9eQogQ09ORklHX0FFQUJJPXkKIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKQEAgLTMwLDYgKzI5LDggQEAKIENPTkZJR19LRVhFQz15CiBDT05GSUdfQVVUT19aUkVMQUREUj15CiBDT05GSUdfVkZQPXkKK0NPTkZJR19ORU9OPXkKK0NPTkZJR19LRVJORUxfTU9ERV9ORU9OPXkKICMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19QTV9ERUJVRz15CkBAIC0xNzYsMTEgKzE3NywxMyBAQAogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKK0NPTkZJR19BVF9YRE1BQz15CiAjIENPTkZJR19JT01NVV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19JSU89eQogQ09ORklHX0FUOTFfQURDPXkKIENPTkZJR19QV009eQogQ09ORklHX1BXTV9BVE1FTD15CitDT05GSUdfUFdNX0FUTUVMX1RDQj15CiBDT05GSUdfRVhUNF9GUz15CiBDT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX1ZGQVRfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaG1vYmlsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NobW9iaWxlX2RlZmNvbmZpZwppbmRleCBkNzM0NmFkLi42M2ZiNTMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NobW9iaWxlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NobW9iaWxlX2RlZmNvbmZpZwpAQCAtMTcsNyArMTcsNiBAQAogQ09ORklHX0FSQ0hfUjhBNzc5MD15CiBDT05GSUdfQVJDSF9SOEE3NzkxPXkKIENPTkZJR19BUkNIX1I4QTc3OTQ9eQotQ09ORklHX01BQ0hfS09FTFNDSD15CiBDT05GSUdfTUFDSF9MQUdFUj15CiBDT05GSUdfTUFDSF9NQVJaRU49eQogIyBDT05GSUdfU1dQX0VNVUxBVEUgaXMgbm90IHNldApAQCAtMTI2LDYgKzEyNSw3IEBACiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX1NPQ19TSDRfRlNJPXkKIENPTkZJR19TTkRfU09DX1JDQVI9eQorQ09ORklHX1NORF9TT0NfQUs0NjQyPXkKIENPTkZJR19TTkRfU09DX1dNODk3OD15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQpAQCAtMTQ2LDYgKzE0Niw4IEBACiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKIENPTkZJR19TSF9ETUFFPXkKK0NPTkZJR19SQ0FSX0FVRE1BQ19QUD15CitDT05GSUdfUkNBUl9ETUFDPXkKICMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1BXTT15CiBDT05GSUdfUFdNX1JFTkVTQVNfVFBVPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc29jZnBnYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NvY2ZwZ2FfZGVmY29uZmlnCmluZGV4IGQ3YTU4NTUuLmEyOTU2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc29jZnBnYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zb2NmcGdhX2RlZmNvbmZpZwpAQCAtMSw1ICsxLDYgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX0ZIQU5ETEU9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTExLDIzICsxMiwxNyBAQAogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19IT1RQTFVHPXkKICMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU09DRlBHQT15Ci1DT05GSUdfTUFDSF9TT0NGUEdBX0NZQ0xPTkU1PXkKIENPTkZJR19BUk1fVEhVTUJFRT15Ci0jIENPTkZJR19BUkNIX1ZFWFBSRVNTX0NPUlRFWF9BNV9BOV9FUlJBVEEgaXMgbm90IHNldAotIyBDT05GSUdfQ0FDSEVfTDJYMCBpcyBub3Qgc2V0Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgogQ09ORklHX0FFQUJJPXkKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiIKIENPTkZJR19WRlA9eQogQ09ORklHX05FT049eQogQ09ORklHX05FVD15CkBAIC00MSwzOCArMzYsMzAgQEAKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfSVBWNj15CitDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HPXkKK0NPTkZJR19WTEFOXzgwMjFRPXkKK0NPTkZJR19WTEFOXzgwMjFRX0dWUlA9eQogQ09ORklHX0NBTj15Ci1DT05GSUdfQ0FOX1JBVz15Ci1DT05GSUdfQ0FOX0JDTT15Ci1DT05GSUdfQ0FOX0dXPXkKLUNPTkZJR19DQU5fREVWPXkKLUNPTkZJR19DQU5fQ0FMQ19CSVRUSU1JTkc9eQogQ09ORklHX0NBTl9DX0NBTj15CiBDT05GSUdfQ0FOX0NfQ0FOX1BMQVRGT1JNPXkKIENPTkZJR19DQU5fREVCVUdfREVWSUNFUz15CiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX0RFVlRNUEZTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX1NSQU09eQogQ09ORklHX1NDU0k9eQogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NEPXkKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX1NUTU1BQ19FVEg9eQotQ09ORklHX01JQ1JFTF9QSFk9eQotIyBDT05GSUdfU1RNTUFDX1BIWV9JRF9aRVJPX1dPUktBUk9VTkQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX0VWREVWPXkKIENPTkZJR19EV01BQ19TT0NGUEdBPXkKLUNPTkZJR19QUFM9eQotQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORz15Ci1DT05GSUdfUFRQXzE1ODhfQ0xPQ0s9eQotQ09ORklHX1ZMQU5fODAyMVE9eQotQ09ORklHX1ZMQU5fODAyMVFfR1ZSUD15Ci1DT05GSUdfR0FSUD15Ci1DT05GSUdfSVBWNj15CitDT05GSUdfTUlDUkVMX1BIWT15CitDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fQU1CQUtNST15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgpAQCAtODEsNDUgKzY4LDQzIEBACiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgogQ09ORklHX1NFUklBTF84MjUwX0RXPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STT15CiBDT05GSUdfR1BJT0xJQj15CiBDT05GSUdfR1BJT19TWVNGUz15CiBDT05GSUdfR1BJT19EV0FQQj15Ci0jIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CitDT05GSUdfUE1CVVM9eQorQ09ORklHX1NFTlNPUlNfTFRDMjk3OD15CitDT05GSUdfU0VOU09SU19MVEMyOTc4X1JFR1VMQVRPUj15CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX0RXX1dBVENIRE9HPXkKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9EV0MyPXkKK0NPTkZJR19VU0JfRFdDMl9IT1NUPXkKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19EVz15CiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZX1VTRVIgaXMgbm90IHNldAotQ09ORklHX0ZIQU5ETEU9eQorQ09ORklHX0VYVDRfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX05URlNfRlM9eQogQ09ORklHX05URlNfUlc9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19KRkZTMl9GUz15CitDT05GSUdfQ09ORklHRlNfRlM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15CiBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUz15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfWFpfREVDPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19ERVNJR05XQVJFX0NPUkU9eQotQ09ORklHX0kyQ19ERVNJR05XQVJFX1BMQVRGT1JNPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfRFc9eQotQ09ORklHX1BNPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfRFdDMj15Ci1DT05GSUdfVVNCX0RXQzJfSE9TVD15Ci1DT05GSUdfVVNCX0RXQzJfUExBVEZPUk09eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy90ZWdyYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3RlZ3JhX2RlZmNvbmZpZwppbmRleCA4ODhmYzE1Li40MDc1MGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3RlZ3JhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3RlZ3JhX2RlZmNvbmZpZwpAQCAtOTcsMTAgKzk3LDggQEAKIENPTkZJR19BUERTOTgwMkFMUz15CiBDT05GSUdfSVNMMjkwMDM9eQogQ09ORklHX0VFUFJPTV9BVDI0PXkKLUNPTkZJR19TQ1NJPXkKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19CTEtfREVWX1NSPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogQ09ORklHX1NBVEFfQUhDST15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmgKaW5kZXggOTI3OTNiYS4uZDRlYmY1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaF90aW1lci5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaApAQCAtNzgsNiArNzgsMTUgQEAKIAlyZXR1cm4gdmFsOwogfQogCitzdGF0aWMgaW5saW5lIHU2NCBhcmNoX2NvdW50ZXJfZ2V0X2NudHBjdCh2b2lkKQoreworCXU2NCBjdmFsOworCisJaXNiKCk7CisJYXNtIHZvbGF0aWxlKCJtcnJjIHAxNSwgMCwgJVEwLCAlUjAsIGMxNCIgOiAiPXIiIChjdmFsKSk7CisJcmV0dXJuIGN2YWw7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTY0IGFyY2hfY291bnRlcl9nZXRfY250dmN0KHZvaWQpCiB7CiAJdTY0IGN2YWw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9maXJtd2FyZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZmlybXdhcmUuaAppbmRleCAyYzlmMTBkLi44OWFlZmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAkvKgogCSAqIEVudGVycyBDUFUgaWRsZSBtb2RlCiAJICovCi0JaW50ICgqZG9faWRsZSkodm9pZCk7CisJaW50ICgqZG9faWRsZSkodW5zaWduZWQgbG9uZyBtb2RlKTsKIAkvKgogCSAqIFNldHMgYm9vdCBhZGRyZXNzIG9mIHNwZWNpZmllZCBwaHlzaWNhbCBDUFUKIAkgKi8KQEAgLTQxLDYgKzQxLDE0IEBACiAJICogSW5pdGlhbGl6ZXMgTDIgY2FjaGUKIAkgKi8KIAlpbnQgKCpsMngwX2luaXQpKHZvaWQpOworCS8qCisJICogRW50ZXIgc3lzdGVtLXdpZGUgc3VzcGVuZC4KKwkgKi8KKwlpbnQgKCpzdXNwZW5kKSh2b2lkKTsKKwkvKgorCSAqIFJlc3RvcmUgc3RhdGUgb2YgcHJpdmlsZWdlZCBoYXJkd2FyZSBhZnRlciBzeXN0ZW0td2lkZSBzdXNwZW5kLgorCSAqLworCWludCAoKnJlc3VtZSkodm9pZCk7CiB9OwogCiAvKiBHbG9iYWwgcG9pbnRlciBmb3IgY3VycmVudCBmaXJtd2FyZV9vcHMgc3RydWN0dXJlLCBjYW4ndCBiZSBOVUxMLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMTgwNTY3NC4uZGI1OGRlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCkBAIC00NywxMyArNDcsMTMgQEAKICAqIEdlbmVyaWMgSU8gcmVhZC93cml0ZS4gIFRoZXNlIHBlcmZvcm0gbmF0aXZlLWVuZGlhbiBhY2Nlc3Nlcy4gIE5vdGUKICAqIHRoYXQgc29tZSBhcmNoaXRlY3R1cmVzIHdpbGwgd2FudCB0byByZS1kZWZpbmUgX19yYXdfe3JlYWQsd3JpdGV9dy4KICAqLwotZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzYih2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBieXRlbGVuKTsKLWV4dGVybiB2b2lkIF9fcmF3X3dyaXRlc3codm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7Ci1leHRlcm4gdm9pZCBfX3Jhd193cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwordm9pZCBfX3Jhd193cml0ZXNiKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGJ5dGVsZW4pOwordm9pZCBfX3Jhd193cml0ZXN3KHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOwordm9pZCBfX3Jhd193cml0ZXNsKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwogCi1leHRlcm4gdm9pZCBfX3Jhd19yZWFkc2IoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgYnl0ZWxlbik7Ci1leHRlcm4gdm9pZCBfX3Jhd19yZWFkc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7Ci1leHRlcm4gdm9pZCBfX3Jhd19yZWFkc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Cit2b2lkIF9fcmF3X3JlYWRzYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBieXRlbGVuKTsKK3ZvaWQgX19yYXdfcmVhZHN3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOwordm9pZCBfX3Jhd19yZWFkc2woY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CiAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAvKgpAQCAtNjksNiArNjksNyBAQAogICogd3JpdGViYWNrIGFkZHJlc3NpbmcgbW9kZXMgYXMgdGhlc2UgaW5jdXIgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQogICogb3ZlcmhlYWQgKHRoZSBhZGRyZXNzIGdlbmVyYXRpb24gbXVzdCBiZSBlbXVsYXRlZCBpbiBzb2Z0d2FyZSkuCiAgKi8KKyNkZWZpbmUgX19yYXdfd3JpdGV3IF9fcmF3X3dyaXRldwogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRldyh1MTYgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJYXNtIHZvbGF0aWxlKCJzdHJoICUxLCAlMCIKQEAgLTc2LDYgKzc3LDcgQEAKIAkJICAgICA6ICJyIiAodmFsKSk7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZHcgX19yYXdfcmVhZHcKIHN0YXRpYyBpbmxpbmUgdTE2IF9fcmF3X3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1MTYgdmFsOwpAQCAtODYsNiArODgsNyBAQAogfQogI2VuZGlmCiAKKyNkZWZpbmUgX19yYXdfd3JpdGViIF9fcmF3X3dyaXRlYgogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1OCB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlhc20gdm9sYXRpbGUoInN0cmIgJTEsICUwIgpAQCAtOTMsNiArOTYsNyBAQAogCQkgICAgIDogInIiICh2YWwpKTsKIH0KIAorI2RlZmluZSBfX3Jhd193cml0ZWwgX19yYXdfd3JpdGVsCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVsKHUzMiB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlhc20gdm9sYXRpbGUoInN0ciAlMSwgJTAiCkBAIC0xMDAsNiArMTA0LDcgQEAKIAkJICAgICA6ICJyIiAodmFsKSk7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZGIgX19yYXdfcmVhZGIKIHN0YXRpYyBpbmxpbmUgdTggX19yYXdfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXU4IHZhbDsKQEAgLTEwOSw2ICsxMTQsNyBAQAogCXJldHVybiB2YWw7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZGwgX19yYXdfcmVhZGwKIHN0YXRpYyBpbmxpbmUgdTMyIF9fcmF3X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1MzIgdmFsOwpAQCAtMjY3LDIwICsyNzMsNiBAQAogI2RlZmluZSBpbnNsKHAsZCxsKQkJX19yYXdfcmVhZHNsKF9faW8ocCksZCxsKQogI2VuZGlmCiAKLSNkZWZpbmUgb3V0Yl9wKHZhbCxwb3J0KQlvdXRiKCh2YWwpLChwb3J0KSkKLSNkZWZpbmUgb3V0d19wKHZhbCxwb3J0KQlvdXR3KCh2YWwpLChwb3J0KSkKLSNkZWZpbmUgb3V0bF9wKHZhbCxwb3J0KQlvdXRsKCh2YWwpLChwb3J0KSkKLSNkZWZpbmUgaW5iX3AocG9ydCkJCWluYigocG9ydCkpCi0jZGVmaW5lIGlud19wKHBvcnQpCQlpbncoKHBvcnQpKQotI2RlZmluZSBpbmxfcChwb3J0KQkJaW5sKChwb3J0KSkKLQotI2RlZmluZSBvdXRzYl9wKHBvcnQsZnJvbSxsZW4pCW91dHNiKHBvcnQsZnJvbSxsZW4pCi0jZGVmaW5lIG91dHN3X3AocG9ydCxmcm9tLGxlbikJb3V0c3cocG9ydCxmcm9tLGxlbikKLSNkZWZpbmUgb3V0c2xfcChwb3J0LGZyb20sbGVuKQlvdXRzbChwb3J0LGZyb20sbGVuKQotI2RlZmluZSBpbnNiX3AocG9ydCx0byxsZW4pCWluc2IocG9ydCx0byxsZW4pCi0jZGVmaW5lIGluc3dfcChwb3J0LHRvLGxlbikJaW5zdyhwb3J0LHRvLGxlbikKLSNkZWZpbmUgaW5zbF9wKHBvcnQsdG8sbGVuKQlpbnNsKHBvcnQsdG8sbGVuKQotCiAvKgogICogU3RyaW5nIHZlcnNpb24gb2YgSU8gbWVtb3J5IGFjY2VzcyBvcHM6CiAgKi8KQEAgLTM0Nyw0MCArMzM5LDQyIEBACiAjZGVmaW5lIGlvdW5tYXAJCQkJX19hcm1faW91bm1hcAogCiAvKgotICogaW97cmVhZCx3cml0ZX17OCwxNiwzMn0gbWFjcm9zCisgKiBpb3tyZWFkLHdyaXRlfXsxNiwzMn1iZSgpIG1hY3JvcwogICovCi0jaWZuZGVmIGlvcmVhZDgKLSNkZWZpbmUgaW9yZWFkOChwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gX19yYXdfcmVhZGIocCk7IF9faW9ybWIoKTsgX192OyB9KQotI2RlZmluZSBpb3JlYWQxNihwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KV9fcmF3X3JlYWR3KHApKTsgX19pb3JtYigpOyBfX3Y7IH0pCi0jZGVmaW5lIGlvcmVhZDMyKHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpX19yYXdfcmVhZGwocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKyNkZWZpbmUgaW9yZWFkMTZiZShwKQkJKHsgX191MTYgX192ID0gYmUxNl90b19jcHUoKF9fZm9yY2UgX19iZTE2KV9fcmF3X3JlYWR3KHApKTsgX19pb3JtYigpOyBfX3Y7IH0pCisjZGVmaW5lIGlvcmVhZDMyYmUocCkJCSh7IF9fdTMyIF9fdiA9IGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMilfX3Jhd19yZWFkbChwKSk7IF9faW9ybWIoKTsgX192OyB9KQogCi0jZGVmaW5lIGlvcmVhZDE2YmUocCkJKHsgdW5zaWduZWQgaW50IF9fdiA9IGJlMTZfdG9fY3B1KChfX2ZvcmNlIF9fYmUxNilfX3Jhd19yZWFkdyhwKSk7IF9faW9ybWIoKTsgX192OyB9KQotI2RlZmluZSBpb3JlYWQzMmJlKHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpX19yYXdfcmVhZGwocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKyNkZWZpbmUgaW93cml0ZTE2YmUodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNiljcHVfdG9fYmUxNih2KSwgcCk7IH0pCisjZGVmaW5lIGlvd3JpdGUzMmJlKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpY3B1X3RvX2JlMzIodiksIHApOyB9KQogCi0jZGVmaW5lIGlvd3JpdGU4KHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWIodiwgcCk7IH0pCi0jZGVmaW5lIGlvd3JpdGUxNih2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGV3KChfX2ZvcmNlIF9fdTE2KWNwdV90b19sZTE2KHYpLCBwKTsgfSkKLSNkZWZpbmUgaW93cml0ZTMyKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpY3B1X3RvX2xlMzIodiksIHApOyB9KQotCi0jZGVmaW5lIGlvd3JpdGUxNmJlKHYscCkgKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZXcoKF9fZm9yY2UgX191MTYpY3B1X3RvX2JlMTYodiksIHApOyB9KQotI2RlZmluZSBpb3dyaXRlMzJiZSh2LHApICh7IF9faW93bWIoKTsgX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKWNwdV90b19iZTMyKHYpLCBwKTsgfSkKLQotI2RlZmluZSBpb3JlYWQ4X3JlcChwLGQsYykJX19yYXdfcmVhZHNiKHAsZCxjKQotI2RlZmluZSBpb3JlYWQxNl9yZXAocCxkLGMpCV9fcmF3X3JlYWRzdyhwLGQsYykKLSNkZWZpbmUgaW9yZWFkMzJfcmVwKHAsZCxjKQlfX3Jhd19yZWFkc2wocCxkLGMpCi0KLSNkZWZpbmUgaW93cml0ZThfcmVwKHAscyxjKQlfX3Jhd193cml0ZXNiKHAscyxjKQotI2RlZmluZSBpb3dyaXRlMTZfcmVwKHAscyxjKQlfX3Jhd193cml0ZXN3KHAscyxjKQotI2RlZmluZSBpb3dyaXRlMzJfcmVwKHAscyxjKQlfX3Jhd193cml0ZXNsKHAscyxjKQotCisjaWZuZGVmIGlvcG9ydF9tYXAKKyNkZWZpbmUgaW9wb3J0X21hcCBpb3BvcnRfbWFwCiBleHRlcm4gdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKTsKKyNlbmRpZgorI2lmbmRlZiBpb3BvcnRfdW5tYXAKKyNkZWZpbmUgaW9wb3J0X3VubWFwIGlvcG9ydF91bm1hcAogZXh0ZXJuIHZvaWQgaW9wb3J0X3VubWFwKHZvaWQgX19pb21lbSAqYWRkcik7CiAjZW5kaWYKIAogc3RydWN0IHBjaV9kZXY7CiAKKyNkZWZpbmUgcGNpX2lvdW5tYXAgcGNpX2lvdW5tYXAKIGV4dGVybiB2b2lkIHBjaV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcik7CiAKIC8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvLmg+CisKKy8qCiAgKiBjYW4gdGhlIGhhcmR3YXJlIG1hcCB0aGlzIGludG8gb25lIHNlZ21lbnQgb3Igbm90LCBnaXZlbiBubyBvdGhlcgogICogY29uc3RyYWludHMuCiAgKi8KQEAgLTQwMiwxNyArMzk2LDYgQEAKICNlbmRpZgogCiAvKgotICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQotICogYWNjZXNzCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQotCi0vKgotICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgotICovCi0jZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCi0KLS8qCiAgKiBSZWdpc3RlciBJU0EgbWVtb3J5IGFuZCBwb3J0IGxvY2F0aW9ucyBmb3IgZ2xpYmMgaW9wbC9pbmIvb3V0YgogICogZW11bGF0aW9uLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9wY2kuaAppbmRleCA3ZmM0Mjc4Li44MjkyYjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvcGNpLmgKQEAgLTIyLDYgKzIyLDkgQEAKICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKIAlpbnQJCWRvbWFpbjsKICNlbmRpZgorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJc3RydWN0IG1zaV9jb250cm9sbGVyICptc2lfY3RybDsKKyNlbmRpZgogCXN0cnVjdCBwY2lfb3BzCSpvcHM7CiAJaW50CQlucl9jb250cm9sbGVyczsKIAl2b2lkCQkqKnByaXZhdGVfZGF0YTsKQEAgLTM2LDggKzM5LDYgQEAKIAkJCQkJICByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCiAJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCiAJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKTsKLQl2b2lkCQkoKmFkZF9idXMpKHN0cnVjdCBwY2lfYnVzICpidXMpOwotCXZvaWQJCSgqcmVtb3ZlX2J1cykoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiB9OwogCiAvKgpAQCAtNDcsNiArNDgsOSBAQAogI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUwogCWludAkJZG9tYWluOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKm1zaV9jdHJsOworI2VuZGlmCiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCWludAkJYnVzbnI7CQkvKiBwcmltYXJ5IGJ1cyBudW1iZXIJCQkqLwogCXU2NAkJbWVtX29mZnNldDsJLyogYnVzLT5jcHUgbWVtb3J5IG1hcHBpbmcgb2Zmc2V0CSovCkBAIC02NSw4ICs2OSw2IEBACiAJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAogCQkJCQkgIHJlc291cmNlX3NpemVfdCBzaXplLAogCQkJCQkgIHJlc291cmNlX3NpemVfdCBhbGlnbik7Ci0Jdm9pZAkJKCphZGRfYnVzKShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKLQl2b2lkCQkoKnJlbW92ZV9idXMpKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCXZvaWQJCSpwcml2YXRlX2RhdGE7CS8qIHBsYXRmb3JtIGNvbnRyb2xsZXIgcHJpdmF0ZSBkYXRhCSovCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCmluZGV4IGU3MzEwMTguLjE4NGRlZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC0yNzQsMTEgKzI3NCwxMyBAQAogICogdHJhbnNsYXRpb24gZm9yIHRyYW5zbGF0aW5nIERNQSBhZGRyZXNzZXMuICBVc2UgdGhlIGRyaXZlcgogICogRE1BIHN1cHBvcnQgLSBzZWUgZG1hLW1hcHBpbmcuaC4KICAqLworI2RlZmluZSB2aXJ0X3RvX3BoeXMgdmlydF90b19waHlzCiBzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHZpcnRfdG9fcGh5cyhjb25zdCB2b2xhdGlsZSB2b2lkICp4KQogewogCXJldHVybiBfX3ZpcnRfdG9fcGh5cygodW5zaWduZWQgbG9uZykoeCkpOwogfQogCisjZGVmaW5lIHBoeXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKIHN0YXRpYyBpbmxpbmUgdm9pZCAqcGh5c190b192aXJ0KHBoeXNfYWRkcl90IHgpCiB7CiAJcmV0dXJuICh2b2lkICopX19waHlzX3RvX3ZpcnQoeCk7CkBAIC0zMjIsMTEgKzMyNCwxMyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVklSVF9UT19CVVMKKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19idXMKIHN0YXRpYyBpbmxpbmUgX19kZXByZWNhdGVkIHVuc2lnbmVkIGxvbmcgdmlydF90b19idXModm9pZCAqeCkKIHsKIAlyZXR1cm4gX192aXJ0X3RvX2J1cygodW5zaWduZWQgbG9uZyl4KTsKIH0KIAorI2RlZmluZSBidXNfdG9fdmlydCBidXNfdG9fdmlydAogc3RhdGljIGlubGluZSBfX2RlcHJlY2F0ZWQgdm9pZCAqYnVzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyB4KQogewogCXJldHVybiAodm9pZCAqKV9fYnVzX3RvX3ZpcnQoeCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggYzNhODM2OS4uZDljZjEzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMTIsNyArMTIsNyBAQAogI2lmbmRlZiBfX0FSTV9QRVJGX0VWRU5UX0hfXwogI2RlZmluZSBfX0FSTV9QRVJGX0VWRU5UX0hfXwogCi0jaWZkZWYgQ09ORklHX0hXX1BFUkZfRVZFTlRTCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiBzdHJ1Y3QgcHRfcmVnczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwZXJmX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcG11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaAppbmRleCAwYjY0OGM1Li5iMTU5NmJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaApAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAorI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisKIC8qCiAgKiBzdHJ1Y3QgYXJtX3BtdV9wbGF0ZGF0YSAtIEFSTSBQTVUgcGxhdGZvcm0gZGF0YQogICoKQEAgLTY2LDE5ICs2OCwyNSBAQAogCS8qCiAJICogVGhlIGV2ZW50cyB0aGF0IGFyZSBhY3RpdmUgb24gdGhlIFBNVSBmb3IgdGhlIGdpdmVuIGluZGV4LgogCSAqLwotCXN0cnVjdCBwZXJmX2V2ZW50CSoqZXZlbnRzOworCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudHNbQVJNUE1VX01BWF9IV0VWRU5UU107CiAKIAkvKgogCSAqIEEgMSBiaXQgZm9yIGFuIGluZGV4IGluZGljYXRlcyB0aGF0IHRoZSBjb3VudGVyIGlzIGJlaW5nIHVzZWQgZm9yCiAJICogYW4gZXZlbnQuIEEgMCBtZWFucyB0aGF0IHRoZSBjb3VudGVyIGNhbiBiZSB1c2VkLgogCSAqLwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICp1c2VkX21hc2s7CisJREVDTEFSRV9CSVRNQVAodXNlZF9tYXNrLCBBUk1QTVVfTUFYX0hXRVZFTlRTKTsKIAogCS8qCiAJICogSGFyZHdhcmUgbG9jayB0byBzZXJpYWxpemUgYWNjZXNzZXMgdG8gUE1VIHJlZ2lzdGVycy4gTmVlZGVkIGZvciB0aGUKIAkgKiByZWFkL21vZGlmeS93cml0ZSBzZXF1ZW5jZXMuCiAJICovCiAJcmF3X3NwaW5sb2NrX3QJCXBtdV9sb2NrOworCisJLyoKKwkgKiBXaGVuIHVzaW5nIHBlcmNwdSBJUlFzLCB3ZSBuZWVkIGEgcGVyY3B1IGRldl9pZC4gUGxhY2UgaXQgaGVyZSBhcyB3ZQorCSAqIGFscmVhZHkgaGF2ZSB0byBhbGxvY2F0ZSB0aGlzIHN0cnVjdCBwZXIgY3B1LgorCSAqLworCXN0cnVjdCBhcm1fcG11CQkqcGVyY3B1X3BtdTsKIH07CiAKIHN0cnVjdCBhcm1fcG11IHsKQEAgLTEwNyw3ICsxMTUsOCBAQAogCXN0cnVjdCBtdXRleAlyZXNlcnZlX211dGV4OwogCXU2NAkJbWF4X3BlcmlvZDsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwbGF0X2RldmljZTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cwkqKCpnZXRfaHdfZXZlbnRzKSh2b2lkKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cwlfX3BlcmNwdSAqaHdfZXZlbnRzOworCXN0cnVjdCBub3RpZmllcl9ibG9jawlob3RwbHVnX25iOwogfTsKIAogI2RlZmluZSB0b19hcm1fcG11KHApIChjb250YWluZXJfb2YocCwgc3RydWN0IGFybV9wbXUsIHBtdSkpCkBAIC0xMjcsNiArMTM2LDI3IEBACiAJCQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSwKIAkJICAgICB1MzIgcmF3X2V2ZW50X21hc2spOwogCitzdHJ1Y3QgcG11X3Byb2JlX2luZm8geworCXVuc2lnbmVkIGludCBjcHVpZDsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpbnQgKCppbml0KShzdHJ1Y3QgYXJtX3BtdSAqKTsKK307CisKKyNkZWZpbmUgUE1VX1BST0JFKF9jcHVpZCwgX21hc2ssIF9mbikJXAorewkJCQkJXAorCS5jcHVpZCA9IChfY3B1aWQpLAkJXAorCS5tYXNrID0gKF9tYXNrKSwJCVwKKwkuaW5pdCA9IChfZm4pLAkJCVwKK30KKworI2RlZmluZSBBUk1fUE1VX1BST0JFKF9jcHVpZCwgX2ZuKSBcCisJUE1VX1BST0JFKF9jcHVpZCwgQVJNX0NQVV9QQVJUX01BU0ssIF9mbikKKworI2RlZmluZSBBUk1fUE1VX1hTQ0FMRV9NQVNLCSgoMHhmZiA8PCAyNCkgfCBBUk1fQ1BVX1hTQ0FMRV9BUkNIX01BU0spCisKKyNkZWZpbmUgWFNDQUxFX1BNVV9QUk9CRShfdmVyc2lvbiwgX2ZuKSBcCisJUE1VX1BST0JFKEFSTV9DUFVfSU1QX0lOVEVMIDw8IDI0IHwgX3ZlcnNpb24sIEFSTV9QTVVfWFNDQUxFX01BU0ssIF9mbikKKwogI2VuZGlmIC8qIENPTkZJR19IV19QRVJGX0VWRU5UUyAqLwogCiAjZW5kaWYgLyogX19BUk1fUE1VX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggZmM0NGQzNy4uY2U3M2FiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC00NCwxNiArNDQsNiBAQAogCV9fdTMyCWV4dHJhWzJdOwkJLyogWHNjYWxlICdhY2MnIHJlZ2lzdGVyLCBldGMgKi8KIH07CiAKLXN0cnVjdCBhcm1fcmVzdGFydF9ibG9jayB7Ci0JdW5pb24gewotCQkvKiBGb3IgdXNlciBjYWNoZSBmbHVzaGluZyAqLwotCQlzdHJ1Y3QgewotCQkJdW5zaWduZWQgbG9uZyBzdGFydDsKLQkJCXVuc2lnbmVkIGxvbmcgZW5kOwotCQl9IGNhY2hlOwotCX07Ci19OwotCiAvKgogICogbG93IGxldmVsIHRhc2sgZGF0YSB0aGF0IGVudHJ5LlMgbmVlZHMgaW1tZWRpYXRlIGFjY2VzcyB0by4KICAqIF9fc3dpdGNoX3RvKCkgYXNzdW1lcyBjcHVfY29udGV4dCBmb2xsb3dzIGltbWVkaWF0ZWx5IGFmdGVyIGNwdV9kb21haW4uCkBAIC03OSw3ICs2OSw2IEBACiAJdW5zaWduZWQgbG9uZwkJdGh1bWJlZV9zdGF0ZTsJLyogVGh1bWJFRSBIYW5kbGVyIEJhc2UgcmVnaXN0ZXIgKi8KICNlbmRpZgogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrCXJlc3RhcnRfYmxvY2s7Ci0Jc3RydWN0IGFybV9yZXN0YXJ0X2Jsb2NrCWFybV9yZXN0YXJ0X2Jsb2NrOwogfTsKIAogI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL2FzbTkyNjAuUyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvYXNtOTI2MC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MmY4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL2FzbTkyNjAuUwpAQCAtMCwwICsxLDI5IEBACisvKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqICBNb2RpZmllZCBmb3IgQVNNOTI2MCBieSBPbGVrc2lqIFJlbWVwbCA8bGludXhAcmVtcGVsLXByaXZhdC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2LCB0bXAKKwkJbGRyCVxycCwgPSBDT05GSUdfREVCVUdfVUFSVF9QSFlTCisJCWxkcglccnYsID0gQ09ORklHX0RFQlVHX1VBUlRfVklSVAorCQkuZW5kbQorCisJCS5tYWNybwl3YWl0dWFydCxyZCxyeAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHIJXHJkLCBbXHJ4LCAjMHg1MF0JQCBUWERBVEEKKwkJLmVuZG0KKworCQkubWFjcm8JYnVzeXVhcnQscmQscngKKzEwMDI6CQlsZHIJXHJkLCBbXHJ4LCAjMHg2MF0JQCBTVEFUCisJCXRzdAlccmQsICMxIDw8IDI3CQlAIFRYRU1QVFkKKwkJYmVxCTEwMDJiCQkJQCB3YWl0IHVudGlsIHRyYW5zbWl0IGRvbmUKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvcmVuZXNhcy1zY2lmLlMgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3JlbmVzYXMtc2NpZi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODIwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3JlbmVzYXMtc2NpZi5TCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBSZW5lc2FzIFNDSUYoQSkgZGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogQmFzZWQgb24gcjhhNzc5MC5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjZGVmaW5lIFNDSUZfUEhZUwlDT05GSUdfREVCVUdfVUFSVF9QSFlTCisjZGVmaW5lIFNDSUZfVklSVAkoKFNDSUZfUEhZUyAmIDB4MDBmZmZmZmYpIHwgMHhmZDAwMDAwMCkKKworI2lmIENPTkZJR19ERUJVR19VQVJUX1BIWVMgPCAweGU2ZTAwMDAwCisvKiBTQ0lGQSAqLworI2RlZmluZSBGVERSCQkweDIwCisjZGVmaW5lIEZTUgkJMHgxNAorI2Vsc2UKKy8qIFNDSUYgKi8KKyNkZWZpbmUgRlREUgkJMHgwYworI2RlZmluZSBGU1IJCTB4MTAKKyNlbmRpZgorCisjZGVmaW5lIFRERkUJKDEgPDwgNSkKKyNkZWZpbmUgVEVORAkoMSA8PCA2KQorCisJLm1hY3JvCWFkZHJ1YXJ0LCBycCwgcnYsIHRtcAorCWxkcglccnAsID1TQ0lGX1BIWVMKKwlsZHIJXHJ2LCA9U0NJRl9WSVJUCisJLmVuZG0KKworCS5tYWNybwl3YWl0dWFydCwgcmQsIHJ4CisxMDAxOglsZHJoCVxyZCwgW1xyeCwgI0ZTUl0KKwl0c3QJXHJkLCAjVERGRQorCWJlcQkxMDAxYgorCS5lbmRtCisKKwkubWFjcm8Jc2VuZHVhcnQsIHJkLCByeAorCXN0cmIJXHJkLCBbXHJ4LCAjRlREUl0KKwlsZHJoCVxyZCwgW1xyeCwgI0ZTUl0KKwliaWMJXHJkLCBccmQsICNURU5ECisJc3RyaAlccmQsIFtccngsICNGU1JdCisJLmVuZG0KKworCS5tYWNybwlidXN5dWFydCwgcmQsIHJ4CisxMDAxOglsZHJoCVxyZCwgW1xyeCwgI0ZTUl0KKwl0c3QJXHJkLCAjVEVORAorCWJlcQkxMDAxYgorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvc2ExMTAwLlMKc2ltaWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKcmVuYW1lIHRvIGFyY2gvYXJtL2luY2x1ZGUvZGVidWcvc2ExMTAwLlMKaW5kZXggNTMwNzcyZC4uYTBhZTRmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9zYTExMDAuUwpAQCAtMSw0ICsxLDQgQEAKLS8qIGFyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisvKiBhcmNoL2FybS9pbmNsdWRlL2RlYnVnL3NhMTEwMC5TCiAgKgogICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCiAgKgpAQCAtMTAsNyArMTAsMTMgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICovCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIFVUQ1IzCQkweDBjCisjZGVmaW5lIFVURFIJCTB4MTQKKyNkZWZpbmUgVVRTUjEJCTB4MjAKKyNkZWZpbmUgVVRDUjNfVFhFCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgRW5hYmxlICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVVFNSMV9UQlkJMHgwMDAwMDAwMQkvKiBUcmFuc21pdHRlciBCdXNZIChyZWFkKSAgICAgICAgICovCisjZGVmaW5lIFVUU1IxX1RORgkweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEZJRk8gTm90IEZ1bGwgKHJlYWQpICAgKi8KIAogCQkubWFjcm8JYWRkcnVhcnQsIHJwLCBydiwgdG1wCiAJCW1yYwlwMTUsIDAsIFxycCwgYzEsIGMwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMzhkZGQ5Zi4uOGRjYmVkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtODIsNyArODIsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9QSjQpCQkrPSBwajQtY3AwLm8KIG9iai0kKENPTkZJR19DUFVfUEo0QikJCSs9IHBqNC1jcDAubwogb2JqLSQoQ09ORklHX0lXTU1YVCkJCSs9IGl3bW14dC5vCi1vYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfcmVncy5vCitvYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfcmVncy5vIHBlcmZfY2FsbGNoYWluLm8KIG9iai0kKENPTkZJR19IV19QRVJGX0VWRU5UUykJKz0gcGVyZl9ldmVudC5vIHBlcmZfZXZlbnRfY3B1Lm8KIEFGTEFHU19pd21teHQubwkJCTo9IC1XYSwtbWNwdT1pd21teHQKIG9iai0kKENPTkZJR19BUk1fQ1BVX1RPUE9MT0dZKSAgKz0gdG9wb2xvZ3kubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCmluZGV4IDE3YTI2YzEuLmRhYWZmNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKQEAgLTE4LDYgKzE4LDE1IEBACiAKIHN0YXRpYyBpbnQgZGVidWdfcGNpOwogCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKK3N0cnVjdCBtc2lfY29udHJvbGxlciAqcGNpYmlvc19tc2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5c2RhdGEgPSBkZXYtPmJ1cy0+c3lzZGF0YTsKKworCXJldHVybiBzeXNkYXRhLT5tc2lfY3RybDsKK30KKyNlbmRpZgorCiAvKgogICogV2UgY2FuJ3QgdXNlIHBjaV9nZXRfZGV2aWNlKCkgaGVyZSBzaW5jZSB3ZSBhcmUKICAqIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgpAQCAtMzYwLDIwICszNjksNiBAQAogfQogRVhQT1JUX1NZTUJPTChwY2liaW9zX2ZpeHVwX2J1cyk7CiAKLXZvaWQgcGNpYmlvc19hZGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzID0gYnVzLT5zeXNkYXRhOwotCWlmIChzeXMtPmFkZF9idXMpCi0JCXN5cy0+YWRkX2J1cyhidXMpOwotfQotCi12b2lkIHBjaWJpb3NfcmVtb3ZlX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyA9IGJ1cy0+c3lzZGF0YTsKLQlpZiAoc3lzLT5yZW1vdmVfYnVzKQotCQlzeXMtPnJlbW92ZV9idXMoYnVzKTsKLX0KLQogLyoKICAqIFN3aXp6bGUgdGhlIGRldmljZSBwaW4gZWFjaCB0aW1lIHdlIGNyb3NzIGEgYnJpZGdlLiAgSWYgYSBwbGF0Zm9ybSBkb2VzCiAgKiBub3QgcHJvdmlkZSBhIHN3aXp6bGUgZnVuY3Rpb24sIHdlIHBlcmZvcm0gdGhlIHN0YW5kYXJkIFBDSSBzd2l6emxpbmcuCkBAIC00NzEsMTIgKzQ2NiwxMyBAQAogI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUwogCQlzeXMtPmRvbWFpbiAgPSBody0+ZG9tYWluOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwkJc3lzLT5tc2lfY3RybCA9IGh3LT5tc2lfY3RybDsKKyNlbmRpZgogCQlzeXMtPmJ1c25yICAgPSBidXNucjsKIAkJc3lzLT5zd2l6emxlID0gaHctPnN3aXp6bGU7CiAJCXN5cy0+bWFwX2lycSA9IGh3LT5tYXBfaXJxOwogCQlzeXMtPmFsaWduX3Jlc291cmNlID0gaHctPmFsaWduX3Jlc291cmNlOwotCQlzeXMtPmFkZF9idXMgPSBody0+YWRkX2J1czsKLQkJc3lzLT5yZW1vdmVfYnVzID0gaHctPnJlbW92ZV9idXM7CiAJCUlOSVRfTElTVF9IRUFEKCZzeXMtPnJlc291cmNlcyk7CiAKIAkJaWYgKGh3LT5wcml2YXRlX2RhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMDJhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIEFSTSBjYWxsY2hhaW4gc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBwaWNvQ2hpcCBEZXNpZ25zLCBMdGQuLCBKYW1pZSBJbGVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQVJNIEx0ZC4sIFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiB0aGUgQVJNIE9Qcm9maWxlIGJhY2t0cmFjZSBjb2RlLgorICovCisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CisKKy8qCisgKiBUaGUgcmVnaXN0ZXJzIHdlJ3JlIGludGVyZXN0ZWQgaW4gYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlCisgKiBsZW5ndGggc2F2ZWQgcmVnaXN0ZXIgc3RydWN0dXJlLiBUaGUgZnAgcG9pbnRzIGF0IHRoZSBlbmQgb2YgdGhpcworICogc3RydWN0dXJlIHNvIHRoZSBhZGRyZXNzIG9mIHRoaXMgc3RydWN0IGlzOgorICogKHN0cnVjdCBmcmFtZV90YWlsICopKHh4eC0+ZnApLTEKKyAqCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIHRoZSBBUk0gT1Byb2ZpbGUgc3VwcG9ydC4KKyAqLworc3RydWN0IGZyYW1lX3RhaWwgeworCXN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqZnA7CisJdW5zaWduZWQgbG9uZyBzcDsKKwl1bnNpZ25lZCBsb25nIGxyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIEdldCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIGEgc2luZ2xlIHN0YWNrZnJhbWUgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlCisgKiBuZXh0IGZyYW1lIHRhaWwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKgordXNlcl9iYWNrdHJhY2Uoc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICp0YWlsLAorCSAgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBmcmFtZV90YWlsIGJ1ZnRhaWw7CisJdW5zaWduZWQgbG9uZyBlcnI7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdGFpbCwgc2l6ZW9mKGJ1ZnRhaWwpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCWVyciA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoJmJ1ZnRhaWwsIHRhaWwsIHNpemVvZihidWZ0YWlsKSk7CisJcGFnZWZhdWx0X2VuYWJsZSgpOworCisJaWYgKGVycikKKwkJcmV0dXJuIE5VTEw7CisKKwlwZXJmX2NhbGxjaGFpbl9zdG9yZShlbnRyeSwgYnVmdGFpbC5scik7CisKKwkvKgorCSAqIEZyYW1lIHBvaW50ZXJzIHNob3VsZCBzdHJpY3RseSBwcm9ncmVzcyBiYWNrIHVwIHRoZSBzdGFjaworCSAqICh0b3dhcmRzIGhpZ2hlciBhZGRyZXNzZXMpLgorCSAqLworCWlmICh0YWlsICsgMSA+PSBidWZ0YWlsLmZwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBidWZ0YWlsLmZwIC0gMTsKK30KKwordm9pZAorcGVyZl9jYWxsY2hhaW5fdXNlcihzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKnRhaWw7CisKKwlpZiAocGVyZl9ndWVzdF9jYnMgJiYgcGVyZl9ndWVzdF9jYnMtPmlzX2luX2d1ZXN0KCkpIHsKKwkJLyogV2UgZG9uJ3Qgc3VwcG9ydCBndWVzdCBvcyBjYWxsY2hhaW4gbm93ICovCisJCXJldHVybjsKKwl9CisKKwlwZXJmX2NhbGxjaGFpbl9zdG9yZShlbnRyeSwgcmVncy0+QVJNX3BjKTsKKworCWlmICghY3VycmVudC0+bW0pCisJCXJldHVybjsKKworCXRhaWwgPSAoc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICopcmVncy0+QVJNX2ZwIC0gMTsKKworCXdoaWxlICgoZW50cnktPm5yIDwgUEVSRl9NQVhfU1RBQ0tfREVQVEgpICYmCisJICAgICAgIHRhaWwgJiYgISgodW5zaWduZWQgbG9uZyl0YWlsICYgMHgzKSkKKwkJdGFpbCA9IHVzZXJfYmFja3RyYWNlKHRhaWwsIGVudHJ5KTsKK30KKworLyoKKyAqIEdldHMgY2FsbGVkIGJ5IHdhbGtfc3RhY2tmcmFtZSgpIGZvciBldmVyeSBzdGFja2ZyYW1lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCisgKiB3aGlzdCB1bndpbmRpbmcgdGhlIHN0YWNrZnJhbWUgYW5kIGlzIGxpa2UgYSBzdWJyb3V0aW5lIHJldHVybiBzbyB3ZSB1c2UKKyAqIHRoZSBQQy4KKyAqLworc3RhdGljIGludAorY2FsbGNoYWluX3RyYWNlKHN0cnVjdCBzdGFja2ZyYW1lICpmciwKKwkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5ID0gZGF0YTsKKwlwZXJmX2NhbGxjaGFpbl9zdG9yZShlbnRyeSwgZnItPnBjKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZAorcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzdGFja2ZyYW1lIGZyOworCisJaWYgKHBlcmZfZ3Vlc3RfY2JzICYmIHBlcmZfZ3Vlc3RfY2JzLT5pc19pbl9ndWVzdCgpKSB7CisJCS8qIFdlIGRvbid0IHN1cHBvcnQgZ3Vlc3Qgb3MgY2FsbGNoYWluIG5vdyAqLworCQlyZXR1cm47CisJfQorCisJYXJtX2dldF9jdXJyZW50X3N0YWNrZnJhbWUocmVncywgJmZyKTsKKwl3YWxrX3N0YWNrZnJhbWUoJmZyLCBjYWxsY2hhaW5fdHJhY2UsIGVudHJ5KTsKK30KKwordW5zaWduZWQgbG9uZyBwZXJmX2luc3RydWN0aW9uX3BvaW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHBlcmZfZ3Vlc3RfY2JzICYmIHBlcmZfZ3Vlc3RfY2JzLT5pc19pbl9ndWVzdCgpKQorCQlyZXR1cm4gcGVyZl9ndWVzdF9jYnMtPmdldF9ndWVzdF9pcCgpOworCisJcmV0dXJuIGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgcGVyZl9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBtaXNjID0gMDsKKworCWlmIChwZXJmX2d1ZXN0X2NicyAmJiBwZXJmX2d1ZXN0X2Nicy0+aXNfaW5fZ3Vlc3QoKSkgeworCQlpZiAocGVyZl9ndWVzdF9jYnMtPmlzX3VzZXJfbW9kZSgpKQorCQkJbWlzYyB8PSBQRVJGX1JFQ09SRF9NSVNDX0dVRVNUX1VTRVI7CisJCWVsc2UKKwkJCW1pc2MgfD0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUw7CisJfSBlbHNlIHsKKwkJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJCW1pc2MgfD0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCQllbHNlCisJCQltaXNjIHw9IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCX0KKworCXJldHVybiBtaXNjOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMjY2Y2JhNC4uZTM0OTM0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC03LDIxICs3LDE4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQVJNIEx0ZC4sIFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiB0aGUgc3BhcmM2NCBwZXJmIGV2ZW50IGNvZGUsIHdoaWNoIGlzIGluIHR1cm4gYmFzZWQKLSAqIG9uIHRoZSB4ODYgY29kZS4gQ2FsbGNoYWluIGNvZGUgaXMgYmFzZWQgb24gdGhlIEFSTSBPUHJvZmlsZSBiYWNrdHJhY2UKLSAqIGNvZGUuCisgKiBvbiB0aGUgeDg2IGNvZGUuCiAgKi8KICNkZWZpbmUgcHJfZm10KGZtdCkgImh3IHBlcmZldmVudHM6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWRlc2MuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGFzbS9wbXUuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCiBzdGF0aWMgaW50CiBhcm1wbXVfbWFwX2NhY2hlX2V2ZW50KGNvbnN0IHVuc2lnbmVkICgqY2FjaGVfbWFwKQpAQCAtODAsOCArNzcsMTIgQEAKIAkJIHUzMiByYXdfZXZlbnRfbWFzaykKIHsKIAl1NjQgY29uZmlnID0gZXZlbnQtPmF0dHIuY29uZmlnOworCWludCB0eXBlID0gZXZlbnQtPmF0dHIudHlwZTsKIAotCXN3aXRjaCAoZXZlbnQtPmF0dHIudHlwZSkgeworCWlmICh0eXBlID09IGV2ZW50LT5wbXUtPnR5cGUpCisJCXJldHVybiBhcm1wbXVfbWFwX3Jhd19ldmVudChyYXdfZXZlbnRfbWFzaywgY29uZmlnKTsKKworCXN3aXRjaCAodHlwZSkgewogCWNhc2UgUEVSRl9UWVBFX0hBUkRXQVJFOgogCQlyZXR1cm4gYXJtcG11X21hcF9od19ldmVudChldmVudF9tYXAsIGNvbmZpZyk7CiAJY2FzZSBQRVJGX1RZUEVfSFdfQ0FDSEU6CkBAIC0yMDAsNyArMjAxLDcgQEAKIGFybXBtdV9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGFybV9wbXUgKmFybXBtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9IGFybXBtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSB0aGlzX2NwdV9wdHIoYXJtcG11LT5od19ldmVudHMpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCWludCBpZHggPSBod2MtPmlkeDsKIApAQCAtMjE3LDcgKzIxOCw3IEBACiBhcm1wbXVfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBhcm1fcG11ICphcm1wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSBhcm1wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzID0gdGhpc19jcHVfcHRyKGFybXBtdS0+aHdfZXZlbnRzKTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlpbnQgaWR4OwogCWludCBlcnIgPSAwOwpAQCAtMjc0LDE0ICsyNzUsMTIgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZywgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7CiAJc3RydWN0IHBtdV9od19ldmVudHMgZmFrZV9wbXU7Ci0JREVDTEFSRV9CSVRNQVAoZmFrZV91c2VkX21hc2ssIEFSTVBNVV9NQVhfSFdFVkVOVFMpOwogCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBmYWtlIFBNVS4gV2Ugb25seSBuZWVkIHRvIHBvcHVsYXRlIHRoZQogCSAqIHVzZWRfbWFzayBmb3IgdGhlIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCiAJICovCi0JbWVtc2V0KGZha2VfdXNlZF9tYXNrLCAwLCBzaXplb2YoZmFrZV91c2VkX21hc2spKTsKLQlmYWtlX3BtdS51c2VkX21hc2sgPSBmYWtlX3VzZWRfbWFzazsKKwltZW1zZXQoJmZha2VfcG11LnVzZWRfbWFzaywgMCwgc2l6ZW9mKGZha2VfcG11LnVzZWRfbWFzaykpOwogCiAJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzA1LDE3ICszMDQsMjEgQEAKIAlpbnQgcmV0OwogCXU2NCBzdGFydF9jbG9jaywgZmluaXNoX2Nsb2NrOwogCi0JaWYgKGlycV9pc19wZXJjcHUoaXJxKSkKLQkJZGV2ID0gKih2b2lkICoqKWRldjsKLQlhcm1wbXUgPSBkZXY7CisJLyoKKwkgKiB3ZSByZXF1ZXN0IHRoZSBJUlEgd2l0aCBhIChwb3NzaWJseSBwZXJjcHUpIHN0cnVjdCBhcm1fcG11KiosIGJ1dAorCSAqIHRoZSBoYW5kbGVycyBleHBlY3QgYSBzdHJ1Y3QgYXJtX3BtdSouIFRoZSBwZXJjcHVfaXJxIGZyYW1ld29yayB3aWxsCisJICogZG8gYW55IG5lY2Vzc2FyeSBzaGlmdGluZywgd2UganVzdCBuZWVkIHRvIHBlcmZvcm0gdGhlIGZpcnN0CisJICogZGVyZWZlcmVuY2UuCisJICovCisJYXJtcG11ID0gKih2b2lkICoqKWRldjsKIAlwbGF0X2RldmljZSA9IGFybXBtdS0+cGxhdF9kZXZpY2U7CiAJcGxhdCA9IGRldl9nZXRfcGxhdGRhdGEoJnBsYXRfZGV2aWNlLT5kZXYpOwogCiAJc3RhcnRfY2xvY2sgPSBzY2hlZF9jbG9jaygpOwogCWlmIChwbGF0ICYmIHBsYXQtPmhhbmRsZV9pcnEpCi0JCXJldCA9IHBsYXQtPmhhbmRsZV9pcnEoaXJxLCBkZXYsIGFybXBtdS0+aGFuZGxlX2lycSk7CisJCXJldCA9IHBsYXQtPmhhbmRsZV9pcnEoaXJxLCBhcm1wbXUsIGFybXBtdS0+aGFuZGxlX2lycSk7CiAJZWxzZQotCQlyZXQgPSBhcm1wbXUtPmhhbmRsZV9pcnEoaXJxLCBkZXYpOworCQlyZXQgPSBhcm1wbXUtPmhhbmRsZV9pcnEoaXJxLCBhcm1wbXUpOwogCWZpbmlzaF9jbG9jayA9IHNjaGVkX2Nsb2NrKCk7CiAKIAlwZXJmX3NhbXBsZV9ldmVudF90b29rKGZpbmlzaF9jbG9jayAtIHN0YXJ0X2Nsb2NrKTsKQEAgLTQ2OCw3ICs0NzEsNyBAQAogc3RhdGljIHZvaWQgYXJtcG11X2VuYWJsZShzdHJ1Y3QgcG11ICpwbXUpCiB7CiAJc3RydWN0IGFybV9wbXUgKmFybXBtdSA9IHRvX2FybV9wbXUocG11KTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzID0gYXJtcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9IHRoaXNfY3B1X3B0cihhcm1wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGVuYWJsZWQgPSBiaXRtYXBfd2VpZ2h0KGh3X2V2ZW50cy0+dXNlZF9tYXNrLCBhcm1wbXUtPm51bV9ldmVudHMpOwogCiAJaWYgKGVuYWJsZWQpCkBAIC01MzMsMTMwICs1MzYsMyBAQAogCXJldHVybiBwZXJmX3BtdV9yZWdpc3RlcigmYXJtcG11LT5wbXUsIGFybXBtdS0+bmFtZSwgdHlwZSk7CiB9CiAKLS8qCi0gKiBDYWxsY2hhaW4gaGFuZGxpbmcgY29kZS4KLSAqLwotCi0vKgotICogVGhlIHJlZ2lzdGVycyB3ZSdyZSBpbnRlcmVzdGVkIGluIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZQotICogbGVuZ3RoIHNhdmVkIHJlZ2lzdGVyIHN0cnVjdHVyZS4gVGhlIGZwIHBvaW50cyBhdCB0aGUgZW5kIG9mIHRoaXMKLSAqIHN0cnVjdHVyZSBzbyB0aGUgYWRkcmVzcyBvZiB0aGlzIHN0cnVjdCBpczoKLSAqIChzdHJ1Y3QgZnJhbWVfdGFpbCAqKSh4eHgtPmZwKS0xCi0gKgotICogVGhpcyBjb2RlIGhhcyBiZWVuIGFkYXB0ZWQgZnJvbSB0aGUgQVJNIE9Qcm9maWxlIHN1cHBvcnQuCi0gKi8KLXN0cnVjdCBmcmFtZV90YWlsIHsKLQlzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKmZwOwotCXVuc2lnbmVkIGxvbmcgc3A7Ci0JdW5zaWduZWQgbG9uZyBscjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLS8qCi0gKiBHZXQgdGhlIHJldHVybiBhZGRyZXNzIGZvciBhIHNpbmdsZSBzdGFja2ZyYW1lIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZQotICogbmV4dCBmcmFtZSB0YWlsLgotICovCi1zdGF0aWMgc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICoKLXVzZXJfYmFja3RyYWNlKHN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqdGFpbCwKLQkgICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKLXsKLQlzdHJ1Y3QgZnJhbWVfdGFpbCBidWZ0YWlsOwotCXVuc2lnbmVkIGxvbmcgZXJyOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHRhaWwsIHNpemVvZihidWZ0YWlsKSkpCi0JCXJldHVybiBOVUxMOwotCi0JcGFnZWZhdWx0X2Rpc2FibGUoKTsKLQllcnIgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCZidWZ0YWlsLCB0YWlsLCBzaXplb2YoYnVmdGFpbCkpOwotCXBhZ2VmYXVsdF9lbmFibGUoKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBOVUxMOwotCi0JcGVyZl9jYWxsY2hhaW5fc3RvcmUoZW50cnksIGJ1ZnRhaWwubHIpOwotCi0JLyoKLQkgKiBGcmFtZSBwb2ludGVycyBzaG91bGQgc3RyaWN0bHkgcHJvZ3Jlc3MgYmFjayB1cCB0aGUgc3RhY2sKLQkgKiAodG93YXJkcyBoaWdoZXIgYWRkcmVzc2VzKS4KLQkgKi8KLQlpZiAodGFpbCArIDEgPj0gYnVmdGFpbC5mcCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gYnVmdGFpbC5mcCAtIDE7Ci19Ci0KLXZvaWQKLXBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICp0YWlsOwotCi0JaWYgKHBlcmZfZ3Vlc3RfY2JzICYmIHBlcmZfZ3Vlc3RfY2JzLT5pc19pbl9ndWVzdCgpKSB7Ci0JCS8qIFdlIGRvbid0IHN1cHBvcnQgZ3Vlc3Qgb3MgY2FsbGNoYWluIG5vdyAqLwotCQlyZXR1cm47Ci0JfQotCi0JcGVyZl9jYWxsY2hhaW5fc3RvcmUoZW50cnksIHJlZ3MtPkFSTV9wYyk7Ci0KLQlpZiAoIWN1cnJlbnQtPm1tKQotCQlyZXR1cm47Ci0KLQl0YWlsID0gKHN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqKXJlZ3MtPkFSTV9mcCAtIDE7Ci0KLQl3aGlsZSAoKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAmJgotCSAgICAgICB0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCi0JCXRhaWwgPSB1c2VyX2JhY2t0cmFjZSh0YWlsLCBlbnRyeSk7Ci19Ci0KLS8qCi0gKiBHZXRzIGNhbGxlZCBieSB3YWxrX3N0YWNrZnJhbWUoKSBmb3IgZXZlcnkgc3RhY2tmcmFtZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAotICogd2hpc3QgdW53aW5kaW5nIHRoZSBzdGFja2ZyYW1lIGFuZCBpcyBsaWtlIGEgc3Vicm91dGluZSByZXR1cm4gc28gd2UgdXNlCi0gKiB0aGUgUEMuCi0gKi8KLXN0YXRpYyBpbnQKLWNhbGxjaGFpbl90cmFjZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnIsCi0JCXZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSA9IGRhdGE7Ci0JcGVyZl9jYWxsY2hhaW5fc3RvcmUoZW50cnksIGZyLT5wYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLXBlcmZfY2FsbGNoYWluX2tlcm5lbChzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3Qgc3RhY2tmcmFtZSBmcjsKLQotCWlmIChwZXJmX2d1ZXN0X2NicyAmJiBwZXJmX2d1ZXN0X2Nicy0+aXNfaW5fZ3Vlc3QoKSkgewotCQkvKiBXZSBkb24ndCBzdXBwb3J0IGd1ZXN0IG9zIGNhbGxjaGFpbiBub3cgKi8KLQkJcmV0dXJuOwotCX0KLQotCWFybV9nZXRfY3VycmVudF9zdGFja2ZyYW1lKHJlZ3MsICZmcik7Ci0Jd2Fsa19zdGFja2ZyYW1lKCZmciwgY2FsbGNoYWluX3RyYWNlLCBlbnRyeSk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWlmIChwZXJmX2d1ZXN0X2NicyAmJiBwZXJmX2d1ZXN0X2Nicy0+aXNfaW5fZ3Vlc3QoKSkKLQkJcmV0dXJuIHBlcmZfZ3Vlc3RfY2JzLT5nZXRfZ3Vlc3RfaXAoKTsKLQotCXJldHVybiBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOwotfQotCi11bnNpZ25lZCBsb25nIHBlcmZfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnQgbWlzYyA9IDA7Ci0KLQlpZiAocGVyZl9ndWVzdF9jYnMgJiYgcGVyZl9ndWVzdF9jYnMtPmlzX2luX2d1ZXN0KCkpIHsKLQkJaWYgKHBlcmZfZ3Vlc3RfY2JzLT5pc191c2VyX21vZGUoKSkKLQkJCW1pc2MgfD0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9VU0VSOwotCQllbHNlCi0JCQltaXNjIHw9IFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfS0VSTkVMOwotCX0gZWxzZSB7Ci0JCWlmICh1c2VyX21vZGUocmVncykpCi0JCQltaXNjIHw9IFBFUkZfUkVDT1JEX01JU0NfVVNFUjsKLQkJZWxzZQotCQkJbWlzYyB8PSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKLQl9Ci0KLQlyZXR1cm4gbWlzYzsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X2NwdS5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfY3B1LmMKaW5kZXggZWIyYzRkNTUuLmRkOWFjYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X2NwdS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X2NwdS5jCkBAIC0zNSwxMSArMzUsNiBAQAogLyogU2V0IGF0IHJ1bnRpbWUgd2hlbiB3ZSBrbm93IHdoYXQgQ1BVIHR5cGUgd2UgYXJlLiAqLwogc3RhdGljIHN0cnVjdCBhcm1fcG11ICpjcHVfcG11OwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGFybV9wbXUgKiwgcGVyY3B1X3BtdSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfZXZlbnQgKiBbQVJNUE1VX01BWF9IV0VWRU5UU10sIGh3X2V2ZW50cyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZyBbQklUU19UT19MT05HUyhBUk1QTVVfTUFYX0hXRVZFTlRTKV0sIHVzZWRfbWFzayk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBtdV9od19ldmVudHMsIGNwdV9od19ldmVudHMpOwotCiAvKgogICogRGVzcGl0ZSB0aGUgbmFtZXMsIHRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIENQVS1zcGVjaWZpYyBhbmQgYXJlIHVzZWQKICAqIGJ5IHRoZSBPUHJvZmlsZS9wZXJmIGNvZGUuCkBAIC02OSwxMSArNjQsNiBAQAogI2luY2x1ZGUgInBlcmZfZXZlbnRfdjYuYyIKICNpbmNsdWRlICJwZXJmX2V2ZW50X3Y3LmMiCiAKLXN0YXRpYyBzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqY3B1X3BtdV9nZXRfY3B1X2V2ZW50cyh2b2lkKQotewotCXJldHVybiB0aGlzX2NwdV9wdHIoJmNwdV9od19ldmVudHMpOwotfQotCiBzdGF0aWMgdm9pZCBjcHVfcG11X2VuYWJsZV9wZXJjcHVfaXJxKHZvaWQgKmRhdGEpCiB7CiAJaW50IGlycSA9ICooaW50ICopZGF0YTsKQEAgLTkyLDIwICs4MiwyMSBAQAogewogCWludCBpLCBpcnEsIGlycXM7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcG11X2RldmljZSA9IGNwdV9wbXUtPnBsYXRfZGV2aWNlOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzIF9fcGVyY3B1ICpod19ldmVudHMgPSBjcHVfcG11LT5od19ldmVudHM7CiAKIAlpcnFzID0gbWluKHBtdV9kZXZpY2UtPm51bV9yZXNvdXJjZXMsIG51bV9wb3NzaWJsZV9jcHVzKCkpOwogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwbXVfZGV2aWNlLCAwKTsKIAlpZiAoaXJxID49IDAgJiYgaXJxX2lzX3BlcmNwdShpcnEpKSB7CiAJCW9uX2VhY2hfY3B1KGNwdV9wbXVfZGlzYWJsZV9wZXJjcHVfaXJxLCAmaXJxLCAxKTsKLQkJZnJlZV9wZXJjcHVfaXJxKGlycSwgJnBlcmNwdV9wbXUpOworCQlmcmVlX3BlcmNwdV9pcnEoaXJxLCAmaHdfZXZlbnRzLT5wZXJjcHVfcG11KTsKIAl9IGVsc2UgewogCQlmb3IgKGkgPSAwOyBpIDwgaXJxczsgKytpKSB7CiAJCQlpZiAoIWNwdW1hc2tfdGVzdF9hbmRfY2xlYXJfY3B1KGksICZjcHVfcG11LT5hY3RpdmVfaXJxcykpCiAJCQkJY29udGludWU7CiAJCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBtdV9kZXZpY2UsIGkpOwogCQkJaWYgKGlycSA+PSAwKQotCQkJCWZyZWVfaXJxKGlycSwgY3B1X3BtdSk7CisJCQkJZnJlZV9pcnEoaXJxLCBwZXJfY3B1X3B0cigmaHdfZXZlbnRzLT5wZXJjcHVfcG11LCBpKSk7CiAJCX0KIAl9CiB9CkBAIC0xMTQsMTkgKzEwNSwyMSBAQAogewogCWludCBpLCBlcnIsIGlycSwgaXJxczsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbXVfZGV2aWNlID0gY3B1X3BtdS0+cGxhdF9kZXZpY2U7CisJc3RydWN0IHBtdV9od19ldmVudHMgX19wZXJjcHUgKmh3X2V2ZW50cyA9IGNwdV9wbXUtPmh3X2V2ZW50czsKIAogCWlmICghcG11X2RldmljZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpcnFzID0gbWluKHBtdV9kZXZpY2UtPm51bV9yZXNvdXJjZXMsIG51bV9wb3NzaWJsZV9jcHVzKCkpOwogCWlmIChpcnFzIDwgMSkgewotCQlwcmludGtfb25jZSgicGVyZi9BUk06IE5vIGlycXMgZm9yIFBNVSBkZWZpbmVkLCBzYW1wbGluZyBldmVudHMgbm90IHN1cHBvcnRlZFxuIik7CisJCXByX3dhcm5fb25jZSgicGVyZi9BUk06IE5vIGlycXMgZm9yIFBNVSBkZWZpbmVkLCBzYW1wbGluZyBldmVudHMgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAwOwogCX0KIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocG11X2RldmljZSwgMCk7CiAJaWYgKGlycSA+PSAwICYmIGlycV9pc19wZXJjcHUoaXJxKSkgewotCQllcnIgPSByZXF1ZXN0X3BlcmNwdV9pcnEoaXJxLCBoYW5kbGVyLCAiYXJtLXBtdSIsICZwZXJjcHVfcG11KTsKKwkJZXJyID0gcmVxdWVzdF9wZXJjcHVfaXJxKGlycSwgaGFuZGxlciwgImFybS1wbXUiLAorCQkJCQkgJmh3X2V2ZW50cy0+cGVyY3B1X3BtdSk7CiAJCWlmIChlcnIpIHsKIAkJCXByX2VycigidW5hYmxlIHRvIHJlcXVlc3QgSVJRJWQgZm9yIEFSTSBQTVUgY291bnRlcnNcbiIsCiAJCQkJaXJxKTsKQEAgLTE1Myw3ICsxNDYsNyBAQAogCiAJCQllcnIgPSByZXF1ZXN0X2lycShpcnEsIGhhbmRsZXIsCiAJCQkJCSAgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfTk9fVEhSRUFELCAiYXJtLXBtdSIsCi0JCQkJCSAgY3B1X3BtdSk7CisJCQkJCSAgcGVyX2NwdV9wdHIoJmh3X2V2ZW50cy0+cGVyY3B1X3BtdSwgaSkpOwogCQkJaWYgKGVycikgewogCQkJCXByX2VycigidW5hYmxlIHRvIHJlcXVlc3QgSVJRJWQgZm9yIEFSTSBQTVUgY291bnRlcnNcbiIsCiAJCQkJCWlycSk7CkBAIC0xNjcsMTggKzE2MCw1MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjcHVfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCisvKgorICogUE1VIGhhcmR3YXJlIGxvc2VzIGFsbCBjb250ZXh0IHdoZW4gYSBDUFUgZ29lcyBvZmZsaW5lLgorICogV2hlbiBhIENQVSBpcyBob3RwbHVnZ2VkIGJhY2sgaW4sIHNpbmNlIHNvbWUgaGFyZHdhcmUgcmVnaXN0ZXJzIGFyZQorICogVU5LTk9XTiBhdCByZXNldCwgdGhlIFBNVSBtdXN0IGJlIGV4cGxpY2l0bHkgcmVzZXQgdG8gYXZvaWQgcmVhZGluZworICoganVuayB2YWx1ZXMgb3V0IG9mIHRoZW0uCisgKi8KK3N0YXRpYyBpbnQgY3B1X3BtdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCSAgdm9pZCAqaGNwdSkKIHsKKwlzdHJ1Y3QgYXJtX3BtdSAqcG11ID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBhcm1fcG11LCBob3RwbHVnX25iKTsKKworCWlmICgoYWN0aW9uICYgfkNQVV9UQVNLU19GUk9aRU4pICE9IENQVV9TVEFSVElORykKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJaWYgKHBtdS0+cmVzZXQpCisJCXBtdS0+cmVzZXQocG11KTsKKwllbHNlCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBpbnQgY3B1X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQoreworCWludCBlcnI7CiAJaW50IGNwdTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyBfX3BlcmNwdSAqY3B1X2h3X2V2ZW50czsKKworCWNwdV9od19ldmVudHMgPSBhbGxvY19wZXJjcHUoc3RydWN0IHBtdV9od19ldmVudHMpOworCWlmICghY3B1X2h3X2V2ZW50cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljcHVfcG11LT5ob3RwbHVnX25iLm5vdGlmaWVyX2NhbGwgPSBjcHVfcG11X25vdGlmeTsKKwllcnIgPSByZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9wbXUtPmhvdHBsdWdfbmIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2h3X2V2ZW50czsKKwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9ICZwZXJfY3B1KGNwdV9od19ldmVudHMsIGNwdSk7Ci0JCWV2ZW50cy0+ZXZlbnRzID0gcGVyX2NwdShod19ldmVudHMsIGNwdSk7Ci0JCWV2ZW50cy0+dXNlZF9tYXNrID0gcGVyX2NwdSh1c2VkX21hc2ssIGNwdSk7CisJCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBwZXJfY3B1X3B0cihjcHVfaHdfZXZlbnRzLCBjcHUpOwogCQlyYXdfc3Bpbl9sb2NrX2luaXQoJmV2ZW50cy0+cG11X2xvY2spOwotCQlwZXJfY3B1KHBlcmNwdV9wbXUsIGNwdSkgPSBjcHVfcG11OworCQlldmVudHMtPnBlcmNwdV9wbXUgPSBjcHVfcG11OwogCX0KIAotCWNwdV9wbXUtPmdldF9od19ldmVudHMJPSBjcHVfcG11X2dldF9jcHVfZXZlbnRzOworCWNwdV9wbXUtPmh3X2V2ZW50cwk9IGNwdV9od19ldmVudHM7CiAJY3B1X3BtdS0+cmVxdWVzdF9pcnEJPSBjcHVfcG11X3JlcXVlc3RfaXJxOwogCWNwdV9wbXUtPmZyZWVfaXJxCT0gY3B1X3BtdV9mcmVlX2lycTsKIApAQCAtMTg5LDMyICsyMTQsMjAgQEAKIAkvKiBJZiBubyBpbnRlcnJ1cHRzIGF2YWlsYWJsZSwgc2V0IHRoZSBjb3JyZXNwb25kaW5nIGNhcGFiaWxpdHkgZmxhZyAqLwogCWlmICghcGxhdGZvcm1fZ2V0X2lycShjcHVfcG11LT5wbGF0X2RldmljZSwgMCkpCiAJCWNwdV9wbXUtPnBtdS5jYXBhYmlsaXRpZXMgfD0gUEVSRl9QTVVfQ0FQX05PX0lOVEVSUlVQVDsKKworCXJldHVybiAwOworCitvdXRfaHdfZXZlbnRzOgorCWZyZWVfcGVyY3B1KGNwdV9od19ldmVudHMpOworCXJldHVybiBlcnI7CiB9CiAKLS8qCi0gKiBQTVUgaGFyZHdhcmUgbG9zZXMgYWxsIGNvbnRleHQgd2hlbiBhIENQVSBnb2VzIG9mZmxpbmUuCi0gKiBXaGVuIGEgQ1BVIGlzIGhvdHBsdWdnZWQgYmFjayBpbiwgc2luY2Ugc29tZSBoYXJkd2FyZSByZWdpc3RlcnMgYXJlCi0gKiBVTktOT1dOIGF0IHJlc2V0LCB0aGUgUE1VIG11c3QgYmUgZXhwbGljaXRseSByZXNldCB0byBhdm9pZCByZWFkaW5nCi0gKiBqdW5rIHZhbHVlcyBvdXQgb2YgdGhlbS4KLSAqLwotc3RhdGljIGludCBjcHVfcG11X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAotCQkJICB2b2lkICpoY3B1KQorc3RhdGljIHZvaWQgY3B1X3BtdV9kZXN0cm95KHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQogewotCWlmICgoYWN0aW9uICYgfkNQVV9UQVNLU19GUk9aRU4pICE9IENQVV9TVEFSVElORykKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCi0JaWYgKGNwdV9wbXUgJiYgY3B1X3BtdS0+cmVzZXQpCi0JCWNwdV9wbXUtPnJlc2V0KGNwdV9wbXUpOwotCWVsc2UKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCi0JcmV0dXJuIE5PVElGWV9PSzsKKwl1bnJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X3BtdS0+aG90cGx1Z19uYik7CisJZnJlZV9wZXJjcHUoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcHVfcG11X2hvdHBsdWdfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBjcHVfcG11X25vdGlmeSwKLX07Ci0KIC8qCiAgKiBQTVUgcGxhdGZvcm0gZHJpdmVyIGFuZCBkZXZpY2V0cmVlIGJpbmRpbmdzLgogICovCkBAIC0yNDEsNDggKzI1NCwzNCBAQAogCXt9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfcHJvYmVfaW5mbyBwbXVfcHJvYmVfdGFibGVbXSA9IHsKKwlBUk1fUE1VX1BST0JFKEFSTV9DUFVfUEFSVF9BUk0xMTM2LCBhcm12Nl8xMTM2X3BtdV9pbml0KSwKKwlBUk1fUE1VX1BST0JFKEFSTV9DUFVfUEFSVF9BUk0xMTU2LCBhcm12Nl8xMTU2X3BtdV9pbml0KSwKKwlBUk1fUE1VX1BST0JFKEFSTV9DUFVfUEFSVF9BUk0xMTc2LCBhcm12Nl8xMTc2X3BtdV9pbml0KSwKKwlBUk1fUE1VX1BST0JFKEFSTV9DUFVfUEFSVF9BUk0xMU1QQ09SRSwgYXJtdjZtcGNvcmVfcG11X2luaXQpLAorCUFSTV9QTVVfUFJPQkUoQVJNX0NQVV9QQVJUX0NPUlRFWF9BOCwgYXJtdjdfYThfcG11X2luaXQpLAorCUFSTV9QTVVfUFJPQkUoQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSwgYXJtdjdfYTlfcG11X2luaXQpLAorCVhTQ0FMRV9QTVVfUFJPQkUoQVJNX0NQVV9YU0NBTEVfQVJDSF9WMSwgeHNjYWxlMXBtdV9pbml0KSwKKwlYU0NBTEVfUE1VX1BST0JFKEFSTV9DUFVfWFNDQUxFX0FSQ0hfVjIsIHhzY2FsZTJwbXVfaW5pdCksCisJeyAvKiBzZW50aW5lbCB2YWx1ZSAqLyB9Cit9OworCiAvKgogICogQ1BVIFBNVSBpZGVudGlmaWNhdGlvbiBhbmQgcHJvYmluZy4KICAqLwogc3RhdGljIGludCBwcm9iZV9jdXJyZW50X3BtdShzdHJ1Y3QgYXJtX3BtdSAqcG11KQogewogCWludCBjcHUgPSBnZXRfY3B1KCk7CisJdW5zaWduZWQgaW50IGNwdWlkID0gcmVhZF9jcHVpZF9pZCgpOwogCWludCByZXQgPSAtRU5PREVWOworCWNvbnN0IHN0cnVjdCBwbXVfcHJvYmVfaW5mbyAqaW5mbzsKIAogCXByX2luZm8oInByb2JpbmcgUE1VIG9uIENQVSAlZFxuIiwgY3B1KTsKIAotCXN3aXRjaCAocmVhZF9jcHVpZF9wYXJ0KCkpIHsKLQkvKiBBUk0gTHRkIENQVXMuICovCi0JY2FzZSBBUk1fQ1BVX1BBUlRfQVJNMTEzNjoKLQkJcmV0ID0gYXJtdjZfMTEzNl9wbXVfaW5pdChwbXUpOwotCQlicmVhazsKLQljYXNlIEFSTV9DUFVfUEFSVF9BUk0xMTU2OgotCQlyZXQgPSBhcm12Nl8xMTU2X3BtdV9pbml0KHBtdSk7Ci0JCWJyZWFrOwotCWNhc2UgQVJNX0NQVV9QQVJUX0FSTTExNzY6Ci0JCXJldCA9IGFybXY2XzExNzZfcG11X2luaXQocG11KTsKLQkJYnJlYWs7Ci0JY2FzZSBBUk1fQ1BVX1BBUlRfQVJNMTFNUENPUkU6Ci0JCXJldCA9IGFybXY2bXBjb3JlX3BtdV9pbml0KHBtdSk7Ci0JCWJyZWFrOwotCWNhc2UgQVJNX0NQVV9QQVJUX0NPUlRFWF9BODoKLQkJcmV0ID0gYXJtdjdfYThfcG11X2luaXQocG11KTsKLQkJYnJlYWs7Ci0JY2FzZSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5OgotCQlyZXQgPSBhcm12N19hOV9wbXVfaW5pdChwbXUpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWlmIChyZWFkX2NwdWlkX2ltcGxlbWVudG9yKCkgPT0gQVJNX0NQVV9JTVBfSU5URUwpIHsKLQkJCXN3aXRjaCAoeHNjYWxlX2NwdV9hcmNoX3ZlcnNpb24oKSkgewotCQkJY2FzZSBBUk1fQ1BVX1hTQ0FMRV9BUkNIX1YxOgotCQkJCXJldCA9IHhzY2FsZTFwbXVfaW5pdChwbXUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBUk1fQ1BVX1hTQ0FMRV9BUkNIX1YyOgotCQkJCXJldCA9IHhzY2FsZTJwbXVfaW5pdChwbXUpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJZm9yIChpbmZvID0gcG11X3Byb2JlX3RhYmxlOyBpbmZvLT5pbml0ICE9IE5VTEw7IGluZm8rKykgeworCQlpZiAoKGNwdWlkICYgaW5mby0+bWFzaykgIT0gaW5mby0+Y3B1aWQpCisJCQljb250aW51ZTsKKwkJcmV0ID0gaW5mby0+aW5pdChwbXUpOwogCQlicmVhazsKIAl9CiAKQEAgLTI5OSwxMyArMjk4LDEzIEBACiAJaW50IHJldCA9IC1FTk9ERVY7CiAKIAlpZiAoY3B1X3BtdSkgewotCQlwcl9pbmZvKCJhdHRlbXB0IHRvIHJlZ2lzdGVyIG11bHRpcGxlIFBNVSBkZXZpY2VzISIpOworCQlwcl9pbmZvKCJhdHRlbXB0IHRvIHJlZ2lzdGVyIG11bHRpcGxlIFBNVSBkZXZpY2VzIVxuIik7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAogCXBtdSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhcm1fcG11KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwbXUpIHsKLQkJcHJfaW5mbygiZmFpbGVkIHRvIGFsbG9jYXRlIFBNVSBkZXZpY2UhIik7CisJCXByX2luZm8oImZhaWxlZCB0byBhbGxvY2F0ZSBQTVUgZGV2aWNlIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzIwLDE4ICszMTksMjQgQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCXByX2luZm8oImZhaWxlZCB0byBwcm9iZSBQTVUhIik7CisJCXByX2luZm8oImZhaWxlZCB0byBwcm9iZSBQTVUhXG4iKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQljcHVfcG11X2luaXQoY3B1X3BtdSk7Ci0JcmV0ID0gYXJtcG11X3JlZ2lzdGVyKGNwdV9wbXUsIFBFUkZfVFlQRV9SQVcpOworCXJldCA9IGNwdV9wbXVfaW5pdChjcHVfcG11KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOwogCi0JaWYgKCFyZXQpCi0JCXJldHVybiAwOworCXJldCA9IGFybXBtdV9yZWdpc3RlcihjcHVfcG11LCAtMSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZGVzdHJveTsKIAorCXJldHVybiAwOworCitvdXRfZGVzdHJveToKKwljcHVfcG11X2Rlc3Ryb3koY3B1X3BtdSk7CiBvdXRfZnJlZToKLQlwcl9pbmZvKCJmYWlsZWQgdG8gcmVnaXN0ZXIgUE1VIGRldmljZXMhIik7CisJcHJfaW5mbygiZmFpbGVkIHRvIHJlZ2lzdGVyIFBNVSBkZXZpY2VzIVxuIik7CiAJa2ZyZWUocG11KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzQ4LDE2ICszNTMsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCByZWdpc3Rlcl9wbXVfZHJpdmVyKHZvaWQpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IHJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X3BtdV9ob3RwbHVnX25vdGlmaWVyKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjcHVfcG11X2RyaXZlcik7Ci0JaWYgKGVycikKLQkJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9wbXVfaG90cGx1Z19ub3RpZmllcik7Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9wbXVfZHJpdmVyKTsKIH0KIGRldmljZV9pbml0Y2FsbChyZWdpc3Rlcl9wbXVfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y2LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF92Ni5jCmluZGV4IGFiZmViMDQuLmYyZmZkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y2LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjYuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWwsIG1hc2ssIGV2dCwgZmxhZ3M7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGlkeCkgewpAQCAtMzAwLDcgKzMwMCw3IEBACiAJdW5zaWduZWQgbG9uZyBwbWNyID0gYXJtdjZfcG1jcl9yZWFkKCk7CiAJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IChzdHJ1Y3QgYXJtX3BtdSAqKWRldjsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqY3B1YyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqY3B1YyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzOwogCWludCBpZHg7CiAKQEAgLTM1Niw3ICszNTYsNyBAQAogc3RhdGljIHZvaWQgYXJtdjZwbXVfc3RhcnQoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CkBAIC0zNjgsNyArMzY4LDcgQEAKIHN0YXRpYyB2b2lkIGFybXY2cG11X3N0b3Aoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CkBAIC00MDksNyArNDA5LDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZXZ0LCBmbGFnczsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7CkBAIC00NDQsNyArNDQ0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZmxhZ3MsIGV2dCA9IDA7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGlkeCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjcuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y3LmMKaW5kZXggMTE2NzU4Yi4uODk5Mzc3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjcuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF92Ny5jCkBAIC01NjQsMTMgKzU2NCwxMSBAQAogCXJldHVybiBwbW5jICYgQklUKEFSTVY3X0lEWF9UT19DT1VOVEVSKGlkeCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpbnQgaWR4KQogewogCXUzMiBjb3VudGVyID0gQVJNVjdfSURYX1RPX0NPVU5URVIoaWR4KTsKIAlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCA1IiA6IDogInIiIChjb3VudGVyKSk7CiAJaXNiKCk7Ci0KLQlyZXR1cm4gaWR4OwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBhcm12N3BtdV9yZWFkX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtNTgwLDEzICs1NzgsMTUgQEAKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAJdTMyIHZhbHVlID0gMDsKIAotCWlmICghYXJtdjdfcG1uY19jb3VudGVyX3ZhbGlkKGNwdV9wbXUsIGlkeCkpCisJaWYgKCFhcm12N19wbW5jX2NvdW50ZXJfdmFsaWQoY3B1X3BtdSwgaWR4KSkgewogCQlwcl9lcnIoIkNQVSV1IHJlYWRpbmcgd3JvbmcgY291bnRlciAlZFxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKLQllbHNlIGlmIChpZHggPT0gQVJNVjdfSURYX0NZQ0xFX0NPVU5URVIpCisJfSBlbHNlIGlmIChpZHggPT0gQVJNVjdfSURYX0NZQ0xFX0NPVU5URVIpIHsKIAkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMCIgOiAiPXIiICh2YWx1ZSkpOwotCWVsc2UgaWYgKGFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KSA9PSBpZHgpCisJfSBlbHNlIHsKKwkJYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpOwogCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAyIiA6ICI9ciIgKHZhbHVlKSk7CisJfQogCiAJcmV0dXJuIHZhbHVlOwogfQpAQCAtNTk3LDQ1ICs1OTcsNDMgQEAKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKLQlpZiAoIWFybXY3X3BtbmNfY291bnRlcl92YWxpZChjcHVfcG11LCBpZHgpKQorCWlmICghYXJtdjdfcG1uY19jb3VudGVyX3ZhbGlkKGNwdV9wbXUsIGlkeCkpIHsKIAkJcHJfZXJyKCJDUFUldSB3cml0aW5nIHdyb25nIGNvdW50ZXIgJWRcbiIsCiAJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7Ci0JZWxzZSBpZiAoaWR4ID09IEFSTVY3X0lEWF9DWUNMRV9DT1VOVEVSKQorCX0gZWxzZSBpZiAoaWR4ID09IEFSTVY3X0lEWF9DWUNMRV9DT1VOVEVSKSB7CiAJCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDAiIDogOiAiciIgKHZhbHVlKSk7Ci0JZWxzZSBpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKKwl9IGVsc2UgeworCQlhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGlkeCk7CiAJCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiIDogOiAiciIgKHZhbHVlKSk7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdfcG1uY193cml0ZV9ldnRzZWwoaW50IGlkeCwgdTMyIHZhbCkKIHsKLQlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkgewotCQl2YWwgJj0gQVJNVjdfRVZUWVBFX01BU0s7Ci0JCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDEiIDogOiAiciIgKHZhbCkpOwotCX0KKwlhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGlkeCk7CisJdmFsICY9IEFSTVY3X0VWVFlQRV9NQVNLOworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDEiIDogOiAiciIgKHZhbCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhcm12N19wbW5jX2VuYWJsZV9jb3VudGVyKGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdfcG1uY19lbmFibGVfY291bnRlcihpbnQgaWR4KQogewogCXUzMiBjb3VudGVyID0gQVJNVjdfSURYX1RPX0NPVU5URVIoaWR4KTsKIAlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6IDogInIiIChCSVQoY291bnRlcikpKTsKLQlyZXR1cm4gaWR4OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhcm12N19wbW5jX2Rpc2FibGVfY291bnRlcihpbnQgaWR4KQorc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGludCBpZHgpCiB7CiAJdTMyIGNvdW50ZXIgPSBBUk1WN19JRFhfVE9fQ09VTlRFUihpZHgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDIiIDogOiAiciIgKEJJVChjb3VudGVyKSkpOwotCXJldHVybiBpZHg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFybXY3X3BtbmNfZW5hYmxlX2ludGVucyhpbnQgaWR4KQorc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfZW5hYmxlX2ludGVucyhpbnQgaWR4KQogewogCXUzMiBjb3VudGVyID0gQVJNVjdfSURYX1RPX0NPVU5URVIoaWR4KTsKIAlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzE0LCAxIiA6IDogInIiIChCSVQoY291bnRlcikpKTsKLQlyZXR1cm4gaWR4OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhcm12N19wbW5jX2Rpc2FibGVfaW50ZW5zKGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdfcG1uY19kaXNhYmxlX2ludGVucyhpbnQgaWR4KQogewogCXUzMiBjb3VudGVyID0gQVJNVjdfSURYX1RPX0NPVU5URVIoaWR4KTsKIAlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzE0LCAyIiA6IDogInIiIChCSVQoY291bnRlcikpKTsKQEAgLTY0Myw4ICs2NDEsNiBAQAogCS8qIENsZWFyIHRoZSBvdmVyZmxvdyBmbGFnIGluIGNhc2UgYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcuICovCiAJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMyIgOiA6ICJyIiAoQklUKGNvdW50ZXIpKSk7CiAJaXNiKCk7Ci0KLQlyZXR1cm4gaWR4OwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBhcm12N19wbW5jX2dldHJlc2V0X2ZsYWdzKHZvaWQpCkBAIC02NjcsMzQgKzY2MywzNCBAQAogCXUzMiB2YWw7CiAJdW5zaWduZWQgaW50IGNudDsKIAotCXByaW50ayhLRVJOX0lORk8gIlBNTkMgcmVnaXN0ZXJzIGR1bXA6XG4iKTsKKwlwcl9pbmZvKCJQTU5DIHJlZ2lzdGVycyBkdW1wOlxuIik7CiAKIAlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAwIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIlBNTkMgID0weCUwOHhcbiIsIHZhbCk7CisJcHJfaW5mbygiUE1OQyAgPTB4JTA4eFxuIiwgdmFsKTsKIAogCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDEiIDogIj1yIiAodmFsKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQ05URU5TPTB4JTA4eFxuIiwgdmFsKTsKKwlwcl9pbmZvKCJDTlRFTlM9MHglMDh4XG4iLCB2YWwpOwogCiAJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxNCwgMSIgOiAiPXIiICh2YWwpKTsKLQlwcmludGsoS0VSTl9JTkZPICJJTlRFTlM9MHglMDh4XG4iLCB2YWwpOworCXByX2luZm8oIklOVEVOUz0weCUwOHhcbiIsIHZhbCk7CiAKIAlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIkZMQUdTID0weCUwOHhcbiIsIHZhbCk7CisJcHJfaW5mbygiRkxBR1MgPTB4JTA4eFxuIiwgdmFsKTsKIAogCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDUiIDogIj1yIiAodmFsKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU0VMRUNUPTB4JTA4eFxuIiwgdmFsKTsKKwlwcl9pbmZvKCJTRUxFQ1Q9MHglMDh4XG4iLCB2YWwpOwogCiAJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMCIgOiAiPXIiICh2YWwpKTsKLQlwcmludGsoS0VSTl9JTkZPICJDQ05UICA9MHglMDh4XG4iLCB2YWwpOworCXByX2luZm8oIkNDTlQgID0weCUwOHhcbiIsIHZhbCk7CiAKIAlmb3IgKGNudCA9IEFSTVY3X0lEWF9DT1VOVEVSMDsKIAkJCWNudCA8PSBBUk1WN19JRFhfQ09VTlRFUl9MQVNUKGNwdV9wbXUpOyBjbnQrKykgewogCQlhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGNudCk7CiAJCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiIDogIj1yIiAodmFsKSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNOVFslZF0gY291bnQgPTB4JTA4eFxuIiwKKwkJcHJfaW5mbygiQ05UWyVkXSBjb3VudCA9MHglMDh4XG4iLAogCQkJQVJNVjdfSURYX1RPX0NPVU5URVIoY250KSwgdmFsKTsKIAkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMSIgOiAiPXIiICh2YWwpKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ05UWyVkXSBldnRzZWw9MHglMDh4XG4iLAorCQlwcl9pbmZvKCJDTlRbJWRdIGV2dHNlbD0weCUwOHhcbiIsCiAJCQlBUk1WN19JRFhfVE9fQ09VTlRFUihjbnQpLCB2YWwpOwogCX0KIH0KQEAgLTcwNSw3ICs3MDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCWlmICghYXJtdjdfcG1uY19jb3VudGVyX3ZhbGlkKGNwdV9wbXUsIGlkeCkpIHsKQEAgLTc1MSw3ICs3NDcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCWlmICghYXJtdjdfcG1uY19jb3VudGVyX3ZhbGlkKGNwdV9wbXUsIGlkeCkpIHsKQEAgLTc4Myw3ICs3NzksNyBAQAogCXUzMiBwbW5jOwogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSAoc3RydWN0IGFybV9wbXUgKilkZXY7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmNwdWMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmNwdWMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKIAlpbnQgaWR4OwogCkBAIC04NDMsNyArODM5LDcgQEAKIHN0YXRpYyB2b2lkIGFybXY3cG11X3N0YXJ0KHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAkvKiBFbmFibGUgYWxsIGNvdW50ZXJzICovCkBAIC04NTQsNyArODUwLDcgQEAKIHN0YXRpYyB2b2lkIGFybXY3cG11X3N0b3Aoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCS8qIERpc2FibGUgYWxsIGNvdW50ZXJzICovCkBAIC0xMjg3LDcgKzEyODMsNyBAQAogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCWludCBpZHggPSBod2MtPmlkeDsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAkvKiBEaXNhYmxlIGNvdW50ZXIgYW5kIGludGVycnVwdCAqLwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwpAQCAtMTMxMyw3ICsxMzA5LDcgQEAKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJLyoKIAkgKiBFbmFibGUgY291bnRlciBhbmQgaW50ZXJydXB0LCBhbmQgc2V0IHRoZSBjb3VudGVyIHRvIGNvdW50CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF94c2NhbGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3hzY2FsZS5jCmluZGV4IDA4ZGEwYWYuLjhhZjlmMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3hzY2FsZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3hzY2FsZS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHBtbmM7CiAJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IChzdHJ1Y3QgYXJtX3BtdSAqKWRldjsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqY3B1YyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqY3B1YyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzOwogCWludCBpZHg7CiAKQEAgLTE5OCw3ICsxOTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAlzd2l0Y2ggKGlkeCkgewpAQCAtMjM0LDcgKzIzNCw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWwsIG1hc2ssIGV2dCwgZmxhZ3M7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCXN3aXRjaCAoaWR4KSB7CkBAIC0yODcsNyArMjg3LDcgQEAKIHN0YXRpYyB2b2lkIHhzY2FsZTFwbXVfc3RhcnQoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAJdmFsID0geHNjYWxlMXBtdV9yZWFkX3BtbmMoKTsKQEAgLTI5OSw3ICsyOTksNyBAQAogc3RhdGljIHZvaWQgeHNjYWxlMXBtdV9zdG9wKHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCXZhbCA9IHhzY2FsZTFwbXVfcmVhZF9wbW5jKCk7CkBAIC00ODUsNyArNDg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHBtbmMsIG9mX2ZsYWdzOwogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSAoc3RydWN0IGFybV9wbXUgKilkZXY7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmNwdWMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmNwdWMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKIAlpbnQgaWR4OwogCkBAIC01MzksNyArNTM5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBpZW4sIGV2dHNlbDsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJaWVuID0geHNjYWxlMnBtdV9yZWFkX2ludF9lbmFibGUoKTsKQEAgLTU4NSw3ICs1ODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGllbiwgZXZ0c2VsLCBvZl9mbGFnczsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJaWVuID0geHNjYWxlMnBtdV9yZWFkX2ludF9lbmFibGUoKTsKQEAgLTY1MSw3ICs2NTEsNyBAQAogc3RhdGljIHZvaWQgeHNjYWxlMnBtdV9zdGFydChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAl2YWwgPSB4c2NhbGUycG11X3JlYWRfcG1uYygpICYgflhTQ0FMRV9QTVVfQ05UNjQ7CkBAIC02NjMsNyArNjYzLDcgQEAKIHN0YXRpYyB2b2lkIHhzY2FsZTJwbXVfc3RvcChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAl2YWwgPSB4c2NhbGUycG11X3JlYWRfcG1uYygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCAwYzhiMTA4Li45ZjVkODE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtNTMzLDggKzUzMyw2IEBACiAJcmV0dXJuIHJlZ3MtPkFSTV9yMDsKIH0KIAotc3RhdGljIGxvbmcgZG9fY2FjaGVfb3BfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqKTsKLQogc3RhdGljIGlubGluZSBpbnQKIF9fZG9fY2FjaGVfb3AodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC01NDMsMjQgKzU0MSw4IEBACiAJZG8gewogCQl1bnNpZ25lZCBsb25nIGNodW5rID0gbWluKFBBR0VfU0laRSwgZW5kIC0gc3RhcnQpOwogCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKLQotCQkJdGktPnJlc3RhcnRfYmxvY2sgPSAoc3RydWN0IHJlc3RhcnRfYmxvY2spIHsKLQkJCQkuZm4JPSBkb19jYWNoZV9vcF9yZXN0YXJ0LAotCQkJfTsKLQotCQkJdGktPmFybV9yZXN0YXJ0X2Jsb2NrID0gKHN0cnVjdCBhcm1fcmVzdGFydF9ibG9jaykgewotCQkJCXsKLQkJCQkJLmNhY2hlID0gewotCQkJCQkJLnN0YXJ0CT0gc3RhcnQsCi0JCQkJCQkuZW5kCT0gZW5kLAotCQkJCQl9LAotCQkJCX0sCi0JCQl9OwotCi0JCQlyZXR1cm4gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzsKLQkJfQorCQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR1cm4gMDsKIAogCQlyZXQgPSBmbHVzaF9jYWNoZV91c2VyX3JhbmdlKHN0YXJ0LCBzdGFydCArIGNodW5rKTsKIAkJaWYgKHJldCkKQEAgLTU3MywxNSArNTU1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgZG9fY2FjaGVfb3BfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqdW51c2VkKQotewotCXN0cnVjdCBhcm1fcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jazsKLQotCXJlc3RhcnRfYmxvY2sgPSAmY3VycmVudF90aHJlYWRfaW5mbygpLT5hcm1fcmVzdGFydF9ibG9jazsKLQlyZXR1cm4gX19kb19jYWNoZV9vcChyZXN0YXJ0X2Jsb2NrLT5jYWNoZS5zdGFydCwKLQkJCSAgICAgcmVzdGFydF9ibG9jay0+Y2FjaGUuZW5kKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQKIGRvX2NhY2hlX29wKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vbW11LmMgYi9hcmNoL2FybS9rdm0vbW11LmMKaW5kZXggNTdhNDAzYS4uODY2NGZmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL21tdS5jCisrKyBiL2FyY2gvYXJtL2t2bS9tbXUuYwpAQCAtMTk3LDcgKzE5Nyw4IEBACiAJcGdkID0gcGdkcCArIHBnZF9pbmRleChhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBrdm1fcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCXVubWFwX3B1ZHMoa3ZtLCBwZ2QsIGFkZHIsIG5leHQpOworCQlpZiAoIXBnZF9ub25lKCpwZ2QpKQorCQkJdW5tYXBfcHVkcyhrdm0sIHBnZCwgYWRkciwgbmV4dCk7CiAJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiB9CiAKQEAgLTgzNCw2ICs4MzUsMTEgQEAKIAlyZXR1cm4ga3ZtX3ZjcHVfZGFidF9pc3dyaXRlKHZjcHUpOwogfQogCitzdGF0aWMgYm9vbCBrdm1faXNfZGV2aWNlX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlyZXR1cm4gIXBmbl92YWxpZChwZm4pOworfQorCiBzdGF0aWMgaW50IHVzZXJfbWVtX2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZmF1bHRfaXBhLAogCQkJICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LCB1bnNpZ25lZCBsb25nIGh2YSwKIAkJCSAgdW5zaWduZWQgbG9uZyBmYXVsdF9zdGF0dXMpCkBAIC05MDQsNyArOTEwLDcgQEAKIAlpZiAoaXNfZXJyb3JfcGZuKHBmbikpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKGt2bV9pc19tbWlvX3BmbihwZm4pKQorCWlmIChrdm1faXNfZGV2aWNlX3BmbihwZm4pKQogCQltZW1fdHlwZSA9IFBBR0VfUzJfREVWSUNFOwogCiAJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXNtOTI2MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1hc205MjYwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyM2JlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXNtOTI2MC9LY29uZmlnCkBAIC0wLDAgKzEsNiBAQAorY29uZmlnIE1BQ0hfQVNNOTI2MAorCWJvb2wgIkFscGhhc2NhbGUgQVNNOTI2MCIKKwlkZXBlbmRzIG9uIEFSQ0hfTVVMVElfVjUKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKKwloZWxwCisJICBTdXBwb3J0IGZvciBBbHBoYXNjYWxlIEFTTTkyNjAgYmFzZWQgcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IDBlNmQ1NDguLjIzOTVjNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC0xNSwyNyArMTUsMTAgQEAKIGNvbmZpZyBIQVZFX0FUOTFfREJHVTIKIAlib29sCiAKLWNvbmZpZyBBVDkxX1VTRV9PTERfQ0xLCi0JYm9vbAotCi1jb25maWcgQVQ5MV9QTUNfVU5JVAotCWJvb2wKLQlkZWZhdWx0ICFBUkNIX0FUOTFYNDAKLQogY29uZmlnIENPTU1PTl9DTEtfQVQ5MQogCWJvb2wKLQlkZWZhdWx0IEFUOTFfUE1DX1VOSVQgJiYgVVNFX09GICYmICFBVDkxX1VTRV9PTERfQ0xLCiAJc2VsZWN0IENPTU1PTl9DTEsKIAotY29uZmlnIE9MRF9DTEtfQVQ5MQotCWJvb2wKLQlkZWZhdWx0IEFUOTFfUE1DX1VOSVQgJiYgQVQ5MV9VU0VfT0xEX0NMSwotCi1jb25maWcgT0xEX0lSUV9BVDkxCi0JYm9vbAotCXNlbGVjdCBNVUxUSV9JUlFfSEFORExFUgotCXNlbGVjdCBTUEFSU0VfSVJRCi0KIGNvbmZpZyBIQVZFX0FUOTFfU01ECiAJYm9vbAogCkBAIC00NCwyMCArMjcsMjIgQEAKIAogY29uZmlnIFNPQ19BVDkxU0FNOQogCWJvb2wKLQlzZWxlY3QgQVRNRUxfQUlDX0lSUSBpZiAhT0xEX0lSUV9BVDkxCisJc2VsZWN0IEFUTUVMX0FJQ19JUlEKKwlzZWxlY3QgQ09NTU9OX0NMS19BVDkxCiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKLQlzZWxlY3QgTUVNT1JZIGlmIFVTRV9PRgotCXNlbGVjdCBBVE1FTF9TRFJBTUMgaWYgVVNFX09GCisJc2VsZWN0IE1FTU9SWQorCXNlbGVjdCBBVE1FTF9TRFJBTUMKIAogY29uZmlnIFNPQ19TQU1BNQogCWJvb2wKIAlzZWxlY3QgQVRNRUxfQUlDNV9JUlEKKwlzZWxlY3QgQ09NTU9OX0NMS19BVDkxCiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCi0Jc2VsZWN0IFVTRV9PRgogCXNlbGVjdCBNRU1PUlkKIAlzZWxlY3QgQVRNRUxfU0RSQU1DCisJc2VsZWN0IFBIWUxJQiBpZiBORVRERVZJQ0VTCiAKIG1lbnUgIkF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAiCiAKQEAgLTY1LDE2ICs1MCw2IEBACiAKIAlwcm9tcHQgIkNvcmUgdHlwZSIKIAotY29uZmlnIEFSQ0hfQVQ5MVg0MAotCWJvb2wgIkFSTTcgQVQ5MVg0MCIKLQlkZXBlbmRzIG9uICFNTVUKLQlzZWxlY3QgQ1BVX0FSTTdURE1JCi0Jc2VsZWN0IEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCi0Jc2VsZWN0IE9MRF9JUlFfQVQ5MQotCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBvbmUgb2YgQXRtZWwncyBBVDkxWDQwIFNvQy4KLQogY29uZmlnIFNPQ19TQU1fVjRfVjUKIAlib29sICJBUk05IEFUOTFTQU05L0FUOTFSTTkyMDAiCiAJaGVscApAQCAtMTIyLDcgKzk3LDggQEAKIGlmIFNPQ19TQU1fVjRfVjUKIGNvbmZpZyBTT0NfQVQ5MVJNOTIwMAogCWJvb2wgIkFUOTFSTTkyMDAiCi0Jc2VsZWN0IEFUTUVMX0FJQ19JUlEgaWYgIU9MRF9JUlFfQVQ5MQorCXNlbGVjdCBBVE1FTF9BSUNfSVJRCisJc2VsZWN0IENPTU1PTl9DTEtfQVQ5MQogCXNlbGVjdCBDUFVfQVJNOTIwVAogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEhBVkVfQVQ5MV9EQkdVMApAQCAtMTk4LDM3ICsxNzQsMTEgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZW5kaWYgIyBTT0NfU0FNX1Y0X1Y1CiAKLQotaWYgU09DX1NBTV9WNF9WNSB8fCBBUkNIX0FUOTFYNDAKLXNvdXJjZSBhcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZy5ub25fZHQKLWVuZGlmCi0KLWNvbW1lbnQgIkdlbmVyaWMgQm9hcmQgVHlwZSIKLQogY29uZmlnIE1BQ0hfQVQ5MVJNOTIwMF9EVAotCWJvb2wgIkF0bWVsIEFUOTFSTTkyMDAgRXZhbHVhdGlvbiBLaXRzIHdpdGggZGV2aWNlLXRyZWUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19BVDkxUk05MjAwCi0Jc2VsZWN0IFVTRV9PRgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRvIGV4cGVyaW1lbnQgZGV2aWNlLXRyZWUgd2l0aAotCSAgYW4gQXRtZWwgUk05MjAwIEV2YWx1YXRpb24gS2l0LgorCWRlZl9ib29sIFNPQ19BVDkxUk05MjAwCiAKIGNvbmZpZyBNQUNIX0FUOTFTQU05X0RUCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTSBFdmFsdWF0aW9uIEtpdHMgd2l0aCBkZXZpY2UtdHJlZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09DX0FUOTFTQU05Ci0Jc2VsZWN0IFVTRV9PRgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRvIGV4cGVyaW1lbnQgZGV2aWNlLXRyZWUgd2l0aAotCSAgYW4gQXRtZWwgRXZhbHVhdGlvbiBLaXQuCi0KLWNvbmZpZyBNQUNIX1NBTUE1X0RUCi0JYm9vbCAiQXRtZWwgU0FNQTUgRXZhbHVhdGlvbiBLaXRzIHdpdGggZGV2aWNlLXRyZWUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19TQU1BNQotCXNlbGVjdCBVU0VfT0YKLQlzZWxlY3QgUEhZTElCIGlmIE5FVERFVklDRVMKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBleHBlcmltZW50IGRldmljZS10cmVlIHdpdGgKLQkgIGFuIEF0bWVsIEV2YWx1YXRpb24gS2l0LgorCWRlZl9ib29sIFNPQ19BVDkxU0FNOQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjUxLDcgKzIwMSw3IEBACiAgICAgICAgaW50ICJLZXJuZWwgSFogKGppZmZpZXMgcGVyIHNlY29uZCkiCiAgICAgICAgcmFuZ2UgMzIgMTAyNAogICAgICAgIGRlcGVuZHMgb24gQVJDSF9BVDkxCi0gICAgICAgZGVmYXVsdCAiMTI4IiBpZiBBUkNIX0FUOTFSTTkyMDAKKyAgICAgICBkZWZhdWx0ICIxMjgiIGlmIFNPQ19BVDkxUk05MjAwCiAgICAgICAgZGVmYXVsdCAiMTAwIgogICAgICAgIGhlbHAKIAkgIE9uIEFUOTFybTkyMDAgY2hpcHMgd2hlcmUgeW91J3JlIHVzaW5nIGEgc3lzdGVtIGNsb2NrIGRlcml2ZWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnLm5vbl9kdCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnLm5vbl9kdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhlODgyMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZy5ub25fZHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNDQgKzAsMCBAQAotbWVudSAiQXRtZWwgTm9uLURUIHdvcmxkIgotCi1jb25maWcgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECi0JYm9vbAotCi1jaG9pY2UKLQlwcm9tcHQgIkF0bWVsIEFUOTEgUHJvY2Vzc29yIERldmljZXMgZm9yIG5vbiBEVCBib2FyZHMiCi0JZGVwZW5kcyBvbiAhQVJDSF9BVDkxWDQwCi0KLWNvbmZpZyBBUkNIX0FUOTFfTk9ORQotCWJvb2wgIk5vbmUiCi0KLWNvbmZpZyBBUkNIX0FUOTFSTTkyMDAKLQlib29sICJBVDkxUk05MjAwIgotCXNlbGVjdCBTT0NfQVQ5MVJNOTIwMAotCXNlbGVjdCBBVDkxX1VTRV9PTERfQ0xLCi0Jc2VsZWN0IE9MRF9JUlFfQVQ5MQotCi1jb25maWcgQVJDSF9BVDkxU0FNOTI2MAotCWJvb2wgIkFUOTFTQU05MjYwIG9yIEFUOTFTQU05WEUgb3IgQVQ5MVNBTTlHMjAiCi0Jc2VsZWN0IFNPQ19BVDkxU0FNOTI2MAotCXNlbGVjdCBBVDkxX1VTRV9PTERfQ0xLCi0Jc2VsZWN0IE9MRF9JUlFfQVQ5MQotCi1jb25maWcgQVJDSF9BVDkxU0FNOTI2MQotCWJvb2wgIkFUOTFTQU05MjYxIG9yIEFUOTFTQU05RzEwIgotCXNlbGVjdCBTT0NfQVQ5MVNBTTkyNjEKLQlzZWxlY3QgQVQ5MV9VU0VfT0xEX0NMSwotCXNlbGVjdCBPTERfSVJRX0FUOTEKLQotY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjMKLQlib29sICJBVDkxU0FNOTI2MyIKLQlzZWxlY3QgU09DX0FUOTFTQU05MjYzCi0Jc2VsZWN0IEFUOTFfVVNFX09MRF9DTEsKLQlzZWxlY3QgT0xEX0lSUV9BVDkxCi0KLWNvbmZpZyBBUkNIX0FUOTFTQU05UkwKLQlib29sICJBVDkxU0FNOVJMIgotCXNlbGVjdCBTT0NfQVQ5MVNBTTlSTAotCXNlbGVjdCBBVDkxX1VTRV9PTERfQ0xLCi0Jc2VsZWN0IE9MRF9JUlFfQVQ5MQotCi1jb25maWcgQVJDSF9BVDkxU0FNOUc0NQotCWJvb2wgIkFUOTFTQU05RzQ1IgotCXNlbGVjdCBTT0NfQVQ5MVNBTTlHNDUKLQlzZWxlY3QgQVQ5MV9VU0VfT0xEX0NMSwotCXNlbGVjdCBPTERfSVJRX0FUOTEKLQotZW5kY2hvaWNlCi0KLWNvbmZpZyBBUkNIX0FUOTFTQU05RzIwCi0JYm9vbAotCXNlbGVjdCBBUkNIX0FUOTFTQU05MjYwCi0KLWNvbmZpZyBBUkNIX0FUOTFTQU05RzEwCi0JYm9vbAotCXNlbGVjdCBBUkNIX0FUOTFTQU05MjYxCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFSTTkyMDAKLQotY29tbWVudCAiQVQ5MVJNOTIwMCBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9PTkVBUk0KLQlib29sICJBamVjbyAxQVJNIFNpbmdsZSBCb2FyZCBDb21wdXRlciIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEFqZWNvJ3MgMUFSTSBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIuCi0JICA8aHR0cDovL3d3dy5hamVjby5maS8+Ci0KLWNvbmZpZyBNQUNIX0FUOTFSTTkyMDBFSwotCWJvb2wgIkF0bWVsIEFUOTFSTTkyMDAtRUsgRXZhbHVhdGlvbiBLaXQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxUk05MjAwLUVLIEV2YWx1YXRpb24gS2l0LgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTM1MDc+Ci0KLWNvbmZpZyBNQUNIX0NTQjMzNwotCWJvb2wgIkNvZ2VudCBDU0IzMzciCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBDb2dlbnQncyBDU0IzMzcgYm9hcmQuCi0JICA8aHR0cDovL3d3dy5jb2djb21wLmNvbS9jc2JfY3NiMzM3Lmh0bT4KLQotY29uZmlnIE1BQ0hfQ1NCNjM3Ci0JYm9vbCAiQ29nZW50IENTQjYzNyIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIENvZ2VudCdzIENTQjYzNyBib2FyZC4KLQkgIDxodHRwOi8vd3d3LmNvZ2NvbXAuY29tL2NzYl9jc2I2MzcuaHRtPgotCi1jb25maWcgTUFDSF9DQVJNRVZBCi0JYm9vbCAiQ29uaXRlYyBBUk0mRVZBIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQ29uaXRlYydzIEFUOTFSTTkyMDAtTUNVLU1vZHVsZS4KLQkgIDxodHRwOi8vd3d3LmNvbml0ZWMubmV0L2VuZ2xpc2gvbGludXhib2FyZC5waHA+Ci0KLWNvbmZpZyBNQUNIX0FURUI5MjAwCi0JYm9vbCAiRW1iZXN0IEFURUI5MjAwIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgRW1iZXN0J3MgQVRFQjkyMDAgYm9hcmQuCi0JICA8aHR0cDovL3d3dy5lbWJlZGluZm8uY29tL2VuZ2xpc2gvcHJvZHVjdC9BVEVCOTIwMC5hc3A+Ci0KLWNvbmZpZyBNQUNIX0tCOTIwMAotCWJvb2wgIkt3aWtCeXRlIEtCOTIweCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEt3aWtCeXRlJ3MgS0I5MjB4IGJvYXJkLgotCSAgPGh0dHA6Ly93d3cua3dpa2J5dGUuY29tL0tCOTIwMi5odG1sPgotCi1jb25maWcgTUFDSF9QSUNPVFVYMlhYCi0JYm9vbCAicGljb3R1eCAyMDAiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhIHBpY290dXggMjAwLgotCSAgPGh0dHA6Ly93d3cucGljb3R1eC5jb20vPgotCi1jb25maWcgTUFDSF9LQUZBCi0JYm9vbCAiU3BlcnJ5LVN1biBLQUZBIGJvYXJkIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgU3BlcnJ5LVN1bidzIEtBRkEgYm9hcmQuCi0KLWNvbmZpZyBNQUNIX0VDQkFUOTEKLQlib29sICJlbVFiaXQgRUNCX0FUOTEgU0JDIgotCXNlbGVjdCBIQVZFX0FUOTFfREFUQUZMQVNIX0NBUkQKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGVtUWJpdCdzIEVDQl9BVDkxIGJvYXJkLgotCSAgPGh0dHA6Ly93aWtpLmVtcWJpdC5jb20vZnJlZS1lY2ItYXQ5MT4KLQotY29uZmlnIE1BQ0hfWUw5MjAwCi0JYm9vbCAidWNEcmFnb24gWUwtOTIwMCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRoZSB1Y0RyYWdvbiBZTC05MjAwIGJvYXJkLgotCi1jb25maWcgTUFDSF9DUFVBVDkxCi0JYm9vbCAiRXVrcmVhIENQVUFUOTEiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgRXVrcmVhIEVsZWN0cm9tYXRpcXVlJ3MKLQkgIENQVUFUOTEgYm9hcmQgPGh0dHA6Ly93d3cuZXVrcmVhLmNvbS8+LgotCi1jb25maWcgTUFDSF9FQ085MjAKLQlib29sICJlY285MjAiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgZWNvOTIwIGJvYXJkCi1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgQVJDSF9BVDkxU0FNOTI2MAotCi1jb21tZW50ICJBVDkxU0FNOTI2MCBWYXJpYW50cyIKLQotY29tbWVudCAiQVQ5MVNBTTkyNjAgLyBBVDkxU0FNOVhFIEJvYXJkIFR5cGUiCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05MjYwRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOTI2MC1FSyAvIEFUOTFTQU05WEUgRXZhbHVhdGlvbiBLaXQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOTI2MC1FSyBvciBBVDkxU0FNOVhFIEV2YWx1YXRpb24gS2l0Ci0JICA8aHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Byb2R1Y3RzL3Rvb2xzX2NhcmQuYXNwP3Rvb2xfaWQ9MzkzMz4KLQotY29uZmlnIE1BQ0hfQ0FNNjAKLQlib29sICJLd2lrQnl0ZSBLQjkyNjAgKENBTTYwKSBib2FyZCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEt3aWtCeXRlJ3MgS0I5MjYwIChDQU02MCkgYm9hcmQgYmFzZWQgb24gdGhlIEF0bWVsIEFUOTFTQU05MjYwLgotCSAgPGh0dHA6Ly93d3cua3dpa2J5dGUuY29tL0tCOTI2MC5odG1sPgotCi1jb25maWcgTUFDSF9TQU05X0w5MjYwCi0JYm9vbCAiT2xpbWV4IFNBTTktTDkyNjAgYm9hcmQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgT2xpbWV4J3MgU0FNOS1MOTI2MCBib2FyZCBiYXNlZCBvbiB0aGUgQXRtZWwgQVQ5MVNBTTkyNjAuCi0JICA8aHR0cDovL3d3dy5vbGltZXguY29tL2Rldi9zYW05LUw5MjYwLmh0bWw+Ci0KLWNvbmZpZyBNQUNIX0FGRUI5MjYwCi0JYm9vbCAiQ3VzdG9tIGFmZWI5MjYwIGJvYXJkIHYxIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgY3VzdG9tIGFmZWI5MjYwIGJvYXJkIGJhc2VkIG9uCi0JICBvcGVuIGhhcmR3YXJlIGRlc2lnbi4gU2VsZWN0IHRoaXMgZm9yIHJldmlzaW9uIDEgb2YgdGhlIGJvYXJkLgotCSAgPHN2bjovLzE5NC44NS4yMzguMjIvaG9tZS91c2Vycy9nZW9yZ2Uvc3ZuL2FybTllYj4KLQkgIDxodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYXJtOWZwZ2EtZXZvbHV0aW9uLWJvYXJkPgotCi1jb25maWcgTUFDSF9DUFU5MjYwCi0JYm9vbCAiRXVrcmVhIENQVTkyNjAgYm9hcmQiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhIEV1a3JlYSBFbGVjdHJvbWF0aXF1ZSdzCi0JICBDUFU5MjYwIEJvYXJkIDxodHRwOi8vd3d3LmV1a3JlYS5jb20vPgotCi1jb25maWcgTUFDSF9GTEVYSUJJVFkKLQlib29sICJGbGV4aWJpdHkgQ29ubmVjdCBib2FyZCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEZsZXhpYml0eSBDb25uZWN0IGJvYXJkCi0JICA8aHR0cDovL3d3dy5mbGV4aWJpdHkuY29tPgotCi1jb21tZW50ICJBVDkxU0FNOUcyMCBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOUcyMEVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgRXZhbHVhdGlvbiBLaXQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAotCSAgdGhhdCBlbWJlZHMgb25seSBvbmUgU0QvTU1DIHNsb3QuCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05RzIwRUtfMk1NQwotCWRlcGVuZHMgb24gTUFDSF9BVDkxU0FNOUcyMEVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgRXZhbHVhdGlvbiBLaXQgd2l0aCAyIFNEL01NQyBTbG90cyIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGFuIEF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0Ci0JICB3aXRoIDIgU0QvTU1DIFNsb3RzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBBVDkxU0FNOUcyMC1FSyByZXYuIEMgYW5kCi0JICBvbndhcmRzLgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL3Rvb2xzL1NBTTlHMjAtRUsuYXNweD4KLQotY29uZmlnIE1BQ0hfQ1BVOUcyMAotCWJvb2wgIkV1a3JlYSBDUFU5RzIwIGJvYXJkIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSBFdWtyZWEgRWxlY3Ryb21hdGlxdWUncwotCSAgQ1BVOUcyMCBCb2FyZCA8aHR0cDovL3d3dy5ldWtyZWEuY29tLz4KLQotY29uZmlnIE1BQ0hfUE9SVFVYRzIwCi0JYm9vbCAidGFza2l0IFBvcnR1eEcyMCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRhc2tpdCdzIFBvcnR1eEcyMC4KLQkgIDxodHRwOi8vd3d3LnRhc2tpdC5kZS9lbi8+Ci0KLWNvbmZpZyBNQUNIX1NUQU1QOUcyMAotCWJvb2wgInRhc2tpdCBTdGFtcDlHMjAgQ1BVIG1vZHVsZSIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRhc2tpdCdzIFN0YW1wOUcyMCBDUFUgbW9kdWxlIG9uIGl0cwotCSAgZXZhbHVhdGlvbiBib2FyZC4KLQkgIDxodHRwOi8vd3d3LnRhc2tpdC5kZS9lbi8+Ci0KLWNvbmZpZyBNQUNIX1BDT05UUk9MX0cyMAotCWJvb2wgIlBDb250cm9sIEcyMCBDUFUgbW9kdWxlIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgdGFza2l0J3MgU3RhbXA5RzIwIENQVSBtb2R1bGUgb24gdGhpcwotCSAgY2FycmllciBib2FyZCwgYmVpbmcgdGhlIGRlY2VudHJhbGl6ZWQgdW5pdCBvZiBhIGJ1aWxkaW5nIGF1dG9tYXRpb24KLQkgIHN5c3RlbTsgZmVhdHVyaW5nIG52cmFtLCBldGgtc3dpdGNoLCBpc28tcnM0ODUsIGRpc3BsYXksIGlvCi0KLWNvbmZpZyBNQUNIX0dTSUExOFMKLQlib29sICJHU19JQTE4X1MgYm9hcmQiCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBHU19JQTE4X1MgYm9hcmQKLQkgIHByb2R1Y2VkIGJ5IEdlb1NJRyBMdGQgY29tcGFueS4gVGhpcyBpcyBhbiBpbnRlcm5ldCBhY2NlbGVyb2dyYXBoLgotCSAgPGh0dHA6Ly93d3cuZ2Vvc2lnLmNvbT4KLQotY29uZmlnIE1BQ0hfU05BUFBFUl85MjYwCi0JYm9vbCAiQmx1ZXdhdGVyIFN5c3RlbXMgU25hcHBlciA5MjYwLzlHMjAgbW9kdWxlIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEJsdWV3YXRlciBTeXN0ZW1zIFNuYXBwZXIgOTI2MCBvcgotCSAgU25hcHBlciA5RzIwIG1vZHVsZXMuCi0JICA8aHR0cDovL3d3dy5ibHVld2F0ZXJzeXMuY29tLz4KLWVuZGlmCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFTQU05MjYxCi0KLWNvbW1lbnQgIkFUOTFTQU05MjYxIEJvYXJkIFR5cGUiCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05MjYxRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOTI2MS1FSyBFdmFsdWF0aW9uIEtpdCIKLQlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05MjYxLUVLIEV2YWx1YXRpb24gS2l0LgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTM4MjA+Ci0KLWNvbW1lbnQgIkFUOTFTQU05RzEwIEJvYXJkIFR5cGUiCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05RzEwRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOUcxMC1FSyBFdmFsdWF0aW9uIEtpdCIKLQlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05RzEwLUVLIEV2YWx1YXRpb24gS2l0LgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTQ1ODg+Ci0KLWVuZGlmCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFTQU05MjYzCi0KLWNvbW1lbnQgIkFUOTFTQU05MjYzIEJvYXJkIFR5cGUiCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05MjYzRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOTI2My1FSyBFdmFsdWF0aW9uIEtpdCIKLQlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05MjYzLUVLIEV2YWx1YXRpb24gS2l0LgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTQwNTc+Ci0KLWVuZGlmCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFTQU05UkwKLQotY29tbWVudCAiQVQ5MVNBTTlSTCBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOVJMRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOVJMLUVLIEV2YWx1YXRpb24gS2l0IgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOVJMLUVLIEV2YWx1YXRpb24gS2l0LgotCi1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgQVJDSF9BVDkxU0FNOUc0NQotCi1jb21tZW50ICJBVDkxU0FNOUc0NSBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOU0xMEc0NUVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTlNMTBHNDUtRUsgRXZhbHVhdGlvbiBLaXRzIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOU0xMEc0NS1FSyBFdmFsdWF0aW9uIEtpdC4KLQkgIFRob3NlIGJvYXJkcyBjYW4gYmUgcG9wdWxhdGVkIHdpdGggYW55IFNvQyBvZiBBVDkxU0FNOUc0NSBvciBBVDkxU0FNOU0xMAotCSAgZmFtaWxpZXM6IEFUOTFTQU05RzQ1LCBBVDkxU0FNOUc0NiwgQVQ5MVNBTTlNMTAgYW5kIEFUOTFTQU05TTExLgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL3Rvb2xzL1NBTTlNMTAtRzQ1LUVLLmFzcHg+Ci0KLWVuZGlmCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFYNDAKLQotY29tbWVudCAiQVQ5MVg0MCBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxRUIwMQotCWJvb2wgIkF0bWVsIEFUOTFFQjAxIEV2YWx1YXRpb24gS2l0IgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxRUIwMSBFdmFsdWF0aW9uIEtpdC4KLQkgIEl0IGlzIGFsc28gYSBwb3B1bGFyIHRhcmdldCBmb3Igc2ltdWxhdG9ycyBzdWNoIGFzIEdEQidzCi0JICBBUk0gc2ltdWxhdG9yIChjb21tb25seSBrbm93biBhcyB0aGUgQVJNdWxhdG9yKSBhbmQgdGhlCi0JICBTa3lleWUgc2ltdWxhdG9yLgotCi1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY29tbWVudCAiQVQ5MSBCb2FyZCBPcHRpb25zIgotCi1jb25maWcgTVREX0FUOTFfREFUQUZMQVNIX0NBUkQKLQlib29sICJFbmFibGUgRGF0YUZsYXNoIENhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRGF0YUZsYXNoIGNhcmQuCi0KLWVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCAxYjlhZTAyLi43YjY0MjRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0yLDEwICsyLDggQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCiAKLW9iai15CQk6PSBncGlvLm8gc2V0dXAubyBzeXNpcnFfbWFzay5vCitvYmoteQkJOj0gc2V0dXAubyBzeXNpcnFfbWFzay5vCiAKLW9iai0kKENPTkZJR19PTERfSVJRX0FUOTEpCSs9IGlycS5vCi1vYmotJChDT05GSUdfT0xEX0NMS19BVDkxKQkrPSBjbG9jay5vCiBvYmotJChDT05GSUdfU09DX0FUOTFTQU05KQkrPSBzYW05X3NtYy5vCiAKICMgQ1BVLXNwZWNpZmljIHN1cHBvcnQKQEAgLTIwLDczICsxOCwxMiBAQAogb2JqLSQoQ09ORklHX1NPQ19TQU1BNUQzKQkrPSBzYW1hNWQzLm8KIG9iai0kKENPTkZJR19TT0NfU0FNQTVENCkJKz0gc2FtYTVkNC5vCiAKLW9iai0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDApCSs9IGF0OTFybTkyMDBfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkJKz0gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSkJKz0gYXQ5MXNhbTkyNjFfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykJKz0gYXQ5MXNhbTkyNjNfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOVJMKQkrPSBhdDkxc2FtOXJsX2RldmljZXMubwotb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCSs9IGF0OTFzYW05ZzQ1X2RldmljZXMubwotb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVg0MCkJKz0gYXQ5MXg0MC5vIGF0OTF4NDBfdGltZS5vCi0KLSMgQVQ5MVJNOTIwMCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9PTkVBUk0pCSs9IGJvYXJkLTFhcm0ubwotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLKQkrPSBib2FyZC1ybTkyMDBlay5vCi1vYmotJChDT05GSUdfTUFDSF9DU0IzMzcpCSs9IGJvYXJkLWNzYjMzNy5vCi1vYmotJChDT05GSUdfTUFDSF9DU0I2MzcpCSs9IGJvYXJkLWNzYjYzNy5vCi1vYmotJChDT05GSUdfTUFDSF9DQVJNRVZBKQkrPSBib2FyZC1jYXJtZXZhLm8KLW9iai0kKENPTkZJR19NQUNIX0tCOTIwMCkJKz0gYm9hcmQta2I5MjAyLm8KLW9iai0kKENPTkZJR19NQUNIX0FURUI5MjAwKQkrPSBib2FyZC1lYjkyMDAubwotb2JqLSQoQ09ORklHX01BQ0hfS0FGQSkJCSs9IGJvYXJkLWthZmEubwotb2JqLSQoQ09ORklHX01BQ0hfUElDT1RVWDJYWCkJKz0gYm9hcmQtcGljb3R1eDIwMC5vCi1vYmotJChDT05GSUdfTUFDSF9FQ0JBVDkxKQkrPSBib2FyZC1lY2JhdDkxLm8KLW9iai0kKENPTkZJR19NQUNIX1lMOTIwMCkJKz0gYm9hcmQteWwtOTIwMC5vCi1vYmotJChDT05GSUdfTUFDSF9DUFVBVDkxKQkrPSBib2FyZC1jcHVhdDkxLm8KLW9iai0kKENPTkZJR19NQUNIX0VDTzkyMCkJKz0gYm9hcmQtZWNvOTIwLm8KLQotIyBBVDkxU0FNOTI2MCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLKSArPSBib2FyZC1zYW05MjYwZWsubwotb2JqLSQoQ09ORklHX01BQ0hfQ0FNNjApCSs9IGJvYXJkLWNhbTYwLm8KLW9iai0kKENPTkZJR19NQUNIX1NBTTlfTDkyNjApCSs9IGJvYXJkLXNhbTktbDkyNjAubwotb2JqLSQoQ09ORklHX01BQ0hfQUZFQjkyNjApCSs9IGJvYXJkLWFmZWItOTI2MHYxLm8KLW9iai0kKENPTkZJR19NQUNIX0NQVTkyNjApCSs9IGJvYXJkLWNwdTlrcmVhLm8KLW9iai0kKENPTkZJR19NQUNIX0ZMRVhJQklUWSkJKz0gYm9hcmQtZmxleGliaXR5Lm8KLQotIyBBVDkxU0FNOTI2MSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOTI2MUVLKSArPSBib2FyZC1zYW05MjYxZWsubwotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMTBFSykgKz0gYm9hcmQtc2FtOTI2MWVrLm8KLQotIyBBVDkxU0FNOTI2MyBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOTI2M0VLKSArPSBib2FyZC1zYW05MjYzZWsubwotCi0jIEFUOTFTQU05UkwgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlSTEVLKQkrPSBib2FyZC1zYW05cmxlay5vCi0KLSMgQVQ5MVNBTTlHMjAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMjBFSykgKz0gYm9hcmQtc2FtOWcyMGVrLm8KLW9iai0kKENPTkZJR19NQUNIX0NQVTlHMjApCSs9IGJvYXJkLWNwdTlrcmVhLm8KLW9iai0kKENPTkZJR19NQUNIX1NUQU1QOUcyMCkJKz0gYm9hcmQtc3RhbXA5ZzIwLm8KLW9iai0kKENPTkZJR19NQUNIX1BPUlRVWEcyMCkJKz0gYm9hcmQtc3RhbXA5ZzIwLm8KLW9iai0kKENPTkZJR19NQUNIX1BDT05UUk9MX0cyMCkJKz0gYm9hcmQtcGNvbnRyb2wtZzIwLm8gYm9hcmQtc3RhbXA5ZzIwLm8KLW9iai0kKENPTkZJR19NQUNIX0dTSUExOFMpCSs9IGJvYXJkLWdzaWExOHMubyBib2FyZC1zdGFtcDlnMjAubwotCi0jIEFUOTFTQU05MjYwL0FUOTFTQU05RzIwIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKLW9iai0kKENPTkZJR19NQUNIX1NOQVBQRVJfOTI2MCkJKz0gYm9hcmQtc25hcHBlcjkyNjAubwotCi0jIEFUOTFTQU05RzQ1IGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKLW9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05TTEwRzQ1RUspICs9IGJvYXJkLXNhbTltMTBnNDVlay5vCi0KICMgQVQ5MVNBTSBib2FyZCB3aXRoIGRldmljZS10cmVlCiBvYmotJChDT05GSUdfTUFDSF9BVDkxUk05MjAwX0RUKSArPSBib2FyZC1kdC1ybTkyMDAubwogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlfRFQpICs9IGJvYXJkLWR0LXNhbTkubwogCiAjIFNBTUE1IGJvYXJkIHdpdGggZGV2aWNlLXRyZWUKLW9iai0kKENPTkZJR19NQUNIX1NBTUE1X0RUKSArPSBib2FyZC1kdC1zYW1hNS5vCi0KLSMgQVQ5MVg0MCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9BVDkxRUIwMSkJKz0gYm9hcmQtZWIwMS5vCi0KLSMgRHJpdmVycwotb2JqLXkJCQkJKz0gbGVkcy5vCitvYmotJChDT05GSUdfU09DX1NBTUE1KQkJKz0gYm9hcmQtZHQtc2FtYTUubwogCiAjIFBvd2VyIE1hbmFnZW1lbnQKIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlLmJvb3QKaW5kZXggNTMwOWY5Yi4uMjllZDBmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlLmJvb3QKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlLmJvb3QKQEAgLTMsMTIgKzMsNiBAQAogIyAgIFBBUkFNU19QSFlTIG11c3QgYmUgd2l0aGluIDRNQiBvZiBaUkVMQUREUgogIyAgIElOSVRSRF9QSFlTIG11c3QgYmUgaW4gUkFNCiAKLWlmZXEgKCQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpLHkpCi0gICB6cmVsYWRkci15CSs9IDB4NzAwMDgwMDAKLXBhcmFtc19waHlzLXkJOj0gMHg3MDAwMDEwMAotaW5pdHJkX3BoeXMteQk6PSAweDcwNDEwMDAwCi1lbHNlCiAgICB6cmVsYWRkci15CSs9IDB4MjAwMDgwMDAKIHBhcmFtc19waHlzLXkJOj0gMHgyMDAwMDEwMAogaW5pdHJkX3BoeXMteQk6PSAweDIwNDEwMDAwCi1lbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFfYWljLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MV9haWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFlYTY2MS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MV9haWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfYWljLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5Ci0gKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKLSAqCi0gKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQUlDKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdpc3RlcnMuCi0gKiBCYXNlZCBvbiBBVDkxUk05MjAwIGRhdGFzaGVldCByZXZpc2lvbiBFLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBBVDkxX0FJQ19ICi0jZGVmaW5lIEFUOTFfQUlDX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIF9faW9tZW0gKmF0OTFfYWljX2Jhc2U7Ci0KLSNkZWZpbmUgYXQ5MV9haWNfcmVhZChmaWVsZCkgXAotCV9fcmF3X3JlYWRsKGF0OTFfYWljX2Jhc2UgKyBmaWVsZCkKLQotI2RlZmluZSBhdDkxX2FpY193cml0ZShmaWVsZCwgdmFsdWUpIFwKLQlfX3Jhd193cml0ZWwodmFsdWUsIGF0OTFfYWljX2Jhc2UgKyBmaWVsZCkKLSNlbHNlCi0uZXh0ZXJuIGF0OTFfYWljX2Jhc2UKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgaXJxIGxpbmVzIG1hbmFnZWQgYnkgQUlDICovCi0jZGVmaW5lIE5SX0FJQ19JUlFTCTMyCi0jZGVmaW5lIE5SX0FJQzVfSVJRUwkxMjgKLQotI2RlZmluZSBBVDkxX0FJQzVfU1NSCQkweDAJCQkvKiBTb3VyY2UgU2VsZWN0IFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSAJQVQ5MV9BSUM1X0lOVFNFTF9NU0sJKDB4N2YgPDwgMCkJCS8qIEludGVycnVwdCBMaW5lIFNlbGVjdGlvbiBNYXNrICovCi0KLSNkZWZpbmUgQVQ5MV9BSUNfSVJRX01JTl9QUklPUklUWQkwCi0jZGVmaW5lIEFUOTFfQUlDX0lSUV9NQVhfUFJJT1JJVFkJNwotCi0jZGVmaW5lIEFUOTFfQUlDX1NNUihuKQkJKChuKSAqIDQpCQkvKiBTb3VyY2UgTW9kZSBSZWdpc3RlcnMgMC0zMSAqLwotI2RlZmluZSBBVDkxX0FJQzVfU01SCQkweDQJCQkvKiBTb3VyY2UgTW9kZSBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUJCUFUOTFfQUlDX1BSSU9SCQkoNyA8PCAwKQkJLyogUHJpb3JpdHkgTGV2ZWwgKi8KLSNkZWZpbmUJCUFUOTFfQUlDX1NSQ1RZUEUJKDMgPDwgNSkJCS8qIEludGVycnVwdCBTb3VyY2UgVHlwZSAqLwotI2RlZmluZQkJCUFUOTFfQUlDX1NSQ1RZUEVfTE9XCQkoMCA8PCA1KQotI2RlZmluZQkJCUFUOTFfQUlDX1NSQ1RZUEVfRkFMTElORwkoMSA8PCA1KQotI2RlZmluZQkJCUFUOTFfQUlDX1NSQ1RZUEVfSElHSAkJKDIgPDwgNSkKLSNkZWZpbmUJCQlBVDkxX0FJQ19TUkNUWVBFX1JJU0lORwkJKDMgPDwgNSkKLQotI2RlZmluZSBBVDkxX0FJQ19TVlIobikJCSgweDgwICsgKChuKSAqIDQpKQkvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVycyAwLTMxICovCi0jZGVmaW5lIEFUOTFfQUlDNV9TVlIJCTB4OAkJCS8qIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0lWUgkJMHgxMDAJCQkvKiBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JVlIJCTB4MTAJCQkvKiBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19GVlIJCTB4MTA0CQkJLyogRmFzdCBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9GVlIJCTB4MTQJCQkvKiBGYXN0IEludGVycnVwdCBWZWN0b3IgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0lTUgkJMHgxMDgJCQkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JU1IJCTB4MTgJCQkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZQkJQVQ5MV9BSUNfSVJRSUQJCSgweDFmIDw8IDApCQkvKiBDdXJyZW50IEludGVycnVwdCBJZGVudGlmaWVyICovCi0KLSNkZWZpbmUgQVQ5MV9BSUNfSVBSCQkweDEwYwkJCS8qIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JUFIwCQkweDIwCQkJLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgMCBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0lQUjEJCTB4MjQJCQkvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAxIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQzVfSVBSMgkJMHgyOAkJCS8qIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIDIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JUFIzCQkweDJjCQkJLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgMyBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfSU1SCQkweDExMAkJCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JTVIJCTB4MzAJCQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfQ0lTUgkJMHgxMTQJCQkvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0NJU1IJCTB4MzQJCQkvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lCQlBVDkxX0FJQ19ORklRCQkoMSA8PCAwKQkJLyogbkZJUSBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfQUlDX05JUlEJCSgxIDw8IDEpCQkvKiBuSVJRIFN0YXR1cyAqLwotCi0jZGVmaW5lIEFUOTFfQUlDX0lFQ1IJCTB4MTIwCQkJLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JRUNSCQkweDQwCQkJLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19JRENSCQkweDEyNAkJCS8qIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0lEQ1IJCTB4NDQJCQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19JQ0NSCQkweDEyOAkJCS8qIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JQ0NSCQkweDQ4CQkJLyogSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0lTQ1IJCTB4MTJjCQkJLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JU0NSCQkweDRjCQkJLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19FT0lDUgkJMHgxMzAJCQkvKiBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0VPSUNSCQkweDM4CQkJLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19TUFUJCTB4MTM0CQkJLyogU3B1cmlvdXMgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfU1BVCQkweDNjCQkJLyogU3B1cmlvdXMgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfRENSCQkweDEzOAkJCS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0RDUgkJMHg2YwkJCS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lCQlBVDkxX0FJQ19EQ1JfUFJPVAkoMSA8PCAwKQkJLyogUHJvdGVjdGlvbiBNb2RlICovCi0jZGVmaW5lCQlBVDkxX0FJQ19EQ1JfR01TSwkoMSA8PCAxKQkJLyogR2VuZXJhbCBNYXNrICovCi0KLSNkZWZpbmUgQVQ5MV9BSUNfRkZFUgkJMHgxNDAJCQkvKiBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyIFtTQU05IG9ubHldICovCi0jZGVmaW5lIEFUOTFfQUlDNV9GRkVSCQkweDUwCQkJLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfRkZEUgkJMHgxNDQJCQkvKiBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3RlciBbU0FNOSBvbmx5XSAqLwotI2RlZmluZSBBVDkxX0FJQzVfRkZEUgkJMHg1NAkJCS8qIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19GRlNSCQkweDE0OAkJCS8qIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgW1NBTTkgb25seV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0ZGU1IJCTB4NTgJCQkvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyIFtBSUM1XSAqLwotCi12b2lkIGF0OTFfYWljX2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotdm9pZCBhdDkxX2FpYzVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFfdGMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxX3RjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YTMxN2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFfdGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3RjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKLSAqCi0gKiBUaW1lci9Db3VudGVyIFVuaXQgKFRDKSByZWdpc3RlcnMuCi0gKiBCYXNlZCBvbiBBVDkxUk05MjAwIGRhdGFzaGVldCByZXZpc2lvbiBFLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBBVDkxX1RDX0gKLSNkZWZpbmUgQVQ5MV9UQ19ICi0KLSNkZWZpbmUgQVQ5MV9UQ19CQ1IJCTB4YzAJCS8qIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfVENfU1lOQwkJKDEgPDwgMCkJLyogU3luY2hybyBDb21tYW5kICovCi0KLSNkZWZpbmUgQVQ5MV9UQ19CTVIJCTB4YzQJCS8qIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfVENfVEMwWEMwUwkJKDMgPDwgMCkJLyogRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzBYQzBTX1RDTEswCQkoMCA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfVEMwWEMwU19OT05FCQkoMSA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfVEMwWEMwU19USU9BMQkJKDIgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX1RDX1RDMFhDMFNfVElPQTIJCSgzIDw8IDApCi0jZGVmaW5lCQlBVDkxX1RDX1RDMVhDMVMJCSgzIDw8IDIpCS8qIEV4dGVybmFsIENsb2NrIFNpZ25hbCAxIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfVENfVEMxWEMxU19UQ0xLMQkJKDAgPDwgMikKLSNkZWZpbmUJCQlBVDkxX1RDX1RDMVhDMVNfTk9ORQkJKDEgPDwgMikKLSNkZWZpbmUJCQlBVDkxX1RDX1RDMVhDMVNfVElPQTAJCSgyIDw8IDIpCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzFYQzFTX1RJT0EyCQkoMyA8PCAyKQotI2RlZmluZQkJQVQ5MV9UQ19UQzJYQzJTCQkoMyA8PCA0KQkvKiBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCQlBVDkxX1RDX1RDMlhDMlNfVENMSzIJCSgwIDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzJYQzJTX05PTkUJCSgxIDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzJYQzJTX1RJT0EwCQkoMiA8PCA0KQotI2RlZmluZQkJCUFUOTFfVENfVEMyWEMyU19USU9BMQkJKDMgPDwgNCkKLQotCi0jZGVmaW5lIEFUOTFfVENfQ0NSCQkweDAwCQkvKiBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfVENfQ0xLRU4JCSgxIDw8IDApCS8qIENvdW50ZXIgQ2xvY2sgRW5hYmxlIENvbW1hbmQgKi8KLSNkZWZpbmUJCUFUOTFfVENfQ0xLRElTCQkoMSA8PCAxKQkvKiBDb3VudGVyIENMb2NrIERpc2FibGUgQ29tbWFuZCAqLwotI2RlZmluZQkJQVQ5MV9UQ19TV1RSRwkJKDEgPDwgMikJLyogU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kICovCi0KLSNkZWZpbmUgQVQ5MV9UQ19DTVIJCTB4MDQJCS8qIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9UQ19UQ0NMS1MJCSg3IDw8IDApCS8qIENhcHR1cmUvV2F2ZWZvcm0gTW9kZTogQ2xvY2sgU2VsZWN0aW9uICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzEJCSgwIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzIJCSgxIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzMJCSgyIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzQJCSgzIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzUJCSg0IDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19YQzAJCQkoNSA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfWEMxCQkJKDYgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX1RDX1hDMgkJCSg3IDw8IDApCi0jZGVmaW5lCQlBVDkxX1RDX0NMS0kJCSgxIDw8IDMpCS8qIENhcHR1cmUvV2F2ZWZvcm0gTW9kZTogQ2xvY2sgSW52ZXJ0ICovCi0jZGVmaW5lCQlBVDkxX1RDX0JVUlNUCQkoMyA8PCA0KQkvKiBDYXB0dXJlL1dhdmVmb3JtIE1vZGU6IEJ1cnN0IFNpZ25hbCBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCUFUOTFfVENfTERCU1RPUAkJKDEgPDwgNikJLyogQ2FwdHVyZSBNb2RlOiBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBUQiBMb2FkaW5nICovCi0jZGVmaW5lCQlBVDkxX1RDX0xEQkRJUwkJKDEgPDwgNykJLyogQ2FwdHVyZSBNb2RlOiBDb3VudGVyIENsb2NrIERpc2FibGUgd2l0aCBSQiBMb2FkaW5nICovCi0jZGVmaW5lCQlBVDkxX1RDX0VUUkdFREcJCSgzIDw8IDgpCS8qIENhcHR1cmUgTW9kZTogRXh0ZXJuYWwgVHJpZ2dlciBFZGdlIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJQVQ5MV9UQ19BQkVUUkcJCSgxIDw8IDEwKQkvKiBDYXB0dXJlIE1vZGU6IFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJQVQ5MV9UQ19DUENUUkcJCSgxIDw8IDE0KQkvKiBDYXB0dXJlIE1vZGU6IFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUgKi8KLSNkZWZpbmUJCUFUOTFfVENfV0FWRQkJKDEgPDwgMTUpCS8qIENhcHR1cmUvV2F2ZWZvcm0gbW9kZSAqLwotI2RlZmluZQkJQVQ5MV9UQ19MRFJBCQkoMyA8PCAxNikJLyogQ2FwdHVyZSBNb2RlOiBSQSBMb2FkaW5nIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJQVQ5MV9UQ19MRFJCCQkoMyA8PCAxOCkJLyogQ2FwdHVyZSBNb2RlOiBSQiBMb2FkaW5nIFNlbGVjdGlvbiAqLwotCi0jZGVmaW5lCQlBVDkxX1RDX0NQQ1NUT1AJCSgxIDw8ICA2KQkvKiBXYXZlZm9ybSBNb2RlOiBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlICovCi0jZGVmaW5lCQlBVDkxX1RDX0NQQ0RJUwkJKDEgPDwgIDcpCS8qIFdhdmVmb3JtIE1vZGU6IENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUgKi8KLSNkZWZpbmUJCUFUOTFfVENfRUVWVEVERwkJKDMgPDwgIDgpCS8qIFdhdmVmb3JtIE1vZGU6IEV4dGVybmFsIEV2ZW50IEVkZ2UgU2VsZWN0aW9uICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19FRVZURURHX05PTkUJCSgwIDw8IDgpCi0jZGVmaW5lCQkJQVQ5MV9UQ19FRVZURURHX1JJU0lORwkJKDEgPDwgOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRFREdfRkFMTElORwkJKDIgPDwgOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRFREdfQk9USAkJKDMgPDwgOCkKLSNkZWZpbmUJCUFUOTFfVENfRUVWVAkJKDMgPDwgMTApCS8qIFdhdmVmb3JtIE1vZGU6IEV4dGVybmFsIEV2ZW50IFNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfVENfRUVWVF9USU9CCQkoMCA8PCAxMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRfWEMwCQkoMSA8PCAxMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRfWEMxCQkoMiA8PCAxMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRfWEMyCQkoMyA8PCAxMCkKLSNkZWZpbmUJCUFUOTFfVENfRU5FVFJHCQkoMSA8PCAxMikJLyogV2F2ZWZvcm0gTW9kZTogRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBFbmFibGUgKi8KLSNkZWZpbmUJCUFUOTFfVENfV0FWRVNFTAkJKDMgPDwgMTMpCS8qIFdhdmVmb3JtIE1vZGU6IFdhdmVmb3JtIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfVENfV0FWRVNFTF9VUAkJKDAgPDwgMTMpCi0jZGVmaW5lCQkJQVQ5MV9UQ19XQVZFU0VMX1VQX0FVVE8JCSgyIDw8IDEzKQotI2RlZmluZQkJCUFUOTFfVENfV0FWRVNFTF9VUERPV04JCSgxIDw8IDEzKQotI2RlZmluZQkJCUFUOTFfVENfV0FWRVNFTF9VUERPV05fQVVUTwkoMyA8PCAxMykKLSNkZWZpbmUJCUFUOTFfVENfQUNQQQkJKDMgPDwgMTYpCS8qIFdhdmVmb3JtIE1vZGU6IFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0FDUEFfTk9ORQkJKDAgPDwgMTYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BQ1BBX1NFVAkJKDEgPDwgMTYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BQ1BBX0NMRUFSCQkoMiA8PCAxNikKLSNkZWZpbmUJCQlBVDkxX1RDX0FDUEFfVE9HR0xFCQkoMyA8PCAxNikKLSNkZWZpbmUJCUFUOTFfVENfQUNQQwkJKDMgPDwgMTgpCS8qIFdhdmVmb3JtIE1vZGU6IFJDIENvbXByZSBFZmZlY3Qgb24gVElPQSAqLwotI2RlZmluZQkJCUFUOTFfVENfQUNQQ19OT05FCQkoMCA8PCAxOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0FDUENfU0VUCQkoMSA8PCAxOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0FDUENfQ0xFQVIJCSgyIDw8IDE4KQotI2RlZmluZQkJCUFUOTFfVENfQUNQQ19UT0dHTEUJCSgzIDw8IDE4KQotI2RlZmluZQkJQVQ5MV9UQ19BRUVWVAkJKDMgPDwgMjApCS8qIFdhdmVmb3JtIE1vZGU6IEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19BRUVWVF9OT05FCQkoMCA8PCAyMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0FFRVZUX1NFVAkJKDEgPDwgMjApCi0jZGVmaW5lCQkJQVQ5MV9UQ19BRUVWVF9DTEVBUgkJKDIgPDwgMjApCi0jZGVmaW5lCQkJQVQ5MV9UQ19BRUVWVF9UT0dHTEUJCSgzIDw8IDIwKQotI2RlZmluZQkJQVQ5MV9UQ19BU1dUUkcJCSgzIDw8IDIyKQkvKiBXYXZlZm9ybSBNb2RlOiBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9BICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19BU1dUUkdfTk9ORQkJKDAgPDwgMjIpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BU1dUUkdfU0VUCQkoMSA8PCAyMikKLSNkZWZpbmUJCQlBVDkxX1RDX0FTV1RSR19DTEVBUgkJKDIgPDwgMjIpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BU1dUUkdfVE9HR0xFCQkoMyA8PCAyMikKLSNkZWZpbmUJCUFUOTFfVENfQkNQQgkJKDMgPDwgMjQpCS8qIFdhdmVmb3JtIE1vZGU6IFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0IgKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0JDUEJfTk9ORQkJKDAgPDwgMjQpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BCX1NFVAkJKDEgPDwgMjQpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BCX0NMRUFSCQkoMiA8PCAyNCkKLSNkZWZpbmUJCQlBVDkxX1RDX0JDUEJfVE9HR0xFCQkoMyA8PCAyNCkKLSNkZWZpbmUJCUFUOTFfVENfQkNQQwkJKDMgPDwgMjYpCS8qIFdhdmVmb3JtIE1vZGU6IFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0IgKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0JDUENfTk9ORQkJKDAgPDwgMjYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BDX1NFVAkJKDEgPDwgMjYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BDX0NMRUFSCQkoMiA8PCAyNikKLSNkZWZpbmUJCQlBVDkxX1RDX0JDUENfVE9HR0xFCQkoMyA8PCAyNikKLSNkZWZpbmUJCUFUOTFfVENfQkVFVlQJCSgzIDw8IDI4KQkvKiBXYXZlZm9ybSBNb2RlOiBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQiAqLwotI2RlZmluZQkJCUFUOTFfVENfQkVFVlRfTk9ORQkJKDAgPDwgMjgpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CRUVWVF9TRVQJCSgxIDw8IDI4KQotI2RlZmluZQkJCUFUOTFfVENfQkVFVlRfQ0xFQVIJCSgyIDw8IDI4KQotI2RlZmluZQkJCUFUOTFfVENfQkVFVlRfVE9HR0xFCQkoMyA8PCAyOCkKLSNkZWZpbmUJCUFUOTFfVENfQlNXVFJHCQkoMyA8PCAzMCkJLyogV2F2ZWZvcm0gTW9kZTogU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQiAqLwotI2RlZmluZQkJCUFUOTFfVENfQlNXVFJHX05PTkUJCSgwIDw8IDMwKQotI2RlZmluZQkJCUFUOTFfVENfQlNXVFJHX1NFVAkJKDEgPDwgMzApCi0jZGVmaW5lCQkJQVQ5MV9UQ19CU1dUUkdfQ0xFQVIJCSgyIDw8IDMwKQotI2RlZmluZQkJCUFUOTFfVENfQlNXVFJHX1RPR0dMRQkJKDMgPDwgMzApCi0KLSNkZWZpbmUgQVQ5MV9UQ19DVgkJMHgxMAkJLyogQ291bnRlciBWYWx1ZSAqLwotI2RlZmluZSBBVDkxX1RDX1JBCQkweDE0CQkvKiBSZWdpc3RlciBBICovCi0jZGVmaW5lIEFUOTFfVENfUkIJCTB4MTgJCS8qIFJlZ2lzdGVyIEIgKi8KLSNkZWZpbmUgQVQ5MV9UQ19SQwkJMHgxYwkJLyogUmVnaXN0ZXIgQyAqLwotCi0jZGVmaW5lIEFUOTFfVENfU1IJCTB4MjAJCS8qIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9UQ19DT1ZGUwkJKDEgPDwgIDApCS8qIENvdW50ZXIgT3ZlcmZsb3cgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX1RDX0xPVlJTCQkoMSA8PCAgMSkJLyogTG9hZCBPdmVycnVuIFN0YXR1cyAqLwotI2RlZmluZQkJQVQ5MV9UQ19DUEFTCQkoMSA8PCAgMikJLyogUkEgQ29tcGFyZSBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfVENfQ1BCUwkJKDEgPDwgIDMpCS8qIFJCIENvbXBhcmUgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX1RDX0NQQ1MJCSgxIDw8ICA0KQkvKiBSQyBDb21wYXJlIFN0YXR1cyAqLwotI2RlZmluZQkJQVQ5MV9UQ19MRFJBUwkJKDEgPDwgIDUpCS8qIFJBIExvYWRpbmcgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX1RDX0xEUkJTCQkoMSA8PCAgNikJLyogUkIgTG9hZGluZyBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfVENfRVRSR1MJCSgxIDw8ICA3KQkvKiBFeHRlcm5hbCBUcmlnZ2VyIFN0YXR1cyAqLwotI2RlZmluZQkJQVQ5MV9UQ19DTEtTVEEJCSgxIDw8IDE2KQkvKiBDbG9jayBFbmFibGluZyBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfVENfTVRJT0EJCSgxIDw8IDE3KQkvKiBUSU9BIE1pcnJvciAqLwotI2RlZmluZQkJQVQ5MV9UQ19NVElPQgkJKDEgPDwgMTgpCS8qIFRJT0IgTWlycm9yICovCi0KLSNkZWZpbmUgQVQ5MV9UQ19JRVIJCTB4MjQJCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9UQ19JRFIJCTB4MjgJCS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfVENfSU1SCQkweDJjCQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMC5jCmluZGV4IDAzODcwMmUuLmI1MjkxNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDAuYwpAQCAtMTEsMjk2ICsxMSwxNSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX3N0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgInBtLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PTERfQ0xLX0FUOTEpCi0jaW5jbHVkZSAiY2xvY2suaCIKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ2xvY2tzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgotICovCi1zdGF0aWMgc3RydWN0IGNsayB1ZGNfY2xrID0gewotCS5uYW1lCQk9ICJ1ZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVURQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgb2hjaV9jbGsgPSB7Ci0JLm5hbWUJCT0gIm9oY2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVUhQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgZXRoZXJfY2xrID0gewotCS5uYW1lCQk9ICJldGhlcl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9FTUFDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jX2NsayA9IHsKLQkubmFtZQkJPSAibWNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX01DSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aV9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UV0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VTMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0Ml9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0Ml9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9VUzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDNfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVVMzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpX2NsayA9IHsKLQkubmFtZQkJPSAic3BpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1NQSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1BJT0EsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9CX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9QSU9CLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfUElPQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0RfY2xrID0gewotCS5uYW1lCQk9ICJwaW9EX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1BJT0QsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MwX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9TU0MwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfU1NDMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzJfY2xrID0gewotCS5uYW1lCQk9ICJzc2MyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1NTQzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzBfY2xrID0gewotCS5uYW1lCQk9ICJ0YzBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVEMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NsayA9IHsKLQkubmFtZQkJPSAidGMxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1RDMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMl9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UQzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzNfY2xrID0gewotCS5uYW1lCQk9ICJ0YzNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVEMzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGM0X2NsayA9IHsKLQkubmFtZQkJPSAidGM0X2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1RDNCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjNV9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjNV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UQzUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQV9jbGssCi0JJnBpb0JfY2xrLAotCSZwaW9DX2NsaywKLQkmcGlvRF9jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJnVzYXJ0M19jbGssCi0JJm1tY19jbGssCi0JJnVkY19jbGssCi0JJnR3aV9jbGssCi0JJnNwaV9jbGssCi0JJnNzYzBfY2xrLAotCSZzc2MxX2NsaywKLQkmc3NjMl9jbGssCi0JJnRjMF9jbGssCi0JJnRjMV9jbGssCi0JJnRjMl9jbGssCi0JJnRjM19jbGssCi0JJnRjNF9jbGssCi0JJnRjNV9jbGssCi0JJm9oY2lfY2xrLAotCSZldGhlcl9jbGssCi0JLy8gaXJxMCAuLiBpcnE2Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcGVyaXBoX2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJhdG1lbF90Y2IuMSIsICZ0YzNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImF0bWVsX3RjYi4xIiwgJnRjNF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiYXRtZWxfdGNiLjEiLCAmdGM1X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMCIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMSIsICZzc2MxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMiIsICZzc2MyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmZDAwMDAuc3NjIiwgJnNzYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZkNDAwMC5zc2MiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmQ4MDAwLnNzYyIsICZzc2MyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxcm05MjAwLjAiLCAmdHdpX2NsayksCi0JLyogZmFrZSBoY2xrIGNsb2NrICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MV9vaGNpIiwgJm9oY2lfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9EIiwgJnBpb0RfY2xrKSwKLQkvKiB1c2FydCBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmYyMDAuc2VyaWFsIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmMwMDAwLnNlcmlhbCIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmYzQwMDAuc2VyaWFsIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZjODAwMC5zZXJpYWwiLCAmdXNhcnQyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmNjMDAwLnNlcmlhbCIsICZ1c2FydDNfY2xrKSwKLQkvKiB0YyBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmE0MDAwLnRpbWVyIiwgJnRjM19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmYTQwMDAudGltZXIiLCAmdGM0X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZhNDAwMC50aW1lciIsICZ0YzVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmZmZiNDAwMC5tbWMiLCAmbW1jX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImVtYWNfY2xrIiwgImZmZmJjMDAwLmV0aGVybmV0IiwgJmV0aGVyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmI4MDAwLmkyYyIsICZ0d2lfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICIzMDAwMDAub2hjaSIsICZvaGNpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9DX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmYTAwLmdwaW8iLCAmcGlvRF9jbGspLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHVzYXJ0X2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjAiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMSIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMiIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMyIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNCIsICZ1c2FydDNfY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgZm91ciBwcm9ncmFtbWFibGUgY2xvY2tzLgotICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7Ci0JLm5hbWUJCT0gInBjazAiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7Ci0JLm5hbWUJCT0gInBjazEiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAxLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazIgPSB7Ci0JLm5hbWUJCT0gInBjazIiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAyLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazMgPSB7Ci0JLm5hbWUJCT0gInBjazMiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAzLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFybTkyMDBfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotCWNsa19yZWdpc3RlcigmcGNrMik7Ci0JY2xrX3JlZ2lzdGVyKCZwY2szKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFybTkyMDBfcmVnaXN0ZXJfY2xvY2tzIE5VTEwKLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEdQSU8KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXJtOTIwMF9ncGlvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5pZAkJPSBBVDkxUk05MjAwX0lEX1BJT0EsCi0JCS5yZWdiYXNlCT0gQVQ5MVJNOTIwMF9CQVNFX1BJT0EsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVJNOTIwMF9JRF9QSU9CLAotCQkucmVnYmFzZQk9IEFUOTFSTTkyMDBfQkFTRV9QSU9CLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFSTTkyMDBfSURfUElPQywKLQkJLnJlZ2Jhc2UJPSBBVDkxUk05MjAwX0JBU0VfUElPQywKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxUk05MjAwX0lEX1BJT0QsCi0JCS5yZWdiYXNlCT0gQVQ5MVJNOTIwMF9CQVNFX1BJT0QsCi0JfQotfTsKIAogc3RhdGljIHZvaWQgYXQ5MXJtOTIwMF9pZGxlKHZvaWQpCiB7CkBAIC0zMjksNzQgKzQ4LDE0IEBACiAJYXQ5MV9pbml0X3NyYW0oMCwgQVQ5MVJNOTIwMF9TUkFNX0JBU0UsIEFUOTFSTTkyMDBfU1JBTV9TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFybTkyMDBfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxcm05MjAwX2lvcmVtYXBfc3QoQVQ5MVJNOTIwMF9CQVNFX1NUKTsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxUk05MjAwX0JBU0VfTUMsIDI1Nik7Ci0JYXQ5MV9wbV9zZXRfc3RhbmRieShhdDkxcm05MjAwX3N0YW5kYnkpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9pbml0aWFsaXplKHZvaWQpCiB7CiAJYXJtX3BtX2lkbGUgPSBhdDkxcm05MjAwX2lkbGU7CiAJYXJtX3BtX3Jlc3RhcnQgPSBhdDkxcm05MjAwX3Jlc3RhcnQ7Ci0KLQkvKiBJbml0aWFsaXplIEdQSU8gc3Vic3lzdGVtICovCi0JYXQ5MV9ncGlvX2luaXQoYXQ5MXJtOTIwMF9ncGlvLAotCQljcHVfaXNfYXQ5MXJtOTIwMF9iZ2EoKSA/IEFUOTFSTTkyMDBfQkdBIDogQVQ5MVJNOTIwMF9QUUZQKTsKIH0KIAogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEludGVycnVwdCBpbml0aWFsaXphdGlvbgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBkZWZhdWx0IGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgKDAgPSBsb3dlc3QsIDcgPSBoaWdoZXN0KS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdDkxcm05MjAwX2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0gewotCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCi0JNywJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBEICovCi0JNSwJLyogVVNBUlQgMCAqLwotCTUsCS8qIFVTQVJUIDEgKi8KLQk1LAkvKiBVU0FSVCAyICovCi0JNSwJLyogVVNBUlQgMyAqLwotCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KLQkyLAkvKiBVU0IgRGV2aWNlIFBvcnQgKi8KLQk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgKi8KLQk1LAkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDIgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDMgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDQgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDUgKi8KLQkyLAkvKiBVU0IgSG9zdCBwb3J0ICovCi0JMywJLyogRXRoZXJuZXQgTUFDICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTIpICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTMpICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTQpICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTUpICovCi0JMAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRNikgKi8KLX07Ci0KIEFUOTFfU09DX1NUQVJUKGF0OTFybTkyMDApCiAJLm1hcF9pbyA9IGF0OTFybTkyMDBfbWFwX2lvLAotCS5kZWZhdWx0X2lycV9wcmlvcml0eSA9IGF0OTFybTkyMDBfZGVmYXVsdF9pcnFfcHJpb3JpdHksCi0JLmV4dGVybl9pcnEgPSAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlExKQotCQkgICAgfCAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTIpIHwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlEzKQotCQkgICAgfCAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTQpIHwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlE1KQotCQkgICAgfCAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTYpLAotCS5pb3JlbWFwX3JlZ2lzdGVycyA9IGF0OTFybTkyMDBfaW9yZW1hcF9yZWdpc3RlcnMsCi0JLnJlZ2lzdGVyX2Nsb2NrcyA9IGF0OTFybTkyMDBfcmVnaXN0ZXJfY2xvY2tzLAogCS5pbml0ID0gYXQ5MXJtOTIwMF9pbml0aWFsaXplLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZjFlYWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIxMiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfZGV2aWNlcy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBUaGliYXV0IFZBUkVORSA8dmFyZW5ldEBwYXJpc2MtbGludXgub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9tYy5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9yYW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIEhvc3QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCi1zdGF0aWMgdTY0IG9oY2lfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIHVzYmhfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9VSFBfQkFTRSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVUhQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VIUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdXNiaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfb2hjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmb2hjaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYmhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVzYmhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCS8qIEVuYWJsZSBvdmVyY3VycmVudCBub3RpZmljYXRpb24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydHM7IGkrKykgewotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5vdmVyY3VycmVudF9waW5baV0pKQotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5vdmVyY3VycmVudF9waW5baV0sIDEpOwotCX0KLQotCXVzYmhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF91c2JoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgRGV2aWNlIChHYWRnZXQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9BVDkxX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB1ZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1ZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfVURQLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1VEUCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVURQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VEUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKLQl9Ci0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cHVsbHVwX3BpbikpCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnB1bGx1cF9waW4sIDApOwotCi0JdWRjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfdWRjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgRXRoZXJuZXQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUk1fQVQ5MV9FVEhFUikgfHwgZGVmaW5lZChDT05GSUdfQVJNX0FUOTFfRVRIRVJfTU9EVUxFKQotc3RhdGljIHU2NCBldGhfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBldGhfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfRU1BQywKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9FTUFDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9FTUFDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX0VNQUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX2V0aF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfZXRoZXIiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmV0aF9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmV0aF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZXRoX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXRoX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5waHlfaXJxX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5waHlfaXJxX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnBoeV9pcnFfcGluLCAxKTsKLQl9Ci0KLQkvKiBQaW5zIHVzZWQgZm9yIE1JSSBhbmQgUk1JSSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFTURJTyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTUsIDApOwkvKiBFTURDICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNCwgMCk7CS8qIEVSWEVSICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMywgMCk7CS8qIEVSWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsJLyogRVJYMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDApOwkvKiBFQ1JTX0VDUlNEViAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOwkvKiBFVFgxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAwKTsJLyogRVRYMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBOCwgMCk7CS8qIEVUWEVOICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE3LCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCi0KLQlpZiAoIWRhdGEtPmlzX3JtaWkpIHsKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxOSwgMCk7CS8qIEVSWENLICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTgsIDApOwkvKiBFQ09MICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDApOwkvKiBFUlhEViAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE2LCAwKTsJLyogRVJYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE1LCAwKTsJLyogRVJYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE0LCAwKTsJLyogRVRYRVIgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMywgMCk7CS8qIEVUWDMgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMCk7CS8qIEVUWDIgKi8KLQl9Ci0KLQlldGhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9ldGhfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENvbXBhY3QgRmxhc2ggLyBQQ01DSUEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxX0NGKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxX0NGX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIGNmX2RhdGE7Ci0KLSNkZWZpbmUgQ0ZfQkFTRQkJQVQ5MV9DSElQU0VMRUNUXzQKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IENGX0JBU0UsCi0JCS8qIHRpZXMgdXAgQ1M0LCBDUzUgYW5kIENTNiAqLwotCQkuZW5kCT0gQ0ZfQkFTRSArICgweDMwMDAwMDAwIC0gMSksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEFORDE2QklULAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX2NmX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9jZiIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjZl9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY2ZfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjZl9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgaW50IGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JZGF0YS0+Y2hpcHNlbGVjdCA9IDQ7CQkvKiBjYW4gb25seSB1c2UgRUJJIENoaXBTZWxlY3QgNCAqLwotCi0JLyogQ0YgdGFrZXMgb3ZlciBDUzQsIENTNSwgQ1M2ICovCi0JY3NhID0gYXQ5MV9yYW1jX3JlYWQoMCwgQVQ5MV9FQklfQ1NBKTsKLQlhdDkxX3JhbWNfd3JpdGUoMCwgQVQ5MV9FQklfQ1NBLCBjc2EgfCBBVDkxX0VCSV9DUzRBX1NNQ19DT01QQUNURkxBU0gpOwotCi0JLyoKLQkgKiBTdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgdGltaW5nIGFkanVzdG1lbnRzLgotCSAqIFJFVklTSVQ6ICB0aGVzZSB0aW1pbmdzIGFyZSBpbiB0ZXJtcyBvZiBNQ0sgY3ljbGVzLCBzbwotCSAqIHdoZW4gTUNLIGNoYW5nZXMgKGNwdWZyZXEgZXRjKSBzbyBtdXN0IHRoZXNlIHZhbHVlcy4uLgotCSAqLwotCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX1NNQ19DU1IoNCksCi0JCQkJICBBVDkxX1NNQ19BQ1NTX1NURAotCQkJCXwgQVQ5MV9TTUNfREJXXzE2Ci0JCQkJfCBBVDkxX1NNQ19CQVQKLQkJCQl8IEFUOTFfU01DX1dTRU4KLQkJCQl8IEFUOTFfU01DX05XU18oMzIpCS8qIHdhaXQgc3RhdGVzICovCi0JCQkJfCBBVDkxX1NNQ19SV1NFVFVQXyg2KQkvKiBzZXR1cCB0aW1lICovCi0JCQkJfCBBVDkxX1NNQ19SV0hPTERfKDQpCS8qIGhvbGQgdGltZSAqLwotCSk7Ci0KLQkvKiBpbnB1dC9pcnEgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5pcnFfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmlycV9waW4sIDEpOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5pcnFfcGluLCAxKTsKLQl9Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKLQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5kZXRfcGluLCAxKTsKLQotCS8qIG91dHB1dHMsIGluaXRpYWxseSBvZmYgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52Y2NfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmNjX3BpbiwgMCk7Ci0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cnN0X3BpbiwgMCk7Ci0KLQkvKiBmb3JjZSBwb3dlcm9uIGRlZmF1bHRzIGZvciB0aGVzZSBwaW5zIC4uLiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIEEyNS9DRlJOVyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDApOwkvKiBOQ1M0L0NGQ1MgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogTkNTNS9DRkNFMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTIsIDApOwkvKiBOQ1M2L0NGQ0UyICovCi0KLQkvKiBuV0FJVCBpcyBfbm90XyBhIGRlZmF1bHQgc2V0dGluZyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNiwgMSk7CS8qIG5XQUlUICovCi0KLQljZl9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX2NmX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIE1NQyAvIFNECi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTU1DX0FUTUVMTUNJKQotc3RhdGljIHU2NCBtbWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIG1tY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9NQ0ksCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9NQ0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfTUNJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9tbWNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBzbG90X2NvdW50ID0gMDsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUNJX01BWF9OUl9TTE9UUzsgaSsrKSB7Ci0KLQkJaWYgKCFkYXRhLT5zbG90W2ldLmJ1c193aWR0aCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGlucHV0L2lycSAqLwotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4pKSB7Ci0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbiwgMSk7Ci0JCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4sIDEpOwotCQl9Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbaV0ud3BfcGluKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFtpXS53cF9waW4sIDEpOwotCi0JCXN3aXRjaCAoaSkgewotCQljYXNlIDA6CQkJCQkvKiBzbG90IEEgKi8KLQkJCS8qIENNRCAqLwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMSk7Ci0JCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAxKTsKLQkJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIzLCAxKTsKLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwotCQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCNSwgMSk7Ci0JCQl9Ci0JCQlzbG90X2NvdW50Kys7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgkJCQkJLyogc2xvdCBCICovCi0JCQkvKiBDTUQgKi8KLQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOCwgMSk7Ci0JCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTksIDEpOwotCQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoID09IDQpIHsKLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsKLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTExLCAxKTsKLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAxKTsKLQkJCX0KLQkJCXNsb3RfY291bnQrKzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIkFUOTE6IFNEL01NQyBzbG90ICVkIG5vdCBhdmFpbGFibGVcbiIsIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNsb3RfY291bnQpIHsKLQkJCS8qIENMSyAqLwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNywgMCk7Ci0KLQkJCW1tY19kYXRhID0gKmRhdGE7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfbW1jX2RldmljZSk7Ci0JCX0KLQl9Ci0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBOQU5EIC8gU21hcnRNZWRpYQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7Ci0KLSNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IE5BTkRfQkFTRSwKLQkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX25hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9uYW5kIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgaW50IGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogZW5hYmxlIHRoZSBhZGRyZXNzIHJhbmdlIG9mIENTMyAqLwotCWNzYSA9IGF0OTFfcmFtY19yZWFkKDAsIEFUOTFfRUJJX0NTQSk7Ci0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfRUJJX0NTQSwgY3NhIHwgQVQ5MV9FQklfQ1MzQV9TTUNfU01BUlRNRURJQSk7Ci0KLQkvKiBzZXQgdGhlIGJ1cyBpbnRlcmZhY2UgY2hhcmFjdGVyaXN0aWNzICovCi0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfU01DX0NTUigzKSwgQVQ5MV9TTUNfQUNTU19TVEQgfCBBVDkxX1NNQ19EQldfOCB8IEFUOTFfU01DX1dTRU4KLQkJfCBBVDkxX1NNQ19OV1NfKDUpCi0JCXwgQVQ5MV9TTUNfVERGXygxKQotCQl8IEFUOTFfU01DX1JXU0VUVVBfKDApCS8qIHREUyBEYXRhIFNldCB1cCBUaW1lIDMwIC0gbnMgKi8KLQkJfCBBVDkxX1NNQ19SV0hPTERfKDEpCS8qIHRESCBEYXRhIEhvbGQgVGltZSAyMCAtIG5zICovCi0JKTsKLQotCS8qIGVuYWJsZSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5lbmFibGVfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7Ci0KLQkvKiByZWFkeS9idXN5IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnJkeV9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOwotCi0JLyogY2FyZCBkZXRlY3QgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZGV0X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOwkJLyogU01PRSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMywgMCk7CQkvKiBTTVdFICovCi0KLQluYW5kX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfbmFuZF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRXSSAoaTJjKQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFByZWZlciB0aGUgR1BJTyBjb2RlIHNpbmNlIHRoZSBUV0kgY29udHJvbGxlciBpc24ndCByb2J1c3QKLSAqIChnZXRzIG92ZXJydW5zIGFuZCB1bmRlcnJ1bnMgdW5kZXIgbG9hZCkgYW5kIGNhbiBvbmx5IGlzc3VlCi0gKiByZXBlYXRlZCBTVEFSVHMgaW4gb25lIHNjZW5hcmlvICh0aGUgZHJpdmVyIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGVtKS4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKLQkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQTI1LAotCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnNjbF9waW4JCT0gQVQ5MV9QSU5fUEEyNiwKLQkuc2NsX2lzX29wZW5fZHJhaW4JPSAxLAotCS51ZGVsYXkJCQk9IDIsCQkvKiB+MTAwIGtIeiAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF90d2lfZGV2aWNlID0gewotCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAotCS5pZAkJCT0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmcGRhdGEsCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEEyNSwgMSk7CQkvKiBUV0QgKFNEQSkgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI1LCAxKTsKLQotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjYsIDEpOwkJLyogVFdDSyAoU0NMKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjYsIDEpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3R3aV9kZXZpY2UpOwotfQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0FUOTFfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHR3aV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9UV0ksCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVFdJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UV0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVFdJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF90d2lfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpMmMtYXQ5MXJtOTIwMCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdHdpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JLyogcGlucyB1c2VkIGZvciBUV0kgaW50ZXJmYWNlICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNSwgMCk7CQkvKiBUV0QgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI1LCAxKTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjYsIDApOwkJLyogVFdDSyAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjYsIDEpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3R3aV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1BJCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1NQSSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9TUEkgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1NQSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9TUEksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3NwaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQTMsIEFUOTFfUElOX1BBNCwgQVQ5MV9QSU5fUEE1LCBBVDkxX1BJTl9QQTYgfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgY3NfcGluOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAwKTsJLyogTUlTTyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMCk7CS8qIE1PU0kgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwkvKiBTUENLICovCi0KLQkvKiBFbmFibGUgU1BJIGNoaXAtc2VsZWN0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9kZXZpY2VzOyBpKyspIHsKLQkJaWYgKGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhKQotCQkJY3NfcGluID0gKHVuc2lnbmVkIGxvbmcpIGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhOwotCQllbHNlCi0JCQljc19waW4gPSBzcGlfc3RhbmRhcmRfY3NbZGV2aWNlc1tpXS5jaGlwX3NlbGVjdF07Ci0KLQkJaWYgKGRldmljZXNbaV0uY2hpcF9zZWxlY3QgPT0gMCkJLyogZm9yIENTMCBlcnJhdGEgKi8KLQkJCWF0OTFfc2V0X0FfcGVyaXBoKGNzX3BpbiwgMCk7Ci0JCWVsc2UKLQkJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7Ci0KLQotCQkvKiBwYXNzIGNoaXAtc2VsZWN0IHBpbiB0byBkcml2ZXIgKi8KLQkJZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBjc19waW47Ci0JfQotCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3NwaV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1RDQjAsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDMiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3RjYjBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHRjYjBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2IwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYjFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfVENCMSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9UQ0IxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDNCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEM1LAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDNSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdGNiMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDEsCi0JLnJlc291cmNlCT0gdGNiMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYjFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfdGNiMF9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF90Y2IxX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKSB7IH0KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUlRDCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDBfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfUlRDLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1JUQyArIFNaXzI1NiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfcnRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9ydGMiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSBydGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3J0Y19kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFdhdGNoZG9nCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPR19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3dkdF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfd2R0IiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV93YXRjaGRvZyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF93ZHRfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKLXN0YXRpYyB1NjQgc3NjMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1NTQzAsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfU1NDMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfU1NDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9TU0MwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9zc2MwX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxcm05MjAwX3NzYyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzYzBfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNzYzBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzc2MwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzYzBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjUsIDEpOwotfQotCi1zdGF0aWMgdTY0IHNzYzFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9TU0MxLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1NTQzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1NTQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfU1NDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfc3NjMV9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MxX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI2LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19USykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI3LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SSykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTEsIDEpOwotfQotCi1zdGF0aWMgdTY0IHNzYzJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9TU0MyLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1NTQzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1NTQzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfU1NDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfc3NjMl9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDIsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MyX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMl9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE0LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTYsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE3LCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxUk05MjAwX0lEX1NTQzA6Ci0JCXBkZXYgPSAmYXQ5MXJtOTIwMF9zc2MwX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzBfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVDkxUk05MjAwX0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXJtOTIwMF9zc2MxX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzFfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVDkxUk05MjAwX0lEX1NTQzI6Ci0JCXBkZXYgPSAmYXQ5MXJtOTIwMF9zc2MyX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzJfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVBUlQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfREJHVSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfZGJndV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTMwLCAwKTsJCS8qIERSWEQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTMxLCAxKTsJCS8qIERUWEQgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9VUzAsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVVMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvZF9sb29rdXBfdGFibGUgdWFydDBfZ3Bpb3NfdGFibGUgPSB7Ci0JLmRldl9pZCA9ICJhdG1lbF91c2FydCIsCi0JLnRhYmxlID0gewotCQlHUElPX0xPT0tVUCgicGlvQSIsIDIxLCAicnRzIiwgR1BJT19BQ1RJVkVfTE9XKSwKLQkJeyB9LAotCX0sCi19OwotCi1zdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VhcnQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDBfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTcsIDEpOwkJLyogVFhEMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDApOwkJLyogUlhEMCAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMCk7CS8qIENUUzAgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpIHsKLQkJLyoKLQkJICogQVQ5MVJNOTIwMCBFcnJhdGEgIzM5IC0gUlRTMCBpcyBub3QgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gUEEyMS4KLQkJICogV2UgbmVlZCB0byBkcml2ZSB0aGUgcGluIG1hbnVhbGx5LiBUaGUgc2VyaWFsIGRyaXZlciB3aWxsIGRyaXZlcgotCQkgKiB0aGlzIHRvIGhpZ2ggd2hlbiBpbml0aWFsaXppbmcuCi0JCSAqLwotCQlncGlvZF9hZGRfbG9va3VwX3RhYmxlKCZ1YXJ0MF9ncGlvc190YWJsZSk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1VTMSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9VUzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VTMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VhcnQxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAyLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDFfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjAsIDEpOwkJLyogVFhEMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjEsIDApOwkJLyogUlhEMSAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JJKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE4LCAwKTsJLyogUkkxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RUUikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxOSwgMCk7CS8qIERUUjEgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfRENEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIzLCAwKTsJLyogRENEMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjQsIDApOwkvKiBDVFMxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RTUikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNSwgMCk7CS8qIERTUjEgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI2LCAwKTsJLyogUlRTMSAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1VTMiwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9VUzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VTMiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VhcnQyX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAzLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDJfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0Ml9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0Ml9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDJfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjIsIDApOwkJLyogUlhEMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDEpOwkJLyogVFhEMiAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEzMCwgMCk7CS8qIENUUzIgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTMxLCAwKTsJLyogUlRTMiAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1VTMywKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9VUzMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VTMywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0M19kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQzX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VhcnQzX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSA0LAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0M19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0M19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDNfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNSwgMSk7CQkvKiBUWEQzICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAwKTsJCS8qIFJYRDMgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CS8qIENUUzMgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOwkvKiBSVFMzICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXRkYXRhIGF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCi0KLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGF0bWVsX3VhcnRfZGF0YSAqcGRhdGE7Ci0KLQlzd2l0Y2ggKGlkKSB7Ci0JCWNhc2UgMDoJCS8qIERCR1UgKi8KLQkJCXBkZXYgPSAmYXQ5MXJtOTIwMF9kYmd1X2RldmljZTsKLQkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFSTTkyMDBfSURfVVMwOgotCQkJcGRldiA9ICZhdDkxcm05MjAwX3VhcnQwX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDBfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFSTTkyMDBfSURfVVMxOgotCQkJcGRldiA9ICZhdDkxcm05MjAwX3VhcnQxX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFSTTkyMDBfSURfVVMyOgotCQkJcGRldiA9ICZhdDkxcm05MjAwX3VhcnQyX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDJfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFSTTkyMDBfSURfVVMzOgotCQkJcGRldiA9ICZhdDkxcm05MjAwX3VhcnQzX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDNfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuOwotCX0KLQlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXBkYXRhLT5udW0gPSBwb3J0bnI7CQkvKiB1cGRhdGUgdG8gbWFwcGVkIElEICovCi0KLQlpZiAocG9ydG5yIDwgQVRNRUxfTUFYX1VBUlQpCi0JCWF0OTFfdWFydHNbcG9ydG5yXSA9IHBkZXY7Ci19Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBVE1FTF9NQVhfVUFSVDsgaSsrKSB7Ci0JCWlmIChhdDkxX3VhcnRzW2ldKQotCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGF0OTFfdWFydHNbaV0pOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykge30KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKLSAqIHNldHVwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCi17Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0YygpOwotCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwotCWF0OTFfYWRkX2RldmljZV90YygpOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jCmluZGV4IDdmZDEzYWUuLjUxNzYxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMKQEAgLTE4Myw3ICsxODMsNiBAQAogdm9pZCBfX2lvbWVtICphdDkxX3N0X2Jhc2U7CiBFWFBPUlRfU1lNQk9MX0dQTChhdDkxX3N0X2Jhc2UpOwogCi0jaWZkZWYgQ09ORklHX09GCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhdDkxcm05MjAwX3N0X3RpbWVyX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1zdCIgfSwKIAl7IC8qIHNlbnRpbmVsICovIH0KQEAgLTIxOSwyOCArMjE4LDYgQEAKIGVycjoKIAlyZXR1cm4gLUVJTlZBTDsKIH0KLSNlbHNlCi1zdGF0aWMgaW50IF9faW5pdCBvZl9hdDkxcm05MjAwX3N0X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLSNlbmRpZgotCi12b2lkIF9faW5pdCBhdDkxcm05MjAwX2lvcmVtYXBfc3QodTMyIGFkZHIpCi17Ci0jaWZkZWYgQ09ORklHX09GCi0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIGF0OTFybTkyMDBfc3RfdGltZXJfaWRzKTsKLQlpZiAobnApIHsKLQkJb2Zfbm9kZV9wdXQobnApOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JYXQ5MV9zdF9iYXNlID0gaW9yZW1hcChhZGRyLCAyNTYpOwotCWlmICghYXQ5MV9zdF9iYXNlKQotCQlwYW5pYygiSW1wb3NzaWJsZSB0byBpb3JlbWFwIFNUXG4iKTsKLX0KIAogLyoKICAqIFNUIChzeXN0ZW0gdGltZXIpIG1vZHVsZSBzdXBwb3J0cyBib3RoIGNsb2NrZXZlbnRzIGFuZCBjbG9ja3NvdXJjZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwLmMKaW5kZXggYWFiMWY5Ni4uNzgxMzdjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwLmMKQEAgLTEwLDMwNSArMTAsMTMgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9kYmd1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAicG0uaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9QSU9BLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1BJT0IsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQ19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfUElPQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImFkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfQURDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhZGNfb3BfY2xrID0gewotCS5uYW1lCQk9ICJhZGNfb3BfY2xrIiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotCS5yYXRlX2h6CT0gNTAwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VUzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1VTMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfTUNJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKLQkubmFtZQkJPSAidWRjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VRFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2lfY2xrID0gewotCS5uYW1lCQk9ICJ0d2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RXSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0gewotCS5uYW1lCQk9ICJzcGkwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9TUEkwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1NQSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2NfY2xrID0gewotCS5uYW1lCQk9ICJzc2NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1NTQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVEMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NsayA9IHsKLQkubmFtZQkJPSAidGMxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9UQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0gewotCS5uYW1lCQk9ICJ0YzJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RDMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0gewotCS5uYW1lCQk9ICJvaGNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VSFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKLQkubmFtZQkJPSAicGNsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9FTUFDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgaXNpX2NsayA9IHsKLQkubmFtZQkJPSAiaXNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9JU0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDNfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1VTMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0NF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0NF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVVM0LAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQ1X2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQ1X2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VUzUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzNfY2xrID0gewotCS5uYW1lCQk9ICJ0YzNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RDMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjNF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjNF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVEM0LAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGM1X2NsayA9IHsKLQkubmFtZQkJPSAidGM1X2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9UQzUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQV9jbGssCi0JJnBpb0JfY2xrLAotCSZwaW9DX2NsaywKLQkmYWRjX2NsaywKLQkmYWRjX29wX2NsaywKLQkmdXNhcnQwX2NsaywKLQkmdXNhcnQxX2NsaywKLQkmdXNhcnQyX2NsaywKLQkmbW1jX2NsaywKLQkmdWRjX2NsaywKLQkmdHdpX2NsaywKLQkmc3BpMF9jbGssCi0JJnNwaTFfY2xrLAotCSZzc2NfY2xrLAotCSZ0YzBfY2xrLAotCSZ0YzFfY2xrLAotCSZ0YzJfY2xrLAotCSZvaGNpX2NsaywKLQkmbWFjYl9jbGssCi0JJmlzaV9jbGssCi0JJnVzYXJ0M19jbGssCi0JJnVzYXJ0NF9jbGssCi0JJnVzYXJ0NV9jbGssCi0JJnRjM19jbGssCi0JJnRjNF9jbGssCi0JJnRjNV9jbGssCi0JLy8gaXJxMCAuLiBpcnEyCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcGVyaXBoX2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JLyogT25lIGFkZGl0aW9uYWwgZmFrZSBjbG9jayBmb3IgbWFjYl9oY2xrICovCi0JQ0xLREVWX0NPTl9JRCgiaGNsayIsICZtYWNiX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjAiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImF0bWVsX3NwaS4xIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4xIiwgJnRjM19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiYXRtZWxfdGNiLjEiLCAmdGM0X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJhdG1lbF90Y2IuMSIsICZ0YzVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxcm05MjAwX3NzYy4wIiwgJnNzY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmJjMDAwLnNzYyIsICZzc2NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiaTJjLWF0OTFzYW05MjYwLjAiLCAmdHdpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOWcyMC4wIiwgJnR3aV9jbGspLAotCS8qIG1vcmUgdXNhcnQgbG9va3VwIHRhYmxlIGZvciBEVCBlbnRyaWVzICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZmMjAwLnNlcmlhbCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZiMDAwMC5zZXJpYWwiLCAmdXNhcnQwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmI0MDAwLnNlcmlhbCIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmYjgwMDAuc2VyaWFsIiwgJnVzYXJ0Ml9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZkMDAwMC5zZXJpYWwiLCAmdXNhcnQzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmQ0MDAwLnNlcmlhbCIsICZ1c2FydDRfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZDgwMDAuc2VyaWFsIiwgJnVzYXJ0NV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZhYzAwMC5pMmMiLCAmdHdpX2NsayksCi0JLyogbW9yZSB0YyBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmRjMDAwLnRpbWVyIiwgJnRjM19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmZGMwMDAudGltZXIiLCAmdGM0X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZkYzAwMC50aW1lciIsICZ0YzVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICI1MDAwMDAub2hjaSIsICZvaGNpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZmZmYTgwMDAubW1jIiwgJm1tY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImZmZmM4MDAwLnNwaSIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZmZmY2MwMDAuc3BpIiwgJnNwaTFfY2xrKSwKLQkvKiBmYWtlIGhjbGsgY2xvY2sgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxX29oY2kiLCAmb2hjaV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0EiLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0IiLCAmcGlvQl9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0MiLCAmcGlvQ19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjQwMC5ncGlvIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9CX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmODAwLmdwaW8iLCAmcGlvQ19jbGspLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHVzYXJ0X2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjAiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMSIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMiIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMyIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNCIsICZ1c2FydDNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNSIsICZ1c2FydDRfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNiIsICZ1c2FydDVfY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgdHdvIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotfQotI2Vsc2UKLSNkZWZpbmUgYXQ5MXNhbTkyNjBfcmVnaXN0ZXJfY2xvY2tzIE5VTEwKLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEdQSU8KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXNhbTkyNjBfZ3Bpb1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkuaWQJCT0gQVQ5MVNBTTkyNjBfSURfUElPQSwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2MF9CQVNFX1BJT0EsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTkyNjBfSURfUElPQiwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2MF9CQVNFX1BJT0IsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTkyNjBfSURfUElPQywKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2MF9CQVNFX1BJT0MsCi0JfQotfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBBVDkxU0FNOTI2MCBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTM0MCwxMTkgKzQ4LDE0IEBACiAJCWF0OTFfaW5pdF9zcmFtKDAsIEFUOTFTQU05MjYwX1NSQU1fQkFTRSwgQVQ5MVNBTTkyNjBfU1JBTV9TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYwX2lvcmVtYXBfcmVnaXN0ZXJzKHZvaWQpCi17Ci0JYXQ5MV9pb3JlbWFwX3JhbWMoMCwgQVQ5MVNBTTkyNjBfQkFTRV9TRFJBTUMsIDUxMik7Ci0JYXQ5MXNhbTkyNnhfaW9yZW1hcF9waXQoQVQ5MVNBTTkyNjBfQkFTRV9QSVQpOwotCWF0OTFzYW05X2lvcmVtYXBfc21jKDAsIEFUOTFTQU05MjYwX0JBU0VfU01DKTsKLQlhdDkxX2lvcmVtYXBfbWF0cml4KEFUOTFTQU05MjYwX0JBU0VfTUFUUklYKTsKLQlhdDkxX3BtX3NldF9zdGFuZGJ5KGF0OTFzYW05X3NkcmFtX3N0YW5kYnkpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfaW5pdGlhbGl6ZSh2b2lkKQogewogCWFybV9wbV9pZGxlID0gYXQ5MXNhbTlfaWRsZTsKIAogCWF0OTFfc3lzaXJxX21hc2tfcnR0KEFUOTFTQU05MjYwX0JBU0VfUlRUKTsKLQotCS8qIFJlZ2lzdGVyIEdQSU8gc3Vic3lzdGVtICovCi0JYXQ5MV9ncGlvX2luaXQoYXQ5MXNhbTkyNjBfZ3BpbywgMyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnN0Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2MF9CQVNFX1JTVEMsCi0JCS5lbmQgICAgPSBBVDkxU0FNOTI2MF9CQVNFX1JTVEMgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05MjYwX0JBU0VfU0RSQU1DLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjBfQkFTRV9TRFJBTUMgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJzdGNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXNhbTkyNjAtcmVzZXQiLAotCS5yZXNvdXJjZSAgICAgICA9IHJzdGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUocnN0Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGR3Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2MF9CQVNFX1NIRFdDLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjBfQkFTRV9TSERXQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGR3Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImF0OTEtcG93ZXJvZmYiLAotCS5yZXNvdXJjZSAgICAgICA9IHNoZHdjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNoZHdjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnN0Y19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2hkd2NfZGV2aWNlKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXNhbTkyNjBfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7Ci0JNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLQk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KLQkwLAkvKiBBbmFsb2ctdG8tRGlnaXRhbCBDb252ZXJ0ZXIgKi8KLQk1LAkvKiBVU0FSVCAwICovCi0JNSwJLyogVVNBUlQgMSAqLwotCTUsCS8qIFVTQVJUIDIgKi8KLQkwLAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCi0JMiwJLyogVVNCIERldmljZSBQb3J0ICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDAgKi8KLQk1LAkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLwotCTUsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyICovCi0JMCwKLQkwLAotCTAsCS8qIFRpbWVyIENvdW50ZXIgMCAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMSAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMiAqLwotCTIsCS8qIFVTQiBIb3N0IHBvcnQgKi8KLQkzLAkvKiBFdGhlcm5ldCAqLwotCTAsCS8qIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKi8KLQk1LAkvKiBVU0FSVCAzICovCi0JNSwJLyogVVNBUlQgNCAqLwotCTUsCS8qIFVTQVJUIDUgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDMgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDQgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDUgKi8KLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MF9pbml0X3RpbWUodm9pZCkKLXsKLQlhdDkxc2FtOTI2eF9waXRfaW5pdChOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTKTsKIH0KIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTkyNjApCiAJLm1hcF9pbyA9IGF0OTFzYW05MjYwX21hcF9pbywKLQkuZGVmYXVsdF9pcnFfcHJpb3JpdHkgPSBhdDkxc2FtOTI2MF9kZWZhdWx0X2lycV9wcmlvcml0eSwKLQkuZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05MjYwX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVNBTTkyNjBfSURfSVJRMSkKLQkJICAgIHwgKDEgPDwgQVQ5MVNBTTkyNjBfSURfSVJRMiksCi0JLmlvcmVtYXBfcmVnaXN0ZXJzID0gYXQ5MXNhbTkyNjBfaW9yZW1hcF9yZWdpc3RlcnMsCi0JLnJlZ2lzdGVyX2Nsb2NrcyA9IGF0OTFzYW05MjYwX3JlZ2lzdGVyX2Nsb2NrcywKLQkucmVnaXN0ZXJfZGV2aWNlcyA9IGF0OTFzYW05MjYwX3JlZ2lzdGVyX2RldmljZXMsCiAJLmluaXQgPSBhdDkxc2FtOTI2MF9pbml0aWFsaXplLAotCS5pbml0X3RpbWUgPSBhdDkxc2FtOTI2MF9pbml0X3RpbWUsCiBBVDkxX1NPQ19FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjg4ZTBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzY0ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXQ5MV9hZGMuaD4KLQotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjBfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIb3N0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX1VIUF9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VIUCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVUhQLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JoX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKLXsKLQlpbnQgaTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogRW5hYmxlIG92ZXJjdXJyZW50IG5vdGlmaWNhdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSwgMSk7Ci0JfQotCi0JdXNiaF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmhfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBEZXZpY2UgKEdhZGdldCkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0FUOTFfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIHVkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVURQLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9VRFAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VRFAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VEUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKLQl9Ci0KLQkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBieSBVU0IgZGV2aWNlIHBlcmlwaGVyYWwgKi8KLQotCXVkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEV0aGVybmV0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDQikgfHwgZGVmaW5lZChDT05GSUdfTUFDQl9NT0RVTEUpCi1zdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIGV0aF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV0aF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfRU1BQywKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfRU1BQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX0VNQUMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX0VNQUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF9ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtYWNiIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cGh5X2lycV9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cGh5X2lycV9waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7Ci0JfQotCi0JLyogUGlucyB1c2VkIGZvciBNSUkgYW5kIFJNSUkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNywgMCk7CS8qIEVSWERWICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNCwgMCk7CS8qIEVSWDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE1LCAwKTsJLyogRVJYMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDApOwkvKiBFUlhFUiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFVFhFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTIsIDApOwkvKiBFVFgwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMywgMCk7CS8qIEVUWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAwKTsJLyogRU1ESU8gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAwKTsJLyogRU1EQyAqLwotCi0JaWYgKCFkYXRhLT5pc19ybWlpKSB7Ci0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDApOwkvKiBFQ1JTICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOwkvKiBFQ09MICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDApOwkvKiBFUlgyICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjYsIDApOwkvKiBFUlgzICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDApOwkvKiBFUlhDSyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAwKTsJLyogRVRYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJLyogRVRYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAwKTsJLyogRVRYRVIgKi8KLQl9Ci0KLQlldGhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfZXRoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBNTUMgLyBTRCBTbG90IGZvciBBdG1lbCBNQ0kgRHJpdmVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTU1DX0FUTUVMTUNJKQotc3RhdGljIHU2NCBtbWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIG1tY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfTUNJLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9NQ0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9NQ0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX01DSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX21tY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX21jaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBtbWNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IHNsb3RfY291bnQgPSAwOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRNQ0lfTUFYX05SX1NMT1RTOyBpKyspIHsKLQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoKSB7Ci0JCQkvKiBpbnB1dC9pcnEgKi8KLQkJCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbikpIHsKLQkJCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbiwgMSk7Ci0JCQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+c2xvdFtpXS5kZXRlY3RfcGluLCAxKTsKLQkJCX0KLQkJCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbaV0ud3BfcGluKSkKLQkJCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0ud3BfcGluLCAxKTsKLQotCQkJc3dpdGNoIChpKSB7Ci0JCQljYXNlIDA6Ci0JCQkJLyogQ01EICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE3LCAxKTsKLQkJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAxKTsKLQkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgewotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDEpOwotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMSk7Ci0JCQkJfQotCQkJCXNsb3RfY291bnQrKzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQkvKiBDTUQgKi8KLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEsIDEpOwotCQkJCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTAsIDEpOwotCQkJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNSwgMSk7Ci0JCQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNCwgMSk7Ci0JCQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMywgMSk7Ci0JCQkJfQotCQkJCXNsb3RfY291bnQrKzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCSJBVDkxOiBTRC9NTUMgc2xvdCAlZCBub3QgYXZhaWxhYmxlXG4iLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChzbG90X2NvdW50KSB7Ci0JCS8qIENMSyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTgsIDApOwotCi0JCW1tY19kYXRhID0gKmRhdGE7Ci0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfbW1jX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIE5BTkQgLyBTbWFydE1lZGlhCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIG5hbmRfZGF0YTsKLQotI2RlZmluZSBOQU5EX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzMKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5kX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gTkFORF9CQVNFLAotCQkuZW5kCT0gTkFORF9CQVNFICsgU1pfMjU2TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX0VDQywKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfRUNDICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX25hbmQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZuYW5kX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBuYW5kX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobmFuZF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOwotCWF0OTFfbWF0cml4X3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfQ1MzQV9TTUNfU01BUlRNRURJQSk7Ci0KLQkvKiBlbmFibGUgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZW5hYmxlX3BpbikpCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPmVuYWJsZV9waW4sIDEpOwotCi0JLyogcmVhZHkvYnVzeSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZHlfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5yZHlfcGluLCAxKTsKLQotCS8qIGNhcmQgZGV0ZWN0IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmRldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOwotCi0JbmFuZF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF9uYW5kX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVFdJIChpMmMpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogUHJlZmVyIHRoZSBHUElPIGNvZGUgc2luY2UgdGhlIFRXSSBjb250cm9sbGVyIGlzbid0IHJvYnVzdAotICogKGdldHMgb3ZlcnJ1bnMgYW5kIHVuZGVycnVucyB1bmRlciBsb2FkKSBhbmQgY2FuIG9ubHkgaXNzdWUKLSAqIHJlcGVhdGVkIFNUQVJUcyBpbiBvbmUgc2NlbmFyaW8gKHRoZSBkcml2ZXIgZG9lc24ndCB5ZXQgaGFuZGxlIHRoZW0pLgotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGEgPSB7Ci0JLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEEyMywKLQkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAotCS5zY2xfcGluCQk9IEFUOTFfUElOX1BBMjQsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAxKTsJCS8qIFRXRCAoU0RBKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjMsIDEpOwotCi0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyNCwgMSk7Ci0KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3R3aV9kZXZpY2UpOwotfQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0FUOTFfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHR3aV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVFdJLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9UV0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UV0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RXSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3R3aV9kZXZpY2UgPSB7Ci0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdHdpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JLyogSVAgdmVyc2lvbiBpcyBub3QgdGhlIHNhbWUgb24gOTI2MCBhbmQgZzIwICovCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcyMCgpKSB7Ci0JCWF0OTFzYW05MjYwX3R3aV9kZXZpY2UubmFtZSA9ICJpMmMtYXQ5MXNhbTlnMjAiOwotCX0gZWxzZSB7Ci0JCWF0OTFzYW05MjYwX3R3aV9kZXZpY2UubmFtZSA9ICJpMmMtYXQ5MXNhbTkyNjAiOwotCX0KLQotCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDApOwkJLyogVFdEICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMywgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJCS8qIFRXQ0sgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI0LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfdHdpX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTUEkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgdTY0IHNwaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9TUEkwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9TUEkwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfU1BJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfU1BJMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3NwaTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaTBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMF9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEEzLCBBVDkxX1BJTl9QQzExLCBBVDkxX1BJTl9QQzE2LCBBVDkxX1BJTl9QQzE3IH07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfU1BJMSwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfU1BJMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1NQSTEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1NQSTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF9zcGkxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfc3BpIiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzcGkxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTFfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BCMywgQVQ5MV9QSU5fUEM1LCBBVDkxX1BJTl9QQzQsIEFUOTFfUElOX1BDMyB9OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBjc19waW47Ci0Jc2hvcnQgZW5hYmxlX3NwaTAgPSAwOwotCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKLQotCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgewotCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCi0JCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7Ci0JCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQkJZWxzZQotCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQotCQlpZiAoIWdwaW9faXNfdmFsaWQoY3NfcGluKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChkZXZpY2VzW2ldLmJ1c19udW0gPT0gMCkKLQkJCWVuYWJsZV9zcGkwID0gMTsKLQkJZWxzZQotCQkJZW5hYmxlX3NwaTEgPSAxOwotCi0JCS8qIGVuYWJsZSBjaGlwLXNlbGVjdCBwaW4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoY3NfcGluLCAxKTsKLQotCQkvKiBwYXNzIGNoaXAtc2VsZWN0IHBpbiB0byBkcml2ZXIgKi8KLQkJZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBjc19waW47Ci0JfQotCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0KLQkvKiBDb25maWd1cmUgU1BJIGJ1cyhlcykgKi8KLQlpZiAoZW5hYmxlX3NwaTApIHsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAwKTsJLyogU1BJMF9NSVNPICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMCk7CS8qIFNQSTBfTU9TSSAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwkvKiBTUEkxX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3NwaTBfZGV2aWNlKTsKLQl9Ci0JaWYgKGVuYWJsZV9zcGkxKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMCwgMCk7CS8qIFNQSTFfTUlTTyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOwkvKiBTUEkxX01PU0kgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyLCAwKTsJLyogU1BJMV9TUENLICovCi0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF9zcGkxX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9UQ0IwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9UQ0IwICsgU1pfMjU2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3RjYjBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHRjYjBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2IwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYjFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1RDQjEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1RDQjEgKyBTWl8yNTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEM0LAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDNSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEM1LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdGNiMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDEsCi0JLnJlc291cmNlCT0gdGNiMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYjFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3RjYjBfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3RjYjFfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVFQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnR0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9SVFQsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1JUVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfcnR0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9ydHQiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHJ0dF9yZXNvdXJjZXMsCi19OwotCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JYXQ5MXNhbTkyNjBfcnR0X2RldmljZS5uYW1lID0gInJ0Yy1hdDkxc2FtOSI7Ci0JLyoKLQkgKiBUaGUgc2Vjb25kIHJlc291cmNlIGlzIG5lZWRlZDoKLQkgKiBHUEJSIHdpbGwgc2VydmUgYXMgdGhlIHN0b3JhZ2UgZm9yIFJUQyB0aW1lIG9mZnNldAotCSAqLwotCWF0OTFzYW05MjYwX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDM7Ci0JcnR0X3Jlc291cmNlc1sxXS5zdGFydCA9IEFUOTFTQU05MjYwX0JBU0VfR1BCUiArCi0JCQkJIDQgKiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9HUEJSOwotCXJ0dF9yZXNvdXJjZXNbMV0uZW5kID0gcnR0X3Jlc291cmNlc1sxXS5zdGFydCArIDM7Ci0JcnR0X3Jlc291cmNlc1syXS5zdGFydCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci0JcnR0X3Jlc291cmNlc1syXS5lbmQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCS8qIE9ubHkgb25lIHJlc291cmNlIGlzIG5lZWRlZDogUlRUIG5vdCB1c2VkIGFzIFJUQyAqLwotCWF0OTFzYW05MjYwX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0X3J0YygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfcnR0X2RldmljZSk7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBXYXRjaGRvZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9XRFQsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1dEVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfd2R0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV93ZHQiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1NDIC0tIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDKSB8fCBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0NfTU9EVUxFKQotc3RhdGljIHU2NCBzc2NfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9TU0MsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1NTQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1NTQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfU1NDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfc3NjX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxcm05MjAwX3NzYyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzY19kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzY19waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE2LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxOCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTksIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMSwgMSk7Ci19Ci0KLS8qCi0gKiBTU0MgY29udHJvbGxlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggbGlicmFyeSBjb2RlLCBpbnN0ZWFkIG9mIGFueQotICoga2luZCBvZiBhbGwtc2luZ2luZy9hbGwtZGFuY2luZyBkcml2ZXIuICBGb3IgZXhhbXBsZSBvbmUgY291bGQgYmUKLSAqIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIEkyUyBhdWRpbyBjb2RlYydzIGRyaXZlciwgd2hpbGUgYW5vdGhlciBvbmUKLSAqIG9uIHRoZSBzYW1lIHN5c3RlbSBtaWdodCBiZSB1c2VkIGJ5IGEgY3VzdG9tIGRhdGEgY2FwdHVyZSBkcml2ZXIuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCS8qCi0JICogTk9URTogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIG1hdGNoaW5nCi0JICogInBpbnMiIHRvIHdoYXRldmVyIHdpbGwgYmUgdXNpbmcgZWFjaCBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIuCi0JICovCi0Jc3dpdGNoIChpZCkgewotCWNhc2UgQVQ5MVNBTTkyNjBfSURfU1NDOgotCQlwZGV2ID0gJmF0OTFzYW05MjYwX3NzY19kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2NfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVBUlQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYmd1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9EQkdVLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX2RiZ3VfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZkYmd1X2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZGJndV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZGJndV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiZ3VfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfZGJndV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNCwgMCk7CQkvKiBEUlhEICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMSk7CQkvKiBEVFhEICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF91YXJ0MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwkJLyogVFhEMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNSwgMCk7CQkvKiBSWEQwICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI2LCAwKTsJLyogUlRTMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjcsIDApOwkvKiBDVFMwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RUUikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNCwgMCk7CS8qIERUUjAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfRFNSKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIyLCAwKTsJLyogRFNSMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9EQ0QpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjMsIDApOwkvKiBEQ0QwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JJKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI1LCAwKTsJLyogUkkwICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMSwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF91YXJ0MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMiwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQxX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjYsIDEpOwkJLyogVFhEMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7CQkvKiBSWEQxICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI4LCAwKTsJLyogUlRTMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjksIDApOwkvKiBDVFMxICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMiwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF91YXJ0Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjgsIDEpOwkJLyogVFhEMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOSwgMCk7CQkvKiBSWEQyICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTQsIDApOwkvKiBSVFMyICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE1LCAwKTsJLyogQ1RTMiAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzMsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTMywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdWFydDNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDQsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0M19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQzX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0M19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0M19waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMSk7CQkvKiBUWEQzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMCk7CQkvKiBSWEQzICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzgsIDApOwkvKiBSVFMzICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7CS8qIENUUzMgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0NF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVVM0LAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzQgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzQsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTNCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQ0X2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDRfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3VhcnQ0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSA1LAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDRfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0NF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0NF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDRfcGlucyh2b2lkKQotewotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzEsIDEpOwkJLyogVFhENCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDApOwkJLyogUlhENCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQ1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzUsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTNSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTNSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVM1LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDVfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0NV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdWFydDVfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDYsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0NV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQ1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0NV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQ1X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0NV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMSk7CQkvKiBUWEQ1ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMywgMCk7CQkvKiBSWEQ1ICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXRkYXRhIGF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCi0KLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGF0bWVsX3VhcnRfZGF0YSAqcGRhdGE7Ci0KLQlzd2l0Y2ggKGlkKSB7Ci0JCWNhc2UgMDoJCS8qIERCR1UgKi8KLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjBfZGJndV9kZXZpY2U7Ci0JCQljb25maWd1cmVfZGJndV9waW5zKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MF9JRF9VUzA6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYwX3VhcnQwX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDBfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYwX0lEX1VTMToKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjBfdWFydDFfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0MV9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjBfSURfVVMyOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2MF91YXJ0Ml9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQyX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MF9JRF9VUzM6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYwX3VhcnQzX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDNfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYwX0lEX1VTNDoKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjBfdWFydDRfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0NF9waW5zKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MF9JRF9VUzU6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYwX3VhcnQ1X2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDVfcGlucygpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JfQotCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcGRhdGEtPm51bSA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KLQotCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKLQkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKLQkJaWYgKGF0OTFfdWFydHNbaV0pCi0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ0YvSURFCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUEFUQV9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19QQVRBX0FUOTFfTU9EVUxFKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfQVQ5MV9DRikgfHwgZGVmaW5lZChDT05GSUdfQVQ5MV9DRl9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIGNmMF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNmMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF80LAotCQkuZW5kCT0gQVQ5MV9DSElQU0VMRUNUXzQgKyBTWl8yNTZNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2YwX2RldmljZSA9IHsKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZjZjBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGNmMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNmMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgY2YxX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2YxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzUsCi0JCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfNSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZjFfZGV2aWNlID0gewotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJmNmMV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY2YxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2YxX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXVuc2lnbmVkIGxvbmcgY3NhOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQljc2EgPSBhdDkxX21hdHJpeF9yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7Ci0KLQlzd2l0Y2ggKGRhdGEtPmNoaXBzZWxlY3QpIHsKLQljYXNlIDQ6Ci0JCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BDOCwgMCk7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOCwgMCk7Ci0JCWNzYSB8PSBBVDkxX01BVFJJWF9DUzRBX1NNQ19DRjE7Ci0JCWNmMF9kYXRhID0gKmRhdGE7Ci0JCXBkZXYgPSAmY2YwX2RldmljZTsKLQkJYnJlYWs7Ci0JY2FzZSA1OgotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQzksIDApOwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzksIDApOwotCQljc2EgfD0gQVQ5MV9NQVRSSVhfQ1M1QV9TTUNfQ0YyOwotCQljZjFfZGF0YSA9ICpkYXRhOwotCQlwZGV2ID0gJmNmMV9kZXZpY2U7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiQVQ5MSBDRjogYmFkIGNoaXAtc2VsZWN0IHJlcXVlc3RlZCAoJXUpXG4iLAotCQkgICAgICAgZGF0YS0+Y2hpcHNlbGVjdCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSk7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yc3RfcGluKSkgewotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShkYXRhLT5yc3RfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cnN0X3BpbiwgMSk7Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+aXJxX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5pcnFfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+aXJxX3BpbiwgMSk7Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZGV0X3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+ZGV0X3BpbiwgMSk7Ci0JfQotCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEM2LCAwKTsgICAgIC8qIENGQ0UxICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEM3LCAwKTsgICAgIC8qIENGQ0UyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7ICAgIC8qIENGUk5XICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNSwgMSk7ICAgIC8qIE5XQUlUICovCi0KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUEFUQV9BVDkxKSAmJiAoZGF0YS0+ZmxhZ3MgJiBBVDkxX0NGX1RSVUVfSURFKSkKLQkJcGRldi0+bmFtZSA9ICJwYXRhX2F0OTEiOwotCWVsc2UKLQkJcGRldi0+bmFtZSA9ICJhdDkxX2NmIjsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICogZGF0YSkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFEQ3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19BVDkxX0FEQykKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSBhZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX0FEQywKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfQURDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfQURDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9BREMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX2FkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFzYW05MjYwLWFkYyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhZGNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGFkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFkY19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX2FkY190cmlnZ2VyIGF0OTFfYWRjX3RyaWdnZXJzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZSA9ICJ0aW1lci1jb3VudGVyLTAiLAotCQkudmFsdWUgPSAweDEsCi0JfSwKLQlbMV0gPSB7Ci0JCS5uYW1lID0gInRpbWVyLWNvdW50ZXItMSIsCi0JCS52YWx1ZSA9IDB4MywKLQl9LAotCVsyXSA9IHsKLQkJLm5hbWUgPSAidGltZXItY291bnRlci0yIiwKLQkJLnZhbHVlID0gMHg1LAotCX0sCi0JWzNdID0gewotCQkubmFtZSA9ICJleHRlcm5hbCIsCi0JCS52YWx1ZSA9IDB4ZCwKLQkJLmlzX2V4dGVybmFsID0gdHJ1ZSwKLQl9LAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FkYyhzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmICh0ZXN0X2JpdCgwLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMCwgMCk7Ci0JaWYgKHRlc3RfYml0KDEsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsKLQlpZiAodGVzdF9iaXQoMiwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIsIDApOwotCWlmICh0ZXN0X2JpdCgzLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMywgMCk7Ci0KLQlpZiAoZGF0YS0+dXNlX2V4dGVybmFsX3RyaWdnZXJzKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAwKTsKLQotCWRhdGEtPnN0YXJ0dXBfdGltZSA9IDEwOwotCWRhdGEtPnRyaWdnZXJfbnVtYmVyID0gNDsKLQlkYXRhLT50cmlnZ2VyX2xpc3QgPSBhdDkxX2FkY190cmlnZ2VyczsKLQotCWFkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX2FkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZGMoc3RydWN0IGF0OTFfYWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKLSAqIHNldHVwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCi17Ci0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCXJldHVybiAwOwotCi0JYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwotCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwotCWF0OTFfYWRkX2RldmljZV90YygpOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwppbmRleCBhOGJkMzU5Li5kMjk5NTNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwpAQCAtMTAsMjgyICsxMCwxMiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrL2F0OTFfcG1jLmg+Ci0KLSNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAicG0uaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENsb2NrcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBwZXJpcGhlcmFsIGNsb2Nrcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGlvQV9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0FfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1BJT0EsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9CX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfUElPQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0NfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9QSU9DLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQwX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9VUzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDFfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1VTMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0Ml9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0Ml9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVVMyLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jX2NsayA9IHsKLQkubmFtZQkJPSAibWNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9NQ0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1ZGNfY2xrID0gewotCS5uYW1lCQk9ICJ1ZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1VEUCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aV9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVFdJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1NQSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0gewotCS5uYW1lCQk9ICJzc2MwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9TU0MwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1NTQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MyX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfU1NDMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVEMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NsayA9IHsKLQkubmFtZQkJPSAidGMxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9UQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0gewotCS5uYW1lCQk9ICJ0YzJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1RDMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0gewotCS5uYW1lCQk9ICJvaGNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9VSFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZQkJPSAibGNkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfTENEQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLQotLyogSENsb2NrcyAqLwotc3RhdGljIHN0cnVjdCBjbGsgaGNrMCA9IHsKLQkubmFtZQkJPSAiaGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfSENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9TWVNURU0sCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgaGNrMSA9IHsKLQkubmFtZQkJPSAiaGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfSENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9TWVNURU0sCi0JLmlkCQk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FfY2xrLAotCSZwaW9CX2NsaywKLQkmcGlvQ19jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJm1tY19jbGssCi0JJnVkY19jbGssCi0JJnR3aV9jbGssCi0JJnNwaTBfY2xrLAotCSZzcGkxX2NsaywKLQkmc3NjMF9jbGssCi0JJnNzYzFfY2xrLAotCSZzc2MyX2NsaywKLQkmdGMwX2NsaywKLQkmdGMxX2NsaywKLQkmdGMyX2NsaywKLQkmb2hjaV9jbGssCi0JJmxjZGNfY2xrLAotCS8vIGlycTAgLi4gaXJxMgotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFzYW05MjYxLWxjZGZiLjAiLCAmaGNrMSksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MXNhbTlnMTAtbGNkZmIuMCIsICZoY2sxKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJhdG1lbF9zcGkuMCIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjEiLCAmc3BpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQxX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDJfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjAiLCAmc3NjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjEiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjIiLCAmc3NjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmJjMDAwLnNzYyIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmYzAwMDAuc3NjIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZjNDAwMC5zc2MiLCAmc3NjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFfb2hjaSIsICZoY2swKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiaTJjLWF0OTFzYW05MjYxLjAiLCAmdHdpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOWcxMC4wIiwgJnR3aV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0EiLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0IiLCAmcGlvQl9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0MiLCAmcGlvQ19jbGspLAotCS8qIG1vcmUgbG9va3VwIHRhYmxlIGZvciBEVCBlbnRyaWVzICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZmMjAwLnNlcmlhbCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZiMDAwMC5zZXJpYWwiLCAmdXNhcnQwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZiNDAwLnNlcmlhbCIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOTQwMDAuc2VyaWFsIiwgJnVzYXJ0Ml9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQxX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDJfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjUwMDAwMC5vaGNpIiwgJmhjazApLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjYwMDAwMC5mYiIsICZoY2sxKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmZmZjODAwMC5zcGkiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImZmZmNjMDAwLnNwaSIsICZzcGkxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZmZmYTgwMDAubW1jIiwgJm1tY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZhYzAwMC5pMmMiLCAmdHdpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9DX2NsayksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgdXNhcnRfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4xIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4yIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4zIiwgJnVzYXJ0Ml9jbGspLAotfTsKLQotLyoKLSAqIFRoZSBmb3VyIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMiA9IHsKLQkubmFtZQkJPSAicGNrMiIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDIsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMyA9IHsKLQkubmFtZQkJPSAicGNrMyIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDMsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjFfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotCWNsa19yZWdpc3RlcigmcGNrMik7Ci0JY2xrX3JlZ2lzdGVyKCZwY2szKTsKLQotCWNsa19yZWdpc3RlcigmaGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZoY2sxKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFzYW05MjYxX3JlZ2lzdGVyX2Nsb2NrcyBOVUxMCi0jZW5kaWYKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgR1BJTwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fYmFuayBhdDkxc2FtOTI2MV9ncGlvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2MV9JRF9QSU9BLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYxX0JBU0VfUElPQSwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2MV9JRF9QSU9CLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYxX0JBU0VfUElPQiwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2MV9JRF9QSU9DLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYxX0JBU0VfUElPQywKLQl9Ci19OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIEFUOTFTQU05MjYxIHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgpAQCAtMjk5LDExOSArMjksMTQgQEAKIAkJYXQ5MV9pbml0X3NyYW0oMCwgQVQ5MVNBTTkyNjFfU1JBTV9CQVNFLCBBVDkxU0FNOTI2MV9TUkFNX1NJWkUpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjFfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxU0FNOTI2MV9CQVNFX1NEUkFNQywgNTEyKTsKLQlhdDkxc2FtOTI2eF9pb3JlbWFwX3BpdChBVDkxU0FNOTI2MV9CQVNFX1BJVCk7Ci0JYXQ5MXNhbTlfaW9yZW1hcF9zbWMoMCwgQVQ5MVNBTTkyNjFfQkFTRV9TTUMpOwotCWF0OTFfaW9yZW1hcF9tYXRyaXgoQVQ5MVNBTTkyNjFfQkFTRV9NQVRSSVgpOwotCWF0OTFfcG1fc2V0X3N0YW5kYnkoYXQ5MXNhbTlfc2RyYW1fc3RhbmRieSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MV9pbml0aWFsaXplKHZvaWQpCiB7CiAJYXJtX3BtX2lkbGUgPSBhdDkxc2FtOV9pZGxlOwogCiAJYXQ5MV9zeXNpcnFfbWFza19ydHQoQVQ5MVNBTTkyNjFfQkFTRV9SVFQpOwotCi0JLyogUmVnaXN0ZXIgR1BJTyBzdWJzeXN0ZW0gKi8KLQlhdDkxX2dwaW9faW5pdChhdDkxc2FtOTI2MV9ncGlvLCAzKTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSByc3RjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05MjYxX0JBU0VfUlNUQywKLQkJLmVuZCAgICA9IEFUOTFTQU05MjYxX0JBU0VfUlNUQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTkyNjFfQkFTRV9TRFJBTUMsCi0JCS5lbmQgICAgPSBBVDkxU0FNOTI2MV9CQVNFX1NEUkFNQyArIFNaXzUxMiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnN0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImF0OTEtc2FtOTI2MC1yZXNldCIsCi0JLnJlc291cmNlICAgICAgID0gcnN0Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShyc3RjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoZHdjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05MjYxX0JBU0VfU0hEV0MsCi0JCS5lbmQgICAgPSBBVDkxU0FNOTI2MV9CQVNFX1NIRFdDICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoZHdjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MS1wb3dlcm9mZiIsCi0JLnJlc291cmNlICAgICAgID0gc2hkd2NfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc2hkd2NfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MV9yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyc3RjX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzaGR3Y19kZXZpY2UpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEludGVycnVwdCBpbml0aWFsaXphdGlvbgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBkZWZhdWx0IGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgKDAgPSBsb3dlc3QsIDcgPSBoaWdoZXN0KS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdDkxc2FtOTI2MV9kZWZhdWx0X2lycV9wcmlvcml0eVtOUl9BSUNfSVJRU10gX19pbml0ZGF0YSA9IHsKLQk3LAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotCTcsCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLwotCTAsCi0JNSwJLyogVVNBUlQgMCAqLwotCTUsCS8qIFVTQVJUIDEgKi8KLQk1LAkvKiBVU0FSVCAyICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAqLwotCTIsCS8qIFVTQiBEZXZpY2UgUG9ydCAqLwotCTYsCS8qIFR3by1XaXJlIEludGVyZmFjZSAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDIgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KLQkyLAkvKiBVU0IgSG9zdCBwb3J0ICovCi0JMywJLyogTENEIENvbnRyb2xsZXIgKi8KLQkwLAotCTAsCi0JMCwKLQkwLAotCTAsCi0JMCwKLQkwLAotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYxX2luaXRfdGltZSh2b2lkKQotewotCWF0OTFzYW05MjZ4X3BpdF9pbml0KE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMpOwogfQogCiBBVDkxX1NPQ19TVEFSVChhdDkxc2FtOTI2MSkKIAkubWFwX2lvID0gYXQ5MXNhbTkyNjFfbWFwX2lvLAotCS5kZWZhdWx0X2lycV9wcmlvcml0eSA9IGF0OTFzYW05MjYxX2RlZmF1bHRfaXJxX3ByaW9yaXR5LAotCS5leHRlcm5faXJxID0gKDEgPDwgQVQ5MVNBTTkyNjFfSURfSVJRMCkgfCAoMSA8PCBBVDkxU0FNOTI2MV9JRF9JUlExKQotCQkgICAgfCAoMSA8PCBBVDkxU0FNOTI2MV9JRF9JUlEyKSwKLQkuaW9yZW1hcF9yZWdpc3RlcnMgPSBhdDkxc2FtOTI2MV9pb3JlbWFwX3JlZ2lzdGVycywKLQkucmVnaXN0ZXJfY2xvY2tzID0gYXQ5MXNhbTkyNjFfcmVnaXN0ZXJfY2xvY2tzLAotCS5yZWdpc3Rlcl9kZXZpY2VzID0gYXQ5MXNhbTkyNjFfcmVnaXN0ZXJfZGV2aWNlcywKIAkuaW5pdCA9IGF0OTFzYW05MjYxX2luaXRpYWxpemUsCi0JLmluaXRfdGltZSA9IGF0OTFzYW05MjYxX2luaXRfdGltZSwKIEFUOTFfU09DX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YmFhY2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwOTggKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IERhdmlkIEJyb3duZWxsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgotCi0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYxLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MV9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIEhvc3QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCi1zdGF0aWMgdTY0IG9oY2lfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIHVzYmhfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfVUhQX0JBU0UsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9VSFBfQkFTRSArIFNaXzFNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVUhQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9VSFAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV91c2JoX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKLXsKLQlpbnQgaTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogRW5hYmxlIG92ZXJjdXJyZW50IG5vdGlmaWNhdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSwgMSk7Ci0JfQotCi0JdXNiaF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV91c2JoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgRGV2aWNlIChHYWRnZXQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9BVDkxX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB1ZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1ZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1VEUCwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0JBU0VfVURQICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVURQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9VRFAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV91ZGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3VkYyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1ZGNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnZidXNfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnZidXNfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+dmJ1c19waW4sIDEpOwotCX0KLQotCS8qIFB1bGx1cCBwaW4gaXMgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IFVTQiBkZXZpY2UgcGVyaXBoZXJhbCAqLwotCi0JdWRjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYxX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBNTUMgLyBTRAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX01NQ19BVE1FTE1DSSkKLXN0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX01DSSwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfTUNJLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9NQ0ksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV9tbWNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoKSB7Ci0JCS8qIGlucHV0L2lycSAqLwotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90WzBdLmRldGVjdF9waW4pKSB7Ci0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbMF0uZGV0ZWN0X3BpbiwgMSk7Ci0JCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5zbG90WzBdLmRldGVjdF9waW4sIDEpOwotCQl9Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbMF0ud3BfcGluKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFswXS53cF9waW4sIDEpOwotCi0JCS8qIENMSyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwotCi0JCS8qIENNRCAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEsIDEpOwotCi0JCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAxKTsKLQkJaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoID09IDQpIHsKLQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNCwgMSk7Ci0JCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOwotCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAxKTsKLQkJfQotCi0JCW1tY19kYXRhID0gKmRhdGE7Ci0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfbW1jX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIE5BTkQgLyBTbWFydE1lZGlhCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIG5hbmRfZGF0YTsKLQotI2RlZmluZSBOQU5EX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzMKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5kX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTkFORF9CQVNFLAotCQkuZW5kCT0gTkFORF9CQVNFICsgU1pfMjU2TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0bWVsX25hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9uYW5kIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBjc2E7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWNzYSA9IGF0OTFfbWF0cml4X3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUEpOwotCi0JLyogZW5hYmxlIHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmVuYWJsZV9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKLQotCS8qIHJlYWR5L2J1c3kgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmR5X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cmR5X3BpbiwgMSk7Ci0KLQkvKiBjYXJkIGRldGVjdCBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5kZXRfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMCwgMCk7CQkvKiBOQU5ET0UgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOwkJLyogTkFORFdFICovCi0KLQluYW5kX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0bWVsX25hbmRfZGV2aWNlKTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRXSSAoaTJjKQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFByZWZlciB0aGUgR1BJTyBjb2RlIHNpbmNlIHRoZSBUV0kgY29udHJvbGxlciBpc24ndCByb2J1c3QKLSAqIChnZXRzIG92ZXJydW5zIGFuZCB1bmRlcnJ1bnMgdW5kZXIgbG9hZCkgYW5kIGNhbiBvbmx5IGlzc3VlCi0gKiByZXBlYXRlZCBTVEFSVHMgaW4gb25lIHNjZW5hcmlvICh0aGUgZHJpdmVyIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGVtKS4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKLQkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQTcsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKLQkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQTgsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTcsIDEpOwkJLyogVFdEIChTREEpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEE3LCAxKTsKLQotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBOCwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEE4LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfdHdpX2RldmljZSk7Ci19Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0kyQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MV9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHdpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9UV0ksCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1RXSSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1RXSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVFdJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdHdpX2RldmljZSA9IHsKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0d2lfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0d2lfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQkvKiBJUCB2ZXJzaW9uIGlzIG5vdCB0aGUgc2FtZSBvbiA5MjYxIGFuZCBnMTAgKi8KLQlpZiAoY3B1X2lzX2F0OTFzYW05ZzEwKCkpIHsKLQkJYXQ5MXNhbTkyNjFfdHdpX2RldmljZS5uYW1lID0gImkyYy1hdDkxc2FtOWcxMCI7Ci0JCS8qIEkyQyBQSU8gbXVzdCBub3QgYmUgY29uZmlndXJlZCBhcyBvcGVuLWRyYWluIG9uIHRoaXMgY2hpcCAqLwotCX0gZWxzZSB7Ci0JCWF0OTFzYW05MjYxX3R3aV9kZXZpY2UubmFtZSA9ICJpMmMtYXQ5MXNhbTkyNjEiOwotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTcsIDEpOwotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTgsIDEpOwotCX0KLQotCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMCk7CQkvKiBUV0QgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTgsIDApOwkJLyogVFdDSyAqLwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV90d2lfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNQSQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLXN0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1NQSTAsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1NQSTAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TUEkwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TUEkwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfc3BpMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkwX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQTMsIEFUOTFfUElOX1BBNCwgQVQ5MV9QSU5fUEE1LCBBVDkxX1BJTl9QQTYgfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9TUEkxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9TUEkxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1BJMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1BJMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3NwaTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEIyOCwgQVQ5MV9QSU5fUEEyNCwgQVQ5MV9QSU5fUEEyNSwgQVQ5MV9QSU5fUEEyNiB9OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBjc19waW47Ci0Jc2hvcnQgZW5hYmxlX3NwaTAgPSAwOwotCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKLQotCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgewotCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCi0JCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7Ci0JCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQkJZWxzZQotCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQotCQlpZiAoIWdwaW9faXNfdmFsaWQoY3NfcGluKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChkZXZpY2VzW2ldLmJ1c19udW0gPT0gMCkKLQkJCWVuYWJsZV9zcGkwID0gMTsKLQkJZWxzZQotCQkJZW5hYmxlX3NwaTEgPSAxOwotCi0JCS8qIGVuYWJsZSBjaGlwLXNlbGVjdCBwaW4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoY3NfcGluLCAxKTsKLQotCQkvKiBwYXNzIGNoaXAtc2VsZWN0IHBpbiB0byBkcml2ZXIgKi8KLQkJZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBjc19waW47Ci0JfQotCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0KLQkvKiBDb25maWd1cmUgU1BJIGJ1cyhlcykgKi8KLQlpZiAoZW5hYmxlX3NwaTApIHsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAwKTsJLyogU1BJMF9NSVNPICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMCk7CS8qIFNQSTBfTU9TSSAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwkvKiBTUEkwX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYxX3NwaTBfZGV2aWNlKTsKLQl9Ci0JaWYgKGVuYWJsZV9zcGkxKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMzAsIDApOwkvKiBTUEkxX01JU08gKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIzMSwgMCk7CS8qIFNQSTFfTU9TSSAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI5LCAwKTsJLyogU1BJMV9TUENLICovCi0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV9zcGkxX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTENEIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBsY2RjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSBsY2RjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX0xDRENfQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0xDRENfQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfTENEQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfTENEQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9JTlRTUkFNKQotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfU1JBTV9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfU1JBTV9CQVNFICsgQVQ5MVNBTTkyNjFfU1JBTV9TSVpFIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLSNlbmRpZgotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9sY2RjX2RldmljZSA9IHsKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmxjZGNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZsY2RjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBsY2RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGNkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKQotewotCWlmICghZGF0YSkgewotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcxMCgpKQotCQlhdDkxX2xjZGNfZGV2aWNlLm5hbWUgPSAiYXQ5MXNhbTlnMTAtbGNkZmIiOwotCWVsc2UKLQkJYXQ5MV9sY2RjX2RldmljZS5uYW1lID0gImF0OTFzYW05MjYxLWxjZGZiIjsKLQotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX1NUTikKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOyAgICAgLyogTENEVlNZTkMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOyAgICAgLyogTENESFNZTkMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIsIDApOyAgICAgLyogTENERE9UQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMsIDApOyAgICAgLyogTENEREVOICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAwKTsgICAgIC8qIExDRENDICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI1LCAwKTsgICAgIC8qIExDREQwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI2LCAwKTsgICAgIC8qIExDREQxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI3LCAwKTsgICAgIC8qIExDREQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAwKTsgICAgIC8qIExDREQzICovCi0jZWxzZQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CS8qIExDREhTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyLCAwKTsJLyogTENERE9UQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMsIDApOwkvKiBMQ0RERU4gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDApOwkvKiBMQ0RDQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7CS8qIExDREQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAwKTsJLyogTENERDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkvKiBMQ0RENCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDApOwkvKiBMQ0RENSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTEsIDApOwkvKiBMQ0RENiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTIsIDApOwkvKiBMQ0RENyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTUsIDApOwkvKiBMQ0REMTAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE2LCAwKTsJLyogTENERDExICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNywgMCk7CS8qIExDREQxMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTgsIDApOwkvKiBMQ0REMTMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE5LCAwKTsJLyogTENERDE0ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMCwgMCk7CS8qIExDREQxNSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMjMsIDApOwkvKiBMQ0REMTggKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjI0LCAwKTsJLyogTENERDE5ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIyNSwgMCk7CS8qIExDREQyMCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMjYsIDApOwkvKiBMQ0REMjEgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjI3LCAwKTsJLyogTENERDIyICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIyOCwgMCk7CS8qIExDREQyMyAqLwotI2VuZGlmCi0KLQlpZiAoQVJSQVlfU0laRShsY2RjX3Jlc291cmNlcykgPiAyKSB7Ci0JCXZvaWQgX19pb21lbSAqZmI7Ci0JCXN0cnVjdCByZXNvdXJjZSAqZmJfcmVzID0gJmxjZGNfcmVzb3VyY2VzWzJdOwotCQlzaXplX3QgZmJfbGVuID0gcmVzb3VyY2Vfc2l6ZShmYl9yZXMpOwotCi0JCWZiID0gaW9yZW1hcChmYl9yZXMtPnN0YXJ0LCBmYl9sZW4pOwotCQlpZiAoZmIpIHsKLQkJCW1lbXNldChmYiwgMCwgZmJfbGVuKTsKLQkJCWlvdW5tYXAoZmIpOwotCQl9Ci0JfQotCWxjZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9sY2RjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUaW1lci9Db3VudGVyIGJsb2NrCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9UQ0IwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9UQ0IwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVEMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9UQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1RDMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVEMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9UQzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1RDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3RjYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdGNiX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV90Y2JfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVFQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnR0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9SVFQsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1JUVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV9ydHRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3J0dCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gcnR0X3Jlc291cmNlcywKLX07Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JYXQ5MXNhbTkyNjFfcnR0X2RldmljZS5uYW1lID0gInJ0Yy1hdDkxc2FtOSI7Ci0JLyoKLQkgKiBUaGUgc2Vjb25kIHJlc291cmNlIGlzIG5lZWRlZDoKLQkgKiBHUEJSIHdpbGwgc2VydmUgYXMgdGhlIHN0b3JhZ2UgZm9yIFJUQyB0aW1lIG9mZnNldAotCSAqLwotCWF0OTFzYW05MjYxX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDM7Ci0JcnR0X3Jlc291cmNlc1sxXS5zdGFydCA9IEFUOTFTQU05MjYxX0JBU0VfR1BCUiArCi0JCQkJIDQgKiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9HUEJSOwotCXJ0dF9yZXNvdXJjZXNbMV0uZW5kID0gcnR0X3Jlc291cmNlc1sxXS5zdGFydCArIDM7Ci0JcnR0X3Jlc291cmNlc1syXS5zdGFydCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci0JcnR0X3Jlc291cmNlc1syXS5lbmQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCS8qIE9ubHkgb25lIHJlc291cmNlIGlzIG5lZWRlZDogUlRUIG5vdCB1c2VkIGFzIFJUQyAqLwotCWF0OTFzYW05MjYxX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0X3J0YygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfcnR0X2RldmljZSk7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBXYXRjaGRvZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9XRFQsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1dEVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfd2R0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV93ZHQiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYxX3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1NDIC0tIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDKSB8fCBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0NfTU9EVUxFKQotc3RhdGljIHU2NCBzc2MwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzAsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfc3NjMF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MwX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIzLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjUsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI2LCAxKTsKLX0KLQotc3RhdGljIHU2NCBzc2MxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfc3NjMV9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MxX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExNywgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjEsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAxKTsKLX0KLQotc3RhdGljIHU2NCBzc2MyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzIsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfc3NjMl9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDIsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MyX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMl9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjYsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI3LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyOCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjksIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzMwLCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxU0FNOTI2MV9JRF9TU0MwOgotCQlwZGV2ID0gJmF0OTFzYW05MjYxX3NzYzBfZGV2aWNlOwotCQljb25maWd1cmVfc3NjMF9waW5zKHBpbnMpOwotCQlicmVhazsKLQljYXNlIEFUOTFTQU05MjYxX0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXNhbTkyNjFfc3NjMV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MxX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWNhc2UgQVQ5MVNBTTkyNjFfSURfU1NDMjoKLQkJcGRldiA9ICZhdDkxc2FtOTI2MV9zc2MyX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzJfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVBUlQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX0RCR1UsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX0RCR1UgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSBkYmd1X2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAwLAotCS51c2VfZG1hX3J4CT0gMCwJCS8qIERCR1Ugbm90IGNhcGFibGUgb2YgcmVjZWl2ZSBETUEgKi8KLX07Ci0KLXN0YXRpYyB1NjQgZGJndV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfZGJndV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDApOwkJLyogRFJYRCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDEpOwkJLyogRFRYRCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9VUzAsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1VTMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1VTMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVVMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdWFydDBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MF9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQwX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM4LCAxKTsJCS8qIFRYRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzksIDApOwkJLyogUlhEMCAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7CS8qIFJUUzAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogQ1RTMCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9VUzEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1VTMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1VTMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVVMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdWFydDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDIsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMSk7CQkvKiBUWEQxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMywgMCk7CQkvKiBSWEQxICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsJLyogUlRTMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDApOwkvKiBDVFMxICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1VTMiwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVVMyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9VUzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV91YXJ0Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE1LCAwKTsJCS8qIFJYRDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAxKTsJCS8qIFRYRDIgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTUsIDApOwkvKiBSVFMyKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE2LCAwKTsJLyogQ1RTMiAqLwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwotCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgKnBkYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCQljYXNlIDA6CQkvKiBEQkdVICovCi0JCQlwZGV2ID0gJmF0OTFzYW05MjYxX2RiZ3VfZGV2aWNlOwotCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjFfSURfVVMwOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2MV91YXJ0MF9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MV9JRF9VUzE6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYxX3VhcnQxX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYxX0lEX1VTMjoKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjFfdWFydDJfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JfQotCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcGRhdGEtPm51bSA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KLQotCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKLQkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKLQkJaWYgKGF0OTFfdWFydHNbaV0pCi0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYwotICogc2V0dXAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3RjKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2My5jCmluZGV4IGZiZmYyMjguLmU3YWQxNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2My5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2My5jCkBAIC0xMCwzMDQgKzEwLDExIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2My5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAicG0uaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9QSU9BLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1BJT0IsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DREVfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DREVfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1BJT0NERSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9VUzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1VTMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzBfY2xrID0gewotCS5uYW1lCQk9ICJtY2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9NQ0kwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX01DSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBjYW5fY2xrID0gewotCS5uYW1lCQk9ICJjYW5fY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0NBTiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aV9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfVFdJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1NQSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0gewotCS5uYW1lCQk9ICJzc2MwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9TU0MwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1NTQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBhYzk3X2NsayA9IHsKLQkubmFtZQkJPSAiYWM5N19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfQUM5N0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0Y2JfY2xrID0gewotCS5uYW1lCQk9ICJ0Y2JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1RDQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGsgPSB7Ci0JLm5hbWUJCT0gInB3bV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfUFdNQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1hY2JfY2xrID0gewotCS5uYW1lCQk9ICJwY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0VNQUMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lCQk9ICJkbWFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0RNQSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3b2RnZV9jbGsgPSB7Ci0JLm5hbWUJCT0gIjJkZ2VfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEXzJER0UsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1ZGNfY2xrID0gewotCS5uYW1lCQk9ICJ1ZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1VEUCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGlzaV9jbGsgPSB7Ci0JLm5hbWUJCT0gImlzaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfSVNJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbGNkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImxjZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0xDREMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBvaGNpX2NsayA9IHsKLQkubmFtZQkJPSAib2hjaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfVUhQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FfY2xrLAotCSZwaW9CX2NsaywKLQkmcGlvQ0RFX2NsaywKLQkmdXNhcnQwX2NsaywKLQkmdXNhcnQxX2NsaywKLQkmdXNhcnQyX2NsaywKLQkmbW1jMF9jbGssCi0JJm1tYzFfY2xrLAotCSZjYW5fY2xrLAotCSZ0d2lfY2xrLAotCSZzcGkwX2NsaywKLQkmc3BpMV9jbGssCi0JJnNzYzBfY2xrLAotCSZzc2MxX2NsaywKLQkmYWM5N19jbGssCi0JJnRjYl9jbGssCi0JJnB3bV9jbGssCi0JJm1hY2JfY2xrLAotCSZ0d29kZ2VfY2xrLAotCSZ1ZGNfY2xrLAotCSZpc2lfY2xrLAotCSZsY2RjX2NsaywKLQkmZG1hX2NsaywKLQkmb2hjaV9jbGssCi0JLy8gaXJxMCAuLiBpcnExCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcGVyaXBoX2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JLyogT25lIGFkZGl0aW9uYWwgZmFrZSBjbG9jayBmb3IgbWFjYl9oY2xrICovCi0JQ0xLREVWX0NPTl9JRCgiaGNsayIsICZtYWNiX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMCIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMSIsICZzc2MxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmOTgwMDAuc3NjIiwgJnNzYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmY5YzAwMC5zc2MiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFzYW05MjYzLWxjZGZiLjAiLCAmbGNkY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImF0bWVsX21jaS4wIiwgJm1tYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJhdG1lbF9tY2kuMSIsICZtbWMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjAiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImF0bWVsX3NwaS4xIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjYl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJpMmMtYXQ5MXNhbTkyNjAuMCIsICZ0d2lfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiYXQ5MXNhbTlybC1wd20iLCAmcHdtX2NsayksCi0JLyogZmFrZSBoY2xrIGNsb2NrICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MV9vaGNpIiwgJm9oY2lfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NERV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0QiLCAmcGlvQ0RFX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvRSIsICZwaW9DREVfY2xrKSwKLQkvKiBtb3JlIHVzYXJ0IGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZWUwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOGMwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmY5MDAwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZjk0MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQkvKiBtb3JlIHRjIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZmZmN2MwMDAudGltZXIiLCAmdGNiX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYTAwMDAwLm9oY2kiLCAmb2hjaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImZmZmE0MDAwLnNwaSIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZmZmYTgwMDAuc3BpIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmZmY4MDAwMC5tbWMiLCAmbW1jMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImZmZjg0MDAwLm1tYyIsICZtbWMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZjg4MDAwLmkyYyIsICZ0d2lfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmYyMDAuZ3BpbyIsICZwaW9BX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0NERV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjgwMC5ncGlvIiwgJnBpb0NERV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZmEwMC5ncGlvIiwgJnBpb0NERV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZiODAwMC5wd20iLCAmcHdtX2NsayksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgdXNhcnRfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4xIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4yIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4zIiwgJnVzYXJ0Ml9jbGspLAotfTsKLQotLyoKLSAqIFRoZSBmb3VyIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMiA9IHsKLQkubmFtZQkJPSAicGNrMiIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDIsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMyA9IHsKLQkubmFtZQkJPSAicGNrMyIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDMsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotCWNsa19yZWdpc3RlcigmcGNrMik7Ci0JY2xrX3JlZ2lzdGVyKCZwY2szKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFzYW05MjYzX3JlZ2lzdGVyX2Nsb2NrcyBOVUxMCi0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBHUElPCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19iYW5rIGF0OTFzYW05MjYzX2dwaW9bXSBfX2luaXRkYXRhID0gewotCXsKLQkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0EsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjNfQkFTRV9QSU9BLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0IsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjNfQkFTRV9QSU9CLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0NERSwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2M19CQVNFX1BJT0MsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTkyNjNfSURfUElPQ0RFLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYzX0JBU0VfUElPRCwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2M19JRF9QSU9DREUsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjNfQkFTRV9QSU9FLAotCX0KLX07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTkyNjMgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCkBAIC0zMTksMTIxICsyNiwxNSBAQAogCWF0OTFfaW5pdF9zcmFtKDEsIEFUOTFTQU05MjYzX1NSQU0xX0JBU0UsIEFUOTFTQU05MjYzX1NSQU0xX1NJWkUpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxU0FNOTI2M19CQVNFX1NEUkFNQzAsIDUxMik7Ci0JYXQ5MV9pb3JlbWFwX3JhbWMoMSwgQVQ5MVNBTTkyNjNfQkFTRV9TRFJBTUMxLCA1MTIpOwotCWF0OTFzYW05MjZ4X2lvcmVtYXBfcGl0KEFUOTFTQU05MjYzX0JBU0VfUElUKTsKLQlhdDkxc2FtOV9pb3JlbWFwX3NtYygwLCBBVDkxU0FNOTI2M19CQVNFX1NNQzApOwotCWF0OTFzYW05X2lvcmVtYXBfc21jKDEsIEFUOTFTQU05MjYzX0JBU0VfU01DMSk7Ci0JYXQ5MV9pb3JlbWFwX21hdHJpeChBVDkxU0FNOTI2M19CQVNFX01BVFJJWCk7Ci0JYXQ5MV9wbV9zZXRfc3RhbmRieShhdDkxc2FtOV9zZHJhbV9zdGFuZGJ5KTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYzX2luaXRpYWxpemUodm9pZCkKIHsKIAlhcm1fcG1faWRsZSA9IGF0OTFzYW05X2lkbGU7CiAKIAlhdDkxX3N5c2lycV9tYXNrX3J0dChBVDkxU0FNOTI2M19CQVNFX1JUVDApOwogCWF0OTFfc3lzaXJxX21hc2tfcnR0KEFUOTFTQU05MjYzX0JBU0VfUlRUMSk7Ci0KLQkvKiBSZWdpc3RlciBHUElPIHN1YnN5c3RlbSAqLwotCWF0OTFfZ3Bpb19pbml0KGF0OTFzYW05MjYzX2dwaW8sIDUpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJzdGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTkyNjNfQkFTRV9SU1RDLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjNfQkFTRV9SU1RDICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2M19CQVNFX1NEUkFNQzAsCi0JCS5lbmQgICAgPSBBVDkxU0FNOTI2M19CQVNFX1NEUkFNQzAgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJzdGNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXNhbTkyNjAtcmVzZXQiLAotCS5yZXNvdXJjZSAgICAgICA9IHJzdGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUocnN0Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGR3Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2M19CQVNFX1NIRFdDLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjNfQkFTRV9TSERXQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGR3Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImF0OTEtcG93ZXJvZmYiLAotCS5yZXNvdXJjZSAgICAgICA9IHNoZHdjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNoZHdjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnN0Y19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2hkd2NfZGV2aWNlKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXNhbTkyNjNfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7Ci0JNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkgKi8KLQk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMsIEQgYW5kIEUgKi8KLQkwLAotCTAsCi0JNSwJLyogVVNBUlQgMCAqLwotCTUsCS8qIFVTQVJUIDEgKi8KLQk1LAkvKiBVU0FSVCAyICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAwICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAxICovCi0JMywJLyogQ0FOICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDAgKi8KLQk1LAkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCi0JNSwJLyogQUM5NyBDb250cm9sbGVyICovCi0JMCwJLyogVGltZXIgQ291bnRlciAwLCAxIGFuZCAyICovCi0JMCwJLyogUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyICovCi0JMywJLyogRXRoZXJuZXQgKi8KLQkwLAotCTAsCS8qIDJEIEdyYXBoaWMgRW5naW5lICovCi0JMiwJLyogVVNCIERldmljZSBQb3J0ICovCi0JMCwJLyogSW1hZ2UgU2Vuc29yIEludGVyZmFjZSAqLwotCTMsCS8qIExEQyBDb250cm9sbGVyICovCi0JMCwJLyogRE1BIENvbnRyb2xsZXIgKi8KLQkwLAotCTIsCS8qIFVTQiBIb3N0IHBvcnQgKi8KLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkgKi8KLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMSkgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2M19pbml0X3RpbWUodm9pZCkKLXsKLQlhdDkxc2FtOTI2eF9waXRfaW5pdChOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTKTsKIH0KIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTkyNjMpCiAJLm1hcF9pbyA9IGF0OTFzYW05MjYzX21hcF9pbywKLQkuZGVmYXVsdF9pcnFfcHJpb3JpdHkgPSBhdDkxc2FtOTI2M19kZWZhdWx0X2lycV9wcmlvcml0eSwKLQkuZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05MjYzX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVNBTTkyNjNfSURfSVJRMSksCi0JLmlvcmVtYXBfcmVnaXN0ZXJzID0gYXQ5MXNhbTkyNjNfaW9yZW1hcF9yZWdpc3RlcnMsCi0JLnJlZ2lzdGVyX2Nsb2NrcyA9IGF0OTFzYW05MjYzX3JlZ2lzdGVyX2Nsb2NrcywKLQkucmVnaXN0ZXJfZGV2aWNlcyA9IGF0OTFzYW05MjYzX3JlZ2lzdGVyX2RldmljZXMsCiAJLmluaXQgPSBhdDkxc2FtOTI2M19pbml0aWFsaXplLAotCS5pbml0X3RpbWUgPSBhdDkxc2FtOTI2M19pbml0X3RpbWUsCiBBVDkxX1NPQ19FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWYwZTJmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTM4ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYzX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIb3N0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX1VIUF9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VIUCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVUhQLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JoX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKLXsKLQlpbnQgaTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogRW5hYmxlIFZCdXMgY29udHJvbCBmb3IgVUhQIHBvcnRzICovCi0JZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRzOyBpKyspIHsKLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW5baV0pKQotCQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmJ1c19waW5baV0sCi0JCQkJCSAgICAgZGF0YS0+dmJ1c19waW5fYWN0aXZlX2xvd1tpXSk7Ci0JfQotCi0JLyogRW5hYmxlIG92ZXJjdXJyZW50IG5vdGlmaWNhdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSwgMSk7Ci0JfQotCi0JdXNiaF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmhfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBEZXZpY2UgKEdhZGdldCkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0FUOTFfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIHVkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVURQLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9VRFAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VRFAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VEUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKLQl9Ci0KLQkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBieSBVU0IgZGV2aWNlIHBlcmlwaGVyYWwgKi8KLQotCXVkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEV0aGVybmV0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDQikgfHwgZGVmaW5lZChDT05GSUdfTUFDQl9NT0RVTEUpCi1zdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIGV0aF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV0aF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfRU1BQywKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfRU1BQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0VNQUMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0VNQUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtYWNiIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cGh5X2lycV9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cGh5X2lycV9waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7Ci0JfQotCi0JLyogUGlucyB1c2VkIGZvciBNSUkgYW5kIFJNSUkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIxLCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNSwgMCk7CS8qIEVSWERWICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNSwgMCk7CS8qIEVSWDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI2LCAwKTsJLyogRVJYMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjcsIDApOwkvKiBFUlhFUiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjgsIDApOwkvKiBFVFhFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjMsIDApOwkvKiBFVFgwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNCwgMCk7CS8qIEVUWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTMwLCAwKTsJLyogRU1ESU8gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI5LCAwKTsJLyogRU1EQyAqLwotCi0JaWYgKCFkYXRhLT5pc19ybWlpKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjIsIDApOwkvKiBFQ1JTICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjYsIDApOwkvKiBFQ09MICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjIsIDApOwkvKiBFUlgyICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjMsIDApOwkvKiBFUlgzICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjcsIDApOwkvKiBFUlhDSyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIwLCAwKTsJLyogRVRYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIxLCAwKTsJLyogRVRYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI0LCAwKTsJLyogRVRYRVIgKi8KLQl9Ci0KLQlldGhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfZXRoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBNTUMgLyBTRAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX01NQ19BVE1FTE1DSSkKLXN0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWMwX2RhdGEsIG1tYzFfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9NQ0kwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9NQ0kwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfTUNJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfTUNJMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX21tYzBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jMF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfTUNJMSwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfTUNJMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX01DSTEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX01DSTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19tbWMxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tYzFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG1tYzFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMxX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBzbG90X2NvdW50ID0gMDsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUNJX01BWF9OUl9TTE9UUzsgaSsrKSB7Ci0KLQkJaWYgKCFkYXRhLT5zbG90W2ldLmJ1c193aWR0aCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGlucHV0L2lycSAqLwotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4pKSB7Ci0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbiwKLQkJCQkJMSk7Ci0JCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4sCi0JCQkJCTEpOwotCQl9Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbaV0ud3BfcGluKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFtpXS53cF9waW4sIDEpOwotCi0JCWlmIChtbWNfaWQgPT0gMCkgewkJCQkvKiBNQ0kwICovCi0JCQlzd2l0Y2ggKGkpIHsKLQkJCWNhc2UgMDoJCQkJCS8qIHNsb3QgQSAqLwotCQkJCS8qIENNRCAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMSk7Ci0JCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMCwgMSk7Ci0JCQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoID09IDQpIHsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzLCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE0LCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE1LCAxKTsKLQkJCQl9Ci0JCQkJc2xvdF9jb3VudCsrOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgkJCQkJLyogc2xvdCBCICovCi0JCQkJLyogQ01EICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNiwgMSk7Ci0JCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTcsIDEpOwotCQkJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDEpOwotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMSk7Ci0JCQkJfQotCQkJCXNsb3RfY291bnQrKzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJBVDkxOiBTRC9NTUMgc2xvdCAlZCBub3QgYXZhaWxhYmxlXG4iLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChzbG90X2NvdW50KSB7Ci0JCQkJLyogQ0xLICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7Ci0KLQkJCQltbWMwX2RhdGEgPSAqZGF0YTsKLQkJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX21tYzBfZGV2aWNlKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChtbWNfaWQgPT0gMSkgewkJCS8qIE1DSTEgKi8KLQkJCXN3aXRjaCAoaSkgewotCQkJY2FzZSAwOgkJCQkJLyogc2xvdCBBICovCi0JCQkJLyogQ01EICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE3LCAxKTsKLQkJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsKLQkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgewotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDEpOwotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMSk7Ci0JCQkJfQotCQkJCXNsb3RfY291bnQrKzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToJCQkJCS8qIHNsb3QgQiAqLwotCQkJCS8qIENNRCAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjEsIDEpOwotCQkJCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAxKTsKLQkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgewotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMSk7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDEpOwotCQkJCX0KLQkJCQlzbG90X2NvdW50Kys7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiQVQ5MTogU0QvTU1DIHNsb3QgJWQgbm90IGF2YWlsYWJsZVxuIiwgaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoc2xvdF9jb3VudCkgewotCQkJCS8qIENMSyAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNiwgMCk7Ci0KLQkJCQltbWMxX2RhdGEgPSAqZGF0YTsKLQkJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX21tYzFfZGV2aWNlKTsKLQkJCX0KLQkJfQotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ29tcGFjdCBGbGFzaCAoUENNQ0lBIG9yIElERSkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19QQVRBX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfQVQ5MV9NT0RVTEUpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BVDkxX0NGKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxX0NGX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgY2YwX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2YwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzQsCi0JCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfNCArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhBTkQxNkJJVCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZjBfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJmNmMF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY2YwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2YwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBjZjFfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZjFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxX0NISVBTRUxFQ1RfNSwKLQkJLmVuZAk9IEFUOTFfQ0hJUFNFTEVDVF81ICsgU1pfMjU2TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEFORDE2QklULAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNmMV9kZXZpY2UgPSB7Ci0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmY2YxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBjZjFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjZjFfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZWJpMF9jc2E7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBhc3NpZ24gQ1M0IG9yIENTNSB0byBTTUMgd2l0aCBDb21wYWN0IEZsYXNoIGxvZ2ljIHN1cHBvcnQsCi0JICogd2UgYXNzdW1lIFNNQyB0aW1pbmdzIGFyZSBjb25maWd1cmVkIGJ5IGJvYXJkIGNvZGUsCi0JICogZXhjZXB0IFRydWUgSURFIHdoZXJlIHRpbWluZ3MgYXJlIGNvbnRyb2xsZWQgYnkgZHJpdmVyCi0JICovCi0JZWJpMF9jc2EgPSBhdDkxX21hdHJpeF9yZWFkKEFUOTFfTUFUUklYX0VCSTBDU0EpOwotCXN3aXRjaCAoZGF0YS0+Y2hpcHNlbGVjdCkgewotCWNhc2UgNDoKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ2LCAwKTsgIC8qIEVCSTBfTkNTNC9DRkNTMCAqLwotCQllYmkwX2NzYSB8PSBBVDkxX01BVFJJWF9FQkkwX0NTNEFfU01DX0NGMTsKLQkJY2YwX2RhdGEgPSAqZGF0YTsKLQkJcGRldiA9ICZjZjBfZGV2aWNlOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENywgMCk7ICAvKiBFQkkwX05DUzUvQ0ZDUzEgKi8KLQkJZWJpMF9jc2EgfD0gQVQ5MV9NQVRSSVhfRUJJMF9DUzVBX1NNQ19DRjI7Ci0JCWNmMV9kYXRhID0gKmRhdGE7Ci0JCXBkZXYgPSAmY2YxX2RldmljZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJBVDkxIENGOiBiYWQgY2hpcC1zZWxlY3QgcmVxdWVzdGVkICgldSlcbiIsCi0JCSAgICAgICBkYXRhLT5jaGlwc2VsZWN0KTsKLQkJcmV0dXJuOwotCX0KLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQkkwQ1NBLCBlYmkwX2NzYSk7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5kZXRfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5kZXRfcGluLCAxKTsKLQl9Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5pcnFfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmlycV9waW4sIDEpOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5pcnFfcGluLCAxKTsKLQl9Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52Y2NfcGluKSkKLQkJLyogaW5pdGlhbGx5IG9mZiAqLwotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT52Y2NfcGluLCAwKTsKLQotCS8qIGVuYWJsZSBFQkkgY29udHJvbGxlZCBwaW5zICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ1LCAxKTsgIC8qIE5XQUlUICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ4LCAwKTsgIC8qIENGQ0UxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ5LCAwKTsgIC8qIENGQ0UyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNCwgMCk7IC8qIENGTlJXICovCi0KLQlwZGV2LT5uYW1lID0gKGRhdGEtPmZsYWdzICYgQVQ5MV9DRl9UUlVFX0lERSkgPyAicGF0YV9hdDkxIiA6ICJhdDkxX2NmIjsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBOQU5EIC8gU21hcnRNZWRpYQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7Ci0KLSNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IE5BTkRfQkFTRSwKLQkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9FQ0MwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9FQ0MwICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX25hbmQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZuYW5kX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBuYW5kX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobmFuZF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQkkwQ1NBKTsKLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQkkwQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9FQkkwX0NTM0FfU01DX1NNQVJUTUVESUEpOwotCi0JLyogZW5hYmxlIHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmVuYWJsZV9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKLQotCS8qIHJlYWR5L2J1c3kgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmR5X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cmR5X3BpbiwgMSk7Ci0KLQkvKiBjYXJkIGRldGVjdCBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5kZXRfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKLQotCW5hbmRfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfbmFuZF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRXSSAoaTJjKQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFByZWZlciB0aGUgR1BJTyBjb2RlIHNpbmNlIHRoZSBUV0kgY29udHJvbGxlciBpc24ndCByb2J1c3QKLSAqIChnZXRzIG92ZXJydW5zIGFuZCB1bmRlcnJ1bnMgdW5kZXIgbG9hZCkgYW5kIGNhbiBvbmx5IGlzc3VlCi0gKiByZXBlYXRlZCBTVEFSVHMgaW4gb25lIHNjZW5hcmlvICh0aGUgZHJpdmVyIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGVtKS4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKLQkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQjQsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKLQkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQjUsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwkJLyogVFdEIChTREEpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEI0LCAxKTsKLQotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BCNSwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEI1LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfdHdpX2RldmljZSk7Ci19Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0kyQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MV9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHdpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9UV0ksCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1RXSSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1RXSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVFdJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfdHdpX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaTJjLWF0OTFzYW05MjYwIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0d2lfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0d2lfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQkvKiBwaW5zIHVzZWQgZm9yIFRXSSBpbnRlcmZhY2UgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDApOwkJLyogVFdEICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEI0LCAxKTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNSwgMCk7CQkvKiBUV0NLICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEI1LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfdHdpX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTUEkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgdTY0IHNwaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9TUEkwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9TUEkwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1BJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1BJMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3NwaTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaTBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMF9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEE1LCBBVDkxX1BJTl9QQTMsIEFUOTFfUElOX1BBNCwgQVQ5MV9QSU5fUEIxMSB9OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1NQSTEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1NQSTEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9TUEkxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9TUEkxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfc3BpMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkxX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQjE1LCBBVDkxX1BJTl9QQjE2LCBBVDkxX1BJTl9QQjE3LCBBVDkxX1BJTl9QQjE4IH07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGNzX3BpbjsKLQlzaG9ydCBlbmFibGVfc3BpMCA9IDA7Ci0Jc2hvcnQgZW5hYmxlX3NwaTEgPSAwOwotCi0JLyogQ2hvb3NlIFNQSSBjaGlwLXNlbGVjdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfZGV2aWNlczsgaSsrKSB7Ci0JCWlmIChkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSkKLQkJCWNzX3BpbiA9ICh1bnNpZ25lZCBsb25nKSBkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YTsKLQkJZWxzZSBpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCi0JCQljc19waW4gPSBzcGkwX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCQllbHNlCi0JCQljc19waW4gPSBzcGkxX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCi0JCWlmICghZ3Bpb19pc192YWxpZChjc19waW4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJZW5hYmxlX3NwaTAgPSAxOwotCQllbHNlCi0JCQllbmFibGVfc3BpMSA9IDE7Ci0KLQkJLyogZW5hYmxlIGNoaXAtc2VsZWN0IHBpbiAqLwotCQlhdDkxX3NldF9ncGlvX291dHB1dChjc19waW4sIDEpOwotCi0JCS8qIHBhc3MgY2hpcC1zZWxlY3QgcGluIHRvIGRyaXZlciAqLwotCQlkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSA9ICh2b2lkICopIGNzX3BpbjsKLQl9Ci0KLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQotCS8qIENvbmZpZ3VyZSBTUEkgYnVzKGVzKSAqLwotCWlmIChlbmFibGVfc3BpMCkgewotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTAsIDApOwkvKiBTUEkwX01JU08gKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExLCAwKTsJLyogU1BJMF9NT1NJICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMiwgMCk7CS8qIFNQSTBfU1BDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfc3BpMF9kZXZpY2UpOwotCX0KLQlpZiAoZW5hYmxlX3NwaTEpIHsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMCk7CS8qIFNQSTFfTUlTTyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEzLCAwKTsJLyogU1BJMV9NT1NJICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTQsIDApOwkvKiBTUEkxX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3NwaTFfZGV2aWNlKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBQzk3Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQotc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9BQzk3QywKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9BQzk3QywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfQUM5N0MsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19hYzk3X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFjOTdfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGFjOTdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMCwgMCk7CS8qIEFDOTdGUyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CS8qIEFDOTdDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMiwgMCk7CS8qIEFDOTdUWCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMywgMCk7CS8qIEFDOTdSWCAqLwotCi0JLyogcmVzZXQgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZXNldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOwotCi0JYWM5N19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19hYzk3X2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDQU4gQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0NBTl9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19DQU5fQVQ5MV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNhbl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfQ0FOLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9DQU4gKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9DQU4sCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0NBTiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX2Nhbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfY2FuIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gY2FuX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2FuX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2FuKHN0cnVjdCBhdDkxX2Nhbl9kYXRhICpkYXRhKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDApOwkvKiBDQU5UWCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBDQU5SWCAqLwotCWF0OTFzYW05MjYzX2Nhbl9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBkYXRhOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19jYW5fZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2FuKHN0cnVjdCBhdDkxX2Nhbl9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTENEIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBsY2RjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSBsY2RjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0xDRENfQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0xDRENfQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfTENEQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfTENEQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfbGNkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFzYW05MjYzLWxjZGZiIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmxjZGNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZsY2RjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBsY2RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGNkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJLyogTENESFNZTkMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIsIDApOwkvKiBMQ0RET1RDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMywgMCk7CS8qIExDRERFTiAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCOSwgMCk7CS8qIExDRENDICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM2LCAwKTsJLyogTENERDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOwkvKiBMQ0REMyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOCwgMCk7CS8qIExDREQ0ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM5LCAwKTsJLyogTENERDUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEwLCAwKTsJLyogTENERDYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogTENERDcgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAwKTsJLyogTENERDEwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNSwgMCk7CS8qIExDREQxMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTYsIDApOwkvKiBMQ0REMTIgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzEyLCAwKTsJLyogTENERDEzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxOCwgMCk7CS8qIExDREQxNCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTksIDApOwkvKiBMQ0REMTUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIyLCAwKTsJLyogTENERDE4ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyMywgMCk7CS8qIExDREQxOSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMjQsIDApOwkvKiBMQ0REMjAgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzE3LCAwKTsJLyogTENERDIxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyNiwgMCk7CS8qIExDREQyMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMjcsIDApOwkvKiBMQ0REMjMgKi8KLQotCWxjZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9sY2RjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVklERU9fQVQ5MV9JU0kpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0FUOTFfSVNJX01PRFVMRSkKLQotc3RydWN0IHJlc291cmNlIGlzaV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfSVNJLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9JU0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9JU0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0lTSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX2lzaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfaXNpIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gaXNpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaXNpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jaykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTAsIDApOwkvKiBJU0lfRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTEsIDApOwkvKiBJU0lfRDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIsIDApOwkvKiBJU0lfRDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTMsIDApOwkvKiBJU0lfRDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTQsIDApOwkvKiBJU0lfRDQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTUsIDApOwkvKiBJU0lfRDUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTYsIDApOwkvKiBJU0lfRDYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTcsIDApOwkvKiBJU0lfRDcgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTgsIDApOwkvKiBJU0lfUENLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU5LCAwKTsJLyogSVNJX0hTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMCwgMCk7CS8qIElTSV9WU1lOQyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BFMTIsIDApOwkvKiBJU0lfUEQ4ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEUxMywgMCk7CS8qIElTSV9QRDkgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRTE0LCAwKTsJLyogSVNJX1BEMTAgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRTE1LCAwKTsJLyogSVNJX1BEMTEgKi8KLQotCWlmICh1c2VfcGNrX2FzX21jaykgewotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRTExLCAwKTsJLyogSVNJX01DSyAoUENLMykgKi8KLQotCQkvKiBUT0RPOiByZWdpc3RlciB0aGUgUENLIGZvciBJU0lfTUNLIGFuZCBzZXQgaXRzIHBhcmVudCAqLwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jaykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9jawotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BVE1FTF9UQ0xJQgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVENCMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1RDQiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVENCLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfdGNiX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdGNiIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0Y2JfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2JfcmVzb3VyY2VzKSwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19PRikKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRjYl9pZHNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtdGNiIiB9LAotCXsgLypzZW50aW5lbCovIH0KLX07Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKQotewotI2lmIGRlZmluZWQoQ09ORklHX09GKQotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCB0Y2JfaWRzKTsKLQlpZiAobnApIHsKLQkJb2Zfbm9kZV9wdXQobnApOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3RjYl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFJUVAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHQwX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9SVFQwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9SVFQwICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3J0dDBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3J0dCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gcnR0MF9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0dDFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1JUVDEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1JUVDEgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfcnR0IiwKLQkuaWQJCT0gMSwKLQkucmVzb3VyY2UJPSBydHQxX3Jlc291cmNlcywKLX07Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0KLQlzd2l0Y2ggKENPTkZJR19SVENfRFJWX0FUOTFTQU05X1JUVCkgewotCWNhc2UgMDoKLQkJLyoKLQkJICogVGhlIHNlY29uZCByZXNvdXJjZSBpcyBuZWVkZWQgb25seSBmb3IgdGhlIGNob3NlbiBSVFQ6Ci0JCSAqIEdQQlIgd2lsbCBzZXJ2ZSBhcyB0aGUgc3RvcmFnZSBmb3IgUlRDIHRpbWUgb2Zmc2V0Ci0JCSAqLwotCQlhdDkxc2FtOTI2M19ydHQwX2RldmljZS5udW1fcmVzb3VyY2VzID0gMzsKLQkJYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci0JCXBkZXYgPSAmYXQ5MXNhbTkyNjNfcnR0MF9kZXZpY2U7Ci0JCXIgPSBydHQwX3Jlc291cmNlczsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlhdDkxc2FtOTI2M19ydHQwX2RldmljZS5udW1fcmVzb3VyY2VzID0gMTsKLQkJYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDM7Ci0JCXBkZXYgPSAmYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2U7Ci0JCXIgPSBydHQxX3Jlc291cmNlczsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJhdDkxc2FtOTI2Mzogb25seSBzdXBwb3J0cyAyIFJUVCAoJWQpXG4iLAotCQkgICAgICAgQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfUlRUKTsKLQkJcmV0dXJuOwotCX0KLQotCXBkZXYtPm5hbWUgPSAicnRjLWF0OTFzYW05IjsKLQlyWzFdLnN0YXJ0ID0gQVQ5MVNBTTkyNjNfQkFTRV9HUEJSICsgNCAqIENPTkZJR19SVENfRFJWX0FUOTFTQU05X0dQQlI7Ci0JclsxXS5lbmQgPSByWzFdLnN0YXJ0ICsgMzsKLQlyWzJdLnN0YXJ0ID0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUzsKLQlyWzJdLmVuZCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JLyogT25seSBvbmUgcmVzb3VyY2UgaXMgbmVlZGVkOiBSVFQgbm90IHVzZWQgYXMgUlRDICovCi0JYXQ5MXNhbTkyNjNfcnR0MF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci0JYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0X3J0YygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfcnR0MF9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UpOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgV2F0Y2hkb2cKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPR19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfV0RULAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9XRFQgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3dkdF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfd2R0IiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M193ZHRfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFBXTQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFdNX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwd21fcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1BXTUMsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1BXTUMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9QV01DLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9QV01DLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfcHdtMF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXNhbTlybC1wd20iLAotCS5pZAk9IC0xLAotCS5yZXNvdXJjZQk9IHB3bV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB3bV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3B3bSh1MzIgbWFzaykKLXsKLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMCkpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCNywgMSk7CS8qIGVuYWJsZSBQV00wICovCi0KLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMSkpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCOCwgMSk7CS8qIGVuYWJsZSBQV00xICovCi0KLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMikpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjksIDEpOwkvKiBlbmFibGUgUFdNMiAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTMpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjI5LCAxKTsJLyogZW5hYmxlIFBXTTMgKi8KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfcHdtMF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9wd20odTMyIG1hc2spIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKLXN0YXRpYyB1NjQgc3NjMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9TU0MwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9TU0MwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1NDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1NDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3NzYzBfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAwLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMF9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMF9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMiwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMywgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCNCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkYpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCNSwgMSk7Ci19Ci0KLXN0YXRpYyB1NjQgc3NjMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9TU0MxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9TU0MxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1NDMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1NDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3NzYzFfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAxLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNiwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjExLCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxU0FNOTI2M19JRF9TU0MwOgotCQlwZGV2ID0gJmF0OTFzYW05MjYzX3NzYzBfZGV2aWNlOwotCQljb25maWd1cmVfc3NjMF9waW5zKHBpbnMpOwotCQlicmVhazsKLQljYXNlIEFUOTFTQU05MjYzX0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXNhbTkyNjNfc3NjMV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MxX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVQVJUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX0RCR1UsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX0RCR1UgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSBkYmd1X2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAwLAotCS51c2VfZG1hX3J4CT0gMCwJCS8qIERCR1Ugbm90IGNhcGFibGUgb2YgcmVjZWl2ZSBETUEgKi8KLX07Ci0KLXN0YXRpYyB1NjQgZGJndV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfZGJndV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMwLCAwKTsJCS8qIERSWEQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMxLCAxKTsJCS8qIERUWEQgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVVMwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VUzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VTMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQwX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3VhcnQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDBfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjYsIDEpOwkJLyogVFhEMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDApOwkJLyogUlhEMCAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMCk7CS8qIFJUUzAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsJLyogQ1RTMCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1VTMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VTMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVVMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfdWFydDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDIsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQwLCAxKTsJCS8qIFRYRDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEsIDApOwkJLyogUlhEMSAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQ3LCAwKTsJLyogUlRTMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BEOCwgMCk7CS8qIENUUzEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVVMyLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VUzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VTMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQyX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3VhcnQyX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAzLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDJfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0Ml9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0Ml9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDJfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMSk7CQkvKiBUWEQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQzLCAwKTsJCS8qIFJYRDIgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BENSwgMCk7CS8qIFJUUzIgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDYsIDApOwkvKiBDVFMyICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXRkYXRhIGF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCi0KLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGF0bWVsX3VhcnRfZGF0YSAqcGRhdGE7Ci0KLQlzd2l0Y2ggKGlkKSB7Ci0JCWNhc2UgMDoJCS8qIERCR1UgKi8KLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjNfZGJndV9kZXZpY2U7Ci0JCQljb25maWd1cmVfZGJndV9waW5zKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2M19JRF9VUzA6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYzX3VhcnQwX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDBfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYzX0lEX1VTMToKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjNfdWFydDFfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0MV9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjNfSURfVVMyOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2M191YXJ0Ml9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQyX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQl9Ci0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlwZGF0YS0+bnVtID0gcG9ydG5yOwkJLyogdXBkYXRlIHRvIG1hcHBlZCBJRCAqLwotCi0JaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQotCQlhdDkxX3VhcnRzW3BvcnRucl0gPSBwZGV2OwotfQotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgewotCQlpZiAoYXQ5MV91YXJ0c1tpXSkKLQkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpIHt9Ci12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYwotICogc2V0dXAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlpZiAob2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3RjKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jCmluZGV4IDQwNTQyN2UuLmI2MTE3YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jCkBAIC0xMCwzNTYgKzEwLDEyIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05ZzQ1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJwbS5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfT0xEX0NMS19BVDkxKQotI2luY2x1ZGUgImNsb2NrLmgiCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENsb2NrcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBwZXJpcGhlcmFsIGNsb2Nrcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGlvQV9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0FfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1BJT0EsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9CX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUElPQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0NfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9QSU9DLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvREVfY2xrID0gewotCS5uYW1lCQk9ICJwaW9ERV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUElPREUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0cm5nX2NsayA9IHsKLQkubmFtZQkJPSAidHJuZ19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFJORywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VUzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VTMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0M19jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0M19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVVMzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jMF9jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX01DSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kwX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFdJMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aTFfY2xrID0gewotCS5uYW1lCQk9ICJ0d2kxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9UV0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1NQSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0gewotCS5uYW1lCQk9ICJzc2MwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9TU0MwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1NTQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0Y2IwX2NsayA9IHsKLQkubmFtZQkJPSAidGNiMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVENCLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcHdtX2NsayA9IHsKLQkubmFtZQkJPSAicHdtX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9QV01DLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHNjX2NsayA9IHsKLQkubmFtZQkJPSAidHNjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9UU0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lCQk9ICJkbWFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0RNQSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVocGhzX2NsayA9IHsKLQkubmFtZQkJPSAidWhwaHNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VIUEhTLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbGNkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImxjZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0xDREMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBhYzk3X2NsayA9IHsKLQkubmFtZQkJPSAiYWM5N19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfQUM5N0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKLQkubmFtZQkJPSAicGNsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9FTUFDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgaXNpX2NsayA9IHsKLQkubmFtZQkJPSAiaXNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9JU0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1ZHBoc19jbGsgPSB7Ci0JLm5hbWUJCT0gInVkcGhzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VRFBIUywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2xrID0gewotCS5uYW1lCQk9ICJtY2kxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9NQ0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi0vKiBWaWRlbyBkZWNvZGVyIGNsb2NrIC0gT25seSBmb3Igc2FtOW0xMC9zYW05bTExICovCi1zdGF0aWMgc3RydWN0IGNsayB2ZGVjX2NsayA9IHsKLQkubmFtZQkJPSAidmRlY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVkRFQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWRjX29wX2NsayA9IHsKLQkubmFtZQkJPSAiYWRjX29wX2NsayIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLQkucmF0ZV9oegk9IDMwMDAwMCwKLX07Ci0KLS8qIEFFUy9UREVTL1NIQSBjbG9jayAtIE9ubHkgZm9yIHNhbTltMTEvc2FtOWc1NiAqLwotc3RhdGljIHN0cnVjdCBjbGsgYWVzdGRlc3NoYV9jbGsgPSB7Ci0JLm5hbWUJCT0gImFlc3RkZXNzaGFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0FFU1RERVNTSEEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQV9jbGssCi0JJnBpb0JfY2xrLAotCSZwaW9DX2NsaywKLQkmcGlvREVfY2xrLAotCSZ0cm5nX2NsaywKLQkmdXNhcnQwX2NsaywKLQkmdXNhcnQxX2NsaywKLQkmdXNhcnQyX2NsaywKLQkmdXNhcnQzX2NsaywKLQkmbW1jMF9jbGssCi0JJnR3aTBfY2xrLAotCSZ0d2kxX2NsaywKLQkmc3BpMF9jbGssCi0JJnNwaTFfY2xrLAotCSZzc2MwX2NsaywKLQkmc3NjMV9jbGssCi0JJnRjYjBfY2xrLAotCSZwd21fY2xrLAotCSZ0c2NfY2xrLAotCSZkbWFfY2xrLAotCSZ1aHBoc19jbGssCi0JJmxjZGNfY2xrLAotCSZhYzk3X2NsaywKLQkmbWFjYl9jbGssCi0JJmlzaV9jbGssCi0JJnVkcGhzX2NsaywKLQkmbW1jMV9jbGssCi0JJmFkY19vcF9jbGssCi0JJmFlc3RkZXNzaGFfY2xrLAotCS8vIGlycTAKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBwZXJpcGhfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQkvKiBPbmUgYWRkaXRpb25hbCBmYWtlIGNsb2NrIGZvciBtYWNiX2hjbGsgKi8KLQlDTEtERVZfQ09OX0lEKCJoY2xrIiwgJm1hY2JfY2xrKSwKLQkvKiBPbmUgYWRkaXRpb25hbCBmYWtlIGNsb2NrIGZvciBvaGNpICovCi0JQ0xLREVWX0NPTl9JRCgib2hjaV9jbGsiLCAmdWhwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxc2FtOWc0NS1sY2RmYi4wIiwgJmxjZGNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxc2FtOWc0NWVzLWxjZGZiLjAiLCAmbGNkY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJlaGNpX2NsayIsICJhdG1lbC1laGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXRtZWxfdXNiYV91ZGMiLCAmdXRtaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0bWVsX3VzYmFfdWRjIiwgJnVkcGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiYXRtZWxfbWNpLjAiLCAmbW1jMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImF0bWVsX21jaS4xIiwgJm1tYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJhdG1lbF9zcGkuMCIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjEiLCAmc3BpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGNiMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiYXRtZWxfdGNiLjEiLCAmdGNiMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJpMmMtYXQ5MXNhbTlnMTAuMCIsICZ0d2kwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOWcxMC4xIiwgJnR3aTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxc2FtOWc0NV9zc2MuMCIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXNhbTlnNDVfc3NjLjEiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZjljMDAwLnNzYyIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmYTAwMDAuc3NjIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiYXRtZWwtdHJuZyIsICZ0cm5nX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImF0bWVsX3NoYSIsICZhZXN0ZGVzc2hhX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImF0bWVsX3RkZXMiLCAmYWVzdGRlc3NoYV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJhdG1lbF9hZXMiLCAmYWVzdGRlc3NoYV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJhdDkxc2FtOXJsLXB3bSIsICZwd21fY2xrKSwKLQkvKiBtb3JlIHVzYXJ0IGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZWUwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOGMwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmY5MDAwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZjk0MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOTgwMDAuc2VyaWFsIiwgJnVzYXJ0M19jbGspLAotCS8qIG1vcmUgdGMgbG9va3VwIHRhYmxlIGZvciBEVCBlbnRyaWVzICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmZmY3YzAwMC50aW1lciIsICZ0Y2IwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmZmZkNDAwMC50aW1lciIsICZ0Y2IwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiNzAwMDAwLm9oY2kiLCAmdWhwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiZWhjaV9jbGsiLCAiODAwMDAwLmVoY2kiLCAmdWhwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmZmY4MDAwMC5tbWMiLCAmbW1jMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImZmZmQwMDAwLm1tYyIsICZtbWMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZjg0MDAwLmkyYyIsICZ0d2kwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZjg4MDAwLmkyYyIsICZ0d2kxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZmZmYTQwMDAuc3BpIiwgJnNwaTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmZmZhODAwMC5zcGkiLCAmc3BpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjYwMDAwMC5nYWRnZXQiLCAmdXRtaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgIjYwMDAwMC5nYWRnZXQiLCAmdWRwaHNfY2xrKSwKLQkvKiBmYWtlIGhjbGsgY2xvY2sgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxX29oY2kiLCAmdWhwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmYyMDAuZ3BpbyIsICZwaW9BX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9ERV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZmEwMC5ncGlvIiwgJnBpb0RFX2NsayksCi0KLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9EIiwgJnBpb0RFX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvRSIsICZwaW9ERV9jbGspLAotCS8qIEZha2UgYWRjIGNsb2NrICovCi0JQ0xLREVWX0NPTl9JRCgiYWRjX2NsayIsICZ0c2NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYjgwMDAucHdtIiwgJnB3bV9jbGspLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHVzYXJ0X2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjAiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMSIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMiIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMyIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNCIsICZ1c2FydDNfY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgdHdvIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOW0xMCgpIHx8IGNwdV9pc19hdDkxc2FtOW0xMSgpKQotCQljbGtfcmVnaXN0ZXIoJnZkZWNfY2xrKTsKLQotCWNsa19yZWdpc3RlcigmcGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2sxKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFzYW05ZzQ1X3JlZ2lzdGVyX2Nsb2NrcyBOVUxMCi0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBHUElPCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19iYW5rIGF0OTFzYW05ZzQ1X2dwaW9bXSBfX2luaXRkYXRhID0gewotCXsKLQkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0EsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlHNDVfQkFTRV9QSU9BLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0IsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlHNDVfQkFTRV9QSU9CLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0MsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlHNDVfQkFTRV9QSU9DLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0RFLAotCQkucmVnYmFzZQk9IEFUOTFTQU05RzQ1X0JBU0VfUElPRCwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOUc0NV9JRF9QSU9ERSwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOUc0NV9CQVNFX1BJT0UsCi0JfQotfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBBVDkxU0FNOUc0NSBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTM3MCwxMjUgKzI2LDE1IEBACiAJYXQ5MV9pbml0X3NyYW0oMCwgQVQ5MVNBTTlHNDVfU1JBTV9CQVNFLCBBVDkxU0FNOUc0NV9TUkFNX1NJWkUpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxU0FNOUc0NV9CQVNFX0REUlNEUkMxLCA1MTIpOwotCWF0OTFfaW9yZW1hcF9yYW1jKDEsIEFUOTFTQU05RzQ1X0JBU0VfRERSU0RSQzAsIDUxMik7Ci0JYXQ5MXNhbTkyNnhfaW9yZW1hcF9waXQoQVQ5MVNBTTlHNDVfQkFTRV9QSVQpOwotCWF0OTFzYW05X2lvcmVtYXBfc21jKDAsIEFUOTFTQU05RzQ1X0JBU0VfU01DKTsKLQlhdDkxX2lvcmVtYXBfbWF0cml4KEFUOTFTQU05RzQ1X0JBU0VfTUFUUklYKTsKLQlhdDkxX3BtX3NldF9zdGFuZGJ5KGF0OTFfZGRyX3N0YW5kYnkpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdGlhbGl6ZSh2b2lkKQogewogCWFybV9wbV9pZGxlID0gYXQ5MXNhbTlfaWRsZTsKIAogCWF0OTFfc3lzaXJxX21hc2tfcnRjKEFUOTFTQU05RzQ1X0JBU0VfUlRDKTsKIAlhdDkxX3N5c2lycV9tYXNrX3J0dChBVDkxU0FNOUc0NV9CQVNFX1JUVCk7Ci0KLQkvKiBSZWdpc3RlciBHUElPIHN1YnN5c3RlbSAqLwotCWF0OTFfZ3Bpb19pbml0KGF0OTFzYW05ZzQ1X2dwaW8sIDUpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJzdGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlHNDVfQkFTRV9SU1RDLAotCQkuZW5kICAgID0gQVQ5MVNBTTlHNDVfQkFTRV9SU1RDICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOUc0NV9CQVNFX0REUlNEUkMxLAotCQkuZW5kICAgID0gQVQ5MVNBTTlHNDVfQkFTRV9ERFJTRFJDMSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05RzQ1X0JBU0VfRERSU0RSQzAsCi0JCS5lbmQgICAgPSBBVDkxU0FNOUc0NV9CQVNFX0REUlNEUkMwICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByc3RjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MS1zYW05ZzQ1LXJlc2V0IiwKLQkucmVzb3VyY2UgICAgICAgPSByc3RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHJzdGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hkd2NfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlHNDVfQkFTRV9TSERXQywKLQkJLmVuZCAgICA9IEFUOTFTQU05RzQ1X0JBU0VfU0hEV0MgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hkd2NfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXBvd2Vyb2ZmIiwKLQkucmVzb3VyY2UgICAgICAgPSBzaGR3Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaGR3Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X3JlZ2lzdGVyX2RldmljZXModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJzdGNfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoZHdjX2RldmljZSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgSW50ZXJydXB0IGluaXRpYWxpemF0aW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0OTFzYW05ZzQ1X2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0gewotCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCi0JNywJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBEIGFuZCBFICovCi0JMCwKLQk1LAkvKiBVU0FSVCAwICovCi0JNSwJLyogVVNBUlQgMSAqLwotCTUsCS8qIFVTQVJUIDIgKi8KLQk1LAkvKiBVU0FSVCAzICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAwICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8KLQk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMCwgMSwgMiwgMywgNCBhbmQgNSAqLwotCTAsCS8qIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciAqLwotCTAsCS8qIFRvdWNoIFNjcmVlbiBDb250cm9sbGVyICovCi0JMCwJLyogRE1BIENvbnRyb2xsZXIgKi8KLQkyLAkvKiBVU0IgSG9zdCBIaWdoIFNwZWVkIHBvcnQgKi8KLQkzLAkvKiBMREMgQ29udHJvbGxlciAqLwotCTUsCS8qIEFDOTcgQ29udHJvbGxlciAqLwotCTMsCS8qIEV0aGVybmV0ICovCi0JMCwJLyogSW1hZ2UgU2Vuc29yIEludGVyZmFjZSAqLwotCTIsCS8qIFVTQiBEZXZpY2UgSGlnaCBzcGVlZCBwb3J0ICovCi0JMCwJLyogQUVTVERFU1NIQSBDcnlwdG8gSFcgQWNjZWxlcmF0b3JzICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAxICovCi0JMCwKLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOWc0NV9pbml0X3RpbWUodm9pZCkKLXsKLQlhdDkxc2FtOTI2eF9waXRfaW5pdChOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTKTsKIH0KIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTlnNDUpCiAJLm1hcF9pbyA9IGF0OTFzYW05ZzQ1X21hcF9pbywKLQkuZGVmYXVsdF9pcnFfcHJpb3JpdHkgPSBhdDkxc2FtOWc0NV9kZWZhdWx0X2lycV9wcmlvcml0eSwKLQkuZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05RzQ1X0lEX0lSUTApLAotCS5pb3JlbWFwX3JlZ2lzdGVycyA9IGF0OTFzYW05ZzQ1X2lvcmVtYXBfcmVnaXN0ZXJzLAotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxc2FtOWc0NV9yZWdpc3Rlcl9jbG9ja3MsCi0JLnJlZ2lzdGVyX2RldmljZXMgPSBhdDkxc2FtOWc0NV9yZWdpc3Rlcl9kZXZpY2VzLAogCS5pbml0ID0gYXQ5MXNhbTlnNDVfaW5pdGlhbGl6ZSwKLQkuaW5pdF90aW1lID0gYXQ5MXNhbTlnNDVfaW5pdF90aW1lLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhYjc4Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkxNSArMCwwIEBACi0vKgotICogIE9uLUNoaXAgZGV2aWNlcyBzZXR1cCBjb2RlIGZvciB0aGUgQVQ5MVNBTTlHNDUgZmFtaWx5Ci0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvYXRtZWwtbWNpLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9jcnlwdG8tYXRtZWwuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXQ5MV9hZGMuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlnNDVfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtYXRtZWwuaD4KLSNpbmNsdWRlIDxtYWNoL2F0bWVsLW1jaS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgPG1lZGlhL2F0bWVsLWlzaS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBIRE1BQyAtIEFIQiBETUEgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUX0hETUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVF9IRE1BQ19NT0RVTEUpCi1zdGF0aWMgdTY0IGhkbWFjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhkbWFjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9ETUEsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX0RNQSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0RNQSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfRE1BLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXRfaGRtYWNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxc2FtOWc0NV9kbWEiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmhkbWFjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IGhkbWFjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGRtYWNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9oZG1hYyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRfaGRtYWNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIEhvc3QgKE9IQ0kpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX29oY2lfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoX29oY2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9PSENJX0JBU0UsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9PSENJX0JBU0UgKyBTWl8xTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VIUEhTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VSFBIUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdXNiaF9vaGNpX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9vaGNpX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1c2JoX29oY2lfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoX29oY2lfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoX29oY2koc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKQotewotCWludCBpOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQkvKiBFbmFibGUgVkJ1cyBjb250cm9sIGZvciBVSFAgcG9ydHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydHM7IGkrKykgewotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT52YnVzX3BpbltpXSwKLQkJCQkJICAgICBkYXRhLT52YnVzX3Bpbl9hY3RpdmVfbG93W2ldKTsKLQl9Ci0KLQkvKiBFbmFibGUgb3ZlcmN1cnJlbnQgbm90aWZpY2F0aW9uICovCi0JZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRzOyBpKyspIHsKLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+b3ZlcmN1cnJlbnRfcGluW2ldKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+b3ZlcmN1cnJlbnRfcGluW2ldLCAxKTsKLQl9Ci0KLQl1c2JoX29oY2lfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JoX29oY2lfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIEhvc3QgSFMgKEVIQ0kpCi0gKiAgTmVlZHMgYW4gT0hDSSBob3N0IGZvciBsb3cgYW5kIGZ1bGwgc3BlZWQgbWFuYWdlbWVudAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9FSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VIQ0lfSENEX01PRFVMRSkKLXN0YXRpYyB1NjQgZWhjaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgdXNiaF9laGNpX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9laGNpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfRUhDSV9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfRUhDSV9CQVNFICsgU1pfMU0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VSFBIUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVUhQSFMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VzYmhfZWhjaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsLWVoY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmVoY2lfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1c2JoX2VoY2lfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVzYmhfZWhjaV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfZWhjaV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmhfZWhjaShzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCS8qIEVuYWJsZSBWQnVzIGNvbnRyb2wgZm9yIFVIUCBwb3J0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnZidXNfcGluW2ldKSkKLQkJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnZidXNfcGluW2ldLAotCQkJCQkgICAgIGRhdGEtPnZidXNfcGluX2FjdGl2ZV9sb3dbaV0pOwotCX0KLQotCXVzYmhfZWhjaV9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmhfZWhjaV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoX2VoY2koc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgSFMgRGV2aWNlIChHYWRnZXQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0FUTUVMX1VTQkEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9BVE1FTF9VU0JBX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiYV91ZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9VRFBIU19GSUZPLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfVURQSFNfRklGTyArIFNaXzUxMksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VRFBIUywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVURQSFMgKyBTWl8xSyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VEUEhTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VRFBIUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLSNkZWZpbmUgRVAobmFtLCBpZHgsIG1heHBrdCwgbWF4YmssIGRtYSwgaXNvYykJCQlcCi0JW2lkeF0gPSB7CQkJCQkJXAotCQkubmFtZQkJPSBuYW0sCQkJCVwKLQkJLmluZGV4CQk9IGlkeCwJCQkJXAotCQkuZmlmb19zaXplCT0gbWF4cGt0LAkJCVwKLQkJLm5yX2JhbmtzCT0gbWF4YmssCQkJXAotCQkuY2FuX2RtYQk9IGRtYSwJCQkJXAotCQkuY2FuX2lzb2MJPSBpc29jLAkJCQlcCi0JfQotCi1zdGF0aWMgc3RydWN0IHVzYmFfZXBfZGF0YSB1c2JhX3VkY19lcFtdIF9faW5pdGRhdGEgPSB7Ci0JRVAoImVwMCIsIDAsIDY0LCAxLCAwLCAwKSwKLQlFUCgiZXAxIiwgMSwgMTAyNCwgMiwgMSwgMSksCi0JRVAoImVwMiIsIDIsIDEwMjQsIDIsIDEsIDEpLAotCUVQKCJlcDMiLCAzLCAxMDI0LCAzLCAxLCAwKSwKLQlFUCgiZXA0IiwgNCwgMTAyNCwgMywgMSwgMCksCi0JRVAoImVwNSIsIDUsIDEwMjQsIDMsIDEsIDEpLAotCUVQKCJlcDYiLCA2LCAxMDI0LCAzLCAxLCAxKSwKLX07Ci0KLSN1bmRlZiBFUAotCi0vKgotICogcGRhdGEgZG9lc24ndCBoYXZlIHJvb20gZm9yIGFueSBlbmRwb2ludHMsIHNvIHdlIG5lZWQgdG8KLSAqIGFwcGVuZCByb29tIGZvciB0aGUgb25lcyB3ZSBuZWVkIHJpZ2h0IGFmdGVyIGl0LgotICovCi1zdGF0aWMgc3RydWN0IHsKLQlzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhIHBkYXRhOwotCXN0cnVjdCB1c2JhX2VwX2RhdGEgZXBbN107Ci19IHVzYmFfdWRjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdXNiYV91ZGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2JhX3VkYyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJnVzYmFfdWRjX2RhdGEucGRhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1c2JhX3VkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmFfdWRjX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiYShzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCXVzYmFfdWRjX2RhdGEucGRhdGEudmJ1c19waW4gPSAtRUlOVkFMOwotCXVzYmFfdWRjX2RhdGEucGRhdGEubnVtX2VwID0gQVJSQVlfU0laRSh1c2JhX3VkY19lcCk7Ci0JbWVtY3B5KHVzYmFfdWRjX2RhdGEuZXAsIHVzYmFfdWRjX2VwLCBzaXplb2YodXNiYV91ZGNfZXApKTsKLQotCWlmIChkYXRhICYmIGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+dmJ1c19waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT52YnVzX3BpbiwgMSk7Ci0JCXVzYmFfdWRjX2RhdGEucGRhdGEudmJ1c19waW4gPSBkYXRhLT52YnVzX3BpbjsKLQl9Ci0KLQkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBieSBVU0IgZGV2aWNlIHBlcmlwaGVyYWwgKi8KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JhX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JhKHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEV0aGVybmV0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDQikgfHwgZGVmaW5lZChDT05GSUdfTUFDQl9NT0RVTEUpCi1zdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIGV0aF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV0aF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfRU1BQywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfRU1BQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0VNQUMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0VNQUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtYWNiIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cGh5X2lycV9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cGh5X2lycV9waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7Ci0JfQotCi0JLyogUGlucyB1c2VkIGZvciBNSUkgYW5kIFJNSUkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMCk7CS8qIEVSWERWICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7CS8qIEVSWDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAwKTsJLyogRVJYMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFUlhFUiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBFVFhFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOwkvKiBFVFgwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMCk7CS8qIEVUWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsJLyogRU1ESU8gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogRU1EQyAqLwotCi0JaWYgKCFkYXRhLT5pc19ybWlpKSB7Ci0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOwkvKiBFQ1JTICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDApOwkvKiBFQ09MICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOCwgIDApOwkvKiBFUlgyICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOSwgIDApOwkvKiBFUlgzICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDApOwkvKiBFUlhDSyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTYsICAwKTsJLyogRVRYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTcsICAwKTsJLyogRVRYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJLyogRVRYRVIgKi8KLQl9Ci0KLQlldGhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfZXRoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBNTUMgLyBTRAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJX01PRFVMRSkKLXN0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWMwX2RhdGEsIG1tYzFfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9NQ0kwLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9NQ0kwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfTUNJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfTUNJMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X21tYzBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jMF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfTUNJMSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfTUNJMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX01DSTEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX01DSTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9tbWMxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tYzFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG1tYzFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMxX3Jlc291cmNlcyksCi19OwotCi0vKiBDb25zaWRlciBvbmx5IG9uZSBzbG90IDogc2xvdCAwICovCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQkvKiBNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHVzYWJsZSBzbG90ICovCi0JaWYgKCFkYXRhLT5zbG90WzBdLmJ1c193aWR0aCkKLQkJcmV0dXJuOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRfSERNQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUX0hETUFDX01PRFVMRSkKLQl7Ci0Jc3RydWN0IGF0X2RtYV9zbGF2ZQkqYXRzbGF2ZTsKLQlzdHJ1Y3QgbWNpX2RtYV9kYXRhCSphbHRfYXRzbGF2ZTsKLQotCWFsdF9hdHNsYXZlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jaV9kbWFfZGF0YSksIEdGUF9LRVJORUwpOwotCWF0c2xhdmUgPSAmYWx0X2F0c2xhdmUtPnNkYXRhOwotCi0JLyogRE1BIHNsYXZlIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLwotCWF0c2xhdmUtPmRtYV9kZXYgPSAmYXRfaGRtYWNfZGV2aWNlLmRldjsKLQlhdHNsYXZlLT5jZmcgPSBBVENfRklGT0NGR19IQUxGRklGTwotCQkJfCBBVENfU1JDX0gyU0VMX0hXIHwgQVRDX0RTVF9IMlNFTF9IVzsKLQlpZiAobW1jX2lkID09IDApCS8qIE1DSTAgKi8KLQkJYXRzbGF2ZS0+Y2ZnIHw9IEFUQ19TUkNfUEVSKEFUX0RNQV9JRF9NQ0kwKQotCQkJICAgICAgfCBBVENfRFNUX1BFUihBVF9ETUFfSURfTUNJMCk7Ci0KLQllbHNlCQkJLyogTUNJMSAqLwotCQlhdHNsYXZlLT5jZmcgfD0gQVRDX1NSQ19QRVIoQVRfRE1BX0lEX01DSTEpCi0JCQkgICAgICB8IEFUQ19EU1RfUEVSKEFUX0RNQV9JRF9NQ0kxKTsKLQotCWRhdGEtPmRtYV9zbGF2ZSA9IGFsdF9hdHNsYXZlOwotCX0KLSNlbmRpZgotCi0KLQkvKiBpbnB1dC9pcnEgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90WzBdLmRldGVjdF9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFswXS5kZXRlY3RfcGluLCAxKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+c2xvdFswXS5kZXRlY3RfcGluLCAxKTsKLQl9Ci0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+c2xvdFswXS53cF9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbMF0ud3BfcGluLCAxKTsKLQotCWlmIChtbWNfaWQgPT0gMCkgewkJLyogTUNJMCAqLwotCi0JCS8qIENMSyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTAsIDApOwotCi0JCS8qIENNRCAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDEpOwotCi0JCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgYW5kIG1heWJlIERBVDQuLkRBVDcgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAxKTsKLQkJaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoID09IDQpIHsKLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMywgMSk7Ci0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTQsIDEpOwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE1LCAxKTsKLQkJCWlmIChkYXRhLT5zbG90WzBdLmJ1c193aWR0aCA9PSA4KSB7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAxKTsKLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcsIDEpOwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBOCwgMSk7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKLQkJCX0KLQkJfQotCi0JCW1tYzBfZGF0YSA9ICpkYXRhOwotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X21tYzBfZGV2aWNlKTsKLQotCX0gZWxzZSB7CQkJLyogTUNJMSAqLwotCi0JCS8qIENMSyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTMxLCAwKTsKLQotCQkvKiBDTUQgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMSk7Ci0KLQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyBhbmQgbWF5YmUgREFUNC4uREFUNyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAxKTsKLQkJaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoID09IDQpIHsKLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjQsIDEpOwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNSwgMSk7Ci0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAxKTsKLQkJCWlmIChkYXRhLT5zbG90WzBdLmJ1c193aWR0aCA9PSA4KSB7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNywgMSk7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMSk7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOSwgMSk7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzMCwgMSk7Ci0JCQl9Ci0JCX0KLQotCQltbWMxX2RhdGEgPSAqZGF0YTsKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9tbWMxX2RldmljZSk7Ci0KLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTkFORCAvIFNtYXJ0TWVkaWEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgbmFuZF9kYXRhOwotCi0jZGVmaW5lIE5BTkRfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBOQU5EX0JBU0UsCi0JCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfRUNDLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9FQ0MgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9uYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG5hbmRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuYW5kX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgY3NhOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQljc2EgPSBhdDkxX21hdHJpeF9yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7Ci0JYXQ5MV9tYXRyaXhfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9FQklfQ1MzQV9TTUNfU01BUlRNRURJQSk7Ci0KLQkvKiBlbmFibGUgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZW5hYmxlX3BpbikpCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPmVuYWJsZV9waW4sIDEpOwotCi0JLyogcmVhZHkvYnVzeSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZHlfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5yZHlfcGluLCAxKTsKLQotCS8qIGNhcmQgZGV0ZWN0IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmRldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOwotCi0JbmFuZF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9uYW5kX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVFdJIChpMmMpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogUHJlZmVyIHRoZSBHUElPIGNvZGUgc2luY2UgdGhlIFRXSSBjb250cm9sbGVyIGlzbid0IHJvYnVzdAotICogKGdldHMgb3ZlcnJ1bnMgYW5kIHVuZGVycnVucyB1bmRlciBsb2FkKSBhbmQgY2FuIG9ubHkgaXNzdWUKLSAqIHJlcGVhdGVkIFNUQVJUcyBpbiBvbmUgc2NlbmFyaW8gKHRoZSBkcml2ZXIgZG9lc24ndCB5ZXQgaGFuZGxlIHRoZW0pLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YV9pMmMwID0gewotCS5zZGFfcGluCQk9IEFUOTFfUElOX1BBMjAsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKLQkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQTIxLAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnVkZWxheQkJCT0gNSwJCS8qIH4xMDAga0h6ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90d2kwX2RldmljZSA9IHsKLQkubmFtZQkJCT0gImkyYy1ncGlvIiwKLQkuaWQJCQk9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhX2kyYzAsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGFfaTJjMSA9IHsKLQkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQjEwLAotCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnNjbF9waW4JCT0gQVQ5MV9QSU5fUEIxMSwKLQkuc2NsX2lzX29wZW5fZHJhaW4JPSAxLAotCS51ZGVsYXkJCQk9IDUsCQkvKiB+MTAwIGtIeiAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAxLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YV9pMmMxLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzaG9ydCBpMmNfaWQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oaTJjX2lkLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQotCWlmIChpMmNfaWQgPT0gMCkgewotCQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAxKTsJCS8qIFRXRCAoU0RBKSAqLwotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTIwLCAxKTsKLQotCQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KLQkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMSwgMSk7Ci0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90d2kwX2RldmljZSk7Ci0JfSBlbHNlIHsKLQkJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMSk7CQkvKiBUV0QgKFNEQSkgKi8KLQkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEIxMCwgMSk7Ci0KLQkJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCMTEsIDEpOwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UpOwotCX0KLX0KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHdpMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVFdJMCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVFdJMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RXSTAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RXSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90d2kwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaTJjLWF0OTFzYW05ZzEwIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0d2kwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kxLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVFdJMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVFdJMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3R3aTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpMmMtYXQ5MXNhbTlnMTAiLAotCS5pZAkJPSAxLAotCS5yZXNvdXJjZQk9IHR3aTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0d2kxX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpMmNfaWQsIGRldmljZXMsIG5yX2RldmljZXMpOwotCi0JLyogcGlucyB1c2VkIGZvciBUV0kgaW50ZXJmYWNlICovCi0JaWYgKGkyY19pZCA9PSAwKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjAsIDApOwkJLyogVFdEICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjEsIDApOwkJLyogVFdDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHdpMF9kZXZpY2UpOwotCX0gZWxzZSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDApOwkJLyogVFdEICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTEsIDApOwkJLyogVFdDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UpOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1BJCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NQSTAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NQSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9zcGkwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfc3BpIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzcGkwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTBfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BCMywgQVQ5MV9QSU5fUEIxOCwgQVQ5MV9QSU5fUEIxOSwgQVQ5MV9QSU5fUEQyNyB9OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1NQSTEsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1NQSTEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9TUEkxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9TUEkxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc3BpMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkxX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQjE3LCBBVDkxX1BJTl9QRDI4LCBBVDkxX1BJTl9QRDE4LCBBVDkxX1BJTl9QRDE5IH07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGNzX3BpbjsKLQlzaG9ydCBlbmFibGVfc3BpMCA9IDA7Ci0Jc2hvcnQgZW5hYmxlX3NwaTEgPSAwOwotCi0JLyogQ2hvb3NlIFNQSSBjaGlwLXNlbGVjdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfZGV2aWNlczsgaSsrKSB7Ci0JCWlmIChkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSkKLQkJCWNzX3BpbiA9ICh1bnNpZ25lZCBsb25nKSBkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YTsKLQkJZWxzZSBpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCi0JCQljc19waW4gPSBzcGkwX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCQllbHNlCi0JCQljc19waW4gPSBzcGkxX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCi0JCWlmICghZ3Bpb19pc192YWxpZChjc19waW4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJZW5hYmxlX3NwaTAgPSAxOwotCQllbHNlCi0JCQllbmFibGVfc3BpMSA9IDE7Ci0KLQkJLyogZW5hYmxlIGNoaXAtc2VsZWN0IHBpbiAqLwotCQlhdDkxX3NldF9ncGlvX291dHB1dChjc19waW4sIDEpOwotCi0JCS8qIHBhc3MgY2hpcC1zZWxlY3QgcGluIHRvIGRyaXZlciAqLwotCQlkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSA9ICh2b2lkICopIGNzX3BpbjsKLQl9Ci0KLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQotCS8qIENvbmZpZ3VyZSBTUEkgYnVzKGVzKSAqLwotCWlmIChlbmFibGVfc3BpMCkgewotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOwkvKiBTUEkwX01JU08gKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxLCAwKTsJLyogU1BJMF9NT1NJICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMiwgMCk7CS8qIFNQSTBfU1BDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfc3BpMF9kZXZpY2UpOwotCX0KLQlpZiAoZW5hYmxlX3NwaTEpIHsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNCwgMCk7CS8qIFNQSTFfTUlTTyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE1LCAwKTsJLyogU1BJMV9NT1NJICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTYsIDApOwkvKiBTUEkxX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3NwaTFfZGV2aWNlKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBQzk3Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQotc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9BQzk3QywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BQzk3QywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUM5N0MsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9hYzk3X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFjOTdfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGFjOTdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEOCwgMCk7CS8qIEFDOTdGUyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEOSwgMCk7CS8qIEFDOTdDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENywgMCk7CS8qIEFDOTdUWCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENiwgMCk7CS8qIEFDOTdSWCAqLwotCi0JLyogcmVzZXQgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZXNldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOwotCi0JYWM5N19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9hYzk3X2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0FUTUVMX0lTSSkgfHwgZGVmaW5lZChDT05GSUdfVklERU9fQVRNRUxfSVNJX01PRFVMRSkKLXN0YXRpYyB1NjQgaXNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSBpc2lfZGF0YTsKLQotc3RydWN0IHJlc291cmNlIGlzaV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfSVNJLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9JU0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9JU0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0lTSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2lzaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX2lzaSIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkuZG1hX21hc2sJCT0gJmlzaV9kbWFtYXNrLAotCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZpc2lfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGlzaV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlzaV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGlzaV9tY2tfbG9va3Vwc1tdID0gewotCUNMS0RFVl9DT05fREVWX0lEKCJpc2lfbWNrIiwgImF0bWVsX2lzaS4wIiwgTlVMTCksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jaykKLXsKLQlzdHJ1Y3QgY2xrICpwY2s7Ci0Jc3RydWN0IGNsayAqcGFyZW50OwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0JaXNpX2RhdGEgPSAqZGF0YTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjAsIDApOwkvKiBJU0lfRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIxLCAwKTsJLyogSVNJX0QxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMiwgMCk7CS8qIElTSV9EMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjMsIDApOwkvKiBJU0lfRDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI0LCAwKTsJLyogSVNJX0Q0ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNSwgMCk7CS8qIElTSV9ENSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjYsIDApOwkvKiBJU0lfRDYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI3LCAwKTsJLyogSVNJX0Q3ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyOCwgMCk7CS8qIElTSV9QQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMwLCAwKTsJLyogSVNJX0hTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyOSwgMCk7CS8qIElTSV9WU1lOQyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCOCwgMCk7CS8qIElTSV9QRDggKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkvKiBJU0lfUEQ5ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMCk7CS8qIElTSV9QRDEwICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMCk7CS8qIElTSV9QRDExICovCi0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X2lzaV9kZXZpY2UpOwotCi0JaWYgKHVzZV9wY2tfYXNfbWNrKSB7Ci0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMzEsIDApOwkvKiBJU0lfTUNLIChQQ0sxKSAqLwotCi0JCXBjayA9IGNsa19nZXQoTlVMTCwgInBjazEiKTsKLQkJcGFyZW50ID0gY2xrX2dldChOVUxMLCAicGxsYSIpOwotCi0JCUJVR19PTihJU19FUlIocGNrKSB8fCBJU19FUlIocGFyZW50KSk7Ci0KLQkJaWYgKGNsa19zZXRfcGFyZW50KHBjaywgcGFyZW50KSkgewotCQkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0IFBDSydzIHBhcmVudFxuIik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBSZWdpc3RlciBQQ0sgYXMgSVNJX01DSyAqLwotCQkJaXNpX21ja19sb29rdXBzWzBdLmNsayA9IHBjazsKLQkJCWNsa2Rldl9hZGRfdGFibGUoaXNpX21ja19sb29rdXBzLAotCQkJCQlBUlJBWV9TSVpFKGlzaV9tY2tfbG9va3VwcykpOwotCQl9Ci0KLQkJY2xrX3B1dChwY2spOwotCQljbGtfcHV0KHBhcmVudCk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pc2koc3RydWN0IGlzaV9wbGF0Zm9ybV9kYXRhICpkYXRhLAotCQlib29sIHVzZV9wY2tfYXNfbWNrKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBMQ0QgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19GQl9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgdTY0IGxjZGNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIGxjZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsY2RjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfTENEQ19CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfTENEQ19CQVNFICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9MQ0RDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9MQ0RDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9sY2RjX2RldmljZSA9IHsKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmxjZGNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZsY2RjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBsY2RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGNkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWc0NWVzKCkpCi0JCWF0OTFfbGNkY19kZXZpY2UubmFtZSA9ICJhdDkxc2FtOWc0NWVzLWxjZGZiIjsKLQllbHNlCi0JCWF0OTFfbGNkY19kZXZpY2UubmFtZSA9ICJhdDkxc2FtOWc0NS1sY2RmYiI7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTAsIDApOwkvKiBMQ0REUFdSICovCi0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIsIDApOwkvKiBMQ0RDQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMywgMCk7CS8qIExDRFZTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU0LCAwKTsJLyogTENESFNZTkMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTUsIDApOwkvKiBMQ0RET1RDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFNiwgMCk7CS8qIExDRERFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFNywgMCk7CS8qIExDREQwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU4LCAwKTsJLyogTENERDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTksIDApOwkvKiBMQ0REMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTAsIDApOwkvKiBMQ0REMyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTEsIDApOwkvKiBMQ0RENCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTIsIDApOwkvKiBMQ0RENSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTMsIDApOwkvKiBMQ0RENiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTQsIDApOwkvKiBMQ0RENyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTUsIDApOwkvKiBMQ0REOCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTYsIDApOwkvKiBMQ0REOSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTcsIDApOwkvKiBMQ0REMTAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTE4LCAwKTsJLyogTENERDExICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxOSwgMCk7CS8qIExDREQxMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjAsIDApOwkvKiBMQ0REMTMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIxLCAwKTsJLyogTENERDE0ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyMiwgMCk7CS8qIExDREQxNSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjMsIDApOwkvKiBMQ0REMTYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI0LCAwKTsJLyogTENERDE3ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNSwgMCk7CS8qIExDREQxOCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjYsIDApOwkvKiBMQ0REMTkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI3LCAwKTsJLyogTENERDIwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyOCwgMCk7CS8qIExDREQyMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjksIDApOwkvKiBMQ0REMjIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTMwLCAwKTsJLyogTENERDIzICovCi0KLQlsY2RjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfbGNkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9jawotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BVE1FTF9UQ0xJQgotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UQ0IwLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UQ0IwICsgU1pfMjU2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVENCLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9UQ0IsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90Y2IwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdGNiIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0Y2IwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiMF9yZXNvdXJjZXMpLAotfTsKLQotLyogVENCMSBiZWdpbnMgd2l0aCBUQzMgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMSArIFNaXzI1NiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RDQiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVENCLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdGNiMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDEsCi0JLnJlc291cmNlCT0gdGNiMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYjFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RjYjBfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RjYjFfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVEMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfUlRDLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9SVEMgKyBTWl8yNTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9ydGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3J0YyIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHJ0Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3J0Y19kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFEQyBhbmQgdG91Y2hzY3JlZW4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19BVDkxX0FEQykKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSBhZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1RTQywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVFNDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVFNDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9UU0MsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfYWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MXNhbTlnNDUtYWRjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmYWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBhZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfdHJpZ2dlciBhdDkxX2FkY190cmlnZ2Vyc1tdID0gewotCVswXSA9IHsKLQkJLm5hbWUgPSAiZXh0ZXJuYWwtcmlzaW5nIiwKLQkJLnZhbHVlID0gMSwKLQkJLmlzX2V4dGVybmFsID0gdHJ1ZSwKLQl9LAotCVsxXSA9IHsKLQkJLm5hbWUgPSAiZXh0ZXJuYWwtZmFsbGluZyIsCi0JCS52YWx1ZSA9IDIsCi0JCS5pc19leHRlcm5hbCA9IHRydWUsCi0JfSwKLQlbMl0gPSB7Ci0JCS5uYW1lID0gImV4dGVybmFsLWFueSIsCi0JCS52YWx1ZSA9IDMsCi0JCS5pc19leHRlcm5hbCA9IHRydWUsCi0JfSwKLQlbM10gPSB7Ci0JCS5uYW1lID0gImNvbnRpbnVvdXMiLAotCQkudmFsdWUgPSA2LAotCQkuaXNfZXh0ZXJuYWwgPSBmYWxzZSwKLQl9LAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FkYyhzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmICh0ZXN0X2JpdCgwLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEQyMCwgMCk7Ci0JaWYgKHRlc3RfYml0KDEsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QRDIxLCAwKTsKLQlpZiAodGVzdF9iaXQoMiwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjIsIDApOwotCWlmICh0ZXN0X2JpdCgzLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEQyMywgMCk7Ci0JaWYgKHRlc3RfYml0KDQsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QRDI0LCAwKTsKLQlpZiAodGVzdF9iaXQoNSwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjUsIDApOwotCWlmICh0ZXN0X2JpdCg2LCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEQyNiwgMCk7Ci0JaWYgKHRlc3RfYml0KDcsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QRDI3LCAwKTsKLQotCWlmIChkYXRhLT51c2VfZXh0ZXJuYWxfdHJpZ2dlcnMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMjgsIDApOwotCi0JZGF0YS0+c3RhcnR1cF90aW1lID0gNDA7Ci0JZGF0YS0+dHJpZ2dlcl9udW1iZXIgPSA0OwotCWRhdGEtPnRyaWdnZXJfbGlzdCA9IGF0OTFfYWRjX3RyaWdnZXJzOwotCi0JYWRjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfYWRjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FkYyhzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFJUVAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1JUVCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfUlRUICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3J0dF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfcnR0IiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSBydHRfcmVzb3VyY2VzLAotfTsKLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTkpCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGModm9pZCkKLXsKLQlhdDkxc2FtOWc0NV9ydHRfZGV2aWNlLm5hbWUgPSAicnRjLWF0OTFzYW05IjsKLQkvKgotCSAqIFRoZSBzZWNvbmQgcmVzb3VyY2UgaXMgbmVlZGVkOgotCSAqIEdQQlIgd2lsbCBzZXJ2ZSBhcyB0aGUgc3RvcmFnZSBmb3IgUlRDIHRpbWUgb2Zmc2V0Ci0JICovCi0JYXQ5MXNhbTlnNDVfcnR0X2RldmljZS5udW1fcmVzb3VyY2VzID0gMzsKLQlydHRfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gQVQ5MVNBTTlHNDVfQkFTRV9HUEJSICsKLQkJCQkgNCAqIENPTkZJR19SVENfRFJWX0FUOTFTQU05X0dQQlI7Ci0JcnR0X3Jlc291cmNlc1sxXS5lbmQgPSBydHRfcmVzb3VyY2VzWzFdLnN0YXJ0ICsgMzsKLQlydHRfcmVzb3VyY2VzWzJdLnN0YXJ0ID0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUzsKLQlydHRfcmVzb3VyY2VzWzJdLmVuZCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JLyogT25seSBvbmUgcmVzb3VyY2UgaXMgbmVlZGVkOiBSVFQgbm90IHVzZWQgYXMgUlRDICovCi0JYXQ5MXNhbTlnNDVfcnR0X2RldmljZS5udW1fcmVzb3VyY2VzID0gMTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dCh2b2lkKQotewotCWF0OTFfYWRkX2RldmljZV9ydHRfcnRjKCk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9ydHRfZGV2aWNlKTsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRSTkcKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19IV19SQU5ET01fQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0hXX1JBTkRPTV9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRybmdfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1RSTkcsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1RSTkcgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHJuZ19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsLXRybmciLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB0cm5nX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHJuZ19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90cm5nKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90cm5nX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90cm5nKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBXYXRjaGRvZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9XRFQsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1dEVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfd2R0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV93ZHQiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUFdNCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19QV01fQVRNRUwpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHB3bV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfUFdNQywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfUFdNQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1BXTUMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1BXTUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9wd20wX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxc2FtOXJsLXB3bSIsCi0JLmlkCT0gLTEsCi0JLnJlc291cmNlCT0gcHdtX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHdtX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcHdtKHUzMiBtYXNrKQotewotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00wKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQyNCwgMSk7CS8qIGVuYWJsZSBQV00wICovCi0KLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMSkpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BEMzEsIDEpOwkvKiBlbmFibGUgUFdNMSAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTIpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDI2LCAxKTsJLyogZW5hYmxlIFBXTTIgKi8KLQotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00zKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQwLCAxKTsJLyogZW5hYmxlIFBXTTMgKi8KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfcHdtMF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9wd20odTMyIG1hc2spIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKLXN0YXRpYyB1NjQgc3NjMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MwLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfU1NDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfU1NDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3NzYzBfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFzYW05ZzQ1X3NzYyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzYzBfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNzYzBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzc2MwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzYzBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDQsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDUsIDEpOwotfQotCi1zdGF0aWMgdTY0IHNzYzFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU1NDMSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU1NDMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NTQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NTQzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9zc2MxX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxc2FtOWc0NV9zc2MiLAotCS5pZAk9IDEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MxX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxMSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDE1LCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxU0FNOUc0NV9JRF9TU0MwOgotCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X3NzYzBfZGV2aWNlOwotCQljb25maWd1cmVfc3NjMF9waW5zKHBpbnMpOwotCQlicmVhazsKLQljYXNlIEFUOTFTQU05RzQ1X0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXNhbTlnNDVfc3NjMV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MxX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVQVJUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYmd1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9EQkdVLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2RiZ3VfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZkYmd1X2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZGJndV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZGJndV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiZ3VfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfZGJndV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMCk7CQkvKiBEUlhEICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMywgMSk7CQkvKiBEVFhEICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVVMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VUzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV91YXJ0MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE5LCAxKTsJCS8qIFRYRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE4LCAwKTsJCS8qIFJYRDAgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDApOwkvKiBSVFMwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMCk7CS8qIENUUzAgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMxLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VUzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VTMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQxX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3VhcnQxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAyLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDFfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNCwgMSk7CQkvKiBUWEQxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI1LCAwKTsJCS8qIFJYRDEgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTYsIDApOwkvKiBSVFMxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNywgMCk7CS8qIENUUzEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMyLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VUzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VTMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQyX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3VhcnQyX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAzLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDJfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0Ml9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0Ml9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDJfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNiwgMSk7CQkvKiBUWEQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI3LCAwKTsJCS8qIFJYRDIgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIFJUUzIgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogQ1RTMiAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzMsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VTMywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVVMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdWFydDNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDQsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0M19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQzX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0M19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0M19waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAxKTsJCS8qIFRYRDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkJLyogUlhEMyAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CS8qIFJUUzMgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJLyogQ1RTMyAqLwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwotCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgKnBkYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCQljYXNlIDA6CQkvKiBEQkdVICovCi0JCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X2RiZ3VfZGV2aWNlOwotCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMwOgotCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0MF9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOUc0NV9JRF9VUzE6Ci0JCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X3VhcnQxX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05RzQ1X0lEX1VTMjoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlnNDVfdWFydDJfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMzOgotCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0M19kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQzX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQl9Ci0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlwZGF0YS0+bnVtID0gcG9ydG5yOwkJLyogdXBkYXRlIHRvIG1hcHBlZCBJRCAqLwotCi0JaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQotCQlhdDkxX3VhcnRzW3BvcnRucl0gPSBwZGV2OwotfQotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgewotCQlpZiAoYXQ5MV91YXJ0c1tpXSkKLQkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpIHt9Ci12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTSEExL1NIQTI1NgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0NSWVBUT19ERVZfQVRNRUxfU0hBKSB8fCBkZWZpbmVkKENPTkZJR19DUllQVE9fREVWX0FUTUVMX1NIQV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoYV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU0hBLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9TSEEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BRVNUREVTU0hBLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BRVNUREVTU0hBLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc2hhX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdG1lbF9zaGEiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSBzaGFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaGFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2hhKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9zaGFfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NoYSh2b2lkKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgREVTL1RERVMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUllQVE9fREVWX0FUTUVMX1RERVMpIHx8IGRlZmluZWQoQ09ORklHX0NSWVBUT19ERVZfQVRNRUxfVERFU19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRkZXNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1RERVMsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1RERVMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BRVNUREVTU0hBLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BRVNUREVTU0hBLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdGRlc19kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXRtZWxfdGRlcyIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHRkZXNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0ZGVzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RkZXModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RkZXNfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RkZXModm9pZCkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFFUwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0NSWVBUT19ERVZfQVRNRUxfQUVTKSB8fCBkZWZpbmVkKENPTkZJR19DUllQVE9fREVWX0FUTUVMX0FFU19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGNyeXB0b19wbGF0Zm9ybV9kYXRhIGFlc19kYXRhOwotc3RhdGljIHN0cnVjdCBjcnlwdG9fZG1hX2RhdGEgYWx0X2F0c2xhdmU7Ci1zdGF0aWMgdTY0IGFlc19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZXNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX0FFUywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfQUVTICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUVTVERFU1NIQSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUVTVERFU1NIQSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2Flc19kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXRtZWxfYWVzIiwKLQkuaWQJCT0gLTEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZhZXNfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFlc19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gYWVzX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWVzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2Flcyh2b2lkKQotewotCXN0cnVjdCBhdF9kbWFfc2xhdmUJKmF0c2xhdmU7Ci0KLQkvKiBETUEgVFggc2xhdmUgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCi0JYXRzbGF2ZSA9ICZhbHRfYXRzbGF2ZS50eGRhdGE7Ci0JYXRzbGF2ZS0+ZG1hX2RldiA9ICZhdF9oZG1hY19kZXZpY2UuZGV2OwotCWF0c2xhdmUtPmNmZyA9IEFUQ19GSUZPQ0ZHX0VOT1VHSFNQQUNFCXwgQVRDX1NSQ19IMlNFTF9IVyB8Ci0JCQkJCQlBVENfU1JDX1BFUihBVF9ETUFfSURfQUVTX1JYKTsKLQotCS8qIERNQSBSWCBzbGF2ZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KLQlhdHNsYXZlID0gJmFsdF9hdHNsYXZlLnJ4ZGF0YTsKLQlhdHNsYXZlLT5kbWFfZGV2ID0gJmF0X2hkbWFjX2RldmljZS5kZXY7Ci0JYXRzbGF2ZS0+Y2ZnID0gQVRDX0ZJRk9DRkdfRU5PVUdIU1BBQ0UJfCBBVENfRFNUX0gyU0VMX0hXIHwKLQkJCQkJCUFUQ19EU1RfUEVSKEFUX0RNQV9JRF9BRVNfVFgpOwotCi0JYWVzX2RhdGEuZG1hX3NsYXZlID0gJmFsdF9hdHNsYXZlOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfYWVzX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZXModm9pZCkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYwotICogc2V0dXAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlpZiAob2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfaGRtYWMoKTsKLQlhdDkxX2FkZF9kZXZpY2VfcnRjKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwotCWF0OTFfYWRkX2RldmljZV90cm5nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3RjKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NoYSgpOwotCWF0OTFfYWRkX2RldmljZV90ZGVzKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX2FlcygpOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05bjEyLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTluMTIuYwppbmRleCBjODk4OGZlLi5kZWU1NjliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTluMTIuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTluMTIuYwpAQCAtNiwyMTkgKzYsMTEgQEAKICAqIExpY2Vuc2VkIHVuZGVyIEdQTHYyIG9yIGxhdGVyLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOW4xMi5oPgotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0KLSNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfT0xEX0NMS19BVDkxKQotI2luY2x1ZGUgImNsb2NrLmgiCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENsb2NrcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBwZXJpcGhlcmFsIGNsb2Nrcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGlvQUJfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfUElPQUIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DRF9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0NEX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9QSU9DRCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVVNBUlQwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9VU0FSVDEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1VTQVJUMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0M19jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0M19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVVNBUlQzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHdpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1RXSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVFdJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfTUNJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1NQSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQwX2NsayA9IHsKLQkubmFtZQkJPSAidWFydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1VBUlQwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfY2xrID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVUFSVDEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0Y2JfY2xrID0gewotCS5uYW1lCQk9ICJ0Y2JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1RDQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGsgPSB7Ci0JLm5hbWUJCT0gInB3bV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfUFdNLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgYWRjX2NsayA9IHsKLQkubmFtZQkJPSAiYWRjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9BREMsCi0JLnR5cGUJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jbGsgPSB7Ci0JLm5hbWUJCT0gImRtYV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfRE1BLAotCS50eXBlCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1aHBfY2xrID0gewotCS5uYW1lCQk9ICJ1aHAiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVUhQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWRwX2NsayA9IHsKLQkubmFtZQkJPSAidWRwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9VRFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZQkJPSAibGNkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfTENEQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzY19jbGsgPSB7Ci0JLm5hbWUJCT0gInNzY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfU1NDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FCX2NsaywKLQkmcGlvQ0RfY2xrLAotCSZ1c2FydDBfY2xrLAotCSZ1c2FydDFfY2xrLAotCSZ1c2FydDJfY2xrLAotCSZ1c2FydDNfY2xrLAotCSZ0d2kwX2NsaywKLQkmdHdpMV9jbGssCi0JJm1tY19jbGssCi0JJnNwaTBfY2xrLAotCSZzcGkxX2NsaywKLQkmbGNkY19jbGssCi0JJnVhcnQwX2NsaywKLQkmdWFydDFfY2xrLAotCSZ0Y2JfY2xrLAotCSZwd21fY2xrLAotCSZhZGNfY2xrLAotCSZkbWFfY2xrLAotCSZ1aHBfY2xrLAotCSZ1ZHBfY2xrLAotCSZzc2NfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCS8qIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZjIwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMWMwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmODAyMDAwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImY4MDI0MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMjgwMDAuc2VyaWFsIiwgJnVzYXJ0M19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZjgwMDgwMDAudGltZXIiLCAmdGNiX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmODAwYzAwMC50aW1lciIsICZ0Y2JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmMDAwODAwMC5tbWMiLCAmbW1jX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImYwMDEwMDAwLnNzYyIsICZzc2NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiZG1hX2NsayIsICJmZmZmZWMwMC5kbWEtY29udHJvbGxlciIsICZkbWFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMTAwMDAuaTJjIiwgJnR3aTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMTQwMDAuaTJjIiwgJnR3aTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmMDAwMDAwMC5zcGkiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImYwMDA0MDAwLnNwaSIsICZzcGkxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQUJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9BQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjgwMC5ncGlvIiwgJnBpb0NEX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmYTAwLmdwaW8iLCAmcGlvQ0RfY2xrKSwKLQkvKiBhZGRpdGlvbmFsIGZha2UgY2xvY2sgZm9yIG1hY2JfaGNsayAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjUwMDAwMC5vaGNpIiwgJnVocF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJvaGNpX2NsayIsICI1MDAwMDAub2hjaSIsICZ1aHBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMzQwMDAucHdtIiwgJnB3bV9jbGspLAotfTsKLQotLyoKLSAqIFRoZSB0d28gcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KLSAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwY2swID0gewotCS5uYW1lCQk9ICJwY2swIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwY2sxID0gewotCS5uYW1lCQk9ICJwY2sxIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOW4xMl9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3MpOyBpKyspCi0JCWNsa19yZWdpc3RlcihwZXJpcGhfY2xvY2tzW2ldKTsKLQljbGtfcmVnaXN0ZXIoJnBjazApOwotCWNsa19yZWdpc3RlcigmcGNrMSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCi19Ci0jZWxzZQotI2RlZmluZSBhdDkxc2FtOW4xMl9yZWdpc3Rlcl9jbG9ja3MgTlVMTAotI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTlOMTIgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCkBAIC0yMzYsNiArMjgsNSBAQAogCiBBVDkxX1NPQ19TVEFSVChhdDkxc2FtOW4xMikKIAkubWFwX2lvID0gYXQ5MXNhbTluMTJfbWFwX2lvLAotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxc2FtOW4xMl9yZWdpc3Rlcl9jbG9ja3MsCiAJLmluaXQgPSBhdDkxc2FtOW4xMl9pbml0aWFsaXplLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmwuYwppbmRleCBmNTUzZTRlLi5mMjViOWFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsLmMKQEAgLTksMjg0ICs5LDE0IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfZGJndS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlybC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAicG0uaCIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfT0xEX0NMS19BVDkxKQotI2luY2x1ZGUgImNsb2NrLmgiCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1BJT0EsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9CX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9QSU9CLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfUElPQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0RfY2xrID0gewotCS5uYW1lCQk9ICJwaW9EX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1BJT0QsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1VTMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0Ml9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0Ml9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9VUzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDNfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVVMzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jX2NsayA9IHsKLQkubmFtZQkJPSAibWNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX01DSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aTBfY2xrID0gewotCS5uYW1lCQk9ICJ0d2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1RXSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9UV0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpX2NsayA9IHsKLQkubmFtZQkJPSAic3BpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1NQSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0gewotCS5uYW1lCQk9ICJzc2MwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1NTQzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MxX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9TU0MxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMwX2NsayA9IHsKLQkubmFtZQkJPSAidGMwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1RDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9UQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0gewotCS5uYW1lCQk9ICJ0YzJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVEMyLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcHdtX2NsayA9IHsKLQkubmFtZQkJPSAicHdtX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1BXTUMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0c2NfY2xrID0gewotCS5uYW1lCQk9ICJ0c2NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVFNDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NsayA9IHsKLQkubmFtZQkJPSAiZG1hX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX0RNQSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVkcGhzX2NsayA9IHsKLQkubmFtZQkJPSAidWRwaHNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVURQSFMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZQkJPSAibGNkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9MQ0RDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgYWM5N19jbGsgPSB7Ci0JLm5hbWUJCT0gImFjOTdfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfQUM5N0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBhZGNfb3BfY2xrID0gewotCS5uYW1lCQk9ICJhZGNfb3BfY2xrIiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotCS5yYXRlX2h6CT0gMTAwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQV9jbGssCi0JJnBpb0JfY2xrLAotCSZwaW9DX2NsaywKLQkmcGlvRF9jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJnVzYXJ0M19jbGssCi0JJm1tY19jbGssCi0JJnR3aTBfY2xrLAotCSZ0d2kxX2NsaywKLQkmc3BpX2NsaywKLQkmc3NjMF9jbGssCi0JJnNzYzFfY2xrLAotCSZ0YzBfY2xrLAotCSZ0YzFfY2xrLAotCSZ0YzJfY2xrLAotCSZwd21fY2xrLAotCSZ0c2NfY2xrLAotCSZkbWFfY2xrLAotCSZ1ZHBoc19jbGssCi0JJmxjZGNfY2xrLAotCSZhYzk3X2NsaywKLQkmYWRjX29wX2NsaywKLQkvLyBpcnEwCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcGVyaXBoX2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MXNhbTlybC1sY2RmYi4wIiwgJmxjZGNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdG1lbF91c2JhX3VkYyIsICZ1dG1pX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXRtZWxfdXNiYV91ZGMiLCAmdWRwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxcm05MjAwX3NzYy4wIiwgJnNzYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxcm05MjAwX3NzYy4xIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZjMDAwMC5zc2MiLCAmc3NjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmM0MDAwLnNzYyIsICZzc2MxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOWcyMC4wIiwgJnR3aTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiaTJjLWF0OTFzYW05ZzIwLjEiLCAmdHdpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJhdDkxc2FtOXJsLXB3bSIsICZwd21fY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9EIiwgJnBpb0RfY2xrKSwKLQkvKiBtb3JlIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZjIwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmYjAwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmYjQwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZiODAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmJjMDAuc2VyaWFsIiwgJnVzYXJ0M19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQxX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDJfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImZmZmE0MDAwLm1tYyIsICZtbWNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYTgwMDAuaTJjIiwgJnR3aTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYWMwMDAuaTJjIiwgJnR3aTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYzgwMDAucHdtIiwgJnB3bV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmYzgwMC5wd20iLCAmcHdtX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9DX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmYTAwLmdwaW8iLCAmcGlvRF9jbGspLAotCUNMS0RFVl9DT05fSUQoImFkY19jbGsiLCAmdHNjX2NsayksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgdXNhcnRfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4xIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4yIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4zIiwgJnVzYXJ0Ml9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC40IiwgJnVzYXJ0M19jbGspLAotfTsKLQotLyoKLSAqIFRoZSB0d28gcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KLSAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwY2swID0gewotCS5uYW1lCQk9ICJwY2swIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwY2sxID0gewotCS5uYW1lCQk9ICJwY2sxIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOXJsX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKLQkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOwotCi0JY2xrZGV2X2FkZF90YWJsZShwZXJpcGhfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKLQljbGtkZXZfYWRkX3RhYmxlKHVzYXJ0X2Nsb2Nrc19sb29rdXBzLAotCQkJIEFSUkFZX1NJWkUodXNhcnRfY2xvY2tzX2xvb2t1cHMpKTsKLQotCWNsa19yZWdpc3RlcigmcGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2sxKTsKLX0KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEdQSU8KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXNhbTlybF9ncGlvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5pZAkJPSBBVDkxU0FNOVJMX0lEX1BJT0EsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlSTF9CQVNFX1BJT0EsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTlSTF9JRF9QSU9CLAotCQkucmVnYmFzZQk9IEFUOTFTQU05UkxfQkFTRV9QSU9CLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05UkxfSURfUElPQywKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOVJMX0JBU0VfUElPQywKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOVJMX0lEX1BJT0QsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlSTF9CQVNFX1BJT0QsCi0JfQotfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBBVDkxU0FNOVJMIHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgpAQCAtMzA5LDEyMSArMzksMTUgQEAKIAlhdDkxX2luaXRfc3JhbSgwLCBBVDkxU0FNOVJMX1NSQU1fQkFTRSwgc3JhbV9zaXplKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05cmxfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxU0FNOVJMX0JBU0VfU0RSQU1DLCA1MTIpOwotCWF0OTFzYW05MjZ4X2lvcmVtYXBfcGl0KEFUOTFTQU05UkxfQkFTRV9QSVQpOwotCWF0OTFzYW05X2lvcmVtYXBfc21jKDAsIEFUOTFTQU05UkxfQkFTRV9TTUMpOwotCWF0OTFfaW9yZW1hcF9tYXRyaXgoQVQ5MVNBTTlSTF9CQVNFX01BVFJJWCk7Ci0JYXQ5MV9wbV9zZXRfc3RhbmRieShhdDkxc2FtOV9zZHJhbV9zdGFuZGJ5KTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05cmxfaW5pdGlhbGl6ZSh2b2lkKQogewogCWFybV9wbV9pZGxlID0gYXQ5MXNhbTlfaWRsZTsKIAogCWF0OTFfc3lzaXJxX21hc2tfcnRjKEFUOTFTQU05UkxfQkFTRV9SVEMpOwogCWF0OTFfc3lzaXJxX21hc2tfcnR0KEFUOTFTQU05UkxfQkFTRV9SVFQpOwotCi0JLyogUmVnaXN0ZXIgR1BJTyBzdWJzeXN0ZW0gKi8KLQlhdDkxX2dwaW9faW5pdChhdDkxc2FtOXJsX2dwaW8sIDQpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJzdGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlSTF9CQVNFX1JTVEMsCi0JCS5lbmQgICAgPSBBVDkxU0FNOVJMX0JBU0VfUlNUQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlSTF9CQVNFX1NEUkFNQywKLQkJLmVuZCAgICA9IEFUOTFTQU05UkxfQkFTRV9TRFJBTUMgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJzdGNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXNhbTkyNjAtcmVzZXQiLAotCS5yZXNvdXJjZSAgICAgICA9IHJzdGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUocnN0Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGR3Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOVJMX0JBU0VfU0hEV0MsCi0JCS5lbmQgICAgPSBBVDkxU0FNOVJMX0JBU0VfU0hEV0MgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hkd2NfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXBvd2Vyb2ZmIiwKLQkucmVzb3VyY2UgICAgICAgPSBzaGR3Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaGR3Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05cmxfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnN0Y19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2hkd2NfZGV2aWNlKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXNhbTlybF9kZWZhdWx0X2lycV9wcmlvcml0eVtOUl9BSUNfSVJRU10gX19pbml0ZGF0YSA9IHsKLQk3LAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotCTcsCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgRCAqLwotCTUsCS8qIFVTQVJUIDAgKi8KLQk1LAkvKiBVU0FSVCAxICovCi0JNSwJLyogVVNBUlQgMiAqLwotCTUsCS8qIFVTQVJUIDMgKi8KLQkwLAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8KLQk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCi0JMCwJLyogVGltZXIgQ291bnRlciAwICovCi0JMCwJLyogVGltZXIgQ291bnRlciAxICovCi0JMCwJLyogVGltZXIgQ291bnRlciAyICovCi0JMCwKLQkwLAkvKiBUb3VjaCBTY3JlZW4gQ29udHJvbGxlciAqLwotCTAsCS8qIERNQSBDb250cm9sbGVyICovCi0JMiwJLyogVVNCIERldmljZSBIaWdoIHNwZWVkIHBvcnQgKi8KLQkyLAkvKiBMQ0QgQ29udHJvbGxlciAqLwotCTYsCS8qIEFDOTcgQ29udHJvbGxlciAqLwotCTAsCi0JMCwKLQkwLAotCTAsCi0JMCwKLQkwLAotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlybF9pbml0X3RpbWUodm9pZCkKLXsKLQlhdDkxc2FtOTI2eF9waXRfaW5pdChOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTKTsKIH0KIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTlybCkKIAkubWFwX2lvID0gYXQ5MXNhbTlybF9tYXBfaW8sCi0JLmRlZmF1bHRfaXJxX3ByaW9yaXR5ID0gYXQ5MXNhbTlybF9kZWZhdWx0X2lycV9wcmlvcml0eSwKLQkuZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05UkxfSURfSVJRMCksCi0JLmlvcmVtYXBfcmVnaXN0ZXJzID0gYXQ5MXNhbTlybF9pb3JlbWFwX3JlZ2lzdGVycywKLSNpZiBkZWZpbmVkKENPTkZJR19PTERfQ0xLX0FUOTEpCi0JLnJlZ2lzdGVyX2Nsb2NrcyA9IGF0OTFzYW05cmxfcmVnaXN0ZXJfY2xvY2tzLAotI2VuZGlmCi0JLnJlZ2lzdGVyX2RldmljZXMgPSBhdDkxc2FtOXJsX3JlZ2lzdGVyX2RldmljZXMsCiAJLmluaXQgPSBhdDkxc2FtOXJsX2luaXRpYWxpemUsCi0JLmluaXRfdGltZSA9IGF0OTFzYW05cmxfaW5pdF90aW1lLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZDFjOWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI2MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1hdG1lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXQ5MV9hZGMuaD4KLQotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEhETUFDIC0gQUhCIERNQSBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRfSERNQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUX0hETUFDX01PRFVMRSkKLXN0YXRpYyB1NjQgaGRtYWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGRtYWNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfRE1BLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX0RNQSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfRE1BLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX0RNQSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0X2hkbWFjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MXNhbTlybF9kbWEiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmhkbWFjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IGhkbWFjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGRtYWNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9oZG1hYyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRfaGRtYWNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIUyBEZXZpY2UgKEdhZGdldCkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfQVRNRUxfVVNCQSkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0FUTUVMX1VTQkFfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYmFfdWRjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9VRFBIU19GSUZPLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9VRFBIU19GSUZPICsgU1pfNTEySyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVURQSFMsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVURQSFMgKyBTWl8xSyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVURQSFMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVURQSFMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi0jZGVmaW5lIEVQKG5hbSwgaWR4LCBtYXhwa3QsIG1heGJrLCBkbWEsIGlzb2MpCQkJXAotCVtpZHhdID0gewkJCQkJCVwKLQkJLm5hbWUJCT0gbmFtLAkJCQlcCi0JCS5pbmRleAkJPSBpZHgsCQkJCVwKLQkJLmZpZm9fc2l6ZQk9IG1heHBrdCwJCQlcCi0JCS5ucl9iYW5rcwk9IG1heGJrLAkJCVwKLQkJLmNhbl9kbWEJPSBkbWEsCQkJCVwKLQkJLmNhbl9pc29jCT0gaXNvYywJCQkJXAotCX0KLQotc3RhdGljIHN0cnVjdCB1c2JhX2VwX2RhdGEgdXNiYV91ZGNfZXBbXSBfX2luaXRkYXRhID0gewotCUVQKCJlcDAiLCAwLCA2NCwgMSwgMCwgMCksCi0JRVAoImVwMSIsIDEsIDEwMjQsIDIsIDEsIDEpLAotCUVQKCJlcDIiLCAyLCAxMDI0LCAyLCAxLCAxKSwKLQlFUCgiZXAzIiwgMywgMTAyNCwgMywgMSwgMCksCi0JRVAoImVwNCIsIDQsIDEwMjQsIDMsIDEsIDApLAotCUVQKCJlcDUiLCA1LCAxMDI0LCAzLCAxLCAxKSwKLQlFUCgiZXA2IiwgNiwgMTAyNCwgMywgMSwgMSksCi19OwotCi0jdW5kZWYgRVAKLQotLyoKLSAqIHBkYXRhIGRvZXNuJ3QgaGF2ZSByb29tIGZvciBhbnkgZW5kcG9pbnRzLCBzbyB3ZSBuZWVkIHRvCi0gKiBhcHBlbmQgcm9vbSBmb3IgdGhlIG9uZXMgd2UgbmVlZCByaWdodCBhZnRlciBpdC4KLSAqLwotc3RhdGljIHN0cnVjdCB7Ci0Jc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSBwZGF0YTsKLQlzdHJ1Y3QgdXNiYV9lcF9kYXRhIGVwWzddOwotfSB1c2JhX3VkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VzYmFfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNiYV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZ1c2JhX3VkY19kYXRhLnBkYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiYV91ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JhX3VkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmEoc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQkvKgotCSAqIEludmFsaWQgcGlucyBhcmUgMCBvbiBBVDkxLCBidXQgdGhlIHVzYmEgZHJpdmVyIGlzIHNoYXJlZAotCSAqIHdpdGggQVZSMzIsIHdoaWNoIHVzZSBuZWdhdGl2ZSB2YWx1ZXMgaW5zdGVhZC4gT25jZS9pZgotCSAqIGdwaW9faXNfdmFsaWQoKSBpcyBwb3J0ZWQgdG8gQVQ5MSwgcmV2aXNpdCB0aGlzIGNvZGUuCi0JICovCi0JdXNiYV91ZGNfZGF0YS5wZGF0YS52YnVzX3BpbiA9IC1FSU5WQUw7Ci0JdXNiYV91ZGNfZGF0YS5wZGF0YS5udW1fZXAgPSBBUlJBWV9TSVpFKHVzYmFfdWRjX2VwKTsKLQltZW1jcHkodXNiYV91ZGNfZGF0YS5lcCwgdXNiYV91ZGNfZXAsIHNpemVvZih1c2JhX3VkY19lcCkpOwotCi0JaWYgKGRhdGEgJiYgZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKLQkJdXNiYV91ZGNfZGF0YS5wZGF0YS52YnVzX3BpbiA9IGRhdGEtPnZidXNfcGluOwotCX0KLQotCS8qIFB1bGx1cCBwaW4gaXMgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IFVTQiBkZXZpY2UgcGVyaXBoZXJhbCAqLwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmFfdWRjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmEoc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTU1DIC8gU0QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi1zdGF0aWMgdTY0IG1tY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgbW1jX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX01DSSwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9NQ0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX01DSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9NQ0ksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX21tY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX21jaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBtbWNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZGF0YS0+c2xvdFswXS5idXNfd2lkdGgpIHsKLQkJLyogaW5wdXQvaXJxICovCi0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbMF0uZGV0ZWN0X3BpbikpIHsKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFswXS5kZXRlY3RfcGluLCAxKTsKLQkJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnNsb3RbMF0uZGV0ZWN0X3BpbiwgMSk7Ci0JCX0KLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+c2xvdFswXS53cF9waW4pKQotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90WzBdLndwX3BpbiwgMSk7Ci0KLQkJLyogQ0xLICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMiwgMCk7Ci0KLQkJLyogQ01EICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMSk7Ci0KLQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTAsIDEpOwotCQlpZiAoZGF0YS0+c2xvdFswXS5idXNfd2lkdGggPT0gNCkgewotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzLCAxKTsKLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNCwgMSk7Ci0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOwotCQl9Ci0KLQkJbW1jX2RhdGEgPSAqZGF0YTsKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX21tY19kZXZpY2UpOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBOQU5EIC8gU21hcnRNZWRpYQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7Ci0KLSNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IE5BTkRfQkFTRSwKLQkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX0VDQywKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9FQ0MgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdG1lbF9uYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG5hbmRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuYW5kX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgY3NhOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQljc2EgPSBhdDkxX21hdHJpeF9yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7Ci0JYXQ5MV9tYXRyaXhfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBKTsKLQotCS8qIGVuYWJsZSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5lbmFibGVfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7Ci0KLQkvKiByZWFkeS9idXN5IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnJkeV9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOwotCi0JLyogY2FyZCBkZXRlY3QgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZGV0X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDApOwkJLyogTkFORE9FICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI1LCAwKTsJCS8qIE5BTkRXRSAqLwotCi0JbmFuZF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdG1lbF9uYW5kX2RldmljZSk7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUV0kgKGkyYykKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0Ci0gKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQotICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGEgPSB7Ci0JLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEEyMywKLQkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAotCS5zY2xfcGluCQk9IEFUOTFfUElOX1BBMjQsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfdHdpX2RldmljZSA9IHsKLQkubmFtZQkJCT0gImkyYy1ncGlvIiwKLQkuaWQJCQk9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjMsIDEpOwkJLyogVFdEIChTREEpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMywgMSk7Ci0KLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI0LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF90d2lfZGV2aWNlKTsKLX0KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVFdJMCwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9UV0kwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UV0kwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RXSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImkyYy1hdDkxc2FtOWcyMCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdHdpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JLyogcGlucyB1c2VkIGZvciBUV0kgaW50ZXJmYWNlICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CQkvKiBUV0QgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTIzLCAxKTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjQsIDApOwkJLyogVFdDSyAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjQsIDEpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX3R3aV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1BJCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1NQSSwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9TUEkgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1NQSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9TUEksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3NwaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQTI4LCBBVDkxX1BJTl9QQjcsIEFUOTFfUElOX1BEOCwgQVQ5MV9QSU5fUEQ5IH07Ci0KLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgY3NfcGluOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNSwgMCk7CS8qIE1JU08gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAwKTsJLyogTU9TSSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDApOwkvKiBTUENLICovCi0KLQkvKiBFbmFibGUgU1BJIGNoaXAtc2VsZWN0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9kZXZpY2VzOyBpKyspIHsKLQkJaWYgKGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhKQotCQkJY3NfcGluID0gKHVuc2lnbmVkIGxvbmcpIGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhOwotCQllbHNlCi0JCQljc19waW4gPSBzcGlfc3RhbmRhcmRfY3NbZGV2aWNlc1tpXS5jaGlwX3NlbGVjdF07Ci0KLQkJaWYgKCFncGlvX2lzX3ZhbGlkKGNzX3BpbikpCi0JCQljb250aW51ZTsKLQotCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7Ci0KLQkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCi0JCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOwotCX0KLQotCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF9zcGlfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFDOTcKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3Q19NT0RVTEUpCi1zdGF0aWMgdTY0IGFjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgYWM5N19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGFjOTdfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfQUM5N0MsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX0FDOTdDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX0FDOTdDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9hYzk3X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFjOTdfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGFjOTdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMSwgMCk7CS8qIEFDOTdGUyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMCk7CS8qIEFDOTdDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMywgMCk7CS8qIEFDOTdUWCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENCwgMCk7CS8qIEFDOTdSWCAqLwotCi0JLyogcmVzZXQgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZXNldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOwotCi0JYWM5N19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX2FjOTdfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTENEIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBsY2RjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSBsY2RjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfTENEQ19CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9MQ0RDX0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfTENEQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9MQ0RDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9sY2RjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MXNhbTlybC1sY2RmYiIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZsY2RjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbGNkY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbGNkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxjZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpIHsKLQkJcmV0dXJuOwotCX0KLQotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMSwgMCk7CS8qIExDRFBXUiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNSwgMCk7CS8qIExDREhTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM2LCAwKTsJLyogTENERE9UQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOwkvKiBMQ0RERU4gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMsIDApOwkvKiBMQ0RDQyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIExDREQzICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7CS8qIExDREQ0ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIExDREQ1ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMCk7CS8qIExDREQ2ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMywgMCk7CS8qIExDREQ3ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxNSwgMCk7CS8qIExDREQxMSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTYsIDApOwkvKiBMQ0REMTIgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzE3LCAwKTsJLyogTENERDEzICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxOCwgMCk7CS8qIExDREQxNCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTksIDApOwkvKiBMQ0REMTUgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIwLCAwKTsJLyogTENERDE4ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyMSwgMCk7CS8qIExDREQxOSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjIsIDApOwkvKiBMQ0REMjAgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIzLCAwKTsJLyogTENERDIxICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNCwgMCk7CS8qIExDREQyMiAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjUsIDApOwkvKiBMQ0REMjMgKi8KLQotCWxjZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9sY2RjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUaW1lci9Db3VudGVyIGJsb2NrCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1RDQjAsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVEMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVEMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RDMiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UQzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3RjYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdGNiX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX3RjYl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFEQyBhbmQgVG91Y2hzY3JlZW4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19BVDkxX0FEQykKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSBhZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVFNDLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1RTQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVFNDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RTQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9hZGNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxc2FtOXJsLWFkYyIsCi0JLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiAgICAgICAgICAgID0gewotCQkucGxhdGZvcm1fZGF0YSAgPSAmYWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UgICAgICAgPSBhZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoYWRjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfYWRjX3RyaWdnZXIgYXQ5MV9hZGNfdHJpZ2dlcnNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lID0gImV4dGVybmFsLXJpc2luZyIsCi0JCS52YWx1ZSA9IDEsCi0JCS5pc19leHRlcm5hbCA9IHRydWUsCi0JfSwKLQlbMV0gPSB7Ci0JCS5uYW1lID0gImV4dGVybmFsLWZhbGxpbmciLAotCQkudmFsdWUgPSAyLAotCQkuaXNfZXh0ZXJuYWwgPSB0cnVlLAotCX0sCi0JWzJdID0gewotCQkubmFtZSA9ICJleHRlcm5hbC1hbnkiLAotCQkudmFsdWUgPSAzLAotCQkuaXNfZXh0ZXJuYWwgPSB0cnVlLAotCX0sCi0JWzNdID0gewotCQkubmFtZSA9ICJjb250aW51b3VzIiwKLQkJLnZhbHVlID0gNiwKLQkJLmlzX2V4dGVybmFsID0gZmFsc2UsCi0JfSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZGMoc3RydWN0IGF0OTFfYWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAodGVzdF9iaXQoMCwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsKLQlpZiAodGVzdF9iaXQoMSwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsKLQlpZiAodGVzdF9iaXQoMiwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsKLQlpZiAodGVzdF9iaXQoMywgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAwKTsKLQlpZiAodGVzdF9iaXQoNCwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDYsIDApOwotCWlmICh0ZXN0X2JpdCg1LCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENywgMCk7Ci0KLQlpZiAoZGF0YS0+dXNlX2V4dGVybmFsX3RyaWdnZXJzKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE1LCAwKTsKLQotCWRhdGEtPnN0YXJ0dXBfdGltZSA9IDQwOwotCWRhdGEtPnRyaWdnZXJfbnVtYmVyID0gNDsKLQlkYXRhLT50cmlnZ2VyX2xpc3QgPSBhdDkxX2FkY190cmlnZ2VyczsKLQotCWFkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX2FkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZGMoc3RydWN0IGF0OTFfYWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVEMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3J0Y19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfcnRjIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05cmxfcnRjX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydGModm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUlRUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0dF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9SVFQsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfUlRUICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfcnR0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9ydHQiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHJ0dF9yZXNvdXJjZXMsCi19OwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSkKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCWF0OTFzYW05cmxfcnR0X2RldmljZS5uYW1lID0gInJ0Yy1hdDkxc2FtOSI7Ci0JLyoKLQkgKiBUaGUgc2Vjb25kIHJlc291cmNlIGlzIG5lZWRlZDoKLQkgKiBHUEJSIHdpbGwgc2VydmUgYXMgdGhlIHN0b3JhZ2UgZm9yIFJUQyB0aW1lIG9mZnNldAotCSAqLwotCWF0OTFzYW05cmxfcnR0X2RldmljZS5udW1fcmVzb3VyY2VzID0gMzsKLQlydHRfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gQVQ5MVNBTTlSTF9CQVNFX0dQQlIgKwotCQkJCSA0ICogQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfR1BCUjsKLQlydHRfcmVzb3VyY2VzWzFdLmVuZCA9IHJ0dF9yZXNvdXJjZXNbMV0uc3RhcnQgKyAzOwotCXJ0dF9yZXNvdXJjZXNbMl0uc3RhcnQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotCXJ0dF9yZXNvdXJjZXNbMl0uZW5kID0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUzsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGModm9pZCkKLXsKLQkvKiBPbmx5IG9uZSByZXNvdXJjZSBpcyBuZWVkZWQ6IFJUVCBub3QgdXNlZCBhcyBSVEMgKi8KLQlhdDkxc2FtOXJsX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0X3J0YygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF9ydHRfZGV2aWNlKTsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFdhdGNoZG9nCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0dfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfV0RULAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1dEVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF93ZHRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3dkdCIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHdkdF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHdkdF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV93YXRjaGRvZyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF93ZHRfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFBXTQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFdNX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwd21fcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfUFdNQywKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9QV01DICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9QV01DLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1BXTUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3B3bTBfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFzYW05cmwtcHdtIiwKLQkuaWQJPSAtMSwKLQkucmVzb3VyY2UJPSBwd21fcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShwd21fcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9wd20odTMyIG1hc2spCi17Ci0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTApKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjgsIDEpOwkvKiBlbmFibGUgUFdNMCAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTEpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjksIDEpOwkvKiBlbmFibGUgUFdNMSAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTIpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDUsIDEpOwkvKiBlbmFibGUgUFdNMiAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTMpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDgsIDEpOwkvKiBlbmFibGUgUFdNMyAqLwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX3B3bTBfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcHdtKHUzMiBtYXNrKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTU0MgLS0gU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0MpIHx8IGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQ19NT0RVTEUpCi1zdGF0aWMgdTY0IHNzYzBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9TU0MwLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1NTQzAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1NTQzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfU1NDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfc3NjMF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MwX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19USykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMSk7Ci19Ci0KLXN0YXRpYyB1NjQgc3NjMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1NTQzEsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfU1NDMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfU1NDMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9TU0MxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9zc2MxX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxcm05MjAwX3NzYyIsCi0JLmlkCT0gMSwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzYzFfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNzYzFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzc2MxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzYzFfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RGKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19USykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEzMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE0LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SSykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxU0FNOVJMX0lEX1NTQzA6Ci0JCXBkZXYgPSAmYXQ5MXNhbTlybF9zc2MwX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzBfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVDkxU0FNOVJMX0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXNhbTlybF9zc2MxX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzFfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVBUlQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfREJHVSwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfZGJndV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAwKTsJCS8qIERSWEQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAxKTsJCS8qIERUWEQgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzAsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9VUzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF91YXJ0MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTYsIDEpOwkJLyogVFhEMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMCk7CQkvKiBSWEQwICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDApOwkvKiBSVFMwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMCk7CS8qIENUUzAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfRFNSKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDE0LCAwKTsJLyogRFNSMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9EVFIpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTUsIDApOwkvKiBEVFIwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RDRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNiwgMCk7CS8qIERDRDAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUkkpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTcsIDApOwkvKiBSSTAgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzEsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9VUzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF91YXJ0MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMiwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQxX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTExLCAxKTsJCS8qIFRYRDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsJCS8qIFJYRDEgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDApOwkvKiBSVFMxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExOSwgMCk7CS8qIENUUzEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzIsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9VUzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDJfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0Ml9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF91YXJ0Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAxKTsJCS8qIFRYRDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE0LCAwKTsJCS8qIFJYRDIgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOwkvKiBSVFMyICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzMCwgMCk7CS8qIENUUzIgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzMsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMzICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9VUzMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF91YXJ0M19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gNCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQzX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQzX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQzX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDEpOwkJLyogVFhEMyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CQkvKiBSWEQzICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDQsIDApOwkvKiBSVFMzICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQzLCAwKTsJLyogQ1RTMyAqLwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwotCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgKnBkYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCQljYXNlIDA6CQkvKiBEQkdVICovCi0JCQlwZGV2ID0gJmF0OTFzYW05cmxfZGJndV9kZXZpY2U7Ci0JCQljb25maWd1cmVfZGJndV9waW5zKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOVJMX0lEX1VTMDoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlybF91YXJ0MF9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOVJMX0lEX1VTMToKLQkJCXBkZXYgPSAmYXQ5MXNhbTlybF91YXJ0MV9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQxX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOVJMX0lEX1VTMjoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlybF91YXJ0Ml9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQyX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOVJMX0lEX1VTMzoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlybF91YXJ0M19kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQzX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQl9Ci0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlwZGF0YS0+bnVtID0gcG9ydG5yOwkJLyogdXBkYXRlIHRvIG1hcHBlZCBJRCAqLwotCi0JaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQotCQlhdDkxX3VhcnRzW3BvcnRucl0gPSBwZGV2OwotfQotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgewotCQlpZiAoYXQ5MV91YXJ0c1tpXSkKLQkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpIHt9Ci12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlc2UgZGV2aWNlcyBhcmUgYWx3YXlzIHByZXNlbnQgYW5kIGRvbid0IG5lZWQgYW55IGJvYXJkLXNwZWNpZmljCi0gKiBzZXR1cC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCWF0OTFfYWRkX2RldmljZV9oZG1hYygpOwotCWF0OTFfYWRkX2RldmljZV9ydGMoKTsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3RjKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTl4NS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05eDUuYwppbmRleCAwMjgyNjhmZi4uZjBkNWE2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05eDUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTl4NS5jCkBAIC02LDMxNyArNiwxMSBAQAogICogTGljZW5zZWQgdW5kZXIgR1BMdjIgb3IgbGF0ZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrL2F0OTFfcG1jLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05eDUuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FCX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQUJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfUElPQUIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DRF9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0NEX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1BJT0NELAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc21kX2NsayA9IHsKLQkubmFtZQkJPSAic21kX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1NNRCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9VU0FSVDAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDFfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVVNBUlQxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQyX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VTQVJUMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLS8qIFVTQVJUMyBjbG9jayAtIE9ubHkgZm9yIHNhbTlnMjUvc2FtOXgyNSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQzX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VTQVJUMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aTBfY2xrID0gewotCS5uYW1lCQk9ICJ0d2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1RXSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9UV0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHdpMl9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aTJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVFdJMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzBfY2xrID0gewotCS5uYW1lCQk9ICJtY2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX01DSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkwX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9TUEkwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQwX2NsayA9IHsKLQkubmFtZQkJPSAidWFydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVUFSVDAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VBUlQxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGNiMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjYjBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVENCLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcHdtX2NsayA9IHsKLQkubmFtZQkJPSAicHdtX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1BXTSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImFkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9BREMsCi0JLnR5cGUJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFkY19vcF9jbGsgPSB7Ci0JLm5hbWUJCT0gImFkY19vcF9jbGsiLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi0JLnJhdGVfaHoJPSA1MDAwMDAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYTBfY2xrID0gewotCS5uYW1lCQk9ICJkbWEwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0RNQTAsCi0JLnR5cGUJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYTFfY2xrID0gewotCS5uYW1lCQk9ICJkbWExX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0RNQTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1aHBoc19jbGsgPSB7Ci0JLm5hbWUJCT0gInVocGhzIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVUhQSFMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1ZHBoc19jbGsgPSB7Ci0JLm5hbWUJCT0gInVkcGhzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VEUEhTLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotLyogZW1hYzAgY2xvY2sgLSBPbmx5IGZvciBzYW05ZzI1L3NhbTl4MjUvc2FtOWczNS9zYW05eDM1ICovCi1zdGF0aWMgc3RydWN0IGNsayBtYWNiMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInBjbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9FTUFDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLS8qIGxjZCBjbG9jayAtIE9ubHkgZm9yIHNhbTlnMTUvc2FtOWczNS9zYW05eDM1ICovCi1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZQkJPSAibGNkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9MQ0RDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotLyogaXNpIGNsb2NrIC0gT25seSBmb3Igc2FtOWcyNSAqLwotc3RhdGljIHN0cnVjdCBjbGsgaXNpX2NsayA9IHsKLQkubmFtZQkJPSAiaXNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0lTSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2xrID0gewotCS5uYW1lCQk9ICJtY2kxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX01DSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0vKiBlbWFjMSBjbG9jayAtIE9ubHkgZm9yIHNhbTl4MjUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1hY2IxX2NsayA9IHsKLQkubmFtZQkJPSAicGNsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0VNQUMxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjX2NsayA9IHsKLQkubmFtZQkJPSAic3NjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1NTQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLS8qIGNhbjAgY2xvY2sgLSBPbmx5IGZvciBzYW05eDM1ICovCi1zdGF0aWMgc3RydWN0IGNsayBjYW4wX2NsayA9IHsKLQkubmFtZQkJPSAiY2FuMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9DQU4wLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotLyogY2FuMSBjbG9jayAtIE9ubHkgZm9yIHNhbTl4MzUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNhbjFfY2xrID0gewotCS5uYW1lCQk9ICJjYW4xX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0NBTjEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQUJfY2xrLAotCSZwaW9DRF9jbGssCi0JJnNtZF9jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJnR3aTBfY2xrLAotCSZ0d2kxX2NsaywKLQkmdHdpMl9jbGssCi0JJm1tYzBfY2xrLAotCSZzcGkwX2NsaywKLQkmc3BpMV9jbGssCi0JJnVhcnQwX2NsaywKLQkmdWFydDFfY2xrLAotCSZ0Y2IwX2NsaywKLQkmcHdtX2NsaywKLQkmYWRjX2NsaywKLQkmYWRjX29wX2NsaywKLQkmZG1hMF9jbGssCi0JJmRtYTFfY2xrLAotCSZ1aHBoc19jbGssCi0JJnVkcGhzX2NsaywKLQkmbW1jMV9jbGssCi0JJnNzY19jbGssCi0JLy8gaXJxMAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCS8qIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZjIwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMWMwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmODAyMDAwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImY4MDI0MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMjgwMDAuc2VyaWFsIiwgJnVzYXJ0M19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmODA0MDAwMC5zZXJpYWwiLCAmdWFydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwNDQwMDAuc2VyaWFsIiwgJnVhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmODAwODAwMC50aW1lciIsICZ0Y2IwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmODAwYzAwMC50aW1lciIsICZ0Y2IwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZjAwMDgwMDAubW1jIiwgJm1tYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmMDAwYzAwMC5tbWMiLCAmbW1jMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJkbWFfY2xrIiwgImZmZmZlYzAwLmRtYS1jb250cm9sbGVyIiwgJmRtYTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiZG1hX2NsayIsICJmZmZmZWUwMC5kbWEtY29udHJvbGxlciIsICZkbWExX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZjAwMTAwMDAuc3NjIiwgJnNzY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmODAxMDAwMC5pMmMiLCAmdHdpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmODAxNDAwMC5pMmMiLCAmdHdpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmODAxODAwMC5pMmMiLCAmdHdpMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImYwMDAwMDAwLnNwaSIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZjAwMDQwMDAuc3BpIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY0MDAuZ3BpbyIsICZwaW9BQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0FCX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmODAwLmdwaW8iLCAmcGlvQ0RfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmZhMDAuZ3BpbyIsICZwaW9DRF9jbGspLAotCS8qIGFkZGl0aW9uYWwgZmFrZSBjbG9jayBmb3IgbWFjYl9oY2xrICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiZjgwMmMwMDAuZXRoZXJuZXQiLCAmbWFjYjBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJmODAzMDAwMC5ldGhlcm5ldCIsICZtYWNiMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjYwMDAwMC5vaGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm9oY2lfY2xrIiwgIjYwMDAwMC5vaGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImVoY2lfY2xrIiwgIjcwMDAwMC5laGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiNTAwMDAwLmdhZGdldCIsICZ1dG1pX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiNTAwMDAwLmdhZGdldCIsICZ1ZHBoc19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmODAzNDAwMC5wd20iLCAmcHdtX2NsayksCi19OwotCi0vKgotICogVGhlIHR3byBwcm9ncmFtbWFibGUgY2xvY2tzLgotICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7Ci0JLm5hbWUJCT0gInBjazAiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7Ci0JLm5hbWUJCT0gInBjazEiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAxLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05eDVfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcyNSgpCi0JfHwgY3B1X2lzX2F0OTFzYW05eDI1KCkpCi0JCWNsa19yZWdpc3RlcigmdXNhcnQzX2Nsayk7Ci0KLQlpZiAoY3B1X2lzX2F0OTFzYW05ZzI1KCkKLQl8fCBjcHVfaXNfYXQ5MXNhbTl4MjUoKQotCXx8IGNwdV9pc19hdDkxc2FtOWczNSgpCi0JfHwgY3B1X2lzX2F0OTFzYW05eDM1KCkpCi0JCWNsa19yZWdpc3RlcigmbWFjYjBfY2xrKTsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTlnMTUoKQotCXx8IGNwdV9pc19hdDkxc2FtOWczNSgpCi0JfHwgY3B1X2lzX2F0OTFzYW05eDM1KCkpCi0JCWNsa19yZWdpc3RlcigmbGNkY19jbGspOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcyNSgpKQotCQljbGtfcmVnaXN0ZXIoJmlzaV9jbGspOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOXgyNSgpKQotCQljbGtfcmVnaXN0ZXIoJm1hY2IxX2Nsayk7Ci0KLQlpZiAoY3B1X2lzX2F0OTFzYW05eDI1KCkKLQl8fCBjcHVfaXNfYXQ5MXNhbTl4MzUoKSkgewotCQljbGtfcmVnaXN0ZXIoJmNhbjBfY2xrKTsKLQkJY2xrX3JlZ2lzdGVyKCZjYW4xX2Nsayk7Ci0JfQotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotfQotI2Vsc2UKLSNkZWZpbmUgYXQ5MXNhbTl4NV9yZWdpc3Rlcl9jbG9ja3MJTlVMTAotI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTl4NSBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTMzOCw2ICszMiw1IEBACiAKIEFUOTFfU09DX1NUQVJUKGF0OTFzYW05eDUpCiAJLm1hcF9pbyA9IGF0OTFzYW05eDVfbWFwX2lvLAotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxc2FtOXg1X3JlZ2lzdGVyX2Nsb2NrcywKIAkuaW5pdCA9IGF0OTFzYW05eDVfaW5pdGlhbGl6ZSwKIEFUOTFfU09DX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTF4NDAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxeDQwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MjNmMWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTF4NDAuYworKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXg0MC5jCi0gKgotICogKEMpIENvcHlyaWdodCAyMDA3LCBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxeDQwLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3N0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0KLS8qCi0gKiBFeHBvcnQgdGhlIGNsb2NrIGZ1bmN0aW9ucyBmb3IgdGhlIEFUOTFYNDAuIFNvbWUgZXh0ZXJuYWwgY29kZSBjb21tb24KLSAqIHRvIGFsbCBBVDkxIGZhbWlseSBwYXJ0cyByZWx5cyBvbiB0aGlzLCBsaWtlIHRoZSBncGlvIGFuZCBzZXJpYWwgc3VwcG9ydC4KLSAqLwotaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiAwOwotfQotCi12b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLX0KLQotdW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBBVDkxWDQwX01BU1RFUl9DTE9DSzsKLX0KLQotc3RhdGljIHZvaWQgYXQ5MXg0MF9pZGxlKHZvaWQpCi17Ci0JLyoKLQkgKiBEaXNhYmxlIHRoZSBwcm9jZXNzb3IgY2xvY2suICBUaGUgcHJvY2Vzc29yIHdpbGwgYmUgYXV0b21hdGljYWxseQotCSAqIHJlLWVuYWJsZWQgYnkgYW4gaW50ZXJydXB0IG9yIGJ5IGEgcmVzZXQuCi0JICovCi0JX19yYXdfd3JpdGVsKEFUOTFfUFNfQ1JfQ1BVLCBBVDkxX0lPX1AyVihBVDkxX1BTX0NSKSk7Ci0JY3B1X2RvX2lkbGUoKTsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MXg0MF9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKLXsKLQlhcm1fcG1faWRsZSA9IGF0OTF4NDBfaWRsZTsKLX0KLQotLyoKLSAqIFRoZSBkZWZhdWx0IGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgKDAgPSBsb3dlc3QsIDcgPSBoaWdoZXN0KS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdDkxeDQwX2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0gewotCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCi0JMCwJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCi0JMCwJLyogVVNBUlQgMCAqLwotCTAsCS8qIFVTQVJUIDEgKi8KLQkyLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KLQkyLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KLQkyLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KLQkwLAkvKiBXYXRjaGRvZyB0aW1lciAqLwotCTAsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLwotCTAsCS8qIFJlc2VydmVkICovCi0JMCwJLyogUmVzZXJ2ZWQgKi8KLQkwLAkvKiBSZXNlcnZlZCAqLwotCTAsCS8qIFJlc2VydmVkICovCi0JMCwJLyogUmVzZXJ2ZWQgKi8KLQkwLAkvKiBSZXNlcnZlZCAqLwotCTAsCS8qIFJlc2VydmVkICovCi0JMCwJLyogRXh0ZXJuYWwgSVJRMCAqLwotCTAsCS8qIEV4dGVybmFsIElSUTEgKi8KLQkwLAkvKiBFeHRlcm5hbCBJUlEyICovCi19OwotCi12b2lkIF9faW5pdCBhdDkxeDQwX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbTlJfQUlDX0lSUVNdKQotewotCXUzMiAgZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFYNDBfSURfSVJRMCkgfCAoMSA8PCBBVDkxWDQwX0lEX0lSUTEpCi0JCQl8ICgxIDw8IEFUOTFYNDBfSURfSVJRMik7Ci0JaWYgKCFwcmlvcml0eSkKLQkJcHJpb3JpdHkgPSBhdDkxeDQwX2RlZmF1bHRfaXJxX3ByaW9yaXR5OwotCi0JYXQ5MV9haWNfaW5pdChwcmlvcml0eSwgZXh0ZXJuX2lycSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXg0MF90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXg0MF90aW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZDBiZjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTF4NDBfdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDkxeDQwX3RpbWUuYwotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNywgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxeDQwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV90Yy5oIgotCi0jZGVmaW5lIGF0OTFfdGNfcmVhZChmaWVsZCkgXAotCV9fcmF3X3JlYWRsKEFUOTFfSU9fUDJWKEFUOTFfVEMpICsgZmllbGQpCi0KLSNkZWZpbmUgYXQ5MV90Y193cml0ZShmaWVsZCwgdmFsdWUpIFwKLQlfX3Jhd193cml0ZWwodmFsdWUsIEFUOTFfSU9fUDJWKEFUOTFfVEMpICsgZmllbGQpCi0KLS8qCi0gKgkzIGNvdW50ZXIvdGltZXIgdW5pdHMgcHJlc2VudC4KLSAqLwotI2RlZmluZQlBVDkxX1RDX0NMSzBCQVNFCTAKLSNkZWZpbmUJQVQ5MV9UQ19DTEsxQkFTRQkweDQwCi0jZGVmaW5lCUFUOTFfVENfQ0xLMkJBU0UJMHg4MAotCi1zdGF0aWMgdTMyIGF0OTF4NDBfZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXJldHVybiAoYXQ5MV90Y19yZWFkKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX0NWKSAqIDEwMDAwMDAgLwotCQkoQVQ5MVg0MF9NQVNURVJfQ0xPQ0sgLyAxMjgpKSAqIDEwMDA7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBhdDkxeDQwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JYXQ5MV90Y19yZWFkKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX1NSKTsKLQl0aW1lcl90aWNrKCk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBhdDkxeDQwX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiYXQ5MV90aWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9USU1FUiwKLQkuaGFuZGxlcgk9IGF0OTF4NDBfdGltZXJfaW50ZXJydXB0Ci19OwotCi12b2lkIF9faW5pdCBhdDkxeDQwX3RpbWVyX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQotCWFyY2hfZ2V0dGltZW9mZnNldCA9IGF0OTF4NDBfZ2V0dGltZW9mZnNldDsKLQotCWF0OTFfdGNfd3JpdGUoQVQ5MV9UQ19CQ1IsIDApOwotCXYgPSBhdDkxX3RjX3JlYWQoQVQ5MV9UQ19CTVIpOwotCXYgPSAodiAmIH5BVDkxX1RDX1RDMVhDMVMpIHwgQVQ5MV9UQ19UQzFYQzFTX05PTkU7Ci0JYXQ5MV90Y193cml0ZShBVDkxX1RDX0JNUiwgdik7Ci0KLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX0NDUiwgQVQ5MV9UQ19DTEtESVMpOwotCWF0OTFfdGNfd3JpdGUoQVQ5MV9UQ19DTEsxQkFTRSArIEFUOTFfVENfQ01SLCAoQVQ5MV9UQ19USU1FUl9DTE9DSzQgfCBBVDkxX1RDX0NQQ1RSRykpOwotCWF0OTFfdGNfd3JpdGUoQVQ5MV9UQ19DTEsxQkFTRSArIEFUOTFfVENfSURSLCAweGZmZmZmZmZmKTsKLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX1JDLCAoQVQ5MVg0MF9NQVNURVJfQ0xPQ0sgLyAxMjgpIC8gSFogLSAxKTsKLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX0lFUiwgKDE8PDQpKTsKLQotCXNldHVwX2lycShBVDkxWDQwX0lEX1RDMSwgJmF0OTF4NDBfdGltZXJfaXJxKTsKLQotCWF0OTFfdGNfd3JpdGUoQVQ5MV9UQ19DTEsxQkFTRSArIEFUOTFfVENfQ0NSLCAoQVQ5MV9UQ19TV1RSRyB8IEFUOTFfVENfQ0xLRU4pKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC0xYXJtLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtMWFybS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjZkYmNjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC0xYXJtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLTFhcm0uYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBvbmVhcm1faW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBvbmVhcm1fZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBvbmVhcm1fdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAxLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBvbmVhcm1fdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEMyLAotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEMzLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG9uZWFybV9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEgKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQkgICB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfCBBVE1FTF9VQVJUX0RDRAotCQkJICAgfCBBVE1FTF9VQVJUX1JJKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZvbmVhcm1fZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJm9uZWFybV91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZvbmVhcm1fdWRjX2RhdGEpOwotfQotCi1NQUNISU5FX1NUQVJUKE9ORUFSTSwgIkFqZWNvIDFBUk0gc2luZ2xlIGJvYXJkIGNvbXB1dGVyIikKLQkvKiBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gb25lYXJtX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBvbmVhcm1fYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hZmViLTkyNjB2MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzZlMzVjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hZmViLTkyNjB2MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbAotICogIENvcHlyaWdodCAoQykgMjAwOCBTZXJnZXkgTGFwaW4KLSAqCi0gKiBBIGN1c3RvbSBib2FyZCBkZXNpZ25lZCBhcyBvcGVuIGhhcmR3YXJlOyBQQ0JzIGFuZCB2YXJpb3VzIGluZm9ybWF0aW9uCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FybTlmcGdhLWV2b2x1dGlvbi1ib2FyZC8KLSAqIFN1YnZlcnNpb24gcmVwb3NpdG9yeTogc3ZuOi8vMTk0Ljg1LjIzOC4yMi9ob21lL3VzZXJzL2dlb3JnZS9zdm4vYXJtOWViCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBhZmViOTI2MF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSG9zdCBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBhZmViOTI2MF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgYWZlYjkyNjBfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBhZmViOTI2MF9zcGlfZGV2aWNlc1tdID0gewotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAxLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi19OwotCi0KLS8qCi0gKiBNQUNCIEV0aGVybmV0IGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGFmZWI5MjYwX21hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQTksCi0JLmlzX3JtaWkJPSAwLAotfTsKLQotCi0vKgotICogTkFORCBmbGFzaAotICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBhZmViOTI2MF9uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAiYm9vdGxvYWRlciIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9ICg2NDAgKiBTWl8xSyksCi0JfSwKLQl7Ci0JCS5uYW1lCT0gImtlcm5lbCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gU1pfMk0sCi0JfSwKLQl7Ci0JCS5uYW1lCT0gInJvb3RmcyIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBhZmViOTI2MF9uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmJ1c193aWR0aF8xNgk9IDAsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkucGFydHMJCT0gYWZlYjkyNjBfbmFuZF9wYXJ0aXRpb24sCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoYWZlYjkyNjBfbmFuZF9wYXJ0aXRpb24pLAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLX07Ci0KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgYWZlYjkyNjBfbWNpMF9kYXRhID0gewotCS5zbG90WzFdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQzksCi0JCS53cF9waW4JCT0gQVQ5MV9QSU5fUEM0LAotCX0sCi19OwotCi0KLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGFmZWI5MjYwX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMjMiLCAweDFhKSwKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCJmbTMxMzAiLCAweDY4KSwKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCIyNGM2NCIsIDB4NTApLAotCX0sCi19OwotCi0vKgotICogSURFIChDRiBUcnVlIElERSBtb2RlKQotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBhZmViOTI2MF9jZl9kYXRhID0gewotCS5jaGlwc2VsZWN0ID0gNCwKLQkuaXJxX3BpbiAgICA9IEFUOTFfUElOX1BBNiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnZjY19waW4JPSAtRUlOVkFMLAotCS5yc3RfcGluICAgID0gQVQ5MV9QSU5fUEE3LAotCS5mbGFncyAgICAgID0gQVQ5MV9DRl9UUlVFX0lERSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhZmViOTI2MF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsCi0JCQkgICAgIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUgotCQkJICAgfCBBVE1FTF9VQVJUX0RDRCB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLAotCQkJQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmFmZWI5MjYwX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmFmZWI5MjYwX3VkY19kYXRhKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGFmZWI5MjYwX3NwaV9kZXZpY2VzLAotCQkJQVJSQVlfU0laRShhZmViOTI2MF9zcGlfZGV2aWNlcykpOwotCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmYWZlYjkyNjBfbmFuZF9kYXRhKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmFmZWI5MjYwX21hY2JfZGF0YSk7Ci0KLQkvKiBTdGFuZGFyZCBmdW5jdGlvbidzIHBpbiBhc3NpZ25tZW50cyBhcmUgbm90Ci0JICogYXBwcm9wcmlhdGUgZm9yIHVzIGFuZCBnZW5lcmljIGNvZGUgcHJvdmlkZQotCSAqIG5vIEFQSSB0byBjb25maWd1cmUgdGhlc2UgcGlucyBhbnkgb3RoZXIgd2F5ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMCk7CS8qIEVUWDIgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTExLCAwKTsJLyogRVRYMyAqLwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmFmZWI5MjYwX21jaTBfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhhZmViOTI2MF9pMmNfZGV2aWNlcywKLQkJCUFSUkFZX1NJWkUoYWZlYjkyNjBfaTJjX2RldmljZXMpKTsKLQkvKiBBdWRpbyAqLwotCWF0OTFfYWRkX2RldmljZV9zc2MoQVQ5MVNBTTkyNjBfSURfU1NDLCBBVE1FTF9TU0NfVFgpOwotCS8qIElERSAqLwotCWF0OTFfYWRkX2RldmljZV9jZigmYWZlYjkyNjBfY2ZfZGF0YSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQUZFQjkyNjAsICJDdXN0b20gYWZlYjkyNjAgYm9hcmQiKQotCS8qIE1haW50YWluZXI6IFNlcmdleSBMYXBpbiA8c2xhcGluQG9zc2ZhbnMub3JnPiAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGFmZWI5MjYwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBhZmViOTI2MF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FtNjAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU4MjdkZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FtNjAuYworKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogS3dpa0J5dGUgQ0FNNjAgKEtCOTI2MCkKLSAqCi0gKiBiYXNlZCBvbiBib2FyZC1zYW05MjYwZWsuYwotICogICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICogICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjYW02MF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEwIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDEwMDAwMDAwKTsKLX0KLQotLyoKLSAqIFVTQiBIb3N0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBjYW02MF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLQotLyoKLSAqIFNQSSBkZXZpY2VzLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSCkKLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjYW02MF9zcGlfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJPSAiQk9PVDEiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSA0ICogMTA1NiwKLQl9LAotCXsKLQkJLm5hbWUJPSAiQk9PVDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IDI1NiAqIDEwNTYsCi0JfSwKLQl7Ci0JCS5uYW1lCT0gImtlcm5lbCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gMjIyMiAqIDEwNTYsCi0JfSwKLQl7Ci0JCS5uYW1lCT0gImZpbGUgc3lzdGVtIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgY2FtNjBfc3BpX2ZsYXNoX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUJCT0gInNwaV9mbGFzaCIsCi0JLnBhcnRzCQk9IGNhbTYwX3NwaV9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY2FtNjBfc3BpX3BhcnRpdGlvbnMpCi19OwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY2FtNjBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpCi0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNhbTYwX3NwaV9mbGFzaF9wbGF0Zm9ybV9kYXRhCi0JfSwKLSNlbmRpZgotfTsKLQotCi0vKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgY2FtNjBfbWFjYl9kYXRhIF9faW5pdGRhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEI1LAotCS5pc19ybWlpCT0gMCwKLX07Ci0KLQotLyoKLSAqIE5BTkQgRmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgY2FtNjBfbmFuZF9wYXJ0aXRpb25bXSA9IHsKLQl7Ci0JCS5uYW1lCT0gIm5hbmRfZnMiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIGNhbTYwX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIxLAotCS5jbGUJCT0gMjIsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEE5LAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEE3LAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi0JLnBhcnRzCQk9IGNhbTYwX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGNhbTYwX25hbmRfcGFydGl0aW9uKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY2FtNjBfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMSwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDEsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gMywKLQkubnJkX3B1bHNlCQk9IDMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDMsCi0JLm53ZV9wdWxzZQkJPSAzLAotCi0JLnJlYWRfY3ljbGUJCT0gNSwKLQkud3JpdGVfY3ljbGUJCT0gNSwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNhbTYwX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCAzLCAmY2FtNjBfbmFuZF9zbWNfY29uZmlnKTsKLQotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZjYW02MF9uYW5kX2RhdGEpOwotfQotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjYW02MF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShjYW02MF9zcGlfZGV2aWNlcywgQVJSQVlfU0laRShjYW02MF9zcGlfZGV2aWNlcykpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY2FtNjBfbWFjYl9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCS8qIGVuYWJsZSBVU0IgcG93ZXIgc3VwcGx5IGNpcmN1aXQgKi8KLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQjE4LCAxKTsKLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY2FtNjBfdXNiaF9kYXRhKTsKLQkvKiBOQU5EICovCi0JY2FtNjBfYWRkX2RldmljZV9uYW5kKCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQ0FNNjAsICJLd2lrQnl0ZSBDQU02MCIpCi0JLyogTWFpbnRhaW5lcjogS3dpa0J5dGUgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBjYW02MF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gY2FtNjBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDczMTNkMy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwNSBQZWVyIEdlb3JnaQotICogIAkJICAgICAgIENvbml0ZWMgRGF0YXN5c3RlbXMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2FybWV2YV9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDIwLjAwMCBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgyMDAwMDAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY2FybWV2YV9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzQsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGNhcm1ldmFfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBjYXJtZXZhX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BEMTIsCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QRDksCi19OwotCi0vKiBGSVhNRTogdXNlciBkZXBlbmRlbnQgKi8KLS8vIHN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIF9faW5pdGRhdGEgY2FybWV2YV9jZl9kYXRhID0gewotLy8JLmRldF9waW4JPSBBVDkxX1BJTl9QQjAsCi0vLwkucnN0X3Bpbgk9IEFUOTFfUElOX1BDNSwKLQkvLyAuaXJxX3Bpbgk9IC1FSU5WQUwsCi0JLy8gLnZjY19waW4JPSAtRUlOVkFMLAotLy8gfTsKLQotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGNhcm1ldmFfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQjEwLAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BDMTQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY2FybWV2YV9zcGlfZGV2aWNlc1tdID0gewotCXsgLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzID0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QgID0gMCwKLQkJLm1heF9zcGVlZF9oeiA9IDEwICogMTAwMCAqIDEwMDAsCi0JfSwKLQl7IC8qIFVzZXIgYWNjZXNzaWJsZSBzcGkgLSBjczEgKDI1MEtIeikgKi8KLQkJLm1vZGFsaWFzID0gInNwaS1jczEiLAotCQkuY2hpcF9zZWxlY3QgID0gMSwKLQkJLm1heF9zcGVlZF9oeiA9IDI1MCAqICAxMDAwLAotCX0sCi0JeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpIC0gY3MyICgxTUh6KSAqLwotCQkubW9kYWxpYXMgPSAic3BpLWNzMiIsCi0JCS5jaGlwX3NlbGVjdCAgPSAyLAotCQkubWF4X3NwZWVkX2h6ID0gMSAqIDEwMDAgKiAgMTAwMCwKLQl9LAotCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaSAtIGNzMyAoMTBNSHopICovCi0JCS5tb2RhbGlhcyA9ICJzcGktY3MzIiwKLQkJLmNoaXBfc2VsZWN0ICA9IDMsCi0JCS5tYXhfc3BlZWRfaHogPSAxMCAqIDEwMDAgKiAgMTAwMCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjYXJtZXZhX2xlZHNbXSA9IHsKLQl7IC8qICJ1c2VyIGxlZCAxIiwgTEVEOSAqLwotCQkubmFtZQkJCT0gImxlZDkiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEEyMSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JeyAvKiAidXNlciBsZWQgMiIsIExFRDEwICovCi0JCS5uYW1lCQkJPSAibGVkMTAiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEEyNSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQl9LAotCXsgLyogInVzZXIgbGVkIDMiLCBMRUQxMSAqLwotCQkubmFtZQkJCT0gImxlZDExIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMjYsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JfSwKLQl7IC8qICJ1c2VyIGxlZCA0IiwgTEVEMTIgKi8KLQkJLm5hbWUJCQk9ICJsZWQxMiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTE4LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjYXJtZXZhX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJICAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCSAgIHwgQVRNRUxfVUFSVF9SSSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY2FybWV2YV9ldGhfZGF0YSk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY2FybWV2YV91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjYXJtZXZhX3VkY19kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoY2FybWV2YV9zcGlfZGV2aWNlcywgQVJSQVlfU0laRShjYXJtZXZhX3NwaV9kZXZpY2VzKSk7Ci0JLyogQ29tcGFjdCBGbGFzaCAqLwotLy8JYXQ5MV9hZGRfZGV2aWNlX2NmKCZjYXJtZXZhX2NmX2RhdGEpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmNhcm1ldmFfbWNpMF9kYXRhKTsKLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoY2FybWV2YV9sZWRzLCBBUlJBWV9TSVpFKGNhcm1ldmFfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKENBUk1FVkEsICJDYXJtZXZhIikKLQkvKiBNYWludGFpbmVyOiBDb25pdGVjIERhdGFzeXN0ZW1zICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGNhcm1ldmFfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGNhcm1ldmFfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHU5a3JlYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzFjODMxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHU5a3JlYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzg2ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbAotICogIENvcHlyaWdodCAoQykgMjAwOSBFcmljIEJlbmFyZCAtIGVyaWNAZXVrcmVhLmNvbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYwX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9tYXRyaXguaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjcHU5a3JlYV9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSG9zdCBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY3B1OWtyZWFfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM4LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3B1OWtyZWFfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IC1FSU5WQUwsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotLyoKLSAqIE5BTkQgZmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmJ1c193aWR0aF8xNgk9IDAsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi19OwotCi0jaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9uYW5kX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAxLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAotCS5ucmRfcHVsc2UJCT0gMywKLQkubmNzX3dyaXRlX3B1bHNlCT0gMywKLQkubndlX3B1bHNlCQk9IDMsCi0KLQkucmVhZF9jeWNsZQkJPSA1LAotCS53cml0ZV9jeWNsZQkJPSA1LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCXwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0RCV184LAotCS50ZGZfY3ljbGVzCQk9IDIsCi19OwotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY3B1OWtyZWFfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMiwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDIsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gNCwKLQkubnJkX3B1bHNlCQk9IDQsCi0JLm5jc193cml0ZV9wdWxzZQk9IDQsCi0JLm53ZV9wdWxzZQkJPSA0LAotCi0JLnJlYWRfY3ljbGUJCT0gNywKLQkud3JpdGVfY3ljbGUJCT0gNywKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERQotCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKLQkudGRmX2N5Y2xlcwkJPSAzLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9uYW5kKHZvaWQpCi17Ci0Jc2FtOV9zbWNfY29uZmlndXJlKDAsIDMsICZjcHU5a3JlYV9uYW5kX3NtY19jb25maWcpOwotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZjcHU5a3JlYV9uYW5kX2RhdGEpOwotfQotCi0vKgotICogTk9SIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNwdWF0OTI2MF9ub3JfZGF0YSA9IHsKLQkud2lkdGgJCT0gMiwKLX07Ci0KLSNkZWZpbmUgTk9SX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKLSNkZWZpbmUgTk9SX1NJWkUJU1pfNjRNCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTk9SX0JBU0UsCi0JCS5lbmQJPSBOT1JfQkFTRSArIE5PUl9TSVpFIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3B1OWtyZWFfbm9yX2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY3B1YXQ5MjYwX25vcl9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbm9yX2ZsYXNoX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3Jlc291cmNlcyksCi19OwotCi0jaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9ub3Jfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDEwLAotCS5ucmRfcHVsc2UJCT0gMTAsCi0JLm5jc193cml0ZV9wdWxzZQk9IDYsCi0JLm53ZV9wdWxzZQkJPSA2LAotCi0JLnJlYWRfY3ljbGUJCT0gMTIsCi0JLndyaXRlX2N5Y2xlCQk9IDgsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUKLQkJCXwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0JBVF9XUklURQotCQkJfCBBVDkxX1NNQ19EQldfMTYsCi0JLnRkZl9jeWNsZXMJCT0gMiwKLX07Ci0jZWxzZQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9ub3Jfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDEzLAotCS5ucmRfcHVsc2UJCT0gMTMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDgsCi0JLm53ZV9wdWxzZQkJPSA4LAotCi0JLnJlYWRfY3ljbGUJCT0gMTUsCi0JLndyaXRlX2N5Y2xlCQk9IDEwLAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUKLQkJCXwgQVQ5MV9TTUNfREJXXzE2LAotCS50ZGZfY3ljbGVzCQk9IDIsCi19OwotI2VuZGlmCi0KLXN0YXRpYyBfX2luaXQgdm9pZCBjcHU5a3JlYV9hZGRfZGV2aWNlX25vcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3NhOwotCi0JY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOwotCWF0OTFfbWF0cml4X3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfVkRESU9NU0VMXzNfM1YpOwotCi0JLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDAgKE5PUikgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMCwgJmNwdTlrcmVhX25vcl9zbWNfY29uZmlnKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3B1OWtyZWFfbm9yX2ZsYXNoKTsKLX0KLQotLyoKLSAqIExFRHMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjcHU5a3JlYV9sZWRzW10gPSB7Ci0JewkvKiBMRUQxICovCi0JCS5uYW1lCQkJPSAiTEVEMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzExLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gInRpbWVyIiwKLQl9LAotCXsJLyogTEVEMiAqLwotCQkubmFtZQkJCT0gIkxFRDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxMiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiBMRUQzICovCi0JCS5uYW1lCQkJPSAiTEVEMyIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzcsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwKLQl7CS8qIExFRDQgKi8KLQkJLm5hbWUJCQk9ICJMRUQ0IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BDOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgY3B1OWtyZWFfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJkczEzMzkiLCAweDY4KSwKLQl9LAotfTsKLQotLyoKLSAqIEdQSU8gQnV0dG9ucwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gY3B1OWtyZWFfYnV0dG9uc1tdID0gewotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEMzLAotCQkuY29kZQkJPSBCVE5fMCwKLQkJLmRlc2MJCT0gIkJQMSIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjIwLAotCQkuY29kZQkJPSBCVE5fMSwKLQkJLmRlc2MJCT0gIkJQMiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgY3B1OWtyZWFfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBjcHU5a3JlYV9idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoY3B1OWtyZWFfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjcHU5a3JlYV9idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNwdTlrcmVhX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjcHU5a3JlYV9hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BDMywgMSk7CS8qIEJQMSAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BDMywgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjIwLCAxKTsJLyogQlAyICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEIyMCwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNwdTlrcmVhX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBjcHU5a3JlYV9hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLX0KLSNlbmRpZgotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BBMjksCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNwdTlrcmVhX2JvYXJkX2luaXQodm9pZCkKLXsKLQlhdDkxX3JlZ2lzdGVyX2RldmljZXMoKTsKLQotCS8qIE5PUiAqLwotCWNwdTlrcmVhX2FkZF9kZXZpY2Vfbm9yKCk7Ci0JLyogU2VyaWFsICovCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8Ci0JCUFUTUVMX1VBUlRfUlRTIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8Ci0JCUFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzIuIChSeCwgVHgsIFJUUywgQ1RTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTIHwKLQkJQVRNRUxfVUFSVF9SVFMpOwotCi0JLyogVVNBUlQyIG9uIHR0eVMzLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMyLCAzLCBBVE1FTF9VQVJUX0NUUyB8Ci0JCUFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMyBvbiB0dHlTNC4gKFJ4LCBUeCkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMzLCA0LCAwKTsKLQotCS8qIFVTQVJUNCBvbiB0dHlTNS4gKFJ4LCBUeCkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM0LCA1LCAwKTsKLQotCS8qIFVTQVJUNSBvbiB0dHlTNi4gKFJ4LCBUeCkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM1LCA2LCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY3B1OWtyZWFfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmY3B1OWtyZWFfdWRjX2RhdGEpOwotCS8qIE5BTkQgKi8KLQljcHU5a3JlYV9hZGRfZGV2aWNlX25hbmQoKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmNwdTlrcmVhX21hY2JfZGF0YSk7Ci0JLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmY3B1OWtyZWFfbWNpMF9kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGNwdTlrcmVhX2kyY19kZXZpY2VzLAotCQlBUlJBWV9TSVpFKGNwdTlrcmVhX2kyY19kZXZpY2VzKSk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGNwdTlrcmVhX2xlZHMsIEFSUkFZX1NJWkUoY3B1OWtyZWFfbGVkcykpOwotCS8qIFB1c2ggQnV0dG9ucyAqLwotCWNwdTlrcmVhX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotfQotCi0jaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAotTUFDSElORV9TVEFSVChDUFVBVDkyNjAsICJFdWtyZWEgQ1BVOTI2MCIpCi0jZWxzZQotTUFDSElORV9TVEFSVChDUFVBVDlHMjAsICJFdWtyZWEgQ1BVOUcyMCIpCi0jZW5kaWYKLQkvKiBNYWludGFpbmVyOiBFcmljIEJlbmFyZCAtIEVVS1JFQSBFbGVjdHJvbWF0aXF1ZSAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGNwdTlrcmVhX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBjcHU5a3JlYV9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1YXQ5MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDk0MzUwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjcHVhdDkxX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQkJPSAibGVkMSIsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BDMCwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNwdWF0OTFfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBjcHVhdDkxX2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IC1FSU5WQUwsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAxLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBjcHVhdDkxX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDMTUsCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QQzE0LAotfTsKLQotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQzIsCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgY3B1YXQ5MV9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjcHVhdDkxX2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydAkJPSBBVDkxX0NISVBTRUxFQ1RfMCwKLQkuZW5kCQk9IEFUOTFfQ0hJUFNFTEVDVF8wICsgU1pfMTZNIC0gMSwKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjcHVhdDkxX25vcmZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZjcHVhdDkxX2ZsYXNoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSAmY3B1YXQ5MV9mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi19OwotCi0jaWZkZWYgQ09ORklHX01URF9QTEFUUkFNCi1zdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBhdDkxX3NyYW1fcGRhdGEgPSB7Ci0JLm1hcG5hbWUJPSAiU1JBTSIsCi0JLmJhbmt3aWR0aAk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGF0OTFfc3JhbV9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gQVQ5MVJNOTIwMF9TUkFNX0JBU0UsCi0JCS5lbmQgICA9IEFUOTFSTTkyMDBfU1JBTV9CQVNFICsgQVQ5MVJNOTIwMF9TUkFNX1NJWkUgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9zcmFtID0gewotCS5uYW1lCQk9ICJtdGQtcmFtIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSBhdDkxX3NyYW1fcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF0OTFfc3JhbV9yZXNvdXJjZSksCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmYXQ5MV9zcmFtX3BkYXRhLAotCX0sCi19OwotI2VuZGlmIC8qIE1URF9QTEFUUkFNICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmY3B1YXQ5MV9ub3JmbGFzaCwKLSNpZmRlZiBDT05GSUdfTVREX1BMQVRSQU0KLQkmYXQ5MV9zcmFtLAotI2VuZGlmIC8qIENPTkZJR19NVERfUExBVFJBTSAqLwotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNwdWF0OTFfYm9hcmRfaW5pdCh2b2lkKQotewotCS8qIFNlcmlhbCAqLwotCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCi0JLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwKLQkJQVRNRUxfVUFSVF9SVFMpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8Ci0JCUFUTUVMX1VBUlRfUlRTIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8Ci0JCUFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDIgb24gdHR5UzMgKFJ4LCBUeCkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzIsIDMsIDApOwotCi0JLyogVVNBUlQzIG9uIHR0eVM0IChSeCwgVHgsIENUUywgUlRTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMywgNCwgQVRNRUxfVUFSVF9DVFMgfAotCQlBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIExFRHMuICovCi0JYXQ5MV9ncGlvX2xlZHMoY3B1YXQ5MV9sZWRzLCBBUlJBWV9TSVpFKGNwdWF0OTFfbGVkcykpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY3B1YXQ5MV9ldGhfZGF0YSk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY3B1YXQ5MV91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjcHVhdDkxX3VkY19kYXRhKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZjcHVhdDkxX21jaTBfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQkvKiBQbGF0Zm9ybSBkZXZpY2VzICovCi0JcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQ1BVQVQ5MSwgIkV1a3JlYSIpCi0JLyogTWFpbnRhaW5lcjogRXJpYyBCZW5hcmQgLSBFVUtSRUEgRWxlY3Ryb21hdGlxdWUgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gY3B1YXQ5MV9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gY3B1YXQ5MV9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUzNWE0NS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjc2IzMzdfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAzLjY4NjQgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMzY4NjQwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3NiMzM3X2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDMiwKLQkuaXNfcm1paQk9IDAsCi0JLyogVGhlIENTQjMzNyBib290bG9hZGVyIHN0b3JlcyB0aGUgTUFDIHRoZSB3cm9uZy13YXkgYXJvdW5kICovCi0JLnJldl9ldGhfYWRkcgk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgY3NiMzM3X3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY3NiMzM3X3VkY19kYXRhID0gewotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEEyNCwKLQkudmJ1c19waW4JPSAtRUlOVkFMLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGNzYjMzN19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oImRzMTMwNyIsIDB4NjgpLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBfX2luaXRkYXRhIGNzYjMzN19jZl9kYXRhID0gewotCS8qCi0JICogY29ubmVjdG9yIFA0IG9uIHRoZSBDU0IgMzM3IG1hdGVzIHRvCi0JICogY29ubmVjdG9yIFA4IG9uIHRoZSBDU0IgMzAwQ0YKLQkgKi8KLQotCS8qIENTQjMzNyBzcGVjaWZpYyAqLwotCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEMzLAotCi0JLyogQ1NCMzAwQ0Ygc3BlY2lmaWMgKi8KLQkuaXJxX3Bpbgk9IEFUOTFfUElOX1BBMTksCi0JLnZjY19waW4JPSBBVDkxX1BJTl9QRDAsCi0JLnJzdF9waW4JPSBBVDkxX1BJTl9QRDIsCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3NiMzM3X21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEQ1LAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BENiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBjc2IzMzdfc3BpX2RldmljZXNbXSA9IHsKLQl7CS8qIENBTiBjb250cm9sbGVyICovCi0JCS5tb2RhbGlhcwk9ICJzYWs4MmM5MDAiLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gNiAqIDEwMDAgKiAxMDAwLAotCX0sCi19OwotCi0jZGVmaW5lIENTQl9GTEFTSF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8wCi0jZGVmaW5lIENTQl9GTEFTSF9TSVpFCVNaXzhNCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjc2JfZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJCT0gInVNT04gZmxhc2giLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogcmVhZCBvbmx5ICovCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgY3NiX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDIsCi0JLnBhcnRzCQk9IGNzYl9mbGFzaF9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY3NiX2ZsYXNoX3BhcnRpdGlvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjc2JfZmxhc2hfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBDU0JfRkxBU0hfQkFTRSwKLQkJLmVuZAk9IENTQl9GTEFTSF9CQVNFICsgQ1NCX0ZMQVNIX1NJWkUgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2JfZmxhc2ggPSB7Ci0JLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhID0gJmNzYl9mbGFzaF9kYXRhLAotCQkJfSwKLQkucmVzb3VyY2UJPSBjc2JfZmxhc2hfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjc2JfZmxhc2hfcmVzb3VyY2VzKSwKLX07Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMgKG9uIENTQjMwMCkKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGNzYjMwMF9idXR0b25zW10gPSB7Ci0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjI5LAotCQkuY29kZQkJPSBCVE5fMCwKLQkJLmRlc2MJCT0gInN3MCIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjI4LAotCQkuY29kZQkJPSBCVE5fMSwKLQkJLmRlc2MJCT0gInN3MSIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTIxLAotCQkuY29kZQkJPSBCVE5fMiwKLQkJLmRlc2MJCT0gInN3MiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgY3NiMzAwX2J1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gY3NiMzAwX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShjc2IzMDBfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2IzMDBfYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZjc2IzMDBfYnV0dG9uX2RhdGEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNzYjMwMF9hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMjksIDEpOwkvKiBzdzAgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjI5LCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMjgsIDEpOwkvKiBzdzEgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjI4LCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMjEsIDEpOwkvKiBzdzIgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTIxLCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3NiMzAwX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBjc2IzMDBfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjc2JfbGVkc1tdID0gewotCXsJLyogImxlZDAiLCB5ZWxsb3cgKi8KLQkJLm5hbWUJCQk9ICJsZWQwIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiAibGVkMSIsIGdyZWVuICovCi0JCS5uYW1lCQkJPSAibGVkMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjEsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibW1jMCIsCi0JfSwKLQl7CS8qICJsZWQyIiwgeWVsbG93ICovCi0JCS5uYW1lCQkJPSAibGVkMiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaWRlLWRpc2siLAotCX0KLX07Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGNzYjMzN19ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMCAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZjc2IzMzdfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNzYjMzN191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjc2IzMzdfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoY3NiMzM3X2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGNzYjMzN19pMmNfZGV2aWNlcykpOwotCS8qIENvbXBhY3QgRmxhc2ggKi8KLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMjIsIDEpOwkJLyogSU9JUzE2ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2NmKCZjc2IzMzdfY2ZfZGF0YSk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShjc2IzMzdfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoY3NiMzM3X3NwaV9kZXZpY2VzKSk7Ci0JLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmY3NiMzM3X21jaTBfZGF0YSk7Ci0JLyogTk9SIGZsYXNoICovCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjc2JfZmxhc2gpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhjc2JfbGVkcywgQVJSQVlfU0laRShjc2JfbGVkcykpOwotCS8qIFN3aXRjaGVzIG9uIENTQjMwMCAqLwotCWNzYjMwMF9hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLX0KLQotTUFDSElORV9TVEFSVChDU0IzMzcsICJDb2dlbnQgQ1NCMzM3IikKLQkvKiBNYWludGFpbmVyOiBCaWxsIEdhdGxpZmYgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gY3NiMzM3X2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBjc2IzMzdfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiNjM3LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiNjM3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZDAyN2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNzYjYzNy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiNjM3LmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjc2I2MzdfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAzLjY4NjQgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMzY4NjQwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3NiNjM3X2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDMCwKLQkuaXNfcm1paQk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgY3NiNjM3X3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY3NiNjM3X3VkY19kYXRhID0gewotCS52YnVzX3BpbiAgICAgPSBBVDkxX1BJTl9QQjI4LAotCS5wdWxsdXBfcGluICAgPSBBVDkxX1BJTl9QQjEsCi19OwotCi0jZGVmaW5lIENTQl9GTEFTSF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8wCi0jZGVmaW5lIENTQl9GTEFTSF9TSVpFCVNaXzE2TQotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY3NiX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJ1TU9OIGZsYXNoIiwKLQkJLm9mZnNldAkJPSAwLAotCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIHJlYWQgb25seSAqLwotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNzYl9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAyLAotCS5wYXJ0cwkJPSBjc2JfZmxhc2hfcGFydGl0aW9ucywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGNzYl9mbGFzaF9wYXJ0aXRpb25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3NiX2ZsYXNoX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQ1NCX0ZMQVNIX0JBU0UsCi0JCS5lbmQJPSBDU0JfRkxBU0hfQkFTRSArIENTQl9GTEFTSF9TSVpFIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3NiX2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YSA9ICZjc2JfZmxhc2hfZGF0YSwKLQkJCX0sCi0JLnJlc291cmNlCT0gY3NiX2ZsYXNoX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NiX2ZsYXNoX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNzYl9sZWRzW10gPSB7Ci0JewkvKiAiZDEiLCByZWQgKi8KLQkJLm5hbWUJCQk9ICJkMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjIsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNzYjYzN19ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogTEVEKHMpICovCi0JYXQ5MV9ncGlvX2xlZHMoY3NiX2xlZHMsIEFSUkFZX1NJWkUoY3NiX2xlZHMpKTsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZjc2I2MzdfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNzYjYzN191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjc2I2MzdfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKLQkvKiBOT1IgZmxhc2ggKi8KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNzYl9mbGFzaCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQ1NCNjM3LCAiQ29nZW50IENTQjYzNyIpCi0JLyogTWFpbnRhaW5lcjogQmlsbCBHYXRsaWZmICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGNzYjYzN19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gY3NiNjM3X2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXJtOTIwMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXJtOTIwMC5jCmluZGV4IDIyNjU2M2YuLjc2ZGZlOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1ybTkyMDAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtcm05MjAwLmMKQEAgLTIyLDE0ICsyMiwxMSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhdDkxcm05MjAwX2R0X3RpbWVyX2luaXQodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19DT01NT05fQ0xLKQogCW9mX2Nsa19pbml0KE5VTEwpOwotI2VuZGlmCiAJYXQ5MXJtOTIwMF90aW1lcl9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW05LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtc2FtOS5jCmluZGV4IGQzMDQ4Y2MuLmY5OTI0NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW05LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbTkuYwpAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKmF0OTFfZHRfYm9hcmRfY29tcGF0W10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW1hNS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMKaW5kZXggMTI5ZTI5MS4uOGZiOWVmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2FtYTVfZHRfZGV2aWNlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWNmMGE2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWViMDEuYwotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNywgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MWViMDFfaW5pdF9pcnEodm9pZCkKLXsKLQlhdDkxeDQwX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFlYjAxX2luaXRfZWFybHkodm9pZCkKLXsKLQlhdDkxeDQwX2luaXRpYWxpemUoNDAwMDAwMDApOwotfQotCi1NQUNISU5FX1NUQVJUKEFUOTFFQjAxLCAiQXRtZWwgQVQ5MSBFQjAxIikKLQkvKiBNYWludGFpbmVyOiBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPiAqLwotCS5pbml0X3RpbWUJPSBhdDkxeDQwX3RpbWVyX2luaXQsCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gYXQ5MWViMDFfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxZWIwMV9pbml0X2lycSwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjkyMDAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjkyMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0NTdhOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWI5MjAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjkyMDAuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZSwgYWRhcHRlZCBmb3IgQVRFQjkyMDAgZnJvbSBFbWJlc3QKLSAqICBieSBBbmRyZXcgUGF0cmlrYWxha2lzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBlYjkyMDBfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGViOTIwMF9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzQsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGViOTIwMF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGViOTIwMF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QRDQsCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QRDUsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBfX2luaXRkYXRhIGViOTIwMF9jZl9kYXRhID0gewotCS5pcnFfcGluCT0gLUVJTlZBTCwKLQkuZGV0X3Bpbgk9IEFUOTFfUElOX1BCMCwKLQkudmNjX3Bpbgk9IC1FSU5WQUwsCi0JLnJzdF9waW4JPSBBVDkxX1BJTl9QQzUsCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWI5MjAwX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gLUVJTlZBTCwKLQkJLndwX3BpbgkJPSAtRUlOVkFMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWI5MjAwX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygiMjRjNTEyIiwgMHg1MCksCi0JfSwKLX07Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGViOTIwMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzEsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCXwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8IEFUTUVMX1VBUlRfRENECi0JCQl8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQyIG9uIHR0eVMyLiAoUngsIFR4KSAtIElSREEgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzIsIDIsIDApOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmViOTIwMF9ldGhfZGF0YSk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWI5MjAwX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmViOTIwMF91ZGNfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhlYjkyMDBfaTJjX2RldmljZXMsIEFSUkFZX1NJWkUoZWI5MjAwX2kyY19kZXZpY2VzKSk7Ci0JLyogQ29tcGFjdCBGbGFzaCAqLwotCWF0OTFfYWRkX2RldmljZV9jZigmZWI5MjAwX2NmX2RhdGEpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoTlVMTCwgMCk7Ci0JLyogTU1DICovCi0JLyogb25seSBzdXBwb3J0cyAxIG9yIDQgYml0IGludGVyZmFjZSwgbm90IHdpcmVkIHRocm91Z2ggdG8gU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWI5MjAwX21jaTBfZGF0YSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQVRFQjkyMDAsICJFbWJlc3QgQVRFQjkyMDAiKQotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBlYjkyMDBfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGViOTIwMF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY2JhdDkxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNiYXQ5MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGUxMzczYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNiYXQ5MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWNiYXQ5MS5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgZW1RYml0LmNvbS4KLSAqCi0gKiBXZSBzdGFydGVkIGZyb20gYm9hcmQtZGsuYywgd2hpY2ggaXMgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IGVjYl9hdDkxaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlY2JfYXQ5MWV0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDNCwKLQkuaXNfcm1paQk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZWNiX2F0OTF1c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlY2JhdDkxX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gLUVJTlZBTCwKLQkJLndwX3BpbgkJPSAtRUlOVkFMLAotCX0sCi19OwotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfREFUQUZMQVNIKQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgbXlfZmxhc2gwX3BhcnRpdGlvbnNbXSA9Ci17Ci0JewkvKiAweDg0MDAgKi8KLQkJLm5hbWUJPSAiRGFycmVsbC1sb2FkZXIiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSAxMiAqIDEwNTYsCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIlUtYm9vdCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gMTEwICogMTA1NiwKLQl9LAotCXsJLyogMTMzNiAoMTY3IGJsb2NrcykgcGFnZXMgKiAxMDU2IGJ5dGVzID0gMHgxNTg3MDAgYnl0ZXMgKi8KLQkJLm5hbWUJPSAiVUJvb3QtZW52IiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSA4ICogMTA1NiwKLQl9LAotCXsJLyogMTMzNiAoMTY3IGJsb2NrcykgcGFnZXMgKiAxMDU2IGJ5dGVzID0gMHgxNTg3MDAgYnl0ZXMgKi8KLQkJLm5hbWUJPSAiS2VybmVsIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSAxNTM0ICogMTA1NiwKLQl9LAotCXsJLyogMTkwMjAwIC0gamZmczIgcm9vdCBmaWxlc3lzdGVtICovCi0JCS5uYW1lCT0gIkZpbGVzeXN0ZW0iLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCS8qIDI2IHNlY3RvcnMgKi8KLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBteV9mbGFzaDBfcGxhdGZvcm0gPSB7Ci0JLm5hbWUJCT0gIlJlbW92YWJsZSBmbGFzaCBjYXJkIiwKLQkucGFydHMJCT0gbXlfZmxhc2gwX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShteV9mbGFzaDBfcGFydGl0aW9ucykKLX07Ci0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWNiX2F0OTFzcGlfZGV2aWNlc1tdID0gewotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpCi0JCS5wbGF0Zm9ybV9kYXRhCT0gJm15X2ZsYXNoMF9wbGF0Zm9ybSwKLSNlbmRpZgotCX0sCi0JewkvKiBVc2VyIGFjY2Vzc2libGUgc3BpIC0gY3MxICgyNTBLSHopICovCi0JCS5tb2RhbGlhcwk9ICJzcGktY3MxIiwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDI1MCAqIDEwMDAsCi0JfSwKLQl7CS8qIFVzZXIgYWNjZXNzaWJsZSBzcGkgLSBjczIgKDFNSHopICovCi0JCS5tb2RhbGlhcwk9ICJzcGktY3MyIiwKLQkJLmNoaXBfc2VsZWN0CT0gMiwKLQkJLm1heF9zcGVlZF9oegk9IDEgKiAxMDAwICogMTAwMCwKLQl9LAotCXsJLyogVXNlciBhY2Nlc3NpYmxlIHNwaSAtIGNzMyAoMTBNSHopICovCi0JCS5tb2RhbGlhcwk9ICJzcGktY3MzIiwKLQkJLmNoaXBfc2VsZWN0CT0gMywKLQkJLm1heF9zcGVlZF9oegk9IDEwICogMTAwMCAqIDEwMDAsCi0JfSwKLX07Ci0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWNiX2xlZHNbXSA9IHsKLQl7CS8qIEQxICovCi0JCS5uYW1lCQkJPSAibGVkMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzcsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWNiX2F0OTFib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0KLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmVjYl9hdDkxZXRoX2RhdGEpOwotCi0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWNiX2F0OTF1c2JoX2RhdGEpOwotCi0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVjYmF0OTFfbWNpMF9kYXRhKTsKLQotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWNiX2F0OTFzcGlfZGV2aWNlcywgQVJSQVlfU0laRShlY2JfYXQ5MXNwaV9kZXZpY2VzKSk7Ci0KLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoZWNiX2xlZHMsIEFSUkFZX1NJWkUoZWNiX2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChFQ0JBVDkxLCAiZW1RYml0J3MgRUNCX0FUOTEiKQotCS8qIE1haW50YWluZXI6IGVtUWJpdC5jb20gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWNiX2F0OTFpbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWNiX2F0OTFib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY285MjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY285MjAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU3NTMyMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNvOTIwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9tYy5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9yYW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBlY285MjBfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVjbzkyMF9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzIsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVjbzkyMF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGVjbzkyMF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQjEyLAotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEIxMywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlY285MjBfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gMSwKLQkJLmRldGVjdF9waW4JPSAtRUlOVkFMLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVjbzkyMF9mbGFzaF9kYXRhID0gewotCS53aWR0aCAgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlY285MjBfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0ICAgICAgICAgID0gMHgxMTAwMDAwMCwKLQkuZW5kICAgICAgICAgICAgPSAweDExZmZmZmZmLAotCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWNvOTIwX2ZsYXNoID0gewotCS5uYW1lICAgICAgICAgICA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQgICAgICAgICAgICAgPSAwLAotCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgID0gJmVjbzkyMF9mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlICAgICAgID0gJmVjbzkyMF9mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcyAgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBlY285MjBfc3BpX2RldmljZXNbXSA9IHsKLQl7CS8qIENBTiBjb250cm9sbGVyICovCi0JCS5tb2RhbGlhcwk9ICJ0bHY1NjM4IiwKLQkJLmNoaXBfc2VsZWN0CT0gMywKLQkJLm1heF9zcGVlZF9oegk9IDIwICogMTAwMCAqIDEwMDAsCi0JCS5tb2RlCQk9IFNQSV9DUEhBLAotCX0sCi19OwotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVjbzkyMF9sZWRzW10gPSB7Ci0JeyAgICAgICAvKiBEMSAqLwotCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJsZWQxIiwKLQkJLmdwaW8gICAgICAgICAgICAgICAgICAgPSBBVDkxX1BJTl9QQjAsCi0JCS5hY3RpdmVfbG93ICAgICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlciAgICAgICAgPSAiaGVhcnRiZWF0IiwKLQl9LAotCXsgICAgICAgLyogRDIgKi8KLQkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibGVkMiIsCi0JCS5ncGlvICAgICAgICAgICAgICAgICAgID0gQVQ5MV9QSU5fUEIxLAotCQkuYWN0aXZlX2xvdyAgICAgICAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIgICAgICAgID0gInRpbWVyIiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWNvOTIwX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5ICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZlY285MjBfZXRoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZlY285MjBfdXNiaF9kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZlY285MjBfdWRjX2RhdGEpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWNvOTIwX21jaTBfZGF0YSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlY285MjBfZmxhc2gpOwotCi0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfU01DX0NTUig3KSwJQVQ5MV9TTUNfUldIT0xEXygxKQotCQkJCXwgQVQ5MV9TTUNfUldTRVRVUF8oMSkKLQkJCQl8IEFUOTFfU01DX0RCV184Ci0JCQkJfCBBVDkxX1NNQ19XU0VOCi0JCQkJfCBBVDkxX1NNQ19OV1NfKDE1KSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzYsIDEpOwotCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTIzLCAwKTsKLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTIzLCAxKTsKLQotLyogSW5pdGlhbGl6YXRpb24gb2YgdGhlIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciBmb3IgQ2hpcCBTZWxlY3QgMyAqLwotCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX1NNQ19DU1IoMyksCi0JCUFUOTFfU01DX0RCV18xNiAgfAkvKiAxNiBiaXQgKi8KLQkJQVQ5MV9TTUNfV1NFTiAgICB8Ci0JCUFUOTFfU01DX05XU18oNSkgfAkvKiB3YWl0IHN0YXRlcyAqLwotCQlBVDkxX1NNQ19UREZfKDEpCS8qIGZsb2F0IHRpbWUgKi8KLQkpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShlY285MjBfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWNvOTIwX3NwaV9kZXZpY2VzKSk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVjbzkyMF9sZWRzLCBBUlJBWV9TSVpFKGVjbzkyMF9sZWRzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoRUNPOTIwLCAiZWNvOTIwIikKLQkvKiBNYWludGFpbmVyOiBTYXNjaGEgSGF1ZXIgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWNvOTIwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBlY285MjBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YWE0YTIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWZsZXhpYml0eS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRmxleGliaXR5Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBmbGV4aWJpdHlfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi0vKiBVU0IgSG9zdCBwb3J0ICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZmxleGliaXR5X3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotLyogVVNCIERldmljZSBwb3J0ICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBmbGV4aWJpdHlfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotLyogSTJDIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBmbGV4aWJpdHlfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJkczEzMDciLCAweDY4KSwKLQl9LAotfTsKLQotLyogU1BJIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZmxleGliaXR5X3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDEsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLX07Ci0KLS8qIE1DSSAoU0QvTU1DKSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGZsZXhpYml0eV9tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BDOSwKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQzQsCi0JfSwKLX07Ci0KLS8qIExFRHMgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmxleGliaXR5X2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMTpncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTEyLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjE6cmVkIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMTMsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMjpncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjI2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjI6cmVkIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMjcsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMzpncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzgsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMzpyZWQiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjQ6Z3JlZW4iLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI0LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjQ6cmVkIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCNSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZmxleGliaXR5X2JvYXJkX2luaXQodm9pZCkKLXsKLQlhdDkxX3JlZ2lzdGVyX2RldmljZXMoKTsKLQotCS8qIFNlcmlhbCAqLwotCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZmbGV4aWJpdHlfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmZmxleGliaXR5X3VkY19kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGZsZXhpYml0eV9pMmNfZGV2aWNlcywKLQkJQVJSQVlfU0laRShmbGV4aWJpdHlfaTJjX2RldmljZXMpKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGZsZXhpYml0eV9zcGlfZGV2aWNlcywKLQkJQVJSQVlfU0laRShmbGV4aWJpdHlfc3BpX2RldmljZXMpKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZmbGV4aWJpdHlfbWNpMF9kYXRhKTsKLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoZmxleGliaXR5X2xlZHMsIEFSUkFZX1NJWkUoZmxleGliaXR5X2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChGTEVYSUJJVFksICJGbGV4aWJpdHkgQ29ubmVjdCIpCi0JLyogTWFpbnRhaW5lcjogTWF4aW0gT3NpcG92ICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZmxleGliaXR5X2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBmbGV4aWJpdHlfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZ3NpYTE4cy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWdzaWExOHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY1Y2M1NWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWdzaWExOHMuYworKysgL2Rldi9udWxsCkBAIC0xLDU4NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAxMCBDaHJpc3RpYW4gR2xpbmRrYW1wIDxjaHJpc3RpYW4uZ2xpbmRrYW1wQHRhc2tpdC5kZT4KLSAqICAgICAgICAgICAgICAgICAgICAgdGFza2l0IEdtYkgKLSAqICAgICAgICAgICAgICAgIDIwMTAgSWdvciBQbHlhdG92IDxwbHlhdG92QGdtYWlsLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgR2VvU0lHIEx0ZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3cxLWdwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvcGNmODU3eC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdzaWExOHMuaCIKLSNpbmNsdWRlICJzdGFtcDlnMjAuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2luaXRfZWFybHkodm9pZCkKLXsKLQlzdGFtcDlnMjBfaW5pdF9lYXJseSgpOwotfQotCi0vKgotICogVHdvIFVTQiBIb3N0IHBvcnRzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSB1c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEEyMiwKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLS8qCi0gKiBNQUNCIEV0aGVybmV0IGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQTI4LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLS8qCi0gKiBMRURzIGFuZCBHUE9zCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gImdwbzpzcGkxcmVzZXQiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxLAotCQkuYWN0aXZlX2xvdwkJPSAwLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JewotCQkubmFtZQkJCT0gImdwbzp0cmlnX25ldF9vdXQiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIyMCwKLQkJLmFjdGl2ZV9sb3cJCT0gMCwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsKLQkJLm5hbWUJCQk9ICJncG86dHJpZ19uZXRfZGlyIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTksCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAiZ3BvOmNoYXJnZV9kaXMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMyLAotCQkuYWN0aXZlX2xvdwkJPSAwLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JewotCQkubmFtZQkJCT0gImxlZDpldmVudCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE3LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JewotCQkubmFtZQkJCT0gImxlZDpsYW4iLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxOCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsKLQkJLm5hbWUJCQk9ICJsZWQ6ZXJyb3IiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxNiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09OLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBncGlvX2xlZF9pbmZvID0gewotCS5sZWRzCQk9IGdwaW9fbGVkcywKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGdwaW9fbGVkcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZWRzID0gewotCS5uYW1lCT0gImxlZHMtZ3BpbyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZncGlvX2xlZF9pbmZvLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2xlZHNfaW5pdCh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbGVkcyk7Ci19Ci0KLS8qIFBDRjg1NzQgMHgyMCBHUElPIC0gVTEgb24gdGhlIEdTX0lBMTgtQ0JfVjMgYm9hcmQgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcGNmX2dwaW9fbGVkczFbXSA9IHsKLQl7IC8qIGJpdCAwICovCi0JCS5uYW1lCQkJPSAiZ3BvOmhkY19wb3dlciIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19IRENfUE9XRVIsCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCAxICovCi0JCS5uYW1lCQkJPSAiZ3BvOndpZmlfc2V0dXAiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fV0lGSV9TRVRVUCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsgLyogYml0IDIgKi8KLQkJLm5hbWUJCQk9ICJncG86d2lmaV9lbmFibGUiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fV0lGSV9FTkFCTEUsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCAzCSovCi0JCS5uYW1lCQkJPSAiZ3BvOndpZmlfcmVzZXQiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fV0lGSV9SRVNFVCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09OLAotCX0sCi0JLyogYml0IDQgdXNlZCBhcyBHUEkJKi8KLQl7IC8qIGJpdCA1ICovCi0JCS5uYW1lCQkJPSAiZ3BvOmdwc19zZXR1cCIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19HUFNfU0VUVVAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCA2ICovCi0JCS5uYW1lCQkJPSAiZ3BvOmdwc19zdGFuZGJ5IiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX0dQU19TVEFOREJZLAotCQkuYWN0aXZlX2xvdwkJPSAwLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfSwKLQl7IC8qIGJpdCA3ICovCi0JCS5uYW1lCQkJPSAiZ3BvOmdwc19wb3dlciIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19HUFNfUE9XRVIsCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHBjZl9ncGlvX2xlZF9pbmZvMSA9IHsKLQkubGVkcwkJPSBwY2ZfZ3Bpb19sZWRzMSwKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHBjZl9ncGlvX2xlZHMxKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjZl9sZWRzMSA9IHsKLQkubmFtZQk9ICJsZWRzLWdwaW8iLCAvKiBHU19JQTE4LUNCX2JvYXJkICovCi0JLmlkCT0gMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZwY2ZfZ3Bpb19sZWRfaW5mbzEsCi0JfQotfTsKLQotLyogUENGODU3NCAweDIyIEdQSU8gLSBVMSBvbiB0aGUgR1NfMkdfT1BUMS1BX1YwIGJvYXJkIChBbGFybSkgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcGNmX2dwaW9fbGVkczJbXSA9IHsKLQl7IC8qIGJpdCAwICovCi0JCS5uYW1lCQkJPSAiZ3BvOmFsYXJtXzEiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fQUxBUk0xLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JeyAvKiBiaXQgMSAqLwotCQkubmFtZQkJCT0gImdwbzphbGFybV8yIiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX0FMQVJNMiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsgLyogYml0IDIgKi8KLQkJLm5hbWUJCQk9ICJncG86YWxhcm1fMyIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19BTEFSTTMsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCAzICovCi0JCS5uYW1lCQkJPSAiZ3BvOmFsYXJtXzQiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fQUxBUk00LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JLyogYml0cyA0LCA1LCA2IG5vdCB1c2VkICovCi0JeyAvKiBiaXQgNyAqLwotCQkubmFtZQkJCT0gImdwbzphbGFybV92X3JlbGF5X29uIiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX0FMQVJNX1ZfUkVMQVlfT04sCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBwY2ZfZ3Bpb19sZWRfaW5mbzIgPSB7Ci0JLmxlZHMJCT0gcGNmX2dwaW9fbGVkczIsCi0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShwY2ZfZ3Bpb19sZWRzMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY2ZfbGVkczIgPSB7Ci0JLm5hbWUJPSAibGVkcy1ncGlvIiwKLQkuaWQJPSAyLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnBjZl9ncGlvX2xlZF9pbmZvMiwKLQl9Ci19OwotCi0vKiBQQ0Y4NTc0IDB4MjQgR1BJTyBVMSBvbiB0aGUgR1NfMkctT1BUMjMtQV9WMCBib2FyZCAoTW9kZW0pICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHBjZl9ncGlvX2xlZHMzW10gPSB7Ci0JeyAvKiBiaXQgMCAqLwotCQkubmFtZQkJCT0gImdwbzptb2RlbV9wb3dlciIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19NT0RFTV9QT1dFUiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCQkvKiBiaXRzIDEgYW5kIDIgbm90IHVzZWQgKi8KLQl7IC8qIGJpdCAzICovCi0JCS5uYW1lCQkJPSAiZ3BvOm1vZGVtX3Jlc2V0IiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX01PREVNX1JFU0VULAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfSwKLQkJLyogYml0cyA0LCA1IGFuZCA2IG5vdCB1c2VkICovCi0JeyAvKiBiaXQgNyAqLwotCQkubmFtZQkJCT0gImdwbzp0cnhfcmVzZXQiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fVFJYX1JFU0VULAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHBjZl9ncGlvX2xlZF9pbmZvMyA9IHsKLQkubGVkcwkJPSBwY2ZfZ3Bpb19sZWRzMywKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHBjZl9ncGlvX2xlZHMzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjZl9sZWRzMyA9IHsKLQkubmFtZQk9ICJsZWRzLWdwaW8iLAotCS5pZAk9IDMsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmcGNmX2dwaW9fbGVkX2luZm8zLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX3BjZl9sZWRzX2luaXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjZl9sZWRzMSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2ZfbGVkczIpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNmX2xlZHMzKTsKLX0KLQotLyoKLSAqIFNQSSBidXNzZXMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZ3NpYTE4c19zcGlfZGV2aWNlc1tdID0gewotCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaTAsIGNzMCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggTVNQIFJUQyAqLwotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmJ1c19udW0JPSAwLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gNTgwMDAwLAotCQkubW9kZQkJPSBTUElfTU9ERV8xLAotCX0sCi0JeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpMSwgY3MwIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBpbnQuIERTUCAqLwotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmJ1c19udW0JPSAxLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gNTYwMDAwMCwKLQkJLm1vZGUJCT0gU1BJX01PREVfMCwKLQl9LAotCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaTEsIGNzMSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggZXh0LiBEU1AgKi8KLQkJLm1vZGFsaWFzCT0gInNwaWRldiIsCi0JCS5idXNfbnVtCT0gMSwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDU2MDAwMDAsCi0JCS5tb2RlCQk9IFNQSV9NT0RFXzAsCi0JfSwKLQl7IC8qIFVzZXIgYWNjZXNzaWJsZSBzcGkxLCBjczIgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGV4dC4gRFNQICovCi0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAotCQkuYnVzX251bQk9IDEsCi0JCS5jaGlwX3NlbGVjdAk9IDIsCi0JCS5tYXhfc3BlZWRfaHoJPSA1NjAwMDAwLAotCQkubW9kZQkJPSBTUElfTU9ERV8wLAotCX0sCi0JeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpMSwgY3MzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBleHQuIERTUCAqLwotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmJ1c19udW0JPSAxLAotCQkuY2hpcF9zZWxlY3QJPSAzLAotCQkubWF4X3NwZWVkX2h6CT0gNTYwMDAwMCwKLQkJLm1vZGUJCT0gU1BJX01PREVfMCwKLQl9Ci19OwotCi0vKgotICogR1BJIEJ1dHRvbnMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGJ1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEdQSU9fVFJJR19ORVRfSU4sCi0JCS5jb2RlCQk9IEJUTl8xLAotCQkuZGVzYwkJPSAiVFJJR19ORVRfSU4iLAotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CT0gMCwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JeyAvKiBTVzgwIG9uIHRoZSBHU19JQTE4X1MtTU4gYm9hcmQqLwotCQkuZ3BpbwkJPSBHUElPX0NBUkRfVU5NT1VOVF8wLAotCQkuY29kZQkJPSBCVE5fMiwKLQkJLmRlc2MJCT0gIkNhcmQgdW1vdW50IDAiLAotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JeyAvKiBTVzc5IG9uIHRoZSBHU19JQTE4X1MtTU4gYm9hcmQqLwotCQkuZ3BpbwkJPSBHUElPX0NBUkRfVU5NT1VOVF8xLAotCQkuY29kZQkJPSBCVE5fMywKLQkJLmRlc2MJCT0gIkNhcmQgdW1vdW50IDEiLAotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JeyAvKiBTVzI4MCBvbiB0aGUgR1NfSUExOC1DQiBib2FyZCovCi0JCS5ncGlvCQk9IEdQSU9fS0VZX1BPV0VSLAotCQkuY29kZQkJPSBLRVlfUE9XRVIsCi0JCS5kZXNjCQk9ICJQb3dlciBPZmYgQnV0dG9uIiwKLQkJLnR5cGUJCT0gRVZfS0VZLAotCQkuYWN0aXZlX2xvdwk9IDAsCi0JCS53YWtldXAJCT0gMSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGJ1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGJ1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZidXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZ3NpYTE4c19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEdQSU9fVFJJR19ORVRfSU4sIDEpOwotCWF0OTFfc2V0X2RlZ2xpdGNoKEdQSU9fVFJJR19ORVRfSU4sIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoR1BJT19DQVJEX1VOTU9VTlRfMCwgMSk7Ci0JYXQ5MV9zZXRfZGVnbGl0Y2goR1BJT19DQVJEX1VOTU9VTlRfMCwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChHUElPX0NBUkRfVU5NT1VOVF8xLCAxKTsKLQlhdDkxX3NldF9kZWdsaXRjaChHUElPX0NBUkRfVU5NT1VOVF8xLCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEdQSU9fS0VZX1BPV0VSLCAwKTsKLQlhdDkxX3NldF9kZWdsaXRjaChHUElPX0tFWV9QT1dFUiwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJ1dHRvbl9kZXZpY2UpOwotfQotCi0vKgotICogSTJDCi0gKi8KLXN0YXRpYyBpbnQgcGNmODU3NHhfMHgyMF9zZXR1cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZ3BpbywKLQkJCQl1bnNpZ25lZCBpbnQgbmdwaW8sIHZvaWQgKmNvbnRleHQpCi17Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChncGlvICsgUENGX0dQSU9fRVRIX0RFVEVDVCwgImV0aF9kZXQiKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcl9lcnIoImVycm9yOiBjYW4ndCByZXF1ZXN0IEdQSU8lZFxuIiwKLQkJCWdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNUKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0Jc3RhdHVzID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3BpbyArIFBDRl9HUElPX0VUSF9ERVRFQ1QpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCXByX2VycigiZXJyb3I6IGNhbid0IHNldHVwIEdQSU8lZCBhcyBpbnB1dFxuIiwKLQkJCWdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNUKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0Jc3RhdHVzID0gZ3Bpb19leHBvcnQoZ3BpbyArIFBDRl9HUElPX0VUSF9ERVRFQ1QsIGZhbHNlKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcl9lcnIoImVycm9yOiBjYW4ndCBleHBvcnQgR1BJTyVkXG4iLAotCQkJZ3BpbyArIFBDRl9HUElPX0VUSF9ERVRFQ1QpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlzdGF0dXMgPSBncGlvX3N5c2ZzX3NldF9hY3RpdmVfbG93KGdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNULCAxKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcl9lcnIoImVycm9yOiBncGlvX3N5c2ZzX3NldCBhY3RpdmVfbG93KEdQSU8lZCwgMSlcbiIsCi0JCQlncGlvICsgUENGX0dQSU9fRVRIX0RFVEVDVCk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNmODU3NHhfMHgyMF90ZWFyZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZ3BpbywKLQkJCQkJdW5zaWduZWQgbmdwaW8sIHZvaWQgKmNvbnRleHQpCi17Ci0JZ3Bpb19mcmVlKGdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNUKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmMjBfcGRhdGEgPSB7Ci0JLmdwaW9fYmFzZQk9IEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCwKLQkubl9sYXRjaAk9ICgxIDw8IDQpLAotCS5zZXR1cAkJPSBwY2Y4NTc0eF8weDIwX3NldHVwLAotCS50ZWFyZG93bgk9IHBjZjg1NzR4XzB4MjBfdGVhcmRvd24sCi19OwotCi1zdGF0aWMgc3RydWN0IHBjZjg1N3hfcGxhdGZvcm1fZGF0YSBwY2YyMl9wZGF0YSA9IHsKLQkuZ3Bpb19iYXNlCT0gR1NfSUExOF9TX1BDRl9HUElPX0JBU0UxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmMjRfcGRhdGEgPSB7Ci0JLmdwaW9fYmFzZQk9IEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBnc2lhMThzX2kyY19kZXZpY2VzW10gPSB7Ci0JeyAvKiBVMSBvbiB0aGUgR1NfSUExOC1DQl9WMyBib2FyZCAqLwotCQlJMkNfQk9BUkRfSU5GTygicGNmODU3NCIsIDB4MjApLAotCQkucGxhdGZvcm1fZGF0YSA9ICZwY2YyMF9wZGF0YSwKLQl9LAotCXsgLyogVTEgb24gdGhlIEdTXzJHX09QVDEtQV9WMCBib2FyZCAoQWxhcm0pICovCi0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc0IiwgMHgyMiksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjIyX3BkYXRhLAotCX0sCi0JeyAvKiBVMSBvbiB0aGUgR1NfMkctT1BUMjMtQV9WMCBib2FyZCAoTW9kZW0pICovCi0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc0IiwgMHgyNCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjI0X3BkYXRhLAotCX0sCi0JeyAvKiBVMTYxIG9uIHRoZSBHU19JQTE4X1MtTU4gYm9hcmQgKi8KLQkJSTJDX0JPQVJEX0lORk8oIjI0YzEwMjQiLCAweDUwKSwKLQl9LAotCXsgLyogVTE2MiBvbiB0aGUgR1NfSUExOF9TLU1OIGJvYXJkICovCi0JCUkyQ19CT0FSRF9JTkZPKCIyNGMwMSIsIDB4NTMpLAotCX0sCi19OwotCi0vKgotICogQ29tcGFjdCBGbGFzaAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBfX2luaXRkYXRhIGdzaWExOHNfY2YxX2RhdGEgPSB7Ci0JLmlycV9waW4JPSBBVDkxX1BJTl9QQTI3LAotCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEIzMCwKLQkudmNjX3Bpbgk9IC1FSU5WQUwsCi0JLnJzdF9waW4JPSBBVDkxX1BJTl9QQjMxLAotCS5jaGlwc2VsZWN0CT0gNSwKLQkuZmxhZ3MJCT0gQVQ5MV9DRl9UUlVFX0lERSwKLX07Ci0KLS8qIFBvd2VyIE9mZiBieSBSVEMgKi8KLXN0YXRpYyB2b2lkIGdzaWExOHNfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JcHJfbm90aWNlKCJQb3dlciBzdXBwbHkgd2lsbCBiZSBzd2l0Y2hlZCBvZmYgYXV0b21hdGljYWxseSBub3cgb3IgYWZ0ZXIgNjAgc2Vjb25kcyB3aXRob3V0IEFybURBUy5cbiIpOwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BBMjUsIDEpOwotCS8qIFNwaW4gdG8gZGVhdGguLi4gKi8KLQl3aGlsZSAoMSkKLQkJOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBnc2lhMThzX3Bvd2VyX29mZl9pbml0KHZvaWQpCi17Ci0JcG1fcG93ZXJfb2ZmID0gZ3NpYTE4c19wb3dlcl9vZmY7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKgotCSAqIFVTQVJUMCBvbiB0dHlTMSAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpLgotCSAqIFVzZWQgZm9yIEludGVybmFsIEFuYWxvZyBNb2RlbS4KLQkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLAotCQkJCUFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMgfAotCQkJCUFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfAotCQkJCUFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0JLyoKLQkgKiBVU0FSVDEgb24gdHR5UzIgKFJ4LCBUeCwgQ1RTLCBSVFMpLgotCSAqIFVzZWQgZm9yIEdQUyBvciBXaUZpIG9yIERhdGEgc3RyZWFtLgotCSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsCi0JCQkJQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JLyoKLQkgKiBVU0FSVDIgb24gdHR5UzMgKFJ4LCBUeCwgQ1RTLCBSVFMpLgotCSAqIFVzZWQgZm9yIEV4dGVybmFsIE1vZGVtLgotCSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzIsIDMsCi0JCQkJQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JLyoKLQkgKiBVU0FSVDMgb24gdHR5UzQgKFJ4LCBUeCwgUlRTKS4KLQkgKiBVc2VkIGZvciBSUy00ODUuCi0JICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMywgNCwgQVRNRUxfVUFSVF9SVFMpOwotCi0JLyoKLQkgKiBVU0FSVDQgb24gdHR5UzUgKFJ4LCBUeCkuCi0JICogVXNlZCBmb3IgVFJYNDMzIFJhZGlvIE1vZHVsZS4KLQkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM0LCA1LCAwKTsKLQlzdGFtcDlnMjBfYm9hcmRfaW5pdCgpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZ1c2JoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnVkY19kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZtYWNiX2RhdGEpOwotCWdzaWExOHNfbGVkc19pbml0KCk7Ci0JZ3NpYTE4c19wY2ZfbGVkc19pbml0KCk7Ci0JZ3NpYTE4c19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGdzaWExOHNfaTJjX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShnc2lhMThzX2kyY19kZXZpY2VzKSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX2NmKCZnc2lhMThzX2NmMV9kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGdzaWExOHNfc3BpX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShnc2lhMThzX3NwaV9kZXZpY2VzKSk7Ci0JZ3NpYTE4c19wb3dlcl9vZmZfaW5pdCgpOwotfQotCi1NQUNISU5FX1NUQVJUKEdTSUExOFMsICJHU19JQTE4X1MiKQotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGdzaWExOHNfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGdzaWExOHNfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWthZmEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiMWRmNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNiBTcGVycnktU3VuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQga2FmYV9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogU2V0IGNwdSB0eXBlOiBQUUZQICovCi0JYXQ5MXJtOTIwMF9zZXRfdHlwZShBUkNIX1JFVklTT05fOTIwMF9QUUZQKTsKLQotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGthZmFfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBrYWZhX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMSwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEga2FmYV91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQjYsCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QQjcsCi19OwotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGthZmFfbGVkc1tdID0gewotCXsJLyogRDEgKi8KLQkJLm5hbWUJCQk9ICJsZWQxIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCNCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga2FmYV9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEgKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZrYWZhX2V0aF9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZrYWZhX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmthZmFfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoa2FmYV9sZWRzLCBBUlJBWV9TSVpFKGthZmFfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKEtBRkEsICJTcGVycnktU3VuIEtBRkEiKQotCS8qIE1haW50YWluZXI6IFNlcmdlaSBTaGFyb25vdiAqLwotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBrYWZhX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBrYWZhX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNThkMzYyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1rYjkyMDIuYworKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwNSBrYl9hZG1pbgotICogIAkJICAgICAgIEt3aWtCeXRlLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBrYjkyMDJfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTAgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTAwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGtiOTIwMl9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQjI5LAotCS5pc19ybWlpCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBrYjkyMDJfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAxLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBrYjkyMDJfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEIyNCwKLQkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BCMjIsCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEga2I5MjAyX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEIyLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGtiOTIwMl9uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAibmFuZF9mcyIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEga2I5MjAyX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIyLAotCS5jbGUJCT0gMjEsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMyOSwKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMjgsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkucGFydHMJCT0ga2I5MjAyX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGtiOTIwMl9uYW5kX3BhcnRpdGlvbiksCi19OwotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGtiOTIwMl9sZWRzW10gPSB7Ci0JewkvKiBEMSAqLwotCQkubmFtZQkJCT0gImxlZDEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiBEMiAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxOCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJ0aW1lciIsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGtiOTIwMl9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEgKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzAsIDEsIDApOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyIChSeCAmIFR4IG9ubHkpIC0gSVJEQSAob3B0aW9uYWwpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMxLCAyLCAwKTsKLQotCS8qIFVTQVJUMyBvbiB0dHlTMyAoUngsIFR4LCBDVFMsIFJUUykgLSBSUzQ4NSAob3B0aW9uYWwpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMzLCAzLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZrYjkyMDJfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmtiOTIwMl91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZrYjkyMDJfdWRjX2RhdGEpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmtiOTIwMl9tY2kwX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKLQkvKiBOQU5EICovCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmtiOTIwMl9uYW5kX2RhdGEpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhrYjkyMDJfbGVkcywgQVJSQVlfU0laRShrYjkyMDJfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKEtCOTIwMCwgIktCOTIweCIpCi0JLyogTWFpbnRhaW5lcjogS3dpa0J5dGUsIEluYy4gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0ga2I5MjAyX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBrYjkyMDJfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGNvbnRyb2wtZzIwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGNvbnRyb2wtZzIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMjZiOTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXBjb250cm9sLWcyMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzdGlhbiBHbGluZGthbXAgPGNocmlzdGlhbi5nbGluZGthbXBAdGFza2l0LmRlPgotICogICAgICAgICAgICAgICAgICAgICB0YXNraXQgR21iSAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotLyoKLSAqIGNvcGllZCBhbmQgYWRqdXN0ZWQgZnJvbSBib2FyZC1zdGFtcDlnMjAuYwotICogYnkgUGV0ZXIgR3NlbGxtYW5uIDxwZ3NlbGxtYW5uQHBvcnRuZXItZWxla3Ryb25pay5hdD4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdzEtZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzdGFtcDlnMjAuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjb250cm9sX2cyMF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0Jc3RhbXA5ZzIwX2luaXRfZWFybHkoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBwY29udHJvbF9zbWNfY29uZmlnWzJdID0geyB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDE2LAotCS5ucmRfc2V0dXAJCT0gMTgsCi0JLm5jc193cml0ZV9zZXR1cAk9IDE2LAotCS5ud2Vfc2V0dXAJCT0gMTgsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gNjMsCi0JLm5yZF9wdWxzZQkJPSA1NSwKLQkubmNzX3dyaXRlX3B1bHNlCT0gNjMsCi0JLm53ZV9wdWxzZQkJPSA1NSwKLQotCS5yZWFkX2N5Y2xlCQk9IDEyNywKLQkud3JpdGVfY3ljbGUJCT0gMTI3LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfU0VMRUNUCi0JCQl8IEFUOTFfU01DX0RCV184IHwgQVQ5MV9TTUNfUFNfNAotCQkJfCBBVDkxX1NNQ19UREZNT0RFLAotCS50ZGZfY3ljbGVzCQk9IDMsCi19LCB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAwLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSA4LAotCS5ucmRfcHVsc2UJCT0gOCwKLQkubmNzX3dyaXRlX3B1bHNlCT0gNSwKLQkubndlX3B1bHNlCQk9IDQsCi0KLQkucmVhZF9jeWNsZQkJPSA4LAotCS53cml0ZV9jeWNsZQkJPSA3LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfU0VMRUNUCi0JCQl8IEFUOTFfU01DX0RCV18xNiB8IEFUOTFfU01DX1BTXzgKLQkJCXwgQVQ5MV9TTUNfVERGTU9ERSwKLQkudGRmX2N5Y2xlcwkJPSAxLAotfSB9OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYWRkX2RldmljZV9wY29udHJvbCh2b2lkKQotewotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCA0IChJTyBjb21wYXRpYmxlIHRvIDgwNTEgIFg0ICkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgNCwgJnBjb250cm9sX3NtY19jb25maWdbMF0pOwotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCA3IChGZXJyb1JBTSAyNTZLaUJ4MTZiaXQgTVIyQTE2QSAgRDQgKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCA3LCAmcGNvbnRyb2xfc21jX2NvbmZpZ1sxXSk7Ci19Ci0KLQotLyoKLSAqIFVTQiBIb3N0IHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIHVzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotCi0vKgotICogVVNCIERldmljZSBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHBjb250cm9sX2cyMF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQTIyLAkvKiBEZXRlY3QgKzVWIGJ1cyB2b2x0YWdlICovCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QQTQsCQkvKiBLLXN0YXRlLCBhY3RpdmUgbG93ICovCi19OwotCi0KLS8qCi0gKiBNQUNCIEV0aGVybmV0IGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQTI4LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLQotLyoKLSAqIEkyQyBkZXZpY2VzOiBlZXByb20gYW5kIHBoeS9zd2l0Y2gKLSAqLwotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHBjb250cm9sX2cyMF9pMmNfZGV2aWNlc1tdID0gewotewkJLyogRDcgIGFkZHJlc3Mgd2lkdGg9MiwgOEtpQiAqLwotCUkyQ19CT0FSRF9JTkZPKCIyNGM2NCIsIDB4NTApCi19LCB7CQkvKiBEOCAgYWRkcmVzcyB3aWR0aD0xLCAxIGJ5dGUgaGFzIDMyIGJpdHMhICovCi0JSTJDX0JPQVJEX0lORk8oImxhbjkzMDMiLCAweDBhKQotfSwgfTsKLQotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHBjb250cm9sX2cyMF9sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gIkxFRDEiLAkvKiByZWQgIEg1ICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE4LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAkvKiBzdXBlcnZpc29yICovCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDIiLAkvKiB5ZWxsb3cgIEg3ICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE5LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAkvKiBTRC1jYXJkIGFjdGl2aXR5ICovCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDMiLAkvKiBncmVlbiAgSDIgKi8KLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMjAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwJLyogYmxpbmt5ICovCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDQiLAkvKiByZWQgIEgzICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzYsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCS8qIGNvbm5lY3Rpb24gbG9zdCAqLwotCX0sIHsKLQkJLm5hbWUJCQk9ICJMRUQ1IiwJLyogeWVsbG93ICBINiAqLwotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM3LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAkvKiB1bnNlbnQgZGF0YSAqLwotCX0sIHsKLQkJLm5hbWUJCQk9ICJMRUQ2IiwJLyogZ3JlZW4gIEgxICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCS8qIHNuYWZ1ICovCi0JfQotfTsKLQotCi0vKgotICogU1BJIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY29udHJvbF9nMjBfc3BpX2RldmljZXNbXSA9IHsKLQl7Ci0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAkvKiBITUkgcG9ydCAgWDQgKi8KLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDUwICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LCB7Ci0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAkvKiBwaWdneWJhY2sgIEEyICovCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSA1MCAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDEsCi0JfSwKLX07Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjb250cm9sX2cyMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUykgcGlnZ3liYWNrICBBMiAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTCi0JCQkJCQl8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgQ1RTLCBSVFMpIGlzb2xhdGVkIFJTNDg1ICBYNSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTCi0JCQkJCQl8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMiBvbiB0dHlTMy4gKFJ4LCBUeCkgIDliaXQtQnVzICBNdWx0aWRyb3AtbW9kZSAgWDQgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM0LCAzLCAwKTsKLQlzdGFtcDlnMjBfYm9hcmRfaW5pdCgpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZ1c2JoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV9ldGgoJm1hY2JfZGF0YSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhwY29udHJvbF9nMjBfaTJjX2RldmljZXMsCi0JCUFSUkFZX1NJWkUocGNvbnRyb2xfZzIwX2kyY19kZXZpY2VzKSk7Ci0JYWRkX2RldmljZV9wY29udHJvbCgpOwotCWF0OTFfYWRkX2RldmljZV9zcGkocGNvbnRyb2xfZzIwX3NwaV9kZXZpY2VzLAotCQlBUlJBWV9TSVpFKHBjb250cm9sX2cyMF9zcGlfZGV2aWNlcykpOwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnBjb250cm9sX2cyMF91ZGNfZGF0YSk7Ci0JYXQ5MV9ncGlvX2xlZHMocGNvbnRyb2xfZzIwX2xlZHMsCi0JCUFSUkFZX1NJWkUocGNvbnRyb2xfZzIwX2xlZHMpKTsKLQkvKiBwaWdneWJhY2sgIEEyICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIzMSwgMSk7Ci19Ci0KLQotTUFDSElORV9TVEFSVChQQ09OVFJPTF9HMjAsICJQQ29udHJvbCBHMjAiKQotCS8qIE1haW50YWluZXI6IHBnc2VsbG1hbm5AcG9ydG5lci1lbGVrdHJvbmlrLmF0ICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gcGNvbnRyb2xfZzIwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBwY29udHJvbF9nMjBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXBpY290dXgyMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwZjJkNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEtsZWluaGVueiBFbGVrdHJvbmlrIEdtYkgKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBwaWNvdHV4MjAwX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBwaWNvdHV4MjAwX2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDNCwKLQkuaXNfcm1paQk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgcGljb3R1eDIwMF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBwaWNvdHV4MjAwX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEIyNywKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQTE3LAotCX0sCi19OwotCi0jZGVmaW5lIFBJQ09UVVgyMDBfRkxBU0hfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMAotI2RlZmluZSBQSUNPVFVYMjAwX0ZMQVNIX1NJWkUJU1pfNE0KLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGljb3R1eDIwMF9mbGFzaF9kYXRhID0gewotCS53aWR0aAk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBpY290dXgyMDBfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CQk9IFBJQ09UVVgyMDBfRkxBU0hfQkFTRSwKLQkuZW5kCQk9IFBJQ09UVVgyMDBfRkxBU0hfQkFTRSArIFBJQ09UVVgyMDBfRkxBU0hfU0laRSAtIDEsCi0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGljb3R1eDIwMF9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmcGljb3R1eDIwMF9mbGFzaF9kYXRhLAotCQkJfSwKLQkucmVzb3VyY2UJPSAmcGljb3R1eDIwMF9mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGljb3R1eDIwMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzEsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCSAgfCBBVE1FTF9VQVJUX1JJKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZwaWNvdHV4MjAwX2V0aF9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZwaWNvdHV4MjAwX3VzYmhfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQkvKiBNTUMgKi8KLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQjIyLCAxKTsJLyogdGhpcyBNTUMgY2FyZCBzbG90IGNhbiBvcHRpb25hbGx5IHVzZSBTUEkgc2lnbmFsaW5nIChDUzMpLiAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJnBpY290dXgyMDBfbWNpMF9kYXRhKTsKLQkvKiBOT1IgRmxhc2ggKi8KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBpY290dXgyMDBfZmxhc2gpOwotfQotCi1NQUNISU5FX1NUQVJUKFBJQ09UVVgyWFgsICJwaWNvdHV4IDIwMCIpCi0JLyogTWFpbnRhaW5lcjogS2xlaW5oZW56IEVsZWt0cm9uaWsgR21iSCAqLwotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBwaWNvdHV4MjAwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBwaWNvdHV4MjAwX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJtOTIwMGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcm05MjAwZWsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUzY2VhNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcm05MjAwZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJtOTIwMGVrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqCi0gKiAgRXBzb24gUzFEIGZyYW1lYnVmZmVyIGdsdWUgY29kZSBpczoKLSAqICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgVGhpYmF1dCBWQVJFTkUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGVrX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BENCwKLQkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BENSwKLX07Ci0KLSNpZm5kZWYgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJECi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQjI3LAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BBMTcsCi0JfQotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCX0sCi0jaWZkZWYgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJECi0JewkvKiBEYXRhRmxhc2ggY2FyZCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDMsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCX0sCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oImljczE1MjMiLCAweDI2KSwKLQl9LAotCXsKLQkJSTJDX0JPQVJEX0lORk8oImRhYzM1NTAiLCAweDRkKSwKLQl9Ci19OwotCi0jZGVmaW5lIEVLX0ZMQVNIX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKLSNkZWZpbmUgRUtfRkxBU0hfU0laRQlTWl84TQotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBla19mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBla19mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gRUtfRkxBU0hfQkFTRSwKLQkuZW5kCQk9IEVLX0ZMQVNIX0JBU0UgKyBFS19GTEFTSF9TSVpFIC0gMSwKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfZmxhc2hfZGF0YSwKLQkJCX0sCi0JLnJlc291cmNlCT0gJmVrX2ZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogInVzZXIgbGVkIDEiLCBEUzIgKi8KLQkJLm5hbWUJCQk9ICJncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibW1jMCIsCi0JfSwKLQl7CS8qICJ1c2VyIGxlZCAyIiwgRFM0ICovCi0JCS5uYW1lCQkJPSAieWVsbG93IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiAidXNlciBsZWQgMyIsIERTNiAqLwotCQkubmFtZQkJCT0gInJlZCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjIsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJICAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCSAgIHwgQVRNRUxfVUFSVF9SSSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmVrX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmVrX3VkY19kYXRhKTsKLQlhdDkxX3NldF9tdWx0aV9kcml2ZShla191ZGNfZGF0YS5wdWxsdXBfcGluLCAxKTsJLyogcHVsbHVwX3BpbiBpcyBjb25uZWN0ZWQgdG8gcmVzZXQgKi8KLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGVrX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX2kyY19kZXZpY2VzKSk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShla19zcGlfZGV2aWNlcywgQVJSQVlfU0laRShla19zcGlfZGV2aWNlcykpOwotI2lmZGVmIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCS8qIERhdGFGbGFzaCBjYXJkICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIyMiwgMCk7Ci0jZWxzZQotCS8qIE1NQyAqLwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCMjIsIDEpOwkvKiB0aGlzIE1NQyBjYXJkIHNsb3QgY2FuIG9wdGlvbmFsbHkgdXNlIFNQSSBzaWduYWxpbmcgKENTMykuICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWtfbWNpMF9kYXRhKTsKLSNlbmRpZgotCS8qIE5PUiBGbGFzaCAqLwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfZmxhc2gpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLQkvKiBWR0EgKi8KLS8vCWVrX2FkZF9kZXZpY2VfdmlkZW8oKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxUk05MjAwRUssICJBdG1lbCBBVDkxUk05MjAwLUVLIikKLQkvKiBNYWludGFpbmVyOiBTQU4gUGVvcGxlL0F0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGVrX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOS1sOTI2MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjE2NmUzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgT2xpbWV4IEx0ZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotLyoKLSAqIFVTQiBIb3N0IHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVrX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotLyoKLSAqIFVTQiBEZXZpY2UgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBla191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQzUsCi0JLnB1bGx1cF9waW4JPSAtRUlOVkFMLAkJLyogcHVsbC11cCBkcml2ZW4gYnkgVURDICovCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotI2lmICFJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDEsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCkKLQl7CS8qIERhdGFGbGFzaCBjYXJkICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotI2VuZGlmCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDAsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJCb290bG9hZGVyIEFyZWEiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSAxMCAqIFNaXzFNLAotCX0sCi0JewotCQkubmFtZQk9ICJVc2VyIEFyZWEiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQzEzLAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5wYXJ0cwkJPSBla19uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDMsCi0JLm5yZF9wdWxzZQkJPSAzLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAotCS5ud2VfcHVsc2UJCT0gMywKLQotCS5yZWFkX2N5Y2xlCQk9IDUsCi0JLndyaXRlX2N5Y2xlCQk9IDUsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCi0JLnRkZl9jeWNsZXMJCT0gMiwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmVrX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla19tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMV0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BDOCwKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQzQsCi0JfSwKLX07Ci0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogRDEgKi8KLQkJLm5hbWUJCQk9ICJsZWQxIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiBEMiAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEE2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gInRpbWVyIiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQkgICB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfCBBVE1FTF9VQVJUX0RDRAotCQkJICAgfCBBVE1FTF9VQVJUX1JJKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMSwgMiwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmVrX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmVrX3VkY19kYXRhKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7Ci0JLyogTkFORCAqLwotCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZla19tY2kwX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKFNBTTlfTDkyNjAsICJPbGltZXggU0FNOS1MOTI2MCIpCi0JLyogTWFpbnRhaW5lcjogT2xpbWV4ICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjhhOTQ2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYwZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDM1NCArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2IEF0bWVsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2F0NzNjMjEzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDI0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9zeXN0ZW1fcmV2Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSG9zdCBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgZWtfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0vKgotICogQXVkaW8KLSAqLwotc3RhdGljIHN0cnVjdCBhdDczYzIxM19ib2FyZF9pbmZvIGF0NzNjMjEzX2RhdGEgPSB7Ci0JLnNzY19pZAkJPSAwLAotCS5zaG9ydG5hbWUJPSAiQVQ5MVNBTTkyNjAtRUsgZXh0ZXJuYWwgREFDIiwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTMpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxM19NT0RVTEUpCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ3M2MyMTNfc2V0X2NsayhzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgY2xrICpwY2swOwotCXN0cnVjdCBjbGsgKnBsbGE7Ci0KLQlwY2swID0gY2xrX2dldChOVUxMLCAicGNrMCIpOwotCXBsbGEgPSBjbGtfZ2V0KE5VTEwsICJwbGxhIik7Ci0KLQkvKiBBVDczQzIxMyBNQ0sgQ2xvY2sgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOwkvKiBQQ0swICovCi0KLQljbGtfc2V0X3BhcmVudChwY2swLCBwbGxhKTsKLQljbGtfcHV0KHBsbGEpOwotCi0JaW5mby0+ZGFjX2NsayA9IHBjazA7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0NzNjMjEzX3NldF9jbGsoc3RydWN0IGF0NzNjMjEzX2JvYXJkX2luZm8gKmluZm8pIHt9Ci0jZW5kaWYKLQotLyoKLSAqIFNQSSBkZXZpY2VzLgotICovCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0jaWYgIUlTX0VOQUJMRUQoQ09ORklHX01NQ19BVE1FTE1DSSkKLQl7CS8qIERhdGFGbGFzaCBjaGlwICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotI2lmIGRlZmluZWQoQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEKQotCXsJLyogRGF0YUZsYXNoIGNhcmQgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxMykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUNzNDMjEzX01PRFVMRSkKLQl7CS8qIEFUNzNDMjEzIERBQyAqLwotCQkubW9kYWxpYXMJPSAiYXQ3M2MyMTMiLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAxLAotCQkubW9kZQkJPSBTUElfTU9ERV8xLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhdDczYzIxM19kYXRhLAotCX0sCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzI1NkssCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIGVrX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIxLAotCS5jbGUJCT0gMjIsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkub25fZmxhc2hfYmJ0CT0gMSwKLQkucGFydHMJCT0gZWtfbmFuZF9wYXJ0aXRpb24sCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoZWtfbmFuZF9wYXJ0aXRpb24pLAotfTsKLQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBla19uYW5kX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAxLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAotCS5ucmRfcHVsc2UJCT0gMywKLQkubmNzX3dyaXRlX3B1bHNlCT0gMywKLQkubndlX3B1bHNlCQk9IDMsCi0KLQkucmVhZF9jeWNsZQkJPSA1LAotCS53cml0ZV9jeWNsZQkJPSA1LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCWVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYgPSBib2FyZF9oYXZlX25hbmRfMTZiaXQoKTsKLQkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCi0JaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKLQllbHNlCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OwotCi0JLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCi0Jc2FtOV9zbWNfY29uZmlndXJlKDAsIDMsICZla19uYW5kX3NtY19jb25maWcpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Ci19Ci0KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWNpMF9kYXRhID0gewotCS5zbG90WzFdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSAtRUlOVkFMLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLQotLyoKLSAqIExFRHMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7Ci0JewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHM1IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBNiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQl9LAotCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLwotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTksCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi0vKgotICogSTJDIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYXQyNGM1MTIgPSB7Ci0JLmJ5dGVfbGVuCT0gU1pfNTEySyAvIDgsCi0JLnBhZ2Vfc2l6ZQk9IDEyOCwKLQkuZmxhZ3MJCT0gQVQyNF9GTEFHX0FERFIxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oIjI0YzUxMiIsIDB4NTApLAotCQkucGxhdGZvcm1fZGF0YSA9ICZhdDI0YzUxMiwKLQl9LAotCS8qIG1vcmUgZGV2aWNlcyBjYW4gYmUgYWRkZWQgdXNpbmcgZXhwYW5zaW9uIGNvbm5lY3RvcnMgKi8KLX07Ci0KLQotLyoKLSAqIEdQSU8gQnV0dG9ucwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZWtfYnV0dG9uc1tdID0gewotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEzMCwKLQkJLmNvZGUJCT0gQlROXzMsCi0JCS5kZXNjCQk9ICJCdXR0b24gMyIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTMxLAotCQkuY29kZQkJPSBCVE5fNCwKLQkJLmRlc2MJCT0gIkJ1dHRvbiA0IiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBla19idXR0b25fZGF0YSA9IHsKLQkuYnV0dG9ucwk9IGVrX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShla19idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVrX2J1dHRvbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImdwaW8ta2V5cyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfYnV0dG9uX2RhdGEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQotewotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEzMCwgMSk7CS8qIGJ0bjMgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTMwLCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMzEsIDEpOwkvKiBidG40ICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEzMSwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KLSNlbmRpZgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8IEFUTUVMX1VBUlRfRENECi0JCQkgICB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVrX21jaTBfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhla19pMmNfZGV2aWNlcywgQVJSQVlfU0laRShla19pMmNfZGV2aWNlcykpOwotCS8qIFNTQyAodG8gQVQ3M0MyMTMpICovCi0JYXQ3M2MyMTNfc2V0X2NsaygmYXQ3M2MyMTNfZGF0YSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwotCS8qIFB1c2ggQnV0dG9ucyAqLwotCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotfQotCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05MjYwRUssICJBdG1lbCBBVDkxU0FNOTI2MC1FSyIpCi0JLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBla19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NWFkYTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9hdDczYzIxMy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLQotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9zeXN0ZW1fcmV2Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBETTkwMDAgZXRoZXJuZXQgZGV2aWNlCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19ETTkwMDApCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOTAwMF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzIsCi0JCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfMiArIDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF8yICsgMHg0NCwKLQkJLmVuZAk9IEFUOTFfQ0hJUFNFTEVDVF8yICsgMHhGRiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCVsyXSA9IHsKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKLQkJCXwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZG05MDAwX3BsYXRfZGF0YSBkbTkwMDBfcGxhdGRhdGEgPSB7Ci0JLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFkgfCBETTkwMDBfUExBVEZfTk9fRUVQUk9NLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG05MDAwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZG05MDAwIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZG05MDAwX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJPSBkbTkwMDBfcmVzb3VyY2UsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmRtOTAwMF9wbGF0ZGF0YSwKLQl9Ci19OwotCi0vKgotICogU01DIHRpbWluZ3MgZm9yIHRoZSBETTkwMDAuCi0gKiBOb3RlOiBUaGVzZSB0aW1pbmdzIHdlcmUgY2FsY3VsYXRlZCBmb3IgTUFTVEVSX0NMT0NLID0gMTAwMDAwMDAwIGFjY29yZGluZyB0byB0aGUgRE05MDAwIHRpbWluZ3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZG05MDAwX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAyLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMiwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSA4LAotCS5ucmRfcHVsc2UJCT0gNCwKLQkubmNzX3dyaXRlX3B1bHNlCT0gOCwKLQkubndlX3B1bHNlCQk9IDQsCi0KLQkucmVhZF9jeWNsZQkJPSAxNiwKLQkud3JpdGVfY3ljbGUJCT0gMTYsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfQkFUX1dSSVRFIHwgQVQ5MV9TTUNfREJXXzE2LAotCS50ZGZfY3ljbGVzCQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9kbTkwMDAodm9pZCkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZG05MDAwX3Jlc291cmNlWzJdOwotCi0JLyogQ29uZmlndXJlIGNoaXAtc2VsZWN0IDIgKERNOTAwMCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMiwgJmRtOTAwMF9zbWNfY29uZmlnKTsKLQotCS8qIENvbmZpZ3VyZSBSZXNldCBzaWduYWwgYXMgb3V0cHV0ICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEMxMCwgMCk7Ci0KLQkvKiBDb25maWd1cmUgSW50ZXJydXB0IHBpbiBhcyBpbnB1dCwgbm8gcHVsbC11cCAqLwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEMxMSwgMCk7Ci0KLQlyLT5zdGFydCA9IHItPmVuZCA9IGdwaW9fdG9faXJxKEFUOTFfUElOX1BDMTEpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG05MDAwX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfZG05MDAwKHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0RNOTAwMCAqLwotCi0KLS8qCi0gKiBVU0IgSG9zdCBQb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLQotLyoKLSAqIFVTQiBEZXZpY2UgUG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBla191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQjI5LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0vKgotICogTkFORCBmbGFzaAotICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBla19uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSBTWl8yNTZLLAotCX0sCi0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMiIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBla19uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMiwKLQkuY2xlCQk9IDIxLAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLQkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTUsCi0JLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi0JLm9uX2ZsYXNoX2JidAk9IDEsCi0JLnBhcnRzCQk9IGVrX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGVrX25hbmRfcGFydGl0aW9uKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMSwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDEsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gMywKLQkubnJkX3B1bHNlCQk9IDMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDMsCi0JLm53ZV9wdWxzZQkJPSAzLAotCi0JLnJlYWRfY3ljbGUJCT0gNSwKLQkud3JpdGVfY3ljbGUJCT0gNSwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUsCi0JLnRkZl9jeWNsZXMJCT0gMiwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQlla19uYW5kX2RhdGEuYnVzX3dpZHRoXzE2ID0gYm9hcmRfaGF2ZV9uYW5kXzE2Yml0KCk7Ci0JLyogc2V0dXAgYnVzLXdpZHRoICg4IG9yIDE2KSAqLwotCWlmIChla19uYW5kX2RhdGEuYnVzX3dpZHRoXzE2KQotCQlla19uYW5kX3NtY19jb25maWcubW9kZSB8PSBBVDkxX1NNQ19EQldfMTY7Ci0JZWxzZQotCQlla19uYW5kX3NtY19jb25maWcubW9kZSB8PSBBVDkxX1NNQ19EQldfODsKLQotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCAzLCAmZWtfbmFuZF9zbWNfY29uZmlnKTsKLQotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOwotfQotCi0vKgotICogU1BJIHJlbGF0ZWQgZGV2aWNlcwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotCi0vKgotICogQURTNzg0NiBUb3VjaHNjcmVlbgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nl9NT0RVTEUpCi0KLXN0YXRpYyBpbnQgYWRzNzg0M19wZW5kb3duX3N0YXRlKHZvaWQpCi17Ci0JcmV0dXJuICFhdDkxX2dldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BDMik7CS8qIFRvdWNoc2NyZWVuIFBFTklSUSAqLwotfQotCi1zdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHNfaW5mbyA9IHsKLQkubW9kZWwJCQk9IDc4NDMsCi0JLnhfbWluCQkJPSAxNTAsCi0JLnhfbWF4CQkJPSAzODMwLAotCS55X21pbgkJCT0gMTkwLAotCS55X21heAkJCT0gMzgzMCwKLQkudnJlZl9kZWxheV91c2Vjcwk9IDEwMCwKLQkueF9wbGF0ZV9vaG1zCQk9IDQ1MCwKLQkueV9wbGF0ZV9vaG1zCQk9IDI1MCwKLQkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLAotCS5kZWJvdW5jZV9tYXgJCT0gMSwKLQkuZGVib3VuY2VfcmVwCQk9IDAsCi0JLmRlYm91bmNlX3RvbAkJPSAofjApLAotCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGFkczc4NDNfcGVuZG93bl9zdGF0ZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX3RzKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyLCAxKTsJLyogRXh0ZXJuYWwgSVJRMCwgd2l0aCBwdWxsdXAgKi8KLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMTEsIDEpOwkvKiBUb3VjaHNjcmVlbiBCVVNZIHNpZ25hbCAqLwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX3RzKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoKLSAqIEF1ZGlvCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyBhdDczYzIxM19kYXRhID0gewotCS5zc2NfaWQJCT0gMSwKLQkuc2hvcnRuYW1lCT0gIkFUOTFTQU05MjYxLzlHMTAtRUsgZXh0ZXJuYWwgREFDIiwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTMpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxM19NT0RVTEUpCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ3M2MyMTNfc2V0X2NsayhzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgY2xrICpwY2syOwotCXN0cnVjdCBjbGsgKnBsbGE7Ci0KLQlwY2syID0gY2xrX2dldChOVUxMLCAicGNrMiIpOwotCXBsbGEgPSBjbGtfZ2V0KE5VTEwsICJwbGxhIik7Ci0KLQkvKiBBVDczQzIxMyBNQ0sgQ2xvY2sgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjMxLCAwKTsJLyogUENLMiAqLwotCi0JY2xrX3NldF9wYXJlbnQocGNrMiwgcGxsYSk7Ci0JY2xrX3B1dChwbGxhKTsKLQotCWluZm8tPmRhY19jbGsgPSBwY2syOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDczYzIxM19zZXRfY2xrKHN0cnVjdCBhdDczYzIxM19ib2FyZF9pbmZvICppbmZvKSB7fQotI2VuZGlmCi0KLS8qCi0gKiBTUEkgZGV2aWNlcwotICovCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQl7Ci0JCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMiwKLQkJLm1heF9zcGVlZF9oegk9IDEyNTAwMCAqIDI2LAkvKiAobWF4IHNhbXBsZSByYXRlIEAgM1YpICogKGNtZCArIGRhdGEgKyBvdmVyaGVhZCkgKi8KLQkJLmJ1c19udW0JPSAwLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhZHNfaW5mbywKLQkJLmlycQkJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX0lSUTAsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBBVDkxX1BJTl9QQTI4LAkvKiBDUyBwaW4gKi8KLQl9LAotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCi0JewkvKiBEYXRhRmxhc2ggY2FyZCAtIGp1bXBlciAoSjEyKSBjb25maWd1cmFibGUgdG8gQ1MzIG9yIENTMCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDMsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxMykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUNzNDMjEzX01PRFVMRSkKLQl7CS8qIEFUNzNDMjEzIERBQyAqLwotCQkubW9kYWxpYXMJPSAiYXQ3M2MyMTMiLAotCQkuY2hpcF9zZWxlY3QJPSAzLAotCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCQkubW9kZQkJPSBTUElfTU9ERV8xLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhdDczYzIxM19kYXRhLAotCQkuY29udHJvbGxlcl9kYXRhID0gKHZvaWQqKSBBVDkxX1BJTl9QQTI5LAkvKiBkZWZhdWx0IGZvciBDUzMgaXMgUEE2LCBidXQgaXQgbXVzdCBiZSBQQTI5ICovCi0JfSwKLSNlbmRpZgotfTsKLQotI2Vsc2UgLyogQ09ORklHX1NQSV9BVE1FTF8qICovCi0vKiBzcGkwIGFuZCBtbWMvc2Qgc2hhcmUgdGhlIHNhbWUgUElPIHBpbnM6IGNhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgKi8KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICogZGV0X3Bpbiwgd3BfcGluIGFuZCB2Y2NfcGluIGFyZSBub3QgY29ubmVjdGVkCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IC1FSU5WQUwsCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotfTsKLQotI2VuZGlmIC8qIENPTkZJR19TUElfQVRNRUxfKiAqLwotCi0KLS8qCi0gKiBMQ0QgQ29udHJvbGxlcgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKLQotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX1NUTikKLQotLyogU1ROICovCi1zdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBhdDkxX3N0bl9tb2Rlc1tdID0gewotICAgICAgICB7Ci0JCS5uYW1lICAgICAgICAgICA9ICJTUDA2UTAwMiBAIDc1IiwKLQkJLnJlZnJlc2ggICAgICAgID0gNzUsCi0JCS54cmVzICAgICAgICAgICA9IDMyMCwgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gMjQwLAotCQkucGl4Y2xvY2sgICAgICAgPSBLSFoyUElDT1MoMTQ0MCksCi0KLQkJLmxlZnRfbWFyZ2luICAgID0gMSwgICAgICAgICAgICAucmlnaHRfbWFyZ2luICAgPSAxLAotCQkudXBwZXJfbWFyZ2luICAgPSAwLCAgICAgICAgICAgIC5sb3dlcl9tYXJnaW4gICA9IDAsCi0JCS5oc3luY19sZW4gICAgICA9IDEsICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMSwKLQotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJLnZtb2RlICAgICAgICAgID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLSAgICAgICAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfc3RuX21vbnNwZWNzID0gewotICAgICAgICAubWFudWZhY3R1cmVyICAgPSAiSElUIiwKLSAgICAgICAgLm1vbml0b3IgICAgICAgID0gIlNQMDZRMDAyIiwKLQotICAgICAgICAubW9kZWRiICAgICAgICAgPSBhdDkxX3N0bl9tb2RlcywKLSAgICAgICAgLm1vZGVkYl9sZW4gICAgID0gQVJSQVlfU0laRShhdDkxX3N0bl9tb2RlcyksCi0gICAgICAgIC5oZm1pbiAgICAgICAgICA9IDE1MDAwLAotICAgICAgICAuaGZtYXggICAgICAgICAgPSA2NDAwMCwKLSAgICAgICAgLnZmbWluICAgICAgICAgID0gNTAsCi0gICAgICAgIC52Zm1heCAgICAgICAgICA9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTkyNjFfREVGQVVMVF9TVE5fTENEQ09OMgkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9TVE5NT05PIFwKLQkJCQkJfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUgXAotCQkJCQl8IEFUTUVMX0xDRENfSUZXSURUSF80IFwKLQkJCQkJfCBBVE1FTF9MQ0RDX1NDQU5NT0RfU0lOR0xFKQotCi1zdGF0aWMgdm9pZCBhdDkxX2xjZGNfc3RuX3Bvd2VyX2NvbnRyb2woc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpwZGF0YSwgaW50IG9uKQotewotCS8qIGJhY2tsaWdodCAqLwotCWlmIChvbikgewkvKiBwb3dlciB1cCAqLwotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BDMTQsIDApOwotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BDMTUsIDApOwotCX0gZWxzZSB7CS8qIHBvd2VyIGRvd24gKi8KLQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZShBVDkxX1BJTl9QQzE0LCAxKTsKLQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZShBVDkxX1BJTl9QQzE1LCAxKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmRlZmF1bHRfYnBwCQkJPSAxLAotCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKLQkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYxX0RFRkFVTFRfU1ROX0xDRENPTjIsCi0JLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X3N0bl9tb25zcGVjcywKLQkuYXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbAk9IGF0OTFfbGNkY19zdG5fcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLX07Ci0KLSNlbHNlCi0KLS8qIFRGVCAqLwotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7Ci0JewotCSAgICAgICAgLm5hbWUgICAgICAgICAgID0gIlRYMDlENTBWTTFDQ0EgQCA2MCIsCi0JCS5yZWZyZXNoCT0gNjAsCi0JCS54cmVzCQk9IDI0MCwJCS55cmVzCQk9IDMyMCwKLQkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDQ5NjUpLAotCi0JCS5sZWZ0X21hcmdpbgk9IDEsCQkucmlnaHRfbWFyZ2luCT0gMzMsCi0JCS51cHBlcl9tYXJnaW4JPSAxLAkJLmxvd2VyX21hcmdpbgk9IDAsCi0JCS5oc3luY19sZW4JPSA1LAkJLnZzeW5jX2xlbgk9IDEsCi0KLQkJLnN5bmMJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCi0JCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGZiX21vbnNwZWNzIGF0OTFmYl9kZWZhdWx0X3RmdF9tb25zcGVjcyA9IHsKLQkubWFudWZhY3R1cmVyCT0gIkhJVCIsCi0JLm1vbml0b3IgICAgICAgID0gIlRYMDlENTBWTTFDQ0EiLAotCi0JLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCi0JLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCi0JLmhmbWluCQk9IDE1MDAwLAotCS5oZm1heAkJPSA2NDAwMCwKLQkudmZtaW4JCT0gNTAsCi0JLnZmbWF4CQk9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTkyNjFfREVGQVVMVF9URlRfTENEQ09OMgkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9URlQgICAgXAotCQkJCQl8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRSkKLQotc3RhdGljIHZvaWQgYXQ5MV9sY2RjX3RmdF9wb3dlcl9jb250cm9sKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqcGRhdGEsIGludCBvbikKLXsKLQlpZiAob24pCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEExMiwgMCk7CS8qIHBvd2VyIHVwICovCi0JZWxzZQotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BBMTIsIDEpOwkvKiBwb3dlciBkb3duICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmxjZGNvbl9pc19iYWNrbGlnaHQJCT0gdHJ1ZSwKLQkuZGVmYXVsdF9icHAJCQk9IDE2LAotCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKLQkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYxX0RFRkFVTFRfVEZUX0xDRENPTjIsCi0JLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X3RmdF9tb25zcGVjcywKLQkuYXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbAk9IGF0OTFfbGNkY190ZnRfcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLX07Ci0jZW5kaWYKLQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGE7Ci0jZW5kaWYKLQotCi0vKgotICogR1BJTyBCdXR0b25zCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBla19idXR0b25zW10gPSB7Ci0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTI3LAotCQkuY29kZQkJPSBCVE5fMCwKLQkJLmRlc2MJCT0gIkJ1dHRvbiAwIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BBMjYsCi0JCS5jb2RlCQk9IEJUTl8xLAotCQkuZGVzYwkJPSAiQnV0dG9uIDEiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEyNSwKLQkJLmNvZGUJCT0gQlROXzIsCi0JCS5kZXNjCQk9ICJCdXR0b24gMiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTI0LAotCQkuY29kZQkJPSBCVE5fMywKLQkJLmRlc2MJCT0gIkJ1dHRvbiAzIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBla19idXR0b25fZGF0YSA9IHsKLQkuYnV0dG9ucwk9IGVrX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShla19idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVrX2J1dHRvbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImdwaW8ta2V5cyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfYnV0dG9uX2RhdGEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQotewotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEyNywgMSk7CS8qIGJ0bjAgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTI3LCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMjYsIDEpOwkvKiBidG4xICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEyNiwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTI1LCAxKTsJLyogYnRuMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMjUsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEyNCwgMSk7CS8qIGJ0bjMgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTI0LCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfYnV0dG9uX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKSB7fQotI2VuZGlmCi0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDEgdG8gYmUgZGVmaW5lZCAqLwotCQkubmFtZQkJCT0gImRzNyIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTE0LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sCi0JewkvKiAidG9wIiBsZWQsIGdyZWVuLCB1c2VybGVkMiB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHM4IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMTMsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwKLQl7CS8qICJwb3dlciIgbGVkLCB5ZWxsb3cgKi8KLQkJLm5hbWUJCQk9ICJkczEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEEyMywKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0KLQlpZiAoY3B1X2lzX2F0OTFzYW05ZzEwKCkpCi0JCWVrX2xjZGNfZGF0YS5sY2Rfd2lyaW5nX21vZGUgPSBBVE1FTF9MQ0RDX1dJUklOR19SR0I7Ci0KLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZla191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZla191ZGNfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRE05MDAwIGV0aGVybmV0ICovCi0JZWtfYWRkX2RldmljZV9kbTkwMDAoKTsKLQotCS8qIHNwaTAgYW5kIG1tYy9zZCBzaGFyZSB0aGUgc2FtZSBQSU8gcGlucyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7Ci0JLyogVG91Y2hzY3JlZW4gKi8KLQlla19hZGRfZGV2aWNlX3RzKCk7Ci0JLyogU1NDICh0byBBVDczQzIxMykgKi8KLQlhdDczYzIxM19zZXRfY2xrKCZhdDczYzIxM19kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc3NjKEFUOTFTQU05MjYxX0lEX1NTQzEsIEFUTUVMX1NTQ19UWCk7Ci0jZWxzZQotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJm1jaTBfZGF0YSk7Ci0jZW5kaWYKLQkvKiBMQ0QgQ29udHJvbGxlciAqLwotCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOwotCS8qIFB1c2ggQnV0dG9ucyAqLwotCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxU0FNOTI2MUVLLCAiQXRtZWwgQVQ5MVNBTTkyNjEtRUsiKQotCS8qIE1haW50YWluZXI6IEF0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORAotCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05RzEwRUssICJBdG1lbCBBVDkxU0FNOUcxMC1FSyIpCi0JLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBla19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NjY4MGYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0MjQuaD4KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHNfcHdtLmg+Ci0KLSNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvc3lzdGVtX3Jldi5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxNi4zNjcgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTYzNjc2NjApOwotfQotCi0vKgotICogVVNCIEhvc3QgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZWtfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHsgQVQ5MV9QSU5fUEEyNCwgQVQ5MV9QSU5fUEEyMSB9LAotCS52YnVzX3Bpbl9hY3RpdmVfbG93ID0gezEsIDF9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgZWtfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEEyNSwKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLQotLyoKLSAqIEFEUzc4NDYgVG91Y2hzY3JlZW4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQotc3RhdGljIGludCBhZHM3ODQzX3BlbmRvd25fc3RhdGUodm9pZCkKLXsKLQlyZXR1cm4gIWF0OTFfZ2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEExNSk7CS8qIFRvdWNoc2NyZWVuIFBFTklSUSAqLwotfQotCi1zdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHNfaW5mbyA9IHsKLQkubW9kZWwJCQk9IDc4NDMsCi0JLnhfbWluCQkJPSAxNTAsCi0JLnhfbWF4CQkJPSAzODMwLAotCS55X21pbgkJCT0gMTkwLAotCS55X21heAkJCT0gMzgzMCwKLQkudnJlZl9kZWxheV91c2Vjcwk9IDEwMCwKLQkueF9wbGF0ZV9vaG1zCQk9IDQ1MCwKLQkueV9wbGF0ZV9vaG1zCQk9IDI1MCwKLQkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLAotCS5kZWJvdW5jZV9tYXgJCT0gMSwKLQkuZGVib3VuY2VfcmVwCQk9IDAsCi0JLmRlYm91bmNlX3RvbAkJPSAofjApLAotCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGFkczc4NDNfcGVuZG93bl9zdGF0ZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX3RzKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMSk7CS8qIEV4dGVybmFsIElSUTEsIHdpdGggcHVsbHVwICovCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTMxLCAxKTsJLyogVG91Y2hzY3JlZW4gQlVTWSBzaWduYWwgKi8KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV90cyh2b2lkKSB7fQotI2VuZGlmCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotI2lmIGRlZmluZWQoQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEKQotCXsJLyogRGF0YUZsYXNoIGNhcmQgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQl7Ci0JCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMywKLQkJLm1heF9zcGVlZF9oegk9IDEyNTAwMCAqIDI2LAkvKiAobWF4IHNhbXBsZSByYXRlIEAgM1YpICogKGNtZCArIGRhdGEgKyBvdmVyaGVhZCkgKi8KLQkJLmJ1c19udW0JPSAwLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhZHNfaW5mbywKLQkJLmlycQkJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0lSUTEsCi0JfSwKLSNlbmRpZgotfTsKLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtY2kxX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BFMTgsCi0JCS53cF9waW4JCT0gQVQ5MV9QSU5fUEUxOSwKLQl9LAotfTsKLQotCi0vKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEUzMSwKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzY0TSwKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQTIyLAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEQxNSwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5vbl9mbGFzaF9iYnQJPSAxLAotCS5wYXJ0cwkJPSBla19uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDMsCi0JLm5yZF9wdWxzZQkJPSAzLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAotCS5ud2VfcHVsc2UJCT0gMywKLQotCS5yZWFkX2N5Y2xlCQk9IDUsCi0JLndyaXRlX2N5Y2xlCQk9IDUsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFLAotCS50ZGZfY3ljbGVzCQk9IDIsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9uYW5kKHZvaWQpCi17Ci0JZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNiA9IGJvYXJkX2hhdmVfbmFuZF8xNmJpdCgpOwotCS8qIHNldHVwIGJ1cy13aWR0aCAoOCBvciAxNikgKi8KLQlpZiAoZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNikKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzE2OwotCWVsc2UKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzg7Ci0KLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmVrX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogSTJDIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYXQyNGM1MTIgPSB7Ci0JLmJ5dGVfbGVuCT0gU1pfNTEySyAvIDgsCi0JLnBhZ2Vfc2l6ZQk9IDEyOCwKLQkuZmxhZ3MJCT0gQVQyNF9GTEFHX0FERFIxNiwKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVrX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygiMjRjNTEyIiwgMHg1MCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmF0MjRjNTEyLAotCX0sCi0JLyogbW9yZSBkZXZpY2VzIGNhbiBiZSBhZGRlZCB1c2luZyBleHBhbnNpb24gY29ubmVjdG9ycyAqLwotfTsKLQotLyoKLSAqIExDRCBDb250cm9sbGVyCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7Ci0JewotCQkubmFtZQkJPSAiVFgwOUQ1MFZNMUNDQSBAIDYwIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gMjQwLAkJLnlyZXMJCT0gMzIwLAotCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNDk2NSksCi0KLQkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAzMywKLQkJLnVwcGVyX21hcmdpbgk9IDEsCQkubG93ZXJfbWFyZ2luCT0gMCwKLQkJLmhzeW5jX2xlbgk9IDUsCQkudnN5bmNfbGVuCT0gMSwKLQotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7Ci0JLm1hbnVmYWN0dXJlcgk9ICJISVQiLAotCS5tb25pdG9yCT0gIlRYMDlENzBWTTFDQ0EiLAotCi0JLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCi0JLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCi0JLmhmbWluCQk9IDE1MDAwLAotCS5oZm1heAkJPSA2NDAwMCwKLQkudmZtaW4JCT0gNTAsCi0JLnZmbWF4CQk9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTkyNjNfREVGQVVMVF9MQ0RDT04yIAkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9URlQgXAotCQkJCQl8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRSkKLQotc3RhdGljIHZvaWQgYXQ5MV9sY2RjX3Bvd2VyX2NvbnRyb2woc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpwZGF0YSwgaW50IG9uKQotewotCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEEzMCwgb24pOwotfQotCi0vKiBEcml2ZXIgZGF0YXMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmxjZGNvbl9pc19iYWNrbGlnaHQJCT0gdHJ1ZSwKLQkuZGVmYXVsdF9icHAJCQk9IDE2LAotCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKLQkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYzX0RFRkFVTFRfTENEQ09OMiwKLQkuZGVmYXVsdF9tb25zcGVjcwkJPSAmYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MsCi0JLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wJPSBhdDkxX2xjZGNfcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLX07Ci0KLSNlbHNlCi1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhOwotI2VuZGlmCi0KLQotLyoKLSAqIEdQSU8gQnV0dG9ucwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZWtfYnV0dG9uc1tdID0gewotCXsJLyogQlAxLCAibGVmdGNsaWMiICovCi0JCS5jb2RlCQk9IEJUTl9MRUZULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQzUsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLmRlc2MJCT0gImxlZnRfY2xpY2siLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLQl7CS8qIEJQMiwgInJpZ2h0Y2xpYyIgKi8KLQkJLmNvZGUJCT0gQlROX1JJR0hULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQzQsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLmRlc2MJCT0gInJpZ2h0X2NsaWNrIiwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBla19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQzUsIDEpOwkvKiBsZWZ0IGJ1dHRvbiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BDNSwgMSk7Ci0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEM0LCAxKTsJLyogcmlnaHQgYnV0dG9uICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEM0LCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfYnV0dG9uX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyoKLSAqIEFDOTcKLSAqIHJlc2V0X3BpbiBpcyBub3QgY29ubmVjdGVkOiBOUlNUCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBla19hYzk3X2RhdGEgPSB7Ci0JLnJlc2V0X3Bpbgk9IC1FSU5WQUwsCi19OwotCi0KLS8qCi0gKiBMRURzIC4uLiB0aGVzZSBjb3VsZCBhbGwgYmUgUFdNLWRyaXZlbiwgZm9yIHZhcmlhYmxlIGJyaWdodG5lc3MKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7Ci0JewkvKiAicmlnaHQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQyIChjb3VsZCBiZSBkcml2ZW4gYnkgcHdtMikgKi8KLQkJLm5hbWUJCQk9ICJkczIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMyOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJuYW5kLWRpc2siLAotCX0sCi0JewkvKiAicG93ZXIiIGxlZCwgeWVsbG93IChjb3VsZCBiZSBkcml2ZW4gYnkgcHdtMCkgKi8KLQkJLm5hbWUJCQk9ICJkczMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI3LAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfSwKLSNpZiAhSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JewotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjgsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfQotI2VuZGlmCi19OwotCi0vKgotICogUFdNIExlZHMKLSAqLwotc3RhdGljIHN0cnVjdCBwd21fbG9va3VwIHB3bV9sb29rdXBbXSA9IHsKLQlQV01fTE9PS1VQKCJhdDkxc2FtOXJsLXB3bSIsIDEsICJsZWRzX3B3bSIsICJkczEiLAotCQkgICA1MDAwLCBQV01fUE9MQVJJVFlfSU5WRVJTRUQpLAotfTsKLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX0xFRFNfUFdNKQotc3RhdGljIHN0cnVjdCBsZWRfcHdtIHB3bV9sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICJkczEiLAotCQkubWF4X2JyaWdodG5lc3MgPSAyNTUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbGVkX3B3bV9wbGF0Zm9ybV9kYXRhIHB3bV9kYXRhID0gewotCS5udW1fbGVkcyAgICAgICA9IEFSUkFZX1NJWkUocHdtX2xlZHMpLAotCS5sZWRzICAgICAgICAgICA9IHB3bV9sZWRzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19wd20gPSB7Ci0JLm5hbWUgICA9ICJsZWRzX3B3bSIsCi0JLmlkICAgICA9IC0xLAotCS5kZXYgICAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnB3bV9kYXRhLAotCX0sCi19OwotI2VuZGlmCi0KLQotLyoKLSAqIENBTgotICovCi1zdGF0aWMgdm9pZCBzYW05MjYzZWtfdHJhbnNjZWl2ZXJfc3dpdGNoKGludCBvbikKLXsKLQlpZiAob24pIHsKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOCwgMSk7IC8qIENBTlJYRU4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOSwgMCk7IC8qIENBTlJTICovCi0JfSBlbHNlIHsKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOCwgMCk7IC8qIENBTlJYRU4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOSwgMSk7IC8qIENBTlJTICovCi0JfQotfQotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2FuX2RhdGEgZWtfY2FuX2RhdGEgPSB7Ci0JLnRyYW5zY2VpdmVyX3N3aXRjaCA9IHNhbTkyNjNla190cmFuc2NlaXZlcl9zd2l0Y2gsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JJmxlZHNfcHdtLAotI2VuZGlmCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIFJUUywgQ1RTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2M19JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZla191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZla191ZGNfZGF0YSk7Ci0JLyogU1BJICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEUyMCwgMSk7CQkvKiBzZWxlY3Qgc3BpMCBjbG9jayAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBUb3VjaHNjcmVlbiAqLwotCWVrX2FkZF9kZXZpY2VfdHMoKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDEsICZtY2kxX2RhdGEpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhla19pMmNfZGV2aWNlcywgQVJSQVlfU0laRShla19pMmNfZGV2aWNlcykpOwotCS8qIExDRCBDb250cm9sbGVyICovCi0JYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Ci0JLyogUHVzaCBCdXR0b25zICovCi0JZWtfYWRkX2RldmljZV9idXR0b25zKCk7Ci0JLyogQUM5NyAqLwotCWF0OTFfYWRkX2RldmljZV9hYzk3KCZla19hYzk3X2RhdGEpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLQlwd21fYWRkX3RhYmxlKHB3bV9sb29rdXAsIEFSUkFZX1NJWkUocHdtX2xvb2t1cCkpOwotI2lmIElTX0VOQUJMRUQoQ09ORklHX0xFRFNfUFdNKQotCWF0OTFfYWRkX2RldmljZV9wd20oMSA8PCBBVDkxX1BXTTEpOwotI2VuZGlmCi0JLyogQ0FOICovCi0JYXQ5MV9hZGRfZGV2aWNlX2NhbigmZWtfY2FuX2RhdGEpOwotCS8qIE90aGVyIHBsYXRmb3JtIGRldmljZXMgKi8KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxU0FNOTI2M0VLLCAiQXRtZWwgQVQ5MVNBTTkyNjMtRUsiKQotCS8qIE1haW50YWluZXI6IEF0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWYwNzUyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDQyOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2F0NzNjMjEzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDkxX2FkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLSNpbmNsdWRlIDxtYWNoL3N5c3RlbV9yZXYuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLS8qCi0gKiBib2FyZCByZXZpc2lvbiBlbmNvZGluZwotICogYml0IDA6Ci0gKiAJMCA9PiAxIHNkL21tYyBzbG90Ci0gKiAJMSA9PiAyIHNkL21tYyBzbG90cyBjb25uZWN0b3JzIChib2FyZCBmcm9tIHJldmlzaW9uIEMpCi0gKi8KLSNkZWZpbmUgSEFWRV8yTU1DCSgxIDw8IDApCi1zdGF0aWMgaW50IGlubGluZSBla19oYXZlXzJtbWModm9pZCkKLXsKLQlyZXR1cm4gbWFjaGluZV9pc19hdDkxc2FtOWcyMGVrXzJtbWMoKSB8fCAoc3lzdGVtX3JldiAmIEhBVkVfMk1NQyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotLyoKLSAqIFVTQiBIb3N0IHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVrX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotLyoKLSAqIFVTQiBEZXZpY2UgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBla191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQzUsCi0JLnB1bGx1cF9waW4JPSAtRUlOVkFMLAkJLyogcHVsbC11cCBkcml2ZW4gYnkgVURDICovCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotI2lmICFJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDEsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCkKLQl7CS8qIERhdGFGbGFzaCBjYXJkICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotI2VuZGlmCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9tYWNiKHZvaWQpCi17Ci0JaWYgKGVrX2hhdmVfMm1tYygpKQotCQlla19tYWNiX2RhdGEucGh5X2lycV9waW4gPSBBVDkxX1BJTl9QQjA7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwotfQotCi0vKgotICogTkFORCBmbGFzaAotICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBla19uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUgICA9ICJCb290c3RyYXAiLAotCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgICA9IDQgKiBTWl8xTSwKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IDYwICogU1pfMU0sCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi0vKiBkZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTMsCi0JLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5vbl9mbGFzaF9iYnQJPSAxLAotCS5wYXJ0cwkJPSBla19uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDIsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAyLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDQsCi0JLm5yZF9wdWxzZQkJPSA0LAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA0LAotCS5ud2VfcHVsc2UJCT0gNCwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFLAotCS50ZGZfY3ljbGVzCQk9IDMsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9uYW5kKHZvaWQpCi17Ci0JZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNiA9IGJvYXJkX2hhdmVfbmFuZF8xNmJpdCgpOwotCS8qIHNldHVwIGJ1cy13aWR0aCAoOCBvciAxNikgKi8KLQlpZiAoZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNikKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzE2OwotCWVsc2UKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzg7Ci0KLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmVrX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKiB3cF9waW4gYW5kIHZjY19waW4gYXJlIG5vdCBjb25uZWN0ZWQKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0gewotCS5zbG90WzFdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQzksCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9tbWModm9pZCkKLXsKLQlpZiAoZWtfaGF2ZV8ybW1jKCkpIHsKLQkJZWtfbW1jX2RhdGEuc2xvdFswXS5idXNfd2lkdGggPSA0OwotCQlla19tbWNfZGF0YS5zbG90WzBdLmRldGVjdF9waW4gPSBBVDkxX1BJTl9QQzI7Ci0JCWVrX21tY19kYXRhLnNsb3RbMF0ud3BfcGluID0gLTE7Ci0JfQotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVrX21tY19kYXRhKTsKLX0KLQotLyoKLSAqIExFRHMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7Ci0JewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHM1IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBNiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQl9LAotCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLwotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTksCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9ncGlvX2xlZHModm9pZCkKLXsKLQlpZiAoZWtfaGF2ZV8ybW1jKCkpIHsKLQkJZWtfbGVkc1swXS5ncGlvID0gQVQ5MV9QSU5fUEI4OwotCQlla19sZWRzWzFdLmdwaW8gPSBBVDkxX1BJTl9QQjk7Ci0JfQotCi0JYXQ5MV9ncGlvX2xlZHMoZWtfbGVkcywgQVJSQVlfU0laRShla19sZWRzKSk7Ci19Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BBMzAsCi0JCS5jb2RlCQk9IEJUTl8zLAotCQkuZGVzYwkJPSAiQnV0dG9uIDMiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEzMSwKLQkJLmNvZGUJCT0gQlROXzQsCi0JCS5kZXNjCQk9ICJCdXR0b24gNCIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBla19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMzAsIDEpOwkvKiBidG4zICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEzMCwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTMxLCAxKTsJLyogYnRuNCAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMzEsIDEpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZla19idXR0b25fZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoKLSAqIEFEQ3MKLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfYWRjX2RhdGEgZWtfYWRjX2RhdGEgPSB7Ci0JLmNoYW5uZWxzX3VzZWQgPSBCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBCSVQoMyksCi0JLnVzZV9leHRlcm5hbF90cmlnZ2VycyA9IHRydWUsCi0JLnZyZWYgPSAzMzAwLAotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFKSB8fCBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZWtfYXVkaW9fY29uc3VtZXJfc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJBVkREIiwgIjAtMDAxYiIpLAotCVJFR1VMQVRPUl9TVVBQTFkoIkhQVkREIiwgIjAtMDAxYiIpLAotCVJFR1VMQVRPUl9TVVBQTFkoIkRCVkREIiwgIjAtMDAxYiIpLAotCVJFR1VMQVRPUl9TVVBQTFkoIkRDVkREIiwgIjAtMDAxYiIpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGVrX2F2ZGRfcmVnX2luaXRfZGF0YSA9IHsKLQkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCT0gIjNWMyIsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi0JLmNvbnN1bWVyX3N1cHBsaWVzID0gZWtfYXVkaW9fY29uc3VtZXJfc3VwcGxpZXMsCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoZWtfYXVkaW9fY29uc3VtZXJfc3VwcGxpZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyBla192ZGRfcGRhdGEgPSB7Ci0JLnN1cHBseV9uYW1lCT0gImJvYXJkLTNWMyIsCi0JLm1pY3Jvdm9sdHMJPSAzMzAwMDAwLAotCS5ncGlvCQk9IC1FSU5WQUwsCi0JLmVuYWJsZWRfYXRfYm9vdCA9IDAsCi0JLmluaXRfZGF0YQk9ICZla19hdmRkX3JlZ19pbml0X2RhdGEsCi19Owotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWtfdm9sdGFnZV9yZWd1bGF0b3IgPSB7Ci0JLm5hbWUJCT0gInJlZy1maXhlZC12b2x0YWdlIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZla192ZGRfcGRhdGEsCi0JfSwKLX07Ci1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX3JlZ3VsYXRvcnModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX3ZvbHRhZ2VfcmVndWxhdG9yKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX3JlZ3VsYXRvcnModm9pZCkge30KLSNlbmRpZgotCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSTJDX0JPQVJEX0lORk8oIjI0YzUxMiIsIDB4NTApCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBJMkNfQk9BUkRfSU5GTygid204NzMxIiwgMHgxYikKLSAgICAgICAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNhbTlnMjBla19hdWRpb19kZXZpY2UgPSB7Ci0JLm5hbWUgICA9ICJhdDkxc2FtOWcyMGVrLWF1ZGlvIiwKLQkuaWQgICAgID0gLTEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9hdWRpbyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2FtOWcyMGVrX2F1ZGlvX2RldmljZSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8IEFUTUVMX1VBUlRfRENECi0JCQkgICB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlla19hZGRfZGV2aWNlX21hY2IoKTsKLQkvKiBSZWd1bGF0b3JzICovCi0JZWtfYWRkX3JlZ3VsYXRvcnMoKTsKLQkvKiBNTUMgKi8KLQlla19hZGRfZGV2aWNlX21tYygpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoZWtfaTJjX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfaTJjX2RldmljZXMpKTsKLQkvKiBMRURzICovCi0JZWtfYWRkX2RldmljZV9ncGlvX2xlZHMoKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLQkvKiBBRENzICovCi0JYXQ5MV9hZGRfZGV2aWNlX2FkYygmZWtfYWRjX2RhdGEpOwotCS8qIFBDSzAgcHJvdmlkZXMgTUNMSyB0byB0aGUgV004NzMxICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsKLQkvKiBTU0MgKGZvciBXTTg3MzEpICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7Ci0JZWtfYWRkX2RldmljZV9hdWRpbygpOwotfQotCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05RzIwRUssICJBdG1lbCBBVDkxU0FNOUcyMC1FSyIpCi0JLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBla19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECi0KLU1BQ0hJTkVfU1RBUlQoQVQ5MVNBTTlHMjBFS18yTU1DLCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgMiBNTUMgU2xvdCBNb2QiKQotCS8qIE1haW50YWluZXI6IEF0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTE3YzdmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDUyNyArMCwwIEBACi0vKgotICogIEJvYXJkLXNwZWNpZmljIHNldHVwIGNvZGUgZm9yIHRoZSBBVDkxU0FNOU0xMEc0NSBFdmFsdWF0aW9uIEtpdCBmYW1pbHkKLSAqCi0gKiAgQ292ZXJzOiAqIEFUOTFTQU05RzQ1LUVLRVMgIGJvYXJkCi0gKiAgICAgICAgICAqIEFUOTFTQU05TTEwRzQ1LUVLIGJvYXJkCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvYXRtZWwtbWNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9wd20uaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzX3B3bS5oPgotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDkxX2FkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLSNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXRtZWwtaXNpLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9zeXN0ZW1fcmV2Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSFMgSG9zdCBwb3J0IChjb21tb24gdG8gT0hDSSAmIEVIQ0kpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2hzX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0ge0FUOTFfUElOX1BEMSwgQVQ5MV9QSU5fUEQzfSwKLQkudmJ1c19waW5fYWN0aXZlX2xvdyA9IHsxLCAxfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi0KLS8qCi0gKiBVU0IgSFMgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla191c2JhX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BCMTksCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi19OwotCi0KLS8qCi0gKiBNQ0kgKFNEL01NQykKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEQxMCwKLQkJLndwX3BpbgkJPSAtRUlOVkFMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMV9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QRDExLAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BEMjksCi0JfSwKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BENSwKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzY0TSwKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLS8qIGRldF9waW4gaXMgbm90IGNvbm5lY3RlZCAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBla19uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEM4LAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkub25fZmxhc2hfYmJ0CT0gMSwKLQkucGFydHMJCT0gZWtfbmFuZF9wYXJ0aXRpb24sCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoZWtfbmFuZF9wYXJ0aXRpb24pLAotfTsKLQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBla19uYW5kX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAyLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMiwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSA0LAotCS5ucmRfcHVsc2UJCT0gNCwKLQkubmNzX3dyaXRlX3B1bHNlCT0gNCwKLQkubndlX3B1bHNlCQk9IDQsCi0KLQkucmVhZF9jeWNsZQkJPSA3LAotCS53cml0ZV9jeWNsZQkJPSA3LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKLQkudGRmX2N5Y2xlcwkJPSAzLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCWVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYgPSBib2FyZF9oYXZlX25hbmRfMTZiaXQoKTsKLQkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCi0JaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKLQllbHNlCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OwotCi0JLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCi0Jc2FtOV9zbWNfY29uZmlndXJlKDAsIDMsICZla19uYW5kX3NtY19jb25maWcpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Ci19Ci0KLQotLyoKLSAqICBJU0kKLSAqLwotc3RhdGljIHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGlzaV9kYXRhID0gewotCS5mcmF0ZQkJCT0gSVNJX0NGRzFfRlJBVEVfQ0FQVFVSRV9BTEwsCi0JLyogdG8gdXNlIGNvZGVjIGFuZCBwcmV2aWV3IHBhdGggc2ltdWx0YW5lb3VzbHkgKi8KLQkuZnVsbF9tb2RlCQk9IDEsCi0JLmRhdGFfd2lkdGhfZmxhZ3MJPSBJU0lfREFUQVdJRFRIXzggfCBJU0lfREFUQVdJRFRIXzEwLAotCS8qIElTSV9NQ0sgaXMgcHJvdmlkZWQgYnkgcHJvZ3JhbW1hYmxlIGNsb2NrIG9yIGV4dGVybmFsIGNsb2NrICovCi0JLm1ja19oegkJCT0gMjUwMDAwMDAsCi19OwotCi0KLS8qCi0gKiBzb2MtY2FtZXJhIE9WMjY0MAotICovCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0NBTUVSQV9PVjI2NDApIHx8IFwKLQlkZWZpbmVkKENPTkZJR19TT0NfQ0FNRVJBX09WMjY0MF9NT0RVTEUpCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc2lfY2FtZXJhX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICpsaW5rKQotewotCS8qIElTSSBib2FyZCBmb3IgZWsgdXNpbmcgZGVmYXVsdCA4LWJpdHMgY29ubmVjdGlvbiAqLwotCXJldHVybiBTT0NBTV9EQVRBV0lEVEhfODsKLX0KLQotc3RhdGljIGludCBpMmNfY2FtZXJhX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9uKQotewotCS8qIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjYW1lcmEgKi8KLQlwcl9kZWJ1ZygiJXM6ICVzIHRoZSBjYW1lcmFcbiIsIF9fZnVuY19fLCBvbiA/ICJFTkFCTEUiIDogIkRJU0FCTEUiKTsKLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QRDEzLCAhb24pOwotCi0JaWYgKCFvbikKLQkJZ290byBvdXQ7Ci0KLQkvKiBJZiBlbmFibGVkLCBnaXZlIGEgcmVzZXQgaW1wdWxzZSAqLwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BEMTIsIDApOwotCW1zbGVlcCgyMCk7Ci0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEQxMiwgMSk7Ci0JbXNsZWVwKDEwMCk7Ci0KLW91dDoKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfY2FtZXJhID0gewotCUkyQ19CT0FSRF9JTkZPKCJvdjI2NDAiLCAweDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua19vdjI2NDAgPSB7Ci0JLmJ1c19pZAkJCT0gMCwKLQkuYm9hcmRfaW5mbwkJPSAmaTJjX2NhbWVyYSwKLQkuaTJjX2FkYXB0ZXJfaWQJCT0gMCwKLQkucG93ZXIJCQk9IGkyY19jYW1lcmFfcG93ZXIsCi0JLnF1ZXJ5X2J1c19wYXJhbQk9IGlzaV9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXNpX292MjY0MCA9IHsKLQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rX292MjY0MCwKLQl9LAotfTsKLSNlbmRpZgotCi0KLS8qCi0gKiBMQ0QgQ29udHJvbGxlcgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGF0OTFfdGZ0X3ZnYV9tb2Rlc1tdID0gewotCXsKLQkJLm5hbWUgICAgICAgICAgID0gIkxHIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gNDgwLAkJLnlyZXMJCT0gMjcyLAotCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoOTAwMCksCi0KLQkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAxLAotCQkudXBwZXJfbWFyZ2luCT0gNDAsCQkubG93ZXJfbWFyZ2luCT0gMSwKLQkJLmhzeW5jX2xlbgk9IDQ1LAkJLnZzeW5jX2xlbgk9IDEsCi0KLQkJLnN5bmMJCT0gMCwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7Ci0JLm1hbnVmYWN0dXJlcgk9ICJMRyIsCi0JLm1vbml0b3IgICAgICAgID0gIkxCMDQzV1ExIiwKLQotCS5tb2RlZGIJCT0gYXQ5MV90ZnRfdmdhX21vZGVzLAotCS5tb2RlZGJfbGVuCT0gQVJSQVlfU0laRShhdDkxX3RmdF92Z2FfbW9kZXMpLAotCS5oZm1pbgkJPSAxNTAwMCwKLQkuaGZtYXgJCT0gMTc2NDAsCi0JLnZmbWluCQk9IDU3LAotCS52Zm1heAkJPSA2NywKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTlHNDVfREVGQVVMVF9MQ0RDT04yIAkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9URlQgXAotCQkJCQl8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRSkKLQotLyogRHJpdmVyIGRhdGFzICovCi1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhID0gewotCS5sY2Rjb25faXNfYmFja2xpZ2h0CQk9IHRydWUsCi0JLmRlZmF1bHRfYnBwCQkJPSAzMiwKLQkuZGVmYXVsdF9kbWFjb24JCQk9IEFUTUVMX0xDRENfRE1BRU4sCi0JLmRlZmF1bHRfbGNkY29uMgkJPSBBVDkxU0FNOUc0NV9ERUZBVUxUX0xDRENPTjIsCi0JLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X21vbnNwZWNzLAotCS5ndWFyZF90aW1lCQkJPSA5LAotCS5sY2Rfd2lyaW5nX21vZGUJCT0gQVRNRUxfTENEQ19XSVJJTkdfUkdCLAotfTsKLQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGE7Ci0jZW5kaWYKLQotCi0vKgotICogQURDcyBhbmQgdG91Y2hzY3JlZW4KLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX2FkY19kYXRhIGVrX2FkY19kYXRhID0gewotCS5jaGFubmVsc191c2VkID0gQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpIHwgQklUKDQpIHwgQklUKDUpIHwgQklUKDYpIHwgQklUKDcpLAotCS51c2VfZXh0ZXJuYWxfdHJpZ2dlcnMgPSB0cnVlLAotCS52cmVmID0gMzMwMCwKLQkudG91Y2hzY3JlZW5fdHlwZSA9IEFUTUVMX0FEQ19UT1VDSFNDUkVFTl80V0lSRSwKLX07Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKLQl7CS8qIEJQMSwgImxlZnRjbGljIiAqLwotCQkuY29kZQkJPSBCVE5fTEVGVCwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEI2LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJsZWZ0X2NsaWNrIiwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewkvKiBCUDIsICJyaWdodGNsaWMiICovCi0JCS5jb2RlCQk9IEJUTl9SSUdIVCwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEI3LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJyaWdodF9jbGljayIsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCQkvKiBCUDMsICJqb3lzdGljayIgKi8KLQl7Ci0JCS5jb2RlCQk9IEtFWV9MRUZULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjE0LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJKb3lzdGljayBMZWZ0IiwKLQl9LAotCXsKLQkJLmNvZGUJCT0gS0VZX1JJR0hULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjE1LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJKb3lzdGljayBSaWdodCIsCi0JfSwKLQl7Ci0JCS5jb2RlCQk9IEtFWV9VUCwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiSm95c3RpY2sgVXAiLAotCX0sCi0JewotCQkuY29kZQkJPSBLRVlfRE9XTiwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNywKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiSm95c3RpY2sgRG93biIsCi0JfSwKLQl7Ci0JCS5jb2RlCQk9IEtFWV9FTlRFUiwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxOCwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiSm95c3RpY2sgUHJlc3MiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGVrX2J1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gZWtfYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGVrX2J1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWtfYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZla19idXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShla19idXR0b25zKTsgaSsrKSB7Ci0JCWF0OTFfc2V0X0dQSU9fcGVyaXBoKGVrX2J1dHRvbnNbaV0uZ3BpbywgMSk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGVrX2J1dHRvbnNbaV0uZ3BpbywgMSk7Ci0JfQotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZla19idXR0b25fZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKgotICogQUM5NwotICogcmVzZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQ6IE5SU1QKLSAqLwotc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGVrX2FjOTdfZGF0YSA9IHsKLQkucmVzZXRfcGluCT0gLUVJTlZBTCwKLX07Ci0KLQotLyoKLSAqIExFRHMgLi4uIHRoZXNlIGNvdWxkIGFsbCBiZSBQV00tZHJpdmVuLCBmb3IgdmFyaWFibGUgYnJpZ2h0bmVzcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKLQl7CS8qICJ0b3AiIGxlZCwgcmVkLCBwb3dlcmxlZCAqLwotCQkubmFtZQkJCT0gImQ4IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMzAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9LAotCXsJLyogImxlZnQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQyLCBwd20zICovCi0JCS5uYW1lCQkJPSAiZDYiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQwLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCi0JfSwKLSNpZiAhSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JewkvKiAicmlnaHQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQxLCBwd20xICovCi0JCS5uYW1lCQkJPSAiZDciLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQzMSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJtbWMwIiwKLQl9LAotI2VuZGlmCi19OwotCi0KLS8qCi0gKiBQV00gTGVkcwotICovCi1zdGF0aWMgc3RydWN0IHB3bV9sb29rdXAgcHdtX2xvb2t1cFtdID0gewotCVBXTV9MT09LVVAoImF0OTFzYW05cmwtcHdtIiwgMSwgImxlZHNfcHdtIiwgImQ3IiwKLQkJICAgNTAwMCwgUFdNX1BPTEFSSVRZX0lOVkVSU0VEKSwKLX07Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19MRURTX1BXTSkKLXN0YXRpYyBzdHJ1Y3QgbGVkX3B3bSBwd21fbGVkc1tdID0gewotCXsJLyogInJpZ2h0IiBsZWQsIGdyZWVuLCB1c2VybGVkMSwgcHdtMSAqLwotCQkubmFtZSA9ICJkNyIsCi0JCS5tYXhfYnJpZ2h0bmVzcwk9IDI1NSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBsZWRfcHdtX3BsYXRmb3JtX2RhdGEgcHdtX2RhdGEgPSB7Ci0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShwd21fbGVkcyksCi0JLmxlZHMJCT0gcHdtX2xlZHMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZWRzX3B3bSA9IHsKLQkubmFtZQk9ICJsZWRzX3B3bSIsCi0JLmlkCT0gLTEsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcHdtX2RhdGEsCi0JfSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19DQU1FUkFfT1YyNjQwKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfU09DX0NBTUVSQV9PVjI2NDBfTU9EVUxFKQotCSZpc2lfb3YyNjQwLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JJmxlZHNfcHdtLAotI2VuZGlmCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgbm90IGNvbm5lY3RlZCBvbiB0aGUgLUVLIGJvYXJkICovCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTlHNDVfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhTIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKCZla191c2JoX2hzX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91c2JoX2VoY2koJmVrX3VzYmhfaHNfZGF0YSk7Ci0JLyogVVNCIEhTIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91c2JhKCZla191c2JhX3VkY19kYXRhKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7Ci0JLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmbWNpMF9kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDEsICZtY2kxX2RhdGEpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYygwLCBOVUxMLCAwKTsKLQkvKiBJU0ksIHVzaW5nIHByb2dyYW1tYWJsZSBjbG9jayBhcyBJU0lfTUNLICovCi0JYXQ5MV9hZGRfZGV2aWNlX2lzaSgmaXNpX2RhdGEsIHRydWUpOwotCS8qIExDRCBDb250cm9sbGVyICovCi0JYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Ci0JLyogQURDIGFuZCB0b3VjaHNjcmVlbiAqLwotCWF0OTFfYWRkX2RldmljZV9hZGMoJmVrX2FkY19kYXRhKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLQkvKiBBQzk3ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2FjOTcoJmVrX2FjOTdfZGF0YSk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwotCXB3bV9hZGRfdGFibGUocHdtX2xvb2t1cCwgQVJSQVlfU0laRShwd21fbG9va3VwKSk7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JYXQ5MV9hZGRfZGV2aWNlX3B3bSgxIDw8IEFUOTFfUFdNMSk7Ci0jZW5kaWYKLQkvKiBPdGhlciBwbGF0Zm9ybSBkZXZpY2VzICovCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQVQ5MVNBTTlNMTBHNDVFSywgIkF0bWVsIEFUOTFTQU05TTEwRzQ1LUVLIikKLQkvKiBNYWludGFpbmVyOiBBdG1lbCAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGVrX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiY2EzMjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0OTFfYWRjLmg+Ci0KLSNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotCi0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSFMgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla191c2JhX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BBOCwKLX07Ci0KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQTE1LAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLQotLyoKLSAqIE5BTkQgZmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgZWtfbmFuZF9wYXJ0aXRpb25bXSA9IHsKLQl7Ci0JCS5uYW1lCT0gIlBhcnRpdGlvbiAxIiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gU1pfMjU2SywKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QRDE3LAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEI2LAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi0JLm9uX2ZsYXNoX2JidAk9IDEsCi0JLnBhcnRzCQk9IGVrX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGVrX25hbmRfcGFydGl0aW9uKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMSwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDEsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gMywKLQkubnJkX3B1bHNlCQk9IDMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDMsCi0JLm53ZV9wdWxzZQkJPSAzLAotCi0JLnJlYWRfY3ljbGUJCT0gNSwKLQkud3JpdGVfY3ljbGUJCT0gNSwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCAzLCAmZWtfbmFuZF9zbWNfY29uZmlnKTsKLQotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOwotfQotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcwotICovCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLX07Ci0KLQotLyoKLSAqIExDRCBDb250cm9sbGVyCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7Ci0JewotCQkubmFtZQkJPSAiVFgwOUQ1MFZNMUNDQSBAIDYwIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gMjQwLAkJLnlyZXMJCT0gMzIwLAotCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNDk2NSksCi0KLQkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAzMywKLQkJLnVwcGVyX21hcmdpbgk9IDEsCQkubG93ZXJfbWFyZ2luCT0gMCwKLQkJLmhzeW5jX2xlbgk9IDUsCQkudnN5bmNfbGVuCT0gMSwKLQotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7Ci0JLm1hbnVmYWN0dXJlcgk9ICJISVQiLAotCS5tb25pdG9yCT0gIlRYMDlENTBWTTFDQ0EiLAotCi0JLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCi0JLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCi0JLmhmbWluCQk9IDE1MDAwLAotCS5oZm1heAkJPSA2NDAwMCwKLQkudmZtaW4JCT0gNTAsCi0JLnZmbWF4CQk9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTlSTF9ERUZBVUxUX0xDRENPTjIJKEFUTUVMX0xDRENfTUVNT1JfTElUVExFIFwKLQkJCQkJfCBBVE1FTF9MQ0RDX0RJU1RZUEVfVEZUIFwKLQkJCQkJfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUpCi0KLXN0YXRpYyB2b2lkIGF0OTFfbGNkY19wb3dlcl9jb250cm9sKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqcGRhdGEsIGludCBvbikKLXsKLQlpZiAob24pCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEMxLCAwKTsJLyogcG93ZXIgdXAgKi8KLQllbHNlCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEMxLCAxKTsJLyogcG93ZXIgZG93biAqLwotfQotCi0vKiBEcml2ZXIgZGF0YXMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmxjZGNvbl9pc19iYWNrbGlnaHQgICAgICAgICAgICA9IHRydWUsCi0JLmRlZmF1bHRfYnBwCQkJPSAxNiwKLQkuZGVmYXVsdF9kbWFjb24JCQk9IEFUTUVMX0xDRENfRE1BRU4sCi0JLmRlZmF1bHRfbGNkY29uMgkJPSBBVDkxU0FNOVJMX0RFRkFVTFRfTENEQ09OMiwKLQkuZGVmYXVsdF9tb25zcGVjcwkJPSAmYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MsCi0JLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wJPSBhdDkxX2xjZGNfcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLQkubGNkX3dpcmluZ19tb2RlCQk9IEFUTUVMX0xDRENfV0lSSU5HX1JHQiwKLX07Ci0KLSNlbHNlCi1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhOwotI2VuZGlmCi0KLQotLyoKLSAqIEFDOTcKLSAqIHJlc2V0X3BpbiBpcyBub3QgY29ubmVjdGVkOiBOUlNUCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBla19hYzk3X2RhdGEgPSB7Ci0JLnJlc2V0X3Bpbgk9IC1FSU5WQUwsCi19OwotCi0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDEgdG8gYmUgZGVmaW5lZCAqLwotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QRDE1LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sCi0JewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMiB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHMyIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMTYsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwKLQl7CS8qICJwb3dlciIgbGVkLCB5ZWxsb3cgKi8KLQkJLm5hbWUJCQk9ICJkczMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQxNCwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0KLX07Ci0KLQotLyoKLSAqIEFEQyArIFRvdWNoc2NyZWVuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSBla19hZGNfZGF0YSA9IHsKLQkuY2hhbm5lbHNfdXNlZCA9IEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSwKLQkudXNlX2V4dGVybmFsX3RyaWdnZXJzID0gdHJ1ZSwKLQkudnJlZiA9IDMzMDAsCi0JLnRvdWNoc2NyZWVuX3R5cGUgPSBBVE1FTF9BRENfVE9VQ0hTQ1JFRU5fNFdJUkUsCi19OwotCi0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BCMCwKLQkJLmNvZGUJCT0gQlROXzIsCi0JCS5kZXNjCQk9ICJSaWdodCBDbGljayIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjEsCi0JCS5jb2RlCQk9IEJUTl8xLAotCQkuZGVzYwkJPSAiTGVmdCBDbGljayIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBla19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMSwgMSk7CS8qIGJ0bjEgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjEsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIwLCAxKTsJLyogYnRuMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMCwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KLSNlbmRpZgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05UkxfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhTICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmEoJmVrX3VzYmFfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogTkFORCAqLwotCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZtY2kwX2RhdGEpOwotCS8qIExDRCBDb250cm9sbGVyICovCi0JYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Ci0JLyogQUM5NyAqLwotCWF0OTFfYWRkX2RldmljZV9hYzk3KCZla19hYzk3X2RhdGEpOwotCS8qIFRvdWNoIFNjcmVlbiBDb250cm9sbGVyICsgQURDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2FkYygmZWtfYWRjX2RhdGEpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxU0FNOVJMRUssICJBdG1lbCBBVDkxU0FNOVJMLUVLIikKLQkvKiBNYWludGFpbmVyOiBBdG1lbCAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGVrX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YWZmODQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAxMCBCbHVld2F0ZXIgU3lzdGVtIEx0ZAotICoKLSAqIEF1dGhvcjogQW5kcmUgUmVuYXVkIDxhbmRyZUBibHVld2F0ZXJzeXMuY29tPgotICogQXV0aG9yOiBSeWFuIE1hbGxvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvcGNhOTUzeC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLSNkZWZpbmUgU05BUFBFUjkyNjBfSU9fRVhQX0dQSU8oeCkJKE5SX0JVSUxUSU5fR1BJTyArICh4KSkKLQotc3RhdGljIHZvaWQgX19pbml0IHNuYXBwZXI5MjYwX2luaXRfZWFybHkodm9pZCkKLXsKLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgc25hcHBlcjkyNjBfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBzbmFwcGVyOTI2MF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JCT0gU05BUFBFUjkyNjBfSU9fRVhQX0dQSU8oNSksCi0JLnZidXNfYWN0aXZlX2xvdwk9IDEsCi0JLnZidXNfcG9sbGVkCQk9IDEsCi0JLnB1bGx1cF9waW4JCT0gLUVJTlZBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHNuYXBwZXI5MjYwX21hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSAtRUlOVkFMLAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX25hbmRfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJPSAiUHJlYm9vdCIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzEyOEssCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQk9IFNaXzI1NkssCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkVudmlyb25tZW50IiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJPSBTWl8xMjhLLAotCX0sCi0JewotCQkubmFtZQk9ICJLZXJuZWwiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQk9IFNaXzRNLAotCX0sCi0JewotCQkubmFtZQk9ICJGaWxlc3lzdGVtIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIxLAotCS5jbGUJCT0gMjIsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQzEzLAotCS5wYXJ0cwkJPSBzbmFwcGVyOTI2MF9uYW5kX3BhcnRpdGlvbnMsCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoc25hcHBlcjkyNjBfbmFuZF9wYXJ0aXRpb25zKSwKLQkuYnVzX3dpZHRoXzE2CT0gMCwKLQkuZW5hYmxlX3Bpbgk9IC1FSU5WQUwsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDAsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAwLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDUsCi0JLm5yZF9wdWxzZQkJPSAyLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA1LAotCS5ud2VfcHVsc2UJCT0gMiwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gKEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwKLQkJCQkgICBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFKSwKLQkudGRmX2N5Y2xlcwkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgc25hcHBlcjkyNjBfaW9fZXhwYW5kZXJfZGF0YSA9IHsKLQkuZ3Bpb19iYXNlCQk9IFNOQVBQRVI5MjYwX0lPX0VYUF9HUElPKDApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQkvKiBJTyBleHBhbmRlciAqLwotCQlJMkNfQk9BUkRfSU5GTygibWF4NzMxMiIsIDB4MjgpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZzbmFwcGVyOTI2MF9pb19leHBhbmRlcl9kYXRhLAotCX0sCi0JewotCQkvKiBBdWRpbyBjb2RlYyAqLwotCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMjMiLCAweDFhKSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX2kyY19pc2wxMjA4ID0gewotCQkvKiBSVEMgKi8KLQkJSTJDX0JPQVJEX0lORk8oImlzbDEyMDgiLCAweDZmKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzbmFwcGVyOTI2MF9hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAwKTsKLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJnNuYXBwZXI5MjYwX25hbmRfc21jX2NvbmZpZyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJnNuYXBwZXI5MjYwX25hbmRfZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzbmFwcGVyOTI2MF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKHNuYXBwZXI5MjYwX2kyY19kZXZpY2VzLAotCQkJICAgIEFSUkFZX1NJWkUoc25hcHBlcjkyNjBfaTJjX2RldmljZXMpKTsKLQotCXNuYXBwZXI5MjYwX2kyY19pc2wxMjA4LmlycSA9IGdwaW9fdG9faXJxKEFUOTFfUElOX1BBMzEpOwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZzbmFwcGVyOTI2MF9pMmNfaXNsMTIwOCwgMSk7Ci0KLQkvKiBEZWJ1ZyBvbiB0dHlTMCAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsCi0JCQkgICBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLAotCQkJICAgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMiwgMywgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZzbmFwcGVyOTI2MF91c2JoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnNuYXBwZXI5MjYwX3VkY19kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZzbmFwcGVyOTI2MF9tYWNiX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV9zc2MoQVQ5MVNBTTkyNjBfSURfU1NDLCAoQVRNRUxfU1NDX1RGIHwgQVRNRUxfU1NDX1RLIHwKLQkJCQkJCSBBVE1FTF9TU0NfVEQgfCBBVE1FTF9TU0NfUkQpKTsKLQlzbmFwcGVyOTI2MF9hZGRfZGV2aWNlX25hbmQoKTsKLX0KLQotTUFDSElORV9TVEFSVChTTkFQUEVSXzkyNjAsICJCbHVld2F0ZXIgU3lzdGVtcyBTbmFwcGVyIDkyNjAvOUcyMCBtb2R1bGUiKQotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IHNuYXBwZXI5MjYwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBzbmFwcGVyOTI2MF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc3RhbXA5ZzIwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc3RhbXA5ZzIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MjU2NDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXN0YW1wOWcyMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzdGlhbiBHbGluZGthbXAgPGNocmlzdGlhbi5nbGluZGthbXBAdGFza2l0LmRlPgotICogICAgICAgICAgICAgICAgICAgICB0YXNraXQgR21iSAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdzEtZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotdm9pZCBfX2luaXQgc3RhbXA5ZzIwX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotLyoKLSAqIE5BTkQgZmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBuYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmJ1c193aWR0aF8xNgk9IDAsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIG5hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDIsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAyLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDQsCi0JLm5yZF9wdWxzZQkJPSA0LAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA0LAotCS5ud2VfcHVsc2UJCT0gNCwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCi0JLnRkZl9jeWNsZXMJCT0gMywKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJm5hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKiBkZXRfcGluLCB3cF9waW4gYW5kIHZjY19waW4gYXJlIG5vdCBjb25uZWN0ZWQKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1tY19kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSAtMSwKLQkJLndwX3BpbgkJPSAtMSwKLQl9LAotfTsKLQotCi0vKgotICogVVNCIEhvc3QgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgcG9ydHV4ZzIwX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDNywKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHN0YW1wOWcyMGV2Yl91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQTIyLAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0vKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEEyOCwKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcG9ydHV4ZzIwX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQkJPSAiTEVEMiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzUsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM0LAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sIHsKLQkJLm5hbWUJCQk9ICJMRUQ0IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BDMTAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHN0YW1wOWcyMGV2Yl9sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gIkQ4IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTgsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwgewotCQkubmFtZQkJCT0gIkQ5IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwgewotCQkubmFtZQkJCT0gIkQxMCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjIwLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfQotfTsKLQotCi0vKgotICogU1BJIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwb3J0dXhnMjBfc3BpX2RldmljZXNbXSA9IHsKLQl7Ci0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwgewotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDEgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAxLAotCX0sCi19OwotCi0KLS8qCi0gKiBEYWxsYXMgMS1XaXJlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdzFfZ3Bpb19wbGF0Zm9ybV9kYXRhIHcxX2dwaW9fcGRhdGEgPSB7Ci0JLnBpbgkJPSBBVDkxX1BJTl9QQTI5LAotCS5pc19vcGVuX2RyYWluCT0gMSwKLQkuZXh0X3B1bGx1cF9lbmFibGVfcGluCT0gLUVJTlZBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHcxX2RldmljZSA9IHsKLQkubmFtZQkJCT0gIncxLWdwaW8iLAotCS5pZAkJCT0gLTEsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJncxX2dwaW9fcGRhdGEsCi19OwotCi12b2lkIGFkZF93MSh2b2lkKQotewotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKHcxX2dwaW9fcGRhdGEucGluLCAxKTsKLQlhdDkxX3NldF9tdWx0aV9kcml2ZSh3MV9ncGlvX3BkYXRhLnBpbiwgMSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3MV9kZXZpY2UpOwotfQotCi0KLXZvaWQgX19pbml0IHN0YW1wOWcyMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIE5BTkQgKi8KLQlhZGRfZGV2aWNlX25hbmQoKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZtbWNfZGF0YSk7Ci0JLyogVzEgKi8KLQlhZGRfdzEoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBvcnR1eGcyMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJCQkJfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSCi0JCQkJCQl8IEFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzIuIChSeCwgVHgsIENUUywgUlRTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOwotCi0JLyogVVNBUlQyIG9uIHR0eVMzLiAoUngsIFR4LCBDVFMsIFJUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMyLCAzLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUNCBvbiB0dHlTNS4gKFJ4LCBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzQsIDUsIDApOwotCi0JLyogVVNBUlQ1IG9uIHR0eVM2LiAoUngsIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTNSwgNiwgMCk7Ci0Jc3RhbXA5ZzIwX2JvYXJkX2luaXQoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZ1c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZwb3J0dXhnMjBfdWRjX2RhdGEpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmbWFjYl9kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkocG9ydHV4ZzIwX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBvcnR1eGcyMF9zcGlfZGV2aWNlcykpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhwb3J0dXhnMjBfbGVkcywgQVJSQVlfU0laRShwb3J0dXhnMjBfbGVkcykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc3RhbXA5ZzIwZXZiX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQkJCQl8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IKLQkJCQkJCXwgQVRNRUxfVUFSVF9EQ0QgfCBBVE1FTF9VQVJUX1JJKTsKLQlzdGFtcDlnMjBfYm9hcmRfaW5pdCgpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJnVzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnN0YW1wOWcyMGV2Yl91ZGNfZGF0YSk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZtYWNiX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKHN0YW1wOWcyMGV2Yl9sZWRzLCBBUlJBWV9TSVpFKHN0YW1wOWcyMGV2Yl9sZWRzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoUE9SVFVYRzIwLCAidGFza2l0IFBvcnR1eEcyMCIpCi0JLyogTWFpbnRhaW5lcjogdGFza2l0IEdtYkggKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBzdGFtcDlnMjBfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IHBvcnR1eGcyMF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKLQotTUFDSElORV9TVEFSVChTVEFNUDlHMjAsICJ0YXNraXQgU3RhbXA5RzIwIikKLQkvKiBNYWludGFpbmVyOiB0YXNraXQgR21iSCAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IHN0YW1wOWcyMF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gc3RhbXA5ZzIwZXZiX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC15bC05MjAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZmRiMGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYworKysgL2Rldi9udWxsCkBAIC0xLDU5NyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYwotICoKLSAqIEFkYXB0ZWQgZnJvbSB2YXJpb3VzIGJvYXJkIGZpbGVzIGluIGFyY2gvYXJtL21hY2gtYXQ5MQotICoKLSAqIE1vZGlmaWNhdGlvbnMgZm9yIFlMLTkyMDAgcGxhdGZvcm06Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IFMuIEJpcnRsZXMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IHlsOTIwMF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogU2V0IGNwdSB0eXBlOiBQUUZQICovCi0JYXQ5MXJtOTIwMF9zZXRfdHlwZShBUkNIX1JFVklTT05fOTIwMF9QUUZQKTsKLQotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHlsOTIwMF9sZWRzW10gPSB7Ci0JewkvKiBEMiAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxNywKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJ0aW1lciIsCi0JfSwKLQl7CS8qIEQzICovCi0JCS5uYW1lCQkJPSAibGVkMyIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfSwKLQl7CS8qIEQ0ICovCi0JCS5uYW1lCQkJPSAibGVkNCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE1LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCX0sCi0JewkvKiBENSAqLwotCQkubmFtZQkJCT0gImxlZDUiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI4LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCX0KLX07Ci0KLS8qCi0gKiBFdGhlcm5ldAotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIHlsOTIwMF9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JCT0gQVQ5MV9QSU5fUEIyOCwKLQkuaXNfcm1paQkJPSAxLAotfTsKLQotLyoKLSAqIFVTQiBIb3N0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSB5bDkyMDBfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJCT0gMSwJLyogUFFGUCB2ZXJzaW9uIG9mIEFUOTFSTTkyMDAgKi8KLQkudmJ1c19waW4JCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHlsOTIwMF91ZGNfZGF0YSA9IHsKLQkucHVsbHVwX3BpbgkJPSBBVDkxX1BJTl9QQzQsCi0JLnZidXNfcGluCQk9IEFUOTFfUElOX1BDNSwKLQkucHVsbHVwX2FjdGl2ZV9sb3cJPSAxLAkvKiBBY3RpdmUgTG93IGR1ZSB0byBQTlAgdHJhbnNpc3RvciAocGcgNykgKi8KLQotfTsKLQotLyoKLSAqIE1NQwotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgeWw5MjAwX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEI5LAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLS8qCi0gKiBOQU5EIEZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIHlsOTIwMF9uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAiQVQ5MSBOQU5EIHBhcnRpdGlvbiAxLCBib290IiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gU1pfMjU2SwotCX0sCi0JewotCQkubmFtZQk9ICJBVDkxIE5BTkQgcGFydGl0aW9uIDIsIGtlcm5lbCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gKDIgKiBTWl8xTSkgLSBTWl8yNTZLCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkFUOTEgTkFORCBwYXJ0aXRpb24gMywgZmlsZXN5c3RlbSIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gMTQgKiBTWl8xTQotCX0sCi0JewotCQkubmFtZQk9ICJBVDkxIE5BTkQgcGFydGl0aW9uIDQsIHN0b3JhZ2UiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IFNaXzE2TQotCX0sCi0JewotCQkubmFtZQk9ICJBVDkxIE5BTkQgcGFydGl0aW9uIDUsIGV4dC1mcyIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gU1pfMzJNCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSB5bDkyMDBfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gNiwKLQkuY2xlCQk9IDcsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxNCwJLyogUi8hQiAoU2hlZXQxMCkgKi8KLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTUsCS8qICFDRSAgKFNoZWV0MTApICovCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkucGFydHMJCT0geWw5MjAwX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKHlsOTIwMF9uYW5kX3BhcnRpdGlvbiksCi19OwotCi0vKgotICogTk9SIEZsYXNoCi0gKi8KLSNkZWZpbmUgWUw5MjAwX0ZMQVNIX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKLSNkZWZpbmUgWUw5MjAwX0ZMQVNIX1NJWkUJU1pfMTZNCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB5bDkyMDBfZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJCT0gIkJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5zaXplCQk9IFNaXzI1NkssCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJLZXJuZWwiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJCT0gKDIgKiBTWl8xTSkgLSBTWl8yNTZLCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJGaWxlc3lzdGVtIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSB5bDkyMDBfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gMiwKLQkucGFydHMJCT0geWw5MjAwX2ZsYXNoX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRSh5bDkyMDBfZmxhc2hfcGFydGl0aW9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHlsOTIwMF9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IFlMOTIwMF9GTEFTSF9CQVNFLAotCQkuZW5kCT0gWUw5MjAwX0ZMQVNIX0JBU0UgKyBZTDkyMDBfRkxBU0hfU0laRSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHlsOTIwMF9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmeWw5MjAwX2ZsYXNoX2RhdGEsCi0JCQl9LAotCS5yZXNvdXJjZQk9IHlsOTIwMF9mbGFzaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHlsOTIwMF9mbGFzaF9yZXNvdXJjZXMpLAotfTsKLQotLyoKLSAqIEkyQyAoVFdJKQotICovCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgeWw5MjAwX2kyY19kZXZpY2VzW10gPSB7Ci0JewkvKiBFRVBST00gKi8KLQkJSTJDX0JPQVJEX0lORk8oIjI0YzEyOCIsIDB4NTApLAotCX0KLX07Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24geWw5MjAwX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BBMjQsCi0JCS5jb2RlCQk9IEJUTl8yLAotCQkuZGVzYwkJPSAiU1cyIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BCMSwKLQkJLmNvZGUJCT0gQlROXzMsCi0JCS5kZXNjCQk9ICJTVzMiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIyLAotCQkuY29kZQkJPSBCVE5fNCwKLQkJLmRlc2MJCT0gIlNXNCIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjYsCi0JCS5jb2RlCQk9IEJUTl81LAotCQkuZGVzYwkJPSAiU1c1IiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSB5bDkyMDBfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSB5bDkyMDBfYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHlsOTIwMF9idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHlsOTIwMF9idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnlsOTIwMF9idXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQotewotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEyNCwgMSk7CS8qIFNXMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMjQsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIxLCAxKTsJLyogU1czICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEIxLCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMiwgMSk7CS8qIFNXNCAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMiwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjYsIDEpOwkvKiBTVzUgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjYsIDEpOwotCi0JLyogRW5hYmxlIGJ1dHRvbnMgKFNoZWV0IDUpICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEI3LCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmeWw5MjAwX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCB5bDkyMDBfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoKLSAqIFRvdWNoc2NyZWVuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLXN0YXRpYyBpbnQgYWRzNzg0M19wZW5kb3duX3N0YXRlKHZvaWQpCi17Ci0JcmV0dXJuICFhdDkxX2dldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BCMTEpOwkvKiBUb3VjaHNjcmVlbiBQRU5JUlEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgYWRzX2luZm8gPSB7Ci0JLm1vZGVsCQkJPSA3ODQzLAotCS54X21pbgkJCT0gMTUwLAotCS54X21heAkJCT0gMzgzMCwKLQkueV9taW4JCQk9IDE5MCwKLQkueV9tYXgJCQk9IDM4MzAsCi0JLnZyZWZfZGVsYXlfdXNlY3MJPSAxMDAsCi0KLQkvKiBGb3IgYSA4IiB0b3VjaC1zY3JlZW4gKi8KLQkvLyAueF9wbGF0ZV9vaG1zCQk9IDYwMywKLQkvLyAueV9wbGF0ZV9vaG1zCQk9IDMzMiwKLQotCS8qIEZvciBhIDEwLjQiIHRvdWNoLXNjcmVlbiAqLwotCS8vIC54X3BsYXRlX29obXMJCT0gNjExLAotCS8vIC55X3BsYXRlX29obXMJCT0gMzI1LAotCi0JLnhfcGxhdGVfb2htcwkJPSA1NzYsCi0JLnlfcGxhdGVfb2htcwkJPSAzNjYsCi0KLQkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLCAvKiBnZW5lcmFsbHkgbm9uc2Vuc2Ugb24gdGhlIDc4NDMgKi8KLQkuZGVib3VuY2VfbWF4CQk9IDEsCi0JLmRlYm91bmNlX3JlcAkJPSAwLAotCS5kZWJvdW5jZV90b2wJCT0gKH4wKSwKLQkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQzX3BlbmRvd25fc3RhdGUsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfdHModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMTEsIDEpOwkvKiBUb3VjaHNjcmVlbiBpbnRlcnJ1cHQgcGluICovCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjEwLCAxKTsJLyogVG91Y2hzY3JlZW4gQlVTWSBzaWduYWwgLSBub3QgdXNlZCEgKi8KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfdHModm9pZCkge30KLSNlbmRpZgotCi0vKgotICogU1BJIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyB5bDkyMDBfc3BpX2RldmljZXNbXSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQl7CS8qIFRvdWNoc2NyZWVuICovCi0JCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDUwMDAgKiAyNiwKLQkJLnBsYXRmb3JtX2RhdGEJPSAmYWRzX2luZm8sCi0JCS5pcnEJCT0gQVQ5MV9QSU5fUEIxMSwKLQl9LAotI2VuZGlmCi0JewkvKiBDQU4gKi8KLQkJLm1vZGFsaWFzCT0gIm1jcDI1MTAiLAotCQkuY2hpcF9zZWxlY3QJPSAxLAotCQkubWF4X3NwZWVkX2h6CT0gMjUwMDAgKiAyNiwKLQkJLmlycQkJPSBBVDkxX1BJTl9QQzAsCi0JfQotfTsKLQotLyoKLSAqIExDRCAvIFZHQQotICoKLSAqIEVQU09OIFMxRDEzODA2IEZCIChkaXNjb250aW51ZWQgY2hpcCkKLSAqIEVQU09OIFMxRDEzNTA2IEZCCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9TMUQxM1hYWCkgfHwgZGVmaW5lZChDT05GSUdfRkJfUzFEMTNYWFhfTU9EVUxFKQotI2luY2x1ZGUgPHZpZGVvL3MxZDEzeHh4ZmIuaD4KLQotCi1zdGF0aWMgdm9pZCB5bDkyMDBfaW5pdF92aWRlbyh2b2lkKQotewotCS8qIE5XQUlUIFNpZ25hbCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNiwgMCk7Ci0KLQkvKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIGZvciBDaGlwIFNlbGVjdCAyICovCi0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfU01DX0NTUigyKSwgQVQ5MV9TTUNfREJXXzE2CQkvKiAxNiBiaXQgKi8KLQkJCXwgQVQ5MV9TTUNfV1NFTiB8IEFUOTFfU01DX05XU18oMHg0KQkvKiB3YWl0IHN0YXRlcyAqLwotCQkJfCBBVDkxX1NNQ19UREZfKDB4MTAwKQkJCS8qIGZsb2F0IHRpbWUgKi8KLQkpOwotfQotCi1zdGF0aWMgc3RydWN0IHMxZDEzeHh4ZmJfcmVndmFsIHlsOTIwMF9zMWRmYl9pbml0cmVnc1tdID0KLXsKLQl7UzFEUkVHX01JU0MsCQkJMHgwMH0sCS8qIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ09NX0RJU1BfTU9ERSwJCTB4MDF9LAkvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIsIExDRCBvbmx5Ki8KLQl7UzFEUkVHX0dQSU9fQ05GMCwJCTB4MDB9LAkvKiBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19HUElPX0NUTDAsCQkweDAwfSwJLyogR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ0xLX0NORiwJCTB4MTF9LAkvKiBNZW1vcnkgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfQ0xLX0NORiwJCTB4MTB9LAkvKiBMQ0QgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfQ0xLX0NORiwJCTB4MTJ9LAkvKiBDUlQvVFYgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19NUExVR19DTEtfQ05GLAkJMHgwMX0sCS8qIE1lZGlhUGx1ZyBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NQVTJNRU1fV1NUX1NFTCwJMHgwMn0sCS8qIENQVSBUbyBNZW1vcnkgV2FpdCBTdGF0ZSBTZWxlY3QgUmVnaXN0ZXIqLwotCXtTMURSRUdfTUVNX0NORiwJCTB4MDB9LAkvKiBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19TRFJBTV9SRUZfUkFURSwJCTB4MDR9LAkvKiBEUkFNIFJlZnJlc2ggUmF0ZSBSZWdpc3RlciwgTUNMSyBzb3VyY2UqLwotCXtTMURSRUdfU0RSQU1fVEMwLAkJMHgxMn0sCS8qIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfU0RSQU1fVEMxLAkJMHgwMn0sCS8qIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfUEFORUxfVFlQRSwJCTB4MjV9LAkvKiBQYW5lbCBUeXBlIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX01PRF9SQVRFLAkJMHgwMH0sCS8qIE1PRCBSYXRlIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9ESVNQX0hXSURUSCwJMHg0Rn0sCS8qIExDRCBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX05ESVNQX0hQRVIsCQkweDEzfSwJLyogTENEIEhvcml6b250YWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX1RGVF9GUExJTkVfU1RBUlQsCTB4MDF9LAkvKiBURlQgRlBMSU5FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX1RGVF9GUExJTkVfUFdJRFRILAkweDBjfSwJLyogVEZUIEZQTElORSBQdWxzZSBXaWR0aCBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfRElTUF9WSEVJR0hUMCwJMHhERn0sCS8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0xDRF9ESVNQX1ZIRUlHSFQxLAkweDAxfSwJLyogTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfTENEX05ESVNQX1ZQRVIsCQkweDJjfSwJLyogTENEIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCi0Je1MxRFJFR19URlRfRlBGUkFNRV9TVEFSVCwJMHgwYX0sCS8qIFRGVCBGUEZSQU1FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX1RGVF9GUEZSQU1FX1BXSURUSCwJMHgwMn0sCS8qIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9ESVNQX01PREUsCQkweDA1fSwJLyogTENEIERpc3BsYXkgTW9kZSBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfTUlTQywJCTB4MDF9LAkvKiBMQ0QgTWlzY2VsbGFuZW91cyBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfRElTUF9TVEFSVDAsCTB4MDB9LAkvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfTENEX0RJU1BfU1RBUlQxLAkweDAwfSwJLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0xDRF9ESVNQX1NUQVJUMiwJMHgwMH0sCS8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiovCi0Je1MxRFJFR19MQ0RfTUVNX09GRjAsCQkweDgwfSwJLyogTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0xDRF9NRU1fT0ZGMSwJCTB4MDJ9LAkvKiBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfTENEX1BJWF9QQU4sCQkweDAzfSwJLyogTENEIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0RJU1BfRklGT19IVEMsCTB4MDB9LAkvKiBMQ0QgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0RJU1BfRklGT19MVEMsCTB4MDB9LAkvKiBMQ0QgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9IV0lEVEgsCTB4NEZ9LAkvKiBDUlQvVFYgSG9yaXpvbnRhbCBEaXNwbGF5IFdpZHRoIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9ORElTUF9IUEVSLAkJMHgxM30sCS8qIENSVC9UViBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfSFJUQ19TVEFSVCwJCTB4MDF9LAkvKiBDUlQvVFYgSFJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfSFJUQ19QV0lEVEgsCTB4MEJ9LAkvKiBDUlQvVFYgSFJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9WSEVJR0hUMCwJMHhERn0sCS8qIENSVC9UViBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0NSVF9ESVNQX1ZIRUlHSFQxLAkweDAxfSwJLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfQ1JUX05ESVNQX1ZQRVIsCQkweDJCfSwJLyogQ1JUL1RWIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfVlJUQ19TVEFSVCwJCTB4MDl9LAkvKiBDUlQvVFYgVlJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfVlJUQ19QV0lEVEgsCTB4MDF9LAkvKiBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciovCi0Je1MxRFJFR19UVl9PVVRfQ1RMLAkJMHgxOH0sCS8qIFRWIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyICovCi0Je1MxRFJFR19DUlRfRElTUF9NT0RFLAkJMHgwNX0sCS8qIENSVC9UViBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIsIDE2QlBQKi8KLQl7UzFEUkVHX0NSVF9ESVNQX1NUQVJUMCwJMHgwMH0sCS8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCovCi0Je1MxRFJFR19DUlRfRElTUF9TVEFSVDEsCTB4MDB9LAkvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfQ1JUX0RJU1BfU1RBUlQyLAkweDAwfSwJLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KLQl7UzFEUkVHX0NSVF9NRU1fT0ZGMCwJCTB4ODB9LAkvKiBDUlQvVFYgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQ1JUX01FTV9PRkYxLAkJMHgwMn0sCS8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19DUlRfUElYX1BBTiwJCTB4MDB9LAkvKiBDUlQvVFYgUGl4ZWwgUGFubmluZyBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9GSUZPX0hUQywJMHgwMH0sCS8qIENSVC9UViBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9GSUZPX0xUQywJMHgwMH0sCS8qIENSVC9UViBEaXNwbGF5IEZJRk8gTG93IFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfQ1RMLAkJMHgwMH0sCS8qIExDRCBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9TVEFSVCwJCTB4MDF9LAkvKiBMQ0QgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfWFBPUzAsCQkweDAwfSwJLyogTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfTENEX0NVUl9YUE9TMSwJCTB4MDB9LAkvKiBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19MQ0RfQ1VSX1lQT1MwLAkJMHgwMH0sCS8qIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0xDRF9DVVJfWVBPUzEsCQkweDAwfSwJLyogTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfTENEX0NVUl9CQ1RMMCwJCTB4MDB9LAkvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9HQ1RMMCwJCTB4MDB9LAkvKiBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfUkNUTDAsCQkweDAwfSwJLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9CQ1RMMSwJCTB4MUZ9LAkvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9HQ1RMMSwJCTB4M0Z9LAkvKiBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfUkNUTDEsCQkweDFGfSwJLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9GSUZPX0hUQywJMHgwMH0sCS8qIExDRCBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfQ1RMLAkJMHgwMH0sCS8qIENSVC9UViBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9TVEFSVCwJCTB4MDF9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfWFBPUzAsCQkweDAwfSwJLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQ1JUX0NVUl9YUE9TMSwJCTB4MDB9LAkvKiBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19DUlRfQ1VSX1lQT1MwLAkJMHgwMH0sCS8qIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0NSVF9DVVJfWVBPUzEsCQkweDAwfSwJLyogQ1JUL1RWIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfQ1JUX0NVUl9CQ1RMMCwJCTB4MDB9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9HQ1RMMCwJCTB4MDB9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfUkNUTDAsCQkweDAwfSwJLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9CQ1RMMSwJCTB4MUZ9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9HQ1RMMSwJCTB4M0Z9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfUkNUTDEsCQkweDFGfSwJLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9GSUZPX0hUQywJMHgwMH0sCS8qIENSVC9UViBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0JCTFRfQ1RMMCwJCTB4MDB9LAkvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfQ1RMMSwJCTB4MDF9LAkvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfQ0NfRVhQLAkJMHgwMH0sCS8qIEJpdEJsdCBST1AgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIqLwotCXtTMURSRUdfQkJMVF9PUCwJCTB4MDB9LAkvKiBCaXRCbHQgT3BlcmF0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMCwJMHgwMH0sCS8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMSwJMHgwMH0sCS8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMiwJMHgwMH0sCS8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KLQl7UzFEUkVHX0JCTFRfRFNUX1NUQVJUMCwJMHgwMH0sCS8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQkJMVF9EU1RfU1RBUlQxLAkweDAwfSwJLyogQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19CQkxUX0RTVF9TVEFSVDIsCTB4MDB9LAkvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KLQl7UzFEUkVHX0JCTFRfTUVNX09GRjAsCQkweDAwfSwJLyogQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfTUVNX09GRjEsCQkweDAwfSwJLyogQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfV0lEVEgwLAkJMHgwMH0sCS8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfV0lEVEgxLAkJMHgwMH0sCS8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfSEVJR0hUMCwJCTB4MDB9LAkvKiBCaXRCbHQgSGVpZ2h0IFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQkJMVF9IRUlHSFQxLAkJMHgwMH0sCS8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19CQkxUX0JHQzAsCQkweDAwfSwJLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCovCi0Je1MxRFJFR19CQkxUX0JHQzEsCQkweDAwfSwJLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19CQkxUX0ZHQzAsCQkweDAwfSwJLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCovCi0Je1MxRFJFR19CQkxUX0ZHQzEsCQkweDAwfSwJLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19MS1VQX01PREUsCQkweDAwfSwJLyogTG9vay1VcCBUYWJsZSBNb2RlIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xLVVBfQUREUiwJCTB4MDB9LAkvKiBMb29rLVVwIFRhYmxlIEFkZHJlc3MgUmVnaXN0ZXIqLwotCXtTMURSRUdfUFNfQ05GLAkJCTB4MDB9LAkvKiBQb3dlciBTYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqLwotCXtTMURSRUdfUFNfU1RBVFVTLAkJMHgwMH0sCS8qIFBvd2VyIFNhdmUgU3RhdHVzIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NQVTJNRU1fV0RPR1QsCQkweDAwfSwJLyogQ1BVLXRvLU1lbW9yeSBBY2Nlc3MgV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ09NX0RJU1BfTU9ERSwJCTB4MDF9LAkvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIsIExDRCBvbmx5Ki8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSB5bDkyMDBfczFkZmJfcGRhdGEgPSB7Ci0JLmluaXRyZWdzCQk9IHlsOTIwMF9zMWRmYl9pbml0cmVncywKLQkuaW5pdHJlZ3NzaXplCQk9IEFSUkFZX1NJWkUoeWw5MjAwX3MxZGZiX2luaXRyZWdzKSwKLQkucGxhdGZvcm1faW5pdF92aWRlbwk9IHlsOTIwMF9pbml0X3ZpZGVvLAotfTsKLQotI2RlZmluZSBZTDkyMDBfRkJfUkVHX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzcKLSNkZWZpbmUgWUw5MjAwX0ZCX1ZNRU1fQkFTRQlZTDkyMDBfRkJfUkVHX0JBU0UgKyBTWl8yTQotI2RlZmluZSBZTDkyMDBfRkJfVk1FTV9TSVpFCVNaXzJNCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgeWw5MjAwX3MxZGZiX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewkvKiB2aWRlbyBtZW0gKi8KLQkJLm5hbWUJPSAiczFkMTN4eHhmYiBtZW1vcnkiLAotCQkuc3RhcnQJPSBZTDkyMDBfRkJfVk1FTV9CQVNFLAotCQkuZW5kCT0gWUw5MjAwX0ZCX1ZNRU1fQkFTRSArIFlMOTIwMF9GQl9WTUVNX1NJWkUgLTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewkvKiB2aWRlbyByZWdpc3RlcnMgKi8KLQkJLm5hbWUJPSAiczFkMTN4eHhmYiByZWdpc3RlcnMiLAotCQkuc3RhcnQJPSBZTDkyMDBfRkJfUkVHX0JBU0UsCi0JCS5lbmQJPSBZTDkyMDBfRkJfUkVHX0JBU0UgKyBTWl81MTIgLTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgdTY0IHMxZGZiX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB5bDkyMDBfczFkZmJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzMWQxMzgwNmZiIiwKLQkuaWQJCT0gLTEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzMWRmYl9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkucGxhdGZvcm1fZGF0YQkJPSAmeWw5MjAwX3MxZGZiX3BkYXRhLAotCX0sCi0JLnJlc291cmNlCT0geWw5MjAwX3MxZGZiX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh5bDkyMDBfczFkZmJfcmVzb3VyY2UpLAotfTsKLQotdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfdmlkZW8odm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnlsOTIwMF9zMWRmYl9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IHlsOTIwMF9hZGRfZGV2aWNlX3ZpZGVvKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCXwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzIuIChSeCAmIFR4IG9ubHkgdG8gSlAzKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMCwgMiwgMCk7Ci0KLQkvKiBVU0FSVDMgb24gdHR5UzMuIChSeCwgVHgsIFJUUyAtIFJTNDg1IGludGVyZmFjZSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzMsIDMsIEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZ5bDkyMDBfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJnlsOTIwMF91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZ5bDkyMDBfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoeWw5MjAwX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKHlsOTIwMF9pMmNfZGV2aWNlcykpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJnlsOTIwMF9tY2kwX2RhdGEpOwotCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmeWw5MjAwX25hbmRfZGF0YSk7Ci0JLyogTk9SIEZsYXNoICovCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ5bDkyMDBfZmxhc2gpOwotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKHlsOTIwMF9zcGlfZGV2aWNlcywgQVJSQVlfU0laRSh5bDkyMDBfc3BpX2RldmljZXMpKTsKLQkvKiBUb3VjaHNjcmVlbiAqLwotCXlsOTIwMF9hZGRfZGV2aWNlX3RzKCk7Ci0jZW5kaWYKLQkvKiBMRURzLiAqLwotCWF0OTFfZ3Bpb19sZWRzKHlsOTIwMF9sZWRzLCBBUlJBWV9TSVpFKHlsOTIwMF9sZWRzKSk7Ci0JLyogUHVzaCBCdXR0b25zICovCi0JeWw5MjAwX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotCS8qIFZHQSAqLwotCXlsOTIwMF9hZGRfZGV2aWNlX3ZpZGVvKCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoWUw5MjAwLCAidUNkcmFnb24gWUwtOTIwMCIpCi0JLyogTWFpbnRhaW5lcjogUy5CaXJ0bGVzICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IHlsOTIwMF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0geWw5MjAwX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM2ZTlhNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBIUCBMYWJzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgZGF0YSBzdHJ1Y3R1cmVzIGZvdW5kIGluIHBsYXRmb3JtX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSwKLSAqIGFuZCBkZXNjcmliaW5nIGJvYXJkLXNwZWNpZmljIGRhdGEgbmVlZGVkIGJ5IGRyaXZlcnMuICBGb3IgZXhhbXBsZSwKLSAqIHdoaWNoIHBpbiBpcyB1c2VkIGZvciBhIGdpdmVuIEdQSU8gcm9sZS4KLSAqCi0gKiBJbiAyLjYsIGRyaXZlcnMgc2hvdWxkIHN0cm9uZ2x5IGF2b2lkIGJvYXJkLXNwZWNpZmljIGtub3dsZWRnZSBzbwotICogdGhhdCBzdXBwb3J0aW5nIG5ldyBib2FyZHMgbm9ybWFsbHkgd29uJ3QgcmVxdWlyZSBkcml2ZXIgcGF0Y2hlcy4KLSAqIE1vc3QgYm9hcmQtc3BlY2lmaWMga25vd2xlZGdlIHNob3VsZCBiZSBpbiBhcmNoLy4uLi9ib2FyZC0qLmMgZmlsZXMuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0JPQVJEX0gKLSNkZWZpbmUgX19BU01fQVJDSF9CT0FSRF9ICi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0bWVsLmg+Ci0KLSAvKiBVU0IgRGV2aWNlICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSk7Ci0KLSAvKiBVU0IgSGlnaCBTcGVlZCBEZXZpY2UgKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiYShzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhICpkYXRhKTsKLQotIC8qIENvbXBhY3QgRmxhc2ggKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSk7Ci0KLSAvKiBNTUMgLyBTRCAqLwotICAvKiBhdG1lbC1tY2kgcGxhdGZvcm0gY29uZmlnICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSk7Ci0KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgKmRhdGEpOwotCi0gLyogVVNCIEhvc3QgKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpOwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoX29oY2koc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9laGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSk7Ci0KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKTsKLQotIC8qIEkyQyovCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUc0NSkKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcyk7Ci0jZWxzZQotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcyk7Ci0jZW5kaWYKLQotIC8qIFNQSSAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcyk7Ci0KLSAvKiBTZXJpYWwgKi8KLSNkZWZpbmUgQVRNRUxfVUFSVF9DVFMJMHgwMQotI2RlZmluZSBBVE1FTF9VQVJUX1JUUwkweDAyCi0jZGVmaW5lIEFUTUVMX1VBUlRfRFNSCTB4MDQKLSNkZWZpbmUgQVRNRUxfVUFSVF9EVFIJMHgwOAotI2RlZmluZSBBVE1FTF9VQVJUX0RDRAkweDEwCi0jZGVmaW5lIEFUTUVMX1VBUlRfUkkJMHgyMAotCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpOwotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZTsKLQotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCk7Ci0KLS8qCi0gKiBQV00KLSAqLwotI2RlZmluZSBBVDkxX1BXTTAJMAotI2RlZmluZSBBVDkxX1BXTTEJMQotI2RlZmluZSBBVDkxX1BXTTIJMgotI2RlZmluZSBBVDkxX1BXTTMJMwotCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3B3bSh1MzIgbWFzayk7Ci0KLS8qCi0gKiBTU0MgLS0gYWNjZXNzZWQgdGhyb3VnaCBzc2NfcmVxdWVzdChpZCkuICBEcml2ZXJzIGRvbid0IGJpbmQgdG8gU1NDCi0gKiBwbGF0Zm9ybSBkZXZpY2VzLiAgVGhlaXIgU1NDIElEIGlzIHBhcnQgb2YgdGhlaXIgY29uZmlndXJhdGlvbiBkYXRhLAotICogYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBTU0Mgc2lnbmFscyB0aGV5IHNob3VsZCB1c2UuCi0gKi8KLSNkZWZpbmUgQVRNRUxfU1NDX1RLCTB4MDEKLSNkZWZpbmUgQVRNRUxfU1NDX1RGCTB4MDIKLSNkZWZpbmUgQVRNRUxfU1NDX1RECTB4MDQKLSNkZWZpbmUgQVRNRUxfU1NDX1RYCShBVE1FTF9TU0NfVEsgfCBBVE1FTF9TU0NfVEYgfCBBVE1FTF9TU0NfVEQpCi0KLSNkZWZpbmUgQVRNRUxfU1NDX1JLCTB4MTAKLSNkZWZpbmUgQVRNRUxfU1NDX1JGCTB4MjAKLSNkZWZpbmUgQVRNRUxfU1NDX1JECTB4NDAKLSNkZWZpbmUgQVRNRUxfU1NDX1JYCShBVE1FTF9TU0NfUksgfCBBVE1FTF9TU0NfUkYgfCBBVE1FTF9TU0NfUkQpCi0KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKTsKLQotIC8qIExDRCBDb250cm9sbGVyICovCi1zdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGE7Ci1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKTsKLQotIC8qIEFDOTcgKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSk7Ci0KLSAvKiBJU0kgKi8KLXN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jayk7Ci0KLS8qIENBTiAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jYW4oc3RydWN0IGF0OTFfY2FuX2RhdGEgKmRhdGEpOwotCi0gLyogTEVEcyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19sZWRzKHN0cnVjdCBncGlvX2xlZCAqbGVkcywgaW50IG5yKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjZmMTAyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsOTc3ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAotICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0KLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLQotdm9pZCBfX2lvbWVtICphdDkxX3BtY19iYXNlOwotRVhQT1JUX1NZTUJPTF9HUEwoYXQ5MV9wbWNfYmFzZSk7Ci0KLS8qCi0gKiBUaGVyZSdzIGEgbG90IG1vcmUgd2hpY2ggY2FuIGJlIGRvbmUgd2l0aCBjbG9ja3MsIGluY2x1ZGluZyBjcHVmcmVxCi0gKiBpbnRlZ3JhdGlvbiwgc2xvdyBjbG9jayBtb2RlIHN1cHBvcnQgKGZvciBzeXN0ZW0gc3VzcGVuZCksIGxldHRpbmcKLSAqIFBMTEIgYmUgdXNlZCBhdCBvdGhlciByYXRlcyAob24gYm9hcmRzIHRoYXQgZG9uJ3QgbmVlZCBVU0IpLCBldGMuCi0gKi8KLQotI2RlZmluZSBjbGtfaXNfcHJpbWFyeSh4KQkoKHgpLT50eXBlICYgQ0xLX1RZUEVfUFJJTUFSWSkKLSNkZWZpbmUgY2xrX2lzX3Byb2dyYW1tYWJsZSh4KQkoKHgpLT50eXBlICYgQ0xLX1RZUEVfUFJPR1JBTU1BQkxFKQotI2RlZmluZSBjbGtfaXNfcGVyaXBoZXJhbCh4KQkoKHgpLT50eXBlICYgQ0xLX1RZUEVfUEVSSVBIRVJBTCkKLSNkZWZpbmUgY2xrX2lzX3N5cyh4KQkJKCh4KS0+dHlwZSAmIENMS19UWVBFX1NZU1RFTSkKLQotCi0vKgotICogQ2hpcHMgaGF2ZSBzb21lIGtpbmQgb2YgY2xvY2tzIDogZ3JvdXAgdGhlbSBieSBmdW5jdGlvbmFsaXR5Ci0gKi8KLSNkZWZpbmUgY3B1X2hhc191dG1pKCkJCSggIGNwdV9pc19hdDkxc2FtOXJsKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKQotCi0jZGVmaW5lIGNwdV9oYXNfMTA1Nk1fcGxsYSgpCShjcHVfaXNfc2FtYTVkMygpKQotCi0jZGVmaW5lIGNwdV9oYXNfODAwTV9wbGxhKCkJKCAgY3B1X2lzX2F0OTFzYW05ZzIwKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTluMTIoKSkKLQotI2RlZmluZSBjcHVfaGFzXzMwME1fcGxsYSgpCShjcHVfaXNfYXQ5MXNhbTlnMTAoKSkKLQotI2RlZmluZSBjcHVfaGFzXzI0ME1fcGxsYSgpCShjcHVfaXNfYXQ5MXNhbTkyNjEoKSBcCi0JCQkJfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXJsKCkpCi0KLSNkZWZpbmUgY3B1X2hhc18yMTBNX3BsbGEoKQkoY3B1X2lzX2F0OTFzYW05MjYwKCkpCi0KLSNkZWZpbmUgY3B1X2hhc19wbGxiKCkJCSghKGNwdV9pc19hdDkxc2FtOXJsKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKSkKLQotI2RlZmluZSBjcHVfaGFzX3VwbGwoKQkJKGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKQotCi0vKiBVU0IgaG9zdCBIUyAmIEZTICovCi0jZGVmaW5lIGNwdV9oYXNfdWhwKCkJCSghY3B1X2lzX2F0OTFzYW05cmwoKSkKLQotLyogVVNCIGRldmljZSBGUyBvbmx5ICovCi0jZGVmaW5lIGNwdV9oYXNfdWRwZnMoKQkJKCEoY3B1X2lzX2F0OTFzYW05cmwoKSBcCi0JCQkJfHwgY3B1X2lzX2F0OTFzYW05ZzQ1KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXg1KCkgXAotCQkJCXx8IGNwdV9pc19zYW1hNWQzKCkpKQotCi0jZGVmaW5lIGNwdV9oYXNfcGxsYWRpdjIoKQkoY3B1X2lzX2F0OTFzYW05ZzQ1KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXg1KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOW4xMigpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKQotCi0jZGVmaW5lIGNwdV9oYXNfbWRpdjMoKQkJKGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTluMTIoKSBcCi0JCQkJfHwgY3B1X2lzX3NhbWE1ZDMoKSkKLQotI2RlZmluZSBjcHVfaGFzX2FsdF9wcmVzY2FsZXIoKQkoY3B1X2lzX2F0OTFzYW05eDUoKSBcCi0JCQkJfHwgY3B1X2lzX2F0OTFzYW05bjEyKCkgXAotCQkJCXx8IGNwdV9pc19zYW1hNWQzKCkpCi0KLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xrX2xvY2spOwotCi1zdGF0aWMgdTMyIGF0OTFfcGxsYl91c2JfaW5pdDsKLQotLyoKLSAqIEZvdXIgcHJpbWFyeSBjbG9jayBzb3VyY2VzOiAgdHdvIGNyeXN0YWwgb3NjaWxsYXRvcnMgKDMySywgbWFpbiksIGFuZAotICogdHdvIFBMTHMuICBQTExBIHVzdWFsbHkgcnVucyB0aGUgbWFzdGVyIGNsb2NrOyBhbmQgUExMQiBtdXN0IHJ1biBhdAotICogNDggTUh6ICh1bmxlc3Mgbm8gVVNCIGZ1bmN0aW9uIGNsb2NrcyBhcmUgbmVlZGVkKS4gIFRoZSBtYWluIGNsb2NrIGFuZAotICogYm90aCBQTExzIGFyZSB0dXJuZWQgb2ZmIHRvIHJ1biBpbiAic2xvdyBjbG9jayBtb2RlIiAoc3lzdGVtIHN1c3BlbmQpLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBjbGszMmsgPSB7Ci0JLm5hbWUJCT0gImNsazMyayIsCi0JLnJhdGVfaHoJPSBBVDkxX1NMT1dfQ0xPQ0ssCi0JLnVzZXJzCQk9IDEsCQkvKiBhbHdheXMgb24gKi8KLQkuaWQJCT0gMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUklNQVJZLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1haW5fY2xrID0gewotCS5uYW1lCQk9ICJtYWluIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19NT1NDUywJLyogaW4gUE1DX1NSICovCi0JLmlkCQk9IDEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJJTUFSWSwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwbGxhID0gewotCS5uYW1lCQk9ICJwbGxhIiwKLQkucGFyZW50CQk9ICZtYWluX2NsaywKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19MT0NLQSwJLyogaW4gUE1DX1NSICovCi0JLmlkCQk9IDIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJJTUFSWSB8IENMS19UWVBFX1BMTCwKLX07Ci0KLXN0YXRpYyB2b2lkIHBsbGJfbW9kZShzdHJ1Y3QgY2xrICpjbGssIGludCBpc19vbikKLXsKLQl1MzIJdmFsdWU7Ci0KLQlpZiAoaXNfb24pIHsKLQkJaXNfb24gPSBBVDkxX1BNQ19MT0NLQjsKLQkJdmFsdWUgPSBhdDkxX3BsbGJfdXNiX2luaXQ7Ci0JfSBlbHNlCi0JCXZhbHVlID0gMDsKLQotCS8vIFJFVklTSVQ6IEFkZCB3b3JrLWFyb3VuZCBmb3IgQVQ5MVJNOTIwMCBFcnJhdGEgIzI2ID8KLQlhdDkxX3BtY193cml0ZShBVDkxX0NLR1JfUExMQlIsIHZhbHVlKTsKLQotCWRvIHsKLQkJY3B1X3JlbGF4KCk7Ci0JfSB3aGlsZSAoKGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTE9DS0IpICE9IGlzX29uKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgcGxsYiA9IHsKLQkubmFtZQkJPSAicGxsYiIsCi0JLnBhcmVudAkJPSAmbWFpbl9jbGssCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfTE9DS0IsCS8qIGluIFBNQ19TUiAqLwotCS5tb2RlCQk9IHBsbGJfbW9kZSwKLQkuaWQJCT0gMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QUklNQVJZIHwgQ0xLX1RZUEVfUExMLAotfTsKLQotc3RhdGljIHZvaWQgcG1jX3N5c19tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQotewotCWlmIChpc19vbikKLQkJYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgY2xrLT5wbWNfbWFzayk7Ci0JZWxzZQotCQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19TQ0RSLCBjbGstPnBtY19tYXNrKTsKLX0KLQotc3RhdGljIHZvaWQgcG1jX3Vja3JfbW9kZShzdHJ1Y3QgY2xrICpjbGssIGludCBpc19vbikKLXsKLQl1bnNpZ25lZCBpbnQgdWNrciA9IGF0OTFfcG1jX3JlYWQoQVQ5MV9DS0dSX1VDS1IpOwotCi0JaWYgKGlzX29uKSB7Ci0JCWlzX29uID0gQVQ5MV9QTUNfTE9DS1U7Ci0JCWF0OTFfcG1jX3dyaXRlKEFUOTFfQ0tHUl9VQ0tSLCB1Y2tyIHwgY2xrLT5wbWNfbWFzayk7Ci0JfSBlbHNlCi0JCWF0OTFfcG1jX3dyaXRlKEFUOTFfQ0tHUl9VQ0tSLCB1Y2tyICYgfihjbGstPnBtY19tYXNrKSk7Ci0KLQlkbyB7Ci0JCWNwdV9yZWxheCgpOwotCX0gd2hpbGUgKChhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1NSKSAmIEFUOTFfUE1DX0xPQ0tVKSAhPSBpc19vbik7Ci19Ci0KLS8qIFVTQiBmdW5jdGlvbiBjbG9ja3MgKFBMTEIgbXVzdCBiZSA0OCBNSHopICovCi1zdGF0aWMgc3RydWN0IGNsayB1ZHBjayA9IHsKLQkubmFtZQkJPSAidWRwY2siLAotCS5wYXJlbnQJCT0gJnBsbGIsCi0JLm1vZGUJCT0gcG1jX3N5c19tb2RlLAotfTsKLXN0cnVjdCBjbGsgdXRtaV9jbGsgPSB7Ci0JLm5hbWUJCT0gInV0bWlfY2xrIiwKLQkucGFyZW50CQk9ICZtYWluX2NsaywKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19VUExMRU4sCS8qIGluIENLR1JfVUNLUiAqLwotCS5tb2RlCQk9IHBtY191Y2tyX21vZGUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUExMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVocGNrID0gewotCS5uYW1lCQk9ICJ1aHBjayIsCi0JLyoucGFyZW50CQk9IC4uLiB3ZSBjaG9vc2UgcGFyZW50IGF0IHJ1bnRpbWUgKi8KLQkubW9kZQkJPSBwbWNfc3lzX21vZGUsCi19OwotCi0KLS8qCi0gKiBUaGUgbWFzdGVyIGNsb2NrIGlzIGRpdmlkZWQgZnJvbSB0aGUgQ1BVIGNsb2NrIChieSAxLTQpLiAgSXQncyB1c2VkIGZvcgotICogbWVtb3J5LCBpbnRlcmZhY2VzIHRvIG9uLWNoaXAgcGVyaXBoZXJhbHMsIHRoZSBBSUMsIGFuZCBzb21ldGltZXMgbW9yZQotICogKGUuZyBiYXVkIHJhdGUgZ2VuZXJhdGlvbikuICBJdCdzIHNvdXJjZWQgZnJvbSBvbmUgb2YgdGhlIHByaW1hcnkgY2xvY2tzLgotICovCi1zdHJ1Y3QgY2xrIG1jayA9IHsKLQkubmFtZQkJPSAibWNrIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19NQ0tSRFksCS8qIGluIFBNQ19TUiAqLwotfTsKLQotc3RhdGljIHZvaWQgcG1jX3BlcmlwaF9tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQotewotCXUzMiByZWd2YWwgPSAwOwotCi0JLyoKLQkgKiBXaXRoIHNhbWE1ZDMgZGV2aWNlcywgd2UgYXJlIG1hbmFnaW5nIGNsb2NrIGRpdmlzaW9uIHNvIHdlIGhhdmUgdG8KLQkgKiB1c2UgdGhlIFBlcmlwaGVyYWwgQ29udHJvbCBSZWdpc3RlciBpbnRyb2R1Y2VkIGZyb20gYXQ5MXNhbTl4NQotCSAqIGRldmljZXMuCi0JICovCi0JaWYgKGNwdV9pc19zYW1hNWQzKCkpIHsKLQkJcmVndmFsIHw9IEFUOTFfUE1DX1BDUl9DTUQ7IC8qIHdyaXRlIGNvbW1hbmQgKi8KLQkJcmVndmFsIHw9IGNsay0+cGlkICYgQVQ5MV9QTUNfUENSX1BJRDsgLyogcGVyaXBoZXJhbCBzZWxlY3Rpb24gKi8KLQkJcmVndmFsIHw9IEFUOTFfUE1DX1BDUl9ESVYoY2xrLT5kaXYpOwotCQlpZiAoaXNfb24pCi0JCQlyZWd2YWwgfD0gQVQ5MV9QTUNfUENSX0VOOyAvKiBlbmFibGUgY2xvY2sgKi8KLQkJYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfUENSLCByZWd2YWwpOwotCX0gZWxzZSB7Ci0JCWlmIChpc19vbikKLQkJCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1BDRVIsIGNsay0+cG1jX21hc2spOwotCQllbHNlCi0JCQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19QQ0RSLCBjbGstPnBtY19tYXNrKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIF9faW5pdCAqYXQ5MV9jc3NfdG9fY2xrKHVuc2lnbmVkIGxvbmcgY3NzKQotewotCXN3aXRjaCAoY3NzKSB7Ci0JCWNhc2UgQVQ5MV9QTUNfQ1NTX1NMT1c6Ci0JCQlyZXR1cm4gJmNsazMyazsKLQkJY2FzZSBBVDkxX1BNQ19DU1NfTUFJTjoKLQkJCXJldHVybiAmbWFpbl9jbGs7Ci0JCWNhc2UgQVQ5MV9QTUNfQ1NTX1BMTEE6Ci0JCQlyZXR1cm4gJnBsbGE7Ci0JCWNhc2UgQVQ5MV9QTUNfQ1NTX1BMTEI6Ci0JCQlpZiAoY3B1X2hhc191cGxsKCkpCi0JCQkJLyogQ1NTX1BMTEIgPT0gQ1NTX1VQTEwgKi8KLQkJCQlyZXR1cm4gJnV0bWlfY2xrOwotCQkJZWxzZSBpZiAoY3B1X2hhc19wbGxiKCkpCi0JCQkJcmV0dXJuICZwbGxiOwotCQkJYnJlYWs7Ci0JCS8qIGFsdGVybmF0ZSBQTUM6IGNhbiB1c2UgbWFzdGVyIGNsb2NrICovCi0JCWNhc2UgQVQ5MV9QTUNfQ1NTX01BU1RFUjoKLQkJCXJldHVybiAmbWNrOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IHBtY19wcmVzY2FsZXJfZGl2aWRlcih1MzIgcmVnKQotewotCWlmIChjcHVfaGFzX2FsdF9wcmVzY2FsZXIoKSkgewotCQlyZXR1cm4gMSA8PCAoKHJlZyAmIEFUOTFfUE1DX0FMVF9QUkVTKSA+PiBQTUNfQUxUX1BSRVNfT0ZGU0VUKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gMSA8PCAoKHJlZyAmIEFUOTFfUE1DX1BSRVMpID4+IFBNQ19QUkVTX09GRlNFVCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGstPnBhcmVudCkKLQkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQlpZiAoY2xrLT51c2VycysrID09IDAgJiYgY2xrLT5tb2RlKQotCQljbGstPm1vZGUoY2xrLCAxKTsKLX0KLQotaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKLQlfX2Nsa19lbmFibGUoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKLQotc3RhdGljIHZvaWQgX19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JQlVHX09OKGNsay0+dXNlcnMgPT0gMCk7Ci0JaWYgKC0tY2xrLT51c2VycyA9PSAwICYmIGNsay0+bW9kZSkKLQkJY2xrLT5tb2RlKGNsaywgMCk7Ci0JaWYgKGNsay0+cGFyZW50KQotCQlfX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLX0KLQotdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOwotCV9fY2xrX2Rpc2FibGUoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7Ci0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXVuc2lnbmVkIGxvbmcJcmF0ZTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOwotCWZvciAoOzspIHsKLQkJcmF0ZSA9IGNsay0+cmF0ZV9oejsKLQkJaWYgKHJhdGUgfHwgIWNsay0+cGFyZW50KQotCQkJYnJlYWs7Ci0JCWNsayA9IGNsay0+cGFyZW50OwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotCXJldHVybiByYXRlOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qCi0gKiBGb3Igbm93LCBvbmx5IHRoZSBwcm9ncmFtbWFibGUgY2xvY2tzIHN1cHBvcnQgcmVwYXJlbnRpbmcgKE1DSyBjb3VsZAotICogZG8gdGhpcyB0b28sIHdpdGggY2FyZSkgb3IgcmF0ZSBjaGFuZ2luZyAodGhlIFBMTHMgY291bGQgZG8gdGhpcyB0b28sCi0gKiBkaXR0byBNQ0sgYnV0IHRoYXQncyBtb3JlIGZvciBjcHVmcmVxKS4gIERyaXZlcnMgbWF5IHJlcGFyZW50IHRvIGdldAotICogYSBiZXR0ZXIgcmF0ZSBtYXRjaDsgd2UgZG9uJ3QuCi0gKi8KLQotbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXVuc2lnbmVkCXByZXNjYWxlOwotCXVuc2lnbmVkIGxvbmcJYWN0dWFsOwotCXVuc2lnbmVkIGxvbmcJcHJldiA9IFVMT05HX01BWDsKLQotCWlmICghY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKLQotCWFjdHVhbCA9IGNsay0+cGFyZW50LT5yYXRlX2h6OwotCWZvciAocHJlc2NhbGUgPSAwOyBwcmVzY2FsZSA8IDc7IHByZXNjYWxlKyspIHsKLQkJaWYgKGFjdHVhbCA+IHJhdGUpCi0JCQlwcmV2ID0gYWN0dWFsOwotCi0JCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpIHsKLQkJCWlmICgocHJldiAtIHJhdGUpIDwgKHJhdGUgLSBhY3R1YWwpKSB7Ci0JCQkJYWN0dWFsID0gcHJldjsKLQkJCQlwcmVzY2FsZS0tOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJYWN0dWFsID4+PSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIChwcmVzY2FsZSA8IDcpID8gYWN0dWFsIDogLUVOT0VOVDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOwotCi1pbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0JdW5zaWduZWQJcHJlc2NhbGU7Ci0JdW5zaWduZWQgbG9uZwlwcmVzY2FsZV9vZmZzZXQsIGNzc19tYXNrOwotCXVuc2lnbmVkIGxvbmcJYWN0dWFsOwotCi0JaWYgKCFjbGtfaXNfcHJvZ3JhbW1hYmxlKGNsaykpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjbGstPnVzZXJzKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKGNwdV9oYXNfYWx0X3ByZXNjYWxlcigpKSB7Ci0JCXByZXNjYWxlX29mZnNldCA9IFBNQ19BTFRfUFJFU19PRkZTRVQ7Ci0JCWNzc19tYXNrID0gQVQ5MV9QTUNfQUxUX1BDS1JfQ1NTOwotCX0gZWxzZSB7Ci0JCXByZXNjYWxlX29mZnNldCA9IFBNQ19QUkVTX09GRlNFVDsKLQkJY3NzX21hc2sgPSBBVDkxX1BNQ19DU1M7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7Ci0KLQlhY3R1YWwgPSBjbGstPnBhcmVudC0+cmF0ZV9oejsKLQlmb3IgKHByZXNjYWxlID0gMDsgcHJlc2NhbGUgPCA3OyBwcmVzY2FsZSsrKSB7Ci0JCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpIHsKLQkJCXUzMglwY2tyOwotCi0JCQlwY2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19QQ0tSKGNsay0+aWQpKTsKLQkJCXBja3IgJj0gY3NzX21hc2s7CS8qIGtlZXAgY2xvY2sgc2VsZWN0aW9uICovCi0JCQlwY2tyIHw9IHByZXNjYWxlIDw8IHByZXNjYWxlX29mZnNldDsKLQkJCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCksIHBja3IpOwotCQkJY2xrLT5yYXRlX2h6ID0gYWN0dWFsOwotCQkJYnJlYWs7Ci0JCX0KLQkJYWN0dWFsID4+PSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIChwcmVzY2FsZSA8IDcpID8gYWN0dWFsIDogLUVOT0VOVDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKLQotc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGstPnBhcmVudDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOwotCi1pbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotCWlmIChjbGstPnVzZXJzKQotCQlyZXR1cm4gLUVCVVNZOwotCWlmICghY2xrX2lzX3ByaW1hcnkocGFyZW50KSB8fCAhY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTlybCgpICYmIHBhcmVudC0+aWQgPT0gQVQ5MV9QTUNfQ1NTX1BMTEIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7Ci0KLQljbGstPnJhdGVfaHogPSBwYXJlbnQtPnJhdGVfaHo7Ci0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0JYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfUENLUihjbGstPmlkKSwgcGFyZW50LT5pZCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7Ci0KLS8qIGVzdGFibGlzaCBQQ0swLi5QQ0tOIHBhcmVudGFnZSBhbmQgcmF0ZSAqLwotc3RhdGljIHZvaWQgX19pbml0IGluaXRfcHJvZ3JhbW1hYmxlX2Nsb2NrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlzdHJ1Y3QgY2xrCSpwYXJlbnQ7Ci0JdTMyCQlwY2tyOwotCXVuc2lnbmVkIGludAljc3NfbWFzazsKLQotCWlmIChjcHVfaGFzX2FsdF9wcmVzY2FsZXIoKSkKLQkJY3NzX21hc2sgPSBBVDkxX1BNQ19BTFRfUENLUl9DU1M7Ci0JZWxzZQotCQljc3NfbWFzayA9IEFUOTFfUE1DX0NTUzsKLQotCXBja3IgPSBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCkpOwotCXBhcmVudCA9IGF0OTFfY3NzX3RvX2NsayhwY2tyICYgY3NzX21hc2spOwotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCWNsay0+cmF0ZV9oeiA9IHBhcmVudC0+cmF0ZV9oeiAvIHBtY19wcmVzY2FsZXJfZGl2aWRlcihwY2tyKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0KLXN0YXRpYyBpbnQgYXQ5MV9jbGtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKLXsKLQl1MzIJCXNjc3IsIHBjc3IsIHBjc3IxID0gMCwgdWNrciA9IDAsIHNyOwotCXN0cnVjdCBjbGsJKmNsazsKLQotCXNjc3IgPSBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1NDU1IpOwotCXBjc3IgPSBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1BDU1IpOwotCWlmIChjcHVfaXNfc2FtYTVkMygpKQotCQlwY3NyMSA9IGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfUENTUjEpOwotCXNyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19TUik7Ci0Jc2VxX3ByaW50ZihzLCAiU0NTUiA9ICU4eFxuIiwgc2Nzcik7Ci0Jc2VxX3ByaW50ZihzLCAiUENTUiA9ICU4eFxuIiwgcGNzcik7Ci0JaWYgKGNwdV9pc19zYW1hNWQzKCkpCi0JCXNlcV9wcmludGYocywgIlBDU1IxID0gJTh4XG4iLCBwY3NyMSk7Ci0Jc2VxX3ByaW50ZihzLCAiTU9SICA9ICU4eFxuIiwgYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfTU9SKSk7Ci0Jc2VxX3ByaW50ZihzLCAiTUNGUiA9ICU4eFxuIiwgYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfTUNGUikpOwotCXNlcV9wcmludGYocywgIlBMTEEgPSAlOHhcbiIsIGF0OTFfcG1jX3JlYWQoQVQ5MV9DS0dSX1BMTEFSKSk7Ci0JaWYgKGNwdV9oYXNfcGxsYigpKQotCQlzZXFfcHJpbnRmKHMsICJQTExCID0gJTh4XG4iLCBhdDkxX3BtY19yZWFkKEFUOTFfQ0tHUl9QTExCUikpOwotCWlmIChjcHVfaGFzX3V0bWkoKSkgewotCQl1Y2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfVUNLUik7Ci0JCXNlcV9wcmludGYocywgIlVDS1IgPSAlOHhcbiIsIHVja3IpOwotCX0KLQlzZXFfcHJpbnRmKHMsICJNQ0tSID0gJTh4XG4iLCBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX01DS1IpKTsKLQlpZiAoY3B1X2hhc191cGxsKCkgfHwgY3B1X2lzX2F0OTFzYW05bjEyKCkpCi0JCXNlcV9wcmludGYocywgIlVTQiAgPSAlOHhcbiIsIGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfVVNCKSk7Ci0Jc2VxX3ByaW50ZihzLCAiU1IgICA9ICU4eFxuIiwgc3IpOwotCi0Jc2VxX3ByaW50ZihzLCAiXG4iKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWNoYXIJKnN0YXRlOwotCi0JCWlmIChjbGstPm1vZGUgPT0gcG1jX3N5c19tb2RlKSB7Ci0JCQlzdGF0ZSA9IChzY3NyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7Ci0JCX0gZWxzZSBpZiAoY2xrLT5tb2RlID09IHBtY19wZXJpcGhfbW9kZSkgewotCQkJaWYgKGNwdV9pc19zYW1hNWQzKCkpIHsKLQkJCQl1MzIgcG1jX21hc2sgPSAxIDw8IChjbGstPnBpZCAlIDMyKTsKLQotCQkJCWlmIChjbGstPnBpZCA+IDMxKQotCQkJCQlzdGF0ZSA9IChwY3NyMSAmIHBtY19tYXNrKSA/ICJvbiIgOiAib2ZmIjsKLQkJCQllbHNlCi0JCQkJCXN0YXRlID0gKHBjc3IgJiBwbWNfbWFzaykgPyAib24iIDogIm9mZiI7Ci0JCQl9IGVsc2UgewotCQkJCXN0YXRlID0gKHBjc3IgJiBjbGstPnBtY19tYXNrKSA/ICJvbiIgOiAib2ZmIjsKLQkJCX0KLQkJfSBlbHNlIGlmIChjbGstPm1vZGUgPT0gcG1jX3Vja3JfbW9kZSkgewotCQkJc3RhdGUgPSAodWNrciAmIGNsay0+cG1jX21hc2spID8gIm9uIiA6ICJvZmYiOwotCQl9IGVsc2UgaWYgKGNsay0+cG1jX21hc2spIHsKLQkJCXN0YXRlID0gKHNyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7Ci0JCX0gZWxzZSBpZiAoY2xrID09ICZjbGszMmsgfHwgY2xrID09ICZtYWluX2NsaykgewotCQkJc3RhdGUgPSAib24iOwotCQl9IGVsc2UgewotCQkJc3RhdGUgPSAiIjsKLQkJfQotCi0JCXNlcV9wcmludGYocywgIiUtMTBzIHVzZXJzPSUyZCAlLTNzICU5bHUgSHogJXNcbiIsCi0JCQljbGstPm5hbWUsIGNsay0+dXNlcnMsIHN0YXRlLCBjbGtfZ2V0X3JhdGUoY2xrKSwKLQkJCWNsay0+cGFyZW50ID8gY2xrLT5wYXJlbnQtPm5hbWUgOiAiIik7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfY2xrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGF0OTFfY2xrX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdDkxX2Nsa19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGF0OTFfY2xrX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfY2xrX2RlYnVnZnNfaW5pdCh2b2lkKQotewotCS8qIC9zeXMva2VybmVsL2RlYnVnL2F0OTFfY2xrICovCi0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF0OTFfY2xrIiwgU19JRlJFRyB8IFNfSVJVR08sIE5VTEwsIE5VTEwsICZhdDkxX2Nsa19vcGVyYXRpb25zKTsKLQotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwoYXQ5MV9jbGtfZGVidWdmc19pbml0KTsKLQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogUmVnaXN0ZXIgYSBuZXcgY2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2Nsa19hZGQoc3RydWN0IGNsayAqY2xrKQotewotCWxpc3RfYWRkX3RhaWwoJmNsay0+bm9kZSwgJmNsb2Nrcyk7Ci0KLQljbGstPmNsLmNvbl9pZCA9IGNsay0+bmFtZTsKLQljbGstPmNsLmNsayA9IGNsazsKLQljbGtkZXZfYWRkKCZjbGstPmNsKTsKLX0KLQotaW50IF9faW5pdCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGtfaXNfcGVyaXBoZXJhbChjbGspKSB7Ci0JCWlmICghY2xrLT5wYXJlbnQpCi0JCQljbGstPnBhcmVudCA9ICZtY2s7Ci0JCWlmIChjcHVfaXNfc2FtYTVkMygpKQotCQkJY2xrLT5yYXRlX2h6ID0gRElWX1JPVU5EX1VQKGNsay0+cGFyZW50LT5yYXRlX2h6LAotCQkJCQkJICAgIDEgPDwgY2xrLT5kaXYpOwotCQljbGstPm1vZGUgPSBwbWNfcGVyaXBoX21vZGU7Ci0JfQotCWVsc2UgaWYgKGNsa19pc19zeXMoY2xrKSkgewotCQljbGstPnBhcmVudCA9ICZtY2s7Ci0JCWNsay0+bW9kZSA9IHBtY19zeXNfbW9kZTsKLQl9Ci0JZWxzZSBpZiAoY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKSB7Ci0JCWNsay0+bW9kZSA9IHBtY19zeXNfbW9kZTsKLQkJaW5pdF9wcm9ncmFtbWFibGVfY2xvY2soY2xrKTsKLQl9Ci0KLQlhdDkxX2Nsa19hZGQoY2xrKTsKLQotCXJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB1MzIgX19pbml0IGF0OTFfcGxsX3JhdGUoc3RydWN0IGNsayAqcGxsLCB1MzIgZnJlcSwgdTMyIHJlZykKLXsKLQl1bnNpZ25lZCBtdWwsIGRpdjsKLQotCWRpdiA9IHJlZyAmIDB4ZmY7Ci0JaWYgKGNwdV9pc19zYW1hNWQzKCkpCi0JCW11bCA9IEFUOTFfUE1DM19NVUxfR0VUKHJlZyk7Ci0JZWxzZQotCQltdWwgPSBBVDkxX1BNQ19NVUxfR0VUKHJlZyk7Ci0KLQlpZiAoZGl2ICYmIG11bCkgewotCQlmcmVxIC89IGRpdjsKLQkJZnJlcSAqPSBtdWwgKyAxOwotCX0gZWxzZQotCQlmcmVxID0gMDsKLQotCXJldHVybiBmcmVxOwotfQotCi1zdGF0aWMgdTMyIF9faW5pdCBhdDkxX3VzYl9yYXRlKHN0cnVjdCBjbGsgKnBsbCwgdTMyIGZyZXEsIHUzMiByZWcpCi17Ci0JaWYgKHBsbCA9PSAmcGxsYiAmJiAocmVnICYgQVQ5MV9QTUNfVVNCOTZNKSkKLQkJcmV0dXJuIGZyZXEgLyAyOwotCWVsc2UgaWYgKHBsbCA9PSAmdXRtaV9jbGsgfHwgY3B1X2lzX2F0OTFzYW05bjEyKCkpCi0JCXJldHVybiBmcmVxIC8gKDEgKyAoKHJlZyAmIEFUOTFfUE1DX09IQ0lVU0JESVYpID4+IDgpKTsKLQllbHNlCi0JCXJldHVybiBmcmVxOwotfQotCi1zdGF0aWMgdW5zaWduZWQgX19pbml0IGF0OTFfcGxsX2NhbGModW5zaWduZWQgbWFpbl9mcmVxLCB1bnNpZ25lZCBvdXRfZnJlcSkKLXsKLQl1bnNpZ25lZCBpLCBkaXYgPSAwLCBtdWwgPSAwLCBkaWZmID0gMSA8PCAzMDsKLQl1bnNpZ25lZCByZXQgPSAob3V0X2ZyZXEgPiAxNTUwMDAwMDApID8gMHhiZTAwIDogMHgzZTAwOwotCi0JLyogUExMIG91dHB1dCBtYXggMjQwIE1IeiAob3IgMTgwIE1IeiBwZXIgZXJyYXRhKSAqLwotCWlmIChvdXRfZnJlcSA+IDI0MDAwMDAwMCkKLQkJZ290byBmYWlsOwotCi0JZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKSB7Ci0JCWludCBkaWZmMTsKLQkJdW5zaWduZWQgaW5wdXQsIG11bDE7Ci0KLQkJLyoKLQkJICogUExMIGlucHV0IGJldHdlZW4gMU1IeiBhbmQgMzJNSHogcGVyIHNwZWMsIGJ1dCBsb3dlcgotCQkgKiBmcmVxdWVuY2VzIHNlZW0gbmVjZXNzYXJ5IGluIHNvbWUgY2FzZXMgc28gYWxsb3cgMTAwSy4KLQkJICogV2FybmluZzogc29tZSBuZXdlciBwcm9kdWN0cyBuZWVkIDJNSHogbWluLgotCQkgKi8KLQkJaW5wdXQgPSBtYWluX2ZyZXEgLyBpOwotCQlpZiAoY3B1X2lzX2F0OTFzYW05ZzIwKCkgJiYgaW5wdXQgPCAyMDAwMDAwKQotCQkJY29udGludWU7Ci0JCWlmIChpbnB1dCA8IDEwMDAwMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaW5wdXQgPiAzMjAwMDAwMCkKLQkJCWNvbnRpbnVlOwotCi0JCW11bDEgPSBvdXRfZnJlcSAvIGlucHV0OwotCQlpZiAoY3B1X2lzX2F0OTFzYW05ZzIwKCkgJiYgbXVsID4gNjMpCi0JCQljb250aW51ZTsKLQkJaWYgKG11bDEgPiAyMDQ4KQotCQkJY29udGludWU7Ci0JCWlmIChtdWwxIDwgMikKLQkJCWdvdG8gZmFpbDsKLQotCQlkaWZmMSA9IG91dF9mcmVxIC0gaW5wdXQgKiBtdWwxOwotCQlpZiAoZGlmZjEgPCAwKQotCQkJZGlmZjEgPSAtZGlmZjE7Ci0JCWlmIChkaWZmID4gZGlmZjEpIHsKLQkJCWRpZmYgPSBkaWZmMTsKLQkJCWRpdiA9IGk7Ci0JCQltdWwgPSBtdWwxOwotCQkJaWYgKGRpZmYgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA9PSAyNTYgJiYgZGlmZiA+IChvdXRfZnJlcSA+PiA1KSkKLQkJZ290byBmYWlsOwotCXJldHVybiByZXQgfCAoKG11bCAtIDEpIDw8IDE2KSB8IGRpdjsKLWZhaWw6Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjb25zdCBzdGFuZGFyZF9wbWNfY2xvY2tzW10gX19pbml0Y29uc3QgPSB7Ci0JLyogZm91ciBwcmltYXJ5IGNsb2NrcyAqLwotCSZjbGszMmssCi0JJm1haW5fY2xrLAotCSZwbGxhLAotCi0JLyogTUNLICovCi0JJm1jawotfTsKLQotLyogUExMQiBnZW5lcmF0ZWQgVVNCIGZ1bGwgc3BlZWQgY2xvY2sgaW5pdCAqLwotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfcGxsYl91c2Jmc19jbG9ja19pbml0KHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JLyoKLQkgKiBVU0IgY2xvY2sgaW5pdDogIGNob29zZSA0OCBNSHogUExMQiB2YWx1ZSwKLQkgKiBkaXNhYmxlIDQ4TUh6IGNsb2NrIGR1cmluZyB1c2IgcGVyaXBoZXJhbCBzdXNwZW5kLgotCSAqCi0JICogUkVWSVNJVDogIGFzc3VtZXMgTUNLIGRvZXNuJ3QgZGVyaXZlIGZyb20gUExMQiEKLQkgKi8KLQl1aHBjay5wYXJlbnQgPSAmcGxsYjsKLQotCXJlZyA9IGF0OTFfcGxsYl91c2JfaW5pdCA9IGF0OTFfcGxsX2NhbGMobWFpbl9jbG9jaywgNDgwMDAwMDAgKiAyKTsKLQlwbGxiLnJhdGVfaHogPSBhdDkxX3BsbF9yYXRlKCZwbGxiLCBtYWluX2Nsb2NrLCBhdDkxX3BsbGJfdXNiX2luaXQpOwotCWlmIChjcHVfaXNfYXQ5MXJtOTIwMCgpKSB7Ci0JCXJlZyA9IGF0OTFfcGxsYl91c2JfaW5pdCB8PSBBVDkxX1BNQ19VU0I5Nk07Ci0JCXVocGNrLnBtY19tYXNrID0gQVQ5MVJNOTIwMF9QTUNfVUhQOwotCQl1ZHBjay5wbWNfbWFzayA9IEFUOTFSTTkyMDBfUE1DX1VEUDsKLQkJYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgQVQ5MVJNOTIwMF9QTUNfTUNLVURQKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8Ci0JCSAgIGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8Ci0JCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7Ci0JCXJlZyA9IGF0OTFfcGxsYl91c2JfaW5pdCB8PSBBVDkxX1BNQ19VU0I5Nk07Ci0JCXVocGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VIUDsKLQkJdWRwY2sucG1jX21hc2sgPSBBVDkxU0FNOTI2eF9QTUNfVURQOwotCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05bjEyKCkpIHsKLQkJLyogRGl2aWRlciBmb3IgVVNCIGNsb2NrIGlzIGluIFVTQiBjbG9jayByZWdpc3RlciBmb3IgOW4xMiAqLwotCQlyZWcgPSBBVDkxX1BNQ19VU0JTX1BMTEI7Ci0KLQkJLyogRm9yIFBMTEIgb3V0cHV0IDk2TSwgc2V0IHVzYiBkaXZpZGVyIDIgKFVTQkRJViArIDEpICovCi0JCXJlZyB8PSBBVDkxX1BNQ19PSENJVVNCRElWXzI7Ci0JCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1VTQiwgcmVnKTsKLQotCQkvKiBTdGlsbCBzZXR1cCBtYXNrcyAqLwotCQl1aHBjay5wbWNfbWFzayA9IEFUOTFTQU05MjZ4X1BNQ19VSFA7Ci0JCXVkcGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VEUDsKLQl9Ci0JYXQ5MV9wbWNfd3JpdGUoQVQ5MV9DS0dSX1BMTEJSLCAwKTsKLQotCXVkcGNrLnJhdGVfaHogPSBhdDkxX3VzYl9yYXRlKCZwbGxiLCBwbGxiLnJhdGVfaHosIHJlZyk7Ci0JdWhwY2sucmF0ZV9oeiA9IGF0OTFfdXNiX3JhdGUoJnBsbGIsIHBsbGIucmF0ZV9oeiwgcmVnKTsKLX0KLQotLyogVVBMTCBnZW5lcmF0ZWQgVVNCIGZ1bGwgc3BlZWQgY2xvY2sgaW5pdCAqLwotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfdXBsbF91c2Jmc19jbG9ja19pbml0KHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKLXsKLQkvKgotCSAqIFVTQiBjbG9jayBpbml0OiBjaG9vc2UgNDgwIE1IeiBmcm9tIFVQTEwsCi0JICovCi0JdW5zaWduZWQgaW50IHVzYnIgPSBBVDkxX1BNQ19VU0JTX1VQTEw7Ci0KLQkvKiBTZXR1cCBkaXZpZGVyIGJ5IDEwIHRvIHJlYWNoIDQ4IE1IeiAqLwotCXVzYnIgfD0gKCgxMCAtIDEpIDw8IDgpICYgQVQ5MV9QTUNfT0hDSVVTQkRJVjsKLQotCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1VTQiwgdXNicik7Ci0KLQkvKiBOb3cgc2V0IHVocGNrIHZhbHVlcyAqLwotCXVocGNrLnBhcmVudCA9ICZ1dG1pX2NsazsKLQl1aHBjay5wbWNfbWFzayA9IEFUOTFTQU05MjZ4X1BNQ19VSFA7Ci0JdWhwY2sucmF0ZV9oeiA9IGF0OTFfdXNiX3JhdGUoJnV0bWlfY2xrLCB1dG1pX2Nsay5yYXRlX2h6LCB1c2JyKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYXQ5MV9wbWNfaW5pdCh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JdW5zaWduZWQgdG1wLCBmcmVxLCBtY2tyOwotCWludCBpOwotCWludCBwbGxfb3ZlcmNsb2NrID0gZmFsc2U7Ci0KLQkvKgotCSAqIFdoZW4gdGhlIGJvb3Rsb2FkZXIgaW5pdGlhbGl6ZWQgdGhlIG1haW4gb3NjaWxsYXRvciBjb3JyZWN0bHksCi0JICogdGhlcmUncyBubyBwcm9ibGVtIHVzaW5nIHRoZSBjeWNsZSBjb3VudGVyLiAgQnV0IGlmIGl0IGRpZG4ndCwKLQkgKiBvciB3aGVuIHVzaW5nIG9zY2lsbGF0b3IgYnlwYXNzIG1vZGUsIHdlIG11c3QgYmUgdG9sZCB0aGUgc3BlZWQKLQkgKiBvZiB0aGUgbWFpbiBjbG9jay4KLQkgKi8KLQlpZiAoIW1haW5fY2xvY2spIHsKLQkJZG8gewotCQkJdG1wID0gYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfTUNGUik7Ci0JCX0gd2hpbGUgKCEodG1wICYgQVQ5MV9QTUNfTUFJTlJEWSkpOwotCQltYWluX2Nsb2NrID0gKHRtcCAmIEFUOTFfUE1DX01BSU5GKSAqIChBVDkxX1NMT1dfQ0xPQ0sgLyAxNik7Ci0JfQotCW1haW5fY2xrLnJhdGVfaHogPSBtYWluX2Nsb2NrOwotCi0JLyogcmVwb3J0IGlmIFBMTEEgaXMgbW9yZSB0aGFuIG1pbGRseSBvdmVyY2xvY2tlZCAqLwotCXBsbGEucmF0ZV9oeiA9IGF0OTFfcGxsX3JhdGUoJnBsbGEsIG1haW5fY2xvY2ssIGF0OTFfcG1jX3JlYWQoQVQ5MV9DS0dSX1BMTEFSKSk7Ci0JaWYgKGNwdV9oYXNfMTA1Nk1fcGxsYSgpKSB7Ci0JCWlmIChwbGxhLnJhdGVfaHogPiAxMDU2MDAwMDAwKQotCQkJcGxsX292ZXJjbG9jayA9IHRydWU7Ci0JfSBlbHNlIGlmIChjcHVfaGFzXzgwME1fcGxsYSgpKSB7Ci0JCWlmIChwbGxhLnJhdGVfaHogPiA4MDAwMDAwMDApCi0JCQlwbGxfb3ZlcmNsb2NrID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKGNwdV9oYXNfMzAwTV9wbGxhKCkpIHsKLQkJaWYgKHBsbGEucmF0ZV9oeiA+IDMwMDAwMDAwMCkKLQkJCXBsbF9vdmVyY2xvY2sgPSB0cnVlOwotCX0gZWxzZSBpZiAoY3B1X2hhc18yNDBNX3BsbGEoKSkgewotCQlpZiAocGxsYS5yYXRlX2h6ID4gMjQwMDAwMDAwKQotCQkJcGxsX292ZXJjbG9jayA9IHRydWU7Ci0JfSBlbHNlIGlmIChjcHVfaGFzXzIxME1fcGxsYSgpKSB7Ci0JCWlmIChwbGxhLnJhdGVfaHogPiAyMTAwMDAwMDApCi0JCQlwbGxfb3ZlcmNsb2NrID0gdHJ1ZTsKLQl9IGVsc2UgewotCQlpZiAocGxsYS5yYXRlX2h6ID4gMjA5MDAwMDAwKQotCQkJcGxsX292ZXJjbG9jayA9IHRydWU7Ci0JfQotCWlmIChwbGxfb3ZlcmNsb2NrKQotCQlwcl9pbmZvKCJDbG9ja3M6IFBMTEEgb3ZlcmNsb2NrZWQsICVsZCBNSHpcbiIsIHBsbGEucmF0ZV9oeiAvIDEwMDAwMDApOwotCi0JaWYgKGNwdV9oYXNfcGxsYWRpdjIoKSkgewotCQltY2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19NQ0tSKTsKLQkJcGxsYS5yYXRlX2h6IC89ICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX1BMTEFESVYyKSA+PiAxMikpOwkvKiBwbGxhIGRpdmlzb3IgYnkgMiAqLwotCX0KLQotCWlmICghY3B1X2hhc19wbGxiKCkgJiYgY3B1X2hhc191cGxsKCkpIHsKLQkJLyogc2V0dXAgVVRNSSBjbG9jayBhcyB0aGUgZm91cnRoIHByaW1hcnkgY2xvY2sKLQkJICogKGluc3RlYWQgb2YgcGxsYikgKi8KLQkJdXRtaV9jbGsudHlwZSB8PSBDTEtfVFlQRV9QUklNQVJZOwotCQl1dG1pX2Nsay5pZCA9IDM7Ci0JfQotCi0KLQkvKgotCSAqIFVTQiBIUyBjbG9jayBpbml0Ci0JICovCi0JaWYgKGNwdV9oYXNfdXRtaSgpKSB7Ci0JCS8qCi0JCSAqIG11bHRpcGxpZXIgaXMgaGFyZC13aXJlZCB0byA0MAotCQkgKiAob2J0YWluIHRoZSBVU0IgSGlnaCBTcGVlZCA0ODAgTUh6IHdoZW4gaW5wdXQgaXMgMTIgTUh6KQotCQkgKi8KLQkJdXRtaV9jbGsucmF0ZV9oeiA9IDQwICogdXRtaV9jbGsucGFyZW50LT5yYXRlX2h6OwotCi0JCS8qIFVUTUkgYmlhcyBhbmQgUExMIGFyZSBtYW5hZ2VkIGF0IHRoZSBzYW1lIHRpbWUgKi8KLQkJaWYgKGNwdV9oYXNfdXBsbCgpKQotCQkJdXRtaV9jbGsucG1jX21hc2sgfD0gQVQ5MV9QTUNfQklBU0VOOwotCX0KLQotCS8qCi0JICogVVNCIEZTIGNsb2NrIGluaXQKLQkgKi8KLQlpZiAoY3B1X2hhc19wbGxiKCkpCi0JCWF0OTFfcGxsYl91c2Jmc19jbG9ja19pbml0KG1haW5fY2xvY2spOwotCWlmIChjcHVfaGFzX3VwbGwoKSkKLQkJLyogYXNzdW1lcyB0aGF0IHdlIGNob29zZSBVUExMIGZvciBVU0IgYW5kIG5vdCBQTExBICovCi0JCWF0OTFfdXBsbF91c2Jmc19jbG9ja19pbml0KG1haW5fY2xvY2spOwotCi0JLyoKLQkgKiBNQ0sgYW5kIENQVSBkZXJpdmUgZnJvbSBvbmUgb2YgdGhvc2UgcHJpbWFyeSBjbG9ja3MuCi0JICogRm9yIG5vdywgYXNzdW1lIHRoaXMgcGFyZW50YWdlIHdvbid0IGNoYW5nZS4KLQkgKi8KLQltY2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19NQ0tSKTsKLQltY2sucGFyZW50ID0gYXQ5MV9jc3NfdG9fY2xrKG1ja3IgJiBBVDkxX1BNQ19DU1MpOwotCWZyZXEgPSBtY2sucGFyZW50LT5yYXRlX2h6OwotCWZyZXEgLz0gcG1jX3ByZXNjYWxlcl9kaXZpZGVyKG1ja3IpOwkJCQkJLyogcHJlc2NhbGUgKi8KLQlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkgewotCQltY2sucmF0ZV9oeiA9IGZyZXEgLyAoMSArICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJLyogbWRpdiAqLwotCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05ZzIwKCkpIHsKLQkJbWNrLnJhdGVfaHogPSAobWNrciAmIEFUOTFfUE1DX01ESVYpID8KLQkJCWZyZXEgLyAoKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA+PiA3KSA6IGZyZXE7CS8qIG1kaXYgOyAoeCA+PiA3KSA9ICgoeCA+PiA4KSAqIDIpICovCi0JCWlmIChtY2tyICYgQVQ5MV9QTUNfUERJVikKLQkJCWZyZXEgLz0gMjsJCS8qIHByb2Nlc3NvciBjbG9jayBkaXZpc2lvbiAqLwotCX0gZWxzZSBpZiAoY3B1X2hhc19tZGl2MygpKSB7Ci0JCW1jay5yYXRlX2h6ID0gKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA9PSBBVDkxU0FNOV9QTUNfTURJVl8zID8KLQkJCWZyZXEgLyAzIDogZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJLyogbWRpdiAqLwotCX0gZWxzZSB7Ci0JCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJCS8qIG1kaXYgKi8KLQl9Ci0KLQlpZiAoY3B1X2hhc19hbHRfcHJlc2NhbGVyKCkpIHsKLQkJLyogUHJvZ3JhbW1hYmxlIGNsb2NrcyBjYW4gdXNlIE1DSyAqLwotCQltY2sudHlwZSB8PSBDTEtfVFlQRV9QUklNQVJZOwotCQltY2suaWQgPSA0OwotCX0KLQotCS8qIFJlZ2lzdGVyIHRoZSBQTUMncyBzdGFuZGFyZCBjbG9ja3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGFuZGFyZF9wbWNfY2xvY2tzKTsgaSsrKQotCQlhdDkxX2Nsa19hZGQoc3RhbmRhcmRfcG1jX2Nsb2Nrc1tpXSk7Ci0KLQlpZiAoY3B1X2hhc19wbGxiKCkpCi0JCWF0OTFfY2xrX2FkZCgmcGxsYik7Ci0KLQlpZiAoY3B1X2hhc191aHAoKSkKLQkJYXQ5MV9jbGtfYWRkKCZ1aHBjayk7Ci0KLQlpZiAoY3B1X2hhc191ZHBmcygpKQotCQlhdDkxX2Nsa19hZGQoJnVkcGNrKTsKLQotCWlmIChjcHVfaGFzX3V0bWkoKSkKLQkJYXQ5MV9jbGtfYWRkKCZ1dG1pX2Nsayk7Ci0KLQkvKiBNQ0sgYW5kIENQVSBjbG9jayBhcmUgImFsd2F5cyBvbiIgKi8KLQljbGtfZW5hYmxlKCZtY2spOwotCi0JcHJpbnRrKCJDbG9ja3M6IENQVSAldSBNSHosIG1hc3RlciAldSBNSHosIG1haW4gJXUuJTAzdSBNSHpcbiIsCi0JCWZyZXEgLyAxMDAwMDAwLCAodW5zaWduZWQpIG1jay5yYXRlX2h6IC8gMTAwMDAwMCwKLQkJKHVuc2lnbmVkKSBtYWluX2Nsb2NrIC8gMTAwMDAwMCwKLQkJKCh1bnNpZ25lZCkgbWFpbl9jbG9jayAlIDEwMDAwMDApIC8gMTAwMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX09GKQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcG1jX2lkc1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOWc0NS1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOW4xMi1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LXBtYyIgfSwKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDMtcG1jIiB9LAotCXsgLypzZW50aW5lbCovIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9zY19pZHNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLG9zYyIgfSwKLQl7IC8qc2VudGluZWwqLyB9Ci19OwotCi1pbnQgX19pbml0IGF0OTFfZHRfY2xvY2tfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyIG1haW5fY2xvY2sgPSAwOwotCi0JbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgcG1jX2lkcyk7Ci0JaWYgKCFucCkKLQkJcGFuaWMoInVuYWJsZSB0byBmaW5kIGNvbXBhdGlibGUgcG1jIG5vZGUgaW4gZHRiXG4iKTsKLQotCWF0OTFfcG1jX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7Ci0JaWYgKCFhdDkxX3BtY19iYXNlKQotCQlwYW5pYygidW5hYmxlIHRvIG1hcCBwbWMgY3B1IHJlZ2lzdGVyc1xuIik7Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci0KLQkvKiByZXRyaWV2ZSB0aGUgZnJlcWVuY3kgb2YgZml4ZWQgY2xvY2tzIGZyb20gZGV2aWNlIHRyZWUgKi8KLQlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBvc2NfaWRzKTsKLQlpZiAobnApIHsKLQkJdTMyIHJhdGU7Ci0JCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjbG9jay1mcmVxdWVuY3kiLCAmcmF0ZSkpCi0JCQltYWluX2Nsb2NrID0gcmF0ZTsKLQl9Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci0KLQlyZXR1cm4gYXQ5MV9wbWNfaW5pdChtYWluX2Nsb2NrKTsKLX0KLSNlbmRpZgotCi1pbnQgX19pbml0IGF0OTFfY2xvY2tfaW5pdCh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JYXQ5MV9wbWNfYmFzZSA9IGlvcmVtYXAoQVQ5MV9QTUMsIDI1Nik7Ci0JaWYgKCFhdDkxX3BtY19iYXNlKQotCQlwYW5pYygiSW1wb3NzaWJsZSB0byBpb3JlbWFwIEFUOTFfUE1DIDB4JXhcbiIsIEFUOTFfUE1DKTsKLQotCXJldHVybiBhdDkxX3BtY19pbml0KG1haW5fY2xvY2spOwotfQotCi0vKgotICogU2V2ZXJhbCB1bnVzZWQgY2xvY2tzIG1heSBiZSBhY3RpdmUuICBUdXJuIHRoZW0gb2ZmLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2Nsb2NrX3Jlc2V0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBwY2RyID0gMDsKLQl1bnNpZ25lZCBsb25nIHBjZHIxID0gMDsKLQl1bnNpZ25lZCBsb25nIHNjZHIgPSAwOwotCXN0cnVjdCBjbGsgKmNsazsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChjbGstPnVzZXJzID4gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjbGstPm1vZGUgPT0gcG1jX3BlcmlwaF9tb2RlKSB7Ci0JCQlpZiAoY3B1X2lzX3NhbWE1ZDMoKSkgewotCQkJCXUzMiBwbWNfbWFzayA9IDEgPDwgKGNsay0+cGlkICUgMzIpOwotCi0JCQkJaWYgKGNsay0+cGlkID4gMzEpCi0JCQkJCXBjZHIxIHw9IHBtY19tYXNrOwotCQkJCWVsc2UKLQkJCQkJcGNkciB8PSBwbWNfbWFzazsKLQkJCX0gZWxzZQotCQkJCXBjZHIgfD0gY2xrLT5wbWNfbWFzazsKLQkJfQotCi0JCWlmIChjbGstPm1vZGUgPT0gcG1jX3N5c19tb2RlKQotCQkJc2NkciB8PSBjbGstPnBtY19tYXNrOwotCi0JCXByX2RlYnVnKCJDbG9ja3M6IGRpc2FibGUgdW51c2VkICVzXG4iLCBjbGstPm5hbWUpOwotCX0KLQotCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1NDRFIsIHNjZHIpOwotCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1BDRFIsIHBjZHIpOwotCWlmIChjcHVfaXNfc2FtYTVkMygpKQotCQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19QQ0RSMSwgcGNkcjEpOwotCi0JcmV0dXJuIDA7Ci19Ci1sYXRlX2luaXRjYWxsKGF0OTFfY2xvY2tfcmVzZXQpOwotCi12b2lkIGF0OTFzYW05X2lkbGUodm9pZCkKLXsKLQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19TQ0RSLCBBVDkxX1BNQ19QQ0spOwotCWNwdV9kb19pZGxlKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOThhMzliLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+Ci0KLSNkZWZpbmUgQ0xLX1RZUEVfUFJJTUFSWQkweDEKLSNkZWZpbmUgQ0xLX1RZUEVfUExMCQkweDIKLSNkZWZpbmUgQ0xLX1RZUEVfUFJPR1JBTU1BQkxFCTB4NAotI2RlZmluZSBDTEtfVFlQRV9QRVJJUEhFUkFMCTB4OAotI2RlZmluZSBDTEtfVFlQRV9TWVNURU0JCTB4MTAKLQotCi1zdHJ1Y3QgY2xrIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JY29uc3QgY2hhcgkqbmFtZTsJCS8qIHVuaXF1ZSBjbG9jayBuYW1lICovCi0Jc3RydWN0IGNsa19sb29rdXAgY2w7Ci0JdW5zaWduZWQgbG9uZwlyYXRlX2h6OwotCXVuc2lnbmVkCWRpdjsJCS8qIHBhcmVudCBjbG9jayBkaXZpZGVyICovCi0Jc3RydWN0IGNsawkqcGFyZW50OwotCXVuc2lnbmVkCXBpZDsJCS8qIHBlcmlwaGVyYWwgSUQgKi8KLQl1MzIJCXBtY19tYXNrOwotCXZvaWQJCSgqbW9kZSkoc3RydWN0IGNsayAqLCBpbnQpOwotCXVuc2lnbmVkCWlkOjM7CQkvKiBQQ0swLi40LCBvciAzMmsvbWFpbi9hL2IgKi8KLQl1bnNpZ25lZAl0eXBlOwkJLyogY2xvY2sgdHlwZSAqLwotCXUxNgkJdXNlcnM7Ci19OwotCi0KLWV4dGVybiBpbnQgX19pbml0IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotZXh0ZXJuIHN0cnVjdCBjbGsgbWNrOwotZXh0ZXJuIHN0cnVjdCBjbGsgdXRtaV9jbGs7Ci0KLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspCQkJXAotCXsJCQkJCQlcCi0JCS5jb25faWQgPSBfaWQsCQkJCVwKLQkJLmNsayA9IF9jbGssCQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0xLREVWX0NPTl9ERVZfSUQoX2Nvbl9pZCwgX2Rldl9pZCwgX2NsaykJXAotCXsJCQkJCQlcCi0JCS5jb25faWQgPSBfY29uX2lkLAkJCVwKLQkJLmRldl9pZCA9IF9kZXZfaWQsCQkJXAotCQkuY2xrID0gX2NsaywJCQkJXAotCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCmluZGV4IDgxOTU5Y2YuLmQ1MzMyNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVQ5MV9HRU5FUklDX0gKICNkZWZpbmUgX0FUOTFfR0VORVJJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCkBAIC0yMyw3MSArMjIsMTkgQEAKIAogIC8qIFByb2Nlc3NvcnMgKi8KIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxcm05MjAwX3NldF90eXBlKGludCB0eXBlKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxeDQwX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxcm05MjAwX2R0X2luaXRpYWxpemUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9kdF9pbml0aWFsaXplKHZvaWQpOwogCiAgLyogSW50ZXJydXB0cyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7Ci1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MXg0MF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWljX2luaXQodW5zaWduZWQgaW50IHByaW9yaXR5W10sCi0JCQkJIHVuc2lnbmVkIGludCBleHRfaXJxX21hc2spOwotZXh0ZXJuIGludCAgX19pbml0IGF0OTFfYWljX29mX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCk7Ci1leHRlcm4gaW50ICBfX2luaXQgYXQ5MV9haWM1X29mX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9zeXNpcnFfbWFza19ydGModTMyIHJ0Y19iYXNlKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX3N5c2lycV9tYXNrX3J0dCh1MzIgcnR0X2Jhc2UpOwogCi0gLyogRGV2aWNlcyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKTsKLQogIC8qIFRpbWVyICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9pbml0X3RpbWUodm9pZCk7Ci1leHRlcm4gdm9pZCBhdDkxcm05MjAwX2lvcmVtYXBfc3QodTMyIGFkZHIpOwogZXh0ZXJuIHZvaWQgYXQ5MXJtOTIwMF90aW1lcl9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgYXQ5MXNhbTkyNnhfaW9yZW1hcF9waXQodTMyIGFkZHIpOwotZXh0ZXJuIHZvaWQgYXQ5MXNhbTkyNnhfcGl0X2luaXQoaW50IGlycSk7Ci1leHRlcm4gdm9pZCBhdDkxeDQwX3RpbWVyX2luaXQodm9pZCk7Ci0KLSAvKiBDbG9ja3MgKi8KLSNpZmRlZiBDT05GSUdfT0xEX0NMS19BVDkxCi1leHRlcm4gaW50IF9faW5pdCBhdDkxX2Nsb2NrX2luaXQodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKLWV4dGVybiBpbnQgX19pbml0IGF0OTFfZHRfY2xvY2tfaW5pdCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW50IGlubGluZSBhdDkxX2Nsb2NrX2luaXQodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW50IGlubGluZSBhdDkxX2R0X2Nsb2NrX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi1zdHJ1Y3QgZGV2aWNlOwotCi0gLyogUG93ZXIgTWFuYWdlbWVudCAqLwotZXh0ZXJuIHZvaWQgYXQ5MV9pcnFfc3VzcGVuZCh2b2lkKTsKLWV4dGVybiB2b2lkIGF0OTFfaXJxX3Jlc3VtZSh2b2lkKTsKIAogLyogaWRsZSAqLwogZXh0ZXJuIHZvaWQgYXQ5MXNhbTlfaWRsZSh2b2lkKTsKIAogLyogTWF0cml4ICovCiBleHRlcm4gdm9pZCBhdDkxX2lvcmVtYXBfbWF0cml4KHUzMiBiYXNlX2FkZHIpOwotCi0vKiBSYW0gQ29udHJvbGVyICovCi1leHRlcm4gdm9pZCBhdDkxX2lvcmVtYXBfcmFtYyhpbnQgaWQsIHUzMiBhZGRyLCB1MzIgc2l6ZSk7Ci0KLSAvKiBHUElPICovCi0jZGVmaW5lIEFUOTFSTTkyMDBfUFFGUAkJMwkvKiBBVDkxUk05MjAwIFBRRlAgcGFja2FnZSBoYXMgMyBiYW5rcyAqLwotI2RlZmluZSBBVDkxUk05MjAwX0JHQQkJNAkvKiBBVDkxUk05MjAwIEJHQSBwYWNrYWdlIGhhcyA0IGJhbmtzICovCi0KLXN0cnVjdCBhdDkxX2dwaW9fYmFuayB7Ci0JdW5zaWduZWQgc2hvcnQgaWQ7CQkvKiBwZXJpcGhlcmFsIElEICovCi0JdW5zaWduZWQgbG9uZyByZWdiYXNlOwkJLyogb2Zmc2V0IGZyb20gc3lzdGVtIHBlcmlwaGVyYWwgYmFzZSAqLwotfTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2dwaW9faW5pdChzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgKiwgaW50IG5yX2JhbmtzKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2dwaW9faXJxX3NldHVwKHZvaWQpOwotZXh0ZXJuIGludCAgX19pbml0IGF0OTFfZ3Bpb19vZl9pcnFfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCQkgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KTsKLQotZXh0ZXJuIHUzMiBhdDkxX2dldF9leHRlcm5faXJxKHZvaWQpOwotCiAjZW5kaWYgLyogX0FUOTFfR0VORVJJQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmMDVhYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsOTgyICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEhQIExhYnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9waW8uaD4KLQotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLSNkZWZpbmUgTUFYX05CX0dQSU9fUEVSX0JBTksJMzIKLQotc3RydWN0IGF0OTFfZ3Bpb19jaGlwIHsKLQlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwCSpuZXh0OwkJLyogQmFuayBzaGFyaW5nIHNhbWUgY2xvY2sgKi8KLQlpbnQJCQlwaW9jX2h3aXJxOwkvKiBQSU8gYmFuayBpbnRlcnJ1cHQgaWRlbnRpZmllciBvbiBBSUMgKi8KLQlpbnQJCQlwaW9jX3ZpcnE7CS8qIFBJTyBiYW5rIExpbnV4IHZpcnR1YWwgaW50ZXJydXB0ICovCi0JaW50CQkJcGlvY19pZHg7CS8qIFBJTyBiYW5rIGluZGV4ICovCi0Jdm9pZCBfX2lvbWVtCQkqcmVnYmFzZTsJLyogUElPIGJhbmsgdmlydHVhbCBhZGRyZXNzICovCi0Jc3RydWN0IGNsawkJKmNsb2NrOwkJLyogYXNzb2NpYXRlZCBjbG9jayAqLwotCXN0cnVjdCBpcnFfZG9tYWluCSpkb21haW47CS8qIGFzc29jaWF0ZWQgaXJxIGRvbWFpbiAqLwotfTsKLQotI2RlZmluZSB0b19hdDkxX2dwaW9fY2hpcChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IGF0OTFfZ3Bpb19jaGlwLCBjaGlwKQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7Ci1zdGF0aWMgdm9pZCBhdDkxX2dwaW9saWJfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKTsKLXN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKLXN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOwotc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOwotc3RhdGljIGludCBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQkgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKLXN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQl1bnNpZ25lZCBvZmZzZXQpOwotc3RhdGljIGludCBhdDkxX2dwaW9saWJfdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7Ci0KLSNkZWZpbmUgQVQ5MV9HUElPX0NISVAobmFtZSkJCQkJCQlcCi0JewkJCQkJCQkJXAotCQkuY2hpcCA9IHsJCQkJCQlcCi0JCQkubGFiZWwJCSAgPSBuYW1lLAkJCVwKLQkJCS5yZXF1ZXN0CSAgPSBhdDkxX2dwaW9saWJfcmVxdWVzdCwJXAotCQkJLmdldF9kaXJlY3Rpb24gICAgPSBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbiwgXAotCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX2lucHV0LCBcCi0JCQkuZGlyZWN0aW9uX291dHB1dCA9IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0LCBcCi0JCQkuZ2V0CQkgID0gYXQ5MV9ncGlvbGliX2dldCwJCVwKLQkJCS5zZXQJCSAgPSBhdDkxX2dwaW9saWJfc2V0LAkJXAotCQkJLmRiZ19zaG93CSAgPSBhdDkxX2dwaW9saWJfZGJnX3Nob3csCVwKLQkJCS50b19pcnEJCSAgPSBhdDkxX2dwaW9saWJfdG9faXJxLAlcCi0JCQkubmdwaW8JCSAgPSBNQVhfTkJfR1BJT19QRVJfQkFOSywJXAotCQl9LAkJCQkJCQlcCi0JfQotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19jaGlwIGdwaW9fY2hpcFtdID0gewotCUFUOTFfR1BJT19DSElQKCJwaW9BIiksCi0JQVQ5MV9HUElPX0NISVAoInBpb0IiKSwKLQlBVDkxX0dQSU9fQ0hJUCgicGlvQyIpLAotCUFUOTFfR1BJT19DSElQKCJwaW9EIiksCi0JQVQ5MV9HUElPX0NISVAoInBpb0UiKSwKLX07Ci0KLXN0YXRpYyBpbnQgZ3Bpb19iYW5rczsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGF0OTFfZ3Bpb19jYXBzOwotCi0vKiBBbGwgUElPIGNvbnRyb2xsZXJzIHN1cHBvcnQgUElPMyBmZWF0dXJlcyAqLwotI2RlZmluZSBBVDkxX0dQSU9fQ0FQX1BJTzMJKDEgPDwgIDApCi0KLSNkZWZpbmUgaGFzX3BpbzMoKQkoYXQ5MV9ncGlvX2NhcHMgJiBBVDkxX0dQSU9fQ0FQX1BJTzMpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGluX3RvX2NvbnRyb2xsZXIodW5zaWduZWQgcGluKQotewotCXBpbiAvPSBNQVhfTkJfR1BJT19QRVJfQkFOSzsKLQlpZiAobGlrZWx5KHBpbiA8IGdwaW9fYmFua3MpKQotCQlyZXR1cm4gZ3Bpb19jaGlwW3Bpbl0ucmVnYmFzZTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBpbl90b19tYXNrKHVuc2lnbmVkIHBpbikKLXsKLQlyZXR1cm4gMSA8PCAocGluICUgTUFYX05CX0dQSU9fUEVSX0JBTkspOwotfQotCi0KLXN0YXRpYyBjaGFyIHBlcmlwaGVyYWxfZnVuY3Rpb24odm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIG1hc2spCi17Ci0JY2hhcglyZXQgPSAnWCc7Ci0JdTgJc2VsZWN0OwotCi0JaWYgKHBpbykgewotCQlpZiAoaGFzX3BpbzMoKSkgewotCQkJc2VsZWN0ID0gISEoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjEpICYgbWFzayk7Ci0JCQlzZWxlY3QgfD0gKCEhKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IyKSAmIG1hc2spIDw8IDEpOwotCQkJcmV0ID0gJ0EnICsgc2VsZWN0OwotCQl9IGVsc2UgewotCQkJcmV0ID0gX19yYXdfcmVhZGwocGlvICsgUElPX0FCU1IpICYgbWFzayA/Ci0JCQkJCQkJJ0InIDogJ0EnOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIE5vdCBhbGwgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFyZSBleHBvc2VkIHRocm91Z2ggdGhlc2UgY2FsbHM7IHRoZXkKLSAqIG9ubHkgZW5jYXBzdWxhdGUgdGhlIG1vc3QgY29tbW9uIGZlYXR1cmVzIGFuZCBtb2Rlcy4gIChTbyBpZiB5b3UKLSAqIHdhbnQgdG8gY2hhbmdlIHNpZ25hbHMgaW4gZ3JvdXBzLCBkbyBpdCBkaXJlY3RseS4pCi0gKgotICogQm9vdGxvYWRlcnMgd2lsbCB1c3VhbGx5IGhhbmRsZSBzb21lIG9mIHRoZSBwaW4gbXVsdGlwbGV4aW5nIHNldHVwLgotICogVGhlIGludGVudCBpcyBjZXJ0YWlubHkgdGhhdCBieSB0aGUgdGltZSBMaW51eCBpcyBmdWxseSBib290ZWQsIGFsbAotICogcGlucyBzaG91bGQgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlc2Ugc2V0dXAgY2FsbHMgc2hvdWxkCi0gKiBvbmx5IGJlIHVzZWQgYnkgYm9hcmQgc2V0dXAgcm91dGluZXMsIG9yIHBvc3NpYmx5IGluIGRyaXZlciBwcm9iZSgpLgotICoKLSAqIEZvciBib290bG9hZGVycyBkb2luZyBhbGwgdGhhdCBzZXR1cCwgdGhlc2UgY2FsbHMgY291bGQgYmUgaW5saW5lZAotICogYXMgTk9QcyBzbyBMaW51eCB3b24ndCBkdXBsaWNhdGUgYW55IHNldHVwIGNvZGUKLSAqLwotCi0KLS8qCi0gKiBtdXggdGhlIHBpbiB0byB0aGUgIkdQSU8iIHBlcmlwaGVyYWwgcm9sZS4KLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfR1BJT19wZXJpcGgodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCkKLXsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7Ci0JdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7Ci0KLQlpZiAoIXBpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BFUik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0OTFfc2V0X0dQSU9fcGVyaXBoKTsKLQotCi0vKgotICogbXV4IHRoZSBwaW4gdG8gdGhlICJBIiBpbnRlcm5hbCBwZXJpcGhlcmFsIHJvbGUuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0FfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKLQlpZiAoaGFzX3BpbzMoKSkgewotCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjEpICYgfm1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjEpOwotCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjIpICYgfm1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjIpOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fQVNSKTsKLQl9Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9BX3BlcmlwaCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSAiQiIgaW50ZXJuYWwgcGVyaXBoZXJhbCByb2xlLgotICovCi1pbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9CX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7Ci0JaWYgKGhhc19waW8zKCkpIHsKLQkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IxKSB8IG1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjEpOwotCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjIpICYgfm1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjIpOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fQlNSKTsKLQl9Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9CX3BlcmlwaCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSAiQyIgaW50ZXJuYWwgcGVyaXBoZXJhbCByb2xlLgotICovCi1pbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9DX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvIHx8ICFoYXNfcGlvMygpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IxKSAmIH5tYXNrLCBwaW8gKyBQSU9fQUJDRFNSMSk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IyKSB8IG1hc2ssIHBpbyArIFBJT19BQkNEU1IyKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BEUik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0OTFfc2V0X0NfcGVyaXBoKTsKLQotCi0vKgotICogbXV4IHRoZSBwaW4gdG8gdGhlICJEIiBpbnRlcm5hbCBwZXJpcGhlcmFsIHJvbGUuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0RfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIWhhc19waW8zKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKLQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjEpIHwgbWFzaywgcGlvICsgUElPX0FCQ0RTUjEpOwotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChwaW8gKyBQSU9fQUJDRFNSMikgfCBtYXNrLCBwaW8gKyBQSU9fQUJDRFNSMik7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9EX3BlcmlwaCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSBncGlvIGNvbnRyb2xsZXIgKGluc3RlYWQgb2YgIkEiLCAiQiIsICJDIgotICogb3IgIkQiIHBlcmlwaGVyYWwpLCBhbmQgY29uZmlndXJlIGl0IGZvciBhbiBpbnB1dC4KLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZ3Bpb19pbnB1dCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZ3Bpb19pbnB1dCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSBncGlvIGNvbnRyb2xsZXIgKGluc3RlYWQgb2YgIkEiLCAiQiIsICJDIgotICogb3IgIkQiIHBlcmlwaGVyYWwpLCBhbmQgY29uZmlndXJlIGl0IGZvciBhbiBvdXRwdXQuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2dwaW9fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BVRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsdWUgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRVIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZ3Bpb19vdXRwdXQpOwotCi0KLS8qCi0gKiBlbmFibGUvZGlzYWJsZSB0aGUgZ2xpdGNoIGZpbHRlcjsgbW9zdGx5IHVzZWQgd2l0aCBJUlEgaGFuZGxpbmcuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2RlZ2xpdGNoKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChoYXNfcGlvMygpICYmIGlzX29uKQotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lGU0NEUik7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIChpc19vbiA/IFBJT19JRkVSIDogUElPX0lGRFIpKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZGVnbGl0Y2gpOwotCi0vKgotICogZW5hYmxlL2Rpc2FibGUgdGhlIGRlYm91bmNlIGZpbHRlcjsKLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZGVib3VuY2UodW5zaWduZWQgcGluLCBpbnQgaXNfb24sIGludCBkaXYpCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIWhhc19waW8zKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGlzX29uKSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSUZTQ0VSKTsKLQkJX19yYXdfd3JpdGVsKGRpdiAmIFBJT19TQ0RSX0RJViwgcGlvICsgUElPX1NDRFIpOwotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lGRVIpOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSUZEUik7Ci0JfQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9kZWJvdW5jZSk7Ci0KLS8qCi0gKiBlbmFibGUvZGlzYWJsZSB0aGUgbXVsdGktZHJpdmVyOyBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIG91dHB1dCBhbmQKLSAqIGFsbG93cyB0aGUgb3V0cHV0IHBpbiB0byBydW4gYXMgYW4gb3BlbiBjb2xsZWN0b3Igb3V0cHV0LgotICovCi1pbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9tdWx0aV9kcml2ZSh1bnNpZ25lZCBwaW4sIGludCBpc19vbikKLXsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7Ci0JdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7Ci0KLQlpZiAoIXBpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKGlzX29uID8gUElPX01ERVIgOiBQSU9fTUREUikpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9tdWx0aV9kcml2ZSk7Ci0KLS8qCi0gKiBlbmFibGUvZGlzYWJsZSB0aGUgcHVsbC1kb3duLgotICogSWYgcHVsbC11cCBhbHJlYWR5IGVuYWJsZWQgd2hpbGUgY2FsbGluZyB0aGUgZnVuY3Rpb24sIHdlIGRpc2FibGUgaXQuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X3B1bGxkb3duKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvIHx8ICFoYXNfcGlvMygpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIERpc2FibGUgcHVsbC11cCBhbnl3YXkgKi8KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BVRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAoaXNfb24gPyBQSU9fUFBERVIgOiBQSU9fUFBERFIpKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfcHVsbGRvd24pOwotCi0vKgotICogZGlzYWJsZSBTY2htaXR0IHRyaWdnZXIKLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9kaXNhYmxlX3NjaG1pdHRfdHJpZyh1bnNpZ25lZCBwaW4pCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIWhhc19waW8zKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19TQ0hNSVRUKSB8IG1hc2ssIHBpbyArIFBJT19TQ0hNSVRUKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9kaXNhYmxlX3NjaG1pdHRfdHJpZyk7Ci0KLS8qCi0gKiBhc3N1bWluZyB0aGUgcGluIGlzIG11eGVkIGFzIGEgZ3BpbyBvdXRwdXQsIHNldCBpdHMgdmFsdWUuCi0gKi8KLWludCBhdDkxX3NldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbHVlID8gUElPX1NPRFIgOiBQSU9fQ09EUikpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9ncGlvX3ZhbHVlKTsKLQotCi0vKgotICogcmVhZCB0aGUgcGluJ3MgdmFsdWUgKHdvcmtzIGV2ZW4gaWYgaXQncyBub3QgbXV4ZWQgYXMgYSBncGlvKS4KLSAqLwotaW50IGF0OTFfZ2V0X2dwaW9fdmFsdWUodW5zaWduZWQgcGluKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQl1MzIJCXBkc3I7Ci0KLQlpZiAoIXBpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcGRzciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19QRFNSKTsKLQlyZXR1cm4gKHBkc3IgJiBtYXNrKSAhPSAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX2dldF9ncGlvX3ZhbHVlKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHUzMiB3YWtldXBzW01BWF9HUElPX0JBTktTXTsKLXN0YXRpYyB1MzIgYmFja3Vwc1tNQVhfR1BJT19CQU5LU107Ci0KLXN0YXRpYyBpbnQgZ3Bpb19pcnFfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVuc2lnbmVkCW1hc2sgPSAxIDw8IGQtPmh3aXJxOwotCXVuc2lnbmVkCWJhbmsgPSBhdDkxX2dwaW8tPnBpb2NfaWR4OwotCi0JaWYgKHVubGlrZWx5KGJhbmsgPj0gTUFYX0dQSU9fQkFOS1MpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzdGF0ZSkKLQkJd2FrZXVwc1tiYW5rXSB8PSBtYXNrOwotCWVsc2UKLQkJd2FrZXVwc1tiYW5rXSAmPSB+bWFzazsKLQotCWlycV9zZXRfaXJxX3dha2UoYXQ5MV9ncGlvLT5waW9jX3ZpcnEsIHN0YXRlKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGF0OTFfZ3Bpb19zdXNwZW5kKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCXZvaWQgX19pb21lbQkqcGlvID0gZ3Bpb19jaGlwW2ldLnJlZ2Jhc2U7Ci0KLQkJYmFja3Vwc1tpXSA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19JTVIpOwotCQlfX3Jhd193cml0ZWwoYmFja3Vwc1tpXSwgcGlvICsgUElPX0lEUik7Ci0JCV9fcmF3X3dyaXRlbCh3YWtldXBzW2ldLCBwaW8gKyBQSU9fSUVSKTsKLQotCQlpZiAoIXdha2V1cHNbaV0pIHsKLQkJCWNsa191bnByZXBhcmUoZ3Bpb19jaGlwW2ldLmNsb2NrKTsKLQkJCWNsa19kaXNhYmxlKGdwaW9fY2hpcFtpXS5jbG9jayk7Ci0JCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1BNX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiR1BJTy0lYyBtYXkgd2FrZSBmb3IgJTA4eFxuIiwgJ0EnK2ksIHdha2V1cHNbaV0pOwotI2VuZGlmCi0JCX0KLQl9Ci19Ci0KLXZvaWQgYXQ5MV9ncGlvX3Jlc3VtZSh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykgewotCQl2b2lkIF9faW9tZW0JKnBpbyA9IGdwaW9fY2hpcFtpXS5yZWdiYXNlOwotCi0JCWlmICghd2FrZXVwc1tpXSkgewotCQkJaWYgKGNsa19wcmVwYXJlKGdwaW9fY2hpcFtpXS5jbG9jaykgPT0gMCkKLQkJCQljbGtfZW5hYmxlKGdwaW9fY2hpcFtpXS5jbG9jayk7Ci0JCX0KLQotCQlfX3Jhd193cml0ZWwod2FrZXVwc1tpXSwgcGlvICsgUElPX0lEUik7Ci0JCV9fcmF3X3dyaXRlbChiYWNrdXBzW2ldLCBwaW8gKyBQSU9fSUVSKTsKLQl9Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIGdwaW9faXJxX3NldF93YWtlCU5VTEwKLSNlbmRpZgotCi0KLS8qIFNldmVyYWwgQUlDIGNvbnRyb2xsZXIgaXJxcyBhcmUgZGlzcGF0Y2hlZCB0aHJvdWdoIHRoaXMgR1BJTyBoYW5kbGVyLgotICogVG8gdXNlIGFueSBBVDkxX1BJTl8qIGFzIGFuIGV4dGVybmFsbHkgdHJpZ2dlcmVkIElSUSwgZmlyc3QgY2FsbAotICogYXQ5MV9zZXRfZ3Bpb19pbnB1dCgpIHRoZW4gbWF5YmUgZW5hYmxlIGl0cyBnbGl0Y2ggZmlsdGVyLgotICogVGhlbiBqdXN0IHJlcXVlc3RfaXJxKCkgd2l0aCB0aGUgcGluIElEOyBpdCB3b3JrcyBsaWtlIGFueSBBUk0gSVJRCi0gKiBoYW5kbGVyLgotICogRmlyc3QgaW1wbGVtZW50YXRpb24gYWx3YXlzIHRyaWdnZXJzIG9uIHJpc2luZyBhbmQgZmFsbGluZyBlZGdlcwotICogd2hlcmVhcyB0aGUgbmV3ZXIgUElPMyBjYW4gYmUgYWRkaXRpb25hbGx5IGNvbmZpZ3VyZWQgdG8gdHJpZ2dlciBvbgotICogbGV2ZWwsIGVkZ2Ugd2l0aCBhbnkgcG9sYXJpdHkuCi0gKgotICogQWx0ZXJuYXRpdmVseSwgY2VydGFpbiBwaW5zIG1heSBiZSB1c2VkIGRpcmVjdGx5IGFzIElSUTAuLklSUTYgYWZ0ZXIKLSAqIGNvbmZpZ3VyaW5nIHRoZW0gd2l0aCBhdDkxX3NldF9hX3BlcmlwaCgpIG9yIGF0OTFfc2V0X2JfcGVyaXBoKCkuCi0gKiBJUlEwLi5JUlE2IHNob3VsZCBiZSBjb25maWd1cmFibGUsIGUuZy4gbGV2ZWwgdnMgZWRnZSB0cmlnZ2VyaW5nLgotICovCi0KLXN0YXRpYyB2b2lkIGdwaW9faXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQJbWFzayA9IDEgPDwgZC0+aHdpcnE7Ci0KLQlpZiAocGlvKQotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lEUik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdwaW9faXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZAltYXNrID0gMSA8PCBkLT5od2lycTsKLQotCWlmIChwaW8pCi0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSUVSKTsKLX0KLQotc3RhdGljIGludCBncGlvX2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdHlwZSkKLXsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX05PTkU6Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotLyogQWx0ZXJuYXRlIGlycSB0eXBlIGZvciBQSU8zIHN1cHBvcnQgKi8KLXN0YXRpYyBpbnQgYWx0X2dwaW9faXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCB0eXBlKQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQJbWFzayA9IDEgPDwgZC0+aHdpcnE7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0VTUik7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUkVITFNSKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fRVNSKTsKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19GRUxMU1IpOwotCQlicmVhazsKLQljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19MU1IpOwotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0ZFTExTUik7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19MU1IpOwotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1JFSExTUik7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgotCQkvKgotCQkgKiBkaXNhYmxlIGFkZGl0aW9uYWwgaW50ZXJydXB0IG1vZGVzOgotCQkgKiBmYWxsIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvcgotCQkgKi8KLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19BSU1EUik7Ci0JCXJldHVybiAwOwotCWNhc2UgSVJRX1RZUEVfTk9ORToKLQlkZWZhdWx0OgotCQlwcl93YXJuKCJBVDkxOiBObyB0eXBlIGZvciBpcnEgJWRcbiIsIGdwaW9fdG9faXJxKGQtPmlycSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBlbmFibGUgYWRkaXRpb25hbCBpbnRlcnJ1cHQgbW9kZXMgKi8KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0FJTUVSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxY2hpcCA9IHsKLQkubmFtZQkJPSAiR1BJTyIsCi0JLmlycV9kaXNhYmxlCT0gZ3Bpb19pcnFfbWFzaywKLQkuaXJxX21hc2sJPSBncGlvX2lycV9tYXNrLAotCS5pcnFfdW5tYXNrCT0gZ3Bpb19pcnFfdW5tYXNrLAotCS8qIC5pcnFfc2V0X3R5cGUgaXMgc2V0IGR5bmFtaWNhbGx5ICovCi0JLmlycV9zZXRfd2FrZQk9IGdwaW9faXJxX3NldF93YWtlLAotfTsKLQotc3RhdGljIHZvaWQgZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKLQlzdHJ1Y3QgaXJxX2RhdGEgKmlkYXRhID0gaXJxX2Rlc2NfZ2V0X2lycV9kYXRhKGRlc2MpOwotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaWRhdGEpOwotCXZvaWQgX19pb21lbQkqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwotCXVuc2lnbmVkIGxvbmcJaXNyOwotCWludAkJbjsKLQotCWNoYWluZWRfaXJxX2VudGVyKGNoaXAsIGRlc2MpOwotCWZvciAoOzspIHsKLQkJLyogUmVhZGluZyBJU1IgYWNrcyBwZW5kaW5nIChlZGdlIHRyaWdnZXJlZCkgR1BJTyBpbnRlcnJ1cHRzLgotCQkgKiBXaGVuIHRoZXJlIG5vbmUgYXJlIHBlbmRpbmcsIHdlJ3JlIGZpbmlzaGVkIHVubGVzcyB3ZSBuZWVkCi0JCSAqIHRvIHByb2Nlc3MgbXVsdGlwbGUgYmFua3MgKGxpa2UgSURfUElPQ0RFIG9uIHNhbTkyNjMpLgotCQkgKi8KLQkJaXNyID0gX19yYXdfcmVhZGwocGlvICsgUElPX0lTUikgJiBfX3Jhd19yZWFkbChwaW8gKyBQSU9fSU1SKTsKLQkJaWYgKCFpc3IpIHsKLQkJCWlmICghYXQ5MV9ncGlvLT5uZXh0KQotCQkJCWJyZWFrOwotCQkJYXQ5MV9ncGlvID0gYXQ5MV9ncGlvLT5uZXh0OwotCQkJcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwotCQkJY29udGludWU7Ci0JCX0KLQotCQluID0gZmluZF9maXJzdF9iaXQoJmlzciwgQklUU19QRVJfTE9ORyk7Ci0JCXdoaWxlIChuIDwgQklUU19QRVJfTE9ORykgewotCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYXQ5MV9ncGlvLT5kb21haW4sIG4pKTsKLQkJCW4gPSBmaW5kX25leHRfYml0KCZpc3IsIEJJVFNfUEVSX0xPTkcsIG4gKyAxKTsKLQkJfQotCX0KLQljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwotCS8qIG5vdyBpdCBtYXkgcmUtdHJpZ2dlciAqLwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmZGVmIENPTkZJR19ERUJVR19GUwotCi1zdGF0aWMgdm9pZCBncGlvX3ByaW50ZihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgX19pb21lbSAqcGlvLCB1bnNpZ25lZCBtYXNrKQotewotCWNoYXIJKnRyaWdnZXIgPSBOVUxMOwotCWNoYXIJKnBvbGFyaXR5ID0gTlVMTDsKLQotCWlmIChfX3Jhd19yZWFkbChwaW8gKyBQSU9fSU1SKSAmIG1hc2spIHsKLQkJaWYgKCFoYXNfcGlvMygpIHx8ICEoX19yYXdfcmVhZGwocGlvICsgUElPX0FJTU1SKSAmIG1hc2sgKSkgewotCQkJdHJpZ2dlciA9ICJlZGdlIjsKLQkJCXBvbGFyaXR5ID0gImJvdGgiOwotCQl9IGVsc2UgewotCQkJaWYgKF9fcmF3X3JlYWRsKHBpbyArIFBJT19FTFNSKSAmIG1hc2spIHsKLQkJCQl0cmlnZ2VyID0gImxldmVsIjsKLQkJCQlwb2xhcml0eSA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19GUkxIU1IpICYgbWFzayA/Ci0JCQkJCSJoaWdoIiA6ICJsb3ciOwotCQkJfSBlbHNlIHsKLQkJCQl0cmlnZ2VyID0gImVkZ2UiOwotCQkJCXBvbGFyaXR5ID0gX19yYXdfcmVhZGwocGlvICsgUElPX0ZSTEhTUikgJiBtYXNrID8KLQkJCQkJCSJyaXNpbmciIDogImZhbGxpbmciOwotCQkJfQotCQl9Ci0JCXNlcV9wcmludGYocywgIklSUTolcy0lc1x0IiwgdHJpZ2dlciwgcG9sYXJpdHkpOwotCX0gZWxzZSB7Ci0JCXNlcV9wcmludGYocywgIkdQSU86JXNcdFx0IiwKLQkJCQlfX3Jhd19yZWFkbChwaW8gKyBQSU9fUERTUikgJiBtYXNrID8gIjEiIDogIjAiKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYXQ5MV9ncGlvX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCi17Ci0JaW50IGJhbmssIGo7Ci0KLQkvKiBwcmludCBoZWFkaW5nICovCi0Jc2VxX3ByaW50ZihzLCAiUGluXHQiKTsKLQlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgZ3Bpb19iYW5rczsgYmFuaysrKSB7Ci0JCXNlcV9wcmludGYocywgIlBJTyVjXHRcdCIsICdBJyArIGJhbmspOwotCX07Ci0Jc2VxX3ByaW50ZihzLCAiXG5cbiIpOwotCi0JLyogcHJpbnQgcGluIHN0YXR1cyAqLwotCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCXNlcV9wcmludGYocywgIiVpOlx0Iiwgaik7Ci0KLQkJZm9yIChiYW5rID0gMDsgYmFuayA8IGdwaW9fYmFua3M7IGJhbmsrKykgewotCQkJdW5zaWduZWQJcGluICA9ICgzMiAqIGJhbmspICsgajsKLQkJCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQkJCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JCQlpZiAoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKQotCQkJCWdwaW9fcHJpbnRmKHMsIHBpbywgbWFzayk7Ci0JCQllbHNlCi0JCQkJc2VxX3ByaW50ZihzLCAiJWNcdFx0IiwKLQkJCQkJCXBlcmlwaGVyYWxfZnVuY3Rpb24ocGlvLCBtYXNrKSk7Ci0JCX0KLQotCQlzZXFfcHJpbnRmKHMsICJcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhdDkxX2dwaW9fc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0OTFfZ3Bpb19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGF0OTFfZ3Bpb19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2dwaW9fZGVidWdmc19pbml0KHZvaWQpCi17Ci0JLyogL3N5cy9rZXJuZWwvZGVidWcvYXQ5MV9ncGlvICovCi0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF0OTFfZ3BpbyIsIFNfSUZSRUcgfCBTX0lSVUdPLCBOVUxMLCBOVUxMLCAmYXQ5MV9ncGlvX29wZXJhdGlvbnMpOwotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwoYXQ5MV9ncGlvX2RlYnVnZnNfaW5pdCk7Ci0KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIFRoaXMgbG9jayBjbGFzcyB0ZWxscyBsb2NrZGVwIHRoYXQgR1BJTyBpcnFzIGFyZSBpbiBhIGRpZmZlcmVudAotICogY2F0ZWdvcnkgdGhhbiB0aGVpciBwYXJlbnRzLCBzbyBpdCB3b24ndCByZXBvcnQgZmFsc2UgcmVjdXJzaW9uLgotICovCi1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGdwaW9fbG9ja19jbGFzczsKLQotLyoKLSAqIGlycWRvbWFpbiBpbml0aWFsaXphdGlvbjogcGlsZSB1cCBpcnFkb21haW5zIG9uIHRvcCBvZiBBSUMgcmFuZ2UKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19pcnFkb21haW4oc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8pCi17Ci0JaW50IGlycV9iYXNlOwotCi0JaXJxX2Jhc2UgPSBpcnFfYWxsb2NfZGVzY3MoLTEsIDAsIGF0OTFfZ3Bpby0+Y2hpcC5uZ3BpbywgMCk7Ci0JaWYgKGlycV9iYXNlIDwgMCkKLQkJcGFuaWMoImF0OTFfZ3Bpby4lZDogZXJyb3IgJWQ6IGNvdWxkbid0IGFsbG9jYXRlIElSUSBudW1iZXJzLlxuIiwKLQkJCWF0OTFfZ3Bpby0+cGlvY19pZHgsIGlycV9iYXNlKTsKLQlhdDkxX2dwaW8tPmRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xlZ2FjeShOVUxMLCBhdDkxX2dwaW8tPmNoaXAubmdwaW8sCi0JCQkJCQkgIGlycV9iYXNlLCAwLAotCQkJCQkJICAmaXJxX2RvbWFpbl9zaW1wbGVfb3BzLCBOVUxMKTsKLQlpZiAoIWF0OTFfZ3Bpby0+ZG9tYWluKQotCQlwYW5pYygiYXQ5MV9ncGlvLiVkOiBjb3VsZG4ndCBhbGxvY2F0ZSBpcnEgZG9tYWluLlxuIiwKLQkJCWF0OTFfZ3Bpby0+cGlvY19pZHgpOwotfQotCi0vKgotICogQ2FsbGVkIGZyb20gdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBpbml0IHRvIGVuYWJsZSBHUElPIGludGVycnVwdCBzdXBwb3J0LgotICovCi12b2lkIF9faW5pdCBhdDkxX2dwaW9faXJxX3NldHVwKHZvaWQpCi17Ci0JdW5zaWduZWQJCXBpb2M7Ci0JaW50CQkJZ3Bpb19pcnFuYnIgPSAwOwotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcAkqdGhpcywgKnByZXY7Ci0KLQkvKiBTZXR1cCBwcm9wZXIgLmlycV9zZXRfdHlwZSBmdW5jdGlvbiAqLwotCWlmIChoYXNfcGlvMygpKQotCQlncGlvX2lycWNoaXAuaXJxX3NldF90eXBlID0gYWx0X2dwaW9faXJxX3R5cGU7Ci0JZWxzZQotCQlncGlvX2lycWNoaXAuaXJxX3NldF90eXBlID0gZ3Bpb19pcnFfdHlwZTsKLQotCWZvciAocGlvYyA9IDAsIHRoaXMgPSBncGlvX2NoaXAsIHByZXYgPSBOVUxMOwotCQkJcGlvYysrIDwgZ3Bpb19iYW5rczsKLQkJCXByZXYgPSB0aGlzLCB0aGlzKyspIHsKLQkJaW50IG9mZnNldDsKLQotCQlfX3Jhd193cml0ZWwofjAsIHRoaXMtPnJlZ2Jhc2UgKyBQSU9fSURSKTsKLQotCQkvKiBzZXR1cCBpcnEgZG9tYWluIGZvciB0aGlzIEdQSU8gY29udHJvbGxlciAqLwotCQlhdDkxX2dwaW9faXJxZG9tYWluKHRoaXMpOwotCi0JCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgdGhpcy0+Y2hpcC5uZ3Bpbzsgb2Zmc2V0KyspIHsKLQkJCXVuc2lnbmVkIGludCB2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyh0aGlzLT5kb21haW4sIG9mZnNldCk7Ci0JCQlpcnFfc2V0X2xvY2tkZXBfY2xhc3ModmlycSwgJmdwaW9fbG9ja19jbGFzcyk7Ci0KLQkJCS8qCi0JCQkgKiBDYW4gdXNlIHRoZSAic2ltcGxlIiBhbmQgbm90ICJlZGdlIiBoYW5kbGVyIHNpbmNlIGl0J3MKLQkJCSAqIHNob3J0ZXIsIGFuZCB0aGUgQUlDIGhhbmRsZXMgaW50ZXJydXB0cyBzYW5lbHkuCi0JCQkgKi8KLQkJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmZ3Bpb19pcnFjaGlwLAotCQkJCQkJIGhhbmRsZV9zaW1wbGVfaXJxKTsKLQkJCXNldF9pcnFfZmxhZ3ModmlycSwgSVJRRl9WQUxJRCk7Ci0JCQlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCB0aGlzKTsKLQotCQkJZ3Bpb19pcnFuYnIrKzsKLQkJfQotCi0JCS8qIFRoZSB0b3BsZXZlbCBoYW5kbGVyIGhhbmRsZXMgb25lIGJhbmsgb2YgR1BJT3MsIGV4Y2VwdAotCQkgKiBvbiBzb21lIFNvQyBpdCBjYW4gaGFuZGxlcyB1cCB0byB0aHJlZS4uLgotCQkgKiBXZSBvbmx5IHNldCB1cCB0aGUgaGFuZGxlciBmb3IgdGhlIGZpcnN0IG9mIHRoZSBsaXN0LgotCQkgKi8KLQkJaWYgKHByZXYgJiYgcHJldi0+bmV4dCA9PSB0aGlzKQotCQkJY29udGludWU7Ci0KLQkJdGhpcy0+cGlvY192aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKE5VTEwsIHRoaXMtPnBpb2NfaHdpcnEpOwotCQlpcnFfc2V0X2NoaXBfZGF0YSh0aGlzLT5waW9jX3ZpcnEsIHRoaXMpOwotCQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcih0aGlzLT5waW9jX3ZpcnEsIGdwaW9faXJxX2hhbmRsZXIpOwotCX0KLQlwcl9pbmZvKCJBVDkxOiAlZCBncGlvIGlycXMgaW4gJWQgYmFua3NcbiIsIGdwaW9faXJxbmJyLCBncGlvX2JhbmtzKTsKLX0KLQotLyogZ3Bpb2xpYiBzdXBwb3J0ICovCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOwotCXZvaWQgX19pb21lbSAqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwotCXVuc2lnbmVkIG1hc2sgPSAxIDw8IG9mZnNldDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0JdTMyIG9zcjsKLQotCW9zciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19PU1IpOwotCXJldHVybiAhKG9zciAmIG1hc2spOwotfQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkJdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRFIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCi0JCQkJCSB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbCA/IFBJT19TT0RSIDogUElPX0NPRFIpKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09FUik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0JdTMyIHBkc3I7Ci0KLQlwZHNyID0gX19yYXdfcmVhZGwocGlvICsgUElPX1BEU1IpOwotCXJldHVybiAocGRzciAmIG1hc2spICE9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArICh2YWwgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9kYmdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bmdwaW87IGkrKykgewotCQl1bnNpZ25lZCBwaW4gPSBjaGlwLT5iYXNlICsgaTsKLQkJdm9pZCBfX2lvbWVtICpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCQl1bnNpZ25lZCBtYXNrID0gcGluX3RvX21hc2socGluKTsKLQkJY29uc3QgY2hhciAqZ3Bpb19sYWJlbDsKLQotCQlncGlvX2xhYmVsID0gZ3Bpb2NoaXBfaXNfcmVxdWVzdGVkKGNoaXAsIGkpOwotCQlpZiAoZ3Bpb19sYWJlbCkgewotCQkJc2VxX3ByaW50ZihzLCAiWyVzXSBHUElPJXMlZDogIiwKLQkJCQkgICBncGlvX2xhYmVsLCBjaGlwLT5sYWJlbCwgaSk7Ci0JCQlpZiAoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKQotCQkJCXNlcV9wcmludGYocywgIltncGlvXSAlc1xuIiwKLQkJCQkJICAgYXQ5MV9nZXRfZ3Bpb192YWx1ZShwaW4pID8KLQkJCQkJICAgInNldCIgOiAiY2xlYXIiKTsKLQkJCWVsc2UKLQkJCQlzZXFfcHJpbnRmKHMsICJbcGVyaXBoICVjXVxuIiwKLQkJCQkJICAgcGVyaXBoZXJhbF9mdW5jdGlvbihwaW8sIG1hc2spKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBhdDkxX2dwaW9saWJfdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOwotCWludCB2aXJxOwotCi0JaWYgKG9mZnNldCA8IGNoaXAtPm5ncGlvKQotCQl2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKGF0OTFfZ3Bpby0+ZG9tYWluLCBvZmZzZXQpOwotCWVsc2UKLQkJdmlycSA9IC1FTlhJTzsKLQotCWRldl9kYmcoY2hpcC0+ZGV2LCAiJXM6IHJlcXVlc3QgSVJRIGZvciBHUElPICVkLCByZXR1cm4gJWRcbiIsCi0JCQkJY2hpcC0+bGFiZWwsIG9mZnNldCArIGNoaXAtPmJhc2UsIHZpcnEpOwotCXJldHVybiB2aXJxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2dwaW9fc2V0dXBfY2xrKGludCBpZHgpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSAmZ3Bpb19jaGlwW2lkeF07Ci0KLQkvKiByZXRyZWl2ZSBQSU8gY29udHJvbGxlcidzIGNsb2NrICovCi0JYXQ5MV9ncGlvLT5jbG9jayA9IGNsa19nZXRfc3lzKE5VTEwsIGF0OTFfZ3Bpby0+Y2hpcC5sYWJlbCk7Ci0JaWYgKElTX0VSUihhdDkxX2dwaW8tPmNsb2NrKSkgewotCQlwcl9lcnIoImF0OTFfZ3Bpby4lZCwgZmFpbGVkIHRvIGdldCBjbG9jaywgaWdub3JpbmcuXG4iLCBpZHgpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoY2xrX3ByZXBhcmUoYXQ5MV9ncGlvLT5jbG9jaykpCi0JCWdvdG8gY2xrX3ByZXBfZXJyOwotCi0JLyogZW5hYmxlIFBJTyBjb250cm9sbGVyJ3MgY2xvY2sgKi8KLQlpZiAoY2xrX2VuYWJsZShhdDkxX2dwaW8tPmNsb2NrKSkgewotCQlwcl9lcnIoImF0OTFfZ3Bpby4lZCwgZmFpbGVkIHRvIGVuYWJsZSBjbG9jaywgaWdub3JpbmcuXG4iLCBpZHgpOwotCQlnb3RvIGNsa19lcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWNsa19lcnI6Ci0JY2xrX3VucHJlcGFyZShhdDkxX2dwaW8tPmNsb2NrKTsKLWNsa19wcmVwX2VycjoKLQljbGtfcHV0KGF0OTFfZ3Bpby0+Y2xvY2spOwotZXJyOgotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9ncGlvX2luaXRfb25lKGludCBpZHgsIHUzMiByZWdiYXNlLCBpbnQgcGlvY19od2lycSkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9ICZncGlvX2NoaXBbaWR4XTsKLQotCWF0OTFfZ3Bpby0+Y2hpcC5iYXNlID0gaWR4ICogTUFYX05CX0dQSU9fUEVSX0JBTks7Ci0JYXQ5MV9ncGlvLT5waW9jX2h3aXJxID0gcGlvY19od2lycTsKLQlhdDkxX2dwaW8tPnBpb2NfaWR4ID0gaWR4OwotCi0JYXQ5MV9ncGlvLT5yZWdiYXNlID0gaW9yZW1hcChyZWdiYXNlLCA1MTIpOwotCWlmICghYXQ5MV9ncGlvLT5yZWdiYXNlKSB7Ci0JCXByX2VycigiYXQ5MV9ncGlvLiVkLCBmYWlsZWQgdG8gbWFwIHJlZ2lzdGVycywgaWdub3JpbmcuXG4iLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGF0OTFfZ3Bpb19zZXR1cF9jbGsoaWR4KSkKLQkJZ290byBpb3JlbWFwX2VycjsKLQotCWdwaW9fYmFua3MgPSBtYXgoZ3Bpb19iYW5rcywgaWR4ICsgMSk7Ci0JcmV0dXJuOwotCi1pb3JlbWFwX2VycjoKLQlpb3VubWFwKGF0OTFfZ3Bpby0+cmVnYmFzZSk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgZnJvbSB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGluaXQgdG8gZW5hYmxlIEdQSU8gcGluIHN1cHBvcnQuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfZ3Bpb19pbml0KHN0cnVjdCBhdDkxX2dwaW9fYmFuayAqZGF0YSwgaW50IG5yX2JhbmtzKQotewotCXVuc2lnbmVkIGk7Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8sICpsYXN0ID0gTlVMTDsKLQotCUJVR19PTihucl9iYW5rcyA+IE1BWF9HUElPX0JBTktTKTsKLQotCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfYmFua3M7IGkrKykKLQkJYXQ5MV9ncGlvX2luaXRfb25lKGksIGRhdGFbaV0ucmVnYmFzZSwgZGF0YVtpXS5pZCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCWF0OTFfZ3BpbyA9ICZncGlvX2NoaXBbaV07Ci0KLQkJLyoKLQkJICogR1BJTyBjb250cm9sbGVyIGFyZSBncm91cGVkIG9uIHNvbWUgU29DOgotCQkgKiBQSU9DLCBQSU9EIGFuZCBQSU9FIGNhbiBzaGFyZSB0aGUgc2FtZSBJUlEgbGluZQotCQkgKi8KLQkJaWYgKGxhc3QgJiYgbGFzdC0+cGlvY19od2lycSA9PSBhdDkxX2dwaW8tPnBpb2NfaHdpcnEpCi0JCQlsYXN0LT5uZXh0ID0gYXQ5MV9ncGlvOwotCQlsYXN0ID0gYXQ5MV9ncGlvOwotCi0JCWdwaW9jaGlwX2FkZCgmYXQ5MV9ncGlvLT5jaGlwKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkNDY1YS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgSFAgTGFicwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9BVDkxUk05MjAwX0dQSU9fSAotI2RlZmluZSBfX0FTTV9BUkNIX0FUOTFSTTkyMDBfR1BJT19ICi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNkZWZpbmUgTUFYX0dQSU9fQkFOS1MJCTUKLSNkZWZpbmUgTlJfQlVJTFRJTl9HUElPCQkoTUFYX0dQSU9fQkFOS1MgKiAzMikKLQotLyogdGhlc2UgcGluIG51bWJlcnMgZG91YmxlIGFzIElSUSBudW1iZXJzLCBsaWtlIEFUOTF4eHhfSURfKiB2YWx1ZXMgKi8KLQotI2RlZmluZQlBVDkxX1BJTl9QQTAJKDB4MDAgKyAwKQotI2RlZmluZQlBVDkxX1BJTl9QQTEJKDB4MDAgKyAxKQotI2RlZmluZQlBVDkxX1BJTl9QQTIJKDB4MDAgKyAyKQotI2RlZmluZQlBVDkxX1BJTl9QQTMJKDB4MDAgKyAzKQotI2RlZmluZQlBVDkxX1BJTl9QQTQJKDB4MDAgKyA0KQotI2RlZmluZQlBVDkxX1BJTl9QQTUJKDB4MDAgKyA1KQotI2RlZmluZQlBVDkxX1BJTl9QQTYJKDB4MDAgKyA2KQotI2RlZmluZQlBVDkxX1BJTl9QQTcJKDB4MDAgKyA3KQotI2RlZmluZQlBVDkxX1BJTl9QQTgJKDB4MDAgKyA4KQotI2RlZmluZQlBVDkxX1BJTl9QQTkJKDB4MDAgKyA5KQotI2RlZmluZQlBVDkxX1BJTl9QQTEwCSgweDAwICsgMTApCi0jZGVmaW5lCUFUOTFfUElOX1BBMTEJKDB4MDAgKyAxMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEExMgkoMHgwMCArIDEyKQotI2RlZmluZQlBVDkxX1BJTl9QQTEzCSgweDAwICsgMTMpCi0jZGVmaW5lCUFUOTFfUElOX1BBMTQJKDB4MDAgKyAxNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEExNQkoMHgwMCArIDE1KQotI2RlZmluZQlBVDkxX1BJTl9QQTE2CSgweDAwICsgMTYpCi0jZGVmaW5lCUFUOTFfUElOX1BBMTcJKDB4MDAgKyAxNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEExOAkoMHgwMCArIDE4KQotI2RlZmluZQlBVDkxX1BJTl9QQTE5CSgweDAwICsgMTkpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjAJKDB4MDAgKyAyMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEEyMQkoMHgwMCArIDIxKQotI2RlZmluZQlBVDkxX1BJTl9QQTIyCSgweDAwICsgMjIpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjMJKDB4MDAgKyAyMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEEyNAkoMHgwMCArIDI0KQotI2RlZmluZQlBVDkxX1BJTl9QQTI1CSgweDAwICsgMjUpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjYJKDB4MDAgKyAyNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEEyNwkoMHgwMCArIDI3KQotI2RlZmluZQlBVDkxX1BJTl9QQTI4CSgweDAwICsgMjgpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjkJKDB4MDAgKyAyOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEEzMAkoMHgwMCArIDMwKQotI2RlZmluZQlBVDkxX1BJTl9QQTMxCSgweDAwICsgMzEpCi0KLSNkZWZpbmUJQVQ5MV9QSU5fUEIwCSgweDIwICsgMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxCSgweDIwICsgMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyCSgweDIwICsgMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEIzCSgweDIwICsgMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEI0CSgweDIwICsgNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEI1CSgweDIwICsgNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEI2CSgweDIwICsgNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEI3CSgweDIwICsgNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEI4CSgweDIwICsgOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEI5CSgweDIwICsgOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxMAkoMHgyMCArIDEwKQotI2RlZmluZQlBVDkxX1BJTl9QQjExCSgweDIwICsgMTEpCi0jZGVmaW5lCUFUOTFfUElOX1BCMTIJKDB4MjAgKyAxMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxMwkoMHgyMCArIDEzKQotI2RlZmluZQlBVDkxX1BJTl9QQjE0CSgweDIwICsgMTQpCi0jZGVmaW5lCUFUOTFfUElOX1BCMTUJKDB4MjAgKyAxNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxNgkoMHgyMCArIDE2KQotI2RlZmluZQlBVDkxX1BJTl9QQjE3CSgweDIwICsgMTcpCi0jZGVmaW5lCUFUOTFfUElOX1BCMTgJKDB4MjAgKyAxOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxOQkoMHgyMCArIDE5KQotI2RlZmluZQlBVDkxX1BJTl9QQjIwCSgweDIwICsgMjApCi0jZGVmaW5lCUFUOTFfUElOX1BCMjEJKDB4MjAgKyAyMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyMgkoMHgyMCArIDIyKQotI2RlZmluZQlBVDkxX1BJTl9QQjIzCSgweDIwICsgMjMpCi0jZGVmaW5lCUFUOTFfUElOX1BCMjQJKDB4MjAgKyAyNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyNQkoMHgyMCArIDI1KQotI2RlZmluZQlBVDkxX1BJTl9QQjI2CSgweDIwICsgMjYpCi0jZGVmaW5lCUFUOTFfUElOX1BCMjcJKDB4MjAgKyAyNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyOAkoMHgyMCArIDI4KQotI2RlZmluZQlBVDkxX1BJTl9QQjI5CSgweDIwICsgMjkpCi0jZGVmaW5lCUFUOTFfUElOX1BCMzAJKDB4MjAgKyAzMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIzMQkoMHgyMCArIDMxKQotCi0jZGVmaW5lCUFUOTFfUElOX1BDMAkoMHg0MCArIDApCi0jZGVmaW5lCUFUOTFfUElOX1BDMQkoMHg0MCArIDEpCi0jZGVmaW5lCUFUOTFfUElOX1BDMgkoMHg0MCArIDIpCi0jZGVmaW5lCUFUOTFfUElOX1BDMwkoMHg0MCArIDMpCi0jZGVmaW5lCUFUOTFfUElOX1BDNAkoMHg0MCArIDQpCi0jZGVmaW5lCUFUOTFfUElOX1BDNQkoMHg0MCArIDUpCi0jZGVmaW5lCUFUOTFfUElOX1BDNgkoMHg0MCArIDYpCi0jZGVmaW5lCUFUOTFfUElOX1BDNwkoMHg0MCArIDcpCi0jZGVmaW5lCUFUOTFfUElOX1BDOAkoMHg0MCArIDgpCi0jZGVmaW5lCUFUOTFfUElOX1BDOQkoMHg0MCArIDkpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTAJKDB4NDAgKyAxMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMxMQkoMHg0MCArIDExKQotI2RlZmluZQlBVDkxX1BJTl9QQzEyCSgweDQwICsgMTIpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTMJKDB4NDAgKyAxMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEMxNAkoMHg0MCArIDE0KQotI2RlZmluZQlBVDkxX1BJTl9QQzE1CSgweDQwICsgMTUpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTYJKDB4NDAgKyAxNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEMxNwkoMHg0MCArIDE3KQotI2RlZmluZQlBVDkxX1BJTl9QQzE4CSgweDQwICsgMTgpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTkJKDB4NDAgKyAxOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyMAkoMHg0MCArIDIwKQotI2RlZmluZQlBVDkxX1BJTl9QQzIxCSgweDQwICsgMjEpCi0jZGVmaW5lCUFUOTFfUElOX1BDMjIJKDB4NDAgKyAyMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyMwkoMHg0MCArIDIzKQotI2RlZmluZQlBVDkxX1BJTl9QQzI0CSgweDQwICsgMjQpCi0jZGVmaW5lCUFUOTFfUElOX1BDMjUJKDB4NDAgKyAyNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyNgkoMHg0MCArIDI2KQotI2RlZmluZQlBVDkxX1BJTl9QQzI3CSgweDQwICsgMjcpCi0jZGVmaW5lCUFUOTFfUElOX1BDMjgJKDB4NDAgKyAyOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyOQkoMHg0MCArIDI5KQotI2RlZmluZQlBVDkxX1BJTl9QQzMwCSgweDQwICsgMzApCi0jZGVmaW5lCUFUOTFfUElOX1BDMzEJKDB4NDAgKyAzMSkKLQotI2RlZmluZQlBVDkxX1BJTl9QRDAJKDB4NjAgKyAwKQotI2RlZmluZQlBVDkxX1BJTl9QRDEJKDB4NjAgKyAxKQotI2RlZmluZQlBVDkxX1BJTl9QRDIJKDB4NjAgKyAyKQotI2RlZmluZQlBVDkxX1BJTl9QRDMJKDB4NjAgKyAzKQotI2RlZmluZQlBVDkxX1BJTl9QRDQJKDB4NjAgKyA0KQotI2RlZmluZQlBVDkxX1BJTl9QRDUJKDB4NjAgKyA1KQotI2RlZmluZQlBVDkxX1BJTl9QRDYJKDB4NjAgKyA2KQotI2RlZmluZQlBVDkxX1BJTl9QRDcJKDB4NjAgKyA3KQotI2RlZmluZQlBVDkxX1BJTl9QRDgJKDB4NjAgKyA4KQotI2RlZmluZQlBVDkxX1BJTl9QRDkJKDB4NjAgKyA5KQotI2RlZmluZQlBVDkxX1BJTl9QRDEwCSgweDYwICsgMTApCi0jZGVmaW5lCUFUOTFfUElOX1BEMTEJKDB4NjAgKyAxMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQxMgkoMHg2MCArIDEyKQotI2RlZmluZQlBVDkxX1BJTl9QRDEzCSgweDYwICsgMTMpCi0jZGVmaW5lCUFUOTFfUElOX1BEMTQJKDB4NjAgKyAxNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQxNQkoMHg2MCArIDE1KQotI2RlZmluZQlBVDkxX1BJTl9QRDE2CSgweDYwICsgMTYpCi0jZGVmaW5lCUFUOTFfUElOX1BEMTcJKDB4NjAgKyAxNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEQxOAkoMHg2MCArIDE4KQotI2RlZmluZQlBVDkxX1BJTl9QRDE5CSgweDYwICsgMTkpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjAJKDB4NjAgKyAyMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQyMQkoMHg2MCArIDIxKQotI2RlZmluZQlBVDkxX1BJTl9QRDIyCSgweDYwICsgMjIpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjMJKDB4NjAgKyAyMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEQyNAkoMHg2MCArIDI0KQotI2RlZmluZQlBVDkxX1BJTl9QRDI1CSgweDYwICsgMjUpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjYJKDB4NjAgKyAyNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEQyNwkoMHg2MCArIDI3KQotI2RlZmluZQlBVDkxX1BJTl9QRDI4CSgweDYwICsgMjgpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjkJKDB4NjAgKyAyOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQzMAkoMHg2MCArIDMwKQotI2RlZmluZQlBVDkxX1BJTl9QRDMxCSgweDYwICsgMzEpCi0KLSNkZWZpbmUJQVQ5MV9QSU5fUEUwCSgweDgwICsgMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxCSgweDgwICsgMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyCSgweDgwICsgMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEUzCSgweDgwICsgMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEU0CSgweDgwICsgNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEU1CSgweDgwICsgNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEU2CSgweDgwICsgNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEU3CSgweDgwICsgNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEU4CSgweDgwICsgOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEU5CSgweDgwICsgOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxMAkoMHg4MCArIDEwKQotI2RlZmluZQlBVDkxX1BJTl9QRTExCSgweDgwICsgMTEpCi0jZGVmaW5lCUFUOTFfUElOX1BFMTIJKDB4ODAgKyAxMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxMwkoMHg4MCArIDEzKQotI2RlZmluZQlBVDkxX1BJTl9QRTE0CSgweDgwICsgMTQpCi0jZGVmaW5lCUFUOTFfUElOX1BFMTUJKDB4ODAgKyAxNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxNgkoMHg4MCArIDE2KQotI2RlZmluZQlBVDkxX1BJTl9QRTE3CSgweDgwICsgMTcpCi0jZGVmaW5lCUFUOTFfUElOX1BFMTgJKDB4ODAgKyAxOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxOQkoMHg4MCArIDE5KQotI2RlZmluZQlBVDkxX1BJTl9QRTIwCSgweDgwICsgMjApCi0jZGVmaW5lCUFUOTFfUElOX1BFMjEJKDB4ODAgKyAyMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyMgkoMHg4MCArIDIyKQotI2RlZmluZQlBVDkxX1BJTl9QRTIzCSgweDgwICsgMjMpCi0jZGVmaW5lCUFUOTFfUElOX1BFMjQJKDB4ODAgKyAyNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyNQkoMHg4MCArIDI1KQotI2RlZmluZQlBVDkxX1BJTl9QRTI2CSgweDgwICsgMjYpCi0jZGVmaW5lCUFUOTFfUElOX1BFMjcJKDB4ODAgKyAyNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyOAkoMHg4MCArIDI4KQotI2RlZmluZQlBVDkxX1BJTl9QRTI5CSgweDgwICsgMjkpCi0jZGVmaW5lCUFUOTFfUElOX1BFMzAJKDB4ODAgKyAzMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUzMQkoMHg4MCArIDMxKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotLyogc2V0dXAgc2V0dXAgcm91dGluZXMsIGNhbGxlZCBmcm9tIGJvYXJkIGluaXQgb3IgZHJpdmVyIHByb2JlKCkgKi8KLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9HUElPX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9BX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9CX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9DX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9EX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9ncGlvX2lucHV0KHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOwotZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2dwaW9fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9kZWdsaXRjaCh1bnNpZ25lZCBwaW4sIGludCBpc19vbik7Ci1leHRlcm4gaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZGVib3VuY2UodW5zaWduZWQgcGluLCBpbnQgaXNfb24sIGludCBkaXYpOwotZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X211bHRpX2RyaXZlKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9wdWxsZG93bih1bnNpZ25lZCBwaW4sIGludCBpc19vbik7Ci1leHRlcm4gaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9kaXNhYmxlX3NjaG1pdHRfdHJpZyh1bnNpZ25lZCBwaW4pOwotCi0vKiBjYWxsYWJsZSBhdCBhbnkgdGltZSAqLwotZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgYXQ5MV9nZXRfZ3Bpb192YWx1ZSh1bnNpZ25lZCBwaW4pOwotCi0vKiBjYWxsYWJsZSBvbmx5IGZyb20gY29yZSBwb3dlci1tYW5hZ2VtZW50IGNvZGUgKi8KLWV4dGVybiB2b2lkIGF0OTFfZ3Bpb19zdXNwZW5kKHZvaWQpOwotZXh0ZXJuIHZvaWQgYXQ5MV9ncGlvX3Jlc3VtZSh2b2lkKTsKLQotI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nc2lhMThzLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3NpYTE4cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDdjMTk0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nc2lhMThzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKiBCdXR0b25zICovCi0jZGVmaW5lIEdQSU9fVFJJR19ORVRfSU4JCUFUOTFfUElOX1BCMjEKLSNkZWZpbmUgR1BJT19DQVJEX1VOTU9VTlRfMAkJQVQ5MV9QSU5fUEIxMwotI2RlZmluZSBHUElPX0NBUkRfVU5NT1VOVF8xCQlBVDkxX1BJTl9QQjEyCi0jZGVmaW5lIEdQSU9fS0VZX1BPV0VSCQkJQVQ5MV9QSU5fUEEyNQotCi0vKiBQQ0Y4NTc0IDB4MjAgR1BJTyAtIFUxIG9uIHRoZSBHU19JQTE4LUNCX1YzIGJvYXJkICovCi0jZGVmaW5lIEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMAlOUl9CVUlMVElOX0dQSU8KLSNkZWZpbmUgUENGX0dQSU9fSERDX1BPV0VSCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UwICsgMCkKLSNkZWZpbmUgUENGX0dQSU9fV0lGSV9TRVRVUAkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDEpCi0jZGVmaW5lIFBDRl9HUElPX1dJRklfRU5BQkxFCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UwICsgMikKLSNkZWZpbmUgUENGX0dQSU9fV0lGSV9SRVNFVAkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDMpCi0jZGVmaW5lIFBDRl9HUElPX0VUSF9ERVRFQ1QJCTQgLyogdGhpcyBpcyBhIEdQSSAqLwotI2RlZmluZSBQQ0ZfR1BJT19HUFNfU0VUVVAJCShHU19JQTE4X1NfUENGX0dQSU9fQkFTRTAgKyA1KQotI2RlZmluZSBQQ0ZfR1BJT19HUFNfU1RBTkRCWQkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDYpCi0jZGVmaW5lIFBDRl9HUElPX0dQU19QT1dFUgkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDcpCi0KLS8qIFBDRjg1NzQgMHgyMiBHUElPIC0gVTEgb24gdGhlIEdTXzJHX09QVDEtQV9WMCBib2FyZCAoQWxhcm0pICovCi0jZGVmaW5lIEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UwICsgOCkKLSNkZWZpbmUgUENGX0dQSU9fQUxBUk0xCQkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMSArIDApCi0jZGVmaW5lIFBDRl9HUElPX0FMQVJNMgkJCShHU19JQTE4X1NfUENGX0dQSU9fQkFTRTEgKyAxKQotI2RlZmluZSBQQ0ZfR1BJT19BTEFSTTMJCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UxICsgMikKLSNkZWZpbmUgUENGX0dQSU9fQUxBUk00CQkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMSArIDMpCi0vKiBiaXRzIDQsIDUsIDYgbm90IHVzZWQgKi8KLSNkZWZpbmUgUENGX0dQSU9fQUxBUk1fVl9SRUxBWV9PTgkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UxICsgNykKLQotLyogUENGODU3NCAweDI0IEdQSU8gVTEgb24gdGhlIEdTXzJHLU9QVDIzLUFfVjAgYm9hcmQgKE1vZGVtKSAqLwotI2RlZmluZSBHU19JQTE4X1NfUENGX0dQSU9fQkFTRTIJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMSArIDgpCi0jZGVmaW5lIFBDRl9HUElPX01PREVNX1BPV0VSCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UyICsgMCkKLSNkZWZpbmUgUENGX0dQSU9fTU9ERU1fUkVTRVQJCShHU19JQTE4X1NfUENGX0dQSU9fQkFTRTIgKyAzKQotLyogYml0cyAxLCAyLCA0LCA1IG5vdCB1c2VkICovCi0jZGVmaW5lIFBDRl9HUElPX1RSWF9SRVNFVAkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMiArIDYpCi0vKiBiaXQgNyBub3QgdXNlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2RiZ3UuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9kYmd1LmgKaW5kZXggM2I1OTQ4NS4uNDI5MjVlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2RiZ3UuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfZGJndS5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaWZuZGVmIEFUOTFfREJHVV9ICiAjZGVmaW5lIEFUOTFfREJHVV9ICiAKLSNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogI2RlZmluZSBBVDkxX0RCR1VfQ1IJCSgweDAwKQkvKiBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEFUOTFfREJHVV9NUgkJKDB4MDQpCS8qIE1vZGUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQVQ5MV9EQkdVX0lFUgkJKDB4MDgpCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KQEAgLTM0LDggKzMzLDYgQEAKICNkZWZpbmUgQVQ5MV9EQkdVX0ZOUgkJKDB4NDgpCS8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyIFtTQU05IG9ubHldICovCiAjZGVmaW5lCQlBVDkxX0RCR1VfRk5UUlNUCSgxIDw8IDApCQkvKiBGb3JjZSBOVFJTVCAqLwogCi0jZW5kaWYgLyogQVQ5MV9EQkdVICovCi0KIC8qCiAgKiBTb21lIEFUOTEgcGFydHMgdGhhdCBkb24ndCBoYXZlIGZ1bGwgREVCVUcgdW5pdHMgc3RpbGwgc3VwcG9ydCB0aGUgSUQKICAqIGFuZCBleHRlbnNpb25zIHJlZ2lzdGVyLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3JhbWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9yYW1jLmgKaW5kZXggZDhhZWIyNy4uZTQ0OTJiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3JhbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfcmFtYy5oCkBAIC0yNSw4ICsyNSw4IEBACiAjZGVmaW5lIEFUOTFfTUVNQ1RSTF9TRFJBTUMJMQogI2RlZmluZSBBVDkxX01FTUNUUkxfRERSU0RSCTIKIAotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9zZHJhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X2RkcnNkci5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc2RyYW1jLmg+CisjaW5jbHVkZSA8c29jL2F0OTEvYXQ5MXJtOTIwMF9zZHJhbWMuaD4KKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9kZHJzZHIuaD4KKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9zZHJhbWMuaD4KIAogI2VuZGlmIC8qIF9fQVQ5MV9SQU1DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxeDQwLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTF4NDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkY2EyYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTF4NDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTF4NDAuaAotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNywgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgQVQ5MVg0MF9ICi0jZGVmaW5lIEFUOTFYNDBfSAotCi0vKgotICoJSVJRIGxpc3QuCi0gKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9VU0FSVDAJMgkvKiBVU0FSVCBwb3J0IDAgKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9VU0FSVDEJMwkvKiBVU0FSVCBwb3J0IDEgKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9UQzAJCTQJLyogVGltZXIvQ291bnRlciAwICovCi0jZGVmaW5lIEFUOTFYNDBfSURfVEMxCQk1CS8qIFRpbWVyL0NvdW50ZXIgMSovCi0jZGVmaW5lIEFUOTFYNDBfSURfVEMyCQk2CS8qIFRpbWVyL0NvdW50ZXIgMiovCi0jZGVmaW5lIEFUOTFYNDBfSURfV0QJCTcJLyogV2F0Y2hkb2c/ICovCi0jZGVmaW5lIEFUOTFYNDBfSURfUElPQQkJOAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQotI2RlZmluZSBBVDkxWDQwX0lEX0lSUTAJCTE2CS8qIEV4dGVybmFsIElSUSAwICovCi0jZGVmaW5lIEFUOTFYNDBfSURfSVJRMQkJMTcJLyogRXh0ZXJuYWwgSVJRIDEgKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9JUlEyCQkxOAkvKiBFeHRlcm5hbCBJUlEgMiAqLwotCi0vKgotICogU3lzdGVtIFBlcmlwaGVyYWxzCi0gKi8KLSNkZWZpbmUgQVQ5MV9CQVNFX1NZUwkweGZmYzAwMDAwCi0KLSNkZWZpbmUgQVQ5MV9FQkkJMHhmZmUwMDAwMAkvKiBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlICovCi0jZGVmaW5lIEFUOTFfU0YJCTB4ZmZmMDAwMDAJLyogU3BlY2lhbCBGdW5jdGlvbiAqLwotI2RlZmluZSBBVDkxX1VTQVJUMQkweGZmZmNjMDAwCS8qIFVTQVJUIDEgKi8KLSNkZWZpbmUgQVQ5MV9VU0FSVDAJMHhmZmZkMDAwMAkvKiBVU0FSVCAwICovCi0jZGVmaW5lIEFUOTFfVEMJCTB4ZmZmZTAwMDAJLyogVGltZXIgQ291bnRlciAqLwotI2RlZmluZSBBVDkxX1BJT0EJMHhmZmZmMDAwMAkvKiBQSU8gQ29udHJvbGxlciBBICovCi0jZGVmaW5lIEFUOTFfUFMJCTB4ZmZmZjQwMDAJLyogUG93ZXIgU2F2ZSAqLwotI2RlZmluZSBBVDkxX1dECQkweGZmZmY4MDAwCS8qIFdhdGNoZG9nIFRpbWVyICovCi0KLS8qCi0gKiBUaGUgQVQ5MXg0MCBzZXJpZXMgZG9lc24ndCBoYXZlIGEgZGVidWcgdW5pdCBsaWtlIHRoZSBvdGhlciBBVDkxIHBhcnRzLgotICogQnV0IGl0IGRvZXMgaGF2ZSBhIGNoaXAgaWRlbnRpZnkgcmVnaXN0ZXIgYW5kIGV4dGVuc2lvbiBJRCwgc28gZGVmaW5lIGF0Ci0gKiBsZWFzdCB0aGVzZSBoZXJlLgotICovCi0jZGVmaW5lIEFUOTFfREJHVV9DSURSCShBVDkxX1NGICsgMCkJLyogQ0lEUiBpbiBQUyBzZWdtZW50ICovCi0jZGVmaW5lIEFUOTFfREJHVV9FWElECShBVDkxX1NGICsgNCkJLyogRVhJRCBpbiBQUyBzZWdtZW50ICovCi0KLS8qCi0gKiBTdXBwb3J0IGRlZmluZXMgZm9yIHRoZSBzaW1wbGUgUG93ZXIgQ29udHJvbGxlciBtb2R1bGUuCi0gKi8KLSNkZWZpbmUJQVQ5MV9QU19DUgkoQVQ5MV9QUyArIDApCS8qIFBTIENvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJQVQ5MV9QU19DUl9DUFUJKDEgPDwgMCkJLyogQ1BVIGNsb2NrIGRpc2FibGUgYml0ICovCi0KLSNkZWZpbmUgQVQ5MVg0MF9NQVNURVJfQ0xPQ0sJNDAwMDAwMDAKLQotI2VuZGlmIC8qIEFUOTFYNDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXRtZWwtbWNpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNjllNDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgX19NQUNIX0FUTUVMX01DSV9ICi0jZGVmaW5lIF9fTUFDSF9BVE1FTF9NQ0lfSAotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtYXRtZWwuaD4KLQotLyoqCi0gKiBzdHJ1Y3QgbWNpX2RtYV9kYXRhIC0gRE1BIGRhdGEgZm9yIE1DSSBpbnRlcmZhY2UKLSAqLwotc3RydWN0IG1jaV9kbWFfZGF0YSB7Ci0Jc3RydWN0IGF0X2RtYV9zbGF2ZQlzZGF0YTsKLX07Ci0KLS8qIGFjY2Vzc29yIG1hY3JvcyAqLwotI2RlZmluZQlzbGF2ZV9kYXRhX3B0cihzKQkoJihzKS0+c2RhdGEpCi0jZGVmaW5lIGZpbmRfc2xhdmVfZGV2KHMpCSgocyktPnNkYXRhLmRtYV9kZXYpCi0KLSNlbmRpZiAvKiBfX01BQ0hfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IGIyN2U5Y2EuLjYxOTE0ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtNjIsNyArNjIsNiBAQAogI2RlZmluZSBBUkNIX0VYSURfU0FNQTVENDMJMHgwMDAwMDAwMwogI2RlZmluZSBBUkNIX0VYSURfU0FNQTVENDQJMHgwMDAwMDAwNAogCi0jZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFYOTIJMHgwOTIwMDAwMAogI2RlZmluZSBBUkNIX0ZBTUlMWV9BVDkxU0FNOQkweDAxOTAwMDAwCiAjZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFTQU05WEUJMHgwMjkwMDAwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggYzEzNzk3My4uY2FjYmFhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMjQsOSArMjQsNiBAQAogLyogc2FtYTVkNCAqLwogI2RlZmluZSBBVDkxX0JBU0VfREJHVTIJMHhmYzA2OTAwMAogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQotI2luY2x1ZGUgPG1hY2gvYXQ5MXg0MC5oPgotI2Vsc2UKICNpbmNsdWRlIDxtYWNoL2F0OTFybTkyMDAuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYwLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MS5oPgpAQCAtNTEsOCArNDgsNiBAQAogICovCiAjZGVmaW5lIEFUOTFfQkFTRV9TWVMJMHhmZmZmYzAwMAogCi0jZW5kaWYKLQogLyoKICAqIE9uIHNhbWE1ZDQgdGhlcmUgaXMgbm8gc3lzdGVtIGNvbnRyb2xsZXIsIHdlIG1hcCBzb21lIG5lZWRlZCBwZXJpcGhlcmFscwogICovCkBAIC0xMzIsMTMgKzEyNyw4IEBACiAgKiBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZ2VuZXJpYyBzdXNwZW5kL3Jlc3VtZSBwYXRoLgogICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2lmZGVmIENPTkZJR19QSU5DVFJMX0FUOTEKIGV4dGVybiB2b2lkIGF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQodm9pZCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUodm9pZCkge30KLSNlbmRpZgogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBhY2IyZDg5MC4uNGViYjYwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTMxLDcgKzMxLDYgQEAKIAogdm9pZCBfX2lvbWVtICphdDkxX3VhcnQ7CiAKLSNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogc3RhdGljIGNvbnN0IHUzMiB1YXJ0c19ybTkyMDBbXSA9IHsKIAlBVDkxX0JBU0VfREJHVTAsCiAJQVQ5MVJNOTIwMF9CQVNFX1VTMCwKQEAgLTE4OCwxMiArMTg3LDYgQEAKIAogCWF0OTFfdWFydCA9IE5VTEw7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCi17Ci0JYXQ5MV91YXJ0ID0gTlVMTDsKLX0KLSNlbmRpZgogCiAvKgogICogVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhlIHNlcmlhbCBwb3J0IGhhcyBhbHJlYWR5IGJlZW4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RiM2VjOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9pcnEuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNCBBVE1FTAotICogIENvcHlyaWdodCAoQykgUmljayBCcm9uc29uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLSNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLQotdm9pZCBfX2lvbWVtICphdDkxX2FpY19iYXNlOwotc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluICphdDkxX2FpY19kb21haW47Ci1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICphdDkxX2FpY19ucDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbl9pcnFzID0gTlJfQUlDX0lSUVM7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgKndha2V1cHM7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyAqYmFja3VwczsKLQotI2RlZmluZSBzZXRfYmFja3VwKGJpdCkgc2V0X2JpdChiaXQsIGJhY2t1cHMpCi0jZGVmaW5lIGNsZWFyX2JhY2t1cChiaXQpIGNsZWFyX2JpdChiaXQsIGJhY2t1cHMpCi0KLXN0YXRpYyBpbnQgYXQ5MV9haWNfcG1faW5pdCh2b2lkKQotewotCWJhY2t1cHMgPSBremFsbG9jKEJJVFNfVE9fTE9OR1Mobl9pcnFzKSAqIHNpemVvZigqYmFja3VwcyksIEdGUF9LRVJORUwpOwotCWlmICghYmFja3VwcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl3YWtldXBzID0ga3phbGxvYyhCSVRTX1RPX0xPTkdTKG5faXJxcykgKiBzaXplb2YoKmJhY2t1cHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdha2V1cHMpIHsKLQkJa2ZyZWUoYmFja3Vwcyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfYWljX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdmFsdWUpCi17Ci0JaWYgKHVubGlrZWx5KGQtPmh3aXJxID49IG5faXJxcykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHZhbHVlKQotCQlzZXRfYml0KGQtPmh3aXJxLCB3YWtldXBzKTsKLQllbHNlCi0JCWNsZWFyX2JpdChkLT5od2lycSwgd2FrZXVwcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBhdDkxX2lycV9zdXNwZW5kKHZvaWQpCi17Ci0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfSURDUiwgKmJhY2t1cHMpOwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX0lFQ1IsICp3YWtldXBzKTsKLX0KLQotdm9pZCBhdDkxX2lycV9yZXN1bWUodm9pZCkKLXsKLQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19JRENSLCAqd2FrZXVwcyk7Ci0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfSUVDUiwgKmJhY2t1cHMpOwotfQotCi0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgYXQ5MV9haWNfcG1faW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIHNldF9iYWNrdXAoYml0KQotI2RlZmluZSBjbGVhcl9iYWNrdXAoYml0KQotI2RlZmluZSBhdDkxX2FpY19zZXRfd2FrZQlOVUxMCi0KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uX2lycV9lbnRyeQotYXQ5MV9haWNfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1MzIgaXJxbnI7Ci0JdTMyIGlycXN0YXQ7Ci0KLQlpcnFuciA9IGF0OTFfYWljX3JlYWQoQVQ5MV9BSUNfSVZSKTsKLQlpcnFzdGF0ID0gYXQ5MV9haWNfcmVhZChBVDkxX0FJQ19JU1IpOwotCi0JLyoKLQkgKiBJU1IgdmFsdWUgaXMgMCB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW50ZXJydXB0IG9yIHdoZW4gdGhlcmUgaXMKLQkgKiBhIHNwdXJpb3VzIGludGVycnVwdAotCSAqLwotCWlmICghaXJxc3RhdCkKLQkJYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRU9JQ1IsIDApOwotCWVsc2UKLQkJaGFuZGxlX0lSUShpcnFuciwgcmVncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfYWljX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQkvKiBEaXNhYmxlIGludGVycnVwdCBvbiBBSUMgKi8KLQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19JRENSLCAxIDw8IGQtPmh3aXJxKTsKLQkvKiBVcGRhdGUgSVNSIGNhY2hlICovCi0JY2xlYXJfYmFja3VwKGQtPmh3aXJxKTsKLX0KLQotc3RhdGljIHZvaWQgYXQ5MV9haWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JLyogRW5hYmxlIGludGVycnVwdCBvbiBBSUMgKi8KLQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19JRUNSLCAxIDw8IGQtPmh3aXJxKTsKLQkvKiBVcGRhdGUgSVNSIGNhY2hlICovCi0Jc2V0X2JhY2t1cChkLT5od2lycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfYWljX2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JLyoKLQkgKiBNYXJrIGVuZC1vZi1pbnRlcnJ1cHQgb24gQUlDLCB0aGUgY29udHJvbGxlciBkb2Vzbid0IGNhcmUgYWJvdXQKLQkgKiB0aGUgdmFsdWUgd3JpdHRlbi4gTW9yZW92ZXIgaXQncyBhIHdyaXRlLW9ubHkgcmVnaXN0ZXIuCi0JICovCi0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRU9JQ1IsIDApOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAqYXQ5MV9leHRlcm5faXJxOwotCi11MzIgYXQ5MV9nZXRfZXh0ZXJuX2lycSh2b2lkKQotewotCWlmICghYXQ5MV9leHRlcm5faXJxKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gKmF0OTFfZXh0ZXJuX2lycTsKLX0KLQotI2RlZmluZSBpc19leHRlcm5faXJxKGh3aXJxKSB0ZXN0X2JpdChod2lycSwgYXQ5MV9leHRlcm5faXJxKQotCi1zdGF0aWMgaW50IGF0OTFfYWljX2NvbXB1dGVfc3JjdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIHR5cGUpCi17Ci0JaW50IHNyY3R5cGU7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6Ci0JCXNyY3R5cGUgPSBBVDkxX0FJQ19TUkNUWVBFX0hJR0g7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6Ci0JCXNyY3R5cGUgPSBBVDkxX0FJQ19TUkNUWVBFX1JJU0lORzsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6Ci0JCWlmICgoZC0+aHdpcnEgPT0gQVQ5MV9JRF9GSVEpIHx8IGlzX2V4dGVybl9pcnEoZC0+aHdpcnEpKQkJLyogb25seSBzdXBwb3J0ZWQgb24gZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwotCQkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfTE9XOwotCQllbHNlCi0JCQlzcmN0eXBlID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCWlmICgoZC0+aHdpcnEgPT0gQVQ5MV9JRF9GSVEpIHx8IGlzX2V4dGVybl9pcnEoZC0+aHdpcnEpKQkJLyogb25seSBzdXBwb3J0ZWQgb24gZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwotCQkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfRkFMTElORzsKLQkJZWxzZQotCQkJc3JjdHlwZSA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNyY3R5cGUgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiBzcmN0eXBlOwotfQotCi1zdGF0aWMgaW50IGF0OTFfYWljX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdHlwZSkKLXsKLQl1bnNpZ25lZCBpbnQgc21yOwotCWludCBzcmN0eXBlOwotCi0Jc3JjdHlwZSA9IGF0OTFfYWljX2NvbXB1dGVfc3JjdHlwZShkLCB0eXBlKTsKLQlpZiAoc3JjdHlwZSA8IDApCi0JCXJldHVybiBzcmN0eXBlOwotCi0Jc21yID0gYXQ5MV9haWNfcmVhZChBVDkxX0FJQ19TTVIoZC0+aHdpcnEpKSAmIH5BVDkxX0FJQ19TUkNUWVBFOwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX1NNUihkLT5od2lycSksIHNtciB8IHNyY3R5cGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYXQ5MV9haWNfY2hpcCA9IHsKLQkubmFtZQkJPSAiQUlDIiwKLQkuaXJxX21hc2sJPSBhdDkxX2FpY19tYXNrX2lycSwKLQkuaXJxX3VubWFzawk9IGF0OTFfYWljX3VubWFza19pcnEsCi0JLmlycV9zZXRfdHlwZQk9IGF0OTFfYWljX3NldF90eXBlLAotCS5pcnFfc2V0X3dha2UJPSBhdDkxX2FpY19zZXRfd2FrZSwKLQkuaXJxX2VvaQk9IGF0OTFfYWljX2VvaSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FpY19od19pbml0KHVuc2lnbmVkIGludCBzcHVfdmVjdG9yKQotewotCWludCBpOwotCi0JLyoKLQkgKiBQZXJmb3JtIDggRW5kIE9mIEludGVycnVwdCBDb21tYW5kIHRvIG1ha2Ugc3VyZSBBSUMKLQkgKiB3aWxsIG5vdCBMb2NrIG91dCBuSVJRCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRU9JQ1IsIDApOwotCi0JLyoKLQkgKiBTcHVyaW91cyBJbnRlcnJ1cHQgSUQgaW4gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyLgotCSAqIFdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCBpbnRlcnJ1cHQsIHRoZSBJUlEgVmVjdG9yIFJlZ2lzdGVyCi0JICogcmVhZHMgdGhlIHZhbHVlIHN0b3JlZCBpbiBBSUNfU1BVCi0JICovCi0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfU1BVLCBzcHVfdmVjdG9yKTsKLQotCS8qIE5vIGRlYnVnZ2luZyBpbiBBSUM6IERlYnVnIChQcm90ZWN0KSBDb250cm9sIFJlZ2lzdGVyICovCi0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRENSLCAwKTsKLQotCS8qIERpc2FibGUgYW5kIGNsZWFyIGFsbCBpbnRlcnJ1cHRzIGluaXRpYWxseSAqLwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX0lEQ1IsIDB4RkZGRkZGRkYpOwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX0lDQ1IsIDB4RkZGRkZGRkYpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgQUlDIGludGVycnVwdCBjb250cm9sbGVyLgotICovCi12b2lkIF9faW5pdCBhdDkxX2FpY19pbml0KHVuc2lnbmVkIGludCAqcHJpb3JpdHksIHVuc2lnbmVkIGludCBleHRfaXJxX21hc2spCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IGlycV9iYXNlOwotCi0JYXQ5MV9leHRlcm5faXJxID0ga3phbGxvYyhCSVRTX1RPX0xPTkdTKG5faXJxcykKLQkJCQkgICogc2l6ZW9mKCphdDkxX2V4dGVybl9pcnEpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChhdDkxX2FpY19wbV9pbml0KCkgfHwgYXQ5MV9leHRlcm5faXJxID09IE5VTEwpCi0JCXBhbmljKCJVbmFibGUgdG8gYWxsb2NhdGUgYml0IG1hcHNcbiIpOwotCi0JKmF0OTFfZXh0ZXJuX2lycSA9IGV4dF9pcnFfbWFzazsKLQotCWF0OTFfYWljX2Jhc2UgPSBpb3JlbWFwKEFUOTFfQUlDLCA1MTIpOwotCWlmICghYXQ5MV9haWNfYmFzZSkKLQkJcGFuaWMoIlVuYWJsZSB0byBpb3JlbWFwIEFJQyByZWdpc3RlcnNcbiIpOwotCi0JLyogQWRkIGlycSBkb21haW4gZm9yIEFJQyAqLwotCWlycV9iYXNlID0gaXJxX2FsbG9jX2Rlc2NzKC0xLCAwLCBuX2lycXMsIDApOwotCWlmIChpcnFfYmFzZSA8IDApIHsKLQkJV0FSTigxLCAiQ2Fubm90IGFsbG9jYXRlIGlycV9kZXNjcywgYXNzdW1pbmcgcHJlLWFsbG9jYXRlZFxuIik7Ci0JCWlycV9iYXNlID0gMDsKLQl9Ci0JYXQ5MV9haWNfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGVnYWN5KGF0OTFfYWljX25wLCBuX2lycXMsCi0JCQkJCQlpcnFfYmFzZSwgMCwKLQkJCQkJCSZpcnFfZG9tYWluX3NpbXBsZV9vcHMsIE5VTEwpOwotCi0JaWYgKCFhdDkxX2FpY19kb21haW4pCi0JCXBhbmljKCJVbmFibGUgdG8gYWRkIEFJQyBpcnEgZG9tYWluXG4iKTsKLQotCWlycV9zZXRfZGVmYXVsdF9ob3N0KGF0OTFfYWljX2RvbWFpbik7Ci0KLQkvKgotCSAqIFRoZSBJVlIgaXMgdXNlZCBieSBtYWNybyBnZXRfaXJxbnJfYW5kX2Jhc2UgdG8gcmVhZCBhbmQgdmVyaWZ5LgotCSAqIFRoZSBpcnEgbnVtYmVyIGlzIE5SX0FJQ19JUlFTIHdoZW4gYSBzcHVyaW91cyBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBuX2lycXM7IGkrKykgewotCQkvKiBQdXQgaGFyZHdhcmUgaXJxIG51bWJlciBpbiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyOiAqLwotCQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19TVlIoaSksIE5SX0lSUVNfTEVHQUNZICsgaSk7Ci0JCS8qIEFjdGl2ZSBMb3cgaW50ZXJydXB0LCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJpb3JpdHkgKi8KLQkJYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfU01SKGkpLCBBVDkxX0FJQ19TUkNUWVBFX0xPVyB8IHByaW9yaXR5W2ldKTsKLQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKE5SX0lSUVNfTEVHQUNZICsgaSwgJmF0OTFfYWljX2NoaXAsIGhhbmRsZV9mYXN0ZW9pX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCX0KLQotCWF0OTFfYWljX2h3X2luaXQobl9pcnFzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvbGVkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjIyZTMzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9sZWRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogTEVEIGRyaXZlciBmb3IgQXRtZWwgQVQ5MS1iYXNlZCBib2FyZHMuCi0gKgotICogIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZSAoUHR5KSBMdGQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ORVdfTEVEUykKLQotLyoKLSAqIE5ldyBjcm9zcy1wbGF0Zm9ybSBMRUQgc3VwcG9ydC4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbGVkX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfZ3Bpb19sZWRzX2RldmljZSA9IHsKLQkubmFtZQkJCT0gImxlZHMtZ3BpbyIsCi0JLmlkCQkJPSAtMSwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmbGVkX2RhdGEsCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2dwaW9fbGVkcyhzdHJ1Y3QgZ3Bpb19sZWQgKmxlZHMsIGludCBucikKLXsKLQlpbnQgaTsKLQotCWlmICghbnIpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChsZWRzW2ldLmdwaW8sIGxlZHNbaV0uYWN0aXZlX2xvdyk7Ci0KLQlsZWRfZGF0YS5sZWRzID0gbGVkczsKLQlsZWRfZGF0YS5udW1fbGVkcyA9IG5yOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9ncGlvX2xlZHNfZGV2aWNlKTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfZ3Bpb19sZWRzKHN0cnVjdCBncGlvX2xlZCAqbGVkcywgaW50IG5yKSB7fQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKaW5kZXggNDA3M2FiNy4uOWIxNTE2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKQEAgLTI5LDEwICsyOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJwbS5oIgotI2luY2x1ZGUgImdwaW8uaCIKIAogc3RhdGljIHZvaWQgKCphdDkxX3BtX3N0YW5kYnkpKHZvaWQpOwogCkBAIC0xMzEsMjMgKzEyOSw3IEBACiAKIHN0YXRpYyBpbnQgYXQ5MV9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7Ci0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCWF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQoKTsKLQllbHNlCi0JCWF0OTFfZ3Bpb19zdXNwZW5kKCk7Ci0KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0xEX0lSUV9BVDkxKSAmJiBhdDkxX2FpY19iYXNlKSB7Ci0JCWF0OTFfaXJxX3N1c3BlbmQoKTsKLQotCQlwcl9kZWJ1ZygiQVQ5MTogUE0gLSB3YWtlIG1hc2sgJTA4eCwgcG0gc3RhdGUgJWRcbiIsCi0JCQkJLyogcmVtZW1iZXIgYWxsIHRoZSBhbHdheXMtd2FrZSBpcnFzICovCi0JCQkJKGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfUENTUikKLQkJCQkJCXwgKDEgPDwgQVQ5MV9JRF9GSVEpCi0JCQkJCQl8ICgxIDw8IEFUOTFfSURfU1lTKQotCQkJCQkJfCAoYXQ5MV9nZXRfZXh0ZXJuX2lycSgpKSkKLQkJCQkJJiBhdDkxX2FpY19yZWFkKEFUOTFfQUlDX0lNUiksCi0JCQkJc3RhdGUpOwotCX0KKwlhdDkxX3BpbmN0cmxfZ3Bpb19zdXNwZW5kKCk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJCS8qCkBAIC0yMTIsMjEgKzE5NCwxMCBAQAogCQkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0xEX0lSUV9BVDkxKSAmJiBhdDkxX2FpY19iYXNlKQotCQlwcl9kZWJ1ZygiQVQ5MTogUE0gLSB3YWtldXAgJTA4eFxuIiwKLQkJCSBhdDkxX2FpY19yZWFkKEFUOTFfQUlDX0lQUikgJgotCQkJIGF0OTFfYWljX3JlYWQoQVQ5MV9BSUNfSU1SKSk7Ci0KIGVycm9yOgogCXRhcmdldF9zdGF0ZSA9IFBNX1NVU1BFTkRfT047CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0xEX0lSUV9BVDkxKSAmJiBhdDkxX2FpY19iYXNlKQotCQlhdDkxX2lycV9yZXN1bWUoKTsKLQotCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQotCQlhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUoKTsKLQllbHNlCi0JCWF0OTFfZ3Bpb19yZXN1bWUoKTsKKwlhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaAppbmRleCBjNTEwMWRjLi5kMmM4OTk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaApAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogCiAjaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFybTkyMDBfc2RyYW1jLmg+CiAKICNpZmRlZiBDT05GSUdfUE0KIGV4dGVybiB2b2lkIGF0OTFfcG1fc2V0X3N0YW5kYnkodm9pZCAoKmF0OTFfc3RhbmRieSkodm9pZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3NldHVwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvc2V0dXAuYwppbmRleCA5NjEwNzkyLi5jZTI1ZTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvc2V0dXAuYwpAQCAtNDIsMzUgKzQyLDkgQEAKIAkJYXQ5MV9nZXRfc29jX3N1YnR5cGUoJmF0OTFfc29jX2luaXRkYXRhKSk7CiB9CiAKLXZvaWQgX19pbml0IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCh2b2lkKQotewotCWF0OTFfaW5pdF9pbnRlcnJ1cHRzKGF0OTFfYm9vdF9zb2MuZGVmYXVsdF9pcnFfcHJpb3JpdHkpOwotfQotCi12b2lkIF9faW5pdCBhdDkxX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgKnByaW9yaXR5KQotewotCS8qIEluaXRpYWxpemUgdGhlIEFJQyBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR19PTERfSVJRX0FUOTEpKQotCQlhdDkxX2FpY19pbml0KHByaW9yaXR5LCBhdDkxX2Jvb3Rfc29jLmV4dGVybl9pcnEpOwotCi0JLyogRW5hYmxlIEdQSU8gaW50ZXJydXB0cyAqLwotCWF0OTFfZ3Bpb19pcnFfc2V0dXAoKTsKLX0KLQogdm9pZCBfX2lvbWVtICphdDkxX3JhbWNfYmFzZVsyXTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0OTFfcmFtY19iYXNlKTsKIAotdm9pZCBfX2luaXQgYXQ5MV9pb3JlbWFwX3JhbWMoaW50IGlkLCB1MzIgYWRkciwgdTMyIHNpemUpCi17Ci0JaWYgKGlkIDwgMCB8fCBpZCA+IDEpIHsKLQkJcHJfZW1lcmcoIldyb25nIFJBTSBjb250cm9sbGVyIGlkICglZCksIGNhbm5vdCBjb250aW51ZVxuIiwgaWQpOwotCQlCVUcoKTsKLQl9Ci0JYXQ5MV9yYW1jX2Jhc2VbaWRdID0gaW9yZW1hcChhZGRyLCBzaXplKTsKLQlpZiAoIWF0OTFfcmFtY19iYXNlW2lkXSkKLQkJcGFuaWMocHJfZm10KCJJbXBvc3NpYmxlIHRvIGlvcmVtYXAgcmFtYy4lZCAweCV4XG4iKSwgaWQsIGFkZHIpOwotfQotCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNyYW1fZGVzY1syXSBfX2luaXRkYXRhOwogCiB2b2lkIF9faW5pdCBhdDkxX2luaXRfc3JhbShpbnQgYmFuaywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQpAQCAtNDE4LDcgKzM5Miw2IEBACiAJCXBhbmljKHByX2ZtdCgiSW1wb3NzaWJsZSB0byBpb3JlbWFwIGF0OTFfbWF0cml4X2Jhc2VcbiIpKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX09GKSAmJiAhZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcmFtY19pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtc2RyYW1jIiwgLmRhdGEgPSBhdDkxcm05MjAwX3N0YW5kYnkgfSwKIAl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXNkcmFtYyIsIC5kYXRhID0gYXQ5MXNhbTlfc2RyYW1fc3RhbmRieSB9LApAQCAtNDYwLDEzICs0MzMsNiBAQAogewogCWF0OTFfZHRfcmFtYygpOwogCi0JLyogSW5pdCBjbG9jayBzdWJzeXN0ZW0gKi8KLQlhdDkxX2R0X2Nsb2NrX2luaXQoKTsKLQotCS8qIFJlZ2lzdGVyIHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgY2xvY2tzICovCi0JaWYgKGF0OTFfYm9vdF9zb2MucmVnaXN0ZXJfY2xvY2tzKQotCQlhdDkxX2Jvb3Rfc29jLnJlZ2lzdGVyX2Nsb2NrcygpOwotCiAJYXQ5MV9ib290X3NvYy5pbml0KCk7CiB9CiAKQEAgLTQ3NCwzOSArNDQwLDYgQEAKIHsKIAlhdDkxX2R0X3JhbWMoKTsKIAotCS8qIEluaXQgY2xvY2sgc3Vic3lzdGVtICovCi0JYXQ5MV9kdF9jbG9ja19pbml0KCk7Ci0KLQkvKiBSZWdpc3RlciB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGNsb2NrcyAqLwotCWlmIChhdDkxX2Jvb3Rfc29jLnJlZ2lzdGVyX2Nsb2NrcykKLQkJYXQ5MV9ib290X3NvYy5yZWdpc3Rlcl9jbG9ja3MoKTsKLQogCWlmIChhdDkxX2Jvb3Rfc29jLmluaXQpCiAJCWF0OTFfYm9vdF9zb2MuaW5pdCgpOwogfQotI2VuZGlmCi0KLXZvaWQgX19pbml0IGF0OTFfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JYXQ5MV9ib290X3NvYy5pb3JlbWFwX3JlZ2lzdGVycygpOwotCi0JLyogSW5pdCBjbG9jayBzdWJzeXN0ZW0gKi8KLQlhdDkxX2Nsb2NrX2luaXQobWFpbl9jbG9jayk7Ci0KLQkvKiBSZWdpc3RlciB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGNsb2NrcyAqLwotCWF0OTFfYm9vdF9zb2MucmVnaXN0ZXJfY2xvY2tzKCk7Ci0KLQlhdDkxX2Jvb3Rfc29jLmluaXQoKTsKLQotCXBpbmN0cmxfcHJvdmlkZV9kdW1taWVzKCk7Ci19Ci0KLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCWF0OTFfYm9vdF9zb2MucmVnaXN0ZXJfZGV2aWNlcygpOwotfQotCi12b2lkIF9faW5pdCBhdDkxX2luaXRfdGltZSh2b2lkKQotewotCWF0OTFfYm9vdF9zb2MuaW5pdF90aW1lKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvc29jLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvc29jLmgKaW5kZXggOWE4ZmQ5Ny4uYWU2YzBiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3NvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9zb2MuaApAQCAtNiwxNCArNiw4IEBACiAKIHN0cnVjdCBhdDkxX2luaXRfc29jIHsKIAlpbnQgYnVpbHRpbjsKLQl1MzIgZXh0ZXJuX2lycTsKLQl1bnNpZ25lZCBpbnQgKmRlZmF1bHRfaXJxX3ByaW9yaXR5OwogCXZvaWQgKCptYXBfaW8pKHZvaWQpOwotCXZvaWQgKCppb3JlbWFwX3JlZ2lzdGVycykodm9pZCk7Ci0Jdm9pZCAoKnJlZ2lzdGVyX2Nsb2Nrcykodm9pZCk7Ci0Jdm9pZCAoKnJlZ2lzdGVyX2RldmljZXMpKHZvaWQpOwogCXZvaWQgKCppbml0KSh2b2lkKTsKLQl2b2lkICgqaW5pdF90aW1lKSh2b2lkKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgYXQ5MV9pbml0X3NvYyBhdDkxX2Jvb3Rfc29jOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3N0YW1wOWcyMC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3N0YW1wOWcyMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjJjMGFiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9zdGFtcDlnMjAuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfX01BQ0hfU1RBTVA5RzIwX0gKLSNkZWZpbmUgX19NQUNIX1NUQU1QOUcyMF9ICi0KLXZvaWQgc3RhbXA5ZzIwX2luaXRfZWFybHkodm9pZCk7Ci12b2lkIHN0YW1wOWcyMF9ib2FyZF9pbml0KHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWJjbS9LY29uZmlnCmluZGV4IDJhYmFkNzQuLmFhZWVjNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vS2NvbmZpZwpAQCAtNSw4ICs1LDU2IEBACiAKIGlmIEFSQ0hfQkNNCiAKK2NvbW1lbnQgIklQUk9DIGFyY2hpdGVjdGVkIFNvQ3MiCisKK2NvbmZpZyBBUkNIX0JDTV9JUFJPQworCWJvb2wKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBDQUNIRV9MMlgwCisJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKKwlzZWxlY3QgSEFWRV9BUk1fVFdEIGlmIFNNUAorCXNlbGVjdCBBUk1fR0xPQkFMX1RJTUVSCisKKwlzZWxlY3QgQ0xLU1JDX01NSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgQVJNX0FNQkEKKwlzZWxlY3QgUElOQ1RSTAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIEJyb2FkY29tIElQUk9DIGFyY2hpdGVjdGVkIFNvQ3MuCisJICBUaGUgSVBST0MgY29tcGxleCBjb250YWlucyBvbmUgb3IgbW9yZSBBUk0gQ1BVcyBhbG9uZyB3aXRoIGNvbW1vbgorCSAgY29yZSBwZXJpcGVyYWxzLiBBcHBsaWNhdGlvbiBzcGVjaWZpYyBTb0NzIGFyZSBjcmVhdGVkIGJ5IGFkZGluZyBhCisJICB1QXJjaGl0ZWN0dXJlIGNvbnRhaW5pbmcgcGVyaXBoZXJhbHMgb3V0c2lkZSBvZiB0aGUgSVBST0MgY29tcGxleC4KKwkgIEN1cnJlbnRseSBzdXBwb3J0ZWQgU29DcyBhcmUgQ3lnbnVzLgorCitjb25maWcgQVJDSF9CQ01fQ1lHTlVTCisJYm9vbCAiQnJvYWRjb20gQ3lnbnVzIFN1cHBvcnQiIGlmIEFSQ0hfTVVMVElfVjcKKwlzZWxlY3QgQVJDSF9CQ01fSVBST0MKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEN5Z251cyBmYW1pbHksCisJICB3aGljaCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHZhcmlhbnRzOgorCSAgQkNNMTEzMDAsIEJDTTExMzIwLCBCQ00xMTM1MCwgQkNNMTEzNjAsCisJICBCQ001ODMwMCwgQkNNNTgzMDIsIEJDTTU4MzAzLCBCQ001ODMwNS4KKworY29uZmlnIEFSQ0hfQkNNXzUzMDFYCisJYm9vbCAiQnJvYWRjb20gQkNNNDcwWCAvIEJDTTUzMDFYIEFSTSBTb0MiIGlmIEFSQ0hfTVVMVElfVjcKKwlzZWxlY3QgQVJDSF9CQ01fSVBST0MKKwloZWxwCisJICBTdXBwb3J0IGZvciBCcm9hZGNvbSBCQ000NzBYIGFuZCBCQ001MzAxWCBTb0NzIHdpdGggQVJNIENQVSBjb3Jlcy4KKworCSAgVGhpcyBpcyBhIG5ldHdvcmsgU29DIGxpbmUgbW9zdGx5IHVzZWQgaW4gaG9tZSByb3V0ZXJzIGFuZAorCSAgd2lmaSBhY2Nlc3MgcG9pbnRzLCBpdCdzIGludGVybmFsIG5hbWUgaXMgTm9ydGhzdGFyLgorCSAgVGhpcyBpbmNsdXNlZCB0aGUgZm9sbG93aW5nIFNvQzogQkNNNTMwMTAsIEJDTTUzMDExLCBCQ001MzAxMiwKKwkgIEJDTTUzMDE0LCBCQ001MzAxNSwgQkNNNTMwMTYsIEJDTTUzMDE3LCBCQ001MzAxOCwgQkNNNDcwNywKKwkgIEJDTTQ3MDggYW5kIEJDTTQ3MDkuCisKKwkgIERvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgQkNNNDc2MCB3aGljaCBpcyBhIHRvdGFsbHkKKwkgIGRpZmZlcmVudCBTb0Mgb3Igd2l0aCB0aGUgb2xkZXIgQkNNNDdYWCBhbmQgQkNNNTNYWCBiYXNlZAorCSAgbmV0d29yayBTb0MgdXNpbmcgYSBNSVBTIENQVSwgdGhleSBhcmUgc3VwcG9ydGVkIGJ5IGFyY2gvbWlwcy9iY200N3h4CisKK2NvbW1lbnQgIktPTkEgYXJjaGl0ZWN0ZWQgU29DcyIKKwogY29uZmlnIEFSQ0hfQkNNX01PQklMRQotCWJvb2wgIkJyb2FkY29tIE1vYmlsZSBTb0MgU3VwcG9ydCIgaWYgQVJDSF9NVUxUSV9WNworCWJvb2wKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgQVJNX0VSUkFUQV83NTQzMjIKIAlzZWxlY3QgQVJNX0VSUkFUQV83NzU0MjAKQEAgLTE1LDE2ICs2MywxMyBAQAogCXNlbGVjdCBUSUNLX09ORVNIT1QKIAlzZWxlY3QgSEFWRV9BUk1fQVJDSF9USU1FUgogCXNlbGVjdCBQSU5DVFJMCisJc2VsZWN0IEFSQ0hfQkNNX01PQklMRV9TTVAgaWYgU01QCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gQnJvYWRjb20gbW9iaWxlIFNvQ3MuCiAKLWlmIEFSQ0hfQkNNX01PQklMRQotCi1tZW51ICJCcm9hZGNvbSBNb2JpbGUgU29DIFNlbGVjdGlvbiIKLQogY29uZmlnIEFSQ0hfQkNNXzI4MVhYCiAJYm9vbCAiQnJvYWRjb20gQkNNMjgxWFggU29DIGZhbWlseSIKLQlkZWZhdWx0IHkKKwlzZWxlY3QgQVJDSF9CQ01fTU9CSUxFCiAJc2VsZWN0IEhBVkVfU01QCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBCQ00yODFYWCBmYW1pbHksIHdoaWNoIGluY2x1ZGVzCkBAIC0zMyw3ICs3OCw3IEBACiAKIGNvbmZpZyBBUkNIX0JDTV8yMTY2NAogCWJvb2wgIkJyb2FkY29tIEJDTTIxNjY0IFNvQyBmYW1pbHkiCi0JZGVmYXVsdCB5CisJc2VsZWN0IEFSQ0hfQkNNX01PQklMRQogCXNlbGVjdCBIQVZFX1NNUAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQkNNMjE2NjQgZmFtaWx5LCB3aGljaCBpbmNsdWRlcwpAQCAtNDEsMTkgKzg2LDE4IEBACiAKIGNvbmZpZyBBUkNIX0JDTV9NT0JJTEVfTDJfQ0FDSEUKIAlib29sICJCcm9hZGNvbSBtb2JpbGUgU29DIGxldmVsIDIgY2FjaGUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NCkKKwlkZXBlbmRzIG9uIEFSQ0hfQkNNX01PQklMRQogCWRlZmF1bHQgeQogCXNlbGVjdCBDQUNIRV9MMlgwCiAJc2VsZWN0IEFSQ0hfQkNNX01PQklMRV9TTUMKIAogY29uZmlnIEFSQ0hfQkNNX01PQklMRV9TTUMKIAlib29sCi0JZGVwZW5kcyBvbiBBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NAorCWRlcGVuZHMgb24gQVJDSF9CQ01fTU9CSUxFCiAKIGNvbmZpZyBBUkNIX0JDTV9NT0JJTEVfU01QCi0JYm9vbCAiQnJvYWRjb20gbW9iaWxlIFNvQyBTTVAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NCkgJiYgU01QCi0JZGVmYXVsdCB5CisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9CQ01fTU9CSUxFCiAJc2VsZWN0IEhBVkVfQVJNX1NDVQogCXNlbGVjdCBBUk1fRVJSQVRBXzc2NDM2OQogCWhlbHAKQEAgLTYxLDkgKzEwNSw3IEBACiAJICBQcm92aWRlZCBhcyBhbiBvcHRpb24gc28gU01QIHN1cHBvcnQgZm9yIFNvQ3Mgb2YgdGhpcyB0eXBlCiAJICBjYW4gYmUgZGlzYWJsZWQgZm9yIGFuIFNNUC1lbmFibGVkIGtlcm5lbC4KIAotZW5kbWVudQotCi1lbmRpZgorY29tbWVudCAiT3RoZXIgQXJjaGl0ZWN0dXJlcyIKIAogY29uZmlnIEFSQ0hfQkNNMjgzNQogCWJvb2wgIkJyb2FkY29tIEJDTTI4MzUgZmFtaWx5IiBpZiBBUkNIX01VTFRJX1Y2CkBAIC03OCwyNyArMTIwLDYgQEAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQnJvYWRjb20gQkNNMjgzNSBTb0MuIFRoaXMgU29DIGlzCiAJICB1c2VkIGluIHRoZSBSYXNwYmVycnkgUGkgYW5kIFJva3UgMiBkZXZpY2VzLgogCi1jb25maWcgQVJDSF9CQ01fNTMwMVgKLQlib29sICJCcm9hZGNvbSBCQ000NzBYIC8gQkNNNTMwMVggQVJNIFNvQyIgaWYgQVJDSF9NVUxUSV9WNwotCXNlbGVjdCBBUk1fR0lDCi0Jc2VsZWN0IENBQ0hFX0wyWDAKLQlzZWxlY3QgSEFWRV9BUk1fU0NVIGlmIFNNUAotCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgU01QCi0Jc2VsZWN0IEFSTV9HTE9CQUxfVElNRVIKLQlzZWxlY3QgQ0xLU1JDX0FSTV9HTE9CQUxfVElNRVJfU0NIRURfQ0xPQ0sKLQloZWxwCi0JICBTdXBwb3J0IGZvciBCcm9hZGNvbSBCQ000NzBYIGFuZCBCQ001MzAxWCBTb0NzIHdpdGggQVJNIENQVSBjb3Jlcy4KLQotCSAgVGhpcyBpcyBhIG5ldHdvcmsgU29DIGxpbmUgbW9zdGx5IHVzZWQgaW4gaG9tZSByb3V0ZXJzIGFuZAotCSAgd2lmaSBhY2Nlc3MgcG9pbnRzLCBpdCdzIGludGVybmFsIG5hbWUgaXMgTm9ydGhzdGFyLgotCSAgVGhpcyBpbmNsdXNlZCB0aGUgZm9sbG93aW5nIFNvQzogQkNNNTMwMTAsIEJDTTUzMDExLCBCQ001MzAxMiwKLQkgIEJDTTUzMDE0LCBCQ001MzAxNSwgQkNNNTMwMTYsIEJDTTUzMDE3LCBCQ001MzAxOCwgQkNNNDcwNywKLQkgIEJDTTQ3MDggYW5kIEJDTTQ3MDkuCi0KLQkgIERvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgQkNNNDc2MCB3aGljaCBpcyBhIHRvdGFsbHkKLQkgIGRpZmZlcmVudCBTb0Mgb3Igd2l0aCB0aGUgb2xkZXIgQkNNNDdYWCBhbmQgQkNNNTNYWCBiYXNlZAotCSAgbmV0d29yayBTb0MgdXNpbmcgYSBNSVBTIENQVSwgdGhleSBhcmUgc3VwcG9ydGVkIGJ5IGFyY2gvbWlwcy9iY200N3h4Ci0KIGNvbmZpZyBBUkNIX0JDTV82M1hYCiAJYm9vbCAiQnJvYWRjb20gQkNNNjN4eCBEU0wgU29DIiBpZiBBUkNIX01VTFRJX1Y3CiAJZGVwZW5kcyBvbiBNTVUKQEAgLTExOCwxMyArMTM5LDExIEBACiAKIGNvbmZpZyBBUkNIX0JSQ01TVEIKIAlib29sICJCcm9hZGNvbSBCQ003WFhYIGJhc2VkIGJvYXJkcyIgaWYgQVJDSF9NVUxUSV9WNwotCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IEFSTV9HSUMKLQlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKLQlzZWxlY3QgSEFWRV9TTVAKIAlzZWxlY3QgSEFWRV9BUk1fQVJDSF9USU1FUgogCXNlbGVjdCBCUkNNU1RCX0dJU0JfQVJCCiAJc2VsZWN0IEJSQ01TVEJfTDJfSVJRCisJc2VsZWN0IEJDTTcxMjBfTDJfSVJRCiAJaGVscAogCSAgU2F5IFkgaWYgeW91IGludGVuZCB0byBydW4gdGhlIGtlcm5lbCBvbiBhIEJyb2FkY29tIEFSTS1iYXNlZCBTVEIKIAkgIGNoaXBzZXQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYmNtL01ha2VmaWxlCmluZGV4IDMwMGFlNGIuLjRjMzg2NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw5IEBACiAjIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAorIyBDeWdudXMKK29iai0kKENPTkZJR19BUkNIX0JDTV9DWUdOVVMpICs9ICBiY21fY3lnbnVzLm8KKwogIyBCQ00yODFYWAogb2JqLSQoQ09ORklHX0FSQ0hfQkNNXzI4MVhYKQkrPSBib2FyZF9iY20yODF4eC5vCiAKQEAgLTM4LDUgKzQxLDcgQEAKIG9iai0kKENPTkZJR19BUkNIX0JDTV82M1hYKQk6PSBiY202M3h4Lm8KIAogaWZlcSAoJChDT05GSUdfQVJDSF9CUkNNU1RCKSx5KQorQ0ZMQUdTX3BsYXRzbXAtYnJjbXN0Yi5vCSs9IC1tYXJjaD1hcm12Ny1hCiBvYmoteQkJCQkrPSBicmNtc3RiLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBoZWFkc21wLWJyY21zdGIubyBwbGF0c21wLWJyY21zdGIubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtL2JjbV9jeWdudXMuYyBiL2FyY2gvYXJtL21hY2gtYmNtL2JjbV9jeWdudXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGRjNThiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vYmNtX2N5Z251cy5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitzdGF0aWMgY29uc3QgY2hhciBjb25zdCAqYmNtX2N5Z251c19kdF9jb21wYXRbXSA9IHsKKwkiYnJjbSxjeWdudXMiLAorCU5VTEwsCit9OworCitEVF9NQUNISU5FX1NUQVJUKEJDTV9DWUdOVVNfRFQsICJCcm9hZGNvbSBDeWdudXMgU29DIikKKwkubDJjX2F1eF92YWwJPSAwLAorCS5sMmNfYXV4X21hc2sJPSB+MCwKKwkuZHRfY29tcGF0ID0gYmNtX2N5Z251c19kdF9jb21wYXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vYnJjbXN0Yi5oIGIvYXJjaC9hcm0vbWFjaC1iY20vYnJjbXN0Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGMzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbS9icmNtc3RiLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JSQ01TVEJfSF9fCisjZGVmaW5lIF9fQlJDTVNUQl9IX18KKwordm9pZCBicmNtc3RiX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOworCisjZW5kaWYgLyogX19CUkNNU1RCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vaGVhZHNtcC1icmNtc3RiLlMgYi9hcmNoL2FybS9tYWNoLWJjbS9oZWFkc21wLWJyY21zdGIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTljMWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vaGVhZHNtcC1icmNtc3RiLlMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIFNNUCBib290IGNvZGUgZm9yIHNlY29uZGFyeSBDUFVzCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXRlZ3JhL2hlYWRzbXAuUworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOVklESUEsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisgICAgICAgIC5zZWN0aW9uICIudGV4dC5oZWFkIiwgImF4IgorCitFTlRSWShicmNtc3RiX3NlY29uZGFyeV9zdGFydHVwKQorICAgICAgICAvKgorICAgICAgICAgKiBFbnN1cmUgQ1BVIGlzIGluIGEgc2FuZSBzdGF0ZSBieSBkaXNhYmxpbmcgYWxsIElSUXMgYW5kIHN3aXRjaGluZworICAgICAgICAgKiBpbnRvIFNWQyBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0bW9kZQlQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERSwgcjAKKworICAgICAgICBibCAgICAgIHY3X2ludmFsaWRhdGVfbDEKKyAgICAgICAgYiAgICAgICBzZWNvbmRhcnlfc3RhcnR1cAorRU5EUFJPQyhicmNtc3RiX3NlY29uZGFyeV9zdGFydHVwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vcGxhdHNtcC1icmNtc3RiLmMgYi9hcmNoL2FybS9tYWNoLWJjbS9wbGF0c21wLWJyY21zdGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWM4N2EyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vcGxhdHNtcC1icmNtc3RiLmMKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisgKiBCcm9hZGNvbSBTVEIgQ1BVIFNNUCBhbmQgaG90cGx1ZyBzdXBwb3J0IGZvciBBUk0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3AxNS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CisKKyNpbmNsdWRlICJicmNtc3RiLmgiCisKK2VudW0geworCVpPTkVfTUFOX0NMS0VOX01BU0sJCT0gQklUKDApLAorCVpPTkVfTUFOX1JFU0VUX0NOVExfTUFTSwk9IEJJVCgxKSwKKwlaT05FX01BTl9NRU1fUFdSX01BU0sJCT0gQklUKDQpLAorCVpPTkVfUkVTRVJWRURfMV9NQVNLCQk9IEJJVCg1KSwKKwlaT05FX01BTl9JU09fQ05UTF9NQVNLCQk9IEJJVCg2KSwKKwlaT05FX01BTlVBTF9DT05UUk9MX01BU0sJPSBCSVQoNyksCisJWk9ORV9QV1JfRE5fUkVRX01BU0sJCT0gQklUKDkpLAorCVpPTkVfUFdSX1VQX1JFUV9NQVNLCQk9IEJJVCgxMCksCisJWk9ORV9CTEtfUlNUX0FTU0VSVF9NQVNLCT0gQklUKDEyKSwKKwlaT05FX1BXUl9PRkZfU1RBVEVfTUFTSwkJPSBCSVQoMjUpLAorCVpPTkVfUFdSX09OX1NUQVRFX01BU0sJCT0gQklUKDI2KSwKKwlaT05FX0RQR19QV1JfU1RBVEVfTUFTSwkJPSBCSVQoMjgpLAorCVpPTkVfTUVNX1BXUl9TVEFURV9NQVNLCQk9IEJJVCgyOSksCisJWk9ORV9SRVNFVF9TVEFURV9NQVNLCQk9IEJJVCgzMSksCisJQ1BVMF9QV1JfWk9ORV9DVFJMX1JFRwkJPSAxLAorCUNQVV9SRVNFVF9DT05GSUdfUkVHCQk9IDIsCit9OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpjcHViaXVjdHJsX2Jsb2NrOworc3RhdGljIHZvaWQgX19pb21lbSAqaGlmX2NvbnRfYmxvY2s7CitzdGF0aWMgdTMyIGNwdTBfcHdyX3pvbmVfY3RybF9yZWc7CitzdGF0aWMgdTMyIGNwdV9yc3RfY2ZnX3JlZzsKK3N0YXRpYyB1MzIgaGlmX2NvbnRfcmVnOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisvKgorICogV2UgbXVzdCBxdWllc2NlIGEgZHlpbmcgQ1BVIGJlZm9yZSBpdCBjYW4gYmUga2lsbGVkIGJ5IHRoZSBib290IENQVS4gQmVjYXVzZQorICogb25lIG9yIG1vcmUgY2FjaGUgbWF5IGJlIGRpc2FibGVkLCB3ZSBtdXN0IGZsdXNoIHRvIGVuc3VyZSBjb2hlcmVuY3kuIFdlCisgKiBjYW5ub3QgdXNlIHRyYWRpdGlvbmwgY29tcGxldGlvbiBzdHJ1Y3R1cmVzIG9yIHNwaW5sb2NrcyBhcyB0aGV5IHJlbHkgb24KKyAqIGNvaGVyZW5jeS4KKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoaW50LCBwZXJfY3B1X3N3X3N0YXRlKTsKKworc3RhdGljIGludCBwZXJfY3B1X3N3X3N0YXRlX3JkKHUzMiBjcHUpCit7CisJc3luY19jYWNoZV9yKFNISUZUX1BFUkNQVV9QVFIoJnBlcl9jcHVfc3dfc3RhdGUsIHBlcl9jcHVfb2Zmc2V0KGNwdSkpKTsKKwlyZXR1cm4gcGVyX2NwdShwZXJfY3B1X3N3X3N0YXRlLCBjcHUpOworfQorCitzdGF0aWMgdm9pZCBwZXJfY3B1X3N3X3N0YXRlX3dyKHUzMiBjcHUsIGludCB2YWwpCit7CisJZG1iKCk7CisJcGVyX2NwdShwZXJfY3B1X3N3X3N0YXRlLCBjcHUpID0gdmFsOworCXN5bmNfY2FjaGVfdyhTSElGVF9QRVJDUFVfUFRSKCZwZXJfY3B1X3N3X3N0YXRlLCBwZXJfY3B1X29mZnNldChjcHUpKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBlcl9jcHVfc3dfc3RhdGVfd3IodTMyIGNwdSwgaW50IHZhbCkgeyB9CisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pb21lbSAqcHdyX2N0cmxfZ2V0X2Jhc2UodTMyIGNwdSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBjcHViaXVjdHJsX2Jsb2NrICsgY3B1MF9wd3Jfem9uZV9jdHJsX3JlZzsKKwliYXNlICs9IChjcHVfbG9naWNhbF9tYXAoY3B1KSAqIDQpOworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgdTMyIHB3cl9jdHJsX3JkKHUzMiBjcHUpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcHdyX2N0cmxfZ2V0X2Jhc2UoY3B1KTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChiYXNlKTsKK30KKworc3RhdGljIHZvaWQgcHdyX2N0cmxfd3IodTMyIGNwdSwgdTMyIHZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwd3JfY3RybF9nZXRfYmFzZShjcHUpOworCXdyaXRlbCh2YWwsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBjcHVfcnN0X2NmZ19zZXQodTMyIGNwdSwgaW50IHNldCkKK3sKKwl1MzIgdmFsOworCXZhbCA9IHJlYWRsX3JlbGF4ZWQoY3B1Yml1Y3RybF9ibG9jayArIGNwdV9yc3RfY2ZnX3JlZyk7CisJaWYgKHNldCkKKwkJdmFsIHw9IEJJVChjcHVfbG9naWNhbF9tYXAoY3B1KSk7CisJZWxzZQorCQl2YWwgJj0gfkJJVChjcHVfbG9naWNhbF9tYXAoY3B1KSk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBjcHViaXVjdHJsX2Jsb2NrICsgY3B1X3JzdF9jZmdfcmVnKTsKK30KKworc3RhdGljIHZvaWQgY3B1X3NldF9ib290X2FkZHIodTMyIGNwdSwgdW5zaWduZWQgbG9uZyBib290X2FkZHIpCit7CisJY29uc3QgaW50IHJlZ19vZnMgPSBjcHVfbG9naWNhbF9tYXAoY3B1KSAqIDg7CisJd3JpdGVsX3JlbGF4ZWQoMCwgaGlmX2NvbnRfYmxvY2sgKyBoaWZfY29udF9yZWcgKyByZWdfb2ZzKTsKKwl3cml0ZWxfcmVsYXhlZChib290X2FkZHIsIGhpZl9jb250X2Jsb2NrICsgaGlmX2NvbnRfcmVnICsgNCArIHJlZ19vZnMpOworfQorCitzdGF0aWMgdm9pZCBicmNtc3RiX2NwdV9ib290KHUzMiBjcHUpCit7CisJLyogTWFyayB0aGlzIENQVSBhcyAidXAiICovCisJcGVyX2NwdV9zd19zdGF0ZV93cihjcHUsIDEpOworCisJLyoKKwkgKiBTZXQgdGhlIHJlc2V0IHZlY3RvciB0byBwb2ludCB0byB0aGUgc2Vjb25kYXJ5X3N0YXJ0dXAKKwkgKiByb3V0aW5lCisJICovCisJY3B1X3NldF9ib290X2FkZHIoY3B1LCB2aXJ0X3RvX3BoeXMoYnJjbXN0Yl9zZWNvbmRhcnlfc3RhcnR1cCkpOworCisJLyogVW5oYWx0IHRoZSBjcHUgKi8KKwljcHVfcnN0X2NmZ19zZXQoY3B1LCAwKTsKK30KKworc3RhdGljIHZvaWQgYnJjbXN0Yl9jcHVfcG93ZXJfb24odTMyIGNwdSkKK3sKKwkvKgorCSAqIFRoZSBzZWNvbmRhcnkgY29yZXMgcG93ZXIgd2FzIGN1dCwgc28gd2UgbXVzdCBnbyB0aHJvdWdoCisJICogcG93ZXItb24gaW5pdGlhbGl6YXRpb24uCisJICovCisJdTMyIHRtcDsKKworCS8qIFJlcXVlc3Qgem9uZSBwb3dlciB1cCAqLworCXB3cl9jdHJsX3dyKGNwdSwgWk9ORV9QV1JfVVBfUkVRX01BU0spOworCisJLyogV2FpdCBmb3IgdGhlIHBvd2VyIHVwIEZTTSB0byBjb21wbGV0ZSAqLworCWRvIHsKKwkJdG1wID0gcHdyX2N0cmxfcmQoY3B1KTsKKwl9IHdoaWxlICghKHRtcCAmIFpPTkVfUFdSX09OX1NUQVRFX01BU0spKTsKK30KKworc3RhdGljIGludCBicmNtc3RiX2NwdV9nZXRfcG93ZXJfc3RhdGUodTMyIGNwdSkKK3sKKwlpbnQgdG1wID0gcHdyX2N0cmxfcmQoY3B1KTsKKwlyZXR1cm4gKHRtcCAmIFpPTkVfUkVTRVRfU1RBVEVfTUFTSykgPyAwIDogMTsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCitzdGF0aWMgdm9pZCBicmNtc3RiX2NwdV9kaWUodTMyIGNwdSkKK3sKKwl2N19leGl0X2NvaGVyZW5jeV9mbHVzaChhbGwpOworCisJcGVyX2NwdV9zd19zdGF0ZV93cihjcHUsIDApOworCisJLyogU2l0IGFuZCB3YWl0IHRvIGRpZSAqLworCXdmaSgpOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLi4uICovCisJd2hpbGUgKDEpCisJCTsKK30KKworc3RhdGljIGludCBicmNtc3RiX2NwdV9raWxsKHUzMiBjcHUpCit7CisJdTMyIHRtcDsKKworCXdoaWxlIChwZXJfY3B1X3N3X3N0YXRlX3JkKGNwdSkpCisJCTsKKworCS8qIFByb2dyYW0gem9uZSByZXNldCAqLworCXB3cl9jdHJsX3dyKGNwdSwgWk9ORV9SRVNFVF9TVEFURV9NQVNLIHwgWk9ORV9CTEtfUlNUX0FTU0VSVF9NQVNLIHwKKwkJCSAgICAgIFpPTkVfUFdSX0ROX1JFUV9NQVNLKTsKKworCS8qIFZlcmlmeSB6b25lIHJlc2V0ICovCisJdG1wID0gcHdyX2N0cmxfcmQoY3B1KTsKKwlpZiAoISh0bXAgJiBaT05FX1JFU0VUX1NUQVRFX01BU0spKQorCQlwcl9lcnIoIiVzOiBab25lIHJlc2V0IGJpdCBmb3IgQ1BVICVkIG5vdCBhc3NlcnRlZCFcbiIsCisJCQlfX2Z1bmNfXywgY3B1KTsKKworCS8qIFdhaXQgZm9yIHBvd2VyIGRvd24gKi8KKwlkbyB7CisJCXRtcCA9IHB3cl9jdHJsX3JkKGNwdSk7CisJfSB3aGlsZSAoISh0bXAgJiBaT05FX1BXUl9PRkZfU1RBVEVfTUFTSykpOworCisJLyogRmx1c2ggcGlwZWxpbmUgYmVmb3JlIHJlc2V0dGluZyBDUFUgKi8KKwltYigpOworCisJLyogQXNzZXJ0IHJlc2V0IG9uIHRoZSBDUFUgKi8KKwljcHVfcnN0X2NmZ19zZXQoY3B1LCAxKTsKKworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2hpZmNwdWJpdWN0cmxfcmVncyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWludCByYyA9IDA7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN5c2Nvbl9ucCA9IE5VTEw7CisKKwluYW1lID0gInN5c2Nvbi1jcHUiOworCisJc3lzY29uX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgbmFtZSwgMCk7CisJaWYgKCFzeXNjb25fbnApIHsKKwkJcHJfZXJyKCJjYW4ndCBmaW5kIHBoYW5kbGUgJXNcbiIsIG5hbWUpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwljcHViaXVjdHJsX2Jsb2NrID0gb2ZfaW9tYXAoc3lzY29uX25wLCAwKTsKKwlpZiAoIWNwdWJpdWN0cmxfYmxvY2spIHsKKwkJcHJfZXJyKCJpb21hcCBmYWlsZWQgZm9yIGNwdWJpdWN0cmxfYmxvY2tcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCBuYW1lLCBDUFUwX1BXUl9aT05FX0NUUkxfUkVHLAorCQkJCQkmY3B1MF9wd3Jfem9uZV9jdHJsX3JlZyk7CisJaWYgKHJjKSB7CisJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgMXN0IGVudHJ5IGZyb20gJXMgcHJvcGVydHkgKCVkKVxuIiwgbmFtZSwKKwkJCXJjKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgbmFtZSwgQ1BVX1JFU0VUX0NPTkZJR19SRUcsCisJCQkJCSZjcHVfcnN0X2NmZ19yZWcpOworCWlmIChyYykgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIDJuZCBlbnRyeSBmcm9tICVzIHByb3BlcnR5ICglZClcbiIsIG5hbWUsCisJCQlyYyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBjbGVhbnVwOworCX0KKworY2xlYW51cDoKKwlvZl9ub2RlX3B1dChzeXNjb25fbnApOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfaGlmY29udF9yZWdzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IHJjID0gMDsKKwljaGFyICpuYW1lOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3lzY29uX25wID0gTlVMTDsKKworCW5hbWUgPSAic3lzY29uLWNvbnQiOworCisJc3lzY29uX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgbmFtZSwgMCk7CisJaWYgKCFzeXNjb25fbnApIHsKKwkJcHJfZXJyKCJjYW4ndCBmaW5kIHBoYW5kbGUgJXNcbiIsIG5hbWUpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwloaWZfY29udF9ibG9jayA9IG9mX2lvbWFwKHN5c2Nvbl9ucCwgMCk7CisJaWYgKCFoaWZfY29udF9ibG9jaykgeworCQlwcl9lcnIoImlvbWFwIGZhaWxlZCBmb3IgaGlmX2NvbnRfYmxvY2tcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBPZmZzZXQgaXMgYXQgdG9wIG9mIGhpZl9jb250X2Jsb2NrICovCisJaGlmX2NvbnRfcmVnID0gMDsKKworY2xlYW51cDoKKwlvZl9ub2RlX3B1dChzeXNjb25fbnApOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGJyY21zdGJfY3B1X2N0cmxfc2V0dXAodW5zaWduZWQgaW50IG1heF9jcHVzKQoreworCWludCByYzsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWNoYXIgKm5hbWU7CisKKwluYW1lID0gImJyY20sYnJjbXN0Yi1zbXBib290IjsKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsIG5hbWUpOworCWlmICghbnApIHsKKwkJcHJfZXJyKCJjYW4ndCBmaW5kIGNvbXBhdGlibGUgbm9kZSAlc1xuIiwgbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlyYyA9IHNldHVwX2hpZmNwdWJpdWN0cmxfcmVncyhucCk7CisJaWYgKHJjKQorCQlyZXR1cm47CisKKwlyYyA9IHNldHVwX2hpZmNvbnRfcmVncyhucCk7CisJaWYgKHJjKQorCQlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgYnJjbXN0Yl9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCit7CisJLyogTWlzc2luZyB0aGUgYnJjbSxicmNtc3RiLXNtcGJvb3QgRFQgbm9kZT8gKi8KKwlpZiAoIWNwdWJpdWN0cmxfYmxvY2sgfHwgIWhpZl9jb250X2Jsb2NrKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEJyaW5nIHVwIHBvd2VyIHRvIHRoZSBjb3JlIGlmIG5lY2Vzc2FyeSAqLworCWlmIChicmNtc3RiX2NwdV9nZXRfcG93ZXJfc3RhdGUoY3B1KSA9PSAwKQorCQlicmNtc3RiX2NwdV9wb3dlcl9vbihjcHUpOworCisJYnJjbXN0Yl9jcHVfYm9vdChjcHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgYnJjbXN0Yl9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CisJLnNtcF9wcmVwYXJlX2NwdXMJPSBicmNtc3RiX2NwdV9jdHJsX3NldHVwLAorCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSBicmNtc3RiX2Jvb3Rfc2Vjb25kYXJ5LAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCS5jcHVfa2lsbAkJPSBicmNtc3RiX2NwdV9raWxsLAorCS5jcHVfZGllCQk9IGJyY21zdGJfY3B1X2RpZSwKKyNlbmRpZgorfTsKKworQ1BVX01FVEhPRF9PRl9ERUNMQVJFKGJyY21zdGJfc21wLCAiYnJjbSxicmFobWEtYjE1IiwgJmJyY21zdGJfc21wX29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJlcmxpbi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1iZXJsaW4vS2NvbmZpZwppbmRleCAyNGY4NWJlLi4zZTQwYTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJlcmxpbi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYmVybGluL0tjb25maWcKQEAgLTEsMTAgKzEsMTEgQEAKIG1lbnVjb25maWcgQVJDSF9CRVJMSU4KIAlib29sICJNYXJ2ZWxsIEJlcmxpbiBTb0NzIiBpZiBBUkNIX01VTFRJX1Y3CisJc2VsZWN0IEFSQ0hfSEFTX1JFU0VUX0NPTlRST0xMRVIKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgQVJNX0dJQwotCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IERXX0FQQl9JQ1RMCiAJc2VsZWN0IERXX0FQQl9USU1FUl9PRgorCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IFBJTkNUUkwKIAogaWYgQVJDSF9CRVJMSU4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYwppbmRleCA1NjIzMTMxLi5mOGY2MmZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4MzAtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODMwLWV2bS5jCkBAIC04MCw4ICs4MCw4IEBACiAJCQkJICAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCQkgICAgIk9IQ0kgb3Zlci1jdXJyZW50IGluZGljYXRvciIsIE5VTEwpOwogCQlpZiAoZXJyb3IpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgcmVxdWVzdCBJUlEgdG8gd2F0Y2ggIgotCQkJICAgICAgICJvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZXNcbiIsIF9fZnVuY19fKTsKKwkJCXByX2VycigiJXM6IGNvdWxkIG5vdCByZXF1ZXN0IElSUSB0byB3YXRjaCBvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZXNcbiIsCisJCQkgICAgICAgX19mdW5jX18pOwogCX0gZWxzZQogCQlmcmVlX2lycShpcnEsIE5VTEwpOwogCkBAIC0xNDUsOCArMTQ1LDcgQEAKIAkvKiBVU0JfUkVGQ0xLSU4gaXMgbm90IHVzZWQuICovCiAJcmV0ID0gZGF2aW5jaV9jZmdfcmVnKERBODMwX1VTQjBfRFJWVkJVUyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiJXM6IFVTQiAyLjAgUGluTXV4IHNldHVwIGZhaWxlZDogJWRcbiIsCi0JCQkgICBfX2Z1bmNfXywgcmV0KTsKKwkJcHJfd2FybigiJXM6IFVTQiAyLjAgUGluTXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCWVsc2UgewogCQkvKgogCQkgKiBUUFMyMDY1IHN3aXRjaCBAIDVWIHN1cHBsaWVzIDEgQSAoc3VzdGFpbnMgMS41IEEpLApAQCAtMTU0LDM3ICsxNTMsMzUgQEAKIAkJICovCiAJCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3VzYjIwKDEwMDAsIDMpOwogCQlpZiAocmV0KQotCQkJcHJfd2FybmluZygiJXM6IFVTQiAyLjAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQkJICAgX19mdW5jX18sIHJldCk7CisJCQlwcl93YXJuKCIlczogVVNCIDIuMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKIAl9CiAKIAlyZXQgPSBkYXZpbmNpX2NmZ19yZWdfbGlzdChkYTgzMF9ldm1fdXNiMTFfcGlucyk7CiAJaWYgKHJldCkgewotCQlwcl93YXJuaW5nKCIlczogVVNCIDEuMSBQaW5NdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKLQkJCSAgIF9fZnVuY19fLCByZXQpOworCQlwcl93YXJuKCIlczogVVNCIDEuMSBQaW5NdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAJCXJldHVybjsKIAl9CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoT05fQkRfVVNCX0RSViwgIk9OX0JEX1VTQl9EUlYiKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIFVTQiAxLjEgcG9ydCAiCi0JCSAgICAgICAicG93ZXIgY29udHJvbDogJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBVU0IgMS4xIHBvcnQgcG93ZXIgY29udHJvbDogJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKIAkJcmV0dXJuOwogCX0KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT05fQkRfVVNCX0RSViwgMCk7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoT05fQkRfVVNCX09WQywgIk9OX0JEX1VTQl9PVkMiKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIFVTQiAxLjEgcG9ydCAiCi0JCSAgICAgICAib3Zlci1jdXJyZW50IGluZGljYXRvcjogJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBVU0IgMS4xIHBvcnQgb3Zlci1jdXJyZW50IGluZGljYXRvcjogJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKIAkJcmV0dXJuOwogCX0KIAlncGlvX2RpcmVjdGlvbl9pbnB1dChPTl9CRF9VU0JfT1ZDKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3VzYjExKCZkYTgzMF9ldm1fdXNiMTFfcGRhdGEpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoIiVzOiBVU0IgMS4xIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJICAgX19mdW5jX18sIHJldCk7CisJCXByX3dhcm4oIiVzOiBVU0IgMS4xIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIH0KIAogc3RhdGljIGNvbnN0IHNob3J0IGRhODMwX2V2bV9tY2FzcDFfcGluc1tdID0gewpAQCAtMjUyLDMxICsyNDksMjkgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2V2bV9tbWNfc2RfcGlucyk7CiAJaWYgKHJldCkgewotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogbW1jL3NkIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBtbWMvc2QgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCQlyZXR1cm47CiAJfQogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KERBODMwX01NQ1NEX1dQX1BJTiwgIk1NQyBXUCIpOwogCWlmIChyZXQpIHsKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAotCQkJICAgREE4MzBfTU1DU0RfV1BfUElOKTsKKwkJcHJfd2FybigiJXM6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAorCQkJX19mdW5jX18sIERBODMwX01NQ1NEX1dQX1BJTik7CiAJCXJldHVybjsKIAl9CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoREE4MzBfTU1DU0RfV1BfUElOKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChEQTgzMF9NTUNTRF9DRF9QSU4sICJNTUMgQ0RcbiIpOwogCWlmIChyZXQpIHsKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAotCQkJICAgREE4MzBfTU1DU0RfQ0RfUElOKTsKKwkJcHJfd2FybigiJXM6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAorCQkJX19mdW5jX18sIERBODMwX01NQ1NEX0NEX1BJTik7CiAJCXJldHVybjsKIAl9CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoREE4MzBfTU1DU0RfQ0RfUElOKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX21tY3NkMCgmZGE4MzBfZXZtX21tY19jb25maWcpOwogCWlmIChyZXQpIHsKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IG1tYy9zZCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogbW1jL3NkIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAkJZ3Bpb19mcmVlKERBODMwX01NQ1NEX1dQX1BJTik7CiAJfQogfQpAQCAtNDA0LDIzICszOTksMjEgQEAKIAlpbnQgcmV0OwogCiAJaWYgKEhBU19NTUMpIHsKLQkJcHJfd2FybmluZygiV0FSTklORzogYm90aCBNTUMvU0QgYW5kIE5BTkQgYXJlICIKLQkJCQkiZW5hYmxlZCwgYnV0IHRoZXkgc2hhcmUgQUVNSUYgcGlucy5cbiIKLQkJCQkiXHREaXNhYmxlIE1NQy9TRCBmb3IgTkFORCBzdXBwb3J0LlxuIik7CisJCXByX3dhcm4oIldBUk5JTkc6IGJvdGggTU1DL1NEIGFuZCBOQU5EIGFyZSBlbmFibGVkLCBidXQgdGhleSBzaGFyZSBBRU1JRiBwaW5zXG4iCisJCQkiXHREaXNhYmxlIE1NQy9TRCBmb3IgTkFORCBzdXBwb3J0XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2V2bV9lbWlmMjVfcGlucyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGVtaWYyNSBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogZW1pZjI1IG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGE4MzBfZXZtX25hbmRfZGV2aWNlKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogTkFORCBkZXZpY2Ugbm90IHJlZ2lzdGVyZWQuXG4iKTsKKwkJcHJfd2FybigiJXM6IE5BTkQgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZGF2aW5jaV9hZW1pZl9zZXR1cCgmZGE4MzBfZXZtX25hbmRfZGV2aWNlKSkKLQkJcHJfd2FybigiJXM6IENhbm5vdCBjb25maWd1cmUgQUVNSUYuXG4iLCBfX2Z1bmNfXyk7CisJCXByX3dhcm4oIiVzOiBDYW5ub3QgY29uZmlndXJlIEFFTUlGXG4iLCBfX2Z1bmNfXyk7CiAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQobXV4X21vZGUsIDEpOwogfQpAQCAtNDM1LDEyICs0MjgsMTEgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2xjZGNudGxfcGlucyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGxjZGNudGwgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsCi0JCQkJcmV0KTsKKwkJcHJfd2FybigiJXM6IGxjZGNudGwgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfbGNkYygmc2hhcnBfbGNkMDM1cTNkZzAxX3BkYXRhKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogbGNkIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oIiVzOiBsY2Qgc2V0dXAgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQobXV4X21vZGUsIDApOwogfQpAQCAtNTk4LDIyICs1OTAsMTkgQEAKIAogCXJldCA9IGRhODMwX3JlZ2lzdGVyX2dwaW8oKTsKIAlpZiAocmV0KQotCQlwcl93YXJuKCJkYTgzMF9ldm1faW5pdDogR1BJTyBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oIiVzOiBHUElPIGluaXQgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlyZXQgPSBkYTgzMF9yZWdpc3Rlcl9lZG1hKGRhODMwX2VkbWFfcnN2KTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlyZXQgPSBkYXZpbmNpX2NmZ19yZWdfbGlzdChkYTgzMF9pMmMwX3BpbnMpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODMwX2V2bV9pbml0OiBpMmMwIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBpMmMwIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX2kyYygwLCAmZGE4MzBfZXZtX2kyY18wX3BkYXRhKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogaTJjMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogaTJjMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlkYTgzMF9ldm1fdXNiX2luaXQoKTsKIApAQCAtNjIyLDE4ICs2MTEsMTYgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2NwZ21hY19waW5zKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogY3BnbWFjIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBjcGdtYWMgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfZW1hYygpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODMwX2V2bV9pbml0OiBlbWFjIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBlbWFjIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3dhdGNoZG9nKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IHdhdGNoZG9nIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiB3YXRjaGRvZyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCiAJZGF2aW5jaV9zZXJpYWxfaW5pdChkYTh4eF9zZXJpYWxfZGV2aWNlKTsKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBkYTgzMF9ldm1faTJjX2RldmljZXMsCkBAIC02NDEsOCArNjI4LDcgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2V2bV9tY2FzcDFfcGlucyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IG1jYXNwMSBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogbWNhc3AxIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCWRhOHh4X3JlZ2lzdGVyX21jYXNwKDEsICZkYTgzMF9ldm1fc25kX2RhdGEpOwogCkBAIC02NTAsMTggKzYzNiwxNyBAQAogCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfcnRjKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IHJ0YyBzZXR1cCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwcl93YXJuKCIlczogcnRjIHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGE4MzBldm1fc3BpX2luZm8sCiAJCQkJICAgICAgQVJSQVlfU0laRShkYTgzMGV2bV9zcGlfaW5mbykpOwogCWlmIChyZXQpCi0JCXByX3dhcm4oIiVzOiBzcGkgaW5mbyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sCi0JCQlyZXQpOworCQlwcl93YXJuKCIlczogc3BpIGluZm8gcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3NwaV9idXMoMCwgQVJSQVlfU0laRShkYTgzMGV2bV9zcGlfaW5mbykpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODMwX2V2bV9pbml0OiBzcGkgMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCSAgIHJldCk7CisJCXByX3dhcm4oIiVzOiBzcGkgMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCmluZGV4IGZhMTE0MTUuLjZiNWE5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKQEAgLTQ1Miw4ICs0NTIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBEQTg1MF9OX1VJX1BCOyBpKyspIHsKIAkJYnV0dG9uID0gJmRhODUwX2V2bV91aV9rZXlzW2ldOwogCQlidXR0b24tPmNvZGUgPSBLRVlfRjggLSBpOwotCQlidXR0b24tPmRlc2MgPSAoY2hhciAqKQotCQkJCWRhODUwX2V2bV91aV9leHBbREE4NTBfRVZNX1VJX0VYUF9QQjggKyBpXTsKKwkJYnV0dG9uLT5kZXNjID0gZGE4NTBfZXZtX3VpX2V4cFtEQTg1MF9FVk1fVUlfRVhQX1BCOCArIGldOwogCQlidXR0b24tPmdwaW8gPSBncGlvICsgREE4NTBfRVZNX1VJX0VYUF9QQjggKyBpOwogCX0KIH0KQEAgLTYyOCwxNSArNjI3LDEzIEBACiAJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbjsKIAogCWJ1dHRvbiA9ICZkYTg1MF9ldm1fYmJfa2V5c1swXTsKLQlidXR0b24tPmRlc2MgPSAoY2hhciAqKQotCQlkYTg1MF9ldm1fYmJfZXhwW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9QQjFdOworCWJ1dHRvbi0+ZGVzYyA9IGRhODUwX2V2bV9iYl9leHBbREE4NTBfRVZNX0JCX0VYUF9VU0VSX1BCMV07CiAJYnV0dG9uLT5ncGlvID0gZ3BpbyArIERBODUwX0VWTV9CQl9FWFBfVVNFUl9QQjE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgREE4NTBfTl9CQl9VU0VSX1NXOyBpKyspIHsKIAkJYnV0dG9uID0gJmRhODUwX2V2bV9iYl9rZXlzW2kgKyAxXTsKIAkJYnV0dG9uLT5jb2RlID0gU1dfTElEICsgaTsKLQkJYnV0dG9uLT5kZXNjID0gKGNoYXIgKikKLQkJCQlkYTg1MF9ldm1fYmJfZXhwW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzEgKyBpXTsKKwkJYnV0dG9uLT5kZXNjID0gZGE4NTBfZXZtX2JiX2V4cFtEQTg1MF9FVk1fQkJfRVhQX1VTRVJfU1cxICsgaV07CiAJCWJ1dHRvbi0+Z3BpbyA9IGdwaW8gKyBEQTg1MF9FVk1fQkJfRVhQX1VTRVJfU1cxICsgaTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ0eC1ldm0uYwppbmRleCBlNTgzZTU4Li4xYTA4OThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NHgtZXZtLmMKQEAgLTc2Nyw5ICs3NjcsOCBAQAogCiAJaWYgKEhBU19BVEEpIHsKIAkJaWYgKEhBU19OQU5EIHx8IEhBU19OT1IpCi0JCQlwcl93YXJuaW5nKCJXQVJOSU5HOiBib3RoIElERSBhbmQgRmxhc2ggYXJlICIKLQkJCQkiZW5hYmxlZCwgYnV0IHRoZXkgc2hhcmUgQUVNSUYgcGlucy5cbiIKLQkJCQkiXHREaXNhYmxlIElERSBmb3IgTkFORC9OT1Igc3VwcG9ydC5cbiIpOworCQkJcHJfd2FybigiV0FSTklORzogYm90aCBJREUgYW5kIEZsYXNoIGFyZSBlbmFibGVkLCBidXQgdGhleSBzaGFyZSBBRU1JRiBwaW5zXG4iCisJCQkJIlx0RGlzYWJsZSBJREUgZm9yIE5BTkQvTk9SIHN1cHBvcnRcbiIpOwogCQlkYXZpbmNpX2luaXRfaWRlKCk7CiAJfSBlbHNlIGlmIChIQVNfTkFORCB8fCBIQVNfTk9SKSB7CiAJCWRhdmluY2lfY2ZnX3JlZyhETTY0NFhfSFBJRU5fRElTQUJMRSk7CkBAIC03ODAsMTMgKzc3OSwxMiBAQAogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYXZpbmNpX2V2bV9uYW5kZmxhc2hfZGV2aWNlKTsKIAogCQkJaWYgKGRhdmluY2lfYWVtaWZfc2V0dXAoJmRhdmluY2lfZXZtX25hbmRmbGFzaF9kZXZpY2UpKQotCQkJCXByX3dhcm4oIiVzOiBDYW5ub3QgY29uZmlndXJlIEFFTUlGLlxuIiwKKwkJCQlwcl93YXJuKCIlczogQ2Fubm90IGNvbmZpZ3VyZSBBRU1JRlxuIiwKIAkJCQkJX19mdW5jX18pOwogCiAJCQlldm1fbGVkc1s3XS5kZWZhdWx0X3RyaWdnZXIgPSAibmFuZC1kaXNrIjsKIAkJCWlmIChIQVNfTk9SKQotCQkJCXByX3dhcm5pbmcoIldBUk5JTkc6IGJvdGggTkFORCBhbmQgTk9SIGZsYXNoICIKLQkJCQkJImFyZSBlbmFibGVkOyBkaXNhYmxlIG9uZSBvZiB0aGVtLlxuIik7CisJCQkJcHJfd2FybigiV0FSTklORzogYm90aCBOQU5EIGFuZCBOT1IgZmxhc2ggYXJlIGVuYWJsZWQ7IGRpc2FibGUgb25lIG9mIHRoZW0uXG4iKTsKIAkJfSBlbHNlIGlmIChIQVNfTk9SKQogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYXZpbmNpX2V2bV9ub3JmbGFzaF9kZXZpY2UpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYwppbmRleCA5NmZjMDBhLi44Y2ZiZmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbWl0eW9tYXBsMTM4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jCkBAIC04LDYgKzgsOCBAQAogICogYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgIk1pdHlPTUFQTDEzODogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CkBAIC0xMDcsNyArMTA5LDcgQEAKIAogCXJldCA9IGRhODUwX3JlZ2lzdGVyX2NwdWZyZXEoInBsbDBfc3lzY2xrMyIpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImNwdWZyZXEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oImNwdWZyZXEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiB9CiAjZWxzZQogc3RhdGljIHZvaWQgbWl0eW9tYXBsMTM4X2NwdWZyZXFfaW5pdChjb25zdCBjaGFyICpwYXJ0bnVtKSB7IH0KQEAgLTEyMSwzMyArMTIzLDMxIEBACiAKIAlyZXQgPSBhLT5yZWFkKGEsIChjaGFyICopJmZhY3RvcnlfY29uZmlnLCAwLCBzaXplb2YoZmFjdG9yeV9jb25maWcpKTsKIAlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgZmFjdG9yeV9jb25maWcpKSB7Ci0JCXByX3dhcm5pbmcoIk1pdHlPTUFQTDEzODogUmVhZCBGYWN0b3J5IENvbmZpZyBGYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIlJlYWQgRmFjdG9yeSBDb25maWcgRmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBiYWRfY29uZmlnOwogCX0KIAogCWlmIChmYWN0b3J5X2NvbmZpZy5tYWdpYyAhPSBGQUNUT1JZX0NPTkZJR19NQUdJQykgewotCQlwcl93YXJuaW5nKCJNaXR5T01BUEwxMzg6IEZhY3RvcnkgQ29uZmlnIE1hZ2ljIFdyb25nICglWClcbiIsCi0JCQkJZmFjdG9yeV9jb25maWcubWFnaWMpOworCQlwcl93YXJuKCJGYWN0b3J5IENvbmZpZyBNYWdpYyBXcm9uZyAoJVgpXG4iLAorCQkJZmFjdG9yeV9jb25maWcubWFnaWMpOwogCQlnb3RvIGJhZF9jb25maWc7CiAJfQogCiAJaWYgKGZhY3RvcnlfY29uZmlnLnZlcnNpb24gIT0gRkFDVE9SWV9DT05GSUdfVkVSU0lPTikgewotCQlwcl93YXJuaW5nKCJNaXR5T01BUEwxMzg6IEZhY3RvcnkgQ29uZmlnIFZlcnNpb24gV3JvbmcgKCVYKVxuIiwKLQkJCQlmYWN0b3J5X2NvbmZpZy52ZXJzaW9uKTsKKwkJcHJfd2FybigiRmFjdG9yeSBDb25maWcgVmVyc2lvbiBXcm9uZyAoJVgpXG4iLAorCQkJZmFjdG9yeV9jb25maWcudmVyc2lvbik7CiAJCWdvdG8gYmFkX2NvbmZpZzsKIAl9CiAKLQlwcl9pbmZvKCJNaXR5T01BUEwxMzg6IEZvdW5kIE1BQyA9ICVwTVxuIiwgZmFjdG9yeV9jb25maWcubWFjKTsKKwlwcl9pbmZvKCJGb3VuZCBNQUMgPSAlcE1cbiIsIGZhY3RvcnlfY29uZmlnLm1hYyk7CiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZmFjdG9yeV9jb25maWcubWFjKSkKIAkJbWVtY3B5KHNvY19pbmZvLT5lbWFjX3BkYXRhLT5tYWNfYWRkciwKIAkJCWZhY3RvcnlfY29uZmlnLm1hYywgRVRIX0FMRU4pOwogCWVsc2UKLQkJcHJfd2FybmluZygiTWl0eU9NQVBMMTM4OiBJbnZhbGlkIE1BQyBmb3VuZCAiCi0JCQkJImluIGZhY3RvcnkgY29uZmlnIGJsb2NrXG4iKTsKKwkJcHJfd2FybigiSW52YWxpZCBNQUMgZm91bmQgaW4gZmFjdG9yeSBjb25maWcgYmxvY2tcbiIpOwogCiAJcGFydG51bSA9IGZhY3RvcnlfY29uZmlnLnBhcnRudW07Ci0JcHJfaW5mbygiTWl0eU9NQVBMMTM4OiBQYXJ0IE51bWJlciA9ICVzXG4iLCBwYXJ0bnVtKTsKKwlwcl9pbmZvKCJQYXJ0IE51bWJlciA9ICVzXG4iLCBwYXJ0bnVtKTsKIAogYmFkX2NvbmZpZzoKIAkvKiBkZWZhdWx0IG1heGltdW0gc3BlZWQgaXMgdmFsaWQgZm9yIGFsbCBwbGF0Zm9ybXMgKi8KQEAgLTQzNSw3ICs0MzUsNyBAQAogCQkJCSBBUlJBWV9TSVpFKG1pdHlvbWFwbDEzOF9kZXZpY2VzKSk7CiAKIAlpZiAoZGF2aW5jaV9hZW1pZl9zZXR1cCgmbWl0eW9tYXBsMTM4X25hbmRmbGFzaF9kZXZpY2UpKQotCQlwcl93YXJuKCIlczogQ2Fubm90IGNvbmZpZ3VyZSBBRU1JRi5cbiIsIF9fZnVuY19fKTsKKwkJcHJfd2FybigiJXM6IENhbm5vdCBjb25maWd1cmUgQUVNSUZcbiIsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIGNvbnN0IHNob3J0IG1pdHlvbWFwX21paV9waW5zW10gPSB7CkBAIC00NzgsNyArNDc4LDcgQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCXByX3dhcm5pbmcoIm1paS9ybWlpIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwcl93YXJuKCJtaWkvcm1paSBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDg5LDcgKzQ4OSw3IEBACiAKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9lbWFjKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZW1hYyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiZW1hYyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBkYXZpbmNpX3BtX2NvbmZpZyBkYTg1MF9wbV9wZGF0YSA9IHsKQEAgLTUxMSwyMSArNTExLDIxIEBACiAJLyogZm9yIG5vdywgbm8gc3BlY2lhbCBFRE1BIGNoYW5uZWxzIGFyZSByZXNlcnZlZCAqLwogCXJldCA9IGRhODUwX3JlZ2lzdGVyX2VkbWEoTlVMTCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3dhdGNoZG9nKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygid2F0Y2hkb2cgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oIndhdGNoZG9nIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCiAJZGF2aW5jaV9zZXJpYWxfaW5pdChkYTh4eF9zZXJpYWxfZGV2aWNlKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX2kyYygwLCAmbWl0eW9tYXBfaTJjXzBfcGRhdGEpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImkyYzAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oImkyYzAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAlyZXQgPSBwbWljX3RwczY1MDIzX2luaXQoKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJUUFM2NTAyMyBQTUlDIGluaXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiVFBTNjUwMjMgUE1JQyBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAltaXR5b21hcGwxMzhfc2V0dXBfbmFuZCgpOwogCkBAIC01MzcsMjIgKzUzNywyMSBAQAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3NwaV9idXMoMSwKIAkJCQkgICAgIEFSUkFZX1NJWkUobWl0eW9tYXBsMTM4X3NwaV9mbGFzaF9pbmZvKSk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygic3BpIDEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oInNwaSAxIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCiAJbWl0eW9tYXBsMTM4X2NvbmZpZ19lbWFjKCk7CiAKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9ydGMoKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJydGMgc2V0dXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigicnRjIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9jcHVpZGxlKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiY3B1aWRsZSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiY3B1aWRsZSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAogCXJldCA9IGRhODUwX3JlZ2lzdGVyX3BtKCZkYTg1MF9wbV9kZXZpY2UpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODUwX2V2bV9pbml0OiBzdXNwZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oInN1c3BlbmQgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW5ldXJvcy1vc2QyLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYwppbmRleCBiYjY4MGFmLi44ZmNkY2Y4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYwpAQCAtMTgzLDkgKzE4Myw4IEBACiAKIAlpZiAoSEFTX0FUQSkgewogCQlpZiAoSEFTX05BTkQpCi0JCQlwcl93YXJuaW5nKCJXQVJOSU5HOiBib3RoIElERSBhbmQgRmxhc2ggYXJlICIKLQkJCQkiZW5hYmxlZCwgYnV0IHRoZXkgc2hhcmUgQUVNSUYgcGlucy5cbiIKLQkJCQkiXHREaXNhYmxlIElERSBmb3IgTkFORC9OT1Igc3VwcG9ydC5cbiIpOworCQkJcHJfd2FybigiV0FSTklORzogYm90aCBJREUgYW5kIEZsYXNoIGFyZSBlbmFibGVkLCBidXQgdGhleSBzaGFyZSBBRU1JRiBwaW5zXG4iCisJCQkJIlx0RGlzYWJsZSBJREUgZm9yIE5BTkQvTk9SIHN1cHBvcnRcbiIpOwogCQlkYXZpbmNpX2luaXRfaWRlKCk7CiAJfSBlbHNlIGlmIChIQVNfTkFORCkgewogCQlkYXZpbmNpX2NmZ19yZWcoRE02NDRYX0hQSUVOX0RJU0FCTEUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYwppbmRleCA5ODVlNWZkLi5jNzBiYjBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYwpAQCAtNTY0LDcgKzU2NCw3IEBACiAKIAlyZWZjbGsgPSBjbGtfZ2V0KE5VTEwsICJyZWYiKTsKIAlpZiAoSVNfRVJSKHJlZmNsaykpIHsKLQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGdldCByZWZlcmVuY2UgY2xvY2suXG4iLCBfX2Z1bmNfXyk7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBnZXQgcmVmZXJlbmNlIGNsb2NrXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBQVFJfRVJSKHJlZmNsayk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvbXV4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvbXV4LmMKaW5kZXggZjM0YThkYy4uYThlYjkwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9tdXguYwpAQCAtMTUsNiArMTUsOSBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cy4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC00Niw3ICs0OSw3IEBACiAJfQogCiAJaWYgKGluZGV4ID49IHNvY19pbmZvLT5waW5tdXhfcGluc19udW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIHBpbiBtdXggaW5kZXg6ICVsdSAoJWx1KVxuIiwKKwkJcHJfZXJyKCJJbnZhbGlkIHBpbiBtdXggaW5kZXg6ICVsdSAoJWx1KVxuIiwKIAkJICAgICAgIGluZGV4LCBzb2NfaW5mby0+cGlubXV4X3BpbnNfbnVtKTsKIAkJZHVtcF9zdGFjaygpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU1LDcgKzU4LDcgQEAKIAljZmcgPSAmc29jX2luZm8tPnBpbm11eF9waW5zW2luZGV4XTsKIAogCWlmIChjZmctPm5hbWUgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIk5vIGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIGluZGV4XG4iKTsKKwkJcHJfZXJyKCJObyBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBpbmRleFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODIsMTUgKzg1LDE1IEBACiAKIAlpZiAod2FybikgewogI2lmZGVmIENPTkZJR19EQVZJTkNJX01VWF9XQVJOSU5HUwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJNVVg6IGluaXRpYWxpemVkICVzXG4iLCBjZmctPm5hbWUpOworCQlwcl93YXJuKCJpbml0aWFsaXplZCAlc1xuIiwgY2ZnLT5uYW1lKTsKICNlbmRpZgogCX0KIAogI2lmZGVmIENPTkZJR19EQVZJTkNJX01VWF9ERUJVRwogCWlmIChjZmctPmRlYnVnIHx8IHdhcm4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTVVYOiBTZXR0aW5nIHJlZ2lzdGVyICVzXG4iLCBjZmctPm5hbWUpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIJICAgJXMgKDB4JTA4eCkgPSAweCUwOHggLT4gMHglMDh4XG4iLAotCQkgICAgICAgY2ZnLT5tdXhfcmVnX25hbWUsIGNmZy0+bXV4X3JlZywgcmVnX29yaWcsIHJlZyk7CisJCXByX3dhcm4oIlNldHRpbmcgcmVnaXN0ZXIgJXNcbiIsIGNmZy0+bmFtZSk7CisJCXByX3dhcm4oIiAgICVzICgweCUwOHgpID0gMHglMDh4IC0+IDB4JTA4eFxuIiwKKwkJCWNmZy0+bXV4X3JlZ19uYW1lLCBjZmctPm11eF9yZWcsIHJlZ19vcmlnLCByZWcpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RpbWUuYwppbmRleCAyNGFkMzBmLi4xNjBjOTYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS90aW1lLmMKQEAgLTM0Miw4ICszNDIsNiBAQAogCXN0cnVjdCBkYXZpbmNpX3NvY19pbmZvICpzb2NfaW5mbyA9ICZkYXZpbmNpX3NvY19pbmZvOwogCXVuc2lnbmVkIGludCBjbG9ja2V2ZW50X2lkOwogCXVuc2lnbmVkIGludCBjbG9ja3NvdXJjZV9pZDsKLQlzdGF0aWMgY2hhciBlcnJbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIKLQkJIiVzOiBjYW4ndCByZWdpc3RlciBjbG9ja3NvdXJjZSFcbiI7CiAJaW50IGk7CiAKIAljbG9ja2V2ZW50X2lkID0gc29jX2luZm8tPnRpbWVyX2luZm8tPmNsb2NrZXZlbnRfaWQ7CkBAIC0zNjQsMTIgKzM2MiwxMiBAQAogCiAJCS8qIE9ubHkgYm90dG9tIHRpbWVycyBjYW4gdXNlIGNvbXBhcmUgcmVncyAqLwogCQlpZiAoSVNfVElNRVJfVE9QKGNsb2NrZXZlbnRfaWQpKQotCQkJcHJfd2FybmluZygiZGF2aW5jaV90aW1lcl9pbml0OiBJbnZhbGlkIHVzZSIKLQkJCQkiIG9mIHN5c3RlbSB0aW1lcnMuICBSZXN1bHRzIHVucHJlZGljdGFibGUuXG4iKTsKKwkJCXByX3dhcm4oIiVzOiBJbnZhbGlkIHVzZSBvZiBzeXN0ZW0gdGltZXJzLiAgUmVzdWx0cyB1bnByZWRpY3RhYmxlLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCWVsc2UgaWYgKChkdGlwW2V2ZW50X3RpbWVyXS5jbXBfb2ZmID09IDApCiAJCQkJfHwgKGR0aXBbZXZlbnRfdGltZXJdLmNtcF9pcnEgPT0gMCkpCi0JCQlwcl93YXJuaW5nKCJkYXZpbmNpX3RpbWVyX2luaXQ6ICBJbnZhbGlkIHRpbWVyIGluc3RhbmNlIgotCQkJCSIgc2V0dXAuICBSZXN1bHRzIHVucHJlZGljdGFibGUuXG4iKTsKKwkJCXByX3dhcm4oIiVzOiBJbnZhbGlkIHRpbWVyIGluc3RhbmNlIHNldHVwLiAgUmVzdWx0cyB1bnByZWRpY3RhYmxlLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCWVsc2UgewogCQkJdGltZXJzW1RJRF9DTE9DS0VWRU5UXS5vcHRzIHw9IFRJTUVSX09QVFNfVVNFX0NPTVBBUkU7CiAJCQljbG9ja2V2ZW50X2RhdmluY2kuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOwpAQCAtMzg5LDcgKzM4Nyw4IEBACiAJY2xvY2tzb3VyY2VfZGF2aW5jaS5uYW1lID0gaWRfdG9fbmFtZVtjbG9ja3NvdXJjZV9pZF07CiAJaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9kYXZpbmNpLAogCQkJCSAgICBkYXZpbmNpX2Nsb2NrX3RpY2tfcmF0ZSkpCi0JCXByaW50ayhlcnIsIGNsb2Nrc291cmNlX2RhdmluY2kubmFtZSk7CisJCXByX2VycigiJXM6IGNhbid0IHJlZ2lzdGVyIGNsb2Nrc291cmNlIVxuIiwKKwkJICAgICAgIGNsb2Nrc291cmNlX2RhdmluY2kubmFtZSk7CiAKIAlzY2hlZF9jbG9ja19yZWdpc3RlcihkYXZpbmNpX3JlYWRfc2NoZWRfY2xvY2ssIDMyLAogCQkJICBkYXZpbmNpX2Nsb2NrX3RpY2tfcmF0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggMTFiYjA3OS4uNjk5NzU3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMjksOSArMjksOSBAQAogdTE2IF9fcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIHUzMiBfX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CiAKLXZvaWQgX193cml0ZWIodTggIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKLXZvaWQgX193cml0ZXcodTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKLXZvaWQgX193cml0ZWwodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgX193cml0ZWIodTggIHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgX193cml0ZXcodTE2IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgX193cml0ZWwodTMyIHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogLyoKICAqIEFyZ2gsIHNvbWVvbmUgZm9yZ290IHRoZSBJT0NTMTYgbGluZS4gIFdlIHRoZXJlZm9yZSBoYXZlIHRvIGhhbmRsZQpAQCAtNjIsMjAgKzYyLDMxIEBACiAjZGVmaW5lIHdyaXRldyh2LGIpCQlfX3dyaXRldyh2LGIpCiAjZGVmaW5lIHdyaXRlbCh2LGIpCQlfX3dyaXRlbCh2LGIpCiAKKyNkZWZpbmUgaW5zYiBpbnNiCiBleHRlcm4gdm9pZCBpbnNiKHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpidWYsIGludCBzeik7CisjZGVmaW5lIGluc3cgaW5zdwogZXh0ZXJuIHZvaWQgaW5zdyh1bnNpZ25lZCBpbnQgcG9ydCwgdm9pZCAqYnVmLCBpbnQgc3opOworI2RlZmluZSBpbnNsIGluc2wKIGV4dGVybiB2b2lkIGluc2wodW5zaWduZWQgaW50IHBvcnQsIHZvaWQgKmJ1ZiwgaW50IHN6KTsKIAorI2RlZmluZSBvdXRzYiBvdXRzYgogZXh0ZXJuIHZvaWQgb3V0c2IodW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHN6KTsKKyNkZWZpbmUgb3V0c3cgb3V0c3cKIGV4dGVybiB2b2lkIG91dHN3KHVuc2lnbmVkIGludCBwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBzeik7CisjZGVmaW5lIG91dHNsIG91dHNsCiBleHRlcm4gdm9pZCBvdXRzbCh1bnNpZ25lZCBpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgc3opOwogCiAvKiBjYW4ndCBzdXBwb3J0IHdyaXRlc2IgYXRtICovCi1leHRlcm4gdm9pZCB3cml0ZXN3KHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOwotZXh0ZXJuIHZvaWQgd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKKyNkZWZpbmUgd3JpdGVzdyB3cml0ZXN3CitleHRlcm4gdm9pZCB3cml0ZXN3KHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworI2RlZmluZSB3cml0ZXNsIHdyaXRlc2wKK2V4dGVybiB2b2lkIHdyaXRlc2wodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CiAKIC8qIGNhbid0IHN1cHBvcnQgcmVhZHNiIGF0bSAqLwotZXh0ZXJuIHZvaWQgcmVhZHN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOwotZXh0ZXJuIHZvaWQgcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOworI2RlZmluZSByZWFkc3cgcmVhZHN3CitleHRlcm4gdm9pZCByZWFkc3coY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7CisKKyNkZWZpbmUgcmVhZHNsIHJlYWRzbAorZXh0ZXJuIHZvaWQgcmVhZHNsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pby5jIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMKaW5kZXggNzU2Y2MzNy4uYjU3OTgwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogRVhQT1JUX1NZTUJPTChfX3JlYWR3KTsKIEVYUE9SVF9TWU1CT0woX19yZWFkbCk7CiAKLXZvaWQgcmVhZHN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3ZvaWQgcmVhZHN3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAKQEAgLTExMiw3ICsxMTIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChyZWFkc3cpOwogCi12b2lkIHJlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsZW4pCit2b2lkIHJlYWRzbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC0xMjIsNyArMTIyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocmVhZHNsKTsKIAotdm9pZCBfX3dyaXRlYih1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3ZvaWQgX193cml0ZWIodTggdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJX19yYXdfd3JpdGViKHZhbCwgYSk7CiB9CiAKLXZvaWQgX193cml0ZXcodTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQordm9pZCBfX3dyaXRldyh1MTYgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlfX3Jhd193cml0ZXcodmFsLCBhKTsKIH0KIAotdm9pZCBfX3dyaXRlbCh1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit2b2lkIF9fd3JpdGVsKHUzMiB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQAogRVhQT1JUX1NZTUJPTChfX3dyaXRldyk7CiBFWFBPUlRfU1lNQk9MKF9fd3JpdGVsKTsKIAotdm9pZCB3cml0ZXN3KHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKK3ZvaWQgd3JpdGVzdyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC0xNjcsNyArMTY3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wod3JpdGVzdyk7CiAKLXZvaWQgd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCit2b2lkIHdyaXRlc2wodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewogCXZvaWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZG1hLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEuYwppbmRleCBkOGJmZDAyLi44OGE0YzliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEuYwpAQCAtNjYsMTEgKzY2LDE1IEBACiAJLm51bV9jaGFubmVscwkJPSBBUlJBWV9TSVpFKGVwOTN4eF9kbWFfbTJwX2NoYW5uZWxzKSwKIH07CiAKK3N0YXRpYyB1NjQgZXA5M3h4X2RtYV9tMnBfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9kbWFfbTJwX2RldmljZSA9IHsKIAkubmFtZQkJCT0gImVwOTN4eC1kbWEtbTJwIiwKIAkuaWQJCQk9IC0xLAogCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZXA5M3h4X2RtYV9tMnBfZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmVwOTN4eF9kbWFfbTJwX2RhdGEsCisJCS5kbWFfbWFzawkJPSAmZXA5M3h4X2RtYV9tMnBfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKIAl9LAogfTsKIApAQCAtOTMsMTEgKzk3LDE1IEBACiAJLm51bV9jaGFubmVscwkJPSBBUlJBWV9TSVpFKGVwOTN4eF9kbWFfbTJtX2NoYW5uZWxzKSwKIH07CiAKK3N0YXRpYyB1NjQgZXA5M3h4X2RtYV9tMm1fbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9kbWFfbTJtX2RldmljZSA9IHsKIAkubmFtZQkJCT0gImVwOTN4eC1kbWEtbTJtIiwKIAkuaWQJCQk9IC0xLAogCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZXA5M3h4X2RtYV9tMm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmVwOTN4eF9kbWFfbTJtX2RhdGEsCisJCS5kbWFfbWFzawkJPSAmZXA5M3h4X2RtYV9tMm1fbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL0tjb25maWcKaW5kZXggMmQwMjQwZi4uYjllM2YxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9LY29uZmlnCkBAIC0yNCw2ICsyNCw3IEBACiAJc2VsZWN0IFBNX0dFTkVSSUNfRE9NQUlOUyBpZiBQTV9SVU5USU1FCiAJc2VsZWN0IFM1UF9ERVZfTUZDCiAJc2VsZWN0IFNSQU0KKwlzZWxlY3QgTUZEX1NZU0NPTgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFNBTVNVTkcgRVhZTk9TIFNvQ3MgKEVYWU5PUzQvNSkKIApAQCAtNzUsNiArNzYsMTEgQEAKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TNAogCitjb25maWcgU09DX0VYWU5PUzQ0MTUKKwlib29sICJTQU1TVU5HIEVYWU5PUzQ0MTUiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUzQKKwogY29uZmlnIFNPQ19FWFlOT1M1MjUwCiAJYm9vbCAiU0FNU1VORyBFWFlOT1M1MjUwIgogCWRlZmF1bHQgeQpAQCAtMTIzLDQgKzEyOSw5IEBACiAJICBUaGlzIGlzIG5lZWRlZCB0byBwcm92aWRlIENQVSBhbmQgY2x1c3RlciBwb3dlciBtYW5hZ2VtZW50CiAJICBvbiBFeHlub3M1NDIwIGltcGxlbWVudGluZyBiaWcuTElUVExFLgogCitjb25maWcgRVhZTk9TX0NQVV9TVVNQRU5ECisJYm9vbAorCXNlbGVjdCBBUk1fQ1BVX1NVU1BFTkQKKwlkZWZhdWx0IFBNX1NMRUVQIHx8IEFSTV9FWFlOT1NfQ1BVSURMRQorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZQppbmRleCAyN2FlNjE0Li5iY2VmYjU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZQpAQCAtMTEsMTYgKzExLDE1IEBACiAKIG9iai0kKENPTkZJR19BUkNIX0VYWU5PUykJKz0gZXh5bm9zLm8gcG11Lm8gZXh5bm9zLXNtYy5vIGZpcm13YXJlLm8KIAotb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkJKz0gcG0ubyBzbGVlcC5vCitvYmotJChDT05GSUdfRVhZTk9TX0NQVV9TVVNQRU5EKSArPSBwbS5vIHNsZWVwLm8KK29iai0kKENPTkZJR19QTV9TTEVFUCkJCSs9IHN1c3BlbmQubwogb2JqLSQoQ09ORklHX1BNX0dFTkVSSUNfRE9NQUlOUykgKz0gcG1fZG9tYWlucy5vCiAKIG9iai0kKENPTkZJR19TTVApCQkrPSBwbGF0c21wLm8gaGVhZHNtcC5vCiAKLW9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJKz0gaG90cGx1Zy5vCi1DRkxBR1NfaG90cGx1Zy5vCQkrPSAtbWFyY2g9YXJtdjctYQotCiBwbHVzX3NlYyA6PSAkKGNhbGwgYXMtaW5zdHIsLmFyY2hfZXh0ZW5zaW9uIHNlYywrc2VjKQogQUZMQUdTX2V4eW5vcy1zbWMubwkJOj0tV2EsLW1hcmNoPWFybXY3LWEkKHBsdXNfc2VjKQorQUZMQUdTX3NsZWVwLm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYSQocGx1c19zZWMpCiAKIG9iai0kKENPTkZJR19FWFlOT1M1NDIwX01DUE0pCSs9IG1jcG0tZXh5bm9zLm8KIENGTEFHU19tY3BtLWV4eW5vcy5vCQkrPSAtbWFyY2g9YXJtdjctYQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9jb21tb24uaAppbmRleCA0N2I5MDRiLi44NjVmODc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9jb21tb24uaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfRVhZTk9TX0NPTU1PTl9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9FWFlOT1NfQ09NTU9OX0gKIAotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNkZWZpbmUgRVhZTk9TMzI1MF9TT0NfSUQJMHhFMzQ3MjAwMApAQCAtMTExLDExICsxMTAsMTkgQEAKICNkZWZpbmUgc29jX2lzX2V4eW5vczUoKSAoc29jX2lzX2V4eW5vczUyNTAoKSB8fCBzb2NfaXNfZXh5bm9zNTQxMCgpIHx8IFwKIAkJCSAgc29jX2lzX2V4eW5vczU0MjAoKSB8fCBzb2NfaXNfZXh5bm9zNTgwMCgpKQogCitleHRlcm4gdTMyIGNwMTVfc2F2ZV9kaWFnOworZXh0ZXJuIHUzMiBjcDE1X3NhdmVfcG93ZXI7CisKIGV4dGVybiB2b2lkIF9faW9tZW0gKnN5c3JhbV9uc19iYXNlX2FkZHI7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpzeXNyYW1fYmFzZV9hZGRyOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqcG11X2Jhc2VfYWRkcjsKIHZvaWQgZXh5bm9zX3N5c3JhbV9pbml0KHZvaWQpOwogCitlbnVtIHsKKwlGV19ET19JRExFX1NMRUVQLAorCUZXX0RPX0lETEVfQUZUUiwKK307CisKIHZvaWQgZXh5bm9zX2Zpcm13YXJlX2luaXQodm9pZCk7CiAKIGV4dGVybiB1MzIgZXh5bm9zX2dldF9laW50X3dha2VfbWFzayh2b2lkKTsKQEAgLTEyNywzNCArMTM0LDIwIEBACiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9yZXN1bWUodm9pZCk7CitleHRlcm4gdm9pZCBleHlub3NfY3B1X3Jlc3VtZV9ucyh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBleHlub3Nfc21wX29wczsKIAotZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7Ci0KLS8qIFBNVShQb3dlciBNYW5hZ2VtZW50IFVuaXQpIHN1cHBvcnQgKi8KLQotI2RlZmluZSBQTVVfVEFCTEVfRU5ECSgtMVUpCi0KLWVudW0gc3lzX3Bvd2VyZG93biB7Ci0JU1lTX0FGVFIsCi0JU1lTX0xQQSwKLQlTWVNfU0xFRVAsCi0JTlVNX1NZU19QT1dFUkRPV04sCi19OwotCi1zdHJ1Y3QgZXh5bm9zX3BtdV9jb25mIHsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCXVuc2lnbmVkIGludCB2YWxbTlVNX1NZU19QT1dFUkRPV05dOwotfTsKLQotZXh0ZXJuIHZvaWQgZXh5bm9zX3N5c19wb3dlcmRvd25fY29uZihlbnVtIHN5c19wb3dlcmRvd24gbW9kZSk7CiBleHRlcm4gdm9pZCBleHlub3NfY3B1X3Bvd2VyX2Rvd24oaW50IGNwdSk7CiBleHRlcm4gdm9pZCBleHlub3NfY3B1X3Bvd2VyX3VwKGludCBjcHUpOwogZXh0ZXJuIGludCAgZXh5bm9zX2NwdV9wb3dlcl9zdGF0ZShpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGV4eW5vc19jbHVzdGVyX3Bvd2VyX2Rvd24oaW50IGNsdXN0ZXIpOwogZXh0ZXJuIHZvaWQgZXh5bm9zX2NsdXN0ZXJfcG93ZXJfdXAoaW50IGNsdXN0ZXIpOwogZXh0ZXJuIGludCAgZXh5bm9zX2NsdXN0ZXJfcG93ZXJfc3RhdGUoaW50IGNsdXN0ZXIpOworZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9yZXN0b3JlX3JlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiBpbnQgZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgZXh5bm9zX2VudGVyX2FmdHIodm9pZCk7CiAKIGV4dGVybiB2b2lkIHM1cF9pbml0X2NwdSh2b2lkIF9faW9tZW0gKmNwdWlkX2FkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLXBtdS5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLXBtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYWIwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9leHlub3MtcG11LmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBIZWFkZXIgZm9yIEVYWU5PUyBQTVUgRHJpdmVyIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19FWFlOT1NfUE1VX0gKKyNkZWZpbmUgX19FWFlOT1NfUE1VX0gKKworZW51bSBzeXNfcG93ZXJkb3duIHsKKwlTWVNfQUZUUiwKKwlTWVNfTFBBLAorCVNZU19TTEVFUCwKKwlOVU1fU1lTX1BPV0VSRE9XTiwKK307CisKK2V4dGVybiB2b2lkIGV4eW5vc19zeXNfcG93ZXJkb3duX2NvbmYoZW51bSBzeXNfcG93ZXJkb3duIG1vZGUpOworCisjZW5kaWYgLyogX19FWFlOT1NfUE1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2V4eW5vcy5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLmMKaW5kZXggNmIyODNlYi4uYzEzZDA4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLmMKQEAgLTQxLDQxICs0MSwxMSBAQAogCQkubGVuZ3RoCQk9IFNaXzY0SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVElNRVIsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX1RJTUVSKSwKLQkJLmxlbmd0aAkJPSBTWl8xNkssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1dBVENIRE9HLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9XQVRDSERPRyksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7CiAJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1NST01DLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9TUk9NQyksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1NZU1RJTUVSLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9TWVNUSU1FUiksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX0NPTUJJTkVSX0JBU0UsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0NPTUJJTkVSKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfR0lDX0NQVSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfR0lDX0NQVSksCi0JCS5sZW5ndGgJCT0gU1pfNjRLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9HSUNfRElTVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfR0lDX0RJU1QpLAotCQkubGVuZ3RoCQk9IFNaXzY0SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfQ01VLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9DTVUpLAogCQkubGVuZ3RoCQk9IFNaXzEyOEssCkBAIC04NiwxMSArNTYsNiBAQAogCQkubGVuZ3RoCQk9IFNaXzhLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9MMkNDLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9MMkNDKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfRE1DMCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfRE1DMCksCiAJCS5sZW5ndGgJCT0gU1pfNjRLLApAQCAtMTAwLDExICs2NSw2IEBACiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0RNQzEpLAogCQkubGVuZ3RoCQk9IFNaXzY0SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVVNCX0hTUEhZLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9IU1BIWSksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LAogfTsKIApAQCAtMTE1LDE2ICs3NSw2IEBACiAJCS5sZW5ndGgJCT0gU1pfNjRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9USU1FUiwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzVfUEFfVElNRVIpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfV0FUQ0hET0csCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M1X1BBX1dBVENIRE9HKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfU1JPTUMsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M1X1BBX1NST01DKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKQEAgLTEzNywyOCArODcsNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBleHlub3NfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXUzMiB2YWwgPSAweDE7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gcG11X2Jhc2VfYWRkciArIEVYWU5PU19TV1JFU0VUOwotCi0JaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M1NDQwIikpIHsKLQkJdTMyIHN0YXR1czsKLQkJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAic2Ftc3VuZyxleHlub3M1NDQwLWNsb2NrIik7Ci0KLQkJYWRkciA9IG9mX2lvbWFwKG5wLCAwKSArIDB4YmM7Ci0JCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGFkZHIpOwotCi0JCWFkZHIgPSBvZl9pb21hcChucCwgMCkgKyAweGNjOwotCQl2YWwgPSBfX3Jhd19yZWFkbChhZGRyKTsKLQotCQl2YWwgPSAodmFsICYgMHhmZmZmMDAwMCkgfCAoc3RhdHVzICYgMHhmZmZmKTsKLQl9Ci0KLQlfX3Jhd193cml0ZWwodmFsLCBhZGRyKTsKLX0KLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zX2NwdWlkbGUgPSB7CiAJLm5hbWUgICAgICAgICAgICAgID0gImV4eW5vc19jcHVpZGxlIiwKICNpZmRlZiBDT05GSUdfQVJNX0VYWU5PU19DUFVJRExFCkBAIC0yNTIsNiArMTgwLDcgQEAKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wbXUiIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItcG11IiB9LAogCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDEyLXBtdSIgfSwKKwl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxNS1wbXUiIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtcG11IiB9LAogCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjYwLXBtdSIgfSwKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQxMC1wbXUiIH0sCkBAIC0zMTgsNyArMjQ3LDEwIEBACiAJCWV4eW5vc19zeXNyYW1faW5pdCgpOwogCiAJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M0MjEwIikgfHwKLQkJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M1MjUwIikpCisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M0MjEyIikgfHwKKwkgICAgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M0NDEyIikgJiYKKwkgICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyx0cmF0czIiKSkgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczUyNTAiKSkKIAkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZleHlub3NfY3B1aWRsZSk7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJleHlub3MtY3B1ZnJlcSIsIC0xLCBOVUxMLCAwKTsKQEAgLTMzMyw2ICsyNjUsNyBAQAogCSJzYW1zdW5nLGV4eW5vczQyMTAiLAogCSJzYW1zdW5nLGV4eW5vczQyMTIiLAogCSJzYW1zdW5nLGV4eW5vczQ0MTIiLAorCSJzYW1zdW5nLGV4eW5vczQ0MTUiLAogCSJzYW1zdW5nLGV4eW5vczUiLAogCSJzYW1zdW5nLGV4eW5vczUyNTAiLAogCSJzYW1zdW5nLGV4eW5vczUyNjAiLApAQCAtMzc4LDcgKzMxMSw2IEBACiAJLmluaXRfbWFjaGluZQk9IGV4eW5vc19kdF9tYWNoaW5lX2luaXQsCiAJLmluaXRfbGF0ZQk9IGV4eW5vc19pbml0X2xhdGUsCiAJLmR0X2NvbXBhdAk9IGV4eW5vc19kdF9jb21wYXQsCi0JLnJlc3RhcnQJPSBleHlub3NfcmVzdGFydCwKIAkucmVzZXJ2ZQk9IGV4eW5vc19yZXNlcnZlLAogCS5kdF9maXh1cAk9IGV4eW5vc19kdF9maXh1cCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9maXJtd2FyZS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZmlybXdhcmUuYwppbmRleCBlODc5N2JiLi43NjZmNTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9maXJtd2FyZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2Zpcm13YXJlLmMKQEAgLTE0LDE2ICsxNCw0NCBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAic21jLmgiCiAKLXN0YXRpYyBpbnQgZXh5bm9zX2RvX2lkbGUodm9pZCkKKyNkZWZpbmUgRVhZTk9TX1NMRUVQX01BR0lDCTB4MDAwMDBiYWQKKyNkZWZpbmUgRVhZTk9TX0FGVFJfTUFHSUMJMHhmY2JhMGQxMAorI2RlZmluZSBFWFlOT1NfQk9PVF9BRERSCTB4OAorI2RlZmluZSBFWFlOT1NfQk9PVF9GTEFHCTB4YworCitzdGF0aWMgdm9pZCBleHlub3Nfc2F2ZV9jcDE1KHZvaWQpCiB7Ci0JZXh5bm9zX3NtYyhTTUNfQ01EX1NMRUVQLCAwLCAwLCAwKTsKKwkvKiBTYXZlIFBvd2VyIGNvbnRyb2wgYW5kIERpYWdub3N0aWMgcmVnaXN0ZXJzICovCisJYXNtICgibXJjIHAxNSwgMCwgJTAsIGMxNSwgYzAsIDBcbiIKKwkgICAgICJtcmMgcDE1LCAwLCAlMSwgYzE1LCBjMCwgMVxuIgorCSAgICAgOiAiPXIiIChjcDE1X3NhdmVfcG93ZXIpLCAiPXIiIChjcDE1X3NhdmVfZGlhZykKKwkgICAgIDogOiAiY2MiKTsKK30KKworc3RhdGljIGludCBleHlub3NfZG9faWRsZSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBGV19ET19JRExFX0FGVFI6CisJCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQorCQkJZXh5bm9zX3NhdmVfY3AxNSgpOworCQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGV4eW5vc19jcHVfcmVzdW1lX25zKSwKKwkJCSAgICAgc3lzcmFtX25zX2Jhc2VfYWRkciArIDB4MjQpOworCQlfX3Jhd193cml0ZWwoRVhZTk9TX0FGVFJfTUFHSUMsIHN5c3JhbV9uc19iYXNlX2FkZHIgKyAweDIwKTsKKwkJZXh5bm9zX3NtYyhTTUNfQ01EX0NQVTBBRlRSLCAwLCAwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBGV19ET19JRExFX1NMRUVQOgorCQlleHlub3Nfc21jKFNNQ19DTURfU0xFRVAsIDAsIDAsIDApOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjksMTAgKzk3LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXh5bm9zX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWZsdXNoX2NhY2hlX2FsbCgpOworCW91dGVyX2ZsdXNoX2FsbCgpOworCisJZXh5bm9zX3NtYyhTTUNfQ01EX1NMRUVQLCAwLCAwLCAwKTsKKworCXByX2luZm8oIkZhaWxlZCB0byBzdXNwZW5kIHRoZSBzeXN0ZW1cbiIpOworCXdyaXRlbCgwLCBzeXNyYW1fbnNfYmFzZV9hZGRyICsgRVhZTk9TX0JPT1RfRkxBRyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3N1c3BlbmQodm9pZCkKK3sKKwlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKKwkJZXh5bm9zX3NhdmVfY3AxNSgpOworCisJd3JpdGVsKEVYWU5PU19TTEVFUF9NQUdJQywgc3lzcmFtX25zX2Jhc2VfYWRkciArIEVYWU5PU19CT09UX0ZMQUcpOworCXdyaXRlbCh2aXJ0X3RvX3BoeXMoZXh5bm9zX2NwdV9yZXN1bWVfbnMpLAorCQlzeXNyYW1fbnNfYmFzZV9hZGRyICsgRVhZTk9TX0JPT1RfQUREUik7CisKKwlyZXR1cm4gY3B1X3N1c3BlbmQoMCwgZXh5bm9zX2NwdV9zdXNwZW5kKTsKK30KKworc3RhdGljIGludCBleHlub3NfcmVzdW1lKHZvaWQpCit7CisJd3JpdGVsKDAsIHN5c3JhbV9uc19iYXNlX2FkZHIgKyBFWFlOT1NfQk9PVF9GTEFHKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlX29wcyBleHlub3NfZmlybXdhcmVfb3BzID0gewotCS5kb19pZGxlCQk9IGV4eW5vc19kb19pZGxlLAorCS5kb19pZGxlCQk9IElTX0VOQUJMRUQoQ09ORklHX0VYWU5PU19DUFVfU1VTUEVORCkgPyBleHlub3NfZG9faWRsZSA6IE5VTEwsCiAJLnNldF9jcHVfYm9vdF9hZGRyCT0gZXh5bm9zX3NldF9jcHVfYm9vdF9hZGRyLAogCS5jcHVfYm9vdAkJPSBleHlub3NfY3B1X2Jvb3QsCisJLnN1c3BlbmQJCT0gSVNfRU5BQkxFRChDT05GSUdfUE1fU0xFRVApID8gZXh5bm9zX3N1c3BlbmQgOiBOVUxMLAorCS5yZXN1bWUJCQk9IElTX0VOQUJMRUQoQ09ORklHX0VYWU5PU19DUFVfU1VTUEVORCkgPyBleHlub3NfcmVzdW1lIDogTlVMTCwKIH07CiAKIHZvaWQgX19pbml0IGV4eW5vc19maXJtd2FyZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9ob3RwbHVnLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9ob3RwbHVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODY5NjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvaG90cGx1Zy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqICBDbG9uZWQgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KLSAqICBBbGwgUmlnaHRzIFJlc2VydmVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9jcDE1Lmg+Ci0jaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJyZWdzLXBtdS5oIgotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3B1X2xlYXZlX2xvd3Bvd2VyKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQlhc20gdm9sYXRpbGUoCi0JIm1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKLQkiCW9ycgklMCwgJTAsICUxXG4iCi0JIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCi0JIgltcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCi0JIglvcnIJJTAsICUwLCAlMlxuIgotCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgotCSAgOiAiPSZyIiAodikKLQkgIDogIklyIiAoQ1JfQyksICJJciIgKDB4NDApCi0JICA6ICJjYyIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSwgaW50ICpzcHVyaW91cykKLXsKLQl1MzIgbXBpZHIgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKLQl1MzIgY29yZV9pZCA9IE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKTsKLQotCWZvciAoOzspIHsKLQotCQkvKiBUdXJuIHRoZSBDUFUgb2ZmIG9uIG5leHQgV0ZJIGluc3RydWN0aW9uLiAqLwotCQlleHlub3NfY3B1X3Bvd2VyX2Rvd24oY29yZV9pZCk7Ci0KLQkJd2ZpKCk7Ci0KLQkJaWYgKHBlbl9yZWxlYXNlID09IGNvcmVfaWQpIHsKLQkJCS8qCi0JCQkgKiBPSywgcHJvcGVyIHdha2V1cCwgd2UncmUgZG9uZQotCQkJICovCi0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIEdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0Ci0JCSAqIGhhdmluZyBiZWVuIHdva2VuIHVwIC0gdGhpcyBzaG91bGRuJ3QgaGFwcGVuCi0JCSAqCi0JCSAqIEp1c3Qgbm90ZSBpdCBoYXBwZW5pbmcgLSB3aGVuIHdlJ3JlIHdva2VuLCB3ZSBjYW4gcmVwb3J0Ci0JCSAqIGl0cyBvY2N1cnJlbmNlLgotCQkgKi8KLQkJKCpzcHVyaW91cykrKzsKLQl9Ci19Ci0KLS8qCi0gKiBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIHRvIHNodXRkb3duIGEgQ1BVCi0gKgotICogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZAotICovCi12b2lkIF9fcmVmIGV4eW5vc19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JaW50IHNwdXJpb3VzID0gMDsKLQotCXY3X2V4aXRfY29oZXJlbmN5X2ZsdXNoKGxvdWlzKTsKLQotCXBsYXRmb3JtX2RvX2xvd3Bvd2VyKGNwdSwgJnNwdXJpb3VzKTsKLQotCS8qCi0JICogYnJpbmcgdGhpcyBDUFUgYmFjayBpbnRvIHRoZSB3b3JsZCBvZiBjYWNoZQotCSAqIGNvaGVyZW5jeSwgYW5kIHRoZW4gcmVzdG9yZSBpbnRlcnJ1cHRzCi0JICovCi0JY3B1X2xlYXZlX2xvd3Bvd2VyKCk7Ci0KLQlpZiAoc3B1cmlvdXMpCi0JCXByX3dhcm4oIkNQVSV1OiAldSBzcHVyaW91cyB3YWtldXAgY2FsbHNcbiIsIGNwdSwgc3B1cmlvdXMpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IGYwYjdlOTIuLjFhZDNmNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTMwLDQwICszMCwxNyBAQAogI2RlZmluZSBFWFlOT1M0X1BBX0NNVQkJCTB4MTAwMzAwMDAKICNkZWZpbmUgRVhZTk9TNV9QQV9DTVUJCQkweDEwMDEwMDAwCiAKLSNkZWZpbmUgRVhZTk9TNF9QQV9TWVNUSU1FUgkJMHgxMDA1MDAwMAotCi0jZGVmaW5lIEVYWU5PUzRfUEFfV0FUQ0hET0cJCTB4MTAwNjAwMDAKLSNkZWZpbmUgRVhZTk9TNV9QQV9XQVRDSERPRwkJMHgxMDFEMDAwMAotCiAjZGVmaW5lIEVYWU5PUzRfUEFfRE1DMAkJCTB4MTA0MDAwMDAKICNkZWZpbmUgRVhZTk9TNF9QQV9ETUMxCQkJMHgxMDQxMDAwMAogCi0jZGVmaW5lIEVYWU5PUzRfUEFfQ09NQklORVIJCTB4MTA0NDAwMDAKLSNkZWZpbmUgRVhZTk9TNV9QQV9DT01CSU5FUgkJMHgxMDQ0MDAwMAotCi0jZGVmaW5lIEVYWU5PUzRfUEFfR0lDX0NQVQkJMHgxMDQ4MDAwMAotI2RlZmluZSBFWFlOT1M0X1BBX0dJQ19ESVNUCQkweDEwNDkwMDAwCi0jZGVmaW5lIEVYWU5PUzVfUEFfR0lDX0NQVQkJMHgxMDQ4MjAwMAotI2RlZmluZSBFWFlOT1M1X1BBX0dJQ19ESVNUCQkweDEwNDgxMDAwCi0KICNkZWZpbmUgRVhZTk9TNF9QQV9DT1JFUEVSSQkJMHgxMDUwMDAwMAogI2RlZmluZSBFWFlOT1M0X1BBX0wyQ0MJCQkweDEwNTAyMDAwCiAKICNkZWZpbmUgRVhZTk9TNF9QQV9TUk9NQwkJMHgxMjU3MDAwMAogI2RlZmluZSBFWFlOT1M1X1BBX1NST01DCQkweDEyMjUwMDAwCiAKLSNkZWZpbmUgRVhZTk9TNF9QQV9IU1BIWQkJMHgxMjVCMDAwMAotCi0jZGVmaW5lIEVYWU5PUzRfUEFfVUFSVAkJCTB4MTM4MDAwMDAKLSNkZWZpbmUgRVhZTk9TNV9QQV9VQVJUCQkJMHgxMkMwMDAwMAotCi0jZGVmaW5lIEVYWU5PUzRfUEFfVElNRVIJCTB4MTM5RDAwMDAKLSNkZWZpbmUgRVhZTk9TNV9QQV9USU1FUgkJMHgxMkREMDAwMAotCiAvKiBDb21wYXRpYmlsaXR5IFVBUlQgKi8KIAogI2RlZmluZSBFWFlOT1M1NDQwX1BBX1VBUlQwCQkweDAwMEIwMDAwCiAKLSNkZWZpbmUgUzNDX1ZBX1VBUlR4KHgpCQkJKFMzQ19WQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9tY3BtLWV4eW5vcy5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvbWNwbS1leHlub3MuYwppbmRleCBkYzlhNzY0Li5iMGQzYzJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9tY3BtLWV4eW5vcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL21jcG0tZXh5bm9zLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9jcDE1Lmg+CkBAIC0zMCw2ICszMSw4IEBACiAjZGVmaW5lIEVYWU5PUzU0MjBfVVNFX0FSTV9DT1JFX0RPV05fU1RBVEUJQklUKDI5KQogI2RlZmluZSBFWFlOT1M1NDIwX1VTRV9MMl9DT01NT05fVVBfU1RBVEUJQklUKDMwKQogCitzdGF0aWMgdm9pZCBfX2lvbWVtICpuc19zcmFtX2Jhc2VfYWRkcjsKKwogLyoKICAqIFRoZSBjb21tb24gdjdfZXhpdF9jb2hlcmVuY3lfZmx1c2ggQVBJIGNvdWxkIG5vdCBiZSB1c2VkIGJlY2F1c2Ugb2YgdGhlCiAgKiBFcnJhdHVtIDc5OTI3MCB3b3JrYXJvdW5kLiBUaGlzIG1hY3JvIGlzIHRoZSBzYW1lIGFzIHRoZSBjb21tb24gb25lIChpbgpAQCAtMzE4LDEwICszMjEsMjYgQEAKIAl7fSwKIH07CiAKK3N0YXRpYyB2b2lkIGV4eW5vc19tY3BtX3NldHVwX2VudHJ5X3BvaW50KHZvaWQpCit7CisJLyoKKwkgKiBVLUJvb3QgU1BMIGlzIGhhcmRjb2RlZCB0byBqdW1wIHRvIHRoZSBzdGFydCBvZiBuc19zcmFtX2Jhc2VfYWRkcgorCSAqIGFzIHBhcnQgb2Ygc2Vjb25kYXJ5X2NwdV9zdGFydCgpLiAgTGV0J3MgcmVkaXJlY3QgaXQgdG8gdGhlCisJICogbWNwbV9lbnRyeV9wb2ludCgpLiBUaGlzIGlzIGRvbmUgZHVyaW5nIGJvdGggc2Vjb25kYXJ5IGJvb3QtdXAgYXMKKwkgKiB3ZWxsIGFzIHN5c3RlbSByZXN1bWUuCisJICovCisJX19yYXdfd3JpdGVsKDB4ZTU5ZjAwMDAsIG5zX3NyYW1fYmFzZV9hZGRyKTsgICAgIC8qIGxkciByMCwgW3BjLCAjMF0gKi8KKwlfX3Jhd193cml0ZWwoMHhlMTJmZmYxMCwgbnNfc3JhbV9iYXNlX2FkZHIgKyA0KTsgLyogYnggIHIwICovCisJX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhtY3BtX2VudHJ5X3BvaW50KSwgbnNfc3JhbV9iYXNlX2FkZHIgKyA4KTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBleHlub3NfbWNwbV9zeXNjb3JlX29wcyA9IHsKKwkucmVzdW1lCT0gZXh5bm9zX21jcG1fc2V0dXBfZW50cnlfcG9pbnQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBleHlub3NfbWNwbV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwotCXZvaWQgX19pb21lbSAqbnNfc3JhbV9iYXNlX2FkZHI7CiAJdW5zaWduZWQgaW50IHZhbHVlLCBpOwogCWludCByZXQ7CiAKQEAgLTM4NywxNiArNDA2LDkgQEAKIAkJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PU19DT01NT05fT1BUSU9OKGkpKTsKIAl9CiAKLQkvKgotCSAqIFUtQm9vdCBTUEwgaXMgaGFyZGNvZGVkIHRvIGp1bXAgdG8gdGhlIHN0YXJ0IG9mIG5zX3NyYW1fYmFzZV9hZGRyCi0JICogYXMgcGFydCBvZiBzZWNvbmRhcnlfY3B1X3N0YXJ0KCkuICBMZXQncyByZWRpcmVjdCBpdCB0byB0aGUKLQkgKiBtY3BtX2VudHJ5X3BvaW50KCkuCi0JICovCi0JX19yYXdfd3JpdGVsKDB4ZTU5ZjAwMDAsIG5zX3NyYW1fYmFzZV9hZGRyKTsgICAgIC8qIGxkciByMCwgW3BjLCAjMF0gKi8KLQlfX3Jhd193cml0ZWwoMHhlMTJmZmYxMCwgbnNfc3JhbV9iYXNlX2FkZHIgKyA0KTsgLyogYnggIHIwICovCi0JX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhtY3BtX2VudHJ5X3BvaW50KSwgbnNfc3JhbV9iYXNlX2FkZHIgKyA4KTsKKwlleHlub3NfbWNwbV9zZXR1cF9lbnRyeV9wb2ludCgpOwogCi0JaW91bm1hcChuc19zcmFtX2Jhc2VfYWRkcik7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmV4eW5vc19tY3BtX3N5c2NvcmVfb3BzKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbGF0c21wLmMKaW5kZXggNDFhZTI4ZC4uN2ExZWJmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BsYXRzbXAuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2NwMTUuaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgpAQCAtMzMsNiArMzQsODggQEAKIAogZXh0ZXJuIHZvaWQgZXh5bm9zNF9zZWNvbmRhcnlfc3RhcnR1cCh2b2lkKTsKIAorLyoKKyAqIFNldCBvciBjbGVhciB0aGUgVVNFX0RFTEFZRURfUkVTRVRfQVNTRVJUSU9OIG9wdGlvbiwgc2V0IG9uIEV4eW5vczQgU29DcworICogZHVyaW5nIGhvdC0odW4pcGx1Z2dpbmcgQ1BVeC4KKyAqCisgKiBUaGUgZmVhdHVyZSBjYW4gYmUgY2xlYXJlZCBzYWZlbHkgZHVyaW5nIGZpcnN0IGJvb3Qgb2Ygc2Vjb25kYXJ5IENQVS4KKyAqCisgKiBFeHlub3M0IFNvQ3MgcmVxdWlyZSBzZXR0aW5nIFVTRV9ERUxBWUVEX1JFU0VUX0FTU0VSVElPTiBkdXJpbmcgcG93ZXJpbmcKKyAqIGRvd24gYSBDUFUgc28gdGhlIENQVSBpZGxlIGNsb2NrIGRvd24gZmVhdHVyZSBjb3VsZCBwcm9wZXJseSBkZXRlY3QgZ2xvYmFsCisgKiBpZGxlIHN0YXRlIHdoZW4gQ1BVeCBpcyBvZmYuCisgKi8KK3N0YXRpYyB2b2lkIGV4eW5vc19zZXRfZGVsYXllZF9yZXNldF9hc3NlcnRpb24odTMyIGNvcmVfaWQsIGJvb2wgZW5hYmxlKQoreworCWlmIChzb2NfaXNfZXh5bm9zNCgpKSB7CisJCXVuc2lnbmVkIGludCB0bXA7CisKKwkJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1NfQVJNX0NPUkVfT1BUSU9OKGNvcmVfaWQpKTsKKwkJaWYgKGVuYWJsZSkKKwkJCXRtcCB8PSBTNVBfVVNFX0RFTEFZRURfUkVTRVRfQVNTRVJUSU9OOworCQllbHNlCisJCQl0bXAgJj0gfihTNVBfVVNFX0RFTEFZRURfUkVTRVRfQVNTRVJUSU9OKTsKKwkJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1NfQVJNX0NPUkVfT1BUSU9OKGNvcmVfaWQpKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfbGVhdmVfbG93cG93ZXIodTMyIGNvcmVfaWQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwlhc20gdm9sYXRpbGUoCisJIm1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKKwkiCW9ycgklMCwgJTAsICUxXG4iCisJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCisJIgltcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCisJIglvcnIJJTAsICUwLCAlMlxuIgorCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgorCSAgOiAiPSZyIiAodikKKwkgIDogIklyIiAoQ1JfQyksICJJciIgKDB4NDApCisJICA6ICJjYyIpOworCisJIGV4eW5vc19zZXRfZGVsYXllZF9yZXNldF9hc3NlcnRpb24oY29yZV9pZCwgZmFsc2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSwgaW50ICpzcHVyaW91cykKK3sKKwl1MzIgbXBpZHIgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKwl1MzIgY29yZV9pZCA9IE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKTsKKworCWZvciAoOzspIHsKKworCQkvKiBUdXJuIHRoZSBDUFUgb2ZmIG9uIG5leHQgV0ZJIGluc3RydWN0aW9uLiAqLworCQlleHlub3NfY3B1X3Bvd2VyX2Rvd24oY29yZV9pZCk7CisKKwkJLyoKKwkJICogRXh5bm9zNCBTb0NzIHJlcXVpcmUgc2V0dGluZworCQkgKiBVU0VfREVMQVlFRF9SRVNFVF9BU1NFUlRJT04gc28gdGhlIENQVSBpZGxlCisJCSAqIGNsb2NrIGRvd24gZmVhdHVyZSBjb3VsZCBwcm9wZXJseSBkZXRlY3QKKwkJICogZ2xvYmFsIGlkbGUgc3RhdGUgd2hlbiBDUFV4IGlzIG9mZi4KKwkJICovCisJCWV4eW5vc19zZXRfZGVsYXllZF9yZXNldF9hc3NlcnRpb24oY29yZV9pZCwgdHJ1ZSk7CisKKwkJd2ZpKCk7CisKKwkJaWYgKHBlbl9yZWxlYXNlID09IGNvcmVfaWQpIHsKKwkJCS8qCisJCQkgKiBPSywgcHJvcGVyIHdha2V1cCwgd2UncmUgZG9uZQorCQkJICovCisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIEdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CisJCSAqIGhhdmluZyBiZWVuIHdva2VuIHVwIC0gdGhpcyBzaG91bGRuJ3QgaGFwcGVuCisJCSAqCisJCSAqIEp1c3Qgbm90ZSBpdCBoYXBwZW5pbmcgLSB3aGVuIHdlJ3JlIHdva2VuLCB3ZSBjYW4gcmVwb3J0CisJCSAqIGl0cyBvY2N1cnJlbmNlLgorCQkgKi8KKwkJKCpzcHVyaW91cykrKzsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCisKIC8qKgogICogZXh5bm9zX2NvcmVfcG93ZXJfZG93biA6IHBvd2VyIGRvd24gdGhlIHNwZWNpZmllZCBjcHUKICAqIEBjcHUgOiB0aGUgY3B1IHRvIHBvd2VyIGRvd24KQEAgLTQzLDYgKzEyNiwxOCBAQAogICovCiB2b2lkIGV4eW5vc19jcHVfcG93ZXJfZG93bihpbnQgY3B1KQogeworCWlmIChjcHUgPT0gMCAmJiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczU0MjAiKSB8fAorCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInNhbXN1bmcsZXh5bm9zNTgwMCIpKSkgeworCQkvKgorCQkgKiBCeXBhc3MgcG93ZXIgZG93biBmb3IgQ1BVMCBkdXJpbmcgc3VzcGVuZC4gQ2hlY2sgZm9yCisJCSAqIHRoZSBTWVNfUFdSX1JFRyB2YWx1ZSB0byBkZWNpZGUgaWYgd2UgYXJlIHN1c3BlbmRpbmcKKwkJICogdGhlIHN5c3RlbS4KKwkJICovCisJCWludCB2YWwgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfQVJNX0NPUkUwX1NZU19QV1JfUkVHKTsKKworCQlpZiAoISh2YWwgJiBTNVBfQ09SRV9MT0NBTF9QV1JfRU4pKQorCQkJcmV0dXJuOworCX0KIAlwbXVfcmF3X3dyaXRlbCgwLCBFWFlOT1NfQVJNX0NPUkVfQ09ORklHVVJBVElPTihjcHUpKTsKIH0KIApAQCAtMTIxLDYgKzIxNiwyNiBAQAogfQogCiAvKgorICogU2V0IHdha2UgdXAgYnkgbG9jYWwgcG93ZXIgbW9kZSBhbmQgZXhlY3V0ZSBzb2Z0d2FyZSByZXNldCBmb3IgZ2l2ZW4gY29yZS4KKyAqCisgKiBDdXJyZW50bHkgdGhpcyBpcyBuZWVkZWQgb25seSB3aGVuIGJvb3Rpbmcgc2Vjb25kYXJ5IENQVSBvbiBFeHlub3MzMjUwLgorICovCitzdGF0aWMgdm9pZCBleHlub3NfY29yZV9yZXN0YXJ0KHUzMiBjb3JlX2lkKQoreworCXUzMiB2YWw7CisKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3MzMjUwIikpCisJCXJldHVybjsKKworCXZhbCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TX0FSTV9DT1JFX1NUQVRVUyhjb3JlX2lkKSk7CisJdmFsIHw9IFM1UF9DT1JFX1dBS0VVUF9GUk9NX0xPQ0FMX0NGRzsKKwlwbXVfcmF3X3dyaXRlbCh2YWwsIEVYWU5PU19BUk1fQ09SRV9TVEFUVVMoY29yZV9pZCkpOworCisJcHJfaW5mbygiQ1BVJXU6IFNvZnR3YXJlIHJlc2V0XG4iLCBjb3JlX2lkKTsKKwlwbXVfcmF3X3dyaXRlbChFWFlOT1NfQ09SRV9QT19SRVNFVChjb3JlX2lkKSwgRVhZTk9TX1NXUkVTRVQpOworfQorCisvKgogICogV3JpdGUgcGVuX3JlbGVhc2UgaW4gYSB3YXkgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIHZpc2libGUgdG8gYWxsCiAgKiBvYnNlcnZlcnMsIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHRoZXkncmUgdGFraW5nIHBhcnQgaW4gY29oZXJlbmN5CiAgKiBvciBub3QuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGhvdHBsdWcgY29kZSB0byB3b3JrIHJlbGlhYmx5LgpAQCAtMTk2LDYgKzMxMSw5IEBACiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCX0KKworCWV4eW5vc19jb3JlX3Jlc3RhcnQoY29yZV9pZCk7CisKIAkvKgogCSAqIFNlbmQgdGhlIHNlY29uZGFyeSBDUFUgYSBzb2Z0IGludGVycnVwdCwgdGhlcmVieSBjYXVzaW5nCiAJICogdGhlIGJvb3QgbW9uaXRvciB0byByZWFkIHRoZSBzeXN0ZW0gd2lkZSBmbGFncyByZWdpc3RlciwKQEAgLTIzNyw2ICszNTUsOSBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAorCS8qIE5vIGhhcm0gaWYgdGhpcyBpcyBjYWxsZWQgZHVyaW5nIGZpcnN0IGJvb3Qgb2Ygc2Vjb25kYXJ5IENQVSAqLworCWV4eW5vc19zZXRfZGVsYXllZF9yZXNldF9hc3NlcnRpb24oY29yZV9pZCwgZmFsc2UpOworCiAJLyoKIAkgKiBub3cgdGhlIHNlY29uZGFyeSBjb3JlIGlzIHN0YXJ0aW5nIHVwIGxldCBpdCBydW4gaXRzCiAJICogY2FsaWJyYXRpb25zLCB0aGVuIHdhaXQgZm9yIGl0IHRvIGZpbmlzaApAQCAtMzE4LDYgKzQzOSwzMyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorLyoKKyAqIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgdG8gc2h1dGRvd24gYSBDUFUKKyAqCisgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCisgKi8KK3N0YXRpYyB2b2lkIGV4eW5vc19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IHNwdXJpb3VzID0gMDsKKwl1MzIgbXBpZHIgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKwl1MzIgY29yZV9pZCA9IE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKTsKKworCXY3X2V4aXRfY29oZXJlbmN5X2ZsdXNoKGxvdWlzKTsKKworCXBsYXRmb3JtX2RvX2xvd3Bvd2VyKGNwdSwgJnNwdXJpb3VzKTsKKworCS8qCisJICogYnJpbmcgdGhpcyBDUFUgYmFjayBpbnRvIHRoZSB3b3JsZCBvZiBjYWNoZQorCSAqIGNvaGVyZW5jeSwgYW5kIHRoZW4gcmVzdG9yZSBpbnRlcnJ1cHRzCisJICovCisJY3B1X2xlYXZlX2xvd3Bvd2VyKGNvcmVfaWQpOworCisJaWYgKHNwdXJpb3VzKQorCQlwcl93YXJuKCJDUFUldTogJXUgc3B1cmlvdXMgd2FrZXVwIGNhbGxzXG4iLCBjcHUsIHNwdXJpb3VzKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KKwogc3RydWN0IHNtcF9vcGVyYXRpb25zIGV4eW5vc19zbXBfb3BzIF9faW5pdGRhdGEgPSB7CiAJLnNtcF9pbml0X2NwdXMJCT0gZXh5bm9zX3NtcF9pbml0X2NwdXMsCiAJLnNtcF9wcmVwYXJlX2NwdXMJPSBleHlub3Nfc21wX3ByZXBhcmVfY3B1cywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbS5jCmluZGV4IGFiZWZhY2IuLjg2ZjNlY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcG0uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgogICogRVhZTk9TIC0gUG93ZXIgTWFuYWdlbWVudCBzdXBwb3J0CkBAIC0xNSwxMDkgKzE1LDQ1IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1X3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2FybS1naWMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDxwbGF0L3BtLWNvbW1vbi5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1zcm9tLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiZXh5bm9zLXBtdS5oIgogI2luY2x1ZGUgInJlZ3MtcG11LmgiCiAjaW5jbHVkZSAicmVncy1zeXMuaCIKIAotLyoqCi0gKiBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIC0gRXh5bm9zIEdJQyB0byBQTVUgSVJRIG1hcHBpbmcKLSAqIEBod2lycTogSGFyZHdhcmUgSVJRIHNpZ25hbCBvZiB0aGUgR0lDCi0gKiBAbWFzazogTWFzayBpbiBQTVUgd2FrZS11cCBtYXNrIHJlZ2lzdGVyCi0gKi8KLXN0cnVjdCBleHlub3Nfd2t1cF9pcnEgewotCXVuc2lnbmVkIGludCBod2lycTsKLQl1MzIgbWFzazsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBleHlub3M1X3N5c19zYXZlW10gPSB7Ci0JU0FWRV9JVEVNKEVYWU5PUzVfU1lTX0kyQ19DRkcpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGV4eW5vc19jb3JlX3NhdmVbXSA9IHsKLQkvKiBTUk9NIHNpZGUgKi8KLQlTQVZFX0lURU0oUzVQX1NST01fQlcpLAotCVNBVkVfSVRFTShTNVBfU1JPTV9CQzApLAotCVNBVkVfSVRFTShTNVBfU1JPTV9CQzEpLAotCVNBVkVfSVRFTShTNVBfU1JPTV9CQzIpLAotCVNBVkVfSVRFTShTNVBfU1JPTV9CQzMpLAotfTsKLQotLyoKLSAqIEdJQyB3YWtlLXVwIHN1cHBvcnQKLSAqLwotCi1zdGF0aWMgdTMyIGV4eW5vc19pcnF3YWtlX2ludG1hc2sgPSAweGZmZmZmZmZmOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc193a3VwX2lycSBleHlub3M0X3drdXBfaXJxW10gPSB7Ci0JeyA3NiwgQklUKDEpIH0sIC8qIFJUQyBhbGFybSAqLwotCXsgNzcsIEJJVCgyKSB9LCAvKiBSVEMgdGljayAqLwotCXsgLyogc2VudGluZWwgKi8gfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIGV4eW5vczUyNTBfd2t1cF9pcnFbXSA9IHsKLQl7IDc1LCBCSVQoMSkgfSwgLyogUlRDIGFsYXJtICovCi0JeyA3NiwgQklUKDIpIH0sIC8qIFJUQyB0aWNrICovCi0JeyAvKiBzZW50aW5lbCAqLyB9LAotfTsKLQotc3RhdGljIGludCBleHlub3NfaXJxX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmV4eW5vc19ib290X3ZlY3Rvcl9hZGRyKHZvaWQpCiB7Ci0JY29uc3Qgc3RydWN0IGV4eW5vc193a3VwX2lycSAqd2t1cF9pcnE7Ci0KLQlpZiAoc29jX2lzX2V4eW5vczUyNTAoKSkKLQkJd2t1cF9pcnEgPSBleHlub3M1MjUwX3drdXBfaXJxOwotCWVsc2UKLQkJd2t1cF9pcnEgPSBleHlub3M0X3drdXBfaXJxOwotCi0Jd2hpbGUgKHdrdXBfaXJxLT5tYXNrKSB7Ci0JCWlmICh3a3VwX2lycS0+aHdpcnEgPT0gZGF0YS0+aHdpcnEpIHsKLQkJCWlmICghc3RhdGUpCi0JCQkJZXh5bm9zX2lycXdha2VfaW50bWFzayB8PSB3a3VwX2lycS0+bWFzazsKLQkJCWVsc2UKLQkJCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrICY9IH53a3VwX2lycS0+bWFzazsKLQkJCXJldHVybiAwOwotCQl9Ci0JCSsrd2t1cF9pcnE7Ci0JfQotCi0JcmV0dXJuIC1FTk9FTlQ7CisJaWYgKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8xKQorCQlyZXR1cm4gcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk03OworCWVsc2UgaWYgKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8wKQorCQlyZXR1cm4gc3lzcmFtX2Jhc2VfYWRkciArIDB4MjQ7CisJcmV0dXJuIHBtdV9iYXNlX2FkZHIgKyBTNVBfSU5GT1JNMDsKIH0KIAotI2RlZmluZSBFWFlOT1NfQk9PVF9WRUNUT1JfQUREUgkoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzEgPyBcCi0JCQlwbXVfYmFzZV9hZGRyICsgUzVQX0lORk9STTcgOiBcCi0JCQkoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzAgPyBcCi0JCQkoc3lzcmFtX2Jhc2VfYWRkciArIDB4MjQpIDogXAotCQkJcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk0wKSkKLSNkZWZpbmUgRVhZTk9TX0JPT1RfVkVDVE9SX0ZMQUcJKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8xID8gXAotCQkJcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk02IDogXAotCQkJKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8wID8gXAotCQkJKHN5c3JhbV9iYXNlX2FkZHIgKyAweDIwKSA6IFwKLQkJCXBtdV9iYXNlX2FkZHIgKyBTNVBfSU5GT1JNMSkpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqZXh5bm9zX2Jvb3RfdmVjdG9yX2ZsYWcodm9pZCkKK3sKKwlpZiAoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzEpCisJCXJldHVybiBwbXVfYmFzZV9hZGRyICsgUzVQX0lORk9STTY7CisJZWxzZSBpZiAoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzApCisJCXJldHVybiBzeXNyYW1fYmFzZV9hZGRyICsgMHgyMDsKKwlyZXR1cm4gcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk0xOworfQogCiAjZGVmaW5lIFM1UF9DSEVDS19BRlRSICAweEZDQkEwRDEwCi0jZGVmaW5lIFM1UF9DSEVDS19TTEVFUCAweDAwMDAwQkFECiAKIC8qIEZvciBDb3J0ZXgtQTkgRGlhZ25vc3RpYyBhbmQgUG93ZXIgY29udHJvbCByZWdpc3RlciAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzYXZlX2FybV9yZWdpc3RlclsyXTsKIAotc3RhdGljIHZvaWQgZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKHZvaWQpCit2b2lkIGV4eW5vc19jcHVfc2F2ZV9yZWdpc3Rlcih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0xMzQsNyArNzAsNyBAQAogCXNhdmVfYXJtX3JlZ2lzdGVyWzFdID0gdG1wOwogfQogCi1zdGF0aWMgdm9pZCBleHlub3NfY3B1X3Jlc3RvcmVfcmVnaXN0ZXIodm9pZCkKK3ZvaWQgZXh5bm9zX2NwdV9yZXN0b3JlX3JlZ2lzdGVyKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTE1Myw3ICs4OSw3IEBACiAJCSAgICAgIDogImNjIik7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19wbV9jZW50cmFsX3N1c3BlbmQodm9pZCkKK3ZvaWQgZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0xNjEsOSArOTcsMTMgQEAKIAl0bXAgPSBwbXVfcmF3X3JlYWRsKFM1UF9DRU5UUkFMX1NFUV9DT05GSUdVUkFUSU9OKTsKIAl0bXAgJj0gflM1UF9DRU5UUkFMX0xPV1BXUl9DRkc7CiAJcG11X3Jhd193cml0ZWwodG1wLCBTNVBfQ0VOVFJBTF9TRVFfQ09ORklHVVJBVElPTik7CisKKwkvKiBTZXR0aW5nIFNFUV9PUFRJT04gcmVnaXN0ZXIgKi8KKwlwbXVfcmF3X3dyaXRlbChTNVBfVVNFX1NUQU5EQllfV0ZJMCB8IFM1UF9VU0VfU1RBTkRCWV9XRkUwLAorCQkgICAgICAgUzVQX0NFTlRSQUxfU0VRX09QVElPTik7CiB9CiAKLXN0YXRpYyBpbnQgZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKHZvaWQpCitpbnQgZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTE5NCwxNyArMTM0LDI2IEBACiAKIHN0YXRpYyB2b2lkIGV4eW5vc19jcHVfc2V0X2Jvb3RfdmVjdG9yKGxvbmcgZmxhZ3MpCiB7Ci0JX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhleHlub3NfY3B1X3Jlc3VtZSksIEVYWU5PU19CT09UX1ZFQ1RPUl9BRERSKTsKLQlfX3Jhd193cml0ZWwoZmxhZ3MsIEVYWU5PU19CT09UX1ZFQ1RPUl9GTEFHKTsKKwlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGV4eW5vc19jcHVfcmVzdW1lKSwKKwkJICAgICBleHlub3NfYm9vdF92ZWN0b3JfYWRkcigpKTsKKwlfX3Jhd193cml0ZWwoZmxhZ3MsIGV4eW5vc19ib290X3ZlY3Rvcl9mbGFnKCkpOwogfQogCiBzdGF0aWMgaW50IGV4eW5vc19hZnRyX2ZpbmlzaGVyKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJaW50IHJldDsKKwogCWV4eW5vc19zZXRfd2FrZXVwbWFzaygweDAwMDBmZjNlKTsKLQlleHlub3NfY3B1X3NldF9ib290X3ZlY3RvcihTNVBfQ0hFQ0tfQUZUUik7CiAJLyogU2V0IHZhbHVlIG9mIHBvd2VyIGRvd24gcmVnaXN0ZXIgZm9yIGFmdHIgbW9kZSAqLwogCWV4eW5vc19zeXNfcG93ZXJkb3duX2NvbmYoU1lTX0FGVFIpOwotCWNwdV9kb19pZGxlKCk7CisKKwlyZXQgPSBjYWxsX2Zpcm13YXJlX29wKGRvX2lkbGUsIEZXX0RPX0lETEVfQUZUUik7CisJaWYgKHJldCA9PSAtRU5PU1lTKSB7CisJCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQorCQkJZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKCk7CisJCWV4eW5vc19jcHVfc2V0X2Jvb3RfdmVjdG9yKFM1UF9DSEVDS19BRlRSKTsKKwkJY3B1X2RvX2lkbGUoKTsKKwl9CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTIxNCwxOTYgKzE2MywxNiBAQAogCWNwdV9wbV9lbnRlcigpOwogCiAJZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCgpOwotCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQotCQlleHlub3NfY3B1X3NhdmVfcmVnaXN0ZXIoKTsKIAogCWNwdV9zdXNwZW5kKDAsIGV4eW5vc19hZnRyX2ZpbmlzaGVyKTsKIAogCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KSB7CiAJCXNjdV9lbmFibGUoUzVQX1ZBX1NDVSk7Ci0JCWV4eW5vc19jcHVfcmVzdG9yZV9yZWdpc3RlcigpOworCQlpZiAoY2FsbF9maXJtd2FyZV9vcChyZXN1bWUpID09IC1FTk9TWVMpCisJCQlleHlub3NfY3B1X3Jlc3RvcmVfcmVnaXN0ZXIoKTsKIAl9CiAKIAlleHlub3NfcG1fY2VudHJhbF9yZXN1bWUoKTsKIAogCWNwdV9wbV9leGl0KCk7CiB9Ci0KLXN0YXRpYyBpbnQgZXh5bm9zX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnKQotewotI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCi0Jb3V0ZXJfZmx1c2hfYWxsKCk7Ci0jZW5kaWYKLQotCWlmIChzb2NfaXNfZXh5bm9zNTI1MCgpKQotCQlmbHVzaF9jYWNoZV9hbGwoKTsKLQotCS8qIGlzc3VlIHRoZSBzdGFuZGJ5IHNpZ25hbCBpbnRvIHRoZSBwbSB1bml0LiAqLwotCWNwdV9kb19pZGxlKCk7Ci0KLQlwcl9pbmZvKCJGYWlsZWQgdG8gc3VzcGVuZCB0aGUgc3lzdGVtXG4iKTsKLQlyZXR1cm4gMTsgLyogQWJvcnRpbmcgc3VzcGVuZCAqLwotfQotCi1zdGF0aWMgdm9pZCBleHlub3NfcG1fcHJlcGFyZSh2b2lkKQotewotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQkvKiBTZXQgd2FrZS11cCBtYXNrIHJlZ2lzdGVycyAqLwotCXBtdV9yYXdfd3JpdGVsKGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSwgUzVQX0VJTlRfV0FLRVVQX01BU0spOwotCXBtdV9yYXdfd3JpdGVsKGV4eW5vc19pcnF3YWtlX2ludG1hc2sgJiB+KDEgPDwgMzEpLCBTNVBfV0FLRVVQX01BU0spOwotCi0JczNjX3BtX2RvX3NhdmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7Ci0KLQlpZiAoc29jX2lzX2V4eW5vczUyNTAoKSkgewotCQlzM2NfcG1fZG9fc2F2ZShleHlub3M1X3N5c19zYXZlLCBBUlJBWV9TSVpFKGV4eW5vczVfc3lzX3NhdmUpKTsKLQkJLyogRGlzYWJsZSBVU0VfUkVURU5USU9OIG9mIEpQRUdfTUVNX09QVElPTiAqLwotCQl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfSlBFR19NRU1fT1BUSU9OKTsKLQkJdG1wICY9IH5FWFlOT1M1X09QVElPTl9VU0VfUkVURU5USU9OOwotCQlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzVfSlBFR19NRU1fT1BUSU9OKTsKLQl9Ci0KLQkvKiBTZXQgdmFsdWUgb2YgcG93ZXIgZG93biByZWdpc3RlciBmb3Igc2xlZXAgbW9kZSAqLwotCi0JZXh5bm9zX3N5c19wb3dlcmRvd25fY29uZihTWVNfU0xFRVApOwotCXBtdV9yYXdfd3JpdGVsKFM1UF9DSEVDS19TTEVFUCwgUzVQX0lORk9STTEpOwotCi0JLyogZW5zdXJlIGF0IGxlYXN0IElORk9STTAgaGFzIHRoZSByZXN1bWUgYWRkcmVzcyAqLwotCi0JcG11X3Jhd193cml0ZWwodmlydF90b19waHlzKGV4eW5vc19jcHVfcmVzdW1lKSwgUzVQX0lORk9STTApOwotfQotCi1zdGF0aWMgaW50IGV4eW5vc19wbV9zdXNwZW5kKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlleHlub3NfcG1fY2VudHJhbF9zdXNwZW5kKCk7Ci0KLQkvKiBTZXR0aW5nIFNFUV9PUFRJT04gcmVnaXN0ZXIgKi8KLQotCXRtcCA9IChTNVBfVVNFX1NUQU5EQllfV0ZJMCB8IFM1UF9VU0VfU1RBTkRCWV9XRkUwKTsKLQlwbXVfcmF3X3dyaXRlbCh0bXAsIFM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOwotCi0JaWYgKHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpCi0JCWV4eW5vc19jcHVfc2F2ZV9yZWdpc3RlcigpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4eW5vc19wbV9yZXN1bWUodm9pZCkKLXsKLQlpZiAoZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKCkpCi0JCWdvdG8gZWFybHlfd2FrZXVwOwotCi0JaWYgKHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpCi0JCWV4eW5vc19jcHVfcmVzdG9yZV9yZWdpc3RlcigpOwotCi0JLyogRm9yIHJlbGVhc2UgcmV0ZW50aW9uICovCi0KLQlwbXVfcmF3X3dyaXRlbCgoMSA8PCAyOCksIFM1UF9QQURfUkVUX01BVURJT19PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfR1BJT19PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfVUFSVF9PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfTU1DQV9PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfTU1DQl9PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfRUJJQV9PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfRUJJQl9PUFRJT04pOwotCi0JaWYgKHNvY19pc19leHlub3M1MjUwKCkpCi0JCXMzY19wbV9kb19yZXN0b3JlKGV4eW5vczVfc3lzX3NhdmUsCi0JCQlBUlJBWV9TSVpFKGV4eW5vczVfc3lzX3NhdmUpKTsKLQotCXMzY19wbV9kb19yZXN0b3JlX2NvcmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7Ci0KLQlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKLQkJc2N1X2VuYWJsZShTNVBfVkFfU0NVKTsKLQotZWFybHlfd2FrZXVwOgotCi0JLyogQ2xlYXIgU0xFRVAgbW9kZSBzZXQgaW4gSU5GT1JNMSAqLwotCXBtdV9yYXdfd3JpdGVsKDB4MCwgUzVQX0lORk9STTEpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGV4eW5vc19wbV9zeXNjb3JlX29wcyA9IHsKLQkuc3VzcGVuZAk9IGV4eW5vc19wbV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gZXh5bm9zX3BtX3Jlc3VtZSwKLX07Ci0KLS8qCi0gKiBTdXNwZW5kIE9wcwotICovCi0KLXN0YXRpYyBpbnQgZXh5bm9zX3N1c3BlbmRfZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQotewotCWludCByZXQ7Ci0KLQlzM2NfcG1fZGVidWdfaW5pdCgpOwotCi0JUzNDX1BNREJHKCIlczogc3VzcGVuZGluZyB0aGUgc3lzdGVtLi4uXG4iLCBfX2Z1bmNfXyk7Ci0KLQlTM0NfUE1EQkcoIiVzOiB3YWtldXAgbWFza3M6ICUwOHgsJTA4eFxuIiwgX19mdW5jX18sCi0JCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrLCBleHlub3NfZ2V0X2VpbnRfd2FrZV9tYXNrKCkpOwotCi0JaWYgKGV4eW5vc19pcnF3YWtlX2ludG1hc2sgPT0gLTFVCi0JICAgICYmIGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSA9PSAtMVUpIHsKLQkJcHJfZXJyKCIlczogTm8gd2FrZS11cCBzb3VyY2VzIVxuIiwgX19mdW5jX18pOwotCQlwcl9lcnIoIiVzOiBBYm9ydGluZyBzbGVlcFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzM2NfcG1fc2F2ZV91YXJ0cygpOwotCWV4eW5vc19wbV9wcmVwYXJlKCk7Ci0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0JczNjX3BtX2NoZWNrX3N0b3JlKCk7Ci0KLQlyZXQgPSBjcHVfc3VzcGVuZCgwLCBleHlub3NfY3B1X3N1c3BlbmQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlzM2NfcG1fcmVzdG9yZV91YXJ0cygpOwotCi0JUzNDX1BNREJHKCIlczogd2FrZXVwIHN0YXQ6ICUwOHhcbiIsIF9fZnVuY19fLAotCQkJcG11X3Jhd19yZWFkbChTNVBfV0FLRVVQX1NUQVQpKTsKLQotCXMzY19wbV9jaGVja19yZXN0b3JlKCk7Ci0KLQlTM0NfUE1EQkcoIiVzOiByZXN1bWluZyB0aGUgc3lzdGVtLi4uXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBleHlub3Nfc3VzcGVuZF9wcmVwYXJlKHZvaWQpCi17Ci0JczNjX3BtX2NoZWNrX3ByZXBhcmUoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBleHlub3Nfc3VzcGVuZF9maW5pc2godm9pZCkKLXsKLQlzM2NfcG1fY2hlY2tfY2xlYW51cCgpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGV4eW5vc19zdXNwZW5kX29wcyA9IHsKLQkuZW50ZXIJCT0gZXh5bm9zX3N1c3BlbmRfZW50ZXIsCi0JLnByZXBhcmUJPSBleHlub3Nfc3VzcGVuZF9wcmVwYXJlLAotCS5maW5pc2gJCT0gZXh5bm9zX3N1c3BlbmRfZmluaXNoLAotCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAotfTsKLQotdm9pZCBfX2luaXQgZXh5bm9zX3BtX2luaXQodm9pZCkKLXsKLQl1MzIgdG1wOwotCi0JLyogUGxhdGZvcm0tc3BlY2lmaWMgR0lDIGNhbGxiYWNrICovCi0JZ2ljX2FyY2hfZXh0bi5pcnFfc2V0X3dha2UgPSBleHlub3NfaXJxX3NldF93YWtlOwotCi0JLyogQWxsIHdha2V1cCBkaXNhYmxlICovCi0JdG1wID0gcG11X3Jhd19yZWFkbChTNVBfV0FLRVVQX01BU0spOwotCXRtcCB8PSAoKDB4RkYgPDwgOCkgfCAoMHgxRiA8PCAxKSk7Ci0JcG11X3Jhd193cml0ZWwodG1wLCBTNVBfV0FLRVVQX01BU0spOwotCi0JcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmV4eW5vc19wbV9zeXNjb3JlX29wcyk7Ci0Jc3VzcGVuZF9zZXRfb3BzKCZleHlub3Nfc3VzcGVuZF9vcHMpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvcG11LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYwppbmRleCBmZjlkMjNmLi5jMTU3NjFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwogICoKICAqIEVYWU5PUyAtIENQVSBQTVUoUG93ZXIgTWFuYWdlbWVudCBVbml0KSBzdXBwb3J0CkBAIC0xMCwxMiArMTAsMTM2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCi0jaW5jbHVkZSAiY29tbW9uLmgiCisKKyNpbmNsdWRlICJleHlub3MtcG11LmgiCiAjaW5jbHVkZSAicmVncy1wbXUuaCIKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfcG11X2NvbmYgKmV4eW5vc19wbXVfY29uZmlnOworI2RlZmluZSBQTVVfVEFCTEVfRU5ECSgtMVUpCisKK3N0cnVjdCBleHlub3NfcG11X2NvbmYgeworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdTggdmFsW05VTV9TWVNfUE9XRVJET1dOXTsKK307CisKK3N0cnVjdCBleHlub3NfcG11X2RhdGEgeworCWNvbnN0IHN0cnVjdCBleHlub3NfcG11X2NvbmYgKnBtdV9jb25maWc7CisJY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfY29uZiAqcG11X2NvbmZpZ19leHRyYTsKKworCXZvaWQgKCpwbXVfaW5pdCkodm9pZCk7CisJdm9pZCAoKnBvd2VyZG93bl9jb25mKShlbnVtIHN5c19wb3dlcmRvd24pOworCXZvaWQgKCpwb3dlcmRvd25fY29uZl9leHRyYSkoZW51bSBzeXNfcG93ZXJkb3duKTsKK307CisKK3N0cnVjdCBleHlub3NfcG11X2NvbnRleHQgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwljb25zdCBzdHJ1Y3QgZXh5bm9zX3BtdV9kYXRhICpwbXVfZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBtdV9iYXNlX2FkZHI7CitzdGF0aWMgc3RydWN0IGV4eW5vc19wbXVfY29udGV4dCAqcG11X2NvbnRleHQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbXVfcmF3X3dyaXRlbCh1MzIgdmFsLCB1MzIgb2Zmc2V0KQoreworCXdyaXRlbF9yZWxheGVkKHZhbCwgcG11X2Jhc2VfYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBtdV9yYXdfcmVhZGwodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChwbXVfYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBleHlub3NfcG11X2NvbmYgZXh5bm9zMzI1MF9wbXVfY29uZmlnW10gPSB7CisJLyogeyAub2Zmc2V0ID0gb2Zmc2V0LCAudmFsID0geyBBRlRSLCBXLUFGVFIsIFNMRUVQIH0gKi8KKwl7IEVYWU5PUzNfQVJNX0NPUkUwX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgyfSB9LAorCXsgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMF9MT0NBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMF9DRU5UUkFMX1NZU19QV1JfUkVHLCB7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0FSTV9DT1JFMV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4Mn0gfSwKKwl7IEVYWU5PUzNfRElTX0lSUV9BUk1fQ09SRTFfTE9DQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfRElTX0lSUV9BUk1fQ09SRTFfQ0VOVFJBTF9TWVNfUFdSX1JFRywgeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19JU1BfQVJNX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfRElTX0lSUV9JU1BfQVJNX0xPQ0FMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0RJU19JUlFfSVNQX0FSTV9DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0FSTV9DT01NT05fU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDJ9IH0sCisJeyBFWFlOT1MzX0FSTV9MMl9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDN9IH0sCisJeyBFWFlOT1MzX0NNVV9BQ0xLU1RPUF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1NDTEtTVE9QX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfUkVTRVRfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX0RSQU1fRlJFUV9ET1dOX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgxfSB9LAorCXsgRVhZTk9TM19ERFJQSFlfRExMT0ZGX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgxfSB9LAorCXsgRVhZTk9TM19MUEREUl9QSFlfRExMX0xPQ0tfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MX0gfSwKKwl7IEVYWU5PUzNfQ01VX0FDTEtTVE9QX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1NDTEtTVE9QX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX01QTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19CUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfVlBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX0VQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19VUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MX0gfSwKKwl7IEVYWU5PUzNfRVBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19NUExMVVNFUl9TWVNDTEtfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0JQTExVU0VSX1NZU0NMS19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX0NMS1NUT1BfQ0FNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfQ0xLU1RPUF9NRkNfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0NNVV9DTEtTVE9QX0czRF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX0NMS1NUT1BfTENEMF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX0NMS1NUT1BfSVNQX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfQ0xLU1RPUF9NQVVESU9fU1lTX1BXUl9SRUcsCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX0NBTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX01GQ19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX0czRF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX0xDRDBfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0NNVV9SRVNFVF9JU1BfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0NNVV9SRVNFVF9NQVVESU9fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX1RPUF9CVVNfU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfUkVURU5USU9OX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgxfSB9LAorCXsgRVhZTk9TM19UT1BfUFdSX1NZU19QV1JfUkVHLAkJCXsgMHgzLCAweDMsIDB4M30gfSwKKwl7IEVYWU5PUzNfVE9QX0JVU19DT1JFQkxLX1NZU19QV1JfUkVHLAkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfUkVURU5USU9OX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MX0gfSwKKwl7IEVYWU5PUzNfVE9QX1BXUl9DT1JFQkxLX1NZU19QV1JfUkVHLAkJeyAweDMsIDB4MywgMHgzfSB9LAorCXsgRVhZTk9TM19MT0dJQ19SRVNFVF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfT1NDQ0xLX0dBVEVfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDF9IH0sCisJeyBFWFlOT1MzX0xPR0lDX1JFU0VUX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfT1NDQ0xLX0dBVEVfQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MCwgMHgxfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX0RSQU1fU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9NQVVESU9fU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9HUElPX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fVUFSVF9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX01NQzBfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9NTUMxX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fTU1DMl9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX1NQSV9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX0VCSUFfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9FQklCX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fSlRBR19TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfSVNPTEFUSU9OX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfQUxWX1NFTF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfWFVTQlhUSV9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1hYVElfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19FWFRfUkVHVUxBVE9SX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfR1BJT19NT0RFX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19HUElPX01PREVfTUFVRElPX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfQVNCX1JFU0VUX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfQVNCX0lTT0xBVElPTl9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfQVNCX1JFU0VUX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfVE9QX0FTQl9JU09MQVRJT05fQ09SRUJMS19TWVNfUFdSX1JFRywgeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19DQU1fU1lTX1BXUl9SRUcsCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19NRkNfU1lTX1BXUl9SRUcsCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19HM0RfU1lTX1BXUl9SRUcsCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19MQ0QwX1NZU19QV1JfUkVHLAkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfSVNQX1NZU19QV1JfUkVHLAkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfTUFVRElPX1NZU19QV1JfUkVHLAkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1NZU0NMS19JU1BfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBQTVVfVEFCTEVfRU5ELH0sCit9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfY29uZiBleHlub3M0MjEwX3BtdV9jb25maWdbXSA9IHsKIAkvKiB7IC5vZmZzZXQgPSBvZmZzZXQsIC52YWwgPSB7IEFGVFIsIExQQSwgU0xFRVAgfSAqLwpAQCAtMjY0LDYgKzM4OCw3IEBACiAJeyBFWFlOT1M1X0lOVFJBTV9NRU1fU1lTX1BXUl9SRUcsCQl7IDB4MywgMHgwLCAweDB9IH0sCiAJeyBFWFlOT1M1X0lOVFJPTV9NRU1fU1lTX1BXUl9SRUcsCQl7IDB4MywgMHgwLCAweDB9IH0sCiAJeyBFWFlOT1M1X0pQRUdfTUVNX1NZU19QV1JfUkVHLAkJCXsgMHgzLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfSlBFR19NRU1fT1BUSU9OLAkJCXsgMHgxMCwgMHgxMCwgMHgwfSB9LAogCXsgRVhZTk9TNV9IU0lfTUVNX1NZU19QV1JfUkVHLAkJCXsgMHgzLCAweDAsIDB4MH0gfSwKIAl7IEVYWU5PUzVfTUNVSU9QX01FTV9TWVNfUFdSX1JFRywJCXsgMHgzLCAweDAsIDB4MH0gfSwKIAl7IEVYWU5PUzVfU0FUQV9NRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LApAQCAtMzE1LDYgKzQ0MCwxODkgQEAKIAl7IFBNVV9UQUJMRV9FTkQsfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZXh5bm9zX3BtdV9jb25mIGV4eW5vczU0MjBfcG11X2NvbmZpZ1tdID0geworCS8qIHsgLm9mZnNldCA9IG9mZnNldCwgLnZhbCA9IHsgQUZUUiwgTFBBLCBTTEVFUCB9ICovCisJeyBFWFlOT1M1X0FSTV9DT1JFMF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0RJU19JUlFfQVJNX0NPUkUwX0xPQ0FMX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9ESVNfSVJRX0FSTV9DT1JFMF9DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0FSTV9DT1JFMV9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0RJU19JUlFfQVJNX0NPUkUxX0xPQ0FMX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9ESVNfSVJRX0FSTV9DT1JFMV9DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0FSTV9DT1JFMl9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfQVJNX0NPUkUyX0xPQ0FMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfQVJNX0NPUkUyX0NFTlRSQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQVJNX0NPUkUzX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTNfTE9DQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTNfQ0VOVFJBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9LRkNfQ09SRTBfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMF9MT0NBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMF9DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0tGQ19DT1JFMV9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUxX0xPQ0FMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUxX0NFTlRSQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfS0ZDX0NPUkUyX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTJfTE9DQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTJfQ0VOVFJBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9LRkNfQ09SRTNfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFM19MT0NBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFM19DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0lTUF9BUk1fU1lTX1BXUl9SRUcsCQkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfRElTX0lSUV9JU1BfQVJNX0xPQ0FMX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9ESVNfSVJRX0lTUF9BUk1fQ0VOVFJBTF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0tGQ19DT01NT05fU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9BUk1fTDJfU1lTX1BXUl9SRUcsCQkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfS0ZDX0wyX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0FDTEtTVE9QX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1NDTEtTVE9QX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfQ01VX1JFU0VUX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0FDTEtTVE9QX1NZU01FTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1NDTEtTVE9QX1NZU01FTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfQ01VX1JFU0VUX1NZU01FTV9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X0RSQU1fRlJFUV9ET1dOX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfRERSUEhZX0RMTE9GRl9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDF9IH0sCisJeyBFWFlOT1M1X0REUlBIWV9ETExMT0NLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfQVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9NUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X1ZQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfRVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9CUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRFBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9JUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0tQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfTVBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQlBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUlBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9TUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X1RPUF9CVVNfU1lTX1BXUl9SRUcsCQkJCXsgMHgzLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfVE9QX1JFVEVOVElPTl9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDF9IH0sCisJeyBFWFlOT1M1X1RPUF9QV1JfU1lTX1BXUl9SRUcsCQkJCXsgMHgzLCAweDMsIDB4MH0gfSwKKwl7IEVYWU5PUzVfVE9QX0JVU19TWVNNRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9UT1BfUkVURU5USU9OX1NZU01FTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfVE9QX1BXUl9TWVNNRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9MT0dJQ19SRVNFVF9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X09TQ0NMS19HQVRFX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfTE9HSUNfUkVTRVRfU1lTTUVNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9PU0NDTEtfR0FURV9TWVNNRU1fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0lOVFJBTV9NRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgzfSB9LAorCXsgRVhZTk9TNTQyMF9JTlRST01fTUVNX1NZU19QV1JfUkVHLAkJCXsgMHgzLCAweDAsIDB4M30gfSwKKwl7IEVYWU5PUzVfUEFEX1JFVEVOVElPTl9EUkFNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9QQURfUkVURU5USU9OX01BVV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9KVEFHX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0RSQU1fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fVUFSVF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9NTUMwX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX01NQzFfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fTU1DMl9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9IU0lfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fRUJJQV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9FQklCX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX1NQSV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9EUkFNX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfUEFEX0lTT0xBVElPTl9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X1BBRF9JU09MQVRJT05fU1lTTUVNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9QQURfQUxWX1NFTF9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X1hVU0JYVElfU1lTX1BXUl9SRUcsCQkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfWFhUSV9TWVNfUFdSX1JFRywJCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9FWFRfUkVHVUxBVE9SX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfR1BJT19NT0RFX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfR1BJT19NT0RFX1NZU01FTV9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X0dQSU9fTU9ERV9NQVVfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9UT1BfQVNCX1JFU0VUX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfVE9QX0FTQl9JU09MQVRJT05fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0dTQ0xfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfSVNQX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X01GQ19TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9HM0RfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTUDFfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfTUFVX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHg3LCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0cyRF9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9NU0NfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRlNZU19TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9GU1lTMl9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QU0dFTl9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QRVJJQ19TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9XQ09SRV9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfQ0xLU1RPUF9HU0NMX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0NMS1NUT1BfSVNQX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0NMS1NUT1BfTUZDX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0NMS1NUT1BfRzNEX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRElTUDFfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX01BVV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRzJEX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9NU0NfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0ZTWVNfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX1BTR0VOX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9QRVJJQ19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfV0NPUkVfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9TWVNDTEtfR1NDTF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9TWVNDTEtfSVNQX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1NZU0NMS19NRkNfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfU1lTQ0xLX0czRF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRElTUDFfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfTUFVX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0cyRF9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19NU0NfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRlNZU19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19GU1lTMl9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19QU0dFTl9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19QRVJJQ19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19XQ09SRV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVMyX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfUkVTRVRfUFNHRU5fU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9SRVNFVF9QRVJJQ19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX1dDT1JFX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfUkVTRVRfR1NDTF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9SRVNFVF9JU1BfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfUkVTRVRfTUZDX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1JFU0VUX0czRF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9SRVNFVF9ESVNQMV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX01BVV9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9SRVNFVF9HMkRfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfUkVTRVRfTVNDX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVNfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBQTVVfVEFCTEVfRU5ELH0sCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGV4eW5vczMyNTBfbGlzdF9mZWVkW10gPSB7CisJRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oMCksCisJRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oMSksCisJRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oMiksCisJRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oMyksCisJRVhZTk9TM19BUk1fQ09NTU9OX09QVElPTiwKKwlFWFlOT1MzX1RPUF9QV1JfT1BUSU9OLAorCUVYWU5PUzNfQ09SRV9UT1BfUFdSX09QVElPTiwKKwlTNVBfQ0FNX09QVElPTiwKKwlTNVBfTUZDX09QVElPTiwKKwlTNVBfRzNEX09QVElPTiwKKwlTNVBfTENEMF9PUFRJT04sCisJUzVQX0lTUF9PUFRJT04sCit9OworCitzdGF0aWMgdm9pZCBleHlub3MzMjUwX3Bvd2VyZG93bl9jb25mX2V4dHJhKGVudW0gc3lzX3Bvd2VyZG93biBtb2RlKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBFbmFibGUgb25seSBTQ19GRUVEQkFDSyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV4eW5vczMyNTBfbGlzdF9mZWVkKTsgaSsrKSB7CisJCXRtcCA9IHBtdV9yYXdfcmVhZGwoZXh5bm9zMzI1MF9saXN0X2ZlZWRbaV0pOworCQl0bXAgJj0gfihFWFlOT1MzX09QVElPTl9VU0VfU0NfQ09VTlRFUik7CisJCXRtcCB8PSBFWFlOT1MzX09QVElPTl9VU0VfU0NfRkVFREJBQ0s7CisJCXBtdV9yYXdfd3JpdGVsKHRtcCwgZXh5bm9zMzI1MF9saXN0X2ZlZWRbaV0pOworCX0KKworCWlmIChtb2RlICE9IFNZU19TTEVFUCkKKwkJcmV0dXJuOworCisJcG11X3Jhd193cml0ZWwoWFVTQlhUSV9EVVJBVElPTiwgRVhZTk9TM19YVVNCWFRJX0RVUkFUSU9OKTsKKwlwbXVfcmF3X3dyaXRlbChYWFRJX0RVUkFUSU9OLCBFWFlOT1MzX1hYVElfRFVSQVRJT04pOworCXBtdV9yYXdfd3JpdGVsKEVYVF9SRUdVTEFUT1JfRFVSQVRJT04sIEVYWU5PUzNfRVhUX1JFR1VMQVRPUl9EVVJBVElPTik7CisJcG11X3Jhd193cml0ZWwoRVhUX1JFR1VMQVRPUl9DT1JFQkxLX0RVUkFUSU9OLAorCQkgICAgICAgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0NPUkVCTEtfRFVSQVRJT04pOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGV4eW5vczVfbGlzdF9ib3RoX2NudF9mZWVkW10gPSB7CiAJRVhZTk9TNV9BUk1fQ09SRTBfT1BUSU9OLAogCUVYWU5PUzVfQVJNX0NPUkUxX09QVElPTiwKQEAgLTMyOSwxMyArNjM3LDgyIEBACiAJRVhZTk9TNV9UT1BfUFdSX1NZU01FTV9PUFRJT04sCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGV4eW5vczVfbGlzdF9kaWFibGVfd2ZpX3dmZVtdID0geworc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBleHlub3M1X2xpc3RfZGlzYWJsZV93Zmlfd2ZlW10gPSB7CiAJRVhZTk9TNV9BUk1fQ09SRTFfT1BUSU9OLAogCUVYWU5PUzVfRlNZU19BUk1fT1BUSU9OLAogCUVYWU5PUzVfSVNQX0FSTV9PUFRJT04sCiB9OwogCi1zdGF0aWMgdm9pZCBleHlub3M1X2luaXRfcG11KHZvaWQpCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGV4eW5vczU0MjBfbGlzdF9kaXNhYmxlX3BtdV9yZWdbXSA9IHsKKwlFWFlOT1M1X0NNVV9DTEtTVE9QX0dTQ0xfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfQ0xLU1RPUF9JU1BfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfQ0xLU1RPUF9HM0RfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9ESVNQMV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX01BVV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0cyRF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX01TQ19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0ZTWVNfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9QU0dFTl9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX1BFUklDX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfV0NPUkVfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfU1lTQ0xLX0dTQ0xfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfU1lTQ0xLX0lTUF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9TWVNDTEtfRzNEX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19ESVNQMV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfTUFVX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19HMkRfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX01TQ19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRlNZU19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRlNZUzJfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX1BTR0VOX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19QRVJJQ19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfV0NPUkVfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfRlNZUzJfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfUFNHRU5fU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfUEVSSUNfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfV0NPUkVfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfUkVTRVRfR1NDTF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9SRVNFVF9JU1BfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfUkVTRVRfRzNEX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1JFU0VUX0RJU1AxX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1JFU0VUX01BVV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9SRVNFVF9HMkRfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfTVNDX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVNfU1lTX1BXUl9SRUcsCit9OworCitzdGF0aWMgdm9pZCBleHlub3M1X3Bvd2VyX29mZih2b2lkKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlwcl9pbmZvKCJQb3dlciBkb3duLlxuIik7CisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1NfUFNfSE9MRF9DT05UUk9MKTsKKwl0bXAgXj0gKDEgPDwgOCk7CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1NfUFNfSE9MRF9DT05UUk9MKTsKKworCS8qIFdhaXQgYSBsaXR0bGUgc28gd2UgZG9uJ3QgZ2l2ZSBhIGZhbHNlIHdhcm5pbmcgYmVsb3cgKi8KKwltZGVsYXkoMTAwKTsKKworCXByX2VycigiUG93ZXIgZG93biBmYWlsZWQsIHBsZWFzZSBwb3dlciBvZmYgc3lzdGVtIG1hbnVhbGx5LlxuIik7CisJd2hpbGUgKDEpCisJCTsKK30KKwordm9pZCBleHlub3M1NDIwX3Bvd2VyZG93bl9jb25mKGVudW0gc3lzX3Bvd2VyZG93biBtb2RlKQoreworCXUzMiB0aGlzX2NsdXN0ZXI7CisKKwl0aGlzX2NsdXN0ZXIgPSBNUElEUl9BRkZJTklUWV9MRVZFTChyZWFkX2NwdWlkX21waWRyKCksIDEpOworCisJLyoKKwkgKiBzZXQgdGhlIGNsdXN0ZXIgaWQgdG8gSVJPTSByZWdpc3RlciB0byBlbnN1cmUgdGhhdCB3ZSB3YWtlCisJICogdXAgd2l0aCB0aGUgY3VycmVudCBjbHVzdGVyLgorCSAqLworCXBtdV9yYXdfd3JpdGVsKHRoaXNfY2x1c3RlciwgRVhZTk9TX0lST01fREFUQTIpOworfQorCisKK3N0YXRpYyB2b2lkIGV4eW5vczVfcG93ZXJkb3duX2NvbmYoZW51bSBzeXNfcG93ZXJkb3duIG1vZGUpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IHRtcDsKQEAgLTM0Myw3ICs3MjAsNyBAQAogCS8qCiAJICogRW5hYmxlIGJvdGggU0NfRkVFREJBQ0sgYW5kIFNDX0NPVU5URVIKIAkgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNV9saXN0X2JvdGhfY250X2ZlZWQpIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNV9saXN0X2JvdGhfY250X2ZlZWQpOyBpKyspIHsKIAkJdG1wID0gcG11X3Jhd19yZWFkbChleHlub3M1X2xpc3RfYm90aF9jbnRfZmVlZFtpXSk7CiAJCXRtcCB8PSAoRVhZTk9TNV9VU0VfU0NfRkVFREJBQ0sgfAogCQkJRVhZTk9TNV9VU0VfU0NfQ09VTlRFUik7CkBAIC0zNjAsMTEgKzczNywxMSBAQAogCS8qCiAJICogRGlzYWJsZSBXRkkvV0ZFIG9uIFhYWF9PUFRJT04KIAkgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNV9saXN0X2RpYWJsZV93Zmlfd2ZlKSA7IGkrKykgewotCQl0bXAgPSBwbXVfcmF3X3JlYWRsKGV4eW5vczVfbGlzdF9kaWFibGVfd2ZpX3dmZVtpXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNV9saXN0X2Rpc2FibGVfd2ZpX3dmZSk7IGkrKykgeworCQl0bXAgPSBwbXVfcmF3X3JlYWRsKGV4eW5vczVfbGlzdF9kaXNhYmxlX3dmaV93ZmVbaV0pOwogCQl0bXAgJj0gfihFWFlOT1M1X09QVElPTl9VU0VfU1RBTkRCWVdGRSB8CiAJCQkgRVhZTk9TNV9PUFRJT05fVVNFX1NUQU5EQllXRkkpOwotCQlwbXVfcmF3X3dyaXRlbCh0bXAsIGV4eW5vczVfbGlzdF9kaWFibGVfd2ZpX3dmZVtpXSk7CisJCXBtdV9yYXdfd3JpdGVsKHRtcCwgZXh5bm9zNV9saXN0X2Rpc2FibGVfd2ZpX3dmZVtpXSk7CiAJfQogfQogCkBAIC0zNzIsNTEgKzc0OSwyNTcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChzb2NfaXNfZXh5bm9zNTI1MCgpKQotCQlleHlub3M1X2luaXRfcG11KCk7CisJY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfZGF0YSAqcG11X2RhdGEgPSBwbXVfY29udGV4dC0+cG11X2RhdGE7CiAKLQlmb3IgKGkgPSAwOyAoZXh5bm9zX3BtdV9jb25maWdbaV0ub2Zmc2V0ICE9IFBNVV9UQUJMRV9FTkQpIDsgaSsrKQotCQlwbXVfcmF3X3dyaXRlbChleHlub3NfcG11X2NvbmZpZ1tpXS52YWxbbW9kZV0sCi0JCQkJZXh5bm9zX3BtdV9jb25maWdbaV0ub2Zmc2V0KTsKKwlpZiAocG11X2RhdGEtPnBvd2VyZG93bl9jb25mKQorCQlwbXVfZGF0YS0+cG93ZXJkb3duX2NvbmYobW9kZSk7CiAKLQlpZiAoc29jX2lzX2V4eW5vczQ0MTIoKSkgewotCQlmb3IgKGkgPSAwOyBleHlub3M0NDEyX3BtdV9jb25maWdbaV0ub2Zmc2V0ICE9IFBNVV9UQUJMRV9FTkQgOyBpKyspCi0JCQlwbXVfcmF3X3dyaXRlbChleHlub3M0NDEyX3BtdV9jb25maWdbaV0udmFsW21vZGVdLAotCQkJCQlleHlub3M0NDEyX3BtdV9jb25maWdbaV0ub2Zmc2V0KTsKKwlpZiAocG11X2RhdGEtPnBtdV9jb25maWcpIHsKKwkJZm9yIChpID0gMDsgKHBtdV9kYXRhLT5wbXVfY29uZmlnW2ldLm9mZnNldCAhPSBQTVVfVEFCTEVfRU5EKTsgaSsrKQorCQkJcG11X3Jhd193cml0ZWwocG11X2RhdGEtPnBtdV9jb25maWdbaV0udmFsW21vZGVdLAorCQkJCQlwbXVfZGF0YS0+cG11X2NvbmZpZ1tpXS5vZmZzZXQpOworCX0KKworCWlmIChwbXVfZGF0YS0+cG93ZXJkb3duX2NvbmZfZXh0cmEpCisJCXBtdV9kYXRhLT5wb3dlcmRvd25fY29uZl9leHRyYShtb2RlKTsKKworCWlmIChwbXVfZGF0YS0+cG11X2NvbmZpZ19leHRyYSkgeworCQlmb3IgKGkgPSAwOyBwbXVfZGF0YS0+cG11X2NvbmZpZ19leHRyYVtpXS5vZmZzZXQgIT0gUE1VX1RBQkxFX0VORDsgaSsrKQorCQkJcG11X3Jhd193cml0ZWwocG11X2RhdGEtPnBtdV9jb25maWdfZXh0cmFbaV0udmFsW21vZGVdLAorCQkJCQlwbXVfZGF0YS0+cG11X2NvbmZpZ19leHRyYVtpXS5vZmZzZXQpOwogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgZXh5bm9zX3BtdV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBleHlub3MzMjUwX3BtdV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHZhbHVlOwogCi0JZXh5bm9zX3BtdV9jb25maWcgPSBleHlub3M0MjEwX3BtdV9jb25maWc7CisJLyoKKwkgKiBUbyBwcmV2ZW50IGZyb20gaXNzdWluZyBuZXcgYnVzIHJlcXVlc3QgZm9ybSBMMiBtZW1vcnkgc3lzdGVtCisJICogSWYgY29yZSBzdGF0dXMgaXMgcG93ZXIgZG93biwgc2hvdWxkIGJlIHNldCAnMScgdG8gTDIgcG93ZXIgZG93bgorCSAqLworCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1MzX0FSTV9DT01NT05fT1BUSU9OKTsKKwl2YWx1ZSB8PSBFWFlOT1MzX09QVElPTl9TS0lQX0RFQUNUSVZBVEVfQUNFQUNQX0lOX1BXRE47CisJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PUzNfQVJNX0NPTU1PTl9PUFRJT04pOwogCi0JaWYgKHNvY19pc19leHlub3M0MjEwKCkpIHsKLQkJZXh5bm9zX3BtdV9jb25maWcgPSBleHlub3M0MjEwX3BtdV9jb25maWc7Ci0JCXByX2luZm8oIkVYWU5PUzQyMTAgUE1VIEluaXRpYWxpemVcbiIpOwotCX0gZWxzZSBpZiAoc29jX2lzX2V4eW5vczQyMTIoKSB8fCBzb2NfaXNfZXh5bm9zNDQxMigpKSB7Ci0JCWV4eW5vc19wbXVfY29uZmlnID0gZXh5bm9zNHgxMl9wbXVfY29uZmlnOwotCQlwcl9pbmZvKCJFWFlOT1M0eDEyIFBNVSBJbml0aWFsaXplXG4iKTsKLQl9IGVsc2UgaWYgKHNvY19pc19leHlub3M1MjUwKCkpIHsKLQkJLyoKLQkJICogV2hlbiBTWVNfV0RUUkVTRVQgaXMgc2V0LCB3YXRjaGRvZyB0aW1lciByZXNldCByZXF1ZXN0Ci0JCSAqIGlzIGlnbm9yZWQgYnkgcG93ZXIgbWFuYWdlbWVudCB1bml0LgotCQkgKi8KLQkJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfQVVUT19XRFRSRVNFVF9ESVNBQkxFKTsKLQkJdmFsdWUgJj0gfkVYWU5PUzVfU1lTX1dEVFJFU0VUOwotCQlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNV9BVVRPX1dEVFJFU0VUX0RJU0FCTEUpOworCS8qIEVuYWJsZSBVU0VfU1RBTkRCWV9XRkkgZm9yIGFsbCBDT1JFICovCisJcG11X3Jhd193cml0ZWwoUzVQX1VTRV9TVEFOREJZX1dGSV9BTEwsIFM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOwogCi0JCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1M1X01BU0tfV0RUUkVTRVRfUkVRVUVTVCk7Ci0JCXZhbHVlICY9IH5FWFlOT1M1X1NZU19XRFRSRVNFVDsKLQkJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PUzVfTUFTS19XRFRSRVNFVF9SRVFVRVNUKTsKKwkvKgorCSAqIFNldCBQU0hPTEQgcG9ydCBmb3Igb3V0cHV0IGhpZ2gKKwkgKi8KKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoUzVQX1BTX0hPTERfQ09OVFJPTCk7CisJdmFsdWUgfD0gUzVQX1BTX0hPTERfT1VUUFVUX0hJR0g7CisJcG11X3Jhd193cml0ZWwodmFsdWUsIFM1UF9QU19IT0xEX0NPTlRST0wpOwogCi0JCWV4eW5vc19wbXVfY29uZmlnID0gZXh5bm9zNTI1MF9wbXVfY29uZmlnOwotCQlwcl9pbmZvKCJFWFlOT1M1MjUwIFBNVSBJbml0aWFsaXplXG4iKTsKLQl9IGVsc2UgewotCQlwcl9pbmZvKCJFWFlOT1M6IFBNVSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkvKgorCSAqIEVuYWJsZSBzaWduYWwgZm9yIFBTSE9MRCBwb3J0CisJICovCisJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKFM1UF9QU19IT0xEX0NPTlRST0wpOworCXZhbHVlIHw9IFM1UF9QU19IT0xEX0VOOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBTNVBfUFNfSE9MRF9DT05UUk9MKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNTI1MF9wbXVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwkvKgorCSAqIFdoZW4gU1lTX1dEVFJFU0VUIGlzIHNldCwgd2F0Y2hkb2cgdGltZXIgcmVzZXQgcmVxdWVzdAorCSAqIGlzIGlnbm9yZWQgYnkgcG93ZXIgbWFuYWdlbWVudCB1bml0LgorCSAqLworCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1M1X0FVVE9fV0RUUkVTRVRfRElTQUJMRSk7CisJdmFsdWUgJj0gfkVYWU5PUzVfU1lTX1dEVFJFU0VUOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1M1X0FVVE9fV0RUUkVTRVRfRElTQUJMRSk7CisKKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNV9NQVNLX1dEVFJFU0VUX1JFUVVFU1QpOworCXZhbHVlICY9IH5FWFlOT1M1X1NZU19XRFRSRVNFVDsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNV9NQVNLX1dEVFJFU0VUX1JFUVVFU1QpOworfQorCitzdGF0aWMgdm9pZCBleHlub3M1NDIwX3BtdV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWludCBpOworCisJLyoKKwkgKiBTZXQgdGhlIENNVV9SRVNFVCwgQ01VX1NZU0NMSyBhbmQgQ01VX0NMS1NUT1AgcmVnaXN0ZXJzCisJICogZm9yIGxvY2FsIHBvd2VyIGJsb2NrcyB0byBMb3cgaW5pdGlhbGx5IGFzIHBlciBUYWJsZSA4LTQ6CisJICogIlN5c3RlbS1MZXZlbCBQb3dlci1Eb3duIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzIi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHlub3M1NDIwX2xpc3RfZGlzYWJsZV9wbXVfcmVnKTsgaSsrKQorCQlwbXVfcmF3X3dyaXRlbCgwLCBleHlub3M1NDIwX2xpc3RfZGlzYWJsZV9wbXVfcmVnW2ldKTsKKworCS8qIEVuYWJsZSBVU0VfU1RBTkRCWV9XRkkgZm9yIGFsbCBDT1JFICovCisJcG11X3Jhd193cml0ZWwoRVhZTk9TNTQyMF9VU0VfU1RBTkRCWV9XRklfQUxMLCBTNVBfQ0VOVFJBTF9TRVFfT1BUSU9OKTsKKworCXZhbHVlICA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TX0wyX09QVElPTigwKSk7CisJdmFsdWUgJj0gfkVYWU5PUzVfVVNFX1JFVEVOVElPTjsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TX0wyX09QVElPTigwKSk7CisKKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TX0wyX09QVElPTigxKSk7CisJdmFsdWUgJj0gfkVYWU5PUzVfVVNFX1JFVEVOVElPTjsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TX0wyX09QVElPTigxKSk7CisKKwkvKgorCSAqIElmIEwyX0NPTU1PTiBpcyB0dXJuZWQgb2ZmLCBjbG9ja3MgcmVsYXRlZCB0byBBVEIgYXN5bmMKKwkgKiBicmlkZ2UgYXJlIGdhdGVkLiBUaHVzLCB3aGVuIElTUCBwb3dlciBpcyBnYXRlZCwgTFBJCisJICogbWF5IGdldCBzdHVjay4KKwkgKi8KKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9MUElfTUFTSyk7CisJdmFsdWUgfD0gRVhZTk9TNTQyMF9BVEJfSVNQX0FSTTsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNTQyMF9MUElfTUFTSyk7CisKKwl2YWx1ZSAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzU0MjBfTFBJX01BU0sxKTsKKwl2YWx1ZSB8PSBFWFlOT1M1NDIwX0FUQl9LRkM7CisJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PUzU0MjBfTFBJX01BU0sxKTsKKworCS8qIFByZXZlbnQgaXNzdWUgb2YgbmV3IGJ1cyByZXF1ZXN0IGZyb20gTDIgbWVtb3J5ICovCisJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9PUFRJT04pOworCXZhbHVlIHw9IEVYWU5PUzVfU0tJUF9ERUFDVElWQVRFX0FDRUFDUF9JTl9QV0ROOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1M1NDIwX0FSTV9DT01NT05fT1BUSU9OKTsKKworCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX0tGQ19DT01NT05fT1BUSU9OKTsKKwl2YWx1ZSB8PSBFWFlOT1M1X1NLSVBfREVBQ1RJVkFURV9BQ0VBQ1BfSU5fUFdETjsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNTQyMF9LRkNfQ09NTU9OX09QVElPTik7CisKKwkvKiBUaGlzIHNldHRpbmcgaXMgdG8gcmVkdWNlIHN1c3BlbmQvcmVzdW1lIHRpbWUgKi8KKwlwbXVfcmF3X3dyaXRlbChEVVJfV0FJVF9SRVNFVCwgRVhZTk9TNTQyMF9MT0dJQ19SRVNFVF9EVVJBVElPTjMpOworCisJLyogU2VyaWFsaXplZCBDUFUgd2FrZXVwIG9mIEVhZ2xlICovCisJcG11X3Jhd193cml0ZWwoU1BSRUFEX0VOQUJMRSwgRVhZTk9TNTQyMF9BUk1fSU5UUl9TUFJFQURfRU5BQkxFKTsKKworCXBtdV9yYXdfd3JpdGVsKFNQUkVBRF9VU0VfU1RBTkRXRkksCisJCQlFWFlOT1M1NDIwX0FSTV9JTlRSX1NQUkVBRF9VU0VfU1RBTkRCWVdGSSk7CisKKwlwbXVfcmF3X3dyaXRlbCgweDEsIEVYWU5PUzU0MjBfVVBfU0NIRURVTEVSKTsKKworCXBtX3Bvd2VyX29mZiA9IGV4eW5vczVfcG93ZXJfb2ZmOworCXByX2luZm8oIkVYWU5PUzU0MjAgUE1VIGluaXRpYWxpemVkXG4iKTsKK30KKworc3RhdGljIGludCBwbXVfcmVzdGFydF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQl1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKK3sKKwlwbXVfcmF3X3dyaXRlbCgweDEsIEVYWU5PU19TV1JFU0VUKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfcG11X2RhdGEgZXh5bm9zMzI1MF9wbXVfZGF0YSA9IHsKKwkucG11X2NvbmZpZwk9IGV4eW5vczMyNTBfcG11X2NvbmZpZywKKwkucG11X2luaXQJPSBleHlub3MzMjUwX3BtdV9pbml0LAorCS5wb3dlcmRvd25fY29uZl9leHRyYQk9IGV4eW5vczMyNTBfcG93ZXJkb3duX2NvbmZfZXh0cmEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfZGF0YSBleHlub3M0MjEwX3BtdV9kYXRhID0geworCS5wbXVfY29uZmlnCT0gZXh5bm9zNDIxMF9wbXVfY29uZmlnLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfcG11X2RhdGEgZXh5bm9zNDIxMl9wbXVfZGF0YSA9IHsKKwkucG11X2NvbmZpZwk9IGV4eW5vczR4MTJfcG11X2NvbmZpZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3BtdV9kYXRhIGV4eW5vczQ0MTJfcG11X2RhdGEgPSB7CisJLnBtdV9jb25maWcJCT0gZXh5bm9zNHgxMl9wbXVfY29uZmlnLAorCS5wbXVfY29uZmlnX2V4dHJhCT0gZXh5bm9zNDQxMl9wbXVfY29uZmlnLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfcG11X2RhdGEgZXh5bm9zNTI1MF9wbXVfZGF0YSA9IHsKKwkucG11X2NvbmZpZwk9IGV4eW5vczUyNTBfcG11X2NvbmZpZywKKwkucG11X2luaXQJPSBleHlub3M1MjUwX3BtdV9pbml0LAorCS5wb3dlcmRvd25fY29uZgk9IGV4eW5vczVfcG93ZXJkb3duX2NvbmYsCit9OworCitzdGF0aWMgc3RydWN0IGV4eW5vc19wbXVfZGF0YSBleHlub3M1NDIwX3BtdV9kYXRhID0geworCS5wbXVfY29uZmlnCT0gZXh5bm9zNTQyMF9wbXVfY29uZmlnLAorCS5wbXVfaW5pdAk9IGV4eW5vczU0MjBfcG11X2luaXQsCisJLnBvd2VyZG93bl9jb25mCT0gZXh5bm9zNTQyMF9wb3dlcmRvd25fY29uZiwKK307CisKKy8qCisgKiBQTVUgcGxhdGZvcm0gZHJpdmVyIGFuZCBkZXZpY2V0cmVlIGJpbmRpbmdzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBleHlub3NfcG11X29mX2RldmljZV9pZHNbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zMzI1MC1wbXUiLAorCQkuZGF0YSA9ICZleHlub3MzMjUwX3BtdV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczQyMTBfcG11X2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNDIxMl9wbXVfZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxMi1wbXUiLAorCQkuZGF0YSA9ICZleHlub3M0NDEyX3BtdV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczUyNTBfcG11X2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MjAtcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNTQyMF9wbXVfZGF0YSwKKwl9LAorCXsgLypzZW50aW5lbCovIH0sCit9OworCisvKgorICogRXh5bm9zIFBNVSByZXN0YXJ0IG5vdGlmaWVyLCBoYW5kbGVzIHJlc3RhcnQgZnVuY3Rpb25hbGl0eQorICovCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBtdV9yZXN0YXJ0X2hhbmRsZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwbXVfcmVzdGFydF9ub3RpZnksCisJLnByaW9yaXR5ID0gMTI4LAorfTsKKworc3RhdGljIGludCBleHlub3NfcG11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlwbXVfYmFzZV9hZGRyID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHBtdV9iYXNlX2FkZHIpKQorCQlyZXR1cm4gUFRSX0VSUihwbXVfYmFzZV9hZGRyKTsKKworCXBtdV9jb250ZXh0ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCisJCQlzaXplb2Yoc3RydWN0IGV4eW5vc19wbXVfY29udGV4dCksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXBtdV9jb250ZXh0KSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJcG11X2NvbnRleHQtPmRldiA9IGRldjsKIAorCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShleHlub3NfcG11X29mX2RldmljZV9pZHMsIGRldi0+b2Zfbm9kZSk7CisKKwlwbXVfY29udGV4dC0+cG11X2RhdGEgPSBtYXRjaC0+ZGF0YTsKKworCWlmIChwbXVfY29udGV4dC0+cG11X2RhdGEtPnBtdV9pbml0KQorCQlwbXVfY29udGV4dC0+cG11X2RhdGEtPnBtdV9pbml0KCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwbXVfY29udGV4dCk7CisKKwlyZXQgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJnBtdV9yZXN0YXJ0X2hhbmRsZXIpOworCWlmIChyZXQpCisJCWRldl93YXJuKGRldiwgImNhbid0IHJlZ2lzdGVyIHJlc3RhcnQgaGFuZGxlciBlcnI9JWRcbiIsIHJldCk7CisKKwlkZXZfZGJnKGRldiwgIkV4eW5vcyBQTVUgRHJpdmVyIHByb2JlIGRvbmVcbiIpOwogCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChleHlub3NfcG11X2luaXQpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBleHlub3NfcG11X2RyaXZlciA9IHsKKwkuZHJpdmVyICA9IHsKKwkJLm5hbWUgICA9ICJleHlub3MtcG11IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGV4eW5vc19wbXVfb2ZfZGV2aWNlX2lkcywKKwl9LAorCS5wcm9iZSA9IGV4eW5vc19wbXVfcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBleHlub3NfcG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZleHlub3NfcG11X2RyaXZlcik7CisKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKGV4eW5vc19wbXVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9yZWdzLXBtdS5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcmVncy1wbXUuaAppbmRleCA5NmExNTY5Li5iNWY0NDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9yZWdzLXBtdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3JlZ3MtcG11LmgKQEAgLTE5LDggKzE5LDI0IEBACiAjZGVmaW5lIFM1UF9DRU5UUkFMX1NFUV9PUFRJT04JCQkweDAyMDgKIAogI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZJMAkJCSgxIDw8IDE2KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZJMQkJCSgxIDw8IDE3KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZJMgkJCSgxIDw8IDE5KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZJMwkJCSgxIDw8IDIwKQogI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZFMAkJCSgxIDw8IDI0KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZFMQkJCSgxIDw8IDI1KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZFMgkJCSgxIDw8IDI3KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZFMwkJCSgxIDw8IDI4KQogCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRklfQUxMIFwKKwkoUzVQX1VTRV9TVEFOREJZX1dGSTAgfCBTNVBfVVNFX1NUQU5EQllfV0ZJMSB8IFwKKwkgUzVQX1VTRV9TVEFOREJZX1dGSTIgfCBTNVBfVVNFX1NUQU5EQllfV0ZJMyB8IFwKKwkgUzVQX1VTRV9TVEFOREJZX1dGRTAgfCBTNVBfVVNFX1NUQU5EQllfV0ZFMSB8IFwKKwkgUzVQX1VTRV9TVEFOREJZX1dGRTIgfCBTNVBfVVNFX1NUQU5EQllfV0ZFMykKKworI2RlZmluZSBTNVBfVVNFX0RFTEFZRURfUkVTRVRfQVNTRVJUSU9OCQlCSVQoMTIpCisKKyNkZWZpbmUgRVhZTk9TX0NPUkVfUE9fUkVTRVQobikJCQkoKDEgPDwgNCkgPDwgbikKKyNkZWZpbmUgRVhZTk9TX1dBS0VVUF9GUk9NX0xPV1BXUgkJKDEgPDwgMjgpCiAjZGVmaW5lIEVYWU5PU19TV1JFU0VUCQkJCTB4MDQwMAogI2RlZmluZSBFWFlOT1M1NDQwX1NXUkVTRVQJCQkweDAwQzQKIApAQCAtMzUsNiArNTEsNyBAQAogI2RlZmluZSBTNVBfSU5GT1JNNwkJCQkweDA4MUMKICNkZWZpbmUgUzVQX1BNVV9TUEFSRTMJCQkJMHgwOTBDCiAKKyNkZWZpbmUgRVhZTk9TX0lST01fREFUQTIJCQkweDA5ODgKICNkZWZpbmUgUzVQX0FSTV9DT1JFMF9MT1dQV1IJCQkweDEwMDAKICNkZWZpbmUgUzVQX0RJU19JUlFfQ09SRTAJCQkweDEwMDQKICNkZWZpbmUgUzVQX0RJU19JUlFfQ0VOVFJBTDAJCQkweDEwMDgKQEAgLTEwNiw2ICsxMjMsOCBAQAogCQkJKEVYWU5PU19BUk1fQ09SRTBfQ09ORklHVVJBVElPTiArICgweDgwICogKF9ucikpKQogI2RlZmluZSBFWFlOT1NfQVJNX0NPUkVfU1RBVFVTKF9ucikJCVwKIAkJCShFWFlOT1NfQVJNX0NPUkVfQ09ORklHVVJBVElPTihfbnIpICsgMHg0KQorI2RlZmluZSBFWFlOT1NfQVJNX0NPUkVfT1BUSU9OKF9ucikJCVwKKwkJCShFWFlOT1NfQVJNX0NPUkVfQ09ORklHVVJBVElPTihfbnIpICsgMHg4KQogCiAjZGVmaW5lIEVYWU5PU19BUk1fQ09NTU9OX0NPTkZJR1VSQVRJT04JCTB4MjUwMAogI2RlZmluZSBFWFlOT1NfQ09NTU9OX0NPTkZJR1VSQVRJT04oX25yKQlcCkBAIC0xMTUsNiArMTM0LDMxIEBACiAjZGVmaW5lIEVYWU5PU19DT01NT05fT1BUSU9OKF9ucikJCVwKIAkJCShFWFlOT1NfQ09NTU9OX0NPTkZJR1VSQVRJT04oX25yKSArIDB4OCkKIAorI2RlZmluZSBFWFlOT1NfQ09SRV9MT0NBTF9QV1JfRU4JCTB4MworCisjZGVmaW5lIEVYWU5PU19BUk1fQ09NTU9OX1NUQVRVUwkJMHgyNTA0CisjZGVmaW5lIEVYWU5PU19DT01NT05fT1BUSU9OKF9ucikJCVwKKwkJCShFWFlOT1NfQ09NTU9OX0NPTkZJR1VSQVRJT04oX25yKSArIDB4OCkKKworI2RlZmluZSBFWFlOT1NfQVJNX0wyX0NPTkZJR1VSQVRJT04JCTB4MjYwMAorI2RlZmluZSBFWFlOT1NfTDJfQ09ORklHVVJBVElPTihfbnIpCQlcCisJCQkoRVhZTk9TX0FSTV9MMl9DT05GSUdVUkFUSU9OICsgKChfbnIpICogMHg4MCkpCisjZGVmaW5lIEVYWU5PU19MMl9TVEFUVVMoX25yKQkJCVwKKwkJCShFWFlOT1NfTDJfQ09ORklHVVJBVElPTihfbnIpICsgMHg0KQorI2RlZmluZSBFWFlOT1NfTDJfT1BUSU9OKF9ucikJCQlcCisJCQkoRVhZTk9TX0wyX0NPTkZJR1VSQVRJT04oX25yKSArIDB4OCkKKyNkZWZpbmUgRVhZTk9TX0wyX0NPTU1PTl9QV1JfRU4JCQkweDMKKworI2RlZmluZSBFWFlOT1NfQVJNX0NPUkVfWF9TVEFUVVNfT0ZGU0VUCQkweDQKKworI2RlZmluZSBFWFlOT1M1X0FQTExfU1lTQ0xLX0NPTkZJR1VSQVRJT04JMHgyQTAwCisjZGVmaW5lIEVYWU5PUzVfQVBMTF9TWVNDTEtfU1RBVFVTCQkweDJBMDQKKworI2RlZmluZSBFWFlOT1M1X0FSTV9MMl9PUFRJT04JCQkweDI2MDgKKyNkZWZpbmUgRVhZTk9TNV9VU0VfUkVURU5USU9OCQkJQklUKDQpCisKKyNkZWZpbmUgRVhZTk9TNV9MMlJTVERJU0FCTEVfVkFMVUUJCUJJVCgzKQorCiAjZGVmaW5lIFM1UF9QQURfUkVUX01BVURJT19PUFRJT04JCTB4MzAyOAogI2RlZmluZSBTNVBfUEFEX1JFVF9HUElPX09QVElPTgkJCTB4MzEwOAogI2RlZmluZSBTNVBfUEFEX1JFVF9VQVJUX09QVElPTgkJCTB4MzEyOApAQCAtMTIzLDcgKzE2NywxOSBAQAogI2RlZmluZSBTNVBfUEFEX1JFVF9FQklBX09QVElPTgkJCTB4MzE4OAogI2RlZmluZSBTNVBfUEFEX1JFVF9FQklCX09QVElPTgkJCTB4MzFBOAogCisjZGVmaW5lIFM1UF9QU19IT0xEX0NPTlRST0wJCQkweDMzMEMKKyNkZWZpbmUgUzVQX1BTX0hPTERfRU4JCQkJKDEgPDwgMzEpCisjZGVmaW5lIFM1UF9QU19IT0xEX09VVFBVVF9ISUdICQkJKDMgPDwgOCkKKworI2RlZmluZSBTNVBfQ0FNX09QVElPTgkJCQkweDNDMDgKKyNkZWZpbmUgUzVQX01GQ19PUFRJT04JCQkJMHgzQzQ4CisjZGVmaW5lIFM1UF9HM0RfT1BUSU9OCQkJCTB4M0M2OAorI2RlZmluZSBTNVBfTENEMF9PUFRJT04JCQkJMHgzQzg4CisjZGVmaW5lIFM1UF9MQ0QxX09QVElPTgkJCQkweDNDQTgKKyNkZWZpbmUgUzVQX0lTUF9PUFRJT04JCQkJUzVQX0xDRDFfT1BUSU9OCisKICNkZWZpbmUgUzVQX0NPUkVfTE9DQUxfUFdSX0VOCQkJMHgzCisjZGVmaW5lIFM1UF9DT1JFX1dBS0VVUF9GUk9NX0xPQ0FMX0NGRwkJKDB4MyA8PCA4KQogCiAvKiBPbmx5IGZvciBFWFlOT1M0MjEwICovCiAjZGVmaW5lIFM1UF9DTVVfQ0xLU1RPUF9MQ0QxX0xPV1BXUgkweDExNTQKQEAgLTE4MiwxMSArMjM4LDExNiBAQAogI2RlZmluZSBTNVBfRElTX0lSUV9DT1JFMwkJCTB4MTAzNAogI2RlZmluZSBTNVBfRElTX0lSUV9DRU5UUkFMMwkJCTB4MTAzOAogCisvKiBPbmx5IGZvciBFWFlOT1MzWFhYICovCisjZGVmaW5lIEVYWU5PUzNfQVJNX0NPUkUwX1NZU19QV1JfUkVHCQkJMHgxMDAwCisjZGVmaW5lIEVYWU5PUzNfRElTX0lSUV9BUk1fQ09SRTBfTE9DQUxfU1lTX1BXUl9SRUcJMHgxMDA0CisjZGVmaW5lIEVYWU5PUzNfRElTX0lSUV9BUk1fQ09SRTBfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwMDgKKyNkZWZpbmUgRVhZTk9TM19BUk1fQ09SRTFfU1lTX1BXUl9SRUcJCQkweDEwMTAKKyNkZWZpbmUgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMV9MT0NBTF9TWVNfUFdSX1JFRwkweDEwMTQKKyNkZWZpbmUgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMV9DRU5UUkFMX1NZU19QV1JfUkVHCTB4MTAxOAorI2RlZmluZSBFWFlOT1MzX0lTUF9BUk1fU1lTX1BXUl9SRUcJCQkweDEwNTAKKyNkZWZpbmUgRVhZTk9TM19ESVNfSVJRX0lTUF9BUk1fTE9DQUxfU1lTX1BXUl9SRUcJMHgxMDU0CisjZGVmaW5lIEVYWU5PUzNfRElTX0lSUV9JU1BfQVJNX0NFTlRSQUxfU1lTX1BXUl9SRUcJMHgxMDU4CisjZGVmaW5lIEVYWU5PUzNfQVJNX0NPTU1PTl9TWVNfUFdSX1JFRwkJCTB4MTA4MAorI2RlZmluZSBFWFlOT1MzX0FSTV9MMl9TWVNfUFdSX1JFRwkJCTB4MTBDMAorI2RlZmluZSBFWFlOT1MzX0NNVV9BQ0xLU1RPUF9TWVNfUFdSX1JFRwkJMHgxMTAwCisjZGVmaW5lIEVYWU5PUzNfQ01VX1NDTEtTVE9QX1NZU19QV1JfUkVHCQkweDExMDQKKyNkZWZpbmUgRVhZTk9TM19DTVVfUkVTRVRfU1lTX1BXUl9SRUcJCQkweDExMEMKKyNkZWZpbmUgRVhZTk9TM19DTVVfQUNMS1NUT1BfQ09SRUJMS19TWVNfUFdSX1JFRwkweDExMTAKKyNkZWZpbmUgRVhZTk9TM19DTVVfU0NMS1NUT1BfQ09SRUJMS19TWVNfUFdSX1JFRwkweDExMTQKKyNkZWZpbmUgRVhZTk9TM19DTVVfUkVTRVRfQ09SRUJMS19TWVNfUFdSX1JFRwkJMHgxMTFDCisjZGVmaW5lIEVYWU5PUzNfQVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDExMjAKKyNkZWZpbmUgRVhZTk9TM19NUExMX1NZU0NMS19TWVNfUFdSX1JFRwkJCTB4MTEyNAorI2RlZmluZSBFWFlOT1MzX1ZQTExfU1lTQ0xLX1NZU19QV1JfUkVHCQkJMHgxMTI4CisjZGVmaW5lIEVYWU5PUzNfRVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDExMkMKKyNkZWZpbmUgRVhZTk9TM19NUExMVVNFUl9TWVNDTEtfU1lTX1BXUl9SRUcJCTB4MTEzMAorI2RlZmluZSBFWFlOT1MzX0JQTExVU0VSX1NZU0NMS19TWVNfUFdSX1JFRwkJMHgxMTM0CisjZGVmaW5lIEVYWU5PUzNfRVBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHCQkweDExMzgKKyNkZWZpbmUgRVhZTk9TM19DTVVfQ0xLU1RPUF9DQU1fU1lTX1BXUl9SRUcJCTB4MTE0MAorI2RlZmluZSBFWFlOT1MzX0NNVV9DTEtTVE9QX01GQ19TWVNfUFdSX1JFRwkJMHgxMTQ4CisjZGVmaW5lIEVYWU5PUzNfQ01VX0NMS1NUT1BfRzNEX1NZU19QV1JfUkVHCQkweDExNEMKKyNkZWZpbmUgRVhZTk9TM19DTVVfQ0xLU1RPUF9MQ0QwX1NZU19QV1JfUkVHCQkweDExNTAKKyNkZWZpbmUgRVhZTk9TM19DTVVfQ0xLU1RPUF9JU1BfU1lTX1BXUl9SRUcJCTB4MTE1NAorI2RlZmluZSBFWFlOT1MzX0NNVV9DTEtTVE9QX01BVURJT19TWVNfUFdSX1JFRwkJMHgxMTU4CisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX0NBTV9TWVNfUFdSX1JFRwkJMHgxMTYwCisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX01GQ19TWVNfUFdSX1JFRwkJMHgxMTY4CisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX0czRF9TWVNfUFdSX1JFRwkJMHgxMTZDCisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX0xDRDBfU1lTX1BXUl9SRUcJCTB4MTE3MAorI2RlZmluZSBFWFlOT1MzX0NNVV9SRVNFVF9JU1BfU1lTX1BXUl9SRUcJCTB4MTE3NAorI2RlZmluZSBFWFlOT1MzX0NNVV9SRVNFVF9NQVVESU9fU1lTX1BXUl9SRUcJCTB4MTE3OAorI2RlZmluZSBFWFlOT1MzX1RPUF9CVVNfU1lTX1BXUl9SRUcJCQkweDExODAKKyNkZWZpbmUgRVhZTk9TM19UT1BfUkVURU5USU9OX1NZU19QV1JfUkVHCQkweDExODQKKyNkZWZpbmUgRVhZTk9TM19UT1BfUFdSX1NZU19QV1JfUkVHCQkJMHgxMTg4CisjZGVmaW5lIEVYWU5PUzNfVE9QX0JVU19DT1JFQkxLX1NZU19QV1JfUkVHCQkweDExOTAKKyNkZWZpbmUgRVhZTk9TM19UT1BfUkVURU5USU9OX0NPUkVCTEtfU1lTX1BXUl9SRUcJMHgxMTk0CisjZGVmaW5lIEVYWU5PUzNfVE9QX1BXUl9DT1JFQkxLX1NZU19QV1JfUkVHCQkweDExOTgKKyNkZWZpbmUgRVhZTk9TM19MT0dJQ19SRVNFVF9TWVNfUFdSX1JFRwkJCTB4MTFBMAorI2RlZmluZSBFWFlOT1MzX09TQ0NMS19HQVRFX1NZU19QV1JfUkVHCQkJMHgxMUE0CisjZGVmaW5lIEVYWU5PUzNfTE9HSUNfUkVTRVRfQ09SRUJMS19TWVNfUFdSX1JFRwkJMHgxMUIwCisjZGVmaW5lIEVYWU5PUzNfT1NDQ0xLX0dBVEVfQ09SRUJMS19TWVNfUFdSX1JFRwkJMHgxMUI0CisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9EUkFNX1NZU19QV1JfUkVHCQkweDEyMDAKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX01BVURJT19TWVNfUFdSX1JFRwkweDEyMDQKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX1NQSV9TWVNfUFdSX1JFRwkJMHgxMjA4CisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9NTUMyX1NZU19QV1JfUkVHCQkweDEyMTgKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX0dQSU9fU1lTX1BXUl9SRUcJCTB4MTIyMAorI2RlZmluZSBFWFlOT1MzX1BBRF9SRVRFTlRJT05fVUFSVF9TWVNfUFdSX1JFRwkJMHgxMjI0CisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9NTUMwX1NZU19QV1JfUkVHCQkweDEyMjgKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX01NQzFfU1lTX1BXUl9SRUcJCTB4MTIyQworI2RlZmluZSBFWFlOT1MzX1BBRF9SRVRFTlRJT05fRUJJQV9TWVNfUFdSX1JFRwkJMHgxMjMwCisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9FQklCX1NZU19QV1JfUkVHCQkweDEyMzQKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX0pUQUdfU1lTX1BXUl9SRUcJCTB4MTIzOAorI2RlZmluZSBFWFlOT1MzX1BBRF9JU09MQVRJT05fU1lTX1BXUl9SRUcJCTB4MTI0MAorI2RlZmluZSBFWFlOT1MzX1BBRF9BTFZfU0VMX1NZU19QV1JfUkVHCQkJMHgxMjYwCisjZGVmaW5lIEVYWU5PUzNfWFVTQlhUSV9TWVNfUFdSX1JFRwkJCTB4MTI4MAorI2RlZmluZSBFWFlOT1MzX1hYVElfU1lTX1BXUl9SRUcJCQkweDEyODQKKyNkZWZpbmUgRVhZTk9TM19FWFRfUkVHVUxBVE9SX1NZU19QV1JfUkVHCQkweDEyQzAKKyNkZWZpbmUgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0NPUkVCTEtfU1lTX1BXUl9SRUcJMHgxMkM0CisjZGVmaW5lIEVYWU5PUzNfR1BJT19NT0RFX1NZU19QV1JfUkVHCQkJMHgxMzAwCisjZGVmaW5lIEVYWU5PUzNfR1BJT19NT0RFX01BVURJT19TWVNfUFdSX1JFRwkJMHgxMzQwCisjZGVmaW5lIEVYWU5PUzNfVE9QX0FTQl9SRVNFVF9TWVNfUFdSX1JFRwkJMHgxMzQ0CisjZGVmaW5lIEVYWU5PUzNfVE9QX0FTQl9JU09MQVRJT05fU1lTX1BXUl9SRUcJCTB4MTM0OAorI2RlZmluZSBFWFlOT1MzX1RPUF9BU0JfUkVTRVRfQ09SRUJMS19TWVNfUFdSX1JFRwkweDEzNTAKKyNkZWZpbmUgRVhZTk9TM19UT1BfQVNCX0lTT0xBVElPTl9DT1JFQkxLX1NZU19QV1JfUkVHCTB4MTM1NAorI2RlZmluZSBFWFlOT1MzX0NBTV9TWVNfUFdSX1JFRwkJCQkweDEzODAKKyNkZWZpbmUgRVhZTk9TM19NRkNfU1lTX1BXUl9SRUcJCQkJMHgxMzg4CisjZGVmaW5lIEVYWU5PUzNfRzNEX1NZU19QV1JfUkVHCQkJCTB4MTM4QworI2RlZmluZSBFWFlOT1MzX0xDRDBfU1lTX1BXUl9SRUcJCQkweDEzOTAKKyNkZWZpbmUgRVhZTk9TM19JU1BfU1lTX1BXUl9SRUcJCQkJMHgxMzk0CisjZGVmaW5lIEVYWU5PUzNfTUFVRElPX1NZU19QV1JfUkVHCQkJMHgxMzk4CisjZGVmaW5lIEVYWU5PUzNfRFJBTV9GUkVRX0RPV05fU1lTX1BXUl9SRUcJCTB4MTNCMAorI2RlZmluZSBFWFlOT1MzX0REUlBIWV9ETExPRkZfU1lTX1BXUl9SRUcJCTB4MTNCNAorI2RlZmluZSBFWFlOT1MzX0NNVV9TWVNDTEtfSVNQX1NZU19QV1JfUkVHCQkweDEzQjgKKyNkZWZpbmUgRVhZTk9TM19MUEREUl9QSFlfRExMX0xPQ0tfU1lTX1BXUl9SRUcJCTB4MTNDMAorI2RlZmluZSBFWFlOT1MzX0JQTExfU1lTQ0xLX1NZU19QV1JfUkVHCQkJMHgxM0M0CisjZGVmaW5lIEVYWU5PUzNfVVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDEzQzgKKworI2RlZmluZSBFWFlOT1MzX0FSTV9DT1JFMF9PUFRJT04JCQkweDIwMDgKKyNkZWZpbmUgRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oX25yKQlcCisJCQkoRVhZTk9TM19BUk1fQ09SRTBfT1BUSU9OICsgKChfbnIpICogMHg4MCkpCisKKyNkZWZpbmUgRVhZTk9TM19BUk1fQ09NTU9OX09QVElPTgkJCTB4MjQwOAorI2RlZmluZSBFWFlOT1MzX1RPUF9QV1JfT1BUSU9OCQkJCTB4MkM0OAorI2RlZmluZSBFWFlOT1MzX0NPUkVfVE9QX1BXUl9PUFRJT04JCQkweDJDQTgKKyNkZWZpbmUgRVhZTk9TM19YVVNCWFRJX0RVUkFUSU9OCQkJMHgzNDFDCisjZGVmaW5lIEVYWU5PUzNfWFhUSV9EVVJBVElPTgkJCQkweDM0M0MKKyNkZWZpbmUgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0RVUkFUSU9OCQkJMHgzNjFDCisjZGVmaW5lIEVYWU5PUzNfRVhUX1JFR1VMQVRPUl9DT1JFQkxLX0RVUkFUSU9OCQkweDM2M0MKKyNkZWZpbmUgWFVTQlhUSV9EVVJBVElPTgkJCQkweDAwMDAwQkI4CisjZGVmaW5lIFhYVElfRFVSQVRJT04JCQkJCVhVU0JYVElfRFVSQVRJT04KKyNkZWZpbmUgRVhUX1JFR1VMQVRPUl9EVVJBVElPTgkJCQkweDAwMDAxRDRDCisjZGVmaW5lIEVYVF9SRUdVTEFUT1JfQ09SRUJMS19EVVJBVElPTgkJCUVYVF9SRUdVTEFUT1JfRFVSQVRJT04KKworLyogZm9yIFhYWF9PUFRJT04gKi8KKyNkZWZpbmUgRVhZTk9TM19PUFRJT05fVVNFX1NDX0NPVU5URVIJCQkoMSA8PCAwKQorI2RlZmluZSBFWFlOT1MzX09QVElPTl9VU0VfU0NfRkVFREJBQ0sJCQkoMSA8PCAxKQorI2RlZmluZSBFWFlOT1MzX09QVElPTl9TS0lQX0RFQUNUSVZBVEVfQUNFQUNQX0lOX1BXRE4JKDEgPDwgNykKKwogLyogRm9yIEVYWU5PUzUgKi8KIAogI2RlZmluZSBFWFlOT1M1X0FVVE9fV0RUUkVTRVRfRElTQUJMRQkJCQkweDA0MDgKICNkZWZpbmUgRVhZTk9TNV9NQVNLX1dEVFJFU0VUX1JFUVVFU1QJCQkJMHgwNDBDCiAKKyNkZWZpbmUgRVhZTk9TNV9VU0VfUkVURU5USU9OCQkJQklUKDQpCiAjZGVmaW5lIEVYWU5PUzVfU1lTX1dEVFJFU0VUCQkJCQkoMSA8PCAyMCkKIAogI2RlZmluZSBFWFlOT1M1X0FSTV9DT1JFMF9TWVNfUFdSX1JFRwkJCQkweDEwMDAKQEAgLTMyNiw0ICs0ODcsMjA0IEBACiAJCSArIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKSk7CiB9CiAKKy8qIE9ubHkgZm9yIEVYWU5PUzU0MjAgKi8KKyNkZWZpbmUgRVhZTk9TNTQyMF9JU1BfQVJNX09QVElPTgkJCQkweDI0ODgKKyNkZWZpbmUgRVhZTk9TNTQyMF9MMlJTVERJU0FCTEVfVkFMVUUJCQkJQklUKDMpCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9MUElfTUFTSwkJCQkJMHgwMDA0CisjZGVmaW5lIEVYWU5PUzU0MjBfTFBJX01BU0sxCQkJCQkweDAwMDgKKyNkZWZpbmUgRVhZTk9TNTQyMF9VRlMJCQkJCQlCSVQoOCkKKyNkZWZpbmUgRVhZTk9TNTQyMF9BVEJfS0ZDCQkJCQlCSVQoMTMpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVRCX0lTUF9BUk0JCQkJCUJJVCgxOSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9FTVVMQVRJT04JCQkJCUJJVCgzMSkKKyNkZWZpbmUgQVRCX0lTUF9BUk0JCQkJCQlCSVQoMTIpCisjZGVmaW5lIEFUQl9LRkMJCQkJCQkJQklUKDEzKQorI2RlZmluZSBBVEJfTk9DCQkJCQkJCUJJVCgxNCkKKworI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9JTlRSX1NQUkVBRF9FTkFCTEUJCQkweDAxMDAKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fSU5UUl9TUFJFQURfVVNFX1NUQU5EQllXRkkJCTB4MDEwNAorI2RlZmluZSBFWFlOT1M1NDIwX1VQX1NDSEVEVUxFUgkJCQkJMHgwMTIwCisjZGVmaW5lIFNQUkVBRF9FTkFCTEUJCQkJCQkweEYKKyNkZWZpbmUgU1BSRUFEX1VTRV9TVEFORFdGSQkJCQkJMHhGCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9CQl9DT04xCQkJCQkweDA3ODQKKyNkZWZpbmUgRVhZTk9TNTQyMF9CQl9TRUxfRU4JCQkJCUJJVCgzMSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9CQl9QTU9TX0VOCQkJCQlCSVQoNykKKyNkZWZpbmUgRVhZTk9TNTQyMF9CQl8xMzAwWAkJCQkJMFhGCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fQ09SRTJfU1lTX1BXUl9SRUcJCQkweDEwMjAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0FSTV9DT1JFMl9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDI0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTJfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwMjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fQ09SRTNfU1lTX1BXUl9SRUcJCQkweDEwMzAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0FSTV9DT1JFM19MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDM0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTNfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwMzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09SRTBfU1lTX1BXUl9SRUcJCQkweDEwNDAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMF9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDQ0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTBfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwNDgKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09SRTFfU1lTX1BXUl9SRUcJCQkweDEwNTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMV9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDU0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTFfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwNTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09SRTJfU1lTX1BXUl9SRUcJCQkweDEwNjAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMl9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDY0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTJfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwNjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09SRTNfU1lTX1BXUl9SRUcJCQkweDEwNzAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFM19MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDc0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTNfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwNzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9JU1BfQVJNX1NZU19QV1JfUkVHCQkJCTB4MTA5MAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU19JUlFfSVNQX0FSTV9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDk0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9JU1BfQVJNX0NFTlRSQUxfU1lTX1BXUl9SRUcJCTB4MTA5OAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT01NT05fU1lTX1BXUl9SRUcJCQkweDEwQTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09NTU9OX1NZU19QV1JfUkVHCQkJMHgxMEIwCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX0wyX1NZU19QV1JfUkVHCQkJCTB4MTBEMAorI2RlZmluZSBFWFlOT1M1NDIwX0RQTExfU1lTQ0xLX1NZU19QV1JfUkVHCQkJMHgxMTU4CisjZGVmaW5lIEVYWU5PUzU0MjBfSVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDExNUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9LUExMX1NZU0NMS19TWVNfUFdSX1JFRwkJCTB4MTE2MAorI2RlZmluZSBFWFlOT1M1NDIwX1JQTExfU1lTQ0xLX1NZU19QV1JfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MTE3NAorI2RlZmluZSBFWFlOT1M1NDIwX1NQTExfU1lTQ0xLX1NZU19QV1JfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MTE3OAorI2RlZmluZSBFWFlOT1M1NDIwX0lOVFJBTV9NRU1fU1lTX1BXUl9SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4MTFCOAorI2RlZmluZSBFWFlOT1M1NDIwX0lOVFJPTV9NRU1fU1lTX1BXUl9SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4MTFCQworI2RlZmluZSBFWFlOT1M1NDIwX09ORU5BTkRYTF9NRU1fU1lTX1BXUgkJCTB4MTFDMAorI2RlZmluZSBFWFlOT1M1NDIwX1VTQkRFVl9NRU1fU1lTX1BXUgkJCQkweDExQ0MKKyNkZWZpbmUgRVhZTk9TNTQyMF9VU0JERVYxX01FTV9TWVNfUFdSCQkJCTB4MTFEMAorI2RlZmluZSBFWFlOT1M1NDIwX1NETU1DX01FTV9TWVNfUFdSCQkJCTB4MTFENAorI2RlZmluZSBFWFlOT1M1NDIwX0NTU1lTX01FTV9TWVNfUFdSCQkJCTB4MTFEOAorI2RlZmluZSBFWFlOT1M1NDIwX1NFQ1NTX01FTV9TWVNfUFdSCQkJCTB4MTFEQworI2RlZmluZSBFWFlOT1M1NDIwX1JPVEFUT1JfTUVNX1NZU19QV1IJCQkJMHgxMUUwCisjZGVmaW5lIEVYWU5PUzU0MjBfSU5UUkFNX01FTV9TWVNfUFdSCQkJCTB4MTFFNAorI2RlZmluZSBFWFlOT1M1NDIwX0lOVFJPTV9NRU1fU1lTX1BXUgkJCQkweDExRTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0pUQUdfU1lTX1BXUl9SRUcJCTB4MTIwOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fRFJBTV9TWVNfUFdSX1JFRwkJMHgxMjEwCisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9VQVJUX1NZU19QV1JfUkVHCQkweDEyMTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX01NQzBfU1lTX1BXUl9SRUcJCTB4MTIxOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fTU1DMV9TWVNfUFdSX1JFRwkJMHgxMjFDCisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9NTUMyX1NZU19QV1JfUkVHCQkweDEyMjAKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0hTSV9TWVNfUFdSX1JFRwkJMHgxMjI0CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9FQklBX1NZU19QV1JfUkVHCQkweDEyMjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0VCSUJfU1lTX1BXUl9SRUcJCTB4MTIyQworI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fU1BJX1NZU19QV1JfUkVHCQkweDEyMzAKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0RSQU1fQ09SRUJMS19TWVNfUFdSX1JFRwkweDEyMzQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNQMV9TWVNfUFdSX1JFRwkJCQkweDE0MTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9NQVVfU1lTX1BXUl9SRUcJCQkJMHgxNDE0CisjZGVmaW5lIEVYWU5PUzU0MjBfRzJEX1NZU19QV1JfUkVHCQkJCTB4MTQxOAorI2RlZmluZSBFWFlOT1M1NDIwX01TQ19TWVNfUFdSX1JFRwkJCQkweDE0MUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9GU1lTX1NZU19QV1JfUkVHCQkJCTB4MTQyMAorI2RlZmluZSBFWFlOT1M1NDIwX0ZTWVMyX1NZU19QV1JfUkVHCQkJCTB4MTQyNAorI2RlZmluZSBFWFlOT1M1NDIwX1BTR0VOX1NZU19QV1JfUkVHCQkJCTB4MTQyOAorI2RlZmluZSBFWFlOT1M1NDIwX1BFUklDX1NZU19QV1JfUkVHCQkJCTB4MTQyQworI2RlZmluZSBFWFlOT1M1NDIwX1dDT1JFX1NZU19QV1JfUkVHCQkJCTB4MTQzMAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0RJU1AxX1NZU19QV1JfUkVHCQkweDE0OTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9NQVVfU1lTX1BXUl9SRUcJCQkweDE0OTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9HMkRfU1lTX1BXUl9SRUcJCQkweDE0OTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9NU0NfU1lTX1BXUl9SRUcJCQkweDE0OUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9GU1lTX1NZU19QV1JfUkVHCQkJMHgxNEEwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRlNZUzJfU1lTX1BXUl9SRUcJCTB4MTRBNAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX1BTR0VOX1NZU19QV1JfUkVHCQkweDE0QTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9QRVJJQ19TWVNfUFdSX1JFRwkJMHgxNEFDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfV0NPUkVfU1lTX1BXUl9SRUcJCTB4MTRCMAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfVE9QUFdSX1NZU19QV1JfUkVHCQkweDE0QkMKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0RJU1AxX1NZU19QV1JfUkVHCQkJMHgxNEQwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19NQVVfU1lTX1BXUl9SRUcJCQkweDE0RDQKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0cyRF9TWVNfUFdSX1JFRwkJCTB4MTREOAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfTVNDX1NZU19QV1JfUkVHCQkJMHgxNERDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19GU1lTX1NZU19QV1JfUkVHCQkJMHgxNEUwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19GU1lTMl9TWVNfUFdSX1JFRwkJCTB4MTRFNAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfUFNHRU5fU1lTX1BXUl9SRUcJCQkweDE0RTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX1BFUklDX1NZU19QV1JfUkVHCQkJMHgxNEVDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19XQ09SRV9TWVNfUFdSX1JFRwkJCTB4MTRGMAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfU1lTTUVNX1RPUFBXUl9TWVNfUFdSX1JFRwkJMHgxNEY0CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVMyX1NZU19QV1JfUkVHCQkJMHgxNTcwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX1BTR0VOX1NZU19QV1JfUkVHCQkJMHgxNTc0CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX1BFUklDX1NZU19QV1JfUkVHCQkJMHgxNTc4CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX1dDT1JFX1NZU19QV1JfUkVHCQkJMHgxNTdDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX0RJU1AxX1NZU19QV1JfUkVHCQkJMHgxNTkwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX01BVV9TWVNfUFdSX1JFRwkJCTB4MTU5NAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9SRVNFVF9HMkRfU1lTX1BXUl9SRUcJCQkweDE1OTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfUkVTRVRfTVNDX1NZU19QV1JfUkVHCQkJMHgxNTlDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVNfU1lTX1BXUl9SRUcJCQkweDE1QTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9TRlJfQVhJX0NHRElTMQkJCQkweDE1RTQKKyNkZWZpbmUgRVhZTk9TX0FSTV9DT1JFMl9DT05GSUdVUkFUSU9OCQkJCTB4MjEwMAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT1JFMl9PUFRJT04JCQkJMHgyMTA4CisjZGVmaW5lIEVYWU5PU19BUk1fQ09SRTNfQ09ORklHVVJBVElPTgkJCQkweDIxODAKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fQ09SRTNfT1BUSU9OCQkJCTB4MjE4OAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT01NT05fU1RBVFVTCQkJCTB4MjUwNAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT01NT05fT1BUSU9OCQkJCTB4MjUwOAorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19DT01NT05fU1RBVFVTCQkJCTB4MjU4NAorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19DT01NT05fT1BUSU9OCQkJCTB4MjU4OAorI2RlZmluZSBFWFlOT1M1NDIwX0xPR0lDX1JFU0VUX0RVUkFUSU9OMwkJCTB4MkQxQworCisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVF9HUElPX09QVElPTgkJCQkweDMwQzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVUX1VBUlRfT1BUSU9OCQkJCTB4MzBFOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRfTU1DQV9PUFRJT04JCQkJMHgzMTA4CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVF9NTUNCX09QVElPTgkJCQkweDMxMjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVUX01NQ0NfT1BUSU9OCQkJCTB4MzE0OAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRfSFNJX09QVElPTgkJCQkweDMxNjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVUX1NQSV9PUFRJT04JCQkJMHgzMUM4CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVF9EUkFNX0NPUkVCTEtfT1BUSU9OCQkJMHgzMUU4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX0RSQU1fT1BUSU9OCQkJCTB4MzAwOAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9NQVVESU9fT1BUSU9OCQkJCTB4MzAyOAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9KVEFHX09QVElPTgkJCQkweDMwNDgKKyNkZWZpbmUgRVhZTk9TX1BBRF9SRVRfR1BJT19PUFRJT04JCQkJMHgzMTA4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX1VBUlRfT1BUSU9OCQkJCTB4MzEyOAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9NTUNBX09QVElPTgkJCQkweDMxNDgKKyNkZWZpbmUgRVhZTk9TX1BBRF9SRVRfTU1DQl9PUFRJT04JCQkJMHgzMTY4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX0VCSUFfT1BUSU9OCQkJCTB4MzE4OAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9FQklCX09QVElPTgkJCQkweDMxQTgKKworI2RlZmluZSBFWFlOT1NfUFNfSE9MRF9DT05UUk9MCQkJCQkweDMzMEMKKworLyogRm9yIFNZU19QV1JfUkVHICovCisjZGVmaW5lIEVYWU5PU19TWVNfUFdSX0NGRwkJCQkJQklUKDApCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9NRkNfQ09ORklHVVJBVElPTgkJCQkweDQwNjAKKyNkZWZpbmUgRVhZTk9TNTQyMF9NRkNfU1RBVFVTCQkJCQkweDQwNjQKKyNkZWZpbmUgRVhZTk9TNTQyMF9NRkNfT1BUSU9OCQkJCQkweDQwNjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9HM0RfQ09ORklHVVJBVElPTgkJCQkweDQwODAKKyNkZWZpbmUgRVhZTk9TNTQyMF9HM0RfU1RBVFVTCQkJCQkweDQwODQKKyNkZWZpbmUgRVhZTk9TNTQyMF9HM0RfT1BUSU9OCQkJCQkweDQwODgKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNQMF9DT05GSUdVUkFUSU9OCQkJCTB4NDBBMAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU1AwX1NUQVRVUwkJCQkJMHg0MEE0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTUDBfT1BUSU9OCQkJCQkweDQwQTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNQMV9DT05GSUdVUkFUSU9OCQkJCTB4NDBDMAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU1AxX1NUQVRVUwkJCQkJMHg0MEM0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTUDFfT1BUSU9OCQkJCQkweDQwQzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9NQVVfQ09ORklHVVJBVElPTgkJCQkweDQwRTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9NQVVfU1RBVFVTCQkJCQkweDQwRTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9NQVVfT1BUSU9OCQkJCQkweDQwRTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9GU1lTMl9PUFRJT04JCQkJCTB4NDE2OAorI2RlZmluZSBFWFlOT1M1NDIwX1BTR0VOX09QVElPTgkJCQkJMHg0MTg4CisKKy8qIEZvciBFWFlOT1NfQ0VOVFJBTF9TRVFfT1BUSU9OICovCisjZGVmaW5lIEVYWU5PUzVfVVNFX1NUQU5EQllXRklfQVJNX0NPUkUwCQkJQklUKDE2KQorI2RlZmluZSBFWFlOT1M1X1VTRV9TVEFOREJZV0ZJX0FSTV9DT1JFMQkJCUJVVCgxNykKKyNkZWZpbmUgRVhZTk9TNV9VU0VfU1RBTkRCWVdGRV9BUk1fQ09SRTAJCQlCSVQoMjQpCisjZGVmaW5lIEVYWU5PUzVfVVNFX1NUQU5EQllXRkVfQVJNX0NPUkUxCQkJQklUKDI1KQorCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTAJCQkJQklUKDQpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTEJCQkJQklUKDUpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTIJCQkJQklUKDYpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTMJCQkJQklUKDcpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTAJCQkJQklUKDgpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTEJCQkJQklUKDkpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTIJCQkJQklUKDEwKQorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19VU0VfU1RBTkRCWV9XRkkzCQkJCUJJVCgxMSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZFMAkJCQlCSVQoMTYpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGRTEJCQkJQklUKDE3KQorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkUyCQkJCUJJVCgxOCkKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZFMwkJCQlCSVQoMTkpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGRTAJCQkJQklUKDIwKQorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19VU0VfU1RBTkRCWV9XRkUxCQkJCUJJVCgyMSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZFMgkJCQlCSVQoMjIpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGRTMJCQkJQklUKDIzKQorCisjZGVmaW5lIERVUl9XQUlUX1JFU0VUCQkJCTB4RgorCisjZGVmaW5lIEVYWU5PUzU0MjBfVVNFX1NUQU5EQllfV0ZJX0FMTAkoRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZJMCAgICBcCisJCQkJCSB8IEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTEgIFwKKwkJCQkJIHwgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZJMiAgXAorCQkJCQkgfCBFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkkzICBcCisJCQkJCSB8IEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTAgIFwKKwkJCQkJIHwgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZJMSAgXAorCQkJCQkgfCBFWFlOT1M1NDIwX0tGQ19VU0VfU1RBTkRCWV9XRkkyICBcCisJCQkJCSB8IEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTMpCisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfUE1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9zbGVlcC5TCmluZGV4IDEwOGE0NWYuLmUzYzM3MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3Mvc2xlZXAuUwpAQCAtMTYsNiArMTYsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSAic21jLmgiCiAKICNkZWZpbmUgQ1BVX01BU0sJMHhmZjBmZmZmMAogI2RlZmluZSBDUFVfQ09SVEVYX0E5CTB4NDEwZmMwOTAKQEAgLTU1LDMgKzU2LDMwIEBACiAjZW5kaWYKIAliCWNwdV9yZXN1bWUKIEVORFBST0MoZXh5bm9zX2NwdV9yZXN1bWUpCisKKwkuYWxpZ24KKworRU5UUlkoZXh5bm9zX2NwdV9yZXN1bWVfbnMpCisJbXJjCXAxNSwgMCwgcjAsIGMwLCBjMCwgMAorCWxkcglyMSwgPUNQVV9NQVNLCisJYW5kCXIwLCByMCwgcjEKKwlsZHIJcjEsID1DUFVfQ09SVEVYX0E5CisJY21wCXIwLCByMQorCWJuZQlza2lwX2NwMTUKKworCWFkcglyMCwgY3AxNV9zYXZlX3Bvd2VyCisJbGRyCXIxLCBbcjBdCisJYWRyCXIwLCBjcDE1X3NhdmVfZGlhZworCWxkcglyMiwgW3IwXQorCW1vdglyMCwgI1NNQ19DTURfQzE1UkVTVU1FCisJZHNiCisJc21jCSMwCitza2lwX2NwMTU6CisJYgljcHVfcmVzdW1lCitFTkRQUk9DKGV4eW5vc19jcHVfcmVzdW1lX25zKQorCS5nbG9ibCBjcDE1X3NhdmVfZGlhZworY3AxNV9zYXZlX2RpYWc6CisJLmxvbmcJMAlAIGNwMTUgZGlhZ25vc3RpYworCS5nbG9ibCBjcDE1X3NhdmVfcG93ZXIKK2NwMTVfc2F2ZV9wb3dlcjoKKwkubG9uZwkwCUAgY3AxNSBwb3dlciBjb250cm9sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9zbWMuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NtYy5oCmluZGV4IDEzYTFkYzguLmY3YjgyZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NtYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NtYy5oCkBAIC0yNiw2ICsyNiwxMCBAQAogI2RlZmluZSBTTUNfQ01EX0wyWDBJTlZBTEwJKC0yNCkKICNkZWZpbmUgU01DX0NNRF9MMlgwREVCVUcJKC0yNSkKIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKwogZXh0ZXJuIHZvaWQgZXh5bm9zX3NtYyh1MzIgY21kLCB1MzIgYXJnMSwgdTMyIGFyZzIsIHUzMiBhcmczKTsKIAorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGU3ZGNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jCkBAIC0wLDAgKzEsNTY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRVhZTk9TIC0gU3VzcGVuZCBzdXBwb3J0CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1X3BtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2FybS1naWMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tY3BtLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorCisjaW5jbHVkZSA8cGxhdC9wbS1jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3JvbS5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicmVncy1wbXUuaCIKKyNpbmNsdWRlICJyZWdzLXN5cy5oIgorI2luY2x1ZGUgImV4eW5vcy1wbXUuaCIKKworI2RlZmluZSBTNVBfQ0hFQ0tfU0xFRVAgMHgwMDAwMEJBRAorCisjZGVmaW5lIFJFR19UQUJMRV9FTkQgKC0xVSkKKworI2RlZmluZSBFWFlOT1M1NDIwX0NQVV9TVEFURQkweDI4CisKKy8qKgorICogc3RydWN0IGV4eW5vc193a3VwX2lycSAtIEV4eW5vcyBHSUMgdG8gUE1VIElSUSBtYXBwaW5nCisgKiBAaHdpcnE6IEhhcmR3YXJlIElSUSBzaWduYWwgb2YgdGhlIEdJQworICogQG1hc2s6IE1hc2sgaW4gUE1VIHdha2UtdXAgbWFzayByZWdpc3RlcgorICovCitzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIHsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdTMyIG1hc2s7Cit9OworCitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgZXh5bm9zNV9zeXNfc2F2ZVtdID0geworCVNBVkVfSVRFTShFWFlOT1M1X1NZU19JMkNfQ0ZHKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBleHlub3NfY29yZV9zYXZlW10gPSB7CisJLyogU1JPTSBzaWRlICovCisJU0FWRV9JVEVNKFM1UF9TUk9NX0JXKSwKKwlTQVZFX0lURU0oUzVQX1NST01fQkMwKSwKKwlTQVZFX0lURU0oUzVQX1NST01fQkMxKSwKKwlTQVZFX0lURU0oUzVQX1NST01fQkMyKSwKKwlTQVZFX0lURU0oUzVQX1NST01fQkMzKSwKK307CisKK3N0cnVjdCBleHlub3NfcG1fZGF0YSB7CisJY29uc3Qgc3RydWN0IGV4eW5vc193a3VwX2lycSAqd2t1cF9pcnE7CisJc3RydWN0IHNsZWVwX3NhdmUgKmV4dHJhX3NhdmU7CisJaW50IG51bV9leHRyYV9zYXZlOworCXVuc2lnbmVkIGludCB3YWtlX2Rpc2FibGVfbWFzazsKKwl1bnNpZ25lZCBpbnQgKnJlbGVhc2VfcmV0X3JlZ3M7CisKKwl2b2lkICgqcG1fcHJlcGFyZSkodm9pZCk7CisJdm9pZCAoKnBtX3Jlc3VtZV9wcmVwYXJlKSh2b2lkKTsKKwl2b2lkICgqcG1fcmVzdW1lKSh2b2lkKTsKKwlpbnQgKCpwbV9zdXNwZW5kKSh2b2lkKTsKKwlpbnQgKCpjcHVfc3VzcGVuZCkodW5zaWduZWQgbG9uZyk7Cit9OworCitzdHJ1Y3QgZXh5bm9zX3BtX2RhdGEgKnBtX2RhdGE7CisKK3N0YXRpYyBpbnQgZXh5bm9zNTQyMF9jcHVfc3RhdGU7CitzdGF0aWMgdW5zaWduZWQgaW50IGV4eW5vc19wbXVfc3BhcmUzOworCisvKgorICogR0lDIHdha2UtdXAgc3VwcG9ydAorICovCisKK3N0YXRpYyB1MzIgZXh5bm9zX2lycXdha2VfaW50bWFzayA9IDB4ZmZmZmZmZmY7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIGV4eW5vczRfd2t1cF9pcnFbXSA9IHsKKwl7IDc2LCBCSVQoMSkgfSwgLyogUlRDIGFsYXJtICovCisJeyA3NywgQklUKDIpIH0sIC8qIFJUQyB0aWNrICovCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3Nfd2t1cF9pcnEgZXh5bm9zNTI1MF93a3VwX2lycVtdID0geworCXsgNzUsIEJJVCgxKSB9LCAvKiBSVEMgYWxhcm0gKi8KKwl7IDc2LCBCSVQoMikgfSwgLyogUlRDIHRpY2sgKi8KKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCit1bnNpZ25lZCBpbnQgZXh5bm9zX3JlbGVhc2VfcmV0X3JlZ3NbXSA9IHsKKwlTNVBfUEFEX1JFVF9NQVVESU9fT1BUSU9OLAorCVM1UF9QQURfUkVUX0dQSU9fT1BUSU9OLAorCVM1UF9QQURfUkVUX1VBUlRfT1BUSU9OLAorCVM1UF9QQURfUkVUX01NQ0FfT1BUSU9OLAorCVM1UF9QQURfUkVUX01NQ0JfT1BUSU9OLAorCVM1UF9QQURfUkVUX0VCSUFfT1BUSU9OLAorCVM1UF9QQURfUkVUX0VCSUJfT1BUSU9OLAorCVJFR19UQUJMRV9FTkQsCit9OworCit1bnNpZ25lZCBpbnQgZXh5bm9zNTQyMF9yZWxlYXNlX3JldF9yZWdzW10gPSB7CisJRVhZTk9TX1BBRF9SRVRfRFJBTV9PUFRJT04sCisJRVhZTk9TX1BBRF9SRVRfTUFVRElPX09QVElPTiwKKwlFWFlOT1NfUEFEX1JFVF9KVEFHX09QVElPTiwKKwlFWFlOT1M1NDIwX1BBRF9SRVRfR1BJT19PUFRJT04sCisJRVhZTk9TNTQyMF9QQURfUkVUX1VBUlRfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9NTUNBX09QVElPTiwKKwlFWFlOT1M1NDIwX1BBRF9SRVRfTU1DQl9PUFRJT04sCisJRVhZTk9TNTQyMF9QQURfUkVUX01NQ0NfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9IU0lfT1BUSU9OLAorCUVYWU5PU19QQURfUkVUX0VCSUFfT1BUSU9OLAorCUVYWU5PU19QQURfUkVUX0VCSUJfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9TUElfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9EUkFNX0NPUkVCTEtfT1BUSU9OLAorCVJFR19UQUJMRV9FTkQsCit9OworCitzdGF0aWMgaW50IGV4eW5vc19pcnFfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGV4eW5vc193a3VwX2lycSAqd2t1cF9pcnE7CisKKwlpZiAoIXBtX2RhdGEtPndrdXBfaXJxKQorCQlyZXR1cm4gLUVOT0VOVDsKKwl3a3VwX2lycSA9IHBtX2RhdGEtPndrdXBfaXJxOworCisJd2hpbGUgKHdrdXBfaXJxLT5tYXNrKSB7CisJCWlmICh3a3VwX2lycS0+aHdpcnEgPT0gZGF0YS0+aHdpcnEpIHsKKwkJCWlmICghc3RhdGUpCisJCQkJZXh5bm9zX2lycXdha2VfaW50bWFzayB8PSB3a3VwX2lycS0+bWFzazsKKwkJCWVsc2UKKwkJCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrICY9IH53a3VwX2lycS0+bWFzazsKKwkJCXJldHVybiAwOworCQl9CisJCSsrd2t1cF9pcnE7CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX2NwdV9kb19pZGxlKHZvaWQpCit7CisJLyogaXNzdWUgdGhlIHN0YW5kYnkgc2lnbmFsIGludG8gdGhlIHBtIHVuaXQuICovCisJY3B1X2RvX2lkbGUoKTsKKworCXByX2luZm8oIkZhaWxlZCB0byBzdXNwZW5kIHRoZSBzeXN0ZW1cbiIpOworCXJldHVybiAxOyAvKiBBYm9ydGluZyBzdXNwZW5kICovCit9CitzdGF0aWMgdm9pZCBleHlub3NfZmx1c2hfY2FjaGVfYWxsKHZvaWQpCit7CisJZmx1c2hfY2FjaGVfYWxsKCk7CisJb3V0ZXJfZmx1c2hfYWxsKCk7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWV4eW5vc19mbHVzaF9jYWNoZV9hbGwoKTsKKwlyZXR1cm4gZXh5bm9zX2NwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zNTQyMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwkvKiBNQ1BNIHdvcmtzIHdpdGggSFcgQ1BVIGlkZW50aWZpZXJzICovCisJdW5zaWduZWQgaW50IG1waWRyID0gcmVhZF9jcHVpZF9tcGlkcigpOworCXVuc2lnbmVkIGludCBjbHVzdGVyID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOworCXVuc2lnbmVkIGludCBjcHUgPSBNUElEUl9BRkZJTklUWV9MRVZFTChtcGlkciwgMCk7CisKKwlfX3Jhd193cml0ZWwoMHgwLCBzeXNyYW1fYmFzZV9hZGRyICsgRVhZTk9TNTQyMF9DUFVfU1RBVEUpOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0VYWU5PUzU0MjBfTUNQTSkpIHsKKwkJbWNwbV9zZXRfZW50cnlfdmVjdG9yKGNwdSwgY2x1c3RlciwgZXh5bm9zX2NwdV9yZXN1bWUpOworCisJCS8qCisJCSAqIFJlc2lkZW5jeSB2YWx1ZSBwYXNzZWQgdG8gbWNwbV9jcHVfc3VzcGVuZCBiYWNrLWVuZAorCQkgKiBoYXMgdG8gYmUgZ2l2ZW4gY2xlYXIgc2VtYW50aWNzLiBTZXQgdG8gMCBhcyBhCisJCSAqIHRlbXBvcmFyeSB2YWx1ZS4KKwkJICovCisJCW1jcG1fY3B1X3N1c3BlbmQoMCk7CisJfQorCisJcHJfaW5mbygiRmFpbGVkIHRvIHN1c3BlbmQgdGhlIHN5c3RlbVxuIik7CisKKwkvKiByZXR1cm4gdmFsdWUgIT0gMCBtZWFucyBmYWlsdXJlICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc19wbV9zZXRfd2FrZXVwX21hc2sodm9pZCkKK3sKKwkvKiBTZXQgd2FrZS11cCBtYXNrIHJlZ2lzdGVycyAqLworCXBtdV9yYXdfd3JpdGVsKGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSwgUzVQX0VJTlRfV0FLRVVQX01BU0spOworCXBtdV9yYXdfd3JpdGVsKGV4eW5vc19pcnF3YWtlX2ludG1hc2sgJiB+KDEgPDwgMzEpLCBTNVBfV0FLRVVQX01BU0spOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfcG1fZW50ZXJfc2xlZXBfbW9kZSh2b2lkKQoreworCS8qIFNldCB2YWx1ZSBvZiBwb3dlciBkb3duIHJlZ2lzdGVyIGZvciBzbGVlcCBtb2RlICovCisJZXh5bm9zX3N5c19wb3dlcmRvd25fY29uZihTWVNfU0xFRVApOworCXBtdV9yYXdfd3JpdGVsKFM1UF9DSEVDS19TTEVFUCwgUzVQX0lORk9STTEpOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfcG1fcHJlcGFyZSh2b2lkKQoreworCS8qIFNldCB3YWtlLXVwIG1hc2sgcmVnaXN0ZXJzICovCisJZXh5bm9zX3BtX3NldF93YWtldXBfbWFzaygpOworCisJczNjX3BtX2RvX3NhdmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7CisKKwkgaWYgKHBtX2RhdGEtPmV4dHJhX3NhdmUpCisJCXMzY19wbV9kb19zYXZlKHBtX2RhdGEtPmV4dHJhX3NhdmUsCisJCQkJcG1fZGF0YS0+bnVtX2V4dHJhX3NhdmUpOworCisJZXh5bm9zX3BtX2VudGVyX3NsZWVwX21vZGUoKTsKKworCS8qIGVuc3VyZSBhdCBsZWFzdCBJTkZPUk0wIGhhcyB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KKwlwbXVfcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoZXh5bm9zX2NwdV9yZXN1bWUpLCBTNVBfSU5GT1JNMCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vczU0MjBfcG1fcHJlcGFyZSh2b2lkKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBTZXQgd2FrZS11cCBtYXNrIHJlZ2lzdGVycyAqLworCWV4eW5vc19wbV9zZXRfd2FrZXVwX21hc2soKTsKKworCXMzY19wbV9kb19zYXZlKGV4eW5vc19jb3JlX3NhdmUsIEFSUkFZX1NJWkUoZXh5bm9zX2NvcmVfc2F2ZSkpOworCisJZXh5bm9zX3BtdV9zcGFyZTMgPSBwbXVfcmF3X3JlYWRsKFM1UF9QTVVfU1BBUkUzKTsKKwkvKgorCSAqIFRoZSBjcHUgc3RhdGUgbmVlZHMgdG8gYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIHNvIHRoYXQgdGhlCisJICogc2Vjb25kYXJ5IENQVXMgd2lsbCBlbnRlciBsb3cgcG93ZXIgc3RhcnQuIFRob3VnaCB0aGUgVS1Cb290CisJICogaXMgc2V0dGluZyB0aGUgY3B1IHN0YXRlIHdpdGggbG93IHBvd2VyIGZsYWcsIHRoZSBrZXJuZWwKKwkgKiBuZWVkcyB0byByZXN0b3JlIGl0IGJhY2sgaW4gY2FzZSwgdGhlIHByaW1hcnkgY3B1IGZhaWxzIHRvCisJICogc3VzcGVuZCBmb3IgYW55IHJlYXNvbi4KKwkgKi8KKwlleHlub3M1NDIwX2NwdV9zdGF0ZSA9IF9fcmF3X3JlYWRsKHN5c3JhbV9iYXNlX2FkZHIgKworCQkJCQkJRVhZTk9TNTQyMF9DUFVfU1RBVEUpOworCisJZXh5bm9zX3BtX2VudGVyX3NsZWVwX21vZGUoKTsKKworCS8qIGVuc3VyZSBhdCBsZWFzdCBJTkZPUk0wIGhhcyB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfRVhZTk9TNTQyMF9NQ1BNKSkKKwkJcG11X3Jhd193cml0ZWwodmlydF90b19waHlzKG1jcG1fZW50cnlfcG9pbnQpLCBTNVBfSU5GT1JNMCk7CisKKwl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfQVJNX0wyX09QVElPTik7CisJdG1wICY9IH5FWFlOT1M1X1VTRV9SRVRFTlRJT047CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1M1X0FSTV9MMl9PUFRJT04pOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX1NGUl9BWElfQ0dESVMxKTsKKwl0bXAgfD0gRVhZTk9TNTQyMF9VRlM7CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1M1NDIwX1NGUl9BWElfQ0dESVMxKTsKKworCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9BUk1fQ09NTU9OX09QVElPTik7CisJdG1wICY9IH5FWFlOT1M1NDIwX0wyUlNURElTQUJMRV9WQUxVRTsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9PUFRJT04pOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX0ZTWVMyX09QVElPTik7CisJdG1wIHw9IEVYWU5PUzU0MjBfRU1VTEFUSU9OOworCXBtdV9yYXdfd3JpdGVsKHRtcCwgRVhZTk9TNTQyMF9GU1lTMl9PUFRJT04pOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX1BTR0VOX09QVElPTik7CisJdG1wIHw9IEVYWU5PUzU0MjBfRU1VTEFUSU9OOworCXBtdV9yYXdfd3JpdGVsKHRtcCwgRVhZTk9TNTQyMF9QU0dFTl9PUFRJT04pOworfQorCisKK3N0YXRpYyBpbnQgZXh5bm9zX3BtX3N1c3BlbmQodm9pZCkKK3sKKwlleHlub3NfcG1fY2VudHJhbF9zdXNwZW5kKCk7CisKKwlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKKwkJZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleHlub3M1NDIwX3BtX3N1c3BlbmQodm9pZCkKK3sKKwl1MzIgdGhpc19jbHVzdGVyOworCisJZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCgpOworCisJLyogU2V0dGluZyBTRVFfT1BUSU9OIHJlZ2lzdGVyICovCisKKwl0aGlzX2NsdXN0ZXIgPSBNUElEUl9BRkZJTklUWV9MRVZFTChyZWFkX2NwdWlkX21waWRyKCksIDEpOworCWlmICghdGhpc19jbHVzdGVyKQorCQlwbXVfcmF3X3dyaXRlbChFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkkwLAorCQkJCVM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOworCWVsc2UKKwkJcG11X3Jhd193cml0ZWwoRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZJMCwKKwkJCQlTNVBfQ0VOVFJBTF9TRVFfT1BUSU9OKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3BtX3JlbGVhc2VfcmV0ZW50aW9uKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyAocG1fZGF0YS0+cmVsZWFzZV9yZXRfcmVnc1tpXSAhPSBSRUdfVEFCTEVfRU5EKTsgaSsrKQorCQlwbXVfcmF3X3dyaXRlbChFWFlOT1NfV0FLRVVQX0ZST01fTE9XUFdSLAorCQkJCXBtX2RhdGEtPnJlbGVhc2VfcmV0X3JlZ3NbaV0pOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfcG1fcmVzdW1lKHZvaWQpCit7CisJdTMyIGNwdWlkID0gcmVhZF9jcHVpZF9wYXJ0KCk7CisKKwlpZiAoZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKCkpCisJCWdvdG8gZWFybHlfd2FrZXVwOworCisJLyogRm9yIHJlbGVhc2UgcmV0ZW50aW9uICovCisJZXh5bm9zX3BtX3JlbGVhc2VfcmV0ZW50aW9uKCk7CisKKwlpZiAocG1fZGF0YS0+ZXh0cmFfc2F2ZSkKKwkJczNjX3BtX2RvX3Jlc3RvcmVfY29yZShwbV9kYXRhLT5leHRyYV9zYXZlLAorCQkJCQlwbV9kYXRhLT5udW1fZXh0cmFfc2F2ZSk7CisKKwlzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKGV4eW5vc19jb3JlX3NhdmUsIEFSUkFZX1NJWkUoZXh5bm9zX2NvcmVfc2F2ZSkpOworCisJaWYgKGNwdWlkID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpCisJCXNjdV9lbmFibGUoUzVQX1ZBX1NDVSk7CisKKwlpZiAoY2FsbF9maXJtd2FyZV9vcChyZXN1bWUpID09IC1FTk9TWVMKKwkgICAgJiYgY3B1aWQgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKKwkJZXh5bm9zX2NwdV9yZXN0b3JlX3JlZ2lzdGVyKCk7CisKK2Vhcmx5X3dha2V1cDoKKworCS8qIENsZWFyIFNMRUVQIG1vZGUgc2V0IGluIElORk9STTEgKi8KKwlwbXVfcmF3X3dyaXRlbCgweDAsIFM1UF9JTkZPUk0xKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNTQyMF9wcmVwYXJlX3BtX3Jlc3VtZSh2b2lkKQoreworCWlmIChJU19FTkFCTEVEKENPTkZJR19FWFlOT1M1NDIwX01DUE0pKQorCQlXQVJOX09OKG1jcG1fY3B1X3Bvd2VyZWRfdXAoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vczU0MjBfcG1fcmVzdW1lKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwkvKiBSZXN0b3JlIHRoZSBDUFUwIGxvdyBwb3dlciBzdGF0ZSByZWdpc3RlciAqLworCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNV9BUk1fQ09SRTBfU1lTX1BXUl9SRUcpOworCXBtdV9yYXdfd3JpdGVsKHRtcCB8IFM1UF9DT1JFX0xPQ0FMX1BXUl9FTiwKKwkJRVhZTk9TNV9BUk1fQ09SRTBfU1lTX1BXUl9SRUcpOworCisJLyogUmVzdG9yZSB0aGUgc3lzcmFtIGNwdSBzdGF0ZSByZWdpc3RlciAqLworCV9fcmF3X3dyaXRlbChleHlub3M1NDIwX2NwdV9zdGF0ZSwKKwkJc3lzcmFtX2Jhc2VfYWRkciArIEVYWU5PUzU0MjBfQ1BVX1NUQVRFKTsKKworCXBtdV9yYXdfd3JpdGVsKEVYWU5PUzU0MjBfVVNFX1NUQU5EQllfV0ZJX0FMTCwKKwkJCVM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOworCisJaWYgKGV4eW5vc19wbV9jZW50cmFsX3Jlc3VtZSgpKQorCQlnb3RvIGVhcmx5X3dha2V1cDsKKworCS8qIEZvciByZWxlYXNlIHJldGVudGlvbiAqLworCWV4eW5vc19wbV9yZWxlYXNlX3JldGVudGlvbigpOworCisJcG11X3Jhd193cml0ZWwoZXh5bm9zX3BtdV9zcGFyZTMsIFM1UF9QTVVfU1BBUkUzKTsKKworCXMzY19wbV9kb19yZXN0b3JlX2NvcmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7CisKK2Vhcmx5X3dha2V1cDoKKworCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9TRlJfQVhJX0NHRElTMSk7CisJdG1wICY9IH5FWFlOT1M1NDIwX1VGUzsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzU0MjBfU0ZSX0FYSV9DR0RJUzEpOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX0ZTWVMyX09QVElPTik7CisJdG1wICY9IH5FWFlOT1M1NDIwX0VNVUxBVElPTjsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzU0MjBfRlNZUzJfT1BUSU9OKTsKKworCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9QU0dFTl9PUFRJT04pOworCXRtcCAmPSB+RVhZTk9TNTQyMF9FTVVMQVRJT047CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1M1NDIwX1BTR0VOX09QVElPTik7CisKKwkvKiBDbGVhciBTTEVFUCBtb2RlIHNldCBpbiBJTkZPUk0xICovCisJcG11X3Jhd193cml0ZWwoMHgwLCBTNVBfSU5GT1JNMSk7Cit9CisKKy8qCisgKiBTdXNwZW5kIE9wcworICovCisKK3N0YXRpYyBpbnQgZXh5bm9zX3N1c3BlbmRfZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWludCByZXQ7CisKKwlzM2NfcG1fZGVidWdfaW5pdCgpOworCisJUzNDX1BNREJHKCIlczogc3VzcGVuZGluZyB0aGUgc3lzdGVtLi4uXG4iLCBfX2Z1bmNfXyk7CisKKwlTM0NfUE1EQkcoIiVzOiB3YWtldXAgbWFza3M6ICUwOHgsJTA4eFxuIiwgX19mdW5jX18sCisJCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrLCBleHlub3NfZ2V0X2VpbnRfd2FrZV9tYXNrKCkpOworCisJaWYgKGV4eW5vc19pcnF3YWtlX2ludG1hc2sgPT0gLTFVCisJICAgICYmIGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSA9PSAtMVUpIHsKKwkJcHJfZXJyKCIlczogTm8gd2FrZS11cCBzb3VyY2VzIVxuIiwgX19mdW5jX18pOworCQlwcl9lcnIoIiVzOiBBYm9ydGluZyBzbGVlcFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzM2NfcG1fc2F2ZV91YXJ0cygpOworCWlmIChwbV9kYXRhLT5wbV9wcmVwYXJlKQorCQlwbV9kYXRhLT5wbV9wcmVwYXJlKCk7CisJZmx1c2hfY2FjaGVfYWxsKCk7CisJczNjX3BtX2NoZWNrX3N0b3JlKCk7CisKKwlyZXQgPSBjYWxsX2Zpcm13YXJlX29wKHN1c3BlbmQpOworCWlmIChyZXQgPT0gLUVOT1NZUykKKwkJcmV0ID0gY3B1X3N1c3BlbmQoMCwgcG1fZGF0YS0+Y3B1X3N1c3BlbmQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocG1fZGF0YS0+cG1fcmVzdW1lX3ByZXBhcmUpCisJCXBtX2RhdGEtPnBtX3Jlc3VtZV9wcmVwYXJlKCk7CisJczNjX3BtX3Jlc3RvcmVfdWFydHMoKTsKKworCVMzQ19QTURCRygiJXM6IHdha2V1cCBzdGF0OiAlMDh4XG4iLCBfX2Z1bmNfXywKKwkJCXBtdV9yYXdfcmVhZGwoUzVQX1dBS0VVUF9TVEFUKSk7CisKKwlzM2NfcG1fY2hlY2tfcmVzdG9yZSgpOworCisJUzNDX1BNREJHKCIlczogcmVzdW1pbmcgdGhlIHN5c3RlbS4uLlxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3N1c3BlbmRfcHJlcGFyZSh2b2lkKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIFJFVklTSVQ6IEl0IHdvdWxkIGJlIGJldHRlciBpZiBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMKKwkgKiAucHJlcGFyZSBoYW5kbGVyIGdldCB0aGUgc3VzcGVuZF9zdGF0ZV90IGFzIGEgcGFyYW1ldGVyIHRvCisJICogYXZvaWQgaGFyZC1jb2RpbmcgdGhlIHN1c3BlbmQgdG8gbWVtIHN0YXRlLiBJdCdzIHNhZmUgdG8gZG8KKwkgKiBpdCBub3cgb25seSBiZWNhdXNlIHRoZSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtIGZ1bmN0aW9uIGlzCisJICogdXNlZCBhcyB0aGUgLnZhbGlkIGNhbGxiYWNrIHVzZWQgdG8gY2hlY2sgaWYgYSBnaXZlbiBzdGF0ZQorCSAqIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0gYW55d2F5cy4KKwkgKi8KKwlyZXQgPSByZWd1bGF0b3Jfc3VzcGVuZF9wcmVwYXJlKFBNX1NVU1BFTkRfTUVNKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiRmFpbGVkIHRvIHByZXBhcmUgcmVndWxhdG9ycyBmb3Igc3VzcGVuZCAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXMzY19wbV9jaGVja19wcmVwYXJlKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3N1c3BlbmRfZmluaXNoKHZvaWQpCit7CisJaW50IHJldDsKKworCXMzY19wbV9jaGVja19jbGVhbnVwKCk7CisKKwlyZXQgPSByZWd1bGF0b3Jfc3VzcGVuZF9maW5pc2goKTsKKwlpZiAocmV0KQorCQlwcl93YXJuKCJGYWlsZWQgdG8gcmVzdW1lIHJlZ3VsYXRvcnMgZnJvbSBzdXNwZW5kICglZClcbiIsIHJldCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgZXh5bm9zX3N1c3BlbmRfb3BzID0geworCS5lbnRlcgkJPSBleHlub3Nfc3VzcGVuZF9lbnRlciwKKwkucHJlcGFyZQk9IGV4eW5vc19zdXNwZW5kX3ByZXBhcmUsCisJLmZpbmlzaAkJPSBleHlub3Nfc3VzcGVuZF9maW5pc2gsCisJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbV9kYXRhIGV4eW5vczRfcG1fZGF0YSA9IHsKKwkud2t1cF9pcnEJPSBleHlub3M0X3drdXBfaXJxLAorCS53YWtlX2Rpc2FibGVfbWFzayA9ICgoMHhGRiA8PCA4KSB8ICgweDFGIDw8IDEpKSwKKwkucmVsZWFzZV9yZXRfcmVncyA9IGV4eW5vc19yZWxlYXNlX3JldF9yZWdzLAorCS5wbV9zdXNwZW5kCT0gZXh5bm9zX3BtX3N1c3BlbmQsCisJLnBtX3Jlc3VtZQk9IGV4eW5vc19wbV9yZXN1bWUsCisJLnBtX3ByZXBhcmUJPSBleHlub3NfcG1fcHJlcGFyZSwKKwkuY3B1X3N1c3BlbmQJPSBleHlub3NfY3B1X3N1c3BlbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbV9kYXRhIGV4eW5vczUyNTBfcG1fZGF0YSA9IHsKKwkud2t1cF9pcnEJPSBleHlub3M1MjUwX3drdXBfaXJxLAorCS53YWtlX2Rpc2FibGVfbWFzayA9ICgoMHhGRiA8PCA4KSB8ICgweDFGIDw8IDEpKSwKKwkucmVsZWFzZV9yZXRfcmVncyA9IGV4eW5vc19yZWxlYXNlX3JldF9yZWdzLAorCS5leHRyYV9zYXZlCT0gZXh5bm9zNV9zeXNfc2F2ZSwKKwkubnVtX2V4dHJhX3NhdmUJPSBBUlJBWV9TSVpFKGV4eW5vczVfc3lzX3NhdmUpLAorCS5wbV9zdXNwZW5kCT0gZXh5bm9zX3BtX3N1c3BlbmQsCisJLnBtX3Jlc3VtZQk9IGV4eW5vc19wbV9yZXN1bWUsCisJLnBtX3ByZXBhcmUJPSBleHlub3NfcG1fcHJlcGFyZSwKKwkuY3B1X3N1c3BlbmQJPSBleHlub3NfY3B1X3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IGV4eW5vc19wbV9kYXRhIGV4eW5vczU0MjBfcG1fZGF0YSA9IHsKKwkud2t1cF9pcnEJPSBleHlub3M1MjUwX3drdXBfaXJxLAorCS53YWtlX2Rpc2FibGVfbWFzayA9ICgweDdGIDw8IDcpIHwgKDB4MUYgPDwgMSksCisJLnJlbGVhc2VfcmV0X3JlZ3MgPSBleHlub3M1NDIwX3JlbGVhc2VfcmV0X3JlZ3MsCisJLnBtX3Jlc3VtZV9wcmVwYXJlID0gZXh5bm9zNTQyMF9wcmVwYXJlX3BtX3Jlc3VtZSwKKwkucG1fcmVzdW1lCT0gZXh5bm9zNTQyMF9wbV9yZXN1bWUsCisJLnBtX3N1c3BlbmQJPSBleHlub3M1NDIwX3BtX3N1c3BlbmQsCisJLnBtX3ByZXBhcmUJPSBleHlub3M1NDIwX3BtX3ByZXBhcmUsCisJLmNwdV9zdXNwZW5kCT0gZXh5bm9zNTQyMF9jcHVfc3VzcGVuZCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGV4eW5vc19wbXVfb2ZfZGV2aWNlX2lkc1tdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczRfcG1fZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1wbXUiLAorCQkuZGF0YSA9ICZleHlub3M0X3BtX2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTItcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNF9wbV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczUyNTBfcG1fZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQyMC1wbXUiLAorCQkuZGF0YSA9ICZleHlub3M1NDIwX3BtX2RhdGEsCisJfSwKKwl7IC8qc2VudGluZWwqLyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBleHlub3NfcG1fc3lzY29yZV9vcHM7CisKK3ZvaWQgX19pbml0IGV4eW5vc19wbV9pbml0KHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJdTMyIHRtcDsKKworCW9mX2ZpbmRfbWF0Y2hpbmdfbm9kZV9hbmRfbWF0Y2goTlVMTCwgZXh5bm9zX3BtdV9vZl9kZXZpY2VfaWRzLCAmbWF0Y2gpOworCWlmICghbWF0Y2gpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gZmluZCBQTVUgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisJcG1fZGF0YSA9IChzdHJ1Y3QgZXh5bm9zX3BtX2RhdGEgKikgbWF0Y2gtPmRhdGE7CisKKwkvKiBQbGF0Zm9ybS1zcGVjaWZpYyBHSUMgY2FsbGJhY2sgKi8KKwlnaWNfYXJjaF9leHRuLmlycV9zZXRfd2FrZSA9IGV4eW5vc19pcnFfc2V0X3dha2U7CisKKwkvKiBBbGwgd2FrZXVwIGRpc2FibGUgKi8KKwl0bXAgPSBwbXVfcmF3X3JlYWRsKFM1UF9XQUtFVVBfTUFTSyk7CisJdG1wIHw9IHBtX2RhdGEtPndha2VfZGlzYWJsZV9tYXNrOworCXBtdV9yYXdfd3JpdGVsKHRtcCwgUzVQX1dBS0VVUF9NQVNLKTsKKworCWV4eW5vc19wbV9zeXNjb3JlX29wcy5zdXNwZW5kCT0gcG1fZGF0YS0+cG1fc3VzcGVuZDsKKwlleHlub3NfcG1fc3lzY29yZV9vcHMucmVzdW1lCT0gcG1fZGF0YS0+cG1fcmVzdW1lOworCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmV4eW5vc19wbV9zeXNjb3JlX29wcyk7CisJc3VzcGVuZF9zZXRfb3BzKCZleHlub3Nfc3VzcGVuZF9vcHMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcKaW5kZXggMTFiMjk1Ny4uZTg2MjdlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnCkBAIC02MzMsMTIgKzYzMyw0MSBAQAogCWJvb2wgIlZ5YnJpZCBGYW1pbHkgVkY2MTAgc3VwcG9ydCIKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBQSU5DVFJMX1ZGNjEwCi0Jc2VsZWN0IFZGX1BJVF9USU1FUgogCXNlbGVjdCBQTDMxMF9FUlJBVEFfNzY5NDE5IGlmIENBQ0hFX0wyWDAKIAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBWeWJyaWQgVkY2MTAgcHJvY2Vzc29yLgogCitjaG9pY2UKKwlwcm9tcHQgIkNsb2Nrc291cmNlIGZvciBzY2hlZHVsZXIgY2xvY2siCisJZGVwZW5kcyBvbiBTT0NfVkY2MTAKKwlkZWZhdWx0IFZGX1VTRV9BUk1fR0xPQkFMX1RJTUVSCisKKwljb25maWcgVkZfVVNFX0FSTV9HTE9CQUxfVElNRVIKKwkJYm9vbCAiVXNlIEFSTSBHbG9iYWwgVGltZXIiCisJCXNlbGVjdCBBUk1fR0xPQkFMX1RJTUVSCisJCXNlbGVjdCBDTEtTUkNfQVJNX0dMT0JBTF9USU1FUl9TQ0hFRF9DTE9DSworCQloZWxwCisJCSAgVXNlIHRoZSBBUk0gR2xvYmFsIFRpbWVyIGFzIGNsb2Nrc291cmNlCisKKwljb25maWcgVkZfVVNFX1BJVF9USU1FUgorCQlib29sICJVc2UgUElUIHRpbWVyIgorCQlzZWxlY3QgVkZfUElUX1RJTUVSCisJCWhlbHAKKwkJICBVc2UgU29DIFBlcmlvZGljIEludGVycnVwdCBUaW1lciAoUElUKSBhcyBjbG9ja3NvdXJjZQorCitlbmRjaG9pY2UKKworY29uZmlnIFNPQ19MUzEwMjFBCisJYm9vbCAiRnJlZXNjYWxlIExTMTAyMUEgc3VwcG9ydCIKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBIQVZFX0FSTV9BUkNIX1RJTUVSCisJc2VsZWN0IFBDSV9ET01BSU5TIGlmIFBDSQorCXNlbGVjdCBaT05FX0RNQSBpZiBBUk1fTFBBRQorCisJaGVscAorCSAgVGhpcyBlbmFibGUgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIExTMTAyMUEgcHJvY2Vzc29yLgorCiBlbmRpZgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtaW14L2RldmljZXMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUKaW5kZXggNmU0ZmNkOC4uZjVhYzY4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAKIG9iai0kKENPTkZJR19TT0NfSU1YMzUpICs9IG1tLWlteDMubyBjcHUtaW14MzUubyBjbGstaW14MzUubyBlaGNpLWlteDM1Lm8gcG0taW14My5vCiAKIGlteDUtcG0tJChDT05GSUdfUE0pICs9IHBtLWlteDUubwotb2JqLSQoQ09ORklHX1NPQ19JTVg1KSArPSBjcHUtaW14NS5vIGNsay1pbXg1MS1pbXg1My5vICQoaW14NS1wbS15KQorb2JqLSQoQ09ORklHX1NPQ19JTVg1KSArPSBjcHUtaW14NS5vIGNsay1pbXg1MS1pbXg1My5vIGNsay1jcHUubyAkKGlteDUtcG0teSkKIAogb2JqLSQoQ09ORklHX0NPTU1PTl9DTEspICs9IGNsay1wbGx2MS5vIGNsay1wbGx2Mi5vIGNsay1wbGx2My5vIGNsay1nYXRlMi5vIFwKIAkJCSAgICBjbGstcGZkLm8gY2xrLWJ1c3kubyBjbGsubyBcCkBAIC04OSw3ICs4OSw3IEBACiBvYmotJChDT05GSUdfSEFWRV9JTVhfR1BDKSArPSBncGMubwogb2JqLSQoQ09ORklHX0hBVkVfSU1YX01NREMpICs9IG1tZGMubwogb2JqLSQoQ09ORklHX0hBVkVfSU1YX1NSQykgKz0gc3JjLm8KLWlmZGVmIENPTkZJR19TT0NfSU1YNgoraWZuZXEgKCQoQ09ORklHX1NPQ19JTVg2KSQoQ09ORklHX1NPQ19MUzEwMjFBKSwpCiBBRkxBR1NfaGVhZHNtcC5vIDo9LVdhLC1tYXJjaD1hcm12Ny1hCiBvYmotJChDT05GSUdfU01QKSArPSBoZWFkc21wLm8gcGxhdHNtcC5vCiBvYmotJChDT05GSUdfSE9UUExVR19DUFUpICs9IGhvdHBsdWcubwpAQCAtMTEwLDQgKzExMCw2IEBACiAKIG9iai0kKENPTkZJR19TT0NfVkY2MTApICs9IGNsay12ZjYxMC5vIG1hY2gtdmY2MTAubwogCitvYmotJChDT05GSUdfU09DX0xTMTAyMUEpICs9IG1hY2gtbHMxMDIxYS5vCisKIG9iai15ICs9IGRldmljZXMvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9hbmF0b3AuYyBiL2FyY2gvYXJtL21hY2gtaW14L2FuYXRvcC5jCmluZGV4IDgyNTlhNjIuLjdmMjYyZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2FuYXRvcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2FuYXRvcC5jCkBAIC0zMCw4ICszMCwxMSBAQAogI2RlZmluZSBBTkFESUdfRElHUFJPR19JTVg2U0wJMHgyODAKIAogI2RlZmluZSBCTV9BTkFESUdfUkVHXzJQNV9FTkFCTEVfV0VBS19MSU5SRUcJMHg0MDAwMAorI2RlZmluZSBCTV9BTkFESUdfUkVHXzJQNV9FTkFCTEVfUFVMTERPV04JMHg4CiAjZGVmaW5lIEJNX0FOQURJR19SRUdfQ09SRV9GRVRfT0RSSVZFCQkweDIwMDAwMDAwCiAjZGVmaW5lIEJNX0FOQURJR19BTkFfTUlTQzBfU1RPUF9NT0RFX0NPTkZJRwkweDEwMDAKKy8qIEJlbG93IE1JU0MwX0RJU0NPTl9ISUdIX1NOVlMgaXMgb25seSBmb3IgaS5NWDZTTCAqLworI2RlZmluZSBCTV9BTkFESUdfQU5BX01JU0MwX0RJU0NPTl9ISUdIX1NOVlMJMHgyMDAwCiAjZGVmaW5lIEJNX0FOQURJR19VU0JfQ0hSR19ERVRFQ1RfQ0hLX0NIUkdfQgkweDgwMDAwCiAjZGVmaW5lIEJNX0FOQURJR19VU0JfQ0hSR19ERVRFQ1RfRU5fQgkJMHgxMDAwMDAKIApAQCAtNTYsMTYgKzU5LDQzIEBACiAJCUJNX0FOQURJR19SRUdfQ09SRV9GRVRfT0RSSVZFKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlteF9hbmF0b3BfZW5hYmxlXzJwNV9wdWxsZG93bihib29sIGVuYWJsZSkKK3sKKwlyZWdtYXBfd3JpdGUoYW5hdG9wLCBBTkFESUdfUkVHXzJQNSArIChlbmFibGUgPyBSRUdfU0VUIDogUkVHX0NMUiksCisJCUJNX0FOQURJR19SRUdfMlA1X0VOQUJMRV9QVUxMRE9XTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbXhfYW5hdG9wX2Rpc2Nvbm5lY3RfaGlnaF9zbnZzKGJvb2wgZW5hYmxlKQoreworCXJlZ21hcF93cml0ZShhbmF0b3AsIEFOQURJR19BTkFfTUlTQzAgKyAoZW5hYmxlID8gUkVHX1NFVCA6IFJFR19DTFIpLAorCQlCTV9BTkFESUdfQU5BX01JU0MwX0RJU0NPTl9ISUdIX1NOVlMpOworfQorCiB2b2lkIGlteF9hbmF0b3BfcHJlX3N1c3BlbmQodm9pZCkKIHsKLQlpbXhfYW5hdG9wX2VuYWJsZV93ZWFrMnA1KHRydWUpOworCWlmIChpbXhfbW1kY19nZXRfZGRyX3R5cGUoKSA9PSBJTVhfRERSX1RZUEVfTFBERFIyKQorCQlpbXhfYW5hdG9wX2VuYWJsZV8ycDVfcHVsbGRvd24odHJ1ZSk7CisJZWxzZQorCQlpbXhfYW5hdG9wX2VuYWJsZV93ZWFrMnA1KHRydWUpOworCiAJaW14X2FuYXRvcF9lbmFibGVfZmV0X29kcml2ZSh0cnVlKTsKKworCWlmIChjcHVfaXNfaW14NnNsKCkpCisJCWlteF9hbmF0b3BfZGlzY29ubmVjdF9oaWdoX3NudnModHJ1ZSk7CiB9CiAKIHZvaWQgaW14X2FuYXRvcF9wb3N0X3Jlc3VtZSh2b2lkKQogeworCWlmIChpbXhfbW1kY19nZXRfZGRyX3R5cGUoKSA9PSBJTVhfRERSX1RZUEVfTFBERFIyKQorCQlpbXhfYW5hdG9wX2VuYWJsZV8ycDVfcHVsbGRvd24oZmFsc2UpOworCWVsc2UKKwkJaW14X2FuYXRvcF9lbmFibGVfd2VhazJwNShmYWxzZSk7CisKIAlpbXhfYW5hdG9wX2VuYWJsZV9mZXRfb2RyaXZlKGZhbHNlKTsKLQlpbXhfYW5hdG9wX2VuYWJsZV93ZWFrMnA1KGZhbHNlKTsKKworCWlmIChjcHVfaXNfaW14NnNsKCkpCisJCWlteF9hbmF0b3BfZGlzY29ubmVjdF9oaWdoX3NudnMoZmFsc2UpOworCiB9CiAKIHN0YXRpYyB2b2lkIGlteF9hbmF0b3BfdXNiX2NocmdfZGV0ZWN0X2Rpc2FibGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1jcHUuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFjMzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWNwdS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEx1Y2FzIFN0YWNoIDxsLnN0YWNoQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworc3RydWN0IGNsa19jcHUgeworCXN0cnVjdCBjbGtfaHcJaHc7CisJc3RydWN0IGNsawkqZGl2OworCXN0cnVjdCBjbGsJKm11eDsKKwlzdHJ1Y3QgY2xrCSpwbGw7CisJc3RydWN0IGNsawkqc3RlcDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsa19jcHUgKnRvX2Nsa19jcHUoc3RydWN0IGNsa19odyAqaHcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGNsa19jcHUsIGh3KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2NwdV9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IGNsa19jcHUgKmNwdSA9IHRvX2Nsa19jcHUoaHcpOworCisJcmV0dXJuIGNsa19nZXRfcmF0ZShjcHUtPmRpdik7Cit9CisKK3N0YXRpYyBsb25nIGNsa19jcHVfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnByYXRlKQoreworCXN0cnVjdCBjbGtfY3B1ICpjcHUgPSB0b19jbGtfY3B1KGh3KTsKKworCXJldHVybiBjbGtfcm91bmRfcmF0ZShjcHUtPnBsbCwgcmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2xrX2NwdV9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IGNsa19jcHUgKmNwdSA9IHRvX2Nsa19jcHUoaHcpOworCWludCByZXQ7CisKKwkvKiBzd2l0Y2ggdG8gUExMIGJ5cGFzcyBjbG9jayAqLworCXJldCA9IGNsa19zZXRfcGFyZW50KGNwdS0+bXV4LCBjcHUtPnN0ZXApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiByZXByb2dyYW0gUExMICovCisJcmV0ID0gY2xrX3NldF9yYXRlKGNwdS0+cGxsLCByYXRlKTsKKwlpZiAocmV0KSB7CisJCWNsa19zZXRfcGFyZW50KGNwdS0+bXV4LCBjcHUtPnBsbCk7CisJCXJldHVybiByZXQ7CisJfQorCS8qIHN3aXRjaCBiYWNrIHRvIFBMTCBjbG9jayAqLworCWNsa19zZXRfcGFyZW50KGNwdS0+bXV4LCBjcHUtPnBsbCk7CisKKwkvKiBFbnN1cmUgdGhlIGRpdmlkZXIgaXMgd2hhdCB3ZSBleHBlY3QgKi8KKwljbGtfc2V0X3JhdGUoY3B1LT5kaXYsIHJhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjbGtfY3B1X29wcyA9IHsKKwkucmVjYWxjX3JhdGUJPSBjbGtfY3B1X3JlY2FsY19yYXRlLAorCS5yb3VuZF9yYXRlCT0gY2xrX2NwdV9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9IGNsa19jcHVfc2V0X3JhdGUsCit9OworCitzdHJ1Y3QgY2xrICppbXhfY2xrX2NwdShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKKwkJc3RydWN0IGNsayAqZGl2LCBzdHJ1Y3QgY2xrICptdXgsIHN0cnVjdCBjbGsgKnBsbCwKKwkJc3RydWN0IGNsayAqc3RlcCkKK3sKKwlzdHJ1Y3QgY2xrX2NwdSAqY3B1OworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OworCisJY3B1ID0ga3phbGxvYyhzaXplb2YoKmNwdSksIEdGUF9LRVJORUwpOworCWlmICghY3B1KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWNwdS0+ZGl2ID0gZGl2OworCWNwdS0+bXV4ID0gbXV4OworCWNwdS0+cGxsID0gcGxsOworCWNwdS0+c3RlcCA9IHN0ZXA7CisKKwlpbml0Lm5hbWUgPSBuYW1lOworCWluaXQub3BzID0gJmNsa19jcHVfb3BzOworCWluaXQuZmxhZ3MgPSAwOworCWluaXQucGFyZW50X25hbWVzID0gJnBhcmVudF9uYW1lOworCWluaXQubnVtX3BhcmVudHMgPSAxOworCisJY3B1LT5ody5pbml0ID0gJmluaXQ7CisKKwljbGsgPSBjbGtfcmVnaXN0ZXIoTlVMTCwgJmNwdS0+aHcpOworCWlmIChJU19FUlIoY2xrKSkKKwkJa2ZyZWUoY3B1KTsKKworCXJldHVybiBjbGs7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NTEtaW14NTMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jCmluZGV4IDcyZDY1MjEuLjBmN2U1MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jCkBAIC0xMjUsNiArMTI1LDggQEAKIHN0YXRpYyBjb25zdCBjaGFyICpzcGRpZl9zZWxbXSA9IHsgInBsbDFfc3ciLCAicGxsMl9zdyIsICJwbGwzX3N3IiwgInNwZGlmX3h0YWxfc2VsIiwgfTsKIHN0YXRpYyBjb25zdCBjaGFyICpzcGRpZjBfY29tX3NlbFtdID0geyAic3BkaWYwX3BvZGYiLCAic3NpMV9yb290X2dhdGUiLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKm14NTFfc3BkaWYxX2NvbV9zZWxbXSA9IHsgInNwZGlmMV9wb2RmIiwgInNzaTJfcm9vdF9nYXRlIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpzdGVwX3NlbHNbXSA9IHsgImxwX2FwbSIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqY3B1X3BvZGZfc2Vsc1tdID0geyAicGxsMV9zdyIsICJzdGVwX3NlbCIgfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgKmNsa1tJTVg1X0NMS19FTkRdOwogc3RhdGljIHN0cnVjdCBjbGtfb25lY2VsbF9kYXRhIGNsa19kYXRhOwpAQCAtMTkzLDcgKzE5NSw5IEBACiAJY2xrW0lNWDVfQ0xLX1VTQl9QSFlfUE9ERl0JPSBpbXhfY2xrX2RpdmlkZXIoInVzYl9waHlfcG9kZiIsICJ1c2JfcGh5X3ByZWQiLCBNWENfQ0NNX0NEQ0RSLCAwLCAzKTsKIAljbGtbSU1YNV9DTEtfVVNCX1BIWV9TRUxdCT0gaW14X2Nsa19tdXgoInVzYl9waHlfc2VsIiwgTVhDX0NDTV9DU0NNUjEsIDI2LCAxLAogCQkJCQkJdXNiX3BoeV9zZWxfc3RyLCBBUlJBWV9TSVpFKHVzYl9waHlfc2VsX3N0cikpOwotCWNsa1tJTVg1X0NMS19DUFVfUE9ERl0JCT0gaW14X2Nsa19kaXZpZGVyKCJjcHVfcG9kZiIsICJwbGwxX3N3IiwgTVhDX0NDTV9DQUNSUiwgMCwgMyk7CisJY2xrW0lNWDVfQ0xLX1NURVBfU0VMXQkJPSBpbXhfY2xrX211eCgic3RlcF9zZWwiLCBNWENfQ0NNX0NDU1IsIDcsIDIsIHN0ZXBfc2VscywgQVJSQVlfU0laRShzdGVwX3NlbHMpKTsKKwljbGtbSU1YNV9DTEtfQ1BVX1BPREZfU0VMXQk9IGlteF9jbGtfbXV4KCJjcHVfcG9kZl9zZWwiLCBNWENfQ0NNX0NDU1IsIDIsIDEsIGNwdV9wb2RmX3NlbHMsIEFSUkFZX1NJWkUoY3B1X3BvZGZfc2VscykpOworCWNsa1tJTVg1X0NMS19DUFVfUE9ERl0JCT0gaW14X2Nsa19kaXZpZGVyKCJjcHVfcG9kZiIsICJjcHVfcG9kZl9zZWwiLCBNWENfQ0NNX0NBQ1JSLCAwLCAzKTsKIAljbGtbSU1YNV9DTEtfRElfUFJFRF0JCT0gaW14X2Nsa19kaXZpZGVyKCJkaV9wcmVkIiwgInBsbDNfc3ciLCBNWENfQ0NNX0NEQ0RSLCA2LCAzKTsKIAljbGtbSU1YNV9DTEtfSUlNX0dBVEVdCQk9IGlteF9jbGtfZ2F0ZTIoImlpbV9nYXRlIiwgImlwZyIsIE1YQ19DQ01fQ0NHUjAsIDMwKTsKIAljbGtbSU1YNV9DTEtfVUFSVDFfSVBHX0dBVEVdCT0gaW14X2Nsa19nYXRlMigidWFydDFfaXBnX2dhdGUiLCAiaXBnIiwgTVhDX0NDTV9DQ0dSMSwgNik7CkBAIC01MzcsNiArNTQxLDExIEBACiAJY2xrW0lNWDVfQ0xLX0NLTzJdCQk9IGlteF9jbGtfZ2F0ZTIoImNrbzIiLCAiY2tvMl9wb2RmIiwgTVhDX0NDTV9DQ09TUiwgMjQpOwogCWNsa1tJTVg1X0NMS19TUERJRl9YVEFMX1NFTF0JPSBpbXhfY2xrX211eCgic3BkaWZfeHRhbF9zZWwiLCBNWENfQ0NNX0NTQ01SMSwgMiwgMiwKIAkJCQkJCW14NTNfc3BkaWZfeHRhbF9zZWwsIEFSUkFZX1NJWkUobXg1M19zcGRpZl94dGFsX3NlbCkpOworCWNsa1tJTVg1X0NMS19BUk1dCQk9IGlteF9jbGtfY3B1KCJhcm0iLCAiY3B1X3BvZGYiLAorCQkJCQkJY2xrW0lNWDVfQ0xLX0NQVV9QT0RGXSwKKwkJCQkJCWNsa1tJTVg1X0NMS19DUFVfUE9ERl9TRUxdLAorCQkJCQkJY2xrW0lNWDVfQ0xLX1BMTDFfU1ddLAorCQkJCQkJY2xrW0lNWDVfQ0xLX1NURVBfU0VMXSk7CiAKIAlpbXhfY2hlY2tfY2xvY2tzKGNsaywgQVJSQVlfU0laRShjbGspKTsKIApAQCAtNTUxLDYgKzU2MCw5IEBACiAJLyogbW92ZSBjYW4gYnVzIGNsayB0byAyNE1IeiAqLwogCWNsa19zZXRfcGFyZW50KGNsa1tJTVg1X0NMS19DQU5fU0VMXSwgY2xrW0lNWDVfQ0xLX0xQX0FQTV0pOwogCisJLyogbWFrZSBzdXJlIHN0ZXAgY2xvY2sgaXMgcnVubmluZyBmcm9tIDI0TUh6ICovCisJY2xrX3NldF9wYXJlbnQoY2xrW0lNWDVfQ0xLX1NURVBfU0VMXSwgY2xrW0lNWDVfQ0xLX0xQX0FQTV0pOworCiAJY2xrX3ByZXBhcmVfZW5hYmxlKGNsa1tJTVg1X0NMS19JSU1fR0FURV0pOwogCWlteF9wcmludF9zaWxpY29uX3JldigiaS5NWDUzIiwgbXg1M19yZXZpc2lvbigpKTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrW0lNWDVfQ0xLX0lJTV9HQVRFXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jCmluZGV4IDRlNzlkYTcuLjU5NTE2NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJcG9zdF9kaXZfdGFibGVbMl0uZGl2ID0gMTsKIAkJdmlkZW9fZGl2X3RhYmxlWzFdLmRpdiA9IDE7CiAJCXZpZGVvX2Rpdl90YWJsZVsyXS5kaXYgPSAxOwotCX07CisJfQogCiAJY2xrW0lNWDZRRExfUExMMV9CWVBBU1NfU1JDXSA9IGlteF9jbGtfbXV4KCJwbGwxX2J5cGFzc19zcmMiLCBiYXNlICsgMHgwMCwgMTQsIDIsIHBsbF9ieXBhc3Nfc3JjX3NlbHMsIEFSUkFZX1NJWkUocGxsX2J5cGFzc19zcmNfc2VscykpOwogCWNsa1tJTVg2UURMX1BMTDJfQllQQVNTX1NSQ10gPSBpbXhfY2xrX211eCgicGxsMl9ieXBhc3Nfc3JjIiwgYmFzZSArIDB4MzAsIDE0LCAyLCBwbGxfYnlwYXNzX3NyY19zZWxzLCBBUlJBWV9TSVpFKHBsbF9ieXBhc3Nfc3JjX3NlbHMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1wbGx2My5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXBsbHYzLmMKaW5kZXggNTdkZTc0ZC4uMGFkNmU1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXBsbHYzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXBsbHYzLmMKQEAgLTY5LDcgKzY5LDYgQEAKIHsKIAlzdHJ1Y3QgY2xrX3BsbHYzICpwbGwgPSB0b19jbGtfcGxsdjMoaHcpOwogCXUzMiB2YWw7Ci0JaW50IHJldDsKIAogCXZhbCA9IHJlYWRsX3JlbGF4ZWQocGxsLT5iYXNlKTsKIAlpZiAocGxsLT5wb3dlcnVwX3NldCkKQEAgLTc4LDExICs3Nyw3IEBACiAJCXZhbCAmPSB+Qk1fUExMX1BPV0VSOwogCXdyaXRlbF9yZWxheGVkKHZhbCwgcGxsLT5iYXNlKTsKIAotCXJldCA9IGNsa19wbGx2M193YWl0X2xvY2socGxsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNsa19wbGx2M193YWl0X2xvY2socGxsKTsKIH0KIAogc3RhdGljIHZvaWQgY2xrX3BsbHYzX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay12ZjYxMC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXZmNjEwLmMKaW5kZXggYTE3ODE4NC4uNTkzN2RkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXZmNjEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXZmNjEwLmMKQEAgLTU4LDggKzU4LDE0IEBACiAjZGVmaW5lIFBGRF9QTEwxX0JBU0UJCShhbmF0b3BfYmFzZSArIDB4MmIwKQogI2RlZmluZSBQRkRfUExMMl9CQVNFCQkoYW5hdG9wX2Jhc2UgKyAweDEwMCkKICNkZWZpbmUgUEZEX1BMTDNfQkFTRQkJKGFuYXRvcF9iYXNlICsgMHhmMCkKKyNkZWZpbmUgUExMMV9DVFJMCQkoYW5hdG9wX2Jhc2UgKyAweDI3MCkKKyNkZWZpbmUgUExMMl9DVFJMCQkoYW5hdG9wX2Jhc2UgKyAweDMwKQogI2RlZmluZSBQTEwzX0NUUkwJCShhbmF0b3BfYmFzZSArIDB4MTApCisjZGVmaW5lIFBMTDRfQ1RSTAkJKGFuYXRvcF9iYXNlICsgMHg3MCkKKyNkZWZpbmUgUExMNV9DVFJMCQkoYW5hdG9wX2Jhc2UgKyAweGUwKQorI2RlZmluZSBQTEw2X0NUUkwJCShhbmF0b3BfYmFzZSArIDB4YTApCiAjZGVmaW5lIFBMTDdfQ1RSTAkJKGFuYXRvcF9iYXNlICsgMHgyMCkKKyNkZWZpbmUgQU5BX01JU0MxCQkoYW5hdG9wX2Jhc2UgKyAweDE2MCkKIAogc3RhdGljIHZvaWQgX19pb21lbSAqYW5hdG9wX2Jhc2U7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICpjY21fYmFzZTsKQEAgLTY3LDI1ICs3MywzNCBAQAogLyogc291cmNlcyBmb3IgbXVsdGlwbGV4ZXIgY2xvY2tzLCB0aGlzIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpmYXN0X3NlbHNbXQk9IHsgImZpcmMiLCAiZnhvc2MiLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnNsb3dfc2Vsc1tdCT0geyAic2lyY18zMmsiLCAic3hvc2MiLCB9Owotc3RhdGljIGNvbnN0IGNoYXIgKnBsbDFfc2Vsc1tdCT0geyAicGxsMV9tYWluIiwgInBsbDFfcGZkMSIsICJwbGwxX3BmZDIiLCAicGxsMV9wZmQzIiwgInBsbDFfcGZkNCIsIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqcGxsMl9zZWxzW10JPSB7ICJwbGwyX21haW4iLCAicGxsMl9wZmQxIiwgInBsbDJfcGZkMiIsICJwbGwyX3BmZDMiLCAicGxsMl9wZmQ0IiwgfTsKLXN0YXRpYyBjb25zdCBjaGFyICpzeXNfc2Vsc1tdCT0geyAiZmFzdF9jbGtfc2VsIiwgInNsb3dfY2xrX3NlbCIsICJwbGwyX3BmZF9zZWwiLCAicGxsMl9tYWluIiwgInBsbDFfcGZkX3NlbCIsICJwbGwzX21haW4iLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnBsbDFfc2Vsc1tdCT0geyAicGxsMV9zeXMiLCAicGxsMV9wZmQxIiwgInBsbDFfcGZkMiIsICJwbGwxX3BmZDMiLCAicGxsMV9wZmQ0IiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwbGwyX3NlbHNbXQk9IHsgInBsbDJfYnVzIiwgInBsbDJfcGZkMSIsICJwbGwyX3BmZDIiLCAicGxsMl9wZmQzIiwgInBsbDJfcGZkNCIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqcGxsX2J5cGFzc19zcmNfc2Vsc1tdID0geyAiZmFzdF9jbGtfc2VsIiwgImx2ZHMxX2luIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwbGwxX2J5cGFzc19zZWxzW10gPSB7ICJwbGwxIiwgInBsbDFfYnlwYXNzX3NyYyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqcGxsMl9ieXBhc3Nfc2Vsc1tdID0geyAicGxsMiIsICJwbGwyX2J5cGFzc19zcmMiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnBsbDNfYnlwYXNzX3NlbHNbXSA9IHsgInBsbDMiLCAicGxsM19ieXBhc3Nfc3JjIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwbGw0X2J5cGFzc19zZWxzW10gPSB7ICJwbGw0IiwgInBsbDRfYnlwYXNzX3NyYyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqcGxsNV9ieXBhc3Nfc2Vsc1tdID0geyAicGxsNSIsICJwbGw1X2J5cGFzc19zcmMiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnBsbDZfYnlwYXNzX3NlbHNbXSA9IHsgInBsbDYiLCAicGxsNl9ieXBhc3Nfc3JjIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwbGw3X2J5cGFzc19zZWxzW10gPSB7ICJwbGw3IiwgInBsbDdfYnlwYXNzX3NyYyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqc3lzX3NlbHNbXQk9IHsgImZhc3RfY2xrX3NlbCIsICJzbG93X2Nsa19zZWwiLCAicGxsMl9wZmRfc2VsIiwgInBsbDJfYnVzIiwgInBsbDFfcGZkX3NlbCIsICJwbGwzX3VzYl9vdGciLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKmRkcl9zZWxzW10JPSB7ICJwbGwyX3BmZDIiLCAic3lzX3NlbCIsIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcm1paV9zZWxzW10JPSB7ICJlbmV0X2V4dCIsICJhdWRpb19leHQiLCAiZW5ldF81MG0iLCAiZW5ldF8yNW0iLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKmVuZXRfdHNfc2Vsc1tdCT0geyAiZW5ldF9leHQiLCAiZnhvc2MiLCAiYXVkaW9fZXh0IiwgInVzYiIsICJlbmV0X3RzIiwgImVuZXRfMjVtIiwgImVuZXRfNTBtIiwgfTsKLXN0YXRpYyBjb25zdCBjaGFyICplc2FpX3NlbHNbXQk9IHsgImF1ZGlvX2V4dCIsICJtbGIiLCAic3BkaWZfcngiLCAicGxsNF9tYWluX2RpdiIsIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqc2FpX3NlbHNbXQk9IHsgImF1ZGlvX2V4dCIsICJtbGIiLCAic3BkaWZfcngiLCAicGxsNF9tYWluX2RpdiIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqZXNhaV9zZWxzW10JPSB7ICJhdWRpb19leHQiLCAibWxiIiwgInNwZGlmX3J4IiwgInBsbDRfYXVkaW9fZGl2IiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpzYWlfc2Vsc1tdCT0geyAiYXVkaW9fZXh0IiwgIm1sYiIsICJzcGRpZl9yeCIsICJwbGw0X2F1ZGlvX2RpdiIsIH07CiBzdGF0aWMgY29uc3QgY2hhciAqbmZjX3NlbHNbXQk9IHsgInBsYXRmb3JtX2J1cyIsICJwbGwxX3BmZDEiLCAicGxsM19wZmQxIiwgInBsbDNfcGZkMyIsIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqcXNwaV9zZWxzW10JPSB7ICJwbGwzX21haW4iLCAicGxsM19wZmQ0IiwgInBsbDJfcGZkNCIsICJwbGwxX3BmZDQiLCB9Owotc3RhdGljIGNvbnN0IGNoYXIgKmVzZGhjX3NlbHNbXQk9IHsgInBsbDNfbWFpbiIsICJwbGwzX3BmZDMiLCAicGxsMV9wZmQzIiwgInBsYXRmb3JtX2J1cyIsIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqZGN1X3NlbHNbXQk9IHsgInBsbDFfcGZkMiIsICJwbGwzX21haW4iLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnFzcGlfc2Vsc1tdCT0geyAicGxsM191c2Jfb3RnIiwgInBsbDNfcGZkNCIsICJwbGwyX3BmZDQiLCAicGxsMV9wZmQ0IiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICplc2RoY19zZWxzW10JPSB7ICJwbGwzX3VzYl9vdGciLCAicGxsM19wZmQzIiwgInBsbDFfcGZkMyIsICJwbGF0Zm9ybV9idXMiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmRjdV9zZWxzW10JPSB7ICJwbGwxX3BmZDIiLCAicGxsM191c2Jfb3RnIiwgfTsKIHN0YXRpYyBjb25zdCBjaGFyICpncHVfc2Vsc1tdCT0geyAicGxsMl9wZmQyIiwgInBsbDNfcGZkMiIsIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqdmFkY19zZWxzW10JPSB7ICJwbGw2X21haW5fZGl2IiwgInBsbDNfbWFpbl9kaXYiLCAicGxsM19tYWluIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICp2YWRjX3NlbHNbXQk9IHsgInBsbDZfdmlkZW9fZGl2IiwgInBsbDNfdXNiX290Z19kaXYiLCAicGxsM191c2Jfb3RnIiwgfTsKIC8qIEZUTSBjb3VudGVyIGNsb2NrIHNvdXJjZSwgbm90IG1vZHVsZSBjbG9jayAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmZ0bV9leHRfc2Vsc1tdCT0geyJzaXJjXzEyOGsiLCAic3hvc2MiLCAiZnhvc2NfaGFsZiIsICJhdWRpb19leHQiLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKmZ0bV9maXhfc2Vsc1tdCT0geyAic3hvc2MiLCAiaXBnX2J1cyIsIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl90YWJsZSBwbGw0X21haW5fZGl2X3RhYmxlW10gPSB7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl90YWJsZSBwbGw0X2F1ZGlvX2Rpdl90YWJsZVtdID0gewogCXsgLnZhbCA9IDAsIC5kaXYgPSAxIH0sCiAJeyAudmFsID0gMSwgLmRpdiA9IDIgfSwKIAl7IC52YWwgPSAyLCAuZGl2ID0gNiB9LApAQCAtMTA1LDYgKzEyMCwxNyBAQAogCVZGNjEwX0NMS19ERFJfU0VMLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQgdmY2MTBfZ2V0X2ZpeGVkX2Nsb2NrKAorCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNsayAqY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKGNjbV9ub2RlLCBuYW1lKTsKKworCS8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaWYgZGV2aWNlIHRyZWUgaXMgbWlzc2luZyBjbGtzIGFzc2lnbm1lbnRzICovCisJaWYgKElTX0VSUihjbGspKQorCQljbGsgPSBpbXhfb2J0YWluX2ZpeGVkX2Nsb2NrKG5hbWUsIDApOworCXJldHVybiBjbGs7Cit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgdmY2MTBfY2xvY2tzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjY21fbm9kZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpAQCAtMTE1LDEwICsxNDEsMTMgQEAKIAljbGtbVkY2MTBfQ0xLX1NJUkNfMzJLXSA9IGlteF9jbGtfZml4ZWQoInNpcmNfMzJrIiwgMzIwMDApOwogCWNsa1tWRjYxMF9DTEtfRklSQ10gPSBpbXhfY2xrX2ZpeGVkKCJmaXJjIiwgMjQwMDAwMDApOwogCi0JY2xrW1ZGNjEwX0NMS19TWE9TQ10gPSBpbXhfb2J0YWluX2ZpeGVkX2Nsb2NrKCJzeG9zYyIsIDApOwotCWNsa1tWRjYxMF9DTEtfRlhPU0NdID0gaW14X29idGFpbl9maXhlZF9jbG9jaygiZnhvc2MiLCAwKTsKLQljbGtbVkY2MTBfQ0xLX0FVRElPX0VYVF0gPSBpbXhfb2J0YWluX2ZpeGVkX2Nsb2NrKCJhdWRpb19leHQiLCAwKTsKLQljbGtbVkY2MTBfQ0xLX0VORVRfRVhUXSA9IGlteF9vYnRhaW5fZml4ZWRfY2xvY2soImVuZXRfZXh0IiwgMCk7CisJY2xrW1ZGNjEwX0NMS19TWE9TQ10gPSB2ZjYxMF9nZXRfZml4ZWRfY2xvY2soY2NtX25vZGUsICJzeG9zYyIpOworCWNsa1tWRjYxMF9DTEtfRlhPU0NdID0gdmY2MTBfZ2V0X2ZpeGVkX2Nsb2NrKGNjbV9ub2RlLCAiZnhvc2MiKTsKKwljbGtbVkY2MTBfQ0xLX0FVRElPX0VYVF0gPSB2ZjYxMF9nZXRfZml4ZWRfY2xvY2soY2NtX25vZGUsICJhdWRpb19leHQiKTsKKwljbGtbVkY2MTBfQ0xLX0VORVRfRVhUXSA9IHZmNjEwX2dldF9maXhlZF9jbG9jayhjY21fbm9kZSwgImVuZXRfZXh0Iik7CisKKwkvKiBDbG9jayBzb3VyY2UgZnJvbSBleHRlcm5hbCBjbG9jayB2aWEgTFZEcyBQQUQgKi8KKwljbGtbVkY2MTBfQ0xLX0FOQUNMSzFdID0gdmY2MTBfZ2V0X2ZpeGVkX2Nsb2NrKGNjbV9ub2RlLCAiYW5hY2xrMSIpOwogCiAJY2xrW1ZGNjEwX0NMS19GWE9TQ19IQUxGXSA9IGlteF9jbGtfZml4ZWRfZmFjdG9yKCJmeG9zY19oYWxmIiwgImZ4b3NjIiwgMSwgMik7CiAKQEAgLTEzMywzMSArMTYyLDYzIEBACiAJY2xrW1ZGNjEwX0NMS19TTE9XX0NMS19TRUxdID0gaW14X2Nsa19tdXgoInNsb3dfY2xrX3NlbCIsIENDTV9DQ1NSLCA0LCAxLCBzbG93X3NlbHMsIEFSUkFZX1NJWkUoc2xvd19zZWxzKSk7CiAJY2xrW1ZGNjEwX0NMS19GQVNLX0NMS19TRUxdID0gaW14X2Nsa19tdXgoImZhc3RfY2xrX3NlbCIsIENDTV9DQ1NSLCA1LCAxLCBmYXN0X3NlbHMsIEFSUkFZX1NJWkUoZmFzdF9zZWxzKSk7CiAKLQljbGtbVkY2MTBfQ0xLX1BMTDFfTUFJTl0gPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigicGxsMV9tYWluIiwgImZhc3RfY2xrX3NlbCIsIDIyLCAxKTsKLQljbGtbVkY2MTBfQ0xLX1BMTDFfUEZEMV0gPSBpbXhfY2xrX3BmZCgicGxsMV9wZmQxIiwgInBsbDFfbWFpbiIsIFBGRF9QTEwxX0JBU0UsIDApOwotCWNsa1tWRjYxMF9DTEtfUExMMV9QRkQyXSA9IGlteF9jbGtfcGZkKCJwbGwxX3BmZDIiLCAicGxsMV9tYWluIiwgUEZEX1BMTDFfQkFTRSwgMSk7Ci0JY2xrW1ZGNjEwX0NMS19QTEwxX1BGRDNdID0gaW14X2Nsa19wZmQoInBsbDFfcGZkMyIsICJwbGwxX21haW4iLCBQRkRfUExMMV9CQVNFLCAyKTsKLQljbGtbVkY2MTBfQ0xLX1BMTDFfUEZENF0gPSBpbXhfY2xrX3BmZCgicGxsMV9wZmQ0IiwgInBsbDFfbWFpbiIsIFBGRF9QTEwxX0JBU0UsIDMpOworCWNsa1tWRjYxMF9DTEtfUExMMV9CWVBBU1NfU1JDXSA9IGlteF9jbGtfbXV4KCJwbGwxX2J5cGFzc19zcmMiLCBQTEwxX0NUUkwsIDE0LCAxLCBwbGxfYnlwYXNzX3NyY19zZWxzLCBBUlJBWV9TSVpFKHBsbF9ieXBhc3Nfc3JjX3NlbHMpKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDJfQllQQVNTX1NSQ10gPSBpbXhfY2xrX211eCgicGxsMl9ieXBhc3Nfc3JjIiwgUExMMl9DVFJMLCAxNCwgMSwgcGxsX2J5cGFzc19zcmNfc2VscywgQVJSQVlfU0laRShwbGxfYnlwYXNzX3NyY19zZWxzKSk7CisJY2xrW1ZGNjEwX0NMS19QTEwzX0JZUEFTU19TUkNdID0gaW14X2Nsa19tdXgoInBsbDNfYnlwYXNzX3NyYyIsIFBMTDNfQ1RSTCwgMTQsIDEsIHBsbF9ieXBhc3Nfc3JjX3NlbHMsIEFSUkFZX1NJWkUocGxsX2J5cGFzc19zcmNfc2VscykpOworCWNsa1tWRjYxMF9DTEtfUExMNF9CWVBBU1NfU1JDXSA9IGlteF9jbGtfbXV4KCJwbGw0X2J5cGFzc19zcmMiLCBQTEw0X0NUUkwsIDE0LCAxLCBwbGxfYnlwYXNzX3NyY19zZWxzLCBBUlJBWV9TSVpFKHBsbF9ieXBhc3Nfc3JjX3NlbHMpKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDVfQllQQVNTX1NSQ10gPSBpbXhfY2xrX211eCgicGxsNV9ieXBhc3Nfc3JjIiwgUExMNV9DVFJMLCAxNCwgMSwgcGxsX2J5cGFzc19zcmNfc2VscywgQVJSQVlfU0laRShwbGxfYnlwYXNzX3NyY19zZWxzKSk7CisJY2xrW1ZGNjEwX0NMS19QTEw2X0JZUEFTU19TUkNdID0gaW14X2Nsa19tdXgoInBsbDZfYnlwYXNzX3NyYyIsIFBMTDZfQ1RSTCwgMTQsIDEsIHBsbF9ieXBhc3Nfc3JjX3NlbHMsIEFSUkFZX1NJWkUocGxsX2J5cGFzc19zcmNfc2VscykpOworCWNsa1tWRjYxMF9DTEtfUExMN19CWVBBU1NfU1JDXSA9IGlteF9jbGtfbXV4KCJwbGw3X2J5cGFzc19zcmMiLCBQTEw3X0NUUkwsIDE0LCAxLCBwbGxfYnlwYXNzX3NyY19zZWxzLCBBUlJBWV9TSVpFKHBsbF9ieXBhc3Nfc3JjX3NlbHMpKTsKIAotCWNsa1tWRjYxMF9DTEtfUExMMl9NQUlOXSA9IGlteF9jbGtfZml4ZWRfZmFjdG9yKCJwbGwyX21haW4iLCAiZmFzdF9jbGtfc2VsIiwgMjIsIDEpOwotCWNsa1tWRjYxMF9DTEtfUExMMl9QRkQxXSA9IGlteF9jbGtfcGZkKCJwbGwyX3BmZDEiLCAicGxsMl9tYWluIiwgUEZEX1BMTDJfQkFTRSwgMCk7Ci0JY2xrW1ZGNjEwX0NMS19QTEwyX1BGRDJdID0gaW14X2Nsa19wZmQoInBsbDJfcGZkMiIsICJwbGwyX21haW4iLCBQRkRfUExMMl9CQVNFLCAxKTsKLQljbGtbVkY2MTBfQ0xLX1BMTDJfUEZEM10gPSBpbXhfY2xrX3BmZCgicGxsMl9wZmQzIiwgInBsbDJfbWFpbiIsIFBGRF9QTEwyX0JBU0UsIDIpOwotCWNsa1tWRjYxMF9DTEtfUExMMl9QRkQ0XSA9IGlteF9jbGtfcGZkKCJwbGwyX3BmZDQiLCAicGxsMl9tYWluIiwgUEZEX1BMTDJfQkFTRSwgMyk7CisJY2xrW1ZGNjEwX0NMS19QTEwxXSA9IGlteF9jbGtfcGxsdjMoSU1YX1BMTFYzX0dFTkVSSUMsICJwbGwxIiwgInBsbDFfYnlwYXNzX3NyYyIsIFBMTDFfQ1RSTCwgMHgxKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDJdID0gaW14X2Nsa19wbGx2MyhJTVhfUExMVjNfR0VORVJJQywgInBsbDIiLCAicGxsMl9ieXBhc3Nfc3JjIiwgUExMMl9DVFJMLCAweDEpOworCWNsa1tWRjYxMF9DTEtfUExMM10gPSBpbXhfY2xrX3BsbHYzKElNWF9QTExWM19VU0IsICAgICAicGxsMyIsICJwbGwzX2J5cGFzc19zcmMiLCBQTEwzX0NUUkwsIDB4MSk7CisJY2xrW1ZGNjEwX0NMS19QTEw0XSA9IGlteF9jbGtfcGxsdjMoSU1YX1BMTFYzX0FWLCAgICAgICJwbGw0IiwgInBsbDRfYnlwYXNzX3NyYyIsIFBMTDRfQ1RSTCwgMHg3Zik7CisJY2xrW1ZGNjEwX0NMS19QTEw1XSA9IGlteF9jbGtfcGxsdjMoSU1YX1BMTFYzX0VORVQsICAgICJwbGw1IiwgInBsbDVfYnlwYXNzX3NyYyIsIFBMTDVfQ1RSTCwgMHgzKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDZdID0gaW14X2Nsa19wbGx2MyhJTVhfUExMVjNfQVYsICAgICAgInBsbDYiLCAicGxsNl9ieXBhc3Nfc3JjIiwgUExMNl9DVFJMLCAweDdmKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDddID0gaW14X2Nsa19wbGx2MyhJTVhfUExMVjNfVVNCLCAgICAgInBsbDciLCAicGxsN19ieXBhc3Nfc3JjIiwgUExMN19DVFJMLCAweDEpOwogCi0JY2xrW1ZGNjEwX0NMS19QTEwzX01BSU5dID0gaW14X2Nsa19maXhlZF9mYWN0b3IoInBsbDNfbWFpbiIsICJmYXN0X2Nsa19zZWwiLCAyMCwgMSk7Ci0JY2xrW1ZGNjEwX0NMS19QTEwzX1BGRDFdID0gaW14X2Nsa19wZmQoInBsbDNfcGZkMSIsICJwbGwzX21haW4iLCBQRkRfUExMM19CQVNFLCAwKTsKLQljbGtbVkY2MTBfQ0xLX1BMTDNfUEZEMl0gPSBpbXhfY2xrX3BmZCgicGxsM19wZmQyIiwgInBsbDNfbWFpbiIsIFBGRF9QTEwzX0JBU0UsIDEpOwotCWNsa1tWRjYxMF9DTEtfUExMM19QRkQzXSA9IGlteF9jbGtfcGZkKCJwbGwzX3BmZDMiLCAicGxsM19tYWluIiwgUEZEX1BMTDNfQkFTRSwgMik7Ci0JY2xrW1ZGNjEwX0NMS19QTEwzX1BGRDRdID0gaW14X2Nsa19wZmQoInBsbDNfcGZkNCIsICJwbGwzX21haW4iLCBQRkRfUExMM19CQVNFLCAzKTsKKwljbGtbVkY2MTBfUExMMV9CWVBBU1NdID0gaW14X2Nsa19tdXhfZmxhZ3MoInBsbDFfYnlwYXNzIiwgUExMMV9DVFJMLCAxNiwgMSwgcGxsMV9ieXBhc3Nfc2VscywgQVJSQVlfU0laRShwbGwxX2J5cGFzc19zZWxzKSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCk7CisJY2xrW1ZGNjEwX1BMTDJfQllQQVNTXSA9IGlteF9jbGtfbXV4X2ZsYWdzKCJwbGwyX2J5cGFzcyIsIFBMTDJfQ1RSTCwgMTYsIDEsIHBsbDJfYnlwYXNzX3NlbHMsIEFSUkFZX1NJWkUocGxsMl9ieXBhc3Nfc2VscyksIENMS19TRVRfUkFURV9QQVJFTlQpOworCWNsa1tWRjYxMF9QTEwzX0JZUEFTU10gPSBpbXhfY2xrX211eF9mbGFncygicGxsM19ieXBhc3MiLCBQTEwzX0NUUkwsIDE2LCAxLCBwbGwzX2J5cGFzc19zZWxzLCBBUlJBWV9TSVpFKHBsbDNfYnlwYXNzX3NlbHMpLCBDTEtfU0VUX1JBVEVfUEFSRU5UKTsKKwljbGtbVkY2MTBfUExMNF9CWVBBU1NdID0gaW14X2Nsa19tdXhfZmxhZ3MoInBsbDRfYnlwYXNzIiwgUExMNF9DVFJMLCAxNiwgMSwgcGxsNF9ieXBhc3Nfc2VscywgQVJSQVlfU0laRShwbGw0X2J5cGFzc19zZWxzKSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCk7CisJY2xrW1ZGNjEwX1BMTDVfQllQQVNTXSA9IGlteF9jbGtfbXV4X2ZsYWdzKCJwbGw1X2J5cGFzcyIsIFBMTDVfQ1RSTCwgMTYsIDEsIHBsbDVfYnlwYXNzX3NlbHMsIEFSUkFZX1NJWkUocGxsNV9ieXBhc3Nfc2VscyksIENMS19TRVRfUkFURV9QQVJFTlQpOworCWNsa1tWRjYxMF9QTEw2X0JZUEFTU10gPSBpbXhfY2xrX211eF9mbGFncygicGxsNl9ieXBhc3MiLCBQTEw2X0NUUkwsIDE2LCAxLCBwbGw2X2J5cGFzc19zZWxzLCBBUlJBWV9TSVpFKHBsbDZfYnlwYXNzX3NlbHMpLCBDTEtfU0VUX1JBVEVfUEFSRU5UKTsKKwljbGtbVkY2MTBfUExMN19CWVBBU1NdID0gaW14X2Nsa19tdXhfZmxhZ3MoInBsbDdfYnlwYXNzIiwgUExMN19DVFJMLCAxNiwgMSwgcGxsN19ieXBhc3Nfc2VscywgQVJSQVlfU0laRShwbGw3X2J5cGFzc19zZWxzKSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCk7CiAKLQljbGtbVkY2MTBfQ0xLX1BMTDRfTUFJTl0gPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigicGxsNF9tYWluIiwgImZhc3RfY2xrX3NlbCIsIDI1LCAxKTsKLQkvKiBFbmV0IHBsbDogZml4ZWQgNTBNaHogKi8KLQljbGtbVkY2MTBfQ0xLX1BMTDVfTUFJTl0gPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigicGxsNV9tYWluIiwgImZhc3RfY2xrX3NlbCIsIDEyNSwgNik7Ci0JLyogcGxsNjogZGVmYXVsdCA5NjBNaHogKi8KLQljbGtbVkY2MTBfQ0xLX1BMTDZfTUFJTl0gPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigicGxsNl9tYWluIiwgImZhc3RfY2xrX3NlbCIsIDQwLCAxKTsKLQkvKiBwbGw3OiBVU0IxIFBMTCBhdCA0ODBNSHogKi8KLQljbGtbVkY2MTBfQ0xLX1BMTDdfTUFJTl0gPSBpbXhfY2xrX3BsbHYzKElNWF9QTExWM19VU0IsCSJwbGw3X21haW4iLCAiZmFzdF9jbGtfc2VsIiwgUExMN19DVFJMLCAweDIpOworCS8qIERvIG5vdCBieXBhc3MgUExMcyBpbml0aWFsbHkgKi8KKwljbGtfc2V0X3BhcmVudChjbGtbVkY2MTBfUExMMV9CWVBBU1NdLCBjbGtbVkY2MTBfQ0xLX1BMTDFdKTsKKwljbGtfc2V0X3BhcmVudChjbGtbVkY2MTBfUExMMl9CWVBBU1NdLCBjbGtbVkY2MTBfQ0xLX1BMTDJdKTsKKwljbGtfc2V0X3BhcmVudChjbGtbVkY2MTBfUExMM19CWVBBU1NdLCBjbGtbVkY2MTBfQ0xLX1BMTDNdKTsKKwljbGtfc2V0X3BhcmVudChjbGtbVkY2MTBfUExMNF9CWVBBU1NdLCBjbGtbVkY2MTBfQ0xLX1BMTDRdKTsKKwljbGtfc2V0X3BhcmVudChjbGtbVkY2MTBfUExMNV9CWVBBU1NdLCBjbGtbVkY2MTBfQ0xLX1BMTDVdKTsKKwljbGtfc2V0X3BhcmVudChjbGtbVkY2MTBfUExMNl9CWVBBU1NdLCBjbGtbVkY2MTBfQ0xLX1BMTDZdKTsKKwljbGtfc2V0X3BhcmVudChjbGtbVkY2MTBfUExMN19CWVBBU1NdLCBjbGtbVkY2MTBfQ0xLX1BMTDddKTsKKworCWNsa1tWRjYxMF9DTEtfUExMMV9TWVNdICAgICAgPSBpbXhfY2xrX2dhdGUoInBsbDFfc3lzIiwgICAgICAicGxsMV9ieXBhc3MiLCBQTEwxX0NUUkwsIDEzKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDJfQlVTXSAgICAgID0gaW14X2Nsa19nYXRlKCJwbGwyX2J1cyIsICAgICAgInBsbDJfYnlwYXNzIiwgUExMMl9DVFJMLCAxMyk7CisJY2xrW1ZGNjEwX0NMS19QTEwzX1VTQl9PVEddICA9IGlteF9jbGtfZ2F0ZSgicGxsM191c2Jfb3RnIiwgICJwbGwzX2J5cGFzcyIsIFBMTDNfQ1RSTCwgMTMpOworCWNsa1tWRjYxMF9DTEtfUExMNF9BVURJT10gICAgPSBpbXhfY2xrX2dhdGUoInBsbDRfYXVkaW8iLCAgICAicGxsNF9ieXBhc3MiLCBQTEw0X0NUUkwsIDEzKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDVfRU5FVF0gICAgID0gaW14X2Nsa19nYXRlKCJwbGw1X2VuZXQiLCAgICAgInBsbDVfYnlwYXNzIiwgUExMNV9DVFJMLCAxMyk7CisJY2xrW1ZGNjEwX0NMS19QTEw2X1ZJREVPXSAgICA9IGlteF9jbGtfZ2F0ZSgicGxsNl92aWRlbyIsICAgICJwbGw2X2J5cGFzcyIsIFBMTDZfQ1RSTCwgMTMpOworCWNsa1tWRjYxMF9DTEtfUExMN19VU0JfSE9TVF0gPSBpbXhfY2xrX2dhdGUoInBsbDdfdXNiX2hvc3QiLCAicGxsN19ieXBhc3MiLCBQTEw3X0NUUkwsIDEzKTsKKworCWNsa1tWRjYxMF9DTEtfTFZEUzFfSU5dICA9IGlteF9jbGtfZ2F0ZV9leGNsdXNpdmUoImx2ZHMxX2luIiwgImFuYWNsazEiLCBBTkFfTUlTQzEsIDEyLCBCSVQoMTApKTsKKworCWNsa1tWRjYxMF9DTEtfUExMMV9QRkQxXSA9IGlteF9jbGtfcGZkKCJwbGwxX3BmZDEiLCAicGxsMV9zeXMiLCBQRkRfUExMMV9CQVNFLCAwKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDFfUEZEMl0gPSBpbXhfY2xrX3BmZCgicGxsMV9wZmQyIiwgInBsbDFfc3lzIiwgUEZEX1BMTDFfQkFTRSwgMSk7CisJY2xrW1ZGNjEwX0NMS19QTEwxX1BGRDNdID0gaW14X2Nsa19wZmQoInBsbDFfcGZkMyIsICJwbGwxX3N5cyIsIFBGRF9QTEwxX0JBU0UsIDIpOworCWNsa1tWRjYxMF9DTEtfUExMMV9QRkQ0XSA9IGlteF9jbGtfcGZkKCJwbGwxX3BmZDQiLCAicGxsMV9zeXMiLCBQRkRfUExMMV9CQVNFLCAzKTsKKworCWNsa1tWRjYxMF9DTEtfUExMMl9QRkQxXSA9IGlteF9jbGtfcGZkKCJwbGwyX3BmZDEiLCAicGxsMl9idXMiLCBQRkRfUExMMl9CQVNFLCAwKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDJfUEZEMl0gPSBpbXhfY2xrX3BmZCgicGxsMl9wZmQyIiwgInBsbDJfYnVzIiwgUEZEX1BMTDJfQkFTRSwgMSk7CisJY2xrW1ZGNjEwX0NMS19QTEwyX1BGRDNdID0gaW14X2Nsa19wZmQoInBsbDJfcGZkMyIsICJwbGwyX2J1cyIsIFBGRF9QTEwyX0JBU0UsIDIpOworCWNsa1tWRjYxMF9DTEtfUExMMl9QRkQ0XSA9IGlteF9jbGtfcGZkKCJwbGwyX3BmZDQiLCAicGxsMl9idXMiLCBQRkRfUExMMl9CQVNFLCAzKTsKKworCWNsa1tWRjYxMF9DTEtfUExMM19QRkQxXSA9IGlteF9jbGtfcGZkKCJwbGwzX3BmZDEiLCAicGxsM191c2Jfb3RnIiwgUEZEX1BMTDNfQkFTRSwgMCk7CisJY2xrW1ZGNjEwX0NMS19QTEwzX1BGRDJdID0gaW14X2Nsa19wZmQoInBsbDNfcGZkMiIsICJwbGwzX3VzYl9vdGciLCBQRkRfUExMM19CQVNFLCAxKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDNfUEZEM10gPSBpbXhfY2xrX3BmZCgicGxsM19wZmQzIiwgInBsbDNfdXNiX290ZyIsIFBGRF9QTEwzX0JBU0UsIDIpOworCWNsa1tWRjYxMF9DTEtfUExMM19QRkQ0XSA9IGlteF9jbGtfcGZkKCJwbGwzX3BmZDQiLCAicGxsM191c2Jfb3RnIiwgUEZEX1BMTDNfQkFTRSwgMyk7CiAKIAljbGtbVkY2MTBfQ0xLX1BMTDFfUEZEX1NFTF0gPSBpbXhfY2xrX211eCgicGxsMV9wZmRfc2VsIiwgQ0NNX0NDU1IsIDE2LCAzLCBwbGwxX3NlbHMsIDUpOwogCWNsa1tWRjYxMF9DTEtfUExMMl9QRkRfU0VMXSA9IGlteF9jbGtfbXV4KCJwbGwyX3BmZF9zZWwiLCBDQ01fQ0NTUiwgMTksIDMsIHBsbDJfc2VscywgNSk7CkBAIC0xNjcsMTIgKzIyOCwxMiBAQAogCWNsa1tWRjYxMF9DTEtfUExBVEZPUk1fQlVTXSA9IGlteF9jbGtfZGl2aWRlcigicGxhdGZvcm1fYnVzIiwgInN5c19idXMiLCBDQ01fQ0FDUlIsIDMsIDMpOwogCWNsa1tWRjYxMF9DTEtfSVBHX0JVU10gPSBpbXhfY2xrX2RpdmlkZXIoImlwZ19idXMiLCAicGxhdGZvcm1fYnVzIiwgQ0NNX0NBQ1JSLCAxMSwgMik7CiAKLQljbGtbVkY2MTBfQ0xLX1BMTDNfTUFJTl9ESVZdID0gaW14X2Nsa19kaXZpZGVyKCJwbGwzX21haW5fZGl2IiwgInBsbDNfbWFpbiIsIENDTV9DQUNSUiwgMjAsIDEpOwotCWNsa1tWRjYxMF9DTEtfUExMNF9NQUlOX0RJVl0gPSBjbGtfcmVnaXN0ZXJfZGl2aWRlcl90YWJsZShOVUxMLCAicGxsNF9tYWluX2RpdiIsICJwbGw0X21haW4iLCAwLCBDQ01fQ0FDUlIsIDYsIDMsIDAsIHBsbDRfbWFpbl9kaXZfdGFibGUsICZpbXhfY2NtX2xvY2spOwotCWNsa1tWRjYxMF9DTEtfUExMNl9NQUlOX0RJVl0gPSBpbXhfY2xrX2RpdmlkZXIoInBsbDZfbWFpbl9kaXYiLCAicGxsNl9tYWluIiwgQ0NNX0NBQ1JSLCAyMSwgMSk7CisJY2xrW1ZGNjEwX0NMS19QTEwzX01BSU5fRElWXSA9IGlteF9jbGtfZGl2aWRlcigicGxsM191c2Jfb3RnX2RpdiIsICJwbGwzX3VzYl9vdGciLCBDQ01fQ0FDUlIsIDIwLCAxKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDRfTUFJTl9ESVZdID0gY2xrX3JlZ2lzdGVyX2RpdmlkZXJfdGFibGUoTlVMTCwgInBsbDRfYXVkaW9fZGl2IiwgInBsbDRfYXVkaW8iLCAwLCBDQ01fQ0FDUlIsIDYsIDMsIDAsIHBsbDRfYXVkaW9fZGl2X3RhYmxlLCAmaW14X2NjbV9sb2NrKTsKKwljbGtbVkY2MTBfQ0xLX1BMTDZfTUFJTl9ESVZdID0gaW14X2Nsa19kaXZpZGVyKCJwbGw2X3ZpZGVvX2RpdiIsICJwbGw2X3ZpZGVvIiwgQ0NNX0NBQ1JSLCAyMSwgMSk7CiAKLQljbGtbVkY2MTBfQ0xLX1VTQlBIWTBdID0gaW14X2Nsa19nYXRlKCJ1c2JwaHkwIiwgInBsbDNfbWFpbiIsIFBMTDNfQ1RSTCwgNik7Ci0JY2xrW1ZGNjEwX0NMS19VU0JQSFkxXSA9IGlteF9jbGtfZ2F0ZSgidXNicGh5MSIsICJwbGw3X21haW4iLCBQTEw3X0NUUkwsIDYpOworCWNsa1tWRjYxMF9DTEtfVVNCUEhZMF0gPSBpbXhfY2xrX2dhdGUoInVzYnBoeTAiLCAicGxsM191c2Jfb3RnIiwgUExMM19DVFJMLCA2KTsKKwljbGtbVkY2MTBfQ0xLX1VTQlBIWTFdID0gaW14X2Nsa19nYXRlKCJ1c2JwaHkxIiwgInBsbDdfdXNiX2hvc3QiLCBQTEw3X0NUUkwsIDYpOwogCiAJY2xrW1ZGNjEwX0NMS19VU0JDMF0gPSBpbXhfY2xrX2dhdGUyKCJ1c2JjMCIsICJpcGdfYnVzIiwgQ0NNX0NDR1IxLCBDQ01fQ0NHUnhfQ0duKDQpKTsKIAljbGtbVkY2MTBfQ0xLX1VTQkMxXSA9IGlteF9jbGtfZ2F0ZTIoInVzYmMxIiwgImlwZ19idXMiLCBDQ01fQ0NHUjcsIENDTV9DQ0dSeF9DR24oNCkpOwpAQCAtMTkxLDggKzI1Miw4IEBACiAJY2xrW1ZGNjEwX0NMS19RU1BJMV9YMV9ESVZdID0gaW14X2Nsa19kaXZpZGVyKCJxc3BpMV94MSIsICJxc3BpMV94MiIsIENDTV9DU0NEUjMsIDExLCAxKTsKIAljbGtbVkY2MTBfQ0xLX1FTUEkxXSA9IGlteF9jbGtfZ2F0ZTIoInFzcGkxIiwgInFzcGkxX3gxIiwgQ0NNX0NDR1I4LCBDQ01fQ0NHUnhfQ0duKDQpKTsKIAotCWNsa1tWRjYxMF9DTEtfRU5FVF81ME1dID0gaW14X2Nsa19maXhlZF9mYWN0b3IoImVuZXRfNTBtIiwgInBsbDVfbWFpbiIsIDEsIDEwKTsKLQljbGtbVkY2MTBfQ0xLX0VORVRfMjVNXSA9IGlteF9jbGtfZml4ZWRfZmFjdG9yKCJlbmV0XzI1bSIsICJwbGw1X21haW4iLCAxLCAyMCk7CisJY2xrW1ZGNjEwX0NMS19FTkVUXzUwTV0gPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigiZW5ldF81MG0iLCAicGxsNV9lbmV0IiwgMSwgMTApOworCWNsa1tWRjYxMF9DTEtfRU5FVF8yNU1dID0gaW14X2Nsa19maXhlZF9mYWN0b3IoImVuZXRfMjVtIiwgInBsbDVfZW5ldCIsIDEsIDIwKTsKIAljbGtbVkY2MTBfQ0xLX0VORVRfU0VMXSA9IGlteF9jbGtfbXV4KCJlbmV0X3NlbCIsIENDTV9DU0NNUjIsIDQsIDIsIHJtaWlfc2VscywgNCk7CiAJY2xrW1ZGNjEwX0NMS19FTkVUX1RTX1NFTF0gPSBpbXhfY2xrX211eCgiZW5ldF90c19zZWwiLCBDQ01fQ1NDTVIyLCAwLCAzLCBlbmV0X3RzX3NlbHMsIDcpOwogCWNsa1tWRjYxMF9DTEtfRU5FVF0gPSBpbXhfY2xrX2dhdGUoImVuZXQiLCAiZW5ldF9zZWwiLCBDQ01fQ1NDRFIxLCAyNCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGsuaCBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay5oCmluZGV4IDRjZGY4YjYuLjVlZjgyZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay5oCkBAIC0xMzEsNCArMTMxLDggQEAKIAkJCUNMS19TRVRfUkFURV9QQVJFTlQsIG11bHQsIGRpdik7CiB9CiAKK3N0cnVjdCBjbGsgKmlteF9jbGtfY3B1KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorCQlzdHJ1Y3QgY2xrICpkaXYsIHN0cnVjdCBjbGsgKm11eCwgc3RydWN0IGNsayAqcGxsLAorCQlzdHJ1Y3QgY2xrICpzdGVwKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtaW14L2NvbW1vbi5oCmluZGV4IDFkYWJmNDMuLmNmY2RiNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2NvbW1vbi5oCkBAIC02MSw3ICs2MSw2IEBACiB2b2lkIG14Y19zZXRfY3B1X3R5cGUodW5zaWduZWQgaW50IHR5cGUpOwogdm9pZCBteGNfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlLCBjb25zdCBjaGFyICopOwogdm9pZCBteGNfYXJjaF9yZXNldF9pbml0KHZvaWQgX19pb21lbSAqKTsKLXZvaWQgbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCh2b2lkKTsKIGludCBteDUxX3JldmlzaW9uKHZvaWQpOwogaW50IG14NTNfcmV2aXNpb24odm9pZCk7CiB2b2lkIGlteF9zZXRfYWlwcyh2b2lkIF9faW9tZW0gKik7CkBAIC0xMDgsMTQgKzEwNywxNSBAQAogdm9pZCBpbXhfZ3BjX3Bvc3RfcmVzdW1lKHZvaWQpOwogdm9pZCBpbXhfZ3BjX21hc2tfYWxsKHZvaWQpOwogdm9pZCBpbXhfZ3BjX3Jlc3RvcmVfYWxsKHZvaWQpOwotdm9pZCBpbXhfZ3BjX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCk7Ci12b2lkIGlteF9ncGNfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpOwordm9pZCBpbXhfZ3BjX2h3aXJxX21hc2sodW5zaWduZWQgaW50IGh3aXJxKTsKK3ZvaWQgaW14X2dwY19od2lycV91bm1hc2sodW5zaWduZWQgaW50IGh3aXJxKTsKIHZvaWQgaW14X2FuYXRvcF9pbml0KHZvaWQpOwogdm9pZCBpbXhfYW5hdG9wX3ByZV9zdXNwZW5kKHZvaWQpOwogdm9pZCBpbXhfYW5hdG9wX3Bvc3RfcmVzdW1lKHZvaWQpOwogaW50IGlteDZxX3NldF9scG0oZW51bSBteGNfY3B1X3B3cl9tb2RlIG1vZGUpOwogdm9pZCBpbXg2cV9zZXRfaW50X21lbV9jbGtfbHBtKGJvb2wgZW5hYmxlKTsKIHZvaWQgaW14NnNsX3NldF93YWl0X2Nsayhib29sIGVudGVyKTsKK2ludCBpbXhfbW1kY19nZXRfZGRyX3R5cGUodm9pZCk7CiAKIHZvaWQgaW14X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CiBpbnQgaW14X2NwdV9raWxsKHVuc2lnbmVkIGludCBjcHUpOwpAQCAtMTU3LDUgKzE1Nyw2IEBACiAjZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBpbXhfc21wX29wczsKK2V4dGVybiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgbHMxMDIxYV9zbXBfb3BzOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2dwYy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZ3BjLmMKaW5kZXggODJlYTc0ZS4uNWYzNjAyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZ3BjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZ3BjLmMKQEAgLTU2LDE0ICs1NiwxNCBAQAogCiBzdGF0aWMgaW50IGlteF9ncGNfaXJxX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IG9uKQogewotCXVuc2lnbmVkIGludCBpZHggPSBkLT5pcnEgLyAzMiAtIDE7CisJdW5zaWduZWQgaW50IGlkeCA9IGQtPmh3aXJxIC8gMzIgLSAxOwogCXUzMiBtYXNrOwogCiAJLyogU2FuaXR5IGNoZWNrIGZvciBTUEkgaXJxICovCi0JaWYgKGQtPmlycSA8IDMyKQorCWlmIChkLT5od2lycSA8IDMyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1hc2sgPSAxIDw8IGQtPmlycSAlIDMyOworCW1hc2sgPSAxIDw8IGQtPmh3aXJxICUgMzI7CiAJZ3BjX3dha2VfaXJxc1tpZHhdID0gb24gPyBncGNfd2FrZV9pcnFzW2lkeF0gfCBtYXNrIDoKIAkJCQkgIGdwY193YWtlX2lycXNbaWR4XSAmIH5tYXNrOwogCkBAIC05MSwzNCArOTEsNDQgQEAKIAkJd3JpdGVsX3JlbGF4ZWQoZ3BjX3NhdmVkX2ltcnNbaV0sIHJlZ19pbXIxICsgaSAqIDQpOwogfQogCi12b2lkIGlteF9ncGNfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit2b2lkIGlteF9ncGNfaHdpcnFfdW5tYXNrKHVuc2lnbmVkIGludCBod2lycSkKIHsKIAl2b2lkIF9faW9tZW0gKnJlZzsKIAl1MzIgdmFsOwogCi0JLyogU2FuaXR5IGNoZWNrIGZvciBTUEkgaXJxICovCi0JaWYgKGQtPmlycSA8IDMyKQotCQlyZXR1cm47Ci0KLQlyZWcgPSBncGNfYmFzZSArIEdQQ19JTVIxICsgKGQtPmlycSAvIDMyIC0gMSkgKiA0OworCXJlZyA9IGdwY19iYXNlICsgR1BDX0lNUjEgKyAoaHdpcnEgLyAzMiAtIDEpICogNDsKIAl2YWwgPSByZWFkbF9yZWxheGVkKHJlZyk7Ci0JdmFsICY9IH4oMSA8PCBkLT5pcnEgJSAzMik7CisJdmFsICY9IH4oMSA8PCBod2lycSAlIDMyKTsKIAl3cml0ZWxfcmVsYXhlZCh2YWwsIHJlZyk7CiB9CiAKLXZvaWQgaW14X2dwY19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit2b2lkIGlteF9ncGNfaHdpcnFfbWFzayh1bnNpZ25lZCBpbnQgaHdpcnEpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWc7CiAJdTMyIHZhbDsKIAorCXJlZyA9IGdwY19iYXNlICsgR1BDX0lNUjEgKyAoaHdpcnEgLyAzMiAtIDEpICogNDsKKwl2YWwgPSByZWFkbF9yZWxheGVkKHJlZyk7CisJdmFsIHw9IDEgPDwgKGh3aXJxICUgMzIpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgaW14X2dwY19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKIAkvKiBTYW5pdHkgY2hlY2sgZm9yIFNQSSBpcnEgKi8KLQlpZiAoZC0+aXJxIDwgMzIpCisJaWYgKGQtPmh3aXJxIDwgMzIpCiAJCXJldHVybjsKIAotCXJlZyA9IGdwY19iYXNlICsgR1BDX0lNUjEgKyAoZC0+aXJxIC8gMzIgLSAxKSAqIDQ7Ci0JdmFsID0gcmVhZGxfcmVsYXhlZChyZWcpOwotCXZhbCB8PSAxIDw8IChkLT5pcnEgJSAzMik7Ci0Jd3JpdGVsX3JlbGF4ZWQodmFsLCByZWcpOworCWlteF9ncGNfaHdpcnFfdW5tYXNrKGQtPmh3aXJxKTsKK30KKworc3RhdGljIHZvaWQgaW14X2dwY19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJLyogU2FuaXR5IGNoZWNrIGZvciBTUEkgaXJxICovCisJaWYgKGQtPmh3aXJxIDwgMzIpCisJCXJldHVybjsKKworCWlteF9ncGNfaHdpcnFfbWFzayhkLT5od2lycSk7CiB9CiAKIHZvaWQgX19pbml0IGlteF9ncGNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjUtZHQuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDI1LWR0LmMKaW5kZXggY2Y4MDMyYi4uMjVkZWZiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjUtZHQuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgyNS1kdC5jCkBAIC0xNywxMyArMTcsNiBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgIm14MjUuaCIKIAotc3RhdGljIHZvaWQgX19pbml0IGlteDI1X2R0X2luaXQodm9pZCkKLXsKLQlteGNfYXJjaF9yZXNldF9pbml0X2R0KCk7Ci0KLQlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgTlVMTCk7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW14MjVfZHRfYm9hcmRfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CiAJImZzbCxpbXgyNSIsCiAJTlVMTApAQCAtMzMsNyArMjYsNSBAQAogCS5tYXBfaW8JCT0gbXgyNV9tYXBfaW8sCiAJLmluaXRfZWFybHkJPSBpbXgyNV9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG14MjVfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IGlteDI1X2R0X2luaXQsCiAJLmR0X2NvbXBhdAk9IGlteDI1X2R0X2JvYXJkX2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lteDI3LWR0LmMgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgyNy1kdC5jCmluZGV4IGRjOGYxYTYuLmJkNDJkMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lteDI3LWR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjctZHQuYwpAQCAtMjIsOCArMjIsNiBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBkZXZpbmZvID0geyAubmFtZSA9ICJjcHVmcmVxLWR0IiwgfTsKIAotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZkZXZpbmZvKTsKQEAgLTQwLDUgKzM4LDQgQEAKIAkuaW5pdF9pcnEJPSBteDI3X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBpbXgyN19kdF9pbml0LAogCS5kdF9jb21wYXQJPSBpbXgyN19kdF9ib2FyZF9jb21wYXQsCi0JLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pbXgzMS1kdC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzEtZHQuYwppbmRleCA0MThkYmM4Li4zMjEwMDIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pbXgzMS1kdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDMxLWR0LmMKQEAgLTE4LDEzICsxOCw2IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAibXgzMS5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW14MzFfZHRfaW5pdCh2b2lkKQotewotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbXgzMV9kdF9ib2FyZF9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKIAkiZnNsLGlteDMxIiwKIAlOVUxMCkBAIC00MCw3ICszMyw1IEBACiAJLmluaXRfZWFybHkJPSBpbXgzMV9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG14MzFfaW5pdF9pcnEsCiAJLmluaXRfdGltZQk9IGlteDMxX2R0X3RpbWVyX2luaXQsCi0JLmluaXRfbWFjaGluZQk9IGlteDMxX2R0X2luaXQsCiAJLmR0X2NvbXBhdAk9IGlteDMxX2R0X2JvYXJkX2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lteDM1LWR0LmMgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgzNS1kdC5jCmluZGV4IDU4NGZiZTEuLmU5Mzk2MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lteDM1LWR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzUtZHQuYwpAQCAtMjAsMTQgKzIwLDYgQEAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJteDM1LmgiCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpbXgzNV9kdF9pbml0KHZvaWQpCi17Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCi0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsCi0JCQkgICAgIE5VTEwsIE5VTEwpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgaW14MzVfaXJxX2luaXQodm9pZCkKIHsKIAlpbXhfaW5pdF9sMmNhY2hlKCk7CkBAIC00Myw3ICszNSw1IEBACiAJLm1hcF9pbwkJPSBteDM1X21hcF9pbywKIAkuaW5pdF9lYXJseQk9IGlteDM1X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gaW14MzVfaXJxX2luaXQsCi0JLmluaXRfbWFjaGluZQk9IGlteDM1X2R0X2luaXQsCiAJLmR0X2NvbXBhdAk9IGlteDM1X2R0X2JvYXJkX2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lvbXV4LWlteDMxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9pb211eC1pbXgzMS5jCmluZGV4IDE2NTdmZTYuLmQ2YTMwNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lvbXV4LWlteDMxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtaW14MzEuYwpAQCAtNDQsOSArNDQsMTEgQEAKIC8qCiAgKiBzZXQgdGhlIG1vZGUgZm9yIGEgSU9NVVggcGluLgogICovCi1pbnQgbXhjX2lvbXV4X21vZGUodW5zaWduZWQgaW50IHBpbl9tb2RlKQordm9pZCBteGNfaW9tdXhfbW9kZSh1bnNpZ25lZCBpbnQgcGluX21vZGUpCiB7Ci0JdTMyIGZpZWxkLCBsLCBtb2RlLCByZXQgPSAwOworCXUzMiBmaWVsZDsKKwl1MzIgbDsKKwl1MzIgbW9kZTsKIAl2b2lkIF9faW9tZW0gKnJlZzsKIAogCXJlZyA9IElPTVVYU1dfTVVYX0NUTCArIChwaW5fbW9kZSAmIElPTVVYX1JFR19NQVNLKTsKQEAgLTYxLDggKzYzLDYgQEAKIAlfX3Jhd193cml0ZWwobCwgcmVnKTsKIAogCXNwaW5fdW5sb2NrKCZncGlvX211eF9sb2NrKTsKLQotCXJldHVybiByZXQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pb211eC1teDMuaCBiL2FyY2gvYXJtL21hY2gtaW14L2lvbXV4LW14My5oCmluZGV4IGY3OWY3OGEuLjBhNWFkYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lvbXV4LW14My5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2lvbXV4LW14My5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAqIEl0IGlzIGNhbGxlZCBieSB0aGUgc2V0dXAgZnVuY3Rpb25zIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBhbnltb3JlLgogICogSXQgaXMgaGVyZSB2aXNpYmxlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgKi8KLWludCBteGNfaW9tdXhfbW9kZSh1bnNpZ25lZCBpbnQgcGluX21vZGUpOwordm9pZCBteGNfaW9tdXhfbW9kZSh1bnNpZ25lZCBpbnQgcGluX21vZGUpOwogCiAjZGVmaW5lIElPTVVYX1BBRE5VTV9NQVNLCTB4MWZmCiAjZGVmaW5lIElPTVVYX0dQSU9OVU1fU0hJRlQJOQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MC5jCmluZGV4IGIxZTU2YTkuLmVjZjU4YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTAuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUwLmMKQEAgLTE2LDEzICsxNiw2IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKIAotc3RhdGljIHZvaWQgX19pbml0IGlteDUwX2R0X2luaXQodm9pZCkKLXsKLQlteGNfYXJjaF9yZXNldF9pbml0X2R0KCk7Ci0KLQlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgTlVMTCk7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW14NTBfZHRfYm9hcmRfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CiAJImZzbCxpbXg1MCIsCiAJTlVMTApAQCAtMzAsNyArMjMsNSBAQAogCiBEVF9NQUNISU5FX1NUQVJUKElNWDUwX0RULCAiRnJlZXNjYWxlIGkuTVg1MCAoRGV2aWNlIFRyZWUgU3VwcG9ydCkiKQogCS5pbml0X2lycQk9IHR6aWNfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IGlteDUwX2R0X2luaXQsCiAJLmR0X2NvbXBhdAk9IGlteDUwX2R0X2JvYXJkX2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTEuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTEuYwppbmRleCAyYzVmY2FmLi5iMDE1MTI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MS5jCkBAIC01Myw3ICs1Myw2IEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGRldmluZm8gPSB7IC5uYW1lID0gImNwdWZyZXEtZHQiLCB9OwogCi0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwogCWlteDUxX2lwdV9taXBpX3NldHVwKCk7CiAJaW14X3NyY19pbml0KCk7CiAKQEAgLTc4LDUgKzc3LDQgQEAKIAkuaW5pdF9tYWNoaW5lCT0gaW14NTFfZHRfaW5pdCwKIAkuaW5pdF9sYXRlCT0gaW14NTFfaW5pdF9sYXRlLAogCS5kdF9jb21wYXQJPSBpbXg1MV9kdF9ib2FyZF9jb21wYXQsCi0JLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUzLmMKaW5kZXggMDNkZDZlYS4uODYzMTZhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1My5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTMuYwpAQCAtMzAsNyArMzAsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgaW14NTNfZHRfaW5pdCh2b2lkKQogewotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKIAlpbXhfc3JjX2luaXQoKTsKIAogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKQEAgLTQxLDYgKzQwLDggQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbXg1M19pbml0X2xhdGUodm9pZCkKIHsKIAlpbXg1M19wbV9pbml0KCk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJjcHVmcmVxLWR0IiwgLTEsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlteDUzX2R0X2JvYXJkX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewpAQCAtNTQsNSArNTUsNCBAQAogCS5pbml0X21hY2hpbmUJPSBpbXg1M19kdF9pbml0LAogCS5pbml0X2xhdGUJPSBpbXg1M19pbml0X2xhdGUsCiAJLmR0X2NvbXBhdAk9IGlteDUzX2R0X2JvYXJkX2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnEuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnEuYwppbmRleCBkNTFjNmU5Li41MDU3ZDYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2cS5jCkBAIC0yNjgsOCArMjY4LDYgQEAKIAlpbXhfcHJpbnRfc2lsaWNvbl9yZXYoY3B1X2lzX2lteDZkbCgpID8gImkuTVg2REwiIDogImkuTVg2USIsCiAJCQkgICAgICBpbXhfZ2V0X3NvY19yZXZpc2lvbigpKTsKIAotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQogCXBhcmVudCA9IGlteF9zb2NfZGV2aWNlX2luaXQoKTsKIAlpZiAocGFyZW50ID09IE5VTEwpCiAJCXByX3dhcm4oImZhaWxlZCB0byBpbml0aWFsaXplIHNvYyBkZXZpY2VcbiIpOwpAQCAtNDA5LDUgKzQwNyw0IEBACiAJLmluaXRfbWFjaGluZQk9IGlteDZxX2luaXRfbWFjaGluZSwKIAkuaW5pdF9sYXRlICAgICAgPSBpbXg2cV9pbml0X2xhdGUsCiAJLmR0X2NvbXBhdAk9IGlteDZxX2R0X2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnNsLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZzbC5jCmluZGV4IGVkMjYzYTIuLjI0YmZhYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnNsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c2wuYwpAQCAtNDgsOCArNDgsNiBAQAogewogCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKIAotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQogCXBhcmVudCA9IGlteF9zb2NfZGV2aWNlX2luaXQoKTsKIAlpZiAocGFyZW50ID09IE5VTEwpCiAJCXByX3dhcm4oImZhaWxlZCB0byBpbml0aWFsaXplIHNvYyBkZXZpY2VcbiIpOwpAQCAtNzYsMTAgKzc0LDggQEAKIH07CiAKIERUX01BQ0hJTkVfU1RBUlQoSU1YNlNMLCAiRnJlZXNjYWxlIGkuTVg2IFNvbG9MaXRlIChEZXZpY2UgVHJlZSkiKQotCS5tYXBfaW8JCT0gZGVidWdfbGxfaW9faW5pdCwKIAkuaW5pdF9pcnEJPSBpbXg2c2xfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGlteDZzbF9pbml0X21hY2hpbmUsCiAJLmluaXRfbGF0ZSAgICAgID0gaW14NnNsX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gaW14NnNsX2R0X2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnN4LmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZzeC5jCmluZGV4IDNkZTNiNzMuLjdhOTZjNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnN4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c3guYwpAQCAtOCwyNCArOCw3MyBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxY2hpcC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24vaW14NnEtaW9tdXhjLWdwci5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImNwdWlkbGUuaCIKIAorc3RhdGljIGludCBhcjgwMzFfcGh5X2ZpeHVwKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYpCit7CisJdTE2IHZhbDsKKworCS8qIFNldCBSR01JSSBJTyB2b2x0YWdlIHRvIDEuOFYgKi8KKwlwaHlfd3JpdGUoZGV2LCAweDFkLCAweDFmKTsKKwlwaHlfd3JpdGUoZGV2LCAweDFlLCAweDgpOworCisJLyogaW50cm9kdWNlIHR4IGNsb2NrIGRlbGF5ICovCisJcGh5X3dyaXRlKGRldiwgMHgxZCwgMHg1KTsKKwl2YWwgPSBwaHlfcmVhZChkZXYsIDB4MWUpOworCXZhbCB8PSAweDAxMDA7CisJcGh5X3dyaXRlKGRldiwgMHgxZSwgdmFsKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFBIWV9JRF9BUjgwMzEgICAweDAwNGRkMDc0CitzdGF0aWMgdm9pZCBfX2luaXQgaW14NnN4X2VuZXRfcGh5X2luaXQodm9pZCkKK3sKKwlpZiAoSVNfQlVJTFRJTihDT05GSUdfUEhZTElCKSkKKwkJcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQoUEhZX0lEX0FSODAzMSwgMHhmZmZmZmZmZiwKKwkJCQkJICAgYXI4MDMxX3BoeV9maXh1cCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbXg2c3hfZW5ldF9jbGtfc2VsKHZvaWQpCit7CisJc3RydWN0IHJlZ21hcCAqZ3ByOworCisJZ3ByID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZSgiZnNsLGlteDZzeC1pb211eGMtZ3ByIik7CisJaWYgKCFJU19FUlIoZ3ByKSkgeworCQlyZWdtYXBfdXBkYXRlX2JpdHMoZ3ByLCBJT01VWENfR1BSMSwKKwkJCQkgICBJTVg2U1hfR1BSMV9GRUNfQ0xPQ0tfTVVYX1NFTF9NQVNLLCAwKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGdwciwgSU9NVVhDX0dQUjEsCisJCQkJICAgSU1YNlNYX0dQUjFfRkVDX0NMT0NLX1BBRF9ESVJfTUFTSywgMCk7CisJfSBlbHNlIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gZmluZCBmc2wsaW14NnN4LWlvbXV4LWdwciByZWdtYXBcbiIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGlteDZzeF9lbmV0X2luaXQodm9pZCkKK3sKKwlpbXg2c3hfZW5ldF9waHlfaW5pdCgpOworCWlteDZzeF9lbmV0X2Nsa19zZWwoKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGlteDZzeF9pbml0X21hY2hpbmUodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CiAKLQlteGNfYXJjaF9yZXNldF9pbml0X2R0KCk7Ci0KIAlwYXJlbnQgPSBpbXhfc29jX2RldmljZV9pbml0KCk7CiAJaWYgKHBhcmVudCA9PSBOVUxMKQogCQlwcl93YXJuKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzb2MgZGV2aWNlXG4iKTsKIAogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBwYXJlbnQpOwogCisJaW14NnN4X2VuZXRfaW5pdCgpOwogCWlteF9hbmF0b3BfaW5pdCgpOwogCWlteDZzeF9wbV9pbml0KCk7CiB9CkBAIC01MywxMCArMTAyLDggQEAKIH07CiAKIERUX01BQ0hJTkVfU1RBUlQoSU1YNlNYLCAiRnJlZXNjYWxlIGkuTVg2IFNvbG9YIChEZXZpY2UgVHJlZSkiKQotCS5tYXBfaW8JCT0gZGVidWdfbGxfaW9faW5pdCwKIAkuaW5pdF9pcnEJPSBpbXg2c3hfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGlteDZzeF9pbml0X21hY2hpbmUsCiAJLmR0X2NvbXBhdAk9IGlteDZzeF9kdF9jb21wYXQsCiAJLmluaXRfbGF0ZQk9IGlteDZzeF9pbml0X2xhdGUsCi0JLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWxzMTAyMWEuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbHMxMDIxYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OWM4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWxzMTAyMWEuYwpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxzMTAyMWFfZHRfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CisJImZzbCxsczEwMjFhIiwKKwlOVUxMLAorfTsKKworRFRfTUFDSElORV9TVEFSVChMUzEwMjFBLCAiRnJlZXNjYWxlIExTMTAyMUEiKQorCS5zbXAJCT0gc21wX29wcyhsczEwMjFhX3NtcF9vcHMpLAorCS5kdF9jb21wYXQJPSBsczEwMjFhX2R0X2NvbXBhdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXZmNjEwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXZmNjEwLmMKaW5kZXggZWU3ZTU3Yi4uYzExYWI2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC12ZjYxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtdmY2MTAuYwpAQCAtMTIsMTQgKzEyLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KIAotI2luY2x1ZGUgImNvbW1vbi5oIgotCi1zdGF0aWMgdm9pZCBfX2luaXQgdmY2MTBfaW5pdF9tYWNoaW5lKHZvaWQpCi17Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2ZjYxMF9kdF9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKIAkiZnNsLHZmNjEwIiwKIAlOVUxMLApAQCAtMjgsNyArMjAsNSBAQAogRFRfTUFDSElORV9TVEFSVChWWUJSSURfVkY2MTAsICJGcmVlc2NhbGUgVnlicmlkIFZGNjEwIChEZXZpY2UgVHJlZSkiKQogCS5sMmNfYXV4X3ZhbAk9IDAsCiAJLmwyY19hdXhfbWFzawk9IH4wLAotCS5pbml0X21hY2hpbmUgICA9IHZmNjEwX2luaXRfbWFjaGluZSwKIAkuZHRfY29tcGF0CT0gdmY2MTBfZHRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jCmluZGV4IDdhOTY4NmEuLjM3MjlkOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21tZGMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMKQEAgLTIxLDYgKzIxLDEyIEBACiAjZGVmaW5lIEJQX01NRENfTUFQU1JfUFNECTAKICNkZWZpbmUgQlBfTU1EQ19NQVBTUl9QU1MJNAogCisjZGVmaW5lIE1NRENfTURNSVNDCQkweDE4CisjZGVmaW5lIEJNX01NRENfTURNSVNDX0REUl9UWVBFCTB4MTgKKyNkZWZpbmUgQlBfTU1EQ19NRE1JU0NfRERSX1RZUEUJMHgzCisKK3N0YXRpYyBpbnQgZGRyX3R5cGU7CisKIHN0YXRpYyBpbnQgaW14X21tZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CkBAIC0zMSw2ICszNywxMiBAQAogCW1tZGNfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKIAlXQVJOX09OKCFtbWRjX2Jhc2UpOwogCisJcmVnID0gbW1kY19iYXNlICsgTU1EQ19NRE1JU0M7CisJLyogR2V0IGRkciB0eXBlICovCisJdmFsID0gcmVhZGxfcmVsYXhlZChyZWcpOworCWRkcl90eXBlID0gKHZhbCAmIEJNX01NRENfTURNSVNDX0REUl9UWVBFKSA+PgorCQkgQlBfTU1EQ19NRE1JU0NfRERSX1RZUEU7CisKIAlyZWcgPSBtbWRjX2Jhc2UgKyBNTURDX01BUFNSOwogCiAJLyogRW5hYmxlIGF1dG9tYXRpYyBwb3dlciBzYXZpbmcgKi8KQEAgLTUxLDYgKzYzLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBpbXhfbW1kY19nZXRfZGRyX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gZGRyX3R5cGU7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlteF9tbWRjX2R0X2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDZxLW1tZGMiLCB9LAogCXsgLyogc2VudGluZWwgKi8gfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbXhjLmggYi9hcmNoL2FybS9tYWNoLWlteC9teGMuaAppbmRleCAxN2E0MWNhLi40YzEzNDNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9teGMuaAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9teGMuaApAQCAtNTUsNiArNTUsOCBAQAogI2RlZmluZSBJTVhfQ0hJUF9SRVZJU0lPTl8zXzMJCTB4MzMKICNkZWZpbmUgSU1YX0NISVBfUkVWSVNJT05fVU5LTk9XTgkweGZmCiAKKyNkZWZpbmUgSU1YX0REUl9UWVBFX0xQRERSMgkJMQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX214Y19jcHVfdHlwZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvcGxhdHNtcC5jCmluZGV4IDc3MWJkMjUuLjdmMjcwMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9wbGF0c21wLmMKQEAgLTExLDcgKzExLDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKwogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgpAQCAtOTQsMyArOTcsMzMgQEAKIAkuY3B1X2tpbGwJCT0gaW14X2NwdV9raWxsLAogI2VuZGlmCiB9OworCisjZGVmaW5lIERDRkdfQ0NTUl9TQ1JBVENIUlcxCTB4MjAwCisKK3N0YXRpYyBpbnQgbHMxMDIxYV9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCit7CisJYXJjaF9zZW5kX3dha2V1cF9pcGlfbWFzayhjcHVtYXNrX29mKGNwdSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBsczEwMjFhX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdm9pZCBfX2lvbWVtICpkY2ZnX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxsczEwMjFhLWRjZmciKTsKKwlkY2ZnX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisJQlVHX09OKCFkY2ZnX2Jhc2UpOworCisJcGFkZHIgPSB2aXJ0X3RvX3BoeXMoc2Vjb25kYXJ5X3N0YXJ0dXApOworCXdyaXRlbF9yZWxheGVkKGNwdV90b19iZTMyKHBhZGRyKSwgZGNmZ19iYXNlICsgRENGR19DQ1NSX1NDUkFUQ0hSVzEpOworCisJaW91bm1hcChkY2ZnX2Jhc2UpOworfQorCitzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgIGxzMTAyMWFfc21wX29wcyBfX2luaXRkYXRhID0geworCS5zbXBfcHJlcGFyZV9jcHVzCT0gbHMxMDIxYV9zbXBfcHJlcGFyZV9jcHVzLAorCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSBsczEwMjFhX2Jvb3Rfc2Vjb25kYXJ5LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L3BtLWlteDYuYyBiL2FyY2gvYXJtL21hY2gtaW14L3BtLWlteDYuYwppbmRleCA1YzNhZjhmLi41ZDJjMWJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9wbS1pbXg2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvcG0taW14Ni5jCkBAIC04OCw3ICs4OCw3IEBACiB9OwogCiBzdHJ1Y3QgaW14Nl9wbV9zb2NkYXRhIHsKLQl1MzIgY3B1X3R5cGU7CisJdTMyIGRkcl90eXBlOwogCWNvbnN0IGNoYXIgKm1tZGNfY29tcGF0OwogCWNvbnN0IGNoYXIgKnNyY19jb21wYXQ7CiAJY29uc3QgY2hhciAqaW9tdXhjX2NvbXBhdDsKQEAgLTEzOCw3ICsxMzgsNiBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbXg2X3BtX3NvY2RhdGEgaW14NnFfcG1fZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuY3B1X3R5cGUgPSBNWENfQ1BVX0lNWDZRLAogCS5tbWRjX2NvbXBhdCA9ICJmc2wsaW14NnEtbW1kYyIsCiAJLnNyY19jb21wYXQgPSAiZnNsLGlteDZxLXNyYyIsCiAJLmlvbXV4Y19jb21wYXQgPSAiZnNsLGlteDZxLWlvbXV4YyIsCkBAIC0xNDgsNyArMTQ3LDYgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14Nl9wbV9zb2NkYXRhIGlteDZkbF9wbV9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5jcHVfdHlwZSA9IE1YQ19DUFVfSU1YNkRMLAogCS5tbWRjX2NvbXBhdCA9ICJmc2wsaW14NnEtbW1kYyIsCiAJLnNyY19jb21wYXQgPSAiZnNsLGlteDZxLXNyYyIsCiAJLmlvbXV4Y19jb21wYXQgPSAiZnNsLGlteDZkbC1pb211eGMiLApAQCAtMTU4LDcgKzE1Niw2IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteDZfcG1fc29jZGF0YSBpbXg2c2xfcG1fZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuY3B1X3R5cGUgPSBNWENfQ1BVX0lNWDZTTCwKIAkubW1kY19jb21wYXQgPSAiZnNsLGlteDZzbC1tbWRjIiwKIAkuc3JjX2NvbXBhdCA9ICJmc2wsaW14NnNsLXNyYyIsCiAJLmlvbXV4Y19jb21wYXQgPSAiZnNsLGlteDZzbC1pb211eGMiLApAQCAtMTY4LDcgKzE2NSw2IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteDZfcG1fc29jZGF0YSBpbXg2c3hfcG1fZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuY3B1X3R5cGUgPSBNWENfQ1BVX0lNWDZTWCwKIAkubW1kY19jb21wYXQgPSAiZnNsLGlteDZzeC1tbWRjIiwKIAkuc3JjX2NvbXBhdCA9ICJmc2wsaW14NnN4LXNyYyIsCiAJLmlvbXV4Y19jb21wYXQgPSAiZnNsLGlteDZzeC1pb211eGMiLApAQCAtMTg3LDcgKzE4Myw3IEBACiBzdHJ1Y3QgaW14Nl9jcHVfcG1faW5mbyB7CiAJcGh5c19hZGRyX3QgcGJhc2U7IC8qIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHBtX2luZm8uICovCiAJcGh5c19hZGRyX3QgcmVzdW1lX2FkZHI7IC8qIFRoZSBwaHlzaWNhbCByZXN1bWUgYWRkcmVzcyBmb3IgYXNtIGNvZGUgKi8KLQl1MzIgY3B1X3R5cGU7CisJdTMyIGRkcl90eXBlOwogCXUzMiBwbV9pbmZvX3NpemU7IC8qIFNpemUgb2YgcG1faW5mby4gKi8KIAlzdHJ1Y3QgaW14Nl9wbV9iYXNlIG1tZGNfYmFzZTsKIAlzdHJ1Y3QgaW14Nl9wbV9iYXNlIHNyY19iYXNlOwpAQCAtMjYxLDcgKzI1Nyw2IEBACiAKIGludCBpbXg2cV9zZXRfbHBtKGVudW0gbXhjX2NwdV9wd3JfbW9kZSBtb2RlKQogewotCXN0cnVjdCBpcnFfZGF0YSAqaW9tdXhjX2lycV9kYXRhID0gaXJxX2dldF9pcnFfZGF0YSgzMik7CiAJdTMyIHZhbCA9IHJlYWRsX3JlbGF4ZWQoY2NtX2Jhc2UgKyBDTFBDUik7CiAKIAl2YWwgJj0gfkJNX0NMUENSX0xQTTsKQEAgLTMxNiw5ICszMTEsOSBAQAogCSAqIDMpIFNvZnR3YXJlIHNob3VsZCBtYXNrIElSUSAjMzIgcmlnaHQgYWZ0ZXIgQ0NNIExvdy1Qb3dlciBtb2RlCiAJICogICAgaXMgc2V0IChzZXQgYml0cyAwLTEgb2YgQ0NNX0NMUENSKS4KIAkgKi8KLQlpbXhfZ3BjX2lycV91bm1hc2soaW9tdXhjX2lycV9kYXRhKTsKKwlpbXhfZ3BjX2h3aXJxX3VubWFzaygzMik7CiAJd3JpdGVsX3JlbGF4ZWQodmFsLCBjY21fYmFzZSArIENMUENSKTsKLQlpbXhfZ3BjX2lycV9tYXNrKGlvbXV4Y19pcnFfZGF0YSk7CisJaW14X2dwY19od2lycV9tYXNrKDMyKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTIyLDcgKzUxNyw3IEBACiAJCWdvdG8gcGwzMTBfY2FjaGVfbWFwX2ZhaWxlZDsKIAl9CiAKLQlwbV9pbmZvLT5jcHVfdHlwZSA9IHNvY2RhdGEtPmNwdV90eXBlOworCXBtX2luZm8tPmRkcl90eXBlID0gaW14X21tZGNfZ2V0X2Rkcl90eXBlKCk7CiAJcG1faW5mby0+bW1kY19pb19udW0gPSBzb2NkYXRhLT5tbWRjX2lvX251bTsKIAltbWRjX29mZnNldF9hcnJheSA9IHNvY2RhdGEtPm1tZGNfaW9fb2Zmc2V0OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9zdXNwZW5kLWlteDYuUyBiL2FyY2gvYXJtL21hY2gtaW14L3N1c3BlbmQtaW14Ni5TCmluZGV4IGNhNGVhMmQuLmI5OTk4N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L3N1c3BlbmQtaW14Ni5TCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L3N1c3BlbmQtaW14Ni5TCkBAIC00NSw3ICs0NSw3IEBACiAgKi8KICNkZWZpbmUgUE1fSU5GT19QQkFTRV9PRkZTRVQJCQkweDAKICNkZWZpbmUgUE1fSU5GT19SRVNVTUVfQUREUl9PRkZTRVQJCTB4NAotI2RlZmluZSBQTV9JTkZPX0NQVV9UWVBFX09GRlNFVAkJCTB4OAorI2RlZmluZSBQTV9JTkZPX0REUl9UWVBFX09GRlNFVAkJCTB4OAogI2RlZmluZSBQTV9JTkZPX1BNX0lORk9fU0laRV9PRkZTRVQJCTB4QwogI2RlZmluZSBQTV9JTkZPX01YNlFfTU1EQ19QX09GRlNFVAkJMHgxMAogI2RlZmluZSBQTV9JTkZPX01YNlFfTU1EQ19WX09GRlNFVAkJMHgxNApAQCAtMTEwLDcgKzExMCw3IEBACiAJbGRyZXEJcjExLCBbcjAsICNQTV9JTkZPX01YNlFfTU1EQ19WX09GRlNFVF0KIAlsZHJuZQlyMTEsIFtyMCwgI1BNX0lORk9fTVg2UV9NTURDX1BfT0ZGU0VUXQogCi0JY21wIAlyMywgI01YQ19DUFVfSU1YNlNMCisJY21wCXIzLCAjSU1YX0REUl9UWVBFX0xQRERSMgogCWJuZQk0ZgogCiAJLyogcmVzZXQgcmVhZCBGSUZPLCBSU1RfUkRfRklGTyAqLwpAQCAtMTUxLDcgKzE1MSw3IEBACiBFTlRSWShpbXg2X3N1c3BlbmQpCiAJbGRyCXIxLCBbcjAsICNQTV9JTkZPX1BCQVNFX09GRlNFVF0KIAlsZHIJcjIsIFtyMCwgI1BNX0lORk9fUkVTVU1FX0FERFJfT0ZGU0VUXQotCWxkcglyMywgW3IwLCAjUE1fSU5GT19DUFVfVFlQRV9PRkZTRVRdCisJbGRyCXIzLCBbcjAsICNQTV9JTkZPX0REUl9UWVBFX09GRlNFVF0KIAlsZHIJcjQsIFtyMCwgI1BNX0lORk9fUE1fSU5GT19TSVpFX09GRlNFVF0KIAogCS8qCkBAIC0yMDksOCArMjA5LDggQEAKIAlsZHIJcjcsIFtyMCwgI1BNX0lORk9fTU1EQ19JT19OVU1fT0ZGU0VUXQogCWxkcglyOCwgPVBNX0lORk9fTU1EQ19JT19WQUxfT0ZGU0VUCiAJYWRkCXI4LCByOCwgcjAKLQkvKiBpLk1YNlNMJ3MgbGFzdCAzIElPcyBuZWVkIHNwZWNpYWwgc2V0dGluZyAqLwotCWNtcAlyMywgI01YQ19DUFVfSU1YNlNMCisJLyogTFBERFIyJ3MgbGFzdCAzIElPcyBuZWVkIHNwZWNpYWwgc2V0dGluZyAqLworCWNtcAlyMywgI0lNWF9ERFJfVFlQRV9MUEREUjIKIAlzdWJlcQlyNywgcjcsICMweDMKIHNldF9tbWRjX2lvX2xwbToKIAlsZHIJcjksIFtyOF0sICMweDgKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXN1YnMJcjcsIHI3LCAjMHgxCiAJYm5lCXNldF9tbWRjX2lvX2xwbQogCi0JY21wIAlyMywgI01YQ19DUFVfSU1YNlNMCisJY21wIAlyMywgI0lNWF9ERFJfVFlQRV9MUEREUjIKIAlibmUJc2V0X21tZGNfaW9fbHBtX2RvbmUKIAlsZHIJcjYsID0weDEwMDAKIAlsZHIJcjksIFtyOF0sICMweDgKQEAgLTMyNCw3ICszMjQsNyBAQAogCXN0cglyNywgW3IxMSwgI01YNlFfU1JDX0dQUjFdCiAJc3RyCXI3LCBbcjExLCAjTVg2UV9TUkNfR1BSMl0KIAotCWxkcglyMywgW3IwLCAjUE1fSU5GT19DUFVfVFlQRV9PRkZTRVRdCisJbGRyCXIzLCBbcjAsICNQTV9JTkZPX0REUl9UWVBFX09GRlNFVF0KIAltb3YJcjUsICMweDEKIAlyZXN1bWVfbW1kYwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9zeXN0ZW0uYyBiL2FyY2gvYXJtL21hY2gtaW14L3N5c3RlbS5jCmluZGV4IGQxNGMzM2YuLjUxYzM1MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L3N5c3RlbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L3N5c3RlbS5jCkBAIC04OSwyMSArODksNiBAQAogCQljbGtfcHJlcGFyZSh3ZG9nX2Nsayk7CiB9CiAKLXZvaWQgX19pbml0IG14Y19hcmNoX3Jlc2V0X2luaXRfZHQodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLGlteDIxLXdkdCIpOwotCXdkb2dfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKLQlXQVJOX09OKCF3ZG9nX2Jhc2UpOwotCi0Jd2RvZ19jbGsgPSBvZl9jbGtfZ2V0KG5wLCAwKTsKLQlpZiAoSVNfRVJSKHdkb2dfY2xrKSkKLQkJcHJfd2FybigiJXM6IGZhaWxlZCB0byBnZXQgd2RvZyBjbG9ja1xuIiwgX19mdW5jX18pOwotCWVsc2UKLQkJY2xrX3ByZXBhcmUod2RvZ19jbGspOwotfQotCiAjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKIHZvaWQgX19pbml0IGlteF9pbml0X2wyY2FjaGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWcKaW5kZXggYzQ1NWU5Ny4uMDJkMDgzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWcKQEAgLTEsMyArMSwyNiBAQAorY29uZmlnIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIkFSTSBMdGQuIEludGVncmF0b3IgZmFtaWx5IiBpZiAoQVJDSF9NVUxUSV9WNFQgfHwgQVJDSF9NVUxUSV9WNSB8fCBBUkNIX01VTFRJX1Y2KQorCXNlbGVjdCBBUk1fQU1CQQorCXNlbGVjdCBBUk1fUEFUQ0hfUEhZU19WSVJUIGlmIE1NVQorCXNlbGVjdCBBVVRPX1pSRUxBRERSCisJc2VsZWN0IENPTU1PTl9DTEsKKwlzZWxlY3QgQ09NTU9OX0NMS19WRVJTQVRJTEUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBIQVZFX1RDTQorCXNlbGVjdCBJQ1NUCisJc2VsZWN0IE1GRF9TWVNDT04KKwlzZWxlY3QgTVVMVElfSVJRX0hBTkRMRVIKKwlzZWxlY3QgUExBVF9WRVJTQVRJTEUKKwlzZWxlY3QgUE9XRVJfUkVTRVQKKwlzZWxlY3QgUE9XRVJfUkVTRVRfVkVSU0FUSUxFCisJc2VsZWN0IFBPV0VSX1NVUFBMWQorCXNlbGVjdCBTT0NfSU5URUdSQVRPUl9DTQorCXNlbGVjdCBTUEFSU0VfSVJRCisJc2VsZWN0IFVTRV9PRgorCXNlbGVjdCBWRVJTQVRJTEVfRlBHQV9JUlEKKwloZWxwCisJICBTdXBwb3J0IGZvciBBUk0ncyBJbnRlZ3JhdG9yIHBsYXRmb3JtLgorCiBpZiBBUkNIX0lOVEVHUkFUT1IKIAogbWVudSAiSW50ZWdyYXRvciBPcHRpb25zIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL01ha2VmaWxlCmluZGV4IGVjNzU5ZGUuLjFlYmU0NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCiAKLW9iai15CQkJCQk6PSBjb3JlLm8gbG0ubyBsZWRzLm8KK29iai15CQkJCQk6PSBjb3JlLm8gbG0ubwogb2JqLSQoQ09ORklHX0FSQ0hfSU5URUdSQVRPUl9BUCkJKz0gaW50ZWdyYXRvcl9hcC5vCiBvYmotJChDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0NQKQkrPSBpbnRlZ3JhdG9yX2NwLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NtLmggYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY20uaAppbmRleCA0ZWNmZjdiLi41YjhiYTgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY20uaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY20uaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZSBDTV9DVFJMX0xFRAkJCSgxIDw8IDApCiAjZGVmaW5lIENNX0NUUkxfbk1CREVUCQkJKDEgPDwgMSkKICNkZWZpbmUgQ01fQ1RSTF9SRU1BUAkJCSgxIDw8IDIpCi0jZGVmaW5lIENNX0NUUkxfUkVTRVQJCQkoMSA8PCAzKQogCiAvKgogICogSW50ZWdyYXRvci9BUCxQUDIgc3BlY2lmaWMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb21tb24uaAppbmRleCBhZDBhYzU1NC4uOTZjOWRjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb21tb24uaApAQCAtNCw1ICs0LDMgQEAKIHZvaWQgaW50ZWdyYXRvcl9pbml0X2Vhcmx5KHZvaWQpOwogaW50IGludGVncmF0b3JfaW5pdChib29sIGlzX2NwKTsKIHZvaWQgaW50ZWdyYXRvcl9yZXNlcnZlKHZvaWQpOwotdm9pZCBpbnRlZ3JhdG9yX3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSwgY29uc3QgY2hhciAqKTsKLXZvaWQgaW50ZWdyYXRvcl9pbml0X3N5c2ZzKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgdTMyIGlkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCmluZGV4IGUzZjNhY2EuLjk0ODg3MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYwpAQCAtNjAsNDAgKzYwLDYgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqaW50ZWdyYXRvcl9hcmNoX3N0cih1MzIgaWQpCi17Ci0Jc3dpdGNoICgoaWQgPj4gMTYpICYgMHhmZikgewotCWNhc2UgMHgwMDoKLQkJcmV0dXJuICJBU0IgbGl0dGxlLWVuZGlhbiI7Ci0JY2FzZSAweDAxOgotCQlyZXR1cm4gIkFIQiBsaXR0bGUtZW5kaWFuIjsKLQljYXNlIDB4MDM6Ci0JCXJldHVybiAiQUhCLUxpdGUgc3lzdGVtIGJ1cywgYmktZW5kaWFuIjsKLQljYXNlIDB4MDQ6Ci0JCXJldHVybiAiQUhCIjsKLQljYXNlIDB4MDg6Ci0JCXJldHVybiAiQUhCIHN5c3RlbSBidXMsIEFTQiBwcm9jZXNzb3IgYnVzIjsKLQlkZWZhdWx0OgotCQlyZXR1cm4gIlVua25vd24iOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKmludGVncmF0b3JfZnBnYV9zdHIodTMyIGlkKQotewotCXN3aXRjaCAoKGlkID4+IDEyKSAmIDB4ZikgewotCWNhc2UgMHgwMToKLQkJcmV0dXJuICJYQzQwNjIiOwotCWNhc2UgMHgwMjoKLQkJcmV0dXJuICJYQzQwODUiOwotCWNhc2UgMHgwMzoKLQkJcmV0dXJuICJYVkM2MDAiOwotCWNhc2UgMHgwNDoKLQkJcmV0dXJuICJFUE03MjU2QUUgKEFsdGVyYSBQTEQpIjsKLQlkZWZhdWx0OgotCQlyZXR1cm4gIlVua25vd24iOwotCX0KLX0KLQogdm9pZCBjbV9jbGVhcl9pcnFzKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBjb3JlIG1vZHVsZSBJUlFzICovCkBAIC0xMDksNyArNzUsNiBAQAogdm9pZCBjbV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpjbSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBjbV9tYXRjaCk7Ci0JdTMyIHZhbDsKIAogCWlmICghY20pIHsKIAkJcHJfY3JpdCgibm8gY29yZSBtb2R1bGUgbm9kZSBmb3VuZCBpbiBkZXZpY2UgdHJlZVxuIik7CkBAIC0xMjEsMTMgKzg2LDYgQEAKIAkJcmV0dXJuOwogCX0KIAljbV9jbGVhcl9pcnFzKCk7Ci0JdmFsID0gcmVhZGwoY21fYmFzZSArIElOVEVHUkFUT1JfSERSX0lEX09GRlNFVCk7Ci0JcHJfaW5mbygiRGV0ZWN0ZWQgQVJNIGNvcmUgbW9kdWxlOlxuIik7Ci0JcHJfaW5mbygiICAgIE1hbnVmYWN0dXJlcjogJTAyeFxuIiwgKHZhbCA+PiAyNCkpOwotCXByX2luZm8oIiAgICBBcmNoaXRlY3R1cmU6ICVzXG4iLCBpbnRlZ3JhdG9yX2FyY2hfc3RyKHZhbCkpOwotCXByX2luZm8oIiAgICBGUEdBOiAlc1xuIiwgaW50ZWdyYXRvcl9mcGdhX3N0cih2YWwpKTsKLQlwcl9pbmZvKCIgICAgQnVpbGQ6ICUwMnhcbiIsICh2YWwgPj4gNCkgJiAweEZGKTsKLQlwcl9pbmZvKCIgICAgUmV2OiAlY1xuIiwgKCdBJyArICh2YWwgJiAweDAzKSkpOwogfQogCiAvKgpAQCAtMTM5LDY0ICs5NywzIEBACiB7CiAJbWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgX19wYShzd2FwcGVyX3BnX2RpcikgLSBQSFlTX09GRlNFVCk7CiB9Ci0KLS8qCi0gKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlciBpbiB0aGUgc3lzdGVtIEZQR0EKLSAqLwotdm9pZCBpbnRlZ3JhdG9yX3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpCi17Ci0JY21fY29udHJvbChDTV9DVFJMX1JFU0VULCBDTV9DVFJMX1JFU0VUKTsKLX0KLQotc3RhdGljIHUzMiBpbnRlZ3JhdG9yX2lkOwotCi1zdGF0aWMgc3NpemVfdCBpbnRjcF9nZXRfbWFuZihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlMDJ4XG4iLCBpbnRlZ3JhdG9yX2lkID4+IDI0KTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGludGNwX21hbmZfYXR0ciA9Ci0JX19BVFRSKG1hbnVmYWN0dXJlciwgIFNfSVJVR08sIGludGNwX2dldF9tYW5mLCAgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90IGludGNwX2dldF9hcmNoKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbnRlZ3JhdG9yX2FyY2hfc3RyKGludGVncmF0b3JfaWQpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGludGNwX2FyY2hfYXR0ciA9Ci0JX19BVFRSKGFyY2hpdGVjdHVyZSwgIFNfSVJVR08sIGludGNwX2dldF9hcmNoLCAgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90IGludGNwX2dldF9mcGdhKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbnRlZ3JhdG9yX2ZwZ2Ffc3RyKGludGVncmF0b3JfaWQpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGludGNwX2ZwZ2FfYXR0ciA9Ci0JX19BVFRSKGZwZ2EsICBTX0lSVUdPLCBpbnRjcF9nZXRfZnBnYSwgIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBpbnRjcF9nZXRfYnVpbGQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlMDJ4XG4iLCAoaW50ZWdyYXRvcl9pZCA+PiA0KSAmIDB4RkYpOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50Y3BfYnVpbGRfYXR0ciA9Ci0JX19BVFRSKGJ1aWxkLCAgU19JUlVHTywgaW50Y3BfZ2V0X2J1aWxkLCAgTlVMTCk7Ci0KLQotCi12b2lkIGludGVncmF0b3JfaW5pdF9zeXNmcyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHUzMiBpZCkKLXsKLQlpbnRlZ3JhdG9yX2lkID0gaWQ7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKHBhcmVudCwgJmludGNwX21hbmZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKHBhcmVudCwgJmludGNwX2FyY2hfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKHBhcmVudCwgJmludGNwX2ZwZ2FfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKHBhcmVudCwgJmludGNwX2J1aWxkX2F0dHIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzY2M5OS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNkZWZpbmUgQU1CQV9VQVJUX0RSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDE2MDAwMDAwKQotI2RlZmluZSBBTUJBX1VBUlRfTENSSAkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxNjAwMDAwOCkKLSNkZWZpbmUgQU1CQV9VQVJUX0xDUk0JKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4MTYwMDAwMGMpCi0jZGVmaW5lIEFNQkFfVUFSVF9MQ1JMCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDE2MDAwMDEwKQotI2RlZmluZSBBTUJBX1VBUlRfQ1IJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4MTYwMDAwMTQpCi0jZGVmaW5lIEFNQkFfVUFSVF9GUgkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxNjAwMDAxOCkKLQotLyoKLSAqIFRoaXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQotICovCi1zdGF0aWMgdm9pZCBwdXRjKGludCBjKQotewotCXdoaWxlIChBTUJBX1VBUlRfRlIgJiAoMSA8PCA1KSkKLQkJYmFycmllcigpOwotCi0JQU1CQV9VQVJUX0RSID0gYzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCi17Ci0Jd2hpbGUgKEFNQkFfVUFSVF9GUiAmICgxIDw8IDMpKQotCQliYXJyaWVyKCk7Ci19Ci0KLS8qCi0gKiBub3RoaW5nIHRvIGRvCi0gKi8KLSNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKaW5kZXggOGNhMjkwYi4uMzAwMDNiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCkBAIC0yNywyMiArMjcsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9rbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvY2xrLWludGVncmF0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZF9jbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtODksMTEgKzgyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhcF9pb19kZXNjW10gX19pbml0ZGF0YSBfX21heWJlX3VudXNlZCA9IHsKIAl7Ci0JCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhJTlRFR1JBVE9SX0NUX0JBU0UpLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oSU5URUdSQVRPUl9DVF9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewogCQkudmlydHVhbAk9IElPX0FERFJFU1MoSU5URUdSQVRPUl9JQ19CQVNFKSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElOVEVHUkFUT1JfSUNfQkFTRSksCiAJCS5sZW5ndGgJCT0gU1pfNEssCkBAIC0yNTcsMTg4ICsyNDUsMTAgQEAKIAkuc2V0X21jdHJsID0gaW50ZWdyYXRvcl91YXJ0X3NldF9tY3RybCwKIH07CiAKLS8qCi0gKiBXaGVyZSBpcyB0aGUgdGltZXIgKFZBKT8KLSAqLwotI2RlZmluZSBUSU1FUjBfVkFfQkFTRSBfX2lvX2FkZHJlc3MoSU5URUdSQVRPUl9USU1FUjBfQkFTRSkKLSNkZWZpbmUgVElNRVIxX1ZBX0JBU0UgX19pb19hZGRyZXNzKElOVEVHUkFUT1JfVElNRVIxX0JBU0UpCi0jZGVmaW5lIFRJTUVSMl9WQV9CQVNFIF9faW9fYWRkcmVzcyhJTlRFR1JBVE9SX1RJTUVSMl9CQVNFKQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9yZWxvYWQ7Ci0KLXN0YXRpYyB1NjQgbm90cmFjZSBpbnRlZ3JhdG9yX3JlYWRfc2NoZWRfY2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gLXJlYWRsKCh2b2lkIF9faW9tZW0gKikgVElNRVIyX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVncmF0b3JfY2xvY2tzb3VyY2VfaW5pdCh1bnNpZ25lZCBsb25nIGlucmF0ZSwKLQkJCQkJdm9pZCBfX2lvbWVtICpiYXNlKQotewotCXUzMiBjdHJsID0gVElNRVJfQ1RSTF9FTkFCTEUgfCBUSU1FUl9DVFJMX1BFUklPRElDOwotCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGlucmF0ZTsKLQotCWlmIChyYXRlID49IDE1MDAwMDApIHsKLQkJcmF0ZSAvPSAxNjsKLQkJY3RybCB8PSBUSU1FUl9DVFJMX0RJVjE2OwotCX0KLQotCXdyaXRlbCgweGZmZmYsIGJhc2UgKyBUSU1FUl9MT0FEKTsKLQl3cml0ZWwoY3RybCwgYmFzZSArIFRJTUVSX0NUUkwpOwotCi0JY2xvY2tzb3VyY2VfbW1pb19pbml0KGJhc2UgKyBUSU1FUl9WQUxVRSwgInRpbWVyMiIsCi0JCQlyYXRlLCAyMDAsIDE2LCBjbG9ja3NvdXJjZV9tbWlvX3JlYWRsX2Rvd24pOwotCXNjaGVkX2Nsb2NrX3JlZ2lzdGVyKGludGVncmF0b3JfcmVhZF9zY2hlZF9jbG9jaywgMTYsIHJhdGUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICogY2xrZXZ0X2Jhc2U7Ci0KLS8qCi0gKiBJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBpbnRlZ3JhdG9yX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gZGV2X2lkOwotCi0JLyogY2xlYXIgdGhlIGludGVycnVwdCAqLwotCXdyaXRlbCgxLCBjbGtldnRfYmFzZSArIFRJTUVSX0lOVENMUik7Ci0KLQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgY2xrZXZ0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCi17Ci0JdTMyIGN0cmwgPSByZWFkbChjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpICYgflRJTUVSX0NUUkxfRU5BQkxFOwotCi0JLyogRGlzYWJsZSB0aW1lciAqLwotCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKLQkJLyogRW5hYmxlIHRoZSB0aW1lciBhbmQgc3RhcnQgdGhlIHBlcmlvZGljIHRpY2sgKi8KLQkJd3JpdGVsKHRpbWVyX3JlbG9hZCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9MT0FEKTsKLQkJY3RybCB8PSBUSU1FUl9DVFJMX1BFUklPRElDIHwgVElNRVJfQ1RSTF9FTkFCTEU7Ci0JCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCS8qIExlYXZlIHRoZSB0aW1lciBkaXNhYmxlZCwgLnNldF9uZXh0X2V2ZW50IHdpbGwgZW5hYmxlIGl0ICovCi0JCWN0cmwgJj0gflRJTUVSX0NUUkxfUEVSSU9ESUM7Ci0JCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgotCWRlZmF1bHQ6Ci0JCS8qIEp1c3QgbGVhdmUgaW4gZGlzYWJsZWQgc3RhdGUgKi8KLQkJYnJlYWs7Ci0JfQotCi19Ci0KLXN0YXRpYyBpbnQgY2xrZXZ0X3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCXVuc2lnbmVkIGxvbmcgY3RybCA9IHJlYWRsKGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7Ci0KLQl3cml0ZWwoY3RybCAmIH5USU1FUl9DVFJMX0VOQUJMRSwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKLQl3cml0ZWwobmV4dCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9MT0FEKTsKLQl3cml0ZWwoY3RybCB8IFRJTUVSX0NUUkxfRU5BQkxFLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGludGVncmF0b3JfY2xvY2tldmVudCA9IHsKLQkubmFtZQkJPSAidGltZXIxIiwKLQkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCi0JLnNldF9tb2RlCT0gY2xrZXZ0X3NldF9tb2RlLAotCS5zZXRfbmV4dF9ldmVudAk9IGNsa2V2dF9zZXRfbmV4dF9ldmVudCwKLQkucmF0aW5nCQk9IDMwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGludGVncmF0b3JfdGltZXJfaXJxID0gewotCS5uYW1lCQk9ICJ0aW1lciIsCi0JLmZsYWdzCQk9IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLmhhbmRsZXIJPSBpbnRlZ3JhdG9yX3RpbWVyX2ludGVycnVwdCwKLQkuZGV2X2lkCQk9ICZpbnRlZ3JhdG9yX2Nsb2NrZXZlbnQsCi19OwotCi1zdGF0aWMgdm9pZCBpbnRlZ3JhdG9yX2Nsb2NrZXZlbnRfaW5pdCh1bnNpZ25lZCBsb25nIGlucmF0ZSwKLQkJCQl2b2lkIF9faW9tZW0gKmJhc2UsIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyByYXRlID0gaW5yYXRlOwotCXVuc2lnbmVkIGludCBjdHJsID0gMDsKLQotCWNsa2V2dF9iYXNlID0gYmFzZTsKLQkvKiBDYWxjdWxhdGUgYW5kIHByb2dyYW0gYSBkaXZpc29yICovCi0JaWYgKHJhdGUgPiAweDEwMDAwMCAqIEhaKSB7Ci0JCXJhdGUgLz0gMjU2OwotCQljdHJsIHw9IFRJTUVSX0NUUkxfRElWMjU2OwotCX0gZWxzZSBpZiAocmF0ZSA+IDB4MTAwMDAgKiBIWikgewotCQlyYXRlIC89IDE2OwotCQljdHJsIHw9IFRJTUVSX0NUUkxfRElWMTY7Ci0JfQotCXRpbWVyX3JlbG9hZCA9IHJhdGUgLyBIWjsKLQl3cml0ZWwoY3RybCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKLQotCXNldHVwX2lycShpcnEsICZpbnRlZ3JhdG9yX3RpbWVyX2lycSk7Ci0JY2xvY2tldmVudHNfY29uZmlnX2FuZF9yZWdpc3RlcigmaW50ZWdyYXRvcl9jbG9ja2V2ZW50LAotCQkJCQlyYXRlLAotCQkJCQkxLAotCQkJCQkweGZmZmZVKTsKLX0KLQogdm9pZCBfX2luaXQgYXBfaW5pdF9lYXJseSh2b2lkKQogewogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXBfb2ZfdGltZXJfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQljb25zdCBjaGFyICpwYXRoOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQlpbnQgZXJyOwotCWludCBpcnE7Ci0Jc3RydWN0IGNsayAqY2xrOwotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKLQotCW9mX2Nsa19pbml0KE5VTEwpOwotCi0JZXJyID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcob2ZfYWxpYXNlcywKLQkJCQkiYXJtLHRpbWVyLXByaW1hcnkiLCAmcGF0aCk7Ci0JaWYgKFdBUk5fT04oZXJyKSkKLQkJcmV0dXJuOwotCW5vZGUgPSBvZl9maW5kX25vZGVfYnlfcGF0aChwYXRoKTsKLQliYXNlID0gb2ZfaW9tYXAobm9kZSwgMCk7Ci0JaWYgKFdBUk5fT04oIWJhc2UpKQotCQlyZXR1cm47Ci0KLQljbGsgPSBvZl9jbGtfZ2V0KG5vZGUsIDApOwotCUJVR19PTihJU19FUlIoY2xrKSk7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7Ci0JcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOwotCi0Jd3JpdGVsKDAsIGJhc2UgKyBUSU1FUl9DVFJMKTsKLQlpbnRlZ3JhdG9yX2Nsb2Nrc291cmNlX2luaXQocmF0ZSwgYmFzZSk7Ci0KLQllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhvZl9hbGlhc2VzLAotCQkJCSJhcm0sdGltZXItc2Vjb25kYXJ5IiwgJnBhdGgpOwotCWlmIChXQVJOX09OKGVycikpCi0JCXJldHVybjsKLQlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgocGF0aCk7Ci0JYmFzZSA9IG9mX2lvbWFwKG5vZGUsIDApOwotCWlmIChXQVJOX09OKCFiYXNlKSkKLQkJcmV0dXJuOwotCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOwotCi0JY2xrID0gb2ZfY2xrX2dldChub2RlLCAwKTsKLQlCVUdfT04oSVNfRVJSKGNsaykpOwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOwotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKLQotCXdyaXRlbCgwLCBiYXNlICsgVElNRVJfQ1RSTCk7Ci0JaW50ZWdyYXRvcl9jbG9ja2V2ZW50X2luaXQocmF0ZSwgYmFzZSwgaXJxKTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGFwX2luaXRfaXJxX29mKHZvaWQpCiB7CiAJY21faW5pdCgpOwpAQCAtNDc3LDEwICsyODcsNiBAQAogCXVuc2lnbmVkIGxvbmcgc2NfZGVjOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3lzY29uOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZWJpOwotCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKLQlzdHJ1Y3Qgc29jX2RldmljZSAqc29jX2RldjsKLQlzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKnNvY19kZXZfYXR0cjsKLQl1MzIgYXBfc2NfaWQ7CiAJaW50IGk7CiAKIAlzeXNjb24gPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgYXBfc3lzY29uX21hdGNoKTsKQEAgLTUwMCwyOCArMzA2LDYgQEAKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKIAkJCWFwX2F1eGRhdGFfbG9va3VwLCBOVUxMKTsKIAotCWFwX3NjX2lkID0gcmVhZGwoYXBfc3lzY29uX2Jhc2UpOwotCi0Jc29jX2Rldl9hdHRyID0ga3phbGxvYyhzaXplb2YoKnNvY19kZXZfYXR0ciksIEdGUF9LRVJORUwpOwotCWlmICghc29jX2Rldl9hdHRyKQotCQlyZXR1cm47Ci0KLQlzb2NfZGV2X2F0dHItPnNvY19pZCA9ICJYVkMiOwotCXNvY19kZXZfYXR0ci0+bWFjaGluZSA9ICJJbnRlZ3JhdG9yL0FQIjsKLQlzb2NfZGV2X2F0dHItPmZhbWlseSA9ICJJbnRlZ3JhdG9yIjsKLQlzb2NfZGV2X2F0dHItPnJldmlzaW9uID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlYyIsCi0JCQkJCSAgICdBJyArIChhcF9zY19pZCAmIDB4MGYpKTsKLQotCXNvY19kZXYgPSBzb2NfZGV2aWNlX3JlZ2lzdGVyKHNvY19kZXZfYXR0cik7Ci0JaWYgKElTX0VSUihzb2NfZGV2KSkgewotCQlrZnJlZShzb2NfZGV2X2F0dHItPnJldmlzaW9uKTsKLQkJa2ZyZWUoc29jX2Rldl9hdHRyKTsKLQkJcmV0dXJuOwotCX0KLQotCXBhcmVudCA9IHNvY19kZXZpY2VfdG9fZGV2aWNlKHNvY19kZXYpOwotCWludGVncmF0b3JfaW5pdF9zeXNmcyhwYXJlbnQsIGFwX3NjX2lkKTsKLQogCXNjX2RlYyA9IHJlYWRsKGFwX3N5c2Nvbl9iYXNlICsgSU5URUdSQVRPUl9TQ19ERUNfT0ZGU0VUKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXN0cnVjdCBsbV9kZXZpY2UgKmxtZGV2OwpAQCAtNTUzLDggKzMzNyw2IEBACiAJLm1hcF9pbwkJPSBhcF9tYXBfaW8sCiAJLmluaXRfZWFybHkJPSBhcF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGFwX2luaXRfaXJxX29mLAotCS5pbml0X3RpbWUJPSBhcF9vZl90aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUJPSBhcF9pbml0X29mLAotCS5yZXN0YXJ0CT0gaW50ZWdyYXRvcl9yZXN0YXJ0LAogCS5kdF9jb21wYXQgICAgICA9IGFwX2R0X2JvYXJkX2NvbXBhdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwppbmRleCBjY2EwMmViLi5iNWZiNzFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWRfY2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMjc0LDEwICsyNzMsNiBAQAogc3RhdGljIHZvaWQgX19pbml0IGludGNwX2luaXRfb2Yodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwY29uOwotCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKLQlzdHJ1Y3Qgc29jX2RldmljZSAqc29jX2RldjsKLQlzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKnNvY19kZXZfYXR0cjsKLQl1MzIgaW50Y3Bfc2NfaWQ7CiAKIAljcGNvbiA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBpbnRjcF9zeXNjb25fbWF0Y2gpOwogCWlmICghY3Bjb24pCkBAIC0yODksMjggKzI4NCw2IEBACiAKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKIAkJCSAgICAgaW50Y3BfYXV4ZGF0YV9sb29rdXAsIE5VTEwpOwotCi0JaW50Y3Bfc2NfaWQgPSByZWFkbChpbnRjcF9jb25fYmFzZSk7Ci0KLQlzb2NfZGV2X2F0dHIgPSBremFsbG9jKHNpemVvZigqc29jX2Rldl9hdHRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzb2NfZGV2X2F0dHIpCi0JCXJldHVybjsKLQotCXNvY19kZXZfYXR0ci0+c29jX2lkID0gIlhDViI7Ci0Jc29jX2Rldl9hdHRyLT5tYWNoaW5lID0gIkludGVncmF0b3IvQ1AiOwotCXNvY19kZXZfYXR0ci0+ZmFtaWx5ID0gIkludGVncmF0b3IiOwotCXNvY19kZXZfYXR0ci0+cmV2aXNpb24gPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVjIiwKLQkJCQkJICAgJ0EnICsgKGludGNwX3NjX2lkICYgMHgwZikpOwotCi0Jc29jX2RldiA9IHNvY19kZXZpY2VfcmVnaXN0ZXIoc29jX2Rldl9hdHRyKTsKLQlpZiAoSVNfRVJSKHNvY19kZXYpKSB7Ci0JCWtmcmVlKHNvY19kZXZfYXR0ci0+cmV2aXNpb24pOwotCQlrZnJlZShzb2NfZGV2X2F0dHIpOwotCQlyZXR1cm47Ci0JfQotCi0JcGFyZW50ID0gc29jX2RldmljZV90b19kZXZpY2Uoc29jX2Rldik7Ci0JaW50ZWdyYXRvcl9pbml0X3N5c2ZzKHBhcmVudCwgaW50Y3Bfc2NfaWQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGludGNwX2R0X2JvYXJkX2NvbXBhdFtdID0gewpAQCAtMzI0LDYgKzI5Nyw1IEBACiAJLmluaXRfZWFybHkJPSBpbnRjcF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGludGNwX2luaXRfaXJxX29mLAogCS5pbml0X21hY2hpbmUJPSBpbnRjcF9pbml0X29mLAotCS5yZXN0YXJ0CT0gaW50ZWdyYXRvcl9yZXN0YXJ0LAogCS5kdF9jb21wYXQgICAgICA9IGludGNwX2R0X2JvYXJkX2NvbXBhdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbGVkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2xlZHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFkY2I1Ny4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbGVkcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIHRoZSA0IHVzZXIgTEVEcyBmb3VuZCBvbiB0aGUgSW50ZWdyYXRvciBBUC9DUCBiYXNlYm9hcmQKLSAqIEJhc2VkIG9uIFZlcnNhdGlsZSBhbmQgUmVhbFZpZXcgbWFjaGluZSBMRUQgY29kZQotICoKLSAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgotICogQXV0aG9yOiBCcnlhbiBXdSA8YnJ5YW4ud3VAY2Fub25pY2FsLmNvbT4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0KLSNpbmNsdWRlICJoYXJkd2FyZS5oIgotI2luY2x1ZGUgImNtLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ORVdfTEVEUykgJiYgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTUykKLQotI2RlZmluZSBBTFBIQV9SRUcgX19pb19hZGRyZXNzKElOVEVHUkFUT1JfREJHX0JBU0UpCi0jZGVmaW5lIExFRFJFRwkoX19pb19hZGRyZXNzKElOVEVHUkFUT1JfREJHX0JBU0UpICsgSU5URUdSQVRPUl9EQkdfTEVEU19PRkZTRVQpCi0KLXN0cnVjdCBpbnRlZ3JhdG9yX2xlZCB7Ci0Jc3RydWN0IGxlZF9jbGFzc2RldgljZGV2OwotCXU4CQkJbWFzazsKLX07Ci0KLS8qCi0gKiBUaGUgdHJpZ2dlcnMgbGluZXMgdXAgYmVsb3cgd2lsbCBvbmx5IGJlIHVzZWQgaWYgdGhlCi0gKiBMRUQgdHJpZ2dlcnMgYXJlIGNvbXBpbGVkIGluLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQljb25zdCBjaGFyICpuYW1lOwotCWNvbnN0IGNoYXIgKnRyaWdnZXI7Ci19IGludGVncmF0b3JfbGVkc1tdID0gewotCXsgImludGVncmF0b3I6Z3JlZW4wIiwgImhlYXJ0YmVhdCIsIH0sCi0JeyAiaW50ZWdyYXRvcjp5ZWxsb3ciLCB9LAotCXsgImludGVncmF0b3I6cmVkIiwgfSwKLQl7ICJpbnRlZ3JhdG9yOmdyZWVuMSIsIH0sCi0JeyAiaW50ZWdyYXRvcjpjb3JlX21vZHVsZSIsICJjcHUwIiwgfSwKLX07Ci0KLXN0YXRpYyB2b2lkIGludGVncmF0b3JfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LAotCQkJICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBiKQotewotCXN0cnVjdCBpbnRlZ3JhdG9yX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGNkZXYsCi0JCQkJCQkgc3RydWN0IGludGVncmF0b3JfbGVkLCBjZGV2KTsKLQl1MzIgcmVnID0gX19yYXdfcmVhZGwoTEVEUkVHKTsKLQotCWlmIChiICE9IExFRF9PRkYpCi0JCXJlZyB8PSBsZWQtPm1hc2s7Ci0JZWxzZQotCQlyZWcgJj0gfmxlZC0+bWFzazsKLQotCXdoaWxlIChfX3Jhd19yZWFkbChBTFBIQV9SRUcpICYgMSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQlfX3Jhd193cml0ZWwocmVnLCBMRURSRUcpOwotfQotCi1zdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpbnRlZ3JhdG9yX2xlZF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldikKLXsKLQlzdHJ1Y3QgaW50ZWdyYXRvcl9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihjZGV2LAotCQkJCQkJIHN0cnVjdCBpbnRlZ3JhdG9yX2xlZCwgY2Rldik7Ci0JdTMyIHJlZyA9IF9fcmF3X3JlYWRsKExFRFJFRyk7Ci0KLQlyZXR1cm4gKHJlZyAmIGxlZC0+bWFzaykgPyBMRURfRlVMTCA6IExFRF9PRkY7Ci19Ci0KLXN0YXRpYyB2b2lkIGNtX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldiwKLQkJCSAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYikKLXsKLQlpZiAoYiAhPSBMRURfT0ZGKQotCQljbV9jb250cm9sKENNX0NUUkxfTEVELCBDTV9DVFJMX0xFRCk7Ci0JZWxzZQotCQljbV9jb250cm9sKENNX0NUUkxfTEVELCAwKTsKLX0KLQotc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgY21fbGVkX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KQotewotCXUzMiByZWcgPSBjbV9nZXQoKTsKLQotCXJldHVybiAocmVnICYgQ01fQ1RSTF9MRUQpID8gTEVEX0ZVTEwgOiBMRURfT0ZGOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JhdG9yX2xlZHNfaW5pdCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW50ZWdyYXRvcl9sZWRzKTsgaSsrKSB7Ci0JCXN0cnVjdCBpbnRlZ3JhdG9yX2xlZCAqbGVkOwotCi0JCWxlZCA9IGt6YWxsb2Moc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFsZWQpCi0JCQlicmVhazsKLQotCi0JCWxlZC0+Y2Rldi5uYW1lID0gaW50ZWdyYXRvcl9sZWRzW2ldLm5hbWU7Ci0KLQkJaWYgKGkgPT0gNCkgeyAvKiBTZXR0aW5nIGZvciBMRUQgaW4gY29yZSBtb2R1bGUgKi8KLQkJCWxlZC0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IGNtX2xlZF9zZXQ7Ci0JCQlsZWQtPmNkZXYuYnJpZ2h0bmVzc19nZXQgPSBjbV9sZWRfZ2V0OwotCQl9IGVsc2UgewotCQkJbGVkLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gaW50ZWdyYXRvcl9sZWRfc2V0OwotCQkJbGVkLT5jZGV2LmJyaWdodG5lc3NfZ2V0ID0gaW50ZWdyYXRvcl9sZWRfZ2V0OwotCQl9Ci0KLQkJbGVkLT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IGludGVncmF0b3JfbGVkc1tpXS50cmlnZ2VyOwotCQlsZWQtPm1hc2sgPSBCSVQoaSk7Ci0KLQkJaWYgKGxlZF9jbGFzc2Rldl9yZWdpc3RlcihOVUxMLCAmbGVkLT5jZGV2KSA8IDApIHsKLQkJCWtmcmVlKGxlZCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogU2luY2Ugd2UgbWF5IGhhdmUgdHJpZ2dlcnMgb24gYW55IHN1YnN5c3RlbSwgZGVmZXIgcmVnaXN0cmF0aW9uCi0gKiB1bnRpbCBhZnRlciBzdWJzeXN0ZW1faW5pdC4KLSAqLwotZnNfaW5pdGNhbGwoaW50ZWdyYXRvcl9sZWRzX2luaXQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvbXNpLmMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvbXNpLmMKaW5kZXggZTc3MzBjZi4uOWY4OWU3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L21zaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9tc2kuYwpAQCAtMTI2LDEwICsxMjYsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9wMTN4eF9tc2lfY2hpcCA9IHsKIAkubmFtZSA9ICJQQ0ktTVNJIiwKIAkuaXJxX2FjayA9IGlvcDEzeHhfbXNpX25vcCwKLQkuaXJxX2VuYWJsZSA9IHVubWFza19tc2lfaXJxLAotCS5pcnFfZGlzYWJsZSA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX21hc2sgPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sgPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX2VuYWJsZSA9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUgPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfbWFzayA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBwY2lfbXNpX3VubWFza19pcnEsCiB9OwogCiBpbnQgYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCkBAIC0xNTMsNyArMTUzLDcgQEAKIAlpZCA9IGlvcDEzeHhfY3B1X2lkKCk7CiAJbXNnLmRhdGEgPSAoaWQgPDwgSU9QMTNYWF9NVV9NSU1SX0NPUkVfU0VMRUNUKSB8IChpcnEgJiAweDdmKTsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZpb3AxM3h4X21zaV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggZmM0YjdiMi4uODUzN2Q0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTY1Miw3ICs2NTIsNyBAQAogCXJldHVybiAodm9pZCBfX2lvbWVtICopYWRkcjsKIH0KIAotc3RhdGljIHZvaWQgaXhwNHh4X2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKQorc3RhdGljIHZvaWQgaXhwNHh4X2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCWlmICghaXNfcGNpX21lbW9yeSgoX19mb3JjZSB1MzIpYWRkcikpCiAJCV9faW91bm1hcChhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggNTU5YzY5YS4uNmE3MjI4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTU4LDYgKzU4LDEwIEBACiAjZGVmaW5lIHdyaXRldyh2LCBwKQkJCV9faW5kaXJlY3Rfd3JpdGV3KHYsIHApCiAjZGVmaW5lIHdyaXRlbCh2LCBwKQkJCV9faW5kaXJlY3Rfd3JpdGVsKHYsIHApCiAKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQodiwgcCkJCV9faW5kaXJlY3Rfd3JpdGViKHYsIHApCisjZGVmaW5lIHdyaXRld19yZWxheGVkKHYsIHApCQlfX2luZGlyZWN0X3dyaXRldyh2LCBwKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCh2LCBwKQkJX19pbmRpcmVjdF93cml0ZWwodiwgcCkKKwogI2RlZmluZSB3cml0ZXNiKHAsIHYsIGwpCQlfX2luZGlyZWN0X3dyaXRlc2IocCwgdiwgbCkKICNkZWZpbmUgd3JpdGVzdyhwLCB2LCBsKQkJX19pbmRpcmVjdF93cml0ZXN3KHAsIHYsIGwpCiAjZGVmaW5lIHdyaXRlc2wocCwgdiwgbCkJCV9faW5kaXJlY3Rfd3JpdGVzbChwLCB2LCBsKQpAQCAtNjYsNiArNzAsMTAgQEAKICNkZWZpbmUgcmVhZHcocCkJCQlfX2luZGlyZWN0X3JlYWR3KHApCiAjZGVmaW5lIHJlYWRsKHApCQkJX19pbmRpcmVjdF9yZWFkbChwKQogCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQocCkJCV9faW5kaXJlY3RfcmVhZGIocCkKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChwKQkJX19pbmRpcmVjdF9yZWFkdyhwKQorI2RlZmluZSByZWFkbF9yZWxheGVkKHApCQlfX2luZGlyZWN0X3JlYWRsKHApCisKICNkZWZpbmUgcmVhZHNiKHAsIHYsIGwpCQkJX19pbmRpcmVjdF9yZWFkc2IocCwgdiwgbCkKICNkZWZpbmUgcmVhZHN3KHAsIHYsIGwpCQkJX19pbmRpcmVjdF9yZWFkc3cocCwgdiwgbCkKICNkZWZpbmUgcmVhZHNsKHAsIHYsIGwpCQkJX19pbmRpcmVjdF9yZWFkc2wocCwgdiwgbCkKQEAgLTc2LDcgKzg0LDcgQEAKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwogCiAJaWYgKCFpc19wY2lfbWVtb3J5KGFkZHIpKSB7Ci0JCV9fcmF3X3dyaXRlYih2YWx1ZSwgYWRkcik7CisJCV9fcmF3X3dyaXRlYih2YWx1ZSwgcCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk5LDcgKzEwNyw3IEBACiAJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKIAogCWlmICghaXNfcGNpX21lbW9yeShhZGRyKSkgewotCQlfX3Jhd193cml0ZXcodmFsdWUsIGFkZHIpOworCQlfX3Jhd193cml0ZXcodmFsdWUsIHApOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDEsNyArMTQ5LDcgQEAKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwogCiAJaWYgKCFpc19wY2lfbWVtb3J5KGFkZHIpKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoYWRkcik7CisJCXJldHVybiBfX3Jhd19yZWFkYihwKTsKIAogCW4gPSBhZGRyICUgNDsKIAlieXRlX2VuYWJsZXMgPSAoMHhmICYgfkJJVChuKSkgPDwgSVhQNFhYX1BDSV9OUF9DQkVfQkVTTDsKQEAgLTE2NCw3ICsxNzIsNyBAQAogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CiAKIAlpZiAoIWlzX3BjaV9tZW1vcnkoYWRkcikpCi0JCXJldHVybiBfX3Jhd19yZWFkdyhhZGRyKTsKKwkJcmV0dXJuIF9fcmF3X3JlYWR3KHApOwogCiAJbiA9IGFkZHIgJSA0OwogCWJ5dGVfZW5hYmxlcyA9ICgweGYgJiB+KEJJVChuKSB8IEJJVChuKzEpKSkgPDwgSVhQNFhYX1BDSV9OUF9DQkVfQkVTTDsKQEAgLTIyNiw2ICsyMzQsNyBAQAogICogSS9PIGZ1bmN0aW9ucy4KICAqLwogCisjZGVmaW5lIG91dGIgb3V0Ygogc3RhdGljIGlubGluZSB2b2lkIG91dGIodTggdmFsdWUsIHUzMiBhZGRyKQogewogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CkBAIC0yMzUsMTIgKzI0NCwxNCBAQAogCWl4cDR4eF9wY2lfd3JpdGUoYWRkciwgYnl0ZV9lbmFibGVzIHwgTlBfQ01EX0lPV1JJVEUsIGRhdGEpOwogfQogCisjZGVmaW5lIG91dHNiIG91dHNiCiBzdGF0aWMgaW5saW5lIHZvaWQgb3V0c2IodTMyIGlvX2FkZHIsIGNvbnN0IHU4ICp2YWRkciwgdTMyIGNvdW50KQogewogCXdoaWxlIChjb3VudC0tKQogCQlvdXRiKCp2YWRkcisrLCBpb19hZGRyKTsKIH0KIAorI2RlZmluZSBvdXR3IG91dHcKIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXR3KHUxNiB2YWx1ZSwgdTMyIGFkZHIpCiB7CiAJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKQEAgLTI1MCwyMyArMjYxLDI3IEBACiAJaXhwNHh4X3BjaV93cml0ZShhZGRyLCBieXRlX2VuYWJsZXMgfCBOUF9DTURfSU9XUklURSwgZGF0YSk7CiB9CiAKKyNkZWZpbmUgb3V0c3cgb3V0c3cKIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzdyh1MzIgaW9fYWRkciwgY29uc3QgdTE2ICp2YWRkciwgdTMyIGNvdW50KQogewogCXdoaWxlIChjb3VudC0tKQogCQlvdXR3KGNwdV90b19sZTE2KCp2YWRkcisrKSwgaW9fYWRkcik7CiB9CiAKKyNkZWZpbmUgb3V0bCBvdXRsCiBzdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1MzIgdmFsdWUsIHUzMiBhZGRyKQogewogCWl4cDR4eF9wY2lfd3JpdGUoYWRkciwgTlBfQ01EX0lPV1JJVEUsIHZhbHVlKTsKIH0KIAorI2RlZmluZSBvdXRzbCBvdXRzbAogc3RhdGljIGlubGluZSB2b2lkIG91dHNsKHUzMiBpb19hZGRyLCBjb25zdCB1MzIgKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCiAJCW91dGwoY3B1X3RvX2xlMzIoKnZhZGRyKyspLCBpb19hZGRyKTsKIH0KIAorI2RlZmluZSBpbmIgaW5iCiBzdGF0aWMgaW5saW5lIHU4IGluYih1MzIgYWRkcikKIHsKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwpAQCAtMjc4LDEyICsyOTMsMTQgQEAKIAlyZXR1cm4gZGF0YSA+PiAoOCpuKTsKIH0KIAorI2RlZmluZSBpbnNiIGluc2IKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnNiKHUzMiBpb19hZGRyLCB1OCAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKIAkJKnZhZGRyKysgPSBpbmIoaW9fYWRkcik7CiB9CiAKKyNkZWZpbmUgaW53IGludwogc3RhdGljIGlubGluZSB1MTYgaW53KHUzMiBhZGRyKQogewogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CkBAIC0yOTUsMTIgKzMxMiwxNCBAQAogCXJldHVybiBkYXRhPj4oOCpuKTsKIH0KIAorI2RlZmluZSBpbnN3IGluc3cKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnN3KHUzMiBpb19hZGRyLCB1MTYgKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCiAJCSp2YWRkcisrID0gbGUxNl90b19jcHUoaW53KGlvX2FkZHIpKTsKIH0KIAorI2RlZmluZSBpbmwgaW5sCiBzdGF0aWMgaW5saW5lIHUzMiBpbmwodTMyIGFkZHIpCiB7CiAJdTMyIGRhdGE7CkBAIC0zMTAsNiArMzI5LDcgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAorI2RlZmluZSBpbnNsIGluc2wKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnNsKHUzMiBpb19hZGRyLCB1MzIgKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtleXN0b25lL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWtleXN0b25lL0tjb25maWcKaW5kZXggOThhMTU2YS4uZWE5NTVmNmRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtleXN0b25lL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1rZXlzdG9uZS9LY29uZmlnCkBAIC05LDYgKzksOCBAQAogCXNlbGVjdCBDT01NT05fQ0xLX0tFWVNUT05FCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQklHX0VORElBTgogCXNlbGVjdCBaT05FX0RNQSBpZiBBUk1fTFBBRQorCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQorCXNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0kKIAloZWxwCiAJICBTdXBwb3J0IGZvciBib2FyZHMgYmFzZWQgb24gdGhlIFRleGFzIEluc3RydW1lbnRzIEtleXN0b25lIGZhbWlseSBvZgogCSAgU29Dcy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbWVkaWF0ZWsvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbWVkaWF0ZWsvS2NvbmZpZwppbmRleCAyYzA0M2EyLi5mNzNmNTg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1lZGlhdGVrL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1tZWRpYXRlay9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIEFSQ0hfTUVESUFURUsKLQlib29sICJNZWRpYXRlayBNVDY1ODkgU29DIiBpZiBBUkNIX01VTFRJX1Y3CisJYm9vbCAiTWVkaWF0ZWsgTVQ2NXh4ICYgTVQ4MXh4IFNvQyIgaWYgQVJDSF9NVUxUSV9WNwogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IE1US19USU1FUgogCWhlbHAKLQkgIFN1cHBvcnQgZm9yIE1lZGlhdGVrIENvcnRleC1BNyBRdWFkLUNvcmUtU29DIE1UNjU4OS4KKwkgIFN1cHBvcnQgZm9yIE1lZGlhdGVrIE1UNjV4eCAmIE1UODF4eCBTb0NzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1lZGlhdGVrL21lZGlhdGVrLmMgYi9hcmNoL2FybS9tYWNoLW1lZGlhdGVrL21lZGlhdGVrLmMKaW5kZXggZjJhY2YwNy4uYTk1NDkwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tZWRpYXRlay9tZWRpYXRlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbWVkaWF0ZWsvbWVkaWF0ZWsuYwpAQCAtMTksNiArMTksOSBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1lZGlhdGVrX2JvYXJkX2R0X2NvbXBhdFtdID0gewogCSJtZWRpYXRlayxtdDY1ODkiLAorCSJtZWRpYXRlayxtdDY1OTIiLAorCSJtZWRpYXRlayxtdDgxMjciLAorCSJtZWRpYXRlayxtdDgxMzUiLAogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1lc29uL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW1lc29uL0tjb25maWcKaW5kZXggMmMxMTU0ZS4uMTgzMDFkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tZXNvbi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbWVzb24vS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAlib29sICJBbWxvZ2ljIE1lc29uIFNvQ3MiIGlmIEFSQ0hfTVVMVElfVjcKIAlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAogCXNlbGVjdCBBUk1fR0lDCisJc2VsZWN0IENBQ0hFX0wyWDAKIAogaWYgQVJDSF9NRVNPTgogCkBAIC0xMCw0ICsxMSw5IEBACiAJZGVmYXVsdCBBUkNIX01FU09OCiAJc2VsZWN0IE1FU09ONl9USU1FUgogCitjb25maWcgTUFDSF9NRVNPTjgKKwlib29sICJBbWxvZ2ljIE1lc29uOCBTb0NzIHN1cHBvcnQiCisJZGVmYXVsdCBBUkNIX01FU09OCisJc2VsZWN0IE1FU09ONl9USU1FUgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tZXNvbi9tZXNvbi5jIGIvYXJjaC9hcm0vbWFjaC1tZXNvbi9tZXNvbi5jCmluZGV4IDVlZTA2NGYuLjVkNmFmZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbWVzb24vbWVzb24uYworKysgYi9hcmNoL2FybS9tYWNoLW1lc29uL21lc29uLmMKQEAgLTE2LDEyICsxNiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG02X2NvbW1vbl9ib2FyZF9jb21wYXRbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWVzb25fY29tbW9uX2JvYXJkX2NvbXBhdFtdID0gewogCSJhbWxvZ2ljLG1lc29uNiIsCisJImFtbG9naWMsbWVzb244IiwKIAlOVUxMLAogfTsKIAotRFRfTUFDSElORV9TVEFSVChBTUw4NzI2X01YLCAiQW1sb2dpYyBNZXNvbjYgcGxhdGZvcm0iKQotCS5kdF9jb21wYXQJPSBtNl9jb21tb25fYm9hcmRfY29tcGF0LAorRFRfTUFDSElORV9TVEFSVChNRVNPTiwgIkFtbG9naWMgTWVzb24gcGxhdGZvcm0iKQorCS5kdF9jb21wYXQJPSBtZXNvbl9jb21tb25fYm9hcmRfY29tcGF0LAorCS5sMmNfYXV4X3ZhbAk9IDAsCisJLmwyY19hdXhfbWFzawk9IH4wLAogTUFDSElORV9FTkQKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXZlYnUvTWFrZWZpbGUKaW5kZXggZTI0MTM2Yi4uYjRmMDE0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfTVZFQlVfQU5ZKQkgKz0gc3lzdGVtLWNvbnRyb2xsZXIubyBtdmVidS1zb2MtaWQubwogCiBpZmVxICgkKENPTkZJR19NQUNIX01WRUJVX1Y3KSx5KQotb2JqLXkJCQkJICs9IGNwdS1yZXNldC5vIGJvYXJkLXY3Lm8gY29oZXJlbmN5Lm8gY29oZXJlbmN5X2xsLm8gcG1zdS5vIHBtc3VfbGwubworb2JqLXkJCQkJICs9IGNwdS1yZXNldC5vIGJvYXJkLXY3Lm8gY29oZXJlbmN5Lm8gY29oZXJlbmN5X2xsLm8gcG1zdS5vIHBtc3VfbGwubyBwbS5vIHBtLWJvYXJkLm8KIG9iai0kKENPTkZJR19TTVApCQkgKz0gcGxhdHNtcC5vIGhlYWRzbXAubyBwbGF0c21wLWE5Lm8gaGVhZHNtcC1hOS5vCiBlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2FybWFkYS0zNzAteHAuaCBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oCmluZGV4IDg0Y2Q5MGQuLmM1NWJiZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oCkBAIC0xNiwxNCArMTYsOCBAQAogI2RlZmluZSBfX01BQ0hfQVJNQURBXzM3MF9YUF9ICiAKICNpZmRlZiBDT05GSUdfU01QCi0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotCi0jZGVmaW5lIEFSTUFEQV9YUF9NQVhfQ1BVUyA0Ci0KIHZvaWQgYXJtYWRhX3hwX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBhcm1hZGFfeHBfc21wX29wczsKICNlbmRpZgogCi1pbnQgYXJtYWRhXzM3MF94cF9wbXN1X2lkbGVfZW50ZXIodW5zaWduZWQgbG9uZyBkZWVwaWRsZSk7Ci0KICNlbmRpZiAvKiBfX01BQ0hfQVJNQURBXzM3MF9YUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMKaW5kZXggNjQ3ODYyNi4uODlhMTM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYwpAQCAtMTYsMTAgKzE2LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTU3LDYgKzU5LDU0IEBACiB9CiAKIC8qCisgKiBXaGVuIHJldHVybmluZyBmcm9tIHN1c3BlbmQsIHRoZSBwbGF0Zm9ybSBnb2VzIHRocm91Z2ggdGhlCisgKiBib290bG9hZGVyLCB3aGljaCBleGVjdXRlcyBpdHMgRERSMyB0cmFpbmluZyBjb2RlLiBUaGlzIGNvZGUgaGFzCisgKiB0aGUgdW5mb3J0dW5hdGUgaWRlYSBvZiB1c2luZyB0aGUgZmlyc3QgMTAgS0Igb2YgZWFjaCBEUkFNIGJhbmsgdG8KKyAqIGV4ZXJjaXNlIHRoZSBSQU0gYW5kIGNhbGN1bGF0ZSB0aGUgb3B0aW1hbCB0aW1pbmdzLiBUaGVyZWZvcmUsIHRoaXMKKyAqIGFyZWEgb2YgUkFNIGlzIG92ZXJ3cml0dGVuLCBhbmQgc2hvdWxkbid0IGJlIHVzZWQgYnkgdGhlIGtlcm5lbCBpZgorICogc3VzcGVuZC9yZXN1bWUgaXMgc3VwcG9ydGVkLgorICovCisKKyNpZmRlZiBDT05GSUdfU1VTUEVORAorI2RlZmluZSBNVkVCVV9ERFJfVFJBSU5JTkdfQVJFQV9TWiAoMTAgKiBTWl8xSykKK3N0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3NjYW5fbWVtKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBjaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKKwljb25zdCBfX2JlMzIgKnJlZywgKmVuZHA7CisJaW50IGw7CisKKwlpZiAodHlwZSA9PSBOVUxMIHx8IHN0cmNtcCh0eXBlLCAibWVtb3J5IikpCisJCXJldHVybiAwOworCisJcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdXNhYmxlLW1lbW9yeSIsICZsKTsKKwlpZiAocmVnID09IE5VTEwpCisJCXJlZyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInJlZyIsICZsKTsKKwlpZiAocmVnID09IE5VTEwpCisJCXJldHVybiAwOworCisJZW5kcCA9IHJlZyArIChsIC8gc2l6ZW9mKF9fYmUzMikpOworCXdoaWxlICgoZW5kcCAtIHJlZykgPj0gKGR0X3Jvb3RfYWRkcl9jZWxscyArIGR0X3Jvb3Rfc2l6ZV9jZWxscykpIHsKKwkJdTY0IGJhc2UsIHNpemU7CisKKwkJYmFzZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9hZGRyX2NlbGxzLCAmcmVnKTsKKwkJc2l6ZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9zaXplX2NlbGxzLCAmcmVnKTsKKworCQltZW1ibG9ja19yZXNlcnZlKGJhc2UsIE1WRUJVX0REUl9UUkFJTklOR19BUkVBX1NaKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X21lbWJsb2NrX3Jlc2VydmUodm9pZCkKK3sKKwlvZl9zY2FuX2ZsYXRfZHQobXZlYnVfc2Nhbl9tZW0sIE5VTEwpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBtdmVidV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpIHt9CisjZW5kaWYKKworLyoKICAqIEVhcmx5IHZlcnNpb25zIG9mIEFybWFkYSAzNzUgU29DIGhhdmUgYSBidWcgd2hlcmUgdGhlIEJvb3RST00KICAqIGxlYXZlcyBhbiBleHRlcm5hbCBkYXRhIGFib3J0IHBlbmRpbmcuIFRoZSBrZXJuZWwgaXMgaGl0IGJ5IHRoaXMKICAqIGRhdGEgYWJvcnQgYXMgc29vbiBhcyBpdCBlbnRlcnMgdXNlcnNwYWNlLCBiZWNhdXNlIGl0IHVubWFza3MgdGhlCkBAIC0xMjQsNzYgKzE3NCwxMiBAQAogCXJldHVybjsKIH0KIAotI2RlZmluZSBBMzc1X1oxX1RIRVJNQUxfRklYVVBfT0ZGU0VUIDB4YwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdGhlcm1hbF9xdWlyayh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyIGRldiwgcmV2OwotCWludCByZXM7Ci0KLQkvKgotCSAqIFRoZSBlYXJseSBTb0MgWjEgcmV2aXNpb24gbmVlZHMgYSBxdWlyayB0byBiZSBhcHBsaWVkIGluIG9yZGVyCi0JICogZm9yIHRoZSB0aGVybWFsIGNvbnRyb2xsZXIgdG8gd29yayBwcm9wZXJseS4gVGhpcyBxdWlyayBicmVha3MKLQkgKiB0aGUgdGhlcm1hbCBzdXBwb3J0IGlmIGFwcGxpZWQgb24gYSBTb0MgdGhhdCBkb2Vzbid0IG5lZWQgaXQsCi0JICogc28gd2UgZW5mb3JjZSB0aGUgU29DIHJldmlzaW9uIHRvIGJlIGtub3duLgotCSAqLwotCXJlcyA9IG12ZWJ1X2dldF9zb2NfaWQoJmRldiwgJnJldik7Ci0JaWYgKHJlcyA8IDAgfHwgKHJlcyA9PSAwICYmIHJldiA+IEFSTUFEQV8zNzVfWjFfUkVWKSkKLQkJcmV0dXJuOwotCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAibWFydmVsbCxhcm1hZGEzNzUtdGhlcm1hbCIpIHsKLQkJc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCQlfX2JlMzIgbmV3dmFsLCAqbmV3cHJvcCwgKm9sZHByb3A7Ci0JCWludCBsZW47Ci0KLQkJLyoKLQkJICogVGhlIHJlZ2lzdGVyIG9mZnNldCBpcyBhdCBhIHdyb25nIGxvY2F0aW9uLiBUaGlzIHF1aXJrCi0JCSAqIGNyZWF0ZXMgYSBuZXcgcmVnIHByb3BlcnR5IGFzIGEgY2xvbmUgb2YgdGhlIHByZXZpb3VzCi0JCSAqIG9uZSBhbmQgY29ycmVjdHMgdGhlIG9mZnNldC4KLQkJICovCi0JCW9sZHByb3AgPSAoX19iZTMyICopb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJmxlbik7Ci0JCWlmICghb2xkcHJvcCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIENyZWF0ZSBhIGR1cGxpY2F0ZSBvZiB0aGUgJ3JlZycgcHJvcGVydHkgKi8KLQkJcHJvcCA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9wKSwgR0ZQX0tFUk5FTCk7Ci0JCXByb3AtPmxlbmd0aCA9IGxlbjsKLQkJcHJvcC0+bmFtZSA9IGtzdHJkdXAoInJlZyIsIEdGUF9LRVJORUwpOwotCQlwcm9wLT52YWx1ZSA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQkJbWVtY3B5KHByb3AtPnZhbHVlLCBvbGRwcm9wLCBsZW4pOwotCi0JCS8qIEZpeHVwIHRoZSByZWdpc3RlciBvZmZzZXQgb2YgdGhlIHNlY29uZCBlbnRyeSAqLwotCQlvbGRwcm9wICs9IDI7Ci0JCW5ld3Byb3AgPSAoX19iZTMyICopcHJvcC0+dmFsdWUgKyAyOwotCQluZXd2YWwgPSBjcHVfdG9fYmUzMihiZTMyX3RvX2NwdSgqb2xkcHJvcCkgLQotCQkJCSAgICAgQTM3NV9aMV9USEVSTUFMX0ZJWFVQX09GRlNFVCk7Ci0JCSpuZXdwcm9wID0gbmV3dmFsOwotCQlvZl91cGRhdGVfcHJvcGVydHkobnAsIHByb3ApOwotCi0JCS8qCi0JCSAqIFRoZSB0aGVybWFsIGNvbnRyb2xsZXIgbmVlZHMgc29tZSBxdWlyayB0b28sIHNvIGxldCdzIGNoYW5nZQotCQkgKiB0aGUgY29tcGF0aWJsZSBzdHJpbmcgdG8gcmVmbGVjdCB0aGlzIGFuZCBhbGxvdyB0aGUgZHJpdmVyCi0JCSAqIHRoZSB0YWtlIHRoZSBuZWNlc3NhcnkgYWN0aW9uLgotCQkgKi8KLQkJcHJvcCA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9wKSwgR0ZQX0tFUk5FTCk7Ci0JCXByb3AtPm5hbWUgPSBrc3RyZHVwKCJjb21wYXRpYmxlIiwgR0ZQX0tFUk5FTCk7Ci0JCXByb3AtPmxlbmd0aCA9IHNpemVvZigibWFydmVsbCxhcm1hZGEzNzUtejEtdGhlcm1hbCIpOwotCQlwcm9wLT52YWx1ZSA9IGtzdHJkdXAoIm1hcnZlbGwsYXJtYWRhMzc1LXoxLXRoZXJtYWwiLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCW9mX3VwZGF0ZV9wcm9wZXJ0eShucCwgcHJvcCk7Ci0JfQotCXJldHVybjsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X2R0X2luaXQodm9pZCkKIHsKLQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJwbGF0aG9tZSxvcGVuYmxvY2tzLWF4My00IikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgibWFydmVsbCxhcm1hZGF4cCIpKQogCQlpMmNfcXVpcmsoKTsKLQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJtYXJ2ZWxsLGEzNzUtZGIiKSkgeworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIm1hcnZlbGwsYTM3NS1kYiIpKQogCQlleHRlcm5hbF9hYm9ydF9xdWlyaygpOwotCQl0aGVybWFsX3F1aXJrKCk7Ci0JfQogCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQpAQCAtMjA2LDEwICsxOTIsMTYgQEAKIERUX01BQ0hJTkVfU1RBUlQoQVJNQURBXzM3MF9YUF9EVCwgIk1hcnZlbGwgQXJtYWRhIDM3MC9YUCAoRGV2aWNlIFRyZWUpIikKIAkubDJjX2F1eF92YWwJPSAwLAogCS5sMmNfYXV4X21hc2sJPSB+MCwKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZpZWxkICguc21wKSBpcyBzdGlsbCBuZWVkZWQgdG8gZW5zdXJlIGJhY2t3YXJkCisgKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIERldmljZSBUcmVlcyB0aGF0IHdlcmUgbm90IHNwZWNpZnlpbmcgdGhlCisgKiBjcHVzIGVuYWJsZS1tZXRob2QgcHJvcGVydHkuCisgKi8KIAkuc21wCQk9IHNtcF9vcHMoYXJtYWRhX3hwX3NtcF9vcHMpLAogCS5pbml0X21hY2hpbmUJPSBtdmVidV9kdF9pbml0LAogCS5pbml0X2lycSAgICAgICA9IG12ZWJ1X2luaXRfaXJxLAogCS5yZXN0YXJ0CT0gbXZlYnVfcmVzdGFydCwKKwkucmVzZXJ2ZSAgICAgICAgPSBtdmVidV9tZW1ibG9ja19yZXNlcnZlLAogCS5kdF9jb21wYXQJPSBhcm1hZGFfMzcwX3hwX2R0X2NvbXBhdCwKIE1BQ0hJTkVfRU5ECiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jCmluZGV4IDJiZGMzMjMuLjM1ODVjYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCi0gKiBDb2hlcmVuY3kgZmFicmljIChBdXJvcmEpIHN1cHBvcnQgZm9yIEFybWFkYSAzNzAgYW5kIFhQIHBsYXRmb3Jtcy4KKyAqIENvaGVyZW5jeSBmYWJyaWMgKEF1cm9yYSkgc3VwcG9ydCBmb3IgQXJtYWRhIDM3MCwgMzc1LCAzOHggYW5kIFhQCisgKiBwbGF0Zm9ybXMuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyIE1hcnZlbGwKICAqCkBAIC0xMSw3ICsxMiw3IEBACiAgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CiAgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKgotICogVGhlIEFybWFkYSAzNzAgYW5kIEFybWFkYSBYUCBTT0NzIGhhdmUgYSBjb2hlcmVuY3kgZmFicmljIHdoaWNoIGlzCisgKiBUaGUgQXJtYWRhIDM3MCwgMzc1LCAzOHggYW5kIFhQIFNPQ3MgaGF2ZSBhIGNvaGVyZW5jeSBmYWJyaWMgd2hpY2ggaXMKICAqIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyBoYXJkd2FyZSBjb2hlcmVuY3kgYmV0d2VlbiBhbGwgQ1BVcyBhbmQgYmV0d2VlbgogICogQ1BVcyBhbmQgSS9PIG1hc3RlcnMuIFRoaXMgZmlsZSBpbml0aWFsaXplcyB0aGUgY29oZXJlbmN5IGZhYnJpYyBhbmQKICAqIHN1cHBsaWVzIGJhc2ljIHJvdXRpbmVzIGZvciBjb25maWd1cmluZyBhbmQgY29udHJvbGxpbmcgaGFyZHdhcmUgY29oZXJlbmN5CkBAIC0yOCwxMiArMjksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSAiYXJtYWRhLTM3MC14cC5oIgogI2luY2x1ZGUgImNvaGVyZW5jeS5oIgogI2luY2x1ZGUgIm12ZWJ1LXNvYy1pZC5oIgogCkBAIC00Miw4ICs0MSw2IEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICpjb2hlcmVuY3lfY3B1X2Jhc2U7CiAKIC8qIENvaGVyZW5jeSBmYWJyaWMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIENPSEVSRU5DWV9GQUJSSUNfQ0ZHX09GRlNFVAkJICAgMHg0Ci0KICNkZWZpbmUgSU9fU1lOQ19CQVJSSUVSX0NUTF9PRkZTRVQJCSAgIDB4MAogCiBlbnVtIHsKQEAgLTc5LDE1NyArNzYsOCBAQAogCXJldHVybiBsbF9lbmFibGVfY29oZXJlbmN5KCk7CiB9CiAKLS8qCi0gKiBUaGUgYmVsb3cgY29kZSBpbXBsZW1lbnRzIHRoZSBJL08gY29oZXJlbmN5IHdvcmthcm91bmQgb24gQXJtYWRhCi0gKiAzNzUuIFRoaXMgd29ya2Fyb3VuZCBjb25zaXN0cyBpbiB1c2luZyB0aGUgdHdvIGNoYW5uZWxzIG9mIHRoZQotICogZmlyc3QgWE9SIGVuZ2luZSB0byB0cmlnZ2VyIGEgWE9SIHRyYW5zYWN0aW9uIHRoYXQgc2VydmVzIGFzIHRoZQotICogSS9PIGNvaGVyZW5jeSBiYXJyaWVyLgotICovCi0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnhvcl9iYXNlLCAqeG9yX2hpZ2hfYmFzZTsKLXN0YXRpYyBkbWFfYWRkcl90IGNvaGVyZW5jeV93YV9idWZfcGh5c1tDT05GSUdfTlJfQ1BVU107Ci1zdGF0aWMgdm9pZCAqY29oZXJlbmN5X3dhX2J1ZltDT05GSUdfTlJfQ1BVU107Ci1zdGF0aWMgYm9vbCBjb2hlcmVuY3lfd2FfZW5hYmxlZDsKLQotI2RlZmluZSBYT1JfQ09ORklHKGNoYW4pICAgICAgICAgICAgKDB4MTAgKyAoY2hhbiAqIDQpKQotI2RlZmluZSBYT1JfQUNUSVZBVElPTihjaGFuKSAgICAgICAgKDB4MjAgKyAoY2hhbiAqIDQpKQotI2RlZmluZSBXSU5ET1dfQkFSX0VOQUJMRShjaGFuKSAgICAgKDB4MjQwICsgKChjaGFuKSA8PCAyKSkKLSNkZWZpbmUgV0lORE9XX0JBU0UodykgICAgICAgICAgICAgICgweDI1MCArICgodykgPDwgMikpCi0jZGVmaW5lIFdJTkRPV19TSVpFKHcpICAgICAgICAgICAgICAoMHgyNzAgKyAoKHcpIDw8IDIpKQotI2RlZmluZSBXSU5ET1dfUkVNQVBfSElHSCh3KSAgICAgICAgKDB4MjkwICsgKCh3KSA8PCAyKSkKLSNkZWZpbmUgV0lORE9XX09WRVJSSURFX0NUUkwoY2hhbikgICgweDJBMCArICgoY2hhbikgPDwgMikpCi0jZGVmaW5lIFhPUl9ERVNUX1BPSU5URVIoY2hhbikgICAgICAoMHgyQjAgKyAoY2hhbiAqIDQpKQotI2RlZmluZSBYT1JfQkxPQ0tfU0laRShjaGFuKSAgICAgICAgKDB4MkMwICsgKGNoYW4gKiA0KSkKLSNkZWZpbmUgWE9SX0lOSVRfVkFMVUVfTE9XICAgICAgICAgICAweDJFMAotI2RlZmluZSBYT1JfSU5JVF9WQUxVRV9ISUdIICAgICAgICAgIDB4MkU0Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtdmVidV9od2NjX2FybWFkYTM3NV9zeW5jX2lvX2JhcnJpZXJfd2Eodm9pZCkKLXsKLQlpbnQgaWR4ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JLyogV3JpdGUgJzEnIHRvIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBidWZmZXIgKi8KLQl3cml0ZWwoMHgxLCBjb2hlcmVuY3lfd2FfYnVmW2lkeF0pOwotCi0JLyogV2FpdCB1bnRpbCB0aGUgZW5naW5lIGlzIGlkbGUgKi8KLQl3aGlsZSAoKHJlYWRsKHhvcl9iYXNlICsgWE9SX0FDVElWQVRJT04oaWR4KSkgPj4gNCkgJiAweDMpCi0JCTsKLQotCWRtYigpOwotCi0JLyogVHJpZ2dlciBjaGFubmVsICovCi0Jd3JpdGVsKDB4MSwgeG9yX2Jhc2UgKyBYT1JfQUNUSVZBVElPTihpZHgpKTsKLQotCS8qIFBvbGwgdGhlIGRhdGEgdW50aWwgaXQgaXMgY2xlYXJlZCBieSB0aGUgWE9SIHRyYW5zYWN0aW9uICovCi0Jd2hpbGUgKHJlYWRsKGNvaGVyZW5jeV93YV9idWZbaWR4XSkpCi0JCTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfY29oZXJlbmN5X2luaXRfd2Eodm9pZCkKLXsKLQljb25zdCBzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvICpkcmFtOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqeG9yX25vZGU7Ci0Jc3RydWN0IHByb3BlcnR5ICp4b3Jfc3RhdHVzOwotCXN0cnVjdCBjbGsgKnhvcl9jbGs7Ci0JdTMyIHdpbl9lbmFibGUgPSAwOwotCWludCBpOwotCi0JcHJfd2FybigiZW5hYmxpbmcgY29oZXJlbmN5IHdvcmthcm91bmQgZm9yIEFybWFkYSAzNzUgWjEsIG9uZSBYT1IgZW5naW5lIGRpc2FibGVkXG4iKTsKLQotCS8qCi0JICogU2luY2UgdGhlIHdvcmthcm91bmQgdXNlcyBvbmUgWE9SIGVuZ2luZSwgd2UgZ3JhYiBhCi0JICogcmVmZXJlbmNlIHRvIGl0cyBEZXZpY2UgVHJlZSBub2RlIGZpcnN0LgotCSAqLwotCXhvcl9ub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgIm1hcnZlbGwsb3Jpb24teG9yIik7Ci0JQlVHX09OKCF4b3Jfbm9kZSk7Ci0KLQkvKgotCSAqIFRoZW4gd2UgbWFyayBpdCBhcyBkaXNhYmxlZCBzbyB0aGF0IHRoZSByZWFsIFhPUiBkcml2ZXIKLQkgKiB3aWxsIG5vdCB1c2UgaXQuCi0JICovCi0JeG9yX3N0YXR1cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSksIEdGUF9LRVJORUwpOwotCUJVR19PTigheG9yX3N0YXR1cyk7Ci0KLQl4b3Jfc3RhdHVzLT52YWx1ZSA9IGtzdHJkdXAoImRpc2FibGVkIiwgR0ZQX0tFUk5FTCk7Ci0JQlVHX09OKCF4b3Jfc3RhdHVzLT52YWx1ZSk7Ci0KLQl4b3Jfc3RhdHVzLT5sZW5ndGggPSA4OwotCXhvcl9zdGF0dXMtPm5hbWUgPSBrc3RyZHVwKCJzdGF0dXMiLCBHRlBfS0VSTkVMKTsKLQlCVUdfT04oIXhvcl9zdGF0dXMtPm5hbWUpOwotCi0Jb2ZfdXBkYXRlX3Byb3BlcnR5KHhvcl9ub2RlLCB4b3Jfc3RhdHVzKTsKLQotCS8qCi0JICogQW5kIHdlIHJlbWFwIHRoZSByZWdpc3RlcnMsIGdldCB0aGUgY2xvY2ssIGFuZCBkbyB0aGUKLQkgKiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFhPUiBlbmdpbmUuCi0JICovCi0JeG9yX2Jhc2UgPSBvZl9pb21hcCh4b3Jfbm9kZSwgMCk7Ci0JeG9yX2hpZ2hfYmFzZSA9IG9mX2lvbWFwKHhvcl9ub2RlLCAxKTsKLQotCXhvcl9jbGsgPSBvZl9jbGtfZ2V0X2J5X25hbWUoeG9yX25vZGUsIE5VTEwpOwotCUJVR19PTigheG9yX2Nsayk7Ci0KLQljbGtfcHJlcGFyZV9lbmFibGUoeG9yX2Nsayk7Ci0KLQlkcmFtID0gbXZfbWJ1c19kcmFtX2luZm8oKTsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJd3JpdGVsKDAsIHhvcl9iYXNlICsgV0lORE9XX0JBU0UoaSkpOwotCQl3cml0ZWwoMCwgeG9yX2Jhc2UgKyBXSU5ET1dfU0laRShpKSk7Ci0JCWlmIChpIDwgNCkKLQkJCXdyaXRlbCgwLCB4b3JfYmFzZSArIFdJTkRPV19SRU1BUF9ISUdIKGkpKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHJhbS0+bnVtX2NzOyBpKyspIHsKLQkJY29uc3Qgc3RydWN0IG1idXNfZHJhbV93aW5kb3cgKmNzID0gZHJhbS0+Y3MgKyBpOwotCQl3cml0ZWwoKGNzLT5iYXNlICYgMHhmZmZmMDAwMCkgfAotCQkgICAgICAgKGNzLT5tYnVzX2F0dHIgPDwgOCkgfAotCQkgICAgICAgZHJhbS0+bWJ1c19kcmFtX3RhcmdldF9pZCwgeG9yX2Jhc2UgKyBXSU5ET1dfQkFTRShpKSk7Ci0JCXdyaXRlbCgoY3MtPnNpemUgLSAxKSAmIDB4ZmZmZjAwMDAsIHhvcl9iYXNlICsgV0lORE9XX1NJWkUoaSkpOwotCi0JCXdpbl9lbmFibGUgfD0gKDEgPDwgaSk7Ci0JCXdpbl9lbmFibGUgfD0gMyA8PCAoMTYgKyAoMiAqIGkpKTsKLQl9Ci0KLQl3cml0ZWwod2luX2VuYWJsZSwgeG9yX2Jhc2UgKyBXSU5ET1dfQkFSX0VOQUJMRSgwKSk7Ci0Jd3JpdGVsKHdpbl9lbmFibGUsIHhvcl9iYXNlICsgV0lORE9XX0JBUl9FTkFCTEUoMSkpOwotCXdyaXRlbCgwLCB4b3JfYmFzZSArIFdJTkRPV19PVkVSUklERV9DVFJMKDApKTsKLQl3cml0ZWwoMCwgeG9yX2Jhc2UgKyBXSU5ET1dfT1ZFUlJJREVfQ1RSTCgxKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX05SX0NQVVM7IGkrKykgewotCQljb2hlcmVuY3lfd2FfYnVmW2ldID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCQlCVUdfT04oIWNvaGVyZW5jeV93YV9idWZbaV0pOwotCi0JCS8qCi0JCSAqIFdlIGNhbid0IHVzZSB0aGUgRE1BIG1hcHBpbmcgQVBJLCBzaW5jZSB3ZSBkb24ndAotCQkgKiBoYXZlIGEgdmFsaWQgJ3N0cnVjdCBkZXZpY2UnIHBvaW50ZXIKLQkJICovCi0JCWNvaGVyZW5jeV93YV9idWZfcGh5c1tpXSA9Ci0JCQl2aXJ0X3RvX3BoeXMoY29oZXJlbmN5X3dhX2J1ZltpXSk7Ci0JCUJVR19PTighY29oZXJlbmN5X3dhX2J1Zl9waHlzW2ldKTsKLQotCQkvKgotCQkgKiBDb25maWd1cmUgdGhlIFhPUiBlbmdpbmUgZm9yIG1lbXNldCBvcGVyYXRpb24sIHdpdGgKLQkJICogYSAxMjggYnl0ZXMgYmxvY2sgc2l6ZQotCQkgKi8KLQkJd3JpdGVsKDB4NDQ0LCB4b3JfYmFzZSArIFhPUl9DT05GSUcoaSkpOwotCQl3cml0ZWwoMTI4LCB4b3JfYmFzZSArIFhPUl9CTE9DS19TSVpFKGkpKTsKLQkJd3JpdGVsKGNvaGVyZW5jeV93YV9idWZfcGh5c1tpXSwKLQkJICAgICAgIHhvcl9iYXNlICsgWE9SX0RFU1RfUE9JTlRFUihpKSk7Ci0JfQotCi0Jd3JpdGVsKDB4MCwgeG9yX2Jhc2UgKyBYT1JfSU5JVF9WQUxVRV9MT1cpOwotCXdyaXRlbCgweDAsIHhvcl9iYXNlICsgWE9SX0lOSVRfVkFMVUVfSElHSCk7Ci0KLQljb2hlcmVuY3lfd2FfZW5hYmxlZCA9IHRydWU7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtdmVidV9od2NjX3N5bmNfaW9fYmFycmllcih2b2lkKQogewotCWlmIChjb2hlcmVuY3lfd2FfZW5hYmxlZCkgewotCQltdmVidV9od2NjX2FybWFkYTM3NV9zeW5jX2lvX2JhcnJpZXJfd2EoKTsKLQkJcmV0dXJuOwotCX0KLQogCXdyaXRlbCgweDEsIGNvaGVyZW5jeV9jcHVfYmFzZSArIElPX1NZTkNfQkFSUklFUl9DVExfT0ZGU0VUKTsKIAl3aGlsZSAocmVhZGwoY29oZXJlbmN5X2NwdV9iYXNlICsgSU9fU1lOQ19CQVJSSUVSX0NUTF9PRkZTRVQpICYgMHgxKTsKIH0KQEAgLTM2MSwyNSArMjA5LDQxIEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlpbnQgdHlwZTsKKworCS8qCisJICogVGhlIGNvaGVyZW5jeSBmYWJyaWMgaXMgbmVlZGVkOgorCSAqIC0gRm9yIGNvaGVyZW5jeSBiZXR3ZWVuIHByb2Nlc3NvcnMgb24gQXJtYWRhIFhQLCBzbyBvbmx5CisJICogICB3aGVuIFNNUCBpcyBlbmFibGVkLgorCSAqIC0gRm9yIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBwcm9jZXNzb3IgYW5kIEkvTyBkZXZpY2VzLCBidXQKKwkgKiAgIHRoaXMgY29oZXJlbmN5IHJlcXVpcmVzIG1hbnkgcHJlLXJlcXVpc2l0ZXMgKHdyaXRlCisJICogICBhbGxvY2F0ZSBjYWNoZSBwb2xpY3ksIHNoYXJlYWJsZSBwYWdlcywgU01QIGJpdCBzZXQpIHRoYXQKKwkgKiAgIGFyZSBvbmx5IG1lYW50IGluIFNNUCBzaXR1YXRpb25zLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBvbiBBcm1hZGEgMzcwLCB0aGVyZSBpcyBjdXJyZW50bHkKKwkgKiBubyB3YXkgdG8gdXNlIGhhcmR3YXJlIEkvTyBjb2hlcmVuY3ksIGJlY2F1c2UgZXZlbiB3aGVuCisJICogQ09ORklHX1NNUCBpcyBlbmFibGVkLCBpc19zbXAoKSByZXR1cm5zIGZhbHNlIGR1ZSB0byB0aGUKKwkgKiBBcm1hZGEgMzcwIGJlaW5nIGEgc2luZ2xlLWNvcmUgcHJvY2Vzc29yLiBUbyBsaWZ0IHRoaXMKKwkgKiBsaW1pdGF0aW9uLCB3ZSB3b3VsZCBoYXZlIHRvIGZpbmQgYSB3YXkgdG8gbWFrZSB0aGUgY2FjaGUKKwkgKiBwb2xpY3kgc2V0IHRvIHdyaXRlLWFsbG9jYXRlIChvbiBhbGwgQXJtYWRhIFNvQ3MpLCBhbmQgdG8KKwkgKiBzZXQgdGhlIHNoYXJlYWJsZSBhdHRyaWJ1dGUgaW4gcGFnZSB0YWJsZXMgKG9uIGFsbCBBcm1hZGEKKwkgKiBTb0NzIGV4Y2VwdCB0aGUgQXJtYWRhIDM3MCkuIFVuZm9ydHVuYXRlbHksIHN1Y2ggZGVjaXNpb25zCisJICogYXJlIHRha2VuIHZlcnkgZWFybHkgaW4gdGhlIGtlcm5lbCBib290IHByb2Nlc3MsIGF0IGEgcG9pbnQKKwkgKiB3aGVyZSB3ZSBkb24ndCBrbm93IHlldCBvbiB3aGljaCBTb0Mgd2UgYXJlIHJ1bm5pbmcuCisKKwkgKi8KKwlpZiAoIWlzX3NtcCgpKQorCQlyZXR1cm4gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX05PTkU7CiAKIAlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZV9hbmRfbWF0Y2goTlVMTCwgb2ZfY29oZXJlbmN5X3RhYmxlLCAmbWF0Y2gpOwotCWlmIChucCkgewotCQlpbnQgdHlwZSA9IChpbnQpIG1hdGNoLT5kYXRhOworCWlmICghbnApCisJCXJldHVybiBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfTk9ORTsKIAotCQkvKiBBcm1hZGEgMzcwL1hQIGNvaGVyZW5jeSB3b3JrcyBpbiBib3RoIFVQIGFuZCBTTVAgKi8KLQkJaWYgKHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zNzBfWFApCi0JCQlyZXR1cm4gdHlwZTsKKwl0eXBlID0gKGludCkgbWF0Y2gtPmRhdGE7CiAKLQkJLyogQXJtYWRhIDM3NSBjb2hlcmVuY3kgd29ya3Mgb25seSBvbiBTTVAgKi8KLQkJZWxzZSBpZiAodHlwZSA9PSBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfQVJNQURBXzM3NSAmJiBpc19zbXAoKSkKLQkJCXJldHVybiB0eXBlOworCW9mX25vZGVfcHV0KG5wKTsKIAotCQkvKiBBcm1hZGEgMzgwIGNvaGVyZW5jeSB3b3JrcyBvbmx5IG9uIFNNUCAqLwotCQllbHNlIGlmICh0eXBlID09IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9BUk1BREFfMzgwICYmIGlzX3NtcCgpKQotCQkJcmV0dXJuIHR5cGU7Ci0JfQotCi0JcmV0dXJuIENPSEVSRU5DWV9GQUJSSUNfVFlQRV9OT05FOworCXJldHVybiB0eXBlOwogfQogCiBpbnQgY29oZXJlbmN5X2F2YWlsYWJsZSh2b2lkKQpAQCAtNDAwLDI3ICsyNjQsMTYgQEAKIAkJIHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zODApCiAJCWFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KG5wKTsKIAorCW9mX25vZGVfcHV0KG5wKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBjb2hlcmVuY3lfbGF0ZV9pbml0KHZvaWQpCiB7Ci0JaW50IHR5cGUgPSBjb2hlcmVuY3lfdHlwZSgpOwotCi0JaWYgKHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX05PTkUpCi0JCXJldHVybiAwOwotCi0JaWYgKHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zNzUpIHsKLQkJdTMyIGRldiwgcmV2OwotCi0JCWlmIChtdmVidV9nZXRfc29jX2lkKCZkZXYsICZyZXYpID09IDAgJiYKLQkJICAgIHJldiA9PSBBUk1BREFfMzc1X1oxX1JFVikKLQkJCWFybWFkYV8zNzVfY29oZXJlbmN5X2luaXRfd2EoKTsKLQl9Ci0KLQlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLAotCQkJICAgICAgJm12ZWJ1X2h3Y2NfbmIpOwotCisJaWYgKGNvaGVyZW5jeV9hdmFpbGFibGUoKSkKKwkJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwbGF0Zm9ybV9idXNfdHlwZSwKKwkJCQkgICAgICAmbXZlYnVfaHdjY19uYik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5X2xsLlMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeV9sbC5TCmluZGV4IGY1ZDg4MWIuLjhiMmZiYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5X2xsLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3lfbGwuUwpAQCAtMjQsNyArMjQsMTAgQEAKICNpbmNsdWRlIDxhc20vY3AxNS5oPgogCiAJLnRleHQKLS8qIFJldHVybnMgdGhlIGNvaGVyZW5jeSBiYXNlIGFkZHJlc3MgaW4gcjEgKHIwIGlzIHVudG91Y2hlZCkgKi8KKy8qCisgKiBSZXR1cm5zIHRoZSBjb2hlcmVuY3kgYmFzZSBhZGRyZXNzIGluIHIxIChyMCBpcyB1bnRvdWNoZWQpLCBvciAwIGlmCisgKiB0aGUgY29oZXJlbmN5IGZhYnJpYyBpcyBub3QgZW5hYmxlZC4KKyAqLwogRU5UUlkobGxfZ2V0X2NvaGVyZW5jeV9iYXNlKQogCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDAKIAl0c3QJcjEsICNDUl9NIEAgQ2hlY2sgTU1VIGJpdCBlbmFibGVkCkBAIC0zMiw4ICszNSwxMyBAQAogCiAJLyoKIAkgKiBNTVUgaXMgZGlzYWJsZWQsIHVzZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY29oZXJlbmN5Ci0JICogYmFzZSBhZGRyZXNzLgorCSAqIGJhc2UgYWRkcmVzcy4gSG93ZXZlciwgaWYgdGhlIGNvaGVyZW5jeSBmYWJyaWMgaXNuJ3QgbWFwcGVkCisJICogKGkuZSBpdHMgdmlydHVhbCBhZGRyZXNzIGlzIHplcm8pLCBpdCBtZWFucyBjb2hlcmVuY3kgaXMKKwkgKiBub3QgZW5hYmxlZCwgc28gd2UgcmV0dXJuIDAuCiAJICovCisJbGRyCXIxLCA9Y29oZXJlbmN5X2Jhc2UKKwljbXAJcjEsICMwCisJYmVxCTJmCiAJYWRyCXIxLCAzZgogCWxkcglyMywgW3IxXQogCWxkcglyMSwgW3IxLCByM10KQEAgLTg1LDYgKzkzLDkgQEAKIAkgKi8KIAltb3YgCXIwLCBscgogCWJsCWxsX2dldF9jb2hlcmVuY3lfYmFzZQorCS8qIEJhaWwgb3V0IGlmIHRoZSBjb2hlcmVuY3kgaXMgbm90IGVuYWJsZWQgKi8KKwljbXAJcjEsICMwCisJcmV0ZXEJcjAKIAlibAlsbF9nZXRfY29oZXJlbmN5X2NwdW1hc2sKIAltb3YgCWxyLCByMAogCWFkZAlyMCwgcjEsICNBUk1BREFfWFBfQ0ZCX0NGR19SRUdfT0ZGU0VUCkBAIC0xMDcsNiArMTE4LDkgQEAKIAkgKi8KIAltb3YgcjAsIGxyCiAJYmwJbGxfZ2V0X2NvaGVyZW5jeV9iYXNlCisJLyogQmFpbCBvdXQgaWYgdGhlIGNvaGVyZW5jeSBpcyBub3QgZW5hYmxlZCAqLworCWNtcAlyMSwgIzAKKwlyZXRlcQlyMAogCWJsCWxsX2dldF9jb2hlcmVuY3lfY3B1bWFzawogCW1vdiBsciwgcjAKIAlhZGQJcjAsIHIxLCAjQVJNQURBX1hQX0NGQl9DVExfUkVHX09GRlNFVApAQCAtMTMxLDYgKzE0NSw5IEBACiAJICovCiAJbW92IAlyMCwgbHIKIAlibAlsbF9nZXRfY29oZXJlbmN5X2Jhc2UKKwkvKiBCYWlsIG91dCBpZiB0aGUgY29oZXJlbmN5IGlzIG5vdCBlbmFibGVkICovCisJY21wCXIxLCAjMAorCXJldGVxCXIwCiAJYmwJbGxfZ2V0X2NvaGVyZW5jeV9jcHVtYXNrCiAJbW92IAlsciwgcjAKIAlhZGQJcjAsIHIxLCAjQVJNQURBX1hQX0NGQl9DVExfUkVHX09GRlNFVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29tbW9uLmgKaW5kZXggM2NjYjQwYy4uM2UwYWNhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvbW1vbi5oCkBAIC0yNSw0ICsyNSw2IEBACiAKIHZvaWQgX19pb21lbSAqbXZlYnVfZ2V0X3NjdV9iYXNlKHZvaWQpOwogCitpbnQgbXZlYnVfcG1faW5pdCh2b2lkICgqYm9hcmRfcG1fZW50ZXIpKHZvaWQgX19pb21lbSAqc2RyYW1fcmVnLCB1MzIgc3JjbWQpKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NwdS1yZXNldC5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jcHUtcmVzZXQuYwppbmRleCA2MGZiNTM3Li40YTJjYWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NwdS1yZXNldC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY3B1LXJlc2V0LmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgotI2luY2x1ZGUgImFybWFkYS0zNzAteHAuaCIKIAogc3RhdGljIHZvaWQgX19pb21lbSAqY3B1X3Jlc2V0X2Jhc2U7CiBzdGF0aWMgc2l6ZV90IGNwdV9yZXNldF9zaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9oZWFkc21wLWE5LlMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2hlYWRzbXAtYTkuUwppbmRleCBiZTUxYzk5Li4wOGQ1ZWQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2hlYWRzbXAtYTkuUworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2hlYWRzbXAtYTkuUwpAQCAtMjIsNSArMjIsNiBAQAogRU5UUlkobXZlYnVfY29ydGV4X2E5X3NlY29uZGFyeV9zdGFydHVwKQogQVJNX0JFOChzZXRlbmQJYmUpCiAJYmwgICAgICB2N19pbnZhbGlkYXRlX2wxCisJYmwJYXJtYWRhXzM4eF9zY3VfcG93ZXJfdXAKIAliCXNlY29uZGFyeV9zdGFydHVwCiBFTkRQUk9DKG12ZWJ1X2NvcnRleF9hOV9zZWNvbmRhcnlfc3RhcnR1cCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcGxhdHNtcC1hOS5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLWE5LmMKaW5kZXggNDdhNzFhOS4uMmVjMWE0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLWE5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLWE5LmMKQEAgLTQzLDIxICs0Myw3MCBAQAogCWVsc2UKIAkJbXZlYnVfcG1zdV9zZXRfY3B1X2Jvb3RfYWRkcihod19jcHUsIG12ZWJ1X2NvcnRleF9hOV9zZWNvbmRhcnlfc3RhcnR1cCk7CiAJc21wX3dtYigpOworCisJLyoKKwkgKiBEb2luZyB0aGlzIGJlZm9yZSBkZWFzc2VydGluZyB0aGUgQ1BVcyBpcyBuZWVkZWQgdG8gd2FrZSB1cCBDUFVzCisJICogaW4gdGhlIG9mZmxpbmUgc3RhdGUgYWZ0ZXIgdXNpbmcgQ1BVIGhvdHBsdWcuCisJICovCisJYXJjaF9zZW5kX3dha2V1cF9pcGlfbWFzayhjcHVtYXNrX29mKGNwdSkpOworCiAJcmV0ID0gbXZlYnVfY3B1X3Jlc2V0X2RlYXNzZXJ0KGh3X2NwdSk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIkNvdWxkIG5vdCBzdGFydCB0aGUgc2Vjb25kYXJ5IENQVTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCWFyY2hfc2VuZF93YWtldXBfaXBpX21hc2soY3B1bWFza19vZihjcHUpKTsKIAogCXJldHVybiAwOwogfQorLyoKKyAqIFdoZW4gYSBDUFUgaXMgYnJvdWdodCBiYWNrIG9ubGluZSwgZWl0aGVyIHRocm91Z2ggQ1BVIGhvdHBsdWcsIG9yCisgKiBiZWNhdXNlIG9mIHRoZSBib290IG9mIGEga2V4ZWMnZWQga2VybmVsLCB0aGUgUE1TVSBjb25maWd1cmF0aW9uCisgKiBmb3IgdGhpcyBDUFUgbWlnaHQgYmUgaW4gdGhlIGRlZXAgaWRsZSBzdGF0ZSwgcHJldmVudGluZyB0aGlzIENQVQorICogZnJvbSByZWNlaXZpbmcgaW50ZXJydXB0cy4gSGVyZSwgd2UgdGhlcmVmb3JlIHRha2Ugb3V0IHRoZSBjdXJyZW50CisgKiBDUFUgZnJvbSB0aGlzIHN0YXRlLCB3aGljaCB3YXMgZW50ZXJlZCBieSBhcm1hZGFfMzh4X2NwdV9kaWUoKQorICogYmVsb3cuCisgKi8KK3N0YXRpYyB2b2lkIGFybWFkYV8zOHhfc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwltdmVidV92N19wbXN1X2lkbGVfZXhpdCgpOworfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgdm9pZCBhcm1hZGFfMzh4X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKgorCSAqIENQVSBob3RwbHVnIGlzIGltcGxlbWVudGVkIGJ5IHB1dHRpbmcgb2ZmbGluZSBDUFVzIGludG8gdGhlCisJICogZGVlcCBpZGxlIHNsZWVwIHN0YXRlLgorCSAqLworCWFybWFkYV8zOHhfZG9fY3B1X3N1c3BlbmQodHJ1ZSk7Cit9CisKKy8qCisgKiBXZSBuZWVkIGEgZHVtbXkgZnVuY3Rpb24sIHNvIHRoYXQgcGxhdGZvcm1fY2FuX2NwdV9ob3RwbHVnKCkga25vd3MKKyAqIHdlIHN1cHBvcnQgQ1BVIGhvdHBsdWcuIEhvd2V2ZXIsIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBuZWVkIHRvIGRvCisgKiBhbnl0aGluZywgYmVjYXVzZSBDUFVzIGdvaW5nIG9mZmxpbmUgY2FuIGVudGVyIHRoZSBkZWVwIGlkbGUgc3RhdGUKKyAqIGJ5IHRoZW1zZWx2ZXMsIHdpdGhvdXQgYW55IGhlbHAgZnJvbSBhIHN0aWxsIGFsaXZlIENQVS4KKyAqLworc3RhdGljIGludCBhcm1hZGFfMzh4X2NwdV9raWxsKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBtdmVidV9jb3J0ZXhfYTlfc21wX29wcyBfX2luaXRkYXRhID0gewogCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSBtdmVidV9jb3J0ZXhfYTlfYm9vdF9zZWNvbmRhcnksCiB9OwogCitzdGF0aWMgc3RydWN0IHNtcF9vcGVyYXRpb25zIGFybWFkYV8zOHhfc21wX29wcyBfX2luaXRkYXRhID0geworCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSBtdmVidV9jb3J0ZXhfYTlfYm9vdF9zZWNvbmRhcnksCisJLnNtcF9zZWNvbmRhcnlfaW5pdCAgICAgPSBhcm1hZGFfMzh4X3NlY29uZGFyeV9pbml0LAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCS5jcHVfZGllCQk9IGFybWFkYV8zOHhfY3B1X2RpZSwKKwkuY3B1X2tpbGwgICAgICAgICAgICAgICA9IGFybWFkYV8zOHhfY3B1X2tpbGwsCisjZW5kaWYKK307CisKIENQVV9NRVRIT0RfT0ZfREVDTEFSRShtdmVidV9hcm1hZGFfMzc1X3NtcCwgIm1hcnZlbGwsYXJtYWRhLTM3NS1zbXAiLAogCQkgICAgICAmbXZlYnVfY29ydGV4X2E5X3NtcF9vcHMpOwogQ1BVX01FVEhPRF9PRl9ERUNMQVJFKG12ZWJ1X2FybWFkYV8zODBfc21wLCAibWFydmVsbCxhcm1hZGEtMzgwLXNtcCIsCi0JCSAgICAgICZtdmVidV9jb3J0ZXhfYTlfc21wX29wcyk7CisJCSAgICAgICZhcm1hZGFfMzh4X3NtcF9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAuYwppbmRleCA4OTVkYzM3Li41OGNjOGMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAuYwpAQCAtMzAsMTAgKzMwLDEyIEBACiAjaW5jbHVkZSAicG1zdS5oIgogI2luY2x1ZGUgImNvaGVyZW5jeS5oIgogCisjZGVmaW5lIEFSTUFEQV9YUF9NQVhfQ1BVUyA0CisKICNkZWZpbmUgQVhQX0JPT1RST01fQkFTRSAweGZmZjAwMDAwCiAjZGVmaW5lIEFYUF9CT09UUk9NX1NJWkUgMHgxMDAwMDAKIAotc3RhdGljIHN0cnVjdCBjbGsgKl9faW5pdCBnZXRfY3B1X2NsayhpbnQgY3B1KQorc3RhdGljIHN0cnVjdCBjbGsgKmdldF9jcHVfY2xrKGludCBjcHUpCiB7CiAJc3RydWN0IGNsayAqY3B1X2NsazsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZfZ2V0X2NwdV9ub2RlKGNwdSwgTlVMTCk7CkBAIC00NiwyOSArNDgsMjggQEAKIAlyZXR1cm4gY3B1X2NsazsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNldF9zZWNvbmRhcnlfY3B1c19jbG9jayh2b2lkKQorc3RhdGljIHZvaWQgc2V0X3NlY29uZGFyeV9jcHVfY2xvY2sodW5zaWduZWQgaW50IGNwdSkKIHsKLQlpbnQgdGhpc2NwdSwgY3B1OworCWludCB0aGlzY3B1OwogCXVuc2lnbmVkIGxvbmcgcmF0ZTsKIAlzdHJ1Y3QgY2xrICpjcHVfY2xrOwogCi0JdGhpc2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl0aGlzY3B1ID0gZ2V0X2NwdSgpOworCiAJY3B1X2NsayA9IGdldF9jcHVfY2xrKHRoaXNjcHUpOwogCWlmICghY3B1X2NsaykKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAljbGtfcHJlcGFyZV9lbmFibGUoY3B1X2Nsayk7CiAJcmF0ZSA9IGNsa19nZXRfcmF0ZShjcHVfY2xrKTsKIAotCS8qIHNldCBhbGwgdGhlIG90aGVyIENQVSBjbGsgdG8gdGhlIHNhbWUgcmF0ZSB0aGFuIHRoZSBib290IENQVSAqLwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJaWYgKGNwdSA9PSB0aGlzY3B1KQotCQkJY29udGludWU7Ci0JCWNwdV9jbGsgPSBnZXRfY3B1X2NsayhjcHUpOwotCQlpZiAoIWNwdV9jbGspCi0JCQlyZXR1cm47Ci0JCWNsa19zZXRfcmF0ZShjcHVfY2xrLCByYXRlKTsKLQkJY2xrX3ByZXBhcmVfZW5hYmxlKGNwdV9jbGspOwotCX0KKwljcHVfY2xrID0gZ2V0X2NwdV9jbGsoY3B1KTsKKwlpZiAoIWNwdV9jbGspCisJCWdvdG8gb3V0OworCWNsa19zZXRfcmF0ZShjcHVfY2xrLCByYXRlKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoY3B1X2Nsayk7CisKK291dDoKKwlwdXRfY3B1KCk7CiB9CiAKIHN0YXRpYyBpbnQgYXJtYWRhX3hwX2Jvb3Rfc2Vjb25kYXJ5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKQEAgLTc4LDYgKzc5LDcgQEAKIAlwcl9pbmZvKCJCb290aW5nIENQVSAlZFxuIiwgY3B1KTsKIAogCWh3X2NwdSA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCXNldF9zZWNvbmRhcnlfY3B1X2Nsb2NrKGh3X2NwdSk7CiAJbXZlYnVfcG1zdV9zZXRfY3B1X2Jvb3RfYWRkcihod19jcHUsIGFybWFkYV94cF9zZWNvbmRhcnlfc3RhcnR1cCk7CiAKIAkvKgpAQCAtMTI2LDcgKzEyOCw2IEBACiAJc3RydWN0IHJlc291cmNlIHJlczsKIAlpbnQgZXJyOwogCi0Jc2V0X3NlY29uZGFyeV9jcHVzX2Nsb2NrKCk7CiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAJc2V0X2NwdV9jb2hlcmVudCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3BtLWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BtLWJvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmZDRhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG0tYm9hcmQuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIEJvYXJkLWxldmVsIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1hcnZlbGwKKyAqCisgKiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworI2RlZmluZSBBUk1BREFfWFBfR1BfUElDX05SX0dQSU9TIDMKKworc3RhdGljIHZvaWQgX19pb21lbSAqZ3Bpb19jdHJsOworc3RhdGljIGludCBwaWNfZ3Bpb3NbQVJNQURBX1hQX0dQX1BJQ19OUl9HUElPU107CitzdGF0aWMgaW50IHBpY19yYXdfZ3Bpb3NbQVJNQURBX1hQX0dQX1BJQ19OUl9HUElPU107CisKK3N0YXRpYyB2b2lkIG12ZWJ1X2FybWFkYV94cF9ncF9wbV9lbnRlcih2b2lkIF9faW9tZW0gKnNkcmFtX3JlZywgdTMyIHNyY21kKQoreworCXUzMiByZWcsIGFja2NtZDsKKwlpbnQgaTsKKworCS8qIFB1dCAwMDEgYXMgdmFsdWUgb24gdGhlIEdQSU9zICovCisJcmVnID0gcmVhZGwoZ3Bpb19jdHJsKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJNQURBX1hQX0dQX1BJQ19OUl9HUElPUzsgaSsrKQorCQlyZWcgJj0gfkJJVChwaWNfcmF3X2dwaW9zW2ldKTsKKwlyZWcgfD0gQklUKHBpY19yYXdfZ3Bpb3NbMF0pOworCXdyaXRlbChyZWcsIGdwaW9fY3RybCk7CisKKwkvKiBQcmVwYXJlIHdyaXRpbmcgMTExIHRvIHRoZSBHUElPcyAqLworCWFja2NtZCA9IHJlYWRsKGdwaW9fY3RybCk7CisJZm9yIChpID0gMDsgaSA8IEFSTUFEQV9YUF9HUF9QSUNfTlJfR1BJT1M7IGkrKykKKwkJYWNrY21kIHw9IEJJVChwaWNfcmF3X2dwaW9zW2ldKTsKKworCS8qCisJICogV2FpdCBhIHdoaWxlLCB0aGUgUElDIG5lZWRzIHF1aXRlIGEgYml0IG9mIHRpbWUgYmV0d2VlbiB0aGUKKwkgKiB0d28gR1BJTyBjb21tYW5kcy4KKwkgKi8KKwltZGVsYXkoMzAwMCk7CisKKwlhc20gdm9sYXRpbGUgKAorCQkvKiBBbGlnbiB0byBhIGNhY2hlIGxpbmUgKi8KKwkJIi5iYWxpZ24gMzJcblx0IgorCisJCS8qIEVudGVyIHNlbGYgcmVmcmVzaCAqLworCQkic3RyICVbc3JjbWRdLCBbJVtzZHJhbV9yZWddXVxuXHQiCisKKwkJLyoKKwkJICogV2FpdCAxMDAgY3ljbGVzIGZvciBERFIgdG8gZW50ZXIgc2VsZiByZWZyZXNoLCBieQorCQkgKiBkb2luZyA1MCB0aW1lcyB0d28gaW5zdHJ1Y3Rpb25zLgorCQkgKi8KKwkJIm1vdiByMSwgIzUwXG5cdCIKKwkJIjE6IHN1YnMgcjEsIHIxLCAjMVxuXHQiCisJCSJibmUgMWJcblx0IgorCisJCS8qIElzc3VlIHRoZSBjb21tYW5kIEFDSyAqLworCQkic3RyICVbYWNrY21kXSwgWyVbZ3Bpb19jdHJsXV1cblx0IgorCisJCS8qIFRyYXAgdGhlIHByb2Nlc3NvciAqLworCQkiYiAuXG5cdCIKKwkJOiA6IFtzcmNtZF0gInIiIChzcmNtZCksIFtzZHJhbV9yZWddICJyIiAoc2RyYW1fcmVnKSwKKwkJICBbYWNrY21kXSAiciIgKGFja2NtZCksIFtncGlvX2N0cmxdICJyIiAoZ3Bpb19jdHJsKSA6ICJyMSIpOworfQorCitzdGF0aWMgaW50IG12ZWJ1X2FybWFkYV94cF9ncF9wbV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmdwaW9fY3RybF9ucDsKKwlpbnQgcmV0ID0gMCwgaTsKKworCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJtYXJ2ZWxsLGF4cC1ncCIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInBtX3BpYyIpOworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJZm9yIChpID0gMDsgaSA8IEFSTUFEQV9YUF9HUF9QSUNfTlJfR1BJT1M7IGkrKykgeworCQljaGFyICpuYW1lOworCQlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7CisKKwkJcGljX2dwaW9zW2ldID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJjdHJsLWdwaW9zIiwgaSk7CisJCWlmIChwaWNfZ3Bpb3NbaV0gPCAwKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBvdXQ7CisJCX0KKworCQluYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJwaWMtcGluJWQiLCBpKTsKKwkJaWYgKCFuYW1lKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBncGlvX3JlcXVlc3QocGljX2dwaW9zW2ldLCBuYW1lKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWtmcmVlKG5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGljX2dwaW9zW2ldLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWdwaW9fZnJlZShwaWNfZ3Bpb3NbaV0pOworCQkJa2ZyZWUobmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCA9IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9maXhlZF9hcmdzKG5wLCAiY3RybC1ncGlvcyIsIDIsCisJCQkJCQkgICAgICAgaSwgJmFyZ3MpOworCQlpZiAocmV0IDwgMCkgeworCQkJZ3Bpb19mcmVlKHBpY19ncGlvc1tpXSk7CisJCQlrZnJlZShuYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZ3Bpb19jdHJsX25wID0gYXJncy5ucDsKKwkJcGljX3Jhd19ncGlvc1tpXSA9IGFyZ3MuYXJnc1swXTsKKwl9CisKKwlncGlvX2N0cmwgPSBvZl9pb21hcChncGlvX2N0cmxfbnAsIDApOworCWlmICghZ3Bpb19jdHJsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW12ZWJ1X3BtX2luaXQobXZlYnVfYXJtYWRhX3hwX2dwX3BtX2VudGVyKTsKKworb3V0OgorCW9mX25vZGVfcHV0KG5wKTsKKwlyZXR1cm4gcmV0OworfQorCitsYXRlX2luaXRjYWxsKG12ZWJ1X2FybWFkYV94cF9ncF9wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcG0uYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTczYThmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbS5jCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydC4gQ3VycmVudGx5IHN1cHBvcnRpbmcgQXJtYWRhIFhQIG9ubHkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1hcnZlbGwKKyAqCisgKiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1X3BtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9vdXRlcmNhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KKworI2luY2x1ZGUgImNvaGVyZW5jeS5oIgorI2luY2x1ZGUgInBtc3UuaCIKKworI2RlZmluZSBTRFJBTV9DT05GSUdfT0ZGUyAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgU0RSQU1fQ09ORklHX1NSX01PREVfQklUICAgICAgICAgIEJJVCgyNCkKKyNkZWZpbmUgU0RSQU1fT1BFUkFUSU9OX09GRlMgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lICBTRFJBTV9PUEVSQVRJT05fU0VMRl9SRUZSRVNIICAgICAgMHg3CisjZGVmaW5lIFNEUkFNX0RMQl9FVklDVElPTl9PRkZTICAgICAgICAgICAgMHgzMGMKKyNkZWZpbmUgIFNEUkFNX0RMQl9FVklDVElPTl9USFJFU0hPTERfTUFTSyAweGZmCisKK3N0YXRpYyB2b2lkICgqbXZlYnVfYm9hcmRfcG1fZW50ZXIpKHZvaWQgX19pb21lbSAqc2RyYW1fcmVnLCB1MzIgc3JjbWQpOworc3RhdGljIHZvaWQgX19pb21lbSAqc2RyYW1fY3RybDsKKworc3RhdGljIGludCBtdmVidV9wbV9wb3dlcmRvd24odW5zaWduZWQgbG9uZyBkYXRhKQoreworCXUzMiByZWcsIHNyY21kOworCisJZmx1c2hfY2FjaGVfYWxsKCk7CisJb3V0ZXJfZmx1c2hfYWxsKCk7CisKKwkvKgorCSAqIElzc3VlIGEgRGF0YSBTeW5jaHJvbml6YXRpb24gQmFycmllciBpbnN0cnVjdGlvbiB0byBlbnN1cmUKKwkgKiB0aGF0IGFsbCBzdGF0ZSBzYXZpbmcgaGFzIGJlZW4gY29tcGxldGVkLgorCSAqLworCWRzYigpOworCisJLyogRmx1c2ggdGhlIERMQiBhbmQgd2FpdCB+NyB1c2VjICovCisJcmVnID0gcmVhZGwoc2RyYW1fY3RybCArIFNEUkFNX0RMQl9FVklDVElPTl9PRkZTKTsKKwlyZWcgJj0gflNEUkFNX0RMQl9FVklDVElPTl9USFJFU0hPTERfTUFTSzsKKwl3cml0ZWwocmVnLCBzZHJhbV9jdHJsICsgU0RSQU1fRExCX0VWSUNUSU9OX09GRlMpOworCisJdWRlbGF5KDcpOworCisJLyogU2V0IERSQU0gaW4gYmF0dGVyeSBiYWNrdXAgbW9kZSAqLworCXJlZyA9IHJlYWRsKHNkcmFtX2N0cmwgKyBTRFJBTV9DT05GSUdfT0ZGUyk7CisJcmVnICY9IH5TRFJBTV9DT05GSUdfU1JfTU9ERV9CSVQ7CisJd3JpdGVsKHJlZywgc2RyYW1fY3RybCArIFNEUkFNX0NPTkZJR19PRkZTKTsKKworCS8qIFByZXBhcmUgdG8gZ28gdG8gc2VsZi1yZWZyZXNoICovCisKKwlzcmNtZCA9IHJlYWRsKHNkcmFtX2N0cmwgKyBTRFJBTV9PUEVSQVRJT05fT0ZGUyk7CisJc3JjbWQgJj0gfjB4MUY7CisJc3JjbWQgfD0gU0RSQU1fT1BFUkFUSU9OX1NFTEZfUkVGUkVTSDsKKworCW12ZWJ1X2JvYXJkX3BtX2VudGVyKHNkcmFtX2N0cmwgKyBTRFJBTV9PUEVSQVRJT05fT0ZGUywgc3JjbWQpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQk9PVF9JTkZPX0FERFIgICAgICAweDMwMDAKKyNkZWZpbmUgQk9PVF9NQUdJQ19XT1JECSAgICAweGRlYWRiMDAyCisjZGVmaW5lIEJPT1RfTUFHSUNfTElTVF9FTkQgMHhmZmZmZmZmZgorCisvKgorICogVGhvc2UgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBiZWZvcmUgc3dpdGNoaW5nIHRoZSBpbnRlcm5hbCByZWdpc3RlcgorICogYmFzZSwgd2hpY2ggaXMgd2h5IHdlIGhhcmRjb2RlIHRoZSAweGQwMDAwMDAwIGJhc2UgYWRkcmVzcywgdGhlIG9uZQorICogdXNlZCBieSB0aGUgU29DIG91dCBvZiByZXNldC4KKyAqLworI2RlZmluZSBNQlVTX1dJTkRPV18xMl9DVFJMICAgICAgIDB4ZDAwMjAwYjAKKyNkZWZpbmUgTUJVU19JTlRFUk5BTF9SRUdfQUREUkVTUyAweGQwMDIwMDgwCisKKyNkZWZpbmUgU0RSQU1fV0lOX0JBU0VfUkVHKHgpCSgweDIwMTgwICsgKDB4OCp4KSkKKyNkZWZpbmUgU0RSQU1fV0lOX0NUUkxfUkVHKHgpCSgweDIwMTg0ICsgKDB4OCp4KSkKKworc3RhdGljIHBoeXNfYWRkcl90IG12ZWJ1X2ludGVybmFsX3JlZ19iYXNlKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlfX2JlMzIgaW5fYWRkclsyXTsKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImludGVybmFsLXJlZ3MiKTsKKwlCVUdfT04oIW5wKTsKKworCS8qCisJICogQXNrIHRoZSBEVCB3aGF0IGlzIHRoZSBpbnRlcm5hbCByZWdpc3RlciBhZGRyZXNzIG9uIHRoaXMKKwkgKiBwbGF0Zm9ybS4gSW4gdGhlIG12ZWJ1LW1idXMgRFQgYmluZGluZywgMHhmMDAxMDAwMAorCSAqIGNvcnJlc3BvbmRzIHRvIHRoZSBpbnRlcm5hbCByZWdpc3RlciB3aW5kb3cuCisJICovCisJaW5fYWRkclswXSA9IGNwdV90b19iZTMyKDB4ZjAwMTAwMDApOworCWluX2FkZHJbMV0gPSAweDA7CisKKwlyZXR1cm4gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIGluX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBtdmVidV9wbV9zdG9yZV9ib290aW5mbyh2b2lkKQoreworCXUzMiAqc3RvcmVfYWRkcjsKKwlwaHlzX2FkZHJfdCByZXN1bWVfcGM7CisKKwlzdG9yZV9hZGRyID0gcGh5c190b192aXJ0KEJPT1RfSU5GT19BRERSKTsKKwlyZXN1bWVfcGMgPSB2aXJ0X3RvX3BoeXMoYXJtYWRhXzM3MF94cF9jcHVfcmVzdW1lKTsKKworCS8qCisJICogVGhlIGJvb3Rsb2FkZXIgZXhwZWN0cyB0aGUgZmlyc3QgdHdvIHdvcmRzIHRvIGJlIGEgbWFnaWMKKwkgKiB2YWx1ZSAoQk9PVF9NQUdJQ19XT1JEKSwgZm9sbG93ZWQgYnkgdGhlIGFkZHJlc3Mgb2YgdGhlCisJICogcmVzdW1lIGNvZGUgdG8ganVtcCB0by4gVGhlbiwgaXQgZXhwZWN0cyBhIHNlcXVlbmNlIG9mCisJICogKGFkZHJlc3MsIHZhbHVlKSBwYWlycywgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUKKwkgKiB2YWx1ZSBvZiBjZXJ0YWluIHJlZ2lzdGVycy4gVGhpcyBzZXF1ZW5jZSBtdXN0IGVuZCB3aXRoIHRoZQorCSAqIEJPT1RfTUFHSUNfTElTVF9FTkQgbWFnaWMgdmFsdWUuCisJICovCisKKwl3cml0ZWwoQk9PVF9NQUdJQ19XT1JELCBzdG9yZV9hZGRyKyspOworCXdyaXRlbChyZXN1bWVfcGMsIHN0b3JlX2FkZHIrKyk7CisKKwkvKgorCSAqIFNvbWUgcGxhdGZvcm1zIHJlbWFwIHRoZWlyIGludGVybmFsIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcworCSAqIHRvIDB4ZjEwMDAwMDAuIEhvd2V2ZXIsIG91dCBvZiByZXNldCwgd2luZG93IDEyIHN0YXJ0cyBhdAorCSAqIDB4ZjAwMDAwMDAgYW5kIGVuZHMgYXQgMHhmN2ZmZmZmZiwgd2hpY2ggd291bGQgb3ZlcmxhcCB3aXRoCisJICogdGhlIGludGVybmFsIHJlZ2lzdGVycy4gVGhlcmVmb3JlLCBkaXNhYmxlIHdpbmRvdyAxMi4KKwkgKi8KKwl3cml0ZWwoTUJVU19XSU5ET1dfMTJfQ1RSTCwgc3RvcmVfYWRkcisrKTsKKwl3cml0ZWwoMHgwLCBzdG9yZV9hZGRyKyspOworCisJLyoKKwkgKiBTZXQgdGhlIGludGVybmFsIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyB0byB0aGUgdmFsdWUKKwkgKiBleHBlY3RlZCBieSBMaW51eCwgYXMgcmVhZCBmcm9tIHRoZSBEZXZpY2UgVHJlZS4KKwkgKi8KKwl3cml0ZWwoTUJVU19JTlRFUk5BTF9SRUdfQUREUkVTUywgc3RvcmVfYWRkcisrKTsKKwl3cml0ZWwobXZlYnVfaW50ZXJuYWxfcmVnX2Jhc2UoKSwgc3RvcmVfYWRkcisrKTsKKworCS8qCisJICogQXNrIHRoZSBtdmVidS1tYnVzIGRyaXZlciB0byBzdG9yZSB0aGUgU0RSQU0gd2luZG93CisJICogY29uZmlndXJhdGlvbiwgd2hpY2ggaGFzIHRvIGJlIHJlc3RvcmVkIGJ5IHRoZSBib290bG9hZGVyCisJICogYmVmb3JlIHJlLWVudGVyaW5nIHRoZSBrZXJuZWwgb24gcmVzdW1lLgorCSAqLworCXN0b3JlX2FkZHIgKz0gbXZlYnVfbWJ1c19zYXZlX2NwdV90YXJnZXQoc3RvcmVfYWRkcik7CisKKwl3cml0ZWwoQk9PVF9NQUdJQ19MSVNUX0VORCwgc3RvcmVfYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgbXZlYnVfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX01FTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcHVfcG1fZW50ZXIoKTsKKworCW12ZWJ1X3BtX3N0b3JlX2Jvb3RpbmZvKCk7CisJY3B1X3N1c3BlbmQoMCwgbXZlYnVfcG1fcG93ZXJkb3duKTsKKworCW91dGVyX3Jlc3VtZSgpOworCisJbXZlYnVfdjdfcG1zdV9pZGxlX2V4aXQoKTsKKworCXNldF9jcHVfY29oZXJlbnQoKTsKKworCWNwdV9wbV9leGl0KCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBtdmVidV9wbV9vcHMgPSB7CisJLmVudGVyID0gbXZlYnVfcG1fZW50ZXIsCisJLnZhbGlkID0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKK307CisKK2ludCBtdmVidV9wbV9pbml0KHZvaWQgKCpib2FyZF9wbV9lbnRlcikodm9pZCBfX2lvbWVtICpzZHJhbV9yZWcsIHUzMiBzcmNtZCkpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIm1hcnZlbGwsYXJtYWRheHAiKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCQkJICAgICAibWFydmVsbCxhcm1hZGEteHAtc2RyYW0tY29udHJvbGxlciIpOworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpKSB7CisJCW9mX25vZGVfcHV0KG5wKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpLAorCQkJCW5wLT5mdWxsX25hbWUpKSB7CisJCW9mX25vZGVfcHV0KG5wKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzZHJhbV9jdHJsID0gaW9yZW1hcChyZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJnJlcykpOworCWlmICghc2RyYW1fY3RybCkgeworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlvZl9ub2RlX3B1dChucCk7CisKKwltdmVidV9ib2FyZF9wbV9lbnRlciA9IGJvYXJkX3BtX2VudGVyOworCisJc3VzcGVuZF9zZXRfb3BzKCZtdmVidV9wbV9vcHMpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3UuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5jCmluZGV4IGJiZDg2NjQuLmQ4YWI2MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5jCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVfcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLWR0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImFybWFkYS0zNzAteHAuaCIKIAogCiAjZGVmaW5lIFBNU1VfQkFTRV9PRkZTRVQgICAgMHgxMDAKQEAgLTMxMiw3ICszMTIsNyBAQAogCXJldHVybiBjcHVfc3VzcGVuZChkZWVwaWRsZSwgYXJtYWRhXzM3MF94cF9wbXN1X2lkbGVfZW50ZXIpOwogfQogCi1zdGF0aWMgaW50IGFybWFkYV8zOHhfZG9fY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBkZWVwaWRsZSkKK2ludCBhcm1hZGFfMzh4X2RvX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgZGVlcGlkbGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKQEAgLTU3Miw2ICs1NzIsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IGNwdWZyZXFfZHRfcGxhdGZvcm1fZGF0YSBjcHVmcmVxX2R0X3BkID0geworCS5pbmRlcGVuZGVudF9jbG9ja3MgPSB0cnVlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgYXJtYWRhX3hwX3Btc3VfY3B1ZnJlcV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKQEAgLTY0NCw3ICs2NDgsOCBAQAogCQl9CiAJfQogCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiY3B1ZnJlcS1kdCIsIC0xLCBOVUxMLCAwKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAiY3B1ZnJlcS1kdCIsIC0xLAorCQkJCSAgICAgICZjcHVmcmVxX2R0X3BkLCBzaXplb2YoY3B1ZnJlcV9kdF9wZCkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3UuaCBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5oCmluZGV4IDZiNThjMWYuLmVhNzkyNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5oCkBAIC0xNyw1ICsxNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNfYWRkcl90IHJlc3VtZV9hZGRyX3JlZyk7CiAKIHZvaWQgbXZlYnVfdjdfcG1zdV9pZGxlX2V4aXQodm9pZCk7Cit2b2lkIGFybWFkYV8zNzBfeHBfY3B1X3Jlc3VtZSh2b2lkKTsKIAoraW50IGFybWFkYV8zNzBfeHBfcG1zdV9pZGxlX2VudGVyKHVuc2lnbmVkIGxvbmcgZGVlcGlkbGUpOworaW50IGFybWFkYV8zOHhfZG9fY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBkZWVwaWRsZSk7CiAjZW5kaWYJLyogX19NQUNIXzM3MF9YUF9QTVNVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdV9sbC5TIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1X2xsLlMKaW5kZXggYTk0NTc1Ni4uODg2NTEyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1X2xsLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1X2xsLlMKQEAgLTEyLDEyICsxMiwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAKKworRU5UUlkoYXJtYWRhXzM4eF9zY3VfcG93ZXJfdXApCisJbXJjICAgICBwMTUsIDQsIHIxLCBjMTUsIGMwCUAgZ2V0IFNDVSBiYXNlIGFkZHJlc3MKKwlvcnIJcjEsIHIxLCAjMHg4CQlAIFNDVSBDUFUgUG93ZXIgU3RhdHVzIFJlZ2lzdGVyCisJbXJjCTE1LCAwLCByMCwgY3IwLCBjcjAsIDUJQCBnZXQgdGhlIENQVSBJRAorCWFuZAlyMCwgcjAsICMxNQorCWFkZAlyMSwgcjEsIHIwCisJbW92CXIwLCAjMHgwCisJc3RyYglyMCwgW3IxXQkJQCBzd2l0Y2ggU0NVIHBvd2VyIHN0YXRlIHRvIE5vcm1hbCBtb2RlCisJcmV0CWxyCitFTkRQUk9DKGFybWFkYV8zOHhfc2N1X3Bvd2VyX3VwKQorCiAvKgogICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdGhyb3VnaCB3aGljaCBDUFVzIGV4aXRpbmcgY3B1aWRsZSBkZWVwCiAgKiBpZGxlIHN0YXRlIGFyZSBnb2luZy4KICAqLwogRU5UUlkoYXJtYWRhXzM3MF94cF9jcHVfcmVzdW1lKQogQVJNX0JFOChzZXRlbmQJYmUgKQkJCUAgZ28gQkU4IGlmIGVudGVyZWQgTEUKKwkvKgorCSAqIERpc2FibGUgdGhlIE1NVSB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBlbmFibGVkIGluIEJvb3RST00gaWYKKwkgKiB0aGlzIGNvZGUgaXMgdXNlZCBpbiB0aGUgcmVzdW1lIHBhdGggb2YgYSBzdXNwZW5kL3Jlc3VtZQorCSAqIGN5Y2xlLgorCSAqLworCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDAKKwliaWMJcjEsICMxCisJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAogCWJsCWxsX2FkZF9jcHVfdG9fc21wX2dyb3VwCiAJYmwJbGxfZW5hYmxlX2NvaGVyZW5jeQogCWIJY3B1X3Jlc3VtZQpAQCAtMjcsMTMgKzQ3LDcgQEAKIAkvKiBkbyB3ZSBuZWVkIGl0IGZvciBBcm1hZGEgMzh4Ki8KIEFSTV9CRTgoc2V0ZW5kCWJlICkJCQlAIGdvIEJFOCBpZiBlbnRlcmVkIExFCiAJYmwJdjdfaW52YWxpZGF0ZV9sMQotCW1yYyAgICAgcDE1LCA0LCByMSwgYzE1LCBjMAlAIGdldCBTQ1UgYmFzZSBhZGRyZXNzCi0Jb3JyCXIxLCByMSwgIzB4OAkJQCBTQ1UgQ1BVIFBvd2VyIFN0YXR1cyBSZWdpc3RlcgotCW1yYwkxNSwgMCwgcjAsIGNyMCwgY3IwLCA1CUAgZ2V0IHRoZSBDUFUgSUQKLQlhbmQJcjAsIHIwLCAjMTUKLQlhZGQJcjEsIHIxLCByMAotCW1vdglyMCwgIzB4MAotCXN0cmIJcjAsIFtyMV0JCUAgc3dpdGNoIFNDVSBwb3dlciBzdGF0ZSB0byBOb3JtYWwgbW9kZQorCWJsCWFybWFkYV8zOHhfc2N1X3Bvd2VyX3VwCiAJYgljcHVfcmVzdW1lCiBFTkRQUk9DKGFybWFkYV8zOHhfY3B1X3Jlc3VtZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYwppbmRleCA5MTE2Y2E0Li45YmRhNDZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYworKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYwpAQCAtMTQ0LDYgKzE0NCw3IEBACiBkZXZpY2VfaW5pdGNhbGwoY3B1ODgxNV9tbWNzZF9pbml0KTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjcHU4ODE1X2JvYXJkX2NvbXBhdFtdID0geworCSJzdCxub21hZGlrLW5oay0xNSIsCiAJImNhbGFvc3lzdGVtcyx1c2Itczg4MTUiLAogCU5VTEwsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IGY0ZDA2YWUuLjZlMjQ5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTc5LDcgKzc5LDkgQEAKIAlzZWxlY3QgQ0xLU1JDX01NSU8KIAlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAogCXNlbGVjdCBNQUNIX09NQVBfR0VORVJJQworCXNlbGVjdCBNRU1PUlkKIAlzZWxlY3QgT01BUF9ETV9USU1FUgorCXNlbGVjdCBPTUFQX0dQTUMKIAlzZWxlY3QgUElOQ1RSTAogCXNlbGVjdCBTT0NfQlVTCiAJc2VsZWN0IFRJX1BSSVZfRURNQQpAQCAtMjM1LDEyICsyMzcsNiBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKLWNvbmZpZyBNQUNIX09NQVBfMzQzMFNEUAotCWJvb2wgIk9NQVAgMzQzMCBTRFAgYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzCi0JZGVmYXVsdCB5Ci0Jc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKLQogY29uZmlnIE1BQ0hfTk9LSUFfTjgxMAogICAgICAgIGJvb2wKIApAQCAtMjgyLDE2ICsyNzgsNiBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ1VTCiAKLWNvbmZpZyBNQUNIX1RJODE2OEVWTQotCWJvb2wgIlRJODE2OCBFdmFsdWF0aW9uIE1vZHVsZSIKLQlkZXBlbmRzIG9uIFNPQ19USTgxWFgKLQlkZWZhdWx0IHkKLQotY29uZmlnIE1BQ0hfVEk4MTQ4RVZNCi0JYm9vbCAiVEk4MTQ4IEV2YWx1YXRpb24gTW9kdWxlIgotCWRlcGVuZHMgb24gU09DX1RJODFYWAotCWRlZmF1bHQgeQotCiBjb25maWcgT01BUDNfRU1VCiAJYm9vbCAiT01BUDMgZGVidWdnaW5nIHBlcmlwaGVyYWxzIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKaW5kZXggZDllOTQxMi4uMDhjYzk0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCS1JJChzcmN0cmVlKS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZQogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpZC5vIGlvLm8gY29udHJvbC5vIG11eC5vIGRldmljZXMubyBmYi5vIHNlcmlhbC5vIGdwbWMubyB0aW1lci5vIHBtLm8gXAorb2JqLXkgOj0gaWQubyBpby5vIGNvbnRyb2wubyBtdXgubyBkZXZpY2VzLm8gZmIubyBzZXJpYWwubyB0aW1lci5vIHBtLm8gXAogCSBjb21tb24ubyBncGlvLm8gZG1hLm8gd2RfdGltZXIubyBkaXNwbGF5Lm8gaTJjLm8gaGRxMXcubyBvbWFwX2h3bW9kLm8gXAogCSBvbWFwX2RldmljZS5vIHNyYW0ubyBkcm0ubwogCkBAIC0xMTMsNyArMTEzLDcgQEAKIG9iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gcHJtMnh4eF8zeHh4Lm8gcHJtMnh4eC5vIGNtMnh4eC5vCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHBybTJ4eHhfM3h4eC5vIHBybTN4eHgubyBjbTN4eHgubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSB2YzN4eHhfZGF0YS5vIHZwM3h4eF9kYXRhLm8KLW9tYXAtcHJjbS00LTUtY29tbW9uCQkJPSAgY21pbnN0NDR4eC5vIGNtNDR4eC5vIHBybTQ0eHgubyBcCitvbWFwLXByY20tNC01LWNvbW1vbgkJCT0gIGNtaW5zdDQ0eHgubyBwcm00NHh4Lm8gXAogCQkJCQkgICBwcmNtX21wdTQ0eHgubyBwcm1pbnN0NDR4eC5vIFwKIAkJCQkJICAgdmM0NHh4X2RhdGEubyB2cDQ0eHhfZGF0YS5vCiBvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9ICQob21hcC1wcmNtLTQtNS1jb21tb24pCkBAIC0yNDYsNyArMjQ2LDYgQEAKIG9iai0kKENPTkZJR19NQUNIX09NQVAzX1RPUlBFRE8pICAgICAgICArPSBib2FyZC1vbWFwM2xvZ2ljLm8KIG9iai0kKENPTkZJR19NQUNIX09WRVJPKQkJKz0gYm9hcmQtb3Zlcm8ubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSkJKz0gYm9hcmQtb21hcDNwYW5kb3JhLm8KLW9iai0kKENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCkJCSs9IGJvYXJkLTM0MzBzZHAubwogb2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfTjhYMCkJCSs9IGJvYXJkLW44eDAubwogb2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfUlg1MSkJCSs9IGJvYXJkLXJ4NTEubyBzZHJhbS1ub2tpYS5vCiBvYmotJChDT05GSUdfTUFDSF9OT0tJQV9SWDUxKQkJKz0gYm9hcmQtcng1MS1wZXJpcGhlcmFscy5vCkBAIC0yNjAsOCArMjU5LDYgQEAKIG9iai0kKENPTkZJR19NQUNIX0NSQU5FQk9BUkQpCQkrPSBib2FyZC1hbTM1MTdjcmFuZS5vCiAKIG9iai0kKENPTkZJR19NQUNIX1NCQzM1MzApCQkrPSBib2FyZC1vbWFwM3N0YWxrZXIubwotb2JqLSQoQ09ORklHX01BQ0hfVEk4MTY4RVZNKQkJKz0gYm9hcmQtdGk4MTY4ZXZtLm8KLW9iai0kKENPTkZJR19NQUNIX1RJODE0OEVWTSkJCSs9IGJvYXJkLXRpODE2OGV2bS5vCiAKICMgUGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXQgY29kZQogCkBAIC0yODQsOSArMjgxLDYgQEAKIG5hbmQtJChDT05GSUdfTVREX05BTkRfT01BUDIpCQk6PSBncG1jLW5hbmQubwogb2JqLXkJCQkJCSs9ICQobmFuZC1tKSAkKG5hbmQteSkKIAotc21jOTF4LSQoQ09ORklHX1NNQzkxWCkJCQk6PSBncG1jLXNtYzkxeC5vCi1vYmoteQkJCQkJKz0gJChzbWM5MXgtbSkgJChzbWM5MXgteSkKLQogc21zYzkxMXgtJChDT05GSUdfU01TQzkxMVgpCQk6PSBncG1jLXNtc2M5MTF4Lm8KIG9iai15CQkJCQkrPSAkKHNtc2M5MTF4LW0pICQoc21zYzkxMXgteSkKIGlmbmVxICgkKENPTkZJR19IV1NQSU5MT0NLX09NQVApLCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYW0zM3h4LXJlc3RhcnQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYW0zM3h4LXJlc3RhcnQuYwppbmRleCBjODhkOGRmNy4uNWJhY2U2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9hbTMzeHgtcmVzdGFydC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYW0zM3h4LXJlc3RhcnQuYwpAQCAtOSw4ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgInBybS1yZWdiaXRzLTMzeHguaCIKLSNpbmNsdWRlICJwcm0zM3h4LmgiCisjaW5jbHVkZSAicHJtLmgiCiAKIC8qKgogICogYW0zeHhfcmVzdGFydCAtIHRyaWdnZXIgYSBzb2Z0d2FyZSByZXN0YXJ0IG9mIHRoZSBTb0MKQEAgLTI0LDEyICsyMyw1IEBACiB7CiAJLyogVE9ETzogSGFuZGxlIG1vZGUgYW5kIGNtZCBpZiBuZWNlc3NhcnkgKi8KIAotCWFtMzN4eF9wcm1fcm13X3JlZ19iaXRzKEFNMzNYWF9SU1RfR0xPQkFMX1dBUk1fU1dfTUFTSywKLQkJCQlBTTMzWFhfUlNUX0dMT0JBTF9XQVJNX1NXX01BU0ssCi0JCQkJQU0zM1hYX1BSTV9ERVZJQ0VfTU9ELAotCQkJCUFNMzNYWF9QUk1fUlNUQ1RSTF9PRkZTRVQpOwotCi0JLyogT0NQIGJhcnJpZXIgKi8KLQkodm9pZClhbTMzeHhfcHJtX3JlYWRfcmVnKEFNMzNYWF9QUk1fREVWSUNFX01PRCwKLQkJCQkgIEFNMzNYWF9QUk1fUlNUQ1RSTF9PRkZTRVQpOworCW9tYXBfcHJtX3Jlc2V0X3N5c3RlbSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIxYTMwNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworKysgL2Rldi9udWxsCkBAIC0xLDYzMiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMKLSAqCi0gKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCi0gKgotICogSW5pdGlhbCBjb2RlOiBTeWVkIE1vaGFtbWVkIEtoYXNpbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc3BpLW9tYXAyLW1jc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9vbWFwLXR3bDQwMzAuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvcGh5Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgPGxpbnV4L29tYXAtZG1hLmg+Ci0jaW5jbHVkZSA8dmlkZW8vb21hcGRzcy5oPgotI2luY2x1ZGUgPHZpZGVvL29tYXAtcGFuZWwtZGF0YS5oPgotCi0jaW5jbHVkZSAiZ3BtYy5oIgotI2luY2x1ZGUgImdwbWMtc21jOTF4LmgiCi0KLSNpbmNsdWRlICJzb2MuaCIKLSNpbmNsdWRlICJib2FyZC1mbGFzaC5oIgotI2luY2x1ZGUgIm11eC5oIgotI2luY2x1ZGUgInNkcmFtLXFpbW9uZGEtaHliMThtNTEyMTYwYWYtNi5oIgotI2luY2x1ZGUgImhzbW1jLmgiCi0jaW5jbHVkZSAicG0uaCIKLSNpbmNsdWRlICJjb250cm9sLmgiCi0jaW5jbHVkZSAiY29tbW9uLWJvYXJkLWRldmljZXMuaCIKLQotI2RlZmluZSBDT05GSUdfRElTQUJMRV9IRkNMSyAxCi0KLSNkZWZpbmUgU0RQMzQzMF9UU19HUElPX0lSUV9TRFBWMQkzCi0jZGVmaW5lIFNEUDM0MzBfVFNfR1BJT19JUlFfU0RQVjIJMgotCi0jZGVmaW5lIEVOQUJMRV9WQVVYM19ERURJQ0FURUQJMHgwMwotI2RlZmluZSBFTkFCTEVfVkFVWDNfREVWX0dSUAkweDIwCi0KLSNkZWZpbmUgVFdMNDAzMF9NU0VDVVJFX0dQSU8gMjIKLQotc3RhdGljIHVpbnQzMl90IGJvYXJkX2tleW1hcFtdID0gewotCUtFWSgwLCAwLCBLRVlfTEVGVCksCi0JS0VZKDAsIDEsIEtFWV9SSUdIVCksCi0JS0VZKDAsIDIsIEtFWV9BKSwKLQlLRVkoMCwgMywgS0VZX0IpLAotCUtFWSgwLCA0LCBLRVlfQyksCi0JS0VZKDEsIDAsIEtFWV9ET1dOKSwKLQlLRVkoMSwgMSwgS0VZX1VQKSwKLQlLRVkoMSwgMiwgS0VZX0UpLAotCUtFWSgxLCAzLCBLRVlfRiksCi0JS0VZKDEsIDQsIEtFWV9HKSwKLQlLRVkoMiwgMCwgS0VZX0VOVEVSKSwKLQlLRVkoMiwgMSwgS0VZX0kpLAotCUtFWSgyLCAyLCBLRVlfSiksCi0JS0VZKDIsIDMsIEtFWV9LKSwKLQlLRVkoMiwgNCwgS0VZXzMpLAotCUtFWSgzLCAwLCBLRVlfTSksCi0JS0VZKDMsIDEsIEtFWV9OKSwKLQlLRVkoMywgMiwgS0VZX08pLAotCUtFWSgzLCAzLCBLRVlfUCksCi0JS0VZKDMsIDQsIEtFWV9RKSwKLQlLRVkoNCwgMCwgS0VZX1IpLAotCUtFWSg0LCAxLCBLRVlfNCksCi0JS0VZKDQsIDIsIEtFWV9UKSwKLQlLRVkoNCwgMywgS0VZX1UpLAotCUtFWSg0LCA0LCBLRVlfRCksCi0JS0VZKDUsIDAsIEtFWV9WKSwKLQlLRVkoNSwgMSwgS0VZX1cpLAotCUtFWSg1LCAyLCBLRVlfTCksCi0JS0VZKDUsIDMsIEtFWV9TKSwKLQlLRVkoNSwgNCwgS0VZX0gpLAotCTAKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0gewotCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKLQkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAotfTsKLQotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHNkcDM0MzBfa3BfZGF0YSA9IHsKLQkua2V5bWFwX2RhdGEJPSAmYm9hcmRfbWFwX2RhdGEsCi0JLnJvd3MJCT0gNSwKLQkuY29scwkJPSA2LAotCS5yZXAJCT0gMSwKLX07Ci0KLSNkZWZpbmUgU0RQMzQzMF9MQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU8JOAotI2RlZmluZSBTRFAzNDMwX0xDRF9QQU5FTF9FTkFCTEVfR1BJTwkJNQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2RwMzQzMF9kaXNwbGF5X2luaXQodm9pZCkKLXsKLQlpbnQgcjsKLQotCS8qCi0JICogdGhlIGJhY2tsaWdodCBHUElPIGRvZXNuJ3QgZGlyZWN0bHkgZ28gdG8gdGhlIHBhbmVsLCBpdCBlbmFibGVzCi0JICogYW4gaW50ZXJuYWwgY2lyY3VpdCBvbiAzNDMwc2RwIHRvIGNyZWF0ZSB0aGUgc2lnbmFsIFZfQktMXzI4ViwKLQkgKiB0aGlzIGlzIGNvbm5lY3RlZCB0byBMRUQrIHBpbiBvZiB0aGUgc2hhcnAgcGFuZWwuIFRoaXMgR1BJTwotCSAqIGlzIGxlZnQgZW5hYmxlZCBpbiB0aGUgYm9hcmQgZmlsZSwgYW5kIG5vdCBwYXNzZWQgdG8gdGhlIHBhbmVsCi0JICogYXMgcGxhdGZvcm1fZGF0YS4KLQkgKi8KLQlyID0gZ3Bpb19yZXF1ZXN0X29uZShTRFAzNDMwX0xDRF9QQU5FTF9CQUNLTElHSFRfR1BJTywKLQkJCQlHUElPRl9PVVRfSU5JVF9ISUdILCAiTENEIEJhY2tsaWdodCIpOwotCWlmIChyKQotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgTENEIEJhY2tsaWdodCBHUElPXG4iKTsKLQotfQotCi1zdGF0aWMgc3RydWN0IHBhbmVsX3NoYXJwX2xzMDM3djdkdzAxX3BsYXRmb3JtX2RhdGEgc2RwMzQzMF9sY2RfcGRhdGEgPSB7Ci0JLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibGNkIiwKLQkuc291cmNlICAgICAgICAgICAgICAgICA9ICJkcGkuMCIsCi0KLQkuZGF0YV9saW5lcwkJPSAxNiwKLQotCS5yZXNiX2dwaW8JCT0gU0RQMzQzMF9MQ0RfUEFORUxfRU5BQkxFX0dQSU8sCi0JLmluaV9ncGlvCQk9IC0xLAotCS5tb19ncGlvCQk9IC0xLAotCS5scl9ncGlvCQk9IC0xLAotCS51ZF9ncGlvCQk9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RwMzQzMF9sY2RfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInBhbmVsLXNoYXJwLWxzMDM3djdkdzAxIiwKLQkuaWQgICAgICAgICAgICAgICAgICAgICA9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhICAgICAgPSAmc2RwMzQzMF9sY2RfcGRhdGEsCi19OwotCi1zdGF0aWMgc3RydWN0IGNvbm5lY3Rvcl9kdmlfcGxhdGZvcm1fZGF0YSBzZHAzNDMwX2R2aV9jb25uZWN0b3JfcGRhdGEgPSB7Ci0JLm5hbWUgICAgICAgICAgICAgICAgICAgPSAiZHZpIiwKLQkuc291cmNlICAgICAgICAgICAgICAgICA9ICJ0ZnA0MTAuMCIsCi0JLmkyY19idXNfbnVtICAgICAgICAgICAgPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkcDM0MzBfZHZpX2Nvbm5lY3Rvcl9kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgICAgICAgICAgPSAiY29ubmVjdG9yLWR2aSIsCi0JLmlkICAgICAgICAgICAgICAgICAgICAgPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YSAgICAgID0gJnNkcDM0MzBfZHZpX2Nvbm5lY3Rvcl9wZGF0YSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZW5jb2Rlcl90ZnA0MTBfcGxhdGZvcm1fZGF0YSBzZHAzNDMwX3RmcDQxMF9wZGF0YSA9IHsKLQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJ0ZnA0MTAuMCIsCi0JLnNvdXJjZSAgICAgICAgICAgICAgICAgPSAiZHBpLjAiLAotCS5kYXRhX2xpbmVzICAgICAgICAgICAgID0gMjQsCi0JLnBvd2VyX2Rvd25fZ3BpbyAgICAgICAgPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkcDM0MzBfdGZwNDEwX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJ0ZnA0MTAiLAotCS5pZCAgICAgICAgICAgICAgICAgICAgID0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgICAgICA9ICZzZHAzNDMwX3RmcDQxMF9wZGF0YSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY29ubmVjdG9yX2F0dl9wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfdHZfcGRhdGEgPSB7Ci0JLm5hbWUgPSAidHYiLAotCS5zb3VyY2UgPSAidmVuYy4wIiwKLQkuY29ubmVjdG9yX3R5cGUgPSBPTUFQX0RTU19WRU5DX1RZUEVfU1ZJREVPLAotCS5pbnZlcnRfcG9sYXJpdHkgPSBmYWxzZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkcDM0MzBfdHZfY29ubmVjdG9yX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJjb25uZWN0b3ItYW5hbG9nLXR2IiwKLQkuaWQgICAgICAgICAgICAgICAgICAgICA9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhICAgICAgPSAmc2RwMzQzMF90dl9wZGF0YSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyBzZHAzNDMwX2Rzc19kYXRhID0gewotCS5kZWZhdWx0X2Rpc3BsYXlfbmFtZSA9ICJsY2QiLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewotCXsKLQkJLm1tYwkJPSAxLAotCQkvKiA4IGJpdHMgKGRlZmF1bHQpIHJlcXVpcmVzIFM2LjMgPT0gT04sCi0JCSAqIHNvIHRoZSBTSU0gY2FyZCBpc24ndCB1c2VkOyBlbHNlIDQgYml0cy4KLQkJICovCi0JCS5jYXBzCQk9IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQSwKLQkJLmdwaW9fd3AJPSA0LAotCQkuZGVmZXJyZWQJPSB0cnVlLAotCX0sCi0JewotCQkubW1jCQk9IDIsCi0JCS5jYXBzCQk9IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQSwKLQkJLmdwaW9fd3AJPSA3LAotCQkuZGVmZXJyZWQJPSB0cnVlLAotCX0sCi0Je30JLyogVGVybWluYXRvciAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX3R3NDAzMF9wZGF0YSBvbWFwX3R3bDQwMzBfYXVkaW9fZGF0YSA9IHsKLQkudm9pY2VfY29ubmVjdGVkID0gdHJ1ZSwKLQkuY3VzdG9tX3JvdXRpbmcJPSB0cnVlLAotCi0JLmhhc19ocwkJPSBPTUFQX1RXTDQwMzBfTEVGVCB8IE9NQVBfVFdMNDAzMF9SSUdIVCwKLQkuaGFzX2hmCQk9IE9NQVBfVFdMNDAzMF9MRUZUIHwgT01BUF9UV0w0MDMwX1JJR0hULAotCi0JLmhhc19tYWlubWljCT0gdHJ1ZSwKLQkuaGFzX3N1Ym1pYwk9IHRydWUsCi0JLmhhc19oc21pYwk9IHRydWUsCi0JLmhhc19saW5laW4JPSBPTUFQX1RXTDQwMzBfTEVGVCB8IE9NQVBfVFdMNDAzMF9SSUdIVCwKLX07Ci0KLXN0YXRpYyBpbnQgc2RwMzQzMF90d2xfZ3Bpb19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKQotewotCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSwKLQkgKiBncGlvICsgMSBpcyAibW1jMV9jZCIgKGlucHV0L0lSUSkKLQkgKi8KLQltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwotCW1tY1sxXS5ncGlvX2NkID0gZ3BpbyArIDE7Ci0Jb21hcF9oc21tY19sYXRlX2luaXQobW1jKTsKLQotCS8qIGdwaW8gKyA3IGlzICJzdWJfbGNkX2VuX2JrbCIgKG91dHB1dC9QV00xKSAqLwotCWdwaW9fcmVxdWVzdF9vbmUoZ3BpbyArIDcsIEdQSU9GX09VVF9JTklUX0xPVywgInN1Yl9sY2RfZW5fYmtsIik7Ci0KLQkvKiBncGlvICsgMTUgaXMgInN1Yl9sY2RfblJTVCIgKG91dHB1dCkgKi8KLQlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyAxNSwgR1BJT0ZfT1VUX0lOSVRfTE9XLCAic3ViX2xjZF9uUlNUIik7Ci0KLQlvbWFwX3R3bDQwMzBfYXVkaW9fZGF0YS5qYWNrX2RldGVjdCA9IGdwaW8gKyAyOwotCW9tYXBfdHdsNDAzMF9hdWRpb19pbml0KCJTRFAzNDMwIiwgJm9tYXBfdHdsNDAzMF9hdWRpb19kYXRhKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfZ3Bpb19kYXRhID0gewotCS5wdWxsZG93bnMJPSBCSVQoMikgfCBCSVQoNikgfCBCSVQoOCkgfCBCSVQoMTMpCi0JCQkJfCBCSVQoMTYpIHwgQklUKDE3KSwKLQkuc2V0dXAJCT0gc2RwMzQzMF90d2xfZ3Bpb19zZXR1cCwKLX07Ci0KLS8qIHJlZ3VsYXRvciBjb25zdW1lciBtYXBwaW5ncyAqLwotCi0vKiBhZHM3ODQ2IG9uIFNQSSAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdmF1eDNfc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJ2Y2MiLCAic3BpMS4wIiksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92bW1jMV9zdXBwbGllc1tdID0gewotCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4wIiksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92c2ltX3N1cHBsaWVzW10gPSB7Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tY19hdXgiLCAib21hcF9oc21tYy4wIiksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92bW1jMl9zdXBwbGllc1tdID0gewotCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4xIiksCi19OwotCi0vKgotICogQXBwbHkgYWxsIHRoZSBmaXhlZCB2b2x0YWdlcyBzaW5jZSBtb3N0IHZlcnNpb25zIG9mIFUtQm9vdAotICogZG9uJ3QgYm90aGVyIHdpdGggdGhhdCBpbml0aWFsaXphdGlvbi4KLSAqLwotCi0vKiBWQVVYMSBmb3IgbWFpbmJvYXJkIChpcmRhIGFuZCBzdWItbGNkKSAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdmF1eDEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWCQkJPSAyODAwMDAwLAotCQkubWF4X3VWCQkJPSAyODAwMDAwLAotCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKLQkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JfSwKLX07Ci0KLS8qIFZBVVgyIGZvciBjYW1lcmEgbW9kdWxlICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92YXV4MiA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYJCQk9IDI4MDAwMDAsCi0JCS5tYXhfdVYJCQk9IDI4MDAwMDAsCi0JCS5hcHBseV91VgkJPSB0cnVlLAotCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotfTsKLQotLyogVkFVWDMgZm9yIExDRCBib2FyZCAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdmF1eDMgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWCQkJPSAyODAwMDAwLAotCQkubWF4X3VWCQkJPSAyODAwMDAwLAotCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKLQkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCQk9IEFSUkFZX1NJWkUoc2RwMzQzMF92YXV4M19zdXBwbGllcyksCi0JLmNvbnN1bWVyX3N1cHBsaWVzCQk9IHNkcDM0MzBfdmF1eDNfc3VwcGxpZXMsCi19OwotCi0vKiBWQVVYNCBmb3IgT01BUCBWRERfQ1NJMiAoY2FtZXJhKSAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdmF1eDQgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWCQkJPSAxODAwMDAwLAotCQkubWF4X3VWCQkJPSAxODAwMDAwLAotCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKLQkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JfSwKLX07Ci0KLS8qIFZNTUMxIGZvciBPTUFQIFZERF9NTUMxIChpL28pIGFuZCBNTUMxIGNhcmQgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZtbWMxID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm1pbl91VgkJCT0gMTg1MDAwMCwKLQkJLm1heF91VgkJCT0gMzE1MDAwMCwKLQkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShzZHAzNDMwX3ZtbWMxX3N1cHBsaWVzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSBzZHAzNDMwX3ZtbWMxX3N1cHBsaWVzLAotfTsKLQotLyogVk1NQzIgZm9yIE1NQzIgY2FyZCAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdm1tYzIgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWCQkJPSAxODUwMDAwLAotCQkubWF4X3VWCQkJPSAxODUwMDAwLAotCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKLQkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShzZHAzNDMwX3ZtbWMyX3N1cHBsaWVzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSBzZHAzNDMwX3ZtbWMyX3N1cHBsaWVzLAotfTsKLQotLyogVlNJTSBmb3IgT01BUCBWRERfTU1DMUEgKGkvbyBmb3IgREFUNC4uREFUNykgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZzaW0gPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWCQkJPSAxODAwMDAwLAotCQkubWF4X3VWCQkJPSAzMDAwMDAwLAotCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKLQkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKHNkcDM0MzBfdnNpbV9zdXBwbGllcyksCi0JLmNvbnN1bWVyX3N1cHBsaWVzCT0gc2RwMzQzMF92c2ltX3N1cHBsaWVzLAotfTsKLQotc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgc2RwMzQzMF90d2xkYXRhID0gewotCS8qIHBsYXRmb3JtX2RhdGEgZm9yIGNoaWxkcmVuIGdvZXMgaGVyZSAqLwotCS5ncGlvCQk9ICZzZHAzNDMwX2dwaW9fZGF0YSwKLQkua2V5cGFkCQk9ICZzZHAzNDMwX2twX2RhdGEsCi0KLQkudmF1eDEJCT0gJnNkcDM0MzBfdmF1eDEsCi0JLnZhdXgyCQk9ICZzZHAzNDMwX3ZhdXgyLAotCS52YXV4MwkJPSAmc2RwMzQzMF92YXV4MywKLQkudmF1eDQJCT0gJnNkcDM0MzBfdmF1eDQsCi0JLnZtbWMxCQk9ICZzZHAzNDMwX3ZtbWMxLAotCS52bW1jMgkJPSAmc2RwMzQzMF92bW1jMiwKLQkudnNpbQkJPSAmc2RwMzQzMF92c2ltLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgb21hcDM0MzBfaTJjX2luaXQodm9pZCkKLXsKLQkvKiBpMmMxIGZvciBQTUlDIG9ubHkgKi8KLQlvbWFwM19wbWljX2dldF9jb25maWcoJnNkcDM0MzBfdHdsZGF0YSwKLQkJCVRXTF9DT01NT05fUERBVEFfVVNCIHwgVFdMX0NPTU1PTl9QREFUQV9CQ0kgfAotCQkJVFdMX0NPTU1PTl9QREFUQV9NQURDIHwgVFdMX0NPTU1PTl9QREFUQV9BVURJTywKLQkJCVRXTF9DT01NT05fUkVHVUxBVE9SX1ZEQUMgfCBUV0xfQ09NTU9OX1JFR1VMQVRPUl9WUExMMik7Ci0Jc2RwMzQzMF90d2xkYXRhLnZkYWMtPmNvbnN0cmFpbnRzLmFwcGx5X3VWID0gdHJ1ZTsKLQlzZHAzNDMwX3R3bGRhdGEudnBsbDItPmNvbnN0cmFpbnRzLmFwcGx5X3VWID0gdHJ1ZTsKLQlzZHAzNDMwX3R3bGRhdGEudnBsbDItPmNvbnN0cmFpbnRzLm5hbWUgPSAiVkRWSSI7Ci0KLQlzZHAzNDMwX3R3bGRhdGEuYXVkaW8tPmNvZGVjLT5oc19leHRtdXRlID0gMTsKLQlzZHAzNDMwX3R3bGRhdGEuYXVkaW8tPmNvZGVjLT5oc19leHRtdXRlX2dwaW8gPSAtRUlOVkFMOwotCi0Jb21hcDNfcG1pY19pbml0KCJ0d2w0MDMwIiwgJnNkcDM0MzBfdHdsZGF0YSk7Ci0KLQkvKiBpMmMyIG9uIGNhbWVyYSBjb25uZWN0b3IgKGZvciBzZW5zb3IgY29udHJvbCkgYW5kIG9wdGlvbmFsIGlzcDEzMDEgKi8KLQlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgNDAwLCBOVUxMLCAwKTsKLQkvKiBpMmMzIG9uIGRpc3BsYXkgY29ubmVjdG9yIChmb3IgRFZJLCB0ZnA0MTApICovCi0Jb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpIHx8IGRlZmluZWQoQ09ORklHX1NNQzkxWF9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9zbWM5MXhfcGxhdGZvcm1fZGF0YSBib2FyZF9zbWM5MXhfZGF0YSA9IHsKLQkuY3MJCT0gMywKLQkuZmxhZ3MJCT0gR1BNQ19NVVhfQUREX0RBVEEgfCBHUE1DX1RJTUlOR1NfU01DOTFDOTYgfAotCQkJCUlPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGJvYXJkX3NtYzkxeF9pbml0KHZvaWQpCi17Ci0JaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApCi0JCWJvYXJkX3NtYzkxeF9kYXRhLmdwaW9faXJxID0gNjsKLQllbHNlCi0JCWJvYXJkX3NtYzkxeF9kYXRhLmdwaW9faXJxID0gMjk7Ci0KLQlncG1jX3NtYzkxeF9pbml0KCZib2FyZF9zbWM5MXhfZGF0YSk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBib2FyZF9zbWM5MXhfaW5pdCh2b2lkKQotewotfQotCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgZW5hYmxlX2JvYXJkX3dha2V1cF9zb3VyY2Uodm9pZCkKLXsKLQkvKiBUMiBpbnRlcnJ1cHQgbGluZSAoa2V5cGFkKSAqLwotCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzeXNfbmlycSIsCi0JCU9NQVBfV0FLRVVQX0VOIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKLX0KLQotc3RhdGljIHN0cnVjdCB1c2Joc19waHlfZGF0YSBwaHlfZGF0YVtdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkucG9ydCA9IDEsCi0JCS5yZXNldF9ncGlvID0gNTcsCi0JCS52Y2NfZ3BpbyA9IC1FSU5WQUwsCi0JfSwKLQl7Ci0JCS5wb3J0ID0gMiwKLQkJLnJlc2V0X2dwaW8gPSA2MSwKLQkJLnZjY19ncGlvID0gLUVJTlZBTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCB1c2Joc19vbWFwX3BsYXRmb3JtX2RhdGEgdXNiaHNfYmRhdGEgX19pbml0ZGF0YSA9IHsKLQotCS5wb3J0X21vZGVbMF0gPSBPTUFQX0VIQ0lfUE9SVF9NT0RFX1BIWSwKLQkucG9ydF9tb2RlWzFdID0gT01BUF9FSENJX1BPUlRfTU9ERV9QSFksCi19OwotCi0jaWZkZWYgQ09ORklHX09NQVBfTVVYCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7Ci0JeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKLX07Ci0jZWxzZQotI2RlZmluZSBib2FyZF9tdXgJTlVMTAotI2VuZGlmCi0KLS8qCi0gKiBTRFAzNDMwIFYyIEJvYXJkIENTIG9yZ2FuaXphdGlvbgotICogRGlmZmVyZW50IGZyb20gU0RQMzQzMCBWMS4gTm93IDQgc3dpdGNoZXMgdXNlZCB0byBzcGVjaWZ5IENTCi0gKgotICogU2VlIGFsc28gdGhlIFN3aXRjaCBTOCBzZXR0aW5ncyBpbiB0aGUgY29tbWVudHMuCi0gKi8KLXN0YXRpYyBjaGFyIGNoaXBfc2VsXzM0MzBbXVtHUE1DX0NTX05VTV0gPSB7Ci0Je1BEQ19OT1IsIFBEQ19OQU5ELCBQRENfT05FTkFORCwgREJHX01QREIsIDAsIDAsIDAsIDB9LCAvKiBTODoxMTExICovCi0Je1BEQ19PTkVOQU5ELCBQRENfTkFORCwgUERDX05PUiwgREJHX01QREIsIDAsIDAsIDAsIDB9LCAvKiBTODoxMTEwICovCi0Je1BEQ19OQU5ELCBQRENfT05FTkFORCwgUERDX05PUiwgREJHX01QREIsIDAsIDAsIDAsIDB9LCAvKiBTODoxMTAxICovCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2RwX25vcl9wYXJ0aXRpb25zW10gPSB7Ci0JLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwotCXsKLQkJLm5hbWUJCT0gIkJvb3Rsb2FkZXItTk9SIiwKLQkJLm9mZnNldAkJPSAwLAotCQkuc2l6ZQkJPSBTWl8yNTZLLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sCi0JLyogYm9vdGxvYWRlciBwYXJhbXMgaW4gdGhlIG5leHQgc2VjdG9yICovCi0JewotCQkubmFtZQkJPSAiUGFyYW1zLU5PUiIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSBTWl8yNTZLLAotCQkubWFza19mbGFncwk9IDAsCi0JfSwKLQkvKiBrZXJuZWwgKi8KLQl7Ci0JCS5uYW1lCQk9ICJLZXJuZWwtTk9SIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IFNaXzJNLAotCQkubWFza19mbGFncwk9IDAKLQl9LAotCS8qIGZpbGUgc3lzdGVtICovCi0JewotCQkubmFtZQkJPSAiRmlsZXN5c3RlbS1OT1IiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKLQkJLm1hc2tfZmxhZ3MJPSAwCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNkcF9vbmVuYW5kX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJYLUxvYWRlci1PbmVOQU5EIiwKLQkJLm9mZnNldAkJPSAwLAotCQkuc2l6ZQkJPSA0ICogKDY0ICogMjA0OCksCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJVLUJvb3QtT25lTkFORCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSAyICogKDY0ICogMjA0OCksCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJVLUJvb3QgRW52aXJvbm1lbnQtT25lTkFORCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSAxICogKDY0ICogMjA0OCksCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJLZXJuZWwtT25lTkFORCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSAxNiAqICg2NCAqIDIwNDgpLAotCX0sCi0JewotCQkubmFtZQkJPSAiRmlsZSBTeXN0ZW0tT25lTkFORCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2RwX25hbmRfcGFydGl0aW9uc1tdID0gewotCS8qIEFsbCB0aGUgcGFydGl0aW9uIHNpemVzIGFyZSBsaXN0ZWQgaW4gdGVybXMgb2YgTkFORCBibG9jayBzaXplICovCi0JewotCQkubmFtZQkJPSAiWC1Mb2FkZXItTkFORCIsCi0JCS5vZmZzZXQJCT0gMCwKLQkJLnNpemUJCT0gNCAqICg2NCAqIDIwNDgpLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sCi0JewotCQkubmFtZQkJPSAiVS1Cb290LU5BTkQiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHg4MDAwMCAqLwotCQkuc2l6ZQkJPSAxMCAqICg2NCAqIDIwNDgpLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sCi0JewotCQkubmFtZQkJPSAiQm9vdCBFbnYtTkFORCIsCi0KLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MWMwMDAwICovCi0JCS5zaXplCQk9IDYgKiAoNjQgKiAyMDQ4KSwKLQl9LAotCXsKLQkJLm5hbWUJCT0gIktlcm5lbC1OQU5EIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjgwMDAwICovCi0JCS5zaXplCQk9IDQwICogKDY0ICogMjA0OCksCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJGaWxlIFN5c3RlbSAtIE5BTkQiLAotCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHg3ODAwMDAgKi8KLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHNkcF9mbGFzaF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkucGFydHMgPSBzZHBfbm9yX3BhcnRpdGlvbnMsCi0JCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoc2RwX25vcl9wYXJ0aXRpb25zKSwKLQl9LAotCXsKLQkJLnBhcnRzID0gc2RwX29uZW5hbmRfcGFydGl0aW9ucywKLQkJLm5yX3BhcnRzID0gQVJSQVlfU0laRShzZHBfb25lbmFuZF9wYXJ0aXRpb25zKSwKLQl9LAotCXsKLQkJLnBhcnRzID0gc2RwX25hbmRfcGFydGl0aW9ucywKLQkJLm5yX3BhcnRzID0gQVJSQVlfU0laRShzZHBfbmFuZF9wYXJ0aXRpb25zKSwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMzQzMHNkcF9pbml0KHZvaWQpCi17Ci0JaW50IGdwaW9fcGVuZG93bjsKLQotCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7Ci0Jb21hcF9oc21tY19pbml0KG1tYyk7Ci0Jb21hcDM0MzBfaTJjX2luaXQoKTsKLQlvbWFwX2Rpc3BsYXlfaW5pdCgmc2RwMzQzMF9kc3NfZGF0YSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZHAzNDMwX2xjZF9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2RwMzQzMF90ZnA0MTBfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNkcDM0MzBfZHZpX2Nvbm5lY3Rvcl9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2RwMzQzMF90dl9jb25uZWN0b3JfZGV2aWNlKTsKLQotCWlmIChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTMV8wKQotCQlncGlvX3BlbmRvd24gPSBTRFAzNDMwX1RTX0dQSU9fSVJRX1NEUFYyOwotCWVsc2UKLQkJZ3Bpb19wZW5kb3duID0gU0RQMzQzMF9UU19HUElPX0lSUV9TRFBWMTsKLQlvbWFwX2Fkczc4NDZfaW5pdCgxLCBncGlvX3BlbmRvd24sIDMxMCwgTlVMTCk7Ci0Jb21hcF9zZXJpYWxfaW5pdCgpOwotCW9tYXBfc2RyY19pbml0KGh5YjE4bTUxMjE2MGFmNl9zZHJjX3BhcmFtcywgTlVMTCk7Ci0JdXNiX2JpbmRfcGh5KCJtdXNiLWhkcmMuMC5hdXRvIiwgMCwgInR3bDQwMzBfdXNiIik7Ci0JdXNiX211c2JfaW5pdChOVUxMKTsKLQlib2FyZF9zbWM5MXhfaW5pdCgpOwotCWJvYXJkX2ZsYXNoX2luaXQoc2RwX2ZsYXNoX3BhcnRpdGlvbnMsIGNoaXBfc2VsXzM0MzAsIDApOwotCXNkcDM0MzBfZGlzcGxheV9pbml0KCk7Ci0JZW5hYmxlX2JvYXJkX3dha2V1cF9zb3VyY2UoKTsKLQotCXVzYmhzX2luaXRfcGh5cyhwaHlfZGF0YSwgQVJSQVlfU0laRShwaHlfZGF0YSkpOwotCXVzYmhzX2luaXQoJnVzYmhzX2JkYXRhKTsKLX0KLQotTUFDSElORV9TVEFSVChPTUFQXzM0MzBTRFAsICJPTUFQMzQzMCAzNDMwU0RQIGJvYXJkIikKLQkvKiBNYWludGFpbmVyOiBTeWVkIEtoYXNpbSAtIFRleGFzIEluc3RydW1lbnRzIEluYyAqLwotCS5hdGFnX29mZnNldAk9IDB4MTAwLAotCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAotCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAotCS5pbml0X2Vhcmx5CT0gb21hcDM0MzBfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBvbWFwM19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lCT0gb21hcF8zNDMwc2RwX2luaXQsCi0JLmluaXRfbGF0ZQk9IG9tYXAzNDMwX2luaXRfbGF0ZSwKLQkuaW5pdF90aW1lCT0gb21hcDNfc3luYzMya190aW1lcl9pbml0LAotCS5yZXN0YXJ0CT0gb21hcDN4eHhfcmVzdGFydCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2NyYW5lLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2NyYW5lLmMKaW5kZXggMjEyYzMxNi4uODE2OGRkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdjcmFuZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3Y3JhbmUuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCmluZGV4IGM2ZGY4ZWVjLi45MTczOGExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9ncGlvLW9tYXAuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXQyNC5oPgpAQCAtNTEsOCArNTIsNiBAQAogI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgogI2luY2x1ZGUgImhzbW1jLmgiCiAjaW5jbHVkZSAiY29tbW9uLWJvYXJkLWRldmljZXMuaCIKLSNpbmNsdWRlICJncG1jLmgiCi0jaW5jbHVkZSAiZ3BtYy1uYW5kLmgiCiAKICNkZWZpbmUgQ01fVDM1X0dQSU9fUEVORE9XTgkJNTcKICNkZWZpbmUgU0JfVDM1X1VTQl9IVUJfUkVTRVRfR1BJTwkxNjcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwppbmRleCA4YTJjMTY3Li43OTQ3NTZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L29tYXAtZ3BtYy5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy12MzAyMC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgpAQCAtNDEsNyArNDIsNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tdGQtbmFuZC1vbWFwMi5oPgotI2luY2x1ZGUgImdwbWMuaCIKIAogI2luY2x1ZGUgImFtMzV4eC5oIgogCkBAIC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSAiaHNtbWMuaCIKICNpbmNsdWRlICJjb21tb24tYm9hcmQtZGV2aWNlcy5oIgogI2luY2x1ZGUgImFtMzV4eC1lbWFjLmgiCi0jaW5jbHVkZSAiZ3BtYy1uYW5kLmgiCiAKICNpZiBkZWZpbmVkKENPTkZJR19MRURTX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNtX3QzNTE3X2xlZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guYwppbmRleCAyZDI0NWMyLi43MGIyMWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L29tYXAtZ3BtYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTIzLDggKzI0LDYgQEAKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJib2FyZC1mbGFzaC5oIgotI2luY2x1ZGUgImdwbWMtb25lbmFuZC5oIgotI2luY2x1ZGUgImdwbWMtbmFuZC5oIgogCiAjZGVmaW5lIFJFR19GUEdBX1JFVgkJCTB4MTAKICNkZWZpbmUgUkVHX0ZQR0FfRElQX1NXSVRDSF9JTlBVVDIJMHg2MApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5oCmluZGV4IDJmYjVkNDEuLmVhOWFhZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgImdwbWMuaCIKIAogI2RlZmluZSBQRENfTk9SCQkxCiAjZGVmaW5lIFBEQ19OQU5ECTIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKaW5kZXggOTc3NjdhMi4uYjY0NDNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKQEAgLTIxLDggKzIxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL211c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc3BpLW9tYXAyLW1jc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tdGQtb25lbmFuZC1vbWFwMi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbW1jLW9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvbWVuZWxhdXMuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYzMjBhaWMzeC5oPgogCkBAIC0zMiw3ICszMyw2IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiZ3BtYy1vbmVuYW5kLmgiCiAjaW5jbHVkZSAiY29tbW9uLWJvYXJkLWRldmljZXMuaCIKIAogI2RlZmluZSBUVVNCNjAxMF9BU1lOQ19DUwkxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwppbmRleCBmMzIyMDE2Li43ZjE3MDg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvd2wxMnh4Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgpAQCAtNTEsNyArNTIsNiBAQAogI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgogI2luY2x1ZGUgImhzbW1jLmgiCiAjaW5jbHVkZSAiY29tbW9uLWJvYXJkLWRldmljZXMuaCIKLSNpbmNsdWRlICJncG1jLW5hbmQuaCIKIAogI2RlZmluZSBQQU5ET1JBX1dJRklfSVJRX0dQSU8JCTIxCiAjZGVmaW5lIFBBTkRPUkFfV0lGSV9OUkVTRVRfR1BJTwkyMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCBkZGZjOGRmLi4wMzUwMmFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L29tYXAtZ3BtYy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXIvaXNwMTcwNF9jaGFyZ2VyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zcGktb21hcDItbWNzcGkuaD4KQEAgLTMyLDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgPGxpbnV4L29tYXAtZG1hLmg+Ci0jaW5jbHVkZSAiZ3BtYy1zbWM5MXguaCIKIAogI2luY2x1ZGUgImJvYXJkLXJ4NTEuaCIKIApAQCAtNTUsOCArNTUsNiBAQAogI2luY2x1ZGUgIm9tYXAtcG0uaCIKICNpbmNsdWRlICJoc21tYy5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCi0jaW5jbHVkZSAiZ3BtYy5oIgotI2luY2x1ZGUgImdwbWMtb25lbmFuZC5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgIm9tYXAtc2VjdXJlLmgiCiAKQEAgLTQ4NCw3ICs0ODIsNyBAQAogICogQ3VycmVudCBmbG93cyB0byBlTU1DIHdoZW4gZU1NQyBpcyBvZmYgYW5kIHRoZSBkYXRhIGxpbmVzIGFyZSBwdWxsZWQgdXAsCiAgKiBzbyBwdWxsIHRoZW0gZG93bi4gTi5CLiB3ZSBwdWxsIDggbGluZXMgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgOCBsaW5lcy4KICAqLwotc3RhdGljIHZvaWQgcng1MV9tbWMyX3JlbXV4KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbikKK3N0YXRpYyB2b2lkIHJ4NTFfbW1jMl9yZW11eChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbikKIHsKIAlpZiAocG93ZXJfb24pCiAJCW9tYXBfbXV4X3dyaXRlX2FycmF5KHBhcnRpdGlvbiwgcng1MV9tbWMyX29uX211eCk7CkBAIC01MDAsNyArNDk4LDYgQEAKIAkJLmNvdmVyX29ubHkJPSB0cnVlLAogCQkuZ3Bpb19jZAk9IDE2MCwKIAkJLmdwaW9fd3AJPSAtRUlOVkFMLAotCQkucG93ZXJfc2F2aW5nCT0gdHJ1ZSwKIAl9LAogCXsKIAkJLm5hbWUJCT0gImludGVybmFsIiwKQEAgLTUxMCw3ICs1MDcsNiBAQAogCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCiAJCS5ncGlvX3dwCT0gLUVJTlZBTCwKIAkJLm5vbnJlbW92YWJsZQk9IHRydWUsCi0JCS5wb3dlcl9zYXZpbmcJPSB0cnVlLAogCQkucmVtdXgJCT0gcng1MV9tbWMyX3JlbXV4LAogCX0sCiAJe30JLyogVGVybWluYXRvciAqLwpAQCAtMTE0NiwzMyArMTE0Miw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpIHx8IGRlZmluZWQoQ09ORklHX1NNQzkxWF9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9zbWM5MXhfcGxhdGZvcm1fZGF0YSBib2FyZF9zbWM5MXhfZGF0YSA9IHsKLQkuY3MJCT0gMSwKLQkuZ3Bpb19pcnEJPSA1NCwKLQkuZ3Bpb19wd3Jkd24JPSA4NiwKLQkuZ3Bpb19yZXNldAk9IDE2NCwKLQkuZmxhZ3MJCT0gR1BNQ19USU1JTkdTX1NNQzkxQzk2IHwgSU9SRVNPVVJDRV9JUlFfSElHSExFVkVMLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGJvYXJkX3NtYzkxeF9pbml0KHZvaWQpCi17Ci0Jb21hcF9tdXhfaW5pdF9ncGlvKDU0LCBPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7Ci0Jb21hcF9tdXhfaW5pdF9ncGlvKDg2LCBPTUFQX1BJTl9PVVRQVVQpOwotCW9tYXBfbXV4X2luaXRfZ3BpbygxNjQsIE9NQVBfUElOX09VVFBVVCk7Ci0KLQlncG1jX3NtYzkxeF9pbml0KCZib2FyZF9zbWM5MXhfZGF0YSk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBib2FyZF9zbWM5MXhfaW5pdCh2b2lkKQotewotfQotCi0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBncGlvIHJ4NTFfd2wxMjUxX2dwaW9zW10gX19pbml0ZGF0YSA9IHsKIAl7IFJYNTFfV0wxMjUxX0lSUV9HUElPLAkgIEdQSU9GX0lOLAkJIndsMTI1MSBpcnEiCX0sCiB9OwpAQCAtMTMwMyw3ICsxMjcyLDYgQEAKIAlyeDUxX2kyY19pbml0KCk7CiAJcmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKCk7CiAJZ3BtY19vbmVuYW5kX2luaXQoYm9hcmRfb25lbmFuZF9kYXRhKTsKLQlib2FyZF9zbWM5MXhfaW5pdCgpOwogCXJ4NTFfYWRkX2dwaW9fa2V5cygpOwogCXJ4NTFfaW5pdF93bDEyNTEoKTsKIAlyeDUxX2luaXRfdHNjMjAwNSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC10aTgxNjhldm0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtdGk4MTY4ZXZtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNzNjMjguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC10aTgxNjhldm0uYworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb2RlIGZvciBUSTgxNjgvVEk4MTQ4IEVWTS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4gLSBodHRwOi8vd3d3LnRpLmNvbS8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQotICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQotICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKLQotc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7Ci0JLnNldF9waHlfcG93ZXIJPSB0aTgxeHhfbXVzYl9waHlfcG93ZXIsCi0JLmludGVyZmFjZV90eXBlCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKLQkubW9kZSAgICAgICAgICAgPSBNVVNCX09URywKLQkucG93ZXIJCT0gNTAwLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHRpODF4eF9ldm1faW5pdCh2b2lkKQotewotCW9tYXBfc2VyaWFsX2luaXQoKTsKLQlvbWFwX3NkcmNfaW5pdChOVUxMLCBOVUxMKTsKLQl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOwotfQotCi1NQUNISU5FX1NUQVJUKFRJODE2OEVWTSwgInRpODE2OGV2bSIpCi0JLyogTWFpbnRhaW5lcjogVGV4YXMgSW5zdHJ1bWVudHMgKi8KLQkuYXRhZ19vZmZzZXQJPSAweDEwMCwKLQkubWFwX2lvCQk9IHRpODF4eF9tYXBfaW8sCi0JLmluaXRfZWFybHkJPSB0aTgxeHhfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSB0aTgxeHhfaW5pdF9pcnEsCi0JLmluaXRfdGltZQk9IG9tYXAzX3N5bmMzMmtfdGltZXJfaW5pdCwKLQkuaW5pdF9tYWNoaW5lCT0gdGk4MXh4X2V2bV9pbml0LAotCS5pbml0X2xhdGUJPSB0aTgxeHhfaW5pdF9sYXRlLAotCS5yZXN0YXJ0CT0gb21hcDQ0eHhfcmVzdGFydCwKLU1BQ0hJTkVfRU5ECi0KLU1BQ0hJTkVfU1RBUlQoVEk4MTQ4RVZNLCAidGk4MTQ4ZXZtIikKLQkvKiBNYWludGFpbmVyOiBUZXhhcyBJbnN0cnVtZW50cyAqLwotCS5hdGFnX29mZnNldAk9IDB4MTAwLAotCS5tYXBfaW8JCT0gdGk4MXh4X21hcF9pbywKLQkuaW5pdF9lYXJseQk9IHRpODF4eF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IHRpODF4eF9pbml0X2lycSwKLQkuaW5pdF90aW1lCT0gb21hcDNfc3luYzMya190aW1lcl9pbml0LAotCS5pbml0X21hY2hpbmUJPSB0aTgxeHhfZXZtX2luaXQsCi0JLmluaXRfbGF0ZQk9IHRpODF4eF9pbml0X2xhdGUsCi0JLnJlc3RhcnQJPSBvbWFwNDR4eF9yZXN0YXJ0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2Nsb2NrM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NjbG9jazN4eHhfZGF0YS5jCmluZGV4IGViOGM3NWUuLjVjNWViYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2Nsb2NrM3h4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jY2xvY2szeHh4X2RhdGEuYwpAQCAtMjU3LDYgKzI1Nyw5IEBACiAJLmdldF9wYXJlbnQJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKIAkucmVjYWxjX3JhdGUJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuc2V0X3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3BhcmVudCwKKwkuc2V0X3JhdGVfYW5kX3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudCwKKwkuZGV0ZXJtaW5lX3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2RldGVybWluZV9yYXRlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIH07CiAKQEAgLTM2Nyw2ICszNzAsOSBAQAogCS5nZXRfcGFyZW50CT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCiAJLnJlY2FsY19yYXRlCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKKwkuc2V0X3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3BhcmVudCwKKwkuc2V0X3JhdGVfYW5kX3BhcmVudAk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZV9hbmRfcGFyZW50LAorCS5kZXRlcm1pbmVfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCmluZGV4IDUwMDUzMGQuLjZhZDViNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKQEAgLTE3MSw3ICsxNzEsOCBAQAogCQlfd2FpdF9pZGxlc3RfZ2VuZXJpYyhjbGssIGlkbGVzdF9yZWcsICgxIDw8IGlkbGVzdF9iaXQpLAogCQkJCSAgICAgaWRsZXN0X3ZhbCwgX19jbGtfZ2V0X25hbWUoY2xrLT5ody5jbGspKTsKIAl9IGVsc2UgewotCQljbV93YWl0X21vZHVsZV9yZWFkeShwcmNtX21vZCwgaWRsZXN0X3JlZ19pZCwgaWRsZXN0X2JpdCk7CisJCW9tYXBfY21fd2FpdF9tb2R1bGVfcmVhZHkoMCwgcHJjbV9tb2QsIGlkbGVzdF9yZWdfaWQsCisJCQkJCSAgaWRsZXN0X2JpdCk7CiAJfTsKIH0KIApAQCAtNzcxLDQgKzc3Miw4IEBACiAJCXRpX2Nsa19mZWF0dXJlcy5jbV9pZGxlc3RfdmFsID0gT01BUDI0WFhfQ01fSURMRVNUX1ZBTDsKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKIAkJdGlfY2xrX2ZlYXR1cmVzLmNtX2lkbGVzdF92YWwgPSBPTUFQMzRYWF9DTV9JRExFU1RfVkFMOworCisJLyogT24gT01BUDM0MzAgRVMxLjAsIERQTEw0IGNhbid0IGJlIHJlLXByb2dyYW1tZWQgKi8KKwlpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApCisJCXRpX2Nsa19mZWF0dXJlcy5mbGFncyB8PSBUSV9DTEtfRFBMTDRfREVOWV9SRVBST0dSQU07CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5kZXggNDU5MmEyNy4uNjQxMzM3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtMjM0LDYgKzIzNCw3IEBACiB9OwogCiAjZGVmaW5lIFRJX0NMS19EUExMX0hBU19GUkVRU0VMCQkoMSA8PCAwKQorI2RlZmluZSBUSV9DTEtfRFBMTDRfREVOWV9SRVBST0dSQU0JKDEgPDwgMSkKIAogZXh0ZXJuIHN0cnVjdCB0aV9jbGtfZmVhdHVyZXMgdGlfY2xrX2ZlYXR1cmVzOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYwppbmRleCAwYjAyYjQxLi5hOWU4NmRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMKQEAgLTM4LDYgKzM4LDE4IEBACiAKIC8qIG5lZWRlZCBieSBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUoKSAqLwogc3RydWN0IGNsayAqc2RyY19pY2tfcCwgKmFybV9mY2tfcDsKKworLyoqCisgKiBvbWFwM19kcGxsNF9zZXRfcmF0ZSAtIHNldCByYXRlIGZvciBvbWFwMyBwZXItZHBsbAorICogQGh3OiBjbG9jayB0byBjaGFuZ2UKKyAqIEByYXRlOiB0YXJnZXQgcmF0ZSBmb3IgY2xvY2sKKyAqIEBwYXJlbnRfcmF0ZTogcmF0ZSBvZiB0aGUgcGFyZW50IGNsb2NrCisgKgorICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgU29DIHN1cHBvcnRzIHRoZSBwZXItZHBsbCByZXByb2dyYW0gb3BlcmF0aW9uCisgKiBvciBub3QsIGFuZCB0aGVuIGRvIHRoZSByYXRlIGNoYW5nZSBpZiBzdXBwb3J0ZWQuIFJldHVybnMgLUVJTlZBTAorICogaWYgbm90IHN1cHBvcnRlZCwgMCBmb3Igc3VjY2VzcywgYW5kIHBvdGVudGlhbCBlcnJvciBjb2RlcyBmcm9tIHRoZQorICogY2xvY2sgcmF0ZSBjaGFuZ2UuCisgKi8KIGludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCQkJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCiB7CkBAIC00Niw3ICs1OCw3IEBACiAJICogb24gMzQzMEVTMSBwcmV2ZW50cyB1cyBmcm9tIGNoYW5naW5nIERQTEwgbXVsdGlwbGllcnMgb3IgZGl2aWRlcnMKIAkgKiBvbiBEUExMNC4KIAkgKi8KLQlpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApIHsKKwlpZiAodGlfY2xrX2ZlYXR1cmVzLmZsYWdzICYgVElfQ0xLX0RQTEw0X0RFTllfUkVQUk9HUkFNKSB7CiAJCXByX2VycigiY2xvY2s6IERQTEw0IGNhbm5vdCBjaGFuZ2UgcmF0ZSBkdWUgdG8gc2lsaWNvbiAnTGltaXRhdGlvbiAyLjUnIG9uIDM0MzBFUzEuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTQsNiArNjYsMzAgQEAKIAlyZXR1cm4gb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlKGh3LCByYXRlLCBwYXJlbnRfcmF0ZSk7CiB9CiAKKy8qKgorICogb21hcDNfZHBsbDRfc2V0X3JhdGVfYW5kX3BhcmVudCAtIHNldCByYXRlIGFuZCBwYXJlbnQgZm9yIG9tYXAzIHBlci1kcGxsCisgKiBAaHc6IGNsb2NrIHRvIGNoYW5nZQorICogQHJhdGU6IHRhcmdldCByYXRlIGZvciBjbG9jaworICogQHBhcmVudF9yYXRlOiByYXRlIG9mIHRoZSBwYXJlbnQgY2xvY2sKKyAqIEBpbmRleDogcGFyZW50IGluZGV4LCAwIC0gcmVmZXJlbmNlIGNsb2NrLCAxIC0gYnlwYXNzIGNsb2NrCisgKgorICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgU29DIHN1cHBvcnQgdGhlIHBlci1kcGxsIHJlcHJvZ3JhbSBvcGVyYXRpb24KKyAqIG9yIG5vdCwgYW5kIHRoZW4gZG8gdGhlIHJhdGUgKyBwYXJlbnQgY2hhbmdlIGlmIHN1cHBvcnRlZC4gUmV0dXJucworICogLUVJTlZBTCBpZiBub3Qgc3VwcG9ydGVkLCAwIGZvciBzdWNjZXNzLCBhbmQgcG90ZW50aWFsIGVycm9yIGNvZGVzCisgKiBmcm9tIHRoZSBjbG9jayByYXRlIGNoYW5nZS4KKyAqLworaW50IG9tYXAzX2RwbGw0X3NldF9yYXRlX2FuZF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwgdTggaW5kZXgpCit7CisJaWYgKHRpX2Nsa19mZWF0dXJlcy5mbGFncyAmIFRJX0NMS19EUExMNF9ERU5ZX1JFUFJPR1JBTSkgeworCQlwcl9lcnIoImNsb2NrOiBEUExMNCBjYW5ub3QgY2hhbmdlIHJhdGUgZHVlIHRvIHNpbGljb24gJ0xpbWl0YXRpb24gMi41JyBvbiAzNDMwRVMxLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudChodywgcmF0ZSwgcGFyZW50X3JhdGUsCisJCQkJCQkgICAgICBpbmRleCk7Cit9CisKIHZvaWQgX19pbml0IG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpCiB7CiAJc3RydWN0IGNsayAqZHBsbDVfY2xrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCmluZGV4IDkzNDczZjkuLjYyMjJlODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKQEAgLTQ1LDE3ICs0NSwyOSBAQAogICogc3RydWN0IGNtX2xsX2RhdGEgLSBmbiBwdHJzIHRvIHBlci1Tb0MgQ00gZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zCiAgKiBAc3BsaXRfaWRsZXN0X3JlZzogcHRyIHRvIHRoZSBTb0MgQ00tc3BlY2lmaWMgc3BsaXRfaWRsZXN0X3JlZyBpbXBsCiAgKiBAd2FpdF9tb2R1bGVfcmVhZHk6IHB0ciB0byB0aGUgU29DIENNLXNwZWNpZmljIHdhaXRfbW9kdWxlX3JlYWR5IGltcGwKKyAqIEB3YWl0X21vZHVsZV9pZGxlOiBwdHIgdG8gdGhlIFNvQyBDTS1zcGVjaWZpYyB3YWl0X21vZHVsZV9pZGxlIGltcGwKKyAqIEBtb2R1bGVfZW5hYmxlOiBwdHIgdG8gdGhlIFNvQyBDTS1zcGVjaWZpYyBtb2R1bGVfZW5hYmxlIGltcGwKKyAqIEBtb2R1bGVfZGlzYWJsZTogcHRyIHRvIHRoZSBTb0MgQ00tc3BlY2lmaWMgbW9kdWxlX2Rpc2FibGUgaW1wbAogICovCiBzdHJ1Y3QgY21fbGxfZGF0YSB7CiAJaW50ICgqc3BsaXRfaWRsZXN0X3JlZykodm9pZCBfX2lvbWVtICppZGxlc3RfcmVnLCBzMTYgKnByY21faW5zdCwKIAkJCQl1OCAqaWRsZXN0X3JlZ19pZCk7Ci0JaW50ICgqd2FpdF9tb2R1bGVfcmVhZHkpKHMxNiBwcmNtX21vZCwgdTggaWRsZXN0X2lkLCB1OCBpZGxlc3Rfc2hpZnQpOworCWludCAoKndhaXRfbW9kdWxlX3JlYWR5KSh1OCBwYXJ0LCBzMTYgcHJjbV9tb2QsIHUxNiBpZGxlc3RfcmVnLAorCQkJCSB1OCBpZGxlc3Rfc2hpZnQpOworCWludCAoKndhaXRfbW9kdWxlX2lkbGUpKHU4IHBhcnQsIHMxNiBwcmNtX21vZCwgdTE2IGlkbGVzdF9yZWcsCisJCQkJdTggaWRsZXN0X3NoaWZ0KTsKKwl2b2lkICgqbW9kdWxlX2VuYWJsZSkodTggbW9kZSwgdTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpOworCXZvaWQgKCptb2R1bGVfZGlzYWJsZSkodTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpOwogfTsKIAogZXh0ZXJuIGludCBjbV9zcGxpdF9pZGxlc3RfcmVnKHZvaWQgX19pb21lbSAqaWRsZXN0X3JlZywgczE2ICpwcmNtX2luc3QsCiAJCQkgICAgICAgdTggKmlkbGVzdF9yZWdfaWQpOwotZXh0ZXJuIGludCBjbV93YWl0X21vZHVsZV9yZWFkeShzMTYgcHJjbV9tb2QsIHU4IGlkbGVzdF9pZCwgdTggaWRsZXN0X3NoaWZ0KTsKLQoraW50IG9tYXBfY21fd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYgaWRsZXN0X3JlZywKKwkJCSAgICAgIHU4IGlkbGVzdF9zaGlmdCk7CitpbnQgb21hcF9jbV93YWl0X21vZHVsZV9pZGxlKHU4IHBhcnQsIHMxNiBwcmNtX21vZCwgdTE2IGlkbGVzdF9yZWcsCisJCQkgICAgIHU4IGlkbGVzdF9zaGlmdCk7CitpbnQgb21hcF9jbV9tb2R1bGVfZW5hYmxlKHU4IG1vZGUsIHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKTsKK2ludCBvbWFwX2NtX21vZHVsZV9kaXNhYmxlKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKTsKIGV4dGVybiBpbnQgY21fcmVnaXN0ZXIoc3RydWN0IGNtX2xsX2RhdGEgKmNsZCk7CiBleHRlcm4gaW50IGNtX3VucmVnaXN0ZXIoc3RydWN0IGNtX2xsX2RhdGEgKmNsZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzQ0eHguaAppbmRleCA1YWU4ZmUzLi5hNTk0OTkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV80NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfNDR4eC5oCkBAIC0yNSw4ICsyNSw2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTFfNDRYWF9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTFfNDRYWF9ICiAKLSNpbmNsdWRlICJjbV80NHh4XzU0eHguaCIKLQogLyogQ00xIGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBPTUFQNDQzMF9DTTFfQkFTRQkJMHg0YTAwNDAwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV81NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV81NHh4LmgKaW5kZXggOTBiMzM0OC4uZmQyNDVkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfNTR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzU0eHguaApAQCAtMjIsOCArMjIsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00xXzU0WFhfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00xXzU0WFhfSAogCi0jaW5jbHVkZSAiY21fNDR4eF81NHh4LmgiCi0KIC8qIENNMSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgT01BUDU0WFhfQ01fQ09SRV9BT05fQkFTRQkJMHg0YTAwNDAwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV83eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzd4eC5oCmluZGV4IGNhNmZhMWYuLjJmMWMwOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzd4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzd4eC5oCkBAIC0yMyw4ICsyMyw2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTFfN1hYX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMV83WFhfSAogCi0jaW5jbHVkZSAiY21fNDR4eF81NHh4LmgiCi0KIC8qIENNMSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgRFJBN1hYX0NNX0NPUkVfQU9OX0JBU0UJCTB4NGEwMDUwMDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNDR4eC5oCmluZGV4IGVlNTEzNmQuLjc1MjFhYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl80NHh4LmgKQEAgLTI1LDggKzI1LDYgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMl80NFhYX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMl80NFhYX0gKIAotI2luY2x1ZGUgImNtXzQ0eHhfNTR4eC5oIgotCiAvKiBDTTIgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIE9NQVA0NDMwX0NNMl9CQVNFCQkweDRhMDA4MDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzU0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzU0eHguaAppbmRleCAyNjgzMjMxLi5mZjQwNDBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl81NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNTR4eC5oCkBAIC0yMSw4ICsyMSw2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTJfNTRYWF9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTJfNTRYWF9ICiAKLSNpbmNsdWRlICJjbV80NHh4XzU0eHguaCIKLQogLyogQ00yIGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBPTUFQNTRYWF9DTV9DT1JFX0JBU0UJCTB4NGEwMDgwMDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfN3h4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl83eHguaAppbmRleCBlOTY2ZTNhLi5jZTYzZmRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl83eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl83eHguaApAQCAtMjIsOCArMjIsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00yXzdYWF9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTJfN1hYX0gKIAotI2luY2x1ZGUgImNtXzQ0eHhfNTR4eC5oIgotCiAvKiBDTTIgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIERSQTdYWF9DTV9DT1JFX0JBU0UJCTB4NGEwMDgwMDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmMKaW5kZXggOGJlNmVhNS4uYTk2ZDkwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5jCkBAIC01Myw3ICs1Myw3IEBACiAJb21hcDJfY21fd3JpdGVfbW9kX3JlZyh2LCBtb2R1bGUsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CiB9CiAKLWJvb2wgb21hcDJ4eHhfY21faXNfY2xrZG1faW5faHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCitzdGF0aWMgYm9vbCBvbWFwMnh4eF9jbV9pc19jbGtkbV9pbl9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKIHsKIAl1MzIgdjsKIApAQCAtNjQsMTIgKzY0LDEyIEBACiAJcmV0dXJuICh2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgPyAxIDogMDsKIH0KIAotdm9pZCBvbWFwMnh4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCitzdGF0aWMgdm9pZCBvbWFwMnh4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCiB7CiAJX3dyaXRlX2Nsa3RyY3RybChPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8sIG1vZHVsZSwgbWFzayk7CiB9CiAKLXZvaWQgb21hcDJ4eHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3N0YXRpYyB2b2lkIG9tYXAyeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCiB7CiAJX3dyaXRlX2Nsa3RyY3RybChPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPLCBtb2R1bGUsIG1hc2spOwogfQpAQCAtMTUwLDcgKzE1MCw3IEBACiAJdiB8PSBtOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcodiwgUExMX01PRCwgQ01fQ0xLRU4pOwogCi0Jb21hcDJ4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkoUExMX01PRCwgMSwgc3RhdHVzX2JpdCk7CisJb21hcDJ4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkoMCwgUExMX01PRCwgMSwgc3RhdHVzX2JpdCk7CiAKIAkvKgogCSAqIFJFVklTSVQ6IFNob3VsZCB3ZSByZXR1cm4gYW4gZXJyb3IgY29kZSBpZgpAQCAtMjA0LDggKzIwNCw5IEBACiAgKiBYWFggVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG5lZWRlZCB1bnRpbCBhYnNvbHV0ZSByZWdpc3RlciBhZGRyZXNzZXMgYXJlCiAgKiByZW1vdmVkIGZyb20gdGhlIE9NQVAgc3RydWN0IGNsayByZWNvcmRzLgogICovCi1pbnQgb21hcDJ4eHhfY21fc3BsaXRfaWRsZXN0X3JlZyh2b2lkIF9faW9tZW0gKmlkbGVzdF9yZWcsIHMxNiAqcHJjbV9pbnN0LAotCQkJCSB1OCAqaWRsZXN0X3JlZ19pZCkKK3N0YXRpYyBpbnQgb21hcDJ4eHhfY21fc3BsaXRfaWRsZXN0X3JlZyh2b2lkIF9faW9tZW0gKmlkbGVzdF9yZWcsCisJCQkJCXMxNiAqcHJjbV9pbnN0LAorCQkJCQl1OCAqaWRsZXN0X3JlZ19pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnM7CiAJdTggaWRsZXN0X29mZnM7CkBAIC0yMzgsNiArMjM5LDcgQEAKIAogLyoqCiAgKiBvbWFwMnh4eF9jbV93YWl0X21vZHVsZV9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIGlkbGUgb3Igc3RhbmRieQorICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBPTUFQMgogICogQHByY21fbW9kOiBQUkNNIG1vZHVsZSBvZmZzZXQKICAqIEBpZGxlc3RfaWQ6IENNX0lETEVTVHggcmVnaXN0ZXIgSUQgKGkuZS4sIHggPSAxLCAyLCAzKQogICogQGlkbGVzdF9zaGlmdDogc2hpZnQgb2YgdGhlIGJpdCBpbiB0aGUgQ01fSURMRVNUKiByZWdpc3RlciB0byBjaGVjawpAQCAtMjQ2LDcgKzI0OCw4IEBACiAgKiAoQHByY21fbW9kLCBAaWRsZXN0X2lkLCBAaWRsZXN0X3NoaWZ0KSBpcyBjbG9ja2VkLiAgUmV0dXJuIDAgdXBvbgogICogc3VjY2VzcyBvciAtRUJVU1kgaWYgdGhlIG1vZHVsZSBkb2Vzbid0IGVuYWJsZSBpbiB0aW1lLgogICovCi1pbnQgb21hcDJ4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsIHU4IGlkbGVzdF9zaGlmdCkKK2ludCBvbWFwMnh4eF9jbV93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCBzMTYgcHJjbV9tb2QsIHUxNiBpZGxlc3RfaWQsCisJCQkJICB1OCBpZGxlc3Rfc2hpZnQpCiB7CiAJaW50IGVuYSA9IDAsIGkgPSAwOwogCXU4IGNtX2lkbGVzdF9yZWc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguaAppbmRleCA4OTFkODFjLi5jODk1MDJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmgKQEAgLTQ2LDkgKzQ2LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKLWV4dGVybiB2b2lkIG9tYXAyeHh4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzayk7Ci1leHRlcm4gdm9pZCBvbWFwMnh4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKLQogZXh0ZXJuIHZvaWQgb21hcDJ4eHhfY21fc2V0X2RwbGxfZGlzYWJsZV9hdXRvaWRsZSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAyeHh4X2NtX3NldF9kcGxsX2F1dG9fbG93X3Bvd2VyX3N0b3Aodm9pZCk7CiAKQEAgLTU3LDExICs1NCw4IEBACiBleHRlcm4gdm9pZCBvbWFwMnh4eF9jbV9zZXRfYXBsbDk2X2Rpc2FibGVfYXV0b2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMnh4eF9jbV9zZXRfYXBsbDk2X2F1dG9fbG93X3Bvd2VyX3N0b3Aodm9pZCk7CiAKLWV4dGVybiBib29sIG9tYXAyeHh4X2NtX2lzX2Nsa2RtX2luX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKLWV4dGVybiBpbnQgb21hcDJ4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsCi0JCQkJCSB1OCBpZGxlc3Rfc2hpZnQpOwotZXh0ZXJuIGludCBvbWFwMnh4eF9jbV9zcGxpdF9pZGxlc3RfcmVnKHZvaWQgX19pb21lbSAqaWRsZXN0X3JlZywKLQkJCQkJczE2ICpwcmNtX2luc3QsIHU4ICppZGxlc3RfcmVnX2lkKTsKK2ludCBvbWFwMnh4eF9jbV93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCBzMTYgcHJjbV9tb2QsIHUxNiBpZGxlc3RfaWQsCisJCQkJICB1OCBpZGxlc3Rfc2hpZnQpOwogZXh0ZXJuIGludCBvbWFwMnh4eF9jbV9mY2xrc19hY3RpdmUodm9pZCk7CiBleHRlcm4gaW50IG9tYXAyeHh4X2NtX21wdV9yZXRlbnRpb25fYWxsb3dlZCh2b2lkKTsKIGV4dGVybiB1MzIgb21hcDJ4eHhfY21fZ2V0X2NvcmVfY2xrX3NyYyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5jCmluZGV4IGIzZjk5ZTkuLmI5YWQ0NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguYwpAQCAtOTYsMTMgKzk2LDEyIEBACiAvKioKICAqIF9jbGtjdHJsX2lkbGVzdCAtIHJlYWQgYSBDTV8qX0NMS0NUUkwgcmVnaXN0ZXI7IG1hc2sgJiBzaGlmdCBJRExFU1QgYml0ZmllbGQKICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKICAqCiAgKiBSZXR1cm4gdGhlIElETEVTVCBiaXRmaWVsZCBvZiBhIENNXypfQ0xLQ1RSTCByZWdpc3Rlciwgc2hpZnRlZCBkb3duIHRvCiAgKiBiaXQgMC4KICAqLwotc3RhdGljIHUzMiBfY2xrY3RybF9pZGxlc3QodTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgdTMyIF9jbGtjdHJsX2lkbGVzdCh1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcykKIHsKIAl1MzIgdiA9IGFtMzN4eF9jbV9yZWFkX3JlZyhpbnN0LCBjbGtjdHJsX29mZnMpOwogCXYgJj0gQU0zM1hYX0lETEVTVF9NQVNLOwpAQCAtMTEzLDE3ICsxMTIsMTYgQEAKIC8qKgogICogX2lzX21vZHVsZV9yZWFkeSAtIGNhbiBtb2R1bGUgcmVnaXN0ZXJzIGJlIGFjY2Vzc2VkIHdpdGhvdXQgY2F1c2luZyBhbiBhYm9ydD8KICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1vZHVsZSdzIENNXypfQ0xLQ1RSTC5JRExFU1QgYml0ZmllbGQgaXMgZWl0aGVyCiAgKiAqRlVOQ1RJT05BTCBvciAqSU5URVJGQUNFX0lETEU7IGZhbHNlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGJvb2wgX2lzX21vZHVsZV9yZWFkeSh1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyBib29sIF9pc19tb2R1bGVfcmVhZHkodTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpCiB7CiAJdTMyIHY7CiAKLQl2ID0gX2Nsa2N0cmxfaWRsZXN0KGluc3QsIGNkb2ZmcywgY2xrY3RybF9vZmZzKTsKKwl2ID0gX2Nsa2N0cmxfaWRsZXN0KGluc3QsIGNsa2N0cmxfb2Zmcyk7CiAKIAlyZXR1cm4gKHYgPT0gQ0xLQ1RSTF9JRExFU1RfRlVOQ1RJT05BTCB8fAogCQl2ID09IENMS0NUUkxfSURMRVNUX0lOVEVSRkFDRV9JRExFKSA/IHRydWUgOiBmYWxzZTsKQEAgLTE1OCw3ICsxNTYsNyBAQAogICogUmV0dXJucyB0cnVlIGlmIHRoZSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQGluc3QsIEBjZG9mZnMpCiAgKiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIGlkbGUgbW9kZSwgb3IgMCBvdGhlcndpc2UuCiAgKi8KLWJvb2wgYW0zM3h4X2NtX2lzX2Nsa2RtX2luX2h3c3VwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIGJvb2wgYW0zM3h4X2NtX2lzX2Nsa2RtX2luX2h3c3VwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCXUzMiB2OwogCkBAIC0xNzcsNyArMTc1LDcgQEAKICAqIFB1dCBhIGNsb2NrZG9tYWluIHJlZmVycmVkIHRvIGJ5IChAaW5zdCwgQGNkb2ZmcykgaW50bwogICogaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgYW0zM3h4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyB2b2lkIGFtMzN4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJX2Nsa3RyY3RybF93cml0ZShPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8sIGluc3QsIGNkb2Zmcyk7CiB9CkBAIC0xOTEsNyArMTg5LDcgQEAKICAqIHNvZnR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLCBpLmUuLCBjb250cm9sbGVkIG1hbnVhbGx5IGJ5IHRoZQogICogTGludXggT01BUCBjbG9ja2RvbWFpbiBjb2RlLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIGFtMzN4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIHZvaWQgYW0zM3h4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJX2Nsa3RyY3RybF93cml0ZShPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPLCBpbnN0LCBjZG9mZnMpOwogfQpAQCAtMjA0LDcgKzIwMiw3IEBACiAgKiBQdXQgYSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQGluc3QsIEBjZG9mZnMpIGludG8gaWRsZQogICogTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIGFtMzN4eF9jbV9jbGtkbV9mb3JjZV9zbGVlcCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyB2b2lkIGFtMzN4eF9jbV9jbGtkbV9mb3JjZV9zbGVlcCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAlfY2xrdHJjdHJsX3dyaXRlKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9TTEVFUCwgaW5zdCwgY2RvZmZzKTsKIH0KQEAgLTIxNyw3ICsyMTUsNyBAQAogICogVGFrZSBhIGNsb2NrZG9tYWluIHJlZmVycmVkIHRvIGJ5IChAaW5zdCwgQGNkb2Zmcykgb3V0IG9mIGlkbGUsCiAgKiB3YWtpbmcgaXQgdXAuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgYW0zM3h4X2NtX2Nsa2RtX2ZvcmNlX3dha2V1cCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyB2b2lkIGFtMzN4eF9jbV9jbGtkbV9mb3JjZV93YWtldXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJX2Nsa3RyY3RybF93cml0ZShPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQLCBpbnN0LCBjZG9mZnMpOwogfQpAQCAtMjI4LDIwICsyMjYsMjIgQEAKIAogLyoqCiAgKiBhbTMzeHhfY21fd2FpdF9tb2R1bGVfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBiZSBpbiAnZnVuYycgc3RhdGUKKyAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgQU0zM3h4CiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCisgKiBAYml0X3NoaWZ0OiBiaXQgc2hpZnQgZm9yIHRoZSByZWdpc3RlciwgaWdub3JlZCBmb3IgQU0zM3h4CiAgKgogICogV2FpdCBmb3IgdGhlIG1vZHVsZSBJRExFU1QgdG8gYmUgZnVuY3Rpb25hbC4gSWYgdGhlIGlkbGUgc3RhdGUgaXMgaW4gYW55CiAgKiB0aGUgbm9uIGZ1bmN0aW9uYWwgc3RhdGUgKHRyYW5zLCBpZGxlIG9yIGRpc2FibGVkKSwgbW9kdWxlIGFuZCB0aHVzIHRoZQogICogc3lzY29uZmlnIGNhbm5vdCBiZSBhY2Nlc3NlZCBhbmQgd2lsbCBwcm9iYWJseSBsZWFkIHRvIGFuICJpbXByZWNpc2UKICAqIGV4dGVybmFsIGFib3J0IgogICovCi1pbnQgYW0zM3h4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIGludCBhbTMzeHhfY21fd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgczE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMsCisJCQkJICAgICAgIHU4IGJpdF9zaGlmdCkKIHsKIAlpbnQgaSA9IDA7CiAKLQlvbWFwX3Rlc3RfdGltZW91dChfaXNfbW9kdWxlX3JlYWR5KGluc3QsIGNkb2ZmcywgY2xrY3RybF9vZmZzKSwKKwlvbWFwX3Rlc3RfdGltZW91dChfaXNfbW9kdWxlX3JlYWR5KGluc3QsIGNsa2N0cmxfb2ZmcyksCiAJCQkgIE1BWF9NT0RVTEVfUkVBRFlfVElNRSwgaSk7CiAKIAlyZXR1cm4gKGkgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpID8gMCA6IC1FQlVTWTsKQEAgLTI1MCwyMiArMjUwLDI0IEBACiAvKioKICAqIGFtMzN4eF9jbV93YWl0X21vZHVsZV9pZGxlIC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gYmUgaW4gJ2Rpc2FibGVkJwogICogc3RhdGUKKyAqIEBwYXJ0OiBDTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIEFNMzN4eAogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQorICogQGJpdF9zaGlmdDogYml0IHNoaWZ0IGZvciB0aGUgcmVnaXN0ZXIsIGlnbm9yZWQgZm9yIEFNMzN4eAogICoKICAqIFdhaXQgZm9yIHRoZSBtb2R1bGUgSURMRVNUIHRvIGJlIGRpc2FibGVkLiBTb21lIFBSQ00gdHJhbnNpdGlvbiwKICAqIGxpa2UgcmVzZXQgYXNzZXJ0aW9uIG9yIHBhcmVudCBjbG9jayBkZS1hY3RpdmF0aW9uIG11c3Qgd2FpdCB0aGUKICAqIG1vZHVsZSB0byBiZSBmdWxseSBkaXNhYmxlZC4KICAqLwotaW50IGFtMzN4eF9jbV93YWl0X21vZHVsZV9pZGxlKHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIGludCBhbTMzeHhfY21fd2FpdF9tb2R1bGVfaWRsZSh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcywKKwkJCQkgICAgICB1OCBiaXRfc2hpZnQpCiB7CiAJaW50IGkgPSAwOwogCiAJaWYgKCFjbGtjdHJsX29mZnMpCiAJCXJldHVybiAwOwogCi0Jb21hcF90ZXN0X3RpbWVvdXQoKF9jbGtjdHJsX2lkbGVzdChpbnN0LCBjZG9mZnMsIGNsa2N0cmxfb2ZmcykgPT0KKwlvbWFwX3Rlc3RfdGltZW91dCgoX2Nsa2N0cmxfaWRsZXN0KGluc3QsIGNsa2N0cmxfb2ZmcykgPT0KIAkJCQlDTEtDVFJMX0lETEVTVF9ESVNBQkxFRCksCiAJCQkJTUFYX01PRFVMRV9SRUFEWV9USU1FLCBpKTsKIApAQCAtMjc1LDEzICsyNzcsMTQgQEAKIC8qKgogICogYW0zM3h4X2NtX21vZHVsZV9lbmFibGUgLSBFbmFibGUgdGhlIG1vZHVsZW1vZGUgaW5zaWRlIENMS0NUUkwKICAqIEBtb2RlOiBNb2R1bGUgbW9kZSAoU1cgb3IgSFcpCisgKiBAcGFydDogQ00gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBBTTMzeHgKICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKICAqCiAgKiBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgYW0zM3h4X2NtX21vZHVsZV9lbmFibGUodTggbW9kZSwgdTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgdm9pZCBhbTMzeHhfY21fbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1OCBwYXJ0LCB1MTYgaW5zdCwKKwkJCQkgICAgdTE2IGNsa2N0cmxfb2ZmcykKIHsKIAl1MzIgdjsKIApAQCAtMjkzLDEzICsyOTYsMTMgQEAKIAogLyoqCiAgKiBhbTMzeHhfY21fbW9kdWxlX2Rpc2FibGUgLSBEaXNhYmxlIHRoZSBtb2R1bGUgaW5zaWRlIENMS0NUUkwKKyAqIEBwYXJ0OiBDTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIEFNMzN4eAogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQogICoKICAqIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBhbTMzeHhfY21fbW9kdWxlX2Rpc2FibGUodTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgdm9pZCBhbTMzeHhfY21fbW9kdWxlX2Rpc2FibGUodTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpCiB7CiAJdTMyIHY7CiAKQEAgLTM2MiwzICszNjUsMjEgQEAKIAkuY2xrZG1fY2xrX2VuYWJsZQk9IGFtMzN4eF9jbGtkbV9jbGtfZW5hYmxlLAogCS5jbGtkbV9jbGtfZGlzYWJsZQk9IGFtMzN4eF9jbGtkbV9jbGtfZGlzYWJsZSwKIH07CisKK3N0YXRpYyBzdHJ1Y3QgY21fbGxfZGF0YSBhbTMzeHhfY21fbGxfZGF0YSA9IHsKKwkud2FpdF9tb2R1bGVfcmVhZHkJPSAmYW0zM3h4X2NtX3dhaXRfbW9kdWxlX3JlYWR5LAorCS53YWl0X21vZHVsZV9pZGxlCT0gJmFtMzN4eF9jbV93YWl0X21vZHVsZV9pZGxlLAorCS5tb2R1bGVfZW5hYmxlCQk9ICZhbTMzeHhfY21fbW9kdWxlX2VuYWJsZSwKKwkubW9kdWxlX2Rpc2FibGUJCT0gJmFtMzN4eF9jbV9tb2R1bGVfZGlzYWJsZSwKK307CisKK2ludCBfX2luaXQgYW0zM3h4X2NtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY21fcmVnaXN0ZXIoJmFtMzN4eF9jbV9sbF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFtMzN4eF9jbV9leGl0KHZvaWQpCit7CisJY21fdW5yZWdpc3RlcigmYW0zM3h4X2NtX2xsX2RhdGEpOworfQorX19leGl0Y2FsbChhbTMzeHhfY21fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguaAppbmRleCBiZDI0NDE3Li4wNDZiNGIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmgKQEAgLTM3NCw0MSArMzc0LDYgQEAKIAogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KLWJvb2wgYW0zM3h4X2NtX2lzX2Nsa2RtX2luX2h3c3VwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLXZvaWQgYW0zM3h4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cCh1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci12b2lkIGFtMzN4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLXZvaWQgYW0zM3h4X2NtX2Nsa2RtX2ZvcmNlX3NsZWVwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLXZvaWQgYW0zM3h4X2NtX2Nsa2RtX2ZvcmNlX3dha2V1cCh1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQU0zM1hYKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfQU00M1hYKQotZXh0ZXJuIGludCBhbTMzeHhfY21fd2FpdF9tb2R1bGVfaWRsZSh1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJdTE2IGNsa2N0cmxfb2Zmcyk7Ci1leHRlcm4gdm9pZCBhbTMzeHhfY21fbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJdTE2IGNsa2N0cmxfb2Zmcyk7Ci1leHRlcm4gdm9pZCBhbTMzeHhfY21fbW9kdWxlX2Rpc2FibGUodTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCXUxNiBjbGtjdHJsX29mZnMpOwotZXh0ZXJuIGludCBhbTMzeHhfY21fd2FpdF9tb2R1bGVfcmVhZHkodTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCXUxNiBjbGtjdHJsX29mZnMpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGFtMzN4eF9jbV93YWl0X21vZHVsZV9pZGxlKHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQl1MTYgY2xrY3RybF9vZmZzKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIGFtMzN4eF9jbV9tb2R1bGVfZW5hYmxlKHU4IG1vZGUsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQl1MTYgY2xrY3RybF9vZmZzKQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGFtMzN4eF9jbV9tb2R1bGVfZGlzYWJsZSh1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJdTE2IGNsa2N0cmxfb2ZmcykKLXsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGFtMzN4eF9jbV93YWl0X21vZHVsZV9yZWFkeSh1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJdTE2IGNsa2N0cmxfb2ZmcykKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCitpbnQgYW0zM3h4X2NtX2luaXQodm9pZCk7CiAjZW5kaWYgLyogQVNTRU1CTEVSICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5jCmluZGV4IDEyOWE0ZTcuLmViZWFkOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguYwpAQCAtNDIsNyArNDIsNyBAQAogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcodiwgbW9kdWxlLCBPTUFQMl9DTV9DTEtTVENUUkwpOwogfQogCi1ib29sIG9tYXAzeHh4X2NtX2lzX2Nsa2RtX2luX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQorc3RhdGljIGJvb2wgb21hcDN4eHhfY21faXNfY2xrZG1faW5faHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCiB7CiAJdTMyIHY7CiAKQEAgLTUzLDIyICs1MywyMiBAQAogCXJldHVybiAodiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pID8gMSA6IDA7CiB9CiAKLXZvaWQgb21hcDN4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQorc3RhdGljIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQogewogCV93cml0ZV9jbGt0cmN0cmwoT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPLCBtb2R1bGUsIG1hc2spOwogfQogCi12b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQogewogCV93cml0ZV9jbGt0cmN0cmwoT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTywgbW9kdWxlLCBtYXNrKTsKIH0KIAotdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9mb3JjZV9zbGVlcChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3NsZWVwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQogewogCV93cml0ZV9jbGt0cmN0cmwoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQLCBtb2R1bGUsIG1hc2spOwogfQogCi12b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3dha2V1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3dha2V1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKIHsKIAlfd3JpdGVfY2xrdHJjdHJsKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAsIG1vZHVsZSwgbWFzayk7CiB9CkBAIC03OSw2ICs3OSw3IEBACiAKIC8qKgogICogb21hcDN4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBsZWF2ZSBpZGxlIG9yIHN0YW5kYnkKKyAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgT01BUDMKICAqIEBwcmNtX21vZDogUFJDTSBtb2R1bGUgb2Zmc2V0CiAgKiBAaWRsZXN0X2lkOiBDTV9JRExFU1R4IHJlZ2lzdGVyIElEIChpLmUuLCB4ID0gMSwgMiwgMykKICAqIEBpZGxlc3Rfc2hpZnQ6IHNoaWZ0IG9mIHRoZSBiaXQgaW4gdGhlIENNX0lETEVTVCogcmVnaXN0ZXIgdG8gY2hlY2sKQEAgLTg3LDcgKzg4LDggQEAKICAqIChAcHJjbV9tb2QsIEBpZGxlc3RfaWQsIEBpZGxlc3Rfc2hpZnQpIGlzIGNsb2NrZWQuICBSZXR1cm4gMCB1cG9uCiAgKiBzdWNjZXNzIG9yIC1FQlVTWSBpZiB0aGUgbW9kdWxlIGRvZXNuJ3QgZW5hYmxlIGluIHRpbWUuCiAgKi8KLWludCBvbWFwM3h4eF9jbV93YWl0X21vZHVsZV9yZWFkeShzMTYgcHJjbV9tb2QsIHU4IGlkbGVzdF9pZCwgdTggaWRsZXN0X3NoaWZ0KQorc3RhdGljIGludCBvbWFwM3h4eF9jbV93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCBzMTYgcHJjbV9tb2QsIHUxNiBpZGxlc3RfaWQsCisJCQkJCSB1OCBpZGxlc3Rfc2hpZnQpCiB7CiAJaW50IGVuYSA9IDAsIGkgPSAwOwogCXU4IGNtX2lkbGVzdF9yZWc7CkBAIC0xMTYsOCArMTE4LDkgQEAKICAqIFhYWCBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVlZGVkIHVudGlsIGFic29sdXRlIHJlZ2lzdGVyIGFkZHJlc3NlcyBhcmUKICAqIHJlbW92ZWQgZnJvbSB0aGUgT01BUCBzdHJ1Y3QgY2xrIHJlY29yZHMuCiAgKi8KLWludCBvbWFwM3h4eF9jbV9zcGxpdF9pZGxlc3RfcmVnKHZvaWQgX19pb21lbSAqaWRsZXN0X3JlZywgczE2ICpwcmNtX2luc3QsCi0JCQkJIHU4ICppZGxlc3RfcmVnX2lkKQorc3RhdGljIGludCBvbWFwM3h4eF9jbV9zcGxpdF9pZGxlc3RfcmVnKHZvaWQgX19pb21lbSAqaWRsZXN0X3JlZywKKwkJCQkJczE2ICpwcmNtX2luc3QsCisJCQkJCXU4ICppZGxlc3RfcmVnX2lkKQogewogCXVuc2lnbmVkIGxvbmcgb2ZmczsKIAl1OCBpZGxlc3Rfb2ZmczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5oCmluZGV4IDdhMTZiNTUuLjczNGE4NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguaApAQCAtNjgsMTggKzY4LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKLWV4dGVybiB2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzayk7Ci1leHRlcm4gdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKLWV4dGVybiB2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3NsZWVwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKLWV4dGVybiB2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3dha2V1cChzMTYgbW9kdWxlLCB1MzIgbWFzayk7Ci0KLWV4dGVybiBib29sIG9tYXAzeHh4X2NtX2lzX2Nsa2RtX2luX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKLWV4dGVybiBpbnQgb21hcDN4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsCi0JCQkJCSB1OCBpZGxlc3Rfc2hpZnQpOwotCi1leHRlcm4gaW50IG9tYXAzeHh4X2NtX3NwbGl0X2lkbGVzdF9yZWcodm9pZCBfX2lvbWVtICppZGxlc3RfcmVnLAotCQkJCQlzMTYgKnByY21faW5zdCwgdTggKmlkbGVzdF9yZWdfaWQpOwotCiBleHRlcm4gdm9pZCBvbWFwM19jbV9zYXZlX2NvbnRleHQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwM19jbV9yZXN0b3JlX2NvbnRleHQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwM19jbV9zYXZlX3NjcmF0Y2hwYWRfY29udGVudHModTMyICpwdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNWNjN2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguYworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBPTUFQNCBDTTEsIENNMiBtb2R1bGUgbG93LWxldmVsIGZ1bmN0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICogUGF1bCBXYWxtc2xleQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIGNtaW5zdDQ0eHguYyBmaWxlLgotICogWFhYIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgbW92ZSB0aGVtIHRoZXJlIGFuZCBtYWtlIHRoZW0gc3RhdGljLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAiY20xXzQ0eHguaCIKLSNpbmNsdWRlICJjbTJfNDR4eC5oIgotCi0vKiBDTTEgaGFyZHdhcmUgbW9kdWxlIGxvdy1sZXZlbCBmdW5jdGlvbnMgKi8KLQotLyogUmVhZCBhIHJlZ2lzdGVyIGluIENNMSAqLwotdTMyIG9tYXA0X2NtMV9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgcmVnKQotewotCXJldHVybiByZWFkbF9yZWxheGVkKGNtX2Jhc2UgKyBpbnN0ICsgcmVnKTsKLX0KLQotLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIENNMSAqLwotdm9pZCBvbWFwNF9jbTFfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiByZWcpCi17Ci0Jd3JpdGVsX3JlbGF4ZWQodmFsLCBjbV9iYXNlICsgaW5zdCArIHJlZyk7Ci19Ci0KLS8qIFJlYWQgYSByZWdpc3RlciBpbiBDTTIgKi8KLXUzMiBvbWFwNF9jbTJfcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IHJlZykKLXsKLQlyZXR1cm4gcmVhZGxfcmVsYXhlZChjbTJfYmFzZSArIGluc3QgKyByZWcpOwotfQotCi0vKiBXcml0ZSBpbnRvIGEgcmVnaXN0ZXIgaW4gQ00yICovCi12b2lkIG9tYXA0X2NtMl93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IHJlZykKLXsKLQl3cml0ZWxfcmVsYXhlZCh2YWwsIGNtMl9iYXNlICsgaW5zdCArIHJlZyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguaAppbmRleCAzMzgwYmVlLi43MjhkMDZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmgKQEAgLTIzLDQgKzIzLDcgQEAKICNkZWZpbmUgT01BUDRfQ01fQ0xLU1RDVFJMCQkJCTB4MDAwMAogI2RlZmluZSBPTUFQNF9DTV9TVEFUSUNERVAJCQkJMHgwMDA0CiAKK3ZvaWQgb21hcF9jbV9iYXNlX2luaXQodm9pZCk7CitpbnQgb21hcDRfY21faW5pdCh2b2lkKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtXzQ0eHhfNTR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbV80NHh4XzU0eHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JiMjExNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtXzQ0eHhfNTR4eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIE9NQVA0NHh4IGFuZCBPTUFQNTR4eCBDTTEvQ00yIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBQYXVsIFdhbG1zbGV5IChwYXVsQHB3c2FuLmNvbSkKLSAqIFJhamVuZHJhIE5heWFrIChybmF5YWtAdGkuY29tKQotICogQmVub2l0IENvdXNzb24gKGItY291c3NvbkB0aS5jb20pCi0gKgotICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIE9NQVAgaGFyZHdhcmUgZGF0YWJhc2VzLgotICogV2UgcmVzcGVjdGZ1bGx5IGFzayB0aGF0IGFueSBtb2RpZmljYXRpb25zIHRvIHRoaXMgZmlsZSBiZSBjb29yZGluYXRlZAotICogd2l0aCB0aGUgcHVibGljIGxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnIG1haWxpbmcgbGlzdCBhbmQgdGhlCi0gKiBhdXRob3JzIGFib3ZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhdXRvZ2VuZXJhdGlvbiBzY3JpcHRzIGFyZSBrZXB0Ci0gKiB1cC10by1kYXRlIHdpdGggdGhlIGZpbGUgY29udGVudHMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ01fNDRYWF81NFhYX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNXzQ0WFhfNTVYWF9ICi0KLS8qIENNMSBGdW5jdGlvbiBwcm90b3R5cGVzICovCi1leHRlcm4gdTMyIG9tYXA0X2NtMV9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgaWR4KTsKLWV4dGVybiB2b2lkIG9tYXA0X2NtMV93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IGlkeCk7Ci1leHRlcm4gdTMyIG9tYXA0X2NtMV9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgaWR4KTsKLQotLyogQ00yIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLWV4dGVybiB1MzIgb21hcDRfY20yX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiBpZHgpOwotZXh0ZXJuIHZvaWQgb21hcDRfY20yX3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgaWR4KTsKLWV4dGVybiB1MzIgb21hcDRfY20yX3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IGluc3QsIHMxNiBpZHgpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21fY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtX2NvbW1vbi5jCmluZGV4IDhmNmM0NzEuLjhmZTAyZmNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtX2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21fY29tbW9uLmMKQEAgLTcyLDkgKzcyLDEwIEBACiB9CiAKIC8qKgotICogY21fd2FpdF9tb2R1bGVfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBsZWF2ZSBpZGxlIG9yIHN0YW5kYnkKKyAqIG9tYXBfY21fd2FpdF9tb2R1bGVfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBsZWF2ZSBpZGxlIG9yIHN0YW5kYnkKKyAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbgogICogQHByY21fbW9kOiBQUkNNIG1vZHVsZSBvZmZzZXQKLSAqIEBpZGxlc3RfaWQ6IENNX0lETEVTVHggcmVnaXN0ZXIgSUQgKGkuZS4sIHggPSAxLCAyLCAzKQorICogQGlkbGVzdF9yZWc6IENNX0lETEVTVHggcmVnaXN0ZXIKICAqIEBpZGxlc3Rfc2hpZnQ6IHNoaWZ0IG9mIHRoZSBiaXQgaW4gdGhlIENNX0lETEVTVCogcmVnaXN0ZXIgdG8gY2hlY2sKICAqCiAgKiBXYWl0IGZvciB0aGUgUFJDTSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtb2R1bGUgaWRlbnRpZmllZCBieQpAQCAtODMsNyArODQsOCBAQAogICogbm8gcGVyLVNvQyB3YWl0X21vZHVsZV9yZWFkeSgpIGZ1bmN0aW9uIHBvaW50ZXIgaGFzIGJlZW4gcmVnaXN0ZXJlZAogICogb3IgaWYgdGhlIGlkbGVzdCByZWdpc3RlciBpcyB1bmtub3duIG9uIHRoZSBTb0MuCiAgKi8KLWludCBjbV93YWl0X21vZHVsZV9yZWFkeShzMTYgcHJjbV9tb2QsIHU4IGlkbGVzdF9pZCwgdTggaWRsZXN0X3NoaWZ0KQoraW50IG9tYXBfY21fd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYgaWRsZXN0X3JlZywKKwkJCSAgICAgIHU4IGlkbGVzdF9zaGlmdCkKIHsKIAlpZiAoIWNtX2xsX2RhdGEtPndhaXRfbW9kdWxlX3JlYWR5KSB7CiAJCVdBUk5fT05DRSgxLCAiY206ICVzOiBubyBsb3ctbGV2ZWwgZnVuY3Rpb24gZGVmaW5lZFxuIiwKQEAgLTkxLDcgKzkzLDc5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiBjbV9sbF9kYXRhLT53YWl0X21vZHVsZV9yZWFkeShwcmNtX21vZCwgaWRsZXN0X2lkLCBpZGxlc3Rfc2hpZnQpOworCXJldHVybiBjbV9sbF9kYXRhLT53YWl0X21vZHVsZV9yZWFkeShwYXJ0LCBwcmNtX21vZCwgaWRsZXN0X3JlZywKKwkJCQkJICAgICBpZGxlc3Rfc2hpZnQpOworfQorCisvKioKKyAqIG9tYXBfY21fd2FpdF9tb2R1bGVfaWRsZSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGVudGVyIGlkbGUgb3Igc3RhbmRieQorICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uCisgKiBAcHJjbV9tb2Q6IFBSQ00gbW9kdWxlIG9mZnNldAorICogQGlkbGVzdF9yZWc6IENNX0lETEVTVHggcmVnaXN0ZXIKKyAqIEBpZGxlc3Rfc2hpZnQ6IHNoaWZ0IG9mIHRoZSBiaXQgaW4gdGhlIENNX0lETEVTVCogcmVnaXN0ZXIgdG8gY2hlY2sKKyAqCisgKiBXYWl0IGZvciB0aGUgUFJDTSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtb2R1bGUgaWRlbnRpZmllZCBieQorICogKEBwcmNtX21vZCwgQGlkbGVzdF9pZCwgQGlkbGVzdF9zaGlmdCkgaXMgbm8gbG9uZ2VyIGNsb2NrZWQuICBSZXR1cm4KKyAqIDAgdXBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgdGhlIG1vZHVsZSBkb2Vzbid0IGVuYWJsZSBpbiB0aW1lLCBvcgorICogLUVJTlZBTCBpZiBubyBwZXItU29DIHdhaXRfbW9kdWxlX2lkbGUoKSBmdW5jdGlvbiBwb2ludGVyIGhhcyBiZWVuCisgKiByZWdpc3RlcmVkIG9yIGlmIHRoZSBpZGxlc3QgcmVnaXN0ZXIgaXMgdW5rbm93biBvbiB0aGUgU29DLgorICovCitpbnQgb21hcF9jbV93YWl0X21vZHVsZV9pZGxlKHU4IHBhcnQsIHMxNiBwcmNtX21vZCwgdTE2IGlkbGVzdF9yZWcsCisJCQkgICAgIHU4IGlkbGVzdF9zaGlmdCkKK3sKKwlpZiAoIWNtX2xsX2RhdGEtPndhaXRfbW9kdWxlX2lkbGUpIHsKKwkJV0FSTl9PTkNFKDEsICJjbTogJXM6IG5vIGxvdy1sZXZlbCBmdW5jdGlvbiBkZWZpbmVkXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBjbV9sbF9kYXRhLT53YWl0X21vZHVsZV9pZGxlKHBhcnQsIHByY21fbW9kLCBpZGxlc3RfcmVnLAorCQkJCQkgICAgaWRsZXN0X3NoaWZ0KTsKK30KKworLyoqCisgKiBvbWFwX2NtX21vZHVsZV9lbmFibGUgLSBlbmFibGUgYSBtb2R1bGUKKyAqIEBtb2RlOiB0YXJnZXQgbW9kZSBmb3IgdGhlIG1vZHVsZQorICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uCisgKiBAaW5zdDogUFJDTSBpbnN0YW5jZQorICogQGNsa2N0cmxfb2ZmczogQ01fQ0xLQ1RSTCByZWdpc3RlciBvZmZzZXQgZm9yIHRoZSBtb2R1bGUKKyAqCisgKiBFbmFibGVzIGNsb2NrcyBmb3IgYSBtb2R1bGUgaWRlbnRpZmllZCBieSAoQHBhcnQsIEBpbnN0LCBAY2xrY3RybF9vZmZzKQorICogbWFraW5nIGl0cyBJTyBzcGFjZSBhY2Nlc3NpYmxlLiBSZXR1cm4gMCB1cG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgbm8KKyAqIHBlci1Tb0MgbW9kdWxlX2VuYWJsZSgpIGZ1bmN0aW9uIHBvaW50ZXIgaGFzIGJlZW4gcmVnaXN0ZXJlZC4KKyAqLworaW50IG9tYXBfY21fbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcykKK3sKKwlpZiAoIWNtX2xsX2RhdGEtPm1vZHVsZV9lbmFibGUpIHsKKwkJV0FSTl9PTkNFKDEsICJjbTogJXM6IG5vIGxvdy1sZXZlbCBmdW5jdGlvbiBkZWZpbmVkXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNtX2xsX2RhdGEtPm1vZHVsZV9lbmFibGUobW9kZSwgcGFydCwgaW5zdCwgY2xrY3RybF9vZmZzKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbWFwX2NtX21vZHVsZV9kaXNhYmxlIC0gZGlzYWJsZSBhIG1vZHVsZQorICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uCisgKiBAaW5zdDogUFJDTSBpbnN0YW5jZQorICogQGNsa2N0cmxfb2ZmczogQ01fQ0xLQ1RSTCByZWdpc3RlciBvZmZzZXQgZm9yIHRoZSBtb2R1bGUKKyAqCisgKiBEaXNhYmxlcyBjbG9ja3MgZm9yIGEgbW9kdWxlIGlkZW50aWZpZWQgYnkgKEBwYXJ0LCBAaW5zdCwgQGNsa2N0cmxfb2ZmcykKKyAqIG1ha2luZ3MgaXRzIElPIHNwYWNlIGluYWNjZXNzaWJsZS4gUmV0dXJuIDAgdXBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmCisgKiBubyBwZXItU29DIG1vZHVsZV9kaXNhYmxlKCkgZnVuY3Rpb24gcG9pbnRlciBoYXMgYmVlbiByZWdpc3RlcmVkLgorICovCitpbnQgb21hcF9jbV9tb2R1bGVfZGlzYWJsZSh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcykKK3sKKwlpZiAoIWNtX2xsX2RhdGEtPm1vZHVsZV9kaXNhYmxlKSB7CisJCVdBUk5fT05DRSgxLCAiY206ICVzOiBubyBsb3ctbGV2ZWwgZnVuY3Rpb24gZGVmaW5lZFxuIiwKKwkJCSAgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljbV9sbF9kYXRhLT5tb2R1bGVfZGlzYWJsZShwYXJ0LCBpbnN0LCBjbGtjdHJsX29mZnMpOworCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmMKaW5kZXggMTJhY2E1Ni4uOTVhOGNmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjbTFfNDR4eC5oIgogI2luY2x1ZGUgImNtMl80NHh4LmgiCiAjaW5jbHVkZSAiY200NHh4LmgiCi0jaW5jbHVkZSAiY21pbnN0NDR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogI2luY2x1ZGUgInByY200NHh4LmgiCiAjaW5jbHVkZSAicHJtNDR4eC5oIgpAQCAtNzQsMTcgKzczLDE4IEBACiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zICovCiAKK3N0YXRpYyB1MzIgb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWcodTggcGFydCwgdTE2IGluc3QsIHUxNiBpZHgpOworCiAvKioKICAqIF9jbGtjdHJsX2lkbGVzdCAtIHJlYWQgYSBDTV8qX0NMS0NUUkwgcmVnaXN0ZXI7IG1hc2sgJiBzaGlmdCBJRExFU1QgYml0ZmllbGQKICAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbiBJRCB0aGF0IHRoZSBDTV9DTEtDVFJMIHJlZ2lzdGVyIGV4aXN0cyBpbgogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQogICoKICAqIFJldHVybiB0aGUgSURMRVNUIGJpdGZpZWxkIG9mIGEgQ01fKl9DTEtDVFJMIHJlZ2lzdGVyLCBzaGlmdGVkIGRvd24gdG8KICAqIGJpdCAwLgogICovCi1zdGF0aWMgdTMyIF9jbGtjdHJsX2lkbGVzdCh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyB1MzIgX2Nsa2N0cmxfaWRsZXN0KHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKQogewogCXUzMiB2ID0gb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWcocGFydCwgaW5zdCwgY2xrY3RybF9vZmZzKTsKIAl2ICY9IE9NQVA0NDMwX0lETEVTVF9NQVNLOwpAQCAtOTYsMjYgKzk2LDIzIEBACiAgKiBfaXNfbW9kdWxlX3JlYWR5IC0gY2FuIG1vZHVsZSByZWdpc3RlcnMgYmUgYWNjZXNzZWQgd2l0aG91dCBjYXVzaW5nIGFuIGFib3J0PwogICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uIElEIHRoYXQgdGhlIENNX0NMS0NUUkwgcmVnaXN0ZXIgZXhpc3RzIGluCiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCiAgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBtb2R1bGUncyBDTV8qX0NMS0NUUkwuSURMRVNUIGJpdGZpZWxkIGlzIGVpdGhlcgogICogKkZVTkNUSU9OQUwgb3IgKklOVEVSRkFDRV9JRExFOyBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIF9pc19tb2R1bGVfcmVhZHkodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgYm9vbCBfaXNfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKQogewogCXUzMiB2OwogCi0JdiA9IF9jbGtjdHJsX2lkbGVzdChwYXJ0LCBpbnN0LCBjZG9mZnMsIGNsa2N0cmxfb2Zmcyk7CisJdiA9IF9jbGtjdHJsX2lkbGVzdChwYXJ0LCBpbnN0LCBjbGtjdHJsX29mZnMpOwogCiAJcmV0dXJuICh2ID09IENMS0NUUkxfSURMRVNUX0ZVTkNUSU9OQUwgfHwKIAkJdiA9PSBDTEtDVFJMX0lETEVTVF9JTlRFUkZBQ0VfSURMRSkgPyB0cnVlIDogZmFsc2U7CiB9CiAKLS8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KLQogLyogUmVhZCBhIHJlZ2lzdGVyIGluIGEgQ00gaW5zdGFuY2UgKi8KLXUzMiBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZyh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGlkeCkKK3N0YXRpYyB1MzIgb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWcodTggcGFydCwgdTE2IGluc3QsIHUxNiBpZHgpCiB7CiAJQlVHX09OKHBhcnQgPj0gT01BUDRfTUFYX1BSQ01fUEFSVElUSU9OUyB8fAogCSAgICAgICBwYXJ0ID09IE9NQVA0NDMwX0lOVkFMSURfUFJDTV9QQVJUSVRJT04gfHwKQEAgLTEyNCw3ICsxMjEsNyBAQAogfQogCiAvKiBXcml0ZSBpbnRvIGEgcmVnaXN0ZXIgaW4gYSBDTSBpbnN0YW5jZSAqLwotdm9pZCBvbWFwNF9jbWluc3Rfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgdTggcGFydCwgdTE2IGluc3QsIHUxNiBpZHgpCitzdGF0aWMgdm9pZCBvbWFwNF9jbWluc3Rfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgdTggcGFydCwgdTE2IGluc3QsIHUxNiBpZHgpCiB7CiAJQlVHX09OKHBhcnQgPj0gT01BUDRfTUFYX1BSQ01fUEFSVElUSU9OUyB8fAogCSAgICAgICBwYXJ0ID09IE9NQVA0NDMwX0lOVkFMSURfUFJDTV9QQVJUSVRJT04gfHwKQEAgLTEzMyw4ICsxMzAsOCBAQAogfQogCiAvKiBSZWFkLW1vZGlmeS13cml0ZSBhIHJlZ2lzdGVyIGluIENNMS4gQ2FsbGVyIG11c3QgbG9jayAqLwotdTMyIG9tYXA0X2NtaW5zdF9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHU4IHBhcnQsIHUxNiBpbnN0LAotCQkJCSAgIHMxNiBpZHgpCitzdGF0aWMgdTMyIG9tYXA0X2NtaW5zdF9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHU4IHBhcnQsIHUxNiBpbnN0LAorCQkJCQkgIHMxNiBpZHgpCiB7CiAJdTMyIHY7CiAKQEAgLTE0NiwxNyArMTQzLDE4IEBACiAJcmV0dXJuIHY7CiB9CiAKLXUzMiBvbWFwNF9jbWluc3Rfc2V0X2luc3RfcmVnX2JpdHModTMyIGJpdHMsIHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgaWR4KQorc3RhdGljIHUzMiBvbWFwNF9jbWluc3Rfc2V0X2luc3RfcmVnX2JpdHModTMyIGJpdHMsIHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgaWR4KQogewogCXJldHVybiBvbWFwNF9jbWluc3Rfcm13X2luc3RfcmVnX2JpdHMoYml0cywgYml0cywgcGFydCwgaW5zdCwgaWR4KTsKIH0KIAotdTMyIG9tYXA0X2NtaW5zdF9jbGVhcl9pbnN0X3JlZ19iaXRzKHUzMiBiaXRzLCB1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGlkeCkKK3N0YXRpYyB1MzIgb21hcDRfY21pbnN0X2NsZWFyX2luc3RfcmVnX2JpdHModTMyIGJpdHMsIHU4IHBhcnQsIHUxNiBpbnN0LAorCQkJCQkgICAgczE2IGlkeCkKIHsKIAlyZXR1cm4gb21hcDRfY21pbnN0X3Jtd19pbnN0X3JlZ19iaXRzKGJpdHMsIDB4MCwgcGFydCwgaW5zdCwgaWR4KTsKIH0KIAotdTMyIG9tYXA0X2NtaW5zdF9yZWFkX2luc3RfcmVnX2JpdHModTggcGFydCwgdTE2IGluc3QsIHMxNiBpZHgsIHUzMiBtYXNrKQorc3RhdGljIHUzMiBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZ19iaXRzKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgaWR4LCB1MzIgbWFzaykKIHsKIAl1MzIgdjsKIApAQCAtMjAwLDcgKzE5OCw3IEBACiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNsb2NrZG9tYWluIHJlZmVycmVkIHRvIGJ5IChAcGFydCwgQGluc3QsIEBjZG9mZnMpCiAgKiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIGlkbGUgbW9kZSwgb3IgMCBvdGhlcndpc2UuCiAgKi8KLWJvb2wgb21hcDRfY21pbnN0X2lzX2Nsa2RtX2luX2h3c3VwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIGJvb2wgb21hcDRfY21pbnN0X2lzX2Nsa2RtX2luX2h3c3VwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCXUzMiB2OwogCkBAIC0yMjAsNyArMjE4LDcgQEAKICAqIFB1dCBhIGNsb2NrZG9tYWluIHJlZmVycmVkIHRvIGJ5IChAcGFydCwgQGluc3QsIEBjZG9mZnMpIGludG8KICAqIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9lbmFibGVfaHdzdXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZW5hYmxlX2h3c3VwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPLCBwYXJ0LCBpbnN0LCBjZG9mZnMpOwogfQpAQCAtMjM1LDcgKzIzMyw3IEBACiAgKiBzb2Z0d2FyZS1zdXBlcnZpc2VkIGlkbGUgbW9kZSwgaS5lLiwgY29udHJvbGxlZCBtYW51YWxseSBieSB0aGUKICAqIExpbnV4IE9NQVAgY2xvY2tkb21haW4gY29kZS4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZGlzYWJsZV9od3N1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyB2b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9kaXNhYmxlX2h3c3VwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTywgcGFydCwgaW5zdCwgY2RvZmZzKTsKIH0KQEAgLTI0OSw3ICsyNDcsNyBAQAogICogVGFrZSBhIGNsb2NrZG9tYWluIHJlZmVycmVkIHRvIGJ5IChAcGFydCwgQGluc3QsIEBjZG9mZnMpIG91dCBvZiBpZGxlLAogICogd2FraW5nIGl0IHVwLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV93YWtldXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfd2FrZXVwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1dBS0VVUCwgcGFydCwgaW5zdCwgY2RvZmZzKTsKIH0KQEAgLTI1OCw3ICsyNTYsNyBAQAogICoKICAqLwogCi12b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV9zbGVlcCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyB2b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV9zbGVlcCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAlfY2xrdHJjdHJsX3dyaXRlKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9TTEVFUCwgcGFydCwgaW5zdCwgY2RvZmZzKTsKIH0KQEAgLTI2NywyMyArMjY1LDIzIEBACiAgKiBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBiZSBpbiAnZnVuYycgc3RhdGUKICAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbiBJRCB0aGF0IHRoZSBDTV9DTEtDVFJMIHJlZ2lzdGVyIGV4aXN0cyBpbgogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQorICogQGJpdF9zaGlmdDogYml0IHNoaWZ0IGZvciB0aGUgcmVnaXN0ZXIsIGlnbm9yZWQgZm9yIE9NQVA0KwogICoKICAqIFdhaXQgZm9yIHRoZSBtb2R1bGUgSURMRVNUIHRvIGJlIGZ1bmN0aW9uYWwuIElmIHRoZSBpZGxlIHN0YXRlIGlzIGluIGFueQogICogdGhlIG5vbiBmdW5jdGlvbmFsIHN0YXRlICh0cmFucywgaWRsZSBvciBkaXNhYmxlZCksIG1vZHVsZSBhbmQgdGh1cyB0aGUKICAqIHN5c2NvbmZpZyBjYW5ub3QgYmUgYWNjZXNzZWQgYW5kIHdpbGwgcHJvYmFibHkgbGVhZCB0byBhbiAiaW1wcmVjaXNlCiAgKiBleHRlcm5hbCBhYm9ydCIKICAqLwotaW50IG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkgICB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIGludCBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgczE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMsCisJCQkJCSAgdTggYml0X3NoaWZ0KQogewogCWludCBpID0gMDsKIAogCWlmICghY2xrY3RybF9vZmZzKQogCQlyZXR1cm4gMDsKIAotCW9tYXBfdGVzdF90aW1lb3V0KF9pc19tb2R1bGVfcmVhZHkocGFydCwgaW5zdCwgY2RvZmZzLCBjbGtjdHJsX29mZnMpLAorCW9tYXBfdGVzdF90aW1lb3V0KF9pc19tb2R1bGVfcmVhZHkocGFydCwgaW5zdCwgY2xrY3RybF9vZmZzKSwKIAkJCSAgTUFYX01PRFVMRV9SRUFEWV9USU1FLCBpKTsKIAogCXJldHVybiAoaSA8IE1BWF9NT0RVTEVfUkVBRFlfVElNRSkgPyAwIDogLUVCVVNZOwpAQCAtMjk0LDIxICsyOTIsMjIgQEAKICAqIHN0YXRlCiAgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgQ01fQ0xLQ1RSTCByZWdpc3RlciBleGlzdHMgaW4KICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKKyAqIEBiaXRfc2hpZnQ6IEJpdCBzaGlmdCBmb3IgdGhlIHJlZ2lzdGVyLCBpZ25vcmVkIGZvciBPTUFQNCsKICAqCiAgKiBXYWl0IGZvciB0aGUgbW9kdWxlIElETEVTVCB0byBiZSBkaXNhYmxlZC4gU29tZSBQUkNNIHRyYW5zaXRpb24sCiAgKiBsaWtlIHJlc2V0IGFzc2VydGlvbiBvciBwYXJlbnQgY2xvY2sgZGUtYWN0aXZhdGlvbiBtdXN0IHdhaXQgdGhlCiAgKiBtb2R1bGUgdG8gYmUgZnVsbHkgZGlzYWJsZWQuCiAgKi8KLWludCBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfaWRsZSh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyBpbnQgb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX2lkbGUodTggcGFydCwgczE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMsCisJCQkJCSB1OCBiaXRfc2hpZnQpCiB7CiAJaW50IGkgPSAwOwogCiAJaWYgKCFjbGtjdHJsX29mZnMpCiAJCXJldHVybiAwOwogCi0Jb21hcF90ZXN0X3RpbWVvdXQoKF9jbGtjdHJsX2lkbGVzdChwYXJ0LCBpbnN0LCBjZG9mZnMsIGNsa2N0cmxfb2ZmcykgPT0KKwlvbWFwX3Rlc3RfdGltZW91dCgoX2Nsa2N0cmxfaWRsZXN0KHBhcnQsIGluc3QsIGNsa2N0cmxfb2ZmcykgPT0KIAkJCSAgIENMS0NUUkxfSURMRVNUX0RJU0FCTEVEKSwKIAkJCSAgTUFYX01PRFVMRV9ESVNBQkxFX1RJTUUsIGkpOwogCkBAIC0zMjAsMTMgKzMxOSwxMiBAQAogICogQG1vZGU6IE1vZHVsZSBtb2RlIChTVyBvciBIVykKICAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbiBJRCB0aGF0IHRoZSBDTV9DTEtDVFJMIHJlZ2lzdGVyIGV4aXN0cyBpbgogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQogICoKICAqIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwNF9jbWluc3RfbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCSAgICB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIHZvaWQgb21hcDRfY21pbnN0X21vZHVsZV9lbmFibGUodTggbW9kZSwgdTggcGFydCwgdTE2IGluc3QsCisJCQkJICAgICAgIHUxNiBjbGtjdHJsX29mZnMpCiB7CiAJdTMyIHY7CiAKQEAgLTM0MCwxMyArMzM4LDExIEBACiAgKiBvbWFwNF9jbWluc3RfbW9kdWxlX2Rpc2FibGUgLSBEaXNhYmxlIHRoZSBtb2R1bGUgaW5zaWRlIENMS0NUUkwKICAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbiBJRCB0aGF0IHRoZSBDTV9DTEtDVFJMIHJlZ2lzdGVyIGV4aXN0cyBpbgogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQogICoKICAqIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwNF9jbWluc3RfbW9kdWxlX2Rpc2FibGUodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkgICAgIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgdm9pZCBvbWFwNF9jbWluc3RfbW9kdWxlX2Rpc2FibGUodTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpCiB7CiAJdTMyIHY7CiAKQEAgLTUxMCwzICs1MDYsMjEgQEAKIAkuY2xrZG1fY2xrX2VuYWJsZQk9IG9tYXA0X2Nsa2RtX2Nsa19lbmFibGUsCiAJLmNsa2RtX2Nsa19kaXNhYmxlCT0gb21hcDRfY2xrZG1fY2xrX2Rpc2FibGUsCiB9OworCitzdGF0aWMgc3RydWN0IGNtX2xsX2RhdGEgb21hcDR4eHhfY21fbGxfZGF0YSA9IHsKKwkud2FpdF9tb2R1bGVfcmVhZHkJPSAmb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX3JlYWR5LAorCS53YWl0X21vZHVsZV9pZGxlCT0gJm9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9pZGxlLAorCS5tb2R1bGVfZW5hYmxlCQk9ICZvbWFwNF9jbWluc3RfbW9kdWxlX2VuYWJsZSwKKwkubW9kdWxlX2Rpc2FibGUJCT0gJm9tYXA0X2NtaW5zdF9tb2R1bGVfZGlzYWJsZSwKK307CisKK2ludCBfX2luaXQgb21hcDRfY21faW5pdCh2b2lkKQoreworCXJldHVybiBjbV9yZWdpc3Rlcigmb21hcDR4eHhfY21fbGxfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvbWFwNF9jbV9leGl0KHZvaWQpCit7CisJY21fdW5yZWdpc3Rlcigmb21hcDR4eHhfY21fbGxfZGF0YSk7Cit9CitfX2V4aXRjYWxsKG9tYXA0X2NtX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y1NmVhNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBPTUFQNCBDbG9jayBNYW5hZ2VtZW50IChDTSkgZnVuY3Rpb24gcHJvdG90eXBlcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICogUGF1bCBXYWxtc2xleQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpZm5kZWYgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNSU5TVDQ0WFhfSAotI2RlZmluZSBfX0FSQ0hfQVNNX01BQ0hfT01BUDJfQ01JTlNUNDRYWF9ICi0KLWJvb2wgb21hcDRfY21pbnN0X2lzX2Nsa2RtX2luX2h3c3VwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLXZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2VuYWJsZV9od3N1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci12b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9kaXNhYmxlX2h3c3VwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLXZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3NsZWVwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLXZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3dha2V1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci1leHRlcm4gaW50IG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2Zmcyk7Ci1leHRlcm4gaW50IG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9pZGxlKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQkgdTE2IGNsa2N0cmxfb2Zmcyk7Ci1leHRlcm4gdm9pZCBvbWFwNF9jbWluc3RfbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkgICAgICAgdTE2IGNsa2N0cmxfb2Zmcyk7Ci1leHRlcm4gdm9pZCBvbWFwNF9jbWluc3RfbW9kdWxlX2Rpc2FibGUodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCXUxNiBjbGtjdHJsX29mZnMpOwotLyoKLSAqIEluIGFuIGlkZWFsIHdvcmxkLCB3ZSB3b3VsZCBub3QgZXhwb3J0IHRoZXNlIGxvdy1sZXZlbCBmdW5jdGlvbnMsCi0gKiBidXQgdGhpcyB3aWxsIHByb2JhYmx5IHRha2Ugc29tZSB0aW1lIHRvIGZpeCBwcm9wZXJseQotICovCi11MzIgb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWcodTggcGFydCwgdTE2IGluc3QsIHUxNiBpZHgpOwotdm9pZCBvbWFwNF9jbWluc3Rfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgdTggcGFydCwgdTE2IGluc3QsIHUxNiBpZHgpOwotdTMyIG9tYXA0X2NtaW5zdF9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHU4IHBhcnQsCi0JCQkJICAgdTE2IGluc3QsIHMxNiBpZHgpOwotdTMyIG9tYXA0X2NtaW5zdF9zZXRfaW5zdF9yZWdfYml0cyh1MzIgYml0cywgdTggcGFydCwgdTE2IGluc3QsCi0JCQkJICAgczE2IGlkeCk7Ci11MzIgb21hcDRfY21pbnN0X2NsZWFyX2luc3RfcmVnX2JpdHModTMyIGJpdHMsIHU4IHBhcnQsIHUxNiBpbnN0LAotCQkJCSAgICAgczE2IGlkeCk7Ci1leHRlcm4gdTMyIG9tYXA0X2NtaW5zdF9yZWFkX2luc3RfcmVnX2JpdHModTggcGFydCwgdTE2IGluc3QsIHMxNiBpZHgsCi0JCQkJCSAgIHUzMiBtYXNrKTsKLQotZXh0ZXJuIHZvaWQgb21hcF9jbV9iYXNlX2luaXQodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCAzMjRmMDJiLi5hN2JjNGNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtNDksNyArNDksNyBAQAogCSAqIFRvIGF2b2lkIGNvZGUgcnVubmluZyBvbiBvdGhlciBPTUFQcyBpbgogCSAqIG11bHRpLW9tYXAgYnVpbGRzCiAJICovCi0JaWYgKCEoY3B1X2lzX29tYXAzNHh4KCkpKQorCWlmICghKGNwdV9pc19vbWFwMzR4eCgpKSB8fCBvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXNucHJpbnRmKG9oX25hbWUsIEwzX01PRFVMRVNfTUFYX0xFTiwgImwzX21haW4iKTsKQEAgLTY3LDQwICs2Nyw2IEBACiB9CiBvbWFwX3Bvc3Rjb3JlX2luaXRjYWxsKG9tYXAzX2wzX2luaXQpOwogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwNF9sM19pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IG9tYXBfaHdtb2QgKm9oWzNdOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JY2hhciBvaF9uYW1lW0wzX01PRFVMRVNfTUFYX0xFTl07Ci0KLQkvKiBJZiBkdGIgaXMgdGhlcmUsIHRoZSBkZXZpY2VzIHdpbGwgYmUgY3JlYXRlZCBkeW5hbWljYWxseSAqLwotCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0JICogVG8gYXZvaWQgY29kZSBydW5uaW5nIG9uIG90aGVyIE9NQVBzIGluCi0JICogbXVsdGktb21hcCBidWlsZHMKLQkgKi8KLQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpICYmICFzb2NfaXNfb21hcDU0eHgoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTDNfTU9EVUxFUzsgaSsrKSB7Ci0JCXNucHJpbnRmKG9oX25hbWUsIEwzX01PRFVMRVNfTUFYX0xFTiwgImwzX21haW5fJWQiLCBpKzEpOwotCi0JCW9oW2ldID0gb21hcF9od21vZF9sb29rdXAob2hfbmFtZSk7Ci0JCWlmICghKG9oW2ldKSkKLQkJCXByX2VycigiY291bGQgbm90IGxvb2sgdXAgJXNcbiIsIG9oX25hbWUpOwotCX0KLQotCXBkZXYgPSBvbWFwX2RldmljZV9idWlsZF9zcygib21hcF9sM19ub2MiLCAwLCBvaCwgMywgTlVMTCwgMCk7Ci0KLQlXQVJOKElTX0VSUihwZGV2KSwgImNvdWxkIG5vdCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXNcbiIsIG9oX25hbWUpOwotCi0JcmV0dXJuIFBUUl9SRVQocGRldik7Ci19Ci1vbWFwX3Bvc3Rjb3JlX2luaXRjYWxsKG9tYXA0X2wzX2luaXQpOwotCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX09NQVAyX01PRFVMRSkKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwMmNhbV9yZXNvdXJjZXNbXSA9IHsKQEAgLTQ0NSwzICs0MTEsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIG9tYXBfYXJjaF9pbml0Y2FsbChvbWFwMl9pbml0X2RldmljZXMpOworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2dwbWNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBvbWFwX2h3bW9kICpvaDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWNoYXIgKm9oX25hbWUgPSAiZ3BtYyI7CisKKwkvKgorCSAqIGlmIHRoZSBib2FyZCBib290cyB1cCB3aXRoIGEgcG9wdWxhdGVkIERULCBkbyBub3QKKwkgKiBtYW51YWxseSBhZGQgdGhlIGRldmljZSBmcm9tIHRoaXMgaW5pdGNhbGwKKwkgKi8KKwlpZiAob2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvaCA9IG9tYXBfaHdtb2RfbG9va3VwKG9oX25hbWUpOworCWlmICghb2gpIHsKKwkJcHJfZXJyKCJDb3VsZCBub3QgbG9vayB1cCAlc1xuIiwgb2hfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBkZXYgPSBvbWFwX2RldmljZV9idWlsZCgib21hcC1ncG1jIiwgLTEsIG9oLCBOVUxMLCAwKTsKKwlXQVJOKElTX0VSUihwZGV2KSwgImNvdWxkIG5vdCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXNcbiIsIG9oX25hbWUpOworCisJcmV0dXJuIFBUUl9SRVQocGRldik7Cit9CitvbWFwX3Bvc3Rjb3JlX2luaXRjYWxsKG9tYXBfZ3BtY19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDN4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDN4eHguYwppbmRleCBhYzNkNzg5Li4yMGUxMjBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsM3h4eC5jCkBAIC00NjAsMjUgKzQ2MCwyNCBAQAogLyogTm9uLUNPUkUgRFBMTCByYXRlIHNldCBjb2RlICovCiAKIC8qKgotICogb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlIC0gc2V0IG5vbi1jb3JlIERQTEwgcmF0ZQotICogQGNsazogc3RydWN0IGNsayAqIG9mIERQTEwgdG8gc2V0Ci0gKiBAcmF0ZTogcm91bmRlZCB0YXJnZXQgcmF0ZQorICogb21hcDNfbm9uY29yZV9kcGxsX2RldGVybWluZV9yYXRlIC0gZGV0ZXJtaW5lIHJhdGUgZm9yIGEgRFBMTAorICogQGh3OiBwb2ludGVyIHRvIHRoZSBjbG9jayB0byBkZXRlcm1pbmUgcmF0ZSBmb3IKKyAqIEByYXRlOiB0YXJnZXQgcmF0ZSBmb3IgdGhlIERQTEwKKyAqIEBiZXN0X3BhcmVudF9yYXRlOiBwb2ludGVyIGZvciByZXR1cm5pbmcgYmVzdCBwYXJlbnQgcmF0ZQorICogQGJlc3RfcGFyZW50X2NsazogcG9pbnRlciBmb3IgcmV0dXJuaW5nIGJlc3QgcGFyZW50IGNsb2NrCiAgKgotICogU2V0IHRoZSBEUExMIENMS09VVCB0byB0aGUgdGFyZ2V0IHJhdGUuICBJZiB0aGUgRFBMTCBjYW4gZW50ZXIKLSAqIGxvdy1wb3dlciBieXBhc3MsIGFuZCB0aGUgdGFyZ2V0IHJhdGUgaXMgdGhlIGJ5cGFzcyBzb3VyY2UgY2xvY2sKLSAqIHJhdGUsIHRoZW4gY29uZmlndXJlIHRoZSBEUExMIGZvciBieXBhc3MuICBPdGhlcndpc2UsIHJvdW5kIHRoZQotICogdGFyZ2V0IHJhdGUgaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBhbHJlYWR5LCB0aGVuIHByb2dyYW0gYW5kIGxvY2sKLSAqIHRoZSBEUExMLiAgUmV0dXJucyAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgorICogRGV0ZXJtaW5lcyB3aGljaCBEUExMIG1vZGUgdG8gdXNlIGZvciByZWFjaGluZyBhIGRlc2lyZWQgdGFyZ2V0IHJhdGUuCisgKiBDaGVja3Mgd2hldGhlciB0aGUgRFBMTCBzaGFsbCBiZSBpbiBieXBhc3Mgb3IgbG9ja2VkIG1vZGUsIGFuZCBpZgorICogbG9ja2VkLCBjYWxjdWxhdGVzIHRoZSBNLE4gdmFsdWVzIGZvciB0aGUgRFBMTCB2aWEgcm91bmQtcmF0ZS4KKyAqIFJldHVybnMgYSBwb3NpdGl2ZSBjbG9jayByYXRlIHdpdGggc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgdmFsdWUKKyAqIGluIGZhaWx1cmUuCiAgKi8KLWludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKLQkJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK2xvbmcgb21hcDNfbm9uY29yZV9kcGxsX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmJlc3RfcGFyZW50X3JhdGUsCisJCQkJICAgICAgIHN0cnVjdCBjbGsgKipiZXN0X3BhcmVudF9jbGspCiB7CiAJc3RydWN0IGNsa19od19vbWFwICpjbGsgPSB0b19jbGtfaHdfb21hcChodyk7Ci0Jc3RydWN0IGNsayAqbmV3X3BhcmVudCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBycmF0ZTsKLQl1MTYgZnJlcXNlbCA9IDA7CiAJc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0JaW50IHJldDsKIAogCWlmICghaHcgfHwgIXJhdGUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDg5LDYxICs0ODgsMTIxIEBACiAKIAlpZiAoX19jbGtfZ2V0X3JhdGUoZGQtPmNsa19ieXBhc3MpID09IHJhdGUgJiYKIAkgICAgKGRkLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykpKSB7Ci0JCXByX2RlYnVnKCIlczogJXM6IHNldCByYXRlOiBlbnRlcmluZyBieXBhc3MuXG4iLAotCQkJIF9fZnVuY19fLCBfX2Nsa19nZXRfbmFtZShody0+Y2xrKSk7Ci0KLQkJX19jbGtfcHJlcGFyZShkZC0+Y2xrX2J5cGFzcyk7Ci0JCWNsa19lbmFibGUoZGQtPmNsa19ieXBhc3MpOwotCQlyZXQgPSBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOwotCQlpZiAoIXJldCkKLQkJCW5ld19wYXJlbnQgPSBkZC0+Y2xrX2J5cGFzczsKLQkJY2xrX2Rpc2FibGUoZGQtPmNsa19ieXBhc3MpOwotCQlfX2Nsa191bnByZXBhcmUoZGQtPmNsa19ieXBhc3MpOworCQkqYmVzdF9wYXJlbnRfY2xrID0gZGQtPmNsa19ieXBhc3M7CiAJfSBlbHNlIHsKLQkJX19jbGtfcHJlcGFyZShkZC0+Y2xrX3JlZik7Ci0JCWNsa19lbmFibGUoZGQtPmNsa19yZWYpOwotCi0JCS8qIFhYWCB0aGlzIGNoZWNrIGlzIHByb2JhYmx5IHBvaW50bGVzcyBpbiB0aGUgQ0NGIGNvbnRleHQgKi8KLQkJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSAhPSByYXRlKSB7Ci0JCQlycmF0ZSA9IF9fY2xrX3JvdW5kX3JhdGUoaHctPmNsaywgcmF0ZSk7Ci0JCQlpZiAocnJhdGUgIT0gcmF0ZSkgewotCQkJCXByX3dhcm4oIiVzOiAlczogZmluYWwgcmF0ZSAlbHUgZG9lcyBub3QgbWF0Y2ggZGVzaXJlZCByYXRlICVsdVxuIiwKLQkJCQkJX19mdW5jX18sIF9fY2xrX2dldF9uYW1lKGh3LT5jbGspLAotCQkJCQlycmF0ZSwgcmF0ZSk7Ci0JCQkJcmF0ZSA9IHJyYXRlOwotCQkJfQotCQl9Ci0KLQkJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9PSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJLyogRnJlcXNlbCBpcyBhdmFpbGFibGUgb25seSBvbiBPTUFQMzQzWCBkZXZpY2VzICovCi0JCWlmICh0aV9jbGtfZmVhdHVyZXMuZmxhZ3MgJiBUSV9DTEtfRFBMTF9IQVNfRlJFUVNFTCkgewotCQkJZnJlcXNlbCA9IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChjbGssCi0JCQkJCQlkZC0+bGFzdF9yb3VuZGVkX24pOwotCQkJV0FSTl9PTighZnJlcXNlbCk7Ci0JCX0KLQotCQlwcl9kZWJ1ZygiJXM6ICVzOiBzZXQgcmF0ZTogbG9ja2luZyByYXRlIHRvICVsdS5cbiIsCi0JCQkgX19mdW5jX18sIF9fY2xrX2dldF9uYW1lKGh3LT5jbGspLCByYXRlKTsKLQotCQlyZXQgPSBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbShjbGssIGZyZXFzZWwpOwotCQlpZiAoIXJldCkKLQkJCW5ld19wYXJlbnQgPSBkZC0+Y2xrX3JlZjsKLQkJY2xrX2Rpc2FibGUoZGQtPmNsa19yZWYpOwotCQlfX2Nsa191bnByZXBhcmUoZGQtPmNsa19yZWYpOworCQlyYXRlID0gb21hcDJfZHBsbF9yb3VuZF9yYXRlKGh3LCByYXRlLCBiZXN0X3BhcmVudF9yYXRlKTsKKwkJKmJlc3RfcGFyZW50X2NsayA9IGRkLT5jbGtfcmVmOwogCX0KKworCSpiZXN0X3BhcmVudF9yYXRlID0gcmF0ZTsKKworCXJldHVybiByYXRlOworfQorCisvKioKKyAqIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50IC0gc2V0IHBhcmVudCBmb3IgYSBEUExMIGNsb2NrCisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGNsb2NrIHRvIHNldCBwYXJlbnQgZm9yCisgKiBAaW5kZXg6IHBhcmVudCBpbmRleCB0byBzZWxlY3QKKyAqCisgKiBTZXRzIHBhcmVudCBmb3IgYSBEUExMIGNsb2NrLiBUaGlzIHNldHMgdGhlIERQTEwgaW50byBieXBhc3Mgb3IKKyAqIGxvY2tlZCBtb2RlLiBSZXR1cm5zIDAgd2l0aCBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdTggaW5kZXgpCit7CisJc3RydWN0IGNsa19od19vbWFwICpjbGsgPSB0b19jbGtfaHdfb21hcChodyk7CisJaW50IHJldDsKKworCWlmICghaHcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGluZGV4KQorCQlyZXQgPSBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOworCWVsc2UKKwkJcmV0ID0gX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSAtIHNldCByYXRlIGZvciBhIERQTEwgY2xvY2sKKyAqIEBodzogcG9pbnRlciB0byB0aGUgY2xvY2sgdG8gc2V0IHBhcmVudCBmb3IKKyAqIEByYXRlOiB0YXJnZXQgcmF0ZSBmb3IgdGhlIGNsb2NrCisgKiBAcGFyZW50X3JhdGU6IHJhdGUgb2YgdGhlIHBhcmVudCBjbG9jaworICoKKyAqIFNldHMgcmF0ZSBmb3IgYSBEUExMIGNsb2NrLiBGaXJzdCBjaGVja3MgaWYgdGhlIGNsb2NrIHBhcmVudCBpcworICogcmVmZXJlbmNlIGNsb2NrIChpbiBieXBhc3MgbW9kZSwgdGhlIHJhdGUgb2YgdGhlIGNsb2NrIGNhbid0IGJlCisgKiBjaGFuZ2VkKSBhbmQgcHJvY2VlZHMgd2l0aCB0aGUgcmF0ZSBjaGFuZ2Ugb3BlcmF0aW9uLiBSZXR1cm5zIDAKKyAqIHdpdGggc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsayA9IHRvX2Nsa19od19vbWFwKGh3KTsKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MTYgZnJlcXNlbCA9IDA7CisJaW50IHJldDsKKworCWlmICghaHcgfHwgIXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChfX2Nsa19nZXRfcGFyZW50KGh3LT5jbGspICE9IGRkLT5jbGtfcmVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGcmVxc2VsIGlzIGF2YWlsYWJsZSBvbmx5IG9uIE9NQVAzNDNYIGRldmljZXMgKi8KKwlpZiAodGlfY2xrX2ZlYXR1cmVzLmZsYWdzICYgVElfQ0xLX0RQTExfSEFTX0ZSRVFTRUwpIHsKKwkJZnJlcXNlbCA9IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChjbGssIGRkLT5sYXN0X3JvdW5kZWRfbik7CisJCVdBUk5fT04oIWZyZXFzZWwpOworCX0KKworCXByX2RlYnVnKCIlczogJXM6IHNldCByYXRlOiBsb2NraW5nIHJhdGUgdG8gJWx1LlxuIiwgX19mdW5jX18sCisJCSBfX2Nsa19nZXRfbmFtZShody0+Y2xrKSwgcmF0ZSk7CisKKwlyZXQgPSBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbShjbGssIGZyZXFzZWwpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudCAtIHNldCByYXRlIGFuZCBwYXJlbnQgZm9yIGEgRFBMTCBjbG9jaworICogQGh3OiBwb2ludGVyIHRvIHRoZSBjbG9jayB0byBzZXQgcmF0ZSBhbmQgcGFyZW50IGZvcgorICogQHJhdGU6IHRhcmdldCByYXRlIGZvciB0aGUgRFBMTAorICogQHBhcmVudF9yYXRlOiBjbG9jayByYXRlIG9mIHRoZSBEUExMIHBhcmVudAorICogQGluZGV4OiBuZXcgcGFyZW50IGluZGV4IGZvciB0aGUgRFBMTCwgMCAtIHJlZmVyZW5jZSwgMSAtIGJ5cGFzcworICoKKyAqIFNldHMgcmF0ZSBhbmQgcGFyZW50IGZvciBhIERQTEwgY2xvY2suIElmIG5ldyBwYXJlbnQgaXMgdGhlIGJ5cGFzcworICogY2xvY2ssIG9ubHkgc2VsZWN0cyB0aGUgcGFyZW50LiBPdGhlcndpc2UgcHJvY2VlZHMgd2l0aCBhIHJhdGUKKyAqIGNoYW5nZSwgYXMgdGhpcyB3aWxsIGVmZmVjdGl2ZWx5IGFsc28gY2hhbmdlIHRoZSBwYXJlbnQgYXMgdGhlCisgKiBEUExMIGlzIHB1dCBpbnRvIGxvY2tlZCBtb2RlLiBSZXR1cm5zIDAgd2l0aCBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvcgorICogdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlX2FuZF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwKKwkJCQkJICAgdTggaW5kZXgpCit7CisJaW50IHJldDsKKworCWlmICghaHcgfHwgIXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKLQkqIEZJWE1FIC0gdGhpcyBpcyBhbGwgd3JvbmcuICBjb21tb24gY29kZSBoYW5kbGVzIHJlcGFyZW50aW5nIGFuZAotCSogbWlncmF0aW5nIHByZXBhcmUvZW5hYmxlIGNvdW50cy4gIGRwbGxzIHNob3VsZCBiZSBhIG11bHRpcGxleGVyCi0JKiBjbG9jayBhbmQgdGhpcyBzaG91bGQgYmUgYSBzZXRfcGFyZW50IG9wZXJhdGlvbiBzbyB0aGF0IGFsbCBvZiB0aGF0Ci0JKiBzdHVmZiBpcyBpbmhlcml0ZWQgZm9yIGZyZWUKLQkqLworCSAqIGNsay1yZWYgYXQgaW5kZXhbMF0sIGluIHdoaWNoIGNhc2Ugd2Ugb25seSBuZWVkIHRvIHNldCByYXRlLAorCSAqIHRoZSBwYXJlbnQgd2lsbCBiZSBjaGFuZ2VkIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgbG9jayBzZXF1ZW5jZS4KKwkgKiBXaXRoIGNsay1ieXBhc3MgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gY2hhbmdlIHBhcmVudC4KKwkgKi8KKwlpZiAoaW5kZXgpCisJCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50KGh3LCBpbmRleCk7CisJZWxzZQorCQlyZXQgPSBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoaHcsIHJhdGUsIHBhcmVudF9yYXRlKTsKIAotCWlmICghcmV0ICYmIGNsa19nZXRfcGFyZW50KGh3LT5jbGspICE9IG5ld19wYXJlbnQpCi0JCV9fY2xrX3JlcGFyZW50KGh3LT5jbGssIG5ld19wYXJlbnQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyogRFBMTCBhdXRvaWRsZSByZWFkL3NldCBjb2RlICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGw0NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGw0NHh4LmMKaW5kZXggNDYxM2YxZS4uNTM1ODIyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsNDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDQ0eHguYwpAQCAtMjA3LDMgKzIwNyw0NCBAQAogCiAJcmV0dXJuIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZTsKIH0KKworLyoqCisgKiBvbWFwNF9kcGxsX3JlZ200eGVuX2RldGVybWluZV9yYXRlIC0gZGV0ZXJtaW5lIHJhdGUgZm9yIGEgRFBMTAorICogQGh3OiBwb2ludGVyIHRvIHRoZSBjbG9jayB0byBkZXRlcm1pbmUgcmF0ZSBmb3IKKyAqIEByYXRlOiB0YXJnZXQgcmF0ZSBmb3IgdGhlIERQTEwKKyAqIEBiZXN0X3BhcmVudF9yYXRlOiBwb2ludGVyIGZvciByZXR1cm5pbmcgYmVzdCBwYXJlbnQgcmF0ZQorICogQGJlc3RfcGFyZW50X2NsazogcG9pbnRlciBmb3IgcmV0dXJuaW5nIGJlc3QgcGFyZW50IGNsb2NrCisgKgorICogRGV0ZXJtaW5lcyB3aGljaCBEUExMIG1vZGUgdG8gdXNlIGZvciByZWFjaGluZyBhIGRlc2lyZWQgcmF0ZS4KKyAqIENoZWNrcyB3aGV0aGVyIHRoZSBEUExMIHNoYWxsIGJlIGluIGJ5cGFzcyBvciBsb2NrZWQgbW9kZSwgYW5kIGlmCisgKiBsb2NrZWQsIGNhbGN1bGF0ZXMgdGhlIE0sTiB2YWx1ZXMgZm9yIHRoZSBEUExMIHZpYSByb3VuZC1yYXRlLgorICogUmV0dXJucyBhIHBvc2l0aXZlIGNsb2NrIHJhdGUgd2l0aCBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciB2YWx1ZQorICogaW4gZmFpbHVyZS4KKyAqLworbG9uZyBvbWFwNF9kcGxsX3JlZ200eGVuX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJCXVuc2lnbmVkIGxvbmcgKmJlc3RfcGFyZW50X3JhdGUsCisJCQkJCXN0cnVjdCBjbGsgKipiZXN0X3BhcmVudF9jbGspCit7CisJc3RydWN0IGNsa19od19vbWFwICpjbGsgPSB0b19jbGtfaHdfb21hcChodyk7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisKKwlpZiAoIWh3IHx8ICFyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisJaWYgKCFkZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoX19jbGtfZ2V0X3JhdGUoZGQtPmNsa19ieXBhc3MpID09IHJhdGUgJiYKKwkgICAgKGRkLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykpKSB7CisJCSpiZXN0X3BhcmVudF9jbGsgPSBkZC0+Y2xrX2J5cGFzczsKKwl9IGVsc2UgeworCQlyYXRlID0gb21hcDRfZHBsbF9yZWdtNHhlbl9yb3VuZF9yYXRlKGh3LCByYXRlLAorCQkJCQkJICAgICAgYmVzdF9wYXJlbnRfcmF0ZSk7CisJCSpiZXN0X3BhcmVudF9jbGsgPSBkZC0+Y2xrX3JlZjsKKwl9CisKKwkqYmVzdF9wYXJlbnRfcmF0ZSA9IHJhdGU7CisKKwlyZXR1cm4gcmF0ZTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jCmluZGV4IGNiNzc2NDMxLi5kNTk1MWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKQEAgLTEyLDE0ICsxMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL210ZC1uYW5kLW9tYXAyLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCi0jaW5jbHVkZSAiZ3BtYy5oIgogI2luY2x1ZGUgInNvYy5oIgotI2luY2x1ZGUgImdwbWMtbmFuZC5oIgogCiAvKiBtaW5pbXVtIHNpemUgZm9yIElPIG1hcHBpbmcgKi8KICNkZWZpbmUJTkFORF9JT19TSVpFCTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTllMTI4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmgKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmCV9fT01BUDJfR1BNQ19OQU5EX0gKLSNkZWZpbmUJX19PTUFQMl9HUE1DX05BTkRfSAotCi0jaW5jbHVkZSAiZ3BtYy5oIgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW5hbmQtb21hcDIuaD4KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX01URF9OQU5EX09NQVAyKQotZXh0ZXJuIGludCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmQsCi0JCQkgIHN0cnVjdCBncG1jX3RpbWluZ3MgKmdwbWNfdCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgZ3BtY19uYW5kX2luaXQoc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhICpkLAotCQkJCSBzdHJ1Y3QgZ3BtY190aW1pbmdzICpncG1jX3QpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuYwppbmRleCA4YjY4NzZjLi41M2QxOTdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1vbmVuYW5kLmMKQEAgLTE1LDE0ICsxNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29tYXAtZ3BtYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW9uZW5hbmQtb21hcDIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKLSNpbmNsdWRlICJncG1jLmgiCiAjaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiZ3BtYy1vbmVuYW5kLmgiCiAKICNkZWZpbmUJT05FTkFORF9JT19TSVpFCVNaXzEyOEsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1vbmVuYW5kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNmYyM2EuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuaAotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYJX19PTUFQMl9HUE1DX09ORU5BTkRfSAotI2RlZmluZQlfX09NQVAyX0dQTUNfT05FTkFORF9ICi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL210ZC1vbmVuYW5kLW9tYXAyLmg+Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19NVERfT05FTkFORF9PTUFQMikKLWV4dGVybiB2b2lkIGdwbWNfb25lbmFuZF9pbml0KHN0cnVjdCBvbWFwX29uZW5hbmRfcGxhdGZvcm1fZGF0YSAqZCk7Ci0jZWxzZQotI2RlZmluZSBib2FyZF9vbmVuYW5kX2RhdGEJTlVMTAotc3RhdGljIGlubGluZSB2b2lkIGdwbWNfb25lbmFuZF9pbml0KHN0cnVjdCBvbWFwX29uZW5hbmRfcGxhdGZvcm1fZGF0YSAqZCkKLXsKLX0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1zbWM5MXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1zbWM5MXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhMDYzNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtc21jOTF4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1zbWM5MXguYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICogQ29udGFjdDoJVG9ueSBMaW5kZ3JlbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+Ci0KLSNpbmNsdWRlICJncG1jLmgiCi0jaW5jbHVkZSAiZ3BtYy1zbWM5MXguaCIKLQotI2luY2x1ZGUgInNvYy5oIgotCi1zdGF0aWMgc3RydWN0IG9tYXBfc21jOTF4X3BsYXRmb3JtX2RhdGEgKmdwbWNfY2ZnOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGdwbWNfc21jOTF4X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIGdwbWNfc21jOTF4X2luZm8gPSB7Ci0JLmZsYWdzCT0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfSU9fU0hJRlRfMCwKLQkubGVkYQk9IFJQQ19MRURfMTAwXzEwLAotCS5sZWRiCT0gUlBDX0xFRF9UWF9SWCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGdwbWNfc21jOTF4X2RldmljZSA9IHsKLQkubmFtZQkJPSAic21jOTF4IiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmdwbWNfc21jOTF4X2luZm8sCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZ3BtY19zbWM5MXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBncG1jX3NtYzkxeF9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IGdwbWNfc2V0dGluZ3Mgc21jOTF4X3NldHRpbmdzID0gewotCS5kZXZpY2Vfd2lkdGggPSBHUE1DX0RFVldJRFRIXzE2QklULAotfTsKLQotLyoKLSAqIFNldCB0aGUgZ3BtYyB0aW1pbmdzIGZvciBzbWM5MWM5Ni4gVGhlIHRpbWluZ3MgYXJlIHRha2VuCi0gKiBmcm9tIHRoZSBkYXRhIHNoZWV0IGF2YWlsYWJsZSBhdDoKLSAqIGh0dHA6Ly93d3cuc21zYy5jb20vbWFpbi9jYXRhbG9nL2xhbjkxYzk2Lmh0bWwKLSAqIFJFVklTSVQ6IExldmVsIHNoaWZ0ZXJzIGNhbiBhZGQgYXQgbGVhc3QgdG8gdGhlIGFjY2VzcyBsYXRlbmN5LgotICovCi1zdGF0aWMgaW50IHNtYzkxYzk2X2dwbWNfcmV0aW1lKHZvaWQpCi17Ci0Jc3RydWN0IGdwbWNfdGltaW5ncyB0OwotCXN0cnVjdCBncG1jX2RldmljZV90aW1pbmdzIGRldl90OwotCWNvbnN0IGludCB0MyA9IDEwOwkvKiBGaWd1cmUgMTIuMiByZWFkIGFuZCAxMi40IHdyaXRlICovCi0JY29uc3QgaW50IHQ0X3IgPSAyMDsJLyogRmlndXJlIDEyLjIgcmVhZCAqLwotCWNvbnN0IGludCB0NF93ID0gNTsJLyogRmlndXJlIDEyLjQgd3JpdGUgKi8KLQljb25zdCBpbnQgdDUgPSAyNTsJLyogRmlndXJlIDEyLjIgcmVhZCAqLwotCWNvbnN0IGludCB0NiA9IDE1OwkvKiBGaWd1cmUgMTIuMiByZWFkICovCi0JY29uc3QgaW50IHQ3ID0gNTsJLyogRmlndXJlIDEyLjQgd3JpdGUgKi8KLQljb25zdCBpbnQgdDggPSA1OwkvKiBGaWd1cmUgMTIuNCB3cml0ZSAqLwotCWNvbnN0IGludCB0MjAgPSAxODU7CS8qIEZpZ3VyZSAxMi4yIHJlYWQgYW5kIDEyLjQgd3JpdGUgKi8KLQotCS8qCi0JICogRklYTUU6IENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBhbmQgZGF0YSBidXMgbXV4ZWQgdGltaW5ncy4KLQkgKiBOb3RlIHRoYXQgYXQgbGVhc3QgYWR2X3JkX29mZiBuZWVkcyB0byBiZSBjaGFuZ2VkIGFjY29yZGluZwotCSAqIHRvIG9tYXAzNDMwIFRSTSBGaWd1cmUgMTEtMTEuIEFyZSB0aGUgc2RwIGJvYXJkcyB1c2luZyB0aGUKLQkgKiBGUEdBIGluIGJldHdlZW4gc21jOTF4IGFuZCBvbWFwIGFzIHRoZSB0aW1pbmdzIGFyZSBkaWZmZXJlbnQKLQkgKiBmcm9tIGFib3ZlPwotCSAqLwotCWlmIChncG1jX2NmZy0+ZmxhZ3MgJiBHUE1DX01VWF9BRERfREFUQSkKLQkJcmV0dXJuIDA7Ci0KLQltZW1zZXQoJmRldl90LCAwLCBzaXplb2YoZGV2X3QpKTsKLQotCWRldl90LnRfb2Vhc3UgPSB0MyAqIDEwMDA7Ci0JZGV2X3QudF9vZSA9IHQ1ICogMTAwMDsKLQlkZXZfdC50X2Nlel9yID0gdDRfciAqIDEwMDA7Ci0JZGV2X3QudF9vZXogPSB0NiAqIDEwMDA7Ci0JZGV2X3QudF9yZF9jeWNsZSA9ICh0MjAgLSB0MykgKiAxMDAwOwotCi0JZGV2X3QudF93ZWFzdSA9IHQzICogMTAwMDsKLQlkZXZfdC50X3dwbCA9IHQ3ICogMTAwMDsKLQlkZXZfdC50X3dwaCA9IHQ4ICogMTAwMDsKLQlkZXZfdC50X2Nlel93ID0gdDRfdyAqIDEwMDA7Ci0JZGV2X3QudF93cl9jeWNsZSA9ICh0MjAgLSB0MykgKiAxMDAwOwotCi0JZ3BtY19jYWxjX3RpbWluZ3MoJnQsICZzbWM5MXhfc2V0dGluZ3MsICZkZXZfdCk7Ci0KLQlyZXR1cm4gZ3BtY19jc19zZXRfdGltaW5ncyhncG1jX2NmZy0+Y3MsICZ0KTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgc21jOTF4IGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIEdQTUMuIE5vdGUgdGhhdCB3ZQotICogYXNzdW1lIHRoYXQgcGluIG11bHRpcGxleGluZyBpcyBkb25lIGluIHRoZSBib2FyZC0qLmMgZmlsZSwKLSAqIG9yIGluIHRoZSBib290bG9hZGVyLgotICovCi12b2lkIF9faW5pdCBncG1jX3NtYzkxeF9pbml0KHN0cnVjdCBvbWFwX3NtYzkxeF9wbGF0Zm9ybV9kYXRhICpib2FyZF9kYXRhKQotewotCXVuc2lnbmVkIGxvbmcgY3NfbWVtX2Jhc2U7Ci0JaW50IHJldDsKLQotCWdwbWNfY2ZnID0gYm9hcmRfZGF0YTsKLQotCWlmIChncG1jX2NmZy0+ZmxhZ3MgJiBHUE1DX1RJTUlOR1NfU01DOTFDOTYpCi0JCWdwbWNfY2ZnLT5yZXRpbWUgPSBzbWM5MWM5Nl9ncG1jX3JldGltZTsKLQotCWlmIChncG1jX2NzX3JlcXVlc3QoZ3BtY19jZmctPmNzLCBTWl8xNk0sICZjc19tZW1fYmFzZSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BNQyBtZW0gZm9yIHNtYzkxeFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlncG1jX3NtYzkxeF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBjc19tZW1fYmFzZSArIDB4MzAwOwotCWdwbWNfc21jOTF4X3Jlc291cmNlc1swXS5lbmQgPSBjc19tZW1fYmFzZSArIDB4MzBmOwotCWdwbWNfc21jOTF4X3Jlc291cmNlc1sxXS5mbGFncyB8PSAoZ3BtY19jZmctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spOwotCi0JaWYgKGdwbWNfY2ZnLT5mbGFncyAmIEdQTUNfTVVYX0FERF9EQVRBKQotCQlzbWM5MXhfc2V0dGluZ3MubXV4X2FkZF9kYXRhID0gR1BNQ19NVVhfQUQ7Ci0JaWYgKGdwbWNfY2ZnLT5mbGFncyAmIEdQTUNfUkVBRF9NT04pCi0JCXNtYzkxeF9zZXR0aW5ncy53YWl0X29uX3JlYWQgPSB0cnVlOwotCWlmIChncG1jX2NmZy0+ZmxhZ3MgJiBHUE1DX1dSSVRFX01PTikKLQkJc21jOTF4X3NldHRpbmdzLndhaXRfb25fd3JpdGUgPSB0cnVlOwotCWlmIChncG1jX2NmZy0+d2FpdF9waW4pCi0JCXNtYzkxeF9zZXR0aW5ncy53YWl0X3BpbiA9IGdwbWNfY2ZnLT53YWl0X3BpbjsKLQlyZXQgPSBncG1jX2NzX3Byb2dyYW1fc2V0dGluZ3MoZ3BtY19jZmctPmNzLCAmc21jOTF4X3NldHRpbmdzKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBmcmVlMTsKLQotCWlmIChncG1jX2NmZy0+cmV0aW1lKSB7Ci0JCXJldCA9IGdwbWNfY2ZnLT5yZXRpbWUoKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJZ290byBmcmVlMTsKLQl9Ci0KLQlpZiAoZ3Bpb19yZXF1ZXN0X29uZShncG1jX2NmZy0+Z3Bpb19pcnEsIEdQSU9GX0lOLCAiU01DOTFYIGlycSIpIDwgMCkKLQkJZ290byBmcmVlMTsKLQotCWdwbWNfc21jOTF4X3Jlc291cmNlc1sxXS5zdGFydCA9IGdwaW9fdG9faXJxKGdwbWNfY2ZnLT5ncGlvX2lycSk7Ci0KLQlpZiAoZ3BtY19jZmctPmdwaW9fcHdyZHduKSB7Ci0JCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZ3BtY19jZmctPmdwaW9fcHdyZHduLAotCQkJCSAgICAgICBHUElPRl9PVVRfSU5JVF9MT1csICJTTUM5MVggcG93ZXJkb3duIik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGZyZWUyOwotCX0KLQotCWlmIChncG1jX2NmZy0+Z3Bpb19yZXNldCkgewotCQlyZXQgPSBncGlvX3JlcXVlc3Rfb25lKGdwbWNfY2ZnLT5ncGlvX3Jlc2V0LAotCQkJCSAgICAgICBHUElPRl9PVVRfSU5JVF9MT1csICJTTUM5MVggcmVzZXQiKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZnJlZTM7Ci0KLQkJZ3Bpb19zZXRfdmFsdWUoZ3BtY19jZmctPmdwaW9fcmVzZXQsIDEpOwotCQltc2xlZXAoMTAwKTsKLQkJZ3Bpb19zZXRfdmFsdWUoZ3BtY19jZmctPmdwaW9fcmVzZXQsIDApOwotCX0KLQotCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmdwbWNfc21jOTF4X2RldmljZSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIHNtYzkxeCBkZXZpY2VcbiIpOwotCQlncGlvX2ZyZWUoZ3BtY19jZmctPmdwaW9fcmVzZXQpOwotCQlnb3RvIGZyZWUzOwotCX0KLQotCXJldHVybjsKLQotZnJlZTM6Ci0JaWYgKGdwbWNfY2ZnLT5ncGlvX3B3cmR3bikKLQkJZ3Bpb19mcmVlKGdwbWNfY2ZnLT5ncGlvX3B3cmR3bik7Ci1mcmVlMjoKLQlncGlvX2ZyZWUoZ3BtY19jZmctPmdwaW9faXJxKTsKLWZyZWUxOgotCWdwbWNfY3NfZnJlZShncG1jX2NmZy0+Y3MpOwotCi0JcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzbWM5MXhcbiIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjRmYmVlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1zbWM5MXguaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwbWMtc21jOTF4LmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0dQTUNfU01DOTFYX0hfXwotCi0jZGVmaW5lIEdQTUNfVElNSU5HU19TTUM5MUM5NgkoMSA8PCA0KQotI2RlZmluZSBHUE1DX01VWF9BRERfREFUQQkoMSA8PCA1KSAvKiBHUE1DX0NPTkZJRzFfTVVYQUREREFUQSAqLwotI2RlZmluZSBHUE1DX1JFQURfTU9OCQkoMSA8PCA2KSAvKiBHUE1DX0NPTkZJRzFfV0FJVF9SRUFEX01PTiAqLwotI2RlZmluZSBHUE1DX1dSSVRFX01PTgkJKDEgPDwgNykgLyogR1BNQ19DT05GSUcxX1dBSVRfV1JJVEVfTU9OICovCi0KLXN0cnVjdCBvbWFwX3NtYzkxeF9wbGF0Zm9ybV9kYXRhIHsKLQlpbnQJY3M7Ci0JaW50CWdwaW9faXJxOwotCWludAlncGlvX3B3cmR3bjsKLQlpbnQJZ3Bpb19yZXNldDsKLQlpbnQJd2FpdF9waW47CS8qIE9wdGlvbmFsIEdQTUNfQ09ORklHMV9XQUlUUElOU0VMRUNUICovCi0JdTMyCWZsYWdzOwotCWludAkoKnJldGltZSkodm9pZCk7Ci19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKLQotZXh0ZXJuIHZvaWQgZ3BtY19zbWM5MXhfaW5pdChzdHJ1Y3Qgb21hcF9zbWM5MXhfcGxhdGZvcm1fZGF0YSAqZCk7Ci0KLSNlbHNlCi0KLSNkZWZpbmUgYm9hcmRfc21jOTF4X2RhdGEJTlVMTAotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3BtY19zbWM5MXhfaW5pdChzdHJ1Y3Qgb21hcF9zbWM5MXhfcGxhdGZvcm1fZGF0YSAqZCkKLXsKLX0KLQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmgKaW5kZXggNzA3ZjZkNS4uOWNhYTQxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmgKQEAgLTYsMjI2ICs2LDkgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGluIGFueSBuZXcgY29kZSwgdGhpcyB3aWxsIGdldCByZW1vdmVkCisgKiBvbmNlIG9tYXAzIGJvb3RzIGluIGRldmljZSB0cmVlIG9ubHkgbW9kZS4KKyAqCiAgKi8KLQotI2lmbmRlZiBfX09NQVAyX0dQTUNfSAotI2RlZmluZSBfX09NQVAyX0dQTUNfSAotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tdGQtbmFuZC1vbWFwMi5oPgotCi0vKiBNYXhpbXVtIE51bWJlciBvZiBDaGlwIFNlbGVjdHMgKi8KLSNkZWZpbmUgR1BNQ19DU19OVU0JCTgKLQotI2RlZmluZSBHUE1DX0NTX0NPTkZJRzEJCTB4MDAKLSNkZWZpbmUgR1BNQ19DU19DT05GSUcyCQkweDA0Ci0jZGVmaW5lIEdQTUNfQ1NfQ09ORklHMwkJMHgwOAotI2RlZmluZSBHUE1DX0NTX0NPTkZJRzQJCTB4MGMKLSNkZWZpbmUgR1BNQ19DU19DT05GSUc1CQkweDEwCi0jZGVmaW5lIEdQTUNfQ1NfQ09ORklHNgkJMHgxNAotI2RlZmluZSBHUE1DX0NTX0NPTkZJRzcJCTB4MTgKLSNkZWZpbmUgR1BNQ19DU19OQU5EX0NPTU1BTkQJMHgxYwotI2RlZmluZSBHUE1DX0NTX05BTkRfQUREUkVTUwkweDIwCi0jZGVmaW5lIEdQTUNfQ1NfTkFORF9EQVRBCTB4MjQKLQotLyogQ29udHJvbCBDb21tYW5kcyAqLwotI2RlZmluZSBHUE1DX0NPTkZJR19SRFlfQlNZCTB4MDAwMDAwMDEKLSNkZWZpbmUgR1BNQ19DT05GSUdfREVWX1NJWkUJMHgwMDAwMDAwMgotI2RlZmluZSBHUE1DX0NPTkZJR19ERVZfVFlQRQkweDAwMDAwMDAzCi0jZGVmaW5lIEdQTUNfU0VUX0lSUV9TVEFUVVMJMHgwMDAwMDAwNAotI2RlZmluZSBHUE1DX0NPTkZJR19XUAkJMHgwMDAwMDAwNQotCi0jZGVmaW5lIEdQTUNfRU5BQkxFX0lSUQkJMHgwMDAwMDAwZAotCi0vKiBFQ0MgY29tbWFuZHMgKi8KLSNkZWZpbmUgR1BNQ19FQ0NfUkVBRAkJMCAvKiBSZXNldCBIYXJkd2FyZSBFQ0MgZm9yIHJlYWQgKi8KLSNkZWZpbmUgR1BNQ19FQ0NfV1JJVEUJCTEgLyogUmVzZXQgSGFyZHdhcmUgRUNDIGZvciB3cml0ZSAqLwotI2RlZmluZSBHUE1DX0VDQ19SRUFEU1lOCTIgLyogUmVzZXQgYmVmb3JlIHN5bmRyb20gaXMgcmVhZCBiYWNrICovCi0KLSNkZWZpbmUgR1BNQ19DT05GSUcxX1dSQVBCVVJTVF9TVVBQICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1JFQURNVUxUSVBMRV9TVVBQICAoMSA8PCAzMCkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1JFQURUWVBFX0FTWU5DICAgICAoMCA8PCAyOSkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1JFQURUWVBFX1NZTkMgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1dSSVRFTVVMVElQTEVfU1VQUCAoMSA8PCAyOCkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1dSSVRFVFlQRV9BU1lOQyAgICAoMCA8PCAyNykKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1dSSVRFVFlQRV9TWU5DICAgICAoMSA8PCAyNykKLSNkZWZpbmUgR1BNQ19DT05GSUcxX0NMS0FDVElWQVRJT05USU1FKHZhbCkgKCh2YWwgJiAzKSA8PCAyNSkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1BBR0VfTEVOKHZhbCkgICAgICAoKHZhbCAmIDMpIDw8IDIzKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV0FJVF9SRUFEX01PTiAgICAgICgxIDw8IDIyKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV0FJVF9XUklURV9NT04gICAgICgxIDw8IDIxKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV0FJVF9NT05fSUlNRSh2YWwpICgodmFsICYgMykgPDwgMTgpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX1BJTl9TRUwodmFsKSAgKCh2YWwgJiAzKSA8PCAxNikKLSNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVNJWkUodmFsKSAgICAoKHZhbCAmIDMpIDw8IDEyKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFU0laRV8xNiAgICAgIEdQTUNfQ09ORklHMV9ERVZJQ0VTSVpFKDEpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFKHZhbCkgICAgKCh2YWwgJiAzKSA8PCAxMCkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVRZUEVfTk9SICAgICBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRSgwKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfTVVYVFlQRSh2YWwpICAgICAgICgodmFsICYgMykgPDwgOCkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1RJTUVfUEFSQV9HUkFOICAgICAoMSA8PCA0KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfRkNMS19ESVYodmFsKSAgICAgICh2YWwgJiAzKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfRkNMS19ESVYyICAgICAgICAgIChHUE1DX0NPTkZJRzFfRkNMS19ESVYoMSkpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVjMgICAgICAgICAgKEdQTUNfQ09ORklHMV9GQ0xLX0RJVigyKSkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWNCAgICAgICAgICAoR1BNQ19DT05GSUcxX0ZDTEtfRElWKDMpKQotI2RlZmluZSBHUE1DX0NPTkZJRzdfQ1NWQUxJRAkJKDEgPDwgNikKLQotI2RlZmluZSBHUE1DX0RFVklDRVRZUEVfTk9SCQkwCi0jZGVmaW5lIEdQTUNfREVWSUNFVFlQRV9OQU5ECQkyCi0jZGVmaW5lIEdQTUNfQ09ORklHX1dSSVRFUFJPVEVDVAkweDAwMDAwMDEwCi0jZGVmaW5lIFdSX1JEX1BJTl9NT05JVE9SSU5HCQkweDAwNjAwMDAwCi0jZGVmaW5lIEdQTUNfSVJRX0ZJRk9FVkVOVEVOQUJMRQkweDAxCi0jZGVmaW5lIEdQTUNfSVJRX0NPVU5UX0VWRU5UCQkweDAyCi0KLSNkZWZpbmUgR1BNQ19CVVJTVF80CQkJNAkvKiA0IHdvcmQgYnVyc3QgKi8KLSNkZWZpbmUgR1BNQ19CVVJTVF84CQkJOAkvKiA4IHdvcmQgYnVyc3QgKi8KLSNkZWZpbmUgR1BNQ19CVVJTVF8xNgkJCTE2CS8qIDE2IHdvcmQgYnVyc3QgKi8KLSNkZWZpbmUgR1BNQ19ERVZXSURUSF84QklUCQkxCS8qIDgtYml0IGRldmljZSB3aWR0aCAqLwotI2RlZmluZSBHUE1DX0RFVldJRFRIXzE2QklUCQkyCS8qIDE2LWJpdCBkZXZpY2Ugd2lkdGggKi8KLSNkZWZpbmUgR1BNQ19NVVhfQUFECQkJMQkvKiBBZGRyLUFkZHItRGF0YSBtdWx0aXBsZXggKi8KLSNkZWZpbmUgR1BNQ19NVVhfQUQJCQkyCS8qIEFkZHItRGF0YSBtdWx0aXBsZXggKi8KLQotLyogYm9vbCB0eXBlIHRpbWUgc2V0dGluZ3MgKi8KLXN0cnVjdCBncG1jX2Jvb2xfdGltaW5ncyB7Ci0JYm9vbCBjeWNsZTJjeWNsZWRpZmZjc2VuOwotCWJvb2wgY3ljbGUyY3ljbGVzYW1lY3NlbjsKLQlib29sIHdlX2V4dHJhX2RlbGF5OwotCWJvb2wgb2VfZXh0cmFfZGVsYXk7Ci0JYm9vbCBhZHZfZXh0cmFfZGVsYXk7Ci0JYm9vbCBjc19leHRyYV9kZWxheTsKLQlib29sIHRpbWVfcGFyYV9ncmFudWxhcml0eTsKLX07Ci0KLS8qCi0gKiBOb3RlIHRoYXQgYWxsIHZhbHVlcyBpbiB0aGlzIHN0cnVjdCBhcmUgaW4gbmFub3NlY29uZHMgZXhjZXB0IHN5bmNfY2xrCi0gKiAod2hpY2ggaXMgaW4gcGljb3NlY29uZHMpLCB3aGlsZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIGFyZSBpbiBncG1jX2ZjayBjeWNsZXMuCi0gKi8KLXN0cnVjdCBncG1jX3RpbWluZ3MgewotCS8qIE1pbmltdW0gY2xvY2sgcGVyaW9kIGZvciBzeW5jaHJvbm91cyBtb2RlIChpbiBwaWNvc2Vjb25kcykgKi8KLQl1MzIgc3luY19jbGs7Ci0KLQkvKiBDaGlwLXNlbGVjdCBzaWduYWwgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ1NfQ09ORklHMiAqLwotCXUzMiBjc19vbjsJCS8qIEFzc2VydGlvbiB0aW1lICovCi0JdTMyIGNzX3JkX29mZjsJCS8qIFJlYWQgZGVhc3NlcnRpb24gdGltZSAqLwotCXUzMiBjc193cl9vZmY7CQkvKiBXcml0ZSBkZWFzc2VydGlvbiB0aW1lICovCi0KLQkvKiBBRFYgc2lnbmFsIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzMgKi8KLQl1MzIgYWR2X29uOwkJLyogQXNzZXJ0aW9uIHRpbWUgKi8KLQl1MzIgYWR2X3JkX29mZjsJCS8qIFJlYWQgZGVhc3NlcnRpb24gdGltZSAqLwotCXUzMiBhZHZfd3Jfb2ZmOwkJLyogV3JpdGUgZGVhc3NlcnRpb24gdGltZSAqLwotCi0JLyogV0Ugc2lnbmFscyB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DT05GSUc0ICovCi0JdTMyIHdlX29uOwkJLyogV0UgYXNzZXJ0aW9uIHRpbWUgKi8KLQl1MzIgd2Vfb2ZmOwkJLyogV0UgZGVhc3NlcnRpb24gdGltZSAqLwotCi0JLyogT0Ugc2lnbmFscyB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DT05GSUc0ICovCi0JdTMyIG9lX29uOwkJLyogT0UgYXNzZXJ0aW9uIHRpbWUgKi8KLQl1MzIgb2Vfb2ZmOwkJLyogT0UgZGVhc3NlcnRpb24gdGltZSAqLwotCi0JLyogQWNjZXNzIHRpbWUgYW5kIGN5Y2xlIHRpbWUgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ09ORklHNSAqLwotCXUzMiBwYWdlX2J1cnN0X2FjY2VzczsJLyogTXVsdGlwbGUgYWNjZXNzIHdvcmQgZGVsYXkgKi8KLQl1MzIgYWNjZXNzOwkJLyogU3RhcnQtY3ljbGUgdG8gZmlyc3QgZGF0YSB2YWxpZCBkZWxheSAqLwotCXUzMiByZF9jeWNsZTsJCS8qIFRvdGFsIHJlYWQgY3ljbGUgdGltZSAqLwotCXUzMiB3cl9jeWNsZTsJCS8qIFRvdGFsIHdyaXRlIGN5Y2xlIHRpbWUgKi8KLQotCXUzMiBidXNfdHVybmFyb3VuZDsKLQl1MzIgY3ljbGUyY3ljbGVfZGVsYXk7Ci0KLQl1MzIgd2FpdF9tb25pdG9yaW5nOwotCXUzMiBjbGtfYWN0aXZhdGlvbjsKLQotCS8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgb24gT01BUDM0MzAgKi8KLQl1MzIgd3JfYWNjZXNzOwkJLyogV1JBQ0NFU1NUSU1FICovCi0JdTMyIHdyX2RhdGFfbXV4X2J1czsJLyogV1JEQVRBT05BRE1VWEJVUyAqLwotCi0Jc3RydWN0IGdwbWNfYm9vbF90aW1pbmdzIGJvb2xfdGltaW5nczsKLX07Ci0KLS8qIERldmljZSB0aW1pbmdzIGluIHBpY29zZWNvbmRzICovCi1zdHJ1Y3QgZ3BtY19kZXZpY2VfdGltaW5ncyB7Ci0JdTMyIHRfY2Vhc3U7CS8qIGFkZHJlc3Mgc2V0dXAgdG8gQ1MgdmFsaWQgKi8KLQl1MzIgdF9hdmRhc3U7CS8qIGFkZHJlc3Mgc2V0dXAgdG8gQURWIHZhbGlkICovCi0JLyogWFhYOiB0cnkgdG8gY29tYmluZSB0X2F2ZHBfciAmIHRfYXZkcF93LiBJc3N1ZSBpcwotCSAqIG9mIHR1c2IgdXNpbmcgdGhlc2UgdGltaW5ncyBldmVuIGZvciBzeW5jIHdoaWxzdAotCSAqIGlkZWFsbHkgZm9yIGFkdl9yZC8od3IpX29mZiBpdCBzaG91bGQgaGF2ZSBjb25zaWRlcmVkCi0JICogdF9hdmRoIGluc3RlYWQuIFRoaXMgaW5kaXJlY3RseSBuZWNlc3NpdGF0ZXMgci93Ci0JICogdmFyaWF0aW9ucyBvZiB0X2F2ZHAgYXMgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBvbmUKLQkgKiBzeW5jICYgb3RoZXIgYXN5bmMKLQkgKi8KLQl1MzIgdF9hdmRwX3I7CS8qIEFEViBsb3cgdGltZSAod2hhdCBhYm91dCB0X2NlciA/KSAqLwotCXUzMiB0X2F2ZHBfdzsKLQl1MzIgdF9hYXZkaDsJLyogYWRkcmVzcyBob2xkIHRpbWUgKi8KLQl1MzIgdF9vZWFzdTsJLyogYWRkcmVzcyBzZXR1cCB0byBPRSB2YWxpZCAqLwotCXUzMiB0X2FhOwkvKiBhY2Nlc3MgdGltZSBmcm9tIEFEViBhc3NlcnRpb24gKi8KLQl1MzIgdF9pYWE7CS8qIGluaXRpYWwgYWNjZXNzIHRpbWUgKi8KLQl1MzIgdF9vZTsJLyogYWNjZXNzIHRpbWUgZnJvbSBPRSBhc3NlcnRpb24gKi8KLQl1MzIgdF9jZTsJLyogYWNjZXNzIHRpbWUgZnJvbSBDUyBhc2VydGlvbiAqLwotCXUzMiB0X3JkX2N5Y2xlOwkvKiByZWFkIGN5Y2xlIHRpbWUgKi8KLQl1MzIgdF9jZXpfcjsJLyogcmVhZCBDUyBkZWFzc2VydGlvbiB0byBoaWdoIFogKi8KLQl1MzIgdF9jZXpfdzsJLyogd3JpdGUgQ1MgZGVhc3NlcnRpb24gdG8gaGlnaCBaICovCi0JdTMyIHRfb2V6OwkvKiBPRSBkZWFzc2VydGlvbiB0byBoaWdoIFogKi8KLQl1MzIgdF93ZWFzdTsJLyogYWRkcmVzcyBzZXR1cCB0byBXRSB2YWxpZCAqLwotCXUzMiB0X3dwbDsJLyogd3JpdGUgYXNzZXJ0aW9uIHRpbWUgKi8KLQl1MzIgdF93cGg7CS8qIHdyaXRlIGRlYXNzZXJ0aW9uIHRpbWUgKi8KLQl1MzIgdF93cl9jeWNsZTsJLyogd3JpdGUgY3ljbGUgdGltZSAqLwotCi0JdTMyIGNsazsKLQl1MzIgdF9iYWNjOwkvKiBidXJzdCBhY2Nlc3MgdmFsaWQgY2xvY2sgdG8gb3V0cHV0IGRlbGF5ICovCi0JdTMyIHRfY2VzOwkvKiBDUyBzZXR1cCB0aW1lIHRvIGNsayAqLwotCXUzMiB0X2F2ZHM7CS8qIEFEViBzZXR1cCB0aW1lIHRvIGNsayAqLwotCXUzMiB0X2F2ZGg7CS8qIEFEViBob2xkIHRpbWUgZnJvbSBjbGsgKi8KLQl1MzIgdF9hY2g7CS8qIGFkZHJlc3MgaG9sZCB0aW1lIGZyb20gY2xrICovCi0JdTMyIHRfcmR5bzsJLyogY2xrIHRvIHJlYWR5IHZhbGlkICovCi0KLQl1MzIgdF9jZV9yZHl6OwkvKiBYWFg6IGRlc2NyaXB0aW9uID8sIG9yIHVzZSB0X2NleiBpbnN0ZWFkICovCi0JdTMyIHRfY2VfYXZkOwkvKiBDUyBvbiB0byBBRFYgb24gZGVsYXkgKi8KLQotCS8qIFhYWDogY2hlY2sgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbWJpbmluZwotCSAqIGN5Y19hYXZoZF9vZSAmIGN5Y19hYXZkaF93ZQotCSAqLwotCXU4IGN5Y19hYXZkaF9vZTsvKiByZWFkIGFkZHJlc3MgaG9sZCB0aW1lIGluIGN5Y2xlcyAqLwotCXU4IGN5Y19hYXZkaF93ZTsvKiB3cml0ZSBhZGRyZXNzIGhvbGQgdGltZSBpbiBjeWNsZXMgKi8KLQl1OCBjeWNfb2U7CS8qIGFjY2VzcyB0aW1lIGZyb20gT0UgYXNzZXJ0aW9uIGluIGN5Y2xlcyAqLwotCXU4IGN5Y193cGw7CS8qIHdyaXRlIGRlYXNzZXJ0aW9uIHRpbWUgaW4gY3ljbGVzICovCi0JdTMyIGN5Y19pYWE7CS8qIGluaXRpYWwgYWNjZXNzIHRpbWUgaW4gY3ljbGVzICovCi0KLQkvKiBleHRyYSBkZWxheXMgKi8KLQlib29sIGNlX3hkZWxheTsKLQlib29sIGF2ZF94ZGVsYXk7Ci0JYm9vbCBvZV94ZGVsYXk7Ci0JYm9vbCB3ZV94ZGVsYXk7Ci19OwotCi1zdHJ1Y3QgZ3BtY19zZXR0aW5ncyB7Ci0JYm9vbCBidXJzdF93cmFwOwkvKiBlbmFibGVzIHdyYXAgYnVyc3RpbmcgKi8KLQlib29sIGJ1cnN0X3JlYWQ7CS8qIGVuYWJsZXMgcmVhZCBwYWdlL2J1cnN0IG1vZGUgKi8KLQlib29sIGJ1cnN0X3dyaXRlOwkvKiBlbmFibGVzIHdyaXRlIHBhZ2UvYnVyc3QgbW9kZSAqLwotCWJvb2wgZGV2aWNlX25hbmQ7CS8qIGRldmljZSBpcyBOQU5EICovCi0JYm9vbCBzeW5jX3JlYWQ7CQkvKiBlbmFibGVzIHN5bmNocm9ub3VzIHJlYWRzICovCi0JYm9vbCBzeW5jX3dyaXRlOwkvKiBlbmFibGVzIHN5bmNocm9ub3VzIHdyaXRlcyAqLwotCWJvb2wgd2FpdF9vbl9yZWFkOwkvKiBtb25pdG9yIHdhaXQgb24gcmVhZHMgKi8KLQlib29sIHdhaXRfb25fd3JpdGU7CS8qIG1vbml0b3Igd2FpdCBvbiB3cml0ZXMgKi8KLQl1MzIgYnVyc3RfbGVuOwkJLyogcGFnZS9idXJzdCBsZW5ndGggKi8KLQl1MzIgZGV2aWNlX3dpZHRoOwkvKiBkZXZpY2UgYnVzIHdpZHRoICg4IG9yIDE2IGJpdCkgKi8KLQl1MzIgbXV4X2FkZF9kYXRhOwkvKiBtdWx0aXBsZXggYWRkcmVzcyAmIGRhdGEgKi8KLQl1MzIgd2FpdF9waW47CQkvKiB3YWl0LXBpbiB0byBiZSB1c2VkICovCi19OwotCi1leHRlcm4gaW50IGdwbWNfY2FsY190aW1pbmdzKHN0cnVjdCBncG1jX3RpbWluZ3MgKmdwbWNfdCwKLQkJCSAgICAgc3RydWN0IGdwbWNfc2V0dGluZ3MgKmdwbWNfcywKLQkJCSAgICAgc3RydWN0IGdwbWNfZGV2aWNlX3RpbWluZ3MgKmRldl90KTsKLQotZXh0ZXJuIHZvaWQgZ3BtY191cGRhdGVfbmFuZF9yZWcoc3RydWN0IGdwbWNfbmFuZF9yZWdzICpyZWcsIGludCBjcyk7Ci1leHRlcm4gaW50IGdwbWNfZ2V0X2NsaWVudF9pcnEodW5zaWduZWQgaXJxX2NvbmZpZyk7Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgZ3BtY190aWNrc190b19ucyh1bnNpZ25lZCBpbnQgdGlja3MpOwotCi1leHRlcm4gdm9pZCBncG1jX2NzX3dyaXRlX3JlZyhpbnQgY3MsIGludCBpZHgsIHUzMiB2YWwpOwotZXh0ZXJuIGludCBncG1jX2NhbGNfZGl2aWRlcih1bnNpZ25lZCBpbnQgc3luY19jbGspOwotZXh0ZXJuIGludCBncG1jX2NzX3NldF90aW1pbmdzKGludCBjcywgY29uc3Qgc3RydWN0IGdwbWNfdGltaW5ncyAqdCk7Ci1leHRlcm4gaW50IGdwbWNfY3NfcHJvZ3JhbV9zZXR0aW5ncyhpbnQgY3MsIHN0cnVjdCBncG1jX3NldHRpbmdzICpwKTsKLWV4dGVybiBpbnQgZ3BtY19jc19yZXF1ZXN0KGludCBjcywgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICpiYXNlKTsKLWV4dGVybiB2b2lkIGdwbWNfY3NfZnJlZShpbnQgY3MpOwotZXh0ZXJuIHZvaWQgb21hcDNfZ3BtY19zYXZlX2NvbnRleHQodm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwM19ncG1jX3Jlc3RvcmVfY29udGV4dCh2b2lkKTsKLWV4dGVybiBpbnQgZ3BtY19jb25maWd1cmUoaW50IGNtZCwgaW50IHd2YWwpOwotZXh0ZXJuIHZvaWQgZ3BtY19yZWFkX3NldHRpbmdzX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJICBzdHJ1Y3QgZ3BtY19zZXR0aW5ncyAqcCk7Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L29tYXAtZ3BtYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCmluZGV4IDA3ZDRjN2IuLmRjNmU3OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKQEAgLTE0LDE0ICsxNCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9ncGlvLW9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2hzbW1jLW9tYXAuaD4KIAogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgIm9tYXBfZGV2aWNlLmgiCiAjaW5jbHVkZSAib21hcC1wbS5oIgogCiAjaW5jbHVkZSAibXV4LmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAiaHNtbWMuaCIKICNpbmNsdWRlICJjb250cm9sLmgiCiAKQEAgLTMyLDI1ICszMywxNCBAQAogCiAjZGVmaW5lIEhTTU1DX05BTUVfTEVOCTkKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpICYmIGRlZmluZWQoQ09ORklHX1BNKQotCi1zdGF0aWMgaW50IGhzbW1jX2dldF9jb250ZXh0X2xvc3Moc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBvbWFwX3BtX2dldF9kZXZfY29udGV4dF9sb3NzX2NvdW50KGRldik7Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIGhzbW1jX2dldF9jb250ZXh0X2xvc3MgTlVMTAotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIG9tYXBfaHNtbWMxX2JlZm9yZV9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCi0JCQkJICBpbnQgcG93ZXJfb24sIGludCB2ZGQpCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jMV9iZWZvcmVfc2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIGludCBwb3dlcl9vbiwgaW50IHZkZCkKIHsKIAl1MzIgcmVnLCBwcm9nX2lvOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCi0JaWYgKG1tYy0+c2xvdHNbMF0ucmVtdXgpCi0JCW1tYy0+c2xvdHNbMF0ucmVtdXgoZGV2LCBzbG90LCBwb3dlcl9vbik7CisJaWYgKG1tYy0+cmVtdXgpCisJCW1tYy0+cmVtdXgoZGV2LCBwb3dlcl9vbik7CiAKIAkvKgogCSAqIEFzc3VtZSB3ZSBwb3dlciBib3RoIE9NQVAgVk1NQzEgKGZvciBDTUQsIENMSywgREFUMC4uMykgYW5kIHRoZQpAQCAtNzIsNyArNjIsNyBAQAogCQkJb21hcF9jdHJsX3dyaXRlbChyZWcsIE9NQVAyNDNYX0NPTlRST0xfREVWQ09ORjEpOwogCQl9CiAKLQkJaWYgKG1tYy0+c2xvdHNbMF0uaW50ZXJuYWxfY2xvY2spIHsKKwkJaWYgKG1tYy0+aW50ZXJuYWxfY2xvY2spIHsKIAkJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKIAkJCXJlZyB8PSBPTUFQMl9NTUNTRElPMUFEUENMS0lTRUw7CiAJCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CkBAIC05Niw4ICs4Niw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBvbWFwX2hzbW1jMV9hZnRlcl9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCi0JCQkJIGludCBwb3dlcl9vbiwgaW50IHZkZCkKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWMxX2FmdGVyX3NldF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpCiB7CiAJdTMyIHJlZzsKIApAQCAtMTIwLDM0ICsxMDksMzIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGhzbW1jMl9zZWxlY3RfaW5wdXRfY2xrX3NyYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jKQorc3RhdGljIHZvaWQgaHNtbWMyX3NlbGVjdF9pbnB1dF9jbGtfc3JjKHN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tYykKIHsKIAl1MzIgcmVnOwogCiAJcmVnID0gb21hcF9jdHJsX3JlYWRsKGNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0KTsKLQlpZiAobW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykKKwlpZiAobW1jLT5pbnRlcm5hbF9jbG9jaykKIAkJcmVnIHw9IE9NQVAyX01NQ1NESU8yQURQQ0xLSVNFTDsKIAllbHNlCiAJCXJlZyAmPSB+T01BUDJfTU1DU0RJTzJBRFBDTEtJU0VMOwogCW9tYXBfY3RybF93cml0ZWwocmVnLCBjb250cm9sX2RldmNvbmYxX29mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhzbW1jMl9iZWZvcmVfc2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LAotCQkJCSAgIGludCBwb3dlcl9vbiwgaW50IHZkZCkKK3N0YXRpYyB2b2lkIGhzbW1jMl9iZWZvcmVfc2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCkKIHsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAotCWlmIChtbWMtPnNsb3RzWzBdLnJlbXV4KQotCQltbWMtPnNsb3RzWzBdLnJlbXV4KGRldiwgc2xvdCwgcG93ZXJfb24pOworCWlmIChtbWMtPnJlbXV4KQorCQltbWMtPnJlbXV4KGRldiwgcG93ZXJfb24pOwogCiAJaWYgKHBvd2VyX29uKQogCQloc21tYzJfc2VsZWN0X2lucHV0X2Nsa19zcmMobW1jKTsKIH0KIAotc3RhdGljIGludCBhbTM1eF9oc21tYzJfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCi0JCQkJICBpbnQgcG93ZXJfb24sIGludCB2ZGQpCitzdGF0aWMgaW50IGFtMzV4X2hzbW1jMl9zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpCiB7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAocG93ZXJfb24pCiAJCWhzbW1jMl9zZWxlY3RfaW5wdXRfY2xrX3NyYyhtbWMpOwpAQCAtMTU1LDIzICsxNDIsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBub3BfbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCi0JCQkJCQkJaW50IHZkZCkKK3N0YXRpYyBpbnQgbm9wX21tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2hzbW1jX211eChzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jX2NvbnRyb2xsZXIsCi0JCQlpbnQgY29udHJvbGxlcl9ucikKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2hzbW1jX211eChzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhCisJCQkJICAqbW1jX2NvbnRyb2xsZXIsIGludCBjb250cm9sbGVyX25yKQogewotCWlmIChncGlvX2lzX3ZhbGlkKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5zd2l0Y2hfcGluKSAmJgotCQkobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLnN3aXRjaF9waW4gPCBPTUFQX01BWF9HUElPX0xJTkVTKSkKLQkJb21hcF9tdXhfaW5pdF9ncGlvKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5zd2l0Y2hfcGluLAotCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCWlmIChncGlvX2lzX3ZhbGlkKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5ncGlvX3dwKSAmJgotCQkobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmdwaW9fd3AgPCBPTUFQX01BWF9HUElPX0xJTkVTKSkKLQkJb21hcF9tdXhfaW5pdF9ncGlvKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5ncGlvX3dwLAotCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCWlmIChncGlvX2lzX3ZhbGlkKG1tY19jb250cm9sbGVyLT5zd2l0Y2hfcGluKSAmJgorCSAgICAobW1jX2NvbnRyb2xsZXItPnN3aXRjaF9waW4gPCBPTUFQX01BWF9HUElPX0xJTkVTKSkKKwkJb21hcF9tdXhfaW5pdF9ncGlvKG1tY19jb250cm9sbGVyLT5zd2l0Y2hfcGluLAorCQkJCSAgIE9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJaWYgKGdwaW9faXNfdmFsaWQobW1jX2NvbnRyb2xsZXItPmdwaW9fd3ApICYmCisJICAgIChtbWNfY29udHJvbGxlci0+Z3Bpb193cCA8IE9NQVBfTUFYX0dQSU9fTElORVMpKQorCQlvbWFwX211eF9pbml0X2dwaW8obW1jX2NvbnRyb2xsZXItPmdwaW9fd3AsCisJCQkJICAgT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJaWYgKGNvbnRyb2xsZXJfbnIgPT0gMCkgewogCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9jbGsiLApAQCAtMTgwLDcgKzE2Niw3IEBACiAJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0MCIsCiAJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKLQkJCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uY2FwcyAmCisJCQlpZiAobW1jX2NvbnRyb2xsZXItPmNhcHMgJgogCQkJCShNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7CiAJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQxIiwKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKQEAgLTE4OSw3ICsxNzUsNyBAQAogCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0MyIsCiAJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CiAJCQl9Ci0JCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmNhcHMgJgorCQkJaWYgKG1tY19jb250cm9sbGVyLT5jYXBzICYKIAkJCQkJCU1NQ19DQVBfOF9CSVRfREFUQSkgewogCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0NCIsCiAJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CkBAIC0yMTQsNyArMjAwLDcgQEAKIAkJCSAqIEZvciA4IHdpcmUgY29uZmlndXJhdGlvbnMsIExpbmVzIERBVDQsIDUsIDYgYW5kIDcKIAkJCSAqIG5lZWQgdG8gYmUgbXV4ZWQgaW4gdGhlIGJvYXJkLSouYyBmaWxlcwogCQkJICovCi0JCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmNhcHMgJgorCQkJaWYgKG1tY19jb250cm9sbGVyLT5jYXBzICYKIAkJCQkoTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF84X0JJVF9EQVRBKSkgewogCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0MSIsCiAJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CkBAIC0yMjMsNyArMjA5LDcgQEAKIAkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2RhdDMiLAogCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwogCQkJfQotCQkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5jYXBzICYKKwkJCWlmIChtbWNfY29udHJvbGxlci0+Y2FwcyAmCiAJCQkJCQkJTU1DX0NBUF84X0JJVF9EQVRBKSB7CiAJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQ0LnNkbW1jMl9kYXQ0IiwKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKQEAgLTI0Myw3ICsyMjksNyBAQAogfQogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2hzbW1jX3BkYXRhX2luaXQoc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gKmMsCi0JCQkJCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMpCisJCQkJCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tYykKIHsKIAljaGFyICpoY19uYW1lOwogCkBAIC0yNTksMzggKzI0NSwyMiBAQAogCWVsc2UKIAkJc25wcmludGYoaGNfbmFtZSwgKEhTTU1DX05BTUVfTEVOICsgMSksICJtbWMlaXNsb3QlaSIsCiAJCQkJCQkJCWMtPm1tYywgMSk7Ci0JbW1jLT5zbG90c1swXS5uYW1lID0gaGNfbmFtZTsKLQltbWMtPm5yX3Nsb3RzID0gMTsKLQltbWMtPnNsb3RzWzBdLmNhcHMgPSBjLT5jYXBzOwotCW1tYy0+c2xvdHNbMF0ucG1fY2FwcyA9IGMtPnBtX2NhcHM7Ci0JbW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jayA9ICFjLT5leHRfY2xvY2s7Ci0JbW1jLT5tYXhfZnJlcSA9IGMtPm1heF9mcmVxOworCW1tYy0+bmFtZSA9IGhjX25hbWU7CisJbW1jLT5jYXBzID0gYy0+Y2FwczsKKwltbWMtPmludGVybmFsX2Nsb2NrID0gIWMtPmV4dF9jbG9jazsKIAltbWMtPnJlZ19vZmZzZXQgPSAwOwotCW1tYy0+Z2V0X2NvbnRleHRfbG9zc19jb3VudCA9IGhzbW1jX2dldF9jb250ZXh0X2xvc3M7CiAKLQltbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSBjLT5ncGlvX2NkOwotCW1tYy0+c2xvdHNbMF0uZ3Bpb193cCA9IGMtPmdwaW9fd3A7CisJbW1jLT5zd2l0Y2hfcGluID0gYy0+Z3Bpb19jZDsKKwltbWMtPmdwaW9fd3AgPSBjLT5ncGlvX3dwOwogCi0JbW1jLT5zbG90c1swXS5yZW11eCA9IGMtPnJlbXV4OwotCW1tYy0+c2xvdHNbMF0uaW5pdF9jYXJkID0gYy0+aW5pdF9jYXJkOworCW1tYy0+cmVtdXggPSBjLT5yZW11eDsKKwltbWMtPmluaXRfY2FyZCA9IGMtPmluaXRfY2FyZDsKIAogCWlmIChjLT5jb3Zlcl9vbmx5KQotCQltbWMtPnNsb3RzWzBdLmNvdmVyID0gMTsKKwkJbW1jLT5jb3ZlciA9IDE7CiAKIAlpZiAoYy0+bm9ucmVtb3ZhYmxlKQotCQltbWMtPnNsb3RzWzBdLm5vbnJlbW92YWJsZSA9IDE7Ci0KLQlpZiAoYy0+cG93ZXJfc2F2aW5nKQotCQltbWMtPnNsb3RzWzBdLnBvd2VyX3NhdmluZyA9IDE7Ci0KLQlpZiAoYy0+bm9fb2ZmKQotCQltbWMtPnNsb3RzWzBdLm5vX29mZiA9IDE7Ci0KLQlpZiAoYy0+bm9fb2ZmX2luaXQpCi0JCW1tYy0+c2xvdHNbMF0ubm9fcmVndWxhdG9yX29mZl9pbml0ID0gYy0+bm9fb2ZmX2luaXQ7Ci0KLQlpZiAoYy0+dmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwKQotCQltbWMtPnNsb3RzWzBdLnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCA9IDE7CisJCW1tYy0+bm9ucmVtb3ZhYmxlID0gMTsKIAogCS8qCiAJICogTk9URTogIE1NQyBzbG90cyBzaG91bGQgaGF2ZSBhIFZjYyByZWd1bGF0b3Igc2V0IHVwLgpAQCAtMzAwLDQyICsyNzAsNDIgQEAKIAkgKiB0ZW1wb3JhcnkgSEFDSzogb2NyX21hc2sgaW5zdGVhZCBvZiBmaXhlZCBzdXBwbHkKIAkgKi8KIAlpZiAoc29jX2lzX2FtMzV4eCgpKQotCQltbWMtPnNsb3RzWzBdLm9jcl9tYXNrID0gTU1DX1ZERF8xNjVfMTk1IHwKKwkJbW1jLT5vY3JfbWFzayA9IE1NQ19WRERfMTY1XzE5NSB8CiAJCQkJCSBNTUNfVkREXzI2XzI3IHwKIAkJCQkJIE1NQ19WRERfMjdfMjggfAogCQkJCQkgTU1DX1ZERF8yOV8zMCB8CiAJCQkJCSBNTUNfVkREXzMwXzMxIHwKIAkJCQkJIE1NQ19WRERfMzFfMzI7CiAJZWxzZQotCQltbWMtPnNsb3RzWzBdLm9jcl9tYXNrID0gYy0+b2NyX21hc2s7CisJCW1tYy0+b2NyX21hc2sgPSBjLT5vY3JfbWFzazsKIAogCWlmICghc29jX2lzX2FtMzV4eCgpKQotCQltbWMtPnNsb3RzWzBdLmZlYXR1cmVzIHw9IEhTTU1DX0hBU19QQklBUzsKKwkJbW1jLT5mZWF0dXJlcyB8PSBIU01NQ19IQVNfUEJJQVM7CiAKIAlzd2l0Y2ggKGMtPm1tYykgewogCWNhc2UgMToKLQkJaWYgKG1tYy0+c2xvdHNbMF0uZmVhdHVyZXMgJiBIU01NQ19IQVNfUEJJQVMpIHsKKwkJaWYgKG1tYy0+ZmVhdHVyZXMgJiBIU01NQ19IQVNfUEJJQVMpIHsKIAkJCS8qIG9uLWNoaXAgbGV2ZWwgc2hpZnRpbmcgdmlhIFBCSUFTMC9QQklBUzEgKi8KLQkJCW1tYy0+c2xvdHNbMF0uYmVmb3JlX3NldF9yZWcgPQorCQkJbW1jLT5iZWZvcmVfc2V0X3JlZyA9CiAJCQkJCW9tYXBfaHNtbWMxX2JlZm9yZV9zZXRfcmVnOwotCQkJbW1jLT5zbG90c1swXS5hZnRlcl9zZXRfcmVnID0KKwkJCW1tYy0+YWZ0ZXJfc2V0X3JlZyA9CiAJCQkJCW9tYXBfaHNtbWMxX2FmdGVyX3NldF9yZWc7CiAJCX0KIAogCQlpZiAoc29jX2lzX2FtMzV4eCgpKQotCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSBub3BfbW1jX3NldF9wb3dlcjsKKwkJCW1tYy0+c2V0X3Bvd2VyID0gbm9wX21tY19zZXRfcG93ZXI7CiAKIAkJLyogT01BUDM2MzAgSFNNTUMxIHN1cHBvcnRzIG9ubHkgNC1iaXQgKi8KIAkJaWYgKGNwdV9pc19vbWFwMzYzMCgpICYmCiAJCQkJKGMtPmNhcHMgJiBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7CiAJCQljLT5jYXBzICY9IH5NTUNfQ0FQXzhfQklUX0RBVEE7CiAJCQljLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKLQkJCW1tYy0+c2xvdHNbMF0uY2FwcyA9IGMtPmNhcHM7CisJCQltbWMtPmNhcHMgPSBjLT5jYXBzOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJaWYgKHNvY19pc19hbTM1eHgoKSkKLQkJCW1tYy0+c2xvdHNbMF0uc2V0X3Bvd2VyID0gYW0zNXhfaHNtbWMyX3NldF9wb3dlcjsKKwkJCW1tYy0+c2V0X3Bvd2VyID0gYW0zNXhfaHNtbWMyX3NldF9wb3dlcjsKIAogCQlpZiAoYy0+ZXh0X2Nsb2NrKQogCQkJYy0+dHJhbnNjZWl2ZXIgPSAxOwpAQCAtMzQzLDE3ICszMTMsMTcgQEAKIAkJCWMtPmNhcHMgJj0gfk1NQ19DQVBfOF9CSVRfREFUQTsKIAkJCWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwogCQl9Ci0JCWlmIChtbWMtPnNsb3RzWzBdLmZlYXR1cmVzICYgSFNNTUNfSEFTX1BCSUFTKSB7CisJCWlmIChtbWMtPmZlYXR1cmVzICYgSFNNTUNfSEFTX1BCSUFTKSB7CiAJCQkvKiBvZmYtY2hpcCBsZXZlbCBzaGlmdGluZywgb3Igbm9uZSAqLwotCQkJbW1jLT5zbG90c1swXS5iZWZvcmVfc2V0X3JlZyA9IGhzbW1jMl9iZWZvcmVfc2V0X3JlZzsKLQkJCW1tYy0+c2xvdHNbMF0uYWZ0ZXJfc2V0X3JlZyA9IE5VTEw7CisJCQltbWMtPmJlZm9yZV9zZXRfcmVnID0gaHNtbWMyX2JlZm9yZV9zZXRfcmVnOworCQkJbW1jLT5hZnRlcl9zZXRfcmVnID0gTlVMTDsKIAkJfQogCQlicmVhazsKIAljYXNlIDM6CiAJY2FzZSA0OgogCWNhc2UgNToKLQkJbW1jLT5zbG90c1swXS5iZWZvcmVfc2V0X3JlZyA9IE5VTEw7Ci0JCW1tYy0+c2xvdHNbMF0uYWZ0ZXJfc2V0X3JlZyA9IE5VTEw7CisJCW1tYy0+YmVmb3JlX3NldF9yZWcgPSBOVUxMOworCQltbWMtPmFmdGVyX3NldF9yZWcgPSBOVUxMOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9lcnIoIk1NQyVkIGNvbmZpZ3VyYXRpb24gbm90IHN1cHBvcnRlZCFcbiIsIGMtPm1tYyk7CkBAIC0zNjgsNyArMzM4LDcgQEAKIHZvaWQgb21hcF9oc21tY19sYXRlX2luaXQoc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gKmMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jX3BkYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19wZGF0YTsKIAlpbnQgcmVzOwogCiAJaWYgKG9tYXBfaHNtbWNfZG9uZSAhPSAxKQpAQCAtMzg4LDggKzM1OCw4IEBACiAJCWlmICghbW1jX3BkYXRhKQogCQkJY29udGludWU7CiAKLQkJbW1jX3BkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluID0gYy0+Z3Bpb19jZDsKLQkJbW1jX3BkYXRhLT5zbG90c1swXS5ncGlvX3dwID0gYy0+Z3Bpb193cDsKKwkJbW1jX3BkYXRhLT5zd2l0Y2hfcGluID0gYy0+Z3Bpb19jZDsKKwkJbW1jX3BkYXRhLT5ncGlvX3dwID0gYy0+Z3Bpb193cDsKIAogCQlyZXMgPSBvbWFwX2RldmljZV9yZWdpc3RlcihwZGV2KTsKIAkJaWYgKHJlcykKQEAgLTQwOCwxMiArMzc4LDEyIEBACiAJc3RydWN0IG9tYXBfZGV2aWNlICpvZDsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCWNoYXIgb2hfbmFtZVtNQVhfT01BUF9NTUNfSFdNT0RfTkFNRV9MRU5dOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWNfZGF0YTsKLQlzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgKm1tY19kZXZfYXR0cjsKKwlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICptbWNfZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciAqbW1jX2Rldl9hdHRyOwogCWNoYXIgKm5hbWU7CiAJaW50IHJlczsKIAotCW1tY19kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwltbWNfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCptbWNfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghbW1jX2RhdGEpIHsKIAkJcHJfZXJyKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBtbWMgZGV2aWNlIVxuIik7CiAJCXJldHVybjsKQEAgLTQ2Myw3ICs0MzMsNyBAQAogCX0KIAogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBtbWNfZGF0YSwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSkpOworCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEpKTsKIAlpZiAocmVzKSB7CiAJCXByX2VycigiQ291bGQgbm90IGFkZCBwZGF0YSBmb3IgJXNcbiIsIG5hbWUpOwogCQlnb3RvIHB1dF9wZGV2OwpAQCAtNDg5LDcgKzQ1OSw3IEBACiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIAogZnJlZV9uYW1lOgotCWtmcmVlKG1tY19kYXRhLT5zbG90c1swXS5uYW1lKTsKKwlrZnJlZShtbWNfZGF0YS0+bmFtZSk7CiAKIGZyZWVfbW1jOgogCWtmcmVlKG1tY19kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaAppbmRleCA3ZjJlNzkwLi4xNDhjZDliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCkBAIC0xMiwyNSArMTIsMTggQEAKIAl1OAltbWM7CQkvKiBjb250cm9sbGVyIDEvMi8zICovCiAJdTMyCWNhcHM7CQkvKiA0Lzggd2lyZXMgYW5kIGFueSBhZGRpdGlvbmFsIGhvc3QKIAkJCQkgKiBjYXBhYmlsaXRpZXMgT1InZCAocmVmLiBsaW51eC9tbWMvaG9zdC5oKSAqLwotCXUzMglwbV9jYXBzOwkvKiBQTSBjYXBhYmlsaXRpZXMgKi8KIAlib29sCXRyYW5zY2VpdmVyOwkvKiBNTUMtMiBvcHRpb24gKi8KIAlib29sCWV4dF9jbG9jazsJLyogdXNlIGV4dGVybmFsIHBpbiBmb3IgaW5wdXQgY2xvY2sgKi8KIAlib29sCWNvdmVyX29ubHk7CS8qIE5vIGNhcmQgZGV0ZWN0IC0ganVzdCBjb3ZlciBzd2l0Y2ggKi8KIAlib29sCW5vbnJlbW92YWJsZTsJLyogTm9ucmVtb3ZhYmxlIGUuZy4gZU1NQyAqLwotCWJvb2wJcG93ZXJfc2F2aW5nOwkvKiBUcnkgdG8gc2xlZXAgb3IgcG93ZXIgb2ZmIHdoZW4gcG9zc2libGUgKi8KLQlib29sCW5vX29mZjsJCS8qIHBvd2VyX3NhdmluZyBhbmQgcG93ZXIgaXMgbm90IHRvIGdvIG9mZiAqLwotCWJvb2wJbm9fb2ZmX2luaXQ7CS8qIG5vIHBvd2VyIG9mZiB3aGVuIG5vdCBpbiBNTUMgc2xlZXAgc3RhdGUgKi8KLQlib29sCXZjY19hdXhfZGlzYWJsZV9pc19zbGVlcDsgLyogUmVndWxhdG9yIG9mZiByZW1hcHBlZCB0byBzbGVlcCAqLwogCWJvb2wJZGVmZXJyZWQ7CS8qIG1tYyBuZWVkcyBhIGRlZmVycmVkIHByb2JlICovCiAJaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KIAlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLwogCWNoYXIJKm5hbWU7CQkvKiBvciBOVUxMIGZvciBkZWZhdWx0ICovCiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsJLyogbW1jIGNvbnRyb2xsZXIgaW5zdGFuY2UgKi8KIAlpbnQJb2NyX21hc2s7CS8qIHRlbXBvcmFyeSBIQUNLICovCi0JaW50CW1heF9mcmVxOwkvKiBtYXhpbXVtIGNsb2NrLCBpZiBjb25zdHJhaW5lZCBieSBleHRlcm5hbAotCQkJCSAqIGNpcmN1aXRyeSwgb3IgMCBmb3IgZGVmYXVsdCAqLwogCS8qIFJlbXV4IChwYWQgY29uZmlndXJhdGlvbikgd2hlbiBwb3dlcmluZyBvbi9vZmYgKi8KLQl2b2lkICgqcmVtdXgpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbik7CisJdm9pZCAoKnJlbXV4KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbik7CiAJLyogaW5pdCBzb21lIHNwZWNpYWwgY2FyZCAqLwogCXZvaWQgKCppbml0X2NhcmQpKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IDAzY2JiMTYuLjRmYzgzODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTQ1LDEzICs0NSwxNSBAQAogI2luY2x1ZGUgInNyYW0uaCIKICNpbmNsdWRlICJjbTJ4eHguaCIKICNpbmNsdWRlICJjbTN4eHguaCIKKyNpbmNsdWRlICJjbTMzeHguaCIKKyNpbmNsdWRlICJjbTQ0eHguaCIKICNpbmNsdWRlICJwcm0uaCIKICNpbmNsdWRlICJjbS5oIgogI2luY2x1ZGUgInByY21fbXB1NDR4eC5oIgogI2luY2x1ZGUgInBybWluc3Q0NHh4LmgiCi0jaW5jbHVkZSAiY21pbnN0NDR4eC5oIgogI2luY2x1ZGUgInBybTJ4eHguaCIKICNpbmNsdWRlICJwcm0zeHh4LmgiCisjaW5jbHVkZSAicHJtMzN4eC5oIgogI2luY2x1ZGUgInBybTQ0eHguaCIKICNpbmNsdWRlICJvcHAyeHh4LmgiCiAKQEAgLTU2NSw2ICs1NjcsOCBAQAogCW9tYXAyX3NldF9nbG9iYWxzX2NtKEFNMzNYWF9MNF9XS19JT19BRERSRVNTKEFNMzNYWF9QUkNNX0JBU0UpLCBOVUxMKTsKIAlvbWFwM3h4eF9jaGVja19yZXZpc2lvbigpOwogCWFtMzN4eF9jaGVja19mZWF0dXJlcygpOworCWFtMzN4eF9wcm1faW5pdCgpOworCWFtMzN4eF9jbV9pbml0KCk7CiAJYW0zM3h4X3Bvd2VyZG9tYWluc19pbml0KCk7CiAJYW0zM3h4X2Nsb2NrZG9tYWluc19pbml0KCk7CiAJYW0zM3h4X2h3bW9kX2luaXQoKTsKQEAgLTU5MSw2ICs1OTUsOCBAQAogCW9tYXBfY21fYmFzZV9pbml0KCk7CiAJb21hcDN4eHhfY2hlY2tfcmV2aXNpb24oKTsKIAlhbTMzeHhfY2hlY2tfZmVhdHVyZXMoKTsKKwlvbWFwNDR4eF9wcm1faW5pdCgpOworCW9tYXA0X2NtX2luaXQoKTsKIAlhbTQzeHhfcG93ZXJkb21haW5zX2luaXQoKTsKIAlhbTQzeHhfY2xvY2tkb21haW5zX2luaXQoKTsKIAlhbTQzeHhfaHdtb2RfaW5pdCgpOwpAQCAtNjIwLDYgKzYyNiw3IEBACiAJb21hcF9jbV9iYXNlX2luaXQoKTsKIAlvbWFwNHh4eF9jaGVja19yZXZpc2lvbigpOwogCW9tYXA0eHh4X2NoZWNrX2ZlYXR1cmVzKCk7CisJb21hcDRfY21faW5pdCgpOwogCW9tYXA0X3BtX2luaXRfZWFybHkoKTsKIAlvbWFwNDR4eF9wcm1faW5pdCgpOwogCW9tYXA0NHh4X3ZvbHRhZ2Vkb21haW5zX2luaXQoKTsKQEAgLTY1NSw2ICs2NjIsNyBAQAogCW9tYXBfY21fYmFzZV9pbml0KCk7CiAJb21hcDQ0eHhfcHJtX2luaXQoKTsKIAlvbWFwNXh4eF9jaGVja19yZXZpc2lvbigpOworCW9tYXA0X2NtX2luaXQoKTsKIAlvbWFwNTR4eF92b2x0YWdlZG9tYWluc19pbml0KCk7CiAJb21hcDU0eHhfcG93ZXJkb21haW5zX2luaXQoKTsKIAlvbWFwNTR4eF9jbG9ja2RvbWFpbnNfaW5pdCgpOwpAQCAtNjg2LDYgKzY5NCw3IEBACiAJb21hcF9jbV9iYXNlX2luaXQoKTsKIAlvbWFwNDR4eF9wcm1faW5pdCgpOwogCWRyYTd4eHhfY2hlY2tfcmV2aXNpb24oKTsKKwlvbWFwNF9jbV9pbml0KCk7CiAJZHJhN3h4X3Bvd2VyZG9tYWluc19pbml0KCk7CiAJZHJhN3h4X2Nsb2NrZG9tYWluc19pbml0KCk7CiAJZHJhN3h4X2h3bW9kX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy5oCmluZGV4IDBjZDRiMDguLjMwZDM5YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMuaApAQCAtMSw1ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbW1jLW9tYXAuaD4KIAogI2RlZmluZSBPTUFQMjRYWF9OUl9NTUMJCTIKICNkZWZpbmUgT01BUDI0MjBfTU1DX1NJWkUJT01BUDFfTU1DX1NJWkUKQEAgLTcsMTQgKzUsNiBAQAogCiAjZGVmaW5lIE9NQVA0X01NQ19SRUdfT0ZGU0VUCTB4MTAwCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQotdm9pZCBvbWFwMjQyeF9pbml0X21tYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqKm1tY19kYXRhKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDI0MnhfaW5pdF9tbWMoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKiptbWNfZGF0YSkKLXsKLX0KLSNlbmRpZgotCiBzdHJ1Y3Qgb21hcF9od21vZDsKIGludCBvbWFwX21zZGlfcmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLW1wdXNzLWxvd3Bvd2VyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtbXB1c3MtbG93cG93ZXIuYwppbmRleCA2OTQ0YWUzLi43OWY0OWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtbXB1c3MtbG93cG93ZXIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtbXB1c3MtbG93cG93ZXIuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiBpbnQgb21hcDRfZW50ZXJfbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHBvd2VyX3N0YXRlKQogewogCXN0cnVjdCBvbWFwNF9jcHVfcG1faW5mbyAqcG1faW5mbyA9ICZwZXJfY3B1KG9tYXA0X3BtX2luZm8sIGNwdSk7Ci0JdW5zaWduZWQgaW50IHNhdmVfc3RhdGUgPSAwOworCXVuc2lnbmVkIGludCBzYXZlX3N0YXRlID0gMCwgY3B1X2xvZ2ljX3N0YXRlID0gUFdSRE1fUE9XRVJfUkVUOwogCXVuc2lnbmVkIGludCB3YWtldXBfY3B1OwogCiAJaWYgKG9tYXBfcmV2KCkgPT0gT01BUDQ0MzBfUkVWX0VTMV8wKQpAQCAtMjM5LDYgKzIzOSw3IEBACiAJCXNhdmVfc3RhdGUgPSAwOwogCQlicmVhazsKIAljYXNlIFBXUkRNX1BPV0VSX09GRjoKKwkJY3B1X2xvZ2ljX3N0YXRlID0gUFdSRE1fUE9XRVJfT0ZGOwogCQlzYXZlX3N0YXRlID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBQV1JETV9QT1dFUl9SRVQ6CkBAIC0yNzAsNiArMjcxLDcgQEAKIAogCWNwdV9jbGVhcl9wcmV2X2xvZ2ljX3B3cnN0KGNwdSk7CiAJcHdyZG1fc2V0X25leHRfcHdyc3QocG1faW5mby0+cHdyZG0sIHBvd2VyX3N0YXRlKTsKKwlwd3JkbV9zZXRfbG9naWNfcmV0c3QocG1faW5mby0+cHdyZG0sIGNwdV9sb2dpY19zdGF0ZSk7CiAJc2V0X2NwdV93YWtldXBfYWRkcihjcHUsIHZpcnRfdG9fcGh5cyhvbWFwX3BtX29wcy5yZXN1bWUpKTsKIAlvbWFwX3BtX29wcy5zY3VfcHJlcGFyZShjcHUsIHBvd2VyX3N0YXRlKTsKIAlsMngwX3B3cnN0X3ByZXBhcmUoY3B1LCBzYXZlX3N0YXRlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDItcmVzdGFydC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMi1yZXN0YXJ0LmMKaW5kZXggNjg0MjNlMi4uZDkzN2IyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMi1yZXN0YXJ0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMi1yZXN0YXJ0LmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgInBybTJ4eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKIAogLyoKICAqIHJlc2V0X3ZpcnRfcHJjbV9zZXRfY2ssIHJlc2V0X3N5c19jazogcG9pbnRlcnMgdG8gdGhlIHZpcnRfcHJjbV9zZXQKQEAgLTQwLDggKzQwLDcgQEAKIAogCS8qIFhYWCBTaG91bGQgc2F2ZSB0aGUgY21kIGFyZ3VtZW50IGZvciB1c2UgYWZ0ZXIgdGhlIHJlYm9vdCAqLwogCi0Jb21hcDJ4eHhfcHJtX2RwbGxfcmVzZXQoKTsgLyogbmV2ZXIgcmV0dXJucyAqLwotCXdoaWxlICgxKTsKKwlvbWFwX3BybV9yZXNldF9zeXN0ZW0oKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAzLXJlc3RhcnQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDMtcmVzdGFydC5jCmluZGV4IDVkZTJhMGMuLjEwM2E0OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDMtcmVzdGFydC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDMtcmVzdGFydC5jCkBAIC0xNCwxMCArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KIAotI2luY2x1ZGUgImlvbWFwLmgiCi0jaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgotI2luY2x1ZGUgInBybTN4eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKIAogLyogR2xvYmFsIGFkZHJlc3MgYmFzZSBzZXR1cCBjb2RlICovCiAKQEAgLTMyLDYgKzMwLDUgQEAKIHZvaWQgb21hcDN4eHhfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlvbWFwM19jdHJsX3dyaXRlX2Jvb3RfbW9kZSgoY21kID8gKHU4KSpjbWQgOiAwKSk7Ci0Jb21hcDN4eHhfcHJtX2RwbGwzX3Jlc2V0KCk7IC8qIG5ldmVyIHJldHVybnMgKi8KLQl3aGlsZSAoMSk7CisJb21hcF9wcm1fcmVzZXRfc3lzdGVtKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LWNvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYwppbmRleCAxNmIyMGNlLi5iN2NiNDRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LWNvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJpb21hcC5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgInBybWluc3Q0NHh4LmgiCiAjaW5jbHVkZSAicHJjbV9tcHU0NHh4LmgiCiAjaW5jbHVkZSAib21hcDQtc2FyLWxheW91dC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1yZXN0YXJ0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LXJlc3RhcnQuYwppbmRleCA0MWRmZDdkLi5hOTllN2Y3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LXJlc3RhcnQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LXJlc3RhcnQuYwpAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSAicHJtaW5zdDQ0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKIAogLyoqCiAgKiBvbWFwNDR4eF9yZXN0YXJ0IC0gdHJpZ2dlciBhIHNvZnR3YXJlIHJlc3RhcnQgb2YgdGhlIFNvQwpAQCAtMjIsNyArMjIsNSBAQAogdm9pZCBvbWFwNDR4eF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qIFhYWCBTaG91bGQgc2F2ZSAnY21kJyBpbnRvIHNjcmF0Y2hwYWQgZm9yIHVzZSBhZnRlciByZWJvb3QgKi8KLQlvbWFwNF9wcm1pbnN0X2dsb2JhbF93YXJtX3N3X3Jlc2V0KCk7IC8qIG5ldmVyIHJldHVybnMgKi8KLQl3aGlsZSAoMSkKLQkJOworCW9tYXBfcHJtX3Jlc2V0X3N5c3RlbSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jCmluZGV4IGQyMmMzMGQuLjhjNThiNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMKQEAgLTkxNyw2ICs5MTcsMTAgQEAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfZGV2aWNlX2xhdGVfaW5pdCh2b2lkKQogewogCWJ1c19mb3JfZWFjaF9kZXYoJnBsYXRmb3JtX2J1c190eXBlLCBOVUxMLCBOVUxMLCBvbWFwX2RldmljZV9sYXRlX2lkbGUpOworCisJV0FSTighb2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSwKKwkJImxlZ2FjeSBib290aW5nIGRlcHJlY2F0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gYm9vdCB3aXRoIC5kdHNcbiIpOworCiAJcmV0dXJuIDA7CiB9CiBvbWFwX2xhdGVfaW5pdGNhbGxfc3luYyhvbWFwX2RldmljZV9sYXRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwppbmRleCA3MTYyNDdlLi5jYmI5MDhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwpAQCAtMTUzLDcgKzE1Myw2IEBACiAjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKICNpbmNsdWRlICJjbTJ4eHguaCIKICNpbmNsdWRlICJjbTN4eHguaCIKLSNpbmNsdWRlICJjbWluc3Q0NHh4LmgiCiAjaW5jbHVkZSAiY20zM3h4LmgiCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtM3h4eC5oIgpAQCAtOTc5LDMxICs5NzgsOSBAQAogCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogJXM6ICVkXG4iLAogCQkgb2gtPm5hbWUsIF9fZnVuY19fLCBvaC0+cHJjbS5vbWFwNC5tb2R1bGVtb2RlKTsKIAotCW9tYXA0X2NtaW5zdF9tb2R1bGVfZW5hYmxlKG9oLT5wcmNtLm9tYXA0Lm1vZHVsZW1vZGUsCi0JCQkJICAgb2gtPmNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQkgICBvaC0+Y2xrZG0tPmNtX2luc3QsCi0JCQkJICAgb2gtPmNsa2RtLT5jbGtkbV9vZmZzLAotCQkJCSAgIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7Ci19Ci0KLS8qKgotICogX2FtMzN4eF9lbmFibGVfbW9kdWxlIC0gZW5hYmxlIENMS0NUUkwgbW9kdWxlbW9kZSBvbiBBTTMzWFgKLSAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgotICoKLSAqIEVuYWJsZXMgdGhlIFBSQ00gbW9kdWxlIG1vZGUgcmVsYXRlZCB0byB0aGUgaHdtb2QgQG9oLgotICogTm8gcmV0dXJuIHZhbHVlLgotICovCi1zdGF0aWMgdm9pZCBfYW0zM3h4X2VuYWJsZV9tb2R1bGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQotewotCWlmICghb2gtPmNsa2RtIHx8ICFvaC0+cHJjbS5vbWFwNC5tb2R1bGVtb2RlKQotCQlyZXR1cm47Ci0KLQlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6ICVzOiAlZFxuIiwKLQkJIG9oLT5uYW1lLCBfX2Z1bmNfXywgb2gtPnByY20ub21hcDQubW9kdWxlbW9kZSk7Ci0KLQlhbTMzeHhfY21fbW9kdWxlX2VuYWJsZShvaC0+cHJjbS5vbWFwNC5tb2R1bGVtb2RlLCBvaC0+Y2xrZG0tPmNtX2luc3QsCi0JCQkJb2gtPmNsa2RtLT5jbGtkbV9vZmZzLAotCQkJCW9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7CisJb21hcF9jbV9tb2R1bGVfZW5hYmxlKG9oLT5wcmNtLm9tYXA0Lm1vZHVsZW1vZGUsCisJCQkgICAgICBvaC0+Y2xrZG0tPnByY21fcGFydGl0aW9uLAorCQkJICAgICAgb2gtPmNsa2RtLT5jbV9pbnN0LCBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOwogfQogCiAvKioKQEAgLTEwMjYsMzUgKzEwMDMsOSBAQAogCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF9OT19JRExFU1QpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9pZGxlKG9oLT5jbGtkbS0+cHJjbV9wYXJ0aXRpb24sCi0JCQkJCSAgICAgb2gtPmNsa2RtLT5jbV9pbnN0LAotCQkJCQkgICAgIG9oLT5jbGtkbS0+Y2xrZG1fb2ZmcywKLQkJCQkJICAgICBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOwotfQotCi0vKioKLSAqIF9hbTMzeHhfd2FpdF90YXJnZXRfZGlzYWJsZSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGJlIGRpc2FibGVkIG9uIEFNMzNYWAotICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCi0gKgotICogV2FpdCBmb3IgYSBtb2R1bGUgQG9oIHRvIGVudGVyIHNsYXZlIGlkbGUuICBSZXR1cm5zIDAgaWYgdGhlIG1vZHVsZQotICogZG9lcyBub3QgaGF2ZSBhbiBJRExFU1QgYml0IG9yIGlmIHRoZSBtb2R1bGUgc3VjY2Vzc2Z1bGx5IGVudGVycwotICogc2xhdmUgaWRsZTsgb3RoZXJ3aXNlLCBwYXNzIGFsb25nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCi0gKiBhcHByb3ByaWF0ZSAqX2NtKl93YWl0X21vZHVsZV9pZGxlKCkgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyBpbnQgX2FtMzN4eF93YWl0X3RhcmdldF9kaXNhYmxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKLXsKLQlpZiAoIW9oKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvaC0+X2ludF9mbGFncyAmIF9IV01PRF9OT19NUFVfUE9SVCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAob2gtPmZsYWdzICYgSFdNT0RfTk9fSURMRVNUKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBhbTMzeHhfY21fd2FpdF9tb2R1bGVfaWRsZShvaC0+Y2xrZG0tPmNtX2luc3QsCi0JCQkJCSAgICAgb2gtPmNsa2RtLT5jbGtkbV9vZmZzLAotCQkJCQkgICAgIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7CisJcmV0dXJuIG9tYXBfY21fd2FpdF9tb2R1bGVfaWRsZShvaC0+Y2xrZG0tPnByY21fcGFydGl0aW9uLAorCQkJCQlvaC0+Y2xrZG0tPmNtX2luc3QsCisJCQkJCW9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2ZmcywgMCk7CiB9CiAKIC8qKgpAQCAtMTg1OSwxMCArMTgxMCw4IEBACiAKIAlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6ICVzXG4iLCBvaC0+bmFtZSwgX19mdW5jX18pOwogCi0Jb21hcDRfY21pbnN0X21vZHVsZV9kaXNhYmxlKG9oLT5jbGtkbS0+cHJjbV9wYXJ0aXRpb24sCi0JCQkJICAgIG9oLT5jbGtkbS0+Y21faW5zdCwKLQkJCQkgICAgb2gtPmNsa2RtLT5jbGtkbV9vZmZzLAotCQkJCSAgICBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOworCW9tYXBfY21fbW9kdWxlX2Rpc2FibGUob2gtPmNsa2RtLT5wcmNtX3BhcnRpdGlvbiwgb2gtPmNsa2RtLT5jbV9pbnN0LAorCQkJICAgICAgIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7CiAKIAl2ID0gX29tYXA0X3dhaXRfdGFyZ2V0X2Rpc2FibGUob2gpOwogCWlmICh2KQpAQCAtMTg3MywzNiArMTgyMiw2IEBACiB9CiAKIC8qKgotICogX2FtMzN4eF9kaXNhYmxlX21vZHVsZSAtIGVuYWJsZSBDTEtDVFJMIG1vZHVsZW1vZGUgb24gQU0zM1hYCi0gKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKLSAqCi0gKiBEaXNhYmxlIHRoZSBQUkNNIG1vZHVsZSBtb2RlIHJlbGF0ZWQgdG8gdGhlIGh3bW9kIEBvaC4KLSAqIFJldHVybiBFSU5WQUwgaWYgdGhlIG1vZHVsZW1vZGUgaXMgbm90IHN1cHBvcnRlZCBhbmQgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQgX2FtMzN4eF9kaXNhYmxlX21vZHVsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCi17Ci0JaW50IHY7Ci0KLQlpZiAoIW9oLT5jbGtkbSB8fCAhb2gtPnByY20ub21hcDQubW9kdWxlbW9kZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6ICVzXG4iLCBvaC0+bmFtZSwgX19mdW5jX18pOwotCi0JaWYgKF9hcmVfYW55X2hhcmRyZXNldF9saW5lc19hc3NlcnRlZChvaCkpCi0JCXJldHVybiAwOwotCi0JYW0zM3h4X2NtX21vZHVsZV9kaXNhYmxlKG9oLT5jbGtkbS0+Y21faW5zdCwgb2gtPmNsa2RtLT5jbGtkbV9vZmZzLAotCQkJCSBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOwotCi0JdiA9IF9hbTMzeHhfd2FpdF90YXJnZXRfZGlzYWJsZShvaCk7Ci0JaWYgKHYpCi0JCXByX3dhcm4oIm9tYXBfaHdtb2Q6ICVzOiBfd2FpdF90YXJnZXRfZGlzYWJsZSBmYWlsZWRcbiIsCi0JCQlvaC0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCiAgKiBfb2NwX3NvZnRyZXNldCAtIHJlc2V0IGFuIG9tYXBfaHdtb2QgdmlhIHRoZSBPQ1BfU1lTQ09ORklHIGJpdAogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgpAQCAtMjA2NSwxMCArMTk4NCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fY2hhaW5fbG9jaywgZmxhZ3MpOwogCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpKQotCQlvbWFwM3h4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4oKTsKLQllbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkKLQkJb21hcDQ0eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKCk7CisJb21hcF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4oKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX2NoYWluX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTI3MTksMTEgKzI2MzUsMzMgQEAKIAlpZiAob2gtPl9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfSU5JVElBTElaRUQpCiAJCXJldHVybiAwOwogCisJaWYgKG9oLT5wYXJlbnRfaHdtb2QpIHsKKwkJaW50IHI7CisKKwkJciA9IF9lbmFibGUob2gtPnBhcmVudF9od21vZCk7CisJCVdBUk4ociwgImh3bW9kOiAlczogc2V0dXA6IGZhaWxlZCB0byBlbmFibGUgcGFyZW50IGh3bW9kICVzXG4iLAorCQkgICAgIG9oLT5uYW1lLCBvaC0+cGFyZW50X2h3bW9kLT5uYW1lKTsKKwl9CisKIAlfc2V0dXBfaWNsa19hdXRvaWRsZShvaCk7CiAKIAlpZiAoIV9zZXR1cF9yZXNldChvaCkpCiAJCV9zZXR1cF9wb3N0c2V0dXAob2gpOwogCisJaWYgKG9oLT5wYXJlbnRfaHdtb2QpIHsKKwkJdTggcG9zdHNldHVwX3N0YXRlOworCisJCXBvc3RzZXR1cF9zdGF0ZSA9IG9oLT5wYXJlbnRfaHdtb2QtPl9wb3N0c2V0dXBfc3RhdGU7CisKKwkJaWYgKHBvc3RzZXR1cF9zdGF0ZSA9PSBfSFdNT0RfU1RBVEVfSURMRSkKKwkJCV9pZGxlKG9oLT5wYXJlbnRfaHdtb2QpOworCQllbHNlIGlmIChwb3N0c2V0dXBfc3RhdGUgPT0gX0hXTU9EX1NUQVRFX0RJU0FCTEVEKQorCQkJX3NodXRkb3duKG9oLT5wYXJlbnRfaHdtb2QpOworCQllbHNlIGlmIChwb3N0c2V0dXBfc3RhdGUgIT0gX0hXTU9EX1NUQVRFX0VOQUJMRUQpCisJCQlXQVJOKDEsICJod21vZDogJXM6IHVua25vd24gcG9zdHNldHVwIHN0YXRlICVkISBkZWZhdWx0aW5nIHRvIGVuYWJsZWRcbiIsCisJCQkgICAgIG9oLT5wYXJlbnRfaHdtb2QtPm5hbWUsIHBvc3RzZXR1cF9zdGF0ZSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4MzIsMTIgKzI3NzAsMTAgQEAKIAlfYWxsb2NfbGlua3MoJm1sLCAmc2wpOwogCiAJbWwtPm9jcF9pZiA9IG9pOwotCUlOSVRfTElTVF9IRUFEKCZtbC0+bm9kZSk7CiAJbGlzdF9hZGQoJm1sLT5ub2RlLCAmb2ktPm1hc3Rlci0+bWFzdGVyX3BvcnRzKTsKIAlvaS0+bWFzdGVyLT5tYXN0ZXJzX2NudCsrOwogCiAJc2wtPm9jcF9pZiA9IG9pOwotCUlOSVRfTElTVF9IRUFEKCZzbC0+bm9kZSk7CiAJbGlzdF9hZGQoJnNsLT5ub2RlLCAmb2ktPnNsYXZlLT5zbGF2ZV9wb3J0cyk7CiAJb2ktPnNsYXZlLT5zbGF2ZXNfY250Kys7CiAKQEAgLTI5MjcsNyArMjg2Myw3IEBACiAvKiBTdGF0aWMgZnVuY3Rpb25zIGludGVuZGVkIG9ubHkgZm9yIHVzZSBpbiBzb2Nfb3BzIGZpZWxkIGZ1bmN0aW9uIHBvaW50ZXJzICovCiAKIC8qKgotICogX29tYXAyeHh4X3dhaXRfdGFyZ2V0X3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gbGVhdmUgc2xhdmUgaWRsZQorICogX29tYXAyeHh4XzN4eHhfd2FpdF90YXJnZXRfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBsZWF2ZSBzbGF2ZSBpZGxlCiAgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKICAqCiAgKiBXYWl0IGZvciBhIG1vZHVsZSBAb2ggdG8gbGVhdmUgc2xhdmUgaWRsZS4gIFJldHVybnMgMCBpZiB0aGUgbW9kdWxlCkBAIC0yOTM1LDcgKzI4NzEsNyBAQAogICogc2xhdmUgaWRsZTsgb3RoZXJ3aXNlLCBwYXNzIGFsb25nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCiAgKiBhcHByb3ByaWF0ZSAqX2NtKl93YWl0X21vZHVsZV9yZWFkeSgpIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW50IF9vbWFwMnh4eF93YWl0X3RhcmdldF9yZWFkeShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCitzdGF0aWMgaW50IF9vbWFwMnh4eF8zeHh4X3dhaXRfdGFyZ2V0X3JlYWR5KHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKIAlpZiAoIW9oKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5NDgsMzYgKzI4ODQsOSBAQAogCiAJLyogWFhYIGNoZWNrIG1vZHVsZSBTSURMRU1PREUsIGhhcmRyZXNldCBzdGF0dXMsIGVuYWJsZWQgY2xvY2tzICovCiAKLQlyZXR1cm4gb21hcDJ4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkob2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsCi0JCQkJCSAgICAgb2gtPnByY20ub21hcDIuaWRsZXN0X3JlZ19pZCwKLQkJCQkJICAgICBvaC0+cHJjbS5vbWFwMi5pZGxlc3RfaWRsZV9iaXQpOwotfQotCi0vKioKLSAqIF9vbWFwM3h4eF93YWl0X3RhcmdldF9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIHNsYXZlIGlkbGUKLSAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgotICoKLSAqIFdhaXQgZm9yIGEgbW9kdWxlIEBvaCB0byBsZWF2ZSBzbGF2ZSBpZGxlLiAgUmV0dXJucyAwIGlmIHRoZSBtb2R1bGUKLSAqIGRvZXMgbm90IGhhdmUgYW4gSURMRVNUIGJpdCBvciBpZiB0aGUgbW9kdWxlIHN1Y2Nlc3NmdWxseSBsZWF2ZXMKLSAqIHNsYXZlIGlkbGU7IG90aGVyd2lzZSwgcGFzcyBhbG9uZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZQotICogYXBwcm9wcmlhdGUgKl9jbSpfd2FpdF9tb2R1bGVfcmVhZHkoKSBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBfb21hcDN4eHhfd2FpdF90YXJnZXRfcmVhZHkoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQotewotCWlmICghb2gpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9oLT5mbGFncyAmIEhXTU9EX05PX0lETEVTVCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIV9maW5kX21wdV9ydF9wb3J0KG9oKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBYWFggY2hlY2sgbW9kdWxlIFNJRExFTU9ERSwgaGFyZHJlc2V0IHN0YXR1cywgZW5hYmxlZCBjbG9ja3MgKi8KLQotCXJldHVybiBvbWFwM3h4eF9jbV93YWl0X21vZHVsZV9yZWFkeShvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywKLQkJCQkJICAgICBvaC0+cHJjbS5vbWFwMi5pZGxlc3RfcmVnX2lkLAotCQkJCQkgICAgIG9oLT5wcmNtLm9tYXAyLmlkbGVzdF9pZGxlX2JpdCk7CisJcmV0dXJuIG9tYXBfY21fd2FpdF9tb2R1bGVfcmVhZHkoMCwgb2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsCisJCQkJCSBvaC0+cHJjbS5vbWFwMi5pZGxlc3RfcmVnX2lkLAorCQkJCQkgb2gtPnByY20ub21hcDIuaWRsZXN0X2lkbGVfYml0KTsKIH0KIAogLyoqCkBAIC0zMDAyLDM3ICsyOTExLDkgQEAKIAogCS8qIFhYWCBjaGVjayBtb2R1bGUgU0lETEVNT0RFLCBoYXJkcmVzZXQgc3RhdHVzICovCiAKLQlyZXR1cm4gb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX3JlYWR5KG9oLT5jbGtkbS0+cHJjbV9wYXJ0aXRpb24sCi0JCQkJCSAgICAgIG9oLT5jbGtkbS0+Y21faW5zdCwKLQkJCQkJICAgICAgb2gtPmNsa2RtLT5jbGtkbV9vZmZzLAotCQkJCQkgICAgICBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOwotfQotCi0vKioKLSAqIF9hbTMzeHhfd2FpdF90YXJnZXRfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBsZWF2ZSBzbGF2ZSBpZGxlCi0gKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKLSAqCi0gKiBXYWl0IGZvciBhIG1vZHVsZSBAb2ggdG8gbGVhdmUgc2xhdmUgaWRsZS4gIFJldHVybnMgMCBpZiB0aGUgbW9kdWxlCi0gKiBkb2VzIG5vdCBoYXZlIGFuIElETEVTVCBiaXQgb3IgaWYgdGhlIG1vZHVsZSBzdWNjZXNzZnVsbHkgbGVhdmVzCi0gKiBzbGF2ZSBpZGxlOyBvdGhlcndpc2UsIHBhc3MgYWxvbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKLSAqIGFwcHJvcHJpYXRlICpfY20qX3dhaXRfbW9kdWxlX3JlYWR5KCkgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyBpbnQgX2FtMzN4eF93YWl0X3RhcmdldF9yZWFkeShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCi17Ci0JaWYgKCFvaCB8fCAhb2gtPmNsa2RtKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF9OT19JRExFU1QpCi0JCXJldHVybiAwOwotCi0JaWYgKCFfZmluZF9tcHVfcnRfcG9ydChvaCkpCi0JCXJldHVybiAwOwotCi0JLyogWFhYIGNoZWNrIG1vZHVsZSBTSURMRU1PREUsIGhhcmRyZXNldCBzdGF0dXMgKi8KLQotCXJldHVybiBhbTMzeHhfY21fd2FpdF9tb2R1bGVfcmVhZHkob2gtPmNsa2RtLT5jbV9pbnN0LAotCQkJCQkgICAgICBvaC0+Y2xrZG0tPmNsa2RtX29mZnMsCi0JCQkJCSAgICAgIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7CisJcmV0dXJuIG9tYXBfY21fd2FpdF9tb2R1bGVfcmVhZHkob2gtPmNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJIG9oLT5jbGtkbS0+Y21faW5zdCwKKwkJCQkJIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2ZmcywgMCk7CiB9CiAKIC8qKgpAQCAtMzA0OSw4ICsyOTMwLDggQEAKIHN0YXRpYyBpbnQgX29tYXAyX2Fzc2VydF9oYXJkcmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oLAogCQkJCSAgIHN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvICpvaHJpKQogewotCXJldHVybiBvbWFwMl9wcm1fYXNzZXJ0X2hhcmRyZXNldChvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywKLQkJCQkJICBvaHJpLT5yc3Rfc2hpZnQpOworCXJldHVybiBvbWFwX3BybV9hc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwgMCwKKwkJCQkJIG9oLT5wcmNtLm9tYXAyLm1vZHVsZV9vZmZzLCAwKTsKIH0KIAogLyoqCkBAIC0zMDY3LDkgKzI5NDgsOCBAQAogc3RhdGljIGludCBfb21hcDJfZGVhc3NlcnRfaGFyZHJlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwKIAkJCQkgICAgIHN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvICpvaHJpKQogewotCXJldHVybiBvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KG9oLT5wcmNtLm9tYXAyLm1vZHVsZV9vZmZzLAotCQkJCQkgICAgb2hyaS0+cnN0X3NoaWZ0LAotCQkJCQkgICAgb2hyaS0+c3Rfc2hpZnQpOworCXJldHVybiBvbWFwX3BybV9kZWFzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LCBvaHJpLT5zdF9zaGlmdCwgMCwKKwkJCQkJICAgb2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsIDAsIDApOwogfQogCiAvKioKQEAgLTMwODcsOCArMjk2Nyw4IEBACiBzdGF0aWMgaW50IF9vbWFwMl9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoc3RydWN0IG9tYXBfaHdtb2QgKm9oLAogCQkJCQlzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyAqb2hyaSkKIHsKLQlyZXR1cm4gb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywKLQkJCQkJICAgICAgIG9ocmktPnN0X3NoaWZ0KTsKKwlyZXR1cm4gb21hcF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKG9ocmktPnN0X3NoaWZ0LCAwLAorCQkJCQkgICAgICBvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywgMCk7CiB9CiAKIC8qKgpAQCAtMzEwOSwxMCArMjk4OSwxMCBAQAogCWlmICghb2gtPmNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBvbWFwNF9wcm1pbnN0X2Fzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LAotCQkJCW9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQlvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCW9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2Zmcyk7CisJcmV0dXJuIG9tYXBfcHJtX2Fzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LAorCQkJCQkgb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fcGFydGl0aW9uLAorCQkJCQkgb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJIG9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2Zmcyk7CiB9CiAKIC8qKgpAQCAtMzEzNiwxMCArMzAxNiwxMCBAQAogCWlmIChvaHJpLT5zdF9zaGlmdCkKIAkJcHJfZXJyKCJvbWFwX2h3bW9kOiAlczogJXM6IGh3bW9kIGRhdGEgZXJyb3I6IE9NQVA0IGRvZXMgbm90IHN1cHBvcnQgc3Rfc2hpZnRcbiIsCiAJCSAgICAgICBvaC0+bmFtZSwgb2hyaS0+bmFtZSk7Ci0JcmV0dXJuIG9tYXA0X3BybWluc3RfZGVhc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwKLQkJCQlvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9wYXJ0aXRpb24sCi0JCQkJb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQlvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMpOworCXJldHVybiBvbWFwX3BybV9kZWFzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LCAwLAorCQkJCQkgICBvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCSAgIG9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCSAgIG9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2ZmcywgMCk7CiB9CiAKIC8qKgpAQCAtMzE2MCwxMCArMzA0MCwxMSBAQAogCWlmICghb2gtPmNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBvbWFwNF9wcm1pbnN0X2lzX2hhcmRyZXNldF9hc3NlcnRlZChvaHJpLT5yc3Rfc2hpZnQsCi0JCQkJb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fcGFydGl0aW9uLAotCQkJCW9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzKTsKKwlyZXR1cm4gb21hcF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKG9ocmktPnJzdF9zaGlmdCwKKwkJCQkJICAgICAgb2gtPmNsa2RtLT5wd3JkbS5wdHItPgorCQkJCQkgICAgICBwcmNtX3BhcnRpdGlvbiwKKwkJCQkJICAgICAgb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJICAgICAgb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzKTsKIH0KIAogLyoqCkBAIC0zMTgyLDkgKzMwNjMsOSBAQAogCQkJCSAgIHN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvICpvaHJpKQogCiB7Ci0JcmV0dXJuIGFtMzN4eF9wcm1fYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsCi0JCQkJb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQlvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMpOworCXJldHVybiBvbWFwX3BybV9hc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwgMCwKKwkJCQkJIG9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCSBvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMpOwogfQogCiAvKioKQEAgLTMyMDIsMTEgKzMwODMsMTAgQEAKIHN0YXRpYyBpbnQgX2FtMzN4eF9kZWFzc2VydF9oYXJkcmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oLAogCQkJCSAgICAgc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gKm9ocmkpCiB7Ci0JcmV0dXJuIGFtMzN4eF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwKLQkJCQlvaHJpLT5zdF9zaGlmdCwKLQkJCQlvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCW9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2ZmcywKLQkJCQlvaC0+cHJjbS5vbWFwNC5yc3RzdF9vZmZzKTsKKwlyZXR1cm4gb21hcF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwgb2hyaS0+c3Rfc2hpZnQsIDAsCisJCQkJCSAgIG9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCSAgIG9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2ZmcywKKwkJCQkJICAgb2gtPnByY20ub21hcDQucnN0c3Rfb2Zmcyk7CiB9CiAKIC8qKgpAQCAtMzIyNCw5ICszMTA0LDkgQEAKIHN0YXRpYyBpbnQgX2FtMzN4eF9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoc3RydWN0IG9tYXBfaHdtb2QgKm9oLAogCQkJCQlzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyAqb2hyaSkKIHsKLQlyZXR1cm4gYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQob2hyaS0+cnN0X3NoaWZ0LAotCQkJCW9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzKTsKKwlyZXR1cm4gb21hcF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKG9ocmktPnJzdF9zaGlmdCwgMCwKKwkJCQkJICAgICAgb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJICAgICAgb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzKTsKIH0KIAogLyogUHVibGljIGZ1bmN0aW9ucyAqLwpAQCAtNDIzNCwxMiArNDExNCwxMiBAQAogdm9pZCBfX2luaXQgb21hcF9od21vZF9pbml0KHZvaWQpCiB7CiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCXNvY19vcHMud2FpdF90YXJnZXRfcmVhZHkgPSBfb21hcDJ4eHhfd2FpdF90YXJnZXRfcmVhZHk7CisJCXNvY19vcHMud2FpdF90YXJnZXRfcmVhZHkgPSBfb21hcDJ4eHhfM3h4eF93YWl0X3RhcmdldF9yZWFkeTsKIAkJc29jX29wcy5hc3NlcnRfaGFyZHJlc2V0ID0gX29tYXAyX2Fzc2VydF9oYXJkcmVzZXQ7CiAJCXNvY19vcHMuZGVhc3NlcnRfaGFyZHJlc2V0ID0gX29tYXAyX2RlYXNzZXJ0X2hhcmRyZXNldDsKIAkJc29jX29wcy5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgPSBfb21hcDJfaXNfaGFyZHJlc2V0X2Fzc2VydGVkOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJc29jX29wcy53YWl0X3RhcmdldF9yZWFkeSA9IF9vbWFwM3h4eF93YWl0X3RhcmdldF9yZWFkeTsKKwkJc29jX29wcy53YWl0X3RhcmdldF9yZWFkeSA9IF9vbWFwMnh4eF8zeHh4X3dhaXRfdGFyZ2V0X3JlYWR5OwogCQlzb2Nfb3BzLmFzc2VydF9oYXJkcmVzZXQgPSBfb21hcDJfYXNzZXJ0X2hhcmRyZXNldDsKIAkJc29jX29wcy5kZWFzc2VydF9oYXJkcmVzZXQgPSBfb21hcDJfZGVhc3NlcnRfaGFyZHJlc2V0OwogCQlzb2Nfb3BzLmlzX2hhcmRyZXNldF9hc3NlcnRlZCA9IF9vbWFwMl9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQ7CkBAIC00MjU4LDE0ICs0MTM4LDE0IEBACiAJCXNvY19vcHMuZW5hYmxlX21vZHVsZSA9IF9vbWFwNF9lbmFibGVfbW9kdWxlOwogCQlzb2Nfb3BzLmRpc2FibGVfbW9kdWxlID0gX29tYXA0X2Rpc2FibGVfbW9kdWxlOwogCQlzb2Nfb3BzLndhaXRfdGFyZ2V0X3JlYWR5ID0gX29tYXA0X3dhaXRfdGFyZ2V0X3JlYWR5OwotCQlzb2Nfb3BzLmFzc2VydF9oYXJkcmVzZXQgPSBfYW0zM3h4X2Fzc2VydF9oYXJkcmVzZXQ7Ci0JCXNvY19vcHMuZGVhc3NlcnRfaGFyZHJlc2V0ID0gX2FtMzN4eF9kZWFzc2VydF9oYXJkcmVzZXQ7Ci0JCXNvY19vcHMuaXNfaGFyZHJlc2V0X2Fzc2VydGVkID0gX2FtMzN4eF9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQ7CisJCXNvY19vcHMuYXNzZXJ0X2hhcmRyZXNldCA9IF9vbWFwNF9hc3NlcnRfaGFyZHJlc2V0OworCQlzb2Nfb3BzLmRlYXNzZXJ0X2hhcmRyZXNldCA9IF9vbWFwNF9kZWFzc2VydF9oYXJkcmVzZXQ7CisJCXNvY19vcHMuaXNfaGFyZHJlc2V0X2Fzc2VydGVkID0gX29tYXA0X2lzX2hhcmRyZXNldF9hc3NlcnRlZDsKIAkJc29jX29wcy5pbml0X2Nsa2RtID0gX2luaXRfY2xrZG07CiAJfSBlbHNlIGlmIChzb2NfaXNfYW0zM3h4KCkpIHsKLQkJc29jX29wcy5lbmFibGVfbW9kdWxlID0gX2FtMzN4eF9lbmFibGVfbW9kdWxlOwotCQlzb2Nfb3BzLmRpc2FibGVfbW9kdWxlID0gX2FtMzN4eF9kaXNhYmxlX21vZHVsZTsKLQkJc29jX29wcy53YWl0X3RhcmdldF9yZWFkeSA9IF9hbTMzeHhfd2FpdF90YXJnZXRfcmVhZHk7CisJCXNvY19vcHMuZW5hYmxlX21vZHVsZSA9IF9vbWFwNF9lbmFibGVfbW9kdWxlOworCQlzb2Nfb3BzLmRpc2FibGVfbW9kdWxlID0gX29tYXA0X2Rpc2FibGVfbW9kdWxlOworCQlzb2Nfb3BzLndhaXRfdGFyZ2V0X3JlYWR5ID0gX29tYXA0X3dhaXRfdGFyZ2V0X3JlYWR5OwogCQlzb2Nfb3BzLmFzc2VydF9oYXJkcmVzZXQgPSBfYW0zM3h4X2Fzc2VydF9oYXJkcmVzZXQ7CiAJCXNvY19vcHMuZGVhc3NlcnRfaGFyZHJlc2V0ID0gX2FtMzN4eF9kZWFzc2VydF9oYXJkcmVzZXQ7CiAJCXNvY19vcHMuaXNfaGFyZHJlc2V0X2Fzc2VydGVkID0gX2FtMzN4eF9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5oCmluZGV4IDUxMmY4MDkuLjM1Y2E2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5oCkBAIC02MzMsNiArNjMzLDcgQEAKICAqIEBmbGFnczogaHdtb2QgZmxhZ3MgKGRvY3VtZW50ZWQgYmVsb3cpCiAgKiBAX2xvY2s6IHNwaW5sb2NrIHNlcmlhbGl6aW5nIG9wZXJhdGlvbnMgb24gdGhpcyBod21vZAogICogQG5vZGU6IGxpc3Qgbm9kZSBmb3IgaHdtb2QgbGlzdCAoaW50ZXJuYWwgdXNlKQorICogQHBhcmVudF9od21vZDogKHRlbXBvcmFyeSkgYSBwb2ludGVyIHRvIHRoZSBoaWVyYXJjaGljYWwgcGFyZW50IG9mIHRoaXMgaHdtb2QKICAqCiAgKiBAbWFpbl9jbGsgcmVmZXJzIHRvIHRoaXMgbW9kdWxlJ3MgIm1haW4gY2xvY2ssIiB3aGljaCBmb3Igb3VyCiAgKiBwdXJwb3NlcyBpcyBkZWZpbmVkIGFzICJ0aGUgZnVuY3Rpb25hbCBjbG9jayBuZWVkZWQgZm9yIHJlZ2lzdGVyCkBAIC02NDMsNiArNjQ0LDEyIEBACiAgKiB0aGUgb21hcF9od21vZCBjb2RlIGFuZCBzaG91bGQgbm90IGJlIHNldCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgKgogICogQG1hc3RlcnMgYW5kIEBzbGF2ZXMgYXJlIG5vdyBkZXByZWNhdGVkLgorICoKKyAqIEBwYXJlbnRfaHdtb2QgaXMgdGVtcG9yYXJ5OyB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCBmb3IgaXQsIGFzIHRoaXMKKyAqIGluZm9ybWF0aW9uIHNob3VsZCBhbHJlYWR5IGJlIGV4cHJlc3NlZCBpbiB0aGUgT0NQIGludGVyZmFjZQorICogc3RydWN0dXJlcy4gIEBwYXJlbnRfaHdtb2QgaXMgcHJlc2VudCBhcyBhIHdvcmthcm91bmQgdW50aWwgd2UgaW1wcm92ZQorICogaGFuZGxpbmcgZm9yIGh3bW9kcyB3aXRoIG11bHRpcGxlIHBhcmVudHMgKGUuZy4sIE9NQVA0KyBEU1Mgd2l0aAorICogbXVsdGlwbGUgcmVnaXN0ZXIgdGFyZ2V0cyBhY3Jvc3MgZGlmZmVyZW50IGludGVyY29ubmVjdHMpLgogICovCiBzdHJ1Y3Qgb21hcF9od21vZCB7CiAJY29uc3QgY2hhcgkJCSpuYW1lOwpAQCAtNjgwLDYgKzY4Nyw3IEBACiAJdTgJCQkJX2ludF9mbGFnczsKIAl1OAkJCQlfc3RhdGU7CiAJdTgJCQkJX3Bvc3RzZXR1cF9zdGF0ZTsKKwlzdHJ1Y3Qgb21hcF9od21vZAkJKnBhcmVudF9od21vZDsKIH07CiAKIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwX2h3bW9kX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwppbmRleCBjMjU1NWNiLi43OTEyN2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCkBAIC0xNSwxMiArMTUsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy1vbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hc29jLXRpLW1jYnNwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zcGktb21hcDItbWNzcGkuaD4KICNpbmNsdWRlIDxsaW51eC9vbWFwLWRtYS5oPgogI2luY2x1ZGUgPHBsYXQvZG10aW1lci5oPgogCiAjaW5jbHVkZSAib21hcF9od21vZC5oIgotI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgImwzXzJ4eHguaCIKIAogI2luY2x1ZGUgInNvYy5oIgpAQCAtMzcyLDcgKzM3Miw3IEBACiAJeyAucm9sZSA9ICJkYmNrIiwgLmNsayA9ICJtbWNoc2RiMV9mY2siIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKIAkuZmxhZ3MgPSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4XzQzeHhfaXBibG9ja19kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzN4eF80M3h4X2lwYmxvY2tfZGF0YS5jCmluZGV4IGE1NzliODkuLmNhYmM1NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4XzQzeHhfaXBibG9ja19kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzMzeHhfNDN4eF9pcGJsb2NrX2RhdGEuYwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1vbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zcGktb21hcDItbWNzcGkuaD4KICNpbmNsdWRlICJvbWFwX2h3bW9kLmgiCiAjaW5jbHVkZSAiaTJjLmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAid2RfdGltZXIuaCIKICNpbmNsdWRlICJjbTMzeHguaCIKICNpbmNsdWRlICJwcm0zM3h4LmgiCkBAIC04MzYsNyArODM2LDcgQEAKIH07CiAKIC8qIG1tYzAgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgYW0zM3h4X21tYzBfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgYW0zM3h4X21tYzBfZGV2X2F0dHIgPSB7CiAJLmZsYWdzCQk9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAogfTsKIApAQCAtODU0LDcgKzg1NCw3IEBACiB9OwogCiAvKiBtbWMxICovCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIGFtMzN4eF9tbWMxX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIGFtMzN4eF9tbWMxX2Rldl9hdHRyID0gewogCS5mbGFncwkJPSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCwKIH07CiAKQEAgLTg3Miw3ICs4NzIsNyBAQAogfTsKIAogLyogbW1jMiAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBhbTMzeHhfbW1jMl9kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBhbTMzeHhfbW1jMl9kZXZfYXR0ciA9IHsKIAkuZmxhZ3MJCT0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQsCiB9Owogc3RydWN0IG9tYXBfaHdtb2QgYW0zM3h4X21tYzJfaHdtb2QgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzN4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzN4eF9kYXRhLmMKaW5kZXggNmI0MDZjYS4uMGNmN2I1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzMzeHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4X2RhdGEuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgInBybTMzeHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zM3h4LmgiCiAjaW5jbHVkZSAiaTJjLmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAid2RfdGltZXIuaCIKICNpbmNsdWRlICJvbWFwX2h3bW9kXzMzeHhfNDN4eF9jb21tb25fZGF0YS5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKaW5kZXggMmE3OGIwOS4uMTE0NjhlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1vbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXIvc21hcnRyZWZsZXguaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tb21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgogCiAjaW5jbHVkZSA8bGludXgvb21hcC1kbWEuaD4KICNpbmNsdWRlICJsM18zeHh4LmgiCkBAIC0zNyw3ICszOCw2IEBACiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAKICNpbmNsdWRlICJpMmMuaCIKLSNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJ3ZF90aW1lci5oIgogI2luY2x1ZGUgInNlcmlhbC5oIgogCkBAIC0xNzg2LDEyICsxNzg2LDEyIEBACiAJeyAucm9sZSA9ICJkYmNrIiwgLmNsayA9ICJvbWFwXzMya19mY2siLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CiAJLmZsYWdzID0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQsCiB9OwogCiAvKiBTZWUgMzV4eCBlcnJhdGEgMi4xLjEuMTI4IGluIFNQUloyNzhGICovCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIG1tYzFfcHJlX2VzM19kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBtbWMxX3ByZV9lczNfZGV2X2F0dHIgPSB7CiAJLmZsYWdzID0gKE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUIHwKIAkJICBPTUFQX0hTTU1DX0JST0tFTl9NVUxUSUJMT0NLX1JFQUQpLAogfTsKQEAgLTE4NTQsNyArMTg1NCw3IEBACiB9OwogCiAvKiBTZWUgMzV4eCBlcnJhdGEgMi4xLjEuMTI4IGluIFNQUloyNzhGICovCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIG1tYzJfcHJlX2VzM19kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBtbWMyX3ByZV9lczNfZGV2X2F0dHIgPSB7CiAJLmZsYWdzID0gT01BUF9IU01NQ19CUk9LRU5fTVVMVElCTE9DS19SRUFELAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQzeHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQzeHhfZGF0YS5jCmluZGV4IGZlYTAxYWEuLjVjNmM4NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80M3h4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDN4eF9kYXRhLmMKQEAgLTQxNyw2ICs0MTcsMzcgQEAKIAl9LAogfTsKIAorLyoKKyAqICdhZGMvdHNjJyBjbGFzcworICogVG91Y2hTY3JlZW4gQ29udHJvbGxlciAoQW5hbG9nLVRvLURpZ2l0YWwgQ29udmVydGVyKQorICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIGFtNDN4eF9hZGNfdHNjX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMCwKKwkuc3lzY19vZmZzCT0gMHgxMCwKKwkuc3lzY19mbGFncwk9IFNZU0NfSEFTX1NJRExFTU9ERSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCB8CisJCQkgIFNJRExFX1NNQVJUX1dLVVApLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3MgYW00M3h4X2FkY190c2NfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJCT0gImFkY190c2MiLAorCS5zeXNjCQk9ICZhbTQzeHhfYWRjX3RzY19zeXNjLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIGFtNDN4eF9hZGNfdHNjX2h3bW9kID0geworCS5uYW1lCQk9ICJhZGNfdHNjIiwKKwkuY2xhc3MJCT0gJmFtNDN4eF9hZGNfdHNjX2h3bW9kX2NsYXNzLAorCS5jbGtkbV9uYW1lCT0gImwzc190c2NfY2xrZG0iLAorCS5tYWluX2Nsawk9ICJhZGNfdHNjX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDQgID0geworCQkJLmNsa2N0cmxfb2ZmcyAgID0gQU00M1hYX0NNX1dLVVBfQURDX1RTQ19DTEtDVFJMX09GRlNFVCwKKwkJCS5tb2R1bGVtb2RlICAgICA9IE1PRFVMRU1PREVfU1dDVFJMLAorCQl9LAorCX0sCit9OworCiAvKiBkc3MgKi8KIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIGFtNDN4eF9kc3NfY29yZV9od21vZCA9IHsKQEAgLTU0Nyw2ICs1NzgsMTMgQEAKIAkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBhbTQzeHhfbDRfd2t1cF9fYWRjX3RzYyA9IHsKKwkubWFzdGVyICAgICAgICAgPSAmYW0zM3h4X2w0X3drdXBfaHdtb2QsCisJLnNsYXZlICAgICAgICAgID0gJmFtNDN4eF9hZGNfdHNjX2h3bW9kLAorCS5jbGsgICAgICAgICAgICA9ICJkcGxsX2NvcmVfbTRfZGl2Ml9jayIsCisJLnVzZXIgICAgICAgICAgID0gT0NQX1VTRVJfTVBVLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBhbTQzeHhfbDRfaHNfX2NwZ21hYzAgPSB7CiAJLm1hc3RlcgkJPSAmYW00M3h4X2w0X2hzX2h3bW9kLAogCS5zbGF2ZQkJPSAmYW0zM3h4X2NwZ21hYzBfaHdtb2QsCkBAIC03ODksNiArODI3LDcgQEAKIAkmYW00M3h4X2w0X3drdXBfX2kyYzEsCiAJJmFtNDN4eF9sNF93a3VwX19ncGlvMCwKIAkmYW00M3h4X2w0X3drdXBfX3dkX3RpbWVyMSwKKwkmYW00M3h4X2w0X3drdXBfX2FkY190c2MsCiAJJmFtNDN4eF9sM19zX19xc3BpLAogCSZhbTMzeHhfbDRfcGVyX19kY2FuMCwKIAkmYW0zM3h4X2w0X3Blcl9fZGNhbjEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKaW5kZXggNDRlNTYzNC4uYzMxNGIzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tb21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyL3NtYXJ0cmVmbGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLW9tYXAuaD4KIApAQCAtMzksNyArNDAsNiBAQAogI2luY2x1ZGUgInBybTQ0eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCiAjaW5jbHVkZSAiaTJjLmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAid2RfdGltZXIuaCIKIAogLyogQmFzZSBvZmZzZXQgZm9yIGFsbCBPTUFQNCBpbnRlcnJ1cHRzIGV4dGVybmFsIHRvIE1QVVNTICovCkBAIC01ODksNiArNTg5LDcgQEAKIAkJLm9tYXA0ID0gewogCQkJLmNsa2N0cmxfb2ZmcyA9IE9NQVA0X0NNX0RTU19EU1NfQ0xLQ1RSTF9PRkZTRVQsCiAJCQkuY29udGV4dF9vZmZzID0gT01BUDRfUk1fRFNTX0RTU19DT05URVhUX09GRlNFVCwKKwkJCS5tb2R1bGVtb2RlICAgPSBNT0RVTEVNT0RFX1NXQ1RSTCwKIAkJfSwKIAl9LAogCS5vcHRfY2xrcwk9IGRzc19vcHRfY2xrcywKQEAgLTY0Nyw3ICs2NDgsOCBAQAogCQkJLmNvbnRleHRfb2ZmcyA9IE9NQVA0X1JNX0RTU19EU1NfQ09OVEVYVF9PRkZTRVQsCiAJCX0sCiAJfSwKLQkuZGV2X2F0dHIJPSAmb21hcDQ0eHhfZHNzX2Rpc3BjX2Rldl9hdHRyCisJLmRldl9hdHRyCT0gJm9tYXA0NHh4X2Rzc19kaXNwY19kZXZfYXR0ciwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA0NHh4X2Rzc19od21vZCwKIH07CiAKIC8qCkBAIC03MDEsNiArNzAzLDcgQEAKIAl9LAogCS5vcHRfY2xrcwk9IGRzc19kc2kxX29wdF9jbGtzLAogCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19kc2kxX29wdF9jbGtzKSwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA0NHh4X2Rzc19od21vZCwKIH07CiAKIC8qIGRzc19kc2kyICovCkBAIC03MzMsNiArNzM2LDcgQEAKIAl9LAogCS5vcHRfY2xrcwk9IGRzc19kc2kyX29wdF9jbGtzLAogCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19kc2kyX29wdF9jbGtzKSwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA0NHh4X2Rzc19od21vZCwKIH07CiAKIC8qCkBAIC03OTAsNiArNzk0LDcgQEAKIAl9LAogCS5vcHRfY2xrcwk9IGRzc19oZG1pX29wdF9jbGtzLAogCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19oZG1pX29wdF9jbGtzKSwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA0NHh4X2Rzc19od21vZCwKIH07CiAKIC8qCkBAIC04MTksNyArODI0LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIGRzc19yZmJpX29wdF9jbGtzW10gPSB7Ci0JeyAucm9sZSA9ICJpY2siLCAuY2xrID0gImRzc19mY2siIH0sCisJeyAucm9sZSA9ICJpY2siLCAuY2xrID0gImwzX2Rpdl9jayIgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9kc3NfcmZiaV9od21vZCA9IHsKQEAgLTgzNiw2ICs4NDEsNyBAQAogCX0sCiAJLm9wdF9jbGtzCT0gZHNzX3JmYmlfb3B0X2Nsa3MsCiAJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX3JmYmlfb3B0X2Nsa3MpLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDQ0eHhfZHNzX2h3bW9kLAogfTsKIAogLyoKQEAgLTg1OSw2ICs4NjUsNyBAQAogCQkJLmNvbnRleHRfb2ZmcyA9IE9NQVA0X1JNX0RTU19EU1NfQ09OVEVYVF9PRkZTRVQsCiAJCX0sCiAJfSwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA0NHh4X2Rzc19od21vZCwKIH07CiAKIC8qCkBAIC0xOTUyLDcgKzE5NTksNyBAQAogfTsKIAogLyogbW1jMSBkZXZfYXR0ciAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CiAJLmZsYWdzCT0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQsCiB9OwogCkBAIC0zNjcxLDcgKzM2NzgsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2RzcyA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfaHdtb2QsCi0JLmNsawkJPSAiZHNzX2ZjayIsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKIAkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfZG1hX2FkZHJzLAogCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCiB9OwpAQCAtMzcwNyw3ICszNzE0LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19kc3NfZGlzcGMgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX2Rpc3BjX2h3bW9kLAotCS5jbGsJCT0gImRzc19mY2siLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCiAJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX2Rpc3BjX2RtYV9hZGRycywKIAkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAogfTsKQEAgLTM3NDMsNyArMzc1MCw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzX2RzaTEgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX2RzaTFfaHdtb2QsCi0JLmNsawkJPSAiZHNzX2ZjayIsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKIAkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfZHNpMV9kbWFfYWRkcnMsCiAJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKIH07CkBAIC0zNzc5LDcgKzM3ODYsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2Rzc19kc2kyID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKIAkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc19kc2kyX2h3bW9kLAotCS5jbGsJCT0gImRzc19mY2siLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCiAJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX2RzaTJfZG1hX2FkZHJzLAogCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCiB9OwpAQCAtMzgxNSw3ICszODIyLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19kc3NfaGRtaSA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfaGRtaV9od21vZCwKLQkuY2xrCQk9ICJkc3NfZmNrIiwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAogCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19oZG1pX2RtYV9hZGRycywKIAkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAogfTsKQEAgLTM4NTEsNyArMzg1OCw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzX3JmYmkgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX3JmYmlfaHdtb2QsCi0JLmNsawkJPSAiZHNzX2ZjayIsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKIAkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfcmZiaV9kbWFfYWRkcnMsCiAJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKIH07CkBAIC0zODg3LDcgKzM4OTQsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2Rzc192ZW5jID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKIAkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc192ZW5jX2h3bW9kLAotCS5jbGsJCT0gImRzc19mY2siLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCiAJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX3ZlbmNfZG1hX2FkZHJzLAogCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzU0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzU0eHhfZGF0YS5jCmluZGV4IDExMDNhYTAuLjNlOTUyMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNTR4eF9kYXRhLmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9ncGlvLW9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2hzbW1jLW9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlci9zbWFydHJlZmxleC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1vbWFwLmg+CiAKQEAgLTMzLDcgKzM0LDYgQEAKICNpbmNsdWRlICJjbTJfNTR4eC5oIgogI2luY2x1ZGUgInBybTU0eHguaCIKICNpbmNsdWRlICJpMmMuaCIKLSNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJ3ZF90aW1lci5oIgogCiAvKiBCYXNlIG9mZnNldCBmb3IgYWxsIE9NQVA1IGludGVycnVwdHMgZXh0ZXJuYWwgdG8gTVBVU1MgKi8KQEAgLTQyMSw2ICs0MjEsNyBAQAogCS5vcHRfY2xrcwk9IGRzc19kaXNwY19vcHRfY2xrcywKIAkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfZGlzcGNfb3B0X2Nsa3MpLAogCS5kZXZfYXR0cgk9ICZkc3NfZGlzcGNfZGV2X2F0dHIsCisJLnBhcmVudF9od21vZAk9ICZvbWFwNTR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKgpAQCAtNDYyLDYgKzQ2Myw3IEBACiAJfSwKIAkub3B0X2Nsa3MJPSBkc3NfZHNpMV9hX29wdF9jbGtzLAogCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19kc2kxX2Ffb3B0X2Nsa3MpLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDU0eHhfZHNzX2h3bW9kLAogfTsKIAogLyogZHNzX2RzaTFfYyAqLwpAQCAtNDgyLDYgKzQ4NCw3IEBACiAJfSwKIAkub3B0X2Nsa3MJPSBkc3NfZHNpMV9jX29wdF9jbGtzLAogCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19kc2kxX2Nfb3B0X2Nsa3MpLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDU0eHhfZHNzX2h3bW9kLAogfTsKIAogLyoKQEAgLTUyMSw2ICs1MjQsNyBAQAogCX0sCiAJLm9wdF9jbGtzCT0gZHNzX2hkbWlfb3B0X2Nsa3MsCiAJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX2hkbWlfb3B0X2Nsa3MpLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDU0eHhfZHNzX2h3bW9kLAogfTsKIAogLyoKQEAgLTU2MCw2ICs1NjQsNyBAQAogCX0sCiAJLm9wdF9jbGtzCT0gZHNzX3JmYmlfb3B0X2Nsa3MsCiAJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX3JmYmlfb3B0X2Nsa3MpLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDU0eHhfZHNzX2h3bW9kLAogfTsKIAogLyoKQEAgLTEyNjksNyArMTI3NCw3IEBACiB9OwogCiAvKiBtbWMxIGRldl9hdHRyICovCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKIAkuZmxhZ3MJPSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF83eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzd4eF9kYXRhLmMKaW5kZXggNTY4NGYxMS4uZmZkNjYwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzd4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzd4eF9kYXRhLmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9ncGlvLW9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2hzbW1jLW9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlci9zbWFydHJlZmxleC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1vbWFwLmg+CiAKQEAgLTMzLDcgKzM0LDYgQEAKICNpbmNsdWRlICJjbTJfN3h4LmgiCiAjaW5jbHVkZSAicHJtN3h4LmgiCiAjaW5jbHVkZSAiaTJjLmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAid2RfdGltZXIuaCIKICNpbmNsdWRlICJzb2MuaCIKIApAQCAtMTMwMSw3ICsxMzAxLDcgQEAKIH07CiAKIC8qIG1tYzEgZGV2X2F0dHIgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0gewogCS5mbGFncwk9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAogfTsKIApAQCAtMjA3NSw2ICsyMDc1LDcwIEBACiAJfSwKIH07CiAKKy8qIHVhcnQ3ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2QgZHJhN3h4X3VhcnQ3X2h3bW9kID0geworCS5uYW1lCQk9ICJ1YXJ0NyIsCisJLmNsYXNzCQk9ICZkcmE3eHhfdWFydF9od21vZF9jbGFzcywKKwkuY2xrZG1fbmFtZQk9ICJsNHBlcjJfY2xrZG0iLAorCS5tYWluX2Nsawk9ICJ1YXJ0N19nZmNsa19tdXgiLAorCS5mbGFncwkJPSBIV01PRF9TV1NVUF9TSURMRV9BQ1QsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX29mZnMgPSBEUkE3WFhfQ01fTDRQRVIyX1VBUlQ3X0NMS0NUUkxfT0ZGU0VULAorCQkJLmNvbnRleHRfb2ZmcyA9IERSQTdYWF9STV9MNFBFUjJfVUFSVDdfQ09OVEVYVF9PRkZTRVQsCisJCQkubW9kdWxlbW9kZSAgID0gTU9EVUxFTU9ERV9TV0NUUkwsCisJCX0sCisJfSwKK307CisKKy8qIHVhcnQ4ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2QgZHJhN3h4X3VhcnQ4X2h3bW9kID0geworCS5uYW1lCQk9ICJ1YXJ0OCIsCisJLmNsYXNzCQk9ICZkcmE3eHhfdWFydF9od21vZF9jbGFzcywKKwkuY2xrZG1fbmFtZQk9ICJsNHBlcjJfY2xrZG0iLAorCS5tYWluX2Nsawk9ICJ1YXJ0OF9nZmNsa19tdXgiLAorCS5mbGFncwkJPSBIV01PRF9TV1NVUF9TSURMRV9BQ1QsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX29mZnMgPSBEUkE3WFhfQ01fTDRQRVIyX1VBUlQ4X0NMS0NUUkxfT0ZGU0VULAorCQkJLmNvbnRleHRfb2ZmcyA9IERSQTdYWF9STV9MNFBFUjJfVUFSVDhfQ09OVEVYVF9PRkZTRVQsCisJCQkubW9kdWxlbW9kZSAgID0gTU9EVUxFTU9ERV9TV0NUUkwsCisJCX0sCisJfSwKK307CisKKy8qIHVhcnQ5ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2QgZHJhN3h4X3VhcnQ5X2h3bW9kID0geworCS5uYW1lCQk9ICJ1YXJ0OSIsCisJLmNsYXNzCQk9ICZkcmE3eHhfdWFydF9od21vZF9jbGFzcywKKwkuY2xrZG1fbmFtZQk9ICJsNHBlcjJfY2xrZG0iLAorCS5tYWluX2Nsawk9ICJ1YXJ0OV9nZmNsa19tdXgiLAorCS5mbGFncwkJPSBIV01PRF9TV1NVUF9TSURMRV9BQ1QsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX29mZnMgPSBEUkE3WFhfQ01fTDRQRVIyX1VBUlQ5X0NMS0NUUkxfT0ZGU0VULAorCQkJLmNvbnRleHRfb2ZmcyA9IERSQTdYWF9STV9MNFBFUjJfVUFSVDlfQ09OVEVYVF9PRkZTRVQsCisJCQkubW9kdWxlbW9kZSAgID0gTU9EVUxFTU9ERV9TV0NUUkwsCisJCX0sCisJfSwKK307CisKKy8qIHVhcnQxMCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIGRyYTd4eF91YXJ0MTBfaHdtb2QgPSB7CisJLm5hbWUJCT0gInVhcnQxMCIsCisJLmNsYXNzCQk9ICZkcmE3eHhfdWFydF9od21vZF9jbGFzcywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwYW9uX2Nsa2RtIiwKKwkubWFpbl9jbGsJPSAidWFydDEwX2dmY2xrX211eCIsCisJLmZsYWdzCQk9IEhXTU9EX1NXU1VQX1NJRExFX0FDVCwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfb2ZmcyA9IERSQTdYWF9DTV9XS1VQQU9OX1VBUlQxMF9DTEtDVFJMX09GRlNFVCwKKwkJCS5jb250ZXh0X29mZnMgPSBEUkE3WFhfUk1fV0tVUEFPTl9VQVJUMTBfQ09OVEVYVF9PRkZTRVQsCisJCQkubW9kdWxlbW9kZSAgID0gTU9EVUxFTU9ERV9TV0NUUkwsCisJCX0sCisJfSwKK307CisKIC8qCiAgKiAndXNiX290Z19zcycgY2xhc3MKICAqCkBAIC0zMDk1LDYgKzMxNTksMzggQEAKIAkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIAorLyogbDRfcGVyMiAtPiB1YXJ0NyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBkcmE3eHhfbDRfcGVyMl9fdWFydDcgPSB7CisJLm1hc3RlcgkJPSAmZHJhN3h4X2w0X3BlcjJfaHdtb2QsCisJLnNsYXZlCQk9ICZkcmE3eHhfdWFydDdfaHdtb2QsCisJLmNsawkJPSAibDNfaWNsa19kaXYiLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBsNF9wZXIyIC0+IHVhcnQ4ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIGRyYTd4eF9sNF9wZXIyX191YXJ0OCA9IHsKKwkubWFzdGVyCQk9ICZkcmE3eHhfbDRfcGVyMl9od21vZCwKKwkuc2xhdmUJCT0gJmRyYTd4eF91YXJ0OF9od21vZCwKKwkuY2xrCQk9ICJsM19pY2xrX2RpdiIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3BlcjIgLT4gdWFydDkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgZHJhN3h4X2w0X3BlcjJfX3VhcnQ5ID0geworCS5tYXN0ZXIJCT0gJmRyYTd4eF9sNF9wZXIyX2h3bW9kLAorCS5zbGF2ZQkJPSAmZHJhN3h4X3VhcnQ5X2h3bW9kLAorCS5jbGsJCT0gImwzX2ljbGtfZGl2IiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbDRfd2t1cCAtPiB1YXJ0MTAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgZHJhN3h4X2w0X3drdXBfX3VhcnQxMCA9IHsKKwkubWFzdGVyCQk9ICZkcmE3eHhfbDRfd2t1cF9od21vZCwKKwkuc2xhdmUJCT0gJmRyYTd4eF91YXJ0MTBfaHdtb2QsCisJLmNsawkJPSAid2t1cGFvbl9pY2xrX211eCIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKIC8qIGw0X3BlcjMgLT4gdXNiX290Z19zczEgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgZHJhN3h4X2w0X3BlcjNfX3VzYl9vdGdfc3MxID0gewogCS5tYXN0ZXIJCT0gJmRyYTd4eF9sNF9wZXIzX2h3bW9kLApAQCAtMzI1OSw2ICszMzU1LDEwIEBACiAJJmRyYTd4eF9sNF9wZXIxX191YXJ0NCwKIAkmZHJhN3h4X2w0X3BlcjFfX3VhcnQ1LAogCSZkcmE3eHhfbDRfcGVyMV9fdWFydDYsCisJJmRyYTd4eF9sNF9wZXIyX191YXJ0NywKKwkmZHJhN3h4X2w0X3BlcjJfX3VhcnQ4LAorCSZkcmE3eHhfbDRfcGVyMl9fdWFydDksCisJJmRyYTd4eF9sNF93a3VwX191YXJ0MTAsCiAJJmRyYTd4eF9sNF9wZXIzX191c2Jfb3RnX3NzMSwKIAkmZHJhN3h4X2w0X3BlcjNfX3VzYl9vdGdfc3MyLAogCSZkcmE3eHhfbDRfcGVyM19fdXNiX290Z19zczMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKaW5kZXggNTA2NDBiMy4uMWExOWZhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwpAQCAtMjEsNiArMjEsOCBAQAogICAqCiAgICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTk3LDEzICs5OSwxMyBAQAogCiAJCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKIAotCQlwcl9pbmZvKEtFUk5fSU5GTyAiV2FpdGluZyBmb3IgUEhZIGNsb2NrIGdvb2QuLi5cbiIpOworCQlwcl9pbmZvKCJXYWl0aW5nIGZvciBQSFkgY2xvY2sgZ29vZC4uLlxuIik7CiAJCXdoaWxlICghKG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9ERVZDT05GMikKIAkJCQkmIENPTkYyX1BIWUNMS0dEKSkgewogCQkJY3B1X3JlbGF4KCk7CiAKIAkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQkJcHJfZXJyKEtFUk5fRVJSICJtdXNiIFBIWSBjbG9jayBnb29kIHRpbWVkIG91dFxuIik7CisJCQkJcHJfZXJyKCJtdXNiIFBIWSBjbG9jayBnb29kIHRpbWVkIG91dFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTE0NSw3ICsxNDcsNyBAQAogCQlkZXZjb25mMiB8PSBDT05GMl9OT19PVkVSUklERTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJfaW5mbyhLRVJOX0lORk8gIlVuc3VwcG9ydGVkIG1vZGUgJXVcbiIsIG11c2JfbW9kZSk7CisJCXByX2luZm8oIlVuc3VwcG9ydGVkIG1vZGUgJXVcbiIsIG11c2JfbW9kZSk7CiAJfQogCiAJb21hcF9jdHJsX3dyaXRlbChkZXZjb25mMiwgQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3MuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcGRhdGEtcXVpcmtzLmMKaW5kZXggY2VjOWQ2Yy4uM2Q3ZWVlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3MuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvdGlfd2lsaW5rX3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2wxMnh4Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3BpbmN0cmwtc2luZ2xlLmg+CkBAIC0xMzAsMTcgKzEzMSw0NSBAQAogewogCW9tYXAzX3NiY190M3hfdXNiX2h1Yl9pbml0KDE2NywgInNiLXQzNSB1c2IgaHViIik7CiAJbGVnYWN5X2luaXRfd2wxMnh4KFdMMTJYWF9SRUZDTE9DS18zOCwgMCwgMTM2KTsKLQlvbWFwX2Fkczc4NDZfaW5pdCgxLCA1NywgMCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19zYmNfdDM1MzBfbGVnYWN5X2luaXQodm9pZCkKIHsKIAlvbWFwM19zYmNfdDN4X3VzYl9odWJfaW5pdCgxNjcsICJzYi10MzUgdXNiIGh1YiIpOwotCW9tYXBfYWRzNzg0Nl9pbml0KDEsIDU3LCAwLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2lnZXAwMDIwX2xlZ2FjeV9pbml0KHZvaWQpCitzdHJ1Y3QgdGlfc3RfcGxhdF9kYXRhIHdpbGlua19wZGF0YSA9IHsKKwkubnNodXRkb3duX2dwaW8gPSAxMzcsCisJLmRldl9uYW1lID0gIi9kZXYvdHR5TzEiLAorCS5mbG93X2NudHJsID0gMSwKKwkuYmF1ZF9yYXRlID0gMzAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2wxOHh4X2RldmljZSA9IHsKKwkubmFtZQk9ICJraW0iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJndpbGlua19wZGF0YSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBidHdpbGlua19kZXZpY2UgPSB7CisJLm5hbWUJPSAiYnR3aWxpbmsiLAorCS5pZAk9IC0xLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2lnZXAwMDIwX3Jldl9mX2xlZ2FjeV9pbml0KHZvaWQpCiB7CisJbGVnYWN5X2luaXRfd2wxMnh4KDAsIDAsIDE3Nyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bDE4eHhfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJ0d2lsaW5rX2RldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19pZ2VwMDAzMF9yZXZfZ19sZWdhY3lfaW5pdCh2b2lkKQoreworCWxlZ2FjeV9pbml0X3dsMTJ4eCgwLCAwLCAxMzYpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmd2wxOHh4X2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZidHdpbGlua19kZXZpY2UpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfZXZtX2xlZ2FjeV9pbml0KHZvaWQpCkBAIC0yMTgsNyArMjQ3LDYgQEAKIAloc21tYzJfaW50ZXJuYWxfaW5wdXRfY2xrKCk7CiAJb21hcDNfc2JjX3QzNTE3X3dpZmlfaW5pdCgpOwogCWxlZ2FjeV9pbml0X3dsMTJ4eChXTDEyWFhfUkVGQ0xPQ0tfMzgsIDAsIDE0NSk7Ci0Jb21hcF9hZHM3ODQ2X2luaXQoMSwgNTcsIDAsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgYW0zNTE3X2V2bV9sZWdhY3lfaW5pdCh2b2lkKQpAQCAtMzkwLDcgKzQxOCw4IEBACiAJeyAibm9raWEsb21hcDMtbjkwMCIsIG5va2lhX245MDBfbGVnYWN5X2luaXQsIH0sCiAJeyAibm9raWEsb21hcDMtbjkiLCBoc21tYzJfaW50ZXJuYWxfaW5wdXRfY2xrLCB9LAogCXsgIm5va2lhLG9tYXAzLW45NTAiLCBoc21tYzJfaW50ZXJuYWxfaW5wdXRfY2xrLCB9LAotCXsgImlzZWUsb21hcDMtaWdlcDAwMjAiLCBvbWFwM19pZ2VwMDAyMF9sZWdhY3lfaW5pdCwgfSwKKwl7ICJpc2VlLG9tYXAzLWlnZXAwMDIwLXJldi1mIiwgb21hcDNfaWdlcDAwMjBfcmV2X2ZfbGVnYWN5X2luaXQsIH0sCisJeyAiaXNlZSxvbWFwMy1pZ2VwMDAzMC1yZXYtZyIsIG9tYXAzX2lnZXAwMDMwX3Jldl9nX2xlZ2FjeV9pbml0LCB9LAogCXsgInRpLG9tYXAzLWV2bS0zN3h4Iiwgb21hcDNfZXZtX2xlZ2FjeV9pbml0LCB9LAogCXsgInRpLG9tYXAzLXpvb20zIiwgb21hcDNfem9vbV9sZWdhY3lfaW5pdCwgfSwKIAl7ICJ0aSxhbTM1MTctZXZtIiwgYW0zNTE3X2V2bV9sZWdhY3lfaW5pdCwgfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDE3NTU2NGMuLjg4NzIxZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L29tYXAtZG1hLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9ncGlvLW9tYXAuaD4KIAogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgpAQCAtNDMsNyArNDQsNiBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImNtM3h4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgotI2luY2x1ZGUgImdwbWMuaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAicHJtM3h4eC5oIgogI2luY2x1ZGUgInBtLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYwppbmRleCA1MDMwOTdjLi5kNjk3Y2VjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMKQEAgLTM3LDYgKzM3LDE2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogfTsKIAorLyoqCisgKiBzdHJ1Y3Qgc3RhdGljX2RlcF9tYXAgLSBTdGF0aWMgZGVwZW5kZW5jeSBtYXAKKyAqIEBmcm9tOglmcm9tIGNsb2NrZG9tYWluCisgKiBAdG86CQl0byBjbG9ja2RvbWFpbgorICAqLworc3RydWN0IHN0YXRpY19kZXBfbWFwIHsKKwljb25zdCBjaGFyICpmcm9tOworCWNvbnN0IGNoYXIgKnRvOworfTsKKwogc3RhdGljIHUzMiBjcHVfc3VzcGVuZF9zdGF0ZSA9IFBXUkRNX1BPV0VSX09GRjsKIAogc3RhdGljIExJU1RfSEVBRChwd3JzdF9saXN0KTsKQEAgLTE0OCw5NCArMTU4LDYxIEBACiAJb21hcF9kb193ZmkoKTsKIH0KIAotLyoqCi0gKiBvbWFwNF9pbml0X3N0YXRpY19kZXBzIC0gQWRkIE9NQVA0IHN0YXRpYyBkZXBlbmRlbmNpZXMKLSAqCi0gKiBBZGQgbmVlZGVkIHN0YXRpYyBjbG9ja2RvbWFpbiBkZXBlbmRlbmNpZXMgb24gT01BUDQgZGV2aWNlcy4KLSAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yICdlcnInIG9uIGZhaWx1cmVzCisvKgorICogVGhlIGR5bmFtaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIE1QVVNTIC0+IE1FTUlGIGFuZAorICogTVBVU1MgLT4gTDRfUEVSL0wzXyogYW5kIERVQ0FUSSAtPiBMM18qIGRvZXNuJ3Qgd29yayBhcworICogZXhwZWN0ZWQuIFRoZSBoYXJkd2FyZSByZWNvbW1lbmRhdGlvbiBpcyB0byBlbmFibGUgc3RhdGljCisgKiBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIHRvIGF2b2lkIHN5c3RlbSBsb2NrIHVwcyBvciByYW5kb20gY3Jhc2hlcy4KKyAqIFRoZSBMNCB3YWtldXAgZGVwZWRlbmN5IGlzIGFkZGVkIHRvIHdvcmthcm91bmQgdGhlIE9DUCBzeW5jIGhhcmR3YXJlCisgKiBCVUcgd2l0aCAzMksgc3luY3RpbWVyIHdoaWNoIGxlYWQgdG8gaW5jb3JyZWN0IHRpbWVyIHZhbHVlIHJlYWQKKyAqIGZyb20gdGhlIDMySyBjb3VudGVyLiBUaGUgQlVHIGFwcGxpZXMgZm9yIEdQVElNRVIxIGFuZCBXRFQyIHdoaWNoCisgKiBhcmUgcGFydCBvZiBMNCB3YWtldXAgY2xvY2tkb21haW4uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG9tYXA0X2luaXRfc3RhdGljX2RlcHModm9pZCkKLXsKLQlzdHJ1Y3QgY2xvY2tkb21haW4gKmVtaWZfY2xrZG0sICptcHVzc19jbGtkbSwgKmwzXzFfY2xrZG07Ci0Jc3RydWN0IGNsb2NrZG9tYWluICpkdWNhdGlfY2xrZG0sICpsM18yX2Nsa2RtOwotCWludCByZXQgPSAwOworc3RhdGljIGNvbnN0IHN0cnVjdCBzdGF0aWNfZGVwX21hcCBvbWFwNF9zdGF0aWNfZGVwX21hcFtdID0geworCXsuZnJvbSA9ICJtcHVzc19jbGtkbSIsIC50byA9ICJsM19lbWlmX2Nsa2RtIn0sCisJey5mcm9tID0gIm1wdXNzX2Nsa2RtIiwgLnRvID0gImwzXzFfY2xrZG0ifSwKKwl7LmZyb20gPSAibXB1c3NfY2xrZG0iLCAudG8gPSAibDNfMl9jbGtkbSJ9LAorCXsuZnJvbSA9ICJkdWNhdGlfY2xrZG0iLCAudG8gPSAibDNfMV9jbGtkbSJ9LAorCXsuZnJvbSA9ICJkdWNhdGlfY2xrZG0iLCAudG8gPSAibDNfMl9jbGtkbSJ9LAorCXsuZnJvbSAgPSBOVUxMfSAvKiBURVJNSU5BVElPTiAqLworfTsKIAotCWlmIChvbWFwX3JldigpID09IE9NQVA0NDMwX1JFVl9FUzFfMCkgewotCQlXQVJOKDEsICJQb3dlciBNYW5hZ2VtZW50IG5vdCBzdXBwb3J0ZWQgb24gT01BUDQ0MzAgRVMxLjBcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlwcl9lcnIoIlBvd2VyIE1hbmFnZW1lbnQgZm9yIFRJIE9NQVA0LlxuIik7Ci0JLyoKLQkgKiBPTUFQNCBjaGlwIFBNIGN1cnJlbnRseSB3b3JrcyBvbmx5IHdpdGggY2VydGFpbiAobmV3ZXIpCi0JICogdmVyc2lvbnMgb2YgYm9vdGxvYWRlcnMuIFRoaXMgaXMgZHVlIHRvIG1pc3NpbmcgY29kZSBpbiB0aGUKLQkgKiBrZXJuZWwgdG8gcHJvcGVybHkgcmVzZXQgYW5kIGluaXRpYWxpemUgc29tZSBkZXZpY2VzLgotCSAqIGh0dHA6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvYXJtLWtlcm5lbC9tc2cyMTg2NDEuaHRtbAotCSAqLwotCXByX3dhcm4oIk9NQVA0IFBNOiB1LWJvb3QgPj0gdjIwMTIuMDcgaXMgcmVxdWlyZWQgZm9yIGZ1bGwgUE0gc3VwcG9ydFxuIik7Ci0KLQlyZXQgPSBwd3JkbV9mb3JfZWFjaChwd3JkbXNfc2V0dXAsIE5VTEwpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0dXAgcG93ZXJkb21haW5zXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKgotCSAqIFRoZSBkeW5hbWljIGRlcGVuZGVuY3kgYmV0d2VlbiBNUFVTUyAtPiBNRU1JRiBhbmQKLQkgKiBNUFVTUyAtPiBMNF9QRVIvTDNfKiBhbmQgRFVDQVRJIC0+IEwzXyogZG9lc24ndCB3b3JrIGFzCi0JICogZXhwZWN0ZWQuIFRoZSBoYXJkd2FyZSByZWNvbW1lbmRhdGlvbiBpcyB0byBlbmFibGUgc3RhdGljCi0JICogZGVwZW5kZW5jaWVzIGZvciB0aGVzZSB0byBhdm9pZCBzeXN0ZW0gbG9jayB1cHMgb3IgcmFuZG9tIGNyYXNoZXMuCi0JICogVGhlIEw0IHdha2V1cCBkZXBlZGVuY3kgaXMgYWRkZWQgdG8gd29ya2Fyb3VuZCB0aGUgT0NQIHN5bmMgaGFyZHdhcmUKLQkgKiBCVUcgd2l0aCAzMksgc3luY3RpbWVyIHdoaWNoIGxlYWQgdG8gaW5jb3JyZWN0IHRpbWVyIHZhbHVlIHJlYWQKLQkgKiBmcm9tIHRoZSAzMksgY291bnRlci4gVGhlIEJVRyBhcHBsaWVzIGZvciBHUFRJTUVSMSBhbmQgV0RUMiB3aGljaAotCSAqIGFyZSBwYXJ0IG9mIEw0IHdha2V1cCBjbG9ja2RvbWFpbi4KLQkgKi8KLQltcHVzc19jbGtkbSA9IGNsa2RtX2xvb2t1cCgibXB1c3NfY2xrZG0iKTsKLQllbWlmX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJsM19lbWlmX2Nsa2RtIik7Ci0JbDNfMV9jbGtkbSA9IGNsa2RtX2xvb2t1cCgibDNfMV9jbGtkbSIpOwotCWwzXzJfY2xrZG0gPSBjbGtkbV9sb29rdXAoImwzXzJfY2xrZG0iKTsKLQlkdWNhdGlfY2xrZG0gPSBjbGtkbV9sb29rdXAoImR1Y2F0aV9jbGtkbSIpOwotCWlmICgoIW1wdXNzX2Nsa2RtKSB8fCAoIWVtaWZfY2xrZG0pIHx8ICghbDNfMV9jbGtkbSkgfHwKLQkJKCFsM18yX2Nsa2RtKSB8fCAoIWR1Y2F0aV9jbGtkbSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gY2xrZG1fYWRkX3drZGVwKG1wdXNzX2Nsa2RtLCBlbWlmX2Nsa2RtKTsKLQlyZXQgfD0gY2xrZG1fYWRkX3drZGVwKG1wdXNzX2Nsa2RtLCBsM18xX2Nsa2RtKTsKLQlyZXQgfD0gY2xrZG1fYWRkX3drZGVwKG1wdXNzX2Nsa2RtLCBsM18yX2Nsa2RtKTsKLQlyZXQgfD0gY2xrZG1fYWRkX3drZGVwKGR1Y2F0aV9jbGtkbSwgbDNfMV9jbGtkbSk7Ci0JcmV0IHw9IGNsa2RtX2FkZF93a2RlcChkdWNhdGlfY2xrZG0sIGwzXzJfY2xrZG0pOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gYWRkIE1QVVNTIC0+IEwzL0VNSUYvTDRQRVIsIERVQ0FUSSAtPiBMMyB3YWtldXAgZGVwZW5kZW5jeVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiByZXQ7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YXRpY19kZXBfbWFwIG9tYXA1X2RyYTdfc3RhdGljX2RlcF9tYXBbXSA9IHsKKwl7LmZyb20gPSAibXB1X2Nsa2RtIiwgLnRvID0gImVtaWZfY2xrZG0ifSwKKwl7LmZyb20gID0gTlVMTH0gLyogVEVSTUlOQVRJT04gKi8KK307CiAKIC8qKgotICogb21hcDVfZHJhN19pbml0X3N0YXRpY19kZXBzIC0gSW5pdCBzdGF0aWMgY2xrZG0gZGVwZW5kZW5jaWVzIG9uIE9NQVA1IGFuZAotICoJCQkJIERSQTcKLSAqCi0gKiBUaGUgZHluYW1pYyBkZXBlbmRlbmN5IGJldHdlZW4gTVBVU1MgLT4gRU1JRiBpcyBicm9rZW4gYW5kIGhhcwotICogbm90IHdvcmtlZCBhcyBleHBlY3RlZC4gVGhlIGhhcmR3YXJlIHJlY29tbWVuZGF0aW9uIGlzIHRvCi0gKiBlbmFibGUgc3RhdGljIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UgdG8gYXZvaWQgc3lzdGVtCi0gKiBsb2NrIHVwcyBvciByYW5kb20gY3Jhc2hlcy4KKyAqIG9tYXA0cGx1c19pbml0X3N0YXRpY19kZXBzKCkgLSBJbml0aWFsaXplIGEgc3RhdGljIGRlcGVuZGVuY3kgbWFwCisgKiBAbWFwOglNYXBwaW5nIG9mIGNsb2NrIGRvbWFpbnMKICAqLwotc3RhdGljIGlubGluZSBpbnQgb21hcDVfZHJhN19pbml0X3N0YXRpY19kZXBzKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBvbWFwNHBsdXNfaW5pdF9zdGF0aWNfZGVwcyhjb25zdCBzdHJ1Y3Qgc3RhdGljX2RlcF9tYXAgKm1hcCkKIHsKLQlzdHJ1Y3QgY2xvY2tkb21haW4gKm1wdXNzX2Nsa2RtLCAqZW1pZl9jbGtkbTsKIAlpbnQgcmV0OworCXN0cnVjdCBjbG9ja2RvbWFpbiAqZnJvbSwgKnRvOwogCi0JbXB1c3NfY2xrZG0gPSBjbGtkbV9sb29rdXAoIm1wdV9jbGtkbSIpOwotCWVtaWZfY2xrZG0gPSBjbGtkbV9sb29rdXAoImVtaWZfY2xrZG0iKTsKLQlpZiAoIW1wdXNzX2Nsa2RtIHx8ICFlbWlmX2Nsa2RtKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW1hcCkKKwkJcmV0dXJuIDA7CiAKLQlyZXQgPSBjbGtkbV9hZGRfd2tkZXAobXB1c3NfY2xrZG0sIGVtaWZfY2xrZG0pOwotCWlmIChyZXQpCi0JCXByX2VycigiRmFpbGVkIHRvIGFkZCBNUFVTUyAtPiBFTUlGIHdha2V1cCBkZXBlbmRlbmN5XG4iKTsKKwl3aGlsZSAobWFwLT5mcm9tKSB7CisJCWZyb20gPSBjbGtkbV9sb29rdXAobWFwLT5mcm9tKTsKKwkJdG8gPSBjbGtkbV9sb29rdXAobWFwLT50byk7CisJCWlmICghZnJvbSB8fCAhdG8pIHsKKwkJCXByX2VycigiRmFpbGVkIGxvb2t1cCAlcyBvciAlcyBmb3Igd2FrZXVwIGRlcGVuZGVuY3lcbiIsCisJCQkgICAgICAgbWFwLT5mcm9tLCBtYXAtPnRvKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJldCA9IGNsa2RtX2FkZF93a2RlcChmcm9tLCB0byk7CisJCWlmIChyZXQpIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIGFkZCAlcyAtPiAlcyB3YWtldXAgZGVwZW5kZW5jeSglZClcbiIsCisJCQkgICAgICAgbWFwLT5mcm9tLCBtYXAtPnRvLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQogCi0JcmV0dXJuIHJldDsKKwkJbWFwKys7CisJfTsKKworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTI3Miw2ICsyNDksMTUgQEAKIAogCXByX2luZm8oIlBvd2VyIE1hbmFnZW1lbnQgZm9yIFRJIE9NQVA0KyBkZXZpY2VzLlxuIik7CiAKKwkvKgorCSAqIE9NQVA0IGNoaXAgUE0gY3VycmVudGx5IHdvcmtzIG9ubHkgd2l0aCBjZXJ0YWluIChuZXdlcikKKwkgKiB2ZXJzaW9ucyBvZiBib290bG9hZGVycy4gVGhpcyBpcyBkdWUgdG8gbWlzc2luZyBjb2RlIGluIHRoZQorCSAqIGtlcm5lbCB0byBwcm9wZXJseSByZXNldCBhbmQgaW5pdGlhbGl6ZSBzb21lIGRldmljZXMuCisJICogaHR0cDovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9hcm0ta2VybmVsL21zZzIxODY0MS5odG1sCisJICovCisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQlwcl93YXJuKCJPTUFQNCBQTTogdS1ib290ID49IHYyMDEyLjA3IGlzIHJlcXVpcmVkIGZvciBmdWxsIFBNIHN1cHBvcnRcbiIpOworCiAJcmV0ID0gcHdyZG1fZm9yX2VhY2gocHdyZG1zX3NldHVwLCBOVUxMKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiRmFpbGVkIHRvIHNldHVwIHBvd2VyZG9tYWlucy5cbiIpOwpAQCAtMjc5LDkgKzI2NSw5IEBACiAJfQogCiAJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQlyZXQgPSBvbWFwNF9pbml0X3N0YXRpY19kZXBzKCk7CisJCXJldCA9IG9tYXA0cGx1c19pbml0X3N0YXRpY19kZXBzKG9tYXA0X3N0YXRpY19kZXBfbWFwKTsKIAllbHNlIGlmIChzb2NfaXNfb21hcDU0eHgoKSB8fCBzb2NfaXNfZHJhN3h4KCkpCi0JCXJldCA9IG9tYXA1X2RyYTdfaW5pdF9zdGF0aWNfZGVwcygpOworCQlyZXQgPSBvbWFwNHBsdXNfaW5pdF9zdGF0aWNfZGVwcyhvbWFwNV9kcmE3X3N0YXRpY19kZXBfbWFwKTsKIAogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gaW5pdGlhbGlzZSBzdGF0aWMgZGVwZW5kZW5jaWVzLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAppbmRleCA0ODQ4MGQ1Li43Nzc1MmU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKQEAgLTI5LDYgKzI5LDcgQEAKICAqIFBSTV9IQVNfVk9MVEFHRTogaGFzIHZvbHRhZ2UgZG9tYWlucwogICovCiAjZGVmaW5lIFBSTV9IQVNfSU9fV0FLRVVQCSgxIDw8IDApCisjZGVmaW5lIFBSTV9IQVNfVk9MVEFHRQkJKDEgPDwgMSkKIAogLyoKICAqIE1BWF9NT0RVTEVfU09GVFJFU0VUX1dBSVQ6IE1heGltdW0gbWljcm9zZWNvbmRzIHRvIHdhaXQgZm9yIE9NQVAKQEAgLTEyNyw2ICsxMjgsOCBAQAogICogQHdhc19hbnlfY29udGV4dF9sb3N0X29sZDogcHRyIHRvIHRoZSBTb0MgUFJNIGNvbnRleHQgbG9zcyB0ZXN0IGZuCiAgKiBAY2xlYXJfY29udGV4dF9sb3NzX2ZsYWdzX29sZDogcHRyIHRvIHRoZSBTb0MgUFJNIGNvbnRleHQgbG9zcyBmbGFnIGNsZWFyIGZuCiAgKiBAbGF0ZV9pbml0OiBwdHIgdG8gdGhlIGxhdGUgaW5pdCBmdW5jdGlvbgorICogQGFzc2VydF9oYXJkcmVzZXQ6IHB0ciB0byB0aGUgU29DIFBSTSBoYXJkcmVzZXQgYXNzZXJ0IGltcGwKKyAqIEBkZWFzc2VydF9oYXJkcmVzZXQ6IHB0ciB0byB0aGUgU29DIFBSTSBoYXJkcmVzZXQgZGVhc3NlcnQgaW1wbAogICoKICAqIFhYWCBAd2FzX2FueV9jb250ZXh0X2xvc3Rfb2xkIGFuZCBAY2xlYXJfY29udGV4dF9sb3NzX2ZsYWdzX29sZCBhcmUKICAqIGRlcHJlY2F0ZWQuCkBAIC0xMzYsMTQgKzEzOSwyNyBAQAogCWJvb2wgKCp3YXNfYW55X2NvbnRleHRfbG9zdF9vbGQpKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgaWR4KTsKIAl2b2lkICgqY2xlYXJfY29udGV4dF9sb3NzX2ZsYWdzX29sZCkodTggcGFydCwgczE2IGluc3QsIHUxNiBpZHgpOwogCWludCAoKmxhdGVfaW5pdCkodm9pZCk7CisJaW50ICgqYXNzZXJ0X2hhcmRyZXNldCkodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLCB1MTYgb2Zmc2V0KTsKKwlpbnQgKCpkZWFzc2VydF9oYXJkcmVzZXQpKHU4IHNoaWZ0LCB1OCBzdF9zaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsCisJCQkJICB1MTYgb2Zmc2V0LCB1MTYgc3Rfb2Zmc2V0KTsKKwlpbnQgKCppc19oYXJkcmVzZXRfYXNzZXJ0ZWQpKHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwKKwkJCQkgICAgIHUxNiBvZmZzZXQpOworCXZvaWQgKCpyZXNldF9zeXN0ZW0pKHZvaWQpOwogfTsKIAogZXh0ZXJuIGludCBwcm1fcmVnaXN0ZXIoc3RydWN0IHBybV9sbF9kYXRhICpwbGQpOwogZXh0ZXJuIGludCBwcm1fdW5yZWdpc3RlcihzdHJ1Y3QgcHJtX2xsX2RhdGEgKnBsZCk7CiAKK2ludCBvbWFwX3BybV9hc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwgdTE2IG9mZnNldCk7CitpbnQgb21hcF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBzdF9zaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsCisJCQkJdTE2IG9mZnNldCwgdTE2IHN0X29mZnNldCk7CitpbnQgb21hcF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwgdTE2IG9mZnNldCk7CiBleHRlcm4gdTMyIHBybV9yZWFkX3Jlc2V0X3NvdXJjZXModm9pZCk7CiBleHRlcm4gYm9vbCBwcm1fd2FzX2FueV9jb250ZXh0X2xvc3Rfb2xkKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgaWR4KTsKIGV4dGVybiB2b2lkIHBybV9jbGVhcl9jb250ZXh0X2xvc3NfZmxhZ3Nfb2xkKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgaWR4KTsKK3ZvaWQgb21hcF9wcm1fcmVzZXRfc3lzdGVtKHZvaWQpOworCit2b2lkIG9tYXBfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguYwppbmRleCA4Njk1ODA1Li5hZjBmMTUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgKiBTZXQgdGhlIERQTEwgcmVzZXQgYml0LCB3aGljaCBzaG91bGQgcmVib290IHRoZSBTb0MuICBUaGlzIGlzIHRoZQogICogcmVjb21tZW5kZWQgd2F5IHRvIHJlc3RhcnQgdGhlIFNvQy4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwMnh4eF9wcm1fZHBsbF9yZXNldCh2b2lkKQorc3RhdGljIHZvaWQgb21hcDJ4eHhfcHJtX2RwbGxfcmVzZXQodm9pZCkKIHsKIAlvbWFwMl9wcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQX1JTVF9EUExMM19NQVNLLCBXS1VQX01PRCwKIAkJCQkgICBPTUFQMl9STV9SU1RDVFJMKTsKQEAgLTIxMiw2ICsyMTIsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBwcm1fbGxfZGF0YSBvbWFwMnh4eF9wcm1fbGxfZGF0YSA9IHsKIAkucmVhZF9yZXNldF9zb3VyY2VzID0gJm9tYXAyeHh4X3BybV9yZWFkX3Jlc2V0X3NvdXJjZXMsCisJLmFzc2VydF9oYXJkcmVzZXQgPSAmb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQsCisJLmRlYXNzZXJ0X2hhcmRyZXNldCA9ICZvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0LAorCS5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgPSAmb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCwKKwkucmVzZXRfc3lzdGVtID0gJm9tYXAyeHh4X3BybV9kcGxsX3Jlc2V0LAogfTsKIAogaW50IF9faW5pdCBvbWFwMnh4eF9wcm1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguaAppbmRleCBkNzM0MTQxLi4xZDUxNjQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguaApAQCAtMTI0LDcgKzEyNCw2IEBACiBleHRlcm4gaW50IG9tYXAyeHh4X2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwogZXh0ZXJuIGludCBvbWFwMnh4eF9jbGtkbV93YWtldXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CiAKLWV4dGVybiB2b2lkIG9tYXAyeHh4X3BybV9kcGxsX3Jlc2V0KHZvaWQpOwogdm9pZCBvbWFwMnh4eF9wcm1fY2xlYXJfbW9kX2lycXMoczE2IG1vZHVsZSwgdTggcmVncywgdTMyIHdrc3RfbWFzayk7CiAKIGV4dGVybiBpbnQgX19pbml0IG9tYXAyeHh4X3BybV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmMKaW5kZXggYzEzYjRlMi4uY2MzMzQxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5jCkBAIC0yNCwxNCArMjQsMTYgQEAKIC8qKgogICogb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCAtIHJlYWQgdGhlIEhXIHJlc2V0IGxpbmUgc3RhdGUgb2YKICAqIHN1Ym1vZHVsZXMgY29udGFpbmVkIGluIHRoZSBod21vZCBtb2R1bGUKLSAqIEBwcm1fbW9kOiBQUk0gc3VibW9kdWxlIGJhc2UgKGUuZy4gQ09SRV9NT0QpCiAgKiBAc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lIHRvIGNoZWNrCisgKiBAcGFydDogUFJNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgT01BUDIKKyAqIEBwcm1fbW9kOiBQUk0gc3VibW9kdWxlIGJhc2UgKGUuZy4gQ09SRV9NT0QpCisgKiBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQsIGlnbm9yZWQgZm9yIE9NQVAyCiAgKgogICogUmV0dXJucyAxIGlmIHRoZSAoc3ViKW1vZHVsZSBoYXJkcmVzZXQgbGluZSBpcyBjdXJyZW50bHkgYXNzZXJ0ZWQsCiAgKiAwIGlmIHRoZSAoc3ViKW1vZHVsZSBoYXJkcmVzZXQgbGluZSBpcyBub3QgY3VycmVudGx5IGFzc2VydGVkLCBvcgogICogLUVJTlZBTCBpZiBjYWxsZWQgd2hpbGUgcnVubmluZyBvbiBhIG5vbi1PTUFQMi8zIGNoaXAuCiAgKi8KLWludCBvbWFwMl9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHMxNiBwcm1fbW9kLCB1OCBzaGlmdCkKK2ludCBvbWFwMl9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwgdTE2IG9mZnNldCkKIHsKIAlyZXR1cm4gb21hcDJfcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHJtX21vZCwgT01BUDJfUk1fUlNUQ1RSTCwKIAkJCQkgICAgICAgKDEgPDwgc2hpZnQpKTsKQEAgLTM5LDggKzQxLDEwIEBACiAKIC8qKgogICogb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQgLSBhc3NlcnQgdGhlIEhXIHJlc2V0IGxpbmUgb2YgYSBzdWJtb2R1bGUKLSAqIEBwcm1fbW9kOiBQUk0gc3VibW9kdWxlIGJhc2UgKGUuZy4gQ09SRV9NT0QpCiAgKiBAc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lIHRvIGFzc2VydAorICogQHBhcnQ6IFBSTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIE9NQVAyCisgKiBAcHJtX21vZDogUFJNIHN1Ym1vZHVsZSBiYXNlIChlLmcuIENPUkVfTU9EKQorICogQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0LCBpZ25vcmVkIGZvciBPTUFQMgogICoKICAqIFNvbWUgSVBzIGxpa2UgZHNwIG9yIGl2YSBjb250YWluIHByb2Nlc3NvcnMgdGhhdCByZXF1aXJlIGFuIEhXCiAgKiByZXNldCBsaW5lIHRvIGJlIGFzc2VydGVkIC8gZGVhc3NlcnRlZCBpbiBvcmRlciB0byBmdWxseSBlbmFibGUgdGhlCkBAIC00OSw3ICs1Myw3IEBACiAgKiBwbGFjZSB0aGUgc3VibW9kdWxlIGludG8gcmVzZXQuICBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzIG9yIC1FSU5WQUwKICAqIHVwb24gYW4gYXJndW1lbnQgZXJyb3IuCiAgKi8KLWludCBvbWFwMl9wcm1fYXNzZXJ0X2hhcmRyZXNldChzMTYgcHJtX21vZCwgdTggc2hpZnQpCitpbnQgb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLCB1MTYgb2Zmc2V0KQogewogCXUzMiBtYXNrOwogCkBAIC02NCw2ICs2OCwxMCBAQAogICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSAoZS5nLiBDT1JFX01PRCkKICAqIEByc3Rfc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lIHRvIGRlYXNzZXJ0CiAgKiBAc3Rfc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGUgZGVhc3NlcnRlZCBzdWJtb2R1bGUKKyAqIEBwYXJ0OiBQUk0gcGFydGl0aW9uLCBub3QgdXNlZCBmb3IgT01BUDIKKyAqIEBwcm1fbW9kOiBQUk0gc3VibW9kdWxlIGJhc2UgKGUuZy4gQ09SRV9NT0QpCisgKiBAcnN0X29mZnNldDogcmVzZXQgcmVnaXN0ZXIgb2Zmc2V0LCBub3QgdXNlZCBmb3IgT01BUDIKKyAqIEBzdF9vZmZzZXQ6IHJlc2V0IHN0YXR1cyByZWdpc3RlciBvZmZzZXQsIG5vdCB1c2VkIGZvciBPTUFQMgogICoKICAqIFNvbWUgSVBzIGxpa2UgZHNwIG9yIGl2YSBjb250YWluIHByb2Nlc3NvcnMgdGhhdCByZXF1aXJlIGFuIEhXCiAgKiByZXNldCBsaW5lIHRvIGJlIGFzc2VydGVkIC8gZGVhc3NlcnRlZCBpbiBvcmRlciB0byBmdWxseSBlbmFibGUgdGhlCkBAIC03NCw3ICs4Miw4IEBACiAgKiAtRUlOVkFMIHVwb24gYW4gYXJndW1lbnQgZXJyb3IsIC1FRVhJU1QgaWYgdGhlIHN1Ym1vZHVsZSB3YXMgYWxyZWFkeSBvdXQKICAqIG9mIHJlc2V0LCBvciAtRUJVU1kgaWYgdGhlIHN1Ym1vZHVsZSBkaWQgbm90IGV4aXQgcmVzZXQgcHJvbXB0bHkuCiAgKi8KLWludCBvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHMxNiBwcm1fbW9kLCB1OCByc3Rfc2hpZnQsIHU4IHN0X3NoaWZ0KQoraW50IG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQodTggcnN0X3NoaWZ0LCB1OCBzdF9zaGlmdCwgdTggcGFydCwKKwkJCQkgczE2IHBybV9tb2QsIHUxNiByc3Rfb2Zmc2V0LCB1MTYgc3Rfb2Zmc2V0KQogewogCXUzMiByc3QsIHN0OwogCWludCBjOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmgKaW5kZXggMWEzYTk2My4uZjU3ZTI5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5oCkBAIC0xMDAsOSArMTAwLDEyIEBACiB9CiAKIC8qIFRoZXNlIG9tYXAyXyBQUk0gZnVuY3Rpb25zIGFwcGx5IHRvIGJvdGggT01BUDIgYW5kIDMgKi8KLWV4dGVybiBpbnQgb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChzMTYgcHJtX21vZCwgdTggc2hpZnQpOwotZXh0ZXJuIGludCBvbWFwMl9wcm1fYXNzZXJ0X2hhcmRyZXNldChzMTYgcHJtX21vZCwgdTggc2hpZnQpOwotZXh0ZXJuIGludCBvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHMxNiBwcm1fbW9kLCB1OCByc3Rfc2hpZnQsIHU4IHN0X3NoaWZ0KTsKK2ludCBvbWFwMl9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwgdTE2IG9mZnNldCk7CitpbnQgb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLAorCQkJICAgICAgIHUxNiBvZmZzZXQpOworaW50IG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQodTggcnN0X3NoaWZ0LCB1OCBzdF9zaGlmdCwgdTggcGFydCwKKwkJCQkgczE2IHBybV9tb2QsIHUxNiByZXNldF9vZmZzZXQsCisJCQkJIHUxNiBzdF9vZmZzZXQpOwogCiBleHRlcm4gaW50IG9tYXAyX3B3cmRtX3NldF9uZXh0X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KTsKIGV4dGVybiBpbnQgb21hcDJfcHdyZG1fcmVhZF9uZXh0X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTMzeHguYwppbmRleCA2MjcwOWNkLi4wMmY2Mjg2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmMKQEAgLTIzLDIwICsyMywyNCBAQAogI2luY2x1ZGUgInBybTMzeHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zM3h4LmgiCiAKKyNkZWZpbmUgQU0zM1hYX1BSTV9SU1RDVFJMX09GRlNFVAkJMHgwMDAwCisKKyNkZWZpbmUgQU0zM1hYX1JTVF9HTE9CQUxfV0FSTV9TV19NQVNLCQkoMSA8PCAwKQorCiAvKiBSZWFkIGEgcmVnaXN0ZXIgaW4gYSBQUk0gaW5zdGFuY2UgKi8KLXUzMiBhbTMzeHhfcHJtX3JlYWRfcmVnKHMxNiBpbnN0LCB1MTYgaWR4KQorc3RhdGljIHUzMiBhbTMzeHhfcHJtX3JlYWRfcmVnKHMxNiBpbnN0LCB1MTYgaWR4KQogewogCXJldHVybiByZWFkbF9yZWxheGVkKHBybV9iYXNlICsgaW5zdCArIGlkeCk7CiB9CiAKIC8qIFdyaXRlIGludG8gYSByZWdpc3RlciBpbiBhIFBSTSBpbnN0YW5jZSAqLwotdm9pZCBhbTMzeHhfcHJtX3dyaXRlX3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IGlkeCkKK3N0YXRpYyB2b2lkIGFtMzN4eF9wcm1fd3JpdGVfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgaWR4KQogewogCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJtX2Jhc2UgKyBpbnN0ICsgaWR4KTsKIH0KIAogLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBQUk0uIENhbGxlciBtdXN0IGxvY2sgKi8KLXUzMiBhbTMzeHhfcHJtX3Jtd19yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgaWR4KQorc3RhdGljIHUzMiBhbTMzeHhfcHJtX3Jtd19yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgaWR4KQogewogCXUzMiB2OwogCkBAIC01Miw2ICs1Niw3IEBACiAgKiBhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCAtIHJlYWQgdGhlIEhXIHJlc2V0IGxpbmUgc3RhdGUgb2YKICAqIHN1Ym1vZHVsZXMgY29udGFpbmVkIGluIHRoZSBod21vZCBtb2R1bGUKICAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUgdG8gY2hlY2sKKyAqIEBwYXJ0OiBQUk0gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBBTTMzeHgKICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKICAqIEByc3RjdHJsX29mZnM6IFJNX1JTVENUUkwgcmVnaXN0ZXIgYWRkcmVzcyBvZmZzZXQgZm9yIHRoaXMgbW9kdWxlCiAgKgpAQCAtNTksNyArNjQsOCBAQAogICogMCBpZiB0aGUgKHN1Yiltb2R1bGUgaGFyZHJlc2V0IGxpbmUgaXMgbm90IGN1cnJlbnRseSBhc3NlcnRlZCwgb3IKICAqIC1FSU5WQUwgdXBvbiBwYXJhbWV0ZXIgZXJyb3IuCiAgKi8KLWludCBhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCh1OCBzaGlmdCwgczE2IGluc3QsIHUxNiByc3RjdHJsX29mZnMpCitzdGF0aWMgaW50IGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgaW5zdCwKKwkJCQkJICAgIHUxNiByc3RjdHJsX29mZnMpCiB7CiAJdTMyIHY7CiAKQEAgLTczLDYgKzc5LDcgQEAKIC8qKgogICogYW0zM3h4X3BybV9hc3NlcnRfaGFyZHJlc2V0IC0gYXNzZXJ0IHRoZSBIVyByZXNldCBsaW5lIG9mIGEgc3VibW9kdWxlCiAgKiBAc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lIHRvIGFzc2VydAorICogQHBhcnQ6IENNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgQU0zM3h4CiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCiAgKiBAcnN0Y3RybF9yZWc6IFJNX1JTVENUUkwgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpcyBtb2R1bGUKICAqCkBAIC04Myw3ICs5MCw4IEBACiAgKiBwbGFjZSB0aGUgc3VibW9kdWxlIGludG8gcmVzZXQuICBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzIG9yIC1FSU5WQUwKICAqIHVwb24gYW4gYXJndW1lbnQgZXJyb3IuCiAgKi8KLWludCBhbTMzeHhfcHJtX2Fzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHMxNiBpbnN0LCB1MTYgcnN0Y3RybF9vZmZzKQorc3RhdGljIGludCBhbTMzeHhfcHJtX2Fzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBpbnN0LAorCQkJCSAgICAgICB1MTYgcnN0Y3RybF9vZmZzKQogewogCXUzMiBtYXNrID0gMSA8PCBzaGlmdDsKIApAQCAtOTYsNiArMTA0LDggQEAKICAqIGFtMzN4eF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0IC0gZGVhc3NlcnQgYSBzdWJtb2R1bGUgaGFyZHJlc2V0IGxpbmUgYW5kCiAgKiB3YWl0CiAgKiBAc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lIHRvIGRlYXNzZXJ0CisgKiBAc3Rfc2hpZnQ6IHJlc2V0IHN0YXR1cyByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZQorICogQHBhcnQ6IFBSTSBwYXJ0aXRpb24sIG5vdCB1c2VkIGZvciBBTTMzeHgKICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKICAqIEByc3RjdHJsX3JlZzogUk1fUlNUQ1RSTCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzIG1vZHVsZQogICogQHJzdHN0X3JlZzogUk1fUlNUU1QgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpcyBtb2R1bGUKQEAgLTEwOSwxNCArMTE5LDE1IEBACiAgKiAtRUlOVkFMIHVwb24gYW4gYXJndW1lbnQgZXJyb3IsIC1FRVhJU1QgaWYgdGhlIHN1Ym1vZHVsZSB3YXMgYWxyZWFkeSBvdXQKICAqIG9mIHJlc2V0LCBvciAtRUJVU1kgaWYgdGhlIHN1Ym1vZHVsZSBkaWQgbm90IGV4aXQgcmVzZXQgcHJvbXB0bHkuCiAgKi8KLWludCBhbTMzeHhfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggc3Rfc2hpZnQsIHMxNiBpbnN0LAotCQl1MTYgcnN0Y3RybF9vZmZzLCB1MTYgcnN0c3Rfb2ZmcykKK3N0YXRpYyBpbnQgYW0zM3h4X3BybV9kZWFzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHN0X3NoaWZ0LCB1OCBwYXJ0LAorCQkJCQkgczE2IGluc3QsIHUxNiByc3RjdHJsX29mZnMsCisJCQkJCSB1MTYgcnN0c3Rfb2ZmcykKIHsKIAlpbnQgYzsKIAl1MzIgbWFzayA9IDEgPDwgc3Rfc2hpZnQ7CiAKIAkvKiBDaGVjayB0aGUgY3VycmVudCBzdGF0dXMgdG8gYXZvaWQgIGRlLWFzc2VydGluZyB0aGUgbGluZSB0d2ljZSAqLwotCWlmIChhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChzaGlmdCwgaW5zdCwgcnN0Y3RybF9vZmZzKSA9PSAwKQorCWlmIChhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChzaGlmdCwgMCwgaW5zdCwgcnN0Y3RybF9vZmZzKSA9PSAwKQogCQlyZXR1cm4gLUVFWElTVDsKIAogCS8qIENsZWFyIHRoZSByZXNldCBzdGF0dXMgYnkgd3JpdGluZyAxIHRvIHRoZSBzdGF0dXMgYml0ICovCkBAIC0xMjgsNyArMTM5LDcgQEAKIAlhbTMzeHhfcHJtX3Jtd19yZWdfYml0cyhtYXNrLCAwLCBpbnN0LCByc3RjdHJsX29mZnMpOwogCiAJLyogd2FpdCB0aGUgc3RhdHVzIHRvIGJlIHNldCAqLwotCW9tYXBfdGVzdF90aW1lb3V0KGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHN0X3NoaWZ0LCBpbnN0LAorCW9tYXBfdGVzdF90aW1lb3V0KGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHN0X3NoaWZ0LCAwLCBpbnN0LAogCQkJCQkJCSAgIHJzdHN0X29mZnMpLAogCQkJICBNQVhfTU9EVUxFX0hBUkRSRVNFVF9XQUlULCBjKTsKIApAQCAtMzI1LDYgKzMzNiwyMyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGFtMzN4eF9wcm1fZ2xvYmFsX3dhcm1fc3dfcmVzZXQgLSByZWJvb3QgdGhlIGRldmljZSB2aWEgd2FybSByZXNldAorICoKKyAqIEltbWVkaWF0ZWx5IHJlYm9vdHMgdGhlIGRldmljZSB0aHJvdWdoIHdhcm0gcmVzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGFtMzN4eF9wcm1fZ2xvYmFsX3dhcm1fc3dfcmVzZXQodm9pZCkKK3sKKwlhbTMzeHhfcHJtX3Jtd19yZWdfYml0cyhBTTMzWFhfUlNUX0dMT0JBTF9XQVJNX1NXX01BU0ssCisJCQkJQU0zM1hYX1JTVF9HTE9CQUxfV0FSTV9TV19NQVNLLAorCQkJCUFNMzNYWF9QUk1fREVWSUNFX01PRCwKKwkJCQlBTTMzWFhfUFJNX1JTVENUUkxfT0ZGU0VUKTsKKworCS8qIE9DUCBiYXJyaWVyICovCisJKHZvaWQpYW0zM3h4X3BybV9yZWFkX3JlZyhBTTMzWFhfUFJNX0RFVklDRV9NT0QsCisJCQkJICBBTTMzWFhfUFJNX1JTVENUUkxfT0ZGU0VUKTsKK30KKwogc3RydWN0IHB3cmRtX29wcyBhbTMzeHhfcHdyZG1fb3BlcmF0aW9ucyA9IHsKIAkucHdyZG1fc2V0X25leHRfcHdyc3QJCT0gYW0zM3h4X3B3cmRtX3NldF9uZXh0X3B3cnN0LAogCS5wd3JkbV9yZWFkX25leHRfcHdyc3QJCT0gYW0zM3h4X3B3cmRtX3JlYWRfbmV4dF9wd3JzdCwKQEAgLTM0MiwzICszNzAsMjEgQEAKIAkucHdyZG1fd2FpdF90cmFuc2l0aW9uCQk9IGFtMzN4eF9wd3JkbV93YWl0X3RyYW5zaXRpb24sCiAJLnB3cmRtX2hhc192b2x0ZG0JCT0gYW0zM3h4X2NoZWNrX3ZjdnAsCiB9OworCitzdGF0aWMgc3RydWN0IHBybV9sbF9kYXRhIGFtMzN4eF9wcm1fbGxfZGF0YSA9IHsKKwkuYXNzZXJ0X2hhcmRyZXNldAkJPSBhbTMzeHhfcHJtX2Fzc2VydF9oYXJkcmVzZXQsCisJLmRlYXNzZXJ0X2hhcmRyZXNldAkJPSBhbTMzeHhfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCwKKwkuaXNfaGFyZHJlc2V0X2Fzc2VydGVkCQk9IGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkLAorCS5yZXNldF9zeXN0ZW0JCQk9IGFtMzN4eF9wcm1fZ2xvYmFsX3dhcm1fc3dfcmVzZXQsCit9OworCitpbnQgX19pbml0IGFtMzN4eF9wcm1faW5pdCh2b2lkKQoreworCXJldHVybiBwcm1fcmVnaXN0ZXIoJmFtMzN4eF9wcm1fbGxfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbTMzeHhfcHJtX2V4aXQodm9pZCkKK3sKKwlwcm1fdW5yZWdpc3RlcigmYW0zM3h4X3BybV9sbF9kYXRhKTsKK30KK19fZXhpdGNhbGwoYW0zM3h4X3BybV9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMzN4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmgKaW5kZXggOWI5OTE4ZC4uOThhYzQxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmgKQEAgLTExOCwxNCArMTE4LDcgQEAKICNkZWZpbmUgQU0zM1hYX1BNX0NFRlVTRV9QV1JTVFNUCQlBTTMzWFhfUFJNX1JFR0FERFIoQU0zM1hYX1BSTV9DRUZVU0VfTU9ELCAweDAwMDQpCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwotZXh0ZXJuIHUzMiBhbTMzeHhfcHJtX3JlYWRfcmVnKHMxNiBpbnN0LCB1MTYgaWR4KTsKLWV4dGVybiB2b2lkIGFtMzN4eF9wcm1fd3JpdGVfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgaWR4KTsKLWV4dGVybiB1MzIgYW0zM3h4X3BybV9ybXdfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCk7Ci1leHRlcm4gdm9pZCBhbTMzeHhfcHJtX2dsb2JhbF93YXJtX3N3X3Jlc2V0KHZvaWQpOwotZXh0ZXJuIGludCBhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCh1OCBzaGlmdCwgczE2IGluc3QsCi0JCXUxNiByc3RjdHJsX29mZnMpOwotZXh0ZXJuIGludCBhbTMzeHhfcHJtX2Fzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHMxNiBpbnN0LCB1MTYgcnN0Y3RybF9vZmZzKTsKLWV4dGVybiBpbnQgYW0zM3h4X3BybV9kZWFzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHN0X3NoaWZ0LCBzMTYgaW5zdCwKLQkJdTE2IHJzdGN0cmxfb2ZmcywgdTE2IHJzdHN0X29mZnMpOworaW50IGFtMzN4eF9wcm1faW5pdCh2b2lkKTsKKwogI2VuZGlmIC8qIEFTU0VNQkxFUiAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTN4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5jCmluZGV4IGZmMDhkYTMuLmM1ZTAwYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5jCkBAIC0zMCw2ICszMCwxMSBAQAogI2luY2x1ZGUgImNtM3h4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9wcm1fcmVhZF9wZW5kaW5nX2lycXModW5zaWduZWQgbG9uZyAqZXZlbnRzKTsKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X3BybV9vY3BfYmFycmllcih2b2lkKTsKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X3BybV9zYXZlX2FuZF9jbGVhcl9pcnFlbih1MzIgKnNhdmVkX21hc2spOworc3RhdGljIHZvaWQgb21hcDN4eHhfcHJtX3Jlc3RvcmVfaXJxZW4odTMyICpzYXZlZF9tYXNrKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX3ByY21faXJxIG9tYXAzX3ByY21faXJxc1tdID0gewogCU9NQVBfUFJDTV9JUlEoIndrdXAiLAkwLAkwKSwKIAlPTUFQX1BSQ01fSVJRKCJpbyIsCTksCTEpLApAQCAtMTMxLDcgKzEzNiw3IEBACiAgKiByZWNvbW1lbmRlZCB3YXkgdG8gcmVzdGFydCB0aGUgU29DLCBjb25zaWRlcmluZyBFcnJhdGEgaTUyMC4gIE5vCiAgKiByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDN4eHhfcHJtX2RwbGwzX3Jlc2V0KHZvaWQpCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9wcm1fZHBsbDNfcmVzZXQodm9pZCkKIHsKIAlvbWFwMl9wcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQX1JTVF9EUExMM19NQVNLLCBPTUFQMzQzMF9HUl9NT0QsCiAJCQkJICAgT01BUDJfUk1fUlNUQ1RSTCk7CkBAIC0xNDcsNyArMTUyLDcgQEAKICAqIE1QVSBJUlFzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIHRoZSB1MzIgcG9pbnRlZCB0byBieSBAZXZlbnRzLgogICogTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXAzeHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcyh1bnNpZ25lZCBsb25nICpldmVudHMpCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9wcm1fcmVhZF9wZW5kaW5nX2lycXModW5zaWduZWQgbG9uZyAqZXZlbnRzKQogewogCXUzMiBtYXNrLCBzdDsKIApAQCAtMTY2LDcgKzE3MSw3IEBACiAgKiBibG9jaywgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGFmdGVyIGFja25vd2xlZGdpbmcgb3IgY2xlYXJpbmcgSVJRCiAgKiBiaXRzLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXAzeHh4X3BybV9vY3BfYmFycmllcih2b2lkKQorc3RhdGljIHZvaWQgb21hcDN4eHhfcHJtX29jcF9iYXJyaWVyKHZvaWQpCiB7CiAJb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELCBPTUFQM19QUk1fUkVWSVNJT05fT0ZGU0VUKTsKIH0KQEAgLTE4Miw3ICsxODcsNyBAQAogICogcmV0dXJuaW5nOyBvdGhlcndpc2UsIHNwdXJpb3VzIGludGVycnVwdHMgbWlnaHQgb2NjdXIuICBObyByZXR1cm4KICAqIHZhbHVlLgogICovCi12b2lkIG9tYXAzeHh4X3BybV9zYXZlX2FuZF9jbGVhcl9pcnFlbih1MzIgKnNhdmVkX21hc2spCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9wcm1fc2F2ZV9hbmRfY2xlYXJfaXJxZW4odTMyICpzYXZlZF9tYXNrKQogewogCXNhdmVkX21hc2tbMF0gPSBvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsCiAJCQkJCSAgICAgICBPTUFQM19QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQpOwpAQCAtMjAyLDcgKzIwNyw3IEBACiAgKiBiYXJyaWVyIHNob3VsZCBiZSBuZWVkZWQgaGVyZTsgYW55IHBlbmRpbmcgUFJNIGludGVycnVwdHMgd2lsbCBmaXJlCiAgKiBvbmNlIHRoZSB3cml0ZXMgcmVhY2ggdGhlIFBSTS4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwM3h4eF9wcm1fcmVzdG9yZV9pcnFlbih1MzIgKnNhdmVkX21hc2spCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9wcm1fcmVzdG9yZV9pcnFlbih1MzIgKnNhdmVkX21hc2spCiB7CiAJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoc2F2ZWRfbWFza1swXSwgT0NQX01PRCwKIAkJCQlPTUFQM19QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQpOwpAQCAtMzc1LDcgKzM4MCw3IEBACiAgKiBUaGUgU1RfSU9fQ0hBSU4gYml0IGRvZXMgbm90IGV4aXN0IGluIDM0MzAgYmVmb3JlIGVzMy4xLiBUaGUgb25seQogICogdGhpbmcgd2UgY2FuIGRvIGlzIHRvZ2dsZSBFTl9JTyBiaXQgZm9yIGVhcmxpZXIgb21hcHMuCiAgKi8KLXZvaWQgb21hcDM0MzBfcHJlX2VzM18xX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCitzdGF0aWMgdm9pZCBvbWFwMzQzMF9wcmVfZXMzXzFfcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKIHsKIAlvbWFwMl9wcm1fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX0VOX0lPX01BU0ssIFdLVVBfTU9ELAogCQkJCSAgICAgUE1fV0tFTik7CkBAIC0zOTMsNyArMzk4LDcgQEAKICAqIGRlYXNzZXJ0aW5nIFdVQ0xLSU4gYW5kIGNsZWFyaW5nIHRoZSBTVF9JT19DSEFJTiBXS1NUIGJpdC4gIE5vCiAgKiByZXR1cm4gdmFsdWUuIFRoZXNlIHJlZ2lzdGVycyBhcmUgb25seSBhdmFpbGFibGUgaW4gMzQzMCBlczMuMSBhbmQgbGF0ZXIuCiAgKi8KLXZvaWQgb21hcDNfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCitzdGF0aWMgdm9pZCBvbWFwM19wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKIHsKIAlpbnQgaSA9IDA7CiAKQEAgLTQxNiwxNSArNDIxLDYgQEAKIH0KIAogLyoqCi0gKiBvbWFwM3h4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4gLSByZWNvbmZpZ3VyZSBJL08gY2hhaW4KLSAqLwotdm9pZCBvbWFwM3h4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKLXsKLQlpZiAob21hcDNfcHJjbV9pcnFfc2V0dXAucmVjb25maWd1cmVfaW9fY2hhaW4pCi0JCW9tYXAzX3ByY21faXJxX3NldHVwLnJlY29uZmlndXJlX2lvX2NoYWluKCk7Ci19Ci0KLS8qKgogICogb21hcDN4eHhfcHJtX2VuYWJsZV9pb193YWtldXAgLSBlbmFibGUgd2FrZXVwIGV2ZW50cyBmcm9tIEkvTyB3YWtldXAgbGF0Y2hlcwogICoKICAqIEFjdGl2YXRlcyB0aGUgSS9PIHdha2V1cCBldmVudCBsYXRjaGVzIGFuZCBhbGxvd3MgZXZlbnRzIGxvZ2dlZCBieQpAQCAtNjY0LDYgKzY2MCwxMCBAQAogc3RhdGljIHN0cnVjdCBwcm1fbGxfZGF0YSBvbWFwM3h4eF9wcm1fbGxfZGF0YSA9IHsKIAkucmVhZF9yZXNldF9zb3VyY2VzID0gJm9tYXAzeHh4X3BybV9yZWFkX3Jlc2V0X3NvdXJjZXMsCiAJLmxhdGVfaW5pdCA9ICZvbWFwM3h4eF9wcm1fbGF0ZV9pbml0LAorCS5hc3NlcnRfaGFyZHJlc2V0ID0gJm9tYXAyX3BybV9hc3NlcnRfaGFyZHJlc2V0LAorCS5kZWFzc2VydF9oYXJkcmVzZXQgPSAmb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCwKKwkuaXNfaGFyZHJlc2V0X2Fzc2VydGVkID0gJm9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQsCisJLnJlc2V0X3N5c3RlbSA9ICZvbWFwM3h4eF9wcm1fZHBsbDNfcmVzZXQsCiB9OwogCiBpbnQgX19pbml0IG9tYXAzeHh4X3BybV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTN4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5oCmluZGV4IGJjMzdkNDIuLmNmZGUzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5oCkBAIC0xNDQsMjIgKzE0NCw2IEBACiBleHRlcm4gdm9pZCBvbWFwM19wcm1fdmN2cF93cml0ZSh1MzIgdmFsLCB1OCBvZmZzZXQpOwogZXh0ZXJuIHUzMiBvbWFwM19wcm1fdmN2cF9ybXcodTMyIG1hc2ssIHUzMiBiaXRzLCB1OCBvZmZzZXQpOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKLXZvaWQgb21hcDN4eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwM3h4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKLXsKLX0KLSNlbmRpZgotCi0vKiBQUk0gaW50ZXJydXB0LXJlbGF0ZWQgZnVuY3Rpb25zICovCi1leHRlcm4gdm9pZCBvbWFwM3h4eF9wcm1fcmVhZF9wZW5kaW5nX2lycXModW5zaWduZWQgbG9uZyAqZXZlbnRzKTsKLWV4dGVybiB2b2lkIG9tYXAzeHh4X3BybV9vY3BfYmFycmllcih2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXAzeHh4X3BybV9zYXZlX2FuZF9jbGVhcl9pcnFlbih1MzIgKnNhdmVkX21hc2spOwotZXh0ZXJuIHZvaWQgb21hcDN4eHhfcHJtX3Jlc3RvcmVfaXJxZW4odTMyICpzYXZlZF9tYXNrKTsKLQotZXh0ZXJuIHZvaWQgb21hcDN4eHhfcHJtX2RwbGwzX3Jlc2V0KHZvaWQpOwotCiBleHRlcm4gaW50IF9faW5pdCBvbWFwM3h4eF9wcm1faW5pdCh2b2lkKTsKIGV4dGVybiB1MzIgb21hcDN4eHhfcHJtX2dldF9yZXNldF9zb3VyY2VzKHZvaWQpOwogaW50IG9tYXAzeHh4X3BybV9jbGVhcl9tb2RfaXJxcyhzMTYgbW9kdWxlLCB1OCByZWdzLCB1MzIgaWdub3JlX2JpdHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHguYwppbmRleCAwOTU4ZDA3Li5jYzE3MGZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHguYwpAQCAtMzIsNiArMzIsMTIgQEAKIAogLyogU3RhdGljIGRhdGEgKi8KIAorc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX3JlYWRfcGVuZGluZ19pcnFzKHVuc2lnbmVkIGxvbmcgKmV2ZW50cyk7CitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fb2NwX2JhcnJpZXIodm9pZCk7CitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fc2F2ZV9hbmRfY2xlYXJfaXJxZW4odTMyICpzYXZlZF9tYXNrKTsKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9yZXN0b3JlX2lycWVuKHUzMiAqc2F2ZWRfbWFzayk7CitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF9wcmNtX2lycSBvbWFwNF9wcmNtX2lycXNbXSA9IHsKIAlPTUFQX1BSQ01fSVJRKCJpbyIsICAgICA5LCAgICAgIDEpLAogfTsKQEAgLTgwLDE5ICs4NiwxOSBAQAogLyogUFJNIGxvdy1sZXZlbCBmdW5jdGlvbnMgKi8KIAogLyogUmVhZCBhIHJlZ2lzdGVyIGluIGEgQ00vUFJNIGluc3RhbmNlIGluIHRoZSBQUk0gbW9kdWxlICovCi11MzIgb21hcDRfcHJtX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiByZWcpCitzdGF0aWMgdTMyIG9tYXA0X3BybV9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgcmVnKQogewogCXJldHVybiByZWFkbF9yZWxheGVkKHBybV9iYXNlICsgaW5zdCArIHJlZyk7CiB9CiAKIC8qIFdyaXRlIGludG8gYSByZWdpc3RlciBpbiBhIENNL1BSTSBpbnN0YW5jZSBpbiB0aGUgUFJNIG1vZHVsZSAqLwotdm9pZCBvbWFwNF9wcm1fd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiByZWcpCitzdGF0aWMgdm9pZCBvbWFwNF9wcm1fd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiByZWcpCiB7CiAJd3JpdGVsX3JlbGF4ZWQodmFsLCBwcm1fYmFzZSArIGluc3QgKyByZWcpOwogfQogCiAvKiBSZWFkLW1vZGlmeS13cml0ZSBhIHJlZ2lzdGVyIGluIGEgUFJNIG1vZHVsZS4gQ2FsbGVyIG11c3QgbG9jayAqLwotdTMyIG9tYXA0X3BybV9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgcmVnKQorc3RhdGljIHUzMiBvbWFwNF9wcm1fcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IHJlZykKIHsKIAl1MzIgdjsKIApAQCAtMjA3LDcgKzIxMyw3IEBACiAgKiBNUFUgSVJRcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW50byB0aGUgdHdvIHUzMnMgcG9pbnRlZCB0byBieSBAZXZlbnRzLgogICogTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXA0NHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcyh1bnNpZ25lZCBsb25nICpldmVudHMpCitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fcmVhZF9wZW5kaW5nX2lycXModW5zaWduZWQgbG9uZyAqZXZlbnRzKQogewogCWV2ZW50c1swXSA9IF9yZWFkX3BlbmRpbmdfaXJxX3JlZyhPTUFQNF9QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQsCiAJCQkJCSAgT01BUDRfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKQEAgLTIyNCw3ICsyMzAsNyBAQAogICogYmxvY2ssIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhZnRlciBhY2tub3dsZWRnaW5nIG9yIGNsZWFyaW5nIElSUQogICogYml0cy4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwNDR4eF9wcm1fb2NwX2JhcnJpZXIodm9pZCkKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9vY3BfYmFycmllcih2b2lkKQogewogCW9tYXA0X3BybV9yZWFkX2luc3RfcmVnKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX0lOU1QsCiAJCQkJT01BUDRfUkVWSVNJT05fUFJNX09GRlNFVCk7CkBAIC0yNDEsNyArMjQ3LDcgQEAKICAqIGludGVycnVwdHMgcmVhY2hlcyB0aGUgUFJNIGJlZm9yZSByZXR1cm5pbmc7IG90aGVyd2lzZSwgc3B1cmlvdXMKICAqIGludGVycnVwdHMgbWlnaHQgb2NjdXIuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDQ0eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuKHUzMiAqc2F2ZWRfbWFzaykKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9zYXZlX2FuZF9jbGVhcl9pcnFlbih1MzIgKnNhdmVkX21hc2spCiB7CiAJc2F2ZWRfbWFza1swXSA9CiAJCW9tYXA0X3BybV9yZWFkX2luc3RfcmVnKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX0lOU1QsCkBAIC0yNzAsNyArMjc2LDcgQEAKICAqIE5vIE9DUCBiYXJyaWVyIHNob3VsZCBiZSBuZWVkZWQgaGVyZTsgYW55IHBlbmRpbmcgUFJNIGludGVycnVwdHMgd2lsbCBmaXJlCiAgKiBvbmNlIHRoZSB3cml0ZXMgcmVhY2ggdGhlIFBSTS4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwNDR4eF9wcm1fcmVzdG9yZV9pcnFlbih1MzIgKnNhdmVkX21hc2spCitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fcmVzdG9yZV9pcnFlbih1MzIgKnNhdmVkX21hc2spCiB7CiAJb21hcDRfcHJtX3dyaXRlX2luc3RfcmVnKHNhdmVkX21hc2tbMF0sIE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX0lOU1QsCiAJCQkJIE9NQVA0X1BSTV9JUlFFTkFCTEVfTVBVX09GRlNFVCk7CkBAIC0yODcsNyArMjkzLDcgQEAKICAqIGRlYXNzZXJ0aW5nIFdVQ0xLSU4gYW5kIHdhaXRpbmcgZm9yIFdVQ0xLT1VUIHRvIGJlIGRlYXNzZXJ0ZWQuCiAgKiBObyByZXR1cm4gdmFsdWUuIFhYWCBBcmUgdGhlIGZpbmFsIHR3byBzdGVwcyBuZWNlc3Nhcnk/CiAgKi8KLXZvaWQgb21hcDQ0eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKIHsKIAlpbnQgaSA9IDA7CiAJczMyIGluc3QgPSBvbWFwNF9wcm1zdF9nZXRfcHJtX2Rldl9pbnN0KCk7CkBAIC02NTIsMTEgKzY1OCwxMCBAQAogCiBzdGF0aWMgaW50IG9tYXA0X2NoZWNrX3ZjdnAodm9pZCkKIHsKLQkvKiBObyBWQy9WUCBvbiBkcmE3eHggZGV2aWNlcyAqLwotCWlmIChzb2NfaXNfZHJhN3h4KCkpCi0JCXJldHVybiAwOworCWlmIChwcm1fZmVhdHVyZXMgJiBQUk1fSEFTX1ZPTFRBR0UpCisJCXJldHVybiAxOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBwd3JkbV9vcHMgb21hcDRfcHdyZG1fb3BlcmF0aW9ucyA9IHsKQEAgLTY4OSw2ICs2OTQsMTAgQEAKIAkud2FzX2FueV9jb250ZXh0X2xvc3Rfb2xkID0gJm9tYXA0NHh4X3BybV93YXNfYW55X2NvbnRleHRfbG9zdF9vbGQsCiAJLmNsZWFyX2NvbnRleHRfbG9zc19mbGFnc19vbGQgPSAmb21hcDQ0eHhfcHJtX2NsZWFyX2NvbnRleHRfbG9zc19mbGFnc19vbGQsCiAJLmxhdGVfaW5pdCA9ICZvbWFwNDR4eF9wcm1fbGF0ZV9pbml0LAorCS5hc3NlcnRfaGFyZHJlc2V0CT0gb21hcDRfcHJtaW5zdF9hc3NlcnRfaGFyZHJlc2V0LAorCS5kZWFzc2VydF9oYXJkcmVzZXQJPSBvbWFwNF9wcm1pbnN0X2RlYXNzZXJ0X2hhcmRyZXNldCwKKwkuaXNfaGFyZHJlc2V0X2Fzc2VydGVkCT0gb21hcDRfcHJtaW5zdF9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQsCisJLnJlc2V0X3N5c3RlbQkJPSBvbWFwNF9wcm1pbnN0X2dsb2JhbF93YXJtX3N3X3Jlc2V0LAogfTsKIAogaW50IF9faW5pdCBvbWFwNDR4eF9wcm1faW5pdCh2b2lkKQpAQCAtNjk2LDYgKzcwNSw5IEBACiAJaWYgKGNwdV9pc19vbWFwNDR4eCgpIHx8IHNvY19pc19vbWFwNTR4eCgpIHx8IHNvY19pc19kcmE3eHgoKSkKIAkJcHJtX2ZlYXR1cmVzIHw9IFBSTV9IQVNfSU9fV0FLRVVQOwogCisJaWYgKCFzb2NfaXNfZHJhN3h4KCkpCisJCXBybV9mZWF0dXJlcyB8PSBQUk1fSEFTX1ZPTFRBR0U7CisKIAlyZXR1cm4gcHJtX3JlZ2lzdGVyKCZvbWFwNDR4eF9wcm1fbGxfZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eF81NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHhfNTR4eC5oCmluZGV4IDhkOTVhYTUuLmY3NTEyNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eF81NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4XzU0eHguaApAQCAtMjYsMTAgKzI2LDYgQEAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KICNpZm5kZWYgX19BU1NFTUJMRVJfXwogCi1leHRlcm4gdTMyIG9tYXA0X3BybV9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgaWR4KTsKLWV4dGVybiB2b2lkIG9tYXA0X3BybV93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IGlkeCk7Ci1leHRlcm4gdTMyIG9tYXA0X3BybV9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgaWR4KTsKLQogLyogT01BUDQvT01BUDUtc3BlY2lmaWMgVlAgZnVuY3Rpb25zICovCiB1MzIgb21hcDRfcHJtX3ZwX2NoZWNrX3R4ZG9uZSh1OCB2cF9pZCk7CiB2b2lkIG9tYXA0X3BybV92cF9jbGVhcl90eGRvbmUodTggdnBfaWQpOwpAQCAtNDIsMjEgKzM4LDYgQEAKIGV4dGVybiB2b2lkIG9tYXA0X3BybV92Y3ZwX3dyaXRlKHUzMiB2YWwsIHU4IG9mZnNldCk7CiBleHRlcm4gdTMyIG9tYXA0X3BybV92Y3ZwX3Jtdyh1MzIgbWFzaywgdTMyIGJpdHMsIHU4IG9mZnNldCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KSB8fCBkZWZpbmVkKENPTkZJR19TT0NfT01BUDUpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19TT0NfRFJBN1hYKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfQU00M1hYKQotdm9pZCBvbWFwNDR4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXA0NHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQotewotfQotI2VuZGlmCi0KLS8qIFBSTSBpbnRlcnJ1cHQtcmVsYXRlZCBmdW5jdGlvbnMgKi8KLWV4dGVybiB2b2lkIG9tYXA0NHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcyh1bnNpZ25lZCBsb25nICpldmVudHMpOwotZXh0ZXJuIHZvaWQgb21hcDQ0eHhfcHJtX29jcF9iYXJyaWVyKHZvaWQpOwotZXh0ZXJuIHZvaWQgb21hcDQ0eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuKHUzMiAqc2F2ZWRfbWFzayk7Ci1leHRlcm4gdm9pZCBvbWFwNDR4eF9wcm1fcmVzdG9yZV9pcnFlbih1MzIgKnNhdmVkX21hc2spOwotCiBleHRlcm4gaW50IF9faW5pdCBvbWFwNDR4eF9wcm1faW5pdCh2b2lkKTsKIGV4dGVybiB1MzIgb21hcDQ0eHhfcHJtX2dldF9yZXNldF9zb3VyY2VzKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybV9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCmluZGV4IGVlMmI1MjIuLjc3OTk0MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCkBAIC00MjMsNiArNDIzLDEwNSBAQAogfQogCiAvKioKKyAqIG9tYXBfcHJtX2Fzc2VydF9oYXJkcmVzZXQgLSBhc3NlcnQgaGFyZHJlc2V0IGZvciBhbiBJUCBibG9jaworICogQHNoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZQorICogQHBhcnQ6IFBSTSBwYXJ0aXRpb24KKyAqIEBwcm1fbW9kOiBQUk0gc3VibW9kdWxlIGJhc2Ugb3IgaW5zdGFuY2Ugb2Zmc2V0CisgKiBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQKKyAqCisgKiBBc3NlcnRzIGEgaGFyZHdhcmUgcmVzZXQgbGluZSBmb3IgYW4gSVAgYmxvY2suCisgKi8KK2ludCBvbWFwX3BybV9hc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwgdTE2IG9mZnNldCkKK3sKKwlpZiAoIXBybV9sbF9kYXRhLT5hc3NlcnRfaGFyZHJlc2V0KSB7CisJCVdBUk5fT05DRSgxLCAicHJtOiAlczogbm8gbWFwcGluZyBmdW5jdGlvbiBkZWZpbmVkXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBwcm1fbGxfZGF0YS0+YXNzZXJ0X2hhcmRyZXNldChzaGlmdCwgcGFydCwgcHJtX21vZCwgb2Zmc2V0KTsKK30KKworLyoqCisgKiBvbWFwX3BybV9kZWFzc2VydF9oYXJkcmVzZXQgLSBkZWFzc2VydCBoYXJkcmVzZXQgZm9yIGFuIElQIGJsb2NrCisgKiBAc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lCisgKiBAc3Rfc2hpZnQ6IHJlc2V0IHN0YXR1cyBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZQorICogQHBhcnQ6IFBSTSBwYXJ0aXRpb24KKyAqIEBwcm1fbW9kOiBQUk0gc3VibW9kdWxlIGJhc2Ugb3IgaW5zdGFuY2Ugb2Zmc2V0CisgKiBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQKKyAqIEBzdF9vZmZzZXQ6IHN0YXR1cyByZWdpc3RlciBvZmZzZXQKKyAqCisgKiBEZWFzc2VydHMgYSBoYXJkd2FyZSByZXNldCBsaW5lIGZvciBhbiBJUCBibG9jay4KKyAqLworaW50IG9tYXBfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggc3Rfc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLAorCQkJCXUxNiBvZmZzZXQsIHUxNiBzdF9vZmZzZXQpCit7CisJaWYgKCFwcm1fbGxfZGF0YS0+ZGVhc3NlcnRfaGFyZHJlc2V0KSB7CisJCVdBUk5fT05DRSgxLCAicHJtOiAlczogbm8gbWFwcGluZyBmdW5jdGlvbiBkZWZpbmVkXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBwcm1fbGxfZGF0YS0+ZGVhc3NlcnRfaGFyZHJlc2V0KHNoaWZ0LCBzdF9zaGlmdCwgcGFydCwgcHJtX21vZCwKKwkJCQkJICAgICAgIG9mZnNldCwgc3Rfb2Zmc2V0KTsKK30KKworLyoqCisgKiBvbWFwX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgLSBjaGVjayB0aGUgaGFyZHJlc2V0IHN0YXR1cyBmb3IgYW4gSVAgYmxvY2sKKyAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUKKyAqIEBwYXJ0OiBQUk0gcGFydGl0aW9uCisgKiBAcHJtX21vZDogUFJNIHN1Ym1vZHVsZSBiYXNlIG9yIGluc3RhbmNlIG9mZnNldAorICogQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogQ2hlY2tzIGlmIGEgaGFyZHdhcmUgcmVzZXQgbGluZSBmb3IgYW4gSVAgYmxvY2sgaXMgZW5hYmxlZCBvciBub3QuCisgKi8KK2ludCBvbWFwX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLCB1MTYgb2Zmc2V0KQoreworCWlmICghcHJtX2xsX2RhdGEtPmlzX2hhcmRyZXNldF9hc3NlcnRlZCkgeworCQlXQVJOX09OQ0UoMSwgInBybTogJXM6IG5vIG1hcHBpbmcgZnVuY3Rpb24gZGVmaW5lZFxuIiwKKwkJCSAgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcHJtX2xsX2RhdGEtPmlzX2hhcmRyZXNldF9hc3NlcnRlZChzaGlmdCwgcGFydCwgcHJtX21vZCwgb2Zmc2V0KTsKK30KKworLyoqCisgKiBvbWFwX3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbiAtIGNsZWFyIGxhdGNoZXMgYW5kIHJlY29uZmlndXJlIEkvTyBjaGFpbgorICoKKyAqIENsZWFyIGFueSBwcmV2aW91c2x5LWxhdGNoZWQgSS9PIHdha2V1cCBldmVudHMgYW5kIGVuc3VyZSB0aGF0IHRoZQorICogSS9PIHdha2V1cCBnYXRlcyBhcmUgYWxpZ25lZCB3aXRoIHRoZSBjdXJyZW50IG11eCBzZXR0aW5ncy4KKyAqIENhbGxzIFNvQyBzcGVjaWZpYyBJL08gY2hhaW4gcmVjb25maWd1cmUgZnVuY3Rpb24gaWYgYXZhaWxhYmxlLAorICogb3RoZXJ3aXNlIGRvZXMgbm90aGluZy4KKyAqLwordm9pZCBvbWFwX3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQoreworCWlmICghcHJjbV9pcnFfc2V0dXAgfHwgIXByY21faXJxX3NldHVwLT5yZWNvbmZpZ3VyZV9pb19jaGFpbikKKwkJcmV0dXJuOworCisJcHJjbV9pcnFfc2V0dXAtPnJlY29uZmlndXJlX2lvX2NoYWluKCk7Cit9CisKKy8qKgorICogb21hcF9wcm1fcmVzZXRfc3lzdGVtIC0gdHJpZ2dlciBnbG9iYWwgU1cgcmVzZXQKKyAqCisgKiBUcmlnZ2VycyBTb0Mgc3BlY2lmaWMgZ2xvYmFsIHdhcm0gcmVzZXQgdG8gcmVib290IHRoZSBkZXZpY2UuCisgKi8KK3ZvaWQgb21hcF9wcm1fcmVzZXRfc3lzdGVtKHZvaWQpCit7CisJaWYgKCFwcm1fbGxfZGF0YS0+cmVzZXRfc3lzdGVtKSB7CisJCVdBUk5fT05DRSgxLCAicHJtOiAlczogbm8gbWFwcGluZyBmdW5jdGlvbiBkZWZpbmVkXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlwcm1fbGxfZGF0YS0+cmVzZXRfc3lzdGVtKCk7CisKKwl3aGlsZSAoMSkKKwkJY3B1X3JlbGF4KCk7Cit9CisKKy8qKgogICogcHJtX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgcGVyLVNvQyBsb3ctbGV2ZWwgZGF0YSB3aXRoIHRoZSBQUk0KICAqIEBwbGQ6IGxvdy1sZXZlbCBwZXItU29DIE9NQVAgUFJNIGRhdGEgJiBmdW5jdGlvbiBwb2ludGVycyB0byByZWdpc3RlcgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguYwppbmRleCAyMjVlMDI1Li44YWRmN2IxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5jCkBAIC0xNDgsOCArMTQ4LDEyIEBACiAvKioKICAqIG9tYXA0X3BybWluc3RfZGVhc3NlcnRfaGFyZHJlc2V0IC0gZGVhc3NlcnQgYSBzdWJtb2R1bGUgaGFyZHJlc2V0IGxpbmUgYW5kCiAgKiB3YWl0Ci0gKiBAcnN0Y3RybF9yZWc6IFJNX1JTVENUUkwgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpcyBtb2R1bGUKICAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUgdG8gZGVhc3NlcnQKKyAqIEBzdF9zaGlmdDogc3RhdHVzIGJpdCBvZmZzZXQsIG5vdCB1c2VkIGZvciBPTUFQNCsKKyAqIEBwYXJ0OiBQUk0gcGFydGl0aW9uCisgKiBAaW5zdDogUFJNIGluc3RhbmNlIG9mZnNldAorICogQHJzdGN0cmxfb2ZmczogcmVzZXQgcmVnaXN0ZXIgb2Zmc2V0CisgKiBAc3Rfb2ZmczogcmVzZXQgc3RhdHVzIHJlZ2lzdGVyIG9mZnNldCwgbm90IHVzZWQgZm9yIE9NQVA0KwogICoKICAqIFNvbWUgSVBzIGxpa2UgZHNwLCBpcHUgb3IgaXZhIGNvbnRhaW4gcHJvY2Vzc29ycyB0aGF0IHJlcXVpcmUgYW4gSFcKICAqIHJlc2V0IGxpbmUgdG8gYmUgYXNzZXJ0ZWQgLyBkZWFzc2VydGVkIGluIG9yZGVyIHRvIGZ1bGx5IGVuYWJsZSB0aGUKQEAgLTE2MCw4ICsxNjQsOCBAQAogICogLUVJTlZBTCB1cG9uIGFuIGFyZ3VtZW50IGVycm9yLCAtRUVYSVNUIGlmIHRoZSBzdWJtb2R1bGUgd2FzIGFscmVhZHkgb3V0CiAgKiBvZiByZXNldCwgb3IgLUVCVVNZIGlmIHRoZSBzdWJtb2R1bGUgZGlkIG5vdCBleGl0IHJlc2V0IHByb21wdGx5LgogICovCi1pbnQgb21hcDRfcHJtaW5zdF9kZWFzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBpbnN0LAotCQkJCSAgICAgdTE2IHJzdGN0cmxfb2ZmcykKK2ludCBvbWFwNF9wcm1pbnN0X2RlYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggc3Rfc2hpZnQsIHU4IHBhcnQsIHMxNiBpbnN0LAorCQkJCSAgICAgdTE2IHJzdGN0cmxfb2ZmcywgdTE2IHN0X29mZnMpCiB7CiAJaW50IGM7CiAJdTMyIG1hc2sgPSAxIDw8IHNoaWZ0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5oCmluZGV4IDU4M2FhMzcuLmZiMWM5ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmgKQEAgLTMwLDggKzMwLDkgQEAKIAkJCQkJICAgICAgIHUxNiByc3RjdHJsX29mZnMpOwogZXh0ZXJuIGludCBvbWFwNF9wcm1pbnN0X2Fzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBpbnN0LAogCQkJCQkgIHUxNiByc3RjdHJsX29mZnMpOwotZXh0ZXJuIGludCBvbWFwNF9wcm1pbnN0X2RlYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggcGFydCwgczE2IGluc3QsCi0JCQkJCSAgICB1MTYgcnN0Y3RybF9vZmZzKTsKK2ludCBvbWFwNF9wcm1pbnN0X2RlYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggc3Rfc2hpZnQsIHU4IHBhcnQsCisJCQkJICAgICBzMTYgaW5zdCwgdTE2IHJzdGN0cmxfb2ZmcywKKwkJCQkgICAgIHUxNiByc3RzdF9vZmZzKTsKIAogZXh0ZXJuIHZvaWQgb21hcF9wcm1fYmFzZV9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwppbmRleCBhMzg4ZjhjLi41N2RlZTBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKQEAgLTI2Myw5ICsyNjMsNiBAQAogCW9tYXBfdXAuZG1hX3J4X3RpbWVvdXQgPSBpbmZvLT5kbWFfcnhfdGltZW91dDsKIAlvbWFwX3VwLmRtYV9yeF9wb2xsX3JhdGUgPSBpbmZvLT5kbWFfcnhfcG9sbF9yYXRlOwogCW9tYXBfdXAuYXV0b3N1c3BlbmRfdGltZW91dCA9IGluZm8tPmF1dG9zdXNwZW5kX3RpbWVvdXQ7Ci0Jb21hcF91cC5EVFJfZ3BpbyA9IGluZm8tPkRUUl9ncGlvOwotCW9tYXBfdXAuRFRSX2ludmVydGVkID0gaW5mby0+RFRSX2ludmVydGVkOwotCW9tYXBfdXAuRFRSX3ByZXNlbnQgPSBpbmZvLT5EVFJfcHJlc2VudDsKIAogCXBkYXRhID0gJm9tYXBfdXA7CiAJcGRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb21hcF91YXJ0X3BvcnRfaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwppbmRleCBlNjY5MGE0Li44M2VmZTkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKQEAgLTQsNiArNCwxNyBAQAogCiBjb21tZW50ICJJbnRlbC9NYXJ2ZWxsIERldiBQbGF0Zm9ybXMgKHNvcnRlZCBieSBoYXJkd2FyZSByZWxlYXNlIHRpbWUpIgogCitjb25maWcgTUFDSF9QWEEyN1hfRFQKKwlib29sICJTdXBwb3J0IFBYQTI3eCBwbGF0Zm9ybXMgZnJvbSBkZXZpY2UgdHJlZSIKKwlzZWxlY3QgQ1BVX1BYQTI3eAorCXNlbGVjdCBQT1dFUl9TVVBQTFkKKwlzZWxlY3QgUFhBMjd4CisJc2VsZWN0IFVTRV9PRgorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTWFydmVsbCBQWEEyN3ggYmFzZWQgcGxhdGZvcm1zIHVzaW5nCisJICB0aGUgZGV2aWNlIHRyZWUuIE5lZWRuJ3Qgc2VsZWN0IGFueSBvdGhlciBtYWNoaW5lIHdoaWxlCisJICBNQUNIX1BYQTI3WF9EVCBpcyBlbmFibGVkLgorCiBjb25maWcgTUFDSF9QWEEzWFhfRFQKIAlib29sICJTdXBwb3J0IFBYQTN4eCBwbGF0Zm9ybXMgZnJvbSBkZXZpY2UgdHJlZSIKIAlzZWxlY3QgQ1BVX1BYQTMwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZQppbmRleCAyZmUxODI0Li5lYjBiZjc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQAogCiAjIERldmljZSBUcmVlIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX1BYQTNYWF9EVCkJKz0gcHhhLWR0Lm8KK29iai0kKENPTkZJR19NQUNIX1BYQTI3WF9EVCkJKz0gcHhhLWR0Lm8KIAogIyBJbnRlbC9NYXJ2ZWxsIERldiBQbGF0Zm9ybXMKIG9iai0kKENPTkZJR19BUkNIX0xVQkJPQ0spCSs9IGx1YmJvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCmluZGV4IDY5MTVhOWYuLjUxNTMxZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCiAJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU8xMV9OQU5EX0NTLCAiTkFORCBDUyIpOwogCWlmIChlcnIpIHsKLQkJcHJfd2FybmluZygiRU0tWDI3MDogZmFpbGVkIHRvIHJlcXVlc3QgTkFORCBDUyBncGlvXG4iKTsKKwkJcHJfd2FybigiRU0tWDI3MDogZmFpbGVkIHRvIHJlcXVlc3QgTkFORCBDUyBncGlvXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzg2LDcgKzM4Niw3IEBACiAKIAllcnIgPSBncGlvX3JlcXVlc3QobmFuZF9yYiwgIk5BTkQgUi9CIik7CiAJaWYgKGVycikgewotCQlwcl93YXJuaW5nKCJFTS1YMjcwOiBmYWlsZWQgdG8gcmVxdWVzdCBOQU5EIFIvQiBncGlvXG4iKTsKKwkJcHJfd2FybigiRU0tWDI3MDogZmFpbGVkIHRvIHJlcXVlc3QgTkFORCBSL0IgZ3Bpb1xuIik7CiAJCWdwaW9fZnJlZShHUElPMTFfTkFORF9DUyk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKaW5kZXggODk2Mzk4NC4uN2E5ZmExYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaApAQCAtMTMsMTEgKzEzLDExIEBACiAKIHN0cnVjdCBpcnFfZGF0YTsKIAotZXh0ZXJuIHZvaWQgcHhhX3RpbWVyX2luaXQodm9pZCk7Ci0KLWV4dGVybiB2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpOwotCiBleHRlcm4gdW5zaWduZWQgaW50IGdldF9jbGtfZnJlcXVlbmN5X2toeihpbnQgaW5mbyk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhX2R0X2lycV9pbml0KGludCAoKmZuKShzdHJ1Y3QgaXJxX2RhdGEgKiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQpKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgcHhhX3RpbWVyX2luaXQodm9pZCk7CiAKICNkZWZpbmUgU0VUX0JBTksoX19ucixfX3N0YXJ0LF9fc2l6ZSkgXAogCW1pLT5iYW5rW19fbnJdLnN0YXJ0ID0gKF9fc3RhcnQpLCBcCkBAIC0yNSwyOSArMjUsMjEgQEAKIAogI2RlZmluZSBBUlJBWV9BTkRfU0laRSh4KQkoeCksIEFSUkFZX1NJWkUoeCkKIAotI2lmZGVmIENPTkZJR19QWEEyNXgKLWV4dGVybiB1bnNpZ25lZCBweGEyNXhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCk7Ci0jZWxzZQotI2RlZmluZSBweGEyNXhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KHgpCQkoMCkKLSNlbmRpZgorI2RlZmluZSBweGEyNXhfaGFuZGxlX2lycSBpY2lwX2hhbmRsZV9pcnEKK2V4dGVybiB2b2lkIF9faW5pdCBweGEyNXhfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhMjV4X21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGEyNnhfaW5pdF9pcnEodm9pZCk7CiAKLSNpZmRlZiBDT05GSUdfUFhBMjd4Ci1leHRlcm4gdW5zaWduZWQgcHhhMjd4X2dldF9jbGtfZnJlcXVlbmN5X2toeihpbnQpOwotI2Vsc2UKLSNkZWZpbmUgcHhhMjd4X2dldF9jbGtfZnJlcXVlbmN5X2toeih4KQkJKDApCi0jZW5kaWYKKyNkZWZpbmUgcHhhMjd4X2hhbmRsZV9pcnEgaWNocF9oYW5kbGVfaXJxCitleHRlcm4gdm9pZCBfX2luaXQgcHhhMjd4X2R0X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkCXB4YTI3eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50KTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGEyN3hfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhMjd4X21hcF9pbyh2b2lkKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBMjd4KQotZXh0ZXJuIHZvaWQgcHhhMnh4X2NsZWFyX3Jlc2V0X3N0YXR1cyh1bnNpZ25lZCBpbnQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBweGEyeHhfY2xlYXJfcmVzZXRfc3RhdHVzKHVuc2lnbmVkIGludCBtYXNrKSB7fQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUFhBM3h4Ci1leHRlcm4gdW5zaWduZWQgcHhhM3h4X2dldF9jbGtfZnJlcXVlbmN5X2toeihpbnQpOwotI2Vsc2UKLSNkZWZpbmUgcHhhM3h4X2dldF9jbGtfZnJlcXVlbmN5X2toeih4KQkJKDApCi0jZW5kaWYKKyNkZWZpbmUgcHhhM3h4X2hhbmRsZV9pcnEgaWNocF9oYW5kbGVfaXJxCitleHRlcm4gdm9pZCBfX2luaXQgcHhhM3h4X2R0X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTN4eF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGEzeHhfbWFwX2lvKHZvaWQpOwogCiBleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHB4YV9pcnFfc3lzY29yZV9vcHM7CiBleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHB4YTJ4eF9tZnBfc3lzY29yZV9vcHM7CkBAIC01OSwzICs1MSwzMCBAQAogdm9pZCBfX2luaXQgcHhhX3NldF9od3VhcnRfaW5mbyh2b2lkICppbmZvKTsKIAogdm9pZCBweGFfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlLCBjb25zdCBjaGFyICopOworCisjaWYgZGVmaW5lZChDT05GSUdfUFhBMjV4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEyN3gpCitleHRlcm4gdm9pZCBweGEyeHhfY2xlYXJfcmVzZXRfc3RhdHVzKHVuc2lnbmVkIGludCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHB4YTJ4eF9jbGVhcl9yZXNldF9zdGF0dXModW5zaWduZWQgaW50IG1hc2spIHt9CisjZW5kaWYKKworLyoKKyAqIE9uY2UgZnVsbHkgY29udmVydGVkIHRvIHRoZSBjbG9jayBmcmFtZXdvcmssIGFsbCB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlCisgKiByZW1vdmVkLCBhbmQgcmVwbGFjZWQgd2l0aCBhIGNsa19nZXQoTlVMTCwgImNvcmUiKS4KKyAqLworI2lmZGVmIENPTkZJR19QWEEyNXgKK2V4dGVybiB1bnNpZ25lZCBweGEyNXhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCk7CisjZWxzZQorI2RlZmluZSBweGEyNXhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KHgpCQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BYQTI3eAorI2Vsc2UKKyNkZWZpbmUgcHhhMjd4X2dldF9jbGtfZnJlcXVlbmN5X2toeih4KQkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QWEEzeHgKK2V4dGVybiB1bnNpZ25lZAlweGEzeHhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCk7CisjZWxzZQorI2RlZmluZSBweGEzeHhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KHgpCQkoMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCmluZGV4IDAwYjkyZGEuLmY2Yzc2YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKQEAgLTE0MCw4ICsxNDAsNyBAQAogCWludCB0aW1lb3V0ID0gNTAwOwogCiAJaWYgKCEoT1NDQyAmIE9TQ0NfT09LKSkKLQkJcHJfd2FybmluZygiMzJrSHogY2xvY2sgd2FzIG5vdCBvbi4gQm9vdGxvYWRlciBtYXkgbmVlZCB0byAiCi0JCQkJImJlIHVwZGF0ZWRcbiIpOworCQlwcl93YXJuKCIzMmtIeiBjbG9jayB3YXMgbm90IG9uLiBCb290bG9hZGVyIG1heSBuZWVkIHRvIGJlIHVwZGF0ZWRcbiIpOwogCWVsc2UKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYWRkci1tYXAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9hZGRyLW1hcC5oCmluZGV4IGJiZjlkZjMuLmQyOGZlMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9hZGRyLW1hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9hZGRyLW1hcC5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2RlZmluZSBETUVNQ19TSVpFCQkweDAwMTAwMDAwCiAKIC8qCisgKiBSZXNlcnZlZCBzcGFjZSBmb3IgbG93IGxldmVsIGRlYnVnIHZpcnR1YWwgYWRkcmVzc2VzIHdpdGhpbgorICogMHhmNjIwMDAwMC4uMHhmNjIwMTAwMAorICovCisKKy8qCiAgKiBJbnRlcm5hbCBNZW1vcnkgQ29udHJvbGxlciAoUFhBMjd4IGFuZCBsYXRlcikKICAqLwogI2RlZmluZSBJTUVNQ19QSFlTCQkweDU4MDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjV4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjV4LmgKaW5kZXggM2FjMGJhYS4uNWEzNDE3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI1eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyNXguaApAQCAtNiwxMiArNiw0IEBACiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAKLWV4dGVybiB2b2lkIF9faW5pdCBweGEyNXhfbWFwX2lvKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI1eF9pbml0X2lycSh2b2lkKTsKLSNpZmRlZiBDT05GSUdfQ1BVX1BYQTI2eAotZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI2eF9pbml0X2lycSh2b2lkKTsKLSNlbmRpZgotCi0jZGVmaW5lIHB4YTI1eF9oYW5kbGVfaXJxCWljaXBfaGFuZGxlX2lycQotCiAjZW5kaWYgLyogX19NQUNIX1BYQTI1eF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4LmgKaW5kZXggN2NmZjY0MC4uNTk5YjkyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyN3guaApAQCAtMTksMTEgKzE5LDcgQEAKICNkZWZpbmUgQVJCX0NPUkVfUEFSSwkJKDE8PDI0KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBjb3JlIHdoZW4gaWRsZSAqLwogI2RlZmluZSBBUkJfTE9DS19GTEFHCQkoMTw8MjMpCSAgIC8qIE9ubHkgTG9ja2luZyBtYXN0ZXJzIGdhaW4gYWNjZXNzIHRvIHRoZSBidXMgKi8KIAotZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI3eF9tYXBfaW8odm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgcHhhMjd4X2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIGludCBfX2luaXQgcHhhMjd4X3NldF9wd3Jtb2RlKHVuc2lnbmVkIGludCBtb2RlKTsKIGV4dGVybiB2b2lkIHB4YTI3eF9jcHVfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIAotI2RlZmluZSBweGEyN3hfaGFuZGxlX2lycQlpY2hwX2hhbmRsZV9pcnEKLQogI2VuZGlmIC8qIF9fTUFDSF9QWEEyN3hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC5oCmluZGV4IDZkZDdmYTEuLmI0MTQzZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHguaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LmgKQEAgLTUsOSArNSw0IEBACiAjaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCi1leHRlcm4gdm9pZCBfX2luaXQgcHhhM3h4X21hcF9pbyh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBweGEzeHhfaW5pdF9pcnEodm9pZCk7Ci0KLSNkZWZpbmUgcHhhM3h4X2hhbmRsZV9pcnEJaWNocF9oYW5kbGVfaXJxCi0KICNlbmRpZiAvKiBfX01BQ0hfUFhBM1hYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYwppbmRleCBlZjA0MjZhLi42NjZiNzg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCkBAIC05Myw4ICs5Myw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIHdhcm5pbmcgYW5kIGZhbGwgdGhyb3VnaCwgdHJlYXQgYXMgTUZQX0xQTV9ERUZBVUxUICovCi0JCXByX3dhcm5pbmcoIiVzOiBHUElPJWQ6IHVuc3VwcG9ydGVkIGxvdyBwb3dlciBtb2RlXG4iLAotCQkJCV9fZnVuY19fLCBncGlvKTsKKwkJcHJfd2FybigiJXM6IEdQSU8lZDogdW5zdXBwb3J0ZWQgbG93IHBvd2VyIG1vZGVcbiIsCisJCQlfX2Z1bmNfXywgZ3Bpbyk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTA3LDE0ICsxMDcsMTIgQEAKIAkgKiBjb25maWd1cmF0aW9ucyBvZiB0aG9zZSBwaW5zIG5vdCBhYmxlIHRvIHdha2V1cAogCSAqLwogCWlmICgoYyAmIE1GUF9MUE1fQ0FOX1dBS0VVUCkgJiYgIWdwaW9fZGVzY1tncGlvXS5jYW5fd2FrZXVwKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBHUElPJWQgdW5hYmxlIHRvIHdha2V1cFxuIiwKLQkJCQlfX2Z1bmNfXywgZ3Bpbyk7CisJCXByX3dhcm4oIiVzOiBHUElPJWQgdW5hYmxlIHRvIHdha2V1cFxuIiwgX19mdW5jX18sIGdwaW8pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoKGMgJiBNRlBfTFBNX0NBTl9XQUtFVVApICYmIGlzX291dCkgewotCQlwcl93YXJuaW5nKCIlczogb3V0cHV0IEdQSU8lZCB1bmFibGUgdG8gd2FrZXVwXG4iLAotCQkJCV9fZnVuY19fLCBncGlvKTsKKwkJcHJfd2FybigiJXM6IG91dHB1dCBHUElPJWQgdW5hYmxlIHRvIHdha2V1cFxuIiwgX19mdW5jX18sIGdwaW8pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTEyNiw3ICsxMjQsNyBAQAogCWludCBncGlvID0gbWZwX3RvX2dwaW8obWZwKTsKIAogCWlmICgobWZwID4gTUZQX1BJTl9HUElPMTI3KSB8fCAhZ3Bpb19kZXNjW2dwaW9dLnZhbGlkKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBHUElPJWQgaXMgaW52YWxpZCBwaW5cbiIsIF9fZnVuY19fLCBncGlvKTsKKwkJcHJfd2FybigiJXM6IEdQSU8lZCBpcyBpbnZhbGlkIHBpblxuIiwgX19mdW5jX18sIGdwaW8pOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IDEzMTk5MTYuLjI5MDE5YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC00NDYsNyArNDQ2LDcgQEAKIAogCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoInBvb2RsZTogVW5hYmxlIHRvIHJlZ2lzdGVyIExvQ29NbyBkZXZpY2VcbiIpOworCQlwcl93YXJuKCJwb29kbGU6IFVuYWJsZSB0byByZWdpc3RlciBMb0NvTW8gZGV2aWNlXG4iKTsKIAogCXB4YV9zZXRfZmJfaW5mbygmcG9vZGxlX2xvY29tb19kZXZpY2UuZGV2LCAmcG9vZGxlX2ZiX2luZm8pOwogCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YS1kdC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhLWR0LmMKaW5kZXggZjZhMmM0Yi4uN2UwZTViZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhLWR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhLWR0LmMKQEAgLTE1LDEzICsxNSwxMCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEzeHguaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogI2lmZGVmIENPTkZJR19QWEEzeHgKLWV4dGVybiB2b2lkIF9faW5pdCBweGEzeHhfZHRfaW5pdF9pcnEodm9pZCk7Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2X2F1eGRhdGEgcHhhM3h4X2F1eGRhdGFfbG9va3VwW10gX19pbml0Y29uc3QgPSB7CiAJT0ZfREVWX0FVWERBVEEoIm1ydmwscHhhLXVhcnQiLAkJMHg0MDEwMDAwMCwgInB4YTJ4eC11YXJ0LjAiLCBOVUxMKSwKIAlPRl9ERVZfQVVYREFUQSgibXJ2bCxweGEtdWFydCIsCQkweDQwMjAwMDAwLCAicHhhMnh4LXVhcnQuMSIsIE5VTEwpLApAQCAtNjEsMyArNTgsMTggQEAKIAkuZHRfY29tcGF0CT0gcHhhM3h4X2R0X2JvYXJkX2NvbXBhdCwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19QWEEyN3gKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHhhMjd4X2R0X2JvYXJkX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0geworCSJtYXJ2ZWxsLHB4YTI3MCIsCisJTlVMTCwKK307CisKK0RUX01BQ0hJTkVfU1RBUlQoUFhBMjdYX0RULCAiTWFydmVsbCBQWEEyeHggKERldmljZSBUcmVlIFN1cHBvcnQpIikKKwkubWFwX2lvCQk9IHB4YTI3eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhMjd4X2R0X2luaXRfaXJxLAorCS5oYW5kbGVfaXJxCT0gcHhhMjd4X2hhbmRsZV9pcnEsCisJLnJlc3RhcnQJPSBweGFfcmVzdGFydCwKKwkuZHRfY29tcGF0CT0gcHhhMjd4X2R0X2JvYXJkX2NvbXBhdCwKK01BQ0hJTkVfRU5ECisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKaW5kZXggYjA0MGQ3ZC4uYWY0MjNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKQEAgLTM5OCw2ICszOTgsMTIgQEAKIAlweGFfaW5pdF9pcnEoMzQsIHB4YTI3eF9zZXRfd2FrZSk7CiB9CiAKK3ZvaWQgX19pbml0IHB4YTI3eF9kdF9pbml0X2lycSh2b2lkKQoreworCWlmIChJU19FTkFCTEVEKENPTkZJR19PRikpCisJCXB4YV9kdF9pcnFfaW5pdChweGEyN3hfc2V0X3dha2UpOworfQorCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHB4YTI3eF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CS8qIE1lbSBDdGwgKi8KIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTTUVNQ19WSVJULApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LXVscGkuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC11bHBpLmMKaW5kZXggZTMyOWNjZS4uNjE0MDAzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LXVscGkuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHgtdWxwaS5jCkBAIC03NCw3ICs3NCw3IEBACiAJCWNwdV9yZWxheCgpOwogCX0KIAotCXByX3dhcm5pbmcoIiVzOiBVTFBJIGFjY2VzcyB0aW1lZCBvdXQhXG4iLCBfX2Z1bmNfXyk7CisJcHJfd2FybigiJXM6IFVMUEkgYWNjZXNzIHRpbWVkIG91dCFcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAtRVRJTUVET1VUOwogfQpAQCAtODQsNyArODQsNyBAQAogCWludCBlcnI7CiAKIAlpZiAocHhhMzEwX3VscGlfZ2V0X3BoeW1vZGUoKSAhPSBTWU5DSCkgewotCQlwcl93YXJuaW5nKCIlczogUEhZIGlzIG5vdCBpbiBTWU5DSCBtb2RlIVxuIiwgX19mdW5jX18pOworCQlwcl93YXJuKCIlczogUEhZIGlzIG5vdCBpbiBTWU5DSCBtb2RlIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMTAxLDcgKzEwMSw3IEBACiBzdGF0aWMgaW50IHB4YTMxMF91bHBpX3dyaXRlKHN0cnVjdCB1c2JfcGh5ICpvdGcsIHUzMiB2YWwsIHUzMiByZWcpCiB7CiAJaWYgKHB4YTMxMF91bHBpX2dldF9waHltb2RlKCkgIT0gU1lOQ0gpIHsKLQkJcHJfd2FybmluZygiJXM6IFBIWSBpcyBub3QgaW4gU1lOQ0ggbW9kZSFcbiIsIF9fZnVuY19fKTsKKwkJcHJfd2FybigiJXM6IFBIWSBpcyBub3QgaW4gU1lOQ0ggbW9kZSFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCmluZGV4IDgzODZkYzMuLmE3NjJiMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcmF1bWZlbGQuYwpAQCAtNTIxLDcgKzUyMSw3IEBACiAJCQkJIlcxIGV4dGVybmFsIHB1bGx1cCBlbmFibGUiKTsKIAogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1cxX1BVTExVUF9FTkFCTEVcbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1cxX1BVTExVUF9FTkFCTEVcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fVzFfUFVMTFVQX0VOQUJMRSwgMCk7CiAKQEAgLTYwMCw3ICs2MDAsNyBAQAogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fVEZUX1ZBX0VOLCAiZGlzcGxheSBWQSBlbmFibGUiKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19URlRfVkFfRU5cbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1RGVF9WQV9FTlxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19URlRfVkFfRU4sIDEpOwogCkBAIC02MDgsNyArNjA4LDcgQEAKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0RJU1BMQVlfRU5BQkxFLCAiZGlzcGxheSBlbmFibGUiKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19ESVNQTEFZX0VOQUJMRVxuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fRElTUExBWV9FTkFCTEVcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRElTUExBWV9FTkFCTEUsIDEpOwogCkBAIC04MTQsMTcgKzgxNCwxNyBAQAogCS8qIFNldCBQRU4yIGhpZ2ggdG8gZW5hYmxlIG1heGltdW0gY2hhcmdlIGN1cnJlbnQgKi8KIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19DSFJHX1BFTjIsICJDSFJHX1BFTjIiKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DSFJHX1BFTjJcbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX0NIUkdfUEVOMlxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19DSFJHX1BFTjIsIDEpOwogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fQ0hBUkdFX0RDX09LLCAiQ0FCTEVfRENfT0siKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DSEFSR0VfRENfT0tcbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX0NIQVJHRV9EQ19PS1xuIik7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19DSEFSR0VfVVNCX1NVU1AsICJDSEFSR0VfVVNCX1NVU1AiKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DSEFSR0VfVVNCX1NVU1BcbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX0NIQVJHRV9VU0JfU1VTUFxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19DSEFSR0VfVVNCX1NVU1AsIDApOwogCkBAIC05NzYsMTkgKzk3NiwxOSBAQAogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fQ09ERUNfUkVTRVQsICJjczQyNzAgcmVzZXQiKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DT0RFQ19SRVNFVFxuIik7CisJCXByX3dhcm4oInVuYWJsZSB0byByZXF1ZXN0IEdQSU9fQ09ERUNfUkVTRVRcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fQ09ERUNfUkVTRVQsIDEpOwogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fU1BESUZfUkVTRVQsICJhazQxMDQgcy9wZGlmIHJlc2V0Iik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoInVuYWJsZSB0byByZXF1ZXN0IEdQSU9fU1BESUZfUkVTRVRcbiIpOworCQlwcl93YXJuKCJ1bmFibGUgdG8gcmVxdWVzdCBHUElPX1NQRElGX1JFU0VUXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1NQRElGX1JFU0VULCAxKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX01DTEtfUkVTRVQsICJNQ0xLIHJlc2V0Iik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoInVuYWJsZSB0byByZXF1ZXN0IEdQSU9fTUNMS19SRVNFVFxuIik7CisJCXByX3dhcm4oInVuYWJsZSB0byByZXF1ZXN0IEdQSU9fTUNMS19SRVNFVFxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19NQ0xLX1JFU0VULCAxKTsKIApAQCAtMTAxOSwyMCArMTAxOSwyMCBAQAogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fVzJXX1JFU0VULCAiV2kyV2kgcmVzZXQiKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19XMldfUkVTRVRcbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1cyV19SRVNFVFxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19XMldfUkVTRVQsIDApOwogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fVzJXX1BETiwgIldpMldpIHBvd2VydXAiKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19XMldfUEROXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19XMldfUEROXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1cyV19QRE4sIDApOwogCiAJLyogdGhpcyBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggb2ZmIHRoZSBkZXZpY2UgKi8KIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19TSFVURE9XTl9TVVBQTFksICJzdXBwbHkgc2h1dGRvd24iKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19TSFVURE9XTl9TVVBQTFlcbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1NIVVRET1dOX1NVUFBMWVxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19TSFVURE9XTl9TVVBQTFksIDApOwogCkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fU0hVVERPV05fQkFUVCwgImJhdHRlcnkgc2h1dGRvd24iKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19TSFVURE9XTl9CQVRUXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19TSFVURE9XTl9CQVRUXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1NIVVRET1dOX0JBVFQsIDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKaW5kZXggYzE1OGE2ZS4uNzc4MGQxZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlci9ncGlvLWNoYXJnZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CkBAIC0zNjEsNDQgKzM2MSwxNyBAQAogLyoKICAqIFRvc2EgQUMgSU4KICAqLwotc3RhdGljIGludCB0b3NhX3Bvd2VyX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX0FDX0lOLCAiYWMgaW4iKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9ncGlvX3JlcTsKLQotCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KFRPU0FfR1BJT19BQ19JTik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfZ3Bpb19pbjsKLQotCXJldHVybiAwOwotCi1lcnJfZ3Bpb19pbjoKLQlncGlvX2ZyZWUoVE9TQV9HUElPX0FDX0lOKTsKLWVycl9ncGlvX3JlcToKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB0b3NhX3Bvd2VyX2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShUT1NBX0dQSU9fQUNfSU4pOwotfQotCi1zdGF0aWMgaW50IHRvc2FfcG93ZXJfYWNfb25saW5lKHZvaWQpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKFRPU0FfR1BJT19BQ19JTikgPT0gMDsKLX0KLQogc3RhdGljIGNoYXIgKnRvc2FfYWNfc3VwcGxpZWRfdG9bXSA9IHsKIAkibWFpbi1iYXR0ZXJ5IiwKIAkiYmFja3VwLWJhdHRlcnkiLAogCSJqYWNrZXQtYmF0dGVyeSIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBkYV9wb3dlcl9wZGF0YSB0b3NhX3Bvd2VyX2RhdGEgPSB7Ci0JLmluaXQJCQk9IHRvc2FfcG93ZXJfaW5pdCwKLQkuaXNfYWNfb25saW5lCQk9IHRvc2FfcG93ZXJfYWNfb25saW5lLAotCS5leGl0CQkJPSB0b3NhX3Bvd2VyX2V4aXQsCitzdGF0aWMgc3RydWN0IGdwaW9fY2hhcmdlcl9wbGF0Zm9ybV9kYXRhIHRvc2FfcG93ZXJfZGF0YSA9IHsKKwkubmFtZQkJCT0gImNoYXJnZXIiLAorCS50eXBlCQkJPSBQT1dFUl9TVVBQTFlfVFlQRV9NQUlOUywKKwkuZ3BpbwkJCT0gVE9TQV9HUElPX0FDX0lOLAorCS5ncGlvX2FjdGl2ZV9sb3cJPSAxLAogCS5zdXBwbGllZF90bwkJPSB0b3NhX2FjX3N1cHBsaWVkX3RvLAogCS5udW1fc3VwcGxpY2FudHMJPSBBUlJBWV9TSVpFKHRvc2FfYWNfc3VwcGxpZWRfdG8pLAogfTsKQEAgLTQxNSw3ICszODgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG9zYV9wb3dlcl9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJwZGEtcG93ZXIiLAorCS5uYW1lCQkJPSAiZ3Bpby1jaGFyZ2VyIiwKIAkuaWQJCQk9IC0xLAogCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZ0b3NhX3Bvd2VyX2RhdGEsCiAJLnJlc291cmNlCQk9IHRvc2FfcG93ZXJfcmVzb3VyY2UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKaW5kZXggOWRiMjAyOS4uNTY1OTI1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwpAQCAtMSw2ICsxLDE5IEBACiBtZW51ICJSZWFsVmlldyBwbGF0Zm9ybSB0eXBlIgogCWRlcGVuZHMgb24gQVJDSF9SRUFMVklFVwogCitjb25maWcgUkVBTFZJRVdfRFQKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIERldmljZSBUcmVlIGJhc2VkIGJvb3QiCisJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgTUZEX1NZU0NPTgorCXNlbGVjdCBQT1dFUl9SRVNFVAorCXNlbGVjdCBQT1dFUl9SRVNFVF9WRVJTQVRJTEUKKwlzZWxlY3QgUE9XRVJfU1VQUExZCisJc2VsZWN0IFNPQ19SRUFMVklFVworCXNlbGVjdCBVU0VfT0YKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIGJvb3RpbmcgdGhlIEFSTShSKSBSZWFsVmlldyhSKSBldmFsdWF0aW9uCisJICBib2FyZHMgdXNpbmcgYSBkZXZpY2UgdHJlZSBtYWNoaW5lIGRlc2NyaXB0aW9uLgorCiBjb25maWcgTUFDSF9SRUFMVklFV19FQgogCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcoUikgRW11bGF0aW9uIEJhc2Vib2FyZCIKIAlzZWxlY3QgQVJNX0dJQwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUKaW5kZXggNTQxZmE0Yy4uZTA3ZmRmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQAogIwogCiBvYmoteQkJCQkJOj0gY29yZS5vCitvYmotJChDT05GSUdfUkVBTFZJRVdfRFQpCQkrPSByZWFsdmlldy1kdC5vCiBvYmotJChDT05GSUdfTUFDSF9SRUFMVklFV19FQikJCSs9IHJlYWx2aWV3X2ViLm8KIG9iai0kKENPTkZJR19NQUNIX1JFQUxWSUVXX1BCMTFNUCkJKz0gcmVhbHZpZXdfcGIxMW1wLm8KIG9iai0kKENPTkZJR19NQUNIX1JFQUxWSUVXX1BCMTE3NikJKz0gcmVhbHZpZXdfcGIxMTc2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXctZHQuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXctZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzI4Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlldy1kdC5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTGluYXJvIEx0ZC4KKyAqCisgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgorI2luY2x1ZGUgImNvcmUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnJlYWx2aWV3X2R0X3BsYXRmb3JtX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0geworCSJhcm0scmVhbHZpZXctZWIiLAorCSJhcm0scmVhbHZpZXctcGIxMTc2IiwKKwkiYXJtLHJlYWx2aWV3LXBiMTFtcCIsCisJImFybSxyZWFsdmlldy1wYmE4IiwKKwkiYXJtLHJlYWx2aWV3LXBieCIsCisJTlVMTCwKK307CisKK0RUX01BQ0hJTkVfU1RBUlQoUkVBTFZJRVdfRFQsICJBUk0gUmVhbFZpZXcgTWFjaGluZSAoRGV2aWNlIFRyZWUgU3VwcG9ydCkiKQorI2lmZGVmIENPTkZJR19aT05FX0RNQQorCS5kbWFfem9uZV9zaXplCT0gU1pfMjU2TSwKKyNlbmRpZgorCS5kdF9jb21wYXQJPSByZWFsdmlld19kdF9wbGF0Zm9ybV9jb21wYXQsCisJLmwyY19hdXhfdmFsID0gMHgwLAorCS5sMmNfYXV4X21hc2sgPSB+MHgwLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvaGVhZHNtcC5TIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9oZWFkc21wLlMKaW5kZXggNzMyMDZlMy4uNDZjMjJkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9oZWFkc21wLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9oZWFkc21wLlMKQEAgLTE2LDcgKzE2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiBFTlRSWShyb2NrY2hpcF9zZWNvbmRhcnlfc3RhcnR1cCkKLQlibAl2N19pbnZhbGlkYXRlX2wxCisJbXJjCXAxNSwgMCwgcjAsIGMwLCBjMCwgMAlAIHJlYWQgbWFpbiBJRCByZWdpc3RlcgorCWxkcglyMSwgPTB4MDAwMDBjMDkJCUAgQ29ydGV4LUE5IHByaW1hcnkgcGFydCBudW1iZXIKKwl0ZXEJcjAsIHIxCisJYmVxCXY3X2ludmFsaWRhdGVfbDEKIAliCXNlY29uZGFyeV9zdGFydHVwCiBFTkRQUk9DKHJvY2tjaGlwX3NlY29uZGFyeV9zdGFydHVwKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcGxhdHNtcC5jCmluZGV4IDE4OTY4NGYuLmYyNmZjZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcGxhdHNtcC5jCkBAIC0xOSw3ICsxOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgogCisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jcDE1Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KQEAgLTM3LDIzICs0MSw3OCBAQAogCiAjZGVmaW5lIFBNVV9QV1JETl9TQ1UJCTQKIAotc3RhdGljIHZvaWQgX19pb21lbSAqcG11X2Jhc2VfYWRkcjsKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwICpwbXU7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwbXVfcG93ZXJfZG9tYWluX2lzX29uKGludCBwZCkKK3N0YXRpYyBpbnQgcG11X3Bvd2VyX2RvbWFpbl9pc19vbihpbnQgcGQpCiB7Ci0JcmV0dXJuICEocmVhZGxfcmVsYXhlZChwbXVfYmFzZV9hZGRyICsgUE1VX1BXUkROX1NUKSAmIEJJVChwZCkpOworCXUzMiB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF9yZWFkKHBtdSwgUE1VX1BXUkROX1NULCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAhKHZhbCAmIEJJVChwZCkpOwogfQogCi1zdGF0aWMgdm9pZCBwbXVfc2V0X3Bvd2VyX2RvbWFpbihpbnQgcGQsIGJvb2wgb24pCitzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcm9ja2NoaXBfZ2V0X2NvcmVfcmVzZXQoaW50IGNwdSkKIHsKLQl1MzIgdmFsID0gcmVhZGxfcmVsYXhlZChwbXVfYmFzZV9hZGRyICsgUE1VX1BXUkROX0NPTik7Ci0JaWYgKG9uKQotCQl2YWwgJj0gfkJJVChwZCk7Ci0JZWxzZQotCQl2YWwgfD0gIEJJVChwZCk7Ci0Jd3JpdGVsKHZhbCwgcG11X2Jhc2VfYWRkciArIFBNVV9QV1JETl9DT04pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGdldF9jcHVfZGV2aWNlKGNwdSk7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAotCXdoaWxlIChwbXVfcG93ZXJfZG9tYWluX2lzX29uKHBkKSAhPSBvbikgeyB9CisJLyogVGhlIGNwdSBkZXZpY2UgaXMgb25seSBhdmFpbGFibGUgYWZ0ZXIgdGhlIGluaXRpYWwgY29yZSBicmluZ3VwICovCisJaWYgKGRldikKKwkJbnAgPSBkZXYtPm9mX25vZGU7CisJZWxzZQorCQlucCA9IG9mX2dldF9jcHVfbm9kZShjcHUsIDApOworCisJcmV0dXJuIG9mX3Jlc2V0X2NvbnRyb2xfZ2V0KG5wLCBOVUxMKTsKK30KKworc3RhdGljIGludCBwbXVfc2V0X3Bvd2VyX2RvbWFpbihpbnQgcGQsIGJvb2wgb24pCit7CisJdTMyIHZhbCA9IChvbikgPyAwIDogQklUKHBkKTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHNvZnQgcmVzZXQgdGhlIGNwdSB3aGVuIHdlIHR1cm4gb2ZmIHRoZSBjcHUgcG93ZXIgZG9tYWluLAorCSAqIG9yIGVsc2UgdGhlIGFjdGl2ZSBwcm9jZXNzb3JzIG1pZ2h0IGJlIHN0YWxsZWQgd2hlbiB0aGUgaW5kaXZpZHVhbAorCSAqIHByb2Nlc3NvciBpcyBwb3dlcmVkIGRvd24uCisJICovCisJaWYgKHJlYWRfY3B1aWRfcGFydCgpICE9IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpIHsKKwkJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGMgPSByb2NrY2hpcF9nZXRfY29yZV9yZXNldChwZCk7CisKKwkJaWYgKElTX0VSUihyc3RjKSkgeworCQkJcHJfZXJyKCIlczogY291bGQgbm90IGdldCByZXNldCBjb250cm9sIGZvciBjb3JlICVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBwZCk7CisJCQlyZXR1cm4gUFRSX0VSUihyc3RjKTsKKwkJfQorCisJCWlmIChvbikKKwkJCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocnN0Yyk7CisJCWVsc2UKKwkJCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHJzdGMpOworCisJCXJlc2V0X2NvbnRyb2xfcHV0KHJzdGMpOworCX0KKworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwbXUsIFBNVV9QV1JETl9DT04sIEJJVChwZCksIHZhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCIlczogY291bGQgbm90IHVwZGF0ZSBwb3dlciBkb21haW5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSAtMTsKKwl3aGlsZSAocmV0ICE9IG9uKSB7CisJCXJldCA9IHBtdV9wb3dlcl9kb21haW5faXNfb24ocGQpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZXJyKCIlczogY291bGQgbm90IHJlYWQgcG93ZXIgZG9tYWluIHN0YXRlXG4iLAorCQkJCSBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC02Myw3ICsxMjIsOSBAQAogc3RhdGljIGludCBfX2NwdWluaXQgcm9ja2NoaXBfYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwKIAkJCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCiB7Ci0JaWYgKCFzcmFtX2Jhc2VfYWRkciB8fCAhcG11X2Jhc2VfYWRkcikgeworCWludCByZXQ7CisKKwlpZiAoIXNyYW1fYmFzZV9hZGRyIHx8ICFwbXUpIHsKIAkJcHJfZXJyKCIlczogc3JhbSBvciBwbXUgbWlzc2luZyBmb3IgY3B1IGJvb3RcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CkBAIC03NSw3ICsxMzYsMjQgQEAKIAl9CiAKIAkvKiBzdGFydCB0aGUgY29yZSAqLwotCXBtdV9zZXRfcG93ZXJfZG9tYWluKDAgKyBjcHUsIHRydWUpOworCXJldCA9IHBtdV9zZXRfcG93ZXJfZG9tYWluKDAgKyBjcHUsIHRydWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJlYWRfY3B1aWRfcGFydCgpICE9IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpIHsKKwkJLyogV2UgY29tbXVuaWNhdGUgd2l0aCB0aGUgYm9vdHJvbSB0byBhY3RpdmUgdGhlIGNwdXMgb3RoZXIKKwkJICogdGhhbiBjcHUwLCBhZnRlciBhIGJsb2Igb2YgaW5pdGlhbGl6ZSBjb2RlLCB0aGV5IHdpbGwKKwkJICogc3RheSBhdCB3ZmUgc3RhdGUsIG9uY2UgdGhleSBhcmUgYWN0aXZlZCwgdGhleSB3aWxsIGNoZWNrCisJCSAqIHRoZSBtYWlsYm94OgorCQkgKiBzcmFtX2Jhc2VfYWRkciArIDQ6IDB4ZGVhZGJlYWYKKwkJICogc3JhbV9iYXNlX2FkZHIgKyA4OiBzdGFydCBhZGRyZXNzIGZvciBwYworCQkgKiAqLworCQl1ZGVsYXkoMTApOworCQl3cml0ZWwodmlydF90b19waHlzKHJvY2tjaGlwX3NlY29uZGFyeV9zdGFydHVwKSwKKwkJCXNyYW1fYmFzZV9hZGRyICsgOCk7CisJCXdyaXRlbCgweERFQURCRUFGLCBzcmFtX2Jhc2VfYWRkciArIDQpOworCQlkc2Jfc2V2KCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTAsOCArMTg4LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3JhbV9iYXNlX2FkZHIgPSBvZl9pb21hcChub2RlLCAwKTsKLQogCS8qIHNldCB0aGUgYm9vdCBmdW5jdGlvbiBmb3IgdGhlIHNyYW0gY29kZSAqLwogCXJvY2tjaGlwX2Jvb3RfZm4gPSB2aXJ0X3RvX3BoeXMocm9ja2NoaXBfc2Vjb25kYXJ5X3N0YXJ0dXApOwogCkBAIC0xMjUsNTUgKzIwMSwxMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIHJvY2tjaGlwX3BtdV9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyA9IDMyLAorCS52YWxfYml0cyA9IDMyLAorCS5yZWdfc3RyaWRlID0gNCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJvY2tjaGlwX3NtcF9wcmVwYXJlX3BtdSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwl2b2lkIF9faW9tZW0gKnBtdV9iYXNlOworCisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHZpYSBzbXBfb3BzLT5zbXBfcHJlcGFyZV9jcHUoKS4KKwkgKiBUaGF0IG9ubHkgaGFwcGVucyBpZiBhICIvY3B1cyIgZGV2aWNlIHRyZWUgbm9kZSBleGlzdHMKKwkgKiBhbmQgaGFzIGFuICJlbmFibGUtbWV0aG9kIiBwcm9wZXJ0eSB0aGF0IHNlbGVjdHMgdGhlIFNNUAorCSAqIG9wZXJhdGlvbnMgZGVmaW5lZCBoZXJlaW4uCisJICovCisJbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY3B1cyIpOworCisJcG11ID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShub2RlLCAicm9ja2NoaXAscG11Iik7CisJb2Zfbm9kZV9wdXQobm9kZSk7CisJaWYgKCFJU19FUlIocG11KSkKKwkJcmV0dXJuIDA7CisKKwlwbXUgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9jb21wYXRpYmxlKCJyb2NrY2hpcCxyazMwNjYtcG11Iik7CisJaWYgKCFJU19FUlIocG11KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBmYWxsYmFjaywgY3JlYXRlIG91ciBvd24gcmVnbWFwIGZvciB0aGUgcG11IGFyZWEgKi8KKwlwbXUgPSBOVUxMOworCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAicm9ja2NoaXAscmszMDY2LXBtdSIpOworCWlmICghbm9kZSkgeworCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgZmluZCBwbXUgZHQgbm9kZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwbXVfYmFzZSA9IG9mX2lvbWFwKG5vZGUsIDApOworCWlmICghcG11X2Jhc2UpIHsKKwkJcHJfZXJyKCIlczogY291bGQgbm90IG1hcCBwbXUgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBtdSA9IHJlZ21hcF9pbml0X21taW8oTlVMTCwgcG11X2Jhc2UsICZyb2NrY2hpcF9wbXVfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihwbXUpKSB7CisJCWludCByZXQgPSBQVFJfRVJSKHBtdSk7CisKKwkJaW91bm1hcChwbXVfYmFzZSk7CisJCXBtdSA9IE5VTEw7CisJCXByX2VycigiJXM6IHJlZ21hcCBpbml0IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcm9ja2NoaXBfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwogCXVuc2lnbmVkIGludCBpOwogCi0Jbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJhcm0sY29ydGV4LWE5LXNjdSIpOwotCWlmICghbm9kZSkgewotCQlwcl9lcnIoIiVzOiBtaXNzaW5nIHNjdVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0Jc2N1X2Jhc2VfYWRkciA9IG9mX2lvbWFwKG5vZGUsIDApOwotCWlmICghc2N1X2Jhc2VfYWRkcikgewotCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgbWFwIHNjdSByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQogCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAicm9ja2NoaXAscmszMDY2LXNtcC1zcmFtIik7CiAJaWYgKCFub2RlKSB7CiAJCXByX2VycigiJXM6IGNvdWxkIG5vdCBmaW5kIHNyYW0gZHQgbm9kZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHJvY2tjaGlwX3NtcF9wcmVwYXJlX3NyYW0obm9kZSkpCi0JCXJldHVybjsKLQotCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAicm9ja2NoaXAscmszMDY2LXBtdSIpOwotCWlmICghbm9kZSkgewotCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgZmluZCBwbXUgZHQgbm9kZVxuIiwgX19mdW5jX18pOworCXNyYW1fYmFzZV9hZGRyID0gb2ZfaW9tYXAobm9kZSwgMCk7CisJaWYgKCFzcmFtX2Jhc2VfYWRkcikgeworCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgbWFwIHNyYW0gcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlwbXVfYmFzZV9hZGRyID0gb2ZfaW9tYXAobm9kZSwgMCk7Ci0JaWYgKCFwbXVfYmFzZV9hZGRyKSB7Ci0JCXByX2VycigiJXM6IGNvdWxkIG5vdCBtYXAgcG11IHJlZ2lzdGVyc1xuIiwgX19mdW5jX18pOworCWlmIChyb2NrY2hpcF9zbXBfcHJlcGFyZV9wbXUoKSkKIAkJcmV0dXJuOworCisJaWYgKHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpIHsKKwkJaWYgKHJvY2tjaGlwX3NtcF9wcmVwYXJlX3NyYW0obm9kZSkpCisJCQlyZXR1cm47CisKKwkJLyogZW5hYmxlIHRoZSBTQ1UgcG93ZXIgZG9tYWluICovCisJCXBtdV9zZXRfcG93ZXJfZG9tYWluKFBNVV9QV1JETl9TQ1UsIHRydWUpOworCisJCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYXJtLGNvcnRleC1hOS1zY3UiKTsKKwkJaWYgKCFub2RlKSB7CisJCQlwcl9lcnIoIiVzOiBtaXNzaW5nIHNjdVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuOworCQl9CisKKwkJc2N1X2Jhc2VfYWRkciA9IG9mX2lvbWFwKG5vZGUsIDApOworCQlpZiAoIXNjdV9iYXNlX2FkZHIpIHsKKwkJCXByX2VycigiJXM6IGNvdWxkIG5vdCBtYXAgc2N1IHJlZ2lzdGVyc1xuIiwgX19mdW5jX18pOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogV2hpbGUgdGhlIG51bWJlciBvZiBjcHVzIGlzIGdhdGhlcmVkIGZyb20gZHQsIGFsc28gZ2V0IHRoZQorCQkgKiBudW1iZXIgb2YgY29yZXMgZnJvbSB0aGUgc2N1IHRvIHZlcmlmeSB0aGlzIHZhbHVlIHdoZW4KKwkJICogYm9vdGluZyB0aGUgY29yZXMuCisJCSAqLworCQluY29yZXMgPSBzY3VfZ2V0X2NvcmVfY291bnQoc2N1X2Jhc2VfYWRkcik7CisJCXByX2VycigiJXM6IG5jb3JlcyAlZFxuIiwgX19mdW5jX18sIG5jb3Jlcyk7CisKKwkJc2N1X2VuYWJsZShzY3VfYmFzZV9hZGRyKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgbDJjdGxyOworCisJCWFzbSAoIm1yYyBwMTUsIDEsICUwLCBjOSwgYzAsIDJcbiIgOiAiPXIiIChsMmN0bHIpKTsKKwkJbmNvcmVzID0gKChsMmN0bHIgPj4gMjQpICYgMHgzKSArIDE7CiAJfQogCi0JLyogZW5hYmxlIHRoZSBTQ1UgcG93ZXIgZG9tYWluICovCi0JcG11X3NldF9wb3dlcl9kb21haW4oUE1VX1BXUkROX1NDVSwgdHJ1ZSk7Ci0KLQkvKgotCSAqIFdoaWxlIHRoZSBudW1iZXIgb2YgY3B1cyBpcyBnYXRoZXJlZCBmcm9tIGR0LCBhbHNvIGdldCB0aGUgbnVtYmVyCi0JICogb2YgY29yZXMgZnJvbSB0aGUgc2N1IHRvIHZlcmlmeSB0aGlzIHZhbHVlIHdoZW4gYm9vdGluZyB0aGUgY29yZXMuCi0JICovCi0JbmNvcmVzID0gc2N1X2dldF9jb3JlX2NvdW50KHNjdV9iYXNlX2FkZHIpOwotCi0Jc2N1X2VuYWJsZShzY3VfYmFzZV9hZGRyKTsKLQogCS8qIE1ha2Ugc3VyZSB0aGF0IGFsbCBjb3JlcyBleGNlcHQgdGhlIGZpcnN0IGFyZSByZWFsbHkgb2ZmICovCiAJZm9yIChpID0gMTsgaSA8IG5jb3JlczsgaSsrKQogCQlwbXVfc2V0X3Bvd2VyX2RvbWFpbigwICsgaSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9yb2NrY2hpcC5jIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9yb2NrY2hpcC5jCmluZGV4IDhhYjllMGUuLmQyMjZiNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcm9ja2NoaXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3JvY2tjaGlwLmMKQEAgLTI0LDYgKzI0LDEyIEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KICNpbmNsdWRlICJjb3JlLmgiCiAKK3N0YXRpYyB2b2lkIF9faW5pdCByb2NrY2hpcF9kdF9pbml0KHZvaWQpCit7CisJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImNwdWZyZXEtZHQiLCAwLCBOVUxMLCAwKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByb2NrY2hpcF9ib2FyZF9kdF9jb21wYXRbXSA9IHsKIAkicm9ja2NoaXAscmsyOTI4IiwKIAkicm9ja2NoaXAscmszMDY2YSIsCkBAIC0zNyw0ICs0Myw1IEBACiAJLmwyY19hdXhfdmFsCT0gMCwKIAkubDJjX2F1eF9tYXNrCT0gfjAsCiAJLmR0X2NvbXBhdAk9IHJvY2tjaGlwX2JvYXJkX2R0X2NvbXBhdCwKKwkuaW5pdF9tYWNoaW5lCT0gcm9ja2NoaXBfZHRfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcGNpLW5hbm9lbmdpbmUuYwppbmRleCBmZjAyZTJkYS4uYjcwNDQzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvcGNpLW5hbm9lbmdpbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jCkBAIC0zMywxMiArMzMsMTIgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmFub19sb2NrKTsKIAogc3RhdGljIGludCBuYW5vZW5naW5lX2dldF9wY2lfYWRkcmVzcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAotCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1bnNpZ25lZCBsb25nICphZGRyZXNzKQorCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB2b2lkIF9faW9tZW0gKiphZGRyZXNzKQogewogCWludCByZXQgPSBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiAJdW5zaWduZWQgaW50IGJ1c25yID0gYnVzLT5udW1iZXI7CiAKLQkqYWRkcmVzcyA9IE5BTk9fUENJX0NPTkZJR19TUEFDRV9WSVJUICsKKwkqYWRkcmVzcyA9ICh2b2lkIF9faW9tZW0gKilOQU5PX1BDSV9DT05GSUdfU1BBQ0VfVklSVCArCiAJCSgoYnVzLT5udW1iZXIgPDwgMTYpIHwgKGRldmZuIDw8IDgpIHwgKHdoZXJlICYgfjMpKTsKIAogCXJldCA9IChidXNuciA+IDI1NSB8fCBkZXZmbiA+IDI1NSB8fCB3aGVyZSA+IDI1NSkgPwpAQCAtNTEsNyArNTEsNyBAQAogCWludCBzaXplLCB1MzIgKnZhbCkKIHsKIAlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwl2b2lkIF9faW9tZW0gKmFkZHJlc3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdjsKIApAQCAtODUsNyArODUsNyBAQAogCWludCBzaXplLCB1MzIgdmFsKQogewogCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXZvaWQgX19pb21lbSAqYWRkcmVzczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIHNoaWZ0OwogCXUzMiB2OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCmluZGV4IDIxZjQ1N2IuLjFiNGZhZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKQEAgLTEsNSArMSw2IEBACiBjb25maWcgQVJDSF9TSE1PQklMRQogCWJvb2wKKwlzZWxlY3QgWk9ORV9ETUEgaWYgQVJNX0xQQUUKIAogY29uZmlnIFBNX1JDQVIKIAlib29sCkBAIC0xOCw2ICsxOSw3IEBACiAJc2VsZWN0IFBNX1JDQVIgaWYgUE0gfHwgU01QCiAJc2VsZWN0IFJFTkVTQVNfSVJRQwogCXNlbGVjdCBTWVNfU1VQUE9SVFNfU0hfQ01UCisJc2VsZWN0IFBDSV9ET01BSU5TIGlmIFBDSQogCiBjb25maWcgQVJDSF9STU9CSUxFCiAJYm9vbApAQCAtMzYsNyArMzgsNiBAQAogCXNlbGVjdCBOT19JT1BPUlRfTUFQCiAJc2VsZWN0IFBJTkNUUkwKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKLQlzZWxlY3QgQVJDSF9IQVNfT1BQCiAKIGlmIEFSQ0hfU0hNT0JJTEVfTVVMVEkKIApAQCAtNzMsMTEgKzc0LDYgQEAKIAogY29tbWVudCAiUmVuZXNhcyBBUk0gU29DcyBCb2FyZCBUeXBlIgogCi1jb25maWcgTUFDSF9LT0VMU0NICi0JYm9vbCAiS29lbHNjaCBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfUjhBNzc5MQotCXNlbGVjdCBNSUNSRUxfUEhZIGlmIFNIX0VUSAotCiBjb25maWcgTUFDSF9MQUdFUgogCWJvb2wgIkxhZ2VyIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9SOEE3NzkwCkBAIC0xNDUsMTQgKzE0MSw2IEBACiAJc2VsZWN0IE1JR0hUX0hBVkVfUENJCiAJc2VsZWN0IEFSQ0hfRE1BX0FERFJfVF82NEJJVCBpZiBBUk1fTFBBRQogCi1jb25maWcgQVJDSF9SOEE3NzkxCi0JYm9vbCAiUi1DYXIgTTItVyAoUjhBNzc5MTApIgotCXNlbGVjdCBBUkNIX1JDQVJfR0VOMgotCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgotCXNlbGVjdCBBUk1fR0lDCi0Jc2VsZWN0IE1JR0hUX0hBVkVfUENJCi0Jc2VsZWN0IEFSQ0hfRE1BX0FERFJfVF82NEJJVCBpZiBBUk1fTFBBRQotCiBjb21tZW50ICJSZW5lc2FzIEFSTSBTb0NzIEJvYXJkIFR5cGUiCiAKIGNvbmZpZyBNQUNIX0FQRTZFVk0KQEAgLTIyNywxMiArMjE1LDYgQEAKIAlzZWxlY3QgTUlDUkVMX1BIWSBpZiBTSF9FVEgKIAlzZWxlY3QgU05EX1NPQ19BSzQ2NDIgaWYgU05EX1NJTVBMRV9DQVJECiAKLWNvbmZpZyBNQUNIX0tPRUxTQ0gKLQlib29sICJLb2Vsc2NoIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9SOEE3NzkxCi0Jc2VsZWN0IFVTRV9PRgotCXNlbGVjdCBNSUNSRUxfUEhZIGlmIFNIX0VUSAotCiBjb25maWcgTUFDSF9LWk05RwogCWJvb2wgIktaTS1BOS1HVCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfU0g3M0EwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZQppbmRleCBlMjBmMjc4Li5iNTVjYWMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUKQEAgLTE5LDggKzE5LDggQEAKIG9iai0kKENPTkZJR19BUkNIX1I3UzcyMTAwKQkrPSBzZXR1cC1yN3M3MjEwMC5vCiAKICMgQ2xvY2sgb2JqZWN0cwotb2JqLXkJCQkJKz0gY2xvY2subwogaWZuZGVmIENPTkZJR19DT01NT05fQ0xLCitvYmoteQkJCQkrPSBjbG9jay5vCiBvYmotJChDT05GSUdfQVJDSF9TSDczNzIpCSs9IGNsb2NrLXNoNzM3Mi5vCiBvYmotJChDT05GSUdfQVJDSF9TSDczQTApCSs9IGNsb2NrLXNoNzNhMC5vCiBvYmotJChDT05GSUdfQVJDSF9SOEE3M0E0KQkrPSBjbG9jay1yOGE3M2E0Lm8KQEAgLTI4LDcgKzI4LDYgQEAKIG9iai0kKENPTkZJR19BUkNIX1I4QTc3NzgpCSs9IGNsb2NrLXI4YTc3Nzgubwogb2JqLSQoQ09ORklHX0FSQ0hfUjhBNzc3OSkJKz0gY2xvY2stcjhhNzc3OS5vCiBvYmotJChDT05GSUdfQVJDSF9SOEE3NzkwKQkrPSBjbG9jay1yOGE3NzkwLm8KLW9iai0kKENPTkZJR19BUkNIX1I4QTc3OTEpCSs9IGNsb2NrLXI4YTc3OTEubwogZW5kaWYKIAogIyBDUFUgcmVzZXQgdmVjdG9yIGhhbmRsaW5nIG9iamVjdHMKQEAgLTM2LDYgKzM1LDcgQEAKIAogIyBTaGFyZWQgU29DIGZhbWlseSBvYmplY3RzCiBvYmotJChDT05GSUdfQVJDSF9SQ0FSX0dFTjIpCSs9IHNldHVwLXJjYXItZ2VuMi5vIHBsYXRzbXAtYXBtdS5vICQoY3B1LXkpCitDRkxBR1Nfc2V0dXAtcmNhci1nZW4yLm8JKz0gLW1hcmNoPWFybXY3LWEKIAogIyBTTVAgb2JqZWN0cwogc21wLXkJCQkJOj0gJChjcHUteSkKQEAgLTU3LDcgKzU3LDYgQEAKIAogIyBCb2FyZCBvYmplY3RzCiBpZmRlZiBDT05GSUdfQVJDSF9TSE1PQklMRV9NVUxUSQotb2JqLSQoQ09ORklHX01BQ0hfS09FTFNDSCkJKz0gYm9hcmQta29lbHNjaC1yZWZlcmVuY2Uubwogb2JqLSQoQ09ORklHX01BQ0hfTEFHRVIpCSs9IGJvYXJkLWxhZ2VyLXJlZmVyZW5jZS5vCiBvYmotJChDT05GSUdfTUFDSF9NQVJaRU4pCSs9IGJvYXJkLW1hcnplbi1yZWZlcmVuY2UubwogZWxzZQpAQCAtNjksNyArNjgsNiBAQAogb2JqLSQoQ09ORklHX01BQ0hfTUFSWkVOKQkrPSBib2FyZC1tYXJ6ZW4ubwogb2JqLSQoQ09ORklHX01BQ0hfTEFHRVIpCSs9IGJvYXJkLWxhZ2VyLm8KIG9iai0kKENPTkZJR19NQUNIX0FSTUFESUxMTzgwMEVWQSkJKz0gYm9hcmQtYXJtYWRpbGxvODAwZXZhLm8KLW9iai0kKENPTkZJR19NQUNIX0tPRUxTQ0gpCSs9IGJvYXJkLWtvZWxzY2gubwogb2JqLSQoQ09ORklHX01BQ0hfS1pNOUcpCSs9IGJvYXJkLWt6bTlnLm8KIG9iai0kKENPTkZJR19NQUNIX0taTTlHX1JFRkVSRU5DRSkJKz0gYm9hcmQta3ptOWctcmVmZXJlbmNlLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlLmJvb3QKaW5kZXggZGU5YTIzOC4uNTdkMDBlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZS5ib290CisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUuYm9vdApAQCAtNSw3ICs1LDYgQEAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfQVJNQURJTExPODAwRVZBKSArPSAweDQwMDA4MDAwCiBsb2FkYWRkci0kKENPTkZJR19NQUNIX0JPQ0tXKSArPSAweDYwMDA4MDAwCiBsb2FkYWRkci0kKENPTkZJR19NQUNIX0JPQ0tXX1JFRkVSRU5DRSkgKz0gMHg2MDAwODAwMAotbG9hZGFkZHItJChDT05GSUdfTUFDSF9LT0VMU0NIKSArPSAweDQwMDA4MDAwCiBsb2FkYWRkci0kKENPTkZJR19NQUNIX0taTTlHKSArPSAweDQxMDA4MDAwCiBsb2FkYWRkci0kKENPTkZJR19NQUNIX0taTTlHX1JFRkVSRU5DRSkgKz0gMHg0MTAwODAwMAogbG9hZGFkZHItJChDT05GSUdfTUFDSF9MQUdFUikgKz0gMHg0MDAwODAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLXJlZmVyZW5jZS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLXJlZmVyZW5jZS5jCmluZGV4IGE2NTAzZDguLjNiNjgzNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS1yZWZlcmVuY2UuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwZTZldm0tcmVmZXJlbmNlLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KQEAgLTQ4LDcgKzQ0LDYgQEAKIAljbGtfcHV0KHBhcmVudCk7CiAJY2xrX3B1dChtcCk7CiAKLQlyOGE3M2E0X2FkZF9kdF9kZXZpY2VzKCk7CiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwZTZldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCmluZGV4IGIyMjJmNjguLjY2ZjY3ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFybWFkaWxsbzgwMGV2YS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcm1hZGlsbG84MDBldmEuYwppbmRleCBlNzA5ODM1Li42ZDk0OWYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFybWFkaWxsbzgwMGV2YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXJtYWRpbGxvODAwZXZhLmMKQEAgLTEyLDUzICsxMiw0OCBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc3QxMjMyX3BkYXRhLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9waW5jdHJsL21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9wd20uaD4KLSNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2dwaW8tcmVndWxhdG9yLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zaF9ldGguaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvcmVuZXNhc191c2Jocy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NoX21tY2lmLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NoX21vYmlsZV9zZGhpLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3N0MTIzMl9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2dwaW8tcmVndWxhdG9yLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcmVuZXNhc191c2Jocy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCi0jaW5jbHVkZSA8bWVkaWEvbXQ5dDExMi5oPgotI2luY2x1ZGUgPG1lZGlhL3NoX21vYmlsZV9jZXUuaD4KLSNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgotI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+Ci0jaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2hkbWkuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPG1lZGlhL210OXQxMTIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgogI2luY2x1ZGUgPHNvdW5kL3NpbXBsZV9jYXJkLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2hkbWkuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiaXJxcy5oIgpAQCAtMTIzNCw4ICsxMjI5LDE1IEBACiAJc3RhdGljIHN0cnVjdCBwbV9kb21haW5fZGV2aWNlIGRvbWFpbl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkJeyAiQTRMQyIsICZsY2RjMF9kZXZpY2UgfSwKIAkJeyAiQTRMQyIsICZoZG1pX2xjZGNfZGV2aWNlIH0sCisJCXsgIkE0TVAiLCAmaGRtaV9kZXZpY2UgfSwKKwkJeyAiQTRNUCIsICZmc2lfZGV2aWNlIH0sCisJCXsgIkE0UiIsICAmY2V1MF9kZXZpY2UgfSwKKwkJeyAiQTRTIiwgICZzaF9ldGhfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmcHdtX2RldmljZSB9LAorCQl7ICJBM1NQIiwgJnNkaGkwX2RldmljZSB9LAorCQl7ICJBM1NQIiwgJnNoX21tY2lmX2RldmljZSB9LAogCX07Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXNiID0gTlVMTDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1c2IgPSBOVUxMLCAqc2RoaTEgPSBOVUxMOwogCiAJcmVndWxhdG9yX3JlZ2lzdGVyX2Fsd2F5c19vbigwLCAiZml4ZWQtMy4zViIsIGZpeGVkM3YzX3Bvd2VyX2NvbnN1bWVycywKIAkJCQkgICAgIEFSUkFZX1NJWkUoZml4ZWQzdjNfcG93ZXJfY29uc3VtZXJzKSwgMzMwMDAwMCk7CkBAIC0xMzA0LDYgKzEzMDYsNyBAQAogCiAJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdmNjX3NkaGkxKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZGhpMV9kZXZpY2UpOworCQlzZGhpMSA9ICZzZGhpMV9kZXZpY2U7CiAJfQogCiAKQEAgLTEzMjQsNiArMTMyNyw4IEBACiAJCQkJICAgICAgIEFSUkFZX1NJWkUoZG9tYWluX2RldmljZXMpKTsKIAlpZiAodXNiKQogCQlybW9iaWxlX2FkZF9kZXZpY2VfdG9fZG9tYWluKCJBM1NQIiwgdXNiKTsKKwlpZiAoc2RoaTEpCisJCXJtb2JpbGVfYWRkX2RldmljZV90b19kb21haW4oIkEzU1AiLCBzZGhpMSk7CiAKIAlyOGE3NzQwX3BtX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYm9ja3ctcmVmZXJlbmNlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWJvY2t3LXJlZmVyZW5jZS5jCmluZGV4IDc5YzQ3ODQuLmQ2NDlhZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYm9ja3ctcmVmZXJlbmNlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy1yZWZlcmVuY2UuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYm9ja3cuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYm9ja3cuYwppbmRleCAxY2YyYzc1Li5mMjdiNWE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWJvY2t3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rb2Vsc2NoLXJlZmVyZW5jZS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rb2Vsc2NoLXJlZmVyZW5jZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmFhNTQwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta29lbHNjaC1yZWZlcmVuY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogS29lbHNjaCBib2FyZCBzdXBwb3J0IC0gUmVmZXJlbmNlIERUIGltcGxlbWVudGF0aW9uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzICBSZW5lc2FzIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgIE1hZ251cyBEYW1tCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3JjYXItZHUuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAiaXJxcy5oIgotI2luY2x1ZGUgInI4YTc3OTEuaCIKLSNpbmNsdWRlICJyY2FyLWdlbjIuaCIKLQotLyogRFUgKi8KLXN0YXRpYyBzdHJ1Y3QgcmNhcl9kdV9lbmNvZGVyX2RhdGEga29lbHNjaF9kdV9lbmNvZGVyc1tdID0gewotCXsKLQkJLnR5cGUgPSBSQ0FSX0RVX0VOQ09ERVJfTk9ORSwKLQkJLm91dHB1dCA9IFJDQVJfRFVfT1VUUFVUX0xWRFMwLAotCQkuY29ubmVjdG9yLmx2ZHMucGFuZWwgPSB7Ci0JCQkud2lkdGhfbW0gPSAyMTAsCi0JCQkuaGVpZ2h0X21tID0gMTU4LAotCQkJLm1vZGUgPSB7Ci0JCQkJLnBpeGVsY2xvY2sgPSA2NTAwMDAwMCwKLQkJCQkuaGFjdGl2ZSA9IDEwMjQsCi0JCQkJLmhmcm9udF9wb3JjaCA9IDIwLAotCQkJCS5oYmFja19wb3JjaCA9IDE2MCwKLQkJCQkuaHN5bmNfbGVuID0gMTM2LAotCQkJCS52YWN0aXZlID0gNzY4LAotCQkJCS52ZnJvbnRfcG9yY2ggPSAzLAotCQkJCS52YmFja19wb3JjaCA9IDI5LAotCQkJCS52c3luY19sZW4gPSA2LAotCQkJfSwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY2FyX2R1X3BsYXRmb3JtX2RhdGEga29lbHNjaF9kdV9wZGF0YSA9IHsKLQkuZW5jb2RlcnMgPSBrb2Vsc2NoX2R1X2VuY29kZXJzLAotCS5udW1fZW5jb2RlcnMgPSBBUlJBWV9TSVpFKGtvZWxzY2hfZHVfZW5jb2RlcnMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBkdV9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGZlYjAwMDAwLCAweDQwMDAwKSwKLQlERUZJTkVfUkVTX01FTV9OQU1FRCgweGZlYjkwMDAwLCAweDFjLCAibHZkcy4wIiksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyNTYpKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI2OCkpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGtvZWxzY2hfYWRkX2R1X2RldmljZSh2b2lkKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBpbmZvID0gewotCQkubmFtZSA9ICJyY2FyLWR1LXI4YTc3OTEiLAotCQkuaWQgPSAtMSwKLQkJLnJlcyA9IGR1X3Jlc291cmNlcywKLQkJLm51bV9yZXMgPSBBUlJBWV9TSVpFKGR1X3Jlc291cmNlcyksCi0JCS5kYXRhID0gJmtvZWxzY2hfZHVfcGRhdGEsCi0JCS5zaXplX2RhdGEgPSBzaXplb2Yoa29lbHNjaF9kdV9wZGF0YSksCi0JCS5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JfTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZpbmZvKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgYSByZWFsbHkgY3J1ZGUgaGFjayB0byBwcm92aWRlIGNsa2RldiBzdXBwb3J0IHRvIHBsYXRmb3JtCi0gKiBkZXZpY2VzIHVudGlsIHRoZXkgZ2V0IG1vdmVkIHRvIERULgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19uYW1lIGNsa19uYW1lc1tdIF9faW5pdGNvbnN0ID0gewotCXsgImR1MCIsICJkdS4wIiwgInJjYXItZHUtcjhhNzc5MSIgfSwKLQl7ICJkdTEiLCAiZHUuMSIsICJyY2FyLWR1LXI4YTc3OTEiIH0sCi0JeyAibHZkczAiLCAibHZkcy4wIiwgInJjYXItZHUtcjhhNzc5MSIgfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBrb2Vsc2NoX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCi17Ci0Jc2htb2JpbGVfY2xrX3dvcmthcm91bmQoY2xrX25hbWVzLCBBUlJBWV9TSVpFKGNsa19uYW1lcyksIGZhbHNlKTsKLQlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgTlVMTCk7Ci0KLQlrb2Vsc2NoX2FkZF9kdV9kZXZpY2UoKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBrb2Vsc2NoX2JvYXJkc19jb21wYXRfZHRbXSBfX2luaXRjb25zdCA9IHsKLQkicmVuZXNhcyxrb2Vsc2NoIiwKLQkicmVuZXNhcyxrb2Vsc2NoLXJlZmVyZW5jZSIsCi0JTlVMTCwKLX07Ci0KLURUX01BQ0hJTkVfU1RBUlQoS09FTFNDSF9EVCwgImtvZWxzY2giKQotCS5zbXAJCT0gc21wX29wcyhyOGE3NzkxX3NtcF9vcHMpLAotCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKLQkuaW5pdF90aW1lCT0gcmNhcl9nZW4yX3RpbWVyX2luaXQsCi0JLmluaXRfbWFjaGluZQk9IGtvZWxzY2hfYWRkX3N0YW5kYXJkX2RldmljZXMsCi0JLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKLQkucmVzZXJ2ZQk9IHJjYXJfZ2VuMl9yZXNlcnZlLAotCS5kdF9jb21wYXQJPSBrb2Vsc2NoX2JvYXJkc19jb21wYXRfZHQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rb2Vsc2NoLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzExMWI1Yy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2guYworKysgL2Rldi9udWxsCkBAIC0xLDUyNyArMCwwIEBACi0vKgotICogS29lbHNjaCBib2FyZCBzdXBwb3J0Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzICBSZW5lc2FzIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyAgTWFnbnVzIERhbW0KLSAqIENvcHlyaWdodCAoQykgMjAxNCAgQ29nZW50IEVtYmVkZGVkLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvc2hfbW9iaWxlX3NkaGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLSNpbmNsdWRlIDxsaW51eC9waW5jdHJsL21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tcmNhci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvcmNhci1kdS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZ3Bpby1yZWd1bGF0b3IuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NoX2V0aC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9yc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJpcnFzLmgiCi0jaW5jbHVkZSAicjhhNzc5MS5oIgotI2luY2x1ZGUgInJjYXItZ2VuMi5oIgotCi0vKiBEVSAqLwotc3RhdGljIHN0cnVjdCByY2FyX2R1X2VuY29kZXJfZGF0YSBrb2Vsc2NoX2R1X2VuY29kZXJzW10gPSB7Ci0JewotCQkudHlwZSA9IFJDQVJfRFVfRU5DT0RFUl9OT05FLAotCQkub3V0cHV0ID0gUkNBUl9EVV9PVVRQVVRfTFZEUzAsCi0JCS5jb25uZWN0b3IubHZkcy5wYW5lbCA9IHsKLQkJCS53aWR0aF9tbSA9IDIxMCwKLQkJCS5oZWlnaHRfbW0gPSAxNTgsCi0JCQkubW9kZSA9IHsKLQkJCQkucGl4ZWxjbG9jayA9IDY1MDAwMDAwLAotCQkJCS5oYWN0aXZlID0gMTAyNCwKLQkJCQkuaGZyb250X3BvcmNoID0gMjAsCi0JCQkJLmhiYWNrX3BvcmNoID0gMTYwLAotCQkJCS5oc3luY19sZW4gPSAxMzYsCi0JCQkJLnZhY3RpdmUgPSA3NjgsCi0JCQkJLnZmcm9udF9wb3JjaCA9IDMsCi0JCQkJLnZiYWNrX3BvcmNoID0gMjksCi0JCQkJLnZzeW5jX2xlbiA9IDYsCi0JCQl9LAotCQl9LAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJjYXJfZHVfcGxhdGZvcm1fZGF0YSBrb2Vsc2NoX2R1X3BkYXRhIF9faW5pdGNvbnN0ID0gewotCS5lbmNvZGVycyA9IGtvZWxzY2hfZHVfZW5jb2RlcnMsCi0JLm51bV9lbmNvZGVycyA9IEFSUkFZX1NJWkUoa29lbHNjaF9kdV9lbmNvZGVycyksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIGR1X3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZmViMDAwMDAsIDB4NDAwMDApLAotCURFRklORV9SRVNfTUVNX05BTUVEKDB4ZmViOTAwMDAsIDB4MWMsICJsdmRzLjAiKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI1NikpLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjY4KSksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga29lbHNjaF9hZGRfZHVfZGV2aWNlKHZvaWQpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGluZm8gPSB7Ci0JCS5uYW1lID0gInJjYXItZHUtcjhhNzc5MSIsCi0JCS5pZCA9IC0xLAotCQkucmVzID0gZHVfcmVzb3VyY2VzLAotCQkubnVtX3JlcyA9IEFSUkFZX1NJWkUoZHVfcmVzb3VyY2VzKSwKLQkJLmRhdGEgPSAma29lbHNjaF9kdV9wZGF0YSwKLQkJLnNpemVfZGF0YSA9IHNpemVvZihrb2Vsc2NoX2R1X3BkYXRhKSwKLQkJLmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9OwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJmluZm8pOwotfQotCi0vKiBFdGhlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9ldGhfcGxhdF9kYXRhIGV0aGVyX3BkYXRhIF9faW5pdGNvbnN0ID0gewotCS5waHkJCQk9IDB4MSwKLQkucGh5X2lycQkJPSBpcnFfcGluKDApLAotCS5lZG1hY19lbmRpYW4JCT0gRURNQUNfTElUVExFX0VORElBTiwKLQkucGh5X2ludGVyZmFjZQkJPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSwKLQkuZXRoZXJfbGlua19hY3RpdmVfbG93CT0gMSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgZXRoZXJfcmVzb3VyY2VzW10gX19pbml0Y29uc3QgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhlZTcwMDAwMCwgMHg0MDApLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTYyKSksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGV0aGVyX2luZm8gX19pbml0Y29uc3QgPSB7Ci0JLm5hbWUJCT0gInI4YTc3OTEtZXRoZXIiLAotCS5pZAkJPSAtMSwKLQkucmVzCQk9IGV0aGVyX3Jlc291cmNlcywKLQkubnVtX3Jlcwk9IEFSUkFZX1NJWkUoZXRoZXJfcmVzb3VyY2VzKSwKLQkuZGF0YQkJPSAmZXRoZXJfcGRhdGEsCi0JLnNpemVfZGF0YQk9IHNpemVvZihldGhlcl9wZGF0YSksCi0JLmRtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLX07Ci0KLS8qIExFRFMgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQga29lbHNjaF9sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJPSAibGVkOCIsCi0JCS5ncGlvCQk9IFJDQVJfR1BfUElOKDIsIDIxKSwKLQkJLmRlZmF1bHRfc3RhdGUJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfSwgewotCQkubmFtZQkJPSAibGVkNyIsCi0JCS5ncGlvCQk9IFJDQVJfR1BfUElOKDIsIDIwKSwKLQkJLmRlZmF1bHRfc3RhdGUJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfSwgewotCQkubmFtZQkJPSAibGVkNiIsCi0JCS5ncGlvCQk9IFJDQVJfR1BfUElOKDIsIDE5KSwKLQkJLmRlZmF1bHRfc3RhdGUJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBrb2Vsc2NoX2xlZHNfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmxlZHMJCT0ga29lbHNjaF9sZWRzLAotCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoa29lbHNjaF9sZWRzKSwKLX07Ci0KLS8qIEdQSU8gS0VZICovCi0jZGVmaW5lIEdQSU9fS0VZKGMsIGcsIGQsIC4uLikgXAotCXsgLmNvZGUgPSBjLCAuZ3BpbyA9IGcsIC5kZXNjID0gZCwgLmFjdGl2ZV9sb3cgPSAxLCBcCi0JICAud2FrZXVwID0gMSwgLmRlYm91bmNlX2ludGVydmFsID0gMjAgfQotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZ3Bpb19idXR0b25zW10gPSB7Ci0JR1BJT19LRVkoS0VZXzQsCQlSQ0FSX0dQX1BJTig1LCAzKSwJIlNXMi1waW40IiksCi0JR1BJT19LRVkoS0VZXzMsCQlSQ0FSX0dQX1BJTig1LCAyKSwJIlNXMi1waW4zIiksCi0JR1BJT19LRVkoS0VZXzIsCQlSQ0FSX0dQX1BJTig1LCAxKSwJIlNXMi1waW4yIiksCi0JR1BJT19LRVkoS0VZXzEsCQlSQ0FSX0dQX1BJTig1LCAwKSwJIlNXMi1waW4xIiksCi0JR1BJT19LRVkoS0VZX0csCQlSQ0FSX0dQX1BJTig3LCA2KSwJIlNXMzYiKSwKLQlHUElPX0tFWShLRVlfRiwJCVJDQVJfR1BfUElOKDcsIDUpLAkiU1czNSIpLAotCUdQSU9fS0VZKEtFWV9FLAkJUkNBUl9HUF9QSU4oNywgNCksCSJTVzM0IiksCi0JR1BJT19LRVkoS0VZX0QsCQlSQ0FSX0dQX1BJTig3LCAzKSwJIlNXMzMiKSwKLQlHUElPX0tFWShLRVlfQywJCVJDQVJfR1BfUElOKDcsIDIpLAkiU1czMiIpLAotCUdQSU9fS0VZKEtFWV9CLAkJUkNBUl9HUF9QSU4oNywgMSksCSJTVzMxIiksCi0JR1BJT19LRVkoS0VZX0EsCQlSQ0FSX0dQX1BJTig3LCAwKSwJIlNXMzAiKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEga29lbHNjaF9rZXlzX3BkYXRhIF9faW5pdGNvbnN0ID0gewotCS5idXR0b25zCT0gZ3Bpb19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZ3Bpb19idXR0b25zKSwKLX07Ci0KLS8qIFFTUEkgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgcXNwaV9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGU2YjEwMDAwLCAweDEwMDApLAotCURFRklORV9SRVNfSVJRX05BTUVEKGdpY19zcGkoMTg0KSwgIm11eCIpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByc3BpX3BsYXRfZGF0YSBxc3BpX3BkYXRhIF9faW5pdGNvbnN0ID0gewotCS5udW1fY2hpcHNlbGVjdCA9IDEsCi19OwotCi0vKiBTUEkgRmxhc2ggbWVtb3J5IChTcGFuc2lvbiBTMjVGTDUxMlNBR01GSUcxMSA2NCBNaUIpICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc3BpX2ZsYXNoX3BhcnRbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJsb2FkZXIiLAotCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCi0JCS5zaXplCQk9IDUxMiAqIDEwMjQsCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKLQl9LAotCXsKLQkJLm5hbWUJCT0gImJvb3RlbnYiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJCT0gNTEyICogMTAyNCwKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAotCX0sCi0JewotCQkubmFtZQkJPSAiZGF0YSIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgc3BpX2ZsYXNoX2RhdGEgPSB7Ci0JLm5hbWUJCT0gIm0yNXA4MCIsCi0JLnBhcnRzCQk9IHNwaV9mbGFzaF9wYXJ0LAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoc3BpX2ZsYXNoX3BhcnQpLAotCS50eXBlCQk9ICJzMjVmbDUxMnMiLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzcGlfaW5mb1tdIF9faW5pdGNvbnN0ID0gewotCXsKLQkJLm1vZGFsaWFzCT0gIm0yNXA4MCIsCi0JCS5wbGF0Zm9ybV9kYXRhCT0gJnNwaV9mbGFzaF9kYXRhLAotCQkubW9kZQkJPSBTUElfTU9ERV8wIHwgU1BJX1RYX1FVQUQgfCBTUElfUlhfUVVBRCwKLQkJLm1heF9zcGVlZF9oegk9IDMwMDAwMDAwLAotCQkuYnVzX251bQk9IDAsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JfSwKLX07Ci0KLS8qIFNBVEEwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIHNhdGEwX3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZWUzMDAwMDAsIDB4MjAwMCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxMDUpKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gc2F0YTBfaW5mbyBfX2luaXRjb25zdCA9IHsKLQkubmFtZQkJPSAic2F0YS1yOGE3NzkxIiwKLQkuaWQJCT0gMCwKLQkucmVzCQk9IHNhdGEwX3Jlc291cmNlcywKLQkubnVtX3Jlcwk9IEFSUkFZX1NJWkUoc2F0YTBfcmVzb3VyY2VzKSwKLQkuZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotfTsKLQotLyogSTJDICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIGkyY19yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQkvKiBJMkMwICovCi0JREVGSU5FX1JFU19NRU0oMHhFNjUwODAwMCwgMHg0MCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyODcpKSwKLQkvKiBJMkMxICovCi0JREVGSU5FX1JFU19NRU0oMHhFNjUxODAwMCwgMHg0MCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyODgpKSwKLQkvKiBJMkMyICovCi0JREVGSU5FX1JFU19NRU0oMHhFNjUzMDAwMCwgMHg0MCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyODYpKSwKLQkvKiBJMkMzICovCi0JREVGSU5FX1JFU19NRU0oMHhFNjU0MDAwMCwgMHg0MCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyOTApKSwKLQkvKiBJMkM0ICovCi0JREVGSU5FX1JFU19NRU0oMHhFNjUyMDAwMCwgMHg0MCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxOSkpLAotCS8qIEkyQzUgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTI4MDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDIwKSksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga29lbHNjaF9hZGRfaTJjKHVuc2lnbmVkIGlkeCkKLXsKLQl1bnNpZ25lZCByZXNfaWR4ID0gaWR4ICogMjsKLQotCUJVR19PTihyZXNfaWR4ID49IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlcykpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiaTJjLXJjYXJfZ2VuMiIsIGlkeCwKLQkJCQkJaTJjX3Jlc291cmNlcyArIHJlc19pZHgsIDIpOwotfQotCi0jZGVmaW5lIFNESElfUkVHVUxBVE9SKGlkeCwgdmRkX3BpbiwgdmNjcV9waW4pCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB2Y2Nfc2RoaSMjaWR4IyNfY29uc3VtZXIgPQlcCi0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJzaF9tb2JpbGVfc2RoaS4iICNpZHgpOwkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHZjY19zZGhpIyNpZHgjI19pbml0X2RhdGEgPSB7CQlcCi0JLmNvbnN0cmFpbnRzID0gewkJCQkJCVwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCQlcCi0JfSwJCQkJCQkJCVwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSAmdmNjX3NkaGkjI2lkeCMjX2NvbnN1bWVyLAkJXAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAkJCQkJXAotfTsJCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHZjY19zZGhpIyNpZHgjI19pbmZvIF9faW5pdGNvbnN0ID0ge1wKLQkuc3VwcGx5X25hbWUJPSAiU0RISSIgI2lkeCAiVmNjIiwJCQkJXAotCS5taWNyb3ZvbHRzCT0gMzMwMDAwMCwJCQkJCVwKLQkuZ3BpbwkJPSB2ZGRfcGluLAkJCQkJXAotCS5lbmFibGVfaGlnaAk9IDEsCQkJCQkJXAotCS5pbml0X2RhdGEJPSAmdmNjX3NkaGkjI2lkeCMjX2luaXRfZGF0YSwJCQlcCi19OwkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB2Y2NxX3NkaGkjI2lkeCMjX2NvbnN1bWVyID0JXAotCVJFR1VMQVRPUl9TVVBQTFkoInZxbW1jIiwgInNoX21vYmlsZV9zZGhpLiIgI2lkeCk7CQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmNjcV9zZGhpIyNpZHgjI19pbml0X2RhdGEgPSB7CVwKLQkuY29uc3RyYWludHMgPSB7CQkJCQkJXAotCQkuaW5wdXRfdVYJPSAzMzAwMDAwLAkJCQlcCi0JCS5taW5fdVYJCT0gMTgwMDAwMCwJCQkJXAotCQkubWF4X3VWCQk9IDMzMDAwMDAsCQkJCVwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwJCVwKLQkJCQkgIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAkJXAotCX0sCQkJCQkJCQlcCi0JLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnZjY3Ffc2RoaSMjaWR4IyNfY29uc3VtZXIsCQlcCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCQkJCQlcCi19OwkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZ3BpbyB2Y2NxX3NkaGkjI2lkeCMjX2dwaW8gPQkJCQlcCi0JeyB2Y2NxX3BpbiwgR1BJT0ZfT1VUX0lOSVRfSElHSCwgInZjY3Etc2RoaSIgI2lkeCB9OwkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBncGlvX3JlZ3VsYXRvcl9zdGF0ZSB2Y2NxX3NkaGkjI2lkeCMjX3N0YXRlc1tdID0gewlcCi0JeyAudmFsdWUgPSAxODAwMDAwLCAuZ3Bpb3MgPSAwIH0sCQkJCVwKLQl7IC52YWx1ZSA9IDMzMDAwMDAsIC5ncGlvcyA9IDEgfSwJCQkJXAotfTsJCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fcmVndWxhdG9yX2NvbmZpZyB2Y2NxX3NkaGkjI2lkeCMjX2luZm8gX19pbml0Y29uc3QgPSB7XAotCS5zdXBwbHlfbmFtZQk9ICJ2cW1tYyIsCQkJCQlcCi0JLmdwaW9zCQk9ICZ2Y2NxX3NkaGkjI2lkeCMjX2dwaW8sCQkJXAotCS5ucl9ncGlvcwk9IDEsCQkJCQkJXAotCS5zdGF0ZXMJCT0gdmNjcV9zZGhpIyNpZHgjI19zdGF0ZXMsCQkJXAotCS5ucl9zdGF0ZXMJPSBBUlJBWV9TSVpFKHZjY3Ffc2RoaSMjaWR4IyNfc3RhdGVzKSwJCVwKLQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXAotCS5pbml0X2RhdGEJPSAmdmNjcV9zZGhpIyNpZHgjI19pbml0X2RhdGEsCQkJXAotfTsKLQotU0RISV9SRUdVTEFUT1IoMCwgUkNBUl9HUF9QSU4oNywgMTcpLCBSQ0FSX0dQX1BJTigyLCAxMikpOwotU0RISV9SRUdVTEFUT1IoMSwgUkNBUl9HUF9QSU4oNywgMTgpLCBSQ0FSX0dQX1BJTigyLCAxMykpOwotU0RISV9SRUdVTEFUT1IoMiwgUkNBUl9HUF9QSU4oNywgMTkpLCBSQ0FSX0dQX1BJTigyLCAyNikpOwotCi0vKiBTREhJMCAqLwotc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9pbmZvIHNkaGkwX2luZm8gX19pbml0ZGF0YSA9IHsKLQkudG1pb19jYXBzCT0gTU1DX0NBUF9TRF9ISUdIU1BFRUQgfCBNTUNfQ0FQX1NESU9fSVJRIHwKLQkJCSAgTU1DX0NBUF9QT1dFUl9PRkZfQ0FSRCwKLQkudG1pb19mbGFncwk9IFRNSU9fTU1DX0hBU19JRExFX1dBSVQsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNkaGkwX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhlZTEwMDAwMCwgMHgyMDApLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTY1KSksCi19OwotCi0vKiBTREhJMSAqLwotc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9pbmZvIHNkaGkxX2luZm8gX19pbml0ZGF0YSA9IHsKLQkudG1pb19jYXBzCT0gTU1DX0NBUF9TRF9ISUdIU1BFRUQgfCBNTUNfQ0FQX1NESU9fSVJRIHwKLQkJCSAgTU1DX0NBUF9QT1dFUl9PRkZfQ0FSRCwKLQkudG1pb19mbGFncwk9IFRNSU9fTU1DX0hBU19JRExFX1dBSVQsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNkaGkxX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhlZTE0MDAwMCwgMHgxMDApLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTY3KSksCi19OwotCi0vKiBTREhJMiAqLwotc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9pbmZvIHNkaGkyX2luZm8gX19pbml0ZGF0YSA9IHsKLQkudG1pb19jYXBzCT0gTU1DX0NBUF9TRF9ISUdIU1BFRUQgfCBNTUNfQ0FQX1NESU9fSVJRIHwKLQkJCSAgTU1DX0NBUF9QT1dFUl9PRkZfQ0FSRCwKLQkudG1pb19mbGFncwk9IFRNSU9fTU1DX0hBU19JRExFX1dBSVQgfAotCQkJICBUTUlPX01NQ19XUlBST1RFQ1RfRElTQUJMRSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RoaTJfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKLQlERUZJTkVfUkVTX01FTSgweGVlMTYwMDAwLCAweDEwMCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxNjgpKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGluY3RybF9tYXAga29lbHNjaF9waW5jdHJsX21hcFtdID0gewotCS8qIERVICovCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgicmNhci1kdS1yOGE3NzkxIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJkdV9yZ2I2NjYiLCAiZHUiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyY2FyLWR1LXI4YTc3OTEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgImR1X3N5bmMiLCAiZHUiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyY2FyLWR1LXI4YTc3OTEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgImR1X2Nsa19vdXRfMCIsICJkdSIpLAotCS8qIEV0aGVyICovCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgicjhhNzc5MS1ldGhlciIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiZXRoX2xpbmsiLCAiZXRoIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgicjhhNzc5MS1ldGhlciIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiZXRoX21kaW8iLCAiZXRoIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgicjhhNzc5MS1ldGhlciIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiZXRoX3JtaWkiLCAiZXRoIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgicjhhNzc5MS1ldGhlciIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiaW50Y19pcnEwIiwgImludGMiKSwKLQkvKiBRU1BJICovCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgicXNwaS4wIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJxc3BpX2N0cmwiLCAicXNwaSIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInFzcGkuMCIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAicXNwaV9kYXRhNCIsICJxc3BpIiksCi0JLyogU0NJRjAgKENOMTk6IERFQlVHIFNFUklBTDApICovCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2gtc2NpLjYiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNjaWYwX2RhdGFfZCIsICJzY2lmMCIpLAotCS8qIFNDSUYxIChDTjIwOiBERUJVRyBTRVJJQUwxKSAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoLXNjaS43IiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJzY2lmMV9kYXRhX2QiLCAic2NpZjEiKSwKLQkvKiBJMkMxICovCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgiaTJjLXJjYXJfZ2VuMi4xIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJpMmMxX2UiLCAiaTJjMSIpLAotCS8qIEkyQzIgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJpMmMtcmNhcl9nZW4yLjIiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgImkyYzIiLCAiaTJjMiIpLAotCS8qIEkyQzQgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJpMmMtcmNhcl9nZW4yLjQiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgImkyYzRfYyIsICJpMmM0IiksCi0JLyogU0RISTAgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJzaF9tb2JpbGVfc2RoaS4wIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJzZGhpMF9kYXRhNCIsICJzZGhpMCIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjAiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkwX2N0cmwiLCAic2RoaTAiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJzaF9tb2JpbGVfc2RoaS4wIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJzZGhpMF9jZCIsICJzZGhpMCIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjAiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkwX3dwIiwgInNkaGkwIiksCi0JLyogU0RISTIgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJzaF9tb2JpbGVfc2RoaS4xIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJzZGhpMV9kYXRhNCIsICJzZGhpMSIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkxX2N0cmwiLCAic2RoaTEiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJzaF9tb2JpbGVfc2RoaS4xIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJzZGhpMV9jZCIsICJzZGhpMSIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkxX3dwIiwgInNkaGkxIiksCi0JLyogU0RISTIgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJzaF9tb2JpbGVfc2RoaS4yIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJzZGhpMl9kYXRhNCIsICJzZGhpMiIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjIiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkyX2N0cmwiLCAic2RoaTIiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJzaF9tb2JpbGVfc2RoaS4yIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJzZGhpMl9jZCIsICJzZGhpMiIpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGtvZWxzY2hfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlyOGE3NzkxX2Nsb2NrX2luaXQoKTsKLQlwaW5jdHJsX3JlZ2lzdGVyX21hcHBpbmdzKGtvZWxzY2hfcGluY3RybF9tYXAsCi0JCQkJICBBUlJBWV9TSVpFKGtvZWxzY2hfcGluY3RybF9tYXApKTsKLQlyOGE3NzkxX3Bpbm11eF9pbml0KCk7Ci0JcjhhNzc5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZldGhlcl9pbmZvKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAibGVkcy1ncGlvIiwgLTEsCi0JCQkJICAgICAgJmtvZWxzY2hfbGVkc19wZGF0YSwKLQkJCQkgICAgICBzaXplb2Yoa29lbHNjaF9sZWRzX3BkYXRhKSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoTlVMTCwgImdwaW8ta2V5cyIsIC0xLAotCQkJCSAgICAgICZrb2Vsc2NoX2tleXNfcGRhdGEsCi0JCQkJICAgICAgc2l6ZW9mKGtvZWxzY2hfa2V5c19wZGF0YSkpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAicXNwaSIsIDAsCi0JCQkJCSAgcXNwaV9yZXNvdXJjZXMsCi0JCQkJCSAgQVJSQVlfU0laRShxc3BpX3Jlc291cmNlcyksCi0JCQkJCSAgJnFzcGlfcGRhdGEsIHNpemVvZihxc3BpX3BkYXRhKSk7Ci0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpX2luZm8sIEFSUkFZX1NJWkUoc3BpX2luZm8pKTsKLQotCWtvZWxzY2hfYWRkX2R1X2RldmljZSgpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJnNhdGEwX2luZm8pOwotCi0Ja29lbHNjaF9hZGRfaTJjKDEpOwotCWtvZWxzY2hfYWRkX2kyYygyKTsKLQlrb2Vsc2NoX2FkZF9pMmMoNCk7Ci0Ja29lbHNjaF9hZGRfaTJjKDUpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoTlVMTCwgInJlZy1maXhlZC12b2x0YWdlIiwgMCwKLQkJCQkgICAgICAmdmNjX3NkaGkwX2luZm8sIHNpemVvZihzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcpKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAicmVnLWZpeGVkLXZvbHRhZ2UiLCAxLAotCQkJCSAgICAgICZ2Y2Nfc2RoaTFfaW5mbywgc2l6ZW9mKHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZykpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKE5VTEwsICJyZWctZml4ZWQtdm9sdGFnZSIsIDIsCi0JCQkJICAgICAgJnZjY19zZGhpMl9pbmZvLCBzaXplb2Yoc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnKSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoTlVMTCwgImdwaW8tcmVndWxhdG9yIiwgMCwKLQkJCQkgICAgICAmdmNjcV9zZGhpMF9pbmZvLCBzaXplb2Yoc3RydWN0IGdwaW9fcmVndWxhdG9yX2NvbmZpZykpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKE5VTEwsICJncGlvLXJlZ3VsYXRvciIsIDEsCi0JCQkJICAgICAgJnZjY3Ffc2RoaTFfaW5mbywgc2l6ZW9mKHN0cnVjdCBncGlvX3JlZ3VsYXRvcl9jb25maWcpKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAiZ3Bpby1yZWd1bGF0b3IiLCAyLAotCQkJCSAgICAgICZ2Y2NxX3NkaGkyX2luZm8sIHNpemVvZihzdHJ1Y3QgZ3Bpb19yZWd1bGF0b3JfY29uZmlnKSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgInNoX21vYmlsZV9zZGhpIiwgMCwKLQkJCQkJICBzZGhpMF9yZXNvdXJjZXMsIEFSUkFZX1NJWkUoc2RoaTBfcmVzb3VyY2VzKSwKLQkJCQkJICAmc2RoaTBfaW5mbywgc2l6ZW9mKHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9pbmZvKSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgInNoX21vYmlsZV9zZGhpIiwgMSwKLQkJCQkJICBzZGhpMV9yZXNvdXJjZXMsIEFSUkFZX1NJWkUoc2RoaTFfcmVzb3VyY2VzKSwKLQkJCQkJICAmc2RoaTFfaW5mbywgc2l6ZW9mKHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9pbmZvKSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgInNoX21vYmlsZV9zZGhpIiwgMiwKLQkJCQkJICBzZGhpMl9yZXNvdXJjZXMsIEFSUkFZX1NJWkUoc2RoaTJfcmVzb3VyY2VzKSwKLQkJCQkJICAmc2RoaTJfaW5mbywgc2l6ZW9mKHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9pbmZvKSk7Ci0KLX0KLQotLyoKLSAqIEV0aGVyIExFRHMgb24gdGhlIEtvZWxzY2ggYm9hcmQgYXJlIG5hbWVkIExJTksgYW5kIEFDVElWRSB3aGljaCBjb3JyZXNwb25kcwotICogdG8gbm9uLWRlZmF1bHQgMDEgc2V0dGluZyBvZiB0aGUgTWljcmVsIEtTWjgwNDEgUEhZIGNvbnRyb2wgcmVnaXN0ZXIgMSBiaXRzCi0gKiAxNC0xNS4gV2UgaGF2ZSB0byBzZXQgdGhlbSBiYWNrIHRvIDAxIGZyb20gdGhlIGRlZmF1bHQgMDAgdmFsdWUgZWFjaCB0aW1lCi0gKiB0aGUgUEhZIGlzIHJlc2V0LiBJdCdzIGFsc28gaW1wb3J0YW50IGJlY2F1c2UgdGhlIFBIWSdzIExFRDAgc2lnbmFsIGlzCi0gKiBjb25uZWN0ZWQgdG8gU29DJ3MgRVRIX0xJTksgc2lnbmFsIGFuZCBpbiB0aGUgUEhZJ3MgZGVmYXVsdCBtb2RlIGl0IHdpbGwKLSAqIGJvdW5jZSBvbiBhbmQgb2ZmIGFmdGVyIGVhY2ggcGFja2V0LCB3aGljaCB3ZSBhcHBhcmVudGx5IHdhbnQgdG8gYXZvaWQuCi0gKi8KLXN0YXRpYyBpbnQga29lbHNjaF9rc3o4MDQxX2ZpeHVwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0JdTE2IHBoeWN0cmwxID0gcGh5X3JlYWQocGh5ZGV2LCAweDFlKTsKLQotCXBoeWN0cmwxICY9IH4weGMwMDA7Ci0JcGh5Y3RybDEgfD0gMHg0MDAwOwotCXJldHVybiBwaHlfd3JpdGUocGh5ZGV2LCAweDFlLCBwaHljdHJsMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBrb2Vsc2NoX2luaXQodm9pZCkKLXsKLQlrb2Vsc2NoX2FkZF9zdGFuZGFyZF9kZXZpY2VzKCk7Ci0KLQlpcnFfc2V0X2lycV90eXBlKGlycV9waW4oMCksIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUEhZTElCKSkKLQkJcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl9pZCgicjhhNzc5MS1ldGhlci1mZjowMSIsCi0JCQkJCSAga29lbHNjaF9rc3o4MDQxX2ZpeHVwKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBrb2Vsc2NoX2JvYXJkc19jb21wYXRfZHRbXSBfX2luaXRjb25zdCA9IHsKLQkicmVuZXNhcyxrb2Vsc2NoIiwKLQlOVUxMLAotfTsKLQotRFRfTUFDSElORV9TVEFSVChLT0VMU0NIX0RULCAia29lbHNjaCIpCi0JLnNtcAkJPSBzbXBfb3BzKHI4YTc3OTFfc21wX29wcyksCi0JLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAotCS5pbml0X3RpbWUJPSByY2FyX2dlbjJfdGltZXJfaW5pdCwKLQkuaW5pdF9tYWNoaW5lCT0ga29lbHNjaF9pbml0LAotCS5pbml0X2xhdGUJPSBzaG1vYmlsZV9pbml0X2xhdGUsCi0JLnJlc2VydmUJPSByY2FyX2dlbjJfcmVzZXJ2ZSwKLQkuZHRfY29tcGF0CT0ga29lbHNjaF9ib2FyZHNfY29tcGF0X2R0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta3ptOWctcmVmZXJlbmNlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWt6bTlnLXJlZmVyZW5jZS5jCmluZGV4IGQ5Y2RmOWEuLjJlODJlNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta3ptOWctcmVmZXJlbmNlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy1yZWZlcmVuY2UuYwpAQCAtMTQsMTAgKzE0LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTQzLDYgKzM5LDEzIEBACiAjZW5kaWYKIH0KIAorI2RlZmluZSBSRVNDTlQyIElPTUVNKDB4ZTYxODgwMjApCitzdGF0aWMgdm9pZCBrem05Z19yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qIERvIHNvZnQgcG93ZXIgb24gcmVzZXQgKi8KKwl3cml0ZWwoKDEgPDwgMzEpLCBSRVNDTlQyKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKmt6bTlnX2JvYXJkc19jb21wYXRfZHRbXSBfX2luaXRkYXRhID0gewogCSJyZW5lc2FzLGt6bTlnLXJlZmVyZW5jZSIsCiAJTlVMTCwKQEAgLTU0LDUgKzU3LDYgQEAKIAkuaW5pdF9lYXJseQk9IHNobW9iaWxlX2luaXRfZGVsYXksCiAJLmluaXRfbWFjaGluZQk9IGt6bV9pbml0LAogCS5pbml0X2xhdGUJPSBzaG1vYmlsZV9pbml0X2xhdGUsCisJLnJlc3RhcnQJPSBrem05Z19yZXN0YXJ0LAogCS5kdF9jb21wYXQJPSBrem05Z19ib2FyZHNfY29tcGF0X2R0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta3ptOWcuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta3ptOWcuYwppbmRleCA3N2UzNmZhLi43YzliNjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWt6bTlnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci1yZWZlcmVuY2UuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXItcmVmZXJlbmNlLmMKaW5kZXggYmM0YjQ4My4uZmEwNmJkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci1yZWZlcmVuY2UuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLXJlZmVyZW5jZS5jCkBAIC0xMiwxMDAgKzEyLDE3IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9yY2FyLWR1Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKLSNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImlycXMuaCIKICNpbmNsdWRlICJyOGE3NzkwLmgiCiAjaW5jbHVkZSAicmNhci1nZW4yLmgiCiAKLS8qIERVICovCi1zdGF0aWMgc3RydWN0IHJjYXJfZHVfZW5jb2Rlcl9kYXRhIGxhZ2VyX2R1X2VuY29kZXJzW10gPSB7Ci0JewotCQkudHlwZSA9IFJDQVJfRFVfRU5DT0RFUl9WR0EsCi0JCS5vdXRwdXQgPSBSQ0FSX0RVX09VVFBVVF9EUEFEMCwKLQl9LCB7Ci0JCS50eXBlID0gUkNBUl9EVV9FTkNPREVSX05PTkUsCi0JCS5vdXRwdXQgPSBSQ0FSX0RVX09VVFBVVF9MVkRTMSwKLQkJLmNvbm5lY3Rvci5sdmRzLnBhbmVsID0gewotCQkJLndpZHRoX21tID0gMjEwLAotCQkJLmhlaWdodF9tbSA9IDE1OCwKLQkJCS5tb2RlID0gewotCQkJCS5waXhlbGNsb2NrID0gNjUwMDAwMDAsCi0JCQkJLmhhY3RpdmUgPSAxMDI0LAotCQkJCS5oZnJvbnRfcG9yY2ggPSAyMCwKLQkJCQkuaGJhY2tfcG9yY2ggPSAxNjAsCi0JCQkJLmhzeW5jX2xlbiA9IDEzNiwKLQkJCQkudmFjdGl2ZSA9IDc2OCwKLQkJCQkudmZyb250X3BvcmNoID0gMywKLQkJCQkudmJhY2tfcG9yY2ggPSAyOSwKLQkJCQkudnN5bmNfbGVuID0gNiwKLQkJCX0sCi0JCX0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNhcl9kdV9wbGF0Zm9ybV9kYXRhIGxhZ2VyX2R1X3BkYXRhID0gewotCS5lbmNvZGVycyA9IGxhZ2VyX2R1X2VuY29kZXJzLAotCS5udW1fZW5jb2RlcnMgPSBBUlJBWV9TSVpFKGxhZ2VyX2R1X2VuY29kZXJzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgZHVfcmVzb3VyY2VzW10gX19pbml0Y29uc3QgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhmZWIwMDAwMCwgMHg3MDAwMCksCi0JREVGSU5FX1JFU19NRU1fTkFNRUQoMHhmZWI5MDAwMCwgMHgxYywgImx2ZHMuMCIpLAotCURFRklORV9SRVNfTUVNX05BTUVEKDB4ZmViOTQwMDAsIDB4MWMsICJsdmRzLjEiKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI1NikpLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjY4KSksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyNjkpKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBsYWdlcl9hZGRfZHVfZGV2aWNlKHZvaWQpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGluZm8gPSB7Ci0JCS5uYW1lID0gInJjYXItZHUtcjhhNzc5MCIsCi0JCS5pZCA9IC0xLAotCQkucmVzID0gZHVfcmVzb3VyY2VzLAotCQkubnVtX3JlcyA9IEFSUkFZX1NJWkUoZHVfcmVzb3VyY2VzKSwKLQkJLmRhdGEgPSAmbGFnZXJfZHVfcGRhdGEsCi0JCS5zaXplX2RhdGEgPSBzaXplb2YobGFnZXJfZHVfcGRhdGEpLAotCQkuZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCX07Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgmaW5mbyk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIGEgcmVhbGx5IGNydWRlIGhhY2sgdG8gcHJvdmlkZSBjbGtkZXYgc3VwcG9ydCB0byBwbGF0Zm9ybQotICogZGV2aWNlcyB1bnRpbCB0aGV5IGdldCBtb3ZlZCB0byBEVC4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfbmFtZSBjbGtfbmFtZXNbXSBfX2luaXRjb25zdCA9IHsKLQl7ICJkdTAiLCAiZHUuMCIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCi0JeyAiZHUxIiwgImR1LjEiLCAicmNhci1kdS1yOGE3NzkwIiB9LAotCXsgImR1MiIsICJkdS4yIiwgInJjYXItZHUtcjhhNzc5MCIgfSwKLQl7ICJsdmRzMCIsICJsdmRzLjAiLCAicmNhci1kdS1yOGE3NzkwIiB9LAotCXsgImx2ZHMxIiwgImx2ZHMuMSIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbGFnZXJfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjbGtfbmFtZXMsIEFSUkFZX1NJWkUoY2xrX25hbWVzKSwgZmFsc2UpOwotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLQotCWxhZ2VyX2FkZF9kdV9kZXZpY2UoKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKmxhZ2VyX2JvYXJkc19jb21wYXRfZHRbXSBfX2luaXRkYXRhID0gewogCSJyZW5lc2FzLGxhZ2VyIiwKIAkicmVuZXNhcyxsYWdlci1yZWZlcmVuY2UiLApAQCAtMTE2LDcgKzMzLDYgQEAKIAkuc21wCQk9IHNtcF9vcHMocjhhNzc5MF9zbXBfb3BzKSwKIAkuaW5pdF9lYXJseQk9IHNobW9iaWxlX2luaXRfZGVsYXksCiAJLmluaXRfdGltZQk9IHJjYXJfZ2VuMl90aW1lcl9pbml0LAotCS5pbml0X21hY2hpbmUJPSBsYWdlcl9hZGRfc3RhbmRhcmRfZGV2aWNlcywKIAkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLAogCS5yZXNlcnZlCT0gcmNhcl9nZW4yX3Jlc2VydmUsCiAJLmR0X2NvbXBhdAk9IGxhZ2VyX2JvYXJkc19jb21wYXRfZHQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMKaW5kZXggNTcxMzI3Yi4uYjQ3MjYyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXIuYwpAQCAtMTMsMTAgKzEzLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCmluZGV4IGNhNWQzNGIuLmVkMTA4NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKQEAgLTE2LDEwICsxNiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYXJ6ZW4tcmVmZXJlbmNlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hcnplbi1yZWZlcmVuY2UuYwppbmRleCAzOGQ5Y2RkLi5iMTVlYjkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hcnplbi1yZWZlcmVuY2UuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hcnplbi1yZWZlcmVuY2UuYwpAQCAtMTMsMTAgKzEzLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2xrL3NobW9iaWxlLmg+CkBAIC0yNiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiaXJxcy5oIgogI2luY2x1ZGUgInI4YTc3NzkuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hcnplbi5jCmluZGV4IGNlMzNkNzguLjk5NGRjN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYXJ6ZW4uYwpAQCAtMTMsMTAgKzEzLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTczYTQuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzNhNC5jCmluZGV4IGMyMzMwZWEuLjFjZjQ0ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzNhNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzNhNC5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NDAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc0MC5jCmluZGV4IDA3OTRmMDQuLjljYWM4MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc0MC5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC00NTUsNyArNDUxLDcgQEAKIAlNU1RQMTI4LCBNU1RQMTI3LCBNU1RQMTI1LAogCU1TVFAxMTYsIE1TVFAxMTEsIE1TVFAxMDAsIE1TVFAxMTcsCiAKLQlNU1RQMjMwLAorCU1TVFAyMzAsIE1TVFAyMjksCiAJTVNUUDIyMiwKIAlNU1RQMjE4LCBNU1RQMjE3LCBNU1RQMjE2LCBNU1RQMjE0LAogCU1TVFAyMDcsIE1TVFAyMDYsIE1TVFAyMDQsIE1TVFAyMDMsIE1TVFAyMDIsIE1TVFAyMDEsIE1TVFAyMDAsCkBAIC00NzQsMTEgKzQ3MCwxMiBAQAogCVtNU1RQMTI3XSA9IFNIX0NMS19NU1RQMzIoJmRpdjRfY2xrc1tESVY0X1NdLAlTTVNUUENSMSwgMjcsIDApLCAvKiBDRVUyMCAqLwogCVtNU1RQMTI1XSA9IFNIX0NMS19NU1RQMzIoJmRpdjZfY2xrc1tESVY2X1NVQl0sCVNNU1RQQ1IxLCAyNSwgMCksIC8qIFRNVTAgKi8KIAlbTVNUUDExN10gPSBTSF9DTEtfTVNUUDMyKCZkaXY0X2Nsa3NbRElWNF9CXSwJU01TVFBDUjEsIDE3LCAwKSwgLyogTENEQzEgKi8KLQlbTVNUUDExNl0gPSBTSF9DTEtfTVNUUDMyKCZkaXY2X2Nsa3NbRElWNl9TVUJdLAlTTVNUUENSMSwgMTYsIDApLCAvKiBJSUMwICovCisJW01TVFAxMTZdID0gU0hfQ0xLX01TVFAzMigmZGl2NF9jbGtzW0RJVjRfSFBQXSwJU01TVFBDUjEsIDE2LCAwKSwgLyogSUlDMCAqLwogCVtNU1RQMTExXSA9IFNIX0NMS19NU1RQMzIoJmRpdjZfY2xrc1tESVY2X1NVQl0sCVNNU1RQQ1IxLCAxMSwgMCksIC8qIFRNVTEgKi8KIAlbTVNUUDEwMF0gPSBTSF9DTEtfTVNUUDMyKCZkaXY0X2Nsa3NbRElWNF9CXSwJU01TVFBDUjEsICAwLCAwKSwgLyogTENEQzAgKi8KIAogCVtNU1RQMjMwXSA9IFNIX0NMS19NU1RQMzIoJmRpdjZfY2xrc1tESVY2X1NVQl0sCVNNU1RQQ1IyLCAzMCwgMCksIC8qIFNDSUZBNiAqLworCVtNU1RQMjI5XSA9IFNIX0NMS19NU1RQMzIoJmRpdjRfY2xrc1tESVY0X0hQXSwJU01TVFBDUjIsIDI5LCAwKSwgLyogSU5UQ0EgKi8KIAlbTVNUUDIyMl0gPSBTSF9DTEtfTVNUUDMyKCZkaXY2X2Nsa3NbRElWNl9TVUJdLAlTTVNUUENSMiwgMjIsIDApLCAvKiBTQ0lGQTcgKi8KIAlbTVNUUDIxOF0gPSBTSF9DTEtfTVNUUDMyKCZkaXY0X2Nsa3NbRElWNF9IUF0sICBTTVNUUENSMiwgMTgsIDApLCAvKiBETUFDMSAqLwogCVtNU1RQMjE3XSA9IFNIX0NMS19NU1RQMzIoJmRpdjRfY2xrc1tESVY0X0hQXSwgIFNNU1RQQ1IyLCAxNywgMCksIC8qIERNQUMyICovCkBAIC01NzUsNiArNTcyLDEwIEBACiAJQ0xLREVWX0RFVl9JRCgic2gtZG1hLWVuZ2luZS4wIiwJJm1zdHBfY2xrc1tNU1RQMjE4XSksCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjciLAkJJm1zdHBfY2xrc1tNU1RQMjIyXSksCiAJQ0xLREVWX0RFVl9JRCgiZTZjZDAwMDAuc2VyaWFsIiwJJm1zdHBfY2xrc1tNU1RQMjIyXSksCisJQ0xLREVWX0RFVl9JRCgicmVuZXNhc19pbnRjX2lycXBpbi4wIiwJJm1zdHBfY2xrc1tNU1RQMjI5XSksCisJQ0xLREVWX0RFVl9JRCgicmVuZXNhc19pbnRjX2lycXBpbi4xIiwJJm1zdHBfY2xrc1tNU1RQMjI5XSksCisJQ0xLREVWX0RFVl9JRCgicmVuZXNhc19pbnRjX2lycXBpbi4yIiwJJm1zdHBfY2xrc1tNU1RQMjI5XSksCisJQ0xLREVWX0RFVl9JRCgicmVuZXNhc19pbnRjX2lycXBpbi4zIiwJJm1zdHBfY2xrc1tNU1RQMjI5XSksCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjYiLAkJJm1zdHBfY2xrc1tNU1RQMjMwXSksCiAJQ0xLREVWX0RFVl9JRCgiZTZjYzAwMDAuc2VyaWFsIiwJJm1zdHBfY2xrc1tNU1RQMjMwXSksCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc3OC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc4LmMKaW5kZXggNjc5ODBhMC4uZTg1MTBjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc4LmMKQEAgLTE3LDEwICsxNyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc5LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYwppbmRleCBjNTFmOWRiLi5mYThhYjJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTAuYwppbmRleCAxMjZkZGFmLi5mOWJiYzVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTAuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtNjgsNyArNjQsNyBAQAogCiAjZGVmaW5lIFNEQ0tDUgkJMHhFNjE1MDA3NAogI2RlZmluZSBTRDJDS0NSCQkweEU2MTUwMDc4Ci0jZGVmaW5lIFNEM0NLQ1IJCTB4RTYxNTAwN0MKKyNkZWZpbmUgU0QzQ0tDUgkJMHhFNjE1MDI2QwogI2RlZmluZSBNTUMwQ0tDUgkweEU2MTUwMjQwCiAjZGVmaW5lIE1NQzFDS0NSCTB4RTYxNTAyNDQKICNkZWZpbmUgU1NQQ0tDUgkJMHhFNjE1MDI0OApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkxLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUzYjIzMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTEuYworKysgL2Rldi9udWxsCkBAIC0xLDM0MiArMCwwIEBACi0vKgotICogcjhhNzc5MSBjbG9jayBmcmFtZXdvcmsgc3VwcG9ydAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyAgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IChDKSAyMDEzICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDEzICBNYWdudXMgRGFtbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zaF9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgInJjYXItZ2VuMi5oIgotCi0vKgotICogICBNRAkJRVhUQUwJCVBMTDAJUExMMQlQTEwzCi0gKiAxNCAxMyAxOQkoTUh6KQkJKjEJKjEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAwICAwICAwCTE1IHggMQkJeDE3Mi8yCXgyMDgvMgl4MTA2Ci0gKiAwICAwICAxCTE1IHggMQkJeDE3Mi8yCXgyMDgvMgl4ODgKLSAqIDAgIDEgIDAJMjAgeCAxCQl4MTMwLzIJeDE1Ni8yCXg4MAotICogMCAgMSAgMQkyMCB4IDEJCXgxMzAvMgl4MTU2LzIJeDY2Ci0gKiAxICAwICAwCTI2IC8gMgkJeDIwMC8yCXgyNDAvMgl4MTIyCi0gKiAxICAwICAxCTI2IC8gMgkJeDIwMC8yCXgyNDAvMgl4MTAyCi0gKiAxICAxICAwCTMwIC8gMgkJeDE3Mi8yCXgyMDgvMgl4MTA2Ci0gKiAxICAxICAxCTMwIC8gMgkJeDE3Mi8yCXgyMDgvMgl4ODgKLSAqCi0gKiAqMSA6CVRhYmxlIDcuNiBpbmRpY2F0ZXMgVkNPIG91cHV0IChQTEx4ID0gVkNPLzIpCi0gKglzZWUgInAxIC8gMiIgb24gUjhBNzc5MV9DTE9DS19ST09UKCkgYmVsb3cKLSAqLwotCi0jZGVmaW5lIENQR19CQVNFIDB4ZTYxNTAwMDAKLSNkZWZpbmUgQ1BHX0xFTiAweDEwMDAKLQotI2RlZmluZSBTTVNUUENSMAkweEU2MTUwMTMwCi0jZGVmaW5lIFNNU1RQQ1IxCTB4RTYxNTAxMzQKLSNkZWZpbmUgU01TVFBDUjIJMHhlNjE1MDEzOAotI2RlZmluZSBTTVNUUENSMwkweEU2MTUwMTNDCi0jZGVmaW5lIFNNU1RQQ1I1CTB4RTYxNTAxNDQKLSNkZWZpbmUgU01TVFBDUjcJMHhlNjE1MDE0YwotI2RlZmluZSBTTVNUUENSOAkweEU2MTUwOTkwCi0jZGVmaW5lIFNNU1RQQ1I5CTB4RTYxNTA5OTQKLSNkZWZpbmUgU01TVFBDUjEwCTB4RTYxNTA5OTgKLSNkZWZpbmUgU01TVFBDUjExCTB4RTYxNTA5OUMKLQotI2RlZmluZSBNU1RQU1IxCQlJT01FTSgweGU2MTUwMDM4KQotI2RlZmluZSBNU1RQU1IyCQlJT01FTSgweGU2MTUwMDQwKQotI2RlZmluZSBNU1RQU1IzCQlJT01FTSgweGU2MTUwMDQ4KQotI2RlZmluZSBNU1RQU1I1CQlJT01FTSgweGU2MTUwMDNjKQotI2RlZmluZSBNU1RQU1I3CQlJT01FTSgweGU2MTUwMWM0KQotI2RlZmluZSBNU1RQU1I4CQlJT01FTSgweGU2MTUwOWEwKQotI2RlZmluZSBNU1RQU1I5CQlJT01FTSgweGU2MTUwOWE0KQotI2RlZmluZSBNU1RQU1IxMQlJT01FTSgweGU2MTUwOWFjKQotCi0jZGVmaW5lIFNEQ0tDUgkJMHhFNjE1MDA3NAotI2RlZmluZSBTRDFDS0NSCQkweEU2MTUwMDc4Ci0jZGVmaW5lIFNEMkNLQ1IJCTB4RTYxNTAyNmMKLSNkZWZpbmUgTU1DMENLQ1IJMHhFNjE1MDI0MAotI2RlZmluZSBNTUMxQ0tDUgkweEU2MTUwMjQ0Ci0jZGVmaW5lIFNTUENLQ1IJCTB4RTYxNTAyNDgKLSNkZWZpbmUgU1NQUlNDS0NSCTB4RTYxNTAyNEMKLQotc3RhdGljIHN0cnVjdCBjbGtfbWFwcGluZyBjcGdfbWFwcGluZyA9IHsKLQkucGh5cyAgID0gQ1BHX0JBU0UsCi0JLmxlbiAgICA9IENQR19MRU4sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBleHRhbF9jbGsgPSB7Ci0JLyogLnJhdGUgd2lsbCBiZSB1cGRhdGVkIG9uIHI4YTc3OTFfY2xvY2tfaW5pdCgpICovCi0JLm1hcHBpbmcJPSAmY3BnX21hcHBpbmcsCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX2Nsa19vcHMgZm9sbG93cGFyZW50X2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwk9IGZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtYWluX2NsayA9IHsKLQkvKiAucGFyZW50IHdpbGwgYmUgc2V0IHI4YTczYTRfY2xvY2tfaW5pdCAqLwotCS5vcHMJPSAmZm9sbG93cGFyZW50X2Nsa19vcHMsCi19OwotCi0vKgotICogY2xvY2sgcmF0aW8gb2YgdGhlc2UgY2xvY2sgd2lsbCBiZSB1cGRhdGVkCi0gKiBvbiByOGE3NzkxX2Nsb2NrX2luaXQoKQotICovCi1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKHBsbDFfY2xrLAkJbWFpbl9jbGssCTEsIDEpOwotU0hfRklYRURfUkFUSU9fQ0xLX1NFVChwbGwzX2NsaywJCW1haW5fY2xrLAkxLCAxKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQocXNwaV9jbGssCQlwbGwxX2NsaywJMSwgMSk7Ci0KLS8qIGZpeGVkIHJhdGlvIGNsb2NrICovCi1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKGV4dGFsX2RpdjJfY2xrLAkJZXh0YWxfY2xrLAkxLCAyKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoY3BfY2xrLAkJCWV4dGFsX2NsaywJMSwgMik7Ci0KLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQocGxsMV9kaXYyX2NsaywJCXBsbDFfY2xrLAkxLCAyKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoaHBfY2xrLAkJCXBsbDFfY2xrLAkxLCAxMik7Ci1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKHBfY2xrLAkJCXBsbDFfY2xrLAkxLCAyNCk7Ci1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKHJjbGtfY2xrLAkJcGxsMV9jbGssCTEsICg0OCAqIDEwMjQpKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQobXBfY2xrLAkJCXBsbDFfZGl2Ml9jbGssCTEsIDE1KTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoemdfY2xrLAkJCXBsbDFfY2xrLAkxLCAzKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoenhfY2xrLAkJCXBsbDFfY2xrLAkxLCAzKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoenNfY2xrLAkJCXBsbDFfY2xrLAkxLCA2KTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKm1haW5fY2xrc1tdID0gewotCSZleHRhbF9jbGssCi0JJmV4dGFsX2RpdjJfY2xrLAotCSZtYWluX2NsaywKLQkmcGxsMV9jbGssCi0JJnBsbDFfZGl2Ml9jbGssCi0JJnBsbDNfY2xrLAotCSZocF9jbGssCi0JJnBfY2xrLAotCSZxc3BpX2NsaywKLQkmcmNsa19jbGssCi0JJm1wX2NsaywKLQkmY3BfY2xrLAotCSZ6Z19jbGssCi0JJnp4X2NsaywKLQkmenNfY2xrLAotfTsKLQotLyogU0RISSAoRElWNCkgY2xvY2sgKi8KLXN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAxOCwgMjQsIDAsIDM2LCA0OCwgMTAgfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKLQkuZGl2aXNvcnMgPSBkaXZpc29ycywKLQkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKLQkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKLX07Ci0KLWVudW0gewotCURJVjRfU0RILCBESVY0X1NEMCwKLQlESVY0X05SCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkaXY0X2Nsa3NbRElWNF9OUl0gPSB7Ci0JW0RJVjRfU0RIXSA9IFNIX0NMS19ESVY0KCZwbGwxX2NsaywgU0RDS0NSLCA4LCAweDBkZmYsIENMS19FTkFCTEVfT05fSU5JVCksCi0JW0RJVjRfU0QwXSA9IFNIX0NMS19ESVY0KCZwbGwxX2NsaywgU0RDS0NSLCA0LCAweDFkZjAsIENMS19FTkFCTEVfT05fSU5JVCksCi19OwotCi0vKiBESVY2IGNsb2NrcyAqLwotZW51bSB7Ci0JRElWNl9TRDEsIERJVjZfU0QyLAotCURJVjZfTlIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tESVY2X05SXSA9IHsKLQlbRElWNl9TRDFdCT0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIFNEMUNLQ1IsIDApLAotCVtESVY2X1NEMl0JPSBTSF9DTEtfRElWNigmcGxsMV9kaXYyX2NsaywgU0QyQ0tDUiwgMCksCi19OwotCi0vKiBNU1RQICovCi1lbnVtIHsKLQlNU1RQMTEwOCwgTVNUUDExMDcsIE1TVFAxMTA2LAotCU1TVFA5MzEsIE1TVFA5MzAsIE1TVFA5MjksIE1TVFA5MjgsIE1TVFA5MjcsIE1TVFA5MjUsCi0JTVNUUDkxNywKLQlNU1RQODE1LCBNU1RQODE0LAotCU1TVFA4MTMsCi0JTVNUUDgxMSwgTVNUUDgxMCwgTVNUUDgwOSwKLQlNU1RQNzI2LCBNU1RQNzI0LCBNU1RQNzIzLCBNU1RQNzIxLCBNU1RQNzIwLAotCU1TVFA3MTksIE1TVFA3MTgsIE1TVFA3MTUsIE1TVFA3MTQsCi0JTVNUUDUyMiwKLQlNU1RQMzE0LCBNU1RQMzEyLCBNU1RQMzExLAotCU1TVFAyMTYsIE1TVFAyMDcsIE1TVFAyMDYsCi0JTVNUUDIwNCwgTVNUUDIwMywgTVNUUDIwMiwKLQlNU1RQMTI0LAotCU1TVFBfTlIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tNU1RQX05SXSA9IHsKLQlbTVNUUDExMDhdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjExLCA4LCBNU1RQU1IxMSwgMCksIC8qIFNDSUZBNSAqLwotCVtNU1RQMTEwN10gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMTEsIDcsIE1TVFBTUjExLCAwKSwgLyogU0NJRkE0ICovCi0JW01TVFAxMTA2XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZtcF9jbGssIFNNU1RQQ1IxMSwgNiwgTVNUUFNSMTEsIDApLCAvKiBTQ0lGQTMgKi8KLQlbTVNUUDkzMV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmaHBfY2xrLCBTTVNUUENSOSwgMzEsIE1TVFBTUjksIDApLCAvKiBJMkMwICovCi0JW01TVFA5MzBdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDMwLCBNU1RQU1I5LCAwKSwgLyogSTJDMSAqLwotCVtNU1RQOTI5XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZocF9jbGssIFNNU1RQQ1I5LCAyOSwgTVNUUFNSOSwgMCksIC8qIEkyQzIgKi8KLQlbTVNUUDkyOF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmaHBfY2xrLCBTTVNUUENSOSwgMjgsIE1TVFBTUjksIDApLCAvKiBJMkMzICovCi0JW01TVFA5MjddID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDI3LCBNU1RQU1I5LCAwKSwgLyogSTJDNCAqLwotCVtNU1RQOTI1XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZocF9jbGssIFNNU1RQQ1I5LCAyNSwgTVNUUFNSOSwgMCksIC8qIEkyQzUgKi8KLQlbTVNUUDkxN10gPSBTSF9DTEtfTVNUUDMyX1NUUygmcXNwaV9jbGssIFNNU1RQQ1I5LCAxNywgTVNUUFNSOSwgMCksIC8qIFFTUEkgKi8KLQlbTVNUUDgxNV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmenNfY2xrLCBTTVNUUENSOCwgMTUsIE1TVFBTUjgsIDApLCAvKiBTQVRBMCAqLwotCVtNU1RQODE0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZ6c19jbGssIFNNU1RQQ1I4LCAxNCwgTVNUUFNSOCwgMCksIC8qIFNBVEExICovCi0JW01TVFA4MTNdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSOCwgMTMsIE1TVFBTUjgsIDApLCAvKiBFdGhlciAqLwotCVtNU1RQODExXSA9IFNIX0NMS19NU1RQMzJfU1RTKCZ6Z19jbGssIFNNU1RQQ1I4LCAxMSwgTVNUUFNSOCwgMCksIC8qIFZJTjAgKi8KLQlbTVNUUDgxMF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmemdfY2xrLCBTTVNUUENSOCwgMTAsIE1TVFBTUjgsIDApLCAvKiBWSU4xICovCi0JW01TVFA4MDldID0gU0hfQ0xLX01TVFAzMl9TVFMoJnpnX2NsaywgU01TVFBDUjgsIDksIE1TVFBTUjgsIDApLCAvKiBWSU4yICovCi0JW01TVFA3MjZdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnp4X2NsaywgU01TVFBDUjcsIDI2LCBNU1RQU1I3LCAwKSwgLyogTFZEUzAgKi8KLQlbTVNUUDcyNF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmenhfY2xrLCBTTVNUUENSNywgMjQsIE1TVFBTUjcsIDApLCAvKiBEVTAgKi8KLQlbTVNUUDcyM10gPSBTSF9DTEtfTVNUUDMyX1NUUygmenhfY2xrLCBTTVNUUENSNywgMjMsIE1TVFBTUjcsIDApLCAvKiBEVTEgKi8KLQlbTVNUUDcyMV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmcF9jbGssIFNNU1RQQ1I3LCAyMSwgTVNUUFNSNywgMCksIC8qIFNDSUYwICovCi0JW01TVFA3MjBdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSNywgMjAsIE1TVFBTUjcsIDApLCAvKiBTQ0lGMSAqLwotCVtNU1RQNzE5XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjcsIDE5LCBNU1RQU1I3LCAwKSwgLyogU0NJRjIgKi8KLQlbTVNUUDcxOF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmcF9jbGssIFNNU1RQQ1I3LCAxOCwgTVNUUFNSNywgMCksIC8qIFNDSUYzICovCi0JW01TVFA3MTVdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSNywgMTUsIE1TVFBTUjcsIDApLCAvKiBTQ0lGNCAqLwotCVtNU1RQNzE0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjcsIDE0LCBNU1RQU1I3LCAwKSwgLyogU0NJRjUgKi8KLQlbTVNUUDUyMl0gPSBTSF9DTEtfTVNUUDMyX1NUUygmZXh0YWxfY2xrLCBTTVNUUENSNSwgMjIsIE1TVFBTUjUsIDApLCAvKiBUaGVybWFsICovCi0JW01TVFAzMTRdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmRpdjRfY2xrc1tESVY0X1NEMF0sIFNNU1RQQ1IzLCAxNCwgTVNUUFNSMywgMCksIC8qIFNESEkwICovCi0JW01TVFAzMTJdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmRpdjZfY2xrc1tESVY2X1NEMV0sIFNNU1RQQ1IzLCAxMiwgTVNUUFNSMywgMCksIC8qIFNESEkxICovCi0JW01TVFAzMTFdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmRpdjZfY2xrc1tESVY2X1NEMl0sIFNNU1RQQ1IzLCAxMSwgTVNUUFNSMywgMCksIC8qIFNESEkyICovCi0JW01TVFAyMTZdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjIsIDE2LCBNU1RQU1IyLCAwKSwgLyogU0NJRkIyICovCi0JW01TVFAyMDddID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjIsIDcsIE1TVFBTUjIsIDApLCAvKiBTQ0lGQjEgKi8KLQlbTVNUUDIwNl0gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMiwgNiwgTVNUUFNSMiwgMCksIC8qIFNDSUZCMCAqLwotCVtNU1RQMjA0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZtcF9jbGssIFNNU1RQQ1IyLCA0LCBNU1RQU1IyLCAwKSwgLyogU0NJRkEwICovCi0JW01TVFAyMDNdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjIsIDMsIE1TVFBTUjIsIDApLCAvKiBTQ0lGQTEgKi8KLQlbTVNUUDIwMl0gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMiwgMiwgTVNUUFNSMiwgMCksIC8qIFNDSUZBMiAqLwotCVtNU1RQMTI0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZyY2xrX2NsaywgU01TVFBDUjEsIDI0LCBNU1RQU1IxLCAwKSwgLyogQ01UMCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQotCS8qIG1haW4gY2xvY2tzICovCi0JQ0xLREVWX0NPTl9JRCgiZXh0YWwiLAkJJmV4dGFsX2NsayksCi0JQ0xLREVWX0NPTl9JRCgiZXh0YWxfZGl2MiIsCSZleHRhbF9kaXYyX2NsayksCi0JQ0xLREVWX0NPTl9JRCgibWFpbiIsCQkmbWFpbl9jbGspLAotCUNMS0RFVl9DT05fSUQoInBsbDEiLAkJJnBsbDFfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwbGwxX2RpdjIiLAkmcGxsMV9kaXYyX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGxsMyIsCQkmcGxsM19jbGspLAotCUNMS0RFVl9DT05fSUQoInpnIiwJCSZ6Z19jbGspLAotCUNMS0RFVl9DT05fSUQoInpzIiwJCSZ6c19jbGspLAotCUNMS0RFVl9DT05fSUQoImhwIiwJCSZocF9jbGspLAotCUNMS0RFVl9DT05fSUQoInAiLAkJJnBfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJxc3BpIiwJCSZxc3BpX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicmNsayIsCQkmcmNsa19jbGspLAotCUNMS0RFVl9DT05fSUQoIm1wIiwJCSZtcF9jbGspLAotCUNMS0RFVl9DT05fSUQoImNwIiwJCSZjcF9jbGspLAotCUNMS0RFVl9DT05fSUQoInBlcmlwaGVyYWxfY2xrIiwgJmhwX2NsayksCi0KLQkvKiBNU1RQICovCi0JQ0xLREVWX0lDS19JRCgibHZkcy4wIiwgInJjYXItZHUtcjhhNzc5MSIsICZtc3RwX2Nsa3NbTVNUUDcyNl0pLAotCUNMS0RFVl9JQ0tfSUQoImR1LjAiLCAicmNhci1kdS1yOGE3NzkxIiwgJm1zdHBfY2xrc1tNU1RQNzI0XSksCi0JQ0xLREVWX0lDS19JRCgiZHUuMSIsICJyY2FyLWR1LXI4YTc3OTEiLCAmbXN0cF9jbGtzW01TVFA3MjNdKSwKLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMCIsICZtc3RwX2Nsa3NbTVNUUDIwNF0pLCAvKiBTQ0lGQTAgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbTVNUUDIwM10pLCAvKiBTQ0lGQTEgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMiIsICZtc3RwX2Nsa3NbTVNUUDIwNl0pLCAvKiBTQ0lGQjAgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMyIsICZtc3RwX2Nsa3NbTVNUUDIwN10pLCAvKiBTQ0lGQjEgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuNCIsICZtc3RwX2Nsa3NbTVNUUDIxNl0pLCAvKiBTQ0lGQjIgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuNSIsICZtc3RwX2Nsa3NbTVNUUDIwMl0pLCAvKiBTQ0lGQTIgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuNiIsICZtc3RwX2Nsa3NbTVNUUDcyMV0pLCAvKiBTQ0lGMCAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS43IiwgJm1zdHBfY2xrc1tNU1RQNzIwXSksIC8qIFNDSUYxICovCi0JQ0xLREVWX0RFVl9JRCgic2gtc2NpLjgiLCAmbXN0cF9jbGtzW01TVFA3MTldKSwgLyogU0NJRjIgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuOSIsICZtc3RwX2Nsa3NbTVNUUDcxOF0pLCAvKiBTQ0lGMyAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xMCIsICZtc3RwX2Nsa3NbTVNUUDcxNV0pLCAvKiBTQ0lGNCAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xMSIsICZtc3RwX2Nsa3NbTVNUUDcxNF0pLCAvKiBTQ0lGNSAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xMiIsICZtc3RwX2Nsa3NbTVNUUDExMDZdKSwgLyogU0NJRkEzICovCi0JQ0xLREVWX0RFVl9JRCgic2gtc2NpLjEzIiwgJm1zdHBfY2xrc1tNU1RQMTEwN10pLCAvKiBTQ0lGQTQgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMTQiLCAmbXN0cF9jbGtzW01TVFAxMTA4XSksIC8qIFNDSUZBNSAqLwotCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9zZGhpLjAiLCAmbXN0cF9jbGtzW01TVFAzMTRdKSwKLQlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4xIiwgJm1zdHBfY2xrc1tNU1RQMzEyXSksCi0JQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX3NkaGkuMiIsICZtc3RwX2Nsa3NbTVNUUDMxMV0pLAotCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtNDgtZ2VuMi4wIiwgJm1zdHBfY2xrc1tNU1RQMTI0XSksCi0JQ0xLREVWX0RFVl9JRCgicXNwaS4wIiwgJm1zdHBfY2xrc1tNU1RQOTE3XSksCi0JQ0xLREVWX0RFVl9JRCgicmNhcl90aGVybWFsIiwgJm1zdHBfY2xrc1tNU1RQNTIyXSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4wIiwgJm1zdHBfY2xrc1tNU1RQOTMxXSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4xIiwgJm1zdHBfY2xrc1tNU1RQOTMwXSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4yIiwgJm1zdHBfY2xrc1tNU1RQOTI5XSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4zIiwgJm1zdHBfY2xrc1tNU1RQOTI4XSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi40IiwgJm1zdHBfY2xrc1tNU1RQOTI3XSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi41IiwgJm1zdHBfY2xrc1tNU1RQOTI1XSksCi0JQ0xLREVWX0RFVl9JRCgicjhhNzc5MS1ldGhlciIsICZtc3RwX2Nsa3NbTVNUUDgxM10pLCAvKiBFdGhlciAqLwotCUNMS0RFVl9ERVZfSUQoInI4YTc3OTEtdmluLjAiLCAmbXN0cF9jbGtzW01TVFA4MTFdKSwKLQlDTEtERVZfREVWX0lEKCJyOGE3NzkxLXZpbi4xIiwgJm1zdHBfY2xrc1tNU1RQODEwXSksCi0JQ0xLREVWX0RFVl9JRCgicjhhNzc5MS12aW4uMiIsICZtc3RwX2Nsa3NbTVNUUDgwOV0pLAotCUNMS0RFVl9ERVZfSUQoInNhdGEtcjhhNzc5MS4wIiwgJm1zdHBfY2xrc1tNU1RQODE1XSksCi0JQ0xLREVWX0RFVl9JRCgic2F0YS1yOGE3NzkxLjEiLCAmbXN0cF9jbGtzW01TVFA4MTRdKSwKLX07Ci0KLSNkZWZpbmUgUjhBNzc5MV9DTE9DS19ST09UKGUsIG0sIHAwLCBwMSwgcDMwLCBwMzEpCQlcCi0JZXh0YWxfY2xrLnJhdGUJPSBlICogMTAwMCAqIDEwMDA7CQkJXAotCW1haW5fY2xrLnBhcmVudAk9IG07CQkJCQlcCi0JU0hfQ0xLX1NFVF9SQVRJTygmcGxsMV9jbGtfcmF0aW8sIHAxIC8gMiwgMSk7CQlcCi0JaWYgKG1vZGUgJiBNRCgxOSkpCQkJCQlcCi0JCVNIX0NMS19TRVRfUkFUSU8oJnBsbDNfY2xrX3JhdGlvLCBwMzEsIDEpOwlcCi0JZWxzZQkJCQkJCQlcCi0JCVNIX0NMS19TRVRfUkFUSU8oJnBsbDNfY2xrX3JhdGlvLCBwMzAsIDEpCi0KLQotdm9pZCBfX2luaXQgcjhhNzc5MV9jbG9ja19pbml0KHZvaWQpCi17Ci0JdTMyIG1vZGUgPSByY2FyX2dlbjJfcmVhZF9tb2RlX3BpbnMoKTsKLQlpbnQgaywgcmV0ID0gMDsKLQotCXN3aXRjaCAobW9kZSAmIChNRCgxNCkgfCBNRCgxMykpKSB7Ci0JY2FzZSAwOgotCQlSOEE3NzkxX0NMT0NLX1JPT1QoMTUsICZleHRhbF9jbGssIDE3MiwgMjA4LCAxMDYsIDg4KTsKLQkJYnJlYWs7Ci0JY2FzZSBNRCgxMyk6Ci0JCVI4QTc3OTFfQ0xPQ0tfUk9PVCgyMCwgJmV4dGFsX2NsaywgMTMwLCAxNTYsIDgwLCA2Nik7Ci0JCWJyZWFrOwotCWNhc2UgTUQoMTQpOgotCQlSOEE3NzkxX0NMT0NLX1JPT1QoMjYsICZleHRhbF9kaXYyX2NsaywgMjAwLCAyNDAsIDEyMiwgMTAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBNRCgxMykgfCBNRCgxNCk6Ci0JCVI4QTc3OTFfQ0xPQ0tfUk9PVCgzMCwgJmV4dGFsX2RpdjJfY2xrLCAxNzIsIDIwOCwgMTA2LCA4OCk7Ci0JCWJyZWFrOwotCX0KLQotCWlmICgobW9kZSAmIChNRCgzKSB8IE1EKDIpIHwgTUQoMSkpKSA9PSBNRCgyKSkKLQkJU0hfQ0xLX1NFVF9SQVRJTygmcXNwaV9jbGtfcmF0aW8sIDEsIDE2KTsKLQllbHNlCi0JCVNIX0NMS19TRVRfUkFUSU8oJnFzcGlfY2xrX3JhdGlvLCAxLCAyMCk7Ci0KLQlmb3IgKGsgPSAwOyAhcmV0ICYmIChrIDwgQVJSQVlfU0laRShtYWluX2Nsa3MpKTsgaysrKQotCQlyZXQgPSBjbGtfcmVnaXN0ZXIobWFpbl9jbGtzW2tdKTsKLQotCWlmICghcmV0KQotCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKLQotCWlmICghcmV0KQotCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIERJVjZfTlIpOwotCi0JaWYgKCFyZXQpCi0JCXJldCA9IHNoX2Nsa19tc3RwX3JlZ2lzdGVyKG1zdHBfY2xrcywgTVNUUF9OUik7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwotCi0JaWYgKCFyZXQpCi0JCXNobW9iaWxlX2Nsa19pbml0KCk7Ci0JZWxzZQotCQlnb3RvIGVwYW5pYzsKLQotCXJldHVybjsKLQotZXBhbmljOgotCXBhbmljKCJmYWlsZWQgdG8gc2V0dXAgcjhhNzc5MSBjbG9ja3NcbiIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKaW5kZXggNzA3MTY3Ni4uM2JjOTJmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwppbmRleCAwMmE2ZjQ1Li42YjRjMWYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suYwppbmRleCA4MDZmOTQwLi4zNGYwNTZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5jCkBAIC0xNCw0MSArMTQsMTMgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKICAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaWZkZWYgQ09ORklHX0NPTU1PTl9DTEsKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KLSNpbmNsdWRlICJjbG9jay5oIgotCi12b2lkIF9faW5pdCBzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa3MsCi0JCQkJICAgIGludCBucl9jbGtzLCBib29sIGVuYWJsZSkKLXsKLQljb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa247Ci0Jc3RydWN0IGNsayAqY2xrOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX2Nsa3M7ICsraSkgewotCQljbGtuID0gY2xrcyArIGk7Ci0JCWNsayA9IGNsa19nZXQoTlVMTCwgY2xrbi0+Y2xrKTsKLQkJaWYgKCFJU19FUlIoY2xrKSkgewotCQkJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssIGNsa24tPmNvbl9pZCwgY2xrbi0+ZGV2X2lkKTsKLQkJCWlmIChlbmFibGUpCi0JCQkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7Ci0JCQljbGtfcHV0KGNsayk7Ci0JCX0KLQl9Ci19Ci0KLSNlbHNlIC8qIENPTkZJR19DT01NT05fQ0xLICovCiAjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgogCkBAIC04NCw1ICs1NiwzIEBACiB7CiB9CiBFWFBPUlRfU1lNQk9MKF9fY2xrX3B1dCk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfQ09NTU9OX0NMSyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5oCmluZGV4IDMxYjY0MTcuLmNmMzU1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmgKQEAgLTEsMTkgKzEsNiBAQAogI2lmbmRlZiBDTE9DS19ICiAjZGVmaW5lIENMT0NLX0gKIAotI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCi0vKiB0ZW1wb3JhcnkgY2xvY2sgY29uZmlndXJhdGlvbiBoZWxwZXIgZm9yIHBsYXRmb3JtIGRldmljZXMgKi8KLQotc3RydWN0IGNsa19uYW1lIHsKLQljb25zdCBjaGFyICpjbGs7Ci0JY29uc3QgY2hhciAqY29uX2lkOwotCWNvbnN0IGNoYXIgKmRldl9pZDsKLX07Ci0KLXZvaWQgc2htb2JpbGVfY2xrX3dvcmthcm91bmQoY29uc3Qgc3RydWN0IGNsa19uYW1lICpjbGtzLCBpbnQgbnJfY2xrcywKLQkJCSAgICAgYm9vbCBlbmFibGUpOwotCi0jZWxzZSAvKiBDT05GSUdfQ09NTU9OX0NMSyAqLwogLyogbGVnYWN5IGNsb2NrIGltcGxlbWVudGF0aW9uICovCiAKIHN0cnVjdCBjbGs7CkBAIC01Miw1ICszOSw0IEBACiAJKHApLT5kaXYgPSBkOwlcCiB9IHdoaWxlICgwKQogCi0jZW5kaWYgLyogQ09ORklHX0NPTU1PTl9DTEsgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29tbW9uLmgKaW5kZXggNzIwODdjNy4uMzA5MDI1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2NvbW1vbi5oCkBAIC0xOSwxMSArMTksNiBAQAogZXh0ZXJuIHZvaWQgc2htb2JpbGVfc21wX3NjdV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIGV4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9zY3VfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKIGV4dGVybiBpbnQgc2htb2JpbGVfc21wX3NjdV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOwotZXh0ZXJuIGludCBzaG1vYmlsZV9zbXBfYXBtdV9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LAotCQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKTsKLWV4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9hcG11X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7Ci1leHRlcm4gaW50IHNobW9iaWxlX3NtcF9hcG11X2NwdV9raWxsKHVuc2lnbmVkIGludCBjcHUpOwogc3RydWN0IGNsazsKIGV4dGVybiBpbnQgc2htb2JpbGVfY2xrX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBzaG1vYmlsZV9oYW5kbGVfaXJxX2ludGMoc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2NvbnNvbGUuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCmluZGV4IGYyZTc5ZjIuLmUzMjljY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9oZWFkc21wLXNjdS5TIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9oZWFkc21wLXNjdS5TCmluZGV4IGY0NWRkZTcuLjY5ZGY4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaGVhZHNtcC1zY3UuUworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2hlYWRzbXAtc2N1LlMKQEAgLTEyLDExICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCmluZGV4IGUyYWYwMGIuLjFjY2Y0OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKaW5kZXggNDQ0NTdhOS4uOWUzNjE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYwpAQCAtMTEsMTAgKzExLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BsYXRzbXAtYXBtdS5jCmluZGV4IDJjMDY4MTAuLmY0ODNiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbGF0c21wLWFwbXUuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBTTVAgc3VwcG9ydCBmb3IgU29DcyB3aXRoIEFQTVUKICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KICAqIENvcHlyaWdodCAoQykgMjAxMyAgTWFnbnVzIERhbW0KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjIsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicGxhdHNtcC1hcG11LmgiCiAKIHN0YXRpYyBzdHJ1Y3QgewogCXZvaWQgX19pb21lbSAqaW9tZW07CkBAIC04MywyOCArODUsMTUgQEAKIAlwcl9kZWJ1ZygiYXBtdSBpb3JlbWFwICVkICVkICVwclxuIiwgY3B1LCBiaXQsIHJlcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCByZXNvdXJjZSBpb21lbTsKLQlpbnQgY3B1c1s0XTsKLX0gYXBtdV9jb25maWdbXSA9IHsKLQl7Ci0JCS5pb21lbSA9IERFRklORV9SRVNfTUVNKDB4ZTYxNTIwMDAsIDB4ODgpLAotCQkuY3B1cyA9IHsgMCwgMSwgMiwgMyB9LAotCX0sCi0JewotCQkuaW9tZW0gPSBERUZJTkVfUkVTX01FTSgweGU2MTUxMDAwLCAweDg4KSwKLQkJLmNwdXMgPSB7IDB4MTAwLCAweDEwMSwgMHgxMDIsIDB4MTAzIH0sCi0JfQotfTsKLQotc3RhdGljIHZvaWQgYXBtdV9wYXJzZV9jZmcodm9pZCAoKmZuKShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IGNwdSwgaW50IGJpdCkpCitzdGF0aWMgdm9pZCBhcG11X3BhcnNlX2NmZyh2b2lkICgqZm4pKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgY3B1LCBpbnQgYml0KSwKKwkJCSAgIHN0cnVjdCByY2FyX2FwbXVfY29uZmlnICphcG11X2NvbmZpZywgaW50IG51bSkKIHsKIAl1MzIgaWQ7CiAJaW50IGs7CiAJaW50IGJpdCwgaW5kZXg7CiAJYm9vbCBpc19hbGxvd2VkOwogCi0JZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoYXBtdV9jb25maWcpOyBrKyspIHsKKwlmb3IgKGsgPSAwOyBrIDwgbnVtOyBrKyspIHsKIAkJLyogb25seSBlbmFibGUgdGhlIGNsdXN0ZXIgdGhhdCBpbmNsdWRlcyB0aGUgYm9vdCBDUFUgKi8KIAkJaXNfYWxsb3dlZCA9IGZhbHNlOwogCQlmb3IgKGJpdCA9IDA7IGJpdCA8IEFSUkFZX1NJWkUoYXBtdV9jb25maWdba10uY3B1cyk7IGJpdCsrKSB7CkBAIC0xMjgsMTQgKzExNywxNiBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgc2htb2JpbGVfc21wX2FwbXVfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3ZvaWQgX19pbml0IHNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMsCisJCQkJCSAgIHN0cnVjdCByY2FyX2FwbXVfY29uZmlnICphcG11X2NvbmZpZywKKwkJCQkJICAgaW50IG51bSkKIHsKIAkvKiBpbnN0YWxsIGJvb3QgY29kZSBzaGFyZWQgYnkgYWxsIENQVXMgKi8KIAlzaG1vYmlsZV9ib290X2ZuID0gdmlydF90b19waHlzKHNobW9iaWxlX3NtcF9ib290KTsKIAlzaG1vYmlsZV9ib290X2FyZyA9IE1QSURSX0hXSURfQklUTUFTSzsKIAogCS8qIHBlcmZvcm0gcGVyLWNwdSBzZXR1cCAqLwotCWFwbXVfcGFyc2VfY2ZnKGFwbXVfaW5pdF9jcHUpOworCWFwbXVfcGFyc2VfY2ZnKGFwbXVfaW5pdF9jcHUsIGFwbXVfY29uZmlnLCBudW0pOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbGF0c21wLWFwbXUuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1MTJjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIHJtb2JpbGUgYXBtdSBkZWZpbml0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0ICBSZW5lc2FzIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIFBMQVRTTVBfQVBNVV9ICisjZGVmaW5lIFBMQVRTTVBfQVBNVV9ICisKK3N0cnVjdCByY2FyX2FwbXVfY29uZmlnIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgaW9tZW07CisJaW50IGNwdXNbNF07Cit9OworCitleHRlcm4gdm9pZCBzaG1vYmlsZV9zbXBfYXBtdV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzLAorCQkJCQkgICBzdHJ1Y3QgcmNhcl9hcG11X2NvbmZpZyAqYXBtdV9jb25maWcsCisJCQkJCSAgIGludCBudW0pOworZXh0ZXJuIGludCBzaG1vYmlsZV9zbXBfYXBtdV9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKTsKK2V4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9hcG11X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IHNobW9iaWxlX3NtcF9hcG11X2NwdV9raWxsKHVuc2lnbmVkIGludCBjcHUpOworCisjZW5kaWYgLyogUExBVFNNUF9BUE1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcG0tcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1yOGE3NzQwLmMKaW5kZXggZTNmMTQ2NC4uYWMyZWVjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1yOGE3NzQwLmMKQEAgLTE0LDEwICsxNCwxMCBAQAogI2luY2x1ZGUgInBtLXJtb2JpbGUuaCIKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiAhZGVmaW5lZChDT05GSUdfQVJDSF9NVUxUSVBMQVRGT1JNKQotc3RhdGljIGludCByOGE3NzQwX3BkX2E0c19zdXNwZW5kKHZvaWQpCitzdGF0aWMgaW50IHI4YTc3NDBfcGRfYTNzbV9zdXNwZW5kKHZvaWQpCiB7CiAJLyoKLQkgKiBUaGUgQTRTIGRvbWFpbiBjb250YWlucyB0aGUgQ1BVIGNvcmUgYW5kIHRoZXJlZm9yZSBpdCBzaG91bGQKKwkgKiBUaGUgQTNTTSBkb21haW4gY29udGFpbnMgdGhlIENQVSBjb3JlIGFuZCB0aGVyZWZvcmUgaXQgc2hvdWxkCiAJICogb25seSBiZSB0dXJuZWQgb2ZmIGlmIHRoZSBDUFUgaXMgbm90IGluIHVzZS4KIAkgKi8KIAlyZXR1cm4gLUVCVVNZOwpAQCAtMzIsMjkgKzMyLDY1IEBACiAJcmV0dXJuIGNvbnNvbGVfc3VzcGVuZF9lbmFibGVkID8gMCA6IC1FQlVTWTsKIH0KIAorc3RhdGljIGludCByOGE3NzQwX3BkX2Q0X3N1c3BlbmQodm9pZCkKK3sKKwkvKgorCSAqIFRoZSBENCBkb21haW4gY29udGFpbnMgdGhlIENvcmVzaWdodC1FVE0gaGFyZHdhcmUgYmxvY2sgYW5kCisJICogdGhlcmVmb3JlIGl0IHNob3VsZCBvbmx5IGJlIHR1cm5lZCBvZmYgaWYgdGhlIGRlYnVnIG1vZHVsZSBpcworCSAqIG5vdCBpbiB1c2UuCisJICovCisJcmV0dXJuIC1FQlVTWTsKK30KKwogc3RhdGljIHN0cnVjdCBybW9iaWxlX3BtX2RvbWFpbiByOGE3NzQwX3BtX2RvbWFpbnNbXSA9IHsKIAl7CiAJCS5nZW5wZC5uYW1lCT0gIkE0TEMiLAogCQkuYml0X3NoaWZ0CT0gMSwKIAl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkE0TVAiLAorCQkuYml0X3NoaWZ0CT0gMiwKKwl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkQ0IiwKKwkJLmJpdF9zaGlmdAk9IDMsCisJCS5nb3YJCT0gJnBtX2RvbWFpbl9hbHdheXNfb25fZ292LAorCQkuc3VzcGVuZAk9IHI4YTc3NDBfcGRfZDRfc3VzcGVuZCwKKwl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkE0UiIsCisJCS5iaXRfc2hpZnQJPSA1LAorCX0sIHsKKwkJLmdlbnBkLm5hbWUJPSAiQTNSViIsCisJCS5iaXRfc2hpZnQJPSA2LAorCX0sIHsKIAkJLmdlbnBkLm5hbWUJPSAiQTRTIiwKIAkJLmJpdF9zaGlmdAk9IDEwLAotCQkuZ292CQk9ICZwbV9kb21haW5fYWx3YXlzX29uX2dvdiwKIAkJLm5vX2RlYnVnCT0gdHJ1ZSwKLQkJLnN1c3BlbmQJPSByOGE3NzQwX3BkX2E0c19zdXNwZW5kLAogCX0sIHsKIAkJLmdlbnBkLm5hbWUJPSAiQTNTUCIsCiAJCS5iaXRfc2hpZnQJPSAxMSwKIAkJLmdvdgkJPSAmcG1fZG9tYWluX2Fsd2F5c19vbl9nb3YsCiAJCS5ub19kZWJ1Zwk9IHRydWUsCiAJCS5zdXNwZW5kCT0gcjhhNzc0MF9wZF9hM3NwX3N1c3BlbmQsCisJfSwgeworCQkuZ2VucGQubmFtZQk9ICJBM1NNIiwKKwkJLmJpdF9zaGlmdAk9IDEyLAorCQkuZ292CQk9ICZwbV9kb21haW5fYWx3YXlzX29uX2dvdiwKKwkJLnN1c3BlbmQJPSByOGE3NzQwX3BkX2Ezc21fc3VzcGVuZCwKKwl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkEzU0ciLAorCQkuYml0X3NoaWZ0CT0gMTMsCisJfSwgeworCQkuZ2VucGQubmFtZQk9ICJBNFNVIiwKKwkJLmJpdF9zaGlmdAk9IDIwLAogCX0sCiB9OwogCiB2b2lkIF9faW5pdCByOGE3NzQwX2luaXRfcG1fZG9tYWlucyh2b2lkKQogewogCXJtb2JpbGVfaW5pdF9kb21haW5zKHI4YTc3NDBfcG1fZG9tYWlucywgQVJSQVlfU0laRShyOGE3NzQwX3BtX2RvbWFpbnMpKTsKKwlwbV9nZW5wZF9hZGRfc3ViZG9tYWluX25hbWVzKCJBNFIiLCAiQTNSViIpOwogCXBtX2dlbnBkX2FkZF9zdWJkb21haW5fbmFtZXMoIkE0UyIsICJBM1NQIik7CisJcG1fZ2VucGRfYWRkX3N1YmRvbWFpbl9uYW1lcygiQTRTIiwgIkEzU00iKTsKKwlwbV9nZW5wZF9hZGRfc3ViZG9tYWluX25hbWVzKCJBNFMiLCAiQTNTRyIpOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAmJiAhQ09ORklHX0FSQ0hfTVVMVElQTEFURk9STSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTczYTQuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzNhNC5oCmluZGV4IDVmYWZkNmYuLjcwZGNkODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzNhNC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzNhNC5oCkBAIC0xMSw3ICsxMSw2IEBACiB9OwogCiB2b2lkIHI4YTczYTRfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7Ci12b2lkIHI4YTczYTRfYWRkX2R0X2RldmljZXModm9pZCk7CiB2b2lkIHI4YTczYTRfY2xvY2tfaW5pdCh2b2lkKTsKIHZvaWQgcjhhNzNhNF9waW5tdXhfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yOGE3NzQwLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NDAuaAppbmRleCBmMzY5YjRiLi5jYTc4MDVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NDAuaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NDAuaApAQCAtMTAsMTAgKzEwLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaWZuZGVmIF9fQVNNX1I4QTc3NDBfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NzguaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc3OC5oCmluZGV4IGY0MDc2YTUuLmY2NGZlZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc3OC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc3OC5oCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaWZuZGVmIF9fQVNNX1I4QTc3NzhfSF9fCiAjZGVmaW5lIF9fQVNNX1I4QTc3NzhfSF9fCkBAIC03MSw3ICs2Nyw2IEBACiBleHRlcm4gdm9pZCByOGE3Nzc4X2FkZF9kdF9kZXZpY2VzKHZvaWQpOwogCiBleHRlcm4gdm9pZCByOGE3Nzc4X2luaXRfbGF0ZSh2b2lkKTsKLWV4dGVybiB2b2lkIHI4YTc3NzhfaW5pdF9kZWxheSh2b2lkKTsKIGV4dGVybiB2b2lkIHI4YTc3NzhfaW5pdF9pcnFfZHQodm9pZCk7CiBleHRlcm4gdm9pZCByOGE3Nzc4X2Nsb2NrX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCByOGE3Nzc4X2luaXRfaXJxX2V4dHBpbihpbnQgaXJsbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3OTEuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc5MS5oCmluZGV4IGMxYmY3YWIuLjZjZjExZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc5MS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc5MS5oCkBAIC0xLDkgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9SOEE3NzkxX0hfXwogI2RlZmluZSBfX0FTTV9SOEE3NzkxX0hfXwogCi12b2lkIHI4YTc3OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7Ci12b2lkIHI4YTc3OTFfY2xvY2tfaW5pdCh2b2lkKTsKLXZvaWQgcjhhNzc5MV9waW5tdXhfaW5pdCh2b2lkKTsKIHZvaWQgcjhhNzc5MV9wbV9pbml0KHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyByOGE3NzkxX3NtcF9vcHM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtZW1ldjIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtZW1ldjIuYwppbmRleCBiMDZhOWU4Li5hYWQ5N2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLWVtZXYyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1lbWV2Mi5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yN3M3MjEwMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yN3M3MjEwMC5jCmluZGV4IDQxMjIxMDQuLjE3MTE3NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjdzNzIxMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI3czcyMTAwLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3M2E0LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYwppbmRleCA1M2Y0MGI3Li5jMjc2ODIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTgwLDE4ICsxNzYsMTMgQEAKIAlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDEyMCkpLAogfTsKIAotI2RlZmluZSByOGE3NzkwX3JlZ2lzdGVyX2NtdChpZHgpCQkJCQlcCisjZGVmaW5lIHI4YTczYTRfcmVnaXN0ZXJfY210KGlkeCkJCQkJCVwKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgInNoLWNtdC00OC1nZW4yIiwJXAogCQkJCQkgIGlkeCwgY210IyNpZHgjI19yZXNvdXJjZXMsCVwKIAkJCQkJICBBUlJBWV9TSVpFKGNtdCMjaWR4IyNfcmVzb3VyY2VzKSwgXAogCQkJCQkgICZjbXQjI2lkeCMjX3BsYXRmb3JtX2RhdGEsCVwKIAkJCQkJICBzaXplb2Yoc3RydWN0IHNoX3RpbWVyX2NvbmZpZykpCiAKLXZvaWQgX19pbml0IHI4YTczYTRfYWRkX2R0X2RldmljZXModm9pZCkKLXsKLQlyOGE3NzkwX3JlZ2lzdGVyX2NtdCgxKTsKLX0KLQogLyogRE1BICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnIGRtYV9zbGF2ZXNbXSA9IHsKIAl7CkBAIC0yODIsNyArMjczLDcgQEAKIAogdm9pZCBfX2luaXQgcjhhNzNhNF9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQogewotCXI4YTczYTRfYWRkX2R0X2RldmljZXMoKTsKKwlyOGE3M2E0X3JlZ2lzdGVyX2NtdCgxKTsKIAlyOGE3M2E0X3JlZ2lzdGVyX3NjaWYoMCk7CiAJcjhhNzNhNF9yZWdpc3Rlcl9zY2lmKDEpOwogCXI4YTczYTRfcmVnaXN0ZXJfc2NpZigyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKaW5kZXggODg5NGUxYi4uNzlhZDkzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC03MSw2ICs2Nyw3IEBACiAKIHZvaWQgX19pbml0IHI4YTc3NDBfbWFwX2lvKHZvaWQpCiB7CisJZGVidWdfbGxfaW9faW5pdCgpOwogCWlvdGFibGVfaW5pdChyOGE3NzQwX2lvX2Rlc2MsIEFSUkFZX1NJWkUocjhhNzc0MF9pb19kZXNjKSk7CiB9CiAKQEAgLTc0Niw2ICs3NDMsMTIgQEAKIHZvaWQgX19pbml0IHI4YTc3NDBfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKIHsKIAlzdGF0aWMgc3RydWN0IHBtX2RvbWFpbl9kZXZpY2UgZG9tYWluX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCQl7ICJBNFIiLCAgJnRtdTBfZGV2aWNlIH0sCisJCXsgIkE0UiIsICAmaTJjMF9kZXZpY2UgfSwKKwkJeyAiQTRTIiwgICZpcnFwaW4wX2RldmljZSB9LAorCQl7ICJBNFMiLCAgJmlycXBpbjFfZGV2aWNlIH0sCisJCXsgIkE0UyIsICAmaXJxcGluMl9kZXZpY2UgfSwKKwkJeyAiQTRTIiwgICZpcnFwaW4zX2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWYwX2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWYxX2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWYyX2RldmljZSB9LApAQCAtNzU2LDYgKzc1OSwxMSBAQAogCQl7ICJBM1NQIiwgJnNjaWY3X2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWY4X2RldmljZSB9LAogCQl7ICJBM1NQIiwgJmkyYzFfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmaXBtbXVfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmZG1hMF9kZXZpY2UgfSwKKwkJeyAiQTNTUCIsICZkbWExX2RldmljZSB9LAorCQl7ICJBM1NQIiwgJmRtYTJfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmdXNiX2RtYV9kZXZpY2UgfSwKIAl9OwogCiAJLyogSTJDIHdvcmstYXJvdW5kICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OC5jCmluZGV4IDg1ZmUwMTYuLjE3MGJkMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OC5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI5Miw4ICsyODgsNiBAQAogCQlsMngwX2luaXQoYmFzZSwgMHgwMDQwMDAwMCwgMHhjMjBmMGZmZik7CiAJfQogI2VuZGlmCi0KLQlyOGE3Nzc4X3JlZ2lzdGVyX3RtdSgwKTsKIH0KIAogLyogSFBCLURNQSAqLwpAQCAtNTAxLDYgKzQ5NSw3IEBACiB2b2lkIF9faW5pdCByOGE3Nzc4X2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCiB7CiAJcjhhNzc3OF9hZGRfZHRfZGV2aWNlcygpOworCXI4YTc3NzhfcmVnaXN0ZXJfdG11KDApOwogCXI4YTc3NzhfcmVnaXN0ZXJfc2NpZigwKTsKIAlyOGE3Nzc4X3JlZ2lzdGVyX3NjaWYoMSk7CiAJcjhhNzc3OF9yZWdpc3Rlcl9zY2lmKDIpOwpAQCAtNTcyLDExICs1NjcsNiBAQAogCQkJJmlycXBpbl9wbGF0Zm9ybV9kYXRhLCBzaXplb2YoaXJxcGluX3BsYXRmb3JtX2RhdGEpKTsKIH0KIAotdm9pZCBfX2luaXQgcjhhNzc3OF9pbml0X2RlbGF5KHZvaWQpCi17Ci0Jc2htb2JpbGVfaW5pdF9kZWxheSgpOwotfQotCiAjaWZkZWYgQ09ORklHX1VTRV9PRgogI2RlZmluZSBJTlQyU01TS0NSMAkweDgyMjg4IC8qIDB4ZmU3ODIyODggKi8KICNkZWZpbmUgSU5UMlNNU0tDUjEJMHg4MjI4YyAvKiAweGZlNzgyMjhjICovCkBAIC02MDgsNyArNTk4LDcgQEAKIH07CiAKIERUX01BQ0hJTkVfU1RBUlQoUjhBNzc3OF9EVCwgIkdlbmVyaWMgUjhBNzc3OCAoRmxhdHRlbmVkIERldmljZSBUcmVlKSIpCi0JLmluaXRfZWFybHkJPSByOGE3Nzc4X2luaXRfZGVsYXksCisJLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAogCS5pbml0X2lycQk9IHI4YTc3NzhfaW5pdF9pcnFfZHQsCiAJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gcjhhNzc3OF9jb21wYXRfZHQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzkuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCmluZGV4IDEzNjA3OGEuLjYxNTZkMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTIsMTQgKzQ4LDE0IEBACiAjaW5jbHVkZSAicjhhNzc3OS5oIgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHI4YTc3NzlfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogMk0gZW50aXR5IG1hcCBmb3IgMHhmMDAwMDAwMCAoTVBDT1JFKSAqLworCS8qIDJNIGlkZW50aXR5IG1hcHBpbmcgZm9yIDB4ZjAwMDAwMDAgKE1QQ09SRSkgKi8KIAl7CiAJCS52aXJ0dWFsCT0gMHhmMDAwMDAwMCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4ZjAwMDAwMDApLAogCQkubGVuZ3RoCQk9IFNaXzJNLAogCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECiAJfSwKLQkvKiAxNk0gZW50aXR5IG1hcCBmb3IgMHhmZXh4eHh4eCAoRE1BQy1TL0hQQlJFRy9JTlRDMi9MUkFNL0RCU0MpICovCisJLyogMTZNIGlkZW50aXR5IG1hcHBpbmcgZm9yIDB4ZmV4eHh4eHggKERNQUMtUy9IUEJSRUcvSU5UQzIvTFJBTS9EQlNDKSAqLwogCXsKIAkJLnZpcnR1YWwJPSAweGZlMDAwMDAwLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oMHhmZTAwMDAwMCksCkBAIC03MCw2ICs2Niw3IEBACiAKIHZvaWQgX19pbml0IHI4YTc3NzlfbWFwX2lvKHZvaWQpCiB7CisJZGVidWdfbGxfaW9faW5pdCgpOwogCWlvdGFibGVfaW5pdChyOGE3Nzc5X2lvX2Rlc2MsIEFSUkFZX1NJWkUocjhhNzc3OV9pb19kZXNjKSk7CiB9CiAKQEAgLTY4Myw3ICs2ODAsNyBAQAogCiAJLyogRWFybHkgc2VyaWFsIGNvbnNvbGUgc2V0dXAgaXMgbm90IGluY2x1ZGVkIGhlcmUgZHVlIHRvCiAJICogbWVtb3J5IG1hcCBjb2xsaXNpb25zLiBUaGUgU0NJRiBzZXJpYWwgcG9ydHMgaW4gcjhhNzc3OQotCSAqIGFyZSBkaWZmaWN1bHQgdG8gZW50aXR5IG1hcCAxOjEgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIHRoZQorCSAqIGFyZSBkaWZmaWN1bHQgdG8gaWRlbnRpdHkgbWFwIDE6MSBkdWUgdG8gY29sbGlzaW9uIHdpdGggdGhlCiAJICogdmlydHVhbCBtZW1vcnkgcmFuZ2UgdXNlZCBieSB0aGUgY29oZXJlbnQgRE1BIGNvZGUgb24gQVJNLgogCSAqCiAJICogQW55b25lIHdhbnRpbmcgdG8gZGVidWcgZWFybHkgY2FuIHJlbW92ZSBVUEZfSU9SRU1BUCBmcm9tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3OTAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MC5jCmluZGV4IDg3N2ZkZWIuLmVjN2Q5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MC5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKaW5kZXggMzVkNzg2My4uZWY4ZWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKQEAgLTEzLDE5OCArMTMsMTYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tcmNhci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaXJxLXJlbmVzYXMtaXJxYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImlycXMuaCIKICNpbmNsdWRlICJyOGE3NzkxLmgiCiAjaW5jbHVkZSAicmNhci1nZW4yLmgiCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgcGZjX3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZTYwNjAwMDAsIDB4MjUwKSwKLX07Ci0KLSNkZWZpbmUgcjhhNzc5MV9yZWdpc3Rlcl9wZmMoKQkJCQkJCVwKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJwZmMtcjhhNzc5MSIsIC0xLCBwZmNfcmVzb3VyY2VzLCBcCi0JCQkJCUFSUkFZX1NJWkUocGZjX3Jlc291cmNlcykpCi0KLSNkZWZpbmUgUjhBNzc5MV9HUElPKGlkeCwgYmFzZSwgbnIpCQkJCQlcCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIHI4YTc3OTFfZ3BpbyMjaWR4IyNfcmVzb3VyY2VzW10gX19pbml0Y29uc3QgPSB7IFwKLQlERUZJTkVfUkVTX01FTSgoYmFzZSksIDB4NTApLAkJCQkJXAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoNCArIChpZHgpKSksCQkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX3JjYXJfY29uZmlnCQkJCQlcCi1yOGE3NzkxX2dwaW8jI2lkeCMjX3BsYXRmb3JtX2RhdGEgX19pbml0Y29uc3QgPSB7CQkJXAotCS5ncGlvX2Jhc2UJPSAzMiAqIChpZHgpLAkJCQkJXAotCS5pcnFfYmFzZQk9IDAsCQkJCQkJXAotCS5udW1iZXJfb2ZfcGlucwk9IChuciksCQkJCQkJXAotCS5wY3RsX25hbWUJPSAicGZjLXI4YTc3OTEiLAkJCQlcCi0JLmhhc19ib3RoX2VkZ2VfdHJpZ2dlciA9IDEsCQkJCQlcCi19OwkJCQkJCQkJCVwKLQotUjhBNzc5MV9HUElPKDAsIDB4ZTYwNTAwMDAsIDMyKTsKLVI4QTc3OTFfR1BJTygxLCAweGU2MDUxMDAwLCAzMik7Ci1SOEE3NzkxX0dQSU8oMiwgMHhlNjA1MjAwMCwgMzIpOwotUjhBNzc5MV9HUElPKDMsIDB4ZTYwNTMwMDAsIDMyKTsKLVI4QTc3OTFfR1BJTyg0LCAweGU2MDU0MDAwLCAzMik7Ci1SOEE3NzkxX0dQSU8oNSwgMHhlNjA1NTAwMCwgMzIpOwotUjhBNzc5MV9HUElPKDYsIDB4ZTYwNTU0MDAsIDMyKTsKLVI4QTc3OTFfR1BJTyg3LCAweGU2MDU1ODAwLCAyNik7Ci0KLSNkZWZpbmUgcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKGlkeCkJCQkJCVwKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgImdwaW9fcmNhciIsIGlkeCwJXAotCQlyOGE3NzkxX2dwaW8jI2lkeCMjX3Jlc291cmNlcywJCQkJXAotCQlBUlJBWV9TSVpFKHI4YTc3OTFfZ3BpbyMjaWR4IyNfcmVzb3VyY2VzKSwJCVwKLQkJJnI4YTc3OTFfZ3BpbyMjaWR4IyNfcGxhdGZvcm1fZGF0YSwJCQlcCi0JCXNpemVvZihyOGE3NzkxX2dwaW8jI2lkeCMjX3BsYXRmb3JtX2RhdGEpKQotCi12b2lkIF9faW5pdCByOGE3NzkxX3Bpbm11eF9pbml0KHZvaWQpCi17Ci0JcjhhNzc5MV9yZWdpc3Rlcl9wZmMoKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX2dwaW8oMCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKDEpOwotCXI4YTc3OTFfcmVnaXN0ZXJfZ3BpbygyKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX2dwaW8oMyk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKDQpOwotCXI4YTc3OTFfcmVnaXN0ZXJfZ3Bpbyg1KTsKLQlyOGE3NzkxX3JlZ2lzdGVyX2dwaW8oNik7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKDcpOwotfQotCi0jZGVmaW5lIF9fUjhBNzc5MV9TQ0lGKHNjaWZfdHlwZSwgaW5kZXgsIGJhc2VhZGRyLCBpcnEpCQkJXAotc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSA9IHsJCVwKLQkudHlwZQkJPSBzY2lmX3R5cGUsCQkJCQlcCi0JLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX0lPUkVNQVAsCQlcCi0JLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUsCQkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzY2lmIyNpbmRleCMjX3Jlc291cmNlc1tdID0gewkJCVwKLQlERUZJTkVfUkVTX01FTShiYXNlYWRkciwgMHgxMDApLAkJCQlcCi0JREVGSU5FX1JFU19JUlEoaXJxKSwJCQkJCQlcCi19Ci0KLSNkZWZpbmUgUjhBNzc5MV9TQ0lGKGluZGV4LCBiYXNlYWRkciwgaXJxKQkJCQlcCi0JX19SOEE3NzkxX1NDSUYoUE9SVF9TQ0lGLCBpbmRleCwgYmFzZWFkZHIsIGlycSkKLQotI2RlZmluZSBSOEE3NzkxX1NDSUZBKGluZGV4LCBiYXNlYWRkciwgaXJxKQkJCQlcCi0JX19SOEE3NzkxX1NDSUYoUE9SVF9TQ0lGQSwgaW5kZXgsIGJhc2VhZGRyLCBpcnEpCi0KLSNkZWZpbmUgUjhBNzc5MV9TQ0lGQihpbmRleCwgYmFzZWFkZHIsIGlycSkJCQkJXAotCV9fUjhBNzc5MV9TQ0lGKFBPUlRfU0NJRkIsIGluZGV4LCBiYXNlYWRkciwgaXJxKQotCi1SOEE3NzkxX1NDSUZBKDAsICAweGU2YzQwMDAwLCBnaWNfc3BpKDE0NCkpOyAvKiBTQ0lGQTAgKi8KLVI4QTc3OTFfU0NJRkEoMSwgIDB4ZTZjNTAwMDAsIGdpY19zcGkoMTQ1KSk7IC8qIFNDSUZBMSAqLwotUjhBNzc5MV9TQ0lGQigyLCAgMHhlNmMyMDAwMCwgZ2ljX3NwaSgxNDgpKTsgLyogU0NJRkIwICovCi1SOEE3NzkxX1NDSUZCKDMsICAweGU2YzMwMDAwLCBnaWNfc3BpKDE0OSkpOyAvKiBTQ0lGQjEgKi8KLVI4QTc3OTFfU0NJRkIoNCwgIDB4ZTZjZTAwMDAsIGdpY19zcGkoMTUwKSk7IC8qIFNDSUZCMiAqLwotUjhBNzc5MV9TQ0lGQSg1LCAgMHhlNmM2MDAwMCwgZ2ljX3NwaSgxNTEpKTsgLyogU0NJRkEyICovCi1SOEE3NzkxX1NDSUYoNiwgICAweGU2ZTYwMDAwLCBnaWNfc3BpKDE1MikpOyAvKiBTQ0lGMCAqLwotUjhBNzc5MV9TQ0lGKDcsICAgMHhlNmU2ODAwMCwgZ2ljX3NwaSgxNTMpKTsgLyogU0NJRjEgKi8KLVI4QTc3OTFfU0NJRig4LCAgIDB4ZTZlNTgwMDAsIGdpY19zcGkoMjIpKTsgLyogU0NJRjIgKi8KLVI4QTc3OTFfU0NJRig5LCAgIDB4ZTZlYTgwMDAsIGdpY19zcGkoMjMpKTsgLyogU0NJRjMgKi8KLVI4QTc3OTFfU0NJRigxMCwgIDB4ZTZlZTAwMDAsIGdpY19zcGkoMjQpKTsgLyogU0NJRjQgKi8KLVI4QTc3OTFfU0NJRigxMSwgIDB4ZTZlZTgwMDAsIGdpY19zcGkoMjUpKTsgLyogU0NJRjUgKi8KLVI4QTc3OTFfU0NJRkEoMTIsIDB4ZTZjNzAwMDAsIGdpY19zcGkoMjkpKTsgLyogU0NJRkEzICovCi1SOEE3NzkxX1NDSUZBKDEzLCAweGU2Yzc4MDAwLCBnaWNfc3BpKDMwKSk7IC8qIFNDSUZBNCAqLwotUjhBNzc5MV9TQ0lGQSgxNCwgMHhlNmM4MDAwMCwgZ2ljX3NwaSgzMSkpOyAvKiBTQ0lGQTUgKi8KLQotI2RlZmluZSByOGE3NzkxX3JlZ2lzdGVyX3NjaWYoaW5kZXgpCQkJCQkgICAgICAgXAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAic2gtc2NpIiwgaW5kZXgsICAJICAgICAgIFwKLQkJCQkJICBzY2lmIyNpbmRleCMjX3Jlc291cmNlcywJICAgICAgIFwKLQkJCQkJICBBUlJBWV9TSVpFKHNjaWYjI2luZGV4IyNfcmVzb3VyY2VzKSwgXAotCQkJCQkgICZzY2lmIyNpbmRleCMjX3BsYXRmb3JtX2RhdGEsCSAgICAgICBcCi0JCQkJCSAgc2l6ZW9mKHNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSkpCi0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbHNfbWFzayA9IDB4NjAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDBfcmVzb3VyY2VzW10gPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhmZmNhMDAwMCwgMHgxMDA0KSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDE0MikpLAotfTsKLQotI2RlZmluZSByOGE3NzkxX3JlZ2lzdGVyX2NtdChpZHgpCQkJCQlcCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsICJzaC1jbXQtNDgtZ2VuMiIsCVwKLQkJCQkJICBpZHgsIGNtdCMjaWR4IyNfcmVzb3VyY2VzLAlcCi0JCQkJCSAgQVJSQVlfU0laRShjbXQjI2lkeCMjX3Jlc291cmNlcyksIFwKLQkJCQkJICAmY210IyNpZHgjI19wbGF0Zm9ybV9kYXRhLAlcCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBzaF90aW1lcl9jb25maWcpKQotCi1zdGF0aWMgc3RydWN0IHJlbmVzYXNfaXJxY19jb25maWcgaXJxYzBfZGF0YSA9IHsKLQkuaXJxX2Jhc2UgPSBpcnFfcGluKDApLCAvKiBJUlEwIC0+IElSUTkgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxYzBfcmVzb3VyY2VzW10gPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhlNjFjMDAwMCwgMHgyMDApLCAvKiBJUlFDIEV2ZW50IERldGVjdG9yIEJsb2NrXzAgKi8KLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDApKSwgLyogSVJRMCAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMSkpLCAvKiBJUlExICovCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyKSksIC8qIElSUTIgKi8KLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDMpKSwgLyogSVJRMyAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTIpKSwgLyogSVJRNCAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTMpKSwgLyogSVJRNSAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTQpKSwgLyogSVJRNiAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTUpKSwgLyogSVJRNyAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTYpKSwgLyogSVJROCAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTcpKSwgLyogSVJROSAqLwotfTsKLQotI2RlZmluZSByOGE3NzkxX3JlZ2lzdGVyX2lycWMoaWR4KQkJCQkJXAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAicmVuZXNhc19pcnFjIiwJCVwKLQkJCQkJICBpZHgsIGlycWMjI2lkeCMjX3Jlc291cmNlcywJXAotCQkJCQkgIEFSUkFZX1NJWkUoaXJxYyMjaWR4IyNfcmVzb3VyY2VzKSwgXAotCQkJCQkgICZpcnFjIyNpZHgjI19kYXRhLAkJXAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgcmVuZXNhc19pcnFjX2NvbmZpZykpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGhlcm1hbF9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGU2MWYwMDAwLCAweDE0KSwKLQlERUZJTkVfUkVTX01FTSgweGU2MWYwMTAwLCAweDM4KSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDY5KSksCi19OwotCi0jZGVmaW5lIHI4YTc3OTFfcmVnaXN0ZXJfdGhlcm1hbCgpCQkJCQlcCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicmNhcl90aGVybWFsIiwgLTEsCQlcCi0JCQkJCXRoZXJtYWxfcmVzb3VyY2VzLAkJXAotCQkJCQlBUlJBWV9TSVpFKHRoZXJtYWxfcmVzb3VyY2VzKSkKLQotdm9pZCBfX2luaXQgcjhhNzc5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigwKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMSk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDIpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigzKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoNCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDUpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZig2KTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoNyk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDgpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZig5KTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMTApOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigxMSk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDEyKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMTMpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigxNCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9jbXQoMCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9pcnFjKDApOwotCXI4YTc3OTFfcmVnaXN0ZXJfdGhlcm1hbCgpOwotfQotCi0jaWZkZWYgQ09ORklHX1VTRV9PRgogc3RhdGljIGNvbnN0IGNoYXIgKnI4YTc3OTFfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGRhdGEgPSB7CiAJInJlbmVzYXMscjhhNzc5MSIsCiAJTlVMTCwKQEAgLTIxOCw0ICszNiwzIEBACiAJLnJlc2VydmUJPSByY2FyX2dlbjJfcmVzZXJ2ZSwKIAkuZHRfY29tcGF0CT0gcjhhNzc5MV9ib2FyZHNfY29tcGF0X2R0LAogTUFDSElORV9FTkQKLSNlbmRpZiAvKiBDT05GSUdfVVNFX09GICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yY2FyLWdlbjIuYwppbmRleCA0MmQ1YjQzLi4zZGQ2ZWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcmNhci1nZW4yLmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEzICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgogICogQ29weXJpZ2h0IChDKSAyMDEzICBNYWdudXMgRGFtbQorICogQ29weXJpZ2h0IChDKSAyMDE0ICBVbHJpY2ggSGVjaHQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEyLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nsay9zaG1vYmlsZS5oPgpAQCAtMjQsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1jb250aWd1b3VzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlICJjb21tb24uaCIKQEAgLTU0LDM3ICs1Miw2MSBAQAogewogI2lmIGRlZmluZWQoQ09ORklHX0FSTV9BUkNIX1RJTUVSKSB8fCBkZWZpbmVkKENPTkZJR19DT01NT05fQ0xLKQogCXUzMiBtb2RlID0gcmNhcl9nZW4yX3JlYWRfbW9kZV9waW5zKCk7CisJYm9vbCBpc19lMiA9IChib29sKW9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCSJyZW5lc2FzLHI4YTc3OTQiKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19BUk1fQVJDSF9USU1FUgogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlpbnQgZXh0YWxfbWh6ID0gMDsKIAl1MzIgZnJlcTsKIAotCS8qIEF0IExpbnV4IGJvb3QgdGltZSB0aGUgcjhhNzc5MCBhcmNoIHRpbWVyIGNvbWVzIHVwCi0JICogd2l0aCB0aGUgY291bnRlciBkaXNhYmxlZC4gTW9yZW92ZXIsIGl0IG1heSBhbHNvIHJlcG9ydAotCSAqIGEgcG90ZW50aWFsbHkgaW5jb3JyZWN0IGZpeGVkIDEzIE1IeiBmcmVxdWVuY3kuIFRvIGJlCi0JICogY29ycmVjdCB0aGVzZSByZWdpc3RlcnMgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVzZSB0aGUKLQkgKiBmcmVxdWVuY3kgRVhUQUwgLyAyIHdoaWNoIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBNRCBwaW5zLgotCSAqLworCWlmIChpc19lMikgeworCQlmcmVxID0gMjYwMDAwMDAwIC8gODsJLyogWlMgLyA4ICovCisJCS8qIENOVFZPRkYgaGFzIHRvIGJlIGluaXRpYWxpemVkIGVpdGhlciBmcm9tIG5vbi1zZWN1cmUKKwkJICogSHlwZXJ2aXNvciBtb2RlIG9yIHNlY3VyZSBNb25pdG9yIG1vZGUgd2l0aCBTQ1IuTlM9PTEuCisJCSAqIElmIFRydXN0Wm9uZSBpcyBlbmFibGVkIHRoZW4gaXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlCisJCSAqIHNlY3VyZSBjb2RlLgorCQkgKi8KKwkJYXNtIHZvbGF0aWxlKAorCQkiCWNwcwkweDE2XG4iCisJCSIJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMSwgMFxuIgorCQkiCW9ycglyMCwgcjEsICMxXG4iCisJCSIJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMSwgMFxuIgorCQkiCWlzYlxuIgorCQkiCW1vdglyMCwgIzBcbiIKKwkJIgltY3JyCXAxNSwgNCwgcjAsIHIwLCBjMTRcbiIKKwkJIglpc2JcbiIKKwkJIgltY3IJcDE1LCAwLCByMSwgYzEsIGMxLCAwXG4iCisJCSIJaXNiXG4iCisJCSIJY3BzCTB4MTNcbiIKKwkJCTogOiA6ICJyMCIsICJyMSIpOworCX0gZWxzZSB7CisJCS8qIEF0IExpbnV4IGJvb3QgdGltZSB0aGUgcjhhNzc5MCBhcmNoIHRpbWVyIGNvbWVzIHVwCisJCSAqIHdpdGggdGhlIGNvdW50ZXIgZGlzYWJsZWQuIE1vcmVvdmVyLCBpdCBtYXkgYWxzbyByZXBvcnQKKwkJICogYSBwb3RlbnRpYWxseSBpbmNvcnJlY3QgZml4ZWQgMTMgTUh6IGZyZXF1ZW5jeS4gVG8gYmUKKwkJICogY29ycmVjdCB0aGVzZSByZWdpc3RlcnMgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVzZSB0aGUKKwkJICogZnJlcXVlbmN5IEVYVEFMIC8gMiB3aGljaCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgTUQgcGlucy4KKwkJICovCiAKLQlzd2l0Y2ggKG1vZGUgJiAoTUQoMTQpIHwgTUQoMTMpKSkgewotCWNhc2UgMDoKLQkJZXh0YWxfbWh6ID0gMTU7Ci0JCWJyZWFrOwotCWNhc2UgTUQoMTMpOgotCQlleHRhbF9taHogPSAyMDsKLQkJYnJlYWs7Ci0JY2FzZSBNRCgxNCk6Ci0JCWV4dGFsX21oeiA9IDI2OwotCQlicmVhazsKLQljYXNlIE1EKDEzKSB8IE1EKDE0KToKLQkJZXh0YWxfbWh6ID0gMzA7Ci0JCWJyZWFrOworCQlzd2l0Y2ggKG1vZGUgJiAoTUQoMTQpIHwgTUQoMTMpKSkgeworCQljYXNlIDA6CisJCQlleHRhbF9taHogPSAxNTsKKwkJCWJyZWFrOworCQljYXNlIE1EKDEzKToKKwkJCWV4dGFsX21oeiA9IDIwOworCQkJYnJlYWs7CisJCWNhc2UgTUQoMTQpOgorCQkJZXh0YWxfbWh6ID0gMjY7CisJCQlicmVhazsKKwkJY2FzZSBNRCgxMykgfCBNRCgxNCk6CisJCQlleHRhbF9taHogPSAzMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogVGhlIGFyY2ggdGltZXIgZnJlcXVlbmN5IGVxdWFscyBFWFRBTCAvIDIgKi8KKwkJZnJlcSA9IGV4dGFsX21oeiAqICgxMDAwMDAwIC8gMik7CiAJfQogCi0JLyogVGhlIGFyY2ggdGltZXIgZnJlcXVlbmN5IGVxdWFscyBFWFRBTCAvIDIgKi8KLQlmcmVxID0gZXh0YWxfbWh6ICogKDEwMDAwMDAgLyAyKTsKLQogCS8qIFJlbWFwICJhcm1nY250IGFkZHJlc3MgbWFwIiBzcGFjZSAqLwogCWJhc2UgPSBpb3JlbWFwKDB4ZTYwODAwMDAsIFBBR0VfU0laRSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Mi5jCmluZGV4IGQ2NDZjOGQuLjQ1OGEyY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQ3LDcgKzQzLDcgQEAKICNpbmNsdWRlICJzaDczNzIuaCIKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzaDczNzJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogY3JlYXRlIGEgMToxIGVudGl0eSBtYXAgZm9yIDB4ZTZ4eHh4eHgKKwkvKiBjcmVhdGUgYSAxOjEgaWRlbnRpdHkgbWFwcGluZyBmb3IgMHhlNnh4eHh4eAogCSAqIHVzZWQgYnkgQ1BHQSwgSU5UQyBhbmQgUEZDLgogCSAqLwogCXsKQEAgLTYwLDYgKzU2LDcgQEAKIAogdm9pZCBfX2luaXQgc2g3MzcyX21hcF9pbyh2b2lkKQogeworCWRlYnVnX2xsX2lvX2luaXQoKTsKIAlpb3RhYmxlX2luaXQoc2g3MzcyX2lvX2Rlc2MsIEFSUkFZX1NJWkUoc2g3MzcyX2lvX2Rlc2MpKTsKIH0KIApAQCAtMTAxMiw2ICsxMDA5LDcgQEAKIAkuaW5pdF9pcnEJPSBzaDczNzJfaW5pdF9pcnEsCiAJLmhhbmRsZV9pcnEJPSBzaG1vYmlsZV9oYW5kbGVfaXJxX2ludGMsCiAJLmluaXRfbWFjaGluZQk9IHNoNzM3Ml9hZGRfc3RhbmRhcmRfZGV2aWNlc19kdCwKKwkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLAogCS5kdF9jb21wYXQJPSBzaDczNzJfYm9hcmRzX2NvbXBhdF9kdCwKIE1BQ0hJTkVfRU5ECiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzNhMC5jCmluZGV4IGI3YmQ4ZTUuLjkzZWJlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczYTAuYwpAQCAtMTMsMTAgKzEzLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI2LDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvaTJjLXNoX21vYmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX2RtYS5oPgpAQCAtNDUsNyArNDIsNyBAQAogI2luY2x1ZGUgInNoNzNhMC5oIgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNoNzNhMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQkvKiBjcmVhdGUgYSAxOjEgZW50aXR5IG1hcCBmb3IgMHhlNnh4eHh4eAorCS8qIGNyZWF0ZSBhIDE6MSBpZGVudGl0eSBtYXBwaW5nIGZvciAweGU2eHh4eHh4CiAJICogdXNlZCBieSBDUEdBLCBJTlRDIGFuZCBQRkMuCiAJICovCiAJewpAQCAtNTgsNiArNTUsNyBAQAogCiB2b2lkIF9faW5pdCBzaDczYTBfbWFwX2lvKHZvaWQpCiB7CisJZGVidWdfbGxfaW9faW5pdCgpOwogCWlvdGFibGVfaW5pdChzaDczYTBfaW9fZGVzYywgQVJSQVlfU0laRShzaDczYTBfaW9fZGVzYykpOwogfQogCkBAIC0xOTIsMTEgKzE5MCwxOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19zaF9tb2JpbGVfcGxhdGZvcm1fZGF0YSBpMmNfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2xrc19wZXJfY291bnQJPSAyLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImkyYy1zaF9tb2JpbGUiLAogCS5pZAkJPSAwLAogCS5yZXNvdXJjZQk9IGkyYzBfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmMwX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wbGF0Zm9ybV9kYXRhLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMxX2RldmljZSA9IHsKQEAgLTIwNCw2ICsyMDksOSBAQAogCS5pZAkJPSAxLAogCS5yZXNvdXJjZQk9IGkyYzFfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmMxX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wbGF0Zm9ybV9kYXRhLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMyX2RldmljZSA9IHsKQEAgLTIxMSw2ICsyMTksOSBAQAogCS5pZAkJPSAyLAogCS5yZXNvdXJjZQk9IGkyYzJfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmMyX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wbGF0Zm9ybV9kYXRhLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMzX2RldmljZSA9IHsKQEAgLTIxOCw2ICsyMjksOSBAQAogCS5pZAkJPSAzLAogCS5yZXNvdXJjZQk9IGkyYzNfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmMzX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wbGF0Zm9ybV9kYXRhLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmM0X2RldmljZSA9IHsKQEAgLTIyNSw2ICsyMzksOSBAQAogCS5pZAkJPSA0LAogCS5yZXNvdXJjZQk9IGkyYzRfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmM0X3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wbGF0Zm9ybV9kYXRhLAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnIHNoNzNhMF9kbWFlX3NsYXZlc1tdID0gewpAQCAtNzQwLDE3ICs3NTcsMTIgQEAKIAkJCSAgICBBUlJBWV9TSVpFKHNoNzNhMF9sYXRlX2RldmljZXMpKTsKIH0KIAotdm9pZCBfX2luaXQgc2g3M2EwX2luaXRfZGVsYXkodm9pZCkKLXsKLQlzaG1vYmlsZV9pbml0X2RlbGF5KCk7Ci19Ci0KIC8qIGRvIG5vdGhpbmcgZm9yICFDT05GSUdfU01QIG9yICFDT05GSUdfSEFWRV9UV0QgKi8KIHZvaWQgX19pbml0IF9fd2VhayBzaDczYTBfcmVnaXN0ZXJfdHdkKHZvaWQpIHsgfQogCiB2b2lkIF9faW5pdCBzaDczYTBfZWFybHl0aW1lcl9pbml0KHZvaWQpCiB7Ci0Jc2g3M2EwX2luaXRfZGVsYXkoKTsKKwlzaG1vYmlsZV9pbml0X2RlbGF5KCk7CiAJc2g3M2EwX2Nsb2NrX2luaXQoKTsKIAlzaG1vYmlsZV9lYXJseXRpbWVyX2luaXQoKTsKIAlzaDczYTBfcmVnaXN0ZXJfdHdkKCk7CkBAIC03NzUsNiArNzg3LDEzIEBACiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQogCisjZGVmaW5lIFJFU0NOVDIgSU9NRU0oMHhlNjE4ODAyMCkKK3N0YXRpYyB2b2lkIHNoNzNhMF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qIERvIHNvZnQgcG93ZXIgb24gcmVzZXQgKi8KKwl3cml0ZWwoKDEgPDwgMzEpLCBSRVNDTlQyKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKnNoNzNhMF9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0ZGF0YSA9IHsKIAkicmVuZXNhcyxzaDczYTAiLAogCU5VTEwsCkBAIC03ODMsOSArODAyLDEwIEBACiBEVF9NQUNISU5FX1NUQVJUKFNINzNBMF9EVCwgIkdlbmVyaWMgU0g3M0EwIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIikKIAkuc21wCQk9IHNtcF9vcHMoc2g3M2EwX3NtcF9vcHMpLAogCS5tYXBfaW8JCT0gc2g3M2EwX21hcF9pbywKLQkuaW5pdF9lYXJseQk9IHNoNzNhMF9pbml0X2RlbGF5LAorCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKIAkuaW5pdF9tYWNoaW5lCT0gc2g3M2EwX2FkZF9zdGFuZGFyZF9kZXZpY2VzX2R0LAogCS5pbml0X2xhdGUJPSBzaG1vYmlsZV9pbml0X2xhdGUsCisJLnJlc3RhcnQJPSBzaDczYTBfcmVzdGFydCwKIAkuZHRfY29tcGF0CT0gc2g3M2EwX2JvYXJkc19jb21wYXRfZHQsCiBNQUNISU5FX0VORAogI2VuZGlmIC8qIENPTkZJR19VU0VfT0YgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2g3M2EwLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NoNzNhMC5oCmluZGV4IDM1OWI1ODIuLmYwMzdjNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2g3M2EwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zaDczYTAuaApAQCAtNzEsNyArNzEsNiBAQAogI2RlZmluZSBTSDczQTBfUElOVDBfSVJRKGlycSkgKChpcnEpICsgNzAwKQogI2RlZmluZSBTSDczQTBfUElOVDFfSVJRKGlycSkgKChpcnEpICsgNzMyKQogCi1leHRlcm4gdm9pZCBzaDczYTBfaW5pdF9kZWxheSh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzNhMF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzNhMF9pbml0X2lycV9kdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzNhMF9tYXBfaW8odm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NsZWVwLXNoNzM3Mi5TIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbGVlcC1zaDczNzIuUwppbmRleCA5NzgyODYyLi4xNDZiOGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NsZWVwLXNoNzM3Mi5TCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2xlZXAtc2g3MzcyLlMKQEAgLTIyLDExICsyMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtZW1ldjIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLWVtZXYyLmMKaW5kZXggNmZmMWRmMS4uYmFmZjNiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtZW1ldjIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1lbWV2Mi5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc3OS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc3OS5jCmluZGV4IDMxMDBlMzUuLjNmNzYxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3NzkuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3Nzc5LmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkwLmMKaW5kZXggMjMxMTY5NC4uOWMzZGExMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3OTAuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicGxhdHNtcC1hcG11LmgiCiAjaW5jbHVkZSAicG0tcmNhci5oIgogI2luY2x1ZGUgInI4YTc3OTAuaCIKIApAQCAtMzQsMTAgKzM1LDIzIEBACiAJLmlzcl9iaXQgPSAyMSwgLyogQ0E3LVNDVSAqLwogfTsKIAorc3RhdGljIHN0cnVjdCByY2FyX2FwbXVfY29uZmlnIHI4YTc3OTBfYXBtdV9jb25maWdbXSA9IHsKKwl7CisJCS5pb21lbSA9IERFRklORV9SRVNfTUVNKDB4ZTYxNTIwMDAsIDB4ODgpLAorCQkuY3B1cyA9IHsgMCwgMSwgMiwgMyB9LAorCX0sCisJeworCQkuaW9tZW0gPSBERUZJTkVfUkVTX01FTSgweGU2MTUxMDAwLCAweDg4KSwKKwkJLmNwdXMgPSB7IDB4MTAwLCAweDAxMDEsIDB4MTAyLCAweDEwMyB9LAorCX0KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCByOGE3NzkwX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewogCS8qIGxldCBBUE1VIGNvZGUgaW5zdGFsbCBkYXRhIHJlbGF0ZWQgdG8gc2htb2JpbGVfYm9vdF92ZWN0b3IgKi8KLQlzaG1vYmlsZV9zbXBfYXBtdV9wcmVwYXJlX2NwdXMobWF4X2NwdXMpOworCXNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyhtYXhfY3B1cywKKwkJCQkgICAgICAgcjhhNzc5MF9hcG11X2NvbmZpZywKKwkJCQkgICAgICAgQVJSQVlfU0laRShyOGE3NzkwX2FwbXVfY29uZmlnKSk7CiAKIAkvKiB0dXJuIG9uIHBvd2VyIHRvIFNDVSAqLwogCXI4YTc3OTBfcG1faW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MS5jCmluZGV4IGY3NDMzODYuLjdlNDllMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3OTEuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkxLmMKQEAgLTIxLDEzICsyMSwyMyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicGxhdHNtcC1hcG11LmgiCiAjaW5jbHVkZSAicjhhNzc5MS5oIgogI2luY2x1ZGUgInJjYXItZ2VuMi5oIgogCitzdGF0aWMgc3RydWN0IHJjYXJfYXBtdV9jb25maWcgcjhhNzc5MV9hcG11X2NvbmZpZ1tdID0geworCXsKKwkJLmlvbWVtID0gREVGSU5FX1JFU19NRU0oMHhlNjE1MjAwMCwgMHg4OCksCisJCS5jcHVzID0geyAwLCAxIH0sCisJfQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHI4YTc3OTFfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CiAJLyogbGV0IEFQTVUgY29kZSBpbnN0YWxsIGRhdGEgcmVsYXRlZCB0byBzaG1vYmlsZV9ib290X3ZlY3RvciAqLwotCXNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7CisJc2htb2JpbGVfc21wX2FwbXVfcHJlcGFyZV9jcHVzKG1heF9jcHVzLAorCQkJCSAgICAgICByOGE3NzkxX2FwbXVfY29uZmlnLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKHI4YTc3OTFfYXBtdV9jb25maWcpKTsKIAogCXI4YTc3OTFfcG1faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1zaDczYTAuYwppbmRleCAyMmQ4Zjg3Li5jMTZkYmZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1zaDczYTAuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYwppbmRleCA4N2M2YmUxLi5mMWQwMjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS90aW1lci5jCkBAIC0xMiwxMSArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CkBAIC00NSw2ICs0MCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmNwdXM7CiAJYm9vbCBpc19hN19hOF9hOSA9IGZhbHNlOwogCWJvb2wgaXNfYTE1ID0gZmFsc2U7CisJYm9vbCBoYXNfYXJjaF90aW1lciA9IGZhbHNlOwogCXUzMiBtYXhfZnJlcSA9IDA7CiAKIAljcHVzID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jcHVzIik7CkBAIC01NywxMiArNTMsMTYgQEAKIAkJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNsb2NrLWZyZXF1ZW5jeSIsICZmcmVxKSkKIAkJCW1heF9mcmVxID0gbWF4KG1heF9mcmVxLCBmcmVxKTsKIAotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhcm0sY29ydGV4LWE3IikgfHwKLQkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYXJtLGNvcnRleC1hOCIpIHx8Ci0JCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTkiKSkKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYXJtLGNvcnRleC1hOCIpIHx8CisJCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTkiKSkgewogCQkJaXNfYTdfYThfYTkgPSB0cnVlOwotCQllbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTE1IikpCisJCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhcm0sY29ydGV4LWE3IikpIHsKKwkJCWlzX2E3X2E4X2E5ID0gdHJ1ZTsKKwkJCWhhc19hcmNoX3RpbWVyID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTE1IikpIHsKIAkJCWlzX2ExNSA9IHRydWU7CisJCQloYXNfYXJjaF90aW1lciA9IHRydWU7CisJCX0KIAl9CiAKIAlvZl9ub2RlX3B1dChjcHVzKTsKQEAgLTcwLDEwICs3MCwxMiBAQAogCWlmICghbWF4X2ZyZXEpCiAJCXJldHVybjsKIAotCWlmIChpc19hN19hOF9hOSkKLQkJc2htb2JpbGVfc2V0dXBfZGVsYXlfaHoobWF4X2ZyZXEsIDEsIDMpOwotCWVsc2UgaWYgKGlzX2ExNSAmJiAhSVNfRU5BQkxFRChDT05GSUdfQVJNX0FSQ0hfVElNRVIpKQotCQlzaG1vYmlsZV9zZXR1cF9kZWxheV9oeihtYXhfZnJlcSwgMiwgNCk7CisJaWYgKCFoYXNfYXJjaF90aW1lciB8fCAhSVNfRU5BQkxFRChDT05GSUdfQVJNX0FSQ0hfVElNRVIpKSB7CisJCWlmIChpc19hN19hOF9hOSkKKwkJCXNobW9iaWxlX3NldHVwX2RlbGF5X2h6KG1heF9mcmVxLCAxLCAzKTsKKwkJZWxzZSBpZiAoaXNfYTE1KQorCQkJc2htb2JpbGVfc2V0dXBfZGVsYXlfaHoobWF4X2ZyZXEsIDIsIDQpOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNobW9iaWxlX2xhdGVfdGltZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1zb2NmcGdhL2NvcmUuaAppbmRleCA2MGM0NDNkLi40ODNjYjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc29jZnBnYS9jb3JlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgX19NQUNIX0NPUkVfSAogCiAjZGVmaW5lIFNPQ0ZQR0FfUlNUTUdSX0NUUkwJMHgwNAorI2RlZmluZSBTT0NGUEdBX1JTVE1HUl9NT0RNUFVSU1QJMHgxMAogI2RlZmluZSBTT0NGUEdBX1JTVE1HUl9NT0RQRVJSU1QJMHgxNAogI2RlZmluZSBTT0NGUEdBX1JTVE1HUl9CUkdNT0RSU1QJMHgxYwogCkBAIC0yOCw2ICsyOSw4IEBACiAjZGVmaW5lIFJTVE1HUl9DVFJMX1NXQ09MRFJTVFJFUQkweDEJLyogQ29sZCBSZXNldCAqLwogI2RlZmluZSBSU1RNR1JfQ1RSTF9TV1dBUk1SU1RSRVEJMHgyCS8qIFdhcm0gUmVzZXQgKi8KIAorI2RlZmluZSBSU1RNR1JfTVBVTU9EUlNUX0NQVTEJCTB4MiAgICAgLyogQ1BVMSBSZXNldCAqLworCiBleHRlcm4gdm9pZCBzb2NmcGdhX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqc29jZnBnYV9zY3VfYmFzZV9hZGRyOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1zb2NmcGdhL3BsYXRzbXAuYwppbmRleCAxNmNhOTdiLi5jNjRkODliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc29jZnBnYS9wbGF0c21wLmMKQEAgLTM0LDE3ICszNCwyMSBAQAogCWludCB0cmFtcG9saW5lX3NpemUgPSAmc2Vjb25kYXJ5X3RyYW1wb2xpbmVfZW5kIC0gJnNlY29uZGFyeV90cmFtcG9saW5lOwogCiAJaWYgKHNvY2ZwZ2FfY3B1MXN0YXJ0X2FkZHIpIHsKKwkJLyogVGhpcyB3aWxsIHB1dCBDUFUgIzEgaW50byByZXNldC4gKi8KKwkJd3JpdGVsKFJTVE1HUl9NUFVNT0RSU1RfQ1BVMSwKKwkJICAgICAgIHJzdF9tYW5hZ2VyX2Jhc2VfYWRkciArIFNPQ0ZQR0FfUlNUTUdSX01PRE1QVVJTVCk7CisKIAkJbWVtY3B5KHBoeXNfdG9fdmlydCgwKSwgJnNlY29uZGFyeV90cmFtcG9saW5lLCB0cmFtcG9saW5lX3NpemUpOwogCi0JCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoc29jZnBnYV9zZWNvbmRhcnlfc3RhcnR1cCksCi0JCQkoc3lzX21hbmFnZXJfYmFzZV9hZGRyICsgKHNvY2ZwZ2FfY3B1MXN0YXJ0X2FkZHIgJiAweDAwMDAwMGZmKSkpOworCQl3cml0ZWwodmlydF90b19waHlzKHNvY2ZwZ2Ffc2Vjb25kYXJ5X3N0YXJ0dXApLAorCQkgICAgICAgc3lzX21hbmFnZXJfYmFzZV9hZGRyICsgKHNvY2ZwZ2FfY3B1MXN0YXJ0X2FkZHIgJiAweDAwMDAwMGZmKSk7CiAKIAkJZmx1c2hfY2FjaGVfYWxsKCk7CiAJCXNtcF93bWIoKTsKIAkJb3V0ZXJfY2xlYW5fcmFuZ2UoMCwgdHJhbXBvbGluZV9zaXplKTsKIAotCQkvKiBUaGlzIHdpbGwgcmVsZWFzZSBDUFUgIzEgb3V0IG9mIHJlc2V0LiovCi0JCV9fcmF3X3dyaXRlbCgwLCByc3RfbWFuYWdlcl9iYXNlX2FkZHIgKyAweDEwKTsKKwkJLyogVGhpcyB3aWxsIHJlbGVhc2UgQ1BVICMxIG91dCBvZiByZXNldC4gKi8KKwkJd3JpdGVsKDAsIHJzdF9tYW5hZ2VyX2Jhc2VfYWRkciArIFNPQ0ZQR0FfUlNUTUdSX01PRE1QVVJTVCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04NiwxMCArOTAsOSBAQAogICovCiBzdGF0aWMgdm9pZCBzb2NmcGdhX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKIHsKLQljcHVfZG9faWRsZSgpOwotCi0JLyogV2Ugc2hvdWxkIGhhdmUgbmV2ZXIgcmV0dXJuZWQgZnJvbSBpZGxlICovCi0JcGFuaWMoImNwdSAlZCB1bmV4cGVjdGVkbHkgZXhpdCBmcm9tIHNodXRkb3duXG4iLCBjcHUpOworCS8qIERvIFdGSS4gSWYgd2Ugd2FrZSB1cCBlYXJseSwgZ28gYmFjayBpbnRvIFdGSSAqLworCXdoaWxlICgxKQorCQljcHVfZG9faWRsZSgpOwogfQogCiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgc29jZnBnYV9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXN0aS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zdGkvS2NvbmZpZwppbmRleCA4NzhlOWVjLi44ODI1YmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXN0aS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc3RpL0tjb25maWcKQEAgLTQyLDQgKzQyLDE0IEBACiAJICBhbmQgb3RoZXIgZGlnaXRhbCBhdWRpby92aWRlbyBhcHBsaWNhdGlvbnMgdXNpbmcgRmxhdHRlbmVkIERldmljZQogCSAgVHJlZXMuCiAKK2NvbmZpZyBTT0NfU1RJSDQwNworCWJvb2wgIlNUaUg0MDcgU1RNaWNyb2VsZWN0cm9uaWNzIENvbnN1bWVyIEVsZWN0cm9uaWNzIGZhbWlseSIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgU1RJSDQwN19SRVNFVAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBTVE1pY3JvZWxlY3Ryb25pY3MgRGlnaXRhbCBDb25zdW1lcgorCSAgRWxlY3Ryb25pY3MgZmFtaWx5IFN0aUg0MDcgcGFydHMsIHRhcmdldHRlZCBhdCBzZXQtdG9wLWJveAorCSAgYW5kIG90aGVyIGRpZ2l0YWwgYXVkaW8vdmlkZW8gYXBwbGljYXRpb25zIHVzaW5nIEZsYXR0ZW5lZCBEZXZpY2UKKwkgIFRyZWVzLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zdW54aS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9LY29uZmlnCmluZGV4IDFhYWExZTEuLmE3NzYwNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3VueGkvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXN1bnhpL0tjb25maWcKQEAgLTQyLDQgKzQyLDExIEBACiAJc2VsZWN0IE1GRF9TVU42SV9QUkNNCiAJc2VsZWN0IFJFU0VUX0NPTlRST0xMRVIKIAorY29uZmlnIE1BQ0hfU1VOOUkKKwlib29sICJBbGx3aW5uZXIgKHN1bjlpKSBTb0NzIHN1cHBvcnQiCisJZGVmYXVsdCBBUkNIX1NVTlhJCisJc2VsZWN0IEFSQ0hfSEFTX1JFU0VUX0NPTlRST0xMRVIKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBSRVNFVF9DT05UUk9MTEVSCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXN1bnhpL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jCmluZGV4IGM1MzA3N2IuLmU0NGQwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHNtcF9vcGVyYXRpb25zIHN1bjZpX3NtcF9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgc3VuNmlfc21wX29wcyBfX2luaXRkYXRhID0gewogCS5zbXBfcHJlcGFyZV9jcHVzCT0gc3VuNmlfc21wX3ByZXBhcmVfY3B1cywKIAkuc21wX2Jvb3Rfc2Vjb25kYXJ5CT0gc3VuNmlfc21wX2Jvb3Rfc2Vjb25kYXJ5LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3VueGkvc3VueGkuYyBiL2FyY2gvYXJtL21hY2gtc3VueGkvc3VueGkuYwppbmRleCBkNzU5OGFlLi4xZjk4Njc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXN1bnhpL3N1bnhpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9zdW54aS5jCkBAIC02MywzICs2MywxMiBAQAogRFRfTUFDSElORV9TVEFSVChTVU44SV9EVCwgIkFsbHdpbm5lciBzdW44aSAoQTIzKSBGYW1pbHkiKQogCS5kdF9jb21wYXQJPSBzdW44aV9ib2FyZF9kdF9jb21wYXQsCiBNQUNISU5FX0VORAorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN1bjlpX2JvYXJkX2R0X2NvbXBhdFtdID0geworCSJhbGx3aW5uZXIsc3VuOWktYTgwIiwKKwlOVUxMLAorfTsKKworRFRfTUFDSElORV9TVEFSVChTVU45SV9EVCwgIkFsbHdpbm5lciBzdW45aSBGYW1pbHkiKQorCS5kdF9jb21wYXQJPSBzdW45aV9ib2FyZF9kdF9jb21wYXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnCmluZGV4IDA5NTM5OTYuLmQwYmU5YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJYm9vbCAiTlZJRElBIFRlZ3JhIiBpZiBBUkNIX01VTFRJX1Y3CiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfVFJVU1RFRF9GT1VOREFUSU9OUworCXNlbGVjdCBBUk1fQU1CQQogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IENMS1NSQ19NTUlPCiAJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKQEAgLTU5LDEyICs2MCw0IEBACiAJICBTdXBwb3J0IGZvciBOVklESUEgVGVncmEgVDEyNCBwcm9jZXNzb3IgZmFtaWx5LCBiYXNlZCBvbiB0aGUKIAkgIEFSTSBDb3J0ZXhBMTVNUCBDUFUKIAotY29uZmlnIFRFR1JBX0FIQgotCWJvb2wgIkVuYWJsZSBBSEIgZHJpdmVyIGZvciBOVklESUEgVGVncmEgU29DcyIKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBBZGRzIEFIQiBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkgZm9yIE5WSURJQSBUZWdyYSBTb0NzLAotCSAgd2hpY2ggY29udHJvbHMgQUhCIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gYW5kIHNvbWUKLQkgIHBlcmZvcm1hbmNlIHBhcmFtZXRlcnMocHJpb3JpdHksIHByZWZlY2ggc2l6ZSkuCi0KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2NwdWlkbGUtdGVncmExMTQuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTExNC5jCmluZGV4IGUzZWJkY2UuLjQyNWI2YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTExNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTExNC5jCkBAIC00OSw3ICs0OSw3IEBACiAJY2FsbF9maXJtd2FyZV9vcChwcmVwYXJlX2lkbGUpOwogCiAJLyogRG8gc3VzcGVuZCBieSBvdXJzZWx2ZXMgaWYgdGhlIGZpcm13YXJlIGRvZXMgbm90IGltcGxlbWVudCBpdCAqLwotCWlmIChjYWxsX2Zpcm13YXJlX29wKGRvX2lkbGUpID09IC1FTk9TWVMpCisJaWYgKGNhbGxfZmlybXdhcmVfb3AoZG9faWRsZSwgMCkgPT0gLUVOT1NZUykKIAkJY3B1X3N1c3BlbmQoMCwgdGVncmEzMF9zbGVlcF9jcHVfc2Vjb25kYXJ5X2ZpbmlzaCk7CiAKIAljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRVhJVCwgJmRldi0+Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jCmluZGV4IGRhN2JlMTMuLmFiOTVmNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYwpAQCAtOTksNDIgKzk5LDQyIEBACiAKIHN0YXRpYyB2b2lkIHRlZ3JhX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWlmIChkLT5pcnEgPCBGSVJTVF9MRUdBQ1lfSVJRKQorCWlmIChkLT5od2lycSA8IEZJUlNUX0xFR0FDWV9JUlEpCiAJCXJldHVybjsKIAotCXRlZ3JhX2lycV93cml0ZV9tYXNrKGQtPmlycSwgSUNUTFJfQ1BVX0lFUl9DTFIpOworCXRlZ3JhX2lycV93cml0ZV9tYXNrKGQtPmh3aXJxLCBJQ1RMUl9DUFVfSUVSX0NMUik7CiB9CiAKIHN0YXRpYyB2b2lkIHRlZ3JhX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaWYgKGQtPmlycSA8IEZJUlNUX0xFR0FDWV9JUlEpCisJaWYgKGQtPmh3aXJxIDwgRklSU1RfTEVHQUNZX0lSUSkKIAkJcmV0dXJuOwogCi0JdGVncmFfaXJxX3dyaXRlX21hc2soZC0+aXJxLCBJQ1RMUl9DUFVfSUVSX1NFVCk7CisJdGVncmFfaXJxX3dyaXRlX21hc2soZC0+aHdpcnEsIElDVExSX0NQVV9JRVJfU0VUKTsKIH0KIAogc3RhdGljIHZvaWQgdGVncmFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpZiAoZC0+aXJxIDwgRklSU1RfTEVHQUNZX0lSUSkKKwlpZiAoZC0+aHdpcnEgPCBGSVJTVF9MRUdBQ1lfSVJRKQogCQlyZXR1cm47CiAKLQl0ZWdyYV9pcnFfd3JpdGVfbWFzayhkLT5pcnEsIElDVExSX0NQVV9JRVBfRklSX0NMUik7CisJdGVncmFfaXJxX3dyaXRlX21hc2soZC0+aHdpcnEsIElDVExSX0NQVV9JRVBfRklSX0NMUik7CiB9CiAKIHN0YXRpYyB2b2lkIHRlZ3JhX2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaWYgKGQtPmlycSA8IEZJUlNUX0xFR0FDWV9JUlEpCisJaWYgKGQtPmh3aXJxIDwgRklSU1RfTEVHQUNZX0lSUSkKIAkJcmV0dXJuOwogCi0JdGVncmFfaXJxX3dyaXRlX21hc2soZC0+aXJxLCBJQ1RMUl9DUFVfSUVQX0ZJUl9DTFIpOworCXRlZ3JhX2lycV93cml0ZV9tYXNrKGQtPmh3aXJxLCBJQ1RMUl9DUFVfSUVQX0ZJUl9DTFIpOwogfQogCiBzdGF0aWMgaW50IHRlZ3JhX3JldHJpZ2dlcihzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaWYgKGQtPmlycSA8IEZJUlNUX0xFR0FDWV9JUlEpCisJaWYgKGQtPmh3aXJxIDwgRklSU1RfTEVHQUNZX0lSUSkKIAkJcmV0dXJuIDA7CiAKLQl0ZWdyYV9pcnFfd3JpdGVfbWFzayhkLT5pcnEsIElDVExSX0NQVV9JRVBfRklSX1NFVCk7CisJdGVncmFfaXJxX3dyaXRlX21hc2soZC0+aHdpcnEsIElDVExSX0NQVV9JRVBfRklSX1NFVCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE0Miw3ICsxNDIsNyBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCB0ZWdyYV9zZXRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBlbmFibGUpCiB7Ci0JdTMyIGlycSA9IGQtPmlycTsKKwl1MzIgaXJxID0gZC0+aHdpcnE7CiAJdTMyIGluZGV4LCBtYXNrOwogCiAJaWYgKGlycSA8IEZJUlNUX0xFR0FDWV9JUlEgfHwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvcmVzZXQtaGFuZGxlci5TIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9yZXNldC1oYW5kbGVyLlMKaW5kZXggN2IyYmFhYi4uNzFiZTRhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9yZXNldC1oYW5kbGVyLlMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9yZXNldC1oYW5kbGVyLlMKQEAgLTUxLDYgKzUxLDcgQEAKICBUSFVNQigJaXQJbmUgKQogCWJuZQljcHVfcmVzdW1lCQkJQCBubwogCisJdGVncmFfZ2V0X3NvY19pZCBURUdSQV9BUEJfTUlTQ19CQVNFLCByNgogCS8qIEFyZSB3ZSBvbiBUZWdyYTIwPyAqLwogCWNtcAlyNiwgI1RFR1JBMjAKIAliZXEJMWYJCQkJQCBZZXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9kdW1teXNwaWNoaXAuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9kdW1teXNwaWNoaXAuYwppbmRleCBlYzAyODNjLi4xMzE5OTY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jCkBAIC04MCw4ICs4MCw4IEBACiAJCSJpbiA4Yml0IG1vZGVcbiIpOwogCXN0YXR1cyA9IHNwaV93OHI4KHNwaSwgMHhBQSk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpcGxlIHRlc3QgMTogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCAxOiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxOiBTVUNDRVNTIVxuIik7CiAKQEAgLTg5LDggKzg5LDggQEAKIAkJImluIDhiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CiAJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMjogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKLQkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDI6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgMjogU1VDQ0VTUyFcbiIpOwogCkBAIC05OCw4ICs5OCw4IEBACiAJCSJpbiA4Yml0IG1vZGUgKHNlZSBpZiB3ZSBvdmVyZmxvdyBGSUZPKVxuIik7CiAJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgMTQsICZyeGJ1ZlswXSwgMTQpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAzOiBGQUlMVVJFOiBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgIgotCQkJICAgIihwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLCBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCAzOiBGQUlMVVJFOiBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgMzogU1VDQ0VTUyFcbiIpOwogCkBAIC0xMDcsMTQgKzEwNywxNCBAQAogCQkiYnl0ZXMgZ2FyYmFnZSB3aXRoIHNwaV9yZWFkKCkgaW4gOGJpdCBtb2RlXG4iKTsKIAlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmdHhidWZbMF0sIDgpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNCBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOwogCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJnJ4YnVmWzBdLCA4KTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQgc3RlcCAyOiBTVUNDRVNTIVxuIik7CiAKQEAgLTEyMiwxNiArMTIyLDE0IEBACiAJCSIxNCBieXRlcyBnYXJiYWdlIHdpdGggc3BpX3JlYWQoKSBpbiA4Yml0IG1vZGVcbiIpOwogCXN0YXR1cyA9IHNwaV93cml0ZShzcGksICZ0eGJ1ZlswXSwgMTQpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA1IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKLQkJCSAgIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNSBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKIAlzdGF0dXMgPSBzcGlfcmVhZChzcGksICZyeGJ1ZlswXSwgMTQpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA1IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAotCQkJICAgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNSBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDU6IFNVQ0NFU1MhXG4iKTsKIApAQCAtMTQwLDE2ICsxMzgsMTQgQEAKIAkJRE1BX1RFU1RfU0laRSwgRE1BX1RFU1RfU0laRSk7CiAJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJmJpZ3R4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKLQkJCSAgIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDYgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNiBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKIAlzdGF0dXMgPSBzcGlfcmVhZChzcGksICZiaWdyeGJ1Zl92aXJ0dWFsWzBdLCBETUFfVEVTVF9TSVpFKTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNiBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKLQkJCSAgIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDYgc3RlcCAyOiBGQUlMVVJFOiBzcGlfcmVhZCgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2OiBTVUNDRVNTIVxuIik7CiAKQEAgLTE2OSwxOCArMTY1LDE3IEBACiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDc6IFNVQ0NFU1MhIChleHBlY3RlZCBmYWlsdXJlIHdpdGggIgogCQkJInN0YXR1cyBFSU8pXG4iKTsKIAllbHNlIGlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNzogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKLQkJcHJfd2FybmluZygiU2lwbGUgdGVzdCA3OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKLQkJCSAgICJzdWNjZWVkZWQgYnV0IGl0IHdhcyBleHBlY3RlZCB0byBmYWlsIVxuIik7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgc3VjY2VlZGVkIGJ1dCBpdCB3YXMgZXhwZWN0ZWQgdG8gZmFpbCFcbiIpOwogCiAJcHJfaW5mbygiU2ltcGxlIHRlc3QgODogd3JpdGUgOCBieXRlcywgcmVhZCBiYWNrIDggYnl0ZXMgZ2FyYmFnZSAiCiAJCSJpbiAxNmJpdCBtb2RlIChmdWxsIEZJRk8pXG4iKTsKIAlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCA4LCAmcnhidWZbMF0sIDgpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA4OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgODogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA4OiBTVUNDRVNTIVxuIik7CiAKQEAgLTE4OCw4ICsxODMsOCBAQAogCQkiaW4gMTZiaXQgbW9kZSAoc2VlIGlmIHdlIG92ZXJmbG93IEZJRk8pXG4iKTsKIAlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCAxNCwgJnJ4YnVmWzBdLCAxNCk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDk6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAiCi0JCQkgICAiKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDk6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiBTVUNDRVNTIVxuIik7CiAKQEAgLTE5OCwxNyArMTkzLDE1IEBACiAJICAgICAgIERNQV9URVNUX1NJWkUsIERNQV9URVNUX1NJWkUpOwogCXN0YXR1cyA9IHNwaV93cml0ZShzcGksICZiaWd0eGJ1Zl92aXJ0dWFsWzBdLCBETUFfVEVTVF9TSVpFKTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMTAgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAotCQkJICAgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgMTAgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgMTAgc3RlcCAxOiBTVUNDRVNTIVxuIik7CiAKIAlzdGF0dXMgPSBzcGlfcmVhZChzcGksICZiaWdyeGJ1Zl92aXJ0dWFsWzBdLCBETUFfVEVTVF9TSVpFKTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMTAgc3RlcCAyOiBGQUlMVVJFOiBzcGlfcmVhZCgpICIKLQkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCi0JCQkgICBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDEwOiBTVUNDRVNTIVxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZwppbmRleCA2OTllODYwLi5jOWFjMTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9LY29uZmlnCkBAIC0zMiw2ICszMiw3IEBACiAJc2VsZWN0IFBJTkNUUkxfQUI4NTQwCiAJc2VsZWN0IFJFR1VMQVRPUgogCXNlbGVjdCBSRUdVTEFUT1JfREI4NTAwX1BSQ01VCisJc2VsZWN0IFBNX0dFTkVSSUNfRE9NQUlOUyBpZiBQTQogCiBjb25maWcgTUFDSF9NT1A1MDAKIAlib29sICJVODUwMCBEZXZlbG9wbWVudCBwbGF0Zm9ybSwgTU9QNTAwIHZlcnNpb25zIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtdXg1MDAvTWFrZWZpbGUKaW5kZXggOTc0MWRlOTUuLjQ0MThhNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZQpAQCAtOSw1ICs5LDYgQEAKIAkJCQlib2FyZC1tb3A1MDAtYXVkaW8ubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHBsYXRzbXAubyBoZWFkc21wLm8KIG9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJKz0gaG90cGx1Zy5vCitvYmotJChDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TKSArPSBwbV9kb21haW5zLm8KIAogQ0ZMQUdTX2hvdHBsdWcubwkJKz0gLW1hcmNoPWFybXY3LWEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvcG0uYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvcG0uYwppbmRleCBiODBhOWEyLi4yY2I1ODdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9wbS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hcm0tdXg1MDAtcG0uaD4KIAogI2luY2x1ZGUgImRiODUwMC1yZWdzLmgiCisjaW5jbHVkZSAicG1fZG9tYWlucy5oIgogCiAvKiBBUk0gV0ZJIFN0YW5kYnkgc2lnbmFsIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBSQ01fQVJNX1dGSV9TVEFOREJZICAgIChwcmNtdV9iYXNlICsgMHgxMzApCkBAIC0xOTEsNCArMTkyLDcgQEAKIAogCS8qIFNldCB1cCB1eDUwMCBzdXNwZW5kIGNhbGxiYWNrcy4gKi8KIAlzdXNwZW5kX3NldF9vcHMoVVg1MDBfU1VTUEVORF9PUFMpOworCisJLyogSW5pdGlhbGl6ZSB1eDUwMCBwb3dlciBkb21haW5zICovCisJdXg1MDBfcG1fZG9tYWluc19pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL3BtX2RvbWFpbnMuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvcG1fZG9tYWlucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGI1YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL3BtX2RvbWFpbnMuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMdGQuCisgKgorICogQXV0aG9yOiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICoKKyAqIEltcGxlbWVudHMgUE0gZG9tYWlucyB1c2luZyB0aGUgZ2VuZXJpYyBQTSBkb21haW4gZm9yIHV4NTAwLgorICovCisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcG1fZG9tYWluLmg+CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9hcm0vdXg1MDBfcG1fZG9tYWlucy5oPgorI2luY2x1ZGUgInBtX2RvbWFpbnMuaCIKKworc3RhdGljIGludCBwZF9wb3dlcl9vZmYoc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpkb21haW4pCit7CisJLyoKKwkgKiBIYW5kbGUgdGhlIGdhdGluZyBvZiB0aGUgUE0gZG9tYWluIHJlZ3VsYXRvciBoZXJlLgorCSAqCisJICogRHJpdmVycy9zdWJzeXN0ZW1zIGhhbmRsaW5nIGRldmljZXMgaW4gdGhlIFBNIGRvbWFpbiBuZWVkcyB0byBwZXJmb3JtCisJICogcmVnaXN0ZXIgY29udGV4dCBzYXZlL3Jlc3RvcmUgZnJvbSB0aGVpciByZXNwZWN0aXZlIHJ1bnRpbWUgUE0KKwkgKiBjYWxsYmFja3MsIHRvIGJlIGFibGUgdG8gZW5hYmxlIFBNIGRvbWFpbiBnYXRpbmcvdW5nYXRpbmcuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGRfcG93ZXJfb24oc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpkb21haW4pCit7CisJLyoKKwkgKiBIYW5kbGUgdGhlIHVuZ2F0aW5nIG9mIHRoZSBQTSBkb21haW4gcmVndWxhdG9yIGhlcmUuCisJICoKKwkgKiBEcml2ZXJzL3N1YnN5c3RlbXMgaGFuZGxpbmcgZGV2aWNlcyBpbiB0aGUgUE0gZG9tYWluIG5lZWRzIHRvIHBlcmZvcm0KKwkgKiByZWdpc3RlciBjb250ZXh0IHNhdmUvcmVzdG9yZSBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgcnVudGltZSBQTQorCSAqIGNhbGxiYWNrcywgdG8gYmUgYWJsZSB0byBlbmFibGUgUE0gZG9tYWluIGdhdGluZy91bmdhdGluZy4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiB1eDUwMF9wbV9kb21haW5fdmFwZSA9IHsKKwkubmFtZSA9ICJWQVBFIiwKKwkucG93ZXJfb2ZmID0gcGRfcG93ZXJfb2ZmLAorCS5wb3dlcl9vbiA9IHBkX3Bvd2VyX29uLAorfTsKKworc3RhdGljIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqdXg1MDBfcG1fZG9tYWluc1tOUl9ET01BSU5TXSA9IHsKKwlbRE9NQUlOX1ZBUEVdID0gJnV4NTAwX3BtX2RvbWFpbl92YXBlLAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdXg1MDBfcG1fZG9tYWluX21hdGNoZXNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInN0ZXJpY3Nzb24sdXg1MDAtcG0tZG9tYWlucyIsIH0sCisJeyB9LAorfTsKKworaW50IF9faW5pdCB1eDUwMF9wbV9kb21haW5zX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBnZW5wZF9vbmVjZWxsX2RhdGEgKmdlbnBkX2RhdGE7CisJaW50IGk7CisKKwlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCB1eDUwMF9wbV9kb21haW5fbWF0Y2hlcyk7CisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlnZW5wZF9kYXRhID0ga3phbGxvYyhzaXplb2YoKmdlbnBkX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdlbnBkX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJZ2VucGRfZGF0YS0+ZG9tYWlucyA9IHV4NTAwX3BtX2RvbWFpbnM7CisJZ2VucGRfZGF0YS0+bnVtX2RvbWFpbnMgPSBBUlJBWV9TSVpFKHV4NTAwX3BtX2RvbWFpbnMpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodXg1MDBfcG1fZG9tYWlucyk7ICsraSkKKwkJcG1fZ2VucGRfaW5pdCh1eDUwMF9wbV9kb21haW5zW2ldLCBOVUxMLCBmYWxzZSk7CisKKwlvZl9nZW5wZF9hZGRfcHJvdmlkZXJfb25lY2VsbChucCwgZ2VucGRfZGF0YSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL3BtX2RvbWFpbnMuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvcG1fZG9tYWlucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2M2QzYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL3BtX2RvbWFpbnMuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMdGQuCisgKgorICogQXV0aG9yOiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICovCisKKyNpZm5kZWYgX19NQUNIX1VYNTAwX1BNX0RPTUFJTlNfSAorI2RlZmluZSBfX01BQ0hfVVg1MDBfUE1fRE9NQUlOU19ICisKKyNpZmRlZiBDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TCitleHRlcm4gaW50IF9faW5pdCB1eDUwMF9wbV9kb21haW5zX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgdXg1MDBfcG1fZG9tYWluc19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZwppbmRleCBiMmNmYmExNmMuLmQ2YjE2ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL0tjb25maWcKQEAgLTE2LDYgKzE2LDcgQEAKIAlzZWxlY3QgUE9XRVJfUkVTRVQKIAlzZWxlY3QgUE9XRVJfUkVTRVRfVkVYUFJFU1MKIAlzZWxlY3QgUE9XRVJfU1VQUExZCisJc2VsZWN0IFJFR1VMQVRPUiBpZiBNTUNfQVJNTU1DSQogCXNlbGVjdCBSRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpZiBSRUdVTEFUT1IKIAlzZWxlY3QgVkVYUFJFU1NfQ09ORklHCiAJc2VsZWN0IFZFWFBSRVNTX1NZU0NGRwpAQCAtNDksOSArNTAsNiBAQAogCSAgYnVpbGQgYSB3b3JraW5nIGtlcm5lbCwgeW91IG11c3QgYWxzbyBlbmFibGUgcmVsZXZhbnQgY29yZQogCSAgdGlsZSBzdXBwb3J0IG9yIEZsYXR0ZW5lZCBEZXZpY2UgVHJlZSBiYXNlZCBzdXBwb3J0IG9wdGlvbnMuCiAKLWNvbmZpZyBBUkNIX1ZFWFBSRVNTX0NBOVg0Ci0JYm9vbCAiVmVyc2F0aWxlIEV4cHJlc3MgQ29ydGV4LUE5eDQgdGlsZSIKLQogY29uZmlnIEFSQ0hfVkVYUFJFU1NfRENTQ0IKIAlib29sICJEdWFsIENsdXN0ZXIgU3lzdGVtIENvbnRyb2wgQmxvY2sgKERDU0NCKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gTUNQTQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvTWFrZWZpbGUKaW5kZXggZmM2NDliYy4uZjVjMTAwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL01ha2VmaWxlCkBAIC0xLDExICsxLDEwIEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwotY2NmbGFncy0kKENPTkZJR19BUkNIX01VTFRJUExBVEZPUk0pIDo9IC1JJChzcmN0cmVlKS8kKHNyYykvaW5jbHVkZSBcCitjY2ZsYWdzLSQoQ09ORklHX0FSQ0hfTVVMVElQTEFURk9STSkgOj0gXAogCS1JJChzcmN0cmVlKS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9pbmNsdWRlCiAKIG9iai15CQkJCQk6PSB2Mm0ubwotb2JqLSQoQ09ORklHX0FSQ0hfVkVYUFJFU1NfQ0E5WDQpCSs9IGN0LWNhOXg0Lm8KIG9iai0kKENPTkZJR19BUkNIX1ZFWFBSRVNTX0RDU0NCKQkrPSBkY3NjYi5vCWRjc2NiX3NldHVwLm8KIENGTEFHU19kY3NjYi5vCQkJCSs9IC1tYXJjaD1hcm12Ny1hCiBDRkxBR1NfUkVNT1ZFX2Rjc2NiLm8JCQk9IC1wZwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jb3JlLmggYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2NvcmUuaAppbmRleCAxNTJmYWQ5Li4yYTExZDNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2NvcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2NvcmUuaApAQCAtMSwxMiArMSw1IEBACi0vKiAyTUIgbGFyZ2UgYXJlYSBmb3IgbW90aGVyYm9hcmQncyBwZXJpcGhlcmFscyBzdGF0aWMgbWFwcGluZyAqLwotI2RlZmluZSBWMk1fUEVSSVBIIDB4ZjgwMDAwMDAKLQotLyogVGlsZSdzIHBlcmlwaGVyYWxzIHN0YXRpYyBtYXBwaW5ncyBzaG91bGQgc3RhcnQgaGVyZSAqLwotI2RlZmluZSBWMlRfUEVSSVBIIDB4ZjgyMDAwMDAKLQogYm9vbCB2ZXhwcmVzc19zbXBfaW5pdF9vcHModm9pZCk7CiAKLWV4dGVybiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMJdmV4cHJlc3Nfc21wX29wczsKIGV4dGVybiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMJdmV4cHJlc3Nfc21wX2R0X29wczsKIAogZXh0ZXJuIHZvaWQgdmV4cHJlc3NfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY3QtY2E5eDQuYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY3QtY2E5eDQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdiZWEwNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2N0LWNhOXg0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqIFZlcnNhdGlsZSBFeHByZXNzIENvcmUgVGlsZSBDb3J0ZXggQTl4NCBTdXBwb3J0Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgotI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvdmlkZW8tY2xjZC12ZXJzYXRpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXhwcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KLSNpbmNsdWRlIDxhc20vc21wX3R3ZC5oPgotCi0jaW5jbHVkZSA8bWFjaC9jdC1jYTl4NC5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3RpbWVyLXNwLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0KLSNpbmNsdWRlICJjb3JlLmgiCi0KLSNpbmNsdWRlIDxtYWNoL21vdGhlcmJvYXJkLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgY3RfY2E5eDRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbCAgICAgICAgPSBWMlRfUEVSSVBILAotCQkucGZuICAgICAgICAgICAgPSBfX3BoeXNfdG9fcGZuKENUX0NBOVg0X01QSUMpLAotCQkubGVuZ3RoICAgICAgICAgPSBTWl84SywKLQkJLnR5cGUgICAgICAgICAgID0gTVRfREVWSUNFLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3RfY2E5eDRfbWFwX2lvKHZvaWQpCi17Ci0JaW90YWJsZV9pbml0KGN0X2NhOXg0X2lvX2Rlc2MsIEFSUkFZX1NJWkUoY3RfY2E5eDRfaW9fZGVzYykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2E5eDRfbDJfaW5pdCh2b2lkKQotewotI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCi0Jdm9pZCBfX2lvbWVtICpsMngwX2Jhc2UgPSBpb3JlbWFwKENUX0NBOVg0X0wyQ0MsIFNaXzRLKTsKLQotCWlmIChsMngwX2Jhc2UpIHsKLQkJLyogc2V0IFJBTSBsYXRlbmNpZXMgdG8gMSBjeWNsZSBmb3IgdGhpcyBjb3JlIHRpbGUuICovCi0JCXdyaXRlbCgwLCBsMngwX2Jhc2UgKyBMMzEwX1RBR19MQVRFTkNZX0NUUkwpOwotCQl3cml0ZWwoMCwgbDJ4MF9iYXNlICsgTDMxMF9EQVRBX0xBVEVOQ1lfQ1RSTCk7Ci0KLQkJbDJ4MF9pbml0KGwyeDBfYmFzZSwgMHgwMDQwMDAwMCwgMHhmZTBmZmZmZik7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJMMkM6IHVuYWJsZSB0byBtYXAgTDIgY2FjaGUgY29udHJvbGxlclxuIik7Ci0JfQotI2VuZGlmCi19Ci0KLSNpZmRlZiBDT05GSUdfSEFWRV9BUk1fVFdECi1zdGF0aWMgREVGSU5FX1RXRF9MT0NBTF9USU1FUih0d2RfbG9jYWxfdGltZXIsIEE5X01QQ09SRV9UV0QsIElSUV9MT0NBTFRJTUVSKTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNhOXg0X3R3ZF9pbml0KHZvaWQpCi17Ci0JaW50IGVyciA9IHR3ZF9sb2NhbF90aW1lcl9yZWdpc3RlcigmdHdkX2xvY2FsX3RpbWVyKTsKLQlpZiAoZXJyKQotCQlwcl9lcnIoInR3ZF9sb2NhbF90aW1lcl9yZWdpc3RlciBmYWlsZWQgJWRcbiIsIGVycik7Ci19Ci0jZWxzZQotI2RlZmluZSBjYTl4NF90d2RfaW5pdCgpCWRvIHt9IHdoaWxlKDApCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGN0X2NhOXg0X2luaXRfaXJxKHZvaWQpCi17Ci0JZ2ljX2luaXQoMCwgMjksIGlvcmVtYXAoQTlfTVBDT1JFX0dJQ19ESVNULCBTWl80SyksCi0JCSBpb3JlbWFwKEE5X01QQ09SRV9HSUNfQ1BVLCBTWl8yNTYpKTsKLQljYTl4NF90d2RfaW5pdCgpOwotCWNhOXg0X2wyX2luaXQoKTsKLX0KLQotc3RhdGljIGludCBjdF9jYTl4NF9jbGNkX3NldHVwKHN0cnVjdCBjbGNkX2ZiICpmYikKLXsKLQl1bnNpZ25lZCBsb25nIGZyYW1lc2l6ZSA9IDEwMjQgKiA3NjggKiAyOwotCi0JZmItPnBhbmVsID0gdmVyc2F0aWxlX2NsY2RfZ2V0X3BhbmVsKCJYVkdBIik7Ci0JaWYgKCFmYi0+cGFuZWwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHZlcnNhdGlsZV9jbGNkX3NldHVwX2RtYShmYiwgZnJhbWVzaXplKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGNkX2JvYXJkIGN0X2NhOXg0X2NsY2RfZGF0YSA9IHsKLQkubmFtZQkJPSAiQ1QtQ0E5WDQiLAotCS5jYXBzCQk9IENMQ0RfQ0FQXzU1NTEgfCBDTENEX0NBUF81NjUsCi0JLmNoZWNrCQk9IGNsY2RmYl9jaGVjaywKLQkuZGVjb2RlCQk9IGNsY2RmYl9kZWNvZGUsCi0JLnNldHVwCQk9IGN0X2NhOXg0X2NsY2Rfc2V0dXAsCi0JLm1tYXAJCT0gdmVyc2F0aWxlX2NsY2RfbW1hcF9kbWEsCi0JLnJlbW92ZQkJPSB2ZXJzYXRpbGVfY2xjZF9yZW1vdmVfZG1hLAotfTsKLQotc3RhdGljIEFNQkFfQUhCX0RFVklDRShjbGNkLCAiY3Q6Y2xjZCIsIDAsIENUX0NBOVg0X0NMQ0RDLCBJUlFfQ1RfQ0E5WDRfQ0xDREMsICZjdF9jYTl4NF9jbGNkX2RhdGEpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShkbWMsICJjdDpkbWMiLCAwLCBDVF9DQTlYNF9ETUMsIElSUV9DVF9DQTlYNF9ETUMsIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShzbWMsICJjdDpzbWMiLCAwLCBDVF9DQTlYNF9TTUMsIElSUV9DVF9DQTlYNF9TTUMsIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShncGlvLCAiY3Q6Z3BpbyIsIDAsIENUX0NBOVg0X0dQSU8sIElSUV9DVF9DQTlYNF9HUElPLCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqY3RfY2E5eDRfYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKLQkmY2xjZF9kZXZpY2UsCi0JJmRtY19kZXZpY2UsCi0JJnNtY19kZXZpY2UsCi0JJmdwaW9fZGV2aWNlLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwbXVfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTAsCi0JCS5lbmQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTEsCi0JCS5lbmQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTIsCi0JCS5lbmQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkuc3RhcnQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTMsCi0JCS5lbmQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwbXVfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhcm0tcG11IiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHBtdV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHBtdV9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgb3NjMV9sb29rdXAgPSB7Ci0JLmRldl9pZAkJPSAiY3Q6Y2xjZCIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvc2MxX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3Mtb3NjIiwKLQkuaWQJCT0gMSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gKHN0cnVjdCByZXNvdXJjZSBbXSkgewotCQlWRVhQUkVTU19SRVNfRlVOQygweGYsIDEpLAotCX0sCi0JLmRldi5wbGF0Zm9ybV9kYXRhID0gJm9zYzFfbG9va3VwLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGN0X2NhOXg0X2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0X2NhOXg0X2FtYmFfZGV2cyk7IGkrKykKLQkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoY3RfY2E5eDRfYW1iYV9kZXZzW2ldLCAmaW9tZW1fcmVzb3VyY2UpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwbXVfZGV2aWNlKTsKLQl2ZXhwcmVzc19zeXNjZmdfZGV2aWNlX3JlZ2lzdGVyKCZvc2MxX2RldmljZSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdm9pZCAqY3RfY2E5eDRfc2N1X2Jhc2UgX19pbml0ZGF0YTsKLQotc3RhdGljIHZvaWQgX19pbml0IGN0X2NhOXg0X2luaXRfY3B1X21hcCh2b2lkKQotewotCWludCBpLCBuY29yZXM7Ci0KLQljdF9jYTl4NF9zY3VfYmFzZSA9IGlvcmVtYXAoQTlfTVBDT1JFX1NDVSwgU1pfMTI4KTsKLQlpZiAoV0FSTl9PTighY3RfY2E5eDRfc2N1X2Jhc2UpKQotCQlyZXR1cm47Ci0KLQluY29yZXMgPSBzY3VfZ2V0X2NvcmVfY291bnQoY3RfY2E5eDRfc2N1X2Jhc2UpOwotCi0JaWYgKG5jb3JlcyA+IG5yX2NwdV9pZHMpIHsKLQkJcHJfd2FybigiU01QOiAldSBjb3JlcyBncmVhdGVyIHRoYW4gbWF4aW11bSAoJXUpLCBjbGlwcGluZ1xuIiwKLQkJCW5jb3JlcywgbnJfY3B1X2lkcyk7Ci0JCW5jb3JlcyA9IG5yX2NwdV9pZHM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG5jb3JlczsgKytpKQotCQlzZXRfY3B1X3Bvc3NpYmxlKGksIHRydWUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3RfY2E5eDRfc21wX2VuYWJsZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0Jc2N1X2VuYWJsZShjdF9jYTl4NF9zY3VfYmFzZSk7Ci19Ci0jZW5kaWYKLQotc3RydWN0IGN0X2Rlc2MgY3RfY2E5eDRfZGVzYyBfX2luaXRkYXRhID0gewotCS5pZAkJPSBWMk1fQ1RfSURfQ0E5LAotCS5uYW1lCQk9ICJDQTl4NCIsCi0JLm1hcF9pbwkJPSBjdF9jYTl4NF9tYXBfaW8sCi0JLmluaXRfaXJxCT0gY3RfY2E5eDRfaW5pdF9pcnEsCi0JLmluaXRfdGlsZQk9IGN0X2NhOXg0X2luaXQsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5pbml0X2NwdV9tYXAJPSBjdF9jYTl4NF9pbml0X2NwdV9tYXAsCi0JLnNtcF9lbmFibGUJPSBjdF9jYTl4NF9zbXBfZW5hYmxlLAotI2VuZGlmCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvY3QtY2E5eDQuaCBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2N0LWNhOXg0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YWNmODQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvY3QtY2E5eDQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSNpZm5kZWYgX19NQUNIX0NUX0NBOVg0X0gKLSNkZWZpbmUgX19NQUNIX0NUX0NBOVg0X0gKLQotLyoKLSAqIFBoeXNpY2FsIGJhc2UgYWRkcmVzc2VzCi0gKi8KLSNkZWZpbmUgQ1RfQ0E5WDRfQ0xDREMJCSgweDEwMDIwMDAwKQotI2RlZmluZSBDVF9DQTlYNF9BWElSQU0JCSgweDEwMDYwMDAwKQotI2RlZmluZSBDVF9DQTlYNF9ETUMJCSgweDEwMGUwMDAwKQotI2RlZmluZSBDVF9DQTlYNF9TTUMJCSgweDEwMGUxMDAwKQotI2RlZmluZSBDVF9DQTlYNF9TQ0MJCSgweDEwMGUyMDAwKQotI2RlZmluZSBDVF9DQTlYNF9TUDgwNF9USU1FUgkoMHgxMDBlNDAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfU1A4MDVfV0RUCSgweDEwMGU1MDAwKQotI2RlZmluZSBDVF9DQTlYNF9UWlBDCQkoMHgxMDBlNjAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfR1BJTwkJKDB4MTAwZTgwMDApCi0jZGVmaW5lIENUX0NBOVg0X0ZBU1RBWEkJKDB4MTAwZTkwMDApCi0jZGVmaW5lIENUX0NBOVg0X1NMT1dBWEkJKDB4MTAwZWEwMDApCi0jZGVmaW5lIENUX0NBOVg0X1RaQVNDCQkoMHgxMDBlYzAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfQ09SRVNJR0hUCSgweDEwMjAwMDAwKQotI2RlZmluZSBDVF9DQTlYNF9NUElDCQkoMHgxZTAwMDAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfU1lTVElNRVIJKDB4MWUwMDQwMDApCi0jZGVmaW5lIENUX0NBOVg0X1NZU1dEVAkJKDB4MWUwMDcwMDApCi0jZGVmaW5lIENUX0NBOVg0X0wyQ0MJCSgweDFlMDBhMDAwKQotCi0jZGVmaW5lIEE5X01QQ09SRV9TQ1UJCShDVF9DQTlYNF9NUElDICsgMHgwMDAwKQotI2RlZmluZSBBOV9NUENPUkVfR0lDX0NQVQkoQ1RfQ0E5WDRfTVBJQyArIDB4MDEwMCkKLSNkZWZpbmUgQTlfTVBDT1JFX0dJVAkJKENUX0NBOVg0X01QSUMgKyAweDAyMDApCi0jZGVmaW5lIEE5X01QQ09SRV9UV0QJCShDVF9DQTlYNF9NUElDICsgMHgwNjAwKQotI2RlZmluZSBBOV9NUENPUkVfR0lDX0RJU1QJKENUX0NBOVg0X01QSUMgKyAweDEwMDApCi0KLS8qCi0gKiBJbnRlcnJ1cHRzLiAgVGhvc2UgaW4ge30gYXJlIGZvciBBTUJBIGRldmljZXMKLSAqLwotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfQ0xDREMJeyA3NiB9Ci0jZGVmaW5lIElSUV9DVF9DQTlYNF9ETUMJeyAwIH0KLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1NNQwl7IDc3LCA3OCB9Ci0jZGVmaW5lIElSUV9DVF9DQTlYNF9USU1FUjAJODAKLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1RJTUVSMQk4MQotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfR1BJTwl7IDgyIH0KLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1BNVV9DUFUwCTkyCi0jZGVmaW5lIElSUV9DVF9DQTlYNF9QTVVfQ1BVMQk5MwotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTIJOTQKLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1BNVV9DUFUzCTk1Ci0KLWV4dGVybiBzdHJ1Y3QgY3RfZGVzYyBjdF9jYTl4NF9kZXNjOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGE4YzE3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvaXJxcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGY3Zjc4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2RlZmluZSBJUlFfTE9DQUxUSU1FUgkJMjkKLSNkZWZpbmUgSVJRX0xPQ0FMV0RPRwkJMzAKLQotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQotI2RlZmluZSBOUl9JUlFTCTI1NgotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9tb3RoZXJib2FyZC5oIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvbW90aGVyYm9hcmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhhYmM4Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9tb3RoZXJib2FyZC5oCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotI2lmbmRlZiBfX01BQ0hfTU9USEVSQk9BUkRfSAotI2RlZmluZSBfX01BQ0hfTU9USEVSQk9BUkRfSAotCi0vKgotICogUGh5c2ljYWwgYWRkcmVzc2VzLCBvZmZzZXQgZnJvbSBWMk1fUEFfQ1MwLTMKLSAqLwotI2RlZmluZSBWMk1fTk9SMAkJKFYyTV9QQV9DUzApCi0jZGVmaW5lIFYyTV9OT1IxCQkoVjJNX1BBX0NTMSkKLSNkZWZpbmUgVjJNX1NSQU0JCShWMk1fUEFfQ1MyKQotI2RlZmluZSBWMk1fVklERU9fU1JBTQkJKFYyTV9QQV9DUzMgKyAweDAwMDAwMDAwKQotI2RlZmluZSBWMk1fTEFOOTExOAkJKFYyTV9QQV9DUzMgKyAweDAyMDAwMDAwKQotI2RlZmluZSBWMk1fSVNQMTc2MQkJKFYyTV9QQV9DUzMgKyAweDAzMDAwMDAwKQotCi0vKgotICogUGh5c2ljYWwgYWRkcmVzc2VzLCBvZmZzZXQgZnJvbSBWMk1fUEFfQ1M3Ci0gKi8KLSNkZWZpbmUgVjJNX1NZU1JFR1MJCShWMk1fUEFfQ1M3ICsgMHgwMDAwMDAwMCkKLSNkZWZpbmUgVjJNX1NZU0NUTAkJKFYyTV9QQV9DUzcgKyAweDAwMDAxMDAwKQotI2RlZmluZSBWMk1fU0VSSUFMX0JVU19QQ0kJKFYyTV9QQV9DUzcgKyAweDAwMDAyMDAwKQotCi0jZGVmaW5lIFYyTV9BQUNJCQkoVjJNX1BBX0NTNyArIDB4MDAwMDQwMDApCi0jZGVmaW5lIFYyTV9NTUNJCQkoVjJNX1BBX0NTNyArIDB4MDAwMDUwMDApCi0jZGVmaW5lIFYyTV9LTUkwCQkoVjJNX1BBX0NTNyArIDB4MDAwMDYwMDApCi0jZGVmaW5lIFYyTV9LTUkxCQkoVjJNX1BBX0NTNyArIDB4MDAwMDcwMDApCi0KLSNkZWZpbmUgVjJNX1VBUlQwCQkoVjJNX1BBX0NTNyArIDB4MDAwMDkwMDApCi0jZGVmaW5lIFYyTV9VQVJUMQkJKFYyTV9QQV9DUzcgKyAweDAwMDBhMDAwKQotI2RlZmluZSBWMk1fVUFSVDIJCShWMk1fUEFfQ1M3ICsgMHgwMDAwYjAwMCkKLSNkZWZpbmUgVjJNX1VBUlQzCQkoVjJNX1BBX0NTNyArIDB4MDAwMGMwMDApCi0KLSNkZWZpbmUgVjJNX1dEVAkJCShWMk1fUEFfQ1M3ICsgMHgwMDAwZjAwMCkKLQotI2RlZmluZSBWMk1fVElNRVIwMQkJKFYyTV9QQV9DUzcgKyAweDAwMDExMDAwKQotI2RlZmluZSBWMk1fVElNRVIyMwkJKFYyTV9QQV9DUzcgKyAweDAwMDEyMDAwKQotCi0jZGVmaW5lIFYyTV9TRVJJQUxfQlVTX0RWSQkoVjJNX1BBX0NTNyArIDB4MDAwMTYwMDApCi0jZGVmaW5lIFYyTV9SVEMJCQkoVjJNX1BBX0NTNyArIDB4MDAwMTcwMDApCi0KLSNkZWZpbmUgVjJNX0NGCQkJKFYyTV9QQV9DUzcgKyAweDAwMDFhMDAwKQotI2RlZmluZSBWMk1fQ0xDRAkJKFYyTV9QQV9DUzcgKyAweDAwMDFmMDAwKQotCi0KLS8qCi0gKiBJbnRlcnJ1cHRzLiAgVGhvc2UgaW4ge30gYXJlIGZvciBBTUJBIGRldmljZXMKLSAqLwotI2RlZmluZSBJUlFfVjJNX1dEVAkJeyAoMzIgKyAwKSB9Ci0jZGVmaW5lIElSUV9WMk1fVElNRVIwCQkoMzIgKyAyKQotI2RlZmluZSBJUlFfVjJNX1RJTUVSMQkJKDMyICsgMikKLSNkZWZpbmUgSVJRX1YyTV9USU1FUjIJCSgzMiArIDMpCi0jZGVmaW5lIElSUV9WMk1fVElNRVIzCQkoMzIgKyAzKQotI2RlZmluZSBJUlFfVjJNX1JUQwkJeyAoMzIgKyA0KSB9Ci0jZGVmaW5lIElSUV9WMk1fVUFSVDAJCXsgKDMyICsgNSkgfQotI2RlZmluZSBJUlFfVjJNX1VBUlQxCQl7ICgzMiArIDYpIH0KLSNkZWZpbmUgSVJRX1YyTV9VQVJUMgkJeyAoMzIgKyA3KSB9Ci0jZGVmaW5lIElSUV9WMk1fVUFSVDMJCXsgKDMyICsgOCkgfQotI2RlZmluZSBJUlFfVjJNX01NQ0kJCXsgKDMyICsgOSksICgzMiArIDEwKSB9Ci0jZGVmaW5lIElSUV9WMk1fQUFDSQkJeyAoMzIgKyAxMSkgfQotI2RlZmluZSBJUlFfVjJNX0tNSTAJCXsgKDMyICsgMTIpIH0KLSNkZWZpbmUgSVJRX1YyTV9LTUkxCQl7ICgzMiArIDEzKSB9Ci0jZGVmaW5lIElSUV9WMk1fQ0xDRAkJeyAoMzIgKyAxNCkgfQotI2RlZmluZSBJUlFfVjJNX0xBTjkxMTgJCSgzMiArIDE1KQotI2RlZmluZSBJUlFfVjJNX0lTUDE3NjEJCSgzMiArIDE2KQotI2RlZmluZSBJUlFfVjJNX1BDSUUJCSgzMiArIDE3KQotCi0KLS8qCi0gKiBDb3JlIHRpbGUgSURzCi0gKi8KLSNkZWZpbmUgVjJNX0NUX0lEX0NBOQkJMHgwYzAwMDE5MQotI2RlZmluZSBWMk1fQ1RfSURfVU5TVVBQT1JURUQJMHhmZjAwMDE5MQotI2RlZmluZSBWMk1fQ1RfSURfTUFTSwkJMHhmZjAwMGZmZgotCi1zdHJ1Y3QgY3RfZGVzYyB7Ci0JdTMyCQkJaWQ7Ci0JY29uc3QgY2hhcgkJKm5hbWU7Ci0Jdm9pZAkJCSgqbWFwX2lvKSh2b2lkKTsKLQl2b2lkCQkJKCppbml0X2Vhcmx5KSh2b2lkKTsKLQl2b2lkCQkJKCppbml0X2lycSkodm9pZCk7Ci0Jdm9pZAkJCSgqaW5pdF90aWxlKSh2b2lkKTsKLSNpZmRlZiBDT05GSUdfU01QCi0Jdm9pZAkJCSgqaW5pdF9jcHVfbWFwKSh2b2lkKTsKLQl2b2lkCQkJKCpzbXBfZW5hYmxlKSh1bnNpZ25lZCBpbnQpOwotI2VuZGlmCi19OwotCi1leHRlcm4gc3RydWN0IGN0X2Rlc2MgKmN0X2Rlc2M7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYwppbmRleCBhMWYzODA0Li44MzE4OGNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYwpAQCAtMTksNDggKzE5LDEwIEBACiAjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvbW90aGVyYm9hcmQuaD4KLQogI2luY2x1ZGUgPHBsYXQvcGxhdHNtcC5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgogCi0vKgotICogSW5pdGlhbGlzZSB0aGUgQ1BVIHBvc3NpYmxlIG1hcCBlYXJseSAtIHRoaXMgZGVzY3JpYmVzIHRoZSBDUFVzCi0gKiB3aGljaCBtYXkgYmUgcHJlc2VudCBvciBiZWNvbWUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdmV4cHJlc3Nfc21wX2luaXRfY3B1cyh2b2lkKQotewotCWN0X2Rlc2MtPmluaXRfY3B1X21hcCgpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdmV4cHJlc3Nfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0JLyoKLQkgKiBJbml0aWFsaXNlIHRoZSBwcmVzZW50IG1hcCwgd2hpY2ggZGVzY3JpYmVzIHRoZSBzZXQgb2YgQ1BVcwotCSAqIGFjdHVhbGx5IHBvcHVsYXRlZCBhdCB0aGUgcHJlc2VudCB0aW1lLgotCSAqLwotCWN0X2Rlc2MtPnNtcF9lbmFibGUobWF4X2NwdXMpOwotCi0JLyoKLQkgKiBXcml0ZSB0aGUgYWRkcmVzcyBvZiBzZWNvbmRhcnkgc3RhcnR1cCBpbnRvIHRoZQotCSAqIHN5c3RlbS13aWRlIGZsYWdzIHJlZ2lzdGVyLiBUaGUgYm9vdCBtb25pdG9yIHdhaXRzCi0JICogdW50aWwgaXQgcmVjZWl2ZXMgYSBzb2Z0IGludGVycnVwdCwgYW5kIHRoZW4gdGhlCi0JICogc2Vjb25kYXJ5IENQVSBicmFuY2hlcyB0byB0aGlzIGFkZHJlc3MuCi0JICovCi0JdmV4cHJlc3NfZmxhZ3Nfc2V0KHZpcnRfdG9fcGh5cyh2ZXJzYXRpbGVfc2Vjb25kYXJ5X3N0YXJ0dXApKTsKLX0KLQotc3RydWN0IHNtcF9vcGVyYXRpb25zIF9faW5pdGRhdGEgdmV4cHJlc3Nfc21wX29wcyA9IHsKLQkuc21wX2luaXRfY3B1cwkJPSB2ZXhwcmVzc19zbXBfaW5pdF9jcHVzLAotCS5zbXBfcHJlcGFyZV9jcHVzCT0gdmV4cHJlc3Nfc21wX3ByZXBhcmVfY3B1cywKLQkuc21wX3NlY29uZGFyeV9pbml0CT0gdmVyc2F0aWxlX3NlY29uZGFyeV9pbml0LAotCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSB2ZXJzYXRpbGVfYm9vdF9zZWNvbmRhcnksCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0JLmNwdV9kaWUJCT0gdmV4cHJlc3NfY3B1X2RpZSwKLSNlbmRpZgotfTsKLQogYm9vbCBfX2luaXQgdmV4cHJlc3Nfc21wX2luaXRfb3BzKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX01DUE0KQEAgLTc5LDggKzQxLDYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19PRikKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmV4cHJlc3Nfc21wX2R0X3NjdV9tYXRjaFtdIF9faW5pdGNvbnN0ID0gewogCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNS1zY3UiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1zY3UiLCB9LApAQCAtMTEyLDUgKzcyLDMgQEAKIAkuY3B1X2RpZQkJPSB2ZXhwcmVzc19jcHVfZGllLAogI2VuZGlmCiB9OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCmluZGV4IDZmZjY4MWEuLmEwNDAwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYwpAQCAtMSwzODAgKzEsNyBAQAotLyoKLSAqIFZlcnNhdGlsZSBFeHByZXNzIFYyTSBNb3RoZXJib2FyZCBTdXBwb3J0Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgotI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvaXNwMTc2MC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXhwcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS90aW1lci1zcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9jdC1jYTl4NC5oPgotI2luY2x1ZGUgPG1hY2gvbW90aGVyYm9hcmQuaD4KLQotI2luY2x1ZGUgPHBsYXQvc2NoZWRfY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L3BsYXRzbXAuaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKIAotI2RlZmluZSBWMk1fUEFfQ1MwCTB4NDAwMDAwMDAKLSNkZWZpbmUgVjJNX1BBX0NTMQkweDQ0MDAwMDAwCi0jZGVmaW5lIFYyTV9QQV9DUzIJMHg0ODAwMDAwMAotI2RlZmluZSBWMk1fUEFfQ1MzCTB4NGMwMDAwMDAKLSNkZWZpbmUgVjJNX1BBX0NTNwkweDEwMDAwMDAwCi0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdjJtX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBWMk1fUEVSSVBILAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oVjJNX1BBX0NTNyksCi0JCS5sZW5ndGgJCT0gU1pfMTI4SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdjJtX3NwODA0X2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmIChXQVJOX09OKCFiYXNlIHx8IGlycSA9PSBOT19JUlEpKQotCQlyZXR1cm47Ci0KLQlzcDgwNF9jbG9ja3NvdXJjZV9pbml0KGJhc2UgKyBUSU1FUl8yX0JBU0UsICJ2Mm0tdGltZXIxIik7Ci0Jc3A4MDRfY2xvY2tldmVudHNfaW5pdChiYXNlICsgVElNRVJfMV9CQVNFLCBpcnEsICJ2Mm0tdGltZXIwIik7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2Mm1fcGNpZV9pMmNfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gVjJNX1NFUklBTF9CVVNfUENJLAotCS5lbmQJPSBWMk1fU0VSSUFMX0JVU19QQ0kgKyBTWl80SyAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fcGNpZV9pMmNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJ2ZXJzYXRpbGUtaTJjIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gJnYybV9wY2llX2kyY19yZXNvdXJjZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdjJtX2RkY19pMmNfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gVjJNX1NFUklBTF9CVVNfRFZJLAotCS5lbmQJPSBWMk1fU0VSSUFMX0JVU19EVkkgKyBTWl80SyAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fZGRjX2kyY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInZlcnNhdGlsZS1pMmMiLAotCS5pZAkJPSAxLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmdjJtX2RkY19pMmNfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHYybV9ldGhfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBWMk1fTEFOOTExOCwKLQkJLmVuZAk9IFYyTV9MQU45MTE4ICsgU1pfNjRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSBJUlFfVjJNX0xBTjkxMTgsCi0JCS5lbmQJPSBJUlFfVjJNX0xBTjkxMTgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyB2Mm1fZXRoX2NvbmZpZyA9IHsKLQkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklULAotCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0hJR0gsCi0JLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfUFVTSF9QVUxMLAotCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbXNjOTExeCIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHYybV9ldGhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2Mm1fZXRoX3Jlc291cmNlcyksCi0JLmRldi5wbGF0Zm9ybV9kYXRhID0gJnYybV9ldGhfY29uZmlnLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHYybV9ldGhfc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJ2ZGR2YXJpbyIsICJzbXNjOTExeCIpLAotCVJFR1VMQVRPUl9TVVBQTFkoInZkZDMzYSIsICJzbXNjOTExeCIpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2Mm1fdXNiX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gVjJNX0lTUDE3NjEsCi0JCS5lbmQJPSBWMk1fSVNQMTc2MSArIFNaXzEyOEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IElSUV9WMk1fSVNQMTc2MSwKLQkJLmVuZAk9IElSUV9WMk1fSVNQMTc2MSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXNwMTc2MF9wbGF0Zm9ybV9kYXRhIHYybV91c2JfY29uZmlnID0gewotCS5pc19pc3AxNzYxCQk9IHRydWUsCi0JLmJ1c193aWR0aF8xNgkJPSBmYWxzZSwKLQkucG9ydDFfb3RnCQk9IHRydWUsCi0JLmFuYWxvZ19vYwkJPSBmYWxzZSwKLQkuZGFja19wb2xhcml0eV9oaWdoCT0gZmFsc2UsCi0JLmRyZXFfcG9sYXJpdHlfaGlnaAk9IGZhbHNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdjJtX3VzYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImlzcDE3NjAiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB2Mm1fdXNiX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodjJtX3VzYl9yZXNvdXJjZXMpLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ2Mm1fdXNiX2NvbmZpZywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHYybV9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2Mm1fZmxhc2hfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBWMk1fTk9SMCwKLQkJLmVuZAk9IFYyTV9OT1IwICsgU1pfNjRNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSBWMk1fTk9SMSwKLQkJLmVuZAk9IFYyTV9OT1IxICsgU1pfNjRNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB2Mm1fZmxhc2hfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2Mm1fZmxhc2hfcmVzb3VyY2VzKSwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdjJtX2ZsYXNoX2RhdGEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBhdGFfcGxhdGZvcm1faW5mbyB2Mm1fcGF0YV9kYXRhID0gewotCS5pb3BvcnRfc2hpZnQJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2Mm1fcGF0YV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IFYyTV9DRiwKLQkJLmVuZAk9IFYyTV9DRiArIDB4ZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gVjJNX0NGICsgMHgxMDAsCi0JCS5lbmQJPSBWMk1fQ0YgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fY2ZfZGV2aWNlID0gewotCS5uYW1lCQk9ICJwYXRhX3BsYXRmb3JtIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gdjJtX3BhdGFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2Mm1fcGF0YV9yZXNvdXJjZXMpLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ2Mm1fcGF0YV9kYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgdjJtX21tY2lfZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLnN0YXR1cwkJPSB2ZXhwcmVzc19nZXRfbWNpX2NhcmRpbiwKLQkuZ3Bpb19jZAk9IC0xLAotCS5ncGlvX3dwCT0gLTEsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHYybV9zeXNyZWdfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBWMk1fU1lTUkVHUywKLQkJLmVuZAk9IFYyTV9TWVNSRUdTICsgMHhmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fc3lzcmVnX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3Mtc3lzcmVnIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gdjJtX3N5c3JlZ19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHYybV9zeXNyZWdfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9tdXhmcGdhX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3MtbXV4ZnBnYSIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9IChzdHJ1Y3QgcmVzb3VyY2UgW10pIHsKLQkJVkVYUFJFU1NfUkVTX0ZVTkMoMCwgNyksCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdjJtX3NodXRkb3duX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3Mtc2h1dGRvd24iLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAoc3RydWN0IHJlc291cmNlIFtdKSB7Ci0JCVZFWFBSRVNTX1JFU19GVU5DKDAsIDgpLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9yZWJvb3RfZGV2aWNlID0gewotCS5uYW1lCQk9ICJ2ZXhwcmVzcy1yZWJvb3QiLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAoc3RydWN0IHJlc291cmNlIFtdKSB7Ci0JCVZFWFBSRVNTX1JFU19GVU5DKDAsIDkpLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9kdmltb2RlX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3MtZHZpbW9kZSIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9IChzdHJ1Y3QgcmVzb3VyY2UgW10pIHsKLQkJVkVYUFJFU1NfUkVTX0ZVTkMoMCwgMTEpLAotCX0KLX07Ci0KLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0UoYWFjaSwgICJtYjphYWNpIiwgIDAsIFYyTV9BQUNJLCBJUlFfVjJNX0FBQ0ksIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShtbWNpLCAgIm1iOm1tY2kiLCAgMCwgVjJNX01NQ0ksIElSUV9WMk1fTU1DSSwgJnYybV9tbWNpX2RhdGEpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShrbWkwLCAgIm1iOmttaTAiLCAgMCwgVjJNX0tNSTAsIElSUV9WMk1fS01JMCwgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKGttaTEsICAibWI6a21pMSIsICAwLCBWMk1fS01JMSwgSVJRX1YyTV9LTUkxLCBOVUxMKTsKLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0UodWFydDAsICJtYjp1YXJ0MCIsIDAsIFYyTV9VQVJUMCwgSVJRX1YyTV9VQVJUMCwgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKHVhcnQxLCAibWI6dWFydDEiLCAwLCBWMk1fVUFSVDEsIElSUV9WMk1fVUFSVDEsIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRSh1YXJ0MiwgIm1iOnVhcnQyIiwgMCwgVjJNX1VBUlQyLCBJUlFfVjJNX1VBUlQyLCBOVUxMKTsKLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0UodWFydDMsICJtYjp1YXJ0MyIsIDAsIFYyTV9VQVJUMywgSVJRX1YyTV9VQVJUMywgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKHdkdCwgICAibWI6d2R0IiwgICAwLCBWMk1fV0RULCBJUlFfVjJNX1dEVCwgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKHJ0YywgICAibWI6cnRjIiwgICAwLCBWMk1fUlRDLCBJUlFfVjJNX1JUQywgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKnYybV9hbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewotCSZhYWNpX2RldmljZSwKLQkmbW1jaV9kZXZpY2UsCi0JJmttaTBfZGV2aWNlLAotCSZrbWkxX2RldmljZSwKLQkmdWFydDBfZGV2aWNlLAotCSZ1YXJ0MV9kZXZpY2UsCi0JJnVhcnQyX2RldmljZSwKLQkmdWFydDNfZGV2aWNlLAotCSZ3ZHRfZGV2aWNlLAotCSZydGNfZGV2aWNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHYybV90aW1lcl9pbml0KHZvaWQpCi17Ci0JdmV4cHJlc3NfY2xrX2luaXQoaW9yZW1hcChWMk1fU1lTQ1RMLCBTWl80SykpOwotCXYybV9zcDgwNF9pbml0KGlvcmVtYXAoVjJNX1RJTUVSMDEsIFNaXzRLKSwgSVJRX1YyTV9USU1FUjApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdjJtX2luaXRfZWFybHkodm9pZCkKLXsKLQlpZiAoY3RfZGVzYy0+aW5pdF9lYXJseSkKLQkJY3RfZGVzYy0+aW5pdF9lYXJseSgpOwotCXZlcnNhdGlsZV9zY2hlZF9jbG9ja19pbml0KHZleHByZXNzX2dldF8yNG1oel9jbG9ja19iYXNlKCksIDI0MDAwMDAwKTsKLX0KLQotc3RydWN0IGN0X2Rlc2MgKmN0X2Rlc2M7Ci0KLXN0YXRpYyBzdHJ1Y3QgY3RfZGVzYyAqY3RfZGVzY3NbXSBfX2luaXRkYXRhID0gewotI2lmZGVmIENPTkZJR19BUkNIX1ZFWFBSRVNTX0NBOVg0Ci0JJmN0X2NhOXg0X2Rlc2MsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1fcG9wdWxhdGVfY3RfZGVzYyh2b2lkKQotewotCWludCBpOwotCXUzMiBjdXJyZW50X3RpbGVfaWQ7Ci0KLQljdF9kZXNjID0gTlVMTDsKLQljdXJyZW50X3RpbGVfaWQgPSB2ZXhwcmVzc19nZXRfcHJvY2lkKFZFWFBSRVNTX1NJVEVfTUFTVEVSKQotCQkJCSYgVjJNX0NUX0lEX01BU0s7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdF9kZXNjcykgJiYgIWN0X2Rlc2M7ICsraSkKLQkJaWYgKGN0X2Rlc2NzW2ldLT5pZCA9PSBjdXJyZW50X3RpbGVfaWQpCi0JCQljdF9kZXNjID0gY3RfZGVzY3NbaV07Ci0KLQlpZiAoIWN0X2Rlc2MpCi0JCXBhbmljKCJ2ZXhwcmVzczogdGhpcyBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBjb3JlIHRpbGUgSUQgMHglMDh4IHdoZW4gYm9vdGluZyB2aWEgQVRBR3MuXG4iCi0JCSAgICAgICJZb3UgbWF5IG5lZWQgYSBkZXZpY2UgdHJlZSBibG9iIG9yIGEgZGlmZmVyZW50IGtlcm5lbCB0byBib290IG9uIHRoaXMgYm9hcmQuXG4iLAotCQkgICAgICBjdXJyZW50X3RpbGVfaWQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdjJtX21hcF9pbyh2b2lkKQotewotCWlvdGFibGVfaW5pdCh2Mm1faW9fZGVzYywgQVJSQVlfU0laRSh2Mm1faW9fZGVzYykpOwotCXZleHByZXNzX3N5c3JlZ19lYXJseV9pbml0KGlvcmVtYXAoVjJNX1NZU1JFR1MsIFNaXzRLKSk7Ci0JdjJtX3BvcHVsYXRlX2N0X2Rlc2MoKTsKLQljdF9kZXNjLT5tYXBfaW8oKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHYybV9pbml0X2lycSh2b2lkKQotewotCWN0X2Rlc2MtPmluaXRfaXJxKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1faW5pdCh2b2lkKQotewotCWludCBpOwotCi0JcmVndWxhdG9yX3JlZ2lzdGVyX2ZpeGVkKDAsIHYybV9ldGhfc3VwcGxpZXMsCi0JCQlBUlJBWV9TSVpFKHYybV9ldGhfc3VwcGxpZXMpKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdjJtX3N5c3JlZ19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdjJtX3BjaWVfaTJjX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fZGRjX2kyY19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdjJtX2ZsYXNoX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fY2ZfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnYybV9ldGhfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnYybV91c2JfZGV2aWNlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHYybV9hbWJhX2RldnMpOyBpKyspCi0JCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKHYybV9hbWJhX2RldnNbaV0sICZpb21lbV9yZXNvdXJjZSk7Ci0KLQl2ZXhwcmVzc19zeXNjZmdfZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fbXV4ZnBnYV9kZXZpY2UpOwotCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJnYybV9zaHV0ZG93bl9kZXZpY2UpOwotCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJnYybV9yZWJvb3RfZGV2aWNlKTsKLQl2ZXhwcmVzc19zeXNjZmdfZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fZHZpbW9kZV9kZXZpY2UpOwotCi0JY3RfZGVzYy0+aW5pdF90aWxlKCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoVkVYUFJFU1MsICJBUk0tVmVyc2F0aWxlIEV4cHJlc3MiKQotCS5hdGFnX29mZnNldAk9IDB4MTAwLAotCS5zbXAJCT0gc21wX29wcyh2ZXhwcmVzc19zbXBfb3BzKSwKLQkubWFwX2lvCQk9IHYybV9tYXBfaW8sCi0JLmluaXRfZWFybHkJPSB2Mm1faW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSB2Mm1faW5pdF9pcnEsCi0JLmluaXRfdGltZQk9IHYybV90aW1lcl9pbml0LAotCS5pbml0X21hY2hpbmUJPSB2Mm1faW5pdCwKLU1BQ0hJTkVfRU5ECi0KLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1fZHRfaW5pdCh2b2lkKQotewotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2Mm1fZHRfbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKIAkiYXJtLHZleHByZXNzIiwKIAlOVUxMLApAQCAtMzg2LDUgKzEzLDQgQEAKIAkubDJjX2F1eF9tYXNrCT0gMHhmZTBmZmZmZiwKIAkuc21wCQk9IHNtcF9vcHModmV4cHJlc3Nfc21wX2R0X29wcyksCiAJLnNtcF9pbml0CT0gc21wX2luaXRfb3BzKHZleHByZXNzX3NtcF9pbml0X29wcyksCi0JLmluaXRfbWFjaGluZQk9IHYybV9kdF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtenlucS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtenlucS9NYWtlZmlsZQppbmRleCBjODVmYjNmLi5iMDNhOTdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXp5bnEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC16eW5xL01ha2VmaWxlCkBAIC00LDYgKzQsNCBAQAogCiAjIENvbW1vbiBzdXBwb3J0CiBvYmoteQkJCQk6PSBjb21tb24ubyBzbGNyLm8gcG0ubwotQ0ZMQUdTX1JFTU9WRV9ob3RwbHVnLm8JCT0tbWFyY2g9YXJtdjZrCi1DRkxBR1NfaG90cGx1Zy5vIAkJPS1XYSwtbWFyY2g9YXJtdjctYSAtbWNwdT1jb3J0ZXgtYTkKIG9iai0kKENPTkZJR19TTVApCQkrPSBoZWFkc21wLm8gcGxhdHNtcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmgKaW5kZXggMmJjNzEyNy4uMzgyYzYwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtenlucS9jb21tb24uaApAQCAtMjksNyArMjksNiBAQAogZXh0ZXJuIHUzMiB6eW5xX3NsY3JfZ2V0X2RldmljZV9pZCh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiB2b2lkIHNlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogZXh0ZXJuIGNoYXIgenlucV9zZWNvbmRhcnlfdHJhbXBvbGluZTsKIGV4dGVybiBjaGFyIHp5bnFfc2Vjb25kYXJ5X3RyYW1wb2xpbmVfanVtcDsKIGV4dGVybiBjaGFyIHp5bnFfc2Vjb25kYXJ5X3RyYW1wb2xpbmVfZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC16eW5xL2hvdHBsdWcuYyBiL2FyY2gvYXJtL21hY2gtenlucS9ob3RwbHVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ODVjODkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC16eW5xL2hvdHBsdWcuYworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBYaWxpbngKLSAqCi0gKiBiYXNlZCBvbiBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBBUk0gTHRkLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggYWU2OTgwOS4uYWI5MDZiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0yMSw3ICsyMSw3IEBACiAKICMgQVJNNzIwVAogY29uZmlnIENQVV9BUk03MjBUCi0JYm9vbCAiU3VwcG9ydCBBUk03MjBUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk03MjBUIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjRUICYmIEFSQ0hfSU5URUdSQVRPUikKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0xWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CkBAIC0zOSw3ICszOSw3IEBACiAKICMgQVJNNzQwVAogY29uZmlnIENQVV9BUk03NDBUCi0JYm9vbCAiU3VwcG9ydCBBUk03NDBUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk03NDBUIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjRUICYmIEFSQ0hfSU5URUdSQVRPUikKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0xWNFQKQEAgLTcxLDcgKzcxLDcgQEAKIAogIyBBUk05MjBUCiBjb25maWcgQ1BVX0FSTTkyMFQKLQlib29sICJTdXBwb3J0IEFSTTkyMFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKKwlib29sICJTdXBwb3J0IEFSTTkyMFQgcHJvY2Vzc29yIiBpZiAoQVJDSF9NVUxUSV9WNFQgJiYgQVJDSF9JTlRFR1JBVE9SKQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVApAQCAtODksNyArODksNyBAQAogCiAjIEFSTTkyMlQKIGNvbmZpZyBDUFVfQVJNOTIyVAotCWJvb2wgIlN1cHBvcnQgQVJNOTIyVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNOTIyVCBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y0VCAmJiBBUkNIX0lOVEVHUkFUT1IpCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogIyBBUk05MjZUCiBjb25maWcgQ1BVX0FSTTkyNlQKLQlib29sICJTdXBwb3J0IEFSTTkyNlQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQgorCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiIGlmICghQVJDSF9NVUxUSVBMQVRGT1JNIHx8IEFSQ0hfTVVMVElfVjUpICYmIChBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQikKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VEoKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKQEAgLTE2Myw3ICsxNjMsNyBAQAogCiAjIEFSTTk0MFQKIGNvbmZpZyBDUFVfQVJNOTQwVAotCWJvb2wgIlN1cHBvcnQgQVJNOTQwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNOTQwVCBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y0VCAmJiBBUkNIX0lOVEVHUkFUT1IpCiAJZGVwZW5kcyBvbiAhTU1VCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9OT01NVQpAQCAtMTgxLDcgKzE4MSw3IEBACiAKICMgQVJNOTQ2RS1TCiBjb25maWcgQ1BVX0FSTTk0NkUKLQlib29sICJTdXBwb3J0IEFSTTk0NkUtUyBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNOTQ2RS1TIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjUgJiYgQVJDSF9JTlRFR1JBVE9SKQogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9OT01NVQpAQCAtMTk4LDcgKzE5OCw3IEBACiAKICMgQVJNMTAyMCAtIG5lZWRzIHZhbGlkYXRpbmcKIGNvbmZpZyBDUFVfQVJNMTAyMAotCWJvb2wgIlN1cHBvcnQgQVJNMTAyMFQgKHJldiAwKSBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNMTAyMFQgKHJldiAwKSBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y1ICYmIEFSQ0hfSU5URUdSQVRPUikKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVApAQCAtMjE2LDcgKzIxNiw3IEBACiAKICMgQVJNMTAyMEUgLSBuZWVkcyB2YWxpZGF0aW5nCiBjb25maWcgQ1BVX0FSTTEwMjBFCi0JYm9vbCAiU3VwcG9ydCBBUk0xMDIwRSBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNMTAyMEUgcHJvY2Vzc29yIiBpZiAoQVJDSF9NVUxUSV9WNSAmJiBBUkNIX0lOVEVHUkFUT1IpCiAJZGVwZW5kcyBvbiBuCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKQEAgLTIyOSw3ICsyMjksNyBAQAogCiAjIEFSTTEwMjJFCiBjb25maWcgQ1BVX0FSTTEwMjIKLQlib29sICJTdXBwb3J0IEFSTTEwMjJFIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk0xMDIyRSBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y1ICYmIEFSQ0hfSU5URUdSQVRPUikKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKICMgQVJNMTAyNkVKLVMKIGNvbmZpZyBDUFVfQVJNMTAyNgotCWJvb2wgIlN1cHBvcnQgQVJNMTAyNkVKLVMgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKKwlib29sICJTdXBwb3J0IEFSTTEwMjZFSi1TIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjUgJiYgQVJDSF9JTlRFR1JBVE9SKQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUICMgQnV0IG5lZWQgSmF6ZWxsZSwgYnV0IEVWNVRKIGlnbm9yZXMgYml0IDEwCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCkBAIC0zNTgsNyArMzU4LDcgQEAKIAogIyBBUk12NgogY29uZmlnIENQVV9WNgotCWJvb2wgIlN1cHBvcnQgQVJNIFY2IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgKKwlib29sICJTdXBwb3J0IEFSTSBWNiBwcm9jZXNzb3IiIGlmICghQVJDSF9NVUxUSVBMQVRGT1JNIHx8IEFSQ0hfTVVMVElfVjYpICYmIChBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWCkKIAlzZWxlY3QgQ1BVXzMydjYKIAlzZWxlY3QgQ1BVX0FCUlRfRVY2CiAJc2VsZWN0IENQVV9DQUNIRV9WNgpAQCAtMzcxLDcgKzM3MSw3IEBACiAKICMgQVJNdjZrCiBjb25maWcgQ1BVX1Y2SwotCWJvb2wgIlN1cHBvcnQgQVJNIFY2SyBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYCisJYm9vbCAiU3VwcG9ydCBBUk0gVjZLIHByb2Nlc3NvciIgaWYgKCFBUkNIX01VTFRJUExBVEZPUk0gfHwgQVJDSF9NVUxUSV9WNikgJiYgKEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYKQogCXNlbGVjdCBDUFVfMzJ2NgogCXNlbGVjdCBDUFVfMzJ2NksKIAlzZWxlY3QgQ1BVX0FCUlRfRVY2CkBAIC0zODUsNyArMzg1LDcgQEAKIAogIyBBUk12NwogY29uZmlnIENQVV9WNwotCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgKKwlib29sICJTdXBwb3J0IEFSTSBWNyBwcm9jZXNzb3IiIGlmICghQVJDSF9NVUxUSVBMQVRGT1JNIHx8IEFSQ0hfTVVMVElfVjcpICYmIChBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWCkKIAlzZWxlY3QgQ1BVXzMydjZLCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwpAQCAtNzk4LDYgKzc5OCw3IEBACiAKIGNvbmZpZyBLVVNFUl9IRUxQRVJTCiAJYm9vbCAiRW5hYmxlIGt1c2VyIGhlbHBlcnMgaW4gdmVjdG9yIHBhZ2UiIGlmICFORUVEX0tVU0VSX0hFTFBFUlMKKwlkZXBlbmRzIG9uIE1NVQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFdhcm5pbmc6IGRpc2FibGluZyB0aGlzIG9wdGlvbiBtYXkgYnJlYWsgdXNlciBwcm9ncmFtcy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwppbmRleCBiM2E5NDc4Li4yMmFjMmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC0yNzAsNyArMjcwLDYgQEAKIC8qIEF1eGlsaWFyeSBEZWJ1ZyBNb2RlcyBDb250cm9sIDEgUmVnaXN0ZXIgKi8KICNkZWZpbmUgUEo0Ql9TVEFUSUNfQlAgKDEgPDwgMikgLyogRW5hYmxlIFN0YXRpYyBCUCAqLwogI2RlZmluZSBQSjRCX0lOVEVSX1BBUklUWSAoMSA8PCA4KSAvKiBEaXNhYmxlIEludGVybmFsIFBhcml0eSBIYW5kbGluZyAqLwotI2RlZmluZSBQSjRCX0JDS19PRkZfU1RSRVggKDEgPDwgNSkgLyogRW5hYmxlIHRoZSBiYWNrIG9mZiBvZiBTVFJFWCBpbnN0ciAqLwogI2RlZmluZSBQSjRCX0NMRUFOX0xJTkUgKDEgPDwgMTYpIC8qIERpc2FibGUgZGF0YSB0cmFuc2ZlciBmb3IgY2xlYW4gbGluZSAqLwogCiAvKiBBdXhpbGlhcnkgRGVidWcgTW9kZXMgQ29udHJvbCAyIFJlZ2lzdGVyICovCkBAIC0yOTMsNyArMjkyLDYgQEAKIAkvKiBBdXhpbGlhcnkgRGVidWcgTW9kZXMgQ29udHJvbCAxIFJlZ2lzdGVyICovCiAJbXJjCXAxNSwgMSwJcjAsIGMxNSwgYzEsIDEKIAlvcnIgICAgIHIwLCByMCwgI1BKNEJfQ0xFQU5fTElORQotCW9yciAgICAgcjAsIHIwLCAjUEo0Ql9CQ0tfT0ZGX1NUUkVYCiAJb3JyICAgICByMCwgcjAsICNQSjRCX0lOVEVSX1BBUklUWQogCWJpYwlyMCwgcjAsICNQSjRCX1NUQVRJQ19CUAogCW1jcglwMTUsIDEsCXIwLCBjMTUsIGMxLCAxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCAyMzI1OWYxMC4uYWZhMmIzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC01MzUsNyArNTM1LDcgQEAKIAltcmMJcDE1LCAwLCByNSwgYzE1LCBjMSwgMAlAIENQIGFjY2VzcyByZWcKIAltcmMJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAlAIFBJRAogCW1yYwlwMTUsIDAsIHI3LCBjMywgYzAsIDAJQCBkb21haW4gSUQKLQltcmMJcDE1LCAwLCByOCwgYzEsIGMxLCAwCUAgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnCisJbXJjCXAxNSwgMCwgcjgsIGMxLCBjMCwgMQlAIGF1eGlsaWFyeSBjb250cm9sIHJlZwogCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJQCBjb250cm9sIHJlZwogCWJpYwlyNCwgcjQsICMyCQlAIGNsZWFyIGZyZXF1ZW5jeSBjaGFuZ2UgYml0CiAJc3RtaWEJcjAsIHtyNCAtIHI5fQkJQCBzdG9yZSBjcCByZWdzCkBAIC01NTIsNyArNTUyLDcgQEAKIAltY3IJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAlAIFBJRAogCW1jcglwMTUsIDAsIHI3LCBjMywgYzAsIDAJQCBkb21haW4gSUQKIAltY3IJcDE1LCAwLCByMSwgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbWNyCXAxNSwgMCwgcjgsIGMxLCBjMSwgMAlAIGF1eGlsaWFyeSBjb250cm9sIHJlZworCW1jcglwMTUsIDAsIHI4LCBjMSwgYzAsIDEJQCBhdXhpbGlhcnkgY29udHJvbCByZWcKIAltb3YJcjAsIHI5CQkJQCBjb250cm9sIHJlZ2lzdGVyCiAJYgljcHVfcmVzdW1lX21tdQogRU5EUFJPQyhjcHVfeHNjYWxlX2RvX3Jlc3VtZSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9ncGlvLmMKaW5kZXggYjYxYTNiYy4uMTRmNmU2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9ncGlvLmMKQEAgLTQ5Nyw2ICs0OTcsMzQgQEAKICNkZWZpbmUgb3Jpb25fZ3Bpb19kYmdfc2hvdyBOVUxMCiAjZW5kaWYKIAorc3RhdGljIHZvaWQgb3Jpb25fZ3Bpb191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgaXJxX2NoaXBfdHlwZSAqY3QgPSBpcnFfZGF0YV9nZXRfY2hpcF90eXBlKGQpOworCXUzMiByZWdfdmFsOworCXUzMiBtYXNrID0gZC0+bWFzazsKKworCWlycV9nY19sb2NrKGdjKTsKKwlyZWdfdmFsID0gaXJxX3JlZ19yZWFkbChnYywgY3QtPnJlZ3MubWFzayk7CisJcmVnX3ZhbCB8PSBtYXNrOworCWlycV9yZWdfd3JpdGVsKGdjLCByZWdfdmFsLCBjdC0+cmVncy5tYXNrKTsKKwlpcnFfZ2NfdW5sb2NrKGdjKTsKK30KKworc3RhdGljIHZvaWQgb3Jpb25fZ3Bpb19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGlycV9jaGlwX3R5cGUgKmN0ID0gaXJxX2RhdGFfZ2V0X2NoaXBfdHlwZShkKTsKKwl1MzIgbWFzayA9IGQtPm1hc2s7CisJdTMyIHJlZ192YWw7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisJcmVnX3ZhbCA9IGlycV9yZWdfcmVhZGwoZ2MsIGN0LT5yZWdzLm1hc2spOworCXJlZ192YWwgJj0gfm1hc2s7CisJaXJxX3JlZ193cml0ZWwoZ2MsIHJlZ192YWwsIGN0LT5yZWdzLm1hc2spOworCWlycV9nY191bmxvY2soZ2MpOworfQorCiB2b2lkIF9faW5pdCBvcmlvbl9ncGlvX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCSAgICBpbnQgZ3Bpb19iYXNlLCBpbnQgbmdwaW8sCiAJCQkgICAgdm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgbWFza19vZmZzZXQsCkBAIC01NjUsOCArNTkzLDggQEAKIAljdCA9IGdjLT5jaGlwX3R5cGVzOwogCWN0LT5yZWdzLm1hc2sgPSBvY2hpcC0+bWFza19vZmZzZXQgKyBHUElPX0xFVkVMX01BU0tfT0ZGOwogCWN0LT50eXBlID0gSVJRX1RZUEVfTEVWRUxfSElHSCB8IElSUV9UWVBFX0xFVkVMX0xPVzsKLQljdC0+Y2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX2Nscl9iaXQ7Ci0JY3QtPmNoaXAuaXJxX3VubWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7CisJY3QtPmNoaXAuaXJxX21hc2sgPSBvcmlvbl9ncGlvX21hc2tfaXJxOworCWN0LT5jaGlwLmlycV91bm1hc2sgPSBvcmlvbl9ncGlvX3VubWFza19pcnE7CiAJY3QtPmNoaXAuaXJxX3NldF90eXBlID0gZ3Bpb19pcnFfc2V0X3R5cGU7CiAJY3QtPmNoaXAubmFtZSA9IG9jaGlwLT5jaGlwLmxhYmVsOwogCkBAIC01NzUsOCArNjAzLDggQEAKIAljdC0+cmVncy5hY2sgPSBHUElPX0VER0VfQ0FVU0VfT0ZGOwogCWN0LT50eXBlID0gSVJRX1RZUEVfRURHRV9SSVNJTkcgfCBJUlFfVFlQRV9FREdFX0ZBTExJTkc7CiAJY3QtPmNoaXAuaXJxX2FjayA9IGlycV9nY19hY2tfY2xyX2JpdDsKLQljdC0+Y2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX2Nscl9iaXQ7Ci0JY3QtPmNoaXAuaXJxX3VubWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7CisJY3QtPmNoaXAuaXJxX21hc2sgPSBvcmlvbl9ncGlvX21hc2tfaXJxOworCWN0LT5jaGlwLmlycV91bm1hc2sgPSBvcmlvbl9ncGlvX3VubWFza19pcnE7CiAJY3QtPmNoaXAuaXJxX3NldF90eXBlID0gZ3Bpb19pcnFfc2V0X3R5cGU7CiAJY3QtPmhhbmRsZXIgPSBoYW5kbGVfZWRnZV9pcnE7CiAJY3QtPmNoaXAubmFtZSA9IG9jaGlwLT5jaGlwLmxhYmVsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlCmluZGV4IGYwYTAwODQuLjg3NzQ2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUKQEAgLTM1LDYgKzM1LDcgQEAKICMgUE0gc3VwcG9ydAogCiBvYmotJChDT05GSUdfUE1fU0xFRVApCQkrPSBwbS1jb21tb24ubworb2JqLSQoQ09ORklHX0VYWU5PU19DUFVfU1VTUEVORCkgKz0gcG0tY29tbW9uLm8KIG9iai0kKENPTkZJR19TQU1TVU5HX1BNKQkrPSBwbS5vCiBvYmotJChDT05GSUdfU0FNU1VOR19QTV9HUElPKQkrPSBwbS1ncGlvLm8KIG9iai0kKENPTkZJR19TQU1TVU5HX1BNX0NIRUNLKQkrPSBwbS1jaGVjay5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L21hcC1zNXAuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oCmluZGV4IGY1YjlkM2YuLmY1Y2YyYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oCkBAIC0xNSw0MyArMTUsMjIgQEAKIAogI2RlZmluZSBTNVBfVkFfQ0hJUElECQlTM0NfQUREUigweDAyMDAwMDAwKQogI2RlZmluZSBTNVBfVkFfQ01VCQlTM0NfQUREUigweDAyMTAwMDAwKQotI2RlZmluZSBTNVBfVkFfR1BJTwkJUzNDX0FERFIoMHgwMjIwMDAwMCkKLSNkZWZpbmUgUzVQX1ZBX0dQSU8xCQlTNVBfVkFfR1BJTwotI2RlZmluZSBTNVBfVkFfR1BJTzIJCVMzQ19BRERSKDB4MDIyNDAwMDApCi0jZGVmaW5lIFM1UF9WQV9HUElPMwkJUzNDX0FERFIoMHgwMjI4MDAwMCkKIAotI2RlZmluZSBTNVBfVkFfU1lTUkFNCQlTM0NfQUREUigweDAyNDAwMDAwKQotI2RlZmluZSBTNVBfVkFfU1lTUkFNX05TCVMzQ19BRERSKDB4MDI0MTAwMDApCiAjZGVmaW5lIFM1UF9WQV9ETUMwCQlTM0NfQUREUigweDAyNDQwMDAwKQogI2RlZmluZSBTNVBfVkFfRE1DMQkJUzNDX0FERFIoMHgwMjQ4MDAwMCkKICNkZWZpbmUgUzVQX1ZBX1NST01DCQlTM0NfQUREUigweDAyNEMwMDAwKQogCi0jZGVmaW5lIFM1UF9WQV9TWVNUSU1FUgkJUzNDX0FERFIoMHgwMjUwMDAwMCkKLSNkZWZpbmUgUzVQX1ZBX0wyQ0MJCVMzQ19BRERSKDB4MDI2MDAwMDApCi0KLSNkZWZpbmUgUzVQX1ZBX0NPTUJJTkVSX0JBU0UJUzNDX0FERFIoMHgwMjcwMDAwMCkKLSNkZWZpbmUgUzVQX1ZBX0NPTUJJTkVSKHgpCShTNVBfVkFfQ09NQklORVJfQkFTRSArICgoeCkgPj4gMikgKiAweDEwKQotCiAjZGVmaW5lIFM1UF9WQV9DT1JFUEVSSV9CQVNFCVMzQ19BRERSKDB4MDI4MDAwMDApCiAjZGVmaW5lIFM1UF9WQV9DT1JFUEVSSSh4KQkoUzVQX1ZBX0NPUkVQRVJJX0JBU0UgKyAoeCkpCiAjZGVmaW5lIFM1UF9WQV9TQ1UJCVM1UF9WQV9DT1JFUEVSSSgweDApCiAjZGVmaW5lIFM1UF9WQV9UV0QJCVM1UF9WQV9DT1JFUEVSSSgweDYwMCkKIAotI2RlZmluZSBTNVBfVkFfR0lDX0NQVQkJUzNDX0FERFIoMHgwMjgxMDAwMCkKLSNkZWZpbmUgUzVQX1ZBX0dJQ19ESVNUCQlTM0NfQUREUigweDAyODIwMDAwKQotCiAjZGVmaW5lIFZBX1ZJQyh4KQkJKFMzQ19WQV9JUlEgKyAoKHgpICogMHgxMDAwMCkpCiAjZGVmaW5lIFZBX1ZJQzAJCQlWQV9WSUMoMCkKICNkZWZpbmUgVkFfVklDMQkJCVZBX1ZJQygxKQogI2RlZmluZSBWQV9WSUMyCQkJVkFfVklDKDIpCiAjZGVmaW5lIFZBX1ZJQzMJCQlWQV9WSUMoMykKIAotI2RlZmluZSBTNVBfVkFfVUFSVCh4KQkJKFMzQ19WQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCi0jZGVmaW5lIFM1UF9WQV9VQVJUMAkJUzVQX1ZBX1VBUlQoMCkKLSNkZWZpbmUgUzVQX1ZBX1VBUlQxCQlTNVBfVkFfVUFSVCgxKQotI2RlZmluZSBTNVBfVkFfVUFSVDIJCVM1UF9WQV9VQVJUKDIpCi0jZGVmaW5lIFM1UF9WQV9VQVJUMwkJUzVQX1ZBX1VBUlQoMykKLQogI2lmbmRlZiBTM0NfVUFSVF9PRkZTRVQKICNkZWZpbmUgUzNDX1VBUlRfT0ZGU0VUCQkoMHg0MDApCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9LY29uZmlnCmluZGV4IGEzMDFjYTIuLjQ5YjhlZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvS2NvbmZpZwpAQCAtNCw2ICs0LDYgQEAKIAlib29sCiAKIGNvbmZpZyBQTEFUX1ZFUlNBVElMRV9TQ0hFRF9DTE9DSwotCWRlZl9ib29sIHkKKwlib29sCiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWcKaW5kZXggOTUzMmY4ZC4uNmIxZWJkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMjQsOSArMjQsOSBAQAogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVCBpZiBTTVAKIAlzZWxlY3QgR0VORVJJQ19DUFVfQVVUT1BST0JFCiAJc2VsZWN0IEdFTkVSSUNfRUFSTFlfSU9SRU1BUAotCXNlbGVjdCBHRU5FUklDX0lPTUFQCiAJc2VsZWN0IEdFTkVSSUNfSVJRX1BST0JFCiAJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKKwlzZWxlY3QgR0VORVJJQ19QQ0lfSU9NQVAKIAlzZWxlY3QgR0VORVJJQ19TQ0hFRF9DTE9DSwogCXNlbGVjdCBHRU5FUklDX1NNUF9JRExFX1RIUkVBRAogCXNlbGVjdCBHRU5FUklDX1NUUk5DUFlfRlJPTV9VU0VSCkBAIC0zNCwxMyArMzQsMTYgQEAKIAlzZWxlY3QgR0VORVJJQ19USU1FX1ZTWVNDQUxMCiAJc2VsZWN0IEhBTkRMRV9ET01BSU5fSVJRCiAJc2VsZWN0IEhBUkRJUlFTX1NXX1JFU0VORAorCXNlbGVjdCBIQVZFX0FMSUdORURfU1RSVUNUX1BBR0UgaWYgU0xVQgogCXNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMCiAJc2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCisJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfQlBGX0pJVAogCXNlbGVjdCBIQVZFX0NfUkVDT1JETUNPVU5UCiAJc2VsZWN0IEhBVkVfQ0NfU1RBQ0tQUk9URUNUT1IKKwlzZWxlY3QgSEFWRV9DTVBYQ0hHX0RPVUJMRQogCXNlbGVjdCBIQVZFX0RFQlVHX0JVR1ZFUkJPU0UKIAlzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBSwogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKQEAgLTE0Miw2ICsxNDUsMTEgQEAKIAogbWVudSAiUGxhdGZvcm0gc2VsZWN0aW9uIgogCitjb25maWcgQVJDSF9TRUFUVExFCisJYm9vbCAiQU1EIFNlYXR0bGUgU29DIEZhbWlseSIKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgQU1EIFNlYXR0bGUgU09DIEZhbWlseQorCiBjb25maWcgQVJDSF9USFVOREVSCiAJYm9vbCAiQ2F2aXVtIEluYy4gVGh1bmRlciBTb0MgRmFtaWx5IgogCWhlbHAKQEAgLTE2Niw5ICsxNzQsNiBAQAogCiBtZW51ICJCdXMgc3VwcG9ydCIKIAotY29uZmlnIEFSTV9BTUJBCi0JYm9vbAotCiBjb25maWcgUENJCiAJYm9vbCAiUENJIHN1cHBvcnQiCiAJaGVscApAQCAtMTkzLDYgKzE5OCwxMTQgQEAKIAogbWVudSAiS2VybmVsIEZlYXR1cmVzIgogCittZW51ICJBUk0gZXJyYXRhIHdvcmthcm91bmRzIHZpYSB0aGUgYWx0ZXJuYXRpdmVzIGZyYW1ld29yayIKKworY29uZmlnIEFSTTY0X0VSUkFUVU1fODI2MzE5CisJYm9vbCAiQ29ydGV4LUE1MzogODI2MzE5OiBTeXN0ZW0gbWlnaHQgZGVhZGxvY2sgaWYgYSB3cml0ZSBjYW5ub3QgY29tcGxldGUgdW50aWwgcmVhZCBkYXRhIGlzIGFjY2VwdGVkIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZSB0byB3b3JrIGFyb3VuZCBBUk0KKwkgIGVycmF0dW0gODI2MzE5IG9uIENvcnRleC1BNTMgcGFydHMgdXAgdG8gcjBwMiB3aXRoIGFuIEFNQkEgNCBBQ0Ugb3IKKwkgIEFYSSBtYXN0ZXIgaW50ZXJmYWNlIGFuZCBhbiBMMiBjYWNoZS4KKworCSAgSWYgYSBDb3J0ZXgtQTUzIHVzZXMgYW4gQU1CQSBBWEk0IEFDRSBpbnRlcmZhY2UgdG8gb3RoZXIgcHJvY2Vzc29ycworCSAgYW5kIGlzIHVuYWJsZSB0byBhY2NlcHQgYSBjZXJ0YWluIHdyaXRlIHZpYSB0aGlzIGludGVyZmFjZSwgaXQgd2lsbAorCSAgbm90IHByb2dyZXNzIG9uIHJlYWQgZGF0YSBwcmVzZW50ZWQgb24gdGhlIHJlYWQgZGF0YSBjaGFubmVsIGFuZCB0aGUKKwkgIHN5c3RlbSBjYW4gZGVhZGxvY2suCisKKwkgIFRoZSB3b3JrYXJvdW5kIHByb21vdGVzIGRhdGEgY2FjaGUgY2xlYW4gaW5zdHJ1Y3Rpb25zIHRvCisJICBkYXRhIGNhY2hlIGNsZWFuLWFuZC1pbnZhbGlkYXRlLgorCSAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGVuYWJsZSB0aGUgd29ya2Fyb3VuZCwKKwkgIGFzIGl0IGRlcGVuZHMgb24gdGhlIGFsdGVybmF0aXZlIGZyYW1ld29yaywgd2hpY2ggd2lsbCBvbmx5IHBhdGNoCisJICB0aGUga2VybmVsIGlmIGFuIGFmZmVjdGVkIENQVSBpcyBkZXRlY3RlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIEFSTTY0X0VSUkFUVU1fODI3MzE5CisJYm9vbCAiQ29ydGV4LUE1MzogODI3MzE5OiBEYXRhIGNhY2hlIGNsZWFuIGluc3RydWN0aW9ucyBtaWdodCBjYXVzZSBvdmVybGFwcGluZyB0cmFuc2FjdGlvbnMgdG8gdGhlIGludGVyY29ubmVjdCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2UgdG8gd29yayBhcm91bmQgQVJNCisJICBlcnJhdHVtIDgyNzMxOSBvbiBDb3J0ZXgtQTUzIHBhcnRzIHVwIHRvIHIwcDIgd2l0aCBhbiBBTUJBIDUgQ0hJCisJICBtYXN0ZXIgaW50ZXJmYWNlIGFuZCBhbiBMMiBjYWNoZS4KKworCSAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHRoaXMgZXJyYXR1bSBjYW4gY2F1c2UgYSBjbGVhbiBsaW5lIGV2aWN0aW9uCisJICB0byBvY2N1ciBhdCB0aGUgc2FtZSB0aW1lIGFzIGFub3RoZXIgdHJhbnNhY3Rpb24gdG8gdGhlIHNhbWUgYWRkcmVzcworCSAgb24gdGhlIEFNQkEgNSBDSEkgaW50ZXJmYWNlLCB3aGljaCBjYW4gY2F1c2UgZGF0YSBjb3JydXB0aW9uIGlmIHRoZQorCSAgaW50ZXJjb25uZWN0IHJlb3JkZXJzIHRoZSB0d28gdHJhbnNhY3Rpb25zLgorCisJICBUaGUgd29ya2Fyb3VuZCBwcm9tb3RlcyBkYXRhIGNhY2hlIGNsZWFuIGluc3RydWN0aW9ucyB0bworCSAgZGF0YSBjYWNoZSBjbGVhbi1hbmQtaW52YWxpZGF0ZS4KKwkgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBlbmFibGUgdGhlIHdvcmthcm91bmQsCisJICBhcyBpdCBkZXBlbmRzIG9uIHRoZSBhbHRlcm5hdGl2ZSBmcmFtZXdvcmssIHdoaWNoIHdpbGwgb25seSBwYXRjaAorCSAgdGhlIGtlcm5lbCBpZiBhbiBhZmZlY3RlZCBDUFUgaXMgZGV0ZWN0ZWQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBBUk02NF9FUlJBVFVNXzgyNDA2OQorCWJvb2wgIkNvcnRleC1BNTM6IDgyNDA2OTogQ2FjaGUgbGluZSBtaWdodCBub3QgYmUgbWFya2VkIGFzIGNsZWFuIGFmdGVyIGEgQ2xlYW5TaGFyZWQgc25vb3AiCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhbiBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlIHRvIHdvcmsgYXJvdW5kIEFSTQorCSAgZXJyYXR1bSA4MjQwNjkgb24gQ29ydGV4LUE1MyBwYXJ0cyB1cCB0byByMHAyIHdoZW4gaXQgaXMgY29ubmVjdGVkCisJICB0byBhIGNvaGVyZW50IGludGVyY29ubmVjdC4KKworCSAgSWYgYSBDb3J0ZXgtQTUzIHByb2Nlc3NvciBpcyBleGVjdXRpbmcgYSBzdG9yZSBvciBwcmVmZXRjaCBmb3IKKwkgIHdyaXRlIGluc3RydWN0aW9uIGF0IHRoZSBzYW1lIHRpbWUgYXMgYSBwcm9jZXNzb3IgaW4gYW5vdGhlcgorCSAgY2x1c3RlciBpcyBleGVjdXRpbmcgYSBjYWNoZSBtYWludGVuYW5jZSBvcGVyYXRpb24gdG8gdGhlIHNhbWUKKwkgIGFkZHJlc3MsIHRoZW4gdGhpcyBlcnJhdHVtIG1pZ2h0IGNhdXNlIGEgY2xlYW4gY2FjaGUgbGluZSB0byBiZQorCSAgaW5jb3JyZWN0bHkgbWFya2VkIGFzIGRpcnR5LgorCisJICBUaGUgd29ya2Fyb3VuZCBwcm9tb3RlcyBkYXRhIGNhY2hlIGNsZWFuIGluc3RydWN0aW9ucyB0bworCSAgZGF0YSBjYWNoZSBjbGVhbi1hbmQtaW52YWxpZGF0ZS4KKwkgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBvcHRpb24gZG9lcyBub3QgbmVjZXNzYXJpbHkgZW5hYmxlIHRoZQorCSAgd29ya2Fyb3VuZCwgYXMgaXQgZGVwZW5kcyBvbiB0aGUgYWx0ZXJuYXRpdmUgZnJhbWV3b3JrLCB3aGljaCB3aWxsCisJICBvbmx5IHBhdGNoIHRoZSBrZXJuZWwgaWYgYW4gYWZmZWN0ZWQgQ1BVIGlzIGRldGVjdGVkLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgQVJNNjRfRVJSQVRVTV84MTk0NzIKKwlib29sICJDb3J0ZXgtQTUzOiA4MTk0NzI6IFN0b3JlIGV4Y2x1c2l2ZSBpbnN0cnVjdGlvbnMgbWlnaHQgY2F1c2UgZGF0YSBjb3JydXB0aW9uIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZSB0byB3b3JrIGFyb3VuZCBBUk0KKwkgIGVycmF0dW0gODE5NDcyIG9uIENvcnRleC1BNTMgcGFydHMgdXAgdG8gcjBwMSB3aXRoIGFuIEwyIGNhY2hlCisJICBwcmVzZW50IHdoZW4gaXQgaXMgY29ubmVjdGVkIHRvIGEgY29oZXJlbnQgaW50ZXJjb25uZWN0LgorCisJICBJZiB0aGUgcHJvY2Vzc29yIGlzIGV4ZWN1dGluZyBhIGxvYWQgYW5kIHN0b3JlIGV4Y2x1c2l2ZSBzZXF1ZW5jZSBhdAorCSAgdGhlIHNhbWUgdGltZSBhcyBhIHByb2Nlc3NvciBpbiBhbm90aGVyIGNsdXN0ZXIgaXMgZXhlY3V0aW5nIGEgY2FjaGUKKwkgIG1haW50ZW5hbmNlIG9wZXJhdGlvbiB0byB0aGUgc2FtZSBhZGRyZXNzLCB0aGVuIHRoaXMgZXJyYXR1bSBtaWdodAorCSAgY2F1c2UgZGF0YSBjb3JydXB0aW9uLgorCisJICBUaGUgd29ya2Fyb3VuZCBwcm9tb3RlcyBkYXRhIGNhY2hlIGNsZWFuIGluc3RydWN0aW9ucyB0bworCSAgZGF0YSBjYWNoZSBjbGVhbi1hbmQtaW52YWxpZGF0ZS4KKwkgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBlbmFibGUgdGhlIHdvcmthcm91bmQsCisJICBhcyBpdCBkZXBlbmRzIG9uIHRoZSBhbHRlcm5hdGl2ZSBmcmFtZXdvcmssIHdoaWNoIHdpbGwgb25seSBwYXRjaAorCSAgdGhlIGtlcm5lbCBpZiBhbiBhZmZlY3RlZCBDUFUgaXMgZGV0ZWN0ZWQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBBUk02NF9FUlJBVFVNXzgzMjA3NQorCWJvb2wgIkNvcnRleC1BNTc6IDgzMjA3NTogcG9zc2libGUgZGVhZGxvY2sgb24gbWl4aW5nIGV4Y2x1c2l2ZSBtZW1vcnkgYWNjZXNzZXMgd2l0aCBkZXZpY2UgbG9hZHMiCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhbiBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlIHRvIHdvcmsgYXJvdW5kIEFSTQorCSAgZXJyYXR1bSA4MzIwNzUgb24gQ29ydGV4LUE1NyBwYXJ0cyB1cCB0byByMXAyLgorCisJICBBZmZlY3RlZCBDb3J0ZXgtQTU3IHBhcnRzIG1pZ2h0IGRlYWRsb2NrIHdoZW4gZXhjbHVzaXZlIGxvYWQvc3RvcmUKKwkgIGluc3RydWN0aW9ucyB0byBXcml0ZS1CYWNrIG1lbW9yeSBhcmUgbWl4ZWQgd2l0aCBEZXZpY2UgbG9hZHMuCisKKwkgIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHByb21vdGUgZGV2aWNlIGxvYWRzIHRvIHVzZSBMb2FkLUFjcXVpcmUKKwkgIHNlbWFudGljcy4KKwkgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBlbmFibGUgdGhlIHdvcmthcm91bmQsCisJICBhcyBpdCBkZXBlbmRzIG9uIHRoZSBhbHRlcm5hdGl2ZSBmcmFtZXdvcmssIHdoaWNoIHdpbGwgb25seSBwYXRjaAorCSAgdGhlIGtlcm5lbCBpZiBhbiBhZmZlY3RlZCBDUFUgaXMgZGV0ZWN0ZWQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2VuZG1lbnUKKworCiBjaG9pY2UKIAlwcm9tcHQgIlBhZ2Ugc2l6ZSIKIAlkZWZhdWx0IEFSTTY0XzRLX1BBR0VTCkBAIC0zNDUsNiArNDU4LDE5IEBACiAKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAorY29uZmlnIFNFQ0NPTVAKKwlib29sICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCisJLS0taGVscC0tLQorCSAgVGhpcyBrZXJuZWwgZmVhdHVyZSBpcyB1c2VmdWwgZm9yIG51bWJlciBjcnVuY2hpbmcgYXBwbGljYXRpb25zCisJICB0aGF0IG1heSBuZWVkIHRvIGNvbXB1dGUgdW50cnVzdGVkIGJ5dGVjb2RlIGR1cmluZyB0aGVpcgorCSAgZXhlY3V0aW9uLiBCeSB1c2luZyBwaXBlcyBvciBvdGhlciB0cmFuc3BvcnRzIG1hZGUgYXZhaWxhYmxlIHRvCisJICB0aGUgcHJvY2VzcyBhcyBmaWxlIGRlc2NyaXB0b3JzIHN1cHBvcnRpbmcgdGhlIHJlYWQvd3JpdGUKKwkgIHN5c2NhbGxzLCBpdCdzIHBvc3NpYmxlIHRvIGlzb2xhdGUgdGhvc2UgYXBwbGljYXRpb25zIGluCisJICB0aGVpciBvd24gYWRkcmVzcyBzcGFjZSB1c2luZyBzZWNjb21wLiBPbmNlIHNlY2NvbXAgaXMKKwkgIGVuYWJsZWQgdmlhIHByY3RsKFBSX1NFVF9TRUNDT01QKSwgaXQgY2Fubm90IGJlIGRpc2FibGVkCisJICBhbmQgdGhlIHRhc2sgaXMgb25seSBhbGxvd2VkIHRvIGV4ZWN1dGUgYSBmZXcgc2FmZSBzeXNjYWxscworCSAgZGVmaW5lZCBieSBlYWNoIHNlY2NvbXAgbW9kZS4KKwogY29uZmlnIFhFTl9ET00wCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gWEVOCkBAIC0zNjEsNiArNDg3LDU4IEBACiAJZGVmYXVsdCAiMTQiIGlmIChBUk02NF82NEtfUEFHRVMgJiYgVFJBTlNQQVJFTlRfSFVHRVBBR0UpCiAJZGVmYXVsdCAiMTEiCiAKK21lbnVjb25maWcgQVJNVjhfREVQUkVDQVRFRAorCWJvb2wgIkVtdWxhdGUgZGVwcmVjYXRlZC9vYnNvbGV0ZSBBUk12OCBpbnN0cnVjdGlvbnMiCisJZGVwZW5kcyBvbiBDT01QQVQKKwloZWxwCisJICBMZWdhY3kgc29mdHdhcmUgc3VwcG9ydCBtYXkgcmVxdWlyZSBjZXJ0YWluIGluc3RydWN0aW9ucworCSAgdGhhdCBoYXZlIGJlZW4gZGVwcmVjYXRlZCBvciBvYnNvbGV0ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZS4KKworCSAgRW5hYmxlIHRoaXMgY29uZmlnIHRvIGVuYWJsZSBzZWxlY3RpdmUgZW11bGF0aW9uIG9mIHRoZXNlCisJICBmZWF0dXJlcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWQorCitpZiBBUk1WOF9ERVBSRUNBVEVECisKK2NvbmZpZyBTV1BfRU1VTEFUSU9OCisJYm9vbCAiRW11bGF0ZSBTV1AvU1dQQiBpbnN0cnVjdGlvbnMiCisJaGVscAorCSAgQVJNdjggb2Jzb2xldGVzIHRoZSB1c2Ugb2YgQTMyIFNXUC9TV1BCIGluc3RydWN0aW9ucyBzdWNoIHRoYXQKKwkgIHRoZXkgYXJlIGFsd2F5cyB1bmRlZmluZWQuIFNheSBZIGhlcmUgdG8gZW5hYmxlIHNvZnR3YXJlCisJICBlbXVsYXRpb24gb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGZvciB1c2Vyc3BhY2UgdXNpbmcgTERYUi9TVFhSLgorCisJICBJbiBzb21lIG9sZGVyIHZlcnNpb25zIG9mIGdsaWJjIFs8PTIuOF0gU1dQIGlzIHVzZWQgZHVyaW5nIGZ1dGV4CisJICB0cnlsb2NrKCkgb3BlcmF0aW9ucyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGNvZGUgd2lsbCBub3QKKwkgIGJlIHByZWVtcHRlZC4gVGhpcyBpbnZhbGlkIGFzc3VtcHRpb24gbWF5IGJlIG1vcmUgbGlrZWx5IHRvIGZhaWwKKwkgIHdpdGggU1dQIGVtdWxhdGlvbiBlbmFibGVkLCBsZWFkaW5nIHRvIGRlYWRsb2NrIG9mIHRoZSB1c2VyCisJICBhcHBsaWNhdGlvbi4KKworCSAgTk9URTogd2hlbiBhY2Nlc3NpbmcgdW5jYWNoZWQgc2hhcmVkIHJlZ2lvbnMsIExEWFIvU1RYUiByZWx5CisJICBvbiBhbiBleHRlcm5hbCB0cmFuc2FjdGlvbiBtb25pdG9yaW5nIGJsb2NrIGNhbGxlZCBhIGdsb2JhbAorCSAgbW9uaXRvciB0byBtYWludGFpbiB1cGRhdGUgYXRvbWljaXR5LiBJZiB5b3VyIHN5c3RlbSBkb2VzIG5vdAorCSAgaW1wbGVtZW50IGEgZ2xvYmFsIG1vbml0b3IsIHRoaXMgb3B0aW9uIGNhbiBjYXVzZSBwcm9ncmFtcyB0aGF0CisJICBwZXJmb3JtIFNXUCBvcGVyYXRpb25zIHRvIHVuY2FjaGVkIG1lbW9yeSB0byBkZWFkbG9jay4KKworCSAgSWYgdW5zdXJlLCBzYXkgWQorCitjb25maWcgQ1AxNV9CQVJSSUVSX0VNVUxBVElPTgorCWJvb2wgIkVtdWxhdGUgQ1AxNSBCYXJyaWVyIGluc3RydWN0aW9ucyIKKwloZWxwCisJICBUaGUgQ1AxNSBiYXJyaWVyIGluc3RydWN0aW9ucyAtIENQMTVJU0IsIENQMTVEU0IsIGFuZAorCSAgQ1AxNURNQiAtIGFyZSBkZXByZWNhdGVkIGluIEFSTXY4IChhbmQgQVJNdjcpLiBJdCBpcworCSAgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBJU0IsIERTQiwgYW5kIERNQgorCSAgaW5zdHJ1Y3Rpb25zIGluc3RlYWQuCisKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiB0aGVzZQorCSAgaW5zdHJ1Y3Rpb25zIGZvciBBQXJjaDMyIHVzZXJzcGFjZSBjb2RlLiBXaGVuIHRoaXMgb3B0aW9uIGlzCisJICBlbmFibGVkLCBDUDE1IGJhcnJpZXIgdXNhZ2UgaXMgdHJhY2VkIHdoaWNoIGNhbiBoZWxwCisJICBpZGVudGlmeSBzb2Z0d2FyZSB0aGF0IG5lZWRzIHVwZGF0aW5nLgorCisJICBJZiB1bnN1cmUsIHNheSBZCisKK2VuZGlmCisKIGVuZG1lbnUKIAogbWVudSAiQm9vdCBvcHRpb25zIgpAQCAtNDAxLDYgKzU3OSwxNyBAQAogCSAgYWxsb3cgdGhlIGtlcm5lbCB0byBiZSBib290ZWQgYXMgYW4gRUZJIGFwcGxpY2F0aW9uLiBUaGlzCiAJICBpcyBvbmx5IHVzZWZ1bCBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBVRUZJIGZpcm13YXJlLgogCitjb25maWcgRE1JCisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIFNNQklPUyAoRE1JKSB0YWJsZXMiCisJZGVwZW5kcyBvbiBFRkkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgU01CSU9TL0RNSSBmZWF0dXJlIGZvciBzeXN0ZW1zLgorCisJICBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBVRUZJIGZpcm13YXJlLgorCSAgSG93ZXZlciwgZXZlbiB3aXRoIHRoaXMgb3B0aW9uLCB0aGUgcmVzdWx0YW50IGtlcm5lbCBzaG91bGQKKwkgIGNvbnRpbnVlIHRvIGJvb3Qgb24gZXhpc3Rpbmcgbm9uLVVFRkkgcGxhdGZvcm1zLgorCiBlbmRtZW51CiAKIG1lbnUgIlVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvYXJtNjQvS2NvbmZpZy5kZWJ1ZwppbmRleCAwYTEyOTMzLi41ZmRkNmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm02NC9LY29uZmlnLmRlYnVnCkBAIC02LDYgKzYsMTggQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBUk02NF9QVERVTVAKKwlib29sICJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCisJc2VsZWN0IERFQlVHX0ZTCisgICAgICAgIGhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc2hvdyB0aGUga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgaW4gYQorCSAgZGVidWdmcyBmaWxlLiBUaGlzIGluZm9ybWF0aW9uIGlzIG9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2ZWxvcGVycworCSAgd2hvIGFyZSB3b3JraW5nIGluIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBhcmVhcyBvZiB0aGUga2VybmVsLgorCSAgSXQgaXMgcHJvYmFibHkgbm90IGEgZ29vZCBpZGVhIHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgaW4gYSBwcm9kdWN0aW9uCisJICBrZXJuZWwuCisJICBJZiBpbiBkb3VidCwgc2F5ICJOIgorCiBjb25maWcgU1RSSUNUX0RFVk1FTQogCWJvb2wgIkZpbHRlciBhY2Nlc3MgdG8gL2Rldi9tZW0iCiAJZGVwZW5kcyBvbiBNTVUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvTWFrZWZpbGUgYi9hcmNoL2FybTY0L01ha2VmaWxlCmluZGV4IDIwOTAxZmYuLjFjNDNjZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm02NC9NYWtlZmlsZQpAQCAtNzAsOCArNzAsMTMgQEAKICUuZHRiOiBzY3JpcHRzCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KS9kdHMgJChib290KS9kdHMvJEAKIAotZHRiczogc2NyaXB0cwotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkvZHRzIGR0YnMKK1BIT05ZICs9IGR0YnMgZHRic19pbnN0YWxsCisKK2R0YnM6IHByZXBhcmUgc2NyaXB0cworCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkvZHRzCisKK2R0YnNfaW5zdGFsbDoKKwkkKFEpJChNQUtFKSAkKGR0Ymluc3QpPSQoYm9vdCkvZHRzCiAKIFBIT05ZICs9IHZkc29faW5zdGFsbAogdmRzb19pbnN0YWxsOgpAQCAtODUsNiArOTAsNyBAQAogICBlY2hvICAnKiBJbWFnZS5neiAgICAgIC0gQ29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgKGFyY2gvJChBUkNIKS9ib290L0ltYWdlLmd6KScKICAgZWNobyAgJyAgSW1hZ2UgICAgICAgICAtIFVuY29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgKGFyY2gvJChBUkNIKS9ib290L0ltYWdlKScKICAgZWNobyAgJyogZHRicyAgICAgICAgICAtIEJ1aWxkIGRldmljZSB0cmVlIGJsb2JzIGZvciBlbmFibGVkIGJvYXJkcycKKyAgZWNobyAgJyAgZHRic19pbnN0YWxsICAtIEluc3RhbGwgZHRicyB0byAkKElOU1RBTExfRFRCU19QQVRIKScKICAgZWNobyAgJyAgaW5zdGFsbCAgICAgICAtIEluc3RhbGwgdW5jb21wcmVzc2VkIGtlcm5lbCcKICAgZWNobyAgJyAgemluc3RhbGwgICAgICAtIEluc3RhbGwgY29tcHJlc3NlZCBrZXJuZWwnCiAgIGVjaG8gICcgICAgICAgICAgICAgICAgICBJbnN0YWxsIHVzaW5nICh5b3VyKSB+L2Jpbi9pbnN0YWxsa2VybmVsIG9yJwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvTWFrZWZpbGUKaW5kZXggZjgwMDFhNi4uM2I4ZDQyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL01ha2VmaWxlCkBAIC0xLDEwICsxLDggQEAKLWR0Yi0kKENPTkZJR19BUkNIX1RIVU5ERVIpICs9IHRodW5kZXItODh4eC5kdGIKLWR0Yi0kKENPTkZJR19BUkNIX1ZFWFBSRVNTKSArPSBydHNtX3ZlLWFlbXY4YS5kdGIgZm91bmRhdGlvbi12OC5kdGIKLWR0Yi0kKENPTkZJR19BUkNIX1hHRU5FKSArPSBhcG0tbXVzdGFuZy5kdGIKK2R0cy1kaXJzICs9IGFtZAorZHRzLWRpcnMgKz0gYXBtCitkdHMtZGlycyArPSBhcm0KK2R0cy1kaXJzICs9IGNhdml1bQogCi10YXJnZXRzICs9IGR0YnMKLXRhcmdldHMgKz0gJChkdGIteSkKLQotZHRiczogJChhZGRwcmVmaXggJChvYmopLywgJChkdGIteSkpCi0KLWNsZWFuLWZpbGVzIDo9ICouZHRiCithbHdheXMJCTo9ICQoZHRiLXkpCitzdWJkaXIteQk6PSAkKGR0cy1kaXJzKQorY2xlYW4tZmlsZXMJOj0gKi5kdGIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL01ha2VmaWxlIGIvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkZjcwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorZHRiLSQoQ09ORklHX0FSQ0hfU0VBVFRMRSkgKz0gYW1kLW92ZXJkcml2ZS5kdGIKKworYWx3YXlzCQk6PSAkKGR0Yi15KQorc3ViZGlyLXkJOj0gJChkdHMtZGlycykKK2NsZWFuLWZpbGVzCTo9ICouZHRiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9hbWQtb3ZlcmRyaXZlLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL2FtZC1vdmVyZHJpdmUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NGEzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9hbWQtb3ZlcmRyaXZlLmR0cwpAQCAtMCwwICsxLDY2IEBACisvKgorICogRFRTIGZpbGUgZm9yIEFNRCBTZWF0dGxlIE92ZXJkcml2ZSBEZXZlbG9wbWVudCBCb2FyZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKi8KKworL2R0cy12MS87CisKKy9pbmNsdWRlLyAiYW1kLXNlYXR0bGUtc29jLmR0c2kiCisKKy8geworCW1vZGVsID0gIkFNRCBTZWF0dGxlIERldmVsb3BtZW50IEJvYXJkIChPdmVyZHJpdmUpIjsKKwljb21wYXRpYmxlID0gImFtZCxzZWF0dGxlLW92ZXJkcml2ZSIsICJhbWQsc2VhdHRsZSI7CisKKwljaG9zZW4geworCQlzdGRvdXQtcGF0aCA9ICZzZXJpYWwwOworCQlsaW51eCxwY2ktcHJvYmUtb25seTsKKwl9OworfTsKKworJmNjcDAgeworCXN0YXR1cyA9ICJvayI7Cit9OworCismZ3BpbzAgeworCXN0YXR1cyA9ICJvayI7Cit9OworCismZ3BpbzEgeworCXN0YXR1cyA9ICJvayI7Cit9OworCismaTJjMCB7CisJc3RhdHVzID0gIm9rIjsKK307CisKKyZwY2llMCB7CisJc3RhdHVzID0gIm9rIjsKK307CisKKyZzcGkwIHsKKwlzdGF0dXMgPSAib2siOworfTsKKworJnNwaTEgeworCXN0YXR1cyA9ICJvayI7CisJc2RjYXJkMDogc2RjYXJkQDAgeworCQljb21wYXRpYmxlID0gIm1tYy1zcGktc2xvdCI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQl2b2x0YWdlLXJhbmdlcyA9IDwzMjAwIDM0MDA+OworCQlncGlvcyA9IDwmZ3BpbzAgNyAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzA+OworCQlpbnRlcnJ1cHRzID0gPDcgMz47CisJCXBsMDIyLGhpZXJhcmNoeSA9IDwwPjsKKwkJcGwwMjIsaW50ZXJmYWNlID0gPDA+OworCQlwbDAyMixjb20tbW9kZSA9IDwweDA+OworCQlwbDAyMixyeC1sZXZlbC10cmlnID0gPDA+OworCQlwbDAyMix0eC1sZXZlbC10cmlnID0gPDA+OworCX07Cit9OworCismdjJtMCB7CisJYXJtLG1zaS1iYXNlLXNwaSA9IDw2ND47CisJYXJtLG1zaS1udW0tc3BpcyA9IDwyNTY+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL2FtZC1zZWF0dGxlLWNsa3MuZHRzaSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL2FtZC1zZWF0dGxlLWNsa3MuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjIzYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvYW1kLXNlYXR0bGUtY2xrcy5kdHNpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBEVFMgZmlsZSBmb3IgQU1EIFNlYXR0bGUgQ2xvY2tzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqLworCisJYWRsM2Nsa18xMDBtaHo6IGNsazEwMG1oel8wIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhZGwzY2xrXzEwMG1oeiI7CisJfTsKKworCWNjcGNsa18zNzVtaHo6IGNsazM3NW1oeiB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzNzUwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2NwY2xrXzM3NW1oeiI7CisJfTsKKworCXNhdGFjbGtfMzMzbWh6OiBjbGszMzNtaHogeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gInNhdGFjbGtfMzMzbWh6IjsKKwl9OworCisJcGNpZWNsa181MDBtaHo6IGNsazUwMG1oel8wIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwY2llY2xrXzUwMG1oeiI7CisJfTsKKworCWRtYWNsa181MDBtaHo6IGNsazUwMG1oel8xIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJkbWFjbGtfNTAwbWh6IjsKKwl9OworCisJbWlzY2Nsa18yNTBtaHo6IGNsazI1MG1oel80IHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJtaXNjY2xrXzI1MG1oeiI7CisJfTsKKworCXVhcnRzcGljbGtfMTAwbWh6OiBjbGsxMDBtaHpfMSB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAidWFydHNwaWNsa18xMDBtaHoiOworCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9hbWQtc2VhdHRsZS1zb2MuZHRzaSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL2FtZC1zZWF0dGxlLXNvYy5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzRkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9hbWQtc2VhdHRsZS1zb2MuZHRzaQpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIERUUyBmaWxlIGZvciBBTUQgU2VhdHRsZSBTb0MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICovCisKKy8geworCWNvbXBhdGlibGUgPSAiYW1kLHNlYXR0bGUiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYzA+OworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJZ2ljMDogaW50ZXJydXB0LWNvbnRyb2xsZXJAZTExMDEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxnaWMtNDAwIiwgImFybSxjb3J0ZXgtYTE1LWdpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCXJlZyA9IDwweDAgMHhlMTExMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwweDAgMHhlMTEyZjAwMCAwIDB4MjAwMD4sCisJCSAgICAgIDwweDAgMHhlMTE0MDAwMCAwIDB4MTAwMDA+LAorCQkgICAgICA8MHgwIDB4ZTExNjAwMDAgMCAweDEwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxIDkgMHhmMDQ+OworCQlyYW5nZXMgPSA8MCAwIDAgMHhlMTEwMDAwMCAwIDB4MTAwMDAwPjsKKwkJdjJtMDogdjJtQGUwMDgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGdpYy12Mm0tZnJhbWUiOworCQkJbXNpLWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgwIDB4MDAwODAwMDAgMCAweDEwMDA+OworCQl9OworCX07CisKKwl0aW1lciB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY4LXRpbWVyIjsKKwkJaW50ZXJydXB0cyA9IDwxIDEzIDB4ZmYwND4sCisJCQkgICAgIDwxIDE0IDB4ZmYwND4sCisJCQkgICAgIDwxIDExIDB4ZmYwND4sCisJCQkgICAgIDwxIDEwIDB4ZmYwND47CisJfTsKKworCXBtdSB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY4LXBtdXYzIjsKKwkJaW50ZXJydXB0cyA9IDwwIDcgND4sCisJCQkgICAgIDwwIDggND4sCisJCQkgICAgIDwwIDkgND4sCisJCQkgICAgIDwwIDEwIDQ+LAorCQkJICAgICA8MCAxMSA0PiwKKwkJCSAgICAgPDAgMTIgND4sCisJCQkgICAgIDwwIDEzIDQ+LAorCQkJICAgICA8MCAxNCA0PjsKKwl9OworCisJc21iMDogc21iIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlyYW5nZXM7CisKKwkJLyogRERSIHJhbmdlIGlzIDQwLWJpdCBhZGRyZXNzaW5nICovCisJCWRtYS1yYW5nZXMgPSA8MHg4MCAweDAgMHg4MCAweDAgMHg3ZiAweGZmZmZmZmZmPjsKKworCQkvaW5jbHVkZS8gImFtZC1zZWF0dGxlLWNsa3MuZHRzaSIKKworCQlzYXRhMDogc2F0YUBlMDMwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHdjLWFoY2kiOworCQkJcmVnID0gPDAgMHhlMDMwMDAwMCAwIDB4ODAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAzNTUgND47CisJCQljbG9ja3MgPSA8JnNhdGFjbGtfMzMzbWh6PjsKKwkJCWRtYS1jb2hlcmVudDsKKwkJfTsKKworCQlpMmMwOiBpMmNAZTEwMDAwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MCAweGUxMDAwMDAwIDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAzNTcgND47CisJCQljbG9ja3MgPSA8JnVhcnRzcGljbGtfMTAwbWh6PjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxAZTEwMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMTEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQlyZWcgPSA8MCAweGUxMDEwMDAwIDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAzMjggND47CisJCQljbG9ja3MgPSA8JnVhcnRzcGljbGtfMTAwbWh6PiwgPCZ1YXJ0c3BpY2xrXzEwMG1oej47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0Y2xrIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlzcGkwOiBzc3BAZTEwMjAwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDIyIiwgImFybSxwcmltZWNlbGwiOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MCAweGUxMDIwMDAwIDAgMHgxMDAwPjsKKwkJCXNwaS1jb250cm9sbGVyOworCQkJaW50ZXJydXB0cyA9IDwwIDMzMCA0PjsKKwkJCWNsb2NrcyA9IDwmdWFydHNwaWNsa18xMDBtaHo+OworCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQl9OworCisJCXNwaTE6IHNzcEBlMTAzMDAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMjIiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwwIDB4ZTEwMzAwMDAgMCAweDEwMDA+OworCQkJc3BpLWNvbnRyb2xsZXI7CisJCQlpbnRlcnJ1cHRzID0gPDAgMzI5IDQ+OworCQkJY2xvY2tzID0gPCZ1YXJ0c3BpY2xrXzEwMG1oej47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQludW0tY3MgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQl9OworCisJCWdwaW8wOiBncGlvQGUxMDQwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJcmVnID0gPDAgMHhlMTA0MDAwMCAwIDB4MTAwMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlpbnRlcnJ1cHRzID0gPDAgMzU5IDQ+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJY2xvY2tzID0gPCZ1YXJ0c3BpY2xrXzEwMG1oej47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJZ3BpbzE6IGdwaW9AZTEwNTAwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MCAweGUxMDUwMDAwIDAgMHgxMDAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCWludGVycnVwdHMgPSA8MCAzNTggND47CisJCQljbG9ja3MgPSA8JnVhcnRzcGljbGtfMTAwbWh6PjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJfTsKKworCQljY3AwOiBjY3BAZTAxMDAwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWNvbXBhdGlibGUgPSAiYW1kLGNjcC1zZWF0dGxlLXYxYSI7CisJCQlyZWcgPSA8MCAweGUwMTAwMDAwIDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMyA0PjsKKwkJCWRtYS1jb2hlcmVudDsKKwkJfTsKKworCQlwY2llMDogcGNpZUBmMDAwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInBjaS1ob3N0LWVjYW0tZ2VuZXJpYyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlidXMtcmFuZ2UgPSA8MCAweDdmPjsKKwkJCW1zaS1wYXJlbnQgPSA8JnYybTA+OworCQkJcmVnID0gPDAgMHhmMDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJCWludGVycnVwdC1tYXAgPQorCQkJCTwweDEwMDAgMHgwIDB4MCAweDEgJmdpYzAgMHgwIDB4MCAweDAgMHgxMjAgMHgxPiwKKwkJCQk8MHgxMDAwIDB4MCAweDAgMHgyICZnaWMwIDB4MCAweDAgMHgwIDB4MTIxIDB4MT4sCisJCQkJPDB4MTAwMCAweDAgMHgwIDB4MyAmZ2ljMCAweDAgMHgwIDB4MCAweDEyMiAweDE+LAorCQkJCTwweDEwMDAgMHgwIDB4MCAweDQgJmdpYzAgMHgwIDB4MCAweDAgMHgxMjMgMHgxPjsKKworCQkJZG1hLWNvaGVyZW50OworCQkJZG1hLXJhbmdlcyA9IDwweDQzMDAwMDAwIDB4ODAgMHgwIDB4ODAgMHgwIDB4N2YgMHhmZmZmZmZmZj47CisJCQlyYW5nZXMgPQorCQkJCS8qIEkvTyBNZW1vcnkgKHNpemU9NjRLKSAqLworCQkJCTwweDAxMDAwMDAwIDB4MDAgMHgwMDAwMDAwMCAweDAwIDB4ZWZmZjAwMDAgMHgwMCAweDAwMDEwMDAwPiwKKwkJCQkvKiAzMi1iaXQgTU1JTyAoc2l6ZT0yRykgKi8KKwkJCQk8MHgwMjAwMDAwMCAweDAwIDB4NDAwMDAwMDAgMHgwMCAweDQwMDAwMDAwIDB4MDAgMHg4MDAwMDAwMD4sCisJCQkJLyogNjQtYml0IE1NSU8gKHNpemU9IDEyNEcpICovCisJCQkJPDB4MDMwMDAwMDAgMHgwMSAweDAwMDAwMDAwIDB4MDEgMHgwMDAwMDAwMCAweDdmIDB4MDAwMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hcG0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmFmYWJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcG0vTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACitkdGItJChDT05GSUdfQVJDSF9YR0VORSkgKz0gYXBtLW11c3RhbmcuZHRiCisKK2Fsd2F5cwkJOj0gJChkdGIteSkKK3N1YmRpci15CTo9ICQoZHRzLWRpcnMpCitjbGVhbi1maWxlcwk6PSAqLmR0YgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hcG0tbXVzdGFuZy5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS9hcG0tbXVzdGFuZy5kdHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtNjQvYm9vdC9kdHMvYXBtLW11c3RhbmcuZHRzCnJlbmFtZSB0byBhcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS9hcG0tbXVzdGFuZy5kdHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXBtLXN0b3JtLmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS9hcG0tc3Rvcm0uZHRzaQpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS1zdG9ybS5kdHNpCnJlbmFtZSB0byBhcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS9hcG0tc3Rvcm0uZHRzaQppbmRleCAyOTVjNzJkLi5mMWFkOWMyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS1zdG9ybS5kdHNpCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXBtL2FwbS1zdG9ybS5kdHNpCkBAIC01OTksNyArNTk5LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiYXBtLHhnZW5lLWVuZXQiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCXJlZyA9IDwweDAgMHgxNzAyMDAwMCAweDAgMHhkMTAwPiwKLQkJCSAgICAgIDwweDAgMFgxNzAzMDAwMCAweDAgMFg0MDA+LAorCQkJICAgICAgPDB4MCAwWDE3MDMwMDAwIDB4MCAwWGMzMDA+LAogCQkJICAgICAgPDB4MCAwWDEwMDAwMDAwIDB4MCAwWDIwMD47CiAJCQlyZWctbmFtZXMgPSAiZW5ldF9jc3IiLCAicmluZ19jc3IiLCAicmluZ19jbWQiOwogCQkJaW50ZXJydXB0cyA9IDwweDAgMHgzYyAweDQ+OwpAQCAtNjI0LDkgKzYyNCw5IEBACiAJCXNnZW5ldDA6IGV0aGVybmV0QDFmMjEwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiYXBtLHhnZW5lLWVuZXQiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCXJlZyA9IDwweDAgMHgxZjIxMDAwMCAweDAgMHgxMDAwMD4sCi0JCQkgICAgICA8MHgwIDB4MWYyMDAwMDAgMHgwIDBYMTAwMDA+LAotCQkJICAgICAgPDB4MCAweDFCMDAwMDAwIDB4MCAwWDIwMDAwPjsKKwkJCXJlZyA9IDwweDAgMHgxZjIxMDAwMCAweDAgMHhkMTAwPiwKKwkJCSAgICAgIDwweDAgMHgxZjIwMDAwMCAweDAgMFhjMzAwPiwKKwkJCSAgICAgIDwweDAgMHgxQjAwMDAwMCAweDAgMFgyMDA+OwogCQkJcmVnLW5hbWVzID0gImVuZXRfY3NyIiwgInJpbmdfY3NyIiwgInJpbmdfY21kIjsKIAkJCWludGVycnVwdHMgPSA8MHgwIDB4QTAgMHg0PjsKIAkJCWRtYS1jb2hlcmVudDsKQEAgLTYzOSw3ICs2MzksNyBAQAogCQkJY29tcGF0aWJsZSA9ICJhcG0seGdlbmUtZW5ldCI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJcmVnID0gPDB4MCAweDFmNjEwMDAwIDB4MCAweGQxMDA+LAotCQkJICAgICAgPDB4MCAweDFmNjAwMDAwIDB4MCAwWDQwMD4sCisJCQkgICAgICA8MHgwIDB4MWY2MDAwMDAgMHgwIDBYYzMwMD4sCiAJCQkgICAgICA8MHgwIDB4MTgwMDAwMDAgMHgwIDBYMjAwPjsKIAkJCXJlZy1uYW1lcyA9ICJlbmV0X2NzciIsICJyaW5nX2NzciIsICJyaW5nX2NtZCI7CiAJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDYwIDB4ND47CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMWEwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKK2R0Yi0kKENPTkZJR19BUkNIX1ZFWFBSRVNTKSArPSBmb3VuZGF0aW9uLXY4LmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfVkVYUFJFU1MpICs9IGp1bm8uZHRiCitkdGItJChDT05GSUdfQVJDSF9WRVhQUkVTUykgKz0gcnRzbV92ZS1hZW12OGEuZHRiCisKK2Fsd2F5cwkJOj0gJChkdGIteSkKK3N1YmRpci15CTo9ICQoZHRzLWRpcnMpCitjbGVhbi1maWxlcwk6PSAqLmR0YgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9mb3VuZGF0aW9uLXY4LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2ZvdW5kYXRpb24tdjguZHRzCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvYXJtNjQvYm9vdC9kdHMvZm91bmRhdGlvbi12OC5kdHMKcmVuYW1lIHRvIGFyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2ZvdW5kYXRpb24tdjguZHRzCmluZGV4IDRhMDYwOTAuLjI3ZjMyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvZm91bmRhdGlvbi12OC5kdHMKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vZm91bmRhdGlvbi12OC5kdHMKQEAgLTc4LDEwICs3OCwxMCBAQAogCiAJdGltZXIgewogCQljb21wYXRpYmxlID0gImFybSxhcm12OC10aW1lciI7Ci0JCWludGVycnVwdHMgPSA8MSAxMyAweGZmMDE+LAotCQkJICAgICA8MSAxNCAweGZmMDE+LAotCQkJICAgICA8MSAxMSAweGZmMDE+LAotCQkJICAgICA8MSAxMCAweGZmMDE+OworCQlpbnRlcnJ1cHRzID0gPDEgMTMgMHhmMDg+LAorCQkJICAgICA8MSAxNCAweGYwOD4sCisJCQkgICAgIDwxIDExIDB4ZjA4PiwKKwkJCSAgICAgPDEgMTAgMHhmMDg+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLWNsb2Nrcy5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby1jbG9ja3MuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTJiNTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby1jbG9ja3MuZHRzaQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQVJNIEp1bm8gUGxhdGZvcm0gY2xvY2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgQVJNIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBhIGR1YWwgR1BMdjIgb3IgQlNEIGxpY2Vuc2UuCisgKgorICovCisKKwkvKiBTb0MgZml4ZWQgY2xvY2tzICovCisJc29jX3VhcnRjbGs6IHJlZmNsazcyNzM4a2h6IHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDcyNzM4MDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAianVubzp1YXJ0Y2xrIjsKKwl9OworCisJc29jX3VzYjQ4bWh6OiBjbGs0OG1oeiB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGs0OG1oeiI7CisJfTsKKworCXNvY19zbWM1MG1oejogY2xrNTBtaHogeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic21jX2NsayI7CisJfTsKKworCXNvY19yZWZjbGsxMDBtaHo6IHJlZmNsazEwMG1oeiB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXBiX3BjbGsiOworCX07CisKKwlzb2NfZmF4aWNsazogcmVmY2xrNTMzbWh6IHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDUzMzAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJmYXhpX2NsayI7CisJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2p1bm8tbW90aGVyYm9hcmQuZHRzaSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2p1bm8tbW90aGVyYm9hcmQuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTM4Yjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby1tb3RoZXJib2FyZC5kdHNpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQVJNIEp1bm8gUGxhdGZvcm0gbW90aGVyYm9hcmQgcGVyaXBoZXJhbHMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBBUk0gTHRkCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIGEgZHVhbCBHUEx2MiBvciBCU0QgbGljZW5zZS4KKyAqCisgKi8KKworCQltYl9jbGsyNG1oejogY2xrMjRtaHogeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjQwMDAwMDA+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImp1bm9fbWI6Y2xrMjRtaHoiOworCQl9OworCisJCW1iX2NsazI1bWh6OiBjbGsyNW1oeiB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAianVub19tYjpjbGsyNW1oeiI7CisJCX07CisKKwkJbW90aGVyYm9hcmQgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sdmV4cHJlc3MsdjJwLXAxIiwgInNpbXBsZS1idXMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47ICAvKiBTTUIgY2hpcHNlbGVjdCBudW1iZXIgYW5kIG9mZnNldCAqLworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJcmFuZ2VzOworCQkJbW9kZWwgPSAiVjJNLUp1bm8iOworCQkJYXJtLGhiaSA9IDwweDI1Mj47CisJCQlhcm0sdmV4cHJlc3Msc2l0ZSA9IDwwPjsKKwkJCWFybSx2Mm0tbWVtb3J5LW1hcCA9ICJyczEiOworCisJCQltYl9maXhlZF8zdjM6IGZpeGVkcmVndWxhdG9yQDAgeworCQkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJNQ0NfU0JfM1YzIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJZXRoZXJuZXRAMiwwMDAwMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkxMTgiLCAic21zYyxsYW45MTE1IjsKKwkJCQlyZWcgPSA8MiAweDAwMDAwMDAwIDB4MTAwMDA+OworCQkJCWludGVycnVwdHMgPSA8Mz47CisJCQkJcGh5LW1vZGUgPSAibWlpIjsKKwkJCQlyZWctaW8td2lkdGggPSA8ND47CisJCQkJc21zYyxpcnEtYWN0aXZlLWhpZ2g7CisJCQkJc21zYyxpcnEtcHVzaC1wdWxsOworCQkJCWNsb2NrcyA9IDwmbWJfY2xrMjVtaHo+OworCQkJCXZkZDMzYS1zdXBwbHkgPSA8Jm1iX2ZpeGVkXzN2Mz47CisJCQkJdmRkdmFyaW8tc3VwcGx5ID0gPCZtYl9maXhlZF8zdjM+OworCQkJfTsKKworCQkJdXNiQDUsMDAwMDAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibnhwLHVzYi1pc3AxNzYzIjsKKwkJCQlyZWcgPSA8NSAweDAwMDAwMDAwIDB4MjAwMDA+OworCQkJCWJ1cy13aWR0aCA9IDwxNj47CisJCQkJaW50ZXJydXB0cyA9IDw0PjsKKwkJCX07CisKKwkJCWlvZnBnYUAzLDAwMDAwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxhbWJhLWJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyYW5nZXMgPSA8MCAzIDAgMHgyMDAwMDA+OworCisJCQkJbW1jaUAwNTAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxwbDE4MCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MDUwMDAwIDB4MTAwMD47CisJCQkJCWludGVycnVwdHMgPSA8NT47CisJCQkJCS8qIGNkLWdwaW9zID0gPCZ2Mm1fbW1jX2dwaW9zIDAgMD47CisJCQkJCXdwLWdwaW9zID0gPCZ2Mm1fbW1jX2dwaW9zIDEgMD47ICovCisJCQkJCW1heC1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OworCQkJCQl2bW1jLXN1cHBseSA9IDwmbWJfZml4ZWRfM3YzPjsKKwkJCQkJY2xvY2tzID0gPCZtYl9jbGsyNG1oej4sIDwmc29jX3NtYzUwbWh6PjsKKwkJCQkJY2xvY2stbmFtZXMgPSAibWNsayIsICJhcGJfcGNsayI7CisJCQkJfTsKKworCQkJCWttaUAwNjAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxwbDA1MCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MDYwMDAwIDB4MTAwMD47CisJCQkJCWludGVycnVwdHMgPSA8OD47CisJCQkJCWNsb2NrcyA9IDwmbWJfY2xrMjRtaHo+LCA8JnNvY19zbWM1MG1oej47CisJCQkJCWNsb2NrLW5hbWVzID0gIktNSVJFRkNMSyIsICJhcGJfcGNsayI7CisJCQkJfTsKKworCQkJCWttaUAwNzAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxwbDA1MCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MDcwMDAwIDB4MTAwMD47CisJCQkJCWludGVycnVwdHMgPSA8OD47CisJCQkJCWNsb2NrcyA9IDwmbWJfY2xrMjRtaHo+LCA8JnNvY19zbWM1MG1oej47CisJCQkJCWNsb2NrLW5hbWVzID0gIktNSVJFRkNMSyIsICJhcGJfcGNsayI7CisJCQkJfTsKKworCQkJCXdkdEAwZjAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxzcDgwNSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MGYwMDAwIDB4MTAwMDA+OworCQkJCQlpbnRlcnJ1cHRzID0gPDc+OworCQkJCQljbG9ja3MgPSA8Jm1iX2NsazI0bWh6PiwgPCZzb2Nfc21jNTBtaHo+OworCQkJCQljbG9jay1uYW1lcyA9ICJ3ZG9nY2xrIiwgImFwYl9wY2xrIjsKKwkJCQl9OworCisJCQkJdjJtX3RpbWVyMDE6IHRpbWVyQDExMDAwMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXJtLHNwODA0IiwgImFybSxwcmltZWNlbGwiOworCQkJCQlyZWcgPSA8MHgxMTAwMDAgMHgxMDAwMD47CisJCQkJCWludGVycnVwdHMgPSA8OT47CisJCQkJCWNsb2NrcyA9IDwmbWJfY2xrMjRtaHo+LCA8JnNvY19zbWM1MG1oej47CisJCQkJCWNsb2NrLW5hbWVzID0gInRpbWNsa2VuMSIsICJhcGJfcGNsayI7CisJCQkJfTsKKworCQkJCXYybV90aW1lcjIzOiB0aW1lckAxMjAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxzcDgwNCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MTIwMDAwIDB4MTAwMDA+OworCQkJCQlpbnRlcnJ1cHRzID0gPDk+OworCQkJCQljbG9ja3MgPSA8Jm1iX2NsazI0bWh6PiwgPCZzb2Nfc21jNTBtaHo+OworCQkJCQljbG9jay1uYW1lcyA9ICJ0aW1jbGtlbjEiLCAiYXBiX3BjbGsiOworCQkJCX07CisKKwkJCQlydGNAMTcwMDAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMzEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJCXJlZyA9IDwweDE3MDAwMCAweDEwMDAwPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwwPjsKKwkJCQkJY2xvY2tzID0gPCZzb2Nfc21jNTBtaHo+OworCQkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJfTsKKwkJCX07CisJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2p1bm8uZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzA3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIEFSTSBMdGQuIEp1bm8gUGxhdGZvcm0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBBUk0gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBhIGR1YWwgR1BMdjIgb3IgQlNEIGxpY2Vuc2UuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisKKy8geworCW1vZGVsID0gIkFSTSBKdW5vIGRldmVsb3BtZW50IGJvYXJkIChyMCkiOworCWNvbXBhdGlibGUgPSAiYXJtLGp1bm8iLCAiYXJtLHZleHByZXNzIjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmc29jX3VhcnQwOworCX07CisKKwljaG9zZW4geworCQlzdGRvdXQtcGF0aCA9ICZzb2NfdWFydDA7CisJfTsKKworCXBzY2kgeworCQljb21wYXRpYmxlID0gImFybSxwc2NpLTAuMiI7CisJCW1ldGhvZCA9ICJzbWMiOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCUE1N18wOiBjcHVAMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTU3IiwiYXJtLGFybXY4IjsKKwkJCXJlZyA9IDwweDAgMHgwPjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQl9OworCisJCUE1N18xOiBjcHVAMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTU3IiwiYXJtLGFybXY4IjsKKwkJCXJlZyA9IDwweDAgMHgxPjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQl9OworCisJCUE1M18wOiBjcHVAMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiLCJhcm0sYXJtdjgiOworCQkJcmVnID0gPDB4MCAweDEwMD47CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJfTsKKworCQlBNTNfMTogY3B1QDEwMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIiwiYXJtLGFybXY4IjsKKwkJCXJlZyA9IDwweDAgMHgxMDE+OworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCX07CisKKwkJQTUzXzI6IGNwdUAxMDIgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyIsImFybSxhcm12OCI7CisJCQlyZWcgPSA8MHgwIDB4MTAyPjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQl9OworCisJCUE1M18zOiBjcHVAMTAzIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiLCJhcm0sYXJtdjgiOworCQkJcmVnID0gPDB4MCAweDEwMz47CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJfTsKKwl9OworCisJbWVtb3J5QDgwMDAwMDAwIHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJLyogbGFzdCAxNk1CIG9mIHRoZSBmaXJzdCBtZW1vcnkgYXJlYSBpcyByZXNlcnZlZCBmb3Igc2VjdXJlIHdvcmxkIHVzZSBieSBmaXJtd2FyZSAqLworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDdmMDAwMDAwPiwKKwkJICAgICAgPDB4MDAwMDAwMDggMHg4MDAwMDAwMCAweDEgMHg4MDAwMDAwMD47CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMmMwMDEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxnaWMtNDAwIiwgImFybSxjb3J0ZXgtYTE1LWdpYyI7CisJCXJlZyA9IDwweDAgMHgyYzAxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwweDAgMHgyYzAyZjAwMCAwIDB4MjAwMD4sCisJCSAgICAgIDwweDAgMHgyYzA0ZjAwMCAwIDB4MjAwMD4sCisJCSAgICAgIDwweDAgMHgyYzA2ZjAwMCAwIDB4MjAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDkgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKT47CisJfTsKKworCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtdGltZXIiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPEdJQ19QUEkgMTQgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPEdJQ19QUEkgMTEgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPEdJQ19QUEkgMTAgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPjsKKwl9OworCisJcG11IHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtcG11djMiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyNiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMzAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDAyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJL2luY2x1ZGUvICJqdW5vLWNsb2Nrcy5kdHNpIgorCisJZG1hQDdmZjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwzMzAiLCAiYXJtLHByaW1lY2VsbCI7CisJCXJlZyA9IDwweDAgMHg3ZmYwMDAwMCAwIDB4MTAwMD47CisJCSNkbWEtY2VsbHMgPSA8MT47CisJCSNkbWEtY2hhbm5lbHMgPSA8OD47CisJCSNkbWEtcmVxdWVzdHMgPSA8MzI+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDg5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSA5MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgOTEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMTA5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMTAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDExMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZzb2NfZmF4aWNsaz47CisJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwl9OworCisJc29jX3VhcnQwOiB1YXJ0QDdmZjgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwwMTEiLCAiYXJtLHByaW1lY2VsbCI7CisJCXJlZyA9IDwweDAgMHg3ZmY4MDAwMCAweDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDgzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnNvY191YXJ0Y2xrPiwgPCZzb2NfcmVmY2xrMTAwbWh6PjsKKwkJY2xvY2stbmFtZXMgPSAidWFydGNsayIsICJhcGJfcGNsayI7CisJfTsKKworCWkyY0A3ZmZhMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCXJlZyA9IDwweDAgMHg3ZmZhMDAwMCAweDAgMHgxMDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTA0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwkJaTJjLXNkYS1ob2xkLXRpbWUtbnMgPSA8NTAwPjsKKwkJY2xvY2tzID0gPCZzb2Nfc21jNTBtaHo+OworCisJCWR2aTA6IGR2aS10cmFuc21pdHRlckA3MCB7CisJCQljb21wYXRpYmxlID0gIm54cCx0ZGE5OTh4IjsKKwkJCXJlZyA9IDwweDcwPjsKKwkJfTsKKworCQlkdmkxOiBkdmktdHJhbnNtaXR0ZXJANzEgeworCQkJY29tcGF0aWJsZSA9ICJueHAsdGRhOTk4eCI7CisJCQlyZWcgPSA8MHg3MT47CisJCX07CisJfTsKKworCW9oY2lAN2ZmYjAwMDAgeworCQljb21wYXRpYmxlID0gImdlbmVyaWMtb2hjaSI7CisJCXJlZyA9IDwweDAgMHg3ZmZiMDAwMCAweDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmc29jX3VzYjQ4bWh6PjsKKwl9OworCisJZWhjaUA3ZmZjMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZ2VuZXJpYy1laGNpIjsKKwkJcmVnID0gPDB4MCAweDdmZmMwMDAwIDB4MCAweDEwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZzb2NfdXNiNDhtaHo+OworCX07CisKKwltZW1vcnktY29udHJvbGxlckA3ZmZkMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzU0IiwgImFybSxwcmltZWNlbGwiOworCQlyZWcgPSA8MCAweDdmZmQwMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSA4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZzb2Nfc21jNTBtaHo+OworCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJfTsKKworCXNtYiB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMCAwIDB4MDgwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDEgMCAwIDB4MTQwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDIgMCAwIDB4MTgwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDMgMCAwIDB4MWMwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDQgMCAwIDB4MGMwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDUgMCAwIDB4MTAwMDAwMDAgMHgwNDAwMDAwMD47CisKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAxNT47CisJCWludGVycnVwdC1tYXAgPSA8MCAwICAwICZnaWMgMCAgNjggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAgMSAmZ2ljIDAgIDY5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgIDIgJmdpYyAwICA3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwICAzICZnaWMgMCAxNjAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAgNCAmZ2ljIDAgMTYxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgIDUgJmdpYyAwIDE2MiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwICA2ICZnaWMgMCAxNjMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAgNyAmZ2ljIDAgMTY0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgIDggJmdpYyAwIDE2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwICA5ICZnaWMgMCAxNjYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAxMCAmZ2ljIDAgMTY3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgMTEgJmdpYyAwIDE2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwIDEyICZnaWMgMCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJL2luY2x1ZGUvICJqdW5vLW1vdGhlcmJvYXJkLmR0c2kiCisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3J0c21fdmUtYWVtdjhhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL3J0c21fdmUtYWVtdjhhLmR0cwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL3J0c21fdmUtYWVtdjhhLmR0cwpyZW5hbWUgdG8gYXJjaC9hcm02NC9ib290L2R0cy9hcm0vcnRzbV92ZS1hZW12OGEuZHRzCmluZGV4IDU3MjAwNWUuLmVmYzU5YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcnRzbV92ZS1hZW12OGEuZHRzCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL3J0c21fdmUtYWVtdjhhLmR0cwpAQCAtODEsMTAgKzgxLDEwIEBACiAKIAl0aW1lciB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY4LXRpbWVyIjsKLQkJaW50ZXJydXB0cyA9IDwxIDEzIDB4ZmYwMT4sCi0JCQkgICAgIDwxIDE0IDB4ZmYwMT4sCi0JCQkgICAgIDwxIDExIDB4ZmYwMT4sCi0JCQkgICAgIDwxIDEwIDB4ZmYwMT47CisJCWludGVycnVwdHMgPSA8MSAxMyAweGYwOD4sCisJCQkgICAgIDwxIDE0IDB4ZjA4PiwKKwkJCSAgICAgPDEgMTEgMHhmMDg+LAorCQkJICAgICA8MSAxMCAweGYwOD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcnRzbV92ZS1tb3RoZXJib2FyZC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vcnRzbV92ZS1tb3RoZXJib2FyZC5kdHNpCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL3J0c21fdmUtbW90aGVyYm9hcmQuZHRzaQpyZW5hbWUgdG8gYXJjaC9hcm02NC9ib290L2R0cy9hcm0vcnRzbV92ZS1tb3RoZXJib2FyZC5kdHNpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvY2F2aXVtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGY4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK2R0Yi0kKENPTkZJR19BUkNIX1RIVU5ERVIpICs9IHRodW5kZXItODh4eC5kdGIKKworYWx3YXlzCQk6PSAkKGR0Yi15KQorc3ViZGlyLXkJOj0gJChkdHMtZGlycykKK2NsZWFuLWZpbGVzCTo9ICouZHRiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3RodW5kZXItODh4eC5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS90aHVuZGVyLTg4eHguZHRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL3RodW5kZXItODh4eC5kdHMKcmVuYW1lIHRvIGFyY2gvYXJtNjQvYm9vdC9kdHMvY2F2aXVtL3RodW5kZXItODh4eC5kdHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvdGh1bmRlci04OHh4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS90aHVuZGVyLTg4eHguZHRzaQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm02NC9ib290L2R0cy90aHVuZGVyLTg4eHguZHRzaQpyZW5hbWUgdG8gYXJjaC9hcm02NC9ib290L2R0cy9jYXZpdW0vdGh1bmRlci04OHh4LmR0c2kKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvaW5jbHVkZS9kdC1iaW5kaW5ncyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvaW5jbHVkZS9kdC1iaW5kaW5ncwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4wOGMwMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9pbmNsdWRlL2R0LWJpbmRpbmdzCkBAIC0wLDAgKzEgQEAKKy4uLy4uLy4uLy4uLy4uL2luY2x1ZGUvZHQtYmluZGluZ3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnIGIvYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZwppbmRleCA0Y2U2MDJjLi5kZDMwMWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWcKQEAgLTM1LDYgKzM1LDkgQEAKIENPTkZJR19BUkNIX1RIVU5ERVI9eQogQ09ORklHX0FSQ0hfVkVYUFJFU1M9eQogQ09ORklHX0FSQ0hfWEdFTkU9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX01TST15CitDT05GSUdfUENJX1hHRU5FPXkKIENPTkZJR19TTVA9eQogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0tTTT15CkBAIC01Miw2ICs1NSw3IEBACiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0JQRl9KSVQ9eQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAogQ09ORklHX05FVF85UD15CiBDT05GSUdfTkVUXzlQX1ZJUlRJTz15CkBAIC02NSwxNiArNjksMTcgQEAKIENPTkZJR19CTEtfREVWX1NEPXkKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogQ09ORklHX0FUQT15CitDT05GSUdfU0FUQV9BSENJPXkKK0NPTkZJR19TQVRBX0FIQ0lfUExBVEZPUk09eQogQ09ORklHX0FIQ0lfWEdFTkU9eQotQ09ORklHX1BIWV9YR0VORT15CiBDT05GSUdfUEFUQV9QTEFURk9STT15CiBDT05GSUdfUEFUQV9PRl9QTEFURk9STT15CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfVFVOPXkKIENPTkZJR19WSVJUSU9fTkVUPXkKK0NPTkZJR19ORVRfWEdFTkU9eQogQ09ORklHX1NNQzkxWD15CiBDT05GSUdfU01TQzkxMVg9eQotQ09ORklHX05FVF9YR0VORT15CiAjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKQEAgLTg3LDYgKzkyLDExIEBACiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKIENPTkZJR19WSVJUSU9fQ09OU09MRT15CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfSE1DX0RSViBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfUEwwMjI9eQorQ09ORklHX0dQSU9fUEwwNjE9eQorQ09ORklHX0dQSU9fWEdFTkU9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15CiBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQpAQCAtOTcsMTMgKzEwNywyNSBAQAogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAogQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUExBVEZPUk09eQogQ09ORklHX1VTQl9JU1AxNzYwX0hDRD15CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk09eQogQ09ORklHX1VTQl9TVE9SQUdFPXkKK0NPTkZJR19VU0JfVUxQST15CiBDT05GSUdfTU1DPXkKIENPTkZJR19NTUNfQVJNTU1DST15CitDT05GSUdfTU1DX1NESENJPXkKK0NPTkZJR19NTUNfU0RIQ0lfUExURk09eQorQ09ORklHX01NQ19TUEk9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0RSVl9FRkk9eQorQ09ORklHX1JUQ19EUlZfWEdFTkU9eQogQ09ORklHX1ZJUlRJT19CQUxMT09OPXkKIENPTkZJR19WSVJUSU9fTU1JTz15CiAjIENPTkZJR19JT01NVV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlfWEdFTkU9eQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvY3J5cHRvL0tjb25maWcgYi9hcmNoL2FybTY0L2NyeXB0by9LY29uZmlnCmluZGV4IDU1NjI2NTIuLmEzOGIwMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvY3J5cHRvL0tjb25maWcKKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vS2NvbmZpZwpAQCAtMjcsMjAgKzI3LDE5IEBACiAJdHJpc3RhdGUgIkFFUyBjb3JlIGNpcGhlciB1c2luZyBBUk12OCBDcnlwdG8gRXh0ZW5zaW9ucyIKIAlkZXBlbmRzIG9uIEFSTTY0ICYmIEtFUk5FTF9NT0RFX05FT04KIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQotCXNlbGVjdCBDUllQVE9fQUVTCiAKIGNvbmZpZyBDUllQVE9fQUVTX0FSTTY0X0NFX0NDTQogCXRyaXN0YXRlICJBRVMgaW4gQ0NNIG1vZGUgdXNpbmcgQVJNdjggQ3J5cHRvIEV4dGVuc2lvbnMiCiAJZGVwZW5kcyBvbiBBUk02NCAmJiBLRVJORUxfTU9ERV9ORU9OCiAJc2VsZWN0IENSWVBUT19BTEdBUEkKLQlzZWxlY3QgQ1JZUFRPX0FFUworCXNlbGVjdCBDUllQVE9fQUVTX0FSTTY0X0NFCiAJc2VsZWN0IENSWVBUT19BRUFECiAKIGNvbmZpZyBDUllQVE9fQUVTX0FSTTY0X0NFX0JMSwogCXRyaXN0YXRlICJBRVMgaW4gRUNCL0NCQy9DVFIvWFRTIG1vZGVzIHVzaW5nIEFSTXY4IENyeXB0byBFeHRlbnNpb25zIgogCWRlcGVuZHMgb24gQVJNNjQgJiYgS0VSTkVMX01PREVfTkVPTgogCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCi0Jc2VsZWN0IENSWVBUT19BRVMKKwlzZWxlY3QgQ1JZUFRPX0FFU19BUk02NF9DRQogCXNlbGVjdCBDUllQVE9fQUJMS19IRUxQRVIKIAogY29uZmlnIENSWVBUT19BRVNfQVJNNjRfTkVPTl9CTEsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1jY20tZ2x1ZS5jIGIvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLWNjbS1nbHVlLmMKaW5kZXggOWU2Y2RkZTkuLjBhYzczYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1jY20tZ2x1ZS5jCisrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1jY20tZ2x1ZS5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKKyNpbmNsdWRlICJhZXMtY2Utc2V0a2V5LmgiCisKIHN0YXRpYyBpbnQgbnVtX3JvdW5kcyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCkKIHsKIAkvKgpAQCAtNDgsNyArNTAsNyBAQAogCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHRmbSk7CiAJaW50IHJldDsKIAotCXJldCA9IGNyeXB0b19hZXNfZXhwYW5kX2tleShjdHgsIGluX2tleSwga2V5X2xlbik7CisJcmV0ID0gY2VfYWVzX2V4cGFuZGtleShjdHgsIGluX2tleSwga2V5X2xlbik7CiAJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2lwaGVyLmMgYi9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2lwaGVyLmMKaW5kZXggMjA3NWUxYS4uY2U0Nzc5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLWNpcGhlci5jCisrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1jaXBoZXIuYwpAQCAtMTQsNiArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCisjaW5jbHVkZSAiYWVzLWNlLXNldGtleS5oIgorCiBNT0RVTEVfREVTQ1JJUFRJT04oIlN5bmNocm9ub3VzIEFFUyBjaXBoZXIgdXNpbmcgQVJNdjggQ3J5cHRvIEV4dGVuc2lvbnMiKTsKIE1PRFVMRV9BVVRIT1IoIkFyZCBCaWVzaGV1dmVsIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpAQCAtMTI0LDYgKzEyNiwxMTQgQEAKIAlrZXJuZWxfbmVvbl9lbmQoKTsKIH0KIAorLyoKKyAqIGFlc19zdWIoKSAtIHVzZSB0aGUgYWVzZSBpbnN0cnVjdGlvbiB0byBwZXJmb3JtIHRoZSBBRVMgc2JveCBzdWJzdGl0dXRpb24KKyAqICAgICAgICAgICAgIG9uIGVhY2ggYnl0ZSBpbiAnaW5wdXQnCisgKi8KK3N0YXRpYyB1MzIgYWVzX3N1Yih1MzIgaW5wdXQpCit7CisJdTMyIHJldDsKKworCV9fYXNtX18oImR1cAl2MS40cywgJXdbaW5dCQk7IgorCQkibW92aQl2MC4xNmIsICMwCQk7IgorCQkiYWVzZQl2MC4xNmIsIHYxLjE2YgkJOyIKKwkJInVtb3YJJXdbb3V0XSwgdjAuNHNbMF0JOyIKKworCToJW291dF0JIj1yIihyZXQpCisJOglbaW5dCSJyIihpbnB1dCkKKwk6CQkidjAiLCJ2MSIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGNlX2Flc19leHBhbmRrZXkoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksCisJCSAgICAgdW5zaWduZWQgaW50IGtleV9sZW4pCit7CisJLyoKKwkgKiBUaGUgQUVTIGtleSBzY2hlZHVsZSByb3VuZCBjb25zdGFudHMKKwkgKi8KKwlzdGF0aWMgdTggY29uc3QgcmNvbltdID0geworCQkweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2LAorCX07CisKKwl1MzIga3dvcmRzID0ga2V5X2xlbiAvIHNpemVvZih1MzIpOworCXN0cnVjdCBhZXNfYmxvY2sgKmtleV9lbmMsICprZXlfZGVjOworCWludCBpLCBqOworCisJaWYgKGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMTI4ICYmCisJICAgIGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMTkyICYmCisJICAgIGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMjU2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShjdHgtPmtleV9lbmMsIGluX2tleSwga2V5X2xlbik7CisJY3R4LT5rZXlfbGVuZ3RoID0ga2V5X2xlbjsKKworCWtlcm5lbF9uZW9uX2JlZ2luX3BhcnRpYWwoMik7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihyY29uKTsgaSsrKSB7CisJCXUzMiAqcmtpID0gY3R4LT5rZXlfZW5jICsgKGkgKiBrd29yZHMpOworCQl1MzIgKnJrbyA9IHJraSArIGt3b3JkczsKKworCQlya29bMF0gPSByb3IzMihhZXNfc3ViKHJraVtrd29yZHMgLSAxXSksIDgpIF4gcmNvbltpXSBeIHJraVswXTsKKwkJcmtvWzFdID0gcmtvWzBdIF4gcmtpWzFdOworCQlya29bMl0gPSBya29bMV0gXiBya2lbMl07CisJCXJrb1szXSA9IHJrb1syXSBeIHJraVszXTsKKworCQlpZiAoa2V5X2xlbiA9PSBBRVNfS0VZU0laRV8xOTIpIHsKKwkJCWlmIChpID49IDcpCisJCQkJYnJlYWs7CisJCQlya29bNF0gPSBya29bM10gXiBya2lbNF07CisJCQlya29bNV0gPSBya29bNF0gXiBya2lbNV07CisJCX0gZWxzZSBpZiAoa2V5X2xlbiA9PSBBRVNfS0VZU0laRV8yNTYpIHsKKwkJCWlmIChpID49IDYpCisJCQkJYnJlYWs7CisJCQlya29bNF0gPSBhZXNfc3ViKHJrb1szXSkgXiBya2lbNF07CisJCQlya29bNV0gPSBya29bNF0gXiBya2lbNV07CisJCQlya29bNl0gPSBya29bNV0gXiBya2lbNl07CisJCQlya29bN10gPSBya29bNl0gXiBya2lbN107CisJCX0KKwl9CisKKwkvKgorCSAqIEdlbmVyYXRlIHRoZSBkZWNyeXB0aW9uIGtleXMgZm9yIHRoZSBFcXVpdmFsZW50IEludmVyc2UgQ2lwaGVyLgorCSAqIFRoaXMgaW52b2x2ZXMgcmV2ZXJzaW5nIHRoZSBvcmRlciBvZiB0aGUgcm91bmQga2V5cywgYW5kIGFwcGx5aW5nCisJICogdGhlIEludmVyc2UgTWl4IENvbHVtbnMgdHJhbnNmb3JtYXRpb24gb24gYWxsIGJ1dCB0aGUgZmlyc3QgYW5kCisJICogdGhlIGxhc3Qgb25lLgorCSAqLworCWtleV9lbmMgPSAoc3RydWN0IGFlc19ibG9jayAqKWN0eC0+a2V5X2VuYzsKKwlrZXlfZGVjID0gKHN0cnVjdCBhZXNfYmxvY2sgKiljdHgtPmtleV9kZWM7CisJaiA9IG51bV9yb3VuZHMoY3R4KTsKKworCWtleV9kZWNbMF0gPSBrZXlfZW5jW2pdOworCWZvciAoaSA9IDEsIGotLTsgaiA+IDA7IGkrKywgai0tKQorCQlfX2FzbV9fKCJsZDEJe3YwLjE2Yn0sICVbaW5dCQk7IgorCQkJImFlc2ltYwl2MS4xNmIsIHYwLjE2YgkJOyIKKwkJCSJzdDEJe3YxLjE2Yn0sICVbb3V0XQk7IgorCisJCToJW291dF0JIj1RIihrZXlfZGVjW2ldKQorCQk6CVtpbl0JIlEiKGtleV9lbmNbal0pCisJCToJCSJ2MCIsInYxIik7CisJa2V5X2RlY1tpXSA9IGtleV9lbmNbMF07CisKKwlrZXJuZWxfbmVvbl9lbmQoKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2VfYWVzX2V4cGFuZGtleSk7CisKK2ludCBjZV9hZXNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCisJCSAgdW5zaWduZWQgaW50IGtleV9sZW4pCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCWludCByZXQ7CisKKwlyZXQgPSBjZV9hZXNfZXhwYW5ka2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwl0Zm0tPmNydF9mbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0woY2VfYWVzX3NldGtleSk7CisKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhZXNfYWxnID0gewogCS5jcmFfbmFtZQkJPSAiYWVzIiwKIAkuY3JhX2RyaXZlcl9uYW1lCT0gImFlcy1jZSIsCkBAIC0xMzUsNyArMjQ1LDcgQEAKIAkuY3JhX2NpcGhlciA9IHsKIAkJLmNpYV9taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCiAJCS5jaWFfbWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAotCQkuY2lhX3NldGtleQkJPSBjcnlwdG9fYWVzX3NldF9rZXksCisJCS5jaWFfc2V0a2V5CQk9IGNlX2Flc19zZXRrZXksCiAJCS5jaWFfZW5jcnlwdAkJPSBhZXNfY2lwaGVyX2VuY3J5cHQsCiAJCS5jaWFfZGVjcnlwdAkJPSBhZXNfY2lwaGVyX2RlY3J5cHQKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2Utc2V0a2V5LmggYi9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2Utc2V0a2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4YTY0NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1zZXRrZXkuaApAQCAtMCwwICsxLDUgQEAKKworaW50IGNlX2Flc19zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKKwkJICB1bnNpZ25lZCBpbnQga2V5X2xlbik7CitpbnQgY2VfYWVzX2V4cGFuZGtleShzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmluX2tleSwKKwkJICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbik7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2NyeXB0by9hZXMtZ2x1ZS5jIGIvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWdsdWUuYwppbmRleCA3OWNkOTExLi44MDFhYWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2NyeXB0by9hZXMtZ2x1ZS5jCisrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1nbHVlLmMKQEAgLTE2LDkgKzE2LDEzIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZmVhdHVyZS5oPgogCisjaW5jbHVkZSAiYWVzLWNlLXNldGtleS5oIgorCiAjaWZkZWYgVVNFX1Y4X0NSWVBUT19FWFRFTlNJT05TCiAjZGVmaW5lIE1PREUJCQkiY2UiCiAjZGVmaW5lIFBSSU8JCQkzMDAKKyNkZWZpbmUgYWVzX3NldGtleQkJY2VfYWVzX3NldGtleQorI2RlZmluZSBhZXNfZXhwYW5ka2V5CQljZV9hZXNfZXhwYW5ka2V5CiAjZGVmaW5lIGFlc19lY2JfZW5jcnlwdAkJY2VfYWVzX2VjYl9lbmNyeXB0CiAjZGVmaW5lIGFlc19lY2JfZGVjcnlwdAkJY2VfYWVzX2VjYl9kZWNyeXB0CiAjZGVmaW5lIGFlc19jYmNfZW5jcnlwdAkJY2VfYWVzX2NiY19lbmNyeXB0CkBAIC0zMCw2ICszNCw4IEBACiAjZWxzZQogI2RlZmluZSBNT0RFCQkJIm5lb24iCiAjZGVmaW5lIFBSSU8JCQkyMDAKKyNkZWZpbmUgYWVzX3NldGtleQkJY3J5cHRvX2Flc19zZXRfa2V5CisjZGVmaW5lIGFlc19leHBhbmRrZXkJCWNyeXB0b19hZXNfZXhwYW5kX2tleQogI2RlZmluZSBhZXNfZWNiX2VuY3J5cHQJCW5lb25fYWVzX2VjYl9lbmNyeXB0CiAjZGVmaW5lIGFlc19lY2JfZGVjcnlwdAkJbmVvbl9hZXNfZWNiX2RlY3J5cHQKICNkZWZpbmUgYWVzX2NiY19lbmNyeXB0CQluZW9uX2Flc19jYmNfZW5jcnlwdApAQCAtNzksMTAgKzg1LDEwIEBACiAJc3RydWN0IGNyeXB0b19hZXNfeHRzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gY3J5cHRvX2Flc19leHBhbmRfa2V5KCZjdHgtPmtleTEsIGluX2tleSwga2V5X2xlbiAvIDIpOworCXJldCA9IGFlc19leHBhbmRrZXkoJmN0eC0+a2V5MSwgaW5fa2V5LCBrZXlfbGVuIC8gMik7CiAJaWYgKCFyZXQpCi0JCXJldCA9IGNyeXB0b19hZXNfZXhwYW5kX2tleSgmY3R4LT5rZXkyLCAmaW5fa2V5W2tleV9sZW4gLyAyXSwKLQkJCQkJICAgIGtleV9sZW4gLyAyKTsKKwkJcmV0ID0gYWVzX2V4cGFuZGtleSgmY3R4LT5rZXkyLCAmaW5fa2V5W2tleV9sZW4gLyAyXSwKKwkJCQkgICAga2V5X2xlbiAvIDIpOwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIApAQCAtMjg4LDcgKzI5NCw3IEBACiAJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCiAJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCiAJCS5pdnNpemUJCT0gQUVTX0JMT0NLX1NJWkUsCi0JCS5zZXRrZXkJCT0gY3J5cHRvX2Flc19zZXRfa2V5LAorCQkuc2V0a2V5CQk9IGFlc19zZXRrZXksCiAJCS5lbmNyeXB0CT0gZWNiX2VuY3J5cHQsCiAJCS5kZWNyeXB0CT0gZWNiX2RlY3J5cHQsCiAJfSwKQEAgLTMwNiw3ICszMTIsNyBAQAogCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAogCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAogCQkuaXZzaXplCQk9IEFFU19CTE9DS19TSVpFLAotCQkuc2V0a2V5CQk9IGNyeXB0b19hZXNfc2V0X2tleSwKKwkJLnNldGtleQkJPSBhZXNfc2V0a2V5LAogCQkuZW5jcnlwdAk9IGNiY19lbmNyeXB0LAogCQkuZGVjcnlwdAk9IGNiY19kZWNyeXB0LAogCX0sCkBAIC0zMjQsNyArMzMwLDcgQEAKIAkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKIAkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKIAkJLml2c2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKLQkJLnNldGtleQkJPSBjcnlwdG9fYWVzX3NldF9rZXksCisJCS5zZXRrZXkJCT0gYWVzX3NldGtleSwKIAkJLmVuY3J5cHQJPSBjdHJfZW5jcnlwdCwKIAkJLmRlY3J5cHQJPSBjdHJfZW5jcnlwdCwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5YTY3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfX0FTTV9BTFRFUk5BVElWRV9BU01fSAorI2RlZmluZSBfX0FTTV9BTFRFUk5BVElWRV9BU01fSAorCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKy5tYWNybyBhbHRpbnN0cnVjdGlvbl9lbnRyeSBvcmlnX29mZnNldCBhbHRfb2Zmc2V0IGZlYXR1cmUgb3JpZ19sZW4gYWx0X2xlbgorCS53b3JkIFxvcmlnX29mZnNldCAtIC4KKwkud29yZCBcYWx0X29mZnNldCAtIC4KKwkuaHdvcmQgXGZlYXR1cmUKKwkuYnl0ZSBcb3JpZ19sZW4KKwkuYnl0ZSBcYWx0X2xlbgorLmVuZG0KKworLm1hY3JvIGFsdGVybmF0aXZlX2luc24gaW5zbjEgaW5zbjIgY2FwCis2NjE6CVxpbnNuMQorNjYyOgkucHVzaHNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywgImEiCisJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgNjYxYiwgNjYzZiwgXGNhcCwgNjYyYi02NjFiLCA2NjRmLTY2M2YKKwkucG9wc2VjdGlvbgorCS5wdXNoc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIKKzY2MzoJXGluc24yCis2NjQ6CS5wb3BzZWN0aW9uCisJLmlmICgoNjY0Yi02NjNiKSAhPSAoNjYyYi02NjFiKSkKKwkJLmVycm9yICJBbHRlcm5hdGl2ZXMgaW5zdHJ1Y3Rpb24gbGVuZ3RoIG1pc21hdGNoIgorCS5lbmRpZgorLmVuZG0KKworI2VuZGlmICAvKiAgX19BU1NFTUJMWV9fICAqLworCisjZW5kaWYgLyogX19BU01fQUxURVJOQVRJVkVfQVNNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjYxZjAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgX19BU01fQUxURVJOQVRJVkVfSAorI2RlZmluZSBfX0FTTV9BTFRFUk5BVElWRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorCitzdHJ1Y3QgYWx0X2luc3RyIHsKKwlzMzIgb3JpZ19vZmZzZXQ7CS8qIG9mZnNldCB0byBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLworCXMzMiBhbHRfb2Zmc2V0OwkJLyogb2Zmc2V0IHRvIHJlcGxhY2VtZW50IGluc3RydWN0aW9uICovCisJdTE2IGNwdWZlYXR1cmU7CQkvKiBjcHVmZWF0dXJlIGJpdCBzZXQgZm9yIHJlcGxhY2VtZW50ICovCisJdTggIG9yaWdfbGVuOwkJLyogc2l6ZSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbihzKSAqLworCXU4ICBhbHRfbGVuOwkJLyogc2l6ZSBvZiBuZXcgaW5zdHJ1Y3Rpb24ocyksIDw9IG9yaWdfbGVuICovCit9OworCit2b2lkIGFwcGx5X2FsdGVybmF0aXZlc19hbGwodm9pZCk7Cit2b2lkIGFwcGx5X2FsdGVybmF0aXZlcyh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCk7Cit2b2lkIGZyZWVfYWx0ZXJuYXRpdmVzX21lbW9yeSh2b2lkKTsKKworI2RlZmluZSBBTFRJTlNUUl9FTlRSWShmZWF0dXJlKQkJCQkJCSAgICAgIFwKKwkiIC53b3JkIDY2MWIgLSAuXG4iCQkJCS8qIGxhYmVsICAgICAgICAgICAqLyBcCisJIiAud29yZCA2NjNmIC0gLlxuIgkJCQkvKiBuZXcgaW5zdHJ1Y3Rpb24gKi8gXAorCSIgLmh3b3JkICIgX19zdHJpbmdpZnkoZmVhdHVyZSkgIlxuIgkJLyogZmVhdHVyZSBiaXQgICAgICovIFwKKwkiIC5ieXRlIDY2MmItNjYxYlxuIgkJCQkvKiBzb3VyY2UgbGVuICAgICAgKi8gXAorCSIgLmJ5dGUgNjY0Zi02NjNmXG4iCQkJCS8qIHJlcGxhY2VtZW50IGxlbiAqLworCisvKiBhbHRlcm5hdGl2ZSBhc3NlbWJseSBwcmltaXRpdmU6ICovCisjZGVmaW5lIEFMVEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSkJCQlcCisJIjY2MTpcblx0IgkJCQkJCQlcCisJb2xkaW5zdHIgIlxuIgkJCQkJCQlcCisJIjY2MjpcbiIJCQkJCQkJXAorCSIucHVzaHNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIgkJCQlcCisJQUxUSU5TVFJfRU5UUlkoZmVhdHVyZSkJCQkJCQlcCisJIi5wb3BzZWN0aW9uXG4iCQkJCQkJCVwKKwkiLnB1c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgXCJhXCJcbiIJCQlcCisJIjY2Mzpcblx0IgkJCQkJCQlcCisJbmV3aW5zdHIgIlxuIgkJCQkJCQlcCisJIjY2NDpcblx0IgkJCQkJCQlcCisJIi5wb3BzZWN0aW9uXG5cdCIJCQkJCQlcCisJIi5pZiAoKDY2NGItNjYzYikgIT0gKDY2MmItNjYxYikpXG5cdCIJCQkJXAorCSIJLmVycm9yIFwiQWx0ZXJuYXRpdmVzIGluc3RydWN0aW9uIGxlbmd0aCBtaXNtYXRjaFwiXG5cdCJcCisJIi5lbmRpZlxuIgorCisjZW5kaWYgLyogX19BU01fQUxURVJOQVRJVkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaAppbmRleCBmMTkwOTcxLi5iMWZhNGU2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaApAQCAtMTA0LDYgKzEwNCwxNSBAQAogCWFzbSB2b2xhdGlsZSgibXNyCWNudGtjdGxfZWwxLCAlMCIgOiA6ICJyIiAoY250a2N0bCkpOwogfQogCitzdGF0aWMgaW5saW5lIHU2NCBhcmNoX2NvdW50ZXJfZ2V0X2NudHBjdCh2b2lkKQoreworCS8qCisJICogQUFyY2g2NCBrZXJuZWwgYW5kIHVzZXIgc3BhY2UgbWFuZGF0ZSB0aGUgdXNlIG9mIENOVFZDVC4KKwkgKi8KKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB1NjQgYXJjaF9jb3VudGVyX2dldF9jbnR2Y3Qodm9pZCkKIHsKIAl1NjQgY3ZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCA4OGNjMDViLi5iZGU0NDk5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0zMiw2ICszMiw4IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNkZWZpbmUgX19yZWFkX21vc3RseSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuLnJlYWRfbW9zdGx5IikpKQorCiBzdGF0aWMgaW5saW5lIGludCBjYWNoZV9saW5lX3NpemUodm9pZCkKIHsKIAl1MzIgY3dnID0gY2FjaGVfdHlwZV9jd2coKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggNjg5YjYzNy4uN2FlMzFhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTczLDcgKzczLDcgQEAKIGV4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3QgbGVuKTsKLWV4dGVybiB2b2lkIF9fZmx1c2hfY2FjaGVfdXNlcl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gbG9uZyBfX2ZsdXNoX2NhY2hlX3VzZXJfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NtcHhjaGcuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY21weGNoZy5oCmluZGV4IGRkYjlkNzguLmNiOTU5MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY21weGNoZy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY21weGNoZy5oCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIF9fQVNNX0NNUFhDSEdfSAogCiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvbW1kZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIApAQCAtMTUyLDYgKzE1Myw1MSBAQAogCXJldHVybiBvbGR2YWw7CiB9CiAKKyNkZWZpbmUgc3lzdGVtX2hhc19jbXB4Y2hnX2RvdWJsZSgpICAgICAxCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY21weGNoZ19kb3VibGUodm9sYXRpbGUgdm9pZCAqcHRyMSwgdm9sYXRpbGUgdm9pZCAqcHRyMiwKKwkJdW5zaWduZWQgbG9uZyBvbGQxLCB1bnNpZ25lZCBsb25nIG9sZDIsCisJCXVuc2lnbmVkIGxvbmcgbmV3MSwgdW5zaWduZWQgbG9uZyBuZXcyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvb3AsIGxvc3Q7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDg6CisJCVZNX0JVR19PTigodW5zaWduZWQgbG9uZyAqKXB0cjIgLSAodW5zaWduZWQgbG9uZyAqKXB0cjEgIT0gMSk7CisJCWRvIHsKKwkJCWFzbSB2b2xhdGlsZSgiLy8gX19jbXB4Y2hnX2RvdWJsZThcbiIKKwkJCSIJbGR4cAklMCwgJTEsICUyXG4iCisJCQkiCWVvcgklMCwgJTAsICUzXG4iCisJCQkiCWVvcgklMSwgJTEsICU0XG4iCisJCQkiCW9ycgklMSwgJTAsICUxXG4iCisJCQkiCW1vdgkldzAsICMwXG4iCisJCQkiCWNibnoJJTEsIDFmXG4iCisJCQkiCXN0eHAJJXcwLCAlNSwgJTYsICUyXG4iCisJCQkiMTpcbiIKKwkJCQk6ICI9JnIiKGxvb3ApLCAiPSZyIihsb3N0KSwgIitRIiAoKih1NjQgKilwdHIxKQorCQkJCTogInIiIChvbGQxKSwgInIiKG9sZDIpLCAiciIobmV3MSksICJyIihuZXcyKSk7CisJCX0gd2hpbGUgKGxvb3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUlMRF9CVUcoKTsKKwl9CisKKwlyZXR1cm4gIWxvc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY21weGNoZ19kb3VibGVfbWIodm9sYXRpbGUgdm9pZCAqcHRyMSwgdm9sYXRpbGUgdm9pZCAqcHRyMiwKKwkJCXVuc2lnbmVkIGxvbmcgb2xkMSwgdW5zaWduZWQgbG9uZyBvbGQyLAorCQkJdW5zaWduZWQgbG9uZyBuZXcxLCB1bnNpZ25lZCBsb25nIG5ldzIsIGludCBzaXplKQoreworCWludCByZXQ7CisKKwlzbXBfbWIoKTsKKwlyZXQgPSBfX2NtcHhjaGdfZG91YmxlKHB0cjEsIHB0cjIsIG9sZDEsIG9sZDIsIG5ldzEsIG5ldzIsIHNpemUpOworCXNtcF9tYigpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ19tYih2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLAogCQkJCQkgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQogewpAQCAtMTgyLDYgKzIyOCwzMyBAQAogCV9fcmV0OyBcCiB9KQogCisjZGVmaW5lIGNtcHhjaGdfZG91YmxlKHB0cjEsIHB0cjIsIG8xLCBvMiwgbjEsIG4yKSBcCisoe1wKKwlpbnQgX19yZXQ7XAorCV9fcmV0ID0gX19jbXB4Y2hnX2RvdWJsZV9tYigocHRyMSksIChwdHIyKSwgKHVuc2lnbmVkIGxvbmcpKG8xKSwgXAorCQkJKHVuc2lnbmVkIGxvbmcpKG8yKSwgKHVuc2lnbmVkIGxvbmcpKG4xKSwgXAorCQkJKHVuc2lnbmVkIGxvbmcpKG4yKSwgc2l6ZW9mKCoocHRyMSkpKTtcCisJX19yZXQ7IFwKK30pCisKKyNkZWZpbmUgY21weGNoZ19kb3VibGVfbG9jYWwocHRyMSwgcHRyMiwgbzEsIG8yLCBuMSwgbjIpIFwKKyh7XAorCWludCBfX3JldDtcCisJX19yZXQgPSBfX2NtcHhjaGdfZG91YmxlKChwdHIxKSwgKHB0cjIpLCAodW5zaWduZWQgbG9uZykobzEpLCBcCisJCQkodW5zaWduZWQgbG9uZykobzIpLCAodW5zaWduZWQgbG9uZykobjEpLCBcCisJCQkodW5zaWduZWQgbG9uZykobjIpLCBzaXplb2YoKihwdHIxKSkpO1wKKwlfX3JldDsgXAorfSkKKworI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzEocHRyLCBvLCBuKSBjbXB4Y2hnX2xvY2FsKHJhd19jcHVfcHRyKCYocHRyKSksIG8sIG4pCisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMihwdHIsIG8sIG4pIGNtcHhjaGdfbG9jYWwocmF3X2NwdV9wdHIoJihwdHIpKSwgbywgbikKKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ180KHB0ciwgbywgbikgY21weGNoZ19sb2NhbChyYXdfY3B1X3B0cigmKHB0cikpLCBvLCBuKQorI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzgocHRyLCBvLCBuKSBjbXB4Y2hnX2xvY2FsKHJhd19jcHVfcHRyKCYocHRyKSksIG8sIG4pCisKKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ19kb3VibGVfOChwdHIxLCBwdHIyLCBvMSwgbzIsIG4xLCBuMikgXAorCWNtcHhjaGdfZG91YmxlX2xvY2FsKHJhd19jcHVfcHRyKCYocHRyMSkpLCByYXdfY3B1X3B0cigmKHB0cjIpKSwgXAorCQkJCW8xLCBvMiwgbjEsIG4yKQorCiAjZGVmaW5lIGNtcHhjaGc2NChwdHIsbyxuKQkJY21weGNoZygocHRyKSwobyksKG4pKQogI2RlZmluZSBjbXB4Y2hnNjRfbG9jYWwocHRyLG8sbikJY21weGNoZ19sb2NhbCgocHRyKSwobyksKG4pKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NvbXBhdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jb21wYXQuaAppbmRleCA1NmRlNWFhLi4zZmIwNTNmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NvbXBhdC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY29tcGF0LmgKQEAgLTIwNSw2ICsyMDUsMTMgQEAKIAkJCWNvbXBhdF9sb25nX3QgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAqLwogCQkJaW50IF9mZDsKIAkJfSBfc2lncG9sbDsKKworCQkvKiBTSUdTWVMgKi8KKwkJc3RydWN0IHsKKwkJCWNvbXBhdF91cHRyX3QgX2NhbGxfYWRkcjsgLyogY2FsbGluZyB1c2VyIGluc24gKi8KKwkJCWludCBfc3lzY2FsbDsJLyogdHJpZ2dlcmluZyBzeXN0ZW0gY2FsbCBudW1iZXIgKi8KKwkJCWNvbXBhdF91aW50X3QgX2FyY2g7CS8qIEFVRElUX0FSQ0hfKiBvZiBzeXNjYWxsICovCisJCX0gX3NpZ3N5czsKIAl9IF9zaWZpZWxkczsKIH0gY29tcGF0X3NpZ2luZm9fdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggMDU2NDQzMC4uYWNlNzA2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0zMCw2ICszMCw4IEBACiAJdTMyCQlyZWdfZGN6aWQ7CiAJdTMyCQlyZWdfbWlkcjsKIAorCXU2NAkJcmVnX2lkX2FhNjRkZnIwOworCXU2NAkJcmVnX2lkX2FhNjRkZnIxOwogCXU2NAkJcmVnX2lkX2FhNjRpc2FyMDsKIAl1NjQJCXJlZ19pZF9hYTY0aXNhcjE7CiAJdTY0CQlyZWdfaWRfYWE2NG1tZnIwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCBjZDRhYzA1Li4wNzU0N2NjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMjEsOSArMjEsMzggQEAKICNkZWZpbmUgTUFYX0NQVV9GRUFUVVJFUwkoOCAqIHNpemVvZihlbGZfaHdjYXApKQogI2RlZmluZSBjcHVfZmVhdHVyZSh4KQkJaWxvZzIoSFdDQVBfICMjIHgpCiAKKyNkZWZpbmUgQVJNNjRfV09SS0FST1VORF9DTEVBTl9DQUNIRQkJMAorI2RlZmluZSBBUk02NF9XT1JLQVJPVU5EX0RFVklDRV9MT0FEX0FDUVVJUkUJMQorCisjZGVmaW5lIEFSTTY0X05DQVBTCQkJCTIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJuIERFQ0xBUkVfQklUTUFQKGNwdV9od2NhcHMsIEFSTTY0X05DQVBTKTsKKwogc3RhdGljIGlubGluZSBib29sIGNwdV9oYXZlX2ZlYXR1cmUodW5zaWduZWQgaW50IG51bSkKIHsKIAlyZXR1cm4gZWxmX2h3Y2FwICYgKDFVTCA8PCBudW0pOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1c19oYXZlX2NhcCh1bnNpZ25lZCBpbnQgbnVtKQoreworCWlmIChudW0gPj0gQVJNNjRfTkNBUFMpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdGVzdF9iaXQobnVtLCBjcHVfaHdjYXBzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNwdXNfc2V0X2NhcCh1bnNpZ25lZCBpbnQgbnVtKQoreworCWlmIChudW0gPj0gQVJNNjRfTkNBUFMpCisJCXByX3dhcm4oIkF0dGVtcHQgdG8gc2V0IGFuIGlsbGVnYWwgQ1BVIGNhcGFiaWxpdHkgKCVkID49ICVkKVxuIiwKKwkJCW51bSwgQVJNNjRfTkNBUFMpOworCWVsc2UKKwkJX19zZXRfYml0KG51bSwgY3B1X2h3Y2Fwcyk7Cit9CisKK3ZvaWQgY2hlY2tfbG9jYWxfY3B1X2VycmF0YSh2b2lkKTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1dHlwZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKaW5kZXggMzc5ZDBiOC4uOGFkYjk4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKQEAgLTU3LDYgKzU3LDExIEBACiAjZGVmaW5lIE1JRFJfSU1QTEVNRU5UT1IobWlkcikJXAogCSgoKG1pZHIpICYgTUlEUl9JTVBMRU1FTlRPUl9NQVNLKSA+PiBNSURSX0lNUExFTUVOVE9SX1NISUZUKQogCisjZGVmaW5lIE1JRFJfQ1BVX1BBUlQoaW1wLCBwYXJ0bnVtKSBcCisJKCgoaW1wKQkJCTw8IE1JRFJfSU1QTEVNRU5UT1JfU0hJRlQpIHwgXAorCSgweGYJCQk8PCBNSURSX0FSQ0hJVEVDVFVSRV9TSElGVCkgfCBcCisJKChwYXJ0bnVtKQkJPDwgTUlEUl9QQVJUTlVNX1NISUZUKSkKKwogI2RlZmluZSBBUk1fQ1BVX0lNUF9BUk0JCTB4NDEKICNkZWZpbmUgQVJNX0NQVV9JTVBfQVBNCQkweDUwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZG1pLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDM3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtaS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtaS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkLgorICogV3JpdHRlbiBieTogWWkgTGkgKHlpLmxpQGxpbmFyby5vcmcpCisgKgorICogYmFzZWQgb24gYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RtaS5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9ETUlfSAorI2RlZmluZSBfX0FTTV9ETUlfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKy8qCisgKiBBY2NvcmRpbmcgdG8gc2VjdGlvbiAyLjMuNiBvZiB0aGUgVUVGSSBzcGVjLCB0aGUgZmlybXdhcmUgc2hvdWxkIG5vdAorICogcmVxdWVzdCBhIHZpcnR1YWwgbWFwcGluZyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZXMgc3VjaCBhcyBTTUJJT1MuCisgKiBUaGlzIG1lYW5zIHdlIGhhdmUgdG8gbWFwIHRoZW0gYmVmb3JlIHVzZS4KKyAqLworI2RlZmluZSBkbWlfZWFybHlfcmVtYXAoeCwgbCkJCWlvcmVtYXBfY2FjaGUoeCwgbCkKKyNkZWZpbmUgZG1pX2Vhcmx5X3VubWFwKHgsIGwpCQlpb3VubWFwKHgpCisjZGVmaW5lIGRtaV9yZW1hcCh4LCBsKQkJCWlvcmVtYXBfY2FjaGUoeCwgbCkKKyNkZWZpbmUgZG1pX3VubWFwKHgpCQkJaW91bm1hcCh4KQorI2RlZmluZSBkbWlfYWxsb2MobCkJCQlremFsbG9jKGwsIEdGUF9LRVJORUwpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggNWY3YmZlNi4uOWVmNmVjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0zMSw2ICszMSw3IEBACiAgKgogICovCiBlbnVtIGZpeGVkX2FkZHJlc3NlcyB7CisJRklYX0hPTEUsCiAJRklYX0VBUkxZQ09OX01FTV9CQVNFLAogCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCiAKQEAgLTU2LDEwICs1NywxMSBAQAogCiAjZGVmaW5lIEZJWE1BUF9QQUdFX0lPICAgICBfX3BncHJvdChQUk9UX0RFVklDRV9uR25SRSkKIAotZXh0ZXJuIHZvaWQgX19lYXJseV9zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKLQkJCSAgICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7Cit2b2lkIF9faW5pdCBlYXJseV9maXhtYXBfaW5pdCh2b2lkKTsKIAotI2RlZmluZSBfX3NldF9maXhtYXAgX19lYXJseV9zZXRfZml4bWFwCisjZGVmaW5lIF9fZWFybHlfc2V0X2ZpeG1hcCBfX3NldF9maXhtYXAKKworZXh0ZXJuIHZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwgcGh5c19hZGRyX3QgcGh5cywgcGdwcm90X3QgcHJvdCk7CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9maXhtYXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9od2NhcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9od2NhcC5oCmluZGV4IDAyNGM0NjEuLjBhZDczNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHdjYXAuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h3Y2FwLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgQ09NUEFUX0hXQ0FQX0lESVZBCSgxIDw8IDE3KQogI2RlZmluZSBDT01QQVRfSFdDQVBfSURJVlQJKDEgPDwgMTgpCiAjZGVmaW5lIENPTVBBVF9IV0NBUF9JRElWCShDT01QQVRfSFdDQVBfSURJVkF8Q09NUEFUX0hXQ0FQX0lESVZUKQorI2RlZmluZSBDT01QQVRfSFdDQVBfTFBBRQkoMSA8PCAyMCkKICNkZWZpbmUgQ09NUEFUX0hXQ0FQX0VWVFNUUk0JKDEgPDwgMjEpCiAKICNkZWZpbmUgQ09NUEFUX0hXQ0FQMl9BRVMJKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgKaW5kZXggNTZhOWU2My4uZTJmZjMyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgKQEAgLTM1NCw2ICszNTQsMTYgQEAKIGludCBhYXJjaDY0X2luc25fcGF0Y2hfdGV4dF9ub3N5bmModm9pZCAqYWRkciwgdTMyIGluc24pOwogaW50IGFhcmNoNjRfaW5zbl9wYXRjaF90ZXh0X3N5bmModm9pZCAqYWRkcnNbXSwgdTMyIGluc25zW10sIGludCBjbnQpOwogaW50IGFhcmNoNjRfaW5zbl9wYXRjaF90ZXh0KHZvaWQgKmFkZHJzW10sIHUzMiBpbnNuc1tdLCBpbnQgY250KTsKKworYm9vbCBhYXJjaDMyX2luc25faXNfd2lkZSh1MzIgaW5zbik7CisKKyNkZWZpbmUgQTMyX1JOX09GRlNFVAkxNgorI2RlZmluZSBBMzJfUlRfT0ZGU0VUCTEyCisjZGVmaW5lIEEzMl9SVDJfT0ZGU0VUCSAwCisKK3UzMiBhYXJjaDMyX2luc25fZXh0cmFjdF9yZWdfbnVtKHUzMiBpbnNuLCBpbnQgb2Zmc2V0KTsKK3UzMiBhYXJjaDMyX2luc25fbWNyX2V4dHJhY3Rfb3BjMih1MzIgaW5zbik7Cit1MzIgYWFyY2gzMl9pbnNuX21jcl9leHRyYWN0X2NybSh1MzIgaW5zbik7CiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZgkvKiBfX0FTTV9JTlNOX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW8uaAppbmRleCA3OWYxZDUxOS4uOTQ5YzQwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW8uaApAQCAtMjgsNTcgKzI4LDgwIEBACiAjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9lYXJseV9pb3JlbWFwLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KIAogI2luY2x1ZGUgPHhlbi94ZW4uaD4KIAogLyoKICAqIEdlbmVyaWMgSU8gcmVhZC93cml0ZS4gIFRoZXNlIHBlcmZvcm0gbmF0aXZlLWVuZGlhbiBhY2Nlc3Nlcy4KICAqLworI2RlZmluZSBfX3Jhd193cml0ZWIgX19yYXdfd3JpdGViCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGViKHU4IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCWFzbSB2b2xhdGlsZSgic3RyYiAldzAsIFslMV0iIDogOiAiciIgKHZhbCksICJyIiAoYWRkcikpOwogfQogCisjZGVmaW5lIF9fcmF3X3dyaXRldyBfX3Jhd193cml0ZXcKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXcodTE2IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCWFzbSB2b2xhdGlsZSgic3RyaCAldzAsIFslMV0iIDogOiAiciIgKHZhbCksICJyIiAoYWRkcikpOwogfQogCisjZGVmaW5lIF9fcmF3X3dyaXRlbCBfX3Jhd193cml0ZWwKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWwodTMyIHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCWFzbSB2b2xhdGlsZSgic3RyICV3MCwgWyUxXSIgOiA6ICJyIiAodmFsKSwgInIiIChhZGRyKSk7CiB9CiAKKyNkZWZpbmUgX19yYXdfd3JpdGVxIF9fcmF3X3dyaXRlcQogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlcSh1NjQgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJYXNtIHZvbGF0aWxlKCJzdHIgJTAsIFslMV0iIDogOiAiciIgKHZhbCksICJyIiAoYWRkcikpOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRiIF9fcmF3X3JlYWRiCiBzdGF0aWMgaW5saW5lIHU4IF9fcmF3X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1OCB2YWw7Ci0JYXNtIHZvbGF0aWxlKCJsZHJiICV3MCwgWyUxXSIgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSk7CisJYXNtIHZvbGF0aWxlKEFMVEVSTkFUSVZFKCJsZHJiICV3MCwgWyUxXSIsCisJCQkJICJsZGFyYiAldzAsIFslMV0iLAorCQkJCSBBUk02NF9XT1JLQVJPVU5EX0RFVklDRV9MT0FEX0FDUVVJUkUpCisJCSAgICAgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSk7CiAJcmV0dXJuIHZhbDsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkdyBfX3Jhd19yZWFkdwogc3RhdGljIGlubGluZSB1MTYgX19yYXdfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXUxNiB2YWw7Ci0JYXNtIHZvbGF0aWxlKCJsZHJoICV3MCwgWyUxXSIgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSk7CisKKwlhc20gdm9sYXRpbGUoQUxURVJOQVRJVkUoImxkcmggJXcwLCBbJTFdIiwKKwkJCQkgImxkYXJoICV3MCwgWyUxXSIsCisJCQkJIEFSTTY0X1dPUktBUk9VTkRfREVWSUNFX0xPQURfQUNRVUlSRSkKKwkJICAgICA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpKTsKIAlyZXR1cm4gdmFsOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRsIF9fcmF3X3JlYWRsCiBzdGF0aWMgaW5saW5lIHUzMiBfX3Jhd19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdTMyIHZhbDsKLQlhc20gdm9sYXRpbGUoImxkciAldzAsIFslMV0iIDogIj1yIiAodmFsKSA6ICJyIiAoYWRkcikpOworCWFzbSB2b2xhdGlsZShBTFRFUk5BVElWRSgibGRyICV3MCwgWyUxXSIsCisJCQkJICJsZGFyICV3MCwgWyUxXSIsCisJCQkJIEFSTTY0X1dPUktBUk9VTkRfREVWSUNFX0xPQURfQUNRVUlSRSkKKwkJICAgICA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpKTsKIAlyZXR1cm4gdmFsOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRxIF9fcmF3X3JlYWRxCiBzdGF0aWMgaW5saW5lIHU2NCBfX3Jhd19yZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdTY0IHZhbDsKLQlhc20gdm9sYXRpbGUoImxkciAlMCwgWyUxXSIgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSk7CisJYXNtIHZvbGF0aWxlKEFMVEVSTkFUSVZFKCJsZHIgJTAsIFslMV0iLAorCQkJCSAibGRhciAlMCwgWyUxXSIsCisJCQkJIEFSTTY0X1dPUktBUk9VTkRfREVWSUNFX0xPQURfQUNRVUlSRSkKKwkJICAgICA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpKTsKIAlyZXR1cm4gdmFsOwogfQogCkBAIC0xMjUsOTQgKzE0OCw2IEBACiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUCQkoU1pfMzJNIC0gMSkKICNkZWZpbmUgUENJX0lPQkFTRQkJKCh2b2lkIF9faW9tZW0gKikoTU9EVUxFU19WQUREUiAtIFNaXzMyTSkpCiAKLXN0YXRpYyBpbmxpbmUgdTggaW5iKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gcmVhZGIoYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBpbncodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiByZWFkdyhhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGlubCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIHJlYWRsKGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG91dGIodTggYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXdyaXRlYihiLCBhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXR3KHUxNiBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jd3JpdGV3KGIsIGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG91dGwodTMyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl3cml0ZWwoYiwgYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi0jZGVmaW5lIGluYl9wKGFkZHIpCWluYihhZGRyKQotI2RlZmluZSBpbndfcChhZGRyKQlpbncoYWRkcikKLSNkZWZpbmUgaW5sX3AoYWRkcikJaW5sKGFkZHIpCi0KLSNkZWZpbmUgb3V0Yl9wKHgsIGFkZHIpCW91dGIoKHgpLCAoYWRkcikpCi0jZGVmaW5lIG91dHdfcCh4LCBhZGRyKQlvdXR3KCh4KSwgKGFkZHIpKQotI2RlZmluZSBvdXRsX3AoeCwgYWRkcikJb3V0bCgoeCksIChhZGRyKSkKLQotc3RhdGljIGlubGluZSB2b2lkIGluc2IodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKLXsKLQl1OCAqYnVmID0gYnVmZmVyOwotCXdoaWxlIChjb3VudC0tKQotCQkqYnVmKysgPSBfX3Jhd19yZWFkYihhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnN3KHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCi17Ci0JdTE2ICpidWYgPSBidWZmZXI7Ci0Jd2hpbGUgKGNvdW50LS0pCi0JCSpidWYrKyA9IF9fcmF3X3JlYWR3KGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluc2wodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKLXsKLQl1MzIgKmJ1ZiA9IGJ1ZmZlcjsKLQl3aGlsZSAoY291bnQtLSkKLQkJKmJ1ZisrID0gX19yYXdfcmVhZGwoYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0c2IodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKLXsKLQljb25zdCB1OCAqYnVmID0gYnVmZmVyOwotCXdoaWxlIChjb3VudC0tKQotCQlfX3Jhd193cml0ZWIoKmJ1ZisrLCBhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzdyh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQotewotCWNvbnN0IHUxNiAqYnVmID0gYnVmZmVyOwotCXdoaWxlIChjb3VudC0tKQotCQlfX3Jhd193cml0ZXcoKmJ1ZisrLCBhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQotewotCWNvbnN0IHUzMiAqYnVmID0gYnVmZmVyOwotCXdoaWxlIChjb3VudC0tKQotCQlfX3Jhd193cml0ZWwoKmJ1ZisrLCBhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLSNkZWZpbmUgaW5zYl9wKHBvcnQsdG8sbGVuKQlpbnNiKHBvcnQsdG8sbGVuKQotI2RlZmluZSBpbnN3X3AocG9ydCx0byxsZW4pCWluc3cocG9ydCx0byxsZW4pCi0jZGVmaW5lIGluc2xfcChwb3J0LHRvLGxlbikJaW5zbChwb3J0LHRvLGxlbikKLQotI2RlZmluZSBvdXRzYl9wKHBvcnQsZnJvbSxsZW4pCW91dHNiKHBvcnQsZnJvbSxsZW4pCi0jZGVmaW5lIG91dHN3X3AocG9ydCxmcm9tLGxlbikJb3V0c3cocG9ydCxmcm9tLGxlbikKLSNkZWZpbmUgb3V0c2xfcChwb3J0LGZyb20sbGVuKQlvdXRzbChwb3J0LGZyb20sbGVuKQotCiAvKgogICogU3RyaW5nIHZlcnNpb24gb2YgSS9PIG1lbW9yeSBhY2Nlc3Mgb3BlcmF0aW9ucy4KICAqLwpAQCAtMjM2LDE4ICsxNzEsMTQgQEAKICNkZWZpbmUgaW9yZW1hcF93YyhhZGRyLCBzaXplKQkJX19pb3JlbWFwKChhZGRyKSwgKHNpemUpLCBfX3BncHJvdChQUk9UX05PUk1BTF9OQykpCiAjZGVmaW5lIGlvdW5tYXAJCQkJX19pb3VubWFwCiAKLSNkZWZpbmUgQVJDSF9IQVNfSU9SRU1BUF9XQwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+Ci0KIC8qCi0gKiBNb3JlIHJlc3RyaWN0aXZlIGFkZHJlc3MgcmFuZ2UgY2hlY2tpbmcgdGhhbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotICogKFBIWVNfT0ZGU0VUIGFuZCBQSFlTX01BU0sgdGFrZW4gaW50byBhY2NvdW50KS4KKyAqIGlve3JlYWQsd3JpdGV9ezE2LDMyfWJlKCkgbWFjcm9zCiAgKi8KLSNkZWZpbmUgQVJDSF9IQVNfVkFMSURfUEhZU19BRERSX1JBTkdFCi1leHRlcm4gaW50IHZhbGlkX3BoeXNfYWRkcl9yYW5nZShwaHlzX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gaW50IHZhbGlkX21tYXBfcGh5c19hZGRyX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCBzaXplX3Qgc2l6ZSk7CisjZGVmaW5lIGlvcmVhZDE2YmUocCkJCSh7IF9fdTE2IF9fdiA9IGJlMTZfdG9fY3B1KChfX2ZvcmNlIF9fYmUxNilfX3Jhd19yZWFkdyhwKSk7IF9faW9ybWIoKTsgX192OyB9KQorI2RlZmluZSBpb3JlYWQzMmJlKHApCQkoeyBfX3UzMiBfX3YgPSBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpX19yYXdfcmVhZGwocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKIAotZXh0ZXJuIGludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBmbik7CisjZGVmaW5lIGlvd3JpdGUxNmJlKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZXcoKF9fZm9yY2UgX191MTYpY3B1X3RvX2JlMTYodiksIHApOyB9KQorI2RlZmluZSBpb3dyaXRlMzJiZSh2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKWNwdV90b19iZTMyKHYpLCBwKTsgfSkKIAogLyoKICAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KQEAgLTI2MCw2ICsxOTEsMTggQEAKICAqLwogI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW8uaD4KKworLyoKKyAqIE1vcmUgcmVzdHJpY3RpdmUgYWRkcmVzcyByYW5nZSBjaGVja2luZyB0aGFuIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgKiAoUEhZU19PRkZTRVQgYW5kIFBIWVNfTUFTSyB0YWtlbiBpbnRvIGFjY291bnQpLgorICovCisjZGVmaW5lIEFSQ0hfSEFTX1ZBTElEX1BIWVNfQUREUl9SQU5HRQorZXh0ZXJuIGludCB2YWxpZF9waHlzX2FkZHJfcmFuZ2UocGh5c19hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCB2YWxpZF9tbWFwX3BoeXNfYWRkcl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgc2l6ZV90IHNpemUpOworCitleHRlcm4gaW50IGRldm1lbV9pc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgcGZuKTsKKwogc3RydWN0IGJpb192ZWM7CiBleHRlcm4gYm9vbCB4ZW5fYmlvdmVjX3BoeXNfbWVyZ2VhYmxlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICp2ZWMxLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBiaW9fdmVjICp2ZWMyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IGUxZjdlY2QuLjk0YzUzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMyw3ICszLDggQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lycS5oPgogCi1leHRlcm4gdm9pZCAoKmhhbmRsZV9hcmNoX2lycSkoc3RydWN0IHB0X3JlZ3MgKik7CitzdHJ1Y3QgcHRfcmVnczsKKwogZXh0ZXJuIHZvaWQgbWlncmF0ZV9pcnFzKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0X2hhbmRsZV9pcnEodm9pZCAoKmhhbmRsZV9pcnEpKHN0cnVjdCBwdF9yZWdzICopKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaAppbmRleCA3ZmQzZTI3Li44YWZiODYzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaApAQCAtMTgsNiArMTgsNyBAQAogI2lmbmRlZiBfX0FSTTY0X0tWTV9BUk1fSF9fCiAjZGVmaW5lIF9fQVJNNjRfS1ZNX0FSTV9IX18KIAorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogLyogSHlwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKEhDUikgYml0cyAqLwpAQCAtMTYwLDkgKzE2MSw5IEBACiAjZW5kaWYKIAogI2RlZmluZSBWVFRCUl9CQUREUl9TSElGVCAoVlRUQlJfWCAtIDEpCi0jZGVmaW5lIFZUVEJSX0JBRERSX01BU0sgICgoKDFMTFUgPDwgKFBIWVNfTUFTS19TSElGVCAtIFZUVEJSX1gpKSAtIDEpIDw8IFZUVEJSX0JBRERSX1NISUZUKQotI2RlZmluZSBWVFRCUl9WTUlEX1NISUZUICAoNDhMTFUpCi0jZGVmaW5lIFZUVEJSX1ZNSURfTUFTSwkgICgweGZmTExVIDw8IFZUVEJSX1ZNSURfU0hJRlQpCisjZGVmaW5lIFZUVEJSX0JBRERSX01BU0sgICgoKFVMKDEpIDw8IChQSFlTX01BU0tfU0hJRlQgLSBWVFRCUl9YKSkgLSAxKSA8PCBWVFRCUl9CQUREUl9TSElGVCkKKyNkZWZpbmUgVlRUQlJfVk1JRF9TSElGVCAgKFVMKDQ4KSkKKyNkZWZpbmUgVlRUQlJfVk1JRF9NQVNLCSAgKFVMKDB4RkYpIDw8IFZUVEJSX1ZNSURfU0hJRlQpCiAKIC8qIEh5cCBTeXN0ZW0gVHJhcCBSZWdpc3RlciAqLwogI2RlZmluZSBIU1RSX0VMMl9UVEVFCSgxIDw8IDE2KQpAQCAtMTg1LDEzICsxODYsMTMgQEAKIAogLyogRXhjZXB0aW9uIFN5bmRyb21lIFJlZ2lzdGVyIChFU1IpIGJpdHMgKi8KICNkZWZpbmUgRVNSX0VMMl9FQ19TSElGVAkoMjYpCi0jZGVmaW5lIEVTUl9FTDJfRUMJCSgweDNmVSA8PCBFU1JfRUwyX0VDX1NISUZUKQotI2RlZmluZSBFU1JfRUwyX0lMCQkoMVUgPDwgMjUpCisjZGVmaW5lIEVTUl9FTDJfRUMJCShVTCgweDNmKSA8PCBFU1JfRUwyX0VDX1NISUZUKQorI2RlZmluZSBFU1JfRUwyX0lMCQkoVUwoMSkgPDwgMjUpCiAjZGVmaW5lIEVTUl9FTDJfSVNTCQkoRVNSX0VMMl9JTCAtIDEpCiAjZGVmaW5lIEVTUl9FTDJfSVNWX1NISUZUCSgyNCkKLSNkZWZpbmUgRVNSX0VMMl9JU1YJCSgxVSA8PCBFU1JfRUwyX0lTVl9TSElGVCkKKyNkZWZpbmUgRVNSX0VMMl9JU1YJCShVTCgxKSA8PCBFU1JfRUwyX0lTVl9TSElGVCkKICNkZWZpbmUgRVNSX0VMMl9TQVNfU0hJRlQJKDIyKQotI2RlZmluZSBFU1JfRUwyX1NBUwkJKDNVIDw8IEVTUl9FTDJfU0FTX1NISUZUKQorI2RlZmluZSBFU1JfRUwyX1NBUwkJKFVMKDMpIDw8IEVTUl9FTDJfU0FTX1NISUZUKQogI2RlZmluZSBFU1JfRUwyX1NTRQkJKDEgPDwgMjEpCiAjZGVmaW5lIEVTUl9FTDJfU1JUX1NISUZUCSgxNikKICNkZWZpbmUgRVNSX0VMMl9TUlRfTUFTSwkoMHgxZiA8PCBFU1JfRUwyX1NSVF9TSElGVCkKQEAgLTIwNSwxNiArMjA2LDE2IEBACiAjZGVmaW5lIEVTUl9FTDJfRlNDX1RZUEUJKDB4M2MpCiAKICNkZWZpbmUgRVNSX0VMMl9DVl9TSElGVAkoMjQpCi0jZGVmaW5lIEVTUl9FTDJfQ1YJCSgxVSA8PCBFU1JfRUwyX0NWX1NISUZUKQorI2RlZmluZSBFU1JfRUwyX0NWCQkoVUwoMSkgPDwgRVNSX0VMMl9DVl9TSElGVCkKICNkZWZpbmUgRVNSX0VMMl9DT05EX1NISUZUCSgyMCkKLSNkZWZpbmUgRVNSX0VMMl9DT05ECQkoMHhmVSA8PCBFU1JfRUwyX0NPTkRfU0hJRlQpCisjZGVmaW5lIEVTUl9FTDJfQ09ORAkJKFVMKDB4ZikgPDwgRVNSX0VMMl9DT05EX1NISUZUKQogCiAKICNkZWZpbmUgRlNDX0ZBVUxUCSgweDA0KQogI2RlZmluZSBGU0NfUEVSTQkoMHgwYykKIAogLyogSHlwIFByZWZldGNoIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKEhQRkFSL0hERkFSKSAqLwotI2RlZmluZSBIUEZBUl9NQVNLCSh+MHhGVUwpCisjZGVmaW5lIEhQRkFSX01BU0sJKH5VTCgweGYpKQogCiAjZGVmaW5lIEVTUl9FTDJfRUNfVU5LTk9XTgkoMHgwMCkKICNkZWZpbmUgRVNSX0VMMl9FQ19XRkkJCSgweDAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbWVtb3J5LmgKaW5kZXggY2NjNzA4Ny4uNjQ4NmIyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tZW1vcnkuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC0xMjAsMTEgKzEyMCwxMyBAQAogICogdHJhbnNsYXRpb24gZm9yIHRyYW5zbGF0aW5nIERNQSBhZGRyZXNzZXMuICBVc2UgdGhlIGRyaXZlcgogICogRE1BIHN1cHBvcnQgLSBzZWUgZG1hLW1hcHBpbmcuaC4KICAqLworI2RlZmluZSB2aXJ0X3RvX3BoeXMgdmlydF90b19waHlzCiBzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHZpcnRfdG9fcGh5cyhjb25zdCB2b2xhdGlsZSB2b2lkICp4KQogewogCXJldHVybiBfX3ZpcnRfdG9fcGh5cygodW5zaWduZWQgbG9uZykoeCkpOwogfQogCisjZGVmaW5lIHBoeXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKIHN0YXRpYyBpbmxpbmUgdm9pZCAqcGh5c190b192aXJ0KHBoeXNfYWRkcl90IHgpCiB7CiAJcmV0dXJuICh2b2lkICopKF9fcGh5c190b192aXJ0KHgpKTsKQEAgLTE0Miw3ICsxNDQsNyBAQAogICogIHZpcnRfdG9fcGFnZShrKQljb252ZXJ0IGEgX3ZhbGlkXyB2aXJ0dWFsIGFkZHJlc3MgdG8gc3RydWN0IHBhZ2UgKgogICogIHZpcnRfYWRkcl92YWxpZChrKQlpbmRpY2F0ZXMgd2hldGhlciBhIHZpcnR1YWwgYWRkcmVzcyBpcyB2YWxpZAogICovCi0jZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJUEhZU19QRk5fT0ZGU0VUCisjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJKCh1bnNpZ25lZCBsb25nKVBIWVNfUEZOX09GRlNFVCkKIAogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lCXZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL29wY29kZXMuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vb3Bjb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjAzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL29wY29kZXMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Li4vLi4vYXJtL2luY2x1ZGUvYXNtL29wY29kZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDUyNzllNTcuLjA5ZGEyNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNDQsNiArNDQsMjIxIEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKyNkZWZpbmUgUEVSQ1BVX09QKG9wLCBhc21fb3ApCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1XyMjb3Aodm9pZCAqcHRyLAkJCVwKKwkJCXVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgc2l6ZSkJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgbG9vcCwgcmV0OwkJCQkJXAorCQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlkbyB7CQkJCQkJCVwKKwkJCWFzbSAoIi8vX19wZXJfY3B1XyIgI29wICJfMVxuIgkJCVwKKwkJCSJsZHhyYgkgICV3W3JldF0sICVbcHRyXVxuIgkJCVwKKwkJCSNhc21fb3AgIiAld1tyZXRdLCAld1tyZXRdLCAld1t2YWxdXG4iCQlcCisJCQkic3R4cmIJICAld1tsb29wXSwgJXdbcmV0XSwgJVtwdHJdXG4iCQlcCisJCQk6IFtsb29wXSAiPSZyIiAobG9vcCksIFtyZXRdICI9JnIiIChyZXQpLAlcCisJCQkgIFtwdHJdICIrUSIoKih1OCAqKXB0cikJCQlcCisJCQk6IFt2YWxdICJJciIgKHZhbCkpOwkJCQlcCisJCX0gd2hpbGUgKGxvb3ApOwkJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCQlcCisJCWRvIHsJCQkJCQkJXAorCQkJYXNtICgiLy9fX3Blcl9jcHVfIiAjb3AgIl8yXG4iCQkJXAorCQkJImxkeHJoCSAgJXdbcmV0XSwgJVtwdHJdXG4iCQkJXAorCQkJI2FzbV9vcCAiICV3W3JldF0sICV3W3JldF0sICV3W3ZhbF1cbiIJCVwKKwkJCSJzdHhyaAkgICV3W2xvb3BdLCAld1tyZXRdLCAlW3B0cl1cbiIJCVwKKwkJCTogW2xvb3BdICI9JnIiIChsb29wKSwgW3JldF0gIj0mciIgKHJldCksCVwKKwkJCSAgW3B0cl0gICIrUSIoKih1MTYgKilwdHIpCQkJXAorCQkJOiBbdmFsXSAiSXIiICh2YWwpKTsJCQkJXAorCQl9IHdoaWxlIChsb29wKTsJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlkbyB7CQkJCQkJCVwKKwkJCWFzbSAoIi8vX19wZXJfY3B1XyIgI29wICJfNFxuIgkJCVwKKwkJCSJsZHhyCSAgJXdbcmV0XSwgJVtwdHJdXG4iCQkJXAorCQkJI2FzbV9vcCAiICV3W3JldF0sICV3W3JldF0sICV3W3ZhbF1cbiIJCVwKKwkJCSJzdHhyCSAgJXdbbG9vcF0sICV3W3JldF0sICVbcHRyXVxuIgkJXAorCQkJOiBbbG9vcF0gIj0mciIgKGxvb3ApLCBbcmV0XSAiPSZyIiAocmV0KSwJXAorCQkJICBbcHRyXSAiK1EiKCoodTMyICopcHRyKQkJCVwKKwkJCTogW3ZhbF0gIklyIiAodmFsKSk7CQkJCVwKKwkJfSB3aGlsZSAobG9vcCk7CQkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCVwKKwkJZG8gewkJCQkJCQlcCisJCQlhc20gKCIvL19fcGVyX2NwdV8iICNvcCAiXzhcbiIJCQlcCisJCQkibGR4cgkgICVbcmV0XSwgJVtwdHJdXG4iCQkJXAorCQkJI2FzbV9vcCAiICVbcmV0XSwgJVtyZXRdLCAlW3ZhbF1cbiIJCVwKKwkJCSJzdHhyCSAgJXdbbG9vcF0sICVbcmV0XSwgJVtwdHJdXG4iCQlcCisJCQk6IFtsb29wXSAiPSZyIiAobG9vcCksIFtyZXRdICI9JnIiIChyZXQpLAlcCisJCQkgIFtwdHJdICIrUSIoKih1NjQgKilwdHIpCQkJXAorCQkJOiBbdmFsXSAiSXIiICh2YWwpKTsJCQkJXAorCQl9IHdoaWxlIChsb29wKTsJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlCVUlMRF9CVUcoKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30KKworUEVSQ1BVX09QKGFkZCwgYWRkKQorUEVSQ1BVX09QKGFuZCwgYW5kKQorUEVSQ1BVX09QKG9yLCBvcnIpCisjdW5kZWYgUEVSQ1BVX09QCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3BlcmNwdV9yZWFkKHZvaWQgKnB0ciwgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXJldCA9IEFDQ0VTU19PTkNFKCoodTggKilwdHIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldCA9IEFDQ0VTU19PTkNFKCoodTE2ICopcHRyKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZXQgPSBBQ0NFU1NfT05DRSgqKHUzMiAqKXB0cik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcmV0ID0gQUNDRVNTX09OQ0UoKih1NjQgKilwdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUlMRF9CVUcoKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHVfd3JpdGUodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlBQ0NFU1NfT05DRSgqKHU4ICopcHRyKSA9ICh1OCl2YWw7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJQUNDRVNTX09OQ0UoKih1MTYgKilwdHIpID0gKHUxNil2YWw7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJQUNDRVNTX09OQ0UoKih1MzIgKilwdHIpID0gKHUzMil2YWw7CisJCWJyZWFrOworCWNhc2UgODoKKwkJQUNDRVNTX09OQ0UoKih1NjQgKilwdHIpID0gKHU2NCl2YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVSUxEX0JVRygpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1X3hjaGcodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCQkJCWludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcmV0LCBsb29wOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlkbyB7CisJCQlhc20gKCIvL19fcGVyY3B1X3hjaGdfMVxuIgorCQkJImxkeHJiICV3W3JldF0sICVbcHRyXVxuIgorCQkJInN0eHJiICV3W2xvb3BdLCAld1t2YWxdLCAlW3B0cl1cbiIKKwkJCTogW2xvb3BdICI9JnIiKGxvb3ApLCBbcmV0XSAiPSZyIihyZXQpLAorCQkJICBbcHRyXSAiK1EiKCoodTggKilwdHIpCisJCQk6IFt2YWxdICJyIiAodmFsKSk7CisJCX0gd2hpbGUgKGxvb3ApOworCQlicmVhazsKKwljYXNlIDI6CisJCWRvIHsKKwkJCWFzbSAoIi8vX19wZXJjcHVfeGNoZ18yXG4iCisJCQkibGR4cmggJXdbcmV0XSwgJVtwdHJdXG4iCisJCQkic3R4cmggJXdbbG9vcF0sICV3W3ZhbF0sICVbcHRyXVxuIgorCQkJOiBbbG9vcF0gIj0mciIobG9vcCksIFtyZXRdICI9JnIiKHJldCksCisJCQkgIFtwdHJdICIrUSIoKih1MTYgKilwdHIpCisJCQk6IFt2YWxdICJyIiAodmFsKSk7CisJCX0gd2hpbGUgKGxvb3ApOworCQlicmVhazsKKwljYXNlIDQ6CisJCWRvIHsKKwkJCWFzbSAoIi8vX19wZXJjcHVfeGNoZ180XG4iCisJCQkibGR4ciAld1tyZXRdLCAlW3B0cl1cbiIKKwkJCSJzdHhyICV3W2xvb3BdLCAld1t2YWxdLCAlW3B0cl1cbiIKKwkJCTogW2xvb3BdICI9JnIiKGxvb3ApLCBbcmV0XSAiPSZyIihyZXQpLAorCQkJICBbcHRyXSAiK1EiKCoodTMyICopcHRyKQorCQkJOiBbdmFsXSAiciIgKHZhbCkpOworCQl9IHdoaWxlIChsb29wKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlkbyB7CisJCQlhc20gKCIvL19fcGVyY3B1X3hjaGdfOFxuIgorCQkJImxkeHIgJVtyZXRdLCAlW3B0cl1cbiIKKwkJCSJzdHhyICV3W2xvb3BdLCAlW3ZhbF0sICVbcHRyXVxuIgorCQkJOiBbbG9vcF0gIj0mciIobG9vcCksIFtyZXRdICI9JnIiKHJldCksCisJCQkgIFtwdHJdICIrUSIoKih1NjQgKilwdHIpCisJCQk6IFt2YWxdICJyIiAodmFsKSk7CisJCX0gd2hpbGUgKGxvb3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUlMRF9CVUcoKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIF9wZXJjcHVfYWRkKHBjcCwgdmFsKSBcCisJX19wZXJjcHVfYWRkKHJhd19jcHVfcHRyKCYocGNwKSksIHZhbCwgc2l6ZW9mKHBjcCkpCisKKyNkZWZpbmUgX3BlcmNwdV9hZGRfcmV0dXJuKHBjcCwgdmFsKSAodHlwZW9mKHBjcCkpIChfcGVyY3B1X2FkZChwY3AsIHZhbCkpCisKKyNkZWZpbmUgX3BlcmNwdV9hbmQocGNwLCB2YWwpIFwKKwlfX3BlcmNwdV9hbmQocmF3X2NwdV9wdHIoJihwY3ApKSwgdmFsLCBzaXplb2YocGNwKSkKKworI2RlZmluZSBfcGVyY3B1X29yKHBjcCwgdmFsKSBcCisJX19wZXJjcHVfb3IocmF3X2NwdV9wdHIoJihwY3ApKSwgdmFsLCBzaXplb2YocGNwKSkKKworI2RlZmluZSBfcGVyY3B1X3JlYWQocGNwKSAodHlwZW9mKHBjcCkpCVwKKwkoX19wZXJjcHVfcmVhZChyYXdfY3B1X3B0cigmKHBjcCkpLCBzaXplb2YocGNwKSkpCisKKyNkZWZpbmUgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkgXAorCV9fcGVyY3B1X3dyaXRlKHJhd19jcHVfcHRyKCYocGNwKSksICh1bnNpZ25lZCBsb25nKSh2YWwpLCBzaXplb2YocGNwKSkKKworI2RlZmluZSBfcGVyY3B1X3hjaGcocGNwLCB2YWwpICh0eXBlb2YocGNwKSkgXAorCShfX3BlcmNwdV94Y2hnKHJhd19jcHVfcHRyKCYocGNwKSksICh1bnNpZ25lZCBsb25nKSh2YWwpLCBzaXplb2YocGNwKSkpCisKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzEocGNwLCB2YWwpIF9wZXJjcHVfYWRkKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfMihwY3AsIHZhbCkgX3BlcmNwdV9hZGQocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF80KHBjcCwgdmFsKSBfcGVyY3B1X2FkZChwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzgocGNwLCB2YWwpIF9wZXJjcHVfYWRkKHBjcCwgdmFsKQorCisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fMShwY3AsIHZhbCkgX3BlcmNwdV9hZGRfcmV0dXJuKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzIocGNwLCB2YWwpIF9wZXJjcHVfYWRkX3JldHVybihwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl80KHBjcCwgdmFsKSBfcGVyY3B1X2FkZF9yZXR1cm4ocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fOChwY3AsIHZhbCkgX3BlcmNwdV9hZGRfcmV0dXJuKHBjcCwgdmFsKQorCisjZGVmaW5lIHRoaXNfY3B1X2FuZF8xKHBjcCwgdmFsKSBfcGVyY3B1X2FuZChwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYW5kXzIocGNwLCB2YWwpIF9wZXJjcHVfYW5kKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hbmRfNChwY3AsIHZhbCkgX3BlcmNwdV9hbmQocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKSBfcGVyY3B1X2FuZChwY3AsIHZhbCkKKworI2RlZmluZSB0aGlzX2NwdV9vcl8xKHBjcCwgdmFsKSBfcGVyY3B1X29yKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9vcl8yKHBjcCwgdmFsKSBfcGVyY3B1X29yKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9vcl80KHBjcCwgdmFsKSBfcGVyY3B1X29yKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9vcl84KHBjcCwgdmFsKSBfcGVyY3B1X29yKHBjcCwgdmFsKQorCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApIF9wZXJjcHVfcmVhZChwY3ApCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMihwY3ApIF9wZXJjcHVfcmVhZChwY3ApCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfNChwY3ApIF9wZXJjcHVfcmVhZChwY3ApCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApIF9wZXJjcHVfcmVhZChwY3ApCisKKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMShwY3AsIHZhbCkgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbCkgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfNChwY3AsIHZhbCkgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbCkgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkKKworI2RlZmluZSB0aGlzX2NwdV94Y2hnXzEocGNwLCB2YWwpIF9wZXJjcHVfeGNoZyhwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfeGNoZ18yKHBjcCwgdmFsKSBfcGVyY3B1X3hjaGcocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfNChwY3AsIHZhbCkgX3BlcmNwdV94Y2hnKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV94Y2hnXzgocGNwLCB2YWwpIF9wZXJjcHVfeGNoZyhwY3AsIHZhbCkKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgogCiAjZW5kaWYgLyogX19BU01fUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggZDViZWQwMi4uZTIwZGYzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTI2LDExICsyNiwxMyBAQAogCiAjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCQlkbyB7IH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgUEdBTExPQ19HRlAJKEdGUF9LRVJORUwgfCBfX0dGUF9OT1RSQUNLIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTykKKwogI2lmIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDIKIAogc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAocG1kX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCk7CisJcmV0dXJuIChwbWRfdCAqKV9fZ2V0X2ZyZWVfcGFnZShQR0FMTE9DX0dGUCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCkKQEAgLTUwLDcgKzUyLDcgQEAKIAogc3RhdGljIGlubGluZSBwdWRfdCAqcHVkX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAocHVkX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCk7CisJcmV0dXJuIChwdWRfdCAqKV9fZ2V0X2ZyZWVfcGFnZShQR0FMTE9DX0dGUCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCkKQEAgLTY5LDggKzcxLDYgQEAKIGV4dGVybiBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKIAotI2RlZmluZSBQR0FMTE9DX0dGUAkoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PVFJBQ0sgfCBfX0dGUF9SRVBFQVQgfCBfX0dGUF9aRVJPKQotCiBzdGF0aWMgaW5saW5lIHB0ZV90ICoKIHB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NlY2NvbXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2VjY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NmZhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NlY2NvbXAuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZWNjb21wLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTGluYXJvIExpbWl0ZWQKKyAqIEF1dGhvcjogQUtBU0hJIFRha2FoaXJvIDx0YWthaGlyby5ha2FzaGlAbGluYXJvLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9BU01fU0VDQ09NUF9ICisjZGVmaW5lIF9BU01fU0VDQ09NUF9ICisKKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkXzMyCQlfX05SX2NvbXBhdF9yZWFkCisjZGVmaW5lIF9fTlJfc2VjY29tcF93cml0ZV8zMgkJX19OUl9jb21wYXRfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIJCV9fTlJfY29tcGF0X2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybl8zMglfX05SX2NvbXBhdF9ydF9zaWdyZXR1cm4KKyNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWNjb21wLmg+CisKKyNlbmRpZiAvKiBfQVNNX1NFQ0NPTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggYTgyYzBjNS4uYzAyOGZlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xOSwxMCArMTksNiBAQAogI2lmbmRlZiBfX0FTTV9UTEJfSAogI2RlZmluZSBfX0FTTV9UTEJfSAogCi0jZGVmaW5lICBfX3RsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeSBfX3RsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCkBAIC0zNyw3MSArMzMsMjIgQEAKICNkZWZpbmUgdGxiX3JlbW92ZV9lbnRyeSh0bGIsIGVudHJ5KQl0bGJfcmVtb3ZlX3BhZ2UodGxiLCBlbnRyeSkKICNlbmRpZiAvKiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRSAqLwogCi0vKgotICogVGhlcmUncyB0aHJlZSB3YXlzIHRoZSBUTEIgc2hvb3Rkb3duIGNvZGUgaXMgdXNlZDoKLSAqICAxLiBVbm1hcHBpbmcgYSByYW5nZSBvZiB2bWFzLiAgU2VlIHphcF9wYWdlX3JhbmdlKCksIHVubWFwX3JlZ2lvbigpLgotICogICAgIHRsYi0+ZnVsbG1tID0gMCwgYW5kIHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBiZSBjYWxsZWQuCi0gKiAgMi4gVW5tYXBwaW5nIGFsbCB2bWFzLiAgU2VlIGV4aXRfbW1hcCgpLgotICogICAgIHRsYi0+ZnVsbG1tID0gMSwgYW5kIHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBiZSBjYWxsZWQuCi0gKiAgICAgUGFnZSB0YWJsZXMgd2lsbCBiZSBmcmVlZC4KLSAqICAzLiBVbm1hcHBpbmcgYXJndW1lbnQgcGFnZXMuICBTZWUgc2hpZnRfYXJnX3BhZ2VzKCkuCi0gKiAgICAgdGxiLT5mdWxsbW0gPSAwLCBidXQgdGxiX3N0YXJ0X3ZtYS90bGJfZW5kX3ZtYSB3aWxsIG5vdCBiZSBjYWxsZWQuCi0gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKwogc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewogCWlmICh0bGItPmZ1bGxtbSkgewogCQlmbHVzaF90bGJfbW0odGxiLT5tbSk7Ci0JfSBlbHNlIGlmICh0bGItPmVuZCA+IDApIHsKKwl9IGVsc2UgewogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qgdm1hID0geyAudm1fbW0gPSB0bGItPm1tLCB9OwogCQlmbHVzaF90bGJfcmFuZ2UoJnZtYSwgdGxiLT5zdGFydCwgdGxiLT5lbmQpOwotCQl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOwotCQl0bGItPmVuZCA9IDA7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX2FkZF9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQl0bGItPnN0YXJ0ID0gbWluKHRsYi0+c3RhcnQsIGFkZHIpOwotCQl0bGItPmVuZCA9IG1heCh0bGItPmVuZCwgYWRkciArIFBBR0VfU0laRSk7Ci0JfQotfQotCi0vKgotICogTWVtb3JpemUgdGhlIHJhbmdlIGZvciB0aGUgVExCIGZsdXNoLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVtb3ZlX3RsYl9lbnRyeShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdGVfdCAqcHRlcCwKLQkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwotfQotCi0vKgotICogSW4gdGhlIGNhc2Ugb2YgdGxiIHZtYSBoYW5kbGluZywgd2UgY2FuIG9wdGltaXNlIHRoZXNlIGF3YXkgaW4gdGhlCi0gKiBjYXNlIHdoZXJlIHdlJ3JlIGRvaW5nIGEgZnVsbCBNTSBmbHVzaC4gIFdoZW4gd2UncmUgZG9pbmcgYSBtdW5tYXAsCi0gKiB0aGUgdm1hcyBhcmUgYWRqdXN0ZWQgdG8gb25seSBjb3ZlciB0aGUgcmVnaW9uIHRvIGJlIHRvcm4gZG93bi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRsYl9zdGFydF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKLQkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOwotCQl0bGItPmVuZCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX2VuZF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKLQkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlpZiAoIXRsYi0+ZnVsbG1tKQotCQl0bGJfZmx1c2godGxiKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwdGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsKLQl0bGJfYWRkX2ZsdXNoKHRsYiwgYWRkcik7CiAJdGxiX3JlbW92ZV9lbnRyeSh0bGIsIHB0ZSk7CiB9CiAKQEAgLTEwOSw3ICs1Niw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZHAsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwogCXRsYl9yZW1vdmVfZW50cnkodGxiLCB2aXJ0X3RvX3BhZ2UocG1kcCkpOwogfQogI2VuZGlmCkBAIC0xMTgsMTUgKzY0LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B1ZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdWRfdCAqcHVkcCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl0bGJfYWRkX2ZsdXNoKHRsYiwgYWRkcik7CiAJdGxiX3JlbW92ZV9lbnRyeSh0bGIsIHZpcnRfdG9fcGFnZShwdWRwKSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWRwLAotCQkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXRsYl9hZGRfZmx1c2godGxiLCBhZGRyZXNzKTsKLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggMTBjYThmZi4uMjMyZTRiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90cmFwcy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdHJhcHMuaApAQCAtMTgsNiArMTgsMjIgQEAKICNpZm5kZWYgX19BU01fVFJBUF9ICiAjZGVmaW5lIF9fQVNNX1RSQVBfSAogCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IHVuZGVmX2hvb2sgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwl1MzIgaW5zdHJfbWFzazsKKwl1MzIgaW5zdHJfdmFsOworCXU2NCBwc3RhdGVfbWFzazsKKwl1NjQgcHN0YXRlX3ZhbDsKKwlpbnQgKCpmbikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpbnN0cik7Cit9OworCit2b2lkIHJlZ2lzdGVyX3VuZGVmX2hvb2soc3RydWN0IHVuZGVmX2hvb2sgKmhvb2spOwordm9pZCB1bnJlZ2lzdGVyX3VuZGVmX2hvb2soc3RydWN0IHVuZGVmX2hvb2sgKmhvb2spOworCiBzdGF0aWMgaW5saW5lIGludCBpbl9leGNlcHRpb25fdGV4dCh1bnNpZ25lZCBsb25nIHB0cikKIHsKIAlleHRlcm4gY2hhciBfX2V4Y2VwdGlvbl90ZXh0X3N0YXJ0W107CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA2ZDJiZjQxLi40OWM5YWVmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTMxLDYgKzMxLDkgQEAKICAqIENvbXBhdCBzeXNjYWxsIG51bWJlcnMgdXNlZCBieSB0aGUgQUFyY2g2NCBrZXJuZWwuCiAgKi8KICNkZWZpbmUgX19OUl9jb21wYXRfcmVzdGFydF9zeXNjYWxsCTAKKyNkZWZpbmUgX19OUl9jb21wYXRfZXhpdAkJMQorI2RlZmluZSBfX05SX2NvbXBhdF9yZWFkCQkzCisjZGVmaW5lIF9fTlJfY29tcGF0X3dyaXRlCQk0CiAjZGVmaW5lIF9fTlJfY29tcGF0X3NpZ3JldHVybgkJMTE5CiAjZGVmaW5lIF9fTlJfY29tcGF0X3J0X3NpZ3JldHVybgkxNzMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oCmluZGV4IGRhMWYwNmIuLjg4OTNjZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkMzIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZDMyLmgKQEAgLTc4Nyw4ICs3ODcsMTEgQEAKIF9fU1lTQ0FMTChfX05SX3NjaGVkX2dldGF0dHIsIHN5c19zY2hlZF9nZXRhdHRyKQogI2RlZmluZSBfX05SX3JlbmFtZWF0MiAzODIKIF9fU1lTQ0FMTChfX05SX3JlbmFtZWF0Miwgc3lzX3JlbmFtZWF0MikKLQkJCS8qIDM4MyBmb3Igc2VjY29tcCAqLworI2RlZmluZSBfX05SX3NlY2NvbXAgMzgzCitfX1NZU0NBTEwoX19OUl9zZWNjb21wLCBzeXNfc2VjY29tcCkKICNkZWZpbmUgX19OUl9nZXRyYW5kb20gMzg0CiBfX1NZU0NBTEwoX19OUl9nZXRyYW5kb20sIHN5c19nZXRyYW5kb20pCiAjZGVmaW5lIF9fTlJfbWVtZmRfY3JlYXRlIDM4NQogX19TWVNDQUxMKF9fTlJfbWVtZmRfY3JlYXRlLCBzeXNfbWVtZmRfY3JlYXRlKQorI2RlZmluZSBfX05SX2JwZiAzODYKK19fU1lTQ0FMTChfX05SX2JwZiwgc3lzX2JwZikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNWJkMDI5Yi4uZWFhNzdlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBDUFBGTEFHU192bWxpbnV4Lmxkcwk6PSAtRFRFWFRfT0ZGU0VUPSQoVEVYVF9PRkZTRVQpCiBBRkxBR1NfaGVhZC5vCQk6PSAtRFRFWFRfT0ZGU0VUPSQoVEVYVF9PRkZTRVQpCiBDRkxBR1NfZWZpLXN0dWIubyAJOj0gLURURVhUX09GRlNFVD0kKFRFWFRfT0ZGU0VUKQorQ0ZMQUdTX2FybXY4X2RlcHJlY2F0ZWQubyA6PSAtSSQoc3JjKQogCiBDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnCiBDRkxBR1NfUkVNT1ZFX2luc24ubyA9IC1wZwpAQCAtMTUsMTAgKzE2LDExIEBACiAJCQkgICBlbnRyeS1mcHNpbWQubyBwcm9jZXNzLm8gcHRyYWNlLm8gc2V0dXAubyBzaWduYWwubwlcCiAJCQkgICBzeXMubyBzdGFja3RyYWNlLm8gdGltZS5vIHRyYXBzLm8gaW8ubyB2ZHNvLm8JXAogCQkJICAgaHlwLXN0dWIubyBwc2NpLm8gY3B1X29wcy5vIGluc24ubyByZXR1cm5fYWRkcmVzcy5vCVwKLQkJCSAgIGNwdWluZm8ubworCQkJICAgY3B1aW5mby5vIGNwdV9lcnJhdGEubyBhbHRlcm5hdGl2ZS5vCiAKIGFybTY0LW9iai0kKENPTkZJR19DT01QQVQpCQkrPSBzeXMzMi5vIGt1c2VyMzIubyBzaWduYWwzMi5vIAlcCi0JCQkJCSAgIHN5c19jb21wYXQubworCQkJCQkgICBzeXNfY29tcGF0Lm8gCQkJXAorCQkJCQkgICAuLi8uLi9hcm0va2VybmVsL29wY29kZXMubwogYXJtNjQtb2JqLSQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikJKz0gZnRyYWNlLm8gZW50cnktZnRyYWNlLm8KIGFybTY0LW9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gYXJtNjRrc3ltcy5vIG1vZHVsZS5vCiBhcm02NC1vYmotJChDT05GSUdfU01QKQkJCSs9IHNtcC5vIHNtcF9zcGluX3RhYmxlLm8gdG9wb2xvZ3kubwpAQCAtMzEsNiArMzMsNyBAQAogYXJtNjQtb2JqLSQoQ09ORklHX0tHREIpCQkrPSBrZ2RiLm8KIGFybTY0LW9iai0kKENPTkZJR19FRkkpCQkJKz0gZWZpLm8gZWZpLXN0dWIubyBlZmktZW50cnkubwogYXJtNjQtb2JqLSQoQ09ORklHX1BDSSkJCQkrPSBwY2kubworYXJtNjQtb2JqLSQoQ09ORklHX0FSTVY4X0RFUFJFQ0FURUQpCSs9IGFybXY4X2RlcHJlY2F0ZWQubwogCiBvYmoteQkJCQkJKz0gJChhcm02NC1vYmoteSkgdmRzby8KIG9iai1tCQkJCQkrPSAkKGFybTY0LW9iai1tKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2FsdGVybmF0aXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3ODIxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIGFsdGVybmF0aXZlIHJ1bnRpbWUgcGF0Y2hpbmcKKyAqIGluc3BpcmVkIGJ5IHRoZSB4ODYgdmVyc2lvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBUk0gTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSAiYWx0ZXJuYXRpdmVzOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KKworZXh0ZXJuIHN0cnVjdCBhbHRfaW5zdHIgX19hbHRfaW5zdHJ1Y3Rpb25zW10sIF9fYWx0X2luc3RydWN0aW9uc19lbmRbXTsKKworc3RydWN0IGFsdF9yZWdpb24geworCXN0cnVjdCBhbHRfaW5zdHIgKmJlZ2luOworCXN0cnVjdCBhbHRfaW5zdHIgKmVuZDsKK307CisKK3N0YXRpYyBpbnQgX19hcHBseV9hbHRlcm5hdGl2ZXModm9pZCAqYWx0X3JlZ2lvbikKK3sKKwlzdHJ1Y3QgYWx0X2luc3RyICphbHQ7CisJc3RydWN0IGFsdF9yZWdpb24gKnJlZ2lvbiA9IGFsdF9yZWdpb247CisJdTggKm9yaWdwdHIsICpyZXBscHRyOworCisJZm9yIChhbHQgPSByZWdpb24tPmJlZ2luOyBhbHQgPCByZWdpb24tPmVuZDsgYWx0KyspIHsKKwkJaWYgKCFjcHVzX2hhdmVfY2FwKGFsdC0+Y3B1ZmVhdHVyZSkpCisJCQljb250aW51ZTsKKworCQlCVUdfT04oYWx0LT5hbHRfbGVuID4gYWx0LT5vcmlnX2xlbik7CisKKwkJcHJfaW5mb19vbmNlKCJwYXRjaGluZyBrZXJuZWwgY29kZVxuIik7CisKKwkJb3JpZ3B0ciA9ICh1OCAqKSZhbHQtPm9yaWdfb2Zmc2V0ICsgYWx0LT5vcmlnX29mZnNldDsKKwkJcmVwbHB0ciA9ICh1OCAqKSZhbHQtPmFsdF9vZmZzZXQgKyBhbHQtPmFsdF9vZmZzZXQ7CisJCW1lbWNweShvcmlncHRyLCByZXBscHRyLCBhbHQtPmFsdF9sZW4pOworCQlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVpbnRwdHJfdClvcmlncHRyLAorCQkJCSAgICh1aW50cHRyX3QpKG9yaWdwdHIgKyBhbHQtPmFsdF9sZW4pKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKHZvaWQpCit7CisJc3RydWN0IGFsdF9yZWdpb24gcmVnaW9uID0geworCQkuYmVnaW4JPSBfX2FsdF9pbnN0cnVjdGlvbnMsCisJCS5lbmQJPSBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kLAorCX07CisKKwkvKiBiZXR0ZXIgbm90IHRyeSBjb2RlIHBhdGNoaW5nIG9uIGEgbGl2ZSBTTVAgc3lzdGVtICovCisJc3RvcF9tYWNoaW5lKF9fYXBwbHlfYWx0ZXJuYXRpdmVzLCAmcmVnaW9uLCBOVUxMKTsKK30KKwordm9pZCBhcHBseV9hbHRlcm5hdGl2ZXModm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IGFsdF9yZWdpb24gcmVnaW9uID0geworCQkuYmVnaW4JPSBzdGFydCwKKwkJLmVuZAk9IHN0YXJ0ICsgbGVuZ3RoLAorCX07CisKKwlfX2FwcGx5X2FsdGVybmF0aXZlcygmcmVnaW9uKTsKK30KKwordm9pZCBmcmVlX2FsdGVybmF0aXZlc19tZW1vcnkodm9pZCkKK3sKKwlmcmVlX3Jlc2VydmVkX2FyZWEoX19hbHRfaW5zdHJ1Y3Rpb25zLCBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kLAorCQkJICAgMCwgImFsdGVybmF0aXZlcyIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvYXJtdjhfZGVwcmVjYXRlZC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvYXJtdjhfZGVwcmVjYXRlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjM2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2tlcm5lbC9hcm12OF9kZXByZWNhdGVkLmMKQEAgLTAsMCArMSw1NTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxhc20vaW5zbi5oPgorI2luY2x1ZGUgPGFzbS9vcGNvZGVzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSAidHJhY2UtZXZlbnRzLWVtdWxhdGlvbi5oIgorCisvKgorICogVGhlIHJ1bnRpbWUgc3VwcG9ydCBmb3IgZGVwcmVjYXRlZCBpbnN0cnVjdGlvbiBzdXBwb3J0IGNhbiBiZSBpbiBvbmUgb2YKKyAqIGZvbGxvd2luZyB0aHJlZSBzdGF0ZXMgLQorICoKKyAqIDAgPSB1bmRlZgorICogMSA9IGVtdWxhdGUgKHNvZnR3YXJlIGVtdWxhdGlvbikKKyAqIDIgPSBodyAoc3VwcG9ydGVkIGluIGhhcmR3YXJlKQorICovCitlbnVtIGluc25fZW11bGF0aW9uX21vZGUgeworCUlOU05fVU5ERUYsCisJSU5TTl9FTVVMQVRFLAorCUlOU05fSFcsCit9OworCitlbnVtIGxlZ2FjeV9pbnNuX3N0YXR1cyB7CisJSU5TTl9ERVBSRUNBVEVELAorCUlOU05fT0JTT0xFVEUsCit9OworCitzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwllbnVtIGxlZ2FjeV9pbnNuX3N0YXR1cwlzdGF0dXM7CisJc3RydWN0IHVuZGVmX2hvb2sJKmhvb2tzOworCWludAkJCSgqc2V0X2h3X21vZGUpKGJvb2wgZW5hYmxlKTsKK307CisKK3N0cnVjdCBpbnNuX2VtdWxhdGlvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBpbnNuX2VtdWxhdGlvbl9vcHMgKm9wczsKKwlpbnQgY3VycmVudF9tb2RlOworCWludCBtaW47CisJaW50IG1heDsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoaW5zbl9lbXVsYXRpb24pOworc3RhdGljIGludCBucl9pbnNuX2VtdWxhdGVkOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaW5zbl9lbXVsYXRpb25fbG9jayk7CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX2VtdWxhdGlvbl9ob29rcyhzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzICpvcHMpCit7CisJc3RydWN0IHVuZGVmX2hvb2sgKmhvb2s7CisKKwlCVUdfT04oIW9wcy0+aG9va3MpOworCisJZm9yIChob29rID0gb3BzLT5ob29rczsgaG9vay0+aW5zdHJfbWFzazsgaG9vaysrKQorCQlyZWdpc3Rlcl91bmRlZl9ob29rKGhvb2spOworCisJcHJfbm90aWNlKCJSZWdpc3RlcmVkICVzIGVtdWxhdGlvbiBoYW5kbGVyXG4iLCBvcHMtPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfZW11bGF0aW9uX2hvb2tzKHN0cnVjdCBpbnNuX2VtdWxhdGlvbl9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgdW5kZWZfaG9vayAqaG9vazsKKworCUJVR19PTighb3BzLT5ob29rcyk7CisKKwlmb3IgKGhvb2sgPSBvcHMtPmhvb2tzOyBob29rLT5pbnN0cl9tYXNrOyBob29rKyspCisJCXVucmVnaXN0ZXJfdW5kZWZfaG9vayhob29rKTsKKworCXByX25vdGljZSgiUmVtb3ZlZCAlcyBlbXVsYXRpb24gaGFuZGxlclxuIiwgb3BzLT5uYW1lKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfaW5zbl9lbXVsYXRpb25fbW9kZShzdHJ1Y3QgaW5zbl9lbXVsYXRpb24gKmluc24sCisJCQkJICAgICAgIGVudW0gaW5zbl9lbXVsYXRpb25fbW9kZSBwcmV2KQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwcmV2KSB7CisJY2FzZSBJTlNOX1VOREVGOiAvKiBOb3RoaW5nIHRvIGJlIGRvbmUgKi8KKwkJYnJlYWs7CisJY2FzZSBJTlNOX0VNVUxBVEU6CisJCXJlbW92ZV9lbXVsYXRpb25faG9va3MoaW5zbi0+b3BzKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0hXOgorCQlpZiAoaW5zbi0+b3BzLT5zZXRfaHdfbW9kZSkgeworCQkJaW5zbi0+b3BzLT5zZXRfaHdfbW9kZShmYWxzZSk7CisJCQlwcl9ub3RpY2UoIkRpc2FibGVkICVzIHN1cHBvcnRcbiIsIGluc24tPm9wcy0+bmFtZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpbnNuLT5jdXJyZW50X21vZGUpIHsKKwljYXNlIElOU05fVU5ERUY6CisJCWJyZWFrOworCWNhc2UgSU5TTl9FTVVMQVRFOgorCQlyZWdpc3Rlcl9lbXVsYXRpb25faG9va3MoaW5zbi0+b3BzKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0hXOgorCQlpZiAoaW5zbi0+b3BzLT5zZXRfaHdfbW9kZSAmJiBpbnNuLT5vcHMtPnNldF9od19tb2RlKHRydWUpKQorCQkJcHJfbm90aWNlKCJFbmFibGVkICVzIHN1cHBvcnRcbiIsIGluc24tPm9wcy0+bmFtZSk7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX2luc25fZW11bGF0aW9uKHN0cnVjdCBpbnNuX2VtdWxhdGlvbl9vcHMgKm9wcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpbnNuX2VtdWxhdGlvbiAqaW5zbjsKKworCWluc24gPSBremFsbG9jKHNpemVvZigqaW5zbiksIEdGUF9LRVJORUwpOworCWluc24tPm9wcyA9IG9wczsKKwlpbnNuLT5taW4gPSBJTlNOX1VOREVGOworCisJc3dpdGNoIChvcHMtPnN0YXR1cykgeworCWNhc2UgSU5TTl9ERVBSRUNBVEVEOgorCQlpbnNuLT5jdXJyZW50X21vZGUgPSBJTlNOX0VNVUxBVEU7CisJCWluc24tPm1heCA9IElOU05fSFc7CisJCWJyZWFrOworCWNhc2UgSU5TTl9PQlNPTEVURToKKwkJaW5zbi0+Y3VycmVudF9tb2RlID0gSU5TTl9VTkRFRjsKKwkJaW5zbi0+bWF4ID0gSU5TTl9FTVVMQVRFOworCQlicmVhazsKKwl9CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmluc25fZW11bGF0aW9uX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmaW5zbi0+bm9kZSwgJmluc25fZW11bGF0aW9uKTsKKwlucl9pbnNuX2VtdWxhdGVkKys7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc25fZW11bGF0aW9uX2xvY2ssIGZsYWdzKTsKKworCS8qIFJlZ2lzdGVyIGFueSBoYW5kbGVycyBpZiByZXF1aXJlZCAqLworCXVwZGF0ZV9pbnNuX2VtdWxhdGlvbl9tb2RlKGluc24sIElOU05fVU5ERUYpOworfQorCitzdGF0aWMgaW50IGVtdWxhdGlvbl9wcm9jX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwKKwkJCQkgIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaW5zbl9lbXVsYXRpb24gKmluc24gPSAoc3RydWN0IGluc25fZW11bGF0aW9uICopIHRhYmxlLT5kYXRhOworCWVudW0gaW5zbl9lbXVsYXRpb25fbW9kZSBwcmV2X21vZGUgPSBpbnNuLT5jdXJyZW50X21vZGU7CisKKwl0YWJsZS0+ZGF0YSA9ICZpbnNuLT5jdXJyZW50X21vZGU7CisJcmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCisJaWYgKHJldCB8fCAhd3JpdGUgfHwgcHJldl9tb2RlID09IGluc24tPmN1cnJlbnRfbW9kZSkKKwkJZ290byByZXQ7CisKKwlyZXQgPSB1cGRhdGVfaW5zbl9lbXVsYXRpb25fbW9kZShpbnNuLCBwcmV2X21vZGUpOworCWlmIChyZXQpIHsKKwkJLyogTW9kZSBjaGFuZ2UgZmFpbGVkLCByZXZlcnQgdG8gcHJldmlvdXMgbW9kZS4gKi8KKwkJaW5zbi0+Y3VycmVudF9tb2RlID0gcHJldl9tb2RlOworCQl1cGRhdGVfaW5zbl9lbXVsYXRpb25fbW9kZShpbnNuLCBJTlNOX1VOREVGKTsKKwl9CityZXQ6CisJdGFibGUtPmRhdGEgPSBpbnNuOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF9hYmlbXSA9IHsKKwl7CisJCS5wcm9jbmFtZSA9ICJhYmkiLAorCQkubW9kZSA9IDA1NTUsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX2luc25fZW11bGF0aW9uX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpID0gMDsKKwlzdHJ1Y3QgaW5zbl9lbXVsYXRpb24gKmluc247CisJc3RydWN0IGN0bF90YWJsZSAqaW5zbnNfc3lzY3RsLCAqc3lzY3RsOworCisJaW5zbnNfc3lzY3RsID0ga3phbGxvYyhzaXplb2YoKnN5c2N0bCkgKiAobnJfaW5zbl9lbXVsYXRlZCArIDEpLAorCQkJICAgICAgR0ZQX0tFUk5FTCk7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmluc25fZW11bGF0aW9uX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluc24sICZpbnNuX2VtdWxhdGlvbiwgbm9kZSkgeworCQlzeXNjdGwgPSAmaW5zbnNfc3lzY3RsW2ldOworCisJCXN5c2N0bC0+bW9kZSA9IDA2NDQ7CisJCXN5c2N0bC0+bWF4bGVuID0gc2l6ZW9mKGludCk7CisKKwkJc3lzY3RsLT5wcm9jbmFtZSA9IGluc24tPm9wcy0+bmFtZTsKKwkJc3lzY3RsLT5kYXRhID0gaW5zbjsKKwkJc3lzY3RsLT5leHRyYTEgPSAmaW5zbi0+bWluOworCQlzeXNjdGwtPmV4dHJhMiA9ICZpbnNuLT5tYXg7CisJCXN5c2N0bC0+cHJvY19oYW5kbGVyID0gZW11bGF0aW9uX3Byb2NfaGFuZGxlcjsKKwkJaSsrOworCX0KKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zbl9lbXVsYXRpb25fbG9jaywgZmxhZ3MpOworCisJdGFibGUtPmNoaWxkID0gaW5zbnNfc3lzY3RsOworCXJlZ2lzdGVyX3N5c2N0bF90YWJsZSh0YWJsZSk7Cit9CisKKy8qCisgKiAgSW1wbGVtZW50IGVtdWxhdGlvbiBvZiB0aGUgU1dQL1NXUEIgaW5zdHJ1Y3Rpb25zIHVzaW5nIGxvYWQtZXhjbHVzaXZlIGFuZAorICogIHN0b3JlLWV4Y2x1c2l2ZS4KKyAqCisgKiAgU3ludGF4IG9mIFNXUHtCfSBpbnN0cnVjdGlvbjogU1dQe0J9PGM+IDxSdD4sIDxSdDI+LCBbPFJuPl0KKyAqICBXaGVyZTogUnQgID0gZGVzdGluYXRpb24KKyAqCSAgIFJ0MiA9IHNvdXJjZQorICoJICAgUm4gID0gYWRkcmVzcworICovCisKKy8qCisgKiBFcnJvci1jaGVja2luZyBTV1AgbWFjcm9zIGltcGxlbWVudGVkIHVzaW5nIGxkeHJ7Yn0vc3R4cntifQorICovCisjZGVmaW5lIF9fdXNlcl9zd3BYX2FzbShkYXRhLCBhZGRyLCByZXMsIHRlbXAsIEIpCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIgltb3YJCSV3MiwgJXcxXG4iCQkJXAorCSIwOglsZHhyIkIiCQkldzEsIFslM11cbiIJCQlcCisJIjE6CXN0eHIiQiIJCSV3MCwgJXcyLCBbJTNdXG4iCQlcCisJIgljYnoJCSV3MCwgMmZcbiIJCQlcCisJIgltb3YJCSV3MCwgJXc0XG4iCQkJXAorCSIyOlxuIgkJCQkJCQlcCisJIgkucHVzaHNlY3Rpb24JIC5maXh1cCxcImF4XCJcbiIJCVwKKwkiCS5hbGlnbgkJMlxuIgkJCQlcCisJIjM6CW1vdgkJJXcwLCAldzVcbiIJCQlcCisJIgliCQkyYlxuIgkJCQlcCisJIgkucG9wc2VjdGlvbiIJCQkJCVwKKwkiCS5wdXNoc2VjdGlvbgkgX19leF90YWJsZSxcImFcIlxuIgkJXAorCSIJLmFsaWduCQkzXG4iCQkJCVwKKwkiCS5xdWFkCQkwYiwgM2JcbiIJCQlcCisJIgkucXVhZAkJMWIsIDNiXG4iCQkJXAorCSIJLnBvcHNlY3Rpb24iCQkJCQlcCisJOiAiPSZyIiAocmVzKSwgIityIiAoZGF0YSksICI9JnIiICh0ZW1wKQkJXAorCTogInIiIChhZGRyKSwgImkiICgtRUFHQUlOKSwgImkiICgtRUZBVUxUKQkJXAorCTogIm1lbW9yeSIpCisKKyNkZWZpbmUgX191c2VyX3N3cF9hc20oZGF0YSwgYWRkciwgcmVzLCB0ZW1wKSBcCisJX191c2VyX3N3cFhfYXNtKGRhdGEsIGFkZHIsIHJlcywgdGVtcCwgIiIpCisjZGVmaW5lIF9fdXNlcl9zd3BiX2FzbShkYXRhLCBhZGRyLCByZXMsIHRlbXApIFwKKwlfX3VzZXJfc3dwWF9hc20oZGF0YSwgYWRkciwgcmVzLCB0ZW1wLCAiYiIpCisKKy8qCisgKiBCaXQgMjIgb2YgdGhlIGluc3RydWN0aW9uIGVuY29kaW5nIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbgorICogdGhlIFNXUCBhbmQgU1dQQiB2YXJpYW50cyAoYml0IHNldCBtZWFucyBTV1BCKS4KKyAqLworI2RlZmluZSBUWVBFX1NXUEIgKDEgPDwgMjIpCisKKy8qCisgKiBTZXQgdXAgcHJvY2VzcyBpbmZvIHRvIHNpZ25hbCBzZWdtZW50YXRpb24gZmF1bHQgLSBjYWxsZWQgb24gYWNjZXNzIGVycm9yLgorICovCitzdGF0aWMgdm9pZCBzZXRfc2VnZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzaWdpbmZvX3QgaW5mbzsKKworCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlpZiAoZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpID09IE5VTEwpCisJCWluZm8uc2lfY29kZSA9IFNFR1ZfTUFQRVJSOworCWVsc2UKKwkJaW5mby5zaV9jb2RlID0gU0VHVl9BQ0NFUlI7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCWluZm8uc2lfc2lnbm8gPSBTSUdTRUdWOworCWluZm8uc2lfZXJybm8gPSAwOworCWluZm8uc2lfYWRkciAgPSAodm9pZCAqKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCisJcHJfZGVidWcoIlNXUHtCfSBlbXVsYXRpb246IGFjY2VzcyBjYXVzZWQgbWVtb3J5IGFib3J0IVxuIik7CisJYXJtNjRfbm90aWZ5X2RpZSgiSWxsZWdhbCBtZW1vcnkgYWNjZXNzIiwgcmVncywgJmluZm8sIDApOworfQorCitzdGF0aWMgaW50IGVtdWxhdGVfc3dwWCh1bnNpZ25lZCBpbnQgYWRkcmVzcywgdW5zaWduZWQgaW50ICpkYXRhLAorCQkJdW5zaWduZWQgaW50IHR5cGUpCit7CisJdW5zaWduZWQgaW50IHJlcyA9IDA7CisKKwlpZiAoKHR5cGUgIT0gVFlQRV9TV1BCKSAmJiAoYWRkcmVzcyAmIDB4MykpIHsKKwkJLyogU1dQIHRvIHVuYWxpZ25lZCBhZGRyZXNzIG5vdCBwZXJtaXR0ZWQgKi8KKwkJcHJfZGVidWcoIlNXUCBpbnN0cnVjdGlvbiBvbiB1bmFsaWduZWQgcG9pbnRlciFcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwkJaWYgKHR5cGUgPT0gVFlQRV9TV1BCKQorCQkJX191c2VyX3N3cGJfYXNtKCpkYXRhLCBhZGRyZXNzLCByZXMsIHRlbXApOworCQllbHNlCisJCQlfX3VzZXJfc3dwX2FzbSgqZGF0YSwgYWRkcmVzcywgcmVzLCB0ZW1wKTsKKworCQlpZiAobGlrZWx5KHJlcyAhPSAtRUFHQUlOKSB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCisJCWNvbmRfcmVzY2hlZCgpOworCX0KKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBzd3BfaGFuZGxlciBsb2dzIHRoZSBpZCBvZiBjYWxsaW5nIHByb2Nlc3MsIGRpc3NlY3RzIHRoZSBpbnN0cnVjdGlvbiwgc2FuaXR5CisgKiBjaGVja3MgdGhlIG1lbW9yeSBsb2NhdGlvbiwgY2FsbHMgZW11bGF0ZV9zd3BYIGZvciB0aGUgYWN0dWFsIG9wZXJhdGlvbiBhbmQKKyAqIGRlYWxzIHdpdGggZml4dXAvZXJyb3IgaGFuZGxpbmcgYmVmb3JlIHJldHVybmluZworICovCitzdGF0aWMgaW50IHN3cF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgaW5zdHIpCit7CisJdTMyIGRlc3RyZWcsIGRhdGEsIHR5cGUsIGFkZHJlc3MgPSAwOworCWludCBybiwgcnQyLCByZXMgPSAwOworCisJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0VNVUxBVElPTl9GQVVMVFMsIDEsIHJlZ3MsIHJlZ3MtPnBjKTsKKworCXR5cGUgPSBpbnN0ciAmIFRZUEVfU1dQQjsKKworCXN3aXRjaCAoYXJtX2NoZWNrX2NvbmRpdGlvbihpbnN0ciwgcmVncy0+cHN0YXRlKSkgeworCWNhc2UgQVJNX09QQ09ERV9DT05EVEVTVF9QQVNTOgorCQlicmVhazsKKwljYXNlIEFSTV9PUENPREVfQ09ORFRFU1RfRkFJTDoKKwkJLyogQ29uZGl0aW9uIGZhaWxlZCAtIHJldHVybiB0byBuZXh0IGluc3RydWN0aW9uICovCisJCWdvdG8gcmV0OworCWNhc2UgQVJNX09QQ09ERV9DT05EVEVTVF9VTkNPTkQ6CisJCS8qIElmIHVuY29uZGl0aW9uYWwgZW5jb2RpbmcgLSBub3QgYSBTV1AsIHVuZGVmICovCisJCXJldHVybiAtRUZBVUxUOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJuID0gYWFyY2gzMl9pbnNuX2V4dHJhY3RfcmVnX251bShpbnN0ciwgQTMyX1JOX09GRlNFVCk7CisJcnQyID0gYWFyY2gzMl9pbnNuX2V4dHJhY3RfcmVnX251bShpbnN0ciwgQTMyX1JUMl9PRkZTRVQpOworCisJYWRkcmVzcyA9ICh1MzIpcmVncy0+dXNlcl9yZWdzLnJlZ3Nbcm5dOworCWRhdGEJPSAodTMyKXJlZ3MtPnVzZXJfcmVncy5yZWdzW3J0Ml07CisJZGVzdHJlZyA9IGFhcmNoMzJfaW5zbl9leHRyYWN0X3JlZ19udW0oaW5zdHIsIEEzMl9SVF9PRkZTRVQpOworCisJcHJfZGVidWcoImFkZHIgaW4gciVkLT4weCUwOHgsIGRlc3QgaXMgciVkLCBzb3VyY2UgaW4gciVkLT4weCUwOHgpXG4iLAorCQlybiwgYWRkcmVzcywgZGVzdHJlZywKKwkJYWFyY2gzMl9pbnNuX2V4dHJhY3RfcmVnX251bShpbnN0ciwgQTMyX1JUMl9PRkZTRVQpLCBkYXRhKTsKKworCS8qIENoZWNrIGFjY2VzcyBpbiByZWFzb25hYmxlIGFjY2VzcyByYW5nZSBmb3IgYm90aCBTV1AgYW5kIFNXUEIgKi8KKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIChhZGRyZXNzICYgfjMpLCA0KSkgeworCQlwcl9kZWJ1ZygiU1dQe0J9IGVtdWxhdGlvbjogYWNjZXNzIHRvIDB4JTA4eCBub3QgYWxsb3dlZCFcbiIsCisJCQlhZGRyZXNzKTsKKwkJZ290byBmYXVsdDsKKwl9CisKKwlyZXMgPSBlbXVsYXRlX3N3cFgoYWRkcmVzcywgJmRhdGEsIHR5cGUpOworCWlmIChyZXMgPT0gLUVGQVVMVCkKKwkJZ290byBmYXVsdDsKKwllbHNlIGlmIChyZXMgPT0gMCkKKwkJcmVncy0+dXNlcl9yZWdzLnJlZ3NbZGVzdHJlZ10gPSBkYXRhOworCityZXQ6CisJaWYgKHR5cGUgPT0gVFlQRV9TV1BCKQorCQl0cmFjZV9pbnN0cnVjdGlvbl9lbXVsYXRpb24oInN3cGIiLCByZWdzLT5wYyk7CisJZWxzZQorCQl0cmFjZV9pbnN0cnVjdGlvbl9lbXVsYXRpb24oInN3cCIsIHJlZ3MtPnBjKTsKKworCXByX3dhcm5fcmF0ZWxpbWl0ZWQoIlwiJXNcIiAoJWxkKSB1c2VzIG9ic29sZXRlIFNXUHtCfSBpbnN0cnVjdGlvbiBhdCAweCVsbHhcbiIsCisJCQljdXJyZW50LT5jb21tLCAodW5zaWduZWQgbG9uZyljdXJyZW50LT5waWQsIHJlZ3MtPnBjKTsKKworCXJlZ3MtPnBjICs9IDQ7CisJcmV0dXJuIDA7CisKK2ZhdWx0OgorCXNldF9zZWdmYXVsdChyZWdzLCBhZGRyZXNzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogT25seSBlbXVsYXRlIFNXUC9TV1BCIGV4ZWN1dGVkIGluIEFSTSBzdGF0ZS9Vc2VyIG1vZGUuCisgKiBUaGUga2VybmVsIG11c3QgYmUgU1dQIGZyZWUgYW5kIFNXUHtCfSBkb2VzIG5vdCBleGlzdCBpbiBUaHVtYi4KKyAqLworc3RhdGljIHN0cnVjdCB1bmRlZl9ob29rIHN3cF9ob29rc1tdID0geworCXsKKwkJLmluc3RyX21hc2sJPSAweDBmYjAwZmYwLAorCQkuaW5zdHJfdmFsCT0gMHgwMTAwMDA5MCwKKwkJLnBzdGF0ZV9tYXNrCT0gQ09NUEFUX1BTUl9NT0RFX01BU0ssCisJCS5wc3RhdGVfdmFsCT0gQ09NUEFUX1BTUl9NT0RFX1VTUiwKKwkJLmZuCQk9IHN3cF9oYW5kbGVyCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzIHN3cF9vcHMgPSB7CisJLm5hbWUgPSAic3dwIiwKKwkuc3RhdHVzID0gSU5TTl9PQlNPTEVURSwKKwkuaG9va3MgPSBzd3BfaG9va3MsCisJLnNldF9od19tb2RlID0gTlVMTCwKK307CisKK3N0YXRpYyBpbnQgY3AxNWJhcnJpZXJfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIGluc3RyKQoreworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTLCAxLCByZWdzLCByZWdzLT5wYyk7CisKKwlzd2l0Y2ggKGFybV9jaGVja19jb25kaXRpb24oaW5zdHIsIHJlZ3MtPnBzdGF0ZSkpIHsKKwljYXNlIEFSTV9PUENPREVfQ09ORFRFU1RfUEFTUzoKKwkJYnJlYWs7CisJY2FzZSBBUk1fT1BDT0RFX0NPTkRURVNUX0ZBSUw6CisJCS8qIENvbmRpdGlvbiBmYWlsZWQgLSByZXR1cm4gdG8gbmV4dCBpbnN0cnVjdGlvbiAqLworCQlnb3RvIHJldDsKKwljYXNlIEFSTV9PUENPREVfQ09ORFRFU1RfVU5DT05EOgorCQkvKiBJZiB1bmNvbmRpdGlvbmFsIGVuY29kaW5nIC0gbm90IGEgYmFycmllciBpbnN0cnVjdGlvbiAqLworCQlyZXR1cm4gLUVGQVVMVDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGFhcmNoMzJfaW5zbl9tY3JfZXh0cmFjdF9jcm0oaW5zdHIpKSB7CisJY2FzZSAxMDoKKwkJLyoKKwkJICogZG1iIC0gbWNyIHAxNSwgMCwgUnQsIGM3LCBjMTAsIDUKKwkJICogZHNiIC0gbWNyIHAxNSwgMCwgUnQsIGM3LCBjMTAsIDQKKwkJICovCisJCWlmIChhYXJjaDMyX2luc25fbWNyX2V4dHJhY3Rfb3BjMihpbnN0cikgPT0gNSkgeworCQkJZG1iKHN5KTsKKwkJCXRyYWNlX2luc3RydWN0aW9uX2VtdWxhdGlvbigKKwkJCQkibWNyIHAxNSwgMCwgUnQsIGM3LCBjMTAsIDUgOyBkbWIiLCByZWdzLT5wYyk7CisJCX0gZWxzZSB7CisJCQlkc2Ioc3kpOworCQkJdHJhY2VfaW5zdHJ1Y3Rpb25fZW11bGF0aW9uKAorCQkJCSJtY3IgcDE1LCAwLCBSdCwgYzcsIGMxMCwgNCA7IGRzYiIsIHJlZ3MtPnBjKTsKKwkJfQorCQlicmVhazsKKwljYXNlIDU6CisJCS8qCisJCSAqIGlzYiAtIG1jciBwMTUsIDAsIFJ0LCBjNywgYzUsIDQKKwkJICoKKwkJICogVGFraW5nIGFuIGV4Y2VwdGlvbiBvciByZXR1cm5pbmcgZnJvbSBvbmUgYWN0cyBhcyBhbgorCQkgKiBpbnN0cnVjdGlvbiBiYXJyaWVyLiBTbyBubyBleHBsaWNpdCBiYXJyaWVyIG5lZWRlZCBoZXJlLgorCQkgKi8KKwkJdHJhY2VfaW5zdHJ1Y3Rpb25fZW11bGF0aW9uKAorCQkJIm1jciBwMTUsIDAsIFJ0LCBjNywgYzUsIDQgOyBpc2IiLCByZWdzLT5wYyk7CisJCWJyZWFrOworCX0KKworcmV0OgorCXByX3dhcm5fcmF0ZWxpbWl0ZWQoIlwiJXNcIiAoJWxkKSB1c2VzIGRlcHJlY2F0ZWQgQ1AxNSBCYXJyaWVyIGluc3RydWN0aW9uIGF0IDB4JWxseFxuIiwKKwkJCWN1cnJlbnQtPmNvbW0sICh1bnNpZ25lZCBsb25nKWN1cnJlbnQtPnBpZCwgcmVncy0+cGMpOworCisJcmVncy0+cGMgKz0gNDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBTQ1RMUl9FTDFfQ1AxNUJFTiAoMSA8PCA1KQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlnX3NjdGxyX2VsMSh1MzIgY2xlYXIsIHUzMiBzZXQpCit7CisJdTMyIHZhbDsKKworCWFzbSB2b2xhdGlsZSgibXJzICUwLCBzY3Rscl9lbDEiIDogIj1yIiAodmFsKSk7CisJdmFsICY9IH5jbGVhcjsKKwl2YWwgfD0gc2V0OworCWFzbSB2b2xhdGlsZSgibXNyIHNjdGxyX2VsMSwgJTAiIDogOiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfY3AxNV9iZW4odm9pZCAqaW5mbykKK3sKKwljb25maWdfc2N0bHJfZWwxKDAsIFNDVExSX0VMMV9DUDE1QkVOKTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9jcDE1X2Jlbih2b2lkICppbmZvKQoreworCWNvbmZpZ19zY3Rscl9lbDEoU0NUTFJfRUwxX0NQMTVCRU4sIDApOworfQorCitzdGF0aWMgaW50IGNwdV9ob3RwbHVnX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmIsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX1NUQVJUSU5HOgorCWNhc2UgQ1BVX1NUQVJUSU5HX0ZST1pFTjoKKwkJZW5hYmxlX2NwMTVfYmVuKE5VTEwpOworCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJY2FzZSBDUFVfRFlJTkc6CisJY2FzZSBDUFVfRFlJTkdfRlJPWkVOOgorCQlkaXNhYmxlX2NwMTVfYmVuKE5VTEwpOworCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcHVfaG90cGx1Z19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGNwdV9ob3RwbHVnX25vdGlmeSwKK307CisKK3N0YXRpYyBpbnQgY3AxNV9iYXJyaWVyX3NldF9od19tb2RlKGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpIHsKKwkJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfaG90cGx1Z19ub3RpZmllcik7CisJCW9uX2VhY2hfY3B1KGVuYWJsZV9jcDE1X2JlbiwgTlVMTCwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9ob3RwbHVnX25vdGlmaWVyKTsKKwkJb25fZWFjaF9jcHUoZGlzYWJsZV9jcDE1X2JlbiwgTlVMTCwgdHJ1ZSk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdW5kZWZfaG9vayBjcDE1X2JhcnJpZXJfaG9va3NbXSA9IHsKKwl7CisJCS5pbnN0cl9tYXNrCT0gMHgwZmZmMGZkZiwKKwkJLmluc3RyX3ZhbAk9IDB4MGUwNzBmOWEsCisJCS5wc3RhdGVfbWFzawk9IENPTVBBVF9QU1JfTU9ERV9NQVNLLAorCQkucHN0YXRlX3ZhbAk9IENPTVBBVF9QU1JfTU9ERV9VU1IsCisJCS5mbgkJPSBjcDE1YmFycmllcl9oYW5kbGVyLAorCX0sCisJeworCQkuaW5zdHJfbWFzawk9IDB4MGZmZjBmZmYsCisJCS5pbnN0cl92YWwJPSAweDBlMDcwZjk1LAorCQkucHN0YXRlX21hc2sJPSBDT01QQVRfUFNSX01PREVfTUFTSywKKwkJLnBzdGF0ZV92YWwJPSBDT01QQVRfUFNSX01PREVfVVNSLAorCQkuZm4JCT0gY3AxNWJhcnJpZXJfaGFuZGxlciwKKwl9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBpbnNuX2VtdWxhdGlvbl9vcHMgY3AxNV9iYXJyaWVyX29wcyA9IHsKKwkubmFtZSA9ICJjcDE1X2JhcnJpZXIiLAorCS5zdGF0dXMgPSBJTlNOX0RFUFJFQ0FURUQsCisJLmhvb2tzID0gY3AxNV9iYXJyaWVyX2hvb2tzLAorCS5zZXRfaHdfbW9kZSA9IGNwMTVfYmFycmllcl9zZXRfaHdfbW9kZSwKK307CisKKy8qCisgKiBJbnZva2VkIGFzIGxhdGVfaW5pdGNhbGwsIHNpbmNlIG5vdCBuZWVkZWQgYmVmb3JlIGluaXQgc3Bhd25lZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgYXJtdjhfZGVwcmVjYXRlZF9pbml0KHZvaWQpCit7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1NXUF9FTVVMQVRJT04pKQorCQlyZWdpc3Rlcl9pbnNuX2VtdWxhdGlvbigmc3dwX29wcyk7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1AxNV9CQVJSSUVSX0VNVUxBVElPTikpCisJCXJlZ2lzdGVyX2luc25fZW11bGF0aW9uKCZjcDE1X2JhcnJpZXJfb3BzKTsKKworCXJlZ2lzdGVyX2luc25fZW11bGF0aW9uX3N5c2N0bChjdGxfYWJpKTsKKworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGFybXY4X2RlcHJlY2F0ZWRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2MjYzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvbnRhaW5zIENQVSBzcGVjaWZpYyBlcnJhdGEgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQVJNIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgImFsdGVybmF0aXZlczogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKworI2RlZmluZSBNSURSX0NPUlRFWF9BNTMgTUlEUl9DUFVfUEFSVChBUk1fQ1BVX0lNUF9BUk0sIEFSTV9DUFVfUEFSVF9DT1JURVhfQTUzKQorI2RlZmluZSBNSURSX0NPUlRFWF9BNTcgTUlEUl9DUFVfUEFSVChBUk1fQ1BVX0lNUF9BUk0sIEFSTV9DUFVfUEFSVF9DT1JURVhfQTU3KQorCisvKgorICogQWRkIGEgc3RydWN0IG9yIGFub3RoZXIgZGF0YXR5cGUgdG8gdGhlIHVuaW9uIGJlbG93IGlmIHlvdSBuZWVkCisgKiBkaWZmZXJlbnQgbWVhbnMgdG8gZGV0ZWN0IGFuIGFmZmVjdGVkIENQVS4KKyAqLworc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgeworCWNvbnN0IGNoYXIgKmRlc2M7CisJdTE2IGNhcGFiaWxpdHk7CisJYm9vbCAoKmlzX2FmZmVjdGVkKShzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqKTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIgbWlkcl9tb2RlbDsKKwkJCXUzMiBtaWRyX3JhbmdlX21pbiwgbWlkcl9yYW5nZV9tYXg7CisJCX07CisJfTsKK307CisKKyNkZWZpbmUgQ1BVX01PREVMX01BU0sgKE1JRFJfSU1QTEVNRU5UT1JfTUFTSyB8IE1JRFJfUEFSVE5VTV9NQVNLIHwgXAorCQkJTUlEUl9BUkNISVRFQ1RVUkVfTUFTSykKKworc3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQKK2lzX2FmZmVjdGVkX21pZHJfcmFuZ2Uoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5KQoreworCXUzMiBtaWRyID0gcmVhZF9jcHVpZF9pZCgpOworCisJaWYgKChtaWRyICYgQ1BVX01PREVMX01BU0spICE9IGVudHJ5LT5taWRyX21vZGVsKQorCQlyZXR1cm4gZmFsc2U7CisKKwltaWRyICY9IE1JRFJfUkVWSVNJT05fTUFTSyB8IE1JRFJfVkFSSUFOVF9NQVNLOworCisJcmV0dXJuIChtaWRyID49IGVudHJ5LT5taWRyX3JhbmdlX21pbiAmJiBtaWRyIDw9IGVudHJ5LT5taWRyX3JhbmdlX21heCk7Cit9CisKKyNkZWZpbmUgTUlEUl9SQU5HRShtb2RlbCwgbWluLCBtYXgpIFwKKwkuaXNfYWZmZWN0ZWQgPSBpc19hZmZlY3RlZF9taWRyX3JhbmdlLCBcCisJLm1pZHJfbW9kZWwgPSBtb2RlbCwgXAorCS5taWRyX3JhbmdlX21pbiA9IG1pbiwgXAorCS5taWRyX3JhbmdlX21heCA9IG1heAorCitzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9lcnJhdGFbXSA9IHsKKyNpZglkZWZpbmVkKENPTkZJR19BUk02NF9FUlJBVFVNXzgyNjMxOSkgfHwgXAorCWRlZmluZWQoQ09ORklHX0FSTTY0X0VSUkFUVU1fODI3MzE5KSB8fCBcCisJZGVmaW5lZChDT05GSUdfQVJNNjRfRVJSQVRVTV84MjQwNjkpCisJeworCS8qIENvcnRleC1BNTMgcjBwWzAxMl0gKi8KKwkJLmRlc2MgPSAiQVJNIGVycmF0YSA4MjYzMTksIDgyNzMxOSwgODI0MDY5IiwKKwkJLmNhcGFiaWxpdHkgPSBBUk02NF9XT1JLQVJPVU5EX0NMRUFOX0NBQ0hFLAorCQlNSURSX1JBTkdFKE1JRFJfQ09SVEVYX0E1MywgMHgwMCwgMHgwMiksCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUk02NF9FUlJBVFVNXzgxOTQ3MgorCXsKKwkvKiBDb3J0ZXgtQTUzIHIwcFswMV0gKi8KKwkJLmRlc2MgPSAiQVJNIGVycmF0YSA4MTk0NzIiLAorCQkuY2FwYWJpbGl0eSA9IEFSTTY0X1dPUktBUk9VTkRfQ0xFQU5fQ0FDSEUsCisJCU1JRFJfUkFOR0UoTUlEUl9DT1JURVhfQTUzLCAweDAwLCAweDAxKSwKKwl9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSTTY0X0VSUkFUVU1fODMyMDc1CisJeworCS8qIENvcnRleC1BNTcgcjBwMCAtIHIxcDIgKi8KKwkJLmRlc2MgPSAiQVJNIGVycmF0dW0gODMyMDc1IiwKKwkJLmNhcGFiaWxpdHkgPSBBUk02NF9XT1JLQVJPVU5EX0RFVklDRV9MT0FEX0FDUVVJUkUsCisJCU1JRFJfUkFOR0UoTUlEUl9DT1JURVhfQTU3LCAweDAwLCAweDEyKSwKKwl9LAorI2VuZGlmCisJeworCX0KK307CisKK3ZvaWQgY2hlY2tfbG9jYWxfY3B1X2VycmF0YSh2b2lkKQoreworCXN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjcHVzID0gYXJtNjRfZXJyYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgY3B1c1tpXS5kZXNjOyBpKyspIHsKKwkJaWYgKCFjcHVzW2ldLmlzX2FmZmVjdGVkKCZjcHVzW2ldKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghY3B1c19oYXZlX2NhcChjcHVzW2ldLmNhcGFiaWxpdHkpKQorCQkJcHJfaW5mbygiZW5hYmxpbmcgd29ya2Fyb3VuZCBmb3IgJXNcbiIsIGNwdXNbaV0uZGVzYyk7CisJCWNwdXNfc2V0X2NhcChjcHVzW2ldLmNhcGFiaWxpdHkpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYwppbmRleCA1MDRmZGFhLi41N2I2NDE3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hldHlwZS5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KQEAgLTExMSw2ICsxMTIsMTUgQEAKIAlkaWZmIHw9IENIRUNLKGNudGZycSwgYm9vdCwgY3VyLCBjcHUpOwogCiAJLyoKKwkgKiBUaGUga2VybmVsIHVzZXMgc2VsZi1ob3N0ZWQgZGVidWcgZmVhdHVyZXMgYW5kIGV4cGVjdHMgQ1BVcyB0bworCSAqIHN1cHBvcnQgaWRlbnRpY2FsIGRlYnVnIGZlYXR1cmVzLiBXZSBwcmVzZW50bHkgbmVlZCBDVFhfQ01QcywgV1JQcywKKwkgKiBhbmQgQlJQcyB0byBiZSBpZGVudGljYWwuCisJICogSURfQUE2NERGUjEgaXMgY3VycmVudGx5IFJFUzAuCisJICovCisJZGlmZiB8PSBDSEVDSyhpZF9hYTY0ZGZyMCwgYm9vdCwgY3VyLCBjcHUpOworCWRpZmYgfD0gQ0hFQ0soaWRfYWE2NGRmcjEsIGJvb3QsIGN1ciwgY3B1KTsKKworCS8qCiAJICogRXZlbiBpbiBiaWcuTElUVExFLCBwcm9jZXNzb3JzIHNob3VsZCBiZSBpZGVudGljYWwgaW5zdHJ1Y3Rpb24tc2V0CiAJICogd2lzZS4KIAkgKi8KQEAgLTE0Myw3ICsxNTMsMTIgQEAKIAlkaWZmIHw9IENIRUNLKGlkX2lzYXIzLCBib290LCBjdXIsIGNwdSk7CiAJZGlmZiB8PSBDSEVDSyhpZF9pc2FyNCwgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfaXNhcjUsIGJvb3QsIGN1ciwgY3B1KTsKLQlkaWZmIHw9IENIRUNLKGlkX21tZnIwLCBib290LCBjdXIsIGNwdSk7CisJLyoKKwkgKiBSZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGUgQXV4UmVnIGZpZWxkLCB0aGUgQUlGU1IsIEFERlNSLCBhbmQKKwkgKiBBQ1RMUiBmb3JtYXRzIGNvdWxkIGRpZmZlciBhY3Jvc3MgQ1BVcyBhbmQgdGhlcmVmb3JlIHdvdWxkIGhhdmUgdG8KKwkgKiBiZSB0cmFwcGVkIGZvciB2aXJ0dWFsaXphdGlvbiBhbnl3YXkuCisJICovCisJZGlmZiB8PSBDSEVDS19NQVNLKGlkX21tZnIwLCAweGZmMGZmZmZmLCBib290LCBjdXIsIGNwdSk7CiAJZGlmZiB8PSBDSEVDSyhpZF9tbWZyMSwgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfbW1mcjIsIGJvb3QsIGN1ciwgY3B1KTsKIAlkaWZmIHw9IENIRUNLKGlkX21tZnIzLCBib290LCBjdXIsIGNwdSk7CkBAIC0xNTUsNyArMTcwLDcgQEAKIAkgKiBwcmV0ZW5kIHRvIHN1cHBvcnQgdGhlbS4KIAkgKi8KIAlXQVJOX1RBSU5UX09OQ0UoZGlmZiwgVEFJTlRfQ1BVX09VVF9PRl9TUEVDLAotCQkJIlVuc3VwcG9ydGVkIENQVSBmZWF0dXJlIHZhcmlhdGlvbi4iKTsKKwkJCSJVbnN1cHBvcnRlZCBDUFUgZmVhdHVyZSB2YXJpYXRpb24uXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbmZvX3N0b3JlX2NwdShzdHJ1Y3QgY3B1aW5mb19hcm02NCAqaW5mbykKQEAgLTE2NSw2ICsxODAsOCBAQAogCWluZm8tPnJlZ19kY3ppZCA9IHJlYWRfY3B1aWQoRENaSURfRUwwKTsKIAlpbmZvLT5yZWdfbWlkciA9IHJlYWRfY3B1aWRfaWQoKTsKIAorCWluZm8tPnJlZ19pZF9hYTY0ZGZyMCA9IHJlYWRfY3B1aWQoSURfQUE2NERGUjBfRUwxKTsKKwlpbmZvLT5yZWdfaWRfYWE2NGRmcjEgPSByZWFkX2NwdWlkKElEX0FBNjRERlIxX0VMMSk7CiAJaW5mby0+cmVnX2lkX2FhNjRpc2FyMCA9IHJlYWRfY3B1aWQoSURfQUE2NElTQVIwX0VMMSk7CiAJaW5mby0+cmVnX2lkX2FhNjRpc2FyMSA9IHJlYWRfY3B1aWQoSURfQUE2NElTQVIxX0VMMSk7CiAJaW5mby0+cmVnX2lkX2FhNjRtbWZyMCA9IHJlYWRfY3B1aWQoSURfQUE2NE1NRlIwX0VMMSk7CkBAIC0xODYsNiArMjAzLDggQEAKIAlpbmZvLT5yZWdfaWRfcGZyMSA9IHJlYWRfY3B1aWQoSURfUEZSMV9FTDEpOwogCiAJY3B1aW5mb19kZXRlY3RfaWNhY2hlX3BvbGljeShpbmZvKTsKKworCWNoZWNrX2xvY2FsX2NwdV9lcnJhdGEoKTsKIH0KIAogdm9pZCBjcHVpbmZvX3N0b3JlX2NwdSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZWZpLWVudHJ5LlMgYi9hcmNoL2FybTY0L2tlcm5lbC9lZmktZW50cnkuUwppbmRleCA2MTliMWRkLi44Y2U5YjA1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9lZmktZW50cnkuUworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9lZmktZW50cnkuUwpAQCAtNTQsMTggKzU0LDE4IEBACiAJYi5lcQllZmlfbG9hZF9mYWlsCiAKIAkvKgotCSAqIGVmaV9lbnRyeSgpIHdpbGwgaGF2ZSByZWxvY2F0ZWQgdGhlIGtlcm5lbCBpbWFnZSBpZiBuZWNlc3NhcnkKLQkgKiBhbmQgd2UgcmV0dXJuIGhlcmUgd2l0aCBkZXZpY2UgdHJlZSBhZGRyZXNzIGluIHgwIGFuZCB0aGUga2VybmVsCi0JICogZW50cnkgcG9pbnQgc3RvcmVkIGF0ICppbWFnZV9hZGRyLiBTYXZlIHRob3NlIHZhbHVlcyBpbiByZWdpc3RlcnMKLQkgKiB3aGljaCBhcmUgY2FsbGVlIHByZXNlcnZlZC4KKwkgKiBlZmlfZW50cnkoKSB3aWxsIGhhdmUgY29waWVkIHRoZSBrZXJuZWwgaW1hZ2UgaWYgbmVjZXNzYXJ5IGFuZCB3ZQorCSAqIHJldHVybiBoZXJlIHdpdGggZGV2aWNlIHRyZWUgYWRkcmVzcyBpbiB4MCBhbmQgdGhlIGtlcm5lbCBlbnRyeQorCSAqIHBvaW50IHN0b3JlZCBhdCAqaW1hZ2VfYWRkci4gU2F2ZSB0aG9zZSB2YWx1ZXMgaW4gcmVnaXN0ZXJzIHdoaWNoCisJICogYXJlIGNhbGxlZSBwcmVzZXJ2ZWQuCiAJICovCiAJbW92CXgyMCwgeDAJCS8vIERUQiBhZGRyZXNzCiAJbGRyCXgwLCBbc3AsICMxNl0JLy8gcmVsb2NhdGVkIF90ZXh0IGFkZHJlc3MKLQltb3YJeDIxLCB4MAorCWxkcgl4MjEsID1zdGV4dF9vZmZzZXQKKwlhZGQJeDIxLCB4MCwgeDIxCiAKIAkvKgotCSAqIEZsdXNoIGRjYWNoZSBjb3ZlcmluZyBjdXJyZW50IHJ1bnRpbWUgYWRkcmVzc2VzCi0JICogb2Yga2VybmVsIHRleHQvZGF0YS4gVGhlbiBmbHVzaCBhbGwgb2YgaWNhY2hlLgorCSAqIENhbGN1bGF0ZSBzaXplIG9mIHRoZSBrZXJuZWwgSW1hZ2UgKHNhbWUgZm9yIG9yaWdpbmFsIGFuZCBjb3B5KS4KIAkgKi8KIAlhZHJwCXgxLCBfdGV4dAogCWFkZAl4MSwgeDEsICM6bG8xMjpfdGV4dApAQCAtNzMsOSArNzMsMjQgQEAKIAlhZGQJeDIsIHgyLCAjOmxvMTI6X2VkYXRhCiAJc3ViCXgxLCB4MiwgeDEKIAorCS8qCisJICogRmx1c2ggdGhlIGNvcGllZCBJbWFnZSB0byB0aGUgUG9DLCBhbmQgZW5zdXJlIGl0IGlzIG5vdCBzaGFkb3dlZCBieQorCSAqIHN0YWxlIGljYWNoZSBlbnRyaWVzIGZyb20gYmVmb3JlIHJlbG9jYXRpb24uCisJICovCiAJYmwJX19mbHVzaF9kY2FjaGVfYXJlYQogCWljCWlhbGx1aXMKIAorCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiAoaW4gdGhlIG9yaWdpbmFsIEltYWdlKSBpcworCSAqIHZpc2libGUgd2hlbiB0aGUgY2FjaGVzIGFyZSBkaXNhYmxlZC4gVGhlIEktY2FjaGUgY2FuJ3QgaGF2ZSBzdGFsZQorCSAqIGVudHJpZXMgZm9yIHRoZSBWQSByYW5nZSBvZiB0aGUgY3VycmVudCBpbWFnZSwgc28gbm8gbWFpbnRlbmFuY2UgaXMKKwkgKiBuZWNlc3NhcnkuCisJICovCisJYWRyCXgwLCBlZmlfc3R1Yl9lbnRyeQorCWFkcgl4MSwgZWZpX3N0dWJfZW50cnlfZW5kCisJc3ViCXgxLCB4MSwgeDAKKwlibAlfX2ZsdXNoX2RjYWNoZV9hcmVhCisKIAkvKiBUdXJuIG9mZiBEY2FjaGUgYW5kIE1NVSAqLwogCW1ycwl4MCwgQ3VycmVudEVMCiAJY21wCXgwLCAjQ3VycmVudEVMX0VMMgpAQCAtMTA1LDQgKzEyMCw1IEBACiAJbGRwCXgyOSwgeDMwLCBbc3BdLCAjMzIKIAlyZXQKIAorZWZpX3N0dWJfZW50cnlfZW5kOgogRU5EUFJPQyhlZmlfc3R1Yl9lbnRyeSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2VmaS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMKaW5kZXggOTVjNDllYi4uNmZhYzI1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMKQEAgLTExLDYgKzExLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CkBAIC0xMTIsOCArMTEzLDYgQEAKIAkJZWZpLnN5c3RhYi0+aGRyLnJldmlzaW9uICYgMHhmZmZmLCB2ZW5kb3IpOwogCiAJcmV0dmFsID0gZWZpX2NvbmZpZ19pbml0KE5VTEwpOwotCWlmIChyZXR2YWwgPT0gMCkKLQkJc2V0X2JpdChFRklfQ09ORklHX1RBQkxFUywgJmVmaS5mbGFncyk7CiAKIG91dDoKIAllYXJseV9tZW11bm1hcChlZmkuc3lzdGFiLCAgc2l6ZW9mKGVmaV9zeXN0ZW1fdGFibGVfdCkpOwpAQCAtMTI1LDE3ICsxMjQsMTcgQEAKICAqLwogc3RhdGljIF9faW5pdCBpbnQgaXNfcmVzZXJ2ZV9yZWdpb24oZWZpX21lbW9yeV9kZXNjX3QgKm1kKQogewotCWlmICghaXNfbm9ybWFsX3JhbShtZCkpCisJc3dpdGNoIChtZC0+dHlwZSkgeworCWNhc2UgRUZJX0xPQURFUl9DT0RFOgorCWNhc2UgRUZJX0xPQURFUl9EQVRBOgorCWNhc2UgRUZJX0JPT1RfU0VSVklDRVNfQ09ERToKKwljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6CisJY2FzZSBFRklfQ09OVkVOVElPTkFMX01FTU9SWToKIAkJcmV0dXJuIDA7Ci0KLQlpZiAobWQtPmF0dHJpYnV0ZSAmIEVGSV9NRU1PUllfUlVOVElNRSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAobWQtPnR5cGUgPT0gRUZJX0FDUElfUkVDTEFJTV9NRU1PUlkgfHwKLQkgICAgbWQtPnR5cGUgPT0gRUZJX1JFU0VSVkVEX1RZUEUpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBpc19ub3JtYWxfcmFtKG1kKTsKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKQpAQCAtNDcxLDMgKzQ3MCwxNyBAQAogCXJldHVybiAtMTsKIH0KIGVhcmx5X2luaXRjYWxsKGFybTY0X2VudGVyX3ZpcnR1YWxfbW9kZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGFybTY0X2RtaV9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBPbiBhcm02NCwgRE1JIGRlcGVuZHMgb24gVUVGSSwgYW5kIGRtaV9zY2FuX21hY2hpbmUoKSBuZWVkcyB0bworCSAqIGJlIGNhbGxlZCBlYXJseSBiZWNhdXNlIGRtaV9pZF9pbml0KCksIHdoaWNoIGlzIGFuIGFyY2hfaW5pdGNhbGwKKwkgKiBpdHNlbGYsIGRlcGVuZHMgb24gZG1pX3NjYW5fbWFjaGluZSgpIGhhdmluZyBiZWVuIGNhbGxlZCBhbHJlYWR5LgorCSAqLworCWRtaV9zY2FuX21hY2hpbmUoKTsKKwlpZiAoZG1pX2F2YWlsYWJsZSkKKwkJZG1pX3NldF9kdW1wX3N0YWNrX2FyY2hfZGVzYygpOworCXJldHVybiAwOworfQorY29yZV9pbml0Y2FsbChhcm02NF9kbWlfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1mdHJhY2UuUyBiL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LWZ0cmFjZS5TCmluZGV4IDM4ZTcwNGUuLjA4Y2FmYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LWZ0cmFjZS5TCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LWZ0cmFjZS5TCkBAIC05OCw4ICs5OCw4IEBACiBFTlRSWShfbWNvdW50KQogCW1jb3VudF9lbnRlcgogCi0JbGRyCXgwLCA9ZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCi0JbGRyCXgyLCBbeDBdCisJYWRycAl4MCwgZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCisJbGRyCXgyLCBbeDAsICM6bG8xMjpmdHJhY2VfdHJhY2VfZnVuY3Rpb25dCiAJYWRyCXgwLCBmdHJhY2Vfc3R1YgogCWNtcAl4MCwgeDIJCQkvLyBpZiAoZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCiAJYi5lcQlza2lwX2Z0cmFjZV9jYWxsCS8vICAgICAhPSBmdHJhY2Vfc3R1YikgewpAQCAtMTE1LDE0ICsxMTUsMTUgQEAKIAltY291bnRfZXhpdAkJCS8vICAgcmV0dXJuOwogCQkJCQkvLyB9CiBza2lwX2Z0cmFjZV9jYWxsOgotCWxkcgl4MSwgPWZ0cmFjZV9ncmFwaF9yZXR1cm4KLQlsZHIJeDIsIFt4MV0JCS8vICAgaWYgKChmdHJhY2VfZ3JhcGhfcmV0dXJuCi0JY21wCXgwLCB4MgkJCS8vICAgICAgICAhPSBmdHJhY2Vfc3R1YikKLQliLm5lCWZ0cmFjZV9ncmFwaF9jYWxsZXIKKwlhZHJwCXgxLCBmdHJhY2VfZ3JhcGhfcmV0dXJuCisJbGRyCXgyLCBbeDEsICM6bG8xMjpmdHJhY2VfZ3JhcGhfcmV0dXJuXQorCWNtcAl4MCwgeDIJCQkvLyAgIGlmICgoZnRyYWNlX2dyYXBoX3JldHVybgorCWIubmUJZnRyYWNlX2dyYXBoX2NhbGxlcgkvLyAgICAgICAgIT0gZnRyYWNlX3N0dWIpCiAKLQlsZHIJeDEsID1mdHJhY2VfZ3JhcGhfZW50cnkJLy8gICAgIHx8IChmdHJhY2VfZ3JhcGhfZW50cnkKLQlsZHIJeDIsIFt4MV0JCS8vICAgICAgICAhPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YikpCi0JbGRyCXgwLCA9ZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIKKwlhZHJwCXgxLCBmdHJhY2VfZ3JhcGhfZW50cnkJLy8gICAgIHx8IChmdHJhY2VfZ3JhcGhfZW50cnkKKwlhZHJwCXgwLCBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YiAvLyAgICAgIT0gZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIpKQorCWxkcgl4MiwgW3gxLCAjOmxvMTI6ZnRyYWNlX2dyYXBoX2VudHJ5XQorCWFkZAl4MCwgeDAsICM6bG8xMjpmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YgogCWNtcAl4MCwgeDIKIAliLm5lCWZ0cmFjZV9ncmFwaF9jYWxsZXIJLy8gICAgIGZ0cmFjZV9ncmFwaF9jYWxsZXIoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LlMKaW5kZXggNzI2YjkxMC4uZmQ0ZmEzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS5TCkBAIC02NCwyNSArNjQsMjYgQEAKICNkZWZpbmUgQkFEX0VSUk9SCTMKIAogCS5tYWNybwlrZXJuZWxfZW50cnksIGVsLCByZWdzaXplID0gNjQKLQlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gU19MUgkvLyByb29tIGZvciBMUiwgU1AsIFNQU1IsIEVMUgorCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKIAkuaWYJXHJlZ3NpemUgPT0gMzIKIAltb3YJdzAsIHcwCQkJCS8vIHplcm8gdXBwZXIgMzIgYml0cyBvZiB4MAogCS5lbmRpZgotCXB1c2gJeDI4LCB4MjkKLQlwdXNoCXgyNiwgeDI3Ci0JcHVzaAl4MjQsIHgyNQotCXB1c2gJeDIyLCB4MjMKLQlwdXNoCXgyMCwgeDIxCi0JcHVzaAl4MTgsIHgxOQotCXB1c2gJeDE2LCB4MTcKLQlwdXNoCXgxNCwgeDE1Ci0JcHVzaAl4MTIsIHgxMwotCXB1c2gJeDEwLCB4MTEKLQlwdXNoCXg4LCB4OQotCXB1c2gJeDYsIHg3Ci0JcHVzaAl4NCwgeDUKLQlwdXNoCXgyLCB4MwotCXB1c2gJeDAsIHgxCisJc3RwCXgwLCB4MSwgW3NwLCAjMTYgKiAwXQorCXN0cAl4MiwgeDMsIFtzcCwgIzE2ICogMV0KKwlzdHAJeDQsIHg1LCBbc3AsICMxNiAqIDJdCisJc3RwCXg2LCB4NywgW3NwLCAjMTYgKiAzXQorCXN0cAl4OCwgeDksIFtzcCwgIzE2ICogNF0KKwlzdHAJeDEwLCB4MTEsIFtzcCwgIzE2ICogNV0KKwlzdHAJeDEyLCB4MTMsIFtzcCwgIzE2ICogNl0KKwlzdHAJeDE0LCB4MTUsIFtzcCwgIzE2ICogN10KKwlzdHAJeDE2LCB4MTcsIFtzcCwgIzE2ICogOF0KKwlzdHAJeDE4LCB4MTksIFtzcCwgIzE2ICogOV0KKwlzdHAJeDIwLCB4MjEsIFtzcCwgIzE2ICogMTBdCisJc3RwCXgyMiwgeDIzLCBbc3AsICMxNiAqIDExXQorCXN0cAl4MjQsIHgyNSwgW3NwLCAjMTYgKiAxMl0KKwlzdHAJeDI2LCB4MjcsIFtzcCwgIzE2ICogMTNdCisJc3RwCXgyOCwgeDI5LCBbc3AsICMxNiAqIDE0XQorCiAJLmlmCVxlbCA9PSAwCiAJbXJzCXgyMSwgc3BfZWwwCiAJZ2V0X3RocmVhZF9pbmZvIHRzawkJCS8vIEVuc3VyZSBNRFNDUl9FTDEuU1MgaXMgY2xlYXIsCkBAIC0xMTgsMzMgKzExOSwzMSBAQAogCS5pZglcZWwgPT0gMAogCWN0X3VzZXJfZW50ZXIKIAlsZHIJeDIzLCBbc3AsICNTX1NQXQkJLy8gbG9hZCByZXR1cm4gc3RhY2sgcG9pbnRlcgotCS5lbmRpZgotCS5pZglccmV0Ci0JbGRyCXgxLCBbc3AsICNTX1gxXQkJCS8vIHByZXNlcnZlIHgwIChzeXNjYWxsIHJldHVybikKLQlhZGQJc3AsIHNwLCBTX1gyCi0JLmVsc2UKLQlwb3AJeDAsIHgxCi0JLmVuZGlmCi0JcG9wCXgyLCB4MwkJCQkvLyBsb2FkIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMKLQlwb3AJeDQsIHg1Ci0JcG9wCXg2LCB4NwotCXBvcAl4OCwgeDkKLQltc3IJZWxyX2VsMSwgeDIxCQkJLy8gc2V0IHVwIHRoZSByZXR1cm4gZGF0YQotCW1zcglzcHNyX2VsMSwgeDIyCi0JLmlmCVxlbCA9PSAwCiAJbXNyCXNwX2VsMCwgeDIzCiAJLmVuZGlmCi0JcG9wCXgxMCwgeDExCi0JcG9wCXgxMiwgeDEzCi0JcG9wCXgxNCwgeDE1Ci0JcG9wCXgxNiwgeDE3Ci0JcG9wCXgxOCwgeDE5Ci0JcG9wCXgyMCwgeDIxCi0JcG9wCXgyMiwgeDIzCi0JcG9wCXgyNCwgeDI1Ci0JcG9wCXgyNiwgeDI3Ci0JcG9wCXgyOCwgeDI5Ci0JbGRyCWxyLCBbc3BdLCAjU19GUkFNRV9TSVpFIC0gU19MUgkvLyBsb2FkIExSIGFuZCByZXN0b3JlIFNQCisJbXNyCWVscl9lbDEsIHgyMQkJCS8vIHNldCB1cCB0aGUgcmV0dXJuIGRhdGEKKwltc3IJc3Bzcl9lbDEsIHgyMgorCS5pZglccmV0CisJbGRyCXgxLCBbc3AsICNTX1gxXQkJCS8vIHByZXNlcnZlIHgwIChzeXNjYWxsIHJldHVybikKKwkuZWxzZQorCWxkcAl4MCwgeDEsIFtzcCwgIzE2ICogMF0KKwkuZW5kaWYKKwlsZHAJeDIsIHgzLCBbc3AsICMxNiAqIDFdCisJbGRwCXg0LCB4NSwgW3NwLCAjMTYgKiAyXQorCWxkcAl4NiwgeDcsIFtzcCwgIzE2ICogM10KKwlsZHAJeDgsIHg5LCBbc3AsICMxNiAqIDRdCisJbGRwCXgxMCwgeDExLCBbc3AsICMxNiAqIDVdCisJbGRwCXgxMiwgeDEzLCBbc3AsICMxNiAqIDZdCisJbGRwCXgxNCwgeDE1LCBbc3AsICMxNiAqIDddCisJbGRwCXgxNiwgeDE3LCBbc3AsICMxNiAqIDhdCisJbGRwCXgxOCwgeDE5LCBbc3AsICMxNiAqIDldCisJbGRwCXgyMCwgeDIxLCBbc3AsICMxNiAqIDEwXQorCWxkcAl4MjIsIHgyMywgW3NwLCAjMTYgKiAxMV0KKwlsZHAJeDI0LCB4MjUsIFtzcCwgIzE2ICogMTJdCisJbGRwCXgyNiwgeDI3LCBbc3AsICMxNiAqIDEzXQorCWxkcAl4MjgsIHgyOSwgW3NwLCAjMTYgKiAxNF0KKwlsZHIJbHIsIFtzcCwgI1NfTFJdCisJYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRQkJLy8gcmVzdG9yZSBzcAogCWVyZXQJCQkJCS8vIHJldHVybiB0byBrZXJuZWwKIAkuZW5kbQogCkBAIC0xNjgsNyArMTY3LDggQEAKICAqIEludGVycnVwdCBoYW5kbGluZy4KICAqLwogCS5tYWNybwlpcnFfaGFuZGxlcgotCWxkcgl4MSwgaGFuZGxlX2FyY2hfaXJxCisJYWRycAl4MSwgaGFuZGxlX2FyY2hfaXJxCisJbGRyCXgxLCBbeDEsICM6bG8xMjpoYW5kbGVfYXJjaF9pcnFdCiAJbW92CXgwLCBzcAogCWJscgl4MQogCS5lbmRtCkBAIC00NTUsOCArNDU1LDggQEAKIAliaWMJeDAsIHgyNiwgIygweGZmIDw8IDU2KQogCW1vdgl4MSwgeDI1CiAJbW92CXgyLCBzcAotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWRvX21lbV9hYm9ydAorCWJsCWRvX21lbV9hYm9ydAorCWIJcmV0X3RvX3VzZXIKIGVsMF9pYToKIAkvKgogCSAqIEluc3RydWN0aW9uIGFib3J0IGhhbmRsaW5nCkBAIC00NjgsOCArNDY4LDggQEAKIAltb3YJeDAsIHgyNgogCW9ycgl4MSwgeDI1LCAjMSA8PCAyNAkJLy8gdXNlIHJlc2VydmVkIElTUyBiaXQgZm9yIGluc3RydWN0aW9uIGFib3J0cwogCW1vdgl4Miwgc3AKLQlhZHIJbHIsIHJldF90b191c2VyCi0JYglkb19tZW1fYWJvcnQKKwlibAlkb19tZW1fYWJvcnQKKwliCXJldF90b191c2VyCiBlbDBfZnBzaW1kX2FjYzoKIAkvKgogCSAqIEZsb2F0aW5nIFBvaW50IG9yIEFkdmFuY2VkIFNJTUQgYWNjZXNzCkBAIC00NzgsOCArNDc4LDggQEAKIAljdF91c2VyX2V4aXQKIAltb3YJeDAsIHgyNQogCW1vdgl4MSwgc3AKLQlhZHIJbHIsIHJldF90b191c2VyCi0JYglkb19mcHNpbWRfYWNjCisJYmwJZG9fZnBzaW1kX2FjYworCWIJcmV0X3RvX3VzZXIKIGVsMF9mcHNpbWRfZXhjOgogCS8qCiAJICogRmxvYXRpbmcgUG9pbnQgb3IgQWR2YW5jZWQgU0lNRCBleGNlcHRpb24KQEAgLTQ4OCw4ICs0ODgsOCBAQAogCWN0X3VzZXJfZXhpdAogCW1vdgl4MCwgeDI1CiAJbW92CXgxLCBzcAotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWRvX2Zwc2ltZF9leGMKKwlibAlkb19mcHNpbWRfZXhjCisJYglyZXRfdG9fdXNlcgogZWwwX3NwX3BjOgogCS8qCiAJICogU3RhY2sgb3IgUEMgYWxpZ25tZW50IGV4Y2VwdGlvbiBoYW5kbGluZwpAQCAtNTAwLDggKzUwMCw4IEBACiAJbW92CXgwLCB4MjYKIAltb3YJeDEsIHgyNQogCW1vdgl4Miwgc3AKLQlhZHIJbHIsIHJldF90b191c2VyCi0JYglkb19zcF9wY19hYm9ydAorCWJsCWRvX3NwX3BjX2Fib3J0CisJYglyZXRfdG9fdXNlcgogZWwwX3VuZGVmOgogCS8qCiAJICogVW5kZWZpbmVkIGluc3RydWN0aW9uCkBAIC01MTAsOCArNTEwLDggQEAKIAllbmFibGVfZGJnX2FuZF9pcnEKIAljdF91c2VyX2V4aXQKIAltb3YJeDAsIHNwCi0JYWRyCWxyLCByZXRfdG9fdXNlcgotCWIJZG9fdW5kZWZpbnN0cgorCWJsCWRvX3VuZGVmaW5zdHIKKwliCXJldF90b191c2VyCiBlbDBfZGJnOgogCS8qCiAJICogRGVidWcgZXhjZXB0aW9uIGhhbmRsaW5nCkBAIC01MzAsOCArNTMwLDggQEAKIAltb3YJeDAsIHNwCiAJbW92CXgxLCAjQkFEX1NZTkMKIAltcnMJeDIsIGVzcl9lbDEKLQlhZHIJbHIsIHJldF90b191c2VyCi0JYgliYWRfbW9kZQorCWJsCWJhZF9tb2RlCisJYglyZXRfdG9fdXNlcgogRU5EUFJPQyhlbDBfc3luYykKIAogCS5hbGlnbgk2CkBAIC02NTMsMTQgKzY1MywxNSBAQAogCWxkcgl4MTYsIFt0c2ssICNUSV9GTEFHU10JCS8vIGNoZWNrIGZvciBzeXNjYWxsIGhvb2tzCiAJdHN0CXgxNiwgI19USUZfU1lTQ0FMTF9XT1JLCiAJYi5uZQlfX3N5c190cmFjZQotCWFkcglsciwgcmV0X2Zhc3Rfc3lzY2FsbAkJLy8gcmV0dXJuIGFkZHJlc3MKIAljbXAgICAgIHNjbm8sIHNjX25yICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdXBwZXIgc3lzY2FsbCBsaW1pdAogCWIuaHMJbmlfc3lzCiAJbGRyCXgxNiwgW3N0YmwsIHNjbm8sIGxzbCAjM10JLy8gYWRkcmVzcyBpbiB0aGUgc3lzY2FsbCB0YWJsZQotCWJyCXgxNgkJCQkvLyBjYWxsIHN5c18qIHJvdXRpbmUKKwlibHIJeDE2CQkJCS8vIGNhbGwgc3lzXyogcm91dGluZQorCWIJcmV0X2Zhc3Rfc3lzY2FsbAogbmlfc3lzOgogCW1vdgl4MCwgc3AKLQliCWRvX25pX3N5c2NhbGwKKwlibAlkb19uaV9zeXNjYWxsCisJYglyZXRfZmFzdF9zeXNjYWxsCiBFTkRQUk9DKGVsMF9zdmMpCiAKIAkvKgpAQCAtNjY4LDI2ICs2NjksMzggQEAKIAkgKiBzd2l0Y2hlcywgYW5kIHdhaXRpbmcgZm9yIG91ciBwYXJlbnQgdG8gcmVzcG9uZC4KIAkgKi8KIF9fc3lzX3RyYWNlOgotCW1vdgl4MCwgc3AKKwltb3YJdzAsICMtMQkJCQkvLyBzZXQgZGVmYXVsdCBlcnJubyBmb3IKKwljbXAgICAgIHNjbm8sIHgwCQkJLy8gdXNlci1pc3N1ZWQgc3lzY2FsbCgtMSkKKwliLm5lCTFmCisJbW92CXgwLCAjLUVOT1NZUworCXN0cgl4MCwgW3NwLCAjU19YMF0KKzE6CW1vdgl4MCwgc3AKIAlibAlzeXNjYWxsX3RyYWNlX2VudGVyCi0JYWRyCWxyLCBfX3N5c190cmFjZV9yZXR1cm4JCS8vIHJldHVybiBhZGRyZXNzCisJY21wCXcwLCAjLTEJCQkJLy8gc2tpcCB0aGUgc3lzY2FsbD8KKwliLmVxCV9fc3lzX3RyYWNlX3JldHVybl9za2lwcGVkCiAJdXh0dwlzY25vLCB3MAkJCS8vIHN5c2NhbGwgbnVtYmVyIChwb3NzaWJseSBuZXcpCiAJbW92CXgxLCBzcAkJCQkvLyBwb2ludGVyIHRvIHJlZ3MKIAljbXAJc2Nubywgc2NfbnIJCQkvLyBjaGVjayB1cHBlciBzeXNjYWxsIGxpbWl0Ci0JYi5ocwluaV9zeXMKKwliLmhzCV9fbmlfc3lzX3RyYWNlCiAJbGRwCXgwLCB4MSwgW3NwXQkJCS8vIHJlc3RvcmUgdGhlIHN5c2NhbGwgYXJncwogCWxkcAl4MiwgeDMsIFtzcCwgI1NfWDJdCiAJbGRwCXg0LCB4NSwgW3NwLCAjU19YNF0KIAlsZHAJeDYsIHg3LCBbc3AsICNTX1g2XQogCWxkcgl4MTYsIFtzdGJsLCBzY25vLCBsc2wgIzNdCS8vIGFkZHJlc3MgaW4gdGhlIHN5c2NhbGwgdGFibGUKLQlicgl4MTYJCQkJLy8gY2FsbCBzeXNfKiByb3V0aW5lCisJYmxyCXgxNgkJCQkvLyBjYWxsIHN5c18qIHJvdXRpbmUKIAogX19zeXNfdHJhY2VfcmV0dXJuOgotCXN0cgl4MCwgW3NwXQkJCS8vIHNhdmUgcmV0dXJuZWQgeDAKKwlzdHIJeDAsIFtzcCwgI1NfWDBdCQkJLy8gc2F2ZSByZXR1cm5lZCB4MAorX19zeXNfdHJhY2VfcmV0dXJuX3NraXBwZWQ6CiAJbW92CXgwLCBzcAogCWJsCXN5c2NhbGxfdHJhY2VfZXhpdAogCWIJcmV0X3RvX3VzZXIKIAorX19uaV9zeXNfdHJhY2U6CisJbW92CXgwLCBzcAorCWJsCWRvX25pX3N5c2NhbGwKKwliCV9fc3lzX3RyYWNlX3JldHVybgorCiAvKgogICogU3BlY2lhbCBzeXN0ZW0gY2FsbCB3cmFwcGVycy4KICAqLwpAQCAtNjk1LDYgKzcwOCwzIEBACiAJbW92CXgwLCBzcAogCWIJc3lzX3J0X3NpZ3JldHVybgogRU5EUFJPQyhzeXNfcnRfc2lncmV0dXJuX3dyYXBwZXIpCi0KLUVOVFJZKGhhbmRsZV9hcmNoX2lycSkKLQkucXVhZAkwCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL2FybTY0L2tlcm5lbC9oZWFkLlMKaW5kZXggMGE2ZTRmOS4uOGNlODhlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2hlYWQuUwpAQCAtMTMyLDYgKzEzMiw4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19FRkkKKwkuZ2xvYmwJc3RleHRfb2Zmc2V0CisJLnNldAlzdGV4dF9vZmZzZXQsIHN0ZXh0IC0gZWZpX2hlYWQKIAkuYWxpZ24gMwogcGVfaGVhZGVyOgogCS5hc2NpaQkiUEUiCkBAIC0xNTUsMTIgKzE1NywxMiBAQAogCS5sb25nCTAJCQkJLy8gU2l6ZU9mSW5pdGlhbGl6ZWREYXRhCiAJLmxvbmcJMAkJCQkvLyBTaXplT2ZVbmluaXRpYWxpemVkRGF0YQogCS5sb25nCWVmaV9zdHViX2VudHJ5IC0gZWZpX2hlYWQJLy8gQWRkcmVzc09mRW50cnlQb2ludAotCS5sb25nCXN0ZXh0IC0gZWZpX2hlYWQJCS8vIEJhc2VPZkNvZGUKKwkubG9uZwlzdGV4dF9vZmZzZXQJCQkvLyBCYXNlT2ZDb2RlCiAKIGV4dHJhX2hlYWRlcl9maWVsZHM6CiAJLnF1YWQJMAkJCQkvLyBJbWFnZUJhc2UKLQkubG9uZwkweDIwCQkJCS8vIFNlY3Rpb25BbGlnbm1lbnQKLQkubG9uZwkweDgJCQkJLy8gRmlsZUFsaWdubWVudAorCS5sb25nCTB4MTAwMAkJCQkvLyBTZWN0aW9uQWxpZ25tZW50CisJLmxvbmcJUEVDT0ZGX0ZJTEVfQUxJR05NRU5UCQkvLyBGaWxlQWxpZ25tZW50CiAJLnNob3J0CTAJCQkJLy8gTWFqb3JPcGVyYXRpbmdTeXN0ZW1WZXJzaW9uCiAJLnNob3J0CTAJCQkJLy8gTWlub3JPcGVyYXRpbmdTeXN0ZW1WZXJzaW9uCiAJLnNob3J0CTAJCQkJLy8gTWFqb3JJbWFnZVZlcnNpb24KQEAgLTE3Miw3ICsxNzQsNyBAQAogCS5sb25nCV9lbmQgLSBlZmlfaGVhZAkJCS8vIFNpemVPZkltYWdlCiAKIAkvLyBFdmVyeXRoaW5nIGJlZm9yZSB0aGUga2VybmVsIGltYWdlIGlzIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgaGVhZGVyCi0JLmxvbmcJc3RleHQgLSBlZmlfaGVhZAkJLy8gU2l6ZU9mSGVhZGVycworCS5sb25nCXN0ZXh0X29mZnNldAkJCS8vIFNpemVPZkhlYWRlcnMKIAkubG9uZwkwCQkJCS8vIENoZWNrU3VtCiAJLnNob3J0CTB4YQkJCQkvLyBTdWJzeXN0ZW0gKEVGSSBhcHBsaWNhdGlvbikKIAkuc2hvcnQJMAkJCQkvLyBEbGxDaGFyYWN0ZXJpc3RpY3MKQEAgLTIxNywxNiArMjE5LDI0IEBACiAJLmJ5dGUJMAogCS5ieXRlCTAgICAgICAgIAkJLy8gZW5kIG9mIDAgcGFkZGluZyBvZiBzZWN0aW9uIG5hbWUKIAkubG9uZwlfZW5kIC0gc3RleHQJCS8vIFZpcnR1YWxTaXplCi0JLmxvbmcJc3RleHQgLSBlZmlfaGVhZAkvLyBWaXJ0dWFsQWRkcmVzcworCS5sb25nCXN0ZXh0X29mZnNldAkJLy8gVmlydHVhbEFkZHJlc3MKIAkubG9uZwlfZWRhdGEgLSBzdGV4dAkJLy8gU2l6ZU9mUmF3RGF0YQotCS5sb25nCXN0ZXh0IC0gZWZpX2hlYWQJLy8gUG9pbnRlclRvUmF3RGF0YQorCS5sb25nCXN0ZXh0X29mZnNldAkJLy8gUG9pbnRlclRvUmF3RGF0YQogCiAJLmxvbmcJMAkJLy8gUG9pbnRlclRvUmVsb2NhdGlvbnMgKDAgZm9yIGV4ZWN1dGFibGVzKQogCS5sb25nCTAJCS8vIFBvaW50ZXJUb0xpbmVOdW1iZXJzICgwIGZvciBleGVjdXRhYmxlcykKIAkuc2hvcnQJMAkJLy8gTnVtYmVyT2ZSZWxvY2F0aW9ucyAgKDAgZm9yIGV4ZWN1dGFibGVzKQogCS5zaG9ydAkwCQkvLyBOdW1iZXJPZkxpbmVOdW1iZXJzICAoMCBmb3IgZXhlY3V0YWJsZXMpCiAJLmxvbmcJMHhlMDUwMDAyMAkvLyBDaGFyYWN0ZXJpc3RpY3MgKHNlY3Rpb24gZmxhZ3MpCi0JLmFsaWduIDUKKworCS8qCisJICogRUZJIHdpbGwgbG9hZCBzdGV4dCBvbndhcmRzIGF0IHRoZSA0ayBzZWN0aW9uIGFsaWdubWVudAorCSAqIGRlc2NyaWJlZCBpbiB0aGUgUEUvQ09GRiBoZWFkZXIuIFRvIGVuc3VyZSB0aGF0IGluc3RydWN0aW9uCisJICogc2VxdWVuY2VzIHVzaW5nIGFuIGFkcnAgYW5kIGEgOmxvMTI6IGltbWVkaWF0ZSB3aWxsIGZ1bmN0aW9uCisJICogY29ycmVjdGx5IGF0IHRoaXMgYWxpZ25tZW50LCB3ZSBtdXN0IGVuc3VyZSB0aGF0IHN0ZXh0IGlzCisJICogcGxhY2VkIGF0IGEgNGsgYm91bmRhcnkgaW4gdGhlIEltYWdlIHRvIGJlZ2luIHdpdGguCisJICovCisJLmFsaWduIDEyCiAjZW5kaWYKIAogRU5UUlkoc3RleHQpCkBAIC0yMzgsNyArMjQ4LDEzIEBACiAJbW92CXgwLCB4MjIKIAlibAlsb29rdXBfcHJvY2Vzc29yX3R5cGUKIAltb3YJeDIzLCB4MAkJCQkvLyB4MjM9Y3VycmVudCBjcHVfdGFibGUKLQljYnoJeDIzLCBfX2Vycm9yX3AJCQkvLyBpbnZhbGlkIHByb2Nlc3NvciAoeDIzPTApPworCS8qCisJICogX19lcnJvcl9wIG1heSBlbmQgdXAgb3V0IG9mIHJhbmdlIGZvciBjYnogaWYgdGV4dCBhcmVhcyBhcmUKKwkgKiBhbGlnbmVkIHVwIHRvIHNlY3Rpb24gc2l6ZXMuCisJICovCisJY2Juegl4MjMsIDFmCQkJCS8vIGludmFsaWQgcHJvY2Vzc29yICh4MjM9MCk/CisJYglfX2Vycm9yX3AKKzE6CiAJYmwJX192ZXRfZmR0CiAJYmwJX19jcmVhdGVfcGFnZV90YWJsZXMJCS8vIHgyNT1UVEJSMCwgeDI2PVRUQlIxCiAJLyoKQEAgLTI1MCwyNDcgKzI2NiwzMSBAQAogCSAqLwogCWxkcgl4MjcsIF9fc3dpdGNoX2RhdGEJCS8vIGFkZHJlc3MgdG8ganVtcCB0byBhZnRlcgogCQkJCQkJLy8gTU1VIGhhcyBiZWVuIGVuYWJsZWQKLQlhZHIJbHIsIF9fZW5hYmxlX21tdQkJLy8gcmV0dXJuIChQSUMpIGFkZHJlc3MKKwlhZHJwCWxyLCBfX2VuYWJsZV9tbXUJCS8vIHJldHVybiAoUElDKSBhZGRyZXNzCisJYWRkCWxyLCBsciwgIzpsbzEyOl9fZW5hYmxlX21tdQogCWxkcgl4MTIsIFt4MjMsICNDUFVfSU5GT19TRVRVUF0KIAlhZGQJeDEyLCB4MTIsIHgyOAkJCS8vIF9fdmlydF90b19waHlzCiAJYnIJeDEyCQkJCS8vIGluaXRpYWxpc2UgcHJvY2Vzc29yCiBFTkRQUk9DKHN0ZXh0KQogCiAvKgotICogSWYgd2UncmUgZm9ydHVuYXRlIGVub3VnaCB0byBib290IGF0IEVMMiwgZW5zdXJlIHRoYXQgdGhlIHdvcmxkIGlzCi0gKiBzYW5lIGJlZm9yZSBkcm9wcGluZyB0byBFTDEuCi0gKgotICogUmV0dXJucyBlaXRoZXIgQk9PVF9DUFVfTU9ERV9FTDEgb3IgQk9PVF9DUFVfTU9ERV9FTDIgaW4geDIwIGlmCi0gKiBib290ZWQgaW4gRUwxIG9yIEVMMiByZXNwZWN0aXZlbHkuCisgKiBEZXRlcm1pbmUgdmFsaWRpdHkgb2YgdGhlIHgyMSBGRFQgcG9pbnRlci4KKyAqIFRoZSBkdGIgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZCBhbmQgbGl2ZSBpbiB0aGUgZmlyc3QgNTEyTSBvZiBtZW1vcnkuCiAgKi8KLUVOVFJZKGVsMl9zZXR1cCkKLQltcnMJeDAsIEN1cnJlbnRFTAotCWNtcAl4MCwgI0N1cnJlbnRFTF9FTDIKK19fdmV0X2ZkdDoKKwl0c3QJeDIxLCAjMHg3CiAJYi5uZQkxZgotCW1ycwl4MCwgc2N0bHJfZWwyCi1DUFVfQkUoCW9ycgl4MCwgeDAsICMoMSA8PCAyNSkJKQkvLyBTZXQgdGhlIEVFIGJpdCBmb3IgRUwyCi1DUFVfTEUoCWJpYwl4MCwgeDAsICMoMSA8PCAyNSkJKQkvLyBDbGVhciB0aGUgRUUgYml0IGZvciBFTDIKLQltc3IJc2N0bHJfZWwyLCB4MAotCWIJMmYKLTE6CW1ycwl4MCwgc2N0bHJfZWwxCi1DUFVfQkUoCW9ycgl4MCwgeDAsICMoMyA8PCAyNCkJKQkvLyBTZXQgdGhlIEVFIGFuZCBFMEUgYml0cyBmb3IgRUwxCi1DUFVfTEUoCWJpYwl4MCwgeDAsICMoMyA8PCAyNCkJKQkvLyBDbGVhciB0aGUgRUUgYW5kIEUwRSBiaXRzIGZvciBFTDEKLQltc3IJc2N0bHJfZWwxLCB4MAotCW1vdgl3MjAsICNCT09UX0NQVV9NT0RFX0VMMQkJLy8gVGhpcyBjcHUgYm9vdGVkIGluIEVMMQotCWlzYgorCWNtcAl4MjEsIHgyNAorCWIubHQJMWYKKwltb3YJeDAsICMoMSA8PCAyOSkKKwlhZGQJeDAsIHgwLCB4MjQKKwljbXAJeDIxLCB4MAorCWIuZ2UJMWYKIAlyZXQKLQotCS8qIEh5cCBjb25maWd1cmF0aW9uLiAqLwotMjoJbW92CXgwLCAjKDEgPDwgMzEpCQkJLy8gNjQtYml0IEVMMQotCW1zcgloY3JfZWwyLCB4MAotCi0JLyogR2VuZXJpYyB0aW1lcnMuICovCi0JbXJzCXgwLCBjbnRoY3RsX2VsMgotCW9ycgl4MCwgeDAsICMzCQkJLy8gRW5hYmxlIEVMMSBwaHlzaWNhbCB0aW1lcnMKLQltc3IJY250aGN0bF9lbDIsIHgwCi0JbXNyCWNudHZvZmZfZWwyLCB4enIJCS8vIENsZWFyIHZpcnR1YWwgb2Zmc2V0Ci0KLSNpZmRlZiBDT05GSUdfQVJNX0dJQ19WMwotCS8qIEdJQ3YzIHN5c3RlbSByZWdpc3RlciBhY2Nlc3MgKi8KLQltcnMJeDAsIGlkX2FhNjRwZnIwX2VsMQotCXViZngJeDAsIHgwLCAjMjQsICM0Ci0JY21wCXgwLCAjMQotCWIubmUJM2YKLQotCW1yc19zCXgwLCBJQ0NfU1JFX0VMMgotCW9ycgl4MCwgeDAsICNJQ0NfU1JFX0VMMl9TUkUJLy8gU2V0IElDQ19TUkVfRUwyLlNSRT09MQotCW9ycgl4MCwgeDAsICNJQ0NfU1JFX0VMMl9FTkFCTEUJLy8gU2V0IElDQ19TUkVfRUwyLkVuYWJsZT09MQotCW1zcl9zCUlDQ19TUkVfRUwyLCB4MAotCWlzYgkJCQkJLy8gTWFrZSBzdXJlIFNSRSBpcyBub3cgc2V0Ci0JbXNyX3MJSUNIX0hDUl9FTDIsIHh6cgkJLy8gUmVzZXQgSUNDX0hDUl9FTDIgdG8gZGVmYXVsdHMKLQotMzoKLSNlbmRpZgotCi0JLyogUG9wdWxhdGUgSUQgcmVnaXN0ZXJzLiAqLwotCW1ycwl4MCwgbWlkcl9lbDEKLQltcnMJeDEsIG1waWRyX2VsMQotCW1zcgl2cGlkcl9lbDIsIHgwCi0JbXNyCXZtcGlkcl9lbDIsIHgxCi0KLQkvKiBzY3Rscl9lbDEgKi8KLQltb3YJeDAsICMweDA4MDAJCQkvLyBTZXQvY2xlYXIgUkVTezEsMH0gYml0cwotQ1BVX0JFKAltb3ZrCXgwLCAjMHgzM2QwLCBsc2wgIzE2CSkJLy8gU2V0IEVFIGFuZCBFMEUgb24gQkUgc3lzdGVtcwotQ1BVX0xFKAltb3ZrCXgwLCAjMHgzMGQwLCBsc2wgIzE2CSkJLy8gQ2xlYXIgRUUgYW5kIEUwRSBvbiBMRSBzeXN0ZW1zCi0JbXNyCXNjdGxyX2VsMSwgeDAKLQotCS8qIENvcHJvY2Vzc29yIHRyYXBzLiAqLwotCW1vdgl4MCwgIzB4MzNmZgotCW1zcgljcHRyX2VsMiwgeDAJCQkvLyBEaXNhYmxlIGNvcHJvLiB0cmFwcyB0byBFTDIKLQotI2lmZGVmIENPTkZJR19DT01QQVQKLQltc3IJaHN0cl9lbDIsIHh6cgkJCS8vIERpc2FibGUgQ1AxNSB0cmFwcyB0byBFTDIKLSNlbmRpZgotCi0JLyogU3RhZ2UtMiB0cmFuc2xhdGlvbiAqLwotCW1zcgl2dHRicl9lbDIsIHh6cgotCi0JLyogSHlwZXJ2aXNvciBzdHViICovCi0JYWRyCXgwLCBfX2h5cF9zdHViX3ZlY3RvcnMKLQltc3IJdmJhcl9lbDIsIHgwCi0KLQkvKiBzcHNyICovCi0JbW92CXgwLCAjKFBTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFBTUl9BX0JJVCB8IFBTUl9EX0JJVCB8XAotCQkgICAgICBQU1JfTU9ERV9FTDFoKQotCW1zcglzcHNyX2VsMiwgeDAKLQltc3IJZWxyX2VsMiwgbHIKLQltb3YJdzIwLCAjQk9PVF9DUFVfTU9ERV9FTDIJCS8vIFRoaXMgQ1BVIGJvb3RlZCBpbiBFTDIKLQllcmV0Ci1FTkRQUk9DKGVsMl9zZXR1cCkKLQotLyoKLSAqIFNldHMgdGhlIF9fYm9vdF9jcHVfbW9kZSBmbGFnIGRlcGVuZGluZyBvbiB0aGUgQ1BVIGJvb3QgbW9kZSBwYXNzZWQKLSAqIGluIHgyMC4gU2VlIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oIGZvciBtb3JlIGluZm8uCi0gKi8KLUVOVFJZKHNldF9jcHVfYm9vdF9tb2RlX2ZsYWcpCi0JbGRyCXgxLCA9X19ib290X2NwdV9tb2RlCQkvLyBDb21wdXRlIF9fYm9vdF9jcHVfbW9kZQotCWFkZAl4MSwgeDEsIHgyOAotCWNtcAl3MjAsICNCT09UX0NQVV9NT0RFX0VMMgotCWIubmUJMWYKLQlhZGQJeDEsIHgxLCAjNAotMToJc3RyCXcyMCwgW3gxXQkJCS8vIFRoaXMgQ1BVIGhhcyBib290ZWQgaW4gRUwxCi0JZG1iCXN5Ci0JZGMJaXZhYywgeDEJCQkvLyBJbnZhbGlkYXRlIHBvdGVudGlhbGx5IHN0YWxlIGNhY2hlIGxpbmUKKzE6CisJbW92CXgyMSwgIzAKIAlyZXQKLUVORFBST0Moc2V0X2NwdV9ib290X21vZGVfZmxhZykKLQotLyoKLSAqIFdlIG5lZWQgdG8gZmluZCBvdXQgdGhlIENQVSBib290IG1vZGUgbG9uZyBhZnRlciBib290LCBzbyB3ZSBuZWVkIHRvCi0gKiBzdG9yZSBpdCBpbiBhIHdyaXRhYmxlIHZhcmlhYmxlLgotICoKLSAqIFRoaXMgaXMgbm90IGluIC5ic3MsIGJlY2F1c2Ugd2Ugc2V0IGl0IHN1ZmZpY2llbnRseSBlYXJseSB0aGF0IHRoZSBib290LXRpbWUKLSAqIHplcm9pbmcgb2YgLmJzcyB3b3VsZCBjbG9iYmVyIGl0LgotICovCi0JLnB1c2hzZWN0aW9uCS5kYXRhLi5jYWNoZWxpbmVfYWxpZ25lZAotRU5UUlkoX19ib290X2NwdV9tb2RlKQotCS5hbGlnbglMMV9DQUNIRV9TSElGVAotCS5sb25nCUJPT1RfQ1BVX01PREVfRUwyCi0JLmxvbmcJMAotCS5wb3BzZWN0aW9uCi0KLSNpZmRlZiBDT05GSUdfU01QCi0JLmFsaWduCTMKLTE6CS5xdWFkCS4KLQkucXVhZAlzZWNvbmRhcnlfaG9sZGluZ19wZW5fcmVsZWFzZQotCi0JLyoKLQkgKiBUaGlzIHByb3ZpZGVzIGEgImhvbGRpbmcgcGVuIiBmb3IgcGxhdGZvcm1zIHRvIGhvbGQgYWxsIHNlY29uZGFyeQotCSAqIGNvcmVzIGFyZSBoZWxkIHVudGlsIHdlJ3JlIHJlYWR5IGZvciB0aGVtIHRvIGluaXRpYWxpc2UuCi0JICovCi1FTlRSWShzZWNvbmRhcnlfaG9sZGluZ19wZW4pCi0JYmwJZWwyX3NldHVwCQkJLy8gRHJvcCB0byBFTDEsIHcyMD1jcHVfYm9vdF9tb2RlCi0JYmwJX19jYWxjX3BoeXNfb2Zmc2V0CQkvLyB4MjQ9UEhZU19PRkZTRVQsIHgyOD1QSFlTX09GRlNFVC1QQUdFX09GRlNFVAotCWJsCXNldF9jcHVfYm9vdF9tb2RlX2ZsYWcKLQltcnMJeDAsIG1waWRyX2VsMQotCWxkciAgICAgeDEsID1NUElEUl9IV0lEX0JJVE1BU0sKLQlhbmQJeDAsIHgwLCB4MQotCWFkcgl4MSwgMWIKLQlsZHAJeDIsIHgzLCBbeDFdCi0Jc3ViCXgxLCB4MSwgeDIKLQlhZGQJeDMsIHgzLCB4MQotcGVuOglsZHIJeDQsIFt4M10KLQljbXAJeDQsIHgwCi0JYi5lcQlzZWNvbmRhcnlfc3RhcnR1cAotCXdmZQotCWIJcGVuCi1FTkRQUk9DKHNlY29uZGFyeV9ob2xkaW5nX3BlbikKLQotCS8qCi0JICogU2Vjb25kYXJ5IGVudHJ5IHBvaW50IHRoYXQganVtcHMgc3RyYWlnaHQgaW50byB0aGUga2VybmVsLiBPbmx5IHRvCi0JICogYmUgdXNlZCB3aGVyZSBDUFVzIGFyZSBicm91Z2h0IG9ubGluZSBkeW5hbWljYWxseSBieSB0aGUga2VybmVsLgotCSAqLwotRU5UUlkoc2Vjb25kYXJ5X2VudHJ5KQotCWJsCWVsMl9zZXR1cAkJCS8vIERyb3AgdG8gRUwxCi0JYmwJX19jYWxjX3BoeXNfb2Zmc2V0CQkvLyB4MjQ9UEhZU19PRkZTRVQsIHgyOD1QSFlTX09GRlNFVC1QQUdFX09GRlNFVAotCWJsCXNldF9jcHVfYm9vdF9tb2RlX2ZsYWcKLQliCXNlY29uZGFyeV9zdGFydHVwCi1FTkRQUk9DKHNlY29uZGFyeV9lbnRyeSkKLQotRU5UUlkoc2Vjb25kYXJ5X3N0YXJ0dXApCi0JLyoKLQkgKiBDb21tb24gZW50cnkgcG9pbnQgZm9yIHNlY29uZGFyeSBDUFVzLgotCSAqLwotCW1ycwl4MjIsIG1pZHJfZWwxCQkJLy8geDIyPWNwdWlkCi0JbW92CXgwLCB4MjIKLQlibAlsb29rdXBfcHJvY2Vzc29yX3R5cGUKLQltb3YJeDIzLCB4MAkJCQkvLyB4MjM9Y3VycmVudCBjcHVfdGFibGUKLQljYnoJeDIzLCBfX2Vycm9yX3AJCQkvLyBpbnZhbGlkIHByb2Nlc3NvciAoeDIzPTApPwotCi0JcGd0YmwJeDI1LCB4MjYsIHgyOAkJCS8vIHgyNT1UVEJSMCwgeDI2PVRUQlIxCi0JbGRyCXgxMiwgW3gyMywgI0NQVV9JTkZPX1NFVFVQXQotCWFkZAl4MTIsIHgxMiwgeDI4CQkJLy8gX192aXJ0X3RvX3BoeXMKLQlibHIJeDEyCQkJCS8vIGluaXRpYWxpc2UgcHJvY2Vzc29yCi0KLQlsZHIJeDIxLCA9c2Vjb25kYXJ5X2RhdGEKLQlsZHIJeDI3LCA9X19zZWNvbmRhcnlfc3dpdGNoZWQJLy8gYWRkcmVzcyB0byBqdW1wIHRvIGFmdGVyIGVuYWJsaW5nIHRoZSBNTVUKLQliCV9fZW5hYmxlX21tdQotRU5EUFJPQyhzZWNvbmRhcnlfc3RhcnR1cCkKLQotRU5UUlkoX19zZWNvbmRhcnlfc3dpdGNoZWQpCi0JbGRyCXgwLCBbeDIxXQkJCS8vIGdldCBzZWNvbmRhcnlfZGF0YS5zdGFjawotCW1vdglzcCwgeDAKLQltb3YJeDI5LCAjMAotCWIJc2Vjb25kYXJ5X3N0YXJ0X2tlcm5lbAotRU5EUFJPQyhfX3NlY29uZGFyeV9zd2l0Y2hlZCkKLSNlbmRpZgkvKiBDT05GSUdfU01QICovCi0KLS8qCi0gKiBTZXR1cCBjb21tb24gYml0cyBiZWZvcmUgZmluYWxseSBlbmFibGluZyB0aGUgTU1VLiBFc3NlbnRpYWxseSB0aGlzIGlzIGp1c3QKLSAqIGxvYWRpbmcgdGhlIHBhZ2UgdGFibGUgcG9pbnRlciBhbmQgdmVjdG9yIGJhc2UgcmVnaXN0ZXJzLgotICoKLSAqIE9uIGVudHJ5IHRvIHRoaXMgY29kZSwgeDAgbXVzdCBjb250YWluIHRoZSBTQ1RMUl9FTDEgdmFsdWUgZm9yIHR1cm5pbmcgb24KLSAqIHRoZSBNTVUuCi0gKi8KLV9fZW5hYmxlX21tdToKLQlsZHIJeDUsID12ZWN0b3JzCi0JbXNyCXZiYXJfZWwxLCB4NQotCW1zcgl0dGJyMF9lbDEsIHgyNQkJCS8vIGxvYWQgVFRCUjAKLQltc3IJdHRicjFfZWwxLCB4MjYJCQkvLyBsb2FkIFRUQlIxCi0JaXNiCi0JYglfX3R1cm5fbW11X29uCi1FTkRQUk9DKF9fZW5hYmxlX21tdSkKLQotLyoKLSAqIEVuYWJsZSB0aGUgTU1VLiBUaGlzIGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSB2aXNpYmxlIG1lbW9yeQotICogc3BhY2UuIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHRyYWNlIGV4ZWN1dGlvbiB0aHJvdWdoIHRoaXMuCi0gKgotICogIHgwICA9IHN5c3RlbSBjb250cm9sIHJlZ2lzdGVyCi0gKiAgeDI3ID0gKnZpcnR1YWwqIGFkZHJlc3MgdG8ganVtcCB0byB1cG9uIGNvbXBsZXRpb24KLSAqCi0gKiBvdGhlciByZWdpc3RlcnMgZGVwZW5kIG9uIHRoZSBmdW5jdGlvbiBjYWxsZWQgdXBvbiBjb21wbGV0aW9uCi0gKgotICogV2UgYWxpZ24gdGhlIGVudGlyZSBmdW5jdGlvbiB0byB0aGUgc21hbGxlc3QgcG93ZXIgb2YgdHdvIGxhcmdlciB0aGFuIGl0IHRvCi0gKiBlbnN1cmUgaXQgZml0cyB3aXRoaW4gYSBzaW5nbGUgYmxvY2sgbWFwIGVudHJ5LiBPdGhlcndpc2Ugd2VyZSBQSFlTX09GRlNFVAotICogY2xvc2UgdG8gdGhlIGVuZCBvZiBhIDUxMk1CIG9yIDFHQiBibG9jayB3ZSBtaWdodCByZXF1aXJlIGFuIGFkZGl0aW9uYWwKLSAqIHRhYmxlIHRvIG1hcCB0aGUgZW50aXJlIGZ1bmN0aW9uLgotICovCi0JLmFsaWduCTQKLV9fdHVybl9tbXVfb246Ci0JbXNyCXNjdGxyX2VsMSwgeDAKLQlpc2IKLQlicgl4MjcKLUVORFBST0MoX190dXJuX21tdV9vbikKLQotLyoKLSAqIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgcGh5c2ljYWwgbWVtb3J5LgotICovCi1fX2NhbGNfcGh5c19vZmZzZXQ6Ci0JYWRyCXgwLCAxZgotCWxkcAl4MSwgeDIsIFt4MF0KLQlzdWIJeDI4LCB4MCwgeDEJCQkvLyB4MjggPSBQSFlTX09GRlNFVCAtIFBBR0VfT0ZGU0VUCi0JYWRkCXgyNCwgeDIsIHgyOAkJCS8vIHgyNCA9IFBIWVNfT0ZGU0VUCi0JcmV0Ci1FTkRQUk9DKF9fY2FsY19waHlzX29mZnNldCkKLQotCS5hbGlnbiAzCi0xOgkucXVhZAkuCi0JLnF1YWQJUEFHRV9PRkZTRVQKLQorRU5EUFJPQyhfX3ZldF9mZHQpCiAvKgogICogTWFjcm8gdG8gY3JlYXRlIGEgdGFibGUgZW50cnkgdG8gdGhlIG5leHQgcGFnZS4KICAqCkBAIC02NjksNiArNDY5LDI0NyBAQAogRU5EUFJPQyhfX21tYXBfc3dpdGNoZWQpCiAKIC8qCisgKiBlbmQgZWFybHkgaGVhZCBzZWN0aW9uLCBiZWdpbiBoZWFkIGNvZGUgdGhhdCBpcyBhbHNvIHVzZWQgZm9yCisgKiBob3RwbHVnIGFuZCBuZWVkcyB0byBoYXZlIHRoZSBzYW1lIHByb3RlY3Rpb25zIGFzIHRoZSB0ZXh0IHJlZ2lvbgorICovCisJLnNlY3Rpb24gIi50ZXh0IiwiYXgiCisvKgorICogSWYgd2UncmUgZm9ydHVuYXRlIGVub3VnaCB0byBib290IGF0IEVMMiwgZW5zdXJlIHRoYXQgdGhlIHdvcmxkIGlzCisgKiBzYW5lIGJlZm9yZSBkcm9wcGluZyB0byBFTDEuCisgKgorICogUmV0dXJucyBlaXRoZXIgQk9PVF9DUFVfTU9ERV9FTDEgb3IgQk9PVF9DUFVfTU9ERV9FTDIgaW4geDIwIGlmCisgKiBib290ZWQgaW4gRUwxIG9yIEVMMiByZXNwZWN0aXZlbHkuCisgKi8KK0VOVFJZKGVsMl9zZXR1cCkKKwltcnMJeDAsIEN1cnJlbnRFTAorCWNtcAl4MCwgI0N1cnJlbnRFTF9FTDIKKwliLm5lCTFmCisJbXJzCXgwLCBzY3Rscl9lbDIKK0NQVV9CRSgJb3JyCXgwLCB4MCwgIygxIDw8IDI1KQkpCS8vIFNldCB0aGUgRUUgYml0IGZvciBFTDIKK0NQVV9MRSgJYmljCXgwLCB4MCwgIygxIDw8IDI1KQkpCS8vIENsZWFyIHRoZSBFRSBiaXQgZm9yIEVMMgorCW1zcglzY3Rscl9lbDIsIHgwCisJYgkyZgorMToJbXJzCXgwLCBzY3Rscl9lbDEKK0NQVV9CRSgJb3JyCXgwLCB4MCwgIygzIDw8IDI0KQkpCS8vIFNldCB0aGUgRUUgYW5kIEUwRSBiaXRzIGZvciBFTDEKK0NQVV9MRSgJYmljCXgwLCB4MCwgIygzIDw8IDI0KQkpCS8vIENsZWFyIHRoZSBFRSBhbmQgRTBFIGJpdHMgZm9yIEVMMQorCW1zcglzY3Rscl9lbDEsIHgwCisJbW92CXcyMCwgI0JPT1RfQ1BVX01PREVfRUwxCQkvLyBUaGlzIGNwdSBib290ZWQgaW4gRUwxCisJaXNiCisJcmV0CisKKwkvKiBIeXAgY29uZmlndXJhdGlvbi4gKi8KKzI6CW1vdgl4MCwgIygxIDw8IDMxKQkJCS8vIDY0LWJpdCBFTDEKKwltc3IJaGNyX2VsMiwgeDAKKworCS8qIEdlbmVyaWMgdGltZXJzLiAqLworCW1ycwl4MCwgY250aGN0bF9lbDIKKwlvcnIJeDAsIHgwLCAjMwkJCS8vIEVuYWJsZSBFTDEgcGh5c2ljYWwgdGltZXJzCisJbXNyCWNudGhjdGxfZWwyLCB4MAorCW1zcgljbnR2b2ZmX2VsMiwgeHpyCQkvLyBDbGVhciB2aXJ0dWFsIG9mZnNldAorCisjaWZkZWYgQ09ORklHX0FSTV9HSUNfVjMKKwkvKiBHSUN2MyBzeXN0ZW0gcmVnaXN0ZXIgYWNjZXNzICovCisJbXJzCXgwLCBpZF9hYTY0cGZyMF9lbDEKKwl1YmZ4CXgwLCB4MCwgIzI0LCAjNAorCWNtcAl4MCwgIzEKKwliLm5lCTNmCisKKwltcnNfcwl4MCwgSUNDX1NSRV9FTDIKKwlvcnIJeDAsIHgwLCAjSUNDX1NSRV9FTDJfU1JFCS8vIFNldCBJQ0NfU1JFX0VMMi5TUkU9PTEKKwlvcnIJeDAsIHgwLCAjSUNDX1NSRV9FTDJfRU5BQkxFCS8vIFNldCBJQ0NfU1JFX0VMMi5FbmFibGU9PTEKKwltc3JfcwlJQ0NfU1JFX0VMMiwgeDAKKwlpc2IJCQkJCS8vIE1ha2Ugc3VyZSBTUkUgaXMgbm93IHNldAorCW1zcl9zCUlDSF9IQ1JfRUwyLCB4enIJCS8vIFJlc2V0IElDQ19IQ1JfRUwyIHRvIGRlZmF1bHRzCisKKzM6CisjZW5kaWYKKworCS8qIFBvcHVsYXRlIElEIHJlZ2lzdGVycy4gKi8KKwltcnMJeDAsIG1pZHJfZWwxCisJbXJzCXgxLCBtcGlkcl9lbDEKKwltc3IJdnBpZHJfZWwyLCB4MAorCW1zcgl2bXBpZHJfZWwyLCB4MQorCisJLyogc2N0bHJfZWwxICovCisJbW92CXgwLCAjMHgwODAwCQkJLy8gU2V0L2NsZWFyIFJFU3sxLDB9IGJpdHMKK0NQVV9CRSgJbW92awl4MCwgIzB4MzNkMCwgbHNsICMxNgkpCS8vIFNldCBFRSBhbmQgRTBFIG9uIEJFIHN5c3RlbXMKK0NQVV9MRSgJbW92awl4MCwgIzB4MzBkMCwgbHNsICMxNgkpCS8vIENsZWFyIEVFIGFuZCBFMEUgb24gTEUgc3lzdGVtcworCW1zcglzY3Rscl9lbDEsIHgwCisKKwkvKiBDb3Byb2Nlc3NvciB0cmFwcy4gKi8KKwltb3YJeDAsICMweDMzZmYKKwltc3IJY3B0cl9lbDIsIHgwCQkJLy8gRGlzYWJsZSBjb3Byby4gdHJhcHMgdG8gRUwyCisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJbXNyCWhzdHJfZWwyLCB4enIJCQkvLyBEaXNhYmxlIENQMTUgdHJhcHMgdG8gRUwyCisjZW5kaWYKKworCS8qIFN0YWdlLTIgdHJhbnNsYXRpb24gKi8KKwltc3IJdnR0YnJfZWwyLCB4enIKKworCS8qIEh5cGVydmlzb3Igc3R1YiAqLworCWFkcnAJeDAsIF9faHlwX3N0dWJfdmVjdG9ycworCWFkZAl4MCwgeDAsICM6bG8xMjpfX2h5cF9zdHViX3ZlY3RvcnMKKwltc3IJdmJhcl9lbDIsIHgwCisKKwkvKiBzcHNyICovCisJbW92CXgwLCAjKFBTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFBTUl9BX0JJVCB8IFBTUl9EX0JJVCB8XAorCQkgICAgICBQU1JfTU9ERV9FTDFoKQorCW1zcglzcHNyX2VsMiwgeDAKKwltc3IJZWxyX2VsMiwgbHIKKwltb3YJdzIwLCAjQk9PVF9DUFVfTU9ERV9FTDIJCS8vIFRoaXMgQ1BVIGJvb3RlZCBpbiBFTDIKKwllcmV0CitFTkRQUk9DKGVsMl9zZXR1cCkKKworLyoKKyAqIFNldHMgdGhlIF9fYm9vdF9jcHVfbW9kZSBmbGFnIGRlcGVuZGluZyBvbiB0aGUgQ1BVIGJvb3QgbW9kZSBwYXNzZWQKKyAqIGluIHgyMC4gU2VlIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oIGZvciBtb3JlIGluZm8uCisgKi8KK0VOVFJZKHNldF9jcHVfYm9vdF9tb2RlX2ZsYWcpCisJbGRyCXgxLCA9X19ib290X2NwdV9tb2RlCQkvLyBDb21wdXRlIF9fYm9vdF9jcHVfbW9kZQorCWFkZAl4MSwgeDEsIHgyOAorCWNtcAl3MjAsICNCT09UX0NQVV9NT0RFX0VMMgorCWIubmUJMWYKKwlhZGQJeDEsIHgxLCAjNAorMToJc3RyCXcyMCwgW3gxXQkJCS8vIFRoaXMgQ1BVIGhhcyBib290ZWQgaW4gRUwxCisJZG1iCXN5CisJZGMJaXZhYywgeDEJCQkvLyBJbnZhbGlkYXRlIHBvdGVudGlhbGx5IHN0YWxlIGNhY2hlIGxpbmUKKwlyZXQKK0VORFBST0Moc2V0X2NwdV9ib290X21vZGVfZmxhZykKKworLyoKKyAqIFdlIG5lZWQgdG8gZmluZCBvdXQgdGhlIENQVSBib290IG1vZGUgbG9uZyBhZnRlciBib290LCBzbyB3ZSBuZWVkIHRvCisgKiBzdG9yZSBpdCBpbiBhIHdyaXRhYmxlIHZhcmlhYmxlLgorICoKKyAqIFRoaXMgaXMgbm90IGluIC5ic3MsIGJlY2F1c2Ugd2Ugc2V0IGl0IHN1ZmZpY2llbnRseSBlYXJseSB0aGF0IHRoZSBib290LXRpbWUKKyAqIHplcm9pbmcgb2YgLmJzcyB3b3VsZCBjbG9iYmVyIGl0LgorICovCisJLnB1c2hzZWN0aW9uCS5kYXRhLi5jYWNoZWxpbmVfYWxpZ25lZAorRU5UUlkoX19ib290X2NwdV9tb2RlKQorCS5hbGlnbglMMV9DQUNIRV9TSElGVAorCS5sb25nCUJPT1RfQ1BVX01PREVfRUwyCisJLmxvbmcJMAorCS5wb3BzZWN0aW9uCisKKyNpZmRlZiBDT05GSUdfU01QCisJLmFsaWduCTMKKzE6CS5xdWFkCS4KKwkucXVhZAlzZWNvbmRhcnlfaG9sZGluZ19wZW5fcmVsZWFzZQorCisJLyoKKwkgKiBUaGlzIHByb3ZpZGVzIGEgImhvbGRpbmcgcGVuIiBmb3IgcGxhdGZvcm1zIHRvIGhvbGQgYWxsIHNlY29uZGFyeQorCSAqIGNvcmVzIGFyZSBoZWxkIHVudGlsIHdlJ3JlIHJlYWR5IGZvciB0aGVtIHRvIGluaXRpYWxpc2UuCisJICovCitFTlRSWShzZWNvbmRhcnlfaG9sZGluZ19wZW4pCisJYmwJZWwyX3NldHVwCQkJLy8gRHJvcCB0byBFTDEsIHcyMD1jcHVfYm9vdF9tb2RlCisJYmwJX19jYWxjX3BoeXNfb2Zmc2V0CQkvLyB4MjQ9UEhZU19PRkZTRVQsIHgyOD1QSFlTX09GRlNFVC1QQUdFX09GRlNFVAorCWJsCXNldF9jcHVfYm9vdF9tb2RlX2ZsYWcKKwltcnMJeDAsIG1waWRyX2VsMQorCWxkciAgICAgeDEsID1NUElEUl9IV0lEX0JJVE1BU0sKKwlhbmQJeDAsIHgwLCB4MQorCWFkcgl4MSwgMWIKKwlsZHAJeDIsIHgzLCBbeDFdCisJc3ViCXgxLCB4MSwgeDIKKwlhZGQJeDMsIHgzLCB4MQorcGVuOglsZHIJeDQsIFt4M10KKwljbXAJeDQsIHgwCisJYi5lcQlzZWNvbmRhcnlfc3RhcnR1cAorCXdmZQorCWIJcGVuCitFTkRQUk9DKHNlY29uZGFyeV9ob2xkaW5nX3BlbikKKworCS8qCisJICogU2Vjb25kYXJ5IGVudHJ5IHBvaW50IHRoYXQganVtcHMgc3RyYWlnaHQgaW50byB0aGUga2VybmVsLiBPbmx5IHRvCisJICogYmUgdXNlZCB3aGVyZSBDUFVzIGFyZSBicm91Z2h0IG9ubGluZSBkeW5hbWljYWxseSBieSB0aGUga2VybmVsLgorCSAqLworRU5UUlkoc2Vjb25kYXJ5X2VudHJ5KQorCWJsCWVsMl9zZXR1cAkJCS8vIERyb3AgdG8gRUwxCisJYmwJX19jYWxjX3BoeXNfb2Zmc2V0CQkvLyB4MjQ9UEhZU19PRkZTRVQsIHgyOD1QSFlTX09GRlNFVC1QQUdFX09GRlNFVAorCWJsCXNldF9jcHVfYm9vdF9tb2RlX2ZsYWcKKwliCXNlY29uZGFyeV9zdGFydHVwCitFTkRQUk9DKHNlY29uZGFyeV9lbnRyeSkKKworRU5UUlkoc2Vjb25kYXJ5X3N0YXJ0dXApCisJLyoKKwkgKiBDb21tb24gZW50cnkgcG9pbnQgZm9yIHNlY29uZGFyeSBDUFVzLgorCSAqLworCW1ycwl4MjIsIG1pZHJfZWwxCQkJLy8geDIyPWNwdWlkCisJbW92CXgwLCB4MjIKKwlibAlsb29rdXBfcHJvY2Vzc29yX3R5cGUKKwltb3YJeDIzLCB4MAkJCQkvLyB4MjM9Y3VycmVudCBjcHVfdGFibGUKKwljYnoJeDIzLCBfX2Vycm9yX3AJCQkvLyBpbnZhbGlkIHByb2Nlc3NvciAoeDIzPTApPworCisJcGd0YmwJeDI1LCB4MjYsIHgyOAkJCS8vIHgyNT1UVEJSMCwgeDI2PVRUQlIxCisJbGRyCXgxMiwgW3gyMywgI0NQVV9JTkZPX1NFVFVQXQorCWFkZAl4MTIsIHgxMiwgeDI4CQkJLy8gX192aXJ0X3RvX3BoeXMKKwlibHIJeDEyCQkJCS8vIGluaXRpYWxpc2UgcHJvY2Vzc29yCisKKwlsZHIJeDIxLCA9c2Vjb25kYXJ5X2RhdGEKKwlsZHIJeDI3LCA9X19zZWNvbmRhcnlfc3dpdGNoZWQJLy8gYWRkcmVzcyB0byBqdW1wIHRvIGFmdGVyIGVuYWJsaW5nIHRoZSBNTVUKKwliCV9fZW5hYmxlX21tdQorRU5EUFJPQyhzZWNvbmRhcnlfc3RhcnR1cCkKKworRU5UUlkoX19zZWNvbmRhcnlfc3dpdGNoZWQpCisJbGRyCXgwLCBbeDIxXQkJCS8vIGdldCBzZWNvbmRhcnlfZGF0YS5zdGFjaworCW1vdglzcCwgeDAKKwltb3YJeDI5LCAjMAorCWIJc2Vjb25kYXJ5X3N0YXJ0X2tlcm5lbAorRU5EUFJPQyhfX3NlY29uZGFyeV9zd2l0Y2hlZCkKKyNlbmRpZgkvKiBDT05GSUdfU01QICovCisKKy8qCisgKiBTZXR1cCBjb21tb24gYml0cyBiZWZvcmUgZmluYWxseSBlbmFibGluZyB0aGUgTU1VLiBFc3NlbnRpYWxseSB0aGlzIGlzIGp1c3QKKyAqIGxvYWRpbmcgdGhlIHBhZ2UgdGFibGUgcG9pbnRlciBhbmQgdmVjdG9yIGJhc2UgcmVnaXN0ZXJzLgorICoKKyAqIE9uIGVudHJ5IHRvIHRoaXMgY29kZSwgeDAgbXVzdCBjb250YWluIHRoZSBTQ1RMUl9FTDEgdmFsdWUgZm9yIHR1cm5pbmcgb24KKyAqIHRoZSBNTVUuCisgKi8KK19fZW5hYmxlX21tdToKKwlsZHIJeDUsID12ZWN0b3JzCisJbXNyCXZiYXJfZWwxLCB4NQorCW1zcgl0dGJyMF9lbDEsIHgyNQkJCS8vIGxvYWQgVFRCUjAKKwltc3IJdHRicjFfZWwxLCB4MjYJCQkvLyBsb2FkIFRUQlIxCisJaXNiCisJYglfX3R1cm5fbW11X29uCitFTkRQUk9DKF9fZW5hYmxlX21tdSkKKworLyoKKyAqIEVuYWJsZSB0aGUgTU1VLiBUaGlzIGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSB2aXNpYmxlIG1lbW9yeQorICogc3BhY2UuIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHRyYWNlIGV4ZWN1dGlvbiB0aHJvdWdoIHRoaXMuCisgKgorICogIHgwICA9IHN5c3RlbSBjb250cm9sIHJlZ2lzdGVyCisgKiAgeDI3ID0gKnZpcnR1YWwqIGFkZHJlc3MgdG8ganVtcCB0byB1cG9uIGNvbXBsZXRpb24KKyAqCisgKiBvdGhlciByZWdpc3RlcnMgZGVwZW5kIG9uIHRoZSBmdW5jdGlvbiBjYWxsZWQgdXBvbiBjb21wbGV0aW9uCisgKgorICogV2UgYWxpZ24gdGhlIGVudGlyZSBmdW5jdGlvbiB0byB0aGUgc21hbGxlc3QgcG93ZXIgb2YgdHdvIGxhcmdlciB0aGFuIGl0IHRvCisgKiBlbnN1cmUgaXQgZml0cyB3aXRoaW4gYSBzaW5nbGUgYmxvY2sgbWFwIGVudHJ5LiBPdGhlcndpc2Ugd2VyZSBQSFlTX09GRlNFVAorICogY2xvc2UgdG8gdGhlIGVuZCBvZiBhIDUxMk1CIG9yIDFHQiBibG9jayB3ZSBtaWdodCByZXF1aXJlIGFuIGFkZGl0aW9uYWwKKyAqIHRhYmxlIHRvIG1hcCB0aGUgZW50aXJlIGZ1bmN0aW9uLgorICovCisJLmFsaWduCTQKK19fdHVybl9tbXVfb246CisJbXNyCXNjdGxyX2VsMSwgeDAKKwlpc2IKKwlicgl4MjcKK0VORFBST0MoX190dXJuX21tdV9vbikKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgcGh5c2ljYWwgbWVtb3J5LgorICovCitfX2NhbGNfcGh5c19vZmZzZXQ6CisJYWRyCXgwLCAxZgorCWxkcAl4MSwgeDIsIFt4MF0KKwlzdWIJeDI4LCB4MCwgeDEJCQkvLyB4MjggPSBQSFlTX09GRlNFVCAtIFBBR0VfT0ZGU0VUCisJYWRkCXgyNCwgeDIsIHgyOAkJCS8vIHgyNCA9IFBIWVNfT0ZGU0VUCisJcmV0CitFTkRQUk9DKF9fY2FsY19waHlzX29mZnNldCkKKworCS5hbGlnbiAzCisxOgkucXVhZAkuCisJLnF1YWQJUEFHRV9PRkZTRVQKKworLyoKICAqIEV4Y2VwdGlvbiBoYW5kbGluZy4gU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIGNhbid0IHByb2NlZWQuIFdlIG91Z2h0IHRvCiAgKiB0ZWxsIHRoZSB1c2VyLCBidXQgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZ3VhcmFudGVlIHRoYXQgd2UncmUgZXZlbgogICogcnVubmluZyBvbiB0aGUgcmlnaHQgYXJjaGl0ZWN0dXJlLCB3ZSBkbyB2aXJ0dWFsbHkgbm90aGluZy4KQEAgLTcxNSwyMiArNzU2LDMgQEAKIAkucXVhZAkuCiAJLnF1YWQJY3B1X3RhYmxlCiAJLnNpemUJX19sb29rdXBfcHJvY2Vzc29yX3R5cGVfZGF0YSwgLiAtIF9fbG9va3VwX3Byb2Nlc3Nvcl90eXBlX2RhdGEKLQotLyoKLSAqIERldGVybWluZSB2YWxpZGl0eSBvZiB0aGUgeDIxIEZEVCBwb2ludGVyLgotICogVGhlIGR0YiBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkIGFuZCBsaXZlIGluIHRoZSBmaXJzdCA1MTJNIG9mIG1lbW9yeS4KLSAqLwotX192ZXRfZmR0OgotCXRzdAl4MjEsICMweDcKLQliLm5lCTFmCi0JY21wCXgyMSwgeDI0Ci0JYi5sdAkxZgotCW1vdgl4MCwgIygxIDw8IDI5KQotCWFkZAl4MCwgeDAsIHgyNAotCWNtcAl4MjEsIHgwCi0JYi5nZQkxZgotCXJldAotMToKLQltb3YJeDIxLCAjMAotCXJldAotRU5EUFJPQyhfX3ZldF9mZHQpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9pbnNuLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9pbnNuLmMKaW5kZXggZTAwNzcxNC4uN2U5MzI3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaW5zbi5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2luc24uYwpAQCAtMTYzLDkgKzE2MywxMCBAQAogCQkgKiB3aGljaCBlbmRzIHdpdGggImRzYjsgaXNiIiBwYWlyIGd1YXJhbnRlZWluZyBnbG9iYWwKIAkJICogdmlzaWJpbGl0eS4KIAkJICovCi0JCWF0b21pY19zZXQoJnBwLT5jcHVfY291bnQsIC0xKTsKKwkJLyogTm90aWZ5IG90aGVyIHByb2Nlc3NvcnMgd2l0aCBhbiBhZGRpdGlvbmFsIGluY3JlbWVudC4gKi8KKwkJYXRvbWljX2luYygmcHAtPmNwdV9jb3VudCk7CiAJfSBlbHNlIHsKLQkJd2hpbGUgKGF0b21pY19yZWFkKCZwcC0+Y3B1X2NvdW50KSAhPSAtMSkKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZwcC0+Y3B1X2NvdW50KSA8PSBudW1fb25saW5lX2NwdXMoKSkKIAkJCWNwdV9yZWxheCgpOwogCQlpc2IoKTsKIAl9CkBAIC05NTksMyArOTYwLDI5IEBACiAKIAlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7CiB9CisKK2Jvb2wgYWFyY2gzMl9pbnNuX2lzX3dpZGUodTMyIGluc24pCit7CisJcmV0dXJuIGluc24gPj0gMHhlODAwOworfQorCisvKgorICogTWFjcm9zL2RlZmluZXMgZm9yIGV4dHJhY3RpbmcgcmVnaXN0ZXIgbnVtYmVycyBmcm9tIGluc3RydWN0aW9uLgorICovCit1MzIgYWFyY2gzMl9pbnNuX2V4dHJhY3RfcmVnX251bSh1MzIgaW5zbiwgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKGluc24gJiAoMHhmIDw8IG9mZnNldCkpID4+IG9mZnNldDsKK30KKworI2RlZmluZSBPUEMyX01BU0sJMHg3CisjZGVmaW5lIE9QQzJfT0ZGU0VUCTUKK3UzMiBhYXJjaDMyX2luc25fbWNyX2V4dHJhY3Rfb3BjMih1MzIgaW5zbikKK3sKKwlyZXR1cm4gKGluc24gJiAoT1BDMl9NQVNLIDw8IE9QQzJfT0ZGU0VUKSkgPj4gT1BDMl9PRkZTRVQ7Cit9CisKKyNkZWZpbmUgQ1JNX01BU0sJMHhmCit1MzIgYWFyY2gzMl9pbnNuX21jcl9leHRyYWN0X2NybSh1MzIgaW5zbikKK3sKKwlyZXR1cm4gaW5zbiAmIENSTV9NQVNLOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvaW8uYyBiL2FyY2gvYXJtNjQva2VybmVsL2lvLmMKaW5kZXggN2QzN2VhZC4uMzU0YmUyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaW8uYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9pby5jCkBAIC0yNSwxMiArMjUsMjYgQEAKICAqLwogdm9pZCBfX21lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGNoYXIgKnQgPSB0bzsKLQl3aGlsZSAoY291bnQpIHsKLQkJY291bnQtLTsKLQkJKnQgPSByZWFkYihmcm9tKTsKLQkJdCsrOworCXdoaWxlIChjb3VudCAmJiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZnJvbSwgOCkgfHwKKwkJCSAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl0bywgOCkpKSB7CisJCSoodTggKil0byA9IF9fcmF3X3JlYWRiKGZyb20pOwogCQlmcm9tKys7CisJCXRvKys7CisJCWNvdW50LS07CisJfQorCisJd2hpbGUgKGNvdW50ID49IDgpIHsKKwkJKih1NjQgKil0byA9IF9fcmF3X3JlYWRxKGZyb20pOworCQlmcm9tICs9IDg7CisJCXRvICs9IDg7CisJCWNvdW50IC09IDg7CisJfQorCisJd2hpbGUgKGNvdW50KSB7CisJCSoodTggKil0byA9IF9fcmF3X3JlYWRiKGZyb20pOworCQlmcm9tKys7CisJCXRvKys7CisJCWNvdW50LS07CiAJfQogfQogRVhQT1JUX1NZTUJPTChfX21lbWNweV9mcm9taW8pOwpAQCAtNDAsMTIgKzU0LDI2IEBACiAgKi8KIHZvaWQgX19tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgY291bnQpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZiA9IGZyb207Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCWNvdW50LS07Ci0JCXdyaXRlYigqZiwgdG8pOwotCQlmKys7CisJd2hpbGUgKGNvdW50ICYmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl0bywgOCkgfHwKKwkJCSAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylmcm9tLCA4KSkpIHsKKwkJX19yYXdfd3JpdGViKCoodm9sYXRpbGUgdTggKilmcm9tLCB0byk7CisJCWZyb20rKzsKIAkJdG8rKzsKKwkJY291bnQtLTsKKwl9CisKKwl3aGlsZSAoY291bnQgPj0gOCkgeworCQlfX3Jhd193cml0ZXEoKih2b2xhdGlsZSB1NjQgKilmcm9tLCB0byk7CisJCWZyb20gKz0gODsKKwkJdG8gKz0gODsKKwkJY291bnQgLT0gODsKKwl9CisKKwl3aGlsZSAoY291bnQpIHsKKwkJX19yYXdfd3JpdGViKCoodm9sYXRpbGUgdTggKilmcm9tLCB0byk7CisJCWZyb20rKzsKKwkJdG8rKzsKKwkJY291bnQtLTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fbWVtY3B5X3RvaW8pOwpAQCAtNTUsMTAgKzgzLDI4IEBACiAgKi8KIHZvaWQgX19tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGludCBjLCBzaXplX3QgY291bnQpCiB7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCWNvdW50LS07Ci0JCXdyaXRlYihjLCBkc3QpOworCXU2NCBxYyA9ICh1OCljOworCisJcWMgfD0gcWMgPDwgODsKKwlxYyB8PSBxYyA8PCAxNjsKKwlxYyB8PSBxYyA8PCAzMjsKKworCXdoaWxlIChjb3VudCAmJiAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylkc3QsIDgpKSB7CisJCV9fcmF3X3dyaXRlYihjLCBkc3QpOwogCQlkc3QrKzsKKwkJY291bnQtLTsKKwl9CisKKwl3aGlsZSAoY291bnQgPj0gOCkgeworCQlfX3Jhd193cml0ZXEocWMsIGRzdCk7CisJCWRzdCArPSA4OworCQljb3VudCAtPSA4OworCX0KKworCXdoaWxlIChjb3VudCkgeworCQlfX3Jhd193cml0ZWIoYywgZHN0KTsKKwkJZHN0Kys7CisJCWNvdW50LS07CiAJfQogfQogRVhQT1JUX1NZTUJPTChfX21lbXNldF9pbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtNjQva2VybmVsL2lycS5jCmluZGV4IDA3MWE2ZWMuLjI0MGI3NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2lycS5jCkBAIC00MCw2ICs0MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgKCpoYW5kbGVfYXJjaF9pcnEpKHN0cnVjdCBwdF9yZWdzICopID0gTlVMTDsKKwogdm9pZCBfX2luaXQgc2V0X2hhbmRsZV9pcnEodm9pZCAoKmhhbmRsZV9pcnEpKHN0cnVjdCBwdF9yZWdzICopKQogewogCWlmIChoYW5kbGVfYXJjaF9pcnEpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9qdW1wX2xhYmVsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9qdW1wX2xhYmVsLmMKaW5kZXggMjYzYTE2Ni4uNGYxZmVjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvanVtcF9sYWJlbC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2p1bXBfbGFiZWwuYwpAQCAtMjIsOSArMjIsOCBAQAogCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCiAKLXN0YXRpYyB2b2lkIF9fYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksCi0JCQkJCWVudW0ganVtcF9sYWJlbF90eXBlIHR5cGUsCi0JCQkJCWJvb2wgaXNfc3RhdGljKQordm9pZCBhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQogewogCXZvaWQgKmFkZHIgPSAodm9pZCAqKWVudHJ5LT5jb2RlOwogCXUzMiBpbnNuOwpAQCAtMzcsMjIgKzM2LDE4IEBACiAJCWluc24gPSBhYXJjaDY0X2luc25fZ2VuX25vcCgpOwogCX0KIAotCWlmIChpc19zdGF0aWMpCi0JCWFhcmNoNjRfaW5zbl9wYXRjaF90ZXh0X25vc3luYyhhZGRyLCBpbnNuKTsKLQllbHNlCi0JCWFhcmNoNjRfaW5zbl9wYXRjaF90ZXh0KCZhZGRyLCAmaW5zbiwgMSk7Ci19Ci0KLXZvaWQgYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksCi0JCQkgICAgICAgZW51bSBqdW1wX2xhYmVsX3R5cGUgdHlwZSkKLXsKLQlfX2FyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm0oZW50cnksIHR5cGUsIGZhbHNlKTsKKwlhYXJjaDY0X2luc25fcGF0Y2hfdGV4dCgmYWRkciwgJmluc24sIDEpOwogfQogCiB2b2lkIGFyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm1fc3RhdGljKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKIAkJCQkgICAgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQogewotCV9fYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShlbnRyeSwgdHlwZSwgdHJ1ZSk7CisJLyoKKwkgKiBXZSB1c2UgdGhlIGFyY2hpdGVjdGVkIEE2NCBOT1AgaW4gYXJjaF9zdGF0aWNfYnJhbmNoLCBzbyB0aGVyZSdzIG5vCisJICogbmVlZCB0byBwYXRjaCBhbiBpZGVudGljYWwgQTY0IE5PUCBvdmVyIHRoZSB0b3Agb2YgaXQgaGVyZS4gVGhlIGNvcmUKKwkgKiB3aWxsIGNhbGwgYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybSBmcm9tIGEgbW9kdWxlIG5vdGlmaWVyIGlmIHRoZQorCSAqIE5PUCBuZWVkcyB0byBiZSByZXBsYWNlZCBieSBhIGJyYW5jaC4KKwkgKi8KIH0KIAogI2VuZGlmCS8qIEhBVkVfSlVNUF9MQUJFTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYwppbmRleCAxZWIxY2M5Li5mZDAyN2IxIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vaW5zbi5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAjZGVmaW5lCUFBUkNINjRfSU5TTl9JTU1fTU9WTloJCUFBUkNINjRfSU5TTl9JTU1fTUFYCiAjZGVmaW5lCUFBUkNINjRfSU5TTl9JTU1fTU9WSwkJQUFSQ0g2NF9JTlNOX0lNTV8xNgpAQCAtMzk0LDMgKzM5NSwyMCBAQAogCSAgICAgICBtZS0+bmFtZSwgKGludClFTEY2NF9SX1RZUEUocmVsW2ldLnJfaW5mbyksIHZhbCk7CiAJcmV0dXJuIC1FTk9FWEVDOwogfQorCitpbnQgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsCisJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKKwkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQoreworCWNvbnN0IEVsZl9TaGRyICpzLCAqc2U7CisJY29uc3QgY2hhciAqc2Vjc3RycyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKKworCWZvciAocyA9IHNlY2hkcnMsIHNlID0gc2VjaGRycyArIGhkci0+ZV9zaG51bTsgcyA8IHNlOyBzKyspIHsKKwkJaWYgKHN0cmNtcCgiLmFsdGluc3RydWN0aW9ucyIsIHNlY3N0cnMgKyBzLT5zaF9uYW1lKSA9PSAwKSB7CisJCQlhcHBseV9hbHRlcm5hdGl2ZXMoKHZvaWQgKilzLT5zaF9hZGRyLCBzLT5zaF9zaXplKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybTY0L2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggYWEyOWVjYi4uMjVhNTMwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTY5LDggKzE2OSwxNCBAQAogCQlyZXQgPSAxOwogCX0KIAotCWlmIChsZWZ0ID4gKHM2NClhcm1wbXUtPm1heF9wZXJpb2QpCi0JCWxlZnQgPSBhcm1wbXUtPm1heF9wZXJpb2Q7CisJLyoKKwkgKiBMaW1pdCB0aGUgbWF4aW11bSBwZXJpb2QgdG8gcHJldmVudCB0aGUgY291bnRlciB2YWx1ZQorCSAqIGZyb20gb3ZlcnRha2luZyB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBwcm9ncmFtLiBJbgorCSAqIGVmZmVjdCB3ZSBhcmUgcmVkdWNpbmcgbWF4X3BlcmlvZCB0byBhY2NvdW50IGZvcgorCSAqIGludGVycnVwdCBsYXRlbmN5IChhbmQgd2UgYXJlIGJlaW5nIHZlcnkgY29uc2VydmF0aXZlKS4KKwkgKi8KKwlpZiAobGVmdCA+IChhcm1wbXUtPm1heF9wZXJpb2QgPj4gMSkpCisJCWxlZnQgPSBhcm1wbXUtPm1heF9wZXJpb2QgPj4gMTsKIAogCWxvY2FsNjRfc2V0KCZod2MtPnByZXZfY291bnQsICh1NjQpLWxlZnQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wc2NpLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9wc2NpLmMKaW5kZXggODY2YzFjOC4uNjYzZGE3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcHNjaS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3BzY2kuYwpAQCAtNTI4LDcgKzUyOCw3IEBACiAJaWYgKFdBUk5fT05fT05DRSghaW5kZXgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChzdGF0ZS0+dHlwZSA9PSBQU0NJX1BPV0VSX1NUQVRFX1RZUEVfU1RBTkRCWSkKKwlpZiAoc3RhdGVbaW5kZXggLSAxXS50eXBlID09IFBTQ0lfUE9XRVJfU1RBVEVfVFlQRV9TVEFOREJZKQogCQlyZXQgPSBwc2NpX29wcy5jcHVfc3VzcGVuZChzdGF0ZVtpbmRleCAtIDFdLCAwKTsKIAllbHNlCiAJCXJldCA9IF9fY3B1X3N1c3BlbmQoaW5kZXgsIHBzY2lfc3VzcGVuZF9maW5pc2hlcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IDhhNGFlOGUuLmQ4ODJiODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY2NvbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KQEAgLTU1MSw2ICs1NTIsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHN5c3RlbV9jYWxsX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkJICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkJICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJaW50IHN5c2NhbGxubyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpLT5zeXNjYWxsbm87CisKKwlyZXR1cm4gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkgICAmc3lzY2FsbG5vLCAwLCAtMSk7Cit9CisKK3N0YXRpYyBpbnQgc3lzdGVtX2NhbGxfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCQkgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQkgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlpbnQgc3lzY2FsbG5vLCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsICZzeXNjYWxsbm8sIDAsIC0xKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdGFza19wdF9yZWdzKHRhcmdldCktPnN5c2NhbGxubyA9IHN5c2NhbGxubzsKKwlyZXR1cm4gcmV0OworfQorCiBlbnVtIGFhcmNoNjRfcmVnc2V0IHsKIAlSRUdTRVRfR1BSLAogCVJFR1NFVF9GUFIsCkBAIC01NTksNiArNTg2LDcgQEAKIAlSRUdTRVRfSFdfQlJFQUssCiAJUkVHU0VUX0hXX1dBVENILAogI2VuZGlmCisJUkVHU0VUX1NZU1RFTV9DQUxMLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBhYXJjaDY0X3JlZ3NldHNbXSA9IHsKQEAgLTYwOCw2ICs2MzYsMTQgQEAKIAkJLnNldCA9IGh3X2JyZWFrX3NldCwKIAl9LAogI2VuZGlmCisJW1JFR1NFVF9TWVNURU1fQ0FMTF0gPSB7CisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX0FSTV9TWVNURU1fQ0FMTCwKKwkJLm4gPSAxLAorCQkuc2l6ZSA9IHNpemVvZihpbnQpLAorCQkuYWxpZ24gPSBzaXplb2YoaW50KSwKKwkJLmdldCA9IHN5c3RlbV9jYWxsX2dldCwKKwkJLnNldCA9IHN5c3RlbV9jYWxsX3NldCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfYWFyY2g2NF92aWV3ID0gewpAQCAtMTExNCw2ICsxMTUwLDEwIEBACiAKIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJLyogRG8gdGhlIHNlY3VyZSBjb21wdXRpbmcgY2hlY2sgZmlyc3Q7IGZhaWx1cmVzIHNob3VsZCBiZSBmYXN0LiAqLworCWlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpCisJCXJldHVybiAtMTsKKwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKIAkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VOVEVSKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMKaW5kZXggMjQzNzE5Ni4uYjgwOTkxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jCkBAIC00MywxMiArNDMsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdV9vcHMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTcyLDEzICs3NCwxNSBAQAogCQkJCSBDT01QQVRfSFdDQVBfRkFTVF9NVUxUfENPTVBBVF9IV0NBUF9FRFNQfFwKIAkJCQkgQ09NUEFUX0hXQ0FQX1RMU3xDT01QQVRfSFdDQVBfVkZQfFwKIAkJCQkgQ09NUEFUX0hXQ0FQX1ZGUHYzfENPTVBBVF9IV0NBUF9WRlB2NHxcCi0JCQkJIENPTVBBVF9IV0NBUF9ORU9OfENPTVBBVF9IV0NBUF9JRElWKQorCQkJCSBDT01QQVRfSFdDQVBfTkVPTnxDT01QQVRfSFdDQVBfSURJVnxcCisJCQkJIENPTVBBVF9IV0NBUF9MUEFFKQogdW5zaWduZWQgaW50IGNvbXBhdF9lbGZfaHdjYXAgX19yZWFkX21vc3RseSA9IENPTVBBVF9FTEZfSFdDQVBfREVGQVVMVDsKIHVuc2lnbmVkIGludCBjb21wYXRfZWxmX2h3Y2FwMiBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAKK0RFQ0xBUkVfQklUTUFQKGNwdV9od2NhcHMsIEFSTTY0X05DQVBTKTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9uYW1lOwotc3RhdGljIGNvbnN0IGNoYXIgKm1hY2hpbmVfbmFtZTsKIHBoeXNfYWRkcl90IF9fZmR0X3BvaW50ZXIgX19pbml0ZGF0YTsKIAogLyoKQEAgLTExNiwxMiArMTIwLDE2IEBACiAKIHZvaWQgX19pbml0IHNtcF9zZXR1cF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKKwl1NjQgbXBpZHIgPSByZWFkX2NwdWlkX21waWRyKCkgJiBNUElEUl9IV0lEX0JJVE1BU0s7CisJY3B1X2xvZ2ljYWxfbWFwKDApID0gbXBpZHI7CisKIAkvKgogCSAqIGNsZWFyIF9fbXlfY3B1X29mZnNldCBvbiBib290IENQVSB0byBhdm9pZCBoYW5nIGNhdXNlZCBieQogCSAqIHVzaW5nIHBlcmNwdSB2YXJpYWJsZSBlYXJseSwgZm9yIGV4YW1wbGUsIGxvY2tkZXAgd2lsbAogCSAqIGFjY2VzcyBwZXJjcHUgdmFyaWFibGUgaW5zaWRlIGxvY2tfcmVsZWFzZQogCSAqLwogCXNldF9teV9jcHVfb2Zmc2V0KDApOworCXByX2luZm8oIkJvb3RpbmcgTGludXggb24gcGh5c2ljYWwgQ1BVIDB4JWx4XG4iLCAodW5zaWduZWQgbG9uZyltcGlkcik7CiB9CiAKIGJvb2wgYXJjaF9tYXRjaF9jcHVfcGh5c19pZChpbnQgY3B1LCB1NjQgcGh5c19pZCkKQEAgLTMxMSw3ICszMTksNyBAQAogCQkJY3B1X3JlbGF4KCk7CiAJfQogCi0JbWFjaGluZV9uYW1lID0gb2ZfZmxhdF9kdF9nZXRfbWFjaGluZV9uYW1lKCk7CisJZHVtcF9zdGFja19zZXRfYXJjaF9kZXNjKCIlcyAoRFQpIiwgb2ZfZmxhdF9kdF9nZXRfbWFjaGluZV9uYW1lKCkpOwogfQogCiAvKgpAQCAtMzc2LDYgKzM4NCw3IEBACiAKIAkqY21kbGluZV9wID0gYm9vdF9jb21tYW5kX2xpbmU7CiAKKwllYXJseV9maXhtYXBfaW5pdCgpOwogCWVhcmx5X2lvcmVtYXBfaW5pdCgpOwogCiAJcGFyc2VfZWFybHlfcGFyYW0oKTsKQEAgLTM5OCw3ICs0MDcsNiBAQAogCiAJcHNjaV9pbml0KCk7CiAKLQljcHVfbG9naWNhbF9tYXAoMCkgPSByZWFkX2NwdWlkX21waWRyKCkgJiBNUElEUl9IV0lEX0JJVE1BU0s7CiAJY3B1X3JlYWRfYm9vdGNwdV9vcHMoKTsKICNpZmRlZiBDT05GSUdfU01QCiAJc21wX2luaXRfY3B1cygpOwpAQCAtNDQ3LDE0ICs0NTUsNTAgQEAKIAlOVUxMCiB9OwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGNvbnN0IGNoYXIgKmNvbXBhdF9od2NhcF9zdHJbXSA9IHsKKwkic3dwIiwKKwkiaGFsZiIsCisJInRodW1iIiwKKwkiMjZiaXQiLAorCSJmYXN0bXVsdCIsCisJImZwYSIsCisJInZmcCIsCisJImVkc3AiLAorCSJqYXZhIiwKKwkiaXdtbXh0IiwKKwkiY3J1bmNoIiwKKwkidGh1bWJlZSIsCisJIm5lb24iLAorCSJ2ZnB2MyIsCisJInZmcHYzZDE2IiwKKwkidGxzIiwKKwkidmZwdjQiLAorCSJpZGl2YSIsCisJImlkaXZ0IiwKKwkidmZwZDMyIiwKKwkibHBhZSIsCisJImV2dHN0cm0iCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29tcGF0X2h3Y2FwMl9zdHJbXSA9IHsKKwkiYWVzIiwKKwkicG11bGwiLAorCSJzaGExIiwKKwkic2hhMiIsCisJImNyYzMyIiwKKwlOVUxMCit9OworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKwogc3RhdGljIGludCBjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBpOwotCi0Jc2VxX3ByaW50ZihtLCAiUHJvY2Vzc29yXHQ6ICVzIHJldiAlZCAoJXMpXG4iLAotCQkgICBjcHVfbmFtZSwgcmVhZF9jcHVpZF9pZCgpICYgMTUsIEVMRl9QTEFURk9STSk7CisJaW50IGksIGo7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJc3RydWN0IGNwdWluZm9fYXJtNjQgKmNwdWluZm8gPSAmcGVyX2NwdShjcHVfZGF0YSwgaSk7CisJCXUzMiBtaWRyID0gY3B1aW5mby0+cmVnX21pZHI7CisKIAkJLyoKIAkJICogZ2xpYmMgcmVhZHMgL3Byb2MvY3B1aW5mbyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZgogCQkgKiBvbmxpbmUgcHJvY2Vzc29ycywgbG9va2luZyBmb3IgbGluZXMgYmVnaW5uaW5nIHdpdGgKQEAgLTQ2MywyNSArNTA3LDM5IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCQlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdDogJWRcbiIsIGkpOwogI2VuZGlmCisKKwkJLyoKKwkJICogRHVtcCBvdXQgdGhlIGNvbW1vbiBwcm9jZXNzb3IgZmVhdHVyZXMgaW4gYSBzaW5nbGUgbGluZS4KKwkJICogVXNlcnNwYWNlIHNob3VsZCByZWFkIHRoZSBod2NhcHMgd2l0aCBnZXRhdXh2YWwoQVRfSFdDQVApCisJCSAqIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gcGFyc2UgdGhpcywgYnV0IHRoZXJlJ3MgYSBib2R5IG9mCisJCSAqIHNvZnR3YXJlIHdoaWNoIGRvZXMgYWxyZWFkeSAoYXQgbGVhc3QgZm9yIDMyLWJpdCkuCisJCSAqLworCQlzZXFfcHV0cyhtLCAiRmVhdHVyZXNcdDoiKTsKKwkJaWYgKHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMikgeworI2lmZGVmIENPTkZJR19DT01QQVQKKwkJCWZvciAoaiA9IDA7IGNvbXBhdF9od2NhcF9zdHJbal07IGorKykKKwkJCQlpZiAoY29tcGF0X2VsZl9od2NhcCAmICgxIDw8IGopKQorCQkJCQlzZXFfcHJpbnRmKG0sICIgJXMiLCBjb21wYXRfaHdjYXBfc3RyW2pdKTsKKworCQkJZm9yIChqID0gMDsgY29tcGF0X2h3Y2FwMl9zdHJbal07IGorKykKKwkJCQlpZiAoY29tcGF0X2VsZl9od2NhcDIgJiAoMSA8PCBqKSkKKwkJCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgY29tcGF0X2h3Y2FwMl9zdHJbal0pOworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKwkJfSBlbHNlIHsKKwkJCWZvciAoaiA9IDA7IGh3Y2FwX3N0cltqXTsgaisrKQorCQkJCWlmIChlbGZfaHdjYXAgJiAoMSA8PCBqKSkKKwkJCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgaHdjYXBfc3RyW2pdKTsKKwkJfQorCQlzZXFfcHV0cyhtLCAiXG4iKTsKKworCQlzZXFfcHJpbnRmKG0sICJDUFUgaW1wbGVtZW50ZXJcdDogMHglMDJ4XG4iLAorCQkJICAgTUlEUl9JTVBMRU1FTlRPUihtaWRyKSk7CisJCXNlcV9wcmludGYobSwgIkNQVSBhcmNoaXRlY3R1cmU6IDhcbiIpOworCQlzZXFfcHJpbnRmKG0sICJDUFUgdmFyaWFudFx0OiAweCV4XG4iLCBNSURSX1ZBUklBTlQobWlkcikpOworCQlzZXFfcHJpbnRmKG0sICJDUFUgcGFydFx0OiAweCUwM3hcbiIsIE1JRFJfUEFSVE5VTShtaWRyKSk7CisJCXNlcV9wcmludGYobSwgIkNQVSByZXZpc2lvblx0OiAlZFxuXG4iLCBNSURSX1JFVklTSU9OKG1pZHIpKTsKIAl9CiAKLQkvKiBkdW1wIG91dCB0aGUgcHJvY2Vzc29yIGZlYXR1cmVzICovCi0Jc2VxX3B1dHMobSwgIkZlYXR1cmVzXHQ6ICIpOwotCi0JZm9yIChpID0gMDsgaHdjYXBfc3RyW2ldOyBpKyspCi0JCWlmIChlbGZfaHdjYXAgJiAoMSA8PCBpKSkKLQkJCXNlcV9wcmludGYobSwgIiVzICIsIGh3Y2FwX3N0cltpXSk7Ci0KLQlzZXFfcHJpbnRmKG0sICJcbkNQVSBpbXBsZW1lbnRlclx0OiAweCUwMnhcbiIsIHJlYWRfY3B1aWRfaWQoKSA+PiAyNCk7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIGFyY2hpdGVjdHVyZTogQUFyY2g2NFxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIHZhcmlhbnRcdDogMHgleFxuIiwgKHJlYWRfY3B1aWRfaWQoKSA+PiAyMCkgJiAxNSk7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIHBhcnRcdDogMHglMDN4XG4iLCAocmVhZF9jcHVpZF9pZCgpID4+IDQpICYgMHhmZmYpOwotCXNlcV9wcmludGYobSwgIkNQVSByZXZpc2lvblx0OiAlZFxuIiwgcmVhZF9jcHVpZF9pZCgpICYgMTUpOwotCi0Jc2VxX3B1dHMobSwgIlxuIik7Ci0KLQlzZXFfcHJpbnRmKG0sICJIYXJkd2FyZVx0OiAlc1xuIiwgbWFjaGluZV9uYW1lKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwzMi5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsMzIuYwppbmRleCAxYjlhZDAyLi41YTFiYTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwzMi5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbDMyLmMKQEAgLTE4Niw2ICsxODYsMTIgQEAKIAkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7CiAJCWVyciB8PSBfX3B1dF91c2VyKChjb21wYXRfdXB0cl90KSh1bnNpZ25lZCBsb25nKWZyb20tPnNpX3B0ciwgJnRvLT5zaV9wdHIpOwogCQlicmVhazsKKwljYXNlIF9fU0lfU1lTOgorCQllcnIgfD0gX19wdXRfdXNlcigoY29tcGF0X3VwdHJfdCkodW5zaWduZWQgbG9uZykKKwkJCQlmcm9tLT5zaV9jYWxsX2FkZHIsICZ0by0+c2lfY2FsbF9hZGRyKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfc3lzY2FsbCwgJnRvLT5zaV9zeXNjYWxsKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfYXJjaCwgJnRvLT5zaV9hcmNoKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDogLyogdGhpcyBpcyBqdXN0IGluIGNhc2UgZm9yIG5vdyAuLi4gKi8KIAkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfcGlkLCAmdG8tPnNpX3BpZCk7CiAJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3VpZCwgJnRvLT5zaV91aWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2xlZXAuUyBiL2FyY2gvYXJtNjQva2VybmVsL3NsZWVwLlMKaW5kZXggYTU2NGI0NC4uZWRlMTg2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2xlZXAuUworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zbGVlcC5TCkBAIC0xNDcsMTQgKzE0NywxMiBAQAogCXJldAogRU5EUFJPQyhjcHVfcmVzdW1lX2FmdGVyX21tdSkKIAotCS5kYXRhCiBFTlRSWShjcHVfcmVzdW1lKQogCWJsCWVsMl9zZXR1cAkJLy8gaWYgaW4gRUwyIGRyb3AgdG8gRUwxIGNsZWFubHkKICNpZmRlZiBDT05GSUdfU01QCiAJbXJzCXgxLCBtcGlkcl9lbDEKLQlhZHIJeDQsIG1waWRyX2hhc2hfcHRyCi0JbGRyCXg1LCBbeDRdCi0JYWRkCXg4LCB4NCwgeDUJCS8vIHg4ID0gc3RydWN0IG1waWRyX2hhc2ggcGh5cyBhZGRyZXNzCisJYWRycAl4OCwgbXBpZHJfaGFzaAorCWFkZCB4OCwgeDgsICM6bG8xMjptcGlkcl9oYXNoIC8vIHg4ID0gc3RydWN0IG1waWRyX2hhc2ggcGh5cyBhZGRyZXNzCiAgICAgICAgIC8qIHJldHJpZXZlIG1waWRyX2hhc2ggbWVtYmVycyB0byBjb21wdXRlIHRoZSBoYXNoICovCiAJbGRyCXgyLCBbeDgsICNNUElEUl9IQVNIX01BU0tdCiAJbGRwCXczLCB3NCwgW3g4LCAjTVBJRFJfSEFTSF9TSElGVFNdCkBAIC0xNjQsMTQgKzE2MiwxNSBAQAogI2Vsc2UKIAltb3YJeDcsIHh6cgogI2VuZGlmCi0JYWRyCXgwLCBzbGVlcF9zYXZlX3NwCisJYWRycAl4MCwgc2xlZXBfc2F2ZV9zcAorCWFkZAl4MCwgeDAsICM6bG8xMjpzbGVlcF9zYXZlX3NwCiAJbGRyCXgwLCBbeDAsICNTTEVFUF9TQVZFX1NQX1BIWVNdCiAJbGRyCXgwLCBbeDAsIHg3LCBsc2wgIzNdCiAJLyogbG9hZCBzcCBmcm9tIGNvbnRleHQgKi8KIAlsZHIJeDIsIFt4MCwgI0NQVV9DVFhfU1BdCi0JYWRyCXgxLCBzbGVlcF9pZG1hcF9waHlzCisJYWRycAl4MSwgc2xlZXBfaWRtYXBfcGh5cwogCS8qIGxvYWQgcGh5c2ljYWwgYWRkcmVzcyBvZiBpZGVudGl0eSBtYXAgcGFnZSB0YWJsZSBpbiB4MSAqLwotCWxkcgl4MSwgW3gxXQorCWxkcgl4MSwgW3gxLCAjOmxvMTI6c2xlZXBfaWRtYXBfcGh5c10KIAltb3YJc3AsIHgyCiAJLyoKIAkgKiBjcHVfZG9fcmVzdW1lIGV4cGVjdHMgeDAgdG8gY29udGFpbiBjb250ZXh0IHBoeXNpY2FsIGFkZHJlc3MKQEAgLTE4MCwyNiArMTc5LDMgQEAKIAlibAljcHVfZG9fcmVzdW1lCQkvLyBQQyByZWxhdGl2ZSBqdW1wLCBNTVUgb2ZmCiAJYgljcHVfcmVzdW1lX21tdQkJLy8gUmVzdW1lIE1NVSwgbmV2ZXIgcmV0dXJucwogRU5EUFJPQyhjcHVfcmVzdW1lKQotCi0JLmFsaWduIDMKLW1waWRyX2hhc2hfcHRyOgotCS8qCi0JICogb2Zmc2V0IG9mIG1waWRyX2hhc2ggc3ltYm9sIGZyb20gY3VycmVudCBsb2NhdGlvbgotCSAqIHVzZWQgdG8gb2J0YWluIHJ1bi10aW1lIG1waWRyX2hhc2ggYWRkcmVzcyB3aXRoIE1NVSBvZmYKLSAgICAgICAgICovCi0JLnF1YWQJbXBpZHJfaGFzaCAtIC4KLS8qCi0gKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGlkZW50aXR5IG1hcHBlZCBwYWdlIHRhYmxlcwotICovCi0JLnR5cGUJc2xlZXBfaWRtYXBfcGh5cywgI29iamVjdAotRU5UUlkoc2xlZXBfaWRtYXBfcGh5cykKLQkucXVhZAkwCi0vKgotICogc3RydWN0IHNsZWVwX3NhdmVfc3AgewotICoJcGh5c19hZGRyX3QgKnNhdmVfcHRyX3N0YXNoOwotICoJcGh5c19hZGRyX3Qgc2F2ZV9wdHJfc3Rhc2hfcGh5czsKLSAqIH07Ci0gKi8KLQkudHlwZQlzbGVlcF9zYXZlX3NwLCAjb2JqZWN0Ci1FTlRSWShzbGVlcF9zYXZlX3NwKQotCS5zcGFjZQlTTEVFUF9TQVZFX1NQX1NaCS8vIHN0cnVjdCBzbGVlcF9zYXZlX3NwCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jCmluZGV4IGIwNmQxZDkuLjdhZTZlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFfd29yay5oPgogCisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgpAQCAtMzA5LDYgKzMxMCw3IEBACiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKIAlwcl9pbmZvKCJTTVA6IFRvdGFsIG9mICVkIHByb2Nlc3NvcnMgYWN0aXZhdGVkLlxuIiwgbnVtX29ubGluZV9jcHVzKCkpOworCWFwcGx5X2FsdGVybmF0aXZlc19hbGwoKTsKIH0KIAogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYyBiL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYwppbmRleCAxM2FkNGRiLi4zNzcxYjcyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zdXNwZW5kLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gc3RydWN0IHNsZWVwX3NhdmVfc3Agc2xlZXBfc2F2ZV9zcDsKLWV4dGVybiBwaHlzX2FkZHJfdCBzbGVlcF9pZG1hcF9waHlzOworc3RydWN0IHNsZWVwX3NhdmVfc3Agc2xlZXBfc2F2ZV9zcDsKK3BoeXNfYWRkcl90IHNsZWVwX2lkbWFwX3BoeXM7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNwdV9zdXNwZW5kX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3N5c19jb21wYXQuYyBiL2FyY2gvYXJtNjQva2VybmVsL3N5c19jb21wYXQuYwppbmRleCBkYzQ3ZTUzLi4yOGM1MTFiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNfY29tcGF0LmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzX2NvbXBhdC5jCkBAIC0yOCwyOSArMjgsMzkgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotc3RhdGljIGlubGluZSB2b2lkCi1kb19jb21wYXRfY2FjaGVfb3AodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGludCBmbGFncykKK3N0YXRpYyBsb25nCitfX2RvX2NvbXBhdF9jYWNoZV9vcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPmFjdGl2ZV9tbTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlsb25nIHJldDsKIAotCWlmIChlbmQgPCBzdGFydCB8fCBmbGFncykKLQkJcmV0dXJuOworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBjaHVuayA9IG1pbihQQUdFX1NJWkUsIGVuZCAtIHN0YXJ0KTsKIAotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOwotCWlmICh2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZCkgewotCQlpZiAoc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KQotCQkJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwotCQlpZiAoZW5kID4gdm1hLT52bV9lbmQpCi0JCQllbmQgPSB2bWEtPnZtX2VuZDsKLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJX19mbHVzaF9jYWNoZV91c2VyX3JhbmdlKHN0YXJ0ICYgUEFHRV9NQVNLLCBQQUdFX0FMSUdOKGVuZCkpOwotCQlyZXR1cm47Ci0JfQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAwOworCisJCXJldCA9IF9fZmx1c2hfY2FjaGVfdXNlcl9yYW5nZShzdGFydCwgc3RhcnQgKyBjaHVuayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWNvbmRfcmVzY2hlZCgpOworCQlzdGFydCArPSBjaHVuazsKKwl9IHdoaWxlIChzdGFydCA8IGVuZCk7CisKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBsb25nCitkb19jb21wYXRfY2FjaGVfb3AodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGludCBmbGFncykKK3sKKwlpZiAoZW5kIDwgc3RhcnQgfHwgZmxhZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHN0YXJ0LCBlbmQgLSBzdGFydCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIF9fZG9fY29tcGF0X2NhY2hlX29wKHN0YXJ0LCBlbmQpOworfQogLyoKICAqIEhhbmRsZSBhbGwgdW5yZWNvZ25pc2VkIHN5c3RlbSBjYWxscy4KICAqLwpAQCAtNzQsOCArODQsNyBAQAogCSAqIHRoZSBzcGVjaWZpZWQgcmVnaW9uKS4KIAkgKi8KIAljYXNlIF9fQVJNX05SX2NvbXBhdF9jYWNoZWZsdXNoOgotCQlkb19jb21wYXRfY2FjaGVfb3AocmVncy0+cmVnc1swXSwgcmVncy0+cmVnc1sxXSwgcmVncy0+cmVnc1syXSk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZG9fY29tcGF0X2NhY2hlX29wKHJlZ3MtPnJlZ3NbMF0sIHJlZ3MtPnJlZ3NbMV0sIHJlZ3MtPnJlZ3NbMl0pOwogCiAJY2FzZSBfX0FSTV9OUl9jb21wYXRfc2V0X3RsczoKIAkJY3VycmVudC0+dGhyZWFkLnRwX3ZhbHVlID0gcmVncy0+cmVnc1swXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2FybTY0L2tlcm5lbC90b3BvbG9neS5jCmluZGV4IGI2ZWUyNmIuLmZjYjhmN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMjU1LDEyICsyNTUsMTUgQEAKIAkJLyogTXVsdGlwcm9jZXNzb3Igc3lzdGVtIDogTXVsdGktdGhyZWFkcyBwZXIgY29yZSAqLwogCQljcHVpZF90b3BvLT50aHJlYWRfaWQgID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApOwogCQljcHVpZF90b3BvLT5jb3JlX2lkICAgID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOwotCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDIpOworCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDIpIHwKKwkJCQkJIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAzKSA8PCA4OwogCX0gZWxzZSB7CiAJCS8qIE11bHRpcHJvY2Vzc29yIHN5c3RlbSA6IFNpbmdsZS10aHJlYWQgcGVyIGNvcmUgKi8KIAkJY3B1aWRfdG9wby0+dGhyZWFkX2lkICA9IC0xOwogCQljcHVpZF90b3BvLT5jb3JlX2lkICAgID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApOwotCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOworCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpIHwKKwkJCQkJIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAyKSA8PCA4IHwKKwkJCQkJIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAzKSA8PCAxNjsKIAl9CiAKIAlwcl9kZWJ1ZygiQ1BVJXU6IGNsdXN0ZXIgJWQgY29yZSAlZCB0aHJlYWQgJWQgbXBpZHIgJSMwMTZsbHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC90cmFjZS1ldmVudHMtZW11bGF0aW9uLmggYi9hcmNoL2FybTY0L2tlcm5lbC90cmFjZS1ldmVudHMtZW11bGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxZGQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3RyYWNlLWV2ZW50cy1lbXVsYXRpb24uaApAQCAtMCwwICsxLDM1IEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBlbXVsYXRpb24KKworI2lmICFkZWZpbmVkKF9UUkFDRV9FTVVMQVRJT05fSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX0VNVUxBVElPTl9ICisKKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKK1RSQUNFX0VWRU5UKGluc3RydWN0aW9uX2VtdWxhdGlvbiwKKworCVRQX1BST1RPKGNvbnN0IGNoYXIgKmluc3RyLCB1NjQgYWRkciksCisJVFBfQVJHUyhpbnN0ciwgYWRkciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZyhpbnN0ciwgaW5zdHIpCisJCV9fZmllbGQodTY0LCBhZGRyKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKGluc3RyLCBpbnN0cik7CisJCV9fZW50cnktPmFkZHIgPSBhZGRyOworCSksCisKKwlUUF9wcmludGsoImluc3RyPVwiJXNcIiBhZGRyPTB4JWxseCIsIF9fZ2V0X3N0cihpbnN0ciksIF9fZW50cnktPmFkZHIpCispOworCisjZW5kaWYgLyogX1RSQUNFX0VNVUxBVElPTl9IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAorI3VuZGVmIFRSQUNFX0lOQ0xVREVfRklMRQorI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggLgorCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSB0cmFjZS1ldmVudHMtZW11bGF0aW9uCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYwppbmRleCBkZTFiMDg1Li4wYTgwMWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMKQEAgLTI1OSw2ICsyNTksNjkgQEAKIAl9CiB9CiAKK3N0YXRpYyBMSVNUX0hFQUQodW5kZWZfaG9vayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyh1bmRlZl9sb2NrKTsKKwordm9pZCByZWdpc3Rlcl91bmRlZl9ob29rKHN0cnVjdCB1bmRlZl9ob29rICpob29rKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnVuZGVmX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmaG9vay0+bm9kZSwgJnVuZGVmX2hvb2spOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bmRlZl9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgdW5yZWdpc3Rlcl91bmRlZl9ob29rKHN0cnVjdCB1bmRlZl9ob29rICpob29rKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnVuZGVmX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmaG9vay0+bm9kZSk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVuZGVmX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjYWxsX3VuZGVmX2hvb2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVuZGVmX2hvb2sgKmhvb2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaW5zdHI7CisJaW50ICgqZm4pKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgaW5zdHIpID0gTlVMTDsKKwl2b2lkIF9fdXNlciAqcGMgPSAodm9pZCBfX3VzZXIgKilpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCXJldHVybiAxOworCisJaWYgKGNvbXBhdF90aHVtYl9tb2RlKHJlZ3MpKSB7CisJCS8qIDE2LWJpdCBUaHVtYiBpbnN0cnVjdGlvbiAqLworCQlpZiAoZ2V0X3VzZXIoaW5zdHIsICh1MTYgX191c2VyICopcGMpKQorCQkJZ290byBleGl0OworCQlpbnN0ciA9IGxlMTZfdG9fY3B1KGluc3RyKTsKKwkJaWYgKGFhcmNoMzJfaW5zbl9pc193aWRlKGluc3RyKSkgeworCQkJdTMyIGluc3RyMjsKKworCQkJaWYgKGdldF91c2VyKGluc3RyMiwgKHUxNiBfX3VzZXIgKikocGMgKyAyKSkpCisJCQkJZ290byBleGl0OworCQkJaW5zdHIyID0gbGUxNl90b19jcHUoaW5zdHIyKTsKKwkJCWluc3RyID0gKGluc3RyIDw8IDE2KSB8IGluc3RyMjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIDMyLWJpdCBBUk0gaW5zdHJ1Y3Rpb24gKi8KKwkJaWYgKGdldF91c2VyKGluc3RyLCAodTMyIF9fdXNlciAqKXBjKSkKKwkJCWdvdG8gZXhpdDsKKwkJaW5zdHIgPSBsZTMyX3RvX2NwdShpbnN0cik7CisJfQorCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ1bmRlZl9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCAmdW5kZWZfaG9vaywgbm9kZSkKKwkJaWYgKChpbnN0ciAmIGhvb2stPmluc3RyX21hc2spID09IGhvb2stPmluc3RyX3ZhbCAmJgorCQkJKHJlZ3MtPnBzdGF0ZSAmIGhvb2stPnBzdGF0ZV9tYXNrKSA9PSBob29rLT5wc3RhdGVfdmFsKQorCQkJZm4gPSBob29rLT5mbjsKKworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bmRlZl9sb2NrLCBmbGFncyk7CitleGl0OgorCXJldHVybiBmbiA/IGZuKHJlZ3MsIGluc3RyKSA6IDE7Cit9CisKIGFzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbiBkb191bmRlZmluc3RyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXNpZ2luZm9fdCBpbmZvOwpAQCAtMjY4LDYgKzMzMSw5IEBACiAJaWYgKCFhYXJjaDMyX2JyZWFrX2hhbmRsZXIocmVncykpCiAJCXJldHVybjsKIAorCWlmIChjYWxsX3VuZGVmX2hvb2socmVncykgPT0gMCkKKwkJcmV0dXJuOworCiAJaWYgKHNob3dfdW5oYW5kbGVkX3NpZ25hbHMgJiYgdW5oYW5kbGVkX3NpZ25hbChjdXJyZW50LCBTSUdJTEwpICYmCiAJICAgIHByaW50a19yYXRlbGltaXQoKSkgewogCQlwcl9pbmZvKCIlc1slZF06IHVuZGVmaW5lZCBpbnN0cnVjdGlvbjogcGM9JXBcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm02NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBlZGY4NzE1Li45OTY1ZWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTExLDggKzExLDkgQEAKIAogI2luY2x1ZGUgImltYWdlLmgiCiAKLSNkZWZpbmUgQVJNX0VYSVRfS0VFUCh4KQotI2RlZmluZSBBUk1fRVhJVF9ESVNDQVJEKHgpCXgKKy8qIC5leGl0LnRleHQgbmVlZGVkIGluIGNhc2Ugb2YgYWx0ZXJuYXRpdmUgcGF0Y2hpbmcgKi8KKyNkZWZpbmUgQVJNX0VYSVRfS0VFUCh4KQl4CisjZGVmaW5lIEFSTV9FWElUX0RJU0NBUkQoeCkKIAogT1VUUFVUX0FSQ0goYWFyY2g2NCkKIEVOVFJZKF90ZXh0KQpAQCAtMzIsNiArMzMsMjIgQEAKIAkqKC5oeXAudGV4dCkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX2h5cF90ZXh0X2VuZCkgPSAuOwogCisvKgorICogVGhlIHNpemUgb2YgdGhlIFBFL0NPRkYgc2VjdGlvbiB0aGF0IGNvdmVycyB0aGUga2VybmVsIGltYWdlLCB3aGljaAorICogcnVucyBmcm9tIHN0ZXh0IHRvIF9lZGF0YSwgbXVzdCBiZSBhIHJvdW5kIG11bHRpcGxlIG9mIHRoZSBQRS9DT0ZGCisgKiBGaWxlQWxpZ25tZW50LCB3aGljaCB3ZSBzZXQgdG8gaXRzIG1pbmltdW0gdmFsdWUgb2YgMHgyMDAuICdzdGV4dCcKKyAqIGl0c2VsZiBpcyA0IEtCIGFsaWduZWQsIHNvIHBhZGRpbmcgb3V0IF9lZGF0YSB0byBhIDB4MjAwIGFsaWduZWQKKyAqIGJvdW5kYXJ5IHNob3VsZCBiZSBzdWZmaWNpZW50LgorICovCitQRUNPRkZfRklMRV9BTElHTk1FTlQgPSAweDIwMDsKKworI2lmZGVmIENPTkZJR19FRkkKKyNkZWZpbmUgUEVDT0ZGX0VEQVRBX1BBRERJTkcJXAorCS5wZWNvZmZfZWRhdGFfcGFkZGluZyA6IHsgQllURSgwKTsgLiA9IEFMSUdOKFBFQ09GRl9GSUxFX0FMSUdOTUVOVCk7IH0KKyNlbHNlCisjZGVmaW5lIFBFQ09GRl9FREFUQV9QQURESU5HCisjZW5kaWYKKwogU0VDVElPTlMKIHsKIAkvKgpAQCAtMTAwLDkgKzExNywyMSBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9faW5pdF9lbmQgPSAuOwogCisJLiA9IEFMSUdOKDQpOworCS5hbHRpbnN0cnVjdGlvbnMgOiB7CisJCV9fYWx0X2luc3RydWN0aW9ucyA9IC47CisJCSooLmFsdGluc3RydWN0aW9ucykKKwkJX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47CisJfQorCS5hbHRpbnN0cl9yZXBsYWNlbWVudCA6IHsKKwkJKiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpCisJfQorCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX2RhdGEgPSAuOwogCV9zZGF0YSA9IC47CiAJUldfREFUQV9TRUNUSU9OKDY0LCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQorCVBFQ09GRl9FREFUQV9QQURESU5HCiAJX2VkYXRhID0gLjsKIAogCUJTU19TRUNUSU9OKDAsIDAsIDApCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAuUyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCmluZGV4IGI3MmFhOWYuLmZiZTkwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC5TCisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCkBAIC03NjEsMTAgKzc2MSwxMCBAQAogLm1hY3JvIGFjdGl2YXRlX3RyYXBzCiAJbGRyICAgICB4MiwgW3gwLCAjVkNQVV9IQ1JfRUwyXQogCW1zciAgICAgaGNyX2VsMiwgeDIKLQlsZHIJeDIsID0oQ1BUUl9FTDJfVFRBKQorCW1vdgl4MiwgI0NQVFJfRUwyX1RUQQogCW1zcgljcHRyX2VsMiwgeDIKIAotCWxkcgl4MiwgPSgxIDw8IDE1KQkvLyBUcmFwIENQMTUgQ3I9MTUKKwltb3YJeDIsICMoMSA8PCAxNSkJLy8gVHJhcCBDUDE1IENyPTE1CiAJbXNyCWhzdHJfZWwyLCB4MgogCiAJbXJzCXgyLCBtZGNyX2VsMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKaW5kZXggNGNjM2I3MTkuLjNkN2MyZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKKysrIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwpAQCAtNDI0LDYgKzQyNCwxMSBAQAogCS8qIFZCQVJfRUwxICovCiAJeyBPcDAoMGIxMSksIE9wMSgwYjAwMCksIENSbigwYjExMDApLCBDUm0oMGIwMDAwKSwgT3AyKDBiMDAwKSwKIAkgIE5VTEwsIHJlc2V0X3ZhbCwgVkJBUl9FTDEsIDAgfSwKKworCS8qIElDQ19TUkVfRUwxICovCisJeyBPcDAoMGIxMSksIE9wMSgwYjAwMCksIENSbigwYjExMDApLCBDUm0oMGIxMTAwKSwgT3AyKDBiMTAxKSwKKwkgIHRyYXBfcmF6X3dpIH0sCisKIAkvKiBDT05URVhUSURSX0VMMSAqLwogCXsgT3AwKDBiMTEpLCBPcDEoMGIwMDApLCBDUm4oMGIxMTAxKSwgQ1JtKDBiMDAwMCksIE9wMigwYjAwMSksCiAJICBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIENPTlRFWFRJRFJfRUwxLCAwIH0sCkBAIC02OTAsNiArNjk1LDEwIEBACiAJeyBPcDEoIDApLCBDUm4oMTApLCBDUm0oIDIpLCBPcDIoIDEpLCBhY2Nlc3Nfdm1fcmVnLCBOVUxMLCBjMTBfTk1SUiB9LAogCXsgT3AxKCAwKSwgQ1JuKDEwKSwgQ1JtKCAzKSwgT3AyKCAwKSwgYWNjZXNzX3ZtX3JlZywgTlVMTCwgYzEwX0FNQUlSMCB9LAogCXsgT3AxKCAwKSwgQ1JuKDEwKSwgQ1JtKCAzKSwgT3AyKCAxKSwgYWNjZXNzX3ZtX3JlZywgTlVMTCwgYzEwX0FNQUlSMSB9LAorCisJLyogSUNDX1NSRSAqLworCXsgT3AxKCAwKSwgQ1JuKDEyKSwgQ1JtKDEyKSwgT3AyKCA1KSwgdHJhcF9yYXpfd2kgfSwKKwogCXsgT3AxKCAwKSwgQ1JuKDEzKSwgQ1JtKCAwKSwgT3AyKCAxKSwgYWNjZXNzX3ZtX3JlZywgTlVMTCwgYzEzX0NJRCB9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvY2xlYXJfdXNlci5TIGIvYXJjaC9hcm02NC9saWIvY2xlYXJfdXNlci5TCmluZGV4IDZlMGVkOTMuLmMxNzk2N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbGliL2NsZWFyX3VzZXIuUworKysgYi9hcmNoL2FybTY0L2xpYi9jbGVhcl91c2VyLlMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlzdWIJeDEsIHgxLCAjMgogNDoJYWRkcwl4MSwgeDEsICMxCiAJYi5taQk1ZgotCXN0cmIJd3pyLCBbeDBdCitVU0VSKDlmLCBzdHJiCXd6ciwgW3gwXQkpCiA1Ogltb3YJeDAsICMwCiAJcmV0CiBFTkRQUk9DKF9fY2xlYXJfdXNlcikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L21tL01ha2VmaWxlCmluZGV4IGM1NjE3OWUuLjc3M2QzN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm02NC9tbS9NYWtlZmlsZQpAQCAtMywzICszLDQgQEAKIAkJCQkgICBpb3JlbWFwLm8gbW1hcC5vIHBnZC5vIG1tdS5vIFwKIAkJCQkgICBjb250ZXh0Lm8gcHJvYy5vIHBhZ2VhdHRyLm8KIG9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpCSs9IGh1Z2V0bGJwYWdlLm8KK29iai0kKENPTkZJR19BUk02NF9QVERVTVApCSs9IGR1bXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9jYWNoZS5TIGIvYXJjaC9hcm02NC9tbS9jYWNoZS5TCmluZGV4IDIzNjYzODMuLjI1NjBlMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vY2FjaGUuUworKysgYi9hcmNoL2FybTY0L21tL2NhY2hlLlMKQEAgLTE3LDkgKzE3LDEyIEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS1hc20uaD4KIAogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKQEAgLTEzOCw5ICsxNDEsMTIgQEAKIAlhZGQJeDQsIHg0LCB4MgogCWNtcAl4NCwgeDEKIAliLmxvCTFiCi05OgkJCQkJCS8vIGlnbm9yZSBhbnkgZmF1bHRpbmcgY2FjaGUgb3BlcmF0aW9uCiAJZHNiCWlzaAogCWlzYgorCW1vdgl4MCwgIzAKKwlyZXQKKzk6CisJbW92CXgwLCAjLUVGQVVMVAogCXJldAogRU5EUFJPQyhmbHVzaF9pY2FjaGVfcmFuZ2UpCiBFTkRQUk9DKF9fZmx1c2hfY2FjaGVfdXNlcl9yYW5nZSkKQEAgLTIxMCw3ICsyMTYsNyBAQAogCWRjYWNoZV9saW5lX3NpemUgeDIsIHgzCiAJc3ViCXgzLCB4MiwgIzEKIAliaWMJeDAsIHgwLCB4MwotMToJZGMJY3ZhYywgeDAJCQkvLyBjbGVhbiBEIC8gVSBsaW5lCisxOglhbHRlcm5hdGl2ZV9pbnNuICJkYyBjdmFjLCB4MCIsICJkYyBjaXZhYywgeDAiLCBBUk02NF9XT1JLQVJPVU5EX0NMRUFOX0NBQ0hFCiAJYWRkCXgwLCB4MCwgeDIKIAljbXAJeDAsIHgxCiAJYi5sbwkxYgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9kdW1wLmMgYi9hcmNoL2FybTY0L21tL2R1bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjY5NjAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9tbS9kdW1wLmMKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogRGVidWcgaGVscGVyIHRvIGR1bXAgdGhlIGN1cnJlbnQga2VybmVsIHBhZ2V0YWJsZXMgb2YgdGhlIHN5c3RlbQorICogc28gdGhhdCB3ZSBjYW4gc2VlIHdoYXQgdGhlIHZhcmlvdXMgbWVtb3J5IHJhbmdlcyBhcmUgc2V0IHRvLgorICoKKyAqIERlcml2ZWQgZnJvbSB4ODYgYW5kIGFybSBpbXBsZW1lbnRhdGlvbjoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcjogQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW5AbGludXguaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKyNkZWZpbmUgTE9XRVNUX0FERFIJKFVMKDB4ZmZmZmZmZmZmZmZmZmZmZikgPDwgVkFfQklUUykKKworc3RydWN0IGFkZHJfbWFya2VyIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3M7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK2VudW0gYWRkcmVzc19tYXJrZXJzX2lkeCB7CisJVk1BTExPQ19TVEFSVF9OUiA9IDAsCisJVk1BTExPQ19FTkRfTlIsCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQCisJVk1FTU1BUF9TVEFSVF9OUiwKKwlWTUVNTUFQX0VORF9OUiwKKyNlbmRpZgorCVBDSV9TVEFSVF9OUiwKKwlQQ0lfRU5EX05SLAorCUZJWEFERFJfU1RBUlRfTlIsCisJRklYQUREUl9FTkRfTlIsCisJTU9EVUxFU19TVEFSVF9OUiwKKwlNT0RVRUxTX0VORF9OUiwKKwlLRVJORUxfU1BBQ0VfTlIsCit9OworCitzdGF0aWMgc3RydWN0IGFkZHJfbWFya2VyIGFkZHJlc3NfbWFya2Vyc1tdID0geworCXsgVk1BTExPQ19TVEFSVCwJInZtYWxsb2MoKSBBcmVhIiB9LAorCXsgVk1BTExPQ19FTkQsCQkidm1hbGxvYygpIEVuZCIgfSwKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKKwl7IDAsCQkJInZtZW1tYXAgc3RhcnQiIH0sCisJeyAwLAkJCSJ2bWVtbWFwIGVuZCIgfSwKKyNlbmRpZgorCXsgKHVuc2lnbmVkIGxvbmcpIFBDSV9JT0JBU0UsCQkiUENJIEkvTyBzdGFydCIgfSwKKwl7ICh1bnNpZ25lZCBsb25nKSBQQ0lfSU9CQVNFICsgU1pfMTZNLAkiUENJIEkvTyBlbmQiIH0sCisJeyBGSVhBRERSX1NUQVJULAkiRml4bWFwIHN0YXJ0IiB9LAorCXsgRklYQUREUl9UT1AsCQkiRml4bWFwIGVuZCIgfSwKKwl7IE1PRFVMRVNfVkFERFIsCSJNb2R1bGVzIHN0YXJ0IiB9LAorCXsgTU9EVUxFU19FTkQsCQkiTW9kdWxlcyBlbmQiIH0sCisJeyBQQUdFX09GRlNFVCwJCSJLZXJuZWwgTWFwcGluZyIgfSwKKwl7IC0xLAkJCU5VTEwgfSwKK307CisKK3N0cnVjdCBwZ19zdGF0ZSB7CisJc3RydWN0IHNlcV9maWxlICpzZXE7CisJY29uc3Qgc3RydWN0IGFkZHJfbWFya2VyICptYXJrZXI7CisJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzOworCXVuc2lnbmVkIGxldmVsOworCXU2NCBjdXJyZW50X3Byb3Q7Cit9OworCitzdHJ1Y3QgcHJvdF9iaXRzIHsKKwl1NjQJCW1hc2s7CisJdTY0CQl2YWw7CisJY29uc3QgY2hhcgkqc2V0OworCWNvbnN0IGNoYXIJKmNsZWFyOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90X2JpdHMgcHRlX2JpdHNbXSA9IHsKKwl7CisJCS5tYXNrCT0gUFRFX1VTRVIsCisJCS52YWwJPSBQVEVfVVNFUiwKKwkJLnNldAk9ICJVU1IiLAorCQkuY2xlYXIJPSAiICAgIiwKKwl9LCB7CisJCS5tYXNrCT0gUFRFX1JET05MWSwKKwkJLnZhbAk9IFBURV9SRE9OTFksCisJCS5zZXQJPSAicm8iLAorCQkuY2xlYXIJPSAiUlciLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfUFhOLAorCQkudmFsCT0gUFRFX1BYTiwKKwkJLnNldAk9ICJOWCIsCisJCS5jbGVhcgk9ICJ4ICIsCisJfSwgeworCQkubWFzawk9IFBURV9TSEFSRUQsCisJCS52YWwJPSBQVEVfU0hBUkVELAorCQkuc2V0CT0gIlNIRCIsCisJCS5jbGVhcgk9ICIgICAiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfQUYsCisJCS52YWwJPSBQVEVfQUYsCisJCS5zZXQJPSAiQUYiLAorCQkuY2xlYXIJPSAiICAiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfTkcsCisJCS52YWwJPSBQVEVfTkcsCisJCS5zZXQJPSAiTkciLAorCQkuY2xlYXIJPSAiICAiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfVVhOLAorCQkudmFsCT0gUFRFX1VYTiwKKwkJLnNldAk9ICJVWE4iLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfQVRUUklORFhfTUFTSywKKwkJLnZhbAk9IFBURV9BVFRSSU5EWChNVF9ERVZJQ0VfbkduUm5FKSwKKwkJLnNldAk9ICJERVZJQ0UvbkduUm5FIiwKKwl9LCB7CisJCS5tYXNrCT0gUFRFX0FUVFJJTkRYX01BU0ssCisJCS52YWwJPSBQVEVfQVRUUklORFgoTVRfREVWSUNFX25HblJFKSwKKwkJLnNldAk9ICJERVZJQ0UvbkduUkUiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfQVRUUklORFhfTUFTSywKKwkJLnZhbAk9IFBURV9BVFRSSU5EWChNVF9ERVZJQ0VfR1JFKSwKKwkJLnNldAk9ICJERVZJQ0UvR1JFIiwKKwl9LCB7CisJCS5tYXNrCT0gUFRFX0FUVFJJTkRYX01BU0ssCisJCS52YWwJPSBQVEVfQVRUUklORFgoTVRfTk9STUFMX05DKSwKKwkJLnNldAk9ICJNRU0vTk9STUFMLU5DIiwKKwl9LCB7CisJCS5tYXNrCT0gUFRFX0FUVFJJTkRYX01BU0ssCisJCS52YWwJPSBQVEVfQVRUUklORFgoTVRfTk9STUFMKSwKKwkJLnNldAk9ICJNRU0vTk9STUFMIiwKKwl9Cit9OworCitzdHJ1Y3QgcGdfbGV2ZWwgeworCWNvbnN0IHN0cnVjdCBwcm90X2JpdHMgKmJpdHM7CisJc2l6ZV90IG51bTsKKwl1NjQgbWFzazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGdfbGV2ZWwgcGdfbGV2ZWxbXSA9IHsKKwl7CisJfSwgeyAvKiBwZ2QgKi8KKwkJLmJpdHMJPSBwdGVfYml0cywKKwkJLm51bQk9IEFSUkFZX1NJWkUocHRlX2JpdHMpLAorCX0sIHsgLyogcHVkICovCisJCS5iaXRzCT0gcHRlX2JpdHMsCisJCS5udW0JPSBBUlJBWV9TSVpFKHB0ZV9iaXRzKSwKKwl9LCB7IC8qIHBtZCAqLworCQkuYml0cwk9IHB0ZV9iaXRzLAorCQkubnVtCT0gQVJSQVlfU0laRShwdGVfYml0cyksCisJfSwgeyAvKiBwdGUgKi8KKwkJLmJpdHMJPSBwdGVfYml0cywKKwkJLm51bQk9IEFSUkFZX1NJWkUocHRlX2JpdHMpLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBkdW1wX3Byb3Qoc3RydWN0IHBnX3N0YXRlICpzdCwgY29uc3Qgc3RydWN0IHByb3RfYml0cyAqYml0cywKKwkJCXNpemVfdCBudW0pCit7CisJdW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgYml0cysrKSB7CisJCWNvbnN0IGNoYXIgKnM7CisKKwkJaWYgKChzdC0+Y3VycmVudF9wcm90ICYgYml0cy0+bWFzaykgPT0gYml0cy0+dmFsKQorCQkJcyA9IGJpdHMtPnNldDsKKwkJZWxzZQorCQkJcyA9IGJpdHMtPmNsZWFyOworCisJCWlmIChzKQorCQkJc2VxX3ByaW50ZihzdC0+c2VxLCAiICVzIiwgcyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBub3RlX3BhZ2Uoc3RydWN0IHBnX3N0YXRlICpzdCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsZXZlbCwKKwkJCQl1NjQgdmFsKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHVuaXRzW10gPSAiS01HVFBFIjsKKwl1NjQgcHJvdCA9IHZhbCAmIHBnX2xldmVsW2xldmVsXS5tYXNrOworCisJaWYgKGFkZHIgPCBMT1dFU1RfQUREUikKKwkJcmV0dXJuOworCisJaWYgKCFzdC0+bGV2ZWwpIHsKKwkJc3QtPmxldmVsID0gbGV2ZWw7CisJCXN0LT5jdXJyZW50X3Byb3QgPSBwcm90OworCQlzdC0+c3RhcnRfYWRkcmVzcyA9IGFkZHI7CisJCXNlcV9wcmludGYoc3QtPnNlcSwgIi0tLVsgJXMgXS0tLVxuIiwgc3QtPm1hcmtlci0+bmFtZSk7CisJfSBlbHNlIGlmIChwcm90ICE9IHN0LT5jdXJyZW50X3Byb3QgfHwgbGV2ZWwgIT0gc3QtPmxldmVsIHx8CisJCSAgIGFkZHIgPj0gc3QtPm1hcmtlclsxXS5zdGFydF9hZGRyZXNzKSB7CisJCWNvbnN0IGNoYXIgKnVuaXQgPSB1bml0czsKKwkJdW5zaWduZWQgbG9uZyBkZWx0YTsKKworCQlpZiAoc3QtPmN1cnJlbnRfcHJvdCkgeworCQkJc2VxX3ByaW50ZihzdC0+c2VxLCAiMHglMTZseC0weCUxNmx4ICAgIiwKKwkJCQkgICBzdC0+c3RhcnRfYWRkcmVzcywgYWRkcik7CisKKwkJCWRlbHRhID0gKGFkZHIgLSBzdC0+c3RhcnRfYWRkcmVzcykgPj4gMTA7CisJCQl3aGlsZSAoIShkZWx0YSAmIDEwMjMpICYmIHVuaXRbMV0pIHsKKwkJCQlkZWx0YSA+Pj0gMTA7CisJCQkJdW5pdCsrOworCQkJfQorCQkJc2VxX3ByaW50ZihzdC0+c2VxLCAiJTlsdSVjIiwgZGVsdGEsICp1bml0KTsKKwkJCWlmIChwZ19sZXZlbFtzdC0+bGV2ZWxdLmJpdHMpCisJCQkJZHVtcF9wcm90KHN0LCBwZ19sZXZlbFtzdC0+bGV2ZWxdLmJpdHMsCisJCQkJCSAgcGdfbGV2ZWxbc3QtPmxldmVsXS5udW0pOworCQkJc2VxX3B1dHMoc3QtPnNlcSwgIlxuIik7CisJCX0KKworCQlpZiAoYWRkciA+PSBzdC0+bWFya2VyWzFdLnN0YXJ0X2FkZHJlc3MpIHsKKwkJCXN0LT5tYXJrZXIrKzsKKwkJCXNlcV9wcmludGYoc3QtPnNlcSwgIi0tLVsgJXMgXS0tLVxuIiwgc3QtPm1hcmtlci0+bmFtZSk7CisJCX0KKworCQlzdC0+c3RhcnRfYWRkcmVzcyA9IGFkZHI7CisJCXN0LT5jdXJyZW50X3Byb3QgPSBwcm90OworCQlzdC0+bGV2ZWwgPSBsZXZlbDsKKwl9CisKKwlpZiAoYWRkciA+PSBzdC0+bWFya2VyWzFdLnN0YXJ0X2FkZHJlc3MpIHsKKwkJc3QtPm1hcmtlcisrOworCQlzZXFfcHJpbnRmKHN0LT5zZXEsICItLS1bICVzIF0tLS1cbiIsIHN0LT5tYXJrZXItPm5hbWUpOworCX0KKworfQorCitzdGF0aWMgdm9pZCB3YWxrX3B0ZShzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXB0ZV90ICpwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIDApOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BURTsgaSsrLCBwdGUrKykgeworCQlhZGRyID0gc3RhcnQgKyBpICogUEFHRV9TSVpFOworCQlub3RlX3BhZ2Uoc3QsIGFkZHIsIDQsIHB0ZV92YWwoKnB0ZSkpOworCX0KK30KKworc3RhdGljIHZvaWQgd2Fsa19wbWQoc3RydWN0IHBnX3N0YXRlICpzdCwgcHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCkKK3sKKwlwbWRfdCAqcG1kID0gcG1kX29mZnNldChwdWQsIDApOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BNRDsgaSsrLCBwbWQrKykgeworCQlhZGRyID0gc3RhcnQgKyBpICogUE1EX1NJWkU7CisJCWlmIChwbWRfbm9uZSgqcG1kKSB8fCBwbWRfc2VjdCgqcG1kKSB8fCBwbWRfYmFkKCpwbWQpKQorCQkJbm90ZV9wYWdlKHN0LCBhZGRyLCAzLCBwbWRfdmFsKCpwbWQpKTsKKwkJZWxzZQorCQkJd2Fsa19wdGUoc3QsIHBtZCwgYWRkcik7CisJfQorfQorCitzdGF0aWMgdm9pZCB3YWxrX3B1ZChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXB1ZF90ICpwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgMCk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUFVEOyBpKyssIHB1ZCsrKSB7CisJCWFkZHIgPSBzdGFydCArIGkgKiBQVURfU0laRTsKKwkJaWYgKHB1ZF9ub25lKCpwdWQpIHx8IHB1ZF9zZWN0KCpwdWQpIHx8IHB1ZF9iYWQoKnB1ZCkpCisJCQlub3RlX3BhZ2Uoc3QsIGFkZHIsIDIsIHB1ZF92YWwoKnB1ZCkpOworCQllbHNlCisJCQl3YWxrX3BtZChzdCwgcHVkLCBhZGRyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdhbGtfcGdkKHN0cnVjdCBwZ19zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCAwKTsKKwl1bnNpZ25lZCBpOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKywgcGdkKyspIHsKKwkJYWRkciA9IHN0YXJ0ICsgaSAqIFBHRElSX1NJWkU7CisJCWlmIChwZ2Rfbm9uZSgqcGdkKSB8fCBwZ2RfYmFkKCpwZ2QpKQorCQkJbm90ZV9wYWdlKHN0LCBhZGRyLCAxLCBwZ2RfdmFsKCpwZ2QpKTsKKwkJZWxzZQorCQkJd2Fsa19wdWQoc3QsIHBnZCwgYWRkcik7CisJfQorfQorCitzdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgcGdfc3RhdGUgc3QgPSB7CisJCS5zZXEgPSBtLAorCQkubWFya2VyID0gYWRkcmVzc19tYXJrZXJzLAorCX07CisKKwl3YWxrX3BnZCgmc3QsICZpbml0X21tLCBMT1dFU1RfQUREUik7CisKKwlub3RlX3BhZ2UoJnN0LCAwLCAwLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdGR1bXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHRkdW1wX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwdGR1bXBfZm9wcyA9IHsKKwkub3BlbgkJPSBwdGR1bXBfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBwdGR1bXBfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKnBlOworCXVuc2lnbmVkIGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZ19sZXZlbCk7IGkrKykKKwkJaWYgKHBnX2xldmVsW2ldLmJpdHMpCisJCQlmb3IgKGogPSAwOyBqIDwgcGdfbGV2ZWxbaV0ubnVtOyBqKyspCisJCQkJcGdfbGV2ZWxbaV0ubWFzayB8PSBwZ19sZXZlbFtpXS5iaXRzW2pdLm1hc2s7CisKKwlhZGRyZXNzX21hcmtlcnNbVk1FTU1BUF9TVEFSVF9OUl0uc3RhcnRfYWRkcmVzcyA9CisJCQkJKHVuc2lnbmVkIGxvbmcpdmlydF90b19wYWdlKFBBR0VfT0ZGU0VUKTsKKwlhZGRyZXNzX21hcmtlcnNbVk1FTU1BUF9FTkRfTlJdLnN0YXJ0X2FkZHJlc3MgPQorCQkJCSh1bnNpZ25lZCBsb25nKXZpcnRfdG9fcGFnZShoaWdoX21lbW9yeSk7CisKKwlwZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImtlcm5lbF9wYWdlX3RhYmxlcyIsIDA0MDAsIE5VTEwsIE5VTEwsCisJCQkJICZwdGR1bXBfZm9wcyk7CisJcmV0dXJuIHBlID8gMCA6IC1FTk9NRU07Cit9CitkZXZpY2VfaW5pdGNhbGwocHRkdW1wX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jCmluZGV4IDQxY2I2ZDMuLmMxMWNkMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmMKQEAgLTM4MCw3ICszODAsNyBAQAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJsZXZlbCAxIGFkZHJlc3Mgc2l6ZSBmYXVsdCIJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkibGV2ZWwgMiBhZGRyZXNzIHNpemUgZmF1bHQiCX0sCiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJImxldmVsIDMgYWRkcmVzcyBzaXplIGZhdWx0Igl9LAotCXsgZG9fdHJhbnNsYXRpb25fZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkiaW5wdXQgYWRkcmVzcyByYW5nZSBmYXVsdCIJfSwKKwl7IGRvX3RyYW5zbGF0aW9uX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX01BUEVSUiwJImxldmVsIDAgdHJhbnNsYXRpb24gZmF1bHQiCX0sCiAJeyBkb190cmFuc2xhdGlvbl9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJsZXZlbCAxIHRyYW5zbGF0aW9uIGZhdWx0Igl9LAogCXsgZG9fdHJhbnNsYXRpb25fZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkibGV2ZWwgMiB0cmFuc2xhdGlvbiBmYXVsdCIJfSwKIAl7IGRvX3BhZ2VfZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkibGV2ZWwgMyB0cmFuc2xhdGlvbiBmYXVsdCIJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jIGIvYXJjaC9hcm02NC9tbS9pbml0LmMKaW5kZXggNDk0Mjk3Yy4uYmFjNDkyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm02NC9tbS9pbml0LmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAKICNpbmNsdWRlICJtbS5oIgogCkBAIC0zMjUsNiArMzI2LDcgQEAKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCiB7CiAJZnJlZV9pbml0bWVtX2RlZmF1bHQoMCk7CisJZnJlZV9hbHRlcm5hdGl2ZXNfbWVtb3J5KCk7CiB9CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaW9yZW1hcC5jIGIvYXJjaC9hcm02NC9tbS9pb3JlbWFwLmMKaW5kZXggNGEwNzYzMC4uY2JiOTljOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9hcm02NC9tbS9pb3JlbWFwLmMKQEAgLTEwMyw5NyArMTAzLDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGlvcmVtYXBfY2FjaGUpOwogCi1zdGF0aWMgcHRlX3QgYm1fcHRlW1BUUlNfUEVSX1BURV0gX19wYWdlX2FsaWduZWRfYnNzOwotI2lmIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDIKLXN0YXRpYyBwbWRfdCBibV9wbWRbUFRSU19QRVJfUE1EXSBfX3BhZ2VfYWxpZ25lZF9ic3M7Ci0jZW5kaWYKLSNpZiBDT05GSUdfQVJNNjRfUEdUQUJMRV9MRVZFTFMgPiAzCi1zdGF0aWMgcHVkX3QgYm1fcHVkW1BUUlNfUEVSX1BVRF0gX19wYWdlX2FsaWduZWRfYnNzOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgcHVkX3QgKiBfX2luaXQgZWFybHlfaW9yZW1hcF9wdWQodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXBnZF90ICpwZ2Q7Ci0KLQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7Ci0JQlVHX09OKHBnZF9ub25lKCpwZ2QpIHx8IHBnZF9iYWQoKnBnZCkpOwotCi0JcmV0dXJuIHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSBwbWRfdCAqIF9faW5pdCBlYXJseV9pb3JlbWFwX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcHVkX3QgKnB1ZCA9IGVhcmx5X2lvcmVtYXBfcHVkKGFkZHIpOwotCi0JQlVHX09OKHB1ZF9ub25lKCpwdWQpIHx8IHB1ZF9iYWQoKnB1ZCkpOwotCi0JcmV0dXJuIHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCAqIF9faW5pdCBlYXJseV9pb3JlbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcG1kX3QgKnBtZCA9IGVhcmx5X2lvcmVtYXBfcG1kKGFkZHIpOwotCi0JQlVHX09OKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9iYWQoKnBtZCkpOwotCi0JcmV0dXJuIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7Ci19Ci0KKy8qCisgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBlYXJseV9maXhtYXBfaW5pdAorICovCiB2b2lkIF9faW5pdCBlYXJseV9pb3JlbWFwX2luaXQodm9pZCkKIHsKLQlwZ2RfdCAqcGdkOwotCXB1ZF90ICpwdWQ7Ci0JcG1kX3QgKnBtZDsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBmaXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pOwotCi0JcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwotCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdkLCBibV9wdWQpOwotCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKLQlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgYm1fcG1kKTsKLQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7Ci0JcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBibV9wdGUpOwotCi0JLyoKLQkgKiBUaGUgYm9vdC1pb3JlbWFwIHJhbmdlIHNwYW5zIG11bHRpcGxlIHBtZHMsIGZvciB3aGljaAotCSAqIHdlIGFyZSBub3QgcHJlcGFyZWQ6Ci0JICovCi0JQlVJTERfQlVHX09OKChfX2ZpeF90b192aXJ0KEZJWF9CVE1BUF9CRUdJTikgPj4gUE1EX1NISUZUKQotCQkgICAgICE9IChfX2ZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpID4+IFBNRF9TSElGVCkpOwotCi0JaWYgKHBtZCAhPSBlYXJseV9pb3JlbWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSkpIHsKLQkJV0FSTl9PTigxKTsKLQkJcHJfd2FybigicG1kICVwICE9ICVwXG4iLAotCQkJcG1kLCBlYXJseV9pb3JlbWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSkpOwotCQlwcl93YXJuKCJmaXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pOiAlMDhseFxuIiwKLQkJCWZpeF90b192aXJ0KEZJWF9CVE1BUF9CRUdJTikpOwotCQlwcl93YXJuKCJmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKTogICAlMDhseFxuIiwKLQkJCWZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpKTsKLQotCQlwcl93YXJuKCJGSVhfQlRNQVBfRU5EOiAgICAgICAlZFxuIiwgRklYX0JUTUFQX0VORCk7Ci0JCXByX3dhcm4oIkZJWF9CVE1BUF9CRUdJTjogICAgICVkXG4iLAotCQkJRklYX0JUTUFQX0JFR0lOKTsKLQl9Ci0KIAllYXJseV9pb3JlbWFwX3NldHVwKCk7CiB9Ci0KLXZvaWQgX19pbml0IF9fZWFybHlfc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCi0JCQkgICAgICAgcGh5c19hZGRyX3QgcGh5cywgcGdwcm90X3QgZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gX19maXhfdG9fdmlydChpZHgpOwotCXB0ZV90ICpwdGU7Ci0KLQlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykgewotCQlCVUcoKTsKLQkJcmV0dXJuOwotCX0KLQotCXB0ZSA9IGVhcmx5X2lvcmVtYXBfcHRlKGFkZHIpOwotCi0JaWYgKHBncHJvdF92YWwoZmxhZ3MpKQotCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwaHlzID4+IFBBR0VfU0hJRlQsIGZsYWdzKSk7Ci0JZWxzZSB7Ci0JCXB0ZV9jbGVhcigmaW5pdF9tbSwgYWRkciwgcHRlKTsKLQkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyK1BBR0VfU0laRSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbS5oIGIvYXJjaC9hcm02NC9tbS9tbS5oCmluZGV4IGQ1MTlmNGYuLjUwYzMzNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vbW0uaAorKysgYi9hcmNoL2FybTY0L21tL21tLmgKQEAgLTEsMiArMSBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGJvb3RtZW1faW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhcm02NF9zd2lvdGxiX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tYXAuYyBiL2FyY2gvYXJtNjQvbW0vbW1hcC5jCmluZGV4IDFkNzM2NjIuLjU0OTIyZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vbW1hcC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vbW1hcC5jCkBAIC00NywyMiArNDcsMTQgQEAKIAlyZXR1cm4gc3lzY3RsX2xlZ2FjeV92YV9sYXlvdXQ7CiB9CiAKLS8qCi0gKiBTaW5jZSBnZXRfcmFuZG9tX2ludCgpIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgd2l0aGluIGEgMSBqaWZmeSB3aW5kb3csIHdlCi0gKiB3aWxsIGFsbW9zdCBhbHdheXMgZ2V0IHRoZSBzYW1lIHJhbmRvbWlzYXRpb24gZm9yIHRoZSBzdGFjayBhbmQgbW1hcAotICogcmVnaW9uLiBUaGlzIHdpbGwgbWVhbiB0aGUgcmVsYXRpdmUgZGlzdGFuY2UgYmV0d2VlbiBzdGFjayBhbmQgbW1hcCB3aWxsIGJlCi0gKiB0aGUgc2FtZS4KLSAqCi0gKiBUbyBhdm9pZCB0aGlzIHdlIGNhbiBzaGlmdCB0aGUgcmFuZG9tbmVzcyBieSAxIGJpdC4KLSAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW1hcF9ybmQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHJuZCA9IDA7CiAKIAlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpCi0JCXJuZCA9IChsb25nKWdldF9yYW5kb21faW50KCkgJiAoU1RBQ0tfUk5EX01BU0sgPj4gMSk7CisJCXJuZCA9IChsb25nKWdldF9yYW5kb21faW50KCkgJiBTVEFDS19STkRfTUFTSzsKIAotCXJldHVybiBybmQgPDwgKFBBR0VfU0hJRlQgKyAxKTsKKwlyZXR1cm4gcm5kIDw8IFBBR0VfU0hJRlQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1tYXBfYmFzZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKaW5kZXggMGJmOTBkMi4uNjAzMmYzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuYworKysgYi9hcmNoL2FybTY0L21tL21tdS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgpAQCAtMjAyLDcgKzIwMyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhbGxvY19pbml0X3B1ZChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBwaHlzLAorCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsCiAJCQkJICBpbnQgbWFwX2lvKQogewogCXB1ZF90ICpwdWQ7CkBAIC00NjMsMyArNDY0LDk2IEBACiB7CiB9CiAjZW5kaWYJLyogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQICovCisKK3N0YXRpYyBwdGVfdCBibV9wdGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisjaWYgQ09ORklHX0FSTTY0X1BHVEFCTEVfTEVWRUxTID4gMgorc3RhdGljIHBtZF90IGJtX3BtZFtQVFJTX1BFUl9QTURdIF9fcGFnZV9hbGlnbmVkX2JzczsKKyNlbmRpZgorI2lmIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDMKK3N0YXRpYyBwdWRfdCBibV9wdWRbUFRSU19QRVJfUFVEXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBwdWRfdCAqIGZpeG1hcF9wdWQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CisKKwlCVUdfT04ocGdkX25vbmUoKnBnZCkgfHwgcGdkX2JhZCgqcGdkKSk7CisKKwlyZXR1cm4gcHVkX29mZnNldChwZ2QsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHBtZF90ICogZml4bWFwX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcHVkX3QgKnB1ZCA9IGZpeG1hcF9wdWQoYWRkcik7CisKKwlCVUdfT04ocHVkX25vbmUoKnB1ZCkgfHwgcHVkX2JhZCgqcHVkKSk7CisKKwlyZXR1cm4gcG1kX29mZnNldChwdWQsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICogZml4bWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcG1kX3QgKnBtZCA9IGZpeG1hcF9wbWQoYWRkcik7CisKKwlCVUdfT04ocG1kX25vbmUoKnBtZCkgfHwgcG1kX2JhZCgqcG1kKSk7CisKKwlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKK30KKwordm9pZCBfX2luaXQgZWFybHlfZml4bWFwX2luaXQodm9pZCkKK3sKKwlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBGSVhBRERSX1NUQVJUOworCisJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOworCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdkLCBibV9wdWQpOworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgYm1fcG1kKTsKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBibV9wdGUpOworCisJLyoKKwkgKiBUaGUgYm9vdC1pb3JlbWFwIHJhbmdlIHNwYW5zIG11bHRpcGxlIHBtZHMsIGZvciB3aGljaAorCSAqIHdlIGFyZSBub3QgcHJlcGFydGVkOgorCSAqLworCUJVSUxEX0JVR19PTigoX19maXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pID4+IFBNRF9TSElGVCkKKwkJICAgICAhPSAoX19maXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSA+PiBQTURfU0hJRlQpKTsKKworCWlmICgocG1kICE9IGZpeG1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSkpCisJICAgICB8fCBwbWQgIT0gZml4bWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSkpIHsKKwkJV0FSTl9PTigxKTsKKwkJcHJfd2FybigicG1kICVwICE9ICVwLCAlcFxuIiwKKwkJCXBtZCwgZml4bWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pKSwKKwkJCWZpeG1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkpKTsKKwkJcHJfd2FybigiZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKTogJTA4bHhcbiIsCisJCQlmaXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pKTsKKwkJcHJfd2FybigiZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCk6ICAgJTA4bHhcbiIsCisJCQlmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSk7CisKKwkJcHJfd2FybigiRklYX0JUTUFQX0VORDogICAgICAgJWRcbiIsIEZJWF9CVE1BUF9FTkQpOworCQlwcl93YXJuKCJGSVhfQlRNQVBfQkVHSU46ICAgICAlZFxuIiwgRklYX0JUTUFQX0JFR0lOKTsKKwl9Cit9CisKK3ZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKKwkJCSAgICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBfX2ZpeF90b192aXJ0KGlkeCk7CisJcHRlX3QgKnB0ZTsKKworCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKSB7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJcHRlID0gZml4bWFwX3B0ZShhZGRyKTsKKworCWlmIChwZ3Byb3RfdmFsKGZsYWdzKSkgeworCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwaHlzID4+IFBBR0VfU0hJRlQsIGZsYWdzKSk7CisJfSBlbHNlIHsKKwkJcHRlX2NsZWFyKCZpbml0X21tLCBhZGRyLCBwdGUpOworCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIrUEFHRV9TSVpFKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BnZC5jIGIvYXJjaC9hcm02NC9tbS9wZ2QuYwppbmRleCA2NjgyYjM2Li43MWNhMTA0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL3BnZC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vcGdkLmMKQEAgLTM1LDkgKzM1LDkgQEAKIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJaWYgKFBHRF9TSVpFID09IFBBR0VfU0laRSkKLQkJcmV0dXJuIChwZ2RfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJcmV0dXJuIChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZShQR0FMTE9DX0dGUCk7CiAJZWxzZQotCQlyZXR1cm4ga21lbV9jYWNoZV96YWxsb2MocGdkX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MocGdkX2NhY2hlLCBQR0FMTE9DX0dGUCk7CiB9CiAKIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDQxZjFlM2UuLmVkYmEwNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC02MCw3ICs2MCw3IEBACiAJY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nOwogCWludCBpZHg7CiAJaW50IHRtcF91c2VkOwotCWludCBib2R5X29mZnNldDsKKwlpbnQgZXBpbG9ndWVfb2Zmc2V0OwogCWludCAqb2Zmc2V0OwogCXUzMiAqaW1hZ2U7CiB9OwpAQCAtMTMwLDggKzEzMCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGVwaWxvZ3VlX29mZnNldChjb25zdCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQogewotCWludCB0byA9IGN0eC0+b2Zmc2V0W2N0eC0+cHJvZy0+bGVuIC0gMV07Ci0JaW50IGZyb20gPSBjdHgtPmlkeCAtIGN0eC0+Ym9keV9vZmZzZXQ7CisJaW50IHRvID0gY3R4LT5lcGlsb2d1ZV9vZmZzZXQ7CisJaW50IGZyb20gPSBjdHgtPmlkeDsKIAogCXJldHVybiB0byAtIGZyb207CiB9CkBAIC00NjMsNiArNDYzLDggQEAKIAl9CiAJLyogZnVuY3Rpb24gcmV0dXJuICovCiAJY2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6CisJCS8qIE9wdGltaXphdGlvbjogd2hlbiBsYXN0IGluc3RydWN0aW9uIGlzIEVYSVQsCisJCSAgIHNpbXBseSBmYWxsdGhyb3VnaCB0byBlcGlsb2d1ZS4gKi8KIAkJaWYgKGkgPT0gY3R4LT5wcm9nLT5sZW4gLSAxKQogCQkJYnJlYWs7CiAJCWptcF9vZmZzZXQgPSBlcGlsb2d1ZV9vZmZzZXQoY3R4KTsKQEAgLTY4NSwxMSArNjg3LDEzIEBACiAKIAkvKiAxLiBJbml0aWFsIGZha2UgcGFzcyB0byBjb21wdXRlIGN0eC0+aWR4LiAqLwogCi0JLyogRmFrZSBwYXNzIHRvIGZpbGwgaW4gY3R4LT5vZmZzZXQuICovCisJLyogRmFrZSBwYXNzIHRvIGZpbGwgaW4gY3R4LT5vZmZzZXQgYW5kIGN0eC0+dG1wX3VzZWQuICovCiAJaWYgKGJ1aWxkX2JvZHkoJmN0eCkpCiAJCWdvdG8gb3V0OwogCiAJYnVpbGRfcHJvbG9ndWUoJmN0eCk7CisKKwljdHguZXBpbG9ndWVfb2Zmc2V0ID0gY3R4LmlkeDsKIAlidWlsZF9lcGlsb2d1ZSgmY3R4KTsKIAogCS8qIE5vdyB3ZSBrbm93IHRoZSBhY3R1YWwgaW1hZ2Ugc2l6ZS4gKi8KQEAgLTcwNiw3ICs3MTAsNiBAQAogCiAJYnVpbGRfcHJvbG9ndWUoJmN0eCk7CiAKLQljdHguYm9keV9vZmZzZXQgPSBjdHguaWR4OwogCWlmIChidWlsZF9ib2R5KCZjdHgpKSB7CiAJCWJwZl9qaXRfYmluYXJ5X2ZyZWUoaGVhZGVyKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCmluZGV4IDM3Yjc1NjAuLmNjOTJjZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oPgogCi0jaW5jbHVkZSA8bWFjaC9hdG1lbC1tY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL21tYy1hdG1lbC1tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1lbC1tY2kuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYXRtZWwtbWNpLmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFkN2Y0Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgX19NQUNIX0FUTUVMX01DSV9ICi0jZGVmaW5lIF9fTUFDSF9BVE1FTF9NQ0lfSAotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtZHcuaD4KLQotLyoqCi0gKiBzdHJ1Y3QgbWNpX2RtYV9kYXRhIC0gRE1BIGRhdGEgZm9yIE1DSSBpbnRlcmZhY2UKLSAqLwotc3RydWN0IG1jaV9kbWFfZGF0YSB7Ci0Jc3RydWN0IGR3X2RtYV9zbGF2ZQlzZGF0YTsKLX07Ci0KLS8qIGFjY2Vzc29yIG1hY3JvcyAqLwotI2RlZmluZQlzbGF2ZV9kYXRhX3B0cihzKQkoJihzKS0+c2RhdGEpCi0jZGVmaW5lIGZpbmRfc2xhdmVfZGV2KHMpCSgocyktPnNkYXRhLmRtYV9kZXYpCi0KLSNlbmRpZiAvKiBfX01BQ0hfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZTU5ZGJhMS4uNzUyYTNmNCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTExMiw2ICsxMTIsOSBAQAogCWVsc2UKIAkJKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKSBhZGRyID0gYjsKIH0KKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQoYiwgYWRkcikgd3JpdGViKGIsIGFkZHIpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKGIsIGFkZHIpIHdyaXRldyhiLCBhZGRyKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZChiLCBhZGRyKSB3cml0ZWwoYiwgYWRkcikKICNkZWZpbmUgX19yYXdfd3JpdGViIHdyaXRlYgogI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CiAjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDhjYjUwYTIuLjk5YmI3ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vaW8uaApAQCAtMjQzLDYgKzI0Myw5IEBACiAJCV9fZmx1c2hfUENJX3dyaXRlcygpOwogfQogCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkIHdyaXRlYgorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQgd3JpdGVsCiAKIC8qIFZhbHVlcyBmb3Igbm9jYWNoZWZsYWcgYW5kIGNtb2RlICovCiAjZGVmaW5lIElPTUFQX0ZVTExfQ0FDSElORwkJMApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaAppbmRleCBiZWUwYWNkLi44MGE3ZTM0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaApAQCAtMzkzLDYgKzM5MywxMCBAQAogI2RlZmluZSB3cml0ZXcodixhKQlfX3dyaXRldygodiksIChhKSkKICNkZWZpbmUgd3JpdGVsKHYsYSkJX193cml0ZWwoKHYpLCAoYSkpCiAjZGVmaW5lIHdyaXRlcSh2LGEpCV9fd3JpdGVxKCh2KSwgKGEpKQorI2RlZmluZSB3cml0ZWJfcmVsYXhlZCh2LGEpCV9fd3JpdGViKCh2KSwgKGEpKQorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCh2LGEpCV9fd3JpdGV3KCh2KSwgKGEpKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCh2LGEpCV9fd3JpdGVsKCh2KSwgKGEpKQorI2RlZmluZSB3cml0ZXFfcmVsYXhlZCh2LGEpCV9fd3JpdGVxKCh2KSwgKGEpKQogI2RlZmluZSBfX3Jhd193cml0ZWIJd3JpdGViCiAjZGVmaW5lIF9fcmF3X3dyaXRldwl3cml0ZXcKICNkZWZpbmUgX19yYXdfd3JpdGVsCXdyaXRlbApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggNDQ5YzhjMC4uMTAzYmVkYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0zNjUsMTUgKzM2NSwxNSBAQAogfQogCiAjZGVmaW5lIEFSQ0hfSEFTX1RSQU5TTEFURV9NRU1fUFRSCTEKLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgKgoteGxhdGVfZGV2X21lbV9wdHIgKHVuc2lnbmVkIGxvbmcgcCkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKgoreGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQljaGFyICogcHRyOworCXZvaWQgKnB0cjsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwID4+IFBBR0VfU0hJRlQpOwogCWlmIChQYWdlVW5jYWNoZWQocGFnZSkpCi0JCXB0ciA9IChjaGFyICopcCArIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CisJCXB0ciA9ICh2b2lkICopcCArIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CiAJZWxzZQogCQlwdHIgPSBfX3ZhKHApOwogCkBAIC0zODMsMTUgKzM4MywxNSBAQAogLyoKICAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBrZXJuZWwgbWVtb3J5IHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBjaGFyICoKLXhsYXRlX2Rldl9rbWVtX3B0ciAoY2hhciAqIHApCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkICoKK3hsYXRlX2Rldl9rbWVtX3B0cih2b2lkICpwKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCWNoYXIgKiBwdHI7CisJdm9pZCAqcHRyOwogCiAJcGFnZSA9IHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylwKTsKIAlpZiAoUGFnZVVuY2FjaGVkKHBhZ2UpKQotCQlwdHIgPSAoY2hhciAqKV9fcGEocCkgKyBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOworCQlwdHIgPSAodm9pZCAqKV9fcGEocCkgKyBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOwogCWVsc2UKIAkJcHRyID0gcDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oCmluZGV4IDRlYTYyMjUuLmJjZTliYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL3VhcGkvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS91YXBpL2FzbS9zaWdpbmZvLmgKQEAgLTYzLDYgKzYzLDEwIEBACiAJCQl1bnNpZ25lZCBpbnQgX2ZsYWdzOwkvKiBzZWUgYmVsb3cgKi8KIAkJCXVuc2lnbmVkIGxvbmcgX2lzcjsJLyogaXNyICovCiAJCQlzaG9ydCBfYWRkcl9sc2I7CS8qIGxzYiBvZiBmYXVsdGluZyBhZGRyZXNzICovCisJCQlzdHJ1Y3QgeworCQkJCXZvaWQgX191c2VyICpfbG93ZXI7CisJCQkJdm9pZCBfX3VzZXIgKl91cHBlcjsKKwkJCX0gX2FkZHJfYm5kOwogCQl9IF9zaWdmYXVsdDsKIAogCQkvKiBTSUdQT0xMICovCkBAIC0xMTAsOSArMTE0LDkgQEAKIC8qCiAgKiBTSUdTRUdWIHNpX2NvZGVzCiAgKi8KLSNkZWZpbmUgX19TRUdWX1BTVEtPVkYJKF9fU0lfRkFVTFR8MykJLyogcGFyYWdyYXBoIHN0YWNrIG92ZXJmbG93ICovCisjZGVmaW5lIF9fU0VHVl9QU1RLT1ZGCShfX1NJX0ZBVUxUfDQpCS8qIHBhcmFncmFwaCBzdGFjayBvdmVyZmxvdyAqLwogI3VuZGVmIE5TSUdTRUdWCi0jZGVmaW5lIE5TSUdTRUdWCTMKKyNkZWZpbmUgTlNJR1NFR1YJNAogCiAjdW5kZWYgTlNJR1RSQVAKICNkZWZpbmUgTlNJR1RSQVAJNApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCmluZGV4IDhjMzczMGMuLjhhZTM2ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlkYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihpcnFfdG9fdmVjdG9yKGlycSkpOwogCW1zZy5kYXRhID0gZGF0YTsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWNwdW1hc2tfY29weShpZGF0YS0+YWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7CiAKIAlyZXR1cm4gMDsKQEAgLTcxLDcgKzcxLDcgQEAKIAkJTVNJX0RBVEFfREVMSVZFUllfRklYRUQgfAogCQlNU0lfREFUQV9WRUNUT1IodmVjdG9yKTsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZpYTY0X21zaV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDIsOCArMTAyLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpYTY0X21zaV9jaGlwID0gewogCS5uYW1lCQkJPSAiUENJLU1TSSIsCi0JLmlycV9tYXNrCQk9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX21hc2sJCT0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzawkJPSBwY2lfbXNpX3VubWFza19pcnEsCiAJLmlycV9hY2sJCT0gaWE2NF9hY2tfbXNpX2lycSwKICNpZmRlZiBDT05GSUdfU01QCiAJLmlycV9zZXRfYWZmaW5pdHkJPSBpYTY0X3NldF9tc2lfaXJxX2FmZmluaXR5LApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCmluZGV4IGVjNmI5YWMuLmRiZTQ2ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKQEAgLTE1NjMsNyArMTU2Myw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKIAkJcGZuID0gZ2ZuX3RvX3Bmbihrdm0sIGJhc2VfZ2ZuICsgaSk7Ci0JCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpIHsKKwkJaWYgKCFrdm1faXNfcmVzZXJ2ZWRfcGZuKHBmbikpIHsKIAkJCWt2bV9zZXRfcG10X2VudHJ5KGt2bSwgYmFzZV9nZm4gKyBpLAogCQkJCQlwZm4gPDwgUEFHRV9TSElGVCwKIAkJCQlfUEFHRV9BUl9SV1ggfCBfUEFHRV9NQV9XQik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9tc2lfc24uYwppbmRleCA0NDZlNzc5Li5hMGViMjdiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvbXNpX3NuLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCW1zZy5kYXRhID0gMHgxMDAgKyBpcnE7CiAKIAlpcnFfc2V0X21zaV9kZXNjKGlycSwgZW50cnkpOwotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZzbl9tc2lfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxKTsKIAogCXJldHVybiAwOwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJbXNnLmFkZHJlc3NfaGkgPSAodTMyKShidXNfYWRkciA+PiAzMik7CiAJbXNnLmFkZHJlc3NfbG8gPSAodTMyKShidXNfYWRkciAmIDB4MDAwMDAwMDBmZmZmZmZmZik7CiAKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAljcHVtYXNrX2NvcHkoZGF0YS0+YWZmaW5pdHksIGNwdV9tYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMjI4LDggKzIyOCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc25fbXNpX2NoaXAgPSB7CiAJLm5hbWUJCQk9ICJQQ0ktTVNJIiwKLQkuaXJxX21hc2sJCT0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrCQk9IHVubWFza19tc2lfaXJxLAorCS5pcnFfbWFzawkJPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCQk9IHBjaV9tc2lfdW5tYXNrX2lycSwKIAkuaXJxX2FjawkJPSBzbl9hY2tfbXNpX2lycSwKICNpZmRlZiBDT05GSUdfU01QCiAJLmlycV9zZXRfYWZmaW5pdHkJPSBzbl9zZXRfbXNpX2lycV9hZmZpbml0eSwKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNDAxMGYxZi4uNmU3Nzg3ZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTE2MSw2ICsxNjEsOSBAQAogI2RlZmluZSBfX3Jhd193cml0ZWIgd3JpdGViCiAjZGVmaW5lIF9fcmF3X3dyaXRldyB3cml0ZXcKICNkZWZpbmUgX19yYXdfd3JpdGVsIHdyaXRlbAorI2RlZmluZSB3cml0ZWJfcmVsYXhlZCB3cml0ZWIKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQgd3JpdGV3CisjZGVmaW5lIHdyaXRlbF9yZWxheGVkIHdyaXRlbAogCiAjZGVmaW5lIGlvcmVhZDggcmVhZAogI2RlZmluZSBpb3JlYWQxNiByZWFkdwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCmluZGV4IDAxYTYyMTYuLjE5MmIwMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYworKysgYi9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKQEAgLTg1OCw2ICs4NTgsMjQgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX0FUQVJJX0VUSEVSTkVDICovCiAKKyNpZmRlZiBDT05GSUdfQVRBUklfU0NTSQorc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBhdGFyaV9zY3NpX3N0X3JzcmNbXSBfX2luaXRjb25zdCA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBJUlFfTUZQX0ZTQ1NJLAorCQkuZW5kICAgPSBJUlFfTUZQX0ZTQ1NJLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIGF0YXJpX3Njc2lfdHRfcnNyY1tdIF9faW5pdGNvbnN0ID0geworCXsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IElSUV9UVF9NRlBfU0NTSSwKKwkJLmVuZCAgID0gSVJRX1RUX01GUF9TQ1NJLAorCX0sCit9OworI2VuZGlmCisKIGludCBfX2luaXQgYXRhcmlfcGxhdGZvcm1faW5pdCh2b2lkKQogewogCWludCBydiA9IDA7CkBAIC04OTIsNiArOTEwLDE1IEBACiAJfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVRBUklfU0NTSQorCWlmIChBVEFSSUhXX1BSRVNFTlQoU1RfU0NTSSkpCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImF0YXJpX3Njc2kiLCAtMSwKKwkJCWF0YXJpX3Njc2lfc3RfcnNyYywgQVJSQVlfU0laRShhdGFyaV9zY3NpX3N0X3JzcmMpKTsKKwllbHNlIGlmIChBVEFSSUhXX1BSRVNFTlQoVFRfU0NTSSkpCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImF0YXJpX3Njc2kiLCAtMSwKKwkJCWF0YXJpX3Njc2lfdHRfcnNyYywgQVJSQVlfU0laRShhdGFyaV9zY3NpX3R0X3JzcmMpKTsKKyNlbmRpZgorCiAJcmV0dXJuIHJ2OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvc3RkbWEuYyBiL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCmluZGV4IGRkYmY0M2MuLmU1YTY2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCkBAIC01OSw2ICs1OSwzMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKiogRW5kIG9mIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAorLyoqCisgKiBzdGRtYV90cnlfbG9jayAtIGF0dGVtcHQgdG8gYWNxdWlyZSBTVCBETUEgaW50ZXJydXB0ICJsb2NrIgorICogQGhhbmRsZXI6IGludGVycnVwdCBoYW5kbGVyIHRvIHVzZSBhZnRlciBhY3F1aXNpdGlvbgorICoKKyAqIFJldHVybnMgITAgaWYgbG9jayB3YXMgYWNxdWlyZWQ7IG90aGVyd2lzZSAwLgorICovCisKK2ludCBzdGRtYV90cnlfbG9jayhpcnFfaGFuZGxlcl90IGhhbmRsZXIsIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoc3RkbWFfbG9ja2VkKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RkbWFfbG9ja2VkICAgPSAxOworCXN0ZG1hX2lzciAgICAgID0gaGFuZGxlcjsKKwlzdGRtYV9pc3JfZGF0YSA9IGRhdGE7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChzdGRtYV90cnlfbG9jayk7CisKIAogLyoKICAqIEZ1bmN0aW9uOiB2b2lkIHN0ZG1hX2xvY2soIGlzcmZ1bmMgaXNyLCB2b2lkICpkYXRhICkKQEAgLTc4LDE5ICsxMDMsMTAgQEAKIAogdm9pZCBzdGRtYV9sb2NrKGlycV9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJLyogcHJvdGVjdCBsb2NrICovCi0KIAkvKiBTaW5jZSB0aGUgRE1BIGlzIHVzZWQgZm9yIGZpbGUgc3lzdGVtIHB1cnBvc2VzLCB3ZQogCSBoYXZlIHRvIHNsZWVwIHVuaW50ZXJydXB0aWJsZSAodGhlcmUgbWF5IGJlIGxvY2tlZAogCSBidWZmZXJzKSAqLwotCXdhaXRfZXZlbnQoc3RkbWFfd2FpdCwgIXN0ZG1hX2xvY2tlZCk7Ci0KLQlzdGRtYV9sb2NrZWQgICA9IDE7Ci0Jc3RkbWFfaXNyICAgICAgPSBoYW5kbGVyOwotCXN0ZG1hX2lzcl9kYXRhID0gZGF0YTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJd2FpdF9ldmVudChzdGRtYV93YWl0LCBzdGRtYV90cnlfbG9jayhoYW5kbGVyLCBkYXRhKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHN0ZG1hX2xvY2spOwogCkBAIC0xMjIsMjIgKzEzOCwyNSBAQAogRVhQT1JUX1NZTUJPTChzdGRtYV9yZWxlYXNlKTsKIAogCi0vKgotICogRnVuY3Rpb246IGludCBzdGRtYV9vdGhlcnNfd2FpdGluZyggdm9pZCApCisvKioKKyAqIHN0ZG1hX2lzX2xvY2tlZF9ieSAtIGFsbG93IGxvY2sgaG9sZGVyIHRvIGNoZWNrIHdoZXRoZXIgaXQgbmVlZHMgdG8gcmVsZWFzZS4KKyAqIEBoYW5kbGVyOiBpbnRlcnJ1cHQgaGFuZGxlciBwcmV2aW91c2x5IHVzZWQgdG8gYWNxdWlyZSBsb2NrLgogICoKLSAqIFB1cnBvc2U6IENoZWNrIGlmIHNvbWVvbmUgd2FpdHMgZm9yIHRoZSBTVC1ETUEgbG9jay4KLSAqCi0gKiBJbnB1dHM6IG5vbmUKLSAqCi0gKiBSZXR1cm5zOiAwIGlmIG5vIG9uZSBpcyB3YWl0aW5nLCAhPSAwIG90aGVyd2lzZQotICoKKyAqIFJldHVybnMgITAgaWYgbG9ja2VkIGZvciB0aGUgZ2l2ZW4gaGFuZGxlcjsgMCBvdGhlcndpc2UuCiAgKi8KIAotaW50IHN0ZG1hX290aGVyc193YWl0aW5nKHZvaWQpCitpbnQgc3RkbWFfaXNfbG9ja2VkX2J5KGlycV9oYW5kbGVyX3QgaGFuZGxlcikKIHsKLQlyZXR1cm4gd2FpdHF1ZXVlX2FjdGl2ZSgmc3RkbWFfd2FpdCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJlc3VsdCA9IHN0ZG1hX2xvY2tlZCAmJiAoc3RkbWFfaXNyID09IGhhbmRsZXIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXN1bHQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHN0ZG1hX290aGVyc193YWl0aW5nKTsKK0VYUE9SVF9TWU1CT0woc3RkbWFfaXNfbG9ja2VkX2J5KTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0ZG1hLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlfc3RkbWEuaAppbmRleCA4ZTM4OWI3Li5kMjRlMzRkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlfc3RkbWEuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlfc3RkbWEuaApAQCAtOCwxMSArOCwxMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAoraW50IHN0ZG1hX3RyeV9sb2NrKGlycV9oYW5kbGVyX3QsIHZvaWQgKik7CiB2b2lkIHN0ZG1hX2xvY2soaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpkYXRhKTsKIHZvaWQgc3RkbWFfcmVsZWFzZSggdm9pZCApOwotaW50IHN0ZG1hX290aGVyc193YWl0aW5nKCB2b2lkICk7CiBpbnQgc3RkbWFfaXNsb2NrZWQoIHZvaWQgKTsKLXZvaWQgKnN0ZG1hX2xvY2tlZF9ieSggdm9pZCApOworaW50IHN0ZG1hX2lzX2xvY2tlZF9ieShpcnFfaGFuZGxlcl90KTsKIHZvaWQgc3RkbWFfaW5pdCggdm9pZCApOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgb2YgUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggYzcwY2M5MS4uYmNjZDVhOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTMsMyArMywxMSBAQAogI2Vsc2UKICNpbmNsdWRlIDxhc20vaW9fbW0uaD4KICNlbmRpZgorCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikJcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKQlyZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpCXJlYWRsKGFkZHIpCisKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQoYiwgYWRkcikJd3JpdGViKGIsIGFkZHIpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKGIsIGFkZHIpCXdyaXRldyhiLCBhZGRyKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZChiLCBhZGRyKQl3cml0ZWwoYiwgYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pb19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lvX25vLmgKaW5kZXggYmU0YjVhOC4uYTkzYzhjZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lvX25vLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lvX25vLmgKQEAgLTQwLDEwICs0MCw2IEBACiAjZGVmaW5lIHJlYWRsKGFkZHIpIFwKICAgICAoeyB1bnNpZ25lZCBpbnQgX192ID0gKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSk7IF9fdjsgfSkKIAotI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQotCiAjZGVmaW5lIHdyaXRlYihiLGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhZGRyKSkgPSAoYikpCiAjZGVmaW5lIHdyaXRldyhiLGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoYWRkcikpID0gKGIpKQogI2RlZmluZSB3cml0ZWwoYixhZGRyKSAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSkgPSAoYikpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKaW5kZXggZDMyM2IyYy4uMjljN2M2YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaApAQCAtNTMsNiArNTMsMTAgQEAKICNkZWZpbmUgTUFDX1NDU0lfUVVBRFJBCQkyCiAjZGVmaW5lIE1BQ19TQ1NJX1FVQURSQTIJMwogI2RlZmluZSBNQUNfU0NTSV9RVUFEUkEzCTQKKyNkZWZpbmUgTUFDX1NDU0lfSUlGWAkJNQorI2RlZmluZSBNQUNfU0NTSV9EVU8JCTYKKyNkZWZpbmUgTUFDX1NDU0lfQ0NMCQk3CisjZGVmaW5lIE1BQ19TQ1NJX0xBVEUJCTgKIAogI2RlZmluZSBNQUNfSURFX05PTkUJCTAKICNkZWZpbmUgTUFDX0lERV9RVUFEUkEJCTEKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA0ZWY3YTU0Li43NWU3NWQ3IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPHVhcGkvYXNtL3VuaXN0ZC5oPgogCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMJCTM1NAorI2RlZmluZSBOUl9zeXNjYWxscwkJMzU1CiAKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKaW5kZXggYjQxOWM2Yi4uMmMxYmVjOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKQEAgLTM1OSw1ICszNTksNiBAQAogI2RlZmluZSBfX05SX3JlbmFtZWF0MgkJMzUxCiAjZGVmaW5lIF9fTlJfZ2V0cmFuZG9tCQkzNTIKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJMzUzCisjZGVmaW5lIF9fTlJfYnBmCQkzNTQKIAogI2VuZGlmIC8qIF9VQVBJX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKaW5kZXggMDViNDZjMi4uMmNhMjE5ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUworKysgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TCkBAIC0zNzQsNCArMzc0LDUgQEAKIAkubG9uZyBzeXNfcmVuYW1lYXQyCiAJLmxvbmcgc3lzX2dldHJhbmRvbQogCS5sb25nIHN5c19tZW1mZF9jcmVhdGUKKwkubG9uZyBzeXNfYnBmCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCmluZGV4IGE0NzFlYWIuLmU5YzM3NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJCS5uYW1lCQk9ICJJSWZ4IiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9JT1AsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0lJRlgsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0lPUCwKQEAgLTMyOSw3ICszMjksNyBAQAogCQkubmFtZQkJPSAiQ29sb3IgQ2xhc3NpYyIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfQ0NMLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtMzM4LDcgKzMzOCw3IEBACiAJCS5uYW1lCQk9ICJDb2xvciBDbGFzc2ljIElJIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9DQ0wsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC01MjYsNyArNTI2LDcgQEAKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDUyMCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfQ0NMLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNTM1LDcgKzUzNSw3IEBACiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA1NTAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0NDTCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTU2Nyw3ICs1NjcsNyBAQAogCQkubmFtZQkJPSAiVFYiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0NDTCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTcxMiw3ICs3MTIsNyBAQAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE5MCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0xBVEUsCiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfQkFCT09OLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCkBAIC03MjIsNyArNzIyLDcgQEAKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayA1MjAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9MQVRFLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLApAQCAtNzQwLDcgKzc0MCw3IEBACiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDIxMCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9EVU8sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNzQ5LDcgKzc0OSw3IEBACiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDIzMCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9EVU8sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNzU4LDcgKzc1OCw3IEBACiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI1MCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9EVU8sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNzY3LDcgKzc2Nyw3IEBACiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI3MGMiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfRFVPLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTc3Niw3ICs3NzYsNyBAQAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfRFVPLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTc4NSw3ICs3ODUsNyBAQAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODBjIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0RVTywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC05MjksNiArOTI5LDcwIEBACiAJLnJlc291cmNlCT0gJnN3aW1fcnNyYywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgbWFjX3Njc2lfaWlmeF9yc3JjW10gX19pbml0Y29uc3QgPSB7CisJeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gSVJRX01BQ19TQ1NJLAorCQkuZW5kICAgPSBJUlFfTUFDX1NDU0ksCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHg1MDAwODAwMCwKKwkJLmVuZCAgID0gMHg1MDAwOUZGRiwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBtYWNfc2NzaV9kdW9fcnNyY1tdIF9faW5pdGNvbnN0ID0geworCXsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4RkVFMDIwMDAsCisJCS5lbmQgICA9IDB4RkVFMDNGRkYsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgbWFjX3Njc2lfb2xkX3JzcmNbXSBfX2luaXRjb25zdCA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBJUlFfTUFDX1NDU0ksCisJCS5lbmQgICA9IElSUV9NQUNfU0NTSSwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweDUwMDEwMDAwLAorCQkuZW5kICAgPSAweDUwMDExRkZGLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4NTAwMDYwMDAsCisJCS5lbmQgICA9IDB4NTAwMDdGRkYsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgbWFjX3Njc2lfbGF0ZV9yc3JjW10gX19pbml0Y29uc3QgPSB7CisJeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gSVJRX01BQ19TQ1NJLAorCQkuZW5kICAgPSBJUlFfTUFDX1NDU0ksCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHg1MDAxMDAwMCwKKwkJLmVuZCAgID0gMHg1MDAxMUZGRiwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBtYWNfc2NzaV9jY2xfcnNyY1tdIF9faW5pdGNvbnN0ID0geworCXsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IElSUV9NQUNfU0NTSSwKKwkJLmVuZCAgID0gSVJRX01BQ19TQ1NJLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4NTBGMTAwMDAsCisJCS5lbmQgICA9IDB4NTBGMTFGRkYsCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHg1MEYwNjAwMCwKKwkJLmVuZCAgID0gMHg1MEYwN0ZGRiwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwXzBfcGRldiA9IHsKIAkubmFtZQkJPSAibWFjX2VzcCIsCiAJLmlkCQk9IDAsCkBAIC0xMDAwLDYgKzEwNjQsNjAgQEAKIAkJICAgIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTk1MCkpCiAJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVzcF8xX3BkZXYpOwogCQlicmVhazsKKwljYXNlIE1BQ19TQ1NJX0lJRlg6CisJCS8qIEFkZHJlc3NlcyBmcm9tIFRoZSBHdWlkZSB0byBNYWMgRmFtaWx5IEhhcmR3YXJlLgorCQkgKiAkNTAwMCA4MDAwIC0gJDUwMDAgOUZGRjogU0NTSSBETUEKKwkJICogJDUwMDAgQzAwMCAtICQ1MDAwIERGRkY6IEFsdGVybmF0ZSBTQ1NJIChETUEpCisJCSAqICQ1MDAwIEUwMDAgLSAkNTAwMCBGRkZGOiBBbHRlcm5hdGUgU0NTSSAoSHNrKQorCQkgKiBUaGUgU0NTSSBETUEgY3VzdG9tIElDIGVtYmVkcyB0aGUgNTNDODAgY29yZS4gbWFjX3Njc2kgZG9lcworCQkgKiBub3QgbWFrZSB1c2Ugb2YgaXRzIERNQSBvciBoYXJkd2FyZSBoYW5kc2hha2luZyBsb2dpYy4KKwkJICovCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1hY19zY3NpIiwgMCwKKwkJCW1hY19zY3NpX2lpZnhfcnNyYywgQVJSQVlfU0laRShtYWNfc2NzaV9paWZ4X3JzcmMpKTsKKwkJYnJlYWs7CisJY2FzZSBNQUNfU0NTSV9EVU86CisJCS8qIEFkZHJlc3NlcyBmcm9tIHRoZSBEdW8gRG9jayBJSSBEZXZlbG9wZXIgTm90ZS4KKwkJICogJEZFRTAgMjAwMCAtICRGRUUwIDNGRkY6IG5vcm1hbCBtb2RlCisJCSAqICRGRUUwIDQwMDAgLSAkRkVFMCA1RkZGOiBwc2V1ZG8gRE1BIHdpdGhvdXQgL0RSUQorCQkgKiAkRkVFMCA2MDAwIC0gJEZFRTAgN0ZGRjogcHNldWRvIERNQSB3aXRoIC9EUlEKKwkJICogVGhlIE5ldEJTRCBjb2RlIGluZGljYXRlcyB0aGF0IGJvdGggNTM4MCBjaGlwcyBzaGFyZQorCQkgKiBhbiBJUlEgKD8pIHdoaWNoIHdvdWxkIG5lZWQgY2FyZWZ1bCBoYW5kbGluZyAoc2VlIG1hY19lc3ApLgorCQkgKi8KKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibWFjX3Njc2kiLCAxLAorCQkJbWFjX3Njc2lfZHVvX3JzcmMsIEFSUkFZX1NJWkUobWFjX3Njc2lfZHVvX3JzcmMpKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBNQUNfU0NTSV9PTEQ6CisJCS8qIEFkZHJlc3NlcyBmcm9tIERldmVsb3BlciBOb3RlcyBmb3IgRHVvIFN5c3RlbSwKKwkJICogUG93ZXJCb29rIDE4MCAmIDE2MCwgMTQwICYgMTcwLCBNYWNpbnRvc2ggSUlzaQorCQkgKiBhbmQgYWxzbyBmcm9tIFRoZSBHdWlkZSB0byBNYWMgRmFtaWx5IEhhcmR3YXJlIGZvcgorCQkgKiBTRS8zMCwgSUksIElJeCwgSUljeCwgSUljaS4KKwkJICogJDUwMDAgNjAwMCAtICQ1MDAwIDdGRkY6IHBzZXVkby1ETUEgd2l0aCAvRFJRCisJCSAqICQ1MDAxIDAwMDAgLSAkNTAwMSAxRkZGOiBub3JtYWwgbW9kZQorCQkgKiAkNTAwMSAyMDAwIC0gJDUwMDEgM0ZGRjogcHNldWRvLURNQSB3aXRob3V0IC9EUlEKKwkJICogR01GSCBzYXlzIHRoYXQgJDUwMDAgMDAwMCAtICQ1MEZGIEZGRkYgIndyYXBzCisJCSAqICQ1MDAwIDAwMDAgLSAkNTAwMSBGRkZGIGVpZ2h0IHRpbWVzIiAoISkKKwkJICogbWVzcy5vcmcgc2F5cyBJSWNpIGFuZCBDb2xvciBDbGFzc2ljIGRvIG5vdCBhbGlhcworCQkgKiBJL08gYWRkcmVzcyBzcGFjZS4KKwkJICovCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1hY19zY3NpIiwgMCwKKwkJCW1hY19zY3NpX29sZF9yc3JjLCBBUlJBWV9TSVpFKG1hY19zY3NpX29sZF9yc3JjKSk7CisJCWJyZWFrOworCWNhc2UgTUFDX1NDU0lfTEFURToKKwkJLyogUERNQSBsb2dpYyBpbiA2ODA0MCBQb3dlckJvb2tzIGlzIHNvbWVob3cgZGlmZmVyZW50IHRvCisJCSAqICcwMzAgbW9kZWxzLiBJdCdzIHByb2JhYmx5IG1vcmUgbGlrZSBRdWFkcmFzIChzZWUgbWFjX2VzcCkuCisJCSAqLworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJtYWNfc2NzaSIsIDAsCisJCQltYWNfc2NzaV9sYXRlX3JzcmMsIEFSUkFZX1NJWkUobWFjX3Njc2lfbGF0ZV9yc3JjKSk7CisJCWJyZWFrOworCWNhc2UgTUFDX1NDU0lfQ0NMOgorCQkvKiBBZGRyZXNzZXMgZnJvbSB0aGUgQ29sb3IgQ2xhc3NpYyBEZXZlbG9wZXIgTm90ZS4KKwkJICogJDUwRjAgNjAwMCAtICQ1MEYwIDdGRkY6IFNDU0kgaGFuZHNoYWtlCisJCSAqICQ1MEYxIDAwMDAgLSAkNTBGMSAxRkZGOiBTQ1NJCisJCSAqICQ1MEYxIDIwMDAgLSAkNTBGMSAzRkZGOiBTQ1NJIERNQQorCQkgKi8KKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibWFjX3Njc2kiLCAwLAorCQkJbWFjX3Njc2lfY2NsX3JzcmMsIEFSUkFZX1NJWkUobWFjX3Njc2lfY2NsX3JzcmMpKTsKKwkJYnJlYWs7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9pbml0LmMgYi9hcmNoL202OGsvbW0vaW5pdC5jCmluZGV4IGFjYWZmNmEuLmIwOWEzY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tbS9pbml0LmMKKysrIGIvYXJjaC9tNjhrL21tL2luaXQuYwpAQCAtOTQsNyArOTQsNiBAQAogCWhpZ2hfbWVtb3J5ID0gKHZvaWQgKikgZW5kX21lbTsKIAogCWVtcHR5X3plcm9fcGFnZSA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQltZW1zZXQoZW1wdHlfemVyb19wYWdlLCAwLCBQQUdFX1NJWkUpOwogCiAJLyoKIAkgKiBTZXQgdXAgU0ZDL0RGQyByZWdpc3RlcnMgKHVzZXIgZGF0YSBzcGFjZSkuCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9jb25maWcuYyBiL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jCmluZGV4IGY1OWVjNTguLmE4Yjk0MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTI3LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vc3VuM21tdS5oPgogI2luY2x1ZGUgPGFzbS9ydGMuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoaW5lcy5oPgogI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KICNpbmNsdWRlIDxhc20vaW50ZXJzaWwuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0xNjksMyArMTcxLDYxIEBACiAgICAgICAgIGludGVyc2lsX2NsZWFyKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1VOM19TQ1NJCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2Ugc3VuM19zY3NpX3ZtZV9yc3JjW10gX19pbml0Y29uc3QgPSB7CisJeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gU1VOM19WRUNfVk1FU0NTSTAsCisJCS5lbmQgICA9IFNVTjNfVkVDX1ZNRVNDU0kwLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4ZmYyMDAwMDAsCisJCS5lbmQgICA9IDB4ZmYyMDAwMjEsCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gU1VOM19WRUNfVk1FU0NTSTEsCisJCS5lbmQgICA9IFNVTjNfVkVDX1ZNRVNDU0kxLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4ZmYyMDQwMDAsCisJCS5lbmQgICA9IDB4ZmYyMDQwMjEsCisJfSwKK307CisKKy8qCisgKiBJbnQ6IGxldmVsIDIgYXV0b3ZlY3RvcgorICogSU86IHR5cGUgMSwgYmFzZSAweDAwMTQwMDAwLCA1IGJpdHMgcGh5cyBzcGFjZTogQTw0Li4wPgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIHN1bjNfc2NzaV9yc3JjW10gX19pbml0Y29uc3QgPSB7CisJeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gMiwKKwkJLmVuZCAgID0gMiwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweDAwMTQwMDAwLAorCQkuZW5kICAgPSAweDAwMTQwMDFmLAorCX0sCit9OworCitpbnQgX19pbml0IHN1bjNfcGxhdGZvcm1faW5pdCh2b2lkKQoreworCXN3aXRjaCAoaWRwcm9tLT5pZF9tYWNodHlwZSkgeworCWNhc2UgU01fU1VOMyB8IFNNXzNfMTYwOgorCWNhc2UgU01fU1VOMyB8IFNNXzNfMjYwOgorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJzdW4zX3Njc2lfdm1lIiwgLTEsCisJCQlzdW4zX3Njc2lfdm1lX3JzcmMsIEFSUkFZX1NJWkUoc3VuM19zY3NpX3ZtZV9yc3JjKSk7CisJCWJyZWFrOworCWNhc2UgU01fU1VOMyB8IFNNXzNfNTA6CisJY2FzZSBTTV9TVU4zIHwgU01fM182MDoKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgic3VuM19zY3NpIiwgLTEsCisJCQlzdW4zX3Njc2lfcnNyYywgQVJSQVlfU0laRShzdW4zX3Njc2lfcnNyYykpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoc3VuM19wbGF0Zm9ybV9pbml0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDQzMzc1MWIuLjk0MGY1ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oCkBAIC02OSwxMiArNjksNCBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW8uaD4KIAotI2RlZmluZSByZWFkYl9yZWxheGVkCXJlYWRiCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQJcmVhZHcKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZAlyZWFkbAotCi0jZGVmaW5lIHdyaXRlYl9yZWxheGVkCXdyaXRlYgotI2RlZmluZSB3cml0ZXdfcmVsYXhlZAl3cml0ZXcKLSNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQJd3JpdGVsCi0KICNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDhhYTk3ODEuLjk5YjZkZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKIAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KIAogI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJCWRvIHsgfSB3aGlsZSAoMCkKQEAgLTIyLDQgKzIxLDYgQEAKICNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKwogI2VuZGlmIC8qIF9BU01fTUlDUk9CTEFaRV9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCBmNDNhYTUzLi45NTM2ZWY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMjEwMSw5ICsyMTAxLDE3IEBACiBjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAogICAgICAgIGRlZl9ib29sIDY0QklUX1BIWVNfQUREUgogCitjaG9pY2UKKwlwcm9tcHQgIlNtYXJ0TUlQUyBvciBtaWNyb01JUFMgQVNFIHN1cHBvcnQiCisKK2NvbmZpZyBDUFVfTkVFRFNfTk9fU01BUlRNSVBTX09SX01JQ1JPTUlQUworCWJvb2wgIk5vbmUiCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IHdhbnQgbmVpdGhlciBtaWNyb01JUFMgbm9yIFNtYXJ0TUlQUyBzdXBwb3J0CisKIGNvbmZpZyBDUFVfSEFTX1NNQVJUTUlQUwogCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX1NNQVJUTUlQUwotCWJvb2wgIlN1cHBvcnQgZm9yIHRoZSBTbWFydE1JUFMgQVNFIgorCWJvb2wgIlNtYXJ0TUlQUyIKIAloZWxwCiAJICBTbWFydE1JUFMgaXMgYSBleHRlbnNpb24gb2YgdGhlIE1JUFMzMiBhcmNoaXRlY3R1cmUgYWltZWQgYXQKIAkgIGluY3JlYXNlZCBzZWN1cml0eSBhdCBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBsZXZlbCBmb3IKQEAgLTIxMTUsMTEgKzIxMjMsMTMgQEAKIAogY29uZmlnIENQVV9NSUNST01JUFMKIAlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19NSUNST01JUFMKLQlib29sICJCdWlsZCBrZXJuZWwgdXNpbmcgbWljcm9NSVBTIElTQSIKKwlib29sICJtaWNyb01JUFMiCiAJaGVscAogCSAgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIHRoZSBrZXJuZWwgd2lsbCBiZSBidWlsdCB1c2luZyB0aGUKIAkgIG1pY3JvTUlQUyBJU0EKIAorZW5kY2hvaWNlCisKIGNvbmZpZyBDUFVfSEFTX01TQQogCWJvb2wgIlN1cHBvcnQgZm9yIHRoZSBNSVBTIFNJTUQgQXJjaGl0ZWN0dXJlIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gQ1BVX1NVUFBPUlRTX01TQQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDIzY2I5NDguLjU4MDc2NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTkzLDYgKzkzLDE1IEBACiBLQlVJTERfQUZMQUdTX01PRFVMRQkJKz0gLW1sb25nLWNhbGxzCiBLQlVJTERfQ0ZMQUdTX01PRFVMRQkJKz0gLW1sb25nLWNhbGxzCiAKKyMKKyMgcGFzcyAtbXNvZnQtZmxvYXQgdG8gR0FTIGlmIGl0IHN1cHBvcnRzIGl0LiAgSG93ZXZlciBvbiBuZXdlciBiaW51dGlscworIyAoc3BlY2lmaWNhbGx5IG5ld2VyIHRoYW4gMi4yNC41MS4yMDE0MDcyOCkgd2UgdGhlbiBhbHNvIG5lZWQgdG8gZXhwbGljaXRseQorIyBzZXQgIi5zZXQgaGFyZGZsb2F0IiBpbiBhbGwgZmlsZXMgd2hpY2ggbWFuaXB1bGF0ZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCisjCitpZm5lcSAoJChjYWxsIGFzLW9wdGlvbiwtV2EkKGNvbW1hKS1tc29mdC1mbG9hdCwpLCkKKwljZmxhZ3MteQkJKz0gLURHQVNfSEFTX1NFVF9IQVJERkxPQVQgLVdhLC1tc29mdC1mbG9hdAorZW5kaWYKKwogY2ZsYWdzLXkgKz0gLWZmcmVlc3RhbmRpbmcKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCmluZGV4IDc0MTczNDAuLjJiYzRhYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKQEAgLTgwOSw2ICs4MDksNyBAQAogCS5pcnFfc2V0X3R5cGUgPSBvY3Rlb25faXJxX2NpdV9ncGlvX3NldF90eXBlLAogI2lmZGVmIENPTkZJR19TTVAKIAkuaXJxX3NldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1X3NldF9hZmZpbml0eV92MiwKKwkuaXJxX2NwdV9vZmZsaW5lID0gb2N0ZW9uX2lycV9jcHVfb2ZmbGluZV9jaXUsCiAjZW5kaWYKIAkuZmxhZ3MgPSBJUlFDSElQX1NFVF9UWVBFX01BU0tFRCwKIH07CkBAIC04MjMsNiArODI0LDcgQEAKIAkuaXJxX3NldF90eXBlID0gb2N0ZW9uX2lycV9jaXVfZ3Bpb19zZXRfdHlwZSwKICNpZmRlZiBDT05GSUdfU01QCiAJLmlycV9zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdV9zZXRfYWZmaW5pdHksCisJLmlycV9jcHVfb2ZmbGluZSA9IG9jdGVvbl9pcnFfY3B1X29mZmxpbmVfY2l1LAogI2VuZGlmCiAJLmZsYWdzID0gSVJRQ0hJUF9TRVRfVFlQRV9NQVNLRUQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2FzbW1hY3JvLTMyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8tMzIuaAppbmRleCBlMzhjMjgxLi5jZGFjN2IzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8tMzIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8tMzIuaApAQCAtMTMsNiArMTMsOCBAQAogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogCiAJLm1hY3JvCWZwdV9zYXZlX3NpbmdsZSB0aHJlYWQgdG1wPXQwCisJLnNldCBwdXNoCisJU0VUX0hBUkRGTE9BVAogCWNmYzEJXHRtcCwgIGZjcjMxCiAJc3djMQkkZjAsICBUSFJFQURfRlBSMF9MUzY0KFx0aHJlYWQpCiAJc3djMQkkZjEsICBUSFJFQURfRlBSMV9MUzY0KFx0aHJlYWQpCkBAIC00Nyw5ICs0OSwxMiBAQAogCXN3YzEJJGYzMCwgVEhSRUFEX0ZQUjMwX0xTNjQoXHRocmVhZCkKIAlzd2MxCSRmMzEsIFRIUkVBRF9GUFIzMV9MUzY0KFx0aHJlYWQpCiAJc3cJXHRtcCwgVEhSRUFEX0ZDUjMxKFx0aHJlYWQpCisJLnNldCBwb3AKIAkuZW5kbQogCiAJLm1hY3JvCWZwdV9yZXN0b3JlX3NpbmdsZSB0aHJlYWQgdG1wPXQwCisJLnNldCBwdXNoCisJU0VUX0hBUkRGTE9BVAogCWx3CVx0bXAsIFRIUkVBRF9GQ1IzMShcdGhyZWFkKQogCWx3YzEJJGYwLCAgVEhSRUFEX0ZQUjBfTFM2NChcdGhyZWFkKQogCWx3YzEJJGYxLCAgVEhSRUFEX0ZQUjFfTFM2NChcdGhyZWFkKQpAQCAtODQsNiArODksNyBAQAogCWx3YzEJJGYzMCwgVEhSRUFEX0ZQUjMwX0xTNjQoXHRocmVhZCkKIAlsd2MxCSRmMzEsIFRIUkVBRF9GUFIzMV9MUzY0KFx0aHJlYWQpCiAJY3RjMQlcdG1wLCBmY3IzMQorCS5zZXQgcG9wCiAJLmVuZG0KIAogCS5tYWNybwljcHVfc2F2ZV9ub25zY3JhdGNoIHRocmVhZApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2FzbW1hY3JvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8uaAppbmRleCBjZDlhOThiLi42Y2FmODc2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8uaApAQCAtNTcsNiArNTcsOCBAQAogI2VuZGlmIC8qIENPTkZJR19DUFVfTUlQU1IyICovCiAKIAkubWFjcm8JZnB1X3NhdmVfMTZldmVuIHRocmVhZCB0bXA9dDAKKwkuc2V0CXB1c2gKKwlTRVRfSEFSREZMT0FUCiAJY2ZjMQlcdG1wLCBmY3IzMQogCXNkYzEJJGYwLCAgVEhSRUFEX0ZQUjBfTFM2NChcdGhyZWFkKQogCXNkYzEJJGYyLCAgVEhSRUFEX0ZQUjJfTFM2NChcdGhyZWFkKQpAQCAtNzUsMTEgKzc3LDEzIEBACiAJc2RjMQkkZjI4LCBUSFJFQURfRlBSMjhfTFM2NChcdGhyZWFkKQogCXNkYzEJJGYzMCwgVEhSRUFEX0ZQUjMwX0xTNjQoXHRocmVhZCkKIAlzdwlcdG1wLCBUSFJFQURfRkNSMzEoXHRocmVhZCkKKwkuc2V0CXBvcAogCS5lbmRtCiAKIAkubWFjcm8JZnB1X3NhdmVfMTZvZGQgdGhyZWFkCiAJLnNldAlwdXNoCiAJLnNldAltaXBzNjRyMgorCVNFVF9IQVJERkxPQVQKIAlzZGMxCSRmMSwgIFRIUkVBRF9GUFIxX0xTNjQoXHRocmVhZCkKIAlzZGMxCSRmMywgIFRIUkVBRF9GUFIzX0xTNjQoXHRocmVhZCkKIAlzZGMxCSRmNSwgIFRIUkVBRF9GUFI1X0xTNjQoXHRocmVhZCkKQEAgLTExMCw2ICsxMTQsOCBAQAogCS5lbmRtCiAKIAkubWFjcm8JZnB1X3Jlc3RvcmVfMTZldmVuIHRocmVhZCB0bXA9dDAKKwkuc2V0CXB1c2gKKwlTRVRfSEFSREZMT0FUCiAJbHcJXHRtcCwgVEhSRUFEX0ZDUjMxKFx0aHJlYWQpCiAJbGRjMQkkZjAsICBUSFJFQURfRlBSMF9MUzY0KFx0aHJlYWQpCiAJbGRjMQkkZjIsICBUSFJFQURfRlBSMl9MUzY0KFx0aHJlYWQpCkBAIC0xMzMsNiArMTM5LDcgQEAKIAkubWFjcm8JZnB1X3Jlc3RvcmVfMTZvZGQgdGhyZWFkCiAJLnNldAlwdXNoCiAJLnNldAltaXBzNjRyMgorCVNFVF9IQVJERkxPQVQKIAlsZGMxCSRmMSwgIFRIUkVBRF9GUFIxX0xTNjQoXHRocmVhZCkKIAlsZGMxCSRmMywgIFRIUkVBRF9GUFIzX0xTNjQoXHRocmVhZCkKIAlsZGMxCSRmNSwgIFRIUkVBRF9GUFI1X0xTNjQoXHRocmVhZCkKQEAgLTI3Nyw2ICsyODQsNyBAQAogCS5tYWNybwljZmNtc2EJcmQsIGNzCiAJLnNldAlwdXNoCiAJLnNldAlub2F0CisJU0VUX0hBUkRGTE9BVAogCS5pbnNuCiAJLndvcmQJQ0ZDX01TQV9JTlNOIHwgKFxjcyA8PCAxMSkKIAltb3ZlCVxyZCwgJDEKQEAgLTI4Niw2ICsyOTQsNyBAQAogCS5tYWNybwljdGNtc2EJY2QsIHJzCiAJLnNldAlwdXNoCiAJLnNldAlub2F0CisJU0VUX0hBUkRGTE9BVAogCW1vdmUJJDEsIFxycwogCS53b3JkCUNUQ19NU0FfSU5TTiB8IChcY2QgPDwgNikKIAkuc2V0CXBvcApAQCAtMjk0LDYgKzMwMyw3IEBACiAJLm1hY3JvCWxkX2QJd2QsIG9mZiwgYmFzZQogCS5zZXQJcHVzaAogCS5zZXQJbm9hdAorCVNFVF9IQVJERkxPQVQKIAlhZGQJJDEsIFxiYXNlLCBcb2ZmCiAJLndvcmQJTEREX01TQV9JTlNOIHwgKFx3ZCA8PCA2KQogCS5zZXQJcG9wCkBAIC0zMDIsNiArMzEyLDcgQEAKIAkubWFjcm8Jc3RfZAl3ZCwgb2ZmLCBiYXNlCiAJLnNldAlwdXNoCiAJLnNldAlub2F0CisJU0VUX0hBUkRGTE9BVAogCWFkZAkkMSwgXGJhc2UsIFxvZmYKIAkud29yZAlTVERfTVNBX0lOU04gfCAoXHdkIDw8IDYpCiAJLnNldAlwb3AKQEAgLTMxMCw2ICszMjEsNyBAQAogCS5tYWNybwljb3B5X3VfdwlyZCwgd3MsIG4KIAkuc2V0CXB1c2gKIAkuc2V0CW5vYXQKKwlTRVRfSEFSREZMT0FUCiAJLmluc24KIAkud29yZAlDT1BZX1VXX01TQV9JTlNOIHwgKFxuIDw8IDE2KSB8IChcd3MgPDwgMTEpCiAJLyogbW92ZSB0cmlnZ2VycyBhbiBhc3NlbWJsZXIgYnVnLi4uICovCkBAIC0zMjAsNiArMzMyLDcgQEAKIAkubWFjcm8JY29weV91X2QJcmQsIHdzLCBuCiAJLnNldAlwdXNoCiAJLnNldAlub2F0CisJU0VUX0hBUkRGTE9BVAogCS5pbnNuCiAJLndvcmQJQ09QWV9VRF9NU0FfSU5TTiB8IChcbiA8PCAxNikgfCAoXHdzIDw8IDExKQogCS8qIG1vdmUgdHJpZ2dlcnMgYW4gYXNzZW1ibGVyIGJ1Zy4uLiAqLwpAQCAtMzMwLDYgKzM0Myw3IEBACiAJLm1hY3JvCWluc2VydF93CXdkLCBuLCBycwogCS5zZXQJcHVzaAogCS5zZXQJbm9hdAorCVNFVF9IQVJERkxPQVQKIAkvKiBtb3ZlIHRyaWdnZXJzIGFuIGFzc2VtYmxlciBidWcuLi4gKi8KIAlvcgkkMSwgXHJzLCB6ZXJvCiAJLndvcmQJSU5TRVJUX1dfTVNBX0lOU04gfCAoXG4gPDwgMTYpIHwgKFx3ZCA8PCA2KQpAQCAtMzM5LDYgKzM1Myw3IEBACiAJLm1hY3JvCWluc2VydF9kCXdkLCBuLCBycwogCS5zZXQJcHVzaAogCS5zZXQJbm9hdAorCVNFVF9IQVJERkxPQVQKIAkvKiBtb3ZlIHRyaWdnZXJzIGFuIGFzc2VtYmxlciBidWcuLi4gKi8KIAlvcgkkMSwgXHJzLCB6ZXJvCiAJLndvcmQJSU5TRVJUX0RfTVNBX0lOU04gfCAoXG4gPDwgMTYpIHwgKFx3ZCA8PCA2KQpAQCAtMzgxLDYgKzM5Niw3IEBACiAJc3RfZAkzMSwgVEhSRUFEX0ZQUjMxLCBcdGhyZWFkCiAJLnNldAlwdXNoCiAJLnNldAlub2F0CisJU0VUX0hBUkRGTE9BVAogCWNmY21zYQkkMSwgTVNBX0NTUgogCXN3CSQxLCBUSFJFQURfTVNBX0NTUihcdGhyZWFkKQogCS5zZXQJcG9wCkBAIC0zODksNiArNDA1LDcgQEAKIAkubWFjcm8JbXNhX3Jlc3RvcmVfYWxsCXRocmVhZAogCS5zZXQJcHVzaAogCS5zZXQJbm9hdAorCVNFVF9IQVJERkxPQVQKIAlsdwkkMSwgVEhSRUFEX01TQV9DU1IoXHRocmVhZCkKIAljdGNtc2EJTVNBX0NTUiwgJDEKIAkuc2V0CXBvcApAQCAtNDQxLDYgKzQ1OCw3IEBACiAJLm1hY3JvCW1zYV9pbml0X2FsbF91cHBlcgogCS5zZXQJcHVzaAogCS5zZXQJbm9hdAorCVNFVF9IQVJERkxPQVQKIAlub3QJJDEsIHplcm8KIAltc2FfaW5pdF91cHBlcgkwCiAJLnNldAlwb3AKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mcHJlZ2RlZi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwcmVnZGVmLmgKaW5kZXggNDI5NDgxZi4uZjE4NGJhMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwcmVnZGVmLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwcmVnZGVmLmgKQEAgLTE0LDYgKzE0LDIwIEBACiAKICNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgogCisvKgorICogc3RhcnRpbmcgd2l0aCBiaW51dGlscyAyLjI0LjUxLjIwMTQwNzI5LCBNSVBTIGJpbnV0aWxzIHdhcm4gYWJvdXQgbWl4aW5nCisgKiBoYXJkZmxvYXQgYW5kIHNvZnRmbG9hdCBvYmplY3QgZmlsZXMuICBUaGUga2VybmVsIGJ1aWxkIHVzZXMgc29mdC1mbG9hdCBieQorICogZGVmYXVsdCwgc28gd2UgYWxzbyBuZWVkIHRvIHBhc3MgLW1zb2Z0LWZsb2F0IGFsb25nIHRvIEdBUyBpZiBpdCBzdXBwb3J0cyBpdC4KKyAqIEJ1dCB0aGlzIGluIHR1cm4gY2F1c2VzIGFzc2VtYmxlciBlcnJvcnMgaW4gZmlsZXMgd2hpY2ggYWNjZXNzIGhhcmRmbG9hdAorICogcmVnaXN0ZXJzLiAgV2UgZGV0ZWN0IGlmIEdBUyBzdXBwb3J0cyAiLW1zb2Z0LWZsb2F0IiBpbiB0aGUgTWFrZWZpbGUgYW5kCisgKiBleHBsaWNpdGx5IHB1dCAiLnNldCBoYXJkZmxvYXQiIHdoZXJlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBhcmUgdG91Y2hlZC4KKyAqLworI2lmZGVmIEdBU19IQVNfU0VUX0hBUkRGTE9BVAorI2RlZmluZSBTRVRfSEFSREZMT0FUIC5zZXQgaGFyZGZsb2F0CisjZWxzZQorI2RlZmluZSBTRVRfSEFSREZMT0FUCisjZW5kaWYKKwogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mcHUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mcHUuaAppbmRleCA0ZDBhZWRhLi5kZDU2MjQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnB1LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwdS5oCkBAIC0xNDUsOCArMTQ1LDggQEAKIAlpZiAoaXNfbXNhX2VuYWJsZWQoKSkgewogCQlpZiAoc2F2ZSkgewogCQkJc2F2ZV9tc2EoY3VycmVudCk7Ci0JCQlhc20gdm9sYXRpbGUoImNmYzEgJTAsICQzMSIKLQkJCQk6ICI9ciIoY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSkpOworCQkJY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSA9CisJCQkJCXJlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKENQMV9TVEFUVVMpOwogCQl9CiAJCWRpc2FibGVfbXNhKCk7CiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9VU0VETVNBKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCmluZGV4IGUxOTRmOTUuLmZkYmZmNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaApAQCAtMjAsOSArMjAsMTUgQEAKICNkZWZpbmUgV09SRF9JTlNOICIud29yZCIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0NQVV9NSUNST01JUFMKKyNkZWZpbmUgTk9QX0lOU04gIm5vcDMyIgorI2Vsc2UKKyNkZWZpbmUgTk9QX0lOU04gIm5vcCIKKyNlbmRpZgorCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgYXJjaF9zdGF0aWNfYnJhbmNoKHN0cnVjdCBzdGF0aWNfa2V5ICprZXkpCiB7Ci0JYXNtX3ZvbGF0aWxlX2dvdG8oIjE6XHRub3Bcblx0IgorCWFzbV92b2xhdGlsZV9nb3RvKCIxOlx0IiBOT1BfSU5TTiAiXG5cdCIKIAkJIm5vcFxuXHQiCiAJCSIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCAgXCJhd1wiXG5cdCIKIAkJV09SRF9JTlNOICIgMWIsICVsW2xfeWVzXSwgJTBcblx0IgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCA3ZDI4Zjk1Li42ZDY5MzMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtNDEsMTAgKzQxLDggQEAKICNkZWZpbmUgY3B1X2hhc19tY2hlY2sJCTAKICNkZWZpbmUgY3B1X2hhc19tZG14CQkwCiAjZGVmaW5lIGNwdV9oYXNfbWlwczE2CQkwCi0jZGVmaW5lIGNwdV9oYXNfbWlwczMycjEJMAogI2RlZmluZSBjcHVfaGFzX21pcHMzMnIyCTAKICNkZWZpbmUgY3B1X2hhc19taXBzM2QJCTAKLSNkZWZpbmUgY3B1X2hhc19taXBzNjRyMQkwCiAjZGVmaW5lIGNwdV9oYXNfbWlwczY0cjIJMAogI2RlZmluZSBjcHVfaGFzX21pcHNtdAkJMAogI2RlZmluZSBjcHVfaGFzX3ByZWZldGNoCTAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKaW5kZXggY2YzYjU4MC4uMjJhMTM1YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKQEAgLTY2MSw2ICs2NjEsOCBAQAogI2RlZmluZSBNSVBTX0NPTkY2X1NZTkQJCShfVUxDQVNUXygxKSA8PCAxMykKIC8qIHByb0FwdGl2IEZUTEIgb24vb2ZmIGJpdCAqLwogI2RlZmluZSBNSVBTX0NPTkY2X0ZUTEJFTgkoX1VMQ0FTVF8oMSkgPDwgMTUpCisvKiBGVExCIHByb2JhYmlsaXR5IGJpdHMgKi8KKyNkZWZpbmUgTUlQU19DT05GNl9GVExCUF9TSElGVAkoMTYpCiAKICNkZWZpbmUgTUlQU19DT05GN19XSUkJCShfVUxDQVNUXygxKSA8PCAzMSkKIApAQCAtMTMyNCw3ICsxMzI2LDcgQEAKIC8qCiAgKiBNYWNyb3MgdG8gYWNjZXNzIHRoZSBmbG9hdGluZyBwb2ludCBjb3Byb2Nlc3NvciBjb250cm9sIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIHJlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKHNvdXJjZSkJCQkJCVwKKyNkZWZpbmUgX3JlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKHNvdXJjZSwgZ2FzX2hhcmRmbG9hdCkJCQlcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19yZXM7CQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTEzMzQsMTIgKzEzMzYsMjEgQEAKIAkiCSMgZ2FzIGZhaWxzIHRvIGFzc2VtYmxlIGNmYzEgZm9yIHNvbWUgYXJjaHMsCVxuIglcCiAJIgkjIGxpa2UgT2N0ZW9uLgkJCQkJXG4iCVwKIAkiCS5zZXQJbWlwczEJCQkJCVxuIglcCisJIgkiU1RSKGdhc19oYXJkZmxvYXQpIgkJCQlcbiIJXAogCSIJY2ZjMQklMCwiU1RSKHNvdXJjZSkiCQkJXG4iCVwKIAkiCS5zZXQJcG9wCQkJCQlcbiIJXAogCTogIj1yIiAoX19yZXMpKTsJCQkJCQlcCiAJX19yZXM7CQkJCQkJCQlcCiB9KQogCisjaWZkZWYgR0FTX0hBU19TRVRfSEFSREZMT0FUCisjZGVmaW5lIHJlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKHNvdXJjZSkJCQkJCVwKKwlfcmVhZF8zMmJpdF9jcDFfcmVnaXN0ZXIoc291cmNlLCAuc2V0IGhhcmRmbG9hdCkKKyNlbHNlCisjZGVmaW5lIHJlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKHNvdXJjZSkJCQkJCVwKKwlfcmVhZF8zMmJpdF9jcDFfcmVnaXN0ZXIoc291cmNlLCApCisjZW5kaWYKKwogI2lmZGVmIEhBVkVfQVNfRFNQCiAjZGVmaW5lIHJkZHNwKG1hc2spCQkJCQkJCVwKICh7CQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3I0a2NhY2hlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcjRrY2FjaGUuaAppbmRleCA0NTIwYWRjLi5jZDZlMGFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcjRrY2FjaGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcjRrY2FjaGUuaApAQCAtMjU3LDcgKzI1NywxMSBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvdGVjdGVkX3dyaXRlYmFja19kY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CisjaWZkZWYgQ09ORklHX0VWQQorCXByb3RlY3RlZF9jYWNoZWVfb3AoSGl0X1dyaXRlYmFja19JbnZfRCwgYWRkcik7CisjZWxzZQogCXByb3RlY3RlZF9jYWNoZV9vcChIaXRfV3JpdGViYWNrX0ludl9ELCBhZGRyKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvdGVjdGVkX3dyaXRlYmFja19zY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCBhMTA5NTEwLi4yMmE1NjI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTMwMSw3ICszMDEsOCBAQAogCQkJX19nZXRfa2VybmVsX2NvbW1vbigoeCksIHNpemUsIF9fZ3VfcHRyKTsJXAogCQllbHNlCQkJCQkJCVwKIAkJCV9fZ2V0X3VzZXJfY29tbW9uKCh4KSwgc2l6ZSwgX19ndV9wdHIpOwkJXAotCX0JCQkJCQkJCVwKKwl9IGVsc2UJCQkJCQkJCVwKKwkJKHgpID0gMDsJCQkJCQlcCiAJCQkJCQkJCQlcCiAJX19ndV9lcnI7CQkJCQkJCVwKIH0pCkBAIC0zMTYsNiArMzE3LDcgQEAKIAkiCS5pbnNuCQkJCQkJXG4iCVwKIAkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQkJXG4iCVwKIAkiMzoJbGkJJTAsICU0CQkJCQlcbiIJXAorCSIJbW92ZQklMSwgJDAJCQkJCVxuIglcCiAJIglqCTJiCQkJCQlcbiIJXAogCSIJLnByZXZpb3VzCQkJCQlcbiIJXAogCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJCVxuIglcCkBAIC02MzAsNiArNjMyLDcgQEAKIAkiCS5pbnNuCQkJCQkJXG4iCVwKIAkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQkJXG4iCVwKIAkiMzoJbGkJJTAsICU0CQkJCQlcbiIJXAorCSIJbW92ZQklMSwgJDAJCQkJCVxuIglcCiAJIglqCTJiCQkJCQlcbiIJXAogCSIJLnByZXZpb3VzCQkJCQlcbiIJXAogCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJCVxuIglcCkBAIC03NzMsMTAgKzc3NiwxMSBAQAogCSJqYWxcdCIgI2Rlc3RpbmF0aW9uICJcblx0IgogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHX0NQVV9EQURESV9XT1JLQVJPVU5EUwotI2RlZmluZSBEQURESV9TQ1JBVENIICIkMCIKLSNlbHNlCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0RBRERJX1dPUktBUk9VTkRTKSB8fCAoZGVmaW5lZChDT05GSUdfRVZBKSAmJglcCisJCQkJCSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0gpKQogI2RlZmluZSBEQURESV9TQ1JBVENIICIkMyIKKyNlbHNlCisjZGVmaW5lIERBRERJX1NDUkFUQ0ggIiQwIgogI2VuZGlmCiAKIGV4dGVybiBzaXplX3QgX19jb3B5X3VzZXIodm9pZCAqX190bywgY29uc3Qgdm9pZCAqX19mcm9tLCBzaXplX3QgX19uKTsKQEAgLTE0MTgsNyArMTQyMiw3IEBACiB9CiAKIC8qCi0gKiBzdHJsZW5fdXNlcjogLSBHZXQgdGhlIHNpemUgb2YgYSBzdHJpbmcgaW4gdXNlciBzcGFjZS4KKyAqIHN0cm5sZW5fdXNlcjogLSBHZXQgdGhlIHNpemUgb2YgYSBzdHJpbmcgaW4gdXNlciBzcGFjZS4KICAqIEBzdHI6IFRoZSBzdHJpbmcgdG8gbWVhc3VyZS4KICAqCiAgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4JVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCkBAIC0xNDI3LDkgKzE0MzEsNyBAQAogICoKICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHN0cmluZyBJTkNMVURJTkcgdGhlIHRlcm1pbmF0aW5nIE5VTC4KICAqIE9uIGV4Y2VwdGlvbiwgcmV0dXJucyAwLgotICoKLSAqIElmIHRoZXJlIGlzIGEgbGltaXQgb24gdGhlIGxlbmd0aCBvZiBhIHZhbGlkIHN0cmluZywgeW91IG1heSB3aXNoIHRvCi0gKiBjb25zaWRlciB1c2luZyBzdHJubGVuX3VzZXIoKSBpbnN0ZWFkLgorICogSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgcmV0dXJucyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBAbi4KICAqLwogc3RhdGljIGlubGluZSBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqcywgbG9uZyBuKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oCmluZGV4IGU4MTE3NDQuLmQwOGY4M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zaWdpbmZvLmgKQEAgLTkyLDYgKzkyLDEwIEBACiAJCQlpbnQgX3RyYXBubzsJLyogVFJBUCAjIHdoaWNoIGNhdXNlZCB0aGUgc2lnbmFsICovCiAjZW5kaWYKIAkJCXNob3J0IF9hZGRyX2xzYjsKKwkJCXN0cnVjdCB7CisJCQkJdm9pZCBfX3VzZXIgKl9sb3dlcjsKKwkJCQl2b2lkIF9fdXNlciAqX3VwcGVyOworCQkJfSBfYWRkcl9ibmQ7CiAJCX0gX3NpZ2ZhdWx0OwogCiAJCS8qIFNJR1BPTEwsIFNJR1hGU1ogKFRvIGRvIC4uLikJICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IGZkYjQ5MjMuLmQwMDFiYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCkBAIC0zNzUsMTYgKzM3NSwxNyBAQAogI2RlZmluZSBfX05SX3NlY2NvbXAJCQkoX19OUl9MaW51eCArIDM1MikKICNkZWZpbmUgX19OUl9nZXRyYW5kb20JCQkoX19OUl9MaW51eCArIDM1MykKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJCShfX05SX0xpbnV4ICsgMzU0KQorI2RlZmluZSBfX05SX2JwZgkJCShfX05SX0xpbnV4ICsgMzU1KQogCiAvKgogICogT2Zmc2V0IG9mIHRoZSBsYXN0IExpbnV4IG8zMiBmbGF2b3VyZWQgc3lzY2FsbAogICovCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTM1NAorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkzNTUKIAogI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIgKi8KIAogI2RlZmluZSBfX05SX08zMl9MaW51eAkJCTQwMDAKLSNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMJCTM1NAorI2RlZmluZSBfX05SX08zMl9MaW51eF9zeXNjYWxscwkJMzU1CiAKICNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0CiAKQEAgLTcwNywxNiArNzA4LDE3IEBACiAjZGVmaW5lIF9fTlJfc2VjY29tcAkJCShfX05SX0xpbnV4ICsgMzEyKQogI2RlZmluZSBfX05SX2dldHJhbmRvbQkJCShfX05SX0xpbnV4ICsgMzEzKQogI2RlZmluZSBfX05SX21lbWZkX2NyZWF0ZQkJKF9fTlJfTGludXggKyAzMTQpCisjZGVmaW5lIF9fTlJfYnBmCQkJKF9fTlJfTGludXggKyAzMTUpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTGludXggNjQtYml0IGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzE0CisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTMxNQogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCAqLwogCiAjZGVmaW5lIF9fTlJfNjRfTGludXgJCQk1MDAwCi0jZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTMxNAorI2RlZmluZSBfX05SXzY0X0xpbnV4X3N5c2NhbGxzCQkzMTUKIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCiAKQEAgLTEwNDMsMTUgKzEwNDUsMTYgQEAKICNkZWZpbmUgX19OUl9zZWNjb21wCQkJKF9fTlJfTGludXggKyAzMTYpCiAjZGVmaW5lIF9fTlJfZ2V0cmFuZG9tCQkJKF9fTlJfTGludXggKyAzMTcpCiAjZGVmaW5lIF9fTlJfbWVtZmRfY3JlYXRlCQkoX19OUl9MaW51eCArIDMxOCkKKyNkZWZpbmUgX19OUl9icGYJCQkoX19OUl9MaW51eCArIDMxOSkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBOMzIgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkzMTgKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzE5CiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMiAqLwogCiAjZGVmaW5lIF9fTlJfTjMyX0xpbnV4CQkJNjAwMAotI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscwkJMzE4CisjZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkzMTkKIAogI2VuZGlmIC8qIF9VQVBJX0FTTV9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9ibWlwc192ZWMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvYm1pcHNfdmVjLlMKaW5kZXggMjkwYzIzYi4uODY0OTUwNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9ibWlwc192ZWMuUworKysgYi9hcmNoL21pcHMva2VybmVsL2JtaXBzX3ZlYy5TCkBAIC0yMDgsNyArMjA4LDYgQEAKIEVORChibWlwc19yZXNldF9ubWlfdmVjKQogCiAJLnNldAlwb3AKLQkucHJldmlvdXMKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDUFUxIHdhcm0gcmVzdGFydCB2ZWN0b3IgKHVzZWQgZm9yIHNlY29uZCBhbmQgc3Vic2VxdWVudCBib290cykuCkBAIC0yODEsNSArMjgwLDMgQEAKIAlqcglyYQogCiBFTkQoYm1pcHNfZW5hYmxlX3hrczAxKQotCi0JLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2JyYW5jaC5jIGIvYXJjaC9taXBzL2tlcm5lbC9icmFuY2guYwppbmRleCA3YjJkZjIyLi40ZDdkOTlkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2JyYW5jaC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvYnJhbmNoLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQljYXNlIG1tX2JjMXRfb3A6CiAJCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJCWlmIChpc19mcHVfb3duZXIoKSkKLQkJCQlhc20gdm9sYXRpbGUoImNmYzFcdCUwLCQzMSIgOiAiPXIiIChmY3IzMSkpOworCQkJICAgICAgICBmY3IzMSA9IHJlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKENQMV9TVEFUVVMpOwogCQkJZWxzZQogCQkJCWZjcjMxID0gY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMTsKIAkJCXByZWVtcHRfZW5hYmxlKCk7CkBAIC01NjIsMTEgKzU2Miw3IEBACiAJY2FzZSBjb3AxX29wOgogCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJaWYgKGlzX2ZwdV9vd25lcigpKQotCQkJYXNtIHZvbGF0aWxlKAotCQkJCSIuc2V0IHB1c2hcbiIKLQkJCQkiXHQuc2V0IG1pcHMxXG4iCi0JCQkJIlx0Y2ZjMVx0JTAsJDMxXG4iCi0JCQkJIlx0LnNldCBwb3AiIDogIj1yIiAoZmNyMzEpKTsKKwkJICAgICAgICBmY3IzMSA9IHJlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKENQMV9TVEFUVVMpOwogCQllbHNlCiAJCQlmY3IzMSA9IGN1cnJlbnQtPnRocmVhZC5mcHUuZmNyMzE7CiAJCXByZWVtcHRfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2Nwcy12ZWMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvY3BzLXZlYy5TCmluZGV4IGU2ZTk3ZDIuLjAzODRiMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3BzLXZlYy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3BzLXZlYy5TCkBAIC0yMjksNiArMjI5LDcgQEAKIAkgbm9wCiAKIAkuc2V0CXB1c2gKKwkuc2V0CW1pcHMzMnIyCiAJLnNldAltdAogCiAJLyogT25seSBhbGxvdyAxIFRDIHBlciBWUEUgdG8gZXhlY3V0ZS4uLiAqLwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJIG5vcAogCiAJLnNldAlwdXNoCisJLnNldAltaXBzMzJyMgogCS5zZXQJbXQKIAogMToJLyogRW50ZXIgVlBFIGNvbmZpZ3VyYXRpb24gc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IDk0YzRhMGMuLmRjNDljZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMTkzLDYgKzE5MywzMiBAQAogc3RhdGljIGNoYXIgdW5rbm93bl9pc2FbXSA9IEtFUk5fRVJSIFwKIAkiVW5zdXBwb3J0ZWQgSVNBIHR5cGUsIGMwLmNvbmZpZzA6ICVkLiI7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX2Z0bGJfcHJvYmFiaWxpdHkoc3RydWN0IGNwdWluZm9fbWlwcyAqYykKK3sKKworCXVuc2lnbmVkIGludCBwcm9iYWJpbGl0eSA9IGMtPnRsYnNpemUgLyBjLT50bGJzaXpldnRsYjsKKworCS8qCisJICogMCA9IEFsbCBUTEJXUiBpbnN0cnVjdGlvbnMgZ28gdG8gRlRMQgorCSAqIDEgPSAxNToxOiBGb3IgZXZlcnkgMTYgVEJMV1IgaW5zdHJ1Y3Rpb25zLCAxNSBnbyB0byB0aGUKKwkgKiBGVExCIGFuZCAxIGdvZXMgdG8gdGhlIFZUTEIuCisJICogMiA9IDc6MTogQXMgYWJvdmUgd2l0aCA3OjEgcmF0aW8uCisJICogMyA9IDM6MTogQXMgYWJvdmUgd2l0aCAzOjEgcmF0aW8uCisJICoKKwkgKiBVc2UgdGhlIGxpbmVhciBtaWRwb2ludCBhcyB0aGUgcHJvYmFiaWxpdHkgdGhyZXNob2xkLgorCSAqLworCWlmIChwcm9iYWJpbGl0eSA+PSAxMikKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAocHJvYmFiaWxpdHkgPj0gNikKKwkJcmV0dXJuIDI7CisJZWxzZQorCQkvKgorCQkgKiBTbyBGVExCIGlzIGxlc3MgdGhhbiA0IHRpbWVzIGJpZ2dlciB0aGFuIFZUTEIuCisJCSAqIEEgMzoxIHJhdGlvIGNhbiBzdGlsbCBiZSB1c2VmdWwgdGhvdWdoLgorCQkgKi8KKwkJcmV0dXJuIDM7Cit9CisKIHN0YXRpYyB2b2lkIHNldF9mdGxiX2VuYWJsZShzdHJ1Y3QgY3B1aW5mb19taXBzICpjLCBpbnQgZW5hYmxlKQogewogCXVuc2lnbmVkIGludCBjb25maWc2OwpAQCAtMjAzLDkgKzIyOSwxNCBAQAogCWNhc2UgQ1BVX1A1NjAwOgogCQkvKiBwcm9BcHRpdiAmIHJlbGF0ZWQgY29yZXMgdXNlIENvbmZpZzYgdG8gZW5hYmxlIHRoZSBGVExCICovCiAJCWNvbmZpZzYgPSByZWFkX2MwX2NvbmZpZzYoKTsKKwkJLyogQ2xlYXIgdGhlIG9sZCBwcm9iYWJpbGl0eSB2YWx1ZSAqLworCQljb25maWc2ICY9IH4oMyA8PCBNSVBTX0NPTkY2X0ZUTEJQX1NISUZUKTsKIAkJaWYgKGVuYWJsZSkKIAkJCS8qIEVuYWJsZSBGVExCICovCi0JCQl3cml0ZV9jMF9jb25maWc2KGNvbmZpZzYgfCBNSVBTX0NPTkY2X0ZUTEJFTik7CisJCQl3cml0ZV9jMF9jb25maWc2KGNvbmZpZzYgfAorCQkJCQkgKGNhbGN1bGF0ZV9mdGxiX3Byb2JhYmlsaXR5KGMpCisJCQkJCSAgPDwgTUlQU19DT05GNl9GVExCUF9TSElGVCkKKwkJCQkJIHwgTUlQU19DT05GNl9GVExCRU4pOwogCQllbHNlCiAJCQkvKiBEaXNhYmxlIEZUTEIgKi8KIAkJCXdyaXRlX2MwX2NvbmZpZzYoY29uZmlnNiAmICB+TUlQU19DT05GNl9GVExCRU4pOwpAQCAtNzU3LDMxICs3ODgsMzQgQEAKIAkJCWMtPmNwdXR5cGUgPSBDUFVfTE9PTkdTT04yOwogCQkJX19jcHVfbmFtZVtjcHVdID0gIklDVCBMb29uZ3Nvbi0yIjsKIAkJCXNldF9lbGZfcGxhdGZvcm0oY3B1LCAibG9vbmdzb24yZSIpOworCQkJc2V0X2lzYShjLCBNSVBTX0NQVV9JU0FfSUlJKTsKIAkJCWJyZWFrOwogCQljYXNlIFBSSURfUkVWX0xPT05HU09OMkY6CiAJCQljLT5jcHV0eXBlID0gQ1BVX0xPT05HU09OMjsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJJQ1QgTG9vbmdzb24tMiI7CiAJCQlzZXRfZWxmX3BsYXRmb3JtKGNwdSwgImxvb25nc29uMmYiKTsKKwkJCXNldF9pc2EoYywgTUlQU19DUFVfSVNBX0lJSSk7CiAJCQlicmVhazsKIAkJY2FzZSBQUklEX1JFVl9MT09OR1NPTjNBOgogCQkJYy0+Y3B1dHlwZSA9IENQVV9MT09OR1NPTjM7Ci0JCQljLT53cml0ZWNvbWJpbmUgPSBfQ0FDSEVfVU5DQUNIRURfQUNDRUxFUkFURUQ7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiSUNUIExvb25nc29uLTMiOwogCQkJc2V0X2VsZl9wbGF0Zm9ybShjcHUsICJsb29uZ3NvbjNhIik7CisJCQlzZXRfaXNhKGMsIE1JUFNfQ1BVX0lTQV9NNjRSMSk7CiAJCQlicmVhazsKIAkJY2FzZSBQUklEX1JFVl9MT09OR1NPTjNCX1IxOgogCQljYXNlIFBSSURfUkVWX0xPT05HU09OM0JfUjI6CiAJCQljLT5jcHV0eXBlID0gQ1BVX0xPT05HU09OMzsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJJQ1QgTG9vbmdzb24tMyI7CiAJCQlzZXRfZWxmX3BsYXRmb3JtKGNwdSwgImxvb25nc29uM2IiKTsKKwkJCXNldF9pc2EoYywgTUlQU19DUFVfSVNBX002NFIxKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJc2V0X2lzYShjLCBNSVBTX0NQVV9JU0FfSUlJKTsKIAkJYy0+b3B0aW9ucyA9IFI0S19PUFRTIHwKIAkJCSAgICAgTUlQU19DUFVfRlBVIHwgTUlQU19DUFVfTExTQyB8CiAJCQkgICAgIE1JUFNfQ1BVXzMyRlBSOwogCQljLT50bGJzaXplID0gNjQ7CisJCWMtPndyaXRlY29tYmluZSA9IF9DQUNIRV9VTkNBQ0hFRF9BQ0NFTEVSQVRFRDsKIAkJYnJlYWs7CiAJY2FzZSBQUklEX0lNUF9MT09OR1NPTl8zMjogIC8qIExvb25nc29uLTEgKi8KIAkJZGVjb2RlX2NvbmZpZ3MoYyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2dlbmV4LlMgYi9hcmNoL21pcHMva2VybmVsL2dlbmV4LlMKaW5kZXggYWMzNWUxMi4uYTVlMjZkZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9nZW5leC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2VuZXguUwpAQCAtMzU4LDYgKzM1OCw3IEBACiAJLnNldAlwdXNoCiAJLyogZ2FzIGZhaWxzIHRvIGFzc2VtYmxlIGNmYzEgZm9yIHNvbWUgYXJjaHMgKG9jdGVvbikuKi8gXAogCS5zZXQJbWlwczEKKwlTRVRfSEFSREZMT0FUCiAJY2ZjMQlhMSwgZmNyMzEKIAlsaQlhMiwgfigweDNmIDw8IDEyKQogCWFuZAlhMiwgYTEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvanVtcF9sYWJlbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9qdW1wX2xhYmVsLmMKaW5kZXggNjAwMTYxMC4uZGRhODAwZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9qdW1wX2xhYmVsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9qdW1wX2xhYmVsLmMKQEAgLTE4LDMxICsxOCw1MyBAQAogCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCiAKLSNkZWZpbmUgSl9SQU5HRV9NQVNLICgoMXVsIDw8IDI4KSAtIDEpCisvKgorICogRGVmaW5lIHBhcmFtZXRlcnMgZm9yIHRoZSBzdGFuZGFyZCBNSVBTIGFuZCB0aGUgbWljcm9NSVBTIGp1bXAKKyAqIGluc3RydWN0aW9uIGVuY29kaW5nIHJlc3BlY3RpdmVseToKKyAqCisgKiAtIHRoZSBJU0EgYml0IG9mIHRoZSB0YXJnZXQsIGVpdGhlciAwIG9yIDEgcmVzcGVjdGl2ZWx5LAorICoKKyAqIC0gdGhlIGFtb3VudCB0aGUganVtcCB0YXJnZXQgYWRkcmVzcyBpcyBzaGlmdGVkIHJpZ2h0IHRvIGZpdCBpbiB0aGUKKyAqICAgaW1tZWRpYXRlIGZpZWxkIG9mIHRoZSBtYWNoaW5lIGluc3RydWN0aW9uLCBlaXRoZXIgMiBvciAxLAorICoKKyAqIC0gdGhlIG1hc2sgZGV0ZXJtaW5pbmcgdGhlIHNpemUgb2YgdGhlIGp1bXAgcmVnaW9uIHJlbGF0aXZlIHRvIHRoZQorICogICBkZWxheS1zbG90IGluc3RydWN0aW9uLCBlaXRoZXIgMjU2TUIgb3IgMTI4TUIsCisgKgorICogLSB0aGUganVtcCB0YXJnZXQgYWxpZ25tZW50LCBlaXRoZXIgNCBvciAyIGJ5dGVzLgorICovCisjZGVmaW5lIEpfSVNBX0JJVAlJU19FTkFCTEVEKENPTkZJR19DUFVfTUlDUk9NSVBTKQorI2RlZmluZSBKX1JBTkdFX1NISUZUCSgyIC0gSl9JU0FfQklUKQorI2RlZmluZSBKX1JBTkdFX01BU0sJKCgxdWwgPDwgKDI2ICsgSl9SQU5HRV9TSElGVCkpIC0gMSkKKyNkZWZpbmUgSl9BTElHTl9NQVNLCSgoMXVsIDw8IEpfUkFOR0VfU0hJRlQpIC0gMSkKIAogdm9pZCBhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKHN0cnVjdCBqdW1wX2VudHJ5ICplLAogCQkJICAgICAgIGVudW0ganVtcF9sYWJlbF90eXBlIHR5cGUpCiB7CisJdW5pb24gbWlwc19pbnN0cnVjdGlvbiAqaW5zbl9wOwogCXVuaW9uIG1pcHNfaW5zdHJ1Y3Rpb24gaW5zbjsKLQl1bmlvbiBtaXBzX2luc3RydWN0aW9uICppbnNuX3AgPQotCQkodW5pb24gbWlwc19pbnN0cnVjdGlvbiAqKSh1bnNpZ25lZCBsb25nKWUtPmNvZGU7CiAKLQkvKiBKdW1wIG9ubHkgd29ya3Mgd2l0aGluIGEgMjU2TUIgYWxpZ25lZCByZWdpb24uICovCi0JQlVHX09OKChlLT50YXJnZXQgJiB+Sl9SQU5HRV9NQVNLKSAhPSAoZS0+Y29kZSAmIH5KX1JBTkdFX01BU0spKTsKKwlpbnNuX3AgPSAodW5pb24gbWlwc19pbnN0cnVjdGlvbiAqKW1za19pc2ExNl9tb2RlKGUtPmNvZGUpOwogCi0JLyogVGFyZ2V0IG11c3QgaGF2ZSA0IGJ5dGUgYWxpZ25tZW50LiAqLwotCUJVR19PTigoZS0+dGFyZ2V0ICYgMykgIT0gMCk7CisJLyogSnVtcCBvbmx5IHdvcmtzIHdpdGhpbiBhbiBhbGlnbmVkIHJlZ2lvbiBpdHMgZGVsYXkgc2xvdCBpcyBpbi4gKi8KKwlCVUdfT04oKGUtPnRhcmdldCAmIH5KX1JBTkdFX01BU0spICE9ICgoZS0+Y29kZSArIDQpICYgfkpfUkFOR0VfTUFTSykpOworCisJLyogVGFyZ2V0IG11c3QgaGF2ZSB0aGUgcmlnaHQgYWxpZ25tZW50IGFuZCBJU0EgbXVzdCBiZSBwcmVzZXJ2ZWQuICovCisJQlVHX09OKChlLT50YXJnZXQgJiBKX0FMSUdOX01BU0spICE9IEpfSVNBX0JJVCk7CiAKIAlpZiAodHlwZSA9PSBKVU1QX0xBQkVMX0VOQUJMRSkgewotCQlpbnNuLmpfZm9ybWF0Lm9wY29kZSA9IGpfb3A7Ci0JCWluc24ual9mb3JtYXQudGFyZ2V0ID0gKGUtPnRhcmdldCAmIEpfUkFOR0VfTUFTSykgPj4gMjsKKwkJaW5zbi5qX2Zvcm1hdC5vcGNvZGUgPSBKX0lTQV9CSVQgPyBtbV9qMzJfb3AgOiBqX29wOworCQlpbnNuLmpfZm9ybWF0LnRhcmdldCA9IGUtPnRhcmdldCA+PiBKX1JBTkdFX1NISUZUOwogCX0gZWxzZSB7CiAJCWluc24ud29yZCA9IDA7IC8qIG5vcCAqLwogCX0KIAogCWdldF9vbmxpbmVfY3B1cygpOwogCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwotCSppbnNuX3AgPSBpbnNuOworCWlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfTUlDUk9NSVBTKSkgeworCQlpbnNuX3AtPmhhbGZ3b3JkWzBdID0gaW5zbi53b3JkID4+IDE2OworCQlpbnNuX3AtPmhhbGZ3b3JkWzFdID0gaW5zbi53b3JkOworCX0gZWxzZQorCQkqaW5zbl9wID0gaW5zbjsKIAogCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylpbnNuX3AsCiAJCQkgICAodW5zaWduZWQgbG9uZylpbnNuX3AgKyBzaXplb2YoKmluc25fcCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9yMjMwMF9mcHUuUyBiL2FyY2gvbWlwcy9rZXJuZWwvcjIzMDBfZnB1LlMKaW5kZXggZjMxMDYzZC4uNWNlM2I3NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yMjMwMF9mcHUuUworKysgYi9hcmNoL21pcHMva2VybmVsL3IyMzAwX2ZwdS5TCkBAIC0yOCw2ICsyOCw4IEBACiAJLnNldAltaXBzMQogCS8qIFNhdmUgZmxvYXRpbmcgcG9pbnQgY29udGV4dCAqLwogTEVBRihfc2F2ZV9mcF9jb250ZXh0KQorCS5zZXQJcHVzaAorCVNFVF9IQVJERkxPQVQKIAlsaQl2MCwgMAkJCQkJIyBhc3N1bWUgc3VjY2VzcwogCWNmYzEJdDEsZmNyMzEKIAlFWChzd2MxICRmMCwoU0NfRlBSRUdTKzApKGEwKSkKQEAgLTY1LDYgKzY3LDcgQEAKIAlFWChzdwl0MSwoU0NfRlBDX0NTUikoYTApKQogCWNmYzEJdDAsJDAJCQkJIyBpbXBsZW1lbnRhdGlvbi92ZXJzaW9uCiAJanIJcmEKKwkuc2V0CXBvcAogCS5zZXQJbm9tYWNybwogCSBFWChzdwl0MCwoU0NfRlBDX0VJUikoYTApKQogCS5zZXQJbWFjcm8KQEAgLTgwLDYgKzgzLDggQEAKICAqIHN0YWNrIGZyYW1lIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5IHRoZSB1c2VyLgogICovCiBMRUFGKF9yZXN0b3JlX2ZwX2NvbnRleHQpCisJLnNldAlwdXNoCisJU0VUX0hBUkRGTE9BVAogCWxpCXYwLCAwCQkJCQkjIGFzc3VtZSBzdWNjZXNzCiAJRVgobHcgdDAsKFNDX0ZQQ19DU1IpKGEwKSkKIAlFWChsd2MxICRmMCwoU0NfRlBSRUdTKzApKGEwKSkKQEAgLTExNiw2ICsxMjEsNyBAQAogCUVYKGx3YzEgJGYzMSwoU0NfRlBSRUdTKzI0OCkoYTApKQogCWpyCXJhCiAJIGN0YzEJdDAsZmNyMzEKKwkuc2V0CXBvcAogCUVORChfcmVzdG9yZV9mcF9jb250ZXh0KQogCS5zZXQJcmVvcmRlcgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3IyMzAwX3N3aXRjaC5TIGIvYXJjaC9taXBzL2tlcm5lbC9yMjMwMF9zd2l0Y2guUwppbmRleCAyMGI3YjA0Li40MzVlYTY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3IyMzAwX3N3aXRjaC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcjIzMDBfc3dpdGNoLlMKQEAgLTEyMCw2ICsxMjAsOSBAQAogCiAjZGVmaW5lIEZQVV9ERUZBVUxUICAweDAwMDAwMDAwCiAKKwkuc2V0IHB1c2gKKwlTRVRfSEFSREZMT0FUCisKIExFQUYoX2luaXRfZnB1KQogCW1mYzAJdDAsIENQMF9TVEFUVVMKIAlsaQl0MSwgU1QwX0NVMQpAQCAtMTY1LDMgKzE2OCw1IEBACiAJbXRjMQl0MCwgJGYzMQogCWpyCXJhCiAJRU5EKF9pbml0X2ZwdSkKKworCS5zZXQgcG9wCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3I0a19mcHUuUyBiL2FyY2gvbWlwcy9rZXJuZWwvcjRrX2ZwdS5TCmluZGV4IDgzNTI1MjMuLjZjMTYwYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcjRrX2ZwdS5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcjRrX2ZwdS5TCkBAIC0xOSw4ICsxOSwxMiBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KIAorLyogcHJlcHJvY2Vzc29yIHJlcGxhY2VzIHRoZSBmcCBpbiAiLnNldCBmcD02NCIgd2l0aCAkMzAgb3RoZXJ3aXNlICovCisjdW5kZWYgZnAKKwogCS5tYWNybwlFWCBpbnNuLCByZWcsIHNyYwogCS5zZXQJcHVzaAorCVNFVF9IQVJERkxPQVQKIAkuc2V0CW5vbWFjcm8KIC5leFxAOglcaW5zbglccmVnLCBcc3JjCiAJLnNldAlwb3AKQEAgLTMzLDEyICszNywxNyBAQAogCS5zZXQJYXJjaD1yNDAwMAogCiBMRUFGKF9zYXZlX2ZwX2NvbnRleHQpCisJLnNldAlwdXNoCisJU0VUX0hBUkRGTE9BVAogCWNmYzEJdDEsIGZjcjMxCisJLnNldAlwb3AKIAogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyX1IyKQogCS5zZXQJcHVzaAorCVNFVF9IQVJERkxPQVQKICNpZmRlZiBDT05GSUdfQ1BVX01JUFMzMl9SMgotCS5zZXQJbWlwczY0cjIKKwkuc2V0CW1pcHMzMnIyCisJLnNldAlmcD02NAogCW1mYzAJdDAsIENQMF9TVEFUVVMKIAlzbGwJdDAsIHQwLCA1CiAJYmdlegl0MCwgMWYJCQkjIHNraXAgc3RvcmluZyBvZGQgaWYgRlI9MApAQCAtNjQsNiArNzMsOCBAQAogMToJLnNldAlwb3AKICNlbmRpZgogCisJLnNldCBwdXNoCisJU0VUX0hBUkRGTE9BVAogCS8qIFN0b3JlIHRoZSAxNiBldmVuIGRvdWJsZSBwcmVjaXNpb24gcmVnaXN0ZXJzICovCiAJRVgJc2RjMSAkZjAsIFNDX0ZQUkVHUyswKGEwKQogCUVYCXNkYzEgJGYyLCBTQ19GUFJFR1MrMTYoYTApCkBAIC04NCwxMSArOTUsMTQgQEAKIAlFWAlzdyB0MSwgU0NfRlBDX0NTUihhMCkKIAlqcglyYQogCSBsaQl2MCwgMAkJCQkJIyBzdWNjZXNzCisJLnNldCBwb3AKIAlFTkQoX3NhdmVfZnBfY29udGV4dCkKIAogI2lmZGVmIENPTkZJR19NSVBTMzJfQ09NUEFUCiAJLyogU2F2ZSAzMi1iaXQgcHJvY2VzcyBmbG9hdGluZyBwb2ludCBjb250ZXh0ICovCiBMRUFGKF9zYXZlX2ZwX2NvbnRleHQzMikKKwkuc2V0IHB1c2gKKwlTRVRfSEFSREZMT0FUCiAJY2ZjMQl0MSwgZmNyMzEKIAogCW1mYzAJdDAsIENQMF9TVEFUVVMKQEAgLTEzNCw2ICsxNDgsNyBAQAogCUVYCXN3IHQxLCBTQzMyX0ZQQ19DU1IoYTApCiAJY2ZjMQl0MCwgJDAJCQkJIyBpbXBsZW1lbnRhdGlvbi92ZXJzaW9uCiAJRVgJc3cgdDAsIFNDMzJfRlBDX0VJUihhMCkKKwkuc2V0IHBvcAogCiAJanIJcmEKIAkgbGkJdjAsIDAJCQkJCSMgc3VjY2VzcwpAQCAtMTUwLDggKzE2NSwxMCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfNjRCSVQpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzJfUjIpCiAJLnNldAlwdXNoCisJU0VUX0hBUkRGTE9BVAogI2lmZGVmIENPTkZJR19DUFVfTUlQUzMyX1IyCi0JLnNldAltaXBzNjRyMgorCS5zZXQJbWlwczMycjIKKwkuc2V0CWZwPTY0CiAJbWZjMAl0MCwgQ1AwX1NUQVRVUwogCXNsbAl0MCwgdDAsIDUKIAliZ2V6CXQwLCAxZgkJCSMgc2tpcCBsb2FkaW5nIG9kZCBpZiBGUj0wCkBAIC0xNzUsNiArMTkyLDggQEAKIAlFWAlsZGMxICRmMzEsIFNDX0ZQUkVHUysyNDgoYTApCiAxOgkuc2V0IHBvcAogI2VuZGlmCisJLnNldCBwdXNoCisJU0VUX0hBUkRGTE9BVAogCUVYCWxkYzEgJGYwLCBTQ19GUFJFR1MrMChhMCkKIAlFWAlsZGMxICRmMiwgU0NfRlBSRUdTKzE2KGEwKQogCUVYCWxkYzEgJGY0LCBTQ19GUFJFR1MrMzIoYTApCkBAIC0xOTIsNiArMjExLDcgQEAKIAlFWAlsZGMxICRmMjgsIFNDX0ZQUkVHUysyMjQoYTApCiAJRVgJbGRjMSAkZjMwLCBTQ19GUFJFR1MrMjQwKGEwKQogCWN0YzEJdDEsIGZjcjMxCisJLnNldCBwb3AKIAlqcglyYQogCSBsaQl2MCwgMAkJCQkJIyBzdWNjZXNzCiAJRU5EKF9yZXN0b3JlX2ZwX2NvbnRleHQpCkBAIC0xOTksNiArMjE5LDggQEAKICNpZmRlZiBDT05GSUdfTUlQUzMyX0NPTVBBVAogTEVBRihfcmVzdG9yZV9mcF9jb250ZXh0MzIpCiAJLyogUmVzdG9yZSBhbiBvMzIgc2lnY29udGV4dC4gICovCisJLnNldCBwdXNoCisJU0VUX0hBUkRGTE9BVAogCUVYCWx3IHQxLCBTQzMyX0ZQQ19DU1IoYTApCiAKIAltZmMwCXQwLCBDUDBfU1RBVFVTCkBAIC0yNDIsNiArMjY0LDcgQEAKIAljdGMxCXQxLCBmY3IzMQogCWpyCXJhCiAJIGxpCXYwLCAwCQkJCQkjIHN1Y2Nlc3MKKwkuc2V0IHBvcAogCUVORChfcmVzdG9yZV9mcF9jb250ZXh0MzIpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMgYi9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUwppbmRleCA0YzRlYzE4Li42NDU5MWU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUworKysgYi9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUwpAQCAtMjIsNiArMjIsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CiAKKy8qIHByZXByb2Nlc3NvciByZXBsYWNlcyB0aGUgZnAgaW4gIi5zZXQgZnA9NjQiIHdpdGggJDMwIG90aGVyd2lzZSAqLworI3VuZGVmIGZwCisKIC8qCiAgKiBPZmZzZXQgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyBzdGF0dXMgZmxhZ3MsIHRoZSBmaXJzdCAzMiBieXRlcyBvZiB0aGUKICAqIHN0YWNrIGFyZSBub3QgdXNlZC4KQEAgLTY1LDggKzY4LDEyIEBACiAJYmd0eglhMywgMWYKIAogCS8qIFNhdmUgMTI4YiBNU0EgdmVjdG9yIGNvbnRleHQgKyBzY2FsYXIgRlAgY29udHJvbCAmIHN0YXR1cy4gKi8KKwkuc2V0IHB1c2gKKwlTRVRfSEFSREZMT0FUCiAJY2ZjMQl0MSwgZmNyMzEKIAltc2Ffc2F2ZV9hbGwJYTAKKwkuc2V0IHBvcAkvKiBTRVRfSEFSREZMT0FUICovCisKIAlzdwl0MSwgVEhSRUFEX0ZDUjMxKGEwKQogCWIJMmYKIApAQCAtMTYxLDYgKzE2OCw5IEBACiAKICNkZWZpbmUgRlBVX0RFRkFVTFQgIDB4MDAwMDAwMDAKIAorCS5zZXQgcHVzaAorCVNFVF9IQVJERkxPQVQKKwogTEVBRihfaW5pdF9mcHUpCiAJbWZjMAl0MCwgQ1AwX1NUQVRVUwogCWxpCXQxLCBTVDBfQ1UxCkBAIC0yMzIsNyArMjQyLDggQEAKIAogI2lmZGVmIENPTkZJR19DUFVfTUlQUzMyX1IyCiAJLnNldCAgICBwdXNoCi0JLnNldCAgICBtaXBzNjRyMgorCS5zZXQgICAgbWlwczMycjIKKwkuc2V0CWZwPTY0CiAJc2xsICAgICB0MCwgdDAsIDUJCQkjIGlzIFN0YXR1cy5GUiBzZXQ/CiAJYmdleiAgICB0MCwgMWYJCQkJIyBubzogc2tpcCBzZXR0aW5nIHVwcGVyIDMyYgogCkBAIC0yOTEsMyArMzAyLDUgQEAKICNlbmRpZgogCWpyCXJhCiAJRU5EKF9pbml0X2ZwdSkKKworCS5zZXQgcG9wCS8qIFNFVF9IQVJERkxPQVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcjYwMDBfZnB1LlMgYi9hcmNoL21pcHMva2VybmVsL3I2MDAwX2ZwdS5TCmluZGV4IGRhMGZiZTQuLjQ3MDc3MzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcjYwMDBfZnB1LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yNjAwMF9mcHUuUwpAQCAtMTgsNiArMTgsOSBAQAogCiAJLnNldAlub3Jlb3JkZXIKIAkuc2V0CW1pcHMyCisJLnNldAlwdXNoCisJU0VUX0hBUkRGTE9BVAorCiAJLyogU2F2ZSBmbG9hdGluZyBwb2ludCBjb250ZXh0ICovCiAJTEVBRihfc2F2ZV9mcF9jb250ZXh0KQogCW1mYzAJdDAsQ1AwX1NUQVRVUwpAQCAtODUsMyArODgsNSBAQAogMToJanIJcmEKIAkgbm9wCiAJRU5EKF9yZXN0b3JlX2ZwX2NvbnRleHQpCisKKwkuc2V0IHBvcAkvKiBTRVRfSEFSREZMT0FUICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3J0bHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCmluZGV4IDMxYjFiNzYuLmM1YzRmZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCkBAIC05NCwxMiArOTQsMTIgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChpbmRleCA+PSBSVExYX0NIQU5ORUxTKSB7Ci0JCXByX2RlYnVnKEtFUk5fREVCVUcgInJ0bHhfb3BlbiBpbmRleCBvdXQgb2YgcmFuZ2VcbiIpOworCQlwcl9kZWJ1ZygicnRseF9vcGVuIGluZGV4IG91dCBvZiByYW5nZVxuIik7CiAJCXJldHVybiAtRU5PU1lTOwogCX0KIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmY2hhbm5lbF93cXNbaW5kZXhdLmluX29wZW4pID4gMSkgewotCQlwcl9kZWJ1ZyhLRVJOX0RFQlVHICJydGx4X29wZW4gY2hhbm5lbCAlZCBhbHJlYWR5IG9wZW5lZFxuIiwgaW5kZXgpOworCQlwcl9kZWJ1ZygicnRseF9vcGVuIGNoYW5uZWwgJWQgYWxyZWFkeSBvcGVuZWRcbiIsIGluZGV4KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF9mYWlsOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwppbmRleCA3NDRjZDEwLi4wMGNhZDEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCkBAIC01NzksMyArNTc5LDQgQEAKIAlQVFIJc3lzX3NlY2NvbXAKIAlQVFIJc3lzX2dldHJhbmRvbQogCVBUUglzeXNfbWVtZmRfY3JlYXRlCisJUFRSCXN5c19icGYJCQkJLyogNDM1NSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUwppbmRleCAwMDJiMWJjLi41MjUxNTY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUwpAQCAtNDM0LDQgKzQzNCw1IEBACiAJUFRSCXN5c19zZWNjb21wCiAJUFRSCXN5c19nZXRyYW5kb20KIAlQVFIJc3lzX21lbWZkX2NyZWF0ZQorCVBUUglzeXNfYnBmCQkJCS8qIDUzMTUgKi8KIAkuc2l6ZQlzeXNfY2FsbF90YWJsZSwuLXN5c19jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggY2E2Y2JiZS4uNzdlNzQzOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtNDI3LDQgKzQyNyw1IEBACiAJUFRSCXN5c19zZWNjb21wCiAJUFRSCXN5c19nZXRyYW5kb20KIAlQVFIJc3lzX21lbWZkX2NyZWF0ZQorCVBUUglzeXNfYnBmCiAJLnNpemUJc3lzbjMyX2NhbGxfdGFibGUsLi1zeXNuMzJfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IDllMTBkMTEuLjZmOGRiOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKQEAgLTU2NCw0ICs1NjQsNSBAQAogCVBUUglzeXNfc2VjY29tcAogCVBUUglzeXNfZ2V0cmFuZG9tCiAJUFRSCXN5c19tZW1mZF9jcmVhdGUKKwlQVFIJc3lzX2JwZgkJCQkvKiA0MzU1ICovCiAJLnNpemUJc3lzMzJfY2FsbF90YWJsZSwuLXN5czMyX2NhbGxfdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwppbmRleCBiM2I4ZjBkLi5mM2I2MzVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCkBAIC00ODUsNyArNDg1LDcgQEAKICAqIE5PVEU6IGhpc3RvcmljYWxseSBwbGF0X21lbV9zZXR1cCBkaWQgdGhlIGVudGlyZSBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbi4KICAqCSBUaGlzIHdhcyByYXRoZXIgaW1wcmFjdGljYWwgYmVjYXVzZSBpdCBtZWFudCBwbGF0X21lbV9zZXR1cCBoYWQgdG8KICAqIGdldCBhd2F5IHdpdGhvdXQgYW55IGtpbmQgb2YgbWVtb3J5IGFsbG9jYXRvci4gIFRvIGtlZXAgb2xkIGNvZGUgZnJvbQotICogYnJlYWtpbmcgcGxhdF9zZXR1cCB3YXMganVzdCByZW5hbWVkIHRvIHBsYXRfc2V0dXAgYW5kIGEgc2Vjb25kIHBsYXRmb3JtCisgKiBicmVha2luZyBwbGF0X3NldHVwIHdhcyBqdXN0IHJlbmFtZWQgdG8gcGxhdF9tZW1fc2V0dXAgYW5kIGEgc2Vjb25kIHBsYXRmb3JtCiAgKiBpbml0aWFsaXphdGlvbiBob29rIGZvciBhbnl0aGluZyBlbHNlIHdhcyBpbnRyb2R1Y2VkLgogICovCiAKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9wYXJzZV9tZW0oY2hhciAqcCkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplOworCXBoeXNfdCBzdGFydCwgc2l6ZTsKIAogCS8qCiAJICogSWYgYSB1c2VyIHNwZWNpZmllcyBtZW1vcnkgc2l6ZSwgd2UKQEAgLTY4Myw3ICs2ODMsOCBAQAogCWRtYV9jb250aWd1b3VzX3Jlc2VydmUoUEZOX1BIWVMobWF4X2xvd19wZm4pKTsKIAkvKiBUZWxsIGJvb3RtZW0gYWJvdXQgY21hIHJlc2VydmVkIG1lbWJsb2NrIHNlY3Rpb24gKi8KIAlmb3JfZWFjaF9tZW1ibG9jayhyZXNlcnZlZCwgcmVnKQotCQlyZXNlcnZlX2Jvb3RtZW0ocmVnLT5iYXNlLCByZWctPnNpemUsIEJPT1RNRU1fREVGQVVMVCk7CisJCWlmIChyZWctPnNpemUgIT0gMCkKKwkJCXJlc2VydmVfYm9vdG1lbShyZWctPmJhc2UsIHJlZy0+c2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHJlc291cmNlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCmluZGV4IDFkNTc2MDUuLjE2ZjFlNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYwpAQCAtNjU4LDEzICs2NTgsMTMgQEAKIAkJc2F2ZV9mcF9jb250ZXh0ID0gX3NhdmVfZnBfY29udGV4dDsKIAkJcmVzdG9yZV9mcF9jb250ZXh0ID0gX3Jlc3RvcmVfZnBfY29udGV4dDsKIAl9IGVsc2UgewotCQlzYXZlX2ZwX2NvbnRleHQgPSBjb3B5X2ZwX2Zyb21fc2lnY29udGV4dDsKLQkJcmVzdG9yZV9mcF9jb250ZXh0ID0gY29weV9mcF90b19zaWdjb250ZXh0OworCQlzYXZlX2ZwX2NvbnRleHQgPSBjb3B5X2ZwX3RvX3NpZ2NvbnRleHQ7CisJCXJlc3RvcmVfZnBfY29udGV4dCA9IGNvcHlfZnBfZnJvbV9zaWdjb250ZXh0OwogCX0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAjZWxzZQotCXNhdmVfZnBfY29udGV4dCA9IGNvcHlfZnBfZnJvbV9zaWdjb250ZXh0OzsKLQlyZXN0b3JlX2ZwX2NvbnRleHQgPSBjb3B5X2ZwX3RvX3NpZ2NvbnRleHQ7CisJc2F2ZV9mcF9jb250ZXh0ID0gY29weV9mcF90b19zaWdjb250ZXh0OworCXJlc3RvcmVfZnBfY29udGV4dCA9IGNvcHlfZnBfZnJvbV9zaWdjb250ZXh0OwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvbWVtY3B5LlMgYi9hcmNoL21pcHMvbGliL21lbWNweS5TCmluZGV4IGMxN2VmODAuLjVkMzIzOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWIvbWVtY3B5LlMKKysrIGIvYXJjaC9taXBzL2xpYi9tZW1jcHkuUwpAQCAtNTAzLDYgKzUwMyw3IEBACiAJU1RPUkVCKHQwLCBOQllURVMtMihkc3QpLCAuTHNfZXhjX3AxXEApCiAuTGRvbmVcQDoKIAlqcglyYQorCSBub3AKIAkuaWYgX19tZW1jcHkgPT0gMQogCUVORChtZW1jcHkpCiAJLnNldCBfX21lbWNweSwgMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9yM2tfZHVtcF90bGIuYyBiL2FyY2gvbWlwcy9saWIvcjNrX2R1bXBfdGxiLmMKaW5kZXggOTE2MTVjMi4uMWVmMzY1YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9yM2tfZHVtcF90bGIuYworKysgYi9hcmNoL21pcHMvbGliL3Iza19kdW1wX3RsYi5jCkBAIC0zNCw3ICszNCw3IEBACiAJCWVudHJ5bG8wID0gcmVhZF9jMF9lbnRyeWxvMCgpOwogCiAJCS8qIFVudXNlZCBlbnRyaWVzIGhhdmUgYSB2aXJ0dWFsIGFkZHJlc3Mgb2YgS1NFRzAuICAqLwotCQlpZiAoKGVudHJ5aGkgJiAweGZmZmZlMDAwKSAhPSAweDgwMDAwMDAwCisJCWlmICgoZW50cnloaSAmIDB4ZmZmZmYwMDApICE9IDB4ODAwMDAwMDAKIAkJICAgICYmIChlbnRyeWhpICYgMHhmYzApID09IGFzaWQpIHsKIAkJCS8qCiAJCQkgKiBPbmx5IHByaW50IGVudHJpZXMgaW4gdXNlCkBAIC00Myw3ICs0Myw3IEBACiAKIAkJCXByaW50aygidmE9JTA4bHggYXNpZD0lMDhseCIKIAkJCSAgICAgICAiICBbcGE9JTA2bHggbj0lZCBkPSVkIHY9JWQgZz0lZF0iLAotCQkJICAgICAgIChlbnRyeWhpICYgMHhmZmZmZTAwMCksCisJCQkgICAgICAgKGVudHJ5aGkgJiAweGZmZmZmMDAwKSwKIAkJCSAgICAgICBlbnRyeWhpICYgMHhmYzAsCiAJCQkgICAgICAgZW50cnlsbzAgJiBQQUdFX01BU0ssCiAJCQkgICAgICAgKGVudHJ5bG8wICYgKDEgPDwgMTEpKSA/IDEgOiAwLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9zdHJubGVuX3VzZXIuUyBiL2FyY2gvbWlwcy9saWIvc3Rybmxlbl91c2VyLlMKaW5kZXggZjNhZjY5OS4uN2QxMmMwZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9zdHJubGVuX3VzZXIuUworKysgYi9hcmNoL21pcHMvbGliL3N0cm5sZW5fdXNlci5TCkBAIC00MCw5ICs0MCwxMSBAQAogLmVsc2UKIAlFWChsYmUsIHQwLCAodjApLCAuTGZhdWx0XEApCiAuZW5kaWYKLQlQVFJfQURESVUJdjAsIDEKKwkuc2V0CQlub3Jlb3JkZXIKIAlibmV6CQl0MCwgMWIKLTE6CVBUUl9TVUJVCXYwLCBhMAorMToJIFBUUl9BRERJVQl2MCwgMQorCS5zZXQJCXJlb3JkZXIKKwlQVFJfU1VCVQl2MCwgYTAKIAlqcgkJcmEKIAlFTkQoX19zdHJubGVuX1xmdW5jXCgpX2FzbSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vTWFrZWZpbGUKaW5kZXggMGJiOWNjOS4uZDg3ZTAzMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw4IEBACiAjIFNlcmlhbCBwb3J0IHN1cHBvcnQKICMKIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspICs9IGVhcmx5X3ByaW50ay5vCi1vYmotJChDT05GSUdfU0VSSUFMXzgyNTApICs9IHNlcmlhbC5vCitsb29uZ3Nvbi1zZXJpYWwtJChDT05GSUdfU0VSSUFMXzgyNTApIDo9IHNlcmlhbC5vCitvYmoteSArPSAkKGxvb25nc29uLXNlcmlhbC1tKSAkKGxvb25nc29uLXNlcmlhbC15KQogb2JqLSQoQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRSkgKz0gdWFydF9iYXNlLm8KIG9iai0kKENPTkZJR19MT09OR1NPTl9NQzE0NjgxOCkgKz0gcnRjLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xvb25nc29uLTMvbnVtYS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xvb25nc29uLTMvbnVtYS5jCmluZGV4IDM3ZWQxODQuLjQyMzIzYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sb29uZ3Nvbi0zL251bWEuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbG9vbmdzb24tMy9udW1hLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBub2RlX2RhdGEgcHJlYWxsb2NfX25vZGVfZGF0YVtNQVhfTlVNTk9ERVNdOwogdW5zaWduZWQgY2hhciBfX25vZGVfZGlzdGFuY2VzW01BWF9OVU1OT0RFU11bTUFYX05VTU5PREVTXTsKK0VYUE9SVF9TWU1CT0woX19ub2RlX2Rpc3RhbmNlcyk7CiBzdHJ1Y3Qgbm9kZV9kYXRhICpfX25vZGVfZGF0YVtNQVhfTlVNTk9ERVNdOwogRVhQT1JUX1NZTUJPTChfX25vZGVfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYwppbmRleCA1MWEwZmRlLi5jYWM1MjlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCkBAIC01ODQsMTEgKzU4NCw3IEBACiAJCWlmIChpbnNuLmlfZm9ybWF0LnJzID09IGJjX29wKSB7CiAJCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJCWlmIChpc19mcHVfb3duZXIoKSkKLQkJCQlhc20gdm9sYXRpbGUoCi0JCQkJCSIuc2V0IHB1c2hcbiIKLQkJCQkJIlx0LnNldCBtaXBzMVxuIgotCQkJCQkiXHRjZmMxXHQlMCwkMzFcbiIKLQkJCQkJIlx0LnNldCBwb3AiIDogIj1yIiAoZmNyMzEpKTsKKwkJCSAgICAgICAgZmNyMzEgPSByZWFkXzMyYml0X2NwMV9yZWdpc3RlcihDUDFfU1RBVFVTKTsKIAkJCWVsc2UKIAkJCQlmY3IzMSA9IGN1cnJlbnQtPnRocmVhZC5mcHUuZmNyMzE7CiAJCQlwcmVlbXB0X2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggZmE2ZWJkNC4uYzM5MTdlMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCkBAIC0yOTksNiArMjk5LDcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAorCWh0d19zdG9wKCk7CiAJcGlkID0gcmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0s7CiAJYWRkcmVzcyAmPSAoUEFHRV9NQVNLIDw8IDEpOwogCXdyaXRlX2MwX2VudHJ5aGkoYWRkcmVzcyB8IHBpZCk7CkBAIC0zNDYsNiArMzQ3LDcgQEAKIAkJCXRsYl93cml0ZV9pbmRleGVkKCk7CiAJfQogCXRsYndfdXNlX2hhemFyZCgpOworCWh0d19zdGFydCgpOwogCWZsdXNoX2l0bGJfdm0odm1hKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC00MjIsNiArNDI0LDcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkvKiBTYXZlIG9sZCBjb250ZXh0IGFuZCBjcmVhdGUgaW1wb3NzaWJsZSBWUE4yIHZhbHVlICovCisJaHR3X3N0b3AoKTsKIAlvbGRfY3R4ID0gcmVhZF9jMF9lbnRyeWhpKCk7CiAJb2xkX3BhZ2VtYXNrID0gcmVhZF9jMF9wYWdlbWFzaygpOwogCXdpcmVkID0gcmVhZF9jMF93aXJlZCgpOwpAQCAtNDQzLDYgKzQ0Niw3IEBACiAKIAl3cml0ZV9jMF9lbnRyeWhpKG9sZF9jdHgpOwogCXdyaXRlX2MwX3BhZ2VtYXNrKG9sZF9wYWdlbWFzayk7CisJaHR3X3N0YXJ0KCk7CiBvdXQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IGI1ZjIyOGUuLmUzMzI4YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC0xODcyLDggKzE4NzIsMTYgQEAKIAl1YXNtX2xfc21wX3BndGFibGVfY2hhbmdlKGwsICpwKTsKICNlbmRpZgogCWlQVEVfTFcocCwgd3IucjEsIHdyLnIyKTsgLyogZ2V0IGV2ZW4gcHRlICovCi0JaWYgKCFtNGtjX3RsYnBfd2FyKCkpCisJaWYgKCFtNGtjX3RsYnBfd2FyKCkpIHsKIAkJYnVpbGRfdGxiX3Byb2JlX2VudHJ5KHApOworCQlpZiAoY3B1X2hhc19odHcpIHsKKwkJCS8qIHJhY2UgY29uZGl0aW9uIGhhcHBlbnMsIGxlYXZpbmcgKi8KKwkJCXVhc21faV9laGIocCk7CisJCQl1YXNtX2lfbWZjMChwLCB3ci5yMywgQzBfSU5ERVgpOworCQkJdWFzbV9pbF9ibHR6KHAsIHIsIHdyLnIzLCBsYWJlbF9sZWF2ZSk7CisJCQl1YXNtX2lfbm9wKHApOworCQl9CisJfQogCXJldHVybiB3cjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1zZWFkMy9zZWFkMy1sZWRzLmMgYi9hcmNoL21pcHMvbXRpLXNlYWQzL3NlYWQzLWxlZHMuYwppbmRleCAyMDEwMmE2Li5jNDI3YzU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLXNlYWQzL3NlYWQzLWxlZHMuYworKysgYi9hcmNoL21pcHMvbXRpLXNlYWQzL3NlYWQzLWxlZHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCkBAIC03Niw4ICs3Niw0IEBACiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZmxlZF9kZXZpY2UpOwogfQogCi1tb2R1bGVfaW5pdChsZWRfaW5pdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkNocmlzIERlYXJtYW4gPGNocmlzQG1pcHMuY29tPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJMRUQgcHJvYmUgZHJpdmVyIGZvciBTRUFELTMiKTsKK2RldmljZV9pbml0Y2FsbChsZWRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbmV0bG9naWMveGxwL01ha2VmaWxlIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hscC9NYWtlZmlsZQppbmRleCBiZTM1OGE4Li42YjQzYWYwYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL25ldGxvZ2ljL3hscC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbmV0bG9naWMveGxwL01ha2VmaWxlCkBAIC0xLDYgKzEsMTAgQEAKIG9iai15CQkJCSs9IHNldHVwLm8gbmxtX2hhbC5vIGNvcDItZXgubyBkdC5vCiBvYmotJChDT05GSUdfU01QKQkJKz0gd2FrZXVwLm8KLW9iai0kKENPTkZJR19VU0IpCQkrPSB1c2ItaW5pdC5vCi1vYmotJChDT05GSUdfVVNCKQkJKz0gdXNiLWluaXQteGxwMi5vCi1vYmotJChDT05GSUdfU0FUQV9BSENJKQkJKz0gYWhjaS1pbml0Lm8KLW9iai0kKENPTkZJR19TQVRBX0FIQ0kpCQkrPSBhaGNpLWluaXQteGxwMi5vCitpZmRlZiBDT05GSUdfVVNCCitvYmoteQkJCQkrPSB1c2ItaW5pdC5vCitvYmoteQkJCQkrPSB1c2ItaW5pdC14bHAyLm8KK2VuZGlmCitpZmRlZiBDT05GSUdfU0FUQV9BSENJCitvYmoteQkJCQkrPSBhaGNpLWluaXQubworb2JqLXkJCQkJKz0gYWhjaS1pbml0LXhscDIubworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9iYWNrdHJhY2UuYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9iYWNrdHJhY2UuYwppbmRleCA2ODU0ZWQ1Li44M2ExZGZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvYmFja3RyYWNlLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL2JhY2t0cmFjZS5jCkBAIC05Miw3ICs5Miw3IEBACiAJCQkJLyogVGhpcyBtYXJrcyB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwKIAkJCQkgICB3aGljaCBtZWFucyB3ZSBvdmVycmFuLiAqLwogCQkJCWJyZWFrOwotCQkJc3RhY2tfc2l6ZSA9ICh1bnNpZ25lZCkgc3RhY2tfYWRqdXN0bWVudDsKKwkJCXN0YWNrX3NpemUgPSAodW5zaWduZWQgbG9uZykgc3RhY2tfYWRqdXN0bWVudDsKIAkJfSBlbHNlIGlmIChpc19yYV9zYXZlX2lucygmaXApKSB7CiAJCQlpbnQgcmFfc2xvdCA9IGlwLmlfZm9ybWF0LnNpbW1lZGlhdGU7CiAJCQlpZiAocmFfc2xvdCA8IDApCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL21zaS1vY3Rlb24uYyBiL2FyY2gvbWlwcy9wY2kvbXNpLW9jdGVvbi5jCmluZGV4IDYzYmJlMDcuLmNmZmFhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvbXNpLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvbXNpLW9jdGVvbi5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBkZXYtPm1zaV9jYXAgKyBQQ0lfTVNJX0ZMQUdTLCBjb250cm9sKTsKIAogCWlycV9zZXRfbXNpX2Rlc2MoaXJxLCBkZXNjKTsKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9tc2kteGxwLmMgYi9hcmNoL21pcHMvcGNpL21zaS14bHAuYwppbmRleCBmYTM3NGZlLi42YTQwZjI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL21zaS14bHAuYworKysgYi9hcmNoL21pcHMvcGNpL21zaS14bHAuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAKIAltc2l4dmVjID0gbmxtX2lycV9tc2l4dmVjKGQtPmlycSk7CiAJbGluayA9IG5sbV9pcnFfbXNpeGxpbmsobXNpeHZlYyk7Ci0JbWFza19tc2lfaXJxKGQpOworCXBjaV9tc2lfbWFza19pcnEoZCk7CiAJbWQgPSBpcnFfZGF0YV9nZXRfaXJxX2hhbmRsZXJfZGF0YShkKTsKIAogCS8qIEFjayBNU0kgb24gYnJpZGdlICovCkBAIC0yMzksMTAgKzIzOSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhscF9tc2l4X2NoaXAgPSB7CiAJLm5hbWUJCT0gIlhMUC1NU0lYIiwKLQkuaXJxX2VuYWJsZQk9IHVubWFza19tc2lfaXJxLAotCS5pcnFfZGlzYWJsZQk9IG1hc2tfbXNpX2lycSwKKwkuaXJxX2VuYWJsZQk9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUJPSBwY2lfbXNpX21hc2tfaXJxLAogCS5pcnFfbWFza19hY2sJPSB4bHBfbXNpeF9tYXNrX2FjaywKLQkuaXJxX3VubWFzawk9IHVubWFza19tc2lfaXJxLAorCS5pcnFfdW5tYXNrCT0gcGNpX21zaV91bm1hc2tfaXJxLAogfTsKIAogdm9pZCBhcmNoX3RlYXJkb3duX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTM0NSw3ICszNDUsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0Jd3JpdGVfbXNpX21zZyh4aXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyh4aXJxLCAmbXNnKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQzLDEyICs0NDMsMTAgQEAKIAltc2cuZGF0YSA9IDB4YzAwIHwgbXNpeHZlYzsKIAogCXJldCA9IGlycV9zZXRfbXNpX2Rlc2MoeGlycSwgZGVzYyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGVzdHJveV9pcnEoeGlycSk7CisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JfQogCi0Jd3JpdGVfbXNpX21zZyh4aXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyh4aXJxLCAmbXNnKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2kteGxyLmMgYi9hcmNoL21pcHMvcGNpL3BjaS14bHIuYwppbmRleCAwZGRlODAzLi4yNmQyZGFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS14bHIuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS14bHIuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbWVtb3J5LmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYwppbmRleCBhOTVjMDBmLi5hMzA0YmNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYwpAQCAtMTA3LDYgKzEwNyw3IEBACiB9CiAKIHVuc2lnbmVkIGNoYXIgX19ub2RlX2Rpc3RhbmNlc1tNQVhfQ09NUEFDVF9OT0RFU11bTUFYX0NPTVBBQ1RfTk9ERVNdOworRVhQT1JUX1NZTUJPTChfX25vZGVfZGlzdGFuY2VzKTsKIAogc3RhdGljIGludCBfX2luaXQgY29tcHV0ZV9ub2RlX2Rpc3RhbmNlKG5hc2lkX3QgbmFzaWRfYSwgbmFzaWRfdCBuYXNpZF9iKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaAppbmRleCBlNmVkMGQ4Li44OTdiYTNjIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaApAQCAtNjcsNiArNjcsMTAgQEAKICNkZWZpbmUgX19yYXdfd3JpdGV3IHdyaXRldwogI2RlZmluZSBfX3Jhd193cml0ZWwgd3JpdGVsCiAKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQgd3JpdGViCisjZGVmaW5lIHdyaXRld19yZWxheGVkIHdyaXRldworI2RlZmluZSB3cml0ZWxfcmVsYXhlZCB3cml0ZWwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIHRyYWRpdGlvbmFsIGlucHV0L291dHB1dCBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvS2NvbmZpZyBiL2FyY2gvbmlvczIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzYxYWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9LY29uZmlnCkBAIC0wLDAgKzEsMjA2IEBACitjb25maWcgTklPUzIKKwlkZWZfYm9vbCB5CisJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCisJc2VsZWN0IENMS1NSQ19PRgorCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0CisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgR0VORVJJQ19DUFVfREVWSUNFUworCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQorCXNlbGVjdCBHRU5FUklDX0lSUV9TSE9XCisJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKKwlzZWxlY3QgSVJRX0RPTUFJTgorCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQQorCXNlbGVjdCBPRgorCXNlbGVjdCBPRl9FQVJMWV9GTEFUVFJFRQorCXNlbGVjdCBTT0NfQlVTCisJc2VsZWN0IFNQQVJTRV9JUlEKKwlzZWxlY3QgVVNCX0FSQ0hfSEFTX0hDRCBpZiBVU0JfU1VQUE9SVAorCitjb25maWcgR0VORVJJQ19DU1VNCisJZGVmX2Jvb2wgeQorCitjb25maWcgR0VORVJJQ19IV0VJR0hUCisJZGVmX2Jvb2wgeQorCitjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBOT19JT1BPUlRfTUFQCisJZGVmX2Jvb2wgeQorCitjb25maWcgSEFTX0RNQQorCWRlZl9ib29sIHkKKworY29uZmlnIEZQVQorCWRlZl9ib29sIG4KKworY29uZmlnIFNXQVAKKwlkZWZfYm9vbCBuCisKK2NvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCisJZGVmX2Jvb2wgeQorCitjb25maWcgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAorCWRlZl9ib29sIG4KKworc291cmNlICJpbml0L0tjb25maWciCisKK21lbnUgIktlcm5lbCBmZWF0dXJlcyIKKworc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgorCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKK3NvdXJjZSAia2VybmVsL0tjb25maWcuaHoiCisKK3NvdXJjZSAibW0vS2NvbmZpZyIKKworY29uZmlnIEZPUkNFX01BWF9aT05FT1JERVIKKwlpbnQgIk1heGltdW0gem9uZSBvcmRlciIKKwlyYW5nZSA5IDIwCisJZGVmYXVsdCAiMTEiCisJaGVscAorCSAgVGhlIGtlcm5lbCBtZW1vcnkgYWxsb2NhdG9yIGRpdmlkZXMgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeQorCSAgYmxvY2tzIGludG8gInpvbmVzIiwgd2hlcmUgZWFjaCB6b25lIGlzIGEgcG93ZXIgb2YgdHdvIG51bWJlciBvZgorCSAgcGFnZXMuICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byB0aGF0IHRoZSBrZXJuZWwKKwkgIGtlZXBzIGluIHRoZSBtZW1vcnkgYWxsb2NhdG9yLiAgSWYgeW91IG5lZWQgdG8gYWxsb2NhdGUgdmVyeSBsYXJnZQorCSAgYmxvY2tzIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnksIHRoZW4geW91IG1heSBuZWVkIHRvCisJICBpbmNyZWFzZSB0aGlzIHZhbHVlLgorCisJICBUaGlzIGNvbmZpZyBvcHRpb24gaXMgYWN0dWFsbHkgbWF4aW11bSBvcmRlciBwbHVzIG9uZS4gRm9yIGV4YW1wbGUsCisJICBhIHZhbHVlIG9mIDExIG1lYW5zIHRoYXQgdGhlIGxhcmdlc3QgZnJlZSBtZW1vcnkgYmxvY2sgaXMgMl4xMCBwYWdlcy4KKworZW5kbWVudQorCitzb3VyY2UgImFyY2gvbmlvczIvcGxhdGZvcm0vS2NvbmZpZy5wbGF0Zm9ybSIKKworbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgorCitjb25maWcgTU1VCisJZGVmX2Jvb2wgeQorCitjb25maWcgTlJfQ1BVUworCWludAorCWRlZmF1bHQgIjEiCisKK2NvbmZpZyBOSU9TMl9BTElHTk1FTlRfVFJBUAorCWJvb2wgIkNhdGNoIGFsaWdubWVudCB0cmFwIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIE5pb3MgSUkgQ1BVcyBjYW5ub3QgZmV0Y2gvc3RvcmUgZGF0YSB3aGljaCBpcyBub3QgYnVzIGFsaWduZWQsCisJICBpLmUuLCBhIDIgb3IgNCBieXRlIGZldGNoIG11c3Qgc3RhcnQgYXQgYW4gYWRkcmVzcyBkaXZpc2libGUgYnkKKwkgIDIgb3IgNC4gQW55IG5vbi1hbGlnbmVkIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgdHJhcHBlZCBhbmQKKwkgIGVtdWxhdGVkIGluIHNvZnR3YXJlIGlmIHlvdSBzYXkgWSBoZXJlLCB3aGljaCBoYXMgYSBwZXJmb3JtYW5jZQorCSAgaW1wYWN0LgorCitjb21tZW50ICJCb290IG9wdGlvbnMiCisKK2NvbmZpZyBDTURMSU5FX0JPT0wKKwlib29sICJEZWZhdWx0IGJvb3Rsb2FkZXIga2VybmVsIGFyZ3VtZW50cyIKKwlkZWZhdWx0IHkKKworY29uZmlnIENNRExJTkUKKwlzdHJpbmcgIkRlZmF1bHQga2VybmVsIGNvbW1hbmQgc3RyaW5nIgorCWRlZmF1bHQgIiIKKwlkZXBlbmRzIG9uIENNRExJTkVfQk9PTAorCWhlbHAKKwkgIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IGZvciB0aGUgYm9vdCBsb2FkZXIgdG8KKwkgIHBhc3MgYXJndW1lbnRzIHRvIHRoZSBrZXJuZWwuIEZvciB0aGVzZSBwbGF0Zm9ybXMsIHlvdSBjYW4gc3VwcGx5CisJICBzb21lIGNvbW1hbmQtbGluZSBvcHRpb25zIGF0IGJ1aWxkIHRpbWUgYnkgZW50ZXJpbmcgdGhlbSBoZXJlLiAgSW4KKwkgIG90aGVyIGNhc2VzIHlvdSBjYW4gc3BlY2lmeSBrZXJuZWwgYXJncyBzbyB0aGF0IHlvdSBkb24ndCBoYXZlCisJICB0byBzZXQgdGhlbSB1cCBpbiBib2FyZCBwcm9tIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgorCitjb25maWcgQ01ETElORV9GT1JDRQorCWJvb2wgIkZvcmNlIGRlZmF1bHQga2VybmVsIGNvbW1hbmQgc3RyaW5nIgorCWRlcGVuZHMgb24gQ01ETElORV9CT09MCisJaGVscAorCSAgU2V0IHRoaXMgdG8gaGF2ZSBhcmd1bWVudHMgZnJvbSB0aGUgZGVmYXVsdCBrZXJuZWwgY29tbWFuZCBzdHJpbmcKKwkgIG92ZXJyaWRlIHRob3NlIHBhc3NlZCBieSB0aGUgYm9vdCBsb2FkZXIuCisKK2NvbmZpZyBOSU9TMl9DTURMSU5FX0lHTk9SRV9EVEIKKwlib29sICJJZ25vcmUga2VybmVsIGNvbW1hbmQgc3RyaW5nIGZyb20gRFRCIgorCWRlcGVuZHMgb24gQ01ETElORV9CT09MCisJZGVwZW5kcyBvbiAhQ01ETElORV9GT1JDRQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNldCB0aGlzIHRvIGlnbm9yZSB0aGUgYm9vdGFyZ3MgcHJvcGVydHkgZnJvbSB0aGUgZGV2aWNldHJlZSdzCisJICBjaG9zZW4gbm9kZSBhbmQgZmFsbCBiYWNrIHRvIENNRExJTkUgaWYgbm90aGluZyBpcyBwYXNzZWQuCisKK2NvbmZpZyBOSU9TMl9QQVNTX0NNRExJTkUKKwlib29sICJQYXNzZWQga2VybmVsIGNvbW1hbmQgbGluZSBmcm9tIHUtYm9vdCIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBVc2UgYm9vdGFyZ3MgZW52IHZhcmlhYmxlIGZyb20gdS1ib290IGZvciBrZXJuZWwgY29tbWFuZCBsaW5lLgorCSAgd2lsbCBvdmVycmlkZSAiRGVmYXVsdCBrZXJuZWwgY29tbWFuZCBzdHJpbmciLgorCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCisKK2VuZG1lbnUKKworbWVudSAiQWR2YW5jZWQgc2V0dXAiCisKK2NvbmZpZyBBRFZBTkNFRF9PUFRJT05TCisJYm9vbCAiUHJvbXB0IGZvciBhZHZhbmNlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIgorCWhlbHAKKworY29tbWVudCAiRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkIgorCWRlcGVuZHMgb24gIUFEVkFOQ0VEX09QVElPTlMKKworY29uZmlnIE5JT1MyX0tFUk5FTF9NTVVfUkVHSU9OX0JBU0VfQk9PTAorCWJvb2wgIlNldCBjdXN0b20ga2VybmVsIE1NVSByZWdpb24gYmFzZSBhZGRyZXNzIgorCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGtlcm5lbCBNTVUgcmVnaW9uLgorCisJICBTYXkgTiBoZXJlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKK2NvbmZpZyBOSU9TMl9LRVJORUxfTU1VX1JFR0lPTl9CQVNFCisJaGV4ICJWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUga2VybmVsIE1NVSByZWdpb24gIiBpZiBOSU9TMl9LRVJORUxfTU1VX1JFR0lPTl9CQVNFX0JPT0wKKwlkZWZhdWx0ICIweDgwMDAwMDAwIgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2aXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUga2VybmVsIE1NVSByZWdpb24uCisKK2NvbmZpZyBOSU9TMl9LRVJORUxfUkVHSU9OX0JBU0VfQk9PTAorCWJvb2wgIlNldCBjdXN0b20ga2VybmVsIHJlZ2lvbiBiYXNlIGFkZHJlc3MiCisJZGVwZW5kcyBvbiBBRFZBTkNFRF9PUFRJT05TCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUga2VybmVsIHJlZ2lvbi4KKworCSAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCitjb25maWcgTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFCisJaGV4ICJWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUga2VybmVsIHJlZ2lvbiAiIGlmIE5JT1MyX0tFUk5FTF9SRUdJT05fQkFTRV9CT09MCisJZGVmYXVsdCAiMHhjMDAwMDAwMCIKKworY29uZmlnIE5JT1MyX0lPX1JFR0lPTl9CQVNFX0JPT0wKKwlib29sICJTZXQgY3VzdG9tIEkvTyByZWdpb24gYmFzZSBhZGRyZXNzIgorCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIEkvTyByZWdpb24uCisKKwkgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKworY29uZmlnIE5JT1MyX0lPX1JFR0lPTl9CQVNFCisJaGV4ICJWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUgSS9PIHJlZ2lvbiIgaWYgTklPUzJfSU9fUkVHSU9OX0JBU0VfQk9PTAorCWRlZmF1bHQgIjB4ZTAwMDAwMDAiCisKK2VuZG1lbnUKKworbWVudSAiRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMiCisKK3NvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCisKK2VuZG1lbnUKKworc291cmNlICJuZXQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL0tjb25maWciCisKK3NvdXJjZSAiZnMvS2NvbmZpZyIKKworc291cmNlICJhcmNoL25pb3MyL0tjb25maWcuZGVidWciCisKK3NvdXJjZSAic2VjdXJpdHkvS2NvbmZpZyIKKworc291cmNlICJjcnlwdG8vS2NvbmZpZyIKKworc291cmNlICJsaWIvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvbmlvczIvS2NvbmZpZy5kZWJ1ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDRlNmJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9LY29uZmlnLmRlYnVnCkBAIC0wLDAgKzEsMTcgQEAKK21lbnUgIktlcm5lbCBoYWNraW5nIgorCitjb25maWcgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAorCWRlZl9ib29sIHkKKworc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKKworY29uZmlnIERFQlVHX1NUQUNLX1VTQUdFCisJYm9vbCAiRW5hYmxlIHN0YWNrIHV0aWxpemF0aW9uIGluc3RydW1lbnRhdGlvbiIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWhlbHAKKwkgIEVuYWJsZXMgdGhlIGRpc3BsYXkgb2YgdGhlIG1pbmltdW0gYW1vdW50IG9mIGZyZWUgc3RhY2sgd2hpY2ggZWFjaAorCSAgdGFzayBoYXMgZXZlciBoYWQgYXZhaWxhYmxlIGluIHRoZSBzeXNycS1UIGFuZCBzeXNycS1QIGRlYnVnIG91dHB1dC4KKworCSAgVGhpcyBvcHRpb24gd2lsbCBzbG93IGRvd24gcHJvY2VzcyBjcmVhdGlvbiBzb21ld2hhdC4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9NYWtlZmlsZSBiL2FyY2gvbmlvczIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0MmM5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL01ha2VmaWxlCkBAIC0wLDAgKzEsNzMgQEAKKyMKKyMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMTk5NCwgOTUsIDk2LCAyMDAzIGJ5IFdpbmQgUml2ZXIgU3lzdGVtcworIyBXcml0dGVuIGJ5IEZyZWRyaWsgTWFya3N0cm9tCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSB0aGUgZ2xvYmFsIG1ha2VmaWxlIHNvIHRoYXQgeW91IGNhbiBhZGQgeW91ciBvd24KKyMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGFuZCBkZXBlbmRlbmNpZXMuIFJlbWVtYmVyIHRvIGRvIGhhdmUgYWN0aW9ucworIyBmb3IgImFyY2hjbGVhbiIgY2xlYW5pbmcgdXAgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgorIworIyBOaW9zMiBwb3J0IGJ5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMgdHJvdWdoOgorIyAgIGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKworVVRTX1NZU05BTUUgPSBMaW51eAorCitleHBvcnQgTU1VCisKK0xJQkdDQwkJOj0gJChzaGVsbCAkKENDKSAkKEtCVUlMRF9DRkxBR1MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lKQorCitLQlVJTERfQ0ZMQUdTICs9IC1waXBlIC1EX19saW51eF9fIC1EX19FTEZfXworS0JVSUxEX0NGTEFHUyArPSAkKGlmICQoQ09ORklHX05JT1MyX0hXX01VTF9TVVBQT1JUKSwtbWh3LW11bCwtbW5vLWh3LW11bCkKK0tCVUlMRF9DRkxBR1MgKz0gJChpZiAkKENPTkZJR19OSU9TMl9IV19NVUxYX1NVUFBPUlQpLC1taHctbXVseCwtbW5vLWh3LW11bHgpCitLQlVJTERfQ0ZMQUdTICs9ICQoaWYgJChDT05GSUdfTklPUzJfSFdfRElWX1NVUFBPUlQpLC1taHctZGl2LC1tbm8taHctZGl2KQorS0JVSUxEX0NGTEFHUyArPSAkKGlmICQoQ09ORklHX05JT1MyX0ZQVV9TVVBQT1JUKSwtbWN1c3RvbS1mcHUtY2ZnPTYwLTEsKQorCitLQlVJTERfQ0ZMQUdTICs9IC1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscworS0JVSUxEX0NGTEFHUyArPSAtRFVUU19TWVNOQU1FPVwiJChVVFNfU1lTTkFNRSlcIgorS0JVSUxEX0NGTEFHUyArPSAtZm5vLWJ1aWx0aW4KK0tCVUlMRF9DRkxBR1MgKz0gLUcgMAorCitoZWFkLXkJCTo9IGFyY2gvbmlvczIva2VybmVsL2hlYWQubworbGlicy15CQkrPSBhcmNoL25pb3MyL2xpYi8gJChMSUJHQ0MpCitjb3JlLXkJCSs9IGFyY2gvbmlvczIva2VybmVsLyBhcmNoL25pb3MyL21tLworY29yZS15CQkrPSBhcmNoL25pb3MyL3BsYXRmb3JtLworCitJTlNUQUxMX1BBVEggPz0gL3RmdHBib290CituaW9zMi1ib290IDo9IGFyY2gvJChBUkNIKS9ib290CitCT09UX1RBUkdFVFMgPSB2bUltYWdlIHpJbWFnZQorUEhPTlkgKz0gJChCT09UX1RBUkdFVFMpIGluc3RhbGwKK0tCVUlMRF9JTUFHRSA6PSAkKG5pb3MyLWJvb3QpL3ZtSW1hZ2UKKworaWZuZXEgKCQoQ09ORklHX05JT1MyX0RUQl9TT1VSQ0UpLCIiKQorCWNvcmUteQkrPSAkKG5pb3MyLWJvb3QpLworZW5kaWYKKworYWxsOiB2bUltYWdlCisKK2FyY2hjbGVhbjoKKwkkKFEpJChNQUtFKSAkKGNsZWFuKT0kKG5pb3MyLWJvb3QpCisKKyUuZHRiOgorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQobmlvczItYm9vdCkgJChuaW9zMi1ib290KS8kQAorCitkdGJzOgorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQobmlvczItYm9vdCkgJChuaW9zMi1ib290KS8kQAorCiskKEJPT1RfVEFSR0VUUyk6IHZtbGludXgKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG5pb3MyLWJvb3QpICQobmlvczItYm9vdCkvJEAKKworaW5zdGFsbDoKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG5pb3MyLWJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgaW5zdGFsbAorCitkZWZpbmUgYXJjaGhlbHAKKyAgZWNobyAgJyogdm1JbWFnZSAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoJChLQlVJTERfSU1BR0UpKScKKyAgZWNobyAgJyAgaW5zdGFsbCAgICAgICAgIC0gSW5zdGFsbCBrZXJuZWwgdXNpbmcnCisgIGVjaG8gICcgICAgICAgICAgICAgICAgICAgICAoeW91cikgfi9iaW4vJChJTlNUQUxMS0VSTkVMKSBvcicKKyAgZWNobyAgJyAgICAgICAgICAgICAgICAgICAgIChkaXN0cmlidXRpb24pIC9zYmluLyQoSU5TVEFMTEtFUk5FTCkgb3InCisgIGVjaG8gICcgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIHRvICQkKElOU1RBTExfUEFUSCknCisgIGVjaG8gICcgIGR0YnMgICAgICAgICAgICAtIEJ1aWxkIGRldmljZSB0cmVlIGJsb2JzIGZvciBlbmFibGVkIGJvYXJkcycKK2VuZGVmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL25pb3MyL2Jvb3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzOTJkYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvYm9vdC9NYWtlZmlsZQpAQCAtMCwwICsxLDUyIEBACisjCisjIGFyY2gvbmlvczIvYm9vdC9NYWtlZmlsZQorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisKK1VJTUFHRV9MT0FEQUREUiA9ICQoc2hlbGwgJChOTSkgdm1saW51eCB8IGF3ayAnJCRORiA9PSAiX3N0ZXh0IiB7cHJpbnQgJCQxfScpCitVSU1BR0VfRU5UUllBRERSID0gJChzaGVsbCAkKE5NKSB2bWxpbnV4IHwgYXdrICckJE5GID09ICJfc3RhcnQiIHtwcmludCAkJDF9JykKK1VJTUFHRV9DT01QUkVTU0lPTiA9IGd6aXAKKworT0JKQ09QWUZMQUdTX3ZtbGludXguYmluIDo9IC1PIGJpbmFyeQorCit0YXJnZXRzICs9IHZtbGludXguYmluIHZtbGludXguZ3ogdm1JbWFnZQorCiskKG9iaikvdm1saW51eC5iaW46IHZtbGludXggRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCiskKG9iaikvdm1saW51eC5nejogJChvYmopL3ZtbGludXguYmluIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsZ3ppcCkKKworJChvYmopL3ZtSW1hZ2U6ICQob2JqKS92bWxpbnV4Lmd6CisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlKQorCUAkKGtlY2hvKSAnS2VybmVsOiAkQCBpcyByZWFkeScKKworIyBSdWxlIHRvIGJ1aWxkIGRldmljZSB0cmVlIGJsb2JzCitEVEJfU1JDIDo9ICQocGF0c3Vic3QgIiUiLCUsJChDT05GSUdfTklPUzJfRFRCX1NPVVJDRSkpCisKKyMgTWFrZSBzdXJlIHRoZSBnZW5lcmF0ZWQgZHRiIGdldHMgcmVtb3ZlZCBkdXJpbmcgY2xlYW4KK2V4dHJhLSQoQ09ORklHX05JT1MyX0RUQl9TT1VSQ0VfQk9PTCkgKz0gc3lzdGVtLmR0YgorCiskKG9iaikvc3lzdGVtLmR0YjogJChEVEJfU1JDKSBGT1JDRQorCSQoY2FsbCBjbWQsZHRjKQorCisjIEVuc3VyZSBzeXN0ZW0uZHRiIGV4aXN0cworJChvYmopL2xpbmtlZF9kdGIubzogJChvYmopL3N5c3RlbS5kdGIKKworb2JqLSQoQ09ORklHX05JT1MyX0RUQl9TT1VSQ0VfQk9PTCkgKz0gbGlua2VkX2R0Yi5vCisKK3RhcmdldHMgKz0gJChkdGIteSkKKworIyBSdWxlIHRvIGJ1aWxkIGRldmljZSB0cmVlIGJsb2JzIHdpdGggbWFrZSBjb21tYW5kCiskKG9iaikvJS5kdGI6ICQoc3JjKS9kdHMvJS5kdHMgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsZHRjKQorCiskKG9iaikvZHRiczogJChhZGRwcmVmaXggJChvYmopLywgJChkdGIteSkpCisKK2NsZWFuLWZpbGVzIDo9ICouZHRiCisKK2luc3RhbGw6CisJc2ggJChzcmN0cmVlKS8kKHNyYykvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpICQoQk9PVElNQUdFKSBTeXN0ZW0ubWFwICIkKElOU1RBTExfUEFUSCkiCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2Jvb3QvZHRzLzNjMTIwX2RldmJvYXJkLmR0cyBiL2FyY2gvbmlvczIvYm9vdC9kdHMvM2MxMjBfZGV2Ym9hcmQuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYzUxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2Jvb3QvZHRzLzNjMTIwX2RldmJvYXJkLmR0cwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHNvcGMyZHRzLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJhbHRyLHFzeXNfZ2hyZF8zYzEyMCI7CisJY29tcGF0aWJsZSA9ICJhbHRyLHFzeXNfZ2hyZF8zYzEyMCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdTogY3B1QDB4MCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhbHRyLG5pb3MyLTEuMCI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTI1MDAwMDAwPjsKKwkJCWRjYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlpY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlhbHRyLGltcGxlbWVudGF0aW9uID0gImZhc3QiOworCQkJYWx0cixwaWQtbnVtLWJpdHMgPSA8OD47CisJCQlhbHRyLHRsYi1udW0td2F5cyA9IDwxNj47CisJCQlhbHRyLHRsYi1udW0tZW50cmllcyA9IDwxMjg+OworCQkJYWx0cix0bGItcHRyLXN6ID0gPDc+OworCQkJYWx0cixoYXMtZGl2ID0gPDE+OworCQkJYWx0cixoYXMtbXVsID0gPDE+OworCQkJYWx0cixyZXNldC1hZGRyID0gPDB4YzI4MDAwMDA+OworCQkJYWx0cixmYXN0LXRsYi1taXNzLWFkZHIgPSA8MHhjN2ZmZjQwMD47CisJCQlhbHRyLGV4Y2VwdGlvbi1hZGRyID0gPDB4ZDAwMDAwMjA+OworCQkJYWx0cixoYXMtaW5pdGRhID0gPDE+OworCQkJYWx0cixoYXMtbW11ID0gPDE+OworCQl9OworCX07CisKKwltZW1vcnlAMCB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDEwMDAwMDAwIDB4MDgwMDAwMDA+LAorCQkJPDB4MDdmZmY0MDAgMHgwMDAwMDQwMD47CisJfTsKKworCXNvcGNAMCB7CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCXJhbmdlczsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImFsdHIsYXZhbG9uIiwgInNpbXBsZS1idXMiOworCQlidXMtZnJlcXVlbmN5ID0gPDEyNTAwMDAwMD47CisKKwkJcGJfY3B1X3RvX2lvOiBicmlkZ2VAMHg4MDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlyZWcgPSA8MHgwODAwMDAwMCAweDAwODAwMDAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXMgPSA8MHgwMDAwMjAwMCAweDA4MDAyMDAwIDB4MDAwMDIwMDA+LAorCQkJCTwweDAwMDA0MDAwIDB4MDgwMDQwMDAgMHgwMDAwMDQwMD4sCisJCQkJPDB4MDAwMDQ0MDAgMHgwODAwNDQwMCAweDAwMDAwMDQwPiwKKwkJCQk8MHgwMDAwNDgwMCAweDA4MDA0ODAwIDB4MDAwMDAwNDA+LAorCQkJCTwweDAwMDA0YzgwIDB4MDgwMDRjODAgMHgwMDAwMDAyMD4sCisJCQkJPDB4MDAwMDRkNTAgMHgwODAwNGQ1MCAweDAwMDAwMDA4PiwKKwkJCQk8MHgwMDAwODAwMCAweDA4MDA4MDAwIDB4MDAwMDAwMjA+LAorCQkJCTwweDAwNDAwMDAwIDB4MDg0MDAwMDAgMHgwMDAwMDAyMD47CisKKwkJCXRpbWVyXzFtczogdGltZXJAMHg0MDAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYWx0cix0aW1lci0xLjAiOworCQkJCXJlZyA9IDwweDAwNDAwMDAwIDB4MDAwMDAwMjA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdT47CisJCQkJaW50ZXJydXB0cyA9IDwxMT47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEyNTAwMDAwMD47CisJCQl9OworCisJCQl0aW1lcl8wOiB0aW1lckAweDgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYWx0cix0aW1lci0xLjAiOworCQkJCXJlZyA9IDwgMHgwMDAwODAwMCAweDAwMDAwMDIwID47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmNwdSA+OworCQkJCWludGVycnVwdHMgPSA8IDUgPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8IDEyNTAwMDAwMCA+OworCQkJfTsKKworCQkJanRhZ191YXJ0OiBzZXJpYWxAMHg0ZDUwIHsKKwkJCQljb21wYXRpYmxlID0gImFsdHIsanVhcnQtMS4wIjsKKwkJCQlyZWcgPSA8MHgwMDAwNGQ1MCAweDAwMDAwMDA4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZjcHU+OworCQkJCWludGVycnVwdHMgPSA8MT47CisJCQl9OworCisJCQl0c2VfbWFjOiBldGhlcm5ldEAweDQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYWx0cix0c2UtMS4wIjsKKwkJCQlyZWcgPSA8MHgwMDAwNDAwMCAweDAwMDAwNDAwPiwKKwkJCQkJPDB4MDAwMDQ0MDAgMHgwMDAwMDA0MD4sCisJCQkJCTwweDAwMDA0ODAwIDB4MDAwMDAwNDA+LAorCQkJCQk8MHgwMDAwMjAwMCAweDAwMDAyMDAwPjsKKwkJCQlyZWctbmFtZXMgPSAiY29udHJvbF9wb3J0IiwgInJ4X2NzciIsICJ0eF9jc3IiLCAiczEiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdT47CisJCQkJaW50ZXJydXB0cyA9IDwyIDM+OworCQkJCWludGVycnVwdC1uYW1lcyA9ICJyeF9pcnEiLCAidHhfaXJxIjsKKwkJCQlyeC1maWZvLWRlcHRoID0gPDgxOTI+OworCQkJCXR4LWZpZm8tZGVwdGggPSA8ODE5Mj47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MTUxOD47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCQkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJCXRzZV9tYWNfbWRpbzogbWRpbyB7CisJCQkJCWNvbXBhdGlibGUgPSAiYWx0cix0c2UtbWRpbyI7CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE4IHsKKwkJCQkJCXJlZyA9IDwxOD47CisJCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQl1YXJ0OiBzZXJpYWxAMHg0YzgwIHsKKwkJCQljb21wYXRpYmxlID0gImFsdHIsdWFydC0xLjAiOworCQkJCXJlZyA9IDwweDAwMDA0YzgwIDB4MDAwMDAwMjA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdT47CisJCQkJaW50ZXJydXB0cyA9IDwxMD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2MjUwMDAwMD47CisJCQl9OworCQl9OworCisJCWNmaV9mbGFzaF82NG06IGZsYXNoQDB4MCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA0MDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AODAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwMDgwMDAwMCAweDAxZTAwMDAwPjsKKwkJCQlsYWJlbCA9ICJKRkZTMiBGaWxlc3lzdGVtIjsKKwkJCX07CisJCX07CisJfTsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImRlYnVnIGNvbnNvbGU9dHR5SjAsMTE1MjAwIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvYm9vdC9pbnN0YWxsLnNoIGIvYXJjaC9uaW9zMi9ib290L2luc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiM2Y0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvYm9vdC9pbnN0YWxsLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIENvcHlyaWdodCAoQykgMTk5NSBieSBMaW51cyBUb3J2YWxkcworIworIyBBZGFwdGVkIGZyb20gY29kZSBpbiBhcmNoL2kzODYvYm9vdC9NYWtlZmlsZSBieSBILiBQZXRlciBBbnZpbgorIworIyAibWFrZSBpbnN0YWxsIiBzY3JpcHQgZm9yIG5pb3MyIGFyY2hpdGVjdHVyZQorIworIyBBcmd1bWVudHM6CisjICAgJDEgLSBrZXJuZWwgdmVyc2lvbgorIyAgICQyIC0ga2VybmVsIGltYWdlIGZpbGUKKyMgICAkMyAtIGtlcm5lbCBtYXAgZmlsZQorIyAgICQ0IC0gZGVmYXVsdCBpbnN0YWxsIHBhdGggKGJsYW5rIGlmIHJvb3QgZGlyZWN0b3J5KQorIworCit2ZXJpZnkgKCkgeworCWlmIFsgISAtZiAiJDEiIF07IHRoZW4KKwkJZWNobyAiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkJZWNobyAiICoqKiBNaXNzaW5nIGZpbGU6ICQxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkJZWNobyAnICoqKiBZb3UgbmVlZCB0byBydW4gIm1ha2UiIGJlZm9yZSAibWFrZSBpbnN0YWxsIi4nIDE+JjIKKwkJZWNobyAiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkJZXhpdCAxCisJZmkKK30KKworIyBNYWtlIHN1cmUgdGhlIGZpbGVzIGFjdHVhbGx5IGV4aXN0Cit2ZXJpZnkgIiQyIgordmVyaWZ5ICIkMyIKKworIyBVc2VyIG1heSBoYXZlIGEgY3VzdG9tIGluc3RhbGwgc2NyaXB0CisKK2lmIFsgLXggfi9iaW4vJHtJTlNUQUxMS0VSTkVMfSBdOyB0aGVuIGV4ZWMgfi9iaW4vJHtJTlNUQUxMS0VSTkVMfSAiJEAiOyBmaQoraWYgWyAteCAvc2Jpbi8ke0lOU1RBTExLRVJORUx9IF07IHRoZW4gZXhlYyAvc2Jpbi8ke0lOU1RBTExLRVJORUx9ICIkQCI7IGZpCisKKyMgRGVmYXVsdCBpbnN0YWxsIC0gc2FtZSBhcyBtYWtlIHpsaWxvCisKK2lmIFsgLWYgJDQvdm1saW51eiBdOyB0aGVuCisJbXYgJDQvdm1saW51eiAkNC92bWxpbnV6Lm9sZAorZmkKKworaWYgWyAtZiAkNC9TeXN0ZW0ubWFwIF07IHRoZW4KKwltdiAkNC9TeXN0ZW0ubWFwICQ0L1N5c3RlbS5vbGQKK2ZpCisKK2NhdCAkMiA+ICQ0L3ZtbGludXoKK2NwICQzICQ0L1N5c3RlbS5tYXAKKworc3luYwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9ib290L2xpbmtlZF9kdGIuUyBiL2FyY2gvbmlvczIvYm9vdC9saW5rZWRfZHRiLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxZjkyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvYm9vdC9saW5rZWRfZHRiLlMKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKy5zZWN0aW9uIC5kdGIuaW5pdC5yb2RhdGEsImEiCisuaW5jYmluICJhcmNoL25pb3MyL2Jvb3Qvc3lzdGVtLmR0YiIKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvY29uZmlncy8zYzEyMF9kZWZjb25maWcgYi9hcmNoL25pb3MyL2NvbmZpZ3MvM2MxMjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTQxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2NvbmZpZ3MvM2MxMjBfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzcgQEAKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19OT19IWl9JRExFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfU0lHTkFMRkQgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJGRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVkVOVEZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NMQUI9eQorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX05JT1MyX01FTV9CQVNFPTB4MTAwMDAwMDAKK0NPTkZJR19OSU9TMl9IV19NVUxfU1VQUE9SVD15CitDT05GSUdfTklPUzJfSFdfRElWX1NVUFBPUlQ9eQorQ09ORklHX0NVU1RPTV9DQUNIRV9TRVRUSU5HUz15CitDT05GSUdfTklPUzJfRENBQ0hFX1NJWkU9MHg4MDAwCitDT05GSUdfTklPUzJfSUNBQ0hFX1NJWkU9MHg4MDAwCisjIENPTkZJR19OSU9TMl9DTURMSU5FX0lHTk9SRV9EVEIgaXMgbm90IHNldAorQ09ORklHX05JT1MyX1BBU1NfQ01ETElORT15CitDT05GSUdfTkVUPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX0RFVlRNUEZTPXkKK0NPTkZJR19ERVZUTVBGU19NT1VOVD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorQ09ORklHX01URD15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9QSFlTTUFQX09GPXkKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0FMVEVSQV9UU0U9eQorQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVD15CitDT05GSUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQUxURVJBX1VBUlQ9eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX1NVTlJQQ19ERUJVRz15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxNjBiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vS2J1aWxkCkBAIC0wLDAgKzEsNjYgQEAKK2dlbmVyaWMteSArPSBhdG9taWMuaAorZ2VuZXJpYy15ICs9IGF1eHZlYy5oCitnZW5lcmljLXkgKz0gYmFycmllci5oCitnZW5lcmljLXkgKz0gYml0b3BzLmgKK2dlbmVyaWMteSArPSBiaXRzcGVybG9uZy5oCitnZW5lcmljLXkgKz0gYnVnLmgKK2dlbmVyaWMteSArPSBidWdzLmgKK2dlbmVyaWMteSArPSBjbGtkZXYuaAorZ2VuZXJpYy15ICs9IGNwdXRpbWUuaAorZ2VuZXJpYy15ICs9IGN1cnJlbnQuaAorZ2VuZXJpYy15ICs9IGRldmljZS5oCitnZW5lcmljLXkgKz0gZGl2NjQuaAorZ2VuZXJpYy15ICs9IGRtYS5oCitnZW5lcmljLXkgKz0gZW1lcmdlbmN5LXJlc3RhcnQuaAorZ2VuZXJpYy15ICs9IGVycm5vLmgKK2dlbmVyaWMteSArPSBleGVjLmgKK2dlbmVyaWMteSArPSBmYi5oCitnZW5lcmljLXkgKz0gZmNudGwuaAorZ2VuZXJpYy15ICs9IGZ0cmFjZS5oCitnZW5lcmljLXkgKz0gZnV0ZXguaAorZ2VuZXJpYy15ICs9IGhhcmRpcnEuaAorZ2VuZXJpYy15ICs9IGhhc2guaAorZ2VuZXJpYy15ICs9IGh3X2lycS5oCitnZW5lcmljLXkgKz0gaW9jdGwuaAorZ2VuZXJpYy15ICs9IGlvY3Rscy5oCitnZW5lcmljLXkgKz0gaXBjYnVmLmgKK2dlbmVyaWMteSArPSBpcnFfcmVncy5oCitnZW5lcmljLXkgKz0gaXJxX3dvcmsuaAorZ2VuZXJpYy15ICs9IGtkZWJ1Zy5oCitnZW5lcmljLXkgKz0ga21hcF90eXBlcy5oCitnZW5lcmljLXkgKz0ga3ZtX3BhcmEuaAorZ2VuZXJpYy15ICs9IGxvY2FsLmgKK2dlbmVyaWMteSArPSBtY3Nfc3BpbmxvY2suaAorZ2VuZXJpYy15ICs9IG1tYW4uaAorZ2VuZXJpYy15ICs9IG1vZHVsZS5oCitnZW5lcmljLXkgKz0gbXNnYnVmLmgKK2dlbmVyaWMteSArPSBwYXJhbS5oCitnZW5lcmljLXkgKz0gcGNpLmgKK2dlbmVyaWMteSArPSBwZXJjcHUuaAorZ2VuZXJpYy15ICs9IHBvbGwuaAorZ2VuZXJpYy15ICs9IHBvc2l4X3R5cGVzLmgKK2dlbmVyaWMteSArPSBwcmVlbXB0LmgKK2dlbmVyaWMteSArPSByZXNvdXJjZS5oCitnZW5lcmljLXkgKz0gc2NhdHRlcmxpc3QuaAorZ2VuZXJpYy15ICs9IHNlY3Rpb25zLmgKK2dlbmVyaWMteSArPSBzZWdtZW50LmgKK2dlbmVyaWMteSArPSBzZW1idWYuaAorZ2VuZXJpYy15ICs9IHNlcmlhbC5oCitnZW5lcmljLXkgKz0gc2htYnVmLmgKK2dlbmVyaWMteSArPSBzaG1wYXJhbS5oCitnZW5lcmljLXkgKz0gc2lnaW5mby5oCitnZW5lcmljLXkgKz0gc2lnbmFsLmgKK2dlbmVyaWMteSArPSBzb2NrZXQuaAorZ2VuZXJpYy15ICs9IHNvY2tpb3MuaAorZ2VuZXJpYy15ICs9IHNwaW5sb2NrLmgKK2dlbmVyaWMteSArPSBzdGF0LmgKK2dlbmVyaWMteSArPSBzdGF0ZnMuaAorZ2VuZXJpYy15ICs9IHRlcm1iaXRzLmgKK2dlbmVyaWMteSArPSB0ZXJtaW9zLmgKK2dlbmVyaWMteSArPSB0b3BvbG9neS5oCitnZW5lcmljLXkgKz0gdHJhY2VfY2xvY2suaAorZ2VuZXJpYy15ICs9IHR5cGVzLmgKK2dlbmVyaWMteSArPSB1bmFsaWduZWQuaAorZ2VuZXJpYy15ICs9IHVzZXIuaAorZ2VuZXJpYy15ICs9IHZnYS5oCitnZW5lcmljLXkgKz0geG9yLmgKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vYXNtLW1hY3Jvcy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9hc20tbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmYTJlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vYXNtLW1hY3Jvcy5oCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogTWFjcm8gdXNlZCB0byBzaW1wbGlmeSBjb2RpbmcgbXVsdGktbGluZSBhc3NlbWJsZXIuCisgKiBTb21lIG9mIHRoZSBiaXQgdGVzdCBtYWNybyBjYW4gc2ltcGxpZnkgZG93biB0byBvbmUgbGluZQorICogZGVwZW5kaW5nIG9uIHRoZSBtYXNrIHZhbHVlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKi8KKyNpZm5kZWYgX0FTTV9OSU9TMl9BU01NQUNST1NfSAorI2RlZmluZSBfQVNNX05JT1MyX0FTTU1BQ1JPU19ICisvKgorICogQU5EcyByZWcyIHdpdGggbWFzayBhbmQgcGxhY2VzIHRoZSByZXN1bHQgaW4gcmVnMS4KKyAqCisgKiBZb3UgY2Fubm5vdCB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBBTkRJMzIJcmVnMSwgcmVnMiwgbWFzaworLmlmIFxtYXNrICYgMHhmZmZmCisJLmlmIFxtYXNrICYgMHhmZmZmMDAwMAorCQltb3ZoaQlccmVnMSwgJWhpKFxtYXNrKQorCQltb3Z1aQlccmVnMSwgJWxvKFxtYXNrKQorCQlhbmQJXHJlZzEsIFxyZWcxLCBccmVnMgorCS5lbHNlCisJCWFuZGkJXHJlZzEsIFxyZWcyLCAlbG8oXG1hc2spCisJLmVuZGlmCisuZWxzZQorCWFuZGhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorLmVuZGlmCisuZW5kbQorCisvKgorICogT1JzIHJlZzIgd2l0aCBtYXNrIGFuZCBwbGFjZXMgdGhlIHJlc3VsdCBpbiByZWcxLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gT1JJMzIJcmVnMSwgcmVnMiwgbWFzaworLmlmIFxtYXNrICYgMHhmZmZmCisJLmlmIFxtYXNrICYgMHhmZmZmMDAwMAorCQlvcmhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorCQlvcmkJXHJlZzEsIFxyZWcyLCAlbG8oXG1hc2spCisJLmVsc2UKKwkJb3JpCVxyZWcxLCBccmVnMiwgJWxvKFxtYXNrKQorCS5lbmRpZgorLmVsc2UKKwlvcmhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorLmVuZGlmCisuZW5kbQorCisvKgorICogWE9ScyByZWcyIHdpdGggbWFzayBhbmQgcGxhY2VzIHRoZSByZXN1bHQgaW4gcmVnMS4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIFhPUkkzMglyZWcxLCByZWcyLCBtYXNrCisuaWYgXG1hc2sgJiAweGZmZmYKKwkuaWYgXG1hc2sgJiAweGZmZmYwMDAwCisJCXhvcmhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorCQl4b3JpCVxyZWcxLCBccmVnMSwgJWxvKFxtYXNrKQorCS5lbHNlCisJCXhvcmkJXHJlZzEsIFxyZWcyLCAlbG8oXG1hc2spCisJLmVuZGlmCisuZWxzZQorCXhvcmhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorLmVuZGlmCisuZW5kbQorCisvKgorICogVGhpcyBpcyBhIHN1cHBvcnQgbWFjcm8gZm9yIEJUQlogJiBCVEJOWi4gIEl0IGNoZWNrcworICogdGhlIGJpdCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQgMzIgdmFsdWUuCisgKgorICogSXQgaXMgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVAlyZWcxLCByZWcyLCBiaXQKKy5pZiBcYml0ID4gMzEKKwkuZXJyCisuZWxzZQorCS5pZiBcYml0IDwgMTYKKwkJYW5kaQlccmVnMSwgXHJlZzIsICgxIDw8IFxiaXQpCisJLmVsc2UKKwkJYW5kaGkJXHJlZzEsIFxyZWcyLCAoMSA8PCAoXGJpdCAtIDE2KSkKKwkuZW5kaWYKKy5lbmRpZgorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXQgaW4gcmVnMiBhbmQgYnJhbmNoZXMgdG8gbGFiZWwgaWYgdGhlCisgKiBiaXQgaXMgemVyby4gIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRCWglyZWcxLCByZWcyLCBiaXQsIGxhYmVsCisJQlQJXHJlZzEsIFxyZWcyLCBcYml0CisJYmVxCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCBicmFuY2hlcyB0byBsYWJlbCBpZiB0aGUKKyAqIGJpdCBpcyBub24temVyby4gIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRCTloJcmVnMSwgcmVnMiwgYml0LCBsYWJlbAorCUJUCVxyZWcxLCBccmVnMiwgXGJpdAorCWJuZQlccmVnMSwgcjAsIFxsYWJlbAorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXQgaW4gcmVnMiBhbmQgdGhlbiBjb21wbGltZW50cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVEMJcmVnMSwgcmVnMiwgYml0CisuaWYgXGJpdCA+IDMxCisJLmVycgorLmVsc2UKKwkuaWYgXGJpdCA8IDE2CisJCWFuZGkJXHJlZzEsIFxyZWcyLCAoMSA8PCBcYml0KQorCQl4b3JpCVxyZWcyLCBccmVnMiwgKDEgPDwgXGJpdCkKKwkuZWxzZQorCQlhbmRoaQlccmVnMSwgXHJlZzIsICgxIDw8IChcYml0IC0gMTYpKQorCQl4b3JoaQlccmVnMiwgXHJlZzIsICgxIDw8IChcYml0IC0gMTYpKQorCS5lbmRpZgorLmVuZGlmCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIHNldHMgdGhlIGJpdCBpbiByZWcyLgorICogVGhlIHJlc3VsdCBvZiB0aGUgYml0IHRlc3QgaXMgc3RvcmVkIGluIHJlZzEuCisgKgorICogSXQgaXMgTk9UIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRTCXJlZzEsIHJlZzIsIGJpdAorLmlmIFxiaXQgPiAzMQorCS5lcnIKKy5lbHNlCisJLmlmIFxiaXQgPCAxNgorCQlhbmRpCVxyZWcxLCBccmVnMiwgKDEgPDwgXGJpdCkKKwkJb3JpCVxyZWcyLCBccmVnMiwgKDEgPDwgXGJpdCkKKwkuZWxzZQorCQlhbmRoaQlccmVnMSwgXHJlZzIsICgxIDw8IChcYml0IC0gMTYpKQorCQlvcmhpCVxyZWcyLCBccmVnMiwgKDEgPDwgKFxiaXQgLSAxNikpCisJLmVuZGlmCisuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gcmVzZXRzIHRoZSBiaXQgaW4gcmVnMi4KKyAqIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUUglyZWcxLCByZWcyLCBiaXQKKy5pZiBcYml0ID4gMzEKKwkuZXJyCisuZWxzZQorCS5pZiBcYml0IDwgMTYKKwkJYW5kaQlccmVnMSwgXHJlZzIsICgxIDw8IFxiaXQpCisJCWFuZGkJXHJlZzIsIFxyZWcyLCAlbG8ofigxIDw8IFxiaXQpKQorCS5lbHNlCisJCWFuZGhpCVxyZWcxLCBccmVnMiwgKDEgPDwgKFxiaXQgLSAxNikpCisJCWFuZGhpCVxyZWcyLCBccmVnMiwgJWxvKH4oMSA8PCAoXGJpdCAtIDE2KSkpCisJLmVuZGlmCisuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gY29tcGxpbWVudHMgdGhlIGJpdCBpbiByZWcyLgorICogVGhlIHJlc3VsdCBvZiB0aGUgYml0IHRlc3QgaXMgc3RvcmVkIGluIHJlZzEuICBJZiB0aGUKKyAqIG9yaWdpbmFsIGJpdCB3YXMgemVybyBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVENCWglyZWcxLCByZWcyLCBiaXQsIGxhYmVsCisJQlRDCVxyZWcxLCBccmVnMiwgXGJpdAorCWJlcQlccmVnMSwgcjAsIFxsYWJlbAorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXQgaW4gcmVnMiBhbmQgdGhlbiBjb21wbGltZW50cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyBub24temVybyBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVENCTloJcmVnMSwgcmVnMiwgYml0LCBsYWJlbAorCUJUQwlccmVnMSwgXHJlZzIsIFxiaXQKKwlibmUJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gc2V0cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyB6ZXJvIGl0IGJyYW5jaGVzIHRvIGxhYmVsLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUU0JaCXJlZzEsIHJlZzIsIGJpdCwgbGFiZWwKKwlCVFMJXHJlZzEsIFxyZWcyLCBcYml0CisJYmVxCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIHNldHMgdGhlIGJpdCBpbiByZWcyLgorICogVGhlIHJlc3VsdCBvZiB0aGUgYml0IHRlc3QgaXMgc3RvcmVkIGluIHJlZzEuICBJZiB0aGUKKyAqIG9yaWdpbmFsIGJpdCB3YXMgbm9uLXplcm8gaXQgYnJhbmNoZXMgdG8gbGFiZWwuCisgKgorICogSXQgaXMgTk9UIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRTQk5aCXJlZzEsIHJlZzIsIGJpdCwgbGFiZWwKKwlCVFMJXHJlZzEsIFxyZWcyLCBcYml0CisJYm5lCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIHJlc2V0cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyB6ZXJvIGl0IGJyYW5jaGVzIHRvIGxhYmVsLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUUkJaCXJlZzEsIHJlZzIsIGJpdCwgbGFiZWwKKwlCVFIJXHJlZzEsIFxyZWcyLCBcYml0CisJYm5lCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIHJlc2V0cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyBub24temVybyBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVFJCTloJcmVnMSwgcmVnMiwgYml0LCBsYWJlbAorCUJUUglccmVnMSwgXHJlZzIsIFxiaXQKKwlibmUJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0cyBpbiBtYXNrIGFnYWluc3QgcmVnMiBzdG9yZXMgdGhlIHJlc3VsdCBpbiByZWcxLgorICogSWYgdGhlIGFsbCB0aGUgYml0cyBpbiB0aGUgbWFzayBhcmUgemVybyBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIFRTVEJaCXJlZzEsIHJlZzIsIG1hc2ssIGxhYmVsCisJQU5ESTMyCVxyZWcxLCBccmVnMiwgXG1hc2sKKwliZXEJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0cyBpbiBtYXNrIGFnYWluc3QgcmVnMiBzdG9yZXMgdGhlIHJlc3VsdCBpbiByZWcxLgorICogSWYgdGhlIGFueSBvZiB0aGUgYml0cyBpbiB0aGUgbWFzayBhcmUgMSBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIFRTVEJOWglyZWcxLCByZWcyLCBtYXNrLCBsYWJlbAorCUFOREkzMglccmVnMSwgXHJlZzIsIFxtYXNrCisJYm5lCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogUHVzaGVzIHJlZyBvbnRvIHRoZSBzdGFjay4KKyAqLworCisubWFjcm8gUFVTSAlyZWcKKwlhZGRpCXNwLCBzcCwgLTQKKwlzdHcJXHJlZywgMChzcCkKKy5lbmRtCisKKy8qCisgKiBQb3BzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGludG8gcmVnLgorICovCisKKy5tYWNybyBQT1AJcmVnCisJbGR3CVxyZWcsIDAoc3ApCisJYWRkaQlzcCwgc3AsIDQKKy5lbmRtCisKKworI2VuZGlmIC8qIF9BU01fTklPUzJfQVNNTUFDUk9TX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjlmNWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogIENvcHlyaWdodCAoQykgMjAwOSBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGdlbmVyYXRlZC9hc20tb2Zmc2V0cy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTNjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfQ0FDSEVfSAorI2RlZmluZSBfQVNNX05JT1MyX0NBQ0hFX0gKKworI2RlZmluZSBOSU9TMl9EQ0FDSEVfU0laRQlDT05GSUdfTklPUzJfRENBQ0hFX1NJWkUKKyNkZWZpbmUgTklPUzJfSUNBQ0hFX1NJWkUJQ09ORklHX05JT1MyX0lDQUNIRV9TSVpFCisjZGVmaW5lIE5JT1MyX0RDQUNIRV9MSU5FX1NJWkUJQ09ORklHX05JT1MyX0RDQUNIRV9MSU5FX1NJWkUKKyNkZWZpbmUgTklPUzJfSUNBQ0hFX0xJTkVfU0hJRlQJNQorI2RlZmluZSBOSU9TMl9JQ0FDSEVfTElORV9TSVpFCSgxIDw8IE5JT1MyX0lDQUNIRV9MSU5FX1NISUZUKQorCisvKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLworI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJTklPUzJfSUNBQ0hFX0xJTkVfU0hJRlQKKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMJCU5JT1MyX0lDQUNIRV9MSU5FX1NJWkUKKworI2RlZmluZSBBUkNIX0RNQV9NSU5BTElHTglMMV9DQUNIRV9CWVRFUworCisjZGVmaW5lIF9fY2FjaGVsaW5lX2FsaWduZWQKKyNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmFiYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9BU01fTklPUzJfQ0FDSEVGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgorCisvKgorICogVGhpcyBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcGFnZSBwb2ludGVkIHRvIGJ5IGEgcHRlIGlzIGNsZWFuCisgKiBhbmQgZG9lcyBub3QgcmVxdWlyZSBjbGVhbmluZyBiZWZvcmUgcmV0dXJuaW5nIGl0IHRvIHRoZSB1c2VyLgorICovCisjZGVmaW5lIFBHX2RjYWNoZV9jbGVhbiBQR19hcmNoXzEKKworc3RydWN0IG1tX3N0cnVjdDsKKworZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfZHVwX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCXVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyLAorCXVuc2lnbmVkIGxvbmcgcGZuKTsKKyNkZWZpbmUgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFIDEKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKworZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZmx1c2hfZGNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfZGNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCisKK2V4dGVybiB2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQl1bnNpZ25lZCBsb25nIHVzZXJfdmFkZHIsCisJCQkJdm9pZCAqZHN0LCB2b2lkICpzcmMsIGludCBsZW4pOworZXh0ZXJuIHZvaWQgY29weV9mcm9tX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJdW5zaWduZWQgbG9uZyB1c2VyX3ZhZGRyLAorCQkJCXZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgbGVuKTsKKworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzFmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TX0NIRUNLU1VNX0gKKyNkZWZpbmUgX0FTTV9OSU9TX0NIRUNLU1VNX0gKKworLyogVGFrZSB0aGVzZSBmcm9tIGxpYi9jaGVja3N1bS5jICovCitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHkoY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sCisJCQkJX193c3VtIHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkJCWludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqY3N1bV9lcnIpOworI2RlZmluZSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYywgZHN0LCBsZW4sIHN1bSkJXAorCWNzdW1fcGFydGlhbF9jb3B5KChzcmMpLCAoZHN0KSwgKGxlbiksIChzdW0pKQorCitleHRlcm4gX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKK2V4dGVybiBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKTsKKworLyoKKyAqIEZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCisgKi8KK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImFkZAklMCwgJTEsICUwXG4iCisJCSJjbXBsdHUJcjgsICUwLCAlMVxuIgorCQkic3JsaQklMCwgJTAsIDE2XG4iCisJCSJhZGQJJTAsICUwLCByOFxuIgorCQkibm9yCSUwLCAlMCwgJTBcbiIKKwkJOiAiPXIiIChzdW0pCisJCTogInIiIChzdW0gPDwgMTYpLCAiMCIgKHN1bSkKKwkJOiAicjgiKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikgc3VtOworfQorCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKKyAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCisgKi8KKyNkZWZpbmUgY3N1bV90Y3B1ZHBfbm9mb2xkIGNzdW1fdGNwdWRwX25vZm9sZAorc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQlfX3dzdW0gc3VtKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiYWRkCSUwLCAlMSwgJTBcbiIKKwkJImNtcGx0dQlyOCwgJTAsICUxXG4iCisJCSJhZGQJJTAsICUwLCByOFxuIgkvKiBhZGQgY2FycnkgKi8KKwkJImFkZAklMCwgJTIsICUwXG4iCisJCSJjbXBsdHUJcjgsICUwLCAlMlxuIgorCQkiYWRkCSUwLCAlMCwgcjhcbiIJLyogYWRkIGNhcnJ5ICovCisJCSJhZGQJJTAsICUzLCAlMFxuIgorCQkiY21wbHR1CXI4LCAlMCwgJTNcbiIKKwkJImFkZAklMCwgJTAsIHI4XG4iCS8qIGFkZCBjYXJyeSAqLworCQk6ICI9ciIgKHN1bSksICI9ciIgKHNhZGRyKQorCQk6ICJyIiAoZGFkZHIpLCAiciIgKChudG9ocyhsZW4pIDw8IDE2KSArIChwcm90byAqIDI1NikpLAorCQkgICIwIiAoc3VtKSwKKwkJICAiMSIgKHNhZGRyKQorCQk6ICJyOCIpOworCisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtKSk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX05JT1NfQ0hFQ0tTVU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jbXB4Y2hnLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NtcHhjaGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTkzODcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9DTVBYQ0hHX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9DTVBYQ0hHX0gKKworI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisKKyNkZWZpbmUgeGNoZyhwdHIsIHgpCVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLCAocHRyKSwgc2l6ZW9mKCoocHRyKSkpKQorCitzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIF9feGcoeCkJCSgodm9sYXRpbGUgc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwKKwkJCQkJaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyB0bXAsIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSJsZGIJJTAsICUyXG4iCisJCQkic3RiCSUxLCAlMlxuIgorCQkJOiAiPSZyIiAodG1wKQorCQkJOiAiciIgKHgpLCAibSIgKCpfX3hnKHB0cikpCisJCQk6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSJsZGgJJTAsICUyXG4iCisJCQkic3RoCSUxLCAlMlxuIgorCQkJOiAiPSZyIiAodG1wKQorCQkJOiAiciIgKHgpLCAibSIgKCpfX3hnKHB0cikpCisJCQk6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSJsZHcJJTAsICUyXG4iCisJCQkic3R3CSUxLCAlMlxuIgorCQkJOiAiPSZyIiAodG1wKQorCQkJOiAiciIgKHgpLCAibSIgKCpfX3hnKHB0cikpCisJCQk6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiB0bXA7Cit9CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jbXB4Y2hnLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY21weGNoZy1sb2NhbC5oPgorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9DTVBYQ0hHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vY3B1aW5mby5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jcHVpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4ZmNhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vY3B1aW5mby5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0NQVUlORk9fSAorI2RlZmluZSBfQVNNX05JT1MyX0NQVUlORk9fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGNwdWluZm8geworCS8qIENvcmUgQ1BVIGNvbmZpZ3VyYXRpb24gKi8KKwljaGFyIGNwdV9pbXBsWzEyXTsKKwl1MzIgY3B1X2Nsb2NrX2ZyZXE7CisJdTMyIG1tdTsKKwl1MzIgaGFzX2RpdjsKKwl1MzIgaGFzX211bDsKKwl1MzIgaGFzX211bHg7CisKKwkvKiBDUFUgY2FjaGVzICovCisJdTMyIGljYWNoZV9saW5lX3NpemU7CisJdTMyIGljYWNoZV9zaXplOworCXUzMiBkY2FjaGVfbGluZV9zaXplOworCXUzMiBkY2FjaGVfc2l6ZTsKKworCS8qIFRMQiAqLworCXUzMiB0bGJfcGlkX251bV9iaXRzOwkvKiBudW1iZXIgb2YgYml0cyB1c2VkIGZvciB0aGUgUElEIGluIFRMQk1JU0MgKi8KKwl1MzIgdGxiX251bV93YXlzOworCXUzMiB0bGJfbnVtX3dheXNfbG9nMjsKKwl1MzIgdGxiX251bV9lbnRyaWVzOworCXUzMiB0bGJfbnVtX2xpbmVzOworCXUzMiB0bGJfcHRyX3N6OworCisJLyogQWRkcmVzc2VzICovCisJdTMyIHJlc2V0X2FkZHI7CisJdTMyIGV4Y2VwdGlvbl9hZGRyOworCXUzMiBmYXN0X3RsYl9taXNzX2V4Y19hZGRyOworfTsKKworZXh0ZXJuIHN0cnVjdCBjcHVpbmZvIGNwdWluZm87CisKK2V4dGVybiB2b2lkIHNldHVwX2NwdWluZm8odm9pZCk7CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX0NQVUlORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9kZWxheS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OGU0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2RlbGF5LmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9ERUxBWV9ICisjZGVmaW5lIF9BU01fTklPUzJfREVMQVlfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGVsYXkuaD4KKworLyogVW5kZWZpbmVkIGZ1bmN0aW9ucyB0byBnZXQgY29tcGlsZS10aW1lIGVycm9ycyAqLworZXh0ZXJuIHZvaWQgX19iYWRfdWRlbGF5KHZvaWQpOworZXh0ZXJuIHZvaWQgX19iYWRfbmRlbGF5KHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX0RFTEFZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTU2NzIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9ETUFfTUFQUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3N5bmNfZm9yX2RldmljZSh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCisJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9GUk9NX0RFVklDRToKKwkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdmFkZHIsCisJCQkodW5zaWduZWQgbG9uZykodmFkZHIgKyBzaXplKSk7CisJCWJyZWFrOworCWNhc2UgRE1BX1RPX0RFVklDRToKKwkJLyoKKwkJICogV2UganVzdCBuZWVkIHRvIGZsdXNoIHRoZSBjYWNoZXMgaGVyZSAsIGJ1dCBOaW9zMiBmbHVzaAorCQkgKiBpbnN0cnVjdGlvbiB3aWxsIGRvIGJvdGggd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlLgorCQkgKi8KKwljYXNlIERNQV9CSURJUkVDVElPTkFMOiAvKiBmbHVzaCBhbmQgaW52YWxpZGF0ZSAqLworCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdmFkZHIsCisJCQkodW5zaWduZWQgbG9uZykodmFkZHIgKyBzaXplKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3N5bmNfZm9yX2NwdSh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCisJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9CSURJUkVDVElPTkFMOgorCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl2YWRkciwKKwkJCSh1bnNpZ25lZCBsb25nKSh2YWRkciArIHNpemUpKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorCit2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOworCit2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwKKwkJCQkJc2l6ZV90IHNpemUsCisJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJX19kbWFfc3luY19mb3JfZGV2aWNlKHB0ciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlyZXR1cm4gdmlydF90b19waHlzKHB0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworfQorCitleHRlcm4gaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKKwlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCitzdGF0aWMgaW5saW5lIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQorCQlyZXR1cm4gLUVJTzsKKworCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisqIGRtYV9hbGxvY19ub25jb2hlcmVudCgpIHJldHVybnMgbm9uLWNhY2hlYWJsZSBtZW1vcnksIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0bworKiBkbyBhbnkgZmx1c2hpbmcgaGVyZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cit9CisKKy8qIGRyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jICovCitleHRlcm4gaW50IGRtYV9jb21tb25fbW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQl2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBkbWFfY29tbW9uX2dldF9zZ3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNnX3RhYmxlICpzZ3QsCisJCXZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQlzaXplX3Qgc2l6ZSk7CisKKyNkZWZpbmUgZG1hX21tYXBfY29oZXJlbnQoZCwgdiwgYywgaCwgcykgZG1hX2NvbW1vbl9tbWFwKGQsIHYsIGMsIGgsIHMpCisjZGVmaW5lIGRtYV9nZXRfc2d0YWJsZShkLCB0LCB2LCBoLCBzKSBkbWFfY29tbW9uX2dldF9zZ3RhYmxlKGQsIHQsIHYsIGgsIHMpCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDY1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9FTEZfSAorI2RlZmluZSBfQVNNX05JT1MyX0VMRl9ICisKKyNpbmNsdWRlIDx1YXBpL2FzbS9lbGYuaD4KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNX0FMVEVSQV9OSU9TMikKKworI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCisKKyNkZWZpbmUgQ09SRV9EVU1QX1VTRV9SRUdTRVQKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UJCTB4RDAwMDAwMDBVTAorCisvKiByZWdzIGlzIHN0cnVjdCBwdF9yZWdzLCBwcl9yZWcgaXMgZWxmX2dyZWdzZXRfdCAod2hpY2ggaXMKKyAgIG5vdyBzdHJ1Y3RfdXNlcl9yZWdzLCB0aGV5IGFyZSBkaWZmZXJlbnQpICovCisKKyNkZWZpbmUgQVJDSF9IQVNfU0VUVVBfQURESVRJT05BTF9QQUdFUwkxCitzdHJ1Y3QgbGludXhfYmlucHJtOworZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwlpbnQgdXNlc19pbnRlcnApOworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQkJCQlcCit7IGRvIHsJCQkJCQkJCQlcCisJLyogQmxlZWNoLiAqLwkJCQkJCQlcCisJcHJfcmVnWzBdICA9IHJlZ3MtPnI4OwkJCQkJCVwKKwlwcl9yZWdbMV0gID0gcmVncy0+cjk7CQkJCQkJXAorCXByX3JlZ1syXSAgPSByZWdzLT5yMTA7CQkJCQkJXAorCXByX3JlZ1szXSAgPSByZWdzLT5yMTE7CQkJCQkJXAorCXByX3JlZ1s0XSAgPSByZWdzLT5yMTI7CQkJCQkJXAorCXByX3JlZ1s1XSAgPSByZWdzLT5yMTM7CQkJCQkJXAorCXByX3JlZ1s2XSAgPSByZWdzLT5yMTQ7CQkJCQkJXAorCXByX3JlZ1s3XSAgPSByZWdzLT5yMTU7CQkJCQkJXAorCXByX3JlZ1s4XSAgPSByZWdzLT5yMTsJCQkJCQlcCisJcHJfcmVnWzldICA9IHJlZ3MtPnIyOwkJCQkJCVwKKwlwcl9yZWdbMTBdID0gcmVncy0+cjM7CQkJCQkJXAorCXByX3JlZ1sxMV0gPSByZWdzLT5yNDsJCQkJCQlcCisJcHJfcmVnWzEyXSA9IHJlZ3MtPnI1OwkJCQkJCVwKKwlwcl9yZWdbMTNdID0gcmVncy0+cjY7CQkJCQkJXAorCXByX3JlZ1sxNF0gPSByZWdzLT5yNzsJCQkJCQlcCisJcHJfcmVnWzE1XSA9IHJlZ3MtPm9yaWdfcjI7CQkJCQlcCisJcHJfcmVnWzE2XSA9IHJlZ3MtPnJhOwkJCQkJCVwKKwlwcl9yZWdbMTddID0gcmVncy0+ZnA7CQkJCQkJXAorCXByX3JlZ1sxOF0gPSByZWdzLT5zcDsJCQkJCQlcCisJcHJfcmVnWzE5XSA9IHJlZ3MtPmdwOwkJCQkJCVwKKwlwcl9yZWdbMjBdID0gcmVncy0+ZXN0YXR1czsJCQkJCVwKKwlwcl9yZWdbMjFdID0gcmVncy0+ZWE7CQkJCQkJXAorCXByX3JlZ1syMl0gPSByZWdzLT5vcmlnX3I3OwkJCQkJXAorCXsJCQkJCQkJCVwKKwkJc3RydWN0IHN3aXRjaF9zdGFjayAqc3cgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilyZWdzKSAtIDE7IFwKKwkJcHJfcmVnWzIzXSA9IHN3LT5yMTY7CQkJCQlcCisJCXByX3JlZ1syNF0gPSBzdy0+cjE3OwkJCQkJXAorCQlwcl9yZWdbMjVdID0gc3ctPnIxODsJCQkJCVwKKwkJcHJfcmVnWzI2XSA9IHN3LT5yMTk7CQkJCQlcCisJCXByX3JlZ1syN10gPSBzdy0+cjIwOwkJCQkJXAorCQlwcl9yZWdbMjhdID0gc3ctPnIyMTsJCQkJCVwKKwkJcHJfcmVnWzI5XSA9IHN3LT5yMjI7CQkJCQlcCisJCXByX3JlZ1szMF0gPSBzdy0+cjIzOwkJCQkJXAorCQlwcl9yZWdbMzFdID0gc3ctPmZwOwkJCQkJXAorCQlwcl9yZWdbMzJdID0gc3ctPmdwOwkJCQkJXAorCQlwcl9yZWdbMzNdID0gc3ctPnJhOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApOyB9CisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCisKKyNkZWZpbmUgRUxGX0hXQ0FQCSgwKQorCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKKworI2VuZGlmIC8qIF9BU01fTklPUzJfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZW50cnkuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjM3ZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9lbnRyeS5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0VOVFJZX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9FTlRSWV9ICisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisKKy8qCisgKiBTdGFuZGFyZCBOaW9zMiBpbnRlcnJ1cHQgZW50cnkgYW5kIGV4aXQgbWFjcm9zLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCisubWFjcm8gU0FWRV9BTEwKKwlyZGN0bAlyMjQsIGVzdGF0dXMKKwlhbmRpCXIyNCwgcjI0LCBFU1RBVFVTX0VVCisJYmVxCXIyNCwgcjAsIDFmIC8qIEluIHN1cGVydmlzb3IgbW9kZSwgYWxyZWFkeSBvbiBrZXJuZWwgc3RhY2sgKi8KKworCW1vdmlhCXIyNCwgX2N1cnJlbnRfdGhyZWFkCS8qIFN3aXRjaCB0byBjdXJyZW50IGtlcm5lbCBzdGFjayAqLworCWxkdwlyMjQsIDAocjI0KQkJLyogdXNpbmcgdGhlIHRocmVhZF9pbmZvICovCisJYWRkaQlyMjQsIHIyNCwgVEhSRUFEX1NJWkUtUFRfUkVHU19TSVpFCisJc3R3CXNwLCBQVF9TUChyMjQpCQkvKiBTYXZlIHVzZXIgc3RhY2sgYmVmb3JlIGNoYW5naW5nICovCisJbW92CXNwLCByMjQKKwlicgkyZgorCisxIDoJbW92CXIyNCwgc3AKKwlhZGRpCXNwLCBzcCwgLVBUX1JFR1NfU0laRQkvKiBCYWNrdXAgdGhlIGtlcm5lbCBzdGFjayBwb2ludGVyICovCisJc3R3CXIyNCwgUFRfU1Aoc3ApCisyIDoJc3R3CXIxLCBQVF9SMShzcCkKKwlzdHcJcjIsIFBUX1IyKHNwKQorCXN0dwlyMywgUFRfUjMoc3ApCisJc3R3CXI0LCBQVF9SNChzcCkKKwlzdHcJcjUsIFBUX1I1KHNwKQorCXN0dwlyNiwgUFRfUjYoc3ApCisJc3R3CXI3LCBQVF9SNyhzcCkKKwlzdHcJcjgsIFBUX1I4KHNwKQorCXN0dwlyOSwgUFRfUjkoc3ApCisJc3R3CXIxMCwgUFRfUjEwKHNwKQorCXN0dwlyMTEsIFBUX1IxMShzcCkKKwlzdHcJcjEyLCBQVF9SMTIoc3ApCisJc3R3CXIxMywgUFRfUjEzKHNwKQorCXN0dwlyMTQsIFBUX1IxNChzcCkKKwlzdHcJcjE1LCBQVF9SMTUoc3ApCisJc3R3CXIyLCBQVF9PUklHX1IyKHNwKQorCXN0dwlyNywgUFRfT1JJR19SNyhzcCkKKworCXN0dwlyYSwgUFRfUkEoc3ApCisJc3R3CWZwLCBQVF9GUChzcCkKKwlzdHcJZ3AsIFBUX0dQKHNwKQorCXJkY3RsCXIyNCwgZXN0YXR1cworCXN0dwlyMjQsIFBUX0VTVEFUVVMoc3ApCisJc3R3CWVhLCBQVF9FQShzcCkKKy5lbmRtCisKKy5tYWNybyBSRVNUT1JFX0FMTAorCWxkdwlyMSwgUFRfUjEoc3ApCQkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLworCWxkdwlyMiwgUFRfUjIoc3ApCisJbGR3CXIzLCBQVF9SMyhzcCkKKwlsZHcJcjQsIFBUX1I0KHNwKQorCWxkdwlyNSwgUFRfUjUoc3ApCisJbGR3CXI2LCBQVF9SNihzcCkKKwlsZHcJcjcsIFBUX1I3KHNwKQorCWxkdwlyOCwgUFRfUjgoc3ApCisJbGR3CXI5LCBQVF9SOShzcCkKKwlsZHcJcjEwLCBQVF9SMTAoc3ApCisJbGR3CXIxMSwgUFRfUjExKHNwKQorCWxkdwlyMTIsIFBUX1IxMihzcCkKKwlsZHcJcjEzLCBQVF9SMTMoc3ApCisJbGR3CXIxNCwgUFRfUjE0KHNwKQorCWxkdwlyMTUsIFBUX1IxNShzcCkKKwlsZHcJcmEsIFBUX1JBKHNwKQorCWxkdwlmcCwgUFRfRlAoc3ApCisJbGR3CWdwLCBQVF9HUChzcCkKKwlsZHcJcjI0LCBQVF9FU1RBVFVTKHNwKQorCXdyY3RsCWVzdGF0dXMsIHIyNAorCWxkdwllYSwgUFRfRUEoc3ApCisJbGR3CXNwLCBQVF9TUChzcCkJCS8qIFJlc3RvcmUgc3AgbGFzdCAqLworLmVuZG0KKworLm1hY3JvCVNBVkVfU1dJVENIX1NUQUNLCisJYWRkaQlzcCwgc3AsIC1TV0lUQ0hfU1RBQ0tfU0laRQorCXN0dwlyMTYsIFNXX1IxNihzcCkKKwlzdHcJcjE3LCBTV19SMTcoc3ApCisJc3R3CXIxOCwgU1dfUjE4KHNwKQorCXN0dwlyMTksIFNXX1IxOShzcCkKKwlzdHcJcjIwLCBTV19SMjAoc3ApCisJc3R3CXIyMSwgU1dfUjIxKHNwKQorCXN0dwlyMjIsIFNXX1IyMihzcCkKKwlzdHcJcjIzLCBTV19SMjMoc3ApCisJc3R3CWZwLCBTV19GUChzcCkKKwlzdHcJZ3AsIFNXX0dQKHNwKQorCXN0dwlyYSwgU1dfUkEoc3ApCisuZW5kbQorCisubWFjcm8JUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlsZHcJcjE2LCBTV19SMTYoc3ApCisJbGR3CXIxNywgU1dfUjE3KHNwKQorCWxkdwlyMTgsIFNXX1IxOChzcCkKKwlsZHcJcjE5LCBTV19SMTkoc3ApCisJbGR3CXIyMCwgU1dfUjIwKHNwKQorCWxkdwlyMjEsIFNXX1IyMShzcCkKKwlsZHcJcjIyLCBTV19SMjIoc3ApCisJbGR3CXIyMywgU1dfUjIzKHNwKQorCWxkdwlmcCwgU1dfRlAoc3ApCisJbGR3CWdwLCBTV19HUChzcCkKKwlsZHcJcmEsIFNXX1JBKHNwKQorCWFkZGkJc3AsIHNwLCBTV0lUQ0hfU1RBQ0tfU0laRQorLmVuZG0KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9BU01fTklPUzJfRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMDJiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9JT19ICisjZGVmaW5lIF9BU01fTklPUzJfSU9fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1iaXRzLmg+CisKKy8qIFBDSSBpcyBub3Qgc3VwcG9ydGVkIGluIG5pb3MyLCBzZXQgdGhpcyB0byAwLiAqLworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAwCisKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKQlyZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpCXJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikJcmVhZGwoYWRkcikKKworI2RlZmluZSB3cml0ZWJfcmVsYXhlZCh4LCBhZGRyKQl3cml0ZWIoeCwgYWRkcikKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQoeCwgYWRkcikJd3JpdGV3KHgsIGFkZHIpCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHgsIGFkZHIpCXdyaXRlbCh4LCBhZGRyKQorCitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJdW5zaWduZWQgbG9uZyBjYWNoZWZsYWcpOworZXh0ZXJuIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAorCQkJCQkJdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19pb3VubWFwKGFkZHIpOworfQorCisvKiBQYWdlcyB0byBwaHlzaWNhbCBhZGRyZXNzLi4uICovCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQl2aXJ0X3RvX3BoeXMocGFnZV90b192aXJ0KHBhZ2UpKQorI2RlZmluZSBwYWdlX3RvX2J1cyhwYWdlKQlwYWdlX3RvX3ZpcnQocGFnZSkKKworLyogTWFjcm9zIHVzZWQgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBtYXBwaW5ncy4gKi8KKyNkZWZpbmUgcGh5c190b192aXJ0KHZhZGRyKQlcCisJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh2YWRkcikgfCBDT05GSUdfTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFKSkKKy8qIENsZWFyIHRvcCAzIGJpdHMgKi8KKyNkZWZpbmUgdmlydF90b19waHlzKHZhZGRyKQlcCisJKCh1bnNpZ25lZCBsb25nKSgodW5zaWduZWQgbG9uZykodmFkZHIpICYgfjB4RTAwMDAwMDApKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW8uaD4KKworI2VuZGlmIC8qIF9BU01fTklPUzJfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0MGZkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfSVJRX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9JUlFfSAorCisjZGVmaW5lIE5JT1MyX0NQVV9OUl9JUlFTCTMyCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lycWZsYWdzLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhYjkyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworI2lmbmRlZiBfQVNNX0lSUUZMQUdTX0gKKyNkZWZpbmUgX0FTTV9JUlFGTEFHU19ICisKKyNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcmNoX2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKK3sKKwlyZXR1cm4gUkRDVEwoQ1RMX1NUQVRVUyk7Cit9CisKKy8qCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBBTEwgc3RhdHVzIHJlZ2lzdGVyIGZsYWdzLCBub3Qgb25seSB0aGUgaW50ZXJydXB0CisgKiBtYXNrIGZsYWcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2xvY2FsX2lycV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJV1JDVEwoQ1RMX1NUQVRVUywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmbGFncyA9IGFyY2hfbG9jYWxfc2F2ZV9mbGFncygpOworCWFyY2hfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MgJiB+U1RBVFVTX1BJRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2xvY2FsX2lycV9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZmxhZ3MgPSBhcmNoX2xvY2FsX3NhdmVfZmxhZ3MoKTsKKwlhcmNoX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzIHwgU1RBVFVTX1BJRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaXJxc19kaXNhYmxlZF9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAoZmxhZ3MgJiBTVEFUVVNfUElFKSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcmNoX2lycXNfZGlzYWJsZWQodm9pZCkKK3sKKwlyZXR1cm4gYXJjaF9pcnFzX2Rpc2FibGVkX2ZsYWdzKGFyY2hfbG9jYWxfc2F2ZV9mbGFncygpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfbG9jYWxfaXJxX3NhdmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZmxhZ3MgPSBhcmNoX2xvY2FsX3NhdmVfZmxhZ3MoKTsKKwlhcmNoX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzICYgflNUQVRVU19QSUUpOworCXJldHVybiBmbGFnczsKK30KKworI2VuZGlmIC8qIF9BU01fSVJRRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9saW5rYWdlLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGM2ZGVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9saW5rYWdlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0xJTktBR0VfSAorI2RlZmluZSBfQVNNX05JT1MyX0xJTktBR0VfSAorCisvKiBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgYnkgaW5jbHVkZS9saW51eC9saW5rYWdlLmggKi8KKyNkZWZpbmUgX19BTElHTiAuYWxpZ24gNAorI2RlZmluZSBfX0FMSUdOX1NUUiAiLmFsaWduIDQiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDljMGIxMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbW11LmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9NTVVfSAorI2RlZmluZSBfQVNNX05JT1MyX01NVV9ICisKKy8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X3Q7CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0YjRiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqCisgKiBiYXNlZCBvbiBNSVBTIGFzbS9tbXVfY29udGV4dC5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9NTVVfQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgorCitleHRlcm4gdm9pZCBtbXVfY29udGV4dF9pbml0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3BpZF9mcm9tX2NvbnRleHQobW1fY29udGV4dF90ICpjdHgpOworCisvKgorICogRm9yIHRoZSBmYXN0IHRsYiBtaXNzIGhhbmRsZXJzLCB3ZSBrZWVwIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBwZ2QuCisgKiBwcm9jZXNzb3IuCisgKi8KK2V4dGVybiBwZ2RfdCAqcGdkX2N1cnJlbnQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBjb250ZXh0IHJlbGF0ZWQgaW5mbyBmb3IgYSBuZXcgbW1fc3RydWN0IGluc3RhbmNlLgorICoKKyAqIFNldCBhbGwgbmV3IGNvbnRleHRzIHRvIDAsIHRoYXQgd2F5IHRoZSBnZW5lcmF0aW9uIHdpbGwgbmV2ZXIgbWF0Y2gKKyAqIHRoZSBjdXJyZW50bHkgcnVubmluZyBnZW5lcmF0aW9uIHdoZW4gdGhpcyBjb250ZXh0IGlzIHN3aXRjaGVkIGluLgorICovCitzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwltbS0+Y29udGV4dCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEZXN0cm95IGNvbnRleHQgcmVsYXRlZCBpbmZvIGZvciBhbiBtbV9zdHJ1Y3QgdGhhdCBpcyBhYm91dAorICogdG8gYmUgcHV0IHRvIHJlc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKK3ZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRlYWN0aXZhdGVfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKKy8qCisgKiBBZnRlciB3ZSBoYXZlIHNldCBjdXJyZW50LT5tbSB0byBhIG5ldyB2YWx1ZSwgdGhpcyBhY3RpdmF0ZXMKKyAqIHRoZSBjb250ZXh0IGZvciB0aGUgbmV3IG1tIHNvIHdlIHNlZSB0aGUgbmV3IG1hcHBpbmdzLgorICovCit2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpOworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL211dGV4LmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2MTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbXV0ZXguaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMzJkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBNTVUgc3VwcG9ydCBiYXNlZCBvbiBhc20vcGFnZS5oIGZyb20gbWlwcyB3aGljaCBpczoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAxOTk5LCAyMDAwLCAwMyBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1BBR0VfSAorI2RlZmluZSBfQVNNX05JT1MyX1BBR0VfSAorCisjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKworLyoKKyAqIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplCisgKi8KKyNkZWZpbmUgUEFHRV9TSElGVAkxMgorI2RlZmluZSBQQUdFX1NJWkUJKF9BQygxLCBVTCkgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRSAtIDEpKQorCisvKgorICogUEFHRV9PRkZTRVQgLS0gdGhlIGZpcnN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2Ugb2YgbWVtb3J5LgorICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUCVwKKwkoQ09ORklHX05JT1MyX01FTV9CQVNFICsgQ09ORklHX05JT1MyX0tFUk5FTF9SRUdJT05fQkFTRSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFRoaXMgZ2l2ZXMgdGhlIHBoeXNpY2FsIFJBTSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEhZU19PRkZTRVQJCUNPTkZJR19OSU9TMl9NRU1fQkFTRQorCisvKgorICogSXQncyBub3JtYWxseSBkZWZpbmVkIG9ubHkgZm9yIEZMQVRNRU0gY29uZmlnIGJ1dCBpdCdzCisgKiB1c2VkIGluIG91ciBlYXJseSBtZW0gaW5pdCBjb2RlIGZvciBhbGwgbWVtb3J5IG1vZGVscy4KKyAqIFNvIGFsd2F5cyBkZWZpbmUgaXQuCisgKi8KKyNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQlQRk5fVVAoUEhZU19PRkZTRVQpCisKKyNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHBhZ2UpLCAwLCBQQUdFX1NJWkUpCisjZGVmaW5lIGNvcHlfcGFnZSh0bywgZnJvbSkJbWVtY3B5KCh0byksIChmcm9tKSwgUEFHRV9TSVpFKQorCitzdHJ1Y3QgcGFnZTsKKworZXh0ZXJuIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnZ0bywgdm9pZCAqdmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJc3RydWN0IHBhZ2UgKnRvKTsKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OworCisjZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGUpCisjZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2QpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisKKyNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSkKKyNkZWZpbmUgX19wZ2QoeCkJKChwZ2RfdCkgeyAoeCkgfSkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9zaXplOworCitleHRlcm4gc3RydWN0IHBhZ2UgKm1lbV9tYXA7CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyMgZGVmaW5lIF9fcGEoeCkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUEFHRV9PRkZTRVQgKyBQSFlTX09GRlNFVCkKKyMgZGVmaW5lIF9fdmEoeCkJCVwKKwkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgUEFHRV9PRkZTRVQgLSBQSFlTX09GRlNFVCkpCisKKyNkZWZpbmUgcGFnZV90b192aXJ0KHBhZ2UpCVwKKwkoKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKSArIFBBR0VfT0ZGU0VUKQorCisjIGRlZmluZSBwZm5fdG9fa2FkZHIocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCisjIGRlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pID49IEFSQ0hfUEZOX09GRlNFVCAmJglcCisJCQkJCShwZm4pIDwgbWF4X21hcG5yKQorCisjIGRlZmluZSB2aXJ0X3RvX3BhZ2UodmFkZHIpCXBmbl90b19wYWdlKFBGTl9ET1dOKHZpcnRfdG9fcGh5cyh2YWRkcikpKQorIyBkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKHZhZGRyKQlwZm5fdmFsaWQoUEZOX0RPV04odmlydF90b19waHlzKHZhZGRyKSkpCisKKyMgZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjIGRlZmluZSBVTkNBQ19BRERSKGFkZHIpCVwKKwkoKHZvaWQgKikoKHVuc2lnbmVkKShhZGRyKSB8IENPTkZJR19OSU9TMl9JT19SRUdJT05fQkFTRSkpCisjIGRlZmluZSBDQUNfQUREUihhZGRyKQkJXAorCSgodm9pZCAqKSgoKHVuc2lnbmVkKShhZGRyKSAmIH5DT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0UpIHwJXAorCQlDT05GSUdfTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFKSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ2V0b3JkZXIuaD4KKworI2VuZGlmIC8qIF9BU01fTklPUzJfUEFHRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjk4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IC0gMjAwMSwgMjAwMyBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1BHQUxMT0NfSAorI2RlZmluZSBfQVNNX05JT1MyX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJcHRlX3QgKnB0ZSkKK3sKKwlzZXRfcG1kKHBtZCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcHRlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJcGd0YWJsZV90IHB0ZSkKK3sKKwlzZXRfcG1kKHBtZCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHB0ZSkpKTsKK30KKyNkZWZpbmUgcG1kX3BndGFibGUocG1kKSBwbWRfcGFnZShwbWQpCisKKy8qCisgKiBJbml0aWFsaXplIGEgbmV3IHBtZCB0YWJsZSB3aXRoIGludmFsaWQgcG9pbnRlcnMuCisgKi8KK2V4dGVybiB2b2lkIHBtZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSwgdW5zaWduZWQgbG9uZyBwYWdldGFibGUpOworCitleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKK3sKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBnZCwgUEdEX09SREVSKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXB0ZV90ICpwdGU7CisKKwlwdGUgPSAocHRlX3QgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPLAorCQkJCQlQVEVfT1JERVIpOworCisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IHBhZ2UgKnB0ZTsKKworCXB0ZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQsIFBURV9PUkRFUik7CisJaWYgKHB0ZSkgeworCQlpZiAoIXBndGFibGVfcGFnZV9jdG9yKHB0ZSkpIHsKKwkJCV9fZnJlZV9wYWdlKHB0ZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQljbGVhcl9oaWdocGFnZShwdGUpOworCX0KKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdGVfdCAqcHRlKQoreworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHRlLCBQVEVfT1JERVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlICpwdGUpCit7CisJcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsKKwlfX2ZyZWVfcGFnZXMocHRlLCBQVEVfT1JERVIpOworfQorCisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7CQkJCVwKKwkJdGxiX3JlbW92ZV9wYWdlKCh0bGIpLCAocHRlKSk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOWU3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9QR1RBQkxFX0JJVFNfSAorI2RlZmluZSBfQVNNX05JT1MyX1BHVEFCTEVfQklUU19ICisKKy8qCisgKiBUaGVzZSBhcmUgYWN0dWFsIGhhcmR3YXJlIGRlZmluZWQgcHJvdGVjdGlvbiBiaXRzIGluIHRoZSB0bGJhY2MgcmVnaXN0ZXIKKyAqIHdoaWNoIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKiAzMSAzMCAuLi4gMjYgMjUgMjQgMjMgMjIgMjEgMjAgMTkgMTggLi4uICAxICAwCisgKiBpZ25vcmVkLi4uLi4uLi4gIEMgIFIgIFcgIFggIEcgUEZOLi4uLi4uLi4uLi4uCisgKi8KKyNkZWZpbmUgX1BBR0VfR0xPQkFMCSgxPDwyMCkKKyNkZWZpbmUgX1BBR0VfRVhFQwkoMTw8MjEpCisjZGVmaW5lIF9QQUdFX1dSSVRFCSgxPDwyMikKKyNkZWZpbmUgX1BBR0VfUkVBRAkoMTw8MjMpCisjZGVmaW5lIF9QQUdFX0NBQ0hFRAkoMTw8MjQpCS8qIEM6IGRhdGEgYWNjZXNzIGNhY2hlYWJsZSAqLworCisvKgorICogU29mdHdhcmUgZGVmaW5lZCBiaXRzLiBUaGV5IGFyZSBpZ25vcmVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgYWx3YXlzIHJlYWQgYmFjaworICogYXMgemVybywgYnV0IGNhbiBiZSB3cml0dGVuIGFzIG5vbi16ZXJvLgorICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJKDE8PDI1KQkvKiBQVEUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkoMTw8MjYpCS8qIHBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkoMTw8MjcpCS8qIGRpcnR5IHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkoMTw8MjgpCS8qIFBURSB1c2VkIGZvciBmaWxlIG1hcHBpbmcgb3Igc3dhcCAqLworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9QR1RBQkxFX0JJVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JhZmZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICoKKyAqIEJhc2VkIG9uIGFzbS9wZ3RhYmxlLTMyLmggZnJvbSBtaXBzIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAyMDAwLCAyMDAzIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfUEdUQUJMRV9ICisjZGVmaW5lIF9BU01fTklPUzJfUEdUQUJMRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWJpdHMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+CisKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKworI2RlZmluZSBWTUFMTE9DX1NUQVJUCQlDT05GSUdfTklPUzJfS0VSTkVMX01NVV9SRUdJT05fQkFTRQorI2RlZmluZSBWTUFMTE9DX0VORAkJKENPTkZJR19OSU9TMl9LRVJORUxfUkVHSU9OX0JBU0UgLSAxKQorCitzdHJ1Y3QgbW1fc3RydWN0OworCisvKiBIZWxwZXIgbWFjcm8gKi8KKyNkZWZpbmUgTUtQKHgsIHcsIHIpIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9DQUNIRUQgfAkJXAorCQkJCSgoeCkgPyBfUEFHRV9FWEVDIDogMCkgfAkJXAorCQkJCSgocikgPyBfUEFHRV9SRUFEIDogMCkgfAkJXAorCQkJCSgodykgPyBfUEFHRV9XUklURSA6IDApKQorLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWFjcm9zIHRoYXQgZ2VuZXJpYyBrZXJuZWwgY29kZSBuZWVkcworICogKHRvIHBvcHVsYXRlIHByb3RlY3Rpb25fbWFwW10pCisgKi8KKworLyogUmVtb3ZlIFcgYml0IG9uIHByaXZhdGUgcGFnZXMgZm9yIENPVyBzdXBwb3J0ICovCisjZGVmaW5lIF9fUDAwMAlNS1AoMCwgMCwgMCkKKyNkZWZpbmUgX19QMDAxCU1LUCgwLCAwLCAxKQorI2RlZmluZSBfX1AwMTAJTUtQKDAsIDAsIDApCS8qIENPVyAqLworI2RlZmluZSBfX1AwMTEJTUtQKDAsIDAsIDEpCS8qIENPVyAqLworI2RlZmluZSBfX1AxMDAJTUtQKDEsIDAsIDApCisjZGVmaW5lIF9fUDEwMQlNS1AoMSwgMCwgMSkKKyNkZWZpbmUgX19QMTEwCU1LUCgxLCAwLCAwKQkvKiBDT1cgKi8KKyNkZWZpbmUgX19QMTExCU1LUCgxLCAwLCAxKQkvKiBDT1cgKi8KKworLyogU2hhcmVkIHBhZ2VzIGNhbiBoYXZlIGV4YWN0IEhXIG1hcHBpbmcgKi8KKyNkZWZpbmUgX19TMDAwCU1LUCgwLCAwLCAwKQorI2RlZmluZSBfX1MwMDEJTUtQKDAsIDAsIDEpCisjZGVmaW5lIF9fUzAxMAlNS1AoMCwgMSwgMCkKKyNkZWZpbmUgX19TMDExCU1LUCgwLCAxLCAxKQorI2RlZmluZSBfX1MxMDAJTUtQKDEsIDAsIDApCisjZGVmaW5lIF9fUzEwMQlNS1AoMSwgMCwgMSkKKyNkZWZpbmUgX19TMTEwCU1LUCgxLCAxLCAwKQorI2RlZmluZSBfX1MxMTEJTUtQKDEsIDEsIDEpCisKKy8qIFVzZWQgYWxsIG92ZXIgdGhlIGtlcm5lbCAqLworI2RlZmluZSBQQUdFX0tFUk5FTCBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQ0FDSEVEIHwgX1BBR0VfUkVBRCB8IFwKKwkJCSAgICAgX1BBR0VfV1JJVEUgfCBfUEFHRV9FWEVDIHwgX1BBR0VfR0xPQkFMKQorCisjZGVmaW5lIFBBR0VfU0hBUkVEIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9DQUNIRUQgfCBfUEFHRV9SRUFEIHwgXAorCQkJICAgICBfUEFHRV9XUklURSB8IF9QQUdFX0FDQ0VTU0VEKQorCisjZGVmaW5lIFBBR0VfQ09QWSBNS1AoMCwgMCwgMSkKKworI2RlZmluZSBQR0RfT1JERVIJMAorI2RlZmluZSBQVEVfT1JERVIJMAorCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkoKFBBR0VfU0laRSA8PCBQR0RfT1JERVIpIC8gc2l6ZW9mKHBnZF90KSkKKyNkZWZpbmUgUFRSU19QRVJfUFRFCSgoUEFHRV9TSVpFIDw8IFBURV9PUkRFUikgLyBzaXplb2YocHRlX3QpKQorCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECVwKKwkoQ09ORklHX05JT1MyX0tFUk5FTF9NTVVfUkVHSU9OX0JBU0UgLyBQR0RJUl9TSVpFKQorCisjZGVmaW5lIFBHRElSX1NISUZUCTIyCisjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQorCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQorCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKK2V4dGVybiBwdGVfdCBpbnZhbGlkX3B0ZV90YWJsZVtQQUdFX1NJWkUvc2l6ZW9mKHB0ZV90KV07CisKKy8qCisgKiAocG1kcyBhcmUgZm9sZGVkIGludG8gcHVkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKKyAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwdHIsIHBtZF90IHBtZHZhbCkKK3sKKwlwbWRwdHItPnB1ZC5wZ2QucGdkID0gcG1kdmFsLnB1ZC5wZ2QucGdkOworfQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHIpCQkoKChhZGRyKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdEIC0gMSkpCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHIpCSgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcikpCisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQlcCisJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfV1JJVEU7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQlcCisJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQlcCisJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJCVwKKwl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIDA7IH0KKworI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkIHBncHJvdF9ub25jYWNoZWQKKworc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3Rfbm9uY2FjaGVkKHBncHJvdF90IF9wcm90KQoreworCXVuc2lnbmVkIGxvbmcgcHJvdCA9IHBncHJvdF92YWwoX3Byb3QpOworCisJcHJvdCAmPSB+X1BBR0VfQ0FDSEVEOworCisJcmV0dXJuIF9fcGdwcm90KHByb3QpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCit7CisJcmV0dXJuICEocHRlX3ZhbChwdGUpICYgfihfUEFHRV9HTE9CQUx8MHhmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkJXAorCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQ7IH0KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KKyAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KKyAqLworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX1dSSVRFOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRElSVFk7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRFOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKQl7IHJldHVybiBwdGU7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyBtYXNrID0gX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgX1BBR0VfRVhFQzsKKworCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiB+bWFzaykgfCAocGdwcm90X3ZhbChuZXdwcm90KSAmIG1hc2spOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9wcmVzZW50KHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gKHBtZF92YWwocG1kKSAhPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGUpCisJCQkmJiAocG1kX3ZhbChwbWQpICE9IDBVTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfY2xlYXIocG1kX3QgKnBtZHApCit7CisJcG1kX3ZhbCgqcG1kcCkgPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7Cit9CisKKyNkZWZpbmUgcHRlX3BmbihwdGUpCQkocHRlX3ZhbChwdGUpICYgMHhmZmZmZikKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCShfX3B0ZShwZm4gfCBwZ3Byb3RfdmFsKHByb3QpKSkKKyNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJKHBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkpCisKKy8qCisgKiBTdG9yZSBhIGxpbnV4IFBURSBpbnRvIHRoZSBsaW51eCBwYWdlIHRhYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQoreworCSpwdGVwID0gcHRldmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHBhZGRyID0gcGFnZV90b192aXJ0KHB0ZV9wYWdlKHB0ZXZhbCkpOworCisJZmx1c2hfZGNhY2hlX3JhbmdlKHBhZGRyLCBwYWRkciArIFBBR0VfU0laRSk7CisJc2V0X3B0ZShwdGVwLCBwdGV2YWwpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCit7CisJcmV0dXJuIChwbWRfdmFsKHBtZCkgPT0KKwkJKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlKSB8fCAocG1kX3ZhbChwbWQpID09IDBVTCk7Cit9CisKKyNkZWZpbmUgcG1kX2JhZChwbWQpCShwbWRfdmFsKHBtZCkgJiB+UEFHRV9NQVNLKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcHRlX3QgbnVsbDsKKworCXB0ZV92YWwobnVsbCkgPSAoYWRkciA+PiBQQUdFX1NISUZUKSAmIDB4ZjsKKworCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIG51bGwpOworCWZsdXNoX3RsYl9vbmUoYWRkcik7Cit9CisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqLworI2RlZmluZSBta19wdGUocGFnZSwgcHJvdCkJKHBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIHByb3QpKQorCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisjZGVmaW5lIHBtZF9waHlzKHBtZCkJCXZpcnRfdG9fcGh5cygodm9pZCAqKXBtZF92YWwocG1kKSkKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJKHBmbl90b19wYWdlKHBtZF9waHlzKHBtZCkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkJcG1kX3ZhbChwbWQpCisKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyKQkJCVwKKwkoKHB0ZV90ICopIHBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqZGlyKSkgKwlcCisJICgoKGFkZHIpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcikJcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcikKKworLyogR2V0IHRoZSBhZGRyZXNzIHRvIHRoZSBQVEUgZm9yIGEgdmFkZHIgaW4gc3BlY2lmaWMgZGlyZWN0b3J5ICovCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcikJCQlcCisJKChwdGVfdCAqKSBwbWRfcGFnZV92YWRkcigqKGRpcikpICsJCVwKKwkgKCgoYWRkcikgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpKQorCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJfZXJyKCIlczolZDogYmFkIHB0ZSAlMDhseC5cbiIsIFwKKwkJX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByX2VycigiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBcCisJCV9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKKworLyoKKyAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeSAobXVzdCBiZSAhcHRlX25vbmUocHRlKSAmJiAhcHRlX3ByZXNlbnQocHRlKQorICogJiYgIXB0ZV9maWxlKHB0ZSkpOgorICoKKyAqIDMxIDMwIDI5IDI4IDI3IDI2IDI1IDI0IDIzIDIyIDIxIDIwIDE5IDE4IC4uLiAgMSAgMAorICogIDAgIDAgIDAgIDAgdHlwZS4gIDAgIDAgIDAgIDAgIDAgIDAgb2Zmc2V0Li4uLi4uLi4uCisgKgorICogVGhpcyBnaXZlcyB1cyB1cCB0byAyKioyID0gNCBzd2FwIGZpbGVzIGFuZCAyKioyMCAqIDRLID0gNEcgcGVyIHN3YXAgZmlsZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIG9mZnNldCBmaWVsZCBpcyBhbHdheXMgbm9uLXplcm8sIHRodXMgIXB0ZV9ub25lKHB0ZSkgaXMgYWx3YXlzCisgKiB0cnVlLgorICovCisjZGVmaW5lIF9fc3dwX3R5cGUoc3dwKQkJKCgoc3dwKS52YWwgPj4gMjYpICYgMHgzKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoc3dwKQkoKHN3cCkudmFsICYgMHhmZmZmZikKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2ZmKQkoKHN3cF9lbnRyeV90KSB7ICgoKHR5cGUpICYgMHgzKSA8PCAyNikgXAorCQkJCQkJIHwgKChvZmYpICYgMHhmZmZmZikgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHN3cCkJKChwdGVfdCkgeyAoc3dwKS52YWwgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKworLyogRW5jb2RlIGFuZCBkZWNvZGUgYSBub25saW5lYXIgZmlsZSBtYXBwaW5nIGVudHJ5ICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI1CisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgJiAweDFmZmZmZmYpCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCV9fcHRlKCgob2ZmKSAmIDB4MWZmZmZmZikgfCBfUEFHRV9GSUxFKQorCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkJKDEpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IG1tdV9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGUpOworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDM0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgS2VuIEhpbGwgKGtoaWxsQG1pY3JvdHJvbml4LmNvbSkKKyAqICAgICAgICAgICAgICAgICAgICBWaWMgUGhpbGxpcHMgKHZpY0BtaWNyb3Ryb25peC5jb20pCisgKgorICogYmFzZWQgb24gU1BBUkMgYXNtL3Byb2Nlc3Nvcl8zMi5oIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBEYXZpZCBTLiBNaWxsZXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9QUk9DRVNTT1JfSAorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIE5JT1MyX0ZMQUdfS1RIUkVBRAkweDAwMDAwMDAxCS8qIHRhc2sgaXMgYSBrZXJuZWwgdGhyZWFkICovCisKKyNkZWZpbmUgTklPUzJfT1BfTk9QCQkweDE4ODNhCisjZGVmaW5lIE5JT1MyX09QX0JSRUFLCQkweDNkYTAzYQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNUQUNLX1RPUAlUQVNLX1NJWkUKKyNkZWZpbmUgU1RBQ0tfVE9QX01BWAlTVEFDS19UT1AKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyogS3VzZXIgaGVscGVycyBpcyBtYXBwZWQgdG8gdGhpcyB1c2VyIHNwYWNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgS1VTRVJfQkFTRQkJMHgxMDAwCisjZGVmaW5lIEtVU0VSX1NJWkUJCShQQUdFX1NJWkUpCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgX19sYWJlbF9fIF9sOyBfbDogJiZfbDsgfSkKKworIyBkZWZpbmUgVEFTS19TSVpFCQkweDdGRkYwMDAwVUwKKyMgZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkoUEFHRV9BTElHTihUQVNLX1NJWkUgLyAzKSkKKworLyogVGhlIE5pb3MgcHJvY2Vzc29yIHNwZWNpZmljIHRocmVhZCBzdHJ1Y3QuICovCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJc3RydWN0IHB0X3JlZ3MgKmtyZWdzOworCisJLyogQ29udGV4dCBzd2l0Y2ggc2F2ZWQga2VybmVsIHN0YXRlLiAqLworCXVuc2lnbmVkIGxvbmcga3NwOworCXVuc2lnbmVkIGxvbmcga3BzcjsKK307CisKKyNkZWZpbmUgSU5JVF9NTUFQIFwKKwl7ICZpbml0X21tLCAoMCksICgwKSwgX19wZ3Byb3QoMHgwKSwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB9CisKKyMgZGVmaW5lIElOSVRfVEhSRUFEIHsJCQlcCisJLmtyZWdzCT0gTlVMTCwJCQlcCisJLmtzcAk9IDAsCQkJXAorCS5rcHNyCT0gMCwJCQlcCit9CisKK2V4dGVybiB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYywKKwkJCXVuc2lnbmVkIGxvbmcgc3ApOworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKy8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLworc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKQoreworfQorCisvKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLiAqLworc3RhdGljIGlubGluZSB2b2lkIGV4aXRfdGhyZWFkKHZvaWQpCit7Cit9CisKKy8qIFJldHVybiBzYXZlZCBQQyBvZiBhIGJsb2NrZWQgdGhyZWFkLiAqLworI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKQkoKHRzayktPnRocmVhZC5rcmVncy0+ZWEpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisvKiBQcmVwYXJlIHRvIGNvcHkgdGhyZWFkIHN0YXRlIC0gdW5sYXp5IGFsbCBsYXp5IHN0YXR1cyAqLworI2RlZmluZSBwcmVwYXJlX3RvX2NvcHkodHNrKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgdGFza19wdF9yZWdzKHApIFwKKwkoKHN0cnVjdCBwdF9yZWdzICopKFRIUkVBRF9TSVpFICsgdGFza19zdGFja19wYWdlKHApKSAtIDEpCisKKy8qIFVzZWQgYnkgcHJvY2ZzICovCisjZGVmaW5lIEtTVEtfRUlQKHRzaykJKCh0c2spLT50aHJlYWQua3JlZ3MtPmVhKQorI2RlZmluZSBLU1RLX0VTUCh0c2spCSgodHNrKS0+dGhyZWFkLmtyZWdzLT5zcCkKKworI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKKyNkZWZpbmUgY3B1X3JlbGF4X2xvd2xhdGVuY3koKSAgY3B1X3JlbGF4KCkKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYjFjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIGJhc2VkIG9uIG02OGsgYXNtL3Byb2Nlc3Nvci5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1BUUkFDRV9ICisjZGVmaW5lIF9BU01fTklPUzJfUFRSQUNFX0gKKworI2luY2x1ZGUgPHVhcGkvYXNtL3B0cmFjZS5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSB1c2VyX21vZGUocmVncykJKCgocmVncyktPmVzdGF0dXMgJiBFU1RBVFVTX0VVKSkKKworI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCSgocmVncyktPnJhKQorI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpCQlpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCisjZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5zcCkKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKworI2RlZmluZSBjdXJyZW50X3B0X3JlZ3MoKSBcCisJKChzdHJ1Y3QgcHRfcmVncyAqKSgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkgKyBUSFJFQURfU0laRSlcCisJCS0gMSkKKworaW50IGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIodm9pZCk7Cit2b2lkIGRvX3N5c2NhbGxfdHJhY2VfZXhpdCh2b2lkKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX05JT1MyX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3JlZ2lzdGVycy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTViY2UxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9yZWdpc3RlcnMuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9SRUdJU1RFUlNfSAorI2RlZmluZSBfQVNNX05JT1MyX1JFR0lTVEVSU19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKyNlbmRpZgorCisvKiBjb250cm9sIHJlZ2lzdGVyIG51bWJlcnMgKi8KKyNkZWZpbmUgQ1RMX1NUQVRVUwkwCisjZGVmaW5lIENUTF9FU1RBVFVTCTEKKyNkZWZpbmUgQ1RMX0JTVEFUVVMJMgorI2RlZmluZSBDVExfSUVOQUJMRQkzCisjZGVmaW5lIENUTF9JUEVORElORwk0CisjZGVmaW5lIENUTF9DUFVJRAk1CisjZGVmaW5lIENUTF9SU1YxCTYKKyNkZWZpbmUgQ1RMX0VYQ0VQVElPTgk3CisjZGVmaW5lIENUTF9QVEVBRERSCTgKKyNkZWZpbmUgQ1RMX1RMQkFDQwk5CisjZGVmaW5lIENUTF9UTEJNSVNDCTEwCisjZGVmaW5lIENUTF9SU1YyCTExCisjZGVmaW5lIENUTF9CQURBRERSCTEyCisjZGVmaW5lIENUTF9DT05GSUcJMTMKKyNkZWZpbmUgQ1RMX01QVUJBU0UJMTQKKyNkZWZpbmUgQ1RMX01QVUFDQwkxNQorCisvKiBhY2Nlc3MgY29udHJvbCByZWdpc3RlcnMgdXNpbmcgR0NDIGJ1aWx0aW5zICovCisjZGVmaW5lIFJEQ1RMKHIpCV9fYnVpbHRpbl9yZGN0bChyKQorI2RlZmluZSBXUkNUTChyLCB2KQlfX2J1aWx0aW5fd3JjdGwociwgdikKKworLyogc3RhdHVzIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgU1RBVFVTX1BJRQkoMSA8PCAwKQkvKiBwcm9jZXNzb3IgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBTVEFUVVNfVQkoMSA8PCAxKQkvKiB1c2VyIG1vZGUgKi8KKyNkZWZpbmUgU1RBVFVTX0VICSgxIDw8IDIpCS8qIEV4Y2VwdGlvbiBtb2RlICovCisKKy8qIGVzdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBFU1RBVFVTX0VQSUUJKDEgPDwgMCkJLyogcHJvY2Vzc29yIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgRVNUQVRVU19FVQkoMSA8PCAxKQkvKiB1c2VyIG1vZGUgKi8KKyNkZWZpbmUgRVNUQVRVU19FSAkoMSA8PCAyKQkvKiBFeGNlcHRpb24gbW9kZSAqLworCisvKiB0bGJtaXNjIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgVExCTUlTQ19QSURfU0hJRlQJNAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVExCTUlTQ19QSURfTUFTSwkoKDFVTCA8PCBjcHVpbmZvLnRsYl9waWRfbnVtX2JpdHMpIC0gMSkKKyNlbmRpZgorI2RlZmluZSBUTEJNSVNDX1dBWV9NQVNLCTB4ZgorI2RlZmluZSBUTEJNSVNDX1dBWV9TSElGVAkyMAorCisjZGVmaW5lIFRMQk1JU0NfUElECShUTEJNSVNDX1BJRF9NQVNLIDw8IFRMQk1JU0NfUElEX1NISUZUKQkvKiBUTEIgUElEICovCisjZGVmaW5lIFRMQk1JU0NfV0UJKDEgPDwgMTgpCS8qIFRMQiB3cml0ZSBlbmFibGUgKi8KKyNkZWZpbmUgVExCTUlTQ19SRAkoMSA8PCAxOSkJLyogVExCIHJlYWQgKi8KKyNkZWZpbmUgVExCTUlTQ19XQVkJKFRMQk1JU0NfV0FZX01BU0sgPDwgVExCTUlTQ19XQVlfU0hJRlQpIC8qIFRMQiB3YXkgKi8KKworI2VuZGlmIC8qIF9BU01fTklPUzJfUkVHSVNURVJTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JmOGNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1NFVFVQX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9TRVRVUF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZXR1cC5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2lmZGVmIF9fS0VSTkVMX18KKworZXh0ZXJuIGNoYXIgZXhjZXB0aW9uX2hhbmRsZXJfaG9va1tdOworZXh0ZXJuIGNoYXIgZmFzdF9oYW5kbGVyW107CitleHRlcm4gY2hhciBmYXN0X2hhbmRsZXJfZW5kW107CisKK2V4dGVybiB2b2lkIHBhZ2V0YWJsZV9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCBzZXR1cF9lYXJseV9wcmludGsodm9pZCk7CisKKyNlbmRpZi8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fTklPUzJfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zaWduYWwuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjZjExZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc2lnbmFsLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDIwMTMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworI2lmbmRlZiBfTklPUzJfU0lHTkFMX0gKKyNkZWZpbmUgX05JT1MyX1NJR05BTF9ICisKKyNpbmNsdWRlIDx1YXBpL2FzbS9zaWduYWwuaD4KKworI2VuZGlmCS8qIF9OSU9TMl9TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkZDU3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3RyaW5nLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9TVFJJTkdfSAorI2RlZmluZSBfQVNNX05JT1MyX1NUUklOR19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCisKK2V4dGVybiB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBjb3VudCk7CitleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKmQsIGNvbnN0IHZvaWQgKnMsIHNpemVfdCBjb3VudCk7CitleHRlcm4gdm9pZCAqbWVtbW92ZSh2b2lkICpkLCBjb25zdCB2b2lkICpzLCBzaXplX3QgY291bnQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9TVFJJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3YjNmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9BU01fTklPUzJfU1dJVENIX1RPX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9TV0lUQ0hfVE9fSAorCisvKgorICogc3dpdGNoX3RvKG4pIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBwdHIsIGZpcnN0IGNoZWNraW5nIHRoYXQKKyAqIHB0ciBpc24ndCB0aGUgY3VycmVudCB0YXNrLCBpbiB3aGljaCBjYXNlIGl0IGRvZXMgbm90aGluZy4gIFRoaXMKKyAqIGFsc28gY2xlYXJzIHRoZSBUUy1mbGFnIGlmIHRoZSB0YXNrIHdlIHN3aXRjaGVkIHRvIGhhcyB1c2VkIHRoZQorICogbWF0aCBjby1wcm9jZXNzb3IgbGF0ZXN0LgorICovCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KQkJCVwKK3sJCQkJCQkJXAorCXZvaWQgKl9sYXN0OwkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJXAorCQkibW92CXI0LCAlMVxuIgkJCVwKKwkJIm1vdglyNSwgJTJcbiIJCQlcCisJCSJjYWxsCXJlc3VtZVxuIgkJCVwKKwkJIm1vdgklMCxyNFxuIgkJCVwKKwkJOiAiPXIiIChfbGFzdCkJCQkJXAorCQk6ICJyIiAocHJldiksICJyIiAobmV4dCkJCVwKKwkJOiAicjQiLCAicjUiLCAicjciLCAicjgiLCAicmEiKTsJXAorCShsYXN0KSA9IF9sYXN0OwkJCQkJXAorfQorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9TV0lUQ0hfVE9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUyMjA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgQWx0ZXJhIENvcnBvcmF0aW9uIChDKSA8MjAxND4uIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX19BU01fTklPUzJfU1lTQ0FMTF9IX18KKyNkZWZpbmUgX19BU01fTklPUzJfU1lTQ0FMTF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIHJlZ3MtPnIyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9yb2xsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+cjIgPSByZWdzLT5vcmlnX3IyOworCXJlZ3MtPnI3ID0gcmVncy0+b3JpZ19yNzsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X2Vycm9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+cjcgPyByZWdzLT5yMiA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5yMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnJvciwgbG9uZyB2YWwpCit7CisJaWYgKGVycm9yKSB7CisJCS8qIGVycm9yIDwgMCwgYnV0IG5pb3MyIHVzZXMgPiAwIHJldHVybiB2YWx1ZSAqLworCQlyZWdzLT5yMiA9IC1lcnJvcjsKKwkJcmVncy0+cjcgPSAxOworCX0gZWxzZSB7CisJCXJlZ3MtPnIyID0gdmFsOworCQlyZWdzLT5yNyA9IDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9nZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAorCXVuc2lnbmVkIGxvbmcgKmFyZ3MpCit7CisJQlVHX09OKGkgKyBuID4gNik7CisKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yNDsKKwljYXNlIDE6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yNTsKKwljYXNlIDI6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yNjsKKwljYXNlIDM6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yNzsKKwljYXNlIDQ6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yODsKKwljYXNlIDU6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yOTsKKwljYXNlIDY6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAorCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmFyZ3MpCit7CisJQlVHX09OKGkgKyBuID4gNik7CisKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI0ID0gKmFyZ3MrKzsKKwljYXNlIDE6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI1ID0gKmFyZ3MrKzsKKwljYXNlIDI6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI2ID0gKmFyZ3MrKzsKKwljYXNlIDM6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI3ID0gKmFyZ3MrKzsKKwljYXNlIDQ6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI4ID0gKmFyZ3MrKzsKKwljYXNlIDU6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI5ID0gKmFyZ3MrKzsKKwljYXNlIDY6CisJCWlmICghbikKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0NWQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3lzY2FsbHMuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IEFsdGVyYSBDb3Jwb3JhdGlvbiAoQykgMjAxMy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisjaWZuZGVmIF9fQVNNX05JT1MyX1NZU0NBTExTX0gKKyNkZWZpbmUgX19BU01fTklPUzJfU1lTQ0FMTFNfSAorCitpbnQgc3lzX2NhY2hlZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQl1bnNpZ25lZCBpbnQgb3ApOworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3lzY2FsbHMuaD4KKworI2VuZGlmIC8qIF9fQVNNX05JT1MyX1NZU0NBTExTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI2NjU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogTmlvc0lJIGxvdy1sZXZlbCB0aHJlYWQgaW5mb3JtYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogQmFzZWQgb24gYXNtL3RocmVhZF9pbmZvX25vLmggZnJvbSBtNjhrIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9USFJFQURfSU5GT19ICisjZGVmaW5lIF9BU01fTklPUzJfVEhSRUFEX0lORk9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogU2l6ZSBvZiB0aGUga2VybmVsIHN0YWNrIGZvciBlYWNoIHByb2Nlc3MuCisgKi8KKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJMQorI2RlZmluZSBUSFJFQURfU0laRQkJODE5MiAvKiAyICogUEFHRV9TSVpFICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNlZzsKK30gbW1fc2VnbWVudF90OworCisvKgorICogbG93IGxldmVsIHRhc2sgZGF0YSB0aGF0IGVudHJ5LlMgbmVlZHMgaW1tZWRpYXRlIGFjY2VzcyB0bworICogLSB0aGlzIHN0cnVjdCBzaG91bGQgZml0IGVudGlyZWx5IGluc2lkZSBvZiBvbmUgY2FjaGUgbGluZQorICogLSB0aGlzIHN0cnVjdCBzaGFyZXMgdGhlIHN1cGVydmlzb3Igc3RhY2sgcGFnZXMKKyAqIC0gaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBjaGFuZ2VkLCB0aGUgYXNzZW1ibHkgY29uc3RhbnRzCisgKiAgIG11c3QgYWxzbyBiZSBjaGFuZ2VkCisgKi8KK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCV9fdTMyCQkJY3B1OwkJLyogY3VycmVudCBDUFUgKi8KKwlpbnQJCQlwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLDwwID0+IEJVRyAqLworCW1tX3NlZ21lbnRfdAkJYWRkcl9saW1pdDsJLyogdGhyZWFkIGFkZHJlc3Mgc3BhY2U6CisJCQkJCQkgIDAtMHg3RkZGRkZGRiBmb3IgdXNlci10aGVhZAorCQkJCQkJICAwLTB4RkZGRkZGRkYgZm9yIGtlcm5lbC10aHJlYWQKKwkJCQkJCSovCisJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKKwlzdHJ1Y3QgcHRfcmVncwkJKnJlZ3M7Cit9OworCisvKgorICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBwcmVlbXB0X2NvdW50IG5lZWRzIHRvIGJlIDEgaW5pdGlhbGx5LCB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIGZ1bmN0aW9uYWwuCisgKi8KKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzawkJPSAmdHNrLAkJCVwKKwkuZXhlY19kb21haW4JPSAmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5mbGFncwkJPSAwLAkJCVwKKwkuY3B1CQk9IDAsCQkJXAorCS5wcmVlbXB0X2NvdW50CT0gSU5JVF9QUkVFTVBUX0NPVU5ULAlcCisJLmFkZHJfbGltaXQJPSBLRVJORUxfRFMsCQlcCisJLnJlc3RhcnRfYmxvY2sJPSB7CQkJXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgc3AgYXNtKCJzcCIpOworCisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKikoc3AgJiB+KFRIUkVBRF9TSVpFIC0gMSkpOworfQorI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIHRocmVhZCBpbmZvcm1hdGlvbiBmbGFncworICogLSB0aGVzZSBhcmUgcHJvY2VzcyBzdGF0ZSBmbGFncyB0aGF0IHZhcmlvdXMgYXNzZW1ibHkgZmlsZXMgbWF5IG5lZWQgdG8KKyAqICAgYWNjZXNzCisgKiAtIHBlbmRpbmcgd29yay10by1iZS1kb25lIGZsYWdzIGFyZSBpbiBMU1cKKyAqIC0gb3RoZXIgZmxhZ3MgaW4gTVNXCisgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkxCS8qIHJlc3VtcHRpb24gbm90aWZpY2F0aW9uIHJlcXVlc3RlZCAqLworI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLworI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfTUVNRElFCQk0CS8qIGlzIHRlcm1pbmF0aW5nIGR1ZSB0byBPT00ga2lsbGVyICovCisjZGVmaW5lIFRJRl9TRUNDT01QCQk1CS8qIHNlY3VyZSBjb21wdXRpbmcgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJNgkvKiBzeXNjYWxsIGF1ZGl0aW5nIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTkJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLworCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNgkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcKKwkJCQkJICAgVElGX05FRURfUkVTQ0hFRCAqLworCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKKyNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxIDw8IFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxIDw8IFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMSA8PCBUSUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX1NFQ0NPTVAJCSgxIDw8IFRJRl9TRUNDT01QKQorI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVQJKDEgPDwgVElGX1NZU0NBTExfQVVESVQpCisjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDEgPDwgVElGX1BPTExJTkdfTlJGTEFHKQorCisvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCisKKy8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1LXNwYWNlICovCisjIGRlZmluZSBfVElGX0FMTFdPUktfTUFTSwkweDAwMDBGRkZGCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjJhYmIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDIwMTQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfVElNRVhfSAorI2RlZmluZSBfQVNNX05JT1MyX1RJTUVYX0gKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OworCitleHRlcm4gY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2JjNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90bGIuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9UTEJfSAorI2RlZmluZSBfQVNNX05JT1MyX1RMQl9ICisKKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKKworZXh0ZXJuIHZvaWQgc2V0X21tdV9waWQodW5zaWduZWQgbG9uZyBwaWQpOworCisvKgorICogTmlvc0lJIGRvZXNuJ3QgbmVlZCBhbnkgc3BlY2lhbCBwZXItcHRlIG9yIHBlci12bWEgaGFuZGxpbmcsIGV4Y2VwdAorICogd2UgbmVlZCB0byBmbHVzaCBjYWNoZSBmb3IgdGhlIGFyZWEgdG8gYmUgdW5tYXBwZWQuCisgKi8KKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKCF0bGItPmZ1bGxtbSkJCQkJXAorCQkJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7IFwKKwl9ICB3aGlsZSAoMCkKKworI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykJZG8geyB9IHdoaWxlICgwKQorCisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOTY1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfVExCRkxVU0hfSAorI2RlZmluZSBfQVNNX05JT1MyX1RMQkZMVVNIX0gKKworc3RydWN0IG1tX3N0cnVjdDsKKworLyoKKyAqIFRMQiBmbHVzaGluZzoKKyAqCisgKiAgLSBmbHVzaF90bGJfYWxsKCkgZmx1c2hlcyBhbGwgcHJvY2Vzc2VzIFRMQiBlbnRyaWVzCisgKiAgLSBmbHVzaF90bGJfbW0obW0pIGZsdXNoZXMgdGhlIHNwZWNpZmllZCBtbSBjb250ZXh0IFRMQiBlbnRyaWVzCisgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQorICogIC0gZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCisgKiAgLSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBrZXJuZWwgcGFnZXMKKyAqLworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkgICAgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgdmFkZHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWZsdXNoX3RsYl9vbmUoYWRkcik7Cit9CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdHJhcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmE0ODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1RSQVBTX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9UUkFQU19ICisKKyNkZWZpbmUgVFJBUF9JRF9TWVNDQUxMCQkwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit2b2lkIF9leGNlcHRpb24oaW50IHNpZ25vLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcik7CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fTklPUzJfVFJBUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2VkYzBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zIGZvciBOaW9zIElJCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEsIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfVUFDQ0VTU19ICisjZGVmaW5lIF9BU01fTklPUzJfVUFDQ0VTU19ICisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIFZFUklGWV9SRUFECTAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFCTEKKworLyoKKyAqIFRoZSBleGNlcHRpb24gdGFibGUgY29uc2lzdHMgb2YgcGFpcnMgb2YgYWRkcmVzc2VzOiB0aGUgZmlyc3QgaXMgdGhlCisgKiBhZGRyZXNzIG9mIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgYWxsb3dlZCB0byBmYXVsdCwgYW5kIHRoZSBzZWNvbmQgaXMKKyAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBwcm9ncmFtIHNob3VsZCBjb250aW51ZS4gIE5vIHJlZ2lzdGVycyBhcmUKKyAqIG1vZGlmaWVkLCBzbyBpdCBpcyBlbnRpcmVseSB1cCB0byB0aGUgY29udGludWF0aW9uIGNvZGUgdG8gZmlndXJlIG91dAorICogd2hhdCB0byBkby4KKyAqCisgKiBBbGwgdGhlIHJvdXRpbmVzIGJlbG93IHVzZSBiaXRzIG9mIGZpeHVwIGNvZGUgdGhhdCBhcmUgb3V0IG9mIGxpbmUKKyAqIHdpdGggdGhlIG1haW4gaW5zdHJ1Y3Rpb24gcGF0aC4gIFRoaXMgbWVhbnMgd2hlbiBldmVyeXRoaW5nIGlzIHdlbGwsCisgKiB3ZSBkb24ndCBldmVuIGhhdmUgdG8ganVtcCBvdmVyIHRoZW0uICBGdXJ0aGVyLCB0aGV5IGRvIG5vdCBpbnRydWRlCisgKiBvbiBvdXIgY2FjaGUgb3IgdGxiIGVudHJpZXMuCisgKi8KK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgaW5zbjsKKwl1bnNpZ25lZCBsb25nIGZpeHVwOworfTsKKworZXh0ZXJuIGludCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKgorICogU2VnbWVudCBzdHVmZgorICovCisjZGVmaW5lIE1BS0VfTU1fU0VHKHMpCQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKKyNkZWZpbmUgVVNFUl9EUwkJCU1BS0VfTU1fU0VHKDB4ODAwMDAwMDBVTCkKKyNkZWZpbmUgS0VSTkVMX0RTCQlNQUtFX01NX1NFRygwKQorCisjZGVmaW5lIGdldF9kcygpCQkoS0VSTkVMX0RTKQorCisjZGVmaW5lIGdldF9mcygpCQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KQorI2RlZmluZSBzZXRfZnMoc2VnKQkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCA9IChzZWcpKQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSwgYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworI2RlZmluZSBfX2FjY2Vzc19vayhhZGRyLCBsZW4pCQkJXAorCSgoKHNpZ25lZCBsb25nKSgoKGxvbmcpZ2V0X2ZzKCkuc2VnKSAmCVwKKwkJKChsb25nKShhZGRyKSB8ICgoKGxvbmcpKGFkZHIpKSArIChsZW4pKSB8IChsZW4pKSkpID09IDApCisKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIGxlbikJCVwKKwlsaWtlbHkoX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpKGFkZHIpLCAodW5zaWduZWQgbG9uZykobGVuKSkpCisKKyMgZGVmaW5lIF9fRVhfVEFCTEVfU0VDVElPTgkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCisvKgorICogWmVybyBVc2Vyc3BhY2UKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sCisJCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIG4pCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMTogICAgIHN0YiAgICAgemVybywgMCglMSlcbiIKKwkJIiAgICAgICBhZGRpICAgICUwLCAlMCwgLTFcbiIKKwkJIiAgICAgICBhZGRpICAgICUxLCAlMSwgMVxuIgorCQkiICAgICAgIGJuZSAgICAgJTAsIHplcm8sIDFiXG4iCisJCSIyOlxuIgorCQlfX0VYX1RBQkxFX1NFQ1RJT04KKwkJIi53b3JkICAxYiwgMmJcbiIKKwkJIi5wcmV2aW91c1xuIgorCQk6ICI9ciIgKG4pLCAiPXIiICh0bykKKwkJOiAiMCIgKG4pLCAiMSIgKHRvKQorCSk7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjbGVhcl91c2VyKHZvaWQgX191c2VyICp0bywKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpCisJCXJldHVybiBuOworCXJldHVybiBfX2NsZWFyX3VzZXIodG8sIG4pOworfQorCitleHRlcm4gbG9uZyBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwKKwkJCQl1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIGxvbmcgX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworCitzdGF0aWMgaW5saW5lIGxvbmcgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCXVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJvbSwgbikpCisJCXJldHVybiBuOworCXJldHVybiBfX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCisJCQkJdW5zaWduZWQgbG9uZyBuKQoreworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQorCQlyZXR1cm4gbjsKKwlyZXR1cm4gX19jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pOworfQorCitleHRlcm4gbG9uZyBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpfX3RvLCBjb25zdCBjaGFyIF9fdXNlciAqX19mcm9tLAorCQkJCWxvbmcgX19sZW4pOworZXh0ZXJuIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzLCBsb25nIG4pOworCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMJX19jb3B5X2Zyb21fdXNlcgorI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYwkJX19jb3B5X3RvX3VzZXIKKworLyogT3B0aW1pemVkIG1hY3JvcyAqLworI2RlZmluZSBfX2dldF91c2VyX2FzbSh2YWwsIGluc24sIGFkZHIsIGVycikJCQkJXAorewkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIiAgICAgICBtb3ZpICAgICUwLCAlM1xuIgkJCQkJXAorCSIxOiAgICIgaW5zbiAiICUxLCAwKCUyKVxuIgkJCQkJXAorCSIgICAgICAgbW92aSAgICAgJTAsIDBcbiIJCQkJCVwKKwkiMjpcbiIJCQkJCQkJCVwKKwkiICAgICAgIC5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCSIgICAgICAgLndvcmQgMWIsIDJiXG4iCQkJCQkJXAorCSIgICAgICAgLnByZXZpb3VzIgkJCQkJCVwKKwk6ICI9JnIiIChlcnIpLCAiPXIiICh2YWwpCQkJCQlcCisJOiAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpKTsJCQkJCVwKK30KKworI2RlZmluZSBfX2dldF91c2VyX3Vua25vd24odmFsLCBzaXplLCBwdHIsIGVycikgZG8gewkJCVwKKwllcnIgPSAwOwkJCQkJCQlcCisJaWYgKGNvcHlfZnJvbV91c2VyKCYodmFsKSwgcHRyLCBzaXplKSkgewkJCVwKKwkJZXJyID0gLUVGQVVMVDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19nZXRfdXNlcl9jb21tb24odmFsLCBzaXplLCBwdHIsIGVycikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCWNhc2UgMToJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20odmFsLCAibGRidSIsIHB0ciwgZXJyKTsJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh2YWwsICJsZGh1IiwgcHRyLCBlcnIpOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKHZhbCwgImxkdyIsIHB0ciwgZXJyKTsJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX2dldF91c2VyX3Vua25vd24odmFsLCBzaXplLCBwdHIsIGVycik7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX2d1X3B0ciA9IChwdHIpOwkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV92YWw7CQkJCQkJXAorCV9fZ2V0X3VzZXJfY29tbW9uKF9fZ3VfdmFsLCBzaXplb2YoKihwdHIpKSwgX19ndV9wdHIsIF9fZ3VfZXJyKTtcCisJKHgpID0gKF9fdHlwZW9mX18oeCkpX19ndV92YWw7CQkJCQlcCisJX19ndV9lcnI7CQkJCQkJCVwKKwl9KQorCisjZGVmaW5lIGdldF91c2VyKHgsIHB0cikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX2d1X3B0ciA9IChwdHIpOwkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV92YWwgPSAwOwkJCQkJXAorCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICBfX2d1X3B0ciwgc2l6ZW9mKCpfX2d1X3B0cikpKQlcCisJCV9fZ2V0X3VzZXJfY29tbW9uKF9fZ3VfdmFsLCBzaXplb2YoKl9fZ3VfcHRyKSwJCVwKKwkJCV9fZ3VfcHRyLCBfX2d1X2Vycik7CQkJCVwKKwkoeCkgPSAoX190eXBlb2ZfXyh4KSlfX2d1X3ZhbDsJCQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX3B1dF91c2VyX2FzbSh2YWwsIGluc24sIHB0ciwgZXJyKQkJCQlcCit7CQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiICAgICAgIG1vdmkgICAgJTAsICUzXG4iCQkJCQlcCisJIjE6ICAgIiBpbnNuICIgJTEsIDAoJTIpXG4iCQkJCQlcCisJIiAgICAgICBtb3ZpICAgICAlMCwgMFxuIgkJCQkJXAorCSIyOlxuIgkJCQkJCQkJXAorCSIgICAgICAgLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJIiAgICAgICAud29yZCAxYiwgMmJcbiIJCQkJCQlcCisJIiAgICAgICAucHJldmlvdXNcbiIJCQkJCQlcCisJOiAiPSZyIiAoZXJyKQkJCQkJCQlcCisJOiAiciIgKHZhbCksICJyIiAocHRyKSwgImkiICgtRUZBVUxUKSk7CQkJCVwKK30KKworI2RlZmluZSBwdXRfdXNlcih4LCBwdHIpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX3B1X2VyciA9IC1FRkFVTFQ7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wdV9wdHIgPSAocHRyKTsJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcHVfdmFsID0gKF9fdHlwZW9mKCpwdHIpKSh4KTsJCVwKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgX19wdV9wdHIsIHNpemVvZigqX19wdV9wdHIpKSkgewlcCisJCXN3aXRjaCAoc2l6ZW9mKCpfX3B1X3B0cikpIHsJCQkJXAorCQljYXNlIDE6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfYXNtKF9fcHVfdmFsLCAic3RiIiwgX19wdV9wdHIsIF9fcHVfZXJyKTsgXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDI6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfYXNtKF9fcHVfdmFsLCAic3RoIiwgX19wdV9wdHIsIF9fcHVfZXJyKTsgXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDQ6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfYXNtKF9fcHVfdmFsLCAic3R3IiwgX19wdV9wdHIsIF9fcHVfZXJyKTsgXAorCQkJYnJlYWs7CQkJCQkJXAorCQlkZWZhdWx0OgkJCQkJCVwKKwkJCS8qIFhYWDogVGhpcyBsb29rcyB3cm9uZy4uLiAqLwkJCVwKKwkJCV9fcHVfZXJyID0gMDsJCQkJCVwKKwkJCWlmIChjb3B5X3RvX3VzZXIoX19wdV9wdHIsICYoX19wdV92YWwpLAkJXAorCQkJCXNpemVvZigqX19wdV9wdHIpKSkJCQlcCisJCQkJX19wdV9lcnIgPSAtRUZBVUxUOwkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCisJfQkJCQkJCQkJXAorCV9fcHVfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKSBwdXRfdXNlcih4LCBwdHIpCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS91Y29udGV4dC5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODc2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fTklPUzJfVUNPTlRFWFRfSAorCit0eXBlZGVmIGludCBncmVnX3Q7CisjZGVmaW5lIE5HUkVHIDMyCit0eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOworCitzdHJ1Y3QgbWNvbnRleHQgeworCWludCB2ZXJzaW9uOworCWdyZWdzZXRfdCBncmVnczsKK307CisKKyNkZWZpbmUgTUNPTlRFWFRfVkVSU0lPTiAyCisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3QgbWNvbnRleHQJICB1Y19tY29udGV4dDsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vS2J1aWxkIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL0tidWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA3Y2EzZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vS2J1aWxkCkBAIC0wLDAgKzEsNCBAQAoraW5jbHVkZSBpbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQorCitoZWFkZXIteSArPSBlbGYuaAoraGVhZGVyLXkgKz0gdWNvbnRleHQuaApkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL2J5dGVvcmRlci5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYjVkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgIFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAgIE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfQllURU9SREVSX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9CWVRFT1JERVJfSAorCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vZWxmLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViOTFhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9lbGYuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKworI2lmbmRlZiBfVUFQSV9BU01fTklPUzJfRUxGX0gKKyNkZWZpbmUgX1VBUElfQVNNX05JT1MyX0VMRl9ICisKKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKworLyogUmVsb2NhdGlvbiB0eXBlcyAqLworI2RlZmluZSBSX05JT1MyX05PTkUJCTAKKyNkZWZpbmUgUl9OSU9TMl9TMTYJCTEKKyNkZWZpbmUgUl9OSU9TMl9VMTYJCTIKKyNkZWZpbmUgUl9OSU9TMl9QQ1JFTDE2CQkzCisjZGVmaW5lIFJfTklPUzJfQ0FMTDI2CQk0CisjZGVmaW5lIFJfTklPUzJfSU1NNQkJNQorI2RlZmluZSBSX05JT1MyX0NBQ0hFX09QWAk2CisjZGVmaW5lIFJfTklPUzJfSU1NNgkJNworI2RlZmluZSBSX05JT1MyX0lNTTgJCTgKKyNkZWZpbmUgUl9OSU9TMl9ISTE2CQk5CisjZGVmaW5lIFJfTklPUzJfTE8xNgkJMTAKKyNkZWZpbmUgUl9OSU9TMl9ISUFESjE2CQkxMQorI2RlZmluZSBSX05JT1MyX0JGRF9SRUxPQ18zMgkxMgorI2RlZmluZSBSX05JT1MyX0JGRF9SRUxPQ18xNgkxMworI2RlZmluZSBSX05JT1MyX0JGRF9SRUxPQ184CTE0CisjZGVmaW5lIFJfTklPUzJfR1BSRUwJCTE1CisjZGVmaW5lIFJfTklPUzJfR05VX1ZUSU5IRVJJVAkxNgorI2RlZmluZSBSX05JT1MyX0dOVV9WVEVOVFJZCTE3CisjZGVmaW5lIFJfTklPUzJfVUpNUAkJMTgKKyNkZWZpbmUgUl9OSU9TMl9DSk1QCQkxOQorI2RlZmluZSBSX05JT1MyX0NBTExSCQkyMAorI2RlZmluZSBSX05JT1MyX0FMSUdOCQkyMQorLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KKyNkZWZpbmUgUl9OSU9TMl9OVU0JCTIyCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRwlcCisJKChzaXplb2Yoc3RydWN0IHB0X3JlZ3MpICsgc2l6ZW9mKHN0cnVjdCBzd2l0Y2hfc3RhY2spKSAvCVwKKwkJc2l6ZW9mKGVsZl9ncmVnX3QpKQordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9mcHJlZ3NldF90OworCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fQUxURVJBX05JT1MyCisKKyNlbmRpZiAvKiBfVUFQSV9BU01fTklPUzJfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9wdHJhY2UuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNhN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3B0cmFjZS5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogYmFzZWQgb24gbTY4ayBhc20vcHJvY2Vzc29yLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9VQVBJX0FTTV9OSU9TMl9QVFJBQ0VfSAorI2RlZmluZSBfVUFQSV9BU01fTklPUzJfUFRSQUNFX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFJlZ2lzdGVyIG51bWJlcnMgdXNlZCBieSAncHRyYWNlJyBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuCisgKi8KKworLyogR1AgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBUUl9SMAkJMAorI2RlZmluZSBQVFJfUjEJCTEKKyNkZWZpbmUgUFRSX1IyCQkyCisjZGVmaW5lIFBUUl9SMwkJMworI2RlZmluZSBQVFJfUjQJCTQKKyNkZWZpbmUgUFRSX1I1CQk1CisjZGVmaW5lIFBUUl9SNgkJNgorI2RlZmluZSBQVFJfUjcJCTcKKyNkZWZpbmUgUFRSX1I4CQk4CisjZGVmaW5lIFBUUl9SOQkJOQorI2RlZmluZSBQVFJfUjEwCQkxMAorI2RlZmluZSBQVFJfUjExCQkxMQorI2RlZmluZSBQVFJfUjEyCQkxMgorI2RlZmluZSBQVFJfUjEzCQkxMworI2RlZmluZSBQVFJfUjE0CQkxNAorI2RlZmluZSBQVFJfUjE1CQkxNQorI2RlZmluZSBQVFJfUjE2CQkxNgorI2RlZmluZSBQVFJfUjE3CQkxNworI2RlZmluZSBQVFJfUjE4CQkxOAorI2RlZmluZSBQVFJfUjE5CQkxOQorI2RlZmluZSBQVFJfUjIwCQkyMAorI2RlZmluZSBQVFJfUjIxCQkyMQorI2RlZmluZSBQVFJfUjIyCQkyMgorI2RlZmluZSBQVFJfUjIzCQkyMworI2RlZmluZSBQVFJfUjI0CQkyNAorI2RlZmluZSBQVFJfUjI1CQkyNQorI2RlZmluZSBQVFJfR1AJCTI2CisjZGVmaW5lIFBUUl9TUAkJMjcKKyNkZWZpbmUgUFRSX0ZQCQkyOAorI2RlZmluZSBQVFJfRUEJCTI5CisjZGVmaW5lIFBUUl9CQQkJMzAKKyNkZWZpbmUgUFRSX1JBCQkzMQorLyogQ29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFRSX1BDCQkzMgorI2RlZmluZSBQVFJfU1RBVFVTCTMzCisjZGVmaW5lIFBUUl9FU1RBVFVTCTM0CisjZGVmaW5lIFBUUl9CU1RBVFVTCTM1CisjZGVmaW5lIFBUUl9JRU5BQkxFCTM2CisjZGVmaW5lIFBUUl9JUEVORElORwkzNworI2RlZmluZSBQVFJfQ1BVSUQJMzgKKyNkZWZpbmUgUFRSX0NUTDYJMzkKKyNkZWZpbmUgUFRSX0NUTDcJNDAKKyNkZWZpbmUgUFRSX1BURUFERFIJNDEKKyNkZWZpbmUgUFRSX1RMQkFDQwk0MgorI2RlZmluZSBQVFJfVExCTUlTQwk0MworCisjZGVmaW5lIE5VTV9QVFJBQ0VfUkVHIChQVFJfVExCTUlTQyArIDEpCisKKy8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCisgICBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4KKworICAgVGhlcmUgaXMgYSBmYWtlX3JlZ3MgaW4gc2V0dXAuYyB0aGF0IGhhcyB0byBtYXRjaCBwdF9yZWdzLiovCisKK3N0cnVjdCBwdF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nICByODsJCS8qIHI4LXIxNSBDYWxsZXItc2F2ZWQgR1AgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyAgcjk7CisJdW5zaWduZWQgbG9uZyAgcjEwOworCXVuc2lnbmVkIGxvbmcgIHIxMTsKKwl1bnNpZ25lZCBsb25nICByMTI7CisJdW5zaWduZWQgbG9uZyAgcjEzOworCXVuc2lnbmVkIGxvbmcgIHIxNDsKKwl1bnNpZ25lZCBsb25nICByMTU7CisJdW5zaWduZWQgbG9uZyAgcjE7CQkvKiBBc3NlbWJsZXIgdGVtcG9yYXJ5ICovCisJdW5zaWduZWQgbG9uZyAgcjI7CQkvKiBSZXR2YWwgTFMgMzJiaXRzICovCisJdW5zaWduZWQgbG9uZyAgcjM7CQkvKiBSZXR2YWwgTVMgMzJiaXRzICovCisJdW5zaWduZWQgbG9uZyAgcjQ7CQkvKiByNC1yNyBSZWdpc3RlciBhcmd1bWVudHMgKi8KKwl1bnNpZ25lZCBsb25nICByNTsKKwl1bnNpZ25lZCBsb25nICByNjsKKwl1bnNpZ25lZCBsb25nICByNzsKKwl1bnNpZ25lZCBsb25nICBvcmlnX3IyOwkJLyogQ29weSBvZiByMiA/PyAqLworCXVuc2lnbmVkIGxvbmcgIHJhOwkJLyogUmV0dXJuIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nICBmcDsJCS8qIEZyYW1lIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nICBzcDsJCS8qIFN0YWNrIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nICBncDsJCS8qIEdsb2JhbCBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAgZXN0YXR1czsKKwl1bnNpZ25lZCBsb25nICBlYTsJCS8qIEV4Y2VwdGlvbiByZXR1cm4gYWRkcmVzcyAocGMpICovCisJdW5zaWduZWQgbG9uZyAgb3JpZ19yNzsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBleHRlbmRlZCBzdGFjayB1c2VkIGJ5IHNpZ25hbCBoYW5kbGVycyBhbmQgdGhlIGNvbnRleHQKKyAqIHN3aXRjaGVyOiBpdCdzIHB1c2hlZCBhZnRlciB0aGUgbm9ybWFsICJzdHJ1Y3QgcHRfcmVncyIuCisgKi8KK3N0cnVjdCBzd2l0Y2hfc3RhY2sgeworCXVuc2lnbmVkIGxvbmcgIHIxNjsJCS8qIHIxNi1yMjMgQ2FsbGVlLXNhdmVkIEdQIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcgIHIxNzsKKwl1bnNpZ25lZCBsb25nICByMTg7CisJdW5zaWduZWQgbG9uZyAgcjE5OworCXVuc2lnbmVkIGxvbmcgIHIyMDsKKwl1bnNpZ25lZCBsb25nICByMjE7CisJdW5zaWduZWQgbG9uZyAgcjIyOworCXVuc2lnbmVkIGxvbmcgIHIyMzsKKwl1bnNpZ25lZCBsb25nICBmcDsKKwl1bnNpZ25lZCBsb25nICBncDsKKwl1bnNpZ25lZCBsb25nICByYTsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfVUFQSV9BU01fTklPUzJfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOGJiNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9TSUdDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9TSUdDT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RydWN0IHNpZ2NvbnRleHQgeworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJdW5zaWduZWQgbG9uZyAgc2NfbWFzazsJLyogb2xkIHNpZ21hc2sgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3NpZ25hbC5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWVlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc2lnbmFsLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDIwMTMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworI2lmbmRlZiBfQVNNX05JT1MyX1NJR05BTF9ICisjZGVmaW5lIF9BU01fTklPUzJfU0lHTkFMX0gKKworI2RlZmluZSBTQV9SRVNUT1JFUiAweDA0MDAwMDAwCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc3dhYi5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3N3YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGUyMmViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3N3YWIuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDExIFB5cmFtaWQgVGVjaG5pY2FsIENvbnN1bHRhbnRzLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1NXQUJfSAorI2RlZmluZSBfQVNNX05JT1MyX1NXQUJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zd2FiLmg+CisKKyNpZmRlZiBDT05GSUdfTklPUzJfQ0lfU1dBQl9TVVBQT1JUCisjaWZkZWYgX19HTlVDX18KKworI2RlZmluZSBfX25pb3MyX3N3YWIoeCkJCVwKKwlfX2J1aWx0aW5fY3VzdG9tX2luaShDT05GSUdfTklPUzJfQ0lfU1dBQl9OTywgKHgpKQorCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGNvbnN0KSkgX191MTYgX19hcmNoX3N3YWIxNihfX3UxNiB4KQoreworCXJldHVybiAoX191MTYpIF9fbmlvczJfc3dhYigoKF9fdTMyKSB4KSA8PCAxNik7Cit9CisjZGVmaW5lIF9fYXJjaF9zd2FiMTYgX19hcmNoX3N3YWIxNgorCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGNvbnN0KSkgX191MzIgX19hcmNoX3N3YWIzMihfX3UzMiB4KQoreworCXJldHVybiAoX191MzIpIF9fbmlvczJfc3dhYih4KTsKK30KKyNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworI2VuZGlmIC8qIENPTkZJR19OSU9TMl9DSV9TV0FCX1NVUFBPUlQgKi8KKworI2VuZGlmIC8qIF9BU01fTklPUzJfU1dBQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiZjc5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyAjZGVmaW5lIHN5c19tbWFwMiBzeXNfbW1hcF9wZ29mZgorCisvKiBVc2UgdGhlIHN0YW5kYXJkIEFCSSBmb3Igc3lzY2FsbHMgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91bmlzdGQuaD4KKworLyogQWRkaXRpb25hbCBOaW9zIElJIHNwZWNpZmljIHN5c2NhbGxzLiAqLworI2RlZmluZSBfX05SX2NhY2hlZmx1c2ggKF9fTlJfYXJjaF9zcGVjaWZpY19zeXNjYWxsKQorX19TWVNDQUxMKF9fTlJfY2FjaGVmbHVzaCwgc3lzX2NhY2hlZmx1c2gpCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbmlvczIva2VybmVsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZTc2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9NYWtlZmlsZQpAQCAtMCwwICsxLDI0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbmlvczIgbGludXgga2VybmVsLgorIworCitleHRyYS15CSs9IGhlYWQubworZXh0cmEteQkrPSB2bWxpbnV4LmxkcworCitvYmoteQkrPSBjcHVpbmZvLm8KK29iai15CSs9IGVudHJ5Lm8KK29iai15CSs9IGluc25lbXUubworb2JqLXkJKz0gaXJxLm8KK29iai15CSs9IG5pb3MyX2tzeW1zLm8KK29iai15CSs9IHByb2Nlc3Mubworb2JqLXkJKz0gcHJvbS5vCitvYmoteQkrPSBwdHJhY2Uubworb2JqLXkJKz0gc2V0dXAubworb2JqLXkJKz0gc2lnbmFsLm8KK29iai15CSs9IHN5c19uaW9zMi5vCitvYmoteQkrPSBzeXNjYWxsX3RhYmxlLm8KK29iai15CSs9IHRpbWUubworb2JqLXkJKz0gdHJhcHMubworCitvYmotJChDT05GSUdfTU9EVUxFUykJCQkrPSBtb2R1bGUubworb2JqLSQoQ09ORklHX05JT1MyX0FMSUdOTUVOVF9UUkFQKQkrPSBtaXNhbGlnbmVkLm8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9hc20tb2Zmc2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZWU3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKworaW50IG1haW4odm9pZCkKK3sKKwkvKiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKi8KKwlPRkZTRVQoVEFTS19USFJFQUQsIHRhc2tfc3RydWN0LCB0aHJlYWQpOworCUJMQU5LKCk7CisKKwkvKiBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqLworCU9GRlNFVChUSFJFQURfS1NQLCB0aHJlYWRfc3RydWN0LCBrc3ApOworCU9GRlNFVChUSFJFQURfS1BTUiwgdGhyZWFkX3N0cnVjdCwga3Bzcik7CisJQkxBTksoKTsKKworCS8qIHN0cnVjdCBwdF9yZWdzICovCisJT0ZGU0VUKFBUX09SSUdfUjIsIHB0X3JlZ3MsIG9yaWdfcjIpOworCU9GRlNFVChQVF9PUklHX1I3LCBwdF9yZWdzLCBvcmlnX3I3KTsKKworCU9GRlNFVChQVF9SMSwgcHRfcmVncywgcjEpOworCU9GRlNFVChQVF9SMiwgcHRfcmVncywgcjIpOworCU9GRlNFVChQVF9SMywgcHRfcmVncywgcjMpOworCU9GRlNFVChQVF9SNCwgcHRfcmVncywgcjQpOworCU9GRlNFVChQVF9SNSwgcHRfcmVncywgcjUpOworCU9GRlNFVChQVF9SNiwgcHRfcmVncywgcjYpOworCU9GRlNFVChQVF9SNywgcHRfcmVncywgcjcpOworCU9GRlNFVChQVF9SOCwgcHRfcmVncywgcjgpOworCU9GRlNFVChQVF9SOSwgcHRfcmVncywgcjkpOworCU9GRlNFVChQVF9SMTAsIHB0X3JlZ3MsIHIxMCk7CisJT0ZGU0VUKFBUX1IxMSwgcHRfcmVncywgcjExKTsKKwlPRkZTRVQoUFRfUjEyLCBwdF9yZWdzLCByMTIpOworCU9GRlNFVChQVF9SMTMsIHB0X3JlZ3MsIHIxMyk7CisJT0ZGU0VUKFBUX1IxNCwgcHRfcmVncywgcjE0KTsKKwlPRkZTRVQoUFRfUjE1LCBwdF9yZWdzLCByMTUpOworCU9GRlNFVChQVF9FQSwgcHRfcmVncywgZWEpOworCU9GRlNFVChQVF9SQSwgcHRfcmVncywgcmEpOworCU9GRlNFVChQVF9GUCwgcHRfcmVncywgZnApOworCU9GRlNFVChQVF9TUCwgcHRfcmVncywgc3ApOworCU9GRlNFVChQVF9HUCwgcHRfcmVncywgZ3ApOworCU9GRlNFVChQVF9FU1RBVFVTLCBwdF9yZWdzLCBlc3RhdHVzKTsKKwlERUZJTkUoUFRfUkVHU19TSVpFLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlCTEFOSygpOworCisJLyogc3RydWN0IHN3aXRjaF9zdGFjayAqLworCU9GRlNFVChTV19SMTYsIHN3aXRjaF9zdGFjaywgcjE2KTsKKwlPRkZTRVQoU1dfUjE3LCBzd2l0Y2hfc3RhY2ssIHIxNyk7CisJT0ZGU0VUKFNXX1IxOCwgc3dpdGNoX3N0YWNrLCByMTgpOworCU9GRlNFVChTV19SMTksIHN3aXRjaF9zdGFjaywgcjE5KTsKKwlPRkZTRVQoU1dfUjIwLCBzd2l0Y2hfc3RhY2ssIHIyMCk7CisJT0ZGU0VUKFNXX1IyMSwgc3dpdGNoX3N0YWNrLCByMjEpOworCU9GRlNFVChTV19SMjIsIHN3aXRjaF9zdGFjaywgcjIyKTsKKwlPRkZTRVQoU1dfUjIzLCBzd2l0Y2hfc3RhY2ssIHIyMyk7CisJT0ZGU0VUKFNXX0ZQLCBzd2l0Y2hfc3RhY2ssIGZwKTsKKwlPRkZTRVQoU1dfR1AsIHN3aXRjaF9zdGFjaywgZ3ApOworCU9GRlNFVChTV19SQSwgc3dpdGNoX3N0YWNrLCByYSk7CisJREVGSU5FKFNXSVRDSF9TVEFDS19TSVpFLCBzaXplb2Yoc3RydWN0IHN3aXRjaF9zdGFjaykpOworCUJMQU5LKCk7CisKKwkvKiBzdHJ1Y3QgdGhyZWFkX2luZm8gKi8KKwlPRkZTRVQoVElfRkxBR1MsIHRocmVhZF9pbmZvLCBmbGFncyk7CisJT0ZGU0VUKFRJX1BSRUVNUFRfQ09VTlQsIHRocmVhZF9pbmZvLCBwcmVlbXB0X2NvdW50KTsKKwlCTEFOSygpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9jcHVpbmZvLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9jcHVpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkNWJiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL2NwdWluZm8uYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBCYXNlZCBvbiBjcHVpbmZvLmMgZnJvbSBtaWNyb2JsYXplCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorCitzdHJ1Y3QgY3B1aW5mbyBjcHVpbmZvOworCisjZGVmaW5lIGVycl9jcHUoeCkgXAorCXByX2VycigiRVJST1I6IE5pb3MgSUkgIiB4ICIgZGlmZmVyZW50IGZvciBrZXJuZWwgYW5kIERUU1xuIikKKworc3RhdGljIGlubGluZSB1MzIgZmNwdShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSwgY29uc3QgY2hhciAqbikKK3sKKwl1MzIgdmFsID0gMDsKKworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKGNwdSwgbiwgJnZhbCk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBmY3B1X2hhcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSwgY29uc3QgY2hhciAqbikKK3sKKwlyZXR1cm4gb2ZfZ2V0X3Byb3BlcnR5KGNwdSwgbiwgTlVMTCkgPyAxIDogMDsKK30KKwordm9pZCBfX2luaXQgc2V0dXBfY3B1aW5mbyh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1OworCWNvbnN0IGNoYXIgKnN0cjsKKwlpbnQgbGVuOworCisJY3B1ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOworCWlmICghY3B1KQorCQlwYW5pYygiJXM6IE5vIENQVSBmb3VuZCBpbiBkZXZpY2V0cmVlIVxuIiwgX19mdW5jX18pOworCisJaWYgKCFmY3B1X2hhcyhjcHUsICJhbHRyLGhhcy1pbml0ZGEiKSkKKwkJcGFuaWMoImluaXRkYSBpbnN0cnVjdGlvbiBpcyB1bmltcGxlbWVudGVkLiBQbGVhc2UgdXBkYXRlIHlvdXIgIgorCQkJImhhcmR3YXJlIHN5c3RlbSB0byBoYXZlIG1vcmUgdGhhbiA0LWJ5dGUgbGluZSBkYXRhICIKKwkJCSJjYWNoZVxuIik7CisKKwljcHVpbmZvLmNwdV9jbG9ja19mcmVxID0gZmNwdShjcHUsICJjbG9jay1mcmVxdWVuY3kiKTsKKworCXN0ciA9IG9mX2dldF9wcm9wZXJ0eShjcHUsICJhbHRyLGltcGxlbWVudGF0aW9uIiwgJmxlbik7CisJaWYgKHN0cikKKwkJc3RybGNweShjcHVpbmZvLmNwdV9pbXBsLCBzdHIsIHNpemVvZihjcHVpbmZvLmNwdV9pbXBsKSk7CisJZWxzZQorCQlzdHJjcHkoY3B1aW5mby5jcHVfaW1wbCwgIjx1bmtub3duPiIpOworCisJY3B1aW5mby5oYXNfZGl2ID0gZmNwdV9oYXMoY3B1LCAiYWx0cixoYXMtZGl2Iik7CisJY3B1aW5mby5oYXNfbXVsID0gZmNwdV9oYXMoY3B1LCAiYWx0cixoYXMtbXVsIik7CisJY3B1aW5mby5oYXNfbXVseCA9IGZjcHVfaGFzKGNwdSwgImFsdHIsaGFzLW11bHgiKTsKKworCWlmIChJU19FTkFCTEVEKENPTkZJR19OSU9TMl9IV19ESVZfU1VQUE9SVCkgJiYgIWNwdWluZm8uaGFzX2RpdikKKwkJZXJyX2NwdSgiRElWIik7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTklPUzJfSFdfTVVMX1NVUFBPUlQpICYmICFjcHVpbmZvLmhhc19tdWwpCisJCWVycl9jcHUoIk1VTCIpOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX05JT1MyX0hXX01VTFhfU1VQUE9SVCkgJiYgIWNwdWluZm8uaGFzX211bHgpCisJCWVycl9jcHUoIk1VTFgiKTsKKworCWNwdWluZm8udGxiX251bV93YXlzID0gZmNwdShjcHUsICJhbHRyLHRsYi1udW0td2F5cyIpOworCWlmICghY3B1aW5mby50bGJfbnVtX3dheXMpCisJCXBhbmljKCJhbHRyLHRsYi1udW0td2F5cyBjYW4ndCBiZSAwLiBQbGVhc2UgY2hlY2sgeW91ciBoYXJkd2FyZSAiCisJCQkic3lzdGVtXG4iKTsKKwljcHVpbmZvLmljYWNoZV9saW5lX3NpemUgPSBmY3B1KGNwdSwgImljYWNoZS1saW5lLXNpemUiKTsKKwljcHVpbmZvLmljYWNoZV9zaXplID0gZmNwdShjcHUsICJpY2FjaGUtc2l6ZSIpOworCWlmIChDT05GSUdfTklPUzJfSUNBQ0hFX1NJWkUgIT0gY3B1aW5mby5pY2FjaGVfc2l6ZSkKKwkJcHJfd2FybigiV2FybmluZzogaWNhY2hlIHNpemUgY29uZmlndXJhdGlvbiBtaXNtYXRjaCAiCisJCSIoMHgleCB2cyAweCV4KSBvZiBDT05GSUdfTklPUzJfSUNBQ0hFX1NJWkUgdnMgIgorCQkiZGV2aWNlIHRyZWUgaWNhY2hlLXNpemVcbiIsCisJCUNPTkZJR19OSU9TMl9JQ0FDSEVfU0laRSwgY3B1aW5mby5pY2FjaGVfc2l6ZSk7CisKKwljcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgPSBmY3B1KGNwdSwgImRjYWNoZS1saW5lLXNpemUiKTsKKwlpZiAoQ09ORklHX05JT1MyX0RDQUNIRV9MSU5FX1NJWkUgIT0gY3B1aW5mby5kY2FjaGVfbGluZV9zaXplKQorCQlwcl93YXJuKCJXYXJuaW5nOiBkY2FjaGUgbGluZSBzaXplIGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2ggIgorCQkiKDB4JXggdnMgMHgleCkgb2YgQ09ORklHX05JT1MyX0RDQUNIRV9MSU5FX1NJWkUgdnMgIgorCQkiZGV2aWNlIHRyZWUgZGNhY2hlLWxpbmUtc2l6ZVxuIiwKKwkJQ09ORklHX05JT1MyX0RDQUNIRV9MSU5FX1NJWkUsIGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSk7CisJY3B1aW5mby5kY2FjaGVfc2l6ZSA9IGZjcHUoY3B1LCAiZGNhY2hlLXNpemUiKTsKKwlpZiAoQ09ORklHX05JT1MyX0RDQUNIRV9TSVpFICE9IGNwdWluZm8uZGNhY2hlX3NpemUpCisJCXByX3dhcm4oIldhcm5pbmc6IGRjYWNoZSBzaXplIGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2ggIgorCQkJIigweCV4IHZzIDB4JXgpIG9mIENPTkZJR19OSU9TMl9EQ0FDSEVfU0laRSB2cyAiCisJCQkiZGV2aWNlIHRyZWUgZGNhY2hlLXNpemVcbiIsCisJCQlDT05GSUdfTklPUzJfRENBQ0hFX1NJWkUsIGNwdWluZm8uZGNhY2hlX3NpemUpOworCisJY3B1aW5mby50bGJfcGlkX251bV9iaXRzID0gZmNwdShjcHUsICJhbHRyLHBpZC1udW0tYml0cyIpOworCWNwdWluZm8udGxiX251bV93YXlzX2xvZzIgPSBpbG9nMihjcHVpbmZvLnRsYl9udW1fd2F5cyk7CisJY3B1aW5mby50bGJfbnVtX2VudHJpZXMgPSBmY3B1KGNwdSwgImFsdHIsdGxiLW51bS1lbnRyaWVzIik7CisJY3B1aW5mby50bGJfbnVtX2xpbmVzID0gY3B1aW5mby50bGJfbnVtX2VudHJpZXMgLyBjcHVpbmZvLnRsYl9udW1fd2F5czsKKwljcHVpbmZvLnRsYl9wdHJfc3ogPSBmY3B1KGNwdSwgImFsdHIsdGxiLXB0ci1zeiIpOworCisJY3B1aW5mby5yZXNldF9hZGRyID0gZmNwdShjcHUsICJhbHRyLHJlc2V0LWFkZHIiKTsKKwljcHVpbmZvLmV4Y2VwdGlvbl9hZGRyID0gZmNwdShjcHUsICJhbHRyLGV4Y2VwdGlvbi1hZGRyIik7CisJY3B1aW5mby5mYXN0X3RsYl9taXNzX2V4Y19hZGRyID0gZmNwdShjcHUsICJhbHRyLGZhc3QtdGxiLW1pc3MtYWRkciIpOworfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKworLyoKKyAqIEdldCBDUFUgaW5mb3JtYXRpb24gZm9yIHVzZSBieSB0aGUgcHJvY2ZzLgorICovCitzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJaW50IGNvdW50ID0gMDsKKwljb25zdCB1MzIgY2xvY2tmcmVxID0gY3B1aW5mby5jcHVfY2xvY2tfZnJlcTsKKworCWNvdW50ID0gc2VxX3ByaW50ZihtLAorCQkJIkNQVTpcdFx0TmlvcyBJSS8lc1xuIgorCQkJIk1NVTpcdFx0JXNcbiIKKwkJCSJGUFU6XHRcdG5vbmVcbiIKKwkJCSJDbG9ja2luZzpcdCV1LiUwMnUgTUh6XG4iCisJCQkiQm9nb01pcHM6XHQlbHUuJTAybHVcbiIKKwkJCSJDYWxpYnJhdGlvbjpcdCVsdSBsb29wc1xuIiwKKwkJCWNwdWluZm8uY3B1X2ltcGwsCisJCQljcHVpbmZvLm1tdSA/ICJwcmVzZW50IiA6ICJub25lIiwKKwkJCWNsb2NrZnJlcSAvIDEwMDAwMDAsIChjbG9ja2ZyZXEgLyAxMDAwMDApICUgMTAsCisJCQkobG9vcHNfcGVyX2ppZmZ5ICogSFopIC8gNTAwMDAwLAorCQkJKChsb29wc19wZXJfamlmZnkgKiBIWikgLyA1MDAwKSAlIDEwMCwKKwkJCShsb29wc19wZXJfamlmZnkgKiBIWikpOworCisJY291bnQgKz0gc2VxX3ByaW50ZihtLAorCQkJIkhXOlxuIgorCQkJIiBNVUw6XHRcdCVzXG4iCisJCQkiIE1VTFg6XHRcdCVzXG4iCisJCQkiIERJVjpcdFx0JXNcbiIsCisJCQljcHVpbmZvLmhhc19tdWwgPyAieWVzIiA6ICJubyIsCisJCQljcHVpbmZvLmhhc19tdWx4ID8gInllcyIgOiAibm8iLAorCQkJY3B1aW5mby5oYXNfZGl2ID8gInllcyIgOiAibm8iKTsKKworCWNvdW50ICs9IHNlcV9wcmludGYobSwKKwkJCSJJY2FjaGU6XHRcdCV1a0IsIGxpbmUgbGVuZ3RoOiAldVxuIiwKKwkJCWNwdWluZm8uaWNhY2hlX3NpemUgPj4gMTAsCisJCQljcHVpbmZvLmljYWNoZV9saW5lX3NpemUpOworCisJY291bnQgKz0gc2VxX3ByaW50ZihtLAorCQkJIkRjYWNoZTpcdFx0JXVrQiwgbGluZSBsZW5ndGg6ICV1XG4iLAorCQkJY3B1aW5mby5kY2FjaGVfc2l6ZSA+PiAxMCwKKwkJCWNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSk7CisKKwljb3VudCArPSBzZXFfcHJpbnRmKG0sCisJCQkiVExCOlx0XHQldSB3YXlzLCAldSBlbnRyaWVzLCAldSBQSUQgYml0c1xuIiwKKwkJCWNwdWluZm8udGxiX251bV93YXlzLAorCQkJY3B1aW5mby50bGJfbnVtX2VudHJpZXMsCisJCQljcHVpbmZvLnRsYl9waWRfbnVtX2JpdHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpjcHVpbmZvX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJdW5zaWduZWQgbG9uZyBpID0gKnBvczsKKworCXJldHVybiBpIDwgbnVtX3Bvc3NpYmxlX2NwdXMoKSA/ICh2b2lkICopIChpICsgMSkgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqY3B1aW5mb19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKysqcG9zOworCXJldHVybiBjcHVpbmZvX3N0YXJ0KG0sIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNwdWluZm9fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK2NvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wID0geworCS5zdGFydAk9IGNwdWluZm9fc3RhcnQsCisJLm5leHQJPSBjcHVpbmZvX25leHQsCisJLnN0b3AJPSBjcHVpbmZvX3N0b3AsCisJLnNob3cJPSBzaG93X2NwdWluZm8KK307CisKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbmlvczIva2VybmVsL2VudHJ5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiY2ExNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL2VudHJ5LlMKQEAgLTAsMCArMSw1NTUgQEAKKy8qCisgKiBsaW51eC9hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKgorICogSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggIEQuIEplZmYgRGlvbm5lIDxqZWZmQGxpbmVvLmNhPiwKKyAqICAgICAgICAgICAgICAgICAgICAgIEtlbm5ldGggQWxiYW5vd3NraSA8a2phaGRzQGtqYWhkcy5jb20+LAorICogIENvcHlyaWdodCAoQykgMjAwMCAgTGluZW8gSW5jLiAod3d3LmxpbmVvLmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgIE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIExpbnV4L202OGsgc3VwcG9ydCBieSBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogNjgwNjAgZml4ZXMgYnkgSmVzcGVyIFNrb3YKKyAqIENvbGRGaXJlIHN1cHBvcnQgYnkgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqIDUzMDcgZml4ZXMgYnkgRGF2aWQgVy4gTWlsbGVyCisgKiBsaW51eCAyLjQgc3VwcG9ydCBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1Ac25hcGdlYXIuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zeXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1tYWNyb3MuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vZW50cnkuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisubWFjcm8gR0VUX1RIUkVBRF9JTkZPIHJlZworLmlmIFRIUkVBRF9TSVpFICYgMHhmZmZmMDAwMAorCWFuZGhpCVxyZWcsIHNwLCAlaGkofihUSFJFQURfU0laRS0xKSkKKy5lbHNlCisJYWRkaQlccmVnLCByMCwgJWxvKH4oVEhSRUFEX1NJWkUtMSkpCisJYW5kCVxyZWcsIFxyZWcsIHNwCisuZW5kaWYKKy5lbmRtCisKKy5tYWNybwlrdXNlcl9jbXB4Y2hnX2NoZWNrCisJLyoKKwkgKiBNYWtlIHN1cmUgb3VyIHVzZXIgc3BhY2UgYXRvbWljIGhlbHBlciBpcyByZXN0YXJ0ZWQgaWYgaXQgd2FzCisJICogaW50ZXJydXB0ZWQgaW4gYSBjcml0aWNhbCByZWdpb24uCisJICogZWEtNCA9IGFkZHJlc3Mgb2YgaW50ZXJydXB0ZWQgaW5zbiAoZWEgbXVzdCBiZSBwcmVzZXJ2ZWQpLgorCSAqIHNwID0gc2F2ZWQgcmVncy4KKwkgKiBjbXB4Y2hnX2xkdyA9IGZpcnN0IGNyaXRpY2FsIGluc24sIGNtcHhjaGdfc3R3ID0gbGFzdCBjcml0aWNhbCBpbnNuLgorCSAqIElmIGVhIDw9IGNtcHhjaGdfc3R3IGFuZCBlYSA+IGNtcHhjaGdfbGR3IHRoZW4gc2F2ZWQgRUEgaXMgc2V0IHRvCisJICogY21weGNoZ19sZHcgKyA0LgorCSovCisJLyogZXQgPSBjbXB4Y2hnX3N0dyArIDQgKi8KKwltb3Z1aSAgIGV0LCAoS1VTRVJfQkFTRSArIDQgKyAoY21weGNoZ19zdHcgLSBfX2t1c2VyX2hlbHBlcl9zdGFydCkpCisJYmd0dQllYSwgZXQsIDFmCisKKwlzdWJpCWV0LCBldCwgKGNtcHhjaGdfc3R3IC0gY21weGNoZ19sZHcpIC8qIGV0ID0gY21weGNoZ19sZHcgKyA0ICovCisJYmx0dQllYSwgZXQsIDFmCisJc3R3CWV0LCBQVF9FQShzcCkJLyogZml4IHVwIEVBICovCisJbW92CWVhLCBldAorMToKKy5lbmRtCisKKy5zZWN0aW9uIC5yb2RhdGEKKy5hbGlnbiA0CitleGNlcHRpb25fdGFibGU6CisJLndvcmQgdW5oYW5kbGVkX2V4Y2VwdGlvbgkvKiAwIC0gUmVzZXQgKi8KKwkud29yZCB1bmhhbmRsZWRfZXhjZXB0aW9uCS8qIDEgLSBQcm9jZXNzb3Itb25seSBSZXNldCAqLworCS53b3JkIGV4dGVybmFsX2ludGVycnVwdAkvKiAyIC0gSW50ZXJydXB0ICovCisJLndvcmQgaGFuZGxlX3RyYXAJCS8qIDMgLSBUcmFwIEluc3RydWN0aW9uICovCisKKwkud29yZCBpbnN0cnVjdGlvbl90cmFwCQkvKiA0IC0gVW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbiAqLworCS53b3JkIGhhbmRsZV9pbGxlZ2FsCQkvKiA1IC0gSWxsZWdhbCBpbnN0cnVjdGlvbiAqLworCS53b3JkIGhhbmRsZV91bmFsaWduZWQJCS8qIDYgLSBNaXNhbGlnbmVkIGRhdGEgYWNjZXNzICovCisJLndvcmQgaGFuZGxlX3VuYWxpZ25lZAkJLyogNyAtIE1pc2FsaWduZWQgZGVzdGluYXRpb24gYWRkcmVzcyAqLworCisJLndvcmQgaGFuZGxlX2RpdmVycm9yCQkvKiA4IC0gRGl2aXNpb24gZXJyb3IgKi8KKwkud29yZCBwcm90ZWN0aW9uX2V4Y2VwdGlvbl9iYQkvKiA5IC0gU3VwZXJ2aXNvci1vbmx5IGluc3RyLiBhZGRyZXNzICovCisJLndvcmQgcHJvdGVjdGlvbl9leGNlcHRpb25faW5zdHIgLyogMTAgLSBTdXBlcnZpc29yIG9ubHkgaW5zdHJ1Y3Rpb24gKi8KKwkud29yZCBwcm90ZWN0aW9uX2V4Y2VwdGlvbl9iYQkvKiAxMSAtIFN1cGVydmlzb3Igb25seSBkYXRhIGFkZHJlc3MgKi8KKworCS53b3JkIHVuaGFuZGxlZF9leGNlcHRpb24JLyogMTIgLSBEb3VibGUgVExCIG1pc3MgKGRhdGEpICovCisJLndvcmQgcHJvdGVjdGlvbl9leGNlcHRpb25fcHRlCS8qIDEzIC0gVExCIHBlcm1pc3Npb24gdmlvbGF0aW9uICh4KSAqLworCS53b3JkIHByb3RlY3Rpb25fZXhjZXB0aW9uX3B0ZQkvKiAxNCAtIFRMQiBwZXJtaXNzaW9uIHZpb2xhdGlvbiAocikgKi8KKwkud29yZCBwcm90ZWN0aW9uX2V4Y2VwdGlvbl9wdGUJLyogMTUgLSBUTEIgcGVybWlzc2lvbiB2aW9sYXRpb24gKHcpICovCisKKwkud29yZCB1bmhhbmRsZWRfZXhjZXB0aW9uCS8qIDE2IC0gTVBVIHJlZ2lvbiB2aW9sYXRpb24gKi8KKwordHJhcF90YWJsZToKKwkud29yZAloYW5kbGVfc3lzdGVtX2NhbGwJLyogMCAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDEgICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMyAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDQgICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiA1ICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogNiAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDcgICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiA4ICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogOSAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDEwICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAxMSAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTIgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDEzICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAxNCAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTUgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDE2ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAxNyAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTggKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDE5ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyMCAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMjEgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDIyICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyMyAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMjQgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDI1ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyNiAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMjcgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDI4ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyOSAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMzAgKi8KKwkud29yZAloYW5kbGVfYnJlYWtwb2ludAkvKiAzMSAqLworCisudGV4dAorLnNldCBub2F0Cisuc2V0IG5vYnJlYWsKKworRU5UUlkoaW50aGFuZGxlcikKKwlTQVZFX0FMTAorCisJa3VzZXJfY21weGNoZ19jaGVjaworCisJLyogQ2xlYXIgRUggYml0IGJlZm9yZSB3ZSBnZXQgYSBuZXcgZXhjcGV0aW9uIGluIHRoZSBrZXJuZWwKKwkgKiBhbmQgYWZ0ZXIgd2UgaGF2ZSBzYXZlZCBpdCB0byB0aGUgZXhjZXB0aW9uIGZyYW1lLiBUaGlzIGlzIGRvbmUKKwkgKiB3aGV0aGVyIGl0J3MgdHJhcCwgdGxiLW1pc3Mgb3IgaW50ZXJydXB0LiBJZiB3ZSBkb24ndCBkbyB0aGlzCisJICogZXN0YXR1cyBpcyBub3QgdXBkYXRlZCB0aGUgbmV4dCBleGNlcHRpb24uCisJICovCisJcmRjdGwJcjI0LCBzdGF0dXMKKwltb3ZpCXI5LCAlbG8oflNUQVRVU19FSCkKKwlhbmQJcjI0LCByMjQsIHI5CisJd3JjdGwJc3RhdHVzLCByMjQKKworCS8qIFJlYWQgY2F1c2UgYW5kIHZlY3RvciBhbmQgYnJhbmNoIHRvIHRoZSBhc3NvY2lhdGVkIGhhbmRsZXIgKi8KKwltb3YJcjQsIHNwCisJcmRjdGwJcjUsIGV4Y2VwdGlvbgorCW1vdmlhCXI5LCBleGNlcHRpb25fdGFibGUKKwlhZGQJcjI0LCByOSwgcjUKKwlsZHcJcjI0LCAwKHIyNCkKKwlqbXAJcjI0CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIYW5kbGUgdHJhcHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitFTlRSWShoYW5kbGVfdHJhcCkKKwlsZHcJcjI0LCAtNChlYSkJLyogaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbiAqLworCXNybGkJcjI0LCByMjQsIDQKKwlhbmRpCXIyNCwgcjI0LCAweDdjCisJbW92aWEJcjksdHJhcF90YWJsZQorCWFkZAlyMjQsIHIyNCwgcjkKKwlsZHcJcjI0LCAwKHIyNCkKKwlqbXAJcjI0CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIYW5kbGUgc3lzdGVtIGNhbGxzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworRU5UUlkoaGFuZGxlX3N5c3RlbV9jYWxsKQorCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJcmRjdGwJcjEwLCBzdGF0dXMKKwlvcmkJcjEwLCByMTAsIFNUQVRVU19QSUUKKwl3cmN0bAlzdGF0dXMsIHIxMAorCisJLyogUmVsb2FkIHJlZ2lzdGVycyBkZXN0cm95ZWQgYnkgY29tbW9uIGNvZGUuICovCisJbGR3CXI0LCBQVF9SNChzcCkKKwlsZHcJcjUsIFBUX1I1KHNwKQorCitsb2NhbF9yZXN0YXJ0OgorCS8qIENoZWNrIHRoYXQgdGhlIHJlcXVlc3RlZCBzeXN0ZW0gY2FsbCBpcyB3aXRoaW4gbGltaXRzICovCisJbW92dWkJcjEsIF9fTlJfc3lzY2FsbHMKKwliZ2V1CXIyLCByMSwgcmV0X2ludnN5c2NhbGwKKwlzbGxpCXIxLCByMiwgMgorCW1vdmhpCXIxMSwgJWhpYWRqKHN5c19jYWxsX3RhYmxlKQorCWFkZAlyMSwgcjEsIHIxMQorCWxkdwlyMSwgJWxvKHN5c19jYWxsX3RhYmxlKShyMSkKKwliZXEJcjEsIHIwLCByZXRfaW52c3lzY2FsbAorCisJLyogQ2hlY2sgaWYgd2UgYXJlIGJlaW5nIHRyYWNlZCAqLworCUdFVF9USFJFQURfSU5GTyByMTEKKwlsZHcJcjExLFRJX0ZMQUdTKHIxMSkKKwlCVEJOWiAgIHIxMSxyMTEsVElGX1NZU0NBTExfVFJBQ0UsdHJhY2VkX3N5c3RlbV9jYWxsCisKKwkvKiBFeGVjdXRlIHRoZSBzeXN0ZW0gY2FsbCAqLworCWNhbGxyCXIxCisKKwkvKiBJZiB0aGUgc3lzY2FsbCByZXR1cm5zIGEgbmVnYXRpdmUgcmVzdWx0OgorCSAqICAgU2V0IHI3IHRvIDEgdG8gaW5kaWNhdGUgZXJyb3IsCisJICogICBOZWdhdGUgcjIgdG8gZ2V0IGEgcG9zaXRpdmUgZXJyb3IgY29kZQorCSAqIElmIHRoZSBzeXNjYWxsIHJldHVybnMgemVybyBvciBhIHBvc2l0aXZlIHZhbHVlOgorCSAqICAgU2V0IHI3IHRvIDAuCisJICogVGhlIHNpZ3JldHVybiBzeXN0ZW0gY2FsbHMgd2lsbCBza2lwIHRoZSBjb2RlIGJlbG93IGJ5CisJICogYWRkaW5nIHRvIHJlZ2lzdGVyIHJhLiBUbyBhdm9pZCBkZXN0cm95aW5nIHJlZ2lzdGVycworCSAqLwordHJhbnNsYXRlX3JjX2FuZF9yZXQ6CisJbW92aQlyMSwgMAorCWJnZQlyMiwgemVybywgM2YKKwlzdWIJcjIsIHplcm8sIHIyCisJbW92aQlyMSwgMQorMzoKKwlzdHcJcjIsIFBUX1IyKHNwKQorCXN0dwlyMSwgUFRfUjcoc3ApCitlbmRfdHJhbnNsYXRlX3JjX2FuZF9yZXQ6CisKK3JldF9mcm9tX2V4Y2VwdGlvbjoKKwlsZHcJcjEsIFBUX0VTVEFUVVMoc3ApCisJLyogaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscyAqLworCVRTVEJOWglyMSwgcjEsIEVTVEFUVVNfRVUsIEx1c2VyX3JldHVybgorCityZXN0b3JlX2FsbDoKKwlyZGN0bAlyMTAsIHN0YXR1cwkJCS8qIGRpc2FibGUgaW50cnMgKi8KKwlhbmRpCXIxMCwgcjEwLCAlbG8oflNUQVRVU19QSUUpCisJd3JjdGwJc3RhdHVzLCByMTAKKwlSRVNUT1JFX0FMTAorCWVyZXQKKworCS8qIElmIHRoZSBzeXNjYWxsIG51bWJlciB3YXMgaW52YWxpZCByZXR1cm4gRU5PU1lTICovCityZXRfaW52c3lzY2FsbDoKKwltb3ZpCXIyLCAtRU5PU1lTCisJYnIJdHJhbnNsYXRlX3JjX2FuZF9yZXQKKworCS8qIFRoaXMgaW1wbGVtZW50cyB0aGUgc2FtZSBhcyBhYm92ZSwgZXhjZXB0IGl0IGNhbGxzCisJICogZG9fc3lzY2FsbF90cmFjZV9lbnRlciBhbmQgZG9fc3lzY2FsbF90cmFjZV9leGl0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisJICogc3lzY2FsbCBpbiBvcmRlciBmb3IgdXRpbGl0aWVzIGxpa2Ugc3RyYWNlIGFuZCBnZGIgdG8gd29yay4KKwkgKi8KK3RyYWNlZF9zeXN0ZW1fY2FsbDoKKwlTQVZFX1NXSVRDSF9TVEFDSworCWNhbGwJZG9fc3lzY2FsbF90cmFjZV9lbnRlcgorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisKKwkvKiBDcmVhdGUgc3lzdGVtIGNhbGwgcmVnaXN0ZXIgYXJndW1lbnRzLiBUaGUgNXRoIGFuZCA2dGgKKwkgICBhcmd1bWVudHMgb24gc3RhY2sgYXJlIGFscmVhZHkgaW4gcGxhY2UgYXQgdGhlIGJlZ2lubmluZworCSAgIG9mIHB0X3JlZ3MuICovCisJbGR3CXIyLCBQVF9SMihzcCkKKwlsZHcJcjQsIFBUX1I0KHNwKQorCWxkdwlyNSwgUFRfUjUoc3ApCisJbGR3CXI2LCBQVF9SNihzcCkKKwlsZHcJcjcsIFBUX1I3KHNwKQorCisJLyogRmV0Y2ggdGhlIHN5c2NhbGwgZnVuY3Rpb24sIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIGJvdW5kYXJpZXMKKwkgKiBzaW5jZSB0aGlzIGlzIGFscmVhZHkgZG9uZS4KKwkgKi8KKwlzbGxpCXIxLCByMiwgMgorCW1vdmhpCXIxMSwlaGlhZGooc3lzX2NhbGxfdGFibGUpCisJYWRkCXIxLCByMSwgcjExCisJbGR3CXIxLCAlbG8oc3lzX2NhbGxfdGFibGUpKHIxKQorCisJY2FsbHIJcjEKKworCS8qIElmIHRoZSBzeXNjYWxsIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQ6CisJICogICBTZXQgcjcgdG8gMSB0byBpbmRpY2F0ZSBlcnJvciwKKwkgKiAgIE5lZ2F0ZSByMiB0byBnZXQgYSBwb3NpdGl2ZSBlcnJvciBjb2RlCisJICogSWYgdGhlIHN5c2NhbGwgcmV0dXJucyB6ZXJvIG9yIGEgcG9zaXRpdmUgdmFsdWU6CisJICogICBTZXQgcjcgdG8gMC4KKwkgKiBUaGUgc2lncmV0dXJuIHN5c3RlbSBjYWxscyB3aWxsIHNraXAgdGhlIGNvZGUgYmVsb3cgYnkKKwkgKiBhZGRpbmcgdG8gcmVnaXN0ZXIgcmEuIFRvIGF2b2lkIGRlc3Ryb3lpbmcgcmVnaXN0ZXJzCisJICovCit0cmFuc2xhdGVfcmNfYW5kX3JldDI6CisJbW92aQlyMSwgMAorCWJnZQlyMiwgemVybywgNGYKKwlzdWIJcjIsIHplcm8sIHIyCisJbW92aQlyMSwgMQorNDoKKwlzdHcJcjIsIFBUX1IyKHNwKQorCXN0dwlyMSwgUFRfUjcoc3ApCitlbmRfdHJhbnNsYXRlX3JjX2FuZF9yZXQyOgorCVNBVkVfU1dJVENIX1NUQUNLCisJY2FsbAlkb19zeXNjYWxsX3RyYWNlX2V4aXQKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCitMdXNlcl9yZXR1cm46CisJR0VUX1RIUkVBRF9JTkZPCXIxMQkJCS8qIGdldCB0aHJlYWRfaW5mbyBwb2ludGVyICovCisJbGR3CXIxMCwgVElfRkxBR1MocjExKQkJLyogZ2V0IHRocmVhZF9pbmZvLT5mbGFncyAqLworCUFOREkzMglyMTEsIHIxMCwgX1RJRl9XT1JLX01BU0sKKwliZXEJcjExLCByMCwgcmVzdG9yZV9hbGwJCS8qIE5vdGhpbmcgdG8gZG8gKi8KKwlCVEJaCXIxLCByMTAsIFRJRl9ORUVEX1JFU0NIRUQsIExzaWduYWxfcmV0dXJuCisKKwkvKiBSZXNjaGVkdWxlIHdvcmsgKi8KKwljYWxsCXNjaGVkdWxlCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK0xzaWduYWxfcmV0dXJuOgorCUFOREkzMglyMSwgcjEwLCBfVElGX1NJR1BFTkRJTkcgfCBfVElGX05PVElGWV9SRVNVTUUKKwliZXEJcjEsIHIwLCByZXN0b3JlX2FsbAorCW1vdglyNCwgc3AJCQkvKiBwdF9yZWdzICovCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwljYWxsCWRvX25vdGlmeV9yZXN1bWUKKwliZXEJcjIsIHIwLCBub193b3JrX3BlbmRpbmcKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCS8qIHByZXBhcmUgcmVzdGFydCBzeXNjYWxsIGhlcmUgd2l0aG91dCBsZWF2aW5nIGtlcm5lbCAqLworCWxkdwlyMiwgUFRfUjIoc3ApCS8qIHJlbG9hZCBzeXNjYWxsIG51bWJlciBpbiByMiAqLworCWxkdyAJcjQsIFBUX1I0KHNwKQkvKiByZWxvYWQgc3lzY2FsbCBhcmd1bWVudHMgcjQtcjkgKi8KKwlsZHcgCXI1LCBQVF9SNShzcCkKKwlsZHcgCXI2LCBQVF9SNihzcCkKKwlsZHcgCXI3LCBQVF9SNyhzcCkKKwlsZHcgCXI4LCBQVF9SOChzcCkKKwlsZHcgCXI5LCBQVF9SOShzcCkKKwlicglsb2NhbF9yZXN0YXJ0CS8qIHJlc3RhcnQgc3lzY2FsbCAqLworCitub193b3JrX3BlbmRpbmc6CisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlicglyZXRfZnJvbV9leGNlcHRpb24KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIYW5kbGUgZXh0ZXJuYWwgaW50ZXJydXB0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisvKgorICogVGhpcyBpcyB0aGUgZ2VuZXJpYyBpbnRlcnJ1cHQgaGFuZGxlciAoZm9yIGFsbCBoYXJkd2FyZSBpbnRlcnJ1cHQKKyAqIHNvdXJjZXMpLiBJdCBmaWd1cmVzIG91dCB0aGUgdmVjdG9yIG51bWJlciBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlCisgKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGRpcmVjdGx5LgorICovCitleHRlcm5hbF9pbnRlcnJ1cHQ6CisJcmRjdGwJcjEyLCBpcGVuZGluZworCXJkY3RsCXI5LCBpZW5hYmxlCisJYW5kCXIxMiwgcjEyLCByOQorCS8qIHNraXAgaWYgbm8gaW50ZXJydXB0IGlzIHBlbmRpbmcgKi8KKwliZXEJcjEyLCByMCwgcmV0X2Zyb21faW50ZXJydXB0CisKKwltb3ZpCXIyNCwgLTEKKwlzdHcJcjI0LCBQVF9PUklHX1IyKHNwKQorCisJLyoKKwkgKiBQcm9jZXNzIGFuIGV4dGVybmFsIGhhcmR3YXJlIGludGVycnVwdC4KKwkgKi8KKworCWFkZGkJZWEsIGVhLCAtNAkvKiByZS1pc3N1ZSB0aGUgaW50ZXJydXB0ZWQgaW5zdHJ1Y3Rpb24gKi8KKwlzdHcJZWEsIFBUX0VBKHNwKQorMjoJbW92aQlyNCwgJWxvKC0xKQkvKiBTdGFydCBmcm9tIGJpdCBwb3NpdGlvbiAwLAorCQkJCQloaWdoZXN0IHByaW9yaXR5ICovCisJCQkJLyogVGhpcyBpcyB0aGUgSVJRICMgZm9yIGhhbmRsZXIgY2FsbCAqLworMToJYW5kaQlyMTAsIHIxMiwgMQkvKiBJc29sYXRlIGJpdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAqLworCXNybGkJcjEyLCByMTIsIDEJLyogc2hpZnQgY291bnQgaXMgY29zdGx5IHdpdGhvdXQgaGFyZHdhcmUKKwkJCQkJbXVsdGlwbGllciAqLworCWFkZGkJcjQsIHI0LCAxCisJYmVxCXIxMCwgcjAsIDFiCisJbW92CXI1LCBzcAkJLyogU2V0dXAgcHRfcmVncyBwb2ludGVyIGZvciBoYW5kbGVyIGNhbGwgKi8KKwljYWxsCWRvX0lSUQorCXJkY3RsCXIxMiwgaXBlbmRpbmcJLyogY2hlY2sgYWdhaW4gaWYgaXJxIHN0aWxsIHBlbmRpbmcgKi8KKwlyZGN0bAlyOSwgaWVuYWJsZQkvKiBJc29sYXRlIHBvc3NpYmxlIGludGVycnVwdHMgKi8KKwlhbmQJcjEyLCByMTIsIHI5CisJYm5lCXIxMiwgcjAsIDJiCisJLyogYnIJcmV0X2Zyb21faW50ZXJydXB0ICovIC8qIGZhbGwgdGhyb3VnaCB0byByZXRfZnJvbV9pbnRlcnJ1cHQgKi8KKworRU5UUlkocmV0X2Zyb21faW50ZXJydXB0KQorCWxkdwlyMSwgUFRfRVNUQVRVUyhzcCkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCAqLworCVRTVEJOWglyMSwgcjEsIEVTVEFUVVNfRVUsIEx1c2VyX3JldHVybgorCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwlHRVRfVEhSRUFEX0lORk8JcjEKKwlsZHcJcjQsIFRJX1BSRUVNUFRfQ09VTlQocjEpCisJYm5lCXI0LCByMCwgcmVzdG9yZV9hbGwKKworbmVlZF9yZXNjaGVkOgorCWxkdwlyNCwgVElfRkxBR1MocjEpCQkvKiA/IE5lZWQgcmVzY2hlZCBzZXQgKi8KKwlCVEJaCXIxMCwgcjQsIFRJRl9ORUVEX1JFU0NIRUQsIHJlc3RvcmVfYWxsCisJbGR3CXI0LCBQVF9FU1RBVFVTKHNwKQkvKiA/IEludGVycnVwdHMgb2ZmICovCisJYW5kaQlyMTAsIHI0LCBFU1RBVFVTX0VQSUUKKwliZXEJcjEwLCByMCwgcmVzdG9yZV9hbGwKKwltb3ZpYQlyNCwgUFJFRU1QVF9BQ1RJVkUKKwlzdHcJcjQsIFRJX1BSRUVNUFRfQ09VTlQocjEpCisJcmRjdGwJcjEwLCBzdGF0dXMJCS8qIGVuYWJsZSBpbnRycyBhZ2FpbiAqLworCW9yaQlyMTAsIHIxMCAsU1RBVFVTX1BJRQorCXdyY3RsCXN0YXR1cywgcjEwCisJUFVTSAlyMQorCWNhbGwJc2NoZWR1bGUKKwlQT1AJcjEKKwltb3YJcjQsIHIwCisJc3R3CXI0LCBUSV9QUkVFTVBUX0NPVU5UKHIxKQorCXJkY3RsCXIxMCwgc3RhdHVzCQkvKiBkaXNhYmxlIGludHJzICovCisJYW5kaQlyMTAsIHIxMCwgJWxvKH5TVEFUVVNfUElFKQorCXdyY3RsCXN0YXR1cywgcjEwCisJYnIJbmVlZF9yZXNjaGVkCisjZWxzZQorCWJyCXJlc3RvcmVfYWxsCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBIGZldyBzeXNjYWxsIHdyYXBwZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworLyoKKyAqIGludCBjbG9uZSh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIG5ld3NwLAorICoJCWludCBfX3VzZXIgKiBwYXJlbnRfdGlkcHRyLCBpbnQgX191c2VyICogY2hpbGRfdGlkcHRyLAorICoJCWludCB0bHNfdmFsKQorICovCitFTlRSWShzeXNfY2xvbmUpCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlhZGRpCXNwLCBzcCwgLTQKKwlzdHcJcjcsIDAoc3ApCS8qIFBhc3MgNXRoIGFyZyB0aHJ1IHN0YWNrICovCisJbW92CXI3LCByNgkJLyogNHRoIGFyZyBpcyAzcmQgb2YgY2xvbmUoKSAqLworCW1vdglyNiwgemVybwkvKiAzcmQgYXJnIGFsd2F5cyAwICovCisJY2FsbAlkb19mb3JrCisJYWRkaQlzcCwgc3AsIDQKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCXJldAorCitFTlRSWShzeXNfcnRfc2lncmV0dXJuKQorCVNBVkVfU1dJVENIX1NUQUNLCisJbW92CXI0LCBzcAorCWNhbGwJZG9fcnRfc2lncmV0dXJuCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlhZGRpCXJhLCByYSwgKGVuZF90cmFuc2xhdGVfcmNfYW5kX3JldCAtIHRyYW5zbGF0ZV9yY19hbmRfcmV0KQorCXJldAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgZmV3IG90aGVyIHdyYXBwZXJzIGFuZCBzdHVicworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3Byb3RlY3Rpb25fZXhjZXB0aW9uX3B0ZToKKwlyZGN0bAlyNiwgcHRlYWRkcgorCXNsbGkJcjYsIHI2LCAxMAorCWNhbGwJZG9fcGFnZV9mYXVsdAorCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCitwcm90ZWN0aW9uX2V4Y2VwdGlvbl9iYToKKwlyZGN0bAlyNiwgYmFkYWRkcgorCWNhbGwJZG9fcGFnZV9mYXVsdAorCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCitwcm90ZWN0aW9uX2V4Y2VwdGlvbl9pbnN0cjoKKwljYWxsCWhhbmRsZV9zdXBlcnZpc29yX2luc3RyCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK2hhbmRsZV9icmVha3BvaW50OgorCWNhbGwJYnJlYWtwb2ludF9jCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKKyNpZmRlZiBDT05GSUdfTklPUzJfQUxJR05NRU5UX1RSQVAKK2hhbmRsZV91bmFsaWduZWQ6CisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwljYWxsCWhhbmRsZV91bmFsaWduZWRfYworCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisjZWxzZQoraGFuZGxlX3VuYWxpZ25lZDoKKwljYWxsCWhhbmRsZV91bmFsaWduZWRfYworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorI2VuZGlmCisKK2hhbmRsZV9pbGxlZ2FsOgorCWNhbGwJaGFuZGxlX2lsbGVnYWxfYworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCitoYW5kbGVfZGl2ZXJyb3I6CisJY2FsbAloYW5kbGVfZGl2ZXJyb3JfYworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCisvKgorICogQmV3YXJlIC0gd2hlbiBlbnRlcmluZyByZXN1bWUsIHByZXYgKHRoZSBjdXJyZW50IHRhc2spIGlzCisgKiBpbiByNCwgbmV4dCAodGhlIG5ldyB0YXNrKSBpcyBpbiByNSwgZG9uJ3QgY2hhbmdlIHRoZXNlCisgKiByZWdpc3RlcnMuCisgKi8KK0VOVFJZKHJlc3VtZSkKKworCXJkY3RsCXI3LCBzdGF0dXMJCQkvKiBzYXZlIHRocmVhZCBzdGF0dXMgcmVnICovCisJc3R3CXI3LCBUQVNLX1RIUkVBRCArIFRIUkVBRF9LUFNSKHI0KQorCisJYW5kaQlyNywgcjcsICVsbyh+U1RBVFVTX1BJRSkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd3JjdGwJc3RhdHVzLCByNworCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlzdHcJc3AsIFRBU0tfVEhSRUFEICsgVEhSRUFEX0tTUChyNCkvKiBzYXZlIGtlcm5lbCBzdGFjayBwb2ludGVyICovCisJbGR3CXNwLCBUQVNLX1RIUkVBRCArIFRIUkVBRF9LU1AocjUpLyogcmVzdG9yZSBuZXcgdGhyZWFkIHN0YWNrICovCisJbW92aWEJcjI0LCBfY3VycmVudF90aHJlYWQJCS8qIHNhdmUgdGhyZWFkICovCisJR0VUX1RIUkVBRF9JTkZPIHIxCisJc3R3CXIxLCAwKHIyNCkKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCisJbGR3CXI3LCBUQVNLX1RIUkVBRCArIFRIUkVBRF9LUFNSKHI1KS8qIHJlc3RvcmUgdGhyZWFkIHN0YXR1cyByZWcgKi8KKwl3cmN0bAlzdGF0dXMsIHI3CisJcmV0CisKK0VOVFJZKHJldF9mcm9tX2ZvcmspCisJY2FsbAlzY2hlZHVsZV90YWlsCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK0VOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpCisJY2FsbAlzY2hlZHVsZV90YWlsCisJbW92CXI0LHIxNwkvKiBhcmcgKi8KKwljYWxscglyMTYJLyogZnVuY3Rpb24gKi8KKwlicglyZXRfZnJvbV9leGNlcHRpb24KKworLyoKKyAqIEtlcm5lbCB1c2VyIGhlbHBlcnMuCisgKgorICogRWFjaCBzZWdtZW50IGlzIDY0LWJ5dGUgYWxpZ25lZCBhbmQgd2lsbCBiZSBtYXBwZWQgdG8gdGhlIDxVc2VyIHNwYWNlPi4KKyAqIE5ldyBzZWdtZW50cyAoaWYgZXZlciBuZWVkZWQpIG11c3QgYmUgYWRkZWQgYWZ0ZXIgdGhlIGV4aXN0aW5nIG9uZXMuCisgKiBUaGlzIG1lY2hhbmlzbSBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciB0aGluZ3MgdGhhdCBhcmUgcmVhbGx5IHNtYWxsIGFuZAorICoganVzdGlmaWVkLCBhbmQgbm90IGJlIGFidXNlZCBmcmVlbHkuCisgKgorICovCisKKyAvKiBGaWxsaW5nIHBhZHMgd2l0aCB1bmRlZmluZWQgaW5zdHJ1Y3Rpb25zLiAqLworLm1hY3JvCWt1c2VyX3BhZCBzeW0gc2l6ZQorCS5pZgkoKC4gLSBcc3ltKSAmIDMpCisJLnJlcHQJKDQgLSAoLiAtIFxzeW0pICYgMykKKwkuYnl0ZQkwCisJLmVuZHIKKwkuZW5kaWYKKwkucmVwdAkoKFxzaXplIC0gKC4gLSBcc3ltKSkgLyA0KQorCS53b3JkCTB4ZGVhZGJlZWYKKwkuZW5kcgorLmVuZG0KKworCS5hbGlnbgk2CisJLmdsb2JsCV9fa3VzZXJfaGVscGVyX3N0YXJ0CitfX2t1c2VyX2hlbHBlcl9zdGFydDoKKworX19rdXNlcl9oZWxwZXJfdmVyc2lvbjoJCQkJLyogQCAweDEwMDAgKi8KKwkud29yZAkoKF9fa3VzZXJfaGVscGVyX2VuZCAtIF9fa3VzZXJfaGVscGVyX3N0YXJ0KSA+PiA2KQorCitfX2t1c2VyX2NtcHhjaGc6CQkJCS8qIEAgMHgxMDA0ICovCisJLyoKKwkgKiByNCBwb2ludGVyIHRvIGV4Y2hhbmdlIHZhcmlhYmxlCisJICogcjUgb2xkIHZhbHVlCisJICogcjYgbmV3IHZhbHVlCisJICovCitjbXB4Y2hnX2xkdzoKKwlsZHcJcjIsIDAocjQpCQkJLyogbG9hZCBjdXJyZW50IHZhbHVlICovCisJc3ViCXIyLCByMiwgcjUJCQkvKiBjb21wYXJlIHdpdGggb2xkIHZhbHVlICovCisJYm5lCXIyLCB6ZXJvLCBjbXB4Y2hnX3JldAorCisJLyogV2UgaGFkIGEgbWF0Y2gsIHN0b3JlIHRoZSBuZXcgdmFsdWUgKi8KK2NtcHhjaGdfc3R3OgorCXN0dwlyNiwgMChyNCkKK2NtcHhjaGdfcmV0OgorCXJldAorCisJa3VzZXJfcGFkIF9fa3VzZXJfY21weGNoZywgNjQKKworCS5nbG9ibAlfX2t1c2VyX3NpZ3RyYW1wCitfX2t1c2VyX3NpZ3RyYW1wOgorCW1vdmkJcjIsIF9fTlJfcnRfc2lncmV0dXJuCisJdHJhcAorCisJa3VzZXJfcGFkIF9fa3VzZXJfc2lndHJhbXAsIDY0CisKKwkuZ2xvYmwJX19rdXNlcl9oZWxwZXJfZW5kCitfX2t1c2VyX2hlbHBlcl9lbmQ6CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9oZWFkLlMgYi9hcmNoL25pb3MyL2tlcm5lbC9oZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyY2U0YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL2hlYWQuUwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICogQ29weXJpZ2h0IChDKSAyMDAxIFZpYyBQaGlsbGlwcywgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogQmFzZWQgb24gaGVhZC5TIGZvciBBbHRlcmEncyBFeGNhbGlidXIgZGV2ZWxvcG1lbnQgYm9hcmQgd2l0aCBuaW9zIHByb2Nlc3NvcgorICoKKyAqIEJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgRXhjYWxpYnVyIHNkayBkaXN0cmlidXRpb246CisgKglOQV9NZW1vcnlNYXAucywgTlJfSnVtcFRvU3RhcnQucywgTlJfU2V0dXAucywgTlJfQ1dQTWFuYWdlci5zCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW1hY3Jvcy5oPgorCisvKgorICogWkVST19QQUdFIGlzIGEgc3BlY2lhbCBwYWdlIHRoYXQgaXMgdXNlZCBmb3IgemVyby1pbml0aWFsaXplZAorICogZGF0YSBhbmQgQ09XLgorICovCisuZGF0YQorLmdsb2JhbCBlbXB0eV96ZXJvX3BhZ2UKKy5hbGlnbiAxMgorZW1wdHlfemVyb19wYWdlOgorCS5zcGFjZQlQQUdFX1NJWkUKKworLyoKKyAqIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgYXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBuaW9zJworICogU1RBVFVTIHJlZ2lzdGVyIHRvIGVtdWxhdGUgYSB1c2VyL3N1cGVydmlzb3IgbW9kZS4KKyAqLworCS5kYXRhCisJLmFsaWduCTIKKwkuc2V0IG5vYXQKKworCS5nbG9iYWwgX2N1cnJlbnRfdGhyZWFkCitfY3VycmVudF90aHJlYWQ6CisJLmxvbmcJMAorLyoKKyAqIElucHV0KHMpOiBwYXNzZWQgZnJvbSB1LWJvb3QKKyAqICAgcjQgLSBPcHRpb25hbCBwb2ludGVyIHRvIGEgYm9hcmQgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICogICByNSAtIE9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2FsIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGluaXQgUkFNCisgKiAgICAgICAgZGlzay4KKyAqICAgcjYgLSBPcHRpb25hbCBwb2ludGVyIHRvIHRoZSBwaHlzaWNhbCBlbmRpbmcgYWRkcmVzcyBvZiB0aGUgaW5pdCBSQU0KKyAqICAgICAgICBkaXNrLgorICogICByNyAtIE9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2FsIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgYW55IGtlcm5lbAorICogICAgICAgIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLgorICovCisKKy8qCisgKiBGaXJzdCBleGVjdXRhYmxlIGNvZGUgLSBkZXRlY3RlZCBhbmQganVtcGVkIHRvIGJ5IHRoZSBST00gYm9vdHN0cmFwCisgKiBpZiB0aGUgY29kZSByZXNpZGVzIGluIGZsYXNoIChsb29rcyBmb3IgIk5pb3MiIGF0IG9mZnNldCAweDBjIGZyb20KKyAqIHRoZSBwb3RlbnRpYWwgZXhlY3V0YWJsZSBpbWFnZSkuCisgKi8KKwlfX0hFQUQKK0VOVFJZKF9zdGFydCkKKwl3cmN0bAlzdGF0dXMsIHIwCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKworCS8qIEluaXRpYWxpemUgYWxsIGNhY2hlIGxpbmVzIHdpdGhpbiB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KKwltb3ZpYQlyMSwgTklPUzJfSUNBQ0hFX1NJWkUKKwltb3Z1aQlyMiwgTklPUzJfSUNBQ0hFX0xJTkVfU0laRQorCitpY2FjaGVfaW5pdDoKKwlpbml0aQlyMQorCXN1YglyMSwgcjEsIHIyCisJYmd0CXIxLCByMCwgaWNhY2hlX2luaXQKKwlicgkxZgorCisJLyoKKwkgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIENvZGUgaW4ganVtcAorCSAqIHRvIG91ciBoYW5kbGVyCisJICovCitFTlRSWShleGNlcHRpb25faGFuZGxlcl9ob29rKQorCW1vdmlhCXIyNCwgaW50aGFuZGxlcgorCWptcAlyMjQKKworRU5UUlkoZmFzdF9oYW5kbGVyKQorCW5leHRwYyBldAoraGVscGVyOgorCXN0dwlyMywgcjNzYXZlIC0gaGVscGVyKGV0KQorCisJcmRjdGwJcjMgLCBwdGVhZGRyCisJc3JsaQlyMywgcjMsIDEyCisJc2xsaQlyMywgcjMsIDIKKwltb3ZpYQlldCwgcGdkX2N1cnJlbnQKKworCWxkdwlldCwgMChldCkKKwlhZGQJcjMsIGV0LCByMworCWxkdwlldCwgMChyMykKKworCXJkY3RsCXIzLCBwdGVhZGRyCisJYW5kaQlyMywgcjMsIDB4ZmZmCisJYWRkCWV0LCByMywgZXQKKwlsZHcJZXQsIDAoZXQpCisJd3JjdGwJdGxiYWNjLCBldAorCW5leHRwYwlldAoraGVscGVyMjoKKwlsZHcJcjMsIHIzc2F2ZSAtIGhlbHBlcjIoZXQpCisJc3ViaQllYSwgZWEsIDQKKwllcmV0CityM3NhdmU6CisJLndvcmQgMHgwCitFTlRSWShmYXN0X2hhbmRsZXJfZW5kKQorCisxOgorCS8qCisJICogQWZ0ZXIgdGhlIGluc3RydWN0aW9uIGNhY2hlIGlzIGluaXRpYWxpemVkLCB0aGUgZGF0YSBjYWNoZSBtdXN0CisJICogYWxzbyBiZSBpbml0aWFsaXplZC4KKwkgKi8KKwltb3ZpYQlyMSwgTklPUzJfRENBQ0hFX1NJWkUKKwltb3Z1aQlyMiwgTklPUzJfRENBQ0hFX0xJTkVfU0laRQorCitkY2FjaGVfaW5pdDoKKwlpbml0ZAkwKHIxKQorCXN1YglyMSwgcjEsIHIyCisJYmd0CXIxLCByMCwgZGNhY2hlX2luaXQKKworCW5leHRwYwlyMQkJCS8qIEZpbmQgb3V0IHdoZXJlIHdlIGFyZSAqLworY2hrYWRyOgorCW1vdmlhCXIyLCBjaGthZHIKKwliZXEJcjEsIHIyLGZpbmlzaF9tb3ZlCS8qIFdlIGFyZSBydW5uaW5nIGluIFJBTSBkb25lICovCisJYWRkaQlyMSwgcjEsKF9zdGFydCAtIGNoa2FkcikJLyogU291cmNlICovCisJbW92aWEJcjIsIF9zdGFydAkJLyogRGVzdGluYXRpb24gKi8KKwltb3ZpYQlyMywgX19ic3Nfc3RhcnQJCS8qIEVuZCBvZiBjb3B5ICovCisKK2xvb3BfbW92ZToJCQkJLyogcjE6IHNyYywgcjI6IGRlc3QsIHIzOiBsYXN0IGRlc3QgKi8KKwlsZHcJcjgsIDAocjEpCQkvKiBsb2FkIGEgd29yZCBmcm9tIFtyMV0gKi8KKwlzdHcJcjgsIDAocjIpCQkvKiBzdG9yZSBhIHdvcmQgdG8gZGVzdCBbcjJdICovCisJZmx1c2hkCTAocjIpCQkJLyogRmx1c2ggY2FjaGUgZm9yIHNhZmV0eSAqLworCWFkZGkgCXIxLCByMSwgNAkJLyogaW5jIHRoZSBzcmMgYWRkciAqLworCWFkZGkJcjIsIHIyLCA0CQkvKiBpbmMgdGhlIGRlc3QgYWRkciAqLworCWJsdAlyMiwgcjMsIGxvb3BfbW92ZQorCisJbW92aWEJcjEsIGZpbmlzaF9tb3ZlCQkvKiBWTUEoX3N0YXJ0KS0+bDEgKi8KKwlqbXAJcjEJCQkvKiBqbXAgdG8gX3N0YXJ0ICovCisKK2ZpbmlzaF9tb3ZlOgorCisJLyogTWFzayBvZmYgYWxsIHBvc3NpYmxlIGludGVycnVwdHMgKi8KKwl3cmN0bAlpZW5hYmxlLCByMAorCisJLyogQ2xlYXIgLmJzcyAqLworCW1vdmlhCXIyLCBfX2Jzc19zdGFydAorCW1vdmlhCXIxLCBfX2Jzc19zdG9wCisxOgorCXN0YglyMCwgMChyMikKKwlhZGRpCXIyLCByMiwgMQorCWJuZQlyMSwgcjIsIDFiCisKKwltb3ZpYQlyMSwgaW5pdF90aHJlYWRfdW5pb24JLyogc2V0IHN0YWNrIGF0IHRvcCBvZiB0aGUgdGFzayB1bmlvbiAqLworCWFkZGkJc3AsIHIxLCBUSFJFQURfU0laRQorCW1vdmlhCXIyLCBfY3VycmVudF90aHJlYWQJLyogUmVtZW1iZXIgY3VycmVudCB0aHJlYWQgKi8KKwlzdHcJcjEsIDAocjIpCisKKwltb3ZpYQlyMSwgbmlvczJfYm9vdF9pbml0CS8qIHNhdmUgYXJncyByNC1yNyBwYXNzZWQgZnJvbSB1LWJvb3QgKi8KKwljYWxscglyMQorCisJbW92aWEJcjEsIHN0YXJ0X2tlcm5lbAkvKiBjYWxsIHN0YXJ0X2tlcm5lbCBhcyBhIHN1YnJvdXRpbmUgKi8KKwljYWxscglyMQorCisJLyogSWYgd2UgcmV0dXJuIGZyb20gc3RhcnRfa2VybmVsLCBicmVhayB0byB0aGUgb2NpIGRlYnVnZ2VyIGFuZAorCSAqIGJ1Z2dlcmVkIHdlIGFyZS4KKwkgKi8KKwlicmVhaworCisJLyogRW5kIG9mIHN0YXJ0dXAgY29kZSAqLworLnNldCBhdApkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvaW5zbmVtdS5TIGIvYXJjaC9uaW9zMi9rZXJuZWwvaW5zbmVtdS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmI2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9pbnNuZW11LlMKQEAgLTAsMCArMSw1OTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vZW50cnkuaD4KKworLnNldCBub2F0Cisuc2V0IG5vYnJlYWsKKworLyoKKyogRXhwbGljaXRseSBhbGxvdyB0aGUgdXNlIG9mIHIxICh0aGUgYXNzZW1ibGVyIHRlbXBvcmFyeSByZWdpc3RlcikKKyogd2l0aGluIHRoaXMgY29kZS4gVGhpcyByZWdpc3RlciBpcyBub3JtYWxseSByZXNlcnZlZCBmb3IgdGhlIHVzZSBvZgorKiB0aGUgY29tcGlsZXIuCisqLworCitFTlRSWShpbnN0cnVjdGlvbl90cmFwKQorCWxkdwlyMSwgUFRfUjEoc3ApCQkvLyBSZXN0b3JlIHJlZ2lzdGVycworCWxkdwlyMiwgUFRfUjIoc3ApCisJbGR3CXIzLCBQVF9SMyhzcCkKKwlsZHcJcjQsIFBUX1I0KHNwKQorCWxkdwlyNSwgUFRfUjUoc3ApCisJbGR3CXI2LCBQVF9SNihzcCkKKwlsZHcJcjcsIFBUX1I3KHNwKQorCWxkdwlyOCwgUFRfUjgoc3ApCisJbGR3CXI5LCBQVF9SOShzcCkKKwlsZHcJcjEwLCBQVF9SMTAoc3ApCisJbGR3CXIxMSwgUFRfUjExKHNwKQorCWxkdwlyMTIsIFBUX1IxMihzcCkKKwlsZHcJcjEzLCBQVF9SMTMoc3ApCisJbGR3CXIxNCwgUFRfUjE0KHNwKQorCWxkdwlyMTUsIFBUX1IxNShzcCkKKwlsZHcJcmEsIFBUX1JBKHNwKQorCWxkdwlmcCwgUFRfRlAoc3ApCisJbGR3CWdwLCBQVF9HUChzcCkKKwlsZHcJZXQsIFBUX0VTVEFUVVMoc3ApCisJd3JjdGwJZXN0YXR1cywgZXQKKwlsZHcJZWEsIFBUX0VBKHNwKQorCWxkdwlldCwgUFRfU1Aoc3ApCQkvKiBiYWNrdXAgc3AgaW4gZXQgKi8KKworCWFkZGkJc3AsIHNwLCBQVF9SRUdTX1NJWkUKKworCS8qIElOU1RSVUNUSU9OIEVNVUxBVElPTgorCSogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSoKKwkqIE5pb3MgSUkgcHJvY2Vzc29ycyBnZW5lcmF0ZSBleGNlcHRpb25zIGZvciB1bmltcGxlbWVudGVkIGluc3RydWN0aW9ucy4KKwkqIFRoZSByb3V0aW5lcyBiZWxvdyBlbXVsYXRlIHRoZXNlIGluc3RydWN0aW9ucy4gIERlcGVuZGluZyBvbiB0aGUKKwkqIHByb2Nlc3NvciBjb3JlLCB0aGUgb25seSBpbnN0cnVjdGlvbnMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGVtdWxhdGVkCisJKiBhcmUgZGl2LCBkaXZ1LCBtdWwsIG11bGksIG11bHhzcywgbXVseHN1LCBhbmQgbXVseHV1LgorCSoKKwkqIFRoZSBlbXVsYXRpb25zIG1hdGNoIHRoZSBpbnN0cnVjdGlvbnMsIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZworCSogbGltaXRhdGlvbnM6CisJKgorCSogMSkgVGhlIGVtdWxhdGlvbiByb3V0aW5lcyBkbyBub3QgZW11bGF0ZSB0aGUgdXNlIG9mIHRoZSBleGNlcHRpb24KKwkqICAgIHRlbXBvcmFyeSByZWdpc3RlciAoZXQpIGFzIGEgc291cmNlIG9wZXJhbmQgYmVjYXVzZSB0aGUgZXhjZXB0aW9uCisJKiAgICBoYW5kbGVyIGFscmVhZHkgaGFzIG1vZGlmaWVkIGl0LgorCSoKKwkqIDIpIFRoZSByb3V0aW5lcyBkbyBub3QgZW11bGF0ZSB0aGUgdXNlIG9mIHRoZSBzdGFjayBwb2ludGVyIChzcCkgb3IKKwkqICAgIHRoZSBleGNlcHRpb24gcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIgKGVhKSBhcyBhIGRlc3RpbmF0aW9uIGJlY2F1c2UKKwkqICAgIG1vZGlmeWluZyB0aGVzZSByZWdpc3RlcnMgY3Jhc2hlcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgb3IgdGhlCisJKiAgICBpbnRlcnJ1cHRlZCByb3V0aW5lLgorCSoKKwkqIERldGFpbGVkIERlc2lnbgorCSogLS0tLS0tLS0tLS0tLS0tCisJKgorCSogVGhlIGVtdWxhdGlvbiByb3V0aW5lcyBleHBlY3QgdGhlIGNvbnRlbnRzIG9mIGludGVnZXIgcmVnaXN0ZXJzIHIwLXIzMQorCSogdG8gYmUgb24gdGhlIHN0YWNrIGF0IGFkZHJlc3NlcyBzcCwgNChzcCksIDgoc3ApLCAuLi4gMTI0KHNwKS4gIFRoZQorCSogcm91dGluZXMgcmV0cmlldmUgc291cmNlIG9wZXJhbmRzIGZyb20gdGhlIHN0YWNrIGFuZCBtb2RpZnkgdGhlCisJKiBkZXN0aW5hdGlvbiByZWdpc3RlcidzIHZhbHVlIG9uIHRoZSBzdGFjayBwcmlvciB0byB0aGUgZW5kIG9mIHRoZQorCSogZXhjZXB0aW9uIGhhbmRsZXIuICBUaGVuIGFsbCByZWdpc3RlcnMgZXhjZXB0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlcgorCSogYXJlIHJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcy4KKwkqCisJKiBUaGUgaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZXMgdGhlIGV4Y2VwdGlvbiBpcyBmb3VuZCBhdCBhZGRyZXNzIC00KGVhKS4KKwkqIFRoZSBpbnN0cnVjdGlvbidzIE9QIGFuZCBPUFggZmllbGRzIGlkZW50aWZ5IHRoZSBvcGVyYXRpb24gdG8gYmUKKwkqIHBlcmZvcm1lZC4KKwkqCisJKiBPbmUgaW5zdHJ1Y3Rpb24sIG11bGksIGlzIGFuIEktdHlwZSBpbnN0cnVjdGlvbiB0aGF0IGlzIGlkZW50aWZpZWQgYnkKKwkqIGFuIE9QIGZpZWxkIG9mIDB4MjQuCisJKgorCSogbXVsaSAgIEFBQUFBLEJCQkJCLElJSUlJSUlJSUlJSUlJSUksLTB4MjQtCisJKiAgICAgICAgICAgMjcgICAgMjIgICAgICAgICAgICAgICAgNiAgICAgIDAgICAgPC0tIExTQiBvZiBmaWVsZAorCSoKKwkqIFRoZSByZW1haW5pbmcgZW11bGF0ZWQgaW5zdHJ1Y3Rpb25zIGFyZSBSLXR5cGUgYW5kIGhhdmUgYW4gT1AgZmllbGQKKwkqIG9mIDB4M2EuICBUaGVpciBPUFggZmllbGRzIGlkZW50aWZ5IHRoZW0uCisJKgorCSogUi10eXBlIEFBQUFBLEJCQkJCLENDQ0NDLFhYWFhYWCxOTk5OTiwtMHgzYS0KKwkqICAgICAgICAgICAyNyAgICAyMiAgICAxNyAgICAgMTEgICAgIDYgICAgICAwICA8LS0gTFNCIG9mIGZpZWxkCisJKgorCSoKKwkqIE9wY29kZSBFbmNvZGluZy4gIG11bGkgaXMgaWRlbnRpZmllZCBieSBpdHMgT1AgdmFsdWUuICBUaGVuIE9QWCAmIDB4MDIKKwkqIGlzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSBkaXZpc2lvbiBvcGNvZGVzIGFuZCB0aGUKKwkqIHJlbWFpbmluZyBtdWx0aXBsaWNhdGlvbiBvcGNvZGVzLgorCSoKKwkqIEluc3RydWN0aW9uICAgT1AgICAgICBPUFggICAgT1BYICYgMHgwMgorCSogLS0tLS0tLS0tLS0gICAtLS0tICAgIC0tLS0gICAtLS0tLS0tLS0tCisJKiBtdWxpICAgICAgICAgIDB4MjQKKwkqIGRpdnUgICAgICAgICAgMHgzYSAgICAweDI0ICAgICAgICAgMAorCSogZGl2ICAgICAgICAgICAweDNhICAgIDB4MjUgICAgICAgICAwCisJKiBtdWwgICAgICAgICAgIDB4M2EgICAgMHgyNyAgICAgICE9IDAKKwkqIG11bHh1dSAgICAgICAgMHgzYSAgICAweDA3ICAgICAgIT0gMAorCSogbXVseHN1ICAgICAgICAweDNhICAgIDB4MTcgICAgICAhPSAwCisJKiBtdWx4c3MgICAgICAgIDB4M2EgICAgMHgxZiAgICAgICE9IDAKKwkqLworCisKKwkvKgorCSogU2F2ZSBldmVyeXRoaW5nIG9uIHRoZSBzdGFjayB0byBtYWtlIGl0IGVhc3kgZm9yIHRoZSBlbXVsYXRpb24KKwkqIHJvdXRpbmVzIHRvIHJldHJpZXZlIHRoZSBzb3VyY2UgcmVnaXN0ZXIgb3BlcmFuZHMuCisJKi8KKworCWFkZGkgc3AsIHNwLCAtMTI4CisJc3R3IHplcm8sIDAoc3ApCS8qIFNhdmUgemVybyBvbiBzdGFjayB0byBhdm9pZCBzcGVjaWFsIGNhc2UgZm9yIHIwLiAqLworCXN0dyByMSwgNChzcCkKKwlzdHcgcjIsICA4KHNwKQorCXN0dyByMywgMTIoc3ApCisJc3R3IHI0LCAxNihzcCkKKwlzdHcgcjUsIDIwKHNwKQorCXN0dyByNiwgMjQoc3ApCisJc3R3IHI3LCAyOChzcCkKKwlzdHcgcjgsIDMyKHNwKQorCXN0dyByOSwgMzYoc3ApCisJc3R3IHIxMCwgNDAoc3ApCisJc3R3IHIxMSwgNDQoc3ApCisJc3R3IHIxMiwgNDgoc3ApCisJc3R3IHIxMywgNTIoc3ApCisJc3R3IHIxNCwgNTYoc3ApCisJc3R3IHIxNSwgNjAoc3ApCisJc3R3IHIxNiwgNjQoc3ApCisJc3R3IHIxNywgNjgoc3ApCisJc3R3IHIxOCwgNzIoc3ApCisJc3R3IHIxOSwgNzYoc3ApCisJc3R3IHIyMCwgODAoc3ApCisJc3R3IHIyMSwgODQoc3ApCisJc3R3IHIyMiwgODgoc3ApCisJc3R3IHIyMywgOTIoc3ApCisJCS8qIERvbid0IGJvdGhlciB0byBzYXZlIGV0LiAgSXQncyBhbHJlYWR5IGJlZW4gY2hhbmdlZC4gKi8KKwlyZGN0bCByNSwgZXN0YXR1cworCXN0dyByNSwgIDEwMChzcCkKKworCXN0dyBncCwgMTA0KHNwKQorCXN0dyBldCwgMTA4KHNwKQkvKiBldCBjb250YWlucyBwcmV2aW91cyBzcCB2YWx1ZS4gKi8KKwlzdHcgZnAsIDExMihzcCkKKwlzdHcgZWEsIDExNihzcCkKKwlzdHcgcmEsIDEyMChzcCkKKworCisJLyoKKwkqIFNwbGl0IHRoZSBpbnN0cnVjdGlvbiBpbnRvIGl0cyBmaWVsZHMuICBXZSBuZWVkIDQqQSwgNCpCLCBhbmQgNCpDIGFzCisJKiBvZmZzZXRzIHRvIHRoZSBzdGFjayBwb2ludGVyIGZvciBhY2Nlc3MgdG8gdGhlIHN0b3JlZCByZWdpc3RlciB2YWx1ZXMuCisJKi8KKwlsZHcgcjIsLTQoZWEpCS8qIHIyID0gQUFBQUEsQkJCQkIsSUlJSUlJSUlJSUlJSUlJSSxQUFBQUFAgKi8KKwlyb2xpIHIzLCByMiwgNwkvKiByMyA9IEJCQixJSUlJSUlJSUlJSUlJSUlJLFBQUFBQUCxBQUFBQSxCQiAqLworCXJvbGkgcjQsIHIzLCAzCS8qIHI0ID0gSUlJSUlJSUlJSUlJSUlJSSxQUFBQUFAsQUFBQUEsQkJCQkIgKi8KKwlyb2xpIHI1LCByNCwgMgkvKiByNSA9IElJSUlJSUlJSUlJSUlJLFBQUFBQUCxBQUFBQSxCQkJCQixJSSAqLworCXNyYWkgcjQsIHI0LCAxNgkvKiByNCA9IChzaWduLWV4dGVuZGVkKSBJTU0xNiAqLworCXJvbGkgcjYsIHI1LCA1CS8qIHI2ID0gWFhYWCxOTk5OTixQUFBQUFAsQUFBQUEsQkJCQkIsQ0NDQ0MsWFggKi8KKwlhbmRpIHIyLCByMiwgMHgzZgkvKiByMiA9IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLFBQUFBQUCAqLworCWFuZGkgcjMsIHIzLCAweDdjCS8qIHIzID0gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxBQUFBQSwwMCAqLworCWFuZGkgcjUsIHI1LCAweDdjCS8qIHI1ID0gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxCQkJCQiwwMCAqLworCWFuZGkgcjYsIHI2LCAweDdjCS8qIHI2ID0gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxDQ0NDQywwMCAqLworCisJLyogTm93CisJKiByMiA9IE9QCisJKiByMyA9IDQqQQorCSogcjQgPSBJTU0xNiAoc2lnbiBleHRlbmRlZCkKKwkqIHI1ID0gNCpCCisJKiByNiA9IDQqQworCSovCisKKwkvKgorCSogR2V0IHRoZSBvcGVyYW5kcy4KKwkqCisJKiBJdCBpcyBuZWNlc3NhcnkgdG8gY2hlY2sgZm9yIG11bGkgYmVjYXVzZSBpdCB1c2VzIGFuIEktdHlwZQorCSogaW5zdHJ1Y3Rpb24gZm9ybWF0LCB3aGlsZSB0aGUgb3RoZXIgaW5zdHJ1Y3Rpb25zIGFyZSBoYXZlIGFuIFItdHlwZQorCSogZm9ybWF0LgorCSoKKwkqICBQcmVwYXJlIGZvciBlaXRoZXIgbXVsdGlwbGljYXRpb24gb3IgZGl2aXNpb24gbG9vcC4KKwkqICBUaGV5IGJvdGggbG9vcCAzMiB0aW1lcy4KKwkqLworCW1vdmkgcjE0LCAzMgorCisJYWRkICByMywgcjMsIHNwCQkvKiByMyA9IGFkZHJlc3Mgb2YgQS1vcGVyYW5kLiAqLworCWxkdyAgcjMsIDAocjMpCQkvKiByMyA9IEEtb3BlcmFuZC4gKi8KKwltb3ZpIHI3LCAweDI0CQkvKiBtdWxpIG9wY29kZSAoSS10eXBlIGluc3RydWN0aW9uIGZvcm1hdCkgKi8KKwliZXEgcjIsIHI3LCBtdWxfaW1tZWQgLyogbXVsaSBkb2Vzbid0IHVzZSB0aGUgQiByZWdpc3RlciBhcyBhIHNvdXJjZSAqLworCisJYWRkICByNSwgcjUsIHNwCQkvKiByNSA9IGFkZHJlc3Mgb2YgQi1vcGVyYW5kLiAqLworCWxkdyAgcjUsIDAocjUpCQkvKiByNSA9IEItb3BlcmFuZC4gKi8KKwkJCQkvKiByNCA9IFNTU1NTU1NTU1NTU1NTU1MsLS0tLS1JTU0xNi0tLS0tLSAqLworCQkJCS8qIElNTTE2IG5vdCBuZWVkZWQsIGFsaWduIE9QWCBwb3J0aW9uICovCisJCQkJLyogcjQgPSBTU1NTU1NTU1NTU1NTU1NTLENDQ0NDLC1PUFgtLSwwMDAwMCAqLworCXNybGkgcjQsIHI0LCA1CQkvKiByNCA9IDAwMDAwLFNTU1NTU1NTU1NTU1NTU1MsQ0NDQ0MsLU9QWC0tICovCisJYW5kaSByNCwgcjQsIDB4M2YJLyogcjQgPSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwtT1BYLS0gKi8KKworCS8qIE5vdworCSogcjIgPSBPUAorCSogcjMgPSBzcmMxCisJKiByNSA9IHNyYzIKKwkqIHI0ID0gT1BYIChubyBsb25nZXIgY2FuIGJlIG11bGkpCisJKiByNiA9IDQqQworCSovCisKKworCS8qCisJKiAgTXVsdGlwbHkgb3IgRGl2aWRlPworCSovCisJYW5kaSByNywgcjQsIDB4MDIJLyogRm9yIFItdHlwZSBtdWx0aXBseSBpbnN0cnVjdGlvbnMsCisJCQkJICAgT1BYICYgMHgwMiAhPSAwICovCisJYm5lIHI3LCB6ZXJvLCBtdWx0aXBseQorCisKKwkvKiBESVZJU0lPTgorCSoKKwkqIERpdmlkZSBhbiB1bnNpZ25lZCBkaXZpZGVuZCBieSBhbiB1bnNpZ25lZCBkaXZpc29yIHVzaW5nCisJKiBhIHNoaWZ0LWFuZC1zdWJ0cmFjdCBhbGdvcml0aG0uICBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cworCSogNDMgZGl2IDcgPSA2IGZvciA4LWJpdCBpbnRlZ2Vycy4gIFRoaXMgY2xhc3NpYyBhbGdvcml0aG0gdXNlcyBhCisJKiBzaW5nbGUgcmVnaXN0ZXIgdG8gc3RvcmUgYm90aCB0aGUgZGl2aWRlbmQgYW5kIHRoZSBxdW90aWVudCwKKwkqIGFsbG93aW5nIGJvdGggdmFsdWVzIHRvIGJlIHNoaWZ0ZWQgd2l0aCBhIHNpbmdsZSBpbnN0cnVjdGlvbi4KKwkqCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5kZXIgZGl2aWRlbmQ6cXVvdGllbnQKKwkqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLQorCSogICBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwICAgICAwMDEwMTAxMToKKwkqICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMCAgICAgMDEwMTAxMTpfCisJKiAgIHJlbWFpbmRlciA+PSBkaXZpc29yPyBubyAgICAgMDAwMDAwMDAgICAgIDAxMDEwMTE6MAorCSogICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwICAgICAxMDEwMTE6MF8KKwkqICAgcmVtYWluZGVyID49IGRpdmlzb3I/IG5vICAgICAwMDAwMDAwMCAgICAgMTAxMDExOjAwCisJKiAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDEgICAgIDAxMDExOjAwXworCSogICByZW1haW5kZXIgPj0gZGl2aXNvcj8gbm8gICAgIDAwMDAwMDAxICAgICAwMTAxMTowMDAKKwkqICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAxMCAgICAgMTAxMTowMDBfCisJKiAgIHJlbWFpbmRlciA+PSBkaXZpc29yPyBubyAgICAgMDAwMDAwMTAgICAgIDEwMTE6MDAwMAorCSogICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMTAxICAgICAwMTE6MDAwMF8KKwkqICAgcmVtYWluZGVyID49IGRpdmlzb3I/IG5vICAgICAwMDAwMDEwMSAgICAgMDExOjAwMDAwCisJKiAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDEwMTAgICAgIDExOjAwMDAwXworCSogICByZW1haW5kZXIgPj0gZGl2aXNvcj8geWVzICAgIDAwMDAxMDEwICAgICAxMTowMDAwMDEKKwkqICAgICAgIHJlbWFpbmRlciAtPSBkaXZpc29yICAgLSAwMDAwMDExMQorCSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMTEgICAgIDExOjAwMDAwMQorCSogICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMTExICAgICAxOjAwMDAwMV8KKwkqICAgcmVtYWluZGVyID49IGRpdmlzb3I/IHllcyAgICAwMDAwMDExMSAgICAgMTowMDAwMDExCisJKiAgICAgICByZW1haW5kZXIgLT0gZGl2aXNvciAgIC0gMDAwMDAxMTEKKwkqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLQorCSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwICAgICAxOjAwMDAwMTEKKwkqICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMSAgICAgOjAwMDAwMTFfCisJKiAgIHJlbWFpbmRlciA+PSBkaXZpc29yPyBubyAgICAgMDAwMDAwMDEgICAgIDowMDAwMDExMAorCSoKKwkqIFRoZSBxdW90aWVudCBpcyAwMDAwMDExMC4KKwkqLworCitkaXZpZGU6CisJLyoKKwkqICBQcmVwYXJlIGZvciBkaXZpc2lvbiBieSBhc3N1bWluZyB0aGUgcmVzdWx0CisJKiAgaXMgdW5zaWduZWQsIGFuZCBzdG9yaW5nIGl0cyAic2lnbiIgYXMgMC4KKwkqLworCW1vdmkgcjE3LCAwCisKKworCS8qIFdoaWNoIGRpdmlzaW9uIG9wY29kZT8gKi8KKwl4b3JpIHI3LCByNCwgMHgyNQkJLyogT1BYIG9mIGRpdiAqLworCWJuZSByNywgemVybywgdW5zaWduZWRfZGl2aXNpb24KKworCisJLyoKKwkqICBPUFggaXMgZGl2LiAgRGV0ZXJtaW5lIGFuZCBzdG9yZSB0aGUgc2lnbiBvZiB0aGUgcXVvdGllbnQuCisJKiAgVGhlbiB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBib3RoIG9wZXJhbmRzLgorCSovCisJeG9yIHIxNywgcjMsIHI1CQkvKiBNU0IgY29udGFpbnMgc2lnbiBvZiBxdW90aWVudCAqLworCWJnZSByMyx6ZXJvLGRpdmlkZW5kX2lzX25vbm5lZ2F0aXZlCisJc3ViIHIzLCB6ZXJvLCByMwkvKiAtcjMgKi8KK2RpdmlkZW5kX2lzX25vbm5lZ2F0aXZlOgorCWJnZSByNSwgemVybywgZGl2aXNvcl9pc19ub25uZWdhdGl2ZQorCXN1YiByNSwgemVybywgcjUJLyogLXI1ICovCitkaXZpc29yX2lzX25vbm5lZ2F0aXZlOgorCisKK3Vuc2lnbmVkX2RpdmlzaW9uOgorCS8qIEluaXRpYWxpemUgdGhlIHVuc2lnbmVkLWRpdmlzaW9uIGxvb3AuICovCisJbW92aSByMTMsIDAJLyogcmVtYWluZGVyID0gMCAqLworCisJLyogTm93CisJKiByMyA9IGRpdmlkZW5kIDogcXVvdGllbnQKKwkqIHI0ID0gMHgyNSBmb3IgZGl2LCAweDI0IGZvciBkaXZ1CisJKiByNSA9IGRpdmlzb3IKKwkqIHIxMyA9IHJlbWFpbmRlcgorCSogcjE0ID0gbG9vcCBjb3VudGVyIChhbHJlYWR5IGluaXRpYWxpemVkIHRvIDMyKQorCSogcjE3ID0gTVNCIGNvbnRhaW5zIHNpZ24gb2YgcXVvdGllbnQKKwkqLworCisKKwkvKgorCSogICBmb3IgKGNvdW50ID0gMzI7IGNvdW50ID4gMDsgLS1jb3VudCkKKwkqICAgeworCSovCitkaXZpZGVfbG9vcDoKKworCS8qCisJKiAgICAgICBEaXZpc2lvbjoKKwkqCisJKiAgICAgICAocmVtYWluZGVyOmRpdmlkZW5kOnF1b3RpZW50KSA8PD0gMTsKKwkqLworCXNsbGkgcjEzLCByMTMsIDEKKwljbXBsdCByNywgcjMsIHplcm8JLyogcjcgPSBNU0Igb2YgcjMgKi8KKwlvciByMTMsIHIxMywgcjcKKwlzbGxpIHIzLCByMywgMQorCisKKwkvKgorCSogICAgICAgaWYgKHJlbWFpbmRlciA+PSBkaXZpc29yKQorCSogICAgICAgeworCSogICAgICAgICAgIHNldCBMU0Igb2YgcXVvdGllbnQKKwkqICAgICAgICAgICByZW1haW5kZXIgLT0gZGl2aXNvcjsKKwkqICAgICAgIH0KKwkqLworCWJsdHUgcjEzLCByNSwgZGl2X3NraXAKKwlvcmkgcjMsIHIzLCAxCisJc3ViIHIxMywgcjEzLCByNQorZGl2X3NraXA6CisKKwkvKgorCSogICB9CisJKi8KKwlzdWJpIHIxNCwgcjE0LCAxCisJYm5lIHIxNCwgemVybywgZGl2aWRlX2xvb3AKKworCisJLyogTm93CisJKiByMyA9IHF1b3RpZW50CisJKiByNCA9IDB4MjUgZm9yIGRpdiwgMHgyNCBmb3IgZGl2dQorCSogcjYgPSA0KkMKKwkqIHIxNyA9IE1TQiBjb250YWlucyBzaWduIG9mIHF1b3RpZW50CisJKi8KKworCisJLyoKKwkqICBDb25kaXRpb25hbGx5IG5lZ2F0ZSBzaWduZWQgcXVvdGllbnQuICBJZiBxdW90aWVudCBpcyB1bnNpZ25lZCwKKwkqICB0aGUgc2lnbiBhbHJlYWR5IGlzIGluaXRpYWxpemVkIHRvIDAuCisJKi8KKwliZ2UgcjE3LCB6ZXJvLCBxdW90aWVudF9pc19ub25uZWdhdGl2ZQorCXN1YiByMywgemVybywgcjMJCS8qIC1yMyAqLworCXF1b3RpZW50X2lzX25vbm5lZ2F0aXZlOgorCisKKwkvKgorCSogIEZpbmFsIHF1b3RpZW50IGlzIGluIHIzLgorCSovCisJYWRkIHI2LCByNiwgc3AKKwlzdHcgcjMsIDAocjYpCS8qIHdyaXRlIHF1b3RpZW50IHRvIHN0YWNrICovCisJYnIgcmVzdG9yZV9yZWdpc3RlcnMKKworCisKKworCS8qIE1VTFRJUExJQ0FUSU9OCisJKgorCSogQSAicHJvZHVjdCIgaXMgdGhlIG51bWJlciB0aGF0IG9uZSBnZXRzIGJ5IHN1bW1pbmcgYSAibXVsdGlwbGljYW5kIgorCSogc2V2ZXJhbCB0aW1lcy4gIFRoZSAibXVsdGlwbGllciIgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZQorCSogbXVsdGlwbGljYW5kIHRoYXQgYXJlIHN1bW1lZC4KKwkqCisJKiBBY3R1YWwgbXVsdGlwbGljYXRpb24gYWxnb3JpdGhtcyBkb24ndCB1c2UgcmVwZWF0ZWQgYWRkaXRpb24sIGhvd2V2ZXIuCisJKiBTaGlmdC1hbmQtYWRkIGFsZ29yaXRobXMgZ2V0IHRoZSBzYW1lIGFuc3dlciBhcyByZXBlYXRlZCBhZGRpdGlvbiwgYW5kCisJKiB0aGV5IGFyZSBmYXN0ZXIuICBUbyBjb21wdXRlIHRoZSBsb3dlciBoYWxmIG9mIGEgcHJvZHVjdCAocHBwcCBiZWxvdykKKwkqIG9uZSBzaGlmdHMgdGhlIHByb2R1Y3QgbGVmdCBiZWZvcmUgYWRkaW5nIGluIGVhY2ggb2YgdGhlIHBhcnRpYWwKKwkqIHByb2R1Y3RzIChhICogbW1tbSkgdGhyb3VnaCAoZCAqIG1tbW0pLgorCSoKKwkqIFRvIGNvbXB1dGUgdGhlIHVwcGVyIGhhbGYgb2YgYSBwcm9kdWN0IChQUFBQIGJlbG93KSwgb25lIGFkZHMgaW4gdGhlCisJKiBwYXJ0aWFsIHByb2R1Y3RzIChkICogbW1tbSkgdGhyb3VnaCAoYSAqIG1tbW0pLCBlYWNoIHRpbWUgZm9sbG93aW5nCisJKiB0aGUgYWRkIGJ5IGEgcmlnaHQgc2hpZnQgb2YgdGhlIHByb2R1Y3QuCisJKgorCSogICAgIG1tbW0KKwkqICAgKiBhYmNkCisJKiAgIC0tLS0tLQorCSogICAgICMjIyMgID0gZCAqIG1tbW0KKwkqICAgICMjIyMgICA9IGMgKiBtbW1tCisJKiAgICMjIyMgICAgPSBiICogbW1tbQorCSogICMjIyMgICAgID0gYSAqIG1tbW0KKwkqIC0tLS0tLS0tCisJKiBQUFBQcHBwcAorCSoKKwkqIFRoZSBleGFtcGxlIGFib3ZlIHNob3dzIDQgcGFydGlhbCBwcm9kdWN0cy4gIENvbXB1dGluZyBhY3R1YWwgTmlvcyBJSQorCSogcHJvZHVjdHMgcmVxdWlyZXMgMzIgcGFydGlhbHMuCisJKgorCSogSXQgaXMgcG9zc2libGUgdG8gY29tcHV0ZSB0aGUgcmVzdWx0IG9mIG11bHhzdSBmcm9tIHRoZSByZXN1bHQgb2YKKwkqIG11bHh1dSBiZWNhdXNlIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVzdWx0cyBvZiB0aGVzZSB0d28KKwkqIG9wY29kZXMgaXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJ0aWFsIHByb2R1Y3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBzaWduCisJKiBiaXQgb2YgckEuCisJKgorCSogICBtdWx4c3UgPSBtdWx4dXUgLSAockEgPCAwKSA/IHJCIDogMDsKKwkqCisJKiBJdCBpcyBwb3NzaWJsZSB0byBjb21wdXRlIHRoZSByZXN1bHQgb2YgbXVseHNzIGZyb20gdGhlIHJlc3VsdCBvZgorCSogbXVseHN1IGJlY2F1c2UgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZXN1bHRzIG9mIHRoZXNlIHR3bworCSogb3Bjb2RlcyBpcyB0aGUgdmFsdWUgb2YgdGhlIHBhcnRpYWwgcHJvZHVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNpZ24KKwkqIGJpdCBvZiByQi4KKwkqCisJKiAgIG11bHhzcyA9IG11bHhzdSAtIChyQiA8IDApID8gckEgOiAwOworCSoKKwkqLworCittdWxfaW1tZWQ6CisJLyogT3Bjb2RlIGlzIG11bGkuICBDaGFuZ2UgaXQgaW50byBtdWwgZm9yIHJlbWFpbmRlciBvZiBhbGdvcml0aG0uICovCisJbW92IHI2LCByNQkJLyogRmllbGQgQiBpcyBkZXN0IHJlZ2lzdGVyLCBub3QgZmllbGQgQy4gKi8KKwltb3YgcjUsIHI0CQkvKiBGaWVsZCBJTU0xNiBpcyBzcmMyLCBub3QgZmllbGQgQi4gKi8KKwltb3ZpIHI0LCAweDI3CQkvKiBPUFggb2YgbXVsIGlzIDB4MjcgKi8KKworbXVsdGlwbHk6CisJLyogSW5pdGlhbGl6ZSB0aGUgbXVsdGlwbGljYXRpb24gbG9vcC4gKi8KKwltb3ZpIHI5LCAwCS8qIG11bF9wcm9kdWN0ICAgID0gMCAqLworCW1vdmkgcjEwLCAwCS8qIG11bHh1dV9wcm9kdWN0ID0gMCAqLworCW1vdiByMTEsIHI1CS8qIHNhdmUgb3JpZ2luYWwgbXVsdGlwbGllciBmb3IgbXVseHN1IGFuZCBtdWx4c3MgKi8KKwltb3YgcjEyLCByNQkvKiBtdWx4dXVfbXVsdGlwbGllciAod2lsbCBiZSBzaGlmdGVkKSAqLworCW1vdmkgcjE2LCAxCS8qIHVzZWQgdG8gY3JlYXRlICJyb3JpIEIsQSwxIiBmcm9tICJyb3IgQixBLHIxNiIgKi8KKworCS8qIE5vdworCSogcjMgPSBtdWx0aXBsaWNhbmQKKwkqIHI1ID0gbXVsX211bHRpcGxpZXIKKwkqIHI2ID0gNCAqIGRlc3RfcmVnaXN0ZXIgKHVzZWQgbGF0ZXIgYXMgb2Zmc2V0IHRvIHNwKQorCSogcjcgPSB0ZW1wCisJKiByOSA9IG11bF9wcm9kdWN0CisJKiByMTAgPSBtdWx4dXVfcHJvZHVjdAorCSogcjExID0gb3JpZ2luYWwgbXVsdGlwbGllcgorCSogcjEyID0gbXVseHV1X211bHRpcGxpZXIKKwkqIHIxNCA9IGxvb3AgY291bnRlciAoYWxyZWFkeSBpbml0aWFsaXplZCkKKwkqIHIxNiA9IDEKKwkqLworCisKKwkvKgorCSogICBmb3IgKGNvdW50ID0gMzI7IGNvdW50ID4gMDsgLS1jb3VudCkKKwkqICAgeworCSovCittdWx0aXBseV9sb29wOgorCisJLyoKKwkqICAgICAgIG11bF9wcm9kdWN0IDw8PSAxOworCSogICAgICAgbHNiID0gbXVsdGlwbGllciAmIDE7CisJKi8KKwlzbGxpIHI5LCByOSwgMQorCWFuZGkgcjcsIHIxMiwgMQorCisJLyoKKwkqICAgICAgIGlmIChsc2IgPT0gMSkKKwkqICAgICAgIHsKKwkqICAgICAgICAgICBtdWx4dXVfcHJvZHVjdCArPSBtdWx0aXBsaWNhbmQ7CisJKiAgICAgICB9CisJKi8KKwliZXEgcjcsIHplcm8sIG11bHhfc2tpcAorCWFkZCByMTAsIHIxMCwgcjMKKwljbXBsdHUgcjcsIHIxMCwgcjMgLyogU2F2ZSB0aGUgY2FycnkgZnJvbSB0aGUgTVNCIG9mIG11bHh1dV9wcm9kdWN0LiAqLworCXJvciByNywgcjcsIHIxNgkvKiByNyA9IDB4ODAwMDAwMDAgb24gY2FycnksIG9yIGVsc2UgMHgwMDAwMDAwMCAqLworbXVseF9za2lwOgorCisJLyoKKwkqICAgICAgIGlmIChNU0Igb2YgbXVsX211bHRpcGxpZXIgPT0gMSkKKwkqICAgICAgIHsKKwkqICAgICAgICAgICBtdWxfcHJvZHVjdCArPSBtdWx0aXBsaWNhbmQ7CisJKiAgICAgICB9CisJKi8KKwliZ2UgcjUsIHplcm8sIG11bF9za2lwCisJYWRkIHI5LCByOSwgcjMKK211bF9za2lwOgorCisJLyoKKwkqICAgICAgIG11bHh1dV9wcm9kdWN0ID4+PSAxOyAgICAgICAgICAgbG9naWNhbCBzaGlmdAorCSogICAgICAgbXVsX211bHRpcGxpZXIgPDw9IDE7ICAgICAgICAgICBkb25lIHdpdGggTVNCCisJKiAgICAgICBtdWx4X211bHRpcGxpZXIgPj49IDE7ICAgICAgICAgIGRvbmUgd2l0aCBMU0IKKwkqLworCXNybGkgcjEwLCByMTAsIDEKKwlvciByMTAsIHIxMCwgcjcJCS8qIE9SIGluIHRoZSBzYXZlZCBjYXJyeSBiaXQuICovCisJc2xsaSByNSwgcjUsIDEKKwlzcmxpIHIxMiwgcjEyLCAxCisKKworCS8qCisJKiAgIH0KKwkqLworCXN1YmkgcjE0LCByMTQsIDEKKwlibmUgcjE0LCB6ZXJvLCBtdWx0aXBseV9sb29wCisKKworCS8qCisJKiAgTXVsdGlwbHkgZW11bGF0aW9uIGxvb3AgZG9uZS4KKwkqLworCisJLyogTm93CisJKiByMyA9IG11bHRpcGxpY2FuZAorCSogcjQgPSBPUFgKKwkqIHI2ID0gNCAqIGRlc3RfcmVnaXN0ZXIgKHVzZWQgbGF0ZXIgYXMgb2Zmc2V0IHRvIHNwKQorCSogcjcgPSB0ZW1wCisJKiByOSA9IG11bF9wcm9kdWN0CisJKiByMTAgPSBtdWx4dXVfcHJvZHVjdAorCSogcjExID0gb3JpZ2luYWwgbXVsdGlwbGllcgorCSovCisKKworCS8qIENhbGN1bGF0ZSBhZGRyZXNzIGZvciByZXN1bHQgZnJvbSA0ICogZGVzdF9yZWdpc3RlciAqLworCWFkZCByNiwgcjYsIHNwCisKKworCS8qCisJKiBTZWxlY3QvY29tcHV0ZSB0aGUgcmVzdWx0IGJhc2VkIG9uIE9QWC4KKwkqLworCisKKwkvKiBPUFggPT0gbXVsPyAgVGhlbiBzdG9yZS4gKi8KKwl4b3JpIHI3LCByNCwgMHgyNworCWJlcSByNywgemVybywgc3RvcmVfcHJvZHVjdAorCisJLyogSXQncyBvbmUgb2YgdGhlIG11bHguLiBvcGNvZGVzLiAgTW92ZSBvdmVyIHRoZSByZXN1bHQuICovCisJbW92IHI5LCByMTAKKworCS8qIE9QWCA9PSBtdWx4dXU/ICBUaGVuIHN0b3JlLiAqLworCXhvcmkgcjcsIHI0LCAweDA3CisJYmVxIHI3LCB6ZXJvLCBzdG9yZV9wcm9kdWN0CisKKwkvKiBDb21wdXRlIG11bHhzdQorCSAqCisJICogbXVseHN1ID0gbXVseHV1IC0gKHJBIDwgMCkgPyByQiA6IDA7CisJICovCisJYmdlIHIzLCB6ZXJvLCBtdWx4c3Vfc2tpcAorCXN1YiByOSwgcjksIHIxMQorbXVseHN1X3NraXA6CisKKwkvKiBPUFggPT0gbXVseHN1PyAgVGhlbiBzdG9yZS4gKi8KKwl4b3JpIHI3LCByNCwgMHgxNworCWJlcSByNywgemVybywgc3RvcmVfcHJvZHVjdAorCisJLyogQ29tcHV0ZSBtdWx4c3MKKwkgKgorCSAqIG11bHhzcyA9IG11bHhzdSAtIChyQiA8IDApID8gckEgOiAwOworCSAqLworCWJnZSByMTEsemVybyxtdWx4c3Nfc2tpcAorCXN1YiByOSwgcjksIHIzCittdWx4c3Nfc2tpcDoKKwkvKiBBdCB0aGlzIHBvaW50LCBhc3N1bWUgdGhhdCBPUFggaXMgbXVseHNzLCBzbyBzdG9yZSovCisKKworc3RvcmVfcHJvZHVjdDoKKwlzdHcgcjksIDAocjYpCisKKworcmVzdG9yZV9yZWdpc3RlcnM6CisJCQkvKiBObyBuZWVkIHRvIHJlc3RvcmUgcjAuICovCisJbGR3IHI1LCAxMDAoc3ApCisJd3JjdGwgZXN0YXR1cywgcjUKKworCWxkdyByMSwgNChzcCkKKwlsZHcgcjIsIDgoc3ApCisJbGR3IHIzLCAxMihzcCkKKwlsZHcgcjQsIDE2KHNwKQorCWxkdyByNSwgMjAoc3ApCisJbGR3IHI2LCAyNChzcCkKKwlsZHcgcjcsIDI4KHNwKQorCWxkdyByOCwgMzIoc3ApCisJbGR3IHI5LCAzNihzcCkKKwlsZHcgcjEwLCA0MChzcCkKKwlsZHcgcjExLCA0NChzcCkKKwlsZHcgcjEyLCA0OChzcCkKKwlsZHcgcjEzLCA1MihzcCkKKwlsZHcgcjE0LCA1NihzcCkKKwlsZHcgcjE1LCA2MChzcCkKKwlsZHcgcjE2LCA2NChzcCkKKwlsZHcgcjE3LCA2OChzcCkKKwlsZHcgcjE4LCA3MihzcCkKKwlsZHcgcjE5LCA3NihzcCkKKwlsZHcgcjIwLCA4MChzcCkKKwlsZHcgcjIxLCA4NChzcCkKKwlsZHcgcjIyLCA4OChzcCkKKwlsZHcgcjIzLCA5MihzcCkKKwkJCS8qIERvZXMgbm90IG5lZWQgdG8gcmVzdG9yZSBldCAqLworCWxkdyBncCwgMTA0KHNwKQorCisJbGR3IGZwLCAxMTIoc3ApCisJbGR3IGVhLCAxMTYoc3ApCisJbGR3IHJhLCAxMjAoc3ApCisJbGR3IHNwLCAxMDgoc3ApCS8qIGxhc3QgcmVzdG9yZSBzcCAqLworCWVyZXQKKworLnNldCBhdAorLnNldCBicmVhawpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvaXJxLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWI3NGFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvaXJxLmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogYmFzZWQgb24gaXJxLmMgZnJvbSBtNjhrIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworc3RhdGljIHUzMiBpZW5hYmxlOworCithc21saW5rYWdlIHZvaWQgZG9fSVJRKGludCBod2lycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKm9sZHJlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CisJaW50IGlycTsKKworCWlycV9lbnRlcigpOworCWlycSA9IGlycV9maW5kX21hcHBpbmcoTlVMTCwgaHdpcnEpOworCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCWlycV9leGl0KCk7CisKKwlzZXRfaXJxX3JlZ3Mob2xkcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoaXBfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlpZW5hYmxlIHw9ICgxIDw8IGQtPmh3aXJxKTsKKwlXUkNUTChDVExfSUVOQUJMRSwgaWVuYWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoaXBfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJaWVuYWJsZSAmPSB+KDEgPDwgZC0+aHdpcnEpOworCVdSQ1RMKENUTF9JRU5BQkxFLCBpZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJOSU9TMi1JTlRDIiwKKwkuaXJxX3VubWFzawk9IGNoaXBfdW5tYXNrLAorCS5pcnFfbWFzawk9IGNoaXBfbWFzaywKK307CisKK3N0YXRpYyBpbnQgaXJxX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJaXJxX2h3X251bWJlcl90IGh3X2lycV9udW0pCit7CisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZtX2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9kb21haW5fb3BzIGlycV9vcHMgPSB7CisJLm1hcAk9IGlycV9tYXAsCisJLnhsYXRlCT0gaXJxX2RvbWFpbl94bGF0ZV9vbmVjZWxsLAorfTsKKwordm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYWx0cixuaW9zMi0xLjAiKTsKKwlpZiAoIW5vZGUpCisJCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYWx0cixuaW9zMi0xLjEiKTsKKworCUJVR19PTighbm9kZSk7CisKKwlkb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIobm9kZSwgTklPUzJfQ1BVX05SX0lSUVMsICZpcnFfb3BzLCBOVUxMKTsKKwlCVUdfT04oIWRvbWFpbik7CisKKwlpcnFfc2V0X2RlZmF1bHRfaG9zdChkb21haW4pOworCW9mX25vZGVfcHV0KG5vZGUpOworCS8qIExvYWQgdGhlIGluaXRpYWwgaWVuYWJsZSB2YWx1ZSAqLworCWllbmFibGUgPSBSRENUTChDVExfSUVOQUJMRSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9taXNhbGlnbmVkLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9taXNhbGlnbmVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU1OTA3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL21pc2FsaWduZWQuYwpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqICBsaW51eC9hcmNoL25pb3MyL2tlcm5lbC9taXNhbGlnbmVkLmMKKyAqCisgKiAgYmFzaWMgZW11bGF0aW9uIGZvciBtaXMtYWxpZ25lZCBhY2Nlc3NlcyBvbiB0aGUgTklPUyBJSSBjcHUKKyAqICBtb2RlbGxlZCBhZnRlciB0aGUgdmVyc2lvbiBmb3IgYXJtIGluIGFybS9hbGlnbm1lbnQuYworICoKKyAqICBCcmFkIFBhcmtlciA8YnJhZEBoZWVsdG9lLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQW1iaWVudCBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMjAxMCBBbHRlcmEgQ29ycG9yYXRpb24sIFNhbiBKb3NlLCBDYWxpZm9ybmlhLCBVU0EuCisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIEFycm93IEVsZWN0cm9uaWNzLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YKKyAqIHRoaXMgYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworLyogaW5zdHJ1Y3Rpb25zIHdlIGVtdWxhdGUgKi8KKyNkZWZpbmUgSU5TVF9MREhVCTB4MGIKKyNkZWZpbmUgSU5TVF9TVEgJMHgwZAorI2RlZmluZSBJTlNUX0xESAkweDBmCisjZGVmaW5lIElOU1RfU1RXCTB4MTUKKyNkZWZpbmUgSU5TVF9MRFcJMHgxNworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYV91c2VyLCBtYV9rZXJuLCBtYV9za2lwcGVkLCBtYV9oYWxmLCBtYV93b3JkOworCitzdGF0aWMgdW5zaWduZWQgaW50IG1hX3VzZXJtb2RlOworI2RlZmluZSBVTV9XQVJOCQkweDAxCisjZGVmaW5lIFVNX0ZJWFVQCTB4MDIKKyNkZWZpbmUgVU1fU0lHTkFMCTB4MDQKKyNkZWZpbmUgS01fV0FSTgkJMHgwOAorCisvKiBzZWUgYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wdHJhY2UuaCAqLworc3RhdGljIHU4IHN5c19zdGFja19mcmFtZV9yZWdfb2Zmc2V0W10gPSB7CisJLyogc3RydWN0IHB0X3JlZ3MgKi8KKwk4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAwLAorCS8qIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKi8KKwkxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKK3N0YXRpYyBpbnQgcmVnX29mZnNldHNbMzJdOworCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfcmVnX3ZhbChzdHJ1Y3QgcHRfcmVncyAqZnAsIGludCByZWcpCit7CisJdTggKnAgPSAoKHU4ICopZnApICsgcmVnX29mZnNldHNbcmVnXTsKKworCXJldHVybiAqKHUzMiAqKXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcmVnX3ZhbChzdHJ1Y3QgcHRfcmVncyAqZnAsIGludCByZWcsIHUzMiB2YWwpCit7CisJdTggKnAgPSAoKHU4ICopZnApICsgcmVnX29mZnNldHNbcmVnXTsKKwkqKHUzMiAqKXAgPSB2YWw7Cit9CisKKy8qCisgKiAobWlzKWFsaWdubWVudCBoYW5kbGVyCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfdW5hbGlnbmVkX2Moc3RydWN0IHB0X3JlZ3MgKmZwLCBpbnQgY2F1c2UpCit7CisJdTMyIGlzbiwgYWRkciwgdmFsOworCWludCBpbl9rZXJuZWw7CisJdTggYSwgYiwgZDAsIGQxLCBkMiwgZDM7CisJdTE2IGltbTE2OworCXVuc2lnbmVkIGludCBmYXVsdDsKKworCS8qIGJhY2sgdXAgb25lIGluc3RydWN0aW9uICovCisJZnAtPmVhIC09IDQ7CisKKwlpZiAoZml4dXBfZXhjZXB0aW9uKGZwKSkgeworCQltYV9za2lwcGVkKys7CisJCXJldHVybjsKKwl9CisKKwlpbl9rZXJuZWwgPSAhdXNlcl9tb2RlKGZwKTsKKworCWlzbiA9ICoodW5zaWduZWQgbG9uZyAqKShmcC0+ZWEpOworCisJZmF1bHQgPSAwOworCisJLyogZG8gZml4dXAgaWYgaW4ga2VybmVsIG9yIG1vZGUgdHVybmVkIG9uICovCisJaWYgKGluX2tlcm5lbCB8fCAobWFfdXNlcm1vZGUgJiBVTV9GSVhVUCkpIHsKKwkJLyogZGVjb21wb3NlIGluc3RydWN0aW9uICovCisJCWEgPSAoaXNuID4+IDI3KSAmIDB4MWY7CisJCWIgPSAoaXNuID4+IDIyKSAmIDB4MWY7CisJCWltbTE2ID0gKGlzbiA+PiA2KSAmIDB4ZmZmZjsKKwkJYWRkciA9IGdldF9yZWdfdmFsKGZwLCBhKSArIGltbTE2OworCisJCS8qIGRvIGZpeHVwIHRvIHNhdmVkIHJlZ2lzdGVycyAqLworCQlzd2l0Y2ggKGlzbiAmIDB4M2YpIHsKKwkJY2FzZSBJTlNUX0xESFU6CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQwLCAodTggKikoYWRkciswKSk7CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQxLCAodTggKikoYWRkcisxKSk7CisJCQl2YWwgPSAoZDEgPDwgOCkgfCBkMDsKKwkJCXB1dF9yZWdfdmFsKGZwLCBiLCB2YWwpOworCQkJbWFfaGFsZisrOworCQkJYnJlYWs7CisJCWNhc2UgSU5TVF9TVEg6CisJCQl2YWwgPSBnZXRfcmVnX3ZhbChmcCwgYik7CisJCQlkMSA9IHZhbCA+PiA4OworCQkJZDAgPSB2YWwgPj4gMDsKKworCQkJcHJfZGVidWcoInN0aDogcmE9JWQgKCUwOHgpIHJiPSVkICglMDh4KSwgaW1tMTYgJTA0eCBhZGRyICUwOHggdmFsICUwOHhcbiIsCisJCQkJYSwgZ2V0X3JlZ192YWwoZnAsIGEpLAorCQkJCWIsIGdldF9yZWdfdmFsKGZwLCBiKSwKKwkJCQlpbW0xNiwgYWRkciwgdmFsKTsKKworCQkJaWYgKGluX2tlcm5lbCkgeworCQkJCSoodTggKikoYWRkciswKSA9IGQwOworCQkJCSoodTggKikoYWRkcisxKSA9IGQxOworCQkJfSBlbHNlIHsKKwkJCQlmYXVsdCB8PSBfX3B1dF91c2VyKGQwLCAodTggKikoYWRkciswKSk7CisJCQkJZmF1bHQgfD0gX19wdXRfdXNlcihkMSwgKHU4ICopKGFkZHIrMSkpOworCQkJfQorCQkJbWFfaGFsZisrOworCQkJYnJlYWs7CisJCWNhc2UgSU5TVF9MREg6CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQwLCAodTggKikoYWRkciswKSk7CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQxLCAodTggKikoYWRkcisxKSk7CisJCQl2YWwgPSAoc2hvcnQpKChkMSA8PCA4KSB8IGQwKTsKKwkJCXB1dF9yZWdfdmFsKGZwLCBiLCB2YWwpOworCQkJbWFfaGFsZisrOworCQkJYnJlYWs7CisJCWNhc2UgSU5TVF9TVFc6CisJCQl2YWwgPSBnZXRfcmVnX3ZhbChmcCwgYik7CisJCQlkMyA9IHZhbCA+PiAyNDsKKwkJCWQyID0gdmFsID4+IDE2OworCQkJZDEgPSB2YWwgPj4gODsKKwkJCWQwID0gdmFsID4+IDA7CisJCQlpZiAoaW5fa2VybmVsKSB7CisJCQkJKih1OCAqKShhZGRyKzApID0gZDA7CisJCQkJKih1OCAqKShhZGRyKzEpID0gZDE7CisJCQkJKih1OCAqKShhZGRyKzIpID0gZDI7CisJCQkJKih1OCAqKShhZGRyKzMpID0gZDM7CisJCQl9IGVsc2UgeworCQkJCWZhdWx0IHw9IF9fcHV0X3VzZXIoZDAsICh1OCAqKShhZGRyKzApKTsKKwkJCQlmYXVsdCB8PSBfX3B1dF91c2VyKGQxLCAodTggKikoYWRkcisxKSk7CisJCQkJZmF1bHQgfD0gX19wdXRfdXNlcihkMiwgKHU4ICopKGFkZHIrMikpOworCQkJCWZhdWx0IHw9IF9fcHV0X3VzZXIoZDMsICh1OCAqKShhZGRyKzMpKTsKKwkJCX0KKwkJCW1hX3dvcmQrKzsKKwkJCWJyZWFrOworCQljYXNlIElOU1RfTERXOgorCQkJZmF1bHQgfD0gX19nZXRfdXNlcihkMCwgKHU4ICopKGFkZHIrMCkpOworCQkJZmF1bHQgfD0gX19nZXRfdXNlcihkMSwgKHU4ICopKGFkZHIrMSkpOworCQkJZmF1bHQgfD0gX19nZXRfdXNlcihkMiwgKHU4ICopKGFkZHIrMikpOworCQkJZmF1bHQgfD0gX19nZXRfdXNlcihkMywgKHU4ICopKGFkZHIrMykpOworCQkJdmFsID0gKGQzIDw8IDI0KSB8IChkMiA8PCAxNikgfCAoZDEgPDwgOCkgfCBkMDsKKwkJCXB1dF9yZWdfdmFsKGZwLCBiLCB2YWwpOworCQkJbWFfd29yZCsrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlhZGRyID0gUkRDVEwoQ1RMX0JBREFERFIpOworCWNhdXNlID4+PSAyOworCisJaWYgKGZhdWx0KSB7CisJCWlmIChpbl9rZXJuZWwpIHsKKwkJCXByX2VycigiZmF1bHQgZHVyaW5nIGtlcm5lbCBtaXNhbGlnbmVkIGZpeHVwIEAgJSNseDsgYWRkciAweCUwOHg7IGlzbj0weCUwOHhcbiIsCisJCQkJZnAtPmVhLCAodW5zaWduZWQgaW50KWFkZHIsCisJCQkJKHVuc2lnbmVkIGludClpc24pOworCQl9IGVsc2UgeworCQkJcHJfZXJyKCJmYXVsdCBkdXJpbmcgdXNlciBtaXNhbGlnbmVkIGZpeHVwIEAgJSNseDsgaXNuPSUwOHggYWRkcj0weCUwOHggc3A9MHglMDhseCBwaWQ9JWRcbiIsCisJCQkJZnAtPmVhLAorCQkJCSh1bnNpZ25lZCBpbnQpaXNuLCBhZGRyLCBmcC0+c3AsCisJCQkJY3VycmVudC0+cGlkKTsKKworCQkJX2V4Y2VwdGlvbihTSUdTRUdWLCBmcCwgU0VHVl9NQVBFUlIsIGZwLT5lYSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIGtlcm5lbCBtb2RlIC0KKwkgKiAgbm90ZSBleGNlcHRpb24gYW5kIHNraXAgYmFkIGluc3RydWN0aW9uIChyZXR1cm4pCisJICovCisJaWYgKGluX2tlcm5lbCkgeworCQltYV9rZXJuKys7CisJCWZwLT5lYSArPSA0OworCisJCWlmIChtYV91c2VybW9kZSAmIEtNX1dBUk4pIHsKKwkJCXByX2Vycigia2VybmVsIHVuYWxpZ25lZCBhY2Nlc3MgQCAlI2x4OyBCQURBRERSIDB4JTA4eDsgY2F1c2U9JWQsIGlzbj0weCUwOHhcbiIsCisJCQkJZnAtPmVhLAorCQkJCSh1bnNpZ25lZCBpbnQpYWRkciwgY2F1c2UsCisJCQkJKHVuc2lnbmVkIGludClpc24pOworCQkJLyogc2hvd19yZWdzKGZwKTsgKi8KKwkJfQorCisJCXJldHVybjsKKwl9CisKKwltYV91c2VyKys7CisKKwkvKgorCSAqIHVzZXIgbW9kZSAtCisJICogIHBvc3NpYmx5IHdhcm4sCisJICogIHBvc3NpYmx5IHNlbmQgU0lHQlVTIHNpZ25hbCB0byBwcm9jZXNzCisJICovCisJaWYgKG1hX3VzZXJtb2RlICYgVU1fV0FSTikgeworCQlwcl9lcnIoInVzZXIgdW5hbGlnbmVkIGFjY2VzcyBAICUjbHg7IGlzbj0weCUwOGx4IGVhPTB4JTA4bHggcmE9MHglMDhseCBzcD0weCUwOGx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgKHVuc2lnbmVkIGxvbmcpaXNuLAorCQkJZnAtPmVhLCBmcC0+cmEsIGZwLT5zcCk7CisJfQorCisJaWYgKG1hX3VzZXJtb2RlICYgVU1fU0lHTkFMKQorCQlfZXhjZXB0aW9uKFNJR0JVUywgZnAsIEJVU19BRFJBTE4sIGZwLT5lYSk7CisJZWxzZQorCQlmcC0+ZWEgKz0gNDsJLyogZWxzZSBhZHZhbmNlICovCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtaXNhbGlnbmVkX2NhbGNfcmVnX29mZnNldHModm9pZCkKK3sKKwlpbnQgaSwgciwgb2Zmc2V0OworCisJLyogcHJlLWNhbGMgb2Zmc2V0cyBvZiByZWdpc3RlcnMgb24gc3lzIGNhbGwgc3RhY2sgZnJhbWUgKi8KKwlvZmZzZXQgPSAwOworCisJLyogc3RydWN0IHB0X3JlZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlyID0gc3lzX3N0YWNrX2ZyYW1lX3JlZ19vZmZzZXRbaV07CisJCXJlZ19vZmZzZXRzW3JdID0gb2Zmc2V0OworCQlvZmZzZXQgKz0gNDsKKwl9CisKKwkvKiBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICovCisJb2Zmc2V0ID0gLXNpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKTsKKwlmb3IgKGkgPSAxNjsgaSA8IDMyOyBpKyspIHsKKwkJciA9IHN5c19zdGFja19mcmFtZV9yZWdfb2Zmc2V0W2ldOworCQlyZWdfb2Zmc2V0c1tyXSA9IG9mZnNldDsKKwkJb2Zmc2V0ICs9IDQ7CisJfQorfQorCisKK3N0YXRpYyBpbnQgX19pbml0IG1pc2FsaWduZWRfaW5pdCh2b2lkKQoreworCS8qIGRlZmF1bHQgbW9kZSAtIHNpbGVudCBmaXggKi8KKwltYV91c2VybW9kZSA9IFVNX0ZJWFVQIHwgS01fV0FSTjsKKworCW1pc2FsaWduZWRfY2FsY19yZWdfb2Zmc2V0cygpOworCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsKG1pc2FsaWduZWRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTI0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9tb2R1bGUuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIEtlcm5lbCBtb2R1bGUgc3VwcG9ydCBmb3IgTmlvcyBJSS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKiAgIFdyaXR0ZW4gYnkgV2VudGFvIFh1IDx4dXdlbnRhb0BtaWNyb3Ryb25peC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMgUnVzdHkgUnVzc2VsbAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKy8qCisgKiBNb2R1bGVzIHNob3VsZCBOT1QgYmUgYWxsb2NhdGVkIHdpdGgga21hbGxvYyBmb3IgKG9idmlvdXMpIHJlYXNvbnMuCisgKiBCdXQgd2UgZG8gaXQgZm9yIG5vdyB0byBhdm9pZCByZWxvY2F0aW9uIGlzc3Vlcy4gQ0FMTDI2L1BDUkVMMjYgY2Fubm90IHJlYWNoCisgKiBmcm9tIDB4ODAwMDAwMDAgKHZtYWxsb2MgYXJlYSkgdG8gMHhjMDAwMDAwMDAgKGtlcm5lbCkgKGttYWxsb2MgcmV0dXJucworICogYWRkcmVzc2VzIGluIDB4YzAwMDAwMDApCisgKi8KK3ZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Cit9CisKKy8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jICovCit2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3sKKwlrZnJlZShtb2R1bGVfcmVnaW9uKTsKK30KKworaW50IGFwcGx5X3JlbG9jYXRlX2FkZChFbGYzMl9TaGRyICpzZWNoZHJzLCBjb25zdCBjaGFyICpzdHJ0YWIsCisJCQl1bnNpZ25lZCBpbnQgc3ltaW5kZXgsIHVuc2lnbmVkIGludCByZWxzZWMsCisJCQlzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJdW5zaWduZWQgaW50IGk7CisJRWxmMzJfUmVsYSAqcmVsYSA9ICh2b2lkICopc2VjaGRyc1tyZWxzZWNdLnNoX2FkZHI7CisKKwlwcl9kZWJ1ZygiQXBwbHlpbmcgcmVsb2NhdGUgc2VjdGlvbiAldSB0byAldVxuIiwgcmVsc2VjLAorCQkgc2VjaGRyc1tyZWxzZWNdLnNoX2luZm8pOworCisJZm9yIChpID0gMDsgaSA8IHNlY2hkcnNbcmVsc2VjXS5zaF9zaXplIC8gc2l6ZW9mKCpyZWxhKTsgaSsrKSB7CisJCS8qIFRoaXMgaXMgd2hlcmUgdG8gbWFrZSB0aGUgY2hhbmdlICovCisJCXVpbnQzMl90IHdvcmQ7CisJCXVpbnQzMl90ICpsb2MKKwkJCT0gKCh2b2lkICopc2VjaGRyc1tzZWNoZHJzW3JlbHNlY10uc2hfaW5mb10uc2hfYWRkcgorCQkJICAgKyByZWxhW2ldLnJfb2Zmc2V0KTsKKwkJLyogVGhpcyBpcyB0aGUgc3ltYm9sIGl0IGlzIHJlZmVycmluZyB0by4gIE5vdGUgdGhhdCBhbGwKKwkJICAgdW5kZWZpbmVkIHN5bWJvbHMgaGF2ZSBiZWVuIHJlc29sdmVkLiAgKi8KKwkJRWxmMzJfU3ltICpzeW0KKwkJCT0gKChFbGYzMl9TeW0gKilzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRyCisJCQkJKyBFTEYzMl9SX1NZTShyZWxhW2ldLnJfaW5mbykpOworCQl1aW50MzJfdCB2ID0gc3ltLT5zdF92YWx1ZSArIHJlbGFbaV0ucl9hZGRlbmQ7CisKKwkJcHJfZGVidWcoInJlbHR5cGUgJWQgMHgleCBuYW1lOjwlcz5cbiIsCisJCQlFTEYzMl9SX1RZUEUocmVsYVtpXS5yX2luZm8pLAorCQkJcmVsYVtpXS5yX29mZnNldCwgc3RydGFiICsgc3ltLT5zdF9uYW1lKTsKKworCQlzd2l0Y2ggKEVMRjMyX1JfVFlQRShyZWxhW2ldLnJfaW5mbykpIHsKKwkJY2FzZSBSX05JT1MyX05PTkU6CisJCQlicmVhazsKKwkJY2FzZSBSX05JT1MyX0JGRF9SRUxPQ18zMjoKKwkJCSpsb2MgKz0gdjsKKwkJCWJyZWFrOworCQljYXNlIFJfTklPUzJfUENSRUwxNjoKKwkJCXYgLT0gKHVpbnQzMl90KWxvYyArIDQ7CisJCQlpZiAoKGludDMyX3QpdiA+IDB4N2ZmZiB8fAorCQkJCShpbnQzMl90KXYgPCAtKGludDMyX3QpMHg4MDAwKSB7CisJCQkJcHJfZXJyKCJtb2R1bGUgJXM6IHJlbG9jYXRpb24gb3ZlcmZsb3dcbiIsCisJCQkJCW1vZC0+bmFtZSk7CisJCQkJcmV0dXJuIC1FTk9FWEVDOworCQkJfQorCQkJd29yZCA9ICpsb2M7CisJCQkqbG9jID0gKCgoKHdvcmQgPj4gMjIpIDw8IDE2KSB8ICh2ICYgMHhmZmZmKSkgPDwgNikgfAorCQkJCSh3b3JkICYgMHgzZik7CisJCQlicmVhazsKKwkJY2FzZSBSX05JT1MyX0NBTEwyNjoKKwkJCWlmICh2ICYgMykgeworCQkJCXByX2VycigibW9kdWxlICVzOiBkYW5nZXJvdXMgcmVsb2NhdGlvblxuIiwKKwkJCQkJbW9kLT5uYW1lKTsKKwkJCQlyZXR1cm4gLUVOT0VYRUM7CisJCQl9CisJCQlpZiAoKHYgPj4gMjgpICE9ICgodWludDMyX3QpbG9jID4+IDI4KSkgeworCQkJCXByX2VycigibW9kdWxlICVzOiByZWxvY2F0aW9uIG92ZXJmbG93XG4iLAorCQkJCQltb2QtPm5hbWUpOworCQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCX0KKwkJCSpsb2MgPSAoKmxvYyAmIDB4M2YpIHwgKCh2ID4+IDIpIDw8IDYpOworCQkJYnJlYWs7CisJCWNhc2UgUl9OSU9TMl9ISTE2OgorCQkJd29yZCA9ICpsb2M7CisJCQkqbG9jID0gKCgoKHdvcmQgPj4gMjIpIDw8IDE2KSB8CisJCQkJKCh2ID4+IDE2KSAmIDB4ZmZmZikpIDw8IDYpIHwgKHdvcmQgJiAweDNmKTsKKwkJCWJyZWFrOworCQljYXNlIFJfTklPUzJfTE8xNjoKKwkJCXdvcmQgPSAqbG9jOworCQkJKmxvYyA9ICgoKCh3b3JkID4+IDIyKSA8PCAxNikgfCAodiAmIDB4ZmZmZikpIDw8IDYpIHwKKwkJCQkJKHdvcmQgJiAweDNmKTsKKwkJCWJyZWFrOworCQljYXNlIFJfTklPUzJfSElBREoxNjoKKwkJCXsKKwkJCQlFbGYzMl9BZGRyIHdvcmQyOworCisJCQkJd29yZCA9ICpsb2M7CisJCQkJd29yZDIgPSAoKHYgPj4gMTYpICsgKCh2ID4+IDE1KSAmIDEpKSAmIDB4ZmZmZjsKKwkJCQkqbG9jID0gKCgoKHdvcmQgPj4gMjIpIDw8IDE2KSB8IHdvcmQyKSA8PCA2KSB8CisJCQkJCQkod29yZCAmIDB4M2YpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByX2VycigibW9kdWxlICVzOiBVbmtub3duIHJlbG9jOiAldVxuIiwKKwkJCQltb2QtPm5hbWUsIEVMRjMyX1JfVFlQRShyZWxhW2ldLnJfaW5mbykpOworCQkJcmV0dXJuIC1FTk9FWEVDOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCQlzdHJ1Y3QgbW9kdWxlICptZSkKK3sKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL25pb3MyX2tzeW1zLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9uaW9zMl9rc3ltcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMmY1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9uaW9zMl9rc3ltcy5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKy8qIHN0cmluZyBmdW5jdGlvbnMgKi8KKworRVhQT1JUX1NZTUJPTChtZW1jcHkpOworRVhQT1JUX1NZTUJPTChtZW1zZXQpOworRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKKworLyoKKyAqIGxpYmdjYyBmdW5jdGlvbnMgLSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZQorICogY29tcGlsZXIuLi4gIChwcm90b3R5cGVzIGFyZSBub3QgY29ycmVjdCB0aG91Z2gsIGJ1dCB0aGF0CisgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgc2luY2UgdGhleSdyZSBub3QgdmVyc2lvbmVkKS4KKyAqLworI2RlZmluZSBERUNMQVJFX0VYUE9SVChuYW1lKQlleHRlcm4gdm9pZCBuYW1lKHZvaWQpOyBFWFBPUlRfU1lNQk9MKG5hbWUpCisKK0RFQ0xBUkVfRVhQT1JUKF9fZ2NjX2JjbXApOworREVDTEFSRV9FWFBPUlQoX19kaXZzaTMpOworREVDTEFSRV9FWFBPUlQoX19tb2RkaTMpOworREVDTEFSRV9FWFBPUlQoX19tb2RzaTMpOworREVDTEFSRV9FWFBPUlQoX191ZGl2bW9kZGk0KTsKK0RFQ0xBUkVfRVhQT1JUKF9fdWRpdnNpMyk7CitERUNMQVJFX0VYUE9SVChfX3Vtb2RkaTMpOworREVDTEFSRV9FWFBPUlQoX191bW9kc2kzKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbXVsZGkzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTA3NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKworYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7Cithc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTsKKwordm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCit2b2lkIGFyY2hfY3B1X2lkbGUodm9pZCkKK3sKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKKy8qCisgKiBUaGUgZGV2ZWxvcG1lbnQgYm9hcmRzIGhhdmUgbm8gd2F5IHRvIHB1bGwgYSBib2FyZCByZXNldC4gSnVzdCBqdW1wIHRvIHRoZQorICogY3B1IHJlc2V0IGFkZHJlc3MgYW5kIGxldCB0aGUgYm9vdCBsb2FkZXIgb3IgdGhlIGNvZGUgaW4gaGVhZC5TIHRha2UgY2FyZSBvZgorICogcmVzZXR0aW5nIHBlcmlwaGVyYWxzLgorICovCit2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICpfX3VudXNlZCkKK3sKKwlwcl9ub3RpY2UoIk1hY2hpbmUgcmVzdGFydCAoJTA4eCkuLi5cbiIsIGNwdWluZm8ucmVzZXRfYWRkcik7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJImptcAklMFxuXHQiCisJOgorCTogInIiIChjcHVpbmZvLnJlc2V0X2FkZHIpCisJOiAicjQiKTsKK30KKwordm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKK3sKKwlwcl9ub3RpY2UoIk1hY2hpbmUgaGFsdC4uLlxuIik7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlmb3IgKDs7KQorCQk7Cit9CisKKy8qCisgKiBUaGVyZSBpcyBubyB3YXkgdG8gcG93ZXIgb2ZmIHRoZSBkZXZlbG9wbWVudCBib2FyZHMuIFNvIGp1c3Qgc3BpbiBmb3Igbm93LiBJZgorICogd2UgZXZlciBoYXZlIGEgd2F5IG9mIHJlc2V0dGluZyBhIGJvYXJkIHVzaW5nIGEgR1BJTyB3ZSBzaG91bGQgYWRkIHRoYXQgaGVyZS4KKyAqLwordm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQoreworCXByX25vdGljZSgiTWFjaGluZSBwb3dlciBvZmYuLi5cbiIpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZm9yICg7OykKKwkJOworfQorCit2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwcl9ub3RpY2UoIlxuIik7CisJc2hvd19yZWdzX3ByaW50X2luZm8oS0VSTl9ERUZBVUxUKTsKKworCXByX25vdGljZSgicjE6ICUwOGx4IHIyOiAlMDhseCByMzogJTA4bHggcjQ6ICUwOGx4XG4iLAorCQlyZWdzLT5yMSwgIHJlZ3MtPnIyLCAgcmVncy0+cjMsICByZWdzLT5yNCk7CisKKwlwcl9ub3RpY2UoInI1OiAlMDhseCByNjogJTA4bHggcjc6ICUwOGx4IHI4OiAlMDhseFxuIiwKKwkJcmVncy0+cjUsICByZWdzLT5yNiwgIHJlZ3MtPnI3LCAgcmVncy0+cjgpOworCisJcHJfbm90aWNlKCJyOTogJTA4bHggcjEwOiAlMDhseCByMTE6ICUwOGx4IHIxMjogJTA4bHhcbiIsCisJCXJlZ3MtPnI5LCAgcmVncy0+cjEwLCByZWdzLT5yMTEsIHJlZ3MtPnIxMik7CisKKwlwcl9ub3RpY2UoInIxMzogJTA4bHggcjE0OiAlMDhseCByMTU6ICUwOGx4XG4iLAorCQlyZWdzLT5yMTMsIHJlZ3MtPnIxNCwgcmVncy0+cjE1KTsKKworCXByX25vdGljZSgicmE6ICUwOGx4IGZwOiAgJTA4bHggc3A6ICUwOGx4IGdwOiAlMDhseFxuIiwKKwkJcmVncy0+cmEsICByZWdzLT5mcCwgIHJlZ3MtPnNwLCAgcmVncy0+Z3ApOworCisJcHJfbm90aWNlKCJlYTogJTA4bHggZXN0YXR1czogJTA4bHhcbiIsCisJCXJlZ3MtPmVhLCAgcmVncy0+ZXN0YXR1cyk7Cit9CisKK3ZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCit7CisJc2V0X2ZzKFVTRVJfRFMpOworfQorCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKKwkJdW5zaWduZWQgbG9uZyB1c3AsIHVuc2lnbmVkIGxvbmcgYXJnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVncyA9IHRhc2tfcHRfcmVncyhwKTsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdGFjazsKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpjaGlsZHN0YWNrID0KKwkJKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopY2hpbGRyZWdzKSAtIDE7CisKKwlpZiAodW5saWtlbHkocC0+ZmxhZ3MgJiBQRl9LVEhSRUFEKSkgeworCQltZW1zZXQoY2hpbGRzdGFjaywgMCwKKwkJCXNpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSArIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCisJCWNoaWxkc3RhY2stPnIxNiA9IHVzcDsJCS8qIGZuICovCisJCWNoaWxkc3RhY2stPnIxNyA9IGFyZzsKKwkJY2hpbGRzdGFjay0+cmEgPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fa2VybmVsX3RocmVhZDsKKwkJY2hpbGRyZWdzLT5lc3RhdHVzID0gU1RBVFVTX1BJRTsKKwkJY2hpbGRyZWdzLT5zcCA9ICh1bnNpZ25lZCBsb25nKSBjaGlsZHN0YWNrOworCisJCXAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZykgY2hpbGRzdGFjazsKKwkJcC0+dGhyZWFkLmtyZWdzID0gY2hpbGRyZWdzOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZWdzID0gY3VycmVudF9wdF9yZWdzKCk7CisJKmNoaWxkcmVncyA9ICpyZWdzOworCWNoaWxkcmVncy0+cjIgPSAwOwkvKiBTZXQgdGhlIHJldHVybiB2YWx1ZSBmb3IgdGhlIGNoaWxkLiAqLworCWNoaWxkcmVncy0+cjcgPSAwOworCisJc3RhY2sgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikgcmVncykgLSAxOworCSpjaGlsZHN0YWNrID0gKnN0YWNrOworCWNoaWxkc3RhY2stPnJhID0gKHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21fZm9yazsKKwlwLT50aHJlYWQua3JlZ3MgPSBjaGlsZHJlZ3M7CisJcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKSBjaGlsZHN0YWNrOworCisJaWYgKHVzcCkKKwkJY2hpbGRyZWdzLT5zcCA9IHVzcDsKKworCS8qIEluaXRpYWxpemUgdGxzIHJlZ2lzdGVyLiAqLworCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykKKwkJY2hpbGRzdGFjay0+cjIzID0gcmVncy0+cjg7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCUdlbmVyaWMgZHVtcGluZyBjb2RlLiBVc2VkIGZvciBwYW5pYyBhbmQgZGVidWcuCisgKi8KK3ZvaWQgZHVtcChzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJdW5zaWduZWQgbG9uZwkqc3A7CisJdW5zaWduZWQgY2hhcgkqdHA7CisJaW50CQlpOworCisJcHJfZW1lcmcoIlxuQ1VSUkVOVCBQUk9DRVNTOlxuXG4iKTsKKwlwcl9lbWVyZygiQ09NTT0lcyBQSUQ9JWRcbiIsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisKKwlpZiAoY3VycmVudC0+bW0pIHsKKwkJcHJfZW1lcmcoIlRFWFQ9JTA4eC0lMDh4IERBVEE9JTA4eC0lMDh4IEJTUz0lMDh4LSUwOHhcbiIsCisJCQkoaW50KSBjdXJyZW50LT5tbS0+c3RhcnRfY29kZSwKKwkJCShpbnQpIGN1cnJlbnQtPm1tLT5lbmRfY29kZSwKKwkJCShpbnQpIGN1cnJlbnQtPm1tLT5zdGFydF9kYXRhLAorCQkJKGludCkgY3VycmVudC0+bW0tPmVuZF9kYXRhLAorCQkJKGludCkgY3VycmVudC0+bW0tPmVuZF9kYXRhLAorCQkJKGludCkgY3VycmVudC0+bW0tPmJyayk7CisJCXByX2VtZXJnKCJVU0VSLVNUQUNLPSUwOHggIEtFUk5FTC1TVEFDSz0lMDh4XG5cbiIsCisJCQkoaW50KSBjdXJyZW50LT5tbS0+c3RhcnRfc3RhY2ssCisJCQkoaW50KSgoKHVuc2lnbmVkIGxvbmcpIGN1cnJlbnQpICsgVEhSRUFEX1NJWkUpKTsKKwl9CisKKwlwcl9lbWVyZygiUEM6ICUwOGx4XG4iLCBmcC0+ZWEpOworCXByX2VtZXJnKCJTUjogJTA4bHggICAgU1A6ICUwOGx4XG4iLAorCQkobG9uZykgZnAtPmVzdGF0dXMsIChsb25nKSBmcCk7CisKKwlwcl9lbWVyZygicjE6ICUwOGx4ICAgIHIyOiAlMDhseCAgICByMzogJTA4bHhcbiIsCisJCWZwLT5yMSwgZnAtPnIyLCBmcC0+cjMpOworCisJcHJfZW1lcmcoInI0OiAlMDhseCAgICByNTogJTA4bHggICAgcjY6ICUwOGx4ICAgIHI3OiAlMDhseFxuIiwKKwkJZnAtPnI0LCBmcC0+cjUsIGZwLT5yNiwgZnAtPnI3KTsKKwlwcl9lbWVyZygicjg6ICUwOGx4ICAgIHI5OiAlMDhseCAgICByMTA6ICUwOGx4ICAgIHIxMTogJTA4bHhcbiIsCisJCWZwLT5yOCwgZnAtPnI5LCBmcC0+cjEwLCBmcC0+cjExKTsKKwlwcl9lbWVyZygicjEyOiAlMDhseCAgcjEzOiAlMDhseCAgICByMTQ6ICUwOGx4ICAgIHIxNTogJTA4bHhcbiIsCisJCWZwLT5yMTIsIGZwLT5yMTMsIGZwLT5yMTQsIGZwLT5yMTUpOworCXByX2VtZXJnKCJvcjI6ICUwOGx4ICAgcmE6ICUwOGx4ICAgICBmcDogJTA4bHggICAgc3A6ICUwOGx4XG4iLAorCQlmcC0+b3JpZ19yMiwgZnAtPnJhLCBmcC0+ZnAsIGZwLT5zcCk7CisJcHJfZW1lcmcoIlxuVVNQOiAlMDh4ICAgVFJBUEZSQU1FOiAlMDh4XG4iLAorCQkodW5zaWduZWQgaW50KSBmcC0+c3AsICh1bnNpZ25lZCBpbnQpIGZwKTsKKworCXByX2VtZXJnKCJcbkNPREU6Iik7CisJdHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgZnAtPmVhKSAtIDB4MjA7CisJZm9yIChzcCA9ICh1bnNpZ25lZCBsb25nICopIHRwLCBpID0gMDsgKGkgPCAweDQwKTsgIGkgKz0gNCkgeworCQlpZiAoKGkgJSAweDEwKSA9PSAwKQorCQkJcHJfZW1lcmcoIlxuJTA4eDogIiwgKGludCkgKHRwICsgaSkpOworCQlwcl9lbWVyZygiJTA4eCAiLCAoaW50KSAqc3ArKyk7CisJfQorCXByX2VtZXJnKCJcbiIpOworCisJcHJfZW1lcmcoIlxuS0VSTkVMIFNUQUNLOiIpOworCXRwID0gKCh1bnNpZ25lZCBjaGFyICopIGZwKSAtIDB4NDA7CisJZm9yIChzcCA9ICh1bnNpZ25lZCBsb25nICopIHRwLCBpID0gMDsgKGkgPCAweGMwKTsgaSArPSA0KSB7CisJCWlmICgoaSAlIDB4MTApID09IDApCisJCQlwcl9lbWVyZygiXG4lMDh4OiAiLCAoaW50KSAodHAgKyBpKSk7CisJCXByX2VtZXJnKCIlMDh4ICIsIChpbnQpICpzcCsrKTsKKwl9CisJcHJfZW1lcmcoIlxuIik7CisJcHJfZW1lcmcoIlxuIik7CisKKwlwcl9lbWVyZygiXG5VU0VSIFNUQUNLOiIpOworCXRwID0gKHVuc2lnbmVkIGNoYXIgKikgKGZwLT5zcCAtIDB4MTApOworCWZvciAoc3AgPSAodW5zaWduZWQgbG9uZyAqKSB0cCwgaSA9IDA7IChpIDwgMHg4MCk7IGkgKz0gNCkgeworCQlpZiAoKGkgJSAweDEwKSA9PSAwKQorCQkJcHJfZW1lcmcoIlxuJTA4eDogIiwgKGludCkgKHRwICsgaSkpOworCQlwcl9lbWVyZygiJTA4eCAiLCAoaW50KSAqc3ArKyk7CisJfQorCXByX2VtZXJnKCJcblxuIik7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZwLCBwYzsKKwl1bnNpZ25lZCBsb25nIHN0YWNrX3BhZ2U7CisJaW50IGNvdW50ID0gMDsKKworCWlmICghcCB8fCBwID09IGN1cnJlbnQgfHwgcC0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKQorCQlyZXR1cm4gMDsKKworCXN0YWNrX3BhZ2UgPSAodW5zaWduZWQgbG9uZylwOworCWZwID0gKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcC0+dGhyZWFkLmtzcCktPmZwOwkvKiA7ZGd0MiAqLworCWRvIHsKKwkJaWYgKGZwIDwgc3RhY2tfcGFnZStzaXplb2Yoc3RydWN0IHRhc2tfc3RydWN0KSB8fAorCQkJZnAgPj0gODE4NCtzdGFja19wYWdlKQkvKiA7ZGd0Mjt0bXAgKi8KKwkJCXJldHVybiAwOworCQlwYyA9ICgodW5zaWduZWQgbG9uZyAqKWZwKVsxXTsKKwkJaWYgKCFpbl9zY2hlZF9mdW5jdGlvbnMocGMpKQorCQkJcmV0dXJuIHBjOworCQlmcCA9ICoodW5zaWduZWQgbG9uZyAqKSBmcDsKKwl9IHdoaWxlIChjb3VudCsrIDwgMTYpOwkJLyogO2RndDI7dG1wICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXdseSBleGVjdXRlZCB0aHJlYWQuCisgKiBXaWxsIHN0YXJ0dXAgaW4gdXNlciBtb2RlIChzdGF0dXNfZXh0ZW5zaW9uID0gMCkuCisgKi8KK3ZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIHNwKQoreworCW1lbXNldCgodm9pZCAqKSByZWdzLCAwLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlyZWdzLT5lc3RhdHVzID0gRVNUQVRVU19FUElFIHwgRVNUQVRVU19FVTsKKwlyZWdzLT5lYSA9IHBjOworCXJlZ3MtPnNwID0gc3A7Cit9CisKKyNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CisKKy8qIEZpbGwgaW4gdGhlIEZQVSBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLiAqLworaW50IGR1bXBfZnB1KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBlbGZfZnByZWdzZXRfdCAqcikKK3sKKwlyZXR1cm4gMDsgLyogTmlvczIgaGFzIG5vIEZQVSBhbmQgdGh1cyBubyBGUFUgcmVnaXN0ZXJzICovCit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9wcm9tLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9wcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyMmQzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3Byb20uYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogRGV2aWNlIHRyZWUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogQmFzZWQgb24gTUlQUyBzdXBwb3J0IGZvciBDT05GSUdfT0YgZGV2aWNlIHRyZWUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBDaXNjbyBTeXN0ZW1zIEluYy4gPGRlZGlhb0BjaXNjby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKwordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2godTY0IGJhc2UsIHU2NCBzaXplKQoreworCXU2NCBrZXJuZWxfc3RhcnQgPSAodTY0KXZpcnRfdG9fcGh5cyhfdGV4dCk7CisKKwlpZiAoIW1lbW9yeV9zaXplICYmCisJICAgIChrZXJuZWxfc3RhcnQgPj0gYmFzZSkgJiYgKGtlcm5lbF9zdGFydCA8IChiYXNlICsgc2l6ZSkpKQorCQltZW1vcnlfc2l6ZSA9IHNpemU7CisKK30KKwordm9pZCAqIF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pCit7CisJcmV0dXJuIGFsbG9jX2Jvb3RtZW1fYWxpZ24oc2l6ZSwgYWxpZ24pOworfQorCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqcGFyYW1zKQoreworCV9fYmUzMiAqZHRiID0gKHUzMiAqKV9fZHRiX3N0YXJ0OworI2lmIGRlZmluZWQoQ09ORklHX05JT1MyX0RUQl9BVF9QSFlTX0FERFIpCisJaWYgKGJlMzJfdG9fY3B1cCgoX19iZTMyICopQ09ORklHX05JT1MyX0RUQl9QSFlTX0FERFIpID09CisJCSBPRl9EVF9IRUFERVIpIHsKKwkJcGFyYW1zID0gKHZvaWQgKilDT05GSUdfTklPUzJfRFRCX1BIWVNfQUREUjsKKwkJZWFybHlfaW5pdF9kdF9zY2FuKHBhcmFtcyk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAoYmUzMl90b19jcHUoKF9fYmUzMikgKmR0YikgPT0gT0ZfRFRfSEVBREVSKQorCQlwYXJhbXMgPSAodm9pZCAqKV9fZHRiX3N0YXJ0OworCisJZWFybHlfaW5pdF9kdF9zY2FuKHBhcmFtcyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbmlvczIva2VybmVsL3B0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MWRkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9wdHJhY2UuYwpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisKK3N0YXRpYyBpbnQgZ2VucmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKHRhcmdldCk7CisJY29uc3Qgc3RydWN0IHN3aXRjaF9zdGFjayAqc3cgPSAoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MgLSAxOworCWludCByZXQgPSAwOworCisjZGVmaW5lIFJFR19PX1pFUk9fUkFOR0UoU1RBUlQsIEVORCkJCVwKKwlpZiAoIXJldCkJCQkJCVwKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dF96ZXJvKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCBcCisJCQlTVEFSVCAqIDQsIChFTkQgKiA0KSArIDQpOworCisjZGVmaW5lIFJFR19PX09ORShQVFIsIExPQykJXAorCWlmICghcmV0KQkJCVwKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwgUFRSLCBcCisJCQlMT0MgKiA0LCAoTE9DICogNCkgKyA0KTsKKworI2RlZmluZSBSRUdfT19SQU5HRShQVFIsIFNUQVJULCBFTkQpCVwKKwlpZiAoIXJldCkJCQkJXAorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCBQVFIsIFwKKwkJCVNUQVJUICogNCwgKEVORCAqIDQpICsgNCk7CisKKwlSRUdfT19aRVJPX1JBTkdFKFBUUl9SMCwgUFRSX1IwKTsKKwlSRUdfT19SQU5HRSgmcmVncy0+cjEsIFBUUl9SMSwgUFRSX1I3KTsKKwlSRUdfT19SQU5HRSgmcmVncy0+cjgsIFBUUl9SOCwgUFRSX1IxNSk7CisJUkVHX09fUkFOR0Uoc3csIFBUUl9SMTYsIFBUUl9SMjMpOworCVJFR19PX1pFUk9fUkFOR0UoUFRSX1IyNCwgUFRSX1IyNSk7IC8qIGV0IGFuZCBidCAqLworCVJFR19PX09ORSgmcmVncy0+Z3AsIFBUUl9HUCk7CisJUkVHX09fT05FKCZyZWdzLT5zcCwgUFRSX1NQKTsKKwlSRUdfT19PTkUoJnJlZ3MtPmZwLCBQVFJfRlApOworCVJFR19PX09ORSgmcmVncy0+ZWEsIFBUUl9FQSk7CisJUkVHX09fWkVST19SQU5HRShQVFJfQkEsIFBUUl9CQSk7CisJUkVHX09fT05FKCZyZWdzLT5yYSwgUFRSX1JBKTsKKwlSRUdfT19PTkUoJnJlZ3MtPmVhLCBQVFJfUEMpOyAvKiB1c2UgZWEgZm9yIFBDICovCisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXRfemVybygmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJIFBUUl9TVEFUVVMgKiA0LCAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IHRoZSB0aHJlYWQgc3RhdGUgZnJvbSBhIHJlZ3NldCBwYXNzZWQgaW4gdmlhIHB0cmFjZQorICovCitzdGF0aWMgaW50IGdlbnJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCWNvbnN0IHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilyZWdzIC0gMTsKKwlpbnQgcmV0ID0gMDsKKworI2RlZmluZSBSRUdfSUdOT1JFX1JBTkdFKFNUQVJULCBFTkQpCQlcCisJaWYgKCFyZXQpCQkJCQlcCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsIFwKKwkJCVNUQVJUICogNCwgKEVORCAqIDQpICsgNCk7CisKKyNkZWZpbmUgUkVHX0lOX09ORShQVFIsIExPQykJXAorCWlmICghcmV0KQkJCVwKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCBcCisJCQkodm9pZCAqKShQVFIpLCBMT0MgKiA0LCAoTE9DICogNCkgKyA0KTsKKworI2RlZmluZSBSRUdfSU5fUkFOR0UoUFRSLCBTVEFSVCwgRU5EKQlcCisJaWYgKCFyZXQpCQkJCVwKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCBcCisJCQkodm9pZCAqKShQVFIpLCBTVEFSVCAqIDQsIChFTkQgKiA0KSArIDQpOworCisJUkVHX0lHTk9SRV9SQU5HRShQVFJfUjAsIFBUUl9SMCk7CisJUkVHX0lOX1JBTkdFKCZyZWdzLT5yMSwgUFRSX1IxLCBQVFJfUjcpOworCVJFR19JTl9SQU5HRSgmcmVncy0+cjgsIFBUUl9SOCwgUFRSX1IxNSk7CisJUkVHX0lOX1JBTkdFKHN3LCBQVFJfUjE2LCBQVFJfUjIzKTsKKwlSRUdfSUdOT1JFX1JBTkdFKFBUUl9SMjQsIFBUUl9SMjUpOyAvKiBldCBhbmQgYnQgKi8KKwlSRUdfSU5fT05FKCZyZWdzLT5ncCwgUFRSX0dQKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5zcCwgUFRSX1NQKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5mcCwgUFRSX0ZQKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5lYSwgUFRSX0VBKTsKKwlSRUdfSUdOT1JFX1JBTkdFKFBUUl9CQSwgUFRSX0JBKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5yYSwgUFRSX1JBKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5lYSwgUFRSX1BDKTsgLyogdXNlIGVhIGZvciBQQyAqLworCWlmICghcmV0KQorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW5faWdub3JlKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgUFRSX1NUQVRVUyAqIDQsIC0xKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZWZpbmUgdGhlIHJlZ2lzdGVyIHNldHMgYXZhaWxhYmxlIG9uIE5pb3MyIHVuZGVyIExpbnV4CisgKi8KK2VudW0gbmlvczJfcmVnc2V0IHsKKwlSRUdTRVRfR0VORVJBTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgbmlvczJfcmVnc2V0c1tdID0geworCVtSRUdTRVRfR0VORVJBTF0gPSB7CisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1BSU1RBVFVTLAorCQkubiA9IE5VTV9QVFJBQ0VfUkVHLAorCQkuc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLmFsaWduID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkuZ2V0ID0gZ2VucmVnc19nZXQsCisJCS5zZXQgPSBnZW5yZWdzX3NldCwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgbmlvczJfdXNlcl92aWV3ID0geworCS5uYW1lID0gIm5pb3MyIiwKKwkuZV9tYWNoaW5lID0gRUxGX0FSQ0gsCisJLmVpX29zYWJpID0gRUxGX09TQUJJLAorCS5yZWdzZXRzID0gbmlvczJfcmVnc2V0cywKKwkubiA9IEFSUkFZX1NJWkUobmlvczJfcmVnc2V0cykKK307CisKK2NvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiAmbmlvczJfdXNlcl92aWV3OworfQorCit2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisKK30KKworbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlyZXR1cm4gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOworfQorCithc21saW5rYWdlIGludCBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJCXJldCA9IHRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9lbnRyeSh0YXNrX3B0X3JlZ3MoY3VycmVudCkpOworCisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSB2b2lkIGRvX3N5c2NhbGxfdHJhY2VfZXhpdCh2b2lkKQoreworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKKwkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQodGFza19wdF9yZWdzKGN1cnJlbnQpLCAwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3NldHVwLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzEyMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogTmlvczItc3BlY2lmaWMgcGFydHMgb2Ygc3lzdGVtIHNldHVwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDAxIFZpYyBQaGlsbGlwcyA8dmljQG1pY3JvdHJvbml4LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKworI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9jcHVpbmZvLmg+CisKK3Vuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0OworRVhQT1JUX1NZTUJPTChtZW1vcnlfc3RhcnQpOworCit1bnNpZ25lZCBsb25nIG1lbW9yeV9lbmQ7CitFWFBPUlRfU1lNQk9MKG1lbW9yeV9lbmQpOworCit1bnNpZ25lZCBsb25nIG1lbW9yeV9zaXplOworCitzdGF0aWMgc3RydWN0IHB0X3JlZ3MgZmFrZV9yZWdzID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkJCQkwLCAwLCAwLCAwLCAwLCAwLAorCQkJCQkwfTsKKworLyogQ29weSBhIHNob3J0IGhvb2sgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgdG8gdGhlIGV4Y2VwdGlvbiBhZGRyZXNzICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9leGNlcHRpb25faGFuZGxlcih1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgc3RhcnQgPSAodW5zaWduZWQgaW50KSBleGNlcHRpb25faGFuZGxlcl9ob29rOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCB0bXAgPSAwOworCisJaWYgKHN0YXJ0ID09IGFkZHIpIHsKKwkJLyogVGhlIENQVSBleGNlcHRpb24gYWRkcmVzcyBhbHJlYWR5IHBvaW50cyB0byB0aGUgaGFuZGxlci4gKi8KKwkJcmV0dXJuOworCX0KKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJImxkdwklMiwwKCUwKVxuIgorCQkic3R3CSUyLDAoJTEpXG4iCisJCSJsZHcJJTIsNCglMClcbiIKKwkJInN0dwklMiw0KCUxKVxuIgorCQkibGR3CSUyLDgoJTApXG4iCisJCSJzdHcJJTIsOCglMSlcbiIKKwkJImZsdXNoZAkwKCUxKVxuIgorCQkiZmx1c2hkCTQoJTEpXG4iCisJCSJmbHVzaGQJOCglMSlcbiIKKwkJImZsdXNoaSAlMVxuIgorCQkiYWRkaQklMSwlMSw0XG4iCisJCSJmbHVzaGkgJTFcbiIKKwkJImFkZGkJJTEsJTEsNFxuIgorCQkiZmx1c2hpICUxXG4iCisJCSJmbHVzaHBcbiIKKwkJOiAvKiBubyBvdXRwdXQgcmVnaXN0ZXJzICovCisJCTogInIiIChzdGFydCksICJyIiAoYWRkciksICJyIiAodG1wKQorCQk6ICJtZW1vcnkiCisJKTsKK30KKworLyogQ29weSB0aGUgZmFzdCBUTEIgbWlzcyBoYW5kbGVyICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9mYXN0X3RsYl9taXNzX2hhbmRsZXIodW5zaWduZWQgaW50IGFkZHIpCit7CisJdW5zaWduZWQgaW50IHN0YXJ0ID0gKHVuc2lnbmVkIGludCkgZmFzdF9oYW5kbGVyOworCXVuc2lnbmVkIGludCBlbmQgPSAodW5zaWduZWQgaW50KSBmYXN0X2hhbmRsZXJfZW5kOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCB0bXAgPSAwOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMTpcbiIKKwkJIglsZHcJJTMsMCglMClcbiIKKwkJIglzdHcJJTMsMCglMSlcbiIKKwkJIglmbHVzaGQJMCglMSlcbiIKKwkJIglmbHVzaGkJJTFcbiIKKwkJIglmbHVzaHBcbiIKKwkJIglhZGRpCSUwLCUwLDRcbiIKKwkJIglhZGRpCSUxLCUxLDRcbiIKKwkJIglibmUJJTAsJTIsMWJcbiIKKwkJOiAvKiBubyBvdXRwdXQgcmVnaXN0ZXJzICovCisJCTogInIiIChzdGFydCksICJyIiAoYWRkciksICJyIiAoZW5kKSwgInIiICh0bXApCisJCTogIm1lbW9yeSIKKwkpOworfQorCisvKgorICogc2F2ZSBhcmdzIHBhc3NlZCBmcm9tIHUtYm9vdCwgY2FsbGVkIGZyb20gaGVhZC5TCisgKgorICogQHI0OiBOSU9TIG1hZ2ljCisgKiBAcjU6IGluaXRyZCBzdGFydAorICogQHI2OiBpbml0cmQgZW5kIG9yIGZkdAorICogQHI3OiBrZXJuZWwgY29tbWFuZCBsaW5lCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbmlvczJfYm9vdF9pbml0KHVuc2lnbmVkIHI0LCB1bnNpZ25lZCByNSwgdW5zaWduZWQgcjYsCisJCQkJICAgICAgIHVuc2lnbmVkIHI3KQoreworCXVuc2lnbmVkIGR0Yl9wYXNzZWQgPSAwOworCWNoYXIgY21kbGluZV9wYXNzZWRbQ09NTUFORF9MSU5FX1NJWkVdID0geyAwLCB9OworCisjaWYgZGVmaW5lZChDT05GSUdfTklPUzJfUEFTU19DTURMSU5FKQorCWlmIChyNCA9PSAweDUzNGY0OTRlKSB7IC8qIHI0IGlzIG1hZ2ljIE5JT1MgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOSVRSRCkKKwkJaWYgKHI1KSB7IC8qIGluaXRyYW1mcyAqLworCQkJaW5pdHJkX3N0YXJ0ID0gcjU7CisJCQlpbml0cmRfZW5kID0gcjY7CisJCX0KKyNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgKi8KKwkJZHRiX3Bhc3NlZCA9IHI2OworCisJCWlmIChyNykKKwkJCXN0cm5jcHkoY21kbGluZV9wYXNzZWQsIChjaGFyICopcjcsIENPTU1BTkRfTElORV9TSVpFKTsKKwl9CisjZW5kaWYKKworCWVhcmx5X2luaXRfZGV2dHJlZSgodm9pZCAqKWR0Yl9wYXNzZWQpOworCisjaWZuZGVmIENPTkZJR19DTURMSU5FX0ZPUkNFCisJaWYgKGNtZGxpbmVfcGFzc2VkWzBdKQorCQlzdHJuY3B5KGJvb3RfY29tbWFuZF9saW5lLCBjbWRsaW5lX3Bhc3NlZCwgQ09NTUFORF9MSU5FX1NJWkUpOworI2lmZGVmIENPTkZJR19OSU9TMl9DTURMSU5FX0lHTk9SRV9EVEIKKwllbHNlCisJCXN0cm5jcHkoYm9vdF9jb21tYW5kX2xpbmUsIENPTkZJR19DTURMSU5FLCBDT01NQU5EX0xJTkVfU0laRSk7CisjZW5kaWYKKyNlbmRpZgorfQorCit2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCit7CisJaW50IGJvb3RtYXBfc2l6ZTsKKworCWNvbnNvbGVfdmVyYm9zZSgpOworCisJbWVtb3J5X3N0YXJ0ID0gUEFHRV9BTElHTigodW5zaWduZWQgbG9uZylfX3BhKF9lbmQpKTsKKwltZW1vcnlfZW5kID0gKHVuc2lnbmVkIGxvbmcpIENPTkZJR19OSU9TMl9NRU1fQkFTRSArIG1lbW9yeV9zaXplOworCisJaW5pdF9tbS5zdGFydF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpIF9zdGV4dDsKKwlpbml0X21tLmVuZF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpIF9ldGV4dDsKKwlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKKwlpbml0X21tLmJyayA9ICh1bnNpZ25lZCBsb25nKSBfZW5kOworCWluaXRfdGFzay50aHJlYWQua3JlZ3MgPSAmZmFrZV9yZWdzOworCisJLyogS2VlcCBhIGNvcHkgb2YgY29tbWFuZCBsaW5lICovCisJKmNtZGxpbmVfcCA9IGJvb3RfY29tbWFuZF9saW5lOworCisJbWluX2xvd19wZm4gPSBQRk5fVVAobWVtb3J5X3N0YXJ0KTsKKwltYXhfbG93X3BmbiA9IFBGTl9ET1dOKG1lbW9yeV9lbmQpOworCW1heF9tYXBuciA9IG1heF9sb3dfcGZuOworCisJLyoKKwkgKiBnaXZlIGFsbCB0aGUgbWVtb3J5IHRvIHRoZSBib290bWFwIGFsbG9jYXRvciwgIHRlbGwgaXQgdG8gcHV0IHRoZQorCSAqIGJvb3QgbWVtX21hcCBhdCB0aGUgc3RhcnQgb2YgbWVtb3J5CisJICovCisJcHJfZGVidWcoImluaXRfYm9vdG1lbV9ub2RlKD8sJSNseCwgJSN4LCAlI2x4KVxuIiwKKwkJbWluX2xvd19wZm4sIFBGTl9ET1dOKFBIWVNfT0ZGU0VUKSwgbWF4X2xvd19wZm4pOworCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwKKwkJCQkJbWluX2xvd19wZm4sIFBGTl9ET1dOKFBIWVNfT0ZGU0VUKSwKKwkJCQkJbWF4X2xvd19wZm4pOworCisJLyoKKwkgKiBmcmVlIHRoZSB1c2FibGUgbWVtb3J5LCAgd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZG8gbm90IGZyZWUKKwkgKiB0aGUgYm9vdG1lbSBiaXRtYXAgc28gd2UgdGhlbiByZXNlcnZlIGl0IGFmdGVyIGZyZWVpbmcgaXQgOi0pCisJICovCisJcHJfZGVidWcoImZyZWVfYm9vdG1lbSglI2x4LCAlI2x4KVxuIiwKKwkJbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kIC0gbWVtb3J5X3N0YXJ0KTsKKwlmcmVlX2Jvb3RtZW0obWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kIC0gbWVtb3J5X3N0YXJ0KTsKKworCS8qCisJICogUmVzZXJ2ZSB0aGUgYm9vdG1lbSBiaXRtYXAgaXRzZWxmIGFzIHdlbGwuIFdlIGRvIHRoaXMgaW4gdHdvCisJICogc3RlcHMgKGZpcnN0IHN0ZXAgd2FzIGluaXRfYm9vdG1lbSgpKSBiZWNhdXNlIHRoaXMgY2F0Y2hlcworCSAqIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB1cyBhY2NpZGVudGFsbHkgaW5pdGlhbGl6aW5nIHRoZQorCSAqIGJvb3RtZW0gYWxsb2NhdG9yIHdpdGggYW4gaW52YWxpZCBSQU0gYXJlYS4KKwkgKgorCSAqIEFyZ3VtZW50cyBhcmUgc3RhcnQsIHNpemUKKwkgKi8KKwlwcl9kZWJ1ZygicmVzZXJ2ZV9ib290bWVtKCUjbHgsICUjeClcbiIsIG1lbW9yeV9zdGFydCwgYm9vdG1hcF9zaXplKTsKKwlyZXNlcnZlX2Jvb3RtZW0obWVtb3J5X3N0YXJ0LCBib290bWFwX3NpemUsIEJPT1RNRU1fREVGQVVMVCk7CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwlpZiAoaW5pdHJkX3N0YXJ0KSB7CisJCXJlc2VydmVfYm9vdG1lbSh2aXJ0X3RvX3BoeXMoKHZvaWQgKilpbml0cmRfc3RhcnQpLAorCQkJCWluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQsIEJPT1RNRU1fREVGQVVMVCk7CisJfQorI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLworCisJdW5mbGF0dGVuX2FuZF9jb3B5X2RldmljZV90cmVlKCk7CisKKwlzZXR1cF9jcHVpbmZvKCk7CisKKwljb3B5X2V4Y2VwdGlvbl9oYW5kbGVyKGNwdWluZm8uZXhjZXB0aW9uX2FkZHIpOworCisJbW11X2luaXQoKTsKKworCWNvcHlfZmFzdF90bGJfbWlzc19oYW5kbGVyKGNwdWluZm8uZmFzdF90bGJfbWlzc19leGNfYWRkcik7CisKKwkvKgorCSAqIEluaXRpYWxpemUgTU1VIGNvbnRleHQgaGFuZGxpbmcgaGVyZSBiZWNhdXNlIGRhdGEgZnJvbSBjcHVpbmZvIGlzCisJICogbmVlZGVkIGZvciB0aGlzLgorCSAqLworCW1tdV9jb250ZXh0X2luaXQoKTsKKworCS8qCisJICogZ2V0IGttYWxsb2MgaW50byBnZWFyCisJICovCisJcGFnaW5nX2luaXQoKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1ZUKSAmJiBkZWZpbmVkKENPTkZJR19EVU1NWV9DT05TT0xFKQorCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDI3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9zaWduYWwuYwpAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKworI2luY2x1ZGUgPGFzbS91Y29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKyNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCisKKy8qCisgKiBEbyBhIHNpZ25hbCByZXR1cm47IHVuZG8gdGhlIHNpZ25hbCBzdGFjay4KKyAqCisgKiBLZWVwIHRoZSByZXR1cm4gY29kZSBvbiB0aGUgc3RhY2sgcXVhZHdvcmQgYWxpZ25lZCEKKyAqIFRoYXQgbWFrZXMgdGhlIGNhY2hlIGZsdXNoIGJlbG93IGVhc2llci4KKyAqLworCitzdHJ1Y3QgcnRfc2lnZnJhbWUgeworCXN0cnVjdCBzaWdpbmZvIGluZm87CisJc3RydWN0IHVjb250ZXh0IHVjOworfTsKKworc3RhdGljIGlubGluZSBpbnQgcnRfcmVzdG9yZV91Y29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJc3RydWN0IHN3aXRjaF9zdGFjayAqc3csCisJCQkJCXN0cnVjdCB1Y29udGV4dCAqdWMsIGludCAqcHIyKQoreworCWludCB0ZW1wOworCWdyZWdfdCAqZ3JlZ3MgPSB1Yy0+dWNfbWNvbnRleHQuZ3JlZ3M7CisJaW50IGVycjsKKworCS8qIEFsd2F5cyBtYWtlIGFueSBwZW5kaW5nIHJlc3RhcnRlZCBzeXN0ZW0gY2FsbHMgcmV0dXJuIC1FSU5UUiAqLworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jay5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKKworCWVyciA9IF9fZ2V0X3VzZXIodGVtcCwgJnVjLT51Y19tY29udGV4dC52ZXJzaW9uKTsKKwlpZiAodGVtcCAhPSBNQ09OVEVYVF9WRVJTSU9OKQorCQlnb3RvIGJhZGZyYW1lOworCS8qIHJlc3RvcmUgcGFzc2VkIHJlZ2lzdGVycyAqLworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxLCAmZ3JlZ3NbMF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIyLCAmZ3JlZ3NbMV0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIzLCAmZ3JlZ3NbMl0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI0LCAmZ3JlZ3NbM10pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI1LCAmZ3JlZ3NbNF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI2LCAmZ3JlZ3NbNV0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI3LCAmZ3JlZ3NbNl0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI4LCAmZ3JlZ3NbN10pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI5LCAmZ3JlZ3NbOF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxMCwgJmdyZWdzWzldKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5yMTEsICZncmVnc1sxMF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxMiwgJmdyZWdzWzExXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjEzLCAmZ3JlZ3NbMTJdKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5yMTQsICZncmVnc1sxM10pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxNSwgJmdyZWdzWzE0XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIxNiwgJmdyZWdzWzE1XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIxNywgJmdyZWdzWzE2XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIxOCwgJmdyZWdzWzE3XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIxOSwgJmdyZWdzWzE4XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIyMCwgJmdyZWdzWzE5XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIyMSwgJmdyZWdzWzIwXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIyMiwgJmdyZWdzWzIxXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIyMywgJmdyZWdzWzIyXSk7CisJLyogZ3JlZ3NbMjNdIGlzIGhhbmRsZWQgYmVsb3cgKi8KKwllcnIgfD0gX19nZXRfdXNlcihzdy0+ZnAsICZncmVnc1syNF0pOyAgLyogVmVyaWZ5LCBzaG91bGQgdGhpcyBiZQorCQkJCQkJCXNldHRhYmxlICovCisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPmdwLCAmZ3JlZ3NbMjVdKTsgIC8qIFZlcmlmeSwgc2hvdWxkIHRoaXMgYmUKKwkJCQkJCQlzZXR0YWJsZSAqLworCisJZXJyIHw9IF9fZ2V0X3VzZXIodGVtcCwgJmdyZWdzWzI2XSk7ICAvKiBOb3QgcmVhbGx5IG5lY2Vzc2FyeSBubyB1c2VyCisJCQkJCQkJc2V0dGFibGUgYml0cyAqLworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmVhLCAmZ3JlZ3NbMjddKTsKKworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnJhLCAmZ3JlZ3NbMjNdKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5zcCwgJmdyZWdzWzI4XSk7CisKKwlyZWdzLT5vcmlnX3IyID0gLTE7CQkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzICovCisKKwllcnIgfD0gcmVzdG9yZV9hbHRzdGFjaygmdWMtPnVjX3N0YWNrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGJhZGZyYW1lOworCisJKnByMiA9IHJlZ3MtPnIyOworCXJldHVybiBlcnI7CisKK2JhZGZyYW1lOgorCXJldHVybiAxOworfQorCithc21saW5rYWdlIGludCBkb19ydF9zaWdyZXR1cm4oc3RydWN0IHN3aXRjaF9zdGFjayAqc3cpCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikoc3cgKyAxKTsKKwkvKiBWZXJpZnksIGNhbiB3ZSBmb2xsb3cgdGhlIHN0YWNrIGJhY2sgKi8KKwlzdHJ1Y3QgcnRfc2lnZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSAqKSByZWdzLT5zcDsKKwlzaWdzZXRfdCBzZXQ7CisJaW50IHJ2YWw7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKKwkJZ290byBiYWRmcmFtZTsKKworCWlmIChfX2NvcHlfZnJvbV91c2VyKCZzZXQsICZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2l6ZW9mKHNldCkpKQorCQlnb3RvIGJhZGZyYW1lOworCisJc2V0X2N1cnJlbnRfYmxvY2tlZCgmc2V0KTsKKworCWlmIChydF9yZXN0b3JlX3Vjb250ZXh0KHJlZ3MsIHN3LCAmZnJhbWUtPnVjLCAmcnZhbCkpCisJCWdvdG8gYmFkZnJhbWU7CisKKwlyZXR1cm4gcnZhbDsKKworYmFkZnJhbWU6CisJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBydF9zZXR1cF91Y29udGV4dChzdHJ1Y3QgdWNvbnRleHQgKnVjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncyAtIDE7CisJZ3JlZ190ICpncmVncyA9IHVjLT51Y19tY29udGV4dC5ncmVnczsKKwlpbnQgZXJyID0gMDsKKworCWVyciB8PSBfX3B1dF91c2VyKE1DT05URVhUX1ZFUlNJT04sICZ1Yy0+dWNfbWNvbnRleHQudmVyc2lvbik7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEsICZncmVnc1swXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjIsICZncmVnc1sxXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjMsICZncmVnc1syXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjQsICZncmVnc1szXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjUsICZncmVnc1s0XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjYsICZncmVnc1s1XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjcsICZncmVnc1s2XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjgsICZncmVnc1s3XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjksICZncmVnc1s4XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEwLCAmZ3JlZ3NbOV0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxMSwgJmdyZWdzWzEwXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEyLCAmZ3JlZ3NbMTFdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTMsICZncmVnc1sxMl0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxNCwgJmdyZWdzWzEzXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjE1LCAmZ3JlZ3NbMTRdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjE2LCAmZ3JlZ3NbMTVdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjE3LCAmZ3JlZ3NbMTZdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjE4LCAmZ3JlZ3NbMTddKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjE5LCAmZ3JlZ3NbMThdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjIwLCAmZ3JlZ3NbMTldKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjIxLCAmZ3JlZ3NbMjBdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjIyLCAmZ3JlZ3NbMjFdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjIzLCAmZ3JlZ3NbMjJdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yYSwgJmdyZWdzWzIzXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3ctPmZwLCAmZ3JlZ3NbMjRdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+Z3AsICZncmVnc1syNV0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmVhLCAmZ3JlZ3NbMjddKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5zcCwgJmdyZWdzWzI4XSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpnZXRfc2lnZnJhbWUoc3RydWN0IGtzaWduYWwgKmtzaWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCSBzaXplX3QgZnJhbWVfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHVzcDsKKworCS8qIERlZmF1bHQgdG8gdXNpbmcgbm9ybWFsIHN0YWNrLiAgKi8KKwl1c3AgPSByZWdzLT5zcDsKKworCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLworCXVzcCA9IHNpZ3NwKHVzcCwga3NpZyk7CisKKwkvKiBWZXJpZnksIGlzIGl0IDMyIG9yIDY0IGJpdCBhbGlnbmVkICovCisJcmV0dXJuICh2b2lkICopKCh1c3AgLSBmcmFtZV9zaXplKSAmIC04VUwpOworfQorCitzdGF0aWMgaW50IHNldHVwX3J0X2ZyYW1lKHN0cnVjdCBrc2lnbmFsICprc2lnLCBzaWdzZXRfdCAqc2V0LAorCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcnRfc2lnZnJhbWUgKmZyYW1lOworCWludCBlcnIgPSAwOworCisJZnJhbWUgPSBnZXRfc2lnZnJhbWUoa3NpZywgcmVncywgc2l6ZW9mKCpmcmFtZSkpOworCisJaWYgKGtzaWctPmthLnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKKwkJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyKCZmcmFtZS0+aW5mbywgJmtzaWctPmluZm8pOworCisJLyogQ3JlYXRlIHRoZSB1Y29udGV4dC4gICovCisJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKKwllcnIgfD0gX19zYXZlX2FsdHN0YWNrKCZmcmFtZS0+dWMudWNfc3RhY2ssIHJlZ3MtPnNwKTsKKwllcnIgfD0gcnRfc2V0dXBfdWNvbnRleHQoJmZyYW1lLT51YywgcmVncyk7CisJZXJyIHw9IGNvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKKworCWlmIChlcnIpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCisJLyogU2V0IHVwIHRvIHJldHVybiBmcm9tIHVzZXJzcGFjZTsganVtcCB0byBmaXhlZCBhZGRyZXNzIHNpZ3JldHVybgorCSAgIHRyYW1wb2xpbmUgb24ga3VzZXIgcGFnZS4gICovCisJcmVncy0+cmEgPSAodW5zaWduZWQgbG9uZykgKDB4MTA0MCk7CisKKwkvKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzaWduYWwgaGFuZGxlciAqLworCXJlZ3MtPnNwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOworCXJlZ3MtPnI0ID0gKHVuc2lnbmVkIGxvbmcpIGtzaWctPnNpZzsKKwlyZWdzLT5yNSA9ICh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPmluZm87CisJcmVncy0+cjYgPSAodW5zaWduZWQgbG9uZykgJmZyYW1lLT51YzsKKwlyZWdzLT5lYSA9ICh1bnNpZ25lZCBsb25nKSBrc2lnLT5rYS5zYS5zYV9oYW5kbGVyOworCXJldHVybiAwOworCitnaXZlX3NpZ3NlZ3Y6CisJZm9yY2Vfc2lnc2Vndihrc2lnLT5zaWcsIGN1cnJlbnQpOworCXJldHVybiAtRUZBVUxUOworfQorCisvKgorICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlcgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfc2lnbmFsKHN0cnVjdCBrc2lnbmFsICprc2lnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgcmV0OworCXNpZ3NldF90ICpvbGRzZXQgPSBzaWdtYXNrX3RvX3NhdmUoKTsKKworCS8qIHNldCB1cCB0aGUgc3RhY2sgZnJhbWUgKi8KKwlyZXQgPSBzZXR1cF9ydF9mcmFtZShrc2lnLCBvbGRzZXQsIHJlZ3MpOworCisJc2lnbmFsX3NldHVwX2RvbmUocmV0LCBrc2lnLCAwKTsKK30KKworc3RhdGljIGludCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHJldHZhbCA9IDAsIGNvbnRpbnVlX2FkZHIgPSAwLCByZXN0YXJ0X2FkZHIgPSAwOworCWludCByZXN0YXJ0ID0gMDsKKwlzdHJ1Y3Qga3NpZ25hbCBrc2lnOworCisJY3VycmVudC0+dGhyZWFkLmtyZWdzID0gcmVnczsKKworCS8qCisJICogSWYgd2Ugd2VyZSBmcm9tIGEgc3lzdGVtIGNhbGwsIGNoZWNrIGZvciBzeXN0ZW0gY2FsbCByZXN0YXJ0aW5nLi4uCisJICovCisJaWYgKHJlZ3MtPm9yaWdfcjIgPj0gMCkgeworCQljb250aW51ZV9hZGRyID0gcmVncy0+ZWE7CisJCXJlc3RhcnRfYWRkciA9IGNvbnRpbnVlX2FkZHIgLSA0OworCQlyZXR2YWwgPSByZWdzLT5yMjsKKworCQkvKgorCQkgKiBQcmVwYXJlIGZvciBzeXN0ZW0gY2FsbCByZXN0YXJ0LiBXZSBkbyB0aGlzIGhlcmUgc28gdGhhdCBhCisJCSAqIGRlYnVnZ2VyIHdpbGwgc2VlIHRoZSBhbHJlYWR5IGNoYW5nZWQgUEMuCisJCSAqLworCQlzd2l0Y2ggKHJldHZhbCkgeworCQljYXNlIEVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKKwkJCXJlc3RhcnQgPSAtMjsKKwkJY2FzZSBFUkVTVEFSVE5PSEFORDoKKwkJY2FzZSBFUkVTVEFSVFNZUzoKKwkJY2FzZSBFUkVTVEFSVE5PSU5UUjoKKwkJCXJlc3RhcnQrKzsKKwkJCXJlZ3MtPnIyID0gcmVncy0+b3JpZ19yMjsKKwkJCXJlZ3MtPnI3ID0gcmVncy0+b3JpZ19yNzsKKwkJCXJlZ3MtPmVhID0gcmVzdGFydF9hZGRyOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZ2V0X3NpZ25hbCgma3NpZykpIHsKKwkJLyogaGFuZGxlciAqLworCQlpZiAodW5saWtlbHkocmVzdGFydCAmJiByZWdzLT5lYSA9PSByZXN0YXJ0X2FkZHIpKSB7CisJCQlpZiAocmV0dmFsID09IEVSRVNUQVJUTk9IQU5EIHx8CisJCQkgICAgcmV0dmFsID09IEVSRVNUQVJUX1JFU1RBUlRCTE9DSyB8fAorCQkJICAgICAocmV0dmFsID09IEVSRVNUQVJUU1lTCisJCQkJJiYgIShrc2lnLmthLnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpKSB7CisJCQkJcmVncy0+cjIgPSBFSU5UUjsKKwkJCQlyZWdzLT5yNyA9IDE7CisJCQkJcmVncy0+ZWEgPSBjb250aW51ZV9hZGRyOworCQkJfQorCQl9CisJCWhhbmRsZV9zaWduYWwoJmtzaWcsIHJlZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE5vIGhhbmRsZXIgcHJlc2VudAorCSAqLworCWlmICh1bmxpa2VseShyZXN0YXJ0KSAmJiByZWdzLT5lYSA9PSByZXN0YXJ0X2FkZHIpIHsKKwkJcmVncy0+ZWEgPSBjb250aW51ZV9hZGRyOworCQlyZWdzLT5yMiA9IF9fTlJfcmVzdGFydF9zeXNjYWxsOworCX0KKworCS8qCisJKiBJZiB0aGVyZSdzIG5vIHNpZ25hbCB0byBkZWxpdmVyLCB3ZSBqdXN0IHB1dCB0aGUgc2F2ZWQgc2lnbWFzayBiYWNrLgorCSovCisJcmVzdG9yZV9zYXZlZF9zaWdtYXNrKCk7CisKKwlyZXR1cm4gcmVzdGFydDsKK30KKworYXNtbGlua2FnZSBpbnQgZG9fbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwkvKgorCSAqIFdlIHdhbnQgdGhlIGNvbW1vbiBjYXNlIHRvIGdvIGZhc3QsIHdoaWNoIGlzIHdoeSB3ZSBtYXkgaW4gY2VydGFpbgorCSAqIGNhc2VzIGdldCBoZXJlIGZyb20ga2VybmVsIG1vZGUuIEp1c3QgcmV0dXJuIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKKwkgKiBpZiBzby4KKwkgKi8KKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORykpIHsKKwkJaW50IHJlc3RhcnQgPSBkb19zaWduYWwocmVncyk7CisKKwkJaWYgKHVubGlrZWx5KHJlc3RhcnQpKSB7CisJCQkvKgorCQkJICogUmVzdGFydCB3aXRob3V0IGhhbmRsZXJzLgorCQkJICogRGVhbCB3aXRoIGl0IHdpdGhvdXQgbGVhdmluZworCQkJICogdGhlIGtlcm5lbCBzcGFjZS4KKwkJCSAqLworCQkJcmV0dXJuIHJlc3RhcnQ7CisJCX0KKwl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKSkKKwkJdHJhY2Vob29rX25vdGlmeV9yZXN1bWUocmVncyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3N5c19uaW9zMi5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvc3lzX25pb3MyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzOTBlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3N5c19uaW9zMi5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCisvKiBzeXNfY2FjaGVmbHVzaCAtLSBmbHVzaCB0aGUgcHJvY2Vzc29yIGNhY2hlLiAqLworYXNtbGlua2FnZSBpbnQgc3lzX2NhY2hlZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQl1bnNpZ25lZCBpbnQgb3ApCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCisJLyogV2Ugb25seSBzdXBwb3J0IG9wIDAgbm93LCByZXR1cm4gZXJyb3IgaWYgb3AgaXMgbm9uLXplcm8uKi8KKwlpZiAob3ApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2hlY2sgZm9yIG92ZXJmbG93ICovCisJaWYgKGFkZHIgKyBsZW4gPCBhZGRyKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qCisJICogVmVyaWZ5IHRoYXQgdGhlIHNwZWNpZmllZCBhZGRyZXNzIHJlZ2lvbiBhY3R1YWxseSBiZWxvbmdzCisJICogdG8gdGhpcyBwcm9jZXNzLgorCSAqLworCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKKwlpZiAodm1hID09IE5VTEwgfHwgYWRkciA8IHZtYS0+dm1fc3RhcnQgfHwgYWRkciArIGxlbiA+IHZtYS0+dm1fZW5kKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX2dldHBhZ2VzaXplKHZvaWQpCit7CisJcmV0dXJuIFBBR0VfU0laRTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3N5c2NhbGxfdGFibGUuYyBiL2FyY2gvbmlvczIva2VybmVsL3N5c2NhbGxfdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmU2YWMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgQWx0ZXJhIENvcnBvcmF0aW9uIChDKSAyMDEzLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KKworI3VuZGVmIF9fU1lTQ0FMTAorI2RlZmluZSBfX1NZU0NBTEwobnIsIGNhbGwpIFtucl0gPSAoY2FsbCksCisKK3ZvaWQgKnN5c19jYWxsX3RhYmxlW19fTlJfc3lzY2FsbHNdID0geworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KK307CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC90aW1lLmMgYi9hcmNoL25pb3MyL2tlcm5lbC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0NTQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3RpbWUuYwpAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNkZWZpbmUgQUxURVJBX1RJTUVSX1NUQVRVU19SRUcJCTAKKyNkZWZpbmUgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHCTQKKyNkZWZpbmUgQUxURVJBX1RJTUVSX1BFUklPRExfUkVHCTgKKyNkZWZpbmUgQUxURVJBX1RJTUVSX1BFUklPREhfUkVHCTEyCisjZGVmaW5lIEFMVEVSQV9USU1FUl9TTkFQTF9SRUcJCTE2CisjZGVmaW5lIEFMVEVSQV9USU1FUl9TTkFQSF9SRUcJCTIwCisKKyNkZWZpbmUgQUxURVJBX1RJTUVSX0NPTlRST0xfSVRPX01TSwkoMHgxKQorI2RlZmluZSBBTFRFUkFfVElNRVJfQ09OVFJPTF9DT05UX01TSwkoMHgyKQorI2RlZmluZSBBTFRFUkFfVElNRVJfQ09OVFJPTF9TVEFSVF9NU0sJKDB4NCkKKyNkZWZpbmUgQUxURVJBX1RJTUVSX0NPTlRST0xfU1RPUF9NU0sJKDB4OCkKKworc3RydWN0IG5pb3MyX3RpbWVyIHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdW5zaWduZWQgbG9uZyBmcmVxOworfTsKKworc3RydWN0IG5pb3MyX2Nsb2NrZXZlbnRfZGV2IHsKKwlzdHJ1Y3QgbmlvczJfdGltZXIgdGltZXI7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjZWQ7Cit9OworCitzdHJ1Y3QgbmlvczJfY2xvY2tzb3VyY2UgeworCXN0cnVjdCBuaW9zMl90aW1lciB0aW1lcjsKKwlzdHJ1Y3QgY2xvY2tzb3VyY2UgY3M7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiAqCisJdG9fbmlvczJfY2xrZXZlbnQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXJldHVybiBjb250YWluZXJfb2YoZXZ0LCBzdHJ1Y3QgbmlvczJfY2xvY2tldmVudF9kZXYsIGNlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5pb3MyX2Nsb2Nrc291cmNlICoKKwl0b19uaW9zMl9jbGtzb3VyY2Uoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNzLCBzdHJ1Y3QgbmlvczJfY2xvY2tzb3VyY2UsIGNzKTsKK30KKworc3RhdGljIHUxNiB0aW1lcl9yZWFkdyhzdHJ1Y3QgbmlvczJfdGltZXIgKnRpbWVyLCB1MzIgb2ZmcykKK3sKKwlyZXR1cm4gcmVhZHcodGltZXItPmJhc2UgKyBvZmZzKTsKK30KKworc3RhdGljIHZvaWQgdGltZXJfd3JpdGV3KHN0cnVjdCBuaW9zMl90aW1lciAqdGltZXIsIHUxNiB2YWwsIHUzMiBvZmZzKQoreworCXdyaXRldyh2YWwsIHRpbWVyLT5iYXNlICsgb2Zmcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX3RpbWVyc25hcHNob3Qoc3RydWN0IG5pb3MyX3RpbWVyICp0aW1lcikKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCisJdGltZXJfd3JpdGV3KHRpbWVyLCAwLCBBTFRFUkFfVElNRVJfU05BUExfUkVHKTsKKwljb3VudCA9IHRpbWVyX3JlYWR3KHRpbWVyLCBBTFRFUkFfVElNRVJfU05BUEhfUkVHKSA8PCAxNiB8CisJCXRpbWVyX3JlYWR3KHRpbWVyLCBBTFRFUkFfVElNRVJfU05BUExfUkVHKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGN5Y2xlX3QgbmlvczJfdGltZXJfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXN0cnVjdCBuaW9zMl9jbG9ja3NvdXJjZSAqbmlvczJfY3MgPSB0b19uaW9zMl9jbGtzb3VyY2UoY3MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGNvdW50OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNvdW50ID0gcmVhZF90aW1lcnNuYXBzaG90KCZuaW9zMl9jcy0+dGltZXIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIENvdW50ZXIgaXMgY291bnRpbmcgZG93biAqLworCXJldHVybiB+Y291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmlvczJfY2xvY2tzb3VyY2UgbmlvczJfY3MgPSB7CisJLmNzID0geworCQkubmFtZQk9ICJuaW9zMi1jbGtzcmMiLAorCQkucmF0aW5nCT0gMjUwLAorCQkucmVhZAk9IG5pb3MyX3RpbWVyX3JlYWQsCisJCS5tYXNrCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJCS5mbGFncwk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorCX0sCit9OworCitjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCit7CisJcmV0dXJuIG5pb3MyX3RpbWVyX3JlYWQoJm5pb3MyX2NzLmNzKTsKK30KKworc3RhdGljIHZvaWQgbmlvczJfdGltZXJfc3RhcnQoc3RydWN0IG5pb3MyX3RpbWVyICp0aW1lcikKK3sKKwl1MTYgY3RybDsKKworCWN0cmwgPSB0aW1lcl9yZWFkdyh0aW1lciwgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKKwljdHJsIHw9IEFMVEVSQV9USU1FUl9DT05UUk9MX1NUQVJUX01TSzsKKwl0aW1lcl93cml0ZXcodGltZXIsIGN0cmwsIEFMVEVSQV9USU1FUl9DT05UUk9MX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIG5pb3MyX3RpbWVyX3N0b3Aoc3RydWN0IG5pb3MyX3RpbWVyICp0aW1lcikKK3sKKwl1MTYgY3RybDsKKworCWN0cmwgPSB0aW1lcl9yZWFkdyh0aW1lciwgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKKwljdHJsIHw9IEFMVEVSQV9USU1FUl9DT05UUk9MX1NUT1BfTVNLOworCXRpbWVyX3dyaXRldyh0aW1lciwgY3RybCwgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKK30KKworc3RhdGljIHZvaWQgbmlvczJfdGltZXJfY29uZmlnKHN0cnVjdCBuaW9zMl90aW1lciAqdGltZXIsIHVuc2lnbmVkIGxvbmcgcGVyaW9kLAorCWVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlKQoreworCXUxNiBjdHJsOworCisJLyogVGhlIHRpbWVyJ3MgYWN0dWFsIHBlcmlvZCBpcyBvbmUgY3ljbGUgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZQorCSAqIHN0b3JlZCBpbiB0aGUgcGVyaW9kIHJlZ2lzdGVyLiAqLworCSBwZXJpb2QtLTsKKworCWN0cmwgPSB0aW1lcl9yZWFkdyh0aW1lciwgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKKwkvKiBzdG9wIGNvdW50ZXIgKi8KKwl0aW1lcl93cml0ZXcodGltZXIsIGN0cmwgfCBBTFRFUkFfVElNRVJfQ09OVFJPTF9TVE9QX01TSywKKwkJQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKKworCS8qIHdyaXRlIG5ldyBjb3VudCAqLworCXRpbWVyX3dyaXRldyh0aW1lciwgcGVyaW9kLCBBTFRFUkFfVElNRVJfUEVSSU9ETF9SRUcpOworCXRpbWVyX3dyaXRldyh0aW1lciwgcGVyaW9kID4+IDE2LCBBTFRFUkFfVElNRVJfUEVSSU9ESF9SRUcpOworCisJY3RybCB8PSBBTFRFUkFfVElNRVJfQ09OVFJPTF9TVEFSVF9NU0sgfCBBTFRFUkFfVElNRVJfQ09OVFJPTF9JVE9fTVNLOworCWlmIChtb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQorCQljdHJsIHw9IEFMVEVSQV9USU1FUl9DT05UUk9MX0NPTlRfTVNLOworCWVsc2UKKwkJY3RybCAmPSB+QUxURVJBX1RJTUVSX0NPTlRST0xfQ09OVF9NU0s7CisJdGltZXJfd3JpdGV3KHRpbWVyLCBjdHJsLCBBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcpOworfQorCitzdGF0aWMgaW50IG5pb3MyX3RpbWVyX3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiAqbmlvczJfY2VkID0gdG9fbmlvczJfY2xrZXZlbnQoZXZ0KTsKKworCW5pb3MyX3RpbWVyX2NvbmZpZygmbmlvczJfY2VkLT50aW1lciwgZGVsdGEsIGV2dC0+bW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmlvczJfdGltZXJfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgcGVyaW9kOworCXN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiAqbmlvczJfY2VkID0gdG9fbmlvczJfY2xrZXZlbnQoZXZ0KTsKKwlzdHJ1Y3QgbmlvczJfdGltZXIgKnRpbWVyID0gJm5pb3MyX2NlZC0+dGltZXI7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlwZXJpb2QgPSBESVZfUk9VTkRfVVAodGltZXItPmZyZXEsIEhaKTsKKwkJbmlvczJfdGltZXJfY29uZmlnKHRpbWVyLCBwZXJpb2QsIENMT0NLX0VWVF9NT0RFX1BFUklPRElDKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCW5pb3MyX3RpbWVyX3N0b3AodGltZXIpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJbmlvczJfdGltZXJfc3RhcnQodGltZXIpOworCQlicmVhazsKKwl9Cit9CisKK2lycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKikgZGV2X2lkOworCXN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiAqbmlvczJfY2VkID0gdG9fbmlvczJfY2xrZXZlbnQoZXZ0KTsKKworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgY29uZGl0aW9uICovCisJdGltZXJfd3JpdGV3KCZuaW9zMl9jZWQtPnRpbWVyLCAwLCBBTFRFUkFfVElNRVJfU1RBVFVTX1JFRyk7CisJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuaW9zMl90aW1lcl9nZXRfYmFzZV9hbmRfZnJlcShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCXZvaWQgX19pb21lbSAqKmJhc2UsIHUzMiAqZnJlcSkKK3sKKwkqYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlpZiAoISpiYXNlKQorCQlwYW5pYygiVW5hYmxlIHRvIG1hcCByZWcgZm9yICVzXG4iLCBucC0+bmFtZSk7CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjbG9jay1mcmVxdWVuY3kiLCBmcmVxKSkKKwkJcGFuaWMoIlVuYWJsZSB0byBnZXQgJXMgY2xvY2sgZnJlcXVlbmN5XG4iLCBucC0+bmFtZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmlvczJfY2xvY2tldmVudF9kZXYgbmlvczJfY2UgPSB7CisJLmNlZCA9IHsKKwkJLm5hbWUgPSAibmlvczItY2xrZXZlbnQiLAorCQkuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJCS5yYXRpbmcgPSAyNTAsCisJCS5zaGlmdCA9IDMyLAorCQkuc2V0X25leHRfZXZlbnQgPSBuaW9zMl90aW1lcl9zZXRfbmV4dF9ldmVudCwKKwkJLnNldF9tb2RlID0gbmlvczJfdGltZXJfc2V0X21vZGUsCisJfSwKK307CisKK3N0YXRpYyBfX2luaXQgdm9pZCBuaW9zMl9jbG9ja2V2ZW50X2luaXQoc3RydWN0IGRldmljZV9ub2RlICp0aW1lcikKK3sKKwl2b2lkIF9faW9tZW0gKmlvYmFzZTsKKwl1MzIgZnJlcTsKKwlpbnQgaXJxOworCisJbmlvczJfdGltZXJfZ2V0X2Jhc2VfYW5kX2ZyZXEodGltZXIsICZpb2Jhc2UsICZmcmVxKTsKKworCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHRpbWVyLCAwKTsKKwlpZiAoIWlycSkKKwkJcGFuaWMoIlVuYWJsZSB0byBwYXJzZSB0aW1lciBpcnFcbiIpOworCisJbmlvczJfY2UudGltZXIuYmFzZSA9IGlvYmFzZTsKKwluaW9zMl9jZS50aW1lci5mcmVxID0gZnJlcTsKKworCW5pb3MyX2NlLmNlZC5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKwluaW9zMl9jZS5jZWQuaXJxID0gaXJxOworCisJbmlvczJfdGltZXJfc3RvcCgmbmlvczJfY2UudGltZXIpOworCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0ICovCisJdGltZXJfd3JpdGV3KCZuaW9zMl9jZS50aW1lciwgMCwgQUxURVJBX1RJTUVSX1NUQVRVU19SRUcpOworCisJaWYgKHJlcXVlc3RfaXJxKGlycSwgdGltZXJfaW50ZXJydXB0LCBJUlFGX1RJTUVSLCB0aW1lci0+bmFtZSwKKwkJJm5pb3MyX2NlLmNlZCkpCisJCXBhbmljKCJVbmFibGUgdG8gc2V0dXAgdGltZXIgaXJxXG4iKTsKKworCWNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoJm5pb3MyX2NlLmNlZCwgZnJlcSwgMSwgVUxPTkdfTUFYKTsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIG5pb3MyX2Nsb2Nrc291cmNlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICp0aW1lcikKK3sKKwl1bnNpZ25lZCBpbnQgY3RybDsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZTsKKwl1MzIgZnJlcTsKKworCW5pb3MyX3RpbWVyX2dldF9iYXNlX2FuZF9mcmVxKHRpbWVyLCAmaW9iYXNlLCAmZnJlcSk7CisKKwluaW9zMl9jcy50aW1lci5iYXNlID0gaW9iYXNlOworCW5pb3MyX2NzLnRpbWVyLmZyZXEgPSBmcmVxOworCisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJm5pb3MyX2NzLmNzLCBmcmVxKTsKKworCXRpbWVyX3dyaXRldygmbmlvczJfY3MudGltZXIsIFVTSFJUX01BWCwgQUxURVJBX1RJTUVSX1BFUklPRExfUkVHKTsKKwl0aW1lcl93cml0ZXcoJm5pb3MyX2NzLnRpbWVyLCBVU0hSVF9NQVgsIEFMVEVSQV9USU1FUl9QRVJJT0RIX1JFRyk7CisKKwkvKiBpbnRlcnJ1cHQgZGlzYWJsZSArIGNvbnRpbnVvdXMgKyBzdGFydCAqLworCWN0cmwgPSBBTFRFUkFfVElNRVJfQ09OVFJPTF9DT05UX01TSyB8IEFMVEVSQV9USU1FUl9DT05UUk9MX1NUQVJUX01TSzsKKwl0aW1lcl93cml0ZXcoJm5pb3MyX2NzLnRpbWVyLCBjdHJsLCBBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcpOworCisJLyogQ2FsaWJyYXRlIHRoZSBkZWxheSBsb29wIGRpcmVjdGx5ICovCisJbHBqX2ZpbmUgPSBmcmVxIC8gSFo7Cit9CisKKy8qCisgKiBUaGUgZmlyc3QgdGltZXIgaW5zdGFuY2Ugd2lsbCB1c2UgYXMgYSBjbG9ja2V2ZW50LiBJZiB0aGVyZSBhcmUgdHdvIG9yCisgKiBtb3JlIGluc3RhbmNlcywgdGhlIHNlY29uZCBvbmUgZ2V0cyB1c2VkIGFzIGNsb2Nrc291cmNlIGFuZCBhbGwKKyAqIG90aGVycyBhcmUgdW51c2VkLgorKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBuaW9zMl90aW1lX2luaXQoc3RydWN0IGRldmljZV9ub2RlICp0aW1lcikKK3sKKwlzdGF0aWMgaW50IG51bV9jYWxsZWQ7CisKKwlzd2l0Y2ggKG51bV9jYWxsZWQpIHsKKwljYXNlIDA6CisJCW5pb3MyX2Nsb2NrZXZlbnRfaW5pdCh0aW1lcik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbmlvczJfY2xvY2tzb3VyY2VfaW5pdCh0aW1lcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW51bV9jYWxsZWQrKzsKK30KKwordm9pZCByZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwl0cy0+dHZfc2VjID0gbWt0aW1lKDIwMDcsIDEsIDEsIDAsIDAsIDApOworCXRzLT50dl9uc2VjID0gMDsKK30KKwordm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCit7CisJY2xvY2tzb3VyY2Vfb2ZfaW5pdCgpOworfQorCitDTE9DS1NPVVJDRV9PRl9ERUNMQVJFKG5pb3MyX3RpbWVyLCAiYWx0cix0aW1lci0xLjAiLCBuaW9zMl90aW1lX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbmlvczIva2VybmVsL3RyYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiOTc2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC90cmFwcy5jCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogSGFyZHdhcmUgZXhjZXB0aW9uIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDAxIFZpYyBQaGlsbGlwcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworc3RhdGljIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CisKK3ZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQoreworCWNvbnNvbGVfdmVyYm9zZSgpOworCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKKwlwcl93YXJuKCJPb3BzOiAlcywgc2lnOiAlbGRcbiIsIHN0ciwgZXJyKTsKKwlzaG93X3JlZ3MocmVncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZkaWVfbG9jayk7CisJLyoKKwkgKiBkb19leGl0KCkgc2hvdWxkIHRha2UgY2FyZSBvZiBwYW5pYydpbmcgZnJvbSBhbiBpbnRlcnJ1cHQKKwkgKiBjb250ZXh0IHNvIHdlIGRvbid0IGhhbmRsZSBpdCBoZXJlCisJICovCisJZG9fZXhpdChlcnIpOworfQorCit2b2lkIF9leGNlcHRpb24oaW50IHNpZ25vLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzaWdpbmZvX3QgaW5mbzsKKworCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQlkaWUoIkV4Y2VwdGlvbiBpbiBrZXJuZWwgbW9kZSIsIHJlZ3MsIHNpZ25vKTsKKworCWluZm8uc2lfc2lnbm8gPSBzaWdubzsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2NvZGUgPSBjb2RlOworCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKSBhZGRyOworCWZvcmNlX3NpZ19pbmZvKHNpZ25vLCAmaW5mbywgY3VycmVudCk7Cit9CisKKy8qCisgKiBUaGUgc2hvd19zdGFjayBpcyBhbiBleHRlcm5hbCBBUEkgd2hpY2ggd2UgZG8gbm90IHVzZSBvdXJzZWx2ZXMuCisgKi8KKworaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDQ4OworCit2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzdGFjaykKK3sKKwl1bnNpZ25lZCBsb25nICplbmRzdGFjaywgYWRkcjsKKwlpbnQgaTsKKworCWlmICghc3RhY2spIHsKKwkJaWYgKHRhc2spCisJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLmtzcDsKKwkJZWxzZQorCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSZzdGFjazsKKwl9CisKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrOworCWVuZHN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgUEFHRV9BTElHTihhZGRyKTsKKworCXByX2VtZXJnKCJTdGFjayBmcm9tICUwOGx4OiIsICh1bnNpZ25lZCBsb25nKXN0YWNrKTsKKwlmb3IgKGkgPSAwOyBpIDwga3N0YWNrX2RlcHRoX3RvX3ByaW50OyBpKyspIHsKKwkJaWYgKHN0YWNrICsgMSA+IGVuZHN0YWNrKQorCQkJYnJlYWs7CisJCWlmIChpICUgOCA9PSAwKQorCQkJcHJfZW1lcmcoIlxuICAgICAgICIpOworCQlwcl9lbWVyZygiICUwOGx4IiwgKnN0YWNrKyspOworCX0KKworCXByX2VtZXJnKCJcbkNhbGwgVHJhY2U6Iik7CisJaSA9IDA7CisJd2hpbGUgKHN0YWNrICsgMSA8PSBlbmRzdGFjaykgeworCQlhZGRyID0gKnN0YWNrKys7CisJCS8qCisJCSAqIElmIHRoZSBhZGRyZXNzIGlzIGVpdGhlciBpbiB0aGUgdGV4dCBzZWdtZW50IG9mIHRoZQorCQkgKiBrZXJuZWwsIG9yIGluIHRoZSByZWdpb24gd2hpY2ggY29udGFpbnMgdm1hbGxvYydlZAorCQkgKiBtZW1vcnksIGl0ICptYXkqIGJlIHRoZSBhZGRyZXNzIG9mIGEgY2FsbGluZworCQkgKiByb3V0aW5lOyBpZiBzbywgcHJpbnQgaXQgc28gdGhhdCBzb21lb25lIHRyYWNpbmcKKwkJICogZG93biB0aGUgY2F1c2Ugb2YgdGhlIGNyYXNoIHdpbGwgYmUgYWJsZSB0byBmaWd1cmUKKwkJICogb3V0IHRoZSBjYWxsIHBhdGggdGhhdCB3YXMgdGFrZW4uCisJCSAqLworCQlpZiAoKChhZGRyID49ICh1bnNpZ25lZCBsb25nKSBfc3RleHQpICYmCisJCSAgICAgKGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpIF9ldGV4dCkpKSB7CisJCQlpZiAoaSAlIDQgPT0gMCkKKwkJCQlwcl9lbWVyZygiXG4gICAgICAgIik7CisJCQlwcl9lbWVyZygiIFs8JTA4bHg+XSIsIGFkZHIpOworCQkJaSsrOworCQl9CisJfQorCXByX2VtZXJnKCJcbiIpOworfQorCit2b2lkIF9faW5pdCB0cmFwX2luaXQodm9pZCkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KK30KKworLyogQnJlYWtwb2ludCBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgYnJlYWtwb2ludF9jKHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwkvKgorCSAqIFRoZSBicmVha3BvaW50IGVudHJ5IGNvZGUgaGFzIG1vdmVkIHRoZSBQQyBvbiBieSA0IGJ5dGVzLCBzbyB3ZSBtdXN0CisJICogbW92ZSBpdCBiYWNrLiBUaGlzIGNvdWxkIGJlIGRvbmUgb24gdGhlIGhvc3QgYnV0IHdlIGRvIGl0IGhlcmUKKwkgKiBiZWNhdXNlIG1vbml0b3IuUyBvZiBKVEFHIGdkYnNlcnZlciBkb2VzIGl0IHRvby4KKwkgKi8KKwlmcC0+ZWEgLT0gNDsKKwlfZXhjZXB0aW9uKFNJR1RSQVAsIGZwLCBUUkFQX0JSS1BULCBmcC0+ZWEpOworfQorCisjaWZuZGVmIENPTkZJR19OSU9TMl9BTElHTk1FTlRfVFJBUAorLyogQWxpZ25tZW50IGV4Y2VwdGlvbiBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgaGFuZGxlX3VuYWxpZ25lZF9jKHN0cnVjdCBwdF9yZWdzICpmcCwgaW50IGNhdXNlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IFJEQ1RMKENUTF9CQURBRERSKTsKKworCWNhdXNlID4+PSAyOworCWZwLT5lYSAtPSA0OworCisJaWYgKGZpeHVwX2V4Y2VwdGlvbihmcCkpCisJCXJldHVybjsKKworCWlmICghdXNlcl9tb2RlKGZwKSkgeworCQlwcl9hbGVydCgiVW5hbGlnbmVkIGFjY2VzcyBmcm9tIGtlcm5lbCBtb2RlLCB0aGlzIG1pZ2h0IGJlIGEgaGFyZHdhcmVcbiIpOworCQlwcl9hbGVydCgicHJvYmxlbSwgZHVtcCByZWdpc3RlcnMgYW5kIHJlc3RhcnQgdGhlIGluc3RydWN0aW9uXG4iKTsKKwkJcHJfYWxlcnQoIiAgQkFEQUREUiAweCUwOGx4XG4iLCBhZGRyKTsKKwkJcHJfYWxlcnQoIiAgY2F1c2UgICAlZFxuIiwgY2F1c2UpOworCQlwcl9hbGVydCgiICBvcC1jb2RlIDB4JTA4bHhcbiIsICoodW5zaWduZWQgbG9uZyAqKShmcC0+ZWEpKTsKKwkJc2hvd19yZWdzKGZwKTsKKwkJcmV0dXJuOworCX0KKworCV9leGNlcHRpb24oU0lHQlVTLCBmcCwgQlVTX0FEUkFMTiwgYWRkcik7Cit9CisjZW5kaWYgLyogQ09ORklHX05JT1MyX0FMSUdOTUVOVF9UUkFQICovCisKKy8qIElsbGVnYWwgaW5zdHJ1Y3Rpb24gaGFuZGxlciAqLworYXNtbGlua2FnZSB2b2lkIGhhbmRsZV9pbGxlZ2FsX2Moc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWZwLT5lYSAtPSA0OworCV9leGNlcHRpb24oU0lHSUxMLCBmcCwgSUxMX0lMTE9QQywgZnAtPmVhKTsKK30KKworLyogU3VwZXJ2aXNvciBpbnN0cnVjdGlvbiBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgaGFuZGxlX3N1cGVydmlzb3JfaW5zdHIoc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWZwLT5lYSAtPSA0OworCV9leGNlcHRpb24oU0lHSUxMLCBmcCwgSUxMX1BSVk9QQywgZnAtPmVhKTsKK30KKworLyogRGl2aXNpb24gZXJyb3IgaGFuZGxlciAqLworYXNtbGlua2FnZSB2b2lkIGhhbmRsZV9kaXZlcnJvcl9jKHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlmcC0+ZWEgLT0gNDsKKwlfZXhjZXB0aW9uKFNJR0ZQRSwgZnAsIEZQRV9JTlRESVYsIGZwLT5lYSk7Cit9CisKKy8qIFVuaGFuZGxlZCBleGNlcHRpb24gaGFuZGxlciAqLworYXNtbGlua2FnZSB2b2lkIHVuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjYXVzZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBSRENUTChDVExfQkFEQUREUik7CisKKwljYXVzZSAvPSA0OworCisJcHJfZW1lcmcoIlVuaGFuZGxlZCBleGNlcHRpb24gIyVkIGluICVzIG1vZGUgKGJhZGFkZHI9MHglMDhseClcbiIsCisJCQljYXVzZSwgdXNlcl9tb2RlKHJlZ3MpID8gInVzZXIiIDogImtlcm5lbCIsIGFkZHIpOworCisJcmVncy0+ZWEgLT0gNDsKKwlzaG93X3JlZ3MocmVncyk7CisKKwlwcl9lbWVyZygib3Bjb2RlOiAweCUwOGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgKikocmVncy0+ZWEpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL25pb3MyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNmZhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVuaW9zMiIsICJlbGYzMi1saXR0bGVuaW9zMiIsICJlbGYzMi1saXR0bGVuaW9zMiIpCisKK09VVFBVVF9BUkNIKG5pb3MpCitFTlRSWShfc3RhcnQpCS8qIERlZmluZWQgaW4gaGVhZC5TICovCisKK2ppZmZpZXMgPSBqaWZmaWVzXzY0OworCitTRUNUSU9OUworeworCS4gPSBDT05GSUdfTklPUzJfTUVNX0JBU0UgfCBDT05GSUdfTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFOworCisJX3RleHQgPSAuOworCV9zdGV4dCA9IC47CisJSEVBRF9URVhUX1NFQ1RJT04KKwkudGV4dCA6IHsKKwkJVEVYVF9URVhUCisJCVNDSEVEX1RFWFQKKwkJTE9DS19URVhUCisJCUlSUUVOVFJZX1RFWFQKKwkJS1BST0JFU19URVhUCisJfSA9MAorCV9ldGV4dCA9IC47CisKKwkuZ290IDogeworCQkqKC5nb3QucGx0KQorCQkqKC5pZ290LnBsdCkKKwkJKiguZ290KQorCQkqKC5pZ290KQorCX0KKworCUVYQ0VQVElPTl9UQUJMRShMMV9DQUNIRV9CWVRFUykKKworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9faW5pdF9iZWdpbiA9IC47CisJSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQorCUlOSVRfREFUQV9TRUNUSU9OKFBBR0VfU0laRSkKKwlQRVJDUFVfU0VDVElPTihMMV9DQUNIRV9CWVRFUykKKwlfX2luaXRfZW5kID0gLjsKKworCV9zZGF0YSA9IC47CisJUk9fREFUQV9TRUNUSU9OKFBBR0VfU0laRSkKKwlSV19EQVRBX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCisJX2VkYXRhID0gLjsKKworCUJTU19TRUNUSU9OKDAsIDAsIDApCisJX2VuZCA9IC47CisKKwlTVEFCU19ERUJVRworCURXQVJGX0RFQlVHCisJTk9URVMKKworCURJU0NBUkRTCit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2xpYi9NYWtlZmlsZSBiL2FyY2gvbmlvczIvbGliL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NzI1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2xpYi9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIE5pb3MyLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuCisjCisKK2xpYi15ICs9IGRlbGF5Lm8KK2xpYi15ICs9IG1lbWNweS5vCitsaWIteSArPSBtZW1tb3ZlLm8KK2xpYi15ICs9IG1lbXNldC5vCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2xpYi9kZWxheS5jIGIvYXJjaC9uaW9zMi9saWIvZGVsYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODgxMTljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9saWIvZGVsYXkuYwpAQCAtMCwwICsxLDUyIEBACisvKiBDb3B5cmlnaHQgQWx0ZXJhIENvcnBvcmF0aW9uIChDKSAyMDE0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdGltZXguaD4KKwordm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgY3ljbGVzKQoreworCWN5Y2xlc190IHN0YXJ0ID0gZ2V0X2N5Y2xlcygpOworCisJd2hpbGUgKChnZXRfY3ljbGVzKCkgLSBzdGFydCkgPCBjeWNsZXMpCisJCWNwdV9yZWxheCgpOworfQorRVhQT1JUX1NZTUJPTChfX2RlbGF5KTsKKwordm9pZCBfX2NvbnN0X3VkZWxheSh1bnNpZ25lZCBsb25nIHhsb29wcykKK3sKKwl1NjQgbG9vcHM7CisKKwlsb29wcyA9ICh1NjQpeGxvb3BzICogbG9vcHNfcGVyX2ppZmZ5ICogSFo7CisKKwlfX2RlbGF5KGxvb3BzID4+IDMyKTsKK30KK0VYUE9SVF9TWU1CT0woX19jb25zdF91ZGVsYXkpOworCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJX19jb25zdF91ZGVsYXkodXNlY3MgKiAweDEwQzdVTCk7IC8qIDIqKjMyIC8gMTAwMDAwMCAocm91bmRlZCB1cCkgKi8KK30KK0VYUE9SVF9TWU1CT0woX191ZGVsYXkpOworCit2b2lkIF9fbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnNlY3MpCit7CisJX19jb25zdF91ZGVsYXkobnNlY3MgKiAweDVVTCk7IC8qIDIqKjMyIC8gMTAwMDAwMDAwMCAocm91bmRlZCB1cCkgKi8KK30KK0VYUE9SVF9TWU1CT0woX19uZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9saWIvbWVtY3B5LmMgYi9hcmNoL25pb3MyL2xpYi9tZW1jcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE1ZjVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9saWIvbWVtY3B5LmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qIEV4dHJhY3RlZCBmcm9tIEdMSUJDIG1lbWNweS5jIGFuZCBtZW1jb3B5LmgsIHdoaWNoIGlzOgorICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk3LCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBUb3Jiam9ybiBHcmFubHVuZCAodGVnZUBzaWNzLnNlKS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogVHlwZSB0byB1c2UgZm9yIGFsaWduZWQgbWVtb3J5IG9wZXJhdGlvbnMuCisgICBUaGlzIHNob3VsZCBub3JtYWxseSBiZSB0aGUgYmlnZ2VzdCB0eXBlIHN1cHBvcnRlZCBieSBhIHNpbmdsZSBsb2FkCisgICBhbmQgc3RvcmUuICAqLworI2RlZmluZQlvcF90CXVuc2lnbmVkIGxvbmcgaW50CisjZGVmaW5lIE9QU0laCShzaXplb2Yob3BfdCkpCisKKy8qIE9wdGltYWwgdHlwZSBmb3Igc3RvcmluZyBieXRlcyBpbiByZWdpc3RlcnMuICAqLworI2RlZmluZQlyZWdfY2hhcgljaGFyCisKKyNkZWZpbmUgTUVSR0UodzAsIHNoXzEsIHcxLCBzaF8yKSAoKCh3MCkgPj4gKHNoXzEpKSB8ICgodzEpIDw8IChzaF8yKSkpCisKKy8qIENvcHkgZXhhY3RseSBOQllURVMgYnl0ZXMgZnJvbSBTUkNfQlAgdG8gRFNUX0JQLAorICAgd2l0aG91dCBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgYWxpZ25tZW50IG9mIHRoZSBwb2ludGVycy4gICovCisjZGVmaW5lIEJZVEVfQ09QWV9GV0QoZHN0X2JwLCBzcmNfYnAsIG5ieXRlcykJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlzaXplX3QgX19uYnl0ZXMgPSAobmJ5dGVzKTsJCQkJCVwKKwl3aGlsZSAoX19uYnl0ZXMgPiAwKSB7CQkJCQkJXAorCQl1bnNpZ25lZCBjaGFyIF9feCA9ICgodW5zaWduZWQgY2hhciAqKSBzcmNfYnApWzBdOwlcCisJCXNyY19icCArPSAxOwkJCQkJCVwKKwkJX19uYnl0ZXMgLT0gMTsJCQkJCQlcCisJCSgodW5zaWduZWQgY2hhciAqKSBkc3RfYnApWzBdID0gX194OwkJCVwKKwkJZHN0X2JwICs9IDE7CQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIENvcHkgKnVwIHRvKiBOQllURVMgYnl0ZXMgZnJvbSBTUkNfQlAgdG8gRFNUX0JQLCB3aXRoCisgICB0aGUgYXNzdW1wdGlvbiB0aGF0IERTVF9CUCBpcyBhbGlnbmVkIG9uIGFuIE9QU0laIG11bHRpcGxlLiAgSWYKKyAgIG5vdCBhbGwgYnl0ZXMgY291bGQgYmUgZWFzaWx5IGNvcGllZCwgc3RvcmUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcworICAgaW4gTkJZVEVTX0xFRlQsIG90aGVyd2lzZSBzdG9yZSAwLiAgKi8KKy8qIGV4dGVybiB2b2lkIF93b3JkY29weV9md2RfYWxpZ25lZCBfX1AgKChsb25nIGludCwgbG9uZyBpbnQsIHNpemVfdCkpOyAqLworLyogZXh0ZXJuIHZvaWQgX3dvcmRjb3B5X2Z3ZF9kZXN0X2FsaWduZWQgX19QICgobG9uZyBpbnQsIGxvbmcgaW50LCBzaXplX3QpKTsgKi8KKyNkZWZpbmUgV09SRF9DT1BZX0ZXRChkc3RfYnAsIHNyY19icCwgbmJ5dGVzX2xlZnQsIG5ieXRlcykJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHNyY19icCAlIE9QU0laID09IDApCQkJCQlcCisJCV93b3JkY29weV9md2RfYWxpZ25lZChkc3RfYnAsIHNyY19icCwgKG5ieXRlcykgLyBPUFNJWik7XAorCWVsc2UJCQkJCQkJCVwKKwkJX3dvcmRjb3B5X2Z3ZF9kZXN0X2FsaWduZWQoZHN0X2JwLCBzcmNfYnAsIChuYnl0ZXMpIC8gT1BTSVopO1wKKwlzcmNfYnAgKz0gKG5ieXRlcykgJiAtT1BTSVo7CQkJCQlcCisJZHN0X2JwICs9IChuYnl0ZXMpICYgLU9QU0laOwkJCQkJXAorCShuYnl0ZXNfbGVmdCkgPSAobmJ5dGVzKSAlIE9QU0laOwkJCQlcCit9IHdoaWxlICgwKQorCisKKy8qIFRocmVzaG9sZCB2YWx1ZSBmb3Igd2hlbiB0byBlbnRlciB0aGUgdW5yb2xsZWQgbG9vcHMuICAqLworI2RlZmluZQlPUF9UX1RIUkVTCTE2CisKKy8qIF93b3JkY29weV9md2RfYWxpZ25lZCAtLSBDb3B5IGJsb2NrIGJlZ2lubmluZyBhdCBTUkNQIHRvCisgICBibG9jayBiZWdpbm5pbmcgYXQgRFNUUCB3aXRoIExFTiBgb3BfdCcgd29yZHMgKG5vdCBMRU4gYnl0ZXMhKS4KKyAgIEJvdGggU1JDUCBhbmQgRFNUUCBzaG91bGQgYmUgYWxpZ25lZCBmb3IgbWVtb3J5IG9wZXJhdGlvbnMgb24gYG9wX3Qncy4gICovCisvKiBzdHJlYW0tbGluZWQgKHJlYWQgeDggKyB3cml0ZSB4OCkgKi8KK3N0YXRpYyB2b2lkIF93b3JkY29weV9md2RfYWxpZ25lZChsb25nIGludCBkc3RwLCBsb25nIGludCBzcmNwLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4gPiA3KSB7CisJCXJlZ2lzdGVyIG9wX3QgYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3OworCisJCWEwID0gKChvcF90ICopIHNyY3ApWzBdOworCQlhMSA9ICgob3BfdCAqKSBzcmNwKVsxXTsKKwkJYTIgPSAoKG9wX3QgKikgc3JjcClbMl07CisJCWEzID0gKChvcF90ICopIHNyY3ApWzNdOworCQlhNCA9ICgob3BfdCAqKSBzcmNwKVs0XTsKKwkJYTUgPSAoKG9wX3QgKikgc3JjcClbNV07CisJCWE2ID0gKChvcF90ICopIHNyY3ApWzZdOworCQlhNyA9ICgob3BfdCAqKSBzcmNwKVs3XTsKKwkJKChvcF90ICopIGRzdHApWzBdID0gYTA7CisJCSgob3BfdCAqKSBkc3RwKVsxXSA9IGExOworCQkoKG9wX3QgKikgZHN0cClbMl0gPSBhMjsKKwkJKChvcF90ICopIGRzdHApWzNdID0gYTM7CisJCSgob3BfdCAqKSBkc3RwKVs0XSA9IGE0OworCQkoKG9wX3QgKikgZHN0cClbNV0gPSBhNTsKKwkJKChvcF90ICopIGRzdHApWzZdID0gYTY7CisJCSgob3BfdCAqKSBkc3RwKVs3XSA9IGE3OworCisJCXNyY3AgKz0gOCAqIE9QU0laOworCQlkc3RwICs9IDggKiBPUFNJWjsKKwkJbGVuIC09IDg7CisJfQorCXdoaWxlIChsZW4gPiAwKSB7CisJCSoob3BfdCAqKWRzdHAgPSAqKG9wX3QgKilzcmNwOworCisJCXNyY3AgKz0gT1BTSVo7CisJCWRzdHAgKz0gT1BTSVo7CisJCWxlbiAtPSAxOworCX0KK30KKworLyogX3dvcmRjb3B5X2Z3ZF9kZXN0X2FsaWduZWQgLS0gQ29weSBibG9jayBiZWdpbm5pbmcgYXQgU1JDUCB0bworICAgYmxvY2sgYmVnaW5uaW5nIGF0IERTVFAgd2l0aCBMRU4gYG9wX3QnIHdvcmRzIChub3QgTEVOIGJ5dGVzISkuCisgICBEU1RQIHNob3VsZCBiZSBhbGlnbmVkIGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBgb3BfdCdzLCBidXQgU1JDUCBtdXN0CisgICAqbm90KiBiZSBhbGlnbmVkLiAgKi8KKy8qIHN0cmVhbS1saW5lZCAocmVhZCB4NCArIHdyaXRlIHg0KSAqLworc3RhdGljIHZvaWQgX3dvcmRjb3B5X2Z3ZF9kZXN0X2FsaWduZWQobG9uZyBpbnQgZHN0cCwgbG9uZyBpbnQgc3JjcCwKKwkJCQkJc2l6ZV90IGxlbikKK3sKKwlvcF90IGFwOworCWludCBzaF8xLCBzaF8yOworCisJLyogQ2FsY3VsYXRlIGhvdyB0byBzaGlmdCBhIHdvcmQgcmVhZCBhdCB0aGUgbWVtb3J5IG9wZXJhdGlvbgorCWFsaWduZWQgc3JjcCB0byBtYWtlIGl0IGFsaWduZWQgZm9yIGNvcHkuICovCisKKwlzaF8xID0gOCAqIChzcmNwICUgT1BTSVopOworCXNoXzIgPSA4ICogT1BTSVogLSBzaF8xOworCisJLyogTWFrZSBTUkNQIGFsaWduZWQgYnkgcm91bmRpbmcgaXQgZG93biB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgb3BfdCcKKwlpdCBwb2ludHMgaW4gdGhlIG1pZGRsZSBvZi4gKi8KKwlzcmNwICY9IC1PUFNJWjsKKwlhcCA9ICgob3BfdCAqKSBzcmNwKVswXTsKKwlzcmNwICs9IE9QU0laOworCisJd2hpbGUgKGxlbiA+IDMpIHsKKwkJb3BfdCBhMCwgYTEsIGEyLCBhMzsKKworCQlhMCA9ICgob3BfdCAqKSBzcmNwKVswXTsKKwkJYTEgPSAoKG9wX3QgKikgc3JjcClbMV07CisJCWEyID0gKChvcF90ICopIHNyY3ApWzJdOworCQlhMyA9ICgob3BfdCAqKSBzcmNwKVszXTsKKwkJKChvcF90ICopIGRzdHApWzBdID0gTUVSR0UoYXAsIHNoXzEsIGEwLCBzaF8yKTsKKwkJKChvcF90ICopIGRzdHApWzFdID0gTUVSR0UoYTAsIHNoXzEsIGExLCBzaF8yKTsKKwkJKChvcF90ICopIGRzdHApWzJdID0gTUVSR0UoYTEsIHNoXzEsIGEyLCBzaF8yKTsKKwkJKChvcF90ICopIGRzdHApWzNdID0gTUVSR0UoYTIsIHNoXzEsIGEzLCBzaF8yKTsKKworCQlhcCA9IGEzOworCQlzcmNwICs9IDQgKiBPUFNJWjsKKwkJZHN0cCArPSA0ICogT1BTSVo7CisJCWxlbiAtPSA0OworCX0KKwl3aGlsZSAobGVuID4gMCkgeworCQlyZWdpc3RlciBvcF90IGEwOworCisJCWEwID0gKChvcF90ICopIHNyY3ApWzBdOworCQkoKG9wX3QgKikgZHN0cClbMF0gPSBNRVJHRShhcCwgc2hfMSwgYTAsIHNoXzIpOworCisJCWFwID0gYTA7CisJCXNyY3AgKz0gT1BTSVo7CisJCWRzdHAgKz0gT1BTSVo7CisJCWxlbiAtPSAxOworCX0KK30KKwordm9pZCAqbWVtY3B5KHZvaWQgKmRzdHBwLCBjb25zdCB2b2lkICpzcmNwcCwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGludCBkc3RwID0gKGxvbmcgaW50KSBkc3RwcDsKKwl1bnNpZ25lZCBsb25nIGludCBzcmNwID0gKGxvbmcgaW50KSBzcmNwcDsKKworCS8qIENvcHkgZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHRoZSBlbmQuICAqLworCisJLyogSWYgdGhlcmUgbm90IHRvbyBmZXcgYnl0ZXMgdG8gY29weSwgdXNlIHdvcmQgY29weS4gICovCisJaWYgKGxlbiA+PSBPUF9UX1RIUkVTKSB7CisJCS8qIENvcHkganVzdCBhIGZldyBieXRlcyB0byBtYWtlIERTVFAgYWxpZ25lZC4gICovCisJCWxlbiAtPSAoLWRzdHApICUgT1BTSVo7CisJCUJZVEVfQ09QWV9GV0QoZHN0cCwgc3JjcCwgKC1kc3RwKSAlIE9QU0laKTsKKworCQkvKiBDb3B5IHdob2xlIHBhZ2VzIGZyb20gU1JDUCB0byBEU1RQIGJ5IHZpcnR1YWwgYWRkcmVzcworCQkgICBtYW5pcHVsYXRpb24sIGFzIG11Y2ggYXMgcG9zc2libGUuICAqLworCisJCS8qIFBBR0VfQ09QWV9GV0RfTUFZQkUgKGRzdHAsIHNyY3AsIGxlbiwgbGVuKTsgKi8KKworCQkvKiBDb3B5IGZyb20gU1JDUCB0byBEU1RQIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGtub3duCisJCSAgIGFsaWdubWVudCBvZiBEU1RQLiBOdW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGlzIHB1dCBpbiB0aGUKKwkJICAgdGhpcmQgYXJndW1lbnQsIGkuZS4gaW4gTEVOLiAgVGhpcyBudW1iZXIgbWF5IHZhcnkgZnJvbQorCQkgICBtYWNoaW5lIHRvIG1hY2hpbmUuICovCisKKwkJV09SRF9DT1BZX0ZXRChkc3RwLCBzcmNwLCBsZW4sIGxlbik7CisKKwkJLyogRmFsbCBvdXQgYW5kIGNvcHkgdGhlIHRhaWwuICovCisJfQorCisJLyogVGhlcmUgYXJlIGp1c3QgYSBmZXcgYnl0ZXMgdG8gY29weS4gIFVzZSBieXRlIG1lbW9yeSBvcGVyYXRpb25zLiAqLworCUJZVEVfQ09QWV9GV0QoZHN0cCwgc3JjcCwgbGVuKTsKKworCXJldHVybiBkc3RwcDsKK30KKwordm9pZCAqbWVtY3B5Yih2b2lkICpkc3RwcCwgY29uc3Qgdm9pZCAqc3JjcHAsIHVuc2lnbmVkIGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGludCBkc3RwID0gKGxvbmcgaW50KSBkc3RwcDsKKwl1bnNpZ25lZCBsb25nIGludCBzcmNwID0gKGxvbmcgaW50KSBzcmNwcDsKKworCUJZVEVfQ09QWV9GV0QoZHN0cCwgc3JjcCwgbGVuKTsKKworCXJldHVybiBkc3RwcDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbGliL21lbW1vdmUuYyBiL2FyY2gvbmlvczIvbGliL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjVlZjUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9saWIvbWVtbW92ZS5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2lmZGVmIF9fSEFWRV9BUkNIX01FTU1PVkUKK3ZvaWQgKm1lbW1vdmUodm9pZCAqZCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgZHN0LCBzcmM7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gZDsKKworCWlmIChkIDwgcykgeworCQlkc3QgPSAodW5zaWduZWQgbG9uZykgZDsKKwkJc3JjID0gKHVuc2lnbmVkIGxvbmcpIHM7CisKKwkJaWYgKChjb3VudCA8IDgpIHx8ICgoZHN0IF4gc3JjKSAmIDMpKQorCQkJZ290byByZXN0dXA7CisKKwkJaWYgKGRzdCAmIDEpIHsKKwkJCSooY2hhciAqKWRzdCsrID0gKihjaGFyICopc3JjKys7CisJCQljb3VudC0tOworCQl9CisJCWlmIChkc3QgJiAyKSB7CisJCQkqKHNob3J0ICopZHN0ID0gKihzaG9ydCAqKXNyYzsKKwkJCXNyYyArPSAyOworCQkJZHN0ICs9IDI7CisJCQljb3VudCAtPSAyOworCQl9CisJCXdoaWxlIChjb3VudCA+IDMpIHsKKwkJCSoobG9uZyAqKWRzdCA9ICoobG9uZyAqKXNyYzsKKwkJCXNyYyArPSA0OworCQkJZHN0ICs9IDQ7CisJCQljb3VudCAtPSA0OworCQl9CityZXN0dXA6CisJCXdoaWxlIChjb3VudC0tKQorCQkJKihjaGFyICopZHN0KysgPSAqKGNoYXIgKilzcmMrKzsKKwl9IGVsc2UgeworCQlkc3QgPSAodW5zaWduZWQgbG9uZykgZCArIGNvdW50OworCQlzcmMgPSAodW5zaWduZWQgbG9uZykgcyArIGNvdW50OworCisJCWlmICgoY291bnQgPCA4KSB8fCAoKGRzdCBeIHNyYykgJiAzKSkKKwkJCWdvdG8gcmVzdGRvd247CisKKwkJaWYgKGRzdCAmIDEpIHsKKwkJCXNyYy0tOworCQkJZHN0LS07CisJCQljb3VudC0tOworCQkJKihjaGFyICopZHN0ID0gKihjaGFyICopc3JjOworCQl9CisJCWlmIChkc3QgJiAyKSB7CisJCQlzcmMgLT0gMjsKKwkJCWRzdCAtPSAyOworCQkJY291bnQgLT0gMjsKKwkJCSooc2hvcnQgKilkc3QgPSAqKHNob3J0ICopc3JjOworCQl9CisJCXdoaWxlIChjb3VudCA+IDMpIHsKKwkJCXNyYyAtPSA0OworCQkJZHN0IC09IDQ7CisJCQljb3VudCAtPSA0OworCQkJKihsb25nICopZHN0ID0gKihsb25nICopc3JjOworCQl9CityZXN0ZG93bjoKKwkJd2hpbGUgKGNvdW50LS0pIHsKKwkJCXNyYy0tOworCQkJZHN0LS07CisJCQkqKGNoYXIgKilkc3QgPSAqKGNoYXIgKilzcmM7CisJCX0KKwl9CisKKwlyZXR1cm4gZDsKK30KKyNlbmRpZiAvKiBfX0hBVkVfQVJDSF9NRU1NT1ZFICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2xpYi9tZW1zZXQuYyBiL2FyY2gvbmlvczIvbGliL21lbXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTk3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2xpYi9tZW1zZXQuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpZmRlZiBfX0hBVkVfQVJDSF9NRU1TRVQKK3ZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgc2l6ZV90IGNvdW50KQoreworCWludCBkZXN0cHRyLCBjaGFyY250LCBkd29yZGNudCwgZmlsbDhyZWcsIHdya3JlZ2E7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gczsKKworCWMgJj0gMHhGRjsKKworCWlmIChjb3VudCA8PSA4KSB7CisJCWNoYXIgKnhzID0gKGNoYXIgKikgczsKKworCQl3aGlsZSAoY291bnQtLSkKKwkJCSp4cysrID0gYzsKKwkJcmV0dXJuIHM7CisJfQorCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkvKiBmaWxsOCAlMywgJTUgKGMgJiAweGZmKSAqLworCQkiCXNsbGkJJTQsICU1LCA4XG4iCisJCSIJb3IJJTQsICU0LCAlNVxuIgorCQkiCXNsbGkgICAgJTMsICU0LCAxNlxuIgorCQkiCW9yCSUzLCAlMywgJTRcbiIKKwkJLyogV29yZC1hbGlnbiAlMCAocykgaWYgbmVjZXNzYXJ5ICovCisJCSIJYW5kaQklNCwgJTAsIDB4MDFcbiIKKwkJIgliZXEJJTQsIHplcm8sIDFmXG4iCisJCSIJYWRkaQklMSwgJTEsIC0xXG4iCisJCSIJc3RiCSUzLCAwKCUwKVxuIgorCQkiCWFkZGkJJTAsICUwLCAxXG4iCisJCSIxOgltb3YJJTIsICUxXG4iCisJCS8qIER3b3JkLWFsaWduICUwIChzKSBpZiBuZWNlc3NhcnkgKi8KKwkJIglhbmRpCSU0LCAlMCwgMHgwMlxuIgorCQkiCWJlcQklNCwgemVybywgMmZcbiIKKwkJIglhZGRpCSUxLCAlMSwgLTJcbiIKKwkJIglzdGgJJTMsIDAoJTApXG4iCisJCSIJYWRkaQklMCwgJTAsIDJcbiIKKwkJIgltb3YJJTIsICUxXG4iCisJCS8qICUxIGFuZCAlMiBhcmUgaG93IG1hbnkgbW9yZSBieXRlcyB0byBzZXQgKi8KKwkJIjI6CXNybGkJJTIsICUyLCAyXG4iCisJCS8qICUyIGlzIGhvdyBtYW55IGR3b3JkcyB0byBzZXQgKi8KKwkJIjM6CXN0dwklMywgMCglMClcbiIKKwkJIglhZGRpCSUwLCAlMCwgNFxuIgorCQkiCWFkZGkgICAgJTIsICUyLCAtMVxuIgorCQkiCWJuZQklMiwgemVybywgM2JcbiIKKwkJLyogc3RvcmUgcmVzaWR1YWwgd29yZCBhbmQvb3IgYnl0ZSBpZiBuZWNlc3NhcnkgKi8KKwkJIglhbmRpCSU0LCAlMSwgMHgwMlxuIgorCQkiCWJlcQklNCwgemVybywgNGZcbiIKKwkJIglzdGgJJTMsIDAoJTApXG4iCisJCSIJYWRkaQklMCwgJTAsIDJcbiIKKwkJLyogc3RvcmUgcmVzaWR1YWwgYnl0ZSBpZiBuZWNlc3NhcnkgKi8KKwkJIjQ6CWFuZGkJJTQsICUxLCAweDAxXG4iCisJCSIJYmVxCSU0LCB6ZXJvLCA1ZlxuIgorCQkiCXN0YgklMywgMCglMClcbiIKKwkJIjU6XG4iCisJCTogIj1yIiAoZGVzdHB0ciksCS8qICUwICBPdXRwdXQgKi8KKwkJICAiPXIiIChjaGFyY250KSwJLyogJTEgIE91dHB1dCAqLworCQkgICI9ciIgKGR3b3JkY250KSwJLyogJTIgIE91dHB1dCAqLworCQkgICI9ciIgKGZpbGw4cmVnKSwJLyogJTMgIE91dHB1dCAqLworCQkgICI9ciIgKHdya3JlZ2EpCS8qICU0ICBPdXRwdXQgKi8KKwkJOiAiciIgKGMpLAkJLyogJTUgIElucHV0ICovCisJCSAgIjAiIChzKSwJCS8qICUwICBJbnB1dC9PdXRwdXQgKi8KKwkJICAiMSIgKGNvdW50KQkJLyogJTEgIElucHV0L091dHB1dCAqLworCQk6ICJtZW1vcnkiCQkvKiBjbG9iYmVyZWQgKi8KKwkpOworCisJcmV0dXJuIHM7Cit9CisjZW5kaWYgLyogX19IQVZFX0FSQ0hfTUVNU0VUICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL01ha2VmaWxlIGIvYXJjaC9uaW9zMi9tbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2JkMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTmlvczItc3BlY2lmaWMgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VyLgorIworCitvYmoteQkrPSBjYWNoZWZsdXNoLm8KK29iai15CSs9IGRtYS1tYXBwaW5nLm8KK29iai15CSs9IGV4dGFibGUubworb2JqLXkJKz0gZmF1bHQubworb2JqLXkJKz0gaW5pdC5vCitvYmoteQkrPSBpb3JlbWFwLm8KK29iai15CSs9IG1tdV9jb250ZXh0Lm8KK29iai15CSs9IHBndGFibGUubworb2JqLXkJKz0gdGxiLm8KK29iai15CSs9IHVhY2Nlc3MubwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9jYWNoZWZsdXNoLmMgYi9hcmNoL25pb3MyL21tL2NhY2hlZmx1c2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWU0ODJiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vY2FjaGVmbHVzaC5jCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlzdGFydCAmPSB+KGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCArPSAoY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7CisJZW5kICY9IH4oY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7CisKKwlpZiAoZW5kID4gc3RhcnQgKyBjcHVpbmZvLmRjYWNoZV9zaXplKQorCQllbmQgPSBzdGFydCArIGNwdWluZm8uZGNhY2hlX3NpemU7CisKKwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgICBmbHVzaGRhIDAoJTApXG4iCisJCQkJCTogLyogT3V0cHV0cyAqLworCQkJCQk6IC8qIElucHV0cyAgKi8gInIiKGFkZHIpCisJCQkJCS8qIDogTm8gY2xvYmJlciAqLyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9hbGwodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJc3RhcnQgJj0gfihjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKKwllbmQgKz0gKGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCAmPSB+KGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCisJaWYgKGVuZCA+IHN0YXJ0ICsgY3B1aW5mby5kY2FjaGVfc2l6ZSkKKwkJZW5kID0gc3RhcnQgKyBjcHVpbmZvLmRjYWNoZV9zaXplOworCisJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gY3B1aW5mby5kY2FjaGVfbGluZV9zaXplKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiICAgZmx1c2hkIDAoJTApXG4iCisJCQkJCTogLyogT3V0cHV0cyAqLworCQkJCQk6IC8qIElucHV0cyAgKi8gInIiKGFkZHIpCisJCQkJCS8qIDogTm8gY2xvYmJlciAqLyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2ludmFsaWRhdGVfZGNhY2hlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCXN0YXJ0ICY9IH4oY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7CisJZW5kICs9IChjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKKwllbmQgJj0gfihjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKKworCWlmIChlbmQgPiBzdGFydCArIGNwdWluZm8uZGNhY2hlX3NpemUpCisJCWVuZCA9IHN0YXJ0ICsgY3B1aW5mby5kY2FjaGVfc2l6ZTsKKworCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSkgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiAgIGluaXRkYSAwKCUwKVxuIgorCQkJCQk6IC8qIE91dHB1dHMgKi8KKwkJCQkJOiAvKiBJbnB1dHMgICovICJyIihhZGRyKQorCQkJCQkvKiA6IE5vIGNsb2JiZXIgKi8pOworCX0KK30KKworc3RhdGljIHZvaWQgX19mbHVzaF9pY2FjaGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJc3RhcnQgJj0gfihjcHVpbmZvLmljYWNoZV9saW5lX3NpemUgLSAxKTsKKwllbmQgKz0gKGNwdWluZm8uaWNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCAmPSB+KGNwdWluZm8uaWNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCisJaWYgKGVuZCA+IHN0YXJ0ICsgY3B1aW5mby5pY2FjaGVfc2l6ZSkKKwkJZW5kID0gc3RhcnQgKyBjcHVpbmZvLmljYWNoZV9zaXplOworCisJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gY3B1aW5mby5pY2FjaGVfbGluZV9zaXplKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiICAgZmx1c2hpICUwXG4iCisJCQkJCTogLyogT3V0cHV0cyAqLworCQkJCQk6IC8qIElucHV0cyAgKi8gInIiKGFkZHIpCisJCQkJCS8qIDogTm8gY2xvYmJlciAqLyk7CisJfQorCV9fYXNtX18gX192b2xhdGlsZSgiIGZsdXNocFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX2FsaWFzZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+YWN0aXZlX21tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudDsKKwlwZ29mZl90IHBnb2ZmOworCisJcGdvZmYgPSBwYWdlLT5pbmRleDsKKworCWZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZyk7CisJdm1hX2ludGVydmFsX3RyZWVfZm9yZWFjaChtcG50LCAmbWFwcGluZy0+aV9tbWFwLCBwZ29mZiwgcGdvZmYpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisKKwkJaWYgKG1wbnQtPnZtX21tICE9IG1tKQorCQkJY29udGludWU7CisJCWlmICghKG1wbnQtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpKQorCQkJY29udGludWU7CisKKwkJb2Zmc2V0ID0gKHBnb2ZmIC0gbXBudC0+dm1fcGdvZmYpIDw8IFBBR0VfU0hJRlQ7CisJCWZsdXNoX2NhY2hlX3BhZ2UobXBudCwgbXBudC0+dm1fc3RhcnQgKyBvZmZzZXQsCisJCQlwYWdlX3RvX3BmbihwYWdlKSk7CisJfQorCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTsKK30KKwordm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCkKK3sKKwlfX2ZsdXNoX2RjYWNoZV9hbGwoMCwgY3B1aW5mby5kY2FjaGVfc2l6ZSk7CisJX19mbHVzaF9pY2FjaGUoMCwgY3B1aW5mby5pY2FjaGVfc2l6ZSk7Cit9CisKK3ZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJZmx1c2hfY2FjaGVfYWxsKCk7Cit9CisKK3ZvaWQgZmx1c2hfY2FjaGVfZHVwX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWZsdXNoX2NhY2hlX2FsbCgpOworfQorCit2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlfX2ZsdXNoX2ljYWNoZShzdGFydCwgZW5kKTsKK30KKwordm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJX19mbHVzaF9kY2FjaGUoc3RhcnQsIGVuZCk7Cit9CitFWFBPUlRfU1lNQk9MKGZsdXNoX2RjYWNoZV9yYW5nZSk7CisKK3ZvaWQgaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJX19pbnZhbGlkYXRlX2RjYWNoZShzdGFydCwgZW5kKTsKK30KK0VYUE9SVF9TWU1CT0woaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UpOworCit2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJdW5zaWduZWQgbG9uZyBlbmQpCit7CisJX19mbHVzaF9kY2FjaGUoc3RhcnQsIGVuZCk7CisJaWYgKHZtYSA9PSBOVUxMIHx8ICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpCisJCV9fZmx1c2hfaWNhY2hlKHN0YXJ0LCBlbmQpOworfQorCit2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCisJX19mbHVzaF9pY2FjaGUoc3RhcnQsIGVuZCk7Cit9CisKK3ZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIsCisJCQl1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hZGRyOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisKKwlfX2ZsdXNoX2RjYWNoZShzdGFydCwgZW5kKTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCV9fZmx1c2hfaWNhY2hlKHN0YXJ0LCBlbmQpOworfQorCit2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCisJLyoKKwkgKiBUaGUgemVybyBwYWdlIGlzIG5ldmVyIHdyaXR0ZW4gdG8sIHNvIG5ldmVyIGhhcyBhbnkgZGlydHkKKwkgKiBjYWNoZSBsaW5lcywgYW5kIHRoZXJlZm9yZSBuZXZlciBuZWVkcyB0byBiZSBmbHVzaGVkLgorCSAqLworCWlmIChwYWdlID09IFpFUk9fUEFHRSgwKSkKKwkJcmV0dXJuOworCisJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKKworCS8qIEZsdXNoIHRoaXMgcGFnZSBpZiB0aGVyZSBhcmUgYWxpYXNlcy4gKi8KKwlpZiAobWFwcGluZyAmJiAhbWFwcGluZ19tYXBwZWQobWFwcGluZykpIHsKKwkJY2xlYXJfYml0KFBHX2RjYWNoZV9jbGVhbiwgJnBhZ2UtPmZsYWdzKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOworCisJCV9fZmx1c2hfZGNhY2hlX2FsbChzdGFydCwgc3RhcnQgKyBQQUdFX1NJWkUpOworCQlpZiAobWFwcGluZykKKwkJCWZsdXNoX2FsaWFzZXMobWFwcGluZywgIHBhZ2UpOworCQlzZXRfYml0KFBHX2RjYWNoZV9jbGVhbiwgJnBhZ2UtPmZsYWdzKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGZsdXNoX2RjYWNoZV9wYWdlKTsKKwordm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGUpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKCpwdGUpOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJaWYgKCFwZm5fdmFsaWQocGZuKSkKKwkJcmV0dXJuOworCisJLyoKKwkqIFRoZSB6ZXJvIHBhZ2UgaXMgbmV2ZXIgd3JpdHRlbiB0bywgc28gbmV2ZXIgaGFzIGFueSBkaXJ0eQorCSogY2FjaGUgbGluZXMsIGFuZCB0aGVyZWZvcmUgbmV2ZXIgbmVlZHMgdG8gYmUgZmx1c2hlZC4KKwkqLworCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCWlmIChwYWdlID09IFpFUk9fUEFHRSgwKSkKKwkJcmV0dXJuOworCisJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkgJiYKKwkgICAgICF0ZXN0X2FuZF9zZXRfYml0KFBHX2RjYWNoZV9jbGVhbiwgJnBhZ2UtPmZsYWdzKSkgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZV90b192aXJ0KHBhZ2UpOworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKworCQlfX2ZsdXNoX2RjYWNoZShzdGFydCwgc3RhcnQgKyBQQUdFX1NJWkUpOworCisJCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CisJCWlmIChtYXBwaW5nKQorCQkJZmx1c2hfYWxpYXNlcyhtYXBwaW5nLCBwYWdlKTsKKwl9Cit9CisKK3ZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdnRvLCB2b2lkICp2ZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwKKwkJICAgIHN0cnVjdCBwYWdlICp0bykKK3sKKwlfX2ZsdXNoX2RjYWNoZSh2YWRkciwgdmFkZHIgKyBQQUdFX1NJWkUpOworCWNvcHlfcGFnZSh2dG8sIHZmcm9tKTsKKwlfX2ZsdXNoX2RjYWNoZSgodW5zaWduZWQgbG9uZyl2dG8sICh1bnNpZ25lZCBsb25nKXZ0byArIFBBR0VfU0laRSk7Cit9CisKK3ZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCV9fZmx1c2hfZGNhY2hlKHZhZGRyLCB2YWRkciArIFBBR0VfU0laRSk7CisJY2xlYXJfcGFnZShhZGRyKTsKKwlfX2ZsdXNoX2RjYWNoZSgodW5zaWduZWQgbG9uZylhZGRyLCAodW5zaWduZWQgbG9uZylhZGRyICsgUEFHRV9TSVpFKTsKK30KKwordm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXVuc2lnbmVkIGxvbmcgdXNlcl92YWRkciwKKwkJCXZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgbGVuKQoreworCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB1c2VyX3ZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7CisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworCV9fZmx1c2hfZGNhY2hlKCh1bnNpZ25lZCBsb25nKXNyYywgKHVuc2lnbmVkIGxvbmcpc3JjICsgbGVuKTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCV9fZmx1c2hfaWNhY2hlKCh1bnNpZ25lZCBsb25nKXNyYywgKHVuc2lnbmVkIGxvbmcpc3JjICsgbGVuKTsKK30KKwordm9pZCBjb3B5X3RvX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQl1bnNpZ25lZCBsb25nIHVzZXJfdmFkZHIsCisJCQl2b2lkICpkc3QsIHZvaWQgKnNyYywgaW50IGxlbikKK3sKKwlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdXNlcl92YWRkciwgcGFnZV90b19wZm4ocGFnZSkpOworCW1lbWNweShkc3QsIHNyYywgbGVuKTsKKwlfX2ZsdXNoX2RjYWNoZSgodW5zaWduZWQgbG9uZylkc3QsICh1bnNpZ25lZCBsb25nKWRzdCArIGxlbik7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQorCQlfX2ZsdXNoX2ljYWNoZSgodW5zaWduZWQgbG9uZylkc3QsICh1bnNpZ25lZCBsb25nKWRzdCArIGxlbik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL25pb3MyL21tL2RtYS1tYXBwaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1ZGE3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vZG1hLW1hcHBpbmcuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICoKKyAqIEJhc2VkIG9uIERNQSBjb2RlIGZyb20gTUlQUy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworCit2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCit7CisJdm9pZCAqcmV0OworCisJLyogaWdub3JlIHJlZ2lvbiBzcGVjaWZpZXJzICovCisJZ2ZwICY9IH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSk7CisKKwkvKiBvcHRpbWl6ZWQgcGFnZSBjbGVhcmluZyAqLworCWdmcCB8PSBfX0dGUF9aRVJPOworCisJaWYgKGRldiA9PSBOVUxMIHx8IChkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgMHhmZmZmZmZmZikpCisJCWdmcCB8PSBHRlBfRE1BOworCisJcmV0ID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhnZnAsIGdldF9vcmRlcihzaXplKSk7CisJaWYgKHJldCAhPSBOVUxMKSB7CisJCSpkbWFfaGFuZGxlID0gdmlydF90b19waHlzKHJldCk7CisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZykgcmV0LAorCQkJKHVuc2lnbmVkIGxvbmcpIHJldCArIHNpemUpOworCQlyZXQgPSBVTkNBQ19BRERSKHJldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZG1hX2FsbG9jX2NvaGVyZW50KTsKKwordm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwKKwkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgQ0FDX0FERFIoKHVuc2lnbmVkIGxvbmcpIHZhZGRyKTsKKworCWZyZWVfcGFnZXMoYWRkciwgZ2V0X29yZGVyKHNpemUpKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX2ZyZWVfY29oZXJlbnQpOworCitpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludCBpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJZm9yX2VhY2hfc2coc2csIHNnLCBuZW50cywgaSkgeworCQl2b2lkICphZGRyOworCisJCWFkZHIgPSBzZ192aXJ0KHNnKTsKKwkJaWYgKGFkZHIpIHsKKwkJCV9fZG1hX3N5bmNfZm9yX2RldmljZShhZGRyLCBzZy0+bGVuZ3RoLCBkaXJlY3Rpb24pOworCQkJc2ctPmRtYV9hZGRyZXNzID0gc2dfcGh5cyhzZyk7CisJCX0KKwl9CisKKwlyZXR1cm4gbmVudHM7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2cpOworCitkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXZvaWQgKmFkZHI7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwlhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0OworCV9fZG1hX3N5bmNfZm9yX2RldmljZShhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworCisJcmV0dXJuIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKK30KK0VYUE9SVF9TWU1CT0woZG1hX21hcF9wYWdlKTsKKwordm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAorCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCV9fZG1hX3N5bmNfZm9yX2NwdShwaHlzX3RvX3ZpcnQoZG1hX2FkZHJlc3MpLCBzaXplLCBkaXJlY3Rpb24pOworfQorRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfcGFnZSk7CisKK3ZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5od2VudHJpZXMsCisJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXZvaWQgKmFkZHI7CisJaW50IGk7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3NnKHNnLCBzZywgbmh3ZW50cmllcywgaSkgeworCQlhZGRyID0gc2dfdmlydChzZyk7CisJCWlmIChhZGRyKQorCQkJX19kbWFfc3luY19mb3JfY3B1KGFkZHIsIHNnLT5sZW5ndGgsIGRpcmVjdGlvbik7CisJfQorfQorRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfc2cpOworCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCV9fZG1hX3N5bmNfZm9yX2NwdShwaHlzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIHNpemUsIGRpcmVjdGlvbik7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KTsKKwordm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCV9fZG1hX3N5bmNfZm9yX2RldmljZShwaHlzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIHNpemUsIGRpcmVjdGlvbik7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKTsKKwordm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJX19kbWFfc3luY19mb3JfY3B1KHBoeXNfdG9fdmlydChkbWFfaGFuZGxlKSwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpOworCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwlfX2RtYV9zeW5jX2Zvcl9kZXZpY2UocGh5c190b192aXJ0KGRtYV9oYW5kbGUpLCBzaXplLCBkaXJlY3Rpb24pOworfQorRVhQT1JUX1NZTUJPTChkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSk7CisKK3ZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludCBpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJLyogTWFrZSBzdXJlIHRoYXQgZ2NjIGRvZXNuJ3QgbGVhdmUgdGhlIGVtcHR5IGxvb3AgYm9keS4gICovCisJZm9yX2VhY2hfc2coc2csIHNnLCBuZWxlbXMsIGkpCisJCV9fZG1hX3N5bmNfZm9yX2NwdShzZ192aXJ0KHNnKSwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2dfZm9yX2NwdSk7CisKK3ZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludCBpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJLyogTWFrZSBzdXJlIHRoYXQgZ2NjIGRvZXNuJ3QgbGVhdmUgdGhlIGVtcHR5IGxvb3AgYm9keS4gICovCisJZm9yX2VhY2hfc2coc2csIHNnLCBuZWxlbXMsIGkpCisJCV9fZG1hX3N5bmNfZm9yX2RldmljZShzZ192aXJ0KHNnKSwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKKworfQorRVhQT1JUX1NZTUJPTChkbWFfc3luY19zZ19mb3JfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vZXh0YWJsZS5jIGIvYXJjaC9uaW9zMi9tbS9leHRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyZmM1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vZXh0YWJsZS5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCitpbnQgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpeHVwOworCisJZml4dXAgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5lYSk7CisJaWYgKGZpeHVwKSB7CisJCXJlZ3MtPmVhID0gZml4dXAtPmZpeHVwOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vZmF1bHQuYyBiL2FyY2gvbmlvczIvbW0vZmF1bHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWEwYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9mYXVsdC5jCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICoKKyAqIGJhc2VkIG9uIGFyY2gvbWlwcy9tbS9mYXVsdC5jIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJhbGYgQmFlY2hsZQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKworI2RlZmluZSBFWENfU1VQRVJWX0lOU05fQUNDRVNTCTkgIC8qIFN1cGVydmlzb3Igb25seSBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisjZGVmaW5lIEVYQ19TVVBFUlZfREFUQV9BQ0NFU1MJMTEgLyogU3VwZXJ2aXNvciBvbmx5IGRhdGEgYWRkcmVzcyAqLworI2RlZmluZSBFWENfWF9QUk9URUNUSU9OX0ZBVUxUCTEzIC8qIFRMQiBwZXJtaXNzaW9uIHZpb2xhdGlvbiAoeCkgKi8KKyNkZWZpbmUgRVhDX1JfUFJPVEVDVElPTl9GQVVMVAkxNCAvKiBUTEIgcGVybWlzc2lvbiB2aW9sYXRpb24gKHIpICovCisjZGVmaW5lIEVYQ19XX1BST1RFQ1RJT05fRkFVTFQJMTUgLyogVExCIHBlcm1pc3Npb24gdmlvbGF0aW9uICh3KSAqLworCisvKgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgcGFnZSBmYXVsdHMuICBJdCBkZXRlcm1pbmVzIHRoZSBhZGRyZXNzLAorICogYW5kIHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBwYXNzZXMgaXQgb2ZmIHRvIG9uZSBvZiB0aGUgYXBwcm9wcmlhdGUKKyAqIHJvdXRpbmVzLgorICovCithc21saW5rYWdlIHZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBjYXVzZSwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07CisJaW50IGNvZGUgPSBTRUdWX01BUEVSUjsKKwlpbnQgZmF1bHQ7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKworCWNhdXNlID4+PSAyOworCisJLyogUmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb24gKi8KKwlyZWdzLT5lYSAtPSA0OworCisJLyoKKwkgKiBXZSBmYXVsdC1pbiBrZXJuZWwtc3BhY2UgdmlydHVhbCBtZW1vcnkgb24tZGVtYW5kLiBUaGUKKwkgKiAncmVmZXJlbmNlJyBwYWdlIHRhYmxlIGlzIGluaXRfbW0ucGdkLgorCSAqCisJICogTk9URSEgV2UgTVVTVCBOT1QgdGFrZSBhbnkgbG9ja3MgZm9yIHRoaXMgY2FzZS4gV2UgbWF5CisJICogYmUgaW4gYW4gaW50ZXJydXB0IG9yIGEgY3JpdGljYWwgcmVnaW9uLCBhbmQgc2hvdWxkCisJICogb25seSBjb3B5IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBtYXN0ZXIgcGFnZSB0YWJsZSwKKwkgKiBub3RoaW5nIG1vcmUuCisJICovCisJaWYgKHVubGlrZWx5KGFkZHJlc3MgPj0gVk1BTExPQ19TVEFSVCAmJiBhZGRyZXNzIDw9IFZNQUxMT0NfRU5EKSkgeworCQlpZiAodXNlcl9tb2RlKHJlZ3MpKQorCQkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKKwkJZWxzZQorCQkJZ290byB2bWFsbG9jX2ZhdWx0OworCX0KKworCWlmICh1bmxpa2VseShhZGRyZXNzID49IFRBU0tfU0laRSkpCisJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7CisKKwkvKgorCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCBvciBoYXZlIG5vIHVzZXIKKwkgKiBjb250ZXh0LCB3ZSBtdXN0IG5vdCB0YWtlIHRoZSBmYXVsdC4uCisJICovCisJaWYgKGluX2F0b21pYygpIHx8ICFtbSkKKwkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKKworCWlmICh1c2VyX21vZGUocmVncykpCisJCWZsYWdzIHw9IEZBVUxUX0ZMQUdfVVNFUjsKKworCWlmICghZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpIHsKKwkJaWYgKCF1c2VyX21vZGUocmVncykgJiYgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPmVhKSkKKwkJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7CisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl9CisKKwl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcyk7CisJaWYgKCF2bWEpCisJCWdvdG8gYmFkX2FyZWE7CisJaWYgKHZtYS0+dm1fc3RhcnQgPD0gYWRkcmVzcykKKwkJZ290byBnb29kX2FyZWE7CisJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCisJCWdvdG8gYmFkX2FyZWE7CisJaWYgKGV4cGFuZF9zdGFjayh2bWEsIGFkZHJlc3MpKQorCQlnb3RvIGJhZF9hcmVhOworLyoKKyAqIE9rLCB3ZSBoYXZlIGEgZ29vZCB2bV9hcmVhIGZvciB0aGlzIG1lbW9yeSBhY2Nlc3MsIHNvCisgKiB3ZSBjYW4gaGFuZGxlIGl0Li4KKyAqLworZ29vZF9hcmVhOgorCWNvZGUgPSBTRUdWX0FDQ0VSUjsKKworCXN3aXRjaCAoY2F1c2UpIHsKKwljYXNlIEVYQ19TVVBFUlZfSU5TTl9BQ0NFU1M6CisJCWdvdG8gYmFkX2FyZWE7CisJY2FzZSBFWENfU1VQRVJWX0RBVEFfQUNDRVNTOgorCQlnb3RvIGJhZF9hcmVhOworCWNhc2UgRVhDX1hfUFJPVEVDVElPTl9GQVVMVDoKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpKQorCQkJZ290byBiYWRfYXJlYTsKKwkJYnJlYWs7CisJY2FzZSBFWENfUl9QUk9URUNUSU9OX0ZBVUxUOgorCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkpCisJCQlnb3RvIGJhZF9hcmVhOworCQlicmVhazsKKwljYXNlIEVYQ19XX1BST1RFQ1RJT05fRkFVTFQ6CisJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCisJCQlnb3RvIGJhZF9hcmVhOworCQlmbGFncyA9IEZBVUxUX0ZMQUdfV1JJVEU7CisJCWJyZWFrOworCX0KKworc3Vydml2ZToKKwkvKgorCSAqIElmIGZvciBhbnkgcmVhc29uIGF0IGFsbCB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGZhdWx0LAorCSAqIG1ha2Ugc3VyZSB3ZSBleGl0IGdyYWNlZnVsbHkgcmF0aGVyIHRoYW4gZW5kbGVzc2x5IHJlZG8KKwkgKiB0aGUgZmF1bHQuCisJICovCisJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgZmxhZ3MpOworCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgeworCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCisJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQorCQkJZ290byBkb19zaWdidXM7CisJCUJVRygpOworCX0KKwlpZiAoZmF1bHQgJiBWTV9GQVVMVF9NQUpPUikKKwkJdHNrLT5tYWpfZmx0Kys7CisJZWxzZQorCQl0c2stPm1pbl9mbHQrKzsKKworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuOworCisvKgorICogU29tZXRoaW5nIHRyaWVkIHRvIGFjY2VzcyBtZW1vcnkgdGhhdCBpc24ndCBpbiBvdXIgbWVtb3J5IG1hcC4uCisgKiBGaXggaXQsIGJ1dCBjaGVjayBpZiBpdCdzIGtlcm5lbCBvciB1c2VyIGZpcnN0Li4KKyAqLworYmFkX2FyZWE6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworYmFkX2FyZWFfbm9zZW1hcGhvcmU6CisJLyogVXNlciBtb2RlIGFjY2Vzc2VzIGp1c3QgY2F1c2UgYSBTSUdTRUdWICovCisJaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCQlwcl9hbGVydCgiJXM6IHVuaGFuZGxlZCBwYWdlIGZhdWx0ICglZCkgYXQgMHglMDhseCwgIgorCQkJImNhdXNlICVsZFxuIiwgY3VycmVudC0+Y29tbSwgU0lHU0VHViwgYWRkcmVzcywgY2F1c2UpOworCQlzaG93X3JlZ3MocmVncyk7CisJCV9leGNlcHRpb24oU0lHU0VHViwgcmVncywgY29kZSwgYWRkcmVzcyk7CisJCXJldHVybjsKKwl9CisKK25vX2NvbnRleHQ6CisJLyogQXJlIHdlIHByZXBhcmVkIHRvIGhhbmRsZSB0aGlzIGtlcm5lbCBmYXVsdD8gKi8KKwlpZiAoZml4dXBfZXhjZXB0aW9uKHJlZ3MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE9vcHMuIFRoZSBrZXJuZWwgdHJpZWQgdG8gYWNjZXNzIHNvbWUgYmFkIHBhZ2UuIFdlJ2xsIGhhdmUgdG8KKwkgKiB0ZXJtaW5hdGUgdGhpbmdzIHdpdGggZXh0cmVtZSBwcmVqdWRpY2UuCisJICovCisJYnVzdF9zcGlubG9ja3MoMSk7CisKKwlwcl9hbGVydCgiVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgJXMgYXQgdmlydHVhbCBhZGRyZXNzICUwOGx4IiwKKwkJYWRkcmVzcyA8IFBBR0VfU0laRSA/ICJOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UiIDoKKwkJInBhZ2luZyByZXF1ZXN0IiwgYWRkcmVzcyk7CisJcHJfYWxlcnQoImVhID0gJTA4bHgsIHJhID0gJTA4bHgsIGNhdXNlID0gJWxkXG4iLCByZWdzLT5lYSwgcmVncy0+cmEsCisJCWNhdXNlKTsKKwlwYW5pYygiT29wcyIpOworCXJldHVybjsKKworLyoKKyAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nIGhhcHBlbmVkIHRvIHVzIHRoYXQgbWFkZQorICogdXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgorICovCitvdXRfb2ZfbWVtb3J5OgorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJaWYgKGlzX2dsb2JhbF9pbml0KHRzaykpIHsKKwkJeWllbGQoKTsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlnb3RvIHN1cnZpdmU7CisJfQorCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQlnb3RvIG5vX2NvbnRleHQ7CisJcGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTsKKwlyZXR1cm47CisKK2RvX3NpZ2J1czoKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJLyogS2VybmVsIG1vZGU/IEhhbmRsZSBleGNlcHRpb25zIG9yIGRpZSAqLworCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQlnb3RvIG5vX2NvbnRleHQ7CisKKwlfZXhjZXB0aW9uKFNJR0JVUywgcmVncywgQlVTX0FEUkVSUiwgYWRkcmVzcyk7CisJcmV0dXJuOworCit2bWFsbG9jX2ZhdWx0OgorCXsKKwkJLyoKKwkJICogU3luY2hyb25pemUgdGhpcyB0YXNrJ3MgdG9wIGxldmVsIHBhZ2UtdGFibGUKKwkJICogd2l0aCB0aGUgJ3JlZmVyZW5jZScgcGFnZSB0YWJsZS4KKwkJICoKKwkJICogRG8gX25vdF8gdXNlICJ0c2siIGhlcmUuIFdlIG1pZ2h0IGJlIGluc2lkZQorCQkgKiBhbiBpbnRlcnJ1cHQgaW4gdGhlIG1pZGRsZSBvZiBhIHRhc2sgc3dpdGNoLi4KKwkJICovCisJCWludCBvZmZzZXQgPSBwZ2RfaW5kZXgoYWRkcmVzcyk7CisJCXBnZF90ICpwZ2QsICpwZ2RfazsKKwkJcHVkX3QgKnB1ZCwgKnB1ZF9rOworCQlwbWRfdCAqcG1kLCAqcG1kX2s7CisJCXB0ZV90ICpwdGVfazsKKworCQlwZ2QgPSBwZ2RfY3VycmVudCArIG9mZnNldDsKKwkJcGdkX2sgPSBpbml0X21tLnBnZCArIG9mZnNldDsKKworCQlpZiAoIXBnZF9wcmVzZW50KCpwZ2RfaykpCisJCQlnb3RvIG5vX2NvbnRleHQ7CisJCXNldF9wZ2QocGdkLCAqcGdkX2spOworCisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwkJcHVkX2sgPSBwdWRfb2Zmc2V0KHBnZF9rLCBhZGRyZXNzKTsKKwkJaWYgKCFwdWRfcHJlc2VudCgqcHVkX2spKQorCQkJZ290byBub19jb250ZXh0OworCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CisJCXBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcmVzcyk7CisJCWlmICghcG1kX3ByZXNlbnQoKnBtZF9rKSkKKwkJCWdvdG8gbm9fY29udGV4dDsKKwkJc2V0X3BtZChwbWQsICpwbWRfayk7CisKKwkJcHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcmVzcyk7CisJCWlmICghcHRlX3ByZXNlbnQoKnB0ZV9rKSkKKwkJCWdvdG8gbm9fY29udGV4dDsKKworCQlmbHVzaF90bGJfb25lKGFkZHJlc3MpOworCQlyZXR1cm47CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9pbml0LmMgYi9hcmNoL25pb3MyL21tL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzVjNzVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9pbml0LmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICogICBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqCisgKiBiYXNlZCBvbiBhcmNoL202OGsvbW0vaW5pdC5jCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK3BnZF90ICpwZ2RfY3VycmVudDsKKworLyoKKyAqIHBhZ2luZ19pbml0KCkgY29udGludWVzIHRoZSB2aXJ0dWFsIG1lbW9yeSBlbnZpcm9ubWVudCBzZXR1cCB3aGljaAorICogd2FzIGJlZ3VuIGJ5IHRoZSBjb2RlIGluIGFyY2gvaGVhZC5TLgorICogVGhlIHBhcmFtZXRlcnMgYXJlIHBvaW50ZXJzIHRvIHdoZXJlIHRvIHN0aWNrIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nCisgKiBhZGRyZXNzZXMgb2YgYXZhaWxhYmxlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeS4KKyAqLwordm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKKworCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOworCisJcGFnZXRhYmxlX2luaXQoKTsKKwlwZ2RfY3VycmVudCA9IHN3YXBwZXJfcGdfZGlyOworCisJem9uZXNfc2l6ZVtaT05FX05PUk1BTF0gPSBtYXhfbWFwbnI7CisKKwkvKiBwYXNzIHRoZSBtZW1vcnkgZnJvbSB0aGUgYm9vdG1lbSBhbGxvY2F0b3IgdG8gdGhlIG1haW4gYWxsb2NhdG9yICovCisJZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7CisKKwlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZW1wdHlfemVyb19wYWdlLAorCQkJKHVuc2lnbmVkIGxvbmcpZW1wdHlfemVyb19wYWdlICsgUEFHRV9TSVpFKTsKK30KKwordm9pZCBfX2luaXQgbWVtX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZF9tZW0gICA9IG1lbW9yeV9lbmQ7IC8qIHRoaXMgbXVzdCBub3QgaW5jbHVkZQorCQkJCQkJa2VybmVsIHN0YWNrIGF0IHRvcCAqLworCisJcHJfZGVidWcoIm1lbV9pbml0OiBzdGFydD0lbHgsIGVuZD0lbHhcbiIsIG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZCk7CisKKwllbmRfbWVtICY9IFBBR0VfTUFTSzsKKwloaWdoX21lbW9yeSA9IF9fdmEoZW5kX21lbSk7CisKKwkvKiB0aGlzIHdpbGwgcHV0IGFsbCBtZW1vcnkgb250byB0aGUgZnJlZWxpc3RzICovCisJZnJlZV9hbGxfYm9vdG1lbSgpOworCW1lbV9pbml0X3ByaW50X2luZm8oTlVMTCk7Cit9CisKK3ZvaWQgX19pbml0IG1tdV9pbml0KHZvaWQpCit7CisJZmx1c2hfdGxiX2FsbCgpOworfQorCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECit2b2lkIF9faW5pdCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJZnJlZV9yZXNlcnZlZF9hcmVhKCh2b2lkICopc3RhcnQsICh2b2lkICopZW5kLCAtMSwgImluaXRyZCIpOworfQorI2VuZGlmCisKK3ZvaWQgX19pbml0X3JlZm9rIGZyZWVfaW5pdG1lbSh2b2lkKQoreworCWZyZWVfaW5pdG1lbV9kZWZhdWx0KC0xKTsKK30KKworI2RlZmluZSBfX3BhZ2VfYWxpZ25lZChvcmRlcikgX19hbGlnbmVkKFBBR0VfU0laRSA8PCAob3JkZXIpKQorcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXSBfX3BhZ2VfYWxpZ25lZChQR0RfT1JERVIpOworcHRlX3QgaW52YWxpZF9wdGVfdGFibGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZChQVEVfT1JERVIpOworc3RhdGljIHN0cnVjdCBwYWdlICprdXNlcl9wYWdlWzFdOworCitzdGF0aWMgaW50IGFsbG9jX2t1c2VyX3BhZ2Uodm9pZCkKK3sKKwlleHRlcm4gY2hhciBfX2t1c2VyX2hlbHBlcl9zdGFydFtdLCBfX2t1c2VyX2hlbHBlcl9lbmRbXTsKKwlpbnQga3VzZXJfc3ogPSBfX2t1c2VyX2hlbHBlcl9lbmQgLSBfX2t1c2VyX2hlbHBlcl9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHZwYWdlOworCisJdnBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CisJaWYgKCF2cGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBDb3B5IGt1c2VyIGhlbHBlcnMgKi8KKwltZW1jcHkoKHZvaWQgKil2cGFnZSwgX19rdXNlcl9oZWxwZXJfc3RhcnQsIGt1c2VyX3N6KTsKKworCWZsdXNoX2ljYWNoZV9yYW5nZSh2cGFnZSwgdnBhZ2UgKyBLVVNFUl9TSVpFKTsKKwlrdXNlcl9wYWdlWzBdID0gdmlydF90b19wYWdlKHZwYWdlKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChhbGxvY19rdXNlcl9wYWdlKTsKKworaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgdXNlc19pbnRlcnApCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlpbnQgcmV0OworCisJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKworCS8qIE1hcCBrdXNlciBoZWxwZXJzIHRvIHVzZXIgc3BhY2UgYWRkcmVzcyAqLworCXJldCA9IGluc3RhbGxfc3BlY2lhbF9tYXBwaW5nKG1tLCBLVVNFUl9CQVNFLCBLVVNFUl9TSVpFLAorCQkJCSAgICAgIFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fTUFZUkVBRCB8CisJCQkJICAgICAgVk1fTUFZRVhFQywga3VzZXJfcGFnZSk7CisKKwl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIgKmFyY2hfdm1hX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuICh2bWEtPnZtX3N0YXJ0ID09IEtVU0VSX0JBU0UpID8gIltrdXNlcl0iIDogTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vaW9yZW1hcC5jIGIvYXJjaC9uaW9zMi9tbS9pb3JlbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyODE3NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vaW9yZW1hcC5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtYXBfYXJlYV9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwl1bnNpZ25lZCBsb25nIHBmbjsKKwlwZ3Byb3RfdCBwZ3Byb3QgPSBfX3BncHJvdChfUEFHRV9HTE9CQUwgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRAorCQkJCXwgX1BBR0VfV1JJVEUgfCBmbGFncyk7CisKKwlhZGRyZXNzICY9IH5QTURfTUFTSzsKKwllbmQgPSBhZGRyZXNzICsgc2l6ZTsKKwlpZiAoZW5kID4gUE1EX1NJWkUpCisJCWVuZCA9IFBNRF9TSVpFOworCWlmIChhZGRyZXNzID49IGVuZCkKKwkJQlVHKCk7CisJcGZuID0gUEZOX0RPV04ocGh5c19hZGRyKTsKKwlkbyB7CisJCWlmICghcHRlX25vbmUoKnB0ZSkpIHsKKwkJCXByX2VycigicmVtYXBfYXJlYV9wdGU6IHBhZ2UgYWxyZWFkeSBleGlzdHNcbiIpOworCQkJQlVHKCk7CisJCX0KKwkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBwZ3Byb3QpKTsKKwkJYWRkcmVzcyArPSBQQUdFX1NJWkU7CisJCXBmbisrOworCQlwdGUrKzsKKwl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJlbWFwX2FyZWFfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAorCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisKKwlhZGRyZXNzICY9IH5QR0RJUl9NQVNLOworCWVuZCA9IGFkZHJlc3MgKyBzaXplOworCWlmIChlbmQgPiBQR0RJUl9TSVpFKQorCQllbmQgPSBQR0RJUl9TSVpFOworCXBoeXNfYWRkciAtPSBhZGRyZXNzOworCWlmIChhZGRyZXNzID49IGVuZCkKKwkJQlVHKCk7CisJZG8geworCQlwdGVfdCAqcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIGFkZHJlc3MpOworCisJCWlmICghcHRlKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgYWRkcmVzcyArIHBoeXNfYWRkciwKKwkJCWZsYWdzKTsKKwkJYWRkcmVzcyA9IChhZGRyZXNzICsgUE1EX1NJWkUpICYgUE1EX01BU0s7CisJCXBtZCsrOworCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWludCBlcnJvcjsKKwlwZ2RfdCAqZGlyOworCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkcmVzcyArIHNpemU7CisKKwlwaHlzX2FkZHIgLT0gYWRkcmVzczsKKwlkaXIgPSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlpZiAoYWRkcmVzcyA+PSBlbmQpCisJCUJVRygpOworCWRvIHsKKwkJcHVkX3QgKnB1ZDsKKwkJcG1kX3QgKnBtZDsKKworCQllcnJvciA9IC1FTk9NRU07CisJCXB1ZCA9IHB1ZF9hbGxvYygmaW5pdF9tbSwgZGlyLCBhZGRyZXNzKTsKKwkJaWYgKCFwdWQpCisJCQlicmVhazsKKwkJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwdWQsIGFkZHJlc3MpOworCQlpZiAoIXBtZCkKKwkJCWJyZWFrOworCQlpZiAocmVtYXBfYXJlYV9wbWQocG1kLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzLAorCQkJcGh5c19hZGRyICsgYWRkcmVzcywgZmxhZ3MpKQorCQkJYnJlYWs7CisJCWVycm9yID0gMDsKKwkJYWRkcmVzcyA9IChhZGRyZXNzICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOworCQlkaXIrKzsKKwl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7CisJZmx1c2hfdGxiX2FsbCgpOworCXJldHVybiBlcnJvcjsKK30KKworI2RlZmluZSBJU19NQVBQQUJMRV9VTkNBQ0hFQUJMRShhZGRyKSAoYWRkciA8IDB4MjAwMDAwMDBVTCkKKworLyoKKyAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCisgKi8KK3ZvaWQgX19pb21lbSAqX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQl1bnNpZ25lZCBsb25nIGNhY2hlZmxhZykKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyOworCXZvaWQgKmFkZHI7CisKKwkvKiBEb24ndCBhbGxvdyB3cmFwYXJvdW5kIG9yIHplcm8gc2l6ZSAqLworCWxhc3RfYWRkciA9IHBoeXNfYWRkciArIHNpemUgLSAxOworCisJaWYgKCFzaXplIHx8IGxhc3RfYWRkciA8IHBoeXNfYWRkcikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZyAqLworCWlmIChwaHlzX2FkZHIgPiBQSFlTX09GRlNFVCAmJiBwaHlzX2FkZHIgPCB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKSB7CisJCWNoYXIgKnRfYWRkciwgKnRfZW5kOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQl0X2FkZHIgPSBfX3ZhKHBoeXNfYWRkcik7CisJCXRfZW5kID0gdF9hZGRyICsgKHNpemUgLSAxKTsKKwkJZm9yIChwYWdlID0gdmlydF90b19wYWdlKHRfYWRkcik7CisJCQlwYWdlIDw9IHZpcnRfdG9fcGFnZSh0X2VuZCk7IHBhZ2UrKykKKwkJCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpKQorCQkJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogTWFwIHVuY2FjaGVkIG9iamVjdHMgaW4gdGhlIGxvdyBwYXJ0IG9mIGFkZHJlc3Mgc3BhY2UgdG8KKwkgKiBDT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0UKKwkgKi8KKwlpZiAoSVNfTUFQUEFCTEVfVU5DQUNIRUFCTEUocGh5c19hZGRyKSAmJgorCSAgICBJU19NQVBQQUJMRV9VTkNBQ0hFQUJMRShsYXN0X2FkZHIpICYmCisJICAgICEoY2FjaGVmbGFnICYgX1BBR0VfQ0FDSEVEKSkKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoQ09ORklHX05JT1MyX0lPX1JFR0lPTl9CQVNFICsgcGh5c19hZGRyKTsKKworCS8qIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkICovCisJb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKKwlwaHlzX2FkZHIgJj0gUEFHRV9NQVNLOworCXNpemUgPSBQQUdFX0FMSUdOKGxhc3RfYWRkciArIDEpIC0gcGh5c19hZGRyOworCisJLyogT2ssIGdvIGZvciBpdCAqLworCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKKwlpZiAoIWFyZWEpCisJCXJldHVybiBOVUxMOworCWFkZHIgPSBhcmVhLT5hZGRyOworCWlmIChyZW1hcF9hcmVhX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBhZGRyLCBwaHlzX2FkZHIsIHNpemUsCisJCWNhY2hlZmxhZykpIHsKKwkJdnVubWFwKGFkZHIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgKG9mZnNldCArIChjaGFyICopYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKF9faW9yZW1hcCk7CisKKy8qCisgKiBfX2lvdW5tYXAgdW5tYXBzIG5lYXJseSBldmVyeXRoaW5nLCBzbyBiZSBjYXJlZnVsCisgKiBpdCBkb2Vzbid0IGZyZWUgY3VycmVudGx5IHBvaW50ZXIvcGFnZSB0YWJsZXMgYW55bW9yZSBidXQgaXQKKyAqIHdhc24ndCB1c2VkIGFueXdheSBhbmQgbWlnaHQgYmUgYWRkZWQgbGF0ZXIuCisgKi8KK3ZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICpwOworCisJaWYgKCh1bnNpZ25lZCBsb25nKSBhZGRyID4gQ09ORklHX05JT1MyX0lPX1JFR0lPTl9CQVNFKQorCQlyZXR1cm47CisKKwlwID0gcmVtb3ZlX3ZtX2FyZWEoKHZvaWQgKikgKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpIGFkZHIpKTsKKwlpZiAoIXApCisJCXByX2VycigiaW91bm1hcDogYmFkIGFkZHJlc3MgJXBcbiIsIGFkZHIpOworCWtmcmVlKHApOworfQorRVhQT1JUX1NZTUJPTChfX2lvdW5tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9tbXVfY29udGV4dC5jIGIvYXJjaC9uaW9zMi9tbS9tbXVfY29udGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDZiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL21tL21tdV9jb250ZXh0LmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBNTVUgY29udGV4dCBoYW5kbGluZy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICogICBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKworLyogVGhlIHBpZHMgcG9zaXRpb24gYW5kIG1hc2sgaW4gY29udGV4dCAqLworI2RlZmluZSBQSURfU0hJRlQJMAorI2RlZmluZSBQSURfQklUUwkoY3B1aW5mby50bGJfcGlkX251bV9iaXRzKQorI2RlZmluZSBQSURfTUFTSwkoKDFVTCA8PCBQSURfQklUUykgLSAxKQorCisvKiBUaGUgdmVyc2lvbnMgcG9zaXRpb24gYW5kIG1hc2sgaW4gY29udGV4dCAqLworI2RlZmluZSBWRVJTSU9OX0JJVFMJKDMyIC0gUElEX0JJVFMpCisjZGVmaW5lIFZFUlNJT05fU0hJRlQJKFBJRF9TSElGVCArIFBJRF9CSVRTKQorI2RlZmluZSBWRVJTSU9OX01BU0sJKCgxVUwgPDwgVkVSU0lPTl9CSVRTKSAtIDEpCisKKy8qIFJldHVybiB0aGUgdmVyc2lvbiBwYXJ0IG9mIGEgY29udGV4dCAqLworI2RlZmluZSBDVFhfVkVSU0lPTihjKQkoKChjKSA+PiBWRVJTSU9OX1NISUZUKSAmIFZFUlNJT05fTUFTSykKKworLyogUmV0dXJuIHRoZSBwaWQgcGFydCBvZiBhIGNvbnRleHQgKi8KKyNkZWZpbmUgQ1RYX1BJRChjKQkoKChjKSA+PiBQSURfU0hJRlQpICYgUElEX01BU0spCisKKy8qIFZhbHVlIG9mIHRoZSBmaXJzdCBjb250ZXh0ICh2ZXJzaW9uIDEsIHBpZCAwKSAqLworI2RlZmluZSBGSVJTVF9DVFgJKCgxVUwgPDwgVkVSU0lPTl9TSElGVCkgfCAoMCA8PCBQSURfU0hJRlQpKQorCitzdGF0aWMgbW1fY29udGV4dF90IG5leHRfbW11X2NvbnRleHQ7CisKKy8qCisgKiBJbml0aWFsaXplIE1NVSBjb250ZXh0IG1hbmFnZW1lbnQgc3R1ZmYuCisgKi8KK3ZvaWQgX19pbml0IG1tdV9jb250ZXh0X2luaXQodm9pZCkKK3sKKwkvKiBXZSBuZWVkIHRvIHNldCB0aGlzIGhlcmUgYmVjYXVzZSB0aGUgdmFsdWUgZGVwZW5kcyBvbiBydW50aW1lIGRhdGEKKwkgKiBmcm9tIGNwdWluZm8gKi8KKwluZXh0X21tdV9jb250ZXh0ID0gRklSU1RfQ1RYOworfQorCisvKgorICogU2V0IG5ldyBjb250ZXh0IChwaWQpLCBrZWVwIHdheQorICovCitzdGF0aWMgdm9pZCBzZXRfY29udGV4dChtbV9jb250ZXh0X3QgY29udGV4dCkKK3sKKwlzZXRfbW11X3BpZChDVFhfUElEKGNvbnRleHQpKTsKK30KKworc3RhdGljIG1tX2NvbnRleHRfdCBnZXRfbmV3X2NvbnRleHQodm9pZCkKK3sKKwkvKiBSZXR1cm4gdGhlIG5leHQgcGlkICovCisJbmV4dF9tbXVfY29udGV4dCArPSAoMVVMIDw8IFBJRF9TSElGVCk7CisKKwkvKiBJZiB0aGUgcGlkIGZpZWxkIHdyYXBzIGFyb3VuZCB3ZSBpbmNyZWFzZSB0aGUgdmVyc2lvbiBhbmQKKwkgKiBmbHVzaCB0aGUgdGxiICovCisJaWYgKHVubGlrZWx5KENUWF9QSUQobmV4dF9tbXVfY29udGV4dCkgPT0gMCkpIHsKKwkJLyogVmVyc2lvbiBpcyBpbmNyZW1lbnRlZCBzaW5jZSB0aGUgcGlkIGluY3JlbWVudCBhYm92ZQorCQkgKiBvdmVyZmxvd3MgaW5mbyB2ZXJzaW9uICovCisJCWZsdXNoX2NhY2hlX2FsbCgpOworCQlmbHVzaF90bGJfYWxsKCk7CisJfQorCisJLyogSWYgdGhlIHZlcnNpb24gd3JhcHMgd2Ugc3RhcnQgb3ZlciB3aXRoIHRoZSBmaXJzdCBnZW5lcmF0aW9uLCB3ZSBkbworCSAqIG5vdCBuZWVkIHRvIGZsdXNoIHRoZSB0bGIgaGVyZSBzaW5jZSBpdCdzIGFsd2F5cyBkb25lIGFib3ZlICovCisJaWYgKHVubGlrZWx5KENUWF9WRVJTSU9OKG5leHRfbW11X2NvbnRleHQpID09IDApKQorCQluZXh0X21tdV9jb250ZXh0ID0gRklSU1RfQ1RYOworCisJcmV0dXJuIG5leHRfbW11X2NvbnRleHQ7Cit9CisKK3ZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBJZiB0aGUgcHJvY2VzcyBjb250ZXh0IHdlIGFyZSBzd2FwcGluZyBpbiBoYXMgYSBkaWZmZXJlbnQgY29udGV4dAorCSAqIGdlbmVyYXRpb24gdGhlbiB3ZSBoYXZlIGl0IHNob3VsZCBnZXQgYSBuZXcgZ2VuZXJhdGlvbi9waWQgKi8KKwlpZiAodW5saWtlbHkoQ1RYX1ZFUlNJT04obmV4dC0+Y29udGV4dCkgIT0KKwkJQ1RYX1ZFUlNJT04obmV4dF9tbXVfY29udGV4dCkpKQorCQluZXh0LT5jb250ZXh0ID0gZ2V0X25ld19jb250ZXh0KCk7CisKKwkvKiBTYXZlIHRoZSBjdXJyZW50IHBnZCBzbyB0aGUgZmFzdCB0bGIgaGFuZGxlciBjYW4gZmluZCBpdCAqLworCXBnZF9jdXJyZW50ID0gbmV4dC0+cGdkOworCisJLyogU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgKi8KKwlzZXRfY29udGV4dChuZXh0LT5jb250ZXh0KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIEFmdGVyIHdlIGhhdmUgc2V0IGN1cnJlbnQtPm1tIHRvIGEgbmV3IHZhbHVlLCB0aGlzIGFjdGl2YXRlcworICogdGhlIGNvbnRleHQgZm9yIHRoZSBuZXcgbW0gc28gd2Ugc2VlIHRoZSBuZXcgbWFwcGluZ3MuCisgKi8KK3ZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKK3sKKwluZXh0LT5jb250ZXh0ID0gZ2V0X25ld19jb250ZXh0KCk7CisJc2V0X2NvbnRleHQobmV4dC0+Y29udGV4dCk7CisJcGdkX2N1cnJlbnQgPSBuZXh0LT5wZ2Q7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3BpZF9mcm9tX2NvbnRleHQobW1fY29udGV4dF90ICpjb250ZXh0KQoreworCXJldHVybiBDVFhfUElEKCgqY29udGV4dCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9wZ3RhYmxlLmMgYi9hcmNoL25pb3MyL21tL3BndGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWUyNGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9wZ3RhYmxlLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorCisvKiBwdGVhZGRyOgorICogICBwdGJhc2UgfCB2cG4qIHwgemVybworICogICAzMS0yMiAgfCAyMS0yIHwgMS0wCisgKgorICogICAqdnBuIGlzIHByZXNlcnZlZCBvbiBkb3VibGUgZmF1bHQKKyAqCisgKiB0bGJhY2M6CisgKiAgIElHICAgfCpmbGFnc3wgcGZuCisgKiAgIDMxLTI1fDI0LTIwIHwgMTktMAorICoKKyAqICAgKmNyd3hnCisgKgorICogdGxibWlzYzoKKyAqICAgcmVzdiAgfHdheSAgIHxyZCB8IHdlfHBpZCB8ZGJsfGJhZHxwZXJtfGQKKyAqICAgMzEtMjQgfDIzLTIwIHwxOSB8IDIwfDE3LTR8MyAgfDIgIHwxICAgfDAKKyAqCisgKi8KKworLyoKKyAqIEluaXRpYWxpemUgYSBuZXcgcGdkIC8gcG1kIHRhYmxlIHdpdGggaW52YWxpZCBwb2ludGVycy4KKyAqLworc3RhdGljIHZvaWQgcGdkX2luaXQocGdkX3QgKnBnZCkKK3sKKwl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKikgcGdkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFVTRVJfUFRSU19QRVJfUEdEOyBpICs9IDgpIHsKKwkJcFtpICsgMF0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7CisJCXBbaSArIDFdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOworCQlwW2kgKyAyXSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKKwkJcFtpICsgM10gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7CisJCXBbaSArIDRdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOworCQlwW2kgKyA1XSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKKwkJcFtpICsgNl0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7CisJCXBbaSArIDddID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOworCX0KK30KKworcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlwZ2RfdCAqcmV0LCAqaW5pdDsKKworCXJldCA9IChwZ2RfdCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIFBHRF9PUkRFUik7CisJaWYgKHJldCkgeworCQlpbml0ID0gcGdkX29mZnNldCgmaW5pdF9tbSwgMFVMKTsKKwkJcGdkX2luaXQocmV0KTsKKwkJbWVtY3B5KHJldCArIFVTRVJfUFRSU19QRVJfUEdELCBpbml0ICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJCSAgICAgICAoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2luaXQgcGFnZXRhYmxlX2luaXQodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSBlbnRpcmUgcGdkLiAgKi8KKwlwZ2RfaW5pdChzd2FwcGVyX3BnX2Rpcik7CisJcGdkX2luaXQoc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BUUlNfUEVSX1BHRCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL3RsYi5jIGIvYXJjaC9uaW9zMi9tbS90bGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjEwMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS90bGIuYwpAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIE5pb3MyIFRMQiBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICogICBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKworI2RlZmluZSBUTEJfSU5ERVhfTUFTSwkJXAorCSgoKCgxVUwgPDwgKGNwdWluZm8udGxiX3B0cl9zeiAtIGNwdWluZm8udGxiX251bV93YXlzX2xvZzIpKSkgLSAxKSBcCisJCTw8IFBBR0VfU0hJRlQpCisKKy8qIFVzZWQgYXMgaWxsZWdhbCBQSFlTX0FERFIgZm9yIFRMQiBtYXBwaW5ncworICovCisjZGVmaW5lIE1BWF9QSFlTX0FERFIgMAorCitzdGF0aWMgdm9pZCBnZXRfbWlzY19hbmRfcGlkKHVuc2lnbmVkIGxvbmcgKm1pc2MsIHVuc2lnbmVkIGxvbmcgKnBpZCkKK3sKKwkqbWlzYyAgPSBSRENUTChDVExfVExCTUlTQyk7CisJKm1pc2MgJj0gKFRMQk1JU0NfUElEIHwgVExCTUlTQ19XQVkpOworCSpwaWQgID0gKm1pc2MgJiBUTEJNSVNDX1BJRDsKK30KKworLyoKKyAqIEFsbCBlbnRyaWVzIGNvbW1vbiB0byBhIG1tIHNoYXJlIGFuIGFzaWQuICBUbyBlZmZlY3RpdmVseSBmbHVzaCB0aGVzZQorICogZW50cmllcywgd2UganVzdCBidW1wIHRoZSBhc2lkLgorICovCit2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAoY3VycmVudC0+bW0gPT0gbW0pCisJCWZsdXNoX3RsYl9hbGwoKTsKKwllbHNlCisJCW1lbXNldCgmbW0tPmNvbnRleHQsIDAsIHNpemVvZihtbV9jb250ZXh0X3QpKTsKK30KKworLyoKKyAqIFRoaXMgb25lIGlzIG9ubHkgdXNlZCBmb3IgcGFnZXMgd2l0aCB0aGUgZ2xvYmFsIGJpdCBzZXQgc28gd2UgZG9uJ3QgY2FyZQorICogbXVjaCBhYm91dCB0aGUgQVNJRC4KKyAqLwordm9pZCBmbHVzaF90bGJfb25lX3BpZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbW11X3BpZCkKK3sKKwl1bnNpZ25lZCBpbnQgd2F5OworCXVuc2lnbmVkIGxvbmcgb3JnX21pc2MsIHBpZF9taXNjOworCisJcHJfZGVidWcoIkZsdXNoIHRsYi1lbnRyeSBmb3IgdmFkZHI9JSNseFxuIiwgYWRkcik7CisKKwkvKiByZW1lbWJlciBwaWQvd2F5IHVudGlsIHdlIHJldHVybi4gKi8KKwlnZXRfbWlzY19hbmRfcGlkKCZvcmdfbWlzYywgJnBpZF9taXNjKTsKKworCVdSQ1RMKENUTF9QVEVBRERSLCAoYWRkciA+PiBQQUdFX1NISUZUKSA8PCAyKTsKKworCWZvciAod2F5ID0gMDsgd2F5IDwgY3B1aW5mby50bGJfbnVtX3dheXM7IHdheSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgcHRlYWRkcjsKKwkJdW5zaWduZWQgbG9uZyB0bGJtaXNjOworCQl1bnNpZ25lZCBsb25nIHBpZDsKKworCQl0bGJtaXNjID0gcGlkX21pc2MgfCBUTEJNSVNDX1JEIHwgKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCVdSQ1RMKENUTF9UTEJNSVNDLCB0bGJtaXNjKTsKKwkJcHRlYWRkciA9IFJEQ1RMKENUTF9QVEVBRERSKTsKKwkJdGxibWlzYyA9IFJEQ1RMKENUTF9UTEJNSVNDKTsKKwkJcGlkID0gKHRsYm1pc2MgPj4gVExCTUlTQ19QSURfU0hJRlQpICYgVExCTUlTQ19QSURfTUFTSzsKKwkJaWYgKCgoKChwdGVhZGRyID4+IDIpICYgMHhmZmZmZikpID09IChhZGRyID4+IFBBR0VfU0hJRlQpKSAmJgorCQkJCXBpZCA9PSBtbXVfcGlkKSB7CisJCQl1bnNpZ25lZCBsb25nIHZhZGRyID0gQ09ORklHX05JT1MyX0lPX1JFR0lPTl9CQVNFICsKKwkJCQkoKFBBR0VfU0laRSAqIGNwdWluZm8udGxiX251bV9saW5lcykgKiB3YXkpICsKKwkJCQkoYWRkciAmIFRMQl9JTkRFWF9NQVNLKTsKKwkJCXByX2RlYnVnKCJGbHVzaCBlbnRyeSBieSB3cml0aW5nICUjbHggd2F5PSVkbCBwaWQ9JWxkXG4iLAorCQkJCXZhZGRyLCB3YXksIChwaWRfbWlzYyA+PiBUTEJNSVNDX1BJRF9TSElGVCkpOworCisJCQlXUkNUTChDVExfUFRFQUREUiwgKHZhZGRyID4+IDEyKSA8PCAyKTsKKwkJCXRsYm1pc2MgPSBwaWRfbWlzYyB8IFRMQk1JU0NfV0UgfAorCQkJCSh3YXkgPDwgVExCTUlTQ19XQVlfU0hJRlQpOworCQkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQkJV1JDVEwoQ1RMX1RMQkFDQywgKE1BWF9QSFlTX0FERFIgPj4gUEFHRV9TSElGVCkpOworCQl9CisJfQorCisJV1JDVEwoQ1RMX1RMQk1JU0MsIG9yZ19taXNjKTsKK30KKwordm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1tdV9waWQgPSBnZXRfcGlkX2Zyb21fY29udGV4dCgmdm1hLT52bV9tbS0+Y29udGV4dCk7CisKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJZmx1c2hfdGxiX29uZV9waWQoc3RhcnQsIG1tdV9waWQpOworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJfQorfQorCit2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCWZsdXNoX3RsYl9vbmUoc3RhcnQpOworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJfQorfQorCisvKgorICogVGhpcyBvbmUgaXMgb25seSB1c2VkIGZvciBwYWdlcyB3aXRoIHRoZSBnbG9iYWwgYml0IHNldCBzbyB3ZSBkb24ndCBjYXJlCisgKiBtdWNoIGFib3V0IHRoZSBBU0lELgorICovCit2b2lkIGZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGludCB3YXk7CisJdW5zaWduZWQgbG9uZyBvcmdfbWlzYywgcGlkX21pc2M7CisKKwlwcl9kZWJ1ZygiRmx1c2ggdGxiLWVudHJ5IGZvciB2YWRkcj0lI2x4XG4iLCBhZGRyKTsKKworCS8qIHJlbWVtYmVyIHBpZC93YXkgdW50aWwgd2UgcmV0dXJuLiAqLworCWdldF9taXNjX2FuZF9waWQoJm9yZ19taXNjLCAmcGlkX21pc2MpOworCisJV1JDVEwoQ1RMX1BURUFERFIsIChhZGRyID4+IFBBR0VfU0hJRlQpIDw8IDIpOworCisJZm9yICh3YXkgPSAwOyB3YXkgPCBjcHVpbmZvLnRsYl9udW1fd2F5czsgd2F5KyspIHsKKwkJdW5zaWduZWQgbG9uZyBwdGVhZGRyOworCQl1bnNpZ25lZCBsb25nIHRsYm1pc2M7CisKKwkJdGxibWlzYyA9IHBpZF9taXNjIHwgVExCTUlTQ19SRCB8ICh3YXkgPDwgVExCTUlTQ19XQVlfU0hJRlQpOworCQlXUkNUTChDVExfVExCTUlTQywgdGxibWlzYyk7CisJCXB0ZWFkZHIgPSBSRENUTChDVExfUFRFQUREUik7CisJCXRsYm1pc2MgPSBSRENUTChDVExfVExCTUlTQyk7CisKKwkJaWYgKCgoKHB0ZWFkZHIgPj4gMikgJiAweGZmZmZmKSkgPT0gKGFkZHIgPj4gUEFHRV9TSElGVCkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBDT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0UgKworCQkJCSgoUEFHRV9TSVpFICogY3B1aW5mby50bGJfbnVtX2xpbmVzKSAqIHdheSkgKworCQkJCShhZGRyICYgVExCX0lOREVYX01BU0spOworCisJCQlwcl9kZWJ1ZygiRmx1c2ggZW50cnkgYnkgd3JpdGluZyAlI2x4IHdheT0lZGwgcGlkPSVsZFxuIiwKKwkJCQl2YWRkciwgd2F5LCAocGlkX21pc2MgPj4gVExCTUlTQ19QSURfU0hJRlQpKTsKKworCQkJdGxibWlzYyA9IHBpZF9taXNjIHwgVExCTUlTQ19XRSB8CisJCQkJKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCQlXUkNUTChDVExfUFRFQUREUiwgKHZhZGRyID4+IDEyKSA8PCAyKTsKKwkJCVdSQ1RMKENUTF9UTEJNSVNDLCB0bGJtaXNjKTsKKwkJCVdSQ1RMKENUTF9UTEJBQ0MsIChNQVhfUEhZU19BRERSID4+IFBBR0VfU0hJRlQpKTsKKwkJfQorCX0KKworCVdSQ1RMKENUTF9UTEJNSVNDLCBvcmdfbWlzYyk7Cit9CisKK3ZvaWQgZHVtcF90bGJfbGluZSh1bnNpZ25lZCBsb25nIGxpbmUpCit7CisJdW5zaWduZWQgaW50IHdheTsKKwl1bnNpZ25lZCBsb25nIG9yZ19taXNjOworCisJcHJfZGVidWcoImR1bXAgdGxiLWVudHJpZXMgZm9yIGxpbmU9JSNseCAoYWRkciAlMDhseClcbiIsIGxpbmUsCisJCWxpbmUgPDwgKFBBR0VfU0hJRlQgKyBjcHVpbmZvLnRsYl9udW1fd2F5c19sb2cyKSk7CisKKwkvKiByZW1lbWJlciBwaWQvd2F5IHVudGlsIHdlIHJldHVybiAqLworCW9yZ19taXNjID0gKFJEQ1RMKENUTF9UTEJNSVNDKSAmIChUTEJNSVNDX1BJRCB8IFRMQk1JU0NfV0FZKSk7CisKKwlXUkNUTChDVExfUFRFQUREUiwgbGluZSA8PCAyKTsKKworCWZvciAod2F5ID0gMDsgd2F5IDwgY3B1aW5mby50bGJfbnVtX3dheXM7IHdheSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgcHRlYWRkcjsKKwkJdW5zaWduZWQgbG9uZyB0bGJtaXNjOworCQl1bnNpZ25lZCBsb25nIHRsYmFjYzsKKworCQlXUkNUTChDVExfVExCTUlTQywgVExCTUlTQ19SRCB8ICh3YXkgPDwgVExCTUlTQ19XQVlfU0hJRlQpKTsKKwkJcHRlYWRkciA9IFJEQ1RMKENUTF9QVEVBRERSKTsKKwkJdGxibWlzYyA9IFJEQ1RMKENUTF9UTEJNSVNDKTsKKwkJdGxiYWNjID0gUkRDVEwoQ1RMX1RMQkFDQyk7CisKKwkJaWYgKCh0bGJhY2MgPDwgUEFHRV9TSElGVCkgIT0gKE1BWF9QSFlTX0FERFIgJiBQQUdFX01BU0spKSB7CisJCQlwcl9kZWJ1ZygiLS0gd2F5OiUwMnggdnBuOjB4JTA4bHggcGh5czoweCUwOGx4IHBpZDoweCUwMmx4IGZsYWdzOiVjJWMlYyVjJWNcbiIsCisJCQkJd2F5LAorCQkJCShwdGVhZGRyIDw8IChQQUdFX1NISUZULTIpKSwKKwkJCQkodGxiYWNjIDw8IFBBR0VfU0hJRlQpLAorCQkJCSgodGxibWlzYyA+PiBUTEJNSVNDX1BJRF9TSElGVCkgJgorCQkJCVRMQk1JU0NfUElEX01BU0spLAorCQkJCSh0bGJhY2MgJiBfUEFHRV9SRUFEID8gJ3InIDogJy0nKSwKKwkJCQkodGxiYWNjICYgX1BBR0VfV1JJVEUgPyAndycgOiAnLScpLAorCQkJCSh0bGJhY2MgJiBfUEFHRV9FWEVDID8gJ3gnIDogJy0nKSwKKwkJCQkodGxiYWNjICYgX1BBR0VfR0xPQkFMID8gJ2cnIDogJy0nKSwKKwkJCQkodGxiYWNjICYgX1BBR0VfQ0FDSEVEID8gJ2MnIDogJy0nKSk7CisJCX0KKwl9CisKKwlXUkNUTChDVExfVExCTUlTQywgb3JnX21pc2MpOworfQorCit2b2lkIGR1bXBfdGxiKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3B1aW5mby50bGJfbnVtX2xpbmVzOyBpKyspCisJCWR1bXBfdGxiX2xpbmUoaSk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX3BpZCh1bnNpZ25lZCBsb25nIHBpZCkKK3sKKwl1bnNpZ25lZCBpbnQgbGluZTsKKwl1bnNpZ25lZCBpbnQgd2F5OworCXVuc2lnbmVkIGxvbmcgb3JnX21pc2MsIHBpZF9taXNjOworCisJLyogcmVtZW1iZXIgcGlkL3dheSB1bnRpbCB3ZSByZXR1cm4gKi8KKwlnZXRfbWlzY19hbmRfcGlkKCZvcmdfbWlzYywgJnBpZF9taXNjKTsKKworCWZvciAobGluZSA9IDA7IGxpbmUgPCBjcHVpbmZvLnRsYl9udW1fbGluZXM7IGxpbmUrKykgeworCQlXUkNUTChDVExfUFRFQUREUiwgbGluZSA8PCAyKTsKKworCQlmb3IgKHdheSA9IDA7IHdheSA8IGNwdWluZm8udGxiX251bV93YXlzOyB3YXkrKykgeworCQkJdW5zaWduZWQgbG9uZyBwdGVhZGRyOworCQkJdW5zaWduZWQgbG9uZyB0bGJtaXNjOworCQkJdW5zaWduZWQgbG9uZyB0bGJhY2M7CisKKwkJCXRsYm1pc2MgPSBwaWRfbWlzYyB8IFRMQk1JU0NfUkQgfAorCQkJCSh3YXkgPDwgVExCTUlTQ19XQVlfU0hJRlQpOworCQkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQkJcHRlYWRkciA9IFJEQ1RMKENUTF9QVEVBRERSKTsKKwkJCXRsYm1pc2MgPSBSRENUTChDVExfVExCTUlTQyk7CisJCQl0bGJhY2MgPSBSRENUTChDVExfVExCQUNDKTsKKworCQkJaWYgKCgodGxibWlzYz4+VExCTUlTQ19QSURfU0hJRlQpICYgVExCTUlTQ19QSURfTUFTSykKKwkJCQk9PSBwaWQpIHsKKwkJCQl0bGJtaXNjID0gcGlkX21pc2MgfCBUTEJNSVNDX1dFIHwKKwkJCQkJKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCQkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQkJCVdSQ1RMKENUTF9UTEJBQ0MsCisJCQkJCShNQVhfUEhZU19BRERSID4+IFBBR0VfU0hJRlQpKTsKKwkJCX0KKwkJfQorCisJCVdSQ1RMKENUTF9UTEJNSVNDLCBvcmdfbWlzYyk7CisJfQorfQorCit2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhZGRyID0gQ09ORklHX05JT1MyX0lPX1JFR0lPTl9CQVNFOworCXVuc2lnbmVkIGludCB3YXk7CisJdW5zaWduZWQgbG9uZyBvcmdfbWlzYywgcGlkX21pc2MsIHRsYm1pc2M7CisKKwkvKiByZW1lbWJlciBwaWQvd2F5IHVudGlsIHdlIHJldHVybiAqLworCWdldF9taXNjX2FuZF9waWQoJm9yZ19taXNjLCAmcGlkX21pc2MpOworCXBpZF9taXNjIHw9IFRMQk1JU0NfV0U7CisKKwkvKiBNYXAgZWFjaCBUTEIgZW50cnkgdG8gcGh5c2NhbCBhZGRyZXNzIDAgd2l0aCBuby1hY2Nlc3MgYW5kIGEKKwkgICBiYWQgcHRiYXNlICovCisJZm9yICh3YXkgPSAwOyB3YXkgPCBjcHVpbmZvLnRsYl9udW1fd2F5czsgd2F5KyspIHsKKwkJdGxibWlzYyA9IHBpZF9taXNjIHwgKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCWZvciAoaSA9IDA7IGkgPCBjcHVpbmZvLnRsYl9udW1fbGluZXM7IGkrKykgeworCQkJV1JDVEwoQ1RMX1BURUFERFIsICgodmFkZHIpID4+IFBBR0VfU0hJRlQpIDw8IDIpOworCQkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQkJV1JDVEwoQ1RMX1RMQkFDQywgKE1BWF9QSFlTX0FERFIgPj4gUEFHRV9TSElGVCkpOworCQkJdmFkZHIgKz0gMVVMIDw8IDEyOworCQl9CisJfQorCisJLyogcmVzdG9yZSBwaWQvd2F5ICovCisJV1JDVEwoQ1RMX1RMQk1JU0MsIG9yZ19taXNjKTsKK30KKwordm9pZCBzZXRfbW11X3BpZCh1bnNpZ25lZCBsb25nIHBpZCkKK3sKKwlXUkNUTChDVExfVExCTUlTQywgKFJEQ1RMKENUTF9UTEJNSVNDKSAmIFRMQk1JU0NfV0FZKSB8CisJCSgocGlkICYgVExCTUlTQ19QSURfTUFTSykgPDwgVExCTUlTQ19QSURfU0hJRlQpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vdWFjY2Vzcy5jIGIvYXJjaC9uaW9zMi9tbS91YWNjZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2M2UxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vdWFjY2Vzcy5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworYXNtKCIuZ2xvYmFsCV9fY29weV9mcm9tX3VzZXJcbiIKKwkiICAgLnR5cGUgX19jb3B5X2Zyb21fdXNlciwgQGZ1bmN0aW9uXG4iCisJIl9fY29weV9mcm9tX3VzZXI6XG4iCisJIiAgIG1vdmkgIHIyLDdcbiIKKwkiICAgbW92ICAgcjMscjRcbiIKKwkiICAgYmdlICAgcjIscjYsMWZcbiIKKwkiICAgeG9yICAgcjIscjQscjVcbiIKKwkiICAgYW5kaSAgcjIscjIsM1xuIgorCSIgICBtb3ZpICByNywzXG4iCisJIiAgIGJlcSAgIHIyLHplcm8sNGZcbiIKKwkiMTogYWRkaSAgcjYscjYsLTFcbiIKKwkiICAgbW92aSAgcjIsLTFcbiIKKwkiICAgYmVxICAgcjYscjIsM2ZcbiIKKwkiICAgbW92ICAgcjcscjJcbiIKKwkiMjogbGRidSAgcjIsMChyNSlcbiIKKwkiICAgYWRkaSAgcjYscjYsLTFcbiIKKwkiICAgYWRkaSAgcjUscjUsMVxuIgorCSIgICBzdGIgICByMiwwKHIzKVxuIgorCSIgICBhZGRpICByMyxyMywxXG4iCisJIiAgIGJuZSAgIHI2LHI3LDJiXG4iCisJIjM6XG4iCisJIiAgIGFkZGkgIHIyLHI2LDFcbiIKKwkiICAgcmV0XG4iCisJIjEzOm1vdiAgIHIyLHI2XG4iCisJIiAgIHJldFxuIgorCSI0OiBhbmRpICByMixyNCwxXG4iCisJIiAgIGNtcGVxIHIyLHIyLHplcm9cbiIKKwkiICAgYmVxICAgcjIsemVybyw3ZlxuIgorCSI1OiBhbmRpICByMixyMywyXG4iCisJIiAgIGJlcSAgIHIyLHplcm8sNmZcbiIKKwkiOTogbGRodSAgcjIsMChyNSlcbiIKKwkiICAgYWRkaSAgcjYscjYsLTJcbiIKKwkiICAgYWRkaSAgcjUscjUsMlxuIgorCSIgICBzdGggICByMiwwKHIzKVxuIgorCSIgICBhZGRpICByMyxyMywyXG4iCisJIjY6IGJnZSAgIHI3LHI2LDFiXG4iCisJIjEwOmxkdyAgIHIyLDAocjUpXG4iCisJIiAgIGFkZGkgIHI2LHI2LC00XG4iCisJIiAgIGFkZGkgIHI1LHI1LDRcbiIKKwkiICAgc3R3ICAgcjIsMChyMylcbiIKKwkiICAgYWRkaSAgcjMscjMsNFxuIgorCSIgICBiciAgICA2YlxuIgorCSI3OiBsZGJ1ICByMiwwKHI1KVxuIgorCSIgICBhZGRpICByNixyNiwtMVxuIgorCSIgICBhZGRpICByNSxyNSwxXG4iCisJIiAgIGFkZGkgIHIzLHI0LDFcbiIKKwkiICAgc3RiICAgcjIsMChyNClcbiIKKwkiICAgYnIgICAgNWJcbiIKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSIud29yZCAyYiwzYlxuIgorCSIud29yZCA5YiwxM2JcbiIKKwkiLndvcmQgMTBiLDEzYlxuIgorCSIud29yZCA3YiwxM2JcbiIKKwkiLnByZXZpb3VzXG4iCisJKTsKK0VYUE9SVF9TWU1CT0woX19jb3B5X2Zyb21fdXNlcik7CisKK2FzbSgKKwkiICAgLmdsb2JhbCBfX2NvcHlfdG9fdXNlclxuIgorCSIgICAudHlwZSBfX2NvcHlfdG9fdXNlciwgQGZ1bmN0aW9uXG4iCisJIl9fY29weV90b191c2VyOlxuIgorCSIgICBtb3ZpICByMiw3XG4iCisJIiAgIG1vdiAgIHIzLHI0XG4iCisJIiAgIGJnZSAgIHIyLHI2LDFmXG4iCisJIiAgIHhvciAgIHIyLHI0LHI1XG4iCisJIiAgIGFuZGkgIHIyLHIyLDNcbiIKKwkiICAgbW92aSAgcjcsM1xuIgorCSIgICBiZXEgICByMix6ZXJvLDRmXG4iCisJLyogQmFpbCBpZiB3ZSB0cnkgdG8gY29weSB6ZXJvIGJ5dGVzICAqLworCSIxOiBhZGRpICByNixyNiwtMVxuIgorCSIgICBtb3ZpICByMiwtMVxuIgorCSIgICBiZXEgICByNixyMiwzZlxuIgorCS8qIENvcHkgYnl0ZSBieSBieXRlIGZvciBzbWFsbCBjb3BpZXMgYW5kIGlmIHNyY15kc3QgIT0gMCAqLworCSIgICBtb3YgICByNyxyMlxuIgorCSIyOiBsZGJ1ICByMiwwKHI1KVxuIgorCSIgICBhZGRpICByNSxyNSwxXG4iCisJIjk6IHN0YiAgIHIyLDAocjMpXG4iCisJIiAgIGFkZGkgIHI2LHI2LC0xXG4iCisJIiAgIGFkZGkgIHIzLHIzLDFcbiIKKwkiICAgYm5lICAgcjYscjcsMmJcbiIKKwkiMzogYWRkaSAgcjIscjYsMVxuIgorCSIgICByZXRcbiIKKwkiMTM6bW92ICAgcjIscjZcbiIKKwkiICAgcmV0XG4iCisJLyogIElmICd0bycgaXMgYW4gb2RkIGFkZHJlc3MgYnl0ZSBjb3B5ICovCisJIjQ6IGFuZGkgIHIyLHI0LDFcbiIKKwkiICAgY21wZXEgcjIscjIsemVyb1xuIgorCSIgICBiZXEgICByMix6ZXJvLDdmXG4iCisJLyogSWYgJ3RvJyBpcyBub3QgZGl2aWRlYWJsZSBieSBmb3VyIGNvcHkgaGFsZndvcmRzICovCisJIjU6IGFuZGkgIHIyLHIzLDJcbiIKKwkiICAgYmVxICAgcjIsemVybyw2ZlxuIgorCSIgICBsZGh1ICByMiwwKHI1KVxuIgorCSIgICBhZGRpICByNSxyNSwyXG4iCisJIjEwOnN0aCAgIHIyLDAocjMpXG4iCisJIiAgIGFkZGkgIHI2LHI2LC0yXG4iCisJIiAgIGFkZGkgIHIzLHIzLDJcbiIKKwkvKiBDb3B5IHdvcmRzICovCisJIjY6IGJnZSAgIHI3LHI2LDFiXG4iCisJIiAgIGxkdyAgIHIyLDAocjUpXG4iCisJIiAgIGFkZGkgIHI1LHI1LDRcbiIKKwkiMTE6c3R3ICAgcjIsMChyMylcbiIKKwkiICAgYWRkaSAgcjYscjYsLTRcbiIKKwkiICAgYWRkaSAgcjMscjMsNFxuIgorCSIgICBiciAgICA2YlxuIgorCS8qIENvcHkgcmVtYWluaW5nIGJ5dGVzICovCisJIjc6IGxkYnUgIHIyLDAocjUpXG4iCisJIiAgIGFkZGkgIHI1LHI1LDFcbiIKKwkiICAgYWRkaSAgcjMscjQsMVxuIgorCSIxMjogc3RiICByMiwwKHI0KVxuIgorCSIgICBhZGRpICByNixyNiwtMVxuIgorCSIgICBiciAgICA1YlxuIgorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJIi53b3JkIDliLDNiXG4iCisJIi53b3JkIDEwYiwxM2JcbiIKKwkiLndvcmQgMTFiLDEzYlxuIgorCSIud29yZCAxMmIsMTNiXG4iCisJIi5wcmV2aW91c1xuIik7CitFWFBPUlRfU1lNQk9MKF9fY29weV90b191c2VyKTsKKworbG9uZyBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpfX3RvLCBjb25zdCBjaGFyIF9fdXNlciAqX19mcm9tLCBsb25nIF9fbGVuKQoreworCWludCBsID0gc3Rybmxlbl91c2VyKF9fZnJvbSwgX19sZW4pOworCWludCBpc196dCA9IDE7CisKKwlpZiAobCA+IF9fbGVuKSB7CisJCWlzX3p0ID0gMDsKKwkJbCA9IF9fbGVuOworCX0KKworCWlmIChsID09IDAgfHwgY29weV9mcm9tX3VzZXIoX190bywgX19mcm9tLCBsKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoaXNfenQpCisJCWwtLTsKKwlyZXR1cm4gbDsKK30KKworbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMsIGxvbmcgbikKK3sKKwlsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWNoYXIgYzsKKworCQlpZiAoZ2V0X3VzZXIoYywgcyArIGkpID09IC1FRkFVTFQpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGMgPT0gMCkKKwkJCXJldHVybiBpICsgMTsKKwl9CisJcmV0dXJuIG4gKyAxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9wbGF0Zm9ybS9LY29uZmlnLnBsYXRmb3JtIGIvYXJjaC9uaW9zMi9wbGF0Zm9ybS9LY29uZmlnLnBsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTVkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL3BsYXRmb3JtL0tjb25maWcucGxhdGZvcm0KQEAgLTAsMCArMSwxMjkgQEAKK21lbnUgIlBsYXRmb3JtIG9wdGlvbnMiCisKK2NvbW1lbnQgIk1lbW9yeSBzZXR0aW5ncyIKKworY29uZmlnIE5JT1MyX01FTV9CQVNFCisJaGV4ICJNZW1vcnkgYmFzZSBhZGRyZXNzIgorCWRlZmF1bHQgIjB4MDAwMDAwMDAiCisJaGVscAorCSAgVGhpcyBpcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHRoYXQgdGhlIGtlcm5lbCB3aWxsIHJ1bgorCSAgZnJvbS4gVGhpcyBhZGRyZXNzIGlzIHVzZWQgdG8gbGluayB0aGUga2VybmVsIGFuZCBzZXR1cCBpbml0aWFsIG1lbW9yeQorCSAgbWFuYWdlbWVudC4gWW91IHNob3VsZCB0YWtlIHRoZSByYXcgbWVtb3J5IGFkZHJlc3Mgd2l0aG91dCBhbnkgTU1VCisJICBvciBjYWNoZSBiaXRzIHNldC4KKwkgIFBsZWFzZSBub3QgdGhhdCB0aGlzIGFkZHJlc3MgaXMgdXNlZCBkaXJlY3RseSBzbyB5b3UgaGF2ZSB0byBtYW51YWxseQorCSAgZG8gYWRkcmVzcyB0cmFuc2xhdGlvbiBpZiBpdCdzIGNvbm5lY3RlZCB0byBhIGJyaWRnZS4KKworY29tbWVudCAiRGV2aWNlIHRyZWUiCisKK2NvbmZpZyBOSU9TMl9EVEJfQVRfUEhZU19BRERSCisJYm9vbCAiRFRCIGF0IHBoeXNpY2FsIGFkZHJlc3MiCisJZGVmYXVsdCBuCisJaGVscAorCSAgV2hlbiBlbmFibGVkIHlvdSBjYW4gc2VsZWN0IGEgcGh5c2ljYWwgYWRkcmVzcyB0byBsb2FkIHRoZSBkdGIgZnJvbS4KKwkgIE5vcm1hbGx5IHRoaXMgYWRkcmVzcyBpcyBwYXNzZWQgYnkgYSBib290bG9hZGVyIHN1Y2ggYXMgdS1ib290IGJ1dAorCSAgdXNpbmcgdGhpcyB5b3UgY2FuIHVzZSBhIGRldmljZXRyZWUgd2l0aG91dCBhIGJvb3Rsb2FkZXIuCisJICBUaGlzIHdheSB5b3UgY2FuIHN0b3JlIGEgZGV2aWNldHJlZSBpbiBOT1IgZmxhc2ggb3IgYW4gb25jaGlwIHJvbS4KKwkgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBhZGRyZXNzIGlzIHVzZWQgZGlyZWN0bHkgc28geW91IGhhdmUgdG8gbWFudWFsbHkKKwkgIGRvIGFkZHJlc3MgdHJhbnNsYXRpb24gaWYgaXQncyBjb25uZWN0ZWQgdG8gYSBicmlkZ2UuIEFsc28gdGFrZSBpbnRvCisJICBhY2NvdW50IHRoYXQgd2hlbiB1c2luZyBhbiBNTVUgeW91J2QgaGF2ZSB0byBhZCAweEMwMDAwMDAwIHRvIHlvdXIKKwkgIGFkZHJlc3MKKworY29uZmlnIE5JT1MyX0RUQl9QSFlTX0FERFIKKwloZXggIkRUQiBBZGRyZXNzIgorCWRlcGVuZHMgb24gTklPUzJfRFRCX0FUX1BIWVNfQUREUgorCWRlZmF1bHQgIjB4QzAwMDAwMDAiCisJaGVscAorCSAgUGh5c2ljYWwgYWRkcmVzcyBvZiBhIGR0YiBibG9iLgorCitjb25maWcgTklPUzJfRFRCX1NPVVJDRV9CT09MCisJYm9vbCAiQ29tcGlsZSBhbmQgbGluayBkZXZpY2UgdHJlZSBpbnRvIGtlcm5lbCBpbWFnZSIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGR0cyAoZGV2aWNlIHRyZWUgc291cmNlKSBmaWxlCisJICB3aGljaCB3aWxsIGJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW50byB0aGUga2VybmVsIGltYWdlLgorCitjb25maWcgTklPUzJfRFRCX1NPVVJDRQorCXN0cmluZyAiRGV2aWNlIHRyZWUgc291cmNlIGZpbGUiCisJZGVwZW5kcyBvbiBOSU9TMl9EVEJfU09VUkNFX0JPT0wKKwlkZWZhdWx0ICIiCisJaGVscAorCSAgQWJzb2x1dGUgcGF0aCB0byB0aGUgZGV2aWNlIHRyZWUgc291cmNlIChkdHMpIGZpbGUgZGVzY3JpYmluZyB5b3VyCisJICBzeXN0ZW0uCisKK2NvbW1lbnQgIk5pb3MgSUkgaW5zdHJ1Y3Rpb25zIgorCitjb25maWcgTklPUzJfSFdfTVVMX1NVUFBPUlQKKwlib29sICJFbmFibGUgTVVMIGluc3RydWN0aW9uIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNldCB0byB0cnVlIGlmIHlvdSBjb25maWd1cmVkIHRoZSBOaW9zIElJIHRvIGluY2x1ZGUgdGhlIE1VTAorCSAgaW5zdHJ1Y3Rpb24uICBUaGlzIHdpbGwgZW5hYmxlIHRoZSAtbWh3LW11bCBjb21waWxlciBmbGFnLgorCitjb25maWcgTklPUzJfSFdfTVVMWF9TVVBQT1JUCisJYm9vbCAiRW5hYmxlIE1VTFggaW5zdHJ1Y3Rpb24iCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2V0IHRvIHRydWUgaWYgeW91IGNvbmZpZ3VyZWQgdGhlIE5pb3MgSUkgdG8gaW5jbHVkZSB0aGUgTVVMWAorCSAgaW5zdHJ1Y3Rpb24uICBFbmFibGVzIHRoZSAtbWh3LW11bHggY29tcGlsZXIgZmxhZy4KKworY29uZmlnIE5JT1MyX0hXX0RJVl9TVVBQT1JUCisJYm9vbCAiRW5hYmxlIERJViBpbnN0cnVjdGlvbiIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTZXQgdG8gdHJ1ZSBpZiB5b3UgY29uZmlndXJlZCB0aGUgTmlvcyBJSSB0byBpbmNsdWRlIHRoZSBESVYKKwkgIGluc3RydWN0aW9uLiAgRW5hYmxlcyB0aGUgLW1ody1kaXYgY29tcGlsZXIgZmxhZy4KKworY29uZmlnIE5JT1MyX0ZQVV9TVVBQT1JUCisJYm9vbCAiQ3VzdG9tIGZsb2F0aW5nIHBvaW50IGluc3RyIHN1cHBvcnQiCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxlcyB0aGUgLW1jdXN0b20tZnB1LWNmZz02MC0xIGNvbXBpbGVyIGZsYWcuCisKK2NvbmZpZyBOSU9TMl9DSV9TV0FCX1NVUFBPUlQKKwlib29sICJCeXRlc3dhcCBjdXN0b20gaW5zdHJ1Y3Rpb24iCisJZGVmYXVsdCBuCisJaGVscAorCSAgVXNlIHRoZSBieXRlc3dhcCAoZW5kaWFuIGNvbnZlcnRlcikgTmlvcyBJSSBjdXN0b20gaW5zdHJ1Y3Rpb24gcHJvdmlkZWQKKwkgIGJ5IEFsdGVyYSBhbmQgd2hpY2ggY2FuIGJlIGVuYWJsZWQgaW4gUVNZUyBidWlsZGVyLiBUaGlzIGFjY2VsZXJhdGVzCisJICBlbmRpYW4gY29udmVyc2lvbnMgaW4gdGhlIGtlcm5lbCAoZS5nLiBudG9ocykuCisKK2NvbmZpZyBOSU9TMl9DSV9TV0FCX05PCisJaW50ICJCeXRlc3dhcCBjdXN0b20gaW5zdHJ1Y3Rpb24gbnVtYmVyIiBpZiBOSU9TMl9DSV9TV0FCX1NVUFBPUlQKKwlkZWZhdWx0IDAKKwloZWxwCisJICBOdW1iZXIgb2YgdGhlIGluc3RydWN0aW9uIGFzIGNvbmZpZ3VyZWQgaW4gUVNZUyBCdWlsZGVyLgorCitjb21tZW50ICJDYWNoZSBzZXR0aW5ncyIKKworY29uZmlnIENVU1RPTV9DQUNIRV9TRVRUSU5HUworCWJvb2wgIkN1c3RvbSBjYWNoZSBzZXR0aW5ncyIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHR3ZWFrIHRoZSBjYWNoZSBzZXR0aW5ncyB1c2VkIGR1cmluZyBlYXJseQorCSAgYm9vdCAod2hlcmUgdGhlIGluZm9ybWF0aW9uIGZyb20gZGV2aWNlIHRyZWUgaXMgbm90IHlldCBhdmFpbGFibGUpLgorCSAgVGhlcmUgc2hvdWxkIGJlIG5vIHJlYXNvbiB0byBjaGFuZ2UgdGhlc2UgdmFsdWVzLiBMaW51eCB3aWxsIHdvcmsKKwkgIHBlcmZlY3RseSBmaW5lLCBldmVuIGlmIHRoZSBOaW9zIElJIGlzIGNvbmZpZ3VyZWQgd2l0aCBzbWFsbGVyIGNhY2hlcy4KKworCSAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCitjb25maWcgTklPUzJfRENBQ0hFX1NJWkUKKwloZXggIkQtQ2FjaGUgc2l6ZSIgaWYgQ1VTVE9NX0NBQ0hFX1NFVFRJTkdTCisJcmFuZ2UgMHgyMDAgMHgxMDAwMAorCWRlZmF1bHQgIjB4ODAwIgorCWhlbHAKKwkgIE1heGltdW0gcG9zc2libGUgZGF0YSBjYWNoZSBzaXplLgorCitjb25maWcgTklPUzJfRENBQ0hFX0xJTkVfU0laRQorCWhleCAiRC1DYWNoZSBsaW5lIHNpemUiIGlmIENVU1RPTV9DQUNIRV9TRVRUSU5HUworCXJhbmdlIDB4MTAgMHgyMAorCWRlZmF1bHQgIjB4MjAiCisJaGVscAorCSAgTWluaW11bSBwb3NzaWJsZSBkYXRhIGNhY2hlIGxpbmUgc2l6ZS4KKworY29uZmlnIE5JT1MyX0lDQUNIRV9TSVpFCisJaGV4ICJJLUNhY2hlIHNpemUiIGlmIENVU1RPTV9DQUNIRV9TRVRUSU5HUworCXJhbmdlIDB4MjAwIDB4MTAwMDAKKwlkZWZhdWx0ICIweDEwMDAiCisJaGVscAorCSAgTWF4aW11bSBwb3NzaWJsZSBpbnN0cnVjdGlvbiBjYWNoZSBzaXplLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL3BsYXRmb3JtL01ha2VmaWxlIGIvYXJjaC9uaW9zMi9wbGF0Zm9ybS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjM2NGYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9wbGF0Zm9ybS9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSArPSBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL3BsYXRmb3JtL3BsYXRmb3JtLmMgYi9hcmNoL25pb3MyL3BsYXRmb3JtL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ODc3MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvcGxhdGZvcm0vcGxhdGZvcm0uYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDExIFRob21hcyBDaG91CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgV2FsdGVyIEdvb3NzZW5zCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKK3N0YXRpYyBpbnQgX19pbml0IG5pb3MyX3NvY19kZXZpY2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCBzb2NfZGV2aWNlICpzb2NfZGV2OworCXN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSAqc29jX2Rldl9hdHRyOworCWNvbnN0IGNoYXIgKm1hY2hpbmU7CisKKwlzb2NfZGV2X2F0dHIgPSBremFsbG9jKHNpemVvZigqc29jX2Rldl9hdHRyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY19kZXZfYXR0cikgeworCQltYWNoaW5lID0gb2ZfZmxhdF9kdF9nZXRfbWFjaGluZV9uYW1lKCk7CisJCWlmIChtYWNoaW5lKQorCQkJc29jX2Rldl9hdHRyLT5tYWNoaW5lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcyIsCisJCQkJCQltYWNoaW5lKTsKKworCQlzb2NfZGV2X2F0dHItPmZhbWlseSA9ICJOaW9zIElJIjsKKworCQlzb2NfZGV2ID0gc29jX2RldmljZV9yZWdpc3Rlcihzb2NfZGV2X2F0dHIpOworCQlpZiAoSVNfRVJSKHNvY19kZXYpKSB7CisJCQlrZnJlZShzb2NfZGV2X2F0dHItPm1hY2hpbmUpOworCQkJa2ZyZWUoc29jX2Rldl9hdHRyKTsKKwkJfQorCX0KKworCXJldHVybiBvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKKwkJTlVMTCwgTlVMTCk7Cit9CisKK2RldmljZV9pbml0Y2FsbChuaW9zMl9zb2NfZGV2aWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMWY2ZDJhZS4uOGNkMGFiZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMTcsMTAgKzIxNywxNCBAQAogI2RlZmluZSB3cml0ZWwJd3JpdGVsCiAjZGVmaW5lIHdyaXRlcQl3cml0ZXEKIAotI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQotI2RlZmluZSByZWFkcV9yZWxheGVkKGFkZHIpIHJlYWRxKGFkZHIpCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikJcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKQlyZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpCXJlYWRsKGFkZHIpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYWRkcikJcmVhZHEoYWRkcikKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQoYiwgYWRkcikJd3JpdGViKGIsIGFkZHIpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKHcsIGFkZHIpCXdyaXRldyh3LCBhZGRyKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZChsLCBhZGRyKQl3cml0ZWwobCwgYWRkcikKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQocSwgYWRkcikJd3JpdGVxKHEsIGFkZHIpCiAKICNkZWZpbmUgbW1pb3diKCkgZG8geyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggNDAwNjk2NC4uYTVjYjA3MCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy91YWNjZXNzLXVuYWxpZ25lZC5oPgogCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisKICNkZWZpbmUgVkVSSUZZX1JFQUQgMAogI2RlZmluZSBWRVJJRllfV1JJVEUgMQogCkBAIC0yOCwxMSArMzAsNiBAQAogICogdGhhdCBwdXRfdXNlciBpcyB0aGUgc2FtZSBhcyBfX3B1dF91c2VyLCBldGMuCiAgKi8KIAotZXh0ZXJuIGludCBfX2dldF9rZXJuZWxfYmFkKHZvaWQpOwotZXh0ZXJuIGludCBfX2dldF91c2VyX2JhZCh2b2lkKTsKLWV4dGVybiBpbnQgX19wdXRfa2VybmVsX2JhZCh2b2lkKTsKLWV4dGVybiBpbnQgX19wdXRfdXNlcl9iYWQodm9pZCk7Ci0KIHN0YXRpYyBpbmxpbmUgbG9uZyBhY2Nlc3Nfb2soaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICogYWRkciwKIAkJdW5zaWduZWQgbG9uZyBzaXplKQogewpAQCAtNDMsOCArNDAsOCBAQAogI2RlZmluZSBnZXRfdXNlciBfX2dldF91c2VyCiAKICNpZiAhZGVmaW5lZChDT05GSUdfNjRCSVQpCi0jZGVmaW5lIExERF9LRVJORUwocHRyKQkJX19nZXRfa2VybmVsX2JhZCgpOwotI2RlZmluZSBMRERfVVNFUihwdHIpCQlfX2dldF91c2VyX2JhZCgpOworI2RlZmluZSBMRERfS0VSTkVMKHB0cikJCUJVSUxEX0JVRygpCisjZGVmaW5lIExERF9VU0VSKHB0cikJCUJVSUxEX0JVRygpCiAjZGVmaW5lIFNURF9LRVJORUwoeCwgcHRyKQlfX3B1dF9rZXJuZWxfYXNtNjQoeCxwdHIpCiAjZGVmaW5lIFNURF9VU0VSKHgsIHB0cikJX19wdXRfdXNlcl9hc202NCh4LHB0cikKICNkZWZpbmUgQVNNX1dPUkRfSU5TTgkJIi53b3JkXHQiCkBAIC05NCw3ICs5MSw3IEBACiAJICAgIGNhc2UgMjogX19nZXRfa2VybmVsX2FzbSgibGRoIixwdHIpOyBicmVhazsgXAogCSAgICBjYXNlIDQ6IF9fZ2V0X2tlcm5lbF9hc20oImxkdyIscHRyKTsgYnJlYWs7IFwKIAkgICAgY2FzZSA4OiBMRERfS0VSTkVMKHB0cik7IGJyZWFrOwkJXAotCSAgICBkZWZhdWx0OiBfX2dldF9rZXJuZWxfYmFkKCk7IGJyZWFrOyAgICAgICAgIFwKKwkgICAgZGVmYXVsdDogQlVJTERfQlVHKCk7IGJyZWFrOwkJXAogCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTAzLDcgKzEwMCw3IEBACiAJICAgIGNhc2UgMjogX19nZXRfdXNlcl9hc20oImxkaCIscHRyKTsgYnJlYWs7ICAgXAogCSAgICBjYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtKCJsZHciLHB0cik7IGJyZWFrOyAgIFwKIAkgICAgY2FzZSA4OiBMRERfVVNFUihwdHIpOyAgYnJlYWs7CQlcCi0JICAgIGRlZmF1bHQ6IF9fZ2V0X3VzZXJfYmFkKCk7IGJyZWFrOyAgICAgICAgICAgXAorCSAgICBkZWZhdWx0OiBCVUlMRF9CVUcoKTsgYnJlYWs7CQlcCiAJICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJCQkJCQlcCkBAIC0xMzYsNyArMTMzLDcgQEAKIAkgICAgY2FzZSAyOiBfX3B1dF9rZXJuZWxfYXNtKCJzdGgiLF9feCxwdHIpOyBicmVhazsgICAgIFwKIAkgICAgY2FzZSA0OiBfX3B1dF9rZXJuZWxfYXNtKCJzdHciLF9feCxwdHIpOyBicmVhazsgICAgIFwKIAkgICAgY2FzZSA4OiBTVERfS0VSTkVMKF9feCxwdHIpOyBicmVhazsJCQlcCi0JICAgIGRlZmF1bHQ6IF9fcHV0X2tlcm5lbF9iYWQoKTsgYnJlYWs7CQkJXAorCSAgICBkZWZhdWx0OiBCVUlMRF9CVUcoKTsgYnJlYWs7CQkJXAogCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTQ1LDcgKzE0Miw3IEBACiAJICAgIGNhc2UgMjogX19wdXRfdXNlcl9hc20oInN0aCIsX194LHB0cik7IGJyZWFrOyAgICAgICBcCiAJICAgIGNhc2UgNDogX19wdXRfdXNlcl9hc20oInN0dyIsX194LHB0cik7IGJyZWFrOyAgICAgICBcCiAJICAgIGNhc2UgODogU1REX1VTRVIoX194LHB0cik7IGJyZWFrOwkJCVwKLQkgICAgZGVmYXVsdDogX19wdXRfdXNlcl9iYWQoKTsgYnJlYWs7CQkJXAorCSAgICBkZWZhdWx0OiBCVUlMRF9CVUcoKTsgYnJlYWs7CQkJXAogCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL2JpdHNwZXJsb25nLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL2JpdHNwZXJsb25nLmgKaW5kZXggNzUxOTZiNC4uZTBhMjNjNyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9iaXRzcGVybG9uZy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vYml0c3BlcmxvbmcuaApAQCAtMSwxMyArMSw3IEBACiAjaWZuZGVmIF9fQVNNX1BBUklTQ19CSVRTUEVSTE9OR19ICiAjZGVmaW5lIF9fQVNNX1BBUklTQ19CSVRTUEVSTE9OR19ICiAKLS8qCi0gKiB1c2luZyBDT05GSUdfKiBvdXRzaWRlIG9mIF9fS0VSTkVMX18gaXMgd3JvbmcsCi0gKiBfX0xQNjRfXyB3YXMgYWxzbyByZW1vdmVkIGZyb20gaGVhZGVycywgc28gd2hhdAotICogaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIG9uIHBhcmlzYz8KLSAqCS1hcm5kCi0gKi8KLSNpZiAoZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVCkpIHx8IGRlZmluZWQgKF9fTFA2NF9fKQorI2lmIGRlZmluZWQoX19MUDY0X18pCiAjZGVmaW5lIF9fQklUU19QRVJfTE9ORyA2NAogI2RlZmluZSBTSElGVF9QRVJfTE9ORyA2CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tc2didWYuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbXNnYnVmLmgKaW5kZXggZmU4OGYyNi4uMzQyMTM4OSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tc2didWYuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21zZ2J1Zi5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfUEFSSVNDX01TR0JVRl9ICiAjZGVmaW5lIF9QQVJJU0NfTVNHQlVGX0gKIAorI2luY2x1ZGUgPGFzbS9iaXRzcGVybG9uZy5oPgorCiAvKiAKICAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3IgcGFyaXNjIGFyY2hpdGVjdHVyZSwgY29waWVkIGZyb20gc3BhcmMuCiAgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKQEAgLTEzLDE1ICsxNSwxNSBAQAogCiBzdHJ1Y3QgbXNxaWQ2NF9kcyB7CiAJc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07Ci0jaWZuZGVmIENPTkZJR182NEJJVAorI2lmIF9fQklUU19QRVJfTE9ORyAhPSA2NAogCXVuc2lnbmVkIGludCAgIF9fcGFkMTsKICNlbmRpZgogCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KLSNpZm5kZWYgQ09ORklHXzY0QklUCisjaWYgX19CSVRTX1BFUl9MT05HICE9IDY0CiAJdW5zaWduZWQgaW50ICAgX19wYWQyOwogI2VuZGlmCiAJX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsJLyogbGFzdCBtc2dyY3YgdGltZSAqLwotI2lmbmRlZiBDT05GSUdfNjRCSVQKKyNpZiBfX0JJVFNfUEVSX0xPTkcgIT0gNjQKIAl1bnNpZ25lZCBpbnQgICBfX3BhZDM7CiAjZW5kaWYKIAlfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NlbWJ1Zi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zZW1idWYuaAppbmRleCAxZTU5ZmZkLi5mMDFkODllIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NlbWJ1Zi5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc2VtYnVmLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9QQVJJU0NfU0VNQlVGX0gKICNkZWZpbmUgX1BBUklTQ19TRU1CVUZfSAogCisjaW5jbHVkZSA8YXNtL2JpdHNwZXJsb25nLmg+CisKIC8qIAogICogVGhlIHNlbWlkNjRfZHMgc3RydWN0dXJlIGZvciBwYXJpc2MgYXJjaGl0ZWN0dXJlLgogICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCkBAIC0xMywxMSArMTUsMTEgQEAKIAogc3RydWN0IHNlbWlkNjRfZHMgewogCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkJLyogcGVybWlzc2lvbnMgLi4gc2VlIGlwYy5oICovCi0jaWZuZGVmIENPTkZJR182NEJJVAorI2lmIF9fQklUU19QRVJfTE9ORyAhPSA2NAogCXVuc2lnbmVkIGludAlfX3BhZDE7CiAjZW5kaWYKIAlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCi0jaWZuZGVmIENPTkZJR182NEJJVAorI2lmIF9fQklUU19QRVJfTE9ORyAhPSA2NAogCXVuc2lnbmVkIGludAlfX3BhZDI7CiAjZW5kaWYKIAlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zaG1idWYuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc2htYnVmLmgKaW5kZXggMGEzZWFkYS4uODQ5NmMzOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zaG1idWYuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NobWJ1Zi5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfUEFSSVNDX1NITUJVRl9ICiAjZGVmaW5lIF9QQVJJU0NfU0hNQlVGX0gKIAorI2luY2x1ZGUgPGFzbS9iaXRzcGVybG9uZy5oPgorCiAvKiAKICAqIFRoZSBzaG1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgcGFyaXNjIGFyY2hpdGVjdHVyZS4KICAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aApAQCAtMTMsMTkgKzE1LDE5IEBACiAKIHN0cnVjdCBzaG1pZDY0X2RzIHsKIAlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCi0jaWZuZGVmIENPTkZJR182NEJJVAorI2lmIF9fQklUU19QRVJfTE9ORyAhPSA2NAogCXVuc2lnbmVkIGludAkJX19wYWQxOwogI2VuZGlmCiAJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KLSNpZm5kZWYgQ09ORklHXzY0QklUCisjaWYgX19CSVRTX1BFUl9MT05HICE9IDY0CiAJdW5zaWduZWQgaW50CQlfX3BhZDI7CiAjZW5kaWYKIAlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLwotI2lmbmRlZiBDT05GSUdfNjRCSVQKKyNpZiBfX0JJVFNfUEVSX0xPTkcgIT0gNjQKIAl1bnNpZ25lZCBpbnQJCV9fcGFkMzsKICNlbmRpZgogCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCi0jaWZuZGVmIENPTkZJR182NEJJVAorI2lmIF9fQklUU19QRVJfTE9ORyAhPSA2NAogCXVuc2lnbmVkIGludAkJX19wYWQ0OwogI2VuZGlmCiAJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLwpAQCAtMzYsMjMgKzM4LDE2IEBACiAJdW5zaWduZWQgaW50CQlfX3VudXNlZDI7CiB9OwogCi0jaWZkZWYgQ09ORklHXzY0QklUCi0vKiBUaGUgJ3Vuc2lnbmVkIGludCcgKGZvcm1lcmx5ICd1bnNpZ25lZCBsb25nJykgZGF0YSB0eXBlcyBiZWxvdyB3aWxsCi0gKiBlbnN1cmUgdGhhdCBhIDMyLWJpdCBhcHAgY2FsbGluZyBzaG1jdGwoKixJUENfSU5GTywqKSB3aWxsIHdvcmsgb24KLSAqIGEgd2lkZSBrZXJuZWwsIGJ1dCBpZiBzb21lIG9mIHRoZXNlIHZhbHVlcyBhcmUgbWVhbnQgdG8gY29udGFpbiBwb2ludGVycwotICogdGhleSBtYXkgbmVlZCB0byBiZSAnbG9uZyBsb25nJyBpbnN0ZWFkLiAtUEIgWFhYIEZJWE1FCi0gKi8KLSNlbmRpZgogc3RydWN0IHNobWluZm82NCB7Ci0JdW5zaWduZWQgaW50CXNobW1heDsKLQl1bnNpZ25lZCBpbnQJc2htbWluOwotCXVuc2lnbmVkIGludAlzaG1tbmk7Ci0JdW5zaWduZWQgaW50CXNobXNlZzsKLQl1bnNpZ25lZCBpbnQJc2htYWxsOwotCXVuc2lnbmVkIGludAlfX3VudXNlZDE7Ci0JdW5zaWduZWQgaW50CV9fdW51c2VkMjsKLQl1bnNpZ25lZCBpbnQJX191bnVzZWQzOwotCXVuc2lnbmVkIGludAlfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7CiB9OwogCiAjZW5kaWYgLyogX1BBUklTQ19TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zaWduYWwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc2lnbmFsLmgKaW5kZXggMTBkZjcwNy4uZTI2MDQzYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zaWduYWwuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NpZ25hbC5oCkBAIC04NSw3ICs4NSw3IEBACiBzdHJ1Y3Qgc2lnaW5mbzsKIAogLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQogLyogZnVuY3Rpb24gcG9pbnRlcnMgb24gNjQtYml0IHBhcmlzYyBhcmUgcG9pbnRlcnMgdG8gbGl0dGxlIHN0cnVjdHMgYW5kIHRoZQogICogY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IGNvZGUgd2hpY2ggY2hhbmdlcyBvciB0ZXN0cyB0aGUgYWRkcmVzcyBvZgogICogdGhlIGZ1bmN0aW9uIGluIHRoZSBsaXR0bGUgc3RydWN0LiAgVGhpcyBpcyByZWFsbHkgdWdseSAtUEIKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IDg2NjdmMTguLjVmNWMwMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtODMzLDggKzgzMyw5IEBACiAjZGVmaW5lIF9fTlJfc2VjY29tcAkJKF9fTlJfTGludXggKyAzMzgpCiAjZGVmaW5lIF9fTlJfZ2V0cmFuZG9tCQkoX19OUl9MaW51eCArIDMzOSkKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJKF9fTlJfTGludXggKyAzNDApCisjZGVmaW5lIF9fTlJfYnBmCQkoX19OUl9MaW51eCArIDM0MSkKIAotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX21lbWZkX2NyZWF0ZSArIDEpCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJKF9fTlJfYnBmICsgMSkKIAogCiAjZGVmaW5lIF9fSUdOT1JFX3NlbGVjdAkJLyogbmV3c2VsZWN0ICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCBiNTYzZDljLi5mZTRmMGI4IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTI4NiwxMSArMjg2LDExIEBACiAJRU5UUllfQ09NUChtc2dzbmQpCiAJRU5UUllfQ09NUChtc2dyY3YpCiAJRU5UUllfU0FNRShtc2dnZXQpCQkvKiAxOTAgKi8KLQlFTlRSWV9TQU1FKG1zZ2N0bCkKLQlFTlRSWV9TQU1FKHNobWF0KQorCUVOVFJZX0NPTVAobXNnY3RsKQorCUVOVFJZX0NPTVAoc2htYXQpCiAJRU5UUllfU0FNRShzaG1kdCkKIAlFTlRSWV9TQU1FKHNobWdldCkKLQlFTlRSWV9TQU1FKHNobWN0bCkJCS8qIDE5NSAqLworCUVOVFJZX0NPTVAoc2htY3RsKQkJLyogMTk1ICovCiAJRU5UUllfU0FNRShuaV9zeXNjYWxsKQkJLyogc3RyZWFtczEgKi8KIAlFTlRSWV9TQU1FKG5pX3N5c2NhbGwpCQkvKiBzdHJlYW1zMiAqLwogCUVOVFJZX1NBTUUobHN0YXQ2NCkKQEAgLTMyMyw3ICszMjMsNyBAQAogCUVOVFJZX1NBTUUoZXBvbGxfY3RsKQkJLyogMjI1ICovCiAJRU5UUllfU0FNRShlcG9sbF93YWl0KQogIAlFTlRSWV9TQU1FKHJlbWFwX2ZpbGVfcGFnZXMpCi0JRU5UUllfU0FNRShzZW10aW1lZG9wKQorCUVOVFJZX0NPTVAoc2VtdGltZWRvcCkKIAlFTlRSWV9DT01QKG1xX29wZW4pCiAJRU5UUllfU0FNRShtcV91bmxpbmspCQkvKiAyMzAgKi8KIAlFTlRSWV9DT01QKG1xX3RpbWVkc2VuZCkKQEAgLTQzNiw2ICs0MzYsNyBAQAogCUVOVFJZX1NBTUUoc2VjY29tcCkKIAlFTlRSWV9TQU1FKGdldHJhbmRvbSkKIAlFTlRSWV9TQU1FKG1lbWZkX2NyZWF0ZSkJLyogMzQwICovCisJRU5UUllfU0FNRShicGYpCiAKIAkvKiBOb3RoaW5nIHlldCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmFkdW1wLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmFkdW1wLmgKaW5kZXggYTY3NzQ1Ni4uNDkzZTcyZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZhZHVtcC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mYWR1bXAuaApAQCAtNzAsMzkgKzcwLDM5IEBACiAjZGVmaW5lIENQVV9VTktOT1dOCQkofigodTMyKTApKQogCiAvKiBVdGlsaXR5IG1hY3JvcyAqLwotI2RlZmluZSBTS0lQX1RPX05FWFRfQ1BVKHJlZ19lbnRyeSkJCQlcCi0oewkJCQkJCQlcCi0Jd2hpbGUgKHJlZ19lbnRyeS0+cmVnX2lkICE9IFJFR19JRCgiQ1BVRU5EIikpCVwKLQkJcmVnX2VudHJ5Kys7CQkJCVwKLQlyZWdfZW50cnkrKzsJCQkJCVwKKyNkZWZpbmUgU0tJUF9UT19ORVhUX0NQVShyZWdfZW50cnkpCQkJCQlcCisoewkJCQkJCQkJCVwKKwl3aGlsZSAoYmU2NF90b19jcHUocmVnX2VudHJ5LT5yZWdfaWQpICE9IFJFR19JRCgiQ1BVRU5EIikpCVwKKwkJcmVnX2VudHJ5Kys7CQkJCQkJXAorCXJlZ19lbnRyeSsrOwkJCQkJCQlcCiB9KQogCiAvKiBLZXJuZWwgRHVtcCBzZWN0aW9uIGluZm8gKi8KIHN0cnVjdCBmYWR1bXBfc2VjdGlvbiB7Ci0JdTMyCXJlcXVlc3RfZmxhZzsKLQl1MTYJc291cmNlX2RhdGFfdHlwZTsKLQl1MTYJZXJyb3JfZmxhZ3M7Ci0JdTY0CXNvdXJjZV9hZGRyZXNzOwotCXU2NAlzb3VyY2VfbGVuOwotCXU2NAlieXRlc19kdW1wZWQ7Ci0JdTY0CWRlc3RpbmF0aW9uX2FkZHJlc3M7CisJX19iZTMyCXJlcXVlc3RfZmxhZzsKKwlfX2JlMTYJc291cmNlX2RhdGFfdHlwZTsKKwlfX2JlMTYJZXJyb3JfZmxhZ3M7CisJX19iZTY0CXNvdXJjZV9hZGRyZXNzOworCV9fYmU2NAlzb3VyY2VfbGVuOworCV9fYmU2NAlieXRlc19kdW1wZWQ7CisJX19iZTY0CWRlc3RpbmF0aW9uX2FkZHJlc3M7CiB9OwogCiAvKiBpYm0sY29uZmlndXJlLWtlcm5lbC1kdW1wIGhlYWRlci4gKi8KIHN0cnVjdCBmYWR1bXBfc2VjdGlvbl9oZWFkZXIgewotCXUzMglkdW1wX2Zvcm1hdF92ZXJzaW9uOwotCXUxNglkdW1wX251bV9zZWN0aW9uczsKLQl1MTYJZHVtcF9zdGF0dXNfZmxhZzsKLQl1MzIJb2Zmc2V0X2ZpcnN0X2R1bXBfc2VjdGlvbjsKKwlfX2JlMzIJZHVtcF9mb3JtYXRfdmVyc2lvbjsKKwlfX2JlMTYJZHVtcF9udW1fc2VjdGlvbnM7CisJX19iZTE2CWR1bXBfc3RhdHVzX2ZsYWc7CisJX19iZTMyCW9mZnNldF9maXJzdF9kdW1wX3NlY3Rpb247CiAKIAkvKiBGaWVsZHMgZm9yIGRpc2sgZHVtcCBvcHRpb24uICovCi0JdTMyCWRkX2Jsb2NrX3NpemU7Ci0JdTY0CWRkX2Jsb2NrX29mZnNldDsKLQl1NjQJZGRfbnVtX2Jsb2NrczsKLQl1MzIJZGRfb2Zmc2V0X2Rpc2tfcGF0aDsKKwlfX2JlMzIJZGRfYmxvY2tfc2l6ZTsKKwlfX2JlNjQJZGRfYmxvY2tfb2Zmc2V0OworCV9fYmU2NAlkZF9udW1fYmxvY2tzOworCV9fYmUzMglkZF9vZmZzZXRfZGlza19wYXRoOwogCiAJLyogTWF4aW11bSB0aW1lIGFsbG93ZWQgdG8gcHJldmVudCBhbiBhdXRvbWF0aWMgZHVtcC1yZWJvb3QuICovCi0JdTMyCW1heF90aW1lX2F1dG87CisJX19iZTMyCW1heF90aW1lX2F1dG87CiB9OwogCiAvKgpAQCAtMTc0LDE1ICsxNzQsMTUgQEAKIAogLyogUmVnaXN0ZXIgc2F2ZSBhcmVhIGhlYWRlci4gKi8KIHN0cnVjdCBmYWR1bXBfcmVnX3NhdmVfYXJlYV9oZWFkZXIgewotCXU2NAkJbWFnaWNfbnVtYmVyOwotCXUzMgkJdmVyc2lvbjsKLQl1MzIJCW51bV9jcHVfb2Zmc2V0OworCV9fYmU2NAkJbWFnaWNfbnVtYmVyOworCV9fYmUzMgkJdmVyc2lvbjsKKwlfX2JlMzIJCW51bV9jcHVfb2Zmc2V0OwogfTsKIAogLyogUmVnaXN0ZXIgZW50cnkuICovCiBzdHJ1Y3QgZmFkdW1wX3JlZ19lbnRyeSB7Ci0JdTY0CQlyZWdfaWQ7Ci0JdTY0CQlyZWdfdmFsdWU7CisJX19iZTY0CQlyZWdfaWQ7CisJX19iZTY0CQlyZWdfdmFsdWU7CiB9OwogCiAvKiBmYWR1bXAgY3Jhc2ggaW5mbyBzdHJ1Y3R1cmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggOTdkMzg2OS4uOWVhZjMwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTYxNywxMCArNjE3LDE0IEBACiAvKgogICogV2UgZG9uJ3QgZG8gcmVsYXhlZCBvcGVyYXRpb25zIHlldCwgYXQgbGVhc3Qgbm90IHdpdGggdGhpcyBzZW1hbnRpYwogICovCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikgcmVhZGIoYWRkcikKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKSByZWFkdyhhZGRyKQotI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpIHJlYWRsKGFkZHIpCi0jZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYWRkcikgcmVhZHEoYWRkcikKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKQlyZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpCXJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikJcmVhZGwoYWRkcikKKyNkZWZpbmUgcmVhZHFfcmVsYXhlZChhZGRyKQlyZWFkcShhZGRyKQorI2RlZmluZSB3cml0ZWJfcmVsYXhlZCh2LCBhZGRyKQl3cml0ZWIodiwgYWRkcikKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQodiwgYWRkcikJd3JpdGV3KHYsIGFkZHIpCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHYsIGFkZHIpCXdyaXRlbCh2LCBhZGRyKQorI2RlZmluZSB3cml0ZXFfcmVsYXhlZCh2LCBhZGRyKQl3cml0ZXEodiwgYWRkcikKIAogI2lmZGVmIENPTkZJR19QUEMzMgogI2RlZmluZSBtbWlvd2IoKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaAppbmRleCA0MjYzMmM3Li45Y2ZhMzcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaApAQCAtMTM3LDEzICsxMzcsMTYgQEAKIAlpb21tdV9hZGRfZGV2aWNlKGRldik7CiB9CiAKLWV4dGVybiBpbnQgaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCi0JCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywKLQkJCXVuc2lnbmVkIGxvbmcgbWFzaywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwotZXh0ZXJuIHZvaWQgaW9tbXVfdW5tYXBfc2coc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkJICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworZXh0ZXJuIGludCBwcGNfaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCisJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCisJCQkgICAgdW5zaWduZWQgbG9uZyBtYXNrLAorCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CitleHRlcm4gdm9pZCBwcGNfaW9tbXVfdW5tYXBfc2coc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCisJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkgICAgICAgaW50IG5lbGVtcywKKwkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwogCiBleHRlcm4gdm9pZCAqaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKIAkJCQkgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5kZXggNGNhOTBhMy4uNzI1MjQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCkBAIC0xNTksOCArMTU5LDYgQEAKIAogCWludAlwY2lfZXh0X2NvbmZpZ19zcGFjZTsJLyogZm9yIHBjaSBkZXZpY2VzICovCiAKLQlib29sCWZvcmNlXzMyYml0X21zaTsKLQogCXN0cnVjdAlwY2lfZGV2ICpwY2lkZXY7CS8qIGJhY2stcG9pbnRlciB0byB0aGUgcGNpIGRldmljZSAqLwogI2lmZGVmIENPTkZJR19FRUgKIAlzdHJ1Y3QgZWVoX2RldiAqZWRldjsJCS8qIGVlaCBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGU5YTlmNjAuLmZjM2VlMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMyw3ICszLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgogCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKIGV4dGVybiB2b2lkIHRsYl9mbHVzaF9wZ3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CkBAIC0xNCw2ICsxMyw4IEBACiB9CiAjZW5kaWYgLyogIUNPTkZJR19QUENfQk9PSzNFICovCiAKK2V4dGVybiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpOworCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MtNjQuaD4KICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggZTJiNDI4Yi4uMjA3MzNmYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGIuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeQlfX3RsYl9yZW1vdmVfdGxiX2VudHJ5CiAKIGV4dGVybiB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKaW5kZXggNTRkMDExNi4uNGM2OGJmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCkBAIC02MCwxNiArNjAsMTYgQEAKIAkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIGlvbW11X21hcF9zZyhkZXYsIGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNnbGlzdCwgbmVsZW1zLAotCQkJICAgIGRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOworCXJldHVybiBwcGNfaW9tbXVfbWFwX3NnKGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2dsaXN0LCBuZWxlbXMsCisJCQkJZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYV9pb21tdV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAogCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCWlvbW11X3VubWFwX3NnKGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNnbGlzdCwgbmVsZW1zLCBkaXJlY3Rpb24sCi0JCSAgICAgICBhdHRycyk7CisJcHBjX2lvbW11X3VubWFwX3NnKGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNnbGlzdCwgbmVsZW1zLAorCQkJICAgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIC8qIFdlIHN1cHBvcnQgRE1BIHRvL2Zyb20gYW55IG1lbW9yeSBwYWdlIHZpYSB0aGUgaW9tbXUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9zeXNmcy5jCmluZGV4IGYxOWIxZTUuLjFjZWVjZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfc3lzZnMuYwpAQCAtNjUsNyArNjUsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN0YXRlID0gZWVoX29wcy0+Z2V0X3N0YXRlKGVkZXYtPnBlLCBOVUxMKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlMHgwOHggJTB4MDh4XG4iLAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eCAweCUwOHhcbiIsCiAJCSAgICAgICBzdGF0ZSwgZWRldi0+cGUtPnN0YXRlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDViYmQxYmMuLjA5MDVjOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTY1OSw3ICs2NTksMTMgQEAKIDM6CiAjZW5kaWYKIAlibAlzYXZlX252Z3BycworCS8qCisJICogVXNlIGEgbm9uIHZvbGF0aWxlIEdQUiB0byBzYXZlIGFuZCByZXN0b3JlIG91ciB0aHJlYWRfaW5mbyBmbGFncworCSAqIGFjcm9zcyB0aGUgY2FsbCB0byByZXN0b3JlX2ludGVycnVwdHMuCisJICovCisJbXIJcjMwLHI0CiAJYmwJcmVzdG9yZV9pbnRlcnJ1cHRzCisJbXIJcjQscjMwCiAJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAogCWJsCWRvX25vdGlmeV9yZXN1bWUKIAliCXJldF9mcm9tX2V4Y2VwdApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMKaW5kZXggNzQyNjk0Yy4uMjZkMDkxYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jCkBAIC01OCw3ICs1OCw3IEBACiAJY29uc3QgX19iZTMyICpzZWN0aW9uczsKIAlpbnQgaSwgbnVtX3NlY3Rpb25zOwogCWludCBzaXplOwotCWNvbnN0IGludCAqdG9rZW47CisJY29uc3QgX19iZTMyICp0b2tlbjsKIAogCWlmIChkZXB0aCAhPSAxIHx8IHN0cmNtcCh1bmFtZSwgInJ0YXMiKSAhPSAwKQogCQlyZXR1cm4gMDsKQEAgLTcyLDcgKzcyLDcgQEAKIAkJcmV0dXJuIDE7CiAKIAlmd19kdW1wLmZhZHVtcF9zdXBwb3J0ZWQgPSAxOwotCWZ3X2R1bXAuaWJtX2NvbmZpZ3VyZV9rZXJuZWxfZHVtcCA9ICp0b2tlbjsKKwlmd19kdW1wLmlibV9jb25maWd1cmVfa2VybmVsX2R1bXAgPSBiZTMyX3RvX2NwdSgqdG9rZW4pOwogCiAJLyoKIAkgKiBUaGUgJ2libSxrZXJuZWwtZHVtcCcgcnRhcyBub2RlIGlzIHByZXNlbnQgb25seSBpZiB0aGVyZSBpcwpAQCAtMTQ3LDExICsxNDcsMTEgQEAKIAltZW1zZXQoZmRtLCAwLCBzaXplb2Yoc3RydWN0IGZhZHVtcF9tZW1fc3RydWN0KSk7CiAJYWRkciA9IGFkZHIgJiBQQUdFX01BU0s7CiAKLQlmZG0tPmhlYWRlci5kdW1wX2Zvcm1hdF92ZXJzaW9uID0gMHgwMDAwMDAwMTsKLQlmZG0tPmhlYWRlci5kdW1wX251bV9zZWN0aW9ucyA9IDM7CisJZmRtLT5oZWFkZXIuZHVtcF9mb3JtYXRfdmVyc2lvbiA9IGNwdV90b19iZTMyKDB4MDAwMDAwMDEpOworCWZkbS0+aGVhZGVyLmR1bXBfbnVtX3NlY3Rpb25zID0gY3B1X3RvX2JlMTYoMyk7CiAJZmRtLT5oZWFkZXIuZHVtcF9zdGF0dXNfZmxhZyA9IDA7CiAJZmRtLT5oZWFkZXIub2Zmc2V0X2ZpcnN0X2R1bXBfc2VjdGlvbiA9Ci0JCSh1MzIpb2Zmc2V0b2Yoc3RydWN0IGZhZHVtcF9tZW1fc3RydWN0LCBjcHVfc3RhdGVfZGF0YSk7CisJCWNwdV90b19iZTMyKCh1MzIpb2Zmc2V0b2Yoc3RydWN0IGZhZHVtcF9tZW1fc3RydWN0LCBjcHVfc3RhdGVfZGF0YSkpOwogCiAJLyoKIAkgKiBGaWVsZHMgZm9yIGRpc2sgZHVtcCBvcHRpb24uCkBAIC0xNjcsMjcgKzE2NywyNyBAQAogCiAJLyogS2VybmVsIGR1bXAgc2VjdGlvbnMgKi8KIAkvKiBjcHUgc3RhdGUgZGF0YSBzZWN0aW9uLiAqLwotCWZkbS0+Y3B1X3N0YXRlX2RhdGEucmVxdWVzdF9mbGFnID0gRkFEVU1QX1JFUVVFU1RfRkxBRzsKLQlmZG0tPmNwdV9zdGF0ZV9kYXRhLnNvdXJjZV9kYXRhX3R5cGUgPSBGQURVTVBfQ1BVX1NUQVRFX0RBVEE7CisJZmRtLT5jcHVfc3RhdGVfZGF0YS5yZXF1ZXN0X2ZsYWcgPSBjcHVfdG9fYmUzMihGQURVTVBfUkVRVUVTVF9GTEFHKTsKKwlmZG0tPmNwdV9zdGF0ZV9kYXRhLnNvdXJjZV9kYXRhX3R5cGUgPSBjcHVfdG9fYmUxNihGQURVTVBfQ1BVX1NUQVRFX0RBVEEpOwogCWZkbS0+Y3B1X3N0YXRlX2RhdGEuc291cmNlX2FkZHJlc3MgPSAwOwotCWZkbS0+Y3B1X3N0YXRlX2RhdGEuc291cmNlX2xlbiA9IGZ3X2R1bXAuY3B1X3N0YXRlX2RhdGFfc2l6ZTsKLQlmZG0tPmNwdV9zdGF0ZV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MgPSBhZGRyOworCWZkbS0+Y3B1X3N0YXRlX2RhdGEuc291cmNlX2xlbiA9IGNwdV90b19iZTY0KGZ3X2R1bXAuY3B1X3N0YXRlX2RhdGFfc2l6ZSk7CisJZmRtLT5jcHVfc3RhdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzID0gY3B1X3RvX2JlNjQoYWRkcik7CiAJYWRkciArPSBmd19kdW1wLmNwdV9zdGF0ZV9kYXRhX3NpemU7CiAKIAkvKiBocHRlIHJlZ2lvbiBzZWN0aW9uICovCi0JZmRtLT5ocHRlX3JlZ2lvbi5yZXF1ZXN0X2ZsYWcgPSBGQURVTVBfUkVRVUVTVF9GTEFHOwotCWZkbS0+aHB0ZV9yZWdpb24uc291cmNlX2RhdGFfdHlwZSA9IEZBRFVNUF9IUFRFX1JFR0lPTjsKKwlmZG0tPmhwdGVfcmVnaW9uLnJlcXVlc3RfZmxhZyA9IGNwdV90b19iZTMyKEZBRFVNUF9SRVFVRVNUX0ZMQUcpOworCWZkbS0+aHB0ZV9yZWdpb24uc291cmNlX2RhdGFfdHlwZSA9IGNwdV90b19iZTE2KEZBRFVNUF9IUFRFX1JFR0lPTik7CiAJZmRtLT5ocHRlX3JlZ2lvbi5zb3VyY2VfYWRkcmVzcyA9IDA7Ci0JZmRtLT5ocHRlX3JlZ2lvbi5zb3VyY2VfbGVuID0gZndfZHVtcC5ocHRlX3JlZ2lvbl9zaXplOwotCWZkbS0+aHB0ZV9yZWdpb24uZGVzdGluYXRpb25fYWRkcmVzcyA9IGFkZHI7CisJZmRtLT5ocHRlX3JlZ2lvbi5zb3VyY2VfbGVuID0gY3B1X3RvX2JlNjQoZndfZHVtcC5ocHRlX3JlZ2lvbl9zaXplKTsKKwlmZG0tPmhwdGVfcmVnaW9uLmRlc3RpbmF0aW9uX2FkZHJlc3MgPSBjcHVfdG9fYmU2NChhZGRyKTsKIAlhZGRyICs9IGZ3X2R1bXAuaHB0ZV9yZWdpb25fc2l6ZTsKIAogCS8qIFJNQSByZWdpb24gc2VjdGlvbiAqLwotCWZkbS0+cm1yX3JlZ2lvbi5yZXF1ZXN0X2ZsYWcgPSBGQURVTVBfUkVRVUVTVF9GTEFHOwotCWZkbS0+cm1yX3JlZ2lvbi5zb3VyY2VfZGF0YV90eXBlID0gRkFEVU1QX1JFQUxfTU9ERV9SRUdJT047Ci0JZmRtLT5ybXJfcmVnaW9uLnNvdXJjZV9hZGRyZXNzID0gUk1BX1NUQVJUOwotCWZkbS0+cm1yX3JlZ2lvbi5zb3VyY2VfbGVuID0gZndfZHVtcC5ib290X21lbW9yeV9zaXplOwotCWZkbS0+cm1yX3JlZ2lvbi5kZXN0aW5hdGlvbl9hZGRyZXNzID0gYWRkcjsKKwlmZG0tPnJtcl9yZWdpb24ucmVxdWVzdF9mbGFnID0gY3B1X3RvX2JlMzIoRkFEVU1QX1JFUVVFU1RfRkxBRyk7CisJZmRtLT5ybXJfcmVnaW9uLnNvdXJjZV9kYXRhX3R5cGUgPSBjcHVfdG9fYmUxNihGQURVTVBfUkVBTF9NT0RFX1JFR0lPTik7CisJZmRtLT5ybXJfcmVnaW9uLnNvdXJjZV9hZGRyZXNzID0gY3B1X3RvX2JlNjQoUk1BX1NUQVJUKTsKKwlmZG0tPnJtcl9yZWdpb24uc291cmNlX2xlbiA9IGNwdV90b19iZTY0KGZ3X2R1bXAuYm9vdF9tZW1vcnlfc2l6ZSk7CisJZmRtLT5ybXJfcmVnaW9uLmRlc3RpbmF0aW9uX2FkZHJlc3MgPSBjcHVfdG9fYmU2NChhZGRyKTsKIAlhZGRyICs9IGZ3X2R1bXAuYm9vdF9tZW1vcnlfc2l6ZTsKIAogCXJldHVybiBhZGRyOwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJICogZmlyc3Qga2VybmVsLgogCSAqLwogCWlmIChmZG1fYWN0aXZlKQotCQlmd19kdW1wLmJvb3RfbWVtb3J5X3NpemUgPSBmZG1fYWN0aXZlLT5ybXJfcmVnaW9uLnNvdXJjZV9sZW47CisJCWZ3X2R1bXAuYm9vdF9tZW1vcnlfc2l6ZSA9IGJlNjRfdG9fY3B1KGZkbV9hY3RpdmUtPnJtcl9yZWdpb24uc291cmNlX2xlbik7CiAJZWxzZQogCQlmd19kdW1wLmJvb3RfbWVtb3J5X3NpemUgPSBmYWR1bXBfY2FsY3VsYXRlX3Jlc2VydmVfc2l6ZSgpOwogCkBAIC0zMTQsOCArMzE0LDggQEAKIAkJCQkodW5zaWduZWQgbG9uZykoYmFzZSA+PiAyMCkpOwogCiAJCWZ3X2R1bXAuZmFkdW1waGRyX2FkZHIgPQotCQkJCWZkbV9hY3RpdmUtPnJtcl9yZWdpb24uZGVzdGluYXRpb25fYWRkcmVzcyArCi0JCQkJZmRtX2FjdGl2ZS0+cm1yX3JlZ2lvbi5zb3VyY2VfbGVuOworCQkJCWJlNjRfdG9fY3B1KGZkbV9hY3RpdmUtPnJtcl9yZWdpb24uZGVzdGluYXRpb25fYWRkcmVzcykgKworCQkJCWJlNjRfdG9fY3B1KGZkbV9hY3RpdmUtPnJtcl9yZWdpb24uc291cmNlX2xlbik7CiAJCXByX2RlYnVnKCJmYWR1bXBoZHJfYWRkciA9ICVwXG4iLAogCQkJCSh2b2lkICopIGZ3X2R1bXAuZmFkdW1waGRyX2FkZHIpOwogCX0gZWxzZSB7CkBAIC00NzIsOSArNDcyLDkgQEAKIHsKIAltZW1zZXQocmVncywgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CiAKLQl3aGlsZSAocmVnX2VudHJ5LT5yZWdfaWQgIT0gUkVHX0lEKCJDUFVFTkQiKSkgewotCQlmYWR1bXBfc2V0X3JlZ3ZhbChyZWdzLCByZWdfZW50cnktPnJlZ19pZCwKLQkJCQkJcmVnX2VudHJ5LT5yZWdfdmFsdWUpOworCXdoaWxlIChiZTY0X3RvX2NwdShyZWdfZW50cnktPnJlZ19pZCkgIT0gUkVHX0lEKCJDUFVFTkQiKSkgeworCQlmYWR1bXBfc2V0X3JlZ3ZhbChyZWdzLCBiZTY0X3RvX2NwdShyZWdfZW50cnktPnJlZ19pZCksCisJCQkJCWJlNjRfdG9fY3B1KHJlZ19lbnRyeS0+cmVnX3ZhbHVlKSk7CiAJCXJlZ19lbnRyeSsrOwogCX0KIAlyZWdfZW50cnkrKzsKQEAgLTYwMywyMCArNjAzLDIwIEBACiAJaWYgKCFmZG0tPmNwdV9zdGF0ZV9kYXRhLmJ5dGVzX2R1bXBlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlhZGRyID0gZmRtLT5jcHVfc3RhdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzOworCWFkZHIgPSBiZTY0X3RvX2NwdShmZG0tPmNwdV9zdGF0ZV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MpOwogCXZhZGRyID0gX192YShhZGRyKTsKIAogCXJlZ19oZWFkZXIgPSB2YWRkcjsKLQlpZiAocmVnX2hlYWRlci0+bWFnaWNfbnVtYmVyICE9IFJFR1NBVkVfQVJFQV9NQUdJQykgeworCWlmIChiZTY0X3RvX2NwdShyZWdfaGVhZGVyLT5tYWdpY19udW1iZXIpICE9IFJFR1NBVkVfQVJFQV9NQUdJQykgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWFkIHJlZ2lzdGVyIHNhdmUgYXJlYS5cbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAJcHJfZGVidWcoIi0tLS0tLS0tQ1BVIFN0YXRlIERhdGEtLS0tLS0tLS0tLS1cbiIpOwotCXByX2RlYnVnKCJNYWdpYyBOdW1iZXI6ICVsbHhcbiIsIHJlZ19oZWFkZXItPm1hZ2ljX251bWJlcik7Ci0JcHJfZGVidWcoIk51bUNwdU9mZnNldDogJXhcbiIsIHJlZ19oZWFkZXItPm51bV9jcHVfb2Zmc2V0KTsKKwlwcl9kZWJ1ZygiTWFnaWMgTnVtYmVyOiAlbGx4XG4iLCBiZTY0X3RvX2NwdShyZWdfaGVhZGVyLT5tYWdpY19udW1iZXIpKTsKKwlwcl9kZWJ1ZygiTnVtQ3B1T2Zmc2V0OiAleFxuIiwgYmUzMl90b19jcHUocmVnX2hlYWRlci0+bnVtX2NwdV9vZmZzZXQpKTsKIAotCXZhZGRyICs9IHJlZ19oZWFkZXItPm51bV9jcHVfb2Zmc2V0OwotCW51bV9jcHVzID0gKigodTMyICopKHZhZGRyKSk7CisJdmFkZHIgKz0gYmUzMl90b19jcHUocmVnX2hlYWRlci0+bnVtX2NwdV9vZmZzZXQpOworCW51bV9jcHVzID0gYmUzMl90b19jcHUoKigoX19iZTMyICopKHZhZGRyKSkpOwogCXByX2RlYnVnKCJOdW1DcHVzICAgICA6ICV1XG4iLCBudW1fY3B1cyk7CiAJdmFkZHIgKz0gc2l6ZW9mKHUzMik7CiAJcmVnX2VudHJ5ID0gKHN0cnVjdCBmYWR1bXBfcmVnX2VudHJ5ICopdmFkZHI7CkBAIC02MzksMTMgKzYzOSwxMyBAQAogCQlmZGggPSBfX3ZhKGZ3X2R1bXAuZmFkdW1waGRyX2FkZHIpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jcHVzOyBpKyspIHsKLQkJaWYgKHJlZ19lbnRyeS0+cmVnX2lkICE9IFJFR19JRCgiQ1BVU1RSVCIpKSB7CisJCWlmIChiZTY0X3RvX2NwdShyZWdfZW50cnktPnJlZ19pZCkgIT0gUkVHX0lEKCJDUFVTVFJUIikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlYWQgQ1BVIHN0YXRlIGRhdGFcbiIpOwogCQkJcmMgPSAtRU5PRU5UOwogCQkJZ290byBlcnJvcl9vdXQ7CiAJCX0KIAkJLyogTG93ZXIgNCBieXRlcyBvZiByZWdfdmFsdWUgY29udGFpbnMgbG9naWNhbCBjcHUgaWQgKi8KLQkJY3B1ID0gcmVnX2VudHJ5LT5yZWdfdmFsdWUgJiBGQURVTVBfQ1BVX0lEX01BU0s7CisJCWNwdSA9IGJlNjRfdG9fY3B1KHJlZ19lbnRyeS0+cmVnX3ZhbHVlKSAmIEZBRFVNUF9DUFVfSURfTUFTSzsKIAkJaWYgKGZkaCAmJiAhY3B1bWFza190ZXN0X2NwdShjcHUsICZmZGgtPmNwdV9vbmxpbmVfbWFzaykpIHsKIAkJCVNLSVBfVE9fTkVYVF9DUFUocmVnX2VudHJ5KTsKIAkJCWNvbnRpbnVlOwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogQ2hlY2sgaWYgdGhlIGR1bXAgZGF0YSBpcyB2YWxpZC4gKi8KLQlpZiAoKGZkbV9hY3RpdmUtPmhlYWRlci5kdW1wX3N0YXR1c19mbGFnID09IEZBRFVNUF9FUlJPUl9GTEFHKSB8fAorCWlmICgoYmUxNl90b19jcHUoZmRtX2FjdGl2ZS0+aGVhZGVyLmR1bXBfc3RhdHVzX2ZsYWcpID09IEZBRFVNUF9FUlJPUl9GTEFHKSB8fAogCQkJKGZkbV9hY3RpdmUtPmNwdV9zdGF0ZV9kYXRhLmVycm9yX2ZsYWdzICE9IDApIHx8CiAJCQkoZmRtX2FjdGl2ZS0+cm1yX3JlZ2lvbi5lcnJvcl9mbGFncyAhPSAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkR1bXAgdGFrZW4gYnkgcGxhdGZvcm0gaXMgbm90IHZhbGlkXG4iKTsKQEAgLTgyOCw3ICs4MjgsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZhZHVtcF9yZWxvY2F0ZSh1bnNpZ25lZCBsb25nIHBhZGRyKQogewogCWlmIChwYWRkciA+IFJNQV9TVEFSVCAmJiBwYWRkciA8IGZ3X2R1bXAuYm9vdF9tZW1vcnlfc2l6ZSkKLQkJcmV0dXJuIGZkbS5ybXJfcmVnaW9uLmRlc3RpbmF0aW9uX2FkZHJlc3MgKyBwYWRkcjsKKwkJcmV0dXJuIGJlNjRfdG9fY3B1KGZkbS5ybXJfcmVnaW9uLmRlc3RpbmF0aW9uX2FkZHJlc3MpICsgcGFkZHI7CiAJZWxzZQogCQlyZXR1cm4gcGFkZHI7CiB9CkBAIC05MDIsNyArOTAyLDcgQEAKIAkJCSAqIHRvIHRoZSBzcGVjaWZpZWQgZGVzdGluYXRpb25fYWRkcmVzcy4gSGVuY2Ugc2V0CiAJCQkgKiB0aGUgY29ycmVjdCBvZmZzZXQuCiAJCQkgKi8KLQkJCXBoZHItPnBfb2Zmc2V0ID0gZmRtLnJtcl9yZWdpb24uZGVzdGluYXRpb25fYWRkcmVzczsKKwkJCXBoZHItPnBfb2Zmc2V0ID0gYmU2NF90b19jcHUoZmRtLnJtcl9yZWdpb24uZGVzdGluYXRpb25fYWRkcmVzcyk7CiAJCX0KIAogCQlwaGRyLT5wX3BhZGRyID0gbWJhc2U7CkBAIC05NTEsNyArOTUxLDcgQEAKIAogCWZhZHVtcF9zZXR1cF9jcmFzaF9tZW1vcnlfcmFuZ2VzKCk7CiAKLQlhZGRyID0gZmRtLnJtcl9yZWdpb24uZGVzdGluYXRpb25fYWRkcmVzcyArIGZkbS5ybXJfcmVnaW9uLnNvdXJjZV9sZW47CisJYWRkciA9IGJlNjRfdG9fY3B1KGZkbS5ybXJfcmVnaW9uLmRlc3RpbmF0aW9uX2FkZHJlc3MpICsgYmU2NF90b19jcHUoZmRtLnJtcl9yZWdpb24uc291cmNlX2xlbik7CiAJLyogSW5pdGlhbGl6ZSBmYWR1bXAgY3Jhc2ggaW5mbyBoZWFkZXIuICovCiAJYWRkciA9IGluaXRfZmFkdW1wX2hlYWRlcihhZGRyKTsKIAl2YWRkciA9IF9fdmEoYWRkcik7CkBAIC0xMDIzLDcgKzEwMjMsNyBAQAogCS8qIEludmFsaWRhdGUgdGhlIHJlZ2lzdHJhdGlvbiBvbmx5IGlmIGR1bXAgaXMgYWN0aXZlLiAqLwogCWlmIChmd19kdW1wLmR1bXBfYWN0aXZlKSB7CiAJCWluaXRfZmFkdW1wX21lbV9zdHJ1Y3QoJmZkbSwKLQkJCWZkbV9hY3RpdmUtPmNwdV9zdGF0ZV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MpOworCQkJYmU2NF90b19jcHUoZmRtX2FjdGl2ZS0+Y3B1X3N0YXRlX2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcykpOwogCQlmYWR1bXBfaW52YWxpZGF0ZV9kdW1wKCZmZG0pOwogCX0KIH0KQEAgLTEwNjMsNyArMTA2Myw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlkZXN0aW5hdGlvbl9hZGRyZXNzID0gZmRtX2FjdGl2ZS0+Y3B1X3N0YXRlX2RhdGEuZGVzdGluYXRpb25fYWRkcmVzczsKKwlkZXN0aW5hdGlvbl9hZGRyZXNzID0gYmU2NF90b19jcHUoZmRtX2FjdGl2ZS0+Y3B1X3N0YXRlX2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcyk7CiAJZmFkdW1wX2NsZWFudXAoKTsKIAltdXRleF91bmxvY2soJmZhZHVtcF9tdXRleCk7CiAKQEAgLTExODMsMzEgKzExODMsMzEgQEAKIAlzZXFfcHJpbnRmKG0sCiAJCQkiQ1BVIDogWyUjMDE2bGx4LSUjMDE2bGx4XSAlI2xseCBieXRlcywgIgogCQkJIkR1bXBlZDogJSNsbHhcbiIsCi0JCQlmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzLAotCQkJZmRtX3B0ci0+Y3B1X3N0YXRlX2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcyArCi0JCQlmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5zb3VyY2VfbGVuIC0gMSwKLQkJCWZkbV9wdHItPmNwdV9zdGF0ZV9kYXRhLnNvdXJjZV9sZW4sCi0JCQlmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5ieXRlc19kdW1wZWQpOworCQkJYmU2NF90b19jcHUoZmRtX3B0ci0+Y3B1X3N0YXRlX2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcyksCisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzKSArCisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5zb3VyY2VfbGVuKSAtIDEsCisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5zb3VyY2VfbGVuKSwKKwkJCWJlNjRfdG9fY3B1KGZkbV9wdHItPmNwdV9zdGF0ZV9kYXRhLmJ5dGVzX2R1bXBlZCkpOwogCXNlcV9wcmludGYobSwKIAkJCSJIUFRFOiBbJSMwMTZsbHgtJSMwMTZsbHhdICUjbGx4IGJ5dGVzLCAiCiAJCQkiRHVtcGVkOiAlI2xseFxuIiwKLQkJCWZkbV9wdHItPmhwdGVfcmVnaW9uLmRlc3RpbmF0aW9uX2FkZHJlc3MsCi0JCQlmZG1fcHRyLT5ocHRlX3JlZ2lvbi5kZXN0aW5hdGlvbl9hZGRyZXNzICsKLQkJCWZkbV9wdHItPmhwdGVfcmVnaW9uLnNvdXJjZV9sZW4gLSAxLAotCQkJZmRtX3B0ci0+aHB0ZV9yZWdpb24uc291cmNlX2xlbiwKLQkJCWZkbV9wdHItPmhwdGVfcmVnaW9uLmJ5dGVzX2R1bXBlZCk7CisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5ocHRlX3JlZ2lvbi5kZXN0aW5hdGlvbl9hZGRyZXNzKSwKKwkJCWJlNjRfdG9fY3B1KGZkbV9wdHItPmhwdGVfcmVnaW9uLmRlc3RpbmF0aW9uX2FkZHJlc3MpICsKKwkJCWJlNjRfdG9fY3B1KGZkbV9wdHItPmhwdGVfcmVnaW9uLnNvdXJjZV9sZW4pIC0gMSwKKwkJCWJlNjRfdG9fY3B1KGZkbV9wdHItPmhwdGVfcmVnaW9uLnNvdXJjZV9sZW4pLAorCQkJYmU2NF90b19jcHUoZmRtX3B0ci0+aHB0ZV9yZWdpb24uYnl0ZXNfZHVtcGVkKSk7CiAJc2VxX3ByaW50ZihtLAogCQkJIkRVTVA6IFslIzAxNmxseC0lIzAxNmxseF0gJSNsbHggYnl0ZXMsICIKIAkJCSJEdW1wZWQ6ICUjbGx4XG4iLAotCQkJZmRtX3B0ci0+cm1yX3JlZ2lvbi5kZXN0aW5hdGlvbl9hZGRyZXNzLAotCQkJZmRtX3B0ci0+cm1yX3JlZ2lvbi5kZXN0aW5hdGlvbl9hZGRyZXNzICsKLQkJCWZkbV9wdHItPnJtcl9yZWdpb24uc291cmNlX2xlbiAtIDEsCi0JCQlmZG1fcHRyLT5ybXJfcmVnaW9uLnNvdXJjZV9sZW4sCi0JCQlmZG1fcHRyLT5ybXJfcmVnaW9uLmJ5dGVzX2R1bXBlZCk7CisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5ybXJfcmVnaW9uLmRlc3RpbmF0aW9uX2FkZHJlc3MpLAorCQkJYmU2NF90b19jcHUoZmRtX3B0ci0+cm1yX3JlZ2lvbi5kZXN0aW5hdGlvbl9hZGRyZXNzKSArCisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5ybXJfcmVnaW9uLnNvdXJjZV9sZW4pIC0gMSwKKwkJCWJlNjRfdG9fY3B1KGZkbV9wdHItPnJtcl9yZWdpb24uc291cmNlX2xlbiksCisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5ybXJfcmVnaW9uLmJ5dGVzX2R1bXBlZCkpOwogCiAJaWYgKCFmZG1fYWN0aXZlIHx8CiAJCShmd19kdW1wLnJlc2VydmVfZHVtcF9hcmVhX3N0YXJ0ID09Ci0JCWZkbV9wdHItPmNwdV9zdGF0ZV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MpKQorCQliZTY0X3RvX2NwdShmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzKSkpCiAJCWdvdG8gb3V0OwogCiAJLyogRHVtcCBpcyBhY3RpdmUuIFNob3cgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbi4gKi8KQEAgLTEyMTUsMTAgKzEyMTUsMTAgQEAKIAkJCSIgICAgOiBbJSMwMTZsbHgtJSMwMTZsbHhdICUjbGx4IGJ5dGVzLCAiCiAJCQkiRHVtcGVkOiAlI2xseFxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZndfZHVtcC5yZXNlcnZlX2R1bXBfYXJlYV9zdGFydCwKLQkJCWZkbV9wdHItPmNwdV9zdGF0ZV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MgLSAxLAotCQkJZmRtX3B0ci0+Y3B1X3N0YXRlX2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcyAtCisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzKSAtIDEsCisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzKSAtCiAJCQlmd19kdW1wLnJlc2VydmVfZHVtcF9hcmVhX3N0YXJ0LAotCQkJZmRtX3B0ci0+Y3B1X3N0YXRlX2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcyAtCisJCQliZTY0X3RvX2NwdShmZG1fcHRyLT5jcHVfc3RhdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzKSAtCiAJCQlmd19kdW1wLnJlc2VydmVfZHVtcF9hcmVhX3N0YXJ0KTsKIG91dDoKIAlpZiAoZmRtX2FjdGl2ZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwppbmRleCBhMTA2NDJhLi5hODNjZjVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCkBAIC00MjgsMTAgKzQyOCwxMCBAQAogCQlwcGNfbWQudGNlX2ZsdXNoKHRibCk7CiB9CiAKLWludCBpb21tdV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKLQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAotCQkgdW5zaWduZWQgbG9uZyBtYXNrLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK2ludCBwcGNfaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCisJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCisJCSAgICAgdW5zaWduZWQgbG9uZyBtYXNrLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJZG1hX2FkZHJfdCBkbWFfbmV4dCA9IDAsIGRtYV9hZGRyOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqcywgKm91dHMsICpzZWdzdGFydDsKQEAgLTUzOSw3ICs1MzksNyBAQAogCiAJREJHKCJtYXBwZWQgJWQgZWxlbWVudHM6XG4iLCBvdXRjb3VudCk7CiAKLQkvKiBGb3IgdGhlIHNha2Ugb2YgaW9tbXVfdW5tYXBfc2csIHdlIGNsZWFyIG91dCB0aGUgbGVuZ3RoIGluIHRoZQorCS8qIEZvciB0aGUgc2FrZSBvZiBwcGNfaW9tbXVfdW5tYXBfc2csIHdlIGNsZWFyIG91dCB0aGUgbGVuZ3RoIGluIHRoZQogCSAqIG5leHQgZW50cnkgb2YgdGhlIHNnbGlzdCBpZiB3ZSBkaWRuJ3QgZmlsbCB0aGUgbGlzdCBjb21wbGV0ZWx5CiAJICovCiAJaWYgKG91dGNvdW50IDwgaW5jb3VudCkgewpAQCAtNTcyLDkgKzU3Miw5IEBACiB9CiAKIAotdm9pZCBpb21tdV91bm1hcF9zZyhzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit2b2lkIHBwY19pb21tdV91bm1hcF9zZyhzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwppbmRleCAxNTUwMTNkLi5iMTUxOTRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKQEAgLTI2NiwxMyArMjY2LDMgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpYnVzX3RvX25vZGUpOwogI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHF1aXJrX3JhZGVvbl8zMmJpdF9tc2koc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBwY2lfZ2V0X3BkbihkZXYpOwotCi0JaWYgKHBkbikKLQkJcGRuLT5mb3JjZV8zMmJpdF9tc2kgPSB0cnVlOwotfQotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BVEksIDB4NjhmMiwgcXVpcmtfcmFkZW9uXzMyYml0X21zaSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FUSSwgMHhhYTY4LCBxdWlya19yYWRlb25fMzJiaXRfbXNpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2dldGNwdS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZ2V0Y3B1LlMKaW5kZXggMjNlYjlhOS4uYzYyYmU2MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZ2V0Y3B1LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZ2V0Y3B1LlMKQEAgLTMwLDggKzMwLDggQEAKIFZfRlVOQ1RJT05fQkVHSU4oX19rZXJuZWxfZ2V0Y3B1KQogICAuY2ZpX3N0YXJ0cHJvYwogCW1mc3ByCXI1LFNQUk5fU1BSR19WRFNPX1JFQUQKLQljbXBkaQljcjAscjMsMAotCWNtcGRpCWNyMSxyNCwwCisJY21wd2kJY3IwLHIzLDAKKwljbXB3aQljcjEscjQsMAogCWNscmx3aSAgcjYscjUsMTYKIAlybHdpbm0gIHI3LHI1LDE2LDMxLTE1LDMxLTAKIAliZXEJY3IwLDFmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCmluZGV4IDdlNzBhZTkuLjZhNGE1ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCkBAIC01MTcsOCArNTE3LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2h1Z2VwZDsgaSsrLCBocGRwKyspCiAJCWhwZHAtPnBkID0gMDsKIAotCXRsYi0+bmVlZF9mbHVzaCA9IDE7Ci0KICNpZmRlZiBDT05GSUdfUFBDX0ZTTF9CT09LM0UKIAlodWdlcGRfZnJlZSh0bGIsIGh1Z2VwdGUpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCmluZGV4IGNhZDY4ZmYuLjQxNWE1MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAvKgogICogQ2hlY2sgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgYWZmZWN0IHdoYXQgTU1VX2luaXQgd2lsbCBkby4KICAqLwotdm9pZCBNTVVfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IE1NVV9zZXR1cCh2b2lkKQogewogCS8qIENoZWNrIGZvciBub2JhdHMgb3B0aW9uICh1c2VkIGluIG1hcGluX3JhbSkuICovCiAJaWYgKHN0cnN0cihib290X2NvbW1hbmRfbGluZSwgIm5vYmF0cyIpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCmluZGV4IDg2MmIzMjcuLjA4ODM5OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAogCQlpcnFfc2V0X21zaV9kZXNjKHZpcnEsIGVudHJ5KTsKIAkJbXNnLmRhdGEgPSB2aXJxOwotCQl3cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOworCQlwY2lfd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMwMSw5ICszMDEsOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaWNfaXJxX2NoaXAgPSB7Ci0JLmlycV9tYXNrCT0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrCT0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9zaHV0ZG93bgk9IG1hc2tfbXNpX2lycSwKKwkuaXJxX21hc2sJPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfc2h1dGRvd24JPSBwY2lfbXNpX21hc2tfaXJxLAogCS5uYW1lCQk9ICJBWE9OLU1TSSIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCmluZGV4IDJiOTBmZjguLmM3Yzg3MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCkBAIC02MjEsOCArNjIxLDkgQEAKIAlpZiAoaW9tbXVfZml4ZWRfaXNfd2VhayA9PSBkbWFfZ2V0X2F0dHIoRE1BX0FUVFJfV0VBS19PUkRFUklORywgYXR0cnMpKQogCQlyZXR1cm4gZG1hX2RpcmVjdF9vcHMubWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24sIGF0dHJzKTsKIAllbHNlCi0JCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCBjZWxsX2dldF9pb21tdV90YWJsZShkZXYpLCBzZywgbmVudHMsCi0JCQkJICAgIGRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOworCQlyZXR1cm4gcHBjX2lvbW11X21hcF9zZyhkZXYsIGNlbGxfZ2V0X2lvbW11X3RhYmxlKGRldiksIHNnLAorCQkJCQluZW50cywgZGV2aWNlX3RvX21hc2soZGV2KSwKKwkJCQkJZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYV9maXhlZF91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCkBAIC02MzIsOCArNjMzLDggQEAKIAlpZiAoaW9tbXVfZml4ZWRfaXNfd2VhayA9PSBkbWFfZ2V0X2F0dHIoRE1BX0FUVFJfV0VBS19PUkRFUklORywgYXR0cnMpKQogCQlkbWFfZGlyZWN0X29wcy51bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uLCBhdHRycyk7CiAJZWxzZQotCQlpb21tdV91bm1hcF9zZyhjZWxsX2dldF9pb21tdV90YWJsZShkZXYpLCBzZywgbmVudHMsIGRpcmVjdGlvbiwKLQkJCSAgICAgICBhdHRycyk7CisJCXBwY19pb21tdV91bm1hcF9zZyhjZWxsX2dldF9pb21tdV90YWJsZShkZXYpLCBzZywgbmVudHMsCisJCQkJICAgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIHN0YXRpYyBpbnQgZG1hX2ZpeGVkX2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWhtaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtaG1pLmMKaW5kZXggNWUxZWQxNS4uYjMyMmJmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtaG1pLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtaG1pLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAl9OwogCiAJLyogUHJpbnQgdGhpbmdzIG91dCAqLwotCWlmIChobWlfZXZ0LT52ZXJzaW9uICE9IE9wYWxITUlFdnRfVjEpIHsKKwlpZiAoaG1pX2V2dC0+dmVyc2lvbiA8IE9wYWxITUlFdnRfVjEpIHsKIAkJcHJfZXJyKCJITUkgSW50ZXJydXB0LCBVbmtub3duIGV2ZW50IHZlcnNpb24gJWQgIVxuIiwKIAkJCWhtaV9ldnQtPnZlcnNpb24pOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1scGMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWxwYy5jCmluZGV4IGFkNGIzMWQuLmU0MTY5ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWxwYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWxwYy5jCkBAIC0yMTYsMTQgKzIxNiw1NCBAQAogCQkJCSAgICZkYXRhLCBsZW4pOwogCQlpZiAocmMpCiAJCQlyZXR1cm4gLUVOWElPOworCisJCS8qCisJCSAqIE5vdyB0aGVyZSBpcyBzb21lIHRyaWNrZXJ5IHdpdGggdGhlIGRhdGEgcmV0dXJuZWQgYnkgT1BBTAorCQkgKiBhcyBpdCdzIHRoZSBkZXNpcmVkIGRhdGEgcmlnaHQganVzdGlmaWVkIGluIGEgMzItYml0IEJFCisJCSAqIHdvcmQuCisJCSAqCisJCSAqIFRoaXMgaXMgYSB2ZXJ5IGJhZCBpbnRlcmZhY2UgYW5kIEknbSB0byBibGFtZSBmb3IgaXQgOi0oCisJCSAqCisJCSAqIFNvIHdlIGNhbid0IGp1c3QgYXBwbHkgYSAzMi1iaXQgc3dhcCB0byB3aGF0IGNvbWVzIGZyb20gT1BBTCwKKwkJICogYmVjYXVzZSB1c2VyIHNwYWNlIGV4cGVjdHMgdGhlICpieXRlcyogdG8gYmUgaW4gdGhlaXIgcHJvcGVyCisJCSAqIHJlc3BlY3RpdmUgcG9zaXRpb25zIChpZSwgTFBDIHBvc2l0aW9uKS4KKwkJICoKKwkJICogU28gd2hhdCB3ZSByZWFsbHkgd2FudCB0byBkbyBoZXJlIGlzIHRvIHNoaWZ0IGRhdGEgcmlnaHQKKwkJICogYXBwcm9wcmlhdGVseSBvbiBhIExFIGtlcm5lbC4KKwkJICoKKwkJICogSUUuIElmIHRoZSBMUEMgdHJhbnNhY3Rpb24gaGFzIGJ5dGVzIEIwLCBCMSwgQjIgYW5kIEIzIGluIHRoYXQKKwkJICogb3JkZXIsIHdlIGhhdmUgaW4gbWVtb3J5IHdyaXR0ZW4gdG8gYnkgT1BBTCBhdCB0aGUgImRhdGEiCisJCSAqIHBvaW50ZXI6CisJCSAqCisJCSAqICAgICAgICAgICAgICAgQnl0ZXM6ICAgICAgT1BBTCAiZGF0YSIgICBMRSAiZGF0YSIKKwkJICogICAzMi1iaXQ6ICAgQjAgQjEgQjIgQjMgICBCMEIxQjJCMyAgICAgIEIzQjJCMUIwCisJCSAqICAgMTYtYml0OiAgIEIwIEIxICAgICAgICAgMDAwMEIwQjEgICAgICBCMUIwMDAwMAorCQkgKiAgICA4LWJpdDogICBCMCAgICAgICAgICAgIDAwMDAwMEIwICAgICAgQjAwMDAwMDAKKwkJICoKKwkJICogU28gYSBCRSBrZXJuZWwgd2lsbCBoYXZlIHRoZSBsZWZ0bW9zdCBvZiB0aGUgYWJvdmUgaW4gdGhlIE1TQgorCQkgKiBhbmQgcmlnaHRtb3N0IGluIHRoZSBMU0IgYW5kIGNhbiBqdXN0IHRoZW4gImNhc3QiIHRoZSB1MzIgImRhdGEiCisJCSAqIGRvd24gdG8gdGhlIGFwcHJvcHJpYXRlIHF1YW50aXR5IGFuZCB3cml0ZSBpdC4KKwkJICoKKwkJICogSG93ZXZlciwgYW4gTEUga2VybmVsIGNhbid0LiBJdCBkb2Vzbid0IG5lZWQgdG8gc3dhcCBiZWNhdXNlIGEKKwkJICogbG9hZCBmcm9tIGRhdGEgZm9sbG93ZWQgYnkgYSBzdG9yZSB0byB1c2VyIGFyZSBnb2luZyB0byBwcmVzZXJ2ZQorCQkgKiB0aGUgYnl0ZSBvcmRlcmluZyB3aGljaCBpcyB0aGUgd2lyZSBieXRlIG9yZGVyIHdoaWNoIGlzIHdoYXQgdGhlCisJCSAqIHVzZXIgd2FudHMsIGJ1dCBpbiBvcmRlciB0byAiY3JvcCIgdG8gdGhlIHJpZ2h0IHNpemUsIHdlIG5lZWQgdG8KKwkJICogc2hpZnQgcmlnaHQgZmlyc3QuCisJCSAqLwogCQlzd2l0Y2gobGVuKSB7CiAJCWNhc2UgNDoKIAkJCXJjID0gX19wdXRfdXNlcigodTMyKWRhdGEsICh1MzIgX191c2VyICopdWJ1Zik7CiAJCQlicmVhazsKIAkJY2FzZSAyOgorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJCQlkYXRhID4+PSAxNjsKKyNlbmRpZgogCQkJcmMgPSBfX3B1dF91c2VyKCh1MTYpZGF0YSwgKHUxNiBfX3VzZXIgKil1YnVmKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJCQlkYXRhID4+PSAyNDsKKyNlbmRpZgogCQkJcmMgPSBfX3B1dF91c2VyKCh1OClkYXRhLCAodTggX191c2VyICopdWJ1Zik7CiAJCQlicmVhazsKIAkJfQpAQCAtMjYzLDEyICszMDMsMzEgQEAKIAkJCWVsc2UgaWYgKHRvZG8gPiAxICYmIChwb3MgJiAxKSA9PSAwKQogCQkJCWxlbiA9IDI7CiAJCX0KKworCQkvKgorCQkgKiBTaW1pbGFybHkgdG8gdGhlIHJlYWQgY2FzZSwgd2UgaGF2ZSBzb21lIHRyaWNrZXJ5IGhlcmUgYnV0CisJCSAqIGl0J3MgZGlmZmVyZW50IHRvIGhhbmRsZS4gV2UgbmVlZCB0byBwYXNzIHRoZSB2YWx1ZSB0byBPUEFMIGluCisJCSAqIGEgcmVnaXN0ZXIgd2hvc2UgbGF5b3V0IGRlcGVuZHMgb24gdGhlIGFjY2VzcyBzaXplLiBXZSB3YW50CisJCSAqIHRvIHJlcHJvZHVjZSB0aGUgbWVtb3J5IGxheW91dCBvZiB0aGUgdXNlciwgaG93ZXZlciB3ZSBhcmVuJ3QKKwkJICogZG9pbmcgYSBsb2FkIGZyb20gdXNlciBhbmQgYSBzdG9yZSB0byBhbm90aGVyIG1lbW9yeSBsb2NhdGlvbgorCQkgKiB3aGljaCB3b3VsZCBhY2hpZXZlIHRoYXQuIEhlcmUgd2UgcGFzcyB0aGUgdmFsdWUgdG8gT1BBTCB2aWEKKwkJICogYSByZWdpc3RlciB3aGljaCBpcyBleHBlY3RlZCB0byBjb250YWluIHRoZSAiQkUiIGludGVycHJldGF0aW9uCisJCSAqIG9mIHRoZSBieXRlIHNlcXVlbmNlLiBJRTogZm9yIGEgMzItYml0IGFjY2VzcywgYnl0ZSAwIHNob3VsZCBiZQorCQkgKiBpbiB0aGUgTVNCLiBTbyBoZXJlIHdlICpkbyogbmVlZCB0byBieXRlc3dhcCBvbiBMRS4KKwkJICoKKwkJICogICAgICAgICAgIFVzZXIgYnl0ZXM6ICAgIExFICJkYXRhIiAgT1BBTCAiZGF0YSIKKwkJICogIDMyLWJpdDogIEIwIEIxIEIyIEIzICAgIEIzQjJCMUIwICAgQjBCMUIyQjMKKwkJICogIDE2LWJpdDogIEIwIEIxICAgICAgICAgIDAwMDBCMUIwICAgMDAwMEIwQjEKKwkJICogICA4LWJpdDogIEIwICAgICAgICAgICAgIDAwMDAwMEIwICAgMDAwMDAwQjAKKwkJICovCiAJCXN3aXRjaChsZW4pIHsKIAkJY2FzZSA0OgogCQkJcmMgPSBfX2dldF91c2VyKGRhdGEsICh1MzIgX191c2VyICopdWJ1Zik7CisJCQlkYXRhID0gY3B1X3RvX2JlMzIoZGF0YSk7CiAJCQlicmVhazsKIAkJY2FzZSAyOgogCQkJcmMgPSBfX2dldF91c2VyKGRhdGEsICh1MTYgX191c2VyICopdWJ1Zik7CisJCQlkYXRhID0gY3B1X3RvX2JlMTYoZGF0YSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJjID0gX19nZXRfdXNlcihkYXRhLCAodTggX191c2VyICopdWJ1Zik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1zZW5zb3IuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXNlbnNvci5jCmluZGV4IDEwMjcxYWQuLjRhYjY3ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXNlbnNvci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXNlbnNvci5jCkBAIC0yMCw3ICsyMCw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxhc20vb3BhbC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKIHN0YXRpYyBERUZJTkVfTVVURVgob3BhbF9zZW5zb3JfbXV0ZXgpOwogCkBAIC02NCwzICs2NiwyMSBAQAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvcGFsX2dldF9zZW5zb3JfZGF0YSk7CisKK3N0YXRpYyBfX2luaXQgaW50IG9wYWxfc2Vuc29yX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc2Vuc29yOworCisJc2Vuc29yID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9pYm0sb3BhbC9zZW5zb3JzIik7CisJaWYgKCFzZW5zb3IpIHsKKwkJcHJfZXJyKCJPcGFsIG5vZGUgJ3NlbnNvcnMnIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBkZXYgPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHNlbnNvciwgIm9wYWwtc2Vuc29yIiwgTlVMTCk7CisJb2Zfbm9kZV9wdXQoc2Vuc29yKTsKKworCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocGRldik7Cit9CittYWNoaW5lX3N1YnN5c19pbml0Y2FsbChwb3dlcm52LCBvcGFsX3NlbnNvcl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2ktaW9kYS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmMKaW5kZXggNDY4YTBmMi4uM2JhNDM1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmMKQEAgLTE1MDksNyArMTUwOSw2IEBACiAJCQkJICB1bnNpZ25lZCBpbnQgaXNfNjQsIHN0cnVjdCBtc2lfbXNnICptc2cpCiB7CiAJc3RydWN0IHBudl9pb2RhX3BlICpwZSA9IHBudl9pb2RhX2dldF9wZShkZXYpOwotCXN0cnVjdCBwY2lfZG4gKnBkbiA9IHBjaV9nZXRfcGRuKGRldik7CiAJdW5zaWduZWQgaW50IHhpdmVfbnVtID0gaHdpcnEgLSBwaGItPm1zaV9iYXNlOwogCV9fYmUzMiBkYXRhOwogCWludCByYzsKQEAgLTE1MjMsNyArMTUyMiw3IEBACiAJCXJldHVybiAtRU5YSU87CiAKIAkvKiBGb3JjZSAzMi1iaXQgTVNJIG9uIHNvbWUgYnJva2VuIGRldmljZXMgKi8KLQlpZiAocGRuICYmIHBkbi0+Zm9yY2VfMzJiaXRfbXNpKQorCWlmIChkZXYtPm5vXzY0Yml0X21zaSkKIAkJaXNfNjQgPSAwOwogCiAJLyogQXNzaWduIFhJVkUgdG8gUEUgKi8KQEAgLTE5OTcsNyArMTk5Niw3IEBACiAJaWYgKGlzX2tkdW1wX2tlcm5lbCgpKSB7CiAJCXByX2luZm8oIiAgSXNzdWUgUEhCIHJlc2V0IC4uLlxuIik7CiAJCWlvZGFfZWVoX3BoYl9yZXNldChob3NlLCBFRUhfUkVTRVRfRlVOREFNRU5UQUwpOwotCQlpb2RhX2VlaF9waGJfcmVzZXQoaG9zZSwgT1BBTF9ERUFTU0VSVF9SRVNFVCk7CisJCWlvZGFfZWVoX3BoYl9yZXNldChob3NlLCBFRUhfUkVTRVRfREVBQ1RJVkFURSk7CiAJfQogCiAJLyogQ29uZmlndXJlIE02NCB3aW5kb3cgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYwppbmRleCBiMjE4N2QwLi41NDBmYzZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS5jCkBAIC01MCw3ICs1MCw2IEBACiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KHBkZXYtPmJ1cyk7CiAJc3RydWN0IHBudl9waGIgKnBoYiA9IGhvc2UtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBwY2lfZ2V0X3BkbihwZGV2KTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAlpbnQgaHdpcnE7CkBAIC02MCw3ICs1OSw3IEBACiAJaWYgKFdBUk5fT04oIXBoYikgfHwgIXBoYi0+bXNpX2JtcC5iaXRtYXApCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHBkbiAmJiBwZG4tPmZvcmNlXzMyYml0X21zaSAmJiAhcGhiLT5tc2kzMl9zdXBwb3J0KQorCWlmIChwZGV2LT5ub182NGJpdF9tc2kgJiYgIXBoYi0+bXNpMzJfc3VwcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKQEAgLTkxLDcgKzkwLDcgQEAKIAkJCXJldHVybiByYzsKIAkJfQogCQlpcnFfc2V0X21zaV9kZXNjKHZpcnEsIGVudHJ5KTsKLQkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYwppbmRleCA2YWQ4M2JkLi5jMjJiYjFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCQlCVUdfT04oZ2V0X2NwdV9jdXJyZW50X3N0YXRlKGNwdSkKIAkJCQkJIT0gQ1BVX1NUQVRFX09GRkxJTkUpOwogCQkJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKLQkJCXJjID0gY3B1X3VwKGNwdSk7CisJCQlyYyA9IGRldmljZV9vbmxpbmUoZ2V0X2NwdV9kZXZpY2UoY3B1KSk7CiAJCQlpZiAocmMpCiAJCQkJZ290byBvdXQ7CiAJCQljcHVfbWFwc191cGRhdGVfYmVnaW4oKTsKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCQkJaWYgKGdldF9jcHVfY3VycmVudF9zdGF0ZShjcHUpID09IENQVV9TVEFURV9PTkxJTkUpIHsKIAkJCQlzZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoY3B1LCBDUFVfU1RBVEVfT0ZGTElORSk7CiAJCQkJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKLQkJCQlyYyA9IGNwdV9kb3duKGNwdSk7CisJCQkJcmMgPSBkZXZpY2Vfb2ZmbGluZShnZXRfY3B1X2RldmljZShjcHUpKTsKIAkJCQlpZiAocmMpCiAJCQkJCWdvdG8gb3V0OwogCQkJCWNwdV9tYXBzX3VwZGF0ZV9iZWdpbigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKaW5kZXggOGM1MDlkNS4uZjY4ODBkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8YXNtL3RyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BscGFyX3dyYXBwZXJzLmg+CisjaW5jbHVkZSA8YXNtL2ZhZHVtcC5oPgogCiAjaW5jbHVkZSAicHNlcmllcy5oIgogCkBAIC0yNDcsOCArMjQ4LDE3IEBACiAJfQogCiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLQkvKiBSZXNldCBleGNlcHRpb25zIHRvIGJpZyBlbmRpYW4gKi8KLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9TRVRfTU9ERSkpIHsKKwkvKgorCSAqIFJlc2V0IGV4Y2VwdGlvbnMgdG8gYmlnIGVuZGlhbi4KKwkgKgorCSAqIEZJWE1FIHRoaXMgaXMgYSBoYWNrIGZvciBrZXhlYywgd2UgbmVlZCB0byByZXNldCB0aGUgZXhjZXB0aW9uCisJICogZW5kaWFuIGJlZm9yZSBzdGFydGluZyB0aGUgbmV3IGtlcm5lbCBhbmQgdGhpcyBpcyBhIGNvbnZlbmllbnQgcGxhY2UKKwkgKiB0byBkbyBpdC4KKwkgKgorCSAqIFRoaXMgaXMgYWxzbyBjYWxsZWQgb24gYm9vdCB3aGVuIGEgZmFkdW1wIGhhcHBlbnMuIEluIHRoYXQgY2FzZSB3ZQorCSAqIG11c3Qgbm90IGNoYW5nZSB0aGUgZXhjZXB0aW9uIGVuZGlhbiBtb2RlLgorCSAqLworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1NFVF9NT0RFKSAmJiAhaXNfZmFkdW1wX2FjdGl2ZSgpKSB7CiAJCWxvbmcgcmM7CiAKIAkJcmMgPSBwc2VyaWVzX2JpZ19lbmRpYW5fZXhjZXB0aW9ucygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCmluZGV4IDhhYjVhZGQuLjY5MWExNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKQEAgLTQyMCw3ICs0MjAsNyBAQAogCSAqLwogYWdhaW46CiAJaWYgKHR5cGUgPT0gUENJX0NBUF9JRF9NU0kpIHsKLQkJaWYgKHBkbi0+Zm9yY2VfMzJiaXRfbXNpKSB7CisJCWlmIChwZGV2LT5ub182NGJpdF9tc2kpIHsKIAkJCXJjID0gcnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfMzJNU0lfRk4sIG52ZWMpOwogCQkJaWYgKHJjIDwgMCkgewogCQkJCS8qCkBAIC00NzYsNyArNDc2LDcgQEAKIAkJaXJxX3NldF9tc2lfZGVzYyh2aXJxLCBlbnRyeSk7CiAKIAkJLyogUmVhZCBjb25maWcgc3BhY2UgYmFjayBzbyB3ZSBjYW4gcmVzdG9yZSBhZnRlciByZXNldCAqLwotCQlfX3JlYWRfbXNpX21zZyhlbnRyeSwgJm1zZyk7CisJCV9fcGNpX3JlYWRfbXNpX21zZyhlbnRyeSwgJm1zZyk7CiAJCWVudHJ5LT5tc2cgPSBtc2c7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IGRlNDBiNDguLjdhZWQ4ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC04Miw4ICs4Miw4IEBACiAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBmc2xfbXNpX2NoaXAgPSB7Ci0JLmlycV9tYXNrCT0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrCT0gdW5tYXNrX21zaV9pcnEsCisJLmlycV9tYXNrCT0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzawk9IHBjaV9tc2lfdW5tYXNrX2lycSwKIAkuaXJxX2Fjawk9IGZzbF9tc2lfZW5kX2lycSwKIAkuaXJxX3ByaW50X2NoaXAgPSBmc2xfbXNpX3ByaW50X2NoaXAsCiB9OwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJCWlycV9zZXRfbXNpX2Rlc2ModmlycSwgZW50cnkpOwogCiAJCWZzbF9jb21wb3NlX21zaV9tc2cocGRldiwgaHdpcnEsICZtc2csIG1zaV9kYXRhKTsKLQkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAJfQogCXJldHVybiAwOwogCkBAIC0zNjEsNyArMzYxLDcgQEAKIAljYXNjYWRlX2RhdGEtPnZpcnEgPSB2aXJ0X21zaXI7CiAJbXNpLT5jYXNjYWRlX2FycmF5W2lycV9pbmRleF0gPSBjYXNjYWRlX2RhdGE7CiAKLQlyZXQgPSByZXF1ZXN0X2lycSh2aXJ0X21zaXIsIGZzbF9tc2lfY2FzY2FkZSwgMCwKKwlyZXQgPSByZXF1ZXN0X2lycSh2aXJ0X21zaXIsIGZzbF9tc2lfY2FzY2FkZSwgSVJRRl9OT19USFJFQUQsCiAJCQkgICJmc2wtbXNpLWNhc2NhZGUiLCBjYXNjYWRlX2RhdGEpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdF9pcnEoJWQpLCByZXQgPSAlZFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCmluZGV4IDE1ZGNjZDMuLjQ1YzExNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYwpAQCAtNDIsNyArNDIsNyBAQAogc3RhdGljIHZvaWQgbXBpY19wYXNlbWlfbXNpX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAlwcl9kZWJ1ZygibXBpY19wYXNlbWlfbXNpX21hc2tfaXJxICVkXG4iLCBkYXRhLT5pcnEpOwotCW1hc2tfbXNpX2lycShkYXRhKTsKKwlwY2lfbXNpX21hc2tfaXJxKGRhdGEpOwogCW1waWNfbWFza19pcnEoZGF0YSk7CiB9CiAKQEAgLTUwLDcgKzUwLDcgQEAKIHsKIAlwcl9kZWJ1ZygibXBpY19wYXNlbWlfbXNpX3VubWFza19pcnEgJWRcbiIsIGRhdGEtPmlycSk7CiAJbXBpY191bm1hc2tfaXJxKGRhdGEpOwotCXVubWFza19tc2lfaXJxKGRhdGEpOworCXBjaV9tc2lfdW5tYXNrX2lycShkYXRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGljX3Bhc2VtaV9tc2lfY2hpcCA9IHsKQEAgLTEzNiw3ICsxMzYsNyBAQAogCQkgKiByZWdpc3RlciB0byBnZW5lcmF0ZSBNU0kgWzUxMi4uLjEwMjNdCiAJCSAqLwogCQltc2cuZGF0YSA9IGh3aXJxLTB4MjAwOwotCQl3cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOworCQlwY2lfd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKaW5kZXggNjIzZDdmYi4uMGRmZjFjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiBzdGF0aWMgdm9pZCBtcGljX3UzbXNpX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQltYXNrX21zaV9pcnEoZGF0YSk7CisJcGNpX21zaV9tYXNrX2lycShkYXRhKTsKIAltcGljX21hc2tfaXJxKGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBtcGljX3UzbXNpX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewogCW1waWNfdW5tYXNrX2lycShkYXRhKTsKLQl1bm1hc2tfbXNpX2lycShkYXRhKTsKKwlwY2lfbXNpX3VubWFza19pcnEoZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBpY191M21zaV9jaGlwID0gewpAQCAtMTcxLDcgKzE3MSw3IEBACiAJCXByaW50aygidTNtc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JXgpIGFkZHIgMHglbHhcbiIsCiAJCQkgIHZpcnEsIGh3aXJxLCAodW5zaWduZWQgbG9uZylhZGRyKTsKIAkJbXNnLmRhdGEgPSBod2lycTsKLQkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAKIAkJaHdpcnErKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9oc3RhX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfaHN0YV9tc2kuYwppbmRleCBhNmE0ZGJkLi45MDgxMDVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9oc3RhX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X2hzdGFfbXNpLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAkJCW1zaV9iaXRtYXBfZnJlZV9od2lycXMoJnBwYzR4eF9oc3RhX21zaS5ibXAsIGlycSwgMSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQl3cml0ZV9tc2lfbXNnKGh3aXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2coaHdpcnEsICZtc2cpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9tc2kuYwppbmRleCAyMmI1MjAwLi41MThlYWJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9tc2kuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAKIAkJaXJxX3NldF9tc2lfZGVzYyh2aXJxLCBlbnRyeSk7CiAJCW1zZy5kYXRhID0gaW50X25vOwotCQl3cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOworCQlwY2lfd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNzLW9wYWwuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3Mtb3BhbC5jCmluZGV4IDNjNmVlMWIuLjRiYTU1NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3Mtb3BhbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3Mtb3BhbC5jCkBAIC03Myw3ICs3Myw3IEBACiAJICogYXQgdGhhdCBsZXZlbCwgc28gd2UgZG8gaXQgaGVyZSBieSBoYW5kLgogCSAqLwogCWlmIChkLT5tc2lfZGVzYykKLQkJdW5tYXNrX21zaV9pcnEoZCk7CisJCXBjaV9tc2lfdW5tYXNrX2lycShkKTsKICNlbmRpZgogCiAJLyogdW5tYXNrIGl0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNzLXJ0YXMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3MtcnRhcy5jCmluZGV4IDkzNjU3NWQuLmJjODEzMzViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNzLXJ0YXMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNzLXJ0YXMuYwpAQCAtNzYsNyArNzYsNyBAQAogCSAqIGF0IHRoYXQgbGV2ZWwsIHNvIHdlIGRvIGl0IGhlcmUgYnkgaGFuZC4KIAkgKi8KIAlpZiAoZC0+bXNpX2Rlc2MpCi0JCXVubWFza19tc2lfaXJxKGQpOworCQlwY2lfbXNpX3VubWFza19pcnEoZCk7CiAjZW5kaWYKIAkvKiB1bm1hc2sgaXQgKi8KIAlpY3NfcnRhc191bm1hc2tfaXJxKGQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IGI5ODhiNWEuLmM4ZWZiYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTI5MywxMCArMjkzLDEwIEBACiAJYXJncy50b2tlbiA9IHJ0YXNfdG9rZW4oInNldC1pbmRpY2F0b3IiKTsKIAlpZiAoYXJncy50b2tlbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkKIAkJcmV0dXJuOwotCWFyZ3MubmFyZ3MgPSAzOwotCWFyZ3MubnJldCA9IDE7CisJYXJncy5uYXJncyA9IGNwdV90b19iZTMyKDMpOworCWFyZ3MubnJldCA9IGNwdV90b19iZTMyKDEpOwogCWFyZ3MucmV0cyA9ICZhcmdzLmFyZ3NbM107Ci0JYXJncy5hcmdzWzBdID0gU1VSVkVJTExBTkNFX1RPS0VOOworCWFyZ3MuYXJnc1swXSA9IGNwdV90b19iZTMyKFNVUlZFSUxMQU5DRV9UT0tFTik7CiAJYXJncy5hcmdzWzFdID0gMDsKIAlhcmdzLmFyZ3NbMl0gPSAwOwogCWVudGVyX3J0YXMoX19wYSgmYXJncykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NvbmZpZ3MvZGVmYXVsdF9kZWZjb25maWcgYi9hcmNoL3MzOTAvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZwppbmRleCA5ZDk0ZmRkLi45NDMyZDBmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZwpAQCAtMzUsNyArMzUsNiBAQAogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0JMS19ERVZfSU5URUdSSVRZPXkKIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eQogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiBDT05GSUdfSUJNX1BBUlRJVElPTj15CkBAIC0yNDUsNiArMjQ0LDcgQEAKIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWND1tCiBDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KIENPTkZJR19ORl9UQUJMRVNfQVJQPW0KK0NPTkZJR19ORl9OQVRfSVBWND1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQpAQCAtMjUyLDExICsyNTIsNiBAQAogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfTkZfTkFUX0lQVjQ9bQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC0yNzAsNiArMjY1LDcgQEAKIENPTkZJR19ORl9UQUJMRVNfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjY9bQogQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWNj1tCitDT05GSUdfTkZfTkFUX0lQVjY9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0FIPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQpAQCAtMjg2LDkgKzI4Miw2IEBACiBDT05GSUdfSVA2X05GX01BTkdMRT1tCiBDT05GSUdfSVA2X05GX1JBVz1tCiBDT05GSUdfSVA2X05GX1NFQ1VSSVRZPW0KLUNPTkZJR19ORl9OQVRfSVBWNj1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX05QVD1tCiBDT05GSUdfTkZfVEFCTEVTX0JSSURHRT1tCiBDT05GSUdfTkVUX1NDVFBQUk9CRT1tCiBDT05GSUdfUkRTPW0KQEAgLTM3NCwxNCArMzY3LDEzIEBACiBDT05GSUdfQ0hSX0RFVl9TRz15CiBDT05GSUdfQ0hSX0RFVl9TQ0g9bQogQ09ORklHX1NDU0lfRU5DTE9TVVJFPW0KLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15CiBDT05GSUdfU0NTSV9TUElfQVRUUlM9bQorQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCiBDT05GSUdfU0NTSV9TUlBfQVRUUlM9bQogQ09ORklHX0lTQ1NJX1RDUD1tCi1DT05GSUdfTElCRkNPRT1tCiBDT05GSUdfU0NTSV9ERUJVRz1tCiBDT05GSUdfWkZDUD15CiBDT05GSUdfU0NTSV9WSVJUSU89bQpAQCAtNDI3LDcgKzQxOSw2IEBACiBDT05GSUdfTkxNT049bQogQ09ORklHX1ZIT1NUX05FVD1tCiAjIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0FERU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0NIRUxTSU8gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldApAQCAtNDgxLDE0ICs0NzIsMTQgQEAKIENPTkZJR19KRlNfUE9TSVhfQUNMPXkKIENPTkZJR19KRlNfU0VDVVJJVFk9eQogQ09ORklHX0pGU19TVEFUSVNUSUNTPXkKLUNPTkZJR19YRlNfRlM9bQorQ09ORklHX1hGU19GUz15CiBDT05GSUdfWEZTX1FVT1RBPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKIENPTkZJR19YRlNfUlQ9eQogQ09ORklHX1hGU19ERUJVRz15CiBDT05GSUdfR0ZTMl9GUz1tCiBDT05GSUdfT0NGUzJfRlM9bQotQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GUz15CiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19OSUxGUzJfRlM9bQogQ09ORklHX0ZBTk9USUZZPXkKQEAgLTU3NCw3ICs1NjUsNiBAQAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogQ09ORklHX1RJTUVSX1NUQVRTPXkKIENPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKLUNPTkZJR19SVF9NVVRFWF9URVNURVI9eQogQ09ORklHX0RFQlVHX1dXX01VVEVYX1NMT1dQQVRIPXkKIENPTkZJR19QUk9WRV9MT0NLSU5HPXkKIENPTkZJR19MT0NLX1NUQVQ9eQpAQCAtNjAwLDggKzU5MCwxMyBAQAogQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9TVEFDS1RSQUNFX0ZJTFRFUj15CiBDT05GSUdfTEFURU5DWVRPUD15CiBDT05GSUdfREVCVUdfU1RSSUNUX1VTRVJfQ09QWV9DSEVDS1M9eQorQ09ORklHX0lSUVNPRkZfVFJBQ0VSPXkKK0NPTkZJR19QUkVFTVBUX1RSQUNFUj15CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKK0NPTkZJR19GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX1NUQUNLX1RSQUNFUj15CiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15Ci0jIENPTkZJR19LUFJPQkVfRVZFTlQgaXMgbm90IHNldAorQ09ORklHX1VQUk9CRV9FVkVOVD15CiBDT05GSUdfTEtEVE09bQogQ09ORklHX1RFU1RfTElTVF9TT1JUPXkKIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUPXkKQEAgLTYwOSw3ICs2MDQsMTAgQEAKIENPTkZJR19JTlRFUlZBTF9UUkVFX1RFU1Q9bQogQ09ORklHX1BFUkNQVV9URVNUPW0KIENPTkZJR19BVE9NSUM2NF9TRUxGVEVTVD15CitDT05GSUdfVEVTVF9TVFJJTkdfSEVMUEVSUz15CitDT05GSUdfVEVTVF9LU1RSVE9YPXkKIENPTkZJR19ETUFfQVBJX0RFQlVHPXkKK0NPTkZJR19URVNUX0JQRj1tCiAjIENPTkZJR19TVFJJQ1RfREVWTUVNIGlzIG5vdCBzZXQKIENPTkZJR19TMzkwX1BURFVNUD15CiBDT05GSUdfRU5DUllQVEVEX0tFWVM9bQpAQCAtNjczLDEyICs2NzEsNiBAQAogQ09ORklHX1g1MDlfQ0VSVElGSUNBVEVfUEFSU0VSPW0KIENPTkZJR19DUkM3PW0KIENPTkZJR19DUkM4PW0KLUNPTkZJR19YWl9ERUNfWDg2PXkKLUNPTkZJR19YWl9ERUNfUE9XRVJQQz15Ci1DT05GSUdfWFpfREVDX0lBNjQ9eQotQ09ORklHX1haX0RFQ19BUk09eQotQ09ORklHX1haX0RFQ19BUk1USFVNQj15Ci1DT05GSUdfWFpfREVDX1NQQVJDPXkKIENPTkZJR19DT1JESUM9bQogQ09ORklHX0NNTT1tCiBDT05GSUdfQVBQTERBVEFfQkFTRT15CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY29uZmlncy9nY292X2RlZmNvbmZpZyBiL2FyY2gvczM5MC9jb25maWdzL2djb3ZfZGVmY29uZmlnCmluZGV4IDkwZjUxNGIuLjIxOWRjYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jb25maWdzL2djb3ZfZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9jb25maWdzL2djb3ZfZGVmY29uZmlnCkBAIC0zNSw3ICszNSw2IEBACiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfQkxLX0RFVl9JTlRFR1JJVFk9eQogQ09ORklHX0JMS19ERVZfVEhST1RUTElORz15CiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19JQk1fUEFSVElUSU9OPXkKQEAgLTI0Myw2ICsyNDIsNyBAQAogQ09ORklHX05GVF9DSEFJTl9ST1VURV9JUFY0PW0KIENPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjQ9bQogQ09ORklHX05GX1RBQkxFU19BUlA9bQorQ09ORklHX05GX05BVF9JUFY0PW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCkBAIC0yNTAsMTEgKzI1MCw2IEBACiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19ORl9OQVRfSVBWND1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KQEAgLTI2OCw2ICsyNjMsNyBAQAogQ09ORklHX05GX1RBQkxFU19JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY2PW0KK0NPTkZJR19ORl9OQVRfSVBWNj1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkBAIC0yODQsOSArMjgwLDYgQEAKIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KIENPTkZJR19JUDZfTkZfU0VDVVJJVFk9bQotQ09ORklHX05GX05BVF9JUFY2PW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX01BU1FVRVJBREU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTlBUPW0KIENPTkZJR19ORl9UQUJMRVNfQlJJREdFPW0KIENPTkZJR19ORVRfU0NUUFBST0JFPW0KIENPTkZJR19SRFM9bQpAQCAtMzcxLDE0ICszNjQsMTMgQEAKIENPTkZJR19DSFJfREVWX1NHPXkKIENPTkZJR19DSFJfREVWX1NDSD1tCiBDT05GSUdfU0NTSV9FTkNMT1NVUkU9bQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCitDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KIENPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCiBDT05GSUdfSVNDU0lfVENQPW0KLUNPTkZJR19MSUJGQ09FPW0KIENPTkZJR19TQ1NJX0RFQlVHPW0KIENPTkZJR19aRkNQPXkKIENPTkZJR19TQ1NJX1ZJUlRJTz1tCkBAIC00MjQsNyArNDE2LDYgQEAKIENPTkZJR19OTE1PTj1tCiBDT05GSUdfVkhPU1RfTkVUPW0KICMgQ09ORklHX05FVF9WRU5ET1JfQVJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DQURFTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfQ0hFTFNJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0CkBAIC00NzgsMTMgKzQ2OSwxMyBAQAogQ09ORklHX0pGU19QT1NJWF9BQ0w9eQogQ09ORklHX0pGU19TRUNVUklUWT15CiBDT05GSUdfSkZTX1NUQVRJU1RJQ1M9eQotQ09ORklHX1hGU19GUz1tCitDT05GSUdfWEZTX0ZTPXkKIENPTkZJR19YRlNfUVVPVEE9eQogQ09ORklHX1hGU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19SVD15CiBDT05GSUdfR0ZTMl9GUz1tCiBDT05GSUdfT0NGUzJfRlM9bQotQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GUz15CiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19OSUxGUzJfRlM9bQogQ09ORklHX0ZBTk9USUZZPXkKQEAgLTYyNiwxMiArNjE3LDYgQEAKIENPTkZJR19YNTA5X0NFUlRJRklDQVRFX1BBUlNFUj1tCiBDT05GSUdfQ1JDNz1tCiBDT05GSUdfQ1JDOD1tCi1DT05GSUdfWFpfREVDX1g4Nj15Ci1DT05GSUdfWFpfREVDX1BPV0VSUEM9eQotQ09ORklHX1haX0RFQ19JQTY0PXkKLUNPTkZJR19YWl9ERUNfQVJNPXkKLUNPTkZJR19YWl9ERUNfQVJNVEhVTUI9eQotQ09ORklHX1haX0RFQ19TUEFSQz15CiBDT05GSUdfQ09SRElDPW0KIENPTkZJR19DTU09bQogQ09ORklHX0FQUExEQVRBX0JBU0U9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NvbmZpZ3MvcGVyZm9ybWFuY2VfZGVmY29uZmlnIGIvYXJjaC9zMzkwL2NvbmZpZ3MvcGVyZm9ybWFuY2VfZGVmY29uZmlnCmluZGV4IDEzNTU5ZDMuLjgyMmMyZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jb25maWdzL3BlcmZvcm1hbmNlX2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvY29uZmlncy9wZXJmb3JtYW5jZV9kZWZjb25maWcKQEAgLTMzLDcgKzMzLDYgQEAKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19CTEtfREVWX0lOVEVHUklUWT15CiBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXkKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX0lCTV9QQVJUSVRJT049eQpAQCAtMjQxLDYgKzI0MCw3IEBACiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjQ9bQogQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWND1tCiBDT05GSUdfTkZfVEFCTEVTX0FSUD1tCitDT05GSUdfTkZfTkFUX0lQVjQ9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KQEAgLTI0OCwxMSArMjQ4LDYgQEAKIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX05GX05BVF9JUFY0PW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQpAQCAtMjY2LDYgKzI2MSw3IEBACiBDT05GSUdfTkZfVEFCTEVTX0lQVjY9bQogQ09ORklHX05GVF9DSEFJTl9ST1VURV9JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjY9bQorQ09ORklHX05GX05BVF9JUFY2PW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KQEAgLTI4Miw5ICsyNzgsNiBAQAogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQogQ09ORklHX0lQNl9ORl9TRUNVUklUWT1tCi1DT05GSUdfTkZfTkFUX0lQVjY9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9OUFQ9bQogQ09ORklHX05GX1RBQkxFU19CUklER0U9bQogQ09ORklHX05FVF9TQ1RQUFJPQkU9bQogQ09ORklHX1JEUz1tCkBAIC0zNjksMTQgKzM2MiwxMyBAQAogQ09ORklHX0NIUl9ERVZfU0c9eQogQ09ORklHX0NIUl9ERVZfU0NIPW0KIENPTkZJR19TQ1NJX0VOQ0xPU1VSRT1tCi1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQogQ09ORklHX1NDU0lfU1BJX0FUVFJTPW0KK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKIENPTkZJR19TQ1NJX1NBU19MSUJTQVM9bQogQ09ORklHX1NDU0lfU1JQX0FUVFJTPW0KIENPTkZJR19JU0NTSV9UQ1A9bQotQ09ORklHX0xJQkZDT0U9bQogQ09ORklHX1NDU0lfREVCVUc9bQogQ09ORklHX1pGQ1A9eQogQ09ORklHX1NDU0lfVklSVElPPW0KQEAgLTQyMiw3ICs0MTQsNiBAQAogQ09ORklHX05MTU9OPW0KIENPTkZJR19WSE9TVF9ORVQ9bQogIyBDT05GSUdfTkVUX1ZFTkRPUl9BUkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NBREVOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9DSEVMU0lPIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKQEAgLTQ3NiwxMyArNDY3LDEzIEBACiBDT05GSUdfSkZTX1BPU0lYX0FDTD15CiBDT05GSUdfSkZTX1NFQ1VSSVRZPXkKIENPTkZJR19KRlNfU1RBVElTVElDUz15Ci1DT05GSUdfWEZTX0ZTPW0KK0NPTkZJR19YRlNfRlM9eQogQ09ORklHX1hGU19RVU9UQT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CiBDT05GSUdfWEZTX1JUPXkKIENPTkZJR19HRlMyX0ZTPW0KIENPTkZJR19PQ0ZTMl9GUz1tCi1DT05GSUdfQlRSRlNfRlM9bQorQ09ORklHX0JUUkZTX0ZTPXkKIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQogQ09ORklHX05JTEZTMl9GUz1tCiBDT05GSUdfRkFOT1RJRlk9eQpAQCAtNTUwLDggKzU0MSwxMSBAQAogQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQogQ09ORklHX1JDVV9DUFVfU1RBTExfVElNRU9VVD02MAogQ09ORklHX0xBVEVOQ1lUT1A9eQorQ09ORklHX1NDSEVEX1RSQUNFUj15CitDT05GSUdfRlRSQUNFX1NZU0NBTExTPXkKK0NPTkZJR19TVEFDS19UUkFDRVI9eQogQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQotIyBDT05GSUdfS1BST0JFX0VWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19VUFJPQkVfRVZFTlQ9eQogQ09ORklHX0xLRFRNPW0KIENPTkZJR19QRVJDUFVfVEVTVD1tCiBDT05GSUdfQVRPTUlDNjRfU0VMRlRFU1Q9eQpAQCAtNjE4LDEyICs2MTIsNiBAQAogQ09ORklHX1g1MDlfQ0VSVElGSUNBVEVfUEFSU0VSPW0KIENPTkZJR19DUkM3PW0KIENPTkZJR19DUkM4PW0KLUNPTkZJR19YWl9ERUNfWDg2PXkKLUNPTkZJR19YWl9ERUNfUE9XRVJQQz15Ci1DT05GSUdfWFpfREVDX0lBNjQ9eQotQ09ORklHX1haX0RFQ19BUk09eQotQ09ORklHX1haX0RFQ19BUk1USFVNQj15Ci1DT05GSUdfWFpfREVDX1NQQVJDPXkKIENPTkZJR19DT1JESUM9bQogQ09ORklHX0NNTT1tCiBDT05GSUdfQVBQTERBVEFfQkFTRT15CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY29uZmlncy96ZmNwZHVtcF9kZWZjb25maWcgYi9hcmNoL3MzOTAvY29uZmlncy96ZmNwZHVtcF9kZWZjb25maWcKaW5kZXggZTM3Njc4OS4uOWQ2MzA1MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NvbmZpZ3MvemZjcGR1bXBfZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9jb25maWdzL3pmY3BkdW1wX2RlZmNvbmZpZwpAQCAtMjIsOCArMjIsOCBAQAogQ09ORklHX0NSQVNIX0RVTVA9eQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JVUNWIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQorIyBDT05GSUdfSVVDViBpcyBub3Qgc2V0CiBDT05GSUdfQVRNPXkKIENPTkZJR19BVE1fTEFORT15CiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgpAQCAtMzYsOSArMzYsOSBAQAogQ09ORklHX1NDU0k9eQogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX1NDU0lfRU5DTE9TVVJFPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9TUlBfQVRUUlM9eQogQ09ORklHX1pGQ1A9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldApAQCAtNzUsMTIgKzc1LDYgQEAKIENPTkZJR19SQ1VfQ1BVX1NUQUxMX1RJTUVPVVQ9NjAKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TVFJJQ1RfREVWTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19YWl9ERUNfWDg2PXkKLUNPTkZJR19YWl9ERUNfUE9XRVJQQz15Ci1DT05GSUdfWFpfREVDX0lBNjQ9eQotQ09ORklHX1haX0RFQ19BUk09eQotQ09ORklHX1haX0RFQ19BUk1USFVNQj15Ci1DT05GSUdfWFpfREVDX1NQQVJDPXkKICMgQ09ORklHX1BGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TMzkwX0hZUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9kZWZjb25maWcgYi9hcmNoL3MzOTAvZGVmY29uZmlnCmluZGV4IGZhYjM1YTguLjc4NWM1ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9kZWZjb25maWcKKysrIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwpAQCAtOTIsMTAgKzkyLDEwIEBACiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKIENPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQorQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogQ09ORklHX1pGQ1A9eQogQ09ORklHX1NDU0lfVklSVElPPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKQEAgLTE2NCwxNCArMTY0LDEzIEBACiBDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19WTUFDPW0KIENPTkZJR19DUllQVE9fQ1JDMzI9bQotQ09ORklHX0NSWVBUT19DUkNUMTBESUY9bQogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX1JNRDEyOD1tCiBDT05GSUdfQ1JZUFRPX1JNRDE2MD1tCiBDT05GSUdfQ1JZUFRPX1JNRDI1Nj1tCiBDT05GSUdfQ1JZUFRPX1JNRDMyMD1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggY2Q2YjllZS4uNmFkOTAxMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTEzLDkgKzEzLDEwIEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGNpX2lvLmg+CiAKLXZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgcGh5cyk7CiAjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyIHhsYXRlX2Rldl9tZW1fcHRyCi12b2lkIHVueGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBwaHlzLCB2b2lkICphZGRyKTsKK3ZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IHBoeXMpOworI2RlZmluZSB1bnhsYXRlX2Rldl9tZW1fcHRyIHVueGxhdGVfZGV2X21lbV9wdHIKK3ZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBwaHlzLCB2b2lkICphZGRyKTsKIAogLyoKICAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKQEAgLTYwLDExICs2MSw2IEBACiAjZGVmaW5lIF9fcmF3X3dyaXRlbAl6cGNpX3dyaXRlX3UzMgogI2RlZmluZSBfX3Jhd193cml0ZXEJenBjaV93cml0ZV91NjQKIAotI2RlZmluZSByZWFkYl9yZWxheGVkCXJlYWRiCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQJcmVhZHcKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZAlyZWFkbAotI2RlZmluZSByZWFkcV9yZWxheGVkCXJlYWRxCi0KICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCAzODE1YmZlLi5mNDliNzE5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTIwLDQgKzEyMCwxNSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2Jwcm1fbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworfQorCiAjZW5kaWYgLyogX19TMzkwX01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCmluZGV4IDUxZDE0ZmU1Li5jYTFjYWJiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKQEAgLTEyMSw2ICsxMjEsOCBAQAogewogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50IHRyYWNlOwogCisJaWYgKHVubGlrZWx5KGZ0cmFjZV9ncmFwaF9pc19kZWFkKCkpKQorCQlnb3RvIG91dDsKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKIAkJZ290byBvdXQ7CiAJaXAgPSAoaXAgJiBQU1dfQUREUl9JTlNOKSAtIE1DT1VOVF9JTlNOX1NJWkU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL25taS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwppbmRleCBkZDFjMjRjLi4zZjUxY2Y0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL25taS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKQEAgLTU0LDEyICs1NCw4IEBACiAJICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWxvY2FsX21jY2tfZGlzYWJsZSgpOwotCS8qCi0JICogVW1tbS4uLiBEb2VzIHRoaXMgbWFrZSBzZW5zZSBhdCBhbGw/IENvcHlpbmcgdGhlIHBlcmNwdSBzdHJ1Y3QKLQkgKiBhbmQgdGhlbiB6YXBwaW5nIGl0IG9uZSBzdGF0ZW1lbnQgbGF0ZXI/Ci0JICovCi0JbWVtY3B5KCZtY2NrLCB0aGlzX2NwdV9wdHIoJmNwdV9tY2NrKSwgc2l6ZW9mKG1jY2spKTsKLQltZW1zZXQoJm1jY2ssIDAsIHNpemVvZihzdHJ1Y3QgbWNja19zdHJ1Y3QpKTsKKwltY2NrID0gKnRoaXNfY3B1X3B0cigmY3B1X21jY2spOworCW1lbXNldCh0aGlzX2NwdV9wdHIoJmNwdV9tY2NrKSwgMCwgc2l6ZW9mKG1jY2spKTsKIAljbGVhcl9jcHVfZmxhZyhDSUZfTUNDS19QRU5ESU5HKTsKIAlsb2NhbF9tY2NrX2VuYWJsZSgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzbzMyL2Nsb2NrX2dldHRpbWUuUyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzbzMyL2Nsb2NrX2dldHRpbWUuUwppbmRleCA0OGMyMjA2Li41ZWVjOWFmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Zkc28zMi9jbG9ja19nZXR0aW1lLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvMzIvY2xvY2tfZ2V0dGltZS5TCkBAIC0xOSw2ICsxOSw3IEBACiAJLnR5cGUgIF9fa2VybmVsX2Nsb2NrX2dldHRpbWUsQGZ1bmN0aW9uCiBfX2tlcm5lbF9jbG9ja19nZXR0aW1lOgogCS5jZmlfc3RhcnRwcm9jCisJYWhpCSVyMTUsLTE2CiAJYmFzcgklcjUsMAogMDoJYWwJJXI1LDIxZi0wYiglcjUpCQkJLyogZ2V0ICZfdmRzb19kYXRhICovCiAJY2hpCSVyMixfX0NMT0NLX1JFQUxUSU1FX0NPQVJTRQpAQCAtMzQsOCArMzUsOCBAQAogMToJbAklcjQsX19WRFNPX1VQRF9DT1VOVCs0KCVyNSkJLyogbG9hZCB1cGRhdGUgY291bnRlciAqLwogCXRtbAklcjQsMHgwMDAxCQkJLyogcGVuZGluZyB1cGRhdGUgPyBsb29wICovCiAJam56CTFiCi0Jc3Rja2UJMjQoJXIxNSkJCQkvKiBTdG9yZSBUT0QgY2xvY2sgKi8KLQlsbQklcjAsJXIxLDI1KCVyMTUpCisJc3Rja2UJMCglcjE1KQkJCQkvKiBTdG9yZSBUT0QgY2xvY2sgKi8KKwlsbQklcjAsJXIxLDEoJXIxNSkKIAlzCSVyMCxfX1ZEU09fWFRJTUVfU1RBTVAoJXI1KQkvKiBUT0QgLSBjeWNsZV9sYXN0ICovCiAJc2wJJXIxLF9fVkRTT19YVElNRV9TVEFNUCs0KCVyNSkKIAlicmMJMywyZgpAQCAtNzAsNiArNzEsNyBAQAogODoJc3QJJXIyLDAoJXIzKQkJCS8qIHN0b3JlIHRwLT50dl9zZWMgKi8KIAlzdAklcjEsNCglcjMpCQkJLyogc3RvcmUgdHAtPnR2X25zZWMgKi8KIAlsaGkJJXIyLDAKKwlhaGkJJXIxNSwxNgogCWJyCSVyMTQKIAogCS8qIENMT0NLX01PTk9UT05JQ19DT0FSU0UgKi8KQEAgLTk2LDggKzk4LDggQEAKIDExOglsCSVyNCxfX1ZEU09fVVBEX0NPVU5UKzQoJXI1KQkvKiBsb2FkIHVwZGF0ZSBjb3VudGVyICovCiAJdG1sCSVyNCwweDAwMDEJCQkvKiBwZW5kaW5nIHVwZGF0ZSA/IGxvb3AgKi8KIAlqbnoJMTFiCi0Jc3Rja2UJMjQoJXIxNSkJCQkvKiBTdG9yZSBUT0QgY2xvY2sgKi8KLQlsbQklcjAsJXIxLDI1KCVyMTUpCisJc3Rja2UJMCglcjE1KQkJCQkvKiBTdG9yZSBUT0QgY2xvY2sgKi8KKwlsbQklcjAsJXIxLDEoJXIxNSkKIAlzCSVyMCxfX1ZEU09fWFRJTUVfU1RBTVAoJXI1KQkvKiBUT0QgLSBjeWNsZV9sYXN0ICovCiAJc2wJJXIxLF9fVkRTT19YVElNRV9TVEFNUCs0KCVyNSkKIAlicmMJMywxMmYKQEAgLTEzMiwxMSArMTM0LDEzIEBACiAxNzoJc3QJJXIyLDAoJXIzKQkJCS8qIHN0b3JlIHRwLT50dl9zZWMgKi8KIAlzdAklcjEsNCglcjMpCQkJLyogc3RvcmUgdHAtPnR2X25zZWMgKi8KIAlsaGkJJXIyLDAKKwlhaGkJJXIxNSwxNgogCWJyCSVyMTQKIAogCS8qIEZhbGxiYWNrIHRvIHN5c3RlbSBjYWxsICovCiAxOToJbGhpCSVyMSxfX05SX2Nsb2NrX2dldHRpbWUKIAlzdmMJMAorCWFoaQklcjE1LDE2CiAJYnIJJXIxNAogCiAyMDoJLmxvbmcJMTAwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMgYi9hcmNoL3MzOTAva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUwppbmRleCA2MGRlZjVmLi43MTlkZTYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUwpAQCAtMTksNiArMTksNyBAQAogCS50eXBlICBfX2tlcm5lbF9nZXR0aW1lb2ZkYXksQGZ1bmN0aW9uCiBfX2tlcm5lbF9nZXR0aW1lb2ZkYXk6CiAJLmNmaV9zdGFydHByb2MKKwlhaGkJJXIxNSwtMTYKIAliYXNyCSVyNSwwCiAwOglhbAklcjUsMTNmLTBiKCVyNSkJCQkvKiBnZXQgJl92ZHNvX2RhdGEgKi8KIDE6CWx0cgklcjMsJXIzCQkJCS8qIGNoZWNrIGlmIHR6IGlzIE5VTEwgKi8KQEAgLTI5LDMwICszMCwzMCBAQAogCWwJJXI0LF9fVkRTT19VUERfQ09VTlQrNCglcjUpCS8qIGxvYWQgdXBkYXRlIGNvdW50ZXIgKi8KIAl0bWwJJXI0LDB4MDAwMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLwogCWpuegkxYgotCXN0Y2tlCTI0KCVyMTUpCQkJLyogU3RvcmUgVE9EIGNsb2NrICovCi0JbG0JJXIwLCVyMSwyNSglcjE1KQorCXN0Y2tlCTAoJXIxNSkJCQkJLyogU3RvcmUgVE9EIGNsb2NrICovCisJbG0JJXIwLCVyMSwxKCVyMTUpCiAJcwklcjAsX19WRFNPX1hUSU1FX1NUQU1QKCVyNSkJLyogVE9EIC0gY3ljbGVfbGFzdCAqLwogCXNsCSVyMSxfX1ZEU09fWFRJTUVfU1RBTVArNCglcjUpCiAJYnJjCTMsM2YKIAlhaGkJJXIwLC0xCiAzOgltcwklcjAsX19WRFNPX1RLX01VTFQoJXI1KQkJLyogICogdGstPm11bHQgKi8KLQlzdAklcjAsMjQoJXIxNSkKKwlzdAklcjAsMCglcjE1KQogCWwJJXIwLF9fVkRTT19US19NVUxUKCVyNSkKIAlsdHIJJXIxLCVyMQogCW1yCSVyMCwlcjAKIAlqbm0JNGYKIAlhCSVyMCxfX1ZEU09fVEtfTVVMVCglcjUpCi00OglhbAklcjAsMjQoJXIxNSkKKzQ6CWFsCSVyMCwwKCVyMTUpCiAJYWwJJXIwLF9fVkRTT19YVElNRV9OU0VDKCVyNSkJLyogICsgeHRpbWUgKi8KIAlhbAklcjEsX19WRFNPX1hUSU1FX05TRUMrNCglcjUpCiAJYnJjCTEyLDVmCiAJYWhpCSVyMCwxCi01OgltdmMJMjQoNCwlcjE1KSxfX1ZEU09fWFRJTUVfU0VDKzQoJXI1KQorNToJbXZjCTAoNCwlcjE1KSxfX1ZEU09fWFRJTUVfU0VDKzQoJXI1KQogCWNsCSVyNCxfX1ZEU09fVVBEX0NPVU5UKzQoJXI1KQkvKiBjaGVjayB1cGRhdGUgY291bnRlciAqLwogCWpuZQkxYgogCWwJJXI0LF9fVkRTT19US19TSElGVCglcjUpCS8qIFRpbWVrZWVwZXIgc2hpZnQgKi8KIAlzcmRsCSVyMCwwKCVyNCkJCQkvKiAgPj4gdGstPnNoaWZ0ICovCi0JbAklcjQsMjQoJXIxNSkJCQkvKiBnZXQgdHZfc2VjIGZyb20gc3RhY2sgKi8KKwlsCSVyNCwwKCVyMTUpCQkJLyogZ2V0IHR2X3NlYyBmcm9tIHN0YWNrICovCiAJYmFzcgklcjUsMAogNjoJbHRyCSVyMCwlcjAKIAlqbnoJN2YKQEAgLTcxLDYgKzcyLDcgQEAKIDk6CXNybAklcjAsNgogCXN0CSVyMCw0KCVyMikJCQkvKiBzdG9yZSB0di0+dHZfdXNlYyAqLwogMTA6CXNscgklcjIsJXIyCisJYWhpCSVyMTUsMTYKIAlicgklcjE0CiAxMToJLmxvbmcJMTAwMDAwMDAwMAogMTI6CS5sb25nCTI3NDg3NzkwNwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvNjQvY2xvY2tfZ2V0dGltZS5TIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvNjQvY2xvY2tfZ2V0dGltZS5TCmluZGV4IDlkOTc2MWYuLjc2OTllNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdmRzbzY0L2Nsb2NrX2dldHRpbWUuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3Zkc282NC9jbG9ja19nZXR0aW1lLlMKQEAgLTE5LDYgKzE5LDcgQEAKIAkudHlwZSAgX19rZXJuZWxfY2xvY2tfZ2V0dGltZSxAZnVuY3Rpb24KIF9fa2VybmVsX2Nsb2NrX2dldHRpbWU6CiAJLmNmaV9zdGFydHByb2MKKwlhZ2hpCSVyMTUsLTE2CiAJbGFybAklcjUsX3Zkc29fZGF0YQogCWNnaGkJJXIyLF9fQ0xPQ0tfUkVBTFRJTUVfQ09BUlNFCiAJamUJNGYKQEAgLTM3LDEwICszOCwxMCBAQAogMDoJbGcJJXI0LF9fVkRTT19VUERfQ09VTlQoJXI1KQkvKiBsb2FkIHVwZGF0ZSBjb3VudGVyICovCiAJdG1sbAklcjQsMHgwMDAxCQkJLyogcGVuZGluZyB1cGRhdGUgPyBsb29wICovCiAJam56CTBiCi0Jc3Rja2UJNDgoJXIxNSkJCQkvKiBTdG9yZSBUT0QgY2xvY2sgKi8KKwlzdGNrZQkwKCVyMTUpCQkJCS8qIFN0b3JlIFRPRCBjbG9jayAqLwogCWxnZgklcjIsX19WRFNPX1RLX1NISUZUKCVyNSkJLyogVGltZWtlZXBlciBzaGlmdCAqLwogCWxnCSVyMCxfX1ZEU09fV1RPTV9TRUMoJXI1KQotCWxnCSVyMSw0OSglcjE1KQorCWxnCSVyMSwxKCVyMTUpCiAJc2cJJXIxLF9fVkRTT19YVElNRV9TVEFNUCglcjUpCS8qIFRPRCAtIGN5Y2xlX2xhc3QgKi8KIAltc2dmCSVyMSxfX1ZEU09fVEtfTVVMVCglcjUpCQkvKiAgKiB0ay0+bXVsdCAqLwogCWFsZwklcjEsX19WRFNPX1dUT01fTlNFQyglcjUpCkBAIC01Niw2ICs1Nyw3IEBACiAyOglzdGcJJXIwLDAoJXIzKQkJCS8qIHN0b3JlIHRwLT50dl9zZWMgKi8KIAlzdGcJJXIxLDgoJXIzKQkJCS8qIHN0b3JlIHRwLT50dl9uc2VjICovCiAJbGdoaQklcjIsMAorCWFnaGkJJXIxNSwxNgogCWJyCSVyMTQKIAogCS8qIENMT0NLX01PTk9UT05JQ19DT0FSU0UgKi8KQEAgLTgyLDkgKzg0LDkgQEAKIDU6CWxnCSVyNCxfX1ZEU09fVVBEX0NPVU5UKCVyNSkJLyogbG9hZCB1cGRhdGUgY291bnRlciAqLwogCXRtbGwJJXI0LDB4MDAwMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLwogCWpuegk1YgotCXN0Y2tlCTQ4KCVyMTUpCQkJLyogU3RvcmUgVE9EIGNsb2NrICovCisJc3Rja2UJMCglcjE1KQkJCQkvKiBTdG9yZSBUT0QgY2xvY2sgKi8KIAlsZ2YJJXIyLF9fVkRTT19US19TSElGVCglcjUpCS8qIFRpbWVrZWVwZXIgc2hpZnQgKi8KLQlsZwklcjEsNDkoJXIxNSkKKwlsZwklcjEsMSglcjE1KQogCXNnCSVyMSxfX1ZEU09fWFRJTUVfU1RBTVAoJXI1KQkvKiBUT0QgLSBjeWNsZV9sYXN0ICovCiAJbXNnZgklcjEsX19WRFNPX1RLX01VTFQoJXI1KQkJLyogICogdGstPm11bHQgKi8KIAlhbGcJJXIxLF9fVkRTT19YVElNRV9OU0VDKCVyNSkJLyogICsgdGstPnh0aW1lX25zZWMgKi8KQEAgLTEwMSw2ICsxMDMsNyBAQAogNzoJc3RnCSVyMCwwKCVyMykJCQkvKiBzdG9yZSB0cC0+dHZfc2VjICovCiAJc3RnCSVyMSw4KCVyMykJCQkvKiBzdG9yZSB0cC0+dHZfbnNlYyAqLwogCWxnaGkJJXIyLDAKKwlhZ2hpCSVyMTUsMTYKIAlicgklcjE0CiAKIAkvKiBDTE9DS19USFJFQURfQ1BVVElNRV9JRCBmb3IgdGhpcyB0aHJlYWQgKi8KQEAgLTEzNCwxMSArMTM3LDEzIEBACiAJc2xncgklcjQsJXIwCQkJCS8qIHI0ID0gdHZfbnNlYyAqLwogCXN0ZwklcjQsOCglcjMpCiAJbGdoaQklcjIsMAorCWFnaGkJJXIxNSwxNgogCWJyCSVyMTQKIAogCS8qIEZhbGxiYWNrIHRvIHN5c3RlbSBjYWxsICovCiAxMjoJbGdoaQklcjEsX19OUl9jbG9ja19nZXR0aW1lCiAJc3ZjCTAKKwlhZ2hpCSVyMTUsMTYKIAlicgklcjE0CiAKIDEzOgkucXVhZAkxMDAwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCmluZGV4IDdhMzQ0OTkuLjZjZTQ2NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCkBAIC0xOSw2ICsxOSw3IEBACiAJLnR5cGUgIF9fa2VybmVsX2dldHRpbWVvZmRheSxAZnVuY3Rpb24KIF9fa2VybmVsX2dldHRpbWVvZmRheToKIAkuY2ZpX3N0YXJ0cHJvYworCWFnaGkJJXIxNSwtMTYKIAlsYXJsCSVyNSxfdmRzb19kYXRhCiAwOglsdGdyCSVyMywlcjMJCQkJLyogY2hlY2sgaWYgdHogaXMgTlVMTCAqLwogCWplCTFmCkBAIC0yOCw4ICsyOSw4IEBACiAJbGcJJXI0LF9fVkRTT19VUERfQ09VTlQoJXI1KQkvKiBsb2FkIHVwZGF0ZSBjb3VudGVyICovCiAJdG1sbAklcjQsMHgwMDAxCQkJLyogcGVuZGluZyB1cGRhdGUgPyBsb29wICovCiAJam56CTBiCi0Jc3Rja2UJNDgoJXIxNSkJCQkvKiBTdG9yZSBUT0QgY2xvY2sgKi8KLQlsZwklcjEsNDkoJXIxNSkKKwlzdGNrZQkwKCVyMTUpCQkJCS8qIFN0b3JlIFRPRCBjbG9jayAqLworCWxnCSVyMSwxKCVyMTUpCiAJc2cJJXIxLF9fVkRTT19YVElNRV9TVEFNUCglcjUpCS8qIFRPRCAtIGN5Y2xlX2xhc3QgKi8KIAltc2dmCSVyMSxfX1ZEU09fVEtfTVVMVCglcjUpCQkvKiAgKiB0ay0+bXVsdCAqLwogCWFsZwklcjEsX19WRFNPX1hUSU1FX05TRUMoJXI1KQkvKiAgKyB0ay0+eHRpbWVfbnNlYyAqLwpAQCAtNTAsNiArNTEsNyBAQAogCXNybGcJJXIwLCVyMCw2CiAJc3RnCSVyMCw4KCVyMikJCQkvKiBzdG9yZSB0di0+dHZfdXNlYyAqLwogNDoJbGdoaQklcjIsMAorCWFnaGkJJXIxNSwxNgogCWJyCSVyMTQKIDU6CS5xdWFkCTEwMDAwMDAwMDAKIAkubG9uZwkyNzQ4Nzc5MDcKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYwppbmRleCA0MTZmMmEzLi43ZjAwODlkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92dGltZS5jCkBAIC02Niw3ICs2NiwxMSBAQAogCWNsb2NrID0gUzM5MF9sb3djb3JlLmxhc3RfdXBkYXRlX2Nsb2NrOwogCWFzbSB2b2xhdGlsZSgKIAkJIglzdHB0CSUwXG4iCS8qIFN0b3JlIGN1cnJlbnQgY3B1IHRpbWVyIHZhbHVlICovCisjaWZkZWYgQ09ORklHX0hBVkVfTUFSQ0hfWjlfMTA5X0ZFQVRVUkVTCisJCSIJc3Rja2YJJTEiCS8qIFN0b3JlIGN1cnJlbnQgdG9kIGNsb2NrIHZhbHVlICovCisjZWxzZQogCQkiCXN0Y2sJJTEiCS8qIFN0b3JlIGN1cnJlbnQgdG9kIGNsb2NrIHZhbHVlICovCisjZW5kaWYKIAkJOiAiPW0iIChTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfdGltZXIpLAogCQkgICI9bSIgKFMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV9jbG9jaykpOwogCVMzOTBfbG93Y29yZS5zeXN0ZW1fdGltZXIgKz0gdGltZXIgLSBTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfdGltZXI7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vbWFjY2Vzcy5jIGIvYXJjaC9zMzkwL21tL21hY2Nlc3MuYwppbmRleCAyYTJlMzU0Li4yZWIzNGJkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vbWFjY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9tbS9tYWNjZXNzLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogICogRm9yIHN3YXBwZWQgcHJlZml4IHBhZ2VzIGEgbmV3IGJ1ZmZlciBpcyByZXR1cm5lZCB0aGF0IGNvbnRhaW5zIGEgY29weSBvZgogICogdGhlIGFic29sdXRlIG1lbW9yeS4gVGhlIGJ1ZmZlciBzaXplIGlzIG1heGltdW0gb25lIHBhZ2UgbGFyZ2UuCiAgKi8KLXZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3ZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IGFkZHIpCiB7CiAJdm9pZCAqYm91bmNlID0gKHZvaWQgKikgYWRkcjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CkBAIC0xOTcsNyArMTk3LDcgQEAKIC8qCiAgKiBGcmVlIGNvbnZlcnRlZCBidWZmZXIgZm9yIC9kZXYvbWVtIGFjY2VzcyAoaWYgbmVjZXNzYXJ5KQogICovCi12b2lkIHVueGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWYpCit2b2lkIHVueGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgYWRkciwgdm9pZCAqYnVmKQogewogCWlmICgodm9pZCAqKSBhZGRyICE9IGJ1ZikKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3BjaS9wY2kuYyBiL2FyY2gvczM5MC9wY2kvcGNpLmMKaW5kZXggMmZhN2IxNC4uZDU5YzgyNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL3BjaS9wY2kuYworKysgYi9hcmNoL3MzOTAvcGNpL3BjaS5jCkBAIC01MCw4ICs1MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgenBjaV9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJ6UENJIiwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX21hc2sgPSBwY2lfbXNpX21hc2tfaXJxLAogfTsKIAogc3RhdGljIERFQ0xBUkVfQklUTUFQKHpwY2lfZG9tYWluLCBaUENJX05SX0RFVklDRVMpOwpAQCAtNDAzLDcgKzQwMyw3IEBACiAJCW1zZy5kYXRhID0gaHdpcnE7CiAJCW1zZy5hZGRyZXNzX2xvID0gemRldi0+bXNpX2FkZHIgJiAweGZmZmZmZmZmOwogCQltc2cuYWRkcmVzc19oaSA9IHpkZXYtPm1zaV9hZGRyID4+IDMyOwotCQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAJCWFpcnFfaXZfc2V0X2RhdGEoemRldi0+YWlidiwgaHdpcnEsIGlycSk7CiAJCWh3aXJxKys7CiAJfQpAQCAtNDQ4LDkgKzQ0OCw5IEBACiAJLyogUmVsZWFzZSBNU0kgaW50ZXJydXB0cyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkobXNpLCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKIAkJaWYgKG1zaS0+bXNpX2F0dHJpYi5pc19tc2l4KQotCQkJZGVmYXVsdF9tc2l4X21hc2tfaXJxKG1zaSwgMSk7CisJCQlfX3BjaV9tc2l4X2Rlc2NfbWFza19pcnEobXNpLCAxKTsKIAkJZWxzZQotCQkJZGVmYXVsdF9tc2lfbWFza19pcnEobXNpLCAxLCAxKTsKKwkJCV9fcGNpX21zaV9kZXNjX21hc2tfaXJxKG1zaSwgMSwgMSk7CiAJCWlycV9zZXRfbXNpX2Rlc2MobXNpLT5pcnEsIE5VTEwpOwogCQlpcnFfZnJlZV9kZXNjKG1zaS0+aXJxKTsKIAkJbXNpLT5tc2cuYWRkcmVzc19sbyA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2F0b21pY18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaAppbmRleCA3NjVjMTc3Li4wZTY5YjdlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXRvbWljXzMyLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogaW50IGF0b21pY19hZGRfcmV0dXJuKGludCwgYXRvbWljX3QgKik7CiBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKiwgaW50LCBpbnQpOwotI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKK2ludCBhdG9taWNfeGNoZyhhdG9taWNfdCAqLCBpbnQpOwogaW50IF9fYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKiwgaW50LCBpbnQpOwogdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICosIGludCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKaW5kZXggMzJjMjlhMS4uZDM4YjUyZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKQEAgLTExLDIyICsxMSwxNCBAQAogI2lmbmRlZiBfX0FSQ0hfU1BBUkNfQ01QWENIR19fCiAjZGVmaW5lIF9fQVJDSF9TUEFSQ19DTVBYQ0hHX18KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHhjaGdfdTMyKF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBsb25nICptLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3dhcCBbJTJdLCAlMCIKLQkJCSAgICAgOiAiPSZyIiAodmFsKQotCQkJICAgICA6ICIwIiAodmFsKSwgInIiIChtKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gdmFsOwotfQotCit1bnNpZ25lZCBsb25nIF9feGNoZ191MzIodm9sYXRpbGUgdTMyICptLCB1MzIgbmV3KTsKIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgX192b2xhdGlsZV9fIHZvaWQgKiBwdHIsIGludCBzaXplKQogewogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgNDoKLQkJcmV0dXJuIHhjaGdfdTMyKHB0ciwgeCk7CisJCXJldHVybiBfX3hjaGdfdTMyKHB0ciwgeCk7CiAJfQogCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOwogCXJldHVybiB4OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDViMWI1MmEuLjdlMDY0YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTEyLDYgKzEyLDE0IEBACiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKICNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKIAorc3RhdGljIGlubGluZSB2b2lkIGRtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCS8qIFNpbmNlIGRtYV97YWxsb2MsZnJlZX1fbm9uY29oZXJlbnQoKSBhbGxvY2F0ZWQgY29oZXJlbnQgbWVtb3J5LCB0aGlzCisJICogcm91dGluZSBjYW4gYmUgYSBub3AuCisJICovCit9CisKIGV4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CiBleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICpsZW9uX2RtYV9vcHM7CiBleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzIHBjaTMyX2RtYV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzMyLmgKaW5kZXggOWY1MzI5MC4uNDA3YWMxNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb18zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9fMzIuaApAQCAtNCwxMCArNCw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+ICAvKiBzdHJ1Y3QgcmVzb3VyY2UgKi8KIAotI2RlZmluZSByZWFkYl9yZWxheGVkKF9fYWRkcikJcmVhZGIoX19hZGRyKQotI2RlZmluZSByZWFkd19yZWxheGVkKF9fYWRkcikJcmVhZHcoX19hZGRyKQotI2RlZmluZSByZWFkbF9yZWxheGVkKF9fYWRkcikJcmVhZGwoX19hZGRyKQotCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAogI2RlZmluZSBtZW1zZXRfaW8oZCxjLHN6KSAgICAgX21lbXNldF9pbyhkLGMsc3opCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzY0LmgKaW5kZXggODBiNTRiMy4uOWI2NzJiZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb182NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9fNjQuaApAQCAtMTAxLDYgKzEwMSw3IEBACiAgKiB0aGUgY2FjaGUgYnkgdXNpbmcgQVNJX1BIWVNfQllQQVNTX0VDX0VfTAogICovCiAjZGVmaW5lIHJlYWRiIHJlYWRiCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQgcmVhZGIKIHN0YXRpYyBpbmxpbmUgdTggcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewl1OCByZXQ7CiAKQEAgLTExMiw2ICsxMTMsNyBAQAogfQogCiAjZGVmaW5lIHJlYWR3IHJlYWR3CisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQgcmVhZHcKIHN0YXRpYyBpbmxpbmUgdTE2IHJlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsJdTE2IHJldDsKIApAQCAtMTI0LDYgKzEyNiw3IEBACiB9CiAKICNkZWZpbmUgcmVhZGwgcmVhZGwKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZCByZWFkbAogc3RhdGljIGlubGluZSB1MzIgcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewl1MzIgcmV0OwogCkBAIC0xMzYsNiArMTM5LDcgQEAKIH0KIAogI2RlZmluZSByZWFkcSByZWFkcQorI2RlZmluZSByZWFkcV9yZWxheGVkIHJlYWRxCiBzdGF0aWMgaW5saW5lIHU2NCByZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CXU2NCByZXQ7CiAKQEAgLTE0OCw2ICsxNTIsNyBAQAogfQogCiAjZGVmaW5lIHdyaXRlYiB3cml0ZWIKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQgd3JpdGViCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGViKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGViICovIgpAQCAtMTU3LDYgKzE2Miw3IEBACiB9CiAKICNkZWZpbmUgd3JpdGV3IHdyaXRldworI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXcodTE2IHcsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGV3ICovIgpAQCAtMTY2LDYgKzE3Miw3IEBACiB9CiAKICNkZWZpbmUgd3JpdGVsIHdyaXRlbAorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCB3cml0ZWwKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWwodTMyIGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGVsICovIgpAQCAtMTc1LDYgKzE4Miw3IEBACiB9CiAKICNkZWZpbmUgd3JpdGVxIHdyaXRlcQorI2RlZmluZSB3cml0ZXFfcmVsYXhlZCB3cml0ZXEKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXEodTY0IHEsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGVxICovIgpAQCAtMTgzLDcgKzE5MSw2IEBACiAJCQkgICAgIDogIm1lbW9yeSIpOwogfQogCi0KICNkZWZpbmUgaW5iIGluYgogc3RhdGljIGlubGluZSB1OCBpbmIodW5zaWduZWQgbG9uZyBhZGRyKQogewpAQCAtMjY0LDExICsyNzEsNiBAQAogCW91dHNsKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7CiB9CiAKLSNkZWZpbmUgcmVhZGJfcmVsYXhlZChfX2FkZHIpCXJlYWRiKF9fYWRkcikKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZChfX2FkZHIpCXJlYWR3KF9fYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChfX2FkZHIpCXJlYWRsKF9fYWRkcikKLSNkZWZpbmUgcmVhZHFfcmVsYXhlZChfX2FkZHIpCXJlYWRxKF9fYWRkcikKLQogLyogVmFsaWQgSS9PIFNwYWNlIHJlZ2lvbnMgYXJlIGFueXdoZXJlLCBiZWNhdXNlIGVhY2ggUENJIGJ1cyBzdXBwb3J0ZWQKICAqIGNhbiBsaXZlIGluIGFuIGFyYml0cmFyeSBhcmVhIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc3dhYi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3N3YWIuaAppbmRleCBhMzRhZDA3Li40YzdjMTJkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc3dhYi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zd2FiLmgKQEAgLTksOSArOSw5IEBACiB7CiAJX191MTYgcmV0OwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZHVoYSBbJTFdICUyLCAlMCIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkdWhhIFslMl0gJTMsICUwIgogCQkJICAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BMKSk7CisJCQkgICAgICA6ICJtIiAoKmFkZHIpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QTCkpOwogCXJldHVybiByZXQ7CiB9CiAjZGVmaW5lIF9fYXJjaF9zd2FiMTZwIF9fYXJjaF9zd2FiMTZwCkBAIC0yMCw5ICsyMCw5IEBACiB7CiAJX191MzIgcmV0OwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZHV3YSBbJTFdICUyLCAlMCIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkdXdhIFslMl0gJTMsICUwIgogCQkJICAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BMKSk7CisJCQkgICAgICA6ICJtIiAoKmFkZHIpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QTCkpOwogCXJldHVybiByZXQ7CiB9CiAjZGVmaW5lIF9fYXJjaF9zd2FiMzJwIF9fYXJjaF9zd2FiMzJwCkBAIC0zMSw5ICszMSw5IEBACiB7CiAJX191NjQgcmV0OwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZHhhIFslMV0gJTIsICUwIgorCV9fYXNtX18gX192b2xhdGlsZV9fICgibGR4YSBbJTJdICUzLCAlMCIKIAkJCSAgICAgIDogIj1yIiAocmV0KQotCQkJICAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QTCkpOworCQkJICAgICAgOiAibSIgKCphZGRyKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEwpKTsKIAlyZXR1cm4gcmV0OwogfQogI2RlZmluZSBfX2FyY2hfc3dhYjY0cCBfX2FyY2hfc3dhYjY0cApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX21zaS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX21zaS5jCmluZGV4IDU4MDY1MWEuLjg0ZTE2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9tc2kuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfbXNpLmMKQEAgLTExMSwxMCArMTExLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2lycSA9IHsKIAkubmFtZQkJPSAiUENJLU1TSSIsCi0JLmlycV9tYXNrCT0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrCT0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9lbmFibGUJPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX2Rpc2FibGUJPSBtYXNrX21zaV9pcnEsCisJLmlycV9tYXNrCT0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzawk9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2VuYWJsZQk9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUJPSBwY2lfbXNpX21hc2tfaXJxLAogCS8qIFhYWCBhZmZpbml0eSBYWFggKi8KIH07CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCW1zZy5kYXRhID0gbXNpOwogCiAJaXJxX3NldF9tc2lfZGVzYygqaXJxX3AsIGVudHJ5KTsKLQl3cml0ZV9tc2lfbXNnKCppcnFfcCwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coKmlycV9wLCAmbXNnKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMKaW5kZXggOGY3NmYyMy4uZjljNjgxMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYwpAQCAtNTgxLDcgKzU4MSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBjc3JfcmVnLCBjc3IsIGNzcl9lcnJvcl9iaXRzOwogCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwotCXUxNiBzdGF0OworCXUzMiBzdGF0OwogCiAJY3NyX3JlZyA9IHBibS0+cGJtX3JlZ3MgKyBTQ0hJWk9fUENJX0NUUkw7CiAJY3NyID0gdXBhX3JlYWRxKGNzcl9yZWcpOwpAQCAtNjE3LDcgKzYxNyw3IEBACiAJCQkgICAgICAgcGJtLT5uYW1lKTsKIAkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJfQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBibS0+cGNpX2J1cy0+c2VsZiwgUENJX1NUQVRVUywgJnN0YXQpOworCXBibS0+cGNpX29wcy0+cmVhZChwYm0tPnBjaV9idXMsIDAsIFBDSV9TVEFUVVMsIDIsICZzdGF0KTsKIAlpZiAoc3RhdCAmIChQQ0lfU1RBVFVTX1BBUklUWSB8CiAJCSAgICBQQ0lfU1RBVFVTX1NJR19UQVJHRVRfQUJPUlQgfAogCQkgICAgUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUIHwKQEAgLTYyNSw3ICs2MjUsNyBAQAogCQkgICAgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SKSkgewogCQlwcmludGsoIiVzOiBQQ0kgYnVzIGVycm9yLCBQQ0lfU1RBVFVTWyUwNHhdXG4iLAogCQkgICAgICAgcGJtLT5uYW1lLCBzdGF0KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBibS0+cGNpX2J1cy0+c2VsZiwgUENJX1NUQVRVUywgMHhmZmZmKTsKKwkJcGJtLT5wY2lfb3BzLT53cml0ZShwYm0tPnBjaV9idXMsIDAsIFBDSV9TVEFUVVMsIDIsIDB4ZmZmZik7CiAJCXJldCA9IElSUV9IQU5ETEVEOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCAzMDJjNDc2Li5kYTZmMWE3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtODE2LDEzICs4MTYsMTcgQEAKIHZvaWQgX19pcnFfZW50cnkgc21wX2NhbGxfZnVuY3Rpb25fY2xpZW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWNsZWFyX3NvZnRpbnQoMSA8PCBpcnEpOworCWlycV9lbnRlcigpOwogCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CisJaXJxX2V4aXQoKTsKIH0KIAogdm9pZCBfX2lycV9lbnRyeSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfY2xpZW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWNsZWFyX3NvZnRpbnQoMSA8PCBpcnEpOworCWlycV9lbnRlcigpOwogCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOworCWlycV9leGl0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRzYl9zeW5jKHZvaWQgKmluZm8pCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9hdG9taWMzMi5jIGIvYXJjaC9zcGFyYy9saWIvYXRvbWljMzIuYwppbmRleCBhN2M0MThhLi43MWNkNjVhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9hdG9taWMzMi5jCisrKyBiL2FyY2gvc3BhcmMvbGliL2F0b21pYzMyLmMKQEAgLTQ1LDYgKzQ1LDE5IEBACiAKICN1bmRlZiBBVE9NSUNfT1AKIAoraW50IGF0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbmV3KQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKEFUT01JQ19IQVNIKHYpLCBmbGFncyk7CisJcmV0ID0gdi0+Y291bnRlcjsKKwl2LT5jb3VudGVyID0gbmV3OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQVRPTUlDX0hBU0godiksIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChhdG9taWNfeGNoZyk7CisKIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKIHsKIAlpbnQgcmV0OwpAQCAtMTM3LDMgKzE1MCwxNyBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZylwcmV2OwogfQogRVhQT1JUX1NZTUJPTChfX2NtcHhjaGdfdTMyKTsKKwordW5zaWduZWQgbG9uZyBfX3hjaGdfdTMyKHZvbGF0aWxlIHUzMiAqcHRyLCB1MzIgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHByZXY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShBVE9NSUNfSEFTSChwdHIpLCBmbGFncyk7CisJcHJldiA9ICpwdHI7CisJKnB0ciA9IG5ldzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKEFUT01JQ19IQVNIKHB0ciksIGZsYWdzKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZylwcmV2OworfQorRVhQT1JUX1NZTUJPTChfX3hjaGdfdTMyKTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggOWZlNDM0OS4uZDM3MjY0MSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTI0MSw2ICsyNDEsMTAgQEAKICNkZWZpbmUgcmVhZHdfcmVsYXhlZCByZWFkdwogI2RlZmluZSByZWFkbF9yZWxheGVkIHJlYWRsCiAjZGVmaW5lIHJlYWRxX3JlbGF4ZWQgcmVhZHEKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQgd3JpdGViCisjZGVmaW5lIHdyaXRld19yZWxheGVkIHdyaXRldworI2RlZmluZSB3cml0ZWxfcmVsYXhlZCB3cml0ZWwKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQgd3JpdGVxCiAKICNkZWZpbmUgaW9yZWFkOCByZWFkYgogI2RlZmluZSBpb3JlYWQxNiByZWFkdwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9wY2lfZ3guYyBiL2FyY2gvdGlsZS9rZXJuZWwvcGNpX2d4LmMKaW5kZXggZTM5ZjljNS4uZTcxN2FmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvcGNpX2d4LmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9wY2lfZ3guYwpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGlsZWd4X21zaV9zdGFydHVwKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpZiAoZC0+bXNpX2Rlc2MpCi0JCXVubWFza19tc2lfaXJxKGQpOworCQlwY2lfbXNpX3VubWFza19pcnEoZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NjUsMTQgKzE0NjUsMTQgQEAKIAogc3RhdGljIHZvaWQgdGlsZWd4X21zaV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQltYXNrX21zaV9pcnEoZCk7CisJcGNpX21zaV9tYXNrX2lycShkKTsKIAlfX2luc25fbXRzcHIoU1BSX0lQSV9NQVNLX1NFVF9LLCAxVUwgPDwgZC0+aXJxKTsKIH0KIAogc3RhdGljIHZvaWQgdGlsZWd4X21zaV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCV9faW5zbl9tdHNwcihTUFJfSVBJX01BU0tfUkVTRVRfSywgMVVMIDw8IGQtPmlycSk7Ci0JdW5tYXNrX21zaV9pcnEoZCk7CisJcGNpX21zaV91bm1hc2tfaXJxKGQpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRpbGVneF9tc2lfY2hpcCA9IHsKQEAgLTE1OTAsNyArMTU5MCw3IEBACiAJbXNnLmFkZHJlc3NfaGkgPSBtc2lfYWRkciA+PiAzMjsKIAltc2cuYWRkcmVzc19sbyA9IG1zaV9hZGRyICYgMHhmZmZmZmZmZjsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZ0aWxlZ3hfbXNpX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOwogCWlycV9zZXRfaGFuZGxlcl9kYXRhKGlycSwgY29udHJvbGxlcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBhYTRhNzQzLi45NDE1MjdlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xMCw3ICsxMCwyNiBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogZXh0ZXJuIHZvaWQgdW1sX3NldHVwX3N0dWJzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKy8qCisgKiBOZWVkZWQgc2luY2Ugd2UgZG8gbm90IHVzZSB0aGUgYXNtLWdlbmVyaWMvbW1faG9va3MuaDoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVtbF9zZXR1cF9zdHVicyhtbSk7Cit9CiBleHRlcm4gdm9pZCBhcmNoX2V4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9icHJtX21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKK30KKy8qCisgKiBlbmQgYXNtLWdlbmVyaWMvbW1faG9va3MuaCBmdW5jdGlvbnMKKyAqLwogCiAjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCiAKQEAgLTQxLDExICs2MCw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JdW1sX3NldHVwX3N0dWJzKG1tKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAKIAkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggZWY0NzBhNy4uMWNiNTIyMCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC04Niw0ICs4NiwxNSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2Jwcm1fbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGRlZDhhNjcuLmJlYTNhMDE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiBjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gUEVSRl9FVkVOVFMgJiYgU1VQX1NVUF9JTlRFTCAmJiBQQ0kKKwlkZXBlbmRzIG9uIFBFUkZfRVZFTlRTICYmIENQVV9TVVBfSU5URUwgJiYgUENJCiAKIGNvbmZpZyBPVVRQVVRfRk9STUFUCiAJc3RyaW5nCkBAIC0yNDgsNiArMjQ4LDEwIEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gSU5URUxfSU9NTVUgJiYgQUNQSQogCitjb25maWcgWDg2X0lOVEVMX01QWAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENQVV9TVVBfSU5URUwKKwogY29uZmlnIFg4Nl8zMl9TTVAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgU01QCkBAIC05ODgsNiArOTkyLDI0IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gWDg2XzE2QklUICYmIFg4Nl82NAogCitjb25maWcgWDg2X1ZTWVNDQUxMX0VNVUxBVElPTgorICAgICAgIGJvb2wgIkVuYWJsZSB2c3lzY2FsbCBlbXVsYXRpb24iIGlmIEVYUEVSVAorICAgICAgIGRlZmF1bHQgeQorICAgICAgIGRlcGVuZHMgb24gWDg2XzY0CisgICAgICAgLS0taGVscC0tLQorCSBUaGlzIGVuYWJsZXMgZW11bGF0aW9uIG9mIHRoZSBsZWdhY3kgdnN5c2NhbGwgcGFnZS4gIERpc2FibGluZworCSBpdCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYm9vdGluZyB3aXRoIHZzeXNjYWxsPW5vbmUsIGV4Y2VwdAorCSB0aGF0IGl0IHdpbGwgYWxzbyBkaXNhYmxlIHRoZSBoZWxwZnVsIHdhcm5pbmcgaWYgYSBwcm9ncmFtCisJIHRyaWVzIHRvIHVzZSBhIHZzeXNjYWxsLiAgV2l0aCB0aGlzIG9wdGlvbiBzZXQgdG8gTiwgb2ZmZW5kaW5nCisJIHByb2dyYW1zIHdpbGwganVzdCBzZWdmYXVsdCwgY2l0aW5nIGFkZHJlc3NlcyBvZiB0aGUgZm9ybQorCSAweGZmZmZmZmZmZmY2MDA/MDAuCisKKwkgVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQgYnkgbWFueSBwcm9ncmFtcyBidWlsdCBiZWZvcmUgMjAxMywgYW5kCisJIGNhcmUgc2hvdWxkIGJlIHVzZWQgZXZlbiB3aXRoIG5ld2VyIHByb2dyYW1zIGlmIHNldCB0byBOLgorCisJIERpc2FibGluZyB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3SyBvZiBrZXJuZWwgc2l6ZSBhbmQKKwkgcG9zc2libHkgNEsgb2YgYWRkaXRpb25hbCBydW50aW1lIHBhZ2V0YWJsZSBtZW1vcnkuCisKIGNvbmZpZyBUT1NISUJBCiAJdHJpc3RhdGUgIlRvc2hpYmEgTGFwdG9wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBYODZfMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA3MDRmNThhLi5kOTk5Mzk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0zLDYgKzMsMTggQEAKICMKICMgY3JlYXRlIGEgY29tcHJlc3NlZCB2bWxpbnV4IGltYWdlIGZyb20gdGhlIG9yaWdpbmFsIHZtbGludXgKICMKKyMgdm1saW51eiBpczoKKyMJZGVjb21wcmVzc2lvbiBjb2RlICgqLm8pCisjCWFzbSBnbG9iYWxzIChwaWdneS5TKSwgaW5jbHVkaW5nOgorIwkJdm1saW51eC5iaW4uKGd6fGJ6Mnxsem1hfC4uLikKKyMKKyMgdm1saW51eC5iaW4gaXM6CisjCXZtbGludXggc3RyaXBwZWQgb2YgZGVidWdnaW5nIGFuZCBjb21tZW50cworIyB2bWxpbnV4LmJpbi5hbGwgaXM6CisjCXZtbGludXguYmluICsgdm1saW51eC5yZWxvY3MKKyMgdm1saW51eC5iaW4uKGd6fGJ6Mnxsem1hfC4uLikgaXM6CisjCShzZWUgc2NyaXB0cy9NYWtlZmlsZS5saWIgc2l6ZV9hcHBlbmQpCisjCWNvbXByZXNzZWQgdm1saW51eC5iaW4uYWxsICsgdTMyIHNpemUgb2Ygdm1saW51eC5iaW4uYWxsCiAKIHRhcmdldHMgOj0gdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSBcCiAJdm1saW51eC5iaW4ueHogdm1saW51eC5iaW4ubHpvIHZtbGludXguYmluLmx6NApAQCAtMzUsNyArNDcsOCBAQAogCiAkKG9iaikvZWJvb3QubzogS0JVSUxEX0NGTEFHUyArPSAtZnNob3J0LXdjaGFyIC1tbm8tcmVkLXpvbmUKIAotdm1saW51eC1vYmpzLSQoQ09ORklHX0VGSV9TVFVCKSArPSAkKG9iaikvZWJvb3QubyAkKG9iaikvZWZpX3N0dWJfJChCSVRTKS5vCit2bWxpbnV4LW9ianMtJChDT05GSUdfRUZJX1NUVUIpICs9ICQob2JqKS9lYm9vdC5vICQob2JqKS9lZmlfc3R1Yl8kKEJJVFMpLm8gXAorCSQob2JqdHJlZSkvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9saWIuYQogCiAkKG9iaikvdm1saW51eDogJCh2bWxpbnV4LW9ianMteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKQEAgLTc2LDggKzg5LDEwIEBACiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTykgCTo9IGx6bwogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWjQpIAk6PSBsejQKIAorUlVOX1NJWkUgPSAkKHNoZWxsICQoT0JKRFVNUCkgLWggdm1saW51eCB8IFwKKwkgICAgIHBlcmwgJChzcmN0cmVlKS9hcmNoL3g4Ni90b29scy9jYWxjX3J1bl9zaXplLnBsKQogcXVpZXRfY21kX21rcGlnZ3kgPSBNS1BJR0dZICRACi0gICAgICBjbWRfbWtwaWdneSA9ICQob2JqKS9ta3BpZ2d5ICQ8ID4gJEAgfHwgKCBybSAtZiAkQCA7IGZhbHNlICkKKyAgICAgIGNtZF9ta3BpZ2d5ID0gJChvYmopL21rcGlnZ3kgJDwgJChSVU5fU0laRSkgPiAkQCB8fCAoIHJtIC1mICRAIDsgZmFsc2UgKQogCiB0YXJnZXRzICs9IHBpZ2d5LlMKICQob2JqKS9waWdneS5TOiAkKG9iaikvdm1saW51eC5iaW4uJChzdWZmaXgteSkgJChvYmopL21rcGlnZ3kgRk9SQ0UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vib290LmMKaW5kZXggMWFjZjYwNS4uOTJiOWE1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vib290LmMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vib290LmMKQEAgLTIxLDggKzIxLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZWZpX2NvbmZpZyAqZWZpX2Vhcmx5OwogCi0jZGVmaW5lIGVmaV9jYWxsX2Vhcmx5KGYsIC4uLikJCQkJCQlcCi0JZWZpX2Vhcmx5LT5jYWxsKGVmaV9lYXJseS0+ZiwgX19WQV9BUkdTX18pOworX19wdXJlIGNvbnN0IHN0cnVjdCBlZmlfY29uZmlnICpfX2VmaV9lYXJseSh2b2lkKQoreworCXJldHVybiBlZmlfZWFybHk7Cit9CiAKICNkZWZpbmUgQk9PVF9TRVJWSUNFUyhiaXRzKQkJCQkJCVwKIHN0YXRpYyB2b2lkIHNldHVwX2Jvb3Rfc2VydmljZXMjI2JpdHMoc3RydWN0IGVmaV9jb25maWcgKmMpCQlcCkBAIC0yODUsOCArMjg3LDYgQEAKIAl9CiB9CiAKLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIgotCiBzdGF0aWMgdm9pZCBmaW5kX2JpdHModW5zaWduZWQgbG9uZyBtYXNrLCB1OCAqcG9zLCB1OCAqc2l6ZSkKIHsKIAl1OCBmaXJzdCwgbGVuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vib290LmggYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3QuaAppbmRleCBjODhjMzFlLi5kNDg3ZTcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3QuaAorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3QuaApAQCAtMTAzLDIwICsxMDMsNCBAQAogCXZvaWQgKmJsdDsKIH07CiAKLXN0cnVjdCBlZmlfY29uZmlnIHsKLQl1NjQgaW1hZ2VfaGFuZGxlOwotCXU2NCB0YWJsZTsKLQl1NjQgYWxsb2NhdGVfcG9vbDsKLQl1NjQgYWxsb2NhdGVfcGFnZXM7Ci0JdTY0IGdldF9tZW1vcnlfbWFwOwotCXU2NCBmcmVlX3Bvb2w7Ci0JdTY0IGZyZWVfcGFnZXM7Ci0JdTY0IGxvY2F0ZV9oYW5kbGU7Ci0JdTY0IGhhbmRsZV9wcm90b2NvbDsKLQl1NjQgZXhpdF9ib290X3NlcnZpY2VzOwotCXU2NCB0ZXh0X291dHB1dDsKLQllZmlfc3RhdHVzX3QgKCpjYWxsKSh1bnNpZ25lZCBsb25nLCAuLi4pOwotCWJvb2wgaXM2NDsKLX0gX19wYWNrZWQ7Ci0KICNlbmRpZiAvKiBCT09UX0NPTVBSRVNTRURfRUJPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKaW5kZXggY2JlZDE0MC4uMWQ3ZmJiYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCkBAIC0yMDcsNyArMjA3LDggQEAKICAqIERvIHRoZSBkZWNvbXByZXNzaW9uLCBhbmQganVtcCB0byB0aGUgbmV3IGtlcm5lbC4uCiAgKi8KIAkJCQkvKiBwdXNoIGFyZ3VtZW50cyBmb3IgZGVjb21wcmVzc19rZXJuZWw6ICovCi0JcHVzaGwJJHpfb3V0cHV0X2xlbgkvKiBkZWNvbXByZXNzZWQgbGVuZ3RoICovCisJcHVzaGwJJHpfcnVuX3NpemUJLyogc2l6ZSBvZiBrZXJuZWwgd2l0aCAuYnNzIGFuZCAuYnJrICovCisJcHVzaGwJJHpfb3V0cHV0X2xlbgkvKiBkZWNvbXByZXNzZWQgbGVuZ3RoLCBlbmQgb2YgcmVsb2NzICovCiAJbGVhbAl6X2V4dHJhY3Rfb2Zmc2V0X25lZ2F0aXZlKCVlYngpLCAlZWJwCiAJcHVzaGwJJWVicAkJLyogb3V0cHV0IGFkZHJlc3MgKi8KIAlwdXNobAkkel9pbnB1dF9sZW4JLyogaW5wdXRfbGVuICovCkBAIC0yMTcsNyArMjE4LDcgQEAKIAlwdXNobAklZWF4CQkvKiBoZWFwIGFyZWEgKi8KIAlwdXNobAklZXNpCQkvKiByZWFsIG1vZGUgcG9pbnRlciAqLwogCWNhbGwJZGVjb21wcmVzc19rZXJuZWwgLyogcmV0dXJucyBrZXJuZWwgbG9jYXRpb24gaW4gJWVheCAqLwotCWFkZGwJJDI0LCAlZXNwCisJYWRkbAkkMjgsICVlc3AKIAogLyoKICAqIEp1bXAgdG8gdGhlIGRlY29tcHJlc3NlZCBrZXJuZWwuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUwppbmRleCAyODg0ZTBjLi42YjE3NjZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKQEAgLTQwMiwxMyArNDAyLDE2IEBACiAgKiBEbyB0aGUgZGVjb21wcmVzc2lvbiwgYW5kIGp1bXAgdG8gdGhlIG5ldyBrZXJuZWwuLgogICovCiAJcHVzaHEJJXJzaQkJCS8qIFNhdmUgdGhlIHJlYWwgbW9kZSBhcmd1bWVudCAqLworCW1vdnEJJHpfcnVuX3NpemUsICVyOQkvKiBzaXplIG9mIGtlcm5lbCB3aXRoIC5ic3MgYW5kIC5icmsgKi8KKwlwdXNocQklcjkKIAltb3ZxCSVyc2ksICVyZGkJCS8qIHJlYWwgbW9kZSBhZGRyZXNzICovCiAJbGVhcQlib290X2hlYXAoJXJpcCksICVyc2kJLyogbWFsbG9jIGFyZWEgZm9yIHVuY29tcHJlc3Npb24gKi8KIAlsZWFxCWlucHV0X2RhdGEoJXJpcCksICVyZHggIC8qIGlucHV0X2RhdGEgKi8KIAltb3ZsCSR6X2lucHV0X2xlbiwgJWVjeAkvKiBpbnB1dF9sZW4gKi8KIAltb3ZxCSVyYnAsICVyOAkJLyogb3V0cHV0IHRhcmdldCBhZGRyZXNzICovCi0JbW92cQkkel9vdXRwdXRfbGVuLCAlcjkJLyogZGVjb21wcmVzc2VkIGxlbmd0aCAqLworCW1vdnEJJHpfb3V0cHV0X2xlbiwgJXI5CS8qIGRlY29tcHJlc3NlZCBsZW5ndGgsIGVuZCBvZiByZWxvY3MgKi8KIAljYWxsCWRlY29tcHJlc3Nfa2VybmVsCS8qIHJldHVybnMga2VybmVsIGxvY2F0aW9uIGluICVyYXggKi8KKwlwb3BxCSVyOQogCXBvcHEJJXJzaQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggNTdhYjc0ZC4uZGNjMWM1MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAogCS8qCiAJICogUHJvY2VzcyByZWxvY2F0aW9uczogMzIgYml0IHJlbG9jYXRpb25zIGZpcnN0IHRoZW4gNjQgYml0IGFmdGVyLgotCSAqIFR3byBzZXRzIG9mIGJpbmFyeSByZWxvY2F0aW9ucyBhcmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUga2VybmVsCisJICogVGhyZWUgc2V0cyBvZiBiaW5hcnkgcmVsb2NhdGlvbnMgYXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGtlcm5lbAogCSAqIGJlZm9yZSBjb21wcmVzc2lvbi4gRWFjaCByZWxvY2F0aW9uIHRhYmxlIGVudHJ5IGlzIHRoZSBrZXJuZWwKIAkgKiBhZGRyZXNzIG9mIHRoZSBsb2NhdGlvbiB3aGljaCBuZWVkcyB0byBiZSB1cGRhdGVkIHN0b3JlZCBhcyBhCiAJICogMzItYml0IHZhbHVlIHdoaWNoIGlzIHNpZ24gZXh0ZW5kZWQgdG8gNjQgYml0cy4KQEAgLTI3MCw2ICsyNzAsOCBAQAogCSAqIGtlcm5lbCBiaXRzLi4uCiAJICogMCAtIHplcm8gdGVybWluYXRvciBmb3IgNjQgYml0IHJlbG9jYXRpb25zCiAJICogNjQgYml0IHJlbG9jYXRpb24gcmVwZWF0ZWQKKwkgKiAwIC0gemVybyB0ZXJtaW5hdG9yIGZvciBpbnZlcnNlIDMyIGJpdCByZWxvY2F0aW9ucworCSAqIDMyIGJpdCBpbnZlcnNlIHJlbG9jYXRpb24gcmVwZWF0ZWQKIAkgKiAwIC0gemVybyB0ZXJtaW5hdG9yIGZvciAzMiBiaXQgcmVsb2NhdGlvbnMKIAkgKiAzMiBiaXQgcmVsb2NhdGlvbiByZXBlYXRlZAogCSAqCkBAIC0yODYsNiArMjg4LDE2IEBACiAJCSoodWludDMyX3QgKilwdHIgKz0gZGVsdGE7CiAJfQogI2lmZGVmIENPTkZJR19YODZfNjQKKwl3aGlsZSAoKi0tcmVsb2MpIHsKKwkJbG9uZyBleHRlbmRlZCA9ICpyZWxvYzsKKwkJZXh0ZW5kZWQgKz0gbWFwOworCisJCXB0ciA9ICh1bnNpZ25lZCBsb25nKWV4dGVuZGVkOworCQlpZiAocHRyIDwgbWluX2FkZHIgfHwgcHRyID4gbWF4X2FkZHIpCisJCQllcnJvcigiaW52ZXJzZSAzMi1iaXQgcmVsb2NhdGlvbiBvdXRzaWRlIG9mIGtlcm5lbCFcbiIpOworCisJCSooaW50MzJfdCAqKXB0ciAtPSBkZWx0YTsKKwl9CiAJZm9yIChyZWxvYy0tOyAqcmVsb2M7IHJlbG9jLS0pIHsKIAkJbG9uZyBleHRlbmRlZCA9ICpyZWxvYzsKIAkJZXh0ZW5kZWQgKz0gbWFwOwpAQCAtMzU4LDcgKzM3MCw4IEBACiAJCQkJICB1bnNpZ25lZCBjaGFyICppbnB1dF9kYXRhLAogCQkJCSAgdW5zaWduZWQgbG9uZyBpbnB1dF9sZW4sCiAJCQkJICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCi0JCQkJICB1bnNpZ25lZCBsb25nIG91dHB1dF9sZW4pCisJCQkJICB1bnNpZ25lZCBsb25nIG91dHB1dF9sZW4sCisJCQkJICB1bnNpZ25lZCBsb25nIHJ1bl9zaXplKQogewogCXJlYWxfbW9kZSA9IHJtb2RlOwogCkBAIC0zODEsOCArMzk0LDE0IEBACiAJZnJlZV9tZW1fcHRyICAgICA9IGhlYXA7CS8qIEhlYXAgKi8KIAlmcmVlX21lbV9lbmRfcHRyID0gaGVhcCArIEJPT1RfSEVBUF9TSVpFOwogCi0Jb3V0cHV0ID0gY2hvb3NlX2tlcm5lbF9sb2NhdGlvbihpbnB1dF9kYXRhLCBpbnB1dF9sZW4sCi0JCQkJCW91dHB1dCwgb3V0cHV0X2xlbik7CisJLyoKKwkgKiBUaGUgbWVtb3J5IGhvbGUgbmVlZGVkIGZvciB0aGUga2VybmVsIGlzIHRoZSBsYXJnZXIgb2YgZWl0aGVyCisJICogdGhlIGVudGlyZSBkZWNvbXByZXNzZWQga2VybmVsIHBsdXMgcmVsb2NhdGlvbiB0YWJsZSwgb3IgdGhlCisJICogZW50aXJlIGRlY29tcHJlc3NlZCBrZXJuZWwgcGx1cyAuYnNzIGFuZCAuYnJrIHNlY3Rpb25zLgorCSAqLworCW91dHB1dCA9IGNob29zZV9rZXJuZWxfbG9jYXRpb24oaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBvdXRwdXQsCisJCQkJCW91dHB1dF9sZW4gPiBydW5fc2l6ZSA/IG91dHB1dF9sZW4KKwkJCQkJCQkgICAgICA6IHJ1bl9zaXplKTsKIAogCS8qIFZhbGlkYXRlIG1lbW9yeSBsb2NhdGlvbiBjaG9pY2VzLiAqLwogCWlmICgodW5zaWduZWQgbG9uZylvdXRwdXQgJiAoTUlOX0tFUk5FTF9BTElHTiAtIDEpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21rcGlnZ3kuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9ta3BpZ2d5LmMKaW5kZXggYjY2OWFiNi4uZDgyMjJmMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21rcGlnZ3kuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWtwaWdneS5jCkBAIC0zNiwxMSArMzYsMTMgQEAKIAl1aW50MzJfdCBvbGVuOwogCWxvbmcgaWxlbjsKIAl1bnNpZ25lZCBsb25nIG9mZnM7CisJdW5zaWduZWQgbG9uZyBydW5fc2l6ZTsKIAlGSUxFICpmID0gTlVMTDsKIAlpbnQgcmV0dmFsID0gMTsKIAotCWlmIChhcmdjIDwgMikgewotCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBjb21wcmVzc2VkX2ZpbGVcbiIsIGFyZ3ZbMF0pOworCWlmIChhcmdjIDwgMykgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBjb21wcmVzc2VkX2ZpbGUgcnVuX3NpemVcbiIsCisJCQkJYXJndlswXSk7CiAJCWdvdG8gYmFpbDsKIAl9CiAKQEAgLTc0LDYgKzc2LDcgQEAKIAlvZmZzICs9IG9sZW4gPj4gMTI7CS8qIEFkZCA4IGJ5dGVzIGZvciBlYWNoIDMySyBibG9jayAqLwogCW9mZnMgKz0gNjQqMTAyNCArIDEyODsJLyogQWRkIDY0SyArIDEyOCBieXRlcyBzbGFjayAqLwogCW9mZnMgPSAob2Zmcys0MDk1KSAmIH40MDk1OyAvKiBSb3VuZCB0byBhIDRLIGJvdW5kYXJ5ICovCisJcnVuX3NpemUgPSBhdG9pKGFyZ3ZbMl0pOwogCiAJcHJpbnRmKCIuc2VjdGlvbiBcIi5yb2RhdGEuLmNvbXByZXNzZWRcIixcImFcIixAcHJvZ2JpdHNcbiIpOwogCXByaW50ZigiLmdsb2JsIHpfaW5wdXRfbGVuXG4iKTsKQEAgLTg1LDYgKzg4LDggQEAKIAkvKiB6X2V4dHJhY3Rfb2Zmc2V0X25lZ2F0aXZlIGFsbG93cyBzaW1wbGlmaWNhdGlvbiBvZiBoZWFkXzMyLlMgKi8KIAlwcmludGYoIi5nbG9ibCB6X2V4dHJhY3Rfb2Zmc2V0X25lZ2F0aXZlXG4iKTsKIAlwcmludGYoInpfZXh0cmFjdF9vZmZzZXRfbmVnYXRpdmUgPSAtMHglbHhcbiIsIG9mZnMpOworCXByaW50ZigiLmdsb2JsIHpfcnVuX3NpemVcbiIpOworCXByaW50Zigiel9ydW5fc2l6ZSA9ICVsdVxuIiwgcnVuX3NpemUpOwogCiAJcHJpbnRmKCIuZ2xvYmwgaW5wdXRfZGF0YSwgaW5wdXRfZGF0YV9lbmRcbiIpOwogCXByaW50ZigiaW5wdXRfZGF0YTpcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKaW5kZXggMzJkMmU3MC4uNDE5ODE5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZworKysgYi9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCkBAIC04LDYgKzgsNyBAQAogQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CiBDT05GSUdfVEFTS19YQUNDVD15CiBDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKK0NPTkZJR19GSEFORExFPXkKIENPTkZJR19BVURJVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcgYi9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKaW5kZXggYTQ4MWRkNC4uNGMzMTFkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIENPTkZJR19UQVNLX0RFTEFZX0FDQ1Q9eQogQ09ORklHX1RBU0tfWEFDQ1Q9eQogQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15CitDT05GSUdfRkhBTkRMRT15CiBDT05GSUdfQVVESVQ9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDk4NjNlZTMuLjQ3YzhlMzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTUsNjUgKzUsNiBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc3BlY2lhbF9pbnNucy5oPgogCi0jaWZkZWYgQ09ORklHX1g4Nl9QQVQKLS8qCi0gKiBYODYgUEFUIHVzZXMgcGFnZSBmbGFncyBXQyBhbmQgVW5jYWNoZWQgdG9nZXRoZXIgdG8ga2VlcCB0cmFjayBvZgotICogbWVtb3J5IHR5cGUgb2YgcGFnZXMgdGhhdCBoYXZlIGJhY2tpbmcgcGFnZSBzdHJ1Y3QuIFg4NiBQQVQgc3VwcG9ydHMgMwotICogZGlmZmVyZW50IG1lbW9yeSB0eXBlcywgX1BBR0VfQ0FDSEVfV0IsIF9QQUdFX0NBQ0hFX1dDIGFuZAotICogX1BBR0VfQ0FDSEVfVUNfTUlOVVMgYW5kIGZvdXJ0aCBzdGF0ZSB3aGVyZSBwYWdlJ3MgbWVtb3J5IHR5cGUgaGFzIG5vdAotICogYmVlbiBjaGFuZ2VkIGZyb20gaXRzIGRlZmF1bHQgKHZhbHVlIG9mIC0xIHVzZWQgdG8gZGVub3RlIHRoaXMpLgotICogTm90ZSB3ZSBkbyBub3Qgc3VwcG9ydCBfUEFHRV9DQUNIRV9VQyBoZXJlLgotICovCi0KLSNkZWZpbmUgX1BHTVRfREVGQVVMVAkJMAotI2RlZmluZSBfUEdNVF9XQwkJKDFVTCA8PCBQR19hcmNoXzEpCi0jZGVmaW5lIF9QR01UX1VDX01JTlVTCQkoMVVMIDw8IFBHX3VuY2FjaGVkKQotI2RlZmluZSBfUEdNVF9XQgkJKDFVTCA8PCBQR191bmNhY2hlZCB8IDFVTCA8PCBQR19hcmNoXzEpCi0jZGVmaW5lIF9QR01UX01BU0sJCSgxVUwgPDwgUEdfdW5jYWNoZWQgfCAxVUwgPDwgUEdfYXJjaF8xKQotI2RlZmluZSBfUEdNVF9DTEVBUl9NQVNLCSh+X1BHTVRfTUFTSykKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9wYWdlX21lbXR5cGUoc3RydWN0IHBhZ2UgKnBnKQotewotCXVuc2lnbmVkIGxvbmcgcGdfZmxhZ3MgPSBwZy0+ZmxhZ3MgJiBfUEdNVF9NQVNLOwotCi0JaWYgKHBnX2ZsYWdzID09IF9QR01UX0RFRkFVTFQpCi0JCXJldHVybiAtMTsKLQllbHNlIGlmIChwZ19mbGFncyA9PSBfUEdNVF9XQykKLQkJcmV0dXJuIF9QQUdFX0NBQ0hFX1dDOwotCWVsc2UgaWYgKHBnX2ZsYWdzID09IF9QR01UX1VDX01JTlVTKQotCQlyZXR1cm4gX1BBR0VfQ0FDSEVfVUNfTUlOVVM7Ci0JZWxzZQotCQlyZXR1cm4gX1BBR0VfQ0FDSEVfV0I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZywgdW5zaWduZWQgbG9uZyBtZW10eXBlKQotewotCXVuc2lnbmVkIGxvbmcgbWVtdHlwZV9mbGFncyA9IF9QR01UX0RFRkFVTFQ7Ci0JdW5zaWduZWQgbG9uZyBvbGRfZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3M7Ci0KLQlzd2l0Y2ggKG1lbXR5cGUpIHsKLQljYXNlIF9QQUdFX0NBQ0hFX1dDOgotCQltZW10eXBlX2ZsYWdzID0gX1BHTVRfV0M7Ci0JCWJyZWFrOwotCWNhc2UgX1BBR0VfQ0FDSEVfVUNfTUlOVVM6Ci0JCW1lbXR5cGVfZmxhZ3MgPSBfUEdNVF9VQ19NSU5VUzsKLQkJYnJlYWs7Ci0JY2FzZSBfUEFHRV9DQUNIRV9XQjoKLQkJbWVtdHlwZV9mbGFncyA9IF9QR01UX1dCOwotCQlicmVhazsKLQl9Ci0KLQlkbyB7Ci0JCW9sZF9mbGFncyA9IHBnLT5mbGFnczsKLQkJbmV3X2ZsYWdzID0gKG9sZF9mbGFncyAmIF9QR01UX0NMRUFSX01BU0spIHwgbWVtdHlwZV9mbGFnczsKLQl9IHdoaWxlIChjbXB4Y2hnKCZwZy0+ZmxhZ3MsIG9sZF9mbGFncywgbmV3X2ZsYWdzKSAhPSBvbGRfZmxhZ3MpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZykgeyByZXR1cm4gLTE7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZywgdW5zaWduZWQgbG9uZyBtZW10eXBlKSB7IH0KLSNlbmRpZgotCiAvKgogICogVGhlIHNldF9tZW1vcnlfKiBBUEkgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHZhcmlvdXMgYXR0cmlidXRlcyBvZiBhIHZpcnR1YWwKICAqIGFkZHJlc3MgcmFuZ2UuIFRoZSBhdHRyaWJ1dGVzIGluY2x1ZGU6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kaXNhYmxlZC1mZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGlzYWJsZWQtZmVhdHVyZXMuaAppbmRleCA5NzUzNGE3Li5mMjI2ZGYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kaXNhYmxlZC1mZWF0dXJlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rpc2FibGVkLWZlYXR1cmVzLmgKQEAgLTEwLDYgKzEwLDEyIEBACiAgKiBjcHVfZmVhdHVyZV9lbmFibGVkKCkuCiAgKi8KIAorI2lmZGVmIENPTkZJR19YODZfSU5URUxfTVBYCisjIGRlZmluZSBESVNBQkxFX01QWAkwCisjZWxzZQorIyBkZWZpbmUgRElTQUJMRV9NUFgJKDE8PChYODZfRkVBVFVSRV9NUFggJiAzMSkpCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19YODZfNjQKICMgZGVmaW5lIERJU0FCTEVfVk1FCQkoMTw8KFg4Nl9GRUFUVVJFX1ZNRSAmIDMxKSkKICMgZGVmaW5lIERJU0FCTEVfSzZfTVRSUgkoMTw8KFg4Nl9GRUFUVVJFX0s2X01UUlIgJiAzMSkpCkBAIC0zNCw2ICs0MCw2IEBACiAjZGVmaW5lIERJU0FCTEVEX01BU0s2CTAKICNkZWZpbmUgRElTQUJMRURfTUFTSzcJMAogI2RlZmluZSBESVNBQkxFRF9NQVNLOAkwCi0jZGVmaW5lIERJU0FCTEVEX01BU0s5CTAKKyNkZWZpbmUgRElTQUJMRURfTUFTSzkJKERJU0FCTEVfTVBYKQogCiAjZW5kaWYgLyogX0FTTV9YODZfRElTQUJMRURfRkVBVFVSRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaAppbmRleCA5YjExNzU3Li4yNWJjZTQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaApAQCAtMTU4LDYgKzE1OCwzMCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19FRklfTUlYRUQgKi8KIAorCisvKiBhcmNoIHNwZWNpZmljIGRlZmluaXRpb25zIHVzZWQgYnkgdGhlIHN0dWIgY29kZSAqLworCitzdHJ1Y3QgZWZpX2NvbmZpZyB7CisJdTY0IGltYWdlX2hhbmRsZTsKKwl1NjQgdGFibGU7CisJdTY0IGFsbG9jYXRlX3Bvb2w7CisJdTY0IGFsbG9jYXRlX3BhZ2VzOworCXU2NCBnZXRfbWVtb3J5X21hcDsKKwl1NjQgZnJlZV9wb29sOworCXU2NCBmcmVlX3BhZ2VzOworCXU2NCBsb2NhdGVfaGFuZGxlOworCXU2NCBoYW5kbGVfcHJvdG9jb2w7CisJdTY0IGV4aXRfYm9vdF9zZXJ2aWNlczsKKwl1NjQgdGV4dF9vdXRwdXQ7CisJZWZpX3N0YXR1c190ICgqY2FsbCkodW5zaWduZWQgbG9uZywgLi4uKTsKKwlib29sIGlzNjQ7Cit9IF9fcGFja2VkOworCitfX3B1cmUgY29uc3Qgc3RydWN0IGVmaV9jb25maWcgKl9fZWZpX2Vhcmx5KHZvaWQpOworCisjZGVmaW5lIGVmaV9jYWxsX2Vhcmx5KGYsIC4uLikJCQkJCQlcCisJX19lZmlfZWFybHkoKS0+Y2FsbChfX2VmaV9lYXJseSgpLT5mLCBfX1ZBX0FSR1NfXyk7CisKIGV4dGVybiBib29sIGVmaV9yZWJvb3RfcmVxdWlyZWQodm9pZCk7CiAKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaAppbmRleCAyNTE5ZDA2Li5jM2RkNWU3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKQEAgLTgsOCArOCwxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGZiX3BncHJvdGVjdChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJdW5zaWduZWQgbG9uZyBvZmYpCiB7CisJdW5zaWduZWQgbG9uZyBwcm90OworCisJcHJvdCA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICYgfl9QQUdFX0NBQ0hFX01BU0s7CiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID4gMykKLQkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfUENEOworCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSA9CisJCQlwcm90IHwgY2FjaGVtb2RlMnByb3R2YWwoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyk7CiB9CiAKIGV4dGVybiBpbnQgZmJfaXNfcHJpbWFyeV9kZXZpY2Uoc3RydWN0IGZiX2luZm8gKmluZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCBmZmIxNzMzLi5mODBkNzAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtNjksNyArNjksOSBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKIAlGSVhfSE9MRSwKICNlbHNlCisjaWZkZWYgQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04KIAlWU1lTQ0FMTF9QQUdFID0gKEZJWEFERFJfVE9QIC0gVlNZU0NBTExfQUREUikgPj4gUEFHRV9TSElGVCwKKyNlbmRpZgogI2lmZGVmIENPTkZJR19QQVJBVklSVF9DTE9DSwogCVBWQ0xPQ0tfRklYTUFQX0JFR0lOLAogCVBWQ0xPQ0tfRklYTUFQX0VORCA9IFBWQ0xPQ0tfRklYTUFQX0JFR0lOK1BWQ0xPQ0tfVlNZU0NBTExfTlJfUEFHRVMtMSwKQEAgLTEzNiw5ICsxMzgsNyBAQAogZXh0ZXJuIHZvaWQgcmVzZXJ2ZV90b3BfYWRkcmVzcyh1bnNpZ25lZCBsb25nIHJlc2VydmUpOwogCiAjZGVmaW5lIEZJWEFERFJfU0laRQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQotI2RlZmluZSBGSVhBRERSX0JPT1RfU0laRQkoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIEZJWEFERFJfU1RBUlQJCShGSVhBRERSX1RPUCAtIEZJWEFERFJfU0laRSkKLSNkZWZpbmUgRklYQUREUl9CT09UX1NUQVJUCShGSVhBRERSX1RPUCAtIEZJWEFERFJfQk9PVF9TSVpFKQogCiBleHRlcm4gaW50IGZpeG1hcHNfc2V0OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKaW5kZXggMzAyYTMyMy4uMDRlOWQwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaApAQCAtMzgsMTcgKzM4LDIwIEBACiAvKgogICogT3JkZXJpbmcgaXM6CiAgKgotICogRklYQUREUl9UT1AKLSAqIAkJCWZpeGVkX2FkZHJlc3NlcwotICogRklYQUREUl9TVEFSVAotICogCQkJdGVtcCBmaXhlZCBhZGRyZXNzZXMKLSAqIEZJWEFERFJfQk9PVF9TVEFSVAotICogCQkJUGVyc2lzdGVudCBrbWFwIGFyZWEKLSAqIFBLTUFQX0JBU0UKLSAqIFZNQUxMT0NfRU5ECi0gKiAJCQlWbWFsbG9jIGFyZWEKLSAqIFZNQUxMT0NfU1RBUlQKLSAqIGhpZ2hfbWVtb3J5CisgKiBoaWdoIG1lbW9yeSBvbjoJCQkgICAgICAgICAgICAgIGhpZ2hfbWVtb3J5IG9mZjoKKyAqICAgIEZJWEFERFJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWEFERFJfVE9QCisgKiAgICAgICAgZml4ZWQgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgYWRkcmVzc2VzCisgKiAgICBGSVhBRERSX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVhBRERSX1NUQVJUCisgKiAgICAgICAgdGVtcCBmaXhlZCBhZGRyZXNzZXMvcGVyc2lzdGVudCBrbWFwIGFyZWEgICAgICBWTUFMTE9DX0VORAorICogICAgUEtNQVBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgZml4ZWQgYWRkcmVzc2VzL3ZtYWxsb2MgYXJlYQorICogICAgVk1BTExPQ19FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVk1BTExPQ19TVEFSVAorICogICAgICAgIHZtYWxsb2MgYXJlYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaF9tZW1vcnkKKyAqICAgIFZNQUxMT0NfU1RBUlQKKyAqICAgIGhpZ2hfbWVtb3J5CisgKgorICogVGhlIHRlbXAgZml4ZWQgYXJlYSBpcyBvbmx5IHVzZWQgZHVyaW5nIGJvb3QgZm9yIGVhcmx5X2lvcmVtYXAoKSwgYW5kCisgKiBpdCBpcyB1bnVzZWQgd2hlbiB0aGUgaW9yZW1hcCgpIGlzIGZ1bmN0aW9uYWwuIHZtYWxsb2MvcGttYXAgYXJlYSBiZWNvbWUKKyAqIGF2YWlsYWJsZSBhZnRlciBlYXJseSBib290IHNvIHRoZSB0ZW1wIGZpeGVkIGFyZWEgaXMgYXZhaWxhYmxlIGZvciByZS11c2UuCiAgKi8KICNkZWZpbmUgTEFTVF9QS01BUF9NQVNLIChMQVNUX1BLTUFQLTEpCiAjZGVmaW5lIFBLTUFQX05SKHZpcnQpICAoKHZpcnQtUEtNQVBfQkFTRSkgPj4gUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luc24uaAppbmRleCA0OGViMzBhLi40N2YyOWIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnNuLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5zbi5oCkBAIC02NSw2ICs2NSw3IEBACiAJdW5zaWduZWQgY2hhciB4ODZfNjQ7CiAKIAljb25zdCBpbnNuX2J5dGVfdCAqa2FkZHI7CS8qIGtlcm5lbCBhZGRyZXNzIG9mIGluc24gdG8gYW5hbHl6ZSAqLworCWNvbnN0IGluc25fYnl0ZV90ICplbmRfa2FkZHI7CS8qIGtlcm5lbCBhZGRyZXNzIG9mIGxhc3QgaW5zbiBpbiBidWZmZXIgKi8KIAljb25zdCBpbnNuX2J5dGVfdCAqbmV4dF9ieXRlOwogfTsKIApAQCAtOTYsNyArOTcsNyBAQAogI2RlZmluZSBYODZfVkVYX1AodmV4KQkoKHZleCkgJiAweDAzKQkJLyogVkVYMyBCeXRlMiwgVkVYMiBCeXRlMSAqLwogI2RlZmluZSBYODZfVkVYX01fTUFYCTB4MWYJCQkvKiBWRVgzLk0gTWF4aW11bSB2YWx1ZSAqLwogCi1leHRlcm4gdm9pZCBpbnNuX2luaXQoc3RydWN0IGluc24gKmluc24sIGNvbnN0IHZvaWQgKmthZGRyLCBpbnQgeDg2XzY0KTsKK2V4dGVybiB2b2lkIGluc25faW5pdChzdHJ1Y3QgaW5zbiAqaW5zbiwgY29uc3Qgdm9pZCAqa2FkZHIsIGludCBidWZfbGVuLCBpbnQgeDg2XzY0KTsKIGV4dGVybiB2b2lkIGluc25fZ2V0X3ByZWZpeGVzKHN0cnVjdCBpbnNuICppbnNuKTsKIGV4dGVybiB2b2lkIGluc25fZ2V0X29wY29kZShzdHJ1Y3QgaW5zbiAqaW5zbik7CiBleHRlcm4gdm9pZCBpbnNuX2dldF9tb2RybShzdHJ1Y3QgaW5zbiAqaW5zbik7CkBAIC0xMTUsMTIgKzExNiwxMyBAQAogZXh0ZXJuIGludCBpbnNuX3JpcF9yZWxhdGl2ZShzdHJ1Y3QgaW5zbiAqaW5zbik7CiAKIC8qIEluaXQgaW5zbiBmb3Iga2VybmVsIHRleHQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxfaW5zbl9pbml0KHN0cnVjdCBpbnNuICppbnNuLCBjb25zdCB2b2lkICprYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxfaW5zbl9pbml0KHN0cnVjdCBpbnNuICppbnNuLAorCQkJCSAgICBjb25zdCB2b2lkICprYWRkciwgaW50IGJ1Zl9sZW4pCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCWluc25faW5pdChpbnNuLCBrYWRkciwgMSk7CisJaW5zbl9pbml0KGluc24sIGthZGRyLCBidWZfbGVuLCAxKTsKICNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KLQlpbnNuX2luaXQoaW5zbiwga2FkZHIsIDApOworCWluc25faW5pdChpbnNuLCBrYWRkciwgYnVmX2xlbiwgMCk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggYjgyMzdkOC4uMzRhNWI5MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCkBAIC03NCw2ICs3NCw5IEBACiAjZGVmaW5lIF9fcmF3X3JlYWR3IF9fcmVhZHcKICNkZWZpbmUgX19yYXdfcmVhZGwgX19yZWFkbAogCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkKHYsIGEpIF9fd3JpdGViKHYsIGEpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKHYsIGEpIF9fd3JpdGV3KHYsIGEpCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHYsIGEpIF9fd3JpdGVsKHYsIGEpCiAjZGVmaW5lIF9fcmF3X3dyaXRlYiBfX3dyaXRlYgogI2RlZmluZSBfX3Jhd193cml0ZXcgX193cml0ZXcKICNkZWZpbmUgX19yYXdfd3JpdGVsIF9fd3JpdGVsCkBAIC04Niw2ICs4OSw3IEBACiBidWlsZF9tbWlvX3dyaXRlKHdyaXRlcSwgInEiLCB1bnNpZ25lZCBsb25nLCAiciIsIDoibWVtb3J5IikKIAogI2RlZmluZSByZWFkcV9yZWxheGVkKGEpCXJlYWRxKGEpCisjZGVmaW5lIHdyaXRlcV9yZWxheGVkKHYsIGEpCXdyaXRlcSh2LCBhKQogCiAjZGVmaW5lIF9fcmF3X3JlYWRxKGEpCQlyZWFkcShhKQogI2RlZmluZSBfX3Jhd193cml0ZXEodmFsLCBhZGRyKQl3cml0ZXEodmFsLCBhZGRyKQpAQCAtMzEwLDExICszMTQsMTEgQEAKIEJVSUxESU8odywgdywgc2hvcnQpCiBCVUlMRElPKGwsICwgaW50KQogCi1leHRlcm4gdm9pZCAqeGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBwaHlzKTsKLWV4dGVybiB2b2lkIHVueGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBwaHlzLCB2b2lkICphZGRyKTsKK2V4dGVybiB2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBwaHlzKTsKK2V4dGVybiB2b2lkIHVueGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqYWRkcik7CiAKIGV4dGVybiBpbnQgaW9yZW1hcF9jaGFuZ2VfYXR0cih1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJdW5zaWduZWQgbG9uZyBwcm90X3ZhbCk7CisJCQkJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtKTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfd2MocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAogZXh0ZXJuIGJvb2wgaXNfZWFybHlfaW9yZW1hcF9wdGVwKHB0ZV90ICpwdGVwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKaW5kZXggOTU4YjkwZi4uNTFiMjZlODkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCkBAIC0zNCw2ICszNCwxMCBAQAogI2RlZmluZSBNQ0lfU1RBVFVTX1MJICgxVUxMPDw1NikgIC8qIFNpZ25hbGVkIG1hY2hpbmUgY2hlY2sgKi8KICNkZWZpbmUgTUNJX1NUQVRVU19BUgkgKDFVTEw8PDU1KSAgLyogQWN0aW9uIHJlcXVpcmVkICovCiAKKy8qIEFNRC1zcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE1DSV9TVEFUVVNfREVGRVJSRUQJKDFVTEw8PDQ0KSAgLyogZGVjbGFyZSBhbiB1bmNvcnJlY3RlZCBlcnJvciAqLworI2RlZmluZSBNQ0lfU1RBVFVTX1BPSVNPTgkoMVVMTDw8NDMpICAvKiBhY2Nlc3MgcG9pc29ub3VzIGRhdGEgKi8KKwogLyoKICAqIE5vdGUgdGhhdCB0aGUgZnVsbCBNQ0FDT0QgZmllbGQgb2YgSUEzMl9NQ2lfU1RBVFVTIE1TUiBpcwogICogYml0cyAxNTowLiAgQnV0IGJpdCAxMiBpcyB0aGUgJ0YnIGJpdCwgZGVmaW5lZCBmb3IgY29ycmVjdGVkCkBAIC03OCw3ICs4Miw2IEBACiAvKiBTb2Z0d2FyZSBkZWZpbmVkIGJhbmtzICovCiAjZGVmaW5lIE1DRV9FWFRFTkRFRF9CQU5LCTEyOAogI2RlZmluZSBNQ0VfVEhFUk1BTF9CQU5LCShNQ0VfRVhURU5ERURfQkFOSyArIDApCi0jZGVmaW5lIEs4X01DRV9USFJFU0hPTERfQkFTRSAgIChNQ0VfRVhURU5ERURfQkFOSyArIDEpCiAKICNkZWZpbmUgTUNFX0xPR19MRU4gMzIKICNkZWZpbmUgTUNFX0xPR19TSUdOQVRVUkUJIk1BQ0hJTkVDSEVDSyIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlLmgKaW5kZXggNjRkYzM2Mi4uMjAxYjUyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlLmgKQEAgLTc4LDYgKzc4LDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBsb2FkX3Vjb2RlX2JzcCh2b2lkKTsKIGV4dGVybiB2b2lkIGxvYWRfdWNvZGVfYXAodm9pZCk7CiBleHRlcm4gaW50IF9faW5pdCBzYXZlX21pY3JvY29kZV9pbl9pbml0cmQodm9pZCk7Cit2b2lkIHJlbG9hZF9lYXJseV9taWNyb2NvZGUodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBsb2FkX3Vjb2RlX2JzcCh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGxvYWRfdWNvZGVfYXAodm9pZCkge30KQEAgLTg1LDYgKzg2LDcgQEAKIHsKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxvYWRfZWFybHlfbWljcm9jb2RlKHZvaWQpIHt9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X01JQ1JPQ09ERV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGVfYW1kLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGVfYW1kLmgKaW5kZXggYjdiMTBiOC4uYWY5MzUzOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlX2FtZC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9hbWQuaApAQCAtNTksNyArNTksNyBAQAogCiBleHRlcm4gaW50IF9fYXBwbHlfbWljcm9jb2RlX2FtZChzdHJ1Y3QgbWljcm9jb2RlX2FtZCAqbWNfYW1kKTsKIGV4dGVybiBpbnQgYXBwbHlfbWljcm9jb2RlX2FtZChpbnQgY3B1KTsKLWV4dGVybiBlbnVtIHVjb2RlX3N0YXRlIGxvYWRfbWljcm9jb2RlX2FtZCh1OCBmYW1pbHksIGNvbnN0IHU4ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gZW51bSB1Y29kZV9zdGF0ZSBsb2FkX21pY3JvY29kZV9hbWQoaW50IGNwdSwgdTggZmFtaWx5LCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IHNpemUpOwogCiAjZGVmaW5lIFBBVENIX01BWF9TSVpFIFBBR0VfU0laRQogZXh0ZXJuIHU4IGFtZF91Y29kZV9wYXRjaFtQQVRDSF9NQVhfU0laRV07CkBAIC02OCwxMCArNjgsMTIgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBsb2FkX3Vjb2RlX2FtZF9ic3Aodm9pZCk7CiBleHRlcm4gdm9pZCBsb2FkX3Vjb2RlX2FtZF9hcCh2b2lkKTsKIGV4dGVybiBpbnQgX19pbml0IHNhdmVfbWljcm9jb2RlX2luX2luaXRyZF9hbWQodm9pZCk7Cit2b2lkIHJlbG9hZF91Y29kZV9hbWQodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBsb2FkX3Vjb2RlX2FtZF9ic3Aodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX3Vjb2RlX2FtZF9hcCh2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgX19pbml0IHNhdmVfbWljcm9jb2RlX2luX2luaXRyZF9hbWQodm9pZCkgeyByZXR1cm4gLUVJTlZBTDsgfQordm9pZCByZWxvYWRfdWNvZGVfYW1kKHZvaWQpIHt9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X01JQ1JPQ09ERV9BTURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlX2ludGVsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGVfaW50ZWwuaAppbmRleCBiYmUyOTZlLi5kZDRjMjAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGVfaW50ZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGVfaW50ZWwuaApAQCAtNjgsMTEgKzY4LDEzIEBACiBleHRlcm4gdm9pZCBsb2FkX3Vjb2RlX2ludGVsX2FwKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2hvd191Y29kZV9pbmZvX2Vhcmx5KHZvaWQpOwogZXh0ZXJuIGludCBfX2luaXQgc2F2ZV9taWNyb2NvZGVfaW5faW5pdHJkX2ludGVsKHZvaWQpOwordm9pZCByZWxvYWRfdWNvZGVfaW50ZWwodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBfX2luaXQgdm9pZCBsb2FkX3Vjb2RlX2ludGVsX2JzcCh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGxvYWRfdWNvZGVfaW50ZWxfYXAodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaG93X3Vjb2RlX2luZm9fZWFybHkodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBzYXZlX21pY3JvY29kZV9pbl9pbml0cmRfaW50ZWwodm9pZCkgeyByZXR1cm4gLUVJTlZBTDsgfQorc3RhdGljIGlubGluZSB2b2lkIHJlbG9hZF91Y29kZV9pbnRlbCh2b2lkKSB7fQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NSUNST0NPREVfSU5URUxfRUFSTFkpICYmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggMTY2YWYyYS4uNDAyNjlhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xMCw5ICsxMCw4IEBACiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNpbmNsdWRlIDxhc20vbXB4Lmg+CiAjaWZuZGVmIENPTkZJR19QQVJBVklSVAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAogCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQogewpAQCAtNTMsNyArNTIsMTYgQEAKIAkJLyogU3RvcCBmbHVzaCBpcGlzIGZvciB0aGUgcHJldmlvdXMgbW0gKi8KIAkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHByZXYpKTsKIAotCQkvKiBMb2FkIHRoZSBMRFQsIGlmIHRoZSBMRFQgaXMgZGlmZmVyZW50OiAqLworCQkvKgorCQkgKiBMb2FkIHRoZSBMRFQsIGlmIHRoZSBMRFQgaXMgZGlmZmVyZW50LgorCQkgKgorCQkgKiBJdCdzIHBvc3NpYmxlIGxlYXZlX21tKHByZXYpIGhhcyBiZWVuIGNhbGxlZC4gIElmIHNvLAorCQkgKiB0aGVuIHByZXYtPmNvbnRleHQubGR0IGNvdWxkIGJlIG91dCBvZiBzeW5jIHdpdGggdGhlCisJCSAqIExEVCBkZXNjcmlwdG9yIG9yIHRoZSBMRFQgcmVnaXN0ZXIuICBUaGlzIGNhbiBvbmx5IGhhcHBlbgorCQkgKiBpZiBwcmV2LT5jb250ZXh0LmxkdCBpcyBub24tbnVsbCwgc2luY2Ugd2UgbmV2ZXIgZnJlZQorCQkgKiBhbiBMRFQuICBCdXQgTERUcyBjYW4ndCBiZSBzaGFyZWQgYWNyb3NzIG1tcywgc28KKwkJICogcHJldi0+Y29udGV4dC5sZHQgd29uJ3QgYmUgZXF1YWwgdG8gbmV4dC0+Y29udGV4dC5sZHQuCisJCSAqLwogCQlpZiAodW5saWtlbHkocHJldi0+Y29udGV4dC5sZHQgIT0gbmV4dC0+Y29udGV4dC5sZHQpKQogCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0KTsKIAl9CkBAIC0xMDIsNCArMTEwLDI3IEBACiB9IHdoaWxlICgwKQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2R1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tLAorCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlwYXJhdmlydF9hcmNoX2R1cF9tbWFwKG9sZG1tLCBtbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2V4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlwYXJhdmlydF9hcmNoX2V4aXRfbW1hcChtbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2Jwcm1fbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJbXB4X21tX2luaXQobW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwltcHhfbm90aWZ5X3VubWFwKG1tLCB2bWEsIHN0YXJ0LCBlbmQpOworfQorCiAjZW5kaWYgLyogX0FTTV9YODZfTU1VX0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXB4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTUyYTEzZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21weC5oCkBAIC0wLDAgKzEsMTAzIEBACisjaWZuZGVmIF9BU01fWDg2X01QWF9ICisjZGVmaW5lIF9BU01fWDg2X01QWF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vaW5zbi5oPgorCisvKgorICogTlVMTCBpcyB0aGVvcmV0aWNhbGx5IGEgdmFsaWQgcGxhY2UgdG8gcHV0IHRoZSBib3VuZHMKKyAqIGRpcmVjdG9yeSwgc28gcG9pbnQgdGhpcyBhdCBhbiBpbnZhbGlkIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTVBYX0lOVkFMSURfQk9VTkRTX0RJUgkoKHZvaWQgX191c2VyICopLTEpCisjZGVmaW5lIE1QWF9CTkRDRkdfRU5BQkxFX0ZMQUcJMHgxCisjZGVmaW5lIE1QWF9CRF9FTlRSWV9WQUxJRF9GTEFHCTB4MQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCisvKiB1cHBlciAyOCBiaXRzIFs0NzoyMF0gb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiA2NC1iaXQgdXNlZCB0bworICogaW5kZXggaW50byBib3VuZHMgZGlyZWN0b3J5IChCRCkuCisgKi8KKyNkZWZpbmUgTVBYX0JEX0VOVFJZX09GRlNFVAkyOAorI2RlZmluZSBNUFhfQkRfRU5UUllfU0hJRlQJMworLyogYml0cyBbMTk6M10gb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiA2NC1iaXQgdXNlZCB0byBpbmRleCBpbnRvCisgKiBib3VuZHMgdGFibGUgKEJUKS4KKyAqLworI2RlZmluZSBNUFhfQlRfRU5UUllfT0ZGU0VUCTE3CisjZGVmaW5lIE1QWF9CVF9FTlRSWV9TSElGVAk1CisjZGVmaW5lIE1QWF9JR05fQklUUwkJMworI2RlZmluZSBNUFhfQkRfRU5UUllfVEFJTAkzCisKKyNlbHNlCisKKyNkZWZpbmUgTVBYX0JEX0VOVFJZX09GRlNFVAkyMAorI2RlZmluZSBNUFhfQkRfRU5UUllfU0hJRlQJMgorI2RlZmluZSBNUFhfQlRfRU5UUllfT0ZGU0VUCTEwCisjZGVmaW5lIE1QWF9CVF9FTlRSWV9TSElGVAk0CisjZGVmaW5lIE1QWF9JR05fQklUUwkJMgorI2RlZmluZSBNUFhfQkRfRU5UUllfVEFJTAkyCisKKyNlbmRpZgorCisjZGVmaW5lIE1QWF9CRF9TSVpFX0JZVEVTICgxVUw8PChNUFhfQkRfRU5UUllfT0ZGU0VUK01QWF9CRF9FTlRSWV9TSElGVCkpCisjZGVmaW5lIE1QWF9CVF9TSVpFX0JZVEVTICgxVUw8PChNUFhfQlRfRU5UUllfT0ZGU0VUK01QWF9CVF9FTlRSWV9TSElGVCkpCisKKyNkZWZpbmUgTVBYX0JORFNUQV9UQUlMCQkyCisjZGVmaW5lIE1QWF9CTkRDRkdfVEFJTAkJMTIKKyNkZWZpbmUgTVBYX0JORFNUQV9BRERSX01BU0sJKH4oKDFVTDw8TVBYX0JORFNUQV9UQUlMKS0xKSkKKyNkZWZpbmUgTVBYX0JORENGR19BRERSX01BU0sJKH4oKDFVTDw8TVBYX0JORENGR19UQUlMKS0xKSkKKyNkZWZpbmUgTVBYX0JUX0FERFJfTUFTSwkofigoMVVMPDxNUFhfQkRfRU5UUllfVEFJTCktMSkpCisKKyNkZWZpbmUgTVBYX0JORENGR19BRERSX01BU0sJKH4oKDFVTDw8TVBYX0JORENGR19UQUlMKS0xKSkKKyNkZWZpbmUgTVBYX0JORFNUQV9FUlJPUl9DT0RFCTB4MworCisjZGVmaW5lIE1QWF9CRF9FTlRSWV9NQVNLCSgoMTw8TVBYX0JEX0VOVFJZX09GRlNFVCktMSkKKyNkZWZpbmUgTVBYX0JUX0VOVFJZX01BU0sJKCgxPDxNUFhfQlRfRU5UUllfT0ZGU0VUKS0xKQorI2RlZmluZSBNUFhfR0VUX0JEX0VOVFJZX09GRlNFVChhZGRyKQkoKCgoYWRkcik+PihNUFhfQlRfRU5UUllfT0ZGU0VUKyBcCisJCU1QWF9JR05fQklUUykpICYgTVBYX0JEX0VOVFJZX01BU0spIDw8IE1QWF9CRF9FTlRSWV9TSElGVCkKKyNkZWZpbmUgTVBYX0dFVF9CVF9FTlRSWV9PRkZTRVQoYWRkcikJKCgoKGFkZHIpPj5NUFhfSUdOX0JJVFMpICYgXAorCQlNUFhfQlRfRU5UUllfTUFTSykgPDwgTVBYX0JUX0VOVFJZX1NISUZUKQorCisjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9NUFgKK3NpZ2luZm9fdCAqbXB4X2dlbmVyYXRlX3NpZ2luZm8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKTsKK2ludCBtcHhfaGFuZGxlX2JkX2ZhdWx0KHN0cnVjdCB4c2F2ZV9zdHJ1Y3QgKnhzYXZlX2J1Zik7CitzdGF0aWMgaW5saW5lIGludCBrZXJuZWxfbWFuYWdpbmdfbXB4X3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gKG1tLT5iZF9hZGRyICE9IE1QWF9JTlZBTElEX0JPVU5EU19ESVIpOworfQorc3RhdGljIGlubGluZSB2b2lkIG1weF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCS8qCisJICogTlVMTCBpcyB0aGVvcmV0aWNhbGx5IGEgdmFsaWQgcGxhY2UgdG8gcHV0IHRoZSBib3VuZHMKKwkgKiBkaXJlY3RvcnksIHNvIHBvaW50IHRoaXMgYXQgYW4gaW52YWxpZCBhZGRyZXNzLgorCSAqLworCW1tLT5iZF9hZGRyID0gTVBYX0lOVkFMSURfQk9VTkRTX0RJUjsKK30KK3ZvaWQgbXB4X25vdGlmeV91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHNpZ2luZm9fdCAqbXB4X2dlbmVyYXRlX3NpZ2luZm8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgICAgIHN0cnVjdCB4c2F2ZV9zdHJ1Y3QgKnhzYXZlX2J1ZikKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG1weF9oYW5kbGVfYmRfZmF1bHQoc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKQoreworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSBpbnQga2VybmVsX21hbmFnaW5nX21weF90YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbXB4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbXB4X25vdGlmeV91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworfQorI2VuZGlmIC8qIENPTkZJR19YODZfSU5URUxfTVBYICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NUFhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMl90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMl90eXBlcy5oCmluZGV4IGY0OGIxN2QuLjNhNTJlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyX3R5cGVzLmgKQEAgLTIwLDcgKzIwLDYgQEAKICNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJMQogI2RlZmluZSBUSFJFQURfU0laRQkJKFBBR0VfU0laRSA8PCBUSFJFQURfU0laRV9PUkRFUikKIAotI2RlZmluZSBTVEFDS0ZBVUxUX1NUQUNLIDAKICNkZWZpbmUgRE9VQkxFRkFVTFRfU1RBQ0sgMQogI2RlZmluZSBOTUlfU1RBQ0sgMAogI2RlZmluZSBERUJVR19TVEFDSyAwCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKaW5kZXggZjQwOGNhZi4uYjNiZWJmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaApAQCAtMzksNiArMzksOCBAQAogCiAjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQSAxCisjaWZkZWYgQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04KKyMgZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQSAxCisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X1BBR0VfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NF90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NF90eXBlcy5oCmluZGV4IDY3ODIwNTEuLjc1NDUwYjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjRfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0X3R5cGVzLmgKQEAgLTE0LDEyICsxNCwxMSBAQAogI2RlZmluZSBJUlFfU1RBQ0tfT1JERVIgMgogI2RlZmluZSBJUlFfU1RBQ0tfU0laRSAoUEFHRV9TSVpFIDw8IElSUV9TVEFDS19PUkRFUikKIAotI2RlZmluZSBTVEFDS0ZBVUxUX1NUQUNLIDEKLSNkZWZpbmUgRE9VQkxFRkFVTFRfU1RBQ0sgMgotI2RlZmluZSBOTUlfU1RBQ0sgMwotI2RlZmluZSBERUJVR19TVEFDSyA0Ci0jZGVmaW5lIE1DRV9TVEFDSyA1Ci0jZGVmaW5lIE5fRVhDRVBUSU9OX1NUQUNLUyA1ICAvKiBodyBsaW1pdDogNyAqLworI2RlZmluZSBET1VCTEVGQVVMVF9TVEFDSyAxCisjZGVmaW5lIE5NSV9TVEFDSyAyCisjZGVmaW5lIERFQlVHX1NUQUNLIDMKKyNkZWZpbmUgTUNFX1NUQUNLIDQKKyNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTIDQgIC8qIGh3IGxpbWl0OiA3ICovCiAKICNkZWZpbmUgUFVEX1BBR0VfU0laRQkJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQogI2RlZmluZSBQVURfUEFHRV9NQVNLCQkofihQVURfUEFHRV9TSVpFLTEpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggY2Q2ZTE2MS4uMzI0NDRhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC0zMzAsMTMgKzMzMCwxMyBAQAogCVBWT1BfVkNBTEwyKHB2X21tdV9vcHMuYWN0aXZhdGVfbW0sIHByZXYsIG5leHQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKLQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKKwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLmR1cF9tbWFwLCBvbGRtbSwgbW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJUFZPUF9WQ0FMTDEocHZfbW11X29wcy5leGl0X21tYXAsIG1tKTsKIH0KQEAgLTk4Niw1ICs5ODYsMTUgQEAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbHNlICAvKiBDT05GSUdfUEFSQVZJUlQgKi8KICMgZGVmaW5lIGRlZmF1bHRfYmFubmVyIHg4Nl9pbml0X25vb3AKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKKwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FyY2hfZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qICFDT05GSUdfUEFSQVZJUlQgKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9QQVJBVklSVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCmluZGV4IGUyYzE2NjguLjkxYmM0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCkBAIC0xMSwxNiArMTEsMTcgQEAKICNlbmRpZgogCiBleHRlcm4gdm9pZCBwYXRfaW5pdCh2b2lkKTsKK3ZvaWQgcGF0X2luaXRfY2FjaGVfbW9kZXModm9pZCk7CiAKIGV4dGVybiBpbnQgcmVzZXJ2ZV9tZW10eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwKLQkJdW5zaWduZWQgbG9uZyByZXFfdHlwZSwgdW5zaWduZWQgbG9uZyAqcmV0X3R5cGUpOworCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSByZXFfcGNtLCBlbnVtIHBhZ2VfY2FjaGVfbW9kZSAqcmV0X3BjbSk7CiBleHRlcm4gaW50IGZyZWVfbWVtdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQpOwogCiBleHRlcm4gaW50IGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHU2NCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCXVuc2lnbmVkIGxvbmcgZmxhZyk7CisJCWVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSk7CiAKIGludCBpb19yZXNlcnZlX21lbXR5cGUocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kLAotCQkJdW5zaWduZWQgbG9uZyAqdHlwZSk7CisJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSAqcGNtKTsKIAogdm9pZCBpb19mcmVlX21lbXR5cGUocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAppbmRleCBmZDQ3MjE4Li5lMGJhNjZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNjQsNyArNjQsNyBAQAogI2RlZmluZSBfX3BlcmNwdV9wcmVmaXgJCSIiCiAjZW5kaWYKIAotI2RlZmluZSBfX3BlcmNwdV9hcmcoeCkJCV9fcGVyY3B1X3ByZWZpeCAiJVAiICN4CisjZGVmaW5lIF9fcGVyY3B1X2FyZyh4KQkJX19wZXJjcHVfcHJlZml4ICIlIiAjeAogCiAvKgogICogSW5pdGlhbGl6ZWQgcG9pbnRlcnMgdG8gcGVyLWNwdSB2YXJpYWJsZXMgbmVlZGVkIGZvciB0aGUgYm9vdApAQCAtMTc5LDI5ICsxNzksNTggQEAKIAl9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLCB2YXIsIGNvbnN0cmFpbnQpCQlcCisjZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLCB2YXIpCQkJCVwKICh7CQkJCQkJCVwKIAl0eXBlb2YodmFyKSBwZm9fcmV0X187CQkJCVwKIAlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCVwKIAljYXNlIDE6CQkJCQkJXAogCQlhc20ob3AgImIgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9cSIgKHBmb19yZXRfXykJCQlcCi0JCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgMjoJCQkJCQlcCiAJCWFzbShvcCAidyAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKIAkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKLQkJICAgIDogY29uc3RyYWludCk7CQkJXAorCQkgICAgOiAibSIgKHZhcikpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCiAJY2FzZSA0OgkJCQkJCVwKIAkJYXNtKG9wICJsICJfX3BlcmNwdV9hcmcoMSkiLCUwIgkJXAogCQkgICAgOiAiPXIiIChwZm9fcmV0X18pCQkJXAotCQkgICAgOiBjb25zdHJhaW50KTsJCQlcCisJCSAgICA6ICJtIiAodmFyKSk7CQkJXAogCQlicmVhazsJCQkJCVwKIAljYXNlIDg6CQkJCQkJXAogCQlhc20ob3AgInEgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9ciIgKHBmb19yZXRfXykJCQlcCi0JCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAorCX0JCQkJCQlcCisJcGZvX3JldF9fOwkJCQkJXAorfSkKKworI2RlZmluZSBwZXJjcHVfc3RhYmxlX29wKG9wLCB2YXIpCQkJXAorKHsJCQkJCQkJXAorCXR5cGVvZih2YXIpIHBmb19yZXRfXzsJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAorCWNhc2UgMToJCQkJCQlcCisJCWFzbShvcCAiYiAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1xIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgMjoJCQkJCQlcCisJCWFzbShvcCAidyAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgNDoJCQkJCQlcCisJCWFzbShvcCAibCAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgODoJCQkJCQlcCisJCWFzbShvcCAicSAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAogCX0JCQkJCQlcCkBAIC0zNTksMTEgKzM4OCwxMSBAQAogICogcGVyLXRocmVhZCB2YXJpYWJsZXMgaW1wbGVtZW50ZWQgYXMgcGVyLWNwdSB2YXJpYWJsZXMgYW5kIHRodXMKICAqIHN0YWJsZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXNwZWN0aXZlIHRhc2suCiAgKi8KLSNkZWZpbmUgdGhpc19jcHVfcmVhZF9zdGFibGUodmFyKQlwZXJjcHVfZnJvbV9vcCgibW92IiwgdmFyLCAicCIgKCYodmFyKSkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfc3RhYmxlKHZhcikJcGVyY3B1X3N0YWJsZV9vcCgibW92IiwgdmFyKQogCi0jZGVmaW5lIHJhd19jcHVfcmVhZF8xKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCi0jZGVmaW5lIHJhd19jcHVfcmVhZF8yKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCi0jZGVmaW5lIHJhd19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHJhd19jcHVfcmVhZF8xKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCisjZGVmaW5lIHJhd19jcHVfcmVhZF8yKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCisjZGVmaW5lIHJhd19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCiAKICNkZWZpbmUgcmF3X2NwdV93cml0ZV8xKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIHJhd19jcHVfd3JpdGVfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQpAQCAtMzgxLDkgKzQxMCw5IEBACiAjZGVmaW5lIHJhd19jcHVfeGNoZ18yKHBjcCwgdmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIHZhbCkKICNkZWZpbmUgcmF3X2NwdV94Y2hnXzQocGNwLCB2YWwpCXBlcmNwdV94Y2hnX29wKHBjcCwgdmFsKQogCi0jZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQotI2RlZmluZSB0aGlzX2NwdV9yZWFkXzIocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIChwY3ApLCAibSIocGNwKSkKLSNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgcGNwKQorI2RlZmluZSB0aGlzX2NwdV9yZWFkXzIocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBjcCkKKyNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCiAjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCkBAIC00MzUsNyArNDY0LDcgQEAKICAqIDMyIGJpdCBtdXN0IGZhbGwgYmFjayB0byBnZW5lcmljIG9wZXJhdGlvbnMuCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIHJhd19jcHVfcmVhZF84KHBjcCkJCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQorI2RlZmluZSByYXdfY3B1X3JlYWRfOChwY3ApCQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBjcCkKICNkZWZpbmUgcmF3X2NwdV93cml0ZV84KHBjcCwgdmFsKQkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQogI2RlZmluZSByYXdfY3B1X2FkZF84KHBjcCwgdmFsKQkJCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKICNkZWZpbmUgcmF3X2NwdV9hbmRfOChwY3AsIHZhbCkJCQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCkBAIC00NDQsNyArNDczLDcgQEAKICNkZWZpbmUgcmF3X2NwdV94Y2hnXzgocGNwLCBudmFsKQkJcGVyY3B1X3hjaGdfb3AocGNwLCBudmFsKQogI2RlZmluZSByYXdfY3B1X2NtcHhjaGdfOChwY3AsIG92YWwsIG52YWwpCXBlcmNwdV9jbXB4Y2hnX29wKHBjcCwgb3ZhbCwgbnZhbCkKIAotI2RlZmluZSB0aGlzX2NwdV9yZWFkXzgocGNwKQkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApCQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBjcCkKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbCkJCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfYWRkXzgocGNwLCB2YWwpCQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCiAjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKQkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQpAQCAtNTIyLDcgKzU1MSw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CiAKIC8qIFdlIGNhbiB1c2UgdGhpcyBkaXJlY3RseSBmb3IgbG9jYWwgQ1BVIChmYXN0ZXIpLiAqLwotREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHRoaXNfY3B1X29mZik7CitERUNMQVJFX1BFUl9DUFVfUkVBRF9NT1NUTFkodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKTsKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCmluZGV4IDhkZmM5ZmQuLmRjMGY2ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTE3Nyw2ICsxNzcsOSBAQAogI2RlZmluZSBJQlNfQ0FQU19CUk5UUkdUCQkoMVU8PDUpCiAjZGVmaW5lIElCU19DQVBTX09QQ05URVhUCQkoMVU8PDYpCiAjZGVmaW5lIElCU19DQVBTX1JJUElOVkFMSURDSEsJCSgxVTw8NykKKyNkZWZpbmUgSUJTX0NBUFNfT1BCUk5GVVNFCQkoMVU8PDgpCisjZGVmaW5lIElCU19DQVBTX0ZFVENIQ1RMRVhURAkJKDFVPDw5KQorI2RlZmluZSBJQlNfQ0FQU19PUERBVEE0CQkoMVU8PDEwKQogCiAjZGVmaW5lIElCU19DQVBTX0RFRkFVTFQJCShJQlNfQ0FQU19BVkFJTAkJXAogCQkJCQkgfCBJQlNfQ0FQU19GRVRDSFNBTQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYWE5N2EwNy4uYzExMmVhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtOSw5ICs5LDEwIEBACiAvKgogICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyBVQy0KICAqLwotI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQlcCi0JKChib290X2NwdV9kYXRhLng4NiA+IDMpCQkJCVwKLQkgPyAoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX0NBQ0hFX1VDX01JTlVTKSkJXAorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQkJXAorCSgoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQkJCQkJXAorCSA/IChfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwJCQkJCVwKKwkJICAgICBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKSkpCVwKIAkgOiAocHJvdCkpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC00MDQsOCArNDA1LDggQEAKICNkZWZpbmUgY2Fub25fcGdwcm90KHApIF9fcGdwcm90KG1hc3NhZ2VfcGdwcm90KHApKQogCiBzdGF0aWMgaW5saW5lIGludCBpc19uZXdfbWVtdHlwZV9hbGxvd2VkKHU2NCBwYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQkgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzKQorCQkJCQkgZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtLAorCQkJCQkgZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3BjbSkKIHsKIAkvKgogCSAqIFBBVCB0eXBlIGlzIGFsd2F5cyBXQiBmb3IgdW50cmFja2VkIHJhbmdlcywgc28gbm8gbmVlZCB0byBjaGVjay4KQEAgLTQxOSwxMCArNDIwLDEwIEBACiAJICogLSByZXF1ZXN0IGlzIHVuY2FjaGVkLCByZXR1cm4gY2Fubm90IGJlIHdyaXRlLWJhY2sKIAkgKiAtIHJlcXVlc3QgaXMgd3JpdGUtY29tYmluZSwgcmV0dXJuIGNhbm5vdCBiZSB3cml0ZS1iYWNrCiAJICovCi0JaWYgKChmbGFncyA9PSBfUEFHRV9DQUNIRV9VQ19NSU5VUyAmJgotCSAgICAgbmV3X2ZsYWdzID09IF9QQUdFX0NBQ0hFX1dCKSB8fAotCSAgICAoZmxhZ3MgPT0gX1BBR0VfQ0FDSEVfV0MgJiYKLQkgICAgIG5ld19mbGFncyA9PSBfUEFHRV9DQUNIRV9XQikpIHsKKwlpZiAoKHBjbSA9PSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTICYmCisJICAgICBuZXdfcGNtID09IF9QQUdFX0NBQ0hFX01PREVfV0IpIHx8CisJICAgIChwY20gPT0gX1BBR0VfQ0FDSEVfTU9ERV9XQyAmJgorCSAgICAgbmV3X3BjbSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dCKSkgewogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaAppbmRleCBlZDU5MDNiLi45ZmIyZjJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIExBU1RfUEtNQVAgMTAyNAogI2VuZGlmCiAKLSNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfQk9PVF9TVEFSVCAtIFBBR0VfU0laRSAqIChMQVNUX1BLTUFQICsgMSkpCVwKKyNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfU1RBUlQgLSBQQUdFX1NJWkUgKiAoTEFTVF9QS01BUCArIDEpKQlcCiAJCSAgICAmIFBNRF9NQVNLKQogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjRfdHlwZXMuaAppbmRleCA3MTY2ZTI1Li42MDJiNjAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0X3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NF90eXBlcy5oCkBAIC02Myw2ICs2Myw4IEBACiAjZGVmaW5lIE1PRFVMRVNfTEVOICAgKE1PRFVMRVNfRU5EIC0gTU9EVUxFU19WQUREUikKICNkZWZpbmUgRVNQRklYX1BHRF9FTlRSWSBfQUMoLTIsIFVMKQogI2RlZmluZSBFU1BGSVhfQkFTRV9BRERSIChFU1BGSVhfUEdEX0VOVFJZIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBFRklfVkFfU1RBUlQJICggLTQgKiAoX0FDKDEsIFVMKSA8PCAzMCkpCisjZGVmaW5lIEVGSV9WQV9FTkQJICgtNjggKiAoX0FDKDEsIFVMKSA8PCAzMCkpCiAKICNkZWZpbmUgRUFSTFlfRFlOQU1JQ19QQUdFX1RBQkxFUwk2NAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKaW5kZXggMDc3ODk2NC4uYWY0NDdmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaApAQCAtMTI4LDExICsxMjgsMjggQEAKIAkJCSBfUEFHRV9TT0ZUX0RJUlRZIHwgX1BBR0VfTlVNQSkKICNkZWZpbmUgX0hQQUdFX0NIR19NQVNLIChfUEFHRV9DSEdfTUFTSyB8IF9QQUdFX1BTRSB8IF9QQUdFX05VTUEpCiAKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfTUFTSwkoX1BBR0VfUENEIHwgX1BBR0VfUFdUKQotI2RlZmluZSBfUEFHRV9DQUNIRV9XQgkJKDApCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX1dDCQkoX1BBR0VfUFdUKQotI2RlZmluZSBfUEFHRV9DQUNIRV9VQ19NSU5VUwkoX1BBR0VfUENEKQotI2RlZmluZSBfUEFHRV9DQUNIRV9VQwkJKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKy8qCisgKiBUaGUgY2FjaGUgbW9kZXMgZGVmaW5lZCBoZXJlIGFyZSB1c2VkIHRvIHRyYW5zbGF0ZSBiZXR3ZWVuIHB1cmUgU1cgdXNhZ2UKKyAqIGFuZCB0aGUgSFcgZGVmaW5lZCBjYWNoZSBtb2RlIGJpdHMgYW5kL29yIFBBVCBlbnRyaWVzLgorICoKKyAqIFRoZSByZXN1bHRpbmcgYml0cyBmb3IgUFdULCBQQ0QgYW5kIFBBVCBzaG91bGQgYmUgY2hvc2VuIGluIGEgd2F5CisgKiB0byBoYXZlIHRoZSBXQiBtb2RlIGF0IGluZGV4IDAgKGFsbCBiaXRzIGNsZWFyKS4gVGhpcyBpcyB0aGUgZGVmYXVsdAorICogcmlnaHQgbm93IGFuZCBsaWtlbHkgd291bGQgYnJlYWsgdG9vIG11Y2ggaWYgY2hhbmdlZC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2VudW0gcGFnZV9jYWNoZV9tb2RlIHsKKwlfUEFHRV9DQUNIRV9NT0RFX1dCID0gMCwKKwlfUEFHRV9DQUNIRV9NT0RFX1dDID0gMSwKKwlfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTID0gMiwKKwlfUEFHRV9DQUNIRV9NT0RFX1VDID0gMywKKwlfUEFHRV9DQUNIRV9NT0RFX1dUID0gNCwKKwlfUEFHRV9DQUNIRV9NT0RFX1dQID0gNSwKKwlfUEFHRV9DQUNIRV9NT0RFX05VTSA9IDgKK307CisjZW5kaWYKKworI2RlZmluZSBfUEFHRV9DQUNIRV9NQVNLCShfUEFHRV9QQVQgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCisjZGVmaW5lIF9QQUdFX05PQ0FDSEUJCShjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDKSkKIAogI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKICNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IFwKQEAgLTE1Niw0MSArMTczLDI3IEBACiAKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9STwkJKF9fUEFHRV9LRVJORUwgJiB+X1BBR0VfUlcpCiAjZGVmaW5lIF9fUEFHRV9LRVJORUxfUlgJCShfX1BBR0VfS0VSTkVMX0VYRUMgJiB+X1BBR0VfUlcpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfRVhFQ19OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfV0MJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfQ0FDSEVfV0MpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfVUNfTUlOVVMJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfUENEKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX05PQ0FDSEUJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfTk9DQUNIRSkKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9WU1lTQ0FMTAkJKF9fUEFHRV9LRVJORUxfUlggfCBfUEFHRV9VU0VSKQogI2RlZmluZSBfX1BBR0VfS0VSTkVMX1ZWQVIJCShfX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfVVNFUikKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9WVkFSX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfVlZBUiB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QU0UpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX0NBQ0hFX1VDIHwgX1BBR0VfUFNFKQogI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX1BTRSkKIAogI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPCQkoX19QQUdFX0tFUk5FTCkKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9JT19OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX05PQ0FDSEUpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMJKF9fUEFHRV9LRVJORUxfVUNfTUlOVVMpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fV0MJCShfX1BBR0VfS0VSTkVMX1dDKQogCiAjZGVmaW5lIFBBR0VfS0VSTkVMCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTCkKICNkZWZpbmUgUEFHRV9LRVJORUxfUk8JCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1JPKQogI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0VYRUMpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1JYCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9SWCkKLSNkZWZpbmUgUEFHRV9LRVJORUxfV0MJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1dDKQogI2RlZmluZSBQQUdFX0tFUk5FTF9OT0NBQ0hFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX05PQ0FDSEUpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX1VDX01JTlVTCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1VDX01JTlVTKQotI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFKQotI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRSkKICNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0VfRVhFQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDKQogI2RlZmluZSBQQUdFX0tFUk5FTF9WU1lTQ0FMTAkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTCkKICNkZWZpbmUgUEFHRV9LRVJORUxfVlZBUgkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WVkFSKQotI2RlZmluZSBQQUdFX0tFUk5FTF9WVkFSX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WVkFSX05PQ0FDSEUpCiAKICNkZWZpbmUgUEFHRV9LRVJORUxfSU8JCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPKQogI2RlZmluZSBQQUdFX0tFUk5FTF9JT19OT0NBQ0hFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX05PQ0FDSEUpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0lPX1VDX01JTlVTCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX1VDX01JTlVTKQotI2RlZmluZSBQQUdFX0tFUk5FTF9JT19XQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JT19XQykKIAogLyogICAgICAgICB4d3IgKi8KICNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQpAQCAtMzQxLDYgKzM0NCw1OSBAQAogI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQogI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKIAorZXh0ZXJuIHVpbnQxNl90IF9fY2FjaGVtb2RlMnB0ZV90YmxbX1BBR0VfQ0FDSEVfTU9ERV9OVU1dOworZXh0ZXJuIHVpbnQ4X3QgX19wdGUyY2FjaGVtb2RlX3RibFs4XTsKKworI2RlZmluZSBfX3B0ZTJjbV9pZHgoY2IpCQkJCVwKKwkoKCgoY2IpID4+IChfUEFHRV9CSVRfUEFUIC0gMikpICYgNCkgfAkJXAorCSAoKChjYikgPj4gKF9QQUdFX0JJVF9QQ0QgLSAxKSkgJiAyKSB8CQlcCisJICgoKGNiKSA+PiBfUEFHRV9CSVRfUFdUKSAmIDEpKQorI2RlZmluZSBfX2NtX2lkeDJwdGUoaSkJCQkJCVwKKwkoKCgoaSkgJiA0KSA8PCAoX1BBR0VfQklUX1BBVCAtIDIpKSB8CQlcCisJICgoKGkpICYgMikgPDwgKF9QQUdFX0JJVF9QQ0QgLSAxKSkgfAkJXAorCSAoKChpKSAmIDEpIDw8IF9QQUdFX0JJVF9QV1QpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2FjaGVtb2RlMnByb3R2YWwoZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtKQoreworCWlmIChsaWtlbHkocGNtID09IDApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gX19jYWNoZW1vZGUycHRlX3RibFtwY21dOworfQorc3RhdGljIGlubGluZSBwZ3Byb3RfdCBjYWNoZW1vZGUycGdwcm90KGVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSkKK3sKKwlyZXR1cm4gX19wZ3Byb3QoY2FjaGVtb2RlMnByb3R2YWwocGNtKSk7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gcGFnZV9jYWNoZV9tb2RlIHBncHJvdDJjYWNoZW1vZGUocGdwcm90X3QgcGdwcm90KQoreworCXVuc2lnbmVkIGxvbmcgbWFza2VkOworCisJbWFza2VkID0gcGdwcm90X3ZhbChwZ3Byb3QpICYgX1BBR0VfQ0FDSEVfTUFTSzsKKwlpZiAobGlrZWx5KG1hc2tlZCA9PSAwKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIF9fcHRlMmNhY2hlbW9kZV90YmxbX19wdGUyY21faWR4KG1hc2tlZCldOworfQorc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3RfNGtfMl9sYXJnZShwZ3Byb3RfdCBwZ3Byb3QpCit7CisJcGdwcm90X3QgbmV3OworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFsID0gcGdwcm90X3ZhbChwZ3Byb3QpOworCXBncHJvdF92YWwobmV3KSA9ICh2YWwgJiB+KF9QQUdFX1BBVCB8IF9QQUdFX1BBVF9MQVJHRSkpIHwKKwkJKCh2YWwgJiBfUEFHRV9QQVQpIDw8IChfUEFHRV9CSVRfUEFUX0xBUkdFIC0gX1BBR0VfQklUX1BBVCkpOworCXJldHVybiBuZXc7Cit9CitzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9sYXJnZV8yXzRrKHBncHJvdF90IHBncHJvdCkKK3sKKwlwZ3Byb3RfdCBuZXc7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwl2YWwgPSBwZ3Byb3RfdmFsKHBncHJvdCk7CisJcGdwcm90X3ZhbChuZXcpID0gKHZhbCAmIH4oX1BBR0VfUEFUIHwgX1BBR0VfUEFUX0xBUkdFKSkgfAorCQkJICAoKHZhbCAmIF9QQUdFX1BBVF9MQVJHRSkgPj4KKwkJCSAgIChfUEFHRV9CSVRfUEFUX0xBUkdFIC0gX1BBR0VfQklUX1BBVCkpOworCXJldHVybiBuZXc7Cit9CisKIAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmVlbXB0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmVlbXB0LmgKaW5kZXggNDAwODczNC4uOGYzMjcxODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByZWVtcHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmVlbXB0LmgKQEAgLTMwLDkgKzMwLDYgQEAKIC8qCiAgKiBtdXN0IGJlIG1hY3JvcyB0byBhdm9pZCBoZWFkZXIgcmVjdXJzaW9uIGhlbGwKICAqLwotI2RlZmluZSB0YXNrX3ByZWVtcHRfY291bnQocCkgXAotCSh0YXNrX3RocmVhZF9pbmZvKHApLT5zYXZlZF9wcmVlbXB0X2NvdW50ICYgflBSRUVNUFRfTkVFRF9SRVNDSEVEKQotCiAjZGVmaW5lIGluaXRfdGFza19wcmVlbXB0X2NvdW50KHApIGRvIHsgXAogCXRhc2tfdGhyZWFkX2luZm8ocCktPnNhdmVkX3ByZWVtcHRfY291bnQgPSBQUkVFTVBUX0RJU0FCTEVEOyBcCiB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBlYjcxZWM3Li5hMDkyYTBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTI3LDcgKzEyNyw3IEBACiAJLyogSW5kZXggaW50byBwZXJfY3B1IGxpc3Q6ICovCiAJdTE2CQkJY3B1X2luZGV4OwogCXUzMgkJCW1pY3JvY29kZTsKLX0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oU01QX0NBQ0hFX0JZVEVTKSkpOworfTsKIAogI2RlZmluZSBYODZfVkVORE9SX0lOVEVMCTAKICNkZWZpbmUgWDg2X1ZFTkRPUl9DWVJJWAkxCkBAIC0xNTEsNyArMTUxLDcgQEAKIGV4dGVybiBfX3UzMgkJCWNwdV9jYXBzX3NldFtOQ0FQSU5UU107CiAKICNpZmRlZiBDT05GSUdfU01QCi1ERUNMQVJFX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CitERUNMQVJFX1BFUl9DUFVfUkVBRF9NT1NUTFkoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CiAjZGVmaW5lIGNwdV9kYXRhKGNwdSkJCXBlcl9jcHUoY3B1X2luZm8sIGNwdSkKICNlbHNlCiAjZGVmaW5lIGNwdV9pbmZvCQlib290X2NwdV9kYXRhCkBAIC0zNzQsMTMgKzM3NCwxNCBAQAogCXU4IHJlc2VydmVkWzEyOF07CiB9OwogCi1zdHJ1Y3QgYm5kcmVnc19zdHJ1Y3QgewotCXU2NCBibmRyZWdzWzhdOworc3RydWN0IGJuZHJlZyB7CisJdTY0IGxvd2VyX2JvdW5kOworCXU2NCB1cHBlcl9ib3VuZDsKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCBibmRjc3Jfc3RydWN0IHsKLQl1NjQgY2ZnX3JlZ191OwotCXU2NCBzdGF0dXNfcmVnOworc3RydWN0IGJuZGNzciB7CisJdTY0IGJuZGNmZ3U7CisJdTY0IGJuZHN0YXR1czsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCB4c2F2ZV9oZHJfc3RydWN0IHsKQEAgLTM5NCw4ICszOTUsOCBAQAogCXN0cnVjdCB4c2F2ZV9oZHJfc3RydWN0IHhzYXZlX2hkcjsKIAlzdHJ1Y3QgeW1taF9zdHJ1Y3QgeW1taDsKIAlzdHJ1Y3QgbHdwX3N0cnVjdCBsd3A7Ci0Jc3RydWN0IGJuZHJlZ3Nfc3RydWN0IGJuZHJlZ3M7Ci0Jc3RydWN0IGJuZGNzcl9zdHJ1Y3QgYm5kY3NyOworCXN0cnVjdCBibmRyZWcgYm5kcmVnWzRdOworCXN0cnVjdCBibmRjc3IgYm5kY3NyOwogCS8qIG5ldyBwcm9jZXNzb3Igc3RhdGUgZXh0ZW5zaW9ucyB3aWxsIGdvIGhlcmUgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCwgYWxpZ25lZCAoNjQpKSk7CiAKQEAgLTg5Myw3ICs4OTQsMTMgQEAKIAogI2Vsc2UKIC8qCi0gKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZS4gNDdiaXRzIG1pbnVzIG9uZSBndWFyZCBwYWdlLgorICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemUuIDQ3Yml0cyBtaW51cyBvbmUgZ3VhcmQgcGFnZS4gIFRoZSBndWFyZAorICogcGFnZSBpcyBuZWNlc3Nhcnkgb24gSW50ZWwgQ1BVczogaWYgYSBTWVNDQUxMIGluc3RydWN0aW9uIGlzIGF0CisgKiB0aGUgaGlnaGVzdCBwb3NzaWJsZSBjYW5vbmljYWwgdXNlcnNwYWNlIGFkZHJlc3MsIHRoZW4gdGhhdAorICogc3lzY2FsbCB3aWxsIGVudGVyIHRoZSBrZXJuZWwgd2l0aCBhIG5vbi1jYW5vbmljYWwgcmV0dXJuCisgKiBhZGRyZXNzLCBhbmQgU1lTUkVUIHdpbGwgZXhwbG9kZSBkYW5nZXJvdXNseS4gIFdlIGF2b2lkIHRoaXMKKyAqIHBhcnRpY3VsYXIgcHJvYmxlbSBieSBwcmV2ZW50aW5nIGFueXRoaW5nIGZyb20gYmVpbmcgbWFwcGVkCisgKiBhdCB0aGUgbWF4aW11bSBjYW5vbmljYWwgYWRkcmVzcy4KICAqLwogI2RlZmluZSBUQVNLX1NJWkVfTUFYCSgoMVVMIDw8IDQ3KSAtIFBBR0VfU0laRSkKIApAQCAtOTUzLDYgKzk2MCwyNCBAQAogZXh0ZXJuIGludCBnZXRfdHNjX21vZGUodW5zaWduZWQgbG9uZyBhZHIpOwogZXh0ZXJuIGludCBzZXRfdHNjX21vZGUodW5zaWduZWQgaW50IHZhbCk7CiAKKy8qIFJlZ2lzdGVyL3VucmVnaXN0ZXIgYSBwcm9jZXNzJyBNUFggcmVsYXRlZCByZXNvdXJjZSAqLworI2RlZmluZSBNUFhfRU5BQkxFX01BTkFHRU1FTlQodHNrKQltcHhfZW5hYmxlX21hbmFnZW1lbnQoKHRzaykpCisjZGVmaW5lIE1QWF9ESVNBQkxFX01BTkFHRU1FTlQodHNrKQltcHhfZGlzYWJsZV9tYW5hZ2VtZW50KCh0c2spKQorCisjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9NUFgKK2V4dGVybiBpbnQgbXB4X2VuYWJsZV9tYW5hZ2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiBpbnQgbXB4X2Rpc2FibGVfbWFuYWdlbWVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbXB4X2VuYWJsZV9tYW5hZ2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSBpbnQgbXB4X2Rpc2FibGVfbWFuYWdlbWVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2X0lOVEVMX01QWCAqLworCiBleHRlcm4gdTE2IGFtZF9nZXRfbmJfaWQoaW50IGNwdSk7CiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgaHlwZXJ2aXNvcl9jcHVpZF9iYXNlKGNvbnN0IGNoYXIgKnNpZywgdWludDMyX3QgbGVhdmVzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA4Y2QyN2UwLi44Y2QxY2MzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMTUwLDYgKzE1MCw3IEBACiB9CiAKIHZvaWQgY3B1X2Rpc2FibGVfY29tbW9uKHZvaWQpOwordm9pZCBjcHVfZGllX2NvbW1vbih1bnNpZ25lZCBpbnQgY3B1KTsKIHZvaWQgbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpOwogdm9pZCBuYXRpdmVfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOwogdm9pZCBuYXRpdmVfc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggOTI5NTAxNi4uYTRlZmU0NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xODMsOCArMTgzLDIwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrX3dhaXQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewotCXdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKGxvY2spKQorCV9fdGlja2V0X3QgaGVhZCA9IEFDQ0VTU19PTkNFKGxvY2stPnRpY2tldHMuaGVhZCk7CisKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBfX3Jhd190aWNrZXRzIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPnRpY2tldHMpOworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGNoZWNrICJ1bmxvY2tlZCIgaW4gYSBsb29wLCB0bXAuaGVhZCA9PSBoZWFkCisJCSAqIGNhbiBiZSBmYWxzZSBwb3NpdGl2ZSBiZWNhdXNlIG9mIG92ZXJmbG93LgorCQkgKi8KKwkJaWYgKHRtcC5oZWFkID09ICh0bXAudGFpbCAmIH5USUNLRVRfU0xPV1BBVEhfRkxBRykgfHwKKwkJICAgIHRtcC5oZWFkICE9IGhlYWQpCisJCQlicmVhazsKKwogCQljcHVfcmVsYXgoKTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCmluZGV4IGQ3ZjNiM2IuLjc1MWJmNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCkBAIC03OSwxMiArNzksMTIgQEAKICNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KIAogLyogZnJhbWUgcG9pbnRlciBtdXN0IGJlIGxhc3QgZm9yIGdldF93Y2hhbiAqLwotI2RlZmluZSBTQVZFX0NPTlRFWFQgICAgInB1c2hmIDsgcHVzaHEgJSVyYnAgOyBtb3ZxICUlcnNpLCUlcmJwXG5cdCIKLSNkZWZpbmUgUkVTVE9SRV9DT05URVhUICJtb3ZxICUlcmJwLCUlcnNpIDsgcG9wcSAlJXJicCA7IHBvcGZcdCIKKyNkZWZpbmUgU0FWRV9DT05URVhUICAgICJwdXNocSAlJXJicCA7IG1vdnEgJSVyc2ksJSVyYnBcblx0IgorI2RlZmluZSBSRVNUT1JFX0NPTlRFWFQgIm1vdnEgJSVyYnAsJSVyc2kgOyBwb3BxICUlcmJwXHQiCiAKICNkZWZpbmUgX19FWFRSQV9DTE9CQkVSICBcCiAJLCAicmN4IiwgInJieCIsICJyZHgiLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIsIFwKLQkgICJyMTIiLCAicjEzIiwgInIxNCIsICJyMTUiCisJICAicjEyIiwgInIxMyIsICJyMTQiLCAicjE1IiwgImZsYWdzIgogCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCiAjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeQkJCQkJCQkgIFwKQEAgLTEwMCw3ICsxMDAsMTEgQEAKICNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X2lwYXJhbQogI2VuZGlmCS8qIENDX1NUQUNLUFJPVEVDVE9SICovCiAKLS8qIFNhdmUgcmVzdG9yZSBmbGFncyB0byBjbGVhciBoYW5kbGUgbGVha2luZyBOVCAqLworLyoKKyAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2F2ZSBvciByZXN0b3JlIGZsYWdzLCBiZWNhdXNlIGZsYWdzIGFyZSBhbHdheXMKKyAqIGNsZWFuIGluIGtlcm5lbCBtb2RlLCB3aXRoIHRoZSBwb3NzaWJsZSBleGNlcHRpb24gb2YgSU9QTC4gIEtlcm5lbCBJT1BMCisgKiBoYXMgbm8gZWZmZWN0LgorICovCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSBcCiAJYXNtIHZvbGF0aWxlKFNBVkVfQ09OVEVYVAkJCQkJICBcCiAJICAgICAibW92cSAlJXJzcCwlUFt0aHJlYWRyc3BdKCVbcHJldl0pXG5cdCIgLyogc2F2ZSBSU1AgKi8JICBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA4NTQwNTM4Li41NDdlMzQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTE0MSw3ICsxNDEsNyBAQAogLyogT25seSB1c2VkIGZvciA2NCBiaXQgKi8KICNkZWZpbmUgX1RJRl9ET19OT1RJRllfTUFTSwkJCQkJCVwKIAkoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9NQ0VfTk9USUZZIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwJXAotCSBfVElGX1VTRVJfUkVUVVJOX05PVElGWSkKKwkgX1RJRl9VU0VSX1JFVFVSTl9OT1RJRlkgfCBfVElGX1VQUk9CRSkKIAogLyogZmxhZ3MgdG8gY2hlY2sgaW4gX19zd2l0Y2hfdG8oKSAqLwogI2RlZmluZSBfVElGX1dPUktfQ1RYU1cJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggYmM4MzUyZS4uNzA3YWRjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC0zOSw2ICszOSw3IEBACiAKICNpZmRlZiBDT05GSUdfVFJBQ0lORwogYXNtbGlua2FnZSB2b2lkIHRyYWNlX3BhZ2VfZmF1bHQodm9pZCk7CisjZGVmaW5lIHRyYWNlX3N0YWNrX3NlZ21lbnQgc3RhY2tfc2VnbWVudAogI2RlZmluZSB0cmFjZV9kaXZpZGVfZXJyb3IgZGl2aWRlX2Vycm9yCiAjZGVmaW5lIHRyYWNlX2JvdW5kcyBib3VuZHMKICNkZWZpbmUgdHJhY2VfaW52YWxpZF9vcCBpbnZhbGlkX29wCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9iYXUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oCmluZGV4IDJkNjBhNzguLmZjODA4YjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oCkBAIC0zMyw4ICszMyw4IEBACiAgKiBFYWNoIG9mIHRoZSBkZXNjcmlwdG9ycyBpcyA2NCBieXRlcyBpbiBzaXplICg4KjY0ID0gNTEyIGJ5dGVzIGluIGEgc2V0KS4KICAqLwogCi0jZGVmaW5lIE1BWF9DUFVTX1BFUl9VVkhVQgkJNjQKLSNkZWZpbmUgTUFYX0NQVVNfUEVSX1NPQ0tFVAkJMzIKKyNkZWZpbmUgTUFYX0NQVVNfUEVSX1VWSFVCCQkxMjgKKyNkZWZpbmUgTUFYX0NQVVNfUEVSX1NPQ0tFVAkJNjQKICNkZWZpbmUgQURQX1NaCQkJCTY0IC8qIGhhcmR3YXJlLXByb3ZpZGVkIG1heC4gKi8KICNkZWZpbmUgVVZfQ1BVU19QRVJfQVMJCQkzMiAvKiBoYXJkd2FyZS1wcm92aWRlZCBtYXguICovCiAjZGVmaW5lIElURU1TX1BFUl9ERVNDCQkJOApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmd0b2QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZndG9kLmgKaW5kZXggM2MzMzY2Yy4uZTdlOTY4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmd0b2QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z3RvZC5oCkBAIC03MCw0ICs3MCwyMyBAQAogCSsrcy0+c2VxOwogfQogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCisjZGVmaW5lIFZHRVRDUFVfQ1BVX01BU0sgMHhmZmYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19nZXRjcHUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcDsKKworCS8qCisJICogTG9hZCBwZXIgQ1BVIGRhdGEgZnJvbSBHRFQuICBMU0wgaXMgZmFzdGVyIHRoYW4gUkRUU0NQIGFuZAorCSAqIHdvcmtzIG9uIGFsbCBDUFVzLgorCSAqLworCWFzbSgibHNsICUxLCUwIiA6ICI9ciIgKHApIDogInIiIChfX1BFUl9DUFVfU0VHKSk7CisKKwlyZXR1cm4gcDsKK30KKworI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KKwogI2VuZGlmIC8qIF9BU01fWDg2X1ZHVE9EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZzeXNjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92c3lzY2FsbC5oCmluZGV4IDJhNDZjYTcuLjZiYTY2ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZzeXNjYWxsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdnN5c2NhbGwuaApAQCAtNCwxNSArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogI2luY2x1ZGUgPHVhcGkvYXNtL3ZzeXNjYWxsLmg+CiAKLSNkZWZpbmUgVkdFVENQVV9SRFRTQ1AJMQotI2RlZmluZSBWR0VUQ1BVX0xTTAkyCi0KLS8qIGtlcm5lbCBzcGFjZSAod3JpdGVhYmxlKSAqLwotZXh0ZXJuIGludCB2Z2V0Y3B1X21vZGU7Ci1leHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKLQotI2luY2x1ZGUgPGFzbS92dmFyLmg+Ci0KKyNpZmRlZiBDT05GSUdfWDg2X1ZTWVNDQUxMX0VNVUxBVElPTgogZXh0ZXJuIHZvaWQgbWFwX3ZzeXNjYWxsKHZvaWQpOwogCiAvKgpAQCAtMjAsMjUgKzEyLDEyIEBACiAgKiBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZC4KICAqLwogZXh0ZXJuIGJvb2wgZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQotI2RlZmluZSBWR0VUQ1BVX0NQVV9NQVNLIDB4ZmZmCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fZ2V0Y3B1KHZvaWQpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1hcF92c3lzY2FsbCh2b2lkKSB7fQorc3RhdGljIGlubGluZSBib29sIGVtdWxhdGVfdnN5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQl1bnNpZ25lZCBpbnQgcDsKLQotCWlmIChWVkFSKHZnZXRjcHVfbW9kZSkgPT0gVkdFVENQVV9SRFRTQ1ApIHsKLQkJLyogTG9hZCBwZXIgQ1BVIGRhdGEgZnJvbSBSRFRTQ1AgKi8KLQkJbmF0aXZlX3JlYWRfdHNjcCgmcCk7Ci0JfSBlbHNlIHsKLQkJLyogTG9hZCBwZXIgQ1BVIGRhdGEgZnJvbSBHRFQgKi8KLQkJYXNtKCJsc2wgJTEsJTAiIDogIj1yIiAocCkgOiAiciIgKF9fUEVSX0NQVV9TRUcpKTsKLQl9Ci0KLQlyZXR1cm4gcDsKKwlyZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9WU1lTQ0FMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92dmFyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92dmFyLmgKaW5kZXggNWQyYjlhZC4uM2YzMmRmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdnZhci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Z2YXIuaApAQCAtNDQsOCArNDQsNiBAQAogCiAvKiBERUNMQVJFX1ZWQVIob2Zmc2V0LCB0eXBlLCBuYW1lKSAqLwogCi1ERUNMQVJFX1ZWQVIoMCwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZywgamlmZmllcykKLURFQ0xBUkVfVlZBUigxNiwgaW50LCB2Z2V0Y3B1X21vZGUpCiBERUNMQVJFX1ZWQVIoMTI4LCBzdHJ1Y3QgdnN5c2NhbGxfZ3RvZF9kYXRhLCB2c3lzY2FsbF9ndG9kX2RhdGEpCiAKICN1bmRlZiBERUNMQVJFX1ZWQVIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCmluZGV4IGU0NWU0ZGEuLmY1OGE5YzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtMTcyLDcgKzE3Miw2IEBACiAKIHN0cnVjdCBwY2lfZGV2Owogc3RydWN0IG1zaV9tc2c7Ci1zdHJ1Y3QgbXNpX2Rlc2M7CiAKIHN0cnVjdCB4ODZfbXNpX29wcyB7CiAJaW50ICgqc2V0dXBfbXNpX2lycXMpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSk7CkBAIC0xODMsOCArMTgyLDYgQEAKIAl2b2lkICgqdGVhcmRvd25fbXNpX2lycXMpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCXZvaWQgKCpyZXN0b3JlX21zaV9pcnFzKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAlpbnQgICgqc2V0dXBfaHBldF9tc2kpKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBpZCk7Ci0JdTMyICgqbXNpX21hc2tfaXJxKShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZyk7Ci0JdTMyICgqbXNpeF9tYXNrX2lycSkoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgZmxhZyk7CiB9OwogCiBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL21zci1pbmRleC5oCmluZGV4IGUyMTMzMWNlLi44ZjAyZjY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vbXNyLWluZGV4LmgKQEAgLTIwNiw2ICsyMDYsNyBAQAogI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BfUkVHX01BU0sJKCgxVUw8PE1TUl9BTUQ2NF9JQlNPUF9SRUdfQ09VTlQpLTEpCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNDVEwJCTB4YzAwMTEwM2EKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0JSVEFSR0VUCQkweGMwMDExMDNiCisjZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUERBVEE0CQkweGMwMDExMDNkCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNfUkVHX0NPVU5UX01BWAk4IC8qIGluY2x1ZGVzIE1TUl9BTUQ2NF9JQlNCUlRBUkdFVCAqLwogCiAvKiBGYW0gMTZoIE1TUnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCA4ZjFlNzc0Li41ZDQ1MDJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCkBAIC0yOCw4ICsyOCw3IEBACiBvYmotJChDT05GSUdfWDg2XzY0KQkrPSBzeXNfeDg2XzY0Lm8geDg2NjRfa3N5bXNfNjQubwogb2JqLSQoQ09ORklHX1g4Nl82NCkJKz0gbWNvdW50XzY0Lm8KIG9iai15CQkJKz0gc3lzY2FsbF8kKEJJVFMpLm8gdnN5c2NhbGxfZ3RvZC5vCi1vYmotJChDT05GSUdfWDg2XzY0KQkrPSB2c3lzY2FsbF82NC5vCi1vYmotJChDT05GSUdfWDg2XzY0KQkrPSB2c3lzY2FsbF9lbXVfNjQubworb2JqLSQoQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04pCSs9IHZzeXNjYWxsXzY0Lm8gdnN5c2NhbGxfZW11XzY0Lm8KIG9iai0kKENPTkZJR19YODZfRVNQRklYNjQpCSs9IGVzcGZpeF82NC5vCiBvYmotJChDT05GSUdfU1lTRlMpCSs9IGtzeXNmcy5vCiBvYmoteQkJCSs9IGJvb3RmbGFnLm8gZTgyMC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMKaW5kZXggZjA0ZGJiMy4uNWNhZWQxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9uYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfbmIuYwpAQCAtMjEsNiArMjEsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YzKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX00xMEhfRjMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0YzKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX05CX0YzKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX00zMEhfTkJfRjMpIH0sCiAJe30KQEAgLTMwLDYgKzMxLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWRfbmJfbGlua19pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GNCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0Y0KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTkJfRjQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTTMwSF9OQl9GNCkgfSwKIAl7fQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19udW1hY2hpcC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19udW1hY2hpcC5jCmluZGV4IDQxMjhiNWYuLmMyZmQyMWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbnVtYWNoaXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX251bWFjaGlwLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaWQ7CiAKIAlyZG1zcmwoTVNSX0ZBTTEwSF9OT0RFX0lELCB2YWx1ZSk7Ci0JaWQgPSAoKHggPj4gMjQpICYgMHhmZlUpIHwgKCh2YWx1ZSA8PCAyKSAmIDB4M2YwMFUpOworCWlkID0gKCh4ID4+IDI0KSAmIDB4ZmZVKSB8ICgodmFsdWUgPDwgMikgJiAweGZmMDBVKTsKIAogCXJldHVybiBpZDsKIH0KQEAgLTE0NSw3ICsxNDUsNyBAQAogCiBzdGF0aWMgdm9pZCBudW1hY2hpcF9zZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCiB7Ci0JX19kZWZhdWx0X3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9TRUxGLCB2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7CisJYXBpY193cml0ZShBUElDX1NFTEZfSVBJLCB2ZWN0b3IpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBudW1hY2hpcF9wcm9iZSh2b2lkKQpAQCAtMTUzLDIwICsxNTMsOCBAQAogCXJldHVybiBhcGljID09ICZhcGljX251bWFjaGlwOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWFwX2NzcnModm9pZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPICJOdW1hQ2hpcDogTWFwcGluZyBsb2NhbCBDU1Igc3BhY2UgKCUwMTZsbHggLSAlMDE2bGx4KVxuIiwKLQkJTlVNQUNISVBfTENTUl9CQVNFLCBOVU1BQ0hJUF9MQ1NSX0JBU0UgKyBOVU1BQ0hJUF9MQ1NSX1NJWkUgLSAxKTsKLQlpbml0X2V4dHJhX21hcHBpbmdfdWMoTlVNQUNISVBfTENTUl9CQVNFLCBOVU1BQ0hJUF9MQ1NSX1NJWkUpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiTnVtYUNoaXA6IE1hcHBpbmcgZ2xvYmFsIENTUiBzcGFjZSAoJTAxNmxseCAtICUwMTZsbHgpXG4iLAotCQlOVU1BQ0hJUF9HQ1NSX0JBU0UsIE5VTUFDSElQX0dDU1JfQkFTRSArIE5VTUFDSElQX0dDU1JfU0laRSAtIDEpOwotCWluaXRfZXh0cmFfbWFwcGluZ191YyhOVU1BQ0hJUF9HQ1NSX0JBU0UsIE5VTUFDSElQX0dDU1JfU0laRSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGZpeHVwX2NwdV9pZChzdHJ1Y3QgY3B1aW5mb194ODYgKmMsIGludCBub2RlKQogewotCiAJaWYgKGMtPnBoeXNfcHJvY19pZCAhPSBub2RlKSB7CiAJCWMtPnBoeXNfcHJvY19pZCA9IG5vZGU7CiAJCXBlcl9jcHUoY3B1X2xsY19pZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IG5vZGU7CkBAIC0xNzUsMTkgKzE2MywxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBudW1hY2hpcF9zeXN0ZW1faW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGludCB2YWw7Ci0KIAlpZiAoIW51bWFjaGlwX3N5c3RlbSkKIAkJcmV0dXJuIDA7CiAKKwlpbml0X2V4dHJhX21hcHBpbmdfdWMoTlVNQUNISVBfTENTUl9CQVNFLCBOVU1BQ0hJUF9MQ1NSX1NJWkUpOworCWluaXRfZXh0cmFfbWFwcGluZ191YyhOVU1BQ0hJUF9HQ1NSX0JBU0UsIE5VTUFDSElQX0dDU1JfU0laRSk7CisKIAl4ODZfY3B1aW5pdC5maXh1cF9jcHVfaWQgPSBmaXh1cF9jcHVfaWQ7CiAJeDg2X2luaXQucGNpLmFyY2hfaW5pdCA9IHBjaV9udW1hY2hpcF9pbml0OwogCi0JbWFwX2NzcnMoKTsKLQotCXZhbCA9IHJlYWRfbGNzcihDU1JfRzBfTk9ERV9JRFMpOwotCXByaW50ayhLRVJOX0lORk8gIk51bWFDaGlwOiBMb2NhbCBOb2RlSUQgPSAlMDh4XG4iLCB2YWwpOwotCiAJcmV0dXJuIDA7CiB9CiBlYXJseV9pbml0Y2FsbChudW1hY2hpcF9zeXN0ZW1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggMTE4M2Q1NC4uN2ZmZTBhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMzE1OCw3ICszMTU4LDcgQEAKIAltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOwogCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSUQoZGVzdCk7CiAKLQlfX3dyaXRlX21zaV9tc2coZGF0YS0+bXNpX2Rlc2MsICZtc2cpOworCV9fcGNpX3dyaXRlX21zaV9tc2coZGF0YS0+bXNpX2Rlc2MsICZtc2cpOwogCiAJcmV0dXJuIElSUV9TRVRfTUFTS19PS19OT0NPUFk7CiB9CkBAIC0zMTY5LDggKzMxNjksOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaV9jaGlwID0gewogCS5uYW1lCQkJPSAiUENJLU1TSSIsCi0JLmlycV91bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9tYXNrCQk9IG1hc2tfbXNpX2lycSwKKwkuaXJxX3VubWFzawkJPSBwY2lfbXNpX3VubWFza19pcnEsCisJLmlycV9tYXNrCQk9IHBjaV9tc2lfbWFza19pcnEsCiAJLmlycV9hY2sJCT0gYWNrX2FwaWNfZWRnZSwKIAkuaXJxX3NldF9hZmZpbml0eQk9IG1zaV9zZXRfYWZmaW5pdHksCiAJLmlycV9yZXRyaWdnZXIJCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCkBAIC0zMTk2LDcgKzMxOTYsNyBAQAogCSAqIE1TSSBtZXNzYWdlIGRlbm90ZXMgYSBjb250aWd1b3VzIGdyb3VwIG9mIElSUXMsIHdyaXR0ZW4gZm9yIDB0aCBJUlEuCiAJICovCiAJaWYgKCFpcnFfb2Zmc2V0KQotCQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlzZXR1cF9yZW1hcHBlZF9pcnEoaXJxLCBpcnFfY2ZnKGlycSksIGNoaXApOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCmluZGV4IGU3Yzc5OGIuLjRmOTM1OWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCkBAIC00OCw3ICs0OCw2IEBACiAKICNkZWZpbmUgRU5UUlkoZW50cnkpIE9GRlNFVChwdF9yZWdzXyAjIyBlbnRyeSwgcHRfcmVncywgZW50cnkpCiAJRU5UUlkoYngpOwotCUVOVFJZKGJ4KTsKIAlFTlRSWShjeCk7CiAJRU5UUlkoZHgpOwogCUVOVFJZKHNwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDgxM2QyOWQuLjE1YzVkZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtNTY2LDYgKzU2NiwxNyBAQAogCiAJaWYgKCFjLT54ODZfbW9kZWxfaWRbMF0pCiAJCXN0cmNweShjLT54ODZfbW9kZWxfaWQsICJIYW1tZXIiKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwkvKgorCSAqIERpc2FibGUgVExCIGZsdXNoIGZpbHRlciBieSBzZXR0aW5nIEhXQ1IuRkZESVMgb24gSzgKKwkgKiBiaXQgNiBvZiBtc3IgQzAwMV8wMDE1CisJICoKKwkgKiBFcnJhdGEgNjMgZm9yIFNILUIzIHN0ZXBwaW5ncworCSAqIEVycmF0YSAxMjIgZm9yIGFsbCBzdGVwcGluZ3MgKEYrIGhhdmUgaXQgZGlzYWJsZWQgYnkgZGVmYXVsdCkKKwkgKi8KKwltc3Jfc2V0X2JpdChNU1JfSzdfSFdDUiwgNik7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9hbWRfZ2goc3RydWN0IGNwdWluZm9feDg2ICpjKQpAQCAtNjM2LDE4ICs2NDcsNiBAQAogewogCXUzMiBkdW1teTsKIAotI2lmZGVmIENPTkZJR19TTVAKLQkvKgotCSAqIERpc2FibGUgVExCIGZsdXNoIGZpbHRlciBieSBzZXR0aW5nIEhXQ1IuRkZESVMgb24gSzgKLQkgKiBiaXQgNiBvZiBtc3IgQzAwMV8wMDE1Ci0JICoKLQkgKiBFcnJhdGEgNjMgZm9yIFNILUIzIHN0ZXBwaW5ncwotCSAqIEVycmF0YSAxMjIgZm9yIGFsbCBzdGVwcGluZ3MgKEYrIGhhdmUgaXQgZGlzYWJsZWQgYnkgZGVmYXVsdCkKLQkgKi8KLQlpZiAoYy0+eDg2ID09IDB4ZikKLQkJbXNyX3NldF9iaXQoTVNSX0s3X0hXQ1IsIDYpOwotI2VuZGlmCi0KIAllYXJseV9pbml0X2FtZChjKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCA0YjRmNzhjLi5jNjA0OTY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTE0Niw2ICsxNDYsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB4ODZfeHNhdmVfc2V0dXAoY2hhciAqcykKIHsKKwlpZiAoc3RybGVuKHMpKQorCQlyZXR1cm4gMDsKIAlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1hTQVZFKTsKIAlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1hTQVZFT1BUKTsKIAlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1hTQVZFUyk7CkBAIC05NTYsMTQgKzk1OCw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci1zdGF0aWMgdm9pZCB2Z2V0Y3B1X3NldF9tb2RlKHZvaWQpCi17Ci0JaWYgKGNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX1JEVFNDUCkpCi0JCXZnZXRjcHVfbW9kZSA9IFZHRVRDUFVfUkRUU0NQOwotCWVsc2UKLQkJdmdldGNwdV9tb2RlID0gVkdFVENQVV9MU0w7Ci19Ci0KICNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KIC8qIE1heSBub3QgYmUgX19pbml0OiBjYWxsZWQgZHVyaW5nIHJlc3VtZSAqLwogc3RhdGljIHZvaWQgc3lzY2FsbDMyX2NwdV9pbml0KHZvaWQpCkBAIC0xMDA2LDggKzEwMDAsNiBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKIAlzeXNlbnRlcl9zZXR1cCgpOwogCWVuYWJsZV9zZXBfY3B1KCk7Ci0jZWxzZQotCXZnZXRjcHVfc2V0X21vZGUoKTsKICNlbmRpZgogCWNwdV9kZXRlY3RfdGxiKCZib290X2NwdV9kYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbnRlcm5hbC5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWludGVybmFsLmgKaW5kZXggMDllZGQwYi4uMTBiNDY5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWludGVybmFsLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWludGVybmFsLmgKQEAgLTMsNiArMyw4IEBACiAKIGVudW0gc2V2ZXJpdHlfbGV2ZWwgewogCU1DRV9OT19TRVZFUklUWSwKKwlNQ0VfREVGRVJSRURfU0VWRVJJVFksCisJTUNFX1VDTkFfU0VWRVJJVFkgPSBNQ0VfREVGRVJSRURfU0VWRVJJVFksCiAJTUNFX0tFRVBfU0VWRVJJVFksCiAJTUNFX1NPTUVfU0VWRVJJVFksCiAJTUNFX0FPX1NFVkVSSVRZLApAQCAtMjEsNyArMjMsNyBAQAogCWNoYXIJCQlhdHRybmFtZVtBVFRSX0xFTl07CS8qIGF0dHJpYnV0ZSBuYW1lICovCiB9OwogCi1pbnQgbWNlX3NldmVyaXR5KHN0cnVjdCBtY2UgKmEsIGludCB0b2xlcmFudCwgY2hhciAqKm1zZyk7CitpbnQgbWNlX3NldmVyaXR5KHN0cnVjdCBtY2UgKmEsIGludCB0b2xlcmFudCwgY2hhciAqKm1zZywgYm9vbCBpc19leGNwKTsKIHN0cnVjdCBkZW50cnkgKm1jZV9nZXRfZGVidWdmc19kaXIodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QgbWNlX2JhbmsgKm1jZV9iYW5rczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1zZXZlcml0eS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLXNldmVyaXR5LmMKaW5kZXggYzM3MGUxYy4uOGJiNDMzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLXNldmVyaXR5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLXNldmVyaXR5LmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogZW51bSBjb250ZXh0IHsgSU5fS0VSTkVMID0gMSwgSU5fVVNFUiA9IDIgfTsKIGVudW0gc2VyIHsgU0VSX1JFUVVJUkVEID0gMSwgTk9fU0VSID0gMiB9OworZW51bSBleGNlcHRpb24geyBFWENQX0NPTlRFWFQgPSAxLCBOT19FWENQID0gMiB9OwogCiBzdGF0aWMgc3RydWN0IHNldmVyaXR5IHsKIAl1NjQgbWFzazsKQEAgLTQwLDYgKzQxLDcgQEAKIAl1bnNpZ25lZCBjaGFyIG1jZ3JlczsKIAl1bnNpZ25lZCBjaGFyIHNlcjsKIAl1bnNpZ25lZCBjaGFyIGNvbnRleHQ7CisJdW5zaWduZWQgY2hhciBleGNwOwogCXVuc2lnbmVkIGNoYXIgY292ZXJlZDsKIAljaGFyICptc2c7CiB9IHNldmVyaXRpZXNbXSA9IHsKQEAgLTQ4LDYgKzUwLDggQEAKICNkZWZpbmUgIFVTRVIJCS5jb250ZXh0ID0gSU5fVVNFUgogI2RlZmluZSAgU0VSCQkuc2VyID0gU0VSX1JFUVVJUkVECiAjZGVmaW5lICBOT1NFUgkJLnNlciA9IE5PX1NFUgorI2RlZmluZSAgRVhDUAkJLmV4Y3AgPSBFWENQX0NPTlRFWFQKKyNkZWZpbmUgIE5PRVhDUAkJLmV4Y3AgPSBOT19FWENQCiAjZGVmaW5lICBCSVRDTFIoeCkJLm1hc2sgPSB4LCAucmVzdWx0ID0gMAogI2RlZmluZSAgQklUU0VUKHgpCS5tYXNrID0geCwgLnJlc3VsdCA9IHgKICNkZWZpbmUgIE1DR01BU0soeCwgeSkJLm1jZ21hc2sgPSB4LCAubWNncmVzID0geQpAQCAtNjIsNyArNjYsNyBAQAogCQkpLAogCU1DRVNFVigKIAkJTk8sICJOb3QgZW5hYmxlZCIsCi0JCUJJVENMUihNQ0lfU1RBVFVTX0VOKQorCQlFWENQLCBCSVRDTFIoTUNJX1NUQVRVU19FTikKIAkJKSwKIAlNQ0VTRVYoCiAJCVBBTklDLCAiUHJvY2Vzc29yIGNvbnRleHQgY29ycnVwdCIsCkBAIC03MSwxNiArNzUsMjAgQEAKIAkvKiBXaGVuIE1DSVAgaXMgbm90IHNldCBzb21ldGhpbmcgaXMgdmVyeSBjb25mdXNlZCAqLwogCU1DRVNFVigKIAkJUEFOSUMsICJNQ0lQIG5vdCBzZXQgaW4gTUNBIGhhbmRsZXIiLAotCQlNQ0dNQVNLKE1DR19TVEFUVVNfTUNJUCwgMCkKKwkJRVhDUCwgTUNHTUFTSyhNQ0dfU1RBVFVTX01DSVAsIDApCiAJCSksCiAJLyogTmVpdGhlciByZXR1cm4gbm90IGVycm9yIElQIC0tIG5vIGNoYW5jZSB0byByZWNvdmVyIC0+IFBBTklDICovCiAJTUNFU0VWKAogCQlQQU5JQywgIk5laXRoZXIgcmVzdGFydCBub3IgZXJyb3IgSVAiLAotCQlNQ0dNQVNLKE1DR19TVEFUVVNfUklQVnxNQ0dfU1RBVFVTX0VJUFYsIDApCisJCUVYQ1AsIE1DR01BU0soTUNHX1NUQVRVU19SSVBWfE1DR19TVEFUVVNfRUlQViwgMCkKIAkJKSwKIAlNQ0VTRVYoCiAJCVBBTklDLCAiSW4ga2VybmVsIGFuZCBubyByZXN0YXJ0IElQIiwKLQkJS0VSTkVMLCBNQ0dNQVNLKE1DR19TVEFUVVNfUklQViwgMCkKKwkJRVhDUCwgS0VSTkVMLCBNQ0dNQVNLKE1DR19TVEFUVVNfUklQViwgMCkKKwkJKSwKKwlNQ0VTRVYoCisJCURFRkVSUkVELCAiRGVmZXJyZWQgZXJyb3IiLAorCQlOT1NFUiwgTUFTSyhNQ0lfU1RBVFVTX1VDfE1DSV9TVEFUVVNfREVGRVJSRUR8TUNJX1NUQVRVU19QT0lTT04sIE1DSV9TVEFUVVNfREVGRVJSRUQpCiAJCSksCiAJTUNFU0VWKAogCQlLRUVQLCAiQ29ycmVjdGVkIGVycm9yIiwKQEAgLTg5LDcgKzk3LDcgQEAKIAogCS8qIGlnbm9yZSBPVkVSIGZvciBVQ05BICovCiAJTUNFU0VWKAotCQlLRUVQLCAiVW5jb3JyZWN0ZWQgbm8gYWN0aW9uIHJlcXVpcmVkIiwKKwkJVUNOQSwgIlVuY29ycmVjdGVkIG5vIGFjdGlvbiByZXF1aXJlZCIsCiAJCVNFUiwgTUFTSyhNQ0lfVUNfU0FSLCBNQ0lfU1RBVFVTX1VDKQogCQkpLAogCU1DRVNFVigKQEAgLTE3OCw4ICsxODYsOSBAQAogCXJldHVybiAoKG0tPmNzICYgMykgPT0gMykgPyBJTl9VU0VSIDogSU5fS0VSTkVMOwogfQogCi1pbnQgbWNlX3NldmVyaXR5KHN0cnVjdCBtY2UgKm0sIGludCB0b2xlcmFudCwgY2hhciAqKm1zZykKK2ludCBtY2Vfc2V2ZXJpdHkoc3RydWN0IG1jZSAqbSwgaW50IHRvbGVyYW50LCBjaGFyICoqbXNnLCBib29sIGlzX2V4Y3ApCiB7CisJZW51bSBleGNlcHRpb24gZXhjcCA9IChpc19leGNwID8gRVhDUF9DT05URVhUIDogTk9fRVhDUCk7CiAJZW51bSBjb250ZXh0IGN0eCA9IGVycm9yX2NvbnRleHQobSk7CiAJc3RydWN0IHNldmVyaXR5ICpzOwogCkBAIC0xOTQsNiArMjAzLDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAocy0+Y29udGV4dCAmJiBjdHggIT0gcy0+Y29udGV4dCkKIAkJCWNvbnRpbnVlOworCQlpZiAocy0+ZXhjcCAmJiBleGNwICE9IHMtPmV4Y3ApCisJCQljb250aW51ZTsKIAkJaWYgKG1zZykKIAkJCSptc2cgPSBzLT5tc2c7CiAJCXMtPmNvdmVyZWQgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCA2MWE5NjY4Y2UuLmQyYzYxMTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC0yOTIsMTAgKzI5MiwxMCBAQAogCiAjZGVmaW5lIFBBTklDX1RJTUVPVVQgNSAvKiA1IHNlY29uZHMgKi8KIAotc3RhdGljIGF0b21pY190IG1jZV9wYW5pY2VkOworc3RhdGljIGF0b21pY190IG1jZV9wYW5pY2tlZDsKIAogc3RhdGljIGludCBmYWtlX3BhbmljOwotc3RhdGljIGF0b21pY190IG1jZV9mYWtlX3BhbmljZWQ7CitzdGF0aWMgYXRvbWljX3QgbWNlX2Zha2VfcGFuaWNrZWQ7CiAKIC8qIFBhbmljIGluIHByb2dyZXNzLiBFbmFibGUgaW50ZXJydXB0cyBhbmQgd2FpdCBmb3IgZmluYWwgSVBJICovCiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYW5pYyh2b2lkKQpAQCAtMzE5LDcgKzMxOSw3IEBACiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSBvbmx5IG9uZSBDUFUgcnVucyBpbiBtYWNoaW5lIGNoZWNrIHBhbmljCiAJCSAqLwotCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJm1jZV9wYW5pY2VkKSA+IDEpCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmbWNlX3Bhbmlja2VkKSA+IDEpCiAJCQl3YWl0X2Zvcl9wYW5pYygpOwogCQliYXJyaWVyKCk7CiAKQEAgLTMyNyw3ICszMjcsNyBAQAogCQljb25zb2xlX3ZlcmJvc2UoKTsKIAl9IGVsc2UgewogCQkvKiBEb24ndCBsb2cgdG9vIG11Y2ggZm9yIGZha2UgcGFuaWMgKi8KLQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZtY2VfZmFrZV9wYW5pY2VkKSA+IDEpCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmbWNlX2Zha2VfcGFuaWNrZWQpID4gMSkKIAkJCXJldHVybjsKIAl9CiAJLyogRmlyc3QgcHJpbnQgY29ycmVjdGVkIG9uZXMgdGhhdCBhcmUgc3RpbGwgdW5sb2dnZWQgKi8KQEAgLTU3NSw2ICs1NzUsMzcgQEAKIAl9CiB9CiAKK3N0YXRpYyBib29sIG1lbW9yeV9lcnJvcihzdHJ1Y3QgbWNlICptKQoreworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZib290X2NwdV9kYXRhOworCisJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpIHsKKwkJLyoKKwkJICogY29taW5nIHNvb24KKwkJICovCisJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgeworCQkvKgorCQkgKiBJbnRlbCBTRE0gVm9sdW1lIDNCIC0gMTUuOS4yIENvbXBvdW5kIEVycm9yIENvZGVzCisJCSAqCisJCSAqIEJpdCA3IG9mIHRoZSBNQ0FDT0QgZmllbGQgb2YgSUEzMl9NQ2lfU1RBVFVTIGlzIHVzZWQgZm9yCisJCSAqIGluZGljYXRpbmcgYSBtZW1vcnkgZXJyb3IuIEJpdCA4IGlzIHVzZWQgZm9yIGluZGljYXRpbmcgYQorCQkgKiBjYWNoZSBoaWVyYXJjaHkgZXJyb3IuIFRoZSBjb21iaW5hdGlvbiBvZiBiaXQgMiBhbmQgYml0IDMKKwkJICogaXMgdXNlZCBmb3IgaW5kaWNhdGluZyBhIGBnZW5lcmljJyBjYWNoZSBoaWVyYXJjaHkgZXJyb3IKKwkJICogQnV0IHdlIGNhbid0IGp1c3QgYmxpbmRseSBjaGVjayB0aGUgYWJvdmUgYml0cywgYmVjYXVzZSBpZgorCQkgKiBiaXQgMTEgaXMgc2V0LCB0aGVuIGl0IGlzIGEgYnVzL2ludGVyY29ubmVjdCBlcnJvciAtIGFuZAorCQkgKiBlaXRoZXIgd2F5IHRoZSBhYm92ZSBiaXRzIGp1c3QgZ2l2ZXMgbW9yZSBkZXRhaWwgb24gd2hhdAorCQkgKiBidXMvaW50ZXJjb25uZWN0IGVycm9yIGhhcHBlbmVkLiBOb3RlIHRoYXQgYml0IDEyIGNhbiBiZQorCQkgKiBpZ25vcmVkLCBhcyBpdCdzIHRoZSAiZmlsdGVyIiBiaXQuCisJCSAqLworCQlyZXR1cm4gKG0tPnN0YXR1cyAmIDB4ZWY4MCkgPT0gQklUKDcpIHx8CisJCSAgICAgICAobS0+c3RhdHVzICYgMHhlZjAwKSA9PSBCSVQoOCkgfHwKKwkJICAgICAgIChtLT5zdGF0dXMgJiAweGVmZmMpID09IDB4YzsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkLCBtY2VfcG9sbF9jb3VudCk7CiAKIC8qCkBAIC01OTUsNiArNjI2LDcgQEAKIHZvaWQgbWFjaGluZV9jaGVja19wb2xsKGVudW0gbWNwX2ZsYWdzIGZsYWdzLCBtY2VfYmFua3NfdCAqYikKIHsKIAlzdHJ1Y3QgbWNlIG07CisJaW50IHNldmVyaXR5OwogCWludCBpOwogCiAJdGhpc19jcHVfaW5jKG1jZV9wb2xsX2NvdW50KTsKQEAgLTYzMCw2ICs2NjIsMjAgQEAKIAogCQlpZiAoIShmbGFncyAmIE1DUF9USU1FU1RBTVApKQogCQkJbS50c2MgPSAwOworCisJCXNldmVyaXR5ID0gbWNlX3NldmVyaXR5KCZtLCBtY2FfY2ZnLnRvbGVyYW50LCBOVUxMLCBmYWxzZSk7CisKKwkJLyoKKwkJICogSW4gdGhlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGhhdmUgYSB2YWxpZCBhZGRyZXNzIGFmdGVyIGFsbCwKKwkJICogZG8gbm90IGFkZCBpdCBpbnRvIHRoZSByaW5nIGJ1ZmZlci4KKwkJICovCisJCWlmIChzZXZlcml0eSA9PSBNQ0VfREVGRVJSRURfU0VWRVJJVFkgJiYgbWVtb3J5X2Vycm9yKCZtKSkgeworCQkJaWYgKG0uc3RhdHVzICYgTUNJX1NUQVRVU19BRERSVikgeworCQkJCW1jZV9yaW5nX2FkZChtLmFkZHIgPj4gUEFHRV9TSElGVCk7CisJCQkJbWNlX3NjaGVkdWxlX3dvcmsoKTsKKwkJCX0KKwkJfQorCiAJCS8qCiAJCSAqIERvbid0IGdldCB0aGUgSVAgaGVyZSBiZWNhdXNlIGl0J3MgdW5saWtlbHkgdG8KIAkJICogaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZSBhY3R1YWwgZXJyb3IgbG9jYXRpb24uCkBAIC02NjgsNyArNzE0LDggQEAKIAkJCWlmIChxdWlya19ub193YXlfb3V0KQogCQkJCXF1aXJrX25vX3dheV9vdXQoaSwgbSwgcmVncyk7CiAJCX0KLQkJaWYgKG1jZV9zZXZlcml0eShtLCBtY2FfY2ZnLnRvbGVyYW50LCBtc2cpID49IE1DRV9QQU5JQ19TRVZFUklUWSkKKwkJaWYgKG1jZV9zZXZlcml0eShtLCBtY2FfY2ZnLnRvbGVyYW50LCBtc2csIHRydWUpID49CisJCSAgICBNQ0VfUEFOSUNfU0VWRVJJVFkpCiAJCQlyZXQgPSAxOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNjk3LDcgKzc0NCw3IEBACiAJICogbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZS4KIAkgKi8KIAlybWIoKTsKLQlpZiAoYXRvbWljX3JlYWQoJm1jZV9wYW5pY2VkKSkKKwlpZiAoYXRvbWljX3JlYWQoJm1jZV9wYW5pY2tlZCkpCiAJCXdhaXRfZm9yX3BhbmljKCk7CiAJaWYgKCFtY2FfY2ZnLm1vbmFyY2hfdGltZW91dCkKIAkJZ290byBvdXQ7CkBAIC03NTQsNyArODAxLDcgQEAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWludCBzZXZlcml0eSA9IG1jZV9zZXZlcml0eSgmcGVyX2NwdShtY2VzX3NlZW4sIGNwdSksCiAJCQkJCSAgICBtY2FfY2ZnLnRvbGVyYW50LAotCQkJCQkgICAgJm5tc2cpOworCQkJCQkgICAgJm5tc2csIHRydWUpOwogCQlpZiAoc2V2ZXJpdHkgPiBnbG9iYWxfd29yc3QpIHsKIAkJCW1zZyA9IG5tc2c7CiAJCQlnbG9iYWxfd29yc3QgPSBzZXZlcml0eTsKQEAgLTEwOTUsMTMgKzExNDIsMTQgQEAKIAkJICovCiAJCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLLCBMT0NLREVQX05PV19VTlJFTElBQkxFKTsKIAotCQlzZXZlcml0eSA9IG1jZV9zZXZlcml0eSgmbSwgY2ZnLT50b2xlcmFudCwgTlVMTCk7CisJCXNldmVyaXR5ID0gbWNlX3NldmVyaXR5KCZtLCBjZmctPnRvbGVyYW50LCBOVUxMLCB0cnVlKTsKIAogCQkvKgotCQkgKiBXaGVuIG1hY2hpbmUgY2hlY2sgd2FzIGZvciBjb3JyZWN0ZWQgaGFuZGxlciBkb24ndCB0b3VjaCwKLQkJICogdW5sZXNzIHdlJ3JlIHBhbmljaW5nLgorCQkgKiBXaGVuIG1hY2hpbmUgY2hlY2sgd2FzIGZvciBjb3JyZWN0ZWQvZGVmZXJyZWQgaGFuZGxlciBkb24ndAorCQkgKiB0b3VjaCwgdW5sZXNzIHdlJ3JlIHBhbmljaW5nLgogCQkgKi8KLQkJaWYgKHNldmVyaXR5ID09IE1DRV9LRUVQX1NFVkVSSVRZICYmICFub193YXlfb3V0KQorCQlpZiAoKHNldmVyaXR5ID09IE1DRV9LRUVQX1NFVkVSSVRZIHx8CisJCSAgICAgc2V2ZXJpdHkgPT0gTUNFX1VDTkFfU0VWRVJJVFkpICYmICFub193YXlfb3V0KQogCQkJY29udGludWU7CiAJCV9fc2V0X2JpdChpLCB0b2NsZWFyKTsKIAkJaWYgKHNldmVyaXR5ID09IE1DRV9OT19TRVZFUklUWSkgewpAQCAtMjUyMCw3ICsyNTY4LDcgQEAKIHN0YXRpYyB2b2lkIG1jZV9yZXNldCh2b2lkKQogewogCWNwdV9taXNzaW5nID0gMDsKLQlhdG9taWNfc2V0KCZtY2VfZmFrZV9wYW5pY2VkLCAwKTsKKwlhdG9taWNfc2V0KCZtY2VfZmFrZV9wYW5pY2tlZCwgMCk7CiAJYXRvbWljX3NldCgmbWNlX2V4ZWN1dGluZywgMCk7CiAJYXRvbWljX3NldCgmbWNlX2NhbGxpbiwgMCk7CiAJYXRvbWljX3NldCgmZ2xvYmFsX253bywgMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKaW5kZXggNWQ0OTk5Zi4uZjFjMzc2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYwpAQCAtMjEyLDEyICsyMTIsMTIgQEAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXUzMiBsb3cgPSAwLCBoaWdoID0gMCwgYWRkcmVzcyA9IDA7CiAJdW5zaWduZWQgaW50IGJhbmssIGJsb2NrOwotCWludCBvZmZzZXQgPSAtMTsKKwlpbnQgb2Zmc2V0ID0gLTEsIG5ldzsKIAogCWZvciAoYmFuayA9IDA7IGJhbmsgPCBtY2FfY2ZnLmJhbmtzOyArK2JhbmspIHsKIAkJZm9yIChibG9jayA9IDA7IGJsb2NrIDwgTlJfQkxPQ0tTOyArK2Jsb2NrKSB7CiAJCQlpZiAoYmxvY2sgPT0gMCkKLQkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUMwX01JU0MgKyBiYW5rICogNDsKKwkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUN4X01JU0MoYmFuayk7CiAJCQllbHNlIGlmIChibG9jayA9PSAxKSB7CiAJCQkJYWRkcmVzcyA9IChsb3cgJiBNQVNLX0JMS1BUUl9MTykgPj4gMjE7CiAJCQkJaWYgKCFhZGRyZXNzKQpAQCAtMjQ3LDEzICsyNDcsMTggQEAKIAkJCWIuYWRkcmVzcwkJPSBhZGRyZXNzOwogCQkJYi5pbnRlcnJ1cHRfY2FwYWJsZQk9IGx2dF9pbnRlcnJ1cHRfc3VwcG9ydGVkKGJhbmssIGhpZ2gpOwogCi0JCQlpZiAoYi5pbnRlcnJ1cHRfY2FwYWJsZSkgewotCQkJCWludCBuZXcgPSAoaGlnaCAmIE1BU0tfTFZUT0ZGX0hJKSA+PiAyMDsKLQkJCQlvZmZzZXQgID0gc2V0dXBfQVBJQ19tY2Uob2Zmc2V0LCBuZXcpOwotCQkJfQorCQkJaWYgKCFiLmludGVycnVwdF9jYXBhYmxlKQorCQkJCWdvdG8gaW5pdDsKIAorCQkJbmV3CT0gKGhpZ2ggJiBNQVNLX0xWVE9GRl9ISSkgPj4gMjA7CisJCQlvZmZzZXQgID0gc2V0dXBfQVBJQ19tY2Uob2Zmc2V0LCBuZXcpOworCisJCQlpZiAoKG9mZnNldCA9PSBuZXcpICYmCisJCQkgICAgKG1jZV90aHJlc2hvbGRfdmVjdG9yICE9IGFtZF90aHJlc2hvbGRfaW50ZXJydXB0KSkKKwkJCQltY2VfdGhyZXNob2xkX3ZlY3RvciA9IGFtZF90aHJlc2hvbGRfaW50ZXJydXB0OworCitpbml0OgogCQkJbWNlX3RocmVzaG9sZF9ibG9ja19pbml0KCZiLCBvZmZzZXQpOwotCQkJbWNlX3RocmVzaG9sZF92ZWN0b3IgPSBhbWRfdGhyZXNob2xkX2ludGVycnVwdDsKIAkJfQogCX0KIH0KQEAgLTI3MCwxOCArMjc1LDE3IEBACiBzdGF0aWMgdm9pZCBhbWRfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQogewogCXUzMiBsb3cgPSAwLCBoaWdoID0gMCwgYWRkcmVzcyA9IDA7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBpbnQgYmFuaywgYmxvY2s7CiAJc3RydWN0IG1jZSBtOwogCi0JbWNlX3NldHVwKCZtKTsKLQogCS8qIGFzc3VtZSBmaXJzdCBiYW5rIGNhdXNlZCBpdCAqLwogCWZvciAoYmFuayA9IDA7IGJhbmsgPCBtY2FfY2ZnLmJhbmtzOyArK2JhbmspIHsKLQkJaWYgKCEocGVyX2NwdShiYW5rX21hcCwgbS5jcHUpICYgKDEgPDwgYmFuaykpKQorCQlpZiAoIShwZXJfY3B1KGJhbmtfbWFwLCBjcHUpICYgKDEgPDwgYmFuaykpKQogCQkJY29udGludWU7CiAJCWZvciAoYmxvY2sgPSAwOyBibG9jayA8IE5SX0JMT0NLUzsgKytibG9jaykgewogCQkJaWYgKGJsb2NrID09IDApIHsKLQkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUMwX01JU0MgKyBiYW5rICogNDsKKwkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUN4X01JU0MoYmFuayk7CiAJCQl9IGVsc2UgaWYgKGJsb2NrID09IDEpIHsKIAkJCQlhZGRyZXNzID0gKGxvdyAmIE1BU0tfQkxLUFRSX0xPKSA+PiAyMTsKIAkJCQlpZiAoIWFkZHJlc3MpCkBAIC0zMDksMjEgKzMxMywyMCBAQAogCQkJICogTG9nIHRoZSBtYWNoaW5lIGNoZWNrIHRoYXQgY2F1c2VkIHRoZSB0aHJlc2hvbGQKIAkJCSAqIGV2ZW50LgogCQkJICovCi0JCQltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1RJTUVTVEFNUCwKLQkJCQkJdGhpc19jcHVfcHRyKCZtY2VfcG9sbF9iYW5rcykpOwotCi0JCQlpZiAoaGlnaCAmIE1BU0tfT1ZFUkZMT1dfSEkpIHsKLQkJCQlyZG1zcmwoYWRkcmVzcywgbS5taXNjKTsKLQkJCQlyZG1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUyArIGJhbmsgKiA0LAotCQkJCSAgICAgICBtLnN0YXR1cyk7Ci0JCQkJbS5iYW5rID0gSzhfTUNFX1RIUkVTSE9MRF9CQVNFCi0JCQkJICAgICAgICsgYmFuayAqIE5SX0JMT0NLUwotCQkJCSAgICAgICArIGJsb2NrOwotCQkJCW1jZV9sb2coJm0pOwotCQkJCXJldHVybjsKLQkJCX0KKwkJCWlmIChoaWdoICYgTUFTS19PVkVSRkxPV19ISSkKKwkJCQlnb3RvIGxvZzsKIAkJfQogCX0KKwlyZXR1cm47CisKK2xvZzoKKwltY2Vfc2V0dXAoJm0pOworCXJkbXNybChNU1JfSUEzMl9NQ3hfU1RBVFVTKGJhbmspLCBtLnN0YXR1cyk7CisJbS5taXNjID0gKCh1NjQpaGlnaCA8PCAzMikgfCBsb3c7CisJbS5iYW5rID0gYmFuazsKKwltY2VfbG9nKCZtKTsKKworCXdybXNybChNU1JfSUEzMl9NQ3hfU1RBVFVTKGJhbmspLCAwKTsKIH0KIAogLyoKQEAgLTYxNyw4ICs2MjAsNyBAQAogCQl9CiAJfQogCi0JZXJyID0gYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcyhjcHUsIGJhbmssIDAsCi0JCQkJCU1TUl9JQTMyX01DMF9NSVNDICsgYmFuayAqIDQpOworCWVyciA9IGFsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3MoY3B1LCBiYW5rLCAwLCBNU1JfSUEzMl9NQ3hfTUlTQyhiYW5rKSk7CiAJaWYgKCFlcnIpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZC5jCmluZGV4IDhmZmZkODQuLmJmYmJlNjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZC5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAlyZXR1cm4gVUNPREVfT0s7CiB9CiAKLWVudW0gdWNvZGVfc3RhdGUgbG9hZF9taWNyb2NvZGVfYW1kKHU4IGZhbWlseSwgY29uc3QgdTggKmRhdGEsIHNpemVfdCBzaXplKQorZW51bSB1Y29kZV9zdGF0ZSBsb2FkX21pY3JvY29kZV9hbWQoaW50IGNwdSwgdTggZmFtaWx5LCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IHNpemUpCiB7CiAJZW51bSB1Y29kZV9zdGF0ZSByZXQ7CiAKQEAgLTM5MCw4ICszOTAsOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTUlDUk9DT0RFX0FNRF9FQVJMWSkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzMyKQogCS8qIHNhdmUgQlNQJ3MgbWF0Y2hpbmcgcGF0Y2ggZm9yIGVhcmx5IGxvYWQgKi8KLQlpZiAoY3B1X2RhdGEoc21wX3Byb2Nlc3Nvcl9pZCgpKS5jcHVfaW5kZXggPT0gYm9vdF9jcHVfZGF0YS5jcHVfaW5kZXgpIHsKLQkJc3RydWN0IHVjb2RlX3BhdGNoICpwID0gZmluZF9wYXRjaChzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmIChjcHVfZGF0YShjcHUpLmNwdV9pbmRleCA9PSBib290X2NwdV9kYXRhLmNwdV9pbmRleCkgeworCQlzdHJ1Y3QgdWNvZGVfcGF0Y2ggKnAgPSBmaW5kX3BhdGNoKGNwdSk7CiAJCWlmIChwKSB7CiAJCQltZW1zZXQoYW1kX3Vjb2RlX3BhdGNoLCAwLCBQQVRDSF9NQVhfU0laRSk7CiAJCQltZW1jcHkoYW1kX3Vjb2RlX3BhdGNoLCBwLT5kYXRhLCBtaW5fdCh1MzIsIGtzaXplKHAtPmRhdGEpLApAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCWdvdG8gZndfcmVsZWFzZTsKIAl9CiAKLQlyZXQgPSBsb2FkX21pY3JvY29kZV9hbWQoYy0+eDg2LCBmdy0+ZGF0YSwgZnctPnNpemUpOworCXJldCA9IGxvYWRfbWljcm9jb2RlX2FtZChjcHUsIGMtPng4NiwgZnctPmRhdGEsIGZ3LT5zaXplKTsKIAogIGZ3X3JlbGVhc2U6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9hbWRfZWFybHkuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZF9lYXJseS5jCmluZGV4IDdhYTFhY2MuLjczNzczN2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZF9lYXJseS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZF9lYXJseS5jCkBAIC0xMDgsMTIgKzEwOCwxMyBAQAogICogbG9hZF9taWNyb2NvZGVfYW1kKCkgdG8gc2F2ZSBlcXVpdmFsZW50IGNwdSB0YWJsZSBhbmQgbWljcm9jb2RlIHBhdGNoZXMgaW4KICAqIGtlcm5lbCBoZWFwIG1lbW9yeS4KICAqLwotc3RhdGljIHZvaWQgYXBwbHlfdWNvZGVfaW5faW5pdHJkKHZvaWQgKnVjb2RlLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyB2b2lkIGFwcGx5X3Vjb2RlX2luX2luaXRyZCh2b2lkICp1Y29kZSwgc2l6ZV90IHNpemUsIGJvb2wgc2F2ZV9wYXRjaCkKIHsKIAlzdHJ1Y3QgZXF1aXZfY3B1X2VudHJ5ICplcTsKIAlzaXplX3QgKmNvbnRfc3o7CiAJdTMyICpoZWFkZXI7CiAJdTggICpkYXRhLCAqKmNvbnQ7CisJdTggKCpwYXRjaClbUEFUQ0hfTUFYX1NJWkVdOwogCXUxNiBlcV9pZCA9IDA7CiAJaW50IG9mZnNldCwgbGVmdDsKIAl1MzIgcmV2LCBlYXgsIGVieCwgZWN4LCBlZHg7CkBAIC0xMjMsMTAgKzEyNCwxMiBAQAogCW5ld19yZXYgPSAodTMyICopX19wYV9ub2RlYnVnKCZ1Y29kZV9uZXdfcmV2KTsKIAljb250X3N6ID0gKHNpemVfdCAqKV9fcGFfbm9kZWJ1ZygmY29udGFpbmVyX3NpemUpOwogCWNvbnQJPSAodTggKiopX19wYV9ub2RlYnVnKCZjb250YWluZXIpOworCXBhdGNoCT0gKHU4ICgqKVtQQVRDSF9NQVhfU0laRV0pX19wYV9ub2RlYnVnKCZhbWRfdWNvZGVfcGF0Y2gpOwogI2Vsc2UKIAluZXdfcmV2ID0gJnVjb2RlX25ld19yZXY7CiAJY29udF9zeiA9ICZjb250YWluZXJfc2l6ZTsKIAljb250CT0gJmNvbnRhaW5lcjsKKwlwYXRjaAk9ICZhbWRfdWNvZGVfcGF0Y2g7CiAjZW5kaWYKIAogCWRhdGEgICA9IHVjb2RlOwpAQCAtMjEzLDkgKzIxNiw5IEBACiAJCQkJcmV2ID0gbWMtPmhkci5wYXRjaF9pZDsKIAkJCQkqbmV3X3JldiA9IHJldjsKIAotCQkJCS8qIHNhdmUgdWNvZGUgcGF0Y2ggKi8KLQkJCQltZW1jcHkoYW1kX3Vjb2RlX3BhdGNoLCBtYywKLQkJCQkgICAgICAgbWluX3QodTMyLCBoZWFkZXJbMV0sIFBBVENIX01BWF9TSVpFKSk7CisJCQkJaWYgKHNhdmVfcGF0Y2gpCisJCQkJCW1lbWNweShwYXRjaCwgbWMsCisJCQkJCSAgICAgICBtaW5fdCh1MzIsIGhlYWRlclsxXSwgUEFUQ0hfTUFYX1NJWkUpKTsKIAkJCX0KIAkJfQogCkBAIC0yNDYsNyArMjQ5LDcgQEAKIAkqZGF0YSA9IGNwLmRhdGE7CiAJKnNpemUgPSBjcC5zaXplOwogCi0JYXBwbHlfdWNvZGVfaW5faW5pdHJkKGNwLmRhdGEsIGNwLnNpemUpOworCWFwcGx5X3Vjb2RlX2luX2luaXRyZChjcC5kYXRhLCBjcC5zaXplLCB0cnVlKTsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTI2Myw3ICsyNjYsNyBAQAogCXNpemVfdCAqdXNpemU7CiAJdm9pZCAqKnVjb2RlOwogCi0JbWMgPSAoc3RydWN0IG1pY3JvY29kZV9hbWQgKilfX3BhKGFtZF91Y29kZV9wYXRjaCk7CisJbWMgPSAoc3RydWN0IG1pY3JvY29kZV9hbWQgKilfX3BhX25vZGVidWcoYW1kX3Vjb2RlX3BhdGNoKTsKIAlpZiAobWMtPmhkci5wYXRjaF9pZCAmJiBtYy0+aGRyLnByb2Nlc3Nvcl9yZXZfaWQpIHsKIAkJX19hcHBseV9taWNyb2NvZGVfYW1kKG1jKTsKIAkJcmV0dXJuOwpAQCAtMjc1LDcgKzI3OCw3IEBACiAJaWYgKCEqdWNvZGUgfHwgISp1c2l6ZSkKIAkJcmV0dXJuOwogCi0JYXBwbHlfdWNvZGVfaW5faW5pdHJkKCp1Y29kZSwgKnVzaXplKTsKKwlhcHBseV91Y29kZV9pbl9pbml0cmQoKnVjb2RlLCAqdXNpemUsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGNvbGxlY3RfY3B1X3NpZ19vbl9ic3Aodm9pZCAqYXJnKQpAQCAtMzM5LDcgKzM0Miw3IEBACiAJCSAqIEFQIGhhcyBhIGRpZmZlcmVudCBlcXVpdmFsZW5jZSBJRCB0aGFuIEJTUCwgbG9va3MgbGlrZQogCQkgKiBtaXhlZC1zdGVwcGluZ3Mgc2lsaWNvbiBzbyBnbyB0aHJvdWdoIHRoZSB1Y29kZSBibG9iIGFuZXcuCiAJCSAqLwotCQlhcHBseV91Y29kZV9pbl9pbml0cmQodWNvZGVfY3Bpby5kYXRhLCB1Y29kZV9jcGlvLnNpemUpOworCQlhcHBseV91Y29kZV9pbl9pbml0cmQodWNvZGVfY3Bpby5kYXRhLCB1Y29kZV9jcGlvLnNpemUsIGZhbHNlKTsKIAl9CiB9CiAjZW5kaWYKQEAgLTM0Nyw3ICszNTAsOSBAQAogaW50IF9faW5pdCBzYXZlX21pY3JvY29kZV9pbl9pbml0cmRfYW1kKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBjb250OworCWludCByZXR2YWwgPSAwOwogCWVudW0gdWNvZGVfc3RhdGUgcmV0OworCXU4ICpjb250X3ZhOwogCXUzMiBlYXg7CiAKIAlpZiAoIWNvbnRhaW5lcikKQEAgLTM1NSwxMyArMzYwLDE1IEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJZ2V0X2JzcF9zaWcoKTsKLQljb250ID0gKHVuc2lnbmVkIGxvbmcpY29udGFpbmVyOworCWNvbnQJPSAodW5zaWduZWQgbG9uZyljb250YWluZXI7CisJY29udF92YSA9IF9fdmEoY29udGFpbmVyKTsKICNlbHNlCiAJLyoKIAkgKiBXZSBuZWVkIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjb250YWluZXIgZm9yIGJvdGggYml0bmVzcyBzaW5jZQogCSAqIGJvb3RfcGFyYW1zLmhkci5yYW1kaXNrX2ltYWdlIGlzIGEgcGh5c2ljYWwgYWRkcmVzcy4KIAkgKi8KLQljb250ID0gX19wYShjb250YWluZXIpOworCWNvbnQgICAgPSBfX3BhKGNvbnRhaW5lcik7CisJY29udF92YSA9IGNvbnRhaW5lcjsKICNlbmRpZgogCiAJLyoKQEAgLTM3Miw2ICszNzksOCBAQAogCWlmIChyZWxvY2F0ZWRfcmFtZGlzaykKIAkJY29udGFpbmVyID0gKHU4ICopKF9fdmEocmVsb2NhdGVkX3JhbWRpc2spICsKIAkJCSAgICAgKGNvbnQgLSBib290X3BhcmFtcy5oZHIucmFtZGlza19pbWFnZSkpOworCWVsc2UKKwkJY29udGFpbmVyID0gY29udF92YTsKIAogCWlmICh1Y29kZV9uZXdfcmV2KQogCQlwcl9pbmZvKCJtaWNyb2NvZGU6IHVwZGF0ZWQgZWFybHkgdG8gbmV3IHBhdGNoX2xldmVsPTB4JTA4eFxuIiwKQEAgLTM4MCw5ICszODksOSBAQAogCWVheCAgID0gY3B1aWRfZWF4KDB4MDAwMDAwMDEpOwogCWVheCAgID0gKChlYXggPj4gOCkgJiAweGYpICsgKChlYXggPj4gMjApICYgMHhmZik7CiAKLQlyZXQgPSBsb2FkX21pY3JvY29kZV9hbWQoZWF4LCBjb250YWluZXIsIGNvbnRhaW5lcl9zaXplKTsKKwlyZXQgPSBsb2FkX21pY3JvY29kZV9hbWQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBlYXgsIGNvbnRhaW5lciwgY29udGFpbmVyX3NpemUpOwogCWlmIChyZXQgIT0gVUNPREVfT0spCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR2YWwgPSAtRUlOVkFMOwogCiAJLyoKIAkgKiBUaGlzIHdpbGwgYmUgZnJlZWQgYW55IG1zZWMgbm93LCBzdGFzaCBwYXRjaGVzIGZvciB0aGUgY3VycmVudApAQCAtMzkxLDUgKzQwMCwyMyBAQAogCWNvbnRhaW5lciA9IE5VTEw7CiAJY29udGFpbmVyX3NpemUgPSAwOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCByZWxvYWRfdWNvZGVfYW1kKHZvaWQpCit7CisJc3RydWN0IG1pY3JvY29kZV9hbWQgKm1jOworCXUzMiByZXYsIGVheDsKKworCXJkbXNyKE1TUl9BTUQ2NF9QQVRDSF9MRVZFTCwgcmV2LCBlYXgpOworCisJbWMgPSAoc3RydWN0IG1pY3JvY29kZV9hbWQgKilhbWRfdWNvZGVfcGF0Y2g7CisKKwlpZiAobWMgJiYgcmV2IDwgbWMtPmhkci5wYXRjaF9pZCkgeworCQlpZiAoIV9fYXBwbHlfbWljcm9jb2RlX2FtZChtYykpIHsKKwkJCXVjb2RlX25ld19yZXYgPSBtYy0+aGRyLnBhdGNoX2lkOworCQkJcHJfaW5mbygibWljcm9jb2RlOiByZWxvYWQgcGF0Y2hfbGV2ZWw9MHglMDh4XG4iLAorCQkJCXVjb2RlX25ld19yZXYpOworCQl9CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZS5jCmluZGV4IGRkOWQ2MTkuLjE1YzI5MDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlLmMKQEAgLTQ2NSw2ICs0NjUsOCBAQAogCiAJaWYgKHVjaS0+dmFsaWQgJiYgdWNpLT5tYykKIAkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKGNwdSk7CisJZWxzZSBpZiAoIXVjaS0+bWMpCisJCXJlbG9hZF9lYXJseV9taWNyb2NvZGUoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBtY19zeXNjb3JlX29wcyA9IHsKQEAgLTU0OSw3ICs1NTEsNyBAQAogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoZGlzX3Vjb2RlX2xkcikKKwlpZiAocGFyYXZpcnRfZW5hYmxlZCgpIHx8IGRpc191Y29kZV9sZHIpCiAJCXJldHVybiAwOwogCiAJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmVfZWFybHkuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmVfZWFybHkuYwppbmRleCA1ZjI4YTY0Li5kNDVkZjRiZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZV9lYXJseS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmVfZWFybHkuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiBzdGF0aWMgYm9vbCBjaGVja19sb2FkZXJfZGlzYWJsZWRfYXAodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JcmV0dXJuIF9fcGFfbm9kZWJ1ZyhkaXNfdWNvZGVfbGRyKTsKKwlyZXR1cm4gKigoYm9vbCAqKV9fcGFfbm9kZWJ1ZygmZGlzX3Vjb2RlX2xkcikpOwogI2Vsc2UKIAlyZXR1cm4gZGlzX3Vjb2RlX2xkcjsKICNlbmRpZgpAQCAtMTc2LDMgKzE3NiwyNCBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3ZvaWQgcmVsb2FkX2Vhcmx5X21pY3JvY29kZSh2b2lkKQoreworCWludCB2ZW5kb3IsIHg4NjsKKworCXZlbmRvciA9IHg4Nl92ZW5kb3IoKTsKKwl4ODYgPSB4ODZfZmFtaWx5KCk7CisKKwlzd2l0Y2ggKHZlbmRvcikgeworCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJaWYgKHg4NiA+PSA2KQorCQkJcmVsb2FkX3Vjb2RlX2ludGVsKCk7CisJCWJyZWFrOworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWlmICh4ODYgPj0gMHgxMCkKKwkJCXJlbG9hZF91Y29kZV9hbWQoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvaW50ZWxfZWFybHkuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2ludGVsX2Vhcmx5LmMKaW5kZXggYjg4MzQzZi4uZWM5ZGY2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvaW50ZWxfZWFybHkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9pbnRlbF9lYXJseS5jCkBAIC02NTAsOCArNjUwLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGFwcGx5X21pY3JvY29kZV9lYXJseShzdHJ1Y3QgbWNfc2F2ZWRfZGF0YSAqbWNfc2F2ZWRfZGF0YSwKLQkJCQkgc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kpCitzdGF0aWMgaW50IGFwcGx5X21pY3JvY29kZV9lYXJseShzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSwgYm9vbCBlYXJseSkKIHsKIAlzdHJ1Y3QgbWljcm9jb2RlX2ludGVsICptY19pbnRlbDsKIAl1bnNpZ25lZCBpbnQgdmFsWzJdOwpAQCAtNjgwLDcgKzY3OSwxMCBAQAogI2VuZGlmCiAJdWNpLT5jcHVfc2lnLnJldiA9IHZhbFsxXTsKIAotCXByaW50X3Vjb2RlKHVjaSk7CisJaWYgKGVhcmx5KQorCQlwcmludF91Y29kZSh1Y2kpOworCWVsc2UKKwkJcHJpbnRfdWNvZGVfaW5mbyh1Y2ksIG1jX2ludGVsLT5oZHIuZGF0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcxNSwxMiArNzE3LDE3IEBACiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgaW5pdHJkX2VuZF9lYXJseSwKIAkJICAgICAgc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kpCiB7CisJZW51bSB1Y29kZV9zdGF0ZSByZXQ7CisKIAljb2xsZWN0X2NwdV9pbmZvX2Vhcmx5KHVjaSk7CiAJc2Nhbl9taWNyb2NvZGUoaW5pdHJkX3N0YXJ0X2Vhcmx5LCBpbml0cmRfZW5kX2Vhcmx5LCBtY19zYXZlZF9kYXRhLAogCQkgICAgICAgbWNfc2F2ZWRfaW5faW5pdHJkLCB1Y2kpOwotCWxvYWRfbWljcm9jb2RlKG1jX3NhdmVkX2RhdGEsIG1jX3NhdmVkX2luX2luaXRyZCwKLQkJICAgICAgIGluaXRyZF9zdGFydF9lYXJseSwgdWNpKTsKLQlhcHBseV9taWNyb2NvZGVfZWFybHkobWNfc2F2ZWRfZGF0YSwgdWNpKTsKKworCXJldCA9IGxvYWRfbWljcm9jb2RlKG1jX3NhdmVkX2RhdGEsIG1jX3NhdmVkX2luX2luaXRyZCwKKwkJCSAgICAgaW5pdHJkX3N0YXJ0X2Vhcmx5LCB1Y2kpOworCisJaWYgKHJldCA9PSBVQ09ERV9PSykKKwkJYXBwbHlfbWljcm9jb2RlX2Vhcmx5KHVjaSwgdHJ1ZSk7CiB9CiAKIHZvaWQgX19pbml0CkBAIC03NDksNyArNzU2LDggQEAKIAlpbml0cmRfZW5kX2Vhcmx5ID0gaW5pdHJkX3N0YXJ0X2Vhcmx5ICsgcmFtZGlza19zaXplOwogCiAJX2xvYWRfdWNvZGVfaW50ZWxfYnNwKCZtY19zYXZlZF9kYXRhLCBtY19zYXZlZF9pbl9pbml0cmQsCi0JCQkgICAgICBpbml0cmRfc3RhcnRfZWFybHksIGluaXRyZF9lbmRfZWFybHksICZ1Y2kpOworCQkJICAgICAgaW5pdHJkX3N0YXJ0X2Vhcmx5LCBpbml0cmRfZW5kX2Vhcmx5LAorCQkJICAgICAgJnVjaSk7CiAjZW5kaWYKIH0KIApAQCAtNzgzLDUgKzc5MSwyMyBAQAogCWNvbGxlY3RfY3B1X2luZm9fZWFybHkoJnVjaSk7CiAJbG9hZF9taWNyb2NvZGUobWNfc2F2ZWRfZGF0YV9wLCBtY19zYXZlZF9pbl9pbml0cmRfcCwKIAkJICAgICAgIGluaXRyZF9zdGFydF9hZGRyLCAmdWNpKTsKLQlhcHBseV9taWNyb2NvZGVfZWFybHkobWNfc2F2ZWRfZGF0YV9wLCAmdWNpKTsKKwlhcHBseV9taWNyb2NvZGVfZWFybHkoJnVjaSwgdHJ1ZSk7Cit9CisKK3ZvaWQgcmVsb2FkX3Vjb2RlX2ludGVsKHZvaWQpCit7CisJc3RydWN0IHVjb2RlX2NwdV9pbmZvIHVjaTsKKwllbnVtIHVjb2RlX3N0YXRlIHJldDsKKworCWlmICghbWNfc2F2ZWRfZGF0YS5tY19zYXZlZF9jb3VudCkKKwkJcmV0dXJuOworCisJY29sbGVjdF9jcHVfaW5mb19lYXJseSgmdWNpKTsKKworCXJldCA9IGdlbmVyaWNfbG9hZF9taWNyb2NvZGVfZWFybHkobWNfc2F2ZWRfZGF0YS5tY19zYXZlZCwKKwkJCQkJICAgbWNfc2F2ZWRfZGF0YS5tY19zYXZlZF9jb3VudCwgJnVjaSk7CisJaWYgKHJldCAhPSBVQ09ERV9PSykKKwkJcmV0dXJuOworCisJYXBwbHlfbWljcm9jb2RlX2Vhcmx5KCZ1Y2ksIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmgKaW5kZXggZmM1ZWIzOS4uNGU2Y2RiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmgKQEAgLTI1Myw2ICsyNTMsMTAgQEAKICNkZWZpbmUgSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoYywgbikJXAogCUVWRU5UX0NPTlNUUkFJTlQoYywgbiwgSU5URUxfQVJDSF9FVkVOVF9NQVNLKQogCisvKiBMaWtlIFVFVkVOVF9DT05TVFJBSU5ULCBidXQgbWF0Y2ggZmxhZ3MgdG9vICovCisjZGVmaW5lIElOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKGMsIG4pCVwKKwlFVkVOVF9DT05TVFJBSU5UKGMsIG4sIElOVEVMX0FSQ0hfRVZFTlRfTUFTS3xYODZfQUxMX0VWRU5UX0ZMQUdTKQorCiAjZGVmaW5lIElOVEVMX1BMRF9DT05TVFJBSU5UKGMsIG4pCVwKIAlfX0VWRU5UX0NPTlNUUkFJTlQoYywgbiwgSU5URUxfQVJDSF9FVkVOVF9NQVNLfFg4Nl9BTExfRVZFTlRfRkxBR1MsIFwKIAkJCSAgIEhXRUlHSFQobiksIDAsIFBFUkZfWDg2X0VWRU5UX1BFQlNfTERMQVQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kX2licy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZF9pYnMuYwppbmRleCBjYmIxYmUzZS4uYTYxZjVjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZF9pYnMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kX2licy5jCkBAIC01NjUsNiArNTY1LDIxIEBACiAJCQkJICAgICAgIHBlcmZfaWJzLT5vZmZzZXRfbWF4LAogCQkJCSAgICAgICBvZmZzZXQgKyAxKTsKIAl9IHdoaWxlIChvZmZzZXQgPCBvZmZzZXRfbWF4KTsKKwlpZiAoZXZlbnQtPmF0dHIuc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKKwkJLyoKKwkJICogUmVhZCBJYnNCclRhcmdldCBhbmQgSWJzT3BEYXRhNCBzZXBhcmF0ZWx5CisJCSAqIGRlcGVuZGluZyBvbiB0aGVpciBhdmFpbGFiaWxpdHkuCisJCSAqIENhbid0IGFkZCB0byBvZmZzZXRfbWF4IGFzIHRoZXkgYXJlIHN0YWdnZXJlZAorCQkgKi8KKwkJaWYgKGlic19jYXBzICYgSUJTX0NBUFNfQlJOVFJHVCkgeworCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNCUlRBUkdFVCwgKmJ1ZisrKTsKKwkJCXNpemUrKzsKKwkJfQorCQlpZiAoaWJzX2NhcHMgJiBJQlNfQ0FQU19PUERBVEE0KSB7CisJCQlyZG1zcmwoTVNSX0FNRDY0X0lCU09QREFUQTQsICpidWYrKyk7CisJCQlzaXplKys7CisJCX0KKwl9CiAJaWJzX2RhdGEuc2l6ZSA9IHNpemVvZih1NjQpICogc2l6ZTsKIAogCXJlZ3MgPSAqaXJlZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfZHMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9kcy5jCmluZGV4IDQ2MjExYmMuLjNjODk1ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9kcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9kcy5jCkBAIC01NTIsMTggKzU1MiwxOCBAQAogICogUEVCUwogICovCiBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlMl9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7Ci0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAweDEpLCAvKiBJTlNUX1JFVElSRUQuQU5ZICovCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHhmZWMxLCAweDEpLCAvKiBYODdfT1BTX1JFVElSRUQuQU5ZICovCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGM1LCAweDEpLCAvKiBCUl9JTlNUX1JFVElSRUQuTUlTUFJFRCAqLwotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MWZjNywgMHgxKSwgLyogU0lNRF9JTlNUX1JFVFVSRUQuQU5ZICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweDEpLCAgICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAwYzAsIDB4MSksIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweGZlYzEsIDB4MSksIC8qIFg4N19PUFNfUkVUSVJFRC5BTlkgKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAwYzUsIDB4MSksIC8qIEJSX0lOU1RfUkVUSVJFRC5NSVNQUkVEICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgxZmM3LCAweDEpLCAvKiBTSU1EX0lOU1RfUkVUVVJFRC5BTlkgKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLwogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCiBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9hdG9tX3BlYnNfZXZlbnRfY29uc3RyYWludHNbXSA9IHsKLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAwYzAsIDB4MSksIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAwYzUsIDB4MSksIC8qIE1JU1BSRURJQ1RFRF9CUkFOQ0hfUkVUSVJFRCAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwgICAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAweDEpLCAvKiBJTlNUX1JFVElSRUQuQU5ZICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGM1LCAweDEpLCAvKiBNSVNQUkVESUNURURfQlJBTkNIX1JFVElSRUQgKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLwogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCkBAIC01NzcsMzYgKzU3NywzNiBAQAogCiBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9uZWhhbGVtX3BlYnNfZXZlbnRfY29uc3RyYWludHNbXSA9IHsKIAlJTlRFTF9QTERfQ09OU1RSQUlOVCgweDEwMGIsIDB4ZiksICAgICAgLyogTUVNX0lOU1RfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDBmLCAweGYpLCAgICAvKiBNRU1fVU5DT1JFX1JFVElSRUQuKiAqLwotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDEwYywgMHhmKSwgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAweGYpLCAgICAvKiBJTlNUX1JFVElSRUQuQU5ZICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweDBmLCAweGYpLCAgICAvKiBNRU1fVU5DT1JFX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDEwYywgMHhmKSwgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAweGYpLCAgICAvKiBJTlNUX1JFVElSRUQuQU5ZICovCiAJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGMyLCAweGYpLCAgICAvKiBVT1BTX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjNCwgMHhmKSwgICAgLyogQlJfSU5TVF9SRVRJUkVELiogKi8KLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAyYzUsIDB4ZiksIC8qIEJSX01JU1BfUkVUSVJFRC5ORUFSX0NBTEwgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzcsIDB4ZiksICAgIC8qIFNTRVhfVU9QU19SRVRJUkVELiogKi8KLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDIwYzgsIDB4ZiksIC8qIElUTEJfTUlTU19SRVRJUkVEICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweGYpLCAgICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4ZjcsIDB4ZiksICAgIC8qIEZQX0FTU0lTVC4qICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGM0LCAweGYpLCAgICAvKiBCUl9JTlNUX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDJjNSwgMHhmKSwgLyogQlJfTUlTUF9SRVRJUkVELk5FQVJfQ0FMTCAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjNywgMHhmKSwgICAgLyogU1NFWF9VT1BTX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MjBjOCwgMHhmKSwgLyogSVRMQl9NSVNTX1JFVElSRUQgKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4ZiksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhmNywgMHhmKSwgICAgLyogRlBfQVNTSVNULiogKi8KIAlFVkVOVF9DT05TVFJBSU5UX0VORAogfTsKIAogc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfd2VzdG1lcmVfcGVic19ldmVudF9jb25zdHJhaW50c1tdID0gewogCUlOVEVMX1BMRF9DT05TVFJBSU5UKDB4MTAwYiwgMHhmKSwgICAgICAvKiBNRU1fSU5TVF9SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MGYsIDB4ZiksICAgIC8qIE1FTV9VTkNPUkVfUkVUSVJFRC4qICovCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMTBjLCAweGYpLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsIDB4ZiksICAgIC8qIElOU1RSX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHgwZiwgMHhmKSwgICAgLyogTUVNX1VOQ09SRV9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAxMGMsIDB4ZiksIC8qIE1FTV9TVE9SRV9SRVRJUkVELkRUTEJfTUlTUyAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjMCwgMHhmKSwgICAgLyogSU5TVFJfUkVUSVJFRC4qICovCiAJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGMyLCAweGYpLCAgICAvKiBVT1BTX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjNCwgMHhmKSwgICAgLyogQlJfSU5TVF9SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzUsIDB4ZiksICAgIC8qIEJSX01JU1BfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGM3LCAweGYpLCAgICAvKiBTU0VYX1VPUFNfUkVUSVJFRC4qICovCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgyMGM4LCAweGYpLCAvKiBJVExCX01JU1NfUkVUSVJFRCAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHhmKSwgICAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGY3LCAweGYpLCAgICAvKiBGUF9BU1NJU1QuKiAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjNCwgMHhmKSwgICAgLyogQlJfSU5TVF9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4YzUsIDB4ZiksICAgIC8qIEJSX01JU1BfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGM3LCAweGYpLCAgICAvKiBTU0VYX1VPUFNfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgyMGM4LCAweGYpLCAvKiBJVExCX01JU1NfUkVUSVJFRCAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHhmKSwgICAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGY3LCAweGYpLCAgICAvKiBGUF9BU1NJU1QuKiAqLwogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCiBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9zbmJfcGVic19ldmVudF9jb25zdHJhaW50c1tdID0gewotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDFjMCwgMHgyKSwgLyogSU5TVF9SRVRJUkVELlBSRUNESVNUICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMWMwLCAweDIpLCAvKiBJTlNUX1JFVElSRUQuUFJFQ0RJU1QgKi8KIAlJTlRFTF9QTERfQ09OU1RSQUlOVCgweDAxY2QsIDB4OCksICAgIC8qIE1FTV9UUkFOU19SRVRJUkVELkxBVF9BQk9WRV9USFIgKi8KIAlJTlRFTF9QU1RfQ09OU1RSQUlOVCgweDAyY2QsIDB4OCksICAgIC8qIE1FTV9UUkFOU19SRVRJUkVELlBSRUNJU0VfU1RPUkVTICovCiAJLyogVU9QU19SRVRJUkVELkFMTCwgaW52PTEsIGNtYXNrPTE2IChjeWNsZXM6cCkuICovCkBAIC02MTcsNyArNjE3LDcgQEAKIH07CiAKIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2l2Yl9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7Ci0gICAgICAgIElOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDFjMCwgMHgyKSwgLyogSU5TVF9SRVRJUkVELlBSRUNESVNUICovCisgICAgICAgIElOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDFjMCwgMHgyKSwgLyogSU5TVF9SRVRJUkVELlBSRUNESVNUICovCiAgICAgICAgIElOVEVMX1BMRF9DT05TVFJBSU5UKDB4MDFjZCwgMHg4KSwgICAgLyogTUVNX1RSQU5TX1JFVElSRUQuTEFUX0FCT1ZFX1RIUiAqLwogCUlOVEVMX1BTVF9DT05TVFJBSU5UKDB4MDJjZCwgMHg4KSwgICAgLyogTUVNX1RSQU5TX1JFVElSRUQuUFJFQ0lTRV9TVE9SRVMgKi8KIAkvKiBVT1BTX1JFVElSRUQuQUxMLCBpbnY9MSwgY21hc2s9MTYgKGN5Y2xlczpwKS4gKi8KQEAgLTYyOCw3ICs2MjgsNyBAQAogfTsKIAogc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfaHN3X3BlYnNfZXZlbnRfY29uc3RyYWludHNbXSA9IHsKLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAxYzAsIDB4MiksIC8qIElOU1RfUkVUSVJFRC5QUkVDRElTVCAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDFjMCwgMHgyKSwgLyogSU5TVF9SRVRJUkVELlBSRUNESVNUICovCiAJSU5URUxfUExEX0NPTlNUUkFJTlQoMHgwMWNkLCAweGYpLCAgICAvKiBNRU1fVFJBTlNfUkVUSVJFRC4qICovCiAJLyogVU9QU19SRVRJUkVELkFMTCwgaW52PTEsIGNtYXNrPTE2IChjeWNsZXM6cCkuICovCiAJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweDEwODAwMWMyLCAweGYpLApAQCAtNzI0LDYgKzcyNCw3IEBACiAJdW5zaWduZWQgbG9uZyBpcCA9IHJlZ3MtPmlwOwogCWludCBpc182NGJpdCA9IDA7CiAJdm9pZCAqa2FkZHI7CisJaW50IHNpemU7CiAKIAkvKgogCSAqIFdlIGRvbid0IG5lZWQgdG8gZml4dXAgaWYgdGhlIFBFQlMgYXNzaXN0IGlzIGZhdWx0IGxpa2UKQEAgLTc1OCwxMSArNzU5LDEyIEBACiAJCXJldHVybiAxOwogCX0KIAorCXNpemUgPSBpcCAtIHRvOwogCWlmICgha2VybmVsX2lwKGlwKSkgewotCQlpbnQgc2l6ZSwgYnl0ZXM7CisJCWludCBieXRlczsKIAkJdTggKmJ1ZiA9IHRoaXNfY3B1X3JlYWQoaW5zbl9idWZmZXIpOwogCi0JCXNpemUgPSBpcCAtIHRvOyAvKiBNdXN0IGZpdCBvdXIgYnVmZmVyLCBzZWUgYWJvdmUgKi8KKwkJLyogJ3NpemUnIG11c3QgZml0IG91ciBidWZmZXIsIHNlZSBhYm92ZSAqLwogCQlieXRlcyA9IGNvcHlfZnJvbV91c2VyX25taShidWYsICh2b2lkIF9fdXNlciAqKXRvLCBzaXplKTsKIAkJaWYgKGJ5dGVzICE9IDApCiAJCQlyZXR1cm4gMDsKQEAgLTc4MCwxMSArNzgyLDIwIEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCQlpc182NGJpdCA9IGtlcm5lbF9pcCh0bykgfHwgIXRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpOwogI2VuZGlmCi0JCWluc25faW5pdCgmaW5zbiwga2FkZHIsIGlzXzY0Yml0KTsKKwkJaW5zbl9pbml0KCZpbnNuLCBrYWRkciwgc2l6ZSwgaXNfNjRiaXQpOwogCQlpbnNuX2dldF9sZW5ndGgoJmluc24pOworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlcmUgd2FzIG5vdCBhIHByb2JsZW0gZGVjb2RpbmcgdGhlCisJCSAqIGluc3RydWN0aW9uIGFuZCBnZXR0aW5nIHRoZSBsZW5ndGguICBUaGlzIGlzCisJCSAqIGRvdWJseSBpbXBvcnRhbnQgYmVjYXVzZSB3ZSBoYXZlIGFuIGluZmluaXRlCisJCSAqIGxvb3AgaWYgaW5zbi5sZW5ndGg9MC4KKwkJICovCisJCWlmICghaW5zbi5sZW5ndGgpCisJCQlicmVhazsKIAogCQl0byArPSBpbnNuLmxlbmd0aDsKIAkJa2FkZHIgKz0gaW5zbi5sZW5ndGg7CisJCXNpemUgLT0gaW5zbi5sZW5ndGg7CiAJfSB3aGlsZSAodG8gPCBpcCk7CiAKIAlpZiAodG8gPT0gaXApIHsKQEAgLTg4Niw2ICs4OTcsMjkgQEAKIAlyZWdzLmJwID0gcGVicy0+YnA7CiAJcmVncy5zcCA9IHBlYnMtPnNwOwogCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKSB7CisJCXJlZ3MuYXggPSBwZWJzLT5heDsKKwkJcmVncy5ieCA9IHBlYnMtPmJ4OworCQlyZWdzLmN4ID0gcGVicy0+Y3g7CisJCXJlZ3MuZHggPSBwZWJzLT5keDsKKwkJcmVncy5zaSA9IHBlYnMtPnNpOworCQlyZWdzLmRpID0gcGVicy0+ZGk7CisJCXJlZ3MuYnAgPSBwZWJzLT5icDsKKwkJcmVncy5zcCA9IHBlYnMtPnNwOworCisJCXJlZ3MuZmxhZ3MgPSBwZWJzLT5mbGFnczsKKyNpZm5kZWYgQ09ORklHX1g4Nl8zMgorCQlyZWdzLnI4ID0gcGVicy0+cjg7CisJCXJlZ3MucjkgPSBwZWJzLT5yOTsKKwkJcmVncy5yMTAgPSBwZWJzLT5yMTA7CisJCXJlZ3MucjExID0gcGVicy0+cjExOworCQlyZWdzLnIxMiA9IHBlYnMtPnIxMjsKKwkJcmVncy5yMTMgPSBwZWJzLT5yMTM7CisJCXJlZ3MucjE0ID0gcGVicy0+cjE0OworCQlyZWdzLnIxNSA9IHBlYnMtPnIxNTsKKyNlbmRpZgorCX0KKwogCWlmIChldmVudC0+YXR0ci5wcmVjaXNlX2lwID4gMSAmJiB4ODZfcG11LmludGVsX2NhcC5wZWJzX2Zvcm1hdCA+PSAyKSB7CiAJCXJlZ3MuaXAgPSBwZWJzLT5yZWFsX2lwOwogCQlyZWdzLmZsYWdzIHw9IFBFUkZfRUZMQUdTX0VYQUNUOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2xici5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2xici5jCmluZGV4IDQ1ZmE3MzAuLjU4ZjFhOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9sYnIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfbGJyLmMKQEAgLTQ2NSw3ICs0NjUsNyBAQAogewogCXN0cnVjdCBpbnNuIGluc247CiAJdm9pZCAqYWRkcjsKLQlpbnQgYnl0ZXMsIHNpemUgPSBNQVhfSU5TTl9TSVpFOworCWludCBieXRlc19yZWFkLCBieXRlc19sZWZ0OwogCWludCByZXQgPSBYODZfQlJfTk9ORTsKIAlpbnQgZXh0LCB0b19wbG0sIGZyb21fcGxtOwogCXU4IGJ1ZltNQVhfSU5TTl9TSVpFXTsKQEAgLTQ5Myw4ICs0OTMsMTAgQEAKIAkJCXJldHVybiBYODZfQlJfTk9ORTsKIAogCQkvKiBtYXkgZmFpbCBpZiB0ZXh0IG5vdCBwcmVzZW50ICovCi0JCWJ5dGVzID0gY29weV9mcm9tX3VzZXJfbm1pKGJ1ZiwgKHZvaWQgX191c2VyICopZnJvbSwgc2l6ZSk7Ci0JCWlmIChieXRlcyAhPSAwKQorCQlieXRlc19sZWZ0ID0gY29weV9mcm9tX3VzZXJfbm1pKGJ1ZiwgKHZvaWQgX191c2VyICopZnJvbSwKKwkJCQkJCU1BWF9JTlNOX1NJWkUpOworCQlieXRlc19yZWFkID0gTUFYX0lOU05fU0laRSAtIGJ5dGVzX2xlZnQ7CisJCWlmICghYnl0ZXNfcmVhZCkKIAkJCXJldHVybiBYODZfQlJfTk9ORTsKIAogCQlhZGRyID0gYnVmOwpAQCAtNTA1LDEwICs1MDcsMTkgQEAKIAkJICogRW5zdXJlIHdlIGRvbid0IGJsaW5keSByZWFkIGFueSBhZGRyZXNzIGJ5IHZhbGlkYXRpbmcgaXQgaXMKIAkJICogYSBrbm93biB0ZXh0IGFkZHJlc3MuCiAJCSAqLwotCQlpZiAoa2VybmVsX3RleHRfYWRkcmVzcyhmcm9tKSkKKwkJaWYgKGtlcm5lbF90ZXh0X2FkZHJlc3MoZnJvbSkpIHsKIAkJCWFkZHIgPSAodm9pZCAqKWZyb207Ci0JCWVsc2UKKwkJCS8qCisJCQkgKiBBc3N1bWUgd2UgY2FuIGdldCB0aGUgbWF4aW11bSBwb3NzaWJsZSBzaXplCisJCQkgKiB3aGVuIGdyYWJiaW5nIGtlcm5lbCBkYXRhLiAgVGhpcyBpcyBub3QKKwkJCSAqIF9zdHJpY3RseV8gdHJ1ZSBzaW5jZSB3ZSBjb3VsZCBwb3NzaWJseSBiZQorCQkJICogZXhlY3V0aW5nIHVwIG5leHQgdG8gYSBtZW1vcnkgaG9sZSwgYnV0CisJCQkgKiBpdCBpcyB2ZXJ5IHVubGlrZWx5IHRvIGJlIGEgcHJvYmxlbS4KKwkJCSAqLworCQkJYnl0ZXNfcmVhZCA9IE1BWF9JTlNOX1NJWkU7CisJCX0gZWxzZSB7CiAJCQlyZXR1cm4gWDg2X0JSX05PTkU7CisJCX0KIAl9CiAKIAkvKgpAQCAtNTE4LDggKzUyOSwxMCBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKIAlpczY0ID0ga2VybmVsX2lwKCh1bnNpZ25lZCBsb25nKWFkZHIpIHx8ICF0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKTsKICNlbmRpZgotCWluc25faW5pdCgmaW5zbiwgYWRkciwgaXM2NCk7CisJaW5zbl9pbml0KCZpbnNuLCBhZGRyLCBieXRlc19yZWFkLCBpczY0KTsKIAlpbnNuX2dldF9vcGNvZGUoJmluc24pOworCWlmICghaW5zbi5vcGNvZGUuZ290KQorCQlyZXR1cm4gWDg2X0JSX0FCT1JUOwogCiAJc3dpdGNoIChpbnNuLm9wY29kZS5ieXRlc1swXSkgewogCWNhc2UgMHhmOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZV9zbmJlcC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZV9zbmJlcC5jCmluZGV4IGFkZjEzOGUuLjc0NWIxNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlX3NuYmVwLmMKQEAgLTQ0OSw3ICs0NDksMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgdW5jb3JlX2V2ZW50X2Rlc2Mgc25iZXBfdW5jb3JlX2ltY19ldmVudHNbXSA9IHsKIAlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjbG9ja3RpY2tzLCAgICAgICJldmVudD0weGZmLHVtYXNrPTB4MDAiKSwKIAlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfcmVhZCwgICJldmVudD0weDA0LHVtYXNrPTB4MDMiKSwKKwlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfcmVhZC5zY2FsZSwgIjYuMTAzNTE1NjI1ZS01IiksCisJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3JlYWQudW5pdCwgIk1pQiIpLAogCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF93cml0ZSwgImV2ZW50PTB4MDQsdW1hc2s9MHgwYyIpLAorCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF93cml0ZS5zY2FsZSwgIjYuMTAzNTE1NjI1ZS01IiksCisJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3dyaXRlLnVuaXQsICJNaUIiKSwKIAl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9LAogfTsKIApAQCAtNDg2LDE0ICs0OTAsMTcgQEAKIAkuYXR0cnMgPSBzbmJlcF91bmNvcmVfcXBpX2Zvcm1hdHNfYXR0ciwKIH07CiAKLSNkZWZpbmUgU05CRVBfVU5DT1JFX01TUl9PUFNfQ09NTU9OX0lOSVQoKQkJCVwKLQkuaW5pdF9ib3gJPSBzbmJlcF91bmNvcmVfbXNyX2luaXRfYm94LAkJXAorI2RlZmluZSBfX1NOQkVQX1VOQ09SRV9NU1JfT1BTX0NPTU1PTl9JTklUKCkJCQlcCiAJLmRpc2FibGVfYm94CT0gc25iZXBfdW5jb3JlX21zcl9kaXNhYmxlX2JveCwJCVwKIAkuZW5hYmxlX2JveAk9IHNuYmVwX3VuY29yZV9tc3JfZW5hYmxlX2JveCwJCVwKIAkuZGlzYWJsZV9ldmVudAk9IHNuYmVwX3VuY29yZV9tc3JfZGlzYWJsZV9ldmVudCwJXAogCS5lbmFibGVfZXZlbnQJPSBzbmJlcF91bmNvcmVfbXNyX2VuYWJsZV9ldmVudCwJXAogCS5yZWFkX2NvdW50ZXIJPSB1bmNvcmVfbXNyX3JlYWRfY291bnRlcgogCisjZGVmaW5lIFNOQkVQX1VOQ09SRV9NU1JfT1BTX0NPTU1PTl9JTklUKCkJCQlcCisJX19TTkJFUF9VTkNPUkVfTVNSX09QU19DT01NT05fSU5JVCgpLAkJCVwKKwkuaW5pdF9ib3gJPSBzbmJlcF91bmNvcmVfbXNyX2luaXRfYm94CQlcCisKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfdW5jb3JlX29wcyBzbmJlcF91bmNvcmVfbXNyX29wcyA9IHsKIAlTTkJFUF9VTkNPUkVfTVNSX09QU19DT01NT05fSU5JVCgpLAogfTsKQEAgLTE5MTksNiArMTkyNiwzMCBAQAogCS5mb3JtYXRfZ3JvdXAJCT0gJmhzd2VwX3VuY29yZV9jYm94X2Zvcm1hdF9ncm91cCwKIH07CiAKKy8qCisgKiBXcml0ZSBTQk9YIEluaXRpYWxpemF0aW9uIHJlZ2lzdGVyIGJpdCBieSBiaXQgdG8gYXZvaWQgc3B1cmlvdXMgI0dQcworICovCitzdGF0aWMgdm9pZCBoc3dlcF91bmNvcmVfc2JveF9tc3JfaW5pdF9ib3goc3RydWN0IGludGVsX3VuY29yZV9ib3ggKmJveCkKK3sKKwl1bnNpZ25lZCBtc3IgPSB1bmNvcmVfbXNyX2JveF9jdGwoYm94KTsKKworCWlmIChtc3IpIHsKKwkJdTY0IGluaXQgPSBTTkJFUF9QTU9OX0JPWF9DVExfSU5UOworCQl1NjQgZmxhZ3MgPSAwOworCQlpbnQgaTsKKworCQlmb3JfZWFjaF9zZXRfYml0KGksICh1bnNpZ25lZCBsb25nICopJmluaXQsIDY0KSB7CisJCQlmbGFncyB8PSAoMVVMTCA8PCBpKTsKKwkJCXdybXNybChtc3IsIGZsYWdzKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBpbnRlbF91bmNvcmVfb3BzIGhzd2VwX3VuY29yZV9zYm94X21zcl9vcHMgPSB7CisJX19TTkJFUF9VTkNPUkVfTVNSX09QU19DT01NT05fSU5JVCgpLAorCS5pbml0X2JveAkJPSBoc3dlcF91bmNvcmVfc2JveF9tc3JfaW5pdF9ib3gKK307CisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpoc3dlcF91bmNvcmVfc2JveF9mb3JtYXRzX2F0dHJbXSA9IHsKIAkmZm9ybWF0X2F0dHJfZXZlbnQuYXR0ciwKIAkmZm9ybWF0X2F0dHJfdW1hc2suYXR0ciwKQEAgLTE5NDQsNyArMTk3NSw3IEBACiAJLmV2ZW50X21hc2sJCT0gSFNXRVBfU19NU1JfUE1PTl9SQVdfRVZFTlRfTUFTSywKIAkuYm94X2N0bAkJPSBIU1dFUF9TMF9NU1JfUE1PTl9CT1hfQ1RMLAogCS5tc3Jfb2Zmc2V0CQk9IEhTV0VQX1NCT1hfTVNSX09GRlNFVCwKLQkub3BzCQkJPSAmc25iZXBfdW5jb3JlX21zcl9vcHMsCisJLm9wcwkJCT0gJmhzd2VwX3VuY29yZV9zYm94X21zcl9vcHMsCiAJLmZvcm1hdF9ncm91cAkJPSAmaHN3ZXBfdW5jb3JlX3Nib3hfZm9ybWF0X2dyb3VwLAogfTsKIApAQCAtMjAwOSw3ICsyMDQwLDExIEBACiBzdGF0aWMgc3RydWN0IHVuY29yZV9ldmVudF9kZXNjIGhzd2VwX3VuY29yZV9pbWNfZXZlbnRzW10gPSB7CiAJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2xvY2t0aWNrcywgICAgICAiZXZlbnQ9MHgwMCx1bWFzaz0weDAwIiksCiAJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3JlYWQsICAiZXZlbnQ9MHgwNCx1bWFzaz0weDAzIiksCisJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3JlYWQuc2NhbGUsICI2LjEwMzUxNTYyNWUtNSIpLAorCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF9yZWFkLnVuaXQsICJNaUIiKSwKIAlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfd3JpdGUsICJldmVudD0weDA0LHVtYXNrPTB4MGMiKSwKKwlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfd3JpdGUuc2NhbGUsICI2LjEwMzUxNTYyNWUtNSIpLAorCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF93cml0ZS51bml0LCAiTWlCIiksCiAJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfSwKIH07CiAKQEAgLTIwMjUsMTMgKzIwNjAsMjcgQEAKIAlTTkJFUF9VTkNPUkVfUENJX0NPTU1PTl9JTklUKCksCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaHN3ZXBfdW5jb3JlX2lycF9jdHJzW10gPSB7MHhhMCwgMHhhOCwgMHhiMCwgMHhiOH07CisKK3N0YXRpYyB1NjQgaHN3ZXBfdW5jb3JlX2lycF9yZWFkX2NvdW50ZXIoc3RydWN0IGludGVsX3VuY29yZV9ib3ggKmJveCwgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYm94LT5wY2lfZGV2OworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXU2NCBjb3VudCA9IDA7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgaHN3ZXBfdW5jb3JlX2lycF9jdHJzW2h3Yy0+aWR4XSwgKHUzMiAqKSZjb3VudCk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGhzd2VwX3VuY29yZV9pcnBfY3Ryc1tod2MtPmlkeF0gKyA0LCAodTMyICopJmNvdW50ICsgMSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfdW5jb3JlX29wcyBoc3dlcF91bmNvcmVfaXJwX29wcyA9IHsKIAkuaW5pdF9ib3gJPSBzbmJlcF91bmNvcmVfcGNpX2luaXRfYm94LAogCS5kaXNhYmxlX2JveAk9IHNuYmVwX3VuY29yZV9wY2lfZGlzYWJsZV9ib3gsCiAJLmVuYWJsZV9ib3gJPSBzbmJlcF91bmNvcmVfcGNpX2VuYWJsZV9ib3gsCiAJLmRpc2FibGVfZXZlbnQJPSBpdmJlcF91bmNvcmVfaXJwX2Rpc2FibGVfZXZlbnQsCiAJLmVuYWJsZV9ldmVudAk9IGl2YmVwX3VuY29yZV9pcnBfZW5hYmxlX2V2ZW50LAotCS5yZWFkX2NvdW50ZXIJPSBpdmJlcF91bmNvcmVfaXJwX3JlYWRfY291bnRlciwKKwkucmVhZF9jb3VudGVyCT0gaHN3ZXBfdW5jb3JlX2lycF9yZWFkX2NvdW50ZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGVsX3VuY29yZV90eXBlIGhzd2VwX3VuY29yZV9pcnAgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCmluZGV4IDU0MzM2NTguLmU3ZDhjNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCkBAIC03Miw3ICs3Miw3IEBACiAJaWYgKGMtPng4Nl9tYXNrIHx8IGMtPmNwdWlkX2xldmVsID49IDApCiAJCXNlcV9wcmludGYobSwgInN0ZXBwaW5nXHQ6ICVkXG4iLCBjLT54ODZfbWFzayk7CiAJZWxzZQotCQlzZXFfcHJpbnRmKG0sICJzdGVwcGluZ1x0OiB1bmtub3duXG4iKTsKKwkJc2VxX3B1dHMobSwgInN0ZXBwaW5nXHQ6IHVua25vd25cbiIpOwogCWlmIChjLT5taWNyb2NvZGUpCiAJCXNlcV9wcmludGYobSwgIm1pY3JvY29kZVx0OiAweCV4XG4iLCBjLT5taWNyb2NvZGUpOwogCkBAIC05MiwxMiArOTIsMTIgQEAKIAlzaG93X2NwdWluZm9fY29yZShtLCBjLCBjcHUpOwogCXNob3dfY3B1aW5mb19taXNjKG0sIGMpOwogCi0Jc2VxX3ByaW50ZihtLCAiZmxhZ3NcdFx0OiIpOworCXNlcV9wdXRzKG0sICJmbGFnc1x0XHQ6Iik7CiAJZm9yIChpID0gMDsgaSA8IDMyKk5DQVBJTlRTOyBpKyspCiAJCWlmIChjcHVfaGFzKGMsIGkpICYmIHg4Nl9jYXBfZmxhZ3NbaV0gIT0gTlVMTCkKIAkJCXNlcV9wcmludGYobSwgIiAlcyIsIHg4Nl9jYXBfZmxhZ3NbaV0pOwogCi0Jc2VxX3ByaW50ZihtLCAiXG5idWdzXHRcdDoiKTsKKwlzZXFfcHV0cyhtLCAiXG5idWdzXHRcdDoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgMzIqTkJVR0lOVFM7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgYnVnX2JpdCA9IDMyKk5DQVBJTlRTICsgaTsKIApAQCAtMTE4LDcgKzExOCw3IEBACiAJc2VxX3ByaW50ZihtLCAiYWRkcmVzcyBzaXplc1x0OiAldSBiaXRzIHBoeXNpY2FsLCAldSBiaXRzIHZpcnR1YWxcbiIsCiAJCSAgIGMtPng4Nl9waHlzX2JpdHMsIGMtPng4Nl92aXJ0X2JpdHMpOwogCi0Jc2VxX3ByaW50ZihtLCAicG93ZXIgbWFuYWdlbWVudDoiKTsKKwlzZXFfcHV0cyhtLCAicG93ZXIgbWFuYWdlbWVudDoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQlpZiAoYy0+eDg2X3Bvd2VyICYgKDEgPDwgaSkpIHsKIAkJCWlmIChpIDwgQVJSQVlfU0laRSh4ODZfcG93ZXJfZmxhZ3MpICYmCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkJfQogCX0KIAotCXNlcV9wcmludGYobSwgIlxuXG4iKTsKKwlzZXFfcHV0cyhtLCAiXG5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCmluZGV4IDMyMjVhZTZjLi44Mzc0MWE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAKIAlkZXYgPSBkZXZpY2VfY3JlYXRlKGNwdWlkX2NsYXNzLCBOVUxMLCBNS0RFVihDUFVJRF9NQUpPUiwgY3B1KSwgTlVMTCwKIAkJCSAgICAiY3B1JWQiLCBjcHUpOwotCXJldHVybiBJU19FUlIoZGV2KSA/IFBUUl9FUlIoZGV2KSA6IDA7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBjcHVpZF9kZXZpY2VfZGVzdHJveShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCmluZGV4IDFhYmNiNTAuLmZmODZmMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKQEAgLTI0LDcgKzI0LDYgQEAKIAkJWyBERUJVR19TVEFDSy0xCQkJXQk9ICIjREIiLAogCQlbIE5NSV9TVEFDSy0xCQkJXQk9ICJOTUkiLAogCQlbIERPVUJMRUZBVUxUX1NUQUNLLTEJCV0JPSAiI0RGIiwKLQkJWyBTVEFDS0ZBVUxUX1NUQUNLLTEJCV0JPSAiI1NTIiwKIAkJWyBNQ0VfU1RBQ0stMQkJCV0JPSAiI01DIiwKICNpZiBERUJVR19TVEtTWiA+IEVYQ0VQVElPTl9TVEtTWgogCQlbIE5fRVhDRVBUSU9OX1NUQUNLUyAuLi4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggZGYwODhiYi4uYzAyMjZhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTgyOCw5ICs4MjgsMTUgQEAKIAlqbnogbmF0aXZlX2lycV9yZXR1cm5fbGR0CiAjZW5kaWYKIAorLmdsb2JhbCBuYXRpdmVfaXJxX3JldHVybl9pcmV0CiBuYXRpdmVfaXJxX3JldHVybl9pcmV0OgorCS8qCisJICogVGhpcyBtYXkgZmF1bHQuICBOb24tcGFyYW5vaWQgZmF1bHRzIG9uIHJldHVybiB0byB1c2Vyc3BhY2UgYXJlCisJICogaGFuZGxlZCBieSBmaXh1cF9iYWRfaXJldC4gIFRoZXNlIGluY2x1ZGUgI1NTLCAjR1AsIGFuZCAjTlAuCisJICogRG91YmxlLWZhdWx0cyBkdWUgdG8gZXNwZml4NjQgYXJlIGhhbmRsZWQgaW4gZG9fZG91YmxlX2ZhdWx0LgorCSAqIE90aGVyIGZhdWx0cyBoZXJlIGFyZSBmYXRhbC4KKwkgKi8KIAlpcmV0cQotCV9BU01fRVhUQUJMRShuYXRpdmVfaXJxX3JldHVybl9pcmV0LCBiYWRfaXJldCkKIAogI2lmZGVmIENPTkZJR19YODZfRVNQRklYNjQKIG5hdGl2ZV9pcnFfcmV0dXJuX2xkdDoKQEAgLTg1OCwyNSArODY0LDYgQEAKIAlqbXAgbmF0aXZlX2lycV9yZXR1cm5faXJldAogI2VuZGlmCiAKLQkuc2VjdGlvbiAuZml4dXAsImF4IgotYmFkX2lyZXQ6Ci0JLyoKLQkgKiBUaGUgaXJldCB0cmFwcyB3aGVuIHRoZSAlY3Mgb3IgJXNzIGJlaW5nIHJlc3RvcmVkIGlzIGJvZ3VzLgotCSAqIFdlJ3ZlIGxvc3QgdGhlIG9yaWdpbmFsIHRyYXAgdmVjdG9yIGFuZCBlcnJvciBjb2RlLgotCSAqICNHUEYgaXMgdGhlIG1vc3QgbGlrZWx5IG9uZSB0byBnZXQgZm9yIGFuIGludmFsaWQgc2VsZWN0b3IuCi0JICogU28gcHJldGVuZCB3ZSBjb21wbGV0ZWQgdGhlIGlyZXQgYW5kIHRvb2sgdGhlICNHUEYgaW4gdXNlciBtb2RlLgotCSAqCi0JICogV2UgYXJlIG5vdyBydW5uaW5nIHdpdGggdGhlIGtlcm5lbCBHUyBhZnRlciBleGNlcHRpb24gcmVjb3ZlcnkuCi0JICogQnV0IGVycm9yX2VudHJ5IGV4cGVjdHMgdXMgdG8gaGF2ZSB1c2VyIEdTIHRvIG1hdGNoIHRoZSB1c2VyICVjcywKLQkgKiBzbyBzd2FwIGJhY2suCi0JICovCi0JcHVzaHEgJDAKLQotCVNXQVBHUwotCWptcCBnZW5lcmFsX3Byb3RlY3Rpb24KLQotCS5wcmV2aW91cwotCiAJLyogZWRpOiB3b3JrbWFzaywgZWR4OiB3b3JrICovCiByZXRpbnRfY2FyZWZ1bDoKIAlDRklfUkVTVE9SRV9TVEFURQpAQCAtOTIyLDM3ICs5MDksNiBAQAogCUNGSV9FTkRQUk9DCiBFTkQoY29tbW9uX2ludGVycnVwdCkKIAotCS8qCi0JICogSWYgSVJFVCB0YWtlcyBhIGZhdWx0IG9uIHRoZSBlc3BmaXggc3RhY2ssIHRoZW4gd2UKLQkgKiBlbmQgdXAgcHJvbW90aW5nIGl0IHRvIGEgZG91YmxlZmF1bHQuICBJbiB0aGF0IGNhc2UsCi0JICogbW9kaWZ5IHRoZSBzdGFjayB0byBtYWtlIGl0IGxvb2sgbGlrZSB3ZSBqdXN0IGVudGVyZWQKLQkgKiB0aGUgI0dQIGhhbmRsZXIgZnJvbSB1c2VyIHNwYWNlLCBzaW1pbGFyIHRvIGJhZF9pcmV0LgotCSAqLwotI2lmZGVmIENPTkZJR19YODZfRVNQRklYNjQKLQlBTElHTgotX19kb19kb3VibGVfZmF1bHQ6Ci0JWENQVF9GUkFNRSAxIFJESSs4Ci0JbW92cSBSU1AoJXJkaSksJXJheAkJLyogVHJhcCBvbiB0aGUgZXNwZml4IHN0YWNrPyAqLwotCXNhcnEgJFBHRElSX1NISUZULCVyYXgKLQljbXBsICRFU1BGSVhfUEdEX0VOVFJZLCVlYXgKLQlqbmUgZG9fZG91YmxlX2ZhdWx0CQkvKiBObywganVzdCBkZWxpdmVyIHRoZSBmYXVsdCAqLwotCWNtcGwgJF9fS0VSTkVMX0NTLENTKCVyZGkpCi0Jam5lIGRvX2RvdWJsZV9mYXVsdAotCW1vdnEgUklQKCVyZGkpLCVyYXgKLQljbXBxICRuYXRpdmVfaXJxX3JldHVybl9pcmV0LCVyYXgKLQlqbmUgZG9fZG91YmxlX2ZhdWx0CQkvKiBUaGlzIHNob3VsZG4ndCBoYXBwZW4uLi4gKi8KLQltb3ZxIFBFUl9DUFVfVkFSKGtlcm5lbF9zdGFjayksJXJheAotCXN1YnEgJCg2KjgtS0VSTkVMX1NUQUNLX09GRlNFVCksJXJheAkvKiBSZXNldCB0byBvcmlnaW5hbCBzdGFjayAqLwotCW1vdnEgJXJheCxSU1AoJXJkaSkKLQltb3ZxICQwLCglcmF4KQkJCS8qIE1pc3NpbmcgKGxvc3QpICNHUCBlcnJvciBjb2RlICovCi0JbW92cSAkZ2VuZXJhbF9wcm90ZWN0aW9uLFJJUCglcmRpKQotCXJldHEKLQlDRklfRU5EUFJPQwotRU5EKF9fZG9fZG91YmxlX2ZhdWx0KQotI2Vsc2UKLSMgZGVmaW5lIF9fZG9fZG91YmxlX2ZhdWx0IGRvX2RvdWJsZV9mYXVsdAotI2VuZGlmCi0KIC8qCiAgKiBBUElDIGludGVycnVwdHMuCiAgKi8KQEAgLTExMjQsNyArMTA4MCw3IEBACiBpZHRlbnRyeSBib3VuZHMgZG9fYm91bmRzIGhhc19lcnJvcl9jb2RlPTAKIGlkdGVudHJ5IGludmFsaWRfb3AgZG9faW52YWxpZF9vcCBoYXNfZXJyb3JfY29kZT0wCiBpZHRlbnRyeSBkZXZpY2Vfbm90X2F2YWlsYWJsZSBkb19kZXZpY2Vfbm90X2F2YWlsYWJsZSBoYXNfZXJyb3JfY29kZT0wCi1pZHRlbnRyeSBkb3VibGVfZmF1bHQgX19kb19kb3VibGVfZmF1bHQgaGFzX2Vycm9yX2NvZGU9MSBwYXJhbm9pZD0xCitpZHRlbnRyeSBkb3VibGVfZmF1bHQgZG9fZG91YmxlX2ZhdWx0IGhhc19lcnJvcl9jb2RlPTEgcGFyYW5vaWQ9MQogaWR0ZW50cnkgY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuIGRvX2NvcHJvY2Vzc29yX3NlZ21lbnRfb3ZlcnJ1biBoYXNfZXJyb3JfY29kZT0wCiBpZHRlbnRyeSBpbnZhbGlkX1RTUyBkb19pbnZhbGlkX1RTUyBoYXNfZXJyb3JfY29kZT0xCiBpZHRlbnRyeSBzZWdtZW50X25vdF9wcmVzZW50IGRvX3NlZ21lbnRfbm90X3ByZXNlbnQgaGFzX2Vycm9yX2NvZGU9MQpAQCAtMTI4OSw3ICsxMjQ1LDcgQEAKIAogaWR0ZW50cnkgZGVidWcgZG9fZGVidWcgaGFzX2Vycm9yX2NvZGU9MCBwYXJhbm9pZD0xIHNoaWZ0X2lzdD1ERUJVR19TVEFDSwogaWR0ZW50cnkgaW50MyBkb19pbnQzIGhhc19lcnJvcl9jb2RlPTAgcGFyYW5vaWQ9MSBzaGlmdF9pc3Q9REVCVUdfU1RBQ0sKLWlkdGVudHJ5IHN0YWNrX3NlZ21lbnQgZG9fc3RhY2tfc2VnbWVudCBoYXNfZXJyb3JfY29kZT0xIHBhcmFub2lkPTEKK2lkdGVudHJ5IHN0YWNrX3NlZ21lbnQgZG9fc3RhY2tfc2VnbWVudCBoYXNfZXJyb3JfY29kZT0xCiAjaWZkZWYgQ09ORklHX1hFTgogaWR0ZW50cnkgeGVuX2RlYnVnIGRvX2RlYnVnIGhhc19lcnJvcl9jb2RlPTAKIGlkdGVudHJ5IHhlbl9pbnQzIGRvX2ludDMgaGFzX2Vycm9yX2NvZGU9MApAQCAtMTM5OSwxNyArMTM1NSwxNiBAQAogCiAvKgogICogVGhlcmUgYXJlIHR3byBwbGFjZXMgaW4gdGhlIGtlcm5lbCB0aGF0IGNhbiBwb3RlbnRpYWxseSBmYXVsdCB3aXRoCi0gKiB1c2VyZ3MuIEhhbmRsZSB0aGVtIGhlcmUuIFRoZSBleGNlcHRpb24gaGFuZGxlcnMgYWZ0ZXIgaXJldCBydW4gd2l0aAotICoga2VybmVsIGdzIGFnYWluLCBzbyBkb24ndCBzZXQgdGhlIHVzZXIgc3BhY2UgZmxhZy4gQiBzdGVwcGluZyBLOHMKLSAqIHNvbWV0aW1lcyByZXBvcnQgYW4gdHJ1bmNhdGVkIFJJUCBmb3IgSVJFVCBleGNlcHRpb25zIHJldHVybmluZyB0bwotICogY29tcGF0IG1vZGUuIENoZWNrIGZvciB0aGVzZSBoZXJlIHRvby4KKyAqIHVzZXJncy4gSGFuZGxlIHRoZW0gaGVyZS4gIEIgc3RlcHBpbmcgSzhzIHNvbWV0aW1lcyByZXBvcnQgYQorICogdHJ1bmNhdGVkIFJJUCBmb3IgSVJFVCBleGNlcHRpb25zIHJldHVybmluZyB0byBjb21wYXQgbW9kZS4gQ2hlY2sKKyAqIGZvciB0aGVzZSBoZXJlIHRvby4KICAqLwogZXJyb3Jfa2VybmVsc3BhY2U6CiAJQ0ZJX1JFTF9PRkZTRVQgcmN4LCBSQ1grOAogCWluY2wgJWVieAogCWxlYXEgbmF0aXZlX2lycV9yZXR1cm5faXJldCglcmlwKSwlcmN4CiAJY21wcSAlcmN4LFJJUCs4KCVyc3ApCi0JamUgZXJyb3Jfc3dhcGdzCisJamUgZXJyb3JfYmFkX2lyZXQKIAltb3ZsICVlY3gsJWVheAkvKiB6ZXJvIGV4dGVuZCAqLwogCWNtcHEgJXJheCxSSVArOCglcnNwKQogCWplIGJzdGVwX2lyZXQKQEAgLTE0MjAsNyArMTM3NSwxNSBAQAogYnN0ZXBfaXJldDoKIAkvKiBGaXggdHJ1bmNhdGVkIFJJUCAqLwogCW1vdnEgJXJjeCxSSVArOCglcnNwKQotCWptcCBlcnJvcl9zd2FwZ3MKKwkvKiBmYWxsIHRocm91Z2ggKi8KKworZXJyb3JfYmFkX2lyZXQ6CisJU1dBUEdTCisJbW92ICVyc3AsJXJkaQorCWNhbGwgZml4dXBfYmFkX2lyZXQKKwltb3YgJXJheCwlcnNwCisJZGVjbCAlZWJ4CS8qIFJldHVybiB0byB1c2VyZ3MgKi8KKwlqbXAgZXJyb3Jfc3RpCiAJQ0ZJX0VORFBST0MKIEVORChlcnJvcl9lbnRyeSkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VzcGZpeF82NC5jIGIvYXJjaC94ODYva2VybmVsL2VzcGZpeF82NC5jCmluZGV4IDk0ZDg1N2YuLmY1ZDA3MzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lc3BmaXhfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZXNwZml4XzY0LmMKQEAgLTEyMiw5ICsxMjIsNiBAQAogdm9pZCBfX2luaXQgaW5pdF9lc3BmaXhfYnNwKHZvaWQpCiB7CiAJcGdkX3QgKnBnZF9wOwotCXB0ZXZhbF90IHB0ZW1hc2s7Ci0KLQlwdGVtYXNrID0gX19zdXBwb3J0ZWRfcHRlX21hc2s7CiAKIAkvKiBJbnN0YWxsIHRoZSBlc3BmaXggcHVkIGludG8gdGhlIGtlcm5lbCBwYWdlIGRpcmVjdG9yeSAqLwogCXBnZF9wID0gJmluaXRfbGV2ZWw0X3BndFtwZ2RfaW5kZXgoRVNQRklYX0JBU0VfQUREUildOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycS5jIGIvYXJjaC94ODYva2VybmVsL2lycS5jCmluZGV4IDkyMmQyODUuLjYzMDdhMGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKQEAgLTU5LDc4ICs1OSw3OCBAQAogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIk5NSSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPl9fbm1pX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBOb24tbWFza2FibGUgaW50ZXJydXB0c1xuIik7CiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiTE9DIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+YXBpY190aW1lcl9pcnFzKTsKLQlzZXFfcHJpbnRmKHAsICIgIExvY2FsIHRpbWVyIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIExvY2FsIHRpbWVyIGludGVycnVwdHNcbiIpOwogCiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiU1BVIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3NwdXJpb3VzX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlBNSSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfcGVyZl9pcnFzKTsKLQlzZXFfcHJpbnRmKHAsICIgIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJydXB0c1xuIik7CisJc2VxX3B1dHMocCwgIiAgUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcnJ1cHRzXG4iKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJJV0kiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX2lycV93b3JrX2lycXMpOwotCXNlcV9wcmludGYocCwgIiAgSVJRIHdvcmsgaW50ZXJydXB0c1xuIik7CisJc2VxX3B1dHMocCwgIiAgSVJRIHdvcmsgaW50ZXJydXB0c1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiUlRSIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aWNyX3JlYWRfcmV0cnlfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgQVBJQyBJQ1IgcmVhZCByZXRyaWVzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBBUElDIElDUiByZWFkIHJldHJpZXNcbiIpOwogI2VuZGlmCiAJaWYgKHg4Nl9wbGF0Zm9ybV9pcGlfY2FsbGJhY2spIHsKIAkJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiUExUIik7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT54ODZfcGxhdGZvcm1faXBpcyk7Ci0JCXNlcV9wcmludGYocCwgIiAgUGxhdGZvcm0gaW50ZXJydXB0c1xuIik7CisJCXNlcV9wdXRzKHAsICIgIFBsYXRmb3JtIGludGVycnVwdHNcbiIpOwogCX0KICNpZmRlZiBDT05GSUdfU01QCiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiUkVTIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3Jlc2NoZWRfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgUmVzY2hlZHVsaW5nIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJDQUwiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfY2FsbF9jb3VudCAtCiAJCQkJCWlycV9zdGF0cyhqKS0+aXJxX3RsYl9jb3VudCk7Ci0Jc2VxX3ByaW50ZihwLCAiICBGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIEZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVExCIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3RsYl9jb3VudCk7Ci0Jc2VxX3ByaW50ZihwLCAiICBUTEIgc2hvb3Rkb3duc1xuIik7CisJc2VxX3B1dHMocCwgIiAgVExCIHNob290ZG93bnNcbiIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4Nl9USEVSTUFMX1ZFQ1RPUgogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlRSTSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV90aGVybWFsX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIFRoZXJtYWwgZXZlbnQgaW50ZXJydXB0c1xuIik7CisJc2VxX3B1dHMocCwgIiAgVGhlcm1hbCBldmVudCBpbnRlcnJ1cHRzXG4iKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfTUNFX1RIUkVTSE9MRAogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlRIUiIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV90aHJlc2hvbGRfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgVGhyZXNob2xkIEFQSUMgaW50ZXJydXB0c1xuIik7CisJc2VxX3B1dHMocCwgIiAgVGhyZXNob2xkIEFQSUMgaW50ZXJydXB0c1xuIik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X01DRQogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIk1DRSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBwZXJfY3B1KG1jZV9leGNlcHRpb25fY291bnQsIGopKTsKLQlzZXFfcHJpbnRmKHAsICIgIE1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uc1xuIik7CisJc2VxX3B1dHMocCwgIiAgTWFjaGluZSBjaGVjayBleGNlcHRpb25zXG4iKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJNQ1AiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgcGVyX2NwdShtY2VfcG9sbF9jb3VudCwgaikpOwotCXNlcV9wcmludGYocCwgIiAgTWFjaGluZSBjaGVjayBwb2xsc1xuIik7CisJc2VxX3B1dHMocCwgIiAgTWFjaGluZSBjaGVjayBwb2xsc1xuIik7CiAjZW5kaWYKICNpZiBJU19FTkFCTEVEKENPTkZJR19IWVBFUlYpIHx8IGRlZmluZWQoQ09ORklHX1hFTikKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUSFIiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfaHZfY2FsbGJhY2tfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgSHlwZXJ2aXNvciBjYWxsYmFjayBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBIeXBlcnZpc29yIGNhbGxiYWNrIGludGVycnVwdHNcbiIpOwogI2VuZGlmCiAJc2VxX3ByaW50ZihwLCAiJSpzOiAlMTB1XG4iLCBwcmVjLCAiRVJSIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKICNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2NvcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2NvcmUuYwppbmRleCA2N2U2ZDE5ZS4uZjdlM2NkNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMvY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2NvcmUuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJCSAqIG5vcm1hbGx5IHVzZWQsIHdlIGp1c3QgZ28gdGhyb3VnaCBpZiB0aGVyZSBpcyBubyBrcHJvYmUuCiAJCSAqLwogCQlfX2FkZHIgPSByZWNvdmVyX3Byb2JlZF9pbnN0cnVjdGlvbihidWYsIGFkZHIpOwotCQlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCAodm9pZCAqKV9fYWRkcik7CisJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopX19hZGRyLCBNQVhfSU5TTl9TSVpFKTsKIAkJaW5zbl9nZXRfbGVuZ3RoKCZpbnNuKTsKIAogCQkvKgpAQCAtMzMwLDggKzMzMCwxMCBAQAogewogCXN0cnVjdCBpbnNuIGluc247CiAJa3Byb2JlX29wY29kZV90IGJ1ZltNQVhfSU5TTl9TSVpFXTsKKwl1bnNpZ25lZCBsb25nIHJlY292ZXJlZF9pbnNuID0KKwkJcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oYnVmLCAodW5zaWduZWQgbG9uZylzcmMpOwogCi0Ja2VybmVsX2luc25faW5pdCgmaW5zbiwgKHZvaWQgKilyZWNvdmVyX3Byb2JlZF9pbnN0cnVjdGlvbihidWYsICh1bnNpZ25lZCBsb25nKXNyYykpOworCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopcmVjb3ZlcmVkX2luc24sIE1BWF9JTlNOX1NJWkUpOwogCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CiAJLyogQW5vdGhlciBzdWJzeXN0ZW0gcHV0cyBhIGJyZWFrcG9pbnQsIGZhaWxlZCB0byByZWNvdmVyICovCiAJaWYgKGluc24ub3Bjb2RlLmJ5dGVzWzBdID09IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pCkBAIC0zNDIsNyArMzQ0LDcgQEAKIAlpZiAoaW5zbl9yaXBfcmVsYXRpdmUoJmluc24pKSB7CiAJCXM2NCBuZXdkaXNwOwogCQl1OCAqZGlzcDsKLQkJa2VybmVsX2luc25faW5pdCgmaW5zbiwgZGVzdCk7CisJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sIGRlc3QsIGluc24ubGVuZ3RoKTsKIAkJaW5zbl9nZXRfZGlzcGxhY2VtZW50KCZpbnNuKTsKIAkJLyoKIAkJICogVGhlIGNvcGllZCBpbnN0cnVjdGlvbiB1c2VzIHRoZSAlcmlwLXJlbGF0aXZlIGFkZHJlc3NpbmcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL29wdC5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMvb3B0LmMKaW5kZXggZjEzMTRkMC4uN2M1MjNiYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMvb3B0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMvb3B0LmMKQEAgLTI1MSwxMyArMjUxLDE1IEBACiAJLyogRGVjb2RlIGluc3RydWN0aW9ucyAqLwogCWFkZHIgPSBwYWRkciAtIG9mZnNldDsKIAl3aGlsZSAoYWRkciA8IHBhZGRyIC0gb2Zmc2V0ICsgc2l6ZSkgeyAvKiBEZWNvZGUgdW50aWwgZnVuY3Rpb24gZW5kICovCisJCXVuc2lnbmVkIGxvbmcgcmVjb3ZlcmVkX2luc247CiAJCWlmIChzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhhZGRyKSkKIAkJCS8qCiAJCQkgKiBTaW5jZSBzb21lIGZpeHVwIGNvZGUgd2lsbCBqdW1wcyBpbnRvIHRoaXMgZnVuY3Rpb24sCiAJCQkgKiB3ZSBjYW4ndCBvcHRpbWl6ZSBrcHJvYmUgaW4gdGhpcyBmdW5jdGlvbi4KIAkJCSAqLwogCQkJcmV0dXJuIDA7Ci0JCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oYnVmLCBhZGRyKSk7CisJCXJlY292ZXJlZF9pbnNuID0gcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oYnVmLCBhZGRyKTsKKwkJa2VybmVsX2luc25faW5pdCgmaW5zbiwgKHZvaWQgKilyZWNvdmVyZWRfaW5zbiwgTUFYX0lOU05fU0laRSk7CiAJCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CiAJCS8qIEFub3RoZXIgc3Vic3lzdGVtIHB1dHMgYSBicmVha3BvaW50ICovCiAJCWlmIChpbnNuLm9wY29kZS5ieXRlc1swXSA9PSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21zci5jIGIvYXJjaC94ODYva2VybmVsL21zci5jCmluZGV4IGM5NjAzYWMuLjExM2U3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKQEAgLTIyLDYgKzIyLDggQEAKICAqIGFuIFNNUCBib3ggd2lsbCBkaXJlY3QgdGhlIGFjY2VzcyB0byBDUFUgJWQuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNTAsMTEgKzUyLDExIEBACiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnKSB7Ci0JY2FzZSAwOgorCWNhc2UgU0VFS19TRVQ6CiAJCWZpbGUtPmZfcG9zID0gb2Zmc2V0OwogCQlyZXQgPSBmaWxlLT5mX3BvczsKIAkJYnJlYWs7Ci0JY2FzZSAxOgorCWNhc2UgU0VFS19DVVI6CiAJCWZpbGUtPmZfcG9zICs9IG9mZnNldDsKIAkJcmV0ID0gZmlsZS0+Zl9wb3M7CiAJCWJyZWFrOwpAQCAtMjA2LDcgKzIwOCw3IEBACiAKIAlkZXYgPSBkZXZpY2VfY3JlYXRlKG1zcl9jbGFzcywgTlVMTCwgTUtERVYoTVNSX01BSk9SLCBjcHUpLCBOVUxMLAogCQkJICAgICJtc3IlZCIsIGNwdSk7Ci0JcmV0dXJuIElTX0VSUihkZXYpID8gUFRSX0VSUihkZXYpIDogMDsKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIG1zcl9kZXZpY2VfZGVzdHJveShpbnQgY3B1KQpAQCAtMjQ4LDggKzI1MCw3IEBACiAJaSA9IDA7CiAKIAlpZiAoX19yZWdpc3Rlcl9jaHJkZXYoTVNSX01BSk9SLCAwLCBOUl9DUFVTLCAiY3B1L21zciIsICZtc3JfZm9wcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtc3I6IHVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIG1zclxuIiwKLQkJICAgICAgIE1TUl9NQUpPUik7CisJCXByX2VycigidW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgbXNyXG4iLCBNU1JfTUFKT1IpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCA3NDliMGU0Li5lNTEwNjE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC0xNDg0LDcgKzE0ODQsNyBAQAogCSAqLwogCWlmICh3b3JrICYgX1RJRl9OT0haKSB7CiAJCXVzZXJfZXhpdCgpOwotCQl3b3JrICY9IH5USUZfTk9IWjsKKwkJd29yayAmPSB+X1RJRl9OT0haOwogCX0KIAogI2lmZGVmIENPTkZJR19TRUNDT01QCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGFiMDhhYTIuLmFiNDczNGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC05NjAsNiArOTYwLDggQEAKIAlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKIAlpbml0X21tLmJyayA9IF9icmtfZW5kOwogCisJbXB4X21tX2luaXQoJmluaXRfbW0pOworCiAJY29kZV9yZXNvdXJjZS5zdGFydCA9IF9fcGFfc3ltYm9sKF90ZXh0KTsKIAljb2RlX3Jlc291cmNlLmVuZCA9IF9fcGFfc3ltYm9sKF9ldGV4dCktMTsKIAlkYXRhX3Jlc291cmNlLnN0YXJ0ID0gX19wYV9zeW1ib2woX2V0ZXh0KTsKQEAgLTExOTAsOSArMTE5Miw3IEBACiAKIAl0Ym9vdF9wcm9iZSgpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCW1hcF92c3lzY2FsbCgpOwotI2VuZGlmCiAKIAlnZW5lcmljX2FwaWNfcHJvYmUoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCmluZGV4IDVjZGZmMDMuLmU0ZmNiODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgQk9PVF9QRVJDUFVfT0ZGU0VUIDAKICNlbmRpZgogCi1ERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpID0gQk9PVF9QRVJDUFVfT0ZGU0VUOworREVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFkodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKSA9IEJPT1RfUEVSQ1BVX09GRlNFVDsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh0aGlzX2NwdV9vZmYpOwogCiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDRkMjEyOGEuLjdhOGY1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtOTksNyArOTksNyBAQAogREVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFkoY3B1bWFza192YXJfdCwgY3B1X2xsY19zaGFyZWRfbWFwKTsKIAogLyogUGVyIENQVSBib2dvbWlwcyBhbmQgb3RoZXIgcGFyYW1ldGVycyAqLwotREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CitERUZJTkVfUEVSX0NQVV9SRUFEX01PU1RMWShzdHJ1Y3QgY3B1aW5mb194ODYsIGNwdV9pbmZvKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfaW5mbyk7CiAKIGF0b21pY190IGluaXRfZGVhc3NlcnRlZDsKQEAgLTEzMDMsMTAgKzEzMDMsMTQgQEAKIAludW1hX3JlbW92ZV9jcHUoY3B1KTsKIH0KIAorc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjb21wbGV0aW9uLCBkaWVfY29tcGxldGUpOworCiB2b2lkIGNwdV9kaXNhYmxlX2NvbW1vbih2b2lkKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKKwlpbml0X2NvbXBsZXRpb24oJnBlcl9jcHUoZGllX2NvbXBsZXRlLCBzbXBfcHJvY2Vzc29yX2lkKCkpKTsKKwogCXJlbW92ZV9zaWJsaW5naW5mbyhjcHUpOwogCiAJLyogSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhpcyBwcm9jZXNzb3IgZnJvbSB0aGUgb25saW5lIG1hcCAqLwpAQCAtMTMxNiw4ICsxMzIwLDYgQEAKIAlmaXh1cF9pcnFzKCk7CiB9CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY29tcGxldGlvbiwgZGllX2NvbXBsZXRlKTsKLQogaW50IG5hdGl2ZV9jcHVfZGlzYWJsZSh2b2lkKQogewogCWludCByZXQ7CkBAIC0xMzI3LDE2ICsxMzI5LDIxIEBACiAJCXJldHVybiByZXQ7CiAKIAljbGVhcl9sb2NhbF9BUElDKCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZwZXJfY3B1KGRpZV9jb21wbGV0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSk7CiAJY3B1X2Rpc2FibGVfY29tbW9uKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBjcHVfZGllX2NvbW1vbih1bnNpZ25lZCBpbnQgY3B1KQoreworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcGVyX2NwdShkaWVfY29tcGxldGUsIGNwdSksIEhaKTsKK30KKwogdm9pZCBuYXRpdmVfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIGhlcmU6IGlkbGUgdGFzayBpcyBmYWtpbmcgZGVhdGggaXRzZWxmLiAqLwotCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcGVyX2NwdShkaWVfY29tcGxldGUsIGNwdSksIEhaKTsKKworCWNwdV9kaWVfY29tbW9uKGNwdSk7CiAKIAkvKiBUaGV5IGFjayB0aGlzIGluIHBsYXlfZGVhZCgpIGJ5IHNldHRpbmcgQ1BVX0RFQUQgKi8KIAlpZiAocGVyX2NwdShjcHVfc3RhdGUsIGNwdSkgPT0gQ1BVX0RFQUQpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNmYi5jIGIvYXJjaC94ODYva2VybmVsL3N5c2ZiLmMKaW5kZXggMTkzZWMyYy4uMTYwMzg2ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c2ZiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3N5c2ZiLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogCXBkID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsIG5hbWUsIDAsCiAJCQkJCSAgICAgICBOVUxMLCAwLCBzaSwgc2l6ZW9mKCpzaSkpOwotCXJldHVybiBJU19FUlIocGQpID8gUFRSX0VSUihwZCkgOiAwOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocGQpOwogfQogCiAvKiBtdXN0IGV4ZWN1dGUgYWZ0ZXIgUENJIHN1YnN5c3RlbSBmb3IgRUZJIHF1aXJrcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c2ZiX3NpbXBsZWZiLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzZmJfc2ltcGxlZmIuYwppbmRleCA4NjE3OWQ0Li43NjRhMjlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzZmJfc2ltcGxlZmIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzZmJfc2ltcGxlZmIuYwpAQCAtODgsOCArODgsNSBAQAogCiAJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgInNpbXBsZS1mcmFtZWJ1ZmZlciIsIDAsCiAJCQkJCSAgICAgICAmcmVzLCAxLCBtb2RlLCBzaXplb2YoKm1vZGUpKTsKLQlpZiAoSVNfRVJSKHBkKSkKLQkJcmV0dXJuIFBUUl9FUlIocGQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jIGIvYXJjaC94ODYva2VybmVsL3RpbWUuYwppbmRleCAwZmEyOTYwLi4yNWFkYzBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotX192aXNpYmxlIERFRklORV9WVkFSKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcsIGppZmZpZXMpID0gSU5JVElBTF9KSUZGSUVTOworX192aXNpYmxlIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgamlmZmllcyBfX2NhY2hlbGluZV9hbGlnbmVkID0gSU5JVElBTF9KSUZGSUVTOwogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggMGQwZTkyMi4uYTlhZTIwNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hfdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vbXB4Lmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CkBAIC0yMjgsMzcgKzIyOSw0NCBAQAogCiBET19FUlJPUihYODZfVFJBUF9ERSwgICAgIFNJR0ZQRSwgICJkaXZpZGUgZXJyb3IiLAkJZGl2aWRlX2Vycm9yKQogRE9fRVJST1IoWDg2X1RSQVBfT0YsICAgICBTSUdTRUdWLCAib3ZlcmZsb3ciLAkJCW92ZXJmbG93KQotRE9fRVJST1IoWDg2X1RSQVBfQlIsICAgICBTSUdTRUdWLCAiYm91bmRzIiwJCQlib3VuZHMpCiBET19FUlJPUihYODZfVFJBUF9VRCwgICAgIFNJR0lMTCwgICJpbnZhbGlkIG9wY29kZSIsCQlpbnZhbGlkX29wKQogRE9fRVJST1IoWDg2X1RSQVBfT0xEX01GLCBTSUdGUEUsICAiY29wcm9jZXNzb3Igc2VnbWVudCBvdmVycnVuIixjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pCiBET19FUlJPUihYODZfVFJBUF9UUywgICAgIFNJR1NFR1YsICJpbnZhbGlkIFRTUyIsCQlpbnZhbGlkX1RTUykKIERPX0VSUk9SKFg4Nl9UUkFQX05QLCAgICAgU0lHQlVTLCAgInNlZ21lbnQgbm90IHByZXNlbnQiLAlzZWdtZW50X25vdF9wcmVzZW50KQotI2lmZGVmIENPTkZJR19YODZfMzIKIERPX0VSUk9SKFg4Nl9UUkFQX1NTLCAgICAgU0lHQlVTLCAgInN0YWNrIHNlZ21lbnQiLAkJc3RhY2tfc2VnbWVudCkKLSNlbmRpZgogRE9fRVJST1IoWDg2X1RSQVBfQUMsICAgICBTSUdCVVMsICAiYWxpZ25tZW50IGNoZWNrIiwJCWFsaWdubWVudF9jaGVjaykKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIC8qIFJ1bnMgb24gSVNUIHN0YWNrICovCi1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fc3RhY2tfc2VnbWVudChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQotewotCWVudW0gY3R4X3N0YXRlIHByZXZfc3RhdGU7Ci0KLQlwcmV2X3N0YXRlID0gZXhjZXB0aW9uX2VudGVyKCk7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsICJzdGFjayBzZWdtZW50IiwgcmVncywgZXJyb3JfY29kZSwKLQkJICAgICAgIFg4Nl9UUkFQX1NTLCBTSUdCVVMpICE9IE5PVElGWV9TVE9QKSB7Ci0JCXByZWVtcHRfY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwotCQlkb190cmFwKFg4Nl9UUkFQX1NTLCBTSUdCVVMsICJzdGFjayBzZWdtZW50IiwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7Ci0JCXByZWVtcHRfY29uZGl0aW9uYWxfY2xpKHJlZ3MpOwotCX0KLQlleGNlcHRpb25fZXhpdChwcmV2X3N0YXRlKTsKLX0KLQogZG90cmFwbGlua2FnZSB2b2lkIGRvX2RvdWJsZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewogCXN0YXRpYyBjb25zdCBjaGFyIHN0cltdID0gImRvdWJsZSBmYXVsdCI7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCisjaWZkZWYgQ09ORklHX1g4Nl9FU1BGSVg2NAorCWV4dGVybiB1bnNpZ25lZCBjaGFyIG5hdGl2ZV9pcnFfcmV0dXJuX2lyZXRbXTsKKworCS8qCisJICogSWYgSVJFVCB0YWtlcyBhIG5vbi1JU1QgZmF1bHQgb24gdGhlIGVzcGZpeDY0IHN0YWNrLCB0aGVuIHdlCisJICogZW5kIHVwIHByb21vdGluZyBpdCB0byBhIGRvdWJsZWZhdWx0LiAgSW4gdGhhdCBjYXNlLCBtb2RpZnkKKwkgKiB0aGUgc3RhY2sgdG8gbWFrZSBpdCBsb29rIGxpa2Ugd2UganVzdCBlbnRlcmVkIHRoZSAjR1AKKwkgKiBoYW5kbGVyIGZyb20gdXNlciBzcGFjZSwgc2ltaWxhciB0byBiYWRfaXJldC4KKwkgKi8KKwlpZiAoKChsb25nKXJlZ3MtPnNwID4+IFBHRElSX1NISUZUKSA9PSBFU1BGSVhfUEdEX0VOVFJZICYmCisJCXJlZ3MtPmNzID09IF9fS0VSTkVMX0NTICYmCisJCXJlZ3MtPmlwID09ICh1bnNpZ25lZCBsb25nKW5hdGl2ZV9pcnFfcmV0dXJuX2lyZXQpCisJeworCQlzdHJ1Y3QgcHRfcmVncyAqbm9ybWFsX3JlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisKKwkJLyogRmFrZSBhICNHUCgwKSBmcm9tIHVzZXJzcGFjZS4gKi8KKwkJbWVtbW92ZSgmbm9ybWFsX3JlZ3MtPmlwLCAodm9pZCAqKXJlZ3MtPnNwLCA1KjgpOworCQlub3JtYWxfcmVncy0+b3JpZ19heCA9IDA7ICAvKiBNaXNzaW5nIChsb3N0KSAjR1AgZXJyb3IgY29kZSAqLworCQlyZWdzLT5pcCA9ICh1bnNpZ25lZCBsb25nKWdlbmVyYWxfcHJvdGVjdGlvbjsKKwkJcmVncy0+c3AgPSAodW5zaWduZWQgbG9uZykmbm9ybWFsX3JlZ3MtPm9yaWdfYXg7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwogCWV4Y2VwdGlvbl9lbnRlcigpOwogCS8qIFJldHVybiBub3QgY2hlY2tlZCBiZWNhdXNlIGRvdWJsZSBjaGVjayBjYW5ub3QgYmUgaWdub3JlZCAqLwogCW5vdGlmeV9kaWUoRElFX1RSQVAsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgWDg2X1RSQVBfREYsIFNJR1NFR1YpOwpAQCAtMjc4LDYgKzI4Niw4OSBAQAogfQogI2VuZGlmCiAKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19ib3VuZHMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmOworCWVudW0gY3R4X3N0YXRlIHByZXZfc3RhdGU7CisJc3RydWN0IGJuZGNzciAqYm5kY3NyOworCXNpZ2luZm9fdCAqaW5mbzsKKworCXByZXZfc3RhdGUgPSBleGNlcHRpb25fZW50ZXIoKTsKKwlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgImJvdW5kcyIsIHJlZ3MsIGVycm9yX2NvZGUsCisJCQlYODZfVFJBUF9CUiwgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCWdvdG8gZXhpdDsKKwljb25kaXRpb25hbF9zdGkocmVncyk7CisKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJZGllKCJib3VuZHMiLCByZWdzLCBlcnJvcl9jb2RlKTsKKworCWlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9NUFgpKSB7CisJCS8qIFRoZSBleGNlcHRpb24gaXMgbm90IGZyb20gSW50ZWwgTVBYICovCisJCWdvdG8gZXhpdF90cmFwOworCX0KKworCS8qCisJICogV2UgbmVlZCB0byBsb29rIGF0IEJORFNUQVRVUyB0byByZXNvbHZlIHRoaXMgZXhjZXB0aW9uLgorCSAqIEl0IGlzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlLCB0aG91Z2gsIHNvIHdlIG5lZWQgdG8KKwkgKiBkbyBhbiB4c2F2ZSBhbmQgdGhlbiBwdWxsIGl0IG91dCBvZiB0aGUgeHNhdmUgYnVmZmVyLgorCSAqLworCWZwdV9zYXZlX2luaXQoJnRzay0+dGhyZWFkLmZwdSk7CisJeHNhdmVfYnVmID0gJih0c2stPnRocmVhZC5mcHUuc3RhdGUtPnhzYXZlKTsKKwlibmRjc3IgPSBnZXRfeHNhdmVfYWRkcih4c2F2ZV9idWYsIFhTVEFURV9CTkRDU1IpOworCWlmICghYm5kY3NyKQorCQlnb3RvIGV4aXRfdHJhcDsKKworCS8qCisJICogVGhlIGVycm9yIGNvZGUgZmllbGQgb2YgdGhlIEJORFNUQVRVUyByZWdpc3RlciBjb21tdW5pY2F0ZXMgc3RhdHVzCisJICogaW5mb3JtYXRpb24gb2YgYSBib3VuZCByYW5nZSBleGNlcHRpb24gI0JSIG9yIG9wZXJhdGlvbiBpbnZvbHZpbmcKKwkgKiBib3VuZCBkaXJlY3RvcnkuCisJICovCisJc3dpdGNoIChibmRjc3ItPmJuZHN0YXR1cyAmIE1QWF9CTkRTVEFfRVJST1JfQ09ERSkgeworCWNhc2UgMjoJLyogQm91bmQgZGlyZWN0b3J5IGhhcyBpbnZhbGlkIGVudHJ5LiAqLworCQlpZiAobXB4X2hhbmRsZV9iZF9mYXVsdCh4c2F2ZV9idWYpKQorCQkJZ290byBleGl0X3RyYXA7CisJCWJyZWFrOyAvKiBTdWNjZXNzLCBpdCB3YXMgaGFuZGxlZCAqLworCWNhc2UgMTogLyogQm91bmQgdmlvbGF0aW9uLiAqLworCQlpbmZvID0gbXB4X2dlbmVyYXRlX3NpZ2luZm8ocmVncywgeHNhdmVfYnVmKTsKKwkJaWYgKFBUUl9FUlIoaW5mbykpIHsKKwkJCS8qCisJCQkgKiBXZSBmYWlsZWQgdG8gZGVjb2RlIHRoZSBNUFggaW5zdHJ1Y3Rpb24uICBBY3QgYXMgaWYKKwkJCSAqIHRoZSBleGNlcHRpb24gd2FzIG5vdCBjYXVzZWQgYnkgTVBYLgorCQkJICovCisJCQlnb3RvIGV4aXRfdHJhcDsKKwkJfQorCQkvKgorCQkgKiBTdWNjZXNzLCB3ZSBkZWNvZGVkIHRoZSBpbnN0cnVjdGlvbiBhbmQgcmV0cmlldmVkCisJCSAqIGFuICdpbmZvJyBjb250YWluaW5nIHRoZSBhZGRyZXNzIGJlaW5nIGFjY2Vzc2VkCisJCSAqIHdoaWNoIGNhdXNlZCB0aGUgZXhjZXB0aW9uLiAgVGhpcyBpbmZvcm1hdGlvbgorCQkgKiBhbGxvd3MgYW5kIGFwcGxpY2F0aW9uIHRvIHBvc3NpYmx5IGhhbmRsZSB0aGUKKwkJICogI0JSIGV4Y2VwdGlvbiBpdHNlbGYuCisJCSAqLworCQlkb190cmFwKFg4Nl9UUkFQX0JSLCBTSUdTRUdWLCAiYm91bmRzIiwgcmVncywgZXJyb3JfY29kZSwgaW5mbyk7CisJCWtmcmVlKGluZm8pOworCQlicmVhazsKKwljYXNlIDA6IC8qIE5vIGV4Y2VwdGlvbiBjYXVzZWQgYnkgSW50ZWwgTVBYIG9wZXJhdGlvbnMuICovCisJCWdvdG8gZXhpdF90cmFwOworCWRlZmF1bHQ6CisJCWRpZSgiYm91bmRzIiwgcmVncywgZXJyb3JfY29kZSk7CisJfQorCitleGl0OgorCWV4Y2VwdGlvbl9leGl0KHByZXZfc3RhdGUpOworCXJldHVybjsKK2V4aXRfdHJhcDoKKwkvKgorCSAqIFRoaXMgcGF0aCBvdXQgaXMgZm9yIGFsbCB0aGUgY2FzZXMgd2hlcmUgd2UgY291bGQgbm90CisJICogaGFuZGxlIHRoZSBleGNlcHRpb24gaW4gc29tZSB3YXkgKGxpa2UgYWxsb2NhdGluZyBhCisJICogdGFibGUgb3IgdGVsbGluZyB1c2Vyc3BhY2UgYWJvdXQgaXQuICBXZSB3aWxsIGFsc28gZW5kCisJICogdXAgaGVyZSBpZiB0aGUga2VybmVsIGhhcyBNUFggdHVybmVkIG9mZiBhdCBjb21waWxlCisJICogdGltZS4uCisJICovCisJZG9fdHJhcChYODZfVFJBUF9CUiwgU0lHU0VHViwgImJvdW5kcyIsIHJlZ3MsIGVycm9yX2NvZGUsIE5VTEwpOworCWV4Y2VwdGlvbl9leGl0KHByZXZfc3RhdGUpOworfQorCiBkb3RyYXBsaW5rYWdlIHZvaWQKIGRvX2dlbmVyYWxfcHJvdGVjdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewpAQCAtMzc5LDcgKzQ3MCw3IEBACiAgKiBmb3Igc2NoZWR1bGluZyBvciBzaWduYWwgaGFuZGxpbmcuIFRoZSBhY3R1YWwgc3RhY2sgc3dpdGNoIGlzIGRvbmUgaW4KICAqIGVudHJ5LlMKICAqLwotYXNtbGlua2FnZSBfX3Zpc2libGUgc3RydWN0IHB0X3JlZ3MgKnN5bmNfcmVncyhzdHJ1Y3QgcHRfcmVncyAqZXJlZ3MpCithc21saW5rYWdlIF9fdmlzaWJsZSBub3RyYWNlIHN0cnVjdCBwdF9yZWdzICpzeW5jX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKmVyZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZXJlZ3M7CiAJLyogRGlkIGFscmVhZHkgc3luYyAqLwpAQCAtMzk5LDYgKzQ5MCwzNiBAQAogCXJldHVybiByZWdzOwogfQogTk9LUFJPQkVfU1lNQk9MKHN5bmNfcmVncyk7CisKK3N0cnVjdCBiYWRfaXJldF9zdGFjayB7CisJdm9pZCAqZXJyb3JfZW50cnlfcmV0OworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7Cit9OworCithc21saW5rYWdlIF9fdmlzaWJsZSBub3RyYWNlCitzdHJ1Y3QgYmFkX2lyZXRfc3RhY2sgKmZpeHVwX2JhZF9pcmV0KHN0cnVjdCBiYWRfaXJldF9zdGFjayAqcykKK3sKKwkvKgorCSAqIFRoaXMgaXMgY2FsbGVkIGZyb20gZW50cnlfNjQuUyBlYXJseSBpbiBoYW5kbGluZyBhIGZhdWx0CisJICogY2F1c2VkIGJ5IGEgYmFkIGlyZXQgdG8gdXNlciBtb2RlLiAgVG8gaGFuZGxlIHRoZSBmYXVsdAorCSAqIGNvcnJlY3RseSwgd2Ugd2FudCBtb3ZlIG91ciBzdGFjayBmcmFtZSB0byB0YXNrX3B0X3JlZ3MKKwkgKiBhbmQgd2Ugd2FudCB0byBwcmV0ZW5kIHRoYXQgdGhlIGV4Y2VwdGlvbiBjYW1lIGZyb20gdGhlCisJICogaXJldCB0YXJnZXQuCisJICovCisJc3RydWN0IGJhZF9pcmV0X3N0YWNrICpuZXdfc3RhY2sgPQorCQljb250YWluZXJfb2YodGFza19wdF9yZWdzKGN1cnJlbnQpLAorCQkJICAgICBzdHJ1Y3QgYmFkX2lyZXRfc3RhY2ssIHJlZ3MpOworCisJLyogQ29weSB0aGUgSVJFVCB0YXJnZXQgdG8gdGhlIG5ldyBzdGFjay4gKi8KKwltZW1tb3ZlKCZuZXdfc3RhY2stPnJlZ3MuaXAsICh2b2lkICopcy0+cmVncy5zcCwgNSo4KTsKKworCS8qIENvcHkgdGhlIHJlbWFpbmRlciBvZiB0aGUgc3RhY2sgZnJvbSB0aGUgY3VycmVudCBzdGFjay4gKi8KKwltZW1tb3ZlKG5ld19zdGFjaywgcywgb2Zmc2V0b2Yoc3RydWN0IGJhZF9pcmV0X3N0YWNrLCByZWdzLmlwKSk7CisKKwlCVUdfT04oIXVzZXJfbW9kZV92bSgmbmV3X3N0YWNrLT5yZWdzKSk7CisJcmV0dXJuIG5ld19zdGFjazsKK30KK05PS1BST0JFX1NZTUJPTChmaXh1cF9iYWRfaXJldCk7CiAjZW5kaWYKIAogLyoKQEAgLTc3OCw3ICs4OTksNyBAQAogCXNldF9pbnRyX2dhdGUoWDg2X1RSQVBfT0xEX01GLCBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pOwogCXNldF9pbnRyX2dhdGUoWDg2X1RSQVBfVFMsIGludmFsaWRfVFNTKTsKIAlzZXRfaW50cl9nYXRlKFg4Nl9UUkFQX05QLCBzZWdtZW50X25vdF9wcmVzZW50KTsKLQlzZXRfaW50cl9nYXRlX2lzdChYODZfVFJBUF9TUywgJnN0YWNrX3NlZ21lbnQsIFNUQUNLRkFVTFRfU1RBQ0spOworCXNldF9pbnRyX2dhdGUoWDg2X1RSQVBfU1MsIHN0YWNrX3NlZ21lbnQpOwogCXNldF9pbnRyX2dhdGUoWDg2X1RSQVBfR1AsIGdlbmVyYWxfcHJvdGVjdGlvbik7CiAJc2V0X2ludHJfZ2F0ZShYODZfVFJBUF9TUFVSSU9VUywgc3B1cmlvdXNfaW50ZXJydXB0X2J1Zyk7CiAJc2V0X2ludHJfZ2F0ZShYODZfVFJBUF9NRiwgY29wcm9jZXNzb3JfZXJyb3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Vwcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC91cHJvYmVzLmMKaW5kZXggNWQxY2JmZS4uOGI5NmE5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Vwcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdXByb2Jlcy5jCkBAIC0yMTksNyArMjE5LDcgQEAKIHsKIAl1MzIgdm9sYXRpbGUgKmdvb2RfaW5zbnM7CiAKLQlpbnNuX2luaXQoaW5zbiwgYXVwcm9iZS0+aW5zbiwgeDg2XzY0KTsKKwlpbnNuX2luaXQoaW5zbiwgYXVwcm9iZS0+aW5zbiwgc2l6ZW9mKGF1cHJvYmUtPmluc24pLCB4ODZfNjQpOwogCS8qIGhhcyB0aGUgc2lkZS1lZmZlY3Qgb2YgcHJvY2Vzc2luZyB0aGUgZW50aXJlIGluc3RydWN0aW9uICovCiAJaW5zbl9nZXRfbGVuZ3RoKGluc24pOwogCWlmIChXQVJOX09OX09OQ0UoIWluc25fY29tcGxldGUoaW5zbikpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA0OWVkZjJkLi4wMGJmMzAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTg2LDYgKzE4Niw4IEBACiAJICogc3RhcnQgYW5vdGhlciBzZWdtZW50IC0gaW5pdC4KIAkgKi8KIAlQRVJDUFVfVkFERFIoSU5URVJOT0RFX0NBQ0hFX0JZVEVTLCAwLCA6cGVyY3B1KQorCUFTU0VSVChTSVpFT0YoLmRhdGEuLnBlcmNwdSkgPCBDT05GSUdfUEhZU0lDQUxfU1RBUlQsCisJICAgICAgICJwZXItQ1BVIGRhdGEgdG9vIGxhcmdlIC0gaW5jcmVhc2UgQ09ORklHX1BIWVNJQ0FMX1NUQVJUIikKICNlbmRpZgogCiAJSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfNjQuYwppbmRleCA5NTc3NzlmLi4yZGNjNmZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfNjQuYwpAQCAtMSw1OSArMSw0MyBAQAogLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IEFuZHkgTHV0b21pcnNraSA8bHV0b0BhbWFjYXBpdGFsLm5ldD4KKyAqCisgKiBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gd2hpY2ggaXM6CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFuZHJlYSBBcmNhbmdlbGkgPGFuZHJlYUBzdXNlLmRlPiBTdVNFCiAgKiAgQ29weXJpZ2h0IDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgogICoKLSAqICBbIE5PVEU6IHRoaXMgbWVjaGFuaXNtIGlzIG5vdyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSB2RFNPLiBdCisgKiAgUGFydHMgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaGF2ZSBiZWVuIG1vdmVkIHRvIGFyY2gveDg2L3Zkc28vdm1hLmMKICAqCi0gKiAgVGhhbmtzIHRvIGhwYUB0cmFuc21ldGEuY29tIGZvciBzb21lIHVzZWZ1bCBoaW50LgotICogIFNwZWNpYWwgdGhhbmtzIHRvIEluZ28gTW9sbmFyIGZvciBoaXMgZWFybHkgZXhwZXJpZW5jZSB3aXRoCi0gKiAgYSBkaWZmZXJlbnQgdnN5c2NhbGwgaW1wbGVtZW50YXRpb24gZm9yIExpbnV4L0lBMzIgYW5kIGZvciB0aGUgbmFtZS4KKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHZzeXNjYWxsIGVtdWxhdGlvbi4gIHZzeXNjYWxscyBhcmUgYSBsZWdhY3kgQUJJOgorICogVXNlcnNwYWNlIGNhbiByZXF1ZXN0IGNlcnRhaW4ga2VybmVsIHNlcnZpY2VzIGJ5IGNhbGxpbmcgZml4ZWQKKyAqIGFkZHJlc3Nlcy4gIFRoaXMgY29uY2VwdCBpcyBwcm9ibGVtYXRpYzoKICAqCi0gKiAgdnN5c2NhbGwgMSBpcyBsb2NhdGVkIGF0IC0xME1ieXRlLCB2c3lzY2FsbCAyIGlzIGxvY2F0ZWQKLSAqICBhdCB2aXJ0dWFsIGFkZHJlc3MgLTEwTWJ5dGUrMTAyNGJ5dGVzIGV0Yy4uLiBUaGVyZSBhcmUgYXQgbWF4IDQKLSAqICB2c3lzY2FsbHMuIE9uZSB2c3lzY2FsbCBjYW4gcmVzZXJ2ZSBtb3JlIHRoYW4gMSBzbG90IHRvIGF2b2lkCi0gKiAganVtcGluZyBvdXQgb2YgbGluZSBpZiBuZWNlc3NhcnkuIFdlIGNhbm5vdCBhZGQgbW9yZSB3aXRoIHRoaXMKLSAqICBtZWNoYW5pc20gYmVjYXVzZSBvbGRlciBrZXJuZWxzIHdvbid0IHJldHVybiAtRU5PU1lTLgorICogLSBJdCBpbnRlcmZlcmVzIHdpdGggQVNMUi4KKyAqIC0gSXQncyBhd2t3YXJkIHRvIHdyaXRlIGNvZGUgdGhhdCBsaXZlcyBpbiBrZXJuZWwgYWRkcmVzc2VzIGJ1dCBpcworICogICBjYWxsYWJsZSBieSB1c2Vyc3BhY2UgYXQgZml4ZWQgYWRkcmVzc2VzLgorICogLSBUaGUgd2hvbGUgY29uY2VwdCBpcyBpbXBvc3NpYmxlIGZvciAzMi1iaXQgY29tcGF0IHVzZXJzcGFjZS4KKyAqIC0gVU1MIGNhbm5vdCBlYXNpbHkgdmlydHVhbGl6ZSBhIHZzeXNjYWxsLgogICoKLSAqICBOb3RlOiB0aGUgY29uY2VwdCBjbGFzaGVzIHdpdGggdXNlciBtb2RlIGxpbnV4LiAgVU1MIHVzZXJzIHNob3VsZAotICogIHVzZSB0aGUgdkRTTy4KKyAqIEFzIG9mIG1pZC0yMDE0LCBJIGJlbGlldmUgdGhhdCB0aGVyZSBpcyBubyBuZXcgdXNlcnNwYWNlIGNvZGUgdGhhdAorICogd2lsbCB1c2UgYSB2c3lzY2FsbCBpZiB0aGUgdkRTTyBpcyBwcmVzZW50LiAgSSBob3BlIHRoYXQgdGhlcmUgd2lsbAorICogc29vbiBiZSBubyBuZXcgdXNlcnNwYWNlIGNvZGUgdGhhdCB3aWxsIGV2ZXIgdXNlIGEgdnN5c2NhbGwuCisgKgorICogVGhlIGNvZGUgaW4gdGhpcyBmaWxlIGVtdWxhdGVzIHZzeXNjYWxscyB3aGVuIG5vdGlmaWVkIG9mIGEgcGFnZQorICogZmF1bHQgdG8gYSB2c3lzY2FsbCBhZGRyZXNzLgogICovCiAKLSNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKLQotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZWtlZXBlcl9pbnRlcm5hbC5oPgotI2luY2x1ZGUgPGxpbnV4L2dldGNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KIAogI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL2NvbXBhdC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgInZzeXNjYWxsX3RyYWNlLmgiCiAKLURFRklORV9WVkFSKGludCwgdmdldGNwdV9tb2RlKTsKLQogc3RhdGljIGVudW0geyBFTVVMQVRFLCBOQVRJVkUsIE5PTkUgfSB2c3lzY2FsbF9tb2RlID0gRU1VTEFURTsKIAogc3RhdGljIGludCBfX2luaXQgdnN5c2NhbGxfc2V0dXAoY2hhciAqc3RyKQpAQCAtMjIyLDYgKzIwNiw3IEBACiAJCQkJICAic2VjY29tcCB0cmllZCB0byBjaGFuZ2Ugc3lzY2FsbCBuciBvciBpcCIpOwogCQlkb19leGl0KFNJR1NZUyk7CiAJfQorCXJlZ3MtPm9yaWdfYXggPSAtMTsKIAlpZiAodG1wKQogCQlnb3RvIGRvX3JldDsgIC8qIHNraXAgcmVxdWVzdGVkICovCiAKQEAgLTI4NCw0NiArMjY5LDU0IEBACiB9CiAKIC8qCi0gKiBBc3N1bWUgX19pbml0Y2FsbCBleGVjdXRlcyBiZWZvcmUgYWxsIHVzZXIgc3BhY2UuIEhvcGVmdWxseSBrbW9kCi0gKiBkb2Vzbid0IHZpb2xhdGUgdGhhdC4gV2UnbGwgZmluZCBvdXQgaWYgaXQgZG9lcy4KKyAqIEEgcHNldWRvIFZNQSB0byBhbGxvdyBwdHJhY2UgYWNjZXNzIGZvciB0aGUgdnN5c2NhbGwgcGFnZS4gIFRoaXMgb25seQorICogY292ZXJzIHRoZSA2NGJpdCB2c3lzY2FsbCBwYWdlIG5vdy4gMzJiaXQgaGFzIGEgcmVhbCBWTUEgbm93IGFuZCBkb2VzCisgKiBub3QgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIGFueW1vcmU6CiAgKi8KLXN0YXRpYyB2b2lkIHZzeXNjYWxsX3NldF9jcHUoaW50IGNwdSkKK3N0YXRpYyBjb25zdCBjaGFyICpnYXRlX3ZtYV9uYW1lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXVuc2lnbmVkIGxvbmcgZDsKLQl1bnNpZ25lZCBsb25nIG5vZGUgPSAwOwotI2lmZGVmIENPTkZJR19OVU1BCi0Jbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisJcmV0dXJuICJbdnN5c2NhbGxdIjsKK30KK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2F0ZV92bWFfb3BzID0geworCS5uYW1lID0gZ2F0ZV92bWFfbmFtZSwKK307CitzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0IGdhdGVfdm1hID0geworCS52bV9zdGFydAk9IFZTWVNDQUxMX0FERFIsCisJLnZtX2VuZAkJPSBWU1lTQ0FMTF9BRERSICsgUEFHRV9TSVpFLAorCS52bV9wYWdlX3Byb3QJPSBQQUdFX1JFQURPTkxZX0VYRUMsCisJLnZtX2ZsYWdzCT0gVk1fUkVBRCB8IFZNX0VYRUMsCisJLnZtX29wcwkJPSAmZ2F0ZV92bWFfb3BzLAorfTsKKworc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfZ2F0ZV92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCisJaWYgKCFtbSB8fCBtbS0+Y29udGV4dC5pYTMyX2NvbXBhdCkKKwkJcmV0dXJuIE5VTEw7CiAjZW5kaWYKLQlpZiAoY3B1X2hhcygmY3B1X2RhdGEoY3B1KSwgWDg2X0ZFQVRVUkVfUkRUU0NQKSkKLQkJd3JpdGVfcmR0c2NwX2F1eCgobm9kZSA8PCAxMikgfCBjcHUpOwotCi0JLyoKLQkgKiBTdG9yZSBjcHUgbnVtYmVyIGluIGxpbWl0IHNvIHRoYXQgaXQgY2FuIGJlIGxvYWRlZCBxdWlja2x5Ci0JICogaW4gdXNlciBzcGFjZSBpbiB2Z2V0Y3B1LiAoMTIgYml0cyBmb3IgdGhlIENQVSBhbmQgOCBiaXRzIGZvciB0aGUgbm9kZSkKLQkgKi8KLQlkID0gMHgwZjQwMDAwMDAwMDAwVUxMOwotCWQgfD0gY3B1OwotCWQgfD0gKG5vZGUgJiAweGYpIDw8IDEyOwotCWQgfD0gKG5vZGUgPj4gNCkgPDwgNDg7Ci0KLQl3cml0ZV9nZHRfZW50cnkoZ2V0X2NwdV9nZHRfdGFibGUoY3B1KSwgR0RUX0VOVFJZX1BFUl9DUFUsICZkLCBERVNDVFlQRV9TKTsKKwlpZiAodnN5c2NhbGxfbW9kZSA9PSBOT05FKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJmdhdGVfdm1hOwogfQogCi1zdGF0aWMgdm9pZCBjcHVfdnN5c2NhbGxfaW5pdCh2b2lkICphcmcpCitpbnQgaW5fZ2F0ZV9hcmVhKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JLyogcHJlZW1wdGlvbiBzaG91bGQgYmUgYWxyZWFkeSBvZmYgKi8KLQl2c3lzY2FsbF9zZXRfY3B1KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gZ2V0X2dhdGVfdm1hKG1tKTsKKworCWlmICghdm1hKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAoYWRkciA+PSB2bWEtPnZtX3N0YXJ0KSAmJiAoYWRkciA8IHZtYS0+dm1fZW5kKTsKIH0KIAotc3RhdGljIGludAotY3B1X3ZzeXNjYWxsX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZykKKy8qCisgKiBVc2UgdGhpcyB3aGVuIHlvdSBoYXZlIG5vIHJlbGlhYmxlIG1tLCB0eXBpY2FsbHkgZnJvbSBpbnRlcnJ1cHQKKyAqIGNvbnRleHQuIEl0IGlzIGxlc3MgcmVsaWFibGUgdGhhbiB1c2luZyBhIHRhc2sncyBtbSBhbmQgbWF5IGdpdmUKKyAqIGZhbHNlIHBvc2l0aXZlcy4KKyAqLworaW50IGluX2dhdGVfYXJlYV9ub19tbSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JbG9uZyBjcHUgPSAobG9uZylhcmc7Ci0KLQlpZiAoYWN0aW9uID09IENQVV9PTkxJTkUgfHwgYWN0aW9uID09IENQVV9PTkxJTkVfRlJPWkVOKQotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBjcHVfdnN5c2NhbGxfaW5pdCwgTlVMTCwgMSk7Ci0KLQlyZXR1cm4gTk9USUZZX0RPTkU7CisJcmV0dXJuIHZzeXNjYWxsX21vZGUgIT0gTk9ORSAmJiAoYWRkciAmIFBBR0VfTUFTSykgPT0gVlNZU0NBTExfQUREUjsKIH0KIAogdm9pZCBfX2luaXQgbWFwX3ZzeXNjYWxsKHZvaWQpCkBAIC0zMzEsMjQgKzMyNCwxMiBAQAogCWV4dGVybiBjaGFyIF9fdnN5c2NhbGxfcGFnZTsKIAl1bnNpZ25lZCBsb25nIHBoeXNhZGRyX3ZzeXNjYWxsID0gX19wYV9zeW1ib2woJl9fdnN5c2NhbGxfcGFnZSk7CiAKLQlfX3NldF9maXhtYXAoVlNZU0NBTExfUEFHRSwgcGh5c2FkZHJfdnN5c2NhbGwsCi0JCSAgICAgdnN5c2NhbGxfbW9kZSA9PSBOQVRJVkUKLQkJICAgICA/IFBBR0VfS0VSTkVMX1ZTWVNDQUxMCi0JCSAgICAgOiBQQUdFX0tFUk5FTF9WVkFSKTsKKwlpZiAodnN5c2NhbGxfbW9kZSAhPSBOT05FKQorCQlfX3NldF9maXhtYXAoVlNZU0NBTExfUEFHRSwgcGh5c2FkZHJfdnN5c2NhbGwsCisJCQkgICAgIHZzeXNjYWxsX21vZGUgPT0gTkFUSVZFCisJCQkgICAgID8gUEFHRV9LRVJORUxfVlNZU0NBTEwKKwkJCSAgICAgOiBQQUdFX0tFUk5FTF9WVkFSKTsKKwogCUJVSUxEX0JVR19PTigodW5zaWduZWQgbG9uZylfX2ZpeF90b192aXJ0KFZTWVNDQUxMX1BBR0UpICE9CiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpVlNZU0NBTExfQUREUik7CiB9Ci0KLXN0YXRpYyBpbnQgX19pbml0IHZzeXNjYWxsX2luaXQodm9pZCkKLXsKLQljcHVfbm90aWZpZXJfcmVnaXN0ZXJfYmVnaW4oKTsKLQotCW9uX2VhY2hfY3B1KGNwdV92c3lzY2FsbF9pbml0LCBOVUxMLCAxKTsKLQkvKiBub3RpZmllciBwcmlvcml0eSA+IEtWTSAqLwotCV9faG90Y3B1X25vdGlmaWVyKGNwdV92c3lzY2FsbF9ub3RpZmllciwgMzApOwotCi0JY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2RvbmUoKTsKLQotCXJldHVybiAwOwotfQotX19pbml0Y2FsbCh2c3lzY2FsbF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKaW5kZXggZTQ4YjY3NC4uMjM0YjA3MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKQEAgLTExNiw4ICsxMTYsNiBAQAogCS50ZWFyZG93bl9tc2lfaXJxcwk9IGRlZmF1bHRfdGVhcmRvd25fbXNpX2lycXMsCiAJLnJlc3RvcmVfbXNpX2lycXMJPSBkZWZhdWx0X3Jlc3RvcmVfbXNpX2lycXMsCiAJLnNldHVwX2hwZXRfbXNpCQk9IGRlZmF1bHRfc2V0dXBfaHBldF9tc2ksCi0JLm1zaV9tYXNrX2lycQkJPSBkZWZhdWx0X21zaV9tYXNrX2lycSwKLQkubXNpeF9tYXNrX2lycQkJPSBkZWZhdWx0X21zaXhfbWFza19pcnEsCiB9OwogCiAvKiBNU0kgYXJjaCBzcGVjaWZpYyBob29rcyAqLwpAQCAtMTQwLDE0ICsxMzgsNiBAQAogewogCXg4Nl9tc2kucmVzdG9yZV9tc2lfaXJxcyhkZXYpOwogfQotdTMyIGFyY2hfbXNpX21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIG1hc2ssIHUzMiBmbGFnKQotewotCXJldHVybiB4ODZfbXNpLm1zaV9tYXNrX2lycShkZXNjLCBtYXNrLCBmbGFnKTsKLX0KLXUzMiBhcmNoX21zaXhfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgZmxhZykKLXsKLQlyZXR1cm4geDg2X21zaS5tc2l4X21hc2tfaXJxKGRlc2MsIGZsYWcpOwotfQogI2VuZGlmCiAKIHN0cnVjdCB4ODZfaW9fYXBpY19vcHMgeDg2X2lvX2FwaWNfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggNWVkZjA4OC4uOWY4YTJmYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC00Mjg3LDYgKzQyODcsNyBAQAogCQlmZXRjaF9yZWdpc3Rlcl9vcGVyYW5kKG9wKTsKIAkJYnJlYWs7CiAJY2FzZSBPcENMOgorCQlvcC0+dHlwZSA9IE9QX0lNTTsKIAkJb3AtPmJ5dGVzID0gMTsKIAkJb3AtPnZhbCA9IHJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SQ1gpICYgMHhmZjsKIAkJYnJlYWs7CkBAIC00Mjk0LDYgKzQyOTUsNyBAQAogCQlyYyA9IGRlY29kZV9pbW0oY3R4dCwgb3AsIDEsIHRydWUpOwogCQlicmVhazsKIAljYXNlIE9wT25lOgorCQlvcC0+dHlwZSA9IE9QX0lNTTsKIAkJb3AtPmJ5dGVzID0gMTsKIAkJb3AtPnZhbCA9IDE7CiAJCWJyZWFrOwpAQCAtNDM1MiwyMSArNDM1NCwyNyBAQAogCQljdHh0LT5tZW1vcC5ieXRlcyA9IGN0eHQtPm9wX2J5dGVzICsgMjsKIAkJZ290byBtZW1fY29tbW9uOwogCWNhc2UgT3BFUzoKKwkJb3AtPnR5cGUgPSBPUF9JTU07CiAJCW9wLT52YWwgPSBWQ1BVX1NSRUdfRVM7CiAJCWJyZWFrOwogCWNhc2UgT3BDUzoKKwkJb3AtPnR5cGUgPSBPUF9JTU07CiAJCW9wLT52YWwgPSBWQ1BVX1NSRUdfQ1M7CiAJCWJyZWFrOwogCWNhc2UgT3BTUzoKKwkJb3AtPnR5cGUgPSBPUF9JTU07CiAJCW9wLT52YWwgPSBWQ1BVX1NSRUdfU1M7CiAJCWJyZWFrOwogCWNhc2UgT3BEUzoKKwkJb3AtPnR5cGUgPSBPUF9JTU07CiAJCW9wLT52YWwgPSBWQ1BVX1NSRUdfRFM7CiAJCWJyZWFrOwogCWNhc2UgT3BGUzoKKwkJb3AtPnR5cGUgPSBPUF9JTU07CiAJCW9wLT52YWwgPSBWQ1BVX1NSRUdfRlM7CiAJCWJyZWFrOwogCWNhc2UgT3BHUzoKKwkJb3AtPnR5cGUgPSBPUF9JTU07CiAJCW9wLT52YWwgPSBWQ1BVX1NSRUdfR1M7CiAJCWJyZWFrOwogCWNhc2UgT3BJbXBsaWNpdDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCBhYzFjNGRlLi45NzhmNDAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC02MzAsNyArNjMwLDcgQEAKIAkgKiBrdm0gbW11LCBiZWZvcmUgcmVjbGFpbWluZyB0aGUgcGFnZSwgd2Ugc2hvdWxkCiAJICogdW5tYXAgaXQgZnJvbSBtbXUgZmlyc3QuCiAJICovCi0JV0FSTl9PTigha3ZtX2lzX21taW9fcGZuKHBmbikgJiYgIXBhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSkpOworCVdBUk5fT04oIWt2bV9pc19yZXNlcnZlZF9wZm4ocGZuKSAmJiAhcGFnZV9jb3VudChwZm5fdG9fcGFnZShwZm4pKSk7CiAKIAlpZiAoIXNoYWRvd19hY2Nlc3NlZF9tYXNrIHx8IG9sZF9zcHRlICYgc2hhZG93X2FjY2Vzc2VkX21hc2spCiAJCWt2bV9zZXRfcGZuX2FjY2Vzc2VkKHBmbik7CkBAIC0yNDYxLDcgKzI0NjEsNyBAQAogCQlzcHRlIHw9IFBUX1BBR0VfU0laRV9NQVNLOwogCWlmICh0ZHBfZW5hYmxlZCkKIAkJc3B0ZSB8PSBrdm1feDg2X29wcy0+Z2V0X210X21hc2sodmNwdSwgZ2ZuLAotCQkJa3ZtX2lzX21taW9fcGZuKHBmbikpOworCQkJa3ZtX2lzX3Jlc2VydmVkX3BmbihwZm4pKTsKIAogCWlmIChob3N0X3dyaXRhYmxlKQogCQlzcHRlIHw9IFNQVEVfSE9TVF9XUklURUFCTEU7CkBAIC0yNzM3LDcgKzI3MzcsNyBAQAogCSAqIFBUX1BBR0VfVEFCTEVfTEVWRUwgYW5kIHRoZXJlIHdvdWxkIGJlIG5vIGFkanVzdG1lbnQgZG9uZQogCSAqIGhlcmUuCiAJICovCi0JaWYgKCFpc19lcnJvcl9ub3Nsb3RfcGZuKHBmbikgJiYgIWt2bV9pc19tbWlvX3BmbihwZm4pICYmCisJaWYgKCFpc19lcnJvcl9ub3Nsb3RfcGZuKHBmbikgJiYgIWt2bV9pc19yZXNlcnZlZF9wZm4ocGZuKSAmJgogCSAgICBsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMICYmCiAJICAgIFBhZ2VUcmFuc0NvbXBvdW5kKHBmbl90b19wYWdlKHBmbikpICYmCiAJICAgICFoYXNfd3Jwcm90ZWN0ZWRfcGFnZSh2Y3B1LT5rdm0sIGdmbiwgUFRfRElSRUNUT1JZX0xFVkVMKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NzdW0td3JhcHBlcnNfNjQuYyBiL2FyY2gveDg2L2xpYi9jc3VtLXdyYXBwZXJzXzY0LmMKaW5kZXggNzYwOWUwZS4uMTMxOGY3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL2NzdW0td3JhcHBlcnNfNjQuYworKysgYi9hcmNoL3g4Ni9saWIvY3N1bS13cmFwcGVyc182NC5jCkBAIC00MSw5ICs0MSw4IEBACiAJCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcpc3JjICYgNikgJiYgbGVuID49IDIpIHsKIAkJCV9fdTE2IHZhbDE2OwogCi0JCQkqZXJycCA9IF9fZ2V0X3VzZXIodmFsMTYsIChjb25zdCBfX3UxNiBfX3VzZXIgKilzcmMpOwotCQkJaWYgKCplcnJwKQotCQkJCXJldHVybiBpc3VtOworCQkJaWYgKF9fZ2V0X3VzZXIodmFsMTYsIChjb25zdCBfX3UxNiBfX3VzZXIgKilzcmMpKQorCQkJCWdvdG8gb3V0X2VycjsKIAogCQkJKihfX3UxNiAqKWRzdCA9IHZhbDE2OwogCQkJaXN1bSA9IChfX2ZvcmNlIF9fd3N1bSlhZGQzMl93aXRoX2NhcnJ5KApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2luc24uYyBiL2FyY2gveDg2L2xpYi9pbnNuLmMKaW5kZXggNTRmY2ZmZS4uMjQ4MDk3OGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9pbnNuLmMKKysrIGIvYXJjaC94ODYvbGliL2luc24uYwpAQCAtMjgsNyArMjgsNyBAQAogCiAvKiBWZXJpZnkgbmV4dCBzaXplb2YodCkgYnl0ZXMgY2FuIGJlIG9uIHRoZSBzYW1lIGluc3RydWN0aW9uICovCiAjZGVmaW5lIHZhbGlkYXRlX25leHQodCwgaW5zbiwgbikJXAotCSgoaW5zbiktPm5leHRfYnl0ZSArIHNpemVvZih0KSArIG4gLSAoaW5zbiktPmthZGRyIDw9IE1BWF9JTlNOX1NJWkUpCisJKChpbnNuKS0+bmV4dF9ieXRlICsgc2l6ZW9mKHQpICsgbiA8IChpbnNuKS0+ZW5kX2thZGRyKQogCiAjZGVmaW5lIF9fZ2V0X25leHQodCwgaW5zbikJXAogCSh7IHQgciA9ICoodCopaW5zbi0+bmV4dF9ieXRlOyBpbnNuLT5uZXh0X2J5dGUgKz0gc2l6ZW9mKHQpOyByOyB9KQpAQCAtNTAsMTAgKzUwLDExIEBACiAgKiBAa2FkZHI6CWFkZHJlc3MgKGluIGtlcm5lbCBtZW1vcnkpIG9mIGluc3RydWN0aW9uIChvciBjb3B5IHRoZXJlb2YpCiAgKiBAeDg2XzY0OgkhMCBmb3IgNjQtYml0IGtlcm5lbCBvciA2NC1iaXQgYXBwCiAgKi8KLXZvaWQgaW5zbl9pbml0KHN0cnVjdCBpbnNuICppbnNuLCBjb25zdCB2b2lkICprYWRkciwgaW50IHg4Nl82NCkKK3ZvaWQgaW5zbl9pbml0KHN0cnVjdCBpbnNuICppbnNuLCBjb25zdCB2b2lkICprYWRkciwgaW50IGJ1Zl9sZW4sIGludCB4ODZfNjQpCiB7CiAJbWVtc2V0KGluc24sIDAsIHNpemVvZigqaW5zbikpOwogCWluc24tPmthZGRyID0ga2FkZHI7CisJaW5zbi0+ZW5kX2thZGRyID0ga2FkZHIgKyBidWZfbGVuOwogCWluc24tPm5leHRfYnl0ZSA9IGthZGRyOwogCWluc24tPng4Nl82NCA9IHg4Nl82NCA/IDEgOiAwOwogCWluc24tPm9wbmRfYnl0ZXMgPSA0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCA2YTE5YWQ5Li5lY2ZkYzQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMzAsMyArMzAsNSBAQAogb2JqLSQoQ09ORklHX05VTUFfRU1VKQkJKz0gbnVtYV9lbXVsYXRpb24ubwogCiBvYmotJChDT05GSUdfTUVNVEVTVCkJCSs9IG1lbXRlc3QubworCitvYmotJChDT05GSUdfWDg2X0lOVEVMX01QWCkJKz0gbXB4Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKaW5kZXggOTVhNDI3ZS4uZjBjZWRmMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKKysrIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKQEAgLTc2LDYgKzc2LDkgQEAKICMgaWZkZWYgQ09ORklHX1g4Nl9FU1BGSVg2NAogCXsgRVNQRklYX0JBU0VfQUREUiwJIkVTUGZpeCBBcmVhIiwgMTYgfSwKICMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0VGSQorCXsgRUZJX1ZBX0VORCwJCSJFRkkgUnVudGltZSBTZXJ2aWNlcyIgfSwKKyMgZW5kaWYKIAl7IF9fU1RBUlRfS0VSTkVMX21hcCwgICAiSGlnaCBLZXJuZWwgTWFwcGluZyIgfSwKIAl7IE1PRFVMRVNfVkFERFIsICAgICAgICAiTW9kdWxlcyIgfSwKIAl7IE1PRFVMRVNfRU5ELCAgICAgICAgICAiRW5kIE1vZHVsZXMiIH0sCkBAIC0xMjYsNyArMTI5LDcgQEAKIAogCWlmICghcGdwcm90X3ZhbChwcm90KSkgewogCQkvKiBOb3QgcHJlc2VudCAqLwotCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICIgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKIAl9IGVsc2UgewogCQlpZiAocHIgJiBfUEFHRV9VU0VSKQogCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiVVNSICIpOwpAQCAtMTQ1LDE4ICsxNDgsMTYgQEAKIAkJZWxzZQogCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiICAgICIpOwogCi0JCS8qIEJpdCA5IGhhcyBhIGRpZmZlcmVudCBtZWFuaW5nIG9uIGxldmVsIDMgdnMgNCAqLwotCQlpZiAobGV2ZWwgPD0gMykgewotCQkJaWYgKHByICYgX1BBR0VfUFNFKQotCQkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgIlBTRSAiKTsKLQkJCWVsc2UKLQkJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICIgICAgIik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocHIgJiBfUEFHRV9QQVQpCi0JCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAicGF0ICIpOwotCQkJZWxzZQotCQkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgIiAgICAiKTsKLQkJfQorCQkvKiBCaXQgNyBoYXMgYSBkaWZmZXJlbnQgbWVhbmluZyBvbiBsZXZlbCAzIHZzIDQgKi8KKwkJaWYgKGxldmVsIDw9IDMgJiYgcHIgJiBfUEFHRV9QU0UpCisJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICJQU0UgIik7CisJCWVsc2UKKwkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgIiAgICAiKTsKKwkJaWYgKChsZXZlbCA9PSA0ICYmIHByICYgX1BBR0VfUEFUKSB8fAorCQkgICAgKChsZXZlbCA9PSAzIHx8IGxldmVsID09IDIpICYmIHByICYgX1BBR0VfUEFUX0xBUkdFKSkKKwkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgInBhdCAiKTsKKwkJZWxzZQorCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiICAgICIpOwogCQlpZiAocHIgJiBfUEFHRV9HTE9CQUwpCiAJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICJHTEIgIik7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuYwppbmRleCA2NmRiYTM2Li44MmI0MWQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC0yNyw2ICsyNywzNSBAQAogCiAjaW5jbHVkZSAibW1faW50ZXJuYWwuaCIKIAorLyoKKyAqIFRhYmxlcyB0cmFuc2xhdGluZyBiZXR3ZWVuIHBhZ2VfY2FjaGVfdHlwZV90IGFuZCBwdGUgZW5jb2RpbmcuCisgKiBNaW5pbWFsIHN1cHBvcnRlZCBtb2RlcyBhcmUgZGVmaW5lZCBzdGF0aWNhbGx5LCBtb2RpZmllZCBpZiBtb3JlIHN1cHBvcnRlZAorICogY2FjaGUgbW9kZXMgYXJlIGF2YWlsYWJsZS4KKyAqIEluZGV4IGludG8gX19jYWNoZW1vZGUycHRlX3RibCBpcyB0aGUgY2FjaGVtb2RlLgorICogSW5kZXggaW50byBfX3B0ZTJjYWNoZW1vZGVfdGJsIGFyZSB0aGUgY2FjaGluZyBhdHRyaWJ1dGUgYml0cyBvZiB0aGUgcHRlCisgKiAoX1BBR0VfUFdULCBfUEFHRV9QQ0QsIF9QQUdFX1BBVCkgYXQgaW5kZXggYml0IHBvc2l0aW9ucyAwLCAxLCAyLgorICovCit1aW50MTZfdCBfX2NhY2hlbW9kZTJwdGVfdGJsW19QQUdFX0NBQ0hFX01PREVfTlVNXSA9IHsKKwlbX1BBR0VfQ0FDSEVfTU9ERV9XQl0JCT0gMCwKKwlbX1BBR0VfQ0FDSEVfTU9ERV9XQ10JCT0gX1BBR0VfUFdULAorCVtfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTXQk9IF9QQUdFX1BDRCwKKwlbX1BBR0VfQ0FDSEVfTU9ERV9VQ10JCT0gX1BBR0VfUENEIHwgX1BBR0VfUFdULAorCVtfUEFHRV9DQUNIRV9NT0RFX1dUXQkJPSBfUEFHRV9QQ0QsCisJW19QQUdFX0NBQ0hFX01PREVfV1BdCQk9IF9QQUdFX1BDRCwKK307CitFWFBPUlRfU1lNQk9MX0dQTChfX2NhY2hlbW9kZTJwdGVfdGJsKTsKK3VpbnQ4X3QgX19wdGUyY2FjaGVtb2RlX3RibFs4XSA9IHsKKwlbX19wdGUyY21faWR4KDApXSA9IF9QQUdFX0NBQ0hFX01PREVfV0IsCisJW19fcHRlMmNtX2lkeChfUEFHRV9QV1QpXSA9IF9QQUdFX0NBQ0hFX01PREVfV0MsCisJW19fcHRlMmNtX2lkeChfUEFHRV9QQ0QpXSA9IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMsCisJW19fcHRlMmNtX2lkeChfUEFHRV9QV1QgfCBfUEFHRV9QQ0QpXSA9IF9QQUdFX0NBQ0hFX01PREVfVUMsCisJW19fcHRlMmNtX2lkeChfUEFHRV9QQVQpXSA9IF9QQUdFX0NBQ0hFX01PREVfV0IsCisJW19fcHRlMmNtX2lkeChfUEFHRV9QV1QgfCBfUEFHRV9QQVQpXSA9IF9QQUdFX0NBQ0hFX01PREVfV0MsCisJW19fcHRlMmNtX2lkeChfUEFHRV9QQ0QgfCBfUEFHRV9QQVQpXSA9IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMsCisJW19fcHRlMmNtX2lkeChfUEFHRV9QV1QgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QQVQpXSA9IF9QQUdFX0NBQ0hFX01PREVfVUMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoX19wdGUyY2FjaGVtb2RlX3RibCk7CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcGd0X2J1Zl9zdGFydDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcGd0X2J1Zl9lbmQ7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHBndF9idWZfdG9wOwpAQCAtNjg3LDMgKzcxNiwxMSBAQAogCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQogCit2b2lkIHVwZGF0ZV9jYWNoZV9tb2RlX2VudHJ5KHVuc2lnbmVkIGVudHJ5LCBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBjYWNoZSkKK3sKKwkvKiBlbnRyeSAwIE1VU1QgYmUgV0IgKGhhcmR3aXJlZCB0byBzcGVlZCB1cCB0cmFuc2xhdGlvbnMpICovCisJQlVHX09OKCFlbnRyeSAmJiBjYWNoZSAhPSBfUEFHRV9DQUNIRV9NT0RFX1dCKTsKKworCV9fY2FjaGVtb2RlMnB0ZV90YmxbY2FjaGVdID0gX19jbV9pZHgycHRlKGVudHJ5KTsKKwlfX3B0ZTJjYWNoZW1vZGVfdGJsW2VudHJ5XSA9IGNhY2hlOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF82NC5jIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCmluZGV4IDRjYjg3NjMuLjMwZWIwNWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTUyLDcgKzUyLDYgQEAKICNpbmNsdWRlIDxhc20vbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2luaXQuaD4KLSNpbmNsdWRlIDxhc20vdXYvdXYuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAogI2luY2x1ZGUgIm1tX2ludGVybmFsLmgiCkBAIC0zMzgsMTIgKzMzNywxNSBAQAogICogQ3JlYXRlIGxhcmdlIHBhZ2UgdGFibGUgbWFwcGluZ3MgZm9yIGEgcmFuZ2Ugb2YgcGh5c2ljYWwgYWRkcmVzc2VzLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgX19pbml0X2V4dHJhX21hcHBpbmcodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJCQlwZ3Byb3RfdCBwcm90KQorCQkJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSBjYWNoZSkKIHsKIAlwZ2RfdCAqcGdkOwogCXB1ZF90ICpwdWQ7CiAJcG1kX3QgKnBtZDsKKwlwZ3Byb3RfdCBwcm90OwogCisJcGdwcm90X3ZhbChwcm90KSA9IHBncHJvdF92YWwoUEFHRV9LRVJORUxfTEFSR0UpIHwKKwkJcGdwcm90X3ZhbChwZ3Byb3RfNGtfMl9sYXJnZShjYWNoZW1vZGUycGdwcm90KGNhY2hlKSkpOwogCUJVR19PTigocGh5cyAmIH5QTURfTUFTSykgfHwgKHNpemUgJiB+UE1EX01BU0spKTsKIAlmb3IgKDsgc2l6ZTsgcGh5cyArPSBQTURfU0laRSwgc2l6ZSAtPSBQTURfU0laRSkgewogCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soKHVuc2lnbmVkIGxvbmcpX192YShwaHlzKSk7CkBAIC0zNjYsMTIgKzM2OCwxMiBAQAogCiB2b2lkIF9faW5pdCBpbml0X2V4dHJhX21hcHBpbmdfd2IodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JX19pbml0X2V4dHJhX21hcHBpbmcocGh5cywgc2l6ZSwgUEFHRV9LRVJORUxfTEFSR0UpOworCV9faW5pdF9leHRyYV9tYXBwaW5nKHBoeXMsIHNpemUsIF9QQUdFX0NBQ0hFX01PREVfV0IpOwogfQogCiB2b2lkIF9faW5pdCBpbml0X2V4dHJhX21hcHBpbmdfdWModW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JX19pbml0X2V4dHJhX21hcHBpbmcocGh5cywgc2l6ZSwgUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRSk7CisJX19pbml0X2V4dHJhX21hcHBpbmcocGh5cywgc2l6ZSwgX1BBR0VfQ0FDSEVfTU9ERV9VQyk7CiB9CiAKIC8qCkBAIC0xMTIzLDcgKzExMjUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZW5kID0gKHVuc2lnbmVkIGxvbmcpICZfX2VuZF9yb2RhdGFfaHBhZ2VfYWxpZ247CiAJdW5zaWduZWQgbG9uZyB0ZXh0X2VuZCA9IFBGTl9BTElHTigmX19zdG9wX19fZXhfdGFibGUpOwogCXVuc2lnbmVkIGxvbmcgcm9kYXRhX2VuZCA9IFBGTl9BTElHTigmX19lbmRfcm9kYXRhKTsKLQl1bnNpZ25lZCBsb25nIGFsbF9lbmQgPSBQRk5fQUxJR04oJl9lbmQpOworCXVuc2lnbmVkIGxvbmcgYWxsX2VuZDsKIAogCXByaW50ayhLRVJOX0lORk8gIldyaXRlIHByb3RlY3RpbmcgdGhlIGtlcm5lbCByZWFkLW9ubHkgZGF0YTogJWx1a1xuIiwKIAkgICAgICAgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7CkBAIC0xMTM0LDcgKzExMzYsMTYgQEAKIAkvKgogCSAqIFRoZSByb2RhdGEvZGF0YS9ic3MvYnJrIHNlY3Rpb24gKGJ1dCBub3QgdGhlIGtlcm5lbCB0ZXh0ISkKIAkgKiBzaG91bGQgYWxzbyBiZSBub3QtZXhlY3V0YWJsZS4KKwkgKgorCSAqIFdlIGFsaWduIGFsbF9lbmQgdG8gUE1EX1NJWkUgYmVjYXVzZSB0aGUgZXhpc3RpbmcgbWFwcGluZworCSAqIGlzIGEgZnVsbCBQTUQuIElmIHdlIHdvdWxkIGFsaWduIF9icmtfZW5kIHRvIFBBR0VfU0laRSB3ZQorCSAqIHNwbGl0IHRoZSBQTUQgYW5kIHRoZSByZW1pbmRlciBiZXR3ZWVuIF9icmtfZW5kIGFuZCB0aGUgZW5kCisJICogb2YgdGhlIFBNRCB3aWxsIHJlbWFpbiBtYXBwZWQgZXhlY3V0YWJsZS4KKwkgKgorCSAqIEFueSBQTUQgd2hpY2ggd2FzIHNldHVwIGFmdGVyIHRoZSBvbmUgd2hpY2ggY292ZXJzIF9icmtfZW5kCisJICogaGFzIGJlZW4gemFwcGVkIGFscmVhZHkgdmlhIGNsZWFudXBfaGlnaG1lbSgpLgogCSAqLworCWFsbF9lbmQgPSByb3VuZHVwKCh1bnNpZ25lZCBsb25nKV9icmtfZW5kLCBQTURfU0laRSk7CiAJc2V0X21lbW9yeV9ueChyb2RhdGFfc3RhcnQsIChhbGxfZW5kIC0gcm9kYXRhX3N0YXJ0KSA+PiBQQUdFX1NISUZUKTsKIAogCXJvZGF0YV90ZXN0KCk7CkBAIC0xMTkzLDY2ICsxMjA0LDE1IEBACiAJcmV0dXJuIHBmbl92YWxpZChwdGVfcGZuKCpwdGUpKTsKIH0KIAotLyoKLSAqIEEgcHNldWRvIFZNQSB0byBhbGxvdyBwdHJhY2UgYWNjZXNzIGZvciB0aGUgdnN5c2NhbGwgcGFnZS4gIFRoaXMgb25seQotICogY292ZXJzIHRoZSA2NGJpdCB2c3lzY2FsbCBwYWdlIG5vdy4gMzJiaXQgaGFzIGEgcmVhbCBWTUEgbm93IGFuZCBkb2VzCi0gKiBub3QgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIGFueW1vcmU6Ci0gKi8KLXN0YXRpYyBjb25zdCBjaGFyICpnYXRlX3ZtYV9uYW1lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXJldHVybiAiW3ZzeXNjYWxsXSI7Ci19Ci1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdhdGVfdm1hX29wcyA9IHsKLQkubmFtZSA9IGdhdGVfdm1hX25hbWUsCi19Owotc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCBnYXRlX3ZtYSA9IHsKLQkudm1fc3RhcnQJPSBWU1lTQ0FMTF9BRERSLAotCS52bV9lbmQJCT0gVlNZU0NBTExfQUREUiArIFBBR0VfU0laRSwKLQkudm1fcGFnZV9wcm90CT0gUEFHRV9SRUFET05MWV9FWEVDLAotCS52bV9mbGFncwk9IFZNX1JFQUQgfCBWTV9FWEVDLAotCS52bV9vcHMJCT0gJmdhdGVfdm1hX29wcywKLX07Ci0KLXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X2dhdGVfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgotCWlmICghbW0gfHwgbW0tPmNvbnRleHQuaWEzMl9jb21wYXQpCi0JCXJldHVybiBOVUxMOwotI2VuZGlmCi0JcmV0dXJuICZnYXRlX3ZtYTsKLX0KLQotaW50IGluX2dhdGVfYXJlYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gZ2V0X2dhdGVfdm1hKG1tKTsKLQotCWlmICghdm1hKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAoYWRkciA+PSB2bWEtPnZtX3N0YXJ0KSAmJiAoYWRkciA8IHZtYS0+dm1fZW5kKTsKLX0KLQotLyoKLSAqIFVzZSB0aGlzIHdoZW4geW91IGhhdmUgbm8gcmVsaWFibGUgbW0sIHR5cGljYWxseSBmcm9tIGludGVycnVwdAotICogY29udGV4dC4gSXQgaXMgbGVzcyByZWxpYWJsZSB0aGFuIHVzaW5nIGEgdGFzaydzIG1tIGFuZCBtYXkgZ2l2ZQotICogZmFsc2UgcG9zaXRpdmVzLgotICovCi1pbnQgaW5fZ2F0ZV9hcmVhX25vX21tKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKGFkZHIgJiBQQUdFX01BU0spID09IFZTWVNDQUxMX0FERFI7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHByb2JlX21lbW9yeV9ibG9ja19zaXplKHZvaWQpCiB7CiAJLyogc3RhcnQgZnJvbSAyZyAqLwogCXVuc2lnbmVkIGxvbmcgYnogPSAxVUw8PDMxOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9VVgotCWlmIChpc191dl9zeXN0ZW0oKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJVVjogbWVtb3J5IGJsb2NrIHNpemUgMkdCXG4iKTsKKwlpZiAodG90YWxyYW1fcGFnZXMgPj0gKDY0VUxMIDw8ICgzMCAtIFBBR0VfU0hJRlQpKSkgeworCQlwcl9pbmZvKCJVc2luZyAyR0IgbWVtb3J5IGJsb2NrIHNpemUgZm9yIGxhcmdlLW1lbW9yeSBzeXN0ZW1cbiIpOwogCQlyZXR1cm4gMlVMICogMTAyNCAqIDEwMjQgKiAxMDI0OwogCX0KLSNlbmRpZgogCiAJLyogbGVzcyB0aGFuIDY0ZyBpbnN0YWxsZWQgKi8KIAlpZiAoKG1heF9wZm4gPDwgUEFHRV9TSElGVCkgPCAoMTZVTCA8PCAzMikpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwppbmRleCA3YjE3OWI0OS4uOWNhMzVmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9tYXBfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jCkBAIC0zMywxNyArMzMsMTcgQEAKIAogaW50IGlvbWFwX2NyZWF0ZV93YyhyZXNvdXJjZV9zaXplX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCAqcHJvdCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWcgPSBfUEFHRV9DQUNIRV9XQzsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20gPSBfUEFHRV9DQUNIRV9NT0RFX1dDOwogCWludCByZXQ7CiAKIAlpZiAoIWlzX2lvX21hcHBpbmdfcG9zc2libGUoYmFzZSwgc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gaW9fcmVzZXJ2ZV9tZW10eXBlKGJhc2UsIGJhc2UgKyBzaXplLCAmZmxhZyk7CisJcmV0ID0gaW9fcmVzZXJ2ZV9tZW10eXBlKGJhc2UsIGJhc2UgKyBzaXplLCAmcGNtKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JKnByb3QgPSBfX3BncHJvdChfX1BBR0VfS0VSTkVMIHwgZmxhZyk7CisJKnByb3QgPSBfX3BncHJvdChfX1BBR0VfS0VSTkVMIHwgY2FjaGVtb2RlMnByb3R2YWwocGNtKSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9jcmVhdGVfd2MpOwpAQCAtODIsOCArODIsMTAgQEAKIAkgKiBNVFJSIGlzIFVDIG9yIFdDLiAgVUNfTUlOVVMgZ2V0cyB0aGUgcmVhbCBpbnRlbnRpb24sIG9mIHRoZQogCSAqIHVzZXIsIHdoaWNoIGlzICJXQyBpZiB0aGUgTVRSUiBpcyBXQywgVUMgaWYgeW91IGNhbid0IGRvIHRoYXQuIgogCSAqLwotCWlmICghcGF0X2VuYWJsZWQgJiYgcGdwcm90X3ZhbChwcm90KSA9PSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX1dDKSkKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX1VDX01JTlVTOworCWlmICghcGF0X2VuYWJsZWQgJiYgcGdwcm90X3ZhbChwcm90KSA9PQorCSAgICAoX19QQUdFX0tFUk5FTCB8IGNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfV0MpKSkKKwkJcHJvdCA9IF9fcGdwcm90KF9fUEFHRV9LRVJORUwgfAorCQkJCWNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpKTsKIAogCXJldHVybiAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikga21hcF9hdG9taWNfcHJvdF9wZm4ocGZuLCBwcm90KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCBhZjc4ZTUwLi5mZGY2MTdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0yOSwyMCArMjksMjAgQEAKICAqIGNvbmZsaWN0cy4KICAqLwogaW50IGlvcmVtYXBfY2hhbmdlX2F0dHIodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdF92YWwpCisJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20pCiB7CiAJdW5zaWduZWQgbG9uZyBucnBhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwogCWludCBlcnI7CiAKLQlzd2l0Y2ggKHByb3RfdmFsKSB7Ci0JY2FzZSBfUEFHRV9DQUNIRV9VQzoKKwlzd2l0Y2ggKHBjbSkgeworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9VQzoKIAlkZWZhdWx0OgogCQllcnIgPSBfc2V0X21lbW9yeV91Yyh2YWRkciwgbnJwYWdlcyk7CiAJCWJyZWFrOwotCWNhc2UgX1BBR0VfQ0FDSEVfV0M6CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dDOgogCQllcnIgPSBfc2V0X21lbW9yeV93Yyh2YWRkciwgbnJwYWdlcyk7CiAJCWJyZWFrOwotCWNhc2UgX1BBR0VfQ0FDSEVfV0I6CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dCOgogCQllcnIgPSBfc2V0X21lbW9yeV93Yih2YWRkciwgbnJwYWdlcyk7CiAJCWJyZWFrOwogCX0KQEAgLTc1LDE0ICs3NSwxNCBAQAogICogY2FsbGVyIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhhdCBzbWFsbCBkZXRhaWwuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwKLQkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHByb3RfdmFsLCB2b2lkICpjYWxsZXIpCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtLCB2b2lkICpjYWxsZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHZhZGRyOwogCXJlc291cmNlX3NpemVfdCBwZm4sIGxhc3RfcGZuLCBsYXN0X2FkZHI7CiAJY29uc3QgcmVzb3VyY2Vfc2l6ZV90IHVuYWxpZ25lZF9waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJY29uc3QgdW5zaWduZWQgbG9uZyB1bmFsaWduZWRfc2l6ZSA9IHNpemU7CiAJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKLQl1bnNpZ25lZCBsb25nIG5ld19wcm90X3ZhbDsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBuZXdfcGNtOwogCXBncHJvdF90IHByb3Q7CiAJaW50IHJldHZhbDsKIAl2b2lkIF9faW9tZW0gKnJldF9hZGRyOwpAQCAtMTM0LDM4ICsxMzQsNDAgQEAKIAlzaXplID0gUEFHRV9BTElHTihsYXN0X2FkZHIrMSkgLSBwaHlzX2FkZHI7CiAKIAlyZXR2YWwgPSByZXNlcnZlX21lbXR5cGUocGh5c19hZGRyLCAodTY0KXBoeXNfYWRkciArIHNpemUsCi0JCQkJCQlwcm90X3ZhbCwgJm5ld19wcm90X3ZhbCk7CisJCQkJCQlwY20sICZuZXdfcGNtKTsKIAlpZiAocmV0dmFsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaW9yZW1hcCByZXNlcnZlX21lbXR5cGUgZmFpbGVkICVkXG4iLCByZXR2YWwpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAocHJvdF92YWwgIT0gbmV3X3Byb3RfdmFsKSB7Ci0JCWlmICghaXNfbmV3X21lbXR5cGVfYWxsb3dlZChwaHlzX2FkZHIsIHNpemUsCi0JCQkJCSAgICBwcm90X3ZhbCwgbmV3X3Byb3RfdmFsKSkgeworCWlmIChwY20gIT0gbmV3X3BjbSkgeworCQlpZiAoIWlzX25ld19tZW10eXBlX2FsbG93ZWQocGh5c19hZGRyLCBzaXplLCBwY20sIG5ld19wY20pKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJImlvcmVtYXAgZXJyb3IgZm9yIDB4JWxseC0weCVsbHgsIHJlcXVlc3RlZCAweCVseCwgZ290IDB4JWx4XG4iLAorCQkiaW9yZW1hcCBlcnJvciBmb3IgMHglbGx4LTB4JWxseCwgcmVxdWVzdGVkIDB4JXgsIGdvdCAweCV4XG4iLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGh5c19hZGRyLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKHBoeXNfYWRkciArIHNpemUpLAotCQkJCXByb3RfdmFsLCBuZXdfcHJvdF92YWwpOworCQkJCXBjbSwgbmV3X3BjbSk7CiAJCQlnb3RvIGVycl9mcmVlX21lbXR5cGU7CiAJCX0KLQkJcHJvdF92YWwgPSBuZXdfcHJvdF92YWw7CisJCXBjbSA9IG5ld19wY207CiAJfQogCi0Jc3dpdGNoIChwcm90X3ZhbCkgewotCWNhc2UgX1BBR0VfQ0FDSEVfVUM6CisJcHJvdCA9IFBBR0VfS0VSTkVMX0lPOworCXN3aXRjaCAocGNtKSB7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1VDOgogCWRlZmF1bHQ6Ci0JCXByb3QgPSBQQUdFX0tFUk5FTF9JT19OT0NBQ0hFOworCQlwcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8CisJCQkJY2FjaGVtb2RlMnByb3R2YWwoX1BBR0VfQ0FDSEVfTU9ERV9VQykpOwogCQlicmVhazsKLQljYXNlIF9QQUdFX0NBQ0hFX1VDX01JTlVTOgotCQlwcm90ID0gUEFHRV9LRVJORUxfSU9fVUNfTUlOVVM7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOgorCQlwcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8CisJCQkJY2FjaGVtb2RlMnByb3R2YWwoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUykpOwogCQlicmVhazsKLQljYXNlIF9QQUdFX0NBQ0hFX1dDOgotCQlwcm90ID0gUEFHRV9LRVJORUxfSU9fV0M7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dDOgorCQlwcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8CisJCQkJY2FjaGVtb2RlMnByb3R2YWwoX1BBR0VfQ0FDSEVfTU9ERV9XQykpOwogCQlicmVhazsKLQljYXNlIF9QQUdFX0NBQ0hFX1dCOgotCQlwcm90ID0gUEFHRV9LRVJORUxfSU87CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dCOgogCQlicmVhazsKIAl9CiAKQEAgLTE3OCw3ICsxODAsNyBAQAogCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAl2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBhcmVhLT5hZGRyOwogCi0JaWYgKGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHBoeXNfYWRkciwgc2l6ZSwgcHJvdF92YWwpKQorCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwaHlzX2FkZHIsIHNpemUsIHBjbSkpCiAJCWdvdG8gZXJyX2ZyZWVfYXJlYTsKIAogCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UodmFkZHIsIHZhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwcm90KSkKQEAgLTIyNywxNCArMjI5LDE0IEBACiB7CiAJLyoKIAkgKiBJZGVhbGx5LCB0aGlzIHNob3VsZCBiZToKLQkgKglwYXRfZW5hYmxlZCA/IF9QQUdFX0NBQ0hFX1VDIDogX1BBR0VfQ0FDSEVfVUNfTUlOVVM7CisJICoJcGF0X2VuYWJsZWQgPyBfUEFHRV9DQUNIRV9NT0RFX1VDIDogX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzsKIAkgKgogCSAqIFRpbGwgd2UgZml4IGFsbCBYIGRyaXZlcnMgdG8gdXNlIGlvcmVtYXBfd2MoKSwgd2Ugd2lsbCB1c2UKIAkgKiBVQyBNSU5VUy4KIAkgKi8KLQl1bnNpZ25lZCBsb25nIHZhbCA9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSA9IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAKLQlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHIsIHNpemUsIHZhbCwKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHIsIHNpemUsIHBjbSwKIAkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChpb3JlbWFwX25vY2FjaGUpOwpAQCAtMjUyLDcgKzI1NCw3IEBACiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfd2MocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWlmIChwYXRfZW5hYmxlZCkKLQkJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBfUEFHRV9DQUNIRV9XQywKKwkJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBfUEFHRV9DQUNIRV9NT0RFX1dDLAogCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCWVsc2UKIAkJcmV0dXJuIGlvcmVtYXBfbm9jYWNoZShwaHlzX2FkZHIsIHNpemUpOwpAQCAtMjYxLDcgKzI2Myw3IEBACiAKIHZvaWQgX19pb21lbSAqaW9yZW1hcF9jYWNoZShyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBfUEFHRV9DQUNIRV9XQiwKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHIsIHNpemUsIF9QQUdFX0NBQ0hFX01PREVfV0IsCiAJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9jYWNoZSk7CkBAIC0yNjksNyArMjcxLDggQEAKIHZvaWQgX19pb21lbSAqaW9yZW1hcF9wcm90KHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQl1bnNpZ25lZCBsb25nIHByb3RfdmFsKQogewotCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgKHByb3RfdmFsICYgX1BBR0VfQ0FDSEVfTUFTSyksCisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLAorCQkJCXBncHJvdDJjYWNoZW1vZGUoX19wZ3Byb3QocHJvdF92YWwpKSwKIAkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChpb3JlbWFwX3Byb3QpOwpAQCAtMzI3LDcgKzMzMCw3IEBACiAgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCiAgKiBhY2Nlc3MKICAqLwotdm9pZCAqeGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBwaHlzKQordm9pZCAqeGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcGh5cykKIHsKIAl2b2lkICphZGRyOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwaHlzICYgUEFHRV9NQVNLOwpAQCAtMzQzLDcgKzM0Niw3IEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKLXZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpCit2b2lkIHVueGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqYWRkcikKIHsKIAlpZiAocGFnZV9pc19yYW0ocGh5cyA+PiBQQUdFX1NISUZUKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbW1faW50ZXJuYWwuaCBiL2FyY2gveDg2L21tL21tX2ludGVybmFsLmgKaW5kZXggNmI1NjNhMS4uNjI0NzRiYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbW1faW50ZXJuYWwuaAorKysgYi9hcmNoL3g4Ni9tbS9tbV9pbnRlcm5hbC5oCkBAIC0xNiw0ICsxNiw2IEBACiAKIGV4dGVybiBpbnQgYWZ0ZXJfYm9vdG1lbTsKIAordm9pZCB1cGRhdGVfY2FjaGVfbW9kZV9lbnRyeSh1bnNpZ25lZCBlbnRyeSwgZW51bSBwYWdlX2NhY2hlX21vZGUgY2FjaGUpOworCiAjZW5kaWYJLyogX19YODZfTU1fSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbXB4LmMgYi9hcmNoL3g4Ni9tbS9tcHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2ViZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vbXB4LmMKQEAgLTAsMCArMSw5MjggQEAKKy8qCisgKiBtcHguYyAtIE1lbW9yeSBQcm90ZWN0aW9uIGVYdGVuc2lvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLgorICogUWlhb3dlaSBSZW4gPHFpYW93ZWkucmVuQGludGVsLmNvbT4KKyAqIERhdmUgSGFuc2VuIDxkYXZlLmhhbnNlbkBpbnRlbC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC9zeXNjdGwuaD4KKworI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisjaW5jbHVkZSA8YXNtL2luc24uaD4KKyNpbmNsdWRlIDxhc20vbW1hbi5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9tcHguaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ZwdS1pbnRlcm5hbC5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqbXB4X21hcHBpbmdfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gIlttcHhdIjsKK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtcHhfdm1hX29wcyA9IHsKKwkubmFtZSA9IG1weF9tYXBwaW5nX25hbWUsCit9OworCitzdGF0aWMgaW50IGlzX21weF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuICh2bWEtPnZtX29wcyA9PSAmbXB4X3ZtYV9vcHMpOworfQorCisvKgorICogVGhpcyBpcyByZWFsbHkgYSBzaW1wbGlmaWVkICJ2bV9tbWFwIi4gaXQgb25seSBoYW5kbGVzIE1QWAorICogYm91bmRzIHRhYmxlcyAodGhlIGJvdW5kcyBkaXJlY3RvcnkgaXMgdXNlci1hbGxvY2F0ZWQpLgorICoKKyAqIExhdGVyIG9uLCB3ZSB1c2UgdGhlIHZtYS0+dm1fb3BzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZXNlCisgKiBWTUFzLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtcHhfbW1hcCh1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIHBnb2ZmOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJdm1fZmxhZ3NfdCB2bV9mbGFnczsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCS8qIE9ubHkgYm91bmRzIHRhYmxlIGFuZCBib3VuZHMgZGlyZWN0b3J5IGNhbiBiZSBhbGxvY2F0ZWQgaGVyZSAqLworCWlmIChsZW4gIT0gTVBYX0JEX1NJWkVfQllURVMgJiYgbGVuICE9IE1QWF9CVF9TSVpFX0JZVEVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisKKwkvKiBUb28gbWFueSBtYXBwaW5ncz8gKi8KKwlpZiAobW0tPm1hcF9jb3VudCA+IHN5c2N0bF9tYXhfbWFwX2NvdW50KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIE9idGFpbiB0aGUgYWRkcmVzcyB0byBtYXAgdG8uIHdlIHZlcmlmeSAob3Igc2VsZWN0KSBpdCBhbmQgZW5zdXJlCisJICogdGhhdCBpdCByZXByZXNlbnRzIGEgdmFsaWQgc2VjdGlvbiBvZiB0aGUgYWRkcmVzcyBzcGFjZS4KKwkgKi8KKwlhZGRyID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgMCwgbGVuLCAwLCBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUpOworCWlmIChhZGRyICYgflBBR0VfTUFTSykgeworCQlyZXQgPSBhZGRyOworCQlnb3RvIG91dDsKKwl9CisKKwl2bV9mbGFncyA9IFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX01QWCB8CisJCQltbS0+ZGVmX2ZsYWdzIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQzsKKworCS8qIFNldCBwZ29mZiBhY2NvcmRpbmcgdG8gYWRkciBmb3IgYW5vbl92bWEgKi8KKwlwZ29mZiA9IGFkZHIgPj4gUEFHRV9TSElGVDsKKworCXJldCA9IG1tYXBfcmVnaW9uKE5VTEwsIGFkZHIsIGxlbiwgdm1fZmxhZ3MsIHBnb2ZmKTsKKwlpZiAoSVNfRVJSX1ZBTFVFKHJldCkpCisJCWdvdG8gb3V0OworCisJdm1hID0gZmluZF92bWEobW0sIHJldCk7CisJaWYgKCF2bWEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCXZtYS0+dm1fb3BzID0gJm1weF92bWFfb3BzOworCisJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCQltbV9wb3B1bGF0ZShyZXQsIGxlbik7CisJCXJldHVybiByZXQ7CisJfQorCitvdXQ6CisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIHJldDsKK30KKworZW51bSByZWdfdHlwZSB7CisJUkVHX1RZUEVfUk0gPSAwLAorCVJFR19UWVBFX0lOREVYLAorCVJFR19UWVBFX0JBU0UsCit9OworCitzdGF0aWMgaW50IGdldF9yZWdfb2Zmc2V0KHN0cnVjdCBpbnNuICppbnNuLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCSAgZW51bSByZWdfdHlwZSB0eXBlKQoreworCWludCByZWdubyA9IDA7CisKKwlzdGF0aWMgY29uc3QgaW50IHJlZ29mZltdID0geworCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYXgpLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgY3gpLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZHgpLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYngpLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3ApLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYnApLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc2kpLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZGkpLAorI2lmZGVmIENPTkZJR19YODZfNjQKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHI4KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHI5KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIxMCksCisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTEpLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjEyKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIxMyksCisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTQpLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjE1KSwKKyNlbmRpZgorCX07CisJaW50IG5yX3JlZ2lzdGVycyA9IEFSUkFZX1NJWkUocmVnb2ZmKTsKKwkvKgorCSAqIERvbid0IHBvc3NpYmx5IGRlY29kZSBhIDMyLWJpdCBpbnN0cnVjdGlvbnMgYXMKKwkgKiByZWFkaW5nIGEgNjQtYml0LW9ubHkgcmVnaXN0ZXIuCisJICovCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl82NCkgJiYgIWluc24tPng4Nl82NCkKKwkJbnJfcmVnaXN0ZXJzIC09IDg7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFJFR19UWVBFX1JNOgorCQlyZWdubyA9IFg4Nl9NT0RSTV9STShpbnNuLT5tb2RybS52YWx1ZSk7CisJCWlmIChYODZfUkVYX0IoaW5zbi0+cmV4X3ByZWZpeC52YWx1ZSkgPT0gMSkKKwkJCXJlZ25vICs9IDg7CisJCWJyZWFrOworCisJY2FzZSBSRUdfVFlQRV9JTkRFWDoKKwkJcmVnbm8gPSBYODZfU0lCX0lOREVYKGluc24tPnNpYi52YWx1ZSk7CisJCWlmIChYODZfUkVYX1goaW5zbi0+cmV4X3ByZWZpeC52YWx1ZSkgPT0gMSkKKwkJCXJlZ25vICs9IDg7CisJCWJyZWFrOworCisJY2FzZSBSRUdfVFlQRV9CQVNFOgorCQlyZWdubyA9IFg4Nl9TSUJfQkFTRShpbnNuLT5zaWIudmFsdWUpOworCQlpZiAoWDg2X1JFWF9CKGluc24tPnJleF9wcmVmaXgudmFsdWUpID09IDEpCisJCQlyZWdubyArPSA4OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByX2VycigiaW52YWxpZCByZWdpc3RlciB0eXBlIik7CisJCUJVRygpOworCQlicmVhazsKKwl9CisKKwlpZiAocmVnbm8gPiBucl9yZWdpc3RlcnMpIHsKKwkJV0FSTl9PTkNFKDEsICJkZWNvZGVkIGFuIGluc3RydWN0aW9uIHdpdGggYW4gaW52YWxpZCByZWdpc3RlciIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJlZ29mZltyZWdub107Cit9CisKKy8qCisgKiByZXR1cm4gdGhlIGFkZHJlc3MgYmVpbmcgcmVmZXJlbmNlZCBiZSBpbnN0cnVjdGlvbgorICogZm9yIHJtPTMgcmV0dXJuaW5nIHRoZSBjb250ZW50IG9mIHRoZSBybSByZWcKKyAqIGZvciBybSE9MyBjYWxjdWxhdGVzIHRoZSBhZGRyZXNzIHVzaW5nIFNJQiBhbmQgRGlzcAorICovCitzdGF0aWMgdm9pZCBfX3VzZXIgKm1weF9nZXRfYWRkcl9yZWYoc3RydWN0IGluc24gKmluc24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciwgYmFzZSwgaW5keDsKKwlpbnQgYWRkcl9vZmZzZXQsIGJhc2Vfb2Zmc2V0LCBpbmR4X29mZnNldDsKKwlpbnNuX2J5dGVfdCBzaWI7CisKKwlpbnNuX2dldF9tb2RybShpbnNuKTsKKwlpbnNuX2dldF9zaWIoaW5zbik7CisJc2liID0gaW5zbi0+c2liLnZhbHVlOworCisJaWYgKFg4Nl9NT0RSTV9NT0QoaW5zbi0+bW9kcm0udmFsdWUpID09IDMpIHsKKwkJYWRkcl9vZmZzZXQgPSBnZXRfcmVnX29mZnNldChpbnNuLCByZWdzLCBSRUdfVFlQRV9STSk7CisJCWlmIChhZGRyX29mZnNldCA8IDApCisJCQlnb3RvIG91dF9lcnI7CisJCWFkZHIgPSByZWdzX2dldF9yZWdpc3RlcihyZWdzLCBhZGRyX29mZnNldCk7CisJfSBlbHNlIHsKKwkJaWYgKGluc24tPnNpYi5uYnl0ZXMpIHsKKwkJCWJhc2Vfb2Zmc2V0ID0gZ2V0X3JlZ19vZmZzZXQoaW5zbiwgcmVncywgUkVHX1RZUEVfQkFTRSk7CisJCQlpZiAoYmFzZV9vZmZzZXQgPCAwKQorCQkJCWdvdG8gb3V0X2VycjsKKworCQkJaW5keF9vZmZzZXQgPSBnZXRfcmVnX29mZnNldChpbnNuLCByZWdzLCBSRUdfVFlQRV9JTkRFWCk7CisJCQlpZiAoaW5keF9vZmZzZXQgPCAwKQorCQkJCWdvdG8gb3V0X2VycjsKKworCQkJYmFzZSA9IHJlZ3NfZ2V0X3JlZ2lzdGVyKHJlZ3MsIGJhc2Vfb2Zmc2V0KTsKKwkJCWluZHggPSByZWdzX2dldF9yZWdpc3RlcihyZWdzLCBpbmR4X29mZnNldCk7CisJCQlhZGRyID0gYmFzZSArIGluZHggKiAoMSA8PCBYODZfU0lCX1NDQUxFKHNpYikpOworCQl9IGVsc2UgeworCQkJYWRkcl9vZmZzZXQgPSBnZXRfcmVnX29mZnNldChpbnNuLCByZWdzLCBSRUdfVFlQRV9STSk7CisJCQlpZiAoYWRkcl9vZmZzZXQgPCAwKQorCQkJCWdvdG8gb3V0X2VycjsKKwkJCWFkZHIgPSByZWdzX2dldF9yZWdpc3RlcihyZWdzLCBhZGRyX29mZnNldCk7CisJCX0KKwkJYWRkciArPSBpbnNuLT5kaXNwbGFjZW1lbnQudmFsdWU7CisJfQorCXJldHVybiAodm9pZCBfX3VzZXIgKilhZGRyOworb3V0X2VycjoKKwlyZXR1cm4gKHZvaWQgX191c2VyICopLTE7Cit9CisKK3N0YXRpYyBpbnQgbXB4X2luc25fZGVjb2RlKHN0cnVjdCBpbnNuICppbnNuLAorCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgY2hhciBidWZbTUFYX0lOU05fU0laRV07CisJaW50IHg4Nl82NCA9ICF0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKTsKKwlpbnQgbm90X2NvcGllZDsKKwlpbnQgbnJfY29waWVkOworCisJbm90X2NvcGllZCA9IGNvcHlfZnJvbV91c2VyKGJ1ZiwgKHZvaWQgX191c2VyICopcmVncy0+aXAsIHNpemVvZihidWYpKTsKKwlucl9jb3BpZWQgPSBzaXplb2YoYnVmKSAtIG5vdF9jb3BpZWQ7CisJLyoKKwkgKiBUaGUgZGVjb2RlciBfc2hvdWxkXyBmYWlsIG5pY2VseSBpZiB3ZSBwYXNzIGl0IGEgc2hvcnQgYnVmZmVyLgorCSAqIEJ1dCwgbGV0J3Mgbm90IGRlcGVuZCBvbiB0aGF0IGltcGxlbWVudGF0aW9uIGRldGFpbC4gIElmIHdlCisJICogZGlkIG5vdCBnZXQgYW55dGhpbmcsIGp1c3QgZXJyb3Igb3V0IG5vdy4KKwkgKi8KKwlpZiAoIW5yX2NvcGllZCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaW5zbl9pbml0KGluc24sIGJ1ZiwgbnJfY29waWVkLCB4ODZfNjQpOworCWluc25fZ2V0X2xlbmd0aChpbnNuKTsKKwkvKgorCSAqIGNvcHlfZnJvbV91c2VyKCkgdHJpZXMgdG8gZ2V0IGFzIG1hbnkgYnl0ZXMgYXMgd2UgY291bGQgc2VlIGluCisJICogdGhlIGxhcmdlc3QgcG9zc2libGUgaW5zdHJ1Y3Rpb24uICBJZiB0aGUgaW5zdHJ1Y3Rpb24gd2UgYXJlCisJICogYWZ0ZXIgaXMgc2hvcnRlciB0aGFuIHRoYXQgX2FuZF8gd2UgYXR0ZW1wdCB0byBjb3B5IGZyb20KKwkgKiBzb21ldGhpbmcgdW5yZWFkYWJsZSwgd2UgbWlnaHQgZ2V0IGEgc2hvcnQgcmVhZC4gIFRoaXMgaXMgT0sKKwkgKiBhcyBsb25nIGFzIHRoZSByZWFkIGRpZCBub3Qgc3RvcCBpbiB0aGUgbWlkZGxlIG9mIHRoZQorCSAqIGluc3RydWN0aW9uLiAgQ2hlY2sgdG8gc2VlIGlmIHdlIGdvdCBhIHBhcnRpYWwgaW5zdHJ1Y3Rpb24uCisJICovCisJaWYgKG5yX2NvcGllZCA8IGluc24tPmxlbmd0aCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpbnNuX2dldF9vcGNvZGUoaW5zbik7CisJLyoKKwkgKiBXZSBvbmx5IF9yZWFsbHlfIG5lZWQgdG8gZGVjb2RlIGJuZGNsL2JuZGNuL2JuZGN1CisJICogRXJyb3Igb3V0IG9uIGFueXRoaW5nIGVsc2UuCisJICovCisJaWYgKGluc24tPm9wY29kZS5ieXRlc1swXSAhPSAweDBmKQorCQlnb3RvIGJhZF9vcGNvZGU7CisJaWYgKChpbnNuLT5vcGNvZGUuYnl0ZXNbMV0gIT0gMHgxYSkgJiYKKwkgICAgKGluc24tPm9wY29kZS5ieXRlc1sxXSAhPSAweDFiKSkKKwkJZ290byBiYWRfb3Bjb2RlOworCisJcmV0dXJuIDA7CitiYWRfb3Bjb2RlOgorCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogSWYgYSBib3VuZHMgb3ZlcmZsb3cgb2NjdXJzIHRoZW4gYSAjQlIgaXMgZ2VuZXJhdGVkLiBUaGlzCisgKiBmdW5jdGlvbiBkZWNvZGVzIE1QWCBpbnN0cnVjdGlvbnMgdG8gZ2V0IHZpb2xhdGlvbiBhZGRyZXNzCisgKiBhbmQgc2V0IHRoaXMgYWRkcmVzcyBpbnRvIGV4dGVuZGVkIHN0cnVjdCBzaWdpbmZvLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIHN1cGVyIHByZWNpc2Ugd2F5IG9mIGRvaW5nIHRoaXMuCisgKiBVc2Vyc3BhY2UgY291bGQgaGF2ZSwgYnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUsIHdyaXR0ZW4KKyAqIGFueXRoaW5nIGl0IHdhbnRzIGluIHRvIHRoZSBpbnN0cnVjdGlvbnMuICBXZSBjYW4gbm90CisgKiB0cnVzdCBhbnl0aGluZyBhYm91dCBpdC4gIFRoZXkgbWlnaHQgbm90IGJlIHZhbGlkCisgKiBpbnN0cnVjdGlvbnMgb3IgbWlnaHQgZW5jb2RlIGludmFsaWQgcmVnaXN0ZXJzLCBldGMuLi4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGtmcmVlKCkgdGhlIHJldHVybmVkIHNpZ2luZm9fdC4KKyAqLworc2lnaW5mb190ICptcHhfZ2VuZXJhdGVfc2lnaW5mbyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQlzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c2F2ZV9idWYpCit7CisJc3RydWN0IGJuZHJlZyAqYm5kcmVncywgKmJuZHJlZzsKKwlzaWdpbmZvX3QgKmluZm8gPSBOVUxMOworCXN0cnVjdCBpbnNuIGluc247CisJdWludDhfdCBibmRyZWdubzsKKwlpbnQgZXJyOworCisJZXJyID0gbXB4X2luc25fZGVjb2RlKCZpbnNuLCByZWdzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKKwkvKgorCSAqIFdlIGtub3cgYXQgdGhpcyBwb2ludCB0aGF0IHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aAorCSAqIE1QWCBpbnN0cnVjdGlvbnMuCisJICovCisJaW5zbl9nZXRfbW9kcm0oJmluc24pOworCWJuZHJlZ25vID0gWDg2X01PRFJNX1JFRyhpbnNuLm1vZHJtLnZhbHVlKTsKKwlpZiAoYm5kcmVnbm8gPiAzKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisJLyogZ2V0IHRoZSBibmRyZWdzIF9hcmVhXyBvZiB0aGUgeHNhdmUgc3RydWN0dXJlICovCisJYm5kcmVncyA9IGdldF94c2F2ZV9hZGRyKHhzYXZlX2J1ZiwgWFNUQVRFX0JORFJFR1MpOworCWlmICghYm5kcmVncykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCS8qIG5vdyBnbyBzZWxlY3QgdGhlIGluZGl2aWR1YWwgcmVnaXN0ZXIgaW4gdGhlIHNldCBvZiA0ICovCisJYm5kcmVnID0gJmJuZHJlZ3NbYm5kcmVnbm9dOworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisJLyoKKwkgKiBUaGUgcmVnaXN0ZXJzIGFyZSBhbHdheXMgNjQtYml0LCBidXQgdGhlIHVwcGVyIDMyCisJICogYml0cyBhcmUgaWdub3JlZCBpbiAzMi1iaXQgbW9kZS4gIEFsc28sIG5vdGUgdGhhdCB0aGUKKwkgKiB1cHBlciBib3VuZHMgYXJlIGFyY2hpdGVjdHVyYWxseSByZXByZXNlbnRlZCBpbiAxJ3MKKwkgKiBjb21wbGVtZW50IGZvcm0uCisJICoKKwkgKiBUaGUgJ3Vuc2lnbmVkIGxvbmcnIGNhc3QgaXMgYmVjYXVzZSB0aGUgY29tcGlsZXIKKwkgKiBjb21wbGFpbnMgd2hlbiBjYXN0aW5nIGZyb20gaW50ZWdlcnMgdG8gZGlmZmVyZW50LXNpemUKKwkgKiBwb2ludGVycy4KKwkgKi8KKwlpbmZvLT5zaV9sb3dlciA9ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWJuZHJlZy0+bG93ZXJfYm91bmQ7CisJaW5mby0+c2lfdXBwZXIgPSAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl+Ym5kcmVnLT51cHBlcl9ib3VuZDsKKwlpbmZvLT5zaV9hZGRyX2xzYiA9IDA7CisJaW5mby0+c2lfc2lnbm8gPSBTSUdTRUdWOworCWluZm8tPnNpX2Vycm5vID0gMDsKKwlpbmZvLT5zaV9jb2RlID0gU0VHVl9CTkRFUlI7CisJaW5mby0+c2lfYWRkciA9IG1weF9nZXRfYWRkcl9yZWYoJmluc24sIHJlZ3MpOworCS8qCisJICogV2Ugd2VyZSBub3QgYWJsZSB0byBleHRyYWN0IGFuIGFkZHJlc3MgZnJvbSB0aGUgaW5zdHJ1Y3Rpb24sCisJICogcHJvYmFibHkgYmVjYXVzZSB0aGVyZSB3YXMgc29tZXRoaW5nIGludmFsaWQgaW4gaXQuCisJICovCisJaWYgKGluZm8tPnNpX2FkZHIgPT0gKHZvaWQgKiktMSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldHVybiBpbmZvOworZXJyX291dDoKKwkvKiBpbmZvIG1pZ2h0IGJlIE5VTEwsIGJ1dCBrZnJlZSgpIGhhbmRsZXMgdGhhdCAqLworCWtmcmVlKGluZm8pOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0YXRpYyBfX3VzZXIgdm9pZCAqdGFza19nZXRfYm91bmRzX2RpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgYm5kY3NyICpibmRjc3I7CisKKwlpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTVBYKSkKKwkJcmV0dXJuIE1QWF9JTlZBTElEX0JPVU5EU19ESVI7CisKKwkvKgorCSAqIFRoZSBib3VuZHMgZGlyZWN0b3J5IHBvaW50ZXIgaXMgc3RvcmVkIGluIGEgcmVnaXN0ZXIKKwkgKiBvbmx5IGFjY2Vzc2libGUgaWYgd2UgZmlyc3QgZG8gYW4geHNhdmUuCisJICovCisJZnB1X3NhdmVfaW5pdCgmdHNrLT50aHJlYWQuZnB1KTsKKwlibmRjc3IgPSBnZXRfeHNhdmVfYWRkcigmdHNrLT50aHJlYWQuZnB1LnN0YXRlLT54c2F2ZSwgWFNUQVRFX0JORENTUik7CisJaWYgKCFibmRjc3IpCisJCXJldHVybiBNUFhfSU5WQUxJRF9CT1VORFNfRElSOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHJlZ2lzdGVyIGxvb2tzIHZhbGlkIGJ5IGNoZWNraW5nIHRoZQorCSAqIGVuYWJsZSBiaXQuCisJICovCisJaWYgKCEoYm5kY3NyLT5ibmRjZmd1ICYgTVBYX0JORENGR19FTkFCTEVfRkxBRykpCisJCXJldHVybiBNUFhfSU5WQUxJRF9CT1VORFNfRElSOworCisJLyoKKwkgKiBMYXN0bHksIG1hc2sgb2ZmIHRoZSBsb3cgYml0cyB1c2VkIGZvciBjb25maWd1cmF0aW9uCisJICogZmxhZ3MsIGFuZCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGJvdW5kcyB0YWJsZS4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpCisJCShibmRjc3ItPmJuZGNmZ3UgJiBNUFhfQk5EQ0ZHX0FERFJfTUFTSyk7Cit9CisKK2ludCBtcHhfZW5hYmxlX21hbmFnZW1lbnQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdm9pZCBfX3VzZXIgKmJkX2Jhc2UgPSBNUFhfSU5WQUxJRF9CT1VORFNfRElSOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLT5tbTsKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogcnVudGltZSBpbiB0aGUgdXNlcnNwYWNlIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpb24gb2YKKwkgKiB0aGUgYm91bmRzIGRpcmVjdG9yeS4gVGhlbiwgaXQgd2lsbCBzYXZlIHRoZSBiYXNlIG9mIHRoZSBib3VuZHMKKwkgKiBkaXJlY3RvcnkgaW50byBYU0FWRS9YUlNUT1IgU2F2ZSBBcmVhIGFuZCBlbmFibGUgTVBYIHRocm91Z2gKKwkgKiBYUlNUT1IgaW5zdHJ1Y3Rpb24uCisJICoKKwkgKiBmcHVfeHNhdmUoKSBpcyBleHBlY3RlZCB0byBiZSB2ZXJ5IGV4cGVuc2l2ZS4gU3RvcmluZyB0aGUgYm91bmRzCisJICogZGlyZWN0b3J5IGhlcmUgbWVhbnMgdGhhdCB3ZSBkbyBub3QgaGF2ZSB0byBkbyB4c2F2ZSBpbiB0aGUgdW5tYXAKKwkgKiBwYXRoOyB3ZSBjYW4ganVzdCB1c2UgbW0tPmJkX2FkZHIgaW5zdGVhZC4KKwkgKi8KKwliZF9iYXNlID0gdGFza19nZXRfYm91bmRzX2Rpcih0c2spOworCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJbW0tPmJkX2FkZHIgPSBiZF9iYXNlOworCWlmIChtbS0+YmRfYWRkciA9PSBNUFhfSU5WQUxJRF9CT1VORFNfRElSKQorCQlyZXQgPSAtRU5YSU87CisKKwl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXB4X2Rpc2FibGVfbWFuYWdlbWVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCisJaWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01QWCkpCisJCXJldHVybiAtRU5YSU87CisKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCW1tLT5iZF9hZGRyID0gTVBYX0lOVkFMSURfQk9VTkRTX0RJUjsKKwl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdpdGggMzItYml0IG1vZGUsIE1QWF9CVF9TSVpFX0JZVEVTIGlzIDRNQiwgYW5kIHRoZSBzaXplIG9mIGVhY2gKKyAqIGJvdW5kcyB0YWJsZSBpcyAxNktCLiBXaXRoIDY0LWJpdCBtb2RlLCBNUFhfQlRfU0laRV9CWVRFUyBpcyAyR0IsCisgKiBhbmQgdGhlIHNpemUgb2YgZWFjaCBib3VuZHMgdGFibGUgaXMgNE1CLgorICovCitzdGF0aWMgaW50IGFsbG9jYXRlX2J0KGxvbmcgX191c2VyICpiZF9lbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGVjdGVkX29sZF92YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgYWN0dWFsX29sZF92YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgYnRfYWRkcjsKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogQ2FydmUgdGhlIHZpcnR1YWwgc3BhY2Ugb3V0IG9mIHVzZXJzcGFjZSBmb3IgdGhlIG5ldworCSAqIGJvdW5kcyB0YWJsZToKKwkgKi8KKwlidF9hZGRyID0gbXB4X21tYXAoTVBYX0JUX1NJWkVfQllURVMpOworCWlmIChJU19FUlIoKHZvaWQgKilidF9hZGRyKSkKKwkJcmV0dXJuIFBUUl9FUlIoKHZvaWQgKilidF9hZGRyKTsKKwkvKgorCSAqIFNldCB0aGUgdmFsaWQgZmxhZyAoa2luZGEgbGlrZSBfUEFHRV9QUkVTRU5UIGluIGEgcHRlKQorCSAqLworCWJ0X2FkZHIgPSBidF9hZGRyIHwgTVBYX0JEX0VOVFJZX1ZBTElEX0ZMQUc7CisKKwkvKgorCSAqIEdvIHBva2UgdGhlIGFkZHJlc3Mgb2YgdGhlIG5ldyBib3VuZHMgdGFibGUgaW4gdG8gdGhlCisJICogYm91bmRzIGRpcmVjdG9yeSBlbnRyeSBvdXQgaW4gdXNlcnNwYWNlIG1lbW9yeS4gIE5vdGU6CisJICogd2UgbWF5IHJhY2Ugd2l0aCBhbm90aGVyIENQVSBpbnN0YW50aWF0aW5nIHRoZSBzYW1lIHRhYmxlLgorCSAqIEluIHRoYXQgY2FzZSB0aGUgY21weGNoZyB3aWxsIHNlZSBhbiB1bmV4cGVjdGVkCisJICogJ2FjdHVhbF9vbGRfdmFsJy4KKwkgKgorCSAqIFRoaXMgY2FuIGZhdWx0LCBidXQgdGhhdCdzIE9LIGJlY2F1c2Ugd2UgZG8gbm90IGhvbGQKKwkgKiBtbWFwX3NlbSBhdCB0aGlzIHBvaW50LCB1bmxpa2Ugc29tZSBvZiB0aGUgb3RoZXIgcGFydAorCSAqIG9mIHRoZSBNUFggY29kZSB0aGF0IGhhdmUgdG8gcGFnZWZhdWx0X2Rpc2FibGUoKS4KKwkgKi8KKwlyZXQgPSB1c2VyX2F0b21pY19jbXB4Y2hnX2luYXRvbWljKCZhY3R1YWxfb2xkX3ZhbCwgYmRfZW50cnksCisJCQkJCSAgIGV4cGVjdGVkX29sZF92YWwsIGJ0X2FkZHIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubWFwOworCisJLyoKKwkgKiBUaGUgdXNlcl9hdG9taWNfY21weGNoZ19pbmF0b21pYygpIHdpbGwgb25seSByZXR1cm4gbm9uemVybworCSAqIGZvciBmYXVsdHMsICpub3QqIGlmIHRoZSBjbXB4Y2hnIGl0c2VsZiBmYWlscy4gIE5vdyB3ZSBtdXN0CisJICogdmVyaWZ5IHRoYXQgdGhlIGNtcHhjaGcgaXRzZWxmIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisJICovCisJLyoKKwkgKiBXZSBleHBlY3RlZCBhbiBlbXB0eSAnZXhwZWN0ZWRfb2xkX3ZhbCcsIGJ1dCBpbnN0ZWFkIGZvdW5kCisJICogYW4gYXBwYXJlbnRseSB2YWxpZCBlbnRyeS4gIEFzc3VtZSB3ZSByYWNlZCB3aXRoIGFub3RoZXIKKwkgKiB0aHJlYWQgdG8gaW5zdGFudGlhdGUgdGhpcyB0YWJsZSBhbmQgZGVzY2xhcmUgc3VjY2Vjc3MuCisJICovCisJaWYgKGFjdHVhbF9vbGRfdmFsICYgTVBYX0JEX0VOVFJZX1ZBTElEX0ZMQUcpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCS8qCisJICogV2UgZm91bmQgYSBub24tZW1wdHkgYmRfZW50cnkgYnV0IGl0IGRpZCBub3QgaGF2ZSB0aGUKKwkgKiBWQUxJRF9GTEFHIHNldC4gIFJldHVybiBhbiBlcnJvciB3aGljaCB3aWxsIHJlc3VsdCBpbgorCSAqIGEgU0VHViBzaW5jZSB0aGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgc29tZWJvZHkgc2NyaWJibGVkCisJICogc29tZSBpbnZhbGlkIGRhdGEgaW4gdG8gYSBib3VuZHMgdGFibGUuCisJICovCisJaWYgKGV4cGVjdGVkX29sZF92YWwgIT0gYWN0dWFsX29sZF92YWwpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCXJldHVybiAwOworb3V0X3VubWFwOgorCXZtX211bm1hcChidF9hZGRyICYgTVBYX0JUX0FERFJfTUFTSywgTVBYX0JUX1NJWkVfQllURVMpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXaGVuIGEgQk5EU1RYIGluc3RydWN0aW9uIGF0dGVtcHRzIHRvIHNhdmUgYm91bmRzIHRvIGEgYm91bmRzCisgKiB0YWJsZSwgaXQgd2lsbCBmaXJzdCBhdHRlbXB0IHRvIGxvb2sgdXAgdGhlIHRhYmxlIGluIHRoZQorICogZmlyc3QtbGV2ZWwgYm91bmRzIGRpcmVjdG9yeS4gIElmIGl0IGRvZXMgbm90IGZpbmQgYSB0YWJsZSBpbgorICogdGhlIGRpcmVjdG9yeSwgYSAjQlIgaXMgZ2VuZXJhdGVkIGFuZCB3ZSBnZXQgaGVyZSBpbiBvcmRlciB0bworICogYWxsb2NhdGUgYSBuZXcgdGFibGUuCisgKgorICogV2l0aCAzMi1iaXQgbW9kZSwgdGhlIHNpemUgb2YgQkQgaXMgNE1CLCBhbmQgdGhlIHNpemUgb2YgZWFjaAorICogYm91bmQgdGFibGUgaXMgMTZLQi4gV2l0aCA2NC1iaXQgbW9kZSwgdGhlIHNpemUgb2YgQkQgaXMgMkdCLAorICogYW5kIHRoZSBzaXplIG9mIGVhY2ggYm91bmQgdGFibGUgaXMgNE1CLgorICovCitzdGF0aWMgaW50IGRvX21weF9idF9mYXVsdChzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c2F2ZV9idWYpCit7CisJdW5zaWduZWQgbG9uZyBiZF9lbnRyeSwgYmRfYmFzZTsKKwlzdHJ1Y3QgYm5kY3NyICpibmRjc3I7CisKKwlibmRjc3IgPSBnZXRfeHNhdmVfYWRkcih4c2F2ZV9idWYsIFhTVEFURV9CTkRDU1IpOworCWlmICghYm5kY3NyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAqIE1hc2sgb2ZmIHRoZSBwcmVzZXJ2ZSBhbmQgZW5hYmxlIGJpdHMKKwkgKi8KKwliZF9iYXNlID0gYm5kY3NyLT5ibmRjZmd1ICYgTVBYX0JORENGR19BRERSX01BU0s7CisJLyoKKwkgKiBUaGUgaGFyZHdhcmUgcHJvdmlkZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIG1pc3Npbmcgb3IgaW52YWxpZAorCSAqIGVudHJ5IHZpYSBCTkRTVEFUVVMsIHNvIHdlIGRvbid0IGhhdmUgdG8gZ28gbG9vayBpdCB1cC4KKwkgKi8KKwliZF9lbnRyeSA9IGJuZGNzci0+Ym5kc3RhdHVzICYgTVBYX0JORFNUQV9BRERSX01BU0s7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBlbnRyeSBpcyB3aXRoaW4gd2hlcmUgd2UgdGhpbmsKKwkgKiB0aGUgZGlyZWN0b3J5IGlzLgorCSAqLworCWlmICgoYmRfZW50cnkgPCBiZF9iYXNlKSB8fAorCSAgICAoYmRfZW50cnkgPj0gYmRfYmFzZSArIE1QWF9CRF9TSVpFX0JZVEVTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gYWxsb2NhdGVfYnQoKGxvbmcgX191c2VyICopYmRfZW50cnkpOworfQorCitpbnQgbXB4X2hhbmRsZV9iZF9mYXVsdChzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c2F2ZV9idWYpCit7CisJLyoKKwkgKiBVc2Vyc3BhY2UgbmV2ZXIgYXNrZWQgdXMgdG8gbWFuYWdlIHRoZSBib3VuZHMgdGFibGVzLAorCSAqIHNvIHJlZnVzZSB0byBoZWxwLgorCSAqLworCWlmICgha2VybmVsX21hbmFnaW5nX21weF90YWJsZXMoY3VycmVudC0+bW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkb19tcHhfYnRfZmF1bHQoeHNhdmVfYnVmKSkgeworCQlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJCS8qCisJCSAqIFRoZSBmb3JjZV9zaWcoKSBpcyBlc3NlbnRpYWxseSAiaGFuZGxpbmciIHRoaXMKKwkJICogZXhjZXB0aW9uLCBzbyB3ZSBkbyBub3QgcGFzcyB1cCB0aGUgZXJyb3IKKwkJICogZnJvbSBkb19tcHhfYnRfZmF1bHQoKS4KKwkJICovCisJfQorCXJldHVybiAwOworfQorCisvKgorICogQSB0aGluIHdyYXBwZXIgYXJvdW5kIGdldF91c2VyX3BhZ2VzKCkuICBSZXR1cm5zIDAgaWYgdGhlCisgKiBmYXVsdCB3YXMgcmVzb2x2ZWQgb3IgLWVycm5vIGlmIG5vdC4KKyAqLworc3RhdGljIGludCBtcHhfcmVzb2x2ZV9mYXVsdChsb25nIF9fdXNlciAqYWRkciwgaW50IHdyaXRlKQoreworCWxvbmcgZ3VwX3JldDsKKwlpbnQgbnJfcGFnZXMgPSAxOworCWludCBmb3JjZSA9IDA7CisKKwlndXBfcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sICh1bnNpZ25lZCBsb25nKWFkZHIsCisJCQkJIG5yX3BhZ2VzLCB3cml0ZSwgZm9yY2UsIE5VTEwsIE5VTEwpOworCS8qCisJICogZ2V0X3VzZXJfcGFnZXMoKSByZXR1cm5zIG51bWJlciBvZiBwYWdlcyBnb3R0ZW4uCisJICogMCBtZWFucyB3ZSBmYWlsZWQgdG8gZmF1bHQgaW4gYW5kIGdldCBhbnl0aGluZywKKwkgKiBwcm9iYWJseSBiZWNhdXNlICdhZGRyJyBpcyBiYWQuCisJICovCisJaWYgKCFndXBfcmV0KQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKiBPdGhlciBlcnJvciwgcmV0dXJuIGl0ICovCisJaWYgKGd1cF9yZXQgPCAwKQorCQlyZXR1cm4gZ3VwX3JldDsKKwkvKiBtdXN0IGhhdmUgZ3VwJ2QgYSBwYWdlIGFuZCBndXBfcmV0PjAsIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCB0aGUgYmFzZSBvZiBib3VuZHMgdGFibGVzIHBvaW50ZWQgYnkgc3BlY2lmaWMgYm91bmRzCisgKiBkaXJlY3RvcnkgZW50cnkuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2J0X2FkZHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQlsb25nIF9fdXNlciAqYmRfZW50cnksIHVuc2lnbmVkIGxvbmcgKmJ0X2FkZHIpCit7CisJaW50IHJldDsKKwlpbnQgdmFsaWRfYml0OworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIChiZF9lbnRyeSksIHNpemVvZigqYmRfZW50cnkpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgbmVlZF93cml0ZSA9IDA7CisKKwkJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKwkJcmV0ID0gZ2V0X3VzZXIoKmJ0X2FkZHIsIGJkX2VudHJ5KTsKKwkJcGFnZWZhdWx0X2VuYWJsZSgpOworCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCQlpZiAocmV0ID09IC1FRkFVTFQpCisJCQlyZXQgPSBtcHhfcmVzb2x2ZV9mYXVsdChiZF9lbnRyeSwgbmVlZF93cml0ZSk7CisJCS8qCisJCSAqIElmIHdlIGNvdWxkIG5vdCByZXNvbHZlIHRoZSBmYXVsdCwgY29uc2lkZXIgaXQKKwkJICogdXNlcnNwYWNlJ3MgZmF1bHQgYW5kIGVycm9yIG91dC4KKwkJICovCisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXZhbGlkX2JpdCA9ICpidF9hZGRyICYgTVBYX0JEX0VOVFJZX1ZBTElEX0ZMQUc7CisJKmJ0X2FkZHIgJj0gTVBYX0JUX0FERFJfTUFTSzsKKworCS8qCisJICogV2hlbiB0aGUga2VybmVsIGlzIG1hbmFnaW5nIGJvdW5kcyB0YWJsZXMsIGEgYm91bmRzIGRpcmVjdG9yeQorCSAqIGVudHJ5IHdpbGwgZWl0aGVyIGhhdmUgYSB2YWxpZCBhZGRyZXNzIChwbHVzIHRoZSB2YWxpZCBiaXQpCisJICogKk9SKiBiZSBjb21wbGV0ZWx5IGVtcHR5LiBJZiB3ZSBzZWUgYSAhdmFsaWQgZW50cnkgKmFuZCogc29tZQorCSAqIGRhdGEgaW4gdGhlIGFkZHJlc3MgZmllbGQsIHdlIGtub3cgc29tZXRoaW5nIGlzIHdyb25nLiBUaGlzCisJICogLUVJTlZBTCByZXR1cm4gd2lsbCBjYXVzZSBhIFNJR1NFR1YuCisJICovCisJaWYgKCF2YWxpZF9iaXQgJiYgKmJ0X2FkZHIpCisJCXJldHVybiAtRUlOVkFMOworCS8qCisJICogRG8gd2UgaGF2ZSBhbiBjb21wbGV0ZWx5IHplcm9lZCBidCBlbnRyeT8gIFRoYXQgaXMgT0suICBJdAorCSAqIGp1c3QgbWVhbnMgdGhlcmUgd2FzIG5vIGJvdW5kcyB0YWJsZSBmb3IgdGhpcyBtZW1vcnkuICBNYWtlCisJICogc3VyZSB0byBkaXN0aW5ndWlzaCB0aGlzIGZyb20gLUVJTlZBTCwgd2hpY2ggd2lsbCBjYXVzZQorCSAqIGEgU0VHVi4KKwkgKi8KKwlpZiAoIXZhbGlkX2JpdCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZyZWUgdGhlIGJhY2tpbmcgcGh5c2ljYWwgcGFnZXMgb2YgYm91bmRzIHRhYmxlICdidF9hZGRyJy4KKyAqIEFzc3VtZSBzdGFydC4uLmVuZCBpcyB3aXRoaW4gdGhhdCBib3VuZHMgdGFibGUuCisgKi8KK3N0YXRpYyBpbnQgemFwX2J0X2VudHJpZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCXVuc2lnbmVkIGxvbmcgYnRfYWRkciwKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBsZW47CisKKwkvKgorCSAqIEZpbmQgdGhlIGZpcnN0IG92ZXJsYXBwaW5nIHZtYS4gSWYgdm1hLT52bV9zdGFydCA+IHN0YXJ0LCB0aGVyZQorCSAqIHdpbGwgYmUgYSBob2xlIGluIHRoZSBib3VuZHMgdGFibGUuIFRoaXMgLUVJTlZBTCByZXR1cm4gd2lsbAorCSAqIGNhdXNlIGEgU0lHU0VHVi4KKwkgKi8KKwl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOworCWlmICghdm1hIHx8IHZtYS0+dm1fc3RhcnQgPiBzdGFydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEEgTlVNQSBwb2xpY3kgb24gYSBWTV9NUFggVk1BIGNvdWxkIGNhdXNlIHRoaXMgYm91ZHMgdGFibGUgdG8KKwkgKiBiZSBzcGxpdC4gU28gd2UgbmVlZCB0byBsb29rIGFjcm9zcyB0aGUgZW50aXJlICdzdGFydCAtPiBlbmQnCisJICogcmFuZ2Ugb2YgdGhpcyBib3VuZHMgdGFibGUsIGZpbmQgYWxsIG9mIHRoZSBWTV9NUFggVk1BcywgYW5kCisJICogemFwIG9ubHkgdGhvc2UuCisJICovCisJYWRkciA9IHN0YXJ0OworCXdoaWxlICh2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZCkgeworCQkvKgorCQkgKiBXZSBmb2xsb3dlZCBhIGJvdW5kcyBkaXJlY3RvcnkgZW50cnkgZG93bgorCQkgKiBoZXJlLiAgSWYgd2UgZmluZCBhIG5vbi1NUFggVk1BLCB0aGF0J3MgYmFkLAorCQkgKiBzbyBzdG9wIGltbWVkaWF0ZWx5IGFuZCByZXR1cm4gYW4gZXJyb3IuICBUaGlzCisJCSAqIHByb2JhYmx5IHJlc3VsdHMgaW4gYSBTSUdTRUdWLgorCQkgKi8KKwkJaWYgKCFpc19tcHhfdm1hKHZtYSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlsZW4gPSBtaW4odm1hLT52bV9lbmQsIGVuZCkgLSBhZGRyOworCQl6YXBfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIGxlbiwgTlVMTCk7CisKKwkJdm1hID0gdm1hLT52bV9uZXh0OworCQlhZGRyID0gdm1hLT52bV9zdGFydDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bm1hcF9zaW5nbGVfYnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCWxvbmcgX191c2VyICpiZF9lbnRyeSwgdW5zaWduZWQgbG9uZyBidF9hZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZXhwZWN0ZWRfb2xkX3ZhbCA9IGJ0X2FkZHIgfCBNUFhfQkRfRU5UUllfVkFMSURfRkxBRzsKKwl1bnNpZ25lZCBsb25nIGFjdHVhbF9vbGRfdmFsID0gMDsKKwlpbnQgcmV0OworCisJd2hpbGUgKDEpIHsKKwkJaW50IG5lZWRfd3JpdGUgPSAxOworCisJCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisJCXJldCA9IHVzZXJfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMoJmFjdHVhbF9vbGRfdmFsLCBiZF9lbnRyeSwKKwkJCQkJCSAgIGV4cGVjdGVkX29sZF92YWwsIDApOworCQlwYWdlZmF1bHRfZW5hYmxlKCk7CisJCWlmICghcmV0KQorCQkJYnJlYWs7CisJCWlmIChyZXQgPT0gLUVGQVVMVCkKKwkJCXJldCA9IG1weF9yZXNvbHZlX2ZhdWx0KGJkX2VudHJ5LCBuZWVkX3dyaXRlKTsKKwkJLyoKKwkJICogSWYgd2UgY291bGQgbm90IHJlc29sdmUgdGhlIGZhdWx0LCBjb25zaWRlciBpdAorCQkgKiB1c2Vyc3BhY2UncyBmYXVsdCBhbmQgZXJyb3Igb3V0LgorCQkgKi8KKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCS8qCisJICogVGhlIGNtcHhjaGcgd2FzIHBlcmZvcm1lZCwgY2hlY2sgdGhlIHJlc3VsdHMuCisJICovCisJaWYgKGFjdHVhbF9vbGRfdmFsICE9IGV4cGVjdGVkX29sZF92YWwpIHsKKwkJLyoKKwkJICogU29tZW9uZSBlbHNlIHJhY2VkIHdpdGggdXMgdG8gdW5tYXAgdGhlIHRhYmxlLgorCQkgKiBUaGVyZSB3YXMgbm8gYm91bmRzIHRhYmxlIHBvaW50ZWQgdG8gYnkgdGhlCisJCSAqIGRpcmVjdG9yeSwgc28gZGVjbGFyZSBzdWNjZXNzLiAgU29tZWJvZHkgZnJlZWQKKwkJICogaXQuCisJCSAqLworCQlpZiAoIWFjdHVhbF9vbGRfdmFsKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIFNvbWV0aGluZyBtZXNzZWQgd2l0aCB0aGUgYm91bmRzIGRpcmVjdG9yeQorCQkgKiBlbnRyeS4gIFdlIGhvbGQgbW1hcF9zZW0gZm9yIHJlYWQgb3Igd3JpdGUKKwkJICogaGVyZSwgc28gaXQgY291bGQgbm90IGJlIGEgX25ld18gYm91bmRzIHRhYmxlCisJCSAqIHRoYXQgc29tZW9uZSBqdXN0IGFsbG9jYXRlZC4gIFNvbWV0aGluZyBpcworCQkgKiB3cm9uZywgc28gcGFzcyB1cCB0aGUgZXJyb3IgYW5kIFNJR1NFR1YuCisJCSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIE5vdGUsIHdlIGFyZSBsaWtlbHkgYmVpbmcgY2FsbGVkIHVuZGVyIGRvX211bm1hcCgpIGFscmVhZHkuIFRvCisJICogYXZvaWQgcmVjdXJzaW9uLCBkb19tdW5tYXAoKSB3aWxsIGNoZWNrIHdoZXRoZXIgaXQgY29tZXMKKwkgKiBmcm9tIG9uZSBib3VuZHMgdGFibGUgdGhyb3VnaCBWTV9NUFggZmxhZy4KKwkgKi8KKwlyZXR1cm4gZG9fbXVubWFwKG1tLCBidF9hZGRyLCBNUFhfQlRfU0laRV9CWVRFUyk7Cit9CisKKy8qCisgKiBJZiB0aGUgYm91bmRzIHRhYmxlIHBvaW50ZWQgYnkgYm91bmRzIGRpcmVjdG9yeSAnYmRfZW50cnknIGlzCisgKiBub3Qgc2hhcmVkLCB1bm1hcCB0aGlzIHdob2xlIGJvdW5kcyB0YWJsZS4gT3RoZXJ3aXNlLCBvbmx5IGZyZWUKKyAqIHRob3NlIGJhY2tpbmcgcGh5c2ljYWwgcGFnZXMgb2YgYm91bmRzIHRhYmxlIGVudHJpZXMgY292ZXJlZAorICogaW4gdGhpcyB2aXJ0dWFsIGFkZHJlc3MgcmVnaW9uIHN0YXJ0Li4uZW5kLgorICovCitzdGF0aWMgaW50IHVubWFwX3NoYXJlZF9idChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJbG9uZyBfX3VzZXIgKmJkX2VudHJ5LCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCBwcmV2X3NoYXJlZCwgYm9vbCBuZXh0X3NoYXJlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGJ0X2FkZHI7CisJaW50IHJldDsKKworCXJldCA9IGdldF9idF9hZGRyKG1tLCBiZF9lbnRyeSwgJmJ0X2FkZHIpOworCS8qCisJICogV2UgY291bGQgc2VlIGFuICJlcnJvciIgcmV0IGZvciBub3QtcHJlc2VudCBib3VuZHMKKwkgKiB0YWJsZXMgKG5vdCByZWFsbHkgYW4gZXJyb3IpLCBvciBhY3R1YWwgZXJyb3JzLCBidXQKKwkgKiBzdG9wIHVubWFwcGluZyBlaXRoZXIgd2F5LgorCSAqLworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocHJldl9zaGFyZWQgJiYgbmV4dF9zaGFyZWQpCisJCXJldCA9IHphcF9idF9lbnRyaWVzKG1tLCBidF9hZGRyLAorCQkJCWJ0X2FkZHIrTVBYX0dFVF9CVF9FTlRSWV9PRkZTRVQoc3RhcnQpLAorCQkJCWJ0X2FkZHIrTVBYX0dFVF9CVF9FTlRSWV9PRkZTRVQoZW5kKSk7CisJZWxzZSBpZiAocHJldl9zaGFyZWQpCisJCXJldCA9IHphcF9idF9lbnRyaWVzKG1tLCBidF9hZGRyLAorCQkJCWJ0X2FkZHIrTVBYX0dFVF9CVF9FTlRSWV9PRkZTRVQoc3RhcnQpLAorCQkJCWJ0X2FkZHIrTVBYX0JUX1NJWkVfQllURVMpOworCWVsc2UgaWYgKG5leHRfc2hhcmVkKQorCQlyZXQgPSB6YXBfYnRfZW50cmllcyhtbSwgYnRfYWRkciwgYnRfYWRkciwKKwkJCQlidF9hZGRyK01QWF9HRVRfQlRfRU5UUllfT0ZGU0VUKGVuZCkpOworCWVsc2UKKwkJcmV0ID0gdW5tYXBfc2luZ2xlX2J0KG1tLCBiZF9lbnRyeSwgYnRfYWRkcik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQSB2aXJ0dWFsIGFkZHJlc3MgcmVnaW9uIGJlaW5nIG11bm1hcCgpZWQgbWlnaHQgc2hhcmUgYm91bmRzIHRhYmxlCisgKiB3aXRoIGFkamFjZW50IFZNQXMuIFdlIG9ubHkgbmVlZCB0byBmcmVlIHRoZSBiYWNraW5nIHBoeXNpY2FsCisgKiBtZW1vcnkgb2YgdGhlc2Ugc2hhcmVkIGJvdW5kcyB0YWJsZXMgZW50cmllcyBjb3ZlcmVkIGluIHRoaXMgdmlydHVhbAorICogYWRkcmVzcyByZWdpb24uCisgKi8KK3N0YXRpYyBpbnQgdW5tYXBfZWRnZV9idHMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludCByZXQ7CisJbG9uZyBfX3VzZXIgKmJkZV9zdGFydCwgKmJkZV9lbmQ7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCAqbmV4dDsKKwlib29sIHByZXZfc2hhcmVkID0gZmFsc2UsIG5leHRfc2hhcmVkID0gZmFsc2U7CisKKwliZGVfc3RhcnQgPSBtbS0+YmRfYWRkciArIE1QWF9HRVRfQkRfRU5UUllfT0ZGU0VUKHN0YXJ0KTsKKwliZGVfZW5kID0gbW0tPmJkX2FkZHIgKyBNUFhfR0VUX0JEX0VOVFJZX09GRlNFVChlbmQtMSk7CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgYmRlX3N0YXJ0IGFuZCBiZGVfZW5kIGFyZSBzaGFyZWQgd2l0aCBhZGphY2VudAorCSAqIFZNQXMuCisJICoKKwkgKiBXZSBhbHJlYWR5IHVubGlrZWQgdGhlIFZNQXMgZnJvbSB0aGUgbW0ncyByYnRyZWUgc28gJ3N0YXJ0JworCSAqIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW4gYSBob2xlLiBUaGlzIGdldHMgdXMgdGhlIGZpcnN0IFZNQQorCSAqIGJlZm9yZSB0aGUgaG9sZSBpbiB0byAncHJldicgYW5kIHRoZSBuZXh0IFZNQSBhZnRlciB0aGUgaG9sZQorCSAqIGluIHRvICduZXh0Jy4KKwkgKi8KKwluZXh0ID0gZmluZF92bWFfcHJldihtbSwgc3RhcnQsICZwcmV2KTsKKwlpZiAocHJldiAmJiAobW0tPmJkX2FkZHIgKyBNUFhfR0VUX0JEX0VOVFJZX09GRlNFVChwcmV2LT52bV9lbmQtMSkpCisJCQk9PSBiZGVfc3RhcnQpCisJCXByZXZfc2hhcmVkID0gdHJ1ZTsKKwlpZiAobmV4dCAmJiAobW0tPmJkX2FkZHIgKyBNUFhfR0VUX0JEX0VOVFJZX09GRlNFVChuZXh0LT52bV9zdGFydCkpCisJCQk9PSBiZGVfZW5kKQorCQluZXh0X3NoYXJlZCA9IHRydWU7CisKKwkvKgorCSAqIFRoaXMgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBiZWluZyBtdW5tYXAoKWVkIGlzIG9ubHkKKwkgKiBjb3ZlcmVkIGJ5IG9uZSBib3VuZHMgdGFibGUuCisJICoKKwkgKiBJbiB0aGlzIGNhc2UsIGlmIHRoaXMgdGFibGUgaXMgYWxzbyBzaGFyZWQgd2l0aCBhZGphY2VudAorCSAqIFZNQXMsIG9ubHkgcGFydCBvZiB0aGUgYmFja2luZyBwaHlzaWNhbCBtZW1vcnkgb2YgdGhlIGJvdW5kcworCSAqIHRhYmxlIG5lZWQgYmUgZnJlZWVkLiBPdGhlcndpc2UgdGhlIHdob2xlIGJvdW5kcyB0YWJsZSBuZWVkCisJICogYmUgdW5tYXBwZWQuCisJICovCisJaWYgKGJkZV9zdGFydCA9PSBiZGVfZW5kKSB7CisJCXJldHVybiB1bm1hcF9zaGFyZWRfYnQobW0sIGJkZV9zdGFydCwgc3RhcnQsIGVuZCwKKwkJCQlwcmV2X3NoYXJlZCwgbmV4dF9zaGFyZWQpOworCX0KKworCS8qCisJICogSWYgbW9yZSB0aGFuIG9uZSBib3VuZHMgdGFibGVzIGFyZSBjb3ZlcmVkIGluIHRoaXMgdmlydHVhbAorCSAqIGFkZHJlc3MgcmVnaW9uIGJlaW5nIG11bm1hcCgpZWQsIHdlIG5lZWQgdG8gc2VwYXJhdGVseSBjaGVjaworCSAqIHdoZXRoZXIgYmRlX3N0YXJ0IGFuZCBiZGVfZW5kIGFyZSBzaGFyZWQgd2l0aCBhZGphY2VudCBWTUFzLgorCSAqLworCXJldCA9IHVubWFwX3NoYXJlZF9idChtbSwgYmRlX3N0YXJ0LCBzdGFydCwgZW5kLCBwcmV2X3NoYXJlZCwgZmFsc2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gdW5tYXBfc2hhcmVkX2J0KG1tLCBiZGVfZW5kLCBzdGFydCwgZW5kLCBmYWxzZSwgbmV4dF9zaGFyZWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcHhfdW5tYXBfdGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgcmV0OworCWxvbmcgX191c2VyICpiZF9lbnRyeSwgKmJkZV9zdGFydCwgKmJkZV9lbmQ7CisJdW5zaWduZWQgbG9uZyBidF9hZGRyOworCisJLyoKKwkgKiAiRWRnZSIgYm91bmRzIHRhYmxlcyBhcmUgdGhvc2Ugd2hpY2ggYXJlIGJlaW5nIHVzZWQgYnkgdGhlIHJlZ2lvbgorCSAqIChzdGFydCAtPiBlbmQpLCBidXQgdGhhdCBtYXkgYmUgc2hhcmVkIHdpdGggYWRqYWNlbnQgYXJlYXMuICBJZiB0aGV5CisJICogdHVybiBvdXQgdG8gYmUgY29tcGxldGVseSB1bnNoYXJlZCwgdGhleSB3aWxsIGJlIGZyZWVkLiAgSWYgdGhleSBhcmUKKwkgKiBzaGFyZWQsIHdlIHdpbGwgZnJlZSB0aGUgYmFja2luZyBzdG9yZSAobGlrZSBhbiBNQURWX0RPTlRORUVEKSBmb3IKKwkgKiBhcmVhcyB1c2VkIGJ5IHRoaXMgcmVnaW9uLgorCSAqLworCXJldCA9IHVubWFwX2VkZ2VfYnRzKG1tLCBzdGFydCwgZW5kKTsKKwlzd2l0Y2ggKHJldCkgeworCQkvKiBub24tcHJlc2VudCB0YWJsZXMgYXJlIE9LICovCisJCWNhc2UgMDoKKwkJY2FzZSAtRU5PRU5UOgorCQkJLyogU3VjY2Vzcywgb3Igbm8gdGFibGVzIHRvIHVubWFwICovCisJCQlicmVhazsKKwkJY2FzZSAtRUlOVkFMOgorCQljYXNlIC1FRkFVTFQ6CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogT25seSB1bm1hcCB0aGUgYm91bmRzIHRhYmxlIHRoYXQgYXJlCisJICogICAxLiBmdWxseSBjb3ZlcmVkCisJICogICAyLiBub3QgYXQgdGhlIGVkZ2VzIG9mIHRoZSBtYXBwaW5nLCBldmVuIGlmIGZ1bGwgYWxpZ25lZAorCSAqLworCWJkZV9zdGFydCA9IG1tLT5iZF9hZGRyICsgTVBYX0dFVF9CRF9FTlRSWV9PRkZTRVQoc3RhcnQpOworCWJkZV9lbmQgPSBtbS0+YmRfYWRkciArIE1QWF9HRVRfQkRfRU5UUllfT0ZGU0VUKGVuZC0xKTsKKwlmb3IgKGJkX2VudHJ5ID0gYmRlX3N0YXJ0ICsgMTsgYmRfZW50cnkgPCBiZGVfZW5kOyBiZF9lbnRyeSsrKSB7CisJCXJldCA9IGdldF9idF9hZGRyKG1tLCBiZF9lbnRyeSwgJmJ0X2FkZHIpOworCQlzd2l0Y2ggKHJldCkgeworCQkJY2FzZSAwOgorCQkJCWJyZWFrOworCQkJY2FzZSAtRU5PRU5UOgorCQkJCS8qIE5vIHRhYmxlIGhlcmUsIHRyeSB0aGUgbmV4dCBvbmUgKi8KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgLUVJTlZBTDoKKwkJCWNhc2UgLUVGQVVMVDoKKwkJCWRlZmF1bHQ6CisJCQkJLyoKKwkJCQkgKiBOb3RlOiB3ZSBhcmUgYmVpbmcgc3RyaWN0IGhlcmUuCisJCQkJICogQW55IHRpbWUgd2UgcnVuIGluIHRvIGFuIGlzc3VlCisJCQkJICogdW5tYXBwaW5nIHRhYmxlcywgd2Ugc3RvcCBhbmQKKwkJCQkgKiBTSUdTRUdWLgorCQkJCSAqLworCQkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSB1bm1hcF9zaW5nbGVfYnQobW0sIGJkX2VudHJ5LCBidF9hZGRyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlIHVudXNlZCBib3VuZHMgdGFibGVzIGNvdmVyZWQgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmVnaW9uIGJlaW5nCisgKiBtdW5tYXAoKWVkLiBBc3N1bWUgZW5kID4gc3RhcnQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBkb19tdW5tYXAoKSwgYW5kIHRoZSBWTUFzIGNvdmVyaW5nCisgKiB0aGUgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBzdGFydC4uLmVuZCBoYXZlIGFscmVhZHkgYmVlbiBzcGxpdCBpZgorICogbmVjZXNzYXJ5LCBhbmQgdGhlICd2bWEnIGlzIHRoZSBmaXJzdCB2bWEgaW4gdGhpcyByYW5nZSAoc3RhcnQgLT4gZW5kKS4KKyAqLwordm9pZCBtcHhfbm90aWZ5X3VubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW50IHJldDsKKworCS8qCisJICogUmVmdXNlIHRvIGRvIGFueXRoaW5nIHVubGVzcyB1c2Vyc3BhY2UgaGFzIGFza2VkCisJICogdGhlIGtlcm5lbCB0byBoZWxwIG1hbmFnZSB0aGUgYm91bmRzIHRhYmxlcywKKwkgKi8KKwlpZiAoIWtlcm5lbF9tYW5hZ2luZ19tcHhfdGFibGVzKGN1cnJlbnQtPm1tKSkKKwkJcmV0dXJuOworCS8qCisJICogVGhpcyB3aWxsIGxvb2sgYWNyb3NzIHRoZSBlbnRpcmUgJ3N0YXJ0IC0+IGVuZCcgcmFuZ2UsCisJICogYW5kIGZpbmQgYWxsIG9mIHRoZSBub24tVk1fTVBYIFZNQXMuCisJICoKKwkgKiBUbyBhdm9pZCByZWN1cnNpb24sIGlmIGEgVk1fTVBYIHZtYSBpcyBmb3VuZCBpbiB0aGUgcmFuZ2UKKwkgKiAoc3RhcnQtPmVuZCksIHdlIHdpbGwgbm90IGNvbnRpbnVlIGZvbGxvdy11cCB3b3JrLiBUaGlzCisJICogcmVjdXJzaW9uIHJlcHJlc2VudHMgaGF2aW5nIGJvdW5kcyB0YWJsZXMgZm9yIGJvdW5kcyB0YWJsZXMsCisJICogd2hpY2ggc2hvdWxkIG5vdCBvY2N1ciBub3JtYWxseS4gQmVpbmcgc3RyaWN0IGFib3V0IGl0IGhlcmUKKwkgKiBoZWxwcyBlbnN1cmUgdGhhdCB3ZSBkbyBub3QgaGF2ZSBhbiBleHBsb2l0YWJsZSBzdGFjayBvdmVyZmxvdy4KKwkgKi8KKwlkbyB7CisJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTVBYKQorCQkJcmV0dXJuOworCQl2bWEgPSB2bWEtPnZtX25leHQ7CisJfSB3aGlsZSAodm1hICYmIHZtYS0+dm1fc3RhcnQgPCBlbmQpOworCisJcmV0ID0gbXB4X3VubWFwX3RhYmxlcyhtbSwgc3RhcnQsIGVuZCk7CisJaWYgKHJldCkKKwkJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKaW5kZXggMzZkZTI5My4uYTNhNWQ0NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCkBAIC00ODUsMTQgKzQ4NSwyMyBAQAogCiAJLyoKIAkgKiBXZSBhcmUgc2FmZSBub3cuIENoZWNrIHdoZXRoZXIgdGhlIG5ldyBwZ3Byb3QgaXMgdGhlIHNhbWU6CisJICogQ29udmVydCBwcm90ZWN0aW9uIGF0dHJpYnV0ZXMgdG8gNGstZm9ybWF0LCBhcyBjcGEtPm1hc2sqIGFyZSBzZXQKKwkgKiB1cCBhY2NvcmRpbmdseS4KIAkgKi8KIAlvbGRfcHRlID0gKmtwdGU7Ci0Jb2xkX3Byb3QgPSByZXFfcHJvdCA9IHB0ZV9wZ3Byb3Qob2xkX3B0ZSk7CisJb2xkX3Byb3QgPSByZXFfcHJvdCA9IHBncHJvdF9sYXJnZV8yXzRrKHB0ZV9wZ3Byb3Qob2xkX3B0ZSkpOwogCiAJcGdwcm90X3ZhbChyZXFfcHJvdCkgJj0gfnBncHJvdF92YWwoY3BhLT5tYXNrX2Nscik7CiAJcGdwcm90X3ZhbChyZXFfcHJvdCkgfD0gcGdwcm90X3ZhbChjcGEtPm1hc2tfc2V0KTsKIAogCS8qCisJICogcmVxX3Byb3QgaXMgaW4gZm9ybWF0IG9mIDRrIHBhZ2VzLiBJdCBtdXN0IGJlIGNvbnZlcnRlZCB0byBsYXJnZQorCSAqIHBhZ2UgZm9ybWF0OiB0aGUgY2FjaGluZyBtb2RlIGluY2x1ZGVzIHRoZSBQQVQgYml0IGxvY2F0ZWQgYXQKKwkgKiBkaWZmZXJlbnQgYml0IHBvc2l0aW9ucyBpbiB0aGUgdHdvIGZvcm1hdHMuCisJICovCisJcmVxX3Byb3QgPSBwZ3Byb3RfNGtfMl9sYXJnZShyZXFfcHJvdCk7CisKKwkvKgogCSAqIFNldCB0aGUgUFNFIGFuZCBHTE9CQUwgZmxhZ3Mgb25seSBpZiB0aGUgUFJFU0VOVCBmbGFnIGlzCiAJICogc2V0IG90aGVyd2lzZSBwbWRfcHJlc2VudC9wbWRfaHVnZSB3aWxsIHJldHVybiB0cnVlIGV2ZW4gb24KIAkgKiBhIG5vbiBwcmVzZW50IHBtZC4gVGhlIGNhbm9uX3BncHJvdCB3aWxsIGNsZWFyIF9QQUdFX0dMT0JBTApAQCAtNTg1LDEzICs1OTQsMTAgQEAKIAogCXBhcmF2aXJ0X2FsbG9jX3B0ZSgmaW5pdF9tbSwgcGFnZV90b19wZm4oYmFzZSkpOwogCXJlZl9wcm90ID0gcHRlX3BncHJvdChwdGVfY2xyaHVnZSgqa3B0ZSkpOwotCS8qCi0JICogSWYgd2UgZXZlciB3YW50IHRvIHV0aWxpemUgdGhlIFBBVCBiaXQsIHdlIG5lZWQgdG8KLQkgKiB1cGRhdGUgdGhpcyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgaXQncyBjb252ZXJ0ZWQgZnJvbQotCSAqIGJpdCAxMiB0byBiaXQgNyB3aGVuIHdlIGNyb3NzIGZyb20gdGhlIDJNQiBsZXZlbCB0bwotCSAqIHRoZSA0SyBsZXZlbDoKLQkgKi8KLQlXQVJOX09OX09OQ0UocGdwcm90X3ZhbChyZWZfcHJvdCkgJiBfUEFHRV9QQVRfTEFSR0UpOworCisJLyogcHJvbW90ZSBQQVQgYml0IHRvIGNvcnJlY3QgcG9zaXRpb24gKi8KKwlpZiAobGV2ZWwgPT0gUEdfTEVWRUxfMk0pCisJCXJlZl9wcm90ID0gcGdwcm90X2xhcmdlXzJfNGsocmVmX3Byb3QpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWlmIChsZXZlbCA9PSBQR19MRVZFTF8xRykgewpAQCAtODc5LDYgKzg4NSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGN1cl9wYWdlcyA9IDA7CiAJcG1kX3QgKnBtZDsKKwlwZ3Byb3RfdCBwbWRfcGdwcm90OwogCiAJLyoKIAkgKiBOb3Qgb24gYSAyTSBib3VuZGFyeT8KQEAgLTkxMCw2ICs5MTcsOCBAQAogCWlmIChudW1fcGFnZXMgPT0gY3VyX3BhZ2VzKQogCQlyZXR1cm4gY3VyX3BhZ2VzOwogCisJcG1kX3BncHJvdCA9IHBncHJvdF80a18yX2xhcmdlKHBncHJvdCk7CisKIAl3aGlsZSAoZW5kIC0gc3RhcnQgPj0gUE1EX1NJWkUpIHsKIAogCQkvKgpAQCAtOTIxLDcgKzkzMCw4IEBACiAKIAkJcG1kID0gcG1kX29mZnNldChwdWQsIHN0YXJ0KTsKIAotCQlzZXRfcG1kKHBtZCwgX19wbWQoY3BhLT5wZm4gfCBfUEFHRV9QU0UgfCBtYXNzYWdlX3BncHJvdChwZ3Byb3QpKSk7CisJCXNldF9wbWQocG1kLCBfX3BtZChjcGEtPnBmbiB8IF9QQUdFX1BTRSB8CisJCQkJICAgbWFzc2FnZV9wZ3Byb3QocG1kX3BncHJvdCkpKTsKIAogCQlzdGFydAkgICs9IFBNRF9TSVpFOwogCQljcGEtPnBmbiAgKz0gUE1EX1NJWkU7CkBAIC05NDksNiArOTU5LDcgQEAKIAlwdWRfdCAqcHVkOwogCXVuc2lnbmVkIGxvbmcgZW5kOwogCWludCBjdXJfcGFnZXMgPSAwOworCXBncHJvdF90IHB1ZF9wZ3Byb3Q7CiAKIAllbmQgPSBzdGFydCArIChjcGEtPm51bXBhZ2VzIDw8IFBBR0VfU0hJRlQpOwogCkBAIC05ODYsMTIgKzk5NywxNCBAQAogCQlyZXR1cm4gY3VyX3BhZ2VzOwogCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIHN0YXJ0KTsKKwlwdWRfcGdwcm90ID0gcGdwcm90XzRrXzJfbGFyZ2UocGdwcm90KTsKIAogCS8qCiAJICogTWFwIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUgR2IgYm91bmRhcnksIHBvc3NpYmx5IHdpdGggMUcgcGFnZXMKIAkgKi8KIAl3aGlsZSAoZW5kIC0gc3RhcnQgPj0gUFVEX1NJWkUpIHsKLQkJc2V0X3B1ZChwdWQsIF9fcHVkKGNwYS0+cGZuIHwgX1BBR0VfUFNFIHwgbWFzc2FnZV9wZ3Byb3QocGdwcm90KSkpOworCQlzZXRfcHVkKHB1ZCwgX19wdWQoY3BhLT5wZm4gfCBfUEFHRV9QU0UgfAorCQkJCSAgIG1hc3NhZ2VfcGdwcm90KHB1ZF9wZ3Byb3QpKSk7CiAKIAkJc3RhcnQJICArPSBQVURfU0laRTsKIAkJY3BhLT5wZm4gICs9IFBVRF9TSVpFOwpAQCAtMTMwNCwxMiArMTMxNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNhY2hlX2F0dHIocGdwcm90X3QgYXR0cikKLXsKLQlyZXR1cm4gcGdwcm90X3ZhbChhdHRyKSAmCi0JCShfUEFHRV9QQVQgfCBfUEFHRV9QQVRfTEFSR0UgfCBfUEFHRV9QV1QgfCBfUEFHRV9QQ0QpOwotfQotCiBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsCiAJCQkJICAgIHBncHJvdF90IG1hc2tfc2V0LCBwZ3Byb3RfdCBtYXNrX2NsciwKIAkJCQkgICAgaW50IGZvcmNlX3NwbGl0LCBpbnQgaW5fZmxhZywKQEAgLTEzOTAsNyArMTM5Nyw3IEBACiAJICogTm8gbmVlZCB0byBmbHVzaCwgd2hlbiB3ZSBkaWQgbm90IHNldCBhbnkgb2YgdGhlIGNhY2hpbmcKIAkgKiBhdHRyaWJ1dGVzOgogCSAqLwotCWNhY2hlID0gY2FjaGVfYXR0cihtYXNrX3NldCk7CisJY2FjaGUgPSAhIXBncHJvdDJjYWNoZW1vZGUobWFza19zZXQpOwogCiAJLyoKIAkgKiBPbiBzdWNjZXNzIHdlIHVzZSBDTEZMVVNILCB3aGVuIHRoZSBDUFUgc3VwcG9ydHMgaXQgdG8KQEAgLTE0NDUsNyArMTQ1Miw4IEBACiAJICogZm9yIG5vdyBVQyBNSU5VUy4gc2VlIGNvbW1lbnRzIGluIGlvcmVtYXBfbm9jYWNoZSgpCiAJICovCiAJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0KCZhZGRyLCBudW1wYWdlcywKLQkJCQkgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfVUNfTUlOVVMpLCAwKTsKKwkJCQkgICAgY2FjaGVtb2RlMnBncHJvdChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKSwKKwkJCQkgICAgMCk7CiB9CiAKIGludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKQpAQCAtMTQ1Niw3ICsxNDY0LDcgQEAKIAkgKiBmb3Igbm93IFVDIE1JTlVTLiBzZWUgY29tbWVudHMgaW4gaW9yZW1hcF9ub2NhY2hlKCkKIAkgKi8KIAlyZXQgPSByZXNlcnZlX21lbXR5cGUoX19wYShhZGRyKSwgX19wYShhZGRyKSArIG51bXBhZ2VzICogUEFHRV9TSVpFLAotCQkJICAgIF9QQUdFX0NBQ0hFX1VDX01JTlVTLCBOVUxMKTsKKwkJCSAgICAgIF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMsIE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtMTQ3NCw3ICsxNDgyLDcgQEAKIEVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV91Yyk7CiAKIHN0YXRpYyBpbnQgX3NldF9tZW1vcnlfYXJyYXkodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IGFkZHJpbmFycmF5LAotCQl1bnNpZ25lZCBsb25nIG5ld190eXBlKQorCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSBuZXdfdHlwZSkKIHsKIAlpbnQgaSwgajsKIAlpbnQgcmV0OwpAQCAtMTQ5MCwxMSArMTQ5OCwxMyBAQAogCX0KIAogCXJldCA9IGNoYW5nZV9wYWdlX2F0dHJfc2V0KGFkZHIsIGFkZHJpbmFycmF5LAotCQkJCSAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9VQ19NSU5VUyksIDEpOworCQkJCSAgIGNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyksCisJCQkJICAgMSk7CiAKLQlpZiAoIXJldCAmJiBuZXdfdHlwZSA9PSBfUEFHRV9DQUNIRV9XQykKKwlpZiAoIXJldCAmJiBuZXdfdHlwZSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dDKQogCQlyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoYWRkciwgYWRkcmluYXJyYXksCi0JCQkJCSAgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9XQyksCisJCQkJCSAgICAgICBjYWNoZW1vZGUycGdwcm90KAorCQkJCQkJX1BBR0VfQ0FDSEVfTU9ERV9XQyksCiAJCQkJCSAgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSwKIAkJCQkJICAgICAgIDAsIENQQV9BUlJBWSwgTlVMTCk7CiAJaWYgKHJldCkKQEAgLTE1MTEsMTMgKzE1MjEsMTMgQEAKIAogaW50IHNldF9tZW1vcnlfYXJyYXlfdWModW5zaWduZWQgbG9uZyAqYWRkciwgaW50IGFkZHJpbmFycmF5KQogewotCXJldHVybiBfc2V0X21lbW9yeV9hcnJheShhZGRyLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfVUNfTUlOVVMpOworCXJldHVybiBfc2V0X21lbW9yeV9hcnJheShhZGRyLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfYXJyYXlfdWMpOwogCiBpbnQgc2V0X21lbW9yeV9hcnJheV93Yyh1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgYWRkcmluYXJyYXkpCiB7Ci0JcmV0dXJuIF9zZXRfbWVtb3J5X2FycmF5KGFkZHIsIGFkZHJpbmFycmF5LCBfUEFHRV9DQUNIRV9XQyk7CisJcmV0dXJuIF9zZXRfbWVtb3J5X2FycmF5KGFkZHIsIGFkZHJpbmFycmF5LCBfUEFHRV9DQUNIRV9NT0RFX1dDKTsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV9hcnJheV93Yyk7CiAKQEAgLTE1MjcsMTAgKzE1MzcsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHJfY29weSA9IGFkZHI7CiAKIAlyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldCgmYWRkciwgbnVtcGFnZXMsCi0JCQkJICAgIF9fcGdwcm90KF9QQUdFX0NBQ0hFX1VDX01JTlVTKSwgMCk7CisJCQkJICAgY2FjaGVtb2RlMnBncHJvdChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKSwKKwkJCQkgICAwKTsKIAlpZiAoIXJldCkgewogCQlyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoJmFkZHJfY29weSwgbnVtcGFnZXMsCi0JCQkJCSAgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9XQyksCisJCQkJCSAgICAgICBjYWNoZW1vZGUycGdwcm90KAorCQkJCQkJX1BBR0VfQ0FDSEVfTU9ERV9XQyksCiAJCQkJCSAgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSwKIAkJCQkJICAgICAgIDAsIDAsIE5VTEwpOwogCX0KQEAgLTE1NDUsNyArMTU1Nyw3IEBACiAJCXJldHVybiBzZXRfbWVtb3J5X3VjKGFkZHIsIG51bXBhZ2VzKTsKIAogCXJldCA9IHJlc2VydmVfbWVtdHlwZShfX3BhKGFkZHIpLCBfX3BhKGFkZHIpICsgbnVtcGFnZXMgKiBQQUdFX1NJWkUsCi0JCV9QQUdFX0NBQ0hFX1dDLCBOVUxMKTsKKwkJX1BBR0VfQ0FDSEVfTU9ERV9XQywgTlVMTCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZXJyOwogCkBAIC0xNTY0LDYgKzE1NzYsNyBAQAogCiBpbnQgX3NldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpCiB7CisJLyogV0IgY2FjaGUgbW9kZSBpcyBoYXJkIHdpcmVkIHRvIGFsbCBjYWNoZSBhdHRyaWJ1dGUgYml0cyBiZWluZyAwICovCiAJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfY2xlYXIoJmFkZHIsIG51bXBhZ2VzLAogCQkJCSAgICAgIF9fcGdwcm90KF9QQUdFX0NBQ0hFX01BU0spLCAwKTsKIH0KQEAgLTE1ODYsNiArMTU5OSw3IEBACiAJaW50IGk7CiAJaW50IHJldDsKIAorCS8qIFdCIGNhY2hlIG1vZGUgaXMgaGFyZCB3aXJlZCB0byBhbGwgY2FjaGUgYXR0cmlidXRlIGJpdHMgYmVpbmcgMCAqLwogCXJldCA9IGNoYW5nZV9wYWdlX2F0dHJfY2xlYXIoYWRkciwgYWRkcmluYXJyYXksCiAJCQkJICAgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfTUFTSyksIDEpOwogCWlmIChyZXQpCkBAIC0xNjQ4LDcgKzE2NjIsNyBAQAogRVhQT1JUX1NZTUJPTChzZXRfcGFnZXNfdWMpOwogCiBzdGF0aWMgaW50IF9zZXRfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5LAotCQl1bnNpZ25lZCBsb25nIG5ld190eXBlKQorCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSBuZXdfdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZW5kOwpAQCAtMTY2NiwxMCArMTY4MCwxMSBAQAogCX0KIAogCXJldCA9IGNwYV9zZXRfcGFnZXNfYXJyYXkocGFnZXMsIGFkZHJpbmFycmF5LAotCQkJX19wZ3Byb3QoX1BBR0VfQ0FDSEVfVUNfTUlOVVMpKTsKLQlpZiAoIXJldCAmJiBuZXdfdHlwZSA9PSBfUEFHRV9DQUNIRV9XQykKKwkJCWNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUykpOworCWlmICghcmV0ICYmIG5ld190eXBlID09IF9QQUdFX0NBQ0hFX01PREVfV0MpCiAJCXJldCA9IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBhZGRyaW5hcnJheSwKLQkJCQkJICAgICAgIF9fcGdwcm90KF9QQUdFX0NBQ0hFX1dDKSwKKwkJCQkJICAgICAgIGNhY2hlbW9kZTJwZ3Byb3QoCisJCQkJCQlfUEFHRV9DQUNIRV9NT0RFX1dDKSwKIAkJCQkJICAgICAgIF9fcGdwcm90KF9QQUdFX0NBQ0hFX01BU0spLAogCQkJCQkgICAgICAgMCwgQ1BBX1BBR0VTX0FSUkFZLCBwYWdlcyk7CiAJaWYgKHJldCkKQEAgLTE2ODksMTMgKzE3MDQsMTMgQEAKIAogaW50IHNldF9wYWdlc19hcnJheV91YyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgYWRkcmluYXJyYXkpCiB7Ci0JcmV0dXJuIF9zZXRfcGFnZXNfYXJyYXkocGFnZXMsIGFkZHJpbmFycmF5LCBfUEFHRV9DQUNIRV9VQ19NSU5VUyk7CisJcmV0dXJuIF9zZXRfcGFnZXNfYXJyYXkocGFnZXMsIGFkZHJpbmFycmF5LCBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKTsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3VjKTsKIAogaW50IHNldF9wYWdlc19hcnJheV93YyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgYWRkcmluYXJyYXkpCiB7Ci0JcmV0dXJuIF9zZXRfcGFnZXNfYXJyYXkocGFnZXMsIGFkZHJpbmFycmF5LCBfUEFHRV9DQUNIRV9XQyk7CisJcmV0dXJuIF9zZXRfcGFnZXNfYXJyYXkocGFnZXMsIGFkZHJpbmFycmF5LCBfUEFHRV9DQUNIRV9NT0RFX1dDKTsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3djKTsKIApAQCAtMTcxNCw2ICsxNzI5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAlpbnQgaTsKIAorCS8qIFdCIGNhY2hlIG1vZGUgaXMgaGFyZCB3aXJlZCB0byBhbGwgY2FjaGUgYXR0cmlidXRlIGJpdHMgYmVpbmcgMCAqLwogCXJldHZhbCA9IGNwYV9jbGVhcl9wYWdlc19hcnJheShwYWdlcywgYWRkcmluYXJyYXksCiAJCQlfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSk7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC5jIGIvYXJjaC94ODYvbW0vcGF0LmMKaW5kZXggNjU3NDM4OC4uZWRmMjk5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0LmMKKysrIGIvYXJjaC94ODYvbW0vcGF0LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgInBhdF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgIm1tX2ludGVybmFsLmgiCiAKICNpZmRlZiBDT05GSUdfWDg2X1BBVAogaW50IF9fcmVhZF9tb3N0bHkgcGF0X2VuYWJsZWQgPSAxOwpAQCAtNjYsNiArNjcsNzUgQEAKIAogc3RhdGljIHU2NCBfX3JlYWRfbW9zdGx5IGJvb3RfcGF0X3N0YXRlOwogCisjaWZkZWYgQ09ORklHX1g4Nl9QQVQKKy8qCisgKiBYODYgUEFUIHVzZXMgcGFnZSBmbGFncyBXQyBhbmQgVW5jYWNoZWQgdG9nZXRoZXIgdG8ga2VlcCB0cmFjayBvZgorICogbWVtb3J5IHR5cGUgb2YgcGFnZXMgdGhhdCBoYXZlIGJhY2tpbmcgcGFnZSBzdHJ1Y3QuIFg4NiBQQVQgc3VwcG9ydHMgMworICogZGlmZmVyZW50IG1lbW9yeSB0eXBlcywgX1BBR0VfQ0FDSEVfTU9ERV9XQiwgX1BBR0VfQ0FDSEVfTU9ERV9XQyBhbmQKKyAqIF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMgYW5kIGZvdXJ0aCBzdGF0ZSB3aGVyZSBwYWdlJ3MgbWVtb3J5IHR5cGUgaGFzIG5vdAorICogYmVlbiBjaGFuZ2VkIGZyb20gaXRzIGRlZmF1bHQgKHZhbHVlIG9mIC0xIHVzZWQgdG8gZGVub3RlIHRoaXMpLgorICogTm90ZSB3ZSBkbyBub3Qgc3VwcG9ydCBfUEFHRV9DQUNIRV9NT0RFX1VDIGhlcmUuCisgKi8KKworI2RlZmluZSBfUEdNVF9ERUZBVUxUCQkwCisjZGVmaW5lIF9QR01UX1dDCQkoMVVMIDw8IFBHX2FyY2hfMSkKKyNkZWZpbmUgX1BHTVRfVUNfTUlOVVMJCSgxVUwgPDwgUEdfdW5jYWNoZWQpCisjZGVmaW5lIF9QR01UX1dCCQkoMVVMIDw8IFBHX3VuY2FjaGVkIHwgMVVMIDw8IFBHX2FyY2hfMSkKKyNkZWZpbmUgX1BHTVRfTUFTSwkJKDFVTCA8PCBQR191bmNhY2hlZCB8IDFVTCA8PCBQR19hcmNoXzEpCisjZGVmaW5lIF9QR01UX0NMRUFSX01BU0sJKH5fUEdNVF9NQVNLKQorCitzdGF0aWMgaW5saW5lIGVudW0gcGFnZV9jYWNoZV9tb2RlIGdldF9wYWdlX21lbXR5cGUoc3RydWN0IHBhZ2UgKnBnKQoreworCXVuc2lnbmVkIGxvbmcgcGdfZmxhZ3MgPSBwZy0+ZmxhZ3MgJiBfUEdNVF9NQVNLOworCisJaWYgKHBnX2ZsYWdzID09IF9QR01UX0RFRkFVTFQpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChwZ19mbGFncyA9PSBfUEdNVF9XQykKKwkJcmV0dXJuIF9QQUdFX0NBQ0hFX01PREVfV0M7CisJZWxzZSBpZiAocGdfZmxhZ3MgPT0gX1BHTVRfVUNfTUlOVVMpCisJCXJldHVybiBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOworCWVsc2UKKwkJcmV0dXJuIF9QQUdFX0NBQ0hFX01PREVfV0I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZywKKwkJCQkgICAgZW51bSBwYWdlX2NhY2hlX21vZGUgbWVtdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1lbXR5cGVfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBvbGRfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3M7CisKKwlzd2l0Y2ggKG1lbXR5cGUpIHsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfV0M6CisJCW1lbXR5cGVfZmxhZ3MgPSBfUEdNVF9XQzsKKwkJYnJlYWs7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOgorCQltZW10eXBlX2ZsYWdzID0gX1BHTVRfVUNfTUlOVVM7CisJCWJyZWFrOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQjoKKwkJbWVtdHlwZV9mbGFncyA9IF9QR01UX1dCOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltZW10eXBlX2ZsYWdzID0gX1BHTVRfREVGQVVMVDsKKwkJYnJlYWs7CisJfQorCisJZG8geworCQlvbGRfZmxhZ3MgPSBwZy0+ZmxhZ3M7CisJCW5ld19mbGFncyA9IChvbGRfZmxhZ3MgJiBfUEdNVF9DTEVBUl9NQVNLKSB8IG1lbXR5cGVfZmxhZ3M7CisJfSB3aGlsZSAoY21weGNoZygmcGctPmZsYWdzLCBvbGRfZmxhZ3MsIG5ld19mbGFncykgIT0gb2xkX2ZsYWdzKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGVudW0gcGFnZV9jYWNoZV9tb2RlIGdldF9wYWdlX21lbXR5cGUoc3RydWN0IHBhZ2UgKnBnKQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZywKKwkJCQkgICAgZW51bSBwYWdlX2NhY2hlX21vZGUgbWVtdHlwZSkKK3sKK30KKyNlbmRpZgorCiBlbnVtIHsKIAlQQVRfVUMgPSAwLAkJLyogdW5jYWNoZWQgKi8KIAlQQVRfV0MgPSAxLAkJLyogV3JpdGUgY29tYmluaW5nICovCkBAIC03NSw2ICsxNDUsNTIgQEAKIAlQQVRfVUNfTUlOVVMgPSA3LAkvKiBVQywgYnV0IGNhbiBiZSBvdmVycmlkZW4gYnkgTVRSUiAqLwogfTsKIAorI2RlZmluZSBDTShjKSAoX1BBR0VfQ0FDSEVfTU9ERV8gIyMgYykKKworc3RhdGljIGVudW0gcGFnZV9jYWNoZV9tb2RlIHBhdF9nZXRfY2FjaGVfbW9kZSh1bnNpZ25lZCBwYXRfdmFsLCBjaGFyICptc2cpCit7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgY2FjaGU7CisJY2hhciAqY2FjaGVfbW9kZTsKKworCXN3aXRjaCAocGF0X3ZhbCkgeworCWNhc2UgUEFUX1VDOiAgICAgICBjYWNoZSA9IENNKFVDKTsgICAgICAgY2FjaGVfbW9kZSA9ICJVQyAgIjsgYnJlYWs7CisJY2FzZSBQQVRfV0M6ICAgICAgIGNhY2hlID0gQ00oV0MpOyAgICAgICBjYWNoZV9tb2RlID0gIldDICAiOyBicmVhazsKKwljYXNlIFBBVF9XVDogICAgICAgY2FjaGUgPSBDTShXVCk7ICAgICAgIGNhY2hlX21vZGUgPSAiV1QgICI7IGJyZWFrOworCWNhc2UgUEFUX1dQOiAgICAgICBjYWNoZSA9IENNKFdQKTsgICAgICAgY2FjaGVfbW9kZSA9ICJXUCAgIjsgYnJlYWs7CisJY2FzZSBQQVRfV0I6ICAgICAgIGNhY2hlID0gQ00oV0IpOyAgICAgICBjYWNoZV9tb2RlID0gIldCICAiOyBicmVhazsKKwljYXNlIFBBVF9VQ19NSU5VUzogY2FjaGUgPSBDTShVQ19NSU5VUyk7IGNhY2hlX21vZGUgPSAiVUMtICI7IGJyZWFrOworCWRlZmF1bHQ6ICAgICAgICAgICBjYWNoZSA9IENNKFdCKTsgICAgICAgY2FjaGVfbW9kZSA9ICJXQiAgIjsgYnJlYWs7CisJfQorCisJbWVtY3B5KG1zZywgY2FjaGVfbW9kZSwgNCk7CisKKwlyZXR1cm4gY2FjaGU7Cit9CisKKyN1bmRlZiBDTQorCisvKgorICogVXBkYXRlIHRoZSBjYWNoZSBtb2RlIHRvIHBncHJvdCB0cmFuc2xhdGlvbiB0YWJsZXMgYWNjb3JkaW5nIHRvIFBBVAorICogY29uZmlndXJhdGlvbi4KKyAqIFVzaW5nIGxvd2VyIGluZGljZXMgaXMgcHJlZmVycmVkLCBzbyB3ZSBzdGFydCB3aXRoIGhpZ2hlc3QgaW5kZXguCisgKi8KK3ZvaWQgcGF0X2luaXRfY2FjaGVfbW9kZXModm9pZCkKK3sKKwlpbnQgaTsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBjYWNoZTsKKwljaGFyIHBhdF9tc2dbMzNdOworCXU2NCBwYXQ7CisKKwlyZG1zcmwoTVNSX0lBMzJfQ1JfUEFULCBwYXQpOworCXBhdF9tc2dbMzJdID0gMDsKKwlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQljYWNoZSA9IHBhdF9nZXRfY2FjaGVfbW9kZSgocGF0ID4+IChpICogOCkpICYgNywKKwkJCQkJICAgcGF0X21zZyArIDQgKiBpKTsKKwkJdXBkYXRlX2NhY2hlX21vZGVfZW50cnkoaSwgY2FjaGUpOworCX0KKwlwcl9pbmZvKCJQQVQgY29uZmlndXJhdGlvbiBbMC03XTogJXNcbiIsIHBhdF9tc2cpOworfQorCiAjZGVmaW5lIFBBVCh4LCB5KQkoKHU2NClQQVRfICMjIHkgPDwgKCh4KSo4KSkKIAogdm9pZCBwYXRfaW5pdCh2b2lkKQpAQCAtMTI0LDggKzI0MCw3IEBACiAJd3Jtc3JsKE1TUl9JQTMyX0NSX1BBVCwgcGF0KTsKIAogCWlmIChib290X2NwdSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAieDg2IFBBVCBlbmFibGVkOiBjcHUgJWQsIG9sZCAweCVMeCwgbmV3IDB4JUx4XG4iLAotCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBib290X3BhdF9zdGF0ZSwgcGF0KTsKKwkJcGF0X2luaXRfY2FjaGVfbW9kZXMoKTsKIH0KIAogI3VuZGVmIFBBVApAQCAtMTM5LDIwICsyNTQsMjEgQEAKICAqIFRoZSBpbnRlcnNlY3Rpb24gaXMgYmFzZWQgb24gIkVmZmVjdGl2ZSBNZW1vcnkgVHlwZSIgdGFibGVzIGluIElBLTMyCiAgKiBTRE0gdm9sIDNhCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhdF94X210cnJfdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQsIHVuc2lnbmVkIGxvbmcgcmVxX3R5cGUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYXRfeF9tdHJyX3R5cGUodTY0IHN0YXJ0LCB1NjQgZW5kLAorCQkJCSAgICAgZW51bSBwYWdlX2NhY2hlX21vZGUgcmVxX3R5cGUpCiB7CiAJLyoKIAkgKiBMb29rIGZvciBNVFJSIGhpbnQgdG8gZ2V0IHRoZSBlZmZlY3RpdmUgdHlwZSBpbiBjYXNlIHdoZXJlIFBBVAogCSAqIHJlcXVlc3QgaXMgZm9yIFdCLgogCSAqLwotCWlmIChyZXFfdHlwZSA9PSBfUEFHRV9DQUNIRV9XQikgeworCWlmIChyZXFfdHlwZSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dCKSB7CiAJCXU4IG10cnJfdHlwZTsKIAogCQltdHJyX3R5cGUgPSBtdHJyX3R5cGVfbG9va3VwKHN0YXJ0LCBlbmQpOwogCQlpZiAobXRycl90eXBlICE9IE1UUlJfVFlQRV9XUkJBQ0spCi0JCQlyZXR1cm4gX1BBR0VfQ0FDSEVfVUNfTUlOVVM7CisJCQlyZXR1cm4gX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzsKIAotCQlyZXR1cm4gX1BBR0VfQ0FDSEVfV0I7CisJCXJldHVybiBfUEFHRV9DQUNIRV9NT0RFX1dCOwogCX0KIAogCXJldHVybiByZXFfdHlwZTsKQEAgLTIwNywyNSArMzIzLDI2IEBACiAgKiAtIEZpbmQgdGhlIG1lbXR5cGUgb2YgYWxsIHRoZSBwYWdlcyBpbiB0aGUgcmFuZ2UsIGxvb2sgZm9yIGFueSBjb25mbGljdHMKICAqIC0gSW4gY2FzZSBvZiBubyBjb25mbGljdHMsIHNldCB0aGUgbmV3IG1lbXR5cGUgZm9yIHBhZ2VzIGluIHRoZSByYW5nZQogICovCi1zdGF0aWMgaW50IHJlc2VydmVfcmFtX3BhZ2VzX3R5cGUodTY0IHN0YXJ0LCB1NjQgZW5kLCB1bnNpZ25lZCBsb25nIHJlcV90eXBlLAotCQkJCSAgdW5zaWduZWQgbG9uZyAqbmV3X3R5cGUpCitzdGF0aWMgaW50IHJlc2VydmVfcmFtX3BhZ2VzX3R5cGUodTY0IHN0YXJ0LCB1NjQgZW5kLAorCQkJCSAgZW51bSBwYWdlX2NhY2hlX21vZGUgcmVxX3R5cGUsCisJCQkJICBlbnVtIHBhZ2VfY2FjaGVfbW9kZSAqbmV3X3R5cGUpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdTY0IHBmbjsKIAotCWlmIChyZXFfdHlwZSA9PSBfUEFHRV9DQUNIRV9VQykgeworCWlmIChyZXFfdHlwZSA9PSBfUEFHRV9DQUNIRV9NT0RFX1VDKSB7CiAJCS8qIFdlIGRvIG5vdCBzdXBwb3J0IHN0cm9uZyBVQyAqLwogCQlXQVJOX09OX09OQ0UoMSk7Ci0JCXJlcV90eXBlID0gX1BBR0VfQ0FDSEVfVUNfTUlOVVM7CisJCXJlcV90eXBlID0gX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzsKIAl9CiAKIAlmb3IgKHBmbiA9IChzdGFydCA+PiBQQUdFX1NISUZUKTsgcGZuIDwgKGVuZCA+PiBQQUdFX1NISUZUKTsgKytwZm4pIHsKLQkJdW5zaWduZWQgbG9uZyB0eXBlOworCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSB0eXBlOwogCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCQl0eXBlID0gZ2V0X3BhZ2VfbWVtdHlwZShwYWdlKTsKIAkJaWYgKHR5cGUgIT0gLTEpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gInJlc2VydmVfcmFtX3BhZ2VzX3R5cGUgZmFpbGVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XSwgdHJhY2sgMHglbHgsIHJlcSAweCVseFxuIiwKKwkJCXByX2luZm8oInJlc2VydmVfcmFtX3BhZ2VzX3R5cGUgZmFpbGVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XSwgdHJhY2sgMHgleCwgcmVxIDB4JXhcbiIsCiAJCQkJc3RhcnQsIGVuZCAtIDEsIHR5cGUsIHJlcV90eXBlKTsKIAkJCWlmIChuZXdfdHlwZSkKIAkJCQkqbmV3X3R5cGUgPSB0eXBlOwpAQCAtMjU4LDIxICszNzUsMjEgQEAKIAogLyoKICAqIHJlcV90eXBlIHR5cGljYWxseSBoYXMgb25lIG9mIHRoZToKLSAqIC0gX1BBR0VfQ0FDSEVfV0IKLSAqIC0gX1BBR0VfQ0FDSEVfV0MKLSAqIC0gX1BBR0VfQ0FDSEVfVUNfTUlOVVMKLSAqIC0gX1BBR0VfQ0FDSEVfVUMKKyAqIC0gX1BBR0VfQ0FDSEVfTU9ERV9XQgorICogLSBfUEFHRV9DQUNIRV9NT0RFX1dDCisgKiAtIF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMKKyAqIC0gX1BBR0VfQ0FDSEVfTU9ERV9VQwogICoKICAqIElmIG5ld190eXBlIGlzIE5VTEwsIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIGl0IGNhbm5vdCByZXNlcnZlIHRoZQogICogcmVnaW9uIHdpdGggcmVxX3R5cGUuIElmIG5ld190eXBlIGlzIG5vbi1OVUxMLCBmdW5jdGlvbiB3aWxsIHJldHVybgogICogYXZhaWxhYmxlIHR5cGUgaW4gbmV3X3R5cGUgaW4gY2FzZSBvZiBubyBlcnJvci4gSW4gY2FzZSBvZiBhbnkgZXJyb3IKICAqIGl0IHdpbGwgcmV0dXJuIGEgbmVnYXRpdmUgcmV0dXJuIHZhbHVlLgogICovCi1pbnQgcmVzZXJ2ZV9tZW10eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwgdW5zaWduZWQgbG9uZyByZXFfdHlwZSwKLQkJICAgIHVuc2lnbmVkIGxvbmcgKm5ld190eXBlKQoraW50IHJlc2VydmVfbWVtdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQsIGVudW0gcGFnZV9jYWNoZV9tb2RlIHJlcV90eXBlLAorCQkgICAgZW51bSBwYWdlX2NhY2hlX21vZGUgKm5ld190eXBlKQogewogCXN0cnVjdCBtZW10eXBlICpuZXc7Ci0JdW5zaWduZWQgbG9uZyBhY3R1YWxfdHlwZTsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBhY3R1YWxfdHlwZTsKIAlpbnQgaXNfcmFuZ2VfcmFtOwogCWludCBlcnIgPSAwOwogCkBAIC0yODEsMTAgKzM5OCwxMCBAQAogCWlmICghcGF0X2VuYWJsZWQpIHsKIAkJLyogVGhpcyBpcyBpZGVudGljYWwgdG8gcGFnZSB0YWJsZSBzZXR0aW5nIHdpdGhvdXQgUEFUICovCiAJCWlmIChuZXdfdHlwZSkgewotCQkJaWYgKHJlcV90eXBlID09IF9QQUdFX0NBQ0hFX1dDKQotCQkJCSpuZXdfdHlwZSA9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCQkJaWYgKHJlcV90eXBlID09IF9QQUdFX0NBQ0hFX01PREVfV0MpCisJCQkJKm5ld190eXBlID0gX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzsKIAkJCWVsc2UKLQkJCQkqbmV3X3R5cGUgPSByZXFfdHlwZSAmIF9QQUdFX0NBQ0hFX01BU0s7CisJCQkJKm5ld190eXBlID0gcmVxX3R5cGU7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjkyLDcgKzQwOSw3IEBACiAJLyogTG93IElTQSByZWdpb24gaXMgYWx3YXlzIG1hcHBlZCBXQiBpbiBwYWdlIHRhYmxlLiBObyBuZWVkIHRvIHRyYWNrICovCiAJaWYgKHg4Nl9wbGF0Zm9ybS5pc191bnRyYWNrZWRfcGF0X3JhbmdlKHN0YXJ0LCBlbmQpKSB7CiAJCWlmIChuZXdfdHlwZSkKLQkJCSpuZXdfdHlwZSA9IF9QQUdFX0NBQ0hFX1dCOworCQkJKm5ld190eXBlID0gX1BBR0VfQ0FDSEVfTU9ERV9XQjsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMDIsNyArNDE5LDcgQEAKIAkgKiB0b29scyBhbmQgQUNQSSB0b29scykuIFVzZSBXQiByZXF1ZXN0IGZvciBXQiBtZW1vcnkgYW5kIHVzZQogCSAqIFVDX01JTlVTIG90aGVyd2lzZS4KIAkgKi8KLQlhY3R1YWxfdHlwZSA9IHBhdF94X210cnJfdHlwZShzdGFydCwgZW5kLCByZXFfdHlwZSAmIF9QQUdFX0NBQ0hFX01BU0spOworCWFjdHVhbF90eXBlID0gcGF0X3hfbXRycl90eXBlKHN0YXJ0LCBlbmQsIHJlcV90eXBlKTsKIAogCWlmIChuZXdfdHlwZSkKIAkJKm5ld190eXBlID0gYWN0dWFsX3R5cGU7CkBAIC0zOTQsMTIgKzUxMSwxMiBAQAogICoKICAqIE9ubHkgdG8gYmUgY2FsbGVkIHdoZW4gUEFUIGlzIGVuYWJsZWQKICAqCi0gKiBSZXR1cm5zIF9QQUdFX0NBQ0hFX1dCLCBfUEFHRV9DQUNIRV9XQywgX1BBR0VfQ0FDSEVfVUNfTUlOVVMgb3IKLSAqIF9QQUdFX0NBQ0hFX1VDCisgKiBSZXR1cm5zIF9QQUdFX0NBQ0hFX01PREVfV0IsIF9QQUdFX0NBQ0hFX01PREVfV0MsIF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMKKyAqIG9yIF9QQUdFX0NBQ0hFX01PREVfVUMKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9va3VwX21lbXR5cGUodTY0IHBhZGRyKQorc3RhdGljIGVudW0gcGFnZV9jYWNoZV9tb2RlIGxvb2t1cF9tZW10eXBlKHU2NCBwYWRkcikKIHsKLQlpbnQgcmV0dHlwZSA9IF9QQUdFX0NBQ0hFX1dCOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHJldHR5cGUgPSBfUEFHRV9DQUNIRV9NT0RFX1dCOwogCXN0cnVjdCBtZW10eXBlICplbnRyeTsKIAogCWlmICh4ODZfcGxhdGZvcm0uaXNfdW50cmFja2VkX3BhdF9yYW5nZShwYWRkciwgcGFkZHIgKyBQQUdFX1NJWkUpKQpAQCAtNDE0LDcgKzUzMSw3IEBACiAJCSAqIGRlZmF1bHQgc3RhdGUgYW5kIG5vdCByZXNlcnZlZCwgYW5kIGhlbmNlIG9mIHR5cGUgV0IKIAkJICovCiAJCWlmIChyZXR0eXBlID09IC0xKQotCQkJcmV0dHlwZSA9IF9QQUdFX0NBQ0hFX1dCOworCQkJcmV0dHlwZSA9IF9QQUdFX0NBQ0hFX01PREVfV0I7CiAKIAkJcmV0dXJuIHJldHR5cGU7CiAJfQpAQCAtNDI1LDcgKzU0Miw3IEBACiAJaWYgKGVudHJ5ICE9IE5VTEwpCiAJCXJldHR5cGUgPSBlbnRyeS0+dHlwZTsKIAllbHNlCi0JCXJldHR5cGUgPSBfUEFHRV9DQUNIRV9VQ19NSU5VUzsKKwkJcmV0dHlwZSA9IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAKIAlzcGluX3VubG9jaygmbWVtdHlwZV9sb2NrKTsKIAlyZXR1cm4gcmV0dHlwZTsKQEAgLTQ0MiwxMSArNTU5LDExIEBACiAgKiBPbiBmYWlsdXJlLCByZXR1cm5zIG5vbi16ZXJvCiAgKi8KIGludCBpb19yZXNlcnZlX21lbXR5cGUocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kLAotCQkJdW5zaWduZWQgbG9uZyAqdHlwZSkKKwkJCWVudW0gcGFnZV9jYWNoZV9tb2RlICp0eXBlKQogewogCXJlc291cmNlX3NpemVfdCBzaXplID0gZW5kIC0gc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyByZXFfdHlwZSA9ICp0eXBlOwotCXVuc2lnbmVkIGxvbmcgbmV3X3R5cGU7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgcmVxX3R5cGUgPSAqdHlwZTsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBuZXdfdHlwZTsKIAlpbnQgcmV0OwogCiAJV0FSTl9PTl9PTkNFKGlvbWVtX21hcF9zYW5pdHlfY2hlY2soc3RhcnQsIHNpemUpKTsKQEAgLTUyMCwxMyArNjM3LDEzIEBACiBpbnQgcGh5c19tZW1fYWNjZXNzX3Byb3RfYWxsb3dlZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQkJdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCAqdm1hX3Byb3QpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IF9QQUdFX0NBQ0hFX1dCOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSA9IF9QQUdFX0NBQ0hFX01PREVfV0I7CiAKIAlpZiAoIXJhbmdlX2lzX2FsbG93ZWQocGZuLCBzaXplKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fRFNZTkMpCi0JCWZsYWdzID0gX1BBR0VfQ0FDSEVfVUNfTUlOVVM7CisJCXBjbSA9IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLyoKQEAgLTU0MywxMiArNjYwLDEyIEBACiAJICAgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NZUklYX0FSUikgfHwKIAkgICAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0VOVEFVUl9NQ1IpKSAmJgogCSAgICAocGZuIDw8IFBBR0VfU0hJRlQpID49IF9fcGEoaGlnaF9tZW1vcnkpKSB7Ci0JCWZsYWdzID0gX1BBR0VfQ0FDSEVfVUM7CisJCXBjbSA9IF9QQUdFX0NBQ0hFX01PREVfVUM7CiAJfQogI2VuZGlmCiAKIAkqdm1hX3Byb3QgPSBfX3BncHJvdCgocGdwcm90X3ZhbCgqdm1hX3Byb3QpICYgfl9QQUdFX0NBQ0hFX01BU0spIHwKLQkJCSAgICAgZmxhZ3MpOworCQkJICAgICBjYWNoZW1vZGUycHJvdHZhbChwY20pKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNTU2LDcgKzY3Myw4IEBACiAgKiBDaGFuZ2UgdGhlIG1lbW9yeSB0eXBlIGZvciB0aGUgcGh5c2lhbCBhZGRyZXNzIHJhbmdlIGluIGtlcm5lbCBpZGVudGl0eQogICogbWFwcGluZyBzcGFjZSBpZiB0aGF0IHJhbmdlIGlzIGEgcGFydCBvZiBpZGVudGl0eSBtYXAuCiAgKi8KLWludCBrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZSh1NjQgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoraW50IGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHU2NCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtKQogewogCXVuc2lnbmVkIGxvbmcgaWRfc3o7CiAKQEAgLTU3NCwxMSArNjkyLDExIEBACiAJCQkJX19wYShoaWdoX21lbW9yeSkgLSBiYXNlIDoKIAkJCQlzaXplOwogCi0JaWYgKGlvcmVtYXBfY2hhbmdlX2F0dHIoKHVuc2lnbmVkIGxvbmcpX192YShiYXNlKSwgaWRfc3osIGZsYWdzKSA8IDApIHsKKwlpZiAoaW9yZW1hcF9jaGFuZ2VfYXR0cigodW5zaWduZWQgbG9uZylfX3ZhKGJhc2UpLCBpZF9zeiwgcGNtKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JWQgaW9yZW1hcF9jaGFuZ2VfYXR0ciBmYWlsZWQgJXMgIgogCQkJImZvciBbbWVtICUjMDEwTHgtJSMwMTBMeF1cbiIsCiAJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCi0JCQljYXR0cl9uYW1lKGZsYWdzKSwKKwkJCWNhdHRyX25hbWUocGNtKSwKIAkJCWJhc2UsICh1bnNpZ25lZCBsb25nIGxvbmcpKGJhc2UgKyBzaXplLTEpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTk1LDggKzcxMyw4IEBACiB7CiAJaW50IGlzX3JhbSA9IDA7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIHdhbnRfZmxhZ3MgPSAocGdwcm90X3ZhbCgqdm1hX3Byb3QpICYgX1BBR0VfQ0FDSEVfTUFTSyk7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IHdhbnRfZmxhZ3M7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgd2FudF9wY20gPSBwZ3Byb3QyY2FjaGVtb2RlKCp2bWFfcHJvdCk7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtID0gd2FudF9wY207CiAKIAlpc19yYW0gPSBwYXRfcGFnZXJhbmdlX2lzX3JhbShwYWRkciwgcGFkZHIgKyBzaXplKTsKIApAQCAtNjA5LDM2ICs3MjcsMzYgQEAKIAkJaWYgKCFwYXRfZW5hYmxlZCkKIAkJCXJldHVybiAwOwogCi0JCWZsYWdzID0gbG9va3VwX21lbXR5cGUocGFkZHIpOwotCQlpZiAod2FudF9mbGFncyAhPSBmbGFncykgeworCQlwY20gPSBsb29rdXBfbWVtdHlwZShwYWRkcik7CisJCWlmICh3YW50X3BjbSAhPSBwY20pIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiVkIG1hcCBwZm4gUkFNIHJhbmdlIHJlcSAlcyBmb3IgW21lbSAlIzAxMEx4LSUjMDEwTHhdLCBnb3QgJXNcbiIsCiAJCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAotCQkJCWNhdHRyX25hbWUod2FudF9mbGFncyksCisJCQkJY2F0dHJfbmFtZSh3YW50X3BjbSksCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwYWRkciwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKShwYWRkciArIHNpemUgLSAxKSwKLQkJCQljYXR0cl9uYW1lKGZsYWdzKSk7CisJCQkJY2F0dHJfbmFtZShwY20pKTsKIAkJCSp2bWFfcHJvdCA9IF9fcGdwcm90KChwZ3Byb3RfdmFsKCp2bWFfcHJvdCkgJgotCQkJCQkgICAgICAofl9QQUdFX0NBQ0hFX01BU0spKSB8Ci0JCQkJCSAgICAgZmxhZ3MpOworCQkJCQkgICAgICh+X1BBR0VfQ0FDSEVfTUFTSykpIHwKKwkJCQkJICAgICBjYWNoZW1vZGUycHJvdHZhbChwY20pKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXQgPSByZXNlcnZlX21lbXR5cGUocGFkZHIsIHBhZGRyICsgc2l6ZSwgd2FudF9mbGFncywgJmZsYWdzKTsKKwlyZXQgPSByZXNlcnZlX21lbXR5cGUocGFkZHIsIHBhZGRyICsgc2l6ZSwgd2FudF9wY20sICZwY20pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoZmxhZ3MgIT0gd2FudF9mbGFncykgeworCWlmIChwY20gIT0gd2FudF9wY20pIHsKIAkJaWYgKHN0cmljdF9wcm90IHx8Ci0JCSAgICAhaXNfbmV3X21lbXR5cGVfYWxsb3dlZChwYWRkciwgc2l6ZSwgd2FudF9mbGFncywgZmxhZ3MpKSB7CisJCSAgICAhaXNfbmV3X21lbXR5cGVfYWxsb3dlZChwYWRkciwgc2l6ZSwgd2FudF9wY20sIHBjbSkpIHsKIAkJCWZyZWVfbWVtdHlwZShwYWRkciwgcGFkZHIgKyBzaXplKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6JWQgbWFwIHBmbiBleHBlY3RlZCBtYXBwaW5nIHR5cGUgJXMiCiAJCQkJIiBmb3IgW21lbSAlIzAxMEx4LSUjMDEwTHhdLCBnb3QgJXNcbiIsCiAJCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAotCQkJCWNhdHRyX25hbWUod2FudF9mbGFncyksCisJCQkJY2F0dHJfbmFtZSh3YW50X3BjbSksCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwYWRkciwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKShwYWRkciArIHNpemUgLSAxKSwKLQkJCQljYXR0cl9uYW1lKGZsYWdzKSk7CisJCQkJY2F0dHJfbmFtZShwY20pKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8qCkBAIC02NDcsMTAgKzc2NSwxMCBAQAogCQkgKi8KIAkJKnZtYV9wcm90ID0gX19wZ3Byb3QoKHBncHJvdF92YWwoKnZtYV9wcm90KSAmCiAJCQkJICAgICAgKH5fUEFHRV9DQUNIRV9NQVNLKSkgfAotCQkJCSAgICAgZmxhZ3MpOworCQkJCSAgICAgY2FjaGVtb2RlMnByb3R2YWwocGNtKSk7CiAJfQogCi0JaWYgKGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHBhZGRyLCBzaXplLCBmbGFncykgPCAwKSB7CisJaWYgKGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHBhZGRyLCBzaXplLCBwY20pIDwgMCkgewogCQlmcmVlX21lbXR5cGUocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTcwOSw3ICs4MjcsNyBAQAogCQkgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXJlc291cmNlX3NpemVfdCBwYWRkciA9IChyZXNvdXJjZV9zaXplX3QpcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY207CiAKIAkvKiByZXNlcnZlIHRoZSB3aG9sZSBjaHVuayBzdGFydGluZyBmcm9tIHBhZGRyICovCiAJaWYgKGFkZHIgPT0gdm1hLT52bV9zdGFydCAmJiBzaXplID09ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpKSB7CkBAIC03MjgsMTggKzg0NiwxOCBAQAogCSAqIEZvciBhbnl0aGluZyBzbWFsbGVyIHRoYW4gdGhlIHZtYSBzaXplIHdlIHNldCBwcm90IGJhc2VkIG9uIHRoZQogCSAqIGxvb2t1cC4KIAkgKi8KLQlmbGFncyA9IGxvb2t1cF9tZW10eXBlKHBhZGRyKTsKKwlwY20gPSBsb29rdXBfbWVtdHlwZShwYWRkcik7CiAKIAkvKiBDaGVjayBtZW10eXBlIGZvciB0aGUgcmVtYWluaW5nIHBhZ2VzICovCiAJd2hpbGUgKHNpemUgPiBQQUdFX1NJWkUpIHsKIAkJc2l6ZSAtPSBQQUdFX1NJWkU7CiAJCXBhZGRyICs9IFBBR0VfU0laRTsKLQkJaWYgKGZsYWdzICE9IGxvb2t1cF9tZW10eXBlKHBhZGRyKSkKKwkJaWYgKHBjbSAhPSBsb29rdXBfbWVtdHlwZShwYWRkcikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkqcHJvdCA9IF9fcGdwcm90KChwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmICh+X1BBR0VfQ0FDSEVfTUFTSykpIHwKLQkJCSBmbGFncyk7CisJCQkgY2FjaGVtb2RlMnByb3R2YWwocGNtKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc0NywxNSArODY1LDE1IEBACiBpbnQgdHJhY2tfcGZuX2luc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdwcm90X3QgKnByb3QsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBwZm4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY207CiAKIAlpZiAoIXBhdF9lbmFibGVkKQogCQlyZXR1cm4gMDsKIAogCS8qIFNldCBwcm90IGJhc2VkIG9uIGxvb2t1cCAqLwotCWZsYWdzID0gbG9va3VwX21lbXR5cGUoKHJlc291cmNlX3NpemVfdClwZm4gPDwgUEFHRV9TSElGVCk7CisJcGNtID0gbG9va3VwX21lbXR5cGUoKHJlc291cmNlX3NpemVfdClwZm4gPDwgUEFHRV9TSElGVCk7CiAJKnByb3QgPSBfX3BncHJvdCgocGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJiAofl9QQUdFX0NBQ0hFX01BU0spKSB8Ci0JCQkgZmxhZ3MpOworCQkJIGNhY2hlbW9kZTJwcm90dmFsKHBjbSkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03OTEsNyArOTA5LDggQEAKIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCkKIHsKIAlpZiAocGF0X2VuYWJsZWQpCi0JCXJldHVybiBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfQ0FDSEVfV0MpOworCQlyZXR1cm4gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8CisJCQkJY2FjaGVtb2RlMnByb3R2YWwoX1BBR0VfQ0FDSEVfTU9ERV9XQykpOwogCWVsc2UKIAkJcmV0dXJuIHBncHJvdF9ub25jYWNoZWQocHJvdCk7CiB9CkBAIC04MjQsNyArOTQzLDcgQEAKIHsKIAlpZiAoKnBvcyA9PSAwKSB7CiAJCSsrKnBvczsKLQkJc2VxX3ByaW50ZihzZXEsICJQQVQgbWVtdHlwZSBsaXN0OlxuIik7CisJCXNlcV9wdXRzKHNlcSwgIlBBVCBtZW10eXBlIGxpc3Q6XG4iKTsKIAl9CiAKIAlyZXR1cm4gbWVtdHlwZV9nZXRfaWR4KCpwb3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0X2ludGVybmFsLmggYi9hcmNoL3g4Ni9tbS9wYXRfaW50ZXJuYWwuaAppbmRleCA3N2U1YmExLi5mNjQxMTYyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXRfaW50ZXJuYWwuaAorKysgYi9hcmNoL3g4Ni9tbS9wYXRfaW50ZXJuYWwuaApAQCAtMTAsMzAgKzEwLDMyIEBACiAJdTY0CQkJc3RhcnQ7CiAJdTY0CQkJZW5kOwogCXU2NAkJCXN1YnRyZWVfbWF4X2VuZDsKLQl1bnNpZ25lZCBsb25nCQl0eXBlOworCWVudW0gcGFnZV9jYWNoZV9tb2RlCXR5cGU7CiAJc3RydWN0IHJiX25vZGUJCXJiOwogfTsKIAotc3RhdGljIGlubGluZSBjaGFyICpjYXR0cl9uYW1lKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitzdGF0aWMgaW5saW5lIGNoYXIgKmNhdHRyX25hbWUoZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtKQogewotCXN3aXRjaCAoZmxhZ3MgJiBfUEFHRV9DQUNIRV9NQVNLKSB7Ci0JY2FzZSBfUEFHRV9DQUNIRV9VQzoJCXJldHVybiAidW5jYWNoZWQiOwotCWNhc2UgX1BBR0VfQ0FDSEVfVUNfTUlOVVM6CXJldHVybiAidW5jYWNoZWQtbWludXMiOwotCWNhc2UgX1BBR0VfQ0FDSEVfV0I6CQlyZXR1cm4gIndyaXRlLWJhY2siOwotCWNhc2UgX1BBR0VfQ0FDSEVfV0M6CQlyZXR1cm4gIndyaXRlLWNvbWJpbmluZyI7Ci0JZGVmYXVsdDoJCQlyZXR1cm4gImJyb2tlbiI7CisJc3dpdGNoIChwY20pIHsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfVUM6CQlyZXR1cm4gInVuY2FjaGVkIjsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM6CQlyZXR1cm4gInVuY2FjaGVkLW1pbnVzIjsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfV0I6CQlyZXR1cm4gIndyaXRlLWJhY2siOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQzoJCXJldHVybiAid3JpdGUtY29tYmluaW5nIjsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfV1Q6CQlyZXR1cm4gIndyaXRlLXRocm91Z2giOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XUDoJCXJldHVybiAid3JpdGUtcHJvdGVjdGVkIjsKKwlkZWZhdWx0OgkJCQlyZXR1cm4gImJyb2tlbiI7CiAJfQogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQVQKIGV4dGVybiBpbnQgcmJ0X21lbXR5cGVfY2hlY2tfaW5zZXJ0KHN0cnVjdCBtZW10eXBlICpuZXcsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKm5ld190eXBlKTsKKwkJCQkJZW51bSBwYWdlX2NhY2hlX21vZGUgKm5ld190eXBlKTsKIGV4dGVybiBzdHJ1Y3QgbWVtdHlwZSAqcmJ0X21lbXR5cGVfZXJhc2UodTY0IHN0YXJ0LCB1NjQgZW5kKTsKIGV4dGVybiBzdHJ1Y3QgbWVtdHlwZSAqcmJ0X21lbXR5cGVfbG9va3VwKHU2NCBhZGRyKTsKIGV4dGVybiBpbnQgcmJ0X21lbXR5cGVfY29weV9udGhfZWxlbWVudChzdHJ1Y3QgbWVtdHlwZSAqb3V0LCBsb2ZmX3QgcG9zKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCByYnRfbWVtdHlwZV9jaGVja19pbnNlcnQoc3RydWN0IG1lbXR5cGUgKm5ldywKLQkJCQkJdW5zaWduZWQgbG9uZyAqbmV3X3R5cGUpCisJCQkJCWVudW0gcGFnZV9jYWNoZV9tb2RlICpuZXdfdHlwZSkKIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbXR5cGUgKnJidF9tZW10eXBlX2VyYXNlKHU2NCBzdGFydCwgdTY0IGVuZCkKIHsgcmV0dXJuIE5VTEw7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdF9yYnRyZWUuYyBiL2FyY2gveDg2L21tL3BhdF9yYnRyZWUuYwppbmRleCA0MTVmNmM0Li42NTgyYWRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXRfcmJ0cmVlLmMKKysrIGIvYXJjaC94ODYvbW0vcGF0X3JidHJlZS5jCkBAIC0xMjIsMTEgKzEyMiwxMiBAQAogCiBzdGF0aWMgaW50IG1lbXR5cGVfcmJfY2hlY2tfY29uZmxpY3Qoc3RydWN0IHJiX3Jvb3QgKnJvb3QsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJCXVuc2lnbmVkIGxvbmcgcmVxdHlwZSwgdW5zaWduZWQgbG9uZyAqbmV3dHlwZSkKKwkJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSByZXF0eXBlLAorCQkJCWVudW0gcGFnZV9jYWNoZV9tb2RlICpuZXd0eXBlKQogewogCXN0cnVjdCByYl9ub2RlICpub2RlOwogCXN0cnVjdCBtZW10eXBlICptYXRjaDsKLQlpbnQgZm91bmRfdHlwZSA9IHJlcXR5cGU7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgZm91bmRfdHlwZSA9IHJlcXR5cGU7CiAKIAltYXRjaCA9IG1lbXR5cGVfcmJfbG93ZXN0X21hdGNoKCZtZW10eXBlX3Jicm9vdCwgc3RhcnQsIGVuZCk7CiAJaWYgKG1hdGNoID09IE5VTEwpCkBAIC0xODcsNyArMTg4LDggQEAKIAlyYl9pbnNlcnRfYXVnbWVudGVkKCZuZXdkYXRhLT5yYiwgcm9vdCwgJm1lbXR5cGVfcmJfYXVnbWVudF9jYik7CiB9CiAKLWludCByYnRfbWVtdHlwZV9jaGVja19pbnNlcnQoc3RydWN0IG1lbXR5cGUgKm5ldywgdW5zaWduZWQgbG9uZyAqcmV0X3R5cGUpCitpbnQgcmJ0X21lbXR5cGVfY2hlY2tfaW5zZXJ0KHN0cnVjdCBtZW10eXBlICpuZXcsCisJCQkgICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlICpyZXRfdHlwZSkKIHsKIAlpbnQgZXJyID0gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2kzODYuYyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKaW5kZXggMzdjMTQzNS4uOWIxOGVmMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2kzODYuYworKysgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCkBAIC00MzMsMTQgKzQzMywxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChwYXRfZW5hYmxlZCAmJiB3cml0ZV9jb21iaW5lKQotCQlwcm90IHw9IF9QQUdFX0NBQ0hFX1dDOworCQlwcm90IHw9IGNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfV0MpOwogCWVsc2UgaWYgKHBhdF9lbmFibGVkIHx8IGJvb3RfY3B1X2RhdGEueDg2ID4gMykKIAkJLyoKIAkJICogaW9yZW1hcCgpIGFuZCBpb3JlbWFwX25vY2FjaGUoKSBkZWZhdWx0cyB0byBVQyBNSU5VUyBmb3Igbm93LgogCQkgKiBUbyBhdm9pZCBhdHRyaWJ1dGUgY29uZmxpY3RzLCByZXF1ZXN0IFVDIE1JTlVTIGhlcmUKIAkJICogYXMgd2VsbC4KIAkJICovCi0JCXByb3QgfD0gX1BBR0VfQ0FDSEVfVUNfTUlOVVM7CisJCXByb3QgfD0gY2FjaGVtb2RlMnByb3R2YWwoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyk7CiAKIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IF9fcGdwcm90KHByb3QpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbnVtYWNoaXAuYyBiL2FyY2gveDg2L3BjaS9udW1hY2hpcC5jCmluZGV4IDczMDdkOWQuLjJlNTY1ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9udW1hY2hpcC5jCisrKyBiL2FyY2gveDg2L3BjaS9udW1hY2hpcC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotY29uc3Qgc3RydWN0IHBjaV9yYXdfb3BzIHBjaV9tbWNmZ19udW1hY2hpcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX3Jhd19vcHMgcGNpX21tY2ZnX251bWFjaGlwID0gewogCS5yZWFkID0gcGNpX21tY2ZnX3JlYWRfbnVtYWNoaXAsCiAJLndyaXRlID0gcGNpX21tY2ZnX3dyaXRlX251bWFjaGlwLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS94ZW4uYyBiL2FyY2gveDg2L3BjaS94ZW4uYwppbmRleCAwOTNmNWY0Li4xODE5YTkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kveGVuLmMKKysrIGIvYXJjaC94ODYvcGNpL3hlbi5jCkBAIC0yMjksNyArMjI5LDcgQEAKIAkJcmV0dXJuIDE7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1zaWRlc2MsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCV9fcmVhZF9tc2lfbXNnKG1zaWRlc2MsICZtc2cpOworCQlfX3BjaV9yZWFkX21zaV9tc2cobXNpZGVzYywgJm1zZyk7CiAJCXBpcnEgPSBNU0lfQUREUl9FWFRfREVTVF9JRChtc2cuYWRkcmVzc19oaSkgfAogCQkJKChtc2cuYWRkcmVzc19sbyA+PiBNU0lfQUREUl9ERVNUX0lEX1NISUZUKSAmIDB4ZmYpOwogCQlpZiAobXNnLmRhdGEgIT0gWEVOX1BJUlFfTVNJX0RBVEEgfHwKQEAgLTI0MCw3ICsyNDAsNyBAQAogCQkJCWdvdG8gZXJyb3I7CiAJCQl9CiAJCQl4ZW5fbXNpX2NvbXBvc2VfbXNnKGRldiwgcGlycSwgJm1zZyk7Ci0JCQlfX3dyaXRlX21zaV9tc2cobXNpZGVzYywgJm1zZyk7CisJCQlfX3BjaV93cml0ZV9tc2lfbXNnKG1zaWRlc2MsICZtc2cpOwogCQkJZGV2X2RiZygmZGV2LT5kZXYsICJ4ZW46IG1zaSBib3VuZCB0byBwaXJxPSVkXG4iLCBwaXJxKTsKIAkJfSBlbHNlIHsKIAkJCWRldl9kYmcoJmRldi0+ZGV2LApAQCAtMzk0LDE0ICszOTQsNyBAQAogewogCXhlbl9kZXN0cm95X2lycShpcnEpOwogfQotc3RhdGljIHUzMiB4ZW5fbm9wX21zaV9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZykKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyB1MzIgeGVuX25vcF9tc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCi17Ci0JcmV0dXJuIDA7Ci19CisKICNlbmRpZgogCiBpbnQgX19pbml0IHBjaV94ZW5faW5pdCh2b2lkKQpAQCAtNDI1LDggKzQxOCw3IEBACiAJeDg2X21zaS5zZXR1cF9tc2lfaXJxcyA9IHhlbl9zZXR1cF9tc2lfaXJxczsKIAl4ODZfbXNpLnRlYXJkb3duX21zaV9pcnEgPSB4ZW5fdGVhcmRvd25fbXNpX2lycTsKIAl4ODZfbXNpLnRlYXJkb3duX21zaV9pcnFzID0geGVuX3RlYXJkb3duX21zaV9pcnFzOwotCXg4Nl9tc2kubXNpX21hc2tfaXJxID0geGVuX25vcF9tc2lfbWFza19pcnE7Ci0JeDg2X21zaS5tc2l4X21hc2tfaXJxID0geGVuX25vcF9tc2l4X21hc2tfaXJxOworCXBjaV9tc2lfaWdub3JlX21hc2sgPSAxOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CkBAIC01MDYsOCArNDk4LDcgQEAKIAl4ODZfbXNpLnNldHVwX21zaV9pcnFzID0geGVuX2luaXRkb21fc2V0dXBfbXNpX2lycXM7CiAJeDg2X21zaS50ZWFyZG93bl9tc2lfaXJxID0geGVuX3RlYXJkb3duX21zaV9pcnE7CiAJeDg2X21zaS5yZXN0b3JlX21zaV9pcnFzID0geGVuX2luaXRkb21fcmVzdG9yZV9tc2lfaXJxczsKLQl4ODZfbXNpLm1zaV9tYXNrX2lycSA9IHhlbl9ub3BfbXNpX21hc2tfaXJxOwotCXg4Nl9tc2kubXNpeF9tYXNrX2lycSA9IHhlbl9ub3BfbXNpeF9tYXNrX2lycTsKKwlwY2lfbXNpX2lnbm9yZV9tYXNrID0gMTsKICNlbmRpZgogCXhlbl9zZXR1cF9hY3BpX3NjaSgpOwogCV9fYWNwaV9yZWdpc3Rlcl9nc2kgPSBhY3BpX3JlZ2lzdGVyX2dzaV94ZW47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMKaW5kZXggMzVhZWNiNi4uMTdlODBkOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYwpAQCAtNDgsOCArNDgsNyBAQAogICogV2UgYWxsb2NhdGUgcnVudGltZSBzZXJ2aWNlcyByZWdpb25zIGJvdHRvbS11cCwgc3RhcnRpbmcgZnJvbSAtNEcsIGkuZS4KICAqIDB4ZmZmZl9mZmZmXzAwMDBfMDAwMCBhbmQgbGltaXQgRUZJIFZBIG1hcHBpbmcgc3BhY2UgdG8gNjRHLgogICovCi1zdGF0aWMgdTY0IGVmaV92YQk9IC00ICogKDFVTCA8PCAzMCk7Ci0jZGVmaW5lIEVGSV9WQV9FTkQJKC02OCAqICgxVUwgPDwgMzApKQorc3RhdGljIHU2NCBlZmlfdmEgPSBFRklfVkFfU1RBUlQ7CiAKIC8qCiAgKiBTY3JhdGNoIHNwYWNlIHVzZWQgZm9yIHN3aXRjaGluZyB0aGUgcGFnZXRhYmxlIGluIHRoZSBFRkkgc3R1YgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS91di90bGJfdXYuYwppbmRleCAzOTY4ZDY3Li45OTQ3OTg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS91di90bGJfdXYuYworKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS91di90bGJfdXYuYwpAQCAtMTM2NywyMyArMTM2NywyNSBAQAogCiAJY3B1ID0gKihsb2ZmX3QgKilkYXRhOwogCWlmICghY3B1KSB7Ci0JCXNlcV9wcmludGYoZmlsZSwKLQkJICIjIGNwdSBiYXVvZmYgc2VudCBzdGltZSBzZWxmIGxvY2FscyByZW1vdGVzIG5jcHVzIGxvY2FsaHViICIpOwotCQlzZXFfcHJpbnRmKGZpbGUsCi0JCQkicmVtb3RlaHViIG51bXV2aHVicyBudW11dmh1YnMxNiBudW11dmh1YnM4ICIpOwotCQlzZXFfcHJpbnRmKGZpbGUsCi0JCQkibnVtdXZodWJzNCBudW11dmh1YnMyIG51bXV2aHViczEgZHRvIHNuYWNrcyByZXRyaWVzICIpOwotCQlzZXFfcHJpbnRmKGZpbGUsCi0JCQkicm9rIHJlc2V0cCByZXNldHQgZ2l2ZXVwIHN0byBieiB0aHJvdCBkaXNhYmxlICIpOwotCQlzZXFfcHJpbnRmKGZpbGUsCi0JCQkiZW5hYmxlIHdhcnMgd2Fyc2h3IHdhcndhaXRzIGVudGVycyBpcGlkaXMgcGx1Z2dlZCAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJImlwaW92ZXIgZ2xpbSBjb25nIHN3YWNrIHJlY3YgcnRpbWUgYWxsIG9uZSBtdWx0ICIpOwotCQlzZXFfcHJpbnRmKGZpbGUsCi0JCQkibm9uZSByZXRyeSBjYW5jIG5vY2FuIHJlc2V0IHJjYW5cbiIpOworCQlzZXFfcHV0cyhmaWxlLAorCQkJICIjIGNwdSBiYXVvZmYgc2VudCBzdGltZSBzZWxmIGxvY2FscyByZW1vdGVzIG5jcHVzIGxvY2FsaHViICIpOworCQlzZXFfcHV0cyhmaWxlLCAicmVtb3RlaHViIG51bXV2aHVicyBudW11dmh1YnMxNiBudW11dmh1YnM4ICIpOworCQlzZXFfcHV0cyhmaWxlLAorCQkJICJudW11dmh1YnM0IG51bXV2aHViczIgbnVtdXZodWJzMSBkdG8gc25hY2tzIHJldHJpZXMgIik7CisJCXNlcV9wdXRzKGZpbGUsCisJCQkgInJvayByZXNldHAgcmVzZXR0IGdpdmV1cCBzdG8gYnogdGhyb3QgZGlzYWJsZSAiKTsKKwkJc2VxX3B1dHMoZmlsZSwKKwkJCSAiZW5hYmxlIHdhcnMgd2Fyc2h3IHdhcndhaXRzIGVudGVycyBpcGlkaXMgcGx1Z2dlZCAiKTsKKwkJc2VxX3B1dHMoZmlsZSwKKwkJCSAiaXBpb3ZlciBnbGltIGNvbmcgc3dhY2sgcmVjdiBydGltZSBhbGwgb25lIG11bHQgIik7CisJCXNlcV9wdXRzKGZpbGUsICJub25lIHJldHJ5IGNhbmMgbm9jYW4gcmVzZXQgcmNhblxuIik7CiAJfQogCWlmIChjcHUgPCBudW1fcG9zc2libGVfY3B1cygpICYmIGNwdV9vbmxpbmUoY3B1KSkgewogCQliY3AgPSAmcGVyX2NwdShiYXVfY29udHJvbCwgY3B1KTsKKwkJaWYgKGJjcC0+bm9iYXUpIHsKKwkJCXNlcV9wcmludGYoZmlsZSwgImNwdSAlZCBiYXUgZGlzYWJsZWRcbiIsIGNwdSk7CisJCQlyZXR1cm4gMDsKKwkJfQogCQlzdGF0ID0gYmNwLT5zdGF0cDsKIAkJLyogc291cmNlIHNpZGUgc3RhdGlzdGljcyAqLwogCQlzZXFfcHJpbnRmKGZpbGUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wdXJnYXRvcnkvTWFrZWZpbGUgYi9hcmNoL3g4Ni9wdXJnYXRvcnkvTWFrZWZpbGUKaW5kZXggZjUyZTAzMy4uMmM4MzVlMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcHVyZ2F0b3J5L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L3B1cmdhdG9yeS9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQAogCiAkKG9iaikva2V4ZWMtcHVyZ2F0b3J5LmM6ICQob2JqKS9wdXJnYXRvcnkucm8gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxiaW4yYykKKwlAOgogCiAKIG9iai0kKENPTkZJR19LRVhFQ19GSUxFKQkrPSBrZXhlYy1wdXJnYXRvcnkubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5wbCBiL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyMTBiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUucGwKQEAgLTAsMCArMSwzOSBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCB0byBydW4gdGhlIGtlcm5lbCwgaW5jbHVkaW5nIHJvb20gZm9yCisjIHRoZSAuYnNzIGFuZCAuYnJrIHNlY3Rpb25zLgorIworIyBVc2FnZToKKyMgb2JqZHVtcCAtaCBhLm91dCB8IHBlcmwgY2FsY19ydW5fc2l6ZS5wbAordXNlIHN0cmljdDsKKworbXkgJG1lbV9zaXplID0gMDsKK215ICRmaWxlX29mZnNldCA9IDA7CisKK215ICRzZWN0aW9ucz0iICpbMC05XSsgXC4oPzpic3N8YnJrKSArIjsKK3doaWxlICg8PikgeworCWlmICgvXiRzZWN0aW9ucyhbMC05YS1mXSspICsoPzpbMC05YS1mXSsgKyl7Mn0oWzAtOWEtZl0rKS8pIHsKKwkJbXkgJHNpemUgPSBoZXgoJDEpOworCQlteSAkb2Zmc2V0ID0gaGV4KCQyKTsKKwkJJG1lbV9zaXplICs9ICRzaXplOworCQlpZiAoJGZpbGVfb2Zmc2V0ID09IDApIHsKKwkJCSRmaWxlX29mZnNldCA9ICRvZmZzZXQ7CisJCX0gZWxzaWYgKCRmaWxlX29mZnNldCAhPSAkb2Zmc2V0KSB7CisJCQkjIEJGRCBsaW5rZXIgc2hvd3MgdGhlIHNhbWUgZmlsZSBvZmZzZXQgaW4gRUxGLgorCQkJIyBHb2xkIGxpbmtlciBzaG93cyB0aGVtIGFzIGNvbnNlY3V0aXZlLgorCQkJbmV4dCBpZiAoJGZpbGVfb2Zmc2V0ICsgJG1lbV9zaXplID09ICRvZmZzZXQgKyAkc2l6ZSk7CisKKwkJCXByaW50ZiBTVERFUlIgImZpbGVfb2Zmc2V0OiAweCVseFxuIiwgJGZpbGVfb2Zmc2V0OworCQkJcHJpbnRmIFNUREVSUiAibWVtX3NpemU6IDB4JWx4XG4iLCAkbWVtX3NpemU7CisJCQlwcmludGYgU1RERVJSICJvZmZzZXQ6IDB4JWx4XG4iLCAkb2Zmc2V0OworCQkJcHJpbnRmIFNUREVSUiAic2l6ZTogMHglbHhcbiIsICRzaXplOworCisJCQlkaWUgIi5ic3MgYW5kIC5icmsgYXJlIG5vbi1jb250aWd1b3VzXG4iOworCQl9CisJfQorfQorCitpZiAoJGZpbGVfb2Zmc2V0ID09IDApIHsKKwlkaWUgIk5ldmVyIGZvdW5kIC5ic3Mgb3IgLmJyayBmaWxlIG9mZnNldFxuIjsKK30KK3ByaW50ZigiJWRcbiIsICRtZW1fc2l6ZSArICRmaWxlX29mZnNldCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy9pbnNuX3Nhbml0eS5jIGIvYXJjaC94ODYvdG9vbHMvaW5zbl9zYW5pdHkuYwppbmRleCA4NzJlYjYwLi5iYTcwZmYyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni90b29scy9pbnNuX3Nhbml0eS5jCisrKyBiL2FyY2gveDg2L3Rvb2xzL2luc25fc2FuaXR5LmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQkJY29udGludWU7CiAKIAkJLyogRGVjb2RlIGFuIGluc3RydWN0aW9uICovCi0JCWluc25faW5pdCgmaW5zbiwgaW5zbl9idWYsIHg4Nl82NCk7CisJCWluc25faW5pdCgmaW5zbiwgaW5zbl9idWYsIHNpemVvZihpbnNuX2J1ZiksIHg4Nl82NCk7CiAJCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CiAKIAkJaWYgKGluc24ubmV4dF9ieXRlIDw9IGluc24ua2FkZHIgfHwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xzL3JlbG9jcy5jIGIvYXJjaC94ODYvdG9vbHMvcmVsb2NzLmMKaW5kZXggYTVlZmIyMS4uMGMyZmFlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9vbHMvcmVsb2NzLmMKKysrIGIvYXJjaC94ODYvdG9vbHMvcmVsb2NzLmMKQEAgLTIwLDcgKzIwLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVsb2NzIHJlbG9jczE2Owogc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzMzI7CisjaWYgRUxGX0JJVFMgPT0gNjQKK3N0YXRpYyBzdHJ1Y3QgcmVsb2NzIHJlbG9jczMybmVnOwogc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzNjQ7CisjZW5kaWYKIAogc3RydWN0IHNlY3Rpb24gewogCUVsZl9TaGRyICAgICAgIHNoZHI7CkBAIC03NjIsMTEgKzc2NSwxNiBAQAogCiAJc3dpdGNoIChyX3R5cGUpIHsKIAljYXNlIFJfWDg2XzY0X05PTkU6CisJCS8qIE5PTkUgY2FuIGJlIGlnbm9yZWQuICovCisJCWJyZWFrOworCiAJY2FzZSBSX1g4Nl82NF9QQzMyOgogCQkvKgotCQkgKiBOT05FIGNhbiBiZSBpZ25vcmVkIGFuZCBQQyByZWxhdGl2ZSByZWxvY2F0aW9ucyBkb24ndAotCQkgKiBuZWVkIHRvIGJlIGFkanVzdGVkLgorCQkgKiBQQyByZWxhdGl2ZSByZWxvY2F0aW9ucyBkb24ndCBuZWVkIHRvIGJlIGFkanVzdGVkIHVubGVzcworCQkgKiByZWZlcmVuY2luZyBhIHBlcmNwdSBzeW1ib2wuCiAJCSAqLworCQlpZiAoaXNfcGVyY3B1X3N5bShzeW0sIHN5bW5hbWUpKQorCQkJYWRkX3JlbG9jKCZyZWxvY3MzMm5lZywgb2Zmc2V0KTsKIAkJYnJlYWs7CiAKIAljYXNlIFJfWDg2XzY0XzMyOgpAQCAtOTg2LDcgKzk5NCwxMCBAQAogCS8qIE9yZGVyIHRoZSByZWxvY2F0aW9ucyBmb3IgbW9yZSBlZmZpY2llbnQgcHJvY2Vzc2luZyAqLwogCXNvcnRfcmVsb2NzKCZyZWxvY3MxNik7CiAJc29ydF9yZWxvY3MoJnJlbG9jczMyKTsKKyNpZiBFTEZfQklUUyA9PSA2NAorCXNvcnRfcmVsb2NzKCZyZWxvY3MzMm5lZyk7CiAJc29ydF9yZWxvY3MoJnJlbG9jczY0KTsKKyNlbmRpZgogCiAJLyogUHJpbnQgdGhlIHJlbG9jYXRpb25zICovCiAJaWYgKGFzX3RleHQpIHsKQEAgLTEwMDcsMTQgKzEwMTgsMjEgQEAKIAkJZm9yIChpID0gMDsgaSA8IHJlbG9jczMyLmNvdW50OyBpKyspCiAJCQl3cml0ZV9yZWxvYyhyZWxvY3MzMi5vZmZzZXRbaV0sIHN0ZG91dCk7CiAJfSBlbHNlIHsKLQkJaWYgKEVMRl9CSVRTID09IDY0KSB7Ci0JCQkvKiBQcmludCBhIHN0b3AgKi8KLQkJCXdyaXRlX3JlbG9jKDAsIHN0ZG91dCk7CisjaWYgRUxGX0JJVFMgPT0gNjQKKwkJLyogUHJpbnQgYSBzdG9wICovCisJCXdyaXRlX3JlbG9jKDAsIHN0ZG91dCk7CiAKLQkJCS8qIE5vdyBwcmludCBlYWNoIHJlbG9jYXRpb24gKi8KLQkJCWZvciAoaSA9IDA7IGkgPCByZWxvY3M2NC5jb3VudDsgaSsrKQotCQkJCXdyaXRlX3JlbG9jKHJlbG9jczY0Lm9mZnNldFtpXSwgc3Rkb3V0KTsKLQkJfQorCQkvKiBOb3cgcHJpbnQgZWFjaCByZWxvY2F0aW9uICovCisJCWZvciAoaSA9IDA7IGkgPCByZWxvY3M2NC5jb3VudDsgaSsrKQorCQkJd3JpdGVfcmVsb2MocmVsb2NzNjQub2Zmc2V0W2ldLCBzdGRvdXQpOworCisJCS8qIFByaW50IGEgc3RvcCAqLworCQl3cml0ZV9yZWxvYygwLCBzdGRvdXQpOworCisJCS8qIE5vdyBwcmludCBlYWNoIGludmVyc2UgMzItYml0IHJlbG9jYXRpb24gKi8KKwkJZm9yIChpID0gMDsgaSA8IHJlbG9jczMybmVnLmNvdW50OyBpKyspCisJCQl3cml0ZV9yZWxvYyhyZWxvY3MzMm5lZy5vZmZzZXRbaV0sIHN0ZG91dCk7CisjZW5kaWYKIAogCQkvKiBQcmludCBhIHN0b3AgKi8KIAkJd3JpdGVfcmVsb2MoMCwgc3Rkb3V0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jIGIvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKaW5kZXggMTM0MDNmYy4uNTZmMDRkYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKKysrIGIvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCQkJCWJyZWFrOwogCQl9CiAJCS8qIERlY29kZSBhbiBpbnN0cnVjdGlvbiAqLwotCQlpbnNuX2luaXQoJmluc24sIGluc25fYnVmLCB4ODZfNjQpOworCQlpbnNuX2luaXQoJmluc24sIGluc25fYnVmLCBzaXplb2YoaW5zbl9idWYpLCB4ODZfNjQpOwogCQlpbnNuX2dldF9sZW5ndGgoJmluc24pOwogCQlpZiAoaW5zbi5sZW5ndGggIT0gbmIpIHsKIAkJCXdhcm5pbmdzKys7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92ZHNvL3ZnZXRjcHUuYyBiL2FyY2gveDg2L3Zkc28vdmdldGNwdS5jCmluZGV4IDJmOTRiMDMuLjhlYzNkMWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vdmdldGNwdS5jCisrKyBiL2FyY2gveDg2L3Zkc28vdmdldGNwdS5jCkBAIC03LDkgKzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZ2V0Y3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KICNpbmNsdWRlIDxhc20vdmd0b2QuaD4KIAogbm90cmFjZSBsb25nCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92ZHNvL3ZtYS5jIGIvYXJjaC94ODYvdmRzby92bWEuYwppbmRleCA5NzA0NjNiLi4wMDk0OTViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92ZHNvL3ZtYS5jCisrKyBiL2FyY2gveDg2L3Zkc28vdm1hLmMKQEAgLTEsNyArMSw4IEBACiAvKgotICogU2V0IHVwIHRoZSBWTUFzIHRvIHRlbGwgdGhlIFZNIGFib3V0IHRoZSB2RFNPLgogICogQ29weXJpZ2h0IDIwMDcgQW5kaSBLbGVlbiwgU1VTRSBMYWJzLgogICogU3ViamVjdCB0byB0aGUgR1BMLCB2LjIKKyAqCisgKiBUaGlzIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHg4NiB2RFNPIGtlcm5lbC1zaWRlIGNvZGUuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMTAsMTcgKzExLDE3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgotI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGFzbS92Z3RvZC5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CisjaW5jbHVkZSA8YXNtL3Z2YXIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHZkc282NF9lbmFibGVkID0gMTsKLQotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHZkc29fc3luY19jcHVpZDsKICNlbmRpZgogCiB2b2lkIF9faW5pdCBpbml0X3Zkc29faW1hZ2UoY29uc3Qgc3RydWN0IHZkc29faW1hZ2UgKmltYWdlKQpAQCAtMzgsMjAgKzM5LDYgQEAKIAkJCQkJCWltYWdlLT5hbHRfbGVuKSk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Zkc28odm9pZCkKLXsKLQlpbml0X3Zkc29faW1hZ2UoJnZkc29faW1hZ2VfNjQpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9YMzJfQUJJCi0JaW5pdF92ZHNvX2ltYWdlKCZ2ZHNvX2ltYWdlX3gzMik7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotc3Vic3lzX2luaXRjYWxsKGluaXRfdmRzbyk7Ci0jZW5kaWYKLQogc3RydWN0IGxpbnV4X2JpbnBybTsKIAogLyogUHV0IHRoZSB2ZHNvIGFib3ZlIHRoZSAocmFuZG9taXplZCkgc3RhY2sgd2l0aCBhbm90aGVyIHJhbmRvbWl6ZWQgb2Zmc2V0LgpAQCAtMjM4LDMgKzIyNSw2MyBAQAogfQogX19zZXR1cCgidmRzbz0iLCB2ZHNvX3NldHVwKTsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIHZvaWQgdmdldGNwdV9jcHVfaW5pdCh2b2lkICphcmcpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZCA9IHsgfTsKKwl1bnNpZ25lZCBsb25nIG5vZGUgPSAwOworI2lmZGVmIENPTkZJR19OVU1BCisJbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisjZW5kaWYKKwlpZiAoY3B1X2hhcygmY3B1X2RhdGEoY3B1KSwgWDg2X0ZFQVRVUkVfUkRUU0NQKSkKKwkJd3JpdGVfcmR0c2NwX2F1eCgobm9kZSA8PCAxMikgfCBjcHUpOworCisJLyoKKwkgKiBTdG9yZSBjcHUgbnVtYmVyIGluIGxpbWl0IHNvIHRoYXQgaXQgY2FuIGJlIGxvYWRlZAorCSAqIHF1aWNrbHkgaW4gdXNlciBzcGFjZSBpbiB2Z2V0Y3B1LiAoMTIgYml0cyBmb3IgdGhlIENQVQorCSAqIGFuZCA4IGJpdHMgZm9yIHRoZSBub2RlKQorCSAqLworCWQubGltaXQwID0gY3B1IHwgKChub2RlICYgMHhmKSA8PCAxMik7CisJZC5saW1pdCA9IG5vZGUgPj4gNDsKKwlkLnR5cGUgPSA1OwkJLyogUk8gZGF0YSwgZXhwYW5kIGRvd24sIGFjY2Vzc2VkICovCisJZC5kcGwgPSAzOwkJLyogVmlzaWJsZSB0byB1c2VyIGNvZGUgKi8KKwlkLnMgPSAxOwkJLyogTm90IGEgc3lzdGVtIHNlZ21lbnQgKi8KKwlkLnAgPSAxOwkJLyogUHJlc2VudCAqLworCWQuZCA9IDE7CQkvKiAzMi1iaXQgKi8KKworCXdyaXRlX2dkdF9lbnRyeShnZXRfY3B1X2dkdF90YWJsZShjcHUpLCBHRFRfRU5UUllfUEVSX0NQVSwgJmQsIERFU0NUWVBFX1MpOworfQorCitzdGF0aWMgaW50Cit2Z2V0Y3B1X2NwdV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCit7CisJbG9uZyBjcHUgPSAobG9uZylhcmc7CisKKwlpZiAoYWN0aW9uID09IENQVV9PTkxJTkUgfHwgYWN0aW9uID09IENQVV9PTkxJTkVfRlJPWkVOKQorCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCB2Z2V0Y3B1X2NwdV9pbml0LCBOVUxMLCAxKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdF92ZHNvKHZvaWQpCit7CisJaW5pdF92ZHNvX2ltYWdlKCZ2ZHNvX2ltYWdlXzY0KTsKKworI2lmZGVmIENPTkZJR19YODZfWDMyX0FCSQorCWluaXRfdmRzb19pbWFnZSgmdmRzb19pbWFnZV94MzIpOworI2VuZGlmCisKKwljcHVfbm90aWZpZXJfcmVnaXN0ZXJfYmVnaW4oKTsKKworCW9uX2VhY2hfY3B1KHZnZXRjcHVfY3B1X2luaXQsIE5VTEwsIDEpOworCS8qIG5vdGlmaWVyIHByaW9yaXR5ID4gS1ZNICovCisJX19ob3RjcHVfbm90aWZpZXIodmdldGNwdV9jcHVfbm90aWZpZXIsIDMwKTsKKworCWNwdV9ub3RpZmllcl9yZWdpc3Rlcl9kb25lKCk7CisKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbChpbml0X3Zkc28pOworI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCBmYWM1ZTRmLi42YmYzYTEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0xMTAwLDEyICsxMTAwLDYgQEAKIAkJLyogRmFzdCBzeXNjYWxsIHNldHVwIGlzIGFsbCBkb25lIGluIGh5cGVyY2FsbHMsIHNvCiAJCSAgIHRoZXNlIGFyZSBhbGwgaWdub3JlZC4gIFN0dWIgdGhlbSBvdXQgaGVyZSB0byBzdG9wCiAJCSAgIFhlbiBjb25zb2xlIG5vaXNlLiAqLwotCQlicmVhazsKLQotCWNhc2UgTVNSX0lBMzJfQ1JfUEFUOgotCQlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApCi0JCQl4ZW5fc2V0X3BhdCgoKHU2NCloaWdoIDw8IDMyKSB8IGxvdyk7Ci0JCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcmV0ID0gbmF0aXZlX3dyaXRlX21zcl9zYWZlKG1zciwgbG93LCBoaWdoKTsKQEAgLTE1NjEsMTAgKzE1NTUsNiBAQAogCiAJLyogUHJldmVudCB1bndhbnRlZCBiaXRzIGZyb20gYmVpbmcgc2V0IGluIFBURXMuICovCiAJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX0dMT0JBTDsKLSNpZiAwCi0JaWYgKCF4ZW5faW5pdGlhbF9kb21haW4oKSkKLSNlbmRpZgotCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+KF9QQUdFX1BXVCB8IF9QQUdFX1BDRCk7CiAKIAkvKgogCSAqIFByZXZlbnQgcGFnZSB0YWJsZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgaW4gaGlnaG1lbSwgZXZlbgpAQCAtMTYxOCwxNCArMTYwOCw2IEBACiAJICovCiAJYWNwaV9udW1hID0gLTE7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X1BBVAotCS8qCi0JICogRm9yIHJpZ2h0IG5vdyBkaXNhYmxlIHRoZSBQQVQuIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlCi0JICogZ2l0IGNvbW1pdCA4ZWFmZmE2N2I0M2U5OWFlNTgxNjIyYzUxMzNlMjBiMGY0OGJjZWYxCi0JICogKHhlbi9wYXQ6IERpc2FibGUgUEFUIHN1cHBvcnQgZm9yIG5vdykgaXMgcmV2ZXJ0ZWQuCi0JICovCi0JcGF0X2VuYWJsZWQgPSAwOwotI2VuZGlmCiAJLyogRG9uJ3QgZG8gdGhlIGZ1bGwgdmNwdV9pbmZvIHBsYWNlbWVudCBzdHVmZiB1bnRpbCB3ZSBoYXZlIGEKIAkgICBwb3NzaWJsZSBtYXAgYW5kIGEgbm9uLWR1bW15IHNoYXJlZF9pbmZvLiAqLwogCXBlcl9jcHUoeGVuX3ZjcHUsIDApID0gJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1swXTsKQEAgLTE2MzYsNiArMTYxOCwxMyBAQAogCXhlbl9yYXdfY29uc29sZV93cml0ZSgibWFwcGluZyBrZXJuZWwgaW50byBwaHlzaWNhbCBtZW1vcnlcbiIpOwogCXhlbl9zZXR1cF9rZXJuZWxfcGFnZXRhYmxlKChwZ2RfdCAqKXhlbl9zdGFydF9pbmZvLT5wdF9iYXNlLCB4ZW5fc3RhcnRfaW5mby0+bnJfcGFnZXMpOwogCisJLyoKKwkgKiBNb2RpZnkgdGhlIGNhY2hlIG1vZGUgdHJhbnNsYXRpb24gdGFibGVzIHRvIG1hdGNoIFhlbidzIFBBVAorCSAqIGNvbmZpZ3VyYXRpb24uCisJICovCisKKwlwYXRfaW5pdF9jYWNoZV9tb2RlcygpOworCiAJLyoga2VlcCB1c2luZyBYZW4gZ2R0IGZvciBub3c7IG5vIHVyZ2VudCBuZWVkIHRvIGNoYW5nZSBpdCAqLwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IGE4YTFhM2QuLjhjODI5OGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTQxMCwxMyArNDEwLDcgQEAKIF9fdmlzaWJsZSBwdGV2YWxfdCB4ZW5fcHRlX3ZhbChwdGVfdCBwdGUpCiB7CiAJcHRldmFsX3QgcHRldmFsID0gcHRlLnB0ZTsKLSNpZiAwCi0JLyogSWYgdGhpcyBpcyBhIFdDIHB0ZSwgY29udmVydCBiYWNrIGZyb20gWGVuIFdDIHRvIExpbnV4IFdDICovCi0JaWYgKChwdGV2YWwgJiAoX1BBR0VfUEFUIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKSkgPT0gX1BBR0VfUEFUKSB7Ci0JCVdBUk5fT04oIXBhdF9lbmFibGVkKTsKLQkJcHRldmFsID0gKHB0ZXZhbCAmIH5fUEFHRV9QQVQpIHwgX1BBR0VfUFdUOwotCX0KLSNlbmRpZgorCiAJcmV0dXJuIHB0ZV9tZm5fdG9fcGZuKHB0ZXZhbCk7CiB9CiBQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9wdGVfdmFsKTsKQEAgLTQyNyw0NyArNDIxLDggQEAKIH0KIFBWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX3BnZF92YWwpOwogCi0vKgotICogWGVuJ3MgUEFUIHNldHVwIGlzIHBhcnQgb2YgaXRzIEFCSSwgdGhvdWdoIEkgYXNzdW1lIGVudHJpZXMgNiAmIDcKLSAqIGFyZSByZXNlcnZlZCBmb3Igbm93LCB0byBjb3JyZXNwb25kIHRvIHRoZSBJbnRlbC1yZXNlcnZlZCBQQVQKLSAqIHR5cGVzLgotICoKLSAqIFdlIGV4cGVjdCBMaW51eCdzIFBBVCBzZXQgYXMgZm9sbG93czoKLSAqCi0gKiBJZHggIFBURSBmbGFncyAgICAgICAgTGludXggICAgWGVuICAgIERlZmF1bHQKLSAqIDAgICAgICAgICAgICAgICAgICAgICBXQiAgICAgICBXQiAgICAgV0IKLSAqIDEgICAgICAgICAgICBQV1QgICAgICBXQyAgICAgICBXVCAgICAgV1QKLSAqIDIgICAgICAgIFBDRCAgICAgICAgICBVQy0gICAgICBVQy0gICAgVUMtCi0gKiAzICAgICAgICBQQ0QgUFdUICAgICAgVUMgICAgICAgVUMgICAgIFVDCi0gKiA0ICAgIFBBVCAgICAgICAgICAgICAgV0IgICAgICAgV0MgICAgIFdCCi0gKiA1ICAgIFBBVCAgICAgUFdUICAgICAgV0MgICAgICAgV1AgICAgIFdUCi0gKiA2ICAgIFBBVCBQQ0QgICAgICAgICAgVUMtICAgICAgcnN2ICAgIFVDLQotICogNyAgICBQQVQgUENEIFBXVCAgICAgIFVDICAgICAgIHJzdiAgICBVQwotICovCi0KLXZvaWQgeGVuX3NldF9wYXQodTY0IHBhdCkKLXsKLQkvKiBXZSBleHBlY3QgTGludXggdG8gdXNlIGEgUEFUIHNldHRpbmcgb2YKLQkgKiBVQyBVQy0gV0MgV0IgKGlnbm9yaW5nIHRoZSBQQVQgZmxhZykgKi8KLQlXQVJOX09OKHBhdCAhPSAweDAwMDcwMTA2MDAwNzAxMDZ1bGwpOwotfQotCiBfX3Zpc2libGUgcHRlX3QgeGVuX21ha2VfcHRlKHB0ZXZhbF90IHB0ZSkKIHsKLSNpZiAwCi0JLyogSWYgTGludXggaXMgdHJ5aW5nIHRvIHNldCBhIFdDIHB0ZSwgdGhlbiBtYXAgdG8gdGhlIFhlbiBXQy4KLQkgKiBJZiBfUEFHRV9QQVQgaXMgc2V0LCB0aGVuIGl0IHByb2JhYmx5IG1lYW5zIGl0IGlzIHJlYWxseQotCSAqIF9QQUdFX1BTRSwgc28gYXZvaWQgZmlkZGxpbmcgd2l0aCB0aGUgUEFUIG1hcHBpbmcgYW5kIGhvcGUKLQkgKiB0aGluZ3Mgd29yayBvdXQgT0suLi4KLQkgKgotCSAqIChXZSBzaG91bGQgbmV2ZXIgc2VlIGtlcm5lbCBtYXBwaW5ncyB3aXRoIF9QQUdFX1BTRSBzZXQsCi0JICogYnV0IHdlIGNvdWxkIHNlZSBodWdldGxiZnMgbWFwcGluZ3MsIEkgdGhpbmsuKS4KLQkgKi8KLQlpZiAocGF0X2VuYWJsZWQgJiYgIVdBUk5fT04ocHRlICYgX1BBR0VfUEFUKSkgewotCQlpZiAoKHB0ZSAmIChfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpKSA9PSBfUEFHRV9QV1QpCi0JCQlwdGUgPSAocHRlICYgfihfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpKSB8IF9QQUdFX1BBVDsKLQl9Ci0jZW5kaWYKIAlwdGUgPSBwdGVfcGZuX3RvX21mbihwdGUpOwogCiAJcmV0dXJuIG5hdGl2ZV9tYWtlX3B0ZShwdGUpOwpAQCAtMTQ1Nyw4ICsxNDEyLDEwIEBACiAJCXBhZ2UtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZyl1c2VyX3BnZDsKIAogCQlpZiAodXNlcl9wZ2QgIT0gTlVMTCkgeworI2lmZGVmIENPTkZJR19YODZfVlNZU0NBTExfRU1VTEFUSU9OCiAJCQl1c2VyX3BnZFtwZ2RfaW5kZXgoVlNZU0NBTExfQUREUildID0KIAkJCQlfX3BnZChfX3BhKGxldmVsM191c2VyX3ZzeXNjYWxsKSB8IF9QQUdFX1RBQkxFKTsKKyNlbmRpZgogCQkJcmV0ID0gMDsKIAkJfQogCkBAIC0yMDIxLDcgKzE5NzgsNyBAQAogIyBpZmRlZiBDT05GSUdfSElHSE1FTQogCWNhc2UgRklYX0tNQVBfQkVHSU4gLi4uIEZJWF9LTUFQX0VORDoKICMgZW5kaWYKLSNlbHNlCisjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfVlNZU0NBTExfRU1VTEFUSU9OKQogCWNhc2UgVlNZU0NBTExfUEFHRToKICNlbmRpZgogCWNhc2UgRklYX1RFWFRfUE9LRTA6CkBAIC0yMDYwLDcgKzIwMTcsNyBAQAogCiAJX19uYXRpdmVfc2V0X2ZpeG1hcChpZHgsIHB0ZSk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CisjaWZkZWYgQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04KIAkvKiBSZXBsaWNhdGUgY2hhbmdlcyB0byBtYXAgdGhlIHZzeXNjYWxsIHBhZ2UgaW50byB0aGUgdXNlcgogCSAgIHBhZ2V0YWJsZSB2c3lzY2FsbCBtYXBwaW5nLiAqLwogCWlmIChpZHggPT0gVlNZU0NBTExfUEFHRSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NtcC5jIGIvYXJjaC94ODYveGVuL3NtcC5jCmluZGV4IDg2NTBjZGIuLjRjMDcxYWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zbXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc21wLmMKQEAgLTUxMCw2ICs1MTAsOSBAQAogCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwogCQlzY2hlZHVsZV90aW1lb3V0KEhaLzEwKTsKIAl9CisKKwljcHVfZGllX2NvbW1vbihjcHUpOworCiAJeGVuX3NtcF9pbnRyX2ZyZWUoY3B1KTsKIAl4ZW5fdW5pbml0X2xvY2tfY3B1KGNwdSk7CiAJeGVuX3RlYXJkb3duX3RpbWVyKGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaAppbmRleCAyOGM3ZTBiLi40YWI5Mjk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKQEAgLTMzLDcgKzMzLDYgQEAKIAogdm9pZCB4ZW5fbW1fcGluX2FsbCh2b2lkKTsKIHZvaWQgeGVuX21tX3VucGluX2FsbCh2b2lkKTsKLXZvaWQgeGVuX3NldF9wYXQodTY0KTsKIAogY2hhciAqIF9faW5pdCB4ZW5fbWVtb3J5X3NldHVwKHZvaWQpOwogY2hhciAqIHhlbl9hdXRvX3hsYXRlZF9tZW1vcnlfc2V0dXAodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9LY29uZmlnIGIvYXJjaC94dGVuc2EvS2NvbmZpZwppbmRleCA0OWM2YzNkLi44MWY1N2U4IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9LY29uZmlnCisrKyBiL2FyY2gveHRlbnNhL0tjb25maWcKQEAgLTMxOSw4ICszMTksOCBAQAogCiBjb25maWcgWFRFTlNBX1BMQVRGT1JNX1hURlBHQQogCWJvb2wgIlhURlBHQSIKKwlzZWxlY3QgRVRIT0MgaWYgRVRIRVJORVQKIAlzZWxlY3QgU0VSSUFMX0NPTlNPTEUKLQlzZWxlY3QgRVRIT0MKIAlzZWxlY3QgWFRFTlNBX0NBTElCUkFURV9DQ09VTlQKIAloZWxwCiAJICBYVEZQR0EgaXMgdGhlIG5hbWUgb2YgVGVuc2lsaWNhIGJvYXJkIGZhbWlseSAoTFg2MCwgTFgxMTAsIExYMjAwLCBNTDYwNSkuCkBAIC0zNjcsNyArMzY3LDcgQEAKIGNvbmZpZyBCTEtfREVWX1NJTURJU0sKIAl0cmlzdGF0ZSAiSG9zdCBmaWxlLWJhc2VkIHNpbXVsYXRlZCBibG9jayBkZXZpY2Ugc3VwcG9ydCIKIAlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIFhURU5TQV9QTEFURk9STV9JU1MKKwlkZXBlbmRzIG9uIFhURU5TQV9QTEFURk9STV9JU1MgJiYgQkxPQ0sKIAloZWxwCiAJICBDcmVhdGUgYmxvY2sgZGV2aWNlcyB0aGF0IG1hcCB0byBmaWxlcyBpbiB0aGUgaG9zdCBmaWxlIHN5c3RlbS4KIAkgIERldmljZSBiaW5kaW5nIHRvIGhvc3QgZmlsZSBtYXkgYmUgY2hhbmdlZCBhdCBydW50aW1lIHZpYSBwcm9jCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9ib290L2R0cy9seDIwMG14LmR0cyBiL2FyY2gveHRlbnNhL2Jvb3QvZHRzL2x4MjAwbXguZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTgyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9ib290L2R0cy9seDIwMG14LmR0cwpAQCAtMCwwICsxLDE2IEBACisvZHRzLXYxLzsKKy9pbmNsdWRlLyAieHRmcGdhLmR0c2kiCisvaW5jbHVkZS8gInh0ZnBnYS1mbGFzaC0xNm0uZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJjZG5zLHh0ZW5zYS1seDIwMCI7CisJbWVtb3J5QDAgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA2MDAwMDAwPjsKKwl9OworCXBpYzogcGljIHsKKwkJY29tcGF0aWJsZSA9ICJjZG5zLHh0ZW5zYS1teCI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvY29uZmlncy9nZW5lcmljX2tjNzA1X2RlZmNvbmZpZyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiN2IzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWcKQEAgLTAsMCArMSwxMzEgQEAKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0ZIQU5ETEU9eQorQ09ORklHX0lSUV9ET01BSU5fREVCVUc9eQorQ09ORklHX05PX0haX0lETEU9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElORz15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQ0dST1VQX0RFQlVHPXkKK0NPTkZJR19DR1JPVVBfRlJFRVpFUj15CitDT05GSUdfQ0dST1VQX0RFVklDRT15CitDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQorQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKK0NPTkZJR19NRU1DRz15CitDT05GSUdfTkFNRVNQQUNFUz15CitDT05GSUdfU0NIRURfQVVUT0dST1VQPXkKK0NPTkZJR19SRUxBWT15CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0VYUEVSVD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19YVEVOU0FfVkFSSUFOVF9EQzIzM0M9eQorQ09ORklHX1hURU5TQV9VTkFMSUdORURfVVNFUj15CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSElHSE1FTT15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorQ09ORklHX1hURU5TQV9QTEFURk9STV9YVEZQR0E9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4ZmQwNTAwMjAsMTE1MjAwbjggY29uc29sZT10dHlTMCwxMTUyMDBuOCBpcD1kaGNwIHJvb3Q9L2Rldi9uZnMgcncgZGVidWciCitDT05GSUdfVVNFX09GPXkKK0NPTkZJR19CVUlMVElOX0RUQj0ia2M3MDUiCisjIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfVU5JWD15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKKyMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAorQ09ORklHX01URD15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKK0NPTkZJR19NVERfQ0ZJX1NUQUE9eQorQ09ORklHX01URF9QSFlTTUFQX09GPXkKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVF9WRU5ET1JfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNSRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1dJWk5FVCBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVQUkVDQVRFRF9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKK0NPTkZJR19TT0ZUX1dBVENIRE9HPXkKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDRfRlM9eQorQ09ORklHX0ZBTk9USUZZPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19VQklGU19GUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX05GU19TV0FQPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfU1VOUlBDX0RFQlVHPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRFlOQU1JQ19ERUJVRz15CitDT05GSUdfREVCVUdfSU5GTz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUj15CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURTVEFUUz15CitDT05GSUdfVElNRVJfU1RBVFM9eQorQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19BVE9NSUNfU0xFRVA9eQorQ09ORklHX1NUQUNLVFJBQ0U9eQorQ09ORklHX1JDVV9UUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xEX05PX1JFTEFYPXkKKyMgQ09ORklHX1MzMkMxSV9TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9eQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnIGIvYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZWVhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9jb25maWdzL3NtcF9seDIwMF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzUgQEAKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0ZIQU5ETEU9eQorQ09ORklHX0lSUV9ET01BSU5fREVCVUc9eQorQ09ORklHX05PX0haX0lETEU9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElORz15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQ0dST1VQX0RFQlVHPXkKK0NPTkZJR19DR1JPVVBfRlJFRVpFUj15CitDT05GSUdfQ0dST1VQX0RFVklDRT15CitDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQorQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKK0NPTkZJR19NRU1DRz15CitDT05GSUdfTkFNRVNQQUNFUz15CitDT05GSUdfU0NIRURfQVVUT0dST1VQPXkKK0NPTkZJR19SRUxBWT15CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0VYUEVSVD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19YVEVOU0FfVkFSSUFOVF9DVVNUT009eQorQ09ORklHX1hURU5TQV9WQVJJQU5UX0NVU1RPTV9OQU1FPSJ0ZXN0X21tdWhpZmlfYzMiCitDT05GSUdfWFRFTlNBX1VOQUxJR05FRF9VU0VSPXkKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IQVZFX1NNUD15CitDT05GSUdfU01QPXkKK0NPTkZJR19IT1RQTFVHX0NQVT15CisjIENPTkZJR19JTklUSUFMSVpFX1hURU5TQV9NTVVfSU5TSURFX1ZNTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19YVEVOU0FfUExBVEZPUk1fWFRGUEdBPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweGZkMDUwMDIwLDExNTIwMG44IGNvbnNvbGU9dHR5UzAsMTE1MjAwbjggaXA9ZGhjcCByb290PS9kZXYvbmZzIHJ3IGRlYnVnIgorQ09ORklHX1VTRV9PRj15CitDT05GSUdfQlVJTFRJTl9EVEI9Imx4MjAwbXgiCisjIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfVU5JWD15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKKyMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAorQ09ORklHX01URD15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKK0NPTkZJR19NVERfQ0ZJX1NUQUE9eQorQ09ORklHX01URF9QSFlTTUFQX09GPXkKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVF9WRU5ET1JfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNSRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1dJWk5FVCBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVQUkVDQVRFRF9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKK0NPTkZJR19TT0ZUX1dBVENIRE9HPXkKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDRfRlM9eQorQ09ORklHX0ZBTk9USUZZPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19VQklGU19GUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX05GU19TV0FQPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfU1VOUlBDX0RFQlVHPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRFlOQU1JQ19ERUJVRz15CitDT05GSUdfREVCVUdfSU5GTz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX1ZNPXkKK0NPTkZJR19MT0NLVVBfREVURUNUT1I9eQorQ09ORklHX1NDSEVEU1RBVFM9eQorQ09ORklHX1RJTUVSX1NUQVRTPXkKK0NPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19TUElOTE9DSz15CitDT05GSUdfREVCVUdfTVVURVhFUz15CitDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQPXkKK0NPTkZJR19TVEFDS1RSQUNFPXkKK0NPTkZJR19SQ1VfVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MRF9OT19SRUxBWD15CisjIENPTkZJR19TMzJDMUlfU0VMRlRFU1QgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPXkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDc0OTQ0MjAuLmZlMTYwMGEgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaApAQCAtNzQsMTMgKzc0LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAotLyoKLSAqIEdlbmVyaWMgSS9PCi0gKi8KLSNkZWZpbmUgcmVhZGJfcmVsYXhlZCByZWFkYgotI2RlZmluZSByZWFkd19yZWxheGVkIHJlYWR3Ci0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQgcmVhZGwKLQogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYjIxNzNlNS4uMDM4M2FlZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjc3LDYgKzI3Nyw4IEBACiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKQogCXsgcmV0dXJuIHB0ZTsgfQogCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkgKF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgJiB+X1BBR0VfQ0FfTUFTSykpCisKIC8qCiAgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAogICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IDg4ODNmYzguLmRiNWJiNzIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMzg0LDcgKzM4NCw4IEBACiAjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdCAJCQkxNzUKIF9fU1lTQ0FMTCgxNzUsIHN5c19waXZvdF9yb290LCAyKQogI2RlZmluZSBfX05SX3Vtb3VudCAJCQkJMTc2Ci1fX1NZU0NBTEwoMTc2LCBzeXNfdW1vdW50LCAyKQorX19TWVNDQUxMKDE3Niwgc3lzX29sZHVtb3VudCwgMSkKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAogI2RlZmluZSBfX05SX3N3YXBvZmYgCQkJCTE3NwogX19TWVNDQUxMKDE3Nywgc3lzX3N3YXBvZmYsIDEpCiAjZGVmaW5lIF9fTlJfc3luYyAJCQkJMTc4CkBAIC03NDIsNyArNzQzLDE0IEBACiAjZGVmaW5lIF9fTlJfcmVuYW1lYXQyCQkJCTMzNgogX19TWVNDQUxMKDMzNiwgc3lzX3JlbmFtZWF0MiwgNSkKIAotI2RlZmluZSBfX05SX3N5c2NhbGxfY291bnQJCQkzMzcKKyNkZWZpbmUgX19OUl9zZWNjb21wCQkJCTMzNworX19TWVNDQUxMKDMzNywgc3lzX3NlY2NvbXAsIDMpCisjZGVmaW5lIF9fTlJfZ2V0cmFuZG9tCQkJCTMzOAorX19TWVNDQUxMKDMzOCwgc3lzX2dldHJhbmRvbSwgMykKKyNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJCQkzMzkKK19fU1lTQ0FMTCgzMzksIHN5c19tZW1mZF9jcmVhdGUsIDIpCisKKyNkZWZpbmUgX19OUl9zeXNjYWxsX2NvdW50CQkJMzQwCiAKIC8qCiAgKiBzeXN4dGVuc2Egc3lzY2FsbCBoYW5kbGVyCmRpZmYgLS1naXQgYS9ibG9jay9iaW8taW50ZWdyaXR5LmMgYi9ibG9jay9iaW8taW50ZWdyaXR5LmMKaW5kZXggMDk4NDIzMi4uNWNiZDVkOSAxMDA2NDQKLS0tIGEvYmxvY2svYmlvLWludGVncml0eS5jCisrKyBiL2Jsb2NrL2Jpby1pbnRlZ3JpdHkuYwpAQCAtMjE2LDkgKzIxNiwxMCBAQAogewogCXN0cnVjdCBibGtfaW50ZWdyaXR5ICpiaSA9IGJkZXZfZ2V0X2ludGVncml0eShiaW8tPmJpX2JkZXYpOwogCXN0cnVjdCBibGtfaW50ZWdyaXR5X2l0ZXIgaXRlcjsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJc3RydWN0IGJ2ZWNfaXRlciBidml0ZXI7CisJc3RydWN0IGJpb192ZWMgYnY7CiAJc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwID0gYmlvX2ludGVncml0eShiaW8pOwotCXVuc2lnbmVkIGludCBpLCByZXQgPSAwOworCXVuc2lnbmVkIGludCByZXQgPSAwOwogCXZvaWQgKnByb3RfYnVmID0gcGFnZV9hZGRyZXNzKGJpcC0+YmlwX3ZlYy0+YnZfcGFnZSkgKwogCQliaXAtPmJpcF92ZWMtPmJ2X29mZnNldDsKIApAQCAtMjI3LDExICsyMjgsMTEgQEAKIAlpdGVyLnNlZWQgPSBiaXBfZ2V0X3NlZWQoYmlwKTsKIAlpdGVyLnByb3RfYnVmID0gcHJvdF9idWY7CiAKLQliaW9fZm9yX2VhY2hfc2VnbWVudF9hbGwoYnYsIGJpbywgaSkgewotCQl2b2lkICprYWRkciA9IGttYXBfYXRvbWljKGJ2LT5idl9wYWdlKTsKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBidml0ZXIpIHsKKwkJdm9pZCAqa2FkZHIgPSBrbWFwX2F0b21pYyhidi5idl9wYWdlKTsKIAotCQlpdGVyLmRhdGFfYnVmID0ga2FkZHIgKyBidi0+YnZfb2Zmc2V0OwotCQlpdGVyLmRhdGFfc2l6ZSA9IGJ2LT5idl9sZW47CisJCWl0ZXIuZGF0YV9idWYgPSBrYWRkciArIGJ2LmJ2X29mZnNldDsKKwkJaXRlci5kYXRhX3NpemUgPSBidi5idl9sZW47CiAKIAkJcmV0ID0gcHJvY19mbigmaXRlcik7CiAJCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDA0MjFiNTMuLjJlNzQyNGIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAKIAlibGtfY2xlYXJfcnFfY29tcGxldGUocnEpOwogCXRyYWNlX2Jsb2NrX3JxX3JlcXVldWUocSwgcnEpOwogCi0JaWYgKGJsa19ycV90YWdnZWQocnEpKQorCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX1FVRVVFRCkKIAkJYmxrX3F1ZXVlX2VuZF90YWcocSwgcnEpOwogCiAJQlVHX09OKGJsa19xdWV1ZWRfcnEocnEpKTsKQEAgLTI1NTQsNyArMjU1NCw3IEBACiAgKi8KIHZvaWQgYmxrX2ZpbmlzaF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCBlcnJvcikKIHsKLQlpZiAoYmxrX3JxX3RhZ2dlZChyZXEpKQorCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUVVRUQpCiAJCWJsa19xdWV1ZV9lbmRfdGFnKHJlcS0+cSwgcmVxKTsKIAogCUJVR19PTihibGtfcXVldWVkX3JxKHJlcSkpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCBiM2FjNDBhLi44OWI5N2I1IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtOTcsMTkgKzk3LDIyIEBACiAKIHZvaWQgYmxrX3JlY291bnRfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKIHsKLQlib29sIG5vX3NnX21lcmdlID0gISF0ZXN0X2JpdChRVUVVRV9GTEFHX05PX1NHX01FUkdFLAotCQkJJnEtPnF1ZXVlX2ZsYWdzKTsKLQlib29sIG1lcmdlX25vdF9uZWVkID0gYmlvLT5iaV92Y250IDwgcXVldWVfbWF4X3NlZ21lbnRzKHEpOworCXVuc2lnbmVkIHNob3J0IHNlZ19jbnQ7CiAKLQlpZiAobm9fc2dfbWVyZ2UgJiYgIWJpb19mbGFnZ2VkKGJpbywgQklPX0NMT05FRCkgJiYKLQkJCW1lcmdlX25vdF9uZWVkKQotCQliaW8tPmJpX3BoeXNfc2VnbWVudHMgPSBiaW8tPmJpX3ZjbnQ7CisJLyogZXN0aW1hdGUgc2VnbWVudCBudW1iZXIgYnkgYmlfdmNudCBmb3Igbm9uLWNsb25lZCBiaW8gKi8KKwlpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ0xPTkVEKSkKKwkJc2VnX2NudCA9IGJpb19zZWdtZW50cyhiaW8pOworCWVsc2UKKwkJc2VnX2NudCA9IGJpby0+YmlfdmNudDsKKworCWlmICh0ZXN0X2JpdChRVUVVRV9GTEFHX05PX1NHX01FUkdFLCAmcS0+cXVldWVfZmxhZ3MpICYmCisJCQkoc2VnX2NudCA8IHF1ZXVlX21heF9zZWdtZW50cyhxKSkpCisJCWJpby0+YmlfcGh5c19zZWdtZW50cyA9IHNlZ19jbnQ7CiAJZWxzZSB7CiAJCXN0cnVjdCBiaW8gKm54dCA9IGJpby0+YmlfbmV4dDsKIAogCQliaW8tPmJpX25leHQgPSBOVUxMOwotCQliaW8tPmJpX3BoeXNfc2VnbWVudHMgPSBfX2Jsa19yZWNhbGNfcnFfc2VnbWVudHMocSwgYmlvLAotCQkJCW5vX3NnX21lcmdlICYmIG1lcmdlX25vdF9uZWVkKTsKKwkJYmlvLT5iaV9waHlzX3NlZ21lbnRzID0gX19ibGtfcmVjYWxjX3JxX3NlZ21lbnRzKHEsIGJpbywgZmFsc2UpOwogCQliaW8tPmJpX25leHQgPSBueHQ7CiAJfQogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtdGFnLmMgYi9ibG9jay9ibGstbXEtdGFnLmMKaW5kZXggODMxNzE3NS4uNzI4YjlhNCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLXRhZy5jCisrKyBiL2Jsb2NrL2Jsay1tcS10YWcuYwpAQCAtNTg0LDYgKzU4NCwzNCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGJsa19tcV91bmlxdWVfdGFnKCkgLSByZXR1cm4gYSB0YWcgdGhhdCBpcyB1bmlxdWUgcXVldWUtd2lkZQorICogQHJxOiByZXF1ZXN0IGZvciB3aGljaCB0byBjb21wdXRlIGEgdW5pcXVlIHRhZworICoKKyAqIFRoZSB0YWcgZmllbGQgaW4gc3RydWN0IHJlcXVlc3QgaXMgdW5pcXVlIHBlciBoYXJkd2FyZSBxdWV1ZSBidXQgbm90IG92ZXIKKyAqIGFsbCBoYXJkd2FyZSBxdWV1ZXMuIEhlbmNlIHRoaXMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGFnIHdpdGggdGhlCisgKiBoYXJkd2FyZSBjb250ZXh0IGluZGV4IGluIHRoZSB1cHBlciBiaXRzIGFuZCB0aGUgcGVyIGhhcmR3YXJlIHF1ZXVlIHRhZyBpbgorICogdGhlIGxvd2VyIGJpdHMuCisgKgorICogTm90ZTogV2hlbiBjYWxsZWQgZm9yIGEgcmVxdWVzdCB0aGF0IGlzIHF1ZXVlZCBvbiBhIG5vbi1tdWx0aXF1ZXVlIHJlcXVlc3QKKyAqIHF1ZXVlLCB0aGUgaGFyZHdhcmUgY29udGV4dCBpbmRleCBpcyBzZXQgdG8gemVyby4KKyAqLwordTMyIGJsa19tcV91bmlxdWVfdGFnKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHJxLT5xOworCXN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4OworCWludCBod3EgPSAwOworCisJaWYgKHEtPm1xX29wcykgeworCQloY3R4ID0gcS0+bXFfb3BzLT5tYXBfcXVldWUocSwgcnEtPm1xX2N0eC0+Y3B1KTsKKwkJaHdxID0gaGN0eC0+cXVldWVfbnVtOworCX0KKworCXJldHVybiAoaHdxIDw8IEJMS19NUV9VTklRVUVfVEFHX0JJVFMpIHwKKwkJKHJxLT50YWcgJiBCTEtfTVFfVU5JUVVFX1RBR19NQVNLKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX21xX3VuaXF1ZV90YWcpOworCiBzc2l6ZV90IGJsa19tcV90YWdfc3lzZnNfc2hvdyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIGNoYXIgKnBhZ2UpCiB7CiAJY2hhciAqb3JpZ19wYWdlID0gcGFnZTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS5jIGIvYmxvY2svYmxrLW1xLmMKaW5kZXggNjg5MjliYS4uOTJjZWVmMCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLmMKKysrIGIvYmxvY2svYmxrLW1xLmMKQEAgLTEwNywxMSArMTA3LDcgQEAKIAl3YWtlX3VwX2FsbCgmcS0+bXFfZnJlZXplX3dxKTsKIH0KIAotLyoKLSAqIEd1YXJhbnRlZSBubyByZXF1ZXN0IGlzIGluIHVzZSwgc28gd2UgY2FuIGNoYW5nZSBhbnkgZGF0YSBzdHJ1Y3R1cmUgb2YKLSAqIHRoZSBxdWV1ZSBhZnRlcndhcmQuCi0gKi8KLXZvaWQgYmxrX21xX2ZyZWV6ZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3N0YXRpYyB2b2lkIGJsa19tcV9mcmVlemVfcXVldWVfc3RhcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJYm9vbCBmcmVlemU7CiAKQEAgLTEyMyw5ICsxMTksMjMgQEAKIAkJcGVyY3B1X3JlZl9raWxsKCZxLT5tcV91c2FnZV9jb3VudGVyKTsKIAkJYmxrX21xX3J1bl9xdWV1ZXMocSwgZmFsc2UpOwogCX0KK30KKworc3RhdGljIHZvaWQgYmxrX21xX2ZyZWV6ZV9xdWV1ZV93YWl0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQorewogCXdhaXRfZXZlbnQocS0+bXFfZnJlZXplX3dxLCBwZXJjcHVfcmVmX2lzX3plcm8oJnEtPm1xX3VzYWdlX2NvdW50ZXIpKTsKIH0KIAorLyoKKyAqIEd1YXJhbnRlZSBubyByZXF1ZXN0IGlzIGluIHVzZSwgc28gd2UgY2FuIGNoYW5nZSBhbnkgZGF0YSBzdHJ1Y3R1cmUgb2YKKyAqIHRoZSBxdWV1ZSBhZnRlcndhcmQuCisgKi8KK3ZvaWQgYmxrX21xX2ZyZWV6ZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlibGtfbXFfZnJlZXplX3F1ZXVlX3N0YXJ0KHEpOworCWJsa19tcV9mcmVlemVfcXVldWVfd2FpdChxKTsKK30KKwogc3RhdGljIHZvaWQgYmxrX21xX3VuZnJlZXplX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCWJvb2wgd2FrZTsKQEAgLTE5MjEsNyArMTkzMSw3IEBACiAvKiBCYXNpY2FsbHkgcmVkbyBibGtfbXFfaW5pdF9xdWV1ZSB3aXRoIHF1ZXVlIGZyb3plbiAqLwogc3RhdGljIHZvaWQgYmxrX21xX3F1ZXVlX3JlaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlibGtfbXFfZnJlZXplX3F1ZXVlKHEpOworCVdBUk5fT05fT05DRSghcS0+bXFfZnJlZXplX2RlcHRoKTsKIAogCWJsa19tcV9zeXNmc191bnJlZ2lzdGVyKHEpOwogCkBAIC0xOTM2LDggKzE5NDYsNiBAQAogCWJsa19tcV9tYXBfc3dxdWV1ZShxKTsKIAogCWJsa19tcV9zeXNmc19yZWdpc3RlcihxKTsKLQotCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxKTsKIH0KIAogc3RhdGljIGludCBibGtfbXFfcXVldWVfcmVpbml0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLApAQCAtMTk1Niw4ICsxOTY0LDI1IEBACiAJCXJldHVybiBOT1RJRllfT0s7CiAKIAltdXRleF9sb2NrKCZhbGxfcV9tdXRleCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZnJlZXplIGFuZCByZWluaXQgYWxsIGV4aXN0aW5nIHF1ZXVlcy4gIEZyZWV6aW5nCisJICogaW52b2x2ZXMgc3luY2hyb25vdXMgd2FpdCBmb3IgYW4gUkNVIGdyYWNlIHBlcmlvZCBhbmQgZG9pbmcgaXQKKwkgKiBvbmUgYnkgb25lIG1heSB0YWtlIGEgbG9uZyB0aW1lLiAgU3RhcnQgZnJlZXppbmcgYWxsIHF1ZXVlcyBpbgorCSAqIG9uZSBzd29vcCBhbmQgdGhlbiB3YWl0IGZvciB0aGUgY29tcGxldGlvbnMgc28gdGhhdCBmcmVlemluZyBjYW4KKwkgKiB0YWtlIHBsYWNlIGluIHBhcmFsbGVsLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocSwgJmFsbF9xX2xpc3QsIGFsbF9xX25vZGUpCisJCWJsa19tcV9mcmVlemVfcXVldWVfc3RhcnQocSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmYWxsX3FfbGlzdCwgYWxsX3Ffbm9kZSkKKwkJYmxrX21xX2ZyZWV6ZV9xdWV1ZV93YWl0KHEpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmYWxsX3FfbGlzdCwgYWxsX3Ffbm9kZSkKIAkJYmxrX21xX3F1ZXVlX3JlaW5pdChxKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocSwgJmFsbF9xX2xpc3QsIGFsbF9xX25vZGUpCisJCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxKTsKKwogCW11dGV4X3VubG9jaygmYWxsX3FfbXV0ZXgpOwogCXJldHVybiBOT1RJRllfT0s7CiB9CkBAIC0yMDI0LDYgKzIwNDksOCBAQAogICovCiBpbnQgYmxrX21xX2FsbG9jX3RhZ19zZXQoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpCiB7CisJQlVJTERfQlVHX09OKEJMS19NUV9NQVhfREVQVEggPiAxIDw8IEJMS19NUV9VTklRVUVfVEFHX0JJVFMpOworCiAJaWYgKCFzZXQtPm5yX2h3X3F1ZXVlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFzZXQtPnF1ZXVlX2RlcHRoKQpkaWZmIC0tZ2l0IGEvYmxvY2svaW9wcmlvLmMgYi9ibG9jay9pb3ByaW8uYwppbmRleCBlNTAxNzBjLi4zMTY2NmM5IDEwMDY0NAotLS0gYS9ibG9jay9pb3ByaW8uYworKysgYi9ibG9jay9pb3ByaW8uYwpAQCAtMTU3LDE0ICsxNTcsMTYgQEAKIAogaW50IGlvcHJpb19iZXN0KHVuc2lnbmVkIHNob3J0IGFwcmlvLCB1bnNpZ25lZCBzaG9ydCBicHJpbykKIHsKLQl1bnNpZ25lZCBzaG9ydCBhY2xhc3MgPSBJT1BSSU9fUFJJT19DTEFTUyhhcHJpbyk7Ci0JdW5zaWduZWQgc2hvcnQgYmNsYXNzID0gSU9QUklPX1BSSU9fQ0xBU1MoYnByaW8pOworCXVuc2lnbmVkIHNob3J0IGFjbGFzczsKKwl1bnNpZ25lZCBzaG9ydCBiY2xhc3M7CiAKLQlpZiAoYWNsYXNzID09IElPUFJJT19DTEFTU19OT05FKQotCQlhY2xhc3MgPSBJT1BSSU9fQ0xBU1NfQkU7Ci0JaWYgKGJjbGFzcyA9PSBJT1BSSU9fQ0xBU1NfTk9ORSkKLQkJYmNsYXNzID0gSU9QUklPX0NMQVNTX0JFOworCWlmICghaW9wcmlvX3ZhbGlkKGFwcmlvKSkKKwkJYXByaW8gPSBJT1BSSU9fUFJJT19WQUxVRShJT1BSSU9fQ0xBU1NfQkUsIElPUFJJT19OT1JNKTsKKwlpZiAoIWlvcHJpb192YWxpZChicHJpbykpCisJCWJwcmlvID0gSU9QUklPX1BSSU9fVkFMVUUoSU9QUklPX0NMQVNTX0JFLCBJT1BSSU9fTk9STSk7CiAKKwlhY2xhc3MgPSBJT1BSSU9fUFJJT19DTEFTUyhhcHJpbyk7CisJYmNsYXNzID0gSU9QUklPX1BSSU9fQ0xBU1MoYnByaW8pOwogCWlmIChhY2xhc3MgPT0gYmNsYXNzKQogCQlyZXR1cm4gbWluKGFwcmlvLCBicHJpbyk7CiAJaWYgKGFjbGFzcyA+IGJjbGFzcykKZGlmZiAtLWdpdCBhL2Jsb2NrL3Njc2lfaW9jdGwuYyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwppbmRleCAxZTA1M2Q5Li4yODE2M2ZhIDEwMDY0NAotLS0gYS9ibG9jay9zY3NpX2lvY3RsLmMKKysrIGIvYmxvY2svc2NzaV9pb2N0bC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlfX3NldF9iaXQoR1BDTURfVkVSSUZZXzEwLCBmaWx0ZXItPnJlYWRfb2spOwogCV9fc2V0X2JpdChWRVJJRllfMTYsIGZpbHRlci0+cmVhZF9vayk7CiAJX19zZXRfYml0KFJFUE9SVF9MVU5TLCBmaWx0ZXItPnJlYWRfb2spOwotCV9fc2V0X2JpdChTRVJWSUNFX0FDVElPTl9JTiwgZmlsdGVyLT5yZWFkX29rKTsKKwlfX3NldF9iaXQoU0VSVklDRV9BQ1RJT05fSU5fMTYsIGZpbHRlci0+cmVhZF9vayk7CiAJX19zZXRfYml0KFJFQ0VJVkVfRElBR05PU1RJQywgZmlsdGVyLT5yZWFkX29rKTsKIAlfX3NldF9iaXQoTUFJTlRFTkFOQ0VfSU4sIGZpbHRlci0+cmVhZF9vayk7CiAJX19zZXRfYml0KEdQQ01EX1JFQURfQlVGRkVSX0NBUEFDSVRZLCBmaWx0ZXItPnJlYWRfb2spOwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgaW5fbGVuID8gV1JJVEUgOiBSRUFELCBfX0dGUF9XQUlUKTsKIAlpZiAoSVNfRVJSKHJxKSkgewogCQllcnIgPSBQVFJfRVJSKHJxKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBlcnJvcl9mcmVlX2J1ZmZlcjsKIAl9CiAJYmxrX3JxX3NldF9ibG9ja19wYyhycSk7CiAKQEAgLTUzMSw5ICs1MzEsMTEgQEAKIAl9CiAJCiBlcnJvcjoKKwlibGtfcHV0X3JlcXVlc3QocnEpOworCitlcnJvcl9mcmVlX2J1ZmZlcjoKIAlrZnJlZShidWZmZXIpOwotCWlmIChycSkKLQkJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKKwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZ19zY3NpX2lvY3RsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvS2NvbmZpZyBiL2RyaXZlcnMvS2NvbmZpZwppbmRleCAxYTY5M2QzLi5hZjAyYThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9LY29uZmlnCkBAIC0xLDUgKzEsNyBAQAogbWVudSAiRGV2aWNlIERyaXZlcnMiCiAKK3NvdXJjZSAiZHJpdmVycy9hbWJhL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9iYXNlL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9idXMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL2doZXMuYyBiL2RyaXZlcnMvYWNwaS9hcGVpL2doZXMuYwppbmRleCBmYzVmNzgwLi4xYjZhYTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvZ2hlcy5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZ2VuX3Bvb2wgKmdoZXNfZXN0YXR1c19wb29sOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2hlc19lc3RhdHVzX3Bvb2xfc2l6ZV9yZXF1ZXN0OwogCi1zdHJ1Y3QgZ2hlc19lc3RhdHVzX2NhY2hlICpnaGVzX2VzdGF0dXNfY2FjaGVzW0dIRVNfRVNUQVRVU19DQUNIRVNfU0laRV07CitzdGF0aWMgc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSAqZ2hlc19lc3RhdHVzX2NhY2hlc1tHSEVTX0VTVEFUVVNfQ0FDSEVTX1NJWkVdOwogc3RhdGljIGF0b21pY190IGdoZXNfZXN0YXR1c19jYWNoZV9hbGxvY2VkOwogCiBzdGF0aWMgaW50IGdoZXNfaW9yZW1hcF9pbml0KHZvaWQpCkBAIC03MzgsMjAgKzczOCw2IEBACiAKIHN0YXRpYyBpbnQgZ2hlc19wYW5pY190aW1lb3V0CV9fcmVhZF9tb3N0bHkgPSAzMDsKIAotc3RhdGljIHN0cnVjdCBsbGlzdF9ub2RlICpsbGlzdF9ub2Rlc19yZXZlcnNlKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpCi17Ci0Jc3RydWN0IGxsaXN0X25vZGUgKm5leHQsICp0YWlsID0gTlVMTDsKLQotCXdoaWxlIChsbG5vZGUpIHsKLQkJbmV4dCA9IGxsbm9kZS0+bmV4dDsKLQkJbGxub2RlLT5uZXh0ID0gdGFpbDsKLQkJdGFpbCA9IGxsbm9kZTsKLQkJbGxub2RlID0gbmV4dDsKLQl9Ci0KLQlyZXR1cm4gdGFpbDsKLX0KLQogc3RhdGljIHZvaWQgZ2hlc19wcm9jX2luX2lycShzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKQogewogCXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsICpuZXh0OwpAQCAtNzY1LDcgKzc1MSw3IEBACiAJICogQmVjYXVzZSB0aGUgdGltZSBvcmRlciBvZiBlc3RhdHVzIGluIGxpc3QgaXMgcmV2ZXJzZWQsCiAJICogcmV2ZXJ0IGl0IGJhY2sgdG8gcHJvcGVyIG9yZGVyLgogCSAqLwotCWxsbm9kZSA9IGxsaXN0X25vZGVzX3JldmVyc2UobGxub2RlKTsKKwlsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsbm9kZSk7CiAJd2hpbGUgKGxsbm9kZSkgewogCQluZXh0ID0gbGxub2RlLT5uZXh0OwogCQllc3RhdHVzX25vZGUgPSBsbGlzdF9lbnRyeShsbG5vZGUsIHN0cnVjdCBnaGVzX2VzdGF0dXNfbm9kZSwKQEAgLTc5OCw3ICs3ODQsNyBAQAogCSAqIEJlY2F1c2UgdGhlIHRpbWUgb3JkZXIgb2YgZXN0YXR1cyBpbiBsaXN0IGlzIHJldmVyc2VkLAogCSAqIHJldmVydCBpdCBiYWNrIHRvIHByb3BlciBvcmRlci4KIAkgKi8KLQlsbG5vZGUgPSBsbGlzdF9ub2Rlc19yZXZlcnNlKGxsbm9kZSk7CisJbGxub2RlID0gbGxpc3RfcmV2ZXJzZV9vcmRlcihsbG5vZGUpOwogCXdoaWxlIChsbG5vZGUpIHsKIAkJZXN0YXR1c19ub2RlID0gbGxpc3RfZW50cnkobGxub2RlLCBzdHJ1Y3QgZ2hlc19lc3RhdHVzX25vZGUsCiAJCQkJCSAgIGxsbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMgYi9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMKaW5kZXggZWQxMjJlMS4uNzU1NmU3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYwpAQCAtMjkwLDYgKzI5MCwxNCBAQAogCQkgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWb3N0cm8gMzQ0NiIpLAogCQl9LAogCX0sCisJeworCS5jYWxsYmFjayA9IGRtaV9kaXNhYmxlX29zaV93aW44LAorCS5pZGVudCA9ICJEZWxsIFZvc3RybyAzNTQ2IiwKKwkubWF0Y2hlcyA9IHsKKwkJICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWb3N0cm8gMzU0NiIpLAorCQl9LAorCX0sCiAKIAkvKgogCSAqIEJJT1MgaW52b2NhdGlvbiBvZiBfT1NJKExpbnV4KSBpcyBhbG1vc3QgYWx3YXlzIGEgQklPUyBidWcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMgYi9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMKaW5kZXggMTQzZWM2ZS4uN2RiMTkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RldmljZV9wbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9kZXZpY2VfcG0uYwpAQCAtODc4LDcgKzg3OCw3IEBACiAJCXJldHVybiAwOwogCiAJdGFyZ2V0X3N0YXRlID0gYWNwaV90YXJnZXRfc3lzdGVtX3N0YXRlKCk7Ci0Jd2FrZXVwID0gZGV2aWNlX21heV93YWtldXAoZGV2KTsKKwl3YWtldXAgPSBkZXZpY2VfbWF5X3dha2V1cChkZXYpICYmIGFjcGlfZGV2aWNlX2Nhbl93YWtldXAoYWRldik7CiAJZXJyb3IgPSBhY3BpX2RldmljZV93YWtldXAoYWRldiwgdGFyZ2V0X3N0YXRlLCB3YWtldXApOwogCWlmICh3YWtldXAgJiYgZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggODA3YTg4YS4uOWQ3NWVhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTExNjQsNyArMTE2NCw4IEBACiAJCXJldHVybiB0cnVlOwogCiAJZm9yIChpID0gMDsgaSA8IHZpZGVvLT5hdHRhY2hlZF9jb3VudDsgaSsrKSB7Ci0JCWlmICh2aWRlby0+YXR0YWNoZWRfYXJyYXlbaV0uYmluZF9pbmZvID09IGRldmljZSkKKwkJaWYgKCh2aWRlby0+YXR0YWNoZWRfYXJyYXlbaV0udmFsdWUuaW50X3ZhbCAmIDB4ZmZmKSA9PQorCQkgICAgKGRldmljZS0+ZGV2aWNlX2lkICYgMHhmZmYpKQogCQkJcmV0dXJuIHRydWU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvS2NvbmZpZyBiL2RyaXZlcnMvYW1iYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNWM5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FtYmEvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25maWcgQVJNX0FNQkEKKwlib29sCisKK2lmIEFSTV9BTUJBCisKK2NvbmZpZyBURUdSQV9BSEIKKwlib29sICJFbmFibGUgQUhCIGRyaXZlciBmb3IgTlZJRElBIFRlZ3JhIFNvQ3MiCisJZGVmYXVsdCB5IGlmIEFSQ0hfVEVHUkEKKwloZWxwCisJICBBZGRzIEFIQiBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkgZm9yIE5WSURJQSBUZWdyYSBTb0NzLAorCSAgd2hpY2ggY29udHJvbHMgQUhCIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gYW5kIHNvbWUgcGVyZm9ybWFuY2UKKwkgIHBhcmFtZXRlcnMgKHByaW9yaXR5LCBwcmVmZXRjaCBzaXplKS4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCA1ZjAzOWYxLi40OWYxZTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC02MCw2ICs2MCw3IEBACiAJLyogYm9hcmQgSURzIGJ5IGZlYXR1cmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyICovCiAJYm9hcmRfYWhjaSwKIAlib2FyZF9haGNpX2lnbl9pZmVyciwKKwlib2FyZF9haGNpX25vbXNpLAogCWJvYXJkX2FoY2lfbm9uY3EsCiAJYm9hcmRfYWhjaV9ub3NudGYsCiAJYm9hcmRfYWhjaV95ZXNfZmJzLApAQCAtMTIxLDYgKzEyMiwxMyBAQAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKKwlbYm9hcmRfYWhjaV9ub21zaV0gPSB7CisJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX05PX01TSSksCisJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKKwkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAorCX0sCiAJW2JvYXJkX2FoY2lfbm9uY3FdID0gewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19OT19OQ1EpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKQEAgLTMxMyw2ICszMjEsMTQgQEAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDhjODcpLCBib2FyZF9haGNpIH0sIC8qIDkgU2VyaWVzIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDhjOGUpLCBib2FyZF9haGNpIH0sIC8qIDkgU2VyaWVzIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDhjOGYpLCBib2FyZF9haGNpIH0sIC8qIDkgU2VyaWVzIFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDlkMDMpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtTFAgQUhDSSAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4OWQwNSksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1MUCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHg5ZDA3KSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUxQIFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExMDMpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtSCBBSENJICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTAzKSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUggUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4YTEwNSksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1IIFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExMDcpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtSCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTBmKSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUggUkFJRCAqLwogCiAJLyogSk1pY3JvbiAzNjAvMS8zLzUvNiwgbWF0Y2ggY2xhc3MgdG8gYXZvaWQgSURFIGZ1bmN0aW9uICovCiAJeyBQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCkBAIC00NzUsMTAgKzQ5MSwxMSBAQAogCXsgUENJX1ZERVZJQ0UoQVNNRURJQSwgMHgwNjEyKSwgYm9hcmRfYWhjaSB9LAkvKiBBU00xMDYyICovCiAKIAkvKgotCSAqIFNhbXN1bmcgU1NEcyBmb3VuZCBvbiBzb21lIG1hY2Jvb2tzLiAgTkNRIHRpbWVzIG91dC4KLQkgKiBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzMxCisJICogU2Ftc3VuZyBTU0RzIGZvdW5kIG9uIHNvbWUgbWFjYm9va3MuICBOQ1EgdGltZXMgb3V0IGlmIE1TSSBpcworCSAqIGVuYWJsZWQuICBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzMxCiAJICovCi0JeyBQQ0lfVkRFVklDRShTQU1TVU5HLCAweDE2MDApLCBib2FyZF9haGNpX25vbmNxIH0sCisJeyBQQ0lfVkRFVklDRShTQU1TVU5HLCAweDE2MDApLCBib2FyZF9haGNpX25vbXNpIH0sCisJeyBQQ0lfVkRFVklDRShTQU1TVU5HLCAweGE4MDApLCBib2FyZF9haGNpX25vbXNpIH0sCiAKIAkvKiBFbm1vdHVzICovCiAJeyBQQ0lfREVWSUNFKDB4MWM0NCwgMHg4MDAwKSwgYm9hcmRfYWhjaSB9LApAQCAtNTE0LDEyICs1MzEsOSBAQAogc3RhdGljIHZvaWQgYWhjaV9wY2lfc2F2ZV9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJIHN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYpCiB7Ci0JdW5zaWduZWQgaW50IGZvcmNlX3BvcnRfbWFwID0gMDsKLQl1bnNpZ25lZCBpbnQgbWFza19wb3J0X21hcCA9IDA7Ci0KIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiAmJiBwZGV2LT5kZXZpY2UgPT0gMHgyMzYxKSB7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJKTUIzNjEgaGFzIG9ubHkgb25lIHBvcnRcbiIpOwotCQlmb3JjZV9wb3J0X21hcCA9IDE7CisJCWhwcml2LT5mb3JjZV9wb3J0X21hcCA9IDE7CiAJfQogCiAJLyoKQEAgLTUyOSw5ICs1NDMsOSBAQAogCSAqLwogCWlmIChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX01WX1BBVEEpIHsKIAkJaWYgKHBkZXYtPmRldmljZSA9PSAweDYxMjEpCi0JCQltYXNrX3BvcnRfbWFwID0gMHgzOworCQkJaHByaXYtPm1hc2tfcG9ydF9tYXAgPSAweDM7CiAJCWVsc2UKLQkJCW1hc2tfcG9ydF9tYXAgPSAweGY7CisJCQlocHJpdi0+bWFza19wb3J0X21hcCA9IDB4ZjsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwKIAkJCSAgIkRpc2FibGluZyB5b3VyIFBBVEEgcG9ydC4gVXNlIHRoZSBib290IG9wdGlvbiAnYWhjaS5tYXJ2ZWxsX2VuYWJsZT0wJyB0byBhdm9pZCB0aGlzLlxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYWhjaS5jIGIvZHJpdmVycy9hdGEvbGliYWhjaS5jCmluZGV4IDVlYjYxYzkuLjk3NjgzZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmFoY2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhaGNpLmMKQEAgLTE3NzgsMTYgKzE3NzgsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFoY2lfdXBkYXRlX2ludHJfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgdm9pZCBhaGNpX3BvcnRfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gYWhjaV9wb3J0X2Jhc2UoYXApOwotCXN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXUzMiBzdGF0dXM7CiAKIAlzdGF0dXMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0lSUV9TVEFUKTsKIAl3cml0ZWwoc3RhdHVzLCBwb3J0X21taW8gKyBQT1JUX0lSUV9TVEFUKTsKIAotCWF0b21pY19vcihzdGF0dXMsICZwcC0+aW50cl9zdGF0dXMpOworCWFoY2lfaGFuZGxlX3BvcnRfaW50ZXJydXB0KGFwLCBwb3J0X21taW8sIHN0YXR1cyk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhaGNpX3BvcnRfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKQEAgLTE4MDgsMzQgKzE4MDcsNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotaXJxcmV0dXJuX3QgYWhjaV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQotewotCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9pbnN0YW5jZTsKLQlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOwotCXUzMiBpcnFfbWFza2VkID0gaHByaXYtPnBvcnRfbWFwOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgewotCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwOwotCi0JCWlmICghKGlycV9tYXNrZWQgJiAoMSA8PCBpKSkpCi0JCQljb250aW51ZTsKLQotCQlhcCA9IGhvc3QtPnBvcnRzW2ldOwotCQlpZiAoYXApIHsKLQkJCWFoY2lfcG9ydF90aHJlYWRfZm4oaXJxLCBhcCk7Ci0JCQlWUFJJTlRLKCJwb3J0ICV1XG4iLCBpKTsKLQkJfSBlbHNlIHsKLQkJCVZQUklOVEsoInBvcnQgJXUgKG5vIGlycSlcbiIsIGkpOwotCQkJaWYgKGF0YV9yYXRlbGltaXQoKSkKLQkJCQlkZXZfd2Fybihob3N0LT5kZXYsCi0JCQkJCSAiaW50ZXJydXB0IG9uIGRpc2FibGVkIHBvcnQgJXVcbiIsIGkpOwotCQl9Ci0JfQotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWhjaV9tdWx0aV9pcnFzX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBkZXZfaW5zdGFuY2U7CkBAIC0xODc1LDYgKzE4NDYsOCBAQAogCiAJaXJxX21hc2tlZCA9IGlycV9zdGF0ICYgaHByaXYtPnBvcnRfbWFwOwogCisJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKKwogCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKIAkJc3RydWN0IGF0YV9wb3J0ICphcDsKIApAQCAtMTg4Myw3ICsxODU2LDcgQEAKIAogCQlhcCA9IGhvc3QtPnBvcnRzW2ldOwogCQlpZiAoYXApIHsKLQkJCWFoY2lfdXBkYXRlX2ludHJfc3RhdHVzKGFwKTsKKwkJCWFoY2lfcG9ydF9pbnRyKGFwKTsKIAkJCVZQUklOVEsoInBvcnQgJXVcbiIsIGkpOwogCQl9IGVsc2UgewogCQkJVlBSSU5USygicG9ydCAldSAobm8gaXJxKVxuIiwgaSk7CkBAIC0xOTA2LDkgKzE4NzksMTEgQEAKIAkgKi8KIAl3cml0ZWwoaXJxX3N0YXQsIG1taW8gKyBIT1NUX0lSUV9TVEFUKTsKIAorCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKKwogCVZQUklOVEsoIkVYSVRcbiIpOwogCi0JcmV0dXJuIGhhbmRsZWQgPyBJUlFfV0FLRV9USFJFQUQgOiBJUlFfTk9ORTsKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAogdW5zaWduZWQgaW50IGFoY2lfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKQEAgLTIzMjAsOCArMjI5NSwxMyBAQAogCSAqLwogCXBwLT5pbnRyX21hc2sgPSBERUZfUE9SVF9JUlE7CiAKLQlzcGluX2xvY2tfaW5pdCgmcHAtPmxvY2spOwotCWFwLT5sb2NrID0gJnBwLT5sb2NrOworCS8qCisJICogU3dpdGNoIHRvIHBlci1wb3J0IGxvY2tpbmcgaW4gY2FzZSBlYWNoIHBvcnQgaGFzIGl0cyBvd24gTVNJIHZlY3Rvci4KKwkgKi8KKwlpZiAoKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTVVMVElfTVNJKSkgeworCQlzcGluX2xvY2tfaW5pdCgmcHAtPmxvY2spOworCQlhcC0+bG9jayA9ICZwcC0+bG9jazsKKwl9CiAKIAlhcC0+cHJpdmF0ZV9kYXRhID0gcHA7CiAKQEAgLTI0ODIsMzEgKzI0NjIsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBhaGNpX2hvc3RfYWN0aXZhdGVfc2luZ2xlX2lycShzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIGludCBpcnEsCi0JCQkJCSBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpCi17Ci0JaW50IGksIHJjOwotCi0JcmMgPSBhdGFfaG9zdF9zdGFydChob3N0KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJjID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShob3N0LT5kZXYsIGlycSwgYWhjaV9zaW5nbGVfaXJxX2ludHIsCi0JCQkJICAgICAgIGFoY2lfdGhyZWFkX2ZuLCBJUlFGX1NIQVJFRCwKLQkJCQkgICAgICAgZGV2X2RyaXZlcl9zdHJpbmcoaG9zdC0+ZGV2KSwgaG9zdCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9wb3J0czsgaSsrKQotCQlhdGFfcG9ydF9kZXNjKGhvc3QtPnBvcnRzW2ldLCAiaXJxICVkIiwgaXJxKTsKLQotCXJjID0gYXRhX2hvc3RfcmVnaXN0ZXIoaG9zdCwgc2h0KTsKLQlpZiAocmMpCi0JCWRldm1fZnJlZV9pcnEoaG9zdC0+ZGV2LCBpcnEsIGhvc3QpOwotCi0JcmV0dXJuIHJjOwotfQotCiAvKioKICAqCWFoY2lfaG9zdF9hY3RpdmF0ZSAtIHN0YXJ0IEFIQ0kgaG9zdCwgcmVxdWVzdCBJUlFzIGFuZCByZWdpc3RlciBpdAogICoJQGhvc3Q6IHRhcmdldCBBVEEgaG9zdApAQCAtMjUzMiw3ICsyNDg3LDggQEAKIAlpZiAoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR19NVUxUSV9NU0kpCiAJCXJjID0gYWhjaV9ob3N0X2FjdGl2YXRlX211bHRpX2lycXMoaG9zdCwgaXJxLCBzaHQpOwogCWVsc2UKLQkJcmMgPSBhaGNpX2hvc3RfYWN0aXZhdGVfc2luZ2xlX2lycShob3N0LCBpcnEsIHNodCk7CisJCXJjID0gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgaXJxLCBhaGNpX3NpbmdsZV9pcnFfaW50ciwKKwkJCQkgICAgICAgSVJRRl9TSEFSRUQsIHNodCk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWhjaV9ob3N0X2FjdGl2YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IDA1ODZmNjYuLmRkNDVjNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMTE2NCw3ICsxMTY0LDcgQEAKIAogCQlkZXB0aCA9IG1pbihzZGV2LT5ob3N0LT5jYW5fcXVldWUsIGF0YV9pZF9xdWV1ZV9kZXB0aChkZXYtPmlkKSk7CiAJCWRlcHRoID0gbWluKEFUQV9NQVhfUVVFVUUgLSAxLCBkZXB0aCk7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBkZXB0aCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKIAl9CiAKIAlibGtfcXVldWVfZmx1c2hfcXVldWVhYmxlKHEsIGZhbHNlKTsKQEAgLTEyNDMsMjEgKzEyNDMsMTcgQEAKICAqCUBhcDogQVRBIHBvcnQgdG8gd2hpY2ggdGhlIGRldmljZSBjaGFuZ2UgdGhlIHF1ZXVlIGRlcHRoCiAgKglAc2RldjogU0NTSSBkZXZpY2UgdG8gY29uZmlndXJlIHF1ZXVlIGRlcHRoIGZvcgogICoJQHF1ZXVlX2RlcHRoOiBuZXcgcXVldWUgZGVwdGgKLSAqCUByZWFzb246IGNhbGxpbmcgY29udGV4dAogICoKICAqCWxpYnNhcyBhbmQgbGliYXRhIGhhdmUgZGlmZmVyZW50IGFwcHJvYWNoZXMgZm9yIGFzc29jaWF0aW5nIGEgc2RldiB0bwogICoJaXRzIGF0YV9wb3J0LgogICoKICAqLwogaW50IF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkgICAgIGludCBxdWV1ZV9kZXB0aCwgaW50IHJlYXNvbikKKwkJCSAgICAgaW50IHF1ZXVlX2RlcHRoKQogewogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJaWYgKHF1ZXVlX2RlcHRoIDwgMSB8fCBxdWV1ZV9kZXB0aCA9PSBzZGV2LT5xdWV1ZV9kZXB0aCkKIAkJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwogCkBAIC0xMjgyLDE1ICsxMjc4LDEzIEBACiAJaWYgKHNkZXYtPnF1ZXVlX2RlcHRoID09IHF1ZXVlX2RlcHRoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBxdWV1ZV9kZXB0aCk7Ci0JcmV0dXJuIHF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxdWV1ZV9kZXB0aCk7CiB9CiAKIC8qKgogICoJYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gU0NTSSBjYWxsYmFjayBmb3IgcXVldWUgZGVwdGggY29uZmlnCiAgKglAc2RldjogU0NTSSBkZXZpY2UgdG8gY29uZmlndXJlIHF1ZXVlIGRlcHRoIGZvcgogICoJQHF1ZXVlX2RlcHRoOiBuZXcgcXVldWUgZGVwdGgKLSAqCUByZWFzb246IGNhbGxpbmcgY29udGV4dAogICoKICAqCVRoaXMgaXMgbGliYXRhIHN0YW5kYXJkIGhvc3R0LT5jaGFuZ2VfcXVldWVfZGVwdGggY2FsbGJhY2suCiAgKglTQ1NJIHdpbGwgY2FsbCBpbnRvIHRoaXMgY2FsbGJhY2sgd2hlbiB1c2VyIHRyaWVzIHRvIHNldCBxdWV1ZQpAQCAtMTMwMiwxMiArMTI5NiwxMSBAQAogICoJUkVUVVJOUzoKICAqCU5ld2x5IGNvbmZpZ3VyZWQgcXVldWUgZGVwdGguCiAgKi8KLWludCBhdGFfc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXVldWVfZGVwdGgsCi0JCQkJaW50IHJlYXNvbikKK2ludCBhdGFfc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXVldWVfZGVwdGgpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KHNkZXYtPmhvc3QpOwogCi0JcmV0dXJuIF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChhcCwgc2RldiwgcXVldWVfZGVwdGgsIHJlYXNvbik7CisJcmV0dXJuIF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChhcCwgc2RldiwgcXVldWVfZGVwdGgpOwogfQogCiAvKioKQEAgLTM1NzAsNyArMzU2Myw3IEBACiAJCWF0YV9zY3NpX3JidWZfZmlsbCgmYXJncywgYXRhX3Njc2lvcF9yZWFkX2NhcCk7CiAJCWJyZWFrOwogCi0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlpZiAoKHNjc2ljbWRbMV0gJiAweDFmKSA9PSBTQUlfUkVBRF9DQVBBQ0lUWV8xNikKIAkJCWF0YV9zY3NpX3JidWZfZmlsbCgmYXJncywgYXRhX3Njc2lvcF9yZWFkX2NhcCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCmluZGV4IDA3YmM3ZTQuLjY1MDcxNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIAlob3N0X3ByaXYtPmNzcl9iYXNlID0gY3NyX2Jhc2U7CiAKIAlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+ZGV2Lm9mX25vZGUsIDApOwotCWlmIChpcnEgPCAwKSB7CisJaWYgKCFpcnEpIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImludmFsaWQgaXJxIGZyb20gcGxhdGZvcm1cbiIpOwogCQlnb3RvIGVycm9yX2V4aXRfd2l0aF9jbGVhbnVwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCBjZGY5OWZhLi4xZGI2ZjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC0xOTUxLDcgKzE5NTEsNyBAQAogCWF0YV9pZF9jX3N0cmluZyhkZXYtPmlkLCBtb2RlbF9udW0sIEFUQV9JRF9QUk9ELCBzaXplb2YobW9kZWxfbnVtKSk7CiAKIAlpZiAoc3RybmNtcChtb2RlbF9udW0sICJNYXh0b3IiLCA2KSA9PSAwKSB7Ci0JCWF0YV9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCAxLCBTQ1NJX1FERVBUSF9ERUZBVUxUKTsKKwkJYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIDEpOwogCQlhdGFfZGV2X25vdGljZShkZXYsICJEaXNhYmxpbmcgU1dOQ1EgbW9kZSAoZGVwdGggJXgpXG4iLAogCQkJICAgICAgIHNkZXYtPnF1ZXVlX2RlcHRoKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3JjYXIuYyBiL2RyaXZlcnMvYXRhL3NhdGFfcmNhci5jCmluZGV4IDYxZWI2ZDcuLmVhMWZiYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfcmNhci5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfcmNhci5jCkBAIC0xNDYsNiArMTQ2LDcgQEAKIGVudW0gc2F0YV9yY2FyX3R5cGUgewogCVJDQVJfR0VOMV9TQVRBLAogCVJDQVJfR0VOMl9TQVRBLAorCVJDQVJfUjhBNzc5MF9FUzFfU0FUQSwKIH07CiAKIHN0cnVjdCBzYXRhX3JjYXJfcHJpdiB7CkBAIC03NjMsNiArNzY0LDkgQEAKIAlhcC0+dWRtYV9tYXNrCT0gQVRBX1VETUE2OwogCWFwLT5mbGFncwl8PSBBVEFfRkxBR19TQVRBOwogCisJaWYgKHByaXYtPnR5cGUgPT0gUkNBUl9SOEE3NzkwX0VTMV9TQVRBKQorCQlhcC0+ZmxhZ3MJfD0gQVRBX0ZMQUdfTk9fRElQTTsKKwogCWlvYWRkci0+Y21kX2FkZHIgPSBiYXNlICsgU0RBVEFfUkVHOwogCWlvYWRkci0+Y3RsX2FkZHIgPSBiYXNlICsgU1NERVZDT05fUkVHOwogCWlvYWRkci0+c2NyX2FkZHIgPSBiYXNlICsgU0NSU1NUU19SRUc7CkBAIC03OTIsNiArNzk2LDcgQEAKIAkJc2F0YV9yY2FyX2dlbjFfcGh5X2luaXQocHJpdik7CiAJCWJyZWFrOwogCWNhc2UgUkNBUl9HRU4yX1NBVEE6CisJY2FzZSBSQ0FSX1I4QTc3OTBfRVMxX1NBVEE6CiAJCXNhdGFfcmNhcl9nZW4yX3BoeV9pbml0KHByaXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtODM4LDkgKzg0MywxNyBAQAogCQkuZGF0YSA9ICh2b2lkICopUkNBUl9HRU4yX1NBVEEKIAl9LAogCXsKKwkJLmNvbXBhdGlibGUgPSAicmVuZXNhcyxzYXRhLXI4YTc3OTAtZXMxIiwKKwkJLmRhdGEgPSAodm9pZCAqKVJDQVJfUjhBNzc5MF9FUzFfU0FUQQorCX0sCisJewogCQkuY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNhdGEtcjhhNzc5MSIsCiAJCS5kYXRhID0gKHZvaWQgKilSQ0FSX0dFTjJfU0FUQQogCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNhdGEtcjhhNzc5MyIsCisJCS5kYXRhID0gKHZvaWQgKilSQ0FSX0dFTjJfU0FUQQorCX0sCiAJeyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNhdGFfcmNhcl9tYXRjaCk7CkBAIC04NDksNyArODYyLDkgQEAKIAl7ICJzYXRhX3JjYXIiLCBSQ0FSX0dFTjFfU0FUQSB9LCAvKiBEZXByZWNhdGVkIGJ5ICJzYXRhLXI4YTc3NzkiICovCiAJeyAic2F0YS1yOGE3Nzc5IiwgUkNBUl9HRU4xX1NBVEEgfSwKIAl7ICJzYXRhLXI4YTc3OTAiLCBSQ0FSX0dFTjJfU0FUQSB9LAorCXsgInNhdGEtcjhhNzc5MC1lczEiLCBSQ0FSX1I4QTc3OTBfRVMxX1NBVEEgfSwKIAl7ICJzYXRhLXI4YTc3OTEiLCBSQ0FSX0dFTjJfU0FUQSB9LAorCXsgInNhdGEtcjhhNzc5MyIsIFJDQVJfR0VOMl9TQVRBIH0sCiAJeyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHNhdGFfcmNhcl9pZF90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCmluZGV4IDc2NTJlOGQuLjIxYjBiYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCkBAIC0xMjI1LDExICsxMjI1LDEzIEBACiAJY2FyZC0+Y29uZmlnX3JlZ3MgPSBwY2lfaW9tYXAoZGV2LCAwLCBDT05GSUdfUkFNX1NJWkUpOwogCWlmICghY2FyZC0+Y29uZmlnX3JlZ3MpIHsKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgY29uZmlnIHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uczsKIAl9CiAJY2FyZC0+YnVmZmVycyA9IHBjaV9pb21hcChkZXYsIDEsIERBVEFfUkFNX1NJWkUpOwogCWlmICghY2FyZC0+YnVmZmVycykgewogCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBkYXRhIGJ1ZmZlcnNcbiIpOworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bm1hcF9jb25maWc7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCmluZGV4IDYxYTMzZjQuLmRmMDQyMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCkBAIC0xNzEsMjAgKzE3MSwyMyBAQAogCSAgRHJpdmVycyBzaG91bGQgInNlbGVjdCIgdGhpcyBvcHRpb24gaWYgdGhleSBkZXNpcmUgdG8gdXNlIHRoZQogCSAgZGV2aWNlIGNvcmVkdW1wIG1lY2hhbmlzbS4KIAotY29uZmlnIERJU0FCTEVfREVWX0NPUkVEVU1QCi0JYm9vbCAiRGlzYWJsZSBkZXZpY2UgY29yZWR1bXAiIGlmIEVYUEVSVAorY29uZmlnIEFMTE9XX0RFVl9DT1JFRFVNUAorCWJvb2wgIkFsbG93IGRldmljZSBjb3JlZHVtcCIgaWYgRVhQRVJUCisJZGVmYXVsdCB5CiAJaGVscAotCSAgRGlzYWJsZSB0aGUgZGV2aWNlIGNvcmVkdW1wIG1lY2hhbmlzbSBkZXNwaXRlIGRyaXZlcnMgd2FudGluZyB0bwotCSAgdXNlIGl0OyB0aGlzIGFsbG93cyBmb3IgbW9yZSBzZW5zaXRpdmUgc3lzdGVtcyBvciBzeXN0ZW1zIHRoYXQKLQkgIGRvbid0IHdhbnQgdG8gZXZlciBhY2Nlc3MgdGhlIGluZm9ybWF0aW9uIHRvIG5vdCBoYXZlIHRoZSBjb2RlLAotCSAgbm9yIGtlZXAgYW55IGRhdGEuCisJICBUaGlzIG9wdGlvbiBjb250cm9scyBpZiB0aGUgZGV2aWNlIGNvcmVkdW1wIG1lY2hhbmlzbSBpcyBhdmFpbGFibGUgb3IKKwkgIG5vdDsgaWYgZGlzYWJsZWQsIHRoZSBtZWNoYW5pc20gd2lsbCBiZSBvbWl0dGVkIGV2ZW4gaWYgZHJpdmVycyB0aGF0CisJICBjYW4gdXNlIGl0IGFyZSBlbmFibGVkLgorCSAgU2F5ICdOJyBmb3IgbW9yZSBzZW5zaXRpdmUgc3lzdGVtcyBvciBzeXN0ZW1zIHRoYXQgZG9uJ3Qgd2FudAorCSAgdG8gZXZlciBhY2Nlc3MgdGhlIGluZm9ybWF0aW9uIHRvIG5vdCBoYXZlIHRoZSBjb2RlLCBub3Iga2VlcCBhbnkKKwkgIGRhdGEuCiAKLQkgIElmIHVuc3VyZSwgc2F5IE4uCisJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgREVWX0NPUkVEVU1QCiAJYm9vbAogCWRlZmF1bHQgeSBpZiBXQU5UX0RFVl9DT1JFRFVNUAotCWRlcGVuZHMgb24gIURJU0FCTEVfREVWX0NPUkVEVU1QCisJZGVwZW5kcyBvbiBBTExPV19ERVZfQ09SRURVTVAKIAogY29uZmlnIERFQlVHX0RSSVZFUgogCWJvb2wgIkRyaXZlciBDb3JlIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCAxNGQxNjI5Li44NDJkMDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTcyNCwxMiArNzI0LDEyIEBACiAJcmV0dXJuICZkaXItPmtvYmo7CiB9CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoZ2RwX211dGV4KTsKIAogc3RhdGljIHN0cnVjdCBrb2JqZWN0ICpnZXRfZGV2aWNlX3BhcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCiB7CiAJaWYgKGRldi0+Y2xhc3MpIHsKLQkJc3RhdGljIERFRklORV9NVVRFWChnZHBfbXV0ZXgpOwogCQlzdHJ1Y3Qga29iamVjdCAqa29iaiA9IE5VTEw7CiAJCXN0cnVjdCBrb2JqZWN0ICpwYXJlbnRfa29iajsKIAkJc3RydWN0IGtvYmplY3QgKms7CkBAIC03OTMsNyArNzkzLDkgQEAKIAkgICAgZ2x1ZV9kaXItPmtzZXQgIT0gJmRldi0+Y2xhc3MtPnAtPmdsdWVfZGlycykKIAkJcmV0dXJuOwogCisJbXV0ZXhfbG9jaygmZ2RwX211dGV4KTsKIAlrb2JqZWN0X3B1dChnbHVlX2Rpcik7CisJbXV0ZXhfdW5sb2NrKCZnZHBfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhbnVwX2RldmljZV9wYXJlbnQoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCmluZGV4IDQwYmMyZjQuLmZiODNkNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMKQEAgLTM2MSw5ICszNjEsMTkgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZGQtPmRldjsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChncGRfZGF0YS0+bmVlZF9yZXN0b3JlKQorCWlmIChncGRfZGF0YS0+bmVlZF9yZXN0b3JlID4gMCkKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAqIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmVlZF9yZXN0b3JlIGZsYWcgaXMgc3RpbGwgdW5rbm93biBhdCB0aGlzIHBvaW50LAorCSAqIHdlIHRydXN0IHRoYXQgcG1fZ2VucGRfcG93ZXJvZmYoKSBoYXMgdmVyaWZpZWQgdGhhdCB0aGUgZGV2aWNlIGlzCisJICogYWxyZWFkeSBydW50aW1lIFBNIHN1c3BlbmRlZC4KKwkgKi8KKwlpZiAoZ3BkX2RhdGEtPm5lZWRfcmVzdG9yZSA8IDApIHsKKwkJZ3BkX2RhdGEtPm5lZWRfcmVzdG9yZSA9IDE7CisJCXJldHVybiAwOworCX0KKwogCW11dGV4X3VubG9jaygmZ2VucGQtPmxvY2spOwogCiAJZ2VucGRfc3RhcnRfZGV2KGdlbnBkLCBkZXYpOwpAQCAtMzczLDcgKzM4Myw3IEBACiAJbXV0ZXhfbG9jaygmZ2VucGQtPmxvY2spOwogCiAJaWYgKCFyZXQpCi0JCWdwZF9kYXRhLT5uZWVkX3Jlc3RvcmUgPSB0cnVlOworCQlncGRfZGF0YS0+bmVlZF9yZXN0b3JlID0gMTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zODksMTIgKzM5OSwxNyBAQAogewogCXN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbl9kYXRhICpncGRfZGF0YSA9IHRvX2dwZF9kYXRhKHBkZCk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcGRkLT5kZXY7Ci0JYm9vbCBuZWVkX3Jlc3RvcmUgPSBncGRfZGF0YS0+bmVlZF9yZXN0b3JlOworCWludCBuZWVkX3Jlc3RvcmUgPSBncGRfZGF0YS0+bmVlZF9yZXN0b3JlOwogCi0JZ3BkX2RhdGEtPm5lZWRfcmVzdG9yZSA9IGZhbHNlOworCWdwZF9kYXRhLT5uZWVkX3Jlc3RvcmUgPSAwOwogCW11dGV4X3VubG9jaygmZ2VucGQtPmxvY2spOwogCiAJZ2VucGRfc3RhcnRfZGV2KGdlbnBkLCBkZXYpOworCisJLyoKKwkgKiBDYWxsIGdlbnBkX3Jlc3RvcmVfZGV2KCkgZm9yIHJlY2VudGx5IGFkZGVkIGRldmljZXMgdG9vIChuZWVkX3Jlc3RvcmUKKwkgKiBpcyBuZWdhdGl2ZSB0aGVuKS4KKwkgKi8KIAlpZiAobmVlZF9yZXN0b3JlKQogCQlnZW5wZF9yZXN0b3JlX2RldihnZW5wZCwgZGV2KTsKIApAQCAtNjAzLDYgKzYxOCw3IEBACiBzdGF0aWMgaW50IHBtX2dlbnBkX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZDsKKwlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW5fZGF0YSAqZ3BkX2RhdGE7CiAJYm9vbCAoKnN0b3Bfb2spKHN0cnVjdCBkZXZpY2UgKl9fZGV2KTsKIAlpbnQgcmV0OwogCkBAIC02MjgsNiArNjQ0LDE2IEBACiAJCXJldHVybiAwOwogCiAJbXV0ZXhfbG9jaygmZ2VucGQtPmxvY2spOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGFuIHVua25vd24gc3RhdGUgb2YgdGhlIG5lZWRfcmVzdG9yZSBmbGFnLCBpdCBtZWFucyBub25lCisJICogb2YgdGhlIHJ1bnRpbWUgUE0gY2FsbGJhY2tzIGhhcyBiZWVuIGludm9rZWQgeWV0LiBMZXQncyB1cGRhdGUgdGhlCisJICogZmxhZyB0byByZWZsZWN0IHRoYXQgdGhlIGN1cnJlbnQgc3RhdGUgaXMgYWN0aXZlLgorCSAqLworCWdwZF9kYXRhID0gdG9fZ3BkX2RhdGEoZGV2LT5wb3dlci5zdWJzeXNfZGF0YS0+ZG9tYWluX2RhdGEpOworCWlmIChncGRfZGF0YS0+bmVlZF9yZXN0b3JlIDwgMCkKKwkJZ3BkX2RhdGEtPm5lZWRfcmVzdG9yZSA9IDA7CisKIAlnZW5wZC0+aW5fcHJvZ3Jlc3MrKzsKIAlwbV9nZW5wZF9wb3dlcm9mZihnZW5wZCk7CiAJZ2VucGQtPmluX3Byb2dyZXNzLS07CkBAIC0xNDM3LDEyICsxNDYzLDEyIEBACiAJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOwogCiAJaWYgKGdlbnBkLT5hdHRhY2hfZGV2KQotCQlnZW5wZC0+YXR0YWNoX2RldihkZXYpOworCQlnZW5wZC0+YXR0YWNoX2RldihnZW5wZCwgZGV2KTsKIAogCW11dGV4X2xvY2soJmdwZF9kYXRhLT5sb2NrKTsKIAlncGRfZGF0YS0+YmFzZS5kZXYgPSBkZXY7CiAJbGlzdF9hZGRfdGFpbCgmZ3BkX2RhdGEtPmJhc2UubGlzdF9ub2RlLCAmZ2VucGQtPmRldl9saXN0KTsKLQlncGRfZGF0YS0+bmVlZF9yZXN0b3JlID0gZ2VucGQtPnN0YXR1cyA9PSBHUERfU1RBVEVfUE9XRVJfT0ZGOworCWdwZF9kYXRhLT5uZWVkX3Jlc3RvcmUgPSAtMTsKIAlncGRfZGF0YS0+dGQuY29uc3RyYWludF9jaGFuZ2VkID0gdHJ1ZTsKIAlncGRfZGF0YS0+dGQuZWZmZWN0aXZlX2NvbnN0cmFpbnRfbnMgPSAtMTsKIAltdXRleF91bmxvY2soJmdwZF9kYXRhLT5sb2NrKTsKQEAgLTE0OTksNyArMTUyNSw3IEBACiAJZ2VucGQtPm1heF9vZmZfdGltZV9jaGFuZ2VkID0gdHJ1ZTsKIAogCWlmIChnZW5wZC0+ZGV0YWNoX2RldikKLQkJZ2VucGQtPmRldGFjaF9kZXYoZGV2KTsKKwkJZ2VucGQtPmRldGFjaF9kZXYoZ2VucGQsIGRldik7CiAKIAlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOwogCkBAIC0xNTQ2LDcgKzE1NzIsNyBAQAogCiAJcHNkID0gZGV2X3RvX3BzZChkZXYpOwogCWlmIChwc2QgJiYgcHNkLT5kb21haW5fZGF0YSkKLQkJdG9fZ3BkX2RhdGEocHNkLT5kb21haW5fZGF0YSktPm5lZWRfcmVzdG9yZSA9IHZhbDsKKwkJdG9fZ3BkX2RhdGEocHNkLT5kb21haW5fZGF0YSktPm5lZWRfcmVzdG9yZSA9IHZhbCA/IDEgOiAwOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcKaW5kZXggOGEzZjUxZi4uZGI5ZDAwYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZworKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcKQEAgLTMsMTIgKzMsMTUgQEAKICMgc3Vic3lzdGVtcyBzaG91bGQgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBzeW1ib2xzLgogCiBjb25maWcgUkVHTUFQCi0JZGVmYXVsdCB5IGlmIChSRUdNQVBfSTJDIHx8IFJFR01BUF9TUEkgfHwgUkVHTUFQX1NQTUkgfHwgUkVHTUFQX01NSU8gfHwgUkVHTUFQX0lSUSkKKwlkZWZhdWx0IHkgaWYgKFJFR01BUF9JMkMgfHwgUkVHTUFQX1NQSSB8fCBSRUdNQVBfU1BNSSB8fCBSRUdNQVBfQUM5NyB8fCBSRUdNQVBfTU1JTyB8fCBSRUdNQVBfSVJRKQogCXNlbGVjdCBMWk9fQ09NUFJFU1MKIAlzZWxlY3QgTFpPX0RFQ09NUFJFU1MKIAlzZWxlY3QgSVJRX0RPTUFJTiBpZiBSRUdNQVBfSVJRCiAJYm9vbAogCitjb25maWcgUkVHTUFQX0FDOTcKKwl0cmlzdGF0ZQorCiBjb25maWcgUkVHTUFQX0kyQwogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvTWFrZWZpbGUgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL01ha2VmaWxlCmluZGV4IGE3YzY3MGIuLjBhNTMzNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKIG9iai0kKENPTkZJR19SRUdNQVApICs9IHJlZ21hcC5vIHJlZ2NhY2hlLm8KIG9iai0kKENPTkZJR19SRUdNQVApICs9IHJlZ2NhY2hlLXJidHJlZS5vIHJlZ2NhY2hlLWx6by5vIHJlZ2NhY2hlLWZsYXQubwogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKSArPSByZWdtYXAtZGVidWdmcy5vCitvYmotJChDT05GSUdfUkVHTUFQX0FDOTcpICs9IHJlZ21hcC1hYzk3Lm8KIG9iai0kKENPTkZJR19SRUdNQVBfSTJDKSArPSByZWdtYXAtaTJjLm8KIG9iai0kKENPTkZJR19SRUdNQVBfU1BJKSArPSByZWdtYXAtc3BpLm8KIG9iai0kKENPTkZJR19SRUdNQVBfU1BNSSkgKz0gcmVnbWFwLXNwbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1mbGF0LmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWZsYXQuYwppbmRleCBkOTc2MmU0Li4wMjQ2ZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWZsYXQuYworKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWZsYXQuYwpAQCAtMTAsOSArMTAsOSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbHpvLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWx6by5jCmluZGV4IGUyMTBhNmQuLjJkNTNmNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbHpvLmMKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1sem8uYwpAQCAtMTAsOSArMTAsOSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9sem8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLXJidHJlZS5jIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1yYnRyZWUuYwppbmRleCBmM2U4ZmUwLi5kNDUzYTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLXJidHJlZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtcmJ0cmVlLmMKQEAgLTEwLDExICsxMCwxMSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMKaW5kZXggZjEyODBkYy4uZjM3M2MzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYwpAQCAtMTAsMTIgKzEwLDEyIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9ic2VhcmNoLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcmVnbWFwLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC0zNiw2ICszNiwyMyBAQAogCWlmICghbWFwLT5udW1fcmVnX2RlZmF1bHRzX3JhdykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgcmVnX2RlZmF1bHRzICovCisJZm9yIChjb3VudCA9IDAsIGkgPSAwOyBpIDwgbWFwLT5udW1fcmVnX2RlZmF1bHRzX3JhdzsgaSsrKQorCQlpZiAoIXJlZ21hcF92b2xhdGlsZShtYXAsIGkgKiBtYXAtPnJlZ19zdHJpZGUpKQorCQkJY291bnQrKzsKKworCS8qIGFsbCByZWdpc3RlcnMgYXJlIHZvbGF0aWxlLCBzbyBqdXN0IGJ5cGFzcyAqLworCWlmICghY291bnQpIHsKKwkJbWFwLT5jYWNoZV9ieXBhc3MgPSB0cnVlOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAtPm51bV9yZWdfZGVmYXVsdHMgPSBjb3VudDsKKwltYXAtPnJlZ19kZWZhdWx0cyA9IGttYWxsb2NfYXJyYXkoY291bnQsIHNpemVvZihzdHJ1Y3QgcmVnX2RlZmF1bHQpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghbWFwLT5yZWdfZGVmYXVsdHMpCisJCXJldHVybiAtRU5PTUVNOworCiAJaWYgKCFtYXAtPnJlZ19kZWZhdWx0c19yYXcpIHsKIAkJdTMyIGNhY2hlX2J5cGFzcyA9IG1hcC0+Y2FjaGVfYnlwYXNzOwogCQlkZXZfd2FybihtYXAtPmRldiwgIk5vIGNhY2hlIGRlZmF1bHRzLCByZWFkaW5nIGJhY2sgZnJvbSBIV1xuIik7CkBAIC00Myw0MCArNjAsMjUgQEAKIAkJLyogQnlwYXNzIHRoZSBjYWNoZSBhY2Nlc3MgdGlsbCBkYXRhIHJlYWQgZnJvbSBIVyovCiAJCW1hcC0+Y2FjaGVfYnlwYXNzID0gMTsKIAkJdG1wX2J1ZiA9IGttYWxsb2MobWFwLT5jYWNoZV9zaXplX3JhdywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdG1wX2J1ZikKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIXRtcF9idWYpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9mcmVlOworCQl9CiAJCXJldCA9IHJlZ21hcF9yYXdfcmVhZChtYXAsIDAsIHRtcF9idWYsCiAJCQkJICAgICAgbWFwLT5udW1fcmVnX2RlZmF1bHRzX3Jhdyk7CiAJCW1hcC0+Y2FjaGVfYnlwYXNzID0gY2FjaGVfYnlwYXNzOwotCQlpZiAocmV0IDwgMCkgewotCQkJa2ZyZWUodG1wX2J1Zik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJfY2FjaGVfZnJlZTsKKwogCQltYXAtPnJlZ19kZWZhdWx0c19yYXcgPSB0bXBfYnVmOwogCQltYXAtPmNhY2hlX2ZyZWUgPSAxOwogCX0KIAotCS8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiByZWdfZGVmYXVsdHMgKi8KLQlmb3IgKGNvdW50ID0gMCwgaSA9IDA7IGkgPCBtYXAtPm51bV9yZWdfZGVmYXVsdHNfcmF3OyBpKyspIHsKLQkJdmFsID0gcmVnY2FjaGVfZ2V0X3ZhbChtYXAsIG1hcC0+cmVnX2RlZmF1bHRzX3JhdywgaSk7Ci0JCWlmIChyZWdtYXBfdm9sYXRpbGUobWFwLCBpICogbWFwLT5yZWdfc3RyaWRlKSkKLQkJCWNvbnRpbnVlOwotCQljb3VudCsrOwotCX0KLQotCW1hcC0+cmVnX2RlZmF1bHRzID0ga21hbGxvYyhjb3VudCAqIHNpemVvZihzdHJ1Y3QgcmVnX2RlZmF1bHQpLAotCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmICghbWFwLT5yZWdfZGVmYXVsdHMpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZTsKLQl9Ci0KIAkvKiBmaWxsIHRoZSByZWdfZGVmYXVsdHMgKi8KLQltYXAtPm51bV9yZWdfZGVmYXVsdHMgPSBjb3VudDsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG1hcC0+bnVtX3JlZ19kZWZhdWx0c19yYXc7IGkrKykgewotCQl2YWwgPSByZWdjYWNoZV9nZXRfdmFsKG1hcCwgbWFwLT5yZWdfZGVmYXVsdHNfcmF3LCBpKTsKIAkJaWYgKHJlZ21hcF92b2xhdGlsZShtYXAsIGkgKiBtYXAtPnJlZ19zdHJpZGUpKQogCQkJY29udGludWU7CisJCXZhbCA9IHJlZ2NhY2hlX2dldF92YWwobWFwLCBtYXAtPnJlZ19kZWZhdWx0c19yYXcsIGkpOwogCQltYXAtPnJlZ19kZWZhdWx0c1tqXS5yZWcgPSBpICogbWFwLT5yZWdfc3RyaWRlOwogCQltYXAtPnJlZ19kZWZhdWx0c1tqXS5kZWYgPSB2YWw7CiAJCWorKzsKQEAgLTg0LDkgKzg2LDEwIEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX2NhY2hlX2ZyZWU6CisJa2ZyZWUodG1wX2J1Zik7CiBlcnJfZnJlZToKLQlpZiAobWFwLT5jYWNoZV9mcmVlKQotCQlrZnJlZShtYXAtPnJlZ19kZWZhdWx0c19yYXcpOworCWtmcmVlKG1hcC0+cmVnX2RlZmF1bHRzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTAsNiArMTUzLDggQEAKIAkJcmV0ID0gcmVnY2FjaGVfaHdfaW5pdChtYXApOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CisJCWlmIChtYXAtPmNhY2hlX2J5cGFzcykKKwkJCXJldHVybiAwOwogCX0KIAogCWlmICghbWFwLT5tYXhfcmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1hYzk3LmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1hYzk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjNDVkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWFjOTcuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIFJlZ2lzdGVyIG1hcCBhY2Nlc3MgQVBJIC0gQUMnOTcgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAyMDEzIExpbmFybyBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKworYm9vbCByZWdtYXBfYWM5N19kZWZhdWx0X3ZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgQUM5N19SRVNFVDoKKwljYXNlIEFDOTdfUE9XRVJET1dOOgorCWNhc2UgQUM5N19JTlRfUEFHSU5HOgorCWNhc2UgQUM5N19FWFRFTkRFRF9JRDoKKwljYXNlIEFDOTdfRVhURU5ERURfU1RBVFVTOgorCWNhc2UgQUM5N19FWFRFTkRFRF9NSUQ6CisJY2FzZSBBQzk3X0VYVEVOREVEX01TVEFUVVM6CisJY2FzZSBBQzk3X0dQSU9fU1RBVFVTOgorCWNhc2UgQUM5N19NSVNDX0FGRToKKwljYXNlIEFDOTdfVkVORE9SX0lEMToKKwljYXNlIEFDOTdfVkVORE9SX0lEMjoKKwljYXNlIEFDOTdfQ09ERUNfQ0xBU1NfUkVWOgorCWNhc2UgQUM5N19QQ0lfU1ZJRDoKKwljYXNlIEFDOTdfUENJX1NJRDoKKwljYXNlIEFDOTdfRlVOQ19TRUxFQ1Q6CisJY2FzZSBBQzk3X0ZVTkNfSU5GTzoKKwljYXNlIEFDOTdfU0VOU0VfSU5GTzoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ21hcF9hYzk3X2RlZmF1bHRfdm9sYXRpbGUpOworCitzdGF0aWMgaW50IHJlZ21hcF9hYzk3X3JlZ19yZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50ICp2YWwpCit7CisJc3RydWN0IHNuZF9hYzk3ICphYzk3ID0gY29udGV4dDsKKworCSp2YWwgPSBhYzk3LT5idXMtPm9wcy0+cmVhZChhYzk3LCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnbWFwX2FjOTdfcmVnX3dyaXRlKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcgPSBjb250ZXh0OworCisJYWM5Ny0+YnVzLT5vcHMtPndyaXRlKGFjOTcsIHJlZywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgYWM5N19yZWdtYXBfYnVzID0geworCQkucmVnX3dyaXRlID0gcmVnbWFwX2FjOTdfcmVnX3dyaXRlLAorCQkucmVnX3JlYWQgPSByZWdtYXBfYWM5N19yZWdfcmVhZCwKK307CisKKy8qKgorICogcmVnbWFwX2luaXRfYWM5NygpOiBJbml0aWFsaXNlIEFDJzk3IHJlZ2lzdGVyIG1hcAorICoKKyAqIEBhYzk3OiBEZXZpY2UgdGhhdCB3aWxsIGJlIGludGVyYWN0ZWQgd2l0aAorICogQGNvbmZpZzogQ29uZmlndXJhdGlvbiBmb3IgcmVnaXN0ZXIgbWFwCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGFuIEVSUl9QVFIoKSBvbiBlcnJvciBvciBhIHZhbGlkIHBvaW50ZXIgdG8KKyAqIGEgc3RydWN0IHJlZ21hcC4KKyAqLworc3RydWN0IHJlZ21hcCAqcmVnbWFwX2luaXRfYWM5NyhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZykKK3sKKwlyZXR1cm4gcmVnbWFwX2luaXQoJmFjOTctPmRldiwgJmFjOTdfcmVnbWFwX2J1cywgYWM5NywgY29uZmlnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ21hcF9pbml0X2FjOTcpOworCisvKioKKyAqIGRldm1fcmVnbWFwX2luaXRfYWM5NygpOiBJbml0aWFsaXNlIEFDJzk3IHJlZ2lzdGVyIG1hcAorICoKKyAqIEBhYzk3OiBEZXZpY2UgdGhhdCB3aWxsIGJlIGludGVyYWN0ZWQgd2l0aAorICogQGNvbmZpZzogQ29uZmlndXJhdGlvbiBmb3IgcmVnaXN0ZXIgbWFwCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGFuIEVSUl9QVFIoKSBvbiBlcnJvciBvciBhIHZhbGlkIHBvaW50ZXIKKyAqIHRvIGEgc3RydWN0IHJlZ21hcC4gIFRoZSByZWdtYXAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIGJ5IHRoZQorICogZGV2aWNlIG1hbmFnZW1lbnQgY29kZS4KKyAqLworc3RydWN0IHJlZ21hcCAqZGV2bV9yZWdtYXBfaW5pdF9hYzk3KHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpCit7CisJcmV0dXJuIGRldm1fcmVnbWFwX2luaXQoJmFjOTctPmRldiwgJmFjOTdfcmVnbWFwX2J1cywgYWM5NywgY29uZmlnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fcmVnbWFwX2luaXRfYWM5Nyk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbnZtZS1zY3NpLmMgYi9kcml2ZXJzL2Jsb2NrL252bWUtc2NzaS5jCmluZGV4IGE0Y2Q2ZDYuLjBiNGIyNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbnZtZS1zY3NpLmMKKysrIGIvZHJpdmVycy9ibG9jay9udm1lLXNjc2kuYwpAQCAtMzI5LDcgKzMyOSw3IEBACiAoR0VUX1UzMl9GUk9NX0NEQihjZGIsIFJFQURfQ0FQXzE2X0NEQl9BTExPQ19MRU5HVEhfT0ZGU0VUKSkKIAogI2RlZmluZSBJU19SRUFEX0NBUF8xNihjZGIpCQkJCQlcCi0oKGNkYlswXSA9PSBTRVJWSUNFX0FDVElPTl9JTiAmJiBjZGJbMV0gPT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpID8gMSA6IDApCisoKGNkYlswXSA9PSBTRVJWSUNFX0FDVElPTl9JTl8xNiAmJiBjZGJbMV0gPT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpID8gMSA6IDApCiAKIC8qIFJlcXVlc3QgU2Vuc2UgSGVscGVyIE1hY3JvcyAqLwogI2RlZmluZSBHRVRfUkVRVUVTVF9TRU5TRV9BTExPQ19MRU5HVEgoY2RiKQkJCVwKQEAgLTI5NDcsNyArMjk0Nyw3IEBACiAJY2FzZSBSRUFEX0NBUEFDSVRZOgogCQlyZXRjb2RlID0gbnZtZV90cmFuc19yZWFkX2NhcGFjaXR5KG5zLCBoZHIsIGNtZCk7CiAJCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAkJaWYgKElTX1JFQURfQ0FQXzE2KGNtZCkpCiAJCQlyZXRjb2RlID0gbnZtZV90cmFuc19yZWFkX2NhcGFjaXR5KG5zLCBoZHIsIGNtZCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcmJkLmMgYi9kcml2ZXJzL2Jsb2NrL3JiZC5jCmluZGV4IDBhNTRjNTguLjI3YjcxYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9yYmQuYwpAQCAtMzQyLDcgKzM0Miw2IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJxX3F1ZXVlOwkvKiBpbmNvbWluZyBycSBxdWV1ZSAqLwogCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBxdWV1ZSwgZmxhZ3MsIG9wZW5fY291bnQgKi8KLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqcnFfd3E7CiAJc3RydWN0IHdvcmtfc3RydWN0CXJxX3dvcms7CiAKIAlzdHJ1Y3QgcmJkX2ltYWdlX2hlYWRlcgloZWFkZXI7CkBAIC00MDIsNiArNDAxLDggQEAKIHN0YXRpYyBpbnQgcmJkX21ham9yOwogc3RhdGljIERFRklORV9JREEocmJkX2Rldl9pZF9pZGEpOwogCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJiZF93cTsKKwogLyoKICAqIERlZmF1bHQgdG8gZmFsc2UgZm9yIG5vdywgYXMgc2luZ2xlLW1ham9yIHJlcXVpcmVzID49IDAuNzUgdmVyc2lvbiBvZgogICogdXNlcnNwYWNlIHJiZCB1dGlsaXR5LgpAQCAtMzQ1Miw3ICszNDUzLDcgQEAKIAl9CiAKIAlpZiAocXVldWVkKQotCQlxdWV1ZV93b3JrKHJiZF9kZXYtPnJxX3dxLCAmcmJkX2Rldi0+cnFfd29yayk7CisJCXF1ZXVlX3dvcmsocmJkX3dxLCAmcmJkX2Rldi0+cnFfd29yayk7CiB9CiAKIC8qCkBAIC0zNTMyLDcgKzM1MzMsNyBAQAogCXBhZ2VfY291bnQgPSAodTMyKSBjYWxjX3BhZ2VzX2ZvcihvZmZzZXQsIGxlbmd0aCk7CiAJcGFnZXMgPSBjZXBoX2FsbG9jX3BhZ2VfdmVjdG9yKHBhZ2VfY291bnQsIEdGUF9LRVJORUwpOwogCWlmIChJU19FUlIocGFnZXMpKQotCQlyZXQgPSBQVFJfRVJSKHBhZ2VzKTsKKwkJcmV0dXJuIFBUUl9FUlIocGFnZXMpOwogCiAJcmV0ID0gLUVOT01FTTsKIAlvYmpfcmVxdWVzdCA9IHJiZF9vYmpfcmVxdWVzdF9jcmVhdGUob2JqZWN0X25hbWUsIG9mZnNldCwgbGVuZ3RoLApAQCAtNTI0MiwxNiArNTI0Myw5IEBACiAJc2V0X2NhcGFjaXR5KHJiZF9kZXYtPmRpc2ssIHJiZF9kZXYtPm1hcHBpbmcuc2l6ZSAvIFNFQ1RPUl9TSVpFKTsKIAlzZXRfZGlza19ybyhyYmRfZGV2LT5kaXNrLCByYmRfZGV2LT5tYXBwaW5nLnJlYWRfb25seSk7CiAKLQlyYmRfZGV2LT5ycV93cSA9IGFsbG9jX3dvcmtxdWV1ZSgiJXMiLCBXUV9NRU1fUkVDTEFJTSwgMCwKLQkJCQkJIHJiZF9kZXYtPmRpc2stPmRpc2tfbmFtZSk7Ci0JaWYgKCFyYmRfZGV2LT5ycV93cSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXRfbWFwcGluZzsKLQl9Ci0KIAlyZXQgPSByYmRfYnVzX2FkZF9kZXYocmJkX2Rldik7CiAJaWYgKHJldCkKLQkJZ290byBlcnJfb3V0X3dvcmtxdWV1ZTsKKwkJZ290byBlcnJfb3V0X21hcHBpbmc7CiAKIAkvKiBFdmVyeXRoaW5nJ3MgcmVhZHkuICBBbm5vdW5jZSB0aGUgZGlzayB0byB0aGUgd29ybGQuICovCiAKQEAgLTUyNjMsOSArNTI1Nyw2IEBACiAKIAlyZXR1cm4gcmV0OwogCi1lcnJfb3V0X3dvcmtxdWV1ZToKLQlkZXN0cm95X3dvcmtxdWV1ZShyYmRfZGV2LT5ycV93cSk7Ci0JcmJkX2Rldi0+cnFfd3EgPSBOVUxMOwogZXJyX291dF9tYXBwaW5nOgogCXJiZF9kZXZfbWFwcGluZ19jbGVhcihyYmRfZGV2KTsKIGVycl9vdXRfZGlzazoKQEAgLTU1MTIsNyArNTUwMyw2IEBACiB7CiAJc3RydWN0IHJiZF9kZXZpY2UgKnJiZF9kZXYgPSBkZXZfdG9fcmJkX2RldihkZXYpOwogCi0JZGVzdHJveV93b3JrcXVldWUocmJkX2Rldi0+cnFfd3EpOwogCXJiZF9mcmVlX2Rpc2socmJkX2Rldik7CiAJY2xlYXJfYml0KFJCRF9ERVZfRkxBR19FWElTVFMsICZyYmRfZGV2LT5mbGFncyk7CiAJcmJkX2Rldl9tYXBwaW5nX2NsZWFyKHJiZF9kZXYpOwpAQCAtNTcxNiwxMSArNTcwNiwyMSBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGFjdGl2ZSB3b3JrIGl0ZW1zIGlzIGxpbWl0ZWQgYnkgdGhlIG51bWJlciBvZgorCSAqIHJiZCBkZXZpY2VzLCBzbyBsZWF2ZSBAbWF4X2FjdGl2ZSBhdCBkZWZhdWx0LgorCSAqLworCXJiZF93cSA9IGFsbG9jX3dvcmtxdWV1ZShSQkRfRFJWX05BTUUsIFdRX01FTV9SRUNMQUlNLCAwKTsKKwlpZiAoIXJiZF93cSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9zbGFiOworCX0KKwogCWlmIChzaW5nbGVfbWFqb3IpIHsKIAkJcmJkX21ham9yID0gcmVnaXN0ZXJfYmxrZGV2KDAsIFJCRF9EUlZfTkFNRSk7CiAJCWlmIChyYmRfbWFqb3IgPCAwKSB7CiAJCQlyYyA9IHJiZF9tYWpvcjsKLQkJCWdvdG8gZXJyX291dF9zbGFiOworCQkJZ290byBlcnJfb3V0X3dxOwogCQl9CiAJfQogCkBAIC01NzM4LDYgKzU3MzgsOCBAQAogZXJyX291dF9ibGtkZXY6CiAJaWYgKHNpbmdsZV9tYWpvcikKIAkJdW5yZWdpc3Rlcl9ibGtkZXYocmJkX21ham9yLCBSQkRfRFJWX05BTUUpOworZXJyX291dF93cToKKwlkZXN0cm95X3dvcmtxdWV1ZShyYmRfd3EpOwogZXJyX291dF9zbGFiOgogCXJiZF9zbGFiX2V4aXQoKTsKIAlyZXR1cm4gcmM7CkBAIC01NzQ5LDYgKzU3NTEsNyBAQAogCXJiZF9zeXNmc19jbGVhbnVwKCk7CiAJaWYgKHNpbmdsZV9tYWpvcikKIAkJdW5yZWdpc3Rlcl9ibGtkZXYocmJkX21ham9yLCBSQkRfRFJWX05BTUUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKHJiZF93cSk7CiAJcmJkX3NsYWJfZXhpdCgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCmluZGV4IDJhZDBiNWIuLjM5MjBlZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCkBAIC01NjAsNyArNTYwLDggQEAKIAl9CiAKIAlpZiAocGFnZV96ZXJvX2ZpbGxlZCh1bmNtZW0pKSB7Ci0JCWt1bm1hcF9hdG9taWModXNlcl9tZW0pOworCQlpZiAodXNlcl9tZW0pCisJCQlrdW5tYXBfYXRvbWljKHVzZXJfbWVtKTsKIAkJLyogRnJlZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VjdG9yIG5vdy4gKi8KIAkJYml0X3NwaW5fbG9jayhaUkFNX0FDQ0VTUywgJm1ldGEtPnRhYmxlW2luZGV4XS52YWx1ZSk7CiAJCXpyYW1fZnJlZV9wYWdlKHpyYW0sIGluZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL0tjb25maWcgYi9kcml2ZXJzL2J1cy9LY29uZmlnCmluZGV4IDYwM2ViMWIuLmI5OTcyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL0tjb25maWcKKysrIGIvZHJpdmVycy9idXMvS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIAogY29uZmlnIEJSQ01TVEJfR0lTQl9BUkIKIAlib29sICJCcm9hZGNvbSBTVEIgR0lTQiBidXMgYXJiaXRlciIKLQlkZXBlbmRzIG9uIEFSTQorCWRlcGVuZHMgb24gQVJNIHx8IE1JUFMKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBCcm9hZGNvbSBTZXQgVG9wIEJveCBTeXN0ZW0tb24tYS1jaGlwIGludGVybmFsIGJ1cwogCSAgYXJiaXRlci4gVGhpcyBkcml2ZXIgcHJvdmlkZXMgdGltZW91dCBhbmQgdGFyZ2V0IGFib3J0IGVycm9yIGhhbmRsaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9hcm0tY2NpLmMgYi9kcml2ZXJzL2J1cy9hcm0tY2NpLmMKaW5kZXggN2FmNzhkZi4uODYwZGE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9idXMvYXJtLWNjaS5jCisrKyBiL2RyaXZlcnMvYnVzL2FybS1jY2kuYwpAQCAtMTYsMTcgKzE2LDE3IEBACiAKICNpbmNsdWRlIDxsaW51eC9hcm0tY2NpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgotI2luY2x1ZGUgPGFzbS9wbXUuaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KIAogI2RlZmluZSBEUklWRVJfTkFNRQkJIkNDSS00MDAiCkBAIC05OCw2ICs5OCw4IEBACiAKICNkZWZpbmUgQ0NJX1BNVV9DTlRSX0JBU0UoaWR4KQkoKGlkeCkgKiBTWl80SykKIAorI2RlZmluZSBDQ0lfUE1VX0NOVFJfTUFTSwkoKDFVTEwgPDwgMzIpIC0xKQorCiAvKgogICogSW5zdGVhZCBvZiBhbiBldmVudCBpZCB0byBtb25pdG9yIENDSSBjeWNsZXMsIGEgZGVkaWNhdGVkIGNvdW50ZXIgaXMKICAqIHByb3ZpZGVkLiBVc2UgMHhmZiB0byByZXByZXNlbnQgQ0NJIGN5Y2xlcyBhbmQgaG9wZSB0aGF0IG5vIGZ1dHVyZSByZXZpc2lvbnMKQEAgLTE3MCwxOCArMTcyLDI5IEBACiAJW0NDSV9SRVZfUjFdID0gIkNDSV80MDBfcjEiLAogfTsKIAotc3RydWN0IGNjaV9wbXVfZHJ2X2RhdGEgeworc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzIHsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnRzW0NDSV9QTVVfTUFYX0hXX0VWRU5UU107CisJdW5zaWduZWQgbG9uZyB1c2VkX21hc2tbQklUU19UT19MT05HUyhDQ0lfUE1VX01BWF9IV19FVkVOVFMpXTsKKwlyYXdfc3BpbmxvY2tfdCBwbXVfbG9jazsKK307CisKK3N0cnVjdCBjY2lfcG11IHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7Ci0Jc3RydWN0IGFybV9wbXUgKmNjaV9wbXU7CisJc3RydWN0IHBtdSBwbXU7CiAJaW50IG5yX2lycXM7CiAJaW50IGlycXNbQ0NJX1BNVV9NQVhfSFdfRVZFTlRTXTsKIAl1bnNpZ25lZCBsb25nIGFjdGl2ZV9pcnFzOwotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudHNbQ0NJX1BNVV9NQVhfSFdfRVZFTlRTXTsKLQl1bnNpZ25lZCBsb25nIHVzZWRfbWFza1tCSVRTX1RPX0xPTkdTKENDSV9QTVVfTUFYX0hXX0VWRU5UUyldOwogCXN0cnVjdCBwbXVfcG9ydF9ldmVudF9yYW5nZXMgKnBvcnRfcmFuZ2VzOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzIGh3X2V2ZW50czsKKwlzdHJ1Y3QgY2NpX3BtdV9od19ldmVudHMgaHdfZXZlbnRzOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2aWNlOworCWludCBudW1fZXZlbnRzOworCWF0b21pY190IGFjdGl2ZV9ldmVudHM7CisJc3RydWN0IG11dGV4IHJlc2VydmVfbXV0ZXg7CisJY3B1bWFza190IGNwdXM7CiB9Owotc3RhdGljIHN0cnVjdCBjY2lfcG11X2Rydl9kYXRhICpwbXU7CitzdGF0aWMgc3RydWN0IGNjaV9wbXUgKnBtdTsKKworI2RlZmluZSB0b19jY2lfcG11KGMpCShjb250YWluZXJfb2YoYywgc3RydWN0IGNjaV9wbXUsIHBtdSkpCiAKIHN0YXRpYyBib29sIGlzX2R1cGxpY2F0ZV9pcnEoaW50IGlycSwgaW50ICppcnFzLCBpbnQgbnJfaXJxcykKIHsKQEAgLTI1Miw3ICsyNjUsNyBAQAogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW50IHBtdV9pc192YWxpZF9jb3VudGVyKHN0cnVjdCBhcm1fcG11ICpjY2lfcG11LCBpbnQgaWR4KQorc3RhdGljIGludCBwbXVfaXNfdmFsaWRfY291bnRlcihzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSwgaW50IGlkeCkKIHsKIAlyZXR1cm4gQ0NJX1BNVV9DWUNMRV9DTlRSX0lEWCA8PSBpZHggJiYKIAkJaWR4IDw9IENDSV9QTVVfQ05UUl9MQVNUKGNjaV9wbXUpOwpAQCAtMjkzLDE0ICszMDYsOSBAQAogCXJldHVybiBuX2NudHMgKyAxOwogfQogCi1zdGF0aWMgc3RydWN0IHBtdV9od19ldmVudHMgKnBtdV9nZXRfaHdfZXZlbnRzKHZvaWQpCitzdGF0aWMgaW50IHBtdV9nZXRfZXZlbnRfaWR4KHN0cnVjdCBjY2lfcG11X2h3X2V2ZW50cyAqaHcsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlyZXR1cm4gJnBtdS0+aHdfZXZlbnRzOwotfQotCi1zdGF0aWMgaW50IHBtdV9nZXRfZXZlbnRfaWR4KHN0cnVjdCBwbXVfaHdfZXZlbnRzICpodywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3X2V2ZW50ID0gJmV2ZW50LT5odzsKIAl1bnNpZ25lZCBsb25nIGNjaV9ldmVudCA9IGh3X2V2ZW50LT5jb25maWdfYmFzZSAmIENDSV9QTVVfRVZFTlRfTUFTSzsKIAlpbnQgaWR4OwpAQCAtMzM2LDcgKzM0NCw3IEBACiAJcmV0dXJuIG1hcHBpbmc7CiB9CiAKLXN0YXRpYyBpbnQgcG11X3JlcXVlc3RfaXJxKHN0cnVjdCBhcm1fcG11ICpjY2lfcG11LCBpcnFfaGFuZGxlcl90IGhhbmRsZXIpCitzdGF0aWMgaW50IHBtdV9yZXF1ZXN0X2lycShzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSwgaXJxX2hhbmRsZXJfdCBoYW5kbGVyKQogewogCWludCBpOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBtdV9kZXZpY2UgPSBjY2lfcG11LT5wbGF0X2RldmljZTsKQEAgLTM3MSwxNyArMzc5LDkxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHBtdV9mcmVlX2lycShzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwbXUtPm5yX2lycXM7IGkrKykgeworCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChpLCAmcG11LT5hY3RpdmVfaXJxcykpCisJCQljb250aW51ZTsKKworCQlmcmVlX2lycShwbXUtPmlycXNbaV0sIGNjaV9wbXUpOworCX0KK30KKworc3RhdGljIHUzMiBwbXVfcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3X2NvdW50ZXIgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod19jb3VudGVyLT5pZHg7CisJdTMyIHZhbHVlOworCisJaWYgKHVubGlrZWx5KCFwbXVfaXNfdmFsaWRfY291bnRlcihjY2lfcG11LCBpZHgpKSkgeworCQlkZXZfZXJyKCZjY2lfcG11LT5wbGF0X2RldmljZS0+ZGV2LCAiSW52YWxpZCBDQ0kgUE1VIGNvdW50ZXIgJWRcbiIsIGlkeCk7CisJCXJldHVybiAwOworCX0KKwl2YWx1ZSA9IHBtdV9yZWFkX3JlZ2lzdGVyKGlkeCwgQ0NJX1BNVV9DTlRSKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgcG11X3dyaXRlX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod19jb3VudGVyID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdfY291bnRlci0+aWR4OworCisJaWYgKHVubGlrZWx5KCFwbXVfaXNfdmFsaWRfY291bnRlcihjY2lfcG11LCBpZHgpKSkKKwkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOworCWVsc2UKKwkJcG11X3dyaXRlX3JlZ2lzdGVyKHZhbHVlLCBpZHgsIENDSV9QTVVfQ05UUik7Cit9CisKK3N0YXRpYyB1NjQgcG11X2V2ZW50X3VwZGF0ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0IGRlbHRhLCBwcmV2X3Jhd19jb3VudCwgbmV3X3Jhd19jb3VudDsKKworCWRvIHsKKwkJcHJldl9yYXdfY291bnQgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CisJCW5ld19yYXdfY291bnQgPSBwbXVfcmVhZF9jb3VudGVyKGV2ZW50KTsKKwl9IHdoaWxlIChsb2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCisJCSBuZXdfcmF3X2NvdW50KSAhPSBwcmV2X3Jhd19jb3VudCk7CisKKwlkZWx0YSA9IChuZXdfcmF3X2NvdW50IC0gcHJldl9yYXdfY291bnQpICYgQ0NJX1BNVV9DTlRSX01BU0s7CisKKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisKKwlyZXR1cm4gbmV3X3Jhd19jb3VudDsKK30KKworc3RhdGljIHZvaWQgcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXBtdV9ldmVudF91cGRhdGUoZXZlbnQpOworfQorCit2b2lkIHBtdV9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwkvKgorCSAqIFRoZSBDQ0kgUE1VIGNvdW50ZXJzIGhhdmUgYSBwZXJpb2Qgb2YgMl4zMi4gVG8gYWNjb3VudCBmb3IgdGhlCisJICogcG9zc2libGl0eSBvZiBleHRyZW1lIGludGVycnVwdCBsYXRlbmN5IHdlIHByb2dyYW0gZm9yIGEgcGVyaW9kIG9mCisJICogaGFsZiB0aGF0LiBIb3BlZnVsbHkgd2UgY2FuIGhhbmRsZSB0aGUgaW50ZXJydXB0IGJlZm9yZSBhbm90aGVyIDJeMzEKKwkgKiBldmVudHMgb2NjdXIgYW5kIHRoZSBjb3VudGVyIG92ZXJ0YWtlcyBpdHMgcHJldmlvdXMgdmFsdWUuCisJICovCisJdTY0IHZhbCA9IDFVTEwgPDwgMzE7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgdmFsKTsKKwlwbXVfd3JpdGVfY291bnRlcihldmVudCwgdmFsKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IHBtdV9oYW5kbGVfaXJxKGludCBpcnFfbnVtLCB2b2lkICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSA9IChzdHJ1Y3QgYXJtX3BtdSAqKWRldjsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY2NpX3BtdS0+Z2V0X2h3X2V2ZW50cygpOwotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSBkZXY7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpldmVudHMgPSAmcG11LT5od19ldmVudHM7CiAJaW50IGlkeCwgaGFuZGxlZCA9IElSUV9OT05FOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7Ci0JcmVncyA9IGdldF9pcnFfcmVncygpOwogCS8qCiAJICogSXRlcmF0ZSBvdmVyIGNvdW50ZXJzIGFuZCB1cGRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcGVyZiBldmVudHMuCiAJICogVGhpcyBzaG91bGQgd29yayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgaGF2ZSBwZXItY291bnRlciBvdmVyZmxvdwpAQCAtNDAzLDE1NCArNDg1LDQwNyBAQAogCiAJCXBtdV93cml0ZV9yZWdpc3RlcihDQ0lfUE1VX09WUkZMV19GTEFHLCBpZHgsIENDSV9QTVVfT1ZSRkxXKTsKIAorCQlwbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsKKwkJcG11X2V2ZW50X3NldF9wZXJpb2QoZXZlbnQpOwogCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7Ci0KLQkJYXJtcG11X2V2ZW50X3VwZGF0ZShldmVudCk7Ci0JCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgMCwgaHdfY291bnRlci0+bGFzdF9wZXJpb2QpOwotCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50KSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAmZGF0YSwgcmVncykpCi0JCQljY2lfcG11LT5kaXNhYmxlKGV2ZW50KTsKIAl9CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCi1zdGF0aWMgdm9pZCBwbXVfZnJlZV9pcnEoc3RydWN0IGFybV9wbXUgKmNjaV9wbXUpCitzdGF0aWMgaW50IGNjaV9wbXVfZ2V0X2h3KHN0cnVjdCBjY2lfcG11ICpjY2lfcG11KQogewotCWludCBpOworCWludCByZXQgPSBwbXVfcmVxdWVzdF9pcnEoY2NpX3BtdSwgcG11X2hhbmRsZV9pcnEpOworCWlmIChyZXQpIHsKKwkJcG11X2ZyZWVfaXJxKGNjaV9wbXUpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KIAotCWZvciAoaSA9IDA7IGkgPCBwbXUtPm5yX2lycXM7IGkrKykgewotCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChpLCAmcG11LT5hY3RpdmVfaXJxcykpCi0JCQljb250aW51ZTsKK3N0YXRpYyB2b2lkIGNjaV9wbXVfcHV0X2h3KHN0cnVjdCBjY2lfcG11ICpjY2lfcG11KQoreworCXBtdV9mcmVlX2lycShjY2lfcG11KTsKK30KIAotCQlmcmVlX2lycShwbXUtPmlycXNbaV0sIGNjaV9wbXUpOworc3RhdGljIHZvaWQgaHdfcGVyZl9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJYXRvbWljX3QgKmFjdGl2ZV9ldmVudHMgPSAmY2NpX3BtdS0+YWN0aXZlX2V2ZW50czsKKwlzdHJ1Y3QgbXV0ZXggKnJlc2VydmVfbXV0ZXggPSAmY2NpX3BtdS0+cmVzZXJ2ZV9tdXRleDsKKworCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKGFjdGl2ZV9ldmVudHMsIHJlc2VydmVfbXV0ZXgpKSB7CisJCWNjaV9wbXVfcHV0X2h3KGNjaV9wbXUpOworCQltdXRleF91bmxvY2socmVzZXJ2ZV9tdXRleCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIGNjaV9wbXVfZW5hYmxlKHN0cnVjdCBwbXUgKnBtdSkKIHsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUocG11KTsKKwlzdHJ1Y3QgY2NpX3BtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9ICZjY2lfcG11LT5od19ldmVudHM7CisJaW50IGVuYWJsZWQgPSBiaXRtYXBfd2VpZ2h0KGh3X2V2ZW50cy0+dXNlZF9tYXNrLCBjY2lfcG11LT5udW1fZXZlbnRzKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY2NpX3BtdS0+Z2V0X2h3X2V2ZW50cygpOwotCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod19jb3VudGVyID0gJmV2ZW50LT5odzsKLQlpbnQgaWR4ID0gaHdfY291bnRlci0+aWR4OwotCi0JaWYgKHVubGlrZWx5KCFwbXVfaXNfdmFsaWRfY291bnRlcihjY2lfcG11LCBpZHgpKSkgewotCQlkZXZfZXJyKCZjY2lfcG11LT5wbGF0X2RldmljZS0+ZGV2LCAiSW52YWxpZCBDQ0kgUE1VIGNvdW50ZXIgJWRcbiIsIGlkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKLQotCS8qIENvbmZpZ3VyZSB0aGUgZXZlbnQgdG8gY291bnQsIHVubGVzcyB5b3UgYXJlIGNvdW50aW5nIGN5Y2xlcyAqLwotCWlmIChpZHggIT0gQ0NJX1BNVV9DWUNMRV9DTlRSX0lEWCkKLQkJcG11X3NldF9ldmVudChpZHgsIGh3X2NvdW50ZXItPmNvbmZpZ19iYXNlKTsKLQotCXBtdV9lbmFibGVfY291bnRlcihpZHgpOwotCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdfY291bnRlciA9ICZldmVudC0+aHc7Ci0JaW50IGlkeCA9IGh3X2NvdW50ZXItPmlkeDsKLQotCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpIHsKLQkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JcG11X2Rpc2FibGVfY291bnRlcihpZHgpOwotfQotCi1zdGF0aWMgdm9pZCBwbXVfc3RhcnQoc3RydWN0IGFybV9wbXUgKmNjaV9wbXUpCi17CiAJdTMyIHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjY2lfcG11LT5nZXRfaHdfZXZlbnRzKCk7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWVuYWJsZWQpCisJCXJldHVybjsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaHdfZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCiAJLyogRW5hYmxlIGFsbCB0aGUgUE1VIGNvdW50ZXJzLiAqLwogCXZhbCA9IHJlYWRsX3JlbGF4ZWQoY2NpX2N0cmxfYmFzZSArIENDSV9QTUNSKSB8IENDSV9QTUNSX0NFTjsKIAl3cml0ZWwodmFsLCBjY2lfY3RybF9iYXNlICsgQ0NJX1BNQ1IpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZod19ldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBwbXVfc3RvcChzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSkKK3N0YXRpYyB2b2lkIGNjaV9wbXVfZGlzYWJsZShzdHJ1Y3QgcG11ICpwbXUpCiB7Ci0JdTMyIHZhbDsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUocG11KTsKKwlzdHJ1Y3QgY2NpX3BtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9ICZjY2lfcG11LT5od19ldmVudHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY2NpX3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXUzMiB2YWw7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmh3X2V2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAogCS8qIERpc2FibGUgYWxsIHRoZSBQTVUgY291bnRlcnMuICovCiAJdmFsID0gcmVhZGxfcmVsYXhlZChjY2lfY3RybF9iYXNlICsgQ0NJX1BNQ1IpICYgfkNDSV9QTUNSX0NFTjsKIAl3cml0ZWwodmFsLCBjY2lfY3RybF9iYXNlICsgQ0NJX1BNQ1IpOwotCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdfZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdTMyIHBtdV9yZWFkX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorc3RhdGljIHZvaWQgY2NpX3BtdV9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBwbXVfZmxhZ3MpCiB7Ci0Jc3RydWN0IGFybV9wbXUgKmNjaV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwotCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod19jb3VudGVyID0gJmV2ZW50LT5odzsKLQlpbnQgaWR4ID0gaHdfY291bnRlci0+aWR4OwotCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSAmY2NpX3BtdS0+aHdfZXZlbnRzOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod2MtPmlkeDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBUbyBoYW5kbGUgaW50ZXJydXB0IGxhdGVuY3ksIHdlIGFsd2F5cyByZXByb2dyYW0gdGhlIHBlcmlvZAorCSAqIHJlZ2FyZGxlc3NzIG9mIFBFUkZfRUZfUkVMT0FELgorCSAqLworCWlmIChwbXVfZmxhZ3MgJiBQRVJGX0VGX1JFTE9BRCkKKwkJV0FSTl9PTl9PTkNFKCEoaHdjLT5zdGF0ZSAmIFBFUkZfSEVTX1VQVE9EQVRFKSk7CisKKwlod2MtPnN0YXRlID0gMDsKIAogCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpIHsKIAkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KLQl2YWx1ZSA9IHBtdV9yZWFkX3JlZ2lzdGVyKGlkeCwgQ0NJX1BNVV9DTlRSKTsKIAotCXJldHVybiB2YWx1ZTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmh3X2V2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgZXZlbnQgdG8gY291bnQsIHVubGVzcyB5b3UgYXJlIGNvdW50aW5nIGN5Y2xlcyAqLworCWlmIChpZHggIT0gQ0NJX1BNVV9DWUNMRV9DTlRSX0lEWCkKKwkJcG11X3NldF9ldmVudChpZHgsIGh3Yy0+Y29uZmlnX2Jhc2UpOworCisJcG11X2V2ZW50X3NldF9wZXJpb2QoZXZlbnQpOworCXBtdV9lbmFibGVfY291bnRlcihpZHgpOworCisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3X2V2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcG11X3dyaXRlX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1MzIgdmFsdWUpCitzdGF0aWMgdm9pZCBjY2lfcG11X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgcG11X2ZsYWdzKQogewotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdfY291bnRlciA9ICZldmVudC0+aHc7Ci0JaW50IGlkeCA9IGh3X2NvdW50ZXItPmlkeDsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJaW50IGlkeCA9IGh3Yy0+aWR4OwogCi0JaWYgKHVubGlrZWx5KCFwbXVfaXNfdmFsaWRfY291bnRlcihjY2lfcG11LCBpZHgpKSkKKwlpZiAoaHdjLT5zdGF0ZSAmIFBFUkZfSEVTX1NUT1BQRUQpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpIHsKIAkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOwotCWVsc2UKLQkJcG11X3dyaXRlX3JlZ2lzdGVyKHZhbHVlLCBpZHgsIENDSV9QTVVfQ05UUik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIGFsd2F5cyByZXByb2dyYW0gdGhlIGNvdW50ZXIsIHNvIGlnbm9yZSBQRVJGX0VGX1VQREFURS4gU2VlCisJICogY2NpX3BtdV9zdGFydCgpCisJICovCisJcG11X2Rpc2FibGVfY291bnRlcihpZHgpOworCXBtdV9ldmVudF91cGRhdGUoZXZlbnQpOworCWh3Yy0+c3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRCB8IFBFUkZfSEVTX1VQVE9EQVRFOwogfQogCi1zdGF0aWMgaW50IGNjaV9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgY2NpX3BtdV9hZGQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCiB7Ci0JKmNjaV9wbXUgPSAoc3RydWN0IGFybV9wbXUpewotCQkubmFtZQkJICA9IHBtdV9uYW1lc1twcm9iZV9jY2lfcmV2aXNpb24oKV0sCi0JCS5tYXhfcGVyaW9kICAgICAgID0gKDFMTFUgPDwgMzIpIC0gMSwKLQkJLmdldF9od19ldmVudHMgICAgPSBwbXVfZ2V0X2h3X2V2ZW50cywKLQkJLmdldF9ldmVudF9pZHggICAgPSBwbXVfZ2V0X2V2ZW50X2lkeCwKLQkJLm1hcF9ldmVudCAgICAgICAgPSBwbXVfbWFwX2V2ZW50LAotCQkucmVxdWVzdF9pcnEgICAgICA9IHBtdV9yZXF1ZXN0X2lycSwKLQkJLmhhbmRsZV9pcnEgICAgICAgPSBwbXVfaGFuZGxlX2lycSwKLQkJLmZyZWVfaXJxICAgICAgICAgPSBwbXVfZnJlZV9pcnEsCi0JCS5lbmFibGUgICAgICAgICAgID0gcG11X2VuYWJsZV9ldmVudCwKLQkJLmRpc2FibGUgICAgICAgICAgPSBwbXVfZGlzYWJsZV9ldmVudCwKLQkJLnN0YXJ0ICAgICAgICAgICAgPSBwbXVfc3RhcnQsCi0JCS5zdG9wICAgICAgICAgICAgID0gcG11X3N0b3AsCi0JCS5yZWFkX2NvdW50ZXIgICAgID0gcG11X3JlYWRfY291bnRlciwKLQkJLndyaXRlX2NvdW50ZXIgICAgPSBwbXVfd3JpdGVfY291bnRlciwKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSAmY2NpX3BtdS0+aHdfZXZlbnRzOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHg7CisJaW50IGVyciA9IDA7CisKKwlwZXJmX3BtdV9kaXNhYmxlKGV2ZW50LT5wbXUpOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHNwYWNlIGZvciB0aGUgY291bnRlciB0aGVuIGZpbmlzaCBlYXJseS4gKi8KKwlpZHggPSBwbXVfZ2V0X2V2ZW50X2lkeChod19ldmVudHMsIGV2ZW50KTsKKwlpZiAoaWR4IDwgMCkgeworCQllcnIgPSBpZHg7CisJCWdvdG8gb3V0OworCX0KKworCWV2ZW50LT5ody5pZHggPSBpZHg7CisJaHdfZXZlbnRzLT5ldmVudHNbaWR4XSA9IGV2ZW50OworCisJaHdjLT5zdGF0ZSA9IFBFUkZfSEVTX1NUT1BQRUQgfCBQRVJGX0hFU19VUFRPREFURTsKKwlpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQorCQljY2lfcG11X3N0YXJ0KGV2ZW50LCBQRVJGX0VGX1JFTE9BRCk7CisKKwkvKiBQcm9wYWdhdGUgb3VyIGNoYW5nZXMgdG8gdGhlIHVzZXJzcGFjZSBtYXBwaW5nLiAqLworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKworb3V0OgorCXBlcmZfcG11X2VuYWJsZShldmVudC0+cG11KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBjY2lfcG11X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSAmY2NpX3BtdS0+aHdfZXZlbnRzOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod2MtPmlkeDsKKworCWNjaV9wbXVfc3RvcChldmVudCwgUEVSRl9FRl9VUERBVEUpOworCWh3X2V2ZW50cy0+ZXZlbnRzW2lkeF0gPSBOVUxMOworCWNsZWFyX2JpdChpZHgsIGh3X2V2ZW50cy0+dXNlZF9tYXNrKTsKKworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKK30KKworc3RhdGljIGludAordmFsaWRhdGVfZXZlbnQoc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMsCisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpZiAoaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQlyZXR1cm4gMTsKKworCWlmIChldmVudC0+c3RhdGUgPCBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJcmV0dXJuIDE7CisKKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfT0ZGICYmICFldmVudC0+YXR0ci5lbmFibGVfb25fZXhlYykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gcG11X2dldF9ldmVudF9pZHgoaHdfZXZlbnRzLCBldmVudCkgPj0gMDsKK30KKworc3RhdGljIGludAordmFsaWRhdGVfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nLCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgY2NpX3BtdV9od19ldmVudHMgZmFrZV9wbXUgPSB7CisJCS8qCisJCSAqIEluaXRpYWxpc2UgdGhlIGZha2UgUE1VLiBXZSBvbmx5IG5lZWQgdG8gcG9wdWxhdGUgdGhlCisJCSAqIHVzZWRfbWFzayBmb3IgdGhlIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCisJCSAqLworCQkudXNlZF9tYXNrID0gQ1BVX0JJVFNfTk9ORSwKKwl9OworCisJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCisJCXJldHVybiAtRUlOVkFMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBzaWJsaW5nKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBldmVudCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19faHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgbWFwcGluZzsKKworCW1hcHBpbmcgPSBwbXVfbWFwX2V2ZW50KGV2ZW50KTsKKworCWlmIChtYXBwaW5nIDwgMCkgeworCQlwcl9kZWJ1ZygiZXZlbnQgJXg6JWxseCBub3Qgc3VwcG9ydGVkXG4iLCBldmVudC0+YXR0ci50eXBlLAorCQkJIGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJCXJldHVybiBtYXBwaW5nOworCX0KKworCS8qCisJICogV2UgZG9uJ3QgYXNzaWduIGFuIGluZGV4IHVudGlsIHdlIGFjdHVhbGx5IHBsYWNlIHRoZSBldmVudCBvbnRvCisJICogaGFyZHdhcmUuIFVzZSAtMSB0byBzaWduaWZ5IHRoYXQgd2UgaGF2ZW4ndCBkZWNpZGVkIHdoZXJlIHRvIHB1dCBpdAorCSAqIHlldC4KKwkgKi8KKwlod2MtPmlkeAkJPSAtMTsKKwlod2MtPmNvbmZpZ19iYXNlCT0gMDsKKwlod2MtPmNvbmZpZwkJPSAwOworCWh3Yy0+ZXZlbnRfYmFzZQkJPSAwOworCisJLyoKKwkgKiBTdG9yZSB0aGUgZXZlbnQgZW5jb2RpbmcgaW50byB0aGUgY29uZmlnX2Jhc2UgZmllbGQuCisJICovCisJaHdjLT5jb25maWdfYmFzZQkgICAgfD0gKHVuc2lnbmVkIGxvbmcpbWFwcGluZzsKKworCS8qCisJICogTGltaXQgdGhlIHNhbXBsZV9wZXJpb2QgdG8gaGFsZiBvZiB0aGUgY291bnRlciB3aWR0aC4gVGhhdCB3YXksIHRoZQorCSAqIG5ldyBjb3VudGVyIHZhbHVlIGlzIGZhciBsZXNzIGxpa2VseSB0byBvdmVydGFrZSB0aGUgcHJldmlvdXMgb25lCisJICogdW5sZXNzIHlvdSBoYXZlIHNvbWUgc2VyaW91cyBJUlEgbGF0ZW5jeSBpc3N1ZXMuCisJICovCisJaHdjLT5zYW1wbGVfcGVyaW9kICA9IENDSV9QTVVfQ05UUl9NQVNLID4+IDE7CisJaHdjLT5sYXN0X3BlcmlvZCAgICA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKworCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KSB7CisJCWlmICh2YWxpZGF0ZV9ncm91cChldmVudCkgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjaV9wbXVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCWF0b21pY190ICphY3RpdmVfZXZlbnRzID0gJmNjaV9wbXUtPmFjdGl2ZV9ldmVudHM7CisJaW50IGVyciA9IDA7CisJaW50IGNwdTsKKworCWlmIChldmVudC0+YXR0ci50eXBlICE9IGV2ZW50LT5wbXUtPnR5cGUpCisJCXJldHVybiAtRU5PRU5UOworCisJLyogU2hhcmVkIGJ5IGFsbCBDUFVzLCBubyBtZWFuaW5nZnVsIHN0YXRlIHRvIHNhbXBsZSAqLworCWlmIChpc19zYW1wbGluZ19ldmVudChldmVudCkgfHwgZXZlbnQtPmF0dGFjaF9zdGF0ZSAmIFBFUkZfQVRUQUNIX1RBU0spCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIFdlIGhhdmUgbm8gZmlsdGVyaW5nIG9mIGFueSBraW5kICovCisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlcgl8fAorCSAgICBldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbAl8fAorCSAgICBldmVudC0+YXR0ci5leGNsdWRlX2h2CXx8CisJICAgIGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaWRsZQl8fAorCSAgICBldmVudC0+YXR0ci5leGNsdWRlX2hvc3QJfHwKKwkgICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9ndWVzdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEZvbGxvd2luZyB0aGUgZXhhbXBsZSBzZXQgYnkgb3RoZXIgInVuY29yZSIgUE1Vcywgd2UgYWNjZXB0IGFueSBDUFUKKwkgKiBhbmQgcmV3cml0ZSBpdHMgYWZmaW5pdHkgZHluYW1pY2FsbHkgcmF0aGVyIHRoYW4gaGF2aW5nIHBlcmYgY29yZQorCSAqIGhhbmRsZSBjcHUgPT0gLTEgYW5kIHBpZCA9PSAtMSBmb3IgdGhpcyBjYXNlLgorCSAqCisJICogVGhlIHBlcmYgY29yZSB3aWxsIHBpbiBvbmxpbmUgQ1BVcyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgY2FsbCBhbmQKKwkgKiB0aGUgZXZlbnQgYmVpbmcgaW5zdGFsbGVkIGludG8gaXRzIGNvbnRleHQsIHNvIHRoZSBQTVUncyBDUFUgY2FuJ3QKKwkgKiBjaGFuZ2UgdW5kZXIgb3VyIGZlZXQuCisJICovCisJY3B1ID0gY3B1bWFza19maXJzdCgmY2NpX3BtdS0+Y3B1cyk7CisJaWYgKGV2ZW50LT5jcHUgPCAwIHx8IGNwdSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWV2ZW50LT5jcHUgPSBjcHU7CisKKwlldmVudC0+ZGVzdHJveSA9IGh3X3BlcmZfZXZlbnRfZGVzdHJveTsKKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oYWN0aXZlX2V2ZW50cykpIHsKKwkJbXV0ZXhfbG9jaygmY2NpX3BtdS0+cmVzZXJ2ZV9tdXRleCk7CisJCWlmIChhdG9taWNfcmVhZChhY3RpdmVfZXZlbnRzKSA9PSAwKQorCQkJZXJyID0gY2NpX3BtdV9nZXRfaHcoY2NpX3BtdSk7CisJCWlmICghZXJyKQorCQkJYXRvbWljX2luYyhhY3RpdmVfZXZlbnRzKTsKKwkJbXV0ZXhfdW5sb2NrKCZjY2lfcG11LT5yZXNlcnZlX211dGV4KTsKKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IF9faHdfcGVyZl9ldmVudF9pbml0KGV2ZW50KTsKKwlpZiAoZXJyKQorCQlod19wZXJmX2V2ZW50X2Rlc3Ryb3koZXZlbnQpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHNzaXplX3QgcG11X2F0dHJfY3B1bWFza19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJaW50IG4gPSBjcHVsaXN0X3NjbnByaW50ZihidWYsIFBBR0VfU0laRSAtIDIsICZwbXUtPmNwdXMpOworCisJYnVmW24rK10gPSAnXG4nOworCWJ1ZltuXSA9ICdcMCc7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihjcHVtYXNrLCBTX0lSVUdPLCBwbXVfYXR0cl9jcHVtYXNrX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG11X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NwdW1hc2suYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG11X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gcG11X2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBtdV9hdHRyX2dyb3Vwc1tdID0geworCSZwbXVfYXR0cl9ncm91cCwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGNjaV9wbXVfaW5pdChzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljaGFyICpuYW1lID0gcG11X25hbWVzW3Byb2JlX2NjaV9yZXZpc2lvbigpXTsKKwljY2lfcG11LT5wbXUgPSAoc3RydWN0IHBtdSkgeworCQkubmFtZQkJPSBwbXVfbmFtZXNbcHJvYmVfY2NpX3JldmlzaW9uKCldLAorCQkudGFza19jdHhfbnIJPSBwZXJmX2ludmFsaWRfY29udGV4dCwKKwkJLnBtdV9lbmFibGUJPSBjY2lfcG11X2VuYWJsZSwKKwkJLnBtdV9kaXNhYmxlCT0gY2NpX3BtdV9kaXNhYmxlLAorCQkuZXZlbnRfaW5pdAk9IGNjaV9wbXVfZXZlbnRfaW5pdCwKKwkJLmFkZAkJPSBjY2lfcG11X2FkZCwKKwkJLmRlbAkJPSBjY2lfcG11X2RlbCwKKwkJLnN0YXJ0CQk9IGNjaV9wbXVfc3RhcnQsCisJCS5zdG9wCQk9IGNjaV9wbXVfc3RvcCwKKwkJLnJlYWQJCT0gcG11X3JlYWQsCisJCS5hdHRyX2dyb3Vwcwk9IHBtdV9hdHRyX2dyb3VwcywKIAl9OwogCiAJY2NpX3BtdS0+cGxhdF9kZXZpY2UgPSBwZGV2OwogCWNjaV9wbXUtPm51bV9ldmVudHMgPSBwbXVfZ2V0X21heF9jb3VudGVycygpOwogCi0JcmV0dXJuIGFybXBtdV9yZWdpc3RlcihjY2lfcG11LCAtMSk7CisJcmV0dXJuIHBlcmZfcG11X3JlZ2lzdGVyKCZjY2lfcG11LT5wbXUsIG5hbWUsIC0xKTsKIH0KIAorc3RhdGljIGludCBjY2lfcG11X2NwdV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IChsb25nKWhjcHU7CisJdW5zaWduZWQgaW50IHRhcmdldDsKKworCXN3aXRjaCAoYWN0aW9uICYgfkNQVV9UQVNLU19GUk9aRU4pIHsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJCWlmICghY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCAmcG11LT5jcHVzKSkKKwkJCWJyZWFrOworCQl0YXJnZXQgPSBjcHVtYXNrX2FueV9idXQoY3B1X29ubGluZV9tYXNrLCBjcHUpOworCQlpZiAodGFyZ2V0IDwgMCkgLy8gVVAsIGxhc3QgQ1BVCisJCQlicmVhazsKKwkJLyoKKwkJICogVE9ETzogbWlncmF0ZSBjb250ZXh0IG9uY2UgY29yZSByYWNlcyBvbiBldmVudC0+Y3R4IGhhdmUKKwkJICogYmVlbiBmaXhlZC4KKwkJICovCisJCWNwdW1hc2tfc2V0X2NwdSh0YXJnZXQsICZwbXUtPmNwdXMpOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2NpX3BtdV9jcHVfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBjY2lfcG11X2NwdV9ub3RpZmllciwKKwkvKgorCSAqIHRvIG1pZ3JhdGUgdW5jb3JlIGV2ZW50cywgb3VyIG5vdGlmaWVyIHNob3VsZCBiZSBleGVjdXRlZAorCSAqIGJlZm9yZSBwZXJmIGNvcmUncyBub3RpZmllci4KKwkgKi8KKwkucHJpb3JpdHkJPSBDUFVfUFJJX1BFUkYgKyAxLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXJtX2NjaV9wbXVfbWF0Y2hlc1tdID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAiYXJtLGNjaS00MDAtcG11IiwKQEAgLTYwNCwxNSArOTM5LDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXBtdS0+Y2NpX3BtdSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKihwbXUtPmNjaV9wbXUpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwbXUtPmNjaV9wbXUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcG11LT5od19ldmVudHMuZXZlbnRzID0gcG11LT5ldmVudHM7Ci0JcG11LT5od19ldmVudHMudXNlZF9tYXNrID0gcG11LT51c2VkX21hc2s7CiAJcmF3X3NwaW5fbG9ja19pbml0KCZwbXUtPmh3X2V2ZW50cy5wbXVfbG9jayk7CisJbXV0ZXhfaW5pdCgmcG11LT5yZXNlcnZlX211dGV4KTsKKwlhdG9taWNfc2V0KCZwbXUtPmFjdGl2ZV9ldmVudHMsIDApOworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZwbXUtPmNwdXMpOwogCi0JcmV0ID0gY2NpX3BtdV9pbml0KHBtdS0+Y2NpX3BtdSwgcGRldik7CisJcmV0ID0gcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjY2lfcG11X2NwdV9uYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNjaV9wbXVfaW5pdChwbXUsIHBkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jIGIvZHJpdmVycy9idXMvYnJjbXN0Yl9naXNiLmMKaW5kZXggZjJjZDZhMmQuLjQ2ZGU4ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jCisrKyBiL2RyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jCkBAIC0yMywzNSArMjMsMTAzIEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAorI2lmZGVmIENPTkZJR19BUk0KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorI2VuZGlmCiAKLSNkZWZpbmUgQVJCX1RJTUVSCQkJMHgwMDgKLSNkZWZpbmUgQVJCX0VSUl9DQVBfQ0xSCQkJMHg3ZTQKICNkZWZpbmUgIEFSQl9FUlJfQ0FQX0NMRUFSCQkoMSA8PCAwKQotI2RlZmluZSBBUkJfRVJSX0NBUF9ISV9BRERSCQkweDdlOAotI2RlZmluZSBBUkJfRVJSX0NBUF9BRERSCQkweDdlYwotI2RlZmluZSBBUkJfRVJSX0NBUF9EQVRBCQkweDdmMAotI2RlZmluZSBBUkJfRVJSX0NBUF9TVEFUVVMJCTB4N2Y0CiAjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfVElNRU9VVAkoMSA8PCAxMikKICNkZWZpbmUgIEFSQl9FUlJfQ0FQX1NUQVRVU19URUEJCSgxIDw8IDExKQogI2RlZmluZSAgQVJCX0VSUl9DQVBfU1RBVFVTX0JTX1NISUZUCSgxIDw8IDIpCiAjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfQlNfTUFTSwkweDNjCiAjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfV1JJVEUJKDEgPDwgMSkKICNkZWZpbmUgIEFSQl9FUlJfQ0FQX1NUQVRVU19WQUxJRAkoMSA8PCAwKQotI2RlZmluZSBBUkJfRVJSX0NBUF9NQVNURVIJCTB4N2Y4CisKK2VudW0geworCUFSQl9USU1FUiwKKwlBUkJfRVJSX0NBUF9DTFIsCisJQVJCX0VSUl9DQVBfSElfQUREUiwKKwlBUkJfRVJSX0NBUF9BRERSLAorCUFSQl9FUlJfQ0FQX0RBVEEsCisJQVJCX0VSUl9DQVBfU1RBVFVTLAorCUFSQl9FUlJfQ0FQX01BU1RFUiwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZ2lzYl9vZmZzZXRzX2JjbTcwMzhbXSA9IHsKKwlbQVJCX1RJTUVSXQkJPSAweDAwYywKKwlbQVJCX0VSUl9DQVBfQ0xSXQk9IDB4MGM0LAorCVtBUkJfRVJSX0NBUF9ISV9BRERSXQk9IC0xLAorCVtBUkJfRVJSX0NBUF9BRERSXQk9IDB4MGM4LAorCVtBUkJfRVJSX0NBUF9EQVRBXQk9IDB4MGNjLAorCVtBUkJfRVJSX0NBUF9TVEFUVVNdCT0gMHgwZDAsCisJW0FSQl9FUlJfQ0FQX01BU1RFUl0JPSAtMSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZ2lzYl9vZmZzZXRzX2JjbTc0MDBbXSA9IHsKKwlbQVJCX1RJTUVSXQkJPSAweDAwYywKKwlbQVJCX0VSUl9DQVBfQ0xSXQk9IDB4MGM4LAorCVtBUkJfRVJSX0NBUF9ISV9BRERSXQk9IC0xLAorCVtBUkJfRVJSX0NBUF9BRERSXQk9IDB4MGNjLAorCVtBUkJfRVJSX0NBUF9EQVRBXQk9IDB4MGQwLAorCVtBUkJfRVJSX0NBUF9TVEFUVVNdCT0gMHgwZDQsCisJW0FSQl9FUlJfQ0FQX01BU1RFUl0JPSAweDBkOCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZ2lzYl9vZmZzZXRzX2JjbTc0MzVbXSA9IHsKKwlbQVJCX1RJTUVSXQkJPSAweDAwYywKKwlbQVJCX0VSUl9DQVBfQ0xSXQk9IDB4MTY4LAorCVtBUkJfRVJSX0NBUF9ISV9BRERSXQk9IC0xLAorCVtBUkJfRVJSX0NBUF9BRERSXQk9IDB4MTZjLAorCVtBUkJfRVJSX0NBUF9EQVRBXQk9IDB4MTcwLAorCVtBUkJfRVJSX0NBUF9TVEFUVVNdCT0gMHgxNzQsCisJW0FSQl9FUlJfQ0FQX01BU1RFUl0JPSAweDE3OCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZ2lzYl9vZmZzZXRzX2JjbTc0NDVbXSA9IHsKKwlbQVJCX1RJTUVSXQkJPSAweDAwOCwKKwlbQVJCX0VSUl9DQVBfQ0xSXQk9IDB4N2U0LAorCVtBUkJfRVJSX0NBUF9ISV9BRERSXQk9IDB4N2U4LAorCVtBUkJfRVJSX0NBUF9BRERSXQk9IDB4N2VjLAorCVtBUkJfRVJSX0NBUF9EQVRBXQk9IDB4N2YwLAorCVtBUkJfRVJSX0NBUF9TVEFUVVNdCT0gMHg3ZjQsCisJW0FSQl9FUlJfQ0FQX01BU1RFUl0JPSAweDdmOCwKK307CiAKIHN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSB7CiAJdm9pZCBfX2lvbWVtCSpiYXNlOworCWNvbnN0IGludAkqZ2lzYl9vZmZzZXRzOwogCXN0cnVjdCBtdXRleAlsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsKIAl1MzIgdmFsaWRfbWFzazsKIAljb25zdCBjaGFyICptYXN0ZXJfbmFtZXNbc2l6ZW9mKHUzMikgKiBCSVRTX1BFUl9CWVRFXTsKKwl1MzIgc2F2ZWRfdGltZW91dDsKIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQoYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2VfbGlzdCk7CiAKK3N0YXRpYyB1MzIgZ2lzYl9yZWFkKHN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldiwgaW50IHJlZykKK3sKKwlpbnQgb2Zmc2V0ID0gZ2Rldi0+Z2lzYl9vZmZzZXRzW3JlZ107CisKKwkvKiByZXR1cm4gMSBpZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBoYXZlIEFSQl9FUlJfQ0FQX01BU1RFUiAqLworCWlmIChvZmZzZXQgPT0gLTEpCisJCXJldHVybiAxOworCisJcmV0dXJuIGlvcmVhZDMyKGdkZXYtPmJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBnaXNiX3dyaXRlKHN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldiwgdTMyIHZhbCwgaW50IHJlZykKK3sKKwlpbnQgb2Zmc2V0ID0gZ2Rldi0+Z2lzYl9vZmZzZXRzW3JlZ107CisKKwlpZiAob2Zmc2V0ID09IC0xKQorCQlyZXR1cm47CisJaW93cml0ZTMyKHZhbCwgZ2Rldi0+YmFzZSArIHJlZyk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGdpc2JfYXJiX2dldF90aW1lb3V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgIGNoYXIgKmJ1ZikKQEAgLTYxLDcgKzEyOSw3IEBACiAJdTMyIHRpbWVvdXQ7CiAKIAltdXRleF9sb2NrKCZnZGV2LT5sb2NrKTsKLQl0aW1lb3V0ID0gaW9yZWFkMzIoZ2Rldi0+YmFzZSArIEFSQl9USU1FUik7CisJdGltZW91dCA9IGdpc2JfcmVhZChnZGV2LCBBUkJfVElNRVIpOwogCW11dGV4X3VubG9jaygmZ2Rldi0+bG9jayk7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHRpbWVvdXQpOwpAQCAtODMsNyArMTUxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZnZGV2LT5sb2NrKTsKLQlpb3dyaXRlMzIodmFsLCBnZGV2LT5iYXNlICsgQVJCX1RJTUVSKTsKKwlnaXNiX3dyaXRlKGdkZXYsIHZhbCwgQVJCX1RJTUVSKTsKIAltdXRleF91bmxvY2soJmdkZXYtPmxvY2spOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtMTEwLDE4ICsxNzgsMTggQEAKIAljb25zdCBjaGFyICptX25hbWU7CiAJY2hhciBtX2ZtdFsxMV07CiAKLQljYXBfc3RhdHVzID0gaW9yZWFkMzIoZ2Rldi0+YmFzZSArIEFSQl9FUlJfQ0FQX1NUQVRVUyk7CisJY2FwX3N0YXR1cyA9IGdpc2JfcmVhZChnZGV2LCBBUkJfRVJSX0NBUF9TVEFUVVMpOwogCiAJLyogSW52YWxpZCBjYXB0dXJlZCBhZGRyZXNzLCBiYWlsIG91dCAqLwogCWlmICghKGNhcF9zdGF0dXMgJiBBUkJfRVJSX0NBUF9TVEFUVVNfVkFMSUQpKQogCQlyZXR1cm4gMTsKIAogCS8qIFJlYWQgdGhlIGFkZHJlc3MgYW5kIG1hc3RlciAqLwotCWFyYl9hZGRyID0gaW9yZWFkMzIoZ2Rldi0+YmFzZSArIEFSQl9FUlJfQ0FQX0FERFIpICYgMHhmZmZmZmZmZjsKKwlhcmJfYWRkciA9IGdpc2JfcmVhZChnZGV2LCBBUkJfRVJSX0NBUF9BRERSKSAmIDB4ZmZmZmZmZmY7CiAjaWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWVNfQUREUl9UXzY0QklUKSkKLQlhcmJfYWRkciB8PSAodTY0KWlvcmVhZDMyKGdkZXYtPmJhc2UgKyBBUkJfRVJSX0NBUF9ISV9BRERSKSA8PCAzMjsKKwlhcmJfYWRkciB8PSAodTY0KWdpc2JfcmVhZChnZGV2LCBBUkJfRVJSX0NBUF9ISV9BRERSKSA8PCAzMjsKICNlbmRpZgotCW1hc3RlciA9IGlvcmVhZDMyKGdkZXYtPmJhc2UgKyBBUkJfRVJSX0NBUF9NQVNURVIpOworCW1hc3RlciA9IGdpc2JfcmVhZChnZGV2LCBBUkJfRVJSX0NBUF9NQVNURVIpOwogCiAJbV9uYW1lID0gYnJjbXN0Yl9naXNiX21hc3Rlcl90b19zdHIoZ2RldiwgbWFzdGVyKTsKIAlpZiAoIW1fbmFtZSkgewpAQCAtMTM2LDExICsyMDQsMTIgQEAKIAkJbV9uYW1lKTsKIAogCS8qIGNsZWFyIHRoZSBHSVNCIGVycm9yICovCi0JaW93cml0ZTMyKEFSQl9FUlJfQ0FQX0NMRUFSLCBnZGV2LT5iYXNlICsgQVJCX0VSUl9DQVBfQ0xSKTsKKwlnaXNiX3dyaXRlKGdkZXYsIEFSQl9FUlJfQ0FQX0NMRUFSLCBBUkJfRVJSX0NBUF9DTFIpOwogCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJNCiBzdGF0aWMgaW50IGJyY21zdGJfYnVzX2Vycm9yX2hhbmRsZXIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAogCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0xNTksMTIgKzIyOCw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQotCi12b2lkIF9faW5pdCBicmNtc3RiX2hvb2tfZmF1bHRfY29kZSh2b2lkKQotewotCWhvb2tfZmF1bHRfY29kZSgyMiwgYnJjbXN0Yl9idXNfZXJyb3JfaGFuZGxlciwgU0lHQlVTLCAwLAotCQkJImltcHJlY2lzZSBleHRlcm5hbCBhYm9ydCIpOwotfQorI2VuZGlmCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBicmNtc3RiX2dpc2JfdGltZW91dF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTE5MiwxMCArMjU2LDIwIEBACiAJLmF0dHJzID0gZ2lzYl9hcmJfc3lzZnNfYXR0cnMsCiB9OwogCi1zdGF0aWMgaW50IGJyY21zdGJfZ2lzYl9hcmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJyY21zdGJfZ2lzYl9hcmJfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJyY20sZ2lzYi1hcmIiLCAgICAgICAgIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTc0NDUgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNzQ0NS1naXNiLWFyYiIsIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTc0NDUgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNzQzNS1naXNiLWFyYiIsIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTc0MzUgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNzQwMC1naXNiLWFyYiIsIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTc0MDAgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNzAzOC1naXNiLWFyYiIsIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTcwMzggfSwKKwl7IH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBicmNtc3RiX2dpc2JfYXJiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbiA9IHBkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJaW50IGVyciwgdGltZW91dF9pcnEsIHRlYV9pcnE7CiAJdW5zaWduZWQgaW50IG51bV9tYXN0ZXJzLCBqID0gMDsKQEAgLTIxNiw2ICsyOTAsMTMgQEAKIAlpZiAoSVNfRVJSKGdkZXYtPmJhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihnZGV2LT5iYXNlKTsKIAorCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShicmNtc3RiX2dpc2JfYXJiX29mX21hdGNoLCBkbik7CisJaWYgKCFvZl9pZCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBsb29rIHVwIGNvbXBhdGlibGUgc3RyaW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWdkZXYtPmdpc2Jfb2Zmc2V0cyA9IG9mX2lkLT5kYXRhOworCiAJZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCB0aW1lb3V0X2lycSwKIAkJCQlicmNtc3RiX2dpc2JfdGltZW91dF9oYW5kbGVyLCAwLCBwZGV2LT5uYW1lLAogCQkJCWdkZXYpOwpAQCAtMjYxLDI5ICszNDIsNjMgQEAKIAogCWxpc3RfYWRkX3RhaWwoJmdkZXYtPm5leHQsICZicmNtc3RiX2dpc2JfYXJiX2RldmljZV9saXN0KTsKIAorI2lmZGVmIENPTkZJR19BUk0KKwlob29rX2ZhdWx0X2NvZGUoMjIsIGJyY21zdGJfYnVzX2Vycm9yX2hhbmRsZXIsIFNJR0JVUywgMCwKKwkJCSJpbXByZWNpc2UgZXh0ZXJuYWwgYWJvcnQiKTsKKyNlbmRpZgorCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlZ2lzdGVyZWQgbWVtOiAlcCwgaXJxczogJWQsICVkXG4iLAogCQkJZ2Rldi0+YmFzZSwgdGltZW91dF9pcnEsIHRlYV9pcnEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJyY21zdGJfZ2lzYl9hcmJfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImJyY20sZ2lzYi1hcmIiIH0sCi0JeyB9LAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBicmNtc3RiX2dpc2JfYXJiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2UgKmdkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWdkZXYtPnNhdmVkX3RpbWVvdXQgPSBnaXNiX3JlYWQoZ2RldiwgQVJCX1RJTUVSKTsKKworCXJldHVybiAwOworfQorCisvKiBNYWtlIHN1cmUgd2UgcHJvdmlkZSB0aGUgc2FtZSB0aW1lb3V0IHZhbHVlIHRoYXQgd2FzIGNvbmZpZ3VyZWQgYmVmb3JlLCBhbmQKKyAqIGRvIHRoaXMgYmVmb3JlIHRoZSBHSVNCIHRpbWVvdXQgaW50ZXJydXB0IGhhbmRsZXIgaGFzIGFueSBjaGFuY2UgdG8gcnVuLgorICovCitzdGF0aWMgaW50IGJyY21zdGJfZ2lzYl9hcmJfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGJyY21zdGJfZ2lzYl9hcmJfZGV2aWNlICpnZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlnaXNiX3dyaXRlKGdkZXYsIGdkZXYtPnNhdmVkX3RpbWVvdXQsIEFSQl9USU1FUik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGJyY21zdGJfZ2lzYl9hcmJfc3VzcGVuZCAgICAgICBOVUxMCisjZGVmaW5lIGJyY21zdGJfZ2lzYl9hcmJfcmVzdW1lX25vaXJxICBOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGJyY21zdGJfZ2lzYl9hcmJfcG1fb3BzID0geworCS5zdXNwZW5kCT0gYnJjbXN0Yl9naXNiX2FyYl9zdXNwZW5kLAorCS5yZXN1bWVfbm9pcnEJPSBicmNtc3RiX2dpc2JfYXJiX3Jlc3VtZV9ub2lycSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJyY21zdGJfZ2lzYl9hcmJfZHJpdmVyID0gewotCS5wcm9iZQk9IGJyY21zdGJfZ2lzYl9hcmJfcHJvYmUsCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAiYnJjbS1naXNiLWFyYiIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBicmNtc3RiX2dpc2JfYXJiX29mX21hdGNoLAorCQkucG0JPSAmYnJjbXN0Yl9naXNiX2FyYl9wbV9vcHMsCiAJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJyY21fZ2lzYl9kcml2ZXJfaW5pdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJyY21zdGJfZ2lzYl9hcmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZicmNtc3RiX2dpc2JfYXJiX2RyaXZlciwKKwkJCQkgICAgIGJyY21zdGJfZ2lzYl9hcmJfcHJvYmUpOwogfQogCiBtb2R1bGVfaW5pdChicmNtX2dpc2JfZHJpdmVyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jIGIvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jCmluZGV4IDI2YzM3NzlkLi5lYjc2ODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9tdmVidS1tYnVzLmMKKysrIGIvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogLyoKICAqIEREUiB0YXJnZXQgaXMgdGhlIHNhbWUgb24gYWxsIHBsYXRmb3Jtcy4KQEAgLTk0LDIwICs5NSw0MiBAQAogCiAjZGVmaW5lIERPVkVfRERSX0JBU0VfQ1NfT0ZGKG4pICgobikgPDwgNCkKIAorLyogUmVsYXRpdmUgdG8gbWJ1c2JyaWRnZV9iYXNlICovCisjZGVmaW5lIE1CVVNfQlJJREdFX0NUUkxfT0ZGCTB4MAorI2RlZmluZSBNQlVTX0JSSURHRV9CQVNFX09GRgkweDQKKworLyogTWF4aW11bSBudW1iZXIgb2Ygd2luZG93cywgZm9yIGFsbCBrbm93biBwbGF0Zm9ybXMgKi8KKyNkZWZpbmUgTUJVU19XSU5TX01BWCAgICAgICAgICAgMjAKKwogc3RydWN0IG12ZWJ1X21idXNfc3RhdGU7CiAKIHN0cnVjdCBtdmVidV9tYnVzX3NvY19kYXRhIHsKIAl1bnNpZ25lZCBpbnQgbnVtX3dpbnM7CiAJdW5zaWduZWQgaW50IG51bV9yZW1hcHBhYmxlX3dpbnM7CisJYm9vbCBoYXNfbWJ1c19icmlkZ2U7CiAJdW5zaWduZWQgaW50ICgqd2luX2NmZ19vZmZzZXQpKGNvbnN0IGludCB3aW4pOwogCXZvaWQgKCpzZXR1cF9jcHVfdGFyZ2V0KShzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqcyk7CisJaW50ICgqc2F2ZV9jcHVfdGFyZ2V0KShzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqcywKKwkJCSAgICAgICB1MzIgKnN0b3JlX2FkZHIpOwogCWludCAoKnNob3dfY3B1X3RhcmdldCkoc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKnMsCiAJCQkgICAgICAgc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpOwogfTsKIAorLyoKKyAqIFVzZWQgdG8gc3RvcmUgdGhlIHN0YXRlIG9mIG9uZSBNQnVzIHdpbmRvdyBhY2Nyb3NzIHN1c3BlbmQvcmVzdW1lLgorICovCitzdHJ1Y3QgbXZlYnVfbWJ1c193aW5fZGF0YSB7CisJdTMyIGN0cmw7CisJdTMyIGJhc2U7CisJdTMyIHJlbWFwX2xvOworCXUzMiByZW1hcF9oaTsKK307CisKIHN0cnVjdCBtdmVidV9tYnVzX3N0YXRlIHsKIAl2b2lkIF9faW9tZW0gKm1idXN3aW5zX2Jhc2U7CiAJdm9pZCBfX2lvbWVtICpzZHJhbXdpbnNfYmFzZTsKKwl2b2lkIF9faW9tZW0gKm1idXNicmlkZ2VfYmFzZTsKKwlwaHlzX2FkZHJfdCBzZHJhbXdpbnNfcGh5c19iYXNlOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3NkcmFtOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGV2czsKQEAgLTExNSw2ICsxMzgsMTEgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgcGNpZV9pb19hcGVydHVyZTsKIAljb25zdCBzdHJ1Y3QgbXZlYnVfbWJ1c19zb2NfZGF0YSAqc29jOwogCWludCBod19pb19jb2hlcmVuY3k7CisKKwkvKiBVc2VkIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSAqLworCXUzMiBtYnVzX2JyaWRnZV9jdHJsOworCXUzMiBtYnVzX2JyaWRnZV9iYXNlOworCXN0cnVjdCBtdmVidV9tYnVzX3dpbl9kYXRhIHdpbnNbTUJVU19XSU5TX01BWF07CiB9OwogCiBzdGF0aWMgc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgbWJ1c19zdGF0ZTsKQEAgLTUxNiw2ICs1NDQsMjggQEAKIAltdmVidV9tYnVzX2RyYW1faW5mby5udW1fY3MgPSBjczsKIH0KIAorc3RhdGljIGludAorbXZlYnVfbWJ1c19kZWZhdWx0X3NhdmVfY3B1X3RhcmdldChzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqbWJ1cywKKwkJCQkgICB1MzIgKnN0b3JlX2FkZHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXUzMiBiYXNlID0gcmVhZGwobWJ1cy0+c2RyYW13aW5zX2Jhc2UgKyBERFJfQkFTRV9DU19PRkYoaSkpOworCQl1MzIgc2l6ZSA9IHJlYWRsKG1idXMtPnNkcmFtd2luc19iYXNlICsgRERSX1NJWkVfQ1NfT0ZGKGkpKTsKKworCQl3cml0ZWwobWJ1cy0+c2RyYW13aW5zX3BoeXNfYmFzZSArIEREUl9CQVNFX0NTX09GRihpKSwKKwkJICAgICAgIHN0b3JlX2FkZHIrKyk7CisJCXdyaXRlbChiYXNlLCBzdG9yZV9hZGRyKyspOworCQl3cml0ZWwobWJ1cy0+c2RyYW13aW5zX3BoeXNfYmFzZSArIEREUl9TSVpFX0NTX09GRihpKSwKKwkJICAgICAgIHN0b3JlX2FkZHIrKyk7CisJCXdyaXRlbChzaXplLCBzdG9yZV9hZGRyKyspOworCX0KKworCS8qIFdlJ3ZlIHdyaXR0ZW4gMTYgd29yZHMgdG8gdGhlIHN0b3JlIGFkZHJlc3MgKi8KKwlyZXR1cm4gMTY7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdAogbXZlYnVfbWJ1c19kb3ZlX3NldHVwX2NwdV90YXJnZXQoc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKm1idXMpCiB7CkBAIC01NDYsMTAgKzU5NiwzNSBAQAogCW12ZWJ1X21idXNfZHJhbV9pbmZvLm51bV9jcyA9IGNzOwogfQogCitzdGF0aWMgaW50CittdmVidV9tYnVzX2RvdmVfc2F2ZV9jcHVfdGFyZ2V0KHN0cnVjdCBtdmVidV9tYnVzX3N0YXRlICptYnVzLAorCQkJCXUzMiAqc3RvcmVfYWRkcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdTMyIG1hcCA9IHJlYWRsKG1idXMtPnNkcmFtd2luc19iYXNlICsgRE9WRV9ERFJfQkFTRV9DU19PRkYoaSkpOworCisJCXdyaXRlbChtYnVzLT5zZHJhbXdpbnNfcGh5c19iYXNlICsgRE9WRV9ERFJfQkFTRV9DU19PRkYoaSksCisJCSAgICAgICBzdG9yZV9hZGRyKyspOworCQl3cml0ZWwobWFwLCBzdG9yZV9hZGRyKyspOworCX0KKworCS8qIFdlJ3ZlIHdyaXR0ZW4gNCB3b3JkcyB0byB0aGUgc3RvcmUgYWRkcmVzcyAqLworCXJldHVybiA0OworfQorCitpbnQgbXZlYnVfbWJ1c19zYXZlX2NwdV90YXJnZXQodTMyICpzdG9yZV9hZGRyKQoreworCXJldHVybiBtYnVzX3N0YXRlLnNvYy0+c2F2ZV9jcHVfdGFyZ2V0KCZtYnVzX3N0YXRlLCBzdG9yZV9hZGRyKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdmVidV9tYnVzX3NvY19kYXRhIGFybWFkYV8zNzBfeHBfbWJ1c19kYXRhID0gewogCS5udW1fd2lucyAgICAgICAgICAgID0gMjAsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSA4LAorCS5oYXNfbWJ1c19icmlkZ2UgICAgID0gdHJ1ZSwKIAkud2luX2NmZ19vZmZzZXQgICAgICA9IGFybWFkYV8zNzBfeHBfbWJ1c193aW5fb2Zmc2V0LAorCS5zYXZlX2NwdV90YXJnZXQgICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NhdmVfY3B1X3RhcmdldCwKIAkuc2V0dXBfY3B1X3RhcmdldCAgICA9IG12ZWJ1X21idXNfZGVmYXVsdF9zZXR1cF9jcHVfdGFyZ2V0LAogCS5zaG93X2NwdV90YXJnZXQgICAgID0gbXZlYnVfc2RyYW1fZGVidWdfc2hvd19vcmlvbiwKIH07CkBAIC01NTgsNiArNjMzLDcgQEAKIAkubnVtX3dpbnMgICAgICAgICAgICA9IDgsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSA0LAogCS53aW5fY2ZnX29mZnNldCAgICAgID0gb3Jpb25fbWJ1c193aW5fb2Zmc2V0LAorCS5zYXZlX2NwdV90YXJnZXQgICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NhdmVfY3B1X3RhcmdldCwKIAkuc2V0dXBfY3B1X3RhcmdldCAgICA9IG12ZWJ1X21idXNfZGVmYXVsdF9zZXR1cF9jcHVfdGFyZ2V0LAogCS5zaG93X2NwdV90YXJnZXQgICAgID0gbXZlYnVfc2RyYW1fZGVidWdfc2hvd19vcmlvbiwKIH07CkBAIC01NjYsNiArNjQyLDcgQEAKIAkubnVtX3dpbnMgICAgICAgICAgICA9IDgsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSA0LAogCS53aW5fY2ZnX29mZnNldCAgICAgID0gb3Jpb25fbWJ1c193aW5fb2Zmc2V0LAorCS5zYXZlX2NwdV90YXJnZXQgICAgID0gbXZlYnVfbWJ1c19kb3ZlX3NhdmVfY3B1X3RhcmdldCwKIAkuc2V0dXBfY3B1X3RhcmdldCAgICA9IG12ZWJ1X21idXNfZG92ZV9zZXR1cF9jcHVfdGFyZ2V0LAogCS5zaG93X2NwdV90YXJnZXQgICAgID0gbXZlYnVfc2RyYW1fZGVidWdfc2hvd19kb3ZlLAogfTsKQEAgLTU3OCw2ICs2NTUsNyBAQAogCS5udW1fd2lucyAgICAgICAgICAgID0gOCwKIAkubnVtX3JlbWFwcGFibGVfd2lucyA9IDQsCiAJLndpbl9jZmdfb2Zmc2V0ICAgICAgPSBvcmlvbl9tYnVzX3dpbl9vZmZzZXQsCisJLnNhdmVfY3B1X3RhcmdldCAgICAgPSBtdmVidV9tYnVzX2RlZmF1bHRfc2F2ZV9jcHVfdGFyZ2V0LAogCS5zZXR1cF9jcHVfdGFyZ2V0ICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NldHVwX2NwdV90YXJnZXQsCiAJLnNob3dfY3B1X3RhcmdldCAgICAgPSBtdmVidV9zZHJhbV9kZWJ1Z19zaG93X29yaW9uLAogfTsKQEAgLTU4Niw2ICs2NjQsNyBAQAogCS5udW1fd2lucyAgICAgICAgICAgID0gOCwKIAkubnVtX3JlbWFwcGFibGVfd2lucyA9IDIsCiAJLndpbl9jZmdfb2Zmc2V0ICAgICAgPSBvcmlvbl9tYnVzX3dpbl9vZmZzZXQsCisJLnNhdmVfY3B1X3RhcmdldCAgICAgPSBtdmVidV9tYnVzX2RlZmF1bHRfc2F2ZV9jcHVfdGFyZ2V0LAogCS5zZXR1cF9jcHVfdGFyZ2V0ICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NldHVwX2NwdV90YXJnZXQsCiAJLnNob3dfY3B1X3RhcmdldCAgICAgPSBtdmVidV9zZHJhbV9kZWJ1Z19zaG93X29yaW9uLAogfTsKQEAgLTU5NCw2ICs2NzMsNyBAQAogCS5udW1fd2lucyAgICAgICAgICAgID0gMTQsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSA4LAogCS53aW5fY2ZnX29mZnNldCAgICAgID0gbXY3OHh4MF9tYnVzX3dpbl9vZmZzZXQsCisJLnNhdmVfY3B1X3RhcmdldCAgICAgPSBtdmVidV9tYnVzX2RlZmF1bHRfc2F2ZV9jcHVfdGFyZ2V0LAogCS5zZXR1cF9jcHVfdGFyZ2V0ICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NldHVwX2NwdV90YXJnZXQsCiAJLnNob3dfY3B1X3RhcmdldCAgICAgPSBtdmVidV9zZHJhbV9kZWJ1Z19zaG93X29yaW9uLAogfTsKQEAgLTY5OCwxMSArNzc4LDczIEBACiB9CiBmc19pbml0Y2FsbChtdmVidV9tYnVzX2RlYnVnZnNfaW5pdCk7CiAKK3N0YXRpYyBpbnQgbXZlYnVfbWJ1c19zdXNwZW5kKHZvaWQpCit7CisJc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKnMgPSAmbWJ1c19zdGF0ZTsKKwlpbnQgd2luOworCisJaWYgKCFzLT5tYnVzYnJpZGdlX2Jhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJZm9yICh3aW4gPSAwOyB3aW4gPCBzLT5zb2MtPm51bV93aW5zOyB3aW4rKykgeworCQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzLT5tYnVzd2luc19iYXNlICsKKwkJCXMtPnNvYy0+d2luX2NmZ19vZmZzZXQod2luKTsKKworCQlzLT53aW5zW3dpbl0uYmFzZSA9IHJlYWRsKGFkZHIgKyBXSU5fQkFTRV9PRkYpOworCQlzLT53aW5zW3dpbl0uY3RybCA9IHJlYWRsKGFkZHIgKyBXSU5fQ1RSTF9PRkYpOworCisJCWlmICh3aW4gPj0gcy0+c29jLT5udW1fcmVtYXBwYWJsZV93aW5zKQorCQkJY29udGludWU7CisKKwkJcy0+d2luc1t3aW5dLnJlbWFwX2xvID0gcmVhZGwoYWRkciArIFdJTl9SRU1BUF9MT19PRkYpOworCQlzLT53aW5zW3dpbl0ucmVtYXBfaGkgPSByZWFkbChhZGRyICsgV0lOX1JFTUFQX0hJX09GRik7CisJfQorCisJcy0+bWJ1c19icmlkZ2VfY3RybCA9IHJlYWRsKHMtPm1idXNicmlkZ2VfYmFzZSArCisJCQkJICAgIE1CVVNfQlJJREdFX0NUUkxfT0ZGKTsKKwlzLT5tYnVzX2JyaWRnZV9iYXNlID0gcmVhZGwocy0+bWJ1c2JyaWRnZV9iYXNlICsKKwkJCQkgICAgTUJVU19CUklER0VfQkFTRV9PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG12ZWJ1X21idXNfcmVzdW1lKHZvaWQpCit7CisJc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKnMgPSAmbWJ1c19zdGF0ZTsKKwlpbnQgd2luOworCisJd3JpdGVsKHMtPm1idXNfYnJpZGdlX2N0cmwsCisJICAgICAgIHMtPm1idXNicmlkZ2VfYmFzZSArIE1CVVNfQlJJREdFX0NUUkxfT0ZGKTsKKwl3cml0ZWwocy0+bWJ1c19icmlkZ2VfYmFzZSwKKwkgICAgICAgcy0+bWJ1c2JyaWRnZV9iYXNlICsgTUJVU19CUklER0VfQkFTRV9PRkYpOworCisJZm9yICh3aW4gPSAwOyB3aW4gPCBzLT5zb2MtPm51bV93aW5zOyB3aW4rKykgeworCQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzLT5tYnVzd2luc19iYXNlICsKKwkJCXMtPnNvYy0+d2luX2NmZ19vZmZzZXQod2luKTsKKworCQl3cml0ZWwocy0+d2luc1t3aW5dLmJhc2UsIGFkZHIgKyBXSU5fQkFTRV9PRkYpOworCQl3cml0ZWwocy0+d2luc1t3aW5dLmN0cmwsIGFkZHIgKyBXSU5fQ1RSTF9PRkYpOworCisJCWlmICh3aW4gPj0gcy0+c29jLT5udW1fcmVtYXBwYWJsZV93aW5zKQorCQkJY29udGludWU7CisKKwkJd3JpdGVsKHMtPndpbnNbd2luXS5yZW1hcF9sbywgYWRkciArIFdJTl9SRU1BUF9MT19PRkYpOworCQl3cml0ZWwocy0+d2luc1t3aW5dLnJlbWFwX2hpLCBhZGRyICsgV0lOX1JFTUFQX0hJX09GRik7CisJfQorfQorCitzdHJ1Y3Qgc3lzY29yZV9vcHMgbXZlYnVfbWJ1c19zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZAk9IG12ZWJ1X21idXNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG12ZWJ1X21idXNfcmVzdW1lLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgbXZlYnVfbWJ1c19jb21tb25faW5pdChzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqbWJ1cywKIAkJCQkJIHBoeXNfYWRkcl90IG1idXN3aW5zX3BoeXNfYmFzZSwKIAkJCQkJIHNpemVfdCBtYnVzd2luc19zaXplLAogCQkJCQkgcGh5c19hZGRyX3Qgc2RyYW13aW5zX3BoeXNfYmFzZSwKLQkJCQkJIHNpemVfdCBzZHJhbXdpbnNfc2l6ZSkKKwkJCQkJIHNpemVfdCBzZHJhbXdpbnNfc2l6ZSwKKwkJCQkJIHBoeXNfYWRkcl90IG1idXNicmlkZ2VfcGh5c19iYXNlLAorCQkJCQkgc2l6ZV90IG1idXNicmlkZ2Vfc2l6ZSkKIHsKIAlpbnQgd2luOwogCkBAIC03MTYsMTEgKzg1OCwyNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwltYnVzLT5zZHJhbXdpbnNfcGh5c19iYXNlID0gc2RyYW13aW5zX3BoeXNfYmFzZTsKKworCWlmIChtYnVzYnJpZGdlX3BoeXNfYmFzZSkgeworCQltYnVzLT5tYnVzYnJpZGdlX2Jhc2UgPSBpb3JlbWFwKG1idXNicmlkZ2VfcGh5c19iYXNlLAorCQkJCQkJbWJ1c2JyaWRnZV9zaXplKTsKKwkJaWYgKCFtYnVzLT5tYnVzYnJpZGdlX2Jhc2UpIHsKKwkJCWlvdW5tYXAobWJ1cy0+c2RyYW13aW5zX2Jhc2UpOworCQkJaW91bm1hcChtYnVzLT5tYnVzd2luc19iYXNlKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfSBlbHNlCisJCW1idXMtPm1idXNicmlkZ2VfYmFzZSA9IE5VTEw7CisKIAlmb3IgKHdpbiA9IDA7IHdpbiA8IG1idXMtPnNvYy0+bnVtX3dpbnM7IHdpbisrKQogCQltdmVidV9tYnVzX2Rpc2FibGVfd2luZG93KG1idXMsIHdpbik7CiAKIAltYnVzLT5zb2MtPnNldHVwX2NwdV90YXJnZXQobWJ1cyk7CiAKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbXZlYnVfbWJ1c19zeXNjb3JlX29wcyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ2LDcgKzkwMyw3IEBACiAJCQltYnVzd2luc19waHlzX2Jhc2UsCiAJCQltYnVzd2luc19zaXplLAogCQkJc2RyYW13aW5zX3BoeXNfYmFzZSwKLQkJCXNkcmFtd2luc19zaXplKTsKKwkJCXNkcmFtd2luc19zaXplLCAwLCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19PRgpAQCAtODg3LDcgKzEwNDQsNyBAQAogCiBpbnQgX19pbml0IG12ZWJ1X21idXNfZHRfaW5pdChib29sIGlzX2NvaGVyZW50KQogewotCXN0cnVjdCByZXNvdXJjZSBtYnVzd2luc19yZXMsIHNkcmFtd2luc19yZXM7CisJc3RydWN0IHJlc291cmNlIG1idXN3aW5zX3Jlcywgc2RyYW13aW5zX3JlcywgbWJ1c2JyaWRnZV9yZXM7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmNvbnRyb2xsZXI7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CiAJY29uc3QgX19iZTMyICpwcm9wOwpAQCAtOTIzLDYgKzEwODAsMTkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyoKKwkgKiBTZXQgdGhlIHJlc291cmNlIHRvIDAgc28gdGhhdCBpdCBjYW4gYmUgbGVmdCB1bm1hcHBlZCBieQorCSAqIG12ZWJ1X21idXNfY29tbW9uX2luaXQoKSBpZiB0aGUgRFQgZG9lc24ndCBjYXJyeSB0aGUKKwkgKiBuZWNlc3NhcnkgaW5mb3JtYXRpb24uIFRoaXMgaXMgbmVlZGVkIHRvIHByZXNlcnZlIGJhY2t3YXJkCisJICogY29tcGF0aWJpbGl0eS4KKwkgKi8KKwltZW1zZXQoJm1idXNicmlkZ2VfcmVzLCAwLCBzaXplb2YobWJ1c2JyaWRnZV9yZXMpKTsKKworCWlmIChtYnVzX3N0YXRlLnNvYy0+aGFzX21idXNfYnJpZGdlKSB7CisJCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGNvbnRyb2xsZXIsIDIsICZtYnVzYnJpZGdlX3JlcykpCisJCQlwcl93YXJuKEZXX1dBUk4gImRlcHJlY2F0ZWQgbWJ1cy1tdmVidSBEZXZpY2UgVHJlZSwgc3VzcGVuZC9yZXN1bWUgd2lsbCBub3Qgd29ya1xuIik7CisJfQorCiAJbWJ1c19zdGF0ZS5od19pb19jb2hlcmVuY3kgPSBpc19jb2hlcmVudDsKIAogCS8qIEdldCBvcHRpb25hbCBwY2llLXttZW0saW99LWFwZXJ0dXJlIHByb3BlcnRpZXMgKi8KQEAgLTkzMyw3ICsxMTAzLDkgQEAKIAkJCQkgICAgIG1idXN3aW5zX3Jlcy5zdGFydCwKIAkJCQkgICAgIHJlc291cmNlX3NpemUoJm1idXN3aW5zX3JlcyksCiAJCQkJICAgICBzZHJhbXdpbnNfcmVzLnN0YXJ0LAotCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZSgmc2RyYW13aW5zX3JlcykpOworCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZSgmc2RyYW13aW5zX3JlcyksCisJCQkJICAgICBtYnVzYnJpZGdlX3Jlcy5zdGFydCwKKwkJCQkgICAgIHJlc291cmNlX3NpemUoJm1idXNicmlkZ2VfcmVzKSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvb21hcF9sM19ub2MuYyBiL2RyaXZlcnMvYnVzL29tYXBfbDNfbm9jLmMKaW5kZXggNTMxYWU1OS4uMTdkODY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9idXMvb21hcF9sM19ub2MuYworKysgYi9kcml2ZXJzL2J1cy9vbWFwX2wzX25vYy5jCkBAIC0yMjIsMTAgKzIyMiwxNCBAQAogCQkJfQogCiAJCQkvKiBFcnJvciBmb3VuZCBzbyBicmVhayB0aGUgZm9yIGxvb3AgKi8KLQkJCWJyZWFrOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQl9CiAJfQotCXJldHVybiBJUlFfSEFORExFRDsKKworCWRldl9lcnIobDMtPmRldiwgIkwzICVzIElSUSBub3QgaGFuZGxlZCEhXG4iLAorCQlpbnR0eXBlID8gImRlYnVnIiA6ICJhcHBsaWNhdGlvbiIpOworCisJcmV0dXJuIElSUV9OT05FOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBsM19ub2NfbWF0Y2hbXSA9IHsKQEAgLTI5NiwxMSArMzAwLDY2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmCUNPTkZJR19QTQorCisvKioKKyAqIGwzX3Jlc3VtZV9ub2lycSgpIC0gcmVzdW1lIGZ1bmN0aW9uIGZvciBsM19ub2MKKyAqIEBkZXY6CXBvaW50ZXIgdG8gbDNfbm9jIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBXZSBvbmx5IGhhdmUgdGhlIHJlc3VtZSBoYW5kbGVyIG9ubHkgc2luY2Ugd2UKKyAqIGhhdmUgYWxyZWFkeSBtYWludGFpbmVkIHRoZSBkZWx0YSByZWdpc3RlcgorICogY29uZmlndXJhdGlvbiBhcyBwYXJ0IG9mIGNvbmZpZ3VyaW5nIHRoZSBzeXN0ZW0KKyAqLworc3RhdGljIGludCBsM19yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBvbWFwX2wzICpsMyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpOworCXN0cnVjdCBsM19mbGFnbXV4X2RhdGEgKmZsYWdfbXV4OworCXZvaWQgX19pb21lbSAqYmFzZSwgKm1hc2tfcmVneCA9IE5VTEw7CisJdTMyIG1hc2tfdmFsOworCisJZm9yIChpID0gMDsgaSA8IGwzLT5udW1fbW9kdWxlczsgaSsrKSB7CisJCWJhc2UgPSBsMy0+bDNfYmFzZVtpXTsKKwkJZmxhZ19tdXggPSBsMy0+bDNfZmxhZ211eFtpXTsKKwkJaWYgKCFmbGFnX211eC0+bWFza19hcHBfYml0cyAmJiAhZmxhZ19tdXgtPm1hc2tfZGJnX2JpdHMpCisJCQljb250aW51ZTsKKworCQltYXNrX3JlZ3ggPSBiYXNlICsgZmxhZ19tdXgtPm9mZnNldCArIEwzX0ZMQUdNVVhfTUFTSzAgKworCQkJICAgKEwzX0FQUExJQ0FUSU9OX0VSUk9SIDw8IDMpOworCQltYXNrX3ZhbCA9IHJlYWRsX3JlbGF4ZWQobWFza19yZWd4KTsKKwkJbWFza192YWwgJj0gfihmbGFnX211eC0+bWFza19hcHBfYml0cyk7CisKKwkJd3JpdGVsX3JlbGF4ZWQobWFza192YWwsIG1hc2tfcmVneCk7CisJCW1hc2tfcmVneCA9IGJhc2UgKyBmbGFnX211eC0+b2Zmc2V0ICsgTDNfRkxBR01VWF9NQVNLMCArCisJCQkgICAoTDNfREVCVUdfRVJST1IgPDwgMyk7CisJCW1hc2tfdmFsID0gcmVhZGxfcmVsYXhlZChtYXNrX3JlZ3gpOworCQltYXNrX3ZhbCAmPSB+KGZsYWdfbXV4LT5tYXNrX2RiZ19iaXRzKTsKKworCQl3cml0ZWxfcmVsYXhlZChtYXNrX3ZhbCwgbWFza19yZWd4KTsKKwl9CisKKwkvKiBEdW1teSByZWFkIHRvIGZvcmNlIE9DUCBiYXJyaWVyICovCisJaWYgKG1hc2tfcmVneCkKKwkJKHZvaWQpcmVhZGwobWFza19yZWd4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbDNfZGV2X3BtX29wcyA9IHsKKwkucmVzdW1lX25vaXJxCQk9IGwzX3Jlc3VtZV9ub2lycSwKK307CisKKyNkZWZpbmUgTDNfREVWX1BNX09QUyAoJmwzX2Rldl9wbV9vcHMpCisjZWxzZQorI2RlZmluZSBMM19ERVZfUE1fT1BTIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2wzX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb21hcF9sM19wcm9iZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gIm9tYXBfbDNfbm9jIiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucG0JCT0gTDNfREVWX1BNX09QUywKIAkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGwzX25vY19tYXRjaCksCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9vbWFwX2wzX3NteC5jIGIvZHJpdmVycy9idXMvb21hcF9sM19zbXguYwppbmRleCBhY2MyMTY0Li41OTdmZGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9vbWFwX2wzX3NteC5jCisrKyBiL2RyaXZlcnMvYnVzL29tYXBfbDNfc214LmMKQEAgLTI3LDYgKzI3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorCiAjaW5jbHVkZSAib21hcF9sM19zbXguaCIKIAogc3RhdGljIGlubGluZSB1NjQgb21hcDNfbDNfcmVhZGxsKHZvaWQgX19pb21lbSAqYmFzZSwgdTE2IHJlZykKQEAgLTIxMSw3ICsyMTUsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwM19sM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorI2lmIElTX0JVSUxUSU4oQ09ORklHX09GKQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb21hcDNfbDNfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInRpLG9tYXAzLWwzLXNteCIsCisJfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb21hcDNfbDNfbWF0Y2gpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgb21hcDNfbDNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgb21hcDNfbDMgKmwzOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMjY1LDcgKzI3OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgb21hcDNfbDNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IG9tYXAzX2wzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbWFwM19sMyAgICAgICAgICpsMyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCkBAIC0yNzgsMTUgKzI5MiwxNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwM19sM19kcml2ZXIgPSB7Ci0JLnJlbW92ZSAgICAgICAgID0gX19leGl0X3Aob21hcDNfbDNfcmVtb3ZlKSwKKwkucHJvYmUJCT0gb21hcDNfbDNfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gb21hcDNfbDNfcmVtb3ZlLAogCS5kcml2ZXIgICAgICAgICA9IHsKLQkubmFtZSAgID0gIm9tYXBfbDNfc214IiwKKwkJLm5hbWUgICA9ICJvbWFwX2wzX3NteCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvbWFwM19sM19tYXRjaCksCiAJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAzX2wzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZvbWFwM19sM19kcml2ZXIsIG9tYXAzX2wzX3Byb2JlKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwM19sM19kcml2ZXIpOwogfQogcG9zdGNvcmVfaW5pdGNhbGxfc3luYyhvbWFwM19sM19pbml0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9wc2VyaWVzLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9wc2VyaWVzLXJuZy5jCmluZGV4IDYyMjZhYTAuLmJjZjg2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vcHNlcmllcy1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3BzZXJpZXMtcm5nLmMKQEAgLTI1LDE4ICsyNSwyMSBAQAogI2luY2x1ZGUgPGFzbS92aW8uaD4KIAogCi1zdGF0aWMgaW50IHBzZXJpZXNfcm5nX2RhdGFfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdTMyICpkYXRhKQorc3RhdGljIGludCBwc2VyaWVzX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB2b2lkICpkYXRhLCBzaXplX3QgbWF4LCBib29sIHdhaXQpCiB7CisJdTY0IGJ1ZmZlcltQTFBBUl9IQ0FMTF9CVUZTSVpFXTsKKwlzaXplX3Qgc2l6ZSA9IG1heCA8IDggPyBtYXggOiA4OwogCWludCByYzsKIAotCXJjID0gcGxwYXJfaGNhbGwoSF9SQU5ET00sICh1bnNpZ25lZCBsb25nICopZGF0YSk7CisJcmMgPSBwbHBhcl9oY2FsbChIX1JBTkRPTSwgKHVuc2lnbmVkIGxvbmcgKilidWZmZXIpOwogCWlmIChyYyAhPSBIX1NVQ0NFU1MpIHsKIAkJcHJfZXJyX3JhdGVsaW1pdGVkKCJIX1JBTkRPTSBjYWxsIGZhaWxlZCAlZFxuIiwgcmMpOwogCQlyZXR1cm4gLUVJTzsKIAl9CisJbWVtY3B5KGRhdGEsIGJ1ZmZlciwgc2l6ZSk7CiAKIAkvKiBUaGUgaHlwZXJ2aXNvciBpbnRlcmZhY2UgcmV0dXJucyA2NCBiaXRzICovCi0JcmV0dXJuIDg7CisJcmV0dXJuIHNpemU7CiB9CiAKIC8qKgpAQCAtNTUsNyArNTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGh3cm5nIHBzZXJpZXNfcm5nID0gewogCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAotCS5kYXRhX3JlYWQJPSBwc2VyaWVzX3JuZ19kYXRhX3JlYWQsCisJLnJlYWQJCT0gcHNlcmllc19ybmdfcmVhZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfcm5nX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNTI0YjcwNy4uNGM1ODMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtODQsOSArODQsMTIgQEAKIH0KICNlbmRpZgogCi12b2lkIF9fd2VhayB1bnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgcGh5cywgdm9pZCAqYWRkcikKKyNpZm5kZWYgdW54bGF0ZV9kZXZfbWVtX3B0cgorI2RlZmluZSB1bnhsYXRlX2Rldl9tZW1fcHRyIHVueGxhdGVfZGV2X21lbV9wdHIKK3ZvaWQgX193ZWFrIHVueGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqYWRkcikKIHsKIH0KKyNlbmRpZgogCiAvKgogICogVGhpcyBmdW5jaW9uIHJlYWRzIHRoZSAqcGh5c2ljYWwqIG1lbW9yeS4gVGhlIGZfcG9zIHBvaW50cyBkaXJlY3RseSB0byB0aGUKQEAgLTk3LDcgKzEwMCw3IEBACiB7CiAJcGh5c19hZGRyX3QgcCA9ICpwcG9zOwogCXNzaXplX3QgcmVhZCwgc3o7Ci0JY2hhciAqcHRyOworCXZvaWQgKnB0cjsKIAogCWlmIChwICE9ICpwcG9zKQogCQlyZXR1cm4gMDsKQEAgLTQwMCw3ICs0MDMsNyBAQAogCQkJICogdW5jYWNoZWQsIHRoZW4gaXQgbXVzdCBhbHNvIGJlIGFjY2Vzc2VkIHVuY2FjaGVkCiAJCQkgKiBieSB0aGUga2VybmVsIG9yIGRhdGEgY29ycnVwdGlvbiBtYXkgb2NjdXIKIAkJCSAqLwotCQkJa2J1ZiA9IHhsYXRlX2Rldl9rbWVtX3B0cigoY2hhciAqKXApOworCQkJa2J1ZiA9IHhsYXRlX2Rldl9rbWVtX3B0cigodm9pZCAqKXApOwogCiAJCQlpZiAoY29weV90b191c2VyKGJ1Ziwga2J1Ziwgc3opKQogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtNDYxLDcgKzQ2NCw3IEBACiAjZW5kaWYKIAogCXdoaWxlIChjb3VudCA+IDApIHsKLQkJY2hhciAqcHRyOworCQl2b2lkICpwdHI7CiAKIAkJc3ogPSBzaXplX2luc2lkZV9wYWdlKHAsIGNvdW50KTsKIApAQCAtNDcwLDcgKzQ3Myw3IEBACiAJCSAqIGl0IG11c3QgYWxzbyBiZSBhY2Nlc3NlZCB1bmNhY2hlZCBieSB0aGUga2VybmVsIG9yIGRhdGEKIAkJICogY29ycnVwdGlvbiBtYXkgb2NjdXIuCiAJCSAqLwotCQlwdHIgPSB4bGF0ZV9kZXZfa21lbV9wdHIoKGNoYXIgKilwKTsKKwkJcHRyID0geGxhdGVfZGV2X2ttZW1fcHRyKCh2b2lkICopcCk7CiAKIAkJY29waWVkID0gY29weV9mcm9tX3VzZXIocHRyLCBidWYsIHN6KTsKIAkJaWYgKGNvcGllZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCBiZmE2NDAwLi5jZjdhNTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMTQ0OSw4ICsxNDQ5LDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmcG9ydC0+b3V0dnFfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+d2FpdHF1ZXVlKTsKIAotCXZpcnRpb19kZXZpY2VfcmVhZHkocG9ydGRldi0+dmRldik7Ci0KIAkvKiBGaWxsIHRoZSBpbl92cSB3aXRoIGJ1ZmZlcnMgc28gdGhlIGhvc3QgY2FuIHNlbmQgdXMgZGF0YS4gKi8KIAlucl9hZGRlZF9idWZzID0gZmlsbF9xdWV1ZShwb3J0LT5pbl92cSwgJnBvcnQtPmluYnVmX2xvY2spOwogCWlmICghbnJfYWRkZWRfYnVmcykgewpAQCAtMjAyNiw2ICsyMDI0LDggQEAKIAlzcGluX2xvY2tfaW5pdCgmcG9ydGRldi0+cG9ydHNfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnBvcnRkZXYtPnBvcnRzKTsKIAorCXZpcnRpb19kZXZpY2VfcmVhZHkocG9ydGRldi0+dmRldik7CisKIAlpZiAobXVsdGlwb3J0KSB7CiAJCXVuc2lnbmVkIGludCBucl9hZGRlZF9idWZzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9hdDkxL2Nsay11c2IuYyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXVzYi5jCmluZGV4IDI0YjViMDIuLmEyM2FjMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXVzYi5jCisrKyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXVzYi5jCkBAIC01MiwyOSArNTIsMjYgQEAKIAogCXRtcCA9IHBtY19yZWFkKHBtYywgQVQ5MV9QTUNfVVNCKTsKIAl1c2JkaXYgPSAodG1wICYgQVQ5MV9QTUNfT0hDSVVTQkRJVikgPj4gU0FNOVg1X1VTQl9ESVZfU0hJRlQ7Ci0JcmV0dXJuIHBhcmVudF9yYXRlIC8gKHVzYmRpdiArIDEpOworCisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCAodXNiZGl2ICsgMSkpOwogfQogCiBzdGF0aWMgbG9uZyBhdDkxc2FtOXg1X2Nsa191c2Jfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgKnBhcmVudF9yYXRlKQogewogCXVuc2lnbmVkIGxvbmcgZGl2OwotCXVuc2lnbmVkIGxvbmcgYmVzdHJhdGU7Ci0JdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAoIXJhdGUpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHJhdGUgPj0gKnBhcmVudF9yYXRlKQogCQlyZXR1cm4gKnBhcmVudF9yYXRlOwogCi0JZGl2ID0gKnBhcmVudF9yYXRlIC8gcmF0ZTsKLQlpZiAoZGl2ID49IFNBTTlYNV9VU0JfTUFYX0RJVikKLQkJcmV0dXJuICpwYXJlbnRfcmF0ZSAvIChTQU05WDVfVVNCX01BWF9ESVYgKyAxKTsKKwlkaXYgPSBESVZfUk9VTkRfQ0xPU0VTVCgqcGFyZW50X3JhdGUsIHJhdGUpOworCWlmIChkaXYgPiBTQU05WDVfVVNCX01BWF9ESVYgKyAxKQorCQlkaXYgPSBTQU05WDVfVVNCX01BWF9ESVYgKyAxOwogCi0JYmVzdHJhdGUgPSAqcGFyZW50X3JhdGUgLyBkaXY7Ci0JdG1wID0gKnBhcmVudF9yYXRlIC8gKGRpdiArIDEpOwotCWlmIChiZXN0cmF0ZSAtIHJhdGUgPiByYXRlIC0gdG1wKQotCQliZXN0cmF0ZSA9IHRtcDsKLQotCXJldHVybiBiZXN0cmF0ZTsKKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoKnBhcmVudF9yYXRlLCBkaXYpOwogfQogCiBzdGF0aWMgaW50IGF0OTFzYW05eDVfY2xrX3VzYl9zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkKQEAgLTEwNiw5ICsxMDMsMTMgQEAKIAl1MzIgdG1wOwogCXN0cnVjdCBhdDkxc2FtOXg1X2Nsa191c2IgKnVzYiA9IHRvX2F0OTFzYW05eDVfY2xrX3VzYihodyk7CiAJc3RydWN0IGF0OTFfcG1jICpwbWMgPSB1c2ItPnBtYzsKLQl1bnNpZ25lZCBsb25nIGRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGRpdjsKIAotCWlmIChwYXJlbnRfcmF0ZSAlIHJhdGUgfHwgZGl2IDwgMSB8fCBkaXYgPj0gU0FNOVg1X1VTQl9NQVhfRElWKQorCWlmICghcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwgcmF0ZSk7CisJaWYgKGRpdiA+IFNBTTlYNV9VU0JfTUFYX0RJViArIDEgfHwgIWRpdikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl0bXAgPSBwbWNfcmVhZChwbWMsIEFUOTFfUE1DX1VTQikgJiB+QVQ5MV9QTUNfT0hDSVVTQkRJVjsKQEAgLTI1Myw3ICsyNTQsNyBAQAogCiAJCXRtcF9wYXJlbnRfcmF0ZSA9IHJhdGUgKiB1c2ItPmRpdmlzb3JzW2ldOwogCQl0bXBfcGFyZW50X3JhdGUgPSBfX2Nsa19yb3VuZF9yYXRlKHBhcmVudCwgdG1wX3BhcmVudF9yYXRlKTsKLQkJdG1wcmF0ZSA9IHRtcF9wYXJlbnRfcmF0ZSAvIHVzYi0+ZGl2aXNvcnNbaV07CisJCXRtcHJhdGUgPSBESVZfUk9VTkRfQ0xPU0VTVCh0bXBfcGFyZW50X3JhdGUsIHVzYi0+ZGl2aXNvcnNbaV0pOwogCQlpZiAodG1wcmF0ZSA8IHJhdGUpCiAJCQl0bXBkaWZmID0gcmF0ZSAtIHRtcHJhdGU7CiAJCWVsc2UKQEAgLTI4MSwxMCArMjgyLDEwIEBACiAJc3RydWN0IGF0OTFfcG1jICpwbWMgPSB1c2ItPnBtYzsKIAl1bnNpZ25lZCBsb25nIGRpdjsKIAotCWlmICghcmF0ZSB8fCBwYXJlbnRfcmF0ZSAlIHJhdGUpCisJaWYgKCFyYXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKwlkaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwgcmF0ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUk05MjAwX1VTQl9ESVZfVEFCX1NJWkU7IGkrKykgewogCQlpZiAodXNiLT5kaXZpc29yc1tpXSA9PSBkaXYpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1kaXZpZGVyLmMgYi9kcml2ZXJzL2Nsay9jbGstZGl2aWRlci5jCmluZGV4IDE4YTlkZTIuLmMwYTg0MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay1kaXZpZGVyLmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLWRpdmlkZXIuYwpAQCAtMjYzLDYgKzI2MywxNCBAQAogCWlmICghcmF0ZSkKIAkJcmF0ZSA9IDE7CiAKKwkvKiBpZiByZWFkIG9ubHksIGp1c3QgcmV0dXJuIGN1cnJlbnQgdmFsdWUgKi8KKwlpZiAoZGl2aWRlci0+ZmxhZ3MgJiBDTEtfRElWSURFUl9SRUFEX09OTFkpIHsKKwkJYmVzdGRpdiA9IHJlYWRsKGRpdmlkZXItPnJlZykgPj4gZGl2aWRlci0+c2hpZnQ7CisJCWJlc3RkaXYgJj0gZGl2X21hc2soZGl2aWRlcik7CisJCWJlc3RkaXYgPSBfZ2V0X2RpdihkaXZpZGVyLCBiZXN0ZGl2KTsKKwkJcmV0dXJuIGJlc3RkaXY7CisJfQorCiAJbWF4ZGl2ID0gX2dldF9tYXhkaXYoZGl2aWRlcik7CiAKIAlpZiAoIShfX2Nsa19nZXRfZmxhZ3MoaHctPmNsaykgJiBDTEtfU0VUX1JBVEVfUEFSRU5UKSkgewpAQCAtMzYxLDExICszNjksNiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNsa19kaXZpZGVyX29wcyk7CiAKLWNvbnN0IHN0cnVjdCBjbGtfb3BzIGNsa19kaXZpZGVyX3JvX29wcyA9IHsKLQkucmVjYWxjX3JhdGUgPSBjbGtfZGl2aWRlcl9yZWNhbGNfcmF0ZSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChjbGtfZGl2aWRlcl9yb19vcHMpOwotCiBzdGF0aWMgc3RydWN0IGNsayAqX3JlZ2lzdGVyX2RpdmlkZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJdm9pZCBfX2lvbWVtICpyZWcsIHU4IHNoaWZ0LCB1OCB3aWR0aCwKQEAgLTM5MSwxMCArMzk0LDcgQEAKIAl9CiAKIAlpbml0Lm5hbWUgPSBuYW1lOwotCWlmIChjbGtfZGl2aWRlcl9mbGFncyAmIENMS19ESVZJREVSX1JFQURfT05MWSkKLQkJaW5pdC5vcHMgPSAmY2xrX2RpdmlkZXJfcm9fb3BzOwotCWVsc2UKLQkJaW5pdC5vcHMgPSAmY2xrX2RpdmlkZXJfb3BzOworCWluaXQub3BzID0gJmNsa19kaXZpZGVyX29wczsKIAlpbml0LmZsYWdzID0gZmxhZ3MgfCBDTEtfSVNfQkFTSUM7CiAJaW5pdC5wYXJlbnRfbmFtZXMgPSAocGFyZW50X25hbWUgPyAmcGFyZW50X25hbWU6IE5VTEwpOwogCWluaXQubnVtX3BhcmVudHMgPSAocGFyZW50X25hbWUgPyAxIDogMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGstczJtcHMxMS5jIGIvZHJpdmVycy9jbGsvY2xrLXMybXBzMTEuYwppbmRleCBiNzc5N2ZiLi43YmIxM2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGstczJtcHMxMS5jCisrKyBiL2RyaXZlcnMvY2xrL2Nsay1zMm1wczExLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wczExLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTQuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zNW04NzY3Lmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvY29yZS5oPgpAQCAtMTIwLDYgKzEyMSwyNCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19pbml0X2RhdGEgczJtcHMxM19jbGtzX2luaXRbUzJNUFMxMV9DTEtTX05VTV0gPSB7CisJW1MyTVBTMTFfQ0xLX0FQXSA9IHsKKwkJLm5hbWUgPSAiczJtcHMxM19hcCIsCisJCS5vcHMgPSAmczJtcHMxMV9jbGtfb3BzLAorCQkuZmxhZ3MgPSBDTEtfSVNfUk9PVCwKKwl9LAorCVtTMk1QUzExX0NMS19DUF0gPSB7CisJCS5uYW1lID0gInMybXBzMTNfY3AiLAorCQkub3BzID0gJnMybXBzMTFfY2xrX29wcywKKwkJLmZsYWdzID0gQ0xLX0lTX1JPT1QsCisJfSwKKwlbUzJNUFMxMV9DTEtfQlRdID0geworCQkubmFtZSA9ICJzMm1wczEzX2J0IiwKKwkJLm9wcyA9ICZzMm1wczExX2Nsa19vcHMsCisJCS5mbGFncyA9IENMS19JU19ST09ULAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGNsa19pbml0X2RhdGEgczJtcHMxNF9jbGtzX2luaXRbUzJNUFMxMV9DTEtTX05VTV0gPSB7CiAJW1MyTVBTMTFfQ0xLX0FQXSA9IHsKIAkJLm5hbWUgPSAiczJtcHMxNF9hcCIsCkBAIC0xODQsNiArMjAzLDEwIEBACiAJCXMybXBzMTFfcmVnID0gUzJNUFMxMV9SRUdfUlRDX0NUUkw7CiAJCWNsa3NfaW5pdCA9IHMybXBzMTFfY2xrc19pbml0OwogCQlicmVhazsKKwljYXNlIFMyTVBTMTNYOgorCQlzMm1wczExX3JlZyA9IFMyTVBTMTNfUkVHX1JUQ0NUUkw7CisJCWNsa3NfaW5pdCA9IHMybXBzMTNfY2xrc19pbml0OworCQlicmVhazsKIAljYXNlIFMyTVBTMTRYOgogCQlzMm1wczExX3JlZyA9IFMyTVBTMTRfUkVHX1JUQ0NUUkw7CiAJCWNsa3NfaW5pdCA9IHMybXBzMTRfY2xrc19pbml0OwpAQCAtMjc5LDYgKzMwMiw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHMybXBzMTFfY2xrX2lkW10gPSB7CiAJeyAiczJtcHMxMS1jbGsiLCBTMk1QUzExWH0sCisJeyAiczJtcHMxMy1jbGsiLCBTMk1QUzEzWH0sCiAJeyAiczJtcHMxNC1jbGsiLCBTMk1QUzE0WH0sCiAJeyAiczVtODc2Ny1jbGsiLCBTNU04NzY3WH0sCiAJeyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbXZlYnUvY29tbW9uLmMgYi9kcml2ZXJzL2Nsay9tdmVidS9jb21tb24uYwppbmRleCBiN2ZjYjQ2Li4wZDRkMTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9tdmVidS9jb21tb24uYworKysgYi9kcml2ZXJzL2Nsay9tdmVidS9jb21tb24uYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCkBAIC0xNzcsMTQgKzE3OCwxNyBAQAogCXNwaW5sb2NrX3QgKmxvY2s7CiAJc3RydWN0IGNsayAqKmdhdGVzOwogCWludCBudW1fZ2F0ZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXUzMiBzYXZlZF9yZWc7CiB9OwogCiAjZGVmaW5lIHRvX2Nsa19nYXRlKF9odykgY29udGFpbmVyX29mKF9odywgc3RydWN0IGNsa19nYXRlLCBodykKIAorc3RhdGljIHN0cnVjdCBjbGtfZ2F0aW5nX2N0cmwgKmN0cmw7CisKIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfZ2F0aW5nX2dldF9zcmMoCiAJc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqY2xrc3BlYywgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgY2xrX2dhdGluZ19jdHJsICpjdHJsID0gKHN0cnVjdCBjbGtfZ2F0aW5nX2N0cmwgKilkYXRhOwogCWludCBuOwogCiAJaWYgKGNsa3NwZWMtPmFyZ3NfY291bnQgPCAxKQpAQCAtMTk5LDE1ICsyMDMsMzUgQEAKIAlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIH0KIAorc3RhdGljIGludCBtdmVidV9jbGtfZ2F0aW5nX3N1c3BlbmQodm9pZCkKK3sKKwljdHJsLT5zYXZlZF9yZWcgPSByZWFkbChjdHJsLT5iYXNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXZlYnVfY2xrX2dhdGluZ19yZXN1bWUodm9pZCkKK3sKKwl3cml0ZWwoY3RybC0+c2F2ZWRfcmVnLCBjdHJsLT5iYXNlKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBjbGtfZ2F0ZV9zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZCA9IG12ZWJ1X2Nsa19nYXRpbmdfc3VzcGVuZCwKKwkucmVzdW1lID0gbXZlYnVfY2xrX2dhdGluZ19yZXN1bWUsCit9OworCiB2b2lkIF9faW5pdCBtdmVidV9jbGtfZ2F0aW5nX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJICAgY29uc3Qgc3RydWN0IGNsa19nYXRpbmdfc29jX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IGNsa19nYXRpbmdfY3RybCAqY3RybDsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWNvbnN0IGNoYXIgKmRlZmF1bHRfcGFyZW50ID0gTlVMTDsKIAlpbnQgbjsKIAorCWlmIChjdHJsKSB7CisJCXByX2VycigibXZlYnUtY2xrLWdhdGluZzogY2Fubm90IGluc3RhbnRpYXRlIG1vcmUgdGhhbiBvbmUgZ2F0YWJsZSBjbG9jayBkZXZpY2VcbiIpOworCQlyZXR1cm47CisJfQorCiAJYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKIAlpZiAoV0FSTl9PTighYmFzZSkpCiAJCXJldHVybjsKQEAgLTIyNSw2ICsyNDksOCBAQAogCS8qIGxvY2sgbXVzdCBhbHJlYWR5IGJlIGluaXRpYWxpemVkICovCiAJY3RybC0+bG9jayA9ICZjdHJsX2dhdGluZ19sb2NrOwogCisJY3RybC0+YmFzZSA9IGJhc2U7CisKIAkvKiBDb3VudCwgYWxsb2NhdGUsIGFuZCByZWdpc3RlciBjbG9jayBnYXRlcyAqLwogCWZvciAobiA9IDA7IGRlc2Nbbl0ubmFtZTspCiAJCW4rKzsKQEAgLTI0Niw2ICsyNzIsOCBAQAogCiAJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgY2xrX2dhdGluZ19nZXRfc3JjLCBjdHJsKTsKIAorCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZjbGtfZ2F0ZV9zeXNjb3JlX29wcyk7CisKIAlyZXR1cm47CiBnYXRlc19vdXQ6CiAJa2ZyZWUoY3RybCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9weGEvY2xrLXB4YTI3eC5jIGIvZHJpdmVycy9jbGsvcHhhL2Nsay1weGEyN3guYwppbmRleCBiMzQ1Y2M3Li44OGI5ZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9weGEvY2xrLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvY2xrL3B4YS9jbGstcHhhMjd4LmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgY2NzciA9IENDU1I7CiAKIAlvc2NfZm9yY2VkID0gY2NzciAmICgxIDw8IENDQ1JfQ1BESVNfQklUKTsKLQlhID0gY2NjciAmIENDQ1JfQV9CSVQ7CisJYSA9IGNjY3IgJiAoMSA8PCBDQ0NSX0FfQklUKTsKIAlsICA9IGNjc3IgJiBDQ1NSX0xfTUFTSzsKIAogCWlmIChvc2NfZm9yY2VkIHx8IGEpCkBAIC0zNDEsNyArMzQxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGNjc3IgPSBDQ1NSOwogCiAJb3NjX2ZvcmNlZCA9IGNjc3IgJiAoMSA8PCBDQ0NSX0NQRElTX0JJVCk7Ci0JYSA9IGNjY3IgJiBDQ0NSX0FfQklUOworCWEgPSBjY2NyICYgKDEgPDwgQ0NDUl9BX0JJVCk7CiAJaWYgKG9zY19mb3JjZWQpCiAJCXJldHVybiBQWEFfTUVNXzEzTWh6OwogCWlmIChhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvcWNvbS9tbWNjLWFwcTgwODQuYyBiL2RyaXZlcnMvY2xrL3Fjb20vbW1jYy1hcHE4MDg0LmMKaW5kZXggZGFiOTg4YS4uMTU3MTM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvcWNvbS9tbWNjLWFwcTgwODQuYworKysgYi9kcml2ZXJzL2Nsay9xY29tL21tY2MtYXBxODA4NC5jCkBAIC0zMTIyLDcgKzMxMjIsNyBAQAogCVtFU0MxX0NMS19TUkNdID0gJmVzYzFfY2xrX3NyYy5jbGtyLAogCVtIRE1JX0NMS19TUkNdID0gJmhkbWlfY2xrX3NyYy5jbGtyLAogCVtWU1lOQ19DTEtfU1JDXSA9ICZ2c3luY19jbGtfc3JjLmNsa3IsCi0JW1JCQ1BSX0NMS19TUkNdID0gJnJiY3ByX2Nsa19zcmMuY2xrciwKKwlbTU1TU19SQkNQUl9DTEtfU1JDXSA9ICZyYmNwcl9jbGtfc3JjLmNsa3IsCiAJW1JCQk1USU1FUl9DTEtfU1JDXSA9ICZyYmJtdGltZXJfY2xrX3NyYy5jbGtyLAogCVtNQVBMRV9DTEtfU1JDXSA9ICZtYXBsZV9jbGtfc3JjLmNsa3IsCiAJW1ZEUF9DTEtfU1JDXSA9ICZ2ZHBfY2xrX3NyYy5jbGtyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLmMgYi9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGsuYwppbmRleCAxZTY4YmZmLi44ODBhMjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGsuYworKysgYi9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGsuYwpAQCAtOTAsOSArOTAsNyBAQAogCQlkaXYtPndpZHRoID0gZGl2X3dpZHRoOwogCQlkaXYtPmxvY2sgPSBsb2NrOwogCQlkaXYtPnRhYmxlID0gZGl2X3RhYmxlOwotCQlkaXZfb3BzID0gKGRpdl9mbGFncyAmIENMS19ESVZJREVSX1JFQURfT05MWSkKLQkJCQkJCT8gJmNsa19kaXZpZGVyX3JvX29wcwotCQkJCQkJOiAmY2xrX2RpdmlkZXJfb3BzOworCQlkaXZfb3BzID0gJmNsa19kaXZpZGVyX29wczsKIAl9CiAKIAljbGsgPSBjbGtfcmVnaXN0ZXJfY29tcG9zaXRlKE5VTEwsIG5hbWUsIHBhcmVudF9uYW1lcywgbnVtX3BhcmVudHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDQwLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDQwLmMKaW5kZXggMDBkMWQwMC4uOTc5ZTgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQ0MC5jCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczU0NDAuYwpAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKICNpbmNsdWRlICJjbGsuaCIKICNpbmNsdWRlICJjbGstcGxsLmgiCkBAIC0yMyw2ICsyNSw4IEBACiAjZGVmaW5lIENQVV9DTEtfU1RBVFVTCQkweGZjCiAjZGVmaW5lIE1JU0NfRE9VVDEJCTB4NTU4CiAKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnJlZ19iYXNlOworCiAvKiBwYXJlbnQgY2xvY2sgbmFtZSBsaXN0ICovCiBQTkFNRShtb3V0X2FybWNsa19wKQk9IHsgImNwbGxhIiwgImNwbGxiIiB9OwogUE5BTUUobW91dF9zcGlfcCkJPSB7ICJkaXYxMjUiLCAiZGl2MjAwIiB9OwpAQCAtODksMTAgKzkzLDMwIEBACiAJe30sCiB9OwogCitzdGF0aWMgaW50IGV4eW5vczU0NDBfY2xrX3Jlc3RhcnRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCit7CisJdTMyIHZhbCwgc3RhdHVzOworCisJc3RhdHVzID0gcmVhZGxfcmVsYXhlZChyZWdfYmFzZSArIDB4YmMpOworCXZhbCA9IHJlYWRsX3JlbGF4ZWQocmVnX2Jhc2UgKyAweGNjKTsKKwl2YWwgPSAodmFsICYgMHhmZmZmMDAwMCkgfCAoc3RhdHVzICYgMHhmZmZmKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHJlZ19iYXNlICsgMHhjYyk7CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKKy8qCisgKiBFeHlub3M1NDQwIENsb2NrIHJlc3RhcnQgbm90aWZpZXIsIGhhbmRsZXMgcmVzdGFydCBmdW5jdGlvbmFsaXR5CisgKi8KK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXh5bm9zNTQ0MF9jbGtfcmVzdGFydF9oYW5kbGVyID0geworCS5ub3RpZmllcl9jYWxsID0gZXh5bm9zNTQ0MF9jbGtfcmVzdGFydF9ub3RpZnksCisJLnByaW9yaXR5ID0gMTI4LAorfTsKKwogLyogcmVnaXN0ZXIgZXh5bm9zNTQ0MCBjbG9ja3MgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBleHlub3M1NDQwX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0Jdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKIAlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eDsKIAogCXJlZ19iYXNlID0gb2ZfaW9tYXAobnAsIDApOwpAQCAtMTI1LDYgKzE0OSw5IEBACiAKIAlzYW1zdW5nX2Nsa19vZl9hZGRfcHJvdmlkZXIobnAsIGN0eCk7CiAKKwlpZiAocmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZleHlub3M1NDQwX2Nsa19yZXN0YXJ0X2hhbmRsZXIpKQorCQlwcl93YXJuKCJleHlub3M1NDQwIGNsb2NrIGNhbid0IHJlZ2lzdGVyIHJlc3RhcnQgaGFuZGxlclxuIik7CisKIAlwcl9pbmZvKCJFeHlub3M1NDQwOiBhcm1fY2xrID0gJWxkSHpcbiIsIF9nZXRfcmF0ZSgiYXJtX2NsayIpKTsKIAlwcl9pbmZvKCJleHlub3M1NDQwIGNsb2NrIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1kaXZpZGVyLmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstZGl2aWRlci5jCmluZGV4IDI5MGY5YzEuLjU5YTU3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1kaXZpZGVyLmMKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLWRpdmlkZXIuYwpAQCAtMTg1LDMgKzE4NSwxNiBAQAogCiAJcmV0dXJuIGNsazsKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfZGl2X3RhYmxlIG1jX2Rpdl90YWJsZVtdID0geworCXsgLnZhbCA9IDAsIC5kaXYgPSAyIH0sCisJeyAudmFsID0gMSwgLmRpdiA9IDEgfSwKKwl7IC52YWwgPSAwLCAuZGl2ID0gMCB9LAorfTsKKworc3RydWN0IGNsayAqdGVncmFfY2xrX3JlZ2lzdGVyX21jKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorCQkJCSAgdm9pZCBfX2lvbWVtICpyZWcsIHNwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIGNsa19yZWdpc3Rlcl9kaXZpZGVyX3RhYmxlKE5VTEwsIG5hbWUsIHBhcmVudF9uYW1lLCAwLCByZWcsCisJCQkJCSAgMTYsIDEsIDAsIG1jX2Rpdl90YWJsZSwgbG9jayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmExMTQuYyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTExNC5jCmluZGV4IGY3NjBmMzEuLjBiMDNkMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTExNC5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTExNC5jCkBAIC0xNzMsNiArMTczLDcgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGxsX2QyX2xvY2spOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwbGxfdV9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGxsX3JlX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhlbWNfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGl2X25tcCBwbGx4Y19ubXAgPSB7CiAJLmRpdm1fc2hpZnQgPSAwLApAQCAtMTIyOCw3ICsxMjI5LDExIEBACiAJCQkgICAgICAgQVJSQVlfU0laRShtdXhfcGxsbWNwX2Nsa20pLAogCQkJICAgICAgIENMS19TRVRfUkFURV9OT19SRVBBUkVOVCwKIAkJCSAgICAgICBjbGtfYmFzZSArIENMS19TT1VSQ0VfRU1DLAotCQkJICAgICAgIDI5LCAzLCAwLCBOVUxMKTsKKwkJCSAgICAgICAyOSwgMywgMCwgJmVtY19sb2NrKTsKKworCWNsayA9IHRlZ3JhX2Nsa19yZWdpc3Rlcl9tYygibWMiLCAiZW1jX211eCIsIGNsa19iYXNlICsgQ0xLX1NPVVJDRV9FTUMsCisJCQkJICAgICZlbWNfbG9jayk7CisJY2xrc1tURUdSQTExNF9DTEtfTUNdID0gY2xrOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVncmFfcGVyaXBoX2Nsa19saXN0KTsgaSsrKSB7CiAJCWRhdGEgPSAmdGVncmFfcGVyaXBoX2Nsa19saXN0W2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTI0LmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmExMjQuYwppbmRleCBlM2E4NTg0Li5mNWY5YmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmExMjQuYworKysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmExMjQuYwpAQCAtMTMyLDYgKzEzMiw3IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBsbF9lX2xvY2spOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwbGxfcmVfbG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBsbF91X2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhlbWNfbG9jayk7CiAKIC8qIHBvc3NpYmxlIE9TQyBmcmVxdWVuY2llcyBpbiBIeiAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGVncmExMjRfaW5wdXRfZnJlcVtdID0gewpAQCAtMTEyNyw3ICsxMTI4LDExIEBACiAJY2xrID0gY2xrX3JlZ2lzdGVyX211eChOVUxMLCAiZW1jX211eCIsIG11eF9wbGxtY3BfY2xrbSwKIAkJCSAgICAgICBBUlJBWV9TSVpFKG11eF9wbGxtY3BfY2xrbSksIDAsCiAJCQkgICAgICAgY2xrX2Jhc2UgKyBDTEtfU09VUkNFX0VNQywKLQkJCSAgICAgICAyOSwgMywgMCwgTlVMTCk7CisJCQkgICAgICAgMjksIDMsIDAsICZlbWNfbG9jayk7CisKKwljbGsgPSB0ZWdyYV9jbGtfcmVnaXN0ZXJfbWMoIm1jIiwgImVtY19tdXgiLCBjbGtfYmFzZSArIENMS19TT1VSQ0VfRU1DLAorCQkJCSAgICAmZW1jX2xvY2spOworCWNsa3NbVEVHUkExMjRfQ0xLX01DXSA9IGNsazsKIAogCS8qIGNtbDAgKi8KIAljbGsgPSBjbGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCAiY21sMCIsICJwbGxfZSIsIDAsIGNsa19iYXNlICsgUExMRV9BVVgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMC5jIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjAuYwppbmRleCBkYWNlMmIxLi40MTI3MmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMC5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIwLmMKQEAgLTE0MCw2ICsxNDAsOCBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqY2xrX2Jhc2U7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICpwbWNfYmFzZTsKIAorc3RhdGljIERFRklORV9TUElOTE9DSyhlbWNfbG9jayk7CisKICNkZWZpbmUgVEVHUkFfSU5JVF9EQVRBX01VWChfbmFtZSwgX3BhcmVudHMsIF9vZmZzZXQsCVwKIAkJCSAgICBfY2xrX251bSwgX2dhdGVfZmxhZ3MsIF9jbGtfaWQpCVwKIAlURUdSQV9JTklUX0RBVEEoX25hbWUsIE5VTEwsIE5VTEwsIF9wYXJlbnRzLCBfb2Zmc2V0LAlcCkBAIC04MTksMTEgKzgyMSwxNSBAQAogCQkJICAgICAgIEFSUkFZX1NJWkUobXV4X3BsbG1jcF9jbGttKSwKIAkJCSAgICAgICBDTEtfU0VUX1JBVEVfTk9fUkVQQVJFTlQsCiAJCQkgICAgICAgY2xrX2Jhc2UgKyBDTEtfU09VUkNFX0VNQywKLQkJCSAgICAgICAzMCwgMiwgMCwgTlVMTCk7CisJCQkgICAgICAgMzAsIDIsIDAsICZlbWNfbG9jayk7CiAJY2xrID0gdGVncmFfY2xrX3JlZ2lzdGVyX3BlcmlwaF9nYXRlKCJlbWMiLCAiZW1jX211eCIsIDAsIGNsa19iYXNlLCAwLAogCQkJCSAgICA1NywgcGVyaXBoX2Nsa19lbmJfcmVmY250KTsKIAljbGtzW1RFR1JBMjBfQ0xLX0VNQ10gPSBjbGs7CiAKKwljbGsgPSB0ZWdyYV9jbGtfcmVnaXN0ZXJfbWMoIm1jIiwgImVtY19tdXgiLCBjbGtfYmFzZSArIENMS19TT1VSQ0VfRU1DLAorCQkJCSAgICAmZW1jX2xvY2spOworCWNsa3NbVEVHUkEyMF9DTEtfTUNdID0gY2xrOworCiAJLyogZHNpICovCiAJY2xrID0gdGVncmFfY2xrX3JlZ2lzdGVyX3BlcmlwaF9nYXRlKCJkc2kiLCAicGxsX2QiLCAwLCBjbGtfYmFzZSwgMCwKIAkJCQkgICAgNDgsIHBlcmlwaF9jbGtfZW5iX3JlZmNudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEzMC5jIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMzAuYwppbmRleCA1YmJhY2QwLi40YjlkOGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEzMC5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTMwLmMKQEAgLTE3Nyw2ICsxNzcsNyBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNtbF9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGxsX2RfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVtY19sb2NrKTsKIAogI2RlZmluZSBURUdSQV9JTklUX0RBVEFfTVVYKF9uYW1lLCBfcGFyZW50cywgX29mZnNldCwJXAogCQkJICAgIF9jbGtfbnVtLCBfZ2F0ZV9mbGFncywgX2Nsa19pZCkJXApAQCAtMTE1NywxMSArMTE1OCwxNSBAQAogCQkJICAgICAgIEFSUkFZX1NJWkUobXV4X3BsbG1jcF9jbGttKSwKIAkJCSAgICAgICBDTEtfU0VUX1JBVEVfTk9fUkVQQVJFTlQsCiAJCQkgICAgICAgY2xrX2Jhc2UgKyBDTEtfU09VUkNFX0VNQywKLQkJCSAgICAgICAzMCwgMiwgMCwgTlVMTCk7CisJCQkgICAgICAgMzAsIDIsIDAsICZlbWNfbG9jayk7CiAJY2xrID0gdGVncmFfY2xrX3JlZ2lzdGVyX3BlcmlwaF9nYXRlKCJlbWMiLCAiZW1jX211eCIsIDAsIGNsa19iYXNlLCAwLAogCQkJCSAgICA1NywgcGVyaXBoX2Nsa19lbmJfcmVmY250KTsKIAljbGtzW1RFR1JBMzBfQ0xLX0VNQ10gPSBjbGs7CiAKKwljbGsgPSB0ZWdyYV9jbGtfcmVnaXN0ZXJfbWMoIm1jIiwgImVtY19tdXgiLCBjbGtfYmFzZSArIENMS19TT1VSQ0VfRU1DLAorCQkJCSAgICAmZW1jX2xvY2spOworCWNsa3NbVEVHUkEzMF9DTEtfTUNdID0gY2xrOworCiAJLyogY21sMCAqLwogCWNsayA9IGNsa19yZWdpc3Rlcl9nYXRlKE5VTEwsICJjbWwwIiwgInBsbF9lIiwgMCwgY2xrX2Jhc2UgKyBQTExFX0FVWCwKIAkJCQkwLCAwLCAmY21sX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLmggYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGsuaAppbmRleCAxNmVjOGQ2Li40ZTQ1OGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGsuaAorKysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGsuaApAQCAtODYsNiArODYsOCBAQAogCQljb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgdm9pZCBfX2lvbWVtICpyZWcsCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHU4IGNsa19kaXZpZGVyX2ZsYWdzLCB1OCBzaGlmdCwgdTggd2lkdGgsCiAJCXU4IGZyYWNfd2lkdGgsIHNwaW5sb2NrX3QgKmxvY2spOworc3RydWN0IGNsayAqdGVncmFfY2xrX3JlZ2lzdGVyX21jKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorCQkJCSAgdm9pZCBfX2lvbWVtICpyZWcsIHNwaW5sb2NrX3QgKmxvY2spOwogCiAvKgogICogVGVncmEgUExMOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGkvZHBsbC5jIGIvZHJpdmVycy9jbGsvdGkvZHBsbC5jCmluZGV4IDc5NzkxZTEuLjg1YWMwZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RpL2RwbGwuYworKysgYi9kcml2ZXJzL2Nsay90aS9kcGxsLmMKQEAgLTMzLDYgKzMzLDkgQEAKIAkucmVjYWxjX3JhdGUJPSAmb21hcDRfZHBsbF9yZWdtNHhlbl9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDRfZHBsbF9yZWdtNHhlbl9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQsCisJLnNldF9yYXRlX2FuZF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlX2FuZF9wYXJlbnQsCisJLmRldGVybWluZV9yYXRlCT0gJm9tYXA0X2RwbGxfcmVnbTR4ZW5fZGV0ZXJtaW5lX3JhdGUsCiAJLmdldF9wYXJlbnQJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKIH07CiAjZWxzZQpAQCAtNTMsNiArNTYsOSBAQAogCS5yZWNhbGNfcmF0ZQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuc2V0X3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3BhcmVudCwKKwkuc2V0X3JhdGVfYW5kX3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudCwKKwkuZGV0ZXJtaW5lX3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2RldGVybWluZV9yYXRlLAogCS5nZXRfcGFyZW50CT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCiB9OwogCkBAIC02MSw2ICs2Nyw5IEBACiAJLmdldF9wYXJlbnQJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuc2V0X3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3BhcmVudCwKKwkuc2V0X3JhdGVfYW5kX3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudCwKKwkuZGV0ZXJtaW5lX3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2RldGVybWluZV9yYXRlLAogfTsKICNlbHNlCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgZHBsbF9jb3JlX2NrX29wcyA9IHt9OwpAQCAtOTcsNiArMTA2LDkgQEAKIAkuZ2V0X3BhcmVudAk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAogCS5yZWNhbGNfcmF0ZQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5zZXRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50LAorCS5zZXRfcmF0ZV9hbmRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZV9hbmRfcGFyZW50LAorCS5kZXRlcm1pbmVfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogfTsKIApAQCAtMTA2LDYgKzExOCw5IEBACiAJLmdldF9wYXJlbnQJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKIAkucmVjYWxjX3JhdGUJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAzX2RwbGw0X3NldF9yYXRlLAorCS5zZXRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50LAorCS5zZXRfcmF0ZV9hbmRfcGFyZW50CT0gJm9tYXAzX2RwbGw0X3NldF9yYXRlX2FuZF9wYXJlbnQsCisJLmRldGVybWluZV9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kZXRlcm1pbmVfcmF0ZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvTWFrZWZpbGUKaW5kZXggMTYyZTUxOS4uOGZmMDM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9NYWtlZmlsZQpAQCAtMiw2ICsyLDUgQEAKIG9iai0kKENPTkZJR19JQ1NUKQkJKz0gY2xrLWljc3QubyBjbGstdmVyc2F0aWxlLm8KIG9iai0kKENPTkZJR19JTlRFR1JBVE9SX0lNUEQxKQkrPSBjbGstaW1wZDEubwogb2JqLSQoQ09ORklHX0FSQ0hfUkVBTFZJRVcpCSs9IGNsay1yZWFsdmlldy5vCi1vYmotJChDT05GSUdfQVJDSF9WRVhQUkVTUykJKz0gY2xrLXZleHByZXNzLm8KIG9iai0kKENPTkZJR19DTEtfU1A4MTApCQkrPSBjbGstc3A4MTAubwogb2JqLSQoQ09ORklHX0NMS19WRVhQUkVTU19PU0MpCSs9IGNsay12ZXhwcmVzcy1vc2MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy1vc2MuYyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3Mtb3NjLmMKaW5kZXggNTI5YTU5Yy4uNzY1ZjFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy1vc2MuYworKysgYi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLW9zYy5jCkBAIC03MCw3ICs3MCw2IEBACiAKIHN0YXRpYyBpbnQgdmV4cHJlc3Nfb3NjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGNsa19sb29rdXAgKmNsID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7IC8qIE5vbi1EVCBsb29rdXAgKi8KIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCXN0cnVjdCB2ZXhwcmVzc19vc2MgKm9zYzsKIAlzdHJ1Y3QgY2xrICpjbGs7CkBAIC0xMDYsMTIgKzEwNSw2IEBACiAKIAlvZl9jbGtfYWRkX3Byb3ZpZGVyKHBkZXYtPmRldi5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7CiAKLQkvKiBPbmx5IGhhcHBlbnMgZm9yIG5vbi1EVCBjYXNlcyAqLwotCWlmIChjbCkgewotCQljbC0+Y2xrID0gY2xrOwotCQljbGtkZXZfYWRkKGNsKTsKLQl9Ci0KIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZWdpc3RlcmVkIGNsb2NrICclcydcbiIsIGluaXQubmFtZSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3MuYyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ1ZTFiNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTGltaXRlZAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9hbWJhL3NwODEwLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmV4cHJlc3MuaD4KLQotc3RhdGljIHN0cnVjdCBjbGsgKnZleHByZXNzX3NwODEwX3RpbWVyY2xrZW5bNF07Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZleHByZXNzX3NwODEwX2xvY2spOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdmV4cHJlc3Nfc3A4MTBfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UpCi17Ci0JaW50IGk7Ci0KLQlpZiAoV0FSTl9PTighYmFzZSkpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZleHByZXNzX3NwODEwX3RpbWVyY2xrZW4pOyBpKyspIHsKLQkJY2hhciBuYW1lWzEyXTsKLQkJY29uc3QgY2hhciAqcGFyZW50c1tdID0gewotCQkJInYybTpyZWZjbGszMmtoeiIsIC8qIFJFRkNMSyAqLwotCQkJInYybTpyZWZjbGsxbWh6IiAvKiBUSU1DTEsgKi8KLQkJfTsKLQotCQlzbnByaW50ZihuYW1lLCBBUlJBWV9TSVpFKG5hbWUpLCAidGltZXJjbGtlbiVkIiwgaSk7Ci0KLQkJdmV4cHJlc3Nfc3A4MTBfdGltZXJjbGtlbltpXSA9IGNsa19yZWdpc3Rlcl9tdXgoTlVMTCwgbmFtZSwKLQkJCQlwYXJlbnRzLCAyLCBDTEtfU0VUX1JBVEVfTk9fUkVQQVJFTlQsCi0JCQkJYmFzZSArIFNDQ1RSTCwgU0NDVFJMX1RJTUVSRU5uU0VMX1NISUZUKGkpLCAxLAotCQkJCTAsICZ2ZXhwcmVzc19zcDgxMF9sb2NrKTsKLQotCQlpZiAoV0FSTl9PTihJU19FUlIodmV4cHJlc3Nfc3A4MTBfdGltZXJjbGtlbltpXSkpKQotCQkJYnJlYWs7Ci0JfQotfQotCi0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdmV4cHJlc3NfY2xrXzI0bWh6X3BlcmlwaHNbXSBfX2luaXRjb25zdCA9IHsKLQkibWI6dWFydDAiLCAibWI6dWFydDEiLCAibWI6dWFydDIiLCAibWI6dWFydDMiLAotCSJtYjptbWNpIiwgIm1iOmttaTAiLCAibWI6a21pMSIKLX07Ci0KLXZvaWQgX19pbml0IHZleHByZXNzX2Nsa19pbml0KHZvaWQgX19pb21lbSAqc3A4MTBfYmFzZSkKLXsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0JaW50IGk7Ci0KLQljbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCAiZHVtbXlfYXBiX3BjbGsiLCBOVUxMLAotCQkJQ0xLX0lTX1JPT1QsIDApOwotCVdBUk5fT04oY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssICJhcGJfcGNsayIsIE5VTEwpKTsKLQotCWNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKE5VTEwsICJ2Mm06Y2xrXzI0bWh6IiwgTlVMTCwKLQkJCUNMS19JU19ST09ULCAyNDAwMDAwMCk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmV4cHJlc3NfY2xrXzI0bWh6X3BlcmlwaHMpOyBpKyspCi0JCVdBUk5fT04oY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssIE5VTEwsCi0JCQkJdmV4cHJlc3NfY2xrXzI0bWh6X3BlcmlwaHNbaV0pKTsKLQotCWNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKE5VTEwsICJ2Mm06cmVmY2xrMzJraHoiLCBOVUxMLAotCQkJQ0xLX0lTX1JPT1QsIDMyNzY4KTsKLQlXQVJOX09OKGNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrLCBOVUxMLCAidjJtOndkdCIpKTsKLQotCWNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKE5VTEwsICJ2Mm06cmVmY2xrMW1oeiIsIE5VTEwsCi0JCQlDTEtfSVNfUk9PVCwgMTAwMDAwMCk7Ci0KLQl2ZXhwcmVzc19zcDgxMF9pbml0KHNwODEwX2Jhc2UpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmV4cHJlc3Nfc3A4MTBfdGltZXJjbGtlbik7IGkrKykKLQkJV0FSTl9PTihjbGtfc2V0X3BhcmVudCh2ZXhwcmVzc19zcDgxMF90aW1lcmNsa2VuW2ldLCBjbGspKTsKLQotCVdBUk5fT04oY2xrX3JlZ2lzdGVyX2Nsa2Rldih2ZXhwcmVzc19zcDgxMF90aW1lcmNsa2VuWzBdLAotCQkJCSJ2Mm0tdGltZXIwIiwgInNwODA0IikpOwotCVdBUk5fT04oY2xrX3JlZ2lzdGVyX2Nsa2Rldih2ZXhwcmVzc19zcDgxMF90aW1lcmNsa2VuWzFdLAotCQkJCSJ2Mm0tdGltZXIxIiwgInNwODA0IikpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCmluZGV4IDkwNDIwNjAuLmY2NTdhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcKQEAgLTMyLDYgKzMyLDcgQEAKIAogY29uZmlnIE1FU09ONl9USU1FUgogCWJvb2wKKwlzZWxlY3QgQ0xLU1JDX01NSU8KIAogY29uZmlnIE9SSU9OX1RJTUVSCiAJc2VsZWN0IENMS1NSQ19PRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKaW5kZXggNzU2ZjZmMS4uZmFlMDQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCkBAIC00NSw0ICs0NSw1IEBACiBvYmotJChDT05GSUdfQ0xLU1JDX01FVEFHX0dFTkVSSUMpCSs9IG1ldGFnX2dlbmVyaWMubwogb2JqLSQoQ09ORklHX0FSQ0hfSEFTX1RJQ0tfQlJPQURDQVNUKQkrPSBkdW1teV90aW1lci5vCiBvYmotJChDT05GSUdfQVJDSF9LRVlTVE9ORSkJCSs9IHRpbWVyLWtleXN0b25lLm8KK29iai0kKENPTkZJR19BUkNIX0lOVEVHUkFUT1JfQVApCSs9IHRpbWVyLWludGVncmF0b3ItYXAubwogb2JqLSQoQ09ORklHX0NMS1NSQ19WRVJTQVRJTEUpCQkrPSB2ZXJzYXRpbGUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5jCmluZGV4IDQzMDA1ZDQuLjZhNzlmYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYXJtX2FyY2hfdGltZXIuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FybV9hcmNoX3RpbWVyLmMKQEAgLTQ2Miw3ICs0NjIsMTAgQEAKIAogCS8qIFJlZ2lzdGVyIHRoZSBDUDE1IGJhc2VkIGNvdW50ZXIgaWYgd2UgaGF2ZSBvbmUgKi8KIAlpZiAodHlwZSAmIEFSQ0hfQ1AxNV9USU1FUikgewotCQlhcmNoX3RpbWVyX3JlYWRfY291bnRlciA9IGFyY2hfY291bnRlcl9nZXRfY250dmN0OworCQlpZiAoYXJjaF90aW1lcl91c2VfdmlydHVhbCkKKwkJCWFyY2hfdGltZXJfcmVhZF9jb3VudGVyID0gYXJjaF9jb3VudGVyX2dldF9jbnR2Y3Q7CisJCWVsc2UKKwkJCWFyY2hfdGltZXJfcmVhZF9jb3VudGVyID0gYXJjaF9jb3VudGVyX2dldF9jbnRwY3Q7CiAJfSBlbHNlIHsKIAkJYXJjaF90aW1lcl9yZWFkX2NvdW50ZXIgPSBhcmNoX2NvdW50ZXJfZ2V0X2NudHZjdF9tZW07CiAKQEAgLTcwMiw2ICs3MDUsMTQgQEAKIAlhcmNoX3RpbWVyX2RldGVjdF9yYXRlKE5VTEwsIG5wKTsKIAogCS8qCisJICogSWYgd2UgY2Fubm90IHJlbHkgb24gZmlybXdhcmUgaW5pdGlhbGl6aW5nIHRoZSB0aW1lciByZWdpc3RlcnMgdGhlbgorCSAqIHdlIHNob3VsZCB1c2UgdGhlIHBoeXNpY2FsIHRpbWVycyBpbnN0ZWFkLgorCSAqLworCWlmIChJU19FTkFCTEVEKENPTkZJR19BUk0pICYmCisJICAgIG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImFybSxjcHUtcmVnaXN0ZXJzLW5vdC1mdy1jb25maWd1cmVkIikpCisJCQlhcmNoX3RpbWVyX3VzZV92aXJ0dWFsID0gZmFsc2U7CisKKwkvKgogCSAqIElmIEhZUCBtb2RlIGlzIGF2YWlsYWJsZSwgd2Uga25vdyB0aGF0IHRoZSBwaHlzaWNhbCB0aW1lcgogCSAqIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIFBMMS4gVXNlIGl0LCBzbwogCSAqIHRoYXQgYSBndWVzdCBjYW4gdXNlIHRoZSB2aXJ0dWFsIHRpbWVyIGluc3RlYWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3N1bjRpX3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3N1bjRpX3RpbWVyLmMKaW5kZXggZWZiMTdjMy4uZjRhOWMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zdW40aV90aW1lci5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc3VuNGlfdGltZXIuYwpAQCAtMTgyLDYgKzE4MiwxMiBAQAogCS8qIE1ha2Ugc3VyZSB0aW1lciBpcyBzdG9wcGVkIGJlZm9yZSBwbGF5aW5nIHdpdGggaW50ZXJydXB0cyAqLwogCXN1bjRpX2Nsa2V2dF90aW1lX3N0b3AoMCk7CiAKKwlzdW40aV9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVfcG9zc2libGVfbWFzazsKKwlzdW40aV9jbG9ja2V2ZW50LmlycSA9IGlycTsKKworCWNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoJnN1bjRpX2Nsb2NrZXZlbnQsIHJhdGUsCisJCQkJCVRJTUVSX1NZTkNfVElDS1MsIDB4ZmZmZmZmZmYpOworCiAJcmV0ID0gc2V0dXBfaXJxKGlycSwgJnN1bjRpX3RpbWVyX2lycSk7CiAJaWYgKHJldCkKIAkJcHJfd2FybigiZmFpbGVkIHRvIHNldHVwIGlycSAlZFxuIiwgaXJxKTsKQEAgLTE4OSwxMiArMTk1LDYgQEAKIAkvKiBFbmFibGUgdGltZXIwIGludGVycnVwdCAqLwogCXZhbCA9IHJlYWRsKHRpbWVyX2Jhc2UgKyBUSU1FUl9JUlFfRU5fUkVHKTsKIAl3cml0ZWwodmFsIHwgVElNRVJfSVJRX0VOKDApLCB0aW1lcl9iYXNlICsgVElNRVJfSVJRX0VOX1JFRyk7Ci0KLQlzdW40aV9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVfcG9zc2libGVfbWFzazsKLQlzdW40aV9jbG9ja2V2ZW50LmlycSA9IGlycTsKLQotCWNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoJnN1bjRpX2Nsb2NrZXZlbnQsIHJhdGUsCi0JCQkJCVRJTUVSX1NZTkNfVElDS1MsIDB4ZmZmZmZmZmYpOwogfQogQ0xPQ0tTT1VSQ0VfT0ZfREVDTEFSRShzdW40aSwgImFsbHdpbm5lcixzdW40aS1hMTAtdGltZXIiLAogCQkgICAgICAgc3VuNGlfdGltZXJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWUtYXJtYWRhLTM3MC14cC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lLWFybWFkYS0zNzAteHAuYwppbmRleCAwNDUxZTYyLi4wYzhjNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWUtYXJtYWRhLTM3MC14cC5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZS1hcm1hZGEtMzcwLXhwLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZF9jbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKIC8qCiAgKiBUaW1lciBibG9jayByZWdpc3RlcnMuCkBAIC0yMjMsNiArMjI0LDI4IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBhcm1hZGFfMzcwX3hwX3RpbWVyX2NwdV9ub3RpZnksCiB9OwogCitzdGF0aWMgdTMyIHRpbWVyMF9jdHJsX3JlZywgdGltZXIwX2xvY2FsX2N0cmxfcmVnOworCitzdGF0aWMgaW50IGFybWFkYV8zNzBfeHBfdGltZXJfc3VzcGVuZCh2b2lkKQoreworCXRpbWVyMF9jdHJsX3JlZyA9IHJlYWRsKHRpbWVyX2Jhc2UgKyBUSU1FUl9DVFJMX09GRik7CisJdGltZXIwX2xvY2FsX2N0cmxfcmVnID0gcmVhZGwobG9jYWxfYmFzZSArIFRJTUVSX0NUUkxfT0ZGKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXJtYWRhXzM3MF94cF90aW1lcl9yZXN1bWUodm9pZCkKK3sKKwl3cml0ZWwoMHhmZmZmZmZmZiwgdGltZXJfYmFzZSArIFRJTUVSMF9WQUxfT0ZGKTsKKwl3cml0ZWwoMHhmZmZmZmZmZiwgdGltZXJfYmFzZSArIFRJTUVSMF9SRUxPQURfT0ZGKTsKKwl3cml0ZWwodGltZXIwX2N0cmxfcmVnLCB0aW1lcl9iYXNlICsgVElNRVJfQ1RSTF9PRkYpOworCXdyaXRlbCh0aW1lcjBfbG9jYWxfY3RybF9yZWcsIGxvY2FsX2Jhc2UgKyBUSU1FUl9DVFJMX09GRik7Cit9CisKK3N0cnVjdCBzeXNjb3JlX29wcyBhcm1hZGFfMzcwX3hwX3RpbWVyX3N5c2NvcmVfb3BzID0geworCS5zdXNwZW5kCT0gYXJtYWRhXzM3MF94cF90aW1lcl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXJtYWRhXzM3MF94cF90aW1lcl9yZXN1bWUsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3MF94cF90aW1lcl9jb21tb25faW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewogCXUzMiBjbHIgPSAwLCBzZXQgPSAwOwpAQCAtMjg1LDYgKzMwOCw4IEBACiAJLyogSW1tZWRpYXRlbHkgY29uZmlndXJlIHRoZSB0aW1lciBvbiB0aGUgYm9vdCBDUFUgKi8KIAlpZiAoIXJlcykKIAkJYXJtYWRhXzM3MF94cF90aW1lcl9zZXR1cCh0aGlzX2NwdV9wdHIoYXJtYWRhXzM3MF94cF9ldnQpKTsKKworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZhcm1hZGFfMzcwX3hwX3RpbWVyX3N5c2NvcmVfb3BzKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGFybWFkYV94cF90aW1lcl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCkBAIC0yOTMsNiArMzE4LDcgQEAKIAogCS8qIFRoZSAyNU1oeiBmaXhlZCBjbG9jayBpcyBtYW5kYXRvcnksIGFuZCBtdXN0IGFsd2F5cyBiZSBhdmFpbGFibGUgKi8KIAlCVUdfT04oSVNfRVJSKGNsaykpOworCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOwogCXRpbWVyX2NsayA9IGNsa19nZXRfcmF0ZShjbGspOwogCiAJYXJtYWRhXzM3MF94cF90aW1lcl9jb21tb25faW5pdChucCk7CkBAIC0zMDAsMTEgKzMyNiw0MCBAQAogQ0xPQ0tTT1VSQ0VfT0ZfREVDTEFSRShhcm1hZGFfeHAsICJtYXJ2ZWxsLGFybWFkYS14cC10aW1lciIsCiAJCSAgICAgICBhcm1hZGFfeHBfdGltZXJfaW5pdCk7CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1X3RpbWVyX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisKKwljbGsgPSBvZl9jbGtfZ2V0X2J5X25hbWUobnAsICJmaXhlZCIpOworCWlmICghSVNfRVJSKGNsaykpIHsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7CisJCXRpbWVyX2NsayA9IGNsa19nZXRfcmF0ZShjbGspOworCX0gZWxzZSB7CisKKwkJLyoKKwkJICogVGhpcyBmYWxsYmFjayBpcyByZXF1aXJlZCBpbiBvcmRlciB0byByZXRhaW4gcHJvcGVyCisJCSAqIGRldmljZXRyZWUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisJCSAqLworCQljbGsgPSBvZl9jbGtfZ2V0KG5wLCAwKTsKKworCQkvKiBNdXN0IGhhdmUgYXQgbGVhc3QgYSBjbG9jayAqLworCQlCVUdfT04oSVNfRVJSKGNsaykpOworCQljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwkJdGltZXJfY2xrID0gY2xrX2dldF9yYXRlKGNsaykgLyBUSU1FUl9ESVZJREVSOworCQl0aW1lcjI1TWh6ID0gZmFsc2U7CisJfQorCisJYXJtYWRhXzM3MF94cF90aW1lcl9jb21tb25faW5pdChucCk7Cit9CitDTE9DS1NPVVJDRV9PRl9ERUNMQVJFKGFybWFkYV8zNzUsICJtYXJ2ZWxsLGFybWFkYS0zNzUtdGltZXIiLAorCQkgICAgICAgYXJtYWRhXzM3NV90aW1lcl9pbml0KTsKKwogc3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzBfdGltZXJfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewogCXN0cnVjdCBjbGsgKmNsayA9IG9mX2Nsa19nZXQobnAsIDApOwogCiAJQlVHX09OKElTX0VSUihjbGspKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKIAl0aW1lcl9jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKSAvIFRJTUVSX0RJVklERVI7CiAJdGltZXIyNU1oeiA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWF0bWVsLXBpdC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1hdG1lbC1waXQuYwppbmRleCBkNTI4OTA5Li5iNWI0ZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWF0bWVsLXBpdC5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItYXRtZWwtcGl0LmMKQEAgLTI2MiwzNSArMjYyLDMgQEAKIH0KIENMT0NLU09VUkNFX09GX0RFQ0xBUkUoYXQ5MXNhbTkyNnhfcGl0LCAiYXRtZWwsYXQ5MXNhbTkyNjAtcGl0IiwKIAkJICAgICAgIGF0OTFzYW05MjZ4X3BpdF9kdF9pbml0KTsKLQotc3RhdGljIHZvaWQgX19pb21lbSAqcGl0X2Jhc2VfYWRkcjsKLQotdm9pZCBfX2luaXQgYXQ5MXNhbTkyNnhfcGl0X2luaXQoaW50IGlycSkKLXsKLQlzdHJ1Y3QgcGl0X2RhdGEgKmRhdGE7Ci0KLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXBhbmljKHByX2ZtdCgiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeVxuIikpOwotCi0JZGF0YS0+YmFzZSA9IHBpdF9iYXNlX2FkZHI7Ci0KLQlkYXRhLT5tY2sgPSBjbGtfZ2V0KE5VTEwsICJtY2siKTsKLQlpZiAoSVNfRVJSKGRhdGEtPm1jaykpCi0JCXBhbmljKHByX2ZtdCgiVW5hYmxlIHRvIGdldCBtY2sgY2xrXG4iKSk7Ci0KLQlkYXRhLT5pcnEgPSBpcnE7Ci0KLQlhdDkxc2FtOTI2eF9waXRfY29tbW9uX2luaXQoZGF0YSk7Ci19Ci0KLXZvaWQgX19pbml0IGF0OTFzYW05MjZ4X2lvcmVtYXBfcGl0KHUzMiBhZGRyKQotewotCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQotCQlyZXR1cm47Ci0KLQlwaXRfYmFzZV9hZGRyID0gaW9yZW1hcChhZGRyLCAxNik7Ci0KLQlpZiAoIXBpdF9iYXNlX2FkZHIpCi0JCXBhbmljKHByX2ZtdCgiSW1wb3NzaWJsZSB0byBpb3JlbWFwIFBJVFxuIikpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1pbnRlZ3JhdG9yLWFwLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWludGVncmF0b3ItYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWVmZDMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1pbnRlZ3JhdG9yLWFwLmMKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBJbnRlZ3JhdG9yL0FQIHRpbWVyIGRyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgTGluYXJvIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkX2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgorCitzdGF0aWMgdm9pZCBfX2lvbWVtICogc2NoZWRfY2xrX2Jhc2U7CisKK3N0YXRpYyB1NjQgbm90cmFjZSBpbnRlZ3JhdG9yX3JlYWRfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gLXJlYWRsKHNjaGVkX2Nsa19iYXNlICsgVElNRVJfVkFMVUUpOworfQorCitzdGF0aWMgdm9pZCBpbnRlZ3JhdG9yX2Nsb2Nrc291cmNlX2luaXQodW5zaWduZWQgbG9uZyBpbnJhdGUsCisJCQkJCXZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwl1MzIgY3RybCA9IFRJTUVSX0NUUkxfRU5BQkxFIHwgVElNRVJfQ1RSTF9QRVJJT0RJQzsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBpbnJhdGU7CisKKwlpZiAocmF0ZSA+PSAxNTAwMDAwKSB7CisJCXJhdGUgLz0gMTY7CisJCWN0cmwgfD0gVElNRVJfQ1RSTF9ESVYxNjsKKwl9CisKKwl3cml0ZWwoMHhmZmZmLCBiYXNlICsgVElNRVJfTE9BRCk7CisJd3JpdGVsKGN0cmwsIGJhc2UgKyBUSU1FUl9DVFJMKTsKKworCWNsb2Nrc291cmNlX21taW9faW5pdChiYXNlICsgVElNRVJfVkFMVUUsICJ0aW1lcjIiLAorCQkJcmF0ZSwgMjAwLCAxNiwgY2xvY2tzb3VyY2VfbW1pb19yZWFkbF9kb3duKTsKKworCXNjaGVkX2Nsa19iYXNlID0gYmFzZTsKKwlzY2hlZF9jbG9ja19yZWdpc3RlcihpbnRlZ3JhdG9yX3JlYWRfc2NoZWRfY2xvY2ssIDE2LCByYXRlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfcmVsb2FkOworc3RhdGljIHZvaWQgX19pb21lbSAqIGNsa2V2dF9iYXNlOworCisvKgorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZWdyYXRvcl90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9IGRldl9pZDsKKworCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMSwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9JTlRDTFIpOworCisJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsa2V2dF9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXUzMiBjdHJsID0gcmVhZGwoY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKSAmIH5USU1FUl9DVFJMX0VOQUJMRTsKKworCS8qIERpc2FibGUgdGltZXIgKi8KKwl3cml0ZWwoY3RybCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCS8qIEVuYWJsZSB0aGUgdGltZXIgYW5kIHN0YXJ0IHRoZSBwZXJpb2RpYyB0aWNrICovCisJCXdyaXRlbCh0aW1lcl9yZWxvYWQsIGNsa2V2dF9iYXNlICsgVElNRVJfTE9BRCk7CisJCWN0cmwgfD0gVElNRVJfQ1RSTF9QRVJJT0RJQyB8IFRJTUVSX0NUUkxfRU5BQkxFOworCQl3cml0ZWwoY3RybCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQkvKiBMZWF2ZSB0aGUgdGltZXIgZGlzYWJsZWQsIC5zZXRfbmV4dF9ldmVudCB3aWxsIGVuYWJsZSBpdCAqLworCQljdHJsICY9IH5USU1FUl9DVFJMX1BFUklPRElDOworCQl3cml0ZWwoY3RybCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwlkZWZhdWx0OgorCQkvKiBKdXN0IGxlYXZlIGluIGRpc2FibGVkIHN0YXRlICovCisJCWJyZWFrOworCX0KKworfQorCitzdGF0aWMgaW50IGNsa2V2dF9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwl1bnNpZ25lZCBsb25nIGN0cmwgPSByZWFkbChjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOworCisJd3JpdGVsKGN0cmwgJiB+VElNRVJfQ1RSTF9FTkFCTEUsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7CisJd3JpdGVsKG5leHQsIGNsa2V2dF9iYXNlICsgVElNRVJfTE9BRCk7CisJd3JpdGVsKGN0cmwgfCBUSU1FUl9DVFJMX0VOQUJMRSwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBpbnRlZ3JhdG9yX2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUJCT0gInRpbWVyMSIsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5zZXRfbW9kZQk9IGNsa2V2dF9zZXRfbW9kZSwKKwkuc2V0X25leHRfZXZlbnQJPSBjbGtldnRfc2V0X25leHRfZXZlbnQsCisJLnJhdGluZwkJPSAzMDAsCit9OworCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpbnRlZ3JhdG9yX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAidGltZXIiLAorCS5mbGFncwkJPSBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAorCS5oYW5kbGVyCT0gaW50ZWdyYXRvcl90aW1lcl9pbnRlcnJ1cHQsCisJLmRldl9pZAkJPSAmaW50ZWdyYXRvcl9jbG9ja2V2ZW50LAorfTsKKworc3RhdGljIHZvaWQgaW50ZWdyYXRvcl9jbG9ja2V2ZW50X2luaXQodW5zaWduZWQgbG9uZyBpbnJhdGUsCisJCQkJdm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGlucmF0ZTsKKwl1bnNpZ25lZCBpbnQgY3RybCA9IDA7CisKKwljbGtldnRfYmFzZSA9IGJhc2U7CisJLyogQ2FsY3VsYXRlIGFuZCBwcm9ncmFtIGEgZGl2aXNvciAqLworCWlmIChyYXRlID4gMHgxMDAwMDAgKiBIWikgeworCQlyYXRlIC89IDI1NjsKKwkJY3RybCB8PSBUSU1FUl9DVFJMX0RJVjI1NjsKKwl9IGVsc2UgaWYgKHJhdGUgPiAweDEwMDAwICogSFopIHsKKwkJcmF0ZSAvPSAxNjsKKwkJY3RybCB8PSBUSU1FUl9DVFJMX0RJVjE2OworCX0KKwl0aW1lcl9yZWxvYWQgPSByYXRlIC8gSFo7CisJd3JpdGVsKGN0cmwsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7CisKKwlzZXR1cF9pcnEoaXJxLCAmaW50ZWdyYXRvcl90aW1lcl9pcnEpOworCWNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoJmludGVncmF0b3JfY2xvY2tldmVudCwKKwkJCQkJcmF0ZSwKKwkJCQkJMSwKKwkJCQkJMHhmZmZmVSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbnRlZ3JhdG9yX2FwX3RpbWVyX2luaXRfb2Yoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBlcnI7CisJaW50IGlycTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcHJpX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpzZWNfbm9kZTsKKworCWJhc2UgPSBvZl9pb19yZXF1ZXN0X2FuZF9tYXAobm9kZSwgMCwgImludGVncmF0b3ItdGltZXIiKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybjsKKworCWNsayA9IG9mX2Nsa19nZXQobm9kZSwgMCk7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXByX2VycigiTm8gY2xvY2sgZm9yICVzXG4iLCBub2RlLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJd3JpdGVsKDAsIGJhc2UgKyBUSU1FUl9DVFJMKTsKKworCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG9mX2FsaWFzZXMsCisJCQkJImFybSx0aW1lci1wcmltYXJ5IiwgJnBhdGgpOworCWlmIChXQVJOX09OKGVycikpCisJCXJldHVybjsKKwlwcmlfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKHBhdGgpOworCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG9mX2FsaWFzZXMsCisJCQkJImFybSx0aW1lci1zZWNvbmRhcnkiLCAmcGF0aCk7CisJaWYgKFdBUk5fT04oZXJyKSkKKwkJcmV0dXJuOworCXNlY19ub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgocGF0aCk7CisKKwlpZiAobm9kZSA9PSBwcmlfbm9kZSkgeworCQkvKiBUaGUgcHJpbWFyeSB0aW1lciBsYWNrcyBJUlEsIHVzZSBhcyBjbG9ja3NvdXJjZSAqLworCQlpbnRlZ3JhdG9yX2Nsb2Nrc291cmNlX2luaXQocmF0ZSwgYmFzZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobm9kZSA9PSBzZWNfbm9kZSkgeworCQkvKiBUaGUgc2Vjb25kYXJ5IHRpbWVyIHdpbGwgZHJpdmUgdGhlIGNsb2NrIGV2ZW50ICovCisJCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOworCQlpbnRlZ3JhdG9yX2Nsb2NrZXZlbnRfaW5pdChyYXRlLCBiYXNlLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJcHJfaW5mbygiVGltZXIgQCVwIHVudXNlZFxuIiwgYmFzZSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7Cit9CisKK0NMT0NLU09VUkNFX09GX0RFQ0xBUkUoaW50ZWdyYXRvcl9hcF90aW1lciwgImFybSxpbnRlZ3JhdG9yLXRpbWVyIiwKKwkJICAgICAgIGludGVncmF0b3JfYXBfdGltZXJfaW5pdF9vZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLW1hcmNvLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLW1hcmNvLmMKaW5kZXggY2FmN2EyMC4uMzYxYTc4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1tYXJjby5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWFyY28uYwpAQCAtMjAsOCArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZF9jbG9jay5oPgogCi0jZGVmaW5lIE1BUkNPX0NMT0NLX0ZSRVEgMTAwMDAwMAotCiAjZGVmaW5lIFNJUkZTT0NfVElNRVJfMzJDT1VOVEVSXzBfQ1RSTAkJCTB4MDAwMAogI2RlZmluZSBTSVJGU09DX1RJTUVSXzMyQ09VTlRFUl8xX0NUUkwJCQkweDAwMDQKICNkZWZpbmUgU0lSRlNPQ19USU1FUl9NQVRDSF8wCQkJCTB4MDAxOApAQCAtNDAsNiArMzgsOCBAQAogCiAjZGVmaW5lIFNJUkZTT0NfVElNRVJfUkVHX0NOVCA2CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1hcmNvX3RpbWVyX3JhdGU7CisKIHN0YXRpYyBjb25zdCB1MzIgc2lyZnNvY190aW1lcl9yZWdfbGlzdFtTSVJGU09DX1RJTUVSX1JFR19DTlRdID0gewogCVNJUkZTT0NfVElNRVJfV0FUQ0hET0dfRU4sCiAJU0lSRlNPQ19USU1FUl8zMkNPVU5URVJfMF9DVFJMLApAQCAtMTk1LDcgKzE5NSw3IEBACiAJY2UtPnJhdGluZyA9IDIwMDsKIAljZS0+c2V0X21vZGUgPSBzaXJmc29jX3RpbWVyX3NldF9tb2RlOwogCWNlLT5zZXRfbmV4dF9ldmVudCA9IHNpcmZzb2NfdGltZXJfc2V0X25leHRfZXZlbnQ7Ci0JY2xvY2tldmVudHNfY2FsY19tdWx0X3NoaWZ0KGNlLCBNQVJDT19DTE9DS19GUkVRLCA2MCk7CisJY2xvY2tldmVudHNfY2FsY19tdWx0X3NoaWZ0KGNlLCBtYXJjb190aW1lcl9yYXRlLCA2MCk7CiAJY2UtPm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoLTIsIGNlKTsKIAljZS0+bWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygyLCBjZSk7CiAJY2UtPmNwdW1hc2sgPSBjcHVtYXNrX29mKGNwdSk7CkBAIC0yNTcsNyArMjU3LDYgQEAKIC8qIGluaXRpYWxpemUgdGhlIGtlcm5lbCBqaWZmeSB0aW1lciBzb3VyY2UgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBzaXJmc29jX21hcmNvX3RpbWVyX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQl1bnNpZ25lZCBsb25nIHJhdGU7CiAJdTMyIHRpbWVyX2RpdjsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKQEAgLTI2NiwxNiArMjY1LDEyIEBACiAKIAlCVUdfT04oY2xrX3ByZXBhcmVfZW5hYmxlKGNsaykpOwogCi0JcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOworCW1hcmNvX3RpbWVyX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAotCUJVR19PTihyYXRlIDwgTUFSQ09fQ0xPQ0tfRlJFUSk7Ci0JQlVHX09OKHJhdGUgJSBNQVJDT19DTE9DS19GUkVRKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHRpbWVyIGRpdmlkZXJzICovCi0JdGltZXJfZGl2ID0gcmF0ZSAvIE1BUkNPX0NMT0NLX0ZSRVEgLSAxOwotCXdyaXRlbF9yZWxheGVkKHRpbWVyX2RpdiA8PCAxNiwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl82NENPVU5URVJfQ1RSTCk7Ci0Jd3JpdGVsX3JlbGF4ZWQodGltZXJfZGl2IDw8IDE2LCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSXzMyQ09VTlRFUl8wX0NUUkwpOwotCXdyaXRlbF9yZWxheGVkKHRpbWVyX2RpdiA8PCAxNiwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl8zMkNPVU5URVJfMV9DVFJMKTsKKwkvKiB0aW1lciBkaXZpZGVyczogMCwgbm90IGRpdmlkZWQgKi8KKwl3cml0ZWxfcmVsYXhlZCgwLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSXzY0Q09VTlRFUl9DVFJMKTsKKwl3cml0ZWxfcmVsYXhlZCgwLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSXzMyQ09VTlRFUl8wX0NUUkwpOworCXdyaXRlbF9yZWxheGVkKDAsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfMzJDT1VOVEVSXzFfQ1RSTCk7CiAKIAkvKiBJbml0aWFsaXplIHRpbWVyIGNvdW50ZXJzIHRvIDAgKi8KIAl3cml0ZWxfcmVsYXhlZCgwLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSXzY0Q09VTlRFUl9MT0FEX0xPKTsKQEAgLTI4OCw3ICsyODMsNyBAQAogCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHRzICovCiAJd3JpdGVsX3JlbGF4ZWQoMHhGRkZGLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSX0lOVFJfU1RBVFVTKTsKIAotCUJVR19PTihjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmc2lyZnNvY19jbG9ja3NvdXJjZSwgTUFSQ09fQ0xPQ0tfRlJFUSkpOworCUJVR19PTihjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmc2lyZnNvY19jbG9ja3NvdXJjZSwgbWFyY29fdGltZXJfcmF0ZSkpOwogCiAJc2lyZnNvY19jbG9ja2V2ZW50X2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLWR0LmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS1kdC5jCmluZGV4IDIzYWFmNDAuLmY2NTdjNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLWR0LmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEtZHQuYwpAQCAtMTY2LDggKzE2Niw4IEBACiAJCWlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikKIAkJCWRldl9kYmcoY3B1X2RldiwgImNwdSVkIGNsb2NrIG5vdCByZWFkeSwgcmV0cnlcbiIsIGNwdSk7CiAJCWVsc2UKLQkJCWRldl9lcnIoY3B1X2RldiwgImZhaWxlZCB0byBnZXQgY3B1JWQgY2xvY2s6ICVkXG4iLCByZXQsCi0JCQkJY3B1KTsKKwkJCWRldl9lcnIoY3B1X2RldiwgImZhaWxlZCB0byBnZXQgY3B1JWQgY2xvY2s6ICVkXG4iLCBjcHUsCisJCQkJcmV0KTsKIAl9IGVsc2UgewogCQkqY2RldiA9IGNwdV9kZXY7CiAJCSpjcmVnID0gY3B1X3JlZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDY0NGI1NGUuLjQ0NzNlYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMTAyMiw3ICsxMDIyLDggQEAKIAogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAotCXBvbGljeS0+Z292ZXJub3IgPSBOVUxMOworCWlmIChwb2xpY3kpCisJCXBvbGljeS0+Z292ZXJub3IgPSBOVUxMOwogCiAJcmV0dXJuIHBvbGljeTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NhYW0va2V5X2dlbi5jIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9rZXlfZ2VuLmMKaW5kZXggODcxNzAzYy4uZTFlYWY0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vY2FhbS9rZXlfZ2VuLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9rZXlfZ2VuLmMKQEAgLTQ4LDIzICs0OCwyOSBAQAogCXUzMiAqZGVzYzsKIAlzdHJ1Y3Qgc3BsaXRfa2V5X3Jlc3VsdCByZXN1bHQ7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcl9pbiwgZG1hX2FkZHJfb3V0OwotCWludCByZXQgPSAwOworCWludCByZXQgPSAtRU5PTUVNOwogCiAJZGVzYyA9IGttYWxsb2MoQ0FBTV9DTURfU1ogKiA2ICsgQ0FBTV9QVFJfU1ogKiAyLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFkZXNjKSB7CiAJCWRldl9lcnIoanJkZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUga2V5IGlucHV0IG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWluaXRfam9iX2Rlc2MoZGVzYywgMCk7Ci0KIAlkbWFfYWRkcl9pbiA9IGRtYV9tYXBfc2luZ2xlKGpyZGV2LCAodm9pZCAqKWtleV9pbiwga2V5bGVuLAogCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGpyZGV2LCBkbWFfYWRkcl9pbikpIHsKIAkJZGV2X2VycihqcmRldiwgInVuYWJsZSB0byBtYXAga2V5IGlucHV0IG1lbW9yeVxuIik7Ci0JCWtmcmVlKGRlc2MpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZTsKIAl9CisKKwlkbWFfYWRkcl9vdXQgPSBkbWFfbWFwX3NpbmdsZShqcmRldiwga2V5X291dCwgc3BsaXRfa2V5X3BhZF9sZW4sCisJCQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoanJkZXYsIGRtYV9hZGRyX291dCkpIHsKKwkJZGV2X2VycihqcmRldiwgInVuYWJsZSB0byBtYXAga2V5IG91dHB1dCBtZW1vcnlcbiIpOworCQlnb3RvIG91dF91bm1hcF9pbjsKKwl9CisKKwlpbml0X2pvYl9kZXNjKGRlc2MsIDApOwogCWFwcGVuZF9rZXkoZGVzYywgZG1hX2FkZHJfaW4sIGtleWxlbiwgQ0xBU1NfMiB8IEtFWV9ERVNUX0NMQVNTX1JFRyk7CiAKIAkvKiBTZXRzIE1ESEEgdXAgaW50byBhbiBITUFDLUlOSVQgKi8KQEAgLTgxLDEzICs4Nyw2IEBACiAJICogRklGT19TVE9SRSB3aXRoIHRoZSBleHBsaWNpdCBzcGxpdC1rZXkgY29udGVudCBzdG9yZQogCSAqICgweDI2IG91dHB1dCB0eXBlKQogCSAqLwotCWRtYV9hZGRyX291dCA9IGRtYV9tYXBfc2luZ2xlKGpyZGV2LCBrZXlfb3V0LCBzcGxpdF9rZXlfcGFkX2xlbiwKLQkJCQkgICAgICBETUFfRlJPTV9ERVZJQ0UpOwotCWlmIChkbWFfbWFwcGluZ19lcnJvcihqcmRldiwgZG1hX2FkZHJfb3V0KSkgewotCQlkZXZfZXJyKGpyZGV2LCAidW5hYmxlIHRvIG1hcCBrZXkgb3V0cHV0IG1lbW9yeVxuIik7Ci0JCWtmcmVlKGRlc2MpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJYXBwZW5kX2ZpZm9fc3RvcmUoZGVzYywgZG1hX2FkZHJfb3V0LCBzcGxpdF9rZXlfbGVuLAogCQkJICBMRFNUX0NMQVNTXzJfQ0NCIHwgRklGT1NUX1RZUEVfU1BMSVRfS0VLKTsKIApAQCAtMTE1LDEwICsxMTQsMTAgQEAKIAogCWRtYV91bm1hcF9zaW5nbGUoanJkZXYsIGRtYV9hZGRyX291dCwgc3BsaXRfa2V5X3BhZF9sZW4sCiAJCQkgRE1BX0ZST01fREVWSUNFKTsKK291dF91bm1hcF9pbjoKIAlkbWFfdW5tYXBfc2luZ2xlKGpyZGV2LCBkbWFfYWRkcl9pbiwga2V5bGVuLCBETUFfVE9fREVWSUNFKTsKLQorb3V0X2ZyZWU6CiAJa2ZyZWUoZGVzYyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChnZW5fc3BsaXRfa2V5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3FhdC9xYXRfY29tbW9uL2FkZl9hY2NlbF9kZXZpY2VzLmggYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2NvbW1vbi9hZGZfYWNjZWxfZGV2aWNlcy5oCmluZGV4IDkyODIzODEuLmZlN2IzZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3FhdC9xYXRfY29tbW9uL2FkZl9hY2NlbF9kZXZpY2VzLmgKKysrIGIvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9jb21tb24vYWRmX2FjY2VsX2RldmljZXMuaApAQCAtMTk4LDggKzE5OCw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kaXI7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCXVpbnQ4X3QgYWNjZWxfaWQ7Ci0JdWludDhfdCBudW1hX25vZGU7CiAJc3RydWN0IGFkZl9hY2NlbF9wY2kgYWNjZWxfcGNpX2RldjsKKwl1aW50OF90IGFjY2VsX2lkOwogfSBfX3BhY2tlZDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9jb21tb24vYWRmX3RyYW5zcG9ydC5jIGIvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9jb21tb24vYWRmX3RyYW5zcG9ydC5jCmluZGV4IDVmM2ZhNDUuLjlkZDJjYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3FhdC9xYXRfY29tbW9uL2FkZl90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2NvbW1vbi9hZGZfdHJhbnNwb3J0LmMKQEAgLTQxOSw5ICs0MTksMTAgQEAKIAkJV1JJVEVfQ1NSX1JJTkdfQkFTRShjc3JfYWRkciwgYmFua19udW0sIGksIDApOwogCQlyaW5nID0gJmJhbmstPnJpbmdzW2ldOwogCQlpZiAoaHdfZGF0YS0+dHhfcmluZ3NfbWFzayAmICgxIDw8IGkpKSB7Ci0JCQlyaW5nLT5pbmZsaWdodHMgPSBremFsbG9jX25vZGUoc2l6ZW9mKGF0b21pY190KSwKLQkJCQkJCSAgICAgICBHRlBfS0VSTkVMLAotCQkJCQkJICAgICAgIGFjY2VsX2Rldi0+bnVtYV9ub2RlKTsKKwkJCXJpbmctPmluZmxpZ2h0cyA9CisJCQkJa3phbGxvY19ub2RlKHNpemVvZihhdG9taWNfdCksCisJCQkJCSAgICAgR0ZQX0tFUk5FTCwKKwkJCQkJICAgICBkZXZfdG9fbm9kZSgmR0VUX0RFVihhY2NlbF9kZXYpKSk7CiAJCQlpZiAoIXJpbmctPmluZmxpZ2h0cykKIAkJCQlnb3RvIGVycjsKIAkJfSBlbHNlIHsKQEAgLTQ2OSwxMyArNDcwLDE0IEBACiAJaW50IGksIHJldDsKIAogCWV0cl9kYXRhID0ga3phbGxvY19ub2RlKHNpemVvZigqZXRyX2RhdGEpLCBHRlBfS0VSTkVMLAotCQkJCWFjY2VsX2Rldi0+bnVtYV9ub2RlKTsKKwkJCQlkZXZfdG9fbm9kZSgmR0VUX0RFVihhY2NlbF9kZXYpKSk7CiAJaWYgKCFldHJfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAludW1fYmFua3MgPSBHRVRfTUFYX0JBTktTKGFjY2VsX2Rldik7CiAJc2l6ZSA9IG51bV9iYW5rcyAqIHNpemVvZihzdHJ1Y3QgYWRmX2V0cl9iYW5rX2RhdGEpOwotCWV0cl9kYXRhLT5iYW5rcyA9IGt6YWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMLCBhY2NlbF9kZXYtPm51bWFfbm9kZSk7CisJZXRyX2RhdGEtPmJhbmtzID0ga3phbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwsCisJCQkJICAgICAgIGRldl90b19ub2RlKCZHRVRfREVWKGFjY2VsX2RldikpKTsKIAlpZiAoIWV0cl9kYXRhLT5iYW5rcykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9iYW5rOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9jb21tb24vcWF0X2FsZ3MuYyBiL2RyaXZlcnMvY3J5cHRvL3FhdC9xYXRfY29tbW9uL3FhdF9hbGdzLmMKaW5kZXggZjJlMmYxNS4uOWU5NjE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9jb21tb24vcWF0X2FsZ3MuYworKysgYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2NvbW1vbi9xYXRfYWxncy5jCkBAIC01OTYsNyArNTk2LDggQEAKIAlpZiAodW5saWtlbHkoIW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1ZmwgPSBrbWFsbG9jX25vZGUoc3osIEdGUF9BVE9NSUMsIGluc3QtPmFjY2VsX2Rldi0+bnVtYV9ub2RlKTsKKwlidWZsID0ga21hbGxvY19ub2RlKHN6LCBHRlBfQVRPTUlDLAorCQkJICAgIGRldl90b19ub2RlKCZHRVRfREVWKGluc3QtPmFjY2VsX2RldikpKTsKIAlpZiAodW5saWtlbHkoIWJ1ZmwpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNjA1LDYgKzYwNiw4IEBACiAJCWdvdG8gZXJyOwogCiAJZm9yX2VhY2hfc2coYXNzb2MsIHNnLCBhc3NvY19uLCBpKSB7CisJCWlmICghc2ctPmxlbmd0aCkKKwkJCWNvbnRpbnVlOwogCQlidWZsLT5idWZlcnNbYnVmc10uYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwKIAkJCQkJCQkgc2dfdmlydChzZyksCiAJCQkJCQkJIHNnLT5sZW5ndGgsCkBAIC02NDAsNyArNjQzLDcgQEAKIAkJc3RydWN0IHFhdF9hbGdfYnVmICpidWZlcnM7CiAKIAkJYnVmbG91dCA9IGttYWxsb2Nfbm9kZShzeiwgR0ZQX0FUT01JQywKLQkJCQkgICAgICAgaW5zdC0+YWNjZWxfZGV2LT5udW1hX25vZGUpOworCQkJCSAgICAgICBkZXZfdG9fbm9kZSgmR0VUX0RFVihpbnN0LT5hY2NlbF9kZXYpKSk7CiAJCWlmICh1bmxpa2VseSghYnVmbG91dCkpCiAJCQlnb3RvIGVycjsKIAkJYmxvdXRwID0gZG1hX21hcF9zaW5nbGUoZGV2LCBidWZsb3V0LCBzeiwgRE1BX1RPX0RFVklDRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2NvbW1vbi9xYXRfY3J5cHRvLmMgYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2NvbW1vbi9xYXRfY3J5cHRvLmMKaW5kZXggMGQ1OWJjYi4uODI4ZjJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9jb21tb24vcWF0X2NyeXB0by5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3FhdC9xYXRfY29tbW9uL3FhdF9jcnlwdG8uYwpAQCAtMTA5LDEyICsxMDksMTQgQEAKIAogCWxpc3RfZm9yX2VhY2goaXRyLCBhZGZfZGV2bWdyX2dldF9oZWFkKCkpIHsKIAkJYWNjZWxfZGV2ID0gbGlzdF9lbnRyeShpdHIsIHN0cnVjdCBhZGZfYWNjZWxfZGV2LCBsaXN0KTsKLQkJaWYgKGFjY2VsX2Rldi0+bnVtYV9ub2RlID09IG5vZGUgJiYgYWRmX2Rldl9zdGFydGVkKGFjY2VsX2RldikpCisJCWlmICgobm9kZSA9PSBkZXZfdG9fbm9kZSgmR0VUX0RFVihhY2NlbF9kZXYpKSB8fAorCQkJZGV2X3RvX25vZGUoJkdFVF9ERVYoYWNjZWxfZGV2KSkgPCAwKQorCQkJCSYmIGFkZl9kZXZfc3RhcnRlZChhY2NlbF9kZXYpKQogCQkJYnJlYWs7CiAJCWFjY2VsX2RldiA9IE5VTEw7CiAJfQogCWlmICghYWNjZWxfZGV2KSB7Ci0JCXByX2VycigiUUFUOiBDb3VsZCBub3QgZmluZCBkZXZpY2Ugb24gZ2l2ZSBub2RlXG4iKTsKKwkJcHJfZXJyKCJRQVQ6IENvdWxkIG5vdCBmaW5kIGRldmljZSBvbiBub2RlICVkXG4iLCBub2RlKTsKIAkJYWNjZWxfZGV2ID0gYWRmX2Rldm1ncl9nZXRfZmlyc3QoKTsKIAl9CiAJaWYgKCFhY2NlbF9kZXYgfHwgIWFkZl9kZXZfc3RhcnRlZChhY2NlbF9kZXYpKQpAQCAtMTY0LDcgKzE2Niw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2luc3Q7IGkrKykgewogCQlpbnN0ID0ga3phbGxvY19ub2RlKHNpemVvZigqaW5zdCksIEdGUF9LRVJORUwsCi0JCQkJICAgIGFjY2VsX2Rldi0+bnVtYV9ub2RlKTsKKwkJCQkgICAgZGV2X3RvX25vZGUoJkdFVF9ERVYoYWNjZWxfZGV2KSkpOwogCQlpZiAoIWluc3QpCiAJCQlnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9kaDg5NXhjYy9hZGZfYWRtaW4uYyBiL2RyaXZlcnMvY3J5cHRvL3FhdC9xYXRfZGg4OTV4Y2MvYWRmX2FkbWluLmMKaW5kZXggOTc4ZDZjNS4uNTNjNDkxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9kaDg5NXhjYy9hZGZfYWRtaW4uYworKysgYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2RoODk1eGNjL2FkZl9hZG1pbi5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAl1aW50NjRfdCByZWdfdmFsOwogCiAJYWRtaW4gPSBremFsbG9jX25vZGUoc2l6ZW9mKCphY2NlbF9kZXYtPmFkbWluKSwgR0ZQX0tFUk5FTCwKLQkJCSAgICAgYWNjZWxfZGV2LT5udW1hX25vZGUpOworCQkJICAgICBkZXZfdG9fbm9kZSgmR0VUX0RFVihhY2NlbF9kZXYpKSk7CiAJaWYgKCFhZG1pbikKIAkJcmV0dXJuIC1FTk9NRU07CiAJYWRtaW4tPnZpcnRfYWRkciA9IGRtYV96YWxsb2NfY29oZXJlbnQoJkdFVF9ERVYoYWNjZWxfZGV2KSwgUEFHRV9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9kaDg5NXhjYy9hZGZfZHJ2LmMgYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2RoODk1eGNjL2FkZl9kcnYuYwppbmRleCAwZDA0MzVhLi45NDhmNjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2RoODk1eGNjL2FkZl9kcnYuYworKysgYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2RoODk1eGNjL2FkZl9kcnYuYwpAQCAtMTE5LDIxICsxMTksNiBAQAogCWtmcmVlKGFjY2VsX2Rldik7CiB9CiAKLXN0YXRpYyB1aW50OF90IGFkZl9nZXRfZGV2X25vZGVfaWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JdW5zaWduZWQgaW50IGJ1c19wZXJfY3B1ID0gMDsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEobnVtX29ubGluZV9jcHVzKCkgLSAxKTsKLQotCWlmICghYy0+cGh5c19wcm9jX2lkKQotCQlyZXR1cm4gMDsKLQotCWJ1c19wZXJfY3B1ID0gMjU2IC8gKGMtPnBoeXNfcHJvY19pZCArIDEpOwotCi0JaWYgKGJ1c19wZXJfY3B1ICE9IDApCi0JCXJldHVybiBwZGV2LT5idXMtPm51bWJlciAvIGJ1c19wZXJfY3B1OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHFhdF9kZXZfc3RhcnQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldikKIHsKIAlpbnQgY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOwpAQCAtMjM1LDcgKzIyMCw2IEBACiAJdm9pZCBfX2lvbWVtICpwbWlzY19iYXJfYWRkciA9IE5VTEw7CiAJY2hhciBuYW1lW0FERl9ERVZJQ0VfTkFNRV9MRU5HVEhdOwogCXVuc2lnbmVkIGludCBpLCBiYXJfbnI7Ci0JdWludDhfdCBub2RlOwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKGVudC0+ZGV2aWNlKSB7CkBAIC0yNDYsMTIgKzIzMCwxOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlub2RlID0gYWRmX2dldF9kZXZfbm9kZV9pZChwZGV2KTsKLQlhY2NlbF9kZXYgPSBremFsbG9jX25vZGUoc2l6ZW9mKCphY2NlbF9kZXYpLCBHRlBfS0VSTkVMLCBub2RlKTsKKwlpZiAobnVtX3Bvc3NpYmxlX25vZGVzKCkgPiAxICYmIGRldl90b19ub2RlKCZwZGV2LT5kZXYpIDwgMCkgeworCQkvKiBJZiB0aGUgYWNjZWxlcmF0b3IgaXMgY29ubmVjdGVkIHRvIGEgbm9kZSB3aXRoIG5vIG1lbW9yeQorCQkgKiB0aGVyZSBpcyBubyBwb2ludCBpbiB1c2luZyB0aGUgYWNjZWxlcmF0b3Igc2luY2UgdGhlIHJlbW90ZQorCQkgKiBtZW1vcnkgdHJhbnNhY3Rpb24gd2lsbCBiZSB2ZXJ5IHNsb3cuICovCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgTlVNQSBjb25maWd1cmF0aW9uLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFjY2VsX2RldiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmFjY2VsX2RldiksIEdGUF9LRVJORUwsCisJCQkgICAgICAgICBkZXZfdG9fbm9kZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFhY2NlbF9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYWNjZWxfZGV2LT5udW1hX25vZGUgPSBub2RlOwogCUlOSVRfTElTVF9IRUFEKCZhY2NlbF9kZXYtPmNyeXB0b19saXN0KTsKIAogCS8qIEFkZCBhY2NlbCBkZXZpY2UgdG8gYWNjZWwgdGFibGUuCkBAIC0yNjQsNyArMjU1LDggQEAKIAogCWFjY2VsX2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkvKiBBbGxvY2F0ZSBhbmQgY29uZmlndXJlIGRldmljZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotCWh3X2RhdGEgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpod19kYXRhKSwgR0ZQX0tFUk5FTCwgbm9kZSk7CisJaHdfZGF0YSA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmh3X2RhdGEpLCBHRlBfS0VSTkVMLAorCQkJICAgICAgIGRldl90b19ub2RlKCZwZGV2LT5kZXYpKTsKIAlpZiAoIWh3X2RhdGEpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9kaDg5NXhjYy9hZGZfaXNyLmMgYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2RoODk1eGNjL2FkZl9pc3IuYwppbmRleCA2N2VjNjFlLi5kOTZlZTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2RoODk1eGNjL2FkZl9pc3IuYworKysgYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2RoODk1eGNjL2FkZl9pc3IuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJdWludDMyX3QgbXNpeF9udW1fZW50cmllcyA9IGh3X2RhdGEtPm51bV9iYW5rcyArIDE7CiAKIAllbnRyaWVzID0ga3phbGxvY19ub2RlKG1zaXhfbnVtX2VudHJpZXMgKiBzaXplb2YoKmVudHJpZXMpLAotCQkJICAgICAgIEdGUF9LRVJORUwsIGFjY2VsX2Rldi0+bnVtYV9ub2RlKTsKKwkJCSAgICAgICBHRlBfS0VSTkVMLCBkZXZfdG9fbm9kZSgmR0VUX0RFVihhY2NlbF9kZXYpKSk7CiAJaWYgKCFlbnRyaWVzKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZWRtYS5jIGIvZHJpdmVycy9kbWEvZWRtYS5jCmluZGV4IDEyM2Y1NzguLjRjZmFhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2VkbWEuYworKysgYi9kcml2ZXJzL2RtYS9lZG1hLmMKQEAgLTExMDcsNTIgKzExMDcsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0woZWRtYV9maWx0ZXJfZm4pOwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjAsICpwZGV2MTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBlZG1hX2Rldl9pbmZvMCA9IHsKLQkubmFtZSA9ICJlZG1hLWRtYS1lbmdpbmUiLAotCS5pZCA9IDAsCi0JLmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gZWRtYV9kZXZfaW5mbzEgPSB7Ci0JLm5hbWUgPSAiZWRtYS1kbWEtZW5naW5lIiwKLQkuaWQgPSAxLAotCS5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi19OwotCiBzdGF0aWMgaW50IGVkbWFfaW5pdCh2b2lkKQogewotCWludCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVkbWFfZHJpdmVyKTsKLQotCWlmIChyZXQgPT0gMCkgewotCQlwZGV2MCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZlZG1hX2Rldl9pbmZvMCk7Ci0JCWlmIChJU19FUlIocGRldjApKSB7Ci0JCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZWRtYV9kcml2ZXIpOwotCQkJcmV0ID0gUFRSX0VSUihwZGV2MCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmICghb2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSAmJiBFRE1BX0NUTFJTID09IDIpIHsKLQkJcGRldjEgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgmZWRtYV9kZXZfaW5mbzEpOwotCQlpZiAoSVNfRVJSKHBkZXYxKSkgewotCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVkbWFfZHJpdmVyKTsKLQkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYwKTsKLQkJCXJldCA9IFBUUl9FUlIocGRldjEpOwotCQl9Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlZG1hX2RyaXZlcik7CiB9CiBzdWJzeXNfaW5pdGNhbGwoZWRtYV9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGVkbWFfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYwKTsKLQlpZiAocGRldjEpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYxKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZWRtYV9kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQoZWRtYV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3BsMzMwLmMgYi9kcml2ZXJzL2RtYS9wbDMzMC5jCmluZGV4IDQ4MzliZmEuLjE5YTk5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3BsMzMwLmMKKysrIGIvZHJpdmVycy9kbWEvcGwzMzAuYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAjZGVmaW5lIERNQUNfTU9ERV9OUwkoMSA8PCAwKQogCXVuc2lnbmVkIGludAltb2RlOwogCXVuc2lnbmVkIGludAlkYXRhX2J1c193aWR0aDoxMDsgLyogSW4gbnVtYmVyIG9mIGJpdHMgKi8KLQl1bnNpZ25lZCBpbnQJZGF0YV9idWZfZGVwOjEwOworCXVuc2lnbmVkIGludAlkYXRhX2J1Zl9kZXA6MTE7CiAJdW5zaWduZWQgaW50CW51bV9jaGFuOjQ7CiAJdW5zaWduZWQgaW50CW51bV9wZXJpOjY7CiAJdTMyCQlwZXJpX25zOwpAQCAtMjMzNiw3ICsyMzM2LDcgQEAKIAlpbnQgYnVyc3RfbGVuOwogCiAJYnVyc3RfbGVuID0gcGwzMzAtPnBjZmcuZGF0YV9idXNfd2lkdGggLyA4OwotCWJ1cnN0X2xlbiAqPSBwbDMzMC0+cGNmZy5kYXRhX2J1Zl9kZXA7CisJYnVyc3RfbGVuICo9IHBsMzMwLT5wY2ZnLmRhdGFfYnVmX2RlcCAvIHBsMzMwLT5wY2ZnLm51bV9jaGFuOwogCWJ1cnN0X2xlbiA+Pj0gZGVzYy0+cnFjZmcuYnJzdF9zaXplOwogCiAJLyogc3JjL2RzdF9idXJzdF9sZW4gY2FuJ3QgYmUgbW9yZSB0aGFuIDE2ICovCkBAIC0yNDU5LDE2ICsyNDU5LDI1IEBACiAJLyogU2VsZWN0IG1heCBwb3NzaWJsZSBidXJzdCBzaXplICovCiAJYnVyc3QgPSBwbDMzMC0+cGNmZy5kYXRhX2J1c193aWR0aCAvIDg7CiAKLQl3aGlsZSAoYnVyc3QgPiAxKSB7Ci0JCWlmICghKGxlbiAlIGJ1cnN0KSkKLQkJCWJyZWFrOworCS8qCisJICogTWFrZSBzdXJlIHdlIHVzZSBhIGJ1cnN0IHNpemUgdGhhdCBhbGlnbnMgd2l0aCBhbGwgdGhlIG1lbWNweQorCSAqIHBhcmFtZXRlcnMgYmVjYXVzZSBvdXIgRE1BIHByb2dyYW1taW5nIGFsZ29yaXRobSBkb2Vzbid0IGNvcGUgd2l0aAorCSAqIHRyYW5zZmVycyB3aGljaCBzdHJhZGRsZSBhbiBlbnRyeSBpbiB0aGUgRE1BIGRldmljZSdzIE1GSUZPLgorCSAqLworCXdoaWxlICgoc3JjIHwgZHN0IHwgbGVuKSAmIChidXJzdCAtIDEpKQogCQlidXJzdCAvPSAyOwotCX0KIAogCWRlc2MtPnJxY2ZnLmJyc3Rfc2l6ZSA9IDA7CiAJd2hpbGUgKGJ1cnN0ICE9ICgxIDw8IGRlc2MtPnJxY2ZnLmJyc3Rfc2l6ZSkpCiAJCWRlc2MtPnJxY2ZnLmJyc3Rfc2l6ZSsrOwogCisJLyoKKwkgKiBJZiBidXJzdCBzaXplIGlzIHNtYWxsZXIgdGhhbiBidXMgd2lkdGggdGhlbiBtYWtlIHN1cmUgd2Ugb25seQorCSAqIHRyYW5zZmVyIG9uZSBhdCBhIHRpbWUgdG8gYXZvaWQgYSBidXJzdCBzdHJhZGxpbmcgYW4gTUZJRk8gZW50cnkuCisJICovCisJaWYgKGRlc2MtPnJxY2ZnLmJyc3Rfc2l6ZSAqIDggPCBwbDMzMC0+cGNmZy5kYXRhX2J1c193aWR0aCkKKwkJZGVzYy0+cnFjZmcuYnJzdF9sZW4gPSAxOworCiAJZGVzYy0+cnFjZmcuYnJzdF9sZW4gPSBnZXRfYnVyc3RfbGVuKGRlc2MsIGxlbik7CiAKIAlkZXNjLT50eGQuZmxhZ3MgPSBmbGFnczsKQEAgLTI3MzIsNyArMjc0MSw3IEBACiAKIAogCWRldl9pbmZvKCZhZGV2LT5kZXYsCi0JCSJMb2FkZWQgZHJpdmVyIGZvciBQTDMzMCBETUFDLSVkXG4iLCBhZGV2LT5wZXJpcGhpZCk7CisJCSJMb2FkZWQgZHJpdmVyIGZvciBQTDMzMCBETUFDLSV4XG4iLCBhZGV2LT5wZXJpcGhpZCk7CiAJZGV2X2luZm8oJmFkZXYtPmRldiwKIAkJIlx0REJVRkYtJXV4JXVieXRlcyBOdW1fQ2hhbnMtJXUgTnVtX1BlcmktJXUgTnVtX0V2ZW50cy0ldVxuIiwKIAkJcGNmZy0+ZGF0YV9idWZfZGVwLCBwY2ZnLT5kYXRhX2J1c193aWR0aCAvIDgsIHBjZmctPm51bV9jaGFuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc3VuNmktZG1hLmMgYi9kcml2ZXJzL2RtYS9zdW42aS1kbWEuYwppbmRleCAzYWExMGIzLi45MTI5MmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zdW42aS1kbWEuYworKysgYi9kcml2ZXJzL2RtYS9zdW42aS1kbWEuYwpAQCAtMjMwLDMwICsyMzAsMjUgQEAKIAkJcmVhZGwocGNoYW4tPmJhc2UgKyBETUFfQ0hBTl9DVVJfUEFSQSkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjb252ZXJ0X2J1cnN0KHUzMiBtYXhidXJzdCwgdTggKmJ1cnN0KQorc3RhdGljIGlubGluZSBzOCBjb252ZXJ0X2J1cnN0KHUzMiBtYXhidXJzdCkKIHsKIAlzd2l0Y2ggKG1heGJ1cnN0KSB7CiAJY2FzZSAxOgotCQkqYnVyc3QgPSAwOwotCQlicmVhazsKKwkJcmV0dXJuIDA7CiAJY2FzZSA4OgotCQkqYnVyc3QgPSAyOwotCQlicmVhazsKKwkJcmV0dXJuIDI7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNvbnZlcnRfYnVzd2lkdGgoZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggYWRkcl93aWR0aCwgdTggKndpZHRoKQorc3RhdGljIGlubGluZSBzOCBjb252ZXJ0X2J1c3dpZHRoKGVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIGFkZHJfd2lkdGgpCiB7CiAJaWYgKChhZGRyX3dpZHRoIDwgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSkgfHwKIAkgICAgKGFkZHJfd2lkdGggPiBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JKndpZHRoID0gYWRkcl93aWR0aCA+PiAxOwotCXJldHVybiAwOworCXJldHVybiBhZGRyX3dpZHRoID4+IDE7CiB9CiAKIHN0YXRpYyB2b2lkICpzdW42aV9kbWFfbGxpX2FkZChzdHJ1Y3Qgc3VuNmlfZG1hX2xsaSAqcHJldiwKQEAgLTI4NCwyNiArMjc5LDI1IEBACiAJCQkJICAgIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjb25maWcpCiB7CiAJdTggc3JjX3dpZHRoLCBkc3Rfd2lkdGgsIHNyY19idXJzdCwgZHN0X2J1cnN0OwotCWludCByZXQ7CiAKIAlpZiAoIWNvbmZpZykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBjb252ZXJ0X2J1cnN0KGNvbmZpZy0+c3JjX21heGJ1cnN0LCAmc3JjX2J1cnN0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCXNyY19idXJzdCA9IGNvbnZlcnRfYnVyc3QoY29uZmlnLT5zcmNfbWF4YnVyc3QpOworCWlmIChzcmNfYnVyc3QpCisJCXJldHVybiBzcmNfYnVyc3Q7CiAKLQlyZXQgPSBjb252ZXJ0X2J1cnN0KGNvbmZpZy0+ZHN0X21heGJ1cnN0LCAmZHN0X2J1cnN0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWRzdF9idXJzdCA9IGNvbnZlcnRfYnVyc3QoY29uZmlnLT5kc3RfbWF4YnVyc3QpOworCWlmIChkc3RfYnVyc3QpCisJCXJldHVybiBkc3RfYnVyc3Q7CiAKLQlyZXQgPSBjb252ZXJ0X2J1c3dpZHRoKGNvbmZpZy0+c3JjX2FkZHJfd2lkdGgsICZzcmNfd2lkdGgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJc3JjX3dpZHRoID0gY29udmVydF9idXN3aWR0aChjb25maWctPnNyY19hZGRyX3dpZHRoKTsKKwlpZiAoc3JjX3dpZHRoKQorCQlyZXR1cm4gc3JjX3dpZHRoOwogCi0JcmV0ID0gY29udmVydF9idXN3aWR0aChjb25maWctPmRzdF9hZGRyX3dpZHRoLCAmZHN0X3dpZHRoKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWRzdF93aWR0aCA9IGNvbnZlcnRfYnVzd2lkdGgoY29uZmlnLT5kc3RfYWRkcl93aWR0aCk7CisJaWYgKGRzdF93aWR0aCkKKwkJcmV0dXJuIGRzdF93aWR0aDsKIAogCWxsaS0+Y2ZnID0gRE1BX0NIQU5fQ0ZHX1NSQ19CVVJTVChzcmNfYnVyc3QpIHwKIAkJRE1BX0NIQU5fQ0ZHX1NSQ19XSURUSChzcmNfd2lkdGgpIHwKQEAgLTU0MiwxMSArNTM2LDEwIEBACiB7CiAJc3RydWN0IHN1bjZpX2RtYV9kZXYgKnNkZXYgPSB0b19zdW42aV9kbWFfZGV2KGNoYW4tPmRldmljZSk7CiAJc3RydWN0IHN1bjZpX3ZjaGFuICp2Y2hhbiA9IHRvX3N1bjZpX3ZjaGFuKGNoYW4pOwotCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpzY29uZmlnID0gJnZjaGFuLT5jZmc7CiAJc3RydWN0IHN1bjZpX2RtYV9sbGkgKnZfbGxpOwogCXN0cnVjdCBzdW42aV9kZXNjICp0eGQ7CiAJZG1hX2FkZHJfdCBwX2xsaTsKLQlpbnQgcmV0OworCXM4IGJ1cnN0LCB3aWR0aDsKIAogCWRldl9kYmcoY2hhbjJkZXYoY2hhbiksCiAJCSIlczsgY2hhbjogJWQsIGRlc3Q6ICVwYWQsIHNyYzogJXBhZCwgbGVuOiAlenUuIGZsYWdzOiAweCUwOGx4XG4iLApAQCAtNTY1LDE0ICs1NTgsMjEgQEAKIAkJZ290byBlcnJfdHhkX2ZyZWU7CiAJfQogCi0JcmV0ID0gc3VuNmlfZG1hX2NmZ19sbGkodl9sbGksIHNyYywgZGVzdCwgbGVuLCBzY29uZmlnKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9kbWFfZnJlZTsKKwl2X2xsaS0+c3JjID0gc3JjOworCXZfbGxpLT5kc3QgPSBkZXN0OworCXZfbGxpLT5sZW4gPSBsZW47CisJdl9sbGktPnBhcmEgPSBOT1JNQUxfV0FJVDsKIAorCWJ1cnN0ID0gY29udmVydF9idXJzdCg4KTsKKwl3aWR0aCA9IGNvbnZlcnRfYnVzd2lkdGgoRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpOwogCXZfbGxpLT5jZmcgfD0gRE1BX0NIQU5fQ0ZHX1NSQ19EUlEoRFJRX1NEUkFNKSB8CiAJCURNQV9DSEFOX0NGR19EU1RfRFJRKERSUV9TRFJBTSkgfAogCQlETUFfQ0hBTl9DRkdfRFNUX0xJTkVBUl9NT0RFIHwKLQkJRE1BX0NIQU5fQ0ZHX1NSQ19MSU5FQVJfTU9ERTsKKwkJRE1BX0NIQU5fQ0ZHX1NSQ19MSU5FQVJfTU9ERSB8CisJCURNQV9DSEFOX0NGR19TUkNfQlVSU1QoYnVyc3QpIHwKKwkJRE1BX0NIQU5fQ0ZHX1NSQ19XSURUSCh3aWR0aCkgfAorCQlETUFfQ0hBTl9DRkdfRFNUX0JVUlNUKGJ1cnN0KSB8CisJCURNQV9DSEFOX0NGR19EU1RfV0lEVEgod2lkdGgpOwogCiAJc3VuNmlfZG1hX2xsaV9hZGQoTlVMTCwgdl9sbGksIHBfbGxpLCB0eGQpOwogCkBAIC01ODAsOCArNTgwLDYgQEAKIAogCXJldHVybiB2Y2hhbl90eF9wcmVwKCZ2Y2hhbi0+dmMsICZ0eGQtPnZkLCBmbGFncyk7CiAKLWVycl9kbWFfZnJlZToKLQlkbWFfcG9vbF9mcmVlKHNkZXYtPnBvb2wsIHZfbGxpLCBwX2xsaSk7CiBlcnJfdHhkX2ZyZWU6CiAJa2ZyZWUodHhkKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTkxNSw2ICs5MTMsNyBAQAogCXNkYy0+c2xhdmUuZGV2aWNlX3ByZXBfZG1hX21lbWNweQk9IHN1bjZpX2RtYV9wcmVwX2RtYV9tZW1jcHk7CiAJc2RjLT5zbGF2ZS5kZXZpY2VfY29udHJvbAkJPSBzdW42aV9kbWFfY29udHJvbDsKIAlzZGMtPnNsYXZlLmNoYW5jbnQJCQk9IE5SX01BWF9WQ0hBTlM7CisJc2RjLT5zbGF2ZS5jb3B5X2FsaWduCQkJPSA0OwogCiAJc2RjLT5zbGF2ZS5kZXYgPSAmcGRldi0+ZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCmluZGV4IDcwNzJjMjguLjQ5YzI2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCkBAIC02MSwxNCArNjEsMTQgQEAKIAkgIGhhcyBiZWVuIGluaXRpYWxpemVkLgogCiBjb25maWcgRURBQ19NQ0VfSU5KCi0JdHJpc3RhdGUgIlNpbXBsZSBNQ0UgaW5qZWN0aW9uIGludGVyZmFjZSBvdmVyIC9zeXNmcyIKLQlkZXBlbmRzIG9uIEVEQUNfREVDT0RFX01DRQorCXRyaXN0YXRlICJTaW1wbGUgTUNFIGluamVjdGlvbiBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBFREFDX0RFQ09ERV9NQ0UgJiYgREVCVUdfRlMKIAlkZWZhdWx0IG4KIAloZWxwCi0JICBUaGlzIGlzIGEgc2ltcGxlIGludGVyZmFjZSB0byBpbmplY3QgTUNFcyBvdmVyIC9zeXNmcyBhbmQgdGVzdAotCSAgdGhlIE1DRSBkZWNvZGluZyBjb2RlIGluIEVEQUMuCisJICBUaGlzIGlzIGEgc2ltcGxlIGRlYnVnZnMgaW50ZXJmYWNlIHRvIGluamVjdCBNQ0VzIGFuZCB0ZXN0IGRpZmZlcmVudAorCSAgYXNwZWN0cyBvZiB0aGUgTUNFIGhhbmRsaW5nIGNvZGUuCiAKLQkgIFRoaXMgaXMgY3VycmVudGx5IEFNRC1vbmx5LgorCSAgV0FSTklORzogRG8gbm90IGV2ZW4gYXNzdW1lIHRoaXMgaW50ZXJmYWNlIGlzIHN0YXlpbmcgc3RhYmxlIQogCiBjb25maWcgRURBQ19NTV9FREFDCiAJdHJpc3RhdGUgIk1haW4gTWVtb3J5IEVEQUMgKEVycm9yIERldGVjdGlvbiBBbmQgQ29ycmVjdGlvbikgcmVwb3J0aW5nIgpAQCAtMTA1LDExICsxMDUsMTEgQEAKIAkgIEluIGRvdWJ0LCBzYXkgJ1knLgogCiBjb25maWcgRURBQ19BTUQ2NAotCXRyaXN0YXRlICJBTUQ2NCAoT3B0ZXJvbiwgQXRobG9uNjQpIEs4LCBGMTBoIgotCWRlcGVuZHMgb24gRURBQ19NTV9FREFDICYmIEFNRF9OQiAmJiBYODZfNjQgJiYgRURBQ19ERUNPREVfTUNFCisJdHJpc3RhdGUgIkFNRDY0IChPcHRlcm9uLCBBdGhsb242NCkiCisJZGVwZW5kcyBvbiBFREFDX01NX0VEQUMgJiYgQU1EX05CICYmIEVEQUNfREVDT0RFX01DRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVjdGlvbiBvZiBEUkFNIEVDQyBlcnJvcnMgb24KLQkgIHRoZSBBTUQ2NCBmYW1pbGllcyBvZiBtZW1vcnkgY29udHJvbGxlcnMgKEs4IGFuZCBGMTBoKQorCSAgdGhlIEFNRDY0IGZhbWlsaWVzICg+PSBLOCkgb2YgbWVtb3J5IGNvbnRyb2xsZXJzLgogCiBjb25maWcgRURBQ19BTUQ2NF9FUlJPUl9JTkpFQ1RJT04KIAlib29sICJTeXNmcyBIVyBFcnJvciBpbmplY3Rpb24gZmFjaWxpdGllcyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZSBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQppbmRleCAzNTlhYTQ5Li5kNDBjNjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQAogb2JqLSQoQ09ORklHX0VEQUMpCQkJOj0gZWRhY19zdHViLm8KIG9iai0kKENPTkZJR19FREFDX01NX0VEQUMpCQkrPSBlZGFjX2NvcmUubwogCi1lZGFjX2NvcmUteQk6PSBlZGFjX21jLm8gZWRhY19kZXZpY2UubyBlZGFjX21jX3N5c2ZzLm8gZWRhY19wY2lfc3lzZnMubworZWRhY19jb3JlLXkJOj0gZWRhY19tYy5vIGVkYWNfZGV2aWNlLm8gZWRhY19tY19zeXNmcy5vCiBlZGFjX2NvcmUteQkrPSBlZGFjX21vZHVsZS5vIGVkYWNfZGV2aWNlX3N5c2ZzLm8KIAogaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggYmJkNjUxNC4uMTc2MzhkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC02OTIsOSArNjkyLDE5IEBACiB7CiAJZWRhY19kYmcoMSwgIkYyeCVkOTAgKERSQU0gQ2ZnIExvdyk6IDB4JTA4eFxuIiwgY2hhbiwgZGNscik7CiAKLQllZGFjX2RiZygxLCAiICBESU1NIHR5cGU6ICVzYnVmZmVyZWQ7IGFsbCBESU1NcyBzdXBwb3J0IEVDQzogJXNcbiIsCi0JCSAoZGNsciAmIEJJVCgxNikpID8gICJ1biIgOiAiIiwKLQkJIChkY2xyICYgQklUKDE5KSkgPyAieWVzIiA6ICJubyIpOworCWlmIChwdnQtPmRyYW1fdHlwZSA9PSBNRU1fTFJERFIzKSB7CisJCXUzMiBkY3NtID0gcHZ0LT5jc2Vsc1tjaGFuXS5jc21hc2tzWzBdOworCQkvKgorCQkgKiBJdCdzIGFzc3VtZWQgYWxsIExSRElNTXMgaW4gYSBEQ1QgYXJlIGdvaW5nIHRvIGJlIG9mCisJCSAqIHNhbWUgJ3R5cGUnIHVudGlsIHByb3ZlbiBvdGhlcndpc2UuIFNvLCB1c2UgYSBjcworCQkgKiB2YWx1ZSBvZiAnMCcgaGVyZSB0byBnZXQgZGNzbSB2YWx1ZS4KKwkJICovCisJCWVkYWNfZGJnKDEsICIgTFJESU1NICVkeCByYW5rIG11bHRpcGx5XG4iLCAoZGNzbSAmIDB4MykpOworCX0KKworCWVkYWNfZGJnKDEsICJBbGwgRElNTXMgc3VwcG9ydCBFQ0M6JXNcbiIsCisJCSAgICAoZGNsciAmIEJJVCgxOSkpID8gInllcyIgOiAibm8iKTsKKwogCiAJZWRhY19kYmcoMSwgIiAgUEFSL0VSUiBwYXJpdHk6ICVzXG4iLAogCQkgKGRjbHIgJiBCSVQoOCkpID8gICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwpAQCAtNzU2LDcgKzc2Niw3IEBACiAJaWYgKHB2dC0+ZmFtID09IDB4ZiAmJiBwdnQtPmV4dF9tb2RlbCA8IEs4X1JFVl9GKSB7CiAJCXB2dC0+Y3NlbHNbMF0uYl9jbnQgPSBwdnQtPmNzZWxzWzFdLmJfY250ID0gODsKIAkJcHZ0LT5jc2Vsc1swXS5tX2NudCA9IHB2dC0+Y3NlbHNbMV0ubV9jbnQgPSA4OwotCX0gZWxzZSBpZiAocHZ0LT5mYW0gPT0gMHgxNSAmJiBwdnQtPm1vZGVsID49IDB4MzApIHsKKwl9IGVsc2UgaWYgKHB2dC0+ZmFtID09IDB4MTUgJiYgcHZ0LT5tb2RlbCA9PSAweDMwKSB7CiAJCXB2dC0+Y3NlbHNbMF0uYl9jbnQgPSBwdnQtPmNzZWxzWzFdLmJfY250ID0gNDsKIAkJcHZ0LT5jc2Vsc1swXS5tX2NudCA9IHB2dC0+Y3NlbHNbMV0ubV9jbnQgPSAyOwogCX0gZWxzZSB7CkBAIC04MTMsMjUgKzgyMyw2MyBAQAogCX0KIH0KIAotc3RhdGljIGVudW0gbWVtX3R5cGUgZGV0ZXJtaW5lX21lbW9yeV90eXBlKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgaW50IGNzKQorc3RhdGljIHZvaWQgZGV0ZXJtaW5lX21lbW9yeV90eXBlKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKIHsKLQllbnVtIG1lbV90eXBlIHR5cGU7CisJdTMyIGRyYW1fY3RybCwgZGNzbTsKIAotCS8qIEYxNWggc3VwcG9ydHMgb25seSBERFIzICovCi0JaWYgKHB2dC0+ZmFtID49IDB4MTUpCi0JCXR5cGUgPSAocHZ0LT5kY2xyMCAmIEJJVCgxNikpID8JTUVNX0REUjMgOiBNRU1fUkREUjM7Ci0JZWxzZSBpZiAocHZ0LT5mYW0gPT0gMHgxMCB8fCBwdnQtPmV4dF9tb2RlbCA+PSBLOF9SRVZfRikgeworCXN3aXRjaCAocHZ0LT5mYW0pIHsKKwljYXNlIDB4ZjoKKwkJaWYgKHB2dC0+ZXh0X21vZGVsID49IEs4X1JFVl9GKQorCQkJZ290byBkZHIzOworCisJCXB2dC0+ZHJhbV90eXBlID0gKHB2dC0+ZGNscjAgJiBCSVQoMTgpKSA/IE1FTV9ERFIgOiBNRU1fUkREUjsKKwkJcmV0dXJuOworCisJY2FzZSAweDEwOgogCQlpZiAocHZ0LT5kY2hyMCAmIEREUjNfTU9ERSkKLQkJCXR5cGUgPSAocHZ0LT5kY2xyMCAmIEJJVCgxNikpID8JTUVNX0REUjMgOiBNRU1fUkREUjM7CisJCQlnb3RvIGRkcjM7CisKKwkJcHZ0LT5kcmFtX3R5cGUgPSAocHZ0LT5kY2xyMCAmIEJJVCgxNikpID8gTUVNX0REUjIgOiBNRU1fUkREUjI7CisJCXJldHVybjsKKworCWNhc2UgMHgxNToKKwkJaWYgKHB2dC0+bW9kZWwgPCAweDYwKQorCQkJZ290byBkZHIzOworCisJCS8qCisJCSAqIE1vZGVsIDB4NjBoIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmc6CisJCSAqCisJCSAqIFdlIHVzZSBhIENoaXAgU2VsZWN0IHZhbHVlIG9mICcwJyB0byBvYnRhaW4gZGNzbS4KKwkJICogVGhlb3JldGljYWxseSwgaXQgaXMgcG9zc2libGUgdG8gcG9wdWxhdGUgTFJESU1NcyBvZiBkaWZmZXJlbnQKKwkJICogJ1JhbmsnIHZhbHVlIG9uIGEgRENULiBCdXQgdGhpcyBpcyBub3QgdGhlIGNvbW1vbiBjYXNlLiBTbywKKwkJICogaXQncyByZWFzb25hYmxlIHRvIGFzc3VtZSBhbGwgRElNTXMgYXJlIGdvaW5nIHRvIGJlIG9mIHNhbWUKKwkJICogJ3R5cGUnIHVudGlsIHByb3ZlbiBvdGhlcndpc2UuCisJCSAqLworCQlhbWQ2NF9yZWFkX2RjdF9wY2lfY2ZnKHB2dCwgMCwgRFJBTV9DT05UUk9MLCAmZHJhbV9jdHJsKTsKKwkJZGNzbSA9IHB2dC0+Y3NlbHNbMF0uY3NtYXNrc1swXTsKKworCQlpZiAoKChkcmFtX2N0cmwgPj4gOCkgJiAweDcpID09IDB4MikKKwkJCXB2dC0+ZHJhbV90eXBlID0gTUVNX0REUjQ7CisJCWVsc2UgaWYgKHB2dC0+ZGNscjAgJiBCSVQoMTYpKQorCQkJcHZ0LT5kcmFtX3R5cGUgPSBNRU1fRERSMzsKKwkJZWxzZSBpZiAoZGNzbSAmIDB4MykKKwkJCXB2dC0+ZHJhbV90eXBlID0gTUVNX0xSRERSMzsKIAkJZWxzZQotCQkJdHlwZSA9IChwdnQtPmRjbHIwICYgQklUKDE2KSkgPyBNRU1fRERSMiA6IE1FTV9SRERSMjsKLQl9IGVsc2UgewotCQl0eXBlID0gKHB2dC0+ZGNscjAgJiBCSVQoMTgpKSA/IE1FTV9ERFIgOiBNRU1fUkREUjsKKwkJCXB2dC0+ZHJhbV90eXBlID0gTUVNX1JERFIzOworCisJCXJldHVybjsKKworCWNhc2UgMHgxNjoKKwkJZ290byBkZHIzOworCisJZGVmYXVsdDoKKwkJV0FSTigxLCBLRVJOX0VSUiAiJXM6IEZhbWlseT8/PyAweCV4XG4iLCBfX2Z1bmNfXywgcHZ0LT5mYW0pOworCQlwdnQtPmRyYW1fdHlwZSA9IE1FTV9FTVBUWTsKIAl9CisJcmV0dXJuOwogCi0JYW1kNjRfaW5mbygiQ1MlZDogJXNcbiIsIGNzLCBlZGFjX21lbV90eXBlc1t0eXBlXSk7Ci0KLQlyZXR1cm4gdHlwZTsKK2RkcjM6CisJcHZ0LT5kcmFtX3R5cGUgPSAocHZ0LT5kY2xyMCAmIEJJVCgxNikpID8gTUVNX0REUjMgOiBNRU1fUkREUjM7CiB9CiAKIC8qIEdldCB0aGUgbnVtYmVyIG9mIERDVCBjaGFubmVscyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaXMgdXNpbmcuICovCkBAIC05NTgsOCArMTAwNiwxMiBAQAogCWlmIChXQVJOX09OKCFuYikpCiAJCXJldHVybjsKIAotCXBjaV9mdW5jID0gKHB2dC0+bW9kZWwgPT0gMHgzMCkgPyBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMQotCQkJCQk6IFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMTsKKwlpZiAocHZ0LT5tb2RlbCA9PSAweDYwKQorCQlwY2lfZnVuYyA9IFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0YxOworCWVsc2UgaWYgKHB2dC0+bW9kZWwgPT0gMHgzMCkKKwkJcGNpX2Z1bmMgPSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMTsKKwllbHNlCisJCXBjaV9mdW5jID0gUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YxOwogCiAJZjEgPSBwY2lfZ2V0X3JlbGF0ZWRfZnVuY3Rpb24obmItPm1pc2MtPnZlbmRvciwgcGNpX2Z1bmMsIG5iLT5taXNjKTsKIAlpZiAoV0FSTl9PTighZjEpKQpAQCAtMTA0OSw3ICsxMTAxLDcgQEAKIH0KIAogc3RhdGljIGludCBrOF9kYmFtX3RvX2NoaXBfc2VsZWN0KHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgdTggZGN0LAotCQkJCSAgdW5zaWduZWQgY3NfbW9kZSkKKwkJCQkgIHVuc2lnbmVkIGNzX21vZGUsIGludCBjc19tYXNrX25yKQogewogCXUzMiBkY2xyID0gZGN0ID8gcHZ0LT5kY2xyMSA6IHB2dC0+ZGNscjA7CiAKQEAgLTExNjcsOCArMTIxOSw0MyBAQAogCXJldHVybiBjc19zaXplOwogfQogCitzdGF0aWMgaW50IGRkcjNfbHJkaW1tX2NzX3NpemUodW5zaWduZWQgaSwgdW5zaWduZWQgcmFua19tdWx0aXBseSkKK3sKKwl1bnNpZ25lZCBzaGlmdCA9IDA7CisJaW50IGNzX3NpemUgPSAwOworCisJaWYgKGkgPCA0IHx8IGkgPT0gNikKKwkJY3Nfc2l6ZSA9IC0xOworCWVsc2UgaWYgKGkgPT0gMTIpCisJCXNoaWZ0ID0gNzsKKwllbHNlIGlmICghKGkgJiAweDEpKQorCQlzaGlmdCA9IGkgPj4gMTsKKwllbHNlCisJCXNoaWZ0ID0gKGkgKyAxKSA+PiAxOworCisJaWYgKGNzX3NpemUgIT0gLTEpCisJCWNzX3NpemUgPSByYW5rX211bHRpcGx5ICogKDEyOCA8PCBzaGlmdCk7CisKKwlyZXR1cm4gY3Nfc2l6ZTsKK30KKworc3RhdGljIGludCBkZHI0X2NzX3NpemUodW5zaWduZWQgaSkKK3sKKwlpbnQgY3Nfc2l6ZSA9IDA7CisKKwlpZiAoaSA9PSAwKQorCQljc19zaXplID0gLTE7CisJZWxzZSBpZiAoaSA9PSAxKQorCQljc19zaXplID0gMTAyNDsKKwllbHNlCisJCS8qIE1pbiBjc19zaXplID0gMUcgKi8KKwkJY3Nfc2l6ZSA9IDEwMjQgKiAoMSA8PCAoaSA+PiAxKSk7CisKKwlyZXR1cm4gY3Nfc2l6ZTsKK30KKwogc3RhdGljIGludCBmMTBfZGJhbV90b19jaGlwX3NlbGVjdChzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIHU4IGRjdCwKLQkJCQkgICB1bnNpZ25lZCBjc19tb2RlKQorCQkJCSAgIHVuc2lnbmVkIGNzX21vZGUsIGludCBjc19tYXNrX25yKQogewogCXUzMiBkY2xyID0gZGN0ID8gcHZ0LT5kY2xyMSA6IHB2dC0+ZGNscjA7CiAKQEAgLTExODQsMTggKzEyNzEsNDkgQEAKICAqIEYxNWggc3VwcG9ydHMgb25seSA2NGJpdCBEQ1QgaW50ZXJmYWNlcwogICovCiBzdGF0aWMgaW50IGYxNV9kYmFtX3RvX2NoaXBfc2VsZWN0KHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgdTggZGN0LAotCQkJCSAgIHVuc2lnbmVkIGNzX21vZGUpCisJCQkJICAgdW5zaWduZWQgY3NfbW9kZSwgaW50IGNzX21hc2tfbnIpCiB7CiAJV0FSTl9PTihjc19tb2RlID4gMTIpOwogCiAJcmV0dXJuIGRkcjNfY3Nfc2l6ZShjc19tb2RlLCBmYWxzZSk7CiB9CiAKKy8qIEYxNWggTTYwaCBzdXBwb3J0cyBERFI0IG1hcHBpbmcgYXMgd2VsbC4uICovCitzdGF0aWMgaW50IGYxNV9tNjBoX2RiYW1fdG9fY2hpcF9zZWxlY3Qoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1OCBkY3QsCisJCQkJCXVuc2lnbmVkIGNzX21vZGUsIGludCBjc19tYXNrX25yKQoreworCWludCBjc19zaXplOworCXUzMiBkY3NtID0gcHZ0LT5jc2Vsc1tkY3RdLmNzbWFza3NbY3NfbWFza19ucl07CisKKwlXQVJOX09OKGNzX21vZGUgPiAxMik7CisKKwlpZiAocHZ0LT5kcmFtX3R5cGUgPT0gTUVNX0REUjQpIHsKKwkJaWYgKGNzX21vZGUgPiA5KQorCQkJcmV0dXJuIC0xOworCisJCWNzX3NpemUgPSBkZHI0X2NzX3NpemUoY3NfbW9kZSk7CisJfSBlbHNlIGlmIChwdnQtPmRyYW1fdHlwZSA9PSBNRU1fTFJERFIzKSB7CisJCXVuc2lnbmVkIHJhbmtfbXVsdGlwbHkgPSBkY3NtICYgMHhmOworCisJCWlmIChyYW5rX211bHRpcGx5ID09IDMpCisJCQlyYW5rX211bHRpcGx5ID0gNDsKKwkJY3Nfc2l6ZSA9IGRkcjNfbHJkaW1tX2NzX3NpemUoY3NfbW9kZSwgcmFua19tdWx0aXBseSk7CisJfSBlbHNlIHsKKwkJLyogTWluaW11bSBjcyBzaXplIGlzIDUxMm1iIGZvciBGMTVoTTYwaCovCisJCWlmIChjc19tb2RlID09IDB4MSkKKwkJCXJldHVybiAtMTsKKworCQljc19zaXplID0gZGRyM19jc19zaXplKGNzX21vZGUsIGZhbHNlKTsKKwl9CisKKwlyZXR1cm4gY3Nfc2l6ZTsKK30KKwogLyoKICAqIEYxNmggYW5kIEYxNWggbW9kZWwgMzBoIGhhdmUgb25seSBsaW1pdGVkIGNzX21vZGVzLgogICovCiBzdGF0aWMgaW50IGYxNl9kYmFtX3RvX2NoaXBfc2VsZWN0KHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgdTggZGN0LAotCQkJCXVuc2lnbmVkIGNzX21vZGUpCisJCQkJdW5zaWduZWQgY3NfbW9kZSwgaW50IGNzX21hc2tfbnIpCiB7CiAJV0FSTl9PTihjc19tb2RlID4gMTIpOwogCkBAIC0xNzU3LDEzICsxODc1LDIwIEBACiAKIAkJc2l6ZTAgPSAwOwogCQlpZiAoZGNzYltkaW1tKjJdICYgRENTQl9DU19FTkFCTEUpCisJCQkvKiBGb3IgZjE1bTYwaCwgbmVlZCBtdWx0aXBsaWVyIGZvciBMUkRJTU0gY3Nfc2l6ZQorCQkJICogY2FsY3VsYXRpb24uIFdlIHBhc3MgJ2RpbW0nIHZhbHVlIHRvIHRoZSBkYmFtX3RvX2NzCisJCQkgKiBtYXBwZXIgc28gd2UgY2FuIGZpbmQgdGhlIG11bHRpcGxpZXIgZnJvbSB0aGUKKwkJCSAqIGNvcnJlc3BvbmRpbmcgRENTTS4KKwkJCSAqLwogCQkJc2l6ZTAgPSBwdnQtPm9wcy0+ZGJhbV90b19jcyhwdnQsIGN0cmwsCi0JCQkJCQkgICAgIERCQU1fRElNTShkaW1tLCBkYmFtKSk7CisJCQkJCQkgICAgIERCQU1fRElNTShkaW1tLCBkYmFtKSwKKwkJCQkJCSAgICAgZGltbSk7CiAKIAkJc2l6ZTEgPSAwOwogCQlpZiAoZGNzYltkaW1tKjIgKyAxXSAmIERDU0JfQ1NfRU5BQkxFKQogCQkJc2l6ZTEgPSBwdnQtPm9wcy0+ZGJhbV90b19jcyhwdnQsIGN0cmwsCi0JCQkJCQkgICAgIERCQU1fRElNTShkaW1tLCBkYmFtKSk7CisJCQkJCQkgICAgIERCQU1fRElNTShkaW1tLCBkYmFtKSwKKwkJCQkJCSAgICAgZGltbSk7CiAKIAkJYW1kNjRfaW5mbyhFREFDX01DICI6ICVkOiAlNWRNQiAlZDogJTVkTUJcbiIsCiAJCQkJZGltbSAqIDIsICAgICBzaXplMCwKQEAgLTE4MTIsNiArMTkzNywxNiBAQAogCQkJLmRiYW1fdG9fY3MJCT0gZjE2X2RiYW1fdG9fY2hpcF9zZWxlY3QsCiAJCX0KIAl9LAorCVtGMTVfTTYwSF9DUFVTXSA9IHsKKwkJLmN0bF9uYW1lID0gIkYxNWhfTTYwaCIsCisJCS5mMV9pZCA9IFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0YxLAorCQkuZjNfaWQgPSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GMywKKwkJLm9wcyA9IHsKKwkJCS5lYXJseV9jaGFubmVsX2NvdW50CT0gZjF4X2Vhcmx5X2NoYW5uZWxfY291bnQsCisJCQkubWFwX3N5c2FkZHJfdG9fY3Nyb3cJPSBmMXhfbWFwX3N5c2FkZHJfdG9fY3Nyb3csCisJCQkuZGJhbV90b19jcwkJPSBmMTVfbTYwaF9kYmFtX3RvX2NoaXBfc2VsZWN0LAorCQl9CisJfSwKIAlbRjE2X0NQVVNdID0gewogCQkuY3RsX25hbWUgPSAiRjE2aCIsCiAJCS5mMV9pZCA9IFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9OQl9GMSwKQEAgLTIxNzUsNiArMjMxMCw4IEBACiAJfQogCiAJcHZ0LT5lY2Nfc3ltX3N6ID0gNDsKKwlkZXRlcm1pbmVfbWVtb3J5X3R5cGUocHZ0KTsKKwllZGFjX2RiZygxLCAiICBESU1NIHR5cGU6ICVzXG4iLCBlZGFjX21lbV90eXBlc1twdnQtPmRyYW1fdHlwZV0pOwogCiAJaWYgKHB2dC0+ZmFtID49IDB4MTApIHsKIAkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjMsIEVYVF9OQl9NQ0FfQ0ZHLCAmdG1wKTsKQEAgLTIyMzgsNyArMjM3NSw4IEBACiAJICovCiAJY3NfbW9kZSA9IERCQU1fRElNTShjc3Jvd19uciAvIDIsIGRiYW0pOwogCi0JbnJfcGFnZXMgPSBwdnQtPm9wcy0+ZGJhbV90b19jcyhwdnQsIGRjdCwgY3NfbW9kZSkgPDwgKDIwIC0gUEFHRV9TSElGVCk7CisJbnJfcGFnZXMgPSBwdnQtPm9wcy0+ZGJhbV90b19jcyhwdnQsIGRjdCwgY3NfbW9kZSwgKGNzcm93X25yIC8gMikpCisJCQkJCQkJICAgPDwgKDIwIC0gUEFHRV9TSElGVCk7CiAKIAllZGFjX2RiZygwLCAiY3Nyb3c6ICVkLCBjaGFubmVsOiAlZCwgREJBTSBpZHg6ICVkXG4iLAogCQkgICAgY3Nyb3dfbnIsIGRjdCwgIGNzX21vZGUpOwpAQCAtMjI1Nyw3ICsyMzk1LDYgQEAKIAlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3Nyb3c7CiAJc3RydWN0IGRpbW1faW5mbyAqZGltbTsKIAllbnVtIGVkYWNfdHlwZSBlZGFjX21vZGU7Ci0JZW51bSBtZW1fdHlwZSBtdHlwZTsKIAlpbnQgaSwgaiwgZW1wdHkgPSAxOwogCWludCBucl9wYWdlcyA9IDA7CiAJdTMyIHZhbDsKQEAgLTIzMDIsOCArMjQzOSw2IEBACiAJCQlucl9wYWdlcyArPSByb3dfZGN0MV9wYWdlczsKIAkJfQogCi0JCW10eXBlID0gZGV0ZXJtaW5lX21lbW9yeV90eXBlKHB2dCwgaSk7Ci0KIAkJZWRhY19kYmcoMSwgIlRvdGFsIGNzcm93JWQgcGFnZXM6ICV1XG4iLCBpLCBucl9wYWdlcyk7CiAKIAkJLyoKQEAgLTIzMTcsNyArMjQ1Miw3IEBACiAKIAkJZm9yIChqID0gMDsgaiA8IHB2dC0+Y2hhbm5lbF9jb3VudDsgaisrKSB7CiAJCQlkaW1tID0gY3Nyb3ctPmNoYW5uZWxzW2pdLT5kaW1tOwotCQkJZGltbS0+bXR5cGUgPSBtdHlwZTsKKwkJCWRpbW0tPm10eXBlID0gcHZ0LT5kcmFtX3R5cGU7CiAJCQlkaW1tLT5lZGFjX21vZGUgPSBlZGFjX21vZGU7CiAJCX0KIAl9CkBAIC0yNjA0LDYgKzI3MzksMTAgQEAKIAkJCWZhbV90eXBlID0gJmZhbWlseV90eXBlc1tGMTVfTTMwSF9DUFVTXTsKIAkJCXB2dC0+b3BzID0gJmZhbWlseV90eXBlc1tGMTVfTTMwSF9DUFVTXS5vcHM7CiAJCQlicmVhazsKKwkJfSBlbHNlIGlmIChwdnQtPm1vZGVsID09IDB4NjApIHsKKwkJCWZhbV90eXBlID0gJmZhbWlseV90eXBlc1tGMTVfTTYwSF9DUFVTXTsKKwkJCXB2dC0+b3BzID0gJmZhbWlseV90eXBlc1tGMTVfTTYwSF9DUFVTXS5vcHM7CisJCQlicmVhazsKIAkJfQogCiAJCWZhbV90eXBlCT0gJmZhbWlseV90eXBlc1tGMTVfQ1BVU107CkBAIC0yODI4LDU1ICsyOTY3LDEzIEBACiAgKiBpbnF1aXJ5IHRoaXMgdGFibGUgdG8gc2VlIGlmIHRoaXMgZHJpdmVyIGlzIGZvciBhIGdpdmVuIGRldmljZSBmb3VuZC4KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFtZDY0X3BjaV90YWJsZVtdID0gewotCXsKLQkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0FNRF9LOF9OQl9NRU1DVEwsCi0JCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKLQkJLmNsYXNzCQk9IDAsCi0JCS5jbGFzc19tYXNrCT0gMCwKLQl9LAotCXsKLQkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0FNRF8xMEhfTkJfRFJBTSwKLQkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCi0JCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAotCQkuY2xhc3MJCT0gMCwKLQkJLmNsYXNzX21hc2sJPSAwLAotCX0sCi0JewotCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQU1ELAotCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMiwKLQkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCi0JCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAotCQkuY2xhc3MJCT0gMCwKLQkJLmNsYXNzX21hc2sJPSAwLAotCX0sCi0JewotCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQU1ELAotCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0YyLAotCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCi0JCS5jbGFzcwkJPSAwLAotCQkuY2xhc3NfbWFzawk9IDAsCi0JfSwKLQl7Ci0JCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9BTUQsCi0JCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfMTZIX05CX0YyLAotCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCi0JCS5jbGFzcwkJPSAwLAotCQkuY2xhc3NfbWFzawk9IDAsCi0JfSwKLQl7Ci0JCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9BTUQsCi0JCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfMTZIX00zMEhfTkJfRjIsCi0JCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKLQkJLmNsYXNzCQk9IDAsCi0JCS5jbGFzc19tYXNrCT0gMCwKLQl9LAotCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0s4X05CX01FTUNUTCkgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTBIX05CX0RSQU0pIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMikgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjIpIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0YyKSB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTkJfRjIpIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9NMzBIX05CX0YyKSB9LAogCXswLCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZDY0X3BjaV90YWJsZSk7CkBAIC0yOTM4LDYgKzMwMzUsMTEgQEAKIAkJZ290byBlcnJfbm9faW5zdGFuY2VzOwogCiAJc2V0dXBfcGNpX2RldmljZSgpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWFtZDY0X2VycigiJXMgb24gMzItYml0IGlzIHVuc3VwcG9ydGVkLiBVU0UgQVQgWU9VUiBPV04gUklTSyFcbiIsIEVEQUNfTU9EX1NUUik7CisjZW5kaWYKKwogCXJldHVybiAwOwogCiBlcnJfbm9faW5zdGFuY2VzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKaW5kZXggNTVmYjU5NC4uZDg0NjhjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAorKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCkBAIC0xNjIsMTAgKzE2MiwxMiBAQAogLyoKICAqIFBDSS1kZWZpbmVkIGNvbmZpZ3VyYXRpb24gc3BhY2UgcmVnaXN0ZXJzCiAgKi8KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjEgMHgxNDFiCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0YyIDB4MTQxYwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjEJMHgxNjAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMgkweDE2MDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjEgMHgxNDFiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0YyIDB4MTQxYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GMSAweDE1NzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjIgMHgxNTcyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9OQl9GMQkweDE1MzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTZIX05CX0YyCTB4MTUzMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTTMwSF9OQl9GMSAweDE1ODEKQEAgLTIyMSw2ICsyMjMsOCBAQAogCiAjZGVmaW5lIGNzcm93X2VuYWJsZWQoaSwgZGN0LCBwdnQpCSgocHZ0KS0+Y3NlbHNbKGRjdCldLmNzYmFzZXNbKGkpXSAmIERDU0JfQ1NfRU5BQkxFKQogCisjZGVmaW5lIERSQU1fQ09OVFJPTAkJCTB4NzgKKwogI2RlZmluZSBEQkFNMAkJCQkweDgwCiAjZGVmaW5lIERCQU0xCQkJCTB4MTgwCiAKQEAgLTMwMSw2ICszMDUsNyBAQAogCUYxMF9DUFVTLAogCUYxNV9DUFVTLAogCUYxNV9NMzBIX0NQVVMsCisJRjE1X002MEhfQ1BVUywKIAlGMTZfQ1BVUywKIAlGMTZfTTMwSF9DUFVTLAogCU5VTV9GQU1JTElFUywKQEAgLTM3OSw2ICszODQsOSBAQAogCiAJLyogcGxhY2UgdG8gc3RvcmUgZXJyb3IgaW5qZWN0aW9uIHBhcmFtZXRlcnMgcHJpb3IgdG8gaXNzdWUgKi8KIAlzdHJ1Y3QgZXJyb3JfaW5qZWN0aW9uIGluamVjdGlvbjsKKworCS8qIGNhY2hlIHRoZSBkcmFtX3R5cGUgKi8KKwllbnVtIG1lbV90eXBlIGRyYW1fdHlwZTsKIH07CiAKIGVudW0gZXJyX2NvZGVzIHsKQEAgLTQ4MCw3ICs0ODgsOCBAQAogCWludCAoKmVhcmx5X2NoYW5uZWxfY291bnQpCShzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpOwogCXZvaWQgKCptYXBfc3lzYWRkcl90b19jc3JvdykJKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgdTY0IHN5c19hZGRyLAogCQkJCQkgc3RydWN0IGVycl9pbmZvICopOwotCWludCAoKmRiYW1fdG9fY3MpCQkoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1OCBkY3QsIHVuc2lnbmVkIGNzX21vZGUpOworCWludCAoKmRiYW1fdG9fY3MpCQkoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1OCBkY3QsCisJCQkJCSB1bnNpZ25lZCBjc19tb2RlLCBpbnQgY3NfbWFza19ucik7CiB9OwogCiBzdHJ1Y3QgYW1kNjRfZmFtaWx5X3R5cGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfbWMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKaW5kZXggYzM4OTNiMC4uMTc0NzkwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfbWMuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19tYy5jCkBAIC0xMjUsMjcgKzEyNSwyNyBAQAogCiAjZW5kaWYJCQkJLyogQ09ORklHX0VEQUNfREVCVUcgKi8KIAotLyoKLSAqIGtlZXAgdGhvc2UgaW4gc3luYyB3aXRoIHRoZSBlbnVtIG1lbV90eXBlCi0gKi8KIGNvbnN0IGNoYXIgKiBjb25zdCBlZGFjX21lbV90eXBlc1tdID0gewotCSJFbXB0eSBjc3JvdyIsCi0JIlJlc2VydmVkIGNzcm93IHR5cGUiLAotCSJVbmtub3duIGNzcm93IHR5cGUiLAotCSJGYXN0IHBhZ2UgbW9kZSBSQU0iLAotCSJFeHRlbmRlZCBkYXRhIG91dCBSQU0iLAotCSJCdXJzdCBFeHRlbmRlZCBkYXRhIG91dCBSQU0iLAotCSJTaW5nbGUgZGF0YSByYXRlIFNEUkFNIiwKLQkiUmVnaXN0ZXJlZCBzaW5nbGUgZGF0YSByYXRlIFNEUkFNIiwKLQkiRG91YmxlIGRhdGEgcmF0ZSBTRFJBTSIsCi0JIlJlZ2lzdGVyZWQgRG91YmxlIGRhdGEgcmF0ZSBTRFJBTSIsCi0JIlJhbWJ1cyBEUkFNIiwKLQkiVW5idWZmZXJlZCBERFIyIFJBTSIsCi0JIkZ1bGx5IGJ1ZmZlcmVkIEREUjIiLAotCSJSZWdpc3RlcmVkIEREUjIgUkFNIiwKLQkiUmFtYnVzIFhEUiIsCi0JIlVuYnVmZmVyZWQgRERSMyBSQU0iLAotCSJSZWdpc3RlcmVkIEREUjMgUkFNIiwKKwlbTUVNX0VNUFRZXQk9ICJFbXB0eSBjc3JvdyIsCisJW01FTV9SRVNFUlZFRF0JPSAiUmVzZXJ2ZWQgY3Nyb3cgdHlwZSIsCisJW01FTV9VTktOT1dOXQk9ICJVbmtub3duIGNzcm93IHR5cGUiLAorCVtNRU1fRlBNXQk9ICJGYXN0IHBhZ2UgbW9kZSBSQU0iLAorCVtNRU1fRURPXQk9ICJFeHRlbmRlZCBkYXRhIG91dCBSQU0iLAorCVtNRU1fQkVET10JPSAiQnVyc3QgRXh0ZW5kZWQgZGF0YSBvdXQgUkFNIiwKKwlbTUVNX1NEUl0JPSAiU2luZ2xlIGRhdGEgcmF0ZSBTRFJBTSIsCisJW01FTV9SRFJdCT0gIlJlZ2lzdGVyZWQgc2luZ2xlIGRhdGEgcmF0ZSBTRFJBTSIsCisJW01FTV9ERFJdCT0gIkRvdWJsZSBkYXRhIHJhdGUgU0RSQU0iLAorCVtNRU1fUkREUl0JPSAiUmVnaXN0ZXJlZCBEb3VibGUgZGF0YSByYXRlIFNEUkFNIiwKKwlbTUVNX1JNQlNdCT0gIlJhbWJ1cyBEUkFNIiwKKwlbTUVNX0REUjJdCT0gIlVuYnVmZmVyZWQgRERSMiBSQU0iLAorCVtNRU1fRkJfRERSMl0JPSAiRnVsbHkgYnVmZmVyZWQgRERSMiIsCisJW01FTV9SRERSMl0JPSAiUmVnaXN0ZXJlZCBERFIyIFJBTSIsCisJW01FTV9YRFJdCT0gIlJhbWJ1cyBYRFIiLAorCVtNRU1fRERSM10JPSAiVW5idWZmZXJlZCBERFIzIFJBTSIsCisJW01FTV9SRERSM10JPSAiUmVnaXN0ZXJlZCBERFIzIFJBTSIsCisJW01FTV9MUkREUjNdCT0gIkxvYWQtUmVkdWNlZCBERFIzIFJBTSIsCisJW01FTV9ERFI0XQk9ICJVbmJ1ZmZlcmVkIEREUjQgUkFNIiwKKwlbTUVNX1JERFI0XQk9ICJSZWdpc3RlcmVkIEREUjQgUkFNIiwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChlZGFjX21lbV90eXBlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMKaW5kZXggZTg2NThlNC4uMjRkODc3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMKQEAgLTE0LDkgKzE0LDYgQEAKICNpbmNsdWRlICJlZGFjX2NvcmUuaCIKICNpbmNsdWRlICJlZGFjX21vZHVsZS5oIgogCi0vKiBUdXJuIG9mZiB0aGlzIHdob2xlIGZlYXR1cmUgaWYgUENJIGlzIG5vdCBjb25maWd1cmVkICovCi0jaWZkZWYgQ09ORklHX1BDSQotCiAjZGVmaW5lIEVEQUNfUENJX1NZTUxJTksJImRldmljZSIKIAogLyogZGF0YSB2YXJpYWJsZXMgZXhwb3J0ZWQgdmlhIHN5c2ZzICovCkBAIC03NjEsNSArNzU4LDMgQEAKIG1vZHVsZV9wYXJhbShlZGFjX3BjaV9wYW5pY19vbl9wZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZWRhY19wY2lfcGFuaWNfb25fcGUsCiAJCSAiUGFuaWMgb24gUENJIEJ1cyBQYXJpdHkgZXJyb3I6IDA9b2ZmIDE9b24iKTsKLQotI2VuZGlmCQkJCS8qIENPTkZJR19QQ0kgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9naGVzX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9naGVzX2VkYWMuYwppbmRleCA4Mzk5YjRlLi5iMjQ2ODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZ2hlc19lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2doZXNfZWRhYy5jCkBAIC00MTMsOCArNDEzLDggQEAKIAogCS8qIEdlbmVyYXRlIHRoZSB0cmFjZSBldmVudCAqLwogCWdyYWluX2JpdHMgPSBmbHNfbG9uZyhlLT5ncmFpbik7Ci0Jc3ByaW50ZihwdnQtPmRldGFpbF9sb2NhdGlvbiwgIkFQRUkgbG9jYXRpb246ICVzICVzIiwKLQkJZS0+bG9jYXRpb24sIGUtPm90aGVyX2RldGFpbCk7CisJc25wcmludGYocHZ0LT5kZXRhaWxfbG9jYXRpb24sIHNpemVvZihwdnQtPmRldGFpbF9sb2NhdGlvbiksCisJCSAiQVBFSSBsb2NhdGlvbjogJXMgJXMiLCBlLT5sb2NhdGlvbiwgZS0+b3RoZXJfZGV0YWlsKTsKIAl0cmFjZV9tY19ldmVudCh0eXBlLCBlLT5tc2csIGUtPmxhYmVsLCBlLT5lcnJvcl9jb3VudCwKIAkJICAgICAgIG1jaS0+bWNfaWR4LCBlLT50b3BfbGF5ZXIsIGUtPm1pZF9sYXllciwgZS0+bG93X2xheWVyLAogCQkgICAgICAgUEFHRVNfVE9fTWlCKGUtPnBhZ2VfZnJhbWVfbnVtYmVyKSB8IGUtPm9mZnNldF9pbl9wYWdlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2kzMDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pMzAwMF9lZGFjLmMKaW5kZXggY2QyOGI5Ni4uNWNiMzZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2kzMDAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTMwMDBfZWRhYy5jCkBAIC01NDIsOCArNTQyLDcgQEAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmkzMDAwX2RyaXZlcik7CiAKIGZhaWwwOgotCWlmIChtY2lfcGRldikKLQkJcGNpX2Rldl9wdXQobWNpX3BkZXYpOworCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKIAogCXJldHVybiBwY2lfcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTMyMDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2kzMjAwX2VkYWMuYwppbmRleCBhYTk4YjEzLi40YWQwNjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTMyMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pMzIwMF9lZGFjLmMKQEAgLTUyMyw4ICs1MjMsNyBAQAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaTMyMDBfZHJpdmVyKTsKIAogZmFpbDA6Ci0JaWYgKG1jaV9wZGV2KQotCQlwY2lfZGV2X3B1dChtY2lfcGRldik7CisJcGNpX2Rldl9wdXQobWNpX3BkZXYpOwogCiAJcmV0dXJuIHBjaV9yYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYwppbmRleCBkNzMwZTI3Ni4uYjQ3MDVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYwpAQCAtNDU4LDggKzQ1OCw3IEBACiAJaWYgKCFpODI0NDNieGd4X3JlZ2lzdGVyZWQpCiAJCWk4MjQ0M2J4Z3hfZWRhY21jX3JlbW92ZV9vbmUobWNpX3BkZXYpOwogCi0JaWYgKG1jaV9wZGV2KQotCQlwY2lfZGV2X3B1dChtY2lfcGRldik7CisJcGNpX2Rldl9wdXQobWNpX3BkZXYpOwogfQogCiBtb2R1bGVfaW5pdChpODI0NDNieGd4X2VkYWNtY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmMgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZC5jCmluZGV4IGY3OGMxYzUuLjU4NTg2ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmMKKysrIGIvZHJpdmVycy9lZGFjL21jZV9hbWQuYwpAQCAtMTM4LDYgKzEzOCwxNSBAQAogCSJSZXRpcmUgc3RhdHVzIHF1ZXVlIgogfTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYzZfbWNlX2Rlc2NbXSA9IHsKKwkiSGFyZHdhcmUgQXNzZXJ0aW9uIiwKKwkiRnJlZSBMaXN0IiwKKwkiUGh5c2ljYWwgUmVnaXN0ZXIgRmlsZSIsCisJIlJldGlyZSBRdWV1ZSIsCisJIlNjaGVkdWxlciB0YWJsZSIsCisJIlN0YXR1cyBSZWdpc3RlciBGaWxlIiwKK307CisKIHN0YXRpYyBib29sIGYxMmhfbWMwX21jZSh1MTYgZWMsIHU4IHhlYykKIHsKIAlib29sIHJldCA9IGZhbHNlOwpAQCAtNDMyLDggKzQ0MSw4IEBACiAJCXByX2NvbnQoIjogJXMgZXJyb3IgaW4gdGhlIEwyIGNhY2hlIHRhZ3MuXG4iLCBSNF9NU0coZWMpKTsKIAllbHNlIGlmICh4ZWMgPT0gMHgwKSB7CiAJCWlmIChUTEJfRVJST1IoZWMpKQotCQkJcHJfY29udCgiOiAlcyBlcnJvciBpbiBhIFBhZ2UgRGVzY3JpcHRvciBDYWNoZSBvciAiCi0JCQkJIkd1ZXN0IFRMQi5cbiIsIFRUX01TRyhlYykpOworCQkJcHJfY29udCgiJXMgZXJyb3IgaW4gYSBQYWdlIERlc2NyaXB0b3IgQ2FjaGUgb3IgR3Vlc3QgVExCLlxuIiwKKwkJCQlUVF9NU0coZWMpKTsKIAkJZWxzZSBpZiAoQlVTX0VSUk9SKGVjKSkKIAkJCXByX2NvbnQoIjogJXMvRUNDIGVycm9yIGluIGRhdGEgcmVhZCBmcm9tIE5COiAlcy5cbiIsCiAJCQkJUjRfTVNHKGVjKSwgUFBfTVNHKGVjKSk7CkBAIC02NzIsMzggKzY4MSwxMCBAQAogCiAJcHJfZW1lcmcoSFdfRVJSICJNQzYgRXJyb3I6ICIpOwogCi0Jc3dpdGNoICh4ZWMpIHsKLQljYXNlIDB4MDoKLQkJcHJfY29udCgiSGFyZHdhcmUgQXNzZXJ0aW9uIik7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDE6Ci0JCXByX2NvbnQoIkZyZWUgTGlzdCIpOwotCQlicmVhazsKLQotCWNhc2UgMHgyOgotCQlwcl9jb250KCJQaHlzaWNhbCBSZWdpc3RlciBGaWxlIik7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDM6Ci0JCXByX2NvbnQoIlJldGlyZSBRdWV1ZSIpOwotCQlicmVhazsKLQotCWNhc2UgMHg0OgotCQlwcl9jb250KCJTY2hlZHVsZXIgdGFibGUiKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4NToKLQkJcHJfY29udCgiU3RhdHVzIFJlZ2lzdGVyIEZpbGUiKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgorCWlmICh4ZWMgPiAweDUpCiAJCWdvdG8gd3JvbmdfbWM2X21jZTsKLQkJYnJlYWs7Ci0JfQogCi0JcHJfY29udCgiIHBhcml0eSBlcnJvci5cbiIpOwotCisJcHJfY29udCgiJXMgcGFyaXR5IGVycm9yLlxuIiwgbWM2X21jZV9kZXNjW3hlY10pOwogCXJldHVybjsKIAogIHdyb25nX21jNl9tY2U6CkBAIC04MDAsNyArNzgxLDcgQEAKIAlwcl9jb250KCJdOiAweCUwMTZsbHhcbiIsIG0tPnN0YXR1cyk7CiAKIAlpZiAobS0+c3RhdHVzICYgTUNJX1NUQVRVU19BRERSVikKLQkJcHJfZW1lcmcoSFdfRVJSICJNQyVkX0FERFI6IDB4JTAxNmxseFxuIiwgbS0+YmFuaywgbS0+YWRkcik7CisJCXByX2VtZXJnKEhXX0VSUiAiTUMlZCBFcnJvciBBZGRyZXNzOiAweCUwMTZsbHhcbiIsIG0tPmJhbmssIG0tPmFkZHIpOwogCiAJaWYgKCFmYW1fb3BzKQogCQlnb3RvIGVycl9jb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21jZV9hbWQuaCBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmgKaW5kZXggNTFiN2UzYS4uYzIzNTlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21jZV9hbWQuaAorKysgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZC5oCkBAIC0zMiw5ICszMiw2IEBACiAjZGVmaW5lIFI0KHgpCQkJCSgoKHgpID4+IDQpICYgMHhmKQogI2RlZmluZSBSNF9NU0coeCkJCQkoKFI0KHgpIDwgOSkgPyAgcnJycl9tc2dzW1I0KHgpXSA6ICJXcm9uZyBSNCEiKQogCi0jZGVmaW5lIE1DSV9TVEFUVVNfREVGRVJSRUQJCUJJVF82NCg0NCkKLSNkZWZpbmUgTUNJX1NUQVRVU19QT0lTT04JCUJJVF82NCg0MykKLQogZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBwcF9tc2dzW107CiAKIGVudW0gdHRfaWRzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tY2VfYW1kX2luai5jIGIvZHJpdmVycy9lZGFjL21jZV9hbWRfaW5qLmMKaW5kZXggNWU0NmE5Zi4uMGJkOTFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21jZV9hbWRfaW5qLmMKKysrIGIvZHJpdmVycy9lZGFjL21jZV9hbWRfaW5qLmMKQEAgLTEsMTczICsxLDI2MiBAQAogLyoKLSAqIEEgc2ltcGxlIE1DRSBpbmplY3Rpb24gZmFjaWxpdHkgZm9yIHRlc3RpbmcgdGhlIE1DRSBkZWNvZGluZyBjb2RlLiBUaGlzCi0gKiBkcml2ZXIgc2hvdWxkIGJlIGJ1aWx0IGFzIG1vZHVsZSBzbyB0aGF0IGl0IGNhbiBiZSBsb2FkZWQgb24gcHJvZHVjdGlvbgotICoga2VybmVscyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAqIEEgc2ltcGxlIE1DRSBpbmplY3Rpb24gZmFjaWxpdHkgZm9yIHRlc3RpbmcgZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIFJBUworICogY29kZS4gVGhpcyBkcml2ZXIgc2hvdWxkIGJlIGJ1aWx0IGFzIG1vZHVsZSBzbyB0aGF0IGl0IGNhbiBiZSBsb2FkZWQKKyAqIG9uIHByb2R1Y3Rpb24ga2VybmVscyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KICAqCiAgKiBUaGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMi4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTA6ICBCb3Jpc2xhdiBQZXRrb3YgPGJwQGFsaWVuOC5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0xNDogIEJvcmlzbGF2IFBldGtvdiA8YnBAYWxpZW44LmRlPgogICoJCQlBZHZhbmNlZCBNaWNybyBEZXZpY2VzIEluYy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgogCiAjaW5jbHVkZSAibWNlX2FtZC5oIgogCi1zdHJ1Y3QgZWRhY19tY2VfYXR0ciB7Ci0Jc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwotCXNzaXplX3QgKCpzaG93KSAoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBlZGFjX21jZV9hdHRyICphdHRyLCBjaGFyICpidWYpOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBlZGFjX21jZV9hdHRyICphdHRyLAotCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLX07Ci0KLSNkZWZpbmUgRURBQ19NQ0VfQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCQkJXAotc3RhdGljIHN0cnVjdCBlZGFjX21jZV9hdHRyIG1jZV9hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQotCi1zdGF0aWMgc3RydWN0IGtvYmplY3QgKm1jZV9rb2JqOwotCiAvKgogICogQ29sbGVjdCBhbGwgdGhlIE1DaV9YWFggc2V0dGluZ3MKICAqLwogc3RhdGljIHN0cnVjdCBtY2UgaV9tY2U7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGZzX2luajsKIAotI2RlZmluZSBNQ0VfSU5KRUNUX1NUT1JFKHJlZykJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBlZGFjX2luamVjdF8jI3JlZyMjX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAkJXAotCQkJCQkgc3RydWN0IGVkYWNfbWNlX2F0dHIgKmF0dHIsCVwKLQkJCQkJIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBjb3VudClcCisjZGVmaW5lIE1DRV9JTkpFQ1RfU0VUKHJlZykJCQkJCQlcCitzdGF0aWMgaW50IGlual8jI3JlZyMjX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQkJCQlcCiB7CQkJCQkJCQkJXAotCWludCByZXQgPSAwOwkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyB2YWx1ZTsJCQkJCQlcCisJc3RydWN0IG1jZSAqbSA9IChzdHJ1Y3QgbWNlICopZGF0YTsJCQkJXAogCQkJCQkJCQkJXAotCXJldCA9IGtzdHJ0b3VsKGRhdGEsIDE2LCAmdmFsdWUpOwkJCQlcCi0JaWYgKHJldCA8IDApCQkJCQkJCVwKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3cml0aW5nIE1DRSAiICNyZWcgIiBmaWVsZC5cbiIpOwlcCi0JCQkJCQkJCQlcCi0JaV9tY2UucmVnID0gdmFsdWU7CQkJCQkJXAotCQkJCQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAorCW0tPnJlZyA9IHZhbDsJCQkJCQkJXAorCXJldHVybiAwOwkJCQkJCQlcCiB9CiAKLU1DRV9JTkpFQ1RfU1RPUkUoc3RhdHVzKTsKLU1DRV9JTkpFQ1RfU1RPUkUobWlzYyk7Ci1NQ0VfSU5KRUNUX1NUT1JFKGFkZHIpOworTUNFX0lOSkVDVF9TRVQoc3RhdHVzKTsKK01DRV9JTkpFQ1RfU0VUKG1pc2MpOworTUNFX0lOSkVDVF9TRVQoYWRkcik7CiAKLSNkZWZpbmUgTUNFX0lOSkVDVF9TSE9XKHJlZykJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBlZGFjX2luamVjdF8jI3JlZyMjX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCQlcCi0JCQkJCXN0cnVjdCBlZGFjX21jZV9hdHRyICphdHRyLAlcCi0JCQkJCWNoYXIgKmJ1ZikJCQlcCisjZGVmaW5lIE1DRV9JTkpFQ1RfR0VUKHJlZykJCQkJCQlcCitzdGF0aWMgaW50IGlual8jI3JlZyMjX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkJCQlcCiB7CQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAxNmxseFxuIiwgaV9tY2UucmVnKTsJCQlcCisJc3RydWN0IG1jZSAqbSA9IChzdHJ1Y3QgbWNlICopZGF0YTsJCQkJXAorCQkJCQkJCQkJXAorCSp2YWwgPSBtLT5yZWc7CQkJCQkJCVwKKwlyZXR1cm4gMDsJCQkJCQkJXAogfQogCi1NQ0VfSU5KRUNUX1NIT1coc3RhdHVzKTsKLU1DRV9JTkpFQ1RfU0hPVyhtaXNjKTsKLU1DRV9JTkpFQ1RfU0hPVyhhZGRyKTsKK01DRV9JTkpFQ1RfR0VUKHN0YXR1cyk7CitNQ0VfSU5KRUNUX0dFVChtaXNjKTsKK01DRV9JTkpFQ1RfR0VUKGFkZHIpOwogCi1FREFDX01DRV9BVFRSKHN0YXR1cywgMDY0NCwgZWRhY19pbmplY3Rfc3RhdHVzX3Nob3csIGVkYWNfaW5qZWN0X3N0YXR1c19zdG9yZSk7Ci1FREFDX01DRV9BVFRSKG1pc2MsIDA2NDQsIGVkYWNfaW5qZWN0X21pc2Nfc2hvdywgZWRhY19pbmplY3RfbWlzY19zdG9yZSk7Ci1FREFDX01DRV9BVFRSKGFkZHIsIDA2NDQsIGVkYWNfaW5qZWN0X2FkZHJfc2hvdywgZWRhY19pbmplY3RfYWRkcl9zdG9yZSk7CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShzdGF0dXNfZm9wcywgaW5qX3N0YXR1c19nZXQsIGlual9zdGF0dXNfc2V0LCAiJWxseFxuIik7CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShtaXNjX2ZvcHMsIGlual9taXNjX2dldCwgaW5qX21pc2Nfc2V0LCAiJWxseFxuIik7CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShhZGRyX2ZvcHMsIGlual9hZGRyX2dldCwgaW5qX2FkZHJfc2V0LCAiJWxseFxuIik7CisKKy8qCisgKiBDYWxsZXIgbmVlZHMgdG8gYmUgbWFrZSBzdXJlIHRoaXMgY3B1IGRvZXNuJ3QgZGlzYXBwZWFyCisgKiBmcm9tIHVuZGVyIHVzLCBpLmUuOiBnZXRfY3B1L3B1dF9jcHUuCisgKi8KK3N0YXRpYyBpbnQgdG9nZ2xlX2h3X21jZV9pbmplY3QodW5zaWduZWQgaW50IGNwdSwgYm9vbCBlbmFibGUpCit7CisJdTMyIGwsIGg7CisJaW50IGVycjsKKworCWVyciA9IHJkbXNyX29uX2NwdShjcHUsIE1TUl9LN19IV0NSLCAmbCwgJmgpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCIlczogZXJyb3IgcmVhZGluZyBIV0NSXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBlcnI7CisJfQorCisJZW5hYmxlID8gKGwgfD0gQklUKDE4KSkgOiAobCAmPSB+QklUKDE4KSk7CisKKwllcnIgPSB3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSzdfSFdDUiwgbCwgaCk7CisJaWYgKGVycikKKwkJcHJfZXJyKCIlczogZXJyb3Igd3JpdGluZyBIV0NSXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGZsYWdzX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3QgbWNlICptID0gKHN0cnVjdCBtY2UgKilkYXRhOworCisJKnZhbCA9IG0tPmluamVjdF9mbGFnczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsYWdzX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBtY2UgKm0gPSAoc3RydWN0IG1jZSAqKWRhdGE7CisKKwltLT5pbmplY3RfZmxhZ3MgPSAodTgpdmFsOworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShmbGFnc19mb3BzLCBmbGFnc19nZXQsIGZsYWdzX3NldCwgIiVsbHVcbiIpOworCisvKgorICogT24gd2hpY2ggQ1BVIHRvIGluamVjdD8KKyAqLworTUNFX0lOSkVDVF9HRVQoZXh0Y3B1KTsKKworc3RhdGljIGludCBpbmpfZXh0Y3B1X3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBtY2UgKm0gPSAoc3RydWN0IG1jZSAqKWRhdGE7CisKKwlpZiAodmFsID49IG5yX2NwdV9pZHMgfHwgIWNwdV9vbmxpbmUodmFsKSkgeworCQlwcl9lcnIoIiVzOiBJbnZhbGlkIENQVTogJWxsdVxuIiwgX19mdW5jX18sIHZhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltLT5leHRjcHUgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGV4dGNwdV9mb3BzLCBpbmpfZXh0Y3B1X2dldCwgaW5qX2V4dGNwdV9zZXQsICIlbGx1XG4iKTsKKworc3RhdGljIHZvaWQgdHJpZ2dlcl9tY2Uodm9pZCAqaW5mbykKK3sKKwlhc20gdm9sYXRpbGUoImludCAkMTgiKTsKK30KKworc3RhdGljIHZvaWQgZG9faW5qZWN0KHZvaWQpCit7CisJdTY0IG1jZ19zdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBjcHUgPSBpX21jZS5leHRjcHU7CisJdTggYiA9IGlfbWNlLmJhbms7CisKKwlpZiAoIShpX21jZS5pbmplY3RfZmxhZ3MgJiBNQ0pfRVhDRVBUSU9OKSkgeworCQlhbWRfZGVjb2RlX21jZShOVUxMLCAwLCAmaV9tY2UpOworCQlyZXR1cm47CisJfQorCisJZ2V0X29ubGluZV9jcHVzKCk7CisJaWYgKCFjcHVfb25saW5lKGNwdSkpCisJCWdvdG8gZXJyOworCisJLyogcHJlcCBNQ0UgZ2xvYmFsIHNldHRpbmdzIGZvciB0aGUgaW5qZWN0aW9uICovCisJbWNnX3N0YXR1cyA9IE1DR19TVEFUVVNfTUNJUCB8IE1DR19TVEFUVVNfRUlQVjsKKworCWlmICghKGlfbWNlLnN0YXR1cyAmIE1DSV9TVEFUVVNfUENDKSkKKwkJbWNnX3N0YXR1cyB8PSBNQ0dfU1RBVFVTX1JJUFY7CisKKwl0b2dnbGVfaHdfbWNlX2luamVjdChjcHUsIHRydWUpOworCisJd3Jtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfTUNHX1NUQVRVUywKKwkJICAgICAodTMyKW1jZ19zdGF0dXMsICh1MzIpKG1jZ19zdGF0dXMgPj4gMzIpKTsKKworCXdybXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX01DeF9TVEFUVVMoYiksCisJCSAgICAgKHUzMilpX21jZS5zdGF0dXMsICh1MzIpKGlfbWNlLnN0YXR1cyA+PiAzMikpOworCisJd3Jtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfTUN4X0FERFIoYiksCisJCSAgICAgKHUzMilpX21jZS5hZGRyLCAodTMyKShpX21jZS5hZGRyID4+IDMyKSk7CisKKwl3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9NQ3hfTUlTQyhiKSwKKwkJICAgICAodTMyKWlfbWNlLm1pc2MsICh1MzIpKGlfbWNlLm1pc2MgPj4gMzIpKTsKKworCXRvZ2dsZV9od19tY2VfaW5qZWN0KGNwdSwgZmFsc2UpOworCisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgdHJpZ2dlcl9tY2UsIE5VTEwsIDApOworCitlcnI6CisJcHV0X29ubGluZV9jcHVzKCk7CisKK30KIAogLyoKICAqIFRoaXMgZGVub3RlcyBpbnRvIHdoaWNoIGJhbmsgd2UncmUgaW5qZWN0aW5nIGFuZCB0cmlnZ2VycwogICogdGhlIGluamVjdGlvbiwgYXQgdGhlIHNhbWUgdGltZS4KICAqLwotc3RhdGljIHNzaXplX3QgZWRhY19pbmplY3RfYmFua19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgICBzdHJ1Y3QgZWRhY19tY2VfYXR0ciAqYXR0ciwKLQkJCQkgICAgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQpCitzdGF0aWMgaW50IGlual9iYW5rX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQogewotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJc3RydWN0IG1jZSAqbSA9IChzdHJ1Y3QgbWNlICopZGF0YTsKIAotCXJldCA9IGtzdHJ0b3VsKGRhdGEsIDEwLCAmdmFsdWUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBiYW5rIHZhbHVlIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh2YWx1ZSA+IDUpCi0JCWlmIChib290X2NwdV9kYXRhLng4NiAhPSAweDE1IHx8IHZhbHVlID4gNikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJOb24tZXhpc3RlbnQgTUNFIGJhbms6ICVsdVxuIiwgdmFsdWUpOworCWlmICh2YWwgPiA1KSB7CisJCWlmIChib290X2NwdV9kYXRhLng4NiAhPSAweDE1IHx8IHZhbCA+IDYpIHsKKwkJCXByX2VycigiTm9uLWV4aXN0ZW50IE1DRSBiYW5rOiAlbGx1XG4iLCB2YWwpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwl9CiAKLQlpX21jZS5iYW5rID0gdmFsdWU7CisJbS0+YmFuayA9IHZhbDsKKwlkb19pbmplY3QoKTsKIAotCWFtZF9kZWNvZGVfbWNlKE5VTEwsIDAsICZpX21jZSk7Ci0KLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGVkYWNfaW5qZWN0X2Jhbmtfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgIHN0cnVjdCBlZGFjX21jZV9hdHRyICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgaW50IGlual9iYW5rX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaV9tY2UuYmFuayk7CisJc3RydWN0IG1jZSAqbSA9IChzdHJ1Y3QgbWNlICopZGF0YTsKKworCSp2YWwgPSBtLT5iYW5rOworCXJldHVybiAwOwogfQogCi1FREFDX01DRV9BVFRSKGJhbmssIDA2NDQsIGVkYWNfaW5qZWN0X2Jhbmtfc2hvdywgZWRhY19pbmplY3RfYmFua19zdG9yZSk7CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShiYW5rX2ZvcHMsIGlual9iYW5rX2dldCwgaW5qX2Jhbmtfc2V0LCAiJWxsdVxuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgZWRhY19tY2VfYXR0ciAqc3lzZnNfYXR0cnNbXSA9IHsgJm1jZV9hdHRyX3N0YXR1cywgJm1jZV9hdHRyX21pc2MsCi0JCQkJCSAgICAgICAmbWNlX2F0dHJfYWRkciwgJm1jZV9hdHRyX2JhbmsKK3N0cnVjdCBkZnNfbm9kZSB7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7Cit9IGRmc19mbHNbXSA9IHsKKwl7IC5uYW1lID0gInN0YXR1cyIsCS5mb3BzID0gJnN0YXR1c19mb3BzIH0sCisJeyAubmFtZSA9ICJtaXNjIiwJLmZvcHMgPSAmbWlzY19mb3BzIH0sCisJeyAubmFtZSA9ICJhZGRyIiwJLmZvcHMgPSAmYWRkcl9mb3BzIH0sCisJeyAubmFtZSA9ICJiYW5rIiwJLmZvcHMgPSAmYmFua19mb3BzIH0sCisJeyAubmFtZSA9ICJmbGFncyIsCS5mb3BzID0gJmZsYWdzX2ZvcHMgfSwKKwl7IC5uYW1lID0gImNwdSIsCS5mb3BzID0gJmV4dGNwdV9mb3BzIH0sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBlZGFjX2luaXRfbWNlX2luamVjdCh2b2lkKQotewotCXN0cnVjdCBidXNfdHlwZSAqZWRhY19zdWJzeXMgPSBOVUxMOwotCWludCBpLCBlcnIgPSAwOwotCi0JZWRhY19zdWJzeXMgPSBlZGFjX2dldF9zeXNmc19zdWJzeXMoKTsKLQlpZiAoIWVkYWNfc3Vic3lzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1jZV9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgibWNlIiwgJmVkYWNfc3Vic3lzLT5kZXZfcm9vdC0+a29iaik7Ci0JaWYgKCFtY2Vfa29iaikgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIGEgbWNlIGtzZXQuXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfbWNlX2tvYmo7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3lzZnNfYXR0cnMpOyBpKyspIHsKLQkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUobWNlX2tvYmosICZzeXNmc19hdHRyc1tpXS0+YXR0cik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgY3JlYXRpbmcgJXMgaW4gc3lzZnMuXG4iLAotCQkJCQlzeXNmc19hdHRyc1tpXS0+YXR0ci5uYW1lKTsKLQkJCWdvdG8gZXJyX3N5c2ZzX2NyZWF0ZTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLQotZXJyX3N5c2ZzX2NyZWF0ZToKLQl3aGlsZSAoLS1pID49IDApCi0JCXN5c2ZzX3JlbW92ZV9maWxlKG1jZV9rb2JqLCAmc3lzZnNfYXR0cnNbaV0tPmF0dHIpOwotCi0Ja29iamVjdF9kZWwobWNlX2tvYmopOwotCi1lcnJfbWNlX2tvYmo6Ci0JZWRhY19wdXRfc3lzZnNfc3Vic3lzKCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZWRhY19leGl0X21jZV9pbmplY3Qodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbWNlX2luamVjdCh2b2lkKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3lzZnNfYXR0cnMpOyBpKyspCi0JCXN5c2ZzX3JlbW92ZV9maWxlKG1jZV9rb2JqLCAmc3lzZnNfYXR0cnNbaV0tPmF0dHIpOworCWRmc19pbmogPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm1jZS1pbmplY3QiLCBOVUxMKTsKKwlpZiAoIWRmc19pbmopCisJCXJldHVybiAtRUlOVkFMOwogCi0Ja29iamVjdF9kZWwobWNlX2tvYmopOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRmc19mbHMpOyBpKyspIHsKKwkJZGZzX2Zsc1tpXS5kID0gZGVidWdmc19jcmVhdGVfZmlsZShkZnNfZmxzW2ldLm5hbWUsCisJCQkJCQkgICAgU19JUlVTUiB8IFNfSVdVU1IsCisJCQkJCQkgICAgZGZzX2luaiwKKwkJCQkJCSAgICAmaV9tY2UsCisJCQkJCQkgICAgZGZzX2Zsc1tpXS5mb3BzKTsKIAotCWVkYWNfcHV0X3N5c2ZzX3N1YnN5cygpOworCQlpZiAoIWRmc19mbHNbaV0uZCkKKwkJCWdvdG8gZXJyX2Rmc19hZGQ7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9kZnNfYWRkOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJZGVidWdmc19yZW1vdmUoZGZzX2Zsc1tpXS5kKTsKKworCWRlYnVnZnNfcmVtb3ZlKGRmc19pbmopOworCWRmc19pbmogPSBOVUxMOworCisJcmV0dXJuIC1FTk9NRU07CiB9CiAKLW1vZHVsZV9pbml0KGVkYWNfaW5pdF9tY2VfaW5qZWN0KTsKLW1vZHVsZV9leGl0KGVkYWNfZXhpdF9tY2VfaW5qZWN0KTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X21jZV9pbmplY3Qodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRmc19mbHMpOyBpKyspCisJCWRlYnVnZnNfcmVtb3ZlKGRmc19mbHNbaV0uZCk7CisKKwltZW1zZXQoJmRmc19mbHMsIDAsIHNpemVvZihkZnNfZmxzKSk7CisKKwlkZWJ1Z2ZzX3JlbW92ZShkZnNfaW5qKTsKKwlkZnNfaW5qID0gTlVMTDsKK30KK21vZHVsZV9pbml0KGluaXRfbWNlX2luamVjdCk7Cittb2R1bGVfZXhpdChleGl0X21jZV9pbmplY3QpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJCb3Jpc2xhdiBQZXRrb3YgPGJwQGFsaWVuOC5kZT4iKTsKIE1PRFVMRV9BVVRIT1IoIkFNRCBJbmMuIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1DRSBpbmplY3Rpb24gZmFjaWxpdHkgZm9yIHRlc3RpbmcgTUNFIGRlY29kaW5nIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1DRSBpbmplY3Rpb24gZmFjaWxpdHkgZm9yIFJBUyB0ZXN0aW5nIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKaW5kZXggNTQyZmFkNy4uNjM2NmU4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJCXJlcyA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwKIAkJCQkgICAgICAgcGRhdGEtPmlycSwKIAkJCQkgICAgICAgbXY2NHg2MF9wY2lfaXNyLAotCQkJCSAgICAgICBJUlFGX0RJU0FCTEVELAorCQkJCSAgICAgICAwLAogCQkJCSAgICAgICAiW0VEQUNdIFBDSSBlcnIiLAogCQkJCSAgICAgICBwY2kpOwogCQlpZiAocmVzIDwgMCkgewpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJCXJlcyA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwKIAkJCQkgICAgICAgcGRhdGEtPmlycSwKIAkJCQkgICAgICAgbXY2NHg2MF9zcmFtX2lzciwKLQkJCQkgICAgICAgSVJRRl9ESVNBQkxFRCwKKwkJCQkgICAgICAgMCwKIAkJCQkgICAgICAgIltFREFDXSBTUkFNIGVyciIsCiAJCQkJICAgICAgIGVkYWNfZGV2KTsKIAkJaWYgKHJlcyA8IDApIHsKQEAgLTU0MCw3ICs1NDAsNyBAQAogCQlyZXMgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsCiAJCQkJICAgICAgIHBkYXRhLT5pcnEsCiAJCQkJICAgICAgIG12NjR4NjBfY3B1X2lzciwKLQkJCQkgICAgICAgSVJRRl9ESVNBQkxFRCwKKwkJCQkgICAgICAgMCwKIAkJCQkgICAgICAgIltFREFDXSBDUFUgZXJyIiwKIAkJCQkgICAgICAgZWRhY19kZXYpOwogCQlpZiAocmVzIDwgMCkgewpAQCAtODAwLDcgKzgwMCw3IEBACiAJCXJlcyA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwKIAkJCQkgICAgICAgcGRhdGEtPmlycSwKIAkJCQkgICAgICAgbXY2NHg2MF9tY19pc3IsCi0JCQkJICAgICAgIElSUUZfRElTQUJMRUQsCisJCQkJICAgICAgIDAsCiAJCQkJICAgICAgICJbRURBQ10gTUMgZXJyIiwKIAkJCQkgICAgICAgbWNpKTsKIAkJaWYgKHJlcyA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMKaW5kZXggMGYwNGQ1ZS4uNDE1OTM1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMKQEAgLTExMjAsNyArMTEyMCw3IEBACiAKIAlzdGF0dXMgPSByZXF1ZXN0X2lycShkZWRfaXJxLAogCQkJICAgICBwcGM0eHhfZWRhY19pc3IsCi0JCQkgICAgIElSUUZfRElTQUJMRUQsCisJCQkgICAgIDAsCiAJCQkgICAgICJbRURBQ10gTUMgRUNDREVEIiwKIAkJCSAgICAgbWNpKTsKIApAQCAtMTEzNCw3ICsxMTM0LDcgQEAKIAogCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHNlY19pcnEsCiAJCQkgICAgIHBwYzR4eF9lZGFjX2lzciwKLQkJCSAgICAgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICAgMCwKIAkJCSAgICAgIltFREFDXSBNQyBFQ0NTRUMiLAogCQkJICAgICBtY2kpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMveDM4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy94MzhfZWRhYy5jCmluZGV4IGU2NDRiNTIuLjdjNWNkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy94MzhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy94MzhfZWRhYy5jCkBAIC01MDAsOCArNTAwLDcgQEAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJngzOF9kcml2ZXIpOwogCiBmYWlsMDoKLQlpZiAobWNpX3BkZXYpCi0JCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKKwlwY2lfZGV2X3B1dChtY2lfcGRldik7CiAKIAlyZXR1cm4gcGNpX3JjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKaW5kZXggNWQ5OTdhMy4uMmEzOTczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCkBAIC0xNjM3LDggKzE2MzcsNyBAQAogCSAgICBfSU9DX1NJWkUoY21kKSA+IHNpemVvZihidWZmZXIpKQogCQlyZXR1cm4gLUVOT1RUWTsKIAotCWlmIChfSU9DX0RJUihjbWQpID09IF9JT0NfUkVBRCkKLQkJbWVtc2V0KCZidWZmZXIsIDAsIF9JT0NfU0laRShjbWQpKTsKKwltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOwogCiAJaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1dSSVRFKQogCQlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZmZlciwgYXJnLCBfSU9DX1NJWkUoY21kKSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggMTdhZmM1MS4uYzVmN2I0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtOTMsNiArOTMsMTIgQEAKIAkJY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtID0gKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopZGF0YTsKIAogCQkvKgorCQkgKiA3LjQ1IEVuZC1vZi1UYWJsZSAoVHlwZSAxMjcpIFtTTUJJT1MgcmVmZXJlbmNlIHNwZWMgdjMuMC4wXQorCQkgKi8KKwkJaWYgKGRtLT50eXBlID09IERNSV9FTlRSWV9FTkRfT0ZfVEFCTEUpCisJCQlicmVhazsKKworCQkvKgogCQkgKiAgV2Ugd2FudCB0byBrbm93IHRoZSB0b3RhbCBsZW5ndGggKGZvcm1hdHRlZCBhcmVhIGFuZAogCQkgKiAgc3RyaW5ncykgYmVmb3JlIGRlY29kaW5nIHRvIG1ha2Ugc3VyZSB3ZSB3b24ndCBydW4gb2ZmIHRoZQogCQkgKiAgdGFibGUgaW4gZG1pX2RlY29kZSBvciBkbWlfc3RyaW5nCkBAIC0xMDcsNyArMTEzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB1MzIgZG1pX2Jhc2U7CitzdGF0aWMgcGh5c19hZGRyX3QgZG1pX2Jhc2U7CiBzdGF0aWMgdTE2IGRtaV9sZW47CiBzdGF0aWMgdTE2IGRtaV9udW07CiAKQEAgLTQ2Nyw3ICs0NzMsNyBAQAogCiAJaWYgKG1lbWNtcChidWYsICJfU01fIiwgNCkgPT0gMCAmJgogCSAgICBidWZbNV0gPCAzMiAmJiBkbWlfY2hlY2tzdW0oYnVmLCBidWZbNV0pKSB7Ci0JCXNtYmlvc192ZXIgPSAoYnVmWzZdIDw8IDgpICsgYnVmWzddOworCQlzbWJpb3NfdmVyID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGJ1ZiArIDYpOwogCiAJCS8qIFNvbWUgQklPUyByZXBvcnQgd2VpcmQgU01CSU9TIHZlcnNpb24sIGZpeCB0aGF0IHVwICovCiAJCXN3aXRjaCAoc21iaW9zX3ZlcikgewpAQCAtNDg5LDEwICs0OTUsOSBAQAogCWJ1ZiArPSAxNjsKIAogCWlmIChtZW1jbXAoYnVmLCAiX0RNSV8iLCA1KSA9PSAwICYmIGRtaV9jaGVja3N1bShidWYsIDE1KSkgewotCQlkbWlfbnVtID0gKGJ1ZlsxM10gPDwgOCkgfCBidWZbMTJdOwotCQlkbWlfbGVuID0gKGJ1Zls3XSA8PCA4KSB8IGJ1Zls2XTsKLQkJZG1pX2Jhc2UgPSAoYnVmWzExXSA8PCAyNCkgfCAoYnVmWzEwXSA8PCAxNikgfAotCQkJKGJ1Zls5XSA8PCA4KSB8IGJ1Zls4XTsKKwkJZG1pX251bSA9IGdldF91bmFsaWduZWRfbGUxNihidWYgKyAxMik7CisJCWRtaV9sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoYnVmICsgNik7CisJCWRtaV9iYXNlID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJ1ZiArIDgpOwogCiAJCWlmIChkbWlfd2Fsa19lYXJseShkbWlfZGVjb2RlKSA9PSAwKSB7CiAJCQlpZiAoc21iaW9zX3ZlcikgewpAQCAtNTE0LDEyICs1MTksNzIgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIENoZWNrIGZvciB0aGUgU01CSU9TIDMuMCA2NC1iaXQgZW50cnkgcG9pbnQgc2lnbmF0dXJlLiBVbmxpa2UgdGhlIGxlZ2FjeQorICogMzItYml0IGVudHJ5IHBvaW50LCB0aGVyZSBpcyBubyBlbWJlZGRlZCBETUkgaGVhZGVyIChfRE1JXykgaW4gaGVyZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgZG1pX3NtYmlvczNfcHJlc2VudChjb25zdCB1OCAqYnVmKQoreworCWlmIChtZW1jbXAoYnVmLCAiX1NNM18iLCA1KSA9PSAwICYmCisJICAgIGJ1Zls2XSA8IDMyICYmIGRtaV9jaGVja3N1bShidWYsIGJ1Zls2XSkpIHsKKwkJZG1pX3ZlciA9IGdldF91bmFsaWduZWRfYmUxNihidWYgKyA3KTsKKwkJZG1pX2xlbiA9IGdldF91bmFsaWduZWRfbGUzMihidWYgKyAxMik7CisJCWRtaV9iYXNlID0gZ2V0X3VuYWxpZ25lZF9sZTY0KGJ1ZiArIDE2KTsKKworCQkvKgorCQkgKiBUaGUgNjQtYml0IFNNQklPUyAzLjAgZW50cnkgcG9pbnQgbm8gbG9uZ2VyIGhhcyBhIGZpZWxkCisJCSAqIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzIHByZXNlbnQgaW4gdGhlIHRhYmxlLgorCQkgKiBJbnN0ZWFkLCBpdCBkZWZpbmVzIHRoZSB0YWJsZSBzaXplIGFzIGEgbWF4aW11bSBzaXplLCBhbmQKKwkJICogcmVsaWVzIG9uIHRoZSBlbmQtb2YtdGFibGUgc3RydWN0dXJlIHR5cGUgKCMxMjcpIHRvIGJlIHVzZWQKKwkJICogdG8gc2lnbmFsIHRoZSBlbmQgb2YgdGhlIHRhYmxlLgorCQkgKiBTbyBsZXQncyBkZWZpbmUgZG1pX251bSBhcyBhbiB1cHBlciBib3VuZCBhcyB3ZWxsOiBlYWNoCisJCSAqIHN0cnVjdHVyZSBoYXMgYSA0IGJ5dGUgaGVhZGVyLCBzbyBkbWlfbGVuIC8gNCBpcyBhbiB1cHBlcgorCQkgKiBib3VuZCBmb3IgdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzIGluIHRoZSB0YWJsZS4KKwkJICovCisJCWRtaV9udW0gPSBkbWlfbGVuIC8gNDsKKworCQlpZiAoZG1pX3dhbGtfZWFybHkoZG1pX2RlY29kZSkgPT0gMCkgeworCQkJcHJfaW5mbygiU01CSU9TICVkLiVkIHByZXNlbnQuXG4iLAorCQkJCWRtaV92ZXIgPj4gOCwgZG1pX3ZlciAmIDB4RkYpOworCQkJZG1pX2Zvcm1hdF9pZHMoZG1pX2lkc19zdHJpbmcsIHNpemVvZihkbWlfaWRzX3N0cmluZykpOworCQkJcHJfZGVidWcoIkRNSTogJXNcbiIsIGRtaV9pZHNfc3RyaW5nKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorCiB2b2lkIF9faW5pdCBkbWlfc2Nhbl9tYWNoaW5lKHZvaWQpCiB7CiAJY2hhciBfX2lvbWVtICpwLCAqcTsKIAljaGFyIGJ1ZlszMl07CiAKIAlpZiAoZWZpX2VuYWJsZWQoRUZJX0NPTkZJR19UQUJMRVMpKSB7CisJCS8qCisJCSAqIEFjY29yZGluZyB0byB0aGUgRE1URiBTTUJJT1MgcmVmZXJlbmNlIHNwZWMgdjMuMC4wLCBpdCBpcworCQkgKiBhbGxvd2VkIHRvIGRlZmluZSBib3RoIHRoZSA2NC1iaXQgZW50cnkgcG9pbnQgKHNtYmlvczMpIGFuZAorCQkgKiB0aGUgMzItYml0IGVudHJ5IHBvaW50IChzbWJpb3MpLCBpbiB3aGljaCBjYXNlIHRoZXkgc2hvdWxkCisJCSAqIGVpdGhlciBib3RoIHBvaW50IHRvIHRoZSBzYW1lIFNNQklPUyBzdHJ1Y3R1cmUgdGFibGUsIG9yIHRoZQorCQkgKiB0YWJsZSBwb2ludGVkIHRvIGJ5IHRoZSA2NC1iaXQgZW50cnkgcG9pbnQgc2hvdWxkIGNvbnRhaW4gYQorCQkgKiBzdXBlcnNldCBvZiB0aGUgdGFibGUgY29udGVudHMgcG9pbnRlZCB0byBieSB0aGUgMzItYml0IGVudHJ5CisJCSAqIHBvaW50IChzZWN0aW9uIDUuMikKKwkJICogVGhpcyBpbXBsaWVzIHRoYXQgdGhlIDY0LWJpdCBlbnRyeSBwb2ludCBzaG91bGQgaGF2ZQorCQkgKiBwcmVjZWRlbmNlIGlmIGl0IGlzIGRlZmluZWQgYW5kIHN1cHBvcnRlZCBieSB0aGUgT1MuIElmIHdlCisJCSAqIGhhdmUgdGhlIDY0LWJpdCBlbnRyeSBwb2ludCwgYnV0IGZhaWwgdG8gZGVjb2RlIGl0LCBmYWxsCisJCSAqIGJhY2sgdG8gdGhlIGxlZ2FjeSBvbmUgKGlmIGF2YWlsYWJsZSkKKwkJICovCisJCWlmIChlZmkuc21iaW9zMyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7CisJCQlwID0gZG1pX2Vhcmx5X3JlbWFwKGVmaS5zbWJpb3MzLCAzMik7CisJCQlpZiAocCA9PSBOVUxMKQorCQkJCWdvdG8gZXJyb3I7CisJCQltZW1jcHlfZnJvbWlvKGJ1ZiwgcCwgMzIpOworCQkJZG1pX2Vhcmx5X3VubWFwKHAsIDMyKTsKKworCQkJaWYgKCFkbWlfc21iaW9zM19wcmVzZW50KGJ1ZikpIHsKKwkJCQlkbWlfYXZhaWxhYmxlID0gMTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQogCQlpZiAoZWZpLnNtYmlvcyA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQogCQkJZ290byBlcnJvcjsKIApAQCAtNTUyLDcgKzYxNyw3IEBACiAJCW1lbXNldChidWYsIDAsIDE2KTsKIAkJZm9yIChxID0gcDsgcSA8IHAgKyAweDEwMDAwOyBxICs9IDE2KSB7CiAJCQltZW1jcHlfZnJvbWlvKGJ1ZiArIDE2LCBxLCAxNik7Ci0JCQlpZiAoIWRtaV9wcmVzZW50KGJ1ZikpIHsKKwkJCWlmICghZG1pX3NtYmlvczNfcHJlc2VudChidWYpIHx8ICFkbWlfcHJlc2VudChidWYpKSB7CiAJCQkJZG1pX2F2YWlsYWJsZSA9IDE7CiAJCQkJZG1pX2Vhcmx5X3VubWFwKHAsIDB4MTAwMDApOwogCQkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQppbmRleCBhZWY2YTk1Li5kOGJlNjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQpAQCAtNyw0ICs3LDQgQEAKIG9iai0kKENPTkZJR19VRUZJX0NQRVIpCQkJKz0gY3Blci5vCiBvYmotJChDT05GSUdfRUZJX1JVTlRJTUVfTUFQKQkJKz0gcnVudGltZS1tYXAubwogb2JqLSQoQ09ORklHX0VGSV9SVU5USU1FX1dSQVBQRVJTKQkrPSBydW50aW1lLXdyYXBwZXJzLm8KLW9iai0kKENPTkZJR19FRklfQVJNX1NUVUIpCQkrPSBsaWJzdHViLworb2JqLSQoQ09ORklHX0VGSV9TVFVCKQkJCSs9IGxpYnN0dWIvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCmluZGV4IDg1OTAwOTkuLjkwMzVjMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCkBAIC0zMCw2ICszMCw3IEBACiAJLmFjcGkgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5hY3BpMjAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKIAkuc21iaW9zICAgICA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCisJLnNtYmlvczMgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5zYWxfc3lzdGFiID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKIAkuYm9vdF9pbmZvICA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiAJLmhjZHAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLApAQCAtODYsNiArODcsOCBAQAogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJBQ1BJPTB4JWx4XG4iLCBlZmkuYWNwaSk7CiAJaWYgKGVmaS5zbWJpb3MgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiU01CSU9TPTB4JWx4XG4iLCBlZmkuc21iaW9zKTsKKwlpZiAoZWZpLnNtYmlvczMgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiU01CSU9TMz0weCVseFxuIiwgZWZpLnNtYmlvczMpOwogCWlmIChlZmkuaGNkcCAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJIQ0RQPTB4JWx4XG4iLCBlZmkuaGNkcCk7CiAJaWYgKGVmaS5ib290X2luZm8gIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKQEAgLTI2MCw2ICsyNjMsNyBAQAogCXtNUFNfVEFCTEVfR1VJRCwgIk1QUyIsICZlZmkubXBzfSwKIAl7U0FMX1NZU1RFTV9UQUJMRV9HVUlELCAiU0FMc3lzdGFiIiwgJmVmaS5zYWxfc3lzdGFifSwKIAl7U01CSU9TX1RBQkxFX0dVSUQsICJTTUJJT1MiLCAmZWZpLnNtYmlvc30sCisJe1NNQklPUzNfVEFCTEVfR1VJRCwgIlNNQklPUyAzLjAiLCAmZWZpLnNtYmlvczN9LAogCXtVR0FfSU9fUFJPVE9DT0xfR1VJRCwgIlVHQSIsICZlZmkudWdhfSwKIAl7TlVMTF9HVUlELCBOVUxMLCBOVUxMfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2FybS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2FybS1zdHViLmMKaW5kZXggNzVlZTA1OS4uZWI0OGExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9hcm0tc3R1Yi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvYXJtLXN0dWIuYwpAQCAtMjQ3LDkgKzI0NywxOCBAQAogCQkJZ290byBmYWlsX2ZyZWVfY21kbGluZTsKIAkJfQogCX0KLQlpZiAoIWZkdF9hZGRyKQorCisJaWYgKGZkdF9hZGRyKSB7CisJCXByX2VmaShzeXNfdGFibGUsICJVc2luZyBEVEIgZnJvbSBjb21tYW5kIGxpbmVcbiIpOworCX0gZWxzZSB7CiAJCS8qIExvb2sgZm9yIGEgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyeS4gKi8KIAkJZmR0X2FkZHIgPSAodWludHB0cl90KWdldF9mZHQoc3lzX3RhYmxlKTsKKwkJaWYgKGZkdF9hZGRyKQorCQkJcHJfZWZpKHN5c190YWJsZSwgIlVzaW5nIERUQiBmcm9tIGNvbmZpZ3VyYXRpb24gdGFibGVcbiIpOworCX0KKworCWlmICghZmR0X2FkZHIpCisJCXByX2VmaShzeXNfdGFibGUsICJHZW5lcmF0aW5nIGVtcHR5IERUQlxuIik7CiAKIAlzdGF0dXMgPSBoYW5kbGVfY21kbGluZV9maWxlcyhzeXNfdGFibGUsIGltYWdlLCBjbWRsaW5lX3B0ciwKIAkJCQkgICAgICAiaW5pdHJkPSIsIGRyYW1fYmFzZSArIFNaXzUxMk0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IDA5NTljYTkuLjIzZGZkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC05MDUsNCArOTA1LDE2IEBACiAgICAgICAgICAgUml2ZXIgVGVjaCdzIHZpcGVyYm9hcmQuaCBmb3IgZGV0YWlsZWQgbWVhbmluZwogICAgICAgICAgIG9mIHRoZSBtb2R1bGUgcGFyYW1ldGVycy4KIAorY29uZmlnIEdQSU9fRExOMgorCXRyaXN0YXRlICJEaW9sYW4gRExOMiBHUElPIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNRkRfRExOMgorCXNlbGVjdCBHUElPTElCX0lSUUNISVAKKworCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgR1BJTyBkcml2ZXIgZm9yIHRoZSBEaW9sYW4gRExOMgorCSAgYm9hcmQuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgZ3Bpby1kbG4yLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL01ha2VmaWxlIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCmluZGV4IGU1ZDM0NmMuLmU2MDY3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAKIG9iai0kKENPTkZJR19HUElPX0RBOTA1MikJKz0gZ3Bpby1kYTkwNTIubwogb2JqLSQoQ09ORklHX0dQSU9fREE5MDU1KQkrPSBncGlvLWRhOTA1NS5vCiBvYmotJChDT05GSUdfR1BJT19EQVZJTkNJKQkrPSBncGlvLWRhdmluY2kubworb2JqLSQoQ09ORklHX0dQSU9fRExOMikJCSs9IGdwaW8tZGxuMi5vCiBvYmotJChDT05GSUdfR1BJT19EV0FQQikJKz0gZ3Bpby1kd2FwYi5vCiBvYmotJChDT05GSUdfR1BJT19FTSkJCSs9IGdwaW8tZW0ubwogb2JqLSQoQ09ORklHX0dQSU9fRVA5M1hYKQkrPSBncGlvLWVwOTN4eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1kbG4yLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1kbG4yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4YjUxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWRsbjIuYwpAQCAtMCwwICsxLDU1MyBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIERpb2xhbiBETE4tMiBVU0ItR1BJTyBhZGFwdGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5lZF9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGxuMi5oPgorCisjZGVmaW5lIERMTjJfR1BJT19JRAkJCTB4MDEKKworI2RlZmluZSBETE4yX0dQSU9fR0VUX1BJTl9DT1VOVAkJRExOMl9DTUQoMHgwMSwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fU0VUX0RFQk9VTkNFCQlETE4yX0NNRCgweDA0LCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19HRVRfREVCT1VOQ0UJCURMTjJfQ01EKDB4MDUsIERMTjJfR1BJT19JRCkKKyNkZWZpbmUgRExOMl9HUElPX1BPUlRfR0VUX1ZBTAkJRExOMl9DTUQoMHgwNiwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX0dFVF9WQUwJCURMTjJfQ01EKDB4MEIsIERMTjJfR1BJT19JRCkKKyNkZWZpbmUgRExOMl9HUElPX1BJTl9TRVRfT1VUX1ZBTAlETE4yX0NNRCgweDBDLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fR0VUX09VVF9WQUwJRExOMl9DTUQoMHgwRCwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fQ09ORElUSU9OX01FVF9FVglETE4yX0NNRCgweDBGLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fRU5BQkxFCQlETE4yX0NNRCgweDEwLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fRElTQUJMRQkJRExOMl9DTUQoMHgxMSwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX1NFVF9ESVJFQ1RJT04JRExOMl9DTUQoMHgxMywgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX0dFVF9ESVJFQ1RJT04JRExOMl9DTUQoMHgxNCwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX1NFVF9FVkVOVF9DRkcJRExOMl9DTUQoMHgxRSwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX0dFVF9FVkVOVF9DRkcJRExOMl9DTUQoMHgxRiwgRExOMl9HUElPX0lEKQorCisjZGVmaW5lIERMTjJfR1BJT19FVkVOVF9OT05FCQkwCisjZGVmaW5lIERMTjJfR1BJT19FVkVOVF9DSEFOR0UJCTEKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX0xWTF9ISUdICTIKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX0xWTF9MT1cJCTMKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX0NIQU5HRV9SSVNJTkcJMHgxMQorI2RlZmluZSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFX0ZBTExJTkcgIDB4MjEKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX01BU0sJCTB4MEYKKworI2RlZmluZSBETE4yX0dQSU9fTUFYX1BJTlMgMzIKKworc3RydWN0IGRsbjJfaXJxX3dvcmsgeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjI7CisJaW50IHBpbjsKKwlpbnQgdHlwZTsKK307CisKK3N0cnVjdCBkbG4yX2dwaW8geworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGdwaW9fY2hpcCBncGlvOworCisJLyoKKwkgKiBDYWNoZSBwaW4gZGlyZWN0aW9uIHRvIHNhdmUgdXMgb25lIHRyYW5zZmVyLCBzaW5jZSB0aGUgaGFyZHdhcmUgaGFzCisJICogc2VwYXJhdGUgY29tbWFuZHMgdG8gcmVhZCB0aGUgaW4gYW5kIG91dCB2YWx1ZXMuCisJICovCisJREVDTEFSRV9CSVRNQVAob3V0cHV0X2VuYWJsZWQsIERMTjJfR1BJT19NQVhfUElOUyk7CisKKwlERUNMQVJFX0JJVE1BUChpcnFzX21hc2tlZCwgRExOMl9HUElPX01BWF9QSU5TKTsKKwlERUNMQVJFX0JJVE1BUChpcnFzX2VuYWJsZWQsIERMTjJfR1BJT19NQVhfUElOUyk7CisJREVDTEFSRV9CSVRNQVAoaXJxc19wZW5kaW5nLCBETE4yX0dQSU9fTUFYX1BJTlMpOworCXN0cnVjdCBkbG4yX2lycV93b3JrICppcnFfd29yazsKK307CisKK3N0cnVjdCBkbG4yX2dwaW9fcGluIHsKKwlfX2xlMTYgcGluOworfTsKKworc3RydWN0IGRsbjJfZ3Bpb19waW5fdmFsIHsKKwlfX2xlMTYgcGluIF9fcGFja2VkOworCXU4IHZhbHVlOworfTsKKworc3RhdGljIGludCBkbG4yX2dwaW9fZ2V0X3Bpbl9jb3VudChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJX19sZTE2IGNvdW50OworCWludCBsZW4gPSBzaXplb2YoY291bnQpOworCisJcmV0ID0gZGxuMl90cmFuc2Zlcl9yeChwZGV2LCBETE4yX0dQSU9fR0VUX1BJTl9DT1VOVCwgJmNvdW50LCAmbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobGVuIDwgc2l6ZW9mKGNvdW50KSkKKwkJcmV0dXJuIC1FUFJPVE87CisKKwlyZXR1cm4gbGUxNl90b19jcHUoY291bnQpOworfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19waW5fY21kKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsIGludCBjbWQsIHVuc2lnbmVkIHBpbikKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvX3BpbiByZXEgPSB7CisJCS5waW4gPSBjcHVfdG9fbGUxNihwaW4pLAorCX07CisKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBjbWQsICZyZXEsIHNpemVvZihyZXEpKTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fcGluX3ZhbChzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgcGluKQoreworCWludCByZXQ7CisJc3RydWN0IGRsbjJfZ3Bpb19waW4gcmVxID0geworCQkucGluID0gY3B1X3RvX2xlMTYocGluKSwKKwl9OworCXN0cnVjdCBkbG4yX2dwaW9fcGluX3ZhbCByc3A7CisJaW50IGxlbiA9IHNpemVvZihyc3ApOworCisJcmV0ID0gZGxuMl90cmFuc2ZlcihkbG4yLT5wZGV2LCBjbWQsICZyZXEsIHNpemVvZihyZXEpLCAmcnNwLCAmbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobGVuIDwgc2l6ZW9mKHJzcCkgfHwgcmVxLnBpbiAhPSByc3AucGluKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCXJldHVybiByc3AudmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3Bpbl9nZXRfaW5fdmFsKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsIHVuc2lnbmVkIGludCBwaW4pCit7CisJaW50IHJldDsKKworCXJldCA9IGRsbjJfZ3Bpb19waW5fdmFsKGRsbjIsIERMTjJfR1BJT19QSU5fR0VUX1ZBTCwgcGluKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gISFyZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3Bpbl9nZXRfb3V0X3ZhbChzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLCB1bnNpZ25lZCBpbnQgcGluKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkbG4yX2dwaW9fcGluX3ZhbChkbG4yLCBETE4yX0dQSU9fUElOX0dFVF9PVVRfVkFMLCBwaW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAhIXJldDsKK30KKworc3RhdGljIHZvaWQgZGxuMl9ncGlvX3Bpbl9zZXRfb3V0X3ZhbChzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBwaW4sIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvX3Bpbl92YWwgcmVxID0geworCQkucGluID0gY3B1X3RvX2xlMTYocGluKSwKKwkJLnZhbHVlID0gdmFsdWUsCisJfTsKKworCWRsbjJfdHJhbnNmZXJfdHgoZGxuMi0+cGRldiwgRExOMl9HUElPX1BJTl9TRVRfT1VUX1ZBTCwgJnJlcSwKKwkJCSBzaXplb2YocmVxKSk7Cit9CisKKyNkZWZpbmUgRExOMl9HUElPX0RJUkVDVElPTl9JTgkJMAorI2RlZmluZSBETE4yX0dQSU9fRElSRUNUSU9OX09VVAkJMQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCXN0cnVjdCBkbG4yX2dwaW9fcGluIHJlcSA9IHsKKwkJLnBpbiA9IGNwdV90b19sZTE2KG9mZnNldCksCisJfTsKKwlzdHJ1Y3QgZGxuMl9ncGlvX3Bpbl92YWwgcnNwOworCWludCBsZW4gPSBzaXplb2YocnNwKTsKKwlpbnQgcmV0OworCisJcmV0ID0gZGxuMl9ncGlvX3Bpbl9jbWQoZGxuMiwgRExOMl9HUElPX1BJTl9FTkFCTEUsIG9mZnNldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBjYWNoZSB0aGUgcGluIGRpcmVjdGlvbiAqLworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9HUElPX1BJTl9HRVRfRElSRUNUSU9OLAorCQkJICAgICZyZXEsIHNpemVvZihyZXEpLCAmcnNwLCAmbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobGVuIDwgc2l6ZW9mKHJzcCkgfHwgcmVxLnBpbiAhPSByc3AucGluKSB7CisJCXJldCA9IC1FUFJPVE87CisJCWdvdG8gb3V0X2Rpc2FibGU7CisJfQorCisJc3dpdGNoIChyc3AudmFsdWUpIHsKKwljYXNlIERMTjJfR1BJT19ESVJFQ1RJT05fSU46CisJCWNsZWFyX2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBETE4yX0dQSU9fRElSRUNUSU9OX09VVDoKKwkJc2V0X2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVQUk9UTzsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisKK291dF9kaXNhYmxlOgorCWRsbjJfZ3Bpb19waW5fY21kKGRsbjIsIERMTjJfR1BJT19QSU5fRElTQUJMRSwgb2Zmc2V0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkbG4yX2dwaW9fZnJlZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKworCWRsbjJfZ3Bpb19waW5fY21kKGRsbjIsIERMTjJfR1BJT19QSU5fRElTQUJMRSwgb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKworCWlmICh0ZXN0X2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKSkKKwkJcmV0dXJuIEdQSU9GX0RJUl9PVVQ7CisKKwlyZXR1cm4gR1BJT0ZfRElSX0lOOworfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCBkaXI7CisKKwlkaXIgPSBkbG4yX2dwaW9fZ2V0X2RpcmVjdGlvbihjaGlwLCBvZmZzZXQpOworCWlmIChkaXIgPCAwKQorCQlyZXR1cm4gZGlyOworCisJaWYgKGRpciA9PSBHUElPRl9ESVJfSU4pCisJCXJldHVybiBkbG4yX2dwaW9fcGluX2dldF9pbl92YWwoZGxuMiwgb2Zmc2V0KTsKKworCXJldHVybiBkbG4yX2dwaW9fcGluX2dldF9vdXRfdmFsKGRsbjIsIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbjJfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKworCWRsbjJfZ3Bpb19waW5fc2V0X291dF92YWwoZGxuMiwgb2Zmc2V0LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3NldF9kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCSAgIHVuc2lnbmVkIGRpcikKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCXN0cnVjdCBkbG4yX2dwaW9fcGluX3ZhbCByZXEgPSB7CisJCS5waW4gPSBjcHVfdG9fbGUxNihvZmZzZXQpLAorCQkudmFsdWUgPSBkaXIsCisJfTsKKwlpbnQgcmV0OworCisJcmV0ID0gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX0dQSU9fUElOX1NFVF9ESVJFQ1RJT04sCisJCQkgICAgICAgJnJlcSwgc2l6ZW9mKHJlcSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGRpciA9PSBETE4yX0dQSU9fRElSRUNUSU9OX09VVCkKKwkJc2V0X2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKTsKKwllbHNlCisJCWNsZWFyX2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJcmV0dXJuIGRsbjJfZ3Bpb19zZXRfZGlyZWN0aW9uKGNoaXAsIG9mZnNldCwgRExOMl9HUElPX0RJUkVDVElPTl9JTik7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCSAgICAgIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gZGxuMl9ncGlvX3NldF9kaXJlY3Rpb24oY2hpcCwgb2Zmc2V0LCBETE4yX0dQSU9fRElSRUNUSU9OX09VVCk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3NldF9kZWJvdW5jZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJICB1bnNpZ25lZCBkZWJvdW5jZSkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCV9fbGUzMiBkdXJhdGlvbiA9IGNwdV90b19sZTMyKGRlYm91bmNlKTsKKworCXJldHVybiBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfR1BJT19TRVRfREVCT1VOQ0UsCisJCQkJJmR1cmF0aW9uLCBzaXplb2YoZHVyYXRpb24pKTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fc2V0X2V2ZW50X2NmZyhzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLCB1bnNpZ25lZCBwaW4sCisJCQkJICAgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgcGVyaW9kKQoreworCXN0cnVjdCB7CisJCV9fbGUxNiBwaW47CisJCXU4IHR5cGU7CisJCV9fbGUxNiBwZXJpb2Q7CisJfSBfX3BhY2tlZCByZXEgPSB7CisJCS5waW4gPSBjcHVfdG9fbGUxNihwaW4pLAorCQkudHlwZSA9IHR5cGUsCisJCS5wZXJpb2QgPSBjcHVfdG9fbGUxNihwZXJpb2QpLAorCX07CisKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX0dQSU9fUElOX1NFVF9FVkVOVF9DRkcsCisJCQkJJnJlcSwgc2l6ZW9mKHJlcSkpOworfQorCitzdGF0aWMgdm9pZCBkbG4yX2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgZGxuMl9pcnFfd29yayAqaXcgPSBjb250YWluZXJfb2Yodywgc3RydWN0IGRsbjJfaXJxX3dvcmssIHdvcmspOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBpdy0+ZGxuMjsKKwl1OCB0eXBlID0gaXctPnR5cGUgJiBETE4yX0dQSU9fRVZFTlRfTUFTSzsKKworCWlmICh0ZXN0X2JpdChpdy0+cGluLCBkbG4yLT5pcnFzX2VuYWJsZWQpKQorCQlkbG4yX2dwaW9fc2V0X2V2ZW50X2NmZyhkbG4yLCBpdy0+cGluLCB0eXBlLCAwKTsKKwllbHNlCisJCWRsbjJfZ3Bpb19zZXRfZXZlbnRfY2ZnKGRsbjIsIGl3LT5waW4sIERMTjJfR1BJT19FVkVOVF9OT05FLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9pcnFfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOworCisJc2V0X2JpdChwaW4sIGRsbjItPmlycXNfZW5hYmxlZCk7CisJc2NoZWR1bGVfd29yaygmZGxuMi0+aXJxX3dvcmtbcGluXS53b3JrKTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShpcnFkKTsKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKwlpbnQgcGluID0gaXJxZF90b19od2lycShpcnFkKTsKKworCWNsZWFyX2JpdChwaW4sIGRsbjItPmlycXNfZW5hYmxlZCk7CisJc2NoZWR1bGVfd29yaygmZGxuMi0+aXJxX3dvcmtbcGluXS53b3JrKTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShpcnFkKTsKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKwlpbnQgcGluID0gaXJxZF90b19od2lycShpcnFkKTsKKworCXNldF9iaXQocGluLCBkbG4yLT5pcnFzX21hc2tlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbjJfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShpcnFkKTsKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkbG4yLT5ncGlvLmRldjsKKwlpbnQgcGluID0gaXJxZF90b19od2lycShpcnFkKTsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQocGluLCBkbG4yLT5pcnFzX3BlbmRpbmcpKSB7CisJCWludCBpcnE7CisKKwkJaXJxID0gaXJxX2ZpbmRfbWFwcGluZyhkbG4yLT5ncGlvLmlycWRvbWFpbiwgcGluKTsKKwkJaWYgKCFpcnEpIHsKKwkJCWRldl9lcnIoZGV2LCAicGluICVkIG5vdCBtYXBwZWQgdG8gSVJRXG4iLCBwaW4pOworCQkJcmV0dXJuOworCQl9CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJfQorfQorCitzdGF0aWMgaW50IGRsbjJfaXJxX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCwgdW5zaWduZWQgdHlwZSkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQlkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUgPSBETE4yX0dQSU9fRVZFTlRfTFZMX0hJR0g7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgorCQlkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUgPSBETE4yX0dQSU9fRVZFTlRfTFZMX0xPVzsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CisJCWRsbjItPmlycV93b3JrW3Bpbl0udHlwZSA9IERMTjJfR1BJT19FVkVOVF9DSEFOR0U7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6CisJCWRsbjItPmlycV93b3JrW3Bpbl0udHlwZSA9IERMTjJfR1BJT19FVkVOVF9DSEFOR0VfUklTSU5HOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwkJZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlID0gRExOMl9HUElPX0VWRU5UX0NIQU5HRV9GQUxMSU5HOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBkbG4yX2dwaW9faXJxY2hpcCA9IHsKKwkubmFtZSA9ICJkbG4yLWlycSIsCisJLmlycV9lbmFibGUgPSBkbG4yX2lycV9lbmFibGUsCisJLmlycV9kaXNhYmxlID0gZGxuMl9pcnFfZGlzYWJsZSwKKwkuaXJxX21hc2sgPSBkbG4yX2lycV9tYXNrLAorCS5pcnFfdW5tYXNrID0gZGxuMl9pcnFfdW5tYXNrLAorCS5pcnFfc2V0X3R5cGUgPSBkbG4yX2lycV9zZXRfdHlwZSwKK307CisKK3N0YXRpYyB2b2lkIGRsbjJfZ3Bpb19ldmVudChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1MTYgZWNobywKKwkJCSAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCWludCBwaW4sIGlycTsKKwljb25zdCBzdHJ1Y3QgeworCQlfX2xlMTYgY291bnQ7CisJCV9fdTggdHlwZTsKKwkJX19sZTE2IHBpbjsKKwkJX191OCB2YWx1ZTsKKwl9IF9fcGFja2VkICpldmVudCA9IGRhdGE7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGxlbiA8IHNpemVvZigqZXZlbnQpKSB7CisJCWRldl9lcnIoZGxuMi0+Z3Bpby5kZXYsICJzaG9ydCBldmVudCBtZXNzYWdlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBpbiA9IGxlMTZfdG9fY3B1KGV2ZW50LT5waW4pOworCWlmIChwaW4gPj0gZGxuMi0+Z3Bpby5uZ3BpbykgeworCQlkZXZfZXJyKGRsbjItPmdwaW8uZGV2LCAib3V0IG9mIGJvdW5kcyBwaW4gJWRcbiIsIHBpbik7CisJCXJldHVybjsKKwl9CisKKwlpcnEgPSBpcnFfZmluZF9tYXBwaW5nKGRsbjItPmdwaW8uaXJxZG9tYWluLCBwaW4pOworCWlmICghaXJxKSB7CisJCWRldl9lcnIoZGxuMi0+Z3Bpby5kZXYsICJwaW4gJWQgbm90IG1hcHBlZCB0byBJUlFcbiIsIHBpbik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXRlc3RfYml0KHBpbiwgZGxuMi0+aXJxc19lbmFibGVkKSkKKwkJcmV0dXJuOworCWlmICh0ZXN0X2JpdChwaW4sIGRsbjItPmlycXNfbWFza2VkKSkgeworCQlzZXRfYml0KHBpbiwgZGxuMi0+aXJxc19wZW5kaW5nKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlKSB7CisJY2FzZSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFX1JJU0lORzoKKwkJaWYgKGV2ZW50LT52YWx1ZSkKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCQlicmVhazsKKwljYXNlIERMTjJfR1BJT19FVkVOVF9DSEFOR0VfRkFMTElORzoKKwkJaWYgKCFldmVudC0+dmFsdWUpCisJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJfQorfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlpbnQgcGluczsKKwlpbnQgaSwgcmV0OworCisJcGlucyA9IGRsbjJfZ3Bpb19nZXRfcGluX2NvdW50KHBkZXYpOworCWlmIChwaW5zIDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgcGluIGNvdW50OiAlZFxuIiwgcGlucyk7CisJCXJldHVybiBwaW5zOworCX0KKwlpZiAocGlucyA+IERMTjJfR1BJT19NQVhfUElOUykgeworCQlwaW5zID0gRExOMl9HUElPX01BWF9QSU5TOworCQlkZXZfd2FybihkZXYsICJjbGFtcGluZyBwaW5zIHRvICVkXG4iLCBETE4yX0dQSU9fTUFYX1BJTlMpOworCX0KKworCWRsbjIgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkbG4yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbG4yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRsbjItPmlycV93b3JrID0gZGV2bV9rY2FsbG9jKCZwZGV2LT5kZXYsIHBpbnMsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBkbG4yX2lycV93b3JrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbG4yLT5pcnFfd29yaykKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IHBpbnM7IGkrKykgeworCQlJTklUX1dPUksoJmRsbjItPmlycV93b3JrW2ldLndvcmssIGRsbjJfaXJxX3dvcmspOworCQlkbG4yLT5pcnFfd29ya1tpXS5waW4gPSBpOworCQlkbG4yLT5pcnFfd29ya1tpXS5kbG4yID0gZGxuMjsKKwl9CisKKwlkbG4yLT5wZGV2ID0gcGRldjsKKworCWRsbjItPmdwaW8ubGFiZWwgPSAiZGxuMiI7CisJZGxuMi0+Z3Bpby5kZXYgPSBkZXY7CisJZGxuMi0+Z3Bpby5vd25lciA9IFRISVNfTU9EVUxFOworCWRsbjItPmdwaW8uYmFzZSA9IC0xOworCWRsbjItPmdwaW8ubmdwaW8gPSBwaW5zOworCWRsbjItPmdwaW8uZXhwb3J0ZWQgPSB0cnVlOworCWRsbjItPmdwaW8uY2FuX3NsZWVwID0gdHJ1ZTsKKwlkbG4yLT5ncGlvLmlycV9ub3RfdGhyZWFkZWQgPSB0cnVlOworCWRsbjItPmdwaW8uc2V0ID0gZGxuMl9ncGlvX3NldDsKKwlkbG4yLT5ncGlvLmdldCA9IGRsbjJfZ3Bpb19nZXQ7CisJZGxuMi0+Z3Bpby5yZXF1ZXN0ID0gZGxuMl9ncGlvX3JlcXVlc3Q7CisJZGxuMi0+Z3Bpby5mcmVlID0gZGxuMl9ncGlvX2ZyZWU7CisJZGxuMi0+Z3Bpby5nZXRfZGlyZWN0aW9uID0gZGxuMl9ncGlvX2dldF9kaXJlY3Rpb247CisJZGxuMi0+Z3Bpby5kaXJlY3Rpb25faW5wdXQgPSBkbG4yX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCWRsbjItPmdwaW8uZGlyZWN0aW9uX291dHB1dCA9IGRsbjJfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0OworCWRsbjItPmdwaW8uc2V0X2RlYm91bmNlID0gZGxuMl9ncGlvX3NldF9kZWJvdW5jZTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRsbjIpOworCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZkbG4yLT5ncGlvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgZ3BpbyBjaGlwOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gZ3Bpb2NoaXBfaXJxY2hpcF9hZGQoJmRsbjItPmdwaW8sICZkbG4yX2dwaW9faXJxY2hpcCwgMCwKKwkJCQkgICBoYW5kbGVfc2ltcGxlX2lycSwgSVJRX1RZUEVfTk9ORSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIGlycSBjaGlwOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfZ3Bpb2NoaXBfcmVtb3ZlOworCX0KKworCXJldCA9IGRsbjJfcmVnaXN0ZXJfZXZlbnRfY2IocGRldiwgRExOMl9HUElPX0NPTkRJVElPTl9NRVRfRVYsCisJCQkJICAgICBkbG4yX2dwaW9fZXZlbnQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgZXZlbnQgY2I6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dF9ncGlvY2hpcF9yZW1vdmU7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9ncGlvY2hpcF9yZW1vdmU6CisJZ3Bpb2NoaXBfcmVtb3ZlKCZkbG4yLT5ncGlvKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwlkbG4yX3VucmVnaXN0ZXJfZXZlbnRfY2IocGRldiwgRExOMl9HUElPX0NPTkRJVElPTl9NRVRfRVYpOworCWZvciAoaSA9IDA7IGkgPCBkbG4yLT5ncGlvLm5ncGlvOyBpKyspCisJCWZsdXNoX3dvcmsoJmRsbjItPmlycV93b3JrW2ldLndvcmspOworCWdwaW9jaGlwX3JlbW92ZSgmZGxuMi0+Z3Bpbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGxuMl9ncGlvX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUJPSAiZGxuMi1ncGlvIiwKKwkucHJvYmUJCT0gZGxuMl9ncGlvX3Byb2JlLAorCS5yZW1vdmUJCT0gZGxuMl9ncGlvX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZGxuMl9ncGlvX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkRhbmllbCBCYWx1dGEgPGRhbmllbC5iYWx1dGFAaW50ZWwuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIERpb2xhbiBETE4yIEdQSU8gaW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRsbjItZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tdGMzNTg5eC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tdGMzNTg5eC5jCmluZGV4IGFlMGY2NDYuLmFiZGNmNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXRjMzU4OXguYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby10YzM1ODl4LmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCXRjMzU4OXhfZ3Bpby0+Y2hpcCA9IHRlbXBsYXRlX2NoaXA7CiAJdGMzNTg5eF9ncGlvLT5jaGlwLm5ncGlvID0gdGMzNTg5eC0+bnVtX2dwaW87CiAJdGMzNTg5eF9ncGlvLT5jaGlwLmRldiA9ICZwZGV2LT5kZXY7Ci0JdGMzNTg5eF9ncGlvLT5jaGlwLmJhc2UgPSAocGRhdGEpID8gcGRhdGEtPmdwaW9fYmFzZSA6IC0xOworCXRjMzU4OXhfZ3Bpby0+Y2hpcC5iYXNlID0gLTE7CiAKICNpZmRlZiBDT05GSUdfT0ZfR1BJTwogCXRjMzU4OXhfZ3Bpby0+Y2hpcC5vZl9ub2RlID0gbnA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKaW5kZXggYzU3NDY2ZS4uZTVjNGM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuYwpAQCAtNDk1LDYgKzQ5NSwxMiBAQAogCiAJbXV0ZXhfbG9jaygmZHJtX2NvbXBvbmVudF9sb2NrKTsKIAorCS8qIERvIG5vdCByZXRyeSB0byBwcm9iZSBpZiB0aGVyZSBpcyBubyBhbnkga21zIGRyaXZlciByZWdpdGVyZWQuICovCisJaWYgKGxpc3RfZW1wdHkoJmRybV9jb21wb25lbnRfbGlzdCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkcm1fY29tcG9uZW50X2xvY2spOworCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNkZXYsICZkcm1fY29tcG9uZW50X2xpc3QsIGxpc3QpIHsKIAkJLyoKIAkJICogQWRkIGNvbXBvbmVudHMgdG8gbWFzdGVyIG9ubHkgaW4gY2FzZSB0aGF0IGNydGMgYW5kCkBAIC01ODUsMTAgKzU5MSwyMSBAQAogCQlnb3RvIGVycl91bnJlZ2lzdGVyX21peGVyX2RydjsKICNlbmRpZgogCisJbWF0Y2ggPSBleHlub3NfZHJtX21hdGNoX2FkZCgmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKG1hdGNoKSkgeworCQlyZXQgPSBQVFJfRVJSKG1hdGNoKTsKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9oZG1pX2RydjsKKwl9CisKKwlyZXQgPSBjb21wb25lbnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKCZwZGV2LT5kZXYsICZleHlub3NfZHJtX29wcywKKwkJCQkJCW1hdGNoKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9oZG1pX2RydjsKKwogI2lmZGVmIENPTkZJR19EUk1fRVhZTk9TX0cyRAogCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZzJkX2RyaXZlcik7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX3VucmVnaXN0ZXJfaGRtaV9kcnY7CisJCWdvdG8gZXJyX2RlbF9jb21wb25lbnRfbWFzdGVyOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRFJNX0VYWU5PU19GSU1DCkBAIC02MTksMjMgKzYzNiw5IEBACiAJCWdvdG8gZXJyX3VucmVnaXN0ZXJfaXBwX2RydjsKICNlbmRpZgogCi0JbWF0Y2ggPSBleHlub3NfZHJtX21hdGNoX2FkZCgmcGRldi0+ZGV2KTsKLQlpZiAoSVNfRVJSKG1hdGNoKSkgewotCQlyZXQgPSBQVFJfRVJSKG1hdGNoKTsKLQkJZ290byBlcnJfdW5yZWdpc3Rlcl9yZXNvdXJjZXM7Ci0JfQotCi0JcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaCgmcGRldi0+ZGV2LCAmZXh5bm9zX2RybV9vcHMsCi0JCQkJCQltYXRjaCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX3VucmVnaXN0ZXJfcmVzb3VyY2VzOwotCiAJcmV0dXJuIHJldDsKIAotZXJyX3VucmVnaXN0ZXJfcmVzb3VyY2VzOgotCiAjaWZkZWYgQ09ORklHX0RSTV9FWFlOT1NfSVBQCi0JZXh5bm9zX3BsYXRmb3JtX2RldmljZV9pcHBfdW5yZWdpc3RlcigpOwogZXJyX3VucmVnaXN0ZXJfaXBwX2RydjoKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXBwX2RyaXZlcik7CiBlcnJfdW5yZWdpc3Rlcl9nc2NfZHJ2OgpAQCAtNjU4LDkgKzY2MSwxMSBAQAogCiAjaWZkZWYgQ09ORklHX0RSTV9FWFlOT1NfRzJECiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmcyZF9kcml2ZXIpOwotZXJyX3VucmVnaXN0ZXJfaGRtaV9kcnY6CitlcnJfZGVsX2NvbXBvbmVudF9tYXN0ZXI6CiAjZW5kaWYKKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmZXh5bm9zX2RybV9vcHMpOwogCitlcnJfdW5yZWdpc3Rlcl9oZG1pX2RydjoKICNpZmRlZiBDT05GSUdfRFJNX0VYWU5PU19IRE1JCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhkbWlfZHJpdmVyKTsKIGVycl91bnJlZ2lzdGVyX21peGVyX2RydjoKQEAgLTc0MSw2ICs3NDYsMTggQEAKIHsKIAlpbnQgcmV0OwogCisJLyoKKwkgKiBSZWdpc3RlciBkZXZpY2Ugb2JqZWN0IG9ubHkgaW4gY2FzZSBvZiBFeHlub3MgU29DLgorCSAqCisJICogQmVsb3cgY29kZXMgcmVzb2x2ZXMgdGVtcG9yYXJpbHkgaW5maW5pdGUgbG9vcCBpc3N1ZSBpbmN1cnJlZAorCSAqIGJ5IEV4eW5vcyBkcm0gZHJpdmVyIHdoZW4gdXNpbmcgbXVsdGktcGxhdGZvcm0ga2VybmVsLgorCSAqIFNvIHRoZXNlIGNvZGVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBtb3JlIGdlbmVyaWMgd2F5IGxhdGVyLgorCSAqLworCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczMiKSAmJgorCQkJIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M0IikgJiYKKwkJCSFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInNhbXN1bmcsZXh5bm9zNSIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWV4eW5vc19kcm1fcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImV4eW5vcy1kcm0iLCAtMSwKIAkJCQkJCQkJTlVMTCwgMCk7CiAJaWYgKElTX0VSUihleHlub3NfZHJtX3BkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jCmluZGV4IGRmN2E3N2QuLjZmZjg1OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMKQEAgLTMwMiw5ICszMDIsMTIgQEAKIAlzdHJ1Y3QgZXh5bm9zX2RybV9zdWJkcnYgKnN1YmRydiA9ICZnMmQtPnN1YmRydjsKIAogCWtmcmVlKGcyZC0+Y21kbGlzdF9ub2RlKTsKLQlkbWFfZnJlZV9hdHRycyhzdWJkcnYtPmRybV9kZXYtPmRldiwgRzJEX0NNRExJU1RfUE9PTF9TSVpFLAotCQkJZzJkLT5jbWRsaXN0X3Bvb2xfdmlydCwKLQkJCWcyZC0+Y21kbGlzdF9wb29sLCAmZzJkLT5jbWRsaXN0X2RtYV9hdHRycyk7CisKKwlpZiAoZzJkLT5jbWRsaXN0X3Bvb2xfdmlydCAmJiBnMmQtPmNtZGxpc3RfcG9vbCkgeworCQlkbWFfZnJlZV9hdHRycyhzdWJkcnYtPmRybV9kZXYtPmRldiwgRzJEX0NNRExJU1RfUE9PTF9TSVpFLAorCQkJCWcyZC0+Y21kbGlzdF9wb29sX3ZpcnQsCisJCQkJZzJkLT5jbWRsaXN0X3Bvb2wsICZnMmQtPmNtZGxpc3RfZG1hX2F0dHJzKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZzJkX2NtZGxpc3Rfbm9kZSAqZzJkX2dldF9jbWRsaXN0KHN0cnVjdCBnMmRfZGF0YSAqZzJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggMTQwM2IwMS4uMzE4YWRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xNjcwLDE3ICsxNjcwLDE5IEBACiAJCWdvdG8gb3V0X3JlZ3M7CiAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlyZXQgPSBpOTE1X2tpY2tfb3V0X3ZnYWNvbihkZXZfcHJpdik7Ci0JCWlmIChyZXQpIHsKLQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlbW92ZSBjb25mbGljdGluZyBWR0EgY29uc29sZVxuIik7Ci0JCQlnb3RvIG91dF9ndHQ7Ci0JCX0KLQorCQkvKiBXQVJOSU5HOiBBcHBhcmVudGx5IHdlIG11c3Qga2ljayBmYmRldiBkcml2ZXJzIGJlZm9yZSB2Z2Fjb24sCisJCSAqIG90aGVyd2lzZSB0aGUgdmdhIGZiZGV2IGRyaXZlciBmYWxscyBvdmVyLiAqLwogCQlyZXQgPSBpOTE1X2tpY2tfb3V0X2Zpcm13YXJlX2ZiKGRldl9wcml2KTsKIAkJaWYgKHJldCkgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVtb3ZlIGNvbmZsaWN0aW5nIGZyYW1lYnVmZmVyIGRyaXZlcnNcbiIpOwogCQkJZ290byBvdXRfZ3R0OwogCQl9CisKKwkJcmV0ID0gaTkxNV9raWNrX291dF92Z2Fjb24oZGV2X3ByaXYpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byByZW1vdmUgY29uZmxpY3RpbmcgVkdBIGNvbnNvbGVcbiIpOworCQkJZ290byBvdXRfZ3R0OworCQl9CiAJfQogCiAJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDA1NWQ1ZTcuLjIzMThiNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtOTg2LDYgKzk4NiwxNSBAQAogCXJldHVybiBpOTE1X2RybV9mcmVlemUoZHJtX2Rldik7CiB9CiAKK3N0YXRpYyBpbnQgaTkxNV9wbV9mcmVlemVfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHJtX2Rldi0+ZGV2X3ByaXZhdGU7CisKKwlyZXR1cm4gaW50ZWxfc3VzcGVuZF9jb21wbGV0ZShkZXZfcHJpdik7Cit9CisKIHN0YXRpYyBpbnQgaTkxNV9wbV90aGF3X2Vhcmx5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKQEAgLTE1NzAsNiArMTU3OSw3IEBACiAJLnJlc3VtZV9lYXJseSA9IGk5MTVfcG1fcmVzdW1lX2Vhcmx5LAogCS5yZXN1bWUgPSBpOTE1X3BtX3Jlc3VtZSwKIAkuZnJlZXplID0gaTkxNV9wbV9mcmVlemUsCisJLmZyZWV6ZV9sYXRlID0gaTkxNV9wbV9mcmVlemVfbGF0ZSwKIAkudGhhd19lYXJseSA9IGk5MTVfcG1fdGhhd19lYXJseSwKIAkudGhhdyA9IGk5MTVfcG1fdGhhdywKIAkucG93ZXJvZmYgPSBpOTE1X3BtX3Bvd2Vyb2ZmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwppbmRleCBiNjcyYjg0Li43Mjg5MzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtMTkwMiw2ICsxOTAyLDIyIEBACiAJICAgICAgR0VOOF9QUEFUKDYsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgyKSkgfAogCSAgICAgIEdFTjhfUFBBVCg3LCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMykpOwogCisJaWYgKCFVU0VTX1BQR1RUKGRldl9wcml2LT5kZXYpKQorCQkvKiBTcGVjOiAiRm9yIEdHVFQsIHRoZXJlIGlzIE5PIHBhdF9zZWxbMjowXSBmcm9tIHRoZSBlbnRyeSwKKwkJICogc28gUlRMIHdpbGwgYWx3YXlzIHVzZSB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0bworCQkgKiBwYXRfc2VsID0gMDAwIi4KKwkJICogU28gbGV0J3MgZGlzYWJsZSBjYWNoZSBmb3IgR0dUVCB0byBhdm9pZCBzY3JlZW4gY29ycnVwdGlvbnMuCisJCSAqIE1PQ1Mgc3RpbGwgY2FuIGJlIHVzZWQgdGhvdWdoLgorCQkgKiAtIFN5c3RlbSBhZ2VudCBnZ3R0IHdyaXRlcyAoaS5lLiBjcHUgZ3R0IG1tYXBzKSBhbHJlYWR5IHdvcmsKKwkJICogYmVmb3JlIHRoaXMgcGF0Y2gsIGkuZS4gdGhlIHNhbWUgdW5jYWNoZWQgKyBzbm9vcGluZyBhY2Nlc3MKKwkJICogbGlrZSBvbiBnZW42Lzcgc2VlbXMgdG8gYmUgaW4gZWZmZWN0LgorCQkgKiAtIFNvIHRoaXMganVzdCBmaXhlcyBibGl0dGVyL3JlbmRlciBhY2Nlc3MuIEFnYWluIGl0IGxvb2tzCisJCSAqIGxpa2UgaXQncyBub3QganVzdCB1bmNhY2hlZCBhY2Nlc3MsIGJ1dCB1bmNhY2hlZCArIHNub29waW5nLgorCQkgKiBTbyB3ZSBjYW4gc3RpbGwgaG9sZCBvbnRvIGFsbCBvdXIgYXNzdW1wdGlvbnMgd3J0IGNwdQorCQkgKiBjbGZsdXNoaW5nIG9uIExMQyBtYWNoaW5lcy4KKwkJICovCisJCXBhdCA9IEdFTjhfUFBBVCgwLCBHRU44X1BQQVRfVUMpOworCiAJLyogWFhYOiBzcGVjIGRlZmluZXMgdGhpcyBhcyAyIGRpc3RpbmN0IHJlZ2lzdGVycy4gSXQncyB1bmNsZWFyIGlmIGEgNjRiCiAJICogd3JpdGUgd291bGQgd29yay4gKi8KIAlJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVQsIHBhdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCmluZGV4IDJjZWZiNTkuLjJiMWVhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC0zNjQsMjIgKzM2NCw5IEBACiAJCSAqIGhhcyB0byBhbHNvIGluY2x1ZGUgdGhlIHVuZmVuY2VkIHJlZ2lzdGVyIHRoZSBHUFUgdXNlcwogCQkgKiB3aGlsc3QgZXhlY3V0aW5nIGEgZmVuY2VkIGNvbW1hbmQgZm9yIGFuIHVudGlsZWQgb2JqZWN0LgogCQkgKi8KLQotCQlvYmotPm1hcF9hbmRfZmVuY2VhYmxlID0KLQkJCSFpOTE1X2dlbV9vYmpfZ2d0dF9ib3VuZChvYmopIHx8Ci0JCQkoaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgKwotCQkJIG9iai0+YmFzZS5zaXplIDw9IGRldl9wcml2LT5ndHQubWFwcGFibGVfZW5kICYmCi0JCQkgaTkxNV9nZW1fb2JqZWN0X2ZlbmNlX29rKG9iaiwgYXJncy0+dGlsaW5nX21vZGUpKTsKLQotCQkvKiBSZWJpbmQgaWYgd2UgbmVlZCBhIGNoYW5nZSBvZiBhbGlnbm1lbnQgKi8KLQkJaWYgKCFvYmotPm1hcF9hbmRfZmVuY2VhYmxlKSB7Ci0JCQl1MzIgdW5mZW5jZWRfYWxpZ24gPQotCQkJCWk5MTVfZ2VtX2dldF9ndHRfYWxpZ25tZW50KGRldiwgb2JqLT5iYXNlLnNpemUsCi0JCQkJCQkJICAgIGFyZ3MtPnRpbGluZ19tb2RlLAotCQkJCQkJCSAgICBmYWxzZSk7Ci0JCQlpZiAoaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgJiAodW5mZW5jZWRfYWxpZ24gLSAxKSkKLQkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF91bmJpbmQob2JqKTsKLQkJfQorCQlpZiAob2JqLT5tYXBfYW5kX2ZlbmNlYWJsZSAmJgorCQkgICAgIWk5MTVfZ2VtX29iamVjdF9mZW5jZV9vayhvYmosIGFyZ3MtPnRpbGluZ19tb2RlKSkKKwkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3VuYmluZChvYmopOwogCiAJCWlmIChyZXQgPT0gMCkgewogCQkJb2JqLT5mZW5jZV9kaXJ0eSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggZjBhMWE1Ni4uOWNiNWM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtNDMyNSw3ICs0MzI1LDYgQEAKIAkJaXJvbmxha2VfZmRpX2Rpc2FibGUoY3J0Yyk7CiAKIAkJaXJvbmxha2VfZGlzYWJsZV9wY2hfdHJhbnNjb2RlcihkZXZfcHJpdiwgcGlwZSk7Ci0JCWludGVsX3NldF9wY2hfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2LCBwaXBlLCB0cnVlKTsKIAogCQlpZiAoSEFTX1BDSF9DUFQoZGV2KSkgewogCQkJLyogZGlzYWJsZSBUUkFOU19EUF9DVEwgKi8KQEAgLTQzODksNyArNDM4OCw2IEBACiAKIAlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLmhhc19wY2hfZW5jb2RlcikgewogCQlscHRfZGlzYWJsZV9wY2hfdHJhbnNjb2RlcihkZXZfcHJpdik7Ci0JCWludGVsX3NldF9wY2hfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2LCBUUkFOU0NPREVSX0EsIHRydWUpOwogCQlpbnRlbF9kZGlfZmRpX2Rpc2FibGUoY3J0Yyk7CiAJfQogCkBAIC05NDA4LDYgKzk0MDYsMTAgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWlmIChpOTE1X3Jlc2V0X2luX3Byb2dyZXNzKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKSB8fAorCSAgICBjcnRjLT5yZXNldF9jb3VudGVyICE9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpKQorCQlyZXR1cm4gdHJ1ZTsKKwogCS8qCiAJICogVGhlIHJlbGV2YW50IHJlZ2lzdGVycyBkb2VuJ3QgZXhpc3Qgb24gcHJlLWN0Zy4KIAkgKiBBcyB0aGUgZmxpcCBkb25lIGludGVycnVwdCBkb2Vzbid0IHRyaWdnZXIgZm9yIG1taW8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IDVhZDQ1YmYuLjRiY2Q5MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtNDQ1MCw2ICs0NDUwLDcgQEAKIAkgKiB2ZGQgbWlnaHQgc3RpbGwgYmUgZW5hYmxlZCBkbyB0byB0aGUgZGVsYXllZCB2ZGQgb2ZmLgogCSAqIE1ha2Ugc3VyZSB2ZGQgaXMgYWN0dWFsbHkgdHVybmVkIG9mZiBoZXJlLgogCSAqLworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaW50ZWxfZHAtPnBhbmVsX3ZkZF93b3JrKTsKIAlwcHNfbG9jayhpbnRlbF9kcCk7CiAJZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhpbnRlbF9kcCk7CiAJcHBzX3VubG9jayhpbnRlbF9kcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggYTZiZDE0Mi4uYzBiYmYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtODk5LDYgKzg5OSwxNyBAQAogCWludCBwaXBlOwogCXU4IHBpbjsKIAorCS8qCisJICogVW5sb2NrIHJlZ2lzdGVycyBhbmQganVzdCBsZWF2ZSB0aGVtIHVubG9ja2VkLiBEbyB0aGlzIGJlZm9yZQorCSAqIGNoZWNraW5nIHF1aXJrIGxpc3RzIHRvIGF2b2lkIGJvZ3VzIFdBUk5JTkdzLgorCSAqLworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKKwkJSTkxNV9XUklURShQQ0hfUFBfQ09OVFJPTCwKKwkJCSAgIEk5MTVfUkVBRChQQ0hfUFBfQ09OVFJPTCkgfCBQQU5FTF9VTkxPQ0tfUkVHUyk7CisJfSBlbHNlIHsKKwkJSTkxNV9XUklURShQUF9DT05UUk9MLAorCQkJICAgSTkxNV9SRUFEKFBQX0NPTlRST0wpIHwgUEFORUxfVU5MT0NLX1JFR1MpOworCX0KIAlpZiAoIWludGVsX2x2ZHNfc3VwcG9ydGVkKGRldikpCiAJCXJldHVybjsKIApAQCAtMTA5NywxNyArMTEwOCw2IEBACiAJbHZkc19lbmNvZGVyLT5hM19wb3dlciA9IEk5MTVfUkVBRChsdmRzX2VuY29kZXItPnJlZykgJgogCQkJCSBMVkRTX0EzX1BPV0VSX01BU0s7CiAKLQkvKgotCSAqIFVubG9jayByZWdpc3RlcnMgYW5kIGp1c3QKLQkgKiBsZWF2ZSB0aGVtIHVubG9ja2VkCi0JICovCi0JaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewotCQlJOTE1X1dSSVRFKFBDSF9QUF9DT05UUk9MLAotCQkJICAgSTkxNV9SRUFEKFBDSF9QUF9DT05UUk9MKSB8IFBBTkVMX1VOTE9DS19SRUdTKTsKLQl9IGVsc2UgewotCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsCi0JCQkgICBJOTE1X1JFQUQoUFBfQ09OVFJPTCkgfCBQQU5FTF9VTkxPQ0tfUkVHUyk7Ci0JfQogCWx2ZHNfY29ubmVjdG9yLT5saWRfbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IGludGVsX2xpZF9ub3RpZnk7CiAJaWYgKGFjcGlfbGlkX25vdGlmaWVyX3JlZ2lzdGVyKCZsdmRzX2Nvbm5lY3Rvci0+bGlkX25vdGlmaWVyKSkgewogCQlEUk1fREVCVUdfS01TKCJsaWQgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYwppbmRleCAwZTAxOGNiLi40MWIzYmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKQEAgLTEwOTgsMTIgKzEwOTgsMjUgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5iYXNlLmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9wYW5lbCAqcGFuZWwgPSAmY29ubmVjdG9yLT5wYW5lbDsKKwlpbnQgbWluOwogCiAJV0FSTl9PTihwYW5lbC0+YmFja2xpZ2h0Lm1heCA9PSAwKTsKIAorCS8qCisJICogWFhYOiBJZiB0aGUgdmJ0IHZhbHVlIGlzIDI1NSwgaXQgbWFrZXMgbWluIGVxdWFsIHRvIG1heCwgd2hpY2ggbGVhZHMKKwkgKiB0byBwcm9ibGVtcy4gVGhlcmUgYXJlIHN1Y2ggbWFjaGluZXMgb3V0IHRoZXJlLiBFaXRoZXIgb3VyCisJICogaW50ZXJwcmV0YXRpb24gaXMgd3Jvbmcgb3IgdGhlIHZidCBoYXMgYm9ndXMgZGF0YS4gT3IgYm90aC4gU2FmZWd1YXJkCisJICogYWdhaW5zdCB0aGlzIGJ5IGxldHRpbmcgdGhlIG1pbmltdW0gYmUgYXQgbW9zdCAoYXJiaXRyYXJpbHkgY2hvc2VuKQorCSAqIDI1JSBvZiB0aGUgbWF4LgorCSAqLworCW1pbiA9IGNsYW1wX3QoaW50LCBkZXZfcHJpdi0+dmJ0LmJhY2tsaWdodC5taW5fYnJpZ2h0bmVzcywgMCwgNjQpOworCWlmIChtaW4gIT0gZGV2X3ByaXYtPnZidC5iYWNrbGlnaHQubWluX2JyaWdodG5lc3MpIHsKKwkJRFJNX0RFQlVHX0tNUygiY2xhbXBpbmcgVkJUIG1pbiBiYWNrbGlnaHQgJWQvMjU1IHRvICVkLzI1NVxuIiwKKwkJCSAgICAgIGRldl9wcml2LT52YnQuYmFja2xpZ2h0Lm1pbl9icmlnaHRuZXNzLCBtaW4pOworCX0KKwogCS8qIHZidCB2YWx1ZSBpcyBhIGNvZWZmaWNpZW50IGluIHJhbmdlIFswLi4yNTVdICovCi0JcmV0dXJuIHNjYWxlKGRldl9wcml2LT52YnQuYmFja2xpZ2h0Lm1pbl9icmlnaHRuZXNzLCAwLCAyNTUsCi0JCSAgICAgMCwgcGFuZWwtPmJhY2tsaWdodC5tYXgpOworCXJldHVybiBzY2FsZShtaW4sIDAsIDI1NSwgMCwgcGFuZWwtPmJhY2tsaWdodC5tYXgpOwogfQogCiBzdGF0aWMgaW50IGJkd19zZXR1cF9iYWNrbGlnaHQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXggYzI3YjYxNC4uYWQyZmQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCkBAIC01NDY5LDExICs1NDY5LDYgQEAKIAlJOTE1X1dSSVRFKF8zRF9DSElDS0VOLAogCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU5fSElaX1BMQU5FX0RJU0FCTEVfTVNBQV80WF9TTkIpKTsKIAotCS8qIFdhU2V0dXBHdE1vZGVUZFJvd0Rpc3BhdGNoOnNuYiAqLwotCWlmIChJU19TTkJfR1QxKGRldikpCi0JCUk5MTVfV1JJVEUoR0VONl9HVF9NT0RFLAotCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjZfVERfRk9VUl9ST1dfRElTUEFUQ0hfRElTQUJMRSkpOwotCiAJLyogV2FEaXNhYmxlX1JlbmRlckNhY2hlX09wZXJhdGlvbmFsRmx1c2g6c25iICovCiAJSTkxNV9XUklURShDQUNIRV9NT0RFXzAsIF9NQVNLRURfQklUX0RJU0FCTEUoUkNfT1BfRkxVU0hfRU5BQkxFKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2RldmljZS9udmMwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9kZXZpY2UvbnZjMC5jCmluZGV4IGNkMDU2NzcuLjcyYTQwZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2RldmljZS9udmMwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZGV2aWNlL252YzAuYwpAQCAtMjE4LDcgKzIxOCw2IEBACiAJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9CU1AgICAgXSA9ICZudmMwX2JzcF9vY2xhc3M7CiAJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9QUFAgICAgXSA9ICZudmMwX3BwcF9vY2xhc3M7CiAJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9DT1BZMCAgXSA9ICZudmMwX2NvcHkwX29jbGFzczsKLQkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX0NPUFkxICBdID0gJm52YzBfY29weTFfb2NsYXNzOwogCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfRElTUCAgIF0gPSAgbnZhM19kaXNwX29jbGFzczsKIAkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX1BFUkZNT05dID0gJm52YzBfcGVyZm1vbl9vY2xhc3M7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZmlmby9udjA0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9maWZvL252MDQuYwppbmRleCA1YWU2YTQzLi4xOTMxMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9maWZvL252MDQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9maWZvL252MDQuYwpAQCAtNTUxLDggKzU1MSw4IEBACiAJCQl9CiAKIAkJCWlmIChzdGF0dXMgJiAweDQwMDAwMDAwKSB7Ci0JCQkJbm91dmVhdV9maWZvX3VldmVudCgmcHJpdi0+YmFzZSk7CiAJCQkJbnZfd3IzMihwcml2LCAweDAwMjEwMCwgMHg0MDAwMDAwMCk7CisJCQkJbm91dmVhdV9maWZvX3VldmVudCgmcHJpdi0+YmFzZSk7CiAJCQkJc3RhdHVzICY9IH4weDQwMDAwMDAwOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9maWZvL252YzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2ZpZm8vbnZjMC5jCmluZGV4IDFmZTFmOGYuLjA3NGQ0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2ZpZm8vbnZjMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2ZpZm8vbnZjMC5jCkBAIC03NDAsNiArNzQwLDggQEAKIAl1MzIgaW50ZSA9IG52X3JkMzIocHJpdiwgMHgwMDI2MjgpOwogCXUzMiB1bmtuOwogCisJbnZfd3IzMihwcml2LCAweDAwMjVhOCArIChlbmduICogMHgwNCksIGludHIpOworCiAJZm9yICh1bmtuID0gMDsgdW5rbiA8IDg7IHVua24rKykgewogCQl1MzIgaW50cyA9IChpbnRyID4+ICh1bmtuICogMHgwNCkpICYgaW50ZTsKIAkJaWYgKGludHMgJiAweDEpIHsKQEAgLTc1MSw4ICs3NTMsNiBAQAogCQkJbnZfbWFzayhwcml2LCAweDAwMjYyOCwgaW50cywgMCk7CiAJCX0KIAl9Ci0KLQludl93cjMyKHByaXYsIDB4MDAyNWE4ICsgKGVuZ24gKiAweDA0KSwgaW50cik7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9maWZvL252ZTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2ZpZm8vbnZlMC5jCmluZGV4IGQyZjBmZDMuLmY4NzM0ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2ZpZm8vbnZlMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2ZpZm8vbnZlMC5jCkBAIC05NTIsOCArOTUyLDggQEAKIAl9CiAKIAlpZiAoc3RhdCAmIDB4ODAwMDAwMDApIHsKLQkJbnZlMF9maWZvX2ludHJfZW5naW5lKHByaXYpOwogCQludl93cjMyKHByaXYsIDB4MDAyMTAwLCAweDgwMDAwMDAwKTsKKwkJbnZlMF9maWZvX2ludHJfZW5naW5lKHByaXYpOwogCQlzdGF0ICY9IH4weDgwMDAwMDAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvZmIvZ2syMGEuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvc3ViZGV2L2ZiL2drMjBhLmMKaW5kZXggYTE2MDI0YS4uZmRlNDJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvZmIvZ2syMGEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL3N1YmRldi9mYi9nazIwYS5jCkBAIC0yNyw2ICsyNywyMCBAQAogfTsKIAogc3RhdGljIGludAorZ2syMGFfZmJfaW5pdChzdHJ1Y3Qgbm91dmVhdV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZ2syMGFfZmJfcHJpdiAqcHJpdiA9ICh2b2lkICopb2JqZWN0OworCWludCByZXQ7CisKKwlyZXQgPSBub3V2ZWF1X2ZiX2luaXQoJnByaXYtPmJhc2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwludl9tYXNrKHByaXYsIDB4MTAwYzgwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwKTsgLyogMTI4S2lCIGxwZyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBnazIwYV9mYl9jdG9yKHN0cnVjdCBub3V2ZWF1X29iamVjdCAqcGFyZW50LCBzdHJ1Y3Qgbm91dmVhdV9vYmplY3QgKmVuZ2luZSwKIAkgICAgIHN0cnVjdCBub3V2ZWF1X29jbGFzcyAqb2NsYXNzLCB2b2lkICpkYXRhLCB1MzIgc2l6ZSwKIAkgICAgIHN0cnVjdCBub3V2ZWF1X29iamVjdCAqKnBvYmplY3QpCkBAIC00OCw3ICs2Miw3IEBACiAJLmJhc2Uub2Z1bmNzID0gJihzdHJ1Y3Qgbm91dmVhdV9vZnVuY3MpIHsKIAkJLmN0b3IgPSBnazIwYV9mYl9jdG9yLAogCQkuZHRvciA9IF9ub3V2ZWF1X2ZiX2R0b3IsCi0JCS5pbml0ID0gX25vdXZlYXVfZmJfaW5pdCwKKwkJLmluaXQgPSBnazIwYV9mYl9pbml0LAogCQkuZmluaSA9IF9ub3V2ZWF1X2ZiX2ZpbmksCiAJfSwKIAkubWVtdHlwZSA9IG52YzBfZmJfbWVtdHlwZV92YWxpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jCmluZGV4IDU3MjM4MDcuLjYyYjk3YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYwpAQCAtNjI5LDcgKzYyOSw2IEBACiAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX2lnbm9yZV9ob3RwbHVnKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTkzMyw2ICs5MzIsNyBAQAogCXJldCA9IG5vdXZlYXVfZG9fc3VzcGVuZChkcm1fZGV2LCB0cnVlKTsKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX2lnbm9yZV9ob3RwbHVnKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzY29sZCk7CiAJZHJtX2Rldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9EWU5BTUlDX09GRjsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jCmluZGV4IDUxNWNkOWEuLmYzMmE0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMKQEAgLTUyLDIwICs1MiwyNCBAQAogCXJldHVybiBjb250YWluZXJfb2YoZmVuY2UtPmJhc2UubG9jaywgc3RydWN0IG5vdXZlYXVfZmVuY2VfY2hhbiwgbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBub3V2ZWF1X2ZlbmNlX3NpZ25hbChzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UpCiB7CisJaW50IGRyb3AgPSAwOworCiAJZmVuY2Vfc2lnbmFsX2xvY2tlZCgmZmVuY2UtPmJhc2UpOwogCWxpc3RfZGVsKCZmZW5jZS0+aGVhZCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGZlbmNlLT5jaGFubmVsLCBOVUxMKTsKIAogCWlmICh0ZXN0X2JpdChGRU5DRV9GTEFHX1VTRVJfQklUUywgJmZlbmNlLT5iYXNlLmZsYWdzKSkgewogCQlzdHJ1Y3Qgbm91dmVhdV9mZW5jZV9jaGFuICpmY3R4ID0gbm91dmVhdV9mY3R4KGZlbmNlKTsKIAogCQlpZiAoIS0tZmN0eC0+bm90aWZ5X3JlZikKLQkJCW52aWZfbm90aWZ5X3B1dCgmZmN0eC0+bm90aWZ5KTsKKwkJCWRyb3AgPSAxOwogCX0KIAogCWZlbmNlX3B1dCgmZmVuY2UtPmJhc2UpOworCXJldHVybiBkcm9wOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdXZlYXVfZmVuY2UgKgpAQCAtODgsMTYgKzkyLDIzIEBACiB7CiAJc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlOwogCi0JbnZpZl9ub3RpZnlfZmluaSgmZmN0eC0+bm90aWZ5KTsKLQogCXNwaW5fbG9ja19pcnEoJmZjdHgtPmxvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZmN0eC0+cGVuZGluZykpIHsKIAkJZmVuY2UgPSBsaXN0X2VudHJ5KGZjdHgtPnBlbmRpbmcubmV4dCwgdHlwZW9mKCpmZW5jZSksIGhlYWQpOwogCi0JCW5vdXZlYXVfZmVuY2Vfc2lnbmFsKGZlbmNlKTsKLQkJZmVuY2UtPmNoYW5uZWwgPSBOVUxMOworCQlpZiAobm91dmVhdV9mZW5jZV9zaWduYWwoZmVuY2UpKQorCQkJbnZpZl9ub3RpZnlfcHV0KCZmY3R4LT5ub3RpZnkpOwogCX0KIAlzcGluX3VubG9ja19pcnEoJmZjdHgtPmxvY2spOworCisJbnZpZl9ub3RpZnlfZmluaSgmZmN0eC0+bm90aWZ5KTsKKwlmY3R4LT5kZWFkID0gMTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgYWxsIGFjY2Vzc2VzIHRvIGZlbmNlLT5jaGFubmVsIGNvbXBsZXRlIGJlZm9yZSBmcmVlaW5nCisJICogdGhlIGNoYW5uZWwuCisJICovCisJc3luY2hyb25pemVfcmN1KCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTIsMjEgKzEyMywyMyBAQAogCWtyZWZfcHV0KCZmY3R4LT5mZW5jZV9yZWYsIG5vdXZlYXVfZmVuY2VfY29udGV4dF9wdXQpOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogbm91dmVhdV9mZW5jZV91cGRhdGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgc3RydWN0IG5vdXZlYXVfZmVuY2VfY2hhbiAqZmN0eCkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2U7Ci0KKwlpbnQgZHJvcCA9IDA7CiAJdTMyIHNlcSA9IGZjdHgtPnJlYWQoY2hhbik7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmZjdHgtPnBlbmRpbmcpKSB7CiAJCWZlbmNlID0gbGlzdF9lbnRyeShmY3R4LT5wZW5kaW5nLm5leHQsIHR5cGVvZigqZmVuY2UpLCBoZWFkKTsKIAogCQlpZiAoKGludCkoc2VxIC0gZmVuY2UtPmJhc2Uuc2Vxbm8pIDwgMCkKLQkJCXJldHVybjsKKwkJCWJyZWFrOwogCi0JCW5vdXZlYXVfZmVuY2Vfc2lnbmFsKGZlbmNlKTsKKwkJZHJvcCB8PSBub3V2ZWF1X2ZlbmNlX3NpZ25hbChmZW5jZSk7CiAJfQorCisJcmV0dXJuIGRyb3A7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEzNSwxOCArMTQ4LDIxIEBACiAJc3RydWN0IG5vdXZlYXVfZmVuY2VfY2hhbiAqZmN0eCA9CiAJCWNvbnRhaW5lcl9vZihub3RpZnksIHR5cGVvZigqZmN0eCksIG5vdGlmeSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gTlZJRl9OT1RJRllfS0VFUDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZmY3R4LT5sb2NrLCBmbGFncyk7CiAJaWYgKCFsaXN0X2VtcHR5KCZmY3R4LT5wZW5kaW5nKSkgewogCQlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2U7CisJCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CiAKIAkJZmVuY2UgPSBsaXN0X2VudHJ5KGZjdHgtPnBlbmRpbmcubmV4dCwgdHlwZW9mKCpmZW5jZSksIGhlYWQpOwotCQlub3V2ZWF1X2ZlbmNlX3VwZGF0ZShmZW5jZS0+Y2hhbm5lbCwgZmN0eCk7CisJCWNoYW4gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGZlbmNlLT5jaGFubmVsLCBsb2NrZGVwX2lzX2hlbGQoJmZjdHgtPmxvY2spKTsKKwkJaWYgKG5vdXZlYXVfZmVuY2VfdXBkYXRlKGZlbmNlLT5jaGFubmVsLCBmY3R4KSkKKwkJCXJldCA9IE5WSUZfTk9USUZZX0RST1A7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjdHgtPmxvY2ssIGZsYWdzKTsKIAotCS8qIEFsd2F5cyByZXR1cm4ga2VlcCBoZXJlLiBOVklGIHJlZmNvdW50IGlzIGhhbmRsZWQgd2l0aCBub3V2ZWF1X2ZlbmNlX3VwZGF0ZSAqLwotCXJldHVybiBOVklGX05PVElGWV9LRUVQOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQKQEAgLTI2Miw3ICsyNzgsMTAgQEAKIAlpZiAoIXJldCkgewogCQlmZW5jZV9nZXQoJmZlbmNlLT5iYXNlKTsKIAkJc3Bpbl9sb2NrX2lycSgmZmN0eC0+bG9jayk7Ci0JCW5vdXZlYXVfZmVuY2VfdXBkYXRlKGNoYW4sIGZjdHgpOworCisJCWlmIChub3V2ZWF1X2ZlbmNlX3VwZGF0ZShjaGFuLCBmY3R4KSkKKwkJCW52aWZfbm90aWZ5X3B1dCgmZmN0eC0+bm90aWZ5KTsKKwogCQlsaXN0X2FkZF90YWlsKCZmZW5jZS0+aGVhZCwgJmZjdHgtPnBlbmRpbmcpOwogCQlzcGluX3VubG9ja19pcnEoJmZjdHgtPmxvY2spOwogCX0KQEAgLTI3NiwxMyArMjk1LDE2IEBACiAJaWYgKGZlbmNlLT5iYXNlLm9wcyA9PSAmbm91dmVhdV9mZW5jZV9vcHNfbGVnYWN5IHx8CiAJICAgIGZlbmNlLT5iYXNlLm9wcyA9PSAmbm91dmVhdV9mZW5jZV9vcHNfdWV2ZW50KSB7CiAJCXN0cnVjdCBub3V2ZWF1X2ZlbmNlX2NoYW4gKmZjdHggPSBub3V2ZWF1X2ZjdHgoZmVuY2UpOworCQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCWlmICh0ZXN0X2JpdChGRU5DRV9GTEFHX1NJR05BTEVEX0JJVCwgJmZlbmNlLT5iYXNlLmZsYWdzKSkKIAkJCXJldHVybiB0cnVlOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZmY3R4LT5sb2NrLCBmbGFncyk7Ci0JCW5vdXZlYXVfZmVuY2VfdXBkYXRlKGZlbmNlLT5jaGFubmVsLCBmY3R4KTsKKwkJY2hhbiA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZmVuY2UtPmNoYW5uZWwsIGxvY2tkZXBfaXNfaGVsZCgmZmN0eC0+bG9jaykpOworCQlpZiAoY2hhbiAmJiBub3V2ZWF1X2ZlbmNlX3VwZGF0ZShjaGFuLCBmY3R4KSkKKwkJCW52aWZfbm90aWZ5X3B1dCgmZmN0eC0+bm90aWZ5KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmN0eC0+bG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gZmVuY2VfaXNfc2lnbmFsZWQoJmZlbmNlLT5iYXNlKTsKQEAgLTM4NywxMiArNDA5LDE4IEBACiAKIAlpZiAoZmVuY2UgJiYgKCFleGNsdXNpdmUgfHwgIWZvYmogfHwgIWZvYmotPnNoYXJlZF9jb3VudCkpIHsKIAkJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqcHJldiA9IE5VTEw7CisJCWJvb2wgbXVzdF93YWl0ID0gdHJ1ZTsKIAogCQlmID0gbm91dmVhdV9sb2NhbF9mZW5jZShmZW5jZSwgY2hhbi0+ZHJtKTsKLQkJaWYgKGYpCi0JCQlwcmV2ID0gZi0+Y2hhbm5lbDsKKwkJaWYgKGYpIHsKKwkJCXJjdV9yZWFkX2xvY2soKTsKKwkJCXByZXYgPSByY3VfZGVyZWZlcmVuY2UoZi0+Y2hhbm5lbCk7CisJCQlpZiAocHJldiAmJiAocHJldiA9PSBjaGFuIHx8IGZjdHgtPnN5bmMoZiwgcHJldiwgY2hhbikgPT0gMCkpCisJCQkJbXVzdF93YWl0ID0gZmFsc2U7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJfQogCi0JCWlmICghcHJldiB8fCAocHJldiAhPSBjaGFuICYmIChyZXQgPSBmY3R4LT5zeW5jKGYsIHByZXYsIGNoYW4pKSkpCisJCWlmIChtdXN0X3dhaXQpCiAJCQlyZXQgPSBmZW5jZV93YWl0KGZlbmNlLCBpbnRyKTsKIAogCQlyZXR1cm4gcmV0OwpAQCAtNDAzLDE5ICs0MzEsMjIgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBmb2JqLT5zaGFyZWRfY291bnQgJiYgIXJldDsgKytpKSB7CiAJCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKnByZXYgPSBOVUxMOworCQlib29sIG11c3Rfd2FpdCA9IHRydWU7CiAKIAkJZmVuY2UgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGZvYmotPnNoYXJlZFtpXSwKIAkJCQkJCXJlc2VydmF0aW9uX29iamVjdF9oZWxkKHJlc3YpKTsKIAogCQlmID0gbm91dmVhdV9sb2NhbF9mZW5jZShmZW5jZSwgY2hhbi0+ZHJtKTsKLQkJaWYgKGYpCi0JCQlwcmV2ID0gZi0+Y2hhbm5lbDsKKwkJaWYgKGYpIHsKKwkJCXJjdV9yZWFkX2xvY2soKTsKKwkJCXByZXYgPSByY3VfZGVyZWZlcmVuY2UoZi0+Y2hhbm5lbCk7CisJCQlpZiAocHJldiAmJiAocHJldiA9PSBjaGFuIHx8IGZjdHgtPnN5bmMoZiwgcHJldiwgY2hhbikgPT0gMCkpCisJCQkJbXVzdF93YWl0ID0gZmFsc2U7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJfQogCi0JCWlmICghcHJldiB8fCAocHJldiAhPSBjaGFuICYmIChyZXQgPSBmY3R4LT5zeW5jKGYsIHByZXYsIGNoYW4pKSkpCisJCWlmIChtdXN0X3dhaXQpCiAJCQlyZXQgPSBmZW5jZV93YWl0KGZlbmNlLCBpbnRyKTsKLQotCQlpZiAocmV0KQotCQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTQ2Myw3ICs0OTQsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSA9IGZyb21fZmVuY2UoZik7CiAJc3RydWN0IG5vdXZlYXVfZmVuY2VfY2hhbiAqZmN0eCA9IG5vdXZlYXVfZmN0eChmZW5jZSk7CiAKLQlyZXR1cm4gZmVuY2UtPmNoYW5uZWwgPyBmY3R4LT5uYW1lIDogImRlYWQgY2hhbm5lbCI7CisJcmV0dXJuICFmY3R4LT5kZWFkID8gZmN0eC0+bmFtZSA6ICJkZWFkIGNoYW5uZWwiOwogfQogCiAvKgpAQCAtNDc2LDkgKzUwNywxNiBAQAogewogCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSA9IGZyb21fZmVuY2UoZik7CiAJc3RydWN0IG5vdXZlYXVfZmVuY2VfY2hhbiAqZmN0eCA9IG5vdXZlYXVfZmN0eChmZW5jZSk7Ci0Jc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IGZlbmNlLT5jaGFubmVsOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CisJYm9vbCByZXQgPSBmYWxzZTsKIAotCXJldHVybiAoaW50KShmY3R4LT5yZWFkKGNoYW4pIC0gZmVuY2UtPmJhc2Uuc2Vxbm8pID49IDA7CisJcmN1X3JlYWRfbG9jaygpOworCWNoYW4gPSByY3VfZGVyZWZlcmVuY2UoZmVuY2UtPmNoYW5uZWwpOworCWlmIChjaGFuKQorCQlyZXQgPSAoaW50KShmY3R4LT5yZWFkKGNoYW4pIC0gZmVuY2UtPmJhc2Uuc2Vxbm8pID49IDA7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgYm9vbCBub3V2ZWF1X2ZlbmNlX25vX3NpZ25hbGluZyhzdHJ1Y3QgZmVuY2UgKmYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmgKaW5kZXggOTQzYjBiMS4uOTZlNDYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuaApAQCAtMTQsNyArMTQsNyBAQAogCiAJYm9vbCBzeXNtZW07CiAKLQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgX19yY3UgKmNoYW5uZWw7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogfTsKIApAQCAtNDcsNyArNDcsNyBAQAogCWNoYXIgbmFtZVszMl07CiAKIAlzdHJ1Y3QgbnZpZl9ub3RpZnkgbm90aWZ5OwotCWludCBub3RpZnlfcmVmOworCWludCBub3RpZnlfcmVmLCBkZWFkOwogfTsKIAogc3RydWN0IG5vdXZlYXVfZmVuY2VfcHJpdiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jCmluZGV4IGFlODczZDEuLmViOGIzNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jCkBAIC03OTEsNiArNzkxLDIyIEBACiB9CiAKIHN0YXRpYyBpbnQKK252NTBfY3J0Y19zZXRfcmFzdGVyX3ZibGFua19kbWkoc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YywgdTMyIHVzZWMpCit7CisJc3RydWN0IG52NTBfbWFzdCAqbWFzdCA9IG52NTBfbWFzdChudl9jcnRjLT5iYXNlLmRldik7CisJdTMyICpwdXNoOworCisJcHVzaCA9IGV2b193YWl0KG1hc3QsIDgpOworCWlmICghcHVzaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlldm9fbXRoZChwdXNoLCAweDA4MjggKyAobnZfY3J0Yy0+aW5kZXggKiAweDQwMCksIDEpOworCWV2b19kYXRhKHB1c2gsIHVzZWMpOworCWV2b19raWNrKHB1c2gsIG1hc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBudjUwX2NydGNfc2V0X2NvbG9yX3ZpYnJhbmNlKHN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMsIGJvb2wgdXBkYXRlKQogewogCXN0cnVjdCBudjUwX21hc3QgKm1hc3QgPSBudjUwX21hc3QobnZfY3J0Yy0+YmFzZS5kZXYpOwpAQCAtMTEwNCwxNCArMTEyMCwxNCBAQAogCQkJZXZvX210aGQocHVzaCwgMHgwODA0ICsgKG52X2NydGMtPmluZGV4ICogMHg0MDApLCAyKTsKIAkJCWV2b19kYXRhKHB1c2gsIDB4MDA4MDAwMDAgfCBtb2RlLT5jbG9jayk7CiAJCQlldm9fZGF0YShwdXNoLCAoaWxhY2UgPT0gMikgPyAyIDogMCk7Ci0JCQlldm9fbXRoZChwdXNoLCAweDA4MTAgKyAobnZfY3J0Yy0+aW5kZXggKiAweDQwMCksIDgpOworCQkJZXZvX210aGQocHVzaCwgMHgwODEwICsgKG52X2NydGMtPmluZGV4ICogMHg0MDApLCA2KTsKIAkJCWV2b19kYXRhKHB1c2gsIDB4MDAwMDAwMDApOwogCQkJZXZvX2RhdGEocHVzaCwgKHZhY3RpdmUgPDwgMTYpIHwgaGFjdGl2ZSk7CiAJCQlldm9fZGF0YShwdXNoLCAoIHZzeW5jZSA8PCAxNikgfCBoc3luY2UpOwogCQkJZXZvX2RhdGEocHVzaCwgKHZibGFua2UgPDwgMTYpIHwgaGJsYW5rZSk7CiAJCQlldm9fZGF0YShwdXNoLCAodmJsYW5rcyA8PCAxNikgfCBoYmxhbmtzKTsKIAkJCWV2b19kYXRhKHB1c2gsICh2YmxhbjJlIDw8IDE2KSB8IHZibGFuMnMpOwotCQkJZXZvX2RhdGEocHVzaCwgdmJsYW5rdXMpOworCQkJZXZvX210aGQocHVzaCwgMHgwODJjICsgKG52X2NydGMtPmluZGV4ICogMHg0MDApLCAxKTsKIAkJCWV2b19kYXRhKHB1c2gsIDB4MDAwMDAwMDApOwogCQkJZXZvX210aGQocHVzaCwgMHgwOTAwICsgKG52X2NydGMtPmluZGV4ICogMHg0MDApLCAyKTsKIAkJCWV2b19kYXRhKHB1c2gsIDB4MDAwMDAzMTEpOwpAQCAtMTE0MSw2ICsxMTU3LDExIEBACiAJbnZfY29ubmVjdG9yID0gbm91dmVhdV9jcnRjX2Nvbm5lY3Rvcl9nZXQobnZfY3J0Yyk7CiAJbnY1MF9jcnRjX3NldF9kaXRoZXIobnZfY3J0YywgZmFsc2UpOwogCW52NTBfY3J0Y19zZXRfc2NhbGUobnZfY3J0YywgZmFsc2UpOworCisJLyogRzk0IG9ubHkgYWNjZXB0cyB0aGlzIGFmdGVyIHNldHRpbmcgc2NhbGUgKi8KKwlpZiAobnY1MF92ZXJzKG1hc3QpIDwgR0YxMTBfRElTUF9DT1JFX0NIQU5ORUxfRE1BKQorCQludjUwX2NydGNfc2V0X3Jhc3Rlcl92YmxhbmtfZG1pKG52X2NydGMsIHZibGFua3VzKTsKKwogCW52NTBfY3J0Y19zZXRfY29sb3JfdmlicmFuY2UobnZfY3J0YywgZmFsc2UpOwogCW52NTBfY3J0Y19zZXRfaW1hZ2UobnZfY3J0YywgY3J0Yy0+cHJpbWFyeS0+ZmIsIHgsIHksIGZhbHNlKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKaW5kZXggMTVkYTdlZi4uZWMxNTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKQEAgLTEyMTcsNyArMTIxNyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGF0b21fZXhlY3V0ZV90YWJsZShzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDMyX3QgKiBwYXJhbXMpCitpbnQgYXRvbV9leGVjdXRlX3RhYmxlX3NjcmF0Y2hfdW5sb2NrZWQoc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgaW5kZXgsIHVpbnQzMl90ICogcGFyYW1zKQogewogCWludCByOwogCkBAIC0xMjM4LDYgKzEyMzgsMTUgQEAKIAlyZXR1cm4gcjsKIH0KIAoraW50IGF0b21fZXhlY3V0ZV90YWJsZShzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDMyX3QgKiBwYXJhbXMpCit7CisJaW50IHI7CisJbXV0ZXhfbG9jaygmY3R4LT5zY3JhdGNoX211dGV4KTsKKwlyID0gYXRvbV9leGVjdXRlX3RhYmxlX3NjcmF0Y2hfdW5sb2NrZWQoY3R4LCBpbmRleCwgcGFyYW1zKTsKKwltdXRleF91bmxvY2soJmN0eC0+c2NyYXRjaF9tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBpbnQgYXRvbV9paW9fbGVuW10gPSB7IDEsIDIsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDMgfTsKIAogc3RhdGljIHZvaWQgYXRvbV9pbmRleF9paW8oc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgYmFzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmgKaW5kZXggZmViYTZiOC4uNmQwMTRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmgKQEAgLTEyNSw2ICsxMjUsNyBAQAogc3RydWN0IGF0b21fY29udGV4dCB7CiAJc3RydWN0IGNhcmRfaW5mbyAqY2FyZDsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IG11dGV4IHNjcmF0Y2hfbXV0ZXg7CiAJdm9pZCAqYmlvczsKIAl1aW50MzJfdCBjbWRfdGFibGUsIGRhdGFfdGFibGU7CiAJdWludDE2X3QgKmlpbzsKQEAgLTE0NSw2ICsxNDYsNyBAQAogCiBzdHJ1Y3QgYXRvbV9jb250ZXh0ICphdG9tX3BhcnNlKHN0cnVjdCBjYXJkX2luZm8gKiwgdm9pZCAqKTsKIGludCBhdG9tX2V4ZWN1dGVfdGFibGUoc3RydWN0IGF0b21fY29udGV4dCAqLCBpbnQsIHVpbnQzMl90ICopOworaW50IGF0b21fZXhlY3V0ZV90YWJsZV9zY3JhdGNoX3VubG9ja2VkKHN0cnVjdCBhdG9tX2NvbnRleHQgKiwgaW50LCB1aW50MzJfdCAqKTsKIGludCBhdG9tX2FzaWNfaW5pdChzdHJ1Y3QgYXRvbV9jb250ZXh0ICopOwogdm9pZCBhdG9tX2Rlc3Ryb3koc3RydWN0IGF0b21fY29udGV4dCAqKTsKIGJvb2wgYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDE2X3QgKnNpemUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKaW5kZXggOTVkNWQ0YS4uMTFiYTlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwpAQCAtMTAwLDYgKzEwMCw3IEBACiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCiAJbXV0ZXhfbG9jaygmY2hhbi0+bXV0ZXgpOworCW11dGV4X2xvY2soJnJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQtPnNjcmF0Y2hfbXV0ZXgpOwogCiAJYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQtPnNjcmF0Y2ggKyAxKTsKIApAQCAtMTEzLDcgKzExNCw3IEBACiAJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKIAkJYXJncy52Mi51Y0hQRF9JRCA9IGNoYW4tPnJlYy5ocGQ7CiAKLQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKKwlhdG9tX2V4ZWN1dGVfdGFibGVfc2NyYXRjaF91bmxvY2tlZChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogCiAJKmFjayA9IGFyZ3MudjEudWNSZXBseVN0YXR1czsKIApAQCAtMTQ3LDYgKzE0OCw3IEBACiAKIAlyID0gcmVjdl9ieXRlczsKIGRvbmU6CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LT5zY3JhdGNoX211dGV4KTsKIAltdXRleF91bmxvY2soJmNoYW4tPm11dGV4KTsKIAogCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfaTJjLmMKaW5kZXggOWM1NzBmYi4uNDE1Nzc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19pMmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2kyYy5jCkBAIC00OCw2ICs0OCw3IEBACiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCiAJbXV0ZXhfbG9jaygmY2hhbi0+bXV0ZXgpOworCW11dGV4X2xvY2soJnJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQtPnNjcmF0Y2hfbXV0ZXgpOwogCiAJYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopcmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dC0+c2NyYXRjaDsKIApAQCAtODIsNyArODMsNyBAQAogCWFyZ3MudWNTbGF2ZUFkZHIgPSBzbGF2ZV9hZGRyIDw8IDE7CiAJYXJncy51Y0xpbmVOdW1iZXIgPSBjaGFuLT5yZWMuaTJjX2lkOwogCi0JYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJYXRvbV9leGVjdXRlX3RhYmxlX3NjcmF0Y2hfdW5sb2NrZWQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIAogCS8qIGVycm9yICovCiAJaWYgKGFyZ3MudWNTdGF0dXMgIT0gSFdfQVNTSVNURURfSTJDX1NUQVRVU19TVUNDRVNTKSB7CkBAIC05NSw2ICs5Niw3IEBACiAJCXJhZGVvbl9hdG9tX2NvcHlfc3dhcChidWYsIGJhc2UsIG51bSwgZmFsc2UpOwogCiBkb25lOgorCW11dGV4X3VubG9jaygmcmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dC0+c2NyYXRjaF9tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZjaGFuLT5tdXRleCk7CiAKIAlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npay5jCmluZGV4IDM3N2FmYTUwLi44OWMwMWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npay5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKQEAgLTQzMTMsOCArNDMxMyw4IEBACiAJLyogaW5pdCB0aGUgQ0UgcGFydGl0aW9ucy4gIENFIG9ubHkgdXNlZCBmb3IgZ2Z4IG9uIENJSyAqLwogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQkFTRSwgMikpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDNfQkFTRV9JTkRFWChDRV9QQVJUSVRJT05fQkFTRSkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDB4YzAwMCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMHhjMDAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAweDgwMDApOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDB4ODAwMCk7CiAKIAkvKiBzZXR1cCBjbGVhciBjb250ZXh0IHN0YXRlICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1BSRUFNQkxFX0NOVEwsIDApKTsKQEAgLTk0NDcsNiArOTQ0Nyw5IEBACiAJdTMyIG51bV9oZWFkcyA9IDAsIGxiX3NpemU7CiAJaW50IGk7CiAKKwlpZiAoIXJkZXYtPm1vZGVfaW5mby5tb2RlX2NvbmZpZ19pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCiAJcmFkZW9uX3VwZGF0ZV9kaXNwbGF5X3ByaW9yaXR5KHJkZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IHJkZXYtPm51bV9jcnRjOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrX3NkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrX3NkbWEuYwppbmRleCA0ZTg0MzJkLi5kNzQ4OTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npa19zZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWtfc2RtYS5jCkBAIC02NjcsMTcgKzY2NywyMCBAQAogewogCXN0cnVjdCByYWRlb25faWIgaWI7CiAJdW5zaWduZWQgaTsKKwl1bnNpZ25lZCBpbmRleDsKIAlpbnQgcjsKLQl2b2lkIF9faW9tZW0gKnB0ciA9ICh2b2lkICopcmRldi0+dnJhbV9zY3JhdGNoLnB0cjsKIAl1MzIgdG1wID0gMDsKKwl1NjQgZ3B1X2FkZHI7CiAKLQlpZiAoIXB0cikgewotCQlEUk1fRVJST1IoImludmFsaWQgdnJhbSBzY3JhdGNoIHBvaW50ZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaWYgKHJpbmctPmlkeCA9PSBSNjAwX1JJTkdfVFlQRV9ETUFfSU5ERVgpCisJCWluZGV4ID0gUjYwMF9XQl9ETUFfUklOR19URVNUX09GRlNFVDsKKwllbHNlCisJCWluZGV4ID0gQ0FZTUFOX1dCX0RNQTFfUklOR19URVNUX09GRlNFVDsKKworCWdwdV9hZGRyID0gcmRldi0+d2IuZ3B1X2FkZHIgKyBpbmRleDsKIAogCXRtcCA9IDB4Q0FGRURFQUQ7Ci0Jd3JpdGVsKHRtcCwgcHRyKTsKKwlyZGV2LT53Yi53YltpbmRleC80XSA9IGNwdV90b19sZTMyKHRtcCk7CiAKIAlyID0gcmFkZW9uX2liX2dldChyZGV2LCByaW5nLT5pZHgsICZpYiwgTlVMTCwgMjU2KTsKIAlpZiAocikgewpAQCAtNjg2LDggKzY4OSw4IEBACiAJfQogCiAJaWIucHRyWzBdID0gU0RNQV9QQUNLRVQoU0RNQV9PUENPREVfV1JJVEUsIFNETUFfV1JJVEVfU1VCX09QQ09ERV9MSU5FQVIsIDApOwotCWliLnB0clsxXSA9IHJkZXYtPnZyYW1fc2NyYXRjaC5ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Ci0JaWIucHRyWzJdID0gdXBwZXJfMzJfYml0cyhyZGV2LT52cmFtX3NjcmF0Y2guZ3B1X2FkZHIpOworCWliLnB0clsxXSA9IGxvd2VyXzMyX2JpdHMoZ3B1X2FkZHIpOworCWliLnB0clsyXSA9IHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpOwogCWliLnB0clszXSA9IDE7CiAJaWIucHRyWzRdID0gMHhERUFEQkVFRjsKIAlpYi5sZW5ndGhfZHcgPSA1OwpAQCAtNzA0LDcgKzcwNyw3IEBACiAJCXJldHVybiByOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKLQkJdG1wID0gcmVhZGwocHRyKTsKKwkJdG1wID0gbGUzMl90b19jcHUocmRldi0+d2Iud2JbaW5kZXgvNF0pOwogCQlpZiAodG1wID09IDB4REVBREJFRUYpCiAJCQlicmVhazsKIAkJRFJNX1VERUxBWSgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCmluZGV4IGYzN2QzOWQuLjg1OTk1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwpAQCAtMjM0NSw2ICsyMzQ1LDkgQEAKIAl1MzIgbnVtX2hlYWRzID0gMCwgbGJfc2l6ZTsKIAlpbnQgaTsKIAorCWlmICghcmRldi0+bW9kZV9pbmZvLm1vZGVfY29uZmlnX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisKIAlyYWRlb25fdXBkYXRlX2Rpc3BsYXlfcHJpb3JpdHkocmRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+bnVtX2NydGM7IGkrKykgewpAQCAtMjU1Miw2ICsyNTU1LDcgQEAKIAkJCQkJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgY3J0Y19vZmZzZXRzW2ldLCAxKTsKIAkJCQkJdG1wIHw9IEVWRVJHUkVFTl9DUlRDX0JMQU5LX0RBVEFfRU47CiAJCQkJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19CTEFOS19DT05UUk9MICsgY3J0Y19vZmZzZXRzW2ldLCB0bXApOworCQkJCQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBjcnRjX29mZnNldHNbaV0sIDApOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJdG1wID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBjcnRjX29mZnNldHNbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCAxMGY4YmUwLi5iNTNiMzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwpAQCAtMzIwNyw2ICszMjA3LDkgQEAKIAl1aW50MzJfdCBwaXhlbF9ieXRlczEgPSAwOwogCXVpbnQzMl90IHBpeGVsX2J5dGVzMiA9IDA7CiAKKwlpZiAoIXJkZXYtPm1vZGVfaW5mby5tb2RlX2NvbmZpZ19pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCiAJcmFkZW9uX3VwZGF0ZV9kaXNwbGF5X3ByaW9yaXR5KHJkZXYpOwogCiAJaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1swXS0+YmFzZS5lbmFibGVkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfZG1hLmMKaW5kZXggYWFiYzM0My4uY2YwZGY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9kbWEuYwpAQCAtMzM4LDE3ICszMzgsMTcgQEAKIHsKIAlzdHJ1Y3QgcmFkZW9uX2liIGliOwogCXVuc2lnbmVkIGk7CisJdW5zaWduZWQgaW5kZXg7CiAJaW50IHI7Ci0Jdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPnZyYW1fc2NyYXRjaC5wdHI7CiAJdTMyIHRtcCA9IDA7CisJdTY0IGdwdV9hZGRyOwogCi0JaWYgKCFwdHIpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHZyYW0gc2NyYXRjaCBwb2ludGVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWlmIChyaW5nLT5pZHggPT0gUjYwMF9SSU5HX1RZUEVfRE1BX0lOREVYKQorCQlpbmRleCA9IFI2MDBfV0JfRE1BX1JJTkdfVEVTVF9PRkZTRVQ7CisJZWxzZQorCQlpbmRleCA9IENBWU1BTl9XQl9ETUExX1JJTkdfVEVTVF9PRkZTRVQ7CiAKLQl0bXAgPSAweENBRkVERUFEOwotCXdyaXRlbCh0bXAsIHB0cik7CisJZ3B1X2FkZHIgPSByZGV2LT53Yi5ncHVfYWRkciArIGluZGV4OwogCiAJciA9IHJhZGVvbl9pYl9nZXQocmRldiwgcmluZy0+aWR4LCAmaWIsIE5VTEwsIDI1Nik7CiAJaWYgKHIpIHsKQEAgLTM1Nyw4ICszNTcsOCBAQAogCX0KIAogCWliLnB0clswXSA9IERNQV9QQUNLRVQoRE1BX1BBQ0tFVF9XUklURSwgMCwgMCwgMSk7Ci0JaWIucHRyWzFdID0gcmRldi0+dnJhbV9zY3JhdGNoLmdwdV9hZGRyICYgMHhmZmZmZmZmYzsKLQlpYi5wdHJbMl0gPSB1cHBlcl8zMl9iaXRzKHJkZXYtPnZyYW1fc2NyYXRjaC5ncHVfYWRkcikgJiAweGZmOworCWliLnB0clsxXSA9IGxvd2VyXzMyX2JpdHMoZ3B1X2FkZHIpOworCWliLnB0clsyXSA9IHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhmZjsKIAlpYi5wdHJbM10gPSAweERFQURCRUVGOwogCWliLmxlbmd0aF9kdyA9IDQ7CiAKQEAgLTM3NCw3ICszNzQsNyBAQAogCQlyZXR1cm4gcjsKIAl9CiAJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7Ci0JCXRtcCA9IHJlYWRsKHB0cik7CisJCXRtcCA9IGxlMzJfdG9fY3B1KHJkZXYtPndiLndiW2luZGV4LzRdKTsKIAkJaWYgKHRtcCA9PSAweERFQURCRUVGKQogCQkJYnJlYWs7CiAJCURSTV9VREVMQVkoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfZHBtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfZHBtLmMKaW5kZXggZjYzMDliZC4uYjVjNzNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2RwbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9kcG0uYwpAQCAtMTI1Niw3ICsxMjU2LDcgQEAKIAkJCQkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQgKwogCQkJCQkgbGUxNl90b19jcHUoZXh0X2hkci0+dXNQb3dlclR1bmVUYWJsZU9mZnNldCkpOwogCQkJCXJkZXYtPnBtLmRwbS5keW5fc3RhdGUuY2FjX3RkcF90YWJsZS0+bWF4aW11bV9wb3dlcl9kZWxpdmVyeV9saW1pdCA9Ci0JCQkJCXBwdC0+dXNNYXhpbXVtUG93ZXJEZWxpdmVyeUxpbWl0OworCQkJCQlsZTE2X3RvX2NwdShwcHQtPnVzTWF4aW11bVBvd2VyRGVsaXZlcnlMaW1pdCk7CiAJCQkJcHQgPSAmcHB0LT5wb3dlcl90dW5lX3RhYmxlOwogCQkJfSBlbHNlIHsKIAkJCQlBVE9NX1BQTElCX1BPV0VSVFVORV9UYWJsZSAqcHB0ID0gKEFUT01fUFBMSUJfUE9XRVJUVU5FX1RhYmxlICopCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggMzAwYzRiMy4uMjZiYWE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtMzIyLDYgKzMyMiwxMiBAQAogCX0KIAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQkvKiBkb24ndCBmZXRjaCB0aGUgZWRpZCBmcm9tIHRoZSB2YmlvcyBpZiBkZGMgZmFpbHMgYW5kIHJ1bnBtIGlzCisJCSAqIGVuYWJsZWQgc28gd2UgcmVwb3J0IGRpc2Nvbm5lY3RlZC4KKwkJICovCisJCWlmICgocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUFgpICYmIChyYWRlb25fcnVudGltZV9wbSAhPSAwKSkKKwkJCXJldHVybjsKKwogCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CiAJCQkvKiBzb21lIGxhcHRvcHMgcHJvdmlkZSBhIGhhcmRjb2RlZCBlZGlkIGluIHJvbSBmb3IgTENEcyAqLwogCQkJaWYgKCgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUykgfHwKQEAgLTgyNiw2ICs4MzIsOCBAQAogc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKIHJhZGVvbl9sdmRzX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKIAllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwpAQCAtODQyLDcgKzg1MCwxMSBAQAogCQkvKiBjaGVjayBpZiBwYW5lbCBpcyB2YWxpZCAqLwogCQlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ID49IDMyMCAmJiBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPj0gMjQwKQogCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0KKwkJLyogZG9uJ3QgZmV0Y2ggdGhlIGVkaWQgZnJvbSB0aGUgdmJpb3MgaWYgZGRjIGZhaWxzIGFuZCBydW5wbSBpcworCQkgKiBlbmFibGVkIHNvIHdlIHJlcG9ydCBkaXNjb25uZWN0ZWQuCisJCSAqLworCQlpZiAoKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BYKSAmJiAocmFkZW9uX3J1bnRpbWVfcG0gIT0gMCkpCisJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAl9CiAKIAkvKiBjaGVjayBmb3IgZWRpZCBhcyB3ZWxsICovCkBAIC0xNTg5LDYgKzE2MDEsMTEgQEAKIAkJCS8qIGNoZWNrIGlmIHBhbmVsIGlzIHZhbGlkICovCiAJCQlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ID49IDMyMCAmJiBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPj0gMjQwKQogCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQkJLyogZG9uJ3QgZmV0Y2ggdGhlIGVkaWQgZnJvbSB0aGUgdmJpb3MgaWYgZGRjIGZhaWxzIGFuZCBydW5wbSBpcworCQkJICogZW5hYmxlZCBzbyB3ZSByZXBvcnQgZGlzY29ubmVjdGVkLgorCQkJICovCisJCQlpZiAoKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BYKSAmJiAocmFkZW9uX3J1bnRpbWVfcG0gIT0gMCkpCisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAJCX0KIAkJLyogZURQIGlzIGFsd2F5cyBEUCAqLwogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+ZHBfc2lua190eXBlID0gQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCmluZGV4IGEzZTdhZWQuLjZmMzc3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwpAQCAtMjUxLDIyICsyNTEsMTkgQEAKIAogc3RhdGljIGludCByYWRlb25fY3Nfc3luY19yaW5ncyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCkKIHsKLQlpbnQgaSwgciA9IDA7CisJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CisJaW50IHI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcC0+bnJlbG9jczsgaSsrKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWxvYywgJnAtPnZhbGlkYXRlZCwgdHYuaGVhZCkgewogCQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2OwogCi0JCWlmICghcC0+cmVsb2NzW2ldLnJvYmopCi0JCQljb250aW51ZTsKLQotCQlyZXN2ID0gcC0+cmVsb2NzW2ldLnJvYmotPnRiby5yZXN2OworCQlyZXN2ID0gcmVsb2MtPnJvYmotPnRiby5yZXN2OwogCQlyID0gcmFkZW9uX3NlbWFwaG9yZV9zeW5jX3Jlc3YocC0+cmRldiwgcC0+aWIuc2VtYXBob3JlLCByZXN2LAotCQkJCQkgICAgICAgcC0+cmVsb2NzW2ldLnR2LnNoYXJlZCk7Ci0KKwkJCQkJICAgICAgIHJlbG9jLT50di5zaGFyZWQpOwogCQlpZiAocikKLQkJCWJyZWFrOworCQkJcmV0dXJuIHI7CiAJfQotCXJldHVybiByOworCXJldHVybiAwOwogfQogCiAvKiBYWFg6IG5vdGUgdGhhdCB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBsZWdhY3kgVU1TIENTIGlvY3RsIGFzIHdlbGwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggZWEyNjc2OS4uOTk1YThiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTk1Miw2ICs5NTIsNyBAQAogCX0KIAogCW11dGV4X2luaXQoJnJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQtPm11dGV4KTsKKwltdXRleF9pbml0KCZyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LT5zY3JhdGNoX211dGV4KTsKIAlyYWRlb25fYXRvbV9pbml0aWFsaXplX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYtPmRkZXYpOwogCWF0b21fYWxsb2NhdGVfZmJfc2NyYXRjaChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDlhMTllNTIuLjZiNjcwYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMTc5LDYgKzE3OSw5IEBACiAJCSAgICAocmRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDE3MzQpICYmCiAJCSAgICAocmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDExMDcpKQogCQkJdXNlX2JsID0gZmFsc2U7CisJCS8qIGRpc2FibGUgbmF0aXZlIGJhY2tsaWdodCBjb250cm9sIG9uIG9sZGVyIGFzaWNzICovCisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUjYwMCkKKwkJCXVzZV9ibCA9IGZhbHNlOwogCQllbHNlCiAJCQl1c2VfYmwgPSB0cnVlOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwppbmRleCA3Nzg0OTExLi4wMGZjNTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCkBAIC0xODUsNiArMTg1LDE2IEBACiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmV0dXJuIGZhbHNlOwogCisJLyoKKwkgKiBPbGRlciBjaGlwcyBoYXZlIGEgSFcgbGltaXRhdGlvbiwgdGhleSBjYW4gb25seSBnZW5lcmF0ZSA0MCBiaXRzCisJICogb2YgYWRkcmVzcyBmb3IgIjY0LWJpdCIgTVNJcyB3aGljaCBicmVha3Mgb24gc29tZSBwbGF0Zm9ybXMsIG5vdGFibHkKKwkgKiBJQk0gUE9XRVIgc2VydmVycywgc28gd2UgbGltaXQgdGhlbQorCSAqLworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0JPTkFJUkUpIHsKKwkJZGV2X2luZm8ocmRldi0+ZGV2LCAicmFkZW9uOiBNU0kgbGltaXRlZCB0byAzMi1iaXRcbiIpOworCQlyZGV2LT5wZGV2LT5ub182NGJpdF9tc2kgPSAxOworCX0KKwogCS8qIGZvcmNlIE1TSSBvbiAqLwogCWlmIChyYWRlb25fbXNpID09IDEpCiAJCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCA4MzA5YjExLi4wMzU4Njc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtNzk1LDYgKzc5NSw4IEBACiAKIAkvKiBHZXQgYXNzb2NpYXRlZCBkcm1fY3J0YzogKi8KIAlkcm1jcnRjID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjXS0+YmFzZTsKKwlpZiAoIWRybWNydGMpCisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogSGVscGVyIHJvdXRpbmUgaW4gRFJNIGNvcmUgZG9lcyBhbGwgdGhlIHdvcms6ICovCiAJcmV0dXJuIGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3MoZGV2LCBjcnRjLCBtYXhfZXJyb3IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCmluZGV4IDk5YTk2MGEuLjRjMGQ3ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCkBAIC0yMTMsNiArMjEzLDEzIEBACiAJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkpCiAJCWJvLT5mbGFncyAmPSB+KFJBREVPTl9HRU1fR1RUX1dDIHwgUkFERU9OX0dFTV9HVFRfVUMpOwogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qIFhYWDogV3JpdGUtY29tYmluZWQgQ1BVIG1hcHBpbmdzIG9mIEdUVCBzZWVtIGJyb2tlbiBvbiAzMi1iaXQKKwkgKiBTZWUgaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ2MjcKKwkgKi8KKwliby0+ZmxhZ3MgJj0gflJBREVPTl9HRU1fR1RUX1dDOworI2VuZGlmCisKIAlyYWRlb25fdHRtX3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywgZG9tYWluKTsKIAkvKiBLZXJuZWwgYWxsb2NhdGlvbiBhcmUgdW5pbnRlcnJ1cHRpYmxlICovCiAJZG93bl9yZWFkKCZyZGV2LT5wbS5tY2xrX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCmluZGV4IDVmNmRiNDYuLjlhY2IxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKQEAgLTg3OSw2ICs4NzksOSBAQAogCXUzMiBkMW1vZGVfcHJpb3JpdHlfYV9jbnQsIGQybW9kZV9wcmlvcml0eV9hX2NudDsKIAkvKiBGSVhNRTogaW1wbGVtZW50IGZ1bGwgc3VwcG9ydCAqLwogCisJaWYgKCFyZGV2LT5tb2RlX2luZm8ubW9kZV9jb25maWdfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwogCXJhZGVvbl91cGRhdGVfZGlzcGxheV9wcmlvcml0eShyZGV2KTsKIAogCWlmIChyZGV2LT5tb2RlX2luZm8uY3J0Y3NbMF0tPmJhc2UuZW5hYmxlZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCAzNDYyYjY0Li4wYTJkMzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC01NzksNiArNTc5LDkgQEAKIAl1MzIgZDFtb2RlX3ByaW9yaXR5X2FfY250LCBkMW1vZGVfcHJpb3JpdHlfYl9jbnQ7CiAJdTMyIGQybW9kZV9wcmlvcml0eV9hX2NudCwgZDJtb2RlX3ByaW9yaXR5X2JfY250OwogCisJaWYgKCFyZGV2LT5tb2RlX2luZm8ubW9kZV9jb25maWdfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwogCXJhZGVvbl91cGRhdGVfZGlzcGxheV9wcmlvcml0eShyZGV2KTsKIAogCWlmIChyZGV2LT5tb2RlX2luZm8uY3J0Y3NbMF0tPmJhc2UuZW5hYmxlZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwppbmRleCA4YTQ3N2JmLi5jNTVkNjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCkBAIC0xMjc3LDYgKzEyNzcsOSBAQAogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMCA9IE5VTEw7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUxID0gTlVMTDsKIAorCWlmICghcmRldi0+bW9kZV9pbmZvLm1vZGVfY29uZmlnX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisKIAlyYWRlb25fdXBkYXRlX2Rpc3BsYXlfcHJpb3JpdHkocmRldik7CiAKIAlpZiAocmRldi0+bW9kZV9pbmZvLmNydGNzWzBdLT5iYXNlLmVuYWJsZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpLmMKaW5kZXggZWVlYTViNi4uN2Q1MDgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYwpAQCAtMjM4NCw2ICsyMzg0LDkgQEAKIAl1MzIgbnVtX2hlYWRzID0gMCwgbGJfc2l6ZTsKIAlpbnQgaTsKIAorCWlmICghcmRldi0+bW9kZV9pbmZvLm1vZGVfY29uZmlnX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisKIAlyYWRlb25fdXBkYXRlX2Rpc3BsYXlfcHJpb3JpdHkocmRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+bnVtX2NydGM7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RjLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZGMuYwppbmRleCA2NTUzZmQyLi4wNTRhNzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZGMuYwpAQCAtNzM2LDcgKzczNiw2IEBACiAKIHN0YXRpYyB2b2lkIHRlZ3JhX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7Ci0Jc3RydWN0IHRlZ3JhX2RjICpkYyA9IHRvX3RlZ3JhX2RjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBjcnRjLT5kZXY7CiAJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CiAKQEAgLTc1Miw3ICs3NTEsNyBAQAogCQl9CiAJfQogCi0JZHJtX3ZibGFua19vZmYoZHJtLCBkYy0+cGlwZSk7CisJZHJtX2NydGNfdmJsYW5rX29mZihjcnRjKTsKIH0KIAogc3RhdGljIGJvb2wgdGVncmFfY3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKQEAgLTg0MSw4ICs4NDAsNiBAQAogCXUzMiB2YWx1ZTsKIAlpbnQgZXJyOwogCi0JZHJtX3ZibGFua19wcmVfbW9kZXNldChjcnRjLT5kZXYsIGRjLT5waXBlKTsKLQogCWVyciA9IHRlZ3JhX2NydGNfc2V0dXBfY2xrKGNydGMsIG1vZGUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihkYy0+ZGV2LCAiZmFpbGVkIHRvIHNldHVwIGNsb2NrIGZvciBDUlRDOiAlZFxuIiwgZXJyKTsKQEAgLTg5Niw2ICs4OTMsOCBAQAogCXVuc2lnbmVkIGludCBzeW5jcHQ7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAorCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisKIAkvKiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiAqLwogCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZGMtPnJzdCk7CiAJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CkBAIC05NDMsNyArOTQyLDcgQEAKIAl2YWx1ZSA9IEdFTkVSQUxfQUNUX1JFUSB8IFdJTl9BX0FDVF9SRVE7CiAJdGVncmFfZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENfQ01EX1NUQVRFX0NPTlRST0wpOwogCi0JZHJtX3ZibGFua19wb3N0X21vZGVzZXQoY3J0Yy0+ZGV2LCBkYy0+cGlwZSk7CisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOwogfQogCiBzdGF0aWMgdm9pZCB0ZWdyYV9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IDczYmQ5ZTIuLjM0MDIwMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMTY1OSw2ICsxNjU5LDcgQEAKIAkJaGRldi0+aGlkZGV2X2Rpc2Nvbm5lY3QoaGRldik7CiAJaWYgKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURSQVcpCiAJCWhpZHJhd19kaXNjb25uZWN0KGhkZXYpOworCWhkZXYtPmNsYWltZWQgPSAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2Rpc2Nvbm5lY3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKaW5kZXggZTIzYWI4Yi4uN2M4NjM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaApAQCAtMjk5LDYgKzI5OSw3IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfRUxBTgkJMHgwNGYzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRUxBTl9UT1VDSFNDUkVFTgkweDAwODkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9FTEFOX1RPVUNIU0NSRUVOXzAwOUIJMHgwMDliCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRUxBTl9UT1VDSFNDUkVFTl8wMTAzCTB4MDEwMwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0VMQU5fVE9VQ0hTQ1JFRU5fMDE2RgkweDAxNmYKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VMRUNPTQkJMHgwNTZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc2Vuc29yLWh1Yi5jIGIvZHJpdmVycy9oaWQvaGlkLXNlbnNvci1odWIuYwppbmRleCBlNmQ4ZTE4Li42YTU4YjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc2Vuc29yLWh1Yi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zZW5zb3ItaHViLmMKQEAgLTY0MSw5ICs2NDEsNiBAQAogCQkJCQlnb3RvIGVycl9zdG9wX2h3OwogCQkJfQogCQkJc2QtPmhpZF9zZW5zb3JfaHViX2NsaWVudF9kZXZzWwotCQkJCXNkLT5oaWRfc2Vuc29yX2NsaWVudF9jbnRdLmlkID0KLQkJCQkJCQlQTEFURk9STV9ERVZJRF9BVVRPOwotCQkJc2QtPmhpZF9zZW5zb3JfaHViX2NsaWVudF9kZXZzWwogCQkJCXNkLT5oaWRfc2Vuc29yX2NsaWVudF9jbnRdLm5hbWUgPSBuYW1lOwogCQkJc2QtPmhpZF9zZW5zb3JfaHViX2NsaWVudF9kZXZzWwogCQkJCXNkLT5oaWRfc2Vuc29yX2NsaWVudF9jbnRdLnBsYXRmb3JtX2RhdGEgPQpAQCAtNjU5LDggKzY1Niw5IEBACiAJaWYgKGxhc3RfaHNkZXYpCiAJCWxhc3RfaHNkZXYtPmVuZF9jb2xsZWN0aW9uX2luZGV4ID0gaTsKIAotCXJldCA9IG1mZF9hZGRfZGV2aWNlcygmaGRldi0+ZGV2LCAwLCBzZC0+aGlkX3NlbnNvcl9odWJfY2xpZW50X2RldnMsCi0JCXNkLT5oaWRfc2Vuc29yX2NsaWVudF9jbnQsIE5VTEwsIDAsIE5VTEwpOworCXJldCA9IG1mZF9hZGRfaG90cGx1Z19kZXZpY2VzKCZoZGV2LT5kZXYsCisJCQlzZC0+aGlkX3NlbnNvcl9odWJfY2xpZW50X2RldnMsCisJCQlzZC0+aGlkX3NlbnNvcl9jbGllbnRfY250KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfc3RvcF9odzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggNTAxNGJiNS4uNTUyNjcxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC03Miw2ICs3Miw3IEBACiAJeyBVU0JfVkVORE9SX0lEX0RNSSwgVVNCX0RFVklDRV9JRF9ETUlfRU5DLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfRUxBTiwgVVNCX0RFVklDRV9JRF9FTEFOX1RPVUNIU0NSRUVOLCBISURfUVVJUktfQUxXQVlTX1BPTEwgfSwKIAl7IFVTQl9WRU5ET1JfSURfRUxBTiwgVVNCX0RFVklDRV9JRF9FTEFOX1RPVUNIU0NSRUVOXzAwOUIsIEhJRF9RVUlSS19BTFdBWVNfUE9MTCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9FTEFOLCBVU0JfREVWSUNFX0lEX0VMQU5fVE9VQ0hTQ1JFRU5fMDEwMywgSElEX1FVSVJLX0FMV0FZU19QT0xMIH0sCiAJeyBVU0JfVkVORE9SX0lEX0VMQU4sIFVTQl9ERVZJQ0VfSURfRUxBTl9UT1VDSFNDUkVFTl8wMTZGLCBISURfUVVJUktfQUxXQVlTX1BPTEwgfSwKIAl7IFVTQl9WRU5ET1JfSURfRUxPLCBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9GT1JNT1NBLCBVU0JfREVWSUNFX0lEX0ZPUk1PU0FfSVJfUkVDRUlWRVIsIEhJRF9RVUlSS19OT19JTklUX1JFUE9SVFMgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCA1Mjg2ZDdjLi42NTI5YzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC0xMDI4LDExICsxMDI4LDExIEBACiAJICB3aWxsIGJlIGNhbGxlZCBsbTkzLgogCiBjb25maWcgU0VOU09SU19MTTk1MjM0Ci0JdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05NTIzNCIKKwl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjM0IGFuZCBjb21wYXRpYmxlcyIKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgTE05NTIzNCB0ZW1wZXJhdHVyZQotCSAgc2Vuc29yLgorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBMTTk1MjMzIGFuZCBMTTk1MjM0CisJICB0ZW1wZXJhdHVyZSBzZW5zb3IgY2hpcHMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGxtOTUyMzQuCkBAIC0xMDQ4LDEwICsxMDQ4LDExIEBACiAJICB3aWxsIGJlIGNhbGxlZCBsbTk1MjQxLgogCiBjb25maWcgU0VOU09SU19MTTk1MjQ1Ci0JdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05NTI0NSBzZW5zb3IgY2hpcCIKKwl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjQ1IGFuZCBjb21wYXRpYmxlcyIKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBMTTk1MjQ1IHNlbnNvciBjaGlwLgorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIExNOTUyMzUgYW5kIExNOTUyNDUKKwkgIHRlbXBlcmF0dXJlIHNlbnNvciBjaGlwcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbG05NTI0NS4KQEAgLTExMTcsMTIgKzExMTgsMjMgQEAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIG1vbml0b3JpbmcKIAkgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE51dm90b24gTkNUNjEwNkQsIE5DVDY3NzVGLCBOQ1Q2Nzc2RiwgTkNUNjc3OUQsCi0JICBOQ1Q2NzkxRCBhbmQgY29tcGF0aWJsZSBTdXBlci1JL08gY2hpcHMuIFRoaXMgZHJpdmVyIHJlcGxhY2VzIHRoZQotCSAgdzgzNjI3ZWhmIGRyaXZlciBmb3IgTkNUNjc3NUYgYW5kIE5DVDY3NzZGLgorCSAgTkNUNjc5MUQsIE5DVDY3OTJEIGFuZCBjb21wYXRpYmxlIFN1cGVyLUkvTyBjaGlwcy4gVGhpcyBkcml2ZXIKKwkgIHJlcGxhY2VzIHRoZSB3ODM2MjdlaGYgZHJpdmVyIGZvciBOQ1Q2Nzc1RiBhbmQgTkNUNjc3NkYuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG5jdDY3NzUuCiAKK2NvbmZpZyBTRU5TT1JTX05DVDc4MDIKKwl0cmlzdGF0ZSAiTnV2b3RvbiBOQ1Q3ODAyWSIKKwlkZXBlbmRzIG9uIEkyQworCXNlbGVjdCBSRUdNQVBfSTJDCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBOdXZvdG9uIE5DVDc4MDJZCisJICBoYXJkd2FyZSBtb25pdG9yaW5nIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIG5jdDc4MDIuCisKIGNvbmZpZyBTRU5TT1JTX1BDRjg1OTEKIAl0cmlzdGF0ZSAiUGhpbGlwcyBQQ0Y4NTkxIEFEQy9EQUMiCiAJZGVwZW5kcyBvbiBJMkMKQEAgLTE0NTQsNyArMTQ2Niw3IEBACiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgVE1QNDAxLAotCSAgVE1QNDExLCBUTVA0MzEsIGFuZCBUTVA0MzIgdGVtcGVyYXR1cmUgc2Vuc29yIGNoaXBzLgorCSAgVE1QNDExLCBUTVA0MzEsIFRNUDQzMiBhbmQgVE1QNDM1IHRlbXBlcmF0dXJlIHNlbnNvciBjaGlwcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgdG1wNDAxLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKaW5kZXggYzkwYTc2MS4uNjcyODA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCkBAIC0xMTgsNiArMTE4LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX01FTkYyMUJNQ19IV01PTikgKz0gbWVuZjIxYm1jX2h3bW9uLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX05DVDY2ODMpCSs9IG5jdDY2ODMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTkNUNjc3NSkJKz0gbmN0Njc3NS5vCitvYmotJChDT05GSUdfU0VOU09SU19OQ1Q3ODAyKQkrPSBuY3Q3ODAyLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SKQkrPSBudGNfdGhlcm1pc3Rvci5vCiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3MzYwKQkrPSBwYzg3MzYwLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDODc0MjcpCSs9IHBjODc0MjcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mYW0xNWhfcG93ZXIuYyBiL2RyaXZlcnMvaHdtb24vZmFtMTVoX3Bvd2VyLmMKaW5kZXggZmNkYmRlNC4uMzA1N2RmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9mYW0xNWhfcG93ZXIuYworKysgYi9kcml2ZXJzL2h3bW9uL2ZhbTE1aF9wb3dlci5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0Y0KSB9LAogCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GNCkgfSwKIAl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX05CX0Y0KSB9LAotCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTTMwSF9OQl9GMykgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX00zMEhfTkJfRjQpIH0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZmFtMTVoX3Bvd2VyX2lkX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZzc2Mi5jIGIvZHJpdmVycy9od21vbi9nNzYyLmMKaW5kZXggNmFhYzY5NS4uOWI1NWU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9nNzYyLmMKKysrIGIvZHJpdmVycy9od21vbi9nNzYyLmMKQEAgLTEwODQsMTAgKzEwODQsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gY2xvY2tfZGlzOwogCi0JZGF0YS0+aHdtb25fZGV2ID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoZGV2LAotCQkJCQkJCQkgY2xpZW50LT5uYW1lLAotCQkJCQkJCQkgZGF0YSwKLQkJCQkJCQkJIGc3NjJfZ3JvdXBzKTsKKwlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoZGV2LCBjbGllbnQtPm5hbWUsCisJCQkJCQkJICAgIGRhdGEsIGc3NjJfZ3JvdXBzKTsKIAlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKIAkJcmV0ID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwogCQlnb3RvIGNsb2NrX2RpczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZ3Bpby1mYW4uYyBiL2RyaXZlcnMvaHdtb24vZ3Bpby1mYW4uYwppbmRleCA0ZWZhMTczLi4zNmFiZjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2dwaW8tZmFuLmMKKysrIGIvZHJpdmVycy9od21vbi9ncGlvLWZhbi5jCkBAIC03OSw3ICs3OSw3IEBACiB7CiAJc3RydWN0IGdwaW9fZmFuX2RhdGEgKmZhbl9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGdwaW9fZmFuX2FsYXJtICphbGFybSA9IGZhbl9kYXRhLT5hbGFybTsKLQlpbnQgdmFsdWUgPSBncGlvX2dldF92YWx1ZShhbGFybS0+Z3Bpbyk7CisJaW50IHZhbHVlID0gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoYWxhcm0tPmdwaW8pOwogCiAJaWYgKGFsYXJtLT5hY3RpdmVfbG93KQogCQl2YWx1ZSA9ICF2YWx1ZTsKQEAgLTEzMSw3ICsxMzEsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGZhbl9kYXRhLT5udW1fY3RybDsgaSsrKQotCQlncGlvX3NldF92YWx1ZShmYW5fZGF0YS0+Y3RybFtpXSwgKGN0cmxfdmFsID4+IGkpICYgMSk7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGZhbl9kYXRhLT5jdHJsW2ldLCAoY3RybF92YWwgPj4gaSkgJiAxKTsKIH0KIAogc3RhdGljIGludCBfX2dldF9mYW5fY3RybChzdHJ1Y3QgZ3Bpb19mYW5fZGF0YSAqZmFuX2RhdGEpCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZmFuX2RhdGEtPm51bV9jdHJsOyBpKyspIHsKIAkJaW50IHZhbHVlOwogCi0JCXZhbHVlID0gZ3Bpb19nZXRfdmFsdWUoZmFuX2RhdGEtPmN0cmxbaV0pOworCQl2YWx1ZSA9IGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGZhbl9kYXRhLT5jdHJsW2ldKTsKIAkJY3RybF92YWwgfD0gKHZhbHVlIDw8IGkpOwogCX0KIAlyZXR1cm4gY3RybF92YWw7CkBAIC0zNjksNyArMzY5LDggQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGN0cmxbaV0sIGdwaW9fZ2V0X3ZhbHVlKGN0cmxbaV0pKTsKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGN0cmxbaV0sCisJCQkJCSAgICBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChjdHJsW2ldKSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTU0OSw2ICs1NTAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZ3Bpb19mYW5fc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZ3Bpb19mYW5fZGF0YSAqZmFuX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlpZiAoZmFuX2RhdGEtPmN0cmwpCisJCXNldF9mYW5fc3BlZWQoZmFuX2RhdGEsIDApOworfQorCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IGdwaW9fZmFuX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNTgwLDYgKzU4OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdwaW9fZmFuX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gZ3Bpb19mYW5fcHJvYmUsCisJLnNodXRkb3duCT0gZ3Bpb19mYW5fc2h1dGRvd24sCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSAiZ3Bpby1mYW4iLAogCQkucG0JPSBHUElPX0ZBTl9QTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaWJtcG93ZXJudi5jIGIvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKaW5kZXggZDJiZjJjOS4uN2MyYzdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKKysrIGIvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKQEAgLTc0LDkgKzc0LDYgQEAKIAl1MzIgc2Vuc29yc19jb3VudDsgLyogVG90YWwgY291bnQgb2Ygc2Vuc29ycyBmcm9tIGVhY2ggZ3JvdXAgKi8KIH07CiAKLS8qIFBsYXRmb3JtIGRldmljZSByZXByZXNlbnRpbmcgYWxsIHRoZSBpYm1wb3dlcm52IHNlbnNvcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2aWNlOwotCiBzdGF0aWMgc3NpemVfdCBzaG93X3NlbnNvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAogCQkJICAgY2hhciAqYnVmKQogewpAQCAtOTksNyArOTYsNyBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB4KTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZ2V0X3NlbnNvcl9pbmRleF9hdHRyKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqaW5kZXgsCitzdGF0aWMgaW50IGdldF9zZW5zb3JfaW5kZXhfYXR0cihjb25zdCBjaGFyICpuYW1lLCB1MzIgKmluZGV4LAogCQkJCQljaGFyICphdHRyKQogewogCWNoYXIgKmhhc2hfcG9zID0gc3RyY2hyKG5hbWUsICcjJyk7CkBAIC0xMzYsNyArMTMzLDcgQEAKICAqIHdoaWNoIG5lZWQgdG8gYmUgbWFwcGVkIGFzIGZhbjJfaW5wdXQsIHRlbXAxX21heCByZXNwZWN0aXZlbHkgYmVmb3JlCiAgKiBwb3B1bGF0aW5nIHRoZW0gaW5zaWRlIGh3bW9uIGRldmljZSBjbGFzcy4KICAqLwotc3RhdGljIGludCBfX2luaXQgY3JlYXRlX2h3bW9uX2F0dHJfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gc2Vuc29ycyB0eXBlLAorc3RhdGljIGludCBjcmVhdGVfaHdtb25fYXR0cl9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBzZW5zb3JzIHR5cGUsCiAJCQkJCSBjb25zdCBjaGFyICpub2RlX25hbWUsCiAJCQkJCSBjaGFyICpod21vbl9hdHRyX25hbWUpCiB7CkBAIC0xNzIsNyArMTY5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcG9wdWxhdGVfYXR0cl9ncm91cHMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcG9wdWxhdGVfYXR0cl9ncm91cHMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqcGdyb3VwcyA9IHBkYXRhLT5hdHRyX2dyb3VwczsKQEAgLTE4MCwxMSArMTc3LDYgQEAKIAllbnVtIHNlbnNvcnMgdHlwZTsKIAogCW9wYWwgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2libSxvcGFsL3NlbnNvcnMiKTsKLQlpZiAoIW9wYWwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiT3BhbCBub2RlICdzZW5zb3JzJyBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG9wYWwsIG5wKSB7CiAJCWlmIChucC0+bmFtZSA9PSBOVUxMKQogCQkJY29udGludWU7CkBAIC0yMjEsNyArMjEzLDcgQEAKICAqIHRvIHRoZSBuYW1lIHJlcXVpcmVkIGJ5IHRoZSBoaWdoZXIgJ2h3bW9uJyBkcml2ZXIgbGlrZSBmYW4xX2lucHV0LCB0ZW1wMV9tYXgKICAqIGV0Yy4uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9kZXZpY2VfYXR0cnMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgY3JlYXRlX2RldmljZV9hdHRycyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipwZ3JvdXBzID0gcGRhdGEtPmF0dHJfZ3JvdXBzOwpAQCAtMjgwLDcgKzI3Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaWJtcG93ZXJudl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBpYm1wb3dlcm52X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKQEAgLTMwOSw1NSArMzAxLDI1IEBACiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBvcGFsX3NlbnNvcl9kcml2ZXJfaWRzW10gPSB7CisJeworCQkubmFtZSA9ICJvcGFsLXNlbnNvciIsCisJfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBvcGFsX3NlbnNvcl9kcml2ZXJfaWRzKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaWJtcG93ZXJudl9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5uYW1lID0gRFJWTkFNRSwKKwkucHJvYmUJCT0gaWJtcG93ZXJudl9wcm9iZSwKKwkuaWRfdGFibGUJPSBvcGFsX3NlbnNvcl9kcml2ZXJfaWRzLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBEUlZOQU1FLAogCX0sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpYm1wb3dlcm52X2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JcGRldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCAwKTsKLQlpZiAoIXBkZXZpY2UpIHsKLQkJcHJfZXJyKCJEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2aWNlKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiRGV2aWNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKLQl9Ci0KLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmlibXBvd2VybnZfZHJpdmVyLCBpYm1wb3dlcm52X3Byb2JlKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiUGxhdGZyb20gZHJpdmVyIHByb2JlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXhpdF9kZXZpY2VfZGVsOwotCX0KLQotCXJldHVybiAwOwotCi1leGl0X2RldmljZV9kZWw6Ci0JcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2aWNlKTsKLWV4aXRfZGV2aWNlX3B1dDoKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXZpY2UpOwotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaWJtcG93ZXJudl9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlibXBvd2VybnZfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2aWNlKTsKLX0KK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaWJtcG93ZXJudl9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJOZWVsZXNoIEd1cHRhIDxuZWVsZWd1cEBsaW51eC52bmV0LmlibS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklCTSBQT1dFUk5WIHBsYXRmb3JtIHNlbnNvcnMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQoaWJtcG93ZXJudl9pbml0KTsKLW1vZHVsZV9leGl0KGlibXBvd2VybnZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2lpb19od21vbi5jIGIvZHJpdmVycy9od21vbi9paW9faHdtb24uYwppbmRleCAxNGM4MmRhLi45ODAxNzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2lpb19od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vaWlvX2h3bW9uLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAlzdHJ1Y3QgaWlvX2h3bW9uX3N0YXRlICpzdDsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmE7CiAJaW50IHJldCwgaTsKLQlpbnQgaW5faSA9IDEsIHRlbXBfaSA9IDEsIGN1cnJfaSA9IDE7CisJaW50IGluX2kgPSAxLCB0ZW1wX2kgPSAxLCBjdXJyX2kgPSAxLCBodW1pZGl0eV9pID0gMTsKIAllbnVtIGlpb19jaGFuX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgaWlvX2NoYW5uZWwgKmNoYW5uZWxzOwogCWNvbnN0IGNoYXIgKm5hbWUgPSAiaWlvX2h3bW9uIjsKQEAgLTEyMyw2ICsxMjMsMTEgQEAKIAkJCQkJCQkgICJjdXJyJWRfaW5wdXQiLAogCQkJCQkJCSAgY3Vycl9pKyspOwogCQkJYnJlYWs7CisJCWNhc2UgSUlPX0hVTUlESVRZUkVMQVRJVkU6CisJCQlhLT5kZXZfYXR0ci5hdHRyLm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKKwkJCQkJCQkgICJodW1pZGl0eSVkX2lucHV0IiwKKwkJCQkJCQkgIGh1bWlkaXR5X2krKyk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycm9yX3JlbGVhc2VfY2hhbm5lbHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2luYTJ4eC5jIGIvZHJpdmVycy9od21vbi9pbmEyeHguYwppbmRleCBiZmQzZjNlLi5lMDFmZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2luYTJ4eC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaW5hMnh4LmMKQEAgLTIyMyw2ICsyMjMsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKIAlsb25nIHNodW50ID0gMTAwMDA7IC8qIGRlZmF1bHQgc2h1bnQgdmFsdWUgMTBtT2htcyAqLwogCXUzMiB2YWw7CisJaW50IHJldDsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yNDcsMTIgKzI0OCwyNSBAQAogCWRhdGEtPmNvbmZpZyA9ICZpbmEyeHhfY29uZmlnW2RhdGEtPmtpbmRdOwogCiAJLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KLQlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgSU5BMlhYX0NPTkZJRywKLQkJCQkgICAgIGRhdGEtPmNvbmZpZy0+Y29uZmlnX2RlZmF1bHQpOwotCS8qIHNldCBjdXJyZW50IExTQiB0byAxbUEsIHNodW50IGlzIGluIHVPaG1zICovCi0JLyogKGVxdWF0aW9uIDEzIGluIGRhdGFzaGVldCkgKi8KLQlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgSU5BMlhYX0NBTElCUkFUSU9OLAotCQkJCSAgICAgZGF0YS0+Y29uZmlnLT5jYWxpYnJhdGlvbl9mYWN0b3IgLyBzaHVudCk7CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChjbGllbnQsIElOQTJYWF9DT05GSUcsCisJCQkJCSAgIGRhdGEtPmNvbmZpZy0+Y29uZmlnX2RlZmF1bHQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LAorCQkJImVycm9yIHdyaXRpbmcgdG8gdGhlIGNvbmZpZyByZWdpc3RlcjogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIFNldCBjdXJyZW50IExTQiB0byAxbUEsIHNodW50IGlzIGluIHVPaG1zCisJICogKGVxdWF0aW9uIDEzIGluIGRhdGFzaGVldCkuCisJICovCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChjbGllbnQsIElOQTJYWF9DQUxJQlJBVElPTiwKKwkJCQlkYXRhLT5jb25maWctPmNhbGlicmF0aW9uX2ZhY3RvciAvIHNodW50KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJlcnJvciB3cml0aW5nIHRvIHRoZSBjYWxpYnJhdGlvbiByZWdpc3RlcjogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc1LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwppbmRleCBkMTZkYmIzLi42NzUzZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwpAQCAtNDQsNiArNDQsNyBAQAogCWc3NTEsCiAJbG03NSwKIAlsbTc1YSwKKwlsbTc1YiwKIAltYXg2NjI1LAogCW1heDY2MjYsCiAJbWNwOTgweCwKQEAgLTIzMyw2ICsyMzQsMTAgQEAKIAkJZGF0YS0+cmVzb2x1dGlvbiA9IDk7CiAJCWRhdGEtPnNhbXBsZV90aW1lID0gSFogLyAyOwogCQlicmVhazsKKwljYXNlIGxtNzViOgorCQlkYXRhLT5yZXNvbHV0aW9uID0gMTE7CisJCWRhdGEtPnNhbXBsZV90aW1lID0gSFogLyA0OworCQlicmVhazsKIAljYXNlIG1heDY2MjU6CiAJCWRhdGEtPnJlc29sdXRpb24gPSA5OwogCQlkYXRhLT5zYW1wbGVfdGltZSA9IEhaIC8gNDsKQEAgLTMyMiw2ICszMjcsNyBAQAogCXsgImc3NTEiLCBnNzUxLCB9LAogCXsgImxtNzUiLCBsbTc1LCB9LAogCXsgImxtNzVhIiwgbG03NWEsIH0sCisJeyAibG03NWIiLCBsbTc1YiwgfSwKIAl7ICJtYXg2NjI1IiwgbWF4NjYyNSwgfSwKIAl7ICJtYXg2NjI2IiwgbWF4NjYyNiwgfSwKIAl7ICJtY3A5ODB4IiwgbWNwOTgweCwgfSwKQEAgLTQwOSw2ICs0MTUsMTIgQEAKIAkJIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCA3KSAhPSBvcykKIAkJCXJldHVybiAtRU5PREVWOwogCX0KKwkvKgorCSAqIEl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCB0aGlzIGlzIGEgTE03NSBpZiBib3RoCisJICogaHlzdGVyZXNpcyBhbmQgdGVtcGVyYXR1cmUgbGltaXQgcmVnaXN0ZXJzIGFyZSAwLgorCSAqLworCWlmIChoeXN0ID09IDAgJiYgb3MgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBBZGRyZXNzZXMgY3ljbGluZyAqLwogCWZvciAoaSA9IDg7IGkgPD0gMjQ4OyBpICs9IDQwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyMzQuYyBiL2RyaXZlcnMvaHdtb24vbG05NTIzNC5jCmluZGV4IDQxMTIwMmIuLjg3OTZkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05NTIzNC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05NTIzNC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgLyBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTUyMzQKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTMgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDEzLCAyMDE0IEd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4KICAqCiAgKiBEZXJpdmVkIGZyb20gbG05NTI0MS5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgRGF2aWRlIFJpenpvIDxlbHBhLnJpenpvQGdtYWlsLmNvbT4KQEAgLTMwLDcgKzMwLDEwIEBACiAKICNkZWZpbmUgRFJWTkFNRSAibG05NTIzNCIKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgxOCwgMHg0ZCwgMHg0ZSwgSTJDX0NMSUVOVF9FTkQgfTsKK2VudW0gY2hpcHMgeyBsbTk1MjMzLCBsbTk1MjM0IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHgxOCwgMHgyYSwgMHgyYiwgMHg0ZCwgMHg0ZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogTE05NTIzNCByZWdpc3RlcnMgKi8KICNkZWZpbmUgTE05NTIzNF9SRUdfTUFOX0lECQkweEZFCkBAIC01MywxMSArNTYsMTMgQEAKICNkZWZpbmUgTE05NTIzNF9SRUdfVENSSVRfSFlTVAkJMHg1YQogCiAjZGVmaW5lIE5BVFNFTUlfTUFOX0lECQkJMHgwMQorI2RlZmluZSBMTTk1MjMzX0NISVBfSUQJCQkweDg5CiAjZGVmaW5lIExNOTUyMzRfQ0hJUF9JRAkJCTB4NzkKIAogLyogQ2xpZW50IGRhdGEgKGVhY2ggY2xpZW50IGdldHMgaXRzIG93bikgKi8KIHN0cnVjdCBsbTk1MjM0X2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JvdXBzWzNdOwogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZCwgaW50ZXJ2YWw7CS8qIGluIGppZmZpZXMgKi8KIAlib29sIHZhbGlkOwkJLyogZmFsc2UgdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KQEAgLTU2NCwzNSArNTY5LDIzIEBACiBzdGF0aWMgREVWSUNFX0FUVFIodXBkYXRlX2ludGVydmFsLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbnRlcnZhbCwKIAkJICAgc2V0X2ludGVydmFsKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtOTUyMzRfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsbTk1MjM0X2NvbW1vbl9hdHRyc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9mYXVsdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfZmF1bHQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2ZhdWx0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9mYXVsdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfdHlwZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfdHlwZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9oeXN0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXRfaHlzdC5kZXZfYXR0ci5hdHRyLApAQCAtNjAxLDE4ICs1OTQsNDQgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X29mZnNldC5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl91cGRhdGVfaW50ZXJ2YWwuYXR0ciwKIAlOVUxMCiB9OwotQVRUUklCVVRFX0dST1VQUyhsbTk1MjM0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG05NTIzNF9jb21tb25fZ3JvdXAgPSB7CisJLmF0dHJzID0gbG05NTIzNF9jb21tb25fYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG05NTIzNF9hdHRyc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X3R5cGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X3R5cGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X29mZnNldC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtOTUyMzRfZ3JvdXAgPSB7CisJLmF0dHJzID0gbG05NTIzNF9hdHRycywKK307CiAKIHN0YXRpYyBpbnQgbG05NTIzNF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IGNsaWVudC0+YWRkcjsKKwl1OCBjb25maWdfbWFzaywgbW9kZWxfbWFzazsKIAlpbnQgbWZnX2lkLCBjaGlwX2lkLCB2YWw7CisJY29uc3QgY2hhciAqbmFtZTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MjIsMTUgKzY0MSwzMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNoaXBfaWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjM0X1JFR19DSElQX0lEKTsKLQlpZiAoY2hpcF9pZCAhPSBMTTk1MjM0X0NISVBfSUQpCisJc3dpdGNoIChjaGlwX2lkKSB7CisJY2FzZSBMTTk1MjMzX0NISVBfSUQ6CisJCWlmIChhZGRyZXNzICE9IDB4MTggJiYgYWRkcmVzcyAhPSAweDJhICYmIGFkZHJlc3MgIT0gMHgyYikKKwkJCXJldHVybiAtRU5PREVWOworCQljb25maWdfbWFzayA9IDB4YmY7CisJCW1vZGVsX21hc2sgPSAweGY5OworCQluYW1lID0gImxtOTUyMzMiOworCQlicmVhazsKKwljYXNlIExNOTUyMzRfQ0hJUF9JRDoKKwkJaWYgKGFkZHJlc3MgIT0gMHgxOCAmJiBhZGRyZXNzICE9IDB4NGQgJiYgYWRkcmVzcyAhPSAweDRlKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWNvbmZpZ19tYXNrID0gMHhiYzsKKwkJbW9kZWxfbWFzayA9IDB4ZTE7CisJCW5hbWUgPSAibG05NTIzNCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNOTUyMzRfUkVHX1NUQVRVUyk7CiAJaWYgKHZhbCAmIDB4MzApCiAJCXJldHVybiAtRU5PREVWOwogCiAJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTIzNF9SRUdfQ09ORklHKTsKLQlpZiAodmFsICYgMHhiYykKKwlpZiAodmFsICYgY29uZmlnX21hc2spCiAJCXJldHVybiAtRU5PREVWOwogCiAJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTIzNF9SRUdfQ09OVlJBVEUpOwpAQCAtNjM4LDE0ICs2NzMsMTQgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjM0X1JFR19SRU1fTU9ERUwpOwotCWlmICh2YWwgJiAweGUxKQorCWlmICh2YWwgJiBtb2RlbF9tYXNrKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNOTUyMzRfUkVHX1JFTV9NT0RFTF9TVFMpOwotCWlmICh2YWwgJiAweGUxKQorCWlmICh2YWwgJiBtb2RlbF9tYXNrKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0cmxjcHkoaW5mby0+dHlwZSwgImxtOTUyMzQiLCBJMkNfTkFNRV9TSVpFKTsKKwlzdHJsY3B5KGluZm8tPnR5cGUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwogCXJldHVybiAwOwogfQogCkBAIC02OTgsMTUgKzczMywxOSBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJZGF0YS0+Z3JvdXBzWzBdID0gJmxtOTUyMzRfY29tbW9uX2dyb3VwOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gbG05NTIzNCkKKwkJZGF0YS0+Z3JvdXBzWzFdID0gJmxtOTUyMzRfZ3JvdXA7CisKIAlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsIGNsaWVudC0+bmFtZSwKLQkJCQkJCQkgICBkYXRhLAotCQkJCQkJCSAgIGxtOTUyMzRfZ3JvdXBzKTsKKwkJCQkJCQkgICBkYXRhLCBkYXRhLT5ncm91cHMpOwogCXJldHVybiBQVFJfRVJSX09SX1pFUk8oaHdtb25fZGV2KTsKIH0KIAogLyogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTk1MjM0X2lkW10gPSB7Ci0JeyAibG05NTIzNCIsIDAgfSwKKwl7ICJsbTk1MjMzIiwgbG05NTIzMyB9LAorCXsgImxtOTUyMzQiLCBsbTk1MjM0IH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtOTUyMzRfaWQpOwpAQCAtNzI1LDUgKzc2NCw1IEBACiBtb2R1bGVfaTJjX2RyaXZlcihsbTk1MjM0X2RyaXZlcik7CiAKIE1PRFVMRV9BVVRIT1IoIkd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTE05NTIzNCBzZW5zb3IgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxNOTUyMzMvTE05NTIzNCBzZW5zb3IgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyNDUuYyBiL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCmluZGV4IDBhZTBkZmQuLmU3YWVmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCkBAIC0xLDEwICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWxleGFuZGVyIFN0ZWluIDxhbGV4YW5kZXIuc3RlaW5Ac3lzdGVjLWVsZWN0cm9uaWMuY29tPgogICoKLSAqIFRoZSBMTTk1MjQ1IGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBOYXRpb25hbCBTZW1pY29uZHVjdG9ycy4KKyAqIFRoZSBMTTk1MjQ1IGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBUSSAvIE5hdGlvbmFsIFNlbWljb25kdWN0b3IuCiAgKiBJdCByZXBvcnRzIHVwIHRvIHR3byB0ZW1wZXJhdHVyZXMgKGl0cyBvd24gcGx1cyBhbiBleHRlcm5hbCBvbmUpLgotICogQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIE5hdGlvbmFsJ3Mgd2Vic2l0ZSBhdDoKLSAqICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vZHMuY2dpL0xNL0xNOTUyNDUucGRmCiAgKgogICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gbG05NTI0MS5jCiAgKgpAQCAtMzQsOCArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAotI2RlZmluZSBERVZOQU1FICJsbTk1MjQ1IgotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewogCTB4MTgsIDB4MTksIDB4MjksIDB4NGMsIDB4NGQsIEkyQ19DTElFTlRfRU5EIH07CiAKQEAgLTk4LDcgKzk0LDggQEAKICNkZWZpbmUgU1RBVFVTMV9MT0MJCTB4MDEKIAogI2RlZmluZSBNQU5VRkFDVFVSRVJfSUQJCTB4MDEKLSNkZWZpbmUgREVGQVVMVF9SRVZJU0lPTgkweEIzCisjZGVmaW5lIExNOTUyMzVfUkVWSVNJT04JMHhCMQorI2RlZmluZSBMTTk1MjQ1X1JFVklTSU9OCTB4QjMKIAogc3RhdGljIGNvbnN0IHU4IGxtOTUyNDVfcmVnX2FkZHJlc3NbXSA9IHsKIAlMTTk1MjQ1X1JFR19SX0xPQ0FMX1RFTVBIX1MsCkBAIC00MjcsMTcgKzQyNCwzMiBAQAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IG5ld19jbGllbnQtPmFkZHI7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmV2LCBpZDsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDVfUkVHX1JfTUFOX0lEKQotCQkJIT0gTUFOVUZBQ1RVUkVSX0lECi0JCXx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCBMTTk1MjQ1X1JFR19SX0NISVBfSUQpCi0JCQkhPSBERUZBVUxUX1JFVklTSU9OKQorCWlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDVfUkVHX1JfTUFOX0lEKTsKKwlpZiAoaWQgIT0gTUFOVUZBQ1RVUkVSX0lEKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0cmxjcHkoaW5mby0+dHlwZSwgREVWTkFNRSwgSTJDX05BTUVfU0laRSk7CisJcmV2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDVfUkVHX1JfQ0hJUF9JRCk7CisJc3dpdGNoIChyZXYpIHsKKwljYXNlIExNOTUyMzVfUkVWSVNJT046CisJCWlmIChhZGRyZXNzICE9IDB4MTggJiYgYWRkcmVzcyAhPSAweDI5ICYmIGFkZHJlc3MgIT0gMHg0YykKKwkJCXJldHVybiAtRU5PREVWOworCQluYW1lID0gImxtOTUyMzUiOworCQlicmVhazsKKwljYXNlIExNOTUyNDVfUkVWSVNJT046CisJCW5hbWUgPSAibG05NTI0NSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0cmxjcHkoaW5mby0+dHlwZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NCw3ICs0OTYsOCBAQAogCiAvKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtOTUyNDVfaWRbXSA9IHsKLQl7IERFVk5BTUUsIDAgfSwKKwl7ICJsbTk1MjM1IiwgMCB9LAorCXsgImxtOTUyNDUiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtOTUyNDVfaWQpOwpAQCAtNDkyLDcgKzUwNSw3IEBACiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG05NTI0NV9kcml2ZXIgPSB7CiAJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewotCQkubmFtZQk9IERFVk5BTUUsCisJCS5uYW1lCT0gImxtOTUyNDUiLAogCX0sCiAJLnByb2JlCQk9IGxtOTUyNDVfcHJvYmUsCiAJLmlkX3RhYmxlCT0gbG05NTI0NV9pZCwKQEAgLTUwMyw1ICs1MTYsNSBAQAogbW9kdWxlX2kyY19kcml2ZXIobG05NTI0NV9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJBbGV4YW5kZXIgU3RlaW4gPGFsZXhhbmRlci5zdGVpbkBzeXN0ZWMtZWxlY3Ryb25pYy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkxNOTUyNDUgc2Vuc29yIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMTTk1MjM1L0xNOTUyNDUgc2Vuc29yIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9uY3Q2Nzc1LmMgYi9kcml2ZXJzL2h3bW9uL25jdDY3NzUuYwppbmRleCA1MDRjYmRkLi5kYzBkZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL25jdDY3NzUuYworKysgYi9kcml2ZXJzL2h3bW9uL25jdDY3NzUuYwpAQCAtMzgsNiArMzgsNyBAQAogICogbmN0Njc3NmYgICAgIDkgICAgICA1ICAgICAgIDMgICAgICAgNiszICAgIDB4YzMzMCAweGMxICAgIDB4NWNhMwogICogbmN0Njc3OWQgICAgMTUgICAgICA1ICAgICAgIDUgICAgICAgMis2ICAgIDB4YzU2MCAweGMxICAgIDB4NWNhMwogICogbmN0Njc5MWQgICAgMTUgICAgICA2ICAgICAgIDYgICAgICAgMis2ICAgIDB4YzgwMCAweGMxICAgIDB4NWNhMworICogbmN0Njc5MmQgICAgMTUgICAgICA2ICAgICAgIDYgICAgICAgMis2ICAgIDB4YzkxMCAweGMxICAgIDB4NWNhMwogICoKICAqICN0ZW1wIGxpc3RzIHRoZSBudW1iZXIgb2YgbW9uaXRvcmVkIHRlbXBlcmF0dXJlIHNvdXJjZXMgKGZpcnN0IHZhbHVlKSBwbHVzCiAgKiB0aGUgbnVtYmVyIG9mIGRpcmVjdGx5IGNvbm5lY3RhYmxlIHRlbXBlcmF0dXJlIHNlbnNvcnMgKHNlY29uZCB2YWx1ZSkuCkBAIC02MSw3ICs2Miw3IEBACiAKICNkZWZpbmUgVVNFX0FMVEVSTkFURQogCi1lbnVtIGtpbmRzIHsgbmN0NjEwNiwgbmN0Njc3NSwgbmN0Njc3NiwgbmN0Njc3OSwgbmN0Njc5MSB9OworZW51bSBraW5kcyB7IG5jdDYxMDYsIG5jdDY3NzUsIG5jdDY3NzYsIG5jdDY3NzksIG5jdDY3OTEsIG5jdDY3OTIgfTsKIAogLyogdXNlZCB0byBzZXQgZGF0YS0+bmFtZSA9IG5jdDY3NzVfZGV2aWNlX25hbWVzW2RhdGEtPnNpb19raW5kXSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuY3Q2Nzc1X2RldmljZV9uYW1lc1tdID0gewpAQCAtNzAsNiArNzEsNyBAQAogCSJuY3Q2Nzc2IiwKIAkibmN0Njc3OSIsCiAJIm5jdDY3OTEiLAorCSJuY3Q2NzkyIiwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBmb3JjZV9pZDsKQEAgLTEwMCw2ICsxMDIsNyBAQAogI2RlZmluZSBTSU9fTkNUNjc3Nl9JRAkJMHhjMzMwCiAjZGVmaW5lIFNJT19OQ1Q2Nzc5X0lECQkweGM1NjAKICNkZWZpbmUgU0lPX05DVDY3OTFfSUQJCTB4YzgwMAorI2RlZmluZSBTSU9fTkNUNjc5Ml9JRAkJMHhjOTEwCiAjZGVmaW5lIFNJT19JRF9NQVNLCQkweEZGRjAKIAogZW51bSBwd21fZW5hYmxlIHsgb2ZmLCBtYW51YWwsIHRoZXJtYWxfY3J1aXNlLCBzcGVlZF9jcnVpc2UsIHNmMywgc2Y0IH07CkBAIC01MjksNiArNTMyLDEyIEBACiAJNCwgNSwgMTMsIC0xLCAtMSwgLTEsCQkvKiB0ZW1wMS4udGVtcDYgKi8KIAkxMiwgOSB9OwkJCS8qIGludHJ1c2lvbjAsIGludHJ1c2lvbjEgKi8KIAorLyogTkNUNjc5MiBzcGVjaWZpYyBkYXRhICovCisKK3N0YXRpYyBjb25zdCB1MTYgTkNUNjc5Ml9SRUdfVEVNUF9NT05bXSA9IHsKKwkweDczLCAweDc1LCAweDc3LCAweDc5LCAweDdiLCAweDdkIH07CitzdGF0aWMgY29uc3QgdTE2IE5DVDY3OTJfUkVHX0JFRVBbTlVNX1JFR19CRUVQXSA9IHsKKwkweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGJmIH07CiAKIC8qIE5DVDYxMDJEL05DVDYxMDZEIHNwZWNpZmljIGRhdGEgKi8KIApAQCAtMTA0MywxMyArMTA1MiwxNCBAQAogCQkgIHJlZyA9PSAweDczIHx8IHJlZyA9PSAweDc1IHx8IHJlZyA9PSAweDc3OwogCWNhc2UgbmN0Njc3OToKIAljYXNlIG5jdDY3OTE6CisJY2FzZSBuY3Q2NzkyOgogCQlyZXR1cm4gcmVnID09IDB4MTUwIHx8IHJlZyA9PSAweDE1MyB8fCByZWcgPT0gMHgxNTUgfHwKIAkJICAoKHJlZyAmIDB4ZmZmMCkgPT0gMHg0YjAgJiYgKHJlZyAmIDB4MDAwZikgPCAweDBiKSB8fAogCQkgIHJlZyA9PSAweDQwMiB8fAogCQkgIHJlZyA9PSAweDYzYSB8fCByZWcgPT0gMHg2M2MgfHwgcmVnID09IDB4NjNlIHx8CiAJCSAgcmVnID09IDB4NjQwIHx8IHJlZyA9PSAweDY0MiB8fAogCQkgIHJlZyA9PSAweDczIHx8IHJlZyA9PSAweDc1IHx8IHJlZyA9PSAweDc3IHx8IHJlZyA9PSAweDc5IHx8Ci0JCSAgcmVnID09IDB4N2I7CisJCSAgcmVnID09IDB4N2IgfHwgcmVnID09IDB4N2Q7CiAJfQogCXJldHVybiBmYWxzZTsKIH0KQEAgLTEwNjMsNiArMTA3Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbmN0Njc3NV9zZXRfYmFuayhzdHJ1Y3QgbmN0Njc3NV9kYXRhICpkYXRhLCB1MTYgcmVnKQogewogCXU4IGJhbmsgPSByZWcgPj4gODsKKwogCWlmIChkYXRhLT5iYW5rICE9IGJhbmspIHsKIAkJb3V0Yl9wKE5DVDY3NzVfUkVHX0JBTkssIGRhdGEtPmFkZHIgKyBBRERSX1JFR19PRkZTRVQpOwogCQlvdXRiX3AoYmFuaywgZGF0YS0+YWRkciArIERBVEFfUkVHX09GRlNFVCk7CkBAIC0xMzAwLDYgKzEzMTEsNyBAQAogCQlpZiAoIWRhdGEtPnRhcmdldF9zcGVlZF90b2xlcmFuY2VbaV0gfHwKIAkJICAgIGRhdGEtPnB3bV9lbmFibGVbaV0gPT0gc3BlZWRfY3J1aXNlKSB7CiAJCQl1OCB0ID0gZmFubW9kZWNmZyAmIDB4MGY7CisKIAkJCWlmIChkYXRhLT5SRUdfVE9MRVJBTkNFX0gpIHsKIAkJCQl0IHw9IChuY3Q2Nzc1X3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkgICAgICBkYXRhLT5SRUdfVE9MRVJBTkNFX0hbaV0pICYgMHg3MCkgPj4gMTsKQEAgLTEzOTEsNiArMTQwMyw3IEBACiAJCWNhc2UgbmN0NjEwNjoKIAkJY2FzZSBuY3Q2Nzc5OgogCQljYXNlIG5jdDY3OTE6CisJCWNhc2UgbmN0Njc5MjoKIAkJCXJlZyA9IG5jdDY3NzVfcmVhZF92YWx1ZShkYXRhLAogCQkJCQlkYXRhLT5SRUdfQ1JJVElDQUxfUFdNX0VOQUJMRVtpXSk7CiAJCQlpZiAocmVnICYgZGF0YS0+Q1JJVElDQUxfUFdNX0VOQUJMRV9NQVNLKQpAQCAtMTQ3Myw2ICsxNDg2LDcgQEAKIAkJZGF0YS0+YWxhcm1zID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IE5VTV9SRUdfQUxBUk07IGkrKykgewogCQkJdTggYWxhcm07CisKIAkJCWlmICghZGF0YS0+UkVHX0FMQVJNW2ldKQogCQkJCWNvbnRpbnVlOwogCQkJYWxhcm0gPSBuY3Q2Nzc1X3JlYWRfdmFsdWUoZGF0YSwgZGF0YS0+UkVHX0FMQVJNW2ldKTsKQEAgLTE0ODIsNiArMTQ5Niw3IEBACiAJCWRhdGEtPmJlZXBzID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IE5VTV9SRUdfQkVFUDsgaSsrKSB7CiAJCQl1OCBiZWVwOworCiAJCQlpZiAoIWRhdGEtPlJFR19CRUVQW2ldKQogCQkJCWNvbnRpbnVlOwogCQkJYmVlcCA9IG5jdDY3NzVfcmVhZF92YWx1ZShkYXRhLCBkYXRhLT5SRUdfQkVFUFtpXSk7CkBAIC0xNTA0LDggKzE1MTksOSBAQAogewogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBuY3Q2Nzc1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKLQlpbnQgbnIgPSBzYXR0ci0+bnI7CiAJaW50IGluZGV4ID0gc2F0dHItPmluZGV4OworCWludCBuciA9IHNhdHRyLT5ucjsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgaW5fZnJvbV9yZWcoZGF0YS0+aW5bbnJdW2luZGV4XSwgbnIpKTsKIH0KIApAQCAtMTUxNSwxMCArMTUzMSwxMiBAQAogewogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKLQlpbnQgbnIgPSBzYXR0ci0+bnI7CiAJaW50IGluZGV4ID0gc2F0dHItPmluZGV4OworCWludCBuciA9IHNhdHRyLT5ucjsKIAl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaW50IGVycjsKKworCWVyciA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTE1MzUsNiArMTU1Myw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gZGF0YS0+QUxBUk1fQklUU1tzYXR0ci0+aW5kZXhdOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCiAJCSAgICAgICAodW5zaWduZWQgaW50KSgoZGF0YS0+YWxhcm1zID4+IG5yKSAmIDB4MDEpKTsKIH0KQEAgLTE1NzAsNiArMTU4OSw3IEBACiAJbnIgPSBmaW5kX3RlbXBfc291cmNlKGRhdGEsIHNhdHRyLT5pbmRleCwgZGF0YS0+bnVtX3RlbXBfYWxhcm1zKTsKIAlpZiAobnIgPj0gMCkgewogCQlpbnQgYml0ID0gZGF0YS0+QUxBUk1fQklUU1tuciArIFRFTVBfQUxBUk1fQkFTRV07CisKIAkJYWxhcm0gPSAoZGF0YS0+YWxhcm1zID4+IGJpdCkgJiAweDAxOwogCX0KIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYWxhcm0pOwpAQCAtMTU5NSw4ICsxNjE1LDkgQEAKIAlpbnQgbnIgPSBkYXRhLT5CRUVQX0JJVFNbc2F0dHItPmluZGV4XTsKIAlpbnQgcmVnaW5kZXggPSBuciA+PiAzOwogCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBlcnI7CiAKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJaWYgKHZhbCA+IDEpCkBAIC0xNjI5LDYgKzE2NTAsNyBAQAogCW5yID0gZmluZF90ZW1wX3NvdXJjZShkYXRhLCBzYXR0ci0+aW5kZXgsIGRhdGEtPm51bV90ZW1wX2JlZXBzKTsKIAlpZiAobnIgPj0gMCkgewogCQlpbnQgYml0ID0gZGF0YS0+QkVFUF9CSVRTW25yICsgVEVNUF9BTEFSTV9CQVNFXTsKKwogCQliZWVwID0gKGRhdGEtPmJlZXBzID4+IGJpdCkgJiAweDAxOwogCX0KIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYmVlcCk7CkBAIC0xNjQyLDggKzE2NjQsOSBAQAogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgbnIsIGJpdCwgcmVnaW5kZXg7CiAJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycjsKIAotCWludCBlcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlpZiAodmFsID4gMSkKQEAgLTE3MTUsNiArMTczOCw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnJwbVtucl0pOwogfQogCkBAIC0xNzI0LDYgKzE3NDgsNyBAQAogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBuY3Q2Nzc1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwogCWludCBuciA9IHNhdHRyLT5pbmRleDsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAogCQkgICAgICAgZGF0YS0+ZmFuX2Zyb21fcmVnX21pbihkYXRhLT5mYW5fbWluW25yXSwKIAkJCQkJICAgICAgZGF0YS0+ZmFuX2Rpdltucl0pKTsKQEAgLTE3MzUsNiArMTc2MCw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRpdl9mcm9tX3JlZyhkYXRhLT5mYW5fZGl2W25yXSkpOwogfQogCkBAIC0xNzQ2LDkgKzE3NzIsOSBAQAogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OwogCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBlcnI7CiAJdW5zaWduZWQgaW50IHJlZzsKIAl1OCBuZXdfZGl2OworCWludCBlcnI7CiAKIAllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE5MzIsNiArMTk1OCw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPnRlbXBfbGFiZWxbZGF0YS0+dGVtcF9zcmNbbnJdXSk7CiB9CiAKQEAgLTIwMDgsNiArMjAzNSw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpZGF0YS0+dGVtcF90eXBlW25yXSk7CiB9CiAKQEAgLTI3OTAsNiArMjgxOCw3IEBACiAJCWNhc2UgbmN0NjEwNjoKIAkJY2FzZSBuY3Q2Nzc5OgogCQljYXNlIG5jdDY3OTE6CisJCWNhc2UgbmN0Njc5MjoKIAkJCW5jdDY3NzVfd3JpdGVfdmFsdWUoZGF0YSwgZGF0YS0+UkVHX0NSSVRJQ0FMX1BXTVtucl0sCiAJCQkJCSAgICB2YWwpOwogCQkJcmVnID0gbmN0Njc3NV9yZWFkX3ZhbHVlKGRhdGEsCkBAIC0yOTk3LDYgKzMwMjYsNyBAQAogc2hvd192aWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2aWRfZnJvbV9yZWcoZGF0YS0+dmlkLCBkYXRhLT52cm0pKTsKIH0KIApAQCAtMzIwMiw3ICszMjMyLDcgQEAKIAkJcHdtNHBpbiA9IGZhbHNlOwogCQlwd201cGluID0gZmFsc2U7CiAJCXB3bTZwaW4gPSBmYWxzZTsKLQl9IGVsc2UgewkvKiBOQ1Q2Nzc5RCBvciBOQ1Q2NzkxRCAqLworCX0gZWxzZSB7CS8qIE5DVDY3NzlELCBOQ1Q2NzkxRCwgb3IgTkNUNjc5MkQgKi8KIAkJcmVndmFsID0gc3VwZXJpb19pbmIoc2lvcmVnLCAweDFjKTsKIAogCQlmYW4zcGluID0gIShyZWd2YWwgJiAoMSA8PCA1KSk7CkBAIC0zMjE1LDcgKzMyNDUsNyBAQAogCiAJCWZhbjRtaW4gPSBmYW40cGluOwogCi0JCWlmIChkYXRhLT5raW5kID09IG5jdDY3OTEpIHsKKwkJaWYgKGRhdGEtPmtpbmQgPT0gbmN0Njc5MSB8fCBkYXRhLT5raW5kID09IG5jdDY3OTIpIHsKIAkJCXJlZ3ZhbCA9IHN1cGVyaW9faW5iKHNpb3JlZywgMHgyZCk7CiAJCQlmYW42cGluID0gKHJlZ3ZhbCAmICgxIDw8IDEpKTsKIAkJCXB3bTZwaW4gPSAocmVndmFsICYgKDEgPDwgMCkpOwpAQCAtMzU4OCw2ICszNjE4LDcgQEAKIAogCQlicmVhazsKIAljYXNlIG5jdDY3OTE6CisJY2FzZSBuY3Q2NzkyOgogCQlkYXRhLT5pbl9udW0gPSAxNTsKIAkJZGF0YS0+cHdtX251bSA9IDY7CiAJCWRhdGEtPmF1dG9fcHdtX251bSA9IDQ7CkBAIC0zNjUwLDEyICszNjgxLDIwIEBACiAJCWRhdGEtPlJFR19XRUlHSFRfVEVNUFsxXSA9IE5DVDY3OTFfUkVHX1dFSUdIVF9URU1QX1NURVBfVE9MOwogCQlkYXRhLT5SRUdfV0VJR0hUX1RFTVBbMl0gPSBOQ1Q2NzkxX1JFR19XRUlHSFRfVEVNUF9CQVNFOwogCQlkYXRhLT5SRUdfQUxBUk0gPSBOQ1Q2NzkxX1JFR19BTEFSTTsKLQkJZGF0YS0+UkVHX0JFRVAgPSBOQ1Q2Nzc2X1JFR19CRUVQOworCQlpZiAoZGF0YS0+a2luZCA9PSBuY3Q2NzkxKQorCQkJZGF0YS0+UkVHX0JFRVAgPSBOQ1Q2Nzc2X1JFR19CRUVQOworCQllbHNlCisJCQlkYXRhLT5SRUdfQkVFUCA9IE5DVDY3OTJfUkVHX0JFRVA7CiAKIAkJcmVnX3RlbXAgPSBOQ1Q2Nzc5X1JFR19URU1QOwotCQlyZWdfdGVtcF9tb24gPSBOQ1Q2Nzc5X1JFR19URU1QX01PTjsKIAkJbnVtX3JlZ190ZW1wID0gQVJSQVlfU0laRShOQ1Q2Nzc5X1JFR19URU1QKTsKLQkJbnVtX3JlZ190ZW1wX21vbiA9IEFSUkFZX1NJWkUoTkNUNjc3OV9SRUdfVEVNUF9NT04pOworCQlpZiAoZGF0YS0+a2luZCA9PSBuY3Q2NzkxKSB7CisJCQlyZWdfdGVtcF9tb24gPSBOQ1Q2Nzc5X1JFR19URU1QX01PTjsKKwkJCW51bV9yZWdfdGVtcF9tb24gPSBBUlJBWV9TSVpFKE5DVDY3NzlfUkVHX1RFTVBfTU9OKTsKKwkJfSBlbHNlIHsKKwkJCXJlZ190ZW1wX21vbiA9IE5DVDY3OTJfUkVHX1RFTVBfTU9OOworCQkJbnVtX3JlZ190ZW1wX21vbiA9IEFSUkFZX1NJWkUoTkNUNjc5Ml9SRUdfVEVNUF9NT04pOworCQl9CiAJCXJlZ190ZW1wX292ZXIgPSBOQ1Q2Nzc5X1JFR19URU1QX09WRVI7CiAJCXJlZ190ZW1wX2h5c3QgPSBOQ1Q2Nzc5X1JFR19URU1QX0hZU1Q7CiAJCXJlZ190ZW1wX2NvbmZpZyA9IE5DVDY3NzlfUkVHX1RFTVBfQ09ORklHOwpAQCAtMzg1NCw2ICszODkzLDcgQEAKIAljYXNlIG5jdDYxMDY6CiAJY2FzZSBuY3Q2Nzc5OgogCWNhc2UgbmN0Njc5MToKKwljYXNlIG5jdDY3OTI6CiAJCWJyZWFrOwogCX0KIApAQCAtMzg4NSw2ICszOTI1LDcgQEAKIAkJCXRtcCB8PSAweDNlOwogCQkJYnJlYWs7CiAJCWNhc2UgbmN0Njc5MToKKwkJY2FzZSBuY3Q2NzkyOgogCQkJdG1wIHw9IDB4N2U7CiAJCQlicmVhazsKIAkJfQpAQCAtMzk3Miw3ICs0MDEzLDcgQEAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+YmFuayA9IDB4ZmY7CQkvKiBGb3JjZSBpbml0aWFsIGJhbmsgc2VsZWN0aW9uICovCiAKLQlpZiAoZGF0YS0+a2luZCA9PSBuY3Q2NzkxKSB7CisJaWYgKGRhdGEtPmtpbmQgPT0gbmN0Njc5MSB8fCBkYXRhLT5raW5kID09IG5jdDY3OTIpIHsKIAkJZXJyID0gc3VwZXJpb19lbnRlcihkYXRhLT5zaW9yZWcpOwogCQlpZiAoZXJyKQogCQkJZ290byBhYm9ydDsKQEAgLTQwNTIsNiArNDA5Myw3IEBACiAJIk5DVDY3NzZEL0YiLAogCSJOQ1Q2Nzc5RCIsCiAJIk5DVDY3OTFEIiwKKwkiTkNUNjc5MkQiLAogfTsKIAogLyogbmN0Njc3NV9maW5kKCkgbG9va3MgZm9yIGEgJzYyNyBpbiB0aGUgU3VwZXItSS9PIGNvbmZpZyBzcGFjZSAqLwpAQCAtNDA4Niw2ICs0MTI4LDkgQEAKIAljYXNlIFNJT19OQ1Q2NzkxX0lEOgogCQlzaW9fZGF0YS0+a2luZCA9IG5jdDY3OTE7CiAJCWJyZWFrOworCWNhc2UgU0lPX05DVDY3OTJfSUQ6CisJCXNpb19kYXRhLT5raW5kID0gbmN0Njc5MjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKHZhbCAhPSAweGZmZmYpCiAJCQlwcl9kZWJ1ZygidW5zdXBwb3J0ZWQgY2hpcCBJRDogMHglMDR4XG4iLCB2YWwpOwpAQCAtNDExMSw3ICs0MTU2LDcgQEAKIAkJc3VwZXJpb19vdXRiKHNpb2FkZHIsIFNJT19SRUdfRU5BQkxFLCB2YWwgfCAweDAxKTsKIAl9CiAKLQlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gbmN0Njc5MSkKKwlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gbmN0Njc5MSB8fCBzaW9fZGF0YS0+a2luZCA9PSBuY3Q2NzkyKQogCQluY3Q2NzkxX2VuYWJsZV9pb19tYXBwaW5nKHNpb2FkZHIpOwogCiAJc3VwZXJpb19leGl0KHNpb2FkZHIpOwpAQCAtNDIyMSw3ICs0MjY2LDcgQEAKIH0KIAogTU9EVUxFX0FVVEhPUigiR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJOQ1Q2MTA2RC9OQ1Q2Nzc1Ri9OQ1Q2Nzc2Ri9OQ1Q2Nzc5RC9OQ1Q2NzkxRCBkcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTkNUNjEwNkQvTkNUNjc3NUYvTkNUNjc3NkYvTkNUNjc3OUQvTkNUNjc5MUQvTkNUNjc5MkQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHNlbnNvcnNfbmN0Njc3NV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbmN0NzgwMi5jIGIvZHJpdmVycy9od21vbi9uY3Q3ODAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1Njc4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vbmN0NzgwMi5jCkBAIC0wLDAgKzEsODYwIEBACisvKgorICogbmN0NzgwMiAtIERyaXZlciBmb3IgTnV2b3RvbiBOQ1Q3ODAyWQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCAgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBEUlZOQU1FICJuY3Q3ODAyIgorCitzdGF0aWMgY29uc3QgdTggUkVHX1ZPTFRBR0VbNV0gPSB7IDB4MDksIDB4MGEsIDB4MGMsIDB4MGQsIDB4MGUgfTsKKworc3RhdGljIGNvbnN0IHU4IFJFR19WT0xUQUdFX0xJTUlUX0xTQlsyXVs1XSA9IHsKKwl7IDB4NDAsIDB4MDAsIDB4NDIsIDB4NDQsIDB4NDYgfSwKKwl7IDB4M2YsIDB4MDAsIDB4NDEsIDB4NDMsIDB4NDUgfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBSRUdfVk9MVEFHRV9MSU1JVF9NU0JbNV0gPSB7IDB4NDgsIDB4MDAsIDB4NDcsIDB4NDcsIDB4NDggfTsKKworc3RhdGljIGNvbnN0IHU4IFJFR19WT0xUQUdFX0xJTUlUX01TQl9TSElGVFsyXVs1XSA9IHsKKwl7IDAsIDAsIDQsIDAsIDQgfSwKKwl7IDIsIDAsIDYsIDIsIDYgfSwKK307CisKKyNkZWZpbmUgUkVHX0JBTksJCTB4MDAKKyNkZWZpbmUgUkVHX1RFTVBfTFNCCQkweDA1CisjZGVmaW5lIFJFR19URU1QX1BFQ0lfTFNCCTB4MDgKKyNkZWZpbmUgUkVHX1ZPTFRBR0VfTE9XCQkweDBmCisjZGVmaW5lIFJFR19GQU5DT1VOVF9MT1cJMHgxMworI2RlZmluZSBSRUdfU1RBUlQJCTB4MjEKKyNkZWZpbmUgUkVHX01PREUJCTB4MjIKKyNkZWZpbmUgUkVHX1BFQ0lfRU5BQkxFCQkweDIzCisjZGVmaW5lIFJFR19GQU5fRU5BQkxFCQkweDI0CisjZGVmaW5lIFJFR19WTU9OX0VOQUJMRQkJMHgyNQorI2RlZmluZSBSRUdfVkVORE9SX0lECQkweGZkCisjZGVmaW5lIFJFR19DSElQX0lECQkweGZlCisjZGVmaW5lIFJFR19WRVJTSU9OX0lECQkweGZmCisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZXMgYW5kIG1hbmlwdWxhdGlvbiB0aGVyZW9mCisgKi8KKworc3RydWN0IG5jdDc4MDJfZGF0YSB7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCBtdXRleCBhY2Nlc3NfbG9jazsgLyogZm9yIG11bHRpLWJ5dGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyAqLworfTsKKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfdGVtcChzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLAorCQkJICAgICB1OCByZWdfdGVtcCwgdTggcmVnX3RlbXBfbG93LCBpbnQgKnRlbXApCit7CisJdW5zaWduZWQgaW50IHQxLCB0MiA9IDA7CisJaW50IGVycjsKKworCSp0ZW1wID0gMDsKKworCW11dGV4X2xvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIHJlZ190ZW1wLCAmdDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGFib3J0OworCXQxIDw8PSA4OworCWlmIChyZWdfdGVtcF9sb3cpIHsJLyogMTEgYml0IGRhdGEgKi8KKwkJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCByZWdfdGVtcF9sb3csICZ0Mik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBhYm9ydDsKKwl9CisJdDEgfD0gdDIgJiAweGUwOworCSp0ZW1wID0gKHMxNil0MSAvIDMyICogMTI1OworYWJvcnQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfZmFuKHN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEsIHU4IHJlZ19mYW4pCit7CisJdW5zaWduZWQgaW50IGYxLCBmMjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+YWNjZXNzX2xvY2spOworCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgcmVnX2ZhbiwgJmYxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBhYm9ydDsKKwlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19GQU5DT1VOVF9MT1csICZmMik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYWJvcnQ7CisJcmV0ID0gKGYxIDw8IDUpIHwgKGYyID4+IDMpOworCS8qIGNvbnZlcnQgZmFuIGNvdW50IHRvIHJwbSAqLworCWlmIChyZXQgPT0gMHgxZmZmKQkvKiBtYXhpbXVtIHZhbHVlLCBhc3N1bWUgZmFuIGlzIHN0b3BwZWQgKi8KKwkJcmV0ID0gMDsKKwllbHNlIGlmIChyZXQpCisJCXJldCA9IERJVl9ST1VORF9DTE9TRVNUKDEzNTAwMDBVLCByZXQpOworYWJvcnQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfZmFuX21pbihzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCB1OCByZWdfZmFuX2xvdywKKwkJCQl1OCByZWdfZmFuX2hpZ2gpCit7CisJdW5zaWduZWQgaW50IGYxLCBmMjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+YWNjZXNzX2xvY2spOworCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgcmVnX2Zhbl9sb3csICZmMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYWJvcnQ7CisJcmV0ID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCByZWdfZmFuX2hpZ2gsICZmMik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYWJvcnQ7CisJcmV0ID0gZjEgfCAoKGYyICYgMHhmOCkgPDwgNSk7CisJLyogY29udmVydCBmYW4gY291bnQgdG8gcnBtICovCisJaWYgKHJldCA9PSAweDFmZmYpCS8qIG1heGltdW0gdmFsdWUsIGFzc3VtZSBubyBsaW1pdCAqLworCQlyZXQgPSAwOworCWVsc2UgaWYgKHJldCkKKwkJcmV0ID0gRElWX1JPVU5EX0NMT1NFU1QoMTM1MDAwMFUsIHJldCk7CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5jdDc4MDJfd3JpdGVfZmFuX21pbihzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCB1OCByZWdfZmFuX2xvdywKKwkJCQkgdTggcmVnX2Zhbl9oaWdoLCB1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJaW50IGVycjsKKworCWlmIChsaW1pdCkKKwkJbGltaXQgPSBESVZfUk9VTkRfQ0xPU0VTVCgxMzUwMDAwVSwgbGltaXQpOworCWVsc2UKKwkJbGltaXQgPSAweDFmZmY7CisJbGltaXQgPSBjbGFtcF92YWwobGltaXQsIDAsIDB4MWZmZik7CisKKwltdXRleF9sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJZXJyID0gcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwgcmVnX2Zhbl9sb3csIGxpbWl0ICYgMHhmZik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gYWJvcnQ7CisKKwllcnIgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCByZWdfZmFuX2hpZ2gsIChsaW1pdCAmIDB4MWYwMCkgPj4gNSk7CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdTggbmN0NzgwMl92bXVsW10gPSB7IDQsIDIsIDIsIDIsIDIgfTsKKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfdm9sdGFnZShzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCBpbnQgbnIsIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgdjEsIHYyOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJaWYgKGluZGV4ID09IDApIHsJLyogdm9sdGFnZSAqLworCQlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19WT0xUQUdFW25yXSwgJnYxKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGFib3J0OworCQlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19WT0xUQUdFX0xPVywgJnYyKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGFib3J0OworCQlyZXQgPSAoKHYxIDw8IDIpIHwgKHYyID4+IDYpKSAqIG5jdDc4MDJfdm11bFtucl07CisJfSAgZWxzZSB7CS8qIGxpbWl0ICovCisJCWludCBzaGlmdCA9IDggLSBSRUdfVk9MVEFHRV9MSU1JVF9NU0JfU0hJRlRbaW5kZXggLSAxXVtucl07CisKKwkJcmV0ID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLAorCQkJCSAgUkVHX1ZPTFRBR0VfTElNSVRfTFNCW2luZGV4IC0gMV1bbnJdLCAmdjEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gYWJvcnQ7CisJCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgUkVHX1ZPTFRBR0VfTElNSVRfTVNCW25yXSwKKwkJCQkgICZ2Mik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBhYm9ydDsKKwkJcmV0ID0gKHYxIHwgKCh2MiA8PCBzaGlmdCkgJiAweDMwMCkpICogbmN0NzgwMl92bXVsW25yXTsKKwl9CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5jdDc4MDJfd3JpdGVfdm9sdGFnZShzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCBpbnQgbnIsIGludCBpbmRleCwKKwkJCQkgdW5zaWduZWQgaW50IHZvbHRhZ2UpCit7CisJaW50IHNoaWZ0ID0gOCAtIFJFR19WT0xUQUdFX0xJTUlUX01TQl9TSElGVFtpbmRleCAtIDFdW25yXTsKKwlpbnQgZXJyOworCisJdm9sdGFnZSA9IERJVl9ST1VORF9DTE9TRVNUKHZvbHRhZ2UsIG5jdDc4MDJfdm11bFtucl0pOworCXZvbHRhZ2UgPSBjbGFtcF92YWwodm9sdGFnZSwgMCwgMHgzZmYpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+YWNjZXNzX2xvY2spOworCWVyciA9IHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsCisJCQkgICBSRUdfVk9MVEFHRV9MSU1JVF9MU0JbaW5kZXggLSAxXVtucl0sCisJCQkgICB2b2x0YWdlICYgMHhmZik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gYWJvcnQ7CisKKwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGF0YS0+cmVnbWFwLCBSRUdfVk9MVEFHRV9MSU1JVF9NU0JbbnJdLAorCQkJCSAweDAzMDAgPj4gc2hpZnQsICh2b2x0YWdlICYgMHgwMzAwKSA+PiBzaGlmdCk7CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCB2b2x0YWdlOworCisJdm9sdGFnZSA9IG5jdDc4MDJfcmVhZF92b2x0YWdlKGRhdGEsIHNhdHRyLT5uciwgc2F0dHItPmluZGV4KTsKKwlpZiAodm9sdGFnZSA8IDApCisJCXJldHVybiB2b2x0YWdlOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZvbHRhZ2UpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpbmRleCA9IHNhdHRyLT5pbmRleDsKKwlpbnQgbnIgPSBzYXR0ci0+bnI7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycjsKKworCWVyciA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbmN0NzgwMl93cml0ZV92b2x0YWdlKGRhdGEsIG5yLCBpbmRleCwgdmFsKTsKKwlyZXR1cm4gZXJyID8gOiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgZXJyLCB0ZW1wOworCisJZXJyID0gbmN0NzgwMl9yZWFkX3RlbXAoZGF0YSwgc2F0dHItPm5yLCBzYXR0ci0+aW5kZXgsICZ0ZW1wKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG5yID0gc2F0dHItPm5yOworCWxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBrc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJdmFsID0gY2xhbXBfdmFsKERJVl9ST1VORF9DTE9TRVNUKHZhbCwgMTAwMCksIC0xMjgsIDEyNyk7CisKKwllcnIgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBuciwgdmFsICYgMHhmZik7CisJcmV0dXJuIGVyciA/IDogY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHNwZWVkOworCisJc3BlZWQgPSBuY3Q3ODAyX3JlYWRfZmFuKGRhdGEsIHNhdHRyLT5pbmRleCk7CisJaWYgKHNwZWVkIDwgMCkKKwkJcmV0dXJuIHNwZWVkOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHNwZWVkKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgc3BlZWQ7CisKKwlzcGVlZCA9IG5jdDc4MDJfcmVhZF9mYW5fbWluKGRhdGEsIHNhdHRyLT5uciwgc2F0dHItPmluZGV4KTsKKwlpZiAoc3BlZWQgPCAwKQorCQlyZXR1cm4gc3BlZWQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3BlZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZXJyOworCisJZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBuY3Q3ODAyX3dyaXRlX2Zhbl9taW4oZGF0YSwgc2F0dHItPm5yLCBzYXR0ci0+aW5kZXgsIHZhbCk7CisJcmV0dXJuIGVyciA/IDogY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgYml0ID0gc2F0dHItPmluZGV4OworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgc2F0dHItPm5yLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhISh2YWwgJiAoMSA8PCBiaXQpKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X2JlZXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgcmVndmFsOworCWludCBlcnI7CisKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIHNhdHRyLT5uciwgJnJlZ3ZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShyZWd2YWwgJiAoMSA8PCBzYXR0ci0+aW5kZXgpKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV9iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAodmFsID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGF0YS0+cmVnbWFwLCBzYXR0ci0+bnIsIDEgPDwgc2F0dHItPmluZGV4LAorCQkJCSB2YWwgPyAxIDw8IHNhdHRyLT5pbmRleCA6IDApOworCXJldHVybiBlcnIgPyA6IGNvdW50OworfQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwMSwKKwkJCSAgICBSRUdfVEVNUF9MU0IpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDMxLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCisJCQkgICAgc3RvcmVfdGVtcCwgMHgzMCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfY3JpdCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDNhLCAwKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDB4MDIsCisJCQkgICAgUkVHX1RFTVBfTFNCKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9taW4sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCisJCQkgICAgc3RvcmVfdGVtcCwgMHgzMywgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzIsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX2NyaXQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCisJCQkgICAgc3RvcmVfdGVtcCwgMHgzYiwgMCk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAweDAzLAorCQkJICAgIFJFR19URU1QX0xTQik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDM0LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4M2MsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwNCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzcsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA0X21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDM2LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNF9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4M2QsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwNiwKKwkJCSAgICBSRUdfVEVNUF9QRUNJX0xTQik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzksIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA1X21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDM4LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNV9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4M2UsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDZfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwNywKKwkJCSAgICBSRUdfVEVNUF9QRUNJX0xTQik7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxOCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTgsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDE4LCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNF9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxOCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTgsIDQpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTksIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDE5LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxOSwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTksIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA1X21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDE5LCA0KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxYiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDFiLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MWIsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA0X2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxYiwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDFiLCA0KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAweDE3LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMHgxNywgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDNfZmF1bHQsIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MTcsIDIpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwKKwkJCSAgICBzdG9yZV9iZWVwLCAweDVjLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLAorCQkJICAgIHN0b3JlX2JlZXAsIDB4NWMsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JlZXAsCisJCQkgICAgc3RvcmVfYmVlcCwgMHg1YywgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwKKwkJCSAgICBzdG9yZV9iZWVwLCAweDVjLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNV9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLAorCQkJICAgIHN0b3JlX2JlZXAsIDB4NWMsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA2X2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JlZXAsCisJCQkgICAgc3RvcmVfYmVlcCwgMHg1YywgNSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpuY3Q3ODAyX3RlbXBfYXR0cnNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9iZWVwLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyLmF0dHIsCQkvKiA5ICovCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9iZWVwLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCQkvKiAxOCAqLworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9pbnB1dC5kZXZfYXR0ci5hdHRyLAkJLyogMjcgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAkJLyogMzUgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAkJLyogNDMgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA2X2JlZXAuZGV2X2F0dHIuYXR0ciwKKworCU5VTEwKK307CisKK3N0YXRpYyB1bW9kZV90IG5jdDc4MDJfdGVtcF9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCBlcnI7CisKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19NT0RFLCAmcmVnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW5kZXggPCA5ICYmCisJICAgIChyZWcgJiAwMykgIT0gMHgwMSAmJiAocmVnICYgMHgwMykgIT0gMHgwMikJCS8qIFJEMSAqLworCQlyZXR1cm4gMDsKKwlpZiAoaW5kZXggPj0gOSAmJiBpbmRleCA8IDE4ICYmCisJICAgIChyZWcgJiAweDBjKSAhPSAweDA0ICYmIChyZWcgJiAweDBjKSAhPSAweDA4KQkvKiBSRDIgKi8KKwkJcmV0dXJuIDA7CisJaWYgKGluZGV4ID49IDE4ICYmIGluZGV4IDwgMjcgJiYgKHJlZyAmIDB4MzApICE9IDB4MTApCS8qIFJEMyAqLworCQlyZXR1cm4gMDsKKwlpZiAoaW5kZXggPj0gMjcgJiYgaW5kZXggPCAzNSkJCQkJLyogbG9jYWwgKi8KKwkJcmV0dXJuIGF0dHItPm1vZGU7CisKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19QRUNJX0VOQUJMRSwgJnJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAwOworCisJaWYgKGluZGV4ID49IDM1ICYmIGluZGV4IDwgNDMgJiYgIShyZWcgJiAweDAxKSkJCS8qIFBFQ0kgMCAqLworCQlyZXR1cm4gMDsKKworCWlmIChpbmRleCA+PSAweDQzICYmICghKHJlZyAmIDB4MDIpKSkJCQkvKiBQRUNJIDEgKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXR0ci0+bW9kZTsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmN0NzgwMl90ZW1wX2dyb3VwID0geworCS5hdHRycyA9IG5jdDc4MDJfdGVtcF9hdHRycywKKwkuaXNfdmlzaWJsZSA9IG5jdDc4MDJfdGVtcF9pc192aXNpYmxlLAorfTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4wX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaW4sIHN0b3JlX2luLAorCQkJICAgIDAsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLCBzdG9yZV9pbiwKKwkJCSAgICAwLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjBfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWUsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLCBzdG9yZV9iZWVwLAorCQkJICAgIDB4NWEsIDMpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAxLCAwKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4yX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaW4sIHN0b3JlX2luLAorCQkJICAgIDIsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLCBzdG9yZV9pbiwKKwkJCSAgICAyLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLCBzdG9yZV9iZWVwLAorCQkJICAgIDB4NWEsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAzLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19pbiwgc3RvcmVfaW4sCisJCQkgICAgMywgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaW4sIHN0b3JlX2luLAorCQkJICAgIDMsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMHgxZSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JlZXAsIHN0b3JlX2JlZXAsCisJCQkgICAgMHg1YSwgMSk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDQsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNF9taW4sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLCBzdG9yZV9pbiwKKwkJCSAgICA0LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19pbiwgc3RvcmVfaW4sCisJCQkgICAgNCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW40X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAweDFlLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDVhLCAyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5jdDc4MDJfaW5fYXR0cnNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwJLyogNSAqLworCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwJLyogNiAqLworCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfaW5wdXQuZGV2X2F0dHIuYXR0ciwJLyogMTEgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX2luM19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2JlZXAuZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCS8qIDE3ICovCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9iZWVwLmRldl9hdHRyLmF0dHIsCisKKwlOVUxMLAorfTsKKworc3RhdGljIHVtb2RlX3QgbmN0NzgwMl9pbl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHJlZzsKKwlpbnQgZXJyOworCisJaWYgKGluZGV4IDwgNikJCQkJCQkvKiBWQ0MsIFZDT1JFICovCisJCXJldHVybiBhdHRyLT5tb2RlOworCisJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCBSRUdfTU9ERSwgJnJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAwOworCisJaWYgKGluZGV4ID49IDYgJiYgaW5kZXggPCAxMSAmJiAocmVnICYgMHgwMykgIT0gMHgwMykJLyogVlNFTjEgKi8KKwkJcmV0dXJuIDA7CisJaWYgKGluZGV4ID49IDExICYmIGluZGV4IDwgMTcgJiYgKHJlZyAmIDB4MGMpICE9IDB4MGMpCS8qIFZTRU4yICovCisJCXJldHVybiAwOworCWlmIChpbmRleCA+PSAxNyAmJiAocmVnICYgMHgzMCkgIT0gMHgzMCkJCS8qIFZTRU4zICovCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0dHItPm1vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG5jdDc4MDJfaW5fZ3JvdXAgPSB7CisJLmF0dHJzID0gbmN0NzgwMl9pbl9hdHRycywKKwkuaXNfdmlzaWJsZSA9IG5jdDc4MDJfaW5faXNfdmlzaWJsZSwKK307CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDB4MTApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19mYW5fbWluLAorCQkJICAgIHN0b3JlX2Zhbl9taW4sIDB4NDksIDB4NGMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWEsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDViLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDB4MTEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjJfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19mYW5fbWluLAorCQkJICAgIHN0b3JlX2Zhbl9taW4sIDB4NGEsIDB4NGQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWEsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjJfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDViLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDB4MTIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19mYW5fbWluLAorCQkJICAgIHN0b3JlX2Zhbl9taW4sIDB4NGIsIDB4NGUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWEsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjNfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDViLCAyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5jdDc4MDJfZmFuX2F0dHJzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19iZWVwLmRldl9hdHRyLmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgdW1vZGVfdCBuY3Q3ODAyX2Zhbl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBmYW4gPSBpbmRleCAvIDQ7CS8qIDQgYXR0cmlidXRlcyBwZXIgZmFuICovCisJdW5zaWduZWQgaW50IHJlZzsKKwlpbnQgZXJyOworCisJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCBSRUdfRkFOX0VOQUJMRSwgJnJlZyk7CisJaWYgKGVyciA8IDAgfHwgIShyZWcgJiAoMSA8PCBmYW4pKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXR0ci0+bW9kZTsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmN0NzgwMl9mYW5fZ3JvdXAgPSB7CisJLmF0dHJzID0gbmN0NzgwMl9mYW5fYXR0cnMsCisJLmlzX3Zpc2libGUgPSBuY3Q3ODAyX2Zhbl9pc192aXNpYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm5jdDc4MDJfZ3JvdXBzW10gPSB7CisJJm5jdDc4MDJfdGVtcF9ncm91cCwKKwkmbmN0NzgwMl9pbl9ncm91cCwKKwkmbmN0NzgwMl9mYW5fZ3JvdXAsCisJTlVMTAorfTsKKworc3RhdGljIGludCBuY3Q3ODAyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJaW50IHJlZzsKKworCS8qCisJICogQ2hpcCBpZGVudGlmaWNhdGlvbiByZWdpc3RlcnMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIGJhbmsgMCwKKwkgKiBzbyBvbmx5IGF0dGVtcHQgY2hpcCBkZXRlY3Rpb24gaWYgYmFuayAwIGlzIHNlbGVjdGVkCisJICovCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0JBTkspOworCWlmIChyZWcgIT0gMHgwMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBSRUdfVkVORE9SX0lEKTsKKwlpZiAocmVnICE9IDB4NTApCisJCXJldHVybiAtRU5PREVWOworCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0NISVBfSUQpOworCWlmIChyZWcgIT0gMHhjMykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBSRUdfVkVSU0lPTl9JRCk7CisJaWYgKHJlZyA8IDAgfHwgKHJlZyAmIDB4ZjApICE9IDB4MjApCisJCXJldHVybiAtRU5PREVWOworCisJLyogQWxzbyB2YWxpZGF0ZSBsb3dlciBiaXRzIG9mIHZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlIHJlZ2lzdGVycyAqLworCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFJFR19URU1QX0xTQik7CisJaWYgKHJlZyA8IDAgfHwgKHJlZyAmIDB4MWYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFJFR19URU1QX1BFQ0lfTFNCKTsKKwlpZiAocmVnIDwgMCB8fCAocmVnICYgMHgzZikpCisJCXJldHVybiAtRU5PREVWOworCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1ZPTFRBR0VfTE9XKTsKKwlpZiAocmVnIDwgMCB8fCAocmVnICYgMHgzZikpCisJCXJldHVybiAtRU5PREVWOworCisJc3RybGNweShpbmZvLT50eXBlLCAibmN0NzgwMiIsIEkyQ19OQU1FX1NJWkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBuY3Q3ODAyX3JlZ21hcF9pc192b2xhdGlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlZyAhPSBSRUdfQkFOSyAmJiByZWcgPD0gMHgyMDsKK30KKworc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIG5jdDc4MDJfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRSRUUsCisJLnZvbGF0aWxlX3JlZyA9IG5jdDc4MDJfcmVnbWFwX2lzX3ZvbGF0aWxlLAorfTsKKworc3RhdGljIGludCBuY3Q3ODAyX2luaXRfY2hpcChzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhKQoreworCWludCBlcnI7CisKKwkvKiBFbmFibGUgQURDICovCisJZXJyID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRhdGEtPnJlZ21hcCwgUkVHX1NUQVJULCAweDAxLCAweDAxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRW5hYmxlIGxvY2FsIHRlbXBlcmF0dXJlIHNlbnNvciAqLworCWVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhkYXRhLT5yZWdtYXAsIFJFR19NT0RFLCAweDQwLCAweDQwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRW5hYmxlIFZjb3JlIGFuZCBWQ0Mgdm9sdGFnZSBtb25pdG9yaW5nICovCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhkYXRhLT5yZWdtYXAsIFJFR19WTU9OX0VOQUJMRSwgMHgwMywgMHgwMyk7Cit9CisKK3N0YXRpYyBpbnQgbmN0NzgwMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJaW50IHJldDsKKworCWRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJm5jdDc4MDJfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihkYXRhLT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhLT5yZWdtYXApOworCisJbXV0ZXhfaW5pdCgmZGF0YS0+YWNjZXNzX2xvY2spOworCisJcmV0ID0gbmN0NzgwMl9pbml0X2NoaXAoZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsIGNsaWVudC0+bmFtZSwKKwkJCQkJCQkgICBkYXRhLAorCQkJCQkJCSAgIG5jdDc4MDJfZ3JvdXBzKTsKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGh3bW9uX2Rldik7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBuY3Q3ODAyX2FkZHJlc3NfbGlzdFtdID0geworCTB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5ECit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbmN0NzgwMl9pZHRhYmxlW10gPSB7CisJeyAibmN0NzgwMiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbmN0NzgwMl9pZHRhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG5jdDc4MDJfZHJpdmVyID0geworCS5jbGFzcyA9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSVk5BTUUsCisJfSwKKwkuZGV0ZWN0ID0gbmN0NzgwMl9kZXRlY3QsCisJLnByb2JlID0gbmN0NzgwMl9wcm9iZSwKKwkuaWRfdGFibGUgPSBuY3Q3ODAyX2lkdGFibGUsCisJLmFkZHJlc3NfbGlzdCA9IG5jdDc4MDJfYWRkcmVzc19saXN0LAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIobmN0NzgwMl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5DVDc4MDJZIEhhcmR3YXJlIE1vbml0b3JpbmcgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL0tjb25maWcKaW5kZXggNmUxZTQ5My4uYTY3NGNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wbWJ1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvS2NvbmZpZwpAQCAtNDcsMTUgKzQ3LDIyIEBACiAJICBiZSBjYWxsZWQgbG0yNTA2Ni4KIAogY29uZmlnIFNFTlNPUlNfTFRDMjk3OAotCXRyaXN0YXRlICJMaW5lYXIgVGVjaG5vbG9naWVzIExUQzI5NzQsIExUQzI5NzgsIExUQzM4ODAsIGFuZCBMVEMzODgzIgorCXRyaXN0YXRlICJMaW5lYXIgVGVjaG5vbG9naWVzIExUQzI5NzggYW5kIGNvbXBhdGlibGVzIgogCWRlZmF1bHQgbgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIExpbmVhcgotCSAgVGVjaG5vbG9neSBMVEMyOTc0LCBMVEMyOTc4LCBMVEMzODgwLCBhbmQgTFRDMzg4My4KKwkgIFRlY2hub2xvZ3kgTFRDMjk3NCwgTFRDMjk3NywgTFRDMjk3OCwgTFRDMzg4MCwgTFRDMzg4MywgYW5kIExUTTQ2NzYuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgbHRjMjk3OC4KIAorY29uZmlnIFNFTlNPUlNfTFRDMjk3OF9SRUdVTEFUT1IKKwlib29sZWFuICJSZWd1bGF0b3Igc3VwcG9ydCBmb3IgTFRDMjk3OCBhbmQgY29tcGF0aWJsZXMiCisJZGVwZW5kcyBvbiBTRU5TT1JTX0xUQzI5NzggJiYgUkVHVUxBVE9SCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHJlZ3VsYXRvciBzdXBwb3J0IGZvciBMaW5lYXIKKwkgIFRlY2hub2xvZ3kgTFRDMjk3NCwgTFRDMjk3NywgTFRDMjk3OCwgTFRDMzg4MCwgTFRDMzg4MywgYW5kIExUTTQ2NzYuCisKIGNvbmZpZyBTRU5TT1JTX01BWDE2MDY0CiAJdHJpc3RhdGUgIk1heGltIE1BWDE2MDY0IgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wbWJ1cy9sdGMyOTc4LmMgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL2x0YzI5NzguYwppbmRleCBlMjRlZDUyLi4wODM1MDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BtYnVzL2x0YzI5NzguYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL2x0YzI5NzguYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CiAjaW5jbHVkZSAicG1idXMuaCIKIAogZW51bSBjaGlwcyB7IGx0YzI5NzQsIGx0YzI5NzcsIGx0YzI5NzgsIGx0YzM4ODAsIGx0YzM4ODMsIGx0bTQ2NzYgfTsKQEAgLTM3NCw2ICszNzUsMTkgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbHRjMjk3OF9pZCk7CiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TRU5TT1JTX0xUQzI5NzhfUkVHVUxBVE9SKQorc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBsdGMyOTc4X3JlZ19kZXNjW10gPSB7CisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMCksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMSksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMiksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMyksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNCksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNSksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNiksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNyksCit9OworI2VuZGlmIC8qIENPTkZJR19TRU5TT1JTX0xUQzI5NzhfUkVHVUxBVE9SICovCisKIHN0YXRpYyBpbnQgbHRjMjk3OF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTQ4NywxMyArNTAxLDM2IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU0VOU09SU19MVEMyOTc4X1JFR1VMQVRPUikKKwlpbmZvLT5udW1fcmVndWxhdG9ycyA9IGluZm8tPnBhZ2VzOworCWluZm8tPnJlZ19kZXNjID0gbHRjMjk3OF9yZWdfZGVzYzsKKwlpZiAoaW5mby0+bnVtX3JlZ3VsYXRvcnMgPiBBUlJBWV9TSVpFKGx0YzI5NzhfcmVnX2Rlc2MpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibnVtX3JlZ3VsYXRvcnMgdG9vIGxhcmdlISIpOworCQlpbmZvLT5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUobHRjMjk3OF9yZWdfZGVzYyk7CisJfQorI2VuZGlmCisKIAlyZXR1cm4gcG1idXNfZG9fcHJvYmUoY2xpZW50LCBpZCwgaW5mbyk7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGx0YzI5Nzhfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMjk3NCIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMjk3NyIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMjk3OCIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMzg4MCIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMzg4MyIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRtNDY3NiIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBsdGMyOTc4X29mX21hdGNoKTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjMjk3OF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJICAgLm5hbWUgPSAibHRjMjk3OCIsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihsdGMyOTc4X29mX21hdGNoKSwKIAkJICAgfSwKIAkucHJvYmUgPSBsdGMyOTc4X3Byb2JlLAogCS5yZW1vdmUgPSBwbWJ1c19kb19yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzLmggYi9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzLmgKaW5kZXggZmE5YmViMy4uODlhMjNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wbWJ1cy9wbWJ1cy5oCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXMuaApAQCAtMTksNiArMTksOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKwogI2lmbmRlZiBQTUJVU19ICiAjZGVmaW5lIFBNQlVTX0gKIApAQCAtMTg2LDYgKzE4OCwxMSBAQAogI2RlZmluZSBQTUJVU19WSVJUX1NUQVRVU19WTU9OCQkoUE1CVVNfVklSVF9CQVNFICsgMzUpCiAKIC8qCisgKiBPUEVSQVRJT04KKyAqLworI2RlZmluZSBQQl9PUEVSQVRJT05fQ09OVFJPTF9PTgkJKDE8PDcpCisKKy8qCiAgKiBDQVBBQklMSVRZCiAgKi8KICNkZWZpbmUgUEJfQ0FQQUJJTElUWV9TTUJBTEVSVAkJKDE8PDQpCkBAIC0zNjUsOCArMzcyLDI3IEBACiAJICovCiAJaW50ICgqaWRlbnRpZnkpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQlzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm8pOworCisJLyogUmVndWxhdG9yIGZ1bmN0aW9uYWxpdHksIGlmIHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgZHJpdmVyLiAqLworCWludCBudW1fcmVndWxhdG9yczsKKwljb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKnJlZ19kZXNjOwogfTsKIAorLyogUmVndWxhdG9yIG9wcyAqLworCitleHRlcm4gc3RydWN0IHJlZ3VsYXRvcl9vcHMgcG1idXNfcmVndWxhdG9yX29wczsKKworLyogTWFjcm8gZm9yIGZpbGxpbmcgaW4gYXJyYXkgb2Ygc3RydWN0IHJlZ3VsYXRvcl9kZXNjICovCisjZGVmaW5lIFBNQlVTX1JFR1VMQVRPUihfbmFtZSwgX2lkKQkJCQlcCisJW19pZF0gPSB7CQkJCQkJXAorCQkubmFtZSA9IChfbmFtZSAjIF9pZCksCQkJCVwKKwkJLmlkID0gKF9pZCksCQkJCQlcCisJCS5vZl9tYXRjaCA9IG9mX21hdGNoX3B0cihfbmFtZSAjIF9pZCksCQlcCisJCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJXAorCQkub3BzID0gJnBtYnVzX3JlZ3VsYXRvcl9vcHMsCQkJXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwJCQkJXAorCX0KKwogLyogRnVuY3Rpb24gZGVjbGFyYXRpb25zICovCiAKIHZvaWQgcG1idXNfY2xlYXJfY2FjaGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CkBAIC0zNzUsNiArNDAxLDEwIEBACiBpbnQgcG1idXNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHBhZ2UsIHU4IHJlZywgdTE2IHdvcmQpOwogaW50IHBtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCB1OCByZWcpOwogaW50IHBtYnVzX3dyaXRlX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHZhbHVlKTsKK2ludCBwbWJ1c193cml0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHJlZywKKwkJCSAgdTggdmFsdWUpOworaW50IHBtYnVzX3VwZGF0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHJlZywKKwkJCSAgIHU4IG1hc2ssIHU4IHZhbHVlKTsKIHZvaWQgcG1idXNfY2xlYXJfZmF1bHRzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogYm9vbCBwbWJ1c19jaGVja19ieXRlX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKTsKIGJvb2wgcG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzX2NvcmUuYyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCmluZGV4IDI5MWQxMWYuLmYyZTQ3YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BtYnVzLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSAicG1idXMuaCIKIAogLyoKQEAgLTI1Myw2ICsyNTUsMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX3JlYWRfYnl0ZV9kYXRhKTsKIAoraW50IHBtYnVzX3dyaXRlX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlpbnQgcnY7CisKKwlydiA9IHBtYnVzX3NldF9wYWdlKGNsaWVudCwgcGFnZSk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX3dyaXRlX2J5dGVfZGF0YSk7CisKK2ludCBwbWJ1c191cGRhdGVfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCB1OCByZWcsCisJCQkgICB1OCBtYXNrLCB1OCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCWludCBydjsKKworCXJ2ID0gcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCByZWcpOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKKworCXRtcCA9IChydiAmIH5tYXNrKSB8ICh2YWx1ZSAmIG1hc2spOworCisJaWYgKHRtcCAhPSBydikKKwkJcnYgPSBwbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCByZWcsIHRtcCk7CisKKwlyZXR1cm4gcnY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbWJ1c191cGRhdGVfYnl0ZV9kYXRhKTsKKwogLyoKICAqIF9wbWJ1c19yZWFkX2J5dGVfZGF0YSgpIGlzIHNpbWlsYXIgdG8gcG1idXNfcmVhZF9ieXRlX2RhdGEoKSwgYnV0IGNoZWNrcyBpZgogICogYSBkZXZpY2Ugc3BlY2lmaWMgbWFwcGluZyBmdW5jdGlvbiBleGlzdHMgYW5kIGNhbGxzIGl0IGlmIG5lY2Vzc2FyeS4KQEAgLTE3MjcsNiArMTc2MCw4NCBAQAogCXJldHVybiAwOwogfQogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfUkVHVUxBVE9SKQorc3RhdGljIGludCBwbWJ1c19yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByZGV2X2dldF9kZXYocmRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2LT5wYXJlbnQpOworCXU4IHBhZ2UgPSByZGV2X2dldF9pZChyZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCBQTUJVU19PUEVSQVRJT04pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuICEhKHJldCAmIFBCX09QRVJBVElPTl9DT05UUk9MX09OKTsKK30KKworc3RhdGljIGludCBfcG1idXNfcmVndWxhdG9yX29uX29mZihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcmRldl9nZXRfZGV2KHJkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldi0+cGFyZW50KTsKKwl1OCBwYWdlID0gcmRldl9nZXRfaWQocmRldik7CisKKwlyZXR1cm4gcG1idXNfdXBkYXRlX2J5dGVfZGF0YShjbGllbnQsIHBhZ2UsIFBNQlVTX09QRVJBVElPTiwKKwkJCQkgICAgICBQQl9PUEVSQVRJT05fQ09OVFJPTF9PTiwKKwkJCQkgICAgICBlbmFibGUgPyBQQl9PUEVSQVRJT05fQ09OVFJPTF9PTiA6IDApOworfQorCitzdGF0aWMgaW50IHBtYnVzX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJcmV0dXJuIF9wbWJ1c19yZWd1bGF0b3Jfb25fb2ZmKHJkZXYsIDEpOworfQorCitzdGF0aWMgaW50IHBtYnVzX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXJldHVybiBfcG1idXNfcmVndWxhdG9yX29uX29mZihyZGV2LCAwKTsKK30KKworc3RydWN0IHJlZ3VsYXRvcl9vcHMgcG1idXNfcmVndWxhdG9yX29wcyA9IHsKKwkuZW5hYmxlID0gcG1idXNfcmVndWxhdG9yX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHBtYnVzX3JlZ3VsYXRvcl9kaXNhYmxlLAorCS5pc19lbmFibGVkID0gcG1idXNfcmVndWxhdG9yX2lzX2VuYWJsZWQsCit9OworRVhQT1JUX1NZTUJPTF9HUEwocG1idXNfcmVndWxhdG9yX29wcyk7CisKK3N0YXRpYyBpbnQgcG1idXNfcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCBwbWJ1c19kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGEtPmRldjsKKwljb25zdCBzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm8gPSBkYXRhLT5pbmZvOworCWNvbnN0IHN0cnVjdCBwbWJ1c19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fcmVndWxhdG9yczsgaSsrKSB7CisJCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKKworCQljb25maWcuZGV2ID0gZGV2OworCQljb25maWcuZHJpdmVyX2RhdGEgPSBkYXRhOworCisJCWlmIChwZGF0YSAmJiBwZGF0YS0+cmVnX2luaXRfZGF0YSkKKwkJCWNvbmZpZy5pbml0X2RhdGEgPSAmcGRhdGEtPnJlZ19pbml0X2RhdGFbaV07CisKKwkJcmRldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKGRldiwgJmluZm8tPnJlZ19kZXNjW2ldLAorCQkJCQkgICAgICAgJmNvbmZpZyk7CisJCWlmIChJU19FUlIocmRldikpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIHJlZ3VsYXRvclxuIiwKKwkJCQlpbmZvLT5yZWdfZGVzY1tpXS5uYW1lKTsKKwkJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGludCBwbWJ1c19yZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogaW50IHBtYnVzX2RvX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCwKIAkJICAgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvKQogewpAQCAtMTc4MSw4ICsxODkyLDE1IEBACiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZVxuIik7CiAJCWdvdG8gb3V0X2tmcmVlOwogCX0KKworCXJldCA9IHBtYnVzX3JlZ3VsYXRvcl9yZWdpc3RlcihkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlZ2lzdGVyOworCiAJcmV0dXJuIDA7CiAKK291dF91bnJlZ2lzdGVyOgorCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiBvdXRfa2ZyZWU6CiAJa2ZyZWUoZGF0YS0+Z3JvdXAuYXR0cnMpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3B3bS1mYW4uYyBiL2RyaXZlcnMvaHdtb24vcHdtLWZhbi5jCmluZGV4IDgyM2M4NzcuLjE5OTFkOTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3B3bS1mYW4uYworKysgYi9kcml2ZXJzL2h3bW9uL3B3bS1mYW4uYwpAQCAtMTYxLDEwICsxNjEsMTcgQEAKIHN0YXRpYyBpbnQgcHdtX2Zhbl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwd21fZmFuX2N0eCAqY3R4ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBkdXR5OworCWludCByZXQ7CiAKLQlpZiAoY3R4LT5wd21fdmFsdWUpCi0JCXJldHVybiBwd21fZW5hYmxlKGN0eC0+cHdtKTsKLQlyZXR1cm4gMDsKKwlpZiAoY3R4LT5wd21fdmFsdWUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkdXR5ID0gRElWX1JPVU5EX1VQKGN0eC0+cHdtX3ZhbHVlICogKGN0eC0+cHdtLT5wZXJpb2QgLSAxKSwgTUFYX1BXTSk7CisJcmV0ID0gcHdtX2NvbmZpZyhjdHgtPnB3bSwgZHV0eSwgY3R4LT5wd20tPnBlcmlvZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gcHdtX2VuYWJsZShjdHgtPnB3bSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi90bXA0MDEuYyBiL2RyaXZlcnMvaHdtb24vdG1wNDAxLmMKaW5kZXggN2ZhNmU3ZC4uOTk2NjRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi90bXA0MDEuYworKysgYi9kcml2ZXJzL2h3bW9uL3RtcDQwMS5jCkBAIC00NCw5ICs0NCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDRjLCAweDRkLCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgzNywgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YywgMHg0ZCwKKwkweDRlLCAweDRmLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1lbnVtIGNoaXBzIHsgdG1wNDAxLCB0bXA0MTEsIHRtcDQzMSwgdG1wNDMyIH07CitlbnVtIGNoaXBzIHsgdG1wNDAxLCB0bXA0MTEsIHRtcDQzMSwgdG1wNDMyLCB0bXA0MzUgfTsKIAogLyoKICAqIFRoZSBUTVA0MDEgcmVnaXN0ZXJzLCBub3RlIHNvbWUgcmVnaXN0ZXJzIGhhdmUgZGlmZmVyZW50IGFkZHJlc3NlcyBmb3IKQEAgLTEzNiw2ICsxMzcsNyBAQAogI2RlZmluZSBUTVA0MTFDX0RFVklDRV9JRAkJCTB4MTAKICNkZWZpbmUgVE1QNDMxX0RFVklDRV9JRAkJCTB4MzEKICNkZWZpbmUgVE1QNDMyX0RFVklDRV9JRAkJCTB4MzIKKyNkZWZpbmUgVE1QNDM1X0RFVklDRV9JRAkJCTB4MzUKIAogLyoKICAqIERyaXZlciBkYXRhIChjb21tb24gdG8gYWxsIGNsaWVudHMpCkBAIC0xNDYsNiArMTQ4LDcgQEAKIAl7ICJ0bXA0MTEiLCB0bXA0MTEgfSwKIAl7ICJ0bXA0MzEiLCB0bXA0MzEgfSwKIAl7ICJ0bXA0MzIiLCB0bXA0MzIgfSwKKwl7ICJ0bXA0MzUiLCB0bXA0MzUgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdG1wNDAxX2lkKTsKQEAgLTYxMywxMCArNjE2LDEwIEBACiAgKiBCZWdpbiBub24gc3lzZnMgY2FsbGJhY2sgY29kZSAoYWthIFJlYWwgY29kZSkKICAqLwogCi1zdGF0aWMgdm9pZCB0bXA0MDFfaW5pdF9jbGllbnQoc3RydWN0IHRtcDQwMV9kYXRhICpkYXRhLAotCQkJICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHRtcDQwMV9pbml0X2NsaWVudChzdHJ1Y3QgdG1wNDAxX2RhdGEgKmRhdGEsCisJCQkgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWludCBjb25maWcsIGNvbmZpZ19vcmlnOworCWludCBjb25maWcsIGNvbmZpZ19vcmlnLCBzdGF0dXMgPSAwOwogCiAJLyogU2V0IHRoZSBjb252ZXJzaW9uIHJhdGUgdG8gMiBIeiAqLwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBUTVA0MDFfQ09OVkVSU0lPTl9SQVRFX1dSSVRFLCA1KTsKQEAgLTYyNCwxNiArNjI3LDE4IEBACiAKIAkvKiBTdGFydCBjb252ZXJzaW9ucyAoZGlzYWJsZSBzaHV0ZG93biBpZiBuZWNlc3NhcnkpICovCiAJY29uZmlnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVE1QNDAxX0NPTkZJR19SRUFEKTsKLQlpZiAoY29uZmlnIDwgMCkgewotCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJJbml0aWFsaXphdGlvbiBmYWlsZWQhXG4iKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoY29uZmlnIDwgMCkKKwkJcmV0dXJuIGNvbmZpZzsKIAogCWNvbmZpZ19vcmlnID0gY29uZmlnOwogCWNvbmZpZyAmPSB+VE1QNDAxX0NPTkZJR19TSFVURE9XTjsKIAogCWlmIChjb25maWcgIT0gY29uZmlnX29yaWcpCi0JCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBUTVA0MDFfQ09ORklHX1dSSVRFLCBjb25maWcpOworCQlzdGF0dXMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSAgIFRNUDQwMV9DT05GSUdfV1JJVEUsCisJCQkJCQkgICBjb25maWcpOworCisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCB0bXA0MDFfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCkBAIC02NzUsMTUgKzY4MCwxOCBAQAogCQlraW5kID0gdG1wNDExOwogCQlicmVhazsKIAljYXNlIFRNUDQzMV9ERVZJQ0VfSUQ6Ci0JCWlmIChjbGllbnQtPmFkZHIgPT0gMHg0ZSkKKwkJaWYgKGNsaWVudC0+YWRkciAhPSAweDRjICYmIGNsaWVudC0+YWRkciAhPSAweDRkKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWtpbmQgPSB0bXA0MzE7CiAJCWJyZWFrOwogCWNhc2UgVE1QNDMyX0RFVklDRV9JRDoKLQkJaWYgKGNsaWVudC0+YWRkciA9PSAweDRlKQorCQlpZiAoY2xpZW50LT5hZGRyICE9IDB4NGMgJiYgY2xpZW50LT5hZGRyICE9IDB4NGQpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJa2luZCA9IHRtcDQzMjsKIAkJYnJlYWs7CisJY2FzZSBUTVA0MzVfREVWSUNFX0lEOgorCQlraW5kID0gdG1wNDM1OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC03MDUsMTEgKzcxMywxMyBAQAogc3RhdGljIGludCB0bXA0MDFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQljb25zdCBjaGFyICpuYW1lc1tdID0geyAiVE1QNDAxIiwgIlRNUDQxMSIsICJUTVA0MzEiLCAiVE1QNDMyIiB9OworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsKKwkJIlRNUDQwMSIsICJUTVA0MTEiLCAiVE1QNDMxIiwgIlRNUDQzMiIsICJUTVA0MzUiCisJfTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CiAJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OwogCXN0cnVjdCB0bXA0MDFfZGF0YSAqZGF0YTsKLQlpbnQgZ3JvdXBzID0gMDsKKwlpbnQgZ3JvdXBzID0gMCwgc3RhdHVzOwogCiAJZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgdG1wNDAxX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpCkBAIC03MjAsNyArNzMwLDkgQEAKIAlkYXRhLT5raW5kID0gaWQtPmRyaXZlcl9kYXRhOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgVE1QNDAxIGNoaXAgKi8KLQl0bXA0MDFfaW5pdF9jbGllbnQoZGF0YSwgY2xpZW50KTsKKwlzdGF0dXMgPSB0bXA0MDFfaW5pdF9jbGllbnQoZGF0YSwgY2xpZW50KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCiAJZGF0YS0+Z3JvdXBzW2dyb3VwcysrXSA9ICZ0bXA0MDFfZ3JvdXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jCmluZGV4IDY1ZWY5NjYuLjg5OWJlZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jCkBAIC0xMiwxMSArMTIsNiBAQAogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICAgIE1BIDAyMTEwLTEzMDEgVVNBLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIEt5w7ZzdGkgTcOkbGtraQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwppbmRleCA4YjEwZjg4Li41ODBkYmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwpAQCAtMTIsMTEgKzEyLDYgQEAKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICogIE1BIDAyMTEwLTEzMDEgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKaW5kZXggMzQzNzAwOS4uMjcwZDg0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKKysrIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKQEAgLTE0LDExICsxNCw2IEBACiAgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqICBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCiAgKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZAogICogRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwgYW5kIGFsc28gZnJvbSBNYXJ0aW4gQmFpbGV5CiAgKiA8bWJhaWxleUBsaXR0bGVmZWV0LWluYy5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2YuaCBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5oCmluZGV4IDFlYzcwM2UuLjI2MmVlODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5oCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5oCkBAIC0xMiwxMiArMTIsNyBAQAogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICAgIE1BIDAyMTEwLTEzMDEgVVNBLgkJCQkJCQkqLworICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCQkJKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCiAKIC8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwppbmRleCA5MTdjMzU4Li5iNGQxMzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpAQCAtODgxLDYgKzg4MSwxNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLWRpb2xhbi11MmMuCiAKK2NvbmZpZyBJMkNfRExOMgorICAgICAgIHRyaXN0YXRlICJEaW9sYW4gRExOLTIgVVNCIEkyQyBhZGFwdGVyIgorICAgICAgIGRlcGVuZHMgb24gTUZEX0RMTjIKKyAgICAgICBoZWxwCisJIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIERpb2xhbgorCSBETE4yLCBhIFVTQiB0byBJMkMgaW50ZXJmYWNlLgorCisJIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgd2lsbCBiZSBjYWxsZWQgaTJjLWRsbjIuCisKIGNvbmZpZyBJMkNfUEFSUE9SVAogCXRyaXN0YXRlICJQYXJhbGxlbCBwb3J0IGFkYXB0ZXIiCiAJZGVwZW5kcyBvbiBQQVJQT1JUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKaW5kZXggNzhkNTZjNS4uY2RhYzdmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQpAQCAtODcsNiArODcsNyBAQAogCiAjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKIG9iai0kKENPTkZJR19JMkNfRElPTEFOX1UyQykJKz0gaTJjLWRpb2xhbi11MmMubworb2JqLSQoQ09ORklHX0kyQ19ETE4yKQkJKz0gaTJjLWRsbjIubwogb2JqLSQoQ09ORklHX0kyQ19QQVJQT1JUKQkrPSBpMmMtcGFycG9ydC5vCiBvYmotJChDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQpCSs9IGkyYy1wYXJwb3J0LWxpZ2h0Lm8KIG9iai0kKENPTkZJR19JMkNfUk9CT1RGVVpaX09TSUYpCSs9IGkyYy1yb2JvdGZ1enotb3NpZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCmluZGV4IDQ1MWUzMDUuLjRmMmQ3ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCkBAIC0xNCwxMCArMTQsNiBAQAogICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCmluZGV4IDJmYTIxY2UuLjQ1YzVjNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCkBAIC0xMiwxMCArMTIsNiBAQAogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYtczQ4ODIuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LXM0ODgyLmMKaW5kZXggNDFmYzY4My4uNjVlMzI0MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LXM0ODgyLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYtczQ4ODIuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KICAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwppbmRleCBhMTZmNzI4Li42YzcxMTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKQEAgLTE1LDEwICsxNSw2IEBACiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWF0OTEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYXQ5MS5jCmluZGV4IDkxN2Q1NDUuLmUwNWE2NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYXQ5MS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYXQ5MS5jCkBAIC00MzQsNyArNDM0LDcgQEAKIAkJfQogCX0KIAotCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW9fdGltZW91dCgmZGV2LT5jbWRfY29tcGxldGUsCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkZXYtPmNtZF9jb21wbGV0ZSwKIAkJCQkJICAgICBkZXYtPmFkYXB0ZXIudGltZW91dCk7CiAJaWYgKHJldCA9PSAwKSB7CiAJCWRldl9lcnIoZGV2LT5kZXYsICJjb250cm9sbGVyIHRpbWVkIG91dFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWF1MTU1MC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hdTE1NTAuYwppbmRleCA4NzYyNDU4Li42ZjhjMDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWF1MTU1MC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYXUxNTUwLmMKQEAgLTIxLDEwICsyMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1jYWRlbmNlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNhZGVuY2UuYwppbmRleCA2M2YzZjAzLi5jNjA0ZjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNhZGVuY2UuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNhZGVuY2UuYwpAQCAtMTExLDYgKzExMSw4IEBACiAjZGVmaW5lIENETlNfSTJDX0RJVkFfTUFYCTQKICNkZWZpbmUgQ0ROU19JMkNfRElWQl9NQVgJNjQKIAorI2RlZmluZSBDRE5TX0kyQ19USU1FT1VUX01BWAkweEZGCisKICNkZWZpbmUgY2Ruc19pMmNfcmVhZHJlZyhvZmZzZXQpICAgICAgIHJlYWRsX3JlbGF4ZWQoaWQtPm1lbWJhc2UgKyBvZmZzZXQpCiAjZGVmaW5lIGNkbnNfaTJjX3dyaXRlcmVnKHZhbCwgb2Zmc2V0KSB3cml0ZWxfcmVsYXhlZCh2YWwsIGlkLT5tZW1iYXNlICsgb2Zmc2V0KQogCkBAIC04NTIsNiArODU0LDE1IEBACiAJCWdvdG8gZXJyX2Nsa19kaXM7CiAJfQogCisJLyoKKwkgKiBDYWRlbmNlIEkyQyBjb250cm9sbGVyIGhhcyBhIGJ1ZyB3aGVyZWluIGl0IGdlbmVyYXRlcworCSAqIGludmFsaWQgcmVhZCB0cmFuc2FjdGlvbiBhZnRlciBIVyB0aW1lb3V0IGluIG1hc3RlciByZWNlaXZlciBtb2RlLgorCSAqIEhXIHRpbWVvdXQgaXMgbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgYW5kIHRoZSBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisJICogQnV0IHRoZSBmZWF0dXJlIGl0c2VsZiBjYW5ub3QgYmUgZGlzYWJsZWQuIEhlbmNlIG1heGltdW0gdmFsdWUKKwkgKiBpcyB3cml0dGVuIHRvIHRoaXMgcmVnaXN0ZXIgdG8gcmVkdWNlIHRoZSBjaGFuY2VzIG9mIGVycm9yLgorCSAqLworCWNkbnNfaTJjX3dyaXRlcmVnKENETlNfSTJDX1RJTUVPVVRfTUFYLCBDRE5TX0kyQ19USU1FX09VVF9PRkZTRVQpOworCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIiV1IGtIeiBtbWlvICUwOGx4IGlycSAlZFxuIiwKIAkJIGlkLT5pMmNfY2xrIC8gMTAwMCwgKHVuc2lnbmVkIGxvbmcpcl9tZW0tPnN0YXJ0LCBpZC0+aXJxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1jcG0uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtY3BtLmMKaW5kZXggZjNiODlhNC4uNWJkYmM3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1jcG0uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNwbS5jCkBAIC0yMywxMCArMjMsNiBAQAogICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCmluZGV4IDRkOTYxNDcuLjAxZjBjZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCkBAIC0xNywxMCArMTcsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKi8KQEAgLTQxMSwxMSArNDA3LDkgQEAKIAlpZiAoZGV2LT5jbWRfZXJyICYgREFWSU5DSV9JMkNfU1RSX05BQ0spIHsKIAkJaWYgKG1zZy0+ZmxhZ3MgJiBJMkNfTV9JR05PUkVfTkFLKQogCQkJcmV0dXJuIG1zZy0+bGVuOwotCQlpZiAoc3RvcCkgewotCQkJdyA9IGRhdmluY2lfaTJjX3JlYWRfcmVnKGRldiwgREFWSU5DSV9JMkNfTURSX1JFRyk7Ci0JCQl3IHw9IERBVklOQ0lfSTJDX01EUl9TVFA7Ci0JCQlkYXZpbmNpX2kyY193cml0ZV9yZWcoZGV2LCBEQVZJTkNJX0kyQ19NRFJfUkVHLCB3KTsKLQkJfQorCQl3ID0gZGF2aW5jaV9pMmNfcmVhZF9yZWcoZGV2LCBEQVZJTkNJX0kyQ19NRFJfUkVHKTsKKwkJdyB8PSBEQVZJTkNJX0kyQ19NRFJfU1RQOworCQlkYXZpbmNpX2kyY193cml0ZV9yZWcoZGV2LCBEQVZJTkNJX0kyQ19NRFJfUkVHLCB3KTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87CiAJfQogCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1jb3JlLmMKaW5kZXggM2MyMGU0Yi4uMjM2MjhiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtY29yZS5jCkBAIC0xOCwxMCArMTgsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKi8KQEAgLTM2Myw3ICszNTksNyBAQAogCX0KIAogCS8qIENvbmZpZ3VyZSBUeC9SeCBGSUZPIHRocmVzaG9sZCBsZXZlbHMgKi8KLQlkd193cml0ZWwoZGV2LCBkZXYtPnR4X2ZpZm9fZGVwdGggLSAxLCBEV19JQ19UWF9UTCk7CisJZHdfd3JpdGVsKGRldiwgZGV2LT50eF9maWZvX2RlcHRoIC8gMiwgRFdfSUNfVFhfVEwpOwogCWR3X3dyaXRlbChkZXYsIDAsIERXX0lDX1JYX1RMKTsKIAogCS8qIGNvbmZpZ3VyZSB0aGUgaTJjIG1hc3RlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLWNvcmUuaCBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1jb3JlLmgKaW5kZXggZDY2YjZjYi4uNWE0MTBlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLWNvcmUuaAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtY29yZS5oCkBAIC0xOCwxMCArMTgsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1wY2lkcnYuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1wY2lkcnYuYwppbmRleCBkMzFkMzEzLi5hY2I0MGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtcGNpZHJ2LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLXBjaWRydi5jCkBAIC0xOSwxMCArMTksNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1wbGF0ZHJ2LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtcGxhdGRydi5jCmluZGV4IGE3NDMxMTUuLjM3M2RkNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1wbGF0ZHJ2LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLXBsYXRkcnYuYwpAQCAtMTgsMTAgKzE4LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRsbjIuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGxuMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZmI4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRsbjIuYwpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIERpb2xhbiBETE4tMiBVU0ItSTJDIGFkYXB0ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBEZXJpdmVkIGZyb206CisgKiAgaTJjLWRpb2xhbi11MmMuYworICogIENvcHlyaWdodCAoYykgMjAxMC0yMDExIEVyaWNzc29uIEFCCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9kbG4yLmg+CisKKyNkZWZpbmUgRExOMl9JMkNfTU9EVUxFX0lECQkweDAzCisjZGVmaW5lIERMTjJfSTJDX0NNRChjbWQpCQlETE4yX0NNRChjbWQsIERMTjJfSTJDX01PRFVMRV9JRCkKKworLyogSTJDIGNvbW1hbmRzICovCisjZGVmaW5lIERMTjJfSTJDX0dFVF9QT1JUX0NPVU5UCQlETE4yX0kyQ19DTUQoMHgwMCkKKyNkZWZpbmUgRExOMl9JMkNfRU5BQkxFCQkJRExOMl9JMkNfQ01EKDB4MDEpCisjZGVmaW5lIERMTjJfSTJDX0RJU0FCTEUJCURMTjJfSTJDX0NNRCgweDAyKQorI2RlZmluZSBETE4yX0kyQ19JU19FTkFCTEVECQlETE4yX0kyQ19DTUQoMHgwMykKKyNkZWZpbmUgRExOMl9JMkNfV1JJVEUJCQlETE4yX0kyQ19DTUQoMHgwNikKKyNkZWZpbmUgRExOMl9JMkNfUkVBRAkJCURMTjJfSTJDX0NNRCgweDA3KQorI2RlZmluZSBETE4yX0kyQ19TQ0FOX0RFVklDRVMJCURMTjJfSTJDX0NNRCgweDA4KQorI2RlZmluZSBETE4yX0kyQ19QVUxMVVBfRU5BQkxFCQlETE4yX0kyQ19DTUQoMHgwOSkKKyNkZWZpbmUgRExOMl9JMkNfUFVMTFVQX0RJU0FCTEUJCURMTjJfSTJDX0NNRCgweDBBKQorI2RlZmluZSBETE4yX0kyQ19QVUxMVVBfSVNfRU5BQkxFRAlETE4yX0kyQ19DTUQoMHgwQikKKyNkZWZpbmUgRExOMl9JMkNfVFJBTlNGRVIJCURMTjJfSTJDX0NNRCgweDBDKQorI2RlZmluZSBETE4yX0kyQ19TRVRfTUFYX1JFUExZX0NPVU5UCURMTjJfSTJDX0NNRCgweDBEKQorI2RlZmluZSBETE4yX0kyQ19HRVRfTUFYX1JFUExZX0NPVU5UCURMTjJfSTJDX0NNRCgweDBFKQorCisjZGVmaW5lIERMTjJfSTJDX01BWF9YRkVSX1NJWkUJCTI1NgorI2RlZmluZSBETE4yX0kyQ19CVUZfU0laRQkJKERMTjJfSTJDX01BWF9YRkVSX1NJWkUgKyAxNikKKworc3RydWN0IGRsbjJfaTJjIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOworCXU4IHBvcnQ7CisJLyoKKwkgKiBCdWZmZXIgdG8gaG9sZCB0aGUgcGFja2V0IGZvciByZWFkIG9yIHdyaXRlIHRyYW5zZmVycy4gT25lIGlzIGVub3VnaAorCSAqIHNpbmNlIHdlIGNhbid0IGhhdmUgbXVsdGlwbGUgdHJhbnNmZXJzIGluIHBhcmFsbGVsIG9uIHRoZSBpMmMgYnVzLgorCSAqLworCXZvaWQgKmJ1ZjsKK307CisKK3N0YXRpYyBpbnQgZGxuMl9pMmNfZW5hYmxlKHN0cnVjdCBkbG4yX2kyYyAqZGxuMiwgYm9vbCBlbmFibGUpCit7CisJdTE2IGNtZDsKKwlzdHJ1Y3QgeworCQl1OCBwb3J0OworCX0gdHg7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKworCWlmIChlbmFibGUpCisJCWNtZCA9IERMTjJfSTJDX0VOQUJMRTsKKwllbHNlCisJCWNtZCA9IERMTjJfSTJDX0RJU0FCTEU7CisKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBjbWQsICZ0eCwgc2l6ZW9mKHR4KSk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9pMmNfd3JpdGUoc3RydWN0IGRsbjJfaTJjICpkbG4yLCB1OCBhZGRyLAorCQkJICB1OCAqZGF0YSwgdTE2IGRhdGFfbGVuKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJdTggYWRkcjsKKwkJdTggbWVtX2FkZHJfbGVuOworCQlfX2xlMzIgbWVtX2FkZHI7CisJCV9fbGUxNiBidWZfbGVuOworCQl1OCBidWZbRExOMl9JMkNfTUFYX1hGRVJfU0laRV07CisJfSBfX3BhY2tlZCAqdHggPSBkbG4yLT5idWY7CisJdW5zaWduZWQgbGVuOworCisJQlVJTERfQlVHX09OKHNpemVvZigqdHgpID4gRExOMl9JMkNfQlVGX1NJWkUpOworCisJdHgtPnBvcnQgPSBkbG4yLT5wb3J0OworCXR4LT5hZGRyID0gYWRkcjsKKwl0eC0+bWVtX2FkZHJfbGVuID0gMDsKKwl0eC0+bWVtX2FkZHIgPSAwOworCXR4LT5idWZfbGVuID0gY3B1X3RvX2xlMTYoZGF0YV9sZW4pOworCW1lbWNweSh0eC0+YnVmLCBkYXRhLCBkYXRhX2xlbik7CisKKwlsZW4gPSBzaXplb2YoKnR4KSArIGRhdGFfbGVuIC0gRExOMl9JMkNfTUFYX1hGRVJfU0laRTsKKwlyZXQgPSBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfSTJDX1dSSVRFLCB0eCwgbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBkYXRhX2xlbjsKK30KKworc3RhdGljIGludCBkbG4yX2kyY19yZWFkKHN0cnVjdCBkbG4yX2kyYyAqZGxuMiwgdTE2IGFkZHIsIHU4ICpkYXRhLAorCQkJIHUxNiBkYXRhX2xlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB7CisJCXU4IHBvcnQ7CisJCXU4IGFkZHI7CisJCXU4IG1lbV9hZGRyX2xlbjsKKwkJX19sZTMyIG1lbV9hZGRyOworCQlfX2xlMTYgYnVmX2xlbjsKKwl9IF9fcGFja2VkIHR4OworCXN0cnVjdCB7CisJCV9fbGUxNiBidWZfbGVuOworCQl1OCBidWZbRExOMl9JMkNfTUFYX1hGRVJfU0laRV07CisJfSBfX3BhY2tlZCAqcnggPSBkbG4yLT5idWY7CisJdW5zaWduZWQgcnhfbGVuID0gc2l6ZW9mKCpyeCk7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpyeCkgPiBETE4yX0kyQ19CVUZfU0laRSk7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC5hZGRyID0gYWRkcjsKKwl0eC5tZW1fYWRkcl9sZW4gPSAwOworCXR4Lm1lbV9hZGRyID0gMDsKKwl0eC5idWZfbGVuID0gY3B1X3RvX2xlMTYoZGF0YV9sZW4pOworCisJcmV0ID0gZGxuMl90cmFuc2ZlcihkbG4yLT5wZGV2LCBETE4yX0kyQ19SRUFELCAmdHgsIHNpemVvZih0eCksCisJCQkgICAgcngsICZyeF9sZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChyeF9sZW4gPCBzaXplb2YocngtPmJ1Zl9sZW4pICsgZGF0YV9sZW4pCisJCXJldHVybiAtRVBST1RPOworCWlmIChsZTE2X3RvX2NwdShyeC0+YnVmX2xlbikgIT0gZGF0YV9sZW4pCisJCXJldHVybiAtRVBST1RPOworCisJbWVtY3B5KGRhdGEsIHJ4LT5idWYsIGRhdGFfbGVuKTsKKworCXJldHVybiBkYXRhX2xlbjsKK30KKworc3RhdGljIGludCBkbG4yX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCSBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZGxuMl9pMmMgKmRsbjIgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCBpMmNfbXNnICpwbXNnOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkbG4yLT5hZGFwdGVyLmRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlpbnQgcmV0OworCisJCXBtc2cgPSAmbXNnc1tpXTsKKworCQlpZiAocG1zZy0+bGVuID4gRExOMl9JMkNfTUFYX1hGRVJfU0laRSkgeworCQkJZGV2X3dhcm4oZGV2LCAibWF4aW11bSB0cmFuc2ZlciBzaXplIGV4Y2VlZGVkXG4iKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCisJCWlmIChwbXNnLT5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQlyZXQgPSBkbG4yX2kyY19yZWFkKGRsbjIsIHBtc2ctPmFkZHIsIHBtc2ctPmJ1ZiwKKwkJCQkJICAgIHBtc2ctPmxlbik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlwbXNnLT5sZW4gPSByZXQ7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBkbG4yX2kyY193cml0ZShkbG4yLCBwbXNnLT5hZGRyLCBwbXNnLT5idWYsCisJCQkJCSAgICAgcG1zZy0+bGVuKTsKKwkJCWlmIChyZXQgIT0gcG1zZy0+bGVuKQorCQkJCXJldHVybiAtRVBST1RPOworCQl9CisJfQorCisJcmV0dXJuIG51bTsKK30KKworc3RhdGljIHUzMiBkbG4yX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYSkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfQllURSB8IEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8CisJCUkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSB8IEkyQ19GVU5DX1NNQlVTX0JMT0NLX1BST0NfQ0FMTCB8CisJCUkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGRsbjJfaTJjX3VzYl9hbGdvcml0aG0gPSB7CisJLm1hc3Rlcl94ZmVyID0gZGxuMl9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGRsbjJfaTJjX2Z1bmMsCit9OworCitzdGF0aWMgaW50IGRsbjJfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZGxuMl9pMmMgKmRsbjI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGxuMl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CisKKwlkbG4yID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkbG4yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbG4yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRsbjItPmJ1ZiA9IGRldm1fa21hbGxvYyhkZXYsIERMTjJfSTJDX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRsbjItPmJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkbG4yLT5wZGV2ID0gcGRldjsKKwlkbG4yLT5wb3J0ID0gcGRhdGEtPnBvcnQ7CisKKwkvKiBzZXR1cCBpMmMgYWRhcHRlciBkZXNjcmlwdGlvbiAqLworCWRsbjItPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKKwlkbG4yLT5hZGFwdGVyLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OOworCWRsbjItPmFkYXB0ZXIuYWxnbyA9ICZkbG4yX2kyY191c2JfYWxnb3JpdGhtOworCWRsbjItPmFkYXB0ZXIuZGV2LnBhcmVudCA9IGRldjsKKwlpMmNfc2V0X2FkYXBkYXRhKCZkbG4yLT5hZGFwdGVyLCBkbG4yKTsKKwlzbnByaW50ZihkbG4yLT5hZGFwdGVyLm5hbWUsIHNpemVvZihkbG4yLT5hZGFwdGVyLm5hbWUpLCAiJXMtJXMtJWQiLAorCQkgImRsbjItaTJjIiwgZGV2X25hbWUocGRldi0+ZGV2LnBhcmVudCksIGRsbjItPnBvcnQpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGxuMik7CisKKwkvKiBpbml0aWFsaXplIHRoZSBpMmMgaW50ZXJmYWNlICovCisJcmV0ID0gZGxuMl9pMmNfZW5hYmxlKGRsbjIsIHRydWUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgYWRhcHRlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogYW5kIGZpbmFsbHkgYXR0YWNoIHRvIGkyYyBsYXllciAqLworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmZGxuMi0+YWRhcHRlcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIEkyQyBhZGFwdGVyOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2Rpc2FibGU6CisJZGxuMl9pMmNfZW5hYmxlKGRsbjIsIGZhbHNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRsbjJfaTJjICpkbG4yID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpMmNfZGVsX2FkYXB0ZXIoJmRsbjItPmFkYXB0ZXIpOworCWRsbjJfaTJjX2VuYWJsZShkbG4yLCBmYWxzZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGxuMl9pMmNfZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9ICJkbG4yLWkyYyIsCisJLnByb2JlCQk9IGRsbjJfaTJjX3Byb2JlLAorCS5yZW1vdmUJCT0gZGxuMl9pMmNfcmVtb3ZlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihkbG4yX2kyY19kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIERpb2xhbiBETE4yIEkyQyBtYXN0ZXIgaW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRsbjItaTJjIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWVnMjB0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWVnMjB0LmMKaW5kZXggYTQ0ZWExMy4uNzZlNjk5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lZzIwdC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWcyMHQuYwpAQCAtOSwxMCArOSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWVsZWt0b3IuYwppbmRleCA0ODU0OTcwLi45MmU4YzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWVsZWt0b3IuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWVsZWt0b3IuYwpAQCAtMTIsMTEgKzEyLDcgQEAKICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgkJICAgICAqLworICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCQkJICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZCBldmVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKaW5kZXggMTRkMmI3Ni4uYjc4NjRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwpAQCAtMTUsMTAgKzE1LDYgQEAKICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwppbmRleCA3Y2ZjMTgzLi42YWI0ZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwpAQCAtMTUsMTAgKzE1LDYgQEAKICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCmluZGV4IGM0OGU0NmEuLmU5ZmI3Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwpAQCAtMTEsMTEgKzExLDYgQEAKICAqCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKglGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsCi0gKglVU0EuCi0gKgogICogQXV0aG9yOgogICoJRGFyaXVzIEF1Z3VsaXMsIFRlbHRvbmlrYSBJbmMuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguaCBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmgKaW5kZXggMDk3ZTI3MC4uMmQ2OTI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguaAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5oCkBAIC0xMSwxMSArMTEsNyBAQAogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgICovCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4JCQkgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwppbmRleCBjZjk5ZGJmLi4xMTMyOTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwpAQCAtMTQsMTAgKzE0LDYgQEAKICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNtdC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc210LmMKaW5kZXggM2Y2ZWNiZi4uZjJiMGZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc210LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc210LmMKQEAgLTE0LDEwICsxNCw2IEBACiAgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCiAgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLXM0OTg1LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTItczQ5ODUuYwppbmRleCBiMTcwYmRmLi44OGVkYTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTItczQ5ODUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTItczQ5ODUuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKaW5kZXggZWUzYTc2Yy4uNzBiM2M5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKQEAgLTE3LDEwICsxNyw2IEBACiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCmluZGV4IDBkZmZiMGUuLjI3N2EyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCkBAIC0yMiwxMCArMjIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTkyNiwxNCArOTIyLDEyIEBACiAJCWlmIChzdGF0ICYgT01BUF9JMkNfU1RBVF9OQUNLKSB7CiAJCQllcnIgfD0gT01BUF9JMkNfU1RBVF9OQUNLOwogCQkJb21hcF9pMmNfYWNrX3N0YXQoZGV2LCBPTUFQX0kyQ19TVEFUX05BQ0spOwotCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoc3RhdCAmIE9NQVBfSTJDX1NUQVRfQUwpIHsKIAkJCWRldl9lcnIoZGV2LT5kZXYsICJBcmJpdHJhdGlvbiBsb3N0XG4iKTsKIAkJCWVyciB8PSBPTUFQX0kyQ19TVEFUX0FMOwogCQkJb21hcF9pMmNfYWNrX3N0YXQoZGV2LCBPTUFQX0kyQ19TVEFUX0FMKTsKLQkJCWJyZWFrOwogCQl9CiAKIAkJLyoKQEAgLTk1OCwxMSArOTUyLDEzIEBACiAJCQlpZiAoZGV2LT5maWZvX3NpemUpCiAJCQkJbnVtX2J5dGVzID0gZGV2LT5idWZfbGVuOwogCi0JCQlvbWFwX2kyY19yZWNlaXZlX2RhdGEoZGV2LCBudW1fYnl0ZXMsIHRydWUpOwotCi0JCQlpZiAoZGV2LT5lcnJhdGEgJiBJMkNfT01BUF9FUlJBVEFfSTIwNykKKwkJCWlmIChkZXYtPmVycmF0YSAmIEkyQ19PTUFQX0VSUkFUQV9JMjA3KSB7CiAJCQkJaTJjX29tYXBfZXJyYXRhX2kyMDcoZGV2LCBzdGF0KTsKKwkJCQludW1fYnl0ZXMgPSAob21hcF9pMmNfcmVhZF9yZWcoZGV2LAorCQkJCQlPTUFQX0kyQ19CVUZTVEFUX1JFRykgPj4gOCkgJiAweDNGOworCQkJfQogCisJCQlvbWFwX2kyY19yZWNlaXZlX2RhdGEoZGV2LCBudW1fYnl0ZXMsIHRydWUpOwogCQkJb21hcF9pMmNfYWNrX3N0YXQoZGV2LCBPTUFQX0kyQ19TVEFUX1JEUik7CiAJCQljb250aW51ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYwppbmRleCA2MmY1NWZlLi5kMWY2MjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYwpAQCAtMTgsMTAgKzE4LDYgQEAKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKaW5kZXggYTI3YWFlMi4uYTFmYWM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKQEAgLTE4LDEwICsxOCw2IEBACiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuaCBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCmluZGV4IGU1NzJmM2EuLjRlMTI5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCkBAIC0xMiwxMCArMTIsNiBAQAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBQT1JUX0RBVEEJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXNlbWkuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFzZW1pLmMKaW5kZXggN2E5ZGNlNC4uZGYxZGJjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXNlbWkuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhc2VtaS5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCmluZGV4IDMyM2YwNjEuLmUwZWI0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKaW5kZXggYTZmNTRiYS4uNjdjYmVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwpAQCAtMTEsMTAgKzExLDYgQEAKICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG1jbXNwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBtY21zcC5jCmluZGV4IDg1NjQ3NjguLjE3NzgzNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG1jbXNwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbWNtc3AuYwpAQCAtMTgsMTAgKzE4LDYgQEAKICAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKaW5kZXggMDFlOTY3Ny4uNjBhNTNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYwpAQCAtMTQsMTAgKzE0LDYgQEAKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwppbmRleCBlM2IwMzM3Li42NTI0NDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwpAQCAtMTQsMTAgKzE0LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2hfbW9iaWxlLmMKaW5kZXggOGI1ZTc5Yy4uNDg1NTE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNoX21vYmlsZS5jCkBAIC0xNCwxMCArMTQsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaWJ5dGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lieXRlLmMKaW5kZXggMGZlNTA1ZC4uMmI2MjE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaWJ5dGUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpYnl0ZS5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpbXRlYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaW10ZWMuYwppbmRleCA5NjRlNWM2Li4xNWFjODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpbXRlYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2ltdGVjLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKaW5kZXggYWM5YmMzMy4uN2Q1OGE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKQEAgLTExLDEwICsxMSw2IEBACiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKIC8qIE5vdGU6IHdlIGFzc3VtZSB0aGVyZSBjYW4gb25seSBiZSBvbmUgU0lTNTU5NSB3aXRoIG9uZSBTTUJ1cyBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jCmluZGV4IGM2MzY2NzMuLjFlNjgwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYwpAQCAtMTAsMTAgKzEwLDYgQEAKICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCmluZGV4IDhkYzJmYzUuLjQ0YjkwNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwpAQCAtMTAsMTAgKzEwLDYgQEAKICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGFvcy1ldm0uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGFvcy1ldm0uYwppbmRleCAxMDg1NWEwLi40YzdmYzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRhb3MtZXZtLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10YW9zLWV2bS5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKaW5kZXggZjRhMWVkNy4uNTliMWQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCkBAIC0xMiwxMCArMTIsNiBAQAogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwppbmRleCA2ODQxMjAwLi4wZWUyNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKQEAgLTEzLDEwICsxMyw2IEBACiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhpaWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jCmluZGV4IGFkZTkyMjMuLmNjNjVlYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKICAqCiAgKiBUaGlzIGNvZGUgd2FzIGltcGxlbWVudGVkIGJ5IE1vY2VhbiBMYWJvcmF0b3JpZXMgQUIgd2hlbiBwb3J0aW5nIGxpbnV4CiAgKiB0byB0aGUgYXV0b21vdGl2ZSBkZXZlbG9wbWVudCBib2FyZCBSdXNzZWxsdmlsbGUuIFRoZSBjb3B5cmlnaHQgaG9sZGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYwppbmRleCBmZjNmNTc0Li41MTUzMzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKQEAgLTE3LDEwICsxNyw2IEBACiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1ib2FyZGluZm8uYyBiL2RyaXZlcnMvaTJjL2kyYy1ib2FyZGluZm8uYwppbmRleCBmMjRjYzY0Li45MGUzMjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtYm9hcmRpbmZvLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWJvYXJkaW5mby5jCkBAIC0xMCwxMSArMTAsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCAyZjkwYWM2Li5mNDNiNGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTEwLDEyICsxMCw3IEBACiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gICAgTUEgMDIxMTAtMTMwMSBVU0EuCQkJCQkJCSAgICAgKi8KKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgkJCSAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPi4KQEAgLTY3MCw2ICs2NjUsOSBAQAogCQlzdGF0dXMgPSBkcml2ZXItPnJlbW92ZShjbGllbnQpOwogCX0KIAorCWlmIChkZXYtPm9mX25vZGUpCisJCWlycV9kaXNwb3NlX21hcHBpbmcoY2xpZW50LT5pcnEpOworCiAJZGV2X3BtX2RvbWFpbl9kZXRhY2goJmNsaWVudC0+ZGV2LCB0cnVlKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuaCBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmgKaW5kZXggMThhOGZkMi4uMTc3MDBiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuaAorKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5oCkBAIC0xMCwxMSArMTAsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1kZXYuYyBiL2RyaXZlcnMvaTJjL2kyYy1kZXYuYwppbmRleCA4MGI0N2U4Li43MWM3YTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWRldi5jCkBAIC0xNCwxMSArMTQsNiBAQAogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICAgIE1BIDAyMTEwLTEzMDEgVVNBLgogKi8KIAogLyogTm90ZSB0aGF0IHRoaXMgaXMgYSBjb21wbGV0ZSByZXdyaXRlIG9mIFNpbW9uIFZvZ2wncyBpMmMtZGV2IG1vZHVsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1zbWJ1cy5jIGIvZHJpdmVycy9pMmMvaTJjLXNtYnVzLmMKaW5kZXggZmM5OWYwZC4uOWViZjljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLXNtYnVzLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLXNtYnVzLmMKQEAgLTEzLDExICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1zdHViLmMgYi9kcml2ZXJzL2kyYy9pMmMtc3R1Yi5jCmluZGV4IGQyNDFhYTIuLmFmMmE5NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1zdHViLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLXN0dWIuYwpAQCAtMTMsMTAgKzEzLDYgQEAKICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAogI2RlZmluZSBERUJVRyAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hY2NlbC9ibWMxNTAtYWNjZWwuYyBiL2RyaXZlcnMvaWlvL2FjY2VsL2JtYzE1MC1hY2NlbC5jCmluZGV4IDIyYzA5NmMuLjUxM2JkNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2FjY2VsL2JtYzE1MC1hY2NlbC5jCisrKyBiL2RyaXZlcnMvaWlvL2FjY2VsL2JtYzE1MC1hY2NlbC5jCkBAIC00NCw2ICs0NCw5IEBACiAKICNkZWZpbmUgQk1DMTUwX0FDQ0VMX1JFR19JTlRfU1RBVFVTXzIJCTB4MEIKICNkZWZpbmUgQk1DMTUwX0FDQ0VMX0FOWV9NT1RJT05fTUFTSwkJMHgwNworI2RlZmluZSBCTUMxNTBfQUNDRUxfQU5ZX01PVElPTl9CSVRfWAkJQklUKDApCisjZGVmaW5lIEJNQzE1MF9BQ0NFTF9BTllfTU9USU9OX0JJVF9ZCQlCSVQoMSkKKyNkZWZpbmUgQk1DMTUwX0FDQ0VMX0FOWV9NT1RJT05fQklUX1oJCUJJVCgyKQogI2RlZmluZSBCTUMxNTBfQUNDRUxfQU5ZX01PVElPTl9CSVRfU0lHTglCSVQoMykKIAogI2RlZmluZSBCTUMxNTBfQUNDRUxfUkVHX1BNVV9MUFcJCTB4MTEKQEAgLTkyLDkgKzk1LDkgQEAKICNkZWZpbmUgQk1DMTUwX0FDQ0VMX1NMT1BFX1RIUkVTX01BU0sJCTB4RkYKIAogLyogU2xvcGUgZHVyYXRpb24gaW4gdGVybXMgb2YgbnVtYmVyIG9mIHNhbXBsZXMgKi8KLSNkZWZpbmUgQk1DMTUwX0FDQ0VMX0RFRl9TTE9QRV9EVVJBVElPTgkyCisjZGVmaW5lIEJNQzE1MF9BQ0NFTF9ERUZfU0xPUEVfRFVSQVRJT04JCTEKIC8qIGluIHRlcm1zIG9mIG11bHRpcGxlcyBvZiBnJ3MvTFNCLCBiYXNlZCBvbiByYW5nZSAqLwotI2RlZmluZSBCTUMxNTBfQUNDRUxfREVGX1NMT1BFX1RIUkVTSE9MRAk1CisjZGVmaW5lIEJNQzE1MF9BQ0NFTF9ERUZfU0xPUEVfVEhSRVNIT0xECTEKIAogI2RlZmluZSBCTUMxNTBfQUNDRUxfUkVHX1hPVVRfTAkJMHgwMgogCkBAIC01MzYsNiArNTM5LDkgQEAKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZkYXRhLT5jbGllbnQtPmRldiwKIAkJCSJGYWlsZWQ6IGJtYzE1MF9hY2NlbF9zZXRfcG93ZXJfc3RhdGUgZm9yICVkXG4iLCBvbik7CisJCWlmIChvbikKKwkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmZGF0YS0+Y2xpZW50LT5kZXYpOworCiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC04MTEsNiArODE3LDcgQEAKIAogCXJldCA9ICBibWMxNTBfYWNjZWxfc2V0dXBfYW55X21vdGlvbl9pbnRlcnJ1cHQoZGF0YSwgc3RhdGUpOwogCWlmIChyZXQgPCAwKSB7CisJCWJtYzE1MF9hY2NlbF9zZXRfcG93ZXJfc3RhdGUoZGF0YSwgZmFsc2UpOwogCQltdXRleF91bmxvY2soJmRhdGEtPm11dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC04NDYsNyArODUzLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fZXZlbnRfc3BlYyBibWMxNTBfYWNjZWxfZXZlbnQgPSB7CiAJCS50eXBlID0gSUlPX0VWX1RZUEVfUk9DLAotCQkuZGlyID0gSUlPX0VWX0RJUl9SSVNJTkcgfCBJSU9fRVZfRElSX0ZBTExJTkcsCisJCS5kaXIgPSBJSU9fRVZfRElSX0VJVEhFUiwKIAkJLm1hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0VWX0lORk9fVkFMVUUpIHwKIAkJCQkgQklUKElJT19FVl9JTkZPX0VOQUJMRSkgfAogCQkJCSBCSVQoSUlPX0VWX0lORk9fUEVSSU9EKQpAQCAtMTA1NCw2ICsxMDYxLDcgQEAKIAllbHNlCiAJCXJldCA9IGJtYzE1MF9hY2NlbF9zZXR1cF9uZXdfZGF0YV9pbnRlcnJ1cHQoZGF0YSwgc3RhdGUpOwogCWlmIChyZXQgPCAwKSB7CisJCWJtYzE1MF9hY2NlbF9zZXRfcG93ZXJfc3RhdGUoZGF0YSwgZmFsc2UpOwogCQltdXRleF91bmxvY2soJmRhdGEtPm11dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xMDkyLDEyICsxMTAwLDI2IEBACiAJZWxzZQogCQlkaXIgPSBJSU9fRVZfRElSX1JJU0lORzsKIAotCWlmIChyZXQgJiBCTUMxNTBfQUNDRUxfQU5ZX01PVElPTl9NQVNLKQorCWlmIChyZXQgJiBCTUMxNTBfQUNDRUxfQU5ZX01PVElPTl9CSVRfWCkKIAkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCBJSU9fTU9EX0VWRU5UX0NPREUoSUlPX0FDQ0VMLAogCQkJCQkJCTAsCi0JCQkJCQkJSUlPX01PRF9YX09SX1lfT1JfWiwKKwkJCQkJCQlJSU9fTU9EX1gsCiAJCQkJCQkJSUlPX0VWX1RZUEVfUk9DLAotCQkJCQkJCUlJT19FVl9ESVJfRUlUSEVSKSwKKwkJCQkJCQlkaXIpLAorCQkJCQkJCWRhdGEtPnRpbWVzdGFtcCk7CisJaWYgKHJldCAmIEJNQzE1MF9BQ0NFTF9BTllfTU9USU9OX0JJVF9ZKQorCQlpaW9fcHVzaF9ldmVudChpbmRpb19kZXYsIElJT19NT0RfRVZFTlRfQ09ERShJSU9fQUNDRUwsCisJCQkJCQkJMCwKKwkJCQkJCQlJSU9fTU9EX1ksCisJCQkJCQkJSUlPX0VWX1RZUEVfUk9DLAorCQkJCQkJCWRpciksCisJCQkJCQkJZGF0YS0+dGltZXN0YW1wKTsKKwlpZiAocmV0ICYgQk1DMTUwX0FDQ0VMX0FOWV9NT1RJT05fQklUX1opCisJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwgSUlPX01PRF9FVkVOVF9DT0RFKElJT19BQ0NFTCwKKwkJCQkJCQkwLAorCQkJCQkJCUlJT19NT0RfWiwKKwkJCQkJCQlJSU9fRVZfVFlQRV9ST0MsCisJCQkJCQkJZGlyKSwKIAkJCQkJCQlkYXRhLT50aW1lc3RhbXApOwogYWNrX2ludHJfc3RhdHVzOgogCWlmICghZGF0YS0+ZHJlYWR5X3RyaWdnZXJfb24pCkBAIC0xMzU0LDEwICsxMzc2LDE0IEBACiB7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGkyY19nZXRfY2xpZW50ZGF0YSh0b19pMmNfY2xpZW50KGRldikpOwogCXN0cnVjdCBibWMxNTBfYWNjZWxfZGF0YSAqZGF0YSA9IGlpb19wcml2KGluZGlvX2Rldik7CisJaW50IHJldDsKIAogCWRldl9kYmcoJmRhdGEtPmNsaWVudC0+ZGV2LCAgX19mdW5jX18pOworCXJldCA9IGJtYzE1MF9hY2NlbF9zZXRfbW9kZShkYXRhLCBCTUMxNTBfQUNDRUxfU0xFRVBfTU9ERV9TVVNQRU5ELCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CiAKLQlyZXR1cm4gYm1jMTUwX2FjY2VsX3NldF9tb2RlKGRhdGEsIEJNQzE1MF9BQ0NFTF9TTEVFUF9NT0RFX1NVU1BFTkQsIDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJtYzE1MF9hY2NlbF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hY2NlbC9reGNqay0xMDEzLmMgYi9kcml2ZXJzL2lpby9hY2NlbC9reGNqay0xMDEzLmMKaW5kZXggOTg5MDlhOS4uMzIwYWE3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWNjZWwva3hjamstMTAxMy5jCisrKyBiL2RyaXZlcnMvaWlvL2FjY2VsL2t4Y2prLTEwMTMuYwpAQCAtMjY5LDYgKzI2OSw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJcmV0ICY9IH4oS1hDSksxMDEzX1JFR19DVFJMMV9CSVRfR1NFTDAgfAorCQkgS1hDSksxMDEzX1JFR19DVFJMMV9CSVRfR1NFTDEpOwogCXJldCB8PSAoS1hDSksxMDEzX3NjYWxlX3RhYmxlW3JhbmdlX2luZGV4XS5nc2VsXzAgPDwgMyk7CiAJcmV0IHw9IChLWENKSzEwMTNfc2NhbGVfdGFibGVbcmFuZ2VfaW5kZXhdLmdzZWxfMSA8PCA0KTsKIApAQCAtODk0LDcgKzg5Niw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2V2ZW50X3NwZWMga3hjamsxMDEzX2V2ZW50ID0gewogCQkudHlwZSA9IElJT19FVl9UWVBFX1RIUkVTSCwKLQkJLmRpciA9IElJT19FVl9ESVJfUklTSU5HIHwgSUlPX0VWX0RJUl9GQUxMSU5HLAorCQkuZGlyID0gSUlPX0VWX0RJUl9FSVRIRVIsCiAJCS5tYXNrX3NlcGFyYXRlID0gQklUKElJT19FVl9JTkZPX1ZBTFVFKSB8CiAJCQkJIEJJVChJSU9fRVZfSU5GT19FTkFCTEUpIHwKIAkJCQkgQklUKElJT19FVl9JTkZPX1BFUklPRCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9LY29uZmlnIGIvZHJpdmVycy9paW8vYWRjL0tjb25maWcKaW5kZXggODhiZGM4Zi4uYmM0ZTc4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL0tjb25maWcKKysrIGIvZHJpdmVycy9paW8vYWRjL0tjb25maWcKQEAgLTEyNyw2ICsxMjcsMTQgQEAKIAloZWxwCiAJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQXRtZWwgQVQ5MSBBREMuCiAKK2NvbmZpZyBBWFAyODhfQURDCisJdHJpc3RhdGUgIlgtUG93ZXJzIEFYUDI4OCBBREMgZHJpdmVyIgorCWRlcGVuZHMgb24gTUZEX0FYUDIwWAorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBoYXZlIHN1cHBvcnQgZm9yIFgtUG93ZXJzIHBvd2VyIG1hbmFnZW1lbnQgSUMgKFBNSUMpIEFEQworCSAgZGV2aWNlLiBEZXBlbmRpbmcgb24gcGxhdGZvcm0gY29uZmlndXJhdGlvbiwgdGhpcyBnZW5lcmFsIHB1cnBvc2UgQURDIGNhbgorCSAgYmUgdXNlZCBmb3Igc2FtcGxpbmcgc2Vuc29ycyBzdWNoIGFzIHRoZXJtYWwgcmVzaXN0b3JzLgorCiBjb25maWcgRVhZTk9TX0FEQwogCXRyaXN0YXRlICJFeHlub3MgQURDIGRyaXZlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9FWFlOT1MgfHwgQVJDSF9TM0MyNFhYIHx8IEFSQ0hfUzNDNjRYWCB8fCAoT0YgJiYgQ09NUElMRV9URVNUKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlIGIvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlCmluZGV4IGNiODhhNmEuLmYzMDA5M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2FkYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lpby9hZGMvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAKIG9iai0kKENPTkZJR19BRDc4ODcpICs9IGFkNzg4Ny5vCiBvYmotJChDT05GSUdfQUQ3OTlYKSArPSBhZDc5OXgubwogb2JqLSQoQ09ORklHX0FUOTFfQURDKSArPSBhdDkxX2FkYy5vCitvYmotJChDT05GSUdfQVhQMjg4X0FEQykgKz0gYXhwMjg4X2FkYy5vCiBvYmotJChDT05GSUdfRVhZTk9TX0FEQykgKz0gZXh5bm9zX2FkYy5vCiBvYmotJChDT05GSUdfTFA4Nzg4X0FEQykgKz0gbHA4Nzg4X2FkYy5vCiBvYmotJChDT05GSUdfTUFYMTAyNykgKz0gbWF4MTAyNy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvYXhwMjg4X2FkYy5jIGIvZHJpdmVycy9paW8vYWRjL2F4cDI4OF9hZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGJjZmIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9paW8vYWRjL2F4cDI4OF9hZGMuYwpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIGF4cDI4OF9hZGMuYyAtIFgtUG93ZXJzIEFYUDI4OCBQTUlDIEFEQyBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9heHAyMHguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4KKyNpbmNsdWRlIDxsaW51eC9paW8vbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lpby9kcml2ZXIuaD4KKworI2RlZmluZSBBWFAyODhfQURDX0VOX01BU0sJCTB4RjEKKyNkZWZpbmUgQVhQMjg4X0FEQ19UU19QSU5fR1BBREMJCTB4RjIKKyNkZWZpbmUgQVhQMjg4X0FEQ19UU19QSU5fT04JCTB4RjMKKworZW51bSBheHAyODhfYWRjX2lkIHsKKwlBWFAyODhfQURDX1RTLAorCUFYUDI4OF9BRENfUE1JQywKKwlBWFAyODhfQURDX0dQLAorCUFYUDI4OF9BRENfQkFUVF9DSFJHX0ksCisJQVhQMjg4X0FEQ19CQVRUX0RJU0NIUkdfSSwKKwlBWFAyODhfQURDX0JBVFRfViwKKwlBWFAyODhfQURDX05SX0NIQU4sCit9OworCitzdHJ1Y3QgYXhwMjg4X2FkY19pbmZvIHsKKwlpbnQgaXJxOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCBheHAyODhfYWRjX2NoYW5uZWxzW10gPSB7CisJeworCQkuaW5kZXhlZCA9IDEsCisJCS50eXBlID0gSUlPX1RFTVAsCisJCS5jaGFubmVsID0gMCwKKwkJLmFkZHJlc3MgPSBBWFAyODhfVFNfQURDX0gsCisJCS5kYXRhc2hlZXRfbmFtZSA9ICJUU19QSU4iLAorCX0sIHsKKwkJLmluZGV4ZWQgPSAxLAorCQkudHlwZSA9IElJT19URU1QLAorCQkuY2hhbm5lbCA9IDEsCisJCS5hZGRyZXNzID0gQVhQMjg4X1BNSUNfQURDX0gsCisJCS5kYXRhc2hlZXRfbmFtZSA9ICJQTUlDX1RFTVAiLAorCX0sIHsKKwkJLmluZGV4ZWQgPSAxLAorCQkudHlwZSA9IElJT19URU1QLAorCQkuY2hhbm5lbCA9IDIsCisJCS5hZGRyZXNzID0gQVhQMjg4X0dQX0FEQ19ILAorCQkuZGF0YXNoZWV0X25hbWUgPSAiR1BBREMiLAorCX0sIHsKKwkJLmluZGV4ZWQgPSAxLAorCQkudHlwZSA9IElJT19DVVJSRU5ULAorCQkuY2hhbm5lbCA9IDMsCisJCS5hZGRyZXNzID0gQVhQMjBYX0JBVFRfQ0hSR19JX0gsCisJCS5kYXRhc2hlZXRfbmFtZSA9ICJCQVRUX0NIR19JIiwKKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1BST0NFU1NFRCksCisJfSwgeworCQkuaW5kZXhlZCA9IDEsCisJCS50eXBlID0gSUlPX0NVUlJFTlQsCisJCS5jaGFubmVsID0gNCwKKwkJLmFkZHJlc3MgPSBBWFAyMFhfQkFUVF9ESVNDSFJHX0lfSCwKKwkJLmRhdGFzaGVldF9uYW1lID0gIkJBVFRfRElTQ0hSR19JIiwKKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1BST0NFU1NFRCksCisJfSwgeworCQkuaW5kZXhlZCA9IDEsCisJCS50eXBlID0gSUlPX1ZPTFRBR0UsCisJCS5jaGFubmVsID0gNSwKKwkJLmFkZHJlc3MgPSBBWFAyMFhfQkFUVF9WX0gsCisJCS5kYXRhc2hlZXRfbmFtZSA9ICJCQVRUX1YiLAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUFJPQ0VTU0VEKSwKKwl9LAorfTsKKworI2RlZmluZSBBWFAyODhfQURDX01BUChfYWRjX2NoYW5uZWxfbGFiZWwsIF9jb25zdW1lcl9kZXZfbmFtZSwJXAorCQlfY29uc3VtZXJfY2hhbm5lbCkJCQkJXAorCXsJCQkJCQkJXAorCQkuYWRjX2NoYW5uZWxfbGFiZWwgPSBfYWRjX2NoYW5uZWxfbGFiZWwsCVwKKwkJLmNvbnN1bWVyX2Rldl9uYW1lID0gX2NvbnN1bWVyX2Rldl9uYW1lLAlcCisJCS5jb25zdW1lcl9jaGFubmVsID0gX2NvbnN1bWVyX2NoYW5uZWwsCQlcCisJfQorCisvKiBmb3IgY29uc3VtZXIgZHJpdmVycyAqLworc3RhdGljIHN0cnVjdCBpaW9fbWFwIGF4cDI4OF9hZGNfZGVmYXVsdF9tYXBzW10gPSB7CisJQVhQMjg4X0FEQ19NQVAoIlRTX1BJTiIsICJheHAyODgtYmF0dCIsICJheHAyODgtYmF0dC10ZW1wIiksCisJQVhQMjg4X0FEQ19NQVAoIlBNSUNfVEVNUCIsICJheHAyODgtcG1pYyIsICJheHAyODgtcG1pYy10ZW1wIiksCisJQVhQMjg4X0FEQ19NQVAoIkdQQURDIiwgImF4cDI4OC1ncGFkYyIsICJheHAyODgtc3lzdGVtLXRlbXAiKSwKKwlBWFAyODhfQURDX01BUCgiQkFUVF9DSEdfSSIsICJheHAyODgtY2hyZyIsICJheHAyODgtY2hyZy1jdXJyIiksCisJQVhQMjg4X0FEQ19NQVAoIkJBVFRfRElTQ0hSR19JIiwgImF4cDI4OC1jaHJnIiwgImF4cDI4OC1jaHJnLWQtY3VyciIpLAorCUFYUDI4OF9BRENfTUFQKCJCQVRUX1YiLCAiYXhwMjg4LWJhdHQiLCAiYXhwMjg4LWJhdHQtdm9sdCIpLAorCXt9LAorfTsKKworc3RhdGljIGludCBheHAyODhfYWRjX3JlYWRfY2hhbm5lbChpbnQgKnZhbCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCXN0cnVjdCByZWdtYXAgKnJlZ21hcCkKK3sKKwl1OCBidWZbMl07CisKKwlpZiAocmVnbWFwX2J1bGtfcmVhZChyZWdtYXAsIGFkZHJlc3MsIGJ1ZiwgMikpCisJCXJldHVybiAtRUlPOworCSp2YWwgPSAoYnVmWzBdIDw8IDQpICsgKChidWZbMV0gPj4gNCkgJiAweDBGKTsKKworCXJldHVybiBJSU9fVkFMX0lOVDsKK30KKworc3RhdGljIGludCBheHAyODhfYWRjX3NldF90cyhzdHJ1Y3QgcmVnbWFwICpyZWdtYXAsIHVuc2lnbmVkIGludCBtb2RlLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwkvKiBjaGFubmVscyBvdGhlciB0aGFuIEdQQURDIGRvIG5vdCBuZWVkIHRvIHN3aXRjaCBUUyBwaW4gKi8KKwlpZiAoYWRkcmVzcyAhPSBBWFAyODhfR1BfQURDX0gpCisJCXJldHVybiAwOworCisJcmV0dXJuIHJlZ21hcF93cml0ZShyZWdtYXAsIEFYUDI4OF9BRENfVFNfUElOX0NUUkwsIG1vZGUpOworfQorCitzdGF0aWMgaW50IGF4cDI4OF9hZGNfcmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCXN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorCQkJaW50ICp2YWwsIGludCAqdmFsMiwgbG9uZyBtYXNrKQoreworCWludCByZXQ7CisJc3RydWN0IGF4cDI4OF9hZGNfaW5mbyAqaW5mbyA9IGlpb19wcml2KGluZGlvX2Rldik7CisKKwltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwlzd2l0Y2ggKG1hc2spIHsKKwljYXNlIElJT19DSEFOX0lORk9fUkFXOgorCQlpZiAoYXhwMjg4X2FkY19zZXRfdHMoaW5mby0+cmVnbWFwLCBBWFAyODhfQURDX1RTX1BJTl9HUEFEQywKKwkJCQkJY2hhbi0+YWRkcmVzcykpIHsKKwkJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiR1BBREMgbW9kZVxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gYXhwMjg4X2FkY19yZWFkX2NoYW5uZWwodmFsLCBjaGFuLT5hZGRyZXNzLCBpbmZvLT5yZWdtYXApOworCQlpZiAoYXhwMjg4X2FkY19zZXRfdHMoaW5mby0+cmVnbWFwLCBBWFAyODhfQURDX1RTX1BJTl9PTiwKKwkJCQkJCWNoYW4tPmFkZHJlc3MpKQorCQkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJUUyBwaW4gcmVzdG9yZVxuIik7CisJCWJyZWFrOworCWNhc2UgSUlPX0NIQU5fSU5GT19QUk9DRVNTRUQ6CisJCXJldCA9IGF4cDI4OF9hZGNfcmVhZF9jaGFubmVsKHZhbCwgY2hhbi0+YWRkcmVzcywgaW5mby0+cmVnbWFwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXhwMjg4X2FkY19zZXRfc3RhdGUoc3RydWN0IHJlZ21hcCAqcmVnbWFwKQoreworCS8qIEFEQyBzaG91bGQgYmUgYWx3YXlzIGVuYWJsZWQgZm9yIGludGVybmFsIEZHIHRvIGZ1bmN0aW9uICovCisJaWYgKHJlZ21hcF93cml0ZShyZWdtYXAsIEFYUDI4OF9BRENfVFNfUElOX0NUUkwsIEFYUDI4OF9BRENfVFNfUElOX09OKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQVhQMjBYX0FEQ19FTjEsIEFYUDI4OF9BRENfRU5fTUFTSyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYXhwMjg4X2FkY19paW9faW5mbyA9IHsKKwkucmVhZF9yYXcgPSAmYXhwMjg4X2FkY19yZWFkX3JhdywKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBheHAyODhfYWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXhwMjg4X2FkY19pbmZvICppbmZvOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7CisJc3RydWN0IGF4cDIweF9kZXYgKmF4cDIweCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKworCWluZGlvX2RldiA9IGRldm1faWlvX2RldmljZV9hbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmluZm8pKTsKKwlpZiAoIWluZGlvX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbmZvID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlpbmZvLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpbmZvLT5pcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSByZXNvdXJjZT9cbiIpOworCQlyZXR1cm4gaW5mby0+aXJxOworCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmRpb19kZXYpOworCWluZm8tPnJlZ21hcCA9IGF4cDIweC0+cmVnbWFwOworCS8qCisJICogU2V0IEFEQyB0byBlbmFibGVkIHN0YXRlIGF0IGFsbCB0aW1lLCBpbmNsdWRpbmcgc3lzdGVtIHN1c3BlbmQuCisJICogb3RoZXJ3aXNlIGludGVybmFsIGZ1ZWwgZ2F1Z2UgZnVuY3Rpb25hbGl0eSBtYXkgYmUgYWZmZWN0ZWQuCisJICovCisJcmV0ID0gYXhwMjg4X2FkY19zZXRfc3RhdGUoYXhwMjB4LT5yZWdtYXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBBREMgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWluZGlvX2Rldi0+bmFtZSA9IHBkZXYtPm5hbWU7CisJaW5kaW9fZGV2LT5jaGFubmVscyA9IGF4cDI4OF9hZGNfY2hhbm5lbHM7CisJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGF4cDI4OF9hZGNfY2hhbm5lbHMpOworCWluZGlvX2Rldi0+aW5mbyA9ICZheHAyODhfYWRjX2lpb19pbmZvOworCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKKwlyZXQgPSBpaW9fbWFwX2FycmF5X3JlZ2lzdGVyKGluZGlvX2RldiwgYXhwMjg4X2FkY19kZWZhdWx0X21hcHMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihpbmRpb19kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBpaW8gZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfYXJyYXlfdW5yZWdpc3RlcjsKKwl9CisJcmV0dXJuIDA7CisKK2Vycl9hcnJheV91bnJlZ2lzdGVyOgorCWlpb19tYXBfYXJyYXlfdW5yZWdpc3RlcihpbmRpb19kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBheHAyODhfYWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOworCWlpb19tYXBfYXJyYXlfdW5yZWdpc3RlcihpbmRpb19kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIGF4cDI4OF9hZGNfaWRfdGFibGVbXSA9IHsKKwl7IC5uYW1lID0gImF4cDI4OF9hZGMiIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBheHAyODhfYWRjX2RyaXZlciA9IHsKKwkucHJvYmUgPSBheHAyODhfYWRjX3Byb2JlLAorCS5yZW1vdmUgPSBheHAyODhfYWRjX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBheHAyODhfYWRjX2lkX3RhYmxlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImF4cDI4OF9hZGMiLAorCX0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBheHAyODhfYWRjX2lkX3RhYmxlKTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihheHAyODhfYWRjX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkphY29iIFBhbiA8amFjb2IuanVuLnBhbkBsaW51eC5pbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlgtUG93ZXJzIEFYUDI4OCBBREMgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvbWVuX3oxODhfYWRjLmMgYi9kcml2ZXJzL2lpby9hZGMvbWVuX3oxODhfYWRjLmMKaW5kZXggYjU4ZDYzMC4uZDA5NWVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL21lbl96MTg4X2FkYy5jCisrKyBiL2RyaXZlcnMvaWlvL2FkYy9tZW5fejE4OF9hZGMuYwpAQCAtMTUyLDYgKzE1Miw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWNiX2RldmljZV9pZCBtZW5fejE4OF9pZHNbXSA9IHsKIAl7IC5kZXZpY2UgPSAweGJjIH0sCisJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShtY2IsIG1lbl96MTg4X2lkcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2d5cm8vYm1nMTYwLmMgYi9kcml2ZXJzL2lpby9neXJvL2JtZzE2MC5jCmluZGV4IDFmOTY3ZTBkLi5kMmZhNTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9neXJvL2JtZzE2MC5jCisrKyBiL2RyaXZlcnMvaWlvL2d5cm8vYm1nMTYwLmMKQEAgLTY3LDYgKzY3LDkgQEAKICNkZWZpbmUgQk1HMTYwX1JFR19JTlRfRU5fMAkJMHgxNQogI2RlZmluZSBCTUcxNjBfREFUQV9FTkFCTEVfSU5UCQlCSVQoNykKIAorI2RlZmluZSBCTUcxNjBfUkVHX0lOVF9FTl8xCQkweDE2CisjZGVmaW5lIEJNRzE2MF9JTlQxX0JJVF9PRAkJQklUKDEpCisKICNkZWZpbmUgQk1HMTYwX1JFR19YT1VUX0wJCTB4MDIKICNkZWZpbmUgQk1HMTYwX0FYSVNfVE9fUkVHKGF4aXMpCShCTUcxNjBfUkVHX1hPVVRfTCArIChheGlzICogMikpCiAKQEAgLTgyLDYgKzg1LDkgQEAKIAogI2RlZmluZSBCTUcxNjBfUkVHX0lOVF9TVEFUVVNfMgkweDBCCiAjZGVmaW5lIEJNRzE2MF9BTllfTU9USU9OX01BU0sJCTB4MDcKKyNkZWZpbmUgQk1HMTYwX0FOWV9NT1RJT05fQklUX1gJCUJJVCgwKQorI2RlZmluZSBCTUcxNjBfQU5ZX01PVElPTl9CSVRfWQkJQklUKDEpCisjZGVmaW5lIEJNRzE2MF9BTllfTU9USU9OX0JJVF9aCQlCSVQoMikKIAogI2RlZmluZSBCTUcxNjBfUkVHX1RFTVAJCTB4MDgKICNkZWZpbmUgQk1HMTYwX1RFTVBfQ0VOVEVSX1ZBTAkJMjMKQEAgLTIyMiw2ICsyMjgsMTkgQEAKIAlkYXRhLT5zbG9wZV90aHJlcyA9IHJldDsKIAogCS8qIFNldCBkZWZhdWx0IGludGVycnVwdCBtb2RlICovCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwgQk1HMTYwX1JFR19JTlRfRU5fMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmZGF0YS0+Y2xpZW50LT5kZXYsICJFcnJvciByZWFkaW5nIHJlZ19pbnRfZW5fMVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCAmPSB+Qk1HMTYwX0lOVDFfQklUX09EOworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LAorCQkJCQlCTUcxNjBfUkVHX0lOVF9FTl8xLCByZXQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmRhdGEtPmNsaWVudC0+ZGV2LCAiRXJyb3Igd3JpdGluZyByZWdfaW50X2VuXzFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwogCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LAogCQkJCQlCTUcxNjBfUkVHX0lOVF9SU1RfTEFUQ0gsCiAJCQkJCUJNRzE2MF9JTlRfTU9ERV9MQVRDSF9JTlQgfApAQCAtMjUwLDYgKzI2OSw5IEBACiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmZGF0YS0+Y2xpZW50LT5kZXYsCiAJCQkiRmFpbGVkOiBibWcxNjBfc2V0X3Bvd2VyX3N0YXRlIGZvciAlZFxuIiwgb24pOworCQlpZiAob24pCisJCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmRhdGEtPmNsaWVudC0+ZGV2KTsKKwogCQlyZXR1cm4gcmV0OwogCX0KICNlbmRpZgpAQCAtNzA1LDYgKzcyNyw3IEBACiAKIAlyZXQgPSAgYm1nMTYwX3NldHVwX2FueV9tb3Rpb25faW50ZXJydXB0KGRhdGEsIHN0YXRlKTsKIAlpZiAocmV0IDwgMCkgeworCQlibWcxNjBfc2V0X3Bvd2VyX3N0YXRlKGRhdGEsIGZhbHNlKTsKIAkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtNzQzLDcgKzc2Niw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2V2ZW50X3NwZWMgYm1nMTYwX2V2ZW50ID0gewogCQkudHlwZSA9IElJT19FVl9UWVBFX1JPQywKLQkJLmRpciA9IElJT19FVl9ESVJfUklTSU5HIHwgSUlPX0VWX0RJUl9GQUxMSU5HLAorCQkuZGlyID0gSUlPX0VWX0RJUl9FSVRIRVIsCiAJCS5tYXNrX3NoYXJlZF9ieV90eXBlID0gQklUKElJT19FVl9JTkZPX1ZBTFVFKSB8CiAJCQkJICAgICAgIEJJVChJSU9fRVZfSU5GT19FTkFCTEUpCiB9OwpAQCAtODcxLDYgKzg5NCw3IEBACiAJZWxzZQogCQlyZXQgPSBibWcxNjBfc2V0dXBfbmV3X2RhdGFfaW50ZXJydXB0KGRhdGEsIHN0YXRlKTsKIAlpZiAocmV0IDwgMCkgeworCQlibWcxNjBfc2V0X3Bvd2VyX3N0YXRlKGRhdGEsIGZhbHNlKTsKIAkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtOTA4LDEwICs5MzIsMjQgQEAKIAllbHNlCiAJCWRpciA9IElJT19FVl9ESVJfRkFMTElORzsKIAotCWlmIChyZXQgJiBCTUcxNjBfQU5ZX01PVElPTl9NQVNLKQorCWlmIChyZXQgJiBCTUcxNjBfQU5ZX01PVElPTl9CSVRfWCkKIAkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCBJSU9fTU9EX0VWRU5UX0NPREUoSUlPX0FOR0xfVkVMLAogCQkJCQkJCTAsCi0JCQkJCQkJSUlPX01PRF9YX09SX1lfT1JfWiwKKwkJCQkJCQlJSU9fTU9EX1gsCisJCQkJCQkJSUlPX0VWX1RZUEVfUk9DLAorCQkJCQkJCWRpciksCisJCQkJCQkJZGF0YS0+dGltZXN0YW1wKTsKKwlpZiAocmV0ICYgQk1HMTYwX0FOWV9NT1RJT05fQklUX1kpCisJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwgSUlPX01PRF9FVkVOVF9DT0RFKElJT19BTkdMX1ZFTCwKKwkJCQkJCQkwLAorCQkJCQkJCUlJT19NT0RfWSwKKwkJCQkJCQlJSU9fRVZfVFlQRV9ST0MsCisJCQkJCQkJZGlyKSwKKwkJCQkJCQlkYXRhLT50aW1lc3RhbXApOworCWlmIChyZXQgJiBCTUcxNjBfQU5ZX01PVElPTl9CSVRfWikKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCBJSU9fTU9EX0VWRU5UX0NPREUoSUlPX0FOR0xfVkVMLAorCQkJCQkJCTAsCisJCQkJCQkJSUlPX01PRF9aLAogCQkJCQkJCUlJT19FVl9UWVBFX1JPQywKIAkJCQkJCQlkaXIpLAogCQkJCQkJCWRhdGEtPnRpbWVzdGFtcCk7CkBAIC0xMTY5LDggKzEyMDcsMTUgQEAKIHsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKHRvX2kyY19jbGllbnQoZGV2KSk7CiAJc3RydWN0IGJtZzE2MF9kYXRhICpkYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlpbnQgcmV0OwogCi0JcmV0dXJuIGJtZzE2MF9zZXRfbW9kZShkYXRhLCBCTUcxNjBfTU9ERV9TVVNQRU5EKTsKKwlyZXQgPSBibWcxNjBfc2V0X21vZGUoZGF0YSwgQk1HMTYwX01PREVfU1VTUEVORCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmZGF0YS0+Y2xpZW50LT5kZXYsICJzZXQgbW9kZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBibWcxNjBfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vbGlnaHQvdHNsNDUzMS5jIGIvZHJpdmVycy9paW8vbGlnaHQvdHNsNDUzMS5jCmluZGV4IGExNTAwNmUuLjA3NjNiODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2xpZ2h0L3RzbDQ1MzEuYworKysgYi9kcml2ZXJzL2lpby9saWdodC90c2w0NTMxLmMKQEAgLTIzMCw5ICsyMzAsMTIgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSh0b19pMmNfY2xpZW50KGRldiksIFRTTDQ1MzFfQ09OVFJPTCwKIAkJVFNMNDUzMV9NT0RFX05PUk1BTCk7CiB9Ci0jZW5kaWYKIAogc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHRzbDQ1MzFfcG1fb3BzLCB0c2w0NTMxX3N1c3BlbmQsIHRzbDQ1MzFfcmVzdW1lKTsKKyNkZWZpbmUgVFNMNDUzMV9QTV9PUFMgKCZ0c2w0NTMxX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIFRTTDQ1MzFfUE1fT1BTIE5VTEwKKyNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHNsNDUzMV9pZFtdID0gewogCXsgInRzbDQ1MzEiLCAwIH0sCkBAIC0yNDMsNyArMjQ2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0c2w0NTMxX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSAgID0gVFNMNDUzMV9EUlZfTkFNRSwKLQkJLnBtCT0gJnRzbDQ1MzFfcG1fb3BzLAorCQkucG0JPSBUU0w0NTMxX1BNX09QUywKIAkJLm93bmVyICA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlICA9IHRzbDQ1MzFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9wcm94aW1pdHkvYXMzOTM1LmMgYi9kcml2ZXJzL2lpby9wcm94aW1pdHkvYXMzOTM1LmMKaW5kZXggNWU3ODBlZi4uODM0OWNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vcHJveGltaXR5L2FzMzkzNS5jCisrKyBiL2RyaXZlcnMvaWlvL3Byb3hpbWl0eS9hczM5MzUuYwpAQCAtMzMwLDcgKzMzMCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluZGlvX2RldiA9IGRldm1faWlvX2RldmljZV9hbGxvYygmc3BpLT5kZXYsIHNpemVvZihzdCkpOworCWluZGlvX2RldiA9IGRldm1faWlvX2RldmljZV9hbGxvYygmc3BpLT5kZXYsIHNpemVvZigqc3QpKTsKIAlpZiAoIWluZGlvX2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCmluZGV4IGY0MmFiMTQuLjIwY2E2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwpAQCAtOTExLDcgKzkxMSw3IEBACiAJLm1vZHVsZSAgICAgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJpU0NTSSBJbml0aWF0b3Igb3ZlciBpU0VSIiwKIAkucXVldWVjb21tYW5kICAgICAgICAgICA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuc2dfdGFibGVzaXplICAgICAgICAgICA9IElTQ1NJX0lTRVJfU0dfVEFCTEVTSVpFLAogCS5tYXhfc2VjdG9ycwkJPSAxMDI0LAogCS5jbWRfcGVyX2x1biAgICAgICAgICAgID0gSVNFUl9ERUZfQ01EX1BFUl9MVU4sCkBAIC05MjIsNiArOTIyLDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcgICAgICAgICA9IERJU0FCTEVfQ0xVU1RFUklORywKIAkucHJvY19uYW1lICAgICAgICAgICAgICA9ICJpc2NzaV9pc2VyIiwKIAkudGhpc19pZCAgICAgICAgICAgICAgICA9IC0xLAorCS50cmFja19xdWV1ZV9kZXB0aAk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBpc2NzaV9pc2VyX3RyYW5zcG9ydCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvaWJfaXNlcnQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvaWJfaXNlcnQuYwppbmRleCAzZWZmYTkzLi4xMDY0MWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L2liX2lzZXJ0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydC9pYl9pc2VydC5jCkBAIC0xMTUsOSArMTE1LDEyIEBACiAJYXR0ci5jYXAubWF4X3JlY3Zfd3IgPSBJU0VSVF9RUF9NQVhfUkVDVl9EVE9TOwogCS8qCiAJICogRklYTUU6IFVzZSBkZXZhdHRyLm1heF9zZ2UgLSAyIGZvciBtYXhfc2VuZF9zZ2UgYXMKLQkgKiB3b3JrLWFyb3VuZCBmb3IgUkRNQV9SRUFELi4KKwkgKiB3b3JrLWFyb3VuZCBmb3IgUkRNQV9SRUFEcyB3aXRoIENvbm5lY3RYLTIuCisJICoKKwkgKiBBbHNvLCBzdGlsbCBtYWtlIHN1cmUgdG8gaGF2ZSBhdCBsZWFzdCB0d28gU0dFcyBmb3IKKwkgKiBvdXRnb2luZyBjb250cm9sIFBEVSByZXNwb25zZXMuCiAJICovCi0JYXR0ci5jYXAubWF4X3NlbmRfc2dlID0gZGV2aWNlLT5kZXZfYXR0ci5tYXhfc2dlIC0gMjsKKwlhdHRyLmNhcC5tYXhfc2VuZF9zZ2UgPSBtYXgoMiwgZGV2aWNlLT5kZXZfYXR0ci5tYXhfc2dlIC0gMik7CiAJaXNlcnRfY29ubi0+bWF4X3NnZSA9IGF0dHIuY2FwLm1heF9zZW5kX3NnZTsKIAogCWF0dHIuY2FwLm1heF9yZWN2X3NnZSA9IDE7CkBAIC0yMjUsMTIgKzIyOCwxNiBAQAogCXN0cnVjdCBpc2VydF9jcV9kZXNjICpjcV9kZXNjOwogCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqZGV2X2F0dHI7CiAJaW50IHJldCA9IDAsIGksIGo7CisJaW50IG1heF9yeF9jcWUsIG1heF90eF9jcWU7CiAKIAlkZXZfYXR0ciA9ICZkZXZpY2UtPmRldl9hdHRyOwogCXJldCA9IGlzZXJ0X3F1ZXJ5X2RldmljZShpYl9kZXYsIGRldl9hdHRyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJbWF4X3J4X2NxZSA9IG1pbihJU0VSX01BWF9SWF9DUV9MRU4sIGRldl9hdHRyLT5tYXhfY3FlKTsKKwltYXhfdHhfY3FlID0gbWluKElTRVJfTUFYX1RYX0NRX0xFTiwgZGV2X2F0dHItPm1heF9jcWUpOworCiAJLyogYXNpZ24gZnVuY3Rpb24gaGFuZGxlcnMgKi8KIAlpZiAoZGV2X2F0dHItPmRldmljZV9jYXBfZmxhZ3MgJiBJQl9ERVZJQ0VfTUVNX01HVF9FWFRFTlNJT05TICYmCiAJICAgIGRldl9hdHRyLT5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX1NJR05BVFVSRV9IQU5ET1ZFUikgewpAQCAtMjcyLDcgKzI3OSw3IEBACiAJCQkJCQlpc2VydF9jcV9yeF9jYWxsYmFjaywKIAkJCQkJCWlzZXJ0X2NxX2V2ZW50X2NhbGxiYWNrLAogCQkJCQkJKHZvaWQgKikmY3FfZGVzY1tpXSwKLQkJCQkJCUlTRVJfTUFYX1JYX0NRX0xFTiwgaSk7CisJCQkJCQltYXhfcnhfY3FlLCBpKTsKIAkJaWYgKElTX0VSUihkZXZpY2UtPmRldl9yeF9jcVtpXSkpIHsKIAkJCXJldCA9IFBUUl9FUlIoZGV2aWNlLT5kZXZfcnhfY3FbaV0pOwogCQkJZGV2aWNlLT5kZXZfcnhfY3FbaV0gPSBOVUxMOwpAQCAtMjg0LDcgKzI5MSw3IEBACiAJCQkJCQlpc2VydF9jcV90eF9jYWxsYmFjaywKIAkJCQkJCWlzZXJ0X2NxX2V2ZW50X2NhbGxiYWNrLAogCQkJCQkJKHZvaWQgKikmY3FfZGVzY1tpXSwKLQkJCQkJCUlTRVJfTUFYX1RYX0NRX0xFTiwgaSk7CisJCQkJCQltYXhfdHhfY3FlLCBpKTsKIAkJaWYgKElTX0VSUihkZXZpY2UtPmRldl90eF9jcVtpXSkpIHsKIAkJCXJldCA9IFBUUl9FUlIoZGV2aWNlLT5kZXZfdHhfY3FbaV0pOwogCQkJZGV2aWNlLT5kZXZfdHhfY3FbaV0gPSBOVUxMOwpAQCAtODAzLDE0ICs4MTAsMjUgQEAKIAljb21wbGV0ZSgmaXNlcnRfY29ubi0+Y29ubl93YWl0KTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIGlzZXJ0X2Rpc2Nvbm5lY3RlZF9oYW5kbGVyKHN0cnVjdCByZG1hX2NtX2lkICpjbWFfaWQsIGJvb2wgZGlzY29ubmVjdCkKIHsKLQlzdHJ1Y3QgaXNlcnRfY29ubiAqaXNlcnRfY29ubiA9IChzdHJ1Y3QgaXNlcnRfY29ubiAqKWNtYV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgaXNlcnRfY29ubiAqaXNlcnRfY29ubjsKKworCWlmICghY21hX2lkLT5xcCkgeworCQlzdHJ1Y3QgaXNlcnRfbnAgKmlzZXJ0X25wID0gY21hX2lkLT5jb250ZXh0OworCisJCWlzZXJ0X25wLT5ucF9jbV9pZCA9IE5VTEw7CisJCXJldHVybiAtMTsKKwl9CisKKwlpc2VydF9jb25uID0gKHN0cnVjdCBpc2VydF9jb25uICopY21hX2lkLT5jb250ZXh0OwogCiAJaXNlcnRfY29ubi0+ZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3Q7CiAJSU5JVF9XT1JLKCZpc2VydF9jb25uLT5jb25uX2xvZ291dF93b3JrLCBpc2VydF9kaXNjb25uZWN0X3dvcmspOwogCXNjaGVkdWxlX3dvcmsoJmlzZXJ0X2Nvbm4tPmNvbm5fbG9nb3V0X3dvcmspOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTgyNSw2ICs4NDMsOSBAQAogCXN3aXRjaCAoZXZlbnQtPmV2ZW50KSB7CiAJY2FzZSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDoKIAkJcmV0ID0gaXNlcnRfY29ubmVjdF9yZXF1ZXN0KGNtYV9pZCwgZXZlbnQpOworCQlpZiAocmV0KQorCQkJcHJfZXJyKCJpc2VydF9jbWFfaGFuZGxlciBmYWlsZWQgUkRNQV9DTV9FVkVOVDogMHglMDh4ICVkXG4iLAorCQkJCWV2ZW50LT5ldmVudCwgcmV0KTsKIAkJYnJlYWs7CiAJY2FzZSBSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVEOgogCQlpc2VydF9jb25uZWN0ZWRfaGFuZGxlcihjbWFfaWQpOwpAQCAtODM0LDcgKzg1NSw3IEBACiAJY2FzZSBSRE1BX0NNX0VWRU5UX0RFVklDRV9SRU1PVkFMOiAvKiBGQUxMVEhSVSAqLwogCQlkaXNjb25uZWN0ID0gdHJ1ZTsKIAljYXNlIFJETUFfQ01fRVZFTlRfVElNRVdBSVRfRVhJVDogIC8qIEZBTExUSFJVICovCi0JCWlzZXJ0X2Rpc2Nvbm5lY3RlZF9oYW5kbGVyKGNtYV9pZCwgZGlzY29ubmVjdCk7CisJCXJldCA9IGlzZXJ0X2Rpc2Nvbm5lY3RlZF9oYW5kbGVyKGNtYV9pZCwgZGlzY29ubmVjdCk7CiAJCWJyZWFrOwogCWNhc2UgUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SOgogCWRlZmF1bHQ6CkBAIC04NDIsMTIgKzg2Myw2IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChyZXQgIT0gMCkgewotCQlwcl9lcnIoImlzZXJ0X2NtYV9oYW5kbGVyIGZhaWxlZCBSRE1BX0NNX0VWRU5UOiAweCUwOHggJWRcbiIsCi0JCSAgICAgICBldmVudC0+ZXZlbnQsIHJldCk7Ci0JCWR1bXBfc3RhY2soKTsKLQl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTkwLDcgKzMyMDUsOCBAQAogewogCXN0cnVjdCBpc2VydF9ucCAqaXNlcnRfbnAgPSAoc3RydWN0IGlzZXJ0X25wICopbnAtPm5wX2NvbnRleHQ7CiAKLQlyZG1hX2Rlc3Ryb3lfaWQoaXNlcnRfbnAtPm5wX2NtX2lkKTsKKwlpZiAoaXNlcnRfbnAtPm5wX2NtX2lkKQorCQlyZG1hX2Rlc3Ryb3lfaWQoaXNlcnRfbnAtPm5wX2NtX2lkKTsKIAogCW5wLT5ucF9jb250ZXh0ID0gTlVMTDsKIAlrZnJlZShpc2VydF9ucCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCmluZGV4IDYyZDJhMTguLjU0NjE5MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCkBAIC0xMjMsMTAgKzEyMywxNSBAQAogCQkgIiBpZiBmYXN0X2lvX2ZhaWxfdG1vIGhhcyBub3QgYmVlbiBzZXQuIFwib2ZmXCIgbWVhbnMgdGhhdCIKIAkJICIgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLiIpOwogCitzdGF0aWMgdW5zaWduZWQgY2hfY291bnQ7Cittb2R1bGVfcGFyYW0oY2hfY291bnQsIHVpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhjaF9jb3VudCwKKwkJICJOdW1iZXIgb2YgUkRNQSBjaGFubmVscyB0byB1c2UgZm9yIGNvbW11bmljYXRpb24gd2l0aCBhbiBTUlAgdGFyZ2V0LiBVc2luZyBtb3JlIHRoYW4gb25lIGNoYW5uZWwgaW1wcm92ZXMgcGVyZm9ybWFuY2UgaWYgdGhlIEhDQSBzdXBwb3J0cyBtdWx0aXBsZSBjb21wbGV0aW9uIHZlY3RvcnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIGZvdXIgdGltZXMgdGhlIG51bWJlciBvZiBvbmxpbmUgQ1BVIHNvY2tldHMgYW5kIHRoZSBudW1iZXIgb2YgY29tcGxldGlvbiB2ZWN0b3JzIHN1cHBvcnRlZCBieSB0aGUgSENBLiIpOworCiBzdGF0aWMgdm9pZCBzcnBfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIHZvaWQgc3JwX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyB2b2lkIHNycF9yZWN2X2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqdGFyZ2V0X3B0cik7Ci1zdGF0aWMgdm9pZCBzcnBfc2VuZF9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKnRhcmdldF9wdHIpOworc3RhdGljIHZvaWQgc3JwX3JlY3ZfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjaF9wdHIpOworc3RhdGljIHZvaWQgc3JwX3NlbmRfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjaF9wdHIpOwogc3RhdGljIGludCBzcnBfY21faGFuZGxlcihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaWJfY21fZXZlbnQgKmV2ZW50KTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqaWJfc3JwX3RyYW5zcG9ydF90ZW1wbGF0ZTsKQEAgLTI2Miw3ICsyNjcsNyBAQAogCiAJcmV0ID0gaWJfZmluZF9wa2V5KHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldiwKIAkJCSAgIHRhcmdldC0+c3JwX2hvc3QtPnBvcnQsCi0JCQkgICBiZTE2X3RvX2NwdSh0YXJnZXQtPnBhdGgucGtleSksCisJCQkgICBiZTE2X3RvX2NwdSh0YXJnZXQtPnBrZXkpLAogCQkJICAgJmF0dHItPnBrZXlfaW5kZXgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpAQCAtMjgzLDE4ICsyODgsMjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNycF9uZXdfY21faWQoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorc3RhdGljIGludCBzcnBfbmV3X2NtX2lkKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3QgaWJfY21faWQgKm5ld19jbV9pZDsKIAogCW5ld19jbV9pZCA9IGliX2NyZWF0ZV9jbV9pZCh0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYsCi0JCQkJICAgIHNycF9jbV9oYW5kbGVyLCB0YXJnZXQpOworCQkJCSAgICBzcnBfY21faGFuZGxlciwgY2gpOwogCWlmIChJU19FUlIobmV3X2NtX2lkKSkKIAkJcmV0dXJuIFBUUl9FUlIobmV3X2NtX2lkKTsKIAotCWlmICh0YXJnZXQtPmNtX2lkKQotCQlpYl9kZXN0cm95X2NtX2lkKHRhcmdldC0+Y21faWQpOwotCXRhcmdldC0+Y21faWQgPSBuZXdfY21faWQ7CisJaWYgKGNoLT5jbV9pZCkKKwkJaWJfZGVzdHJveV9jbV9pZChjaC0+Y21faWQpOworCWNoLT5jbV9pZCA9IG5ld19jbV9pZDsKKwljaC0+cGF0aC5zZ2lkID0gdGFyZ2V0LT5zZ2lkOworCWNoLT5wYXRoLmRnaWQgPSB0YXJnZXQtPm9yaWdfZGdpZDsKKwljaC0+cGF0aC5wa2V5ID0gdGFyZ2V0LT5wa2V5OworCWNoLT5wYXRoLnNlcnZpY2VfaWQgPSB0YXJnZXQtPnNlcnZpY2VfaWQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0Myw4ICs0NTMsNDQgQEAKIAkJCQkgIGRldi0+bWF4X3BhZ2VzX3Blcl9tcik7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX2NyZWF0ZV90YXJnZXRfaWIoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorLyoqCisgKiBzcnBfZGVzdHJveV9xcCgpIC0gZGVzdHJveSBhbiBSRE1BIHF1ZXVlIHBhaXIKKyAqIEBjaDogU1JQIFJETUEgY2hhbm5lbC4KKyAqCisgKiBDaGFuZ2UgYSBxdWV1ZSBwYWlyIGludG8gdGhlIGVycm9yIHN0YXRlIGFuZCB3YWl0IHVudGlsIGFsbCByZWNlaXZlCisgKiBjb21wbGV0aW9ucyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGJlZm9yZSBkZXN0cm95aW5nIGl0LiBUaGlzIGF2b2lkcyB0aGF0CisgKiB0aGUgcmVjZWl2ZSBjb21wbGV0aW9uIGhhbmRsZXIgY2FuIGFjY2VzcyB0aGUgcXVldWUgcGFpciB3aGlsZSBpdCBpcworICogYmVpbmcgZGVzdHJveWVkLgorICovCitzdGF0aWMgdm9pZCBzcnBfZGVzdHJveV9xcChzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CisJc3RhdGljIHN0cnVjdCBpYl9xcF9hdHRyIGF0dHIgPSB7IC5xcF9zdGF0ZSA9IElCX1FQU19FUlIgfTsKKwlzdGF0aWMgc3RydWN0IGliX3JlY3Zfd3Igd3IgPSB7IC53cl9pZCA9IFNSUF9MQVNUX1dSX0lEIH07CisJc3RydWN0IGliX3JlY3Zfd3IgKmJhZF93cjsKKwlpbnQgcmV0OworCisJLyogRGVzdHJveWluZyBhIFFQIGFuZCByZXVzaW5nIGNoLT5kb25lIGlzIG9ubHkgc2FmZSBpZiBub3QgY29ubmVjdGVkICovCisJV0FSTl9PTl9PTkNFKHRhcmdldC0+Y29ubmVjdGVkKTsKKworCXJldCA9IGliX21vZGlmeV9xcChjaC0+cXAsICZhdHRyLCBJQl9RUF9TVEFURSk7CisJV0FSTl9PTkNFKHJldCwgImliX2NtX2luaXRfcXBfYXR0cigpIHJldHVybmVkICVkXG4iLCByZXQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaW5pdF9jb21wbGV0aW9uKCZjaC0+ZG9uZSk7CisJcmV0ID0gaWJfcG9zdF9yZWN2KGNoLT5xcCwgJndyLCAmYmFkX3dyKTsKKwlXQVJOX09OQ0UocmV0LCAiaWJfcG9zdF9yZWN2KCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJaWYgKHJldCA9PSAwKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjaC0+ZG9uZSk7CisKK291dDoKKwlpYl9kZXN0cm95X3FwKGNoLT5xcCk7Cit9CisKK3N0YXRpYyBpbnQgc3JwX2NyZWF0ZV9jaF9pYihzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQoreworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXY7CiAJc3RydWN0IGliX3FwX2luaXRfYXR0ciAqaW5pdF9hdHRyOwogCXN0cnVjdCBpYl9jcSAqcmVjdl9jcSwgKnNlbmRfY3E7CkBAIC00NTgsMTUgKzUwNCwxNiBAQAogCWlmICghaW5pdF9hdHRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJlY3ZfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LT5kZXYsIHNycF9yZWN2X2NvbXBsZXRpb24sIE5VTEwsIHRhcmdldCwKLQkJCSAgICAgICB0YXJnZXQtPnF1ZXVlX3NpemUsIHRhcmdldC0+Y29tcF92ZWN0b3IpOworCS8qICsgMSBmb3IgU1JQX0xBU1RfV1JfSUQgKi8KKwlyZWN2X2NxID0gaWJfY3JlYXRlX2NxKGRldi0+ZGV2LCBzcnBfcmVjdl9jb21wbGV0aW9uLCBOVUxMLCBjaCwKKwkJCSAgICAgICB0YXJnZXQtPnF1ZXVlX3NpemUgKyAxLCBjaC0+Y29tcF92ZWN0b3IpOwogCWlmIChJU19FUlIocmVjdl9jcSkpIHsKIAkJcmV0ID0gUFRSX0VSUihyZWN2X2NxKTsKIAkJZ290byBlcnI7CiAJfQogCi0Jc2VuZF9jcSA9IGliX2NyZWF0ZV9jcShkZXYtPmRldiwgc3JwX3NlbmRfY29tcGxldGlvbiwgTlVMTCwgdGFyZ2V0LAotCQkJICAgICAgIG0gKiB0YXJnZXQtPnF1ZXVlX3NpemUsIHRhcmdldC0+Y29tcF92ZWN0b3IpOworCXNlbmRfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LT5kZXYsIHNycF9zZW5kX2NvbXBsZXRpb24sIE5VTEwsIGNoLAorCQkJICAgICAgIG0gKiB0YXJnZXQtPnF1ZXVlX3NpemUsIGNoLT5jb21wX3ZlY3Rvcik7CiAJaWYgKElTX0VSUihzZW5kX2NxKSkgewogCQlyZXQgPSBQVFJfRVJSKHNlbmRfY3EpOwogCQlnb3RvIGVycl9yZWN2X2NxOwpAQCAtNDc2LDcgKzUyMyw3IEBACiAKIAlpbml0X2F0dHItPmV2ZW50X2hhbmRsZXIgICAgICAgPSBzcnBfcXBfZXZlbnQ7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgICAgID0gbSAqIHRhcmdldC0+cXVldWVfc2l6ZTsKLQlpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93ciAgICAgPSB0YXJnZXQtPnF1ZXVlX3NpemU7CisJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgICAgID0gdGFyZ2V0LT5xdWV1ZV9zaXplICsgMTsKIAlpbml0X2F0dHItPmNhcC5tYXhfcmVjdl9zZ2UgICAgPSAxOwogCWluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSAgICA9IDE7CiAJaW5pdF9hdHRyLT5zcV9zaWdfdHlwZSAgICAgICAgID0gSUJfU0lHTkFMX1JFUV9XUjsKQEAgLTUwMiw5ICs1NDksOSBAQAogCQkJCSAgICAgIkZSIHBvb2wgYWxsb2NhdGlvbiBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKIAkJCWdvdG8gZXJyX3FwOwogCQl9Ci0JCWlmICh0YXJnZXQtPmZyX3Bvb2wpCi0JCQlzcnBfZGVzdHJveV9mcl9wb29sKHRhcmdldC0+ZnJfcG9vbCk7Ci0JCXRhcmdldC0+ZnJfcG9vbCA9IGZyX3Bvb2w7CisJCWlmIChjaC0+ZnJfcG9vbCkKKwkJCXNycF9kZXN0cm95X2ZyX3Bvb2woY2gtPmZyX3Bvb2wpOworCQljaC0+ZnJfcG9vbCA9IGZyX3Bvb2w7CiAJfSBlbHNlIGlmICghZGV2LT51c2VfZmFzdF9yZWcgJiYgZGV2LT5oYXNfZm1yKSB7CiAJCWZtcl9wb29sID0gc3JwX2FsbG9jX2Ztcl9wb29sKHRhcmdldCk7CiAJCWlmIChJU19FUlIoZm1yX3Bvb2wpKSB7CkBAIC01MTMsMjEgKzU2MCwyMSBAQAogCQkJCSAgICAgIkZNUiBwb29sIGFsbG9jYXRpb24gZmFpbGVkICglZClcbiIsIHJldCk7CiAJCQlnb3RvIGVycl9xcDsKIAkJfQotCQlpZiAodGFyZ2V0LT5mbXJfcG9vbCkKLQkJCWliX2Rlc3Ryb3lfZm1yX3Bvb2wodGFyZ2V0LT5mbXJfcG9vbCk7Ci0JCXRhcmdldC0+Zm1yX3Bvb2wgPSBmbXJfcG9vbDsKKwkJaWYgKGNoLT5mbXJfcG9vbCkKKwkJCWliX2Rlc3Ryb3lfZm1yX3Bvb2woY2gtPmZtcl9wb29sKTsKKwkJY2gtPmZtcl9wb29sID0gZm1yX3Bvb2w7CiAJfQogCi0JaWYgKHRhcmdldC0+cXApCi0JCWliX2Rlc3Ryb3lfcXAodGFyZ2V0LT5xcCk7Ci0JaWYgKHRhcmdldC0+cmVjdl9jcSkKLQkJaWJfZGVzdHJveV9jcSh0YXJnZXQtPnJlY3ZfY3EpOwotCWlmICh0YXJnZXQtPnNlbmRfY3EpCi0JCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5zZW5kX2NxKTsKKwlpZiAoY2gtPnFwKQorCQlzcnBfZGVzdHJveV9xcChjaCk7CisJaWYgKGNoLT5yZWN2X2NxKQorCQlpYl9kZXN0cm95X2NxKGNoLT5yZWN2X2NxKTsKKwlpZiAoY2gtPnNlbmRfY3EpCisJCWliX2Rlc3Ryb3lfY3EoY2gtPnNlbmRfY3EpOwogCi0JdGFyZ2V0LT5xcCA9IHFwOwotCXRhcmdldC0+cmVjdl9jcSA9IHJlY3ZfY3E7Ci0JdGFyZ2V0LT5zZW5kX2NxID0gc2VuZF9jcTsKKwljaC0+cXAgPSBxcDsKKwljaC0+cmVjdl9jcSA9IHJlY3ZfY3E7CisJY2gtPnNlbmRfY3EgPSBzZW5kX2NxOwogCiAJa2ZyZWUoaW5pdF9hdHRyKTsKIAlyZXR1cm4gMDsKQEAgLTU0OCw5MyArNTk1LDExNyBAQAogCiAvKgogICogTm90ZTogdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgc3JwX2FsbG9jX2l1X2J1ZnMoKSBoYXZpbmcgYmVlbgotICogaW52b2tlZC4gSGVuY2UgdGhlIHRhcmdldC0+W3J0XXhfcmluZyBjaGVja3MuCisgKiBpbnZva2VkLiBIZW5jZSB0aGUgY2gtPltydF14X3JpbmcgY2hlY2tzLgogICovCi1zdGF0aWMgdm9pZCBzcnBfZnJlZV90YXJnZXRfaWIoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorc3RhdGljIHZvaWQgc3JwX2ZyZWVfY2hfaWIoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorCQkJICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKIAlzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2RldjsKIAlpbnQgaTsKIAorCWlmICghY2gtPnRhcmdldCkKKwkJcmV0dXJuOworCisJaWYgKGNoLT5jbV9pZCkgeworCQlpYl9kZXN0cm95X2NtX2lkKGNoLT5jbV9pZCk7CisJCWNoLT5jbV9pZCA9IE5VTEw7CisJfQorCisJLyogSWYgc3JwX25ld19jbV9pZCgpIHN1Y2NlZWRlZCBidXQgc3JwX2NyZWF0ZV9jaF9pYigpIG5vdCwgcmV0dXJuLiAqLworCWlmICghY2gtPnFwKQorCQlyZXR1cm47CisKIAlpZiAoZGV2LT51c2VfZmFzdF9yZWcpIHsKLQkJaWYgKHRhcmdldC0+ZnJfcG9vbCkKLQkJCXNycF9kZXN0cm95X2ZyX3Bvb2wodGFyZ2V0LT5mcl9wb29sKTsKKwkJaWYgKGNoLT5mcl9wb29sKQorCQkJc3JwX2Rlc3Ryb3lfZnJfcG9vbChjaC0+ZnJfcG9vbCk7CiAJfSBlbHNlIHsKLQkJaWYgKHRhcmdldC0+Zm1yX3Bvb2wpCi0JCQlpYl9kZXN0cm95X2Ztcl9wb29sKHRhcmdldC0+Zm1yX3Bvb2wpOworCQlpZiAoY2gtPmZtcl9wb29sKQorCQkJaWJfZGVzdHJveV9mbXJfcG9vbChjaC0+Zm1yX3Bvb2wpOwogCX0KLQlpYl9kZXN0cm95X3FwKHRhcmdldC0+cXApOwotCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5zZW5kX2NxKTsKLQlpYl9kZXN0cm95X2NxKHRhcmdldC0+cmVjdl9jcSk7CisJc3JwX2Rlc3Ryb3lfcXAoY2gpOworCWliX2Rlc3Ryb3lfY3EoY2gtPnNlbmRfY3EpOworCWliX2Rlc3Ryb3lfY3EoY2gtPnJlY3ZfY3EpOwogCi0JdGFyZ2V0LT5xcCA9IE5VTEw7Ci0JdGFyZ2V0LT5zZW5kX2NxID0gdGFyZ2V0LT5yZWN2X2NxID0gTlVMTDsKKwkvKgorCSAqIEF2b2lkIHRoYXQgdGhlIFNDU0kgZXJyb3IgaGFuZGxlciB0cmllcyB0byB1c2UgdGhpcyBjaGFubmVsIGFmdGVyCisJICogaXQgaGFzIGJlZW4gZnJlZWQuIFRoZSBTQ1NJIGVycm9yIGhhbmRsZXIgY2FuIG5hbWVseSBjb250aW51ZQorCSAqIHRyeWluZyB0byBwZXJmb3JtIHJlY292ZXJ5IGFjdGlvbnMgYWZ0ZXIgc2NzaV9yZW1vdmVfaG9zdCgpCisJICogcmV0dXJuZWQuCisJICovCisJY2gtPnRhcmdldCA9IE5VTEw7CiAKLQlpZiAodGFyZ2V0LT5yeF9yaW5nKSB7CisJY2gtPnFwID0gTlVMTDsKKwljaC0+c2VuZF9jcSA9IGNoLT5yZWN2X2NxID0gTlVMTDsKKworCWlmIChjaC0+cnhfcmluZykgewogCQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5xdWV1ZV9zaXplOyArK2kpCi0JCQlzcnBfZnJlZV9pdSh0YXJnZXQtPnNycF9ob3N0LCB0YXJnZXQtPnJ4X3JpbmdbaV0pOwotCQlrZnJlZSh0YXJnZXQtPnJ4X3JpbmcpOwotCQl0YXJnZXQtPnJ4X3JpbmcgPSBOVUxMOworCQkJc3JwX2ZyZWVfaXUodGFyZ2V0LT5zcnBfaG9zdCwgY2gtPnJ4X3JpbmdbaV0pOworCQlrZnJlZShjaC0+cnhfcmluZyk7CisJCWNoLT5yeF9yaW5nID0gTlVMTDsKIAl9Ci0JaWYgKHRhcmdldC0+dHhfcmluZykgeworCWlmIChjaC0+dHhfcmluZykgewogCQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5xdWV1ZV9zaXplOyArK2kpCi0JCQlzcnBfZnJlZV9pdSh0YXJnZXQtPnNycF9ob3N0LCB0YXJnZXQtPnR4X3JpbmdbaV0pOwotCQlrZnJlZSh0YXJnZXQtPnR4X3JpbmcpOwotCQl0YXJnZXQtPnR4X3JpbmcgPSBOVUxMOworCQkJc3JwX2ZyZWVfaXUodGFyZ2V0LT5zcnBfaG9zdCwgY2gtPnR4X3JpbmdbaV0pOworCQlrZnJlZShjaC0+dHhfcmluZyk7CisJCWNoLT50eF9yaW5nID0gTlVMTDsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHNycF9wYXRoX3JlY19jb21wbGV0aW9uKGludCBzdGF0dXMsCiAJCQkJICAgIHN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqcGF0aHJlYywKLQkJCQkgICAgdm9pZCAqdGFyZ2V0X3B0cikKKwkJCQkgICAgdm9pZCAqY2hfcHRyKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IHRhcmdldF9wdHI7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaCA9IGNoX3B0cjsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCi0JdGFyZ2V0LT5zdGF0dXMgPSBzdGF0dXM7CisJY2gtPnN0YXR1cyA9IHN0YXR1czsKIAlpZiAoc3RhdHVzKQogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAogCQkJICAgICBQRlggIkdvdCBmYWlsZWQgcGF0aCByZWMgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCWVsc2UKLQkJdGFyZ2V0LT5wYXRoID0gKnBhdGhyZWM7Ci0JY29tcGxldGUoJnRhcmdldC0+ZG9uZSk7CisJCWNoLT5wYXRoID0gKnBhdGhyZWM7CisJY29tcGxldGUoJmNoLT5kb25lKTsKIH0KIAotc3RhdGljIGludCBzcnBfbG9va3VwX3BhdGgoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorc3RhdGljIGludCBzcnBfbG9va3VwX3BhdGgoc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCWludCByZXQ7CiAKLQl0YXJnZXQtPnBhdGgubnVtYl9wYXRoID0gMTsKKwljaC0+cGF0aC5udW1iX3BhdGggPSAxOwogCi0JaW5pdF9jb21wbGV0aW9uKCZ0YXJnZXQtPmRvbmUpOworCWluaXRfY29tcGxldGlvbigmY2gtPmRvbmUpOwogCi0JdGFyZ2V0LT5wYXRoX3F1ZXJ5X2lkID0gaWJfc2FfcGF0aF9yZWNfZ2V0KCZzcnBfc2FfY2xpZW50LAotCQkJCQkJICAgdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2LAotCQkJCQkJICAgdGFyZ2V0LT5zcnBfaG9zdC0+cG9ydCwKLQkJCQkJCSAgICZ0YXJnZXQtPnBhdGgsCi0JCQkJCQkgICBJQl9TQV9QQVRIX1JFQ19TRVJWSUNFX0lECXwKLQkJCQkJCSAgIElCX1NBX1BBVEhfUkVDX0RHSUQJCXwKLQkJCQkJCSAgIElCX1NBX1BBVEhfUkVDX1NHSUQJCXwKLQkJCQkJCSAgIElCX1NBX1BBVEhfUkVDX05VTUJfUEFUSAl8Ci0JCQkJCQkgICBJQl9TQV9QQVRIX1JFQ19QS0VZLAotCQkJCQkJICAgU1JQX1BBVEhfUkVDX1RJTUVPVVRfTVMsCi0JCQkJCQkgICBHRlBfS0VSTkVMLAotCQkJCQkJICAgc3JwX3BhdGhfcmVjX2NvbXBsZXRpb24sCi0JCQkJCQkgICB0YXJnZXQsICZ0YXJnZXQtPnBhdGhfcXVlcnkpOwotCWlmICh0YXJnZXQtPnBhdGhfcXVlcnlfaWQgPCAwKQotCQlyZXR1cm4gdGFyZ2V0LT5wYXRoX3F1ZXJ5X2lkOworCWNoLT5wYXRoX3F1ZXJ5X2lkID0gaWJfc2FfcGF0aF9yZWNfZ2V0KCZzcnBfc2FfY2xpZW50LAorCQkJCQkgICAgICAgdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2LAorCQkJCQkgICAgICAgdGFyZ2V0LT5zcnBfaG9zdC0+cG9ydCwKKwkJCQkJICAgICAgICZjaC0+cGF0aCwKKwkJCQkJICAgICAgIElCX1NBX1BBVEhfUkVDX1NFUlZJQ0VfSUQgfAorCQkJCQkgICAgICAgSUJfU0FfUEFUSF9SRUNfREdJRAkgfAorCQkJCQkgICAgICAgSUJfU0FfUEFUSF9SRUNfU0dJRAkgfAorCQkJCQkgICAgICAgSUJfU0FfUEFUSF9SRUNfTlVNQl9QQVRICSB8CisJCQkJCSAgICAgICBJQl9TQV9QQVRIX1JFQ19QS0VZLAorCQkJCQkgICAgICAgU1JQX1BBVEhfUkVDX1RJTUVPVVRfTVMsCisJCQkJCSAgICAgICBHRlBfS0VSTkVMLAorCQkJCQkgICAgICAgc3JwX3BhdGhfcmVjX2NvbXBsZXRpb24sCisJCQkJCSAgICAgICBjaCwgJmNoLT5wYXRoX3F1ZXJ5KTsKKwlpZiAoY2gtPnBhdGhfcXVlcnlfaWQgPCAwKQorCQlyZXR1cm4gY2gtPnBhdGhfcXVlcnlfaWQ7CiAKLQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJnRhcmdldC0+ZG9uZSk7CisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjaC0+ZG9uZSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAodGFyZ2V0LT5zdGF0dXMgPCAwKQorCWlmIChjaC0+c3RhdHVzIDwgMCkKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgdGFyZ2V0LT5zY3NpX2hvc3QsCiAJCQkgICAgIFBGWCAiUGF0aCByZWNvcmQgcXVlcnkgZmFpbGVkXG4iKTsKIAotCXJldHVybiB0YXJnZXQtPnN0YXR1czsKKwlyZXR1cm4gY2gtPnN0YXR1czsKIH0KIAotc3RhdGljIGludCBzcnBfc2VuZF9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorc3RhdGljIGludCBzcnBfc2VuZF9yZXEoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgYm9vbCBtdWx0aWNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHsKIAkJc3RydWN0IGliX2NtX3JlcV9wYXJhbSBwYXJhbTsKIAkJc3RydWN0IHNycF9sb2dpbl9yZXEgICBwcml2OwpAQCAtNjQ1LDExICs3MTYsMTEgQEAKIAlpZiAoIXJlcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXEtPnBhcmFtLnByaW1hcnlfcGF0aCAJICAgICAgPSAmdGFyZ2V0LT5wYXRoOworCXJlcS0+cGFyYW0ucHJpbWFyeV9wYXRoCQkgICAgICA9ICZjaC0+cGF0aDsKIAlyZXEtPnBhcmFtLmFsdGVybmF0ZV9wYXRoIAkgICAgICA9IE5VTEw7CiAJcmVxLT5wYXJhbS5zZXJ2aWNlX2lkIAkJICAgICAgPSB0YXJnZXQtPnNlcnZpY2VfaWQ7Ci0JcmVxLT5wYXJhbS5xcF9udW0gCQkgICAgICA9IHRhcmdldC0+cXAtPnFwX251bTsKLQlyZXEtPnBhcmFtLnFwX3R5cGUgCQkgICAgICA9IHRhcmdldC0+cXAtPnFwX3R5cGU7CisJcmVxLT5wYXJhbS5xcF9udW0JCSAgICAgID0gY2gtPnFwLT5xcF9udW07CisJcmVxLT5wYXJhbS5xcF90eXBlCQkgICAgICA9IGNoLT5xcC0+cXBfdHlwZTsKIAlyZXEtPnBhcmFtLnByaXZhdGVfZGF0YSAJICAgICAgPSAmcmVxLT5wcml2OwogCXJlcS0+cGFyYW0ucHJpdmF0ZV9kYXRhX2xlbiAJICAgICAgPSBzaXplb2YgcmVxLT5wcml2OwogCXJlcS0+cGFyYW0uZmxvd19jb250cm9sIAkgICAgICA9IDE7CkBAIC02NzMsNiArNzQ0LDggQEAKIAlyZXEtPnByaXYucmVxX2l0X2l1X2xlbiA9IGNwdV90b19iZTMyKHRhcmdldC0+bWF4X2l1X2xlbik7CiAJcmVxLT5wcml2LnJlcV9idWZfZm10IAk9IGNwdV90b19iZTE2KFNSUF9CVUZfRk9STUFUX0RJUkVDVCB8CiAJCQkJCSAgICAgIFNSUF9CVUZfRk9STUFUX0lORElSRUNUKTsKKwlyZXEtPnByaXYucmVxX2ZsYWdzCT0gKG11bHRpY2ggPyBTUlBfTVVMVElDSEFOX01VTFRJIDoKKwkJCQkgICBTUlBfTVVMVElDSEFOX1NJTkdMRSk7CiAJLyoKIAkgKiBJbiB0aGUgcHVibGlzaGVkIFNSUCBzcGVjaWZpY2F0aW9uIChkcmFmdCByZXYuIDE2YSksIHRoZQogCSAqIHBvcnQgaWRlbnRpZmllciBmb3JtYXQgaXMgOCBieXRlcyBvZiBJRCBleHRlbnNpb24gZm9sbG93ZWQKQEAgLTY4NCw3ICs3NTcsNyBAQAogCSAqLwogCWlmICh0YXJnZXQtPmlvX2NsYXNzID09IFNSUF9SRVYxMF9JQl9JT19DTEFTUykgewogCQltZW1jcHkocmVxLT5wcml2LmluaXRpYXRvcl9wb3J0X2lkLAotCQkgICAgICAgJnRhcmdldC0+cGF0aC5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQsIDgpOworCQkgICAgICAgJnRhcmdldC0+c2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkLCA4KTsKIAkJbWVtY3B5KHJlcS0+cHJpdi5pbml0aWF0b3JfcG9ydF9pZCArIDgsCiAJCSAgICAgICAmdGFyZ2V0LT5pbml0aWF0b3JfZXh0LCA4KTsKIAkJbWVtY3B5KHJlcS0+cHJpdi50YXJnZXRfcG9ydF9pZCwgICAgICZ0YXJnZXQtPmlvY19ndWlkLCA4KTsKQEAgLTY5Myw3ICs3NjYsNyBAQAogCQltZW1jcHkocmVxLT5wcml2LmluaXRpYXRvcl9wb3J0X2lkLAogCQkgICAgICAgJnRhcmdldC0+aW5pdGlhdG9yX2V4dCwgOCk7CiAJCW1lbWNweShyZXEtPnByaXYuaW5pdGlhdG9yX3BvcnRfaWQgKyA4LAotCQkgICAgICAgJnRhcmdldC0+cGF0aC5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQsIDgpOworCQkgICAgICAgJnRhcmdldC0+c2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkLCA4KTsKIAkJbWVtY3B5KHJlcS0+cHJpdi50YXJnZXRfcG9ydF9pZCwgICAgICZ0YXJnZXQtPmlkX2V4dCwgOCk7CiAJCW1lbWNweShyZXEtPnByaXYudGFyZ2V0X3BvcnRfaWQgKyA4LCAmdGFyZ2V0LT5pb2NfZ3VpZCwgOCk7CiAJfQpAQCAtNzEzLDcgKzc4Niw3IEBACiAJCSAgICAgICAmdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2LT5ub2RlX2d1aWQsIDgpOwogCX0KIAotCXN0YXR1cyA9IGliX3NlbmRfY21fcmVxKHRhcmdldC0+Y21faWQsICZyZXEtPnBhcmFtKTsKKwlzdGF0dXMgPSBpYl9zZW5kX2NtX3JlcShjaC0+Y21faWQsICZyZXEtPnBhcmFtKTsKIAogCWtmcmVlKHJlcSk7CiAKQEAgLTc1NCwyOCArODI3LDM1IEBACiAKIHN0YXRpYyB2b2lkIHNycF9kaXNjb25uZWN0X3RhcmdldChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCiB7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaDsKKwlpbnQgaTsKKwogCWlmIChzcnBfY2hhbmdlX2Nvbm5fc3RhdGUodGFyZ2V0LCBmYWxzZSkpIHsKIAkJLyogWFhYIHNob3VsZCBzZW5kIFNSUF9JX0xPR09VVCByZXF1ZXN0ICovCiAKLQkJaWYgKGliX3NlbmRfY21fZHJlcSh0YXJnZXQtPmNtX2lkLCBOVUxMLCAwKSkgewotCQkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIHRhcmdldC0+c2NzaV9ob3N0LAotCQkJCSAgICAgUEZYICJTZW5kaW5nIENNIERSRVEgZmFpbGVkXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJCWlmIChjaC0+Y21faWQgJiYgaWJfc2VuZF9jbV9kcmVxKGNoLT5jbV9pZCwgTlVMTCwgMCkpIHsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgdGFyZ2V0LT5zY3NpX2hvc3QsCisJCQkJCSAgICAgUEZYICJTZW5kaW5nIENNIERSRVEgZmFpbGVkXG4iKTsKKwkJCX0KIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgc3JwX2ZyZWVfcmVxX2RhdGEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorc3RhdGljIHZvaWQgc3JwX2ZyZWVfcmVxX2RhdGEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorCQkJICAgICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKIAlzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2RldjsKIAlzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiA9IGRldi0+ZGV2OwogCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOwogCWludCBpOwogCi0JaWYgKCF0YXJnZXQtPnJlcV9yaW5nKQorCWlmICghY2gtPnRhcmdldCB8fCAhY2gtPnJlcV9yaW5nKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5yZXFfcmluZ19zaXplOyArK2kpIHsKLQkJcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbaV07CisJCXJlcSA9ICZjaC0+cmVxX3JpbmdbaV07CiAJCWlmIChkZXYtPnVzZV9mYXN0X3JlZykKIAkJCWtmcmVlKHJlcS0+ZnJfbGlzdCk7CiAJCWVsc2UKQEAgLTc4OSwxMiArODY5LDEzIEBACiAJCWtmcmVlKHJlcS0+aW5kaXJlY3RfZGVzYyk7CiAJfQogCi0Ja2ZyZWUodGFyZ2V0LT5yZXFfcmluZyk7Ci0JdGFyZ2V0LT5yZXFfcmluZyA9IE5VTEw7CisJa2ZyZWUoY2gtPnJlcV9yaW5nKTsKKwljaC0+cmVxX3JpbmcgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IHNycF9hbGxvY19yZXFfZGF0YShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCitzdGF0aWMgaW50IHNycF9hbGxvY19yZXFfZGF0YShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9kZXZpY2UgKnNycF9kZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gc3JwX2Rldi0+ZGV2OwogCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOwpAQCAtODAyLDE1ICs4ODMsMTMgQEAKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCWludCBpLCByZXQgPSAtRU5PTUVNOwogCi0JSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+ZnJlZV9yZXFzKTsKLQotCXRhcmdldC0+cmVxX3JpbmcgPSBremFsbG9jKHRhcmdldC0+cmVxX3Jpbmdfc2l6ZSAqCi0JCQkJICAgc2l6ZW9mKCp0YXJnZXQtPnJlcV9yaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0YXJnZXQtPnJlcV9yaW5nKQorCWNoLT5yZXFfcmluZyA9IGtjYWxsb2ModGFyZ2V0LT5yZXFfcmluZ19zaXplLCBzaXplb2YoKmNoLT5yZXFfcmluZyksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaC0+cmVxX3JpbmcpCiAJCWdvdG8gb3V0OwogCiAJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cmVxX3Jpbmdfc2l6ZTsgKytpKSB7Ci0JCXJlcSA9ICZ0YXJnZXQtPnJlcV9yaW5nW2ldOworCQlyZXEgPSAmY2gtPnJlcV9yaW5nW2ldOwogCQltcl9saXN0ID0ga21hbGxvYyh0YXJnZXQtPmNtZF9zZ19jbnQgKiBzaXplb2Yodm9pZCAqKSwKIAkJCQkgIEdGUF9LRVJORUwpOwogCQlpZiAoIW1yX2xpc3QpCkBAIC04MzQsOCArOTEzLDYgQEAKIAkJCWdvdG8gb3V0OwogCiAJCXJlcS0+aW5kaXJlY3RfZG1hX2FkZHIgPSBkbWFfYWRkcjsKLQkJcmVxLT5pbmRleCA9IGk7Ci0JCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJnRhcmdldC0+ZnJlZV9yZXFzKTsKIAl9CiAJcmV0ID0gMDsKIApAQCAtODYwLDYgKzkzNyw5IEBACiAKIHN0YXRpYyB2b2lkIHNycF9yZW1vdmVfdGFyZ2V0KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKIHsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoOworCWludCBpOworCiAJV0FSTl9PTl9PTkNFKHRhcmdldC0+c3RhdGUgIT0gU1JQX1RBUkdFVF9SRU1PVkVEKTsKIAogCXNycF9kZWxfc2NzaV9ob3N0X2F0dHIodGFyZ2V0LT5zY3NpX2hvc3QpOwpAQCAtODY4LDExICs5NDgsMTggQEAKIAlzY3NpX3JlbW92ZV9ob3N0KHRhcmdldC0+c2NzaV9ob3N0KTsKIAlzcnBfc3RvcF9ycG9ydF90aW1lcnModGFyZ2V0LT5ycG9ydCk7CiAJc3JwX2Rpc2Nvbm5lY3RfdGFyZ2V0KHRhcmdldCk7Ci0JaWJfZGVzdHJveV9jbV9pZCh0YXJnZXQtPmNtX2lkKTsKLQlzcnBfZnJlZV90YXJnZXRfaWIodGFyZ2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCXNycF9mcmVlX2NoX2liKHRhcmdldCwgY2gpOworCX0KIAljYW5jZWxfd29ya19zeW5jKCZ0YXJnZXQtPnRsX2Vycl93b3JrKTsKIAlzcnBfcnBvcnRfcHV0KHRhcmdldC0+cnBvcnQpOwotCXNycF9mcmVlX3JlcV9kYXRhKHRhcmdldCk7CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQlzcnBfZnJlZV9yZXFfZGF0YSh0YXJnZXQsIGNoKTsKKwl9CisJa2ZyZWUodGFyZ2V0LT5jaCk7CisJdGFyZ2V0LT5jaCA9IE5VTEw7CiAKIAlzcGluX2xvY2soJnRhcmdldC0+c3JwX2hvc3QtPnRhcmdldF9sb2NrKTsKIAlsaXN0X2RlbCgmdGFyZ2V0LT5saXN0KTsKQEAgLTg5OCwyNSArOTg1LDI1IEBACiAJc3JwX3F1ZXVlX3JlbW92ZV93b3JrKHRhcmdldCk7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX2Nvbm5lY3RfdGFyZ2V0KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKK3N0YXRpYyBpbnQgc3JwX2Nvbm5lY3RfY2goc3RydWN0IHNycF9yZG1hX2NoICpjaCwgYm9vbCBtdWx0aWNoKQogewotCWludCByZXRyaWVzID0gMzsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCWludCByZXQ7CiAKLQlXQVJOX09OX09OQ0UodGFyZ2V0LT5jb25uZWN0ZWQpOworCVdBUk5fT05fT05DRSghbXVsdGljaCAmJiB0YXJnZXQtPmNvbm5lY3RlZCk7CiAKIAl0YXJnZXQtPnFwX2luX2Vycm9yID0gZmFsc2U7CiAKLQlyZXQgPSBzcnBfbG9va3VwX3BhdGgodGFyZ2V0KTsKKwlyZXQgPSBzcnBfbG9va3VwX3BhdGgoY2gpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAl3aGlsZSAoMSkgewotCQlpbml0X2NvbXBsZXRpb24oJnRhcmdldC0+ZG9uZSk7Ci0JCXJldCA9IHNycF9zZW5kX3JlcSh0YXJnZXQpOworCQlpbml0X2NvbXBsZXRpb24oJmNoLT5kb25lKTsKKwkJcmV0ID0gc3JwX3NlbmRfcmVxKGNoLCBtdWx0aWNoKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmdGFyZ2V0LT5kb25lKTsKKwkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjaC0+ZG9uZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIApAQCAtOTI2LDEzICsxMDEzLDEzIEBACiAJCSAqIGJhY2ssIG9yIFNSUF9ETElEX1JFRElSRUNUIGlmIHdlIGdldCBhIGxpZC9xcAogCQkgKiByZWRpcmVjdCBSRUogYmFjay4KIAkJICovCi0JCXN3aXRjaCAodGFyZ2V0LT5zdGF0dXMpIHsKKwkJc3dpdGNoIChjaC0+c3RhdHVzKSB7CiAJCWNhc2UgMDoKIAkJCXNycF9jaGFuZ2VfY29ubl9zdGF0ZSh0YXJnZXQsIHRydWUpOwogCQkJcmV0dXJuIDA7CiAKIAkJY2FzZSBTUlBfUE9SVF9SRURJUkVDVDoKLQkJCXJldCA9IHNycF9sb29rdXBfcGF0aCh0YXJnZXQpOworCQkJcmV0ID0gc3JwX2xvb2t1cF9wYXRoKGNoKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJCWJyZWFrOwpAQCAtOTQxLDI3ICsxMDI4LDE4IEBACiAJCQlicmVhazsKIAogCQljYXNlIFNSUF9TVEFMRV9DT05OOgotCQkJLyogT3VyIGN1cnJlbnQgQ00gaWQgd2FzIHN0YWxlLCBhbmQgaXMgbm93IGluIHRpbWV3YWl0LgotCQkJICogVHJ5IHRvIHJlY29ubmVjdCB3aXRoIGEgbmV3IG9uZS4KLQkJCSAqLwotCQkJaWYgKCFyZXRyaWVzLS0gfHwgc3JwX25ld19jbV9pZCh0YXJnZXQpKSB7Ci0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCi0JCQkJCSAgICAgImdpdmluZyB1cCBvbiBzdGFsZSBjb25uZWN0aW9uXG4iKTsKLQkJCQl0YXJnZXQtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOwotCQkJCXJldHVybiB0YXJnZXQtPnN0YXR1czsKLQkJCX0KLQogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCi0JCQkJICAgICAicmV0cnlpbmcgc3RhbGUgY29ubmVjdGlvblxuIik7Ci0JCQlicmVhazsKKwkJCQkgICAgICJnaXZpbmcgdXAgb24gc3RhbGUgY29ubmVjdGlvblxuIik7CisJCQljaC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCQlyZXR1cm4gY2gtPnN0YXR1czsKIAogCQlkZWZhdWx0OgotCQkJcmV0dXJuIHRhcmdldC0+c3RhdHVzOworCQkJcmV0dXJuIGNoLT5zdGF0dXM7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBpbnQgc3JwX2ludl9ya2V5KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgdTMyIHJrZXkpCitzdGF0aWMgaW50IHNycF9pbnZfcmtleShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCB1MzIgcmtleSkKIHsKIAlzdHJ1Y3QgaWJfc2VuZF93ciAqYmFkX3dyOwogCXN0cnVjdCBpYl9zZW5kX3dyIHdyID0gewpAQCAtOTczLDEzICsxMDUxLDE0IEBACiAJCS5leC5pbnZhbGlkYXRlX3JrZXkgPSBya2V5LAogCX07CiAKLQlyZXR1cm4gaWJfcG9zdF9zZW5kKHRhcmdldC0+cXAsICZ3ciwgJmJhZF93cik7CisJcmV0dXJuIGliX3Bvc3Rfc2VuZChjaC0+cXAsICZ3ciwgJmJhZF93cik7CiB9CiAKIHN0YXRpYyB2b2lkIHNycF91bm1hcF9kYXRhKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLAotCQkJICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorCQkJICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCwKIAkJCSAgIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXY7CiAJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBkZXYtPmRldjsKIAlpbnQgaSwgcmVzOwpAQCAtOTkzLDcgKzEwNzIsNyBAQAogCQlzdHJ1Y3Qgc3JwX2ZyX2Rlc2MgKipwZnI7CiAKIAkJZm9yIChpID0gcmVxLT5ubWRlc2MsIHBmciA9IHJlcS0+ZnJfbGlzdDsgaSA+IDA7IGktLSwgcGZyKyspIHsKLQkJCXJlcyA9IHNycF9pbnZfcmtleSh0YXJnZXQsICgqcGZyKS0+bXItPnJrZXkpOworCQkJcmVzID0gc3JwX2ludl9ya2V5KGNoLCAoKnBmciktPm1yLT5ya2V5KTsKIAkJCWlmIChyZXMgPCAwKSB7CiAJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCiAJCQkJICAiUXVldWVpbmcgSU5WIFdSIGZvciBya2V5ICUjeCBmYWlsZWQgKCVkKVxuIiwKQEAgLTEwMDMsNyArMTA4Miw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKHJlcS0+bm1kZXNjKQotCQkJc3JwX2ZyX3Bvb2xfcHV0KHRhcmdldC0+ZnJfcG9vbCwgcmVxLT5mcl9saXN0LAorCQkJc3JwX2ZyX3Bvb2xfcHV0KGNoLT5mcl9wb29sLCByZXEtPmZyX2xpc3QsCiAJCQkJCXJlcS0+bm1kZXNjKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaWJfcG9vbF9mbXIgKipwZm1yOwpAQCAtMTAxOCw3ICsxMDk3LDcgQEAKIAogLyoqCiAgKiBzcnBfY2xhaW1fcmVxIC0gVGFrZSBvd25lcnNoaXAgb2YgdGhlIHNjbW5kIGFzc29jaWF0ZWQgd2l0aCBhIHJlcXVlc3QuCi0gKiBAdGFyZ2V0OiBTUlAgdGFyZ2V0IHBvcnQuCisgKiBAY2g6IFNSUCBSRE1BIGNoYW5uZWwuCiAgKiBAcmVxOiBTUlAgcmVxdWVzdC4KICAqIEBzZGV2OiBJZiBub3QgTlVMTCwgb25seSB0YWtlIG93bmVyc2hpcCBmb3IgdGhpcyBTQ1NJIGRldmljZS4KICAqIEBzY21uZDogSWYgTlVMTCwgdGFrZSBvd25lcnNoaXAgb2YgQHJlcS0+c2NtbmQuIElmIG5vdCBOVUxMLCBvbmx5IHRha2UKQEAgLTEwMjcsMTQgKzExMDYsMTQgQEAKICAqIFJldHVybiB2YWx1ZToKICAqIEVpdGhlciBOVUxMIG9yIGEgcG9pbnRlciB0byB0aGUgU0NTSSBjb21tYW5kIHRoZSBjYWxsZXIgYmVjYW1lIG93bmVyIG9mLgogICovCi1zdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqc3JwX2NsYWltX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCitzdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqc3JwX2NsYWltX3JlcShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLAogCQkJCSAgICAgICBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwKIAkJCQkgICAgICAgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAogCQkJCSAgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOwogCWlmIChyZXEtPnNjbW5kICYmCiAJICAgICghc2RldiB8fCByZXEtPnNjbW5kLT5kZXZpY2UgPT0gc2RldikgJiYKIAkgICAgKCFzY21uZCB8fCByZXEtPnNjbW5kID09IHNjbW5kKSkgewpAQCAtMTA0Myw0MCArMTEyMiwzNyBAQAogCX0gZWxzZSB7CiAJCXNjbW5kID0gTlVMTDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBzY21uZDsKIH0KIAogLyoqCiAgKiBzcnBfZnJlZV9yZXEoKSAtIFVubWFwIGRhdGEgYW5kIGFkZCByZXF1ZXN0IHRvIHRoZSBmcmVlIHJlcXVlc3QgbGlzdC4KLSAqIEB0YXJnZXQ6IFNSUCB0YXJnZXQgcG9ydC4KKyAqIEBjaDogICAgIFNSUCBSRE1BIGNoYW5uZWwuCiAgKiBAcmVxOiAgICBSZXF1ZXN0IHRvIGJlIGZyZWVkLgogICogQHNjbW5kOiAgU0NTSSBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCBAcmVxLgogICogQHJlcV9saW1fZGVsdGE6IEFtb3VudCB0byBiZSBhZGRlZCB0byBAdGFyZ2V0LT5yZXFfbGltLgogICovCi1zdGF0aWMgdm9pZCBzcnBfZnJlZV9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAotCQkJIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwKLQkJCSBzMzIgcmVxX2xpbV9kZWx0YSkKK3N0YXRpYyB2b2lkIHNycF9mcmVlX3JlcShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwKKwkJCSBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwgczMyIHJlcV9saW1fZGVsdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNycF91bm1hcF9kYXRhKHNjbW5kLCB0YXJnZXQsIHJlcSk7CisJc3JwX3VubWFwX2RhdGEoc2NtbmQsIGNoLCByZXEpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwotCXRhcmdldC0+cmVxX2xpbSArPSByZXFfbGltX2RlbHRhOwotCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJnRhcmdldC0+ZnJlZV9yZXFzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwljaC0+cmVxX2xpbSArPSByZXFfbGltX2RlbHRhOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNycF9maW5pc2hfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKLQkJCSAgIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkgICBpbnQgcmVzdWx0KQorc3RhdGljIHZvaWQgc3JwX2ZpbmlzaF9yZXEoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsCisJCQkgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCByZXN1bHQpCiB7Ci0Jc3RydWN0IHNjc2lfY21uZCAqc2NtbmQgPSBzcnBfY2xhaW1fcmVxKHRhcmdldCwgcmVxLCBzZGV2LCBOVUxMKTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCA9IHNycF9jbGFpbV9yZXEoY2gsIHJlcSwgc2RldiwgTlVMTCk7CiAKIAlpZiAoc2NtbmQpIHsKLQkJc3JwX2ZyZWVfcmVxKHRhcmdldCwgcmVxLCBzY21uZCwgMCk7CisJCXNycF9mcmVlX3JlcShjaCwgcmVxLCBzY21uZCwgMCk7CiAJCXNjbW5kLT5yZXN1bHQgPSByZXN1bHQ7CiAJCXNjbW5kLT5zY3NpX2RvbmUoc2NtbmQpOwogCX0KQEAgLTEwODUsOSArMTE2MSwxMCBAQAogc3RhdGljIHZvaWQgc3JwX3Rlcm1pbmF0ZV9pbyhzdHJ1Y3Qgc3JwX3Jwb3J0ICpycG9ydCkKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBycG9ydC0+bGxkX2RhdGE7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRhcmdldC0+c2NzaV9ob3N0OwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKLQlpbnQgaTsKKwlpbnQgaSwgajsKIAogCS8qCiAJICogSW52b2tpbmcgc3JwX3Rlcm1pbmF0ZV9pbygpIHdoaWxlIHNycF9xdWV1ZWNvbW1hbmQoKSBpcyBydW5uaW5nCkBAIC0xMDk2LDkgKzExNzMsMTUgQEAKIAlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2Rldiwgc2hvc3QpCiAJCVdBUk5fT05fT05DRShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5yZXF1ZXN0X2ZuX2FjdGl2ZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5yZXFfcmluZ19zaXplOyArK2kpIHsKLQkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1tpXTsKLQkJc3JwX2ZpbmlzaF9yZXEodGFyZ2V0LCByZXEsIE5VTEwsIERJRF9UUkFOU1BPUlRfRkFJTEZBU1QgPDwgMTYpOworCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKworCQlmb3IgKGogPSAwOyBqIDwgdGFyZ2V0LT5yZXFfcmluZ19zaXplOyArK2opIHsKKwkJCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxID0gJmNoLT5yZXFfcmluZ1tqXTsKKworCQkJc3JwX2ZpbmlzaF9yZXEoY2gsIHJlcSwgTlVMTCwKKwkJCQkgICAgICAgRElEX1RSQU5TUE9SVF9GQUlMRkFTVCA8PCAxNik7CisJCX0KIAl9CiB9CiAKQEAgLTExMTQsMzQgKzExOTcsNjEgQEAKIHN0YXRpYyBpbnQgc3JwX3Jwb3J0X3JlY29ubmVjdChzdHJ1Y3Qgc3JwX3Jwb3J0ICpycG9ydCkKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBycG9ydC0+bGxkX2RhdGE7Ci0JaW50IGksIHJldDsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoOworCWludCBpLCBqLCByZXQgPSAwOworCWJvb2wgbXVsdGljaCA9IGZhbHNlOwogCiAJc3JwX2Rpc2Nvbm5lY3RfdGFyZ2V0KHRhcmdldCk7CisKKwlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX1NDQU5OSU5HKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qCiAJICogTm93IGdldCBhIG5ldyBsb2NhbCBDTSBJRCBzbyB0aGF0IHdlIGF2b2lkIGNvbmZ1c2luZyB0aGUgdGFyZ2V0IGluCiAJICogY2FzZSB0aGluZ3MgYXJlIHJlYWxseSBmb3VsZWQgdXAuIERvaW5nIHNvIGFsc28gZW5zdXJlcyB0aGF0IGFsbCBDTQogCSAqIGNhbGxiYWNrcyB3aWxsIGhhdmUgZmluaXNoZWQgYmVmb3JlIGEgbmV3IFFQIGlzIGFsbG9jYXRlZC4KIAkgKi8KLQlyZXQgPSBzcnBfbmV3X2NtX2lkKHRhcmdldCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5yZXFfcmluZ19zaXplOyArK2kpIHsKLQkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1tpXTsKLQkJc3JwX2ZpbmlzaF9yZXEodGFyZ2V0LCByZXEsIE5VTEwsIERJRF9SRVNFVCA8PCAxNik7CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQlpZiAoIWNoLT50YXJnZXQpCisJCQlicmVhazsKKwkJcmV0ICs9IHNycF9uZXdfY21faWQoY2gpOwogCX0KKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCWlmICghY2gtPnRhcmdldCkKKwkJCWJyZWFrOworCQlmb3IgKGogPSAwOyBqIDwgdGFyZ2V0LT5yZXFfcmluZ19zaXplOyArK2opIHsKKwkJCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxID0gJmNoLT5yZXFfcmluZ1tqXTsKIAotCS8qCi0JICogV2hldGhlciBvciBub3QgY3JlYXRpbmcgYSBuZXcgQ00gSUQgc3VjY2VlZGVkLCBjcmVhdGUgYSBuZXcKLQkgKiBRUC4gVGhpcyBndWFyYW50ZWVzIHRoYXQgYWxsIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgdGhlIG9sZCBRUCBoYXZlCi0JICogZmluaXNoZWQgYmVmb3JlIGFueSBzZW5kIHJlcXVlc3RzIGFyZSBwb3N0ZWQgb24gdGhlIG5ldyBRUC4KLQkgKi8KLQlyZXQgKz0gc3JwX2NyZWF0ZV90YXJnZXRfaWIodGFyZ2V0KTsKKwkJCXNycF9maW5pc2hfcmVxKGNoLCByZXEsIE5VTEwsIERJRF9SRVNFVCA8PCAxNik7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQlpZiAoIWNoLT50YXJnZXQpCisJCQlicmVhazsKKwkJLyoKKwkJICogV2hldGhlciBvciBub3QgY3JlYXRpbmcgYSBuZXcgQ00gSUQgc3VjY2VlZGVkLCBjcmVhdGUgYSBuZXcKKwkJICogUVAuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFsbCBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uCisJCSAqIGludm9jYXRpb25zIGhhdmUgZmluaXNoZWQgYmVmb3JlIHJlcXVlc3QgcmVzZXR0aW5nIHN0YXJ0cy4KKwkJICovCisJCXJldCArPSBzcnBfY3JlYXRlX2NoX2liKGNoKTsKIAotCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPmZyZWVfdHgpOwotCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnF1ZXVlX3NpemU7ICsraSkKLQkJbGlzdF9hZGQoJnRhcmdldC0+dHhfcmluZ1tpXS0+bGlzdCwgJnRhcmdldC0+ZnJlZV90eCk7Ci0KLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHNycF9jb25uZWN0X3RhcmdldCh0YXJnZXQpOworCQlJTklUX0xJU1RfSEVBRCgmY2gtPmZyZWVfdHgpOworCQlmb3IgKGogPSAwOyBqIDwgdGFyZ2V0LT5xdWV1ZV9zaXplOyArK2opCisJCQlsaXN0X2FkZCgmY2gtPnR4X3Jpbmdbal0tPmxpc3QsICZjaC0+ZnJlZV90eCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJaWYgKHJldCB8fCAhY2gtPnRhcmdldCkgeworCQkJaWYgKGkgPiAxKQorCQkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBzcnBfY29ubmVjdF9jaChjaCwgbXVsdGljaCk7CisJCW11bHRpY2ggPSB0cnVlOworCX0KIAogCWlmIChyZXQgPT0gMCkKIAkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgdGFyZ2V0LT5zY3NpX2hvc3QsCkBAIC0xMTY1LDEyICsxMjc1LDEyIEBACiB9CiAKIHN0YXRpYyBpbnQgc3JwX21hcF9maW5pc2hfZm1yKHN0cnVjdCBzcnBfbWFwX3N0YXRlICpzdGF0ZSwKLQkJCSAgICAgIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKKwkJCSAgICAgIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CiAJc3RydWN0IGliX3Bvb2xfZm1yICpmbXI7CiAJdTY0IGlvX2FkZHIgPSAwOwogCi0JZm1yID0gaWJfZm1yX3Bvb2xfbWFwX3BoeXModGFyZ2V0LT5mbXJfcG9vbCwgc3RhdGUtPnBhZ2VzLAorCWZtciA9IGliX2Ztcl9wb29sX21hcF9waHlzKGNoLT5mbXJfcG9vbCwgc3RhdGUtPnBhZ2VzLAogCQkJCSAgIHN0YXRlLT5ucGFnZXMsIGlvX2FkZHIpOwogCWlmIChJU19FUlIoZm1yKSkKIAkJcmV0dXJuIFBUUl9FUlIoZm1yKTsKQEAgLTExODQsMTUgKzEyOTQsMTYgQEAKIH0KIAogc3RhdGljIGludCBzcnBfbWFwX2ZpbmlzaF9mcihzdHJ1Y3Qgc3JwX21hcF9zdGF0ZSAqc3RhdGUsCi0JCQkgICAgIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKKwkJCSAgICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzcnBfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCXN0cnVjdCBpYl9zZW5kX3dyICpiYWRfd3I7CiAJc3RydWN0IGliX3NlbmRfd3Igd3I7CiAJc3RydWN0IHNycF9mcl9kZXNjICpkZXNjOwogCXUzMiBya2V5OwogCi0JZGVzYyA9IHNycF9mcl9wb29sX2dldCh0YXJnZXQtPmZyX3Bvb2wpOworCWRlc2MgPSBzcnBfZnJfcG9vbF9nZXQoY2gtPmZyX3Bvb2wpOwogCWlmICghZGVzYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEyMjEsMTIgKzEzMzIsMTMgQEAKIAlzcnBfbWFwX2Rlc2Moc3RhdGUsIHN0YXRlLT5iYXNlX2RtYV9hZGRyLCBzdGF0ZS0+ZG1hX2xlbiwKIAkJICAgICBkZXNjLT5tci0+cmtleSk7CiAKLQlyZXR1cm4gaWJfcG9zdF9zZW5kKHRhcmdldC0+cXAsICZ3ciwgJmJhZF93cik7CisJcmV0dXJuIGliX3Bvc3Rfc2VuZChjaC0+cXAsICZ3ciwgJmJhZF93cik7CiB9CiAKIHN0YXRpYyBpbnQgc3JwX2ZpbmlzaF9tYXBwaW5nKHN0cnVjdCBzcnBfbWFwX3N0YXRlICpzdGF0ZSwKLQkJCSAgICAgIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKKwkJCSAgICAgIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChzdGF0ZS0+bnBhZ2VzID09IDApCkBAIC0xMjM3LDggKzEzNDksOCBAQAogCQkJICAgICB0YXJnZXQtPnJrZXkpOwogCWVsc2UKIAkJcmV0ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+dXNlX2Zhc3RfcmVnID8KLQkJCXNycF9tYXBfZmluaXNoX2ZyKHN0YXRlLCB0YXJnZXQpIDoKLQkJCXNycF9tYXBfZmluaXNoX2ZtcihzdGF0ZSwgdGFyZ2V0KTsKKwkJCXNycF9tYXBfZmluaXNoX2ZyKHN0YXRlLCBjaCkgOgorCQkJc3JwX21hcF9maW5pc2hfZm1yKHN0YXRlLCBjaCk7CiAKIAlpZiAocmV0ID09IDApIHsKIAkJc3RhdGUtPm5wYWdlcyA9IDA7CkBAIC0xMjU4LDEwICsxMzcwLDExIEBACiB9CiAKIHN0YXRpYyBpbnQgc3JwX21hcF9zZ19lbnRyeShzdHJ1Y3Qgc3JwX21hcF9zdGF0ZSAqc3RhdGUsCi0JCQkgICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorCQkJICAgIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsCiAJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IHNnX2luZGV4LAogCQkJICAgIGJvb2wgdXNlX21yKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXY7CiAJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBkZXYtPmRldjsKIAlkbWFfYWRkcl90IGRtYV9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoaWJkZXYsIHNnKTsKQEAgLTEyOTAsNyArMTQwMyw3IEBACiAJICovCiAJaWYgKCghZGV2LT51c2VfZmFzdF9yZWcgJiYgZG1hX2FkZHIgJiB+ZGV2LT5tcl9wYWdlX21hc2spIHx8CiAJICAgIGRtYV9sZW4gPiBkZXYtPm1yX21heF9zaXplKSB7Ci0JCXJldCA9IHNycF9maW5pc2hfbWFwcGluZyhzdGF0ZSwgdGFyZ2V0KTsKKwkJcmV0ID0gc3JwX2ZpbmlzaF9tYXBwaW5nKHN0YXRlLCBjaCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC0xMzExLDcgKzE0MjQsNyBAQAogCXdoaWxlIChkbWFfbGVuKSB7CiAJCXVuc2lnbmVkIG9mZnNldCA9IGRtYV9hZGRyICYgfmRldi0+bXJfcGFnZV9tYXNrOwogCQlpZiAoc3RhdGUtPm5wYWdlcyA9PSBkZXYtPm1heF9wYWdlc19wZXJfbXIgfHwgb2Zmc2V0ICE9IDApIHsKLQkJCXJldCA9IHNycF9maW5pc2hfbWFwcGluZyhzdGF0ZSwgdGFyZ2V0KTsKKwkJCXJldCA9IHNycF9maW5pc2hfbWFwcGluZyhzdGF0ZSwgY2gpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCkBAIC0xMzM1LDE3ICsxNDQ4LDE4IEBACiAJICovCiAJcmV0ID0gMDsKIAlpZiAobGVuICE9IGRldi0+bXJfcGFnZV9zaXplKSB7Ci0JCXJldCA9IHNycF9maW5pc2hfbWFwcGluZyhzdGF0ZSwgdGFyZ2V0KTsKKwkJcmV0ID0gc3JwX2ZpbmlzaF9tYXBwaW5nKHN0YXRlLCBjaCk7CiAJCWlmICghcmV0KQogCQkJc3JwX21hcF91cGRhdGVfc3RhcnQoc3RhdGUsIE5VTEwsIDAsIDApOwogCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNycF9tYXBfc2coc3RydWN0IHNycF9tYXBfc3RhdGUgKnN0YXRlLAotCQkgICAgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLAotCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgc3JwX21hcF9zZyhzdHJ1Y3Qgc3JwX21hcF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsCisJCSAgICAgIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQsCisJCSAgICAgIGludCBjb3VudCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzcnBfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gZGV2LT5kZXY7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKQEAgLTEzNTYsMTQgKzE0NzAsMTQgQEAKIAlzdGF0ZS0+cGFnZXMJPSByZXEtPm1hcF9wYWdlOwogCWlmIChkZXYtPnVzZV9mYXN0X3JlZykgewogCQlzdGF0ZS0+bmV4dF9mciA9IHJlcS0+ZnJfbGlzdDsKLQkJdXNlX21yID0gISF0YXJnZXQtPmZyX3Bvb2w7CisJCXVzZV9tciA9ICEhY2gtPmZyX3Bvb2w7CiAJfSBlbHNlIHsKIAkJc3RhdGUtPm5leHRfZm1yID0gcmVxLT5mbXJfbGlzdDsKLQkJdXNlX21yID0gISF0YXJnZXQtPmZtcl9wb29sOworCQl1c2VfbXIgPSAhIWNoLT5mbXJfcG9vbDsKIAl9CiAKIAlmb3JfZWFjaF9zZyhzY2F0LCBzZywgY291bnQsIGkpIHsKLQkJaWYgKHNycF9tYXBfc2dfZW50cnkoc3RhdGUsIHRhcmdldCwgc2csIGksIHVzZV9tcikpIHsKKwkJaWYgKHNycF9tYXBfc2dfZW50cnkoc3RhdGUsIGNoLCBzZywgaSwgdXNlX21yKSkgewogCQkJLyoKIAkJCSAqIE1lbW9yeSByZWdpc3RyYXRpb24gZmFpbGVkLCBzbyBiYWNrdHJhY2sgdG8gdGhlCiAJCQkgKiBmaXJzdCB1bm1hcHBlZCBlbnRyeSBhbmQgY29udGludWUgb24gd2l0aG91dCB1c2luZwpAQCAtMTM4NSw3ICsxNDk5LDcgQEAKIAkJfQogCX0KIAotCWlmICh1c2VfbXIgJiYgc3JwX2ZpbmlzaF9tYXBwaW5nKHN0YXRlLCB0YXJnZXQpKQorCWlmICh1c2VfbXIgJiYgc3JwX2ZpbmlzaF9tYXBwaW5nKHN0YXRlLCBjaCkpCiAJCWdvdG8gYmFja3RyYWNrOwogCiAJcmVxLT5ubWRlc2MgPSBzdGF0ZS0+bm1kZXNjOwpAQCAtMTM5Myw5ICsxNTA3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX21hcF9kYXRhKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLCBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCitzdGF0aWMgaW50IHNycF9tYXBfZGF0YShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwgc3RydWN0IHNycF9yZG1hX2NoICpjaCwKIAkJCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OwogCXN0cnVjdCBzcnBfY21kICpjbWQgPSByZXEtPmNtZC0+YnVmOwogCWludCBsZW4sIG5lbnRzLCBjb3VudDsKQEAgLTE0NTcsNyArMTU3Miw3IEBACiAJCQkJICAgdGFyZ2V0LT5pbmRpcmVjdF9zaXplLCBETUFfVE9fREVWSUNFKTsKIAogCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOwotCXNycF9tYXBfc2coJnN0YXRlLCB0YXJnZXQsIHJlcSwgc2NhdCwgY291bnQpOworCXNycF9tYXBfc2coJnN0YXRlLCBjaCwgcmVxLCBzY2F0LCBjb3VudCk7CiAKIAkvKiBXZSd2ZSBtYXBwZWQgdGhlIHJlcXVlc3QsIG5vdyBwdWxsIGFzIG11Y2ggb2YgdGhlIGluZGlyZWN0CiAJICogZGVzY3JpcHRvciB0YWJsZSBhcyB3ZSBjYW4gaW50byB0aGUgY29tbWFuZCBidWZmZXIuIElmIHRoaXMKQEAgLTE1MTgsMjAgKzE2MzMsMjAgQEAKIC8qCiAgKiBSZXR1cm4gYW4gSVUgYW5kIHBvc3NpYmxlIGNyZWRpdCB0byB0aGUgZnJlZSBwb29sCiAgKi8KLXN0YXRpYyB2b2lkIHNycF9wdXRfdHhfaXUoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc3JwX2l1ICppdSwKK3N0YXRpYyB2b2lkIHNycF9wdXRfdHhfaXUoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgc3RydWN0IHNycF9pdSAqaXUsCiAJCQkgIGVudW0gc3JwX2l1X3R5cGUgaXVfdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkKCZpdS0+bGlzdCwgJnRhcmdldC0+ZnJlZV90eCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJml1LT5saXN0LCAmY2gtPmZyZWVfdHgpOwogCWlmIChpdV90eXBlICE9IFNSUF9JVV9SU1ApCi0JCSsrdGFyZ2V0LT5yZXFfbGltOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCQkrK2NoLT5yZXFfbGltOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRhcmdldC0+bG9jayBoZWxkIHRvIHByb3RlY3QgcmVxX2xpbSBhbmQgZnJlZV90eC4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2gtPmxvY2sgaGVsZCB0byBwcm90ZWN0IHJlcV9saW0gYW5kIGZyZWVfdHguCiAgKiBJZiBJVSBpcyBub3Qgc2VudCwgaXQgbXVzdCBiZSByZXR1cm5lZCB1c2luZyBzcnBfcHV0X3R4X2l1KCkuCiAgKgogICogTm90ZToKQEAgLTE1NDMsMzUgKzE2NTgsMzYgQEAKICAqIC0gU1JQX0lVX1JTUDogMSwgc2luY2UgYSBjb25mb3JtaW5nIFNSUCB0YXJnZXQgbmV2ZXIgc2VuZHMgbW9yZSB0aGFuCiAgKiAgIG9uZSB1bmFuc3dlcmVkIFNSUCByZXF1ZXN0IHRvIGFuIGluaXRpYXRvci4KICAqLwotc3RhdGljIHN0cnVjdCBzcnBfaXUgKl9fc3JwX2dldF90eF9pdShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCitzdGF0aWMgc3RydWN0IHNycF9pdSAqX19zcnBfZ2V0X3R4X2l1KHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsCiAJCQkJICAgICAgZW51bSBzcnBfaXVfdHlwZSBpdV90eXBlKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJczMyIHJzdiA9IChpdV90eXBlID09IFNSUF9JVV9UU0tfTUdNVCkgPyAwIDogU1JQX1RTS19NR01UX1NRX1NJWkU7CiAJc3RydWN0IHNycF9pdSAqaXU7CiAKLQlzcnBfc2VuZF9jb21wbGV0aW9uKHRhcmdldC0+c2VuZF9jcSwgdGFyZ2V0KTsKKwlzcnBfc2VuZF9jb21wbGV0aW9uKGNoLT5zZW5kX2NxLCBjaCk7CiAKLQlpZiAobGlzdF9lbXB0eSgmdGFyZ2V0LT5mcmVlX3R4KSkKKwlpZiAobGlzdF9lbXB0eSgmY2gtPmZyZWVfdHgpKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIEluaXRpYXRvciByZXNwb25zZXMgdG8gdGFyZ2V0IHJlcXVlc3RzIGRvIG5vdCBjb25zdW1lIGNyZWRpdHMgKi8KIAlpZiAoaXVfdHlwZSAhPSBTUlBfSVVfUlNQKSB7Ci0JCWlmICh0YXJnZXQtPnJlcV9saW0gPD0gcnN2KSB7CisJCWlmIChjaC0+cmVxX2xpbSA8PSByc3YpIHsKIAkJCSsrdGFyZ2V0LT56ZXJvX3JlcV9saW07CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCi0JCS0tdGFyZ2V0LT5yZXFfbGltOworCQktLWNoLT5yZXFfbGltOwogCX0KIAotCWl1ID0gbGlzdF9maXJzdF9lbnRyeSgmdGFyZ2V0LT5mcmVlX3R4LCBzdHJ1Y3Qgc3JwX2l1LCBsaXN0KTsKKwlpdSA9IGxpc3RfZmlyc3RfZW50cnkoJmNoLT5mcmVlX3R4LCBzdHJ1Y3Qgc3JwX2l1LCBsaXN0KTsKIAlsaXN0X2RlbCgmaXUtPmxpc3QpOwogCXJldHVybiBpdTsKIH0KIAotc3RhdGljIGludCBzcnBfcG9zdF9zZW5kKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKLQkJCSBzdHJ1Y3Qgc3JwX2l1ICppdSwgaW50IGxlbikKK3N0YXRpYyBpbnQgc3JwX3Bvc3Rfc2VuZChzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBzdHJ1Y3Qgc3JwX2l1ICppdSwgaW50IGxlbikKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBpYl9zZ2UgbGlzdDsKIAlzdHJ1Y3QgaWJfc2VuZF93ciB3ciwgKmJhZF93cjsKIApAQCAtMTU4NiwxMSArMTcwMiwxMiBAQAogCXdyLm9wY29kZSAgICAgPSBJQl9XUl9TRU5EOwogCXdyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOwogCi0JcmV0dXJuIGliX3Bvc3Rfc2VuZCh0YXJnZXQtPnFwLCAmd3IsICZiYWRfd3IpOworCXJldHVybiBpYl9wb3N0X3NlbmQoY2gtPnFwLCAmd3IsICZiYWRfd3IpOwogfQogCi1zdGF0aWMgaW50IHNycF9wb3N0X3JlY3Yoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc3JwX2l1ICppdSkKK3N0YXRpYyBpbnQgc3JwX3Bvc3RfcmVjdihzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBzdHJ1Y3Qgc3JwX2l1ICppdSkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBpYl9yZWN2X3dyIHdyLCAqYmFkX3dyOwogCXN0cnVjdCBpYl9zZ2UgbGlzdDsKIApAQCAtMTYwMywzNSArMTcyMCwzOSBAQAogCXdyLnNnX2xpc3QgID0gJmxpc3Q7CiAJd3IubnVtX3NnZSAgPSAxOwogCi0JcmV0dXJuIGliX3Bvc3RfcmVjdih0YXJnZXQtPnFwLCAmd3IsICZiYWRfd3IpOworCXJldHVybiBpYl9wb3N0X3JlY3YoY2gtPnFwLCAmd3IsICZiYWRfd3IpOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfcHJvY2Vzc19yc3Aoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc3JwX3JzcCAqcnNwKQorc3RhdGljIHZvaWQgc3JwX3Byb2Nlc3NfcnNwKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHN0cnVjdCBzcnBfcnNwICpyc3ApCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHVubGlrZWx5KHJzcC0+dGFnICYgU1JQX1RBR19UU0tfTUdNVCkpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwotCQl0YXJnZXQtPnJlcV9saW0gKz0gYmUzMl90b19jcHUocnNwLT5yZXFfbGltX2RlbHRhKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOworCQljaC0+cmVxX2xpbSArPSBiZTMyX3RvX2NwdShyc3AtPnJlcV9saW1fZGVsdGEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOwogCi0JCXRhcmdldC0+dHNrX21nbXRfc3RhdHVzID0gLTE7CisJCWNoLT50c2tfbWdtdF9zdGF0dXMgPSAtMTsKIAkJaWYgKGJlMzJfdG9fY3B1KHJzcC0+cmVzcF9kYXRhX2xlbikgPj0gNCkKLQkJCXRhcmdldC0+dHNrX21nbXRfc3RhdHVzID0gcnNwLT5kYXRhWzNdOwotCQljb21wbGV0ZSgmdGFyZ2V0LT50c2tfbWdtdF9kb25lKTsKKwkJCWNoLT50c2tfbWdtdF9zdGF0dXMgPSByc3AtPmRhdGFbM107CisJCWNvbXBsZXRlKCZjaC0+dHNrX21nbXRfZG9uZSk7CiAJfSBlbHNlIHsKLQkJcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbcnNwLT50YWddOwotCQlzY21uZCA9IHNycF9jbGFpbV9yZXEodGFyZ2V0LCByZXEsIE5VTEwsIE5VTEwpOworCQlzY21uZCA9IHNjc2lfaG9zdF9maW5kX3RhZyh0YXJnZXQtPnNjc2lfaG9zdCwgcnNwLT50YWcpOworCQlpZiAoc2NtbmQpIHsKKwkJCXJlcSA9ICh2b2lkICopc2NtbmQtPmhvc3Rfc2NyaWJibGU7CisJCQlzY21uZCA9IHNycF9jbGFpbV9yZXEoY2gsIHJlcSwgTlVMTCwgc2NtbmQpOworCQl9CiAJCWlmICghc2NtbmQpIHsKIAkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCi0JCQkJICAgICAiTnVsbCBzY21uZCBmb3IgUlNQIHcvdGFnICUwMTZsbHhcbiIsCi0JCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSByc3AtPnRhZyk7CisJCQkJICAgICAiTnVsbCBzY21uZCBmb3IgUlNQIHcvdGFnICUjMDE2bGx4IHJlY2VpdmVkIG9uIGNoICV0ZCAvIFFQICUjeFxuIiwKKwkJCQkgICAgIHJzcC0+dGFnLCBjaCAtIHRhcmdldC0+Y2gsIGNoLT5xcC0+cXBfbnVtKTsKIAotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwotCQkJdGFyZ2V0LT5yZXFfbGltICs9IGJlMzJfdG9fY3B1KHJzcC0+cmVxX2xpbV9kZWx0YSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOworCQkJY2gtPnJlcV9saW0gKz0gYmUzMl90b19jcHUocnNwLT5yZXFfbGltX2RlbHRhKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBmbGFncyk7CiAKIAkJCXJldHVybjsKIAkJfQpAQCAtMTY1Myw3ICsxNzc0LDcgQEAKIAkJZWxzZSBpZiAodW5saWtlbHkocnNwLT5mbGFncyAmIFNSUF9SU1BfRkxBR19ET09WRVIpKQogCQkJc2NzaV9zZXRfcmVzaWQoc2NtbmQsIC1iZTMyX3RvX2NwdShyc3AtPmRhdGFfb3V0X3Jlc19jbnQpKTsKIAotCQlzcnBfZnJlZV9yZXEodGFyZ2V0LCByZXEsIHNjbW5kLAorCQlzcnBfZnJlZV9yZXEoY2gsIHJlcSwgc2NtbmQsCiAJCQkgICAgIGJlMzJfdG9fY3B1KHJzcC0+cmVxX2xpbV9kZWx0YSkpOwogCiAJCXNjbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKQEAgLTE2NjEsMTggKzE3ODIsMTkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc3JwX3Jlc3BvbnNlX2NvbW1vbihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHMzMiByZXFfZGVsdGEsCitzdGF0aWMgaW50IHNycF9yZXNwb25zZV9jb21tb24oc3RydWN0IHNycF9yZG1hX2NoICpjaCwgczMyIHJlcV9kZWx0YSwKIAkJCSAgICAgICB2b2lkICpyc3AsIGludCBsZW4pCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc3JwX2l1ICppdTsKIAlpbnQgZXJyOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwotCXRhcmdldC0+cmVxX2xpbSArPSByZXFfZGVsdGE7Ci0JaXUgPSBfX3NycF9nZXRfdHhfaXUodGFyZ2V0LCBTUlBfSVVfUlNQKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwljaC0+cmVxX2xpbSArPSByZXFfZGVsdGE7CisJaXUgPSBfX3NycF9nZXRfdHhfaXUoY2gsIFNSUF9JVV9SU1ApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIWl1KSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWApAQCAtMTY4NCwxNyArMTgwNiwxNyBAQAogCW1lbWNweShpdS0+YnVmLCByc3AsIGxlbik7CiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBpdS0+ZG1hLCBsZW4sIERNQV9UT19ERVZJQ0UpOwogCi0JZXJyID0gc3JwX3Bvc3Rfc2VuZCh0YXJnZXQsIGl1LCBsZW4pOworCWVyciA9IHNycF9wb3N0X3NlbmQoY2gsIGl1LCBsZW4pOwogCWlmIChlcnIpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCiAJCQkgICAgICJ1bmFibGUgdG8gcG9zdCByZXNwb25zZTogJWRcbiIsIGVycik7Ci0JCXNycF9wdXRfdHhfaXUodGFyZ2V0LCBpdSwgU1JQX0lVX1JTUCk7CisJCXNycF9wdXRfdHhfaXUoY2gsIGl1LCBTUlBfSVVfUlNQKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfcHJvY2Vzc19jcmVkX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCitzdGF0aWMgdm9pZCBzcnBfcHJvY2Vzc19jcmVkX3JlcShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLAogCQkJCSBzdHJ1Y3Qgc3JwX2NyZWRfcmVxICpyZXEpCiB7CiAJc3RydWN0IHNycF9jcmVkX3JzcCByc3AgPSB7CkBAIC0xNzAzLDE0ICsxODI1LDE1IEBACiAJfTsKIAlzMzIgZGVsdGEgPSBiZTMyX3RvX2NwdShyZXEtPnJlcV9saW1fZGVsdGEpOwogCi0JaWYgKHNycF9yZXNwb25zZV9jb21tb24odGFyZ2V0LCBkZWx0YSwgJnJzcCwgc2l6ZW9mIHJzcCkpCi0JCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAorCWlmIChzcnBfcmVzcG9uc2VfY29tbW9uKGNoLCBkZWx0YSwgJnJzcCwgc2l6ZW9mKHJzcCkpKQorCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGNoLT50YXJnZXQtPnNjc2lfaG9zdCwgUEZYCiAJCQkgICAgICJwcm9ibGVtcyBwcm9jZXNzaW5nIFNSUF9DUkVEX1JFUVxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNycF9wcm9jZXNzX2Flcl9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorc3RhdGljIHZvaWQgc3JwX3Byb2Nlc3NfYWVyX3JlcShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLAogCQkJCXN0cnVjdCBzcnBfYWVyX3JlcSAqcmVxKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9hZXJfcnNwIHJzcCA9IHsKIAkJLm9wY29kZSA9IFNSUF9BRVJfUlNQLAogCQkudGFnID0gcmVxLT50YWcsCkBAIC0xNzIwLDE5ICsxODQzLDIwIEBACiAJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCiAJCSAgICAgImlnbm9yaW5nIEFFUiBmb3IgTFVOICVsbHVcbiIsIGJlNjRfdG9fY3B1KHJlcS0+bHVuKSk7CiAKLQlpZiAoc3JwX3Jlc3BvbnNlX2NvbW1vbih0YXJnZXQsIGRlbHRhLCAmcnNwLCBzaXplb2YgcnNwKSkKKwlpZiAoc3JwX3Jlc3BvbnNlX2NvbW1vbihjaCwgZGVsdGEsICZyc3AsIHNpemVvZihyc3ApKSkKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCiAJCQkgICAgICJwcm9ibGVtcyBwcm9jZXNzaW5nIFNSUF9BRVJfUkVRXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgc3JwX2hhbmRsZV9yZWN2KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IGliX3djICp3YykKK3N0YXRpYyB2b2lkIHNycF9oYW5kbGVfcmVjdihzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBzdHJ1Y3QgaWJfd2MgKndjKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IGliX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2OwogCXN0cnVjdCBzcnBfaXUgKml1ID0gKHN0cnVjdCBzcnBfaXUgKikgKHVpbnRwdHJfdCkgd2MtPndyX2lkOwogCWludCByZXM7CiAJdTggb3Bjb2RlOwogCi0JaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBpdS0+ZG1hLCB0YXJnZXQtPm1heF90aV9pdV9sZW4sCisJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBpdS0+ZG1hLCBjaC0+bWF4X3RpX2l1X2xlbiwKIAkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOwogCiAJb3Bjb2RlID0gKih1OCAqKSBpdS0+YnVmOwpAQCAtMTc0NiwxNSArMTg3MCwxNSBAQAogCiAJc3dpdGNoIChvcGNvZGUpIHsKIAljYXNlIFNSUF9SU1A6Ci0JCXNycF9wcm9jZXNzX3JzcCh0YXJnZXQsIGl1LT5idWYpOworCQlzcnBfcHJvY2Vzc19yc3AoY2gsIGl1LT5idWYpOwogCQlicmVhazsKIAogCWNhc2UgU1JQX0NSRURfUkVROgotCQlzcnBfcHJvY2Vzc19jcmVkX3JlcSh0YXJnZXQsIGl1LT5idWYpOworCQlzcnBfcHJvY2Vzc19jcmVkX3JlcShjaCwgaXUtPmJ1Zik7CiAJCWJyZWFrOwogCiAJY2FzZSBTUlBfQUVSX1JFUToKLQkJc3JwX3Byb2Nlc3NfYWVyX3JlcSh0YXJnZXQsIGl1LT5idWYpOworCQlzcnBfcHJvY2Vzc19hZXJfcmVxKGNoLCBpdS0+YnVmKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNSUF9UX0xPR09VVDoKQEAgLTE3NjksMTAgKzE4OTMsMTAgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBpdS0+ZG1hLCB0YXJnZXQtPm1heF90aV9pdV9sZW4sCisJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBpdS0+ZG1hLCBjaC0+bWF4X3RpX2l1X2xlbiwKIAkJCQkgICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCi0JcmVzID0gc3JwX3Bvc3RfcmVjdih0YXJnZXQsIGl1KTsKKwlyZXMgPSBzcnBfcG9zdF9yZWN2KGNoLCBpdSk7CiAJaWYgKHJlcyAhPSAwKQogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAogCQkJICAgICBQRlggIlJlY3YgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmVzKTsKQEAgLTE3OTUsOCArMTkxOSwxNSBAQAogfQogCiBzdGF0aWMgdm9pZCBzcnBfaGFuZGxlX3FwX2Vycih1NjQgd3JfaWQsIGVudW0gaWJfd2Nfc3RhdHVzIHdjX3N0YXR1cywKLQkJCSAgICAgIGJvb2wgc2VuZF9lcnIsIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKKwkJCSAgICAgIGJvb2wgc2VuZF9lcnIsIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKKworCWlmICh3cl9pZCA9PSBTUlBfTEFTVF9XUl9JRCkgeworCQljb21wbGV0ZSgmY2gtPmRvbmUpOworCQlyZXR1cm47CisJfQorCiAJaWYgKHRhcmdldC0+Y29ubmVjdGVkICYmICF0YXJnZXQtPnFwX2luX2Vycm9yKSB7CiAJCWlmICh3cl9pZCAmIExPQ0FMX0lOVl9XUl9JRF9NQVNLKSB7CiAJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKQEAgLTE4MTcsMzMgKzE5NDgsMzMgQEAKIAl0YXJnZXQtPnFwX2luX2Vycm9yID0gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgc3JwX3JlY3ZfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKQorc3RhdGljIHZvaWQgc3JwX3JlY3ZfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjaF9wdHIpCiB7Ci0Jc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gdGFyZ2V0X3B0cjsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoID0gY2hfcHRyOwogCXN0cnVjdCBpYl93YyB3YzsKIAogCWliX3JlcV9ub3RpZnlfY3EoY3EsIElCX0NRX05FWFRfQ09NUCk7CiAJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CiAJCWlmIChsaWtlbHkod2Muc3RhdHVzID09IElCX1dDX1NVQ0NFU1MpKSB7Ci0JCQlzcnBfaGFuZGxlX3JlY3YodGFyZ2V0LCAmd2MpOworCQkJc3JwX2hhbmRsZV9yZWN2KGNoLCAmd2MpOwogCQl9IGVsc2UgewotCQkJc3JwX2hhbmRsZV9xcF9lcnIod2Mud3JfaWQsIHdjLnN0YXR1cywgZmFsc2UsIHRhcmdldCk7CisJCQlzcnBfaGFuZGxlX3FwX2Vycih3Yy53cl9pZCwgd2Muc3RhdHVzLCBmYWxzZSwgY2gpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzcnBfc2VuZF9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKnRhcmdldF9wdHIpCitzdGF0aWMgdm9pZCBzcnBfc2VuZF9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNoX3B0cikKIHsKLQlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSB0YXJnZXRfcHRyOworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2ggPSBjaF9wdHI7CiAJc3RydWN0IGliX3djIHdjOwogCXN0cnVjdCBzcnBfaXUgKml1OwogCiAJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CiAJCWlmIChsaWtlbHkod2Muc3RhdHVzID09IElCX1dDX1NVQ0NFU1MpKSB7CiAJCQlpdSA9IChzdHJ1Y3Qgc3JwX2l1ICopICh1aW50cHRyX3QpIHdjLndyX2lkOwotCQkJbGlzdF9hZGQoJml1LT5saXN0LCAmdGFyZ2V0LT5mcmVlX3R4KTsKKwkJCWxpc3RfYWRkKCZpdS0+bGlzdCwgJmNoLT5mcmVlX3R4KTsKIAkJfSBlbHNlIHsKLQkJCXNycF9oYW5kbGVfcXBfZXJyKHdjLndyX2lkLCB3Yy5zdGF0dXMsIHRydWUsIHRhcmdldCk7CisJCQlzcnBfaGFuZGxlX3FwX2Vycih3Yy53cl9pZCwgd2Muc3RhdHVzLCB0cnVlLCBjaCk7CiAJCX0KIAl9CiB9CkBAIC0xODUyLDExICsxOTgzLDE0IEBACiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoc2hvc3QpOwogCXN0cnVjdCBzcnBfcnBvcnQgKnJwb3J0ID0gdGFyZ2V0LT5ycG9ydDsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoOwogCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBzcnBfaXUgKml1OwogCXN0cnVjdCBzcnBfY21kICpjbWQ7CiAJc3RydWN0IGliX2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRhZzsKKwl1MTYgaWR4OwogCWludCBsZW4sIHJldDsKIAljb25zdCBib29sIGluX3Njc2lfZWggPSAhaW5faW50ZXJydXB0KCkgJiYgY3VycmVudCA9PSBzaG9zdC0+ZWhhbmRsZXI7CiAKQEAgLTE4NzMsMTUgKzIwMDcsMjIgQEAKIAlpZiAodW5saWtlbHkoc2NtbmQtPnJlc3VsdCkpCiAJCWdvdG8gZXJyOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwotCWl1ID0gX19zcnBfZ2V0X3R4X2l1KHRhcmdldCwgU1JQX0lVX0NNRCk7CisJV0FSTl9PTl9PTkNFKHNjbW5kLT5yZXF1ZXN0LT50YWcgPCAwKTsKKwl0YWcgPSBibGtfbXFfdW5pcXVlX3RhZyhzY21uZC0+cmVxdWVzdCk7CisJY2ggPSAmdGFyZ2V0LT5jaFtibGtfbXFfdW5pcXVlX3RhZ190b19od3EodGFnKV07CisJaWR4ID0gYmxrX21xX3VuaXF1ZV90YWdfdG9fdGFnKHRhZyk7CisJV0FSTl9PTkNFKGlkeCA+PSB0YXJnZXQtPnJlcV9yaW5nX3NpemUsICIlczogdGFnICUjeDogaWR4ICVkID49ICVkXG4iLAorCQkgIGRldl9uYW1lKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KSwgdGFnLCBpZHgsCisJCSAgdGFyZ2V0LT5yZXFfcmluZ19zaXplKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOworCWl1ID0gX19zcnBfZ2V0X3R4X2l1KGNoLCBTUlBfSVVfQ01EKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOworCiAJaWYgKCFpdSkKLQkJZ290byBlcnJfdW5sb2NrOworCQlnb3RvIGVycjsKIAotCXJlcSA9IGxpc3RfZmlyc3RfZW50cnkoJnRhcmdldC0+ZnJlZV9yZXFzLCBzdHJ1Y3Qgc3JwX3JlcXVlc3QsIGxpc3QpOwotCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwotCisJcmVxID0gJmNoLT5yZXFfcmluZ1tpZHhdOwogCWRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldjsKIAlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGl1LT5kbWEsIHRhcmdldC0+bWF4X2l1X2xlbiwKIAkJCQkgICBETUFfVE9fREVWSUNFKTsKQEAgLTE4OTMsMTMgKzIwMzQsMTMgQEAKIAogCWNtZC0+b3Bjb2RlID0gU1JQX0NNRDsKIAljbWQtPmx1biAgICA9IGNwdV90b19iZTY0KCh1NjQpIHNjbW5kLT5kZXZpY2UtPmx1biA8PCA0OCk7Ci0JY21kLT50YWcgICAgPSByZXEtPmluZGV4OworCWNtZC0+dGFnICAgID0gdGFnOwogCW1lbWNweShjbWQtPmNkYiwgc2NtbmQtPmNtbmQsIHNjbW5kLT5jbWRfbGVuKTsKIAogCXJlcS0+c2NtbmQgICAgPSBzY21uZDsKIAlyZXEtPmNtZCAgICAgID0gaXU7CiAKLQlsZW4gPSBzcnBfbWFwX2RhdGEoc2NtbmQsIHRhcmdldCwgcmVxKTsKKwlsZW4gPSBzcnBfbWFwX2RhdGEoc2NtbmQsIGNoLCByZXEpOwogCWlmIChsZW4gPCAwKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCiAJCQkgICAgIFBGWCAiRmFpbGVkIHRvIG1hcCBkYXRhICglZClcbiIsIGxlbik7CkBAIC0xOTE3LDcgKzIwNTgsNyBAQAogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgaXUtPmRtYSwgdGFyZ2V0LT5tYXhfaXVfbGVuLAogCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwogCi0JaWYgKHNycF9wb3N0X3NlbmQodGFyZ2V0LCBpdSwgbGVuKSkgeworCWlmIChzcnBfcG9zdF9zZW5kKGNoLCBpdSwgbGVuKSkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlggIlNlbmQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfdW5tYXA7CiAJfQpAQCAtMTkzMSwxMCArMjA3MiwxMCBAQAogCXJldHVybiByZXQ7CiAKIGVycl91bm1hcDoKLQlzcnBfdW5tYXBfZGF0YShzY21uZCwgdGFyZ2V0LCByZXEpOworCXNycF91bm1hcF9kYXRhKHNjbW5kLCBjaCwgcmVxKTsKIAogZXJyX2l1OgotCXNycF9wdXRfdHhfaXUodGFyZ2V0LCBpdSwgU1JQX0lVX0NNRCk7CisJc3JwX3B1dF90eF9pdShjaCwgaXUsIFNSUF9JVV9DTUQpOwogCiAJLyoKIAkgKiBBdm9pZCB0aGF0IHRoZSBsb29wcyB0aGF0IGl0ZXJhdGUgb3ZlciB0aGUgcmVxdWVzdCByaW5nIGNhbgpAQCAtMTk0MiwxMiArMjA4Myw2IEBACiAJICovCiAJcmVxLT5zY21uZCA9IE5VTEw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGQoJnJlcS0+bGlzdCwgJnRhcmdldC0+ZnJlZV9yZXFzKTsKLQotZXJyX3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKLQogZXJyOgogCWlmIChzY21uZC0+cmVzdWx0KSB7CiAJCXNjbW5kLT5zY3NpX2RvbmUoc2NtbmQpOwpAQCAtMTk2MSw1MyArMjA5Niw1NCBAQAogCiAvKgogICogTm90ZTogdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gdGhpcyBmdW5jdGlvbiBhcmUgZnJlZWQgaW4KLSAqIHNycF9mcmVlX3RhcmdldF9pYigpLgorICogc3JwX2ZyZWVfY2hfaWIoKS4KICAqLwotc3RhdGljIGludCBzcnBfYWxsb2NfaXVfYnVmcyhzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCitzdGF0aWMgaW50IHNycF9hbGxvY19pdV9idWZzKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlpbnQgaTsKIAotCXRhcmdldC0+cnhfcmluZyA9IGt6YWxsb2ModGFyZ2V0LT5xdWV1ZV9zaXplICogc2l6ZW9mKCp0YXJnZXQtPnJ4X3JpbmcpLAotCQkJCSAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0YXJnZXQtPnJ4X3JpbmcpCisJY2gtPnJ4X3JpbmcgPSBrY2FsbG9jKHRhcmdldC0+cXVldWVfc2l6ZSwgc2l6ZW9mKCpjaC0+cnhfcmluZyksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoLT5yeF9yaW5nKQogCQlnb3RvIGVycl9ub19yaW5nOwotCXRhcmdldC0+dHhfcmluZyA9IGt6YWxsb2ModGFyZ2V0LT5xdWV1ZV9zaXplICogc2l6ZW9mKCp0YXJnZXQtPnR4X3JpbmcpLAotCQkJCSAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0YXJnZXQtPnR4X3JpbmcpCisJY2gtPnR4X3JpbmcgPSBrY2FsbG9jKHRhcmdldC0+cXVldWVfc2l6ZSwgc2l6ZW9mKCpjaC0+dHhfcmluZyksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoLT50eF9yaW5nKQogCQlnb3RvIGVycl9ub19yaW5nOwogCiAJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cXVldWVfc2l6ZTsgKytpKSB7Ci0JCXRhcmdldC0+cnhfcmluZ1tpXSA9IHNycF9hbGxvY19pdSh0YXJnZXQtPnNycF9ob3N0LAotCQkJCQkJICB0YXJnZXQtPm1heF90aV9pdV9sZW4sCi0JCQkJCQkgIEdGUF9LRVJORUwsIERNQV9GUk9NX0RFVklDRSk7Ci0JCWlmICghdGFyZ2V0LT5yeF9yaW5nW2ldKQorCQljaC0+cnhfcmluZ1tpXSA9IHNycF9hbGxvY19pdSh0YXJnZXQtPnNycF9ob3N0LAorCQkJCQkgICAgICBjaC0+bWF4X3RpX2l1X2xlbiwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCwgRE1BX0ZST01fREVWSUNFKTsKKwkJaWYgKCFjaC0+cnhfcmluZ1tpXSkKIAkJCWdvdG8gZXJyOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnF1ZXVlX3NpemU7ICsraSkgewotCQl0YXJnZXQtPnR4X3JpbmdbaV0gPSBzcnBfYWxsb2NfaXUodGFyZ2V0LT5zcnBfaG9zdCwKLQkJCQkJCSAgdGFyZ2V0LT5tYXhfaXVfbGVuLAotCQkJCQkJICBHRlBfS0VSTkVMLCBETUFfVE9fREVWSUNFKTsKLQkJaWYgKCF0YXJnZXQtPnR4X3JpbmdbaV0pCisJCWNoLT50eF9yaW5nW2ldID0gc3JwX2FsbG9jX2l1KHRhcmdldC0+c3JwX2hvc3QsCisJCQkJCSAgICAgIHRhcmdldC0+bWF4X2l1X2xlbiwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCwgRE1BX1RPX0RFVklDRSk7CisJCWlmICghY2gtPnR4X3JpbmdbaV0pCiAJCQlnb3RvIGVycjsKIAotCQlsaXN0X2FkZCgmdGFyZ2V0LT50eF9yaW5nW2ldLT5saXN0LCAmdGFyZ2V0LT5mcmVlX3R4KTsKKwkJbGlzdF9hZGQoJmNoLT50eF9yaW5nW2ldLT5saXN0LCAmY2gtPmZyZWVfdHgpOwogCX0KIAogCXJldHVybiAwOwogCiBlcnI6CiAJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cXVldWVfc2l6ZTsgKytpKSB7Ci0JCXNycF9mcmVlX2l1KHRhcmdldC0+c3JwX2hvc3QsIHRhcmdldC0+cnhfcmluZ1tpXSk7Ci0JCXNycF9mcmVlX2l1KHRhcmdldC0+c3JwX2hvc3QsIHRhcmdldC0+dHhfcmluZ1tpXSk7CisJCXNycF9mcmVlX2l1KHRhcmdldC0+c3JwX2hvc3QsIGNoLT5yeF9yaW5nW2ldKTsKKwkJc3JwX2ZyZWVfaXUodGFyZ2V0LT5zcnBfaG9zdCwgY2gtPnR4X3JpbmdbaV0pOwogCX0KIAogCiBlcnJfbm9fcmluZzoKLQlrZnJlZSh0YXJnZXQtPnR4X3JpbmcpOwotCXRhcmdldC0+dHhfcmluZyA9IE5VTEw7Ci0Ja2ZyZWUodGFyZ2V0LT5yeF9yaW5nKTsKLQl0YXJnZXQtPnJ4X3JpbmcgPSBOVUxMOworCWtmcmVlKGNoLT50eF9yaW5nKTsKKwljaC0+dHhfcmluZyA9IE5VTEw7CisJa2ZyZWUoY2gtPnJ4X3JpbmcpOworCWNoLT5yeF9yaW5nID0gTlVMTDsKIAogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtMjA0MSwyMyArMjE3NywyNCBAQAogCiBzdGF0aWMgdm9pZCBzcnBfY21fcmVwX2hhbmRsZXIoc3RydWN0IGliX2NtX2lkICpjbV9pZCwKIAkJCSAgICAgICBzdHJ1Y3Qgc3JwX2xvZ2luX3JzcCAqbHJzcCwKLQkJCSAgICAgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCisJCQkgICAgICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBpYl9xcF9hdHRyICpxcF9hdHRyID0gTlVMTDsKIAlpbnQgYXR0cl9tYXNrID0gMDsKIAlpbnQgcmV0OwogCWludCBpOwogCiAJaWYgKGxyc3AtPm9wY29kZSA9PSBTUlBfTE9HSU5fUlNQKSB7Ci0JCXRhcmdldC0+bWF4X3RpX2l1X2xlbiA9IGJlMzJfdG9fY3B1KGxyc3AtPm1heF90aV9pdV9sZW4pOwotCQl0YXJnZXQtPnJlcV9saW0gICAgICAgPSBiZTMyX3RvX2NwdShscnNwLT5yZXFfbGltX2RlbHRhKTsKKwkJY2gtPm1heF90aV9pdV9sZW4gPSBiZTMyX3RvX2NwdShscnNwLT5tYXhfdGlfaXVfbGVuKTsKKwkJY2gtPnJlcV9saW0gICAgICAgPSBiZTMyX3RvX2NwdShscnNwLT5yZXFfbGltX2RlbHRhKTsKIAogCQkvKgogCQkgKiBSZXNlcnZlIGNyZWRpdHMgZm9yIHRhc2sgbWFuYWdlbWVudCBzbyB3ZSBkb24ndAogCQkgKiBib3VuY2UgcmVxdWVzdHMgYmFjayB0byB0aGUgU0NTSSBtaWQtbGF5ZXIuCiAJCSAqLwogCQl0YXJnZXQtPnNjc2lfaG9zdC0+Y2FuX3F1ZXVlCi0JCQk9IG1pbih0YXJnZXQtPnJlcV9saW0gLSBTUlBfVFNLX01HTVRfU1FfU0laRSwKKwkJCT0gbWluKGNoLT5yZXFfbGltIC0gU1JQX1RTS19NR01UX1NRX1NJWkUsCiAJCQkgICAgICB0YXJnZXQtPnNjc2lfaG9zdC0+Y2FuX3F1ZXVlKTsKIAkJdGFyZ2V0LT5zY3NpX2hvc3QtPmNtZF9wZXJfbHVuCiAJCQk9IG1pbl90KGludCwgdGFyZ2V0LT5zY3NpX2hvc3QtPmNhbl9xdWV1ZSwKQEAgLTIwNjksOCArMjIwNiw4IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JaWYgKCF0YXJnZXQtPnJ4X3JpbmcpIHsKLQkJcmV0ID0gc3JwX2FsbG9jX2l1X2J1ZnModGFyZ2V0KTsKKwlpZiAoIWNoLT5yeF9yaW5nKSB7CisJCXJldCA9IHNycF9hbGxvY19pdV9idWZzKGNoKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMjA4NSwxMyArMjIyMiwxNCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZnJlZTsKIAotCXJldCA9IGliX21vZGlmeV9xcCh0YXJnZXQtPnFwLCBxcF9hdHRyLCBhdHRyX21hc2spOworCXJldCA9IGliX21vZGlmeV9xcChjaC0+cXAsIHFwX2F0dHIsIGF0dHJfbWFzayk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlOwogCiAJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cXVldWVfc2l6ZTsgaSsrKSB7Ci0JCXN0cnVjdCBzcnBfaXUgKml1ID0gdGFyZ2V0LT5yeF9yaW5nW2ldOwotCQlyZXQgPSBzcnBfcG9zdF9yZWN2KHRhcmdldCwgaXUpOworCQlzdHJ1Y3Qgc3JwX2l1ICppdSA9IGNoLT5yeF9yaW5nW2ldOworCisJCXJldCA9IHNycF9wb3N0X3JlY3YoY2gsIGl1KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3JfZnJlZTsKIAl9CkBAIC0yMTAzLDcgKzIyNDEsNyBAQAogCiAJdGFyZ2V0LT5ycV90bW9famlmZmllcyA9IHNycF9jb21wdXRlX3JxX3RtbyhxcF9hdHRyLCBhdHRyX21hc2spOwogCi0JcmV0ID0gaWJfbW9kaWZ5X3FwKHRhcmdldC0+cXAsIHFwX2F0dHIsIGF0dHJfbWFzayk7CisJcmV0ID0gaWJfbW9kaWZ5X3FwKGNoLT5xcCwgcXBfYXR0ciwgYXR0cl9tYXNrKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX2ZyZWU7CiAKQEAgLTIxMTMsMTMgKzIyNTEsMTQgQEAKIAlrZnJlZShxcF9hdHRyKTsKIAogZXJyb3I6Ci0JdGFyZ2V0LT5zdGF0dXMgPSByZXQ7CisJY2gtPnN0YXR1cyA9IHJldDsKIH0KIAogc3RhdGljIHZvaWQgc3JwX2NtX3Jlal9oYW5kbGVyKHN0cnVjdCBpYl9jbV9pZCAqY21faWQsCiAJCQkgICAgICAgc3RydWN0IGliX2NtX2V2ZW50ICpldmVudCwKLQkJCSAgICAgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCisJCQkgICAgICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdGFyZ2V0LT5zY3NpX2hvc3Q7CiAJc3RydWN0IGliX2NsYXNzX3BvcnRfaW5mbyAqY3BpOwogCWludCBvcGNvZGU7CkBAIC0yMTI3LDEyICsyMjY2LDEyIEBACiAJc3dpdGNoIChldmVudC0+cGFyYW0ucmVqX3JjdmQucmVhc29uKSB7CiAJY2FzZSBJQl9DTV9SRUpfUE9SVF9DTV9SRURJUkVDVDoKIAkJY3BpID0gZXZlbnQtPnBhcmFtLnJlal9yY3ZkLmFyaTsKLQkJdGFyZ2V0LT5wYXRoLmRsaWQgPSBjcGktPnJlZGlyZWN0X2xpZDsKLQkJdGFyZ2V0LT5wYXRoLnBrZXkgPSBjcGktPnJlZGlyZWN0X3BrZXk7CisJCWNoLT5wYXRoLmRsaWQgPSBjcGktPnJlZGlyZWN0X2xpZDsKKwkJY2gtPnBhdGgucGtleSA9IGNwaS0+cmVkaXJlY3RfcGtleTsKIAkJY21faWQtPnJlbW90ZV9jbV9xcG4gPSBiZTMyX3RvX2NwdShjcGktPnJlZGlyZWN0X3FwKSAmIDB4MDBmZmZmZmY7Ci0JCW1lbWNweSh0YXJnZXQtPnBhdGguZGdpZC5yYXcsIGNwaS0+cmVkaXJlY3RfZ2lkLCAxNik7CisJCW1lbWNweShjaC0+cGF0aC5kZ2lkLnJhdywgY3BpLT5yZWRpcmVjdF9naWQsIDE2KTsKIAotCQl0YXJnZXQtPnN0YXR1cyA9IHRhcmdldC0+cGF0aC5kbGlkID8KKwkJY2gtPnN0YXR1cyA9IGNoLT5wYXRoLmRsaWQgPwogCQkJU1JQX0RMSURfUkVESVJFQ1QgOiBTUlBfUE9SVF9SRURJUkVDVDsKIAkJYnJlYWs7CiAKQEAgLTIxNDMsMjYgKzIyODIsMjYgQEAKIAkJCSAqIHJlamVjdCByZWFzb24gY29kZSAyNSB3aGVuIHRoZXkgbWVhbiAyNAogCQkJICogKHBvcnQgcmVkaXJlY3QpLgogCQkJICovCi0JCQltZW1jcHkodGFyZ2V0LT5wYXRoLmRnaWQucmF3LAorCQkJbWVtY3B5KGNoLT5wYXRoLmRnaWQucmF3LAogCQkJICAgICAgIGV2ZW50LT5wYXJhbS5yZWpfcmN2ZC5hcmksIDE2KTsKIAogCQkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIHNob3N0LAogCQkJCSAgICAgUEZYICJUb3BzcGluL0Npc2NvIHJlZGlyZWN0IHRvIHRhcmdldCBwb3J0IEdJRCAlMDE2bGx4JTAxNmxseFxuIiwKLQkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KHRhcmdldC0+cGF0aC5kZ2lkLmdsb2JhbC5zdWJuZXRfcHJlZml4KSwKLQkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KHRhcmdldC0+cGF0aC5kZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQpKTsKKwkJCQkgICAgIGJlNjRfdG9fY3B1KGNoLT5wYXRoLmRnaWQuZ2xvYmFsLnN1Ym5ldF9wcmVmaXgpLAorCQkJCSAgICAgYmU2NF90b19jcHUoY2gtPnBhdGguZGdpZC5nbG9iYWwuaW50ZXJmYWNlX2lkKSk7CiAKLQkJCXRhcmdldC0+c3RhdHVzID0gU1JQX1BPUlRfUkVESVJFQ1Q7CisJCQljaC0+c3RhdHVzID0gU1JQX1BPUlRfUkVESVJFQ1Q7CiAJCX0gZWxzZSB7CiAJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBzaG9zdCwKIAkJCQkgICAgICIgIFJFSiByZWFzb246IElCX0NNX1JFSl9QT1JUX1JFRElSRUNUXG4iKTsKLQkJCXRhcmdldC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCQljaC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIElCX0NNX1JFSl9EVVBMSUNBVEVfTE9DQUxfQ09NTV9JRDoKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgc2hvc3QsCiAJCQkgICAgIiAgUkVKIHJlYXNvbjogSUJfQ01fUkVKX0RVUExJQ0FURV9MT0NBTF9DT01NX0lEXG4iKTsKLQkJdGFyZ2V0LT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKKwkJY2gtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOwogCQlicmVhazsKIAogCWNhc2UgSUJfQ01fUkVKX0NPTlNVTUVSX0RFRklORUQ6CkBAIC0yMTc3LDMwICsyMzE2LDMxIEBACiAJCQllbHNlCiAJCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgc2hvc3QsIFBGWAogCQkJCQkgICAgICJTUlAgTE9HSU4gZnJvbSAlcEk2IHRvICVwSTYgUkVKRUNURUQsIHJlYXNvbiAweCUwOHhcbiIsCi0JCQkJCSAgICAgdGFyZ2V0LT5wYXRoLnNnaWQucmF3LAotCQkJCQkgICAgIHRhcmdldC0+b3JpZ19kZ2lkLCByZWFzb24pOworCQkJCQkgICAgIHRhcmdldC0+c2dpZC5yYXcsCisJCQkJCSAgICAgdGFyZ2V0LT5vcmlnX2RnaWQucmF3LCByZWFzb24pOwogCQl9IGVsc2UKIAkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNob3N0LAogCQkJCSAgICAgIiAgUkVKIHJlYXNvbjogSUJfQ01fUkVKX0NPTlNVTUVSX0RFRklORUQsIgogCQkJCSAgICAgIiBvcGNvZGUgMHglMDJ4XG4iLCBvcGNvZGUpOwotCQl0YXJnZXQtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQljaC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9DTV9SRUpfU1RBTEVfQ09OTjoKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgc2hvc3QsICIgIFJFSiByZWFzb246IHN0YWxlIGNvbm5lY3Rpb25cbiIpOwotCQl0YXJnZXQtPnN0YXR1cyA9IFNSUF9TVEFMRV9DT05OOworCQljaC0+c3RhdHVzID0gU1JQX1NUQUxFX0NPTk47CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgc2hvc3QsICIgIFJFSiByZWFzb24gMHgleFxuIiwKIAkJCSAgICAgZXZlbnQtPnBhcmFtLnJlal9yY3ZkLnJlYXNvbik7Ci0JCXRhcmdldC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCWNoLT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKIAl9CiB9CiAKIHN0YXRpYyBpbnQgc3JwX2NtX2hhbmRsZXIoc3RydWN0IGliX2NtX2lkICpjbV9pZCwgc3RydWN0IGliX2NtX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoID0gY21faWQtPmNvbnRleHQ7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlpbnQgY29tcCA9IDA7CiAKIAlzd2l0Y2ggKGV2ZW50LT5ldmVudCkgewpAQCAtMjIwOCwxOSArMjM0OCwxOSBAQAogCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgdGFyZ2V0LT5zY3NpX2hvc3QsCiAJCQkgICAgIFBGWCAiU2VuZGluZyBDTSBSRVEgZmFpbGVkXG4iKTsKIAkJY29tcCA9IDE7Ci0JCXRhcmdldC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCWNoLT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKIAkJYnJlYWs7CiAKIAljYXNlIElCX0NNX1JFUF9SRUNFSVZFRDoKIAkJY29tcCA9IDE7Ci0JCXNycF9jbV9yZXBfaGFuZGxlcihjbV9pZCwgZXZlbnQtPnByaXZhdGVfZGF0YSwgdGFyZ2V0KTsKKwkJc3JwX2NtX3JlcF9oYW5kbGVyKGNtX2lkLCBldmVudC0+cHJpdmF0ZV9kYXRhLCBjaCk7CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9DTV9SRUpfUkVDRUlWRUQ6CiAJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYICJSRUogcmVjZWl2ZWRcbiIpOwogCQljb21wID0gMTsKIAotCQlzcnBfY21fcmVqX2hhbmRsZXIoY21faWQsIGV2ZW50LCB0YXJnZXQpOworCQlzcnBfY21fcmVqX2hhbmRsZXIoY21faWQsIGV2ZW50LCBjaCk7CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9DTV9EUkVRX1JFQ0VJVkVEOgpAQCAtMjIzOCw3ICsyMzc4LDcgQEAKIAkJCSAgICAgUEZYICJjb25uZWN0aW9uIGNsb3NlZFxuIik7CiAJCWNvbXAgPSAxOwogCi0JCXRhcmdldC0+c3RhdHVzID0gMDsKKwkJY2gtPnN0YXR1cyA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9DTV9NUkFfUkVDRUlWRUQ6CkBAIC0yMjUzLDY1ICsyMzkzLDMwIEBACiAJfQogCiAJaWYgKGNvbXApCi0JCWNvbXBsZXRlKCZ0YXJnZXQtPmRvbmUpOworCQljb21wbGV0ZSgmY2gtPmRvbmUpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogc3JwX2NoYW5nZV9xdWV1ZV90eXBlIC0gY2hhbmdpbmcgZGV2aWNlIHF1ZXVlIHRhZyB0eXBlCi0gKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0Ci0gKiBAdGFnX3R5cGU6IHJlcXVlc3RlZCB0YWcgdHlwZQotICoKLSAqIFJldHVybnMgcXVldWUgdGFnIHR5cGUuCi0gKi8KLXN0YXRpYyBpbnQKLXNycF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKLXsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0JCWlmICh0YWdfdHlwZSkKLQkJCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JfSBlbHNlCi0JCXRhZ190eXBlID0gMDsKLQotCXJldHVybiB0YWdfdHlwZTsKLX0KLQotLyoqCiAgKiBzcnBfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gc2V0dGluZyBkZXZpY2UgcXVldWUgZGVwdGgKICAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKICAqIEBxZGVwdGg6IHJlcXVlc3RlZCBxdWV1ZSBkZXB0aAotICogQHJlYXNvbjogU0NTSV9RREVQVEhfREVGQVVMVC9TQ1NJX1FERVBUSF9RRlVMTC9TQ1NJX1FERVBUSF9SQU1QX1VQCi0gKiAoc2VlIGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBmb3IgZGVmaW5pdGlvbikKICAqCiAgKiBSZXR1cm5zIHF1ZXVlIGRlcHRoLgogICovCiBzdGF0aWMgaW50Ci1zcnBfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKK3NycF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKLQlpbnQgbWF4X2RlcHRoOwotCWlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfREVGQVVMVCB8fCByZWFzb24gPT0gU0NTSV9RREVQVEhfUkFNUF9VUCkgewotCQltYXhfZGVwdGggPSBzaG9zdC0+Y2FuX3F1ZXVlOwotCQlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCQltYXhfZGVwdGggPSAxOwotCQlpZiAocWRlcHRoID4gbWF4X2RlcHRoKQotCQkJcWRlcHRoID0gbWF4X2RlcHRoOwotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgcWRlcHRoKTsKLQl9IGVsc2UgaWYgKHJlYXNvbiA9PSBTQ1NJX1FERVBUSF9RRlVMTCkKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIHFkZXB0aCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CisJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQlxZGVwdGggPSAxOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCi1zdGF0aWMgaW50IHNycF9zZW5kX3Rza19tZ210KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKLQkJCSAgICAgdTY0IHJlcV90YWcsIHVuc2lnbmVkIGludCBsdW4sIHU4IGZ1bmMpCitzdGF0aWMgaW50IHNycF9zZW5kX3Rza19tZ210KHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHU2NCByZXFfdGFnLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbHVuLCB1OCBmdW5jKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9ycG9ydCAqcnBvcnQgPSB0YXJnZXQtPnJwb3J0OwogCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldjsKIAlzdHJ1Y3Qgc3JwX2l1ICppdTsKQEAgLTIzMjAsMTYgKzI0MjUsMTYgQEAKIAlpZiAoIXRhcmdldC0+Y29ubmVjdGVkIHx8IHRhcmdldC0+cXBfaW5fZXJyb3IpCiAJCXJldHVybiAtMTsKIAotCWluaXRfY29tcGxldGlvbigmdGFyZ2V0LT50c2tfbWdtdF9kb25lKTsKKwlpbml0X2NvbXBsZXRpb24oJmNoLT50c2tfbWdtdF9kb25lKTsKIAogCS8qCi0JICogTG9jayB0aGUgcnBvcnQgbXV0ZXggdG8gYXZvaWQgdGhhdCBzcnBfY3JlYXRlX3RhcmdldF9pYigpIGlzCisJICogTG9jayB0aGUgcnBvcnQgbXV0ZXggdG8gYXZvaWQgdGhhdCBzcnBfY3JlYXRlX2NoX2liKCkgaXMKIAkgKiBpbnZva2VkIHdoaWxlIGEgdGFzayBtYW5hZ2VtZW50IGZ1bmN0aW9uIGlzIGJlaW5nIHNlbnQuCiAJICovCiAJbXV0ZXhfbG9jaygmcnBvcnQtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxKCZ0YXJnZXQtPmxvY2spOwotCWl1ID0gX19zcnBfZ2V0X3R4X2l1KHRhcmdldCwgU1JQX0lVX1RTS19NR01UKTsKLQlzcGluX3VubG9ja19pcnEoJnRhcmdldC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmY2gtPmxvY2spOworCWl1ID0gX19zcnBfZ2V0X3R4X2l1KGNoLCBTUlBfSVVfVFNLX01HTVQpOworCXNwaW5fdW5sb2NrX2lycSgmY2gtPmxvY2spOwogCiAJaWYgKCFpdSkgewogCQltdXRleF91bmxvY2soJnJwb3J0LT5tdXRleCk7CkBAIC0yMzUwLDE1ICsyNDU1LDE1IEBACiAKIAlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGl1LT5kbWEsIHNpemVvZiAqdHNrX21nbXQsCiAJCQkJICAgICAgRE1BX1RPX0RFVklDRSk7Ci0JaWYgKHNycF9wb3N0X3NlbmQodGFyZ2V0LCBpdSwgc2l6ZW9mICp0c2tfbWdtdCkpIHsKLQkJc3JwX3B1dF90eF9pdSh0YXJnZXQsIGl1LCBTUlBfSVVfVFNLX01HTVQpOworCWlmIChzcnBfcG9zdF9zZW5kKGNoLCBpdSwgc2l6ZW9mKCp0c2tfbWdtdCkpKSB7CisJCXNycF9wdXRfdHhfaXUoY2gsIGl1LCBTUlBfSVVfVFNLX01HTVQpOwogCQltdXRleF91bmxvY2soJnJwb3J0LT5tdXRleCk7CiAKIAkJcmV0dXJuIC0xOwogCX0KIAltdXRleF91bmxvY2soJnJwb3J0LT5tdXRleCk7CiAKLQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmdGFyZ2V0LT50c2tfbWdtdF9kb25lLAorCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjaC0+dHNrX21nbXRfZG9uZSwKIAkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoU1JQX0FCT1JUX1RJTUVPVVRfTVMpKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0yMzY5LDIwICsyNDc0LDMyIEBACiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoc2NtbmQtPmRldmljZS0+aG9zdCk7CiAJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEgPSAoc3RydWN0IHNycF9yZXF1ZXN0ICopIHNjbW5kLT5ob3N0X3NjcmliYmxlOworCXUzMiB0YWc7CisJdTE2IGNoX2lkeDsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoOwogCWludCByZXQ7CiAKIAlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCAiU1JQIGFib3J0IGNhbGxlZFxuIik7CiAKLQlpZiAoIXJlcSB8fCAhc3JwX2NsYWltX3JlcSh0YXJnZXQsIHJlcSwgTlVMTCwgc2NtbmQpKQorCWlmICghcmVxKQogCQlyZXR1cm4gU1VDQ0VTUzsKLQlpZiAoc3JwX3NlbmRfdHNrX21nbXQodGFyZ2V0LCByZXEtPmluZGV4LCBzY21uZC0+ZGV2aWNlLT5sdW4sCisJdGFnID0gYmxrX21xX3VuaXF1ZV90YWcoc2NtbmQtPnJlcXVlc3QpOworCWNoX2lkeCA9IGJsa19tcV91bmlxdWVfdGFnX3RvX2h3cSh0YWcpOworCWlmIChXQVJOX09OX09OQ0UoY2hfaWR4ID49IHRhcmdldC0+Y2hfY291bnQpKQorCQlyZXR1cm4gU1VDQ0VTUzsKKwljaCA9ICZ0YXJnZXQtPmNoW2NoX2lkeF07CisJaWYgKCFzcnBfY2xhaW1fcmVxKGNoLCByZXEsIE5VTEwsIHNjbW5kKSkKKwkJcmV0dXJuIFNVQ0NFU1M7CisJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwKKwkJICAgICAiU2VuZGluZyBTUlAgYWJvcnQgZm9yIHRhZyAlI3hcbiIsIHRhZyk7CisJaWYgKHNycF9zZW5kX3Rza19tZ210KGNoLCB0YWcsIHNjbW5kLT5kZXZpY2UtPmx1biwKIAkJCSAgICAgIFNSUF9UU0tfQUJPUlRfVEFTSykgPT0gMCkKIAkJcmV0ID0gU1VDQ0VTUzsKIAllbHNlIGlmICh0YXJnZXQtPnJwb3J0LT5zdGF0ZSA9PSBTUlBfUlBPUlRfTE9TVCkKIAkJcmV0ID0gRkFTVF9JT19GQUlMOwogCWVsc2UKIAkJcmV0ID0gRkFJTEVEOwotCXNycF9mcmVlX3JlcSh0YXJnZXQsIHJlcSwgc2NtbmQsIDApOworCXNycF9mcmVlX3JlcShjaCwgcmVxLCBzY21uZCwgMCk7CiAJc2NtbmQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKIAlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKIApAQCAtMjM5MiwxOSArMjUwOSwyNSBAQAogc3RhdGljIGludCBzcnBfcmVzZXRfZGV2aWNlKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kKQogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHNjbW5kLT5kZXZpY2UtPmhvc3QpOworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2g7CiAJaW50IGk7CiAKIAlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCAiU1JQIHJlc2V0X2RldmljZSBjYWxsZWRcbiIpOwogCi0JaWYgKHNycF9zZW5kX3Rza19tZ210KHRhcmdldCwgU1JQX1RBR19OT19SRVEsIHNjbW5kLT5kZXZpY2UtPmx1biwKKwljaCA9ICZ0YXJnZXQtPmNoWzBdOworCWlmIChzcnBfc2VuZF90c2tfbWdtdChjaCwgU1JQX1RBR19OT19SRVEsIHNjbW5kLT5kZXZpY2UtPmx1biwKIAkJCSAgICAgIFNSUF9UU0tfTFVOX1JFU0VUKSkKIAkJcmV0dXJuIEZBSUxFRDsKLQlpZiAodGFyZ2V0LT50c2tfbWdtdF9zdGF0dXMpCisJaWYgKGNoLT50c2tfbWdtdF9zdGF0dXMpCiAJCXJldHVybiBGQUlMRUQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5yZXFfcmluZ19zaXplOyArK2kpIHsKLQkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1tpXTsKLQkJc3JwX2ZpbmlzaF9yZXEodGFyZ2V0LCByZXEsIHNjbW5kLT5kZXZpY2UsIERJRF9SRVNFVCA8PCAxNik7CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5yZXFfcmluZ19zaXplOyArK2kpIHsKKwkJCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxID0gJmNoLT5yZXFfcmluZ1tpXTsKKworCQkJc3JwX2ZpbmlzaF9yZXEoY2gsIHJlcSwgc2NtbmQtPmRldmljZSwgRElEX1JFU0VUIDw8IDE2KTsKKwkJfQogCX0KIAogCXJldHVybiBTVUNDRVNTOwpAQCAtMjQ2Niw3ICsyNTg5LDcgQEAKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0eFxuIiwgYmUxNl90b19jcHUodGFyZ2V0LT5wYXRoLnBrZXkpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwNHhcbiIsIGJlMTZfdG9fY3B1KHRhcmdldC0+cGtleSkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3NnaWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTI0NzQsMTUgKzI1OTcsMTYgQEAKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVwSTZcbiIsIHRhcmdldC0+cGF0aC5zZ2lkLnJhdyk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXBJNlxuIiwgdGFyZ2V0LT5zZ2lkLnJhdyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZGdpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoID0gJnRhcmdldC0+Y2hbMF07CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlcEk2XG4iLCB0YXJnZXQtPnBhdGguZGdpZC5yYXcpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVwSTZcbiIsIGNoLT5wYXRoLmRnaWQucmF3KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19vcmlnX2RnaWQoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjQ5MCwxNSArMjYxNCwyMSBAQAogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXBJNlxuIiwgdGFyZ2V0LT5vcmlnX2RnaWQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVwSTZcbiIsIHRhcmdldC0+b3JpZ19kZ2lkLnJhdyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfcmVxX2xpbShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoOworCWludCBpLCByZXFfbGltID0gSU5UX01BWDsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0YXJnZXQtPnJlcV9saW0pOworCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJcmVxX2xpbSA9IG1pbihyZXFfbGltLCBjaC0+cmVxX2xpbSk7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCByZXFfbGltKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd196ZXJvX3JlcV9saW0oc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjUyNSw2ICsyNjU1LDE0IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldi0+bmFtZSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfY2hfY291bnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGRldikpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRhcmdldC0+Y2hfY291bnQpOworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X2NvbXBfdmVjdG9yKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMjU2OCw2ICsyNzA2LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUih6ZXJvX3JlcV9saW0sICAgIFNfSVJVR08sIHNob3dfemVyb19yZXFfbGltLAkgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihsb2NhbF9pYl9wb3J0LCAgIFNfSVJVR08sIHNob3dfbG9jYWxfaWJfcG9ydCwgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihsb2NhbF9pYl9kZXZpY2UsIFNfSVJVR08sIHNob3dfbG9jYWxfaWJfZGV2aWNlLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjaF9jb3VudCwgICAgICAgIFNfSVJVR08sIHNob3dfY2hfY291bnQsICAgICAgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihjb21wX3ZlY3RvciwgICAgIFNfSVJVR08sIHNob3dfY29tcF92ZWN0b3IsICAgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0bF9yZXRyeV9jb3VudCwgIFNfSVJVR08sIHNob3dfdGxfcmV0cnlfY291bnQsICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihjbWRfc2dfZW50cmllcywgIFNfSVJVR08sIHNob3dfY21kX3NnX2VudHJpZXMsICBOVUxMKTsKQEAgLTI1ODUsNiArMjcyNCw3IEBACiAJJmRldl9hdHRyX3plcm9fcmVxX2xpbSwKIAkmZGV2X2F0dHJfbG9jYWxfaWJfcG9ydCwKIAkmZGV2X2F0dHJfbG9jYWxfaWJfZGV2aWNlLAorCSZkZXZfYXR0cl9jaF9jb3VudCwKIAkmZGV2X2F0dHJfY29tcF92ZWN0b3IsCiAJJmRldl9hdHRyX3RsX3JldHJ5X2NvdW50LAogCSZkZXZfYXR0cl9jbWRfc2dfZW50cmllcywKQEAgLTI2MDAsNyArMjc0MCw3IEBACiAJLmluZm8JCQkJPSBzcnBfdGFyZ2V0X2luZm8sCiAJLnF1ZXVlY29tbWFuZAkJCT0gc3JwX3F1ZXVlY29tbWFuZCwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoICAgICAgICAgICAgID0gc3JwX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgICAgICAgICAgICAgID0gc3JwX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfdHlwZSAgICAgICAgICAgICAgPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlLAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IHNycF9hYm9ydCwKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSBzcnBfcmVzZXRfZGV2aWNlLAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJCT0gc3JwX3Jlc2V0X2hvc3QsCkBAIC0yNjEwLDE0ICsyNzUwLDI4IEBACiAJLnRoaXNfaWQJCQk9IC0xLAogCS5jbWRfcGVyX2x1bgkJCT0gU1JQX0RFRkFVTFRfQ01EX1NRX1NJWkUsCiAJLnVzZV9jbHVzdGVyaW5nCQkJPSBFTkFCTEVfQ0xVU1RFUklORywKLQkuc2hvc3RfYXR0cnMJCQk9IHNycF9ob3N0X2F0dHJzCisJLnNob3N0X2F0dHJzCQkJPSBzcnBfaG9zdF9hdHRycywKKwkudXNlX2Jsa190YWdzCQkJPSAxLAorCS50cmFja19xdWV1ZV9kZXB0aAkJPSAxLAogfTsKIAorc3RhdGljIGludCBzcnBfc2Rldl9jb3VudChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwlpbnQgYyA9IDA7CisKKwlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2RldiwgaG9zdCkKKwkJYysrOworCisJcmV0dXJuIGM7Cit9CisKIHN0YXRpYyBpbnQgc3JwX2FkZF90YXJnZXQoc3RydWN0IHNycF9ob3N0ICpob3N0LCBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCiB7CiAJc3RydWN0IHNycF9ycG9ydF9pZGVudGlmaWVycyBpZHM7CiAJc3RydWN0IHNycF9ycG9ydCAqcnBvcnQ7CiAKKwl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9TQ0FOTklORzsKIAlzcHJpbnRmKHRhcmdldC0+dGFyZ2V0X25hbWUsICJTUlAuVDEwOiUwMTZsbFgiLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUodGFyZ2V0LT5pZF9leHQpKTsKIApAQCAtMjY0MCwxMSArMjc5NCwyNiBAQAogCWxpc3RfYWRkX3RhaWwoJnRhcmdldC0+bGlzdCwgJmhvc3QtPnRhcmdldF9saXN0KTsKIAlzcGluX3VubG9jaygmaG9zdC0+dGFyZ2V0X2xvY2spOwogCi0JdGFyZ2V0LT5zdGF0ZSA9IFNSUF9UQVJHRVRfTElWRTsKLQogCXNjc2lfc2Nhbl90YXJnZXQoJnRhcmdldC0+c2NzaV9ob3N0LT5zaG9zdF9nZW5kZXYsCiAJCQkgMCwgdGFyZ2V0LT5zY3NpX2lkLCBTQ0FOX1dJTERfQ0FSRCwgMCk7CiAKKwlpZiAoIXRhcmdldC0+Y29ubmVjdGVkIHx8IHRhcmdldC0+cXBfaW5fZXJyb3IpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgdGFyZ2V0LT5zY3NpX2hvc3QsCisJCQkgICAgIFBGWCAiU0NTSSBzY2FuIGZhaWxlZCAtIHJlbW92aW5nIFNDU0kgaG9zdFxuIik7CisJCXNycF9xdWV1ZV9yZW1vdmVfd29yayh0YXJnZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcl9kZWJ1ZyhQRlggIiVzOiBTQ1NJIHNjYW4gc3VjY2VlZGVkIC0gZGV0ZWN0ZWQgJWQgTFVOc1xuIiwKKwkJIGRldl9uYW1lKCZ0YXJnZXQtPnNjc2lfaG9zdC0+c2hvc3RfZ2VuZGV2KSwKKwkJIHNycF9zZGV2X2NvdW50KHRhcmdldC0+c2NzaV9ob3N0KSk7CisKKwlzcGluX2xvY2tfaXJxKCZ0YXJnZXQtPmxvY2spOworCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfU0NBTk5JTkcpCisJCXRhcmdldC0+c3RhdGUgPSBTUlBfVEFSR0VUX0xJVkU7CisJc3Bpbl91bmxvY2tfaXJxKCZ0YXJnZXQtPmxvY2spOworCitvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4MDEsMTEgKzI5NzAsMTUgQEAKIAkJCX0KIAogCQkJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHsKLQkJCQlzdHJsY3B5KGRnaWQsIHAgKyBpICogMiwgMyk7Ci0JCQkJdGFyZ2V0LT5wYXRoLmRnaWQucmF3W2ldID0gc2ltcGxlX3N0cnRvdWwoZGdpZCwgTlVMTCwgMTYpOworCQkJCXN0cmxjcHkoZGdpZCwgcCArIGkgKiAyLCBzaXplb2YoZGdpZCkpOworCQkJCWlmIChzc2NhbmYoZGdpZCwgIiVoaHgiLAorCQkJCQkgICAmdGFyZ2V0LT5vcmlnX2RnaWQucmF3W2ldKSA8IDEpIHsKKwkJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQkJa2ZyZWUocCk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCX0KIAkJCWtmcmVlKHApOwotCQkJbWVtY3B5KHRhcmdldC0+b3JpZ19kZ2lkLCB0YXJnZXQtPnBhdGguZGdpZC5yYXcsIDE2KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1JQX09QVF9QS0VZOgpAQCAtMjgxMyw3ICsyOTg2LDcgQEAKIAkJCQlwcl93YXJuKCJiYWQgUF9LZXkgcGFyYW1ldGVyICclcydcbiIsIHApOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCQkJdGFyZ2V0LT5wYXRoLnBrZXkgPSBjcHVfdG9fYmUxNih0b2tlbik7CisJCQl0YXJnZXQtPnBrZXkgPSBjcHVfdG9fYmUxNih0b2tlbik7CiAJCQlicmVhazsKIAogCQljYXNlIFNSUF9PUFRfU0VSVklDRV9JRDoKQEAgLTI4MjMsNyArMjk5Niw2IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQl0YXJnZXQtPnNlcnZpY2VfaWQgPSBjcHVfdG9fYmU2NChzaW1wbGVfc3RydG91bGwocCwgTlVMTCwgMTYpKTsKLQkJCXRhcmdldC0+cGF0aC5zZXJ2aWNlX2lkID0gdGFyZ2V0LT5zZXJ2aWNlX2lkOwogCQkJa2ZyZWUocCk7CiAJCQlicmVhazsKIApAQCAtMjk2MCw5ICszMTMyLDExIEBACiAJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzcnBfaG9zdCwgZGV2KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICp0YXJnZXRfaG9zdDsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQ7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaDsKIAlzdHJ1Y3Qgc3JwX2RldmljZSAqc3JwX2RldiA9IGhvc3QtPnNycF9kZXY7CiAJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBzcnBfZGV2LT5kZXY7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBub2RlX2lkeCwgbm9kZSwgY3B1LCBpOworCWJvb2wgbXVsdGljaCA9IGZhbHNlOwogCiAJdGFyZ2V0X2hvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJnNycF90ZW1wbGF0ZSwKIAkJCQkgICAgICBzaXplb2YgKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQpKTsKQEAgLTI5ODgsMTIgKzMxNjIsMjIgQEAKIAl0YXJnZXQtPnRsX3JldHJ5X2NvdW50CT0gNzsKIAl0YXJnZXQtPnF1ZXVlX3NpemUJPSBTUlBfREVGQVVMVF9RVUVVRV9TSVpFOwogCisJLyoKKwkgKiBBdm9pZCB0aGF0IHRoZSBTQ1NJIGhvc3QgY2FuIGJlIHJlbW92ZWQgYnkgc3JwX3JlbW92ZV90YXJnZXQoKQorCSAqIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisJICovCisJc2NzaV9ob3N0X2dldCh0YXJnZXQtPnNjc2lfaG9zdCk7CisKIAltdXRleF9sb2NrKCZob3N0LT5hZGRfdGFyZ2V0X211dGV4KTsKIAogCXJldCA9IHNycF9wYXJzZV9vcHRpb25zKGJ1ZiwgdGFyZ2V0KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAorCXJldCA9IHNjc2lfaW5pdF9zaGFyZWRfdGFnX21hcCh0YXJnZXRfaG9zdCwgdGFyZ2V0X2hvc3QtPmNhbl9xdWV1ZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKIAl0YXJnZXQtPnJlcV9yaW5nX3NpemUgPSB0YXJnZXQtPnF1ZXVlX3NpemUgLSBTUlBfVFNLX01HTVRfU1FfU0laRTsKIAogCWlmICghc3JwX2Nvbm5fdW5pcXVlKHRhcmdldC0+c3JwX2hvc3QsIHRhcmdldCkpIHsKQEAgLTMwMjIsNTkgKzMyMDYsMTE1IEBACiAJSU5JVF9XT1JLKCZ0YXJnZXQtPnRsX2Vycl93b3JrLCBzcnBfdGxfZXJyX3dvcmspOwogCUlOSVRfV09SSygmdGFyZ2V0LT5yZW1vdmVfd29yaywgc3JwX3JlbW92ZV93b3JrKTsKIAlzcGluX2xvY2tfaW5pdCgmdGFyZ2V0LT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmdGFyZ2V0LT5mcmVlX3R4KTsKLQlyZXQgPSBzcnBfYWxsb2NfcmVxX2RhdGEodGFyZ2V0KTsKKwlyZXQgPSBpYl9xdWVyeV9naWQoaWJkZXYsIGhvc3QtPnBvcnQsIDAsICZ0YXJnZXQtPnNnaWQpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyX2ZyZWVfbWVtOworCQlnb3RvIGVycjsKIAotCXJldCA9IGliX3F1ZXJ5X2dpZChpYmRldiwgaG9zdC0+cG9ydCwgMCwgJnRhcmdldC0+cGF0aC5zZ2lkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9mcmVlX21lbTsKKwlyZXQgPSAtRU5PTUVNOworCXRhcmdldC0+Y2hfY291bnQgPSBtYXhfdCh1bnNpZ25lZCwgbnVtX29ubGluZV9ub2RlcygpLAorCQkJCSBtaW4oY2hfY291bnQgPyA6CisJCQkJICAgICBtaW4oNCAqIG51bV9vbmxpbmVfbm9kZXMoKSwKKwkJCQkJIGliZGV2LT5udW1fY29tcF92ZWN0b3JzKSwKKwkJCQkgICAgIG51bV9vbmxpbmVfY3B1cygpKSk7CisJdGFyZ2V0LT5jaCA9IGtjYWxsb2ModGFyZ2V0LT5jaF9jb3VudCwgc2l6ZW9mKCp0YXJnZXQtPmNoKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YXJnZXQtPmNoKQorCQlnb3RvIGVycjsKIAotCXJldCA9IHNycF9jcmVhdGVfdGFyZ2V0X2liKHRhcmdldCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfZnJlZV9tZW07CisJbm9kZV9pZHggPSAwOworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKKwkJY29uc3QgaW50IGNoX3N0YXJ0ID0gKG5vZGVfaWR4ICogdGFyZ2V0LT5jaF9jb3VudCAvCisJCQkJICAgICAgbnVtX29ubGluZV9ub2RlcygpKTsKKwkJY29uc3QgaW50IGNoX2VuZCA9ICgobm9kZV9pZHggKyAxKSAqIHRhcmdldC0+Y2hfY291bnQgLworCQkJCSAgICBudW1fb25saW5lX25vZGVzKCkpOworCQljb25zdCBpbnQgY3Zfc3RhcnQgPSAobm9kZV9pZHggKiBpYmRldi0+bnVtX2NvbXBfdmVjdG9ycyAvCisJCQkJICAgICAgbnVtX29ubGluZV9ub2RlcygpICsgdGFyZ2V0LT5jb21wX3ZlY3RvcikKKwkJCQkgICAgICUgaWJkZXYtPm51bV9jb21wX3ZlY3RvcnM7CisJCWNvbnN0IGludCBjdl9lbmQgPSAoKG5vZGVfaWR4ICsgMSkgKiBpYmRldi0+bnVtX2NvbXBfdmVjdG9ycyAvCisJCQkJICAgIG51bV9vbmxpbmVfbm9kZXMoKSArIHRhcmdldC0+Y29tcF92ZWN0b3IpCisJCQkJICAgJSBpYmRldi0+bnVtX2NvbXBfdmVjdG9yczsKKwkJaW50IGNwdV9pZHggPSAwOwogCi0JcmV0ID0gc3JwX25ld19jbV9pZCh0YXJnZXQpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2ZyZWVfaWI7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCQlpZiAoY3B1X3RvX25vZGUoY3B1KSAhPSBub2RlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNoX3N0YXJ0ICsgY3B1X2lkeCA+PSBjaF9lbmQpCisJCQkJY29udGludWU7CisJCQljaCA9ICZ0YXJnZXQtPmNoW2NoX3N0YXJ0ICsgY3B1X2lkeF07CisJCQljaC0+dGFyZ2V0ID0gdGFyZ2V0OworCQkJY2gtPmNvbXBfdmVjdG9yID0gY3Zfc3RhcnQgPT0gY3ZfZW5kID8gY3Zfc3RhcnQgOgorCQkJCWN2X3N0YXJ0ICsgY3B1X2lkeCAlIChjdl9lbmQgLSBjdl9zdGFydCk7CisJCQlzcGluX2xvY2tfaW5pdCgmY2gtPmxvY2spOworCQkJSU5JVF9MSVNUX0hFQUQoJmNoLT5mcmVlX3R4KTsKKwkJCXJldCA9IHNycF9uZXdfY21faWQoY2gpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycl9kaXNjb25uZWN0OwogCi0JcmV0ID0gc3JwX2Nvbm5lY3RfdGFyZ2V0KHRhcmdldCk7Ci0JaWYgKHJldCkgewotCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAotCQkJICAgICBQRlggIkNvbm5lY3Rpb24gZmFpbGVkXG4iKTsKLQkJZ290byBlcnJfY21faWQ7CisJCQlyZXQgPSBzcnBfY3JlYXRlX2NoX2liKGNoKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnJfZGlzY29ubmVjdDsKKworCQkJcmV0ID0gc3JwX2FsbG9jX3JlcV9kYXRhKGNoKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnJfZGlzY29ubmVjdDsKKworCQkJcmV0ID0gc3JwX2Nvbm5lY3RfY2goY2gsIG11bHRpY2gpOworCQkJaWYgKHJldCkgeworCQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCisJCQkJCSAgICAgUEZYICJDb25uZWN0aW9uICVkLyVkIGZhaWxlZFxuIiwKKwkJCQkJICAgICBjaF9zdGFydCArIGNwdV9pZHgsCisJCQkJCSAgICAgdGFyZ2V0LT5jaF9jb3VudCk7CisJCQkJaWYgKG5vZGVfaWR4ID09IDAgJiYgY3B1X2lkeCA9PSAwKSB7CisJCQkJCWdvdG8gZXJyX2Rpc2Nvbm5lY3Q7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3JwX2ZyZWVfY2hfaWIodGFyZ2V0LCBjaCk7CisJCQkJCXNycF9mcmVlX3JlcV9kYXRhKHRhcmdldCwgY2gpOworCQkJCQl0YXJnZXQtPmNoX2NvdW50ID0gY2ggLSB0YXJnZXQtPmNoOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCW11bHRpY2ggPSB0cnVlOworCQkJY3B1X2lkeCsrOworCQl9CisJCW5vZGVfaWR4Kys7CiAJfQogCisJdGFyZ2V0LT5zY3NpX2hvc3QtPm5yX2h3X3F1ZXVlcyA9IHRhcmdldC0+Y2hfY291bnQ7CisKIAlyZXQgPSBzcnBfYWRkX3RhcmdldChob3N0LCB0YXJnZXQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2Rpc2Nvbm5lY3Q7CiAKLQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAotCQkgICAgICJuZXcgdGFyZ2V0OiBpZF9leHQgJTAxNmxseCBpb2NfZ3VpZCAlMDE2bGx4IHBrZXkgJTA0eCBzZXJ2aWNlX2lkICUwMTZsbHggc2dpZCAlcEk2IGRnaWQgJXBJNlxuIiwKLQkJICAgICBiZTY0X3RvX2NwdSh0YXJnZXQtPmlkX2V4dCksCi0JCSAgICAgYmU2NF90b19jcHUodGFyZ2V0LT5pb2NfZ3VpZCksCi0JCSAgICAgYmUxNl90b19jcHUodGFyZ2V0LT5wYXRoLnBrZXkpLAotCQkgICAgIGJlNjRfdG9fY3B1KHRhcmdldC0+c2VydmljZV9pZCksCi0JCSAgICAgdGFyZ2V0LT5wYXRoLnNnaWQucmF3LCB0YXJnZXQtPnBhdGguZGdpZC5yYXcpOworCWlmICh0YXJnZXQtPnN0YXRlICE9IFNSUF9UQVJHRVRfUkVNT1ZFRCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAorCQkJICAgICAibmV3IHRhcmdldDogaWRfZXh0ICUwMTZsbHggaW9jX2d1aWQgJTAxNmxseCBwa2V5ICUwNHggc2VydmljZV9pZCAlMDE2bGx4IHNnaWQgJXBJNiBkZ2lkICVwSTZcbiIsCisJCQkgICAgIGJlNjRfdG9fY3B1KHRhcmdldC0+aWRfZXh0KSwKKwkJCSAgICAgYmU2NF90b19jcHUodGFyZ2V0LT5pb2NfZ3VpZCksCisJCQkgICAgIGJlMTZfdG9fY3B1KHRhcmdldC0+cGtleSksCisJCQkgICAgIGJlNjRfdG9fY3B1KHRhcmdldC0+c2VydmljZV9pZCksCisJCQkgICAgIHRhcmdldC0+c2dpZC5yYXcsIHRhcmdldC0+b3JpZ19kZ2lkLnJhdyk7CisJfQogCiAJcmV0ID0gY291bnQ7CiAKIG91dDoKIAltdXRleF91bmxvY2soJmhvc3QtPmFkZF90YXJnZXRfbXV0ZXgpOworCisJc2NzaV9ob3N0X3B1dCh0YXJnZXQtPnNjc2lfaG9zdCk7CisKIAlyZXR1cm4gcmV0OwogCiBlcnJfZGlzY29ubmVjdDoKIAlzcnBfZGlzY29ubmVjdF90YXJnZXQodGFyZ2V0KTsKIAotZXJyX2NtX2lkOgotCWliX2Rlc3Ryb3lfY21faWQodGFyZ2V0LT5jbV9pZCk7CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQlzcnBfZnJlZV9jaF9pYih0YXJnZXQsIGNoKTsKKwkJc3JwX2ZyZWVfcmVxX2RhdGEodGFyZ2V0LCBjaCk7CisJfQogCi1lcnJfZnJlZV9pYjoKLQlzcnBfZnJlZV90YXJnZXRfaWIodGFyZ2V0KTsKLQotZXJyX2ZyZWVfbWVtOgotCXNycF9mcmVlX3JlcV9kYXRhKHRhcmdldCk7CisJa2ZyZWUodGFyZ2V0LT5jaCk7CiAKIGVycjoKIAlzY3NpX2hvc3RfcHV0KHRhcmdldF9ob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKaW5kZXggZTQ2ZWNiMS4uYTYxMTU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKQEAgLTcwLDkgKzcwLDEyIEBACiAKIAlMT0NBTF9JTlZfV1JfSURfTUFTSwk9IDEsCiAJRkFTVF9SRUdfV1JfSURfTUFTSwk9IDIsCisKKwlTUlBfTEFTVF9XUl9JRAkJPSAweGZmZmZmZmZjVSwKIH07CiAKIGVudW0gc3JwX3RhcmdldF9zdGF0ZSB7CisJU1JQX1RBUkdFVF9TQ0FOTklORywKIAlTUlBfVEFSR0VUX0xJVkUsCiAJU1JQX1RBUkdFVF9SRU1PVkVELAogfTsKQEAgLTExNSw3ICsxMTgsNiBAQAogfTsKIAogc3RydWN0IHNycF9yZXF1ZXN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJc3RydWN0IHNjc2lfY21uZCAgICAgICAqc2NtbmQ7CiAJc3RydWN0IHNycF9pdQkgICAgICAgKmNtZDsKIAl1bmlvbiB7CkBAIC0xMjYsMjQgKzEyOCw2MiBAQAogCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAgKmluZGlyZWN0X2Rlc2M7CiAJZG1hX2FkZHJfdAkJaW5kaXJlY3RfZG1hX2FkZHI7CiAJc2hvcnQJCQlubWRlc2M7Ci0Jc2hvcnQJCQlpbmRleDsKIH07CiAKLXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgeworLyoqCisgKiBzdHJ1Y3Qgc3JwX3JkbWFfY2gKKyAqIEBjb21wX3ZlY3RvcjogQ29tcGxldGlvbiB2ZWN0b3IgdXNlZCBieSB0aGlzIFJETUEgY2hhbm5lbC4KKyAqLworc3RydWN0IHNycF9yZG1hX2NoIHsKIAkvKiBUaGVzZSBhcmUgUlcgaW4gdGhlIGhvdCBwYXRoLCBhbmQgY29tbW9ubHkgdXNlZCB0b2dldGhlciAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV90eDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfcmVxczsKIAlzcGlubG9ja190CQlsb2NrOwogCXMzMgkJCXJlcV9saW07CiAKIAkvKiBUaGVzZSBhcmUgcmVhZC1vbmx5IGluIHRoZSBob3QgcGF0aCAqLwotCXN0cnVjdCBpYl9jcQkgICAgICAgKnNlbmRfY3EgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwlzdHJ1Y3QgaWJfY3EJICAgICAgICpzZW5kX2NxOwogCXN0cnVjdCBpYl9jcQkgICAgICAgKnJlY3ZfY3E7CiAJc3RydWN0IGliX3FwCSAgICAgICAqcXA7CiAJdW5pb24gewogCQlzdHJ1Y3QgaWJfZm1yX3Bvb2wgICAgICpmbXJfcG9vbDsKIAkJc3RydWN0IHNycF9mcl9wb29sICAgICAqZnJfcG9vbDsKIAl9OworCisJLyogRXZlcnl0aGluZyBhYm92ZSB0aGlzIHBvaW50IGlzIHVzZWQgaW4gdGhlIGhvdCBwYXRoIG9mCisJICogY29tbWFuZCBwcm9jZXNzaW5nLiBUcnkgdG8ga2VlcCB0aGVtIHBhY2tlZCBpbnRvIGNhY2hlbGluZXMuCisJICovCisKKwlzdHJ1Y3QgY29tcGxldGlvbglkb25lOworCWludAkJCXN0YXR1czsKKworCXN0cnVjdCBpYl9zYV9wYXRoX3JlYwlwYXRoOworCXN0cnVjdCBpYl9zYV9xdWVyeSAgICAgKnBhdGhfcXVlcnk7CisJaW50CQkJcGF0aF9xdWVyeV9pZDsKKworCXN0cnVjdCBpYl9jbV9pZAkgICAgICAgKmNtX2lkOworCXN0cnVjdCBzcnBfaXUJICAgICAgKip0eF9yaW5nOworCXN0cnVjdCBzcnBfaXUJICAgICAgKipyeF9yaW5nOworCXN0cnVjdCBzcnBfcmVxdWVzdCAgICAgKnJlcV9yaW5nOworCWludAkJCW1heF90aV9pdV9sZW47CisJaW50CQkJY29tcF92ZWN0b3I7CisKKwlzdHJ1Y3QgY29tcGxldGlvbgl0c2tfbWdtdF9kb25lOworCXU4CQkJdHNrX21nbXRfc3RhdHVzOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0CisgKiBAY29tcF92ZWN0b3I6IENvbXBsZXRpb24gdmVjdG9yIHVzZWQgYnkgdGhlIGZpcnN0IFJETUEgY2hhbm5lbCBjcmVhdGVkIGZvcgorICogICB0aGlzIHRhcmdldCBwb3J0LgorICovCitzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0IHsKKwkvKiByZWFkIGFuZCB3cml0dGVuIGluIHRoZSBob3QgcGF0aCAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwkvKiByZWFkIG9ubHkgaW4gdGhlIGhvdCBwYXRoICovCisJc3RydWN0IHNycF9yZG1hX2NoCSpjaDsKKwl1MzIJCQljaF9jb3VudDsKIAl1MzIJCQlsa2V5OwogCXUzMgkJCXJrZXk7CiAJZW51bSBzcnBfdGFyZ2V0X3N0YXRlCXN0YXRlOwpAQCAtMTUyLDEwICsxOTIsOCBAQAogCXVuc2lnbmVkIGludAkJaW5kaXJlY3Rfc2l6ZTsKIAlib29sCQkJYWxsb3dfZXh0X3NnOwogCi0JLyogRXZlcnl0aGluZyBhYm92ZSB0aGlzIHBvaW50IGlzIHVzZWQgaW4gdGhlIGhvdCBwYXRoIG9mCi0JICogY29tbWFuZCBwcm9jZXNzaW5nLiBUcnkgdG8ga2VlcCB0aGVtIHBhY2tlZCBpbnRvIGNhY2hlbGluZXMuCi0JICovCi0KKwkvKiBvdGhlciBtZW1iZXIgdmFyaWFibGVzICovCisJdW5pb24gaWJfZ2lkCQlzZ2lkOwogCV9fYmU2NAkJCWlkX2V4dDsKIAlfX2JlNjQJCQlpb2NfZ3VpZDsKIAlfX2JlNjQJCQlzZXJ2aWNlX2lkOwpAQCAtMTcyLDM0ICsyMTAsMTkgQEAKIAlpbnQJCQljb21wX3ZlY3RvcjsKIAlpbnQJCQl0bF9yZXRyeV9jb3VudDsKIAotCXN0cnVjdCBpYl9zYV9wYXRoX3JlYwlwYXRoOwotCV9fYmUxNgkJCW9yaWdfZGdpZFs4XTsKLQlzdHJ1Y3QgaWJfc2FfcXVlcnkgICAgICpwYXRoX3F1ZXJ5OwotCWludAkJCXBhdGhfcXVlcnlfaWQ7CisJdW5pb24gaWJfZ2lkCQlvcmlnX2RnaWQ7CisJX19iZTE2CQkJcGtleTsKIAogCXUzMgkJCXJxX3Rtb19qaWZmaWVzOwogCWJvb2wJCQljb25uZWN0ZWQ7CiAKLQlzdHJ1Y3QgaWJfY21faWQJICAgICAgICpjbV9pZDsKLQotCWludAkJCW1heF90aV9pdV9sZW47Ci0KIAlpbnQJCQl6ZXJvX3JlcV9saW07CiAKLQlzdHJ1Y3Qgc3JwX2l1CSAgICAgICAqKnR4X3Jpbmc7Ci0Jc3RydWN0IHNycF9pdQkgICAgICAgKipyeF9yaW5nOwotCXN0cnVjdCBzcnBfcmVxdWVzdAkqcmVxX3Jpbmc7Ci0KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdGxfZXJyX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0CXJlbW92ZV93b3JrOwogCiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7Ci0JaW50CQkJc3RhdHVzOwogCWJvb2wJCQlxcF9pbl9lcnJvcjsKLQotCXN0cnVjdCBjb21wbGV0aW9uCXRza19tZ210X2RvbmU7Ci0JdTgJCQl0c2tfbWdtdF9zdGF0dXM7CiB9OwogCiBzdHJ1Y3Qgc3JwX2l1IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9pYl9zcnB0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvaWJfc3JwdC5jCmluZGV4IDcyMDY1NDcuLmRjODI5NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9pYl9zcnB0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L2liX3NycHQuYwpAQCAtMjA5Miw2ICsyMDkyLDcgQEAKIAlpZiAoIXFwX2luaXQpCiAJCWdvdG8gb3V0OwogCityZXRyeToKIAljaC0+Y3EgPSBpYl9jcmVhdGVfY3Eoc2Rldi0+ZGV2aWNlLCBzcnB0X2NvbXBsZXRpb24sIE5VTEwsIGNoLAogCQkJICAgICAgY2gtPnJxX3NpemUgKyBzcnBfc3Ffc2l6ZSwgMCk7CiAJaWYgKElTX0VSUihjaC0+Y3EpKSB7CkBAIC0yMTE1LDYgKzIxMTYsMTMgQEAKIAljaC0+cXAgPSBpYl9jcmVhdGVfcXAoc2Rldi0+cGQsIHFwX2luaXQpOwogCWlmIChJU19FUlIoY2gtPnFwKSkgewogCQlyZXQgPSBQVFJfRVJSKGNoLT5xcCk7CisJCWlmIChyZXQgPT0gLUVOT01FTSkgeworCQkJc3JwX3NxX3NpemUgLz0gMjsKKwkJCWlmIChzcnBfc3Ffc2l6ZSA+PSBNSU5fU1JQVF9TUV9TSVpFKSB7CisJCQkJaWJfZGVzdHJveV9jcShjaC0+Y3EpOworCQkJCWdvdG8gcmV0cnk7CisJCQl9CisJCX0KIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gY3JlYXRlX3FwIHJldD0gJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyX2Rlc3Ryb3lfY3E7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IGJjMjAzNDguLjhhZmEyOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCiAgZXJyX2ZyZWVfY2xpZW50OgogCWV2ZGV2X2RldGFjaF9jbGllbnQoZXZkZXYsIGNsaWVudCk7Ci0Ja2ZyZWUoY2xpZW50KTsKKwlrdmZyZWUoY2xpZW50KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKaW5kZXggMmVkNzkwNS4uZmM1NWYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKQEAgLTExNzksOSArMTE3OSwxOSBAQAogCQl9CiAKIAkJZXBfaXJxX2luID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFsxXS5kZXNjOwotCQl1c2JfZmlsbF9idWxrX3VyYih4cGFkLT5idWxrX291dCwgdWRldiwKLQkJCQl1c2Jfc25kYnVsa3BpcGUodWRldiwgZXBfaXJxX2luLT5iRW5kcG9pbnRBZGRyZXNzKSwKLQkJCQl4cGFkLT5iZGF0YSwgWFBBRF9QS1RfTEVOLCB4cGFkX2J1bGtfb3V0LCB4cGFkKTsKKwkJaWYgKHVzYl9lbmRwb2ludF9pc19idWxrX291dChlcF9pcnFfaW4pKSB7CisJCQl1c2JfZmlsbF9idWxrX3VyYih4cGFkLT5idWxrX291dCwgdWRldiwKKwkJCQkJICB1c2Jfc25kYnVsa3BpcGUodWRldiwKKwkJCQkJCQkgIGVwX2lycV9pbi0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCSAgeHBhZC0+YmRhdGEsIFhQQURfUEtUX0xFTiwKKwkJCQkJICB4cGFkX2J1bGtfb3V0LCB4cGFkKTsKKwkJfSBlbHNlIHsKKwkJCXVzYl9maWxsX2ludF91cmIoeHBhZC0+YnVsa19vdXQsIHVkZXYsCisJCQkJCSB1c2Jfc25kaW50cGlwZSh1ZGV2LAorCQkJCQkJCWVwX2lycV9pbi0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCSB4cGFkLT5iZGF0YSwgWFBBRF9QS1RfTEVOLAorCQkJCQkgeHBhZF9idWxrX291dCwgeHBhZCwgMCk7CisJCX0KIAogCQkvKgogCQkgKiBTdWJtaXQgdGhlIGludCBVUkIgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3Igb3BlbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3R3bDQwMzAtcHdyYnV0dG9uLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYwppbmRleCBmYjNiNjNiLi44NDAwYTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYwpAQCAtODUsNiArODUsNyBAQAogCX0KIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHB3cik7CisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIHRydWUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCmluZGV4IDJiMGFlOGMuLmQxMjVhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCkBAIC0xMTU2LDcgKzExNTYsMTMgQEAKIHsKIAlzdHJ1Y3QgYWxwc19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKIAotCWlmICgocHNtb3VzZS0+cGFja2V0WzBdICYgMHhjOCkgPT0gMHgwOCkgeyAvKiBQUy8yIHBhY2tldCAqLworCS8qCisJICogQ2hlY2sgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGJhcmUgUFMvMiBwYWNrZXQsIHByZXN1bWFibHkgZnJvbQorCSAqIGEgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgZXh0ZXJuYWwgUFMvMiBwb3J0LiBCZWNhdXNlIGJhcmUgUFMvMgorCSAqIHByb3RvY29sIGRvZXMgbm90IGhhdmUgZW5vdWdoIGNvbnN0YW50IGJpdHMgdG8gc2VsZi1zeW5jaHJvbml6ZQorCSAqIHByb3Blcmx5IHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgZGV2aWNlIGlzIGZ1bGx5IHN5bmNocm9uaXplZC4KKwkgKi8KKwlpZiAoIXBzbW91c2UtPm91dF9vZl9zeW5jX2NudCAmJiAocHNtb3VzZS0+cGFja2V0WzBdICYgMHhjOCkgPT0gMHgwOCkgewogCQlpZiAocHNtb3VzZS0+cGt0Y250ID09IDMpIHsKIAkJCWFscHNfcmVwb3J0X2JhcmVfcHMyX3BhY2tldChwc21vdXNlLCBwc21vdXNlLT5wYWNrZXQsCiAJCQkJCQkgICAgdHJ1ZSk7CkBAIC0xMTgwLDEyICsxMTg2LDI3IEBACiAJfQogCiAJLyogQnl0ZXMgMiAtIHBrdHNpemUgc2hvdWxkIGhhdmUgMCBpbiB0aGUgaGlnaGVzdCBiaXQgKi8KLQlpZiAoKHByaXYtPnByb3RvX3ZlcnNpb24gPCBBTFBTX1BST1RPX1Y1KSAmJgorCWlmIChwcml2LT5wcm90b192ZXJzaW9uIDwgQUxQU19QUk9UT19WNSAmJgogCSAgICBwc21vdXNlLT5wa3RjbnQgPj0gMiAmJiBwc21vdXNlLT5wa3RjbnQgPD0gcHNtb3VzZS0+cGt0c2l6ZSAmJgogCSAgICAocHNtb3VzZS0+cGFja2V0W3BzbW91c2UtPnBrdGNudCAtIDFdICYgMHg4MCkpIHsKIAkJcHNtb3VzZV9kYmcocHNtb3VzZSwgInJlZnVzaW5nIHBhY2tldFslaV0gPSAleFxuIiwKIAkJCSAgICBwc21vdXNlLT5wa3RjbnQgLSAxLAogCQkJICAgIHBzbW91c2UtPnBhY2tldFtwc21vdXNlLT5wa3RjbnQgLSAxXSk7CisKKwkJaWYgKHByaXYtPnByb3RvX3ZlcnNpb24gPT0gQUxQU19QUk9UT19WMyAmJgorCQkgICAgcHNtb3VzZS0+cGt0Y250ID09IHBzbW91c2UtPnBrdHNpemUpIHsKKwkJCS8qCisJCQkgKiBTb21lIERlbGwgYm94ZXMsIHN1Y2ggYXMgTGF0aXR1ZGUgRTY0NDAgb3IgRTc0NDAKKwkJCSAqIHdpdGggY2xvc2VkIGxpZCwgcXVpdGUgb2Z0ZW4gc21hc2ggbGFzdCBieXRlIG9mCisJCQkgKiBvdGhlcndpc2UgdmFsaWQgcGFja2V0IHdpdGggMHhmZi4gR2l2ZW4gdGhhdCB0aGUKKwkJCSAqIG5leHQgcGFja2V0IGlzIHZlcnkgbGlrZWx5IHRvIGJlIHZhbGlkIGxldCdzCisJCQkgKiByZXBvcnQgUFNNT1VTRV9GVUxMX1BBQ0tFVCBidXQgbm90IHByb2Nlc3MgZGF0YSwKKwkJCSAqIHJhdGhlciB0aGFuIHJlcG9ydGluZyBQU01PVVNFX0JBRF9EQVRBIGFuZAorCQkJICogZmlsbGluZyB0aGUgbG9ncy4KKwkJCSAqLworCQkJcmV0dXJuIFBTTU9VU0VfRlVMTF9QQUNLRVQ7CisJCX0KKwogCQlyZXR1cm4gUFNNT1VTRV9CQURfREFUQTsKIAl9CiAKQEAgLTIzODksNiArMjQxMCw5IEBACiAJLyogV2UgYXJlIGhhdmluZyB0cm91YmxlIHJlc3luY2luZyBBTFBTIHRvdWNocGFkcyBzbyBkaXNhYmxlIGl0IGZvciBub3cgKi8KIAlwc21vdXNlLT5yZXN5bmNfdGltZSA9IDA7CiAKKwkvKiBBbGxvdyAyIGludmFsaWQgcGFja2V0cyB3aXRob3V0IHJlc2V0dGluZyBkZXZpY2UgKi8KKwlwc21vdXNlLT5yZXNldGFmdGVyID0gcHNtb3VzZS0+cGt0c2l6ZSAqIDI7CisKIAlyZXR1cm4gMDsKIAogaW5pdF9mYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jCmluZGV4IDA2ZmM2ZTcuLmYyYjk3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMKQEAgLTQyOCwxNCArNDI4LDYgQEAKIAlpbnQgeCwgeTsKIAl1MzIgdDsKIAotCWlmIChkZXZfV0FSTl9PTkNFKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKLQkJCSAgIXRwX2RldiwKLQkJCSAgcHNtb3VzZV9mbXQoIlVuZXhwZWN0ZWQgdHJhY2twb2ludCBtZXNzYWdlXG4iKSkpIHsKLQkJaWYgKGV0ZC0+ZGVidWcgPT0gMSkKLQkJCWVsYW50ZWNoX3BhY2tldF9kdW1wKHBzbW91c2UpOwotCQlyZXR1cm47Ci0JfQotCiAJdCA9IGdldF91bmFsaWduZWRfbGUzMigmcGFja2V0WzBdKTsKIAogCXN3aXRjaCAodCAmIH43VSkgewpAQCAtNTYzLDYgKzU1NSw3IEBACiAJfSBlbHNlIHsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCBwYWNrZXRbMF0gJiAweDAxKTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgcGFja2V0WzBdICYgMHgwMik7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBwYWNrZXRbMF0gJiAweDA0KTsKIAl9CiAKIAlpbnB1dF9tdF9yZXBvcnRfcG9pbnRlcl9lbXVsYXRpb24oZGV2LCB0cnVlKTsKQEAgLTc5Miw2ICs3ODUsOSBAQAogCXVuc2lnbmVkIGNoYXIgcGFja2V0X3R5cGUgPSBwYWNrZXRbM10gJiAweDAzOwogCWJvb2wgc2FuaXR5X2NoZWNrOwogCisJaWYgKGV0ZC0+dHBfZGV2ICYmIChwYWNrZXRbM10gJiAweDBmKSA9PSAweDA2KQorCQlyZXR1cm4gUEFDS0VUX1RSQUNLUE9JTlQ7CisKIAkvKgogCSAqIFNhbml0eSBjaGVjayBiYXNlZCBvbiB0aGUgY29uc3RhbnQgYml0cyBvZiBhIHBhY2tldC4KIAkgKiBUaGUgY29uc3RhbnQgYml0cyBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZgpAQCAtODc3LDEwICs4NzMsMTkgQEAKIAogCWNhc2UgNDoKIAkJcGFja2V0X3R5cGUgPSBlbGFudGVjaF9wYWNrZXRfY2hlY2tfdjQocHNtb3VzZSk7Ci0JCWlmIChwYWNrZXRfdHlwZSA9PSBQQUNLRVRfVU5LTk9XTikKKwkJc3dpdGNoIChwYWNrZXRfdHlwZSkgeworCQljYXNlIFBBQ0tFVF9VTktOT1dOOgogCQkJcmV0dXJuIFBTTU9VU0VfQkFEX0RBVEE7CiAKLQkJZWxhbnRlY2hfcmVwb3J0X2Fic29sdXRlX3Y0KHBzbW91c2UsIHBhY2tldF90eXBlKTsKKwkJY2FzZSBQQUNLRVRfVFJBQ0tQT0lOVDoKKwkJCWVsYW50ZWNoX3JlcG9ydF90cmFja3BvaW50KHBzbW91c2UsIHBhY2tldF90eXBlKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbGFudGVjaF9yZXBvcnRfYWJzb2x1dGVfdjQocHNtb3VzZSwgcGFja2V0X3R5cGUpOworCQkJYnJlYWs7CisJCX0KKwogCQlicmVhazsKIAl9CiAKQEAgLTExMjAsNiArMTEyNSwyMiBAQAogfQogCiAvKgorICogU29tZSBod192ZXJzaW9uIDQgbW9kZWxzIGRvIGhhdmUgYSBtaWRkbGUgYnV0dG9uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBlbGFudGVjaF9kbWlfaGFzX21pZGRsZV9idXR0b25bXSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19ETUkpICYmIGRlZmluZWQoQ09ORklHX1g4NikKKwl7CisJCS8qIEZ1aml0c3UgSDczMCBoYXMgYSBtaWRkbGUgYnV0dG9uICovCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDRUxTSVVTIEg3MzAiKSwKKwkJfSwKKwl9LAorI2VuZGlmCisJeyB9Cit9OworCisvKgogICogU2V0IHRoZSBhcHByb3ByaWF0ZSBldmVudCBiaXRzIGZvciB0aGUgaW5wdXQgc3Vic3lzdGVtCiAgKi8KIHN0YXRpYyBpbnQgZWxhbnRlY2hfc2V0X2lucHV0X3BhcmFtcyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKQEAgLTExMzgsNiArMTE1OSw4IEBACiAJX19jbGVhcl9iaXQoRVZfUkVMLCBkZXYtPmV2Yml0KTsKIAogCV9fc2V0X2JpdChCVE5fTEVGVCwgZGV2LT5rZXliaXQpOworCWlmIChkbWlfY2hlY2tfc3lzdGVtKGVsYW50ZWNoX2RtaV9oYXNfbWlkZGxlX2J1dHRvbikpCisJCV9fc2V0X2JpdChCVE5fTUlERExFLCBkZXYtPmtleWJpdCk7CiAJX19zZXRfYml0KEJUTl9SSUdIVCwgZGV2LT5rZXliaXQpOwogCiAJX19zZXRfYml0KEJUTl9UT1VDSCwgZGV2LT5rZXliaXQpOwpAQCAtMTI5OSw2ICsxMzIyLDcgQEAKIEVMQU5URUNIX0lOVF9BVFRSKHJlZ18yNiwgMHgyNik7CiBFTEFOVEVDSF9JTlRfQVRUUihkZWJ1ZywgMCk7CiBFTEFOVEVDSF9JTlRfQVRUUihwYXJpdHljaGVjaywgMCk7CitFTEFOVEVDSF9JTlRfQVRUUihjcmNfZW5hYmxlZCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICplbGFudGVjaF9hdHRyc1tdID0gewogCSZwc21vdXNlX2F0dHJfcmVnXzA3LmRhdHRyLmF0dHIsCkBAIC0xMzEzLDYgKzEzMzcsNyBAQAogCSZwc21vdXNlX2F0dHJfcmVnXzI2LmRhdHRyLmF0dHIsCiAJJnBzbW91c2VfYXR0cl9kZWJ1Zy5kYXR0ci5hdHRyLAogCSZwc21vdXNlX2F0dHJfcGFyaXR5Y2hlY2suZGF0dHIuYXR0ciwKKwkmcHNtb3VzZV9hdHRyX2NyY19lbmFibGVkLmRhdHRyLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtMTQzOSw2ICsxNDY0LDIyIEBACiB9CiAKIC8qCisgKiBTb21lIGh3X3ZlcnNpb24gNCBtb2RlbHMgZG8gbm90IHdvcmsgd2l0aCBjcmNfZGlzYWJsZWQKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIGVsYW50ZWNoX2RtaV9mb3JjZV9jcmNfZW5hYmxlZFtdID0geworI2lmIGRlZmluZWQoQ09ORklHX0RNSSkgJiYgZGVmaW5lZChDT05GSUdfWDg2KQorCXsKKwkJLyogRnVqaXRzdSBINzMwIGRvZXMgbm90IHdvcmsgd2l0aCBjcmNfZW5hYmxlZCA9PSAwICovCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDRUxTSVVTIEg3MzAiKSwKKwkJfSwKKwl9LAorI2VuZGlmCisJeyB9Cit9OworCisvKgogICogU29tZSBod192ZXJzaW9uIDMgbW9kZWxzIGdvIGludG8gZXJyb3Igc3RhdGUgd2hlbiB3ZSB0cnkgdG8gc2V0CiAgKiBiaXQgMyBhbmQvb3IgYml0IDEgb2YgcjEwLgogICovCkBAIC0xNTEzLDcgKzE1NTQsOCBAQAogCSAqIFRoZSBzaWduYXR1cmVzIG9mIHYzIGFuZCB2NCBwYWNrZXRzIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlCiAJICogdmFsdWUgb2YgdGhpcyBoYXJkd2FyZSBmbGFnLgogCSAqLwotCWV0ZC0+Y3JjX2VuYWJsZWQgPSAoKGV0ZC0+ZndfdmVyc2lvbiAmIDB4NDAwMCkgPT0gMHg0MDAwKTsKKwlldGQtPmNyY19lbmFibGVkID0gKGV0ZC0+ZndfdmVyc2lvbiAmIDB4NDAwMCkgPT0gMHg0MDAwIHx8CisJCQkgICBkbWlfY2hlY2tfc3lzdGVtKGVsYW50ZWNoX2RtaV9mb3JjZV9jcmNfZW5hYmxlZCk7CiAKIAkvKiBFbmFibGUgcmVhbCBoYXJkd2FyZSByZXNvbHV0aW9uIG9uIGh3X3ZlcnNpb24gMyA/ICovCiAJZXRkLT5zZXRfaHdfcmVzb2x1dGlvbiA9ICFkbWlfY2hlY2tfc3lzdGVtKG5vX2h3X3Jlc19kbWlfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKaW5kZXggOTAzMWEwYS4uZjk0NzI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCkBAIC0xMzUsMTQgKzEzNSwxOCBAQAogCQkxMjMyLCA1NzEwLCAxMTU2LCA0Njk2CiAJfSwKIAl7Ci0JCShjb25zdCBjaGFyICogY29uc3QgW10peyJMRU4wMDM0IiwgIkxFTjAwMzYiLCAiTEVOMjAwMiIsCi0JCQkJCSJMRU4yMDA0IiwgTlVMTH0sCisJCShjb25zdCBjaGFyICogY29uc3QgW10peyJMRU4wMDM0IiwgIkxFTjAwMzYiLCAiTEVOMDAzOSIsCisJCQkJCSJMRU4yMDAyIiwgIkxFTjIwMDQiLCBOVUxMfSwKIAkJMTAyNCwgNTExMiwgMjAyNCwgNDgzMgogCX0sCiAJewogCQkoY29uc3QgY2hhciAqIGNvbnN0IFtdKXsiTEVOMjAwMSIsIE5VTEx9LAogCQkxMDI0LCA1MDIyLCAyNTA4LCA0ODMyCiAJfSwKKwl7CisJCShjb25zdCBjaGFyICogY29uc3QgW10peyJMRU4yMDA2IiwgTlVMTH0sCisJCTEyNjQsIDU2NzUsIDExNzEsIDQ2ODgKKwl9LAogCXsgfQogfTsKIApAQCAtMTYzLDYgKzE2Nyw3IEBACiAJIkxFTjAwMzYiLCAvKiBUNDQwICovCiAJIkxFTjAwMzciLAogCSJMRU4wMDM4IiwKKwkiTEVOMDAzOSIsIC8qIFQ0NDBzICovCiAJIkxFTjAwNDEiLAogCSJMRU4wMDQyIiwgLyogWW9nYSAqLwogCSJMRU4wMDQ1IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvS2NvbmZpZyBiL2RyaXZlcnMvaW9tbXUvS2NvbmZpZwppbmRleCBkZDUxMTIyLi42ZGJmYmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L0tjb25maWcKKysrIGIvZHJpdmVycy9pb21tdS9LY29uZmlnCkBAIC0xNjMsMTQgKzE2MywxNCBAQAogCSAgaGFyZHdhcmUgaW5jbHVkZWQgb24gVGVncmEgU29Dcy4KIAogY29uZmlnIFRFR1JBX0lPTU1VX1NNTVUKLQlib29sICJUZWdyYSBTTU1VIElPTU1VIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX1RFR1JBICYmIFRFR1JBX0FIQgorCWJvb2wgIk5WSURJQSBUZWdyYSBTTU1VIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX1RFR1JBCisJZGVwZW5kcyBvbiBURUdSQV9BSEIKKwlkZXBlbmRzIG9uIFRFR1JBX01DCiAJc2VsZWN0IElPTU1VX0FQSQogCWhlbHAKLQkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgcmVtYXBwaW5nIGRpc2NvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5Ci0JICBzaGFyZWQgd2l0aCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbnRvIGNvbnRpZ3VvdXMgSS9PIHZpcnR1YWwKLQkgIHNwYWNlIHRocm91Z2ggdGhlIFNNTVUgKFN5c3RlbSBNZW1vcnkgTWFuYWdlbWVudCBVbml0KQotCSAgaGFyZHdhcmUgaW5jbHVkZWQgb24gVGVncmEgU29Dcy4KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBJT01NVSBoYXJkd2FyZSAoU01NVSkgZm91bmQgb24gTlZJRElBIFRlZ3JhCisJICBTb0NzIChUZWdyYTMwIHVwIHRvIFRlZ3JhMTI0KS4KIAogY29uZmlnIEVYWU5PU19JT01NVQogCWJvb2wgIkV4eW5vcyBJT01NVSBTdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWRfaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMKaW5kZXggNTA1YTlhZC4uMmQ4NGM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9hbWRfaW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L2FtZF9pb21tdS5jCkBAIC0zNDI0LDYgKzM0MjQsNyBAQAogCS5kZXRhY2hfZGV2ID0gYW1kX2lvbW11X2RldGFjaF9kZXZpY2UsCiAJLm1hcCA9IGFtZF9pb21tdV9tYXAsCiAJLnVubWFwID0gYW1kX2lvbW11X3VubWFwLAorCS5tYXBfc2cgPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzID0gYW1kX2lvbW11X2lvdmFfdG9fcGh5cywKIAkucGdzaXplX2JpdG1hcAk9IEFNRF9JT01NVV9QR1NJWkVTLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYwppbmRleCA2MDU1OGY3Li5lMzkzYWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2FybS1zbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9hcm0tc21tdS5jCkBAIC0xNjUyLDYgKzE2NTIsNyBAQAogCS5kZXRhY2hfZGV2CT0gYXJtX3NtbXVfZGV0YWNoX2RldiwKIAkubWFwCQk9IGFybV9zbW11X21hcCwKIAkudW5tYXAJCT0gYXJtX3NtbXVfdW5tYXAsCisJLm1hcF9zZwkJPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzCT0gYXJtX3NtbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlCT0gYXJtX3NtbXVfYWRkX2RldmljZSwKIAkucmVtb3ZlX2RldmljZQk9IGFybV9zbW11X3JlbW92ZV9kZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2V4eW5vcy1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9leHlub3MtaW9tbXUuYwppbmRleCA3NDIzMzE4Li4yODM3MmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2V4eW5vcy1pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvZXh5bm9zLWlvbW11LmMKQEAgLTExNzgsNiArMTE3OCw3IEBACiAJLmRldGFjaF9kZXYgPSBleHlub3NfaW9tbXVfZGV0YWNoX2RldmljZSwKIAkubWFwID0gZXh5bm9zX2lvbW11X21hcCwKIAkudW5tYXAgPSBleHlub3NfaW9tbXVfdW5tYXAsCisJLm1hcF9zZyA9IGRlZmF1bHRfaW9tbXVfbWFwX3NnLAogCS5pb3ZhX3RvX3BoeXMgPSBleHlub3NfaW9tbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlID0gZXh5bm9zX2lvbW11X2FkZF9kZXZpY2UsCiAJLnJlbW92ZV9kZXZpY2UgPSBleHlub3NfaW9tbXVfcmVtb3ZlX2RldmljZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYwppbmRleCBhMjdkNmNiLi4wMmNkMjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jCkBAIC00NDY3LDYgKzQ0NjcsNyBAQAogCS5kZXRhY2hfZGV2CT0gaW50ZWxfaW9tbXVfZGV0YWNoX2RldmljZSwKIAkubWFwCQk9IGludGVsX2lvbW11X21hcCwKIAkudW5tYXAJCT0gaW50ZWxfaW9tbXVfdW5tYXAsCisJLm1hcF9zZwkJPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzCT0gaW50ZWxfaW9tbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlCT0gaW50ZWxfaW9tbXVfYWRkX2RldmljZSwKIAkucmVtb3ZlX2RldmljZQk9IGludGVsX2lvbW11X3JlbW92ZV9kZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2lvbW11LmMKaW5kZXggZWQ4YjA0OC4uMDJlNDMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUuYwpAQCAtODE4LDcgKzgxOCwxNSBAQAogCQlrZnJlZShuYik7CiAJCXJldHVybiBlcnI7CiAJfQotCXJldHVybiBidXNfZm9yX2VhY2hfZGV2KGJ1cywgTlVMTCwgJmNiLCBhZGRfaW9tbXVfZ3JvdXApOworCisJZXJyID0gYnVzX2Zvcl9lYWNoX2RldihidXMsIE5VTEwsICZjYiwgYWRkX2lvbW11X2dyb3VwKTsKKwlpZiAoZXJyKSB7CisJCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKGJ1cywgbmIpOworCQlrZnJlZShuYik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtODM2LDEzICs4NDQsMTkgQEAKICAqLwogaW50IGJ1c19zZXRfaW9tbXUoc3RydWN0IGJ1c190eXBlICpidXMsIGNvbnN0IHN0cnVjdCBpb21tdV9vcHMgKm9wcykKIHsKKwlpbnQgZXJyOworCiAJaWYgKGJ1cy0+aW9tbXVfb3BzICE9IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlidXMtPmlvbW11X29wcyA9IG9wczsKIAogCS8qIERvIElPTU1VIHNwZWNpZmljIHNldHVwIGZvciB0aGlzIGJ1cy10eXBlICovCi0JcmV0dXJuIGlvbW11X2J1c19pbml0KGJ1cywgb3BzKTsKKwllcnIgPSBpb21tdV9idXNfaW5pdChidXMsIG9wcyk7CisJaWYgKGVycikKKwkJYnVzLT5pb21tdV9vcHMgPSBOVUxMOworCisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJ1c19zZXRfaW9tbXUpOwogCkBAIC0xMTI0LDYgKzExMzgsMzggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbW11X3VubWFwKTsKIAorc2l6ZV90IGRlZmF1bHRfaW9tbXVfbWFwX3NnKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAorCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cywgaW50IHByb3QpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCXNpemVfdCBtYXBwZWQgPSAwOworCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CisKKwlmb3JfZWFjaF9zZyhzZywgcywgbmVudHMsIGkpIHsKKwkJcGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhzZ19wYWdlKHMpKTsKKworCQkvKiBXZSBhcmUgbWFwcGluZyBvbiBwYWdlIGJvdW5kYXJ5cywgc28gb2Zmc2V0IG11c3QgYmUgMCAqLworCQlpZiAocy0+b2Zmc2V0KQorCQkJZ290byBvdXRfZXJyOworCisJCXJldCA9IGlvbW11X21hcChkb21haW4sIGlvdmEgKyBtYXBwZWQsIHBoeXMsIHMtPmxlbmd0aCwgcHJvdCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9lcnI7CisKKwkJbWFwcGVkICs9IHMtPmxlbmd0aDsKKwl9CisKKwlyZXR1cm4gbWFwcGVkOworCitvdXRfZXJyOgorCS8qIHVuZG8gbWFwcGluZ3MgYWxyZWFkeSBkb25lICovCisJaW9tbXVfdW5tYXAoZG9tYWluLCBpb3ZhLCBtYXBwZWQpOworCisJcmV0dXJuIDA7CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRlZmF1bHRfaW9tbXVfbWFwX3NnKTsKIAogaW50IGlvbW11X2RvbWFpbl93aW5kb3dfZW5hYmxlKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdTMyIHduZF9uciwKIAkJCSAgICAgICBwaHlzX2FkZHJfdCBwYWRkciwgdTY0IHNpemUsIGludCBwcm90KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pcG1tdS12bXNhLmMgYi9kcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYwppbmRleCA3ZGFiNWNiLi5lNTA5YzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYworKysgYi9kcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYwpAQCAtMTEyNyw2ICsxMTI3LDcgQEAKIAkuZGV0YWNoX2RldiA9IGlwbW11X2RldGFjaF9kZXZpY2UsCiAJLm1hcCA9IGlwbW11X21hcCwKIAkudW5tYXAgPSBpcG1tdV91bm1hcCwKKwkubWFwX3NnID0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLmlvdmFfdG9fcGh5cyA9IGlwbW11X2lvdmFfdG9fcGh5cywKIAkuYWRkX2RldmljZSA9IGlwbW11X2FkZF9kZXZpY2UsCiAJLnJlbW92ZV9kZXZpY2UgPSBpcG1tdV9yZW1vdmVfZGV2aWNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pcnFfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuYwppbmRleCA3NGExNzY3Li4yYzNmNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuYworKysgYi9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuYwpAQCAtNTYsMTkgKzU2LDEzIEBACiAJdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2M7CiAKLQlXQVJOX09OKCFsaXN0X2lzX3Npbmd1bGFyKCZkZXYtPm1zaV9saXN0KSk7CiAJbXNpZGVzYyA9IGxpc3RfZW50cnkoZGV2LT5tc2lfbGlzdC5uZXh0LCBzdHJ1Y3QgbXNpX2Rlc2MsIGxpc3QpOwotCVdBUk5fT04obXNpZGVzYy0+aXJxKTsKLQlXQVJOX09OKG1zaWRlc2MtPm1zaV9hdHRyaWIubXVsdGlwbGUpOwotCVdBUk5fT04obXNpZGVzYy0+bnZlY191c2VkKTsKIAogCWlycSA9IGlycV9hbGxvY19od2lycXMobnZlYywgZGV2X3RvX25vZGUoJmRldi0+ZGV2KSk7CiAJaWYgKGlycSA9PSAwKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCW52ZWNfcG93MiA9IF9fcm91bmR1cF9wb3dfb2ZfdHdvKG52ZWMpOwotCW1zaWRlc2MtPm52ZWNfdXNlZCA9IG52ZWM7Ci0JbXNpZGVzYy0+bXNpX2F0dHJpYi5tdWx0aXBsZSA9IGlsb2cyKG52ZWNfcG93Mik7CiAJZm9yIChzdWJfaGFuZGxlID0gMDsgc3ViX2hhbmRsZSA8IG52ZWM7IHN1Yl9oYW5kbGUrKykgewogCQlpZiAoIXN1Yl9oYW5kbGUpIHsKIAkJCWluZGV4ID0gbXNpX2FsbG9jX3JlbWFwcGVkX2lycShkZXYsIGlycSwgbnZlY19wb3cyKTsKQEAgLTk2LDggKzkwLDYgQEAKIAkgKiBJUlFzIGZyb20gdGVhcmluZyBkb3duIGFnYWluIGluIGRlZmF1bHRfdGVhcmRvd25fbXNpX2lycXMoKQogCSAqLwogCW1zaWRlc2MtPmlycSA9IDA7Ci0JbXNpZGVzYy0+bnZlY191c2VkID0gMDsKLQltc2lkZXNjLT5tc2lfYXR0cmliLm11bHRpcGxlID0gMDsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L21zbV9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9tc21faW9tbXUuYwppbmRleCA2ZTNkY2MyOC4uMWM3Yjc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9tc21faW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L21zbV9pb21tdS5jCkBAIC02ODEsNiArNjgxLDcgQEAKIAkuZGV0YWNoX2RldiA9IG1zbV9pb21tdV9kZXRhY2hfZGV2LAogCS5tYXAgPSBtc21faW9tbXVfbWFwLAogCS51bm1hcCA9IG1zbV9pb21tdV91bm1hcCwKKwkubWFwX3NnID0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLmlvdmFfdG9fcGh5cyA9IG1zbV9pb21tdV9pb3ZhX3RvX3BoeXMsCiAJLnBnc2l6ZV9iaXRtYXAgPSBNU01fSU9NTVVfUEdTSVpFUywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L29tYXAtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvb21hcC1pb21tdS5jCmluZGV4IDM2Mjc4ODcuLjE4MDAzYzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L29tYXAtaW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L29tYXAtaW9tbXUuYwpAQCAtMTI4OCw2ICsxMjg4LDcgQEAKIAkuZGV0YWNoX2Rldgk9IG9tYXBfaW9tbXVfZGV0YWNoX2RldiwKIAkubWFwCQk9IG9tYXBfaW9tbXVfbWFwLAogCS51bm1hcAkJPSBvbWFwX2lvbW11X3VubWFwLAorCS5tYXBfc2cJCT0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLmlvdmFfdG9fcGh5cwk9IG9tYXBfaW9tbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlCT0gb21hcF9pb21tdV9hZGRfZGV2aWNlLAogCS5yZW1vdmVfZGV2aWNlCT0gb21hcF9pb21tdV9yZW1vdmVfZGV2aWNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9zaG1vYmlsZS1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9zaG1vYmlsZS1pb21tdS5jCmluZGV4IDEzMzNlNmZiLi5mMWIwMDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L3NobW9iaWxlLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9zaG1vYmlsZS1pb21tdS5jCkBAIC0zNjEsNiArMzYxLDcgQEAKIAkuZGV0YWNoX2RldiA9IHNobW9iaWxlX2lvbW11X2RldGFjaF9kZXZpY2UsCiAJLm1hcCA9IHNobW9iaWxlX2lvbW11X21hcCwKIAkudW5tYXAgPSBzaG1vYmlsZV9pb21tdV91bm1hcCwKKwkubWFwX3NnID0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLmlvdmFfdG9fcGh5cyA9IHNobW9iaWxlX2lvbW11X2lvdmFfdG9fcGh5cywKIAkuYWRkX2RldmljZSA9IHNobW9iaWxlX2lvbW11X2FkZF9kZXZpY2UsCiAJLnBnc2l6ZV9iaXRtYXAgPSBTWl8xTSB8IFNaXzY0SyB8IFNaXzRLLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS90ZWdyYS1zbW11LmMgYi9kcml2ZXJzL2lvbW11L3RlZ3JhLXNtbXUuYwppbmRleCAzYWZkZjQzLi42ZTEzNGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L3RlZ3JhLXNtbXUuYworKysgYi9kcml2ZXJzL2lvbW11L3RlZ3JhLXNtbXUuYwpAQCAtMSwxMjk1ICsxLDczMiBAQAogLyoKLSAqIElPTU1VIEFQSSBmb3IgU01NVSBpbiBUZWdyYTMwCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEzLCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNkZWZpbmUgcHJfZm10KGZtdCkJIiVzKCk6ICIgZm10LCBfX2Z1bmNfXwotCiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfaW9tbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzb2MvdGVncmEvYWhiLmg+CisjaW5jbHVkZSA8c29jL3RlZ3JhL21jLmg+CiAKLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CitzdHJ1Y3QgdGVncmFfc21tdSB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotZW51bSBzbW11X2h3Z3JwIHsKLQlIV0dSUF9BRkksCi0JSFdHUlBfQVZQQywKLQlIV0dSUF9EQywKLQlIV0dSUF9EQ0IsCi0JSFdHUlBfRVBQLAotCUhXR1JQX0cyLAotCUhXR1JQX0hDLAotCUhXR1JQX0hEQSwKLQlIV0dSUF9JU1AsCi0JSFdHUlBfTVBFLAotCUhXR1JQX05WLAotCUhXR1JQX05WMiwKLQlIV0dSUF9QUENTLAotCUhXR1JQX1NBVEEsCi0JSFdHUlBfVkRFLAotCUhXR1JQX1ZJLAorCXN0cnVjdCB0ZWdyYV9tYyAqbWM7CisJY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc29jICpzb2M7CiAKLQlIV0dSUF9DT1VOVCwKKwl1bnNpZ25lZCBsb25nICphc2lkczsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAotCUhXR1JQX0VORCA9IH4wLAorCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLSNkZWZpbmUgSFdHX0FGSQkJKDEgPDwgSFdHUlBfQUZJKQotI2RlZmluZSBIV0dfQVZQQwkoMSA8PCBIV0dSUF9BVlBDKQotI2RlZmluZSBIV0dfREMJCSgxIDw8IEhXR1JQX0RDKQotI2RlZmluZSBIV0dfRENCCQkoMSA8PCBIV0dSUF9EQ0IpCi0jZGVmaW5lIEhXR19FUFAJCSgxIDw8IEhXR1JQX0VQUCkKLSNkZWZpbmUgSFdHX0cyCQkoMSA8PCBIV0dSUF9HMikKLSNkZWZpbmUgSFdHX0hDCQkoMSA8PCBIV0dSUF9IQykKLSNkZWZpbmUgSFdHX0hEQQkJKDEgPDwgSFdHUlBfSERBKQotI2RlZmluZSBIV0dfSVNQCQkoMSA8PCBIV0dSUF9JU1ApCi0jZGVmaW5lIEhXR19NUEUJCSgxIDw8IEhXR1JQX01QRSkKLSNkZWZpbmUgSFdHX05WCQkoMSA8PCBIV0dSUF9OVikKLSNkZWZpbmUgSFdHX05WMgkJKDEgPDwgSFdHUlBfTlYyKQotI2RlZmluZSBIV0dfUFBDUwkoMSA8PCBIV0dSUF9QUENTKQotI2RlZmluZSBIV0dfU0FUQQkoMSA8PCBIV0dSUF9TQVRBKQotI2RlZmluZSBIV0dfVkRFCQkoMSA8PCBIV0dSUF9WREUpCi0jZGVmaW5lIEhXR19WSQkJKDEgPDwgSFdHUlBfVkkpCi0KLS8qIGJpdG1hcCBvZiB0aGUgcGFnZSBzaXplcyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0jZGVmaW5lIFNNTVVfSU9NTVVfUEdTSVpFUwkoU1pfNEspCi0KLSNkZWZpbmUgU01NVV9DT05GSUcJCQkJMHgxMAotI2RlZmluZSBTTU1VX0NPTkZJR19ESVNBQkxFCQkJMAotI2RlZmluZSBTTU1VX0NPTkZJR19FTkFCTEUJCQkxCi0KLS8qIFJFVklTSVQ6IFRvIHN1cHBvcnQgbXVsdGlwbGUgTUNzICovCi1lbnVtIHsKLQlfTUMgPSAwLAorc3RydWN0IHRlZ3JhX3NtbXVfYXMgeworCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKKwlzdHJ1Y3QgdGVncmFfc21tdSAqc21tdTsKKwl1bnNpZ25lZCBpbnQgdXNlX2NvdW50OworCXN0cnVjdCBwYWdlICpjb3VudDsKKwlzdHJ1Y3QgcGFnZSAqcGQ7CisJdW5zaWduZWQgaWQ7CisJdTMyIGF0dHI7CiB9OwogCi1lbnVtIHsKLQlfVExCID0gMCwKLQlfUFRDLAotfTsKLQotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJR19CQVNFCQkJMHgxNAotI2RlZmluZSBfX1NNTVVfQ0FDSEVfQ09ORklHKG1jLCBjYWNoZSkJCShTTU1VX0NBQ0hFX0NPTkZJR19CQVNFICsgNCAqIGNhY2hlKQotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJRyhjYWNoZSkJCV9fU01NVV9DQUNIRV9DT05GSUcoX01DLCBjYWNoZSkKLQotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19TSElGVAkJMzEKLSNkZWZpbmUgU01NVV9DQUNIRV9DT05GSUdfU1RBVFNfRU5BQkxFCQkoMSA8PCBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19TSElGVCkKLSNkZWZpbmUgU01NVV9DQUNIRV9DT05GSUdfU1RBVFNfVEVTVF9TSElGVAkzMAotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19URVNUCQkoMSA8PCBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19URVNUX1NISUZUKQotCi0jZGVmaW5lIFNNTVVfVExCX0NPTkZJR19ISVRfVU5ERVJfTUlTU19fRU5BQkxFCSgxIDw8IDI5KQotI2RlZmluZSBTTU1VX1RMQl9DT05GSUdfQUNUSVZFX0xJTkVTX19WQUxVRQkweDEwCi0jZGVmaW5lIFNNTVVfVExCX0NPTkZJR19SRVNFVF9WQUwJCTB4MjAwMDAwMTAKLQotI2RlZmluZSBTTU1VX1BUQ19DT05GSUdfQ0FDSEVfX0VOQUJMRQkJKDEgPDwgMjkpCi0jZGVmaW5lIFNNTVVfUFRDX0NPTkZJR19JTkRFWF9NQVBfX1BBVFRFUk4JMHgzZgotI2RlZmluZSBTTU1VX1BUQ19DT05GSUdfUkVTRVRfVkFMCQkweDIwMDAwMDNmCi0KLSNkZWZpbmUgU01NVV9QVEJfQVNJRAkJCQkweDFjCi0jZGVmaW5lIFNNTVVfUFRCX0FTSURfQ1VSUkVOVF9TSElGVAkJMAotCi0jZGVmaW5lIFNNTVVfUFRCX0RBVEEJCQkJMHgyMAotI2RlZmluZSBTTU1VX1BUQl9EQVRBX1JFU0VUX1ZBTAkJCTAKLSNkZWZpbmUgU01NVV9QVEJfREFUQV9BU0lEX05PTlNFQ1VSRV9TSElGVAkyOQotI2RlZmluZSBTTU1VX1BUQl9EQVRBX0FTSURfV1JJVEFCTEVfU0hJRlQJMzAKLSNkZWZpbmUgU01NVV9QVEJfREFUQV9BU0lEX1JFQURBQkxFX1NISUZUCTMxCi0KLSNkZWZpbmUgU01NVV9UTEJfRkxVU0gJCQkJMHgzMAotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9BTEwJCTAKLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfU0VDVElPTgkJMgotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9HUk9VUAkJMwotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX1NISUZUCQkyOQotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX0RJU0FCTEUJMAotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX0VOQUJMRQkxCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfU0hJRlQJCTMxCi0KLSNkZWZpbmUgU01NVV9QVENfRkxVU0gJCQkJMHgzNAotI2RlZmluZSBTTU1VX1BUQ19GTFVTSF9UWVBFX0FMTAkJCTAKLSNkZWZpbmUgU01NVV9QVENfRkxVU0hfVFlQRV9BRFIJCQkxCi0jZGVmaW5lIFNNTVVfUFRDX0ZMVVNIX0FEUl9TSElGVAkJNAotCi0jZGVmaW5lIFNNTVVfQVNJRF9TRUNVUklUWQkJCTB4MzgKLQotI2RlZmluZSBTTU1VX1NUQVRTX0NBQ0hFX0NPVU5UX0JBU0UJCTB4MWYwCi0KLSNkZWZpbmUgU01NVV9TVEFUU19DQUNIRV9DT1VOVChtYywgY2FjaGUsIGhpdG1pc3MpCQlcCi0JKFNNTVVfU1RBVFNfQ0FDSEVfQ09VTlRfQkFTRSArIDggKiBjYWNoZSArIDQgKiBoaXRtaXNzKQotCi0jZGVmaW5lIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzAJCTB4MjI4Ci0jZGVmaW5lIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzEJCTB4MjJjCi0jZGVmaW5lIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzIJCTB4MjMwCi0KLSNkZWZpbmUgU01NVV9BRklfQVNJRAkweDIzOCAgIC8qIFBDSUUgKi8KLSNkZWZpbmUgU01NVV9BVlBDX0FTSUQJMHgyM2MgICAvKiBBVlAgKi8KLSNkZWZpbmUgU01NVV9EQ19BU0lECTB4MjQwICAgLyogRGlzcGxheSBjb250cm9sbGVyICovCi0jZGVmaW5lIFNNTVVfRENCX0FTSUQJMHgyNDQgICAvKiBEaXNwbGF5IGNvbnRyb2xsZXIgQiAqLwotI2RlZmluZSBTTU1VX0VQUF9BU0lECTB4MjQ4ICAgLyogRW5jb2RlciBwcmUtcHJvY2Vzc29yICovCi0jZGVmaW5lIFNNTVVfRzJfQVNJRAkweDI0YyAgIC8qIDJEIGVuZ2luZSAqLwotI2RlZmluZSBTTU1VX0hDX0FTSUQJMHgyNTAgICAvKiBIb3N0MXggKi8KLSNkZWZpbmUgU01NVV9IREFfQVNJRAkweDI1NCAgIC8qIEhpZ2gtZGVmIGF1ZGlvICovCi0jZGVmaW5lIFNNTVVfSVNQX0FTSUQJMHgyNTggICAvKiBJbWFnZSBzaWduYWwgcHJvY2Vzc29yICovCi0jZGVmaW5lIFNNTVVfTVBFX0FTSUQJMHgyNjQgICAvKiBNUEVHIGVuY29kZXIgKi8KLSNkZWZpbmUgU01NVV9OVl9BU0lECTB4MjY4ICAgLyogKDNEKSAqLwotI2RlZmluZSBTTU1VX05WMl9BU0lECTB4MjZjICAgLyogKDNEKSAqLwotI2RlZmluZSBTTU1VX1BQQ1NfQVNJRAkweDI3MCAgIC8qIEFIQiAqLwotI2RlZmluZSBTTU1VX1NBVEFfQVNJRAkweDI3OCAgIC8qIFNBVEEgKi8KLSNkZWZpbmUgU01NVV9WREVfQVNJRAkweDI3YyAgIC8qIFZpZGVvIGRlY29kZXIgKi8KLSNkZWZpbmUgU01NVV9WSV9BU0lECTB4MjgwICAgLyogVmlkZW8gaW5wdXQgKi8KLQotI2RlZmluZSBTTU1VX1BERV9ORVhUX1NISUZUCQkyOAotCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX1ZBX1NFQ1RJT05fX01BU0sJCTB4ZmZjMDAwMDAKLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfVkFfU0VDVElPTl9fU0hJRlQJMTIgLyogcmlnaHQgc2hpZnQgKi8KLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfVkFfR1JPVVBfX01BU0sJCTB4ZmZmZmMwMDAKLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfVkFfR1JPVVBfX1NISUZUCQkxMiAvKiByaWdodCBzaGlmdCAqLwotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQShpb3ZhLCB3aGljaCkJXAotCSgoKChpb3ZhKSAmIFNNTVVfVExCX0ZMVVNIX1ZBXyMjd2hpY2gjI19fTUFTSykgPj4gXAotCQlTTU1VX1RMQl9GTFVTSF9WQV8jI3doaWNoIyNfX1NISUZUKSB8CVwKLQlTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF8jI3doaWNoKQotI2RlZmluZSBTTU1VX1BUQl9BU0lEX0NVUihuKQlcCi0JCSgobikgPDwgU01NVV9QVEJfQVNJRF9DVVJSRU5UX1NISUZUKQotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX2Rpc2FibGUJCVwKLQkJKFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfRElTQUJMRSA8PAlcCi0JCQlTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX1NISUZUKQotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX19FTkFCTEUJCVwKLQkJKFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfRU5BQkxFIDw8CVwKLQkJCVNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfU0hJRlQpCi0KLSNkZWZpbmUgU01NVV9QQUdFX1NISUZUIDEyCi0jZGVmaW5lIFNNTVVfUEFHRV9TSVpFCSgxIDw8IFNNTVVfUEFHRV9TSElGVCkKLSNkZWZpbmUgU01NVV9QQUdFX01BU0sJKCgxIDw8IFNNTVVfUEFHRV9TSElGVCkgLSAxKQotCi0jZGVmaW5lIFNNTVVfUERJUl9DT1VOVAkxMDI0Ci0jZGVmaW5lIFNNTVVfUERJUl9TSVpFCShzaXplb2YodW5zaWduZWQgbG9uZykgKiBTTU1VX1BESVJfQ09VTlQpCi0jZGVmaW5lIFNNTVVfUFRCTF9DT1VOVAkxMDI0Ci0jZGVmaW5lIFNNTVVfUFRCTF9TSVpFCShzaXplb2YodW5zaWduZWQgbG9uZykgKiBTTU1VX1BUQkxfQ09VTlQpCi0jZGVmaW5lIFNNTVVfUERJUl9TSElGVAkxMgotI2RlZmluZSBTTU1VX1BERV9TSElGVAkxMgotI2RlZmluZSBTTU1VX1BURV9TSElGVAkxMgotI2RlZmluZSBTTU1VX1BGTl9NQVNLCTB4MDAwZmZmZmYKLQotI2RlZmluZSBTTU1VX0FERFJfVE9fUEZOKGFkZHIpCSgoYWRkcikgPj4gMTIpCi0jZGVmaW5lIFNNTVVfQUREUl9UT19QRE4oYWRkcikJKChhZGRyKSA+PiAyMikKLSNkZWZpbmUgU01NVV9QRE5fVE9fQUREUihwZG4pCSgocGRuKSA8PCAyMikKLQotI2RlZmluZSBfUkVBREFCTEUJKDEgPDwgU01NVV9QVEJfREFUQV9BU0lEX1JFQURBQkxFX1NISUZUKQotI2RlZmluZSBfV1JJVEFCTEUJKDEgPDwgU01NVV9QVEJfREFUQV9BU0lEX1dSSVRBQkxFX1NISUZUKQotI2RlZmluZSBfTk9OU0VDVVJFCSgxIDw8IFNNTVVfUFRCX0RBVEFfQVNJRF9OT05TRUNVUkVfU0hJRlQpCi0jZGVmaW5lIF9QREVfTkVYVAkoMSA8PCBTTU1VX1BERV9ORVhUX1NISUZUKQotI2RlZmluZSBfTUFTS19BVFRSCShfUkVBREFCTEUgfCBfV1JJVEFCTEUgfCBfTk9OU0VDVVJFKQotCi0jZGVmaW5lIF9QRElSX0FUVFIJKF9SRUFEQUJMRSB8IF9XUklUQUJMRSB8IF9OT05TRUNVUkUpCi0KLSNkZWZpbmUgX1BERV9BVFRSCShfUkVBREFCTEUgfCBfV1JJVEFCTEUgfCBfTk9OU0VDVVJFKQotI2RlZmluZSBfUERFX0FUVFJfTgkoX1BERV9BVFRSIHwgX1BERV9ORVhUKQotI2RlZmluZSBfUERFX1ZBQ0FOVChwZG4pCSgoKHBkbikgPDwgMTApIHwgX1BERV9BVFRSKQotCi0jZGVmaW5lIF9QVEVfQVRUUgkoX1JFQURBQkxFIHwgX1dSSVRBQkxFIHwgX05PTlNFQ1VSRSkKLSNkZWZpbmUgX1BURV9WQUNBTlQoYWRkcikJKCgoYWRkcikgPj4gU01NVV9QQUdFX1NISUZUKSB8IF9QVEVfQVRUUikKLQotI2RlZmluZSBTTU1VX01LX1BESVIocGFnZSwgYXR0cikJXAotCQkoKHBhZ2VfdG9fcGh5cyhwYWdlKSA+PiBTTU1VX1BESVJfU0hJRlQpIHwgKGF0dHIpKQotI2RlZmluZSBTTU1VX01LX1BERShwYWdlLCBhdHRyKQkJXAotCQkodW5zaWduZWQgbG9uZykoKHBhZ2VfdG9fcGh5cyhwYWdlKSA+PiBTTU1VX1BERV9TSElGVCkgfCAoYXR0cikpCi0jZGVmaW5lIFNNTVVfRVhfUFRCTF9QQUdFKHBkZSkJCVwKLQkJcGZuX3RvX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHBkZSkgJiBTTU1VX1BGTl9NQVNLKQotI2RlZmluZSBTTU1VX1BGTl9UT19QVEUocGZuLCBhdHRyKQkodW5zaWduZWQgbG9uZykoKHBmbikgfCAoYXR0cikpCi0KLSNkZWZpbmUgU01NVV9BU0lEX0VOQUJMRShhc2lkKQkoKGFzaWQpIHwgKDEgPDwgMzEpKQotI2RlZmluZSBTTU1VX0FTSURfRElTQUJMRQkwCi0jZGVmaW5lIFNNTVVfQVNJRF9BU0lEKG4pCSgobikgJiB+U01NVV9BU0lEX0VOQUJMRSgwKSkKLQotI2RlZmluZSBOVU1fU01NVV9SRUdfQkFOS1MJMwotCi0jZGVmaW5lIHNtbXVfY2xpZW50X2VuYWJsZV9od2dycChjLCBtKQlzbW11X2NsaWVudF9zZXRfaHdncnAoYywgbSwgMSkKLSNkZWZpbmUgc21tdV9jbGllbnRfZGlzYWJsZV9od2dycChjKQlzbW11X2NsaWVudF9zZXRfaHdncnAoYywgMCwgMCkKLSNkZWZpbmUgX19zbW11X2NsaWVudF9lbmFibGVfaHdncnAoYywgbSkgX19zbW11X2NsaWVudF9zZXRfaHdncnAoYywgbSwgMSkKLSNkZWZpbmUgX19zbW11X2NsaWVudF9kaXNhYmxlX2h3Z3JwKGMpCV9fc21tdV9jbGllbnRfc2V0X2h3Z3JwKGMsIDAsIDApCi0KLSNkZWZpbmUgSFdHUlBfSU5JVChjbGllbnQpIFtIV0dSUF8jI2NsaWVudF0gPSBTTU1VXyMjY2xpZW50IyNfQVNJRAotCi1zdGF0aWMgY29uc3QgdTMyIHNtbXVfaHdncnBfYXNpZF9yZWdbXSA9IHsKLQlIV0dSUF9JTklUKEFGSSksCi0JSFdHUlBfSU5JVChBVlBDKSwKLQlIV0dSUF9JTklUKERDKSwKLQlIV0dSUF9JTklUKERDQiksCi0JSFdHUlBfSU5JVChFUFApLAotCUhXR1JQX0lOSVQoRzIpLAotCUhXR1JQX0lOSVQoSEMpLAotCUhXR1JQX0lOSVQoSERBKSwKLQlIV0dSUF9JTklUKElTUCksCi0JSFdHUlBfSU5JVChNUEUpLAotCUhXR1JQX0lOSVQoTlYpLAotCUhXR1JQX0lOSVQoTlYyKSwKLQlIV0dSUF9JTklUKFBQQ1MpLAotCUhXR1JQX0lOSVQoU0FUQSksCi0JSFdHUlBfSU5JVChWREUpLAotCUhXR1JQX0lOSVQoVkkpLAotfTsKLSNkZWZpbmUgSFdHUlBfQVNJRF9SRUcoeCkgKHNtbXVfaHdncnBfYXNpZF9yZWdbeF0pCi0KLS8qCi0gKiBQZXIgY2xpZW50IGZvciBhZGRyZXNzIHNwYWNlCi0gKi8KLXN0cnVjdCBzbW11X2NsaWVudCB7Ci0Jc3RydWN0IGRldmljZQkJKmRldjsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0Jc3RydWN0IHNtbXVfYXMJCSphczsKLQl1MzIJCQlod2dycDsKLX07Ci0KLS8qCi0gKiBQZXIgYWRkcmVzcyBzcGFjZQotICovCi1zdHJ1Y3Qgc21tdV9hcyB7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlCSpzbW11OwkvKiBiYWNrIHBvaW50ZXIgdG8gY29udGFpbmVyICovCi0JdW5zaWduZWQgaW50CQlhc2lkOwotCXNwaW5sb2NrX3QJCWxvY2s7CS8qIGZvciBwYWdldGFibGUgKi8KLQlzdHJ1Y3QgcGFnZQkJKnBkaXJfcGFnZTsKLQl1bnNpZ25lZCBsb25nCQlwZGlyX2F0dHI7Ci0JdW5zaWduZWQgbG9uZwkJcGRlX2F0dHI7Ci0JdW5zaWduZWQgbG9uZwkJcHRlX2F0dHI7Ci0JdW5zaWduZWQgaW50CQkqcHRlX2NvdW50OwotCi0Jc3RydWN0IGxpc3RfaGVhZAljbGllbnQ7Ci0Jc3BpbmxvY2tfdAkJY2xpZW50X2xvY2s7IC8qIGZvciBjbGllbnQgbGlzdCAqLwotfTsKLQotc3RydWN0IHNtbXVfZGVidWdmc19pbmZvIHsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXU7Ci0JaW50IG1jOwotCWludCBjYWNoZTsKLX07Ci0KLS8qCi0gKiBQZXIgU01NVSBkZXZpY2UgLSBJT01NVSBkZXZpY2UKLSAqLwotc3RydWN0IHNtbXVfZGV2aWNlIHsKLQl2b2lkIF9faW9tZW0JKnJlZ2Jhc2U7CS8qIHJlZ2lzdGVyIG9mZnNldCBiYXNlICovCi0Jdm9pZCBfX2lvbWVtCSoqcmVnczsJCS8qIHJlZ2lzdGVyIGJsb2NrIHN0YXJ0IGFkZHJlc3MgYXJyYXkgKi8KLQl2b2lkIF9faW9tZW0JKipyZWdlOwkJLyogcmVnaXN0ZXIgYmxvY2sgZW5kIGFkZHJlc3MgYXJyYXkgKi8KLQlpbnQJCW5yZWdzOwkJLyogbnVtYmVyIG9mIHJlZ2lzdGVyIGJsb2NrcyAqLwotCi0JdW5zaWduZWQgbG9uZwlpb3ZtbV9iYXNlOwkvKiByZW1hcHBhYmxlIGJhc2UgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcJcGFnZV9jb3VudDsJLyogdG90YWwgcmVtYXBwYWJsZSBzaXplICovCi0Jc3BpbmxvY2tfdAlsb2NrOwotCWNoYXIJCSpuYW1lOwotCXN0cnVjdCBkZXZpY2UJKmRldjsKLQlzdHJ1Y3QgcGFnZSAqYXZwX3ZlY3Rvcl9wYWdlOwkvKiBkdW1teSBwYWdlIHNoYXJlZCBieSBhbGwgQVMncyAqLwotCi0JLyoKLQkgKiBSZWdpc3RlciBpbWFnZSBzYXZlcnMgZm9yIHN1c3BlbmQvcmVzdW1lCi0JICovCi0JdW5zaWduZWQgbG9uZyB0cmFuc2xhdGlvbl9lbmFibGVfMDsKLQl1bnNpZ25lZCBsb25nIHRyYW5zbGF0aW9uX2VuYWJsZV8xOwotCXVuc2lnbmVkIGxvbmcgdHJhbnNsYXRpb25fZW5hYmxlXzI7Ci0JdW5zaWduZWQgbG9uZyBhc2lkX3NlY3VyaXR5OwotCi0Jc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290OwotCXN0cnVjdCBzbW11X2RlYnVnZnNfaW5mbyAqZGVidWdmc19pbmZvOwotCi0Jc3RydWN0IGRldmljZV9ub2RlICphaGI7Ci0KLQlpbnQJCW51bV9hczsKLQlzdHJ1Y3Qgc21tdV9hcwlhc1swXTsJCS8qIFJ1bi10aW1lIGFsbG9jYXRlZCBhcnJheSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBzbW11X2RldmljZSAqc21tdV9oYW5kbGU7IC8qIHVuaXF1ZSBmb3IgYSBzeXN0ZW0gKi8KLQotLyoKLSAqCVNNTVUgcmVnaXN0ZXIgYWNjZXNzb3JzCi0gKi8KLXN0YXRpYyBib29sIGlubGluZSBzbW11X3ZhbGlkX3JlZyhzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUsCi0JCQkJICB2b2lkIF9faW9tZW0gKmFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV93cml0ZWwoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsIHUzMiB2YWx1ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzbW11LT5ucmVnczsgaSsrKSB7Ci0JCWlmIChhZGRyIDwgc21tdS0+cmVnc1tpXSkKLQkJCWJyZWFrOwotCQlpZiAoYWRkciA8PSBzbW11LT5yZWdlW2ldKQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOworCXdyaXRlbCh2YWx1ZSwgc21tdS0+cmVncyArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIHNtbXVfcmVhZChzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUsIHNpemVfdCBvZmZzKQorc3RhdGljIGlubGluZSB1MzIgc21tdV9yZWFkbChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gc21tdS0+cmVnYmFzZSArIG9mZnM7Ci0KLQlCVUdfT04oIXNtbXVfdmFsaWRfcmVnKHNtbXUsIGFkZHIpKTsKLQotCXJldHVybiByZWFkbChhZGRyKTsKKwlyZXR1cm4gcmVhZGwoc21tdS0+cmVncyArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbW11X3dyaXRlKHN0cnVjdCBzbW11X2RldmljZSAqc21tdSwgdTMyIHZhbCwgc2l6ZV90IG9mZnMpCisjZGVmaW5lIFNNTVVfQ09ORklHIDB4MDEwCisjZGVmaW5lICBTTU1VX0NPTkZJR19FTkFCTEUgKDEgPDwgMCkKKworI2RlZmluZSBTTU1VX1RMQl9DT05GSUcgMHgxNAorI2RlZmluZSAgU01NVV9UTEJfQ09ORklHX0hJVF9VTkRFUl9NSVNTICgxIDw8IDI5KQorI2RlZmluZSAgU01NVV9UTEJfQ09ORklHX1JPVU5EX1JPQklOX0FSQklUUkFUSU9OICgxIDw8IDI4KQorI2RlZmluZSAgU01NVV9UTEJfQ09ORklHX0FDVElWRV9MSU5FUyh4KSAoKHgpICYgMHgzZikKKworI2RlZmluZSBTTU1VX1BUQ19DT05GSUcgMHgxOAorI2RlZmluZSAgU01NVV9QVENfQ09ORklHX0VOQUJMRSAoMSA8PCAyOSkKKyNkZWZpbmUgIFNNTVVfUFRDX0NPTkZJR19SRVFfTElNSVQoeCkgKCgoeCkgJiAweDBmKSA8PCAyNCkKKyNkZWZpbmUgIFNNTVVfUFRDX0NPTkZJR19JTkRFWF9NQVAoeCkgKCh4KSAmIDB4M2YpCisKKyNkZWZpbmUgU01NVV9QVEJfQVNJRCAweDAxYworI2RlZmluZSAgU01NVV9QVEJfQVNJRF9WQUxVRSh4KSAoKHgpICYgMHg3ZikKKworI2RlZmluZSBTTU1VX1BUQl9EQVRBIDB4MDIwCisjZGVmaW5lICBTTU1VX1BUQl9EQVRBX1ZBTFVFKHBhZ2UsIGF0dHIpIChwYWdlX3RvX3BoeXMocGFnZSkgPj4gMTIgfCAoYXR0cikpCisKKyNkZWZpbmUgU01NVV9NS19QREUocGFnZSwgYXR0cikgKHBhZ2VfdG9fcGh5cyhwYWdlKSA+PiBTTU1VX1BURV9TSElGVCB8IChhdHRyKSkKKworI2RlZmluZSBTTU1VX1RMQl9GTFVTSCAweDAzMAorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfQUxMICAgICAoMCA8PCAwKQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfU0VDVElPTiAoMiA8PCAwKQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfR1JPVVAgICAoMyA8PCAwKQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfQVNJRCh4KSAgICAgICAgICAoKCh4KSAmIDB4N2YpIDw8IDI0KQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfVkFfU0VDVElPTihhZGRyKSAoKCgoYWRkcikgJiAweGZmYzAwMDAwKSA+PiAxMikgfCBcCisJCQkJCSAgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfU0VDVElPTikKKyNkZWZpbmUgIFNNTVVfVExCX0ZMVVNIX1ZBX0dST1VQKGFkZHIpICAgKCgoKGFkZHIpICYgMHhmZmZmYzAwMCkgPj4gMTIpIHwgXAorCQkJCQkgIFNNTVVfVExCX0ZMVVNIX1ZBX01BVENIX0dST1VQKQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSCAgICAgICAoMSA8PCAzMSkKKworI2RlZmluZSBTTU1VX1BUQ19GTFVTSCAweDAzNAorI2RlZmluZSAgU01NVV9QVENfRkxVU0hfVFlQRV9BTEwgKDAgPDwgMCkKKyNkZWZpbmUgIFNNTVVfUFRDX0ZMVVNIX1RZUEVfQURSICgxIDw8IDApCisKKyNkZWZpbmUgU01NVV9QVENfRkxVU0hfSEkgMHg5YjgKKyNkZWZpbmUgIFNNTVVfUFRDX0ZMVVNIX0hJX01BU0sgMHgzCisKKy8qIHBlci1TV0dST1VQIFNNTVVfKl9BU0lEIHJlZ2lzdGVyICovCisjZGVmaW5lIFNNTVVfQVNJRF9FTkFCTEUgKDEgPDwgMzEpCisjZGVmaW5lIFNNTVVfQVNJRF9NQVNLIDB4N2YKKyNkZWZpbmUgU01NVV9BU0lEX1ZBTFVFKHgpICgoeCkgJiBTTU1VX0FTSURfTUFTSykKKworLyogcGFnZSB0YWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTTU1VX05VTV9QREUgMTAyNAorI2RlZmluZSBTTU1VX05VTV9QVEUgMTAyNAorCisjZGVmaW5lIFNNTVVfU0laRV9QRCAoU01NVV9OVU1fUERFICogNCkKKyNkZWZpbmUgU01NVV9TSVpFX1BUIChTTU1VX05VTV9QVEUgKiA0KQorCisjZGVmaW5lIFNNTVVfUERFX1NISUZUIDIyCisjZGVmaW5lIFNNTVVfUFRFX1NISUZUIDEyCisKKyNkZWZpbmUgU01NVV9QRk5fTUFTSyAweDAwMGZmZmZmCisKKyNkZWZpbmUgU01NVV9QRF9SRUFEQUJMRQkoMSA8PCAzMSkKKyNkZWZpbmUgU01NVV9QRF9XUklUQUJMRQkoMSA8PCAzMCkKKyNkZWZpbmUgU01NVV9QRF9OT05TRUNVUkUJKDEgPDwgMjkpCisKKyNkZWZpbmUgU01NVV9QREVfUkVBREFCTEUJKDEgPDwgMzEpCisjZGVmaW5lIFNNTVVfUERFX1dSSVRBQkxFCSgxIDw8IDMwKQorI2RlZmluZSBTTU1VX1BERV9OT05TRUNVUkUJKDEgPDwgMjkpCisjZGVmaW5lIFNNTVVfUERFX05FWFQJCSgxIDw8IDI4KQorCisjZGVmaW5lIFNNTVVfUFRFX1JFQURBQkxFCSgxIDw8IDMxKQorI2RlZmluZSBTTU1VX1BURV9XUklUQUJMRQkoMSA8PCAzMCkKKyNkZWZpbmUgU01NVV9QVEVfTk9OU0VDVVJFCSgxIDw8IDI5KQorCisjZGVmaW5lIFNNTVVfUERFX0FUVFIJCShTTU1VX1BERV9SRUFEQUJMRSB8IFNNTVVfUERFX1dSSVRBQkxFIHwgXAorCQkJCSBTTU1VX1BERV9OT05TRUNVUkUpCisjZGVmaW5lIFNNTVVfUFRFX0FUVFIJCShTTU1VX1BURV9SRUFEQUJMRSB8IFNNTVVfUFRFX1dSSVRBQkxFIHwgXAorCQkJCSBTTU1VX1BURV9OT05TRUNVUkUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbW11X2ZsdXNoX3B0YyhzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzbW11LT5yZWdiYXNlICsgb2ZmczsKKwlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZSA/IHBhZ2VfdG9fcGh5cyhwYWdlKSA6IDA7CisJdTMyIHZhbHVlOwogCi0JQlVHX09OKCFzbW11X3ZhbGlkX3JlZyhzbW11LCBhZGRyKSk7CisJaWYgKHBhZ2UpIHsKKwkJb2Zmc2V0ICY9IH4oc21tdS0+bWMtPnNvYy0+YXRvbV9zaXplIC0gMSk7CiAKLQl3cml0ZWwodmFsLCBhZGRyKTsKLX0KLQotI2RlZmluZSBWQV9QQUdFX1RPX1BBKHZhLCBwYWdlKQlcCi0JKHBhZ2VfdG9fcGh5cyhwYWdlKSArICgodW5zaWduZWQgbG9uZykodmEpICYgflBBR0VfTUFTSykpCi0KLSNkZWZpbmUgRkxVU0hfQ1BVX0RDQUNIRSh2YSwgcGFnZSwgc2l6ZSkJXAotCWRvIHsJXAotCQl1bnNpZ25lZCBsb25nIF9wYV8gPSBWQV9QQUdFX1RPX1BBKHZhLCBwYWdlKTsJCVwKLQkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKCh2b2lkICopKHZhKSwgKHNpemVfdCkoc2l6ZSkpOwlcCi0JCW91dGVyX2ZsdXNoX3JhbmdlKF9wYV8sIF9wYV8rKHNpemVfdCkoc2l6ZSkpOwkJXAotCX0gd2hpbGUgKDApCi0KLS8qCi0gKiBBbnkgaW50ZXJhY3Rpb24gYmV0d2VlbiBhbnkgYmxvY2sgb24gUFBTQiBhbmQgYSBibG9jayBvbiBBUEIgb3IgQUhCCi0gKiBtdXN0IGhhdmUgdGhlc2UgcmVhZC1iYWNrIGJhcnJpZXJzIHRvIGVuc3VyZSB0aGUgQVBCL0FIQiBidXMKLSAqIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlIGJlZm9yZSBpbml0aWF0aW5nIGFjdGl2aXR5IG9uIHRoZSBQUFNCCi0gKiBibG9jay4KLSAqLwotI2RlZmluZSBGTFVTSF9TTU1VX1JFR1Moc21tdSkJc21tdV9yZWFkKHNtbXUsIFNNTVVfQ09ORklHKQotCi0jZGVmaW5lIHNtbXVfY2xpZW50X2h3Z3JwKGMpICh1MzIpKChjKS0+ZGV2LT5wbGF0Zm9ybV9kYXRhKQotCi1zdGF0aWMgaW50IF9fc21tdV9jbGllbnRfc2V0X2h3Z3JwKHN0cnVjdCBzbW11X2NsaWVudCAqYywKLQkJCQkgICB1bnNpZ25lZCBsb25nIG1hcCwgaW50IG9uKQotewotCWludCBpOwotCXN0cnVjdCBzbW11X2FzICphcyA9IGMtPmFzOwotCXUzMiB2YWwsIG9mZnMsIG1hc2sgPSBTTU1VX0FTSURfRU5BQkxFKGFzLT5hc2lkKTsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBhcy0+c21tdTsKLQotCVdBUk5fT04oIW9uICYmIG1hcCk7Ci0JaWYgKG9uICYmICFtYXApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghb24pCi0JCW1hcCA9IHNtbXVfY2xpZW50X2h3Z3JwKGMpOwotCi0JZm9yX2VhY2hfc2V0X2JpdChpLCAmbWFwLCBIV0dSUF9DT1VOVCkgewotCQlvZmZzID0gSFdHUlBfQVNJRF9SRUcoaSk7Ci0JCXZhbCA9IHNtbXVfcmVhZChzbW11LCBvZmZzKTsKLQkJaWYgKG9uKSB7Ci0JCQlpZiAoV0FSTl9PTih2YWwgJiBtYXNrKSkKLQkJCQlnb3RvIGVycl9od19idXN5OwotCQkJdmFsIHw9IG1hc2s7Ci0JCX0gZWxzZSB7Ci0JCQlXQVJOX09OKCh2YWwgJiBtYXNrKSA9PSBtYXNrKTsKLQkJCXZhbCAmPSB+bWFzazsKLQkJfQotCQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgb2Zmcyk7Ci0JfQotCUZMVVNIX1NNTVVfUkVHUyhzbW11KTsKLQljLT5od2dycCA9IG1hcDsKLQlyZXR1cm4gMDsKLQotZXJyX2h3X2J1c3k6Ci0JZm9yX2VhY2hfc2V0X2JpdChpLCAmbWFwLCBIV0dSUF9DT1VOVCkgewotCQlvZmZzID0gSFdHUlBfQVNJRF9SRUcoaSk7Ci0JCXZhbCA9IHNtbXVfcmVhZChzbW11LCBvZmZzKTsKLQkJdmFsICY9IH5tYXNrOwotCQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgb2Zmcyk7Ci0JfQotCXJldHVybiAtRUJVU1k7Ci19Ci0KLXN0YXRpYyBpbnQgc21tdV9jbGllbnRfc2V0X2h3Z3JwKHN0cnVjdCBzbW11X2NsaWVudCAqYywgdTMyIG1hcCwgaW50IG9uKQotewotCXUzMiB2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc21tdV9hcyAqYXMgPSBjLT5hczsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBhcy0+c21tdTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzbW11LT5sb2NrLCBmbGFncyk7Ci0JdmFsID0gX19zbW11X2NsaWVudF9zZXRfaHdncnAoYywgbWFwLCBvbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21tdS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiB2YWw7Ci19Ci0KLS8qCi0gKiBGbHVzaCBhbGwgVExCIGVudHJpZXMgYW5kIGFsbCBQVEMgZW50cmllcwotICogQ2FsbGVyIG11c3QgbG9jayBzbW11Ci0gKi8KLXN0YXRpYyB2b2lkIHNtbXVfZmx1c2hfcmVncyhzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUsIGludCBlbmFibGUpCi17Ci0JdTMyIHZhbDsKLQotCXNtbXVfd3JpdGUoc21tdSwgU01NVV9QVENfRkxVU0hfVFlQRV9BTEwsIFNNTVVfUFRDX0ZMVVNIKTsKLQlGTFVTSF9TTU1VX1JFR1Moc21tdSk7Ci0JdmFsID0gU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfQUxMIHwKLQkJU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSF9kaXNhYmxlOwotCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBTTU1VX1RMQl9GTFVTSCk7Ci0KLQlpZiAoZW5hYmxlKQotCQlzbW11X3dyaXRlKHNtbXUsIFNNTVVfQ09ORklHX0VOQUJMRSwgU01NVV9DT05GSUcpOwotCUZMVVNIX1NNTVVfUkVHUyhzbW11KTsKLX0KLQotc3RhdGljIGludCBzbW11X3NldHVwX3JlZ3Moc3RydWN0IHNtbXVfZGV2aWNlICpzbW11KQotewotCWludCBpOwotCXUzMiB2YWw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc21tdS0+bnVtX2FzOyBpKyspIHsKLQkJc3RydWN0IHNtbXVfYXMgKmFzID0gJnNtbXUtPmFzW2ldOwotCQlzdHJ1Y3Qgc21tdV9jbGllbnQgKmM7Ci0KLQkJc21tdV93cml0ZShzbW11LCBTTU1VX1BUQl9BU0lEX0NVUihhcy0+YXNpZCksIFNNTVVfUFRCX0FTSUQpOwotCQl2YWwgPSBhcy0+cGRpcl9wYWdlID8KLQkJCVNNTVVfTUtfUERJUihhcy0+cGRpcl9wYWdlLCBhcy0+cGRpcl9hdHRyKSA6Ci0JCQlTTU1VX1BUQl9EQVRBX1JFU0VUX1ZBTDsKLQkJc21tdV93cml0ZShzbW11LCB2YWwsIFNNTVVfUFRCX0RBVEEpOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmFzLT5jbGllbnQsIGxpc3QpCi0JCQlfX3NtbXVfY2xpZW50X3NldF9od2dycChjLCBjLT5od2dycCwgMSk7Ci0JfQotCi0Jc21tdV93cml0ZShzbW11LCBzbW11LT50cmFuc2xhdGlvbl9lbmFibGVfMCwgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMCk7Ci0Jc21tdV93cml0ZShzbW11LCBzbW11LT50cmFuc2xhdGlvbl9lbmFibGVfMSwgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMSk7Ci0Jc21tdV93cml0ZShzbW11LCBzbW11LT50cmFuc2xhdGlvbl9lbmFibGVfMiwgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMik7Ci0Jc21tdV93cml0ZShzbW11LCBzbW11LT5hc2lkX3NlY3VyaXR5LCBTTU1VX0FTSURfU0VDVVJJVFkpOwotCXNtbXVfd3JpdGUoc21tdSwgU01NVV9UTEJfQ09ORklHX1JFU0VUX1ZBTCwgU01NVV9DQUNIRV9DT05GSUcoX1RMQikpOwotCXNtbXVfd3JpdGUoc21tdSwgU01NVV9QVENfQ09ORklHX1JFU0VUX1ZBTCwgU01NVV9DQUNIRV9DT05GSUcoX1BUQykpOwotCi0Jc21tdV9mbHVzaF9yZWdzKHNtbXUsIDEpOwotCi0JcmV0dXJuIHRlZ3JhX2FoYl9lbmFibGVfc21tdShzbW11LT5haGIpOwotfQotCi1zdGF0aWMgdm9pZCBmbHVzaF9wdGNfYW5kX3RsYihzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUsCi0JCSAgICAgIHN0cnVjdCBzbW11X2FzICphcywgZG1hX2FkZHJfdCBpb3ZhLAotCQkgICAgICB1bnNpZ25lZCBsb25nICpwdGUsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgaXNfcGRlKQotewotCXUzMiB2YWw7Ci0JdW5zaWduZWQgbG9uZyB0bGJfZmx1c2hfdmEgPSBpc19wZGUKLQkJPyAgU01NVV9UTEJfRkxVU0hfVkEoaW92YSwgU0VDVElPTikKLQkJOiAgU01NVV9UTEJfRkxVU0hfVkEoaW92YSwgR1JPVVApOwotCi0JdmFsID0gU01NVV9QVENfRkxVU0hfVFlQRV9BRFIgfCBWQV9QQUdFX1RPX1BBKHB0ZSwgcGFnZSk7Ci0Jc21tdV93cml0ZShzbW11LCB2YWwsIFNNTVVfUFRDX0ZMVVNIKTsKLQlGTFVTSF9TTU1VX1JFR1Moc21tdSk7Ci0JdmFsID0gdGxiX2ZsdXNoX3ZhIHwKLQkJU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSF9fRU5BQkxFIHwKLQkJKGFzLT5hc2lkIDw8IFNNTVVfVExCX0ZMVVNIX0FTSURfU0hJRlQpOwotCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBTTU1VX1RMQl9GTFVTSCk7Ci0JRkxVU0hfU01NVV9SRUdTKHNtbXUpOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX3B0Ymwoc3RydWN0IHNtbXVfYXMgKmFzLCBkbWFfYWRkcl90IGlvdmEpCi17Ci0JdW5zaWduZWQgbG9uZyBwZG4gPSBTTU1VX0FERFJfVE9fUEROKGlvdmEpOwotCXVuc2lnbmVkIGxvbmcgKnBkaXIgPSAodW5zaWduZWQgbG9uZyAqKXBhZ2VfYWRkcmVzcyhhcy0+cGRpcl9wYWdlKTsKLQotCWlmIChwZGlyW3Bkbl0gIT0gX1BERV9WQUNBTlQocGRuKSkgewotCQlkZXZfZGJnKGFzLT5zbW11LT5kZXYsICJwZG46ICVseFxuIiwgcGRuKTsKLQotCQlDbGVhclBhZ2VSZXNlcnZlZChTTU1VX0VYX1BUQkxfUEFHRShwZGlyW3Bkbl0pKTsKLQkJX19mcmVlX3BhZ2UoU01NVV9FWF9QVEJMX1BBR0UocGRpcltwZG5dKSk7Ci0JCXBkaXJbcGRuXSA9IF9QREVfVkFDQU5UKHBkbik7Ci0JCUZMVVNIX0NQVV9EQ0FDSEUoJnBkaXJbcGRuXSwgYXMtPnBkaXJfcGFnZSwgc2l6ZW9mIHBkaXJbcGRuXSk7Ci0JCWZsdXNoX3B0Y19hbmRfdGxiKGFzLT5zbW11LCBhcywgaW92YSwgJnBkaXJbcGRuXSwKLQkJCQkgIGFzLT5wZGlyX3BhZ2UsIDEpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZnJlZV9wZGlyKHN0cnVjdCBzbW11X2FzICphcykKLXsKLQl1bnNpZ25lZCBhZGRyOwotCWludCBjb3VudDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcy0+c21tdS0+ZGV2OwotCi0JaWYgKCFhcy0+cGRpcl9wYWdlKQotCQlyZXR1cm47Ci0KLQlhZGRyID0gYXMtPnNtbXUtPmlvdm1tX2Jhc2U7Ci0JY291bnQgPSBhcy0+c21tdS0+cGFnZV9jb3VudDsKLQl3aGlsZSAoY291bnQtLSA+IDApIHsKLQkJZnJlZV9wdGJsKGFzLCBhZGRyKTsKLQkJYWRkciArPSBTTU1VX1BBR0VfU0laRSAqIFNNTVVfUFRCTF9DT1VOVDsKLQl9Ci0JQ2xlYXJQYWdlUmVzZXJ2ZWQoYXMtPnBkaXJfcGFnZSk7Ci0JX19mcmVlX3BhZ2UoYXMtPnBkaXJfcGFnZSk7Ci0JYXMtPnBkaXJfcGFnZSA9IE5VTEw7Ci0JZGV2bV9rZnJlZShkZXYsIGFzLT5wdGVfY291bnQpOwotCWFzLT5wdGVfY291bnQgPSBOVUxMOwotfQotCi0vKgotICogTWFwcyBQVEJMIGZvciBnaXZlbiBpb3ZhIGFuZCByZXR1cm5zIHRoZSBQVEUgYWRkcmVzcwotICogQ2FsbGVyIG11c3QgdW5tYXAgdGhlIG1hcHBlZCBQVEJMIHJldHVybmVkIGluICpwdGJsX3BhZ2VfcAotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAqbG9jYXRlX3B0ZShzdHJ1Y3Qgc21tdV9hcyAqYXMsCi0JCQkJIGRtYV9hZGRyX3QgaW92YSwgYm9vbCBhbGxvY2F0ZSwKLQkJCQkgc3RydWN0IHBhZ2UgKipwdGJsX3BhZ2VfcCwKLQkJCQkgdW5zaWduZWQgaW50ICoqY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBwdG4gPSBTTU1VX0FERFJfVE9fUEZOKGlvdmEpOwotCXVuc2lnbmVkIGxvbmcgcGRuID0gU01NVV9BRERSX1RPX1BETihpb3ZhKTsKLQl1bnNpZ25lZCBsb25nICpwZGlyID0gcGFnZV9hZGRyZXNzKGFzLT5wZGlyX3BhZ2UpOwotCXVuc2lnbmVkIGxvbmcgKnB0Ymw7Ci0KLQlpZiAocGRpcltwZG5dICE9IF9QREVfVkFDQU5UKHBkbikpIHsKLQkJLyogTWFwcGVkIGVudHJ5IHRhYmxlIGFscmVhZHkgZXhpc3RzICovCi0JCSpwdGJsX3BhZ2VfcCA9IFNNTVVfRVhfUFRCTF9QQUdFKHBkaXJbcGRuXSk7Ci0JCXB0YmwgPSBwYWdlX2FkZHJlc3MoKnB0YmxfcGFnZV9wKTsKLQl9IGVsc2UgaWYgKCFhbGxvY2F0ZSkgewotCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgewotCQlpbnQgcG47Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciA9IFNNTVVfUEROX1RPX0FERFIocGRuKTsKLQotCQkvKiBWYWNhbnQgLSBhbGxvY2F0ZSBhIG5ldyBwYWdlIHRhYmxlICovCi0JCWRldl9kYmcoYXMtPnNtbXUtPmRldiwgIk5ldyBQVEJMIHBkbjogJWx4XG4iLCBwZG4pOwotCi0JCSpwdGJsX3BhZ2VfcCA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JCWlmICghKnB0YmxfcGFnZV9wKSB7Ci0JCQlkZXZfZXJyKGFzLT5zbW11LT5kZXYsCi0JCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBzbW11X2RldmljZSBwYWdlIHRhYmxlXG4iKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCVNldFBhZ2VSZXNlcnZlZCgqcHRibF9wYWdlX3ApOwotCQlwdGJsID0gKHVuc2lnbmVkIGxvbmcgKilwYWdlX2FkZHJlc3MoKnB0YmxfcGFnZV9wKTsKLQkJZm9yIChwbiA9IDA7IHBuIDwgU01NVV9QVEJMX0NPVU5UOwotCQkgICAgIHBuKyssIGFkZHIgKz0gU01NVV9QQUdFX1NJWkUpIHsKLQkJCXB0YmxbcG5dID0gX1BURV9WQUNBTlQoYWRkcik7Ci0JCX0KLQkJRkxVU0hfQ1BVX0RDQUNIRShwdGJsLCAqcHRibF9wYWdlX3AsIFNNTVVfUFRCTF9TSVpFKTsKLQkJcGRpcltwZG5dID0gU01NVV9NS19QREUoKnB0YmxfcGFnZV9wLAotCQkJCQlhcy0+cGRlX2F0dHIgfCBfUERFX05FWFQpOwotCQlGTFVTSF9DUFVfRENBQ0hFKCZwZGlyW3Bkbl0sIGFzLT5wZGlyX3BhZ2UsIHNpemVvZiBwZGlyW3Bkbl0pOwotCQlmbHVzaF9wdGNfYW5kX3RsYihhcy0+c21tdSwgYXMsIGlvdmEsICZwZGlyW3Bkbl0sCi0JCQkJICBhcy0+cGRpcl9wYWdlLCAxKTsKLQl9Ci0JKmNvdW50ID0gJmFzLT5wdGVfY291bnRbcGRuXTsKLQotCXJldHVybiAmcHRibFtwdG4gJSBTTU1VX1BUQkxfQ09VTlRdOwotfQotCi0jaWZkZWYgQ09ORklHX1NNTVVfU0lHX0RFQlVHCi1zdGF0aWMgdm9pZCBwdXRfc2lnbmF0dXJlKHN0cnVjdCBzbW11X2FzICphcywKLQkJCSAgZG1hX2FkZHJfdCBpb3ZhLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nICp2YWRkcjsKLQotCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCXZhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwotCWlmICghdmFkZHIpCi0JCXJldHVybjsKLQotCXZhZGRyWzBdID0gaW92YTsKLQl2YWRkclsxXSA9IHBmbiA8PCBQQUdFX1NISUZUOwotCUZMVVNIX0NQVV9EQ0FDSEUodmFkZHIsIHBhZ2UsIHNpemVvZih2YWRkclswXSkgKiAyKTsKLX0KKwkJaWYgKHNtbXUtPm1jLT5zb2MtPm51bV9hZGRyZXNzX2JpdHMgPiAzMikgeworI2lmZGVmIENPTkZJR19QSFlTX0FERFJfVF82NEJJVAorCQkJdmFsdWUgPSAocGh5cyA+PiAzMikgJiBTTU1VX1BUQ19GTFVTSF9ISV9NQVNLOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc2lnbmF0dXJlKHN0cnVjdCBzbW11X2FzICphcywKLQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKLX0KKwkJCXZhbHVlID0gMDsKICNlbmRpZgorCQkJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIFNNTVVfUFRDX0ZMVVNIX0hJKTsKKwkJfQogCi0vKgotICogQ2FsbGVyIG11c3Qgbm90IGhvbGQgYXMtPmxvY2sKLSAqLwotc3RhdGljIGludCBhbGxvY19wZGlyKHN0cnVjdCBzbW11X2FzICphcykKLXsKLQl1bnNpZ25lZCBsb25nICpwZGlyLCBmbGFnczsKLQlpbnQgcGRuLCBlcnIgPSAwOwotCXUzMiB2YWw7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gYXMtPnNtbXU7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgaW50ICpjbnQ7Ci0KLQkvKgotCSAqIGRvIHRoZSBhbGxvY2F0aW9uLCB0aGVuIGdyYWIgYXMtPmxvY2sKLQkgKi8KLQljbnQgPSBkZXZtX2t6YWxsb2Moc21tdS0+ZGV2LAotCQkJICAgc2l6ZW9mKGNudFswXSkgKiBTTU1VX1BESVJfQ09VTlQsCi0JCQkgICBHRlBfS0VSTkVMKTsKLQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfRE1BKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGFzLT5wZGlyX3BhZ2UpIHsKLQkJLyogV2UgcmFjZWQsIGZyZWUgdGhlIHJlZHVuZGFudCAqLwotCQllcnIgPSAtRUFHQUlOOwotCQlnb3RvIGVycl9vdXQ7CisJCXZhbHVlID0gKHBoeXMgKyBvZmZzZXQpIHwgU01NVV9QVENfRkxVU0hfVFlQRV9BRFI7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSBTTU1VX1BUQ19GTFVTSF9UWVBFX0FMTDsKIAl9CiAKLQlpZiAoIXBhZ2UgfHwgIWNudCkgewotCQlkZXZfZXJyKHNtbXUtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBhdCAlc1xuIiwgX19mdW5jX18pOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXQ7CisJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIFNNTVVfUFRDX0ZMVVNIKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtbXVfZmx1c2hfdGxiKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11KQoreworCXNtbXVfd3JpdGVsKHNtbXUsIFNNTVVfVExCX0ZMVVNIX1ZBX01BVENIX0FMTCwgU01NVV9UTEJfRkxVU0gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV9mbHVzaF90bGJfYXNpZChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhc2lkKQoreworCXUzMiB2YWx1ZTsKKworCXZhbHVlID0gU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSCB8IFNNTVVfVExCX0ZMVVNIX0FTSUQoYXNpZCkgfAorCQlTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9BTEw7CisJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIFNNTVVfVExCX0ZMVVNIKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtbXVfZmx1c2hfdGxiX3NlY3Rpb24oc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhc2lkLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgaW92YSkKK3sKKwl1MzIgdmFsdWU7CisKKwl2YWx1ZSA9IFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0ggfCBTTU1VX1RMQl9GTFVTSF9BU0lEKGFzaWQpIHwKKwkJU01NVV9UTEJfRkxVU0hfVkFfU0VDVElPTihpb3ZhKTsKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9UTEJfRkxVU0gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV9mbHVzaF90bGJfZ3JvdXAoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsCisJCQkJCXVuc2lnbmVkIGxvbmcgYXNpZCwKKwkJCQkJdW5zaWduZWQgbG9uZyBpb3ZhKQoreworCXUzMiB2YWx1ZTsKKworCXZhbHVlID0gU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSCB8IFNNTVVfVExCX0ZMVVNIX0FTSUQoYXNpZCkgfAorCQlTTU1VX1RMQl9GTFVTSF9WQV9HUk9VUChpb3ZhKTsKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9UTEJfRkxVU0gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV9mbHVzaChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSkKK3sKKwlzbW11X3JlYWRsKHNtbXUsIFNNTVVfQ09ORklHKTsKK30KKworc3RhdGljIGludCB0ZWdyYV9zbW11X2FsbG9jX2FzaWQoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsIHVuc2lnbmVkIGludCAqaWRwKQoreworCXVuc2lnbmVkIGxvbmcgaWQ7CisKKwltdXRleF9sb2NrKCZzbW11LT5sb2NrKTsKKworCWlkID0gZmluZF9maXJzdF96ZXJvX2JpdChzbW11LT5hc2lkcywgc21tdS0+c29jLT5udW1fYXNpZHMpOworCWlmIChpZCA+PSBzbW11LT5zb2MtPm51bV9hc2lkcykgeworCQltdXRleF91bmxvY2soJnNtbXUtPmxvY2spOworCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQlhcy0+cGRpcl9wYWdlID0gcGFnZTsKLQlhcy0+cHRlX2NvdW50ID0gY250OworCXNldF9iaXQoaWQsIHNtbXUtPmFzaWRzKTsKKwkqaWRwID0gaWQ7CiAKLQlTZXRQYWdlUmVzZXJ2ZWQoYXMtPnBkaXJfcGFnZSk7Ci0JcGRpciA9IHBhZ2VfYWRkcmVzcyhhcy0+cGRpcl9wYWdlKTsKLQotCWZvciAocGRuID0gMDsgcGRuIDwgU01NVV9QRElSX0NPVU5UOyBwZG4rKykKLQkJcGRpcltwZG5dID0gX1BERV9WQUNBTlQocGRuKTsKLQlGTFVTSF9DUFVfRENBQ0hFKHBkaXIsIGFzLT5wZGlyX3BhZ2UsIFNNTVVfUERJUl9TSVpFKTsKLQl2YWwgPSBTTU1VX1BUQ19GTFVTSF9UWVBFX0FEUiB8IFZBX1BBR0VfVE9fUEEocGRpciwgYXMtPnBkaXJfcGFnZSk7Ci0Jc21tdV93cml0ZShzbW11LCB2YWwsIFNNTVVfUFRDX0ZMVVNIKTsKLQlGTFVTSF9TTU1VX1JFR1MoYXMtPnNtbXUpOwotCXZhbCA9IFNNTVVfVExCX0ZMVVNIX1ZBX01BVENIX0FMTCB8Ci0JCVNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfX0VOQUJMRSB8Ci0JCShhcy0+YXNpZCA8PCBTTU1VX1RMQl9GTFVTSF9BU0lEX1NISUZUKTsKLQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgU01NVV9UTEJfRkxVU0gpOwotCUZMVVNIX1NNTVVfUkVHUyhhcy0+c21tdSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQotCWRldm1fa2ZyZWUoc21tdS0+ZGV2LCBjbnQpOwotCWlmIChwYWdlKQotCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX3NtbXVfaW9tbXVfdW5tYXAoc3RydWN0IHNtbXVfYXMgKmFzLCBkbWFfYWRkcl90IGlvdmEpCi17Ci0JdW5zaWduZWQgbG9uZyAqcHRlOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGludCAqY291bnQ7Ci0KLQlwdGUgPSBsb2NhdGVfcHRlKGFzLCBpb3ZhLCBmYWxzZSwgJnBhZ2UsICZjb3VudCk7Ci0JaWYgKFdBUk5fT04oIXB0ZSkpCi0JCXJldHVybjsKLQotCWlmIChXQVJOX09OKCpwdGUgPT0gX1BURV9WQUNBTlQoaW92YSkpKQotCQlyZXR1cm47Ci0KLQkqcHRlID0gX1BURV9WQUNBTlQoaW92YSk7Ci0JRkxVU0hfQ1BVX0RDQUNIRShwdGUsIHBhZ2UsIHNpemVvZigqcHRlKSk7Ci0JZmx1c2hfcHRjX2FuZF90bGIoYXMtPnNtbXUsIGFzLCBpb3ZhLCBwdGUsIHBhZ2UsIDApOwotCWlmICghLS0oKmNvdW50KSkKLQkJZnJlZV9wdGJsKGFzLCBpb3ZhKTsKLX0KLQotc3RhdGljIHZvaWQgX19zbW11X2lvbW11X21hcF9wZm4oc3RydWN0IHNtbXVfYXMgKmFzLCBkbWFfYWRkcl90IGlvdmEsCi0JCQkJIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGFzLT5zbW11OwotCXVuc2lnbmVkIGxvbmcgKnB0ZTsKLQl1bnNpZ25lZCBpbnQgKmNvdW50OwotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JcHRlID0gbG9jYXRlX3B0ZShhcywgaW92YSwgdHJ1ZSwgJnBhZ2UsICZjb3VudCk7Ci0JaWYgKFdBUk5fT04oIXB0ZSkpCi0JCXJldHVybjsKLQotCWlmICgqcHRlID09IF9QVEVfVkFDQU5UKGlvdmEpKQotCQkoKmNvdW50KSsrOwotCSpwdGUgPSBTTU1VX1BGTl9UT19QVEUocGZuLCBhcy0+cHRlX2F0dHIpOwotCWlmICh1bmxpa2VseSgoKnB0ZSA9PSBfUFRFX1ZBQ0FOVChpb3ZhKSkpKQotCQkoKmNvdW50KS0tOwotCUZMVVNIX0NQVV9EQ0FDSEUocHRlLCBwYWdlLCBzaXplb2YoKnB0ZSkpOwotCWZsdXNoX3B0Y19hbmRfdGxiKHNtbXUsIGFzLCBpb3ZhLCBwdGUsIHBhZ2UsIDApOwotCXB1dF9zaWduYXR1cmUoYXMsIGlvdmEsIHBmbik7Ci19Ci0KLXN0YXRpYyBpbnQgc21tdV9pb21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCi0JCQkgIHBoeXNfYWRkcl90IHBhLCBzaXplX3QgYnl0ZXMsIGludCBwcm90KQotewotCXN0cnVjdCBzbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IF9fcGh5c190b19wZm4ocGEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkZXZfZGJnKGFzLT5zbW11LT5kZXYsICJbJWRdICUwOGx4OiVwYVxuIiwgYXMtPmFzaWQsIGlvdmEsICZwYSk7Ci0KLQlpZiAoIXBmbl92YWxpZChwZm4pKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCV9fc21tdV9pb21tdV9tYXBfcGZuKGFzLCBpb3ZhLCBwZm4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzbW11LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNpemVfdCBzbW11X2lvbW11X3VubWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAotCQkJICAgICAgIHNpemVfdCBieXRlcykKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfZnJlZV9hc2lkKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LCB1bnNpZ25lZCBpbnQgaWQpCiB7Ci0Jc3RydWN0IHNtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkZXZfZGJnKGFzLT5zbW11LT5kZXYsICJbJWRdICUwOGx4XG4iLCBhcy0+YXNpZCwgaW92YSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQlfX3NtbXVfaW9tbXVfdW5tYXAoYXMsIGlvdmEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIFNNTVVfUEFHRV9TSVpFOworCW11dGV4X2xvY2soJnNtbXUtPmxvY2spOworCWNsZWFyX2JpdChpZCwgc21tdS0+YXNpZHMpOworCW11dGV4X3VubG9jaygmc21tdS0+bG9jayk7CiB9CiAKLXN0YXRpYyBwaHlzX2FkZHJfdCBzbW11X2lvbW11X2lvdmFfdG9fcGh5cyhzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCi0JCQkJCSAgIGRtYV9hZGRyX3QgaW92YSkKLXsKLQlzdHJ1Y3Qgc21tdV9hcyAqYXMgPSBkb21haW4tPnByaXY7Ci0JdW5zaWduZWQgbG9uZyAqcHRlOwotCXVuc2lnbmVkIGludCAqY291bnQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCi0JcHRlID0gbG9jYXRlX3B0ZShhcywgaW92YSwgdHJ1ZSwgJnBhZ2UsICZjb3VudCk7Ci0JcGZuID0gKnB0ZSAmIFNNTVVfUEZOX01BU0s7Ci0JV0FSTl9PTighcGZuX3ZhbGlkKHBmbikpOwotCWRldl9kYmcoYXMtPnNtbXUtPmRldiwKLQkJImlvdmE6JTA4bGx4IHBmbjolMDhseCBhc2lkOiVkXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWlvdmEsCi0JCSBwZm4sIGFzLT5hc2lkKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIFBGTl9QSFlTKHBmbik7Ci19Ci0KLXN0YXRpYyBib29sIHNtbXVfaW9tbXVfY2FwYWJsZShlbnVtIGlvbW11X2NhcCBjYXApCitzdGF0aWMgYm9vbCB0ZWdyYV9zbW11X2NhcGFibGUoZW51bSBpb21tdV9jYXAgY2FwKQogewogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBzbW11X2lvbW11X2F0dGFjaF9kZXYoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAotCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHRlZ3JhX3NtbXVfZG9tYWluX2luaXQoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQogewotCXN0cnVjdCBzbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBhcy0+c21tdTsKLQlzdHJ1Y3Qgc21tdV9jbGllbnQgKmNsaWVudCwgKmM7Ci0JdTMyIG1hcDsKLQlpbnQgZXJyOworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphczsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1aW50MzJfdCAqcGQ7CiAKLQljbGllbnQgPSBkZXZtX2t6YWxsb2Moc21tdS0+ZGV2LCBzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKKwlhcyA9IGt6YWxsb2Moc2l6ZW9mKCphcyksIEdGUF9LRVJORUwpOworCWlmICghYXMpCiAJCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+ZGV2ID0gZGV2OwotCWNsaWVudC0+YXMgPSBhczsKLQltYXAgPSAodW5zaWduZWQgbG9uZylkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFtYXApCi0JCXJldHVybiAtRUlOVkFMOwogCi0JZXJyID0gc21tdV9jbGllbnRfZW5hYmxlX2h3Z3JwKGNsaWVudCwgbWFwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9od2dycDsKKwlhcy0+YXR0ciA9IFNNTVVfUERfUkVBREFCTEUgfCBTTU1VX1BEX1dSSVRBQkxFIHwgU01NVV9QRF9OT05TRUNVUkU7CisJYXMtPmRvbWFpbiA9IGRvbWFpbjsKIAotCXNwaW5fbG9jaygmYXMtPmNsaWVudF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZhcy0+Y2xpZW50LCBsaXN0KSB7Ci0JCWlmIChjLT5kZXYgPT0gZGV2KSB7Ci0JCQlkZXZfZXJyKHNtbXUtPmRldiwKLQkJCQkiJXMgaXMgYWxyZWFkeSBhdHRhY2hlZFxuIiwgZGV2X25hbWUoYy0+ZGV2KSk7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBlcnJfY2xpZW50OwotCQl9Ci0JfQotCWxpc3RfYWRkKCZjbGllbnQtPmxpc3QsICZhcy0+Y2xpZW50KTsKLQlzcGluX3VubG9jaygmYXMtPmNsaWVudF9sb2NrKTsKLQotCS8qCi0JICogUmVzZXJ2ZSAicGFnZSB6ZXJvIiBmb3IgQVZQIHZlY3RvcnMgdXNpbmcgYSBjb21tb24gZHVtbXkKLQkgKiBwYWdlLgotCSAqLwotCWlmIChtYXAgJiBIV0dfQVZQQykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQlwYWdlID0gYXMtPnNtbXUtPmF2cF92ZWN0b3JfcGFnZTsKLQkJX19zbW11X2lvbW11X21hcF9wZm4oYXMsIDAsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKLQotCQlwcl9pbmZvKCJSZXNlcnZlIFwicGFnZSB6ZXJvXCIgZm9yIEFWUCB2ZWN0b3JzIHVzaW5nIGEgY29tbW9uIGR1bW15XG4iKTsKKwlhcy0+cGQgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9ETUEpOworCWlmICghYXMtPnBkKSB7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZGV2X2RiZyhzbW11LT5kZXYsICIlcyBpcyBhdHRhY2hlZFxuIiwgZGV2X25hbWUoZGV2KSk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9jbGllbnQ6Ci0Jc21tdV9jbGllbnRfZGlzYWJsZV9od2dycChjbGllbnQpOwotCXNwaW5fdW5sb2NrKCZhcy0+Y2xpZW50X2xvY2spOwotZXJyX2h3Z3JwOgotCWRldm1fa2ZyZWUoc21tdS0+ZGV2LCBjbGllbnQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHNtbXVfaW9tbXVfZGV0YWNoX2RldihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCi0JCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHNtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OwotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGFzLT5zbW11OwotCXN0cnVjdCBzbW11X2NsaWVudCAqYzsKLQotCXNwaW5fbG9jaygmYXMtPmNsaWVudF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmFzLT5jbGllbnQsIGxpc3QpIHsKLQkJaWYgKGMtPmRldiA9PSBkZXYpIHsKLQkJCXNtbXVfY2xpZW50X2Rpc2FibGVfaHdncnAoYyk7Ci0JCQlsaXN0X2RlbCgmYy0+bGlzdCk7Ci0JCQlkZXZtX2tmcmVlKHNtbXUtPmRldiwgYyk7Ci0JCQljLT5hcyA9IE5VTEw7Ci0JCQlkZXZfZGJnKHNtbXUtPmRldiwKLQkJCQkiJXMgaXMgZGV0YWNoZWRcbiIsIGRldl9uYW1lKGMtPmRldikpOwotCQkJZ290byBvdXQ7Ci0JCX0KKwlhcy0+Y291bnQgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCWlmICghYXMtPmNvdW50KSB7CisJCV9fZnJlZV9wYWdlKGFzLT5wZCk7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWRldl9lcnIoc21tdS0+ZGV2LCAiQ291bGRuJ3QgZmluZCAlc1xuIiwgZGV2X25hbWUoZGV2KSk7Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2soJmFzLT5jbGllbnRfbG9jayk7Ci19CiAKLXN0YXRpYyBpbnQgc21tdV9pb21tdV9kb21haW5faW5pdChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCi17Ci0JaW50IGksIGVyciA9IC1FQUdBSU47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc21tdV9hcyAqYXM7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gc21tdV9oYW5kbGU7CisJLyogY2xlYXIgUERFcyAqLworCXBkID0gcGFnZV9hZGRyZXNzKGFzLT5wZCk7CisJU2V0UGFnZVJlc2VydmVkKGFzLT5wZCk7CiAKLQkvKiBMb29rIGZvciBhIGZyZWUgQVMgd2l0aCBsb2NrIGhlbGQgKi8KLQlmb3IgIChpID0gMDsgaSA8IHNtbXUtPm51bV9hczsgaSsrKSB7Ci0JCWFzID0gJnNtbXUtPmFzW2ldOworCWZvciAoaSA9IDA7IGkgPCBTTU1VX05VTV9QREU7IGkrKykKKwkJcGRbaV0gPSAwOwogCi0JCWlmIChhcy0+cGRpcl9wYWdlKQotCQkJY29udGludWU7CisJLyogY2xlYXIgUERFIHVzYWdlIGNvdW50ZXJzICovCisJcGQgPSBwYWdlX2FkZHJlc3MoYXMtPmNvdW50KTsKKwlTZXRQYWdlUmVzZXJ2ZWQoYXMtPmNvdW50KTsKIAotCQllcnIgPSBhbGxvY19wZGlyKGFzKTsKLQkJaWYgKCFlcnIpCi0JCQlnb3RvIGZvdW5kOwotCi0JCWlmIChlcnIgIT0gLUVBR0FJTikKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBzbW11LT5udW1fYXMpCi0JCWRldl9lcnIoc21tdS0+ZGV2LCAgIm5vIGZyZWUgQVNcbiIpOwotCXJldHVybiBlcnI7Ci0KLWZvdW5kOgotCXNwaW5fbG9ja19pcnFzYXZlKCZzbW11LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBVcGRhdGUgUERJUiByZWdpc3RlciAqLwotCXNtbXVfd3JpdGUoc21tdSwgU01NVV9QVEJfQVNJRF9DVVIoYXMtPmFzaWQpLCBTTU1VX1BUQl9BU0lEKTsKLQlzbW11X3dyaXRlKHNtbXUsCi0JCSAgIFNNTVVfTUtfUERJUihhcy0+cGRpcl9wYWdlLCBhcy0+cGRpcl9hdHRyKSwgU01NVV9QVEJfREFUQSk7Ci0JRkxVU0hfU01NVV9SRUdTKHNtbXUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21tdS0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBTTU1VX05VTV9QREU7IGkrKykKKwkJcGRbaV0gPSAwOwogCiAJZG9tYWluLT5wcml2ID0gYXM7CiAKLQlkb21haW4tPmdlb21ldHJ5LmFwZXJ0dXJlX3N0YXJ0ID0gc21tdS0+aW92bW1fYmFzZTsKLQlkb21haW4tPmdlb21ldHJ5LmFwZXJ0dXJlX2VuZCAgID0gc21tdS0+aW92bW1fYmFzZSArCi0JCXNtbXUtPnBhZ2VfY291bnQgKiBTTU1VX1BBR0VfU0laRSAtIDE7Ci0JZG9tYWluLT5nZW9tZXRyeS5mb3JjZV9hcGVydHVyZSA9IHRydWU7Ci0KLQlkZXZfZGJnKHNtbXUtPmRldiwgInNtbXVfYXNAJXBcbiIsIGFzKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzbW11X2lvbW11X2RvbWFpbl9kZXN0cm95KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfZG9tYWluX2Rlc3Ryb3koc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQogewotCXN0cnVjdCBzbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBhcy0+c21tdTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCS8qIFRPRE86IGZyZWUgcGFnZSBkaXJlY3RvcnkgYW5kIHBhZ2UgdGFibGVzICovCisJQ2xlYXJQYWdlUmVzZXJ2ZWQoYXMtPnBkKTsKIAotCWlmIChhcy0+cGRpcl9wYWdlKSB7Ci0JCXNwaW5fbG9jaygmc21tdS0+bG9jayk7Ci0JCXNtbXVfd3JpdGUoc21tdSwgU01NVV9QVEJfQVNJRF9DVVIoYXMtPmFzaWQpLCBTTU1VX1BUQl9BU0lEKTsKLQkJc21tdV93cml0ZShzbW11LCBTTU1VX1BUQl9EQVRBX1JFU0VUX1ZBTCwgU01NVV9QVEJfREFUQSk7Ci0JCUZMVVNIX1NNTVVfUkVHUyhzbW11KTsKLQkJc3Bpbl91bmxvY2soJnNtbXUtPmxvY2spOwotCi0JCWZyZWVfcGRpcihhcyk7Ci0JfQotCi0JaWYgKCFsaXN0X2VtcHR5KCZhcy0+Y2xpZW50KSkgewotCQlzdHJ1Y3Qgc21tdV9jbGllbnQgKmM7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmYXMtPmNsaWVudCwgbGlzdCkKLQkJCXNtbXVfaW9tbXVfZGV0YWNoX2Rldihkb21haW4sIGMtPmRldik7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQotCWRvbWFpbi0+cHJpdiA9IE5VTEw7Ci0JZGV2X2RiZyhzbW11LT5kZXYsICJzbW11X2FzQCVwXG4iLCBhcyk7CisJa2ZyZWUoYXMpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X29wcyBzbW11X2lvbW11X29wcyA9IHsKLQkuY2FwYWJsZQk9IHNtbXVfaW9tbXVfY2FwYWJsZSwKLQkuZG9tYWluX2luaXQJPSBzbW11X2lvbW11X2RvbWFpbl9pbml0LAotCS5kb21haW5fZGVzdHJveQk9IHNtbXVfaW9tbXVfZG9tYWluX2Rlc3Ryb3ksCi0JLmF0dGFjaF9kZXYJPSBzbW11X2lvbW11X2F0dGFjaF9kZXYsCi0JLmRldGFjaF9kZXYJPSBzbW11X2lvbW11X2RldGFjaF9kZXYsCi0JLm1hcAkJPSBzbW11X2lvbW11X21hcCwKLQkudW5tYXAJCT0gc21tdV9pb21tdV91bm1hcCwKLQkuaW92YV90b19waHlzCT0gc21tdV9pb21tdV9pb3ZhX3RvX3BoeXMsCi0JLnBnc2l6ZV9iaXRtYXAJPSBTTU1VX0lPTU1VX1BHU0laRVMsCi19OwotCi0vKiBTaG91bGQgYmUgaW4gdGhlIG9yZGVyIG9mIGVudW0gKi8KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc21tdV9kZWJ1Z2ZzX21jW10gPSB7ICJtYyIsIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNtbXVfZGVidWdmc19jYWNoZVtdID0geyAgInRsYiIsICJwdGMiLCB9OwotCi1zdGF0aWMgc3NpemVfdCBzbW11X2RlYnVnZnNfc3RhdHNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc3dncm91cCAqCit0ZWdyYV9zbW11X2ZpbmRfc3dncm91cChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgdW5zaWduZWQgaW50IHN3Z3JvdXApCiB7Ci0Jc3RydWN0IHNtbXVfZGVidWdmc19pbmZvICppbmZvOwotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdTsKLQlpbnQgaTsKLQllbnVtIHsKLQkJX09GRiA9IDAsCi0JCV9PTiwKLQkJX1JFU0VULAotCX07Ci0JY29uc3QgY2hhciAqIGNvbnN0IGNvbW1hbmRbXSA9IHsKLQkJW19PRkZdCQk9ICJvZmYiLAotCQlbX09OXQkJPSAib24iLAotCQlbX1JFU0VUXQk9ICJyZXNldCIsCi0JfTsKLQljaGFyIHN0cltdID0gInJlc2V0IjsKLQl1MzIgdmFsOwotCXNpemVfdCBvZmZzOworCWNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgKmdyb3VwID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgc2l6ZW9mKHN0cikpOwotCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZmZlciwgY291bnQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmQpOyBpKyspCi0JCWlmIChzdHJuY21wKHN0ciwgY29tbWFuZFtpXSwKLQkJCSAgICBzdHJsZW4oY29tbWFuZFtpXSkpID09IDApCisJZm9yIChpID0gMDsgaSA8IHNtbXUtPnNvYy0+bnVtX3N3Z3JvdXBzOyBpKyspIHsKKwkJaWYgKHNtbXUtPnNvYy0+c3dncm91cHNbaV0uc3dncm91cCA9PSBzd2dyb3VwKSB7CisJCQlncm91cCA9ICZzbW11LT5zb2MtPnN3Z3JvdXBzW2ldOwogCQkJYnJlYWs7Ci0KLQlpZiAoaSA9PSBBUlJBWV9TSVpFKGNvbW1hbmQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWluZm8gPSBmaWxlX2lub2RlKGZpbGUpLT5pX3ByaXZhdGU7Ci0Jc21tdSA9IGluZm8tPnNtbXU7Ci0KLQlvZmZzID0gU01NVV9DQUNIRV9DT05GSUcoaW5mby0+Y2FjaGUpOwotCXZhbCA9IHNtbXVfcmVhZChzbW11LCBvZmZzKTsKLQlzd2l0Y2ggKGkpIHsKLQljYXNlIF9PRkY6Ci0JCXZhbCAmPSB+U01NVV9DQUNIRV9DT05GSUdfU1RBVFNfRU5BQkxFOwotCQl2YWwgJj0gflNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX1RFU1Q7Ci0JCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBvZmZzKTsKLQkJYnJlYWs7Ci0JY2FzZSBfT046Ci0JCXZhbCB8PSBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19FTkFCTEU7Ci0JCXZhbCAmPSB+U01NVV9DQUNIRV9DT05GSUdfU1RBVFNfVEVTVDsKLQkJc21tdV93cml0ZShzbW11LCB2YWwsIG9mZnMpOwotCQlicmVhazsKLQljYXNlIF9SRVNFVDoKLQkJdmFsIHw9IFNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX1RFU1Q7Ci0JCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBvZmZzKTsKLQkJdmFsICY9IH5TTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19URVNUOwotCQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgb2Zmcyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlicmVhazsKLQl9Ci0KLQlkZXZfZGJnKHNtbXUtPmRldiwgIiVzKCkgJTA4eCwgJTA4eCBAJTA4eFxuIiwgX19mdW5jX18sCi0JCXZhbCwgc21tdV9yZWFkKHNtbXUsIG9mZnMpLCBvZmZzKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludCBzbW11X2RlYnVnZnNfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNtbXVfZGVidWdmc19pbmZvICppbmZvID0gcy0+cHJpdmF0ZTsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBpbmZvLT5zbW11OwotCWludCBpOwotCWNvbnN0IGNoYXIgKiBjb25zdCBzdGF0c1tdID0geyAiaGl0IiwgIm1pc3MiLCB9OwotCi0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGF0cyk7IGkrKykgewotCQl1MzIgdmFsOwotCQlzaXplX3Qgb2ZmczsKLQotCQlvZmZzID0gU01NVV9TVEFUU19DQUNIRV9DT1VOVChpbmZvLT5tYywgaW5mby0+Y2FjaGUsIGkpOwotCQl2YWwgPSBzbW11X3JlYWQoc21tdSwgb2Zmcyk7Ci0JCXNlcV9wcmludGYocywgIiVzOiUwOHggIiwgc3RhdHNbaV0sIHZhbCk7Ci0KLQkJZGV2X2RiZyhzbW11LT5kZXYsICIlcygpICVzICUwOHggQCUwOHhcbiIsIF9fZnVuY19fLAotCQkJc3RhdHNbaV0sIHZhbCwgb2Zmcyk7Ci0JfQotCXNlcV9wcmludGYocywgIlxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc21tdV9kZWJ1Z2ZzX3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNtbXVfZGVidWdmc19zdGF0c19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc21tdV9kZWJ1Z2ZzX3N0YXRzX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gc21tdV9kZWJ1Z2ZzX3N0YXRzX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLQkud3JpdGUJCT0gc21tdV9kZWJ1Z2ZzX3N0YXRzX3dyaXRlLAotfTsKLQotc3RhdGljIHZvaWQgc21tdV9kZWJ1Z2ZzX2RlbGV0ZShzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUpCi17Ci0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHNtbXUtPmRlYnVnZnNfcm9vdCk7Ci0Ja2ZyZWUoc21tdS0+ZGVidWdmc19pbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgc21tdV9kZWJ1Z2ZzX2NyZWF0ZShzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUpCi17Ci0JaW50IGk7Ci0Jc2l6ZV90IGJ5dGVzOwotCXN0cnVjdCBkZW50cnkgKnJvb3Q7Ci0KLQlieXRlcyA9IEFSUkFZX1NJWkUoc21tdV9kZWJ1Z2ZzX21jKSAqIEFSUkFZX1NJWkUoc21tdV9kZWJ1Z2ZzX2NhY2hlKSAqCi0JCXNpemVvZigqc21tdS0+ZGVidWdmc19pbmZvKTsKLQlzbW11LT5kZWJ1Z2ZzX2luZm8gPSBrbWFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNtbXUtPmRlYnVnZnNfaW5mbykKLQkJcmV0dXJuOwotCi0Jcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZShzbW11LT5kZXYpLCBOVUxMKTsKLQlpZiAoIXJvb3QpCi0JCWdvdG8gZXJyX291dDsKLQlzbW11LT5kZWJ1Z2ZzX3Jvb3QgPSByb290OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc21tdV9kZWJ1Z2ZzX21jKTsgaSsrKSB7Ci0JCWludCBqOwotCQlzdHJ1Y3QgZGVudHJ5ICptYzsKLQotCQltYyA9IGRlYnVnZnNfY3JlYXRlX2RpcihzbW11X2RlYnVnZnNfbWNbaV0sIHJvb3QpOwotCQlpZiAoIW1jKQotCQkJZ290byBlcnJfb3V0OwotCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNtbXVfZGVidWdmc19jYWNoZSk7IGorKykgewotCQkJc3RydWN0IGRlbnRyeSAqY2FjaGU7Ci0JCQlzdHJ1Y3Qgc21tdV9kZWJ1Z2ZzX2luZm8gKmluZm87Ci0KLQkJCWluZm8gPSBzbW11LT5kZWJ1Z2ZzX2luZm87Ci0JCQlpbmZvICs9IGkgKiBBUlJBWV9TSVpFKHNtbXVfZGVidWdmc19tYykgKyBqOwotCQkJaW5mby0+c21tdSA9IHNtbXU7Ci0JCQlpbmZvLT5tYyA9IGk7Ci0JCQlpbmZvLT5jYWNoZSA9IGo7Ci0KLQkJCWNhY2hlID0gZGVidWdmc19jcmVhdGVfZmlsZShzbW11X2RlYnVnZnNfY2FjaGVbal0sCi0JCQkJCQkgICAgU19JV1VHTyB8IFNfSVJVR08sIG1jLAotCQkJCQkJICAgICh2b2lkICopaW5mbywKLQkJCQkJCSAgICAmc21tdV9kZWJ1Z2ZzX3N0YXRzX2ZvcHMpOwotCQkJaWYgKCFjYWNoZSkKLQkJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAl9CiAKLQlyZXR1cm47Ci0KLWVycl9vdXQ6Ci0Jc21tdV9kZWJ1Z2ZzX2RlbGV0ZShzbW11KTsKKwlyZXR1cm4gZ3JvdXA7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfc21tdV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfZW5hYmxlKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LCB1bnNpZ25lZCBpbnQgc3dncm91cCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBhc2lkKQogewotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgKmdyb3VwOworCXVuc2lnbmVkIGludCBpOworCXUzMiB2YWx1ZTsKIAotCXNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8wID0gc21tdV9yZWFkKHNtbXUsIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzApOwotCXNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8xID0gc21tdV9yZWFkKHNtbXUsIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzEpOwotCXNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8yID0gc21tdV9yZWFkKHNtbXUsIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzIpOwotCXNtbXUtPmFzaWRfc2VjdXJpdHkgPSBzbW11X3JlYWQoc21tdSwgU01NVV9BU0lEX1NFQ1VSSVRZKTsKLQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc21tdS0+c29jLT5udW1fY2xpZW50czsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCB0ZWdyYV9tY19jbGllbnQgKmNsaWVudCA9ICZzbW11LT5zb2MtPmNsaWVudHNbaV07CisKKwkJaWYgKGNsaWVudC0+c3dncm91cCAhPSBzd2dyb3VwKQorCQkJY29udGludWU7CisKKwkJdmFsdWUgPSBzbW11X3JlYWRsKHNtbXUsIGNsaWVudC0+c21tdS5yZWcpOworCQl2YWx1ZSB8PSBCSVQoY2xpZW50LT5zbW11LmJpdCk7CisJCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBjbGllbnQtPnNtbXUucmVnKTsKKwl9CisKKwlncm91cCA9IHRlZ3JhX3NtbXVfZmluZF9zd2dyb3VwKHNtbXUsIHN3Z3JvdXApOworCWlmIChncm91cCkgeworCQl2YWx1ZSA9IHNtbXVfcmVhZGwoc21tdSwgZ3JvdXAtPnJlZyk7CisJCXZhbHVlICY9IH5TTU1VX0FTSURfTUFTSzsKKwkJdmFsdWUgfD0gU01NVV9BU0lEX1ZBTFVFKGFzaWQpOworCQl2YWx1ZSB8PSBTTU1VX0FTSURfRU5BQkxFOworCQlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgZ3JvdXAtPnJlZyk7CisJfQogfQogCi1zdGF0aWMgaW50IHRlZ3JhX3NtbXVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfZGlzYWJsZShzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgdW5zaWduZWQgaW50IHN3Z3JvdXAsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGFzaWQpCiB7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zd2dyb3VwICpncm91cDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdmFsdWU7CisKKwlncm91cCA9IHRlZ3JhX3NtbXVfZmluZF9zd2dyb3VwKHNtbXUsIHN3Z3JvdXApOworCWlmIChncm91cCkgeworCQl2YWx1ZSA9IHNtbXVfcmVhZGwoc21tdSwgZ3JvdXAtPnJlZyk7CisJCXZhbHVlICY9IH5TTU1VX0FTSURfTUFTSzsKKwkJdmFsdWUgfD0gU01NVV9BU0lEX1ZBTFVFKGFzaWQpOworCQl2YWx1ZSAmPSB+U01NVV9BU0lEX0VOQUJMRTsKKwkJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIGdyb3VwLT5yZWcpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzbW11LT5zb2MtPm51bV9jbGllbnRzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHRlZ3JhX21jX2NsaWVudCAqY2xpZW50ID0gJnNtbXUtPnNvYy0+Y2xpZW50c1tpXTsKKworCQlpZiAoY2xpZW50LT5zd2dyb3VwICE9IHN3Z3JvdXApCisJCQljb250aW51ZTsKKworCQl2YWx1ZSA9IHNtbXVfcmVhZGwoc21tdSwgY2xpZW50LT5zbW11LnJlZyk7CisJCXZhbHVlICY9IH5CSVQoY2xpZW50LT5zbW11LmJpdCk7CisJCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBjbGllbnQtPnNtbXUucmVnKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfc21tdV9hc19wcmVwYXJlKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LAorCQkJCSBzdHJ1Y3QgdGVncmFfc21tdV9hcyAqYXMpCit7CisJdTMyIHZhbHVlOwogCWludCBlcnI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc21tdS0+bG9jaywgZmxhZ3MpOwotCWVyciA9IHNtbXVfc2V0dXBfcmVncyhzbW11KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbW11LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCB0ZWdyYV9zbW11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0JaW50IGksIGFzaWRzLCBlcnIgPSAwOwotCWRtYV9hZGRyX3QgdW5pbml0aWFsaXplZF92YXIoYmFzZSk7Ci0Jc2l6ZV90IGJ5dGVzLCB1bmluaXRpYWxpemVkX3ZhcihzaXplKTsKLQotCWlmIChzbW11X2hhbmRsZSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlCVUlMRF9CVUdfT04oUEFHRV9TSElGVCAhPSBTTU1VX1BBR0VfU0hJRlQpOwotCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm52aWRpYSwjYXNpZHMiLCAmYXNpZHMpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWJ5dGVzID0gc2l6ZW9mKCpzbW11KSArIGFzaWRzICogc2l6ZW9mKCpzbW11LT5hcyk7Ci0Jc21tdSA9IGRldm1fa3phbGxvYyhkZXYsIGJ5dGVzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNtbXUpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgc21tdV9kZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoYXMtPnVzZV9jb3VudCA+IDApIHsKKwkJYXMtPnVzZV9jb3VudCsrOworCQlyZXR1cm4gMDsKIAl9CiAKLQlzbW11LT5ucmVncyA9IHBkZXYtPm51bV9yZXNvdXJjZXM7Ci0Jc21tdS0+cmVncyA9IGRldm1fa3phbGxvYyhkZXYsIDIgKiBzbW11LT5ucmVncyAqIHNpemVvZigqc21tdS0+cmVncyksCi0JCQkJICBHRlBfS0VSTkVMKTsKLQlzbW11LT5yZWdlID0gc21tdS0+cmVncyArIHNtbXUtPm5yZWdzOwotCWlmICghc21tdS0+cmVncykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZm9yIChpID0gMDsgaSA8IHNtbXUtPm5yZWdzOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKLQkJc21tdS0+cmVnc1tpXSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwotCQlpZiAoSVNfRVJSKHNtbXUtPnJlZ3NbaV0pKQotCQkJcmV0dXJuIFBUUl9FUlIoc21tdS0+cmVnc1tpXSk7Ci0JCXNtbXUtPnJlZ2VbaV0gPSBzbW11LT5yZWdzW2ldICsgcmVzb3VyY2Vfc2l6ZShyZXMpIC0gMTsKLQl9Ci0JLyogU2FtZSBhcyAibWMiIDFzdCByZWdpdGVyIGJsb2NrIHN0YXJ0IGFkZHJlc3MgKi8KLQlzbW11LT5yZWdiYXNlID0gKHZvaWQgX19pb21lbSAqKSgodTMyKXNtbXUtPnJlZ3NbMF0gJiBQQUdFX01BU0spOwotCi0JZXJyID0gb2ZfZ2V0X2RtYV93aW5kb3coZGV2LT5vZl9ub2RlLCBOVUxMLCAwLCBOVUxMLCAmYmFzZSwgJnNpemUpOwotCWlmIChlcnIpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHNpemUgJiBTTU1VX1BBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzaXplID4+PSBTTU1VX1BBR0VfU0hJRlQ7Ci0JaWYgKCFzaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNtbXUtPmFoYiA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAibnZpZGlhLGFoYiIsIDApOwotCWlmICghc21tdS0+YWhiKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXNtbXUtPmRldiA9IGRldjsKLQlzbW11LT5udW1fYXMgPSBhc2lkczsKLQlzbW11LT5pb3ZtbV9iYXNlID0gYmFzZTsKLQlzbW11LT5wYWdlX2NvdW50ID0gc2l6ZTsKLQotCXNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8wID0gfjA7Ci0Jc21tdS0+dHJhbnNsYXRpb25fZW5hYmxlXzEgPSB+MDsKLQlzbW11LT50cmFuc2xhdGlvbl9lbmFibGVfMiA9IH4wOwotCXNtbXUtPmFzaWRfc2VjdXJpdHkgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHNtbXUtPm51bV9hczsgaSsrKSB7Ci0JCXN0cnVjdCBzbW11X2FzICphcyA9ICZzbW11LT5hc1tpXTsKLQotCQlhcy0+c21tdSA9IHNtbXU7Ci0JCWFzLT5hc2lkID0gaTsKLQkJYXMtPnBkaXJfYXR0ciA9IF9QRElSX0FUVFI7Ci0JCWFzLT5wZGVfYXR0ciA9IF9QREVfQVRUUjsKLQkJYXMtPnB0ZV9hdHRyID0gX1BURV9BVFRSOwotCi0JCXNwaW5fbG9ja19pbml0KCZhcy0+bG9jayk7Ci0JCXNwaW5fbG9ja19pbml0KCZhcy0+Y2xpZW50X2xvY2spOwotCQlJTklUX0xJU1RfSEVBRCgmYXMtPmNsaWVudCk7Ci0JfQotCXNwaW5fbG9ja19pbml0KCZzbW11LT5sb2NrKTsKLQllcnIgPSBzbW11X3NldHVwX3JlZ3Moc21tdSk7Ci0JaWYgKGVycikKKwllcnIgPSB0ZWdyYV9zbW11X2FsbG9jX2FzaWQoc21tdSwgJmFzLT5pZCk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc21tdSk7CiAKLQlzbW11LT5hdnBfdmVjdG9yX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCWlmICghc21tdS0+YXZwX3ZlY3Rvcl9wYWdlKQorCXNtbXUtPnNvYy0+b3BzLT5mbHVzaF9kY2FjaGUoYXMtPnBkLCAwLCBTTU1VX1NJWkVfUEQpOworCXNtbXVfZmx1c2hfcHRjKHNtbXUsIGFzLT5wZCwgMCk7CisJc21tdV9mbHVzaF90bGJfYXNpZChzbW11LCBhcy0+aWQpOworCisJc21tdV93cml0ZWwoc21tdSwgYXMtPmlkICYgMHg3ZiwgU01NVV9QVEJfQVNJRCk7CisJdmFsdWUgPSBTTU1VX1BUQl9EQVRBX1ZBTFVFKGFzLT5wZCwgYXMtPmF0dHIpOworCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBTTU1VX1BUQl9EQVRBKTsKKwlzbW11X2ZsdXNoKHNtbXUpOworCisJYXMtPnNtbXUgPSBzbW11OworCWFzLT51c2VfY291bnQrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9zbW11X2FzX3VucHJlcGFyZShzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwKKwkJCQkgICAgc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzKQoreworCWlmICgtLWFzLT51c2VfY291bnQgPiAwKQorCQlyZXR1cm47CisKKwl0ZWdyYV9zbW11X2ZyZWVfYXNpZChzbW11LCBhcy0+aWQpOworCWFzLT5zbW11ID0gTlVMTDsKK30KKworc3RhdGljIGludCB0ZWdyYV9zbW11X2F0dGFjaF9kZXYoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUgPSBkZXYtPmFyY2hkYXRhLmlvbW11OworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgYXJnczsKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworCWludCBlcnIgPSAwOworCisJd2hpbGUgKCFvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyhucCwgImlvbW11cyIsICIjaW9tbXUtY2VsbHMiLCBpbmRleCwKKwkJCQkJICAgJmFyZ3MpKSB7CisJCXVuc2lnbmVkIGludCBzd2dyb3VwID0gYXJncy5hcmdzWzBdOworCisJCWlmIChhcmdzLm5wICE9IHNtbXUtPmRldi0+b2Zfbm9kZSkgeworCQkJb2Zfbm9kZV9wdXQoYXJncy5ucCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW9mX25vZGVfcHV0KGFyZ3MubnApOworCisJCWVyciA9IHRlZ3JhX3NtbXVfYXNfcHJlcGFyZShzbW11LCBhcyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQl0ZWdyYV9zbW11X2VuYWJsZShzbW11LCBzd2dyb3VwLCBhcy0+aWQpOworCQlpbmRleCsrOworCX0KKworCWlmIChpbmRleCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9zbW11X2RldGFjaF9kZXYoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUgPSBhcy0+c21tdTsKKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7CisJdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKworCXdoaWxlICghb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MobnAsICJpb21tdXMiLCAiI2lvbW11LWNlbGxzIiwgaW5kZXgsCisJCQkJCSAgICZhcmdzKSkgeworCQl1bnNpZ25lZCBpbnQgc3dncm91cCA9IGFyZ3MuYXJnc1swXTsKKworCQlpZiAoYXJncy5ucCAhPSBzbW11LT5kZXYtPm9mX25vZGUpIHsKKwkJCW9mX25vZGVfcHV0KGFyZ3MubnApOworCQkJY29udGludWU7CisJCX0KKworCQlvZl9ub2RlX3B1dChhcmdzLm5wKTsKKworCQl0ZWdyYV9zbW11X2Rpc2FibGUoc21tdSwgc3dncm91cCwgYXMtPmlkKTsKKwkJdGVncmFfc21tdV9hc191bnByZXBhcmUoc21tdSwgYXMpOworCQlpbmRleCsrOworCX0KK30KKworc3RhdGljIHUzMiAqYXNfZ2V0X3B0ZShzdHJ1Y3QgdGVncmFfc21tdV9hcyAqYXMsIGRtYV9hZGRyX3QgaW92YSwKKwkJICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXApCit7CisJdTMyICpwZCA9IHBhZ2VfYWRkcmVzcyhhcy0+cGQpLCAqcHQsICpjb3VudDsKKwl1MzIgcGRlID0gKGlvdmEgPj4gU01NVV9QREVfU0hJRlQpICYgMHgzZmY7CisJdTMyIHB0ZSA9IChpb3ZhID4+IFNNTVVfUFRFX1NISUZUKSAmIDB4M2ZmOworCXN0cnVjdCB0ZWdyYV9zbW11ICpzbW11ID0gYXMtPnNtbXU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAocGRbcGRlXSA9PSAwKSB7CisJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9ETUEpOworCQlpZiAoIXBhZ2UpCisJCQlyZXR1cm4gTlVMTDsKKworCQlwdCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOworCisJCWZvciAoaSA9IDA7IGkgPCBTTU1VX05VTV9QVEU7IGkrKykKKwkJCXB0W2ldID0gMDsKKworCQlzbW11LT5zb2MtPm9wcy0+Zmx1c2hfZGNhY2hlKHBhZ2UsIDAsIFNNTVVfU0laRV9QVCk7CisKKwkJcGRbcGRlXSA9IFNNTVVfTUtfUERFKHBhZ2UsIFNNTVVfUERFX0FUVFIgfCBTTU1VX1BERV9ORVhUKTsKKworCQlzbW11LT5zb2MtPm9wcy0+Zmx1c2hfZGNhY2hlKGFzLT5wZCwgcGRlIDw8IDIsIDQpOworCQlzbW11X2ZsdXNoX3B0YyhzbW11LCBhcy0+cGQsIHBkZSA8PCAyKTsKKwkJc21tdV9mbHVzaF90bGJfc2VjdGlvbihzbW11LCBhcy0+aWQsIGlvdmEpOworCQlzbW11X2ZsdXNoKHNtbXUpOworCX0gZWxzZSB7CisJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZFtwZGVdICYgU01NVV9QRk5fTUFTSyk7CisJCXB0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCX0KKworCSpwYWdlcCA9IHBhZ2U7CisKKwkvKiBLZWVwIHRyYWNrIG9mIGVudHJpZXMgaW4gdGhpcyBwYWdlIHRhYmxlLiAqLworCWNvdW50ID0gcGFnZV9hZGRyZXNzKGFzLT5jb3VudCk7CisJaWYgKHB0W3B0ZV0gPT0gMCkKKwkJY291bnRbcGRlXSsrOworCisJcmV0dXJuICZwdFtwdGVdOworfQorCitzdGF0aWMgdm9pZCBhc19wdXRfcHRlKHN0cnVjdCB0ZWdyYV9zbW11X2FzICphcywgZG1hX2FkZHJfdCBpb3ZhKQoreworCXUzMiBwZGUgPSAoaW92YSA+PiBTTU1VX1BERV9TSElGVCkgJiAweDNmZjsKKwl1MzIgcHRlID0gKGlvdmEgPj4gU01NVV9QVEVfU0hJRlQpICYgMHgzZmY7CisJdTMyICpjb3VudCA9IHBhZ2VfYWRkcmVzcyhhcy0+Y291bnQpOworCXUzMiAqcGQgPSBwYWdlX2FkZHJlc3MoYXMtPnBkKSwgKnB0OworCXN0cnVjdCBwYWdlICpwYWdlOworCisJcGFnZSA9IHBmbl90b19wYWdlKHBkW3BkZV0gJiBTTU1VX1BGTl9NQVNLKTsKKwlwdCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKworCS8qCisJICogV2hlbiBubyBlbnRyaWVzIGluIHRoaXMgcGFnZSB0YWJsZSBhcmUgdXNlZCBhbnltb3JlLCByZXR1cm4gdGhlCisJICogbWVtb3J5IHBhZ2UgdG8gdGhlIHN5c3RlbS4KKwkgKi8KKwlpZiAocHRbcHRlXSAhPSAwKSB7CisJCWlmICgtLWNvdW50W3BkZV0gPT0gMCkgeworCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7CisJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJCXBkW3BkZV0gPSAwOworCQl9CisKKwkJcHRbcHRlXSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IHRlZ3JhX3NtbXVfbWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAorCQkJICBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBwcm90KQoreworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKKwlzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSA9IGFzLT5zbW11OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXN0cnVjdCBwYWdlICpwYWdlOworCXUzMiAqcHRlOworCisJcHRlID0gYXNfZ2V0X3B0ZShhcywgaW92YSwgJnBhZ2UpOworCWlmICghcHRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNtbXVfZGVidWdmc19jcmVhdGUoc21tdSk7Ci0Jc21tdV9oYW5kbGUgPSBzbW11OwotCWJ1c19zZXRfaW9tbXUoJnBsYXRmb3JtX2J1c190eXBlLCAmc21tdV9pb21tdV9vcHMpOworCSpwdGUgPSBfX3BoeXNfdG9fcGZuKHBhZGRyKSB8IFNNTVVfUFRFX0FUVFI7CisJb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocHRlKTsKKworCXNtbXUtPnNvYy0+b3BzLT5mbHVzaF9kY2FjaGUocGFnZSwgb2Zmc2V0LCA0KTsKKwlzbW11X2ZsdXNoX3B0YyhzbW11LCBwYWdlLCBvZmZzZXQpOworCXNtbXVfZmx1c2hfdGxiX2dyb3VwKHNtbXUsIGFzLT5pZCwgaW92YSk7CisJc21tdV9mbHVzaChzbW11KTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlZ3JhX3NtbXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgc2l6ZV90IHRlZ3JhX3NtbXVfdW5tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCisJCQkgICAgICAgc2l6ZV90IHNpemUpCiB7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IGk7CisJc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OworCXN0cnVjdCB0ZWdyYV9zbW11ICpzbW11ID0gYXMtPnNtbXU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdTMyICpwdGU7CiAKLQlzbW11X2RlYnVnZnNfZGVsZXRlKHNtbXUpOworCXB0ZSA9IGFzX2dldF9wdGUoYXMsIGlvdmEsICZwYWdlKTsKKwlpZiAoIXB0ZSkKKwkJcmV0dXJuIDA7CiAKLQlzbW11X3dyaXRlKHNtbXUsIFNNTVVfQ09ORklHX0RJU0FCTEUsIFNNTVVfQ09ORklHKTsKLQlmb3IgKGkgPSAwOyBpIDwgc21tdS0+bnVtX2FzOyBpKyspCi0JCWZyZWVfcGRpcigmc21tdS0+YXNbaV0pOwotCV9fZnJlZV9wYWdlKHNtbXUtPmF2cF92ZWN0b3JfcGFnZSk7Ci0Jc21tdV9oYW5kbGUgPSBOVUxMOworCW9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHB0ZSk7CisJYXNfcHV0X3B0ZShhcywgaW92YSk7CisKKwlzbW11LT5zb2MtPm9wcy0+Zmx1c2hfZGNhY2hlKHBhZ2UsIG9mZnNldCwgNCk7CisJc21tdV9mbHVzaF9wdGMoc21tdSwgcGFnZSwgb2Zmc2V0KTsKKwlzbW11X2ZsdXNoX3RsYl9ncm91cChzbW11LCBhcy0+aWQsIGlvdmEpOworCXNtbXVfZmx1c2goc21tdSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHBoeXNfYWRkcl90IHRlZ3JhX3NtbXVfaW92YV90b19waHlzKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCQkJICAgZG1hX2FkZHJfdCBpb3ZhKQoreworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBsb25nIHBmbjsKKwl1MzIgKnB0ZTsKKworCXB0ZSA9IGFzX2dldF9wdGUoYXMsIGlvdmEsICZwYWdlKTsKKwlwZm4gPSAqcHRlICYgU01NVV9QRk5fTUFTSzsKKworCXJldHVybiBQRk5fUEhZUyhwZm4pOworfQorCitzdGF0aWMgc3RydWN0IHRlZ3JhX3NtbXUgKnRlZ3JhX3NtbXVfZmluZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHRlZ3JhX21jICptYzsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5wKTsKKwlpZiAoIXBkZXYpCisJCXJldHVybiBOVUxMOworCisJbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIW1jKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBtYy0+c21tdTsKK30KKworc3RhdGljIGludCB0ZWdyYV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmdzOworCXVuc2lnbmVkIGludCBpbmRleCA9IDA7CisKKwl3aGlsZSAob2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MobnAsICJpb21tdXMiLCAiI2lvbW11LWNlbGxzIiwgaW5kZXgsCisJCQkJCSAgJmFyZ3MpID09IDApIHsKKwkJc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXU7CisKKwkJc21tdSA9IHRlZ3JhX3NtbXVfZmluZChhcmdzLm5wKTsKKwkJaWYgKHNtbXUpIHsKKwkJCS8qCisJCQkgKiBPbmx5IGEgc2luZ2xlIElPTU1VIG1hc3RlciBpbnRlcmZhY2UgaXMgY3VycmVudGx5CisJCQkgKiBzdXBwb3J0ZWQgYnkgdGhlIExpbnV4IGtlcm5lbCwgc28gYWJvcnQgYWZ0ZXIgdGhlCisJCQkgKiBmaXJzdCBtYXRjaC4KKwkJCSAqLworCQkJZGV2LT5hcmNoZGF0YS5pb21tdSA9IHNtbXU7CisJCQlicmVhazsKKwkJfQorCisJCWluZGV4Kys7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0ZWdyYV9zbW11X3BtX29wcyA9IHsKLQkuc3VzcGVuZAk9IHRlZ3JhX3NtbXVfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHRlZ3JhX3NtbXVfcmVzdW1lLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVncmFfc21tdV9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMzAtc21tdSIsIH0sCi0JeyB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRlZ3JhX3NtbXVfb2ZfbWF0Y2gpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9zbW11X2RyaXZlciA9IHsKLQkucHJvYmUJCT0gdGVncmFfc21tdV9wcm9iZSwKLQkucmVtb3ZlCQk9IHRlZ3JhX3NtbXVfcmVtb3ZlLAotCS5kcml2ZXIgPSB7Ci0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJ0ZWdyYS1zbW11IiwKLQkJLnBtCT0gJnRlZ3JhX3NtbXVfcG1fb3BzLAotCQkub2ZfbWF0Y2hfdGFibGUgPSB0ZWdyYV9zbW11X29mX21hdGNoLAotCX0sCi19OwotCi1zdGF0aWMgaW50IHRlZ3JhX3NtbXVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgdGVncmFfc21tdV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0ZWdyYV9zbW11X2RyaXZlcik7CisJZGV2LT5hcmNoZGF0YS5pb21tdSA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB0ZWdyYV9zbW11X2V4aXQodm9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIHRlZ3JhX3NtbXVfb3BzID0geworCS5jYXBhYmxlID0gdGVncmFfc21tdV9jYXBhYmxlLAorCS5kb21haW5faW5pdCA9IHRlZ3JhX3NtbXVfZG9tYWluX2luaXQsCisJLmRvbWFpbl9kZXN0cm95ID0gdGVncmFfc21tdV9kb21haW5fZGVzdHJveSwKKwkuYXR0YWNoX2RldiA9IHRlZ3JhX3NtbXVfYXR0YWNoX2RldiwKKwkuZGV0YWNoX2RldiA9IHRlZ3JhX3NtbXVfZGV0YWNoX2RldiwKKwkuYWRkX2RldmljZSA9IHRlZ3JhX3NtbXVfYWRkX2RldmljZSwKKwkucmVtb3ZlX2RldmljZSA9IHRlZ3JhX3NtbXVfcmVtb3ZlX2RldmljZSwKKwkubWFwID0gdGVncmFfc21tdV9tYXAsCisJLnVubWFwID0gdGVncmFfc21tdV91bm1hcCwKKwkubWFwX3NnID0gZGVmYXVsdF9pb21tdV9tYXBfc2csCisJLmlvdmFfdG9fcGh5cyA9IHRlZ3JhX3NtbXVfaW92YV90b19waHlzLAorCisJLnBnc2l6ZV9iaXRtYXAgPSBTWl80SywKK307CisKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfYWhiX2VuYWJsZSh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9zbW11X2RyaXZlcik7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWhiX21hdGNoW10gPSB7CisJCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMzAtYWhiIiwgfSwKKwkJeyB9CisJfTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFoYjsKKworCWFoYiA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBhaGJfbWF0Y2gpOworCWlmIChhaGIpIHsKKwkJdGVncmFfYWhiX2VuYWJsZV9zbW11KGFoYik7CisJCW9mX25vZGVfcHV0KGFoYik7CisJfQogfQogCi1zdWJzeXNfaW5pdGNhbGwodGVncmFfc21tdV9pbml0KTsKLW1vZHVsZV9leGl0KHRlZ3JhX3NtbXVfZXhpdCk7CitzdHJ1Y3QgdGVncmFfc21tdSAqdGVncmFfc21tdV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3NvYyAqc29jLAorCQkJCSAgICBzdHJ1Y3QgdGVncmFfbWMgKm1jKQoreworCXN0cnVjdCB0ZWdyYV9zbW11ICpzbW11OworCXNpemVfdCBzaXplOworCXUzMiB2YWx1ZTsKKwlpbnQgZXJyOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oIklPTU1VIEFQSSBmb3IgU01NVSBpbiBUZWdyYTMwIik7Ci1NT0RVTEVfQVVUSE9SKCJIaXJvc2hpIERPWVUgPGhkb3l1QG52aWRpYS5jb20+Iik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOnRlZ3JhLXNtbXUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKwkvKiBUaGlzIGNhbiBoYXBwZW4gb24gVGVncmEyMCB3aGljaCBkb2Vzbid0IGhhdmUgYW4gU01NVSAqLworCWlmICghc29jKQorCQlyZXR1cm4gTlVMTDsKKworCXNtbXUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnNtbXUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNtbXUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJLyoKKwkgKiBUaGlzIGlzIGEgYml0IG9mIGEgaGFjay4gSWRlYWxseSB3ZSdkIHdhbnQgdG8gc2ltcGx5IHJldHVybiB0aGlzCisJICogdmFsdWUuIEhvd2V2ZXIgdGhlIElPTU1VIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwgYXR0ZW1wdCB0byBhZGQKKwkgKiBhbGwgZGV2aWNlcyB0byB0aGUgSU9NTVUgd2hlbiBidXNfc2V0X2lvbW11KCkgaXMgY2FsbGVkLiBJbiBvcmRlcgorCSAqIG5vdCB0byByZWx5IG9uIGdsb2JhbCB2YXJpYWJsZXMgdG8gdHJhY2sgdGhlIElPTU1VIGluc3RhbmNlLCB3ZQorCSAqIHNldCBpdCBoZXJlIHNvIHRoYXQgaXQgY2FuIGJlIGxvb2tlZCB1cCBmcm9tIHRoZSAuYWRkX2RldmljZSgpCisJICogY2FsbGJhY2sgdmlhIHRoZSBJT01NVSBkZXZpY2UncyAuZHJ2ZGF0YSBmaWVsZC4KKwkgKi8KKwltYy0+c21tdSA9IHNtbXU7CisKKwlzaXplID0gQklUU19UT19MT05HUyhzb2MtPm51bV9hc2lkcykgKiBzaXplb2YobG9uZyk7CisKKwlzbW11LT5hc2lkcyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemUsIEdGUF9LRVJORUwpOworCWlmICghc21tdS0+YXNpZHMpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbXV0ZXhfaW5pdCgmc21tdS0+bG9jayk7CisKKwlzbW11LT5yZWdzID0gbWMtPnJlZ3M7CisJc21tdS0+c29jID0gc29jOworCXNtbXUtPmRldiA9IGRldjsKKwlzbW11LT5tYyA9IG1jOworCisJdmFsdWUgPSBTTU1VX1BUQ19DT05GSUdfRU5BQkxFIHwgU01NVV9QVENfQ09ORklHX0lOREVYX01BUCgweDNmKTsKKworCWlmIChzb2MtPnN1cHBvcnRzX3JlcXVlc3RfbGltaXQpCisJCXZhbHVlIHw9IFNNTVVfUFRDX0NPTkZJR19SRVFfTElNSVQoOCk7CisKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9QVENfQ09ORklHKTsKKworCXZhbHVlID0gU01NVV9UTEJfQ09ORklHX0hJVF9VTkRFUl9NSVNTIHwKKwkJU01NVV9UTEJfQ09ORklHX0FDVElWRV9MSU5FUygweDIwKTsKKworCWlmIChzb2MtPnN1cHBvcnRzX3JvdW5kX3JvYmluX2FyYml0cmF0aW9uKQorCQl2YWx1ZSB8PSBTTU1VX1RMQl9DT05GSUdfUk9VTkRfUk9CSU5fQVJCSVRSQVRJT047CisKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9UTEJfQ09ORklHKTsKKworCXNtbXVfZmx1c2hfcHRjKHNtbXUsIE5VTEwsIDApOworCXNtbXVfZmx1c2hfdGxiKHNtbXUpOworCXNtbXVfd3JpdGVsKHNtbXUsIFNNTVVfQ09ORklHX0VOQUJMRSwgU01NVV9DT05GSUcpOworCXNtbXVfZmx1c2goc21tdSk7CisKKwl0ZWdyYV9zbW11X2FoYl9lbmFibGUoKTsKKworCWVyciA9IGJ1c19zZXRfaW9tbXUoJnBsYXRmb3JtX2J1c190eXBlLCAmdGVncmFfc21tdV9vcHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJcmV0dXJuIHNtbXU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvS2NvbmZpZyBiL2RyaXZlcnMvaXJxY2hpcC9LY29uZmlnCmluZGV4IGIyMWYxMmYuLjllZmU1ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9LY29uZmlnCkBAIC00OCwxNCArNDgsMTkgQEAKIAlzZWxlY3QgTVVMVElfSVJRX0hBTkRMRVIKIAlzZWxlY3QgU1BBUlNFX0lSUQogCitjb25maWcgQkNNNzEyMF9MMl9JUlEKKwlib29sCisJc2VsZWN0IEdFTkVSSUNfSVJRX0NISVAKKwlzZWxlY3QgSVJRX0RPTUFJTgorCiBjb25maWcgQlJDTVNUQl9MMl9JUlEKIAlib29sCi0JZGVwZW5kcyBvbiBBUk0KIAlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAogCXNlbGVjdCBJUlFfRE9NQUlOCiAKIGNvbmZpZyBEV19BUEJfSUNUTAogCWJvb2wKKwlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAogCXNlbGVjdCBJUlFfRE9NQUlOCiAKIGNvbmZpZyBJTUdQRENfSVJRCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUgYi9kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUKaW5kZXggMTczYmI1Zi4uZjA5MDlkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZQpAQCAtMzUsNiArMzUsNiBAQAogb2JqLSQoQ09ORklHX1hURU5TQSkJCQkrPSBpcnEteHRlbnNhLXBpYy5vCiBvYmotJChDT05GSUdfWFRFTlNBX01YKQkJCSs9IGlycS14dGVuc2EtbXgubwogb2JqLSQoQ09ORklHX0lSUV9DUk9TU0JBUikJCSs9IGlycS1jcm9zc2Jhci5vCi1vYmotJChDT05GSUdfQlJDTVNUQl9MMl9JUlEpCQkrPSBpcnEtYnJjbXN0Yi1sMi5vIFwKLQkJCQkJICAgaXJxLWJjbTcxMjAtbDIubworb2JqLSQoQ09ORklHX0JDTTcxMjBfTDJfSVJRKQkJKz0gaXJxLWJjbTcxMjAtbDIubworb2JqLSQoQ09ORklHX0JSQ01TVEJfTDJfSVJRKQkJKz0gaXJxLWJyY21zdGItbDIubwogb2JqLSQoQ09ORklHX0tFWVNUT05FX0lSUSkJCSs9IGlycS1rZXlzdG9uZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWFybWFkYS0zNzAteHAuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXJtYWRhLTM3MC14cC5jCmluZGV4IDNlMjM4Y2QuLjQ2M2MyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXJtYWRhLTM3MC14cC5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXJtYWRhLTM3MC14cC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9leGNlcHRpb24uaD4KQEAgLTQzLDYgKzQ0LDcgQEAKICNkZWZpbmUgQVJNQURBXzM3MF9YUF9JTlRfQ0xFQVJfRU5BQkxFX09GRlMJKDB4MzQpCiAjZGVmaW5lIEFSTUFEQV8zNzBfWFBfSU5UX1NPVVJDRV9DVEwoaXJxKQkoMHgxMDAgKyBpcnEqNCkKICNkZWZpbmUgQVJNQURBXzM3MF9YUF9JTlRfU09VUkNFX0NQVV9NQVNLCTB4RgorI2RlZmluZSBBUk1BREFfMzcwX1hQX0lOVF9JUlFfRklRX01BU0soY3B1aWQpCSgoQklUKDApIHwgQklUKDgpKSA8PCBjcHVpZCkKIAogI2RlZmluZSBBUk1BREFfMzcwX1hQX0NQVV9JTlRBQ0tfT0ZGUwkJKDB4NDQpCiAjZGVmaW5lIEFSTUFEQV8zNzVfUFBJX0NBVVNFCQkJKDB4MTApCkBAIC02Niw2ICs2OCw3IEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICpwZXJfY3B1X2ludF9iYXNlOwogc3RhdGljIHZvaWQgX19pb21lbSAqbWFpbl9pbnRfYmFzZTsKIHN0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbiAqYXJtYWRhXzM3MF94cF9tcGljX2RvbWFpbjsKK3N0YXRpYyB1MzIgZG9vcmJlbGxfbWFza19yZWc7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIHN0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbiAqYXJtYWRhXzM3MF94cF9tc2lfZG9tYWluOwogc3RhdGljIERFQ0xBUkVfQklUTUFQKG1zaV91c2VkLCBQQ0lfTVNJX0RPT1JCRUxMX05SKTsKQEAgLTEyOSw3ICsxMzIsNyBAQAogCW11dGV4X3VubG9jaygmbXNpX3VzZWRfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwKK3N0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwKIAkJCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKIHsKQEAgLTE1NiwxMSArMTU5LDExIEBACiAJbXNnLmFkZHJlc3NfaGkgPSAwOwogCW1zZy5kYXRhID0gMHhmMDAgfCAoaHdpcnEgKyAxNik7CiAKLQl3cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhcm1hZGFfMzcwX3hwX3RlYXJkb3duX21zaV9pcnEoc3RydWN0IG1zaV9jaGlwICpjaGlwLAorc3RhdGljIHZvaWQgYXJtYWRhXzM3MF94cF90ZWFyZG93bl9tc2lfaXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwKIAkJCQkJICAgdW5zaWduZWQgaW50IGlycSkKIHsKIAlzdHJ1Y3QgaXJxX2RhdGEgKmQgPSBpcnFfZ2V0X2lycV9kYXRhKGlycSk7CkBAIC0xNzIsMTAgKzE3NSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGFybWFkYV8zNzBfeHBfbXNpX2lycV9jaGlwID0gewogCS5uYW1lID0gImFybWFkYV8zNzBfeHBfbXNpX2lycSIsCi0JLmlycV9lbmFibGUgPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX2Rpc2FibGUgPSBtYXNrX21zaV9pcnEsCi0JLmlycV9tYXNrID0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrID0gdW5tYXNrX21zaV9pcnEsCisJLmlycV9lbmFibGUgPSBwY2lfbXNpX3VubWFza19pcnEsCisJLmlycV9kaXNhYmxlID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX21hc2sgPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrID0gcGNpX21zaV91bm1hc2tfaXJxLAogfTsKIAogc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX21zaV9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCkBAIC0xOTUsNyArMTk4LDcgQEAKIHN0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF9tc2lfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJCQkJICBwaHlzX2FkZHJfdCBtYWluX2ludF9waHlzX2Jhc2UpCiB7Ci0Jc3RydWN0IG1zaV9jaGlwICptc2lfY2hpcDsKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKm1zaV9jaGlwOwogCXUzMiByZWc7CiAJaW50IHJldDsKIApAQCAtMjY1LDcgKzI2OCw3IEBACiAJd3JpdGVsKHJlZywgbWFpbl9pbnRfYmFzZSArIEFSTUFEQV8zNzBfWFBfSU5UX1NPVVJDRV9DVEwoaHdpcnEpKTsKIAlyYXdfc3Bpbl91bmxvY2soJmlycV9jb250cm9sbGVyX2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIElSUV9TRVRfTUFTS19PSzsKIH0KICNlbmRpZgogCkBAIC00MDYsMTkgKzQwOSwyOSBAQAogCQkJCQkJICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2dldF9jaGlwKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBpcnFtYXAsIGlycW47CisJdW5zaWduZWQgbG9uZyBpcnFtYXAsIGlycW4sIGlycXNyYywgY3B1aWQ7CiAJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxOwogCiAJY2hhaW5lZF9pcnFfZW50ZXIoY2hpcCwgZGVzYyk7CiAKIAlpcnFtYXAgPSByZWFkbF9yZWxheGVkKHBlcl9jcHVfaW50X2Jhc2UgKyBBUk1BREFfMzc1X1BQSV9DQVVTRSk7Ci0KLQlpZiAoaXJxbWFwICYgQklUKDApKSB7Ci0JCWFybWFkYV8zNzBfeHBfaGFuZGxlX21zaV9pcnEoTlVMTCwgdHJ1ZSk7Ci0JCWlycW1hcCAmPSB+QklUKDApOwotCX0KKwljcHVpZCA9IGNwdV9sb2dpY2FsX21hcChzbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJZm9yX2VhY2hfc2V0X2JpdChpcnFuLCAmaXJxbWFwLCBCSVRTX1BFUl9MT05HKSB7CisJCWlycXNyYyA9IHJlYWRsX3JlbGF4ZWQobWFpbl9pbnRfYmFzZSArCisJCQkJICAgICAgIEFSTUFEQV8zNzBfWFBfSU5UX1NPVVJDRV9DVEwoaXJxbikpOworCisJCS8qIENoZWNrIGlmIHRoZSBpbnRlcnJ1cHQgaXMgbm90IG1hc2tlZCBvbiBjdXJyZW50IENQVS4KKwkJICogVGVzdCBJUlEgKDAtMSkgYW5kIEZJUSAoOC05KSBtYXNrIGJpdHMuCisJCSAqLworCQlpZiAoIShpcnFzcmMgJiBBUk1BREFfMzcwX1hQX0lOVF9JUlFfRklRX01BU0soY3B1aWQpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpcnFuID09IDEpIHsKKwkJCWFybWFkYV8zNzBfeHBfaGFuZGxlX21zaV9pcnEoTlVMTCwgdHJ1ZSk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWNhc2NhZGVfaXJxID0gaXJxX2ZpbmRfbWFwcGluZyhhcm1hZGFfMzcwX3hwX21waWNfZG9tYWluLCBpcnFuKTsKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKIAl9CkBAIC00NzQsNiArNDg3LDU0IEBACiAJfSB3aGlsZSAoMSk7CiB9CiAKK3N0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF9tcGljX3N1c3BlbmQodm9pZCkKK3sKKwlkb29yYmVsbF9tYXNrX3JlZyA9IHJlYWRsKHBlcl9jcHVfaW50X2Jhc2UgKworCQkJCSAgQVJNQURBXzM3MF9YUF9JTl9EUkJFTF9NU0tfT0ZGUyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFybWFkYV8zNzBfeHBfbXBpY19yZXN1bWUodm9pZCkKK3sKKwlpbnQgbmlycXM7CisJaXJxX2h3X251bWJlcl90IGlycTsKKworCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisJbmlycXMgPSAocmVhZGwobWFpbl9pbnRfYmFzZSArIEFSTUFEQV8zNzBfWFBfSU5UX0NPTlRST0wpID4+IDIpICYgMHgzZmY7CisJZm9yIChpcnEgPSAwOyBpcnEgPCBuaXJxczsgaXJxKyspIHsKKwkJc3RydWN0IGlycV9kYXRhICpkYXRhOworCQlpbnQgdmlycTsKKworCQl2aXJxID0gaXJxX2xpbmVhcl9yZXZtYXAoYXJtYWRhXzM3MF94cF9tcGljX2RvbWFpbiwgaXJxKTsKKwkJaWYgKHZpcnEgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpcnEgIT0gQVJNQURBXzM3MF9YUF9USU1FUjBfUEVSX0NQVV9JUlEpCisJCQl3cml0ZWwoaXJxLCBwZXJfY3B1X2ludF9iYXNlICsKKwkJCSAgICAgICBBUk1BREFfMzcwX1hQX0lOVF9DTEVBUl9NQVNLX09GRlMpOworCQllbHNlCisJCQl3cml0ZWwoaXJxLCBtYWluX2ludF9iYXNlICsKKwkJCSAgICAgICBBUk1BREFfMzcwX1hQX0lOVF9TRVRfRU5BQkxFX09GRlMpOworCisJCWRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKHZpcnEpOworCQlpZiAoIWlycWRfaXJxX2Rpc2FibGVkKGRhdGEpKQorCQkJYXJtYWRhXzM3MF94cF9pcnFfdW5tYXNrKGRhdGEpOworCX0KKworCS8qIFJlY29uZmlndXJlIGRvb3JiZWxscyBmb3IgSVBJcyBhbmQgTVNJcyAqLworCXdyaXRlbChkb29yYmVsbF9tYXNrX3JlZywKKwkgICAgICAgcGVyX2NwdV9pbnRfYmFzZSArIEFSTUFEQV8zNzBfWFBfSU5fRFJCRUxfTVNLX09GRlMpOworCWlmIChkb29yYmVsbF9tYXNrX3JlZyAmIElQSV9ET09SQkVMTF9NQVNLKQorCQl3cml0ZWwoMCwgcGVyX2NwdV9pbnRfYmFzZSArIEFSTUFEQV8zNzBfWFBfSU5UX0NMRUFSX01BU0tfT0ZGUyk7CisJaWYgKGRvb3JiZWxsX21hc2tfcmVnICYgUENJX01TSV9ET09SQkVMTF9NQVNLKQorCQl3cml0ZWwoMSwgcGVyX2NwdV9pbnRfYmFzZSArIEFSTUFEQV8zNzBfWFBfSU5UX0NMRUFSX01BU0tfT0ZGUyk7Cit9CisKK3N0cnVjdCBzeXNjb3JlX29wcyBhcm1hZGFfMzcwX3hwX21waWNfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBhcm1hZGFfMzcwX3hwX21waWNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFybWFkYV8zNzBfeHBfbXBpY19yZXN1bWUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBhcm1hZGFfMzcwX3hwX21waWNfb2ZfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpCiB7CkBAIC01MzAsNiArNTkxLDggQEAKIAkJCQkJYXJtYWRhXzM3MF94cF9tcGljX2hhbmRsZV9jYXNjYWRlX2lycSk7CiAJfQogCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmFybWFkYV8zNzBfeHBfbXBpY19zeXNjb3JlX29wcyk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMtY29tbW9uLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uYwppbmRleCA2YWUzY2RlZS4uZDExMWFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMtY29tbW9uLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMtY29tbW9uLmMKQEAgLTE2Nyw2ICsxNjcsMzIgQEAKIAlpb3VubWFwKHJlZ3MpOwogfQogCisjZGVmaW5lIEFUOTFfUlRUX01SCQkweDAwCQkJLyogUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9SVFRfQUxNSUVOCQkoMSA8PCAxNikJCS8qIEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgQVQ5MV9SVFRfUlRUSU5DSUVOCSgxIDw8IDE3KQkJLyogUmVhbCBUaW1lIFRpbWVyIEluY3JlbWVudCBJbnRlcnJ1cHQgRW5hYmxlICovCisKK3ZvaWQgX19pbml0IGFpY19jb21tb25fcnR0X2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwkvKgorCSAqIFRoZSBhdDkxc2FtOTI2MyBTb0MgaGFzIDIgaW5zdGFuY2VzIG9mIHRoZSBSVFQgYmxvY2ssIGhlbmNlIHdlCisJICogaXRlcmF0ZSBvdmVyIHRoZSBEVCB0byBmaW5kIGVhY2ggb2NjdXJyZW5jZS4KKwkgKi8KKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJhdG1lbCxhdDkxc2FtOTI2MC1ydHQiKSB7CisJCXJlZ3MgPSBvZl9pb21hcChucCwgMCk7CisJCWlmICghcmVncykKKwkJCWNvbnRpbnVlOworCisJCXdyaXRlbChyZWFkbChyZWdzICsgQVQ5MV9SVFRfTVIpICYKKwkJICAgICAgIH4oQVQ5MV9SVFRfQUxNSUVOIHwgQVQ5MV9SVFRfUlRUSU5DSUVOKSwKKwkJICAgICAgIHJlZ3MgKyBBVDkxX1JUVF9NUik7CisKKwkJaW91bm1hcChyZWdzKTsKKwl9Cit9CisKIHZvaWQgX19pbml0IGFpY19jb21tb25faXJxX2ZpeHVwKGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoZXMpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKQEAgLTIxNyw4ICsyNDMsOSBAQAogCX0KIAogCXJldCA9IGlycV9hbGxvY19kb21haW5fZ2VuZXJpY19jaGlwcyhkb21haW4sIDMyLCAxLCBuYW1lLAotCQkJCQkgICAgIGhhbmRsZV9sZXZlbF9pcnEsIDAsIDAsCi0JCQkJCSAgICAgSVJRQ0hJUF9TS0lQX1NFVF9XQUtFKTsKKwkJCQkJICAgICBoYW5kbGVfZmFzdGVvaV9pcnEsCisJCQkJCSAgICAgSVJRX05PUkVRVUVTVCB8IElSUV9OT1BST0JFIHwKKwkJCQkJICAgICBJUlFfTk9BVVRPRU4sIDAsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2RvbWFpbl9yZW1vdmU7CiAKQEAgLTIzMCw3ICsyNTcsNiBAQAogCQlnYy0+dW51c2VkID0gMDsKIAkJZ2MtPndha2VfZW5hYmxlZCA9IH4wOwogCQlnYy0+Y2hpcF90eXBlc1swXS50eXBlID0gSVJRX1RZUEVfU0VOU0VfTUFTSzsKLQkJZ2MtPmNoaXBfdHlwZXNbMF0uaGFuZGxlciA9IGhhbmRsZV9mYXN0ZW9pX2lycTsKIAkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfZW9pID0gaXJxX2djX2VvaTsKIAkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfc2V0X3dha2UgPSBpcnFfZ2Nfc2V0X3dha2U7CiAJCWdjLT5jaGlwX3R5cGVzWzBdLmNoaXAuaXJxX3NodXRkb3duID0gYWljX2NvbW1vbl9zaHV0ZG93bjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5oIGIvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMtY29tbW9uLmgKaW5kZXggOTBhYTAwZS4uNjAzZjBhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMtY29tbW9uLmgKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMtY29tbW9uLmgKQEAgLTM0LDYgKzM0LDggQEAKIAogdm9pZCBfX2luaXQgYWljX2NvbW1vbl9ydGNfaXJxX2ZpeHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCk7CiAKK3ZvaWQgX19pbml0IGFpY19jb21tb25fcnR0X2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpOworCiB2b2lkIF9faW5pdCBhaWNfY29tbW9uX2lycV9maXh1cChjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzKTsKIAogI2VuZGlmIC8qIF9fSVJRX0FUTUVMX0FJQ19DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLmMKaW5kZXggOWEyY2YzYy4uZGFlMzYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy5jCkBAIC02NSwxMSArNjUsMTEgQEAKIAl1MzIgaXJxbnI7CiAJdTMyIGlycXN0YXQ7CiAKLQlpcnFuciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSVZSKTsKLQlpcnFzdGF0ID0gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JU1IpOworCWlycW5yID0gaXJxX3JlZ19yZWFkbChnYywgQVQ5MV9BSUNfSVZSKTsKKwlpcnFzdGF0ID0gaXJxX3JlZ19yZWFkbChnYywgQVQ5MV9BSUNfSVNSKTsKIAogCWlmICghaXJxc3RhdCkKLQkJaXJxX3JlZ193cml0ZWwoMCwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfRU9JQ1IpOworCQlpcnFfcmVnX3dyaXRlbChnYywgMCwgQVQ5MV9BSUNfRU9JQ1IpOwogCWVsc2UKIAkJaGFuZGxlX2RvbWFpbl9pcnEoYWljX2RvbWFpbiwgaXJxbnIsIHJlZ3MpOwogfQpAQCAtODAsNyArODAsNyBAQAogCiAJLyogRW5hYmxlIGludGVycnVwdCBvbiBBSUM1ICovCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKGQtPm1hc2ssIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0lTQ1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCBkLT5tYXNrLCBBVDkxX0FJQ19JU0NSKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIAogCXJldHVybiAwOwpAQCAtOTIsMTIgKzkyLDEyIEBACiAJdW5zaWduZWQgaW50IHNtcjsKIAlpbnQgcmV0OwogCi0Jc21yID0gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TTVIoZC0+aHdpcnEpKTsKKwlzbXIgPSBpcnFfcmVnX3JlYWRsKGdjLCBBVDkxX0FJQ19TTVIoZC0+aHdpcnEpKTsKIAlyZXQgPSBhaWNfY29tbW9uX3NldF90eXBlKGQsIHR5cGUsICZzbXIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpcnFfcmVnX3dyaXRlbChzbXIsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX1NNUihkLT5od2lycSkpOworCWlycV9yZWdfd3JpdGVsKGdjLCBzbXIsIEFUOTFfQUlDX1NNUihkLT5od2lycSkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDgsOCArMTA4LDggQEAKIAlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChnYy0+bWFza19jYWNoZSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSURDUik7Ci0JaXJxX3JlZ193cml0ZWwoZ2MtPndha2VfYWN0aXZlLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JRUNSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZ2MtPm1hc2tfY2FjaGUsIEFUOTFfQUlDX0lEQ1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCBnYy0+d2FrZV9hY3RpdmUsIEFUOTFfQUlDX0lFQ1IpOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogCkBAIC0xMTgsOCArMTE4LDggQEAKIAlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChnYy0+d2FrZV9hY3RpdmUsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0lEQ1IpOwotCWlycV9yZWdfd3JpdGVsKGdjLT5tYXNrX2NhY2hlLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JRUNSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZ2MtPndha2VfYWN0aXZlLCBBVDkxX0FJQ19JRENSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZ2MtPm1hc2tfY2FjaGUsIEFUOTFfQUlDX0lFQ1IpOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogCkBAIC0xMjgsOCArMTI4LDggQEAKIAlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbCgweGZmZmZmZmZmLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JRENSKTsKLQlpcnFfcmVnX3dyaXRlbCgweGZmZmZmZmZmLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JQ0NSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgMHhmZmZmZmZmZiwgQVQ5MV9BSUNfSURDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDB4ZmZmZmZmZmYsIEFUOTFfQUlDX0lDQ1IpOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogI2Vsc2UKQEAgLTE0OCwyNCArMTQ4LDI0IEBACiAJICogd2lsbCBub3QgTG9jayBvdXQgbklSUQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWlycV9yZWdfd3JpdGVsKDAsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0VPSUNSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIDAsIEFUOTFfQUlDX0VPSUNSKTsKIAogCS8qCiAJICogU3B1cmlvdXMgSW50ZXJydXB0IElEIGluIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlci4KIAkgKiBXaGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW50ZXJydXB0LCB0aGUgSVJRIFZlY3RvciBSZWdpc3RlcgogCSAqIHJlYWRzIHRoZSB2YWx1ZSBzdG9yZWQgaW4gQUlDX1NQVQogCSAqLwotCWlycV9yZWdfd3JpdGVsKDB4ZmZmZmZmZmYsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX1NQVSk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDB4ZmZmZmZmZmYsIEFUOTFfQUlDX1NQVSk7CiAKIAkvKiBObyBkZWJ1Z2dpbmcgaW4gQUlDOiBEZWJ1ZyAoUHJvdGVjdCkgQ29udHJvbCBSZWdpc3RlciAqLwotCWlycV9yZWdfd3JpdGVsKDAsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0RDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDAsIEFUOTFfQUlDX0RDUik7CiAKIAkvKiBEaXNhYmxlIGFuZCBjbGVhciBhbGwgaW50ZXJydXB0cyBpbml0aWFsbHkgKi8KLQlpcnFfcmVnX3dyaXRlbCgweGZmZmZmZmZmLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JRENSKTsKLQlpcnFfcmVnX3dyaXRlbCgweGZmZmZmZmZmLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JQ0NSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgMHhmZmZmZmZmZiwgQVQ5MV9BSUNfSURDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDB4ZmZmZmZmZmYsIEFUOTFfQUlDX0lDQ1IpOwogCiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCi0JCWlycV9yZWdfd3JpdGVsKGksIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX1NWUihpKSk7CisJCWlycV9yZWdfd3JpdGVsKGdjLCBpLCBBVDkxX0FJQ19TVlIoaSkpOwogfQogCiBzdGF0aWMgaW50IGFpY19pcnFfZG9tYWluX3hsYXRlKHN0cnVjdCBpcnFfZG9tYWluICpkLApAQCAtMTk1LDEwICsxOTUsMTAgQEAKIAlnYyA9IGRnYy0+Z2NbaWR4XTsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlzbXIgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX1NNUigqb3V0X2h3aXJxKSk7CisJc21yID0gaXJxX3JlZ19yZWFkbChnYywgQVQ5MV9BSUNfU01SKCpvdXRfaHdpcnEpKTsKIAlyZXQgPSBhaWNfY29tbW9uX3NldF9wcmlvcml0eShpbnRzcGVjWzJdLCAmc21yKTsKIAlpZiAoIXJldCkKLQkJaXJxX3JlZ193cml0ZWwoc21yLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TTVIoKm91dF9od2lycSkpOworCQlpcnFfcmVnX3dyaXRlbChnYywgc21yLCBBVDkxX0FJQ19TTVIoKm91dF9od2lycSkpOwogCWlycV9nY191bmxvY2soZ2MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIwOSwxNiArMjA5LDMyIEBACiAJLnhsYXRlCT0gYWljX2lycV9kb21haW5feGxhdGUsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlfYWljX2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9haWNfaXJxX2ZpeHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCkKIHsKIAlhaWNfY29tbW9uX3J0Y19pcnFfZml4dXAocm9vdCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MF9haWNfaXJxX2ZpeHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCkKK3sKKwlhaWNfY29tbW9uX3J0dF9pcnFfZml4dXAocm9vdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOWc0NV9haWNfaXJxX2ZpeHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCkKK3sKKwlhaWNfY29tbW9uX3J0Y19pcnFfZml4dXAocm9vdCk7CisJYWljX2NvbW1vbl9ydHRfaXJxX2ZpeHVwKHJvb3QpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIGFpY19pcnFfZml4dXBzW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOWc0NSIsIC5kYXRhID0gYXQ5MXNhbTlfYWljX2lycV9maXh1cCB9LAotCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTluMTIiLCAuZGF0YSA9IGF0OTFzYW05X2FpY19pcnFfZml4dXAgfSwKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05cmwiLCAuZGF0YSA9IGF0OTFzYW05X2FpY19pcnFfZml4dXAgfSwKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUiLCAuZGF0YSA9IGF0OTFzYW05X2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAiLCAuZGF0YSA9IGF0OTFybTkyMDBfYWljX2lycV9maXh1cCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlnNDUiLCAuZGF0YSA9IGF0OTFzYW05ZzQ1X2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05bjEyIiwgLmRhdGEgPSBhdDkxcm05MjAwX2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05cmwiLCAuZGF0YSA9IGF0OTFzYW05ZzQ1X2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUiLCAuZGF0YSA9IGF0OTFybTkyMDBfYWljX2lycV9maXh1cCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjAiLCAuZGF0YSA9IGF0OTFzYW05MjYwX2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYxIiwgLmRhdGEgPSBhdDkxc2FtOTI2MF9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MyIsIC5kYXRhID0gYXQ5MXNhbTkyNjBfYWljX2lycV9maXh1cCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlnMjAiLCAuZGF0YSA9IGF0OTFzYW05MjYwX2FpY19pcnFfZml4dXAgfSwKIAl7IC8qIHNlbnRpbmVsICovIH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYzUuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljNS5jCmluZGV4IGExMWFhZTguLmEyZThjM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljNS5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljNS5jCkBAIC03NSwxMSArNzUsMTEgQEAKIAl1MzIgaXJxbnI7CiAJdTMyIGlycXN0YXQ7CiAKLQlpcnFuciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lWUik7Ci0JaXJxc3RhdCA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lTUik7CisJaXJxbnIgPSBpcnFfcmVnX3JlYWRsKGdjLCBBVDkxX0FJQzVfSVZSKTsKKwlpcnFzdGF0ID0gaXJxX3JlZ19yZWFkbChnYywgQVQ5MV9BSUM1X0lTUik7CiAKIAlpZiAoIWlycXN0YXQpCi0JCWlycV9yZWdfd3JpdGVsKDAsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9FT0lDUik7CisJCWlycV9yZWdfd3JpdGVsKGdjLCAwLCBBVDkxX0FJQzVfRU9JQ1IpOwogCWVsc2UKIAkJaGFuZGxlX2RvbWFpbl9pcnEoYWljNV9kb21haW4sIGlycW5yLCByZWdzKTsKIH0KQEAgLTkyLDggKzkyLDggQEAKIAogCS8qIERpc2FibGUgaW50ZXJydXB0IG9uIEFJQzUgKi8KIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZC0+aHdpcnEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCWlycV9yZWdfd3JpdGVsKDEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRENSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZC0+aHdpcnEsIEFUOTFfQUlDNV9TU1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAxLCBBVDkxX0FJQzVfSURDUik7CiAJZ2MtPm1hc2tfY2FjaGUgJj0gfmQtPm1hc2s7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CkBAIC0xMDYsOCArMTA2LDggQEAKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHQgb24gQUlDNSAqLwogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChkLT5od2lycSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NTUik7Ci0JaXJxX3JlZ193cml0ZWwoMSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lFQ1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCBkLT5od2lycSwgQVQ5MV9BSUM1X1NTUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDEsIEFUOTFfQUlDNV9JRUNSKTsKIAlnYy0+bWFza19jYWNoZSB8PSBkLT5tYXNrOwogCWlycV9nY191bmxvY2soZ2MpOwogfQpAQCAtMTIwLDggKzEyMCw4IEBACiAKIAkvKiBFbmFibGUgaW50ZXJydXB0IG9uIEFJQzUgKi8KIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZC0+aHdpcnEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCWlycV9yZWdfd3JpdGVsKDEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JU0NSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZC0+aHdpcnEsIEFUOTFfQUlDNV9TU1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAxLCBBVDkxX0FJQzVfSVNDUik7CiAJaXJxX2djX3VubG9jayhnYyk7CiAKIAlyZXR1cm4gMDsKQEAgLTEzNiwxMSArMTM2LDExIEBACiAJaW50IHJldDsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChkLT5od2lycSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NTUik7Ci0Jc21yID0gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU01SKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZC0+aHdpcnEsIEFUOTFfQUlDNV9TU1IpOworCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDNV9TTVIpOwogCXJldCA9IGFpY19jb21tb25fc2V0X3R5cGUoZCwgdHlwZSwgJnNtcik7CiAJaWYgKCFyZXQpCi0JCWlycV9yZWdfd3JpdGVsKHNtciwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NNUik7CisJCWlycV9yZWdfd3JpdGVsKGdjLCBzbXIsIEFUOTFfQUlDNV9TTVIpOwogCWlycV9nY191bmxvY2soZ2MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTE2MiwxMiArMTYyLDExIEBACiAJCWlmICgobWFzayAmIGdjLT5tYXNrX2NhY2hlKSA9PSAobWFzayAmIGdjLT53YWtlX2FjdGl2ZSkpCiAJCQljb250aW51ZTsKIAotCQlpcnFfcmVnX3dyaXRlbChpICsgZ2MtPmlycV9iYXNlLAotCQkJICAgICAgIGJnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKKwkJaXJxX3JlZ193cml0ZWwoYmdjLCBpICsgZ2MtPmlycV9iYXNlLCBBVDkxX0FJQzVfU1NSKTsKIAkJaWYgKG1hc2sgJiBnYy0+d2FrZV9hY3RpdmUpCi0JCQlpcnFfcmVnX3dyaXRlbCgxLCBiZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lFQ1IpOworCQkJaXJxX3JlZ193cml0ZWwoYmdjLCAxLCBBVDkxX0FJQzVfSUVDUik7CiAJCWVsc2UKLQkJCWlycV9yZWdfd3JpdGVsKDEsIGJnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfSURDUik7CisJCQlpcnFfcmVnX3dyaXRlbChiZ2MsIDEsIEFUOTFfQUlDNV9JRENSKTsKIAl9CiAJaXJxX2djX3VubG9jayhiZ2MpOwogfQpAQCAtMTg3LDEyICsxODYsMTEgQEAKIAkJaWYgKChtYXNrICYgZ2MtPm1hc2tfY2FjaGUpID09IChtYXNrICYgZ2MtPndha2VfYWN0aXZlKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlycV9yZWdfd3JpdGVsKGkgKyBnYy0+aXJxX2Jhc2UsCi0JCQkgICAgICAgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOworCQlpcnFfcmVnX3dyaXRlbChiZ2MsIGkgKyBnYy0+aXJxX2Jhc2UsIEFUOTFfQUlDNV9TU1IpOwogCQlpZiAobWFzayAmIGdjLT5tYXNrX2NhY2hlKQotCQkJaXJxX3JlZ193cml0ZWwoMSwgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRUNSKTsKKwkJCWlycV9yZWdfd3JpdGVsKGJnYywgMSwgQVQ5MV9BSUM1X0lFQ1IpOwogCQllbHNlCi0JCQlpcnFfcmVnX3dyaXRlbCgxLCBiZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lEQ1IpOworCQkJaXJxX3JlZ193cml0ZWwoYmdjLCAxLCBBVDkxX0FJQzVfSURDUik7CiAJfQogCWlycV9nY191bmxvY2soYmdjKTsKIH0KQEAgLTIwNywxMCArMjA1LDkgQEAKIAogCWlycV9nY19sb2NrKGJnYyk7CiAJZm9yIChpID0gMDsgaSA8IGRnYy0+aXJxc19wZXJfY2hpcDsgaSsrKSB7Ci0JCWlycV9yZWdfd3JpdGVsKGkgKyBnYy0+aXJxX2Jhc2UsCi0JCQkgICAgICAgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCQlpcnFfcmVnX3dyaXRlbCgxLCBiZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lEQ1IpOwotCQlpcnFfcmVnX3dyaXRlbCgxLCBiZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lDQ1IpOworCQlpcnFfcmVnX3dyaXRlbChiZ2MsIGkgKyBnYy0+aXJxX2Jhc2UsIEFUOTFfQUlDNV9TU1IpOworCQlpcnFfcmVnX3dyaXRlbChiZ2MsIDEsIEFUOTFfQUlDNV9JRENSKTsKKwkJaXJxX3JlZ193cml0ZWwoYmdjLCAxLCBBVDkxX0FJQzVfSUNDUik7CiAJfQogCWlycV9nY191bmxvY2soYmdjKTsKIH0KQEAgLTIzMCwyNCArMjI3LDI0IEBACiAJICogd2lsbCBub3QgTG9jayBvdXQgbklSUQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWlycV9yZWdfd3JpdGVsKDAsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9FT0lDUik7CisJCWlycV9yZWdfd3JpdGVsKGdjLCAwLCBBVDkxX0FJQzVfRU9JQ1IpOwogCiAJLyoKIAkgKiBTcHVyaW91cyBJbnRlcnJ1cHQgSUQgaW4gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyLgogCSAqIFdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCBpbnRlcnJ1cHQsIHRoZSBJUlEgVmVjdG9yIFJlZ2lzdGVyCiAJICogcmVhZHMgdGhlIHZhbHVlIHN0b3JlZCBpbiBBSUNfU1BVCiAJICovCi0JaXJxX3JlZ193cml0ZWwoMHhmZmZmZmZmZiwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NQVSk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDB4ZmZmZmZmZmYsIEFUOTFfQUlDNV9TUFUpOwogCiAJLyogTm8gZGVidWdnaW5nIGluIEFJQzogRGVidWcgKFByb3RlY3QpIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlpcnFfcmVnX3dyaXRlbCgwLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfRENSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgMCwgQVQ5MV9BSUM1X0RDUik7CiAKIAkvKiBEaXNhYmxlIGFuZCBjbGVhciBhbGwgaW50ZXJydXB0cyBpbml0aWFsbHkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZG9tYWluLT5yZXZtYXBfc2l6ZTsgaSsrKSB7Ci0JCWlycV9yZWdfd3JpdGVsKGksIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCQlpcnFfcmVnX3dyaXRlbChpLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1ZSKTsKLQkJaXJxX3JlZ193cml0ZWwoMSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lEQ1IpOwotCQlpcnFfcmVnX3dyaXRlbCgxLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfSUNDUik7CisJCWlycV9yZWdfd3JpdGVsKGdjLCBpLCBBVDkxX0FJQzVfU1NSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIGksIEFUOTFfQUlDNV9TVlIpOworCQlpcnFfcmVnX3dyaXRlbChnYywgMSwgQVQ5MV9BSUM1X0lEQ1IpOworCQlpcnFfcmVnX3dyaXRlbChnYywgMSwgQVQ5MV9BSUM1X0lDQ1IpOwogCX0KIH0KIApAQCAtMjczLDExICsyNzAsMTEgQEAKIAlnYyA9IGRnYy0+Z2NbMF07CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoKm91dF9od2lycSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NTUik7Ci0Jc21yID0gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU01SKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgKm91dF9od2lycSwgQVQ5MV9BSUM1X1NTUik7CisJc21yID0gaXJxX3JlZ19yZWFkbChnYywgQVQ5MV9BSUM1X1NNUik7CiAJcmV0ID0gYWljX2NvbW1vbl9zZXRfcHJpb3JpdHkoaW50c3BlY1syXSwgJnNtcik7CiAJaWYgKCFyZXQpCi0JCWlycV9yZWdfd3JpdGVsKGludHNwZWNbMl0gfCBzbXIsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TTVIpOworCQlpcnFfcmVnX3dyaXRlbChnYywgaW50c3BlY1syXSB8IHNtciwgQVQ5MV9BSUM1X1NNUik7CiAJaXJxX2djX3VubG9jayhnYyk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1iY203MTIwLWwyLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWJjbTcxMjAtbDIuYwppbmRleCBiOWY0ZmI4Li44ZWVjOGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWJjbTcxMjAtbDIuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWJjbTcxMjAtbDIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CkBAIC0yMyw0NyArMjQsNTIgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5lZF9pcnEuaD4KIAogI2luY2x1ZGUgImlycWNoaXAuaCIKIAotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCiAvKiBSZWdpc3RlciBvZmZzZXQgaW4gdGhlIEwyIGludGVycnVwdCBjb250cm9sbGVyICovCiAjZGVmaW5lIElSUUVOCQkweDAwCiAjZGVmaW5lIElSUVNUQVQJCTB4MDQKIAorI2RlZmluZSBNQVhfV09SRFMJNAorI2RlZmluZSBJUlFTX1BFUl9XT1JECTMyCisKIHN0cnVjdCBiY203MTIwX2wyX2ludGNfZGF0YSB7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOworCXVuc2lnbmVkIGludCBuX3dvcmRzOworCXZvaWQgX19pb21lbSAqYmFzZVtNQVhfV09SRFNdOwogCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CiAJYm9vbCBjYW5fd2FrZTsKLQl1MzIgaXJxX2Z3ZF9tYXNrOwotCXUzMiBpcnFfbWFwX21hc2s7Ci0JdTMyIHNhdmVkX21hc2s7CisJdTMyIGlycV9md2RfbWFza1tNQVhfV09SRFNdOworCXUzMiBpcnFfbWFwX21hc2tbTUFYX1dPUkRTXTsKIH07CiAKIHN0YXRpYyB2b2lkIGJjbTcxMjBfbDJfaW50Y19pcnFfaGFuZGxlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgYmNtNzEyMF9sMl9pbnRjX2RhdGEgKmIgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOwogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOwotCXUzMiBzdGF0dXM7CisJdW5zaWduZWQgaW50IGlkeDsKIAogCWNoYWluZWRfaXJxX2VudGVyKGNoaXAsIGRlc2MpOwogCi0Jc3RhdHVzID0gX19yYXdfcmVhZGwoYi0+YmFzZSArIElSUVNUQVQpOworCWZvciAoaWR4ID0gMDsgaWR4IDwgYi0+bl93b3JkczsgaWR4KyspIHsKKwkJaW50IGJhc2UgPSBpZHggKiBJUlFTX1BFUl9XT1JEOworCQlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPQorCQkJaXJxX2dldF9kb21haW5fZ2VuZXJpY19jaGlwKGItPmRvbWFpbiwgYmFzZSk7CisJCXVuc2lnbmVkIGxvbmcgcGVuZGluZzsKKwkJaW50IGh3aXJxOwogCi0JaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCWRvX2JhZF9JUlEoaXJxLCBkZXNjKTsKLQkJZ290byBvdXQ7CisJCWlycV9nY19sb2NrKGdjKTsKKwkJcGVuZGluZyA9IGlycV9yZWdfcmVhZGwoZ2MsIElSUVNUQVQpICYgZ2MtPm1hc2tfY2FjaGU7CisJCWlycV9nY191bmxvY2soZ2MpOworCisJCWZvcl9lYWNoX3NldF9iaXQoaHdpcnEsICZwZW5kaW5nLCBJUlFTX1BFUl9XT1JEKSB7CisJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxX2ZpbmRfbWFwcGluZyhiLT5kb21haW4sCisJCQkJCSAgIGJhc2UgKyBod2lycSkpOworCQl9CiAJfQogCi0JZG8gewotCQlpcnEgPSBmZnMoc3RhdHVzKSAtIDE7Ci0JCXN0YXR1cyAmPSB+KDEgPDwgaXJxKTsKLQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYi0+ZG9tYWluLCBpcnEpKTsKLQl9IHdoaWxlIChzdGF0dXMpOwotCi1vdXQ6CiAJY2hhaW5lZF9pcnFfZXhpdChjaGlwLCBkZXNjKTsKIH0KIApAQCAtNzEsMjYgKzc3LDIwIEBACiB7CiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJc3RydWN0IGJjbTcxMjBfbDJfaW50Y19kYXRhICpiID0gZ2MtPnByaXZhdGU7Ci0JdTMyIHJlZzsKIAogCWlycV9nY19sb2NrKGdjKTsKLQkvKiBTYXZlIHRoZSBjdXJyZW50IG1hc2sgYW5kIHRoZSBpbnRlcnJ1cHQgZm9yd2FyZCBtYXNrICovCi0JYi0+c2F2ZWRfbWFzayA9IF9fcmF3X3JlYWRsKGItPmJhc2UpIHwgYi0+aXJxX2Z3ZF9tYXNrOwotCWlmIChiLT5jYW5fd2FrZSkgewotCQlyZWcgPSBiLT5zYXZlZF9tYXNrIHwgZ2MtPndha2VfYWN0aXZlOwotCQlfX3Jhd193cml0ZWwocmVnLCBiLT5iYXNlKTsKLQl9CisJaWYgKGItPmNhbl93YWtlKQorCQlpcnFfcmVnX3dyaXRlbChnYywgZ2MtPm1hc2tfY2FjaGUgfCBnYy0+d2FrZV9hY3RpdmUsIElSUUVOKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIAogc3RhdGljIHZvaWQgYmNtNzEyMF9sMl9pbnRjX3Jlc3VtZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jc3RydWN0IGJjbTcxMjBfbDJfaW50Y19kYXRhICpiID0gZ2MtPnByaXZhdGU7CiAKIAkvKiBSZXN0b3JlIHRoZSBzYXZlZCBtYXNrICovCiAJaXJxX2djX2xvY2soZ2MpOwotCV9fcmF3X3dyaXRlbChiLT5zYXZlZF9tYXNrLCBiLT5iYXNlKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZ2MtPm1hc2tfY2FjaGUsIElSUUVOKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtOTksMTQgKzk5LDIwIEBACiAJCQkJCWludCBpcnEsIGNvbnN0IF9fYmUzMiAqbWFwX21hc2spCiB7CiAJaW50IHBhcmVudF9pcnE7CisJdW5zaWduZWQgaW50IGlkeDsKIAogCXBhcmVudF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkbiwgaXJxKTsKLQlpZiAocGFyZW50X2lycSA8IDApIHsKKwlpZiAoIXBhcmVudF9pcnEpIHsKIAkJcHJfZXJyKCJmYWlsZWQgdG8gbWFwIGludGVycnVwdCAlZFxuIiwgaXJxKTsKLQkJcmV0dXJuIHBhcmVudF9pcnE7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRhdGEtPmlycV9tYXBfbWFzayB8PSBiZTMyX3RvX2NwdXAobWFwX21hc2sgKyBpcnEpOworCS8qIEZvciBtdWx0aXBsZSBwYXJlbnQgSVJRcyB3aXRoIG11bHRpcGxlIHdvcmRzLCB0aGlzIGxvb2tzIGxpa2U6CisJICogPGlycTBfdzAgaXJxMF93MSBpcnExX3cwIGlycTFfdzEgLi4uPgorCSAqLworCWZvciAoaWR4ID0gMDsgaWR4IDwgZGF0YS0+bl93b3JkczsgaWR4KyspCisJCWRhdGEtPmlycV9tYXBfbWFza1tpZHhdIHw9CisJCQliZTMyX3RvX2NwdXAobWFwX21hc2sgKyBpcnEgKiBkYXRhLT5uX3dvcmRzICsgaWR4KTsKIAogCWlycV9zZXRfaGFuZGxlcl9kYXRhKHBhcmVudF9pcnEsIGRhdGEpOwogCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKHBhcmVudF9pcnEsIGJjbTcxMjBfbDJfaW50Y19pcnFfaGFuZGxlKTsKQEAgLTEyMywyNiArMTI5LDQxIEBACiAJc3RydWN0IGlycV9jaGlwX3R5cGUgKmN0OwogCWNvbnN0IF9fYmUzMiAqbWFwX21hc2s7CiAJaW50IG51bV9wYXJlbnRfaXJxczsKLQlpbnQgcmV0ID0gMCwgbGVuLCBpcnE7CisJaW50IHJldCA9IDAsIGxlbjsKKwl1bnNpZ25lZCBpbnQgaWR4LCBpcnEsIGZsYWdzOwogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRhdGEtPmJhc2UgPSBvZl9pb21hcChkbiwgMCk7Ci0JaWYgKCFkYXRhLT5iYXNlKSB7CisJZm9yIChpZHggPSAwOyBpZHggPCBNQVhfV09SRFM7IGlkeCsrKSB7CisJCWRhdGEtPmJhc2VbaWR4XSA9IG9mX2lvbWFwKGRuLCBpZHgpOworCQlpZiAoIWRhdGEtPmJhc2VbaWR4XSkKKwkJCWJyZWFrOworCQlkYXRhLT5uX3dvcmRzID0gaWR4ICsgMTsKKwl9CisJaWYgKCFkYXRhLT5uX3dvcmRzKSB7CiAJCXByX2VycigiZmFpbGVkIHRvIHJlbWFwIGludGMgTDIgcmVnaXN0ZXJzXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZTsKKwkJZ290byBvdXRfdW5tYXA7CiAJfQogCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRuLCAiYnJjbSxpbnQtZndkLW1hc2siLCAmZGF0YS0+aXJxX2Z3ZF9tYXNrKSkKLQkJZGF0YS0+aXJxX2Z3ZF9tYXNrID0gMDsKLQotCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0IHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGZvcndhcmQgbWFzayBhbmQgaGF2ZQotCSAqIHRoZSBvdGhlciBkaXNhYmxlZAorCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0cyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBmb3J3YXJkIG1hc2s7CisJICogZGlzYWJsZSBhbGwgb3RoZXJzLiAgSWYgdGhlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QgKC1FSU5WQUwpLAorCSAqIGFzc3VtZSBhbGwgemVyb2VzLgogCSAqLwotCV9fcmF3X3dyaXRlbChkYXRhLT5pcnFfZndkX21hc2ssIGRhdGEtPmJhc2UgKyBJUlFFTik7CisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZG4sICJicmNtLGludC1md2QtbWFzayIsCisJCQkJCSBkYXRhLT5pcnFfZndkX21hc2ssIGRhdGEtPm5fd29yZHMpOworCWlmIChyZXQgPT0gMCB8fCByZXQgPT0gLUVJTlZBTCkgeworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGRhdGEtPm5fd29yZHM7IGlkeCsrKQorCQkJX19yYXdfd3JpdGVsKGRhdGEtPmlycV9md2RfbWFza1tpZHhdLAorCQkJCSAgICAgZGF0YS0+YmFzZVtpZHhdICsgSVJRRU4pOworCX0gZWxzZSB7CisJCS8qIHByb3BlcnR5IGV4aXN0cyBidXQgaGFzIHRoZSB3cm9uZyBudW1iZXIgb2Ygd29yZHMgKi8KKwkJcHJfZXJyKCJpbnZhbGlkIGludC1md2QtbWFzayBwcm9wZXJ0eVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubWFwOworCX0KIAogCW51bV9wYXJlbnRfaXJxcyA9IG9mX2lycV9jb3VudChkbik7CiAJaWYgKG51bV9wYXJlbnRfaXJxcyA8PSAwKSB7CkBAIC0xNTIsNyArMTczLDggQEAKIAl9CiAKIAltYXBfbWFzayA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImJyY20saW50LW1hcC1tYXNrIiwgJmxlbik7Ci0JaWYgKCFtYXBfbWFzayB8fCAobGVuICE9IChzaXplb2YoKm1hcF9tYXNrKSAqIG51bV9wYXJlbnRfaXJxcykpKSB7CisJaWYgKCFtYXBfbWFzayB8fAorCSAgICAobGVuICE9IChzaXplb2YoKm1hcF9tYXNrKSAqIG51bV9wYXJlbnRfaXJxcyAqIGRhdGEtPm5fd29yZHMpKSkgewogCQlwcl9lcnIoImludmFsaWQgYnJjbSxpbnQtbWFwLW1hc2sgcHJvcGVydHlcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bm1hcDsKQEAgLTE2NCw1NiArMTg2LDcwIEBACiAJCQlnb3RvIG91dF91bm1hcDsKIAl9CiAKLQlkYXRhLT5kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIoZG4sIDMyLAotCQkJCQkmaXJxX2dlbmVyaWNfY2hpcF9vcHMsIE5VTEwpOworCWRhdGEtPmRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihkbiwgSVJRU19QRVJfV09SRCAqIGRhdGEtPm5fd29yZHMsCisJCQkJCSAgICAgJmlycV9nZW5lcmljX2NoaXBfb3BzLCBOVUxMKTsKIAlpZiAoIWRhdGEtPmRvbWFpbikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bm1hcDsKIAl9CiAKLQlyZXQgPSBpcnFfYWxsb2NfZG9tYWluX2dlbmVyaWNfY2hpcHMoZGF0YS0+ZG9tYWluLCAzMiwgMSwKLQkJCQlkbi0+ZnVsbF9uYW1lLCBoYW5kbGVfbGV2ZWxfaXJxLCBjbHIsIDAsCi0JCQkJSVJRX0dDX0lOSVRfTUFTS19DQUNIRSk7CisJLyogTUlQUyBjaGlwcyBzdHJhcHBlZCBmb3IgQkUgd2lsbCBhdXRvbWFnaWNhbGx5IGNvbmZpZ3VyZSB0aGUKKwkgKiBwZXJpcGhlcmFsIHJlZ2lzdGVycyBmb3IgQ1BVLW5hdGl2ZSBieXRlIG9yZGVyLgorCSAqLworCWZsYWdzID0gSVJRX0dDX0lOSVRfTUFTS19DQUNIRTsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTUlQUykgJiYgSVNfRU5BQkxFRChDT05GSUdfQ1BVX0JJR19FTkRJQU4pKQorCQlmbGFncyB8PSBJUlFfR0NfQkVfSU87CisKKwlyZXQgPSBpcnFfYWxsb2NfZG9tYWluX2dlbmVyaWNfY2hpcHMoZGF0YS0+ZG9tYWluLCBJUlFTX1BFUl9XT1JELCAxLAorCQkJCWRuLT5mdWxsX25hbWUsIGhhbmRsZV9sZXZlbF9pcnEsIGNsciwgMCwgZmxhZ3MpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgZ2VuZXJpYyBpcnEgY2hpcFxuIik7CiAJCWdvdG8gb3V0X2ZyZWVfZG9tYWluOwogCX0KIAotCWdjID0gaXJxX2dldF9kb21haW5fZ2VuZXJpY19jaGlwKGRhdGEtPmRvbWFpbiwgMCk7Ci0JZ2MtPnVudXNlZCA9IDB4ZmZmZmZmZiAmIH5kYXRhLT5pcnFfbWFwX21hc2s7Ci0JZ2MtPnJlZ19iYXNlID0gZGF0YS0+YmFzZTsKLQlnYy0+cHJpdmF0ZSA9IGRhdGE7Ci0JY3QgPSBnYy0+Y2hpcF90eXBlczsKLQotCWN0LT5yZWdzLm1hc2sgPSBJUlFFTjsKLQljdC0+Y2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX2Nscl9iaXQ7Ci0JY3QtPmNoaXAuaXJxX3VubWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7Ci0JY3QtPmNoaXAuaXJxX2FjayA9IGlycV9nY19ub29wOwotCWN0LT5jaGlwLmlycV9zdXNwZW5kID0gYmNtNzEyMF9sMl9pbnRjX3N1c3BlbmQ7Ci0JY3QtPmNoaXAuaXJxX3Jlc3VtZSA9IGJjbTcxMjBfbDJfaW50Y19yZXN1bWU7Ci0KLQlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGRuLCAiYnJjbSxpcnEtY2FuLXdha2UiKSkgeworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZG4sICJicmNtLGlycS1jYW4td2FrZSIpKQogCQlkYXRhLT5jYW5fd2FrZSA9IHRydWU7Ci0JCS8qIFRoaXMgSVJRIGNoaXAgY2FuIHdha2UgdGhlIHN5c3RlbSwgc2V0IGFsbCByZWxldmFudCBjaGlsZAotCQkgKiBpbnRlcnVwdHMgaW4gd2FrZV9lbmFibGVkIG1hc2sKLQkJICovCi0JCWdjLT53YWtlX2VuYWJsZWQgPSAweGZmZmZmZmZmOwotCQlnYy0+d2FrZV9lbmFibGVkICY9IH5nYy0+dW51c2VkOwotCQljdC0+Y2hpcC5pcnFfc2V0X3dha2UgPSBpcnFfZ2Nfc2V0X3dha2U7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGRhdGEtPm5fd29yZHM7IGlkeCsrKSB7CisJCWlycSA9IGlkeCAqIElSUVNfUEVSX1dPUkQ7CisJCWdjID0gaXJxX2dldF9kb21haW5fZ2VuZXJpY19jaGlwKGRhdGEtPmRvbWFpbiwgaXJxKTsKKworCQlnYy0+dW51c2VkID0gMHhmZmZmZmZmZiAmIH5kYXRhLT5pcnFfbWFwX21hc2tbaWR4XTsKKwkJZ2MtPnJlZ19iYXNlID0gZGF0YS0+YmFzZVtpZHhdOworCQlnYy0+cHJpdmF0ZSA9IGRhdGE7CisJCWN0ID0gZ2MtPmNoaXBfdHlwZXM7CisKKwkJY3QtPnJlZ3MubWFzayA9IElSUUVOOworCQljdC0+Y2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX2Nscl9iaXQ7CisJCWN0LT5jaGlwLmlycV91bm1hc2sgPSBpcnFfZ2NfbWFza19zZXRfYml0OworCQljdC0+Y2hpcC5pcnFfYWNrID0gaXJxX2djX25vb3A7CisJCWN0LT5jaGlwLmlycV9zdXNwZW5kID0gYmNtNzEyMF9sMl9pbnRjX3N1c3BlbmQ7CisJCWN0LT5jaGlwLmlycV9yZXN1bWUgPSBiY203MTIwX2wyX2ludGNfcmVzdW1lOworCisJCWlmIChkYXRhLT5jYW5fd2FrZSkgeworCQkJLyogVGhpcyBJUlEgY2hpcCBjYW4gd2FrZSB0aGUgc3lzdGVtLCBzZXQgYWxsCisJCQkgKiByZWxldmFudCBjaGlsZCBpbnRlcnVwdHMgaW4gd2FrZV9lbmFibGVkIG1hc2sKKwkJCSAqLworCQkJZ2MtPndha2VfZW5hYmxlZCA9IDB4ZmZmZmZmZmY7CisJCQlnYy0+d2FrZV9lbmFibGVkICY9IH5nYy0+dW51c2VkOworCQkJY3QtPmNoaXAuaXJxX3NldF93YWtlID0gaXJxX2djX3NldF93YWtlOworCQl9CiAJfQogCiAJcHJfaW5mbygicmVnaXN0ZXJlZCBCQ003MTIwIEwyIGludGMgKG1lbTogMHglcCwgcGFyZW50IElSUShzKTogJWQpXG4iLAotCQkJZGF0YS0+YmFzZSwgbnVtX3BhcmVudF9pcnFzKTsKKwkJCWRhdGEtPmJhc2VbMF0sIG51bV9wYXJlbnRfaXJxcyk7CiAKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWVfZG9tYWluOgogCWlycV9kb21haW5fcmVtb3ZlKGRhdGEtPmRvbWFpbik7CiBvdXRfdW5tYXA6Ci0JaW91bm1hcChkYXRhLT5iYXNlKTsKLW91dF9mcmVlOgorCWZvciAoaWR4ID0gMDsgaWR4IDwgTUFYX1dPUkRTOyBpZHgrKykgeworCQlpZiAoZGF0YS0+YmFzZVtpZHhdKQorCQkJaW91bm1hcChkYXRhLT5iYXNlW2lkeF0pOworCX0KIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmV0OwogfQotSVJRQ0hJUF9ERUNMQVJFKGJyY21zdGJfbDJfaW50YywgImJyY20sYmNtNzEyMC1sMi1pbnRjIiwKK0lSUUNISVBfREVDTEFSRShiY203MTIwX2wyX2ludGMsICJicmNtLGJjbTcxMjAtbDItaW50YyIsCiAJCWJjbTcxMjBfbDJfaW50Y19vZl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYnJjbXN0Yi1sMi5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1icmNtc3RiLWwyLmMKaW5kZXggYzE1Yzg0MC4uMzEzYzJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1icmNtc3RiLWwyLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1icmNtc3RiLWwyLmMKQEAgLTE4LDcgKzE4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tjb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgpAQCAtMzAsOCArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQogI2luY2x1ZGUgImlycWNoaXAuaCIKIAogLyogUmVnaXN0ZXIgb2Zmc2V0cyBpbiB0aGUgTDIgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KQEAgLTU0LDIzICs1NCwyNiBAQAogc3RhdGljIHZvaWQgYnJjbXN0Yl9sMl9pbnRjX2lycV9oYW5kbGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXN0cnVjdCBicmNtc3RiX2wyX2ludGNfZGF0YSAqYiA9IGlycV9kZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2dldF9kb21haW5fZ2VuZXJpY19jaGlwKGItPmRvbWFpbiwgMCk7CiAJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7CiAJdTMyIHN0YXR1czsKIAogCWNoYWluZWRfaXJxX2VudGVyKGNoaXAsIGRlc2MpOwogCi0Jc3RhdHVzID0gX19yYXdfcmVhZGwoYi0+YmFzZSArIENQVV9TVEFUVVMpICYKLQkJfihfX3Jhd19yZWFkbChiLT5iYXNlICsgQ1BVX01BU0tfU1RBVFVTKSk7CisJc3RhdHVzID0gaXJxX3JlZ19yZWFkbChnYywgQ1BVX1NUQVRVUykgJgorCQl+KGlycV9yZWdfcmVhZGwoZ2MsIENQVV9NQVNLX1NUQVRVUykpOwogCiAJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCWRvX2JhZF9JUlEoaXJxLCBkZXNjKTsKKwkJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJCWhhbmRsZV9iYWRfaXJxKGlycSwgZGVzYyk7CisJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCWdvdG8gb3V0OwogCX0KIAogCWRvIHsKIAkJaXJxID0gZmZzKHN0YXR1cykgLSAxOwogCQkvKiBhY2sgYXQgb3VyIGxldmVsICovCi0JCV9fcmF3X3dyaXRlbCgxIDw8IGlycSwgYi0+YmFzZSArIENQVV9DTEVBUik7CisJCWlycV9yZWdfd3JpdGVsKGdjLCAxIDw8IGlycSwgQ1BVX0NMRUFSKTsKIAkJc3RhdHVzICY9IH4oMSA8PCBpcnEpOwogCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxX2ZpbmRfbWFwcGluZyhiLT5kb21haW4sIGlycSkpOwogCX0gd2hpbGUgKHN0YXR1cyk7CkBAIC04NSwxMiArODgsMTIgQEAKIAogCWlycV9nY19sb2NrKGdjKTsKIAkvKiBTYXZlIHRoZSBjdXJyZW50IG1hc2sgKi8KLQliLT5zYXZlZF9tYXNrID0gX19yYXdfcmVhZGwoYi0+YmFzZSArIENQVV9NQVNLX1NUQVRVUyk7CisJYi0+c2F2ZWRfbWFzayA9IGlycV9yZWdfcmVhZGwoZ2MsIENQVV9NQVNLX1NUQVRVUyk7CiAKIAlpZiAoYi0+Y2FuX3dha2UpIHsKIAkJLyogUHJvZ3JhbSB0aGUgd2FrZXVwIG1hc2sgKi8KLQkJX19yYXdfd3JpdGVsKH5nYy0+d2FrZV9hY3RpdmUsIGItPmJhc2UgKyBDUFVfTUFTS19TRVQpOwotCQlfX3Jhd193cml0ZWwoZ2MtPndha2VfYWN0aXZlLCBiLT5iYXNlICsgQ1BVX01BU0tfQ0xFQVIpOworCQlpcnFfcmVnX3dyaXRlbChnYywgfmdjLT53YWtlX2FjdGl2ZSwgQ1BVX01BU0tfU0VUKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT53YWtlX2FjdGl2ZSwgQ1BVX01BU0tfQ0xFQVIpOwogCX0KIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KQEAgLTEwMiwxMSArMTA1LDExIEBACiAKIAlpcnFfZ2NfbG9jayhnYyk7CiAJLyogQ2xlYXIgdW5tYXNrZWQgbm9uLXdha2V1cCBpbnRlcnJ1cHRzICovCi0JX19yYXdfd3JpdGVsKH5iLT5zYXZlZF9tYXNrICYgfmdjLT53YWtlX2FjdGl2ZSwgYi0+YmFzZSArIENQVV9DTEVBUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIH5iLT5zYXZlZF9tYXNrICYgfmdjLT53YWtlX2FjdGl2ZSwgQ1BVX0NMRUFSKTsKIAogCS8qIFJlc3RvcmUgdGhlIHNhdmVkIG1hc2sgKi8KLQlfX3Jhd193cml0ZWwoYi0+c2F2ZWRfbWFzaywgYi0+YmFzZSArIENQVV9NQVNLX1NFVCk7Ci0JX19yYXdfd3JpdGVsKH5iLT5zYXZlZF9tYXNrLCBiLT5iYXNlICsgQ1BVX01BU0tfQ0xFQVIpOworCWlycV9yZWdfd3JpdGVsKGdjLCBiLT5zYXZlZF9tYXNrLCBDUFVfTUFTS19TRVQpOworCWlycV9yZWdfd3JpdGVsKGdjLCB+Yi0+c2F2ZWRfbWFzaywgQ1BVX01BU0tfQ0xFQVIpOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogCkBAIC0xMTgsNiArMTIxLDcgQEAKIAlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2M7CiAJc3RydWN0IGlycV9jaGlwX3R5cGUgKmN0OwogCWludCByZXQ7CisJdW5zaWduZWQgaW50IGZsYWdzOwogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQpAQCAtMTMxLDEzICsxMzUsMTMgQEAKIAl9CiAKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGJ5IGRlZmF1bHQgKi8KLQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgZGF0YS0+YmFzZSArIENQVV9NQVNLX1NFVCk7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGRhdGEtPmJhc2UgKyBDUFVfQ0xFQVIpOworCXdyaXRlbCgweGZmZmZmZmZmLCBkYXRhLT5iYXNlICsgQ1BVX01BU0tfU0VUKTsKKwl3cml0ZWwoMHhmZmZmZmZmZiwgZGF0YS0+YmFzZSArIENQVV9DTEVBUik7CiAKIAlkYXRhLT5wYXJlbnRfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwotCWlmIChkYXRhLT5wYXJlbnRfaXJxIDwgMCkgeworCWlmICghZGF0YS0+cGFyZW50X2lycSkgewogCQlwcl9lcnIoImZhaWxlZCB0byBmaW5kIHBhcmVudCBpbnRlcnJ1cHRcbiIpOwotCQlyZXQgPSBkYXRhLT5wYXJlbnRfaXJxOworCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bm1hcDsKIAl9CiAKQEAgLTE0OCw5ICsxNTIsMTYgQEAKIAkJZ290byBvdXRfdW5tYXA7CiAJfQogCisJLyogTUlQUyBjaGlwcyBzdHJhcHBlZCBmb3IgQkUgd2lsbCBhdXRvbWFnaWNhbGx5IGNvbmZpZ3VyZSB0aGUKKwkgKiBwZXJpcGhlcmFsIHJlZ2lzdGVycyBmb3IgQ1BVLW5hdGl2ZSBieXRlIG9yZGVyLgorCSAqLworCWZsYWdzID0gMDsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTUlQUykgJiYgSVNfRU5BQkxFRChDT05GSUdfQ1BVX0JJR19FTkRJQU4pKQorCQlmbGFncyB8PSBJUlFfR0NfQkVfSU87CisKIAkvKiBBbGxvY2F0ZSBhIHNpbmdsZSBHZW5lcmljIElSUSBjaGlwIGZvciB0aGlzIG5vZGUgKi8KIAlyZXQgPSBpcnFfYWxsb2NfZG9tYWluX2dlbmVyaWNfY2hpcHMoZGF0YS0+ZG9tYWluLCAzMiwgMSwKLQkJCQlucC0+ZnVsbF9uYW1lLCBoYW5kbGVfZWRnZV9pcnEsIGNsciwgMCwgMCk7CisJCQkJbnAtPmZ1bGxfbmFtZSwgaGFuZGxlX2VkZ2VfaXJxLCBjbHIsIDAsIGZsYWdzKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGdlbmVyaWMgaXJxIGNoaXBcbiIpOwogCQlnb3RvIG91dF9mcmVlX2RvbWFpbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtZHctYXBiLWljdGwuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtZHctYXBiLWljdGwuYwppbmRleCAzMWUyMzFlLi41M2JiNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWR3LWFwYi1pY3RsLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1kdy1hcGItaWN0bC5jCkBAIC01MCw2ICs1MCwyMSBAQAogCWNoYWluZWRfaXJxX2V4aXQoY2hpcCwgZGVzYyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB2b2lkIGR3X2FwYl9pY3RsX3Jlc3VtZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGlycV9jaGlwX3R5cGUgKmN0ID0gaXJxX2RhdGFfZ2V0X2NoaXBfdHlwZShkKTsKKworCWlycV9nY19sb2NrKGdjKTsKKwl3cml0ZWxfcmVsYXhlZCh+MCwgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuZW5hYmxlKTsKKwl3cml0ZWxfcmVsYXhlZCgqY3QtPm1hc2tfY2FjaGUsIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLm1hc2spOworCWlycV9nY191bmxvY2soZ2MpOworfQorI2Vsc2UKKyNkZWZpbmUgZHdfYXBiX2ljdGxfcmVzdW1lCU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKwogc3RhdGljIGludCBfX2luaXQgZHdfYXBiX2ljdGxfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCSAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KQogewpAQCAtOTQsMTYgKzEwOSwxNiBAQAogCSAqLwogCiAJLyogbWFzayBhbmQgZW5hYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0Jd3JpdGVsKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX01BU0tfTCk7Ci0Jd3JpdGVsKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX01BU0tfSCk7Ci0Jd3JpdGVsKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX0VOQUJMRV9MKTsKLQl3cml0ZWwofjAsIGlvYmFzZSArIEFQQl9JTlRfRU5BQkxFX0gpOworCXdyaXRlbF9yZWxheGVkKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX01BU0tfTCk7CisJd3JpdGVsX3JlbGF4ZWQofjAsIGlvYmFzZSArIEFQQl9JTlRfTUFTS19IKTsKKwl3cml0ZWxfcmVsYXhlZCh+MCwgaW9iYXNlICsgQVBCX0lOVF9FTkFCTEVfTCk7CisJd3JpdGVsX3JlbGF4ZWQofjAsIGlvYmFzZSArIEFQQl9JTlRfRU5BQkxFX0gpOwogCi0JcmVnID0gcmVhZGwoaW9iYXNlICsgQVBCX0lOVF9FTkFCTEVfSCk7CisJcmVnID0gcmVhZGxfcmVsYXhlZChpb2Jhc2UgKyBBUEJfSU5UX0VOQUJMRV9IKTsKIAlpZiAocmVnKQogCQlucmlycXMgPSAzMiArIGZscyhyZWcpOwogCWVsc2UKLQkJbnJpcnFzID0gZmxzKHJlYWRsKGlvYmFzZSArIEFQQl9JTlRfRU5BQkxFX0wpKTsKKwkJbnJpcnFzID0gZmxzKHJlYWRsX3JlbGF4ZWQoaW9iYXNlICsgQVBCX0lOVF9FTkFCTEVfTCkpOwogCiAJZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKG5wLCBucmlycXMsCiAJCQkJICAgICAgICZpcnFfZ2VuZXJpY19jaGlwX29wcywgTlVMTCk7CkBAIC0xMTUsNiArMTMwLDcgQEAKIAogCXJldCA9IGlycV9hbGxvY19kb21haW5fZ2VuZXJpY19jaGlwcyhkb21haW4sIDMyLCAobnJpcnFzID4gMzIpID8gMiA6IDEsCiAJCQkJCSAgICAgbnAtPm5hbWUsIGhhbmRsZV9sZXZlbF9pcnEsIGNsciwgMCwKKwkJCQkJICAgICBJUlFfR0NfTUFTS19DQUNIRV9QRVJfVFlQRSB8CiAJCQkJCSAgICAgSVJRX0dDX0lOSVRfTUFTS19DQUNIRSk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gYWxsb2MgaXJxIGRvbWFpbiBnY1xuIiwgbnAtPmZ1bGxfbmFtZSk7CkBAIC0xMjYsMTMgKzE0MiwxNyBAQAogCWdjLT5yZWdfYmFzZSA9IGlvYmFzZTsKIAogCWdjLT5jaGlwX3R5cGVzWzBdLnJlZ3MubWFzayA9IEFQQl9JTlRfTUFTS19MOworCWdjLT5jaGlwX3R5cGVzWzBdLnJlZ3MuZW5hYmxlID0gQVBCX0lOVF9FTkFCTEVfTDsKIAlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9tYXNrID0gaXJxX2djX21hc2tfc2V0X2JpdDsKIAlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV91bm1hc2sgPSBpcnFfZ2NfbWFza19jbHJfYml0OworCWdjLT5jaGlwX3R5cGVzWzBdLmNoaXAuaXJxX3Jlc3VtZSA9IGR3X2FwYl9pY3RsX3Jlc3VtZTsKIAogCWlmIChucmlycXMgPiAzMikgewogCQlnYy0+Y2hpcF90eXBlc1sxXS5yZWdzLm1hc2sgPSBBUEJfSU5UX01BU0tfSDsKKwkJZ2MtPmNoaXBfdHlwZXNbMV0ucmVncy5lbmFibGUgPSBBUEJfSU5UX0VOQUJMRV9IOwogCQlnYy0+Y2hpcF90eXBlc1sxXS5jaGlwLmlycV9tYXNrID0gaXJxX2djX21hc2tfc2V0X2JpdDsKIAkJZ2MtPmNoaXBfdHlwZXNbMV0uY2hpcC5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfY2xyX2JpdDsKKwkJZ2MtPmNoaXBfdHlwZXNbMV0uY2hpcC5pcnFfcmVzdW1lID0gZHdfYXBiX2ljdGxfcmVzdW1lOwogCX0KIAogCWlycV9zZXRfaGFuZGxlcl9kYXRhKGlycSwgZ2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1naWMuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLmMKaW5kZXggMzg0OTNmZi4uN2Y5YmUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1naWMuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy5jCkBAIC0xMDQxLDYgKzEwNDEsOCBAQAogCXJldHVybiAwOwogfQogSVJRQ0hJUF9ERUNMQVJFKGdpY180MDAsICJhcm0sZ2ljLTQwMCIsIGdpY19vZl9pbml0KTsKK0lSUUNISVBfREVDTEFSRShhcm0xMW1wX2dpYywgImFybSxhcm0xMW1wLWdpYyIsIGdpY19vZl9pbml0KTsKK0lSUUNISVBfREVDTEFSRShhcm0xMTc2anpmX2RjX2dpYywgImFybSxhcm0xMTc2anpmLWRldmNoaXAtZ2ljIiwgZ2ljX29mX2luaXQpOwogSVJRQ0hJUF9ERUNMQVJFKGNvcnRleF9hMTVfZ2ljLCAiYXJtLGNvcnRleC1hMTUtZ2ljIiwgZ2ljX29mX2luaXQpOwogSVJRQ0hJUF9ERUNMQVJFKGNvcnRleF9hOV9naWMsICJhcm0sY29ydGV4LWE5LWdpYyIsIGdpY19vZl9pbml0KTsKIElSUUNISVBfREVDTEFSRShjb3J0ZXhfYTdfZ2ljLCAiYXJtLGNvcnRleC1hNy1naWMiLCBnaWNfb2ZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWhpcDA0LmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWhpcDA0LmMKaW5kZXggOWM4ZjgzMzUuLjI5YjhmMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtaGlwMDQuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWhpcDA0LmMKQEAgLTE3Niw4ICsxNzYsNyBAQAogCQlpcnFuciA9IGlycXN0YXQgJiBHSUNDX0lBUl9JTlRfSURfTUFTSzsKIAogCQlpZiAobGlrZWx5KGlycW5yID4gMTUgJiYgaXJxbnIgPD0gSElQMDRfTUFYX0lSUVMpKSB7Ci0JCQlpcnFuciA9IGlycV9maW5kX21hcHBpbmcoaGlwMDRfZGF0YS5kb21haW4sIGlycW5yKTsKLQkJCWhhbmRsZV9JUlEoaXJxbnIsIHJlZ3MpOworCQkJaGFuZGxlX2RvbWFpbl9pcnEoaGlwMDRfZGF0YS5kb21haW4sIGlycW5yLCByZWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChpcnFuciA8IDE2KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLXN1bnhpLW5taS5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1zdW54aS1ubWkuYwppbmRleCAxMmY1NDdhLi40YTljZTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLXN1bnhpLW5taS5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtc3VueGktbm1pLmMKQEAgLTUwLDEyICs1MCwxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIHN1bnhpX3NjX25taV93cml0ZShzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MsIHUzMiBvZmYsCiAJCQkJICAgICAgdTMyIHZhbCkKIHsKLQlpcnFfcmVnX3dyaXRlbCh2YWwsIGdjLT5yZWdfYmFzZSArIG9mZik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIHZhbCwgb2ZmKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgc3VueGlfc2Nfbm1pX3JlYWQoc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjLCB1MzIgb2ZmKQogewotCXJldHVybiBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIG9mZik7CisJcmV0dXJuIGlycV9yZWdfcmVhZGwoZ2MsIG9mZik7CiB9CiAKIHN0YXRpYyB2b2lkIHN1bnhpX3NjX25taV9oYW5kbGVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtdGIxMHguYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtdGIxMHguYwppbmRleCA3YzQ0Yzk5Li5hY2NjMjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLXRiMTB4LmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS10YjEweC5jCkBAIC00MywxMiArNDMsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhYl9pcnFjdGxfd3JpdGVyZWcoc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjLCB1MzIgcmVnLAogCXUzMiB2YWwpCiB7Ci0JaXJxX3JlZ193cml0ZWwodmFsLCBnYy0+cmVnX2Jhc2UgKyByZWcpOworCWlycV9yZWdfd3JpdGVsKGdjLCB2YWwsIHJlZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGFiX2lycWN0bF9yZWFkcmVnKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywgdTMyIHJlZykKIHsKLQlyZXR1cm4gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyByZWcpOworCXJldHVybiBpcnFfcmVnX3JlYWRsKGdjLCByZWcpOwogfQogCiBzdGF0aWMgaW50IHRiMTB4X2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uYyBiL2RyaXZlcnMvbWQvZG0tYmlvLXByaXNvbi5jCmluZGV4IGY3NTJkMTIuLmJlMDY1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tYmlvLXByaXNvbi5jCisrKyBiL2RyaXZlcnMvbWQvZG0tYmlvLXByaXNvbi5jCkBAIC0xNCw2OCArMTQsMzggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RydWN0IGJ1Y2tldCB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBobGlzdF9oZWFkIGNlbGxzOwotfTsKKyNkZWZpbmUgTUlOX0NFTExTIDEwMjQKIAogc3RydWN0IGRtX2Jpb19wcmlzb24geworCXNwaW5sb2NrX3QgbG9jazsKIAltZW1wb29sX3QgKmNlbGxfcG9vbDsKLQotCXVuc2lnbmVkIG5yX2J1Y2tldHM7Ci0JdW5zaWduZWQgaGFzaF9tYXNrOwotCXN0cnVjdCBidWNrZXQgKmJ1Y2tldHM7CisJc3RydWN0IHJiX3Jvb3QgY2VsbHM7CiB9OwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdWludDMyX3QgY2FsY19ucl9idWNrZXRzKHVuc2lnbmVkIG5yX2NlbGxzKQotewotCXVpbnQzMl90IG4gPSAxMjg7Ci0KLQlucl9jZWxscyAvPSA0OwotCW5yX2NlbGxzID0gbWluKG5yX2NlbGxzLCA4MTkydSk7Ci0KLQl3aGlsZSAobiA8IG5yX2NlbGxzKQotCQluIDw8PSAxOwotCi0JcmV0dXJuIG47Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqX2NlbGxfY2FjaGU7CiAKLXN0YXRpYyB2b2lkIGluaXRfYnVja2V0KHN0cnVjdCBidWNrZXQgKmIpCi17Ci0Jc3Bpbl9sb2NrX2luaXQoJmItPmxvY2spOwotCUlOSVRfSExJU1RfSEVBRCgmYi0+Y2VsbHMpOwotfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKICAqIEBucl9jZWxscyBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBjZWxscyB5b3Ugd2FudCBpbiB1c2UgX2NvbmN1cnJlbnRseV8uCiAgKiBEb24ndCBjb25mdXNlIGl0IHdpdGggdGhlIG51bWJlciBvZiBkaXN0aW5jdCBrZXlzLgogICovCi1zdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqZG1fYmlvX3ByaXNvbl9jcmVhdGUodW5zaWduZWQgbnJfY2VsbHMpCitzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqZG1fYmlvX3ByaXNvbl9jcmVhdGUodm9pZCkKIHsKLQl1bnNpZ25lZCBpOwotCXVpbnQzMl90IG5yX2J1Y2tldHMgPSBjYWxjX25yX2J1Y2tldHMobnJfY2VsbHMpOwotCXNpemVfdCBsZW4gPSBzaXplb2Yoc3RydWN0IGRtX2Jpb19wcmlzb24pICsKLQkJKHNpemVvZihzdHJ1Y3QgYnVja2V0KSAqIG5yX2J1Y2tldHMpOwotCXN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24gPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbiA9IGttYWxsb2Moc2l6ZW9mKCpwcmlzb24pLCBHRlBfS0VSTkVMKTsKIAogCWlmICghcHJpc29uKQogCQlyZXR1cm4gTlVMTDsKIAotCXByaXNvbi0+Y2VsbF9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKG5yX2NlbGxzLCBfY2VsbF9jYWNoZSk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXNvbi0+bG9jayk7CisKKwlwcmlzb24tPmNlbGxfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fQ0VMTFMsIF9jZWxsX2NhY2hlKTsKIAlpZiAoIXByaXNvbi0+Y2VsbF9wb29sKSB7CiAJCWtmcmVlKHByaXNvbik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCXByaXNvbi0+bnJfYnVja2V0cyA9IG5yX2J1Y2tldHM7Ci0JcHJpc29uLT5oYXNoX21hc2sgPSBucl9idWNrZXRzIC0gMTsKLQlwcmlzb24tPmJ1Y2tldHMgPSAoc3RydWN0IGJ1Y2tldCAqKSAocHJpc29uICsgMSk7Ci0JZm9yIChpID0gMDsgaSA8IG5yX2J1Y2tldHM7IGkrKykKLQkJaW5pdF9idWNrZXQocHJpc29uLT5idWNrZXRzICsgaSk7CisJcHJpc29uLT5jZWxscyA9IFJCX1JPT1Q7CiAKIAlyZXR1cm4gcHJpc29uOwogfQpAQCAtMTAxLDY4ICs3MSw3MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fYmlvX3ByaXNvbl9mcmVlX2NlbGwpOwogCi1zdGF0aWMgdWludDMyX3QgaGFzaF9rZXkoc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbiwgc3RydWN0IGRtX2NlbGxfa2V5ICprZXkpCi17Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBCSUdfUFJJTUUgPSA0Mjk0OTY3MjkxVUw7Ci0JdWludDY0X3QgaGFzaCA9IGtleS0+YmxvY2sgKiBCSUdfUFJJTUU7Ci0KLQlyZXR1cm4gKHVpbnQzMl90KSAoaGFzaCAmIHByaXNvbi0+aGFzaF9tYXNrKTsKLX0KLQotc3RhdGljIGludCBrZXlzX2VxdWFsKHN0cnVjdCBkbV9jZWxsX2tleSAqbGhzLCBzdHJ1Y3QgZG1fY2VsbF9rZXkgKnJocykKLXsKLQkgICAgICAgcmV0dXJuIChsaHMtPnZpcnR1YWwgPT0gcmhzLT52aXJ0dWFsKSAmJgotCQkgICAgICAgKGxocy0+ZGV2ID09IHJocy0+ZGV2KSAmJgotCQkgICAgICAgKGxocy0+YmxvY2sgPT0gcmhzLT5ibG9jayk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYnVja2V0ICpnZXRfYnVja2V0KHN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24sCi0JCQkJIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5KQotewotCXJldHVybiBwcmlzb24tPmJ1Y2tldHMgKyBoYXNoX2tleShwcmlzb24sIGtleSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpfX3NlYXJjaF9idWNrZXQoc3RydWN0IGJ1Y2tldCAqYiwKLQkJCQkJCSAgc3RydWN0IGRtX2NlbGxfa2V5ICprZXkpCi17Ci0Jc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNlbGwsICZiLT5jZWxscywgbGlzdCkKLQkJaWYgKGtleXNfZXF1YWwoJmNlbGwtPmtleSwga2V5KSkKLQkJCXJldHVybiBjZWxsOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fc2V0dXBfbmV3X2NlbGwoc3RydWN0IGJ1Y2tldCAqYiwKLQkJCSAgICAgc3RydWN0IGRtX2NlbGxfa2V5ICprZXksCitzdGF0aWMgdm9pZCBfX3NldHVwX25ld19jZWxsKHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5LAogCQkJICAgICBzdHJ1Y3QgYmlvICpob2xkZXIsCiAJCQkgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCiB7Ci0JbWVtY3B5KCZjZWxsLT5rZXksIGtleSwgc2l6ZW9mKGNlbGwtPmtleSkpOwotCWNlbGwtPmhvbGRlciA9IGhvbGRlcjsKLQliaW9fbGlzdF9pbml0KCZjZWxsLT5iaW9zKTsKLQlobGlzdF9hZGRfaGVhZCgmY2VsbC0+bGlzdCwgJmItPmNlbGxzKTsKKyAgICAgICBtZW1jcHkoJmNlbGwtPmtleSwga2V5LCBzaXplb2YoY2VsbC0+a2V5KSk7CisgICAgICAgY2VsbC0+aG9sZGVyID0gaG9sZGVyOworICAgICAgIGJpb19saXN0X2luaXQoJmNlbGwtPmJpb3MpOwogfQogCi1zdGF0aWMgaW50IF9fYmlvX2RldGFpbihzdHJ1Y3QgYnVja2V0ICpiLAorc3RhdGljIGludCBjbXBfa2V5cyhzdHJ1Y3QgZG1fY2VsbF9rZXkgKmxocywKKwkJICAgIHN0cnVjdCBkbV9jZWxsX2tleSAqcmhzKQoreworCWlmIChsaHMtPnZpcnR1YWwgPCByaHMtPnZpcnR1YWwpCisJCXJldHVybiAtMTsKKworCWlmIChsaHMtPnZpcnR1YWwgPiByaHMtPnZpcnR1YWwpCisJCXJldHVybiAxOworCisJaWYgKGxocy0+ZGV2IDwgcmhzLT5kZXYpCisJCXJldHVybiAtMTsKKworCWlmIChsaHMtPmRldiA+IHJocy0+ZGV2KQorCQlyZXR1cm4gMTsKKworCWlmIChsaHMtPmJsb2NrX2VuZCA8PSByaHMtPmJsb2NrX2JlZ2luKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobGhzLT5ibG9ja19iZWdpbiA+PSByaHMtPmJsb2NrX2VuZCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2Jpb19kZXRhaW4oc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbiwKIAkJCXN0cnVjdCBkbV9jZWxsX2tleSAqa2V5LAogCQkJc3RydWN0IGJpbyAqaW5tYXRlLAogCQkJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbF9wcmVhbGxvYywKIAkJCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKipjZWxsX3Jlc3VsdCkKIHsKLQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOworCWludCByOworCXN0cnVjdCByYl9ub2RlICoqbmV3ID0gJnByaXNvbi0+Y2VsbHMucmJfbm9kZSwgKnBhcmVudCA9IE5VTEw7CiAKLQljZWxsID0gX19zZWFyY2hfYnVja2V0KGIsIGtleSk7Ci0JaWYgKGNlbGwpIHsKLQkJaWYgKGlubWF0ZSkKLQkJCWJpb19saXN0X2FkZCgmY2VsbC0+YmlvcywgaW5tYXRlKTsKLQkJKmNlbGxfcmVzdWx0ID0gY2VsbDsKLQkJcmV0dXJuIDE7CisJd2hpbGUgKCpuZXcpIHsKKwkJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCA9CisJCQljb250YWluZXJfb2YoKm5ldywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCwgbm9kZSk7CisKKwkJciA9IGNtcF9rZXlzKGtleSwgJmNlbGwtPmtleSk7CisKKwkJcGFyZW50ID0gKm5ldzsKKwkJaWYgKHIgPCAwKQorCQkJbmV3ID0gJigoKm5ldyktPnJiX2xlZnQpOworCQllbHNlIGlmIChyID4gMCkKKwkJCW5ldyA9ICYoKCpuZXcpLT5yYl9yaWdodCk7CisJCWVsc2UgeworCQkJaWYgKGlubWF0ZSkKKwkJCQliaW9fbGlzdF9hZGQoJmNlbGwtPmJpb3MsIGlubWF0ZSk7CisJCQkqY2VsbF9yZXN1bHQgPSBjZWxsOworCQkJcmV0dXJuIDE7CisJCX0KIAl9CiAKLQlfX3NldHVwX25ld19jZWxsKGIsIGtleSwgaW5tYXRlLCBjZWxsX3ByZWFsbG9jKTsKKwlfX3NldHVwX25ld19jZWxsKGtleSwgaW5tYXRlLCBjZWxsX3ByZWFsbG9jKTsKIAkqY2VsbF9yZXN1bHQgPSBjZWxsX3ByZWFsbG9jOworCisJcmJfbGlua19ub2RlKCZjZWxsX3ByZWFsbG9jLT5ub2RlLCBwYXJlbnQsIG5ldyk7CisJcmJfaW5zZXJ0X2NvbG9yKCZjZWxsX3ByZWFsbG9jLT5ub2RlLCAmcHJpc29uLT5jZWxscyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc0LDExICsxNDksMTAgQEAKIHsKIAlpbnQgcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBidWNrZXQgKmIgPSBnZXRfYnVja2V0KHByaXNvbiwga2V5KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiLT5sb2NrLCBmbGFncyk7Ci0JciA9IF9fYmlvX2RldGFpbihiLCBrZXksIGlubWF0ZSwgY2VsbF9wcmVhbGxvYywgY2VsbF9yZXN1bHQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmItPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpc29uLT5sb2NrLCBmbGFncyk7CisJciA9IF9fYmlvX2RldGFpbihwcmlzb24sIGtleSwgaW5tYXRlLCBjZWxsX3ByZWFsbG9jLCBjZWxsX3Jlc3VsdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpc29uLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTIwNSwxMCArMTc5LDExIEBACiAvKgogICogQGlubWF0ZXMgbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQgcHJpb3IgdG8gdGhpcyBjYWxsCiAgKi8KLXN0YXRpYyB2b2lkIF9fY2VsbF9yZWxlYXNlKHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCitzdGF0aWMgdm9pZCBfX2NlbGxfcmVsZWFzZShzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uLAorCQkJICAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCwKIAkJCSAgIHN0cnVjdCBiaW9fbGlzdCAqaW5tYXRlcykKIHsKLQlobGlzdF9kZWwoJmNlbGwtPmxpc3QpOworCXJiX2VyYXNlKCZjZWxsLT5ub2RlLCAmcHJpc29uLT5jZWxscyk7CiAKIAlpZiAoaW5tYXRlcykgewogCQlpZiAoY2VsbC0+aG9sZGVyKQpAQCAtMjIyLDIxICsxOTcsMjEgQEAKIAkJICAgICBzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYnVja2V0ICpiID0gZ2V0X2J1Y2tldChwcmlzb24sICZjZWxsLT5rZXkpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmItPmxvY2ssIGZsYWdzKTsKLQlfX2NlbGxfcmVsZWFzZShjZWxsLCBiaW9zKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOworCV9fY2VsbF9yZWxlYXNlKHByaXNvbiwgY2VsbCwgYmlvcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpc29uLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9jZWxsX3JlbGVhc2UpOwogCiAvKgogICogU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgdGhlIGhvbGRlciwganVzdCB0aGUgYWRkaXRpb25hbCBiaW9zLgogICovCi1zdGF0aWMgdm9pZCBfX2NlbGxfcmVsZWFzZV9ub19ob2xkZXIoc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCwKK3N0YXRpYyB2b2lkIF9fY2VsbF9yZWxlYXNlX25vX2hvbGRlcihzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uLAorCQkJCSAgICAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCwKIAkJCQkgICAgIHN0cnVjdCBiaW9fbGlzdCAqaW5tYXRlcykKIHsKLQlobGlzdF9kZWwoJmNlbGwtPmxpc3QpOworCXJiX2VyYXNlKCZjZWxsLT5ub2RlLCAmcHJpc29uLT5jZWxscyk7CiAJYmlvX2xpc3RfbWVyZ2UoaW5tYXRlcywgJmNlbGwtPmJpb3MpOwogfQogCkBAIC0yNDUsMTEgKzIyMCwxMCBAQAogCQkJICAgICAgIHN0cnVjdCBiaW9fbGlzdCAqaW5tYXRlcykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBidWNrZXQgKmIgPSBnZXRfYnVja2V0KHByaXNvbiwgJmNlbGwtPmtleSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYi0+bG9jaywgZmxhZ3MpOwotCV9fY2VsbF9yZWxlYXNlX25vX2hvbGRlcihjZWxsLCBpbm1hdGVzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOworCV9fY2VsbF9yZWxlYXNlX25vX2hvbGRlcihwcmlzb24sIGNlbGwsIGlubWF0ZXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fY2VsbF9yZWxlYXNlX25vX2hvbGRlcik7CiAKQEAgLTI2Nyw2ICsyNDEsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX2NlbGxfZXJyb3IpOwogCit2b2lkIGRtX2NlbGxfdmlzaXRfcmVsZWFzZShzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uLAorCQkJICAgdm9pZCAoKnZpc2l0X2ZuKSh2b2lkICosIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKiksCisJCQkgICB2b2lkICpjb250ZXh0LAorCQkJICAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOworCXZpc2l0X2ZuKGNvbnRleHQsIGNlbGwpOworCXJiX2VyYXNlKCZjZWxsLT5ub2RlLCAmcHJpc29uLT5jZWxscyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpc29uLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9jZWxsX3Zpc2l0X3JlbGVhc2UpOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjZGVmaW5lIERFRkVSUkVEX1NFVF9TSVpFIDY0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uaCBiL2RyaXZlcnMvbWQvZG0tYmlvLXByaXNvbi5oCmluZGV4IDY4MDVhMTQuLjc0Y2YwMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tYmlvLXByaXNvbi5oCisrKyBiL2RyaXZlcnMvbWQvZG0tYmlvLXByaXNvbi5oCkBAIC0xMCw4ICsxMCw4IEBACiAjaW5jbHVkZSAicGVyc2lzdGVudC1kYXRhL2RtLWJsb2NrLW1hbmFnZXIuaCIgLyogRklYTUU6IGZvciBkbV9ibG9ja190ICovCiAjaW5jbHVkZSAiZG0tdGhpbi1tZXRhZGF0YS5oIiAvKiBGSVhNRTogZm9yIGRtX3RoaW5faWQgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjMsMTEgKzIzLDE0IEBACiAgKi8KIHN0cnVjdCBkbV9iaW9fcHJpc29uOwogCi0vKiBGSVhNRTogdGhpcyBuZWVkcyB0byBiZSBtb3JlIGFic3RyYWN0ICovCisvKgorICogS2V5cyBkZWZpbmUgYSByYW5nZSBvZiBibG9ja3Mgd2l0aGluIGVpdGhlciBhIHZpcnR1YWwgb3IgcGh5c2ljYWwKKyAqIGRldmljZS4KKyAqLwogc3RydWN0IGRtX2NlbGxfa2V5IHsKIAlpbnQgdmlydHVhbDsKIAlkbV90aGluX2lkIGRldjsKLQlkbV9ibG9ja190IGJsb2NrOworCWRtX2Jsb2NrX3QgYmxvY2tfYmVnaW4sIGJsb2NrX2VuZDsKIH07CiAKIC8qCkBAIC0zNSwxMyArMzgsMTUgQEAKICAqIHRoZW1zZWx2ZXMuCiAgKi8KIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgewotCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB1c2VyX2xpc3Q7CS8qIGZvciBjbGllbnQgdXNlICovCisJc3RydWN0IHJiX25vZGUgbm9kZTsKKwogCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CiAJc3RydWN0IGJpbyAqaG9sZGVyOwogCXN0cnVjdCBiaW9fbGlzdCBiaW9zOwogfTsKIAotc3RydWN0IGRtX2Jpb19wcmlzb24gKmRtX2Jpb19wcmlzb25fY3JlYXRlKHVuc2lnbmVkIG5yX2NlbGxzKTsKK3N0cnVjdCBkbV9iaW9fcHJpc29uICpkbV9iaW9fcHJpc29uX2NyZWF0ZSh2b2lkKTsKIHZvaWQgZG1fYmlvX3ByaXNvbl9kZXN0cm95KHN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24pOwogCiAvKgpAQCAtNTcsNyArNjIsNyBAQAogCQkJICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKTsKIAogLyoKLSAqIENyZWF0ZXMsIG9yIHJldHJpZXZlcyBhIGNlbGwgZm9yIHRoZSBnaXZlbiBrZXkuCisgKiBDcmVhdGVzLCBvciByZXRyaWV2ZXMgYSBjZWxsIHRoYXQgb3ZlcmxhcHMgdGhlIGdpdmVuIGtleS4KICAqCiAgKiBSZXR1cm5zIDEgaWYgcHJlLWV4aXN0aW5nIGNlbGwgcmV0dXJuZWQsIHplcm8gaWYgbmV3IGNlbGwgY3JlYXRlZCB1c2luZwogICogQGNlbGxfcHJlYWxsb2MuCkBAIC02OCw3ICs3Myw4IEBACiAJCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKipjZWxsX3Jlc3VsdCk7CiAKIC8qCi0gKiBBbiBhdG9taWMgb3AgdGhhdCBjb21iaW5lcyByZXRyaWV2aW5nIGEgY2VsbCwgYW5kIGFkZGluZyBhIGJpbyB0byBpdC4KKyAqIEFuIGF0b21pYyBvcCB0aGF0IGNvbWJpbmVzIHJldHJpZXZpbmcgb3IgY3JlYXRpbmcgYSBjZWxsLCBhbmQgYWRkaW5nIGEKKyAqIGJpbyB0byBpdC4KICAqCiAgKiBSZXR1cm5zIDEgaWYgdGhlIGNlbGwgd2FzIGFscmVhZHkgaGVsZCwgMCBpZiBAaW5tYXRlIGlzIHRoZSBuZXcgaG9sZGVyLgogICovCkBAIC04Nyw2ICs5MywxNCBAQAogdm9pZCBkbV9jZWxsX2Vycm9yKHN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24sCiAJCSAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsIGludCBlcnJvcik7CiAKKy8qCisgKiBWaXNpdHMgdGhlIGNlbGwgYW5kIHRoZW4gcmVsZWFzZXMuICBHdWFyYW50ZWVzIG5vIG5ldyBpbm1hdGVzIGFyZQorICogaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgdmlzaXQgYW5kIHJlbGVhc2UuCisgKi8KK3ZvaWQgZG1fY2VsbF92aXNpdF9yZWxlYXNlKHN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24sCisJCQkgICB2b2lkICgqdmlzaXRfZm4pKHZvaWQgKiwgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqKSwKKwkJCSAgIHZvaWQgKmNvbnRleHQsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1idWZpby5jIGIvZHJpdmVycy9tZC9kbS1idWZpby5jCmluZGV4IDgyNWNhMWYuLmMzM2I0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tYnVmaW8uYworKysgYi9kcml2ZXJzL21kL2RtLWJ1ZmlvLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2hyaW5rZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KIAogI2RlZmluZSBETV9NU0dfUFJFRklYICJidWZpbyIKIApAQCAtMzQsMTIgKzM1LDE3IEBACiAvKgogICogQ2hlY2sgYnVmZmVyIGFnZXMgaW4gdGhpcyBpbnRlcnZhbCAoc2Vjb25kcykKICAqLwotI2RlZmluZSBETV9CVUZJT19XT1JLX1RJTUVSX1NFQ1MJMTAKKyNkZWZpbmUgRE1fQlVGSU9fV09SS19USU1FUl9TRUNTCTMwCiAKIC8qCiAgKiBGcmVlIGJ1ZmZlcnMgd2hlbiB0aGV5IGFyZSBvbGRlciB0aGFuIHRoaXMgKHNlY29uZHMpCiAgKi8KLSNkZWZpbmUgRE1fQlVGSU9fREVGQVVMVF9BR0VfU0VDUwk2MAorI2RlZmluZSBETV9CVUZJT19ERUZBVUxUX0FHRV9TRUNTCTMwMAorCisvKgorICogVGhlIG5yIG9mIGJ5dGVzIG9mIGNhY2hlZCBkYXRhIHRvIGtlZXAgYXJvdW5kLgorICovCisjZGVmaW5lIERNX0JVRklPX0RFRkFVTFRfUkVUQUlOX0JZVEVTICAgKDI1NiAqIDEwMjQpCiAKIC8qCiAgKiBUaGUgbnVtYmVyIG9mIGJ2ZWMgZW50cmllcyB0aGF0IGFyZSBlbWJlZGRlZCBkaXJlY3RseSBpbiB0aGUgYnVmZmVyLgpAQCAtNDgsMTQgKzU0LDYgQEAKICNkZWZpbmUgRE1fQlVGSU9fSU5MSU5FX1ZFQ1MJCTE2CiAKIC8qCi0gKiBCdWZmZXIgaGFzaAotICovCi0jZGVmaW5lIERNX0JVRklPX0hBU0hfQklUUwkyMAotI2RlZmluZSBETV9CVUZJT19IQVNIKGJsb2NrKSBcCi0JKCgoKGJsb2NrKSA+PiBETV9CVUZJT19IQVNIX0JJVFMpIF4gKGJsb2NrKSkgJiBcCi0JICgoMSA8PCBETV9CVUZJT19IQVNIX0JJVFMpIC0gMSkpCi0KLS8qCiAgKiBEb24ndCB0cnkgdG8gdXNlIGttZW1fY2FjaGVfYWxsb2MgZm9yIGJsb2NrcyBsYXJnZXIgdGhhbiB0aGlzLgogICogRm9yIGV4cGxhbmF0aW9uLCBzZWUgYWxsb2NfYnVmZmVyX2RhdGEgYmVsb3cuCiAgKi8KQEAgLTEwNiw3ICsxMDQsNyBAQAogCiAJdW5zaWduZWQgbWluaW11bV9idWZmZXJzOwogCi0Jc3RydWN0IGhsaXN0X2hlYWQgKmNhY2hlX2hhc2g7CisJc3RydWN0IHJiX3Jvb3QgYnVmZmVyX3RyZWU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgZnJlZV9idWZmZXJfd2FpdDsKIAogCWludCBhc3luY193cml0ZV9lcnJvcjsKQEAgLTEzNSw3ICsxMzMsNyBAQAogfTsKIAogc3RydWN0IGRtX2J1ZmZlciB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgaGFzaF9saXN0OworCXN0cnVjdCByYl9ub2RlIG5vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCBscnVfbGlzdDsKIAlzZWN0b3JfdCBibG9jazsKIAl2b2lkICpkYXRhOwpAQCAtMjIzLDYgKzIyMSw3IEBACiAgKiBCdWZmZXJzIGFyZSBmcmVlZCBhZnRlciB0aGlzIHRpbWVvdXQKICAqLwogc3RhdGljIHVuc2lnbmVkIGRtX2J1ZmlvX21heF9hZ2UgPSBETV9CVUZJT19ERUZBVUxUX0FHRV9TRUNTOworc3RhdGljIHVuc2lnbmVkIGRtX2J1ZmlvX3JldGFpbl9ieXRlcyA9IERNX0JVRklPX0RFRkFVTFRfUkVUQUlOX0JZVEVTOwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkbV9idWZpb19wZWFrX2FsbG9jYXRlZDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRtX2J1ZmlvX2FsbG9jYXRlZF9rbWVtX2NhY2hlOwpAQCAtMjUzLDYgKzI1Miw1MyBAQAogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGRtX2J1ZmlvX2NsaWVudHNfbG9jayk7CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQSByZWQvYmxhY2sgdHJlZSBhY3RzIGFzIGFuIGluZGV4IGZvciBhbGwgdGhlIGJ1ZmZlcnMuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBzdHJ1Y3QgZG1fYnVmZmVyICpfX2ZpbmQoc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYywgc2VjdG9yX3QgYmxvY2spCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSBjLT5idWZmZXJfdHJlZS5yYl9ub2RlOworCXN0cnVjdCBkbV9idWZmZXIgKmI7CisKKwl3aGlsZSAobikgeworCQliID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkbV9idWZmZXIsIG5vZGUpOworCisJCWlmIChiLT5ibG9jayA9PSBibG9jaykKKwkJCXJldHVybiBiOworCisJCW4gPSAoYi0+YmxvY2sgPCBibG9jaykgPyBuLT5yYl9sZWZ0IDogbi0+cmJfcmlnaHQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5zZXJ0KHN0cnVjdCBkbV9idWZpb19jbGllbnQgKmMsIHN0cnVjdCBkbV9idWZmZXIgKmIpCit7CisJc3RydWN0IHJiX25vZGUgKipuZXcgPSAmYy0+YnVmZmVyX3RyZWUucmJfbm9kZSwgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGRtX2J1ZmZlciAqZm91bmQ7CisKKwl3aGlsZSAoKm5ldykgeworCQlmb3VuZCA9IGNvbnRhaW5lcl9vZigqbmV3LCBzdHJ1Y3QgZG1fYnVmZmVyLCBub2RlKTsKKworCQlpZiAoZm91bmQtPmJsb2NrID09IGItPmJsb2NrKSB7CisJCQlCVUdfT04oZm91bmQgIT0gYik7CisJCQlyZXR1cm47CisJCX0KKworCQlwYXJlbnQgPSAqbmV3OworCQluZXcgPSAoZm91bmQtPmJsb2NrIDwgYi0+YmxvY2spID8KKwkJCSYoKCpuZXcpLT5yYl9sZWZ0KSA6ICYoKCpuZXcpLT5yYl9yaWdodCk7CisJfQorCisJcmJfbGlua19ub2RlKCZiLT5ub2RlLCBwYXJlbnQsIG5ldyk7CisJcmJfaW5zZXJ0X2NvbG9yKCZiLT5ub2RlLCAmYy0+YnVmZmVyX3RyZWUpOworfQorCitzdGF0aWMgdm9pZCBfX3JlbW92ZShzdHJ1Y3QgZG1fYnVmaW9fY2xpZW50ICpjLCBzdHJ1Y3QgZG1fYnVmZmVyICpiKQoreworCXJiX2VyYXNlKCZiLT5ub2RlLCAmYy0+YnVmZmVyX3RyZWUpOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZCBhZGp1c3RfdG90YWxfYWxsb2NhdGVkKGVudW0gZGF0YV9tb2RlIGRhdGFfbW9kZSwgbG9uZyBkaWZmKQpAQCAtNDM0LDcgKzQ4MCw3IEBACiAJYi0+YmxvY2sgPSBibG9jazsKIAliLT5saXN0X21vZGUgPSBkaXJ0eTsKIAlsaXN0X2FkZCgmYi0+bHJ1X2xpc3QsICZjLT5scnVbZGlydHldKTsKLQlobGlzdF9hZGRfaGVhZCgmYi0+aGFzaF9saXN0LCAmYy0+Y2FjaGVfaGFzaFtETV9CVUZJT19IQVNIKGJsb2NrKV0pOworCV9faW5zZXJ0KGItPmMsIGIpOwogCWItPmxhc3RfYWNjZXNzZWQgPSBqaWZmaWVzOwogfQogCkBAIC00NDgsNyArNDk0LDcgQEAKIAlCVUdfT04oIWMtPm5fYnVmZmVyc1tiLT5saXN0X21vZGVdKTsKIAogCWMtPm5fYnVmZmVyc1tiLT5saXN0X21vZGVdLS07Ci0JaGxpc3RfZGVsKCZiLT5oYXNoX2xpc3QpOworCV9fcmVtb3ZlKGItPmMsIGIpOwogCWxpc3RfZGVsKCZiLT5scnVfbGlzdCk7CiB9CiAKQEAgLTUzMiw2ICs1NzgsMTkgQEAKIAkJZW5kX2lvKCZiLT5iaW8sIHIpOwogfQogCitzdGF0aWMgdm9pZCBpbmxpbmVfZW5kaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IpCit7CisJYmlvX2VuZF9pb190ICplbmRfZm4gPSBiaW8tPmJpX3ByaXZhdGU7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBiaW8gdG8gZnJlZSBhbnkgYXR0YWNoZWQgcmVzb3VyY2VzCisJICogKGUuZy4gYmlvIGludGVncml0eSBwcm9maWxlcykuCisJICovCisJYmlvX3Jlc2V0KGJpbyk7CisKKwllbmRfZm4oYmlvLCBlcnJvcik7Cit9CisKIHN0YXRpYyB2b2lkIHVzZV9pbmxpbmVfYmlvKHN0cnVjdCBkbV9idWZmZXIgKmIsIGludCBydywgc2VjdG9yX3QgYmxvY2ssCiAJCQkgICBiaW9fZW5kX2lvX3QgKmVuZF9pbykKIHsKQEAgLTU0Myw3ICs2MDIsMTIgQEAKIAliLT5iaW8uYmlfbWF4X3ZlY3MgPSBETV9CVUZJT19JTkxJTkVfVkVDUzsKIAliLT5iaW8uYmlfaXRlci5iaV9zZWN0b3IgPSBibG9jayA8PCBiLT5jLT5zZWN0b3JzX3Blcl9ibG9ja19iaXRzOwogCWItPmJpby5iaV9iZGV2ID0gYi0+Yy0+YmRldjsKLQliLT5iaW8uYmlfZW5kX2lvID0gZW5kX2lvOworCWItPmJpby5iaV9lbmRfaW8gPSBpbmxpbmVfZW5kaW87CisJLyoKKwkgKiBVc2Ugb2YgLmJpX3ByaXZhdGUgaXNuJ3QgYSBwcm9ibGVtIGhlcmUgYmVjYXVzZQorCSAqIHRoZSBkbV9idWZmZXIncyBpbmxpbmUgYmlvIGlzIGxvY2FsIHRvIGJ1ZmlvLgorCSAqLworCWItPmJpby5iaV9wcml2YXRlID0gZW5kX2lvOwogCiAJLyoKIAkgKiBXZSBhc3N1bWUgdGhhdCBpZiBsZW4gPj0gUEFHRV9TSVpFIHB0ciBpcyBwYWdlLWFsaWduZWQuCkBAIC04ODcsMjMgKzk1MSw2IEBACiAJCV9fd3JpdGVfZGlydHlfYnVmZmVyc19hc3luYyhjLCAxLCB3cml0ZV9saXN0KTsKIH0KIAotLyoKLSAqIEZpbmQgYSBidWZmZXIgaW4gdGhlIGhhc2guCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZG1fYnVmZmVyICpfX2ZpbmQoc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYywgc2VjdG9yX3QgYmxvY2spCi17Ci0Jc3RydWN0IGRtX2J1ZmZlciAqYjsKLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGIsICZjLT5jYWNoZV9oYXNoW0RNX0JVRklPX0hBU0goYmxvY2spXSwKLQkJCSAgICAgaGFzaF9saXN0KSB7Ci0JCWRtX2J1ZmlvX2NvbmRfcmVzY2hlZCgpOwotCQlpZiAoYi0+YmxvY2sgPT0gYmxvY2spCi0JCQlyZXR1cm4gYjsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBHZXR0aW5nIGEgYnVmZmVyCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE0MzMsNDUgKzE0ODAsNTIgQEAKIH0KIAogLyoKLSAqIFRlc3QgaWYgdGhlIGJ1ZmZlciBpcyB1bnVzZWQgYW5kIHRvbyBvbGQsIGFuZCBjb21taXQgaXQuCi0gKiBBdCBpZiBub2lvIGlzIHNldCwgd2UgbXVzdCBub3QgZG8gYW55IEkvTyBiZWNhdXNlIHdlIGhvbGQKLSAqIGRtX2J1ZmlvX2NsaWVudHNfbG9jayBhbmQgd2Ugd291bGQgcmlzayBkZWFkbG9jayBpZiB0aGUgSS9PIGdldHMgcmVyb3V0ZWQgdG8KLSAqIGRpZmZlcmVudCBidWZpbyBjbGllbnQuCisgKiBXZSBtYXkgbm90IGJlIGFibGUgdG8gZXZpY3QgdGhpcyBidWZmZXIgaWYgSU8gcGVuZGluZyBvciB0aGUgY2xpZW50CisgKiBpcyBzdGlsbCB1c2luZyBpdC4gIENhbGxlciBpcyBleHBlY3RlZCB0byBrbm93IGJ1ZmZlciBpcyB0b28gb2xkLgorICoKKyAqIEFuZCBpZiBHRlBfTk9GUyBpcyB1c2VkLCB3ZSBtdXN0IG5vdCBkbyBhbnkgSS9PIGJlY2F1c2Ugd2UgaG9sZAorICogZG1fYnVmaW9fY2xpZW50c19sb2NrIGFuZCB3ZSB3b3VsZCByaXNrIGRlYWRsb2NrIGlmIHRoZSBJL08gZ2V0cworICogcmVyb3V0ZWQgdG8gZGlmZmVyZW50IGJ1ZmlvIGNsaWVudC4KICAqLwotc3RhdGljIGludCBfX2NsZWFudXBfb2xkX2J1ZmZlcihzdHJ1Y3QgZG1fYnVmZmVyICpiLCBnZnBfdCBnZnAsCi0JCQkJdW5zaWduZWQgbG9uZyBtYXhfamlmZmllcykKK3N0YXRpYyBib29sIF9fdHJ5X2V2aWN0X2J1ZmZlcihzdHJ1Y3QgZG1fYnVmZmVyICpiLCBnZnBfdCBnZnApCiB7Ci0JaWYgKGppZmZpZXMgLSBiLT5sYXN0X2FjY2Vzc2VkIDwgbWF4X2ppZmZpZXMpCi0JCXJldHVybiAwOwotCi0JaWYgKCEoZ2ZwICYgX19HRlBfSU8pKSB7CisJaWYgKCEoZ2ZwICYgX19HRlBfRlMpKSB7CiAJCWlmICh0ZXN0X2JpdChCX1JFQURJTkcsICZiLT5zdGF0ZSkgfHwKIAkJICAgIHRlc3RfYml0KEJfV1JJVElORywgJmItPnN0YXRlKSB8fAogCQkgICAgdGVzdF9iaXQoQl9ESVJUWSwgJmItPnN0YXRlKSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWlmIChiLT5ob2xkX2NvdW50KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJX19tYWtlX2J1ZmZlcl9jbGVhbihiKTsKIAlfX3VubGlua19idWZmZXIoYik7CiAJX19mcmVlX2J1ZmZlcl93YWtlKGIpOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBsb25nIF9fc2NhbihzdHJ1Y3QgZG1fYnVmaW9fY2xpZW50ICpjLCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCi0JCSAgIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIHVuc2lnbmVkIGdldF9yZXRhaW5fYnVmZmVycyhzdHJ1Y3QgZG1fYnVmaW9fY2xpZW50ICpjKQoreworICAgICAgICB1bnNpZ25lZCByZXRhaW5fYnl0ZXMgPSBBQ0NFU1NfT05DRShkbV9idWZpb19yZXRhaW5fYnl0ZXMpOworICAgICAgICByZXR1cm4gcmV0YWluX2J5dGVzIC8gYy0+YmxvY2tfc2l6ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19zY2FuKHN0cnVjdCBkbV9idWZpb19jbGllbnQgKmMsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKKwkJCSAgICBnZnBfdCBnZnBfbWFzaykKIHsKIAlpbnQgbDsKIAlzdHJ1Y3QgZG1fYnVmZmVyICpiLCAqdG1wOwotCWxvbmcgZnJlZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgZnJlZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgY291bnQgPSBucl90b19zY2FuOworCXVuc2lnbmVkIHJldGFpbl90YXJnZXQgPSBnZXRfcmV0YWluX2J1ZmZlcnMoYyk7CiAKIAlmb3IgKGwgPSAwOyBsIDwgTElTVF9TSVpFOyBsKyspIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoYiwgdG1wLCAmYy0+bHJ1W2xdLCBscnVfbGlzdCkgewotCQkJZnJlZWQgKz0gX19jbGVhbnVwX29sZF9idWZmZXIoYiwgZ2ZwX21hc2ssIDApOwotCQkJaWYgKCEtLW5yX3RvX3NjYW4pCisJCQlpZiAoX190cnlfZXZpY3RfYnVmZmVyKGIsIGdmcF9tYXNrKSkKKwkJCQlmcmVlZCsrOworCQkJaWYgKCEtLW5yX3RvX3NjYW4gfHwgKChjb3VudCAtIGZyZWVkKSA8PSByZXRhaW5fdGFyZ2V0KSkKIAkJCQlyZXR1cm4gZnJlZWQ7CiAJCQlkbV9idWZpb19jb25kX3Jlc2NoZWQoKTsKIAkJfQpAQCAtMTQ4Niw3ICsxNTQwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZyZWVkOwogCiAJYyA9IGNvbnRhaW5lcl9vZihzaHJpbmssIHN0cnVjdCBkbV9idWZpb19jbGllbnQsIHNocmlua2VyKTsKLQlpZiAoc2MtPmdmcF9tYXNrICYgX19HRlBfSU8pCisJaWYgKHNjLT5nZnBfbWFzayAmIF9fR0ZQX0ZTKQogCQlkbV9idWZpb19sb2NrKGMpOwogCWVsc2UgaWYgKCFkbV9idWZpb190cnlsb2NrKGMpKQogCQlyZXR1cm4gU0hSSU5LX1NUT1A7CkBAIC0xNTAzLDcgKzE1NTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAKIAljID0gY29udGFpbmVyX29mKHNocmluaywgc3RydWN0IGRtX2J1ZmlvX2NsaWVudCwgc2hyaW5rZXIpOwotCWlmIChzYy0+Z2ZwX21hc2sgJiBfX0dGUF9JTykKKwlpZiAoc2MtPmdmcF9tYXNrICYgX19HRlBfRlMpCiAJCWRtX2J1ZmlvX2xvY2soYyk7CiAJZWxzZSBpZiAoIWRtX2J1ZmlvX3RyeWxvY2soYykpCiAJCXJldHVybiAwOwpAQCAtMTUzMywxMSArMTU4Nyw3IEBACiAJCXIgPSAtRU5PTUVNOwogCQlnb3RvIGJhZF9jbGllbnQ7CiAJfQotCWMtPmNhY2hlX2hhc2ggPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkgPDwgRE1fQlVGSU9fSEFTSF9CSVRTKTsKLQlpZiAoIWMtPmNhY2hlX2hhc2gpIHsKLQkJciA9IC1FTk9NRU07Ci0JCWdvdG8gYmFkX2hhc2g7Ci0JfQorCWMtPmJ1ZmZlcl90cmVlID0gUkJfUk9PVDsKIAogCWMtPmJkZXYgPSBiZGV2OwogCWMtPmJsb2NrX3NpemUgPSBibG9ja19zaXplOwpAQCAtMTU1Niw5ICsxNjA2LDYgQEAKIAkJYy0+bl9idWZmZXJzW2ldID0gMDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgMSA8PCBETV9CVUZJT19IQVNIX0JJVFM7IGkrKykKLQkJSU5JVF9ITElTVF9IRUFEKCZjLT5jYWNoZV9oYXNoW2ldKTsKLQogCW11dGV4X2luaXQoJmMtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZjLT5yZXNlcnZlZF9idWZmZXJzKTsKIAljLT5uZWVkX3Jlc2VydmVkX2J1ZmZlcnMgPSByZXNlcnZlZF9idWZmZXJzOwpAQCAtMTYzMiw4ICsxNjc5LDYgQEAKIAl9CiAJZG1faW9fY2xpZW50X2Rlc3Ryb3koYy0+ZG1faW8pOwogYmFkX2RtX2lvOgotCXZmcmVlKGMtPmNhY2hlX2hhc2gpOwotYmFkX2hhc2g6CiAJa2ZyZWUoYyk7CiBiYWRfY2xpZW50OgogCXJldHVybiBFUlJfUFRSKHIpOwpAQCAtMTY2MCw5ICsxNzA1LDcgQEAKIAogCW11dGV4X3VubG9jaygmZG1fYnVmaW9fY2xpZW50c19sb2NrKTsKIAotCWZvciAoaSA9IDA7IGkgPCAxIDw8IERNX0JVRklPX0hBU0hfQklUUzsgaSsrKQotCQlCVUdfT04oIWhsaXN0X2VtcHR5KCZjLT5jYWNoZV9oYXNoW2ldKSk7Ci0KKwlCVUdfT04oIVJCX0VNUFRZX1JPT1QoJmMtPmJ1ZmZlcl90cmVlKSk7CiAJQlVHX09OKGMtPm5lZWRfcmVzZXJ2ZWRfYnVmZmVycyk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmMtPnJlc2VydmVkX2J1ZmZlcnMpKSB7CkBAIC0xNjgwLDM2ICsxNzIzLDYwIEBACiAJCUJVR19PTihjLT5uX2J1ZmZlcnNbaV0pOwogCiAJZG1faW9fY2xpZW50X2Rlc3Ryb3koYy0+ZG1faW8pOwotCXZmcmVlKGMtPmNhY2hlX2hhc2gpOwogCWtmcmVlKGMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fYnVmaW9fY2xpZW50X2Rlc3Ryb3kpOwogCi1zdGF0aWMgdm9pZCBjbGVhbnVwX29sZF9idWZmZXJzKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgZ2V0X21heF9hZ2VfaHoodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIG1heF9hZ2UgPSBBQ0NFU1NfT05DRShkbV9idWZpb19tYXhfYWdlKTsKLQlzdHJ1Y3QgZG1fYnVmaW9fY2xpZW50ICpjOworCXVuc2lnbmVkIG1heF9hZ2UgPSBBQ0NFU1NfT05DRShkbV9idWZpb19tYXhfYWdlKTsKIAotCWlmIChtYXhfYWdlID4gVUxPTkdfTUFYIC8gSFopCi0JCW1heF9hZ2UgPSBVTE9OR19NQVggLyBIWjsKKwlpZiAobWF4X2FnZSA+IFVJTlRfTUFYIC8gSFopCisJCW1heF9hZ2UgPSBVSU5UX01BWCAvIEhaOwogCi0JbXV0ZXhfbG9jaygmZG1fYnVmaW9fY2xpZW50c19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZkbV9idWZpb19hbGxfY2xpZW50cywgY2xpZW50X2xpc3QpIHsKLQkJaWYgKCFkbV9idWZpb190cnlsb2NrKGMpKQotCQkJY29udGludWU7CisJcmV0dXJuIG1heF9hZ2UgKiBIWjsKK30KIAotCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmMtPmxydVtMSVNUX0NMRUFOXSkpIHsKLQkJCXN0cnVjdCBkbV9idWZmZXIgKmI7Ci0JCQliID0gbGlzdF9lbnRyeShjLT5scnVbTElTVF9DTEVBTl0ucHJldiwKLQkJCQkgICAgICAgc3RydWN0IGRtX2J1ZmZlciwgbHJ1X2xpc3QpOwotCQkJaWYgKCFfX2NsZWFudXBfb2xkX2J1ZmZlcihiLCAwLCBtYXhfYWdlICogSFopKQotCQkJCWJyZWFrOwotCQkJZG1fYnVmaW9fY29uZF9yZXNjaGVkKCk7Ci0JCX0KK3N0YXRpYyBib29sIG9sZGVyX3RoYW4oc3RydWN0IGRtX2J1ZmZlciAqYiwgdW5zaWduZWQgbG9uZyBhZ2VfaHopCit7CisJcmV0dXJuIChqaWZmaWVzIC0gYi0+bGFzdF9hY2Nlc3NlZCkgPj0gYWdlX2h6OworfQogCi0JCWRtX2J1ZmlvX3VubG9jayhjKTsKK3N0YXRpYyB2b2lkIF9fZXZpY3Rfb2xkX2J1ZmZlcnMoc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYywgdW5zaWduZWQgbG9uZyBhZ2VfaHopCit7CisJc3RydWN0IGRtX2J1ZmZlciAqYiwgKnRtcDsKKwl1bnNpZ25lZCByZXRhaW5fdGFyZ2V0ID0gZ2V0X3JldGFpbl9idWZmZXJzKGMpOworCXVuc2lnbmVkIGNvdW50OworCisJZG1fYnVmaW9fbG9jayhjKTsKKworCWNvdW50ID0gYy0+bl9idWZmZXJzW0xJU1RfQ0xFQU5dICsgYy0+bl9idWZmZXJzW0xJU1RfRElSVFldOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGIsIHRtcCwgJmMtPmxydVtMSVNUX0NMRUFOXSwgbHJ1X2xpc3QpIHsKKwkJaWYgKGNvdW50IDw9IHJldGFpbl90YXJnZXQpCisJCQlicmVhazsKKworCQlpZiAoIW9sZGVyX3RoYW4oYiwgYWdlX2h6KSkKKwkJCWJyZWFrOworCisJCWlmIChfX3RyeV9ldmljdF9idWZmZXIoYiwgMCkpCisJCQljb3VudC0tOworCiAJCWRtX2J1ZmlvX2NvbmRfcmVzY2hlZCgpOwogCX0KKworCWRtX2J1ZmlvX3VubG9jayhjKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9vbGRfYnVmZmVycyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbWF4X2FnZV9oeiA9IGdldF9tYXhfYWdlX2h6KCk7CisJc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYzsKKworCW11dGV4X2xvY2soJmRtX2J1ZmlvX2NsaWVudHNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZkbV9idWZpb19hbGxfY2xpZW50cywgY2xpZW50X2xpc3QpCisJCV9fZXZpY3Rfb2xkX2J1ZmZlcnMoYywgbWF4X2FnZV9oeik7CisKIAltdXRleF91bmxvY2soJmRtX2J1ZmlvX2NsaWVudHNfbG9jayk7CiB9CiAKQEAgLTE4MzQsNiArMTkwMSw5IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQobWF4X2FnZV9zZWNvbmRzLCBkbV9idWZpb19tYXhfYWdlLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9hZ2Vfc2Vjb25kcywgIk1heCBhZ2Ugb2YgYSBidWZmZXIgaW4gc2Vjb25kcyIpOwogCittb2R1bGVfcGFyYW1fbmFtZWQocmV0YWluX2J5dGVzLCBkbV9idWZpb19yZXRhaW5fYnl0ZXMsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocmV0YWluX2J5dGVzLCAiVHJ5IHRvIGtlZXAgYXQgbGVhc3QgdGhpcyBtYW55IGJ5dGVzIGNhY2hlZCBpbiBtZW1vcnkiKTsKKwogbW9kdWxlX3BhcmFtX25hbWVkKHBlYWtfYWxsb2NhdGVkX2J5dGVzLCBkbV9idWZpb19wZWFrX2FsbG9jYXRlZCwgdWxvbmcsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MocGVha19hbGxvY2F0ZWRfYnl0ZXMsICJUcmFja3MgdGhlIG1heGltdW0gYWxsb2NhdGVkIG1lbW9yeSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNhY2hlLWJsb2NrLXR5cGVzLmggYi9kcml2ZXJzL21kL2RtLWNhY2hlLWJsb2NrLXR5cGVzLmgKaW5kZXggYWFjMGUyZC4uYmVkNGFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS1ibG9jay10eXBlcy5oCisrKyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtYmxvY2stdHlwZXMuaApAQCAtMTksNiArMTksNyBAQAogCiB0eXBlZGVmIGRtX2Jsb2NrX3QgX19iaXR3aXNlX18gZG1fb2Jsb2NrX3Q7CiB0eXBlZGVmIHVpbnQzMl90IF9fYml0d2lzZV9fIGRtX2NibG9ja190OwordHlwZWRlZiBkbV9ibG9ja190IF9fYml0d2lzZV9fIGRtX2RibG9ja190OwogCiBzdGF0aWMgaW5saW5lIGRtX29ibG9ja190IHRvX29ibG9jayhkbV9ibG9ja190IGIpCiB7CkBAIC00MCw0ICs0MSwxNCBAQAogCXJldHVybiAoX19mb3JjZSB1aW50MzJfdCkgYjsKIH0KIAorc3RhdGljIGlubGluZSBkbV9kYmxvY2tfdCB0b19kYmxvY2soZG1fYmxvY2tfdCBiKQoreworCXJldHVybiAoX19mb3JjZSBkbV9kYmxvY2tfdCkgYjsKK30KKworc3RhdGljIGlubGluZSBkbV9ibG9ja190IGZyb21fZGJsb2NrKGRtX2RibG9ja190IGIpCit7CisJcmV0dXJuIChfX2ZvcmNlIGRtX2Jsb2NrX3QpIGI7Cit9CisKICNlbmRpZiAvKiBETV9DQUNIRV9CTE9DS19UWVBFU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmMgYi9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmMKaW5kZXggMDY3MDkyNS4uOWZjNjE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAJZG1fYmxvY2tfdCBkaXNjYXJkX3Jvb3Q7CiAKIAlzZWN0b3JfdCBkaXNjYXJkX2Jsb2NrX3NpemU7Ci0JZG1fb2Jsb2NrX3QgZGlzY2FyZF9ucl9ibG9ja3M7CisJZG1fZGJsb2NrX3QgZGlzY2FyZF9ucl9ibG9ja3M7CiAKIAlzZWN0b3JfdCBkYXRhX2Jsb2NrX3NpemU7CiAJZG1fY2Jsb2NrX3QgY2FjaGVfYmxvY2tzOwpAQCAtMzI5LDcgKzMyOSw3IEBACiAJZGlza19zdXBlci0+aGludF9yb290ID0gY3B1X3RvX2xlNjQoY21kLT5oaW50X3Jvb3QpOwogCWRpc2tfc3VwZXItPmRpc2NhcmRfcm9vdCA9IGNwdV90b19sZTY0KGNtZC0+ZGlzY2FyZF9yb290KTsKIAlkaXNrX3N1cGVyLT5kaXNjYXJkX2Jsb2NrX3NpemUgPSBjcHVfdG9fbGU2NChjbWQtPmRpc2NhcmRfYmxvY2tfc2l6ZSk7Ci0JZGlza19zdXBlci0+ZGlzY2FyZF9ucl9ibG9ja3MgPSBjcHVfdG9fbGU2NChmcm9tX29ibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CisJZGlza19zdXBlci0+ZGlzY2FyZF9ucl9ibG9ja3MgPSBjcHVfdG9fbGU2NChmcm9tX2RibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CiAJZGlza19zdXBlci0+bWV0YWRhdGFfYmxvY2tfc2l6ZSA9IGNwdV90b19sZTMyKERNX0NBQ0hFX01FVEFEQVRBX0JMT0NLX1NJWkUpOwogCWRpc2tfc3VwZXItPmRhdGFfYmxvY2tfc2l6ZSA9IGNwdV90b19sZTMyKGNtZC0+ZGF0YV9ibG9ja19zaXplKTsKIAlkaXNrX3N1cGVyLT5jYWNoZV9ibG9ja3MgPSBjcHVfdG9fbGUzMigwKTsKQEAgLTUyOCw3ICs1MjgsNyBAQAogCWNtZC0+aGludF9yb290ID0gbGU2NF90b19jcHUoZGlza19zdXBlci0+aGludF9yb290KTsKIAljbWQtPmRpc2NhcmRfcm9vdCA9IGxlNjRfdG9fY3B1KGRpc2tfc3VwZXItPmRpc2NhcmRfcm9vdCk7CiAJY21kLT5kaXNjYXJkX2Jsb2NrX3NpemUgPSBsZTY0X3RvX2NwdShkaXNrX3N1cGVyLT5kaXNjYXJkX2Jsb2NrX3NpemUpOwotCWNtZC0+ZGlzY2FyZF9ucl9ibG9ja3MgPSB0b19vYmxvY2sobGU2NF90b19jcHUoZGlza19zdXBlci0+ZGlzY2FyZF9ucl9ibG9ja3MpKTsKKwljbWQtPmRpc2NhcmRfbnJfYmxvY2tzID0gdG9fZGJsb2NrKGxlNjRfdG9fY3B1KGRpc2tfc3VwZXItPmRpc2NhcmRfbnJfYmxvY2tzKSk7CiAJY21kLT5kYXRhX2Jsb2NrX3NpemUgPSBsZTMyX3RvX2NwdShkaXNrX3N1cGVyLT5kYXRhX2Jsb2NrX3NpemUpOwogCWNtZC0+Y2FjaGVfYmxvY2tzID0gdG9fY2Jsb2NrKGxlMzJfdG9fY3B1KGRpc2tfc3VwZXItPmNhY2hlX2Jsb2NrcykpOwogCXN0cm5jcHkoY21kLT5wb2xpY3lfbmFtZSwgZGlza19zdXBlci0+cG9saWN5X25hbWUsIHNpemVvZihjbWQtPnBvbGljeV9uYW1lKSk7CkBAIC02MjYsNyArNjI2LDcgQEAKIAlkaXNrX3N1cGVyLT5oaW50X3Jvb3QgPSBjcHVfdG9fbGU2NChjbWQtPmhpbnRfcm9vdCk7CiAJZGlza19zdXBlci0+ZGlzY2FyZF9yb290ID0gY3B1X3RvX2xlNjQoY21kLT5kaXNjYXJkX3Jvb3QpOwogCWRpc2tfc3VwZXItPmRpc2NhcmRfYmxvY2tfc2l6ZSA9IGNwdV90b19sZTY0KGNtZC0+ZGlzY2FyZF9ibG9ja19zaXplKTsKLQlkaXNrX3N1cGVyLT5kaXNjYXJkX25yX2Jsb2NrcyA9IGNwdV90b19sZTY0KGZyb21fb2Jsb2NrKGNtZC0+ZGlzY2FyZF9ucl9ibG9ja3MpKTsKKwlkaXNrX3N1cGVyLT5kaXNjYXJkX25yX2Jsb2NrcyA9IGNwdV90b19sZTY0KGZyb21fZGJsb2NrKGNtZC0+ZGlzY2FyZF9ucl9ibG9ja3MpKTsKIAlkaXNrX3N1cGVyLT5jYWNoZV9ibG9ja3MgPSBjcHVfdG9fbGUzMihmcm9tX2NibG9jayhjbWQtPmNhY2hlX2Jsb2NrcykpOwogCXN0cm5jcHkoZGlza19zdXBlci0+cG9saWN5X25hbWUsIGNtZC0+cG9saWN5X25hbWUsIHNpemVvZihkaXNrX3N1cGVyLT5wb2xpY3lfbmFtZSkpOwogCWRpc2tfc3VwZXItPnBvbGljeV92ZXJzaW9uWzBdID0gY3B1X3RvX2xlMzIoY21kLT5wb2xpY3lfdmVyc2lvblswXSk7CkBAIC03OTcsMTUgKzc5NywxNSBAQAogCiBpbnQgZG1fY2FjaGVfZGlzY2FyZF9iaXRzZXRfcmVzaXplKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLAogCQkJCSAgIHNlY3Rvcl90IGRpc2NhcmRfYmxvY2tfc2l6ZSwKLQkJCQkgICBkbV9vYmxvY2tfdCBuZXdfbnJfZW50cmllcykKKwkJCQkgICBkbV9kYmxvY2tfdCBuZXdfbnJfZW50cmllcykKIHsKIAlpbnQgcjsKIAogCWRvd25fd3JpdGUoJmNtZC0+cm9vdF9sb2NrKTsKIAlyID0gZG1fYml0c2V0X3Jlc2l6ZSgmY21kLT5kaXNjYXJkX2luZm8sCiAJCQkgICAgIGNtZC0+ZGlzY2FyZF9yb290LAotCQkJICAgICBmcm9tX29ibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKSwKLQkJCSAgICAgZnJvbV9vYmxvY2sobmV3X25yX2VudHJpZXMpLAorCQkJICAgICBmcm9tX2RibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKSwKKwkJCSAgICAgZnJvbV9kYmxvY2sobmV3X25yX2VudHJpZXMpLAogCQkJICAgICBmYWxzZSwgJmNtZC0+ZGlzY2FyZF9yb290KTsKIAlpZiAoIXIpIHsKIAkJY21kLT5kaXNjYXJkX2Jsb2NrX3NpemUgPSBkaXNjYXJkX2Jsb2NrX3NpemU7CkBAIC04MTgsMjggKzgxOCwyOCBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IF9fc2V0X2Rpc2NhcmQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsIGRtX29ibG9ja190IGIpCitzdGF0aWMgaW50IF9fc2V0X2Rpc2NhcmQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsIGRtX2RibG9ja190IGIpCiB7CiAJcmV0dXJuIGRtX2JpdHNldF9zZXRfYml0KCZjbWQtPmRpc2NhcmRfaW5mbywgY21kLT5kaXNjYXJkX3Jvb3QsCi0JCQkJIGZyb21fb2Jsb2NrKGIpLCAmY21kLT5kaXNjYXJkX3Jvb3QpOworCQkJCSBmcm9tX2RibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290KTsKIH0KIAotc3RhdGljIGludCBfX2NsZWFyX2Rpc2NhcmQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsIGRtX29ibG9ja190IGIpCitzdGF0aWMgaW50IF9fY2xlYXJfZGlzY2FyZChzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fZGJsb2NrX3QgYikKIHsKIAlyZXR1cm4gZG1fYml0c2V0X2NsZWFyX2JpdCgmY21kLT5kaXNjYXJkX2luZm8sIGNtZC0+ZGlzY2FyZF9yb290LAotCQkJCSAgIGZyb21fb2Jsb2NrKGIpLCAmY21kLT5kaXNjYXJkX3Jvb3QpOworCQkJCSAgIGZyb21fZGJsb2NrKGIpLCAmY21kLT5kaXNjYXJkX3Jvb3QpOwogfQogCi1zdGF0aWMgaW50IF9faXNfZGlzY2FyZGVkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9vYmxvY2tfdCBiLAorc3RhdGljIGludCBfX2lzX2Rpc2NhcmRlZChzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fZGJsb2NrX3QgYiwKIAkJCSAgYm9vbCAqaXNfZGlzY2FyZGVkKQogewogCXJldHVybiBkbV9iaXRzZXRfdGVzdF9iaXQoJmNtZC0+ZGlzY2FyZF9pbmZvLCBjbWQtPmRpc2NhcmRfcm9vdCwKLQkJCQkgIGZyb21fb2Jsb2NrKGIpLCAmY21kLT5kaXNjYXJkX3Jvb3QsCisJCQkJICBmcm9tX2RibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290LAogCQkJCSAgaXNfZGlzY2FyZGVkKTsKIH0KIAogc3RhdGljIGludCBfX2Rpc2NhcmQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsCi0JCSAgICAgZG1fb2Jsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmQpCisJCSAgICAgZG1fZGJsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmQpCiB7CiAJaW50IHI7CiAKQEAgLTg1Miw3ICs4NTIsNyBAQAogfQogCiBpbnQgZG1fY2FjaGVfc2V0X2Rpc2NhcmQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsCi0JCQkgZG1fb2Jsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmQpCisJCQkgZG1fZGJsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmQpCiB7CiAJaW50IHI7CiAKQEAgLTg3MCw4ICs4NzAsOCBAQAogCWRtX2Jsb2NrX3QgYjsKIAlib29sIGRpc2NhcmQ7CiAKLQlmb3IgKGIgPSAwOyBiIDwgZnJvbV9vYmxvY2soY21kLT5kaXNjYXJkX25yX2Jsb2Nrcyk7IGIrKykgewotCQlkbV9vYmxvY2tfdCBkYmxvY2sgPSB0b19vYmxvY2soYik7CisJZm9yIChiID0gMDsgYiA8IGZyb21fZGJsb2NrKGNtZC0+ZGlzY2FyZF9ucl9ibG9ja3MpOyBiKyspIHsKKwkJZG1fZGJsb2NrX3QgZGJsb2NrID0gdG9fZGJsb2NrKGIpOwogCiAJCWlmIChjbWQtPmNsZWFuX3doZW5fb3BlbmVkKSB7CiAJCQlyID0gX19pc19kaXNjYXJkZWQoY21kLCBkYmxvY2ssICZkaXNjYXJkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuaCBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuaAppbmRleCA3MzgzYzkwLi40ZWNjNDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmgKKysrIGIvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5oCkBAIC03MCwxNCArNzAsMTQgQEAKIAogaW50IGRtX2NhY2hlX2Rpc2NhcmRfYml0c2V0X3Jlc2l6ZShzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwKIAkJCQkgICBzZWN0b3JfdCBkaXNjYXJkX2Jsb2NrX3NpemUsCi0JCQkJICAgZG1fb2Jsb2NrX3QgbmV3X25yX2VudHJpZXMpOworCQkJCSAgIGRtX2RibG9ja190IG5ld19ucl9lbnRyaWVzKTsKIAogdHlwZWRlZiBpbnQgKCpsb2FkX2Rpc2NhcmRfZm4pKHZvaWQgKmNvbnRleHQsIHNlY3Rvcl90IGRpc2NhcmRfYmxvY2tfc2l6ZSwKLQkJCSAgICAgICBkbV9vYmxvY2tfdCBkYmxvY2ssIGJvb2wgZGlzY2FyZGVkKTsKKwkJCSAgICAgICBkbV9kYmxvY2tfdCBkYmxvY2ssIGJvb2wgZGlzY2FyZGVkKTsKIGludCBkbV9jYWNoZV9sb2FkX2Rpc2NhcmRzKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLAogCQkJICAgbG9hZF9kaXNjYXJkX2ZuIGZuLCB2b2lkICpjb250ZXh0KTsKIAotaW50IGRtX2NhY2hlX3NldF9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9vYmxvY2tfdCBkYmxvY2ssIGJvb2wgZGlzY2FyZCk7CitpbnQgZG1fY2FjaGVfc2V0X2Rpc2NhcmQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsIGRtX2RibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKTsKIAogaW50IGRtX2NhY2hlX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9jYmxvY2tfdCBjYmxvY2spOwogaW50IGRtX2NhY2hlX2luc2VydF9tYXBwaW5nKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9jYmxvY2tfdCBjYmxvY2ssIGRtX29ibG9ja190IG9ibG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNhY2hlLXBvbGljeS1tcS5jIGIvZHJpdmVycy9tZC9kbS1jYWNoZS1wb2xpY3ktbXEuYwppbmRleCAwZTM4NWU0Li4xM2Y1NDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNhY2hlLXBvbGljeS1tcS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtcG9saWN5LW1xLmMKQEAgLTE4MSwyNiArMTgxLDMyIEBACiAgKiBHaXZlcyB1cyB0aGUgb2xkZXN0IGVudHJ5IG9mIHRoZSBsb3dlc3QgcG9wb3VsYXRlZCBsZXZlbC4gIElmIHRoZSBmaXJzdAogICogbGV2ZWwgaXMgZW1wdGllZCB0aGVuIHdlIHNoaWZ0IGRvd24gb25lIGxldmVsLgogICovCi1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqcXVldWVfcG9wKHN0cnVjdCBxdWV1ZSAqcSkKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpxdWV1ZV9wZWVrKHN0cnVjdCBxdWV1ZSAqcSkKIHsKIAl1bnNpZ25lZCBsZXZlbDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpyOwogCiAJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgTlJfUVVFVUVfTEVWRUxTOyBsZXZlbCsrKQotCQlpZiAoIWxpc3RfZW1wdHkocS0+cXMgKyBsZXZlbCkpIHsKLQkJCXIgPSBxLT5xc1tsZXZlbF0ubmV4dDsKLQkJCWxpc3RfZGVsKHIpOwotCi0JCQkvKiBoYXZlIHdlIGp1c3QgZW1wdGllZCB0aGUgYm90dG9tIGxldmVsPyAqLwotCQkJaWYgKGxldmVsID09IDAgJiYgbGlzdF9lbXB0eShxLT5xcykpCi0JCQkJcXVldWVfc2hpZnRfZG93bihxKTsKLQotCQkJcmV0dXJuIHI7Ci0JCX0KKwkJaWYgKCFsaXN0X2VtcHR5KHEtPnFzICsgbGV2ZWwpKQorCQkJcmV0dXJuIHEtPnFzW2xldmVsXS5uZXh0OwogCiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpxdWV1ZV9wb3Aoc3RydWN0IHF1ZXVlICpxKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnIgPSBxdWV1ZV9wZWVrKHEpOworCisJaWYgKHIpIHsKKwkJbGlzdF9kZWwocik7CisKKwkJLyogaGF2ZSB3ZSBqdXN0IGVtcHRpZWQgdGhlIGJvdHRvbSBsZXZlbD8gKi8KKwkJaWYgKGxpc3RfZW1wdHkocS0+cXMpKQorCQkJcXVldWVfc2hpZnRfZG93bihxKTsKKwl9CisKKwlyZXR1cm4gcjsKK30KKwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9wKHN0cnVjdCBsaXN0X2hlYWQgKmxoKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnIgPSBsaC0+bmV4dDsKQEAgLTM4MywxMyArMzg5LDYgQEAKIAl1bnNpZ25lZCBnZW5lcmF0aW9uOwogCXVuc2lnbmVkIGdlbmVyYXRpb25fcGVyaW9kOyAvKiBpbiBsb29rdXBzICh3aWxsIHByb2JhYmx5IGNoYW5nZSkgKi8KIAotCS8qCi0JICogRW50cmllcyBpbiB0aGUgcHJlX2NhY2hlIHdob3NlIGhpdCBjb3VudCBwYXNzZXMgdGhlIHByb21vdGlvbgotCSAqIHRocmVzaG9sZCBtb3ZlIHRvIHRoZSBjYWNoZSBwcm9wZXIuICBXb3JraW5nIG91dCB0aGUgY29ycmVjdAotCSAqIHZhbHVlIGZvciB0aGUgcHJvbW90aW9uX3RocmVzaG9sZCBpcyBjcnVjaWFsIHRvIHRoaXMgcG9saWN5LgotCSAqLwotCXVuc2lnbmVkIHByb21vdGVfdGhyZXNob2xkOwotCiAJdW5zaWduZWQgZGlzY2FyZF9wcm9tb3RlX2FkanVzdG1lbnQ7CiAJdW5zaWduZWQgcmVhZF9wcm9tb3RlX2FkanVzdG1lbnQ7CiAJdW5zaWduZWQgd3JpdGVfcHJvbW90ZV9hZGp1c3RtZW50OwpAQCAtNDA2LDYgKzQwNSw3IEBACiAjZGVmaW5lIERFRkFVTFRfRElTQ0FSRF9QUk9NT1RFX0FESlVTVE1FTlQgMQogI2RlZmluZSBERUZBVUxUX1JFQURfUFJPTU9URV9BREpVU1RNRU5UIDQKICNkZWZpbmUgREVGQVVMVF9XUklURV9QUk9NT1RFX0FESlVTVE1FTlQgOAorI2RlZmluZSBESVNDT1VSQUdFX0RFTU9USU5HX0RJUlRZX1RIUkVTSE9MRCAxMjgKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTE4LDYgKzUxOCwxMiBAQAogCXJldHVybiBlOwogfQogCitzdGF0aWMgc3RydWN0IGVudHJ5ICpwZWVrKHN0cnVjdCBxdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoID0gcXVldWVfcGVlayhxKTsKKwlyZXR1cm4gaCA/IGNvbnRhaW5lcl9vZihoLCBzdHJ1Y3QgZW50cnksIGxpc3QpIDogTlVMTDsKK30KKwogLyoKICAqIEhhcyB0aGlzIGVudHJ5IGFscmVhZHkgYmVlbiB1cGRhdGVkPwogICovCkBAIC01NzAsMTAgKzU3Niw2IEBACiAJCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0KLQkJbXEtPnByb21vdGVfdGhyZXNob2xkID0gbnIgPyB0b3RhbCAvIG5yIDogMTsKLQkJaWYgKG1xLT5wcm9tb3RlX3RocmVzaG9sZCAqIG5yIDwgdG90YWwpCi0JCQltcS0+cHJvbW90ZV90aHJlc2hvbGQrKzsKIAl9CiB9CiAKQEAgLTY0MSw2ICs2NDMsMzAgQEAKIH0KIAogLyoKKyAqIEVudHJpZXMgaW4gdGhlIHByZV9jYWNoZSB3aG9zZSBoaXQgY291bnQgcGFzc2VzIHRoZSBwcm9tb3Rpb24KKyAqIHRocmVzaG9sZCBtb3ZlIHRvIHRoZSBjYWNoZSBwcm9wZXIuICBXb3JraW5nIG91dCB0aGUgY29ycmVjdAorICogdmFsdWUgZm9yIHRoZSBwcm9tb3Rpb25fdGhyZXNob2xkIGlzIGNydWNpYWwgdG8gdGhpcyBwb2xpY3kuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBwcm9tb3RlX3RocmVzaG9sZChzdHJ1Y3QgbXFfcG9saWN5ICptcSkKK3sKKwlzdHJ1Y3QgZW50cnkgKmU7CisKKwlpZiAoYW55X2ZyZWVfY2Jsb2NrcyhtcSkpCisJCXJldHVybiAwOworCisJZSA9IHBlZWsoJm1xLT5jYWNoZV9jbGVhbik7CisJaWYgKGUpCisJCXJldHVybiBlLT5oaXRfY291bnQ7CisKKwllID0gcGVlaygmbXEtPmNhY2hlX2RpcnR5KTsKKwlpZiAoZSkKKwkJcmV0dXJuIGUtPmhpdF9jb3VudCArIERJU0NPVVJBR0VfREVNT1RJTkdfRElSVFlfVEhSRVNIT0xEOworCisJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBXZSBtb2RpZnkgdGhlIGJhc2ljIHByb21vdGlvbl90aHJlc2hvbGQgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBpby4KICAqCiAgKiBJZiB0aGUgb3JpZ2luIGJsb2NrIGhhcyBiZWVuIGRpc2NhcmRlZCB0aGVuIHRoZXJlJ3Mgbm8gY29zdCB0byBjb3B5IGl0CkBAIC02NTMsNyArNjc5LDcgQEAKIAkJCQkJICAgYm9vbCBkaXNjYXJkZWRfb2Jsb2NrLCBpbnQgZGF0YV9kaXIpCiB7CiAJaWYgKGRhdGFfZGlyID09IFJFQUQpCi0JCXJldHVybiBtcS0+cHJvbW90ZV90aHJlc2hvbGQgKyBtcS0+cmVhZF9wcm9tb3RlX2FkanVzdG1lbnQ7CisJCXJldHVybiBwcm9tb3RlX3RocmVzaG9sZChtcSkgKyBtcS0+cmVhZF9wcm9tb3RlX2FkanVzdG1lbnQ7CiAKIAlpZiAoZGlzY2FyZGVkX29ibG9jayAmJiAoYW55X2ZyZWVfY2Jsb2NrcyhtcSkgfHwgYW55X2NsZWFuX2NibG9ja3MobXEpKSkgewogCQkvKgpAQCAtNjYzLDcgKzY4OSw3IEBACiAJCXJldHVybiBtcS0+ZGlzY2FyZF9wcm9tb3RlX2FkanVzdG1lbnQ7CiAJfQogCi0JcmV0dXJuIG1xLT5wcm9tb3RlX3RocmVzaG9sZCArIG1xLT53cml0ZV9wcm9tb3RlX2FkanVzdG1lbnQ7CisJcmV0dXJuIHByb21vdGVfdGhyZXNob2xkKG1xKSArIG1xLT53cml0ZV9wcm9tb3RlX2FkanVzdG1lbnQ7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZF9wcm9tb3RlKHN0cnVjdCBtcV9wb2xpY3kgKm1xLCBzdHJ1Y3QgZW50cnkgKmUsCkBAIC04MzksNyArODY1LDggQEAKIAlpZiAoZSAmJiBpbl9jYWNoZShtcSwgZSkpCiAJCXIgPSBjYWNoZV9lbnRyeV9mb3VuZChtcSwgZSwgcmVzdWx0KTsKIAotCWVsc2UgaWYgKGlvdF9wYXR0ZXJuKCZtcS0+dHJhY2tlcikgPT0gUEFUVEVSTl9TRVFVRU5USUFMKQorCWVsc2UgaWYgKG1xLT50cmFja2VyLnRocmVzaG9sZHNbUEFUVEVSTl9TRVFVRU5USUFMXSAmJgorCQkgaW90X3BhdHRlcm4oJm1xLT50cmFja2VyKSA9PSBQQVRURVJOX1NFUVVFTlRJQUwpCiAJCXJlc3VsdC0+b3AgPSBQT0xJQ1lfTUlTUzsKIAogCWVsc2UgaWYgKGUpCkBAIC0xMjMwLDcgKzEyNTcsNiBAQAogCW1xLT50aWNrID0gMDsKIAltcS0+aGl0X2NvdW50ID0gMDsKIAltcS0+Z2VuZXJhdGlvbiA9IDA7Ci0JbXEtPnByb21vdGVfdGhyZXNob2xkID0gMDsKIAltcS0+ZGlzY2FyZF9wcm9tb3RlX2FkanVzdG1lbnQgPSBERUZBVUxUX0RJU0NBUkRfUFJPTU9URV9BREpVU1RNRU5UOwogCW1xLT5yZWFkX3Byb21vdGVfYWRqdXN0bWVudCA9IERFRkFVTFRfUkVBRF9QUk9NT1RFX0FESlVTVE1FTlQ7CiAJbXEtPndyaXRlX3Byb21vdGVfYWRqdXN0bWVudCA9IERFRkFVTFRfV1JJVEVfUFJPTU9URV9BREpVU1RNRU5UOwpAQCAtMTI2NSw3ICsxMjkxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkbV9jYWNoZV9wb2xpY3lfdHlwZSBtcV9wb2xpY3lfdHlwZSA9IHsKIAkubmFtZSA9ICJtcSIsCi0JLnZlcnNpb24gPSB7MSwgMiwgMH0sCisJLnZlcnNpb24gPSB7MSwgMywgMH0sCiAJLmhpbnRfc2l6ZSA9IDQsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmNyZWF0ZSA9IG1xX2NyZWF0ZQpAQCAtMTI3Myw3ICsxMjk5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkbV9jYWNoZV9wb2xpY3lfdHlwZSBkZWZhdWx0X3BvbGljeV90eXBlID0gewogCS5uYW1lID0gImRlZmF1bHQiLAotCS52ZXJzaW9uID0gezEsIDIsIDB9LAorCS52ZXJzaW9uID0gezEsIDMsIDB9LAogCS5oaW50X3NpemUgPSA0LAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5jcmVhdGUgPSBtcV9jcmVhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNhY2hlLXRhcmdldC5jIGIvZHJpdmVycy9tZC9kbS1jYWNoZS10YXJnZXQuYwppbmRleCA3MTMwNTA1Li4xZTk2ZDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNhY2hlLXRhcmdldC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtdGFyZ2V0LmMKQEAgLTk1LDcgKzk1LDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBQUklTT05fQ0VMTFMgMTAyNAogI2RlZmluZSBNSUdSQVRJT05fUE9PTF9TSVpFIDEyOAogI2RlZmluZSBDT01NSVRfUEVSSU9EIEhaCiAjZGVmaW5lIE1JR1JBVElPTl9DT1VOVF9XSU5ET1cgMTAKQEAgLTIzNyw4ICsyMzYsOSBAQAogCS8qCiAJICogb3JpZ2luX2Jsb2NrcyBlbnRyaWVzLCBkaXNjYXJkZWQgaWYgc2V0LgogCSAqLwotCWRtX29ibG9ja190IGRpc2NhcmRfbnJfYmxvY2tzOworCWRtX2RibG9ja190IGRpc2NhcmRfbnJfYmxvY2tzOwogCXVuc2lnbmVkIGxvbmcgKmRpc2NhcmRfYml0c2V0OworCXVpbnQzMl90IGRpc2NhcmRfYmxvY2tfc2l6ZTsgLyogYSBwb3dlciBvZiAyIHRpbWVzIHNlY3RvcnMgcGVyIGJsb2NrICovCiAKIAkvKgogCSAqIFJhdGhlciB0aGFuIHJlY29uc3RydWN0aW5nIHRoZSB0YWJsZSBsaW5lIGZvciB0aGUgc3RhdHVzIHdlIGp1c3QKQEAgLTMxMCw2ICszMTAsNyBAQAogCWRtX2NibG9ja190IGNibG9jazsKIAogCWJvb2wgZXJyOjE7CisJYm9vbCBkaXNjYXJkOjE7CiAJYm9vbCB3cml0ZWJhY2s6MTsKIAlib29sIGRlbW90ZToxOwogCWJvb2wgcHJvbW90ZToxOwpAQCAtNDMzLDExICs0MzQsMTIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgYnVpbGRfa2V5KGRtX29ibG9ja190IG9ibG9jaywgc3RydWN0IGRtX2NlbGxfa2V5ICprZXkpCitzdGF0aWMgdm9pZCBidWlsZF9rZXkoZG1fb2Jsb2NrX3QgYmVnaW4sIGRtX29ibG9ja190IGVuZCwgc3RydWN0IGRtX2NlbGxfa2V5ICprZXkpCiB7CiAJa2V5LT52aXJ0dWFsID0gMDsKIAlrZXktPmRldiA9IDA7Ci0Ja2V5LT5ibG9jayA9IGZyb21fb2Jsb2NrKG9ibG9jayk7CisJa2V5LT5ibG9ja19iZWdpbiA9IGZyb21fb2Jsb2NrKGJlZ2luKTsKKwlrZXktPmJsb2NrX2VuZCA9IGZyb21fb2Jsb2NrKGVuZCk7CiB9CiAKIC8qCkBAIC00NDcsMTUgKzQ0OSwxNSBAQAogICovCiB0eXBlZGVmIHZvaWQgKCpjZWxsX2ZyZWVfZm4pKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpOwogCi1zdGF0aWMgaW50IGJpb19kZXRhaW4oc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3Qgb2Jsb2NrLAotCQkgICAgICBzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGxfcHJlYWxsb2MsCi0JCSAgICAgIGNlbGxfZnJlZV9mbiBmcmVlX2ZuLCB2b2lkICpmcmVlX2NvbnRleHQsCi0JCSAgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKipjZWxsX3Jlc3VsdCkKK3N0YXRpYyBpbnQgYmlvX2RldGFpbl9yYW5nZShzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBkbV9vYmxvY2tfdCBvYmxvY2tfYmVnaW4sIGRtX29ibG9ja190IG9ibG9ja19lbmQsCisJCQkgICAgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsX3ByZWFsbG9jLAorCQkJICAgIGNlbGxfZnJlZV9mbiBmcmVlX2ZuLCB2b2lkICpmcmVlX2NvbnRleHQsCisJCQkgICAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqKmNlbGxfcmVzdWx0KQogewogCWludCByOwogCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CiAKLQlidWlsZF9rZXkob2Jsb2NrLCAma2V5KTsKKwlidWlsZF9rZXkob2Jsb2NrX2JlZ2luLCBvYmxvY2tfZW5kLCAma2V5KTsKIAlyID0gZG1fYmlvX2RldGFpbihjYWNoZS0+cHJpc29uLCAma2V5LCBiaW8sIGNlbGxfcHJlYWxsb2MsIGNlbGxfcmVzdWx0KTsKIAlpZiAocikKIAkJZnJlZV9mbihmcmVlX2NvbnRleHQsIGNlbGxfcHJlYWxsb2MpOwpAQCAtNDYzLDYgKzQ2NSwxNiBAQAogCXJldHVybiByOwogfQogCitzdGF0aWMgaW50IGJpb19kZXRhaW4oc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3Qgb2Jsb2NrLAorCQkgICAgICBzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGxfcHJlYWxsb2MsCisJCSAgICAgIGNlbGxfZnJlZV9mbiBmcmVlX2ZuLCB2b2lkICpmcmVlX2NvbnRleHQsCisJCSAgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKipjZWxsX3Jlc3VsdCkKK3sKKwlkbV9vYmxvY2tfdCBlbmQgPSB0b19vYmxvY2soZnJvbV9vYmxvY2sob2Jsb2NrKSArIDFVTEwpOworCXJldHVybiBiaW9fZGV0YWluX3JhbmdlKGNhY2hlLCBvYmxvY2ssIGVuZCwgYmlvLAorCQkJCWNlbGxfcHJlYWxsb2MsIGZyZWVfZm4sIGZyZWVfY29udGV4dCwgY2VsbF9yZXN1bHQpOworfQorCiBzdGF0aWMgaW50IGdldF9jZWxsKHN0cnVjdCBjYWNoZSAqY2FjaGUsCiAJCSAgICBkbV9vYmxvY2tfdCBvYmxvY2ssCiAJCSAgICBzdHJ1Y3QgcHJlYWxsb2MgKnN0cnVjdHMsCkBAIC00NzQsNyArNDg2LDcgQEAKIAogCWNlbGxfcHJlYWxsb2MgPSBwcmVhbGxvY19nZXRfY2VsbChzdHJ1Y3RzKTsKIAotCWJ1aWxkX2tleShvYmxvY2ssICZrZXkpOworCWJ1aWxkX2tleShvYmxvY2ssIHRvX29ibG9jayhmcm9tX29ibG9jayhvYmxvY2spICsgMVVMTCksICZrZXkpOwogCXIgPSBkbV9nZXRfY2VsbChjYWNoZS0+cHJpc29uLCAma2V5LCBjZWxsX3ByZWFsbG9jLCBjZWxsX3Jlc3VsdCk7CiAJaWYgKHIpCiAJCXByZWFsbG9jX3B1dF9jZWxsKHN0cnVjdHMsIGNlbGxfcHJlYWxsb2MpOwpAQCAtNTI0LDMzICs1MzYsNTcgQEAKIAlyZXR1cm4gYjsKIH0KIAotc3RhdGljIHZvaWQgc2V0X2Rpc2NhcmQoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3QgYikKK3N0YXRpYyBkbV9ibG9ja190IG9ibG9ja3NfcGVyX2RibG9jayhzdHJ1Y3QgY2FjaGUgKmNhY2hlKQoreworCWRtX2Jsb2NrX3Qgb2Jsb2NrcyA9IGNhY2hlLT5kaXNjYXJkX2Jsb2NrX3NpemU7CisKKwlpZiAoYmxvY2tfc2l6ZV9pc19wb3dlcl9vZl90d28oY2FjaGUpKQorCQlvYmxvY2tzID4+PSBjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2tfc2hpZnQ7CisJZWxzZQorCQlvYmxvY2tzID0gYmxvY2tfZGl2KG9ibG9ja3MsIGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jayk7CisKKwlyZXR1cm4gb2Jsb2NrczsKK30KKworc3RhdGljIGRtX2RibG9ja190IG9ibG9ja190b19kYmxvY2soc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3Qgb2Jsb2NrKQoreworCXJldHVybiB0b19kYmxvY2soYmxvY2tfZGl2KGZyb21fb2Jsb2NrKG9ibG9jayksCisJCQkJICAgb2Jsb2Nrc19wZXJfZGJsb2NrKGNhY2hlKSkpOworfQorCitzdGF0aWMgZG1fb2Jsb2NrX3QgZGJsb2NrX3RvX29ibG9jayhzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBkbV9kYmxvY2tfdCBkYmxvY2spCit7CisJcmV0dXJuIHRvX29ibG9jayhmcm9tX2RibG9jayhkYmxvY2spICogb2Jsb2Nrc19wZXJfZGJsb2NrKGNhY2hlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kaXNjYXJkKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX2RibG9ja190IGIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCUJVR19PTihmcm9tX2RibG9jayhiKSA+PSBmcm9tX2RibG9jayhjYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpKTsKIAlhdG9taWNfaW5jKCZjYWNoZS0+c3RhdHMuZGlzY2FyZF9jb3VudCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FjaGUtPmxvY2ssIGZsYWdzKTsKLQlzZXRfYml0KGZyb21fb2Jsb2NrKGIpLCBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOworCXNldF9iaXQoZnJvbV9kYmxvY2soYiksIGNhY2hlLT5kaXNjYXJkX2JpdHNldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FjaGUtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgY2xlYXJfZGlzY2FyZChzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBkbV9vYmxvY2tfdCBiKQorc3RhdGljIHZvaWQgY2xlYXJfZGlzY2FyZChzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBkbV9kYmxvY2tfdCBiKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FjaGUtPmxvY2ssIGZsYWdzKTsKLQljbGVhcl9iaXQoZnJvbV9vYmxvY2soYiksIGNhY2hlLT5kaXNjYXJkX2JpdHNldCk7CisJY2xlYXJfYml0KGZyb21fZGJsb2NrKGIpLCBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBib29sIGlzX2Rpc2NhcmRlZChzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBkbV9vYmxvY2tfdCBiKQorc3RhdGljIGJvb2wgaXNfZGlzY2FyZGVkKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX2RibG9ja190IGIpCiB7CiAJaW50IHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYWNoZS0+bG9jaywgZmxhZ3MpOwotCXIgPSB0ZXN0X2JpdChmcm9tX29ibG9jayhiKSwgY2FjaGUtPmRpc2NhcmRfYml0c2V0KTsKKwlyID0gdGVzdF9iaXQoZnJvbV9kYmxvY2soYiksIGNhY2hlLT5kaXNjYXJkX2JpdHNldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FjaGUtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByOwpAQCAtNTYyLDcgKzU5OCw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYWNoZS0+bG9jaywgZmxhZ3MpOwotCXIgPSB0ZXN0X2JpdChmcm9tX29ibG9jayhiKSwgY2FjaGUtPmRpc2NhcmRfYml0c2V0KTsKKwlyID0gdGVzdF9iaXQoZnJvbV9kYmxvY2sob2Jsb2NrX3RvX2RibG9jayhjYWNoZSwgYikpLAorCQkgICAgIGNhY2hlLT5kaXNjYXJkX2JpdHNldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FjaGUtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByOwpAQCAtNjg3LDcgKzcyNCw3IEBACiAJY2hlY2tfaWZfdGlja19iaW9fbmVlZGVkKGNhY2hlLCBiaW8pOwogCXJlbWFwX3RvX29yaWdpbihjYWNoZSwgYmlvKTsKIAlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpCi0JCWNsZWFyX2Rpc2NhcmQoY2FjaGUsIG9ibG9jayk7CisJCWNsZWFyX2Rpc2NhcmQoY2FjaGUsIG9ibG9ja190b19kYmxvY2soY2FjaGUsIG9ibG9jaykpOwogfQogCiBzdGF0aWMgdm9pZCByZW1hcF90b19jYWNoZV9kaXJ0eShzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgYmlvICpiaW8sCkBAIC02OTcsNyArNzM0LDcgQEAKIAlyZW1hcF90b19jYWNoZShjYWNoZSwgYmlvLCBjYmxvY2spOwogCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewogCQlzZXRfZGlydHkoY2FjaGUsIG9ibG9jaywgY2Jsb2NrKTsKLQkJY2xlYXJfZGlzY2FyZChjYWNoZSwgb2Jsb2NrKTsKKwkJY2xlYXJfZGlzY2FyZChjYWNoZSwgb2Jsb2NrX3RvX2RibG9jayhjYWNoZSwgb2Jsb2NrKSk7CiAJfQogfQogCkBAIC05NTEsMTAgKzk4OCwxNCBAQAogCQl9CiAKIAl9IGVsc2UgewotCQljbGVhcl9kaXJ0eShjYWNoZSwgbWctPm5ld19vYmxvY2ssIG1nLT5jYmxvY2spOwotCQlpZiAobWctPnJlcXVldWVfaG9sZGVyKQorCQlpZiAobWctPnJlcXVldWVfaG9sZGVyKSB7CisJCQljbGVhcl9kaXJ0eShjYWNoZSwgbWctPm5ld19vYmxvY2ssIG1nLT5jYmxvY2spOwogCQkJY2VsbF9kZWZlcihjYWNoZSwgbWctPm5ld19vY2VsbCwgdHJ1ZSk7Ci0JCWVsc2UgeworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoZSBibG9jayB3YXMgcHJvbW90ZWQgdmlhIGFuIG92ZXJ3cml0ZSwgc28gaXQncyBkaXJ0eS4KKwkJCSAqLworCQkJc2V0X2RpcnR5KGNhY2hlLCBtZy0+bmV3X29ibG9jaywgbWctPmNibG9jayk7CiAJCQliaW9fZW5kaW8obWctPm5ld19vY2VsbC0+aG9sZGVyLCAwKTsKIAkJCWNlbGxfZGVmZXIoY2FjaGUsIG1nLT5uZXdfb2NlbGwsIGZhbHNlKTsKIAkJfQpAQCAtOTc4LDcgKzEwMTksNyBAQAogCXdha2Vfd29ya2VyKGNhY2hlKTsKIH0KIAotc3RhdGljIHZvaWQgaXNzdWVfY29weV9yZWFsKHN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nKQorc3RhdGljIHZvaWQgaXNzdWVfY29weShzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgZG1faW9fcmVnaW9uIG9fcmVnaW9uLCBjX3JlZ2lvbjsKQEAgLTEwNTcsMTEgKzEwOTgsNDYgQEAKIAltaWdyYXRpb25fc3VjY2Vzc19wcmVfY29tbWl0KG1nKTsKIH0KIAotc3RhdGljIHZvaWQgaXNzdWVfY29weShzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKK3N0YXRpYyB2b2lkIGNhbGNfZGlzY2FyZF9ibG9ja19yYW5nZShzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJICAgICBkbV9kYmxvY2tfdCAqYiwgZG1fZGJsb2NrX3QgKmUpCit7CisJc2VjdG9yX3Qgc2IgPSBiaW8tPmJpX2l0ZXIuYmlfc2VjdG9yOworCXNlY3Rvcl90IHNlID0gYmlvX2VuZF9zZWN0b3IoYmlvKTsKKworCSpiID0gdG9fZGJsb2NrKGRtX3NlY3Rvcl9kaXZfdXAoc2IsIGNhY2hlLT5kaXNjYXJkX2Jsb2NrX3NpemUpKTsKKworCWlmIChzZSAtIHNiIDwgY2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSkKKwkJKmUgPSAqYjsKKwllbHNlCisJCSplID0gdG9fZGJsb2NrKGJsb2NrX2RpdihzZSwgY2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBpc3N1ZV9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nKQoreworCWRtX2RibG9ja190IGIsIGU7CisJc3RydWN0IGJpbyAqYmlvID0gbWctPm5ld19vY2VsbC0+aG9sZGVyOworCisJY2FsY19kaXNjYXJkX2Jsb2NrX3JhbmdlKG1nLT5jYWNoZSwgYmlvLCAmYiwgJmUpOworCXdoaWxlIChiICE9IGUpIHsKKwkJc2V0X2Rpc2NhcmQobWctPmNhY2hlLCBiKTsKKwkJYiA9IHRvX2RibG9jayhmcm9tX2RibG9jayhiKSArIDEpOworCX0KKworCWJpb19lbmRpbyhiaW8sIDApOworCWNlbGxfZGVmZXIobWctPmNhY2hlLCBtZy0+bmV3X29jZWxsLCBmYWxzZSk7CisJZnJlZV9taWdyYXRpb24obWcpOworfQorCitzdGF0aWMgdm9pZCBpc3N1ZV9jb3B5X29yX2Rpc2NhcmQoc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcpCiB7CiAJYm9vbCBhdm9pZDsKIAlzdHJ1Y3QgY2FjaGUgKmNhY2hlID0gbWctPmNhY2hlOwogCisJaWYgKG1nLT5kaXNjYXJkKSB7CisJCWlzc3VlX2Rpc2NhcmQobWcpOworCQlyZXR1cm47CisJfQorCiAJaWYgKG1nLT53cml0ZWJhY2sgfHwgbWctPmRlbW90ZSkKIAkJYXZvaWQgPSAhaXNfZGlydHkoY2FjaGUsIG1nLT5jYmxvY2spIHx8CiAJCQlpc19kaXNjYXJkZWRfb2Jsb2NrKGNhY2hlLCBtZy0+b2xkX29ibG9jayk7CkBAIC0xMDcwLDEzICsxMTQ2LDE0IEBACiAKIAkJYXZvaWQgPSBpc19kaXNjYXJkZWRfb2Jsb2NrKGNhY2hlLCBtZy0+bmV3X29ibG9jayk7CiAKLQkJaWYgKCFhdm9pZCAmJiBiaW9fd3JpdGVzX2NvbXBsZXRlX2Jsb2NrKGNhY2hlLCBiaW8pKSB7CisJCWlmICh3cml0ZWJhY2tfbW9kZSgmY2FjaGUtPmZlYXR1cmVzKSAmJgorCQkgICAgIWF2b2lkICYmIGJpb193cml0ZXNfY29tcGxldGVfYmxvY2soY2FjaGUsIGJpbykpIHsKIAkJCWlzc3VlX292ZXJ3cml0ZShtZywgYmlvKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAotCWF2b2lkID8gYXZvaWRfY29weShtZykgOiBpc3N1ZV9jb3B5X3JlYWwobWcpOworCWF2b2lkID8gYXZvaWRfY29weShtZykgOiBpc3N1ZV9jb3B5KG1nKTsKIH0KIAogc3RhdGljIHZvaWQgY29tcGxldGVfbWlncmF0aW9uKHN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nKQpAQCAtMTE2MSw2ICsxMjM4LDcgQEAKIAlzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZyA9IHByZWFsbG9jX2dldF9taWdyYXRpb24oc3RydWN0cyk7CiAKIAltZy0+ZXJyID0gZmFsc2U7CisJbWctPmRpc2NhcmQgPSBmYWxzZTsKIAltZy0+d3JpdGViYWNrID0gZmFsc2U7CiAJbWctPmRlbW90ZSA9IGZhbHNlOwogCW1nLT5wcm9tb3RlID0gdHJ1ZTsKQEAgLTExODQsNiArMTI2Miw3IEBACiAJc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcgPSBwcmVhbGxvY19nZXRfbWlncmF0aW9uKHN0cnVjdHMpOwogCiAJbWctPmVyciA9IGZhbHNlOworCW1nLT5kaXNjYXJkID0gZmFsc2U7CiAJbWctPndyaXRlYmFjayA9IHRydWU7CiAJbWctPmRlbW90ZSA9IGZhbHNlOwogCW1nLT5wcm9tb3RlID0gZmFsc2U7CkBAIC0xMjA5LDYgKzEyODgsNyBAQAogCXN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nID0gcHJlYWxsb2NfZ2V0X21pZ3JhdGlvbihzdHJ1Y3RzKTsKIAogCW1nLT5lcnIgPSBmYWxzZTsKKwltZy0+ZGlzY2FyZCA9IGZhbHNlOwogCW1nLT53cml0ZWJhY2sgPSBmYWxzZTsKIAltZy0+ZGVtb3RlID0gdHJ1ZTsKIAltZy0+cHJvbW90ZSA9IHRydWU7CkBAIC0xMjM3LDYgKzEzMTcsNyBAQAogCXN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nID0gcHJlYWxsb2NfZ2V0X21pZ3JhdGlvbihzdHJ1Y3RzKTsKIAogCW1nLT5lcnIgPSBmYWxzZTsKKwltZy0+ZGlzY2FyZCA9IGZhbHNlOwogCW1nLT53cml0ZWJhY2sgPSBmYWxzZTsKIAltZy0+ZGVtb3RlID0gdHJ1ZTsKIAltZy0+cHJvbW90ZSA9IGZhbHNlOwpAQCAtMTI1Myw2ICsxMzM0LDI2IEBACiAJcXVpZXNjZV9taWdyYXRpb24obWcpOwogfQogCitzdGF0aWMgdm9pZCBkaXNjYXJkKHN0cnVjdCBjYWNoZSAqY2FjaGUsIHN0cnVjdCBwcmVhbGxvYyAqc3RydWN0cywKKwkJICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcgPSBwcmVhbGxvY19nZXRfbWlncmF0aW9uKHN0cnVjdHMpOworCisJbWctPmVyciA9IGZhbHNlOworCW1nLT5kaXNjYXJkID0gdHJ1ZTsKKwltZy0+d3JpdGViYWNrID0gZmFsc2U7CisJbWctPmRlbW90ZSA9IGZhbHNlOworCW1nLT5wcm9tb3RlID0gZmFsc2U7CisJbWctPnJlcXVldWVfaG9sZGVyID0gZmFsc2U7CisJbWctPmludmFsaWRhdGUgPSBmYWxzZTsKKwltZy0+Y2FjaGUgPSBjYWNoZTsKKwltZy0+b2xkX29jZWxsID0gTlVMTDsKKwltZy0+bmV3X29jZWxsID0gY2VsbDsKKwltZy0+c3RhcnRfamlmZmllcyA9IGppZmZpZXM7CisKKwlxdWllc2NlX21pZ3JhdGlvbihtZyk7Cit9CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogYmlvIHByb2Nlc3NpbmcKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTI4NiwzMSArMTM4NywyNyBAQAogCWlzc3VlKGNhY2hlLCBiaW8pOwogfQogCi0vKgotICogUGVvcGxlIGdlbmVyYWxseSBkaXNjYXJkIGxhcmdlIHBhcnRzIG9mIGEgZGV2aWNlLCBlZywgdGhlIHdob2xlIGRldmljZQotICogd2hlbiBmb3JtYXR0aW5nLiAgU3BsaXR0aW5nIHRoZXNlIGxhcmdlIGRpc2NhcmRzIHVwIGludG8gY2FjaGUgYmxvY2sKLSAqIHNpemVkIGlvcyBhbmQgdGhlbiBxdWllc2NpbmcgKGFsd2F5cyBuZWNjZXNzYXJ5IGZvciBkaXNjYXJkKSB0YWtlcyB0b28KLSAqIGxvbmcuCi0gKgotICogV2Uga2VlcCBpdCBzaW1wbGUsIGFuZCBhbGxvdyBhbnkgc2l6ZSBvZiBkaXNjYXJkIHRvIGNvbWUgaW4sIGFuZCBqdXN0Ci0gKiBtYXJrIG9mZiBibG9ja3Mgb24gdGhlIGRpc2NhcmQgYml0c2V0LiAgTm8gcGFzc2Rvd24gb2NjdXJzIQotICoKLSAqIFRvIGltcGxlbWVudCBwYXNzZG93biB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgYmlvX3ByaXNvbiBzdWNoIHRoYXQgYSBjZWxsCi0gKiBjYW4gaGF2ZSBhIGtleSB0aGF0IHNwYW5zIG1hbnkgYmxvY2tzLgotICovCi1zdGF0aWMgdm9pZCBwcm9jZXNzX2Rpc2NhcmRfYmlvKHN0cnVjdCBjYWNoZSAqY2FjaGUsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZGlzY2FyZF9iaW8oc3RydWN0IGNhY2hlICpjYWNoZSwgc3RydWN0IHByZWFsbG9jICpzdHJ1Y3RzLAorCQkJCXN0cnVjdCBiaW8gKmJpbykKIHsKLQlkbV9ibG9ja190IHN0YXJ0X2Jsb2NrID0gZG1fc2VjdG9yX2Rpdl91cChiaW8tPmJpX2l0ZXIuYmlfc2VjdG9yLAotCQkJCQkJICBjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2spOwotCWRtX2Jsb2NrX3QgZW5kX2Jsb2NrID0gYmlvX2VuZF9zZWN0b3IoYmlvKTsKLQlkbV9ibG9ja190IGI7CisJaW50IHI7CisJZG1fZGJsb2NrX3QgYiwgZTsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsX3ByZWFsbG9jLCAqbmV3X29jZWxsOwogCi0JZW5kX2Jsb2NrID0gYmxvY2tfZGl2KGVuZF9ibG9jaywgY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrKTsKKwljYWxjX2Rpc2NhcmRfYmxvY2tfcmFuZ2UoY2FjaGUsIGJpbywgJmIsICZlKTsKKwlpZiAoYiA9PSBlKSB7CisJCWJpb19lbmRpbyhiaW8sIDApOworCQlyZXR1cm47CisJfQogCi0JZm9yIChiID0gc3RhcnRfYmxvY2s7IGIgPCBlbmRfYmxvY2s7IGIrKykKLQkJc2V0X2Rpc2NhcmQoY2FjaGUsIHRvX29ibG9jayhiKSk7CisJY2VsbF9wcmVhbGxvYyA9IHByZWFsbG9jX2dldF9jZWxsKHN0cnVjdHMpOworCXIgPSBiaW9fZGV0YWluX3JhbmdlKGNhY2hlLCBkYmxvY2tfdG9fb2Jsb2NrKGNhY2hlLCBiKSwgZGJsb2NrX3RvX29ibG9jayhjYWNoZSwgZSksIGJpbywgY2VsbF9wcmVhbGxvYywKKwkJCSAgICAgKGNlbGxfZnJlZV9mbikgcHJlYWxsb2NfcHV0X2NlbGwsCisJCQkgICAgIHN0cnVjdHMsICZuZXdfb2NlbGwpOworCWlmIChyID4gMCkKKwkJcmV0dXJuOwogCi0JYmlvX2VuZGlvKGJpbywgMCk7CisJZGlzY2FyZChjYWNoZSwgc3RydWN0cywgbmV3X29jZWxsKTsKIH0KIAogc3RhdGljIGJvb2wgc3BhcmVfbWlncmF0aW9uX2JhbmR3aWR0aChzdHJ1Y3QgY2FjaGUgKmNhY2hlKQpAQCAtMTM0MCw5ICsxNDM3LDggQEAKIAlkbV9vYmxvY2tfdCBibG9jayA9IGdldF9iaW9fYmxvY2soY2FjaGUsIGJpbyk7CiAJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbF9wcmVhbGxvYywgKm9sZF9vY2VsbCwgKm5ld19vY2VsbDsKIAlzdHJ1Y3QgcG9saWN5X3Jlc3VsdCBsb29rdXBfcmVzdWx0OwotCWJvb2wgZGlzY2FyZGVkX2Jsb2NrID0gaXNfZGlzY2FyZGVkX29ibG9jayhjYWNoZSwgYmxvY2spOwogCWJvb2wgcGFzc3Rocm91Z2ggPSBwYXNzdGhyb3VnaF9tb2RlKCZjYWNoZS0+ZmVhdHVyZXMpOwotCWJvb2wgY2FuX21pZ3JhdGUgPSAhcGFzc3Rocm91Z2ggJiYgKGRpc2NhcmRlZF9ibG9jayB8fCBzcGFyZV9taWdyYXRpb25fYmFuZHdpZHRoKGNhY2hlKSk7CisJYm9vbCBkaXNjYXJkZWRfYmxvY2ssIGNhbl9taWdyYXRlOwogCiAJLyoKIAkgKiBDaGVjayB0byBzZWUgaWYgdGhhdCBibG9jayBpcyBjdXJyZW50bHkgbWlncmF0aW5nLgpAQCAtMTM1NCw2ICsxNDUwLDkgQEAKIAlpZiAociA+IDApCiAJCXJldHVybjsKIAorCWRpc2NhcmRlZF9ibG9jayA9IGlzX2Rpc2NhcmRlZF9vYmxvY2soY2FjaGUsIGJsb2NrKTsKKwljYW5fbWlncmF0ZSA9ICFwYXNzdGhyb3VnaCAmJiAoZGlzY2FyZGVkX2Jsb2NrIHx8IHNwYXJlX21pZ3JhdGlvbl9iYW5kd2lkdGgoY2FjaGUpKTsKKwogCXIgPSBwb2xpY3lfbWFwKGNhY2hlLT5wb2xpY3ksIGJsb2NrLCB0cnVlLCBjYW5fbWlncmF0ZSwgZGlzY2FyZGVkX2Jsb2NrLAogCQkgICAgICAgYmlvLCAmbG9va3VwX3Jlc3VsdCk7CiAKQEAgLTE1MDAsNyArMTU5OSw3IEBACiAJCWlmIChiaW8tPmJpX3J3ICYgUkVRX0ZMVVNIKQogCQkJcHJvY2Vzc19mbHVzaF9iaW8oY2FjaGUsIGJpbyk7CiAJCWVsc2UgaWYgKGJpby0+YmlfcncgJiBSRVFfRElTQ0FSRCkKLQkJCXByb2Nlc3NfZGlzY2FyZF9iaW8oY2FjaGUsIGJpbyk7CisJCQlwcm9jZXNzX2Rpc2NhcmRfYmlvKGNhY2hlLCAmc3RydWN0cywgYmlvKTsKIAkJZWxzZQogCQkJcHJvY2Vzc19iaW8oY2FjaGUsICZzdHJ1Y3RzLCBiaW8pOwogCX0KQEAgLTE3MTUsNyArMTgxNCw3IEBACiAJCQlwcm9jZXNzX2ludmFsaWRhdGlvbl9yZXF1ZXN0cyhjYWNoZSk7CiAJCX0KIAotCQlwcm9jZXNzX21pZ3JhdGlvbnMoY2FjaGUsICZjYWNoZS0+cXVpZXNjZWRfbWlncmF0aW9ucywgaXNzdWVfY29weSk7CisJCXByb2Nlc3NfbWlncmF0aW9ucyhjYWNoZSwgJmNhY2hlLT5xdWllc2NlZF9taWdyYXRpb25zLCBpc3N1ZV9jb3B5X29yX2Rpc2NhcmQpOwogCQlwcm9jZXNzX21pZ3JhdGlvbnMoY2FjaGUsICZjYWNoZS0+Y29tcGxldGVkX21pZ3JhdGlvbnMsIGNvbXBsZXRlX21pZ3JhdGlvbik7CiAKIAkJaWYgKGNvbW1pdF9pZl9uZWVkZWQoY2FjaGUpKSB7CkBAIC0yMTgwLDYgKzIyNzksNDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFdlIHdhbnQgdGhlIGRpc2NhcmQgYmxvY2sgc2l6ZSB0byBiZSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUKKyAqIGJsb2NrIHNpemUgYW5kIGhhdmUgbm8gbW9yZSB0aGFuIDJeMTQgZGlzY2FyZCBibG9ja3MgYWNyb3NzIHRoZSBvcmlnaW4uCisgKi8KKyNkZWZpbmUgTUFYX0RJU0NBUkRfQkxPQ0tTICgxIDw8IDE0KQorCitzdGF0aWMgYm9vbCB0b29fbWFueV9kaXNjYXJkX2Jsb2NrcyhzZWN0b3JfdCBkaXNjYXJkX2Jsb2NrX3NpemUsCisJCQkJICAgIHNlY3Rvcl90IG9yaWdpbl9zaXplKQoreworCSh2b2lkKSBzZWN0b3JfZGl2KG9yaWdpbl9zaXplLCBkaXNjYXJkX2Jsb2NrX3NpemUpOworCisJcmV0dXJuIG9yaWdpbl9zaXplID4gTUFYX0RJU0NBUkRfQkxPQ0tTOworfQorCitzdGF0aWMgc2VjdG9yX3QgY2FsY3VsYXRlX2Rpc2NhcmRfYmxvY2tfc2l6ZShzZWN0b3JfdCBjYWNoZV9ibG9ja19zaXplLAorCQkJCQkgICAgIHNlY3Rvcl90IG9yaWdpbl9zaXplKQoreworCXNlY3Rvcl90IGRpc2NhcmRfYmxvY2tfc2l6ZSA9IGNhY2hlX2Jsb2NrX3NpemU7CisKKwlpZiAob3JpZ2luX3NpemUpCisJCXdoaWxlICh0b29fbWFueV9kaXNjYXJkX2Jsb2NrcyhkaXNjYXJkX2Jsb2NrX3NpemUsIG9yaWdpbl9zaXplKSkKKwkJCWRpc2NhcmRfYmxvY2tfc2l6ZSAqPSAyOworCisJcmV0dXJuIGRpc2NhcmRfYmxvY2tfc2l6ZTsKK30KKworc3RhdGljIHZvaWQgc2V0X2NhY2hlX3NpemUoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fY2Jsb2NrX3Qgc2l6ZSkKK3sKKwlkbV9ibG9ja190IG5yX2Jsb2NrcyA9IGZyb21fY2Jsb2NrKHNpemUpOworCisJaWYgKG5yX2Jsb2NrcyA+ICgxIDw8IDIwKSAmJiBjYWNoZS0+Y2FjaGVfc2l6ZSAhPSBzaXplKQorCQlETVdBUk5fTElNSVQoIllvdSBoYXZlIGNyZWF0ZWQgYSBjYWNoZSBkZXZpY2Ugd2l0aCBhIGxvdCBvZiBpbmRpdmlkdWFsIGNhY2hlIGJsb2NrcyAoJWxsdSlcbiIKKwkJCSAgICAgIkFsbCB0aGVzZSBtYXBwaW5ncyBjYW4gY29uc3VtZSBhIGxvdCBvZiBrZXJuZWwgbWVtb3J5LCBhbmQgdGFrZSBzb21lIHRpbWUgdG8gcmVhZC93cml0ZS5cbiIKKwkJCSAgICAgIlBsZWFzZSBjb25zaWRlciBpbmNyZWFzaW5nIHRoZSBjYWNoZSBibG9jayBzaXplIHRvIHJlZHVjZSB0aGUgb3ZlcmFsbCBjYWNoZSBibG9jayBjb3VudC4iLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBucl9ibG9ja3MpOworCisJY2FjaGUtPmNhY2hlX3NpemUgPSBzaXplOworfQorCiAjZGVmaW5lIERFRkFVTFRfTUlHUkFUSU9OX1RIUkVTSE9MRCAyMDQ4CiAKIHN0YXRpYyBpbnQgY2FjaGVfY3JlYXRlKHN0cnVjdCBjYWNoZV9hcmdzICpjYSwgc3RydWN0IGNhY2hlICoqcmVzdWx0KQpAQCAtMjIwNCw4ICsyMzQyLDcgQEAKIAl0aS0+bnVtX2Rpc2NhcmRfYmlvcyA9IDE7CiAJdGktPmRpc2NhcmRzX3N1cHBvcnRlZCA9IHRydWU7CiAJdGktPmRpc2NhcmRfemVyb2VzX2RhdGFfdW5zdXBwb3J0ZWQgPSB0cnVlOwotCS8qIERpc2NhcmQgYmlvcyBtdXN0IGJlIHNwbGl0IG9uIGEgYmxvY2sgYm91bmRhcnkgKi8KLQl0aS0+c3BsaXRfZGlzY2FyZF9iaW9zID0gdHJ1ZTsKKwl0aS0+c3BsaXRfZGlzY2FyZF9iaW9zID0gZmFsc2U7CiAKIAljYWNoZS0+ZmVhdHVyZXMgPSBjYS0+ZmVhdHVyZXM7CiAJdGktPnBlcl9iaW9fZGF0YV9zaXplID0gZ2V0X3Blcl9iaW9fZGF0YV9zaXplKGNhY2hlKTsKQEAgLTIyMzUsMTAgKzIzNzIsMTAgQEAKIAogCQljYWNoZS0+c2VjdG9yc19wZXJfYmxvY2tfc2hpZnQgPSAtMTsKIAkJY2FjaGVfc2l6ZSA9IGJsb2NrX2RpdihjYWNoZV9zaXplLCBjYS0+YmxvY2tfc2l6ZSk7Ci0JCWNhY2hlLT5jYWNoZV9zaXplID0gdG9fY2Jsb2NrKGNhY2hlX3NpemUpOworCQlzZXRfY2FjaGVfc2l6ZShjYWNoZSwgdG9fY2Jsb2NrKGNhY2hlX3NpemUpKTsKIAl9IGVsc2UgewogCQljYWNoZS0+c2VjdG9yc19wZXJfYmxvY2tfc2hpZnQgPSBfX2ZmcyhjYS0+YmxvY2tfc2l6ZSk7Ci0JCWNhY2hlLT5jYWNoZV9zaXplID0gdG9fY2Jsb2NrKGNhLT5jYWNoZV9zZWN0b3JzID4+IGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9ja19zaGlmdCk7CisJCXNldF9jYWNoZV9zaXplKGNhY2hlLCB0b19jYmxvY2soY2EtPmNhY2hlX3NlY3RvcnMgPj4gY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrX3NoaWZ0KSk7CiAJfQogCiAJciA9IGNyZWF0ZV9jYWNoZV9wb2xpY3koY2FjaGUsIGNhLCBlcnJvcik7CkBAIC0yMzAzLDEzICsyNDQwLDE3IEBACiAJfQogCWNsZWFyX2JpdHNldChjYWNoZS0+ZGlydHlfYml0c2V0LCBmcm9tX2NibG9jayhjYWNoZS0+Y2FjaGVfc2l6ZSkpOwogCi0JY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzID0gY2FjaGUtPm9yaWdpbl9ibG9ja3M7Ci0JY2FjaGUtPmRpc2NhcmRfYml0c2V0ID0gYWxsb2NfYml0c2V0KGZyb21fb2Jsb2NrKGNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcykpOworCWNhY2hlLT5kaXNjYXJkX2Jsb2NrX3NpemUgPQorCQljYWxjdWxhdGVfZGlzY2FyZF9ibG9ja19zaXplKGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jaywKKwkJCQkJICAgICBjYWNoZS0+b3JpZ2luX3NlY3RvcnMpOworCWNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcyA9IHRvX2RibG9jayhkbV9zZWN0b3JfZGl2X3VwKGNhY2hlLT5vcmlnaW5fc2VjdG9ycywKKwkJCQkJCQkgICAgICBjYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplKSk7CisJY2FjaGUtPmRpc2NhcmRfYml0c2V0ID0gYWxsb2NfYml0c2V0KGZyb21fZGJsb2NrKGNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcykpOwogCWlmICghY2FjaGUtPmRpc2NhcmRfYml0c2V0KSB7CiAJCSplcnJvciA9ICJjb3VsZCBub3QgYWxsb2NhdGUgZGlzY2FyZCBiaXRzZXQiOwogCQlnb3RvIGJhZDsKIAl9Ci0JY2xlYXJfYml0c2V0KGNhY2hlLT5kaXNjYXJkX2JpdHNldCwgZnJvbV9vYmxvY2soY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CisJY2xlYXJfYml0c2V0KGNhY2hlLT5kaXNjYXJkX2JpdHNldCwgZnJvbV9kYmxvY2soY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CiAKIAljYWNoZS0+Y29waWVyID0gZG1fa2NvcHlkX2NsaWVudF9jcmVhdGUoJmRtX2tjb3B5ZF90aHJvdHRsZSk7CiAJaWYgKElTX0VSUihjYWNoZS0+Y29waWVyKSkgewpAQCAtMjMyNyw3ICsyNDY4LDcgQEAKIAlJTklUX0RFTEFZRURfV09SSygmY2FjaGUtPndha2VyLCBkb193YWtlcik7CiAJY2FjaGUtPmxhc3RfY29tbWl0X2ppZmZpZXMgPSBqaWZmaWVzOwogCi0JY2FjaGUtPnByaXNvbiA9IGRtX2Jpb19wcmlzb25fY3JlYXRlKFBSSVNPTl9DRUxMUyk7CisJY2FjaGUtPnByaXNvbiA9IGRtX2Jpb19wcmlzb25fY3JlYXRlKCk7CiAJaWYgKCFjYWNoZS0+cHJpc29uKSB7CiAJCSplcnJvciA9ICJjb3VsZCBub3QgY3JlYXRlIGJpbyBwcmlzb24iOwogCQlnb3RvIGJhZDsKQEAgLTI1NDksMTEgKzI2OTAsMTEgQEAKIHN0YXRpYyBpbnQgY2FjaGVfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJaW50IHI7Ci0Jc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsID0gTlVMTDsKIAlzdHJ1Y3QgY2FjaGUgKmNhY2hlID0gdGktPnByaXZhdGU7CiAKIAlyID0gX19jYWNoZV9tYXAoY2FjaGUsIGJpbywgJmNlbGwpOwotCWlmIChyID09IERNX01BUElPX1JFTUFQUEVEKSB7CisJaWYgKHIgPT0gRE1fTUFQSU9fUkVNQVBQRUQgJiYgY2VsbCkgewogCQlpbmNfZHMoY2FjaGUsIGJpbywgY2VsbCk7CiAJCWNlbGxfZGVmZXIoY2FjaGUsIGNlbGwsIGZhbHNlKTsKIAl9CkBAIC0yNTk5LDE2ICsyNzQwLDE2IEBACiB7CiAJdW5zaWduZWQgaSwgcjsKIAotCXIgPSBkbV9jYWNoZV9kaXNjYXJkX2JpdHNldF9yZXNpemUoY2FjaGUtPmNtZCwgY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrLAotCQkJCQkgICBjYWNoZS0+b3JpZ2luX2Jsb2Nrcyk7CisJciA9IGRtX2NhY2hlX2Rpc2NhcmRfYml0c2V0X3Jlc2l6ZShjYWNoZS0+Y21kLCBjYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplLAorCQkJCQkgICBjYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpOwogCWlmIChyKSB7CiAJCURNRVJSKCJjb3VsZCBub3QgcmVzaXplIG9uLWRpc2sgZGlzY2FyZCBiaXRzZXQiKTsKIAkJcmV0dXJuIHI7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGZyb21fb2Jsb2NrKGNhY2hlLT5kaXNjYXJkX25yX2Jsb2Nrcyk7IGkrKykgewotCQlyID0gZG1fY2FjaGVfc2V0X2Rpc2NhcmQoY2FjaGUtPmNtZCwgdG9fb2Jsb2NrKGkpLAotCQkJCQkgaXNfZGlzY2FyZGVkKGNhY2hlLCB0b19vYmxvY2soaSkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZnJvbV9kYmxvY2soY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKTsgaSsrKSB7CisJCXIgPSBkbV9jYWNoZV9zZXRfZGlzY2FyZChjYWNoZS0+Y21kLCB0b19kYmxvY2soaSksCisJCQkJCSBpc19kaXNjYXJkZWQoY2FjaGUsIHRvX2RibG9jayhpKSkpOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCX0KQEAgLTI2ODAsMTUgKzI4MjEsODYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsb2FkX2Rpc2NhcmQodm9pZCAqY29udGV4dCwgc2VjdG9yX3QgZGlzY2FyZF9ibG9ja19zaXplLAotCQkJZG1fb2Jsb2NrX3Qgb2Jsb2NrLCBib29sIGRpc2NhcmQpCi17Ci0Jc3RydWN0IGNhY2hlICpjYWNoZSA9IGNvbnRleHQ7CisvKgorICogVGhlIGRpc2NhcmQgYmxvY2sgc2l6ZSBpbiB0aGUgb24gZGlzayBtZXRhZGF0YSBpcyBub3QKKyAqIG5lY2Nlc3NhcmlseSB0aGUgc2FtZSBhcyB3ZSdyZSBjdXJyZW50bHkgdXNpbmcuICBTbyB3ZSBoYXZlIHRvCisgKiBiZSBjYXJlZnVsIHRvIG9ubHkgc2V0IHRoZSBkaXNjYXJkZWQgYXR0cmlidXRlIGlmIHdlIGtub3cgaXQKKyAqIGNvdmVycyBhIGNvbXBsZXRlIGJsb2NrIG9mIHRoZSBuZXcgc2l6ZS4KKyAqLworc3RydWN0IGRpc2NhcmRfbG9hZF9pbmZvIHsKKwlzdHJ1Y3QgY2FjaGUgKmNhY2hlOwogCi0JaWYgKGRpc2NhcmQpCi0JCXNldF9kaXNjYXJkKGNhY2hlLCBvYmxvY2spOwotCWVsc2UKLQkJY2xlYXJfZGlzY2FyZChjYWNoZSwgb2Jsb2NrKTsKKwkvKgorCSAqIFRoZXNlIGJsb2NrcyBhcmUgc2l6ZWQgdXNpbmcgdGhlIG9uIGRpc2sgZGJsb2NrIHNpemUsIHJhdGhlcgorCSAqIHRoYW4gdGhlIGN1cnJlbnQgb25lLgorCSAqLworCWRtX2Jsb2NrX3QgYmxvY2tfc2l6ZTsKKwlkbV9ibG9ja190IGRpc2NhcmRfYmVnaW4sIGRpc2NhcmRfZW5kOworfTsKKworc3RhdGljIHZvaWQgZGlzY2FyZF9sb2FkX2luZm9faW5pdChzdHJ1Y3QgY2FjaGUgKmNhY2hlLAorCQkJCSAgIHN0cnVjdCBkaXNjYXJkX2xvYWRfaW5mbyAqbGkpCit7CisJbGktPmNhY2hlID0gY2FjaGU7CisJbGktPmRpc2NhcmRfYmVnaW4gPSBsaS0+ZGlzY2FyZF9lbmQgPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGlzY2FyZF9yYW5nZShzdHJ1Y3QgZGlzY2FyZF9sb2FkX2luZm8gKmxpKQoreworCXNlY3Rvcl90IGIsIGU7CisKKwlpZiAobGktPmRpc2NhcmRfYmVnaW4gPT0gbGktPmRpc2NhcmRfZW5kKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENvbnZlcnQgdG8gc2VjdG9ycy4KKwkgKi8KKwliID0gbGktPmRpc2NhcmRfYmVnaW4gKiBsaS0+YmxvY2tfc2l6ZTsKKwllID0gbGktPmRpc2NhcmRfZW5kICogbGktPmJsb2NrX3NpemU7CisKKwkvKgorCSAqIFRoZW4gY29udmVydCBiYWNrIHRvIHRoZSBjdXJyZW50IGRibG9jayBzaXplLgorCSAqLworCWIgPSBkbV9zZWN0b3JfZGl2X3VwKGIsIGxpLT5jYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplKTsKKwlzZWN0b3JfZGl2KGUsIGxpLT5jYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplKTsKKworCS8qCisJICogVGhlIG9yaWdpbiBtYXkgaGF2ZSBzaHJ1bmssIHNvIHdlIG5lZWQgdG8gY2hlY2sgd2UncmUgc3RpbGwgaW4KKwkgKiBib3VuZHMuCisJICovCisJaWYgKGUgPiBmcm9tX2RibG9jayhsaS0+Y2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKSkKKwkJZSA9IGZyb21fZGJsb2NrKGxpLT5jYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpOworCisJZm9yICg7IGIgPCBlOyBiKyspCisJCXNldF9kaXNjYXJkKGxpLT5jYWNoZSwgdG9fZGJsb2NrKGIpKTsKK30KKworc3RhdGljIGludCBsb2FkX2Rpc2NhcmQodm9pZCAqY29udGV4dCwgc2VjdG9yX3QgZGlzY2FyZF9ibG9ja19zaXplLAorCQkJZG1fZGJsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmQpCit7CisJc3RydWN0IGRpc2NhcmRfbG9hZF9pbmZvICpsaSA9IGNvbnRleHQ7CisKKwlsaS0+YmxvY2tfc2l6ZSA9IGRpc2NhcmRfYmxvY2tfc2l6ZTsKKworCWlmIChkaXNjYXJkKSB7CisJCWlmIChmcm9tX2RibG9jayhkYmxvY2spID09IGxpLT5kaXNjYXJkX2VuZCkKKwkJCS8qCisJCQkgKiBXZSdyZSBhbHJlYWR5IGluIGEgZGlzY2FyZCByYW5nZSwganVzdCBleHRlbmQgaXQuCisJCQkgKi8KKwkJCWxpLT5kaXNjYXJkX2VuZCA9IGxpLT5kaXNjYXJkX2VuZCArIDFVTEw7CisKKwkJZWxzZSB7CisJCQkvKgorCQkJICogRW1pdCB0aGUgb2xkIHJhbmdlIGFuZCBzdGFydCBhIG5ldyBvbmUuCisJCQkgKi8KKwkJCXNldF9kaXNjYXJkX3JhbmdlKGxpKTsKKwkJCWxpLT5kaXNjYXJkX2JlZ2luID0gZnJvbV9kYmxvY2soZGJsb2NrKTsKKwkJCWxpLT5kaXNjYXJkX2VuZCA9IGxpLT5kaXNjYXJkX2JlZ2luICsgMVVMTDsKKwkJfQorCX0gZWxzZSB7CisJCXNldF9kaXNjYXJkX3JhbmdlKGxpKTsKKwkJbGktPmRpc2NhcmRfYmVnaW4gPSBsaS0+ZGlzY2FyZF9lbmQgPSAwOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjczMCw3ICsyOTQyLDcgQEAKIAkJcmV0dXJuIHI7CiAJfQogCi0JY2FjaGUtPmNhY2hlX3NpemUgPSBuZXdfc2l6ZTsKKwlzZXRfY2FjaGVfc2l6ZShjYWNoZSwgbmV3X3NpemUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzcyLDExICsyOTg0LDIyIEBACiAJfQogCiAJaWYgKCFjYWNoZS0+bG9hZGVkX2Rpc2NhcmRzKSB7Ci0JCXIgPSBkbV9jYWNoZV9sb2FkX2Rpc2NhcmRzKGNhY2hlLT5jbWQsIGxvYWRfZGlzY2FyZCwgY2FjaGUpOworCQlzdHJ1Y3QgZGlzY2FyZF9sb2FkX2luZm8gbGk7CisKKwkJLyoKKwkJICogVGhlIGRpc2NhcmQgYml0c2V0IGNvdWxkIGhhdmUgYmVlbiByZXNpemVkLCBvciB0aGUKKwkJICogZGlzY2FyZCBibG9jayBzaXplIGNoYW5nZWQuICBUbyBiZSBzYWZlIHdlIHN0YXJ0IGJ5CisJCSAqIHNldHRpbmcgZXZlcnkgZGJsb2NrIHRvIG5vdCBkaXNjYXJkZWQuCisJCSAqLworCQljbGVhcl9iaXRzZXQoY2FjaGUtPmRpc2NhcmRfYml0c2V0LCBmcm9tX2RibG9jayhjYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpKTsKKworCQlkaXNjYXJkX2xvYWRfaW5mb19pbml0KGNhY2hlLCAmbGkpOworCQlyID0gZG1fY2FjaGVfbG9hZF9kaXNjYXJkcyhjYWNoZS0+Y21kLCBsb2FkX2Rpc2NhcmQsICZsaSk7CiAJCWlmIChyKSB7CiAJCQlETUVSUigiY291bGQgbm90IGxvYWQgb3JpZ2luIGRpc2NhcmRzIik7CiAJCQlyZXR1cm4gcjsKIAkJfQorCQlzZXRfZGlzY2FyZF9yYW5nZSgmbGkpOwogCiAJCWNhY2hlLT5sb2FkZWRfZGlzY2FyZHMgPSB0cnVlOwogCX0KQEAgLTMwNzksOCArMzMwMiw5IEBACiAJLyoKIAkgKiBGSVhNRTogdGhlc2UgbGltaXRzIG1heSBiZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgY2FjaGUgZGV2aWNlCiAJICovCi0JbGltaXRzLT5tYXhfZGlzY2FyZF9zZWN0b3JzID0gY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrOwotCWxpbWl0cy0+ZGlzY2FyZF9ncmFudWxhcml0eSA9IGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jayA8PCBTRUNUT1JfU0hJRlQ7CisJbGltaXRzLT5tYXhfZGlzY2FyZF9zZWN0b3JzID0gbWluX3Qoc2VjdG9yX3QsIGNhY2hlLT5kaXNjYXJkX2Jsb2NrX3NpemUgKiAxMDI0LAorCQkJCQkgICAgY2FjaGUtPm9yaWdpbl9zZWN0b3JzKTsKKwlsaW1pdHMtPmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSBjYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplIDw8IFNFQ1RPUl9TSElGVDsKIH0KIAogc3RhdGljIHZvaWQgY2FjaGVfaW9faGludHMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cykKQEAgLTMxMDQsNyArMzMyOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X3R5cGUgY2FjaGVfdGFyZ2V0ID0gewogCS5uYW1lID0gImNhY2hlIiwKLQkudmVyc2lvbiA9IHsxLCA1LCAwfSwKKwkudmVyc2lvbiA9IHsxLCA2LCAwfSwKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmN0ciA9IGNhY2hlX2N0ciwKIAkuZHRyID0gY2FjaGVfZHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCmluZGV4IGZjOTNiOTMuLjA4OTgxYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYworKysgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKQEAgLTcwNSw3ICs3MDUsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAoKDEgPDwgU0VDVE9SX1NISUZUKSAvIDgpOyBpKyspCiAJCWNyeXB0b194b3IoZGF0YSArIGkgKiA4LCBidWYsIDgpOwogb3V0OgotCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwltZW16ZXJvX2V4cGxpY2l0KGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKaW5kZXggMGJlOTM4MS4uNzNmNzkxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwpAQCAtNjg0LDExICs2ODQsMTQgQEAKIAlpbnQgc3JjdV9pZHg7CiAKIAlwYXJhbS0+ZmxhZ3MgJj0gfihETV9TVVNQRU5EX0ZMQUcgfCBETV9SRUFET05MWV9GTEFHIHwKLQkJCSAgRE1fQUNUSVZFX1BSRVNFTlRfRkxBRyk7CisJCQkgIERNX0FDVElWRV9QUkVTRU5UX0ZMQUcgfCBETV9JTlRFUk5BTF9TVVNQRU5EX0ZMQUcpOwogCiAJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpCiAJCXBhcmFtLT5mbGFncyB8PSBETV9TVVNQRU5EX0ZMQUc7CiAKKwlpZiAoZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQobWQpKQorCQlwYXJhbS0+ZmxhZ3MgfD0gRE1fSU5URVJOQUxfU1VTUEVORF9GTEFHOworCiAJaWYgKGRtX3Rlc3RfZGVmZXJyZWRfcmVtb3ZlX2ZsYWcobWQpKQogCQlwYXJhbS0+ZmxhZ3MgfD0gRE1fREVGRVJSRURfUkVNT1ZFOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXJhaWQuYyBiL2RyaXZlcnMvbWQvZG0tcmFpZC5jCmluZGV4IDQ4NTdmYTQuLjA3YzBmYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcmFpZC5jCkBAIC03ODksOCArNzg5LDcgQEAKIAlfX2xlMzIgbGF5b3V0OwogCV9fbGUzMiBzdHJpcGVfc2VjdG9yczsKIAotCV9fdTggcGFkWzQ1Ml07CQkvKiBSb3VuZCBzdHJ1Y3QgdG8gNTEyIGJ5dGVzLiAqLwotCQkJCS8qIEFsd2F5cyBzZXQgdG8gMCB3aGVuIHdyaXRpbmcuICovCisJLyogUmVtYWluZGVyIG9mIGEgbG9naWNhbCBibG9jayBpcyB6ZXJvLWZpbGxlZCB3aGVuIHdyaXRpbmcgKHNlZSBzdXBlcl9zeW5jKCkpLiAqLwogfSBfX3BhY2tlZDsKIAogc3RhdGljIGludCByZWFkX2Rpc2tfc2Ioc3RydWN0IG1kX3JkZXYgKnJkZXYsIGludCBzaXplKQpAQCAtODI3LDcgKzgyNiw3IEBACiAJCSAgICB0ZXN0X2JpdChGYXVsdHksICYocnMtPmRldltpXS5yZGV2LmZsYWdzKSkpCiAJCQlmYWlsZWRfZGV2aWNlcyB8PSAoMVVMTCA8PCBpKTsKIAotCW1lbXNldChzYiwgMCwgc2l6ZW9mKCpzYikpOworCW1lbXNldChzYiArIDEsIDAsIHJkZXYtPnNiX3NpemUgLSBzaXplb2YoKnNiKSk7CiAKIAlzYi0+bWFnaWMgPSBjcHVfdG9fbGUzMihETV9SQUlEX01BR0lDKTsKIAlzYi0+ZmVhdHVyZXMgPSBjcHVfdG9fbGUzMigwKTsJLyogTm8gZmVhdHVyZXMgeWV0ICovCkBAIC04NjIsNyArODYxLDExIEBACiAJdWludDY0X3QgZXZlbnRzX3NiLCBldmVudHNfcmVmc2I7CiAKIAlyZGV2LT5zYl9zdGFydCA9IDA7Ci0JcmRldi0+c2Jfc2l6ZSA9IHNpemVvZigqc2IpOworCXJkZXYtPnNiX3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShyZGV2LT5tZXRhX2JkZXYpOworCWlmIChyZGV2LT5zYl9zaXplIDwgc2l6ZW9mKCpzYikgfHwgcmRldi0+c2Jfc2l6ZSA+IFBBR0VfU0laRSkgeworCQlETUVSUigic3VwZXJibG9jayBzaXplIG9mIGEgbG9naWNhbCBibG9jayBpcyBubyBsb25nZXIgdmFsaWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJcmV0ID0gcmVhZF9kaXNrX3NiKHJkZXYsIHJkZXYtPnNiX3NpemUpOwogCWlmIChyZXQpCkBAIC0xMTY5LDggKzExNzIsMTIgQEAKIAlyYWlkNDU2ID0gKHJzLT5tZC5sZXZlbCA9PSA0IHx8IHJzLT5tZC5sZXZlbCA9PSA1IHx8IHJzLT5tZC5sZXZlbCA9PSA2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBycy0+bWQucmFpZF9kaXNrczsgaSsrKSB7Ci0JCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUocnMtPmRldltpXS5yZGV2LmJkZXYpOworCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKIAorCQlpZiAoIXJzLT5kZXZbaV0ucmRldi5iZGV2KQorCQkJY29udGludWU7CisKKwkJcSA9IGJkZXZfZ2V0X3F1ZXVlKHJzLT5kZXZbaV0ucmRldi5iZGV2KTsKIAkJaWYgKCFxIHx8ICFibGtfcXVldWVfZGlzY2FyZChxKSkKIAkJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zdGF0cy5jIGIvZHJpdmVycy9tZC9kbS1zdGF0cy5jCmluZGV4IDg3Zjg2YzcuLmY0NzhhNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc3RhdHMuYworKysgYi9kcml2ZXJzL21kL2RtLXN0YXRzLmMKQEAgLTgyNCw3ICs4MjQsNyBAQAogCQlyZXR1cm4gMTsKIAogCWlkID0gZG1fc3RhdHNfY3JlYXRlKGRtX2dldF9zdGF0cyhtZCksIHN0YXJ0LCBlbmQsIHN0ZXAsIHByb2dyYW1faWQsIGF1eF9kYXRhLAotCQkJICAgICBkbV9pbnRlcm5hbF9zdXNwZW5kLCBkbV9pbnRlcm5hbF9yZXN1bWUsIG1kKTsKKwkJCSAgICAgZG1faW50ZXJuYWxfc3VzcGVuZF9mYXN0LCBkbV9pbnRlcm5hbF9yZXN1bWVfZmFzdCwgbWQpOwogCWlmIChpZCA8IDApCiAJCXJldHVybiBpZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYyBiL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKaW5kZXggZDE2MDBkMi4uZjhiMzdkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYworKysgYi9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCkBAIC0xNTksOCArMTU5LDEwIEBACiAJCXNjLT5zdHJpcGVzX3NoaWZ0ID0gX19mZnMoc3RyaXBlcyk7CiAKIAlyID0gZG1fc2V0X3RhcmdldF9tYXhfaW9fbGVuKHRpLCBjaHVua19zaXplKTsKLQlpZiAocikKKwlpZiAocikgeworCQlrZnJlZShzYyk7CiAJCXJldHVybiByOworCX0KIAogCXRpLT5udW1fZmx1c2hfYmlvcyA9IHN0cmlwZXM7CiAJdGktPm51bV9kaXNjYXJkX2Jpb3MgPSBzdHJpcGVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10YWJsZS5jIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCmluZGV4IGIyYmQxZWIuLjNhZmFlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYworKysgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKQEAgLTE1MjEsMTggKzE1MjEsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1fdGFibGVfZ2V0X21vZGUpOwogCi1zdGF0aWMgdm9pZCBzdXNwZW5kX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0LCB1bnNpZ25lZCBwb3N0c3VzcGVuZCkKK2VudW0gc3VzcGVuZF9tb2RlIHsKKwlQUkVTVVNQRU5ELAorCVBSRVNVU1BFTkRfVU5ETywKKwlQT1NUU1VTUEVORCwKK307CisKK3N0YXRpYyB2b2lkIHN1c3BlbmRfdGFyZ2V0cyhzdHJ1Y3QgZG1fdGFibGUgKnQsIGVudW0gc3VzcGVuZF9tb2RlIG1vZGUpCiB7CiAJaW50IGkgPSB0LT5udW1fdGFyZ2V0czsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSA9IHQtPnRhcmdldHM7CiAKIAl3aGlsZSAoaS0tKSB7Ci0JCWlmIChwb3N0c3VzcGVuZCkgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBQUkVTVVNQRU5EOgorCQkJaWYgKHRpLT50eXBlLT5wcmVzdXNwZW5kKQorCQkJCXRpLT50eXBlLT5wcmVzdXNwZW5kKHRpKTsKKwkJCWJyZWFrOworCQljYXNlIFBSRVNVU1BFTkRfVU5ETzoKKwkJCWlmICh0aS0+dHlwZS0+cHJlc3VzcGVuZF91bmRvKQorCQkJCXRpLT50eXBlLT5wcmVzdXNwZW5kX3VuZG8odGkpOworCQkJYnJlYWs7CisJCWNhc2UgUE9TVFNVU1BFTkQ6CiAJCQlpZiAodGktPnR5cGUtPnBvc3RzdXNwZW5kKQogCQkJCXRpLT50eXBlLT5wb3N0c3VzcGVuZCh0aSk7Ci0JCX0gZWxzZSBpZiAodGktPnR5cGUtPnByZXN1c3BlbmQpCi0JCQl0aS0+dHlwZS0+cHJlc3VzcGVuZCh0aSk7Ci0KKwkJCWJyZWFrOworCQl9CiAJCXRpKys7CiAJfQogfQpAQCAtMTU0Miw3ICsxNTU2LDE1IEBACiAJaWYgKCF0KQogCQlyZXR1cm47CiAKLQlzdXNwZW5kX3RhcmdldHModCwgMCk7CisJc3VzcGVuZF90YXJnZXRzKHQsIFBSRVNVU1BFTkQpOworfQorCit2b2lkIGRtX3RhYmxlX3ByZXN1c3BlbmRfdW5kb190YXJnZXRzKHN0cnVjdCBkbV90YWJsZSAqdCkKK3sKKwlpZiAoIXQpCisJCXJldHVybjsKKworCXN1c3BlbmRfdGFyZ2V0cyh0LCBQUkVTVVNQRU5EX1VORE8pOwogfQogCiB2b2lkIGRtX3RhYmxlX3Bvc3RzdXNwZW5kX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0KQpAQCAtMTU1MCw3ICsxNTcyLDcgQEAKIAlpZiAoIXQpCiAJCXJldHVybjsKIAotCXN1c3BlbmRfdGFyZ2V0cyh0LCAxKTsKKwlzdXNwZW5kX3RhcmdldHModCwgUE9TVFNVU1BFTkQpOwogfQogCiBpbnQgZG1fdGFibGVfcmVzdW1lX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmMgYi9kcml2ZXJzL21kL2RtLXRoaW4tbWV0YWRhdGEuYwppbmRleCBlOWQzM2FkLi40M2FkYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRoaW4tbWV0YWRhdGEuYworKysgYi9kcml2ZXJzL21kL2RtLXRoaW4tbWV0YWRhdGEuYwpAQCAtMTM4NCw0MiArMTM4NCwzOCBAQAogfQogCiBpbnQgZG1fdGhpbl9maW5kX2Jsb2NrKHN0cnVjdCBkbV90aGluX2RldmljZSAqdGQsIGRtX2Jsb2NrX3QgYmxvY2ssCi0JCSAgICAgICBpbnQgY2FuX2Jsb2NrLCBzdHJ1Y3QgZG1fdGhpbl9sb29rdXBfcmVzdWx0ICpyZXN1bHQpCisJCSAgICAgICBpbnQgY2FuX2lzc3VlX2lvLCBzdHJ1Y3QgZG1fdGhpbl9sb29rdXBfcmVzdWx0ICpyZXN1bHQpCiB7Ci0JaW50IHIgPSAtRUlOVkFMOwotCXVpbnQ2NF90IGJsb2NrX3RpbWUgPSAwOworCWludCByOwogCV9fbGU2NCB2YWx1ZTsKIAlzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kID0gdGQtPnBtZDsKIAlkbV9ibG9ja190IGtleXNbMl0gPSB7IHRkLT5pZCwgYmxvY2sgfTsKIAlzdHJ1Y3QgZG1fYnRyZWVfaW5mbyAqaW5mbzsKIAotCWlmIChjYW5fYmxvY2spIHsKLQkJZG93bl9yZWFkKCZwbWQtPnJvb3RfbG9jayk7Ci0JCWluZm8gPSAmcG1kLT5pbmZvOwotCX0gZWxzZSBpZiAoZG93bl9yZWFkX3RyeWxvY2soJnBtZC0+cm9vdF9sb2NrKSkKLQkJaW5mbyA9ICZwbWQtPm5iX2luZm87Ci0JZWxzZQotCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCiAJaWYgKHBtZC0+ZmFpbF9pbykKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRUlOVkFMOworCisJZG93bl9yZWFkKCZwbWQtPnJvb3RfbG9jayk7CisKKwlpZiAoY2FuX2lzc3VlX2lvKSB7CisJCWluZm8gPSAmcG1kLT5pbmZvOworCX0gZWxzZQorCQlpbmZvID0gJnBtZC0+bmJfaW5mbzsKIAogCXIgPSBkbV9idHJlZV9sb29rdXAoaW5mbywgcG1kLT5yb290LCBrZXlzLCAmdmFsdWUpOwotCWlmICghcikKLQkJYmxvY2tfdGltZSA9IGxlNjRfdG9fY3B1KHZhbHVlKTsKLQotb3V0OgotCXVwX3JlYWQoJnBtZC0+cm9vdF9sb2NrKTsKLQogCWlmICghcikgeworCQl1aW50NjRfdCBibG9ja190aW1lID0gMDsKIAkJZG1fYmxvY2tfdCBleGNlcHRpb25fYmxvY2s7CiAJCXVpbnQzMl90IGV4Y2VwdGlvbl90aW1lOworCisJCWJsb2NrX3RpbWUgPSBsZTY0X3RvX2NwdSh2YWx1ZSk7CiAJCXVucGFja19ibG9ja190aW1lKGJsb2NrX3RpbWUsICZleGNlcHRpb25fYmxvY2ssCiAJCQkJICAmZXhjZXB0aW9uX3RpbWUpOwogCQlyZXN1bHQtPmJsb2NrID0gZXhjZXB0aW9uX2Jsb2NrOwogCQlyZXN1bHQtPnNoYXJlZCA9IF9fc25hcHNob3R0ZWRfc2luY2UodGQsIGV4Y2VwdGlvbl90aW1lKTsKIAl9CiAKKwl1cF9yZWFkKCZwbWQtPnJvb3RfbG9jayk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE4MTMsMyArMTgwOSw4IEBACiAKIAlyZXR1cm4gbmVlZHNfY2hlY2s7CiB9CisKK3ZvaWQgZG1fcG9vbF9pc3N1ZV9wcmVmZXRjaGVzKHN0cnVjdCBkbV9wb29sX21ldGFkYXRhICpwbWQpCit7CisJZG1fdG1faXNzdWVfcHJlZmV0Y2hlcyhwbWQtPnRtKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGhpbi1tZXRhZGF0YS5oIGIvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmgKaW5kZXggZTNjODU3ZC4uOTIxZDE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmgKKysrIGIvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmgKQEAgLTEzOSwxMiArMTM5LDEyIEBACiAKIC8qCiAgKiBSZXR1cm5zOgotICogICAtRVdPVUxEQkxPQ0sgaWZmIEBjYW5fYmxvY2sgaXMgc2V0IGFuZCB3b3VsZCBibG9jay4KKyAqICAgLUVXT1VMREJMT0NLIGlmZiBAY2FuX2lzc3VlX2lvIGlzIHNldCBhbmQgd291bGQgaXNzdWUgSU8KICAqICAgLUVOT0RBVEEgaWZmIHRoYXQgbWFwcGluZyBpcyBub3QgcHJlc2VudC4KICAqICAgMCBzdWNjZXNzCiAgKi8KIGludCBkbV90aGluX2ZpbmRfYmxvY2soc3RydWN0IGRtX3RoaW5fZGV2aWNlICp0ZCwgZG1fYmxvY2tfdCBibG9jaywKLQkJICAgICAgIGludCBjYW5fYmxvY2ssIHN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgKnJlc3VsdCk7CisJCSAgICAgICBpbnQgY2FuX2lzc3VlX2lvLCBzdHJ1Y3QgZG1fdGhpbl9sb29rdXBfcmVzdWx0ICpyZXN1bHQpOwogCiAvKgogICogT2J0YWluIGFuIHVudXNlZCBibG9jay4KQEAgLTIxMyw2ICsyMTMsMTEgQEAKIGludCBkbV9wb29sX21ldGFkYXRhX3NldF9uZWVkc19jaGVjayhzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kKTsKIGJvb2wgZG1fcG9vbF9tZXRhZGF0YV9uZWVkc19jaGVjayhzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kKTsKIAorLyoKKyAqIElzc3VlIGFueSBwcmVmZXRjaGVzIHRoYXQgbWF5IGJlIHVzZWZ1bC4KKyAqLwordm9pZCBkbV9wb29sX2lzc3VlX3ByZWZldGNoZXMoc3RydWN0IGRtX3Bvb2xfbWV0YWRhdGEgKnBtZCk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10aGluLmMgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwppbmRleCA0ODQzODAxLi44NzM1NTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRoaW4uYworKysgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwpAQCAtMTEsMTEgKzExLDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWlvLmg+CiAjaW5jbHVkZSA8bGludXgvZG0ta2NvcHlkLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAKICNkZWZpbmUJRE1fTVNHX1BSRUZJWAkidGhpbiIKQEAgLTI1LDcgKzI3LDYgQEAKICAqLwogI2RlZmluZSBFTkRJT19IT09LX1BPT0xfU0laRSAxMDI0CiAjZGVmaW5lIE1BUFBJTkdfUE9PTF9TSVpFIDEwMjQKLSNkZWZpbmUgUFJJU09OX0NFTExTIDEwMjQKICNkZWZpbmUgQ09NTUlUX1BFUklPRCBIWgogI2RlZmluZSBOT19TUEFDRV9USU1FT1VUX1NFQ1MgNjAKIApAQCAtMTE0LDcgKzExNSw4IEBACiB7CiAJa2V5LT52aXJ0dWFsID0gMDsKIAlrZXktPmRldiA9IGRtX3RoaW5fZGV2X2lkKHRkKTsKLQlrZXktPmJsb2NrID0gYjsKKwlrZXktPmJsb2NrX2JlZ2luID0gYjsKKwlrZXktPmJsb2NrX2VuZCA9IGIgKyAxVUxMOwogfQogCiBzdGF0aWMgdm9pZCBidWlsZF92aXJ0dWFsX2tleShzdHJ1Y3QgZG1fdGhpbl9kZXZpY2UgKnRkLCBkbV9ibG9ja190IGIsCkBAIC0xMjIsNyArMTI0LDU1IEBACiB7CiAJa2V5LT52aXJ0dWFsID0gMTsKIAlrZXktPmRldiA9IGRtX3RoaW5fZGV2X2lkKHRkKTsKLQlrZXktPmJsb2NrID0gYjsKKwlrZXktPmJsb2NrX2JlZ2luID0gYjsKKwlrZXktPmJsb2NrX2VuZCA9IGIgKyAxVUxMOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFRIUk9UVExFX1RIUkVTSE9MRCAoMSAqIEhaKQorCitzdHJ1Y3QgdGhyb3R0bGUgeworCXN0cnVjdCByd19zZW1hcGhvcmUgbG9jazsKKwl1bnNpZ25lZCBsb25nIHRocmVzaG9sZDsKKwlib29sIHRocm90dGxlX2FwcGxpZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0aHJvdHRsZV9pbml0KHN0cnVjdCB0aHJvdHRsZSAqdCkKK3sKKwlpbml0X3J3c2VtKCZ0LT5sb2NrKTsKKwl0LT50aHJvdHRsZV9hcHBsaWVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX3dvcmtfc3RhcnQoc3RydWN0IHRocm90dGxlICp0KQoreworCXQtPnRocmVzaG9sZCA9IGppZmZpZXMgKyBUSFJPVFRMRV9USFJFU0hPTEQ7Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX3dvcmtfdXBkYXRlKHN0cnVjdCB0aHJvdHRsZSAqdCkKK3sKKwlpZiAoIXQtPnRocm90dGxlX2FwcGxpZWQgJiYgamlmZmllcyA+IHQtPnRocmVzaG9sZCkgeworCQlkb3duX3dyaXRlKCZ0LT5sb2NrKTsKKwkJdC0+dGhyb3R0bGVfYXBwbGllZCA9IHRydWU7CisJfQorfQorCitzdGF0aWMgdm9pZCB0aHJvdHRsZV93b3JrX2NvbXBsZXRlKHN0cnVjdCB0aHJvdHRsZSAqdCkKK3sKKwlpZiAodC0+dGhyb3R0bGVfYXBwbGllZCkgeworCQl0LT50aHJvdHRsZV9hcHBsaWVkID0gZmFsc2U7CisJCXVwX3dyaXRlKCZ0LT5sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX2xvY2soc3RydWN0IHRocm90dGxlICp0KQoreworCWRvd25fcmVhZCgmdC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX3VubG9jayhzdHJ1Y3QgdGhyb3R0bGUgKnQpCit7CisJdXBfcmVhZCgmdC0+bG9jayk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNTUsOCArMjA1LDExIEBACiAKIHN0cnVjdCB0aGluX2M7CiB0eXBlZGVmIHZvaWQgKCpwcm9jZXNzX2Jpb19mbikoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbyk7Cit0eXBlZGVmIHZvaWQgKCpwcm9jZXNzX2NlbGxfZm4pKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKTsKIHR5cGVkZWYgdm9pZCAoKnByb2Nlc3NfbWFwcGluZ19mbikoc3RydWN0IGRtX3RoaW5fbmV3X21hcHBpbmcgKm0pOwogCisjZGVmaW5lIENFTExfU09SVF9BUlJBWV9TSVpFIDgxOTIKKwogc3RydWN0IHBvb2wgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aTsJLyogT25seSBzZXQgaWYgYSBwb29sIHRhcmdldCBpcyBib3VuZCAqLwpAQCAtMTcxLDExICsyMjQsMTMgQEAKIAogCXN0cnVjdCBwb29sX2ZlYXR1cmVzIHBmOwogCWJvb2wgbG93X3dhdGVyX3RyaWdnZXJlZDoxOwkvKiBBIGRtIGV2ZW50IGhhcyBiZWVuIHNlbnQgKi8KKwlib29sIHN1c3BlbmRlZDoxOwogCiAJc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbjsKIAlzdHJ1Y3QgZG1fa2NvcHlkX2NsaWVudCAqY29waWVyOwogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworCXN0cnVjdCB0aHJvdHRsZSB0aHJvdHRsZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya2VyOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgd2FrZXI7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBub19zcGFjZV90aW1lb3V0OwpAQCAtMTk4LDggKzI1MywxMyBAQAogCXByb2Nlc3NfYmlvX2ZuIHByb2Nlc3NfYmlvOwogCXByb2Nlc3NfYmlvX2ZuIHByb2Nlc3NfZGlzY2FyZDsKIAorCXByb2Nlc3NfY2VsbF9mbiBwcm9jZXNzX2NlbGw7CisJcHJvY2Vzc19jZWxsX2ZuIHByb2Nlc3NfZGlzY2FyZF9jZWxsOworCiAJcHJvY2Vzc19tYXBwaW5nX2ZuIHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZzsKIAlwcm9jZXNzX21hcHBpbmdfZm4gcHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkOworCisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbF9zb3J0X2FycmF5W0NFTExfU09SVF9BUlJBWV9TSVpFXTsKIH07CiAKIHN0YXRpYyBlbnVtIHBvb2xfbW9kZSBnZXRfcG9vbF9tb2RlKHN0cnVjdCBwb29sICpwb29sKTsKQEAgLTIzMiw4ICsyOTIsMTEgQEAKIAogCXN0cnVjdCBwb29sICpwb29sOwogCXN0cnVjdCBkbV90aGluX2RldmljZSAqdGQ7CisJc3RydWN0IG1hcHBlZF9kZXZpY2UgKnRoaW5fbWQ7CisKIAlib29sIHJlcXVldWVfbW9kZToxOwogCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2NlbGxzOwogCXN0cnVjdCBiaW9fbGlzdCBkZWZlcnJlZF9iaW9fbGlzdDsKIAlzdHJ1Y3QgYmlvX2xpc3QgcmV0cnlfb25fcmVzdW1lX2xpc3Q7CiAJc3RydWN0IHJiX3Jvb3Qgc29ydF9iaW9fbGlzdDsgLyogc29ydGVkIGxpc3Qgb2YgZGVmZXJyZWQgYmlvcyAqLwpAQCAtMjkwLDYgKzM1MywxNSBAQAogCWRtX2Jpb19wcmlzb25fZnJlZV9jZWxsKHBvb2wtPnByaXNvbiwgY2VsbCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNlbGxfdmlzaXRfcmVsZWFzZShzdHJ1Y3QgcG9vbCAqcG9vbCwKKwkJCSAgICAgICB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqKSwKKwkJCSAgICAgICB2b2lkICpjb250ZXh0LAorCQkJICAgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJZG1fY2VsbF92aXNpdF9yZWxlYXNlKHBvb2wtPnByaXNvbiwgZm4sIGNvbnRleHQsIGNlbGwpOworCWRtX2Jpb19wcmlzb25fZnJlZV9jZWxsKHBvb2wtPnByaXNvbiwgY2VsbCk7Cit9CisKIHN0YXRpYyB2b2lkIGNlbGxfcmVsZWFzZV9ub19ob2xkZXIoc3RydWN0IHBvb2wgKnBvb2wsCiAJCQkJICAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCwKIAkJCQkgICBzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MpCkBAIC0yOTgsMTkgKzM3MCw2IEBACiAJZG1fYmlvX3ByaXNvbl9mcmVlX2NlbGwocG9vbC0+cHJpc29uLCBjZWxsKTsKIH0KIAotc3RhdGljIHZvaWQgY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZShzdHJ1Y3QgdGhpbl9jICp0YywKLQkJCQkJIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCi17Ci0Jc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0JZG1fY2VsbF9yZWxlYXNlX25vX2hvbGRlcihwb29sLT5wcmlzb24sIGNlbGwsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3dvcmtlcihwb29sKTsKLX0KLQogc3RhdGljIHZvaWQgY2VsbF9lcnJvcl93aXRoX2NvZGUoc3RydWN0IHBvb2wgKnBvb2wsCiAJCQkJIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsIGludCBlcnJvcl9jb2RlKQogewpAQCAtMzIzLDYgKzM4MiwxNiBAQAogCWNlbGxfZXJyb3Jfd2l0aF9jb2RlKHBvb2wsIGNlbGwsIC1FSU8pOwogfQogCitzdGF0aWMgdm9pZCBjZWxsX3N1Y2Nlc3Moc3RydWN0IHBvb2wgKnBvb2wsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJY2VsbF9lcnJvcl93aXRoX2NvZGUocG9vbCwgY2VsbCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNlbGxfcmVxdWV1ZShzdHJ1Y3QgcG9vbCAqcG9vbCwgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKK3sKKwljZWxsX2Vycm9yX3dpdGhfY29kZShwb29sLCBjZWxsLCBETV9FTkRJT19SRVFVRVVFKTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKQEAgLTM5Myw0NCArNDYyLDY1IEBACiAJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKIH07CiAKLXN0YXRpYyB2b2lkIHJlcXVldWVfYmlvX2xpc3Qoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW9fbGlzdCAqbWFzdGVyKQorc3RhdGljIHZvaWQgX19tZXJnZV9iaW9fbGlzdChzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MsIHN0cnVjdCBiaW9fbGlzdCAqbWFzdGVyKQoreworCWJpb19saXN0X21lcmdlKGJpb3MsIG1hc3Rlcik7CisJYmlvX2xpc3RfaW5pdChtYXN0ZXIpOworfQorCitzdGF0aWMgdm9pZCBlcnJvcl9iaW9fbGlzdChzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MsIGludCBlcnJvcikKIHsKIAlzdHJ1Y3QgYmlvICpiaW87CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChiaW9zKSkpCisJCWJpb19lbmRpbyhiaW8sIGVycm9yKTsKK30KKworc3RhdGljIHZvaWQgZXJyb3JfdGhpbl9iaW9fbGlzdChzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpb19saXN0ICptYXN0ZXIsIGludCBlcnJvcikKK3sKIAlzdHJ1Y3QgYmlvX2xpc3QgYmlvczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYmlvX2xpc3RfaW5pdCgmYmlvcyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGMtPmxvY2ssIGZsYWdzKTsKLQliaW9fbGlzdF9tZXJnZSgmYmlvcywgbWFzdGVyKTsKLQliaW9fbGlzdF9pbml0KG1hc3Rlcik7CisJX19tZXJnZV9iaW9fbGlzdCgmYmlvcywgbWFzdGVyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+bG9jaywgZmxhZ3MpOwogCi0Jd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmJpb3MpKSkKLQkJYmlvX2VuZGlvKGJpbywgRE1fRU5ESU9fUkVRVUVVRSk7CisJZXJyb3JfYmlvX2xpc3QoJmJpb3MsIGVycm9yKTsKK30KKworc3RhdGljIHZvaWQgcmVxdWV1ZV9kZWZlcnJlZF9jZWxscyhzdHJ1Y3QgdGhpbl9jICp0YykKK3sKKwlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCBjZWxsczsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLCAqdG1wOworCisJSU5JVF9MSVNUX0hFQUQoJmNlbGxzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+bG9jaywgZmxhZ3MpOworCWxpc3Rfc3BsaWNlX2luaXQoJnRjLT5kZWZlcnJlZF9jZWxscywgJmNlbGxzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNlbGwsIHRtcCwgJmNlbGxzLCB1c2VyX2xpc3QpCisJCWNlbGxfcmVxdWV1ZShwb29sLCBjZWxsKTsKIH0KIAogc3RhdGljIHZvaWQgcmVxdWV1ZV9pbyhzdHJ1Y3QgdGhpbl9jICp0YykKIHsKLQlyZXF1ZXVlX2Jpb19saXN0KHRjLCAmdGMtPmRlZmVycmVkX2Jpb19saXN0KTsKLQlyZXF1ZXVlX2Jpb19saXN0KHRjLCAmdGMtPnJldHJ5X29uX3Jlc3VtZV9saXN0KTsKLX0KLQotc3RhdGljIHZvaWQgZXJyb3JfdGhpbl9yZXRyeV9saXN0KHN0cnVjdCB0aGluX2MgKnRjKQotewotCXN0cnVjdCBiaW8gKmJpbzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBiaW9fbGlzdCBiaW9zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAliaW9fbGlzdF9pbml0KCZiaW9zKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+bG9jaywgZmxhZ3MpOwotCWJpb19saXN0X21lcmdlKCZiaW9zLCAmdGMtPnJldHJ5X29uX3Jlc3VtZV9saXN0KTsKLQliaW9fbGlzdF9pbml0KCZ0Yy0+cmV0cnlfb25fcmVzdW1lX2xpc3QpOworCV9fbWVyZ2VfYmlvX2xpc3QoJmJpb3MsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOworCV9fbWVyZ2VfYmlvX2xpc3QoJmJpb3MsICZ0Yy0+cmV0cnlfb25fcmVzdW1lX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7CiAKLQl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmYmlvcykpKQotCQliaW9faW9fZXJyb3IoYmlvKTsKKwllcnJvcl9iaW9fbGlzdCgmYmlvcywgRE1fRU5ESU9fUkVRVUVVRSk7CisJcmVxdWV1ZV9kZWZlcnJlZF9jZWxscyh0Yyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVycm9yX3JldHJ5X2xpc3Qoc3RydWN0IHBvb2wgKnBvb2wpCkBAIC00MzksNyArNTI5LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0YywgJnBvb2wtPmFjdGl2ZV90aGlucywgbGlzdCkKLQkJZXJyb3JfdGhpbl9yZXRyeV9saXN0KHRjKTsKKwkJZXJyb3JfdGhpbl9iaW9fbGlzdCh0YywgJnRjLT5yZXRyeV9vbl9yZXN1bWVfbGlzdCwgLUVJTyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTYyOSwyMiArNzE5LDggQEAKICAqLwogCiAvKgotICogVGhpcyBzZW5kcyB0aGUgYmlvcyBpbiB0aGUgY2VsbCBiYWNrIHRvIHRoZSBkZWZlcnJlZF9iaW9zIGxpc3QuCi0gKi8KLXN0YXRpYyB2b2lkIGNlbGxfZGVmZXIoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCi17Ci0Jc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0JY2VsbF9yZWxlYXNlKHBvb2wsIGNlbGwsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3dvcmtlcihwb29sKTsKLX0KLQotLyoKLSAqIFNhbWUgYXMgY2VsbF9kZWZlciBhYm92ZSwgZXhjZXB0IGl0IG9taXRzIHRoZSBvcmlnaW5hbCBob2xkZXIgb2YgdGhlIGNlbGwuCisgKiBUaGlzIHNlbmRzIHRoZSBiaW9zIGluIHRoZSBjZWxsLCBleGNlcHQgdGhlIG9yaWdpbmFsIGhvbGRlciwgYmFjaworICogdG8gdGhlIGRlZmVycmVkX2Jpb3MgbGlzdC4KICAqLwogc3RhdGljIHZvaWQgY2VsbF9kZWZlcl9ub19ob2xkZXIoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCiB7CkBAIC02NTgsNiArNzM0LDYyIEBACiAJd2FrZV93b3JrZXIocG9vbCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRoaW5fZGVmZXJfYmlvKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pOworCitzdHJ1Y3QgcmVtYXBfaW5mbyB7CisJc3RydWN0IHRoaW5fYyAqdGM7CisJc3RydWN0IGJpb19saXN0IGRlZmVyX2Jpb3M7CisJc3RydWN0IGJpb19saXN0IGlzc3VlX2Jpb3M7Cit9OworCitzdGF0aWMgdm9pZCBfX2luY19yZW1hcF9hbmRfaXNzdWVfY2VsbCh2b2lkICpjb250ZXh0LAorCQkJCSAgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCXN0cnVjdCByZW1hcF9pbmZvICppbmZvID0gY29udGV4dDsKKwlzdHJ1Y3QgYmlvICpiaW87CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmY2VsbC0+YmlvcykpKSB7CisJCWlmIChiaW8tPmJpX3J3ICYgKFJFUV9ESVNDQVJEIHwgUkVRX0ZMVVNIIHwgUkVRX0ZVQSkpCisJCQliaW9fbGlzdF9hZGQoJmluZm8tPmRlZmVyX2Jpb3MsIGJpbyk7CisJCWVsc2UgeworCQkJaW5jX2FsbF9pb19lbnRyeShpbmZvLT50Yy0+cG9vbCwgYmlvKTsKKworCQkJLyoKKwkJCSAqIFdlIGNhbid0IGlzc3VlIHRoZSBiaW9zIHdpdGggdGhlIGJpbyBwcmlzb24gbG9jaworCQkJICogaGVsZCwgc28gd2UgYWRkIHRoZW0gdG8gYSBsaXN0IHRvIGlzc3VlIG9uCisJCQkgKiByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgorCQkJICovCisJCQliaW9fbGlzdF9hZGQoJmluZm8tPmlzc3VlX2Jpb3MsIGJpbyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluY19yZW1hcF9hbmRfaXNzdWVfY2VsbChzdHJ1Y3QgdGhpbl9jICp0YywKKwkJCQkgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCisJCQkJICAgICBkbV9ibG9ja190IGJsb2NrKQoreworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcmVtYXBfaW5mbyBpbmZvOworCisJaW5mby50YyA9IHRjOworCWJpb19saXN0X2luaXQoJmluZm8uZGVmZXJfYmlvcyk7CisJYmlvX2xpc3RfaW5pdCgmaW5mby5pc3N1ZV9iaW9zKTsKKworCS8qCisJICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIGluYyBhbnkgYmlvcyB3ZSdyZSBhYm91dCB0byBpc3N1ZQorCSAqIGJlZm9yZSB0aGUgY2VsbCBpcyByZWxlYXNlZCwgYW5kIGF2b2lkIGEgcmFjZSB3aXRoIG5ldyBiaW9zCisJICogYmVpbmcgYWRkZWQgdG8gdGhlIGNlbGwuCisJICovCisJY2VsbF92aXNpdF9yZWxlYXNlKHRjLT5wb29sLCBfX2luY19yZW1hcF9hbmRfaXNzdWVfY2VsbCwKKwkJCSAgICZpbmZvLCBjZWxsKTsKKworCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZpbmZvLmRlZmVyX2Jpb3MpKSkKKwkJdGhpbl9kZWZlcl9iaW8odGMsIGJpbyk7CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmaW5mby5pc3N1ZV9iaW9zKSkpCisJCXJlbWFwX2FuZF9pc3N1ZShpbmZvLnRjLCBiaW8sIGJsb2NrKTsKK30KKwogc3RhdGljIHZvaWQgcHJvY2Vzc19wcmVwYXJlZF9tYXBwaW5nX2ZhaWwoc3RydWN0IGRtX3RoaW5fbmV3X21hcHBpbmcgKm0pCiB7CiAJaWYgKG0tPmJpbykgewpAQCAtNzA2LDEwICs4MzgsMTMgQEAKIAkgKiB0aGUgYmlvcyBpbiB0aGUgY2VsbC4KIAkgKi8KIAlpZiAoYmlvKSB7Ci0JCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBtLT5jZWxsKTsKKwkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBtLT5jZWxsLCBtLT5kYXRhX2Jsb2NrKTsKIAkJYmlvX2VuZGlvKGJpbywgMCk7Ci0JfSBlbHNlCi0JCWNlbGxfZGVmZXIodGMsIG0tPmNlbGwpOworCX0gZWxzZSB7CisJCWluY19hbGxfaW9fZW50cnkodGMtPnBvb2wsIG0tPmNlbGwtPmhvbGRlcik7CisJCXJlbWFwX2FuZF9pc3N1ZSh0YywgbS0+Y2VsbC0+aG9sZGVyLCBtLT5kYXRhX2Jsb2NrKTsKKwkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBtLT5jZWxsLCBtLT5kYXRhX2Jsb2NrKTsKKwl9CiAKIG91dDoKIAlsaXN0X2RlbCgmbS0+bGlzdCk7CkBAIC04NDIsNiArOTc3LDIwIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCByZW1hcF9hbmRfaXNzdWVfb3ZlcndyaXRlKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJICAgICAgZG1fYmxvY2tfdCBkYXRhX2Jsb2NrLAorCQkJCSAgICAgIHN0cnVjdCBkbV90aGluX25ld19tYXBwaW5nICptKQoreworCXN0cnVjdCBwb29sICpwb29sID0gdGMtPnBvb2w7CisJc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vayAqaCA9IGRtX3Blcl9iaW9fZGF0YShiaW8sIHNpemVvZihzdHJ1Y3QgZG1fdGhpbl9lbmRpb19ob29rKSk7CisKKwloLT5vdmVyd3JpdGVfbWFwcGluZyA9IG07CisJbS0+YmlvID0gYmlvOworCXNhdmVfYW5kX3NldF9lbmRpbyhiaW8sICZtLT5zYXZlZF9iaV9lbmRfaW8sIG92ZXJ3cml0ZV9lbmRpbyk7CisJaW5jX2FsbF9pb19lbnRyeShwb29sLCBiaW8pOworCXJlbWFwX2FuZF9pc3N1ZSh0YywgYmlvLCBkYXRhX2Jsb2NrKTsKK30KKwogLyoKICAqIEEgcGFydGlhbCBjb3B5IGFsc28gbmVlZHMgdG8gemVybyB0aGUgdW5jb3BpZWQgcmVnaW9uLgogICovCkBAIC04NzYsMTUgKzEwMjUsOSBAQAogCSAqIElmIHRoZSB3aG9sZSBibG9jayBvZiBkYXRhIGlzIGJlaW5nIG92ZXJ3cml0dGVuLCB3ZSBjYW4gaXNzdWUgdGhlCiAJICogYmlvIGltbWVkaWF0ZWx5LiBPdGhlcndpc2Ugd2UgdXNlIGtjb3B5ZCB0byBjbG9uZSB0aGUgZGF0YSBmaXJzdC4KIAkgKi8KLQlpZiAoaW9fb3ZlcndyaXRlc19ibG9jayhwb29sLCBiaW8pKSB7Ci0JCXN0cnVjdCBkbV90aGluX2VuZGlvX2hvb2sgKmggPSBkbV9wZXJfYmlvX2RhdGEoYmlvLCBzaXplb2Yoc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vaykpOwotCi0JCWgtPm92ZXJ3cml0ZV9tYXBwaW5nID0gbTsKLQkJbS0+YmlvID0gYmlvOwotCQlzYXZlX2FuZF9zZXRfZW5kaW8oYmlvLCAmbS0+c2F2ZWRfYmlfZW5kX2lvLCBvdmVyd3JpdGVfZW5kaW8pOwotCQlpbmNfYWxsX2lvX2VudHJ5KHBvb2wsIGJpbyk7Ci0JCXJlbWFwX2FuZF9pc3N1ZSh0YywgYmlvLCBkYXRhX2Rlc3QpOwotCX0gZWxzZSB7CisJaWYgKGlvX292ZXJ3cml0ZXNfYmxvY2socG9vbCwgYmlvKSkKKwkJcmVtYXBfYW5kX2lzc3VlX292ZXJ3cml0ZSh0YywgYmlvLCBkYXRhX2Rlc3QsIG0pOworCWVsc2UgewogCQlzdHJ1Y3QgZG1faW9fcmVnaW9uIGZyb20sIHRvOwogCiAJCWZyb20uYmRldiA9IG9yaWdpbi0+YmRldjsKQEAgLTk1MywxNiArMTA5NiwxMCBAQAogCWlmICghcG9vbC0+cGYuemVyb19uZXdfYmxvY2tzKQogCQlwcm9jZXNzX3ByZXBhcmVkX21hcHBpbmcobSk7CiAKLQllbHNlIGlmIChpb19vdmVyd3JpdGVzX2Jsb2NrKHBvb2wsIGJpbykpIHsKLQkJc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vayAqaCA9IGRtX3Blcl9iaW9fZGF0YShiaW8sIHNpemVvZihzdHJ1Y3QgZG1fdGhpbl9lbmRpb19ob29rKSk7CisJZWxzZSBpZiAoaW9fb3ZlcndyaXRlc19ibG9jayhwb29sLCBiaW8pKQorCQlyZW1hcF9hbmRfaXNzdWVfb3ZlcndyaXRlKHRjLCBiaW8sIGRhdGFfYmxvY2ssIG0pOwogCi0JCWgtPm92ZXJ3cml0ZV9tYXBwaW5nID0gbTsKLQkJbS0+YmlvID0gYmlvOwotCQlzYXZlX2FuZF9zZXRfZW5kaW8oYmlvLCAmbS0+c2F2ZWRfYmlfZW5kX2lvLCBvdmVyd3JpdGVfZW5kaW8pOwotCQlpbmNfYWxsX2lvX2VudHJ5KHBvb2wsIGJpbyk7Ci0JCXJlbWFwX2FuZF9pc3N1ZSh0YywgYmlvLCBkYXRhX2Jsb2NrKTsKLQotCX0gZWxzZQorCWVsc2UKIAkJbGxfemVybyh0YywgbSwKIAkJCWRhdGFfYmxvY2sgKiBwb29sLT5zZWN0b3JzX3Blcl9ibG9jaywKIAkJCShkYXRhX2Jsb2NrICsgMSkgKiBwb29sLT5zZWN0b3JzX3Blcl9ibG9jayk7CkBAIC0xMTM0LDI5ICsxMjcxLDI1IEBACiAJYmlvX2xpc3RfaW5pdCgmYmlvcyk7CiAJY2VsbF9yZWxlYXNlKHBvb2wsIGNlbGwsICZiaW9zKTsKIAotCWVycm9yID0gc2hvdWxkX2Vycm9yX3Vuc2VydmljZWFibGVfYmlvKHBvb2wpOwotCWlmIChlcnJvcikKLQkJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmJpb3MpKSkKLQkJCWJpb19lbmRpbyhiaW8sIGVycm9yKTsKLQllbHNlCi0JCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZiaW9zKSkpCi0JCQlyZXRyeV9vbl9yZXN1bWUoYmlvKTsKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmYmlvcykpKQorCQlyZXRyeV9vbl9yZXN1bWUoYmlvKTsKIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc19kaXNjYXJkKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCBwcm9jZXNzX2Rpc2NhcmRfY2VsbChzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKIHsKIAlpbnQgcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiaW8gKmJpbyA9IGNlbGwtPmhvbGRlcjsKIAlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsICpjZWxsMjsKLQlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5LCBrZXkyOworCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwyOworCXN0cnVjdCBkbV9jZWxsX2tleSBrZXkyOwogCWRtX2Jsb2NrX3QgYmxvY2sgPSBnZXRfYmlvX2Jsb2NrKHRjLCBiaW8pOwogCXN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgbG9va3VwX3Jlc3VsdDsKIAlzdHJ1Y3QgZG1fdGhpbl9uZXdfbWFwcGluZyAqbTsKIAotCWJ1aWxkX3ZpcnR1YWxfa2V5KHRjLT50ZCwgYmxvY2ssICZrZXkpOwotCWlmIChiaW9fZGV0YWluKHRjLT5wb29sLCAma2V5LCBiaW8sICZjZWxsKSkKKwlpZiAodGMtPnJlcXVldWVfbW9kZSkgeworCQljZWxsX3JlcXVldWUocG9vbCwgY2VsbCk7CiAJCXJldHVybjsKKwl9CiAKIAlyID0gZG1fdGhpbl9maW5kX2Jsb2NrKHRjLT50ZCwgYmxvY2ssIDEsICZsb29rdXBfcmVzdWx0KTsKIAlzd2l0Y2ggKHIpIHsKQEAgLTExODcsMTIgKzEzMjAsOSBAQAogCQkJbS0+Y2VsbDIgPSBjZWxsMjsKIAkJCW0tPmJpbyA9IGJpbzsKIAotCQkJaWYgKCFkbV9kZWZlcnJlZF9zZXRfYWRkX3dvcmsocG9vbC0+YWxsX2lvX2RzLCAmbS0+bGlzdCkpIHsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwotCQkJCWxpc3RfYWRkX3RhaWwoJm0tPmxpc3QsICZwb29sLT5wcmVwYXJlZF9kaXNjYXJkcyk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwotCQkJCXdha2Vfd29ya2VyKHBvb2wpOwotCQkJfQorCQkJaWYgKCFkbV9kZWZlcnJlZF9zZXRfYWRkX3dvcmsocG9vbC0+YWxsX2lvX2RzLCAmbS0+bGlzdCkpCisJCQkJcG9vbC0+cHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkKG0pOworCiAJCX0gZWxzZSB7CiAJCQlpbmNfYWxsX2lvX2VudHJ5KHBvb2wsIGJpbyk7CiAJCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7CkBAIC0xMjI3LDYgKzEzNTcsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZGlzY2FyZF9iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOworCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CisJZG1fYmxvY2tfdCBibG9jayA9IGdldF9iaW9fYmxvY2sodGMsIGJpbyk7CisKKwlidWlsZF92aXJ0dWFsX2tleSh0Yy0+dGQsIGJsb2NrLCAma2V5KTsKKwlpZiAoYmlvX2RldGFpbih0Yy0+cG9vbCwgJmtleSwgYmlvLCAmY2VsbCkpCisJCXJldHVybjsKKworCXByb2Nlc3NfZGlzY2FyZF9jZWxsKHRjLCBjZWxsKTsKK30KKwogc3RhdGljIHZvaWQgYnJlYWtfc2hhcmluZyhzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvLCBkbV9ibG9ja190IGJsb2NrLAogCQkJICBzdHJ1Y3QgZG1fY2VsbF9rZXkgKmtleSwKIAkJCSAgc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCAqbG9va3VwX3Jlc3VsdCwKQEAgLTEyNTUsMTEgKzEzOTgsNTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fcmVtYXBfYW5kX2lzc3VlX3NoYXJlZF9jZWxsKHZvaWQgKmNvbnRleHQsCisJCQkJCSAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKK3sKKwlzdHJ1Y3QgcmVtYXBfaW5mbyAqaW5mbyA9IGNvbnRleHQ7CisJc3RydWN0IGJpbyAqYmlvOworCisJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmNlbGwtPmJpb3MpKSkgeworCQlpZiAoKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB8fAorCQkgICAgKGJpby0+YmlfcncgJiAoUkVRX0RJU0NBUkQgfCBSRVFfRkxVU0ggfCBSRVFfRlVBKSkpCisJCQliaW9fbGlzdF9hZGQoJmluZm8tPmRlZmVyX2Jpb3MsIGJpbyk7CisJCWVsc2UgeworCQkJc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vayAqaCA9IGRtX3Blcl9iaW9fZGF0YShiaW8sIHNpemVvZihzdHJ1Y3QgZG1fdGhpbl9lbmRpb19ob29rKSk7OworCisJCQloLT5zaGFyZWRfcmVhZF9lbnRyeSA9IGRtX2RlZmVycmVkX2VudHJ5X2luYyhpbmZvLT50Yy0+cG9vbC0+c2hhcmVkX3JlYWRfZHMpOworCQkJaW5jX2FsbF9pb19lbnRyeShpbmZvLT50Yy0+cG9vbCwgYmlvKTsKKwkJCWJpb19saXN0X2FkZCgmaW5mby0+aXNzdWVfYmlvcywgYmlvKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcmVtYXBfYW5kX2lzc3VlX3NoYXJlZF9jZWxsKHN0cnVjdCB0aGluX2MgKnRjLAorCQkJCQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLAorCQkJCQlkbV9ibG9ja190IGJsb2NrKQoreworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcmVtYXBfaW5mbyBpbmZvOworCisJaW5mby50YyA9IHRjOworCWJpb19saXN0X2luaXQoJmluZm8uZGVmZXJfYmlvcyk7CisJYmlvX2xpc3RfaW5pdCgmaW5mby5pc3N1ZV9iaW9zKTsKKworCWNlbGxfdmlzaXRfcmVsZWFzZSh0Yy0+cG9vbCwgX19yZW1hcF9hbmRfaXNzdWVfc2hhcmVkX2NlbGwsCisJCQkgICAmaW5mbywgY2VsbCk7CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmaW5mby5kZWZlcl9iaW9zKSkpCisJCXRoaW5fZGVmZXJfYmlvKHRjLCBiaW8pOworCisJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmluZm8uaXNzdWVfYmlvcykpKQorCQlyZW1hcF9hbmRfaXNzdWUodGMsIGJpbywgYmxvY2spOworfQorCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3NoYXJlZF9iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbywKIAkJCSAgICAgICBkbV9ibG9ja190IGJsb2NrLAotCQkJICAgICAgIHN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgKmxvb2t1cF9yZXN1bHQpCisJCQkgICAgICAgc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCAqbG9va3VwX3Jlc3VsdCwKKwkJCSAgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICp2aXJ0X2NlbGwpCiB7Ci0Jc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpkYXRhX2NlbGw7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCkBAIC0xMjY4LDE5ICsxNDUzLDIzIEBACiAJICogb2YgYmVpbmcgYnJva2VuIHNvIHdlIGhhdmUgbm90aGluZyBmdXJ0aGVyIHRvIGRvIGhlcmUuCiAJICovCiAJYnVpbGRfZGF0YV9rZXkodGMtPnRkLCBsb29rdXBfcmVzdWx0LT5ibG9jaywgJmtleSk7Ci0JaWYgKGJpb19kZXRhaW4ocG9vbCwgJmtleSwgYmlvLCAmY2VsbCkpCisJaWYgKGJpb19kZXRhaW4ocG9vbCwgJmtleSwgYmlvLCAmZGF0YV9jZWxsKSkgeworCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgdmlydF9jZWxsKTsKIAkJcmV0dXJuOworCX0KIAotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSAmJiBiaW8tPmJpX2l0ZXIuYmlfc2l6ZSkKLQkJYnJlYWtfc2hhcmluZyh0YywgYmlvLCBibG9jaywgJmtleSwgbG9va3VwX3Jlc3VsdCwgY2VsbCk7Ci0JZWxzZSB7CisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFICYmIGJpby0+YmlfaXRlci5iaV9zaXplKSB7CisJCWJyZWFrX3NoYXJpbmcodGMsIGJpbywgYmxvY2ssICZrZXksIGxvb2t1cF9yZXN1bHQsIGRhdGFfY2VsbCk7CisJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCB2aXJ0X2NlbGwpOworCX0gZWxzZSB7CiAJCXN0cnVjdCBkbV90aGluX2VuZGlvX2hvb2sgKmggPSBkbV9wZXJfYmlvX2RhdGEoYmlvLCBzaXplb2Yoc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vaykpOwogCiAJCWgtPnNoYXJlZF9yZWFkX2VudHJ5ID0gZG1fZGVmZXJyZWRfZW50cnlfaW5jKHBvb2wtPnNoYXJlZF9yZWFkX2RzKTsKIAkJaW5jX2FsbF9pb19lbnRyeShwb29sLCBiaW8pOwotCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7Ci0KIAkJcmVtYXBfYW5kX2lzc3VlKHRjLCBiaW8sIGxvb2t1cF9yZXN1bHQtPmJsb2NrKTsKKworCQlyZW1hcF9hbmRfaXNzdWVfc2hhcmVkX2NlbGwodGMsIGRhdGFfY2VsbCwgbG9va3VwX3Jlc3VsdC0+YmxvY2spOworCQlyZW1hcF9hbmRfaXNzdWVfc2hhcmVkX2NlbGwodGMsIHZpcnRfY2VsbCwgbG9va3VwX3Jlc3VsdC0+YmxvY2spOwogCX0KIH0KIApAQCAtMTMzMywzNCArMTUyMiwyOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc19iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY2VsbChzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOworCXN0cnVjdCBiaW8gKmJpbyA9IGNlbGwtPmhvbGRlcjsKIAlkbV9ibG9ja190IGJsb2NrID0gZ2V0X2Jpb19ibG9jayh0YywgYmlvKTsKLQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOwotCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CiAJc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCBsb29rdXBfcmVzdWx0OwogCi0JLyoKLQkgKiBJZiBjZWxsIGlzIGFscmVhZHkgb2NjdXBpZWQsIHRoZW4gdGhlIGJsb2NrIGlzIGFscmVhZHkKLQkgKiBiZWluZyBwcm92aXNpb25lZCBzbyB3ZSBoYXZlIG5vdGhpbmcgZnVydGhlciB0byBkbyBoZXJlLgotCSAqLwotCWJ1aWxkX3ZpcnR1YWxfa2V5KHRjLT50ZCwgYmxvY2ssICZrZXkpOwotCWlmIChiaW9fZGV0YWluKHBvb2wsICZrZXksIGJpbywgJmNlbGwpKQorCWlmICh0Yy0+cmVxdWV1ZV9tb2RlKSB7CisJCWNlbGxfcmVxdWV1ZShwb29sLCBjZWxsKTsKIAkJcmV0dXJuOworCX0KIAogCXIgPSBkbV90aGluX2ZpbmRfYmxvY2sodGMtPnRkLCBibG9jaywgMSwgJmxvb2t1cF9yZXN1bHQpOwogCXN3aXRjaCAocikgewogCWNhc2UgMDoKLQkJaWYgKGxvb2t1cF9yZXN1bHQuc2hhcmVkKSB7Ci0JCQlwcm9jZXNzX3NoYXJlZF9iaW8odGMsIGJpbywgYmxvY2ssICZsb29rdXBfcmVzdWx0KTsKLQkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBjZWxsKTsgLyogRklYTUU6IHBhc3MgdGhpcyBjZWxsIGludG8gcHJvY2Vzc19zaGFyZWQ/ICovCi0JCX0gZWxzZSB7CisJCWlmIChsb29rdXBfcmVzdWx0LnNoYXJlZCkKKwkJCXByb2Nlc3Nfc2hhcmVkX2Jpbyh0YywgYmlvLCBibG9jaywgJmxvb2t1cF9yZXN1bHQsIGNlbGwpOworCQllbHNlIHsKIAkJCWluY19hbGxfaW9fZW50cnkocG9vbCwgYmlvKTsKLQkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBjZWxsKTsKLQogCQkJcmVtYXBfYW5kX2lzc3VlKHRjLCBiaW8sIGxvb2t1cF9yZXN1bHQuYmxvY2spOworCQkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBjZWxsLCBsb29rdXBfcmVzdWx0LmJsb2NrKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTM5NCw3ICsxNTc3LDI2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBwcm9jZXNzX2Jpb19yZWFkX29ubHkoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYmlvKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKwlkbV9ibG9ja190IGJsb2NrID0gZ2V0X2Jpb19ibG9jayh0YywgYmlvKTsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOworCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CisKKwkvKgorCSAqIElmIGNlbGwgaXMgYWxyZWFkeSBvY2N1cGllZCwgdGhlbiB0aGUgYmxvY2sgaXMgYWxyZWFkeQorCSAqIGJlaW5nIHByb3Zpc2lvbmVkIHNvIHdlIGhhdmUgbm90aGluZyBmdXJ0aGVyIHRvIGRvIGhlcmUuCisJICovCisJYnVpbGRfdmlydHVhbF9rZXkodGMtPnRkLCBibG9jaywgJmtleSk7CisJaWYgKGJpb19kZXRhaW4ocG9vbCwgJmtleSwgYmlvLCAmY2VsbCkpCisJCXJldHVybjsKKworCXByb2Nlc3NfY2VsbCh0YywgY2VsbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fcHJvY2Vzc19iaW9fcmVhZF9vbmx5KHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCiB7CiAJaW50IHI7CiAJaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7CkBAIC0xNDA0LDE1ICsxNjA2LDIxIEBACiAJciA9IGRtX3RoaW5fZmluZF9ibG9jayh0Yy0+dGQsIGJsb2NrLCAxLCAmbG9va3VwX3Jlc3VsdCk7CiAJc3dpdGNoIChyKSB7CiAJY2FzZSAwOgotCQlpZiAobG9va3VwX3Jlc3VsdC5zaGFyZWQgJiYgKHJ3ID09IFdSSVRFKSAmJiBiaW8tPmJpX2l0ZXIuYmlfc2l6ZSkKKwkJaWYgKGxvb2t1cF9yZXN1bHQuc2hhcmVkICYmIChydyA9PSBXUklURSkgJiYgYmlvLT5iaV9pdGVyLmJpX3NpemUpIHsKIAkJCWhhbmRsZV91bnNlcnZpY2VhYmxlX2Jpbyh0Yy0+cG9vbCwgYmlvKTsKLQkJZWxzZSB7CisJCQlpZiAoY2VsbCkKKwkJCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7CisJCX0gZWxzZSB7CiAJCQlpbmNfYWxsX2lvX2VudHJ5KHRjLT5wb29sLCBiaW8pOwogCQkJcmVtYXBfYW5kX2lzc3VlKHRjLCBiaW8sIGxvb2t1cF9yZXN1bHQuYmxvY2spOworCQkJaWYgKGNlbGwpCisJCQkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBjZWxsLCBsb29rdXBfcmVzdWx0LmJsb2NrKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgLUVOT0RBVEE6CisJCWlmIChjZWxsKQorCQkJY2VsbF9kZWZlcl9ub19ob2xkZXIodGMsIGNlbGwpOwogCQlpZiAocncgIT0gUkVBRCkgewogCQkJaGFuZGxlX3Vuc2VydmljZWFibGVfYmlvKHRjLT5wb29sLCBiaW8pOwogCQkJYnJlYWs7CkBAIC0xNDMxLDExICsxNjM5LDIzIEBACiAJZGVmYXVsdDoKIAkJRE1FUlJfTElNSVQoIiVzOiBkbV90aGluX2ZpbmRfYmxvY2soKSBmYWlsZWQ6IGVycm9yID0gJWQiLAogCQkJICAgIF9fZnVuY19fLCByKTsKKwkJaWYgKGNlbGwpCisJCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7CiAJCWJpb19pb19lcnJvcihiaW8pOwogCQlicmVhazsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYmlvX3JlYWRfb25seShzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvKQoreworCV9fcHJvY2Vzc19iaW9fcmVhZF9vbmx5KHRjLCBiaW8sIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NlbGxfcmVhZF9vbmx5KHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCV9fcHJvY2Vzc19iaW9fcmVhZF9vbmx5KHRjLCBjZWxsLT5ob2xkZXIsIGNlbGwpOworfQorCiBzdGF0aWMgdm9pZCBwcm9jZXNzX2Jpb19zdWNjZXNzKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJYmlvX2VuZGlvKGJpbywgMCk7CkBAIC0xNDQ2LDYgKzE2NjYsMTYgQEAKIAliaW9faW9fZXJyb3IoYmlvKTsKIH0KIAorc3RhdGljIHZvaWQgcHJvY2Vzc19jZWxsX3N1Y2Nlc3Moc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJY2VsbF9zdWNjZXNzKHRjLT5wb29sLCBjZWxsKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19jZWxsX2ZhaWwoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJY2VsbF9lcnJvcih0Yy0+cG9vbCwgY2VsbCk7Cit9CisKIC8qCiAgKiBGSVhNRTogc2hvdWxkIHdlIGFsc28gY29tbWl0IGR1ZSB0byBzaXplIG9mIHRyYW5zYWN0aW9uLCBtZWFzdXJlZCBpbgogICogbWV0YWRhdGEgYmxvY2tzPwpAQCAtMTUyNyw5ICsxNzU3LDEwIEBACiAJc3RydWN0IGJpbyAqYmlvOwogCXN0cnVjdCBiaW9fbGlzdCBiaW9zOwogCXN0cnVjdCBibGtfcGx1ZyBwbHVnOworCXVuc2lnbmVkIGNvdW50ID0gMDsKIAogCWlmICh0Yy0+cmVxdWV1ZV9tb2RlKSB7Ci0JCXJlcXVldWVfYmlvX2xpc3QodGMsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOworCQllcnJvcl90aGluX2Jpb19saXN0KHRjLCAmdGMtPmRlZmVycmVkX2Jpb19saXN0LCBETV9FTkRJT19SRVFVRVVFKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTU2OCwxMCArMTc5OSw5NyBAQAogCQkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkKHRjLCBiaW8pOwogCQllbHNlCiAJCQlwb29sLT5wcm9jZXNzX2Jpbyh0YywgYmlvKTsKKworCQlpZiAoKGNvdW50KysgJiAxMjcpID09IDApIHsKKwkJCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CisJCQlkbV9wb29sX2lzc3VlX3ByZWZldGNoZXMocG9vbC0+cG1kKTsKKwkJfQogCX0KIAlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwogfQogCitzdGF0aWMgaW50IGNtcF9jZWxscyhjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocykKK3sKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpsaHNfY2VsbCA9ICooKHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKiopIGxocyk7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqcmhzX2NlbGwgPSAqKChzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqKSByaHMpOworCisJQlVHX09OKCFsaHNfY2VsbC0+aG9sZGVyKTsKKwlCVUdfT04oIXJoc19jZWxsLT5ob2xkZXIpOworCisJaWYgKGxoc19jZWxsLT5ob2xkZXItPmJpX2l0ZXIuYmlfc2VjdG9yIDwgcmhzX2NlbGwtPmhvbGRlci0+YmlfaXRlci5iaV9zZWN0b3IpCisJCXJldHVybiAtMTsKKworCWlmIChsaHNfY2VsbC0+aG9sZGVyLT5iaV9pdGVyLmJpX3NlY3RvciA+IHJoc19jZWxsLT5ob2xkZXItPmJpX2l0ZXIuYmlfc2VjdG9yKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgc29ydF9jZWxscyhzdHJ1Y3QgcG9vbCAqcG9vbCwgc3RydWN0IGxpc3RfaGVhZCAqY2VsbHMpCit7CisJdW5zaWduZWQgY291bnQgPSAwOworCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2VsbCwgdG1wLCBjZWxscywgdXNlcl9saXN0KSB7CisJCWlmIChjb3VudCA+PSBDRUxMX1NPUlRfQVJSQVlfU0laRSkKKwkJCWJyZWFrOworCisJCXBvb2wtPmNlbGxfc29ydF9hcnJheVtjb3VudCsrXSA9IGNlbGw7CisJCWxpc3RfZGVsKCZjZWxsLT51c2VyX2xpc3QpOworCX0KKworCXNvcnQocG9vbC0+Y2VsbF9zb3J0X2FycmF5LCBjb3VudCwgc2l6ZW9mKGNlbGwpLCBjbXBfY2VsbHMsIE5VTEwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3RoaW5fZGVmZXJyZWRfY2VsbHMoc3RydWN0IHRoaW5fYyAqdGMpCit7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgY2VsbHM7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKKwl1bnNpZ25lZCBpLCBqLCBjb3VudDsKKworCUlOSVRfTElTVF9IRUFEKCZjZWxscyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV9pbml0KCZ0Yy0+ZGVmZXJyZWRfY2VsbHMsICZjZWxscyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChsaXN0X2VtcHR5KCZjZWxscykpCisJCXJldHVybjsKKworCWRvIHsKKwkJY291bnQgPSBzb3J0X2NlbGxzKHRjLT5wb29sLCAmY2VsbHMpOworCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQljZWxsID0gcG9vbC0+Y2VsbF9zb3J0X2FycmF5W2ldOworCQkJQlVHX09OKCFjZWxsLT5ob2xkZXIpOworCisJCQkvKgorCQkJICogSWYgd2UndmUgZ290IG5vIGZyZWUgbmV3X21hcHBpbmcgc3RydWN0cywgYW5kIHByb2Nlc3NpbmcKKwkJCSAqIHRoaXMgYmlvIG1pZ2h0IHJlcXVpcmUgb25lLCB3ZSBwYXVzZSB1bnRpbCB0aGVyZSBhcmUgc29tZQorCQkJICogcHJlcGFyZWQgbWFwcGluZ3MgdG8gcHJvY2Vzcy4KKwkJCSAqLworCQkJaWYgKGVuc3VyZV9uZXh0X21hcHBpbmcocG9vbCkpIHsKKwkJCQlmb3IgKGogPSBpOyBqIDwgY291bnQ7IGorKykKKwkJCQkJbGlzdF9hZGQoJnBvb2wtPmNlbGxfc29ydF9hcnJheVtqXS0+dXNlcl9saXN0LCAmY2VsbHMpOworCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5sb2NrLCBmbGFncyk7CisJCQkJbGlzdF9zcGxpY2UoJmNlbGxzLCAmdGMtPmRlZmVycmVkX2NlbGxzKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+bG9jaywgZmxhZ3MpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKGNlbGwtPmhvbGRlci0+YmlfcncgJiBSRVFfRElTQ0FSRCkKKwkJCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmRfY2VsbCh0YywgY2VsbCk7CisJCQllbHNlCisJCQkJcG9vbC0+cHJvY2Vzc19jZWxsKHRjLCBjZWxsKTsKKwkJfQorCX0gd2hpbGUgKCFsaXN0X2VtcHR5KCZjZWxscykpOworfQorCiBzdGF0aWMgdm9pZCB0aGluX2dldChzdHJ1Y3QgdGhpbl9jICp0Yyk7CiBzdGF0aWMgdm9pZCB0aGluX3B1dChzdHJ1Y3QgdGhpbl9jICp0Yyk7CiAKQEAgLTE2MjAsNiArMTkzOCw3IEBACiAKIAl0YyA9IGdldF9maXJzdF90aGluKHBvb2wpOwogCXdoaWxlICh0YykgeworCQlwcm9jZXNzX3RoaW5fZGVmZXJyZWRfY2VsbHModGMpOwogCQlwcm9jZXNzX3RoaW5fZGVmZXJyZWRfYmlvcyh0Yyk7CiAJCXRjID0gZ2V0X25leHRfdGhpbihwb29sLCB0Yyk7CiAJfQpAQCAtMTY1Myw5ICsxOTcyLDE1IEBACiB7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBwb29sLCB3b3JrZXIpOwogCisJdGhyb3R0bGVfd29ya19zdGFydCgmcG9vbC0+dGhyb3R0bGUpOworCWRtX3Bvb2xfaXNzdWVfcHJlZmV0Y2hlcyhwb29sLT5wbWQpOworCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CiAJcHJvY2Vzc19wcmVwYXJlZChwb29sLCAmcG9vbC0+cHJlcGFyZWRfbWFwcGluZ3MsICZwb29sLT5wcm9jZXNzX3ByZXBhcmVkX21hcHBpbmcpOworCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CiAJcHJvY2Vzc19wcmVwYXJlZChwb29sLCAmcG9vbC0+cHJlcGFyZWRfZGlzY2FyZHMsICZwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQpOworCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CiAJcHJvY2Vzc19kZWZlcnJlZF9iaW9zKHBvb2wpOworCXRocm90dGxlX3dvcmtfY29tcGxldGUoJnBvb2wtPnRocm90dGxlKTsKIH0KIAogLyoKQEAgLTE3OTIsNiArMjExNyw4IEBACiAJCWRtX3Bvb2xfbWV0YWRhdGFfcmVhZF9vbmx5KHBvb2wtPnBtZCk7CiAJCXBvb2wtPnByb2Nlc3NfYmlvID0gcHJvY2Vzc19iaW9fZmFpbDsKIAkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkID0gcHJvY2Vzc19iaW9fZmFpbDsKKwkJcG9vbC0+cHJvY2Vzc19jZWxsID0gcHJvY2Vzc19jZWxsX2ZhaWw7CisJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19jZWxsX2ZhaWw7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZ19mYWlsOwogCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQgPSBwcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmRfZmFpbDsKIApAQCAtMTgwNCw2ICsyMTMxLDggQEAKIAkJZG1fcG9vbF9tZXRhZGF0YV9yZWFkX29ubHkocG9vbC0+cG1kKTsKIAkJcG9vbC0+cHJvY2Vzc19iaW8gPSBwcm9jZXNzX2Jpb19yZWFkX29ubHk7CiAJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZCA9IHByb2Nlc3NfYmlvX3N1Y2Nlc3M7CisJCXBvb2wtPnByb2Nlc3NfY2VsbCA9IHByb2Nlc3NfY2VsbF9yZWFkX29ubHk7CisJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19jZWxsX3N1Y2Nlc3M7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZ19mYWlsOwogCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQgPSBwcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmRfcGFzc2Rvd247CiAKQEAgLTE4MjIsNyArMjE1MSw5IEBACiAJCWlmIChvbGRfbW9kZSAhPSBuZXdfbW9kZSkKIAkJCW5vdGlmeV9vZl9wb29sX21vZGVfY2hhbmdlKHBvb2wsICJvdXQtb2YtZGF0YS1zcGFjZSIpOwogCQlwb29sLT5wcm9jZXNzX2JpbyA9IHByb2Nlc3NfYmlvX3JlYWRfb25seTsKLQkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkID0gcHJvY2Vzc19kaXNjYXJkOworCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmQgPSBwcm9jZXNzX2Rpc2NhcmRfYmlvOworCQlwb29sLT5wcm9jZXNzX2NlbGwgPSBwcm9jZXNzX2NlbGxfcmVhZF9vbmx5OworCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmRfY2VsbCA9IHByb2Nlc3NfZGlzY2FyZF9jZWxsOwogCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX21hcHBpbmcgPSBwcm9jZXNzX3ByZXBhcmVkX21hcHBpbmc7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfZGlzY2FyZCA9IHByb2Nlc3NfcHJlcGFyZWRfZGlzY2FyZF9wYXNzZG93bjsKIApAQCAtMTgzNSw3ICsyMTY2LDkgQEAKIAkJCW5vdGlmeV9vZl9wb29sX21vZGVfY2hhbmdlKHBvb2wsICJ3cml0ZSIpOwogCQlkbV9wb29sX21ldGFkYXRhX3JlYWRfd3JpdGUocG9vbC0+cG1kKTsKIAkJcG9vbC0+cHJvY2Vzc19iaW8gPSBwcm9jZXNzX2JpbzsKLQkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkID0gcHJvY2Vzc19kaXNjYXJkOworCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmQgPSBwcm9jZXNzX2Rpc2NhcmRfYmlvOworCQlwb29sLT5wcm9jZXNzX2NlbGwgPSBwcm9jZXNzX2NlbGw7CisJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19kaXNjYXJkX2NlbGw7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZzsKIAkJcG9vbC0+cHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkID0gcHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkOwogCQlicmVhazsKQEAgLTE4OTUsNiArMjIyOCwyOSBAQAogCXdha2Vfd29ya2VyKHBvb2wpOwogfQogCitzdGF0aWMgdm9pZCB0aGluX2RlZmVyX2Jpb193aXRoX3Rocm90dGxlKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKworCXRocm90dGxlX2xvY2soJnBvb2wtPnRocm90dGxlKTsKKwl0aGluX2RlZmVyX2Jpbyh0YywgYmlvKTsKKwl0aHJvdHRsZV91bmxvY2soJnBvb2wtPnRocm90dGxlKTsKK30KKworc3RhdGljIHZvaWQgdGhpbl9kZWZlcl9jZWxsKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKworCXRocm90dGxlX2xvY2soJnBvb2wtPnRocm90dGxlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjZWxsLT51c2VyX2xpc3QsICZ0Yy0+ZGVmZXJyZWRfY2VsbHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7CisJdGhyb3R0bGVfdW5sb2NrKCZwb29sLT50aHJvdHRsZSk7CisKKwl3YWtlX3dvcmtlcihwb29sKTsKK30KKwogc3RhdGljIHZvaWQgdGhpbl9ob29rX2JpbyhzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBkbV90aGluX2VuZGlvX2hvb2sgKmggPSBkbV9wZXJfYmlvX2RhdGEoYmlvLCBzaXplb2Yoc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vaykpOwpAQCAtMTkxNSw4ICsyMjcxLDcgQEAKIAlkbV9ibG9ja190IGJsb2NrID0gZ2V0X2Jpb19ibG9jayh0YywgYmlvKTsKIAlzdHJ1Y3QgZG1fdGhpbl9kZXZpY2UgKnRkID0gdGMtPnRkOwogCXN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgcmVzdWx0OwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgY2VsbDEsIGNlbGwyOwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGxfcmVzdWx0OworCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKnZpcnRfY2VsbCwgKmRhdGFfY2VsbDsKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCiAJdGhpbl9ob29rX2Jpbyh0YywgYmlvKTsKQEAgLTE5MzIsMTAgKzIyODcsMTggQEAKIAl9CiAKIAlpZiAoYmlvLT5iaV9ydyAmIChSRVFfRElTQ0FSRCB8IFJFUV9GTFVTSCB8IFJFUV9GVUEpKSB7Ci0JCXRoaW5fZGVmZXJfYmlvKHRjLCBiaW8pOworCQl0aGluX2RlZmVyX2Jpb193aXRoX3Rocm90dGxlKHRjLCBiaW8pOwogCQlyZXR1cm4gRE1fTUFQSU9fU1VCTUlUVEVEOwogCX0KIAorCS8qCisJICogV2UgbXVzdCBob2xkIHRoZSB2aXJ0dWFsIGNlbGwgYmVmb3JlIGRvaW5nIHRoZSBsb29rdXAsIG90aGVyd2lzZQorCSAqIHRoZXJlJ3MgYSByYWNlIHdpdGggZGlzY2FyZC4KKwkgKi8KKwlidWlsZF92aXJ0dWFsX2tleSh0Yy0+dGQsIGJsb2NrLCAma2V5KTsKKwlpZiAoYmlvX2RldGFpbih0Yy0+cG9vbCwgJmtleSwgYmlvLCAmdmlydF9jZWxsKSkKKwkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKKwogCXIgPSBkbV90aGluX2ZpbmRfYmxvY2sodGQsIGJsb2NrLCAwLCAmcmVzdWx0KTsKIAogCS8qCkBAIC0xOTU4LDIzICsyMzIxLDE5IEBACiAJCQkgKiBNb3JlIGRpc3RhbnQgYW5jZXN0b3JzIGFyZSBpcnJlbGV2YW50LiBUaGUKIAkJCSAqIHNoYXJlZCBmbGFnIHdpbGwgYmUgc2V0IGluIHRoZWlyIGNhc2UuCiAJCQkgKi8KLQkJCXRoaW5fZGVmZXJfYmlvKHRjLCBiaW8pOworCQkJdGhpbl9kZWZlcl9jZWxsKHRjLCB2aXJ0X2NlbGwpOwogCQkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAkJfQogCi0JCWJ1aWxkX3ZpcnR1YWxfa2V5KHRjLT50ZCwgYmxvY2ssICZrZXkpOwotCQlpZiAoZG1fYmlvX2RldGFpbih0Yy0+cG9vbC0+cHJpc29uLCAma2V5LCBiaW8sICZjZWxsMSwgJmNlbGxfcmVzdWx0KSkKLQkJCXJldHVybiBETV9NQVBJT19TVUJNSVRURUQ7Ci0KIAkJYnVpbGRfZGF0YV9rZXkodGMtPnRkLCByZXN1bHQuYmxvY2ssICZrZXkpOwotCQlpZiAoZG1fYmlvX2RldGFpbih0Yy0+cG9vbC0+cHJpc29uLCAma2V5LCBiaW8sICZjZWxsMiwgJmNlbGxfcmVzdWx0KSkgewotCQkJY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZSh0YywgJmNlbGwxKTsKKwkJaWYgKGJpb19kZXRhaW4odGMtPnBvb2wsICZrZXksIGJpbywgJmRhdGFfY2VsbCkpIHsKKwkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCB2aXJ0X2NlbGwpOwogCQkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAkJfQogCiAJCWluY19hbGxfaW9fZW50cnkodGMtPnBvb2wsIGJpbyk7Ci0JCWNlbGxfZGVmZXJfbm9faG9sZGVyX25vX2ZyZWUodGMsICZjZWxsMik7Ci0JCWNlbGxfZGVmZXJfbm9faG9sZGVyX25vX2ZyZWUodGMsICZjZWxsMSk7CisJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBkYXRhX2NlbGwpOworCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgdmlydF9jZWxsKTsKIAogCQlyZW1hcCh0YywgYmlvLCByZXN1bHQuYmxvY2spOwogCQlyZXR1cm4gRE1fTUFQSU9fUkVNQVBQRUQ7CkBAIC0xOTg2LDE2ICsyMzQ1LDEzIEBACiAJCQkgKiBvZiBkb2luZyBzby4KIAkJCSAqLwogCQkJaGFuZGxlX3Vuc2VydmljZWFibGVfYmlvKHRjLT5wb29sLCBiaW8pOworCQkJY2VsbF9kZWZlcl9ub19ob2xkZXIodGMsIHZpcnRfY2VsbCk7CiAJCQlyZXR1cm4gRE1fTUFQSU9fU1VCTUlUVEVEOwogCQl9CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCiAJY2FzZSAtRVdPVUxEQkxPQ0s6Ci0JCS8qCi0JCSAqIEluIGZ1dHVyZSwgdGhlIGZhaWxlZCBkbV90aGluX2ZpbmRfYmxvY2sgYWJvdmUgY291bGQKLQkJICogcHJvdmlkZSB0aGUgaGludCB0byBsb2FkIHRoZSBtZXRhZGF0YSBpbnRvIGNhY2hlLgotCQkgKi8KLQkJdGhpbl9kZWZlcl9iaW8odGMsIGJpbyk7CisJCXRoaW5fZGVmZXJfY2VsbCh0YywgdmlydF9jZWxsKTsKIAkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAogCWRlZmF1bHQ6CkBAIC0yMDA1LDYgKzIzNjEsNyBAQAogCQkgKiBwb29sIGlzIHN3aXRjaGVkIHRvIGZhaWwtaW8gbW9kZS4KIAkJICovCiAJCWJpb19pb19lcnJvcihiaW8pOworCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgdmlydF9jZWxsKTsKIAkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAl9CiB9CkBAIC0yMTg1LDcgKzI1NDIsNyBAQAogCQlwb29sLT5zZWN0b3JzX3Blcl9ibG9ja19zaGlmdCA9IF9fZmZzKGJsb2NrX3NpemUpOwogCXBvb2wtPmxvd193YXRlcl9ibG9ja3MgPSAwOwogCXBvb2xfZmVhdHVyZXNfaW5pdCgmcG9vbC0+cGYpOwotCXBvb2wtPnByaXNvbiA9IGRtX2Jpb19wcmlzb25fY3JlYXRlKFBSSVNPTl9DRUxMUyk7CisJcG9vbC0+cHJpc29uID0gZG1fYmlvX3ByaXNvbl9jcmVhdGUoKTsKIAlpZiAoIXBvb2wtPnByaXNvbikgewogCQkqZXJyb3IgPSAiRXJyb3IgY3JlYXRpbmcgcG9vbCdzIGJpbyBwcmlzb24iOwogCQllcnJfcCA9IEVSUl9QVFIoLUVOT01FTSk7CkBAIC0yMjExLDYgKzI1NjgsNyBAQAogCQlnb3RvIGJhZF93cTsKIAl9CiAKKwl0aHJvdHRsZV9pbml0KCZwb29sLT50aHJvdHRsZSk7CiAJSU5JVF9XT1JLKCZwb29sLT53b3JrZXIsIGRvX3dvcmtlcik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnBvb2wtPndha2VyLCBkb193YWtlcik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnBvb2wtPm5vX3NwYWNlX3RpbWVvdXQsIGRvX25vX3NwYWNlX3RpbWVvdXQpOwpAQCAtMjIyMCw2ICsyNTc4LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmcG9vbC0+cHJlcGFyZWRfZGlzY2FyZHMpOwogCUlOSVRfTElTVF9IRUFEKCZwb29sLT5hY3RpdmVfdGhpbnMpOwogCXBvb2wtPmxvd193YXRlcl90cmlnZ2VyZWQgPSBmYWxzZTsKKwlwb29sLT5zdXNwZW5kZWQgPSB0cnVlOwogCiAJcG9vbC0+c2hhcmVkX3JlYWRfZHMgPSBkbV9kZWZlcnJlZF9zZXRfY3JlYXRlKCk7CiAJaWYgKCFwb29sLT5zaGFyZWRfcmVhZF9kcykgewpAQCAtMjc1NiwyMCArMzExNSw3NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwb29sX3N1c3BlbmRfYWN0aXZlX3RoaW5zKHN0cnVjdCBwb29sICpwb29sKQoreworCXN0cnVjdCB0aGluX2MgKnRjOworCisJLyogU3VzcGVuZCBhbGwgYWN0aXZlIHRoaW4gZGV2aWNlcyAqLworCXRjID0gZ2V0X2ZpcnN0X3RoaW4ocG9vbCk7CisJd2hpbGUgKHRjKSB7CisJCWRtX2ludGVybmFsX3N1c3BlbmRfbm9mbHVzaCh0Yy0+dGhpbl9tZCk7CisJCXRjID0gZ2V0X25leHRfdGhpbihwb29sLCB0Yyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwb29sX3Jlc3VtZV9hY3RpdmVfdGhpbnMoc3RydWN0IHBvb2wgKnBvb2wpCit7CisJc3RydWN0IHRoaW5fYyAqdGM7CisKKwkvKiBSZXN1bWUgYWxsIGFjdGl2ZSB0aGluIGRldmljZXMgKi8KKwl0YyA9IGdldF9maXJzdF90aGluKHBvb2wpOworCXdoaWxlICh0YykgeworCQlkbV9pbnRlcm5hbF9yZXN1bWUodGMtPnRoaW5fbWQpOworCQl0YyA9IGdldF9uZXh0X3RoaW4ocG9vbCwgdGMpOworCX0KK30KKwogc3RhdGljIHZvaWQgcG9vbF9yZXN1bWUoc3RydWN0IGRtX3RhcmdldCAqdGkpCiB7CiAJc3RydWN0IHBvb2xfYyAqcHQgPSB0aS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHB0LT5wb29sOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwkvKgorCSAqIE11c3QgcmVxdWV1ZSBhY3RpdmVfdGhpbnMnIGJpb3MgYW5kIHRoZW4gcmVzdW1lCisJICogYWN0aXZlX3RoaW5zIF9iZWZvcmVfIGNsZWFyaW5nICdzdXNwZW5kJyBmbGFnLgorCSAqLworCXJlcXVldWVfYmlvcyhwb29sKTsKKwlwb29sX3Jlc3VtZV9hY3RpdmVfdGhpbnMocG9vbCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwogCXBvb2wtPmxvd193YXRlcl90cmlnZ2VyZWQgPSBmYWxzZTsKKwlwb29sLT5zdXNwZW5kZWQgPSBmYWxzZTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5sb2NrLCBmbGFncyk7Ci0JcmVxdWV1ZV9iaW9zKHBvb2wpOwogCiAJZG9fd2FrZXIoJnBvb2wtPndha2VyLndvcmspOwogfQogCitzdGF0aWMgdm9pZCBwb29sX3ByZXN1c3BlbmQoc3RydWN0IGRtX3RhcmdldCAqdGkpCit7CisJc3RydWN0IHBvb2xfYyAqcHQgPSB0aS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHB0LT5wb29sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bG9jaywgZmxhZ3MpOworCXBvb2wtPnN1c3BlbmRlZCA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bG9jaywgZmxhZ3MpOworCisJcG9vbF9zdXNwZW5kX2FjdGl2ZV90aGlucyhwb29sKTsKK30KKworc3RhdGljIHZvaWQgcG9vbF9wcmVzdXNwZW5kX3VuZG8oc3RydWN0IGRtX3RhcmdldCAqdGkpCit7CisJc3RydWN0IHBvb2xfYyAqcHQgPSB0aS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHB0LT5wb29sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwb29sX3Jlc3VtZV9hY3RpdmVfdGhpbnMocG9vbCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bG9jaywgZmxhZ3MpOworCXBvb2wtPnN1c3BlbmRlZCA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgcG9vbF9wb3N0c3VzcGVuZChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKIHsKIAlzdHJ1Y3QgcG9vbF9jICpwdCA9IHRpLT5wcml2YXRlOwpAQCAtMjk0MSw3ICszMzU3LDYgQEAKICAqICAgY3JlYXRlX3RoaW4JPGRldl9pZD4KICAqICAgY3JlYXRlX3NuYXAJPGRldl9pZD4gPG9yaWdpbl9pZD4KICAqICAgZGVsZXRlCQk8ZGV2X2lkPgotICogICB0cmltCQk8ZGV2X2lkPiA8bmV3X3NpemVfaW5fc2VjdG9ycz4KICAqICAgc2V0X3RyYW5zYWN0aW9uX2lkIDxjdXJyZW50X3RyYW5zX2lkPiA8bmV3X3RyYW5zX2lkPgogICogICByZXNlcnZlX21ldGFkYXRhX3NuYXAKICAqICAgcmVsZWFzZV9tZXRhZGF0YV9zbmFwCkBAIC0zMTY5LDE1ICszNTg0LDM1IEBACiB7CiAJc3RydWN0IHBvb2xfYyAqcHQgPSB0aS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHB0LT5wb29sOwotCXVpbnQ2NF90IGlvX29wdF9zZWN0b3JzID0gbGltaXRzLT5pb19vcHQgPj4gU0VDVE9SX1NISUZUOworCXNlY3Rvcl90IGlvX29wdF9zZWN0b3JzID0gbGltaXRzLT5pb19vcHQgPj4gU0VDVE9SX1NISUZUOworCisJLyoKKwkgKiBJZiBtYXhfc2VjdG9ycyBpcyBzbWFsbGVyIHRoYW4gcG9vbC0+c2VjdG9yc19wZXJfYmxvY2sgYWRqdXN0IGl0CisJICogdG8gdGhlIGhpZ2hlc3QgcG9zc2libGUgcG93ZXItb2YtMiBmYWN0b3Igb2YgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2suCisJICogVGhpcyBpcyBlc3BlY2lhbGx5IGJlbmVmaWNpYWwgd2hlbiB0aGUgcG9vbCdzIGRhdGEgZGV2aWNlIGlzIGEgUkFJRAorCSAqIGRldmljZSB0aGF0IGhhcyBhIGZ1bGwgc3RyaXBlIHdpZHRoIHRoYXQgbWF0Y2hlcyBwb29sLT5zZWN0b3JzX3Blcl9ibG9jaworCSAqIC0tIGJlY2F1c2UgZXZlbiB0aG91Z2ggcGFydGlhbCBSQUlEIHN0cmlwZS1zaXplZCBJT3Mgd2lsbCBiZSBpc3N1ZWQgdG8gYQorCSAqICAgIHNpbmdsZSBSQUlEIHN0cmlwZTsgd2hlbiBhZ2dyZWdhdGVkIHRoZXkgd2lsbCBlbmQgb24gYSBmdWxsIFJBSUQgc3RyaXBlCisJICogICAgYm91bmRhcnkuLiB3aGljaCBhdm9pZHMgYWRkaXRpb25hbCBwYXJ0aWFsIFJBSUQgc3RyaXBlIHdyaXRlcyBjYXNjYWRpbmcKKwkgKi8KKwlpZiAobGltaXRzLT5tYXhfc2VjdG9ycyA8IHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrKSB7CisJCXdoaWxlICghaXNfZmFjdG9yKHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrLCBsaW1pdHMtPm1heF9zZWN0b3JzKSkgeworCQkJaWYgKChsaW1pdHMtPm1heF9zZWN0b3JzICYgKGxpbWl0cy0+bWF4X3NlY3RvcnMgLSAxKSkgPT0gMCkKKwkJCQlsaW1pdHMtPm1heF9zZWN0b3JzLS07CisJCQlsaW1pdHMtPm1heF9zZWN0b3JzID0gcm91bmRkb3duX3Bvd19vZl90d28obGltaXRzLT5tYXhfc2VjdG9ycyk7CisJCX0KKwl9CiAKIAkvKgogCSAqIElmIHRoZSBzeXN0ZW0tZGV0ZXJtaW5lZCBzdGFja2VkIGxpbWl0cyBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZQogCSAqIHBvb2wncyBibG9ja3NpemUgKGlvX29wdCBpcyBhIGZhY3RvcikgZG8gbm90IG92ZXJyaWRlIHRoZW0uCiAJICovCiAJaWYgKGlvX29wdF9zZWN0b3JzIDwgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2sgfHwKLQkgICAgZG9fZGl2KGlvX29wdF9zZWN0b3JzLCBwb29sLT5zZWN0b3JzX3Blcl9ibG9jaykpIHsKLQkJYmxrX2xpbWl0c19pb19taW4obGltaXRzLCBwb29sLT5zZWN0b3JzX3Blcl9ibG9jayA8PCBTRUNUT1JfU0hJRlQpOworCSAgICAhaXNfZmFjdG9yKGlvX29wdF9zZWN0b3JzLCBwb29sLT5zZWN0b3JzX3Blcl9ibG9jaykpIHsKKwkJaWYgKGlzX2ZhY3Rvcihwb29sLT5zZWN0b3JzX3Blcl9ibG9jaywgbGltaXRzLT5tYXhfc2VjdG9ycykpCisJCQlibGtfbGltaXRzX2lvX21pbihsaW1pdHMsIGxpbWl0cy0+bWF4X3NlY3RvcnMgPDwgU0VDVE9SX1NISUZUKTsKKwkJZWxzZQorCQkJYmxrX2xpbWl0c19pb19taW4obGltaXRzLCBwb29sLT5zZWN0b3JzX3Blcl9ibG9jayA8PCBTRUNUT1JfU0hJRlQpOwogCQlibGtfbGltaXRzX2lvX29wdChsaW1pdHMsIHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrIDw8IFNFQ1RPUl9TSElGVCk7CiAJfQogCkBAIC0zMjA2LDExICszNjQxLDEzIEBACiAJLm5hbWUgPSAidGhpbi1wb29sIiwKIAkuZmVhdHVyZXMgPSBETV9UQVJHRVRfU0lOR0xFVE9OIHwgRE1fVEFSR0VUX0FMV0FZU19XUklURUFCTEUgfAogCQkgICAgRE1fVEFSR0VUX0lNTVVUQUJMRSwKLQkudmVyc2lvbiA9IHsxLCAxMywgMH0sCisJLnZlcnNpb24gPSB7MSwgMTQsIDB9LAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIAkuY3RyID0gcG9vbF9jdHIsCiAJLmR0ciA9IHBvb2xfZHRyLAogCS5tYXAgPSBwb29sX21hcCwKKwkucHJlc3VzcGVuZCA9IHBvb2xfcHJlc3VzcGVuZCwKKwkucHJlc3VzcGVuZF91bmRvID0gcG9vbF9wcmVzdXNwZW5kX3VuZG8sCiAJLnBvc3RzdXNwZW5kID0gcG9vbF9wb3N0c3VzcGVuZCwKIAkucHJlcmVzdW1lID0gcG9vbF9wcmVyZXN1bWUsCiAJLnJlc3VtZSA9IHBvb2xfcmVzdW1lLApAQCAtMzI0MCwxNCArMzY3NywxNCBAQAogCXN0cnVjdCB0aGluX2MgKnRjID0gdGktPnByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXRoaW5fcHV0KHRjKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ0Yy0+Y2FuX2Rlc3Ryb3kpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5wb29sLT5sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWxfcmN1KCZ0Yy0+bGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGMtPnBvb2wtPmxvY2ssIGZsYWdzKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAorCXRoaW5fcHV0KHRjKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ0Yy0+Y2FuX2Rlc3Ryb3kpOworCiAJbXV0ZXhfbG9jaygmZG1fdGhpbl9wb29sX3RhYmxlLm11dGV4KTsKIAogCV9fcG9vbF9kZWModGMtPnBvb2wpOwpAQCAtMzI5NCw3ICszNzMxLDkgQEAKIAkJciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CisJdGMtPnRoaW5fbWQgPSBkbV90YWJsZV9nZXRfbWQodGktPnRhYmxlKTsKIAlzcGluX2xvY2tfaW5pdCgmdGMtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZ0Yy0+ZGVmZXJyZWRfY2VsbHMpOwogCWJpb19saXN0X2luaXQoJnRjLT5kZWZlcnJlZF9iaW9fbGlzdCk7CiAJYmlvX2xpc3RfaW5pdCgmdGMtPnJldHJ5X29uX3Jlc3VtZV9saXN0KTsKIAl0Yy0+c29ydF9iaW9fbGlzdCA9IFJCX1JPT1Q7CkBAIC0zMzM5LDE4ICszNzc4LDE4IEBACiAJaWYgKGdldF9wb29sX21vZGUodGMtPnBvb2wpID09IFBNX0ZBSUwpIHsKIAkJdGktPmVycm9yID0gIkNvdWxkbid0IG9wZW4gdGhpbiBkZXZpY2UsIFBvb2wgaXMgaW4gZmFpbCBtb2RlIjsKIAkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkX3RoaW5fb3BlbjsKKwkJZ290byBiYWRfcG9vbDsKIAl9CiAKIAlyID0gZG1fcG9vbF9vcGVuX3RoaW5fZGV2aWNlKHRjLT5wb29sLT5wbWQsIHRjLT5kZXZfaWQsICZ0Yy0+dGQpOwogCWlmIChyKSB7CiAJCXRpLT5lcnJvciA9ICJDb3VsZG4ndCBvcGVuIHRoaW4gaW50ZXJuYWwgZGV2aWNlIjsKLQkJZ290byBiYWRfdGhpbl9vcGVuOworCQlnb3RvIGJhZF9wb29sOwogCX0KIAogCXIgPSBkbV9zZXRfdGFyZ2V0X21heF9pb19sZW4odGksIHRjLT5wb29sLT5zZWN0b3JzX3Blcl9ibG9jayk7CiAJaWYgKHIpCi0JCWdvdG8gYmFkX3RhcmdldF9tYXhfaW9fbGVuOworCQlnb3RvIGJhZDsKIAogCXRpLT5udW1fZmx1c2hfYmlvcyA9IDE7CiAJdGktPmZsdXNoX3N1cHBvcnRlZCA9IHRydWU7CkBAIC0zMzY1LDE0ICszODA0LDE2IEBACiAJCXRpLT5zcGxpdF9kaXNjYXJkX2Jpb3MgPSB0cnVlOwogCX0KIAotCWRtX3B1dChwb29sX21kKTsKLQogCW11dGV4X3VubG9jaygmZG1fdGhpbl9wb29sX3RhYmxlLm11dGV4KTsKIAotCWF0b21pY19zZXQoJnRjLT5yZWZjb3VudCwgMSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZ0Yy0+Y2FuX2Rlc3Ryb3kpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5wb29sLT5sb2NrLCBmbGFncyk7CisJaWYgKHRjLT5wb29sLT5zdXNwZW5kZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGMtPnBvb2wtPmxvY2ssIGZsYWdzKTsKKwkJbXV0ZXhfbG9jaygmZG1fdGhpbl9wb29sX3RhYmxlLm11dGV4KTsgLyogcmVhY3F1aXJlIGZvciBfX3Bvb2xfZGVjICovCisJCXRpLT5lcnJvciA9ICJVbmFibGUgdG8gYWN0aXZhdGUgdGhpbiBkZXZpY2Ugd2hpbGUgcG9vbCBpcyBzdXNwZW5kZWQiOworCQlyID0gLUVJTlZBTDsKKwkJZ290byBiYWQ7CisJfQogCWxpc3RfYWRkX3RhaWxfcmN1KCZ0Yy0+bGlzdCwgJnRjLT5wb29sLT5hY3RpdmVfdGhpbnMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5wb29sLT5sb2NrLCBmbGFncyk7CiAJLyoKQEAgLTMzODMsMTEgKzM4MjQsMTYgQEAKIAkgKi8KIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAorCWRtX3B1dChwb29sX21kKTsKKworCWF0b21pY19zZXQoJnRjLT5yZWZjb3VudCwgMSk7CisJaW5pdF9jb21wbGV0aW9uKCZ0Yy0+Y2FuX2Rlc3Ryb3kpOworCiAJcmV0dXJuIDA7CiAKLWJhZF90YXJnZXRfbWF4X2lvX2xlbjoKK2JhZDoKIAlkbV9wb29sX2Nsb3NlX3RoaW5fZGV2aWNlKHRjLT50ZCk7Ci1iYWRfdGhpbl9vcGVuOgorYmFkX3Bvb2w6CiAJX19wb29sX2RlYyh0Yy0+cG9vbCk7CiBiYWRfcG9vbF9sb29rdXA6CiAJZG1fcHV0KHBvb2xfbWQpOwpAQCAtMzUzMyw2ICszOTc5LDIxIEBACiAJRE1FTUlUKCJFcnJvciIpOwogfQogCitzdGF0aWMgaW50IHRoaW5fbWVyZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBidmVjX21lcmdlX2RhdGEgKmJ2bSwKKwkJICAgICAgc3RydWN0IGJpb192ZWMgKmJpb3ZlYywgaW50IG1heF9zaXplKQoreworCXN0cnVjdCB0aGluX2MgKnRjID0gdGktPnByaXZhdGU7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZSh0Yy0+cG9vbF9kZXYtPmJkZXYpOworCisJaWYgKCFxLT5tZXJnZV9idmVjX2ZuKQorCQlyZXR1cm4gbWF4X3NpemU7CisKKwlidm0tPmJpX2JkZXYgPSB0Yy0+cG9vbF9kZXYtPmJkZXY7CisJYnZtLT5iaV9zZWN0b3IgPSBkbV90YXJnZXRfb2Zmc2V0KHRpLCBidm0tPmJpX3NlY3Rvcik7CisKKwlyZXR1cm4gbWluKG1heF9zaXplLCBxLT5tZXJnZV9idmVjX2ZuKHEsIGJ2bSwgYmlvdmVjKSk7Cit9CisKIHN0YXRpYyBpbnQgdGhpbl9pdGVyYXRlX2RldmljZXMoc3RydWN0IGRtX3RhcmdldCAqdGksCiAJCQkJaXRlcmF0ZV9kZXZpY2VzX2NhbGxvdXRfZm4gZm4sIHZvaWQgKmRhdGEpCiB7CkBAIC0zNTU3LDcgKzQwMTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIHRoaW5fdGFyZ2V0ID0gewogCS5uYW1lID0gInRoaW4iLAotCS52ZXJzaW9uID0gezEsIDEzLCAwfSwKKwkudmVyc2lvbiA9IHsxLCAxNCwgMH0sCiAJLm1vZHVsZQk9IFRISVNfTU9EVUxFLAogCS5jdHIgPSB0aGluX2N0ciwKIAkuZHRyID0gdGhpbl9kdHIsCkBAIC0zNTY3LDYgKzQwMjgsNyBAQAogCS5wcmVzdXNwZW5kID0gdGhpbl9wcmVzdXNwZW5kLAogCS5wb3N0c3VzcGVuZCA9IHRoaW5fcG9zdHN1c3BlbmQsCiAJLnN0YXR1cyA9IHRoaW5fc3RhdHVzLAorCS5tZXJnZSA9IHRoaW5fbWVyZ2UsCiAJLml0ZXJhdGVfZGV2aWNlcyA9IHRoaW5faXRlcmF0ZV9kZXZpY2VzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDU4ZjM5MjcuLjhmMzdlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2Jsb2NrLmg+CiAKQEAgLTExNyw2ICsxMTgsNyBAQAogI2RlZmluZSBETUZfTk9GTFVTSF9TVVNQRU5ESU5HIDUKICNkZWZpbmUgRE1GX01FUkdFX0lTX09QVElPTkFMIDYKICNkZWZpbmUgRE1GX0RFRkVSUkVEX1JFTU9WRSA3CisjZGVmaW5lIERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSA4CiAKIC8qCiAgKiBBIGR1bW15IGRlZmluaXRpb24gdG8gbWFrZSBSQ1UgaGFwcHkuCkBAIC0xNDAsNyArMTQyLDcgQEAKIAkgKiBVc2UgZG1fZ2V0X2xpdmVfdGFibGV7X2Zhc3R9IG9yIHRha2Ugc3VzcGVuZF9sb2NrIGZvcgogCSAqIGRlcmVmZXJlbmNlLgogCSAqLwotCXN0cnVjdCBkbV90YWJsZSAqbWFwOworCXN0cnVjdCBkbV90YWJsZSBfX3JjdSAqbWFwOwogCiAJc3RydWN0IGxpc3RfaGVhZCB0YWJsZV9kZXZpY2VzOwogCXN0cnVjdCBtdXRleCB0YWJsZV9kZXZpY2VzX2xvY2s7CkBAIC01MjUsMTQgKzUyNywxNSBAQAogCQlnb3RvIG91dDsKIAogCXRndCA9IGRtX3RhYmxlX2dldF90YXJnZXQobWFwLCAwKTsKKwlpZiAoIXRndC0+dHlwZS0+aW9jdGwpCisJCWdvdG8gb3V0OwogCiAJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpIHsKIAkJciA9IC1FQUdBSU47CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICh0Z3QtPnR5cGUtPmlvY3RsKQotCQlyID0gdGd0LT50eXBlLT5pb2N0bCh0Z3QsIGNtZCwgYXJnKTsKKwlyID0gdGd0LT50eXBlLT5pb2N0bCh0Z3QsIGNtZCwgYXJnKTsKIAogb3V0OgogCWRtX3B1dF9saXZlX3RhYmxlKG1kLCBzcmN1X2lkeCk7CkBAIC0xNjA3LDkgKzE2MTAsOSBAQAogCSAqIEZpbmQgbWF4aW11bSBhbW91bnQgb2YgSS9PIHRoYXQgd29uJ3QgbmVlZCBzcGxpdHRpbmcKIAkgKi8KIAltYXhfc2VjdG9ycyA9IG1pbihtYXhfaW9fbGVuKGJ2bS0+Ymlfc2VjdG9yLCB0aSksCi0JCQkgIChzZWN0b3JfdCkgQklPX01BWF9TRUNUT1JTKTsKKwkJCSAgKHNlY3Rvcl90KSBxdWV1ZV9tYXhfc2VjdG9ycyhxKSk7CiAJbWF4X3NpemUgPSAobWF4X3NlY3RvcnMgPDwgU0VDVE9SX1NISUZUKSAtIGJ2bS0+Ymlfc2l6ZTsKLQlpZiAobWF4X3NpemUgPCAwKQorCWlmICh1bmxpa2VseShtYXhfc2l6ZSA8IDApKSAvKiB0aGlzIHNob3VsZG4ndCBfZXZlcl8gaGFwcGVuICovCiAJCW1heF9zaXplID0gMDsKIAogCS8qCkBAIC0xNjIxLDEwICsxNjI0LDEwIEBACiAJCW1heF9zaXplID0gdGktPnR5cGUtPm1lcmdlKHRpLCBidm0sIGJpb3ZlYywgbWF4X3NpemUpOwogCS8qCiAJICogSWYgdGhlIHRhcmdldCBkb2Vzbid0IHN1cHBvcnQgbWVyZ2UgbWV0aG9kIGFuZCBzb21lIG9mIHRoZSBkZXZpY2VzCi0JICogcHJvdmlkZWQgdGhlaXIgbWVyZ2VfYnZlYyBtZXRob2QgKHdlIGtub3cgdGhpcyBieSBsb29raW5nIGF0Ci0JICogcXVldWVfbWF4X2h3X3NlY3RvcnMpLCB0aGVuIHdlIGNhbid0IGFsbG93IGJpb3Mgd2l0aCBtdWx0aXBsZSB2ZWN0b3IKLQkgKiBlbnRyaWVzLiAgU28gYWx3YXlzIHNldCBtYXhfc2l6ZSB0byAwLCBhbmQgdGhlIGNvZGUgYmVsb3cgYWxsb3dzCi0JICoganVzdCBvbmUgcGFnZS4KKwkgKiBwcm92aWRlZCB0aGVpciBtZXJnZV9idmVjIG1ldGhvZCAod2Uga25vdyB0aGlzIGJ5IGxvb2tpbmcgZm9yIHRoZQorCSAqIG1heF9od19zZWN0b3JzIHRoYXQgZG1fc2V0X2RldmljZV9saW1pdHMgbWF5IHNldCksIHRoZW4gd2UgY2FuJ3QKKwkgKiBhbGxvdyBiaW9zIHdpdGggbXVsdGlwbGUgdmVjdG9yIGVudHJpZXMuICBTbyBhbHdheXMgc2V0IG1heF9zaXplCisJICogdG8gMCwgYW5kIHRoZSBjb2RlIGJlbG93IGFsbG93cyBqdXN0IG9uZSBwYWdlLgogCSAqLwogCWVsc2UgaWYgKHF1ZXVlX21heF9od19zZWN0b3JzKHEpIDw9IFBBR0VfU0laRSA+PiA5KQogCQltYXhfc2l6ZSA9IDA7CkBAIC0yMzMyLDcgKzIzMzUsNyBAQAogCiAJbWVyZ2VfaXNfb3B0aW9uYWwgPSBkbV90YWJsZV9tZXJnZV9pc19vcHRpb25hbCh0KTsKIAotCW9sZF9tYXAgPSBtZC0+bWFwOworCW9sZF9tYXAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1kLT5tYXAsIGxvY2tkZXBfaXNfaGVsZCgmbWQtPnN1c3BlbmRfbG9jaykpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihtZC0+bWFwLCB0KTsKIAltZC0+aW1tdXRhYmxlX3RhcmdldF90eXBlID0gZG1fdGFibGVfZ2V0X2ltbXV0YWJsZV90YXJnZXRfdHlwZSh0KTsKIApAQCAtMjM0MSw3ICsyMzQ0LDggQEAKIAkJc2V0X2JpdChETUZfTUVSR0VfSVNfT1BUSU9OQUwsICZtZC0+ZmxhZ3MpOwogCWVsc2UKIAkJY2xlYXJfYml0KERNRl9NRVJHRV9JU19PUFRJT05BTCwgJm1kLT5mbGFncyk7Ci0JZG1fc3luY190YWJsZShtZCk7CisJaWYgKG9sZF9tYXApCisJCWRtX3N5bmNfdGFibGUobWQpOwogCiAJcmV0dXJuIG9sZF9tYXA7CiB9CkBAIC0yMzUxLDcgKzIzNTUsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGRtX3RhYmxlICpfX3VuYmluZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7Ci0Jc3RydWN0IGRtX3RhYmxlICptYXAgPSBtZC0+bWFwOworCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZC0+bWFwLCAxKTsKIAogCWlmICghbWFwKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI3MTYsNiArMjcyMCw5OSBAQAogfQogCiAvKgorICogSWYgX19kbV9zdXNwZW5kIHJldHVybnMgMCwgdGhlIGRldmljZSBpcyBjb21wbGV0ZWx5IHF1aWVzY2VudAorICogbm93LiBUaGVyZSBpcyBubyByZXF1ZXN0LXByb2Nlc3NpbmcgYWN0aXZpdHkuIEFsbCBuZXcgcmVxdWVzdHMKKyAqIGFyZSBiZWluZyBhZGRlZCB0byBtZC0+ZGVmZXJyZWQgbGlzdC4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIG1kLT5zdXNwZW5kX2xvY2sKKyAqLworc3RhdGljIGludCBfX2RtX3N1c3BlbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBzdHJ1Y3QgZG1fdGFibGUgKm1hcCwKKwkJCXVuc2lnbmVkIHN1c3BlbmRfZmxhZ3MsIGludCBpbnRlcnJ1cHRpYmxlKQoreworCWJvb2wgZG9fbG9ja2ZzID0gc3VzcGVuZF9mbGFncyAmIERNX1NVU1BFTkRfTE9DS0ZTX0ZMQUc7CisJYm9vbCBub2ZsdXNoID0gc3VzcGVuZF9mbGFncyAmIERNX1NVU1BFTkRfTk9GTFVTSF9GTEFHOworCWludCByOworCisJLyoKKwkgKiBETUZfTk9GTFVTSF9TVVNQRU5ESU5HIG11c3QgYmUgc2V0IGJlZm9yZSBwcmVzdXNwZW5kLgorCSAqIFRoaXMgZmxhZyBpcyBjbGVhcmVkIGJlZm9yZSBkbV9zdXNwZW5kIHJldHVybnMuCisJICovCisJaWYgKG5vZmx1c2gpCisJCXNldF9iaXQoRE1GX05PRkxVU0hfU1VTUEVORElORywgJm1kLT5mbGFncyk7CisKKwkvKgorCSAqIFRoaXMgZ2V0cyByZXZlcnRlZCBpZiB0aGVyZSdzIGFuIGVycm9yIGxhdGVyIGFuZCB0aGUgdGFyZ2V0cworCSAqIHByb3ZpZGUgdGhlIC5wcmVzdXNwZW5kX3VuZG8gaG9vay4KKwkgKi8KKwlkbV90YWJsZV9wcmVzdXNwZW5kX3RhcmdldHMobWFwKTsKKworCS8qCisJICogRmx1c2ggSS9PIHRvIHRoZSBkZXZpY2UuCisJICogQW55IEkvTyBzdWJtaXR0ZWQgYWZ0ZXIgbG9ja19mcygpIG1heSBub3QgYmUgZmx1c2hlZC4KKwkgKiBub2ZsdXNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBkb19sb2NrZnMuCisJICogKGxvY2tfZnMoKSBmbHVzaGVzIEkvT3MgYW5kIHdhaXRzIGZvciB0aGVtIHRvIGNvbXBsZXRlLikKKwkgKi8KKwlpZiAoIW5vZmx1c2ggJiYgZG9fbG9ja2ZzKSB7CisJCXIgPSBsb2NrX2ZzKG1kKTsKKwkJaWYgKHIpIHsKKwkJCWRtX3RhYmxlX3ByZXN1c3BlbmRfdW5kb190YXJnZXRzKG1hcCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCX0KKworCS8qCisJICogSGVyZSB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5vIHByb2Nlc3NlcyBhcmUgc3VibWl0dGluZyByZXF1ZXN0cworCSAqIHRvIHRhcmdldCBkcml2ZXJzIGkuZS4gbm8gb25lIG1heSBiZSBleGVjdXRpbmcKKwkgKiBfX3NwbGl0X2FuZF9wcm9jZXNzX2Jpby4gVGhpcyBpcyBjYWxsZWQgZnJvbSBkbV9yZXF1ZXN0IGFuZAorCSAqIGRtX3dxX3dvcmsuCisJICoKKwkgKiBUbyBnZXQgYWxsIHByb2Nlc3NlcyBvdXQgb2YgX19zcGxpdF9hbmRfcHJvY2Vzc19iaW8gaW4gZG1fcmVxdWVzdCwKKwkgKiB3ZSB0YWtlIHRoZSB3cml0ZSBsb2NrLiBUbyBwcmV2ZW50IGFueSBwcm9jZXNzIGZyb20gcmVlbnRlcmluZworCSAqIF9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvIGZyb20gZG1fcmVxdWVzdCBhbmQgcXVpZXNjZSB0aGUgdGhyZWFkCisJICogKGRtX3dxX3dvcmspLCB3ZSBzZXQgQk1GX0JMT0NLX0lPX0ZPUl9TVVNQRU5EIGFuZCBjYWxsCisJICogZmx1c2hfd29ya3F1ZXVlKG1kLT53cSkuCisJICovCisJc2V0X2JpdChETUZfQkxPQ0tfSU9fRk9SX1NVU1BFTkQsICZtZC0+ZmxhZ3MpOworCWlmIChtYXApCisJCXN5bmNocm9uaXplX3NyY3UoJm1kLT5pb19iYXJyaWVyKTsKKworCS8qCisJICogU3RvcCBtZC0+cXVldWUgYmVmb3JlIGZsdXNoaW5nIG1kLT53cSBpbiBjYXNlIHJlcXVlc3QtYmFzZWQKKwkgKiBkbSBkZWZlcnMgcmVxdWVzdHMgdG8gbWQtPndxIGZyb20gbWQtPnF1ZXVlLgorCSAqLworCWlmIChkbV9yZXF1ZXN0X2Jhc2VkKG1kKSkKKwkJc3RvcF9xdWV1ZShtZC0+cXVldWUpOworCisJZmx1c2hfd29ya3F1ZXVlKG1kLT53cSk7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQgbm8gbW9yZSByZXF1ZXN0cyBhcmUgZW50ZXJpbmcgdGFyZ2V0IHJlcXVlc3Qgcm91dGluZXMuCisJICogV2UgY2FsbCBkbV93YWl0X2Zvcl9jb21wbGV0aW9uIHRvIHdhaXQgZm9yIGFsbCBleGlzdGluZyByZXF1ZXN0cworCSAqIHRvIGZpbmlzaC4KKwkgKi8KKwlyID0gZG1fd2FpdF9mb3JfY29tcGxldGlvbihtZCwgaW50ZXJydXB0aWJsZSk7CisKKwlpZiAobm9mbHVzaCkKKwkJY2xlYXJfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOworCWlmIChtYXApCisJCXN5bmNocm9uaXplX3NyY3UoJm1kLT5pb19iYXJyaWVyKTsKKworCS8qIHdlcmUgd2UgaW50ZXJydXB0ZWQgPyAqLworCWlmIChyIDwgMCkgeworCQlkbV9xdWV1ZV9mbHVzaChtZCk7CisKKwkJaWYgKGRtX3JlcXVlc3RfYmFzZWQobWQpKQorCQkJc3RhcnRfcXVldWUobWQtPnF1ZXVlKTsKKworCQl1bmxvY2tfZnMobWQpOworCQlkbV90YWJsZV9wcmVzdXNwZW5kX3VuZG9fdGFyZ2V0cyhtYXApOworCQkvKiBwdXNoYmFjayBsaXN0IGlzIGFscmVhZHkgZmx1c2hlZCwgc28gc2tpcCBmbHVzaCAqLworCX0KKworCXJldHVybiByOworfQorCisvKgogICogV2UgbmVlZCB0byBiZSBhYmxlIHRvIGNoYW5nZSBhIG1hcHBpbmcgdGFibGUgdW5kZXIgYSBtb3VudGVkCiAgKiBmaWxlc3lzdGVtLiAgRm9yIGV4YW1wbGUgd2UgbWlnaHQgd2FudCB0byBtb3ZlIHNvbWUgZGF0YSBpbgogICogdGhlIGJhY2tncm91bmQuICBCZWZvcmUgdGhlIHRhYmxlIGNhbiBiZSBzd2FwcGVkIHdpdGgKQEAgLTI3MzUsOTEgKzI4MzIsMjkgQEAKIHsKIAlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IE5VTEw7CiAJaW50IHIgPSAwOwotCWludCBkb19sb2NrZnMgPSBzdXNwZW5kX2ZsYWdzICYgRE1fU1VTUEVORF9MT0NLRlNfRkxBRyA/IDEgOiAwOwotCWludCBub2ZsdXNoID0gc3VzcGVuZF9mbGFncyAmIERNX1NVU1BFTkRfTk9GTFVTSF9GTEFHID8gMSA6IDA7CiAKLQltdXRleF9sb2NrKCZtZC0+c3VzcGVuZF9sb2NrKTsKK3JldHJ5OgorCW11dGV4X2xvY2tfbmVzdGVkKCZtZC0+c3VzcGVuZF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlpZiAoZG1fc3VzcGVuZGVkX21kKG1kKSkgewogCQlyID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCW1hcCA9IG1kLT5tYXA7Ci0KLQkvKgotCSAqIERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcgbXVzdCBiZSBzZXQgYmVmb3JlIHByZXN1c3BlbmQuCi0JICogVGhpcyBmbGFnIGlzIGNsZWFyZWQgYmVmb3JlIGRtX3N1c3BlbmQgcmV0dXJucy4KLQkgKi8KLQlpZiAobm9mbHVzaCkKLQkJc2V0X2JpdChETUZfTk9GTFVTSF9TVVNQRU5ESU5HLCAmbWQtPmZsYWdzKTsKLQotCS8qIFRoaXMgZG9lcyBub3QgZ2V0IHJldmVydGVkIGlmIHRoZXJlJ3MgYW4gZXJyb3IgbGF0ZXIuICovCi0JZG1fdGFibGVfcHJlc3VzcGVuZF90YXJnZXRzKG1hcCk7Ci0KLQkvKgotCSAqIEZsdXNoIEkvTyB0byB0aGUgZGV2aWNlLgotCSAqIEFueSBJL08gc3VibWl0dGVkIGFmdGVyIGxvY2tfZnMoKSBtYXkgbm90IGJlIGZsdXNoZWQuCi0JICogbm9mbHVzaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZG9fbG9ja2ZzLgotCSAqIChsb2NrX2ZzKCkgZmx1c2hlcyBJL09zIGFuZCB3YWl0cyBmb3IgdGhlbSB0byBjb21wbGV0ZS4pCi0JICovCi0JaWYgKCFub2ZsdXNoICYmIGRvX2xvY2tmcykgewotCQlyID0gbG9ja19mcyhtZCk7CisJaWYgKGRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkgeworCQkvKiBhbHJlYWR5IGludGVybmFsbHkgc3VzcGVuZGVkLCB3YWl0IGZvciBpbnRlcm5hbCByZXN1bWUgKi8KKwkJbXV0ZXhfdW5sb2NrKCZtZC0+c3VzcGVuZF9sb2NrKTsKKwkJciA9IHdhaXRfb25fYml0KCZtZC0+ZmxhZ3MsIERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKHIpCi0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlyZXR1cm4gcjsKKwkJZ290byByZXRyeTsKIAl9CiAKLQkvKgotCSAqIEhlcmUgd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBubyBwcm9jZXNzZXMgYXJlIHN1Ym1pdHRpbmcgcmVxdWVzdHMKLQkgKiB0byB0YXJnZXQgZHJpdmVycyBpLmUuIG5vIG9uZSBtYXkgYmUgZXhlY3V0aW5nCi0JICogX19zcGxpdF9hbmRfcHJvY2Vzc19iaW8uIFRoaXMgaXMgY2FsbGVkIGZyb20gZG1fcmVxdWVzdCBhbmQKLQkgKiBkbV93cV93b3JrLgotCSAqCi0JICogVG8gZ2V0IGFsbCBwcm9jZXNzZXMgb3V0IG9mIF9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvIGluIGRtX3JlcXVlc3QsCi0JICogd2UgdGFrZSB0aGUgd3JpdGUgbG9jay4gVG8gcHJldmVudCBhbnkgcHJvY2VzcyBmcm9tIHJlZW50ZXJpbmcKLQkgKiBfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyBmcm9tIGRtX3JlcXVlc3QgYW5kIHF1aWVzY2UgdGhlIHRocmVhZAotCSAqIChkbV93cV93b3JrKSwgd2Ugc2V0IEJNRl9CTE9DS19JT19GT1JfU1VTUEVORCBhbmQgY2FsbAotCSAqIGZsdXNoX3dvcmtxdWV1ZShtZC0+d3EpLgotCSAqLwotCXNldF9iaXQoRE1GX0JMT0NLX0lPX0ZPUl9TVVNQRU5ELCAmbWQtPmZsYWdzKTsKLQlzeW5jaHJvbml6ZV9zcmN1KCZtZC0+aW9fYmFycmllcik7CisJbWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZC0+bWFwLCBsb2NrZGVwX2lzX2hlbGQoJm1kLT5zdXNwZW5kX2xvY2spKTsKIAotCS8qCi0JICogU3RvcCBtZC0+cXVldWUgYmVmb3JlIGZsdXNoaW5nIG1kLT53cSBpbiBjYXNlIHJlcXVlc3QtYmFzZWQKLQkgKiBkbSBkZWZlcnMgcmVxdWVzdHMgdG8gbWQtPndxIGZyb20gbWQtPnF1ZXVlLgotCSAqLwotCWlmIChkbV9yZXF1ZXN0X2Jhc2VkKG1kKSkKLQkJc3RvcF9xdWV1ZShtZC0+cXVldWUpOwotCi0JZmx1c2hfd29ya3F1ZXVlKG1kLT53cSk7Ci0KLQkvKgotCSAqIEF0IHRoaXMgcG9pbnQgbm8gbW9yZSByZXF1ZXN0cyBhcmUgZW50ZXJpbmcgdGFyZ2V0IHJlcXVlc3Qgcm91dGluZXMuCi0JICogV2UgY2FsbCBkbV93YWl0X2Zvcl9jb21wbGV0aW9uIHRvIHdhaXQgZm9yIGFsbCBleGlzdGluZyByZXF1ZXN0cwotCSAqIHRvIGZpbmlzaC4KLQkgKi8KLQlyID0gZG1fd2FpdF9mb3JfY29tcGxldGlvbihtZCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCWlmIChub2ZsdXNoKQotCQljbGVhcl9iaXQoRE1GX05PRkxVU0hfU1VTUEVORElORywgJm1kLT5mbGFncyk7Ci0Jc3luY2hyb25pemVfc3JjdSgmbWQtPmlvX2JhcnJpZXIpOwotCi0JLyogd2VyZSB3ZSBpbnRlcnJ1cHRlZCA/ICovCi0JaWYgKHIgPCAwKSB7Ci0JCWRtX3F1ZXVlX2ZsdXNoKG1kKTsKLQotCQlpZiAoZG1fcmVxdWVzdF9iYXNlZChtZCkpCi0JCQlzdGFydF9xdWV1ZShtZC0+cXVldWUpOwotCi0JCXVubG9ja19mcyhtZCk7Ci0JCWdvdG8gb3V0X3VubG9jazsgLyogcHVzaGJhY2sgbGlzdCBpcyBhbHJlYWR5IGZsdXNoZWQsIHNvIHNraXAgZmx1c2ggKi8KLQl9Ci0KLQkvKgotCSAqIElmIGRtX3dhaXRfZm9yX2NvbXBsZXRpb24gcmV0dXJuZWQgMCwgdGhlIGRldmljZSBpcyBjb21wbGV0ZWx5Ci0JICogcXVpZXNjZW50IG5vdy4gVGhlcmUgaXMgbm8gcmVxdWVzdC1wcm9jZXNzaW5nIGFjdGl2aXR5LiBBbGwgbmV3Ci0JICogcmVxdWVzdHMgYXJlIGJlaW5nIGFkZGVkIHRvIG1kLT5kZWZlcnJlZCBsaXN0LgotCSAqLworCXIgPSBfX2RtX3N1c3BlbmQobWQsIG1hcCwgc3VzcGVuZF9mbGFncywgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlpZiAocikKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJc2V0X2JpdChETUZfU1VTUEVOREVELCAmbWQtPmZsYWdzKTsKIApAQCAtMjgzMCwyMiArMjg2NSwxMyBAQAogCXJldHVybiByOwogfQogCi1pbnQgZG1fcmVzdW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3N0YXRpYyBpbnQgX19kbV9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBzdHJ1Y3QgZG1fdGFibGUgKm1hcCkKIHsKLQlpbnQgciA9IC1FSU5WQUw7Ci0Jc3RydWN0IGRtX3RhYmxlICptYXAgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmbWQtPnN1c3BlbmRfbG9jayk7Ci0JaWYgKCFkbV9zdXNwZW5kZWRfbWQobWQpKQotCQlnb3RvIG91dDsKLQotCW1hcCA9IG1kLT5tYXA7Ci0JaWYgKCFtYXAgfHwgIWRtX3RhYmxlX2dldF9zaXplKG1hcCkpCi0JCWdvdG8gb3V0OwotCi0JciA9IGRtX3RhYmxlX3Jlc3VtZV90YXJnZXRzKG1hcCk7Ci0JaWYgKHIpCi0JCWdvdG8gb3V0OworCWlmIChtYXApIHsKKwkJaW50IHIgPSBkbV90YWJsZV9yZXN1bWVfdGFyZ2V0cyhtYXApOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KIAogCWRtX3F1ZXVlX2ZsdXNoKG1kKTsKIApAQCAtMjg1OSw2ICsyODg1LDM3IEBACiAKIAl1bmxvY2tfZnMobWQpOwogCisJcmV0dXJuIDA7Cit9CisKK2ludCBkbV9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCWludCByID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IE5VTEw7CisKK3JldHJ5OgorCW11dGV4X2xvY2tfbmVzdGVkKCZtZC0+c3VzcGVuZF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisKKwlpZiAoIWRtX3N1c3BlbmRlZF9tZChtZCkpCisJCWdvdG8gb3V0OworCisJaWYgKGRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkgeworCQkvKiBhbHJlYWR5IGludGVybmFsbHkgc3VzcGVuZGVkLCB3YWl0IGZvciBpbnRlcm5hbCByZXN1bWUgKi8KKwkJbXV0ZXhfdW5sb2NrKCZtZC0+c3VzcGVuZF9sb2NrKTsKKwkJciA9IHdhaXRfb25fYml0KCZtZC0+ZmxhZ3MsIERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJZ290byByZXRyeTsKKwl9CisKKwltYXAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1kLT5tYXAsIGxvY2tkZXBfaXNfaGVsZCgmbWQtPnN1c3BlbmRfbG9jaykpOworCWlmICghbWFwIHx8ICFkbV90YWJsZV9nZXRfc2l6ZShtYXApKQorCQlnb3RvIG91dDsKKworCXIgPSBfX2RtX3Jlc3VtZShtZCwgbWFwKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKIAljbGVhcl9iaXQoRE1GX1NVU1BFTkRFRCwgJm1kLT5mbGFncyk7CiAKIAlyID0gMDsKQEAgLTI4NzIsMTUgKzI5MjksODAgQEAKICAqIEludGVybmFsIHN1c3BlbmQvcmVzdW1lIHdvcmtzIGxpa2UgdXNlcnNwYWNlLWRyaXZlbiBzdXNwZW5kLiBJdCB3YWl0cwogICogdW50aWwgYWxsIGJpb3MgZmluaXNoIGFuZCBwcmV2ZW50cyBpc3N1aW5nIG5ldyBiaW9zIHRvIHRoZSB0YXJnZXQgZHJpdmVycy4KICAqIEl0IG1heSBiZSB1c2VkIG9ubHkgZnJvbSB0aGUga2VybmVsLgotICoKLSAqIEludGVybmFsIHN1c3BlbmQgaG9sZHMgbWQtPnN1c3BlbmRfbG9jaywgd2hpY2ggcHJldmVudHMgaW50ZXJhY3Rpb24gd2l0aAotICogdXNlcnNwYWNlLWRyaXZlbiBzdXNwZW5kLgogICovCiAKLXZvaWQgZG1faW50ZXJuYWxfc3VzcGVuZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCitzdGF0aWMgdm9pZCBfX2RtX2ludGVybmFsX3N1c3BlbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCB1bnNpZ25lZCBzdXNwZW5kX2ZsYWdzKQoreworCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gTlVMTDsKKworCWlmIChkbV9zdXNwZW5kZWRfaW50ZXJuYWxseV9tZChtZCkpCisJCXJldHVybjsgLyogbmVzdGVkIGludGVybmFsIHN1c3BlbmQgKi8KKworCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKSB7CisJCXNldF9iaXQoRE1GX1NVU1BFTkRFRF9JTlRFUk5BTExZLCAmbWQtPmZsYWdzKTsKKwkJcmV0dXJuOyAvKiBuZXN0IHN1c3BlbmQgKi8KKwl9CisKKwltYXAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1kLT5tYXAsIGxvY2tkZXBfaXNfaGVsZCgmbWQtPnN1c3BlbmRfbG9jaykpOworCisJLyoKKwkgKiBVc2luZyBUQVNLX1VOSU5URVJSVVBUSUJMRSBiZWNhdXNlIG9ubHkgTk9GTFVTSCBpbnRlcm5hbCBzdXNwZW5kIGlzCisJICogc3VwcG9ydGVkLiAgUHJvcGVybHkgc3VwcG9ydGluZyBhIFRBU0tfSU5URVJSVVBUSUJMRSBpbnRlcm5hbCBzdXNwZW5kCisJICogd291bGQgcmVxdWlyZSBjaGFuZ2luZyAucHJlc3VzcGVuZCB0byByZXR1cm4gYW4gZXJyb3IgLS0gYXZvaWQgdGhpcworCSAqIHVudGlsIHRoZXJlIGlzIGEgbmVlZCBmb3IgbW9yZSBlbGFib3JhdGUgdmFyaWFudHMgb2YgaW50ZXJuYWwgc3VzcGVuZC4KKwkgKi8KKwkodm9pZCkgX19kbV9zdXNwZW5kKG1kLCBtYXAsIHN1c3BlbmRfZmxhZ3MsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCXNldF9iaXQoRE1GX1NVU1BFTkRFRF9JTlRFUk5BTExZLCAmbWQtPmZsYWdzKTsKKworCWRtX3RhYmxlX3Bvc3RzdXNwZW5kX3RhcmdldHMobWFwKTsKK30KKworc3RhdGljIHZvaWQgX19kbV9pbnRlcm5hbF9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCWlmICghZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQobWQpKQorCQlyZXR1cm47IC8qIHJlc3VtZSBmcm9tIG5lc3RlZCBpbnRlcm5hbCBzdXNwZW5kICovCisKKwlpZiAoZG1fc3VzcGVuZGVkX21kKG1kKSkKKwkJZ290byBkb25lOyAvKiByZXN1bWUgZnJvbSBuZXN0ZWQgc3VzcGVuZCAqLworCisJLyoKKwkgKiBOT1RFOiBleGlzdGluZyBjYWxsZXJzIGRvbid0IG5lZWQgdG8gY2FsbCBkbV90YWJsZV9yZXN1bWVfdGFyZ2V0cworCSAqICh3aGljaCBtYXkgZmFpbCAtLSBzbyBiZXN0IHRvIGF2b2lkIGl0IGZvciBub3cgYnkgcGFzc2luZyBOVUxMIG1hcCkKKwkgKi8KKwkodm9pZCkgX19kbV9yZXN1bWUobWQsIE5VTEwpOworCitkb25lOgorCWNsZWFyX2JpdChETUZfU1VTUEVOREVEX0lOVEVSTkFMTFksICZtZC0+ZmxhZ3MpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CisJd2FrZV91cF9iaXQoJm1kLT5mbGFncywgRE1GX1NVU1BFTkRFRF9JTlRFUk5BTExZKTsKK30KKwordm9pZCBkbV9pbnRlcm5hbF9zdXNwZW5kX25vZmx1c2goc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewogCW11dGV4X2xvY2soJm1kLT5zdXNwZW5kX2xvY2spOwotCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKQorCV9fZG1faW50ZXJuYWxfc3VzcGVuZChtZCwgRE1fU1VTUEVORF9OT0ZMVVNIX0ZMQUcpOworCW11dGV4X3VubG9jaygmbWQtPnN1c3BlbmRfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9pbnRlcm5hbF9zdXNwZW5kX25vZmx1c2gpOworCit2b2lkIGRtX2ludGVybmFsX3Jlc3VtZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCit7CisJbXV0ZXhfbG9jaygmbWQtPnN1c3BlbmRfbG9jayk7CisJX19kbV9pbnRlcm5hbF9yZXN1bWUobWQpOworCW11dGV4X3VubG9jaygmbWQtPnN1c3BlbmRfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9pbnRlcm5hbF9yZXN1bWUpOworCisvKgorICogRmFzdCB2YXJpYW50cyBvZiBpbnRlcm5hbCBzdXNwZW5kL3Jlc3VtZSBob2xkIG1kLT5zdXNwZW5kX2xvY2ssCisgKiB3aGljaCBwcmV2ZW50cyBpbnRlcmFjdGlvbiB3aXRoIHVzZXJzcGFjZS1kcml2ZW4gc3VzcGVuZC4KKyAqLworCit2b2lkIGRtX2ludGVybmFsX3N1c3BlbmRfZmFzdChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCit7CisJbXV0ZXhfbG9jaygmbWQtPnN1c3BlbmRfbG9jayk7CisJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkgfHwgZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQobWQpKQogCQlyZXR1cm47CiAKIAlzZXRfYml0KERNRl9CTE9DS19JT19GT1JfU1VTUEVORCwgJm1kLT5mbGFncyk7CkBAIC0yODg5LDkgKzMwMTEsOSBAQAogCWRtX3dhaXRfZm9yX2NvbXBsZXRpb24obWQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIH0KIAotdm9pZCBkbV9pbnRlcm5hbF9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQordm9pZCBkbV9pbnRlcm5hbF9yZXN1bWVfZmFzdChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7Ci0JaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpCisJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkgfHwgZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQobWQpKQogCQlnb3RvIGRvbmU7CiAKIAlkbV9xdWV1ZV9mbHVzaChtZCk7CkBAIC0yOTc3LDYgKzMwOTksMTEgQEAKIAlyZXR1cm4gdGVzdF9iaXQoRE1GX1NVU1BFTkRFRCwgJm1kLT5mbGFncyk7CiB9CiAKK2ludCBkbV9zdXNwZW5kZWRfaW50ZXJuYWxseV9tZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCit7CisJcmV0dXJuIHRlc3RfYml0KERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSwgJm1kLT5mbGFncyk7Cit9CisKIGludCBkbV90ZXN0X2RlZmVycmVkX3JlbW92ZV9mbGFnKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKIHsKIAlyZXR1cm4gdGVzdF9iaXQoRE1GX0RFRkVSUkVEX1JFTU9WRSwgJm1kLT5mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmggYi9kcml2ZXJzL21kL2RtLmgKaW5kZXggOTg4YzdmYi4uODRiMGY5ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uaAorKysgYi9kcml2ZXJzL21kL2RtLmgKQEAgLTY1LDYgKzY1LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1pdHMpOwogc3RydWN0IGxpc3RfaGVhZCAqZG1fdGFibGVfZ2V0X2RldmljZXMoc3RydWN0IGRtX3RhYmxlICp0KTsKIHZvaWQgZG1fdGFibGVfcHJlc3VzcGVuZF90YXJnZXRzKHN0cnVjdCBkbV90YWJsZSAqdCk7Cit2b2lkIGRtX3RhYmxlX3ByZXN1c3BlbmRfdW5kb190YXJnZXRzKHN0cnVjdCBkbV90YWJsZSAqdCk7CiB2b2lkIGRtX3RhYmxlX3Bvc3RzdXNwZW5kX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0KTsKIGludCBkbV90YWJsZV9yZXN1bWVfdGFyZ2V0cyhzdHJ1Y3QgZG1fdGFibGUgKnQpOwogaW50IGRtX3RhYmxlX2FueV9jb25nZXN0ZWQoc3RydWN0IGRtX3RhYmxlICp0LCBpbnQgYmRpX2JpdHMpOwpAQCAtMTI5LDYgKzEzMCwxNSBAQAogaW50IGRtX3N1c3BlbmRlZF9tZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwogCiAvKgorICogSW50ZXJuYWwgc3VzcGVuZCBhbmQgcmVzdW1lIG1ldGhvZHMuCisgKi8KK2ludCBkbV9zdXNwZW5kZWRfaW50ZXJuYWxseV9tZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwordm9pZCBkbV9pbnRlcm5hbF9zdXNwZW5kX2Zhc3Qoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKK3ZvaWQgZG1faW50ZXJuYWxfcmVzdW1lX2Zhc3Qoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKK3ZvaWQgZG1faW50ZXJuYWxfc3VzcGVuZF9ub2ZsdXNoKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7Cit2b2lkIGRtX2ludGVybmFsX3Jlc3VtZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOworCisvKgogICogVGVzdCBpZiB0aGUgZGV2aWNlIGlzIHNjaGVkdWxlZCBmb3IgZGVmZXJyZWQgcmVtb3ZlLgogICovCiBpbnQgZG1fdGVzdF9kZWZlcnJlZF9yZW1vdmVfZmxhZyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDRkZmExNWQuLjkyMzNjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTUxMjEsNiArNTEyMSw3IEBACiAJCXByaW50aygibWQ6ICVzIHN0aWxsIGluIHVzZS5cbiIsbWRuYW1lKG1kZGV2KSk7CiAJCWlmIChkaWRfZnJlZXplKSB7CiAJCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfRlJPWkVOLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJCX0KIAkJZXJyID0gLUVCVVNZOwpAQCAtNTEzNSw2ICs1MTM2LDggQEAKIAkJbWRkZXYtPnJvID0gMTsKIAkJc2V0X2Rpc2tfcm8obWRkZXYtPmdlbmRpc2ssIDEpOwogCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfRlJPWkVOLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOworCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX3N0YXRlKTsKIAkJZXJyID0gMDsKIAl9CkBAIC01MTc4LDYgKzUxODEsNyBAQAogCQltdXRleF91bmxvY2soJm1kZGV2LT5vcGVuX211dGV4KTsKIAkJaWYgKGRpZF9mcmVlemUpIHsKIAkJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9GUk9aRU4sICZtZGRldi0+cmVjb3ZlcnkpOworCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJfQogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYXJyYXkuYyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWFycmF5LmMKaW5kZXggMWQ3NWIxZC4uZTY0YjYxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWFycmF5LmMKKysrIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYXJyYXkuYwpAQCAtNjQ1LDggKzY0NSwxMCBAQAogCWludCByOwogCXN0cnVjdCByZXNpemUgcmVzaXplOwogCi0JaWYgKG9sZF9zaXplID09IG5ld19zaXplKQorCWlmIChvbGRfc2l6ZSA9PSBuZXdfc2l6ZSkgeworCQkqbmV3X3Jvb3QgPSByb290OwogCQlyZXR1cm4gMDsKKwl9CiAKIAlyZXNpemUuaW5mbyA9IGluZm87CiAJcmVzaXplLnJvb3QgPSByb290OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYnRyZWUtaW50ZXJuYWwuaCBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWJ0cmVlLWludGVybmFsLmgKaW5kZXggMzdkMzY3Yi4uYmYyYjgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYnRyZWUtaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1idHJlZS1pbnRlcm5hbC5oCkBAIC00Miw2ICs0MiwxMiBAQAogfSBfX3BhY2tlZDsKIAogCisvKgorICogTG9ja3MgYSBibG9jayB1c2luZyB0aGUgYnRyZWUgbm9kZSB2YWxpZGF0b3IuCisgKi8KK2ludCBibl9yZWFkX2xvY2soc3RydWN0IGRtX2J0cmVlX2luZm8gKmluZm8sIGRtX2Jsb2NrX3QgYiwKKwkJIHN0cnVjdCBkbV9ibG9jayAqKnJlc3VsdCk7CisKIHZvaWQgaW5jX2NoaWxkcmVuKHN0cnVjdCBkbV90cmFuc2FjdGlvbl9tYW5hZ2VyICp0bSwgc3RydWN0IGJ0cmVlX25vZGUgKm4sCiAJCSAgc3RydWN0IGRtX2J0cmVlX3ZhbHVlX3R5cGUgKnZ0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYnRyZWUtc3BpbmUuYyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWJ0cmVlLXNwaW5lLmMKaW5kZXggY2Y5ZmQ2Ny4uMWI1ZTEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYnRyZWUtc3BpbmUuYworKysgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1idHJlZS1zcGluZS5jCkBAIC05Miw3ICs5Miw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgYm5fcmVhZF9sb2NrKHN0cnVjdCBkbV9idHJlZV9pbmZvICppbmZvLCBkbV9ibG9ja190IGIsCitpbnQgYm5fcmVhZF9sb2NrKHN0cnVjdCBkbV9idHJlZV9pbmZvICppbmZvLCBkbV9ibG9ja190IGIsCiAJCSBzdHJ1Y3QgZG1fYmxvY2sgKipyZXN1bHQpCiB7CiAJcmV0dXJuIGRtX3RtX3JlYWRfbG9jayhpbmZvLT50bSwgYiwgJmJ0cmVlX25vZGVfdmFsaWRhdG9yLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYnRyZWUuYyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWJ0cmVlLmMKaW5kZXggNDE2MDYwYy4uMjAwYWMxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYnRyZWUuYworKysgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1idHJlZS5jCkBAIC04NDcsMjIgKzg0NywyNiBAQAogICogRklYTUU6IFdlIHNob3VsZG4ndCB1c2UgYSByZWN1cnNpdmUgYWxnb3JpdGhtIHdoZW4gd2UgaGF2ZSBsaW1pdGVkIHN0YWNrCiAgKiBzcGFjZS4gIEFsc28gdGhpcyBvbmx5IHdvcmtzIGZvciBzaW5nbGUgbGV2ZWwgdHJlZXMuCiAgKi8KLXN0YXRpYyBpbnQgd2Fsa19ub2RlKHN0cnVjdCByb19zcGluZSAqcywgZG1fYmxvY2tfdCBibG9jaywKK3N0YXRpYyBpbnQgd2Fsa19ub2RlKHN0cnVjdCBkbV9idHJlZV9pbmZvICppbmZvLCBkbV9ibG9ja190IGJsb2NrLAogCQkgICAgIGludCAoKmZuKSh2b2lkICpjb250ZXh0LCB1aW50NjRfdCAqa2V5cywgdm9pZCAqbGVhZiksCiAJCSAgICAgdm9pZCAqY29udGV4dCkKIHsKIAlpbnQgcjsKIAl1bnNpZ25lZCBpLCBucjsKKwlzdHJ1Y3QgZG1fYmxvY2sgKm5vZGU7CiAJc3RydWN0IGJ0cmVlX25vZGUgKm47CiAJdWludDY0X3Qga2V5czsKIAotCXIgPSByb19zdGVwKHMsIGJsb2NrKTsKLQluID0gcm9fbm9kZShzKTsKKwlyID0gYm5fcmVhZF9sb2NrKGluZm8sIGJsb2NrLCAmbm9kZSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJbiA9IGRtX2Jsb2NrX2RhdGEobm9kZSk7CiAKIAluciA9IGxlMzJfdG9fY3B1KG4tPmhlYWRlci5ucl9lbnRyaWVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgewogCQlpZiAobGUzMl90b19jcHUobi0+aGVhZGVyLmZsYWdzKSAmIElOVEVSTkFMX05PREUpIHsKLQkJCXIgPSB3YWxrX25vZGUocywgdmFsdWU2NChuLCBpKSwgZm4sIGNvbnRleHQpOworCQkJciA9IHdhbGtfbm9kZShpbmZvLCB2YWx1ZTY0KG4sIGkpLCBmbiwgY29udGV4dCk7CiAJCQlpZiAocikKIAkJCQlnb3RvIG91dDsKIAkJfSBlbHNlIHsKQEAgLTg3NCw3ICs4NzgsNyBAQAogCX0KIAogb3V0OgotCXJvX3BvcChzKTsKKwlkbV90bV91bmxvY2soaW5mby0+dG0sIG5vZGUpOwogCXJldHVybiByOwogfQogCkBAIC04ODIsMTUgKzg4Niw3IEBACiAJCSAgaW50ICgqZm4pKHZvaWQgKmNvbnRleHQsIHVpbnQ2NF90ICprZXlzLCB2b2lkICpsZWFmKSwKIAkJICB2b2lkICpjb250ZXh0KQogewotCWludCByOwotCXN0cnVjdCByb19zcGluZSBzcGluZTsKLQogCUJVR19PTihpbmZvLT5sZXZlbHMgPiAxKTsKLQotCWluaXRfcm9fc3BpbmUoJnNwaW5lLCBpbmZvKTsKLQlyID0gd2Fsa19ub2RlKCZzcGluZSwgcm9vdCwgZm4sIGNvbnRleHQpOwotCWV4aXRfcm9fc3BpbmUoJnNwaW5lKTsKLQotCXJldHVybiByOworCXJldHVybiB3YWxrX25vZGUoaW5mbywgcm9vdCwgZm4sIGNvbnRleHQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fYnRyZWVfd2Fsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1zcGFjZS1tYXAtbWV0YWRhdGEuYyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXNwYWNlLW1hcC1tZXRhZGF0YS5jCmluZGV4IDc4NmI2ODkuLmU4YTkwNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXNwYWNlLW1hcC1tZXRhZGF0YS5jCisrKyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXNwYWNlLW1hcC1tZXRhZGF0YS5jCkBAIC01NjQsNyArNTY0LDkgQEAKIHsKIAlzdHJ1Y3Qgc21fbWV0YWRhdGEgKnNtbSA9IGNvbnRhaW5lcl9vZihzbSwgc3RydWN0IHNtX21ldGFkYXRhLCBzbSk7CiAKLQlyZXR1cm4gc21tLT5sbC5ucl9ibG9ja3M7CisJKmNvdW50ID0gc21tLT5sbC5ucl9ibG9ja3M7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbV9ib290c3RyYXBfZ2V0X25yX2ZyZWUoc3RydWN0IGRtX3NwYWNlX21hcCAqc20sIGRtX2Jsb2NrX3QgKmNvdW50KQpAQCAtNTgxLDcgKzU4Myw5IEBACiB7CiAJc3RydWN0IHNtX21ldGFkYXRhICpzbW0gPSBjb250YWluZXJfb2Yoc20sIHN0cnVjdCBzbV9tZXRhZGF0YSwgc20pOwogCi0JcmV0dXJuIGIgPCBzbW0tPmJlZ2luID8gMSA6IDA7CisJKnJlc3VsdCA9IChiIDwgc21tLT5iZWdpbikgPyAxIDogMDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNtX2Jvb3RzdHJhcF9jb3VudF9pc19tb3JlX3RoYW5fb25lKHN0cnVjdCBkbV9zcGFjZV9tYXAgKnNtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tdHJhbnNhY3Rpb24tbWFuYWdlci5jIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tdHJhbnNhY3Rpb24tbWFuYWdlci5jCmluZGV4IDNiYzMwYTAuLjljYjc5N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXRyYW5zYWN0aW9uLW1hbmFnZXIuYworKysgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS10cmFuc2FjdGlvbi1tYW5hZ2VyLmMKQEAgLTEwLDYgKzEwLDggQEAKICNpbmNsdWRlICJkbS1wZXJzaXN0ZW50LWRhdGEtaW50ZXJuYWwuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UtbWFwcGVyLmg+CiAKQEAgLTE3LDYgKzE5LDYxIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNkZWZpbmUgUFJFRkVUQ0hfU0laRSAxMjgKKyNkZWZpbmUgUFJFRkVUQ0hfQklUUyA3CisjZGVmaW5lIFBSRUZFVENIX1NFTlRJTkVMICgoZG1fYmxvY2tfdCkgLTFVTEwpCisKK3N0cnVjdCBwcmVmZXRjaF9zZXQgeworCXN0cnVjdCBtdXRleCBsb2NrOworCWRtX2Jsb2NrX3QgYmxvY2tzW1BSRUZFVENIX1NJWkVdOworfTsKKworc3RhdGljIHVuc2lnbmVkIHByZWZldGNoX2hhc2goZG1fYmxvY2tfdCBiKQoreworCXJldHVybiBoYXNoXzY0KGIsIFBSRUZFVENIX0JJVFMpOworfQorCitzdGF0aWMgdm9pZCBwcmVmZXRjaF93aXBlKHN0cnVjdCBwcmVmZXRjaF9zZXQgKnApCit7CisJdW5zaWduZWQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgUFJFRkVUQ0hfU0laRTsgaSsrKQorCQlwLT5ibG9ja3NbaV0gPSBQUkVGRVRDSF9TRU5USU5FTDsKK30KKworc3RhdGljIHZvaWQgcHJlZmV0Y2hfaW5pdChzdHJ1Y3QgcHJlZmV0Y2hfc2V0ICpwKQoreworCW11dGV4X2luaXQoJnAtPmxvY2spOworCXByZWZldGNoX3dpcGUocCk7Cit9CisKK3N0YXRpYyB2b2lkIHByZWZldGNoX2FkZChzdHJ1Y3QgcHJlZmV0Y2hfc2V0ICpwLCBkbV9ibG9ja190IGIpCit7CisJdW5zaWduZWQgaCA9IHByZWZldGNoX2hhc2goYik7CisKKwltdXRleF9sb2NrKCZwLT5sb2NrKTsKKwlpZiAocC0+YmxvY2tzW2hdID09IFBSRUZFVENIX1NFTlRJTkVMKQorCQlwLT5ibG9ja3NbaF0gPSBiOworCisJbXV0ZXhfdW5sb2NrKCZwLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcHJlZmV0Y2hfaXNzdWUoc3RydWN0IHByZWZldGNoX3NldCAqcCwgc3RydWN0IGRtX2Jsb2NrX21hbmFnZXIgKmJtKQoreworCXVuc2lnbmVkIGk7CisKKwltdXRleF9sb2NrKCZwLT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBQUkVGRVRDSF9TSVpFOyBpKyspCisJCWlmIChwLT5ibG9ja3NbaV0gIT0gUFJFRkVUQ0hfU0VOVElORUwpIHsKKwkJCWRtX2JtX3ByZWZldGNoKGJtLCBwLT5ibG9ja3NbaV0pOworCQkJcC0+YmxvY2tzW2ldID0gUFJFRkVUQ0hfU0VOVElORUw7CisJCX0KKworCW11dGV4X3VubG9jaygmcC0+bG9jayk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0cnVjdCBzaGFkb3dfaW5mbyB7CiAJc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7CiAJZG1fYmxvY2tfdCB3aGVyZTsKQEAgLTM3LDYgKzk0LDggQEAKIAogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBidWNrZXRzW0RNX0hBU0hfU0laRV07CisKKwlzdHJ1Y3QgcHJlZmV0Y2hfc2V0IHByZWZldGNoZXM7CiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTE3LDYgKzE3Niw4IEBACiAJZm9yIChpID0gMDsgaSA8IERNX0hBU0hfU0laRTsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQodG0tPmJ1Y2tldHMgKyBpKTsKIAorCXByZWZldGNoX2luaXQoJnRtLT5wcmVmZXRjaGVzKTsKKwogCXJldHVybiB0bTsKIH0KIApAQCAtMjY4LDggKzMyOSwxNCBAQAogCQkgICAgc3RydWN0IGRtX2Jsb2NrX3ZhbGlkYXRvciAqdiwKIAkJICAgIHN0cnVjdCBkbV9ibG9jayAqKmJsaykKIHsKLQlpZiAodG0tPmlzX2Nsb25lKQotCQlyZXR1cm4gZG1fYm1fcmVhZF90cnlfbG9jayh0bS0+cmVhbC0+Ym0sIGIsIHYsIGJsayk7CisJaWYgKHRtLT5pc19jbG9uZSkgeworCQlpbnQgciA9IGRtX2JtX3JlYWRfdHJ5X2xvY2sodG0tPnJlYWwtPmJtLCBiLCB2LCBibGspOworCisJCWlmIChyID09IC1FV09VTERCTE9DSykKKwkJCXByZWZldGNoX2FkZCgmdG0tPnJlYWwtPnByZWZldGNoZXMsIGIpOworCisJCXJldHVybiByOworCX0KIAogCXJldHVybiBkbV9ibV9yZWFkX2xvY2sodG0tPmJtLCBiLCB2LCBibGspOwogfQpAQCAtMzE3LDYgKzM4NCwxMiBAQAogCXJldHVybiB0bS0+Ym07CiB9CiAKK3ZvaWQgZG1fdG1faXNzdWVfcHJlZmV0Y2hlcyhzdHJ1Y3QgZG1fdHJhbnNhY3Rpb25fbWFuYWdlciAqdG0pCit7CisJcHJlZmV0Y2hfaXNzdWUoJnRtLT5wcmVmZXRjaGVzLCB0bS0+Ym0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1fdG1faXNzdWVfcHJlZmV0Y2hlcyk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgZG1fdG1fY3JlYXRlX2ludGVybmFsKHN0cnVjdCBkbV9ibG9ja19tYW5hZ2VyICpibSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXRyYW5zYWN0aW9uLW1hbmFnZXIuaCBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXRyYW5zYWN0aW9uLW1hbmFnZXIuaAppbmRleCAyNzcyZWQyLi4yZTBkNGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS10cmFuc2FjdGlvbi1tYW5hZ2VyLmgKKysrIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tdHJhbnNhY3Rpb24tbWFuYWdlci5oCkBAIC0xMDksNiArMTA5LDEzIEBACiBzdHJ1Y3QgZG1fYmxvY2tfbWFuYWdlciAqZG1fdG1fZ2V0X2JtKHN0cnVjdCBkbV90cmFuc2FjdGlvbl9tYW5hZ2VyICp0bSk7CiAKIC8qCisgKiBJZiB5b3UncmUgdXNpbmcgYSBub24tYmxvY2tpbmcgY2xvbmUgdGhlIHRtIHdpbGwgYnVpbGQgdXAgYSBsaXN0IG9mCisgKiByZXF1ZXN0ZWQgYmxvY2tzIHRoYXQgd2VyZW4ndCBpbiBjb3JlLiAgVGhpcyBjYWxsIHdpbGwgcmVxdWVzdCB0aG9zZQorICogYmxvY2tzIHRvIGJlIHByZWZldGNoZWQuCisgKi8KK3ZvaWQgZG1fdG1faXNzdWVfcHJlZmV0Y2hlcyhzdHJ1Y3QgZG1fdHJhbnNhY3Rpb25fbWFuYWdlciAqdG0pOworCisvKgogICogQSBsaXR0bGUgdXRpbGl0eSB0aGF0IHRpZXMgdGhlIGtub3QgYnkgcHJvZHVjaW5nIGEgdHJhbnNhY3Rpb24gbWFuYWdlcgogICogdGhhdCBoYXMgYSBzcGFjZSBtYXAgbWFuYWdlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlci4uLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IGI4NTc5ZWUuLjJjZjMwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtOTYyLDYgKzk2MiwxMSBAQAogCWNhc2UgU1lTX0FUU0M6CiAJCWMtPm1vZHVsYXRpb24gPSBWU0JfODsKIAkJYnJlYWs7CisJY2FzZSBTWVNfSVNEQlM6CisJCWMtPnN5bWJvbF9yYXRlID0gMjg4NjAwMDA7CisJCWMtPnJvbGxvZmYgPSBST0xMT0ZGXzM1OworCQljLT5iYW5kd2lkdGhfaHogPSBjLT5zeW1ib2xfcmF0ZSAvIDEwMCAqIDEzNTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYy0+bW9kdWxhdGlvbiA9IFFBTV9BVVRPOwogCQlicmVhazsKQEAgLTIwNzIsNiArMjA3Nyw3IEBACiAJCWJyZWFrOwogCWNhc2UgU1lTX0RWQlM6CiAJY2FzZSBTWVNfVFVSQk86CisJY2FzZSBTWVNfSVNEQlM6CiAJCXJvbGxvZmYgPSAxMzU7CiAJCWJyZWFrOwogCWNhc2UgU1lTX0RWQlMyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RzMzAwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RzMzAwMC5jCmluZGV4IDMzNWRhZWYuLjlkMGQwMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kczMwMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZHMzMDAwLmMKQEAgLTg2NCw2ICs4NjQsMTMgQEAKIAltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZkczMwMDBfb3BzLAogCQkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CiAJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCS8qCisJICogU29tZSBkZXZpY2VzIGxpa2UgVDQ4MCBzdGFydHMgd2l0aCB2b2x0YWdlIG9uLiBCZSBzdXJlCisJICogdG8gdHVybiB2b2x0YWdlIG9mZiBkdXJpbmcgaW5pdCwgYXMgdGhpcyBjYW4gb3RoZXJ3aXNlCisJICogaW50ZXJmZXJlIHdpdGggVW5pY2FibGUgU0NSIHN5c3RlbXMuCisJICovCisJZHMzMDAwX3NldF92b2x0YWdlKCZzdGF0ZS0+ZnJvbnRlbmQsIFNFQ19WT0xUQUdFX09GRik7CiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKIGVycm9yMzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zcDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zcDIuYwppbmRleCA5YjY4NGQ1Li4xNWJmNDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvc3AyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3NwMi5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAlyZXR1cm4gcy0+c3RhdHVzOwogfQogCi1pbnQgc3AyX2luaXQoc3RydWN0IHNwMiAqcykKK3N0YXRpYyBpbnQgc3AyX2luaXQoc3RydWN0IHNwMiAqcykKIHsKIAlpbnQgcmV0ID0gMDsKIAl1OCBidWY7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgc3AyX2V4aXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgc3AyX2V4aXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3Qgc3AyICpzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvdGM5MDUyMi5jIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3RjOTA1MjIuYwppbmRleCBkOTkwNWZiLi5iMzVkNjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvdGM5MDUyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy90YzkwNTIyLmMKQEAgLTIxNiwzMiArMjE2LDMwIEBACiAJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0lTREJTOwogCiAJbGF5ZXJzID0gMDsKLQlyZXQgPSByZWdfcmVhZChzdGF0ZSwgMHhlOCwgdmFsLCAzKTsKKwlyZXQgPSByZWdfcmVhZChzdGF0ZSwgMHhlNiwgdmFsLCA1KTsKIAlpZiAocmV0ID09IDApIHsKLQkJaW50IHNsb3RzOwogCQl1OCB2OwogCisJCWMtPnN0cmVhbV9pZCA9IHZhbFswXSA8PCA4IHwgdmFsWzFdOworCiAJCS8qIGhpZ2gvc2luZ2xlIGxheWVyICovCi0JCXYgPSAodmFsWzBdICYgMHg3MCkgPj4gNDsKKwkJdiA9ICh2YWxbMl0gJiAweDcwKSA+PiA0OwogCQljLT5tb2R1bGF0aW9uID0gKHYgPT0gNykgPyBQU0tfOCA6IFFQU0s7CiAJCWMtPmZlY19pbm5lciA9IGZlY19jb252X3NhdFt2XTsKIAkJYy0+bGF5ZXJbMF0uZmVjID0gYy0+ZmVjX2lubmVyOwogCQljLT5sYXllclswXS5tb2R1bGF0aW9uID0gYy0+bW9kdWxhdGlvbjsKLQkJYy0+bGF5ZXJbMF0uc2VnbWVudF9jb3VudCA9IHZhbFsxXSAmIDB4M2Y7IC8qIHNsb3RzICovCisJCWMtPmxheWVyWzBdLnNlZ21lbnRfY291bnQgPSB2YWxbM10gJiAweDNmOyAvKiBzbG90cyAqLwogCiAJCS8qIGxvdyBsYXllciAqLwotCQl2ID0gKHZhbFswXSAmIDB4MDcpOworCQl2ID0gKHZhbFsyXSAmIDB4MDcpOwogCQljLT5sYXllclsxXS5mZWMgPSBmZWNfY29udl9zYXRbdl07CiAJCWlmICh2ID09IDApICAvKiBubyBsb3cgbGF5ZXIgKi8KIAkJCWMtPmxheWVyWzFdLnNlZ21lbnRfY291bnQgPSAwOwogCQllbHNlCi0JCQljLT5sYXllclsxXS5zZWdtZW50X2NvdW50ID0gdmFsWzJdICYgMHgzZjsgLyogc2xvdHMgKi8KKwkJCWMtPmxheWVyWzFdLnNlZ21lbnRfY291bnQgPSB2YWxbNF0gJiAweDNmOyAvKiBzbG90cyAqLwogCQkvKiBhY3R1YWxseSwgQlBTSyBpZiB2PT0xLCBidXQgbm90IGRlZmluZWQgaW4gZmVfbW9kdWxhdGlvbl90ICovCiAJCWMtPmxheWVyWzFdLm1vZHVsYXRpb24gPSBRUFNLOwogCQlsYXllcnMgPSAodiA+IDApID8gMiA6IDE7Ci0KLQkJc2xvdHMgPSAgYy0+bGF5ZXJbMF0uc2VnbWVudF9jb3VudCArICBjLT5sYXllclsxXS5zZWdtZW50X2NvdW50OwotCQljLT5zeW1ib2xfcmF0ZSA9IDI4ODYwMDAwICogc2xvdHMgLyA0ODsKIAl9CiAKIAkvKiBzdGF0aXN0aWNzICovCkBAIC0zNjMsNyArMzYxLDcgQEAKIAkJdTggdjsKIAogCQljLT5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9IHZhbFswXSAmIDB4MDE7Ci0JCWMtPmlzZGJ0X3NiX21vZGUgPSAodmFsWzBdICYgMHhjMCkgPT0gMHgwMTsKKwkJYy0+aXNkYnRfc2JfbW9kZSA9ICh2YWxbMF0gJiAweGMwKSA9PSAweDQwOwogCiAJCS8qIGxheWVyIEEgKi8KIAkJdiA9ICh2YWxbMl0gJiAweDc4KSA+PiAzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLWNvcmUuYwppbmRleCA5MzJlZDliLi5iMTBhYWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLWNvcmUuYwpAQCAtMjE5MCw3ICsyMTkwLDcgQEAKIAkJcmV0ID0gc21pYXBwX3NldF9jb21wb3NlKHN1YmRldiwgZmgsIHNlbCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUJVRygpOworCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCW11dGV4X3VubG9jaygmc2Vuc29yLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWNvcmUuYwppbmRleCAzMzFlZGRhLi4zYmQzODZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKQEAgLTEwNzgsNyArMTA3OCw3IEBACiAJZm9yIChsaW5lID0gMDsgbGluZSA8IGxpbmVzOyBsaW5lKyspIHsKIAkJd2hpbGUgKG9mZnNldCAmJiBvZmZzZXQgPj0gc2dfZG1hX2xlbihzZykpIHsKIAkJCW9mZnNldCAtPSBzZ19kbWFfbGVuKHNnKTsKLQkJCXNnKys7CisJCQlzZyA9IHNnX25leHQoc2cpOwogCQl9CiAKIAkJaWYgKGxwaSAmJiBsaW5lID4gMCAmJiAhKGxpbmUgJSBscGkpKQpAQCAtMTEwMSwxNCArMTEwMSwxNCBAQAogCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCiAJCQl0b2RvIC09IChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpOwogCQkJb2Zmc2V0ID0gMDsKLQkJCXNnKys7CisJCQlzZyA9IHNnX25leHQoc2cpOwogCQkJd2hpbGUgKHRvZG8gPiBzZ19kbWFfbGVuKHNnKSkgewogCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfAogCQkJCQkJICAgIHNnX2RtYV9sZW4oc2cpKTsKIAkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAkJCQl0b2RvIC09IHNnX2RtYV9sZW4oc2cpOwotCQkJCXNnKys7CisJCQkJc2cgPSBzZ19uZXh0KHNnKTsKIAkJCX0KIAkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfRU9MfHRvZG8pOwogCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1jb3JlLmMKaW5kZXggMTcyNTgzZC4uOGNiZTZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwL3NvbG82eDEwLWNvcmUuYwpAQCAtMTA1LDExICsxMDUsOCBAQAogCWlmICghc3RhdHVzKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlpZiAoc3RhdHVzICYgfnNvbG9fZGV2LT5pcnFfbWFzaykgewotCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JUlFfU1RBVCwKLQkJCSAgICAgICBzdGF0dXMgJiB+c29sb19kZXYtPmlycV9tYXNrKTsKLQkJc3RhdHVzICY9IHNvbG9fZGV2LT5pcnFfbWFzazsKLQl9CisJLyogQWNrbm93bGVkZ2UgYWxsIGludGVycnVwdHMgaW1tZWRpYXRlbHkgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JUlFfU1RBVCwgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBTT0xPX0lSUV9QQ0lfRVJSKQogCQlzb2xvX3AybV9lcnJvcl9pc3Ioc29sb19kZXYpOwpAQCAtMTMyLDkgKzEyOSw2IEBACiAJaWYgKHN0YXR1cyAmIFNPTE9fSVJRX0c3MjMpCiAJCXNvbG9fZzcyM19pc3Ioc29sb19kZXYpOwogCi0JLyogQ2xlYXIgYWxsIGludGVycnVwdHMgaGFuZGxlZCAqLwotCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFULCBzdGF0dXMpOwotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZpdmlkL3ZpdmlkLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdml2aWQvdml2aWQtY29yZS5jCmluZGV4IDJjNjFhNjIuLjY4NmMzYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdml2aWQvdml2aWQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdml2aWQvdml2aWQtY29yZS5jCkBAIC0xMDAsMTEgKzEwMCw5IEBACiAJCQkgICAiXHRcdCAgICBiaXQgMD1jcm9wLCAxPWNvbXBvc2UsIDI9c2NhbGUsXG4iCiAJCQkgICAiXHRcdCAgICAtMT11c2VyLWNvbnRyb2xsZWQgKGRlZmF1bHQpIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBtdWx0aXBsYW5hcltWSVZJRF9NQVhfREVWU107CitzdGF0aWMgdW5zaWduZWQgbXVsdGlwbGFuYXJbVklWSURfTUFYX0RFVlNdID0geyBbMCAuLi4gKFZJVklEX01BWF9ERVZTIC0gMSldID0gMSB9OwogbW9kdWxlX3BhcmFtX2FycmF5KG11bHRpcGxhbmFyLCB1aW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobXVsdGlwbGFuYXIsICIgMCAoZGVmYXVsdCkgaXMgYWx0ZXJuYXRpbmcgc2luZ2xlIGFuZCBtdWx0aXBsYW5hciBkZXZpY2VzLFxuIgotCQkJICAgICAgIlx0XHQgICAgMSBpcyBzaW5nbGUgcGxhbmFyIGRldmljZXMsXG4iCi0JCQkgICAgICAiXHRcdCAgICAyIGlzIG11bHRpcGxhbmFyIGRldmljZXMiKTsKK01PRFVMRV9QQVJNX0RFU0MobXVsdGlwbGFuYXIsICIgMSAoZGVmYXVsdCkgY3JlYXRlcyBhIHNpbmdsZSBwbGFuYXIgZGV2aWNlLCAyIGNyZWF0ZXMgYSBtdWx0aXBsYW5hciBkZXZpY2UuIik7CiAKIC8qIERlZmF1bHQ6IHZpZGVvICsgdmJpLWNhcCAocmF3IGFuZCBzbGljZWQpICsgcmFkaW8gcnggKyByYWRpbyB0eCArIHNkciArIHZiaS1vdXQgKyB2aWQtb3V0ICovCiBzdGF0aWMgdW5zaWduZWQgbm9kZV90eXBlc1tWSVZJRF9NQVhfREVWU10gPSB7IFswIC4uLiAoVklWSURfTUFYX0RFVlMgLSAxKV0gPSAweDFkM2QgfTsKQEAgLTY2OSwxMCArNjY3LDcgQEAKIAkvKiBzdGFydCBkZXRlY3RpbmcgZmVhdHVyZSBzZXQgKi8KIAogCS8qIGRvIHdlIHVzZSBzaW5nbGUtIG9yIG11bHRpLXBsYW5hcj8gKi8KLQlpZiAobXVsdGlwbGFuYXJbaW5zdF0gPT0gMCkKLQkJZGV2LT5tdWx0aXBsYW5hciA9IGluc3QgJiAxOwotCWVsc2UKLQkJZGV2LT5tdWx0aXBsYW5hciA9IG11bHRpcGxhbmFyW2luc3RdID4gMTsKKwlkZXYtPm11bHRpcGxhbmFyID0gbXVsdGlwbGFuYXJbaW5zdF0gPiAxOwogCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgInVzaW5nICVzcGxhbmFyIGZvcm1hdCBBUElcbiIsCiAJCQlkZXYtPm11bHRpcGxhbmFyID8gIm11bHRpIiA6ICJzaW5nbGUgIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaW1vbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKaW5kZXggYjg4MzdkZC4uNjVmODBiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKQEAgLTE2NzgsNyArMTY3OCw4IEBACiAJCWlmIChwcmVzc190eXBlID09IDApCiAJCQlyY19rZXl1cChpY3R4LT5yZGV2KTsKIAkJZWxzZSB7Ci0JCQlpZiAoaWN0eC0+cmNfdHlwZSA9PSBSQ19CSVRfUkM2X01DRSkKKwkJCWlmIChpY3R4LT5yY190eXBlID09IFJDX0JJVF9SQzZfTUNFIHx8CisJCQkgICAgaWN0eC0+cmNfdHlwZSA9PSBSQ19CSVRfT1RIRVIpCiAJCQkJcmNfa2V5ZG93bihpY3R4LT5yZGV2LAogCQkJCQkgICBpY3R4LT5yY190eXBlID09IFJDX0JJVF9SQzZfTUNFID8gUkNfVFlQRV9SQzZfTUNFIDogUkNfVFlQRV9PVEhFUiwKIAkJCQkJICAgaWN0eC0+cmNfc2NhbmNvZGUsIGljdHgtPnJjX3RvZ2dsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2lyLWhpeDVoZDIuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItaGl4NWhkMi5jCmluZGV4IDA4YmJkNGYuLmIwZGY2MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvaXItaGl4NWhkMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItaGl4NWhkMi5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBoaXg1aGQyX2lyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBoaXg1aGQyX2lyX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXItcmM1LWRlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmM1LWRlY29kZXIuYwppbmRleCAyZWY3NjM5Li44NGZhNmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2lyLXJjNS1kZWNvZGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1yYzUtZGVjb2Rlci5jCkBAIC01Myw3ICs1Myw3IEBACiAJdTMyIHNjYW5jb2RlOwogCWVudW0gcmNfdHlwZSBwcm90b2NvbDsKIAotCWlmICghKGRldi0+ZW5hYmxlZF9wcm90b2NvbHMgJiAoUkNfQklUX1JDNSB8IFJDX0JJVF9SQzVYKSkpCisJaWYgKCEoZGV2LT5lbmFibGVkX3Byb3RvY29scyAmIChSQ19CSVRfUkM1IHwgUkNfQklUX1JDNVggfCBSQ19CSVRfUkM1X1NaKSkpCiAJCXJldHVybiAwOwogCiAJaWYgKCFpc190aW1pbmdfZXZlbnQoZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2lyLXJjNi1kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL3JjL2lyLXJjNi1kZWNvZGVyLmMKaW5kZXggZjFmMDk4ZS4uZDE2YmM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pci1yYzYtZGVjb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmM2LWRlY29kZXIuYwpAQCAtMjU5LDggKzI1OSw4IEBACiAJCQljYXNlIDMyOgogCQkJCWlmICgoc2NhbmNvZGUgJiBSQzZfNkFfTENDX01BU0spID09IFJDNl82QV9NQ0VfQ0MpIHsKIAkJCQkJcHJvdG9jb2wgPSBSQ19UWVBFX1JDNl9NQ0U7Ci0JCQkJCXNjYW5jb2RlICY9IH5SQzZfNkFfTUNFX1RPR0dMRV9NQVNLOwogCQkJCQl0b2dnbGUgPSAhIShzY2FuY29kZSAmIFJDNl82QV9NQ0VfVE9HR0xFX01BU0spOworCQkJCQlzY2FuY29kZSAmPSB+UkM2XzZBX01DRV9UT0dHTEVfTUFTSzsKIAkJCQl9IGVsc2UgewogCQkJCQlwcm90b2NvbCA9IFJDX0JJVF9SQzZfNkFfMzI7CiAJCQkJCXRvZ2dsZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3JjLWlyLXJhdy5jIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1pci1yYXcuYwppbmRleCBlOGZmZjJhLi5iNzMyYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLWlyLXJhdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvcmMtaXItcmF3LmMKQEAgLTI2Miw3ICsyNjIsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRldi0+cmF3LT5kZXYgPSBkZXY7Ci0JZGV2LT5lbmFibGVkX3Byb3RvY29scyA9IH4wOwogCWRldi0+Y2hhbmdlX3Byb3RvY29sID0gY2hhbmdlX3Byb3RvY29sOwogCXJjID0ga2ZpZm9fYWxsb2MoJmRldi0+cmF3LT5rZmlmbywKIAkJCSBzaXplb2Yoc3RydWN0IGlyX3Jhd19ldmVudCkgKiBNQVhfSVJfRVZFTlRfU0laRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKaW5kZXggYTc5OTFjNy4uOGQzYjc0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKQEAgLTE0MjEsNiArMTQyMSw4IEBACiAKIAlpZiAoZGV2LT5jaGFuZ2VfcHJvdG9jb2wpIHsKIAkJdTY0IHJjX3R5cGUgPSAoMSA8PCByY19tYXAtPnJjX3R5cGUpOworCQlpZiAoZGV2LT5kcml2ZXJfdHlwZSA9PSBSQ19EUklWRVJfSVJfUkFXKQorCQkJcmNfdHlwZSB8PSBSQ19CSVRfTElSQzsKIAkJcmMgPSBkZXYtPmNoYW5nZV9wcm90b2NvbChkZXYsICZyY190eXBlKTsKIAkJaWYgKHJjIDwgMCkKIAkJCWdvdG8gb3V0X3JhdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3MyMjU1L3MyMjU1ZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3VzYi9zMjI1NS9zMjI1NWRydi5jCmluZGV4IGNjYzAwMDkuLjFjMGRiZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3MyMjU1L3MyMjU1ZHJ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvczIyNTUvczIyNTVkcnYuYwpAQCAtNjMyLDcgKzYzMiw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX1BJWF9GTVRfSlBFRzoKIAkJY2FzZSBWNEwyX1BJWF9GTVRfTUpQRUc6Ci0JCQlidWYtPnZiLnY0bDJfYnVmLmxlbmd0aCA9IGpwZ3NpemU7CisJCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQoJmJ1Zi0+dmIsIDAsIGpwZ3NpemUpOwogCQkJbWVtY3B5KHZidWYsIHRtcGJ1ZiwganBnc2l6ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L0tjb25maWcgYi9kcml2ZXJzL21lbW9yeS9LY29uZmlnCmluZGV4IDZkOTFjMjcuLjE5MTM4M2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lbW9yeS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVtb3J5L0tjb25maWcKQEAgLTQxLDYgKzQxLDE0IEBACiAJICBwYXJhbWV0ZXJzIGFuZCBvdGhlciBzZXR0aW5ncyBkdXJpbmcgZnJlcXVlbmN5LCB2b2x0YWdlIGFuZAogCSAgdGVtcGVyYXR1cmUgY2hhbmdlcwogCitjb25maWcgT01BUF9HUE1DCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgR2VuZXJhbCBQdXJwb3NlIE1lbW9yeSBDb250cm9sbGVyIChHUE1DKQorCSAgcHJlc2VudCBvbiBUZXhhcyBJbnN0cnVtZW50cyBTb0NzIChlLmcuIE9NQVAyKykuIEdQTUMgYWxsb3dzCisJICBpbnRlcmZhY2luZyB0byBhIHZhcmlldHkgb2YgYXN5bmNocm9ub3VzIGFzIHdlbGwgYXMgc3luY2hyb25vdXMKKwkgIG1lbW9yeSBkcml2ZXMgbGlrZSBOT1IsIE5BTkQsIE9uZU5BTkQsIFNSQU0uCisKIGNvbmZpZyBNVkVCVV9ERVZCVVMKIAlib29sICJNYXJ2ZWxsIEVCVSBEZXZpY2UgQnVzIENvbnRyb2xsZXIiCiAJZGVmYXVsdCB5CkBAIC02MSwxNiArNjksNiBAQAogCSAgYW5hbHlzaXMsIGVzcGVjaWFsbHkgZm9yIElPTU1VL0dBUlQoR3JhcGhpY3MgQWRkcmVzcwogCSAgUmVsb2NhdGlvbiBUYWJsZSkgbW9kdWxlLgogCi1jb25maWcgVEVHUkEzMF9NQwotCWJvb2wgIlRlZ3JhMzAgTWVtb3J5IENvbnRyb2xsZXIoTUMpIGRyaXZlciIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIEFSQ0hfVEVHUkFfM3hfU09DCi0JaGVscAotCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBNZW1vcnkgQ29udHJvbGxlcihNQykgbW9kdWxlIGF2YWlsYWJsZQotCSAgaW4gVGVncmEzMCBTb0NzLCBtYWlubHkgZm9yIGEgYWRkcmVzcyB0cmFuc2xhdGlvbiBmYXVsdAotCSAgYW5hbHlzaXMsIGVzcGVjaWFsbHkgZm9yIElPTU1VL1NNTVUoU3lzdGVtIE1lbW9yeSBNYW5hZ2VtZW50Ci0JICBVbml0KSBtb2R1bGUuCi0KIGNvbmZpZyBGU0xfQ09SRU5FVF9DRgogCXRyaXN0YXRlICJGcmVlc2NhbGUgQ29yZU5ldCBFcnJvciBSZXBvcnRpbmciCiAJZGVwZW5kcyBvbiBGU0xfU09DX0JPT0tFCkBAIC04NSw0ICs4Myw2IEBACiAJYm9vbAogCWRlcGVuZHMgb24gRlNMX1NPQwogCitzb3VyY2UgImRyaXZlcnMvbWVtb3J5L3RlZ3JhL0tjb25maWciCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVtb3J5L01ha2VmaWxlCmluZGV4IGMzMmQzMTkuLjZiNjU0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtb3J5L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVtb3J5L01ha2VmaWxlCkBAIC04LDggKzgsMTAgQEAKIG9iai0kKENPTkZJR19BVE1FTF9TRFJBTUMpCSs9IGF0bWVsLXNkcmFtYy5vCiBvYmotJChDT05GSUdfVElfQUVNSUYpCQkrPSB0aS1hZW1pZi5vCiBvYmotJChDT05GSUdfVElfRU1JRikJCSs9IGVtaWYubworb2JqLSQoQ09ORklHX09NQVBfR1BNQykJCSs9IG9tYXAtZ3BtYy5vCiBvYmotJChDT05GSUdfRlNMX0NPUkVORVRfQ0YpCSs9IGZzbC1jb3JlbmV0LWNmLm8KIG9iai0kKENPTkZJR19GU0xfSUZDKQkJKz0gZnNsX2lmYy5vCiBvYmotJChDT05GSUdfTVZFQlVfREVWQlVTKQkrPSBtdmVidS1kZXZidXMubwogb2JqLSQoQ09ORklHX1RFR1JBMjBfTUMpCSs9IHRlZ3JhMjAtbWMubwotb2JqLSQoQ09ORklHX1RFR1JBMzBfTUMpCSs9IHRlZ3JhMzAtbWMubworCitvYmotJChDT05GSUdfVEVHUkFfTUMpCQkrPSB0ZWdyYS8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvZHJpdmVycy9tZW1vcnkvb21hcC1ncG1jLmMKc2ltaWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVtb3J5L29tYXAtZ3BtYy5jCmluZGV4IDVmYTM3NTUuLmZmYzVlNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCisrKyBiL2RyaXZlcnMvbWVtb3J5L29tYXAtZ3BtYy5jCkBAIC0yOSwyMCArMjksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL210ZC1uYW5kLW9tYXAyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tdGQtb25lbmFuZC1vbWFwMi5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgInNvYy5oIgotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgIm9tYXBfZGV2aWNlLmgiCi0jaW5jbHVkZSAiZ3BtYy5oIgotI2luY2x1ZGUgImdwbWMtbmFuZC5oIgotI2luY2x1ZGUgImdwbWMtb25lbmFuZC5oIgotCiAjZGVmaW5lCURFVklDRV9OQU1FCQkib21hcC1ncG1jIgogCiAvKiBHUE1DIHJlZ2lzdGVyIG9mZnNldHMgKi8KQEAgLTg1LDYgKzgwLDggQEAKICNkZWZpbmUgR1BNQ19FQ0NfQ1RSTF9FQ0NSRUc4CQkweDAwOAogI2RlZmluZSBHUE1DX0VDQ19DVFJMX0VDQ1JFRzkJCTB4MDA5CiAKKyNkZWZpbmUgR1BNQ19DT05GSUdfTElNSVRFREFERFJFU1MJCUJJVCgxKQorCiAjZGVmaW5lCUdQTUNfQ09ORklHMl9DU0VYVFJBREVMQVkJCUJJVCg3KQogI2RlZmluZQlHUE1DX0NPTkZJRzNfQURWRVhUUkFERUxBWQkJQklUKDcpCiAjZGVmaW5lCUdQTUNfQ09ORklHNF9PRUVYVFJBREVMQVkJCUJJVCg3KQpAQCAtMTE0LDEwICsxMTEsNzMgQEAKIAogI2RlZmluZSBHUE1DX05SX1dBSVRQSU5TCQk0CiAKKyNkZWZpbmUgR1BNQ19DU19DT05GSUcxCQkweDAwCisjZGVmaW5lIEdQTUNfQ1NfQ09ORklHMgkJMHgwNAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzMJCTB4MDgKKyNkZWZpbmUgR1BNQ19DU19DT05GSUc0CQkweDBjCisjZGVmaW5lIEdQTUNfQ1NfQ09ORklHNQkJMHgxMAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzYJCTB4MTQKKyNkZWZpbmUgR1BNQ19DU19DT05GSUc3CQkweDE4CisjZGVmaW5lIEdQTUNfQ1NfTkFORF9DT01NQU5ECTB4MWMKKyNkZWZpbmUgR1BNQ19DU19OQU5EX0FERFJFU1MJMHgyMAorI2RlZmluZSBHUE1DX0NTX05BTkRfREFUQQkweDI0CisKKy8qIENvbnRyb2wgQ29tbWFuZHMgKi8KKyNkZWZpbmUgR1BNQ19DT05GSUdfUkRZX0JTWQkweDAwMDAwMDAxCisjZGVmaW5lIEdQTUNfQ09ORklHX0RFVl9TSVpFCTB4MDAwMDAwMDIKKyNkZWZpbmUgR1BNQ19DT05GSUdfREVWX1RZUEUJMHgwMDAwMDAwMworI2RlZmluZSBHUE1DX1NFVF9JUlFfU1RBVFVTCTB4MDAwMDAwMDQKKworI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JBUEJVUlNUX1NVUFAgICAgICgxIDw8IDMxKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRE1VTFRJUExFX1NVUFAgICgxIDw8IDMwKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRFRZUEVfQVNZTkMgICAgICgwIDw8IDI5KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRFRZUEVfU1lOQyAgICAgICgxIDw8IDI5KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JJVEVNVUxUSVBMRV9TVVBQICgxIDw8IDI4KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JJVEVUWVBFX0FTWU5DICAgICgwIDw8IDI3KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JJVEVUWVBFX1NZTkMgICAgICgxIDw8IDI3KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfQ0xLQUNUSVZBVElPTlRJTUUodmFsKSAoKHZhbCAmIDMpIDw8IDI1KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfUEFHRV9MRU4odmFsKSAgICAgICgodmFsICYgMykgPDwgMjMpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX1JFQURfTU9OICAgICAgKDEgPDwgMjIpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX1dSSVRFX01PTiAgICAgKDEgPDwgMjEpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX01PTl9JSU1FKHZhbCkgKCh2YWwgJiAzKSA8PCAxOCkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dBSVRfUElOX1NFTCh2YWwpICAoKHZhbCAmIDMpIDw8IDE2KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFU0laRSh2YWwpICAgICgodmFsICYgMykgPDwgMTIpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VTSVpFXzE2ICAgICAgR1BNQ19DT05GSUcxX0RFVklDRVNJWkUoMSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVRZUEUodmFsKSAgICAoKHZhbCAmIDMpIDw8IDEwKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRV9OT1IgICAgIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFKDApCisjZGVmaW5lIEdQTUNfQ09ORklHMV9NVVhUWVBFKHZhbCkgICAgICAgKCh2YWwgJiAzKSA8PCA4KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfVElNRV9QQVJBX0dSQU4gICAgICgxIDw8IDQpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVih2YWwpICAgICAgKHZhbCAmIDMpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVjIgICAgICAgICAgKEdQTUNfQ09ORklHMV9GQ0xLX0RJVigxKSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWMyAgICAgICAgICAoR1BNQ19DT05GSUcxX0ZDTEtfRElWKDIpKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfRkNMS19ESVY0ICAgICAgICAgIChHUE1DX0NPTkZJRzFfRkNMS19ESVYoMykpCisjZGVmaW5lIEdQTUNfQ09ORklHN19DU1ZBTElECQkoMSA8PCA2KQorCisjZGVmaW5lIEdQTUNfREVWSUNFVFlQRV9OT1IJCTAKKyNkZWZpbmUgR1BNQ19ERVZJQ0VUWVBFX05BTkQJCTIKKyNkZWZpbmUgR1BNQ19DT05GSUdfV1JJVEVQUk9URUNUCTB4MDAwMDAwMTAKKyNkZWZpbmUgV1JfUkRfUElOX01PTklUT1JJTkcJCTB4MDA2MDAwMDAKKworI2RlZmluZSBHUE1DX0VOQUJMRV9JUlEJCTB4MDAwMDAwMGQKKworLyogRUNDIGNvbW1hbmRzICovCisjZGVmaW5lIEdQTUNfRUNDX1JFQUQJCTAgLyogUmVzZXQgSGFyZHdhcmUgRUNDIGZvciByZWFkICovCisjZGVmaW5lIEdQTUNfRUNDX1dSSVRFCQkxIC8qIFJlc2V0IEhhcmR3YXJlIEVDQyBmb3Igd3JpdGUgKi8KKyNkZWZpbmUgR1BNQ19FQ0NfUkVBRFNZTgkyIC8qIFJlc2V0IGJlZm9yZSBzeW5kcm9tIGlzIHJlYWQgYmFjayAqLworCiAvKiBYWFg6IE9ubHkgTkFORCBpcnEgaGFzIGJlZW4gY29uc2lkZXJlZCxjdXJyZW50bHkgdGhlc2UgYXJlIHRoZSBvbmx5IG9uZXMgdXNlZAogICovCiAjZGVmaW5lCUdQTUNfTlJfSVJRCQkyCiAKK3N0cnVjdCBncG1jX2NzX2RhdGEgeworCWNvbnN0IGNoYXIgKm5hbWU7CisKKyNkZWZpbmUgR1BNQ19DU19SRVNFUlZFRAkoMSA8PCAwKQorCXUzMiBmbGFnczsKKworCXN0cnVjdCByZXNvdXJjZSBtZW07Cit9OworCiBzdHJ1Y3QgZ3BtY19jbGllbnRfaXJxCXsKIAl1bnNpZ25lZAkJaXJxOwogCXUzMgkJCWJpdG1hc2s7CkBAIC0xNTUsMTAgKzIxNSw5IEBACiBzdGF0aWMgaW50IGdwbWNfaXJxX3N0YXJ0OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlCWdwbWNfbWVtX3Jvb3Q7Ci1zdGF0aWMgc3RydWN0IHJlc291cmNlCWdwbWNfY3NfbWVtW0dQTUNfQ1NfTlVNXTsKK3N0YXRpYyBzdHJ1Y3QgZ3BtY19jc19kYXRhIGdwbWNfY3NbR1BNQ19DU19OVU1dOwogc3RhdGljIERFRklORV9TUElOTE9DSyhncG1jX21lbV9sb2NrKTsKIC8qIERlZmluZSBjaGlwLXNlbGVjdHMgYXMgcmVzZXJ2ZWQgYnkgZGVmYXVsdCB1bnRpbCBwcm9iZSBjb21wbGV0ZXMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ3BtY19jc19tYXAgPSAoKDEgPDwgR1BNQ19DU19OVU0pIC0gMSk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGdwbWNfY3NfbnVtID0gR1BNQ19DU19OVU07CiBzdGF0aWMgdW5zaWduZWQgaW50IGdwbWNfbnJfd2FpdHBpbnM7CiBzdGF0aWMgc3RydWN0IGRldmljZSAqZ3BtY19kZXY7CkBAIC0yMDIsMTEgKzI2MSw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGdwbWNfbDNfY2xrKTsKIAotCWlmIChyYXRlID09IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZ3BtY19sM19jbGsgbm90IGVuYWJsZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlyYXRlIC89IDEwMDA7CiAJcmF0ZSA9IDEwMDAwMDAwMDAgLyByYXRlOwkvKiBJbiBwaWNvc2Vjb25kcyAqLwogCkBAIC0yODQsMTIgKzMzOCwxMzAgQEAKIH0KIAogI2lmZGVmIERFQlVHCitzdGF0aWMgaW50IGdldF9ncG1jX3RpbWluZ19yZWcoaW50IGNzLCBpbnQgcmVnLCBpbnQgc3RfYml0LCBpbnQgZW5kX2JpdCwKKwkJCSAgICAgICBib29sIHJhdywgYm9vbCBub3ZhbCwgaW50IHNoaWZ0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdTMyIGw7CisJaW50IG5yX2JpdHMsIG1heF92YWx1ZSwgbWFzazsKKworCWwgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCByZWcpOworCW5yX2JpdHMgPSBlbmRfYml0IC0gc3RfYml0ICsgMTsKKwltYXhfdmFsdWUgPSAoMSA8PCBucl9iaXRzKSAtIDE7CisJbWFzayA9IG1heF92YWx1ZSA8PCBzdF9iaXQ7CisJbCA9IChsICYgbWFzaykgPj4gc3RfYml0OworCWlmIChzaGlmdCkKKwkJbCA9IChzaGlmdCA8PCBsKTsKKwlpZiAobm92YWwgJiYgKGwgPT0gMCkpCisJCXJldHVybiAwOworCWlmICghcmF3KSB7CisJCXVuc2lnbmVkIGludCB0aW1lX25zX21pbiwgdGltZV9ucywgdGltZV9uc19tYXg7CisKKwkJdGltZV9uc19taW4gPSBncG1jX3RpY2tzX3RvX25zKGwgPyBsIC0gMSA6IDApOworCQl0aW1lX25zID0gZ3BtY190aWNrc190b19ucyhsKTsKKwkJdGltZV9uc19tYXggPSBncG1jX3RpY2tzX3RvX25zKGwgKyAxID4gbWF4X3ZhbHVlID8KKwkJCQkJICAgICAgIG1heF92YWx1ZSA6IGwgKyAxKTsKKwkJcHJfaW5mbygiZ3BtYywlcyA9IDwldT4gKCV1IC0gJXUgbnMsICVpIHRpY2tzKVxuIiwKKwkJCW5hbWUsIHRpbWVfbnMsIHRpbWVfbnNfbWluLCB0aW1lX25zX21heCwgbCk7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygiZ3BtYywlcyA9IDwldT5cbiIsIG5hbWUsIGwpOworCX0KKworCXJldHVybiBsOworfQorCisjZGVmaW5lIEdQTUNfUFJJTlRfQ09ORklHKGNzLCBjb25maWcpIFwKKwlwcl9pbmZvKCJjcyVpICVzOiAweCUwOHhcbiIsIGNzLCAjY29uZmlnLCBcCisJCWdwbWNfY3NfcmVhZF9yZWcoY3MsIGNvbmZpZykpCisjZGVmaW5lIEdQTUNfR0VUX1JBVyhyZWcsIHN0LCBlbmQsIGZpZWxkKSBcCisJZ2V0X2dwbWNfdGltaW5nX3JlZyhjcywgKHJlZyksIChzdCksIChlbmQpLCAxLCAwLCAwLCBmaWVsZCkKKyNkZWZpbmUgR1BNQ19HRVRfUkFXX0JPT0wocmVnLCBzdCwgZW5kLCBmaWVsZCkgXAorCWdldF9ncG1jX3RpbWluZ19yZWcoY3MsIChyZWcpLCAoc3QpLCAoZW5kKSwgMSwgMSwgMCwgZmllbGQpCisjZGVmaW5lIEdQTUNfR0VUX1JBV19TSElGVChyZWcsIHN0LCBlbmQsIHNoaWZ0LCBmaWVsZCkgXAorCWdldF9ncG1jX3RpbWluZ19yZWcoY3MsIChyZWcpLCAoc3QpLCAoZW5kKSwgMSwgMSwgKHNoaWZ0KSwgZmllbGQpCisjZGVmaW5lIEdQTUNfR0VUX1RJQ0tTKHJlZywgc3QsIGVuZCwgZmllbGQpIFwKKwlnZXRfZ3BtY190aW1pbmdfcmVnKGNzLCAocmVnKSwgKHN0KSwgKGVuZCksIDAsIDAsIDAsIGZpZWxkKQorCitzdGF0aWMgdm9pZCBncG1jX3Nob3dfcmVncyhpbnQgY3MsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJcHJfaW5mbygiZ3BtYyBjcyVpICVzOlxuIiwgY3MsIGRlc2MpOworCUdQTUNfUFJJTlRfQ09ORklHKGNzLCBHUE1DX0NTX0NPTkZJRzEpOworCUdQTUNfUFJJTlRfQ09ORklHKGNzLCBHUE1DX0NTX0NPTkZJRzIpOworCUdQTUNfUFJJTlRfQ09ORklHKGNzLCBHUE1DX0NTX0NPTkZJRzMpOworCUdQTUNfUFJJTlRfQ09ORklHKGNzLCBHUE1DX0NTX0NPTkZJRzQpOworCUdQTUNfUFJJTlRfQ09ORklHKGNzLCBHUE1DX0NTX0NPTkZJRzUpOworCUdQTUNfUFJJTlRfQ09ORklHKGNzLCBHUE1DX0NTX0NPTkZJRzYpOworfQorCisvKgorICogTm90ZSB0aGF0IGdwbWMsd2FpdC1waW4gaGFuZGluZyB3cm9uZ2x5IGFzc3VtZXMgYml0IDggaXMgYXZhaWxhYmxlLAorICogc2VlIGNvbW1pdCBjOWZiODA5LgorICovCitzdGF0aWMgdm9pZCBncG1jX2NzX3Nob3dfdGltaW5ncyhpbnQgY3MsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJZ3BtY19zaG93X3JlZ3MoY3MsIGRlc2MpOworCisJcHJfaW5mbygiZ3BtYyBjcyVpIGFjY2VzcyBjb25maWd1cmF0aW9uOlxuIiwgY3MpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMSwgIDQsICA0LCAidGltZS1wYXJhLWdyYW51bGFyaXR5Iik7CisJR1BNQ19HRVRfUkFXKEdQTUNfQ1NfQ09ORklHMSwgIDgsICA5LCAibXV4LWFkZC1kYXRhIik7CisJR1BNQ19HRVRfUkFXKEdQTUNfQ1NfQ09ORklHMSwgMTIsIDEzLCAiZGV2aWNlLXdpZHRoIik7CisJR1BNQ19HRVRfUkFXKEdQTUNfQ1NfQ09ORklHMSwgMTYsIDE3LCAid2FpdC1waW4iKTsKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzEsIDIxLCAyMSwgIndhaXQtb24td3JpdGUiKTsKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzEsIDIyLCAyMiwgIndhaXQtb24tcmVhZCIpOworCUdQTUNfR0VUX1JBV19TSElGVChHUE1DX0NTX0NPTkZJRzEsIDIzLCAyNCwgNCwgImJ1cnN0LWxlbmd0aCIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMSwgMjcsIDI3LCAic3luYy13cml0ZSIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMSwgMjgsIDI4LCAiYnVyc3Qtd3JpdGUiKTsKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzEsIDI5LCAyOSwgImdwbWMsc3luYy1yZWFkIik7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUcxLCAzMCwgMzAsICJidXJzdC1yZWFkIik7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUcxLCAzMSwgMzEsICJidXJzdC13cmFwIik7CisKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzIsICA3LCAgNywgImNzLWV4dHJhLWRlbGF5Iik7CisKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzMsICA3LCAgNywgImFkdi1leHRyYS1kZWxheSIpOworCisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUc0LCAyMywgMjMsICJ3ZS1leHRyYS1kZWxheSIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHNCwgIDcsICA3LCAib2UtZXh0cmEtZGVsYXkiKTsKKworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHNiwgIDcsICA3LCAiY3ljbGUyY3ljbGUtc2FtZWNzZW4iKTsKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzYsICA2LCAgNiwgImN5Y2xlMmN5Y2xlLWRpZmZjc2VuIik7CisKKwlwcl9pbmZvKCJncG1jIGNzJWkgdGltaW5ncyBjb25maWd1cmF0aW9uOlxuIiwgY3MpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMiwgIDAsICAzLCAiY3Mtb24tbnMiKTsKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzIsICA4LCAxMiwgImNzLXJkLW9mZi1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMiwgMTYsIDIwLCAiY3Mtd3Itb2ZmLW5zIik7CisKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzMsICAwLCAgMywgImFkdi1vbi1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMywgIDgsIDEyLCAiYWR2LXJkLW9mZi1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMywgMTYsIDIwLCAiYWR2LXdyLW9mZi1ucyIpOworCisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc0LCAgMCwgIDMsICJvZS1vbi1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNCwgIDgsIDEyLCAib2Utb2ZmLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc0LCAxNiwgMTksICJ3ZS1vbi1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNCwgMjQsIDI4LCAid2Utb2ZmLW5zIik7CisKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzUsICAwLCAgNCwgInJkLWN5Y2xlLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc1LCAgOCwgMTIsICJ3ci1jeWNsZS1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNSwgMTYsIDIwLCAiYWNjZXNzLW5zIik7CisKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzUsIDI0LCAyNywgInBhZ2UtYnVyc3QtYWNjZXNzLW5zIik7CisKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzYsIDAsIDMsICJidXMtdHVybmFyb3VuZC1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNiwgOCwgMTEsICJjeWNsZTJjeWNsZS1kZWxheS1ucyIpOworCisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUcxLCAxOCwgMTksICJ3YWl0LW1vbml0b3JpbmctbnMiKTsKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzEsIDI1LCAyNiwgImNsay1hY3RpdmF0aW9uLW5zIik7CisKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzYsIDE2LCAxOSwgIndyLWRhdGEtbXV4LWJ1cy1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNiwgMjQsIDI4LCAid3ItYWNjZXNzLW5zIik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGdwbWNfY3Nfc2hvd190aW1pbmdzKGludCBjcywgY29uc3QgY2hhciAqZGVzYykKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHNldF9ncG1jX3RpbWluZ19yZWcoaW50IGNzLCBpbnQgcmVnLCBpbnQgc3RfYml0LCBpbnQgZW5kX2JpdCwKIAkJCSAgICAgICBpbnQgdGltZSwgY29uc3QgY2hhciAqbmFtZSkKLSNlbHNlCi1zdGF0aWMgaW50IHNldF9ncG1jX3RpbWluZ19yZWcoaW50IGNzLCBpbnQgcmVnLCBpbnQgc3RfYml0LCBpbnQgZW5kX2JpdCwKLQkJCSAgICAgICBpbnQgdGltZSkKLSNlbmRpZgogewogCXUzMiBsOwogCWludCB0aWNrcywgbWFzaywgbnJfYml0czsKQEAgLTI5OSwxNSArNDcxLDE1IEBACiAJZWxzZQogCQl0aWNrcyA9IGdwbWNfbnNfdG9fdGlja3ModGltZSk7CiAJbnJfYml0cyA9IGVuZF9iaXQgLSBzdF9iaXQgKyAxOwotCWlmICh0aWNrcyA+PSAxIDw8IG5yX2JpdHMpIHsKLSNpZmRlZiBERUJVRwotCQlwcmludGsoS0VSTl9JTkZPICJHUE1DIENTJWQ6ICUtMTBzKiAlM2QgbnMsICUzZCB0aWNrcyA+PSAlZFxuIiwKLQkJCQljcywgbmFtZSwgdGltZSwgdGlja3MsIDEgPDwgbnJfYml0cyk7Ci0jZW5kaWYKKwltYXNrID0gKDEgPDwgbnJfYml0cykgLSAxOworCisJaWYgKHRpY2tzID4gbWFzaykgeworCQlwcl9lcnIoIiVzOiBHUE1DIGVycm9yISBDUyVkOiAlczogJWQgbnMsICVkIHRpY2tzID4gJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgY3MsIG5hbWUsIHRpbWUsIHRpY2tzLCBtYXNrKTsKKwogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWFzayA9ICgxIDw8IG5yX2JpdHMpIC0gMTsKIAlsID0gZ3BtY19jc19yZWFkX3JlZyhjcywgcmVnKTsKICNpZmRlZiBERUJVRwogCXByaW50ayhLRVJOX0lORk8KQEAgLTMyMiwxNiArNDk0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBERUJVRwogI2RlZmluZSBHUE1DX1NFVF9PTkUocmVnLCBzdCwgZW5kLCBmaWVsZCkgXAogCWlmIChzZXRfZ3BtY190aW1pbmdfcmVnKGNzLCAocmVnKSwgKHN0KSwgKGVuZCksCQlcCiAJCQl0LT5maWVsZCwgI2ZpZWxkKSA8IDApCQkJXAogCQlyZXR1cm4gLTEKLSNlbHNlCi0jZGVmaW5lIEdQTUNfU0VUX09ORShyZWcsIHN0LCBlbmQsIGZpZWxkKSBcCi0JaWYgKHNldF9ncG1jX3RpbWluZ19yZWcoY3MsIChyZWcpLCAoc3QpLCAoZW5kKSwgdC0+ZmllbGQpIDwgMCkgXAotCQlyZXR1cm4gLTEKLSNlbmRpZgogCiBpbnQgZ3BtY19jYWxjX2RpdmlkZXIodW5zaWduZWQgaW50IHN5bmNfY2xrKQogewpAQCAtMzUzLDYgKzUxOSw3IEBACiAJaW50IGRpdjsKIAl1MzIgbDsKIAorCWdwbWNfY3Nfc2hvd190aW1pbmdzKGNzLCAiYmVmb3JlIGdwbWNfY3Nfc2V0X3RpbWluZ3MiKTsKIAlkaXYgPSBncG1jX2NhbGNfZGl2aWRlcih0LT5zeW5jX2Nsayk7CiAJaWYgKGRpdiA8IDApCiAJCXJldHVybiBkaXY7CkBAIC00MDIsMTEgKzU2OSwxMiBAQAogCX0KIAogCWdwbWNfY3NfYm9vbF90aW1pbmdzKGNzLCAmdC0+Ym9vbF90aW1pbmdzKTsKKwlncG1jX2NzX3Nob3dfdGltaW5ncyhjcywgImFmdGVyIGdwbWNfY3Nfc2V0X3RpbWluZ3MiKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdwbWNfY3NfZW5hYmxlX21lbShpbnQgY3MsIHUzMiBiYXNlLCB1MzIgc2l6ZSkKK3N0YXRpYyBpbnQgZ3BtY19jc19zZXRfbWVtY29uZihpbnQgY3MsIHUzMiBiYXNlLCB1MzIgc2l6ZSkKIHsKIAl1MzIgbDsKIAl1MzIgbWFzazsKQEAgLTQzMCw2ICs1OTgsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZ3BtY19jc19lbmFibGVfbWVtKGludCBjcykKK3sKKwl1MzIgbDsKKworCWwgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzcpOworCWwgfD0gR1BNQ19DT05GSUc3X0NTVkFMSUQ7CisJZ3BtY19jc193cml0ZV9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHNywgbCk7Cit9CisKIHN0YXRpYyB2b2lkIGdwbWNfY3NfZGlzYWJsZV9tZW0oaW50IGNzKQogewogCXUzMiBsOwpAQCAtNDYwLDEzICs2MzcsMzAgQEAKIAogc3RhdGljIHZvaWQgZ3BtY19jc19zZXRfcmVzZXJ2ZWQoaW50IGNzLCBpbnQgcmVzZXJ2ZWQpCiB7Ci0JZ3BtY19jc19tYXAgJj0gfigxIDw8IGNzKTsKLQlncG1jX2NzX21hcCB8PSAocmVzZXJ2ZWQgPyAxIDogMCkgPDwgY3M7CisJc3RydWN0IGdwbWNfY3NfZGF0YSAqZ3BtYyA9ICZncG1jX2NzW2NzXTsKKworCWdwbWMtPmZsYWdzIHw9IEdQTUNfQ1NfUkVTRVJWRUQ7CiB9CiAKIHN0YXRpYyBib29sIGdwbWNfY3NfcmVzZXJ2ZWQoaW50IGNzKQogewotCXJldHVybiBncG1jX2NzX21hcCAmICgxIDw8IGNzKTsKKwlzdHJ1Y3QgZ3BtY19jc19kYXRhICpncG1jID0gJmdwbWNfY3NbY3NdOworCisJcmV0dXJuIGdwbWMtPmZsYWdzICYgR1BNQ19DU19SRVNFUlZFRDsKK30KKworc3RhdGljIHZvaWQgZ3BtY19jc19zZXRfbmFtZShpbnQgY3MsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGdwbWNfY3NfZGF0YSAqZ3BtYyA9ICZncG1jX2NzW2NzXTsKKworCWdwbWMtPm5hbWUgPSBuYW1lOworfQorCitjb25zdCBjaGFyICpncG1jX2NzX2dldF9uYW1lKGludCBjcykKK3sKKwlzdHJ1Y3QgZ3BtY19jc19kYXRhICpncG1jID0gJmdwbWNfY3NbY3NdOworCisJcmV0dXJuIGdwbWMtPm5hbWU7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdwbWNfbWVtX2FsaWduKHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTQ4NSw3ICs2NzksOCBAQAogCiBzdGF0aWMgaW50IGdwbWNfY3NfaW5zZXJ0X21lbShpbnQgY3MsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCXN0cnVjdCByZXNvdXJjZQkqcmVzID0gJmdwbWNfY3NfbWVtW2NzXTsKKwlzdHJ1Y3QgZ3BtY19jc19kYXRhICpncG1jID0gJmdwbWNfY3NbY3NdOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmdwbWMtPm1lbTsKIAlpbnQgcjsKIAogCXNpemUgPSBncG1jX21lbV9hbGlnbihzaXplKTsKQEAgLTUwMCw3ICs2OTUsOCBAQAogCiBzdGF0aWMgaW50IGdwbWNfY3NfZGVsZXRlX21lbShpbnQgY3MpCiB7Ci0Jc3RydWN0IHJlc291cmNlCSpyZXMgPSAmZ3BtY19jc19tZW1bY3NdOworCXN0cnVjdCBncG1jX2NzX2RhdGEgKmdwbWMgPSAmZ3BtY19jc1tjc107CisJc3RydWN0IHJlc291cmNlICpyZXMgPSAmZ3BtYy0+bWVtOwogCWludCByOwogCiAJc3Bpbl9sb2NrKCZncG1jX21lbV9sb2NrKTsKQEAgLTU0MSwyMyArNzM3LDI0IEBACiAJZ3BtY19jc19nZXRfbWVtY29uZihjcywgJm9sZF9iYXNlLCAmc2l6ZSk7CiAJaWYgKGJhc2UgPT0gb2xkX2Jhc2UpCiAJCXJldHVybiAwOwotCWdwbWNfY3NfZGlzYWJsZV9tZW0oY3MpOworCiAJcmV0ID0gZ3BtY19jc19kZWxldGVfbWVtKGNzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKKwogCXJldCA9IGdwbWNfY3NfaW5zZXJ0X21lbShjcywgYmFzZSwgc2l6ZSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gZ3BtY19jc19lbmFibGVfbWVtKGNzLCBiYXNlLCBzaXplKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKIAotCXJldHVybiAwOworCXJldCA9IGdwbWNfY3Nfc2V0X21lbWNvbmYoY3MsIGJhc2UsIHNpemUpOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGdwbWNfY3NfcmVxdWVzdChpbnQgY3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyAqYmFzZSkKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZncG1jX2NzX21lbVtjc107CisJc3RydWN0IGdwbWNfY3NfZGF0YSAqZ3BtYyA9ICZncG1jX2NzW2NzXTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZncG1jLT5tZW07CiAJaW50IHIgPSAtMTsKIAogCWlmIChjcyA+IGdwbWNfY3NfbnVtKSB7CkBAIC01ODEsMTIgKzc3OCwxNyBAQAogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyID0gZ3BtY19jc19lbmFibGVfbWVtKGNzLCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCS8qIERpc2FibGUgQ1Mgd2hpbGUgY2hhbmdpbmcgYmFzZSBhZGRyZXNzIGFuZCBzaXplIG1hc2sgKi8KKwlncG1jX2NzX2Rpc2FibGVfbWVtKGNzKTsKKworCXIgPSBncG1jX2NzX3NldF9tZW1jb25mKGNzLCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmIChyIDwgMCkgewogCQlyZWxlYXNlX3Jlc291cmNlKHJlcyk7CiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIEVuYWJsZSBDUyAqLworCWdwbWNfY3NfZW5hYmxlX21lbShjcyk7CiAJKmJhc2UgPSByZXMtPnN0YXJ0OwogCWdwbWNfY3Nfc2V0X3Jlc2VydmVkKGNzLCAxKTsKIG91dDoKQEAgLTU5Nyw3ICs3OTksOCBAQAogCiB2b2lkIGdwbWNfY3NfZnJlZShpbnQgY3MpCiB7Ci0Jc3RydWN0IHJlc291cmNlCSpyZXMgPSAmZ3BtY19jc19tZW1bY3NdOworCXN0cnVjdCBncG1jX2NzX2RhdGEgKmdwbWMgPSAmZ3BtY19jc1tjc107CisJc3RydWN0IHJlc291cmNlICpyZXMgPSAmZ3BtYy0+bWVtOwogCiAJc3Bpbl9sb2NrKCZncG1jX21lbV9sb2NrKTsKIAlpZiAoY3MgPj0gZ3BtY19jc19udW0gfHwgY3MgPCAwIHx8ICFncG1jX2NzX3Jlc2VydmVkKGNzKSkgewpAQCAtMTM5NCw4ICsxNTk3LDYgQEAKIAlpZiAoZ3BtY19uYW5kX2RhdGEtPmVsbV9vZl9ub2RlID09IE5VTEwpCiAJCWdwbWNfbmFuZF9kYXRhLT5lbG1fb2Zfbm9kZSA9CiAJCQkJCW9mX3BhcnNlX3BoYW5kbGUoY2hpbGQsICJlbG1faWQiLCAwKTsKLQlpZiAoZ3BtY19uYW5kX2RhdGEtPmVsbV9vZl9ub2RlID09IE5VTEwpCi0JCXByX3dhcm4oIiVzOiB0aSxlbG0taWQgcHJvcGVydHkgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBzZWxlY3QgZWNjLXNjaGVtZSBmb3IgTkFORCAqLwogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhjaGlsZCwgInRpLG5hbmQtZWNjLW9wdCIsICZzKSkgewpAQCAtMTUxMSw3ICsxNzEyLDkgQEAKIAlzdHJ1Y3QgZ3BtY190aW1pbmdzIGdwbWNfdDsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwogCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwljb25zdCBjaGFyICpuYW1lOwogCWludCByZXQsIGNzOworCXUzMiB2YWw7CiAKIAlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJyZWciLCAmY3MpIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyBoYXMgbm8gJ3JlZycgcHJvcGVydHlcbiIsCkBAIC0xNTI1LDI4ICsxNzI4LDQxIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCS8qCisJICogQ2hlY2sgaWYgd2UgaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZGV2aWNlCisJICogb24gYSBzaW5nbGUgY2hpcCBzZWxlY3QuIElmIHNvLCB1c2UgdGhlIGFscmVhZHkgaW5pdGlhbGl6ZWQKKwkgKiB0aW1pbmdzLgorCSAqLworCW5hbWUgPSBncG1jX2NzX2dldF9uYW1lKGNzKTsKKwlpZiAobmFtZSAmJiBjaGlsZC0+bmFtZSAmJiBvZl9ub2RlX2NtcChjaGlsZC0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJCWdvdG8gbm9fdGltaW5nczsKKwogCXJldCA9IGdwbWNfY3NfcmVxdWVzdChjcywgcmVzb3VyY2Vfc2l6ZSgmcmVzKSwgJmJhc2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXF1ZXN0IEdQTUMgQ1MgJWRcbiIsIGNzKTsKIAkJcmV0dXJuIHJldDsKIAl9CisJZ3BtY19jc19zZXRfbmFtZShjcywgY2hpbGQtPm5hbWUpOworCisJZ3BtY19yZWFkX3NldHRpbmdzX2R0KGNoaWxkLCAmZ3BtY19zKTsKKwlncG1jX3JlYWRfdGltaW5nc19kdChjaGlsZCwgJmdwbWNfdCk7CiAKIAkvKgogCSAqIEZvciBzb21lIEdQTUMgZGV2aWNlcyB3ZSBzdGlsbCBuZWVkIHRvIHJlbHkgb24gdGhlIGJvb3Rsb2FkZXIKLQkgKiB0aW1pbmdzIGJlY2F1c2UgdGhlIGRldmljZXMgY2FuIGJlIGNvbm5lY3RlZCB2aWEgRlBHQS4gU28gZmFyCi0JICogdGhlIGxpc3QgaXMgc21jOTF4IG9uIHRoZSBvbWFwMiBTRFAgYm9hcmRzLCBhbmQgODI1MCBvbiB6b29tcy4KLQkgKiBSRVZJU0lUOiBBZGQgdGltaW5nIHN1cHBvcnQgZnJvbSBzbGxzNjQ0Zy5wZGYgYW5kIGZyb20gdGhlCi0JICogbGFuOTFjOTYgbWFudWFsLgorCSAqIHRpbWluZ3MgYmVjYXVzZSB0aGUgZGV2aWNlcyBjYW4gYmUgY29ubmVjdGVkIHZpYSBGUEdBLgorCSAqIFJFVklTSVQ6IEFkZCB0aW1pbmcgc3VwcG9ydCBmcm9tIHNsbHM2NDRnLnBkZi4KIAkgKi8KLQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsICJuczE2NTUwYSIpIHx8Ci0JICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAic21zYyxsYW45MWM5NCIpIHx8Ci0JICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAic21zYyxsYW45MWMxMTEiKSkgewotCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJICIlcyB1c2luZyBib290bG9hZGVyIHRpbWluZ3Mgb24gQ1MlZFxuIiwKLQkJCSBjaGlsZC0+bmFtZSwgY3MpOworCWlmICghZ3BtY190LmNzX3JkX29mZikgeworCQlXQVJOKDEsICJlbmFibGUgR1BNQyBkZWJ1ZyB0byBjb25maWd1cmUgLmR0cyB0aW1pbmdzIGZvciBDUyVpXG4iLAorCQkJY3MpOworCQlncG1jX2NzX3Nob3dfdGltaW5ncyhjcywKKwkJCQkgICAgICJwbGVhc2UgYWRkIEdQTUMgYm9vdGxvYWRlciB0aW1pbmdzIHRvIC5kdHMiKTsKIAkJZ290byBub190aW1pbmdzOwogCX0KIAorCS8qIENTIG11c3QgYmUgZGlzYWJsZWQgd2hpbGUgbWFraW5nIGNoYW5nZXMgdG8gZ3BtYyBjb25maWd1cmF0aW9uICovCisJZ3BtY19jc19kaXNhYmxlX21lbShjcyk7CisKIAkvKgogCSAqIEZJWE1FOiBncG1jX2NzX3JlcXVlc3QoKSB3aWxsIG1hcCB0aGUgQ1MgdG8gYW4gYXJiaXRhcnkKIAkgKiBsb2NhdGlvbiBpbiB0aGUgZ3BtYyBhZGRyZXNzIHNwYWNlLiBXaGVuIGJvb3Rpbmcgd2l0aApAQCAtMTU2Miw4ICsxNzc4LDYgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JZ3BtY19yZWFkX3NldHRpbmdzX2R0KGNoaWxkLCAmZ3BtY19zKTsKLQogCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiYmFuay13aWR0aCIsICZncG1jX3MuZGV2aWNlX3dpZHRoKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7CkBAIC0xNTcyLDggKzE3ODYsMjAgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7CiAKLQlncG1jX3JlYWRfdGltaW5nc19kdChjaGlsZCwgJmdwbWNfdCk7Ci0JZ3BtY19jc19zZXRfdGltaW5ncyhjcywgJmdwbWNfdCk7CisJcmV0ID0gZ3BtY19jc19zZXRfdGltaW5ncyhjcywgJmdwbWNfdCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0IGdwbWMgdGltaW5ncyBmb3I6ICVzXG4iLAorCQkJY2hpbGQtPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBDbGVhciBsaW1pdGVkIGFkZHJlc3MgaS5lLiBlbmFibGUgQTI2LUExMSAqLworCXZhbCA9IGdwbWNfcmVhZF9yZWcoR1BNQ19DT05GSUcpOworCXZhbCAmPSB+R1BNQ19DT05GSUdfTElNSVRFREFERFJFU1M7CisJZ3BtY193cml0ZV9yZWcoR1BNQ19DT05GSUcsIHZhbCk7CisKKwkvKiBFbmFibGUgQ1MgcmVnaW9uICovCisJZ3BtY19jc19lbmFibGVfbWVtKGNzKTsKIAogbm9fdGltaW5nczoKIAlpZiAob2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShjaGlsZCwgTlVMTCwgJnBkZXYtPmRldikpCkBAIC0xNjcwLDEzICsxODk2LDE4IEBACiAJZWxzZQogCQlncG1jX2lycSA9IHJlcy0+c3RhcnQ7CiAKLQlncG1jX2wzX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOworCWdwbWNfbDNfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKIAlpZiAoSVNfRVJSKGdwbWNfbDNfY2xrKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvcjogY2xrX2dldFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgR1BNQyBmY2tcbiIpOwogCQlncG1jX2lycSA9IDA7CiAJCXJldHVybiBQVFJfRVJSKGdwbWNfbDNfY2xrKTsKIAl9CiAKKwlpZiAoIWNsa19nZXRfcmF0ZShncG1jX2wzX2NsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBHUE1DIGZjayBjbG9jayByYXRlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKIApAQCAtMTcwOCw5ICsxOTM5LDYgQEAKIAlpZiAoZ3BtY19zZXR1cF9pcnEoKSA8IDApCiAJCWRldl93YXJuKGdwbWNfZGV2LCAiZ3BtY19zZXR1cF9pcnEgZmFpbGVkXG4iKTsKIAotCS8qIE5vdyB0aGUgR1BNQyBpcyBpbml0aWFsaXNlZCwgdW5yZXNlcnZlIHRoZSBjaGlwLXNlbGVjdHMgKi8KLQlncG1jX2NzX21hcCA9IDA7Ci0KIAlpZiAoIXBkZXYtPmRldi5vZl9ub2RlKSB7CiAJCWdwbWNfY3NfbnVtCSA9IEdQTUNfQ1NfTlVNOwogCQlncG1jX25yX3dhaXRwaW5zID0gR1BNQ19OUl9XQUlUUElOUzsKQEAgLTE3MTksNyArMTk0Nyw2IEBACiAJcmMgPSBncG1jX3Byb2JlX2R0KHBkZXYpOwogCWlmIChyYyA8IDApIHsKIAkJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsKLQkJY2xrX3B1dChncG1jX2wzX2Nsayk7CiAJCWRldl9lcnIoZ3BtY19kZXYsICJmYWlsZWQgdG8gcHJvYmUgRFQgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybiByYzsKIAl9CkBAIC0xNzc3LDM1ICsyMDA0LDkgQEAKIAogfQogCi1vbWFwX3Bvc3Rjb3JlX2luaXRjYWxsKGdwbWNfaW5pdCk7Citwb3N0Y29yZV9pbml0Y2FsbChncG1jX2luaXQpOwogbW9kdWxlX2V4aXQoZ3BtY19leGl0KTsKIAotc3RhdGljIGludCBfX2luaXQgb21hcF9ncG1jX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3Qgb21hcF9od21vZCAqb2g7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQljaGFyICpvaF9uYW1lID0gImdwbWMiOwotCi0JLyoKLQkgKiBpZiB0aGUgYm9hcmQgYm9vdHMgdXAgd2l0aCBhIHBvcHVsYXRlZCBEVCwgZG8gbm90Ci0JICogbWFudWFsbHkgYWRkIHRoZSBkZXZpY2UgZnJvbSB0aGlzIGluaXRjYWxsCi0JICovCi0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jb2ggPSBvbWFwX2h3bW9kX2xvb2t1cChvaF9uYW1lKTsKLQlpZiAoIW9oKSB7Ci0JCXByX2VycigiQ291bGQgbm90IGxvb2sgdXAgJXNcbiIsIG9oX25hbWUpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlwZGV2ID0gb21hcF9kZXZpY2VfYnVpbGQoREVWSUNFX05BTUUsIC0xLCBvaCwgTlVMTCwgMCk7Ci0JV0FSTihJU19FUlIocGRldiksICJjb3VsZCBub3QgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzXG4iLCBvaF9uYW1lKTsKLQotCXJldHVybiBQVFJfUkVUKHBkZXYpOwotfQotb21hcF9wb3N0Y29yZV9pbml0Y2FsbChvbWFwX2dwbWNfaW5pdCk7Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCBncG1jX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1vcnkvdGVncmEvS2NvbmZpZyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxMDg3NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL0tjb25maWcKQEAgLTAsMCArMSw3IEBACitjb25maWcgVEVHUkFfTUMKKwlib29sICJOVklESUEgVGVncmEgTWVtb3J5IENvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfVEVHUkEKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTWVtb3J5IENvbnRyb2xsZXIgKE1DKSBoYXJkd2FyZSBmb3VuZCBvbgorCSAgTlZJRElBIFRlZ3JhIFNvQ3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90ZWdyYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOWY0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKK3RlZ3JhLW1jLXkgOj0gbWMubworCit0ZWdyYS1tYy0kKENPTkZJR19BUkNIX1RFR1JBXzN4X1NPQykgICs9IHRlZ3JhMzAubwordGVncmEtbWMtJChDT05GSUdfQVJDSF9URUdSQV8xMTRfU09DKSArPSB0ZWdyYTExNC5vCit0ZWdyYS1tYy0kKENPTkZJR19BUkNIX1RFR1JBXzEyNF9TT0MpICs9IHRlZ3JhMTI0Lm8KKworb2JqLSQoQ09ORklHX1RFR1JBX01DKSArPSB0ZWdyYS1tYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5jIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTNjNDRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvbWMuYwpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAibWMuaCIKKworI2RlZmluZSBNQ19JTlRTVEFUVVMgMHgwMDAKKyNkZWZpbmUgIE1DX0lOVF9ERUNFUlJfTVRTICgxIDw8IDE2KQorI2RlZmluZSAgTUNfSU5UX1NFQ0VSUl9TRUMgKDEgPDwgMTMpCisjZGVmaW5lICBNQ19JTlRfREVDRVJSX1ZQUiAoMSA8PCAxMikKKyNkZWZpbmUgIE1DX0lOVF9JTlZBTElEX0FQQl9BU0lEX1VQREFURSAoMSA8PCAxMSkKKyNkZWZpbmUgIE1DX0lOVF9JTlZBTElEX1NNTVVfUEFHRSAoMSA8PCAxMCkKKyNkZWZpbmUgIE1DX0lOVF9BUkJJVFJBVElPTl9FTUVNICgxIDw8IDkpCisjZGVmaW5lICBNQ19JTlRfU0VDVVJJVFlfVklPTEFUSU9OICgxIDw8IDgpCisjZGVmaW5lICBNQ19JTlRfREVDRVJSX0VNRU0gKDEgPDwgNikKKworI2RlZmluZSBNQ19JTlRNQVNLIDB4MDA0CisKKyNkZWZpbmUgTUNfRVJSX1NUQVRVUyAweDA4CisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX1RZUEVfU0hJRlQgMjgKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfVFlQRV9JTlZBTElEX1NNTVVfUEFHRSAoNiA8PCBNQ19FUlJfU1RBVFVTX1RZUEVfU0hJRlQpCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX1RZUEVfTUFTSyAoMHg3IDw8IE1DX0VSUl9TVEFUVVNfVFlQRV9TSElGVCkKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfUkVBREFCTEUgKDEgPDwgMjcpCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX1dSSVRBQkxFICgxIDw8IDI2KQorI2RlZmluZSAgTUNfRVJSX1NUQVRVU19OT05TRUNVUkUgKDEgPDwgMjUpCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX0FEUl9ISV9TSElGVCAyMAorI2RlZmluZSAgTUNfRVJSX1NUQVRVU19BRFJfSElfTUFTSyAweDMKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfU0VDVVJJVFkgKDEgPDwgMTcpCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX1JXICgxIDw8IDE2KQorI2RlZmluZSAgTUNfRVJSX1NUQVRVU19DTElFTlRfTUFTSyAweDdmCisKKyNkZWZpbmUgTUNfRVJSX0FEUiAweDBjCisKKyNkZWZpbmUgTUNfRU1FTV9BUkJfQ0ZHIDB4OTAKKyNkZWZpbmUgIE1DX0VNRU1fQVJCX0NGR19DWUNMRVNfUEVSX1VQREFURSh4KQkoKCh4KSAmIDB4MWZmKSA8PCAwKQorI2RlZmluZSAgTUNfRU1FTV9BUkJfQ0ZHX0NZQ0xFU19QRVJfVVBEQVRFX01BU0sJMHgxZmYKKyNkZWZpbmUgTUNfRU1FTV9BUkJfTUlTQzAgMHhkOAorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0ZWdyYV9tY19vZl9tYXRjaFtdID0geworI2lmZGVmIENPTkZJR19BUkNIX1RFR1JBXzN4X1NPQworCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMzAtbWMiLCAuZGF0YSA9ICZ0ZWdyYTMwX21jX3NvYyB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfVEVHUkFfMTE0X1NPQworCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTE0LW1jIiwgLmRhdGEgPSAmdGVncmExMTRfbWNfc29jIH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8xMjRfU09DCisJeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmExMjQtbWMiLCAuZGF0YSA9ICZ0ZWdyYTEyNF9tY19zb2MgfSwKKyNlbmRpZgorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRlZ3JhX21jX29mX21hdGNoKTsKKworc3RhdGljIGludCB0ZWdyYV9tY19zZXR1cF9sYXRlbmN5X2FsbG93YW5jZShzdHJ1Y3QgdGVncmFfbWMgKm1jKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB0aWNrOworCXVuc2lnbmVkIGludCBpOworCXUzMiB2YWx1ZTsKKworCS8qIGNvbXB1dGUgdGhlIG51bWJlciBvZiBNQyBjbG9jayBjeWNsZXMgcGVyIHRpY2sgKi8KKwl0aWNrID0gbWMtPnRpY2sgKiBjbGtfZ2V0X3JhdGUobWMtPmNsayk7CisJZG9fZGl2KHRpY2ssIE5TRUNfUEVSX1NFQyk7CisKKwl2YWx1ZSA9IHJlYWRsKG1jLT5yZWdzICsgTUNfRU1FTV9BUkJfQ0ZHKTsKKwl2YWx1ZSAmPSB+TUNfRU1FTV9BUkJfQ0ZHX0NZQ0xFU19QRVJfVVBEQVRFX01BU0s7CisJdmFsdWUgfD0gTUNfRU1FTV9BUkJfQ0ZHX0NZQ0xFU19QRVJfVVBEQVRFKHRpY2spOworCXdyaXRlbCh2YWx1ZSwgbWMtPnJlZ3MgKyBNQ19FTUVNX0FSQl9DRkcpOworCisJLyogd3JpdGUgbGF0ZW5jeSBhbGxvd2FuY2UgZGVmYXVsdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWMtPnNvYy0+bnVtX2NsaWVudHM7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgdGVncmFfbWNfbGEgKmxhID0gJm1jLT5zb2MtPmNsaWVudHNbaV0ubGE7CisJCXUzMiB2YWx1ZTsKKworCQl2YWx1ZSA9IHJlYWRsKG1jLT5yZWdzICsgbGEtPnJlZyk7CisJCXZhbHVlICY9IH4obGEtPm1hc2sgPDwgbGEtPnNoaWZ0KTsKKwkJdmFsdWUgfD0gKGxhLT5kZWYgJiBsYS0+bWFzaykgPDwgbGEtPnNoaWZ0OworCQl3cml0ZWwodmFsdWUsIG1jLT5yZWdzICsgbGEtPnJlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGF0dXNfbmFtZXNbMzJdID0geworCVsgMV0gPSAiRXh0ZXJuYWwgaW50ZXJydXB0IiwKKwlbIDZdID0gIkVNRU0gYWRkcmVzcyBkZWNvZGUgZXJyb3IiLAorCVsgOF0gPSAiU2VjdXJpdHkgdmlvbGF0aW9uIiwKKwlbIDldID0gIkVNRU0gYXJiaXRyYXRpb24gZXJyb3IiLAorCVsxMF0gPSAiUGFnZSBmYXVsdCIsCisJWzExXSA9ICJJbnZhbGlkIEFQQiBBU0lEIHVwZGF0ZSIsCisJWzEyXSA9ICJWUFIgdmlvbGF0aW9uIiwKKwlbMTNdID0gIlNlY3VyZSBjYXJ2ZW91dCB2aW9sYXRpb24iLAorCVsxNl0gPSAiTVRTIGNhcnZlb3V0IHZpb2xhdGlvbiIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZXJyb3JfbmFtZXNbOF0gPSB7CisJWzJdID0gIkVNRU0gZGVjb2RlIGVycm9yIiwKKwlbM10gPSAiVHJ1c3Rab25lIHZpb2xhdGlvbiIsCisJWzRdID0gIkNhcnZlb3V0IHZpb2xhdGlvbiIsCisJWzZdID0gIlNNTVUgdHJhbnNsYXRpb24gZXJyb3IiLAorfTsKKworc3RhdGljIGlycXJldHVybl90IHRlZ3JhX21jX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB0ZWdyYV9tYyAqbWMgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzLCBtYXNrOworCXVuc2lnbmVkIGludCBiaXQ7CisKKwkvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzIHRvIGF2b2lkIGZsb29kaW5nICovCisJc3RhdHVzID0gbWNfcmVhZGwobWMsIE1DX0lOVFNUQVRVUyk7CisJbWFzayA9IG1jX3JlYWRsKG1jLCBNQ19JTlRNQVNLKTsKKworCWZvcl9lYWNoX3NldF9iaXQoYml0LCAmc3RhdHVzLCAzMikgeworCQljb25zdCBjaGFyICplcnJvciA9IHN0YXR1c19uYW1lc1tiaXRdID86ICJ1bmtub3duIjsKKwkJY29uc3QgY2hhciAqY2xpZW50ID0gInVua25vd24iLCAqZGVzYzsKKwkJY29uc3QgY2hhciAqZGlyZWN0aW9uLCAqc2VjdXJlOworCQlwaHlzX2FkZHJfdCBhZGRyID0gMDsKKwkJdW5zaWduZWQgaW50IGk7CisJCWNoYXIgcGVybVs3XTsKKwkJdTggaWQsIHR5cGU7CisJCXUzMiB2YWx1ZTsKKworCQl2YWx1ZSA9IG1jX3JlYWRsKG1jLCBNQ19FUlJfU1RBVFVTKTsKKworI2lmZGVmIENPTkZJR19QSFlTX0FERFJfVF82NEJJVAorCQlpZiAobWMtPnNvYy0+bnVtX2FkZHJlc3NfYml0cyA+IDMyKSB7CisJCQlhZGRyID0gKCh2YWx1ZSA+PiBNQ19FUlJfU1RBVFVTX0FEUl9ISV9TSElGVCkgJgorCQkJCU1DX0VSUl9TVEFUVVNfQURSX0hJX01BU0spOworCQkJYWRkciA8PD0gMzI7CisJCX0KKyNlbmRpZgorCisJCWlmICh2YWx1ZSAmIE1DX0VSUl9TVEFUVVNfUlcpCisJCQlkaXJlY3Rpb24gPSAid3JpdGUiOworCQllbHNlCisJCQlkaXJlY3Rpb24gPSAicmVhZCI7CisKKwkJaWYgKHZhbHVlICYgTUNfRVJSX1NUQVRVU19TRUNVUklUWSkKKwkJCXNlY3VyZSA9ICJzZWN1cmUgIjsKKwkJZWxzZQorCQkJc2VjdXJlID0gIiI7CisKKwkJaWQgPSB2YWx1ZSAmIE1DX0VSUl9TVEFUVVNfQ0xJRU5UX01BU0s7CisKKwkJZm9yIChpID0gMDsgaSA8IG1jLT5zb2MtPm51bV9jbGllbnRzOyBpKyspIHsKKwkJCWlmIChtYy0+c29jLT5jbGllbnRzW2ldLmlkID09IGlkKSB7CisJCQkJY2xpZW50ID0gbWMtPnNvYy0+Y2xpZW50c1tpXS5uYW1lOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJdHlwZSA9ICh2YWx1ZSAmIE1DX0VSUl9TVEFUVVNfVFlQRV9NQVNLKSA+PgorCQkgICAgICAgTUNfRVJSX1NUQVRVU19UWVBFX1NISUZUOworCQlkZXNjID0gZXJyb3JfbmFtZXNbdHlwZV07CisKKwkJc3dpdGNoICh2YWx1ZSAmIE1DX0VSUl9TVEFUVVNfVFlQRV9NQVNLKSB7CisJCWNhc2UgTUNfRVJSX1NUQVRVU19UWVBFX0lOVkFMSURfU01NVV9QQUdFOgorCQkJcGVybVswXSA9ICcgJzsKKwkJCXBlcm1bMV0gPSAnWyc7CisKKwkJCWlmICh2YWx1ZSAmIE1DX0VSUl9TVEFUVVNfUkVBREFCTEUpCisJCQkJcGVybVsyXSA9ICdSJzsKKwkJCWVsc2UKKwkJCQlwZXJtWzJdID0gJy0nOworCisJCQlpZiAodmFsdWUgJiBNQ19FUlJfU1RBVFVTX1dSSVRBQkxFKQorCQkJCXBlcm1bM10gPSAnVyc7CisJCQllbHNlCisJCQkJcGVybVszXSA9ICctJzsKKworCQkJaWYgKHZhbHVlICYgTUNfRVJSX1NUQVRVU19OT05TRUNVUkUpCisJCQkJcGVybVs0XSA9ICctJzsKKwkJCWVsc2UKKwkJCQlwZXJtWzRdID0gJ1MnOworCisJCQlwZXJtWzVdID0gJ10nOworCQkJcGVybVs2XSA9ICdcMCc7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcGVybVswXSA9ICdcMCc7CisJCQlicmVhazsKKwkJfQorCisJCXZhbHVlID0gbWNfcmVhZGwobWMsIE1DX0VSUl9BRFIpOworCQlhZGRyIHw9IHZhbHVlOworCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQobWMtPmRldiwgIiVzOiAlcyVzIEAlcGE6ICVzICglcyVzKVxuIiwKKwkJCQkgICAgY2xpZW50LCBzZWN1cmUsIGRpcmVjdGlvbiwgJmFkZHIsIGVycm9yLAorCQkJCSAgICBkZXNjLCBwZXJtKTsKKwl9CisKKwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCisJbWNfd3JpdGVsKG1jLCBzdGF0dXMsIE1DX0lOVFNUQVRVUyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgdGVncmFfbWMgKm1jOworCXUzMiB2YWx1ZTsKKwlpbnQgZXJyOworCisJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKHRlZ3JhX21jX29mX21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJaWYgKCFtYXRjaCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltYyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYyk7CisJbWMtPnNvYyA9IG1hdGNoLT5kYXRhOworCW1jLT5kZXYgPSAmcGRldi0+ZGV2OworCisJLyogbGVuZ3RoIG9mIE1DIHRpY2sgaW4gbmFub3NlY29uZHMgKi8KKwltYy0+dGljayA9IDMwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwltYy0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIobWMtPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihtYy0+cmVncyk7CisKKwltYy0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJtYyIpOworCWlmIChJU19FUlIobWMtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBNQyBjbG9jazogJWxkXG4iLAorCQkJUFRSX0VSUihtYy0+Y2xrKSk7CisJCXJldHVybiBQVFJfRVJSKG1jLT5jbGspOworCX0KKworCWVyciA9IHRlZ3JhX21jX3NldHVwX2xhdGVuY3lfYWxsb3dhbmNlKG1jKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0dXAgbGF0ZW5jeSBhbGxvd2FuY2U6ICVkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfVEVHUkFfSU9NTVVfU01NVSkpIHsKKwkJbWMtPnNtbXUgPSB0ZWdyYV9zbW11X3Byb2JlKCZwZGV2LT5kZXYsIG1jLT5zb2MtPnNtbXUsIG1jKTsKKwkJaWYgKElTX0VSUihtYy0+c21tdSkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBwcm9iZSBTTU1VOiAlbGRcbiIsCisJCQkJUFRSX0VSUihtYy0+c21tdSkpOworCQkJcmV0dXJuIFBUUl9FUlIobWMtPnNtbXUpOworCQl9CisJfQorCisJbWMtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKG1jLT5pcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludGVycnVwdCBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIG1jLT5pcnE7CisJfQorCisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBtYy0+aXJxLCB0ZWdyYV9tY19pcnEsIElSUUZfU0hBUkVELAorCQkJICAgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBtYyk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSVJRIyV1OiAlZFxuIiwgbWMtPmlycSwKKwkJCWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJdmFsdWUgPSBNQ19JTlRfREVDRVJSX01UUyB8IE1DX0lOVF9TRUNFUlJfU0VDIHwgTUNfSU5UX0RFQ0VSUl9WUFIgfAorCQlNQ19JTlRfSU5WQUxJRF9BUEJfQVNJRF9VUERBVEUgfCBNQ19JTlRfSU5WQUxJRF9TTU1VX1BBR0UgfAorCQlNQ19JTlRfQVJCSVRSQVRJT05fRU1FTSB8IE1DX0lOVF9TRUNVUklUWV9WSU9MQVRJT04gfAorCQlNQ19JTlRfREVDRVJSX0VNRU07CisJbWNfd3JpdGVsKG1jLCB2YWx1ZSwgTUNfSU5UTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGVncmFfbWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRlZ3JhLW1jIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gdGVncmFfbWNfb2ZfbWF0Y2gsCisJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKKwl9LAorCS5wcmV2ZW50X2RlZmVycmVkX3Byb2JlID0gdHJ1ZSwKKwkucHJvYmUgPSB0ZWdyYV9tY19wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgdGVncmFfbWNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRlZ3JhX21jX2RyaXZlcik7Cit9CithcmNoX2luaXRjYWxsKHRlZ3JhX21jX2luaXQpOworCitNT0RVTEVfQVVUSE9SKCJUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOVklESUEgVGVncmEgTWVtb3J5IENvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5oIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWQyMTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvbWMuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIE1FTU9SWV9URUdSQV9NQ19ICisjZGVmaW5lIE1FTU9SWV9URUdSQV9NQ19ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxzb2MvdGVncmEvbWMuaD4KKworc3RhdGljIGlubGluZSB1MzIgbWNfcmVhZGwoc3RydWN0IHRlZ3JhX21jICptYywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsKG1jLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1jX3dyaXRlbChzdHJ1Y3QgdGVncmFfbWMgKm1jLCB1MzIgdmFsdWUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXdyaXRlbCh2YWx1ZSwgbWMtPnJlZ3MgKyBvZmZzZXQpOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfVEVHUkFfM3hfU09DCitleHRlcm4gY29uc3Qgc3RydWN0IHRlZ3JhX21jX3NvYyB0ZWdyYTMwX21jX3NvYzsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfVEVHUkFfMTE0X1NPQworZXh0ZXJuIGNvbnN0IHN0cnVjdCB0ZWdyYV9tY19zb2MgdGVncmExMTRfbWNfc29jOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8xMjRfU09DCitleHRlcm4gY29uc3Qgc3RydWN0IHRlZ3JhX21jX3NvYyB0ZWdyYTEyNF9tY19zb2M7CisjZW5kaWYKKworI2VuZGlmIC8qIE1FTU9SWV9URUdSQV9NQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTExNC5jIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmExMTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTFlOWEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmExMTQuYwpAQCAtMCwwICsxLDk0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMTQtbWMuaD4KKworI2luY2x1ZGUgIm1jLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfbWNfY2xpZW50IHRlZ3JhMTE0X21jX2NsaWVudHNbXSA9IHsKKwl7CisJCS5pZCA9IDB4MDAsCisJCS5uYW1lID0gInB0Y3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFRDLAorCX0sIHsKKwkJLmlkID0gMHgwMSwKKwkJLm5hbWUgPSAiZGlzcGxheTBhIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDAyLAorCQkubmFtZSA9ICJkaXNwbGF5MGFiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwMywKKwkJLm5hbWUgPSAiZGlzcGxheTBiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNCwKKwkJLm5hbWUgPSAiZGlzcGxheTBiYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA1LAorCQkubmFtZSA9ICJkaXNwbGF5MGMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDYsCisJCS5uYW1lID0gImRpc3BsYXkwY2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSA2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA5LAorCQkubmFtZSA9ICJlcHB1cCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9FUFAsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDksCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgzMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGEsCisJCS5uYW1lID0gImcycHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDEwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDBiLAorCQkubmFtZSA9ICJnMnNyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0cyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzA4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwOSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGYsCisJCS5uYW1lID0gImF2cGNhcm03ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BVlBDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmU0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxMCwKKwkJLm5hbWUgPSAiZGlzcGxheWhjIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmYwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDY4LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxMSwKKwkJLm5hbWUgPSAiZGlzcGxheWhjYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZmMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NjgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDEyLAorCQkubmFtZSA9ICJmZGNkcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMzQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDEzLAorCQkubmFtZSA9ICJmZGNkcmQyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzNjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNCwKKwkJLm5hbWUgPSAiZzJkciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9HMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTUsCisJCS5uYW1lID0gImhkYXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNiwKKwkJLm5hbWUgPSAiaG9zdDF4ZG1hciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTcsCisJCS5uYW1lID0gImhvc3QxeHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGE1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxOCwKKwkJLm5hbWUgPSAiaWR4c3JkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWMsCisJCS5uYW1lID0gIm1zZW5jc3JkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01TRU5DLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZCwKKwkJLm5hbWUgPSAicHBjc2FoYmRtYXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjksCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWUsCisJCS5uYW1lID0gInBwY3NhaGJzbHZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDMwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGU4LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMCwKKwkJLm5hbWUgPSAidGV4bDJzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMzOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjIsCisJCS5uYW1lID0gInZkZWJzZXZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMywKKwkJLm5hbWUgPSAidmRlbWJlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI0LAorCQkubmFtZSA9ICJ2ZGVtY2VyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGI4LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNSwKKwkJLm5hbWUgPSAidmRldHBlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZWUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI2LAorCQkubmFtZSA9ICJtcGNvcmVscHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFTFAsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjcsCisJCS5uYW1lID0gIm1wY29yZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI4LAorCQkubmFtZSA9ICJlcHB1IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzAwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgzMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjksCisJCS5uYW1lID0gImVwcHYiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NmMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJhLAorCQkubmFtZSA9ICJlcHB5IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NmMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJiLAorCQkubmFtZSA9ICJtc2VuY3N3ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NU0VOQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJjLAorCQkubmFtZSA9ICJ2aXdzYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0NywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmQsCisJCS5uYW1lID0gInZpd3UiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDEzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJlLAorCQkubmFtZSA9ICJ2aXd2IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzY4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmYsCisJCS5uYW1lID0gInZpd3kiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNmMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NDcsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMwLAorCQkubmFtZSA9ICJnMmR3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0cyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzBjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzMiwKKwkJLm5hbWUgPSAiYXZwY2FybTd3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzMywKKwkJLm5hbWUgPSAiZmRjZHdyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzQsCisJCS5uYW1lID0gImZkY3dyMiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzUsCisJCS5uYW1lID0gImhkYXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzYsCisJCS5uYW1lID0gImhvc3QxeHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MjUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM3LAorCQkubmFtZSA9ICJpc3B3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0lTUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzgsCisJCS5uYW1lID0gIm1wY29yZWxwdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkVMUCwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzksCisJCS5uYW1lID0gIm1wY29yZXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzYiwKKwkJLm5hbWUgPSAicHBjc2FoYmRtYXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhhNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2MsCisJCS5uYW1lID0gInBwY3NhaGJzbHZ3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDI4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGU4LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZSwKKwkJLm5hbWUgPSAidmRlYnNldnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAzMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzVjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZiwKKwkJLm5hbWUgPSAidmRlZGJndyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNWMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0MCwKKwkJLm5hbWUgPSAidmRlbWJldyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4OSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDEsCisJCS5uYW1lID0gInZkZXRwbXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDU5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0YSwKKwkJLm5hbWUgPSAieHVzYl9ob3N0ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0hPU1QsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDEwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzN2MsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YTUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDRiLAorCQkubmFtZSA9ICJ4dXNiX2hvc3R3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfSE9TVCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM3YywKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YTUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDRjLAorCQkubmFtZSA9ICJ4dXNiX2RldnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9ERVYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDEyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzODAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YTUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDRkLAorCQkubmFtZSA9ICJ4dXNiX2RldnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9ERVYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDEzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzODAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGE1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0ZSwKKwkJLm5hbWUgPSAiZmRjZHdyMyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGYsCisJCS5uYW1lID0gImZkY2RyZDMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDE1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzODQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDUwLAorCQkubmFtZSA9ICJmZGN3cjQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzODgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1MSwKKwkJLm5hbWUgPSAiZmRjcmQ0IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzg0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTIsCisJCS5uYW1lID0gImVtdWNpZnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRU1VQ0lGLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOGMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDUzLAorCQkubmFtZSA9ICJlbXVjaWZ3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VNVUNJRiwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzhjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTQsCisJCS5uYW1lID0gInRzZWNzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVFNFQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMjAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM5MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTUsCisJCS5uYW1lID0gInRzZWNzd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVFNFQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMjEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM5MCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zd2dyb3VwIHRlZ3JhMTE0X3N3Z3JvdXBzW10gPSB7CisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsICAgICAgICAucmVnID0gMHgyNDAgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsICAgICAgIC5yZWcgPSAweDI0NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwgICAgICAgLnJlZyA9IDB4MjQ4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsICAgICAgICAucmVnID0gMHgyNGMgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BVlBDLCAgICAgIC5yZWcgPSAweDIzYyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLCAgICAgICAgLnJlZyA9IDB4MjY4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLCAgICAgICAucmVnID0gMHgyNTQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywgICAgICAgIC5yZWcgPSAweDI1MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01TRU5DLCAgICAgLnJlZyA9IDB4MjY0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywgICAgICAucmVnID0gMHgyNzAgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsICAgICAgIC5yZWcgPSAweDI3YyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLCAgICAgICAgLnJlZyA9IDB4MjgwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQLCAgICAgICAucmVnID0gMHgyNTggfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0hPU1QsIC5yZWcgPSAweDI4OCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfREVWLCAgLnJlZyA9IDB4MjhjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVFNFQywgICAgICAucmVnID0gMHgyOTQgfSwKK307CisKK3N0YXRpYyB2b2lkIHRlZ3JhMTE0X2ZsdXNoX2RjYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJICBzaXplX3Qgc2l6ZSkKK3sKKwlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OworCXZvaWQgKnZpcnQgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CisKKwlfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEodmlydCwgc2l6ZSk7CisJb3V0ZXJfZmx1c2hfcmFuZ2UocGh5cywgcGh5cyArIHNpemUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfb3BzIHRlZ3JhMTE0X3NtbXVfb3BzID0geworCS5mbHVzaF9kY2FjaGUgPSB0ZWdyYTExNF9mbHVzaF9kY2FjaGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc29jIHRlZ3JhMTE0X3NtbXVfc29jID0geworCS5jbGllbnRzID0gdGVncmExMTRfbWNfY2xpZW50cywKKwkubnVtX2NsaWVudHMgPSBBUlJBWV9TSVpFKHRlZ3JhMTE0X21jX2NsaWVudHMpLAorCS5zd2dyb3VwcyA9IHRlZ3JhMTE0X3N3Z3JvdXBzLAorCS5udW1fc3dncm91cHMgPSBBUlJBWV9TSVpFKHRlZ3JhMTE0X3N3Z3JvdXBzKSwKKwkuc3VwcG9ydHNfcm91bmRfcm9iaW5fYXJiaXRyYXRpb24gPSBmYWxzZSwKKwkuc3VwcG9ydHNfcmVxdWVzdF9saW1pdCA9IGZhbHNlLAorCS5udW1fYXNpZHMgPSA0LAorCS5vcHMgPSAmdGVncmExMTRfc21tdV9vcHMsCit9OworCitjb25zdCBzdHJ1Y3QgdGVncmFfbWNfc29jIHRlZ3JhMTE0X21jX3NvYyA9IHsKKwkuY2xpZW50cyA9IHRlZ3JhMTE0X21jX2NsaWVudHMsCisJLm51bV9jbGllbnRzID0gQVJSQVlfU0laRSh0ZWdyYTExNF9tY19jbGllbnRzKSwKKwkubnVtX2FkZHJlc3NfYml0cyA9IDMyLAorCS5hdG9tX3NpemUgPSAzMiwKKwkuc21tdSA9ICZ0ZWdyYTExNF9zbW11X3NvYywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTEyNC5jIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmExMjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzhkNDBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmExMjQuYwpAQCAtMCwwICsxLDk5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMjQtbWMuaD4KKworI2luY2x1ZGUgIm1jLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfbWNfY2xpZW50IHRlZ3JhMTI0X21jX2NsaWVudHNbXSA9IHsKKwl7CisJCS5pZCA9IDB4MDAsCisJCS5uYW1lID0gInB0Y3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFRDLAorCX0sIHsKKwkJLmlkID0gMHgwMSwKKwkJLm5hbWUgPSAiZGlzcGxheTBhIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YzIsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDAyLAorCQkubmFtZSA9ICJkaXNwbGF5MGFiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGM2LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwMywKKwkJLm5hbWUgPSAiZGlzcGxheTBiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNCwKKwkJLm5hbWUgPSAiZGlzcGxheTBiYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA1LAorCQkubmFtZSA9ICJkaXNwbGF5MGMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDYsCisJCS5uYW1lID0gImRpc3BsYXkwY2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSA2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDBlLAorCQkubmFtZSA9ICJhZmlyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FGSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGYsCisJCS5uYW1lID0gImF2cGNhcm03ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BVlBDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmU0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxMCwKKwkJLm5hbWUgPSAiZGlzcGxheWhjIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmYwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxMSwKKwkJLm5hbWUgPSAiZGlzcGxheWhjYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZmMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE1LAorCQkubmFtZSA9ICJoZGFyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hEQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgyNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTYsCisJCS5uYW1lID0gImhvc3QxeGRtYXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MWUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE3LAorCQkubmFtZSA9ICJob3N0MXhyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzEwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWMsCisJCS5uYW1lID0gIm1zZW5jc3JkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01TRU5DLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDIzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZCwKKwkJLm5hbWUgPSAicHBjc2FoYmRtYXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjksCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0OSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWUsCisJCS5uYW1lID0gInBwY3NhaGJzbHZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDMwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDFhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZiwKKwkJLm5hbWUgPSAic2F0YXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0FUQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMzEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2NSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjIsCisJCS5uYW1lID0gInZkZWJzZXZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMywKKwkJLm5hbWUgPSAidmRlbWJlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4M2QsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI0LAorCQkubmFtZSA9ICJ2ZGVtY2VyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDY2LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNSwKKwkJLm5hbWUgPSAidmRldHBlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YTUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI2LAorCQkubmFtZSA9ICJtcGNvcmVscHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFTFAsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjcsCisJCS5uYW1lID0gIm1wY29yZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJiLAorCQkubmFtZSA9ICJtc2VuY3N3ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NU0VOQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMxLAorCQkubmFtZSA9ICJhZml3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FGSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMyLAorCQkubmFtZSA9ICJhdnBjYXJtN3ciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQVZQQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM1LAorCQkubmFtZSA9ICJoZGF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hEQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM2LAorCQkubmFtZSA9ICJob3N0MXh3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzOCwKKwkJLm5hbWUgPSAibXBjb3JlbHB3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRUxQLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzOSwKKwkJLm5hbWUgPSAibXBjb3JldyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkUsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNiLAorCQkubmFtZSA9ICJwcGNzYWhiZG1hdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzYywKKwkJLm5hbWUgPSAicHBjc2FoYnNsdnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNkLAorCQkubmFtZSA9ICJzYXRhdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TQVRBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzUwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2NSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2UsCisJCS5uYW1lID0gInZkZWJzZXZ3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMzAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2YsCisJCS5uYW1lID0gInZkZWRiZ3ciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAzMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzVjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDAsCisJCS5uYW1lID0gInZkZW1iZXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDQxLAorCQkubmFtZSA9ICJ2ZGV0cG13IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzYwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDQsCisJCS5uYW1lID0gImlzcHJhIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0lTUDIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM3MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxOCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDYsCisJCS5uYW1lID0gImlzcHdhIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0lTUDIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM3NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDcsCisJCS5uYW1lID0gImlzcHdiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0lTUDIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM3NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDRhLAorCQkubmFtZSA9ICJ4dXNiX2hvc3RyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfSE9TVCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM3YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgzOSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGIsCisJCS5uYW1lID0gInh1c2JfaG9zdHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9IT1NULAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzdjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGMsCisJCS5uYW1lID0gInh1c2JfZGV2ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0RFViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgzOSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGQsCisJCS5uYW1lID0gInh1c2JfZGV2dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0RFViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4MCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDRlLAorCQkubmFtZSA9ICJpc3ByYWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMkIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDE0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzODQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDUwLAorCQkubmFtZSA9ICJpc3B3YWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMkIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzODgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDUxLAorCQkubmFtZSA9ICJpc3B3YmIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMkIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDE3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzODgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1NCwKKwkJLm5hbWUgPSAidHNlY3NyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzkwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDliLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1NSwKKwkJLm5hbWUgPSAidHNlY3N3ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzkwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTYsCisJCS5uYW1lID0gImE5YXZwc2NyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0E5QVZQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2E0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1NywKKwkJLm5hbWUgPSAiYTlhdnBzY3ciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQTlBVlAsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDIzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYTQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1OCwKKwkJLm5hbWUgPSAiZ3B1c3JkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0dQVSwKKwkJLnNtbXUgPSB7CisJCQkvKiByZWFkLW9ubHkgKi8KKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2M4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDFhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1OSwKKwkJLm5hbWUgPSAiZ3B1c3dyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0dQVSwKKwkJLnNtbXUgPSB7CisJCQkvKiByZWFkLW9ubHkgKi8KKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2M4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NWEsCisJCS5uYW1lID0gImRpc3BsYXl0IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmYwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NjAsCisJCS5uYW1lID0gInNkbW1jcmEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMxQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2I4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2MSwKKwkJLm5hbWUgPSAic2RtbWNyYWEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMyQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2JjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2MiwKKwkJLm5hbWUgPSAic2RtbWNyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NETU1DM0EsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjM0LAorCQkJLmJpdCA9IDIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDNjMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0OSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NjMsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzRBLAorCQkubmFtZSA9ICJzZG1tY3JhYiIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjM0LAorCQkJLmJpdCA9IDMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDNjNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0OSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NjQsCisJCS5uYW1lID0gInNkbW1jd2EiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMxQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2I4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NjUsCisJCS5uYW1lID0gInNkbW1jd2FhIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NETU1DMkEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjM0LAorCQkJLmJpdCA9IDUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDNiYywKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDY2LAorCQkubmFtZSA9ICJzZG1tY3ciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMzQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2MwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NjcsCisJCS5uYW1lID0gInNkbW1jd2FiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NETU1DNEEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjM0LAorCQkJLmJpdCA9IDcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDNjNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDZjLAorCQkubmFtZSA9ICJ2aWNzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVklDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSAxMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzk0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDFhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2ZCwKKwkJLm5hbWUgPSAidmljc3dyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMTMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM5NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDcyLAorCQkubmFtZSA9ICJ2aXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjM0LAorCQkJLmJpdCA9IDE4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDczLAorCQkubmFtZSA9ICJkaXNwbGF5ZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMTksCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDNjOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgdGVncmExMjRfc3dncm91cHNbXSA9IHsKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywgICAgICAgIC5yZWcgPSAweDI0MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwgICAgICAgLnJlZyA9IDB4MjQ0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQUZJLCAgICAgICAucmVnID0gMHgyMzggfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BVlBDLCAgICAgIC5yZWcgPSAweDIzYyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hEQSwgICAgICAgLnJlZyA9IDB4MjU0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsICAgICAgICAucmVnID0gMHgyNTAgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NU0VOQywgICAgIC5yZWcgPSAweDI2NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsICAgICAgLnJlZyA9IDB4MjcwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0FUQSwgICAgICAucmVnID0gMHgyNzQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsICAgICAgIC5yZWcgPSAweDI3YyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0lTUDIsICAgICAgLnJlZyA9IDB4MjU4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9IT1NULCAucmVnID0gMHgyODggfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0RFViwgIC5yZWcgPSAweDI4YyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0lTUDJCLCAgICAgLnJlZyA9IDB4YWE0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVFNFQywgICAgICAucmVnID0gMHgyOTQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BOUFWUCwgICAgIC5yZWcgPSAweDI5MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0dQVSwgICAgICAgLnJlZyA9IDB4YWFjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMxQSwgICAucmVnID0gMHhhOTQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzJBLCAgIC5yZWcgPSAweGE5OCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NETU1DM0EsICAgLnJlZyA9IDB4YTljIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUM0QSwgICAucmVnID0gMHhhYTAgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSUMsICAgICAgIC5yZWcgPSAweDI4NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLCAgICAgICAgLnJlZyA9IDB4MjgwIH0sCit9OworCisjaWZkZWYgQ09ORklHX0FSQ0hfVEVHUkFfMTI0X1NPQworc3RhdGljIHZvaWQgdGVncmExMjRfZmx1c2hfZGNhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgIHNpemVfdCBzaXplKQoreworCXBoeXNfYWRkcl90IHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CisJdm9pZCAqdmlydCA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKworCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSh2aXJ0LCBzaXplKTsKKwlvdXRlcl9mbHVzaF9yYW5nZShwaHlzLCBwaHlzICsgc2l6ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9vcHMgdGVncmExMjRfc21tdV9vcHMgPSB7CisJLmZsdXNoX2RjYWNoZSA9IHRlZ3JhMTI0X2ZsdXNoX2RjYWNoZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zb2MgdGVncmExMjRfc21tdV9zb2MgPSB7CisJLmNsaWVudHMgPSB0ZWdyYTEyNF9tY19jbGllbnRzLAorCS5udW1fY2xpZW50cyA9IEFSUkFZX1NJWkUodGVncmExMjRfbWNfY2xpZW50cyksCisJLnN3Z3JvdXBzID0gdGVncmExMjRfc3dncm91cHMsCisJLm51bV9zd2dyb3VwcyA9IEFSUkFZX1NJWkUodGVncmExMjRfc3dncm91cHMpLAorCS5zdXBwb3J0c19yb3VuZF9yb2Jpbl9hcmJpdHJhdGlvbiA9IHRydWUsCisJLnN1cHBvcnRzX3JlcXVlc3RfbGltaXQgPSB0cnVlLAorCS5udW1fYXNpZHMgPSAxMjgsCisJLm9wcyA9ICZ0ZWdyYTEyNF9zbW11X29wcywKK307CisKK2NvbnN0IHN0cnVjdCB0ZWdyYV9tY19zb2MgdGVncmExMjRfbWNfc29jID0geworCS5jbGllbnRzID0gdGVncmExMjRfbWNfY2xpZW50cywKKwkubnVtX2NsaWVudHMgPSBBUlJBWV9TSVpFKHRlZ3JhMTI0X21jX2NsaWVudHMpLAorCS5udW1fYWRkcmVzc19iaXRzID0gMzQsCisJLmF0b21fc2l6ZSA9IDMyLAorCS5zbW11ID0gJnRlZ3JhMTI0X3NtbXVfc29jLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9URUdSQV8xMjRfU09DICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTMwLmMgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmZTkzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMzAuYwpAQCAtMCwwICsxLDk3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9tZW1vcnkvdGVncmEzMC1tYy5oPgorCisjaW5jbHVkZSAibWMuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9tY19jbGllbnQgdGVncmEzMF9tY19jbGllbnRzW10gPSB7CisJeworCQkuaWQgPSAweDAwLAorCQkubmFtZSA9ICJwdGNyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BUQywKKwl9LCB7CisJCS5pZCA9IDB4MDEsCisJCS5uYW1lID0gImRpc3BsYXkwYSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmU4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwMiwKKwkJLm5hbWUgPSAiZGlzcGxheTBhYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDMsCisJCS5uYW1lID0gImRpc3BsYXkwYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmU4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDQsCisJCS5uYW1lID0gImRpc3BsYXkwYmIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSA0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNSwKKwkJLm5hbWUgPSAiZGlzcGxheTBjIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSA1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZWMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA2LAorCQkubmFtZSA9ICJkaXNwbGF5MGNiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNywKKwkJLm5hbWUgPSAiZGlzcGxheTFiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSA3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZWMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwOCwKKwkJLm5hbWUgPSAiZGlzcGxheTFiYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA5LAorCQkubmFtZSA9ICJlcHB1cCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9FUFAsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDksCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxNywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGEsCisJCS5uYW1lID0gImcycHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDEwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDBiLAorCQkubmFtZSA9ICJnMnNyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0cyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzA4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwOSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGMsCisJCS5uYW1lID0gIm1wZXVuaWZiciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUEUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDEyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDBkLAorCQkubmFtZSA9ICJ2aXJ1diIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgyYywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGUsCisJCS5uYW1lID0gImFmaXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQUZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmUwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwZiwKKwkJLm5hbWUgPSAiYXZwY2FybTdyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDEwLAorCQkubmFtZSA9ICJkaXNwbGF5aGMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDExLAorCQkubmFtZSA9ICJkaXNwbGF5aGNiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTIsCisJCS5uYW1lID0gImZkY2RyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMzNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTMsCisJCS5uYW1lID0gImZkY2RyZDIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzNjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNCwKKwkJLm5hbWUgPSAiZzJkciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9HMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTUsCisJCS5uYW1lID0gImhkYXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNiwKKwkJLm5hbWUgPSAiaG9zdDF4ZG1hciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTcsCisJCS5uYW1lID0gImhvc3QxeHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxOCwKKwkJLm5hbWUgPSAiaWR4c3JkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTksCisJCS5uYW1lID0gImlkeHNyZDIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzNjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWEsCisJCS5uYW1lID0gIm1wZV9pcHJlZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUEUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxYiwKKwkJLm5hbWUgPSAibXBlYW1lbXJkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QRSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0MiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWMsCisJCS5uYW1lID0gIm1wZWNzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzJjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWQsCisJCS5uYW1lID0gInBwY3NhaGJkbWFyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDFlLAorCQkubmFtZSA9ICJwcGNzYWhic2x2ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAzMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWYsCisJCS5uYW1lID0gInNhdGFyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NBVEEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDMxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MzMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDIwLAorCQkubmFtZSA9ICJ0ZXhzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMzOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjEsCisJCS5uYW1lID0gInRleHNyZDIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDIyLAorCQkubmFtZSA9ICJ2ZGVic2V2ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjMsCisJCS5uYW1lID0gInZkZW1iZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGQwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNCwKKwkJLm5hbWUgPSAidmRlbWNlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgyYSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjUsCisJCS5uYW1lID0gInZkZXRwZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDc0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNiwKKwkJLm5hbWUgPSAibXBjb3JlbHByIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRUxQLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI3LAorCQkubmFtZSA9ICJtcGNvcmVyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzIwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyOCwKKwkJLm5hbWUgPSAiZXBwdSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9FUFAsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NmMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI5LAorCQkubmFtZSA9ICJlcHB2IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzA0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDZjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyYSwKKwkJLm5hbWUgPSAiZXBweSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9FUFAsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDEwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDZjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyYiwKKwkJLm5hbWUgPSAibXBldW5pZmJ3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QRSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMzMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmMsCisJCS5uYW1lID0gInZpd3NiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzY0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmQsCisJCS5uYW1lID0gInZpd3UiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDEzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YjIsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJlLAorCQkubmFtZSA9ICJ2aXd2IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzY4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhiMiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmYsCisJCS5uYW1lID0gInZpd3kiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNmMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTIsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMwLAorCQkubmFtZSA9ICJnMmR3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0cyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzBjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzMSwKKwkJLm5hbWUgPSAiYWZpdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BRkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzMiwKKwkJLm5hbWUgPSAiYXZwY2FybTd3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzMywKKwkJLm5hbWUgPSAiZmRjZHdyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzQsCisJCS5uYW1lID0gImZkY3dyMiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OVjIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNSwKKwkJLm5hbWUgPSAiaGRhdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IREEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNiwKKwkJLm5hbWUgPSAiaG9zdDF4dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzcsCisJCS5uYW1lID0gImlzcHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzFjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzOCwKKwkJLm5hbWUgPSAibXBjb3JlbHB3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRUxQLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzOSwKKwkJLm5hbWUgPSAibXBjb3JldyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkUsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNhLAorCQkubmFtZSA9ICJtcGVjc3dyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QRSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMzMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNiLAorCQkubmFtZSA9ICJwcGNzYWhiZG1hdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzYywKKwkJLm5hbWUgPSAicHBjc2FoYnNsdnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNkLAorCQkubmFtZSA9ICJzYXRhdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TQVRBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzUwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgzMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2UsCisJCS5uYW1lID0gInZkZWJzZXZ3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMzAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2YsCisJCS5uYW1lID0gInZkZWRiZ3ciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAzMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzVjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDAsCisJCS5uYW1lID0gInZkZW1iZXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NDIsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDQxLAorCQkubmFtZSA9ICJ2ZGV0cG13IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzYwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgyYSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgdGVncmEzMF9zd2dyb3Vwc1tdID0geworCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLCAgIC5yZWcgPSAweDI0MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwgIC5yZWcgPSAweDI0NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwgIC5yZWcgPSAweDI0OCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0cyLCAgIC5yZWcgPSAweDI0YyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QRSwgIC5yZWcgPSAweDI2NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLCAgIC5yZWcgPSAweDI4MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FGSSwgIC5yZWcgPSAweDIzOCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsIC5yZWcgPSAweDIzYyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLCAgIC5yZWcgPSAweDI2OCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WMiwgIC5yZWcgPSAweDI2YyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hEQSwgIC5yZWcgPSAweDI1NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLCAgIC5yZWcgPSAweDI1MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsIC5yZWcgPSAweDI3MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NBVEEsIC5yZWcgPSAweDI3OCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwgIC5yZWcgPSAweDI3YyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0lTUCwgIC5yZWcgPSAweDI1OCB9LAorfTsKKworc3RhdGljIHZvaWQgdGVncmEzMF9mbHVzaF9kY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSBzaXplX3Qgc2l6ZSkKK3sKKwlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OworCXZvaWQgKnZpcnQgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CisKKwlfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEodmlydCwgc2l6ZSk7CisJb3V0ZXJfZmx1c2hfcmFuZ2UocGh5cywgcGh5cyArIHNpemUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfb3BzIHRlZ3JhMzBfc21tdV9vcHMgPSB7CisJLmZsdXNoX2RjYWNoZSA9IHRlZ3JhMzBfZmx1c2hfZGNhY2hlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3NvYyB0ZWdyYTMwX3NtbXVfc29jID0geworCS5jbGllbnRzID0gdGVncmEzMF9tY19jbGllbnRzLAorCS5udW1fY2xpZW50cyA9IEFSUkFZX1NJWkUodGVncmEzMF9tY19jbGllbnRzKSwKKwkuc3dncm91cHMgPSB0ZWdyYTMwX3N3Z3JvdXBzLAorCS5udW1fc3dncm91cHMgPSBBUlJBWV9TSVpFKHRlZ3JhMzBfc3dncm91cHMpLAorCS5zdXBwb3J0c19yb3VuZF9yb2Jpbl9hcmJpdHJhdGlvbiA9IGZhbHNlLAorCS5zdXBwb3J0c19yZXF1ZXN0X2xpbWl0ID0gZmFsc2UsCisJLm51bV9hc2lkcyA9IDQsCisJLm9wcyA9ICZ0ZWdyYTMwX3NtbXVfb3BzLAorfTsKKworY29uc3Qgc3RydWN0IHRlZ3JhX21jX3NvYyB0ZWdyYTMwX21jX3NvYyA9IHsKKwkuY2xpZW50cyA9IHRlZ3JhMzBfbWNfY2xpZW50cywKKwkubnVtX2NsaWVudHMgPSBBUlJBWV9TSVpFKHRlZ3JhMzBfbWNfY2xpZW50cyksCisJLm51bV9hZGRyZXNzX2JpdHMgPSAzMiwKKwkuYXRvbV9zaXplID0gMTYsCisJLnNtbXUgPSAmdGVncmEzMF9zbW11X3NvYywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90ZWdyYTMwLW1jLmMgYi9kcml2ZXJzL21lbW9yeS90ZWdyYTMwLW1jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNzkzNDUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZW1vcnkvdGVncmEzMC1tYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzc4ICswLDAgQEAKLS8qCi0gKiBUZWdyYTMwIE1lbW9yeSBDb250cm9sbGVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNkZWZpbmUgRFJWX05BTUUgInRlZ3JhMzAtbWMiCi0KLSNkZWZpbmUgTUNfSU5UU1RBVFVTCQkJMHgwCi0jZGVmaW5lIE1DX0lOVE1BU0sJCQkweDQKLQotI2RlZmluZSBNQ19JTlRfRVJSX1NISUZUCQk2Ci0jZGVmaW5lIE1DX0lOVF9FUlJfTUFTSwkJCSgweDFmIDw8IE1DX0lOVF9FUlJfU0hJRlQpCi0jZGVmaW5lIE1DX0lOVF9ERUNFUlJfRU1FTQkJQklUKE1DX0lOVF9FUlJfU0hJRlQpCi0jZGVmaW5lIE1DX0lOVF9TRUNVUklUWV9WSU9MQVRJT04JQklUKE1DX0lOVF9FUlJfU0hJRlQgKyAyKQotI2RlZmluZSBNQ19JTlRfQVJCSVRSQVRJT05fRU1FTQkJQklUKE1DX0lOVF9FUlJfU0hJRlQgKyAzKQotI2RlZmluZSBNQ19JTlRfSU5WQUxJRF9TTU1VX1BBR0UJQklUKE1DX0lOVF9FUlJfU0hJRlQgKyA0KQotCi0jZGVmaW5lIE1DX0VSUl9TVEFUVVMJCQkweDgKLSNkZWZpbmUgTUNfRVJSX0FEUgkJCTB4YwotCi0jZGVmaW5lIE1DX0VSUl9UWVBFX1NISUZUCQkyOAotI2RlZmluZSBNQ19FUlJfVFlQRV9NQVNLCQkoNyA8PCBNQ19FUlJfVFlQRV9TSElGVCkKLSNkZWZpbmUgTUNfRVJSX1RZUEVfREVDRVJSX0VNRU0JCTIKLSNkZWZpbmUgTUNfRVJSX1RZUEVfU0VDVVJJVFlfVFJVU1RaT05FCTMKLSNkZWZpbmUgTUNfRVJSX1RZUEVfU0VDVVJJVFlfQ0FSVkVPVVQJNAotI2RlZmluZSBNQ19FUlJfVFlQRV9JTlZBTElEX1NNTVVfUEFHRQk2Ci0KLSNkZWZpbmUgTUNfRVJSX0lOVkFMSURfU01NVV9QQUdFX1NISUZUCTI1Ci0jZGVmaW5lIE1DX0VSUl9JTlZBTElEX1NNTVVfUEFHRV9NQVNLCSg3IDw8IE1DX0VSUl9JTlZBTElEX1NNTVVfUEFHRV9TSElGVCkKLSNkZWZpbmUgTUNfRVJSX1JXX1NISUZUCQkJMTYKLSNkZWZpbmUgTUNfRVJSX1JXCQkJQklUKE1DX0VSUl9SV19TSElGVCkKLSNkZWZpbmUgTUNfRVJSX1NFQ1VSSVRZCQkJQklUKE1DX0VSUl9SV19TSElGVCArIDEpCi0KLSNkZWZpbmUgU0VDVVJJVFlfVklPTEFUSU9OX1RZUEUJCUJJVCgzMCkJLyogMD1UUlVTVFpPTkUsIDE9Q0FSVkVPVVQgKi8KLQotI2RlZmluZSBNQ19FTUVNX0FSQl9DRkcJCQkweDkwCi0jZGVmaW5lIE1DX0VNRU1fQVJCX09VVFNUQU5ESU5HX1JFUQkweDk0Ci0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19SQ0QJCTB4OTgKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1JQCQkweDljCi0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19SQwkJMHhhMAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfUkFTCQkweGE0Ci0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19GQVcJCTB4YTgKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1JSRAkJMHhhYwotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfUkFQMlBSRQkweGIwCi0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19XQVAyUFJFCTB4YjQKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1IyUgkJMHhiOAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfVzJXCQkweGJjCi0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19SMlcJCTB4YzAKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1cyUgkJMHhjNAotCi0jZGVmaW5lIE1DX0VNRU1fQVJCX0RBX1RVUk5TCQkweGQwCi0jZGVmaW5lIE1DX0VNRU1fQVJCX0RBX0NPVkVSUwkJMHhkNAotI2RlZmluZSBNQ19FTUVNX0FSQl9NSVNDMAkJMHhkOAotI2RlZmluZSBNQ19FTUVNX0FSQl9NSVNDMQkJMHhkYwotCi0jZGVmaW5lIE1DX0VNRU1fQVJCX1JJTkczX1RIUk9UVExFCTB4ZTQKLSNkZWZpbmUgTUNfRU1FTV9BUkJfT1ZFUlJJREUJCTB4ZTgKLQotI2RlZmluZSBNQ19USU1JTkdfQ09OVFJPTAkJMHhmYwotCi0jZGVmaW5lIE1DX0NMSUVOVF9JRF9NQVNLCQkweDdmCi0KLSNkZWZpbmUgTlVNX01DX1JFR19CQU5LUwkJNAotCi1zdHJ1Y3QgdGVncmEzMF9tYyB7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzW05VTV9NQ19SRUdfQkFOS1NdOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQl1MzIgY3R4WzBdOwotfTsKLQotc3RhdGljIGlubGluZSB1MzIgbWNfcmVhZGwoc3RydWN0IHRlZ3JhMzBfbWMgKm1jLCB1MzIgb2ZmcykKLXsKLQl1MzIgdmFsID0gMDsKLQotCWlmIChvZmZzIDwgMHgxMCkKLQkJdmFsID0gcmVhZGwobWMtPnJlZ3NbMF0gKyBvZmZzKTsKLQllbHNlIGlmIChvZmZzIDwgMHgxZjApCi0JCXZhbCA9IHJlYWRsKG1jLT5yZWdzWzFdICsgb2ZmcyAtIDB4M2MpOwotCWVsc2UgaWYgKG9mZnMgPCAweDIyOCkKLQkJdmFsID0gcmVhZGwobWMtPnJlZ3NbMl0gKyBvZmZzIC0gMHgyMDApOwotCWVsc2UgaWYgKG9mZnMgPCAweDQwMCkKLQkJdmFsID0gcmVhZGwobWMtPnJlZ3NbM10gKyBvZmZzIC0gMHgyODQpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1jX3dyaXRlbChzdHJ1Y3QgdGVncmEzMF9tYyAqbWMsIHUzMiB2YWwsIHUzMiBvZmZzKQotewotCWlmIChvZmZzIDwgMHgxMCkKLQkJd3JpdGVsKHZhbCwgbWMtPnJlZ3NbMF0gKyBvZmZzKTsKLQllbHNlIGlmIChvZmZzIDwgMHgxZjApCi0JCXdyaXRlbCh2YWwsIG1jLT5yZWdzWzFdICsgb2ZmcyAtIDB4M2MpOwotCWVsc2UgaWYgKG9mZnMgPCAweDIyOCkKLQkJd3JpdGVsKHZhbCwgbWMtPnJlZ3NbMl0gKyBvZmZzIC0gMHgyMDApOwotCWVsc2UgaWYgKG9mZnMgPCAweDQwMCkKLQkJd3JpdGVsKHZhbCwgbWMtPnJlZ3NbM10gKyBvZmZzIC0gMHgyODQpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRlZ3JhMzBfbWNfY2xpZW50W10gPSB7Ci0JImNzcl9wdGNyIiwKLQkiY2JyX2Rpc3BsYXkwYSIsCi0JImNicl9kaXNwbGF5MGFiIiwKLQkiY2JyX2Rpc3BsYXkwYiIsCi0JImNicl9kaXNwbGF5MGJiIiwKLQkiY2JyX2Rpc3BsYXkwYyIsCi0JImNicl9kaXNwbGF5MGNiIiwKLQkiY2JyX2Rpc3BsYXkxYiIsCi0JImNicl9kaXNwbGF5MWJiIiwKLQkiY2JyX2VwcHVwIiwKLQkiY2JyX2cycHIiLAotCSJjYnJfZzJzciIsCi0JImNicl9tcGV1bmlmYnIiLAotCSJjYnJfdmlydXYiLAotCSJjc3JfYWZpciIsCi0JImNzcl9hdnBjYXJtN3IiLAotCSJjc3JfZGlzcGxheWhjIiwKLQkiY3NyX2Rpc3BsYXloY2IiLAotCSJjc3JfZmRjZHJkIiwKLQkiY3NyX2ZkY2RyZDIiLAotCSJjc3JfZzJkciIsCi0JImNzcl9oZGFyIiwKLQkiY3NyX2hvc3QxeGRtYXIiLAotCSJjc3JfaG9zdDF4ciIsCi0JImNzcl9pZHhzcmQiLAotCSJjc3JfaWR4c3JkMiIsCi0JImNzcl9tcGVfaXByZWQiLAotCSJjc3JfbXBlYW1lbXJkIiwKLQkiY3NyX21wZWNzcmQiLAotCSJjc3JfcHBjc2FoYmRtYXIiLAotCSJjc3JfcHBjc2FoYnNsdnIiLAotCSJjc3Jfc2F0YXIiLAotCSJjc3JfdGV4c3JkIiwKLQkiY3NyX3RleHNyZDIiLAotCSJjc3JfdmRlYnNldnIiLAotCSJjc3JfdmRlbWJlciIsCi0JImNzcl92ZGVtY2VyIiwKLQkiY3NyX3ZkZXRwZXIiLAotCSJjc3JfbXBjb3JlbHByIiwKLQkiY3NyX21wY29yZXIiLAotCSJjYndfZXBwdSIsCi0JImNid19lcHB2IiwKLQkiY2J3X2VwcHkiLAotCSJjYndfbXBldW5pZmJ3IiwKLQkiY2J3X3Zpd3NiIiwKLQkiY2J3X3Zpd3UiLAotCSJjYndfdml3diIsCi0JImNid192aXd5IiwKLQkiY2N3X2cyZHciLAotCSJjc3dfYWZpdyIsCi0JImNzd19hdnBjYXJtN3ciLAotCSJjc3dfZmRjZHdyIiwKLQkiY3N3X2ZkY2R3cjIiLAotCSJjc3dfaGRhdyIsCi0JImNzd19ob3N0MXh3IiwKLQkiY3N3X2lzcHciLAotCSJjc3dfbXBjb3JlbHB3IiwKLQkiY3N3X21wY29yZXciLAotCSJjc3dfbXBlY3N3ciIsCi0JImNzd19wcGNzYWhiZG1hdyIsCi0JImNzd19wcGNzYWhic2x2dyIsCi0JImNzd19zYXRhdyIsCi0JImNzd192ZGVic2V2dyIsCi0JImNzd192ZGVkYmd3IiwKLQkiY3N3X3ZkZW1iZXciLAotCSJjc3dfdmRldHBtdyIsCi19OwotCi1zdGF0aWMgdm9pZCB0ZWdyYTMwX21jX2RlY29kZShzdHJ1Y3QgdGVncmEzMF9tYyAqbWMsIGludCBuKQotewotCXUzMiBlcnIsIGFkZHI7Ci0JY29uc3QgY2hhciAqIGNvbnN0IG1jX2ludF9lcnJbXSA9IHsKLQkJIk1DX0RFQ0VSUiIsCi0JCSJVbmtub3duIiwKLQkJIk1DX1NFQ1VSSVRZX0VSUiIsCi0JCSJNQ19BUkJJVFJBVElPTl9FTUVNIiwKLQkJIk1DX1NNTVVfRVJSIiwKLQl9OwotCWNvbnN0IGNoYXIgKiBjb25zdCBlcnJfdHlwZVtdID0gewotCQkiVW5rbm93biIsCi0JCSJVbmtub3duIiwKLQkJIkRFQ0VSUl9FTUVNIiwKLQkJIlNFQ1VSSVRZX1RSVVNUWk9ORSIsCi0JCSJTRUNVUklUWV9DQVJWRU9VVCIsCi0JCSJVbmtub3duIiwKLQkJIklOVkFMSURfU01NVV9QQUdFIiwKLQkJIlVua25vd24iLAotCX07Ci0JY2hhciBhdHRyWzZdOwotCWludCBjaWQsIHBlcm0sIHR5cGUsIGlkeDsKLQljb25zdCBjaGFyICpjbGllbnQgPSAiVW5rbm93biI7Ci0KLQlpZHggPSBuIC0gTUNfSU5UX0VSUl9TSElGVDsKLQlpZiAoKGlkeCA8IDApIHx8IChpZHggPj0gQVJSQVlfU0laRShtY19pbnRfZXJyKSkgfHwgKGlkeCA9PSAxKSkgewotCQlkZXZfZXJyX3JhdGVsaW1pdGVkKG1jLT5kZXYsICJVbmtub3duIGludGVycnVwdCBzdGF0dXMgJTA4bHhcbiIsCi0JCQkJICAgIEJJVChuKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQllcnIgPSBtY19yZWFkbChtYywgTUNfRVJSX1NUQVRVUyk7Ci0KLQl0eXBlID0gKGVyciAmIE1DX0VSUl9UWVBFX01BU0spID4+IE1DX0VSUl9UWVBFX1NISUZUOwotCXBlcm0gPSAoZXJyICYgTUNfRVJSX0lOVkFMSURfU01NVV9QQUdFX01BU0spID4+Ci0JCU1DX0VSUl9JTlZBTElEX1NNTVVfUEFHRV9TSElGVDsKLQlpZiAodHlwZSA9PSBNQ19FUlJfVFlQRV9JTlZBTElEX1NNTVVfUEFHRSkKLQkJc3ByaW50ZihhdHRyLCAiJWMtJWMtJWMiLAotCQkJKHBlcm0gJiBCSVQoMikpID8gJ1InIDogJy0nLAotCQkJKHBlcm0gJiBCSVQoMSkpID8gJ1cnIDogJy0nLAotCQkJKHBlcm0gJiBCSVQoMCkpID8gJ1MnIDogJy0nKTsKLQllbHNlCi0JCWF0dHJbMF0gPSAnXDAnOwotCi0JY2lkID0gZXJyICYgTUNfQ0xJRU5UX0lEX01BU0s7Ci0JaWYgKGNpZCA8IEFSUkFZX1NJWkUodGVncmEzMF9tY19jbGllbnQpKQotCQljbGllbnQgPSB0ZWdyYTMwX21jX2NsaWVudFtjaWRdOwotCi0JYWRkciA9IG1jX3JlYWRsKG1jLCBNQ19FUlJfQURSKTsKLQotCWRldl9lcnJfcmF0ZWxpbWl0ZWQobWMtPmRldiwgIiVzICgweCUwOHgpOiAweCUwOHggJXMgKCVzICVzICVzICVzKVxuIiwKLQkJCSAgIG1jX2ludF9lcnJbaWR4XSwgZXJyLCBhZGRyLCBjbGllbnQsCi0JCQkgICAoZXJyICYgTUNfRVJSX1NFQ1VSSVRZKSA/ICJzZWN1cmUiIDogIm5vbi1zZWN1cmUiLAotCQkJICAgKGVyciAmIE1DX0VSUl9SVykgPyAid3JpdGUiIDogInJlYWQiLAotCQkJICAgZXJyX3R5cGVbdHlwZV0sIGF0dHIpOwotfQotCi1zdGF0aWMgY29uc3QgdTMyIHRlZ3JhMzBfbWNfY3R4W10gPSB7Ci0JTUNfRU1FTV9BUkJfQ0ZHLAotCU1DX0VNRU1fQVJCX09VVFNUQU5ESU5HX1JFUSwKLQlNQ19FTUVNX0FSQl9USU1JTkdfUkNELAotCU1DX0VNRU1fQVJCX1RJTUlOR19SUCwKLQlNQ19FTUVNX0FSQl9USU1JTkdfUkMsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1JBUywKLQlNQ19FTUVNX0FSQl9USU1JTkdfRkFXLAotCU1DX0VNRU1fQVJCX1RJTUlOR19SUkQsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1JBUDJQUkUsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1dBUDJQUkUsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1IyUiwKLQlNQ19FTUVNX0FSQl9USU1JTkdfVzJXLAotCU1DX0VNRU1fQVJCX1RJTUlOR19SMlcsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1cyUiwKLQlNQ19FTUVNX0FSQl9EQV9UVVJOUywKLQlNQ19FTUVNX0FSQl9EQV9DT1ZFUlMsCi0JTUNfRU1FTV9BUkJfTUlTQzAsCi0JTUNfRU1FTV9BUkJfTUlTQzEsCi0JTUNfRU1FTV9BUkJfUklORzNfVEhST1RUTEUsCi0JTUNfRU1FTV9BUkJfT1ZFUlJJREUsCi0JTUNfSU5UTUFTSywKLX07Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgdGVncmEzMF9tY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgdGVncmEzMF9tYyAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhMzBfbWNfY3R4KTsgaSsrKQotCQltYy0+Y3R4W2ldID0gbWNfcmVhZGwobWMsIHRlZ3JhMzBfbWNfY3R4W2ldKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZWdyYTMwX21jX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHRlZ3JhMzBfbWMgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZWdyYTMwX21jX2N0eCk7IGkrKykKLQkJbWNfd3JpdGVsKG1jLCBtYy0+Y3R4W2ldLCB0ZWdyYTMwX21jX2N0eFtpXSk7Ci0KLQltY193cml0ZWwobWMsIDEsIE1DX1RJTUlOR19DT05UUk9MKTsKLQkvKiBSZWFkLWJhY2sgdG8gZW5zdXJlIHRoYXQgd3JpdGUgcmVhY2hlZCAqLwotCW1jX3JlYWRsKG1jLCBNQ19USU1JTkdfQ09OVFJPTCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFVOSVZFUlNBTF9ERVZfUE1fT1BTKHRlZ3JhMzBfbWNfcG0sCi0JCQkgICAgdGVncmEzMF9tY19zdXNwZW5kLAotCQkJICAgIHRlZ3JhMzBfbWNfcmVzdW1lLCBOVUxMKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVncmEzMF9tY19vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMzAtbWMiLCB9LAotCXt9LAotfTsKLQotc3RhdGljIGlycXJldHVybl90IHRlZ3JhMzBfbWNfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCi17Ci0JdTMyIHN0YXQsIG1hc2ssIGJpdDsKLQlzdHJ1Y3QgdGVncmEzMF9tYyAqbWMgPSBkYXRhOwotCi0Jc3RhdCA9IG1jX3JlYWRsKG1jLCBNQ19JTlRTVEFUVVMpOwotCW1hc2sgPSBtY19yZWFkbChtYywgTUNfSU5UTUFTSyk7Ci0JbWFzayAmPSBzdGF0OwotCWlmICghbWFzaykKLQkJcmV0dXJuIElSUV9OT05FOwotCXdoaWxlICgoYml0ID0gZmZzKG1hc2spKSAhPSAwKSB7Ci0JCXRlZ3JhMzBfbWNfZGVjb2RlKG1jLCBiaXQgLSAxKTsKLQkJbWFzayAmPSB+QklUKGJpdCAtIDEpOwotCX0KLQotCW1jX3dyaXRlbChtYywgc3RhdCwgTUNfSU5UU1RBVFVTKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgdGVncmEzMF9tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCByZXNvdXJjZSAqaXJxOwotCXN0cnVjdCB0ZWdyYTMwX21jICptYzsKLQlzaXplX3QgYnl0ZXM7Ci0JaW50IGVyciwgaTsKLQl1MzIgaW50bWFzazsKLQotCWJ5dGVzID0gc2l6ZW9mKCptYykgKyBzaXplb2YodTMyKSAqIEFSUkFZX1NJWkUodGVncmEzMF9tY19jdHgpOwotCW1jID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIGJ5dGVzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1jKQotCQlyZXR1cm4gLUVOT01FTTsKLQltYy0+ZGV2ID0gJnBkZXYtPmRldjsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1jLT5yZWdzKTsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCi0JCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgaSk7Ci0JCW1jLT5yZWdzW2ldID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7Ci0JCWlmIChJU19FUlIobWMtPnJlZ3NbaV0pKQotCQkJcmV0dXJuIFBUUl9FUlIobWMtPnJlZ3NbaV0pOwotCX0KLQotCWlycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7Ci0JaWYgKCFpcnEpCi0JCXJldHVybiAtRU5PREVWOwotCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLT5zdGFydCwgdGVncmEzMF9tY19pc3IsCi0JCQkgICAgICAgSVJRRl9TSEFSRUQsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBtYyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYyk7Ci0KLQlpbnRtYXNrID0gTUNfSU5UX0lOVkFMSURfU01NVV9QQUdFIHwKLQkJTUNfSU5UX0RFQ0VSUl9FTUVNIHwgTUNfSU5UX1NFQ1VSSVRZX1ZJT0xBVElPTjsKLQltY193cml0ZWwobWMsIGludG1hc2ssIE1DX0lOVE1BU0spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYTMwX21jX2RyaXZlciA9IHsKLQkucHJvYmUgPSB0ZWdyYTMwX21jX3Byb2JlLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gRFJWX05BTUUsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkub2ZfbWF0Y2hfdGFibGUgPSB0ZWdyYTMwX21jX29mX21hdGNoLAotCQkucG0gPSAmdGVncmEzMF9tY19wbSwKLQl9LAotfTsKLW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIodGVncmEzMF9tY19kcml2ZXIpOwotCi1NT0RVTEVfQVVUSE9SKCJIaXJvc2hpIERPWVUgPGhkb3l1QG52aWRpYS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlRlZ3JhMzAgTUMgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKaW5kZXggMDcwN2ZhMi4uNWJkYWFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCkBAIC0xOTk0LDYgKzE5OTQsNyBAQAogCS5jbWRfcGVyX2x1bgkJCT0gNywKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycwkJCT0gbXB0c2NzaWhfaG9zdF9hdHRycywKKwkudXNlX2Jsa190YWdzCQkJPSAxLAogfTsKIAogc3RhdGljIGludCBtcHRzYXNfZ2V0X2xpbmtlcnJvcnMoc3RydWN0IHNhc19waHkgKnBoeSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwppbmRleCBlN2RjYjI1Li42YzlmYzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCkBAIC0yMzExLDI2ICsyMzExLDIxIEBACiAgKgltcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGEgZGV2aWNlcyBxdWV1ZSBkZXB0aAogICoJQHNkZXY6IHBlciBzY3NpX2RldmljZSBwb2ludGVyCiAgKglAcWRlcHRoOiByZXF1ZXN0ZWQgcXVldWUgZGVwdGgKLSAqCUByZWFzb246IGNhbGxpbmcgY29udGV4dAogICoKICAqCUFkZGluZyBzdXBwb3J0IGZvciBuZXcgJ2NoYW5nZV9xdWV1ZV9kZXB0aCcgYXBpLgogKi8KIGludAotbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKK21wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJTVBUX1NDU0lfSE9TVAkJKmhkID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKIAlWaXJ0VGFyZ2V0IAkJKnZ0YXJnZXQ7CiAJc3RydWN0IHNjc2lfdGFyZ2V0IAkqc3RhcmdldDsKIAlpbnQJCQltYXhfZGVwdGg7Ci0JaW50CQkJdGFnZ2VkOwogCU1QVF9BREFQVEVSCQkqaW9jID0gaGQtPmlvYzsKIAogCXN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKIAl2dGFyZ2V0ID0gc3RhcmdldC0+aG9zdGRhdGE7CiAKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChpb2MtPmJ1c190eXBlID09IFNQSSkgewogCQlpZiAoISh2dGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTKSkKIAkJCW1heF9kZXB0aCA9IDE7CkBAIC0yMzQ3LDEzICsyMzQyLDggQEAKIAogCWlmIChxZGVwdGggPiBtYXhfZGVwdGgpCiAJCXFkZXB0aCA9IG1heF9kZXB0aDsKLQlpZiAocWRlcHRoID09IDEpCi0JCXRhZ2dlZCA9IDA7Ci0JZWxzZQotCQl0YWdnZWQgPSBNU0dfU0lNUExFX1RBRzsKIAotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHRhZ2dlZCwgcWRlcHRoKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiB9CiAKIC8qCkBAIC0yMzk3LDEyICsyMzg3LDEwIEBACiAJCSAgICBpb2MtPm5hbWUsIHZ0YXJnZXQtPm5lZ29GbGFncywgdnRhcmdldC0+bWF4T2Zmc2V0LAogCQkgICAgdnRhcmdldC0+bWluU3luY0ZhY3RvcikpOwogCi0JbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIE1QVF9TQ1NJX0NNRF9QRVJfREVWX0hJR0gsCi0JCQkJICAgIFNDU0lfUURFUFRIX0RFRkFVTFQpOworCW1wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBNUFRfU0NTSV9DTURfUEVSX0RFVl9ISUdIKTsKIAlkc3ByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVAotCQkidGFnZ2VkICVkLCBzaW1wbGUgJWQsIG9yZGVyZWQgJWRcbiIsCi0JCWlvYy0+bmFtZSxzZGV2LT50YWdnZWRfc3VwcG9ydGVkLCBzZGV2LT5zaW1wbGVfdGFncywKLQkJc2Rldi0+b3JkZXJlZF90YWdzKSk7CisJCSJ0YWdnZWQgJWQsIHNpbXBsZSAlZFxuIiwKKwkJaW9jLT5uYW1lLHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQsIHNkZXYtPnNpbXBsZV90YWdzKSk7CiAKIAlibGtfcXVldWVfZG1hX2FsaWdubWVudCAoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNTEyIC0gMSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaAppbmRleCBlMWIxYTE5Li4yYmFlZWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCkBAIC0xMjgsOCArMTI4LDcgQEAKIGV4dGVybiBpbnQgbXB0c2NzaWhfc2NhbmR2X2NvbXBsZXRlKE1QVF9BREFQVEVSICppb2MsIE1QVF9GUkFNRV9IRFIgKm1mLCBNUFRfRlJBTUVfSERSICpyKTsKIGV4dGVybiBpbnQgbXB0c2NzaWhfZXZlbnRfcHJvY2VzcyhNUFRfQURBUFRFUiAqaW9jLCBFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKnBFdlJlcGx5KTsKIGV4dGVybiBpbnQgbXB0c2NzaWhfaW9jX3Jlc2V0KE1QVF9BREFQVEVSICppb2MsIGludCBwb3N0X3Jlc2V0KTsKLWV4dGVybiBpbnQgbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwKLQkJCQkgICAgICAgaW50IHJlYXNvbik7CitleHRlcm4gaW50IG1wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpOwogZXh0ZXJuIHU4IG1wdHNjc2loX3JhaWRfaWRfdG9fbnVtKE1QVF9BREFQVEVSICppb2MsIHU4IGNoYW5uZWwsIHU4IGlkKTsKIGV4dGVybiBpbnQgbXB0c2NzaWhfaXNfcGh5c19kaXNrKE1QVF9BREFQVEVSICppb2MsIHU4IGNoYW5uZWwsIHU4IGlkKTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0c2NzaWhfaG9zdF9hdHRyc1tdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKaW5kZXggMTQ1NmVhNy4uMmU2YjczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCkBAIC01OSw2ICs1OSwxNyBAQAogCSAgYWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgdGhlCiAJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkZXZpY2UuCiAKK2NvbmZpZyBNRkRfQVRNRUxfSExDREMKKwl0cmlzdGF0ZSAiQXRtZWwgSExDREMgKEhpZ2gtZW5kIExDRCBDb250cm9sbGVyKSIKKwlzZWxlY3QgTUZEX0NPUkUKKwlzZWxlY3QgUkVHTUFQX01NSU8KKwlkZXBlbmRzIG9uIE9GCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBITENEQyBibG9jay4KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBhY2Nlc3NpbmcgdGhlIGRldmljZSwKKwkgIGFkZGl0aW9uYWwgZHJpdmVycyBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIHRoZQorCSAgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGV2aWNlLgorCiBjb25maWcgTUZEX0JDTTU5MFhYCiAJdHJpc3RhdGUgIkJyb2FkY29tIEJDTTU5MHh4IFBNVXMiCiAJc2VsZWN0IE1GRF9DT1JFCkBAIC03NCw3ICs4NSw4IEBACiAJc2VsZWN0IFJFR01BUF9JUlEKIAlkZXBlbmRzIG9uIEkyQz15CiAJaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQVhQMjAyIGFuZCBBWFAyMDkuCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBWFAyMDIsIEFYUDIwOSBhbmQKKwkgIEFYUDI4OCBwb3dlciBtYW5hZ2VtZW50IElDIChQTUlDKS4KIAkgIFRoaXMgZHJpdmVyIGluY2x1ZGUgb25seSB0aGUgY29yZSBBUElzLiBZb3UgaGF2ZSB0byBzZWxlY3QgaW5kaXZpZHVhbAogCSAgY29tcG9uZW50cyBsaWtlIHJlZ3VsYXRvcnMgb3IgdGhlIFBFSyAoUG93ZXIgRW5hYmxlIEtleSkgdW5kZXIgdGhlCiAJICBjb3JyZXNwb25kaW5nIG1lbnVzLgpAQCAtMTgzLDYgKzE5NSwxNiBAQAogCSAgQWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgdGhlIGZ1bmN0aW9uYWxpdHkKIAkgIG9mIHRoZSBkZXZpY2UuCiAKK2NvbmZpZyBNRkRfRExOMgorCXRyaXN0YXRlICJEaW9sYW4gRExOMiBzdXBwb3J0IgorCXNlbGVjdCBNRkRfQ09SRQorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERpb2xhbiBVU0ItSTJDL1NQSS9HUElPIE1hc3RlciBBZGFwdGVyCisJICBETE4tMi4gQWRkaXRpb25hbCBkcml2ZXJzIHN1Y2ggYXMgSTJDX0RMTjIsIEdQSU9fRExOMiwKKwkgIGV0Yy4gbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHVzZSB0aGUgZnVuY3Rpb25hbGl0eSBvZgorCSAgdGhlIGRldmljZS4KKwogY29uZmlnIE1GRF9NQzEzWFhYCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIChTUElfTUFTVEVSIHx8IEkyQykKQEAgLTY1NSw3ICs2NzcsNiBAQAogCXNlbGVjdCBNRkRfQ09SRQogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFJFR01BUF9JUlEKLQlzZWxlY3QgUkVHVUxBVE9SCiAJaGVscAogCSBTdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBFbGVjdHJvbmljcyBNRkQgc2VyaWVzLgogCSBUaGlzIGRyaXZlciBwcm92aWRlcyBjb21tb24gc3VwcG9ydCBmb3IgYWNjZXNzaW5nIHRoZSBkZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IDhiZDU0YjEuLjUzNDY3ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC0xMyw3ICsxMyw3IEBACiBvYmotJChDT05GSUdfTUZEX0NST1NfRUNfSTJDKQkrPSBjcm9zX2VjX2kyYy5vCiBvYmotJChDT05GSUdfTUZEX0NST1NfRUNfU1BJKQkrPSBjcm9zX2VjX3NwaS5vCiAKLXJ0c3hfcGNpLW9ianMJCQk6PSBydHN4X3Bjci5vIHJ0czUyMDkubyBydHM1MjI5Lm8gcnRsODQxMS5vIHJ0czUyMjcubyBydHM1MjQ5Lm8KK3J0c3hfcGNpLW9ianMJCQk6PSBydHN4X3Bjci5vIHJ0c3hfZ29wcy5vIHJ0czUyMDkubyBydHM1MjI5Lm8gcnRsODQxMS5vIHJ0czUyMjcubyBydHM1MjQ5Lm8KIG9iai0kKENPTkZJR19NRkRfUlRTWF9QQ0kpCSs9IHJ0c3hfcGNpLm8KIG9iai0kKENPTkZJR19NRkRfUlRTWF9VU0IpCSs9IHJ0c3hfdXNiLm8KIApAQCAtMTU3LDYgKzE1Nyw3IEBACiBvYmotJChDT05GSUdfVFBTNjU5MTFfQ09NUEFSQVRPUikJKz0gdHBzNjU5MTEtY29tcGFyYXRvci5vCiBvYmotJChDT05GSUdfTUZEX1RQUzY1MDkwKQkrPSB0cHM2NTA5MC5vCiBvYmotJChDT05GSUdfTUZEX0FBVDI4NzBfQ09SRSkJKz0gYWF0Mjg3MC1jb3JlLm8KK29iai0kKENPTkZJR19NRkRfQVRNRUxfSExDREMpCSs9IGF0bWVsLWhsY2RjLm8KIG9iai0kKENPTkZJR19NRkRfSU5URUxfTVNJQykJKz0gaW50ZWxfbXNpYy5vCiBvYmotJChDT05GSUdfTUZEX1BBTE1BUykJKz0gcGFsbWFzLm8KIG9iai0kKENPTkZJR19NRkRfVklQRVJCT0FSRCkgICAgKz0gdmlwZXJib2FyZC5vCkBAIC0xNzQsNiArMTc1LDcgQEAKIG9iai0kKENPTkZJR19NRkRfSVBBUV9NSUNSTykJKz0gaXBhcS1taWNyby5vCiBvYmotJChDT05GSUdfTUZEX01FTkYyMUJNQykJKz0gbWVuZjIxYm1jLm8KIG9iai0kKENPTkZJR19NRkRfSEk2NDIxX1BNSUMpCSs9IGhpNjQyMS1wbWljLWNvcmUubworb2JqLSQoQ09ORklHX01GRF9ETE4yKQkJKz0gZGxuMi5vCiAKIGludGVsLXNvYy1wbWljLW9ianMJCTo9IGludGVsX3NvY19wbWljX2NvcmUubyBpbnRlbF9zb2NfcG1pY19jcmMubwogb2JqLSQoQ09ORklHX0lOVEVMX1NPQ19QTUlDKQkrPSBpbnRlbC1zb2MtcG1pYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYjg1MDAtc3lzY3RybC5jIGIvZHJpdmVycy9tZmQvYWI4NTAwLXN5c2N0cmwuYwppbmRleCA4ZTBkYWU1Li45NGRiY2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hYjg1MDAtc3lzY3RybC5jCisrKyBiL2RyaXZlcnMvbWZkL2FiODUwMC1zeXNjdHJsLmMKQEAgLTg1LDYzICs4NSw2IEBACiAJfQogfQogCi0vKgotICogVXNlIHRoZSBBQiBXRCB0byByZXNldCB0aGUgcGxhdGZvcm0uIEl0IHdpbGwgcGVyZm9ybSBhIGhhcmQKLSAqIHJlc2V0IGluc3RlYWQgb2YgYSBzb2Z0IHJlc2V0LiBXcml0ZSB0aGUgcmVzZXQgcmVhc29uIHRvCi0gKiB0aGUgQUIgYmVmb3JlIHJlc2V0LCB3aGljaCBjYW4gYmUgcmVhZCB1cG9uIHJlc3RhcnQuCi0gKi8KLXZvaWQgYWI4NTAwX3Jlc3RhcnQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCi17Ci0Jc3RydWN0IGFiODUwMF9wbGF0Zm9ybV9kYXRhICpwbGF0OwotCXN0cnVjdCBhYjg1MDBfc3lzY3RybF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKLQl1MTYgcmVhc29uID0gMDsKLQl1OCB2YWw7Ci0KLQlpZiAoc3lzY3RybF9kZXYgPT0gTlVMTCkgewotCQlwcl9lcnIoIiVzOiBzeXNjdHJsIG5vdCBpbml0aWFsaXplZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0JcGxhdCA9IGRldl9nZXRfcGxhdGRhdGEoc3lzY3RybF9kZXYtPnBhcmVudCk7Ci0JcGRhdGEgPSBwbGF0LT5zeXNjdHJsOwotCWlmIChwZGF0YSAmJiBwZGF0YS0+cmVib290X3JlYXNvbl9jb2RlKQotCQlyZWFzb24gPSBwZGF0YS0+cmVib290X3JlYXNvbl9jb2RlKGNtZCk7Ci0JZWxzZQotCQlwcl93YXJuKCJbJXNdIE5vIHJlYm9vdCByZWFzb24gc2V0LiBEZWZhdWx0IHJlYXNvbiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZWFzb24pOwotCi0JLyoKLQkgKiBEaXNhYmxlIFJUQyBhbGFybSwganVzdCBhIHByZWNhdXRpb24gc28gdGhhdCBubyBhbGFybQotCSAqIGlzIHJ1bm5pbmcgd2hlbiBXRCByZXNldCBpcyBleGVjdXRlZC4KLQkgKi8KLQlhYng1MDBfZ2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoc3lzY3RybF9kZXYsIEFCODUwMF9SVEMsCi0JCVJUQ19DVFJMICwgJnZhbCk7Ci0JYWJ4NTAwX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKHN5c2N0cmxfZGV2LCBBQjg1MDBfUlRDLAotCQlSVENfQ1RSTCAsICh2YWwgJiB+UlRDX0FMQVJNX0VOQUJMRSkpOwotCi0JLyoKLQkgKiBBbmRyb2lkIGlzIG5vdCB1c2luZyB0aGUgUlRDIGFsYXJtIHJlZ2lzdGVycyBkdXJpbmcgcmVib290Ci0JICogc28gd2UgYm9ycm93IHRoZW0gZm9yIHdyaXRpbmcgdGhlIHJlYXNvbiBvZiByZXNldAotCSAqLwotCi0JLyogcmVhc29uWzggTFNCXSAqLwotCXZhbCA9IHJlYXNvbiAmIDB4RkY7Ci0JYWJ4NTAwX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKHN5c2N0cmxfZGV2LCBBQjg1MDBfUlRDLAotCQlBQjg1MDBfQUxBUk1fTUlOX0xPVyAsIHZhbCk7Ci0KLQkvKiByZWFzb25bOCBNU0JdICovCi0JdmFsID0gKHJlYXNvbj4+OCkgJiAweEZGOwotCWFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShzeXNjdHJsX2RldiwgQUI4NTAwX1JUQywKLQkJQUI4NTAwX0FMQVJNX01JTl9NSUQgLCB2YWwpOwotCi0JLyogU2V0dGluZyBXRCB0aW1lb3V0IHRvIDAgKi8KLQlhYjg1MDBfc3lzY3RybF93cml0ZShBQjg1MDBfTUFJTldET0dUSU1FUiwgMHhGRiwgMHgwKTsKLQotCS8qIFNldHRpbmcgdGhlIHBhcmFtZXRlcnMgdG8gQUI4NTAwIFdEKi8KLQlhYjg1MDBfc3lzY3RybF93cml0ZShBQjg1MDBfTUFJTldET0dDVFJMLCAweEZGLCAoQUI4NTAwX0VOQUJMRV9XRCB8Ci0JCUFCODUwMF9XRF9SRVNUQVJUX09OX0VYUElSRSB8IEFCODUwMF9LSUNLX1dEKSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCB2YWxpZF9iYW5rKHU4IGJhbmspCiB7CiAJcmV0dXJuICgoYmFuayA9PSBBQjg1MDBfU1lTX0NUUkwxX0JMT0NLKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXJpem9uYS1zcGkuYyBiL2RyaXZlcnMvbWZkL2FyaXpvbmEtc3BpLmMKaW5kZXggNTE0NWQ3OC4uOGVmNThiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXJpem9uYS1zcGkuYworKysgYi9kcml2ZXJzL21mZC9hcml6b25hLXNwaS5jCkBAIC03NSw3ICs3NSw5IEBACiBzdGF0aWMgaW50IGFyaXpvbmFfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBhcml6b25hICphcml6b25hID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKIAlhcml6b25hX2Rldl9leGl0KGFyaXpvbmEpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2F0bWVsLWhsY2RjLmMgYi9kcml2ZXJzL21mZC9hdG1lbC1obGNkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDU4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9hdG1lbC1obGNkYy5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgRWxlY3Ryb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXRtZWwKKyAqCisgKiBBdXRob3I6IEJvcmlzIEJSRVpJTExPTiA8Ym9yaXMuYnJlemlsbG9uQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYXRtZWwtaGxjZGMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCisjZGVmaW5lIEFUTUVMX0hMQ0RDX1JFR19NQVgJCSgweDQwMDAgLSAweDQpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgYXRtZWxfaGxjZGNfY2VsbHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImF0bWVsLWhsY2RjLXB3bSIsCisJCS5vZl9jb21wYXRpYmxlID0gImF0bWVsLGhsY2RjLXB3bSIsCisJfSwKKwl7CisJCS5uYW1lID0gImF0bWVsLWhsY2RjLWRjIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAiYXRtZWwsaGxjZGMtZGlzcGxheS1jb250cm9sbGVyIiwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGF0bWVsX2hsY2RjX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gMzIsCisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorCS5tYXhfcmVnaXN0ZXIgPSBBVE1FTF9ITENEQ19SRUdfTUFYLAorfTsKKworc3RhdGljIGludCBhdG1lbF9obGNkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGF0bWVsX2hsY2RjICpobGNkYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwlobGNkYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGxjZGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhsY2RjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VSUihyZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVncyk7CisKKwlobGNkYy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaGxjZGMtPmlycSA8IDApCisJCXJldHVybiBobGNkYy0+aXJxOworCisJaGxjZGMtPnBlcmlwaF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGVyaXBoX2NsayIpOworCWlmIChJU19FUlIoaGxjZGMtPnBlcmlwaF9jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwZXJpcGhlcmFsIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaGxjZGMtPnBlcmlwaF9jbGspOworCX0KKworCWhsY2RjLT5zeXNfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInN5c19jbGsiKTsKKwlpZiAoSVNfRVJSKGhsY2RjLT5zeXNfY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgc3lzdGVtIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaGxjZGMtPnN5c19jbGspOworCX0KKworCWhsY2RjLT5zbG93X2NsayA9IGRldm1fY2xrX2dldChkZXYsICJzbG93X2NsayIpOworCWlmIChJU19FUlIoaGxjZGMtPnNsb3dfY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgc2xvdyBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKGhsY2RjLT5zbG93X2Nsayk7CisJfQorCisJaGxjZGMtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIHJlZ3MsCisJCQkJCSAgICAgICZhdG1lbF9obGNkY19yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKGhsY2RjLT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihobGNkYy0+cmVnbWFwKTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhsY2RjKTsKKworCXJldHVybiBtZmRfYWRkX2RldmljZXMoZGV2LCAtMSwgYXRtZWxfaGxjZGNfY2VsbHMsCisJCQkgICAgICAgQVJSQVlfU0laRShhdG1lbF9obGNkY19jZWxscyksCisJCQkgICAgICAgTlVMTCwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfaGxjZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJbWZkX3JlbW92ZV9kZXZpY2VzKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0bWVsX2hsY2RjX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQzLWhsY2RjIiB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWVsX2hsY2RjX2RyaXZlciA9IHsKKwkucHJvYmUgPSBhdG1lbF9obGNkY19wcm9iZSwKKwkucmVtb3ZlID0gYXRtZWxfaGxjZGNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImF0bWVsLWhsY2RjIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gYXRtZWxfaGxjZGNfbWF0Y2gsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF0bWVsX2hsY2RjX2RyaXZlcik7CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06YXRtZWwtaGxjZGMiKTsKK01PRFVMRV9BVVRIT1IoIkJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGZyZWUtZWxlY3Ryb25zLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXRtZWwgSExDREMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9heHAyMHguYyBiL2RyaXZlcnMvbWZkL2F4cDIweC5jCmluZGV4IDYyMzFhZGIuLmM1MjJlZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2F4cDIweC5jCisrKyBiL2RyaXZlcnMvbWZkL2F4cDIweC5jCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqIGF4cDIweC5jIC0gTUZEIGNvcmUgZHJpdmVyIGZvciB0aGUgWC1Qb3dlcnMgQVhQMjAyIGFuZCBBWFAyMDkKKyAqIGF4cDIweC5jIC0gTUZEIGNvcmUgZHJpdmVyIGZvciB0aGUgWC1Qb3dlcnMnIFBvd2VyIE1hbmFnZW1lbnQgSUNzCiAgKgotICogQVhQMjB4IGNvbXByaXNlcyBhbiBhZGFwdGl2ZSBVU0ItQ29tcGF0aWJsZSBQV00gY2hhcmdlciwgMiBCVUNLIERDLURDCi0gKiBjb252ZXJ0ZXJzLCA1IExET3MsIG11bHRpcGxlIDEyLWJpdCBBRENzIG9mIHZvbHRhZ2UsIGN1cnJlbnQgYW5kIHRlbXBlcmF0dXJlCi0gKiBhcyB3ZWxsIGFzIDQgY29uZmlndXJhYmxlIEdQSU9zLgorICogQVhQMjB4IHR5cGljYWxseSBjb21wcmlzZXMgYW4gYWRhcHRpdmUgVVNCLUNvbXBhdGlibGUgUFdNIGNoYXJnZXIsIEJVQ0sgREMtREMKKyAqIGNvbnZlcnRlcnMsIExET3MsIG11bHRpcGxlIDEyLWJpdCBBRENzIG9mIHZvbHRhZ2UsIGN1cnJlbnQgYW5kIHRlbXBlcmF0dXJlCisgKiBhcyB3ZWxsIGFzIGNvbmZpZ3VyYWJsZSBHUElPcy4KICAqCiAgKiBBdXRob3I6IENhcmxvIENhaW9uZSA8Y2FybG9AY2Fpb25lLm9yZz4KICAqCkBAIC0yNSw5ICsyNSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCiAjZGVmaW5lIEFYUDIwWF9PRkYJMHg4MAogCitzdGF0aWMgY29uc3QgY2hhciBjb25zdCAqYXhwMjB4X21vZGVsX25hbWVzW10gPSB7CisJIkFYUDIwMiIsCisJIkFYUDIwOSIsCisJIkFYUDI4OCIsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBheHAyMHhfd3JpdGVhYmxlX3Jhbmdlc1tdID0gewogCXJlZ21hcF9yZWdfcmFuZ2UoQVhQMjBYX0RBVEFDQUNIRSgwKSwgQVhQMjBYX0lSUTVfU1RBVEUpLAogCXJlZ21hcF9yZWdfcmFuZ2UoQVhQMjBYX0RDRENfTU9ERSwgQVhQMjBYX0ZHX1JFUyksCkBAIC00Nyw2ICs1NCwyNSBAQAogCS5uX3llc19yYW5nZXMJPSBBUlJBWV9TSVpFKGF4cDIweF92b2xhdGlsZV9yYW5nZXMpLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2UgYXhwMjg4X3dyaXRlYWJsZV9yYW5nZXNbXSA9IHsKKwlyZWdtYXBfcmVnX3JhbmdlKEFYUDIwWF9EQVRBQ0FDSEUoMCksIEFYUDIwWF9JUlE2X1NUQVRFKSwKKwlyZWdtYXBfcmVnX3JhbmdlKEFYUDIwWF9EQ0RDX01PREUsIEFYUDI4OF9GR19UVU5FNSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBheHAyODhfdm9sYXRpbGVfcmFuZ2VzW10gPSB7CisJcmVnbWFwX3JlZ19yYW5nZShBWFAyMFhfSVJRMV9FTiwgQVhQMjBYX0lQU09VVF9WX0hJR0hfTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgYXhwMjg4X3dyaXRlYWJsZV90YWJsZSA9IHsKKwkueWVzX3Jhbmdlcwk9IGF4cDI4OF93cml0ZWFibGVfcmFuZ2VzLAorCS5uX3llc19yYW5nZXMJPSBBUlJBWV9TSVpFKGF4cDI4OF93cml0ZWFibGVfcmFuZ2VzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSBheHAyODhfdm9sYXRpbGVfdGFibGUgPSB7CisJLnllc19yYW5nZXMJPSBheHAyODhfdm9sYXRpbGVfcmFuZ2VzLAorCS5uX3llc19yYW5nZXMJPSBBUlJBWV9TSVpFKGF4cDI4OF92b2xhdGlsZV9yYW5nZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBheHAyMHhfcGVrX3Jlc291cmNlc1tdID0gewogCXsKIAkJLm5hbWUJPSAiUEVLX0RCUiIsCkBAIC02MSw2ICs4NywzOSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF4cDI4OF9iYXR0ZXJ5X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9RV0JUVSwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9RV0JUVSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IEFYUDI4OF9JUlFfV0JUVSwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9XQlRVLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9RV0JUTywKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9RV0JUTywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IEFYUDI4OF9JUlFfV0JUTywKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9XQlRPLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9XTDIsCisJCS5lbmQgICA9IEFYUDI4OF9JUlFfV0wyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9XTDEsCisJCS5lbmQgICA9IEFYUDI4OF9JUlFfV0wxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGF4cDIweF9yZWdtYXBfY29uZmlnID0gewogCS5yZWdfYml0cwk9IDgsCiAJLnZhbF9iaXRzCT0gOCwKQEAgLTcwLDQ3ICsxMjksOTYgQEAKIAkuY2FjaGVfdHlwZQk9IFJFR0NBQ0hFX1JCVFJFRSwKIH07CiAKLSNkZWZpbmUgQVhQMjBYX0lSUShfaXJxLCBfb2ZmLCBfbWFzaykgXAotCVtBWFAyMFhfSVJRXyMjX2lycV0gPSB7IC5yZWdfb2Zmc2V0ID0gKF9vZmYpLCAubWFzayA9IEJJVChfbWFzaykgfQorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGF4cDI4OF9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cwk9IDgsCisJLnZhbF9iaXRzCT0gOCwKKwkud3JfdGFibGUJPSAmYXhwMjg4X3dyaXRlYWJsZV90YWJsZSwKKwkudm9sYXRpbGVfdGFibGUJPSAmYXhwMjg4X3ZvbGF0aWxlX3RhYmxlLAorCS5tYXhfcmVnaXN0ZXIJPSBBWFAyODhfRkdfVFVORTUsCisJLmNhY2hlX3R5cGUJPSBSRUdDQUNIRV9SQlRSRUUsCit9OworCisjZGVmaW5lIElOSVRfUkVHTUFQX0lSUShfdmFyaWFudCwgX2lycSwgX29mZiwgX21hc2spCQkJXAorCVtfdmFyaWFudCMjX0lSUV8jI19pcnFdID0geyAucmVnX29mZnNldCA9IChfb2ZmKSwgLm1hc2sgPSBCSVQoX21hc2spIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfaXJxIGF4cDIweF9yZWdtYXBfaXJxc1tdID0gewotCUFYUDIwWF9JUlEoQUNJTl9PVkVSX1YsCQkwLCA3KSwKLQlBWFAyMFhfSVJRKEFDSU5fUExVR0lOLAkJMCwgNiksCi0JQVhQMjBYX0lSUShBQ0lOX1JFTU9WQUwsCTAsIDUpLAotCUFYUDIwWF9JUlEoVkJVU19PVkVSX1YsCQkwLCA0KSwKLQlBWFAyMFhfSVJRKFZCVVNfUExVR0lOLAkJMCwgMyksCi0JQVhQMjBYX0lSUShWQlVTX1JFTU9WQUwsCTAsIDIpLAotCUFYUDIwWF9JUlEoVkJVU19WX0xPVywJCTAsIDEpLAotCUFYUDIwWF9JUlEoQkFUVF9QTFVHSU4sCQkxLCA3KSwKLQlBWFAyMFhfSVJRKEJBVFRfUkVNT1ZBTCwJMSwgNiksCi0JQVhQMjBYX0lSUShCQVRUX0VOVF9BQ1RfTU9ERSwJMSwgNSksCi0JQVhQMjBYX0lSUShCQVRUX0VYSVRfQUNUX01PREUsCTEsIDQpLAotCUFYUDIwWF9JUlEoQ0hBUkcsCQkxLCAzKSwKLQlBWFAyMFhfSVJRKENIQVJHX0RPTkUsCQkxLCAyKSwKLQlBWFAyMFhfSVJRKEJBVFRfVEVNUF9ISUdILAkxLCAxKSwKLQlBWFAyMFhfSVJRKEJBVFRfVEVNUF9MT1csCTEsIDApLAotCUFYUDIwWF9JUlEoRElFX1RFTVBfSElHSCwJMiwgNyksCi0JQVhQMjBYX0lSUShDSEFSR19JX0xPVywJCTIsIDYpLAotCUFYUDIwWF9JUlEoRENEQzFfVl9MT05HLAkyLCA1KSwKLQlBWFAyMFhfSVJRKERDREMyX1ZfTE9ORywJMiwgNCksCi0JQVhQMjBYX0lSUShEQ0RDM19WX0xPTkcsCTIsIDMpLAotCUFYUDIwWF9JUlEoUEVLX1NIT1JULAkJMiwgMSksCi0JQVhQMjBYX0lSUShQRUtfTE9ORywJCTIsIDApLAotCUFYUDIwWF9JUlEoTl9PRV9QV1JfT04sCQkzLCA3KSwKLQlBWFAyMFhfSVJRKE5fT0VfUFdSX09GRiwJMywgNiksCi0JQVhQMjBYX0lSUShWQlVTX1ZBTElELAkJMywgNSksCi0JQVhQMjBYX0lSUShWQlVTX05PVF9WQUxJRCwJMywgNCksCi0JQVhQMjBYX0lSUShWQlVTX1NFU1NfVkFMSUQsCTMsIDMpLAotCUFYUDIwWF9JUlEoVkJVU19TRVNTX0VORCwJMywgMiksCi0JQVhQMjBYX0lSUShMT1dfUFdSX0xWTDEsCTMsIDEpLAotCUFYUDIwWF9JUlEoTE9XX1BXUl9MVkwyLAkzLCAwKSwKLQlBWFAyMFhfSVJRKFRJTUVSLAkJNCwgNyksCi0JQVhQMjBYX0lSUShQRUtfUklTX0VER0UsCTQsIDYpLAotCUFYUDIwWF9JUlEoUEVLX0ZBTF9FREdFLAk0LCA1KSwKLQlBWFAyMFhfSVJRKEdQSU8zX0lOUFVULAkJNCwgMyksCi0JQVhQMjBYX0lSUShHUElPMl9JTlBVVCwJCTQsIDIpLAotCUFYUDIwWF9JUlEoR1BJTzFfSU5QVVQsCQk0LCAxKSwKLQlBWFAyMFhfSVJRKEdQSU8wX0lOUFVULAkJNCwgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQUNJTl9PVkVSX1YsCQkwLCA3KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBBQ0lOX1BMVUdJTiwJCTAsIDYpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEFDSU5fUkVNT1ZBTCwJICAgICAgICAwLCA1KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBWQlVTX09WRVJfViwJCTAsIDQpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFZCVVNfUExVR0lOLAkJMCwgMyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19SRU1PVkFMLAkgICAgICAgIDAsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFZCVVNfVl9MT1csCQkwLCAxKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBCQVRUX1BMVUdJTiwJCTEsIDcpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEJBVFRfUkVNT1ZBTCwJICAgICAgICAxLCA2KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBCQVRUX0VOVF9BQ1RfTU9ERSwJMSwgNSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQkFUVF9FWElUX0FDVF9NT0RFLAkxLCA0KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBDSEFSRywJCSAgICAgICAgMSwgMyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQ0hBUkdfRE9ORSwJCTEsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEJBVFRfVEVNUF9ISUdILAkgICAgICAgIDEsIDEpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEJBVFRfVEVNUF9MT1csCSAgICAgICAgMSwgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgRElFX1RFTVBfSElHSCwJICAgICAgICAyLCA3KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBDSEFSR19JX0xPVywJCTIsIDYpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIERDREMxX1ZfTE9ORywJICAgICAgICAyLCA1KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBEQ0RDMl9WX0xPTkcsCSAgICAgICAgMiwgNCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgRENEQzNfVl9MT05HLAkgICAgICAgIDIsIDMpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFBFS19TSE9SVCwJCTIsIDEpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFBFS19MT05HLAkJMiwgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgTl9PRV9QV1JfT04sCQkzLCA3KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBOX09FX1BXUl9PRkYsCSAgICAgICAgMywgNiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19WQUxJRCwJCTMsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFZCVVNfTk9UX1ZBTElELAkgICAgICAgIDMsIDQpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFZCVVNfU0VTU19WQUxJRCwJMywgMyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19TRVNTX0VORCwJICAgICAgICAzLCAyKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBMT1dfUFdSX0xWTDEsCSAgICAgICAgMywgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgTE9XX1BXUl9MVkwyLAkgICAgICAgIDMsIDApLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFRJTUVSLAkJICAgICAgICA0LCA3KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBQRUtfUklTX0VER0UsCSAgICAgICAgNCwgNiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgUEVLX0ZBTF9FREdFLAkgICAgICAgIDQsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEdQSU8zX0lOUFVULAkJNCwgMyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgR1BJTzJfSU5QVVQsCQk0LCAyKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBHUElPMV9JTlBVVCwJCTQsIDEpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEdQSU8wX0lOUFVULAkJNCwgMCksCit9OworCisvKiBzb21lIElSUXMgYXJlIGNvbXBhdGlibGUgd2l0aCBheHAyMHggbW9kZWxzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnEgYXhwMjg4X3JlZ21hcF9pcnFzW10gPSB7CisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgVkJVU19GQUxMLCAgICAgICAgICAgICAgMCwgMiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgVkJVU19SSVNFLCAgICAgICAgICAgICAgMCwgMyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgT1YsICAgICAgICAgICAgICAgICAgICAgMCwgNCksCisKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBET05FLCAgICAgICAgICAgICAgICAgICAxLCAyKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBDSEFSR0lORywgICAgICAgICAgICAgICAxLCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBTQUZFX1FVSVQsICAgICAgICAgICAgICAxLCA0KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBTQUZFX0VOVEVSLCAgICAgICAgICAgICAxLCA1KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBBQlNFTlQsICAgICAgICAgICAgICAgICAxLCA2KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBBUFBFTkQsICAgICAgICAgICAgICAgICAxLCA3KSwKKworCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFFXQlRVLCAgICAgICAgICAgICAgICAgIDIsIDApLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFdCVFUsICAgICAgICAgICAgICAgICAgIDIsIDEpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFFXQlRPLCAgICAgICAgICAgICAgICAgIDIsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFdCVE8sICAgICAgICAgICAgICAgICAgIDIsIDMpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFFDQlRVLCAgICAgICAgICAgICAgICAgIDIsIDQpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIENCVFUsICAgICAgICAgICAgICAgICAgIDIsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFFDQlRPLCAgICAgICAgICAgICAgICAgIDIsIDYpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIENCVE8sICAgICAgICAgICAgICAgICAgIDIsIDcpLAorCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgV0wyLCAgICAgICAgICAgICAgICAgICAgMywgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgV0wxLCAgICAgICAgICAgICAgICAgICAgMywgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgR1BBREMsICAgICAgICAgICAgICAgICAgMywgMiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgT1QsICAgICAgICAgICAgICAgICAgICAgMywgNyksCisKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBHUElPMCwgICAgICAgICAgICAgICAgICA0LCAwKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBHUElPMSwgICAgICAgICAgICAgICAgICA0LCAxKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBQT0tPLCAgICAgICAgICAgICAgICAgICA0LCAyKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBQT0tMLCAgICAgICAgICAgICAgICAgICA0LCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBQT0tTLCAgICAgICAgICAgICAgICAgICA0LCA0KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBQT0tOLCAgICAgICAgICAgICAgICAgICA0LCA1KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBQT0tQLCAgICAgICAgICAgICAgICAgICA0LCA2KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBUSU1FUiwgICAgICAgICAgICAgICAgICA0LCA3KSwKKworCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIE1WX0NITkcsICAgICAgICAgICAgICAgIDUsIDApLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIEJDX1VTQl9DSE5HLCAgICAgICAgICAgIDUsIDEpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXhwMjB4X29mX21hdGNoW10gPSB7CkBAIC0xMjgsMTYgKzIzNiwzOSBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBheHAyMHhfaTJjX2lkKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBheHAyMHhfYWNwaV9tYXRjaFtdID0geworCXsKKwkJLmlkID0gIklOVDMzRjQiLAorCQkuZHJpdmVyX2RhdGEgPSBBWFAyODhfSUQsCisJfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBheHAyMHhfYWNwaV9tYXRjaCk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwIGF4cDIweF9yZWdtYXBfaXJxX2NoaXAgPSB7CiAJLm5hbWUJCQk9ICJheHAyMHhfaXJxX2NoaXAiLAogCS5zdGF0dXNfYmFzZQkJPSBBWFAyMFhfSVJRMV9TVEFURSwKIAkuYWNrX2Jhc2UJCT0gQVhQMjBYX0lSUTFfU1RBVEUsCiAJLm1hc2tfYmFzZQkJPSBBWFAyMFhfSVJRMV9FTiwKLQkubnVtX3JlZ3MJCT0gNSwKLQkuaXJxcwkJCT0gYXhwMjB4X3JlZ21hcF9pcnFzLAotCS5udW1faXJxcwkJPSBBUlJBWV9TSVpFKGF4cDIweF9yZWdtYXBfaXJxcyksCiAJLm1hc2tfaW52ZXJ0CQk9IHRydWUsCiAJLmluaXRfYWNrX21hc2tlZAk9IHRydWUsCisJLmlycXMJCQk9IGF4cDIweF9yZWdtYXBfaXJxcywKKwkubnVtX2lycXMJCT0gQVJSQVlfU0laRShheHAyMHhfcmVnbWFwX2lycXMpLAorCS5udW1fcmVncwkJPSA1LAorCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnFfY2hpcCBheHAyODhfcmVnbWFwX2lycV9jaGlwID0geworCS5uYW1lCQkJPSAiYXhwMjg4X2lycV9jaGlwIiwKKwkuc3RhdHVzX2Jhc2UJCT0gQVhQMjBYX0lSUTFfU1RBVEUsCisJLmFja19iYXNlCQk9IEFYUDIwWF9JUlExX1NUQVRFLAorCS5tYXNrX2Jhc2UJCT0gQVhQMjBYX0lSUTFfRU4sCisJLm1hc2tfaW52ZXJ0CQk9IHRydWUsCisJLmluaXRfYWNrX21hc2tlZAk9IHRydWUsCisJLmlycXMJCQk9IGF4cDI4OF9yZWdtYXBfaXJxcywKKwkubnVtX2lycXMJCT0gQVJSQVlfU0laRShheHAyODhfcmVnbWFwX2lycXMpLAorCS5udW1fcmVncwkJPSA2LAorCiB9OwogCiBzdGF0aWMgc3RydWN0IG1mZF9jZWxsIGF4cDIweF9jZWxsc1tdID0gewpAQCAtMTUwLDM2ICsyODEsMTU1IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXhwMjg4X2FkY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lICA9ICJHUEFEQyIsCisJCS5zdGFydCA9IEFYUDI4OF9JUlFfR1BBREMsCisJCS5lbmQgICA9IEFYUDI4OF9JUlFfR1BBREMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF4cDI4OF9jaGFyZ2VyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9PViwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9PViwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IEFYUDI4OF9JUlFfRE9ORSwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9ET05FLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9DSEFSR0lORywKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9DSEFSR0lORywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IEFYUDI4OF9JUlFfU0FGRV9RVUlULAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1NBRkVfUVVJVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IEFYUDI4OF9JUlFfU0FGRV9FTlRFUiwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9TQUZFX0VOVEVSLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9RQ0JUVSwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9RQ0JUVSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IEFYUDI4OF9JUlFfQ0JUVSwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9DQlRVLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9RQ0JUTywKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9RQ0JUTywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IEFYUDI4OF9JUlFfQ0JUTywKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9DQlRPLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBheHAyODhfY2VsbHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImF4cDI4OF9hZGMiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYXhwMjg4X2FkY19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gYXhwMjg4X2FkY19yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gImF4cDI4OF9jaGFyZ2VyIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGF4cDI4OF9jaGFyZ2VyX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSBheHAyODhfY2hhcmdlcl9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gImF4cDI4OF9iYXR0ZXJ5IiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGF4cDI4OF9iYXR0ZXJ5X3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSBheHAyODhfYmF0dGVyeV9yZXNvdXJjZXMsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYXhwMjB4X2RldiAqYXhwMjB4X3BtX3Bvd2VyX29mZjsKIHN0YXRpYyB2b2lkIGF4cDIweF9wb3dlcl9vZmYodm9pZCkKIHsKKwlpZiAoYXhwMjB4X3BtX3Bvd2VyX29mZi0+dmFyaWFudCA9PSBBWFAyODhfSUQpCisJCXJldHVybjsKKwogCXJlZ21hcF93cml0ZShheHAyMHhfcG1fcG93ZXJfb2ZmLT5yZWdtYXAsIEFYUDIwWF9PRkZfQ1RSTCwKIAkJICAgICBBWFAyMFhfT0ZGKTsKIH0KIAorc3RhdGljIGludCBheHAyMHhfbWF0Y2hfZGV2aWNlKHN0cnVjdCBheHAyMHhfZGV2ICpheHAyMHgsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmFjcGlfaWQ7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CisKKwlpZiAoZGV2LT5vZl9ub2RlKSB7CisJCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKGF4cDIweF9vZl9tYXRjaCwgZGV2KTsKKwkJaWYgKCFvZl9pZCkgeworCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gbWF0Y2ggT0YgSURcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJYXhwMjB4LT52YXJpYW50ID0gKGxvbmcpIG9mX2lkLT5kYXRhOworCX0gZWxzZSB7CisJCWFjcGlfaWQgPSBhY3BpX21hdGNoX2RldmljZShkZXYtPmRyaXZlci0+YWNwaV9tYXRjaF90YWJsZSwgZGV2KTsKKwkJaWYgKCFhY3BpX2lkIHx8ICFhY3BpX2lkLT5kcml2ZXJfZGF0YSkgeworCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gbWF0Y2ggQUNQSSBJRCBhbmQgZGF0YVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlheHAyMHgtPnZhcmlhbnQgPSAobG9uZykgYWNwaV9pZC0+ZHJpdmVyX2RhdGE7CisJfQorCisJc3dpdGNoIChheHAyMHgtPnZhcmlhbnQpIHsKKwljYXNlIEFYUDIwMl9JRDoKKwljYXNlIEFYUDIwOV9JRDoKKwkJYXhwMjB4LT5ucl9jZWxscyA9IEFSUkFZX1NJWkUoYXhwMjB4X2NlbGxzKTsKKwkJYXhwMjB4LT5jZWxscyA9IGF4cDIweF9jZWxsczsKKwkJYXhwMjB4LT5yZWdtYXBfY2ZnID0gJmF4cDIweF9yZWdtYXBfY29uZmlnOworCQlheHAyMHgtPnJlZ21hcF9pcnFfY2hpcCA9ICZheHAyMHhfcmVnbWFwX2lycV9jaGlwOworCQlicmVhazsKKwljYXNlIEFYUDI4OF9JRDoKKwkJYXhwMjB4LT5jZWxscyA9IGF4cDI4OF9jZWxsczsKKwkJYXhwMjB4LT5ucl9jZWxscyA9IEFSUkFZX1NJWkUoYXhwMjg4X2NlbGxzKTsKKwkJYXhwMjB4LT5yZWdtYXBfY2ZnID0gJmF4cDI4OF9yZWdtYXBfY29uZmlnOworCQlheHAyMHgtPnJlZ21hcF9pcnFfY2hpcCA9ICZheHAyODhfcmVnbWFwX2lycV9jaGlwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInVuc3VwcG9ydGVkIEFYUDIwWCBJRCAlbHVcbiIsIGF4cDIweC0+dmFyaWFudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZfaW5mbyhkZXYsICJBWFAyMHggdmFyaWFudCAlcyBmb3VuZFxuIiwKKwkJYXhwMjB4X21vZGVsX25hbWVzW2F4cDIweC0+dmFyaWFudF0pOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXhwMjB4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgYXhwMjB4X2RldiAqYXhwMjB4OwotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOwogCWludCByZXQ7CiAKIAlheHAyMHggPSBkZXZtX2t6YWxsb2MoJmkyYy0+ZGV2LCBzaXplb2YoKmF4cDIweCksIEdGUF9LRVJORUwpOwogCWlmICghYXhwMjB4KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKGF4cDIweF9vZl9tYXRjaCwgJmkyYy0+ZGV2KTsKLQlpZiAoIW9mX2lkKSB7Ci0JCWRldl9lcnIoJmkyYy0+ZGV2LCAiVW5hYmxlIHRvIHNldHVwIEFYUDIwWCBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWF4cDIweC0+dmFyaWFudCA9IChsb25nKSBvZl9pZC0+ZGF0YTsKKwlyZXQgPSBheHAyMHhfbWF0Y2hfZGV2aWNlKGF4cDIweCwgJmkyYy0+ZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJYXhwMjB4LT5pMmNfY2xpZW50ID0gaTJjOwogCWF4cDIweC0+ZGV2ID0gJmkyYy0+ZGV2OwogCWRldl9zZXRfZHJ2ZGF0YShheHAyMHgtPmRldiwgYXhwMjB4KTsKIAotCWF4cDIweC0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCAmYXhwMjB4X3JlZ21hcF9jb25maWcpOworCWF4cDIweC0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCBheHAyMHgtPnJlZ21hcF9jZmcpOwogCWlmIChJU19FUlIoYXhwMjB4LT5yZWdtYXApKSB7CiAJCXJldCA9IFBUUl9FUlIoYXhwMjB4LT5yZWdtYXApOwogCQlkZXZfZXJyKCZpMmMtPmRldiwgInJlZ21hcCBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CkBAIC0xODgsMTUgKzQzOCwxNSBAQAogCiAJcmV0ID0gcmVnbWFwX2FkZF9pcnFfY2hpcChheHAyMHgtPnJlZ21hcCwgaTJjLT5pcnEsCiAJCQkJICBJUlFGX09ORVNIT1QgfCBJUlFGX1NIQVJFRCwgLTEsCi0JCQkJICAmYXhwMjB4X3JlZ21hcF9pcnFfY2hpcCwKKwkJCQkgIGF4cDIweC0+cmVnbWFwX2lycV9jaGlwLAogCQkJCSAgJmF4cDIweC0+cmVnbWFwX2lycWMpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmaTJjLT5kZXYsICJmYWlsZWQgdG8gYWRkIGlycSBjaGlwOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMoYXhwMjB4LT5kZXYsIC0xLCBheHAyMHhfY2VsbHMsCi0JCQkgICAgICBBUlJBWV9TSVpFKGF4cDIweF9jZWxscyksIE5VTEwsIDAsIE5VTEwpOworCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhheHAyMHgtPmRldiwgLTEsIGF4cDIweC0+Y2VsbHMsCisJCQlheHAyMHgtPm5yX2NlbGxzLCBOVUxMLCAwLCBOVUxMKTsKIAogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmaTJjLT5kZXYsICJmYWlsZWQgdG8gYWRkIE1GRCBkZXZpY2VzOiAlZFxuIiwgcmV0KTsKQEAgLTIzNCw2ICs0ODQsNyBAQAogCQkubmFtZQk9ICJheHAyMHgiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm9mX21hdGNoX3RhYmxlCT0gb2ZfbWF0Y2hfcHRyKGF4cDIweF9vZl9tYXRjaCksCisJCS5hY3BpX21hdGNoX3RhYmxlID0gQUNQSV9QVFIoYXhwMjB4X2FjcGlfbWF0Y2gpLAogCX0sCiAJLnByb2JlCQk9IGF4cDIweF9pMmNfcHJvYmUsCiAJLnJlbW92ZQkJPSBheHAyMHhfaTJjX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RhOTA2My1jb3JlLmMgYi9kcml2ZXJzL21mZC9kYTkwNjMtY29yZS5jCmluZGV4IDkzZGI4YmIuLmYzOGJjOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2RhOTA2My1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvZGE5MDYzLWNvcmUuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCWRhOTA2My0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CiAJfSBlbHNlIHsKIAkJZGE5MDYzLT5mbGFncyA9IDA7Ci0JCWRhOTA2My0+aXJxX2Jhc2UgPSAwOworCQlkYTkwNjMtPmlycV9iYXNlID0gLTE7CiAJfQogCWRhOTA2My0+Y2hpcF9pcnEgPSBpcnE7CiAKQEAgLTE2OCw2ICsxNjgsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCWRhOTA2My0+aXJxX2Jhc2UgPSByZWdtYXBfaXJxX2NoaXBfZ2V0X2Jhc2UoZGE5MDYzLT5yZWdtYXBfaXJxKTsKKwogCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhkYTkwNjMtPmRldiwgLTEsIGRhOTA2M19kZXZzLAogCQkJICAgICAgQVJSQVlfU0laRShkYTkwNjNfZGV2cyksIE5VTEwsIGRhOTA2My0+aXJxX2Jhc2UsCiAJCQkgICAgICBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RiODUwMC1wcmNtdS5jIGIvZHJpdmVycy9tZmQvZGI4NTAwLXByY211LmMKaW5kZXggMTkzY2YxNi4uYTgyMDQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvZGI4NTAwLXByY211LmMKKysrIGIvZHJpdmVycy9tZmQvZGI4NTAwLXByY211LmMKQEAgLTMxNTAsMjMgKzMxNTAsMjggQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicHJjbXUiKTsKIAlpZiAoIXJlcykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwcmNtdSBtZW1vcnkgcmVnaW9uIHByb3ZpZGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlwcmNtdV9iYXNlID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFwcmNtdV9iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJmYWlsZWQgdG8gaW9yZW1hcCBwcmNtdSByZWdpc3RlciBtZW1vcnlcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWluaXRfcHJjbV9yZWdpc3RlcnMoKTsKIAlkYng1MDBfZndfdmVyc2lvbl9pbml0KHBkZXYsIHBkYXRhLT52ZXJzaW9uX29mZnNldCk7CiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInByY211LXRjZG0iKTsKIAlpZiAoIXJlcykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwcmNtdSB0Y2RtIHJlZ2lvbiBwcm92aWRlZFxuIik7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJdGNkbV9iYXNlID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCiAJCQlyZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghdGNkbV9iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gaW9yZW1hcCBwcmNtdS10Y2RtIHJlZ2lzdGVyIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCS8qIENsZWFuIHVwIHRoZSBtYWlsYm94IGludGVycnVwdHMgYWZ0ZXIgcHJlLWtlcm5lbCBjb2RlLiAqLwogCXdyaXRlbChBTExfTUJPWF9CSVRTLCBQUkNNX0FSTV9JVDFfQ0xSKTsKQEAgLTMxNzQsMTUgKzMxNzksMTQgQEAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChpcnEgPD0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwcmNtdSBpcnEgcHJvdmlkZWRcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0dXJuIGlycTsKIAl9CiAKIAllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIHByY211X2lycV9oYW5kbGVyLAogCSAgICAgICAgcHJjbXVfaXJxX3RocmVhZF9mbiwgSVJRRl9OT19TVVNQRU5ELCAicHJjbXUiLCBOVUxMKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcl9lcnIoInByY211OiBGYWlsZWQgdG8gYWxsb2NhdGUgSVJRX0RCODUwMF9QUkNNVTEuXG4iKTsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIG5vX2lycV9yZXR1cm47CisJCXJldHVybiBlcnI7CiAJfQogCiAJZGI4NTAwX2lycV9pbml0KG5wKTsKQEAgLTMyMDYsNyArMzIxMCw3IEBACiAJCWlmIChlcnIpIHsKIAkJCW1mZF9yZW1vdmVfZGV2aWNlcygmcGRldi0+ZGV2KTsKIAkJCXByX2VycigicHJjbXU6IEZhaWxlZCB0byBhZGQgc3ViZGV2aWNlc1xuIik7Ci0JCQlnb3RvIG5vX2lycV9yZXR1cm47CisJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQogCkBAIC0zMjE0LDEyICszMjE4LDEwIEBACiAJaWYgKGVycikgewogCQltZmRfcmVtb3ZlX2RldmljZXMoJnBkZXYtPmRldik7CiAJCXByX2VycigicHJjbXU6IEZhaWxlZCB0byBhZGQgYWI4NTAwIHN1YmRldmljZVxuIik7Ci0JCWdvdG8gbm9faXJxX3JldHVybjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlwcl9pbmZvKCJEQjg1MDAgUFJDTVUgaW5pdGlhbGl6ZWRcbiIpOwotCi1ub19pcnFfcmV0dXJuOgogCXJldHVybiBlcnI7CiB9CiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkYjg1MDBfcHJjbXVfbWF0Y2hbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RsbjIuYyBiL2RyaXZlcnMvbWZkL2RsbjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDQ5Njg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvZGxuMi5jCkBAIC0wLDAgKzEsNzgxIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgRGlvbGFuIERMTi0yIFVTQiBhZGFwdGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogRGVyaXZlZCBmcm9tOgorICogIGkyYy1kaW9sYW4tdTJjLmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBFcmljc3NvbiBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2RsbjIuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisKK3N0cnVjdCBkbG4yX2hlYWRlciB7CisJX19sZTE2IHNpemU7CisJX19sZTE2IGlkOworCV9fbGUxNiBlY2hvOworCV9fbGUxNiBoYW5kbGU7Cit9OworCitzdHJ1Y3QgZGxuMl9yZXNwb25zZSB7CisJc3RydWN0IGRsbjJfaGVhZGVyIGhkcjsKKwlfX2xlMTYgcmVzdWx0OworfTsKKworI2RlZmluZSBETE4yX0dFTkVSSUNfTU9EVUxFX0lECQkweDAwCisjZGVmaW5lIERMTjJfR0VORVJJQ19DTUQoY21kKQkJRExOMl9DTUQoY21kLCBETE4yX0dFTkVSSUNfTU9EVUxFX0lEKQorI2RlZmluZSBDTURfR0VUX0RFVklDRV9WRVIJCURMTjJfR0VORVJJQ19DTUQoMHgzMCkKKyNkZWZpbmUgQ01EX0dFVF9ERVZJQ0VfU04JCURMTjJfR0VORVJJQ19DTUQoMHgzMSkKKworI2RlZmluZSBETE4yX0hXX0lECQkJMHgyMDAKKyNkZWZpbmUgRExOMl9VU0JfVElNRU9VVAkJMjAwCS8qIGluIG1zICovCisjZGVmaW5lIERMTjJfTUFYX1JYX1NMT1RTCQkxNgorI2RlZmluZSBETE4yX01BWF9VUkJTCQkJMTYKKyNkZWZpbmUgRExOMl9SWF9CVUZfU0laRQkJNTEyCisKK2VudW0gZGxuMl9oYW5kbGUgeworCURMTjJfSEFORExFX0VWRU5UID0gMCwJCS8qIGRvbid0IGNoYW5nZSwgaGFyZHdhcmUgZGVmaW5lZCAqLworCURMTjJfSEFORExFX0NUUkwsCisJRExOMl9IQU5ETEVfR1BJTywKKwlETE4yX0hBTkRMRV9JMkMsCisJRExOMl9IQU5ETEVfU1BJLAorCURMTjJfSEFORExFUworfTsKKworLyoKKyAqIFJlY2VpdmUgY29udGV4dCB1c2VkIGJldHdlZW4gdGhlIHJlY2VpdmUgZGVtdWx0aXBsZXhlciBhbmQgdGhlIHRyYW5zZmVyCisgKiByb3V0aW5lLiBXaGlsZSBzZW5kaW5nIGEgcmVxdWVzdCB0aGUgdHJhbnNmZXIgcm91dGluZSB3aWxsIGxvb2sgZm9yIGEgZnJlZQorICogcmVjZWl2ZSBjb250ZXh0IGFuZCB1c2UgaXQgdG8gd2FpdCBmb3IgYSByZXNwb25zZSBhbmQgdG8gcmVjZWl2ZSB0aGUgVVJCIGFuZAorICogdGh1cyB0aGUgcmVzcG9uc2UgZGF0YS4KKyAqLworc3RydWN0IGRsbjJfcnhfY29udGV4dCB7CisJLyogY29tcGxldGlvbiB1c2VkIHRvIHdhaXQgZm9yIGEgcmVzcG9uc2UgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCisJLyogaWYgbm9uLU5VTEwgdGhlIFVSQiBjb250YWlucyB0aGUgcmVzcG9uc2UgKi8KKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwkvKiBpZiB0cnVlIHRoZW4gdGhpcyBjb250ZXh0IGlzIHVzZWQgdG8gd2FpdCBmb3IgYSByZXNwb25zZSAqLworCWJvb2wgaW5fdXNlOworfTsKKworLyoKKyAqIFJlY2VpdmUgY29udGV4dHMgZm9yIGEgcGFydGljdWxhciBETE4yIG1vZHVsZSAoaTJjLCBncGlvLCBldGMuKS4gV2UgdXNlIHRoZQorICogaGFuZGxlIGhlYWRlciBmaWVsZCB0byBpZGVudGlmeSB0aGUgbW9kdWxlIGluIGRsbjJfZGV2Lm1vZF9yeF9zbG90cyBhbmQgdGhlbgorICogdGhlIGVjaG8gaGVhZGVyIGZpZWxkIHRvIGluZGV4IHRoZSBzbG90cyBmaWVsZCBhbmQgZmluZCB0aGUgcmVjZWl2ZSBjb250ZXh0CisgKiBmb3IgYSBwYXJ0aWN1bGFyIHJlcXVlc3QuCisgKi8KK3N0cnVjdCBkbG4yX21vZF9yeF9zbG90cyB7CisJLyogUlggc2xvdHMgYml0bWFwICovCisJREVDTEFSRV9CSVRNQVAoYm1hcCwgRExOMl9NQVhfUlhfU0xPVFMpOworCisJLyogdXNlZCB0byB3YWl0IGZvciBhIGZyZWUgUlggc2xvdCAqLworCXdhaXRfcXVldWVfaGVhZF90IHdxOworCisJLyogdXNlZCB0byB3YWl0IGZvciBhbiBSWCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwlzdHJ1Y3QgZGxuMl9yeF9jb250ZXh0IHNsb3RzW0RMTjJfTUFYX1JYX1NMT1RTXTsKKworCS8qIGF2b2lkIHJhY2VzIGJldHdlZW4gYWxsb2MvZnJlZV9yeF9zbG90IGFuZCBkbG4yX3J4X3RyYW5zZmVyICovCisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RydWN0IGRsbjJfZGV2IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXU4IGVwX2luOworCXU4IGVwX291dDsKKworCXN0cnVjdCB1cmIgKnJ4X3VyYltETE4yX01BWF9VUkJTXTsKKwl2b2lkICpyeF9idWZbRExOMl9NQVhfVVJCU107CisKKwlzdHJ1Y3QgZGxuMl9tb2Rfcnhfc2xvdHMgbW9kX3J4X3Nsb3RzW0RMTjJfSEFORExFU107CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2NiX2xpc3Q7CisJc3BpbmxvY2tfdCBldmVudF9jYl9sb2NrOworCisJYm9vbCBkaXNjb25uZWN0OworCWludCBhY3RpdmVfdHJhbnNmZXJzOworCXdhaXRfcXVldWVfaGVhZF90IGRpc2Nvbm5lY3Rfd3E7CisJc3BpbmxvY2tfdCBkaXNjb25uZWN0X2xvY2s7Cit9OworCitzdHJ1Y3QgZGxuMl9ldmVudF9jYl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXUxNiBpZDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWRsbjJfZXZlbnRfY2JfdCBjYWxsYmFjazsKK307CisKK2ludCBkbG4yX3JlZ2lzdGVyX2V2ZW50X2NiKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBpZCwKKwkJCSAgIGRsbjJfZXZlbnRfY2JfdCBldmVudF9jYikKK3sKKwlzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGRsbjJfZXZlbnRfY2JfZW50cnkgKmksICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVudHJ5LT5pZCA9IGlkOworCWVudHJ5LT5jYWxsYmFjayA9IGV2ZW50X2NiOworCWVudHJ5LT5wZGV2ID0gcGRldjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkbG4yLT5ldmVudF9jYl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZkbG4yLT5ldmVudF9jYl9saXN0LCBsaXN0KSB7CisJCWlmIChpLT5pZCA9PSBpZCkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXJldCkKKwkJbGlzdF9hZGRfcmN1KCZlbnRyeS0+bGlzdCwgJmRsbjItPmV2ZW50X2NiX2xpc3QpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGxuMi0+ZXZlbnRfY2JfbG9jaywgZmxhZ3MpOworCisJaWYgKHJldCkKKwkJa2ZyZWUoZW50cnkpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZGxuMl9yZWdpc3Rlcl9ldmVudF9jYik7CisKK3ZvaWQgZGxuMl91bnJlZ2lzdGVyX2V2ZW50X2NiKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBpZCkKK3sKKwlzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGRsbjJfZXZlbnRfY2JfZW50cnkgKmk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGxuMi0+ZXZlbnRfY2JfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmZGxuMi0+ZXZlbnRfY2JfbGlzdCwgbGlzdCkgeworCQlpZiAoaS0+aWQgPT0gaWQpIHsKKwkJCWxpc3RfZGVsX3JjdSgmaS0+bGlzdCk7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRsbjItPmV2ZW50X2NiX2xvY2ssIGZsYWdzKTsKKworCWlmIChmb3VuZCkgeworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJa2ZyZWUoaSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkbG4yX3VucmVnaXN0ZXJfZXZlbnRfY2IpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmIGEgdmFsaWQgdHJhbnNmZXIgc2xvdCBpcyBmb3VuZC4gSW4gdGhpcyBjYXNlIHRoZSBVUkIgbXVzdCBub3QKKyAqIGJlIHJlc3VibWl0dGVkIGltbWVkaWF0ZWx5IGluIGRsbjJfcnggYXMgd2UgbmVlZCB0aGUgZGF0YSB3aGVuIGRsbjJfdHJhbnNmZXIKKyAqIGlzIHdva2UgdXAuIEl0IHdpbGwgYmUgcmVzdWJtaXR0ZWQgdGhlcmUuCisgKi8KK3N0YXRpYyBib29sIGRsbjJfdHJhbnNmZXJfY29tcGxldGUoc3RydWN0IGRsbjJfZGV2ICpkbG4yLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJICAgdTE2IGhhbmRsZSwgdTE2IHJ4X3Nsb3QpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRsbjItPmludGVyZmFjZS0+ZGV2OworCXN0cnVjdCBkbG4yX21vZF9yeF9zbG90cyAqcnhzID0gJmRsbjItPm1vZF9yeF9zbG90c1toYW5kbGVdOworCXN0cnVjdCBkbG4yX3J4X2NvbnRleHQgKnJ4YzsKKwlib29sIHZhbGlkX3Nsb3QgPSBmYWxzZTsKKworCWlmIChyeF9zbG90ID49IERMTjJfTUFYX1JYX1NMT1RTKQorCQlnb3RvIG91dDsKKworCXJ4YyA9ICZyeHMtPnNsb3RzW3J4X3Nsb3RdOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGRpc2FibGUgaW50ZXJydXB0cyBhcyB0aGlzIGxvY2sgaXMgbm90IHRha2VuIGluIGludGVycnVwdAorCSAqIGNvbnRleHQgZWxzZXdoZXJlIGluIHRoaXMgZHJpdmVyLiBUaGlzIGZ1bmN0aW9uIChvciBpdHMgY2FsbGVycykgYXJlCisJICogYWxzbyBub3QgZXhwb3J0ZWQgdG8gb3RoZXIgbW9kdWxlcy4KKwkgKi8KKwlzcGluX2xvY2soJnJ4cy0+bG9jayk7CisJaWYgKHJ4Yy0+aW5fdXNlICYmICFyeGMtPnVyYikgeworCQlyeGMtPnVyYiA9IHVyYjsKKwkJY29tcGxldGUoJnJ4Yy0+ZG9uZSk7CisJCXZhbGlkX3Nsb3QgPSB0cnVlOworCX0KKwlzcGluX3VubG9jaygmcnhzLT5sb2NrKTsKKworb3V0OgorCWlmICghdmFsaWRfc2xvdCkKKwkJZGV2X3dhcm4oZGV2LCAiYmFkL2xhdGUgcmVzcG9uc2UgJWQvJWRcbiIsIGhhbmRsZSwgcnhfc2xvdCk7CisKKwlyZXR1cm4gdmFsaWRfc2xvdDsKK30KKworc3RhdGljIHZvaWQgZGxuMl9ydW5fZXZlbnRfY2FsbGJhY2tzKHN0cnVjdCBkbG4yX2RldiAqZGxuMiwgdTE2IGlkLCB1MTYgZWNobywKKwkJCQkgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IGRsbjJfZXZlbnRfY2JfZW50cnkgKmk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpLCAmZGxuMi0+ZXZlbnRfY2JfbGlzdCwgbGlzdCkgeworCQlpZiAoaS0+aWQgPT0gaWQpIHsKKwkJCWktPmNhbGxiYWNrKGktPnBkZXYsIGVjaG8sIGRhdGEsIGxlbik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdm9pZCBkbG4yX3J4KHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGRsbjJfaGVhZGVyICpoZHIgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGxuMi0+aW50ZXJmYWNlLT5kZXY7CisJdTE2IGlkLCBlY2hvLCBoYW5kbGUsIHNpemU7CisJdTggKmRhdGE7CisJaW50IGxlbjsKKwlpbnQgZXJyOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJY2FzZSAtRVBJUEU6CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRldl9kYmcoZGV2LCAidXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRldl9kYmcoZGV2LCAibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCBzaXplb2Yoc3RydWN0IGRsbjJfaGVhZGVyKSkgeworCQlkZXZfZXJyKGRldiwgInNob3J0IHJlc3BvbnNlOiAlZFxuIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBvdXQ7CisJfQorCisJaGFuZGxlID0gbGUxNl90b19jcHUoaGRyLT5oYW5kbGUpOworCWlkID0gbGUxNl90b19jcHUoaGRyLT5pZCk7CisJZWNobyA9IGxlMTZfdG9fY3B1KGhkci0+ZWNobyk7CisJc2l6ZSA9IGxlMTZfdG9fY3B1KGhkci0+c2l6ZSk7CisKKwlpZiAoc2l6ZSAhPSB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZGV2X2VycihkZXYsICJzaXplIG1pc21hdGNoOiBoYW5kbGUgJXggY21kICV4IGVjaG8gJXggc2l6ZSAlZCBhY3R1YWwgJWRcbiIsCisJCQloYW5kbGUsIGlkLCBlY2hvLCBzaXplLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaGFuZGxlID49IERMTjJfSEFORExFUykgeworCQlkZXZfd2FybihkZXYsICJpbnZhbGlkIGhhbmRsZSAlZFxuIiwgaGFuZGxlKTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCBkbG4yX2hlYWRlcik7CisJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBkbG4yX2hlYWRlcik7CisKKwlpZiAoaGFuZGxlID09IERMTjJfSEFORExFX0VWRU5UKSB7CisJCWRsbjJfcnVuX2V2ZW50X2NhbGxiYWNrcyhkbG4yLCBpZCwgZWNobywgZGF0YSwgbGVuKTsKKwl9IGVsc2UgeworCQkvKiBVUkIgd2lsbCBiZSByZS1zdWJtaXR0ZWQgaW4gX2RsbjJfdHJhbnNmZXIgKGZyZWVfcnhfc2xvdCkgKi8KKwkJaWYgKGRsbjJfdHJhbnNmZXJfY29tcGxldGUoZGxuMiwgdXJiLCBoYW5kbGUsIGVjaG8pKQorCQkJcmV0dXJuOworCX0KKworb3V0OgorCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlc3VibWl0IFJYIFVSQjogJWRcbiIsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkICpkbG4yX3ByZXBfYnVmKHUxNiBoYW5kbGUsIHUxNiBjbWQsIHUxNiBlY2hvLCBjb25zdCB2b2lkICpvYnVmLAorCQkJICAgaW50ICpvYnVmX2xlbiwgZ2ZwX3QgZ2ZwKQoreworCWludCBsZW47CisJdm9pZCAqYnVmOworCXN0cnVjdCBkbG4yX2hlYWRlciAqaGRyOworCisJbGVuID0gKm9idWZfbGVuICsgc2l6ZW9mKCpoZHIpOworCWJ1ZiA9IGttYWxsb2MobGVuLCBnZnApOworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKworCWhkciA9IChzdHJ1Y3QgZGxuMl9oZWFkZXIgKilidWY7CisJaGRyLT5pZCA9IGNwdV90b19sZTE2KGNtZCk7CisJaGRyLT5zaXplID0gY3B1X3RvX2xlMTYobGVuKTsKKwloZHItPmVjaG8gPSBjcHVfdG9fbGUxNihlY2hvKTsKKwloZHItPmhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CisKKwltZW1jcHkoYnVmICsgc2l6ZW9mKCpoZHIpLCBvYnVmLCAqb2J1Zl9sZW4pOworCisJKm9idWZfbGVuID0gbGVuOworCisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGludCBkbG4yX3NlbmRfd2FpdChzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsIHUxNiBoYW5kbGUsIHUxNiBjbWQsIHUxNiBlY2hvLAorCQkJICBjb25zdCB2b2lkICpvYnVmLCBpbnQgb2J1Zl9sZW4pCit7CisJaW50IHJldCA9IDA7CisJaW50IGxlbiA9IG9idWZfbGVuOworCXZvaWQgKmJ1ZjsKKwlpbnQgYWN0dWFsOworCisJYnVmID0gZGxuMl9wcmVwX2J1ZihoYW5kbGUsIGNtZCwgZWNobywgb2J1ZiwgJmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2J1bGtfbXNnKGRsbjItPnVzYl9kZXYsCisJCQkgICB1c2Jfc25kYnVsa3BpcGUoZGxuMi0+dXNiX2RldiwgZGxuMi0+ZXBfb3V0KSwKKwkJCSAgIGJ1ZiwgbGVuLCAmYWN0dWFsLCBETE4yX1VTQl9USU1FT1VUKTsKKworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBmaW5kX2ZyZWVfc2xvdChzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsIHUxNiBoYW5kbGUsIGludCAqc2xvdCkKK3sKKwlzdHJ1Y3QgZGxuMl9tb2Rfcnhfc2xvdHMgKnJ4czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRsbjItPmRpc2Nvbm5lY3QpIHsKKwkJKnNsb3QgPSAtRU5PREVWOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyeHMgPSAmZGxuMi0+bW9kX3J4X3Nsb3RzW2hhbmRsZV07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnhzLT5sb2NrLCBmbGFncyk7CisKKwkqc2xvdCA9IGZpbmRfZmlyc3RfemVyb19iaXQocnhzLT5ibWFwLCBETE4yX01BWF9SWF9TTE9UUyk7CisKKwlpZiAoKnNsb3QgPCBETE4yX01BWF9SWF9TTE9UUykgeworCQlzdHJ1Y3QgZGxuMl9yeF9jb250ZXh0ICpyeGMgPSAmcnhzLT5zbG90c1sqc2xvdF07CisKKwkJc2V0X2JpdCgqc2xvdCwgcnhzLT5ibWFwKTsKKwkJcnhjLT5pbl91c2UgPSB0cnVlOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuICpzbG90IDwgRExOMl9NQVhfUlhfU0xPVFM7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2Nfcnhfc2xvdChzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsIHUxNiBoYW5kbGUpCit7CisJaW50IHJldDsKKwlpbnQgc2xvdDsKKworCS8qCisJICogTm8gbmVlZCB0byB0aW1lb3V0IGhlcmUsIHRoZSB3YWl0IGlzIGJvdW5kZWQgYnkgdGhlIHRpbWVvdXQgaW4KKwkgKiBfZGxuMl90cmFuc2Zlci4KKwkgKi8KKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGxuMi0+bW9kX3J4X3Nsb3RzW2hhbmRsZV0ud3EsCisJCQkJICAgICAgIGZpbmRfZnJlZV9zbG90KGRsbjIsIGhhbmRsZSwgJnNsb3QpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzbG90OworfQorCitzdGF0aWMgdm9pZCBmcmVlX3J4X3Nsb3Qoc3RydWN0IGRsbjJfZGV2ICpkbG4yLCB1MTYgaGFuZGxlLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgZGxuMl9tb2Rfcnhfc2xvdHMgKnJ4czsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGRsbjJfcnhfY29udGV4dCAqcnhjOworCisJcnhzID0gJmRsbjItPm1vZF9yeF9zbG90c1toYW5kbGVdOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cy0+bG9jaywgZmxhZ3MpOworCisJY2xlYXJfYml0KHNsb3QsIHJ4cy0+Ym1hcCk7CisKKwlyeGMgPSAmcnhzLT5zbG90c1tzbG90XTsKKwlyeGMtPmluX3VzZSA9IGZhbHNlOworCXVyYiA9IHJ4Yy0+dXJiOworCXJ4Yy0+dXJiID0gTlVMTDsKKwlyZWluaXRfY29tcGxldGlvbigmcnhjLT5kb25lKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cy0+bG9jaywgZmxhZ3MpOworCisJaWYgKHVyYikgeworCQlpbnQgZXJyOworCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGxuMi0+aW50ZXJmYWNlLT5kZXY7CisKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVyciA8IDApCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXN1Ym1pdCBSWCBVUkI6ICVkXG4iLCBlcnIpOworCX0KKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcnhzLT53cSk7Cit9CisKK3N0YXRpYyBpbnQgX2RsbjJfdHJhbnNmZXIoc3RydWN0IGRsbjJfZGV2ICpkbG4yLCB1MTYgaGFuZGxlLCB1MTYgY21kLAorCQkJICBjb25zdCB2b2lkICpvYnVmLCB1bnNpZ25lZCBvYnVmX2xlbiwKKwkJCSAgdm9pZCAqaWJ1ZiwgdW5zaWduZWQgKmlidWZfbGVuKQoreworCWludCByZXQgPSAwOworCWludCByeF9zbG90OworCXN0cnVjdCBkbG4yX3Jlc3BvbnNlICpyc3A7CisJc3RydWN0IGRsbjJfcnhfY29udGV4dCAqcnhjOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkbG4yLT5pbnRlcmZhY2UtPmRldjsKKwljb25zdCB1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBETE4yX1VTQl9USU1FT1VUICogSFogLyAxMDAwOworCXN0cnVjdCBkbG4yX21vZF9yeF9zbG90cyAqcnhzID0gJmRsbjItPm1vZF9yeF9zbG90c1toYW5kbGVdOworCWludCBzaXplOworCisJc3Bpbl9sb2NrKCZkbG4yLT5kaXNjb25uZWN0X2xvY2spOworCWlmICghZGxuMi0+ZGlzY29ubmVjdCkKKwkJZGxuMi0+YWN0aXZlX3RyYW5zZmVycysrOworCWVsc2UKKwkJcmV0ID0gLUVOT0RFVjsKKwlzcGluX3VubG9jaygmZGxuMi0+ZGlzY29ubmVjdF9sb2NrKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyeF9zbG90ID0gYWxsb2Nfcnhfc2xvdChkbG4yLCBoYW5kbGUpOworCWlmIChyeF9zbG90IDwgMCkgeworCQlyZXQgPSByeF9zbG90OworCQlnb3RvIG91dF9kZWNyOworCX0KKworCXJldCA9IGRsbjJfc2VuZF93YWl0KGRsbjIsIGhhbmRsZSwgY21kLCByeF9zbG90LCBvYnVmLCBvYnVmX2xlbik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJVU0Igd3JpdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfZnJlZV9yeF9zbG90OworCX0KKworCXJ4YyA9ICZyeHMtPnNsb3RzW3J4X3Nsb3RdOworCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJnJ4Yy0+ZG9uZSwgdGltZW91dCk7CisJaWYgKHJldCA8PSAwKSB7CisJCWlmICghcmV0KQorCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBvdXRfZnJlZV9yeF9zbG90OworCX0gZWxzZSB7CisJCXJldCA9IDA7CisJfQorCisJaWYgKGRsbjItPmRpc2Nvbm5lY3QpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZV9yeF9zbG90OworCX0KKworCS8qIGlmIHdlIGdvdCBoZXJlIHdlIGtub3cgdGhhdCB0aGUgcmVzcG9uc2UgaGVhZGVyIGhhcyBiZWVuIGNoZWNrZWQgKi8KKwlyc3AgPSByeGMtPnVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXNpemUgPSBsZTE2X3RvX2NwdShyc3AtPmhkci5zaXplKTsKKworCWlmIChzaXplIDwgc2l6ZW9mKCpyc3ApKSB7CisJCXJldCA9IC1FUFJPVE87CisJCWdvdG8gb3V0X2ZyZWVfcnhfc2xvdDsKKwl9CisKKwlpZiAobGUxNl90b19jcHUocnNwLT5yZXN1bHQpID4gMHg4MCkgeworCQlkZXZfZGJnKGRldiwgIiVkIHJlY2VpdmVkIHJlc3BvbnNlIHdpdGggZXJyb3IgJWRcbiIsCisJCQloYW5kbGUsIGxlMTZfdG9fY3B1KHJzcC0+cmVzdWx0KSk7CisJCXJldCA9IC1FUkVNT1RFSU87CisJCWdvdG8gb3V0X2ZyZWVfcnhfc2xvdDsKKwl9CisKKwlpZiAoIWlidWYpCisJCWdvdG8gb3V0X2ZyZWVfcnhfc2xvdDsKKworCWlmICgqaWJ1Zl9sZW4gPiBzaXplIC0gc2l6ZW9mKCpyc3ApKQorCQkqaWJ1Zl9sZW4gPSBzaXplIC0gc2l6ZW9mKCpyc3ApOworCisJbWVtY3B5KGlidWYsIHJzcCArIDEsICppYnVmX2xlbik7CisKK291dF9mcmVlX3J4X3Nsb3Q6CisJZnJlZV9yeF9zbG90KGRsbjIsIGhhbmRsZSwgcnhfc2xvdCk7CitvdXRfZGVjcjoKKwlzcGluX2xvY2soJmRsbjItPmRpc2Nvbm5lY3RfbG9jayk7CisJZGxuMi0+YWN0aXZlX3RyYW5zZmVycy0tOworCXNwaW5fdW5sb2NrKCZkbG4yLT5kaXNjb25uZWN0X2xvY2spOworCWlmIChkbG4yLT5kaXNjb25uZWN0KQorCQl3YWtlX3VwKCZkbG4yLT5kaXNjb25uZWN0X3dxKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBkbG4yX3RyYW5zZmVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBjbWQsCisJCSAgY29uc3Qgdm9pZCAqb2J1ZiwgdW5zaWduZWQgb2J1Zl9sZW4sCisJCSAgdm9pZCAqaWJ1ZiwgdW5zaWduZWQgKmlidWZfbGVuKQoreworCXN0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEgKmRsbjJfcGRhdGE7CisJc3RydWN0IGRsbjJfZGV2ICpkbG4yOworCXUxNiBoYW5kbGU7CisKKwlkbG4yID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCWRsbjJfcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCWhhbmRsZSA9IGRsbjJfcGRhdGEtPmhhbmRsZTsKKworCXJldHVybiBfZGxuMl90cmFuc2ZlcihkbG4yLCBoYW5kbGUsIGNtZCwgb2J1Ziwgb2J1Zl9sZW4sIGlidWYsCisJCQkgICAgICBpYnVmX2xlbik7Cit9CitFWFBPUlRfU1lNQk9MKGRsbjJfdHJhbnNmZXIpOworCitzdGF0aWMgaW50IGRsbjJfY2hlY2tfaHcoc3RydWN0IGRsbjJfZGV2ICpkbG4yKQoreworCWludCByZXQ7CisJX19sZTMyIGh3X3R5cGU7CisJaW50IGxlbiA9IHNpemVvZihod190eXBlKTsKKworCXJldCA9IF9kbG4yX3RyYW5zZmVyKGRsbjIsIERMTjJfSEFORExFX0NUUkwsIENNRF9HRVRfREVWSUNFX1ZFUiwKKwkJCSAgICAgTlVMTCwgMCwgJmh3X3R5cGUsICZsZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChsZW4gPCBzaXplb2YoaHdfdHlwZSkpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJaWYgKGxlMzJfdG9fY3B1KGh3X3R5cGUpICE9IERMTjJfSFdfSUQpIHsKKwkJZGV2X2VycigmZGxuMi0+aW50ZXJmYWNlLT5kZXYsICJEZXZpY2UgSUQgMHgleCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJbGUzMl90b19jcHUoaHdfdHlwZSkpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbG4yX3ByaW50X3NlcmlhbG5vKHN0cnVjdCBkbG4yX2RldiAqZGxuMikKK3sKKwlpbnQgcmV0OworCV9fbGUzMiBzZXJpYWxfbm87CisJaW50IGxlbiA9IHNpemVvZihzZXJpYWxfbm8pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkbG4yLT5pbnRlcmZhY2UtPmRldjsKKworCXJldCA9IF9kbG4yX3RyYW5zZmVyKGRsbjIsIERMTjJfSEFORExFX0NUUkwsIENNRF9HRVRfREVWSUNFX1NOLCBOVUxMLCAwLAorCQkJICAgICAmc2VyaWFsX25vLCAmbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobGVuIDwgc2l6ZW9mKHNlcmlhbF9ubykpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJZGV2X2luZm8oZGV2LCAiRGlvbGFuIERMTjIgc2VyaWFsICV1XG4iLCBsZTMyX3RvX2NwdShzZXJpYWxfbm8pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsbjJfaHdfaW5pdChzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIpCit7CisJaW50IHJldDsKKworCXJldCA9IGRsbjJfY2hlY2tfaHcoZGxuMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZGxuMl9wcmludF9zZXJpYWxubyhkbG4yKTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9mcmVlX3J4X3VyYnMoc3RydWN0IGRsbjJfZGV2ICpkbG4yKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IERMTjJfTUFYX1VSQlM7IGkrKykgeworCQl1c2Jfa2lsbF91cmIoZGxuMi0+cnhfdXJiW2ldKTsKKwkJdXNiX2ZyZWVfdXJiKGRsbjItPnJ4X3VyYltpXSk7CisJCWtmcmVlKGRsbjItPnJ4X2J1ZltpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkbG4yX2ZyZWUoc3RydWN0IGRsbjJfZGV2ICpkbG4yKQoreworCWRsbjJfZnJlZV9yeF91cmJzKGRsbjIpOworCXVzYl9wdXRfZGV2KGRsbjItPnVzYl9kZXYpOworCWtmcmVlKGRsbjIpOworfQorCitzdGF0aWMgaW50IGRsbjJfc2V0dXBfcnhfdXJicyhzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsCisJCQkgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpob3N0aWYpCit7CisJaW50IGk7CisJaW50IHJldDsKKwljb25zdCBpbnQgcnhfbWF4X3NpemUgPSBETE4yX1JYX0JVRl9TSVpFOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkbG4yLT5pbnRlcmZhY2UtPmRldjsKKworCWZvciAoaSA9IDA7IGkgPCBETE4yX01BWF9VUkJTOyBpKyspIHsKKwkJZGxuMi0+cnhfYnVmW2ldID0ga21hbGxvYyhyeF9tYXhfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZGxuMi0+cnhfYnVmW2ldKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZGxuMi0+cnhfdXJiW2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkbG4yLT5yeF91cmJbaV0pCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1c2JfZmlsbF9idWxrX3VyYihkbG4yLT5yeF91cmJbaV0sIGRsbjItPnVzYl9kZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoZGxuMi0+dXNiX2RldiwgZGxuMi0+ZXBfaW4pLAorCQkJCSAgZGxuMi0+cnhfYnVmW2ldLCByeF9tYXhfc2l6ZSwgZGxuMl9yeCwgZGxuMik7CisKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGxuMi0+cnhfdXJiW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHN1Ym1pdCBSWCBVUkI6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSBkbG4yX3BkYXRhX2dwaW8gPSB7CisJLmhhbmRsZSA9IERMTjJfSEFORExFX0dQSU8sCit9OworCisvKiBPbmx5IG9uZSBJMkMgcG9ydCBzZWVtcyB0byBiZSBzdXBwb3J0ZWQgb24gY3VycmVudCBoYXJkd2FyZSAqLworc3RhdGljIHN0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEgZGxuMl9wZGF0YV9pMmMgPSB7CisJLmhhbmRsZSA9IERMTjJfSEFORExFX0kyQywKKwkucG9ydCA9IDAsCit9OworCisvKiBPbmx5IG9uZSBTUEkgcG9ydCBzdXBwb3J0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgZGxuMl9wbGF0Zm9ybV9kYXRhIGRsbjJfcGRhdGFfc3BpID0geworCS5oYW5kbGUgPSBETE4yX0hBTkRMRV9TUEksCisJLnBvcnQgPSAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBkbG4yX2RldnNbXSA9IHsKKwl7CisJCS5uYW1lID0gImRsbjItZ3BpbyIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmRsbjJfcGRhdGFfZ3BpbywKKwkJLnBkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gImRsbjItaTJjIiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGxuMl9wZGF0YV9pMmMsCisJCS5wZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJkbG4yLXNwaSIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmRsbjJfcGRhdGFfc3BpLAorCQkucGRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZGxuMl9wbGF0Zm9ybV9kYXRhKSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgZGxuMl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGRsbjJfZGV2ICpkbG4yID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCBpLCBqOworCisJLyogZG9uJ3QgYWxsb3cgc3RhcnRpbmcgbmV3IHRyYW5zZmVycyAqLworCXNwaW5fbG9jaygmZGxuMi0+ZGlzY29ubmVjdF9sb2NrKTsKKwlkbG4yLT5kaXNjb25uZWN0ID0gdHJ1ZTsKKwlzcGluX3VubG9jaygmZGxuMi0+ZGlzY29ubmVjdF9sb2NrKTsKKworCS8qIGNhbmNlbCBpbiBwcm9ncmVzcyB0cmFuc2ZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRExOMl9IQU5ETEVTOyBpKyspIHsKKwkJc3RydWN0IGRsbjJfbW9kX3J4X3Nsb3RzICpyeHMgPSAmZGxuMi0+bW9kX3J4X3Nsb3RzW2ldOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZyeHMtPmxvY2ssIGZsYWdzKTsKKworCQkvKiBjYW5jZWwgYWxsIHJlc3BvbnNlIHdhaXRlcnMgKi8KKwkJZm9yIChqID0gMDsgaiA8IERMTjJfTUFYX1JYX1NMT1RTOyBqKyspIHsKKwkJCXN0cnVjdCBkbG4yX3J4X2NvbnRleHQgKnJ4YyA9ICZyeHMtPnNsb3RzW2pdOworCisJCQlpZiAocnhjLT5pbl91c2UpCisJCQkJY29tcGxldGUoJnJ4Yy0+ZG9uZSk7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHMtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiB3YWl0IGZvciB0cmFuc2ZlcnMgdG8gZW5kICovCisJd2FpdF9ldmVudChkbG4yLT5kaXNjb25uZWN0X3dxLCAhZGxuMi0+YWN0aXZlX3RyYW5zZmVycyk7CisKKwltZmRfcmVtb3ZlX2RldmljZXMoJmludGVyZmFjZS0+ZGV2KTsKKworCWRsbjJfZnJlZShkbG4yKTsKK30KKworc3RhdGljIGludCBkbG4yX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICp1c2JfaWQpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdGlmID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW50ZXJmYWNlLT5kZXY7CisJc3RydWN0IGRsbjJfZGV2ICpkbG4yOworCWludCByZXQ7CisJaW50IGksIGo7CisKKwlpZiAoaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCB8fAorCSAgICBob3N0aWYtPmRlc2MuYk51bUVuZHBvaW50cyA8IDIpCisJCXJldHVybiAtRU5PREVWOworCisJZGxuMiA9IGt6YWxsb2Moc2l6ZW9mKCpkbG4yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbG4yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRsbjItPmVwX291dCA9IGhvc3RpZi0+ZW5kcG9pbnRbMF0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWRsbjItPmVwX2luID0gaG9zdGlmLT5lbmRwb2ludFsxXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJZGxuMi0+dXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJZGxuMi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkbG4yKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbG4yLT5kaXNjb25uZWN0X3dxKTsKKworCWZvciAoaSA9IDA7IGkgPCBETE4yX0hBTkRMRVM7IGkrKykgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbG4yLT5tb2Rfcnhfc2xvdHNbaV0ud3EpOworCQlzcGluX2xvY2tfaW5pdCgmZGxuMi0+bW9kX3J4X3Nsb3RzW2ldLmxvY2spOworCQlmb3IgKGogPSAwOyBqIDwgRExOMl9NQVhfUlhfU0xPVFM7IGorKykKKwkJCWluaXRfY29tcGxldGlvbigmZGxuMi0+bW9kX3J4X3Nsb3RzW2ldLnNsb3RzW2pdLmRvbmUpOworCX0KKworCXNwaW5fbG9ja19pbml0KCZkbG4yLT5ldmVudF9jYl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGxuMi0+ZGlzY29ubmVjdF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGxuMi0+ZXZlbnRfY2JfbGlzdCk7CisKKwlyZXQgPSBkbG4yX3NldHVwX3J4X3VyYnMoZGxuMiwgaG9zdGlmKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9jbGVhbnVwOworCisJcmV0ID0gZGxuMl9od19pbml0KGRsbjIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgaGFyZHdhcmVcbiIpOworCQlnb3RvIG91dF9jbGVhbnVwOworCX0KKworCXJldCA9IG1mZF9hZGRfaG90cGx1Z19kZXZpY2VzKGRldiwgZGxuMl9kZXZzLCBBUlJBWV9TSVpFKGRsbjJfZGV2cykpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgbWZkIGRldmljZXMgdG8gY29yZVxuIik7CisJCWdvdG8gb3V0X2NsZWFudXA7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9jbGVhbnVwOgorCWRsbjJfZnJlZShkbG4yKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkbG4yX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKDB4YTI1NywgMHgyMDEzKSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRsbjJfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGxuMl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZGxuMiIsCisJLnByb2JlID0gZGxuMl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGRsbjJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBkbG4yX3RhYmxlLAorfTsKKworbW9kdWxlX3VzYl9kcml2ZXIoZGxuMl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJPY3RhdmlhbiBQdXJkaWxhIDxvY3Rhdmlhbi5wdXJkaWxhQGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29yZSBkcml2ZXIgZm9yIHRoZSBEaW9sYW4gRExOMiBpbnRlcmZhY2UgYWRhcHRlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbHBjX3NjaC5jIGIvZHJpdmVycy9tZmQvbHBjX3NjaC5jCmluZGV4IGM5ODBkYTQuLjVjMzhkZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2xwY19zY2guYworKysgYi9kcml2ZXJzL21mZC9scGNfc2NoLmMKQEAgLTE5MywxMSArMTkzLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgMCwgbHBjX3NjaF9jZWxscywgY2VsbHMsIE5VTEwsIDAsIE5VTEwpOwotCWlmIChyZXQpCi0JCW1mZF9yZW1vdmVfZGV2aWNlcygmZGV2LT5kZXYpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgMCwgbHBjX3NjaF9jZWxscywgY2VsbHMsIE5VTEwsIDAsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBscGNfc2NoX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWF4MTQ1NzcuYyBiL2RyaXZlcnMvbWZkL21heDE0NTc3LmMKaW5kZXggZGU5NmI3Zi4uM2JmOGRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbWF4MTQ1NzcuYworKysgYi9kcml2ZXJzL21mZC9tYXgxNDU3Ny5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG1heDE0NTc3LmMgLSBtZmQgY29yZSBkcml2ZXIgZm9yIHRoZSBNYXhpbSAxNDU3Ny83NzgzNgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm5vaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwogICogQ2hhbndvbyBDaG9pIDxjdzAwLmNob2lAc2Ftc3VuZy5jb20+CiAgKiBLcnp5c3p0b2YgS296bG93c2tpIDxrLmtvemxvd3NraUBzYW1zdW5nLmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tYXg3NzY5My5jIGIvZHJpdmVycy9tZmQvbWF4Nzc2OTMuYwppbmRleCBjZjAwOGY0Li5hMTU5NTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tYXg3NzY5My5jCisrKyBiL2RyaXZlcnMvbWZkL21heDc3NjkzLmMKQEAgLTQzLDkgKzQzLDE1IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgbWF4Nzc2OTNfZGV2c1tdID0gewogCXsgLm5hbWUgPSAibWF4Nzc2OTMtcG1pYyIsIH0sCi0JeyAubmFtZSA9ICJtYXg3NzY5My1jaGFyZ2VyIiwgfSwKKwl7CisJCS5uYW1lID0gIm1heDc3NjkzLWNoYXJnZXIiLAorCQkub2ZfY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY5My1jaGFyZ2VyIiwKKwl9LAogCXsgLm5hbWUgPSAibWF4Nzc2OTMtbXVpYyIsIH0sCi0JeyAubmFtZSA9ICJtYXg3NzY5My1oYXB0aWMiLCB9LAorCXsKKwkJLm5hbWUgPSAibWF4Nzc2OTMtaGFwdGljIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc2OTMtaGFwdGljIiwKKwl9LAogCXsKIAkJLm5hbWUgPSAibWF4Nzc2OTMtZmxhc2giLAogCQkub2ZfY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY5My1mbGFzaCIsCkBAIC0xNDcsNiArMTUzLDEyIEBACiAJLm51bV9pcnFzCQk9IEFSUkFZX1NJWkUobWF4Nzc2OTNfbXVpY19pcnFzKSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtYXg3NzY5M19yZWdtYXBfaGFwdGljX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisJLm1heF9yZWdpc3RlciA9IE1BWDc3NjkzX0hBUFRJQ19SRUdfRU5ELAorfTsKKwogc3RhdGljIGludCBtYXg3NzY5M19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTE5Niw2ICsyMDgsMTUgQEAKIAl9CiAJaTJjX3NldF9jbGllbnRkYXRhKG1heDc3NjkzLT5oYXB0aWMsIG1heDc3NjkzKTsKIAorCW1heDc3NjkzLT5yZWdtYXBfaGFwdGljID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMobWF4Nzc2OTMtPmhhcHRpYywKKwkJCQkJJm1heDc3NjkzX3JlZ21hcF9oYXB0aWNfY29uZmlnKTsKKwlpZiAoSVNfRVJSKG1heDc3NjkzLT5yZWdtYXBfaGFwdGljKSkgeworCQlyZXQgPSBQVFJfRVJSKG1heDc3NjkzLT5yZWdtYXBfaGFwdGljKTsKKwkJZGV2X2VycihtYXg3NzY5My0+ZGV2LAorCQkJImZhaWxlZCB0byBpbml0aWFsaXplIGhhcHRpYyByZWdpc3RlciBtYXA6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9yZWdtYXA7CisJfQorCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlZ2lzdGVyIG1hcCBmb3IgTVVJQyBkZXZpY2UgYmVjYXVzZSB1c2UgcmVnbWFwLW11aWMKIAkgKiBpbnN0YW5jZSBvZiBNVUlDIGRldmljZSB3aGVuIGlycSBvZiBtYXg3NzY5MyBpcyBpbml0aWFsaXplZApAQCAtMjA3LDcgKzIyOCw3IEBACiAJCXJldCA9IFBUUl9FUlIobWF4Nzc2OTMtPnJlZ21hcF9tdWljKTsKIAkJZGV2X2VycihtYXg3NzY5My0+ZGV2LAogCQkJImZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBtYXA6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9yZWdtYXBfbXVpYzsKKwkJZ290byBlcnJfcmVnbWFwOwogCX0KIAogCXJldCA9IHJlZ21hcF9hZGRfaXJxX2NoaXAobWF4Nzc2OTMtPnJlZ21hcCwgbWF4Nzc2OTMtPmlycSwKQEAgLTIxNyw3ICsyMzgsNyBAQAogCQkJCSZtYXg3NzY5My0+aXJxX2RhdGFfbGVkKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIobWF4Nzc2OTMtPmRldiwgImZhaWxlZCB0byBhZGQgaXJxIGNoaXA6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9yZWdtYXBfbXVpYzsKKwkJZ290byBlcnJfcmVnbWFwOwogCX0KIAogCXJldCA9IHJlZ21hcF9hZGRfaXJxX2NoaXAobWF4Nzc2OTMtPnJlZ21hcCwgbWF4Nzc2OTMtPmlycSwKQEAgLTI0MCw3ICsyNjEsNyBAQAogCQlnb3RvIGVycl9pcnFfY2hhcmdlcjsKIAl9CiAKLQlyZXQgPSByZWdtYXBfYWRkX2lycV9jaGlwKG1heDc3NjkzLT5yZWdtYXAsIG1heDc3NjkzLT5pcnEsCisJcmV0ID0gcmVnbWFwX2FkZF9pcnFfY2hpcChtYXg3NzY5My0+cmVnbWFwX211aWMsIG1heDc3NjkzLT5pcnEsCiAJCQkJSVJRRl9PTkVTSE9UIHwgSVJRRl9TSEFSRUQgfAogCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCAwLAogCQkJCSZtYXg3NzY5M19tdWljX2lycV9jaGlwLApAQCAtMjUwLDYgKzI3MSwxNyBAQAogCQlnb3RvIGVycl9pcnFfbXVpYzsKIAl9CiAKKwkvKiBVbm1hc2sgaW50ZXJydXB0cyBmcm9tIGFsbCBibG9ja3MgaW4gaW50ZXJydXB0IHNvdXJjZSByZWdpc3RlciAqLworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhtYXg3NzY5My0+cmVnbWFwLAorCQkJCU1BWDc3NjkzX1BNSUNfUkVHX0lOVFNSQ19NQVNLLAorCQkJCVNSQ19JUlFfQUxMLCAodW5zaWduZWQgaW50KX5TUkNfSVJRX0FMTCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihtYXg3NzY5My0+ZGV2LAorCQkJIkNvdWxkIG5vdCB1bm1hc2sgaW50ZXJydXB0cyBpbiBJTlRTUkM6ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfaW50c3JjOworCX0KKwogCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShtYXg3NzY5My0+ZGV2KTsKIAogCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhtYXg3NzY5My0+ZGV2LCAtMSwgbWF4Nzc2OTNfZGV2cywKQEAgLTI2MSw2ICsyOTMsNyBAQAogCiBlcnJfbWZkOgogCW1mZF9yZW1vdmVfZGV2aWNlcyhtYXg3NzY5My0+ZGV2KTsKK2Vycl9pbnRzcmM6CiAJcmVnbWFwX2RlbF9pcnFfY2hpcChtYXg3NzY5My0+aXJxLCBtYXg3NzY5My0+aXJxX2RhdGFfbXVpYyk7CiBlcnJfaXJxX211aWM6CiAJcmVnbWFwX2RlbF9pcnFfY2hpcChtYXg3NzY5My0+aXJxLCBtYXg3NzY5My0+aXJxX2RhdGFfY2hhcmdlcik7CkBAIC0yNjgsNyArMzAxLDcgQEAKIAlyZWdtYXBfZGVsX2lycV9jaGlwKG1heDc3NjkzLT5pcnEsIG1heDc3NjkzLT5pcnFfZGF0YV90b3BzeXMpOwogZXJyX2lycV90b3BzeXM6CiAJcmVnbWFwX2RlbF9pcnFfY2hpcChtYXg3NzY5My0+aXJxLCBtYXg3NzY5My0+aXJxX2RhdGFfbGVkKTsKLWVycl9yZWdtYXBfbXVpYzoKK2Vycl9yZWdtYXA6CiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKG1heDc3NjkzLT5oYXB0aWMpOwogZXJyX2kyY19oYXB0aWM6CiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKG1heDc3NjkzLT5tdWljKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMgYi9kcml2ZXJzL21mZC9tZmQtY29yZS5jCmluZGV4IGYzMzM4ZmUuLjJhODdmNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvbWZkLWNvcmUuYwpAQCAtMTI1LDkgKzEyNSwxNSBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CiAJaW50IHJldCA9IC1FTk9NRU07CisJaW50IHBsYXRmb3JtX2lkOwogCWludCByOwogCi0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhjZWxsLT5uYW1lLCBpZCArIGNlbGwtPmlkKTsKKwlpZiAoaWQgPCAwKQorCQlwbGF0Zm9ybV9pZCA9IGlkOworCWVsc2UKKwkJcGxhdGZvcm1faWQgPSBpZCArIGNlbGwtPmlkOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhjZWxsLT5uYW1lLCBwbGF0Zm9ybV9pZCk7CiAJaWYgKCFwZGV2KQogCQlnb3RvIGZhaWxfYWxsb2M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3J0czUyMjcuYyBiL2RyaXZlcnMvbWZkL3J0czUyMjcuYwppbmRleCA5YzhlZWM4Li4zMjQwNzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9ydHM1MjI3LmMKKysrIGIvZHJpdmVycy9tZmQvcnRzNTIyNy5jCkBAIC0xMzAsNiArMTMwLDEyIEBACiAKIHN0YXRpYyBpbnQgcnRzNTIyN19vcHRpbWl6ZV9waHkoc3RydWN0IHJ0c3hfcGNyICpwY3IpCiB7CisJaW50IGVycjsKKworCWVyciA9IHJ0c3hfZ29wc19wbV9yZXNldChwY3IpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJLyogT3B0aW1pemUgUlggc2Vuc2l0aXZpdHkgKi8KIAlyZXR1cm4gcnRzeF9wY2lfd3JpdGVfcGh5X3JlZ2lzdGVyKHBjciwgMHgwMCwgMHhCQTQyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3J0czUyNDkuYyBiL2RyaXZlcnMvbWZkL3J0czUyNDkuYwppbmRleCA1NzNkZTdiLi5jZjQyNWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9ydHM1MjQ5LmMKKysrIGIvZHJpdmVycy9tZmQvcnRzNTI0OS5jCkBAIC0xMzAsNiArMTMwLDEwIEBACiB7CiAJaW50IGVycjsKIAorCWVyciA9IHJ0c3hfZ29wc19wbV9yZXNldChwY3IpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJZXJyID0gcnRzeF9wY2lfd3JpdGVfcGh5X3JlZ2lzdGVyKHBjciwgUEhZX1JFR19SRVYsCiAJCQlQSFlfUkVHX1JFVl9SRVNWIHwgUEhZX1JFR19SRVZfUlhJRExFX0xBVENIRUQgfAogCQkJUEhZX1JFR19SRVZfUDFfRU4gfCBQSFlfUkVHX1JFVl9SWElETEVfRU4gfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvcnRzeF9nb3BzLmMgYi9kcml2ZXJzL21mZC9ydHN4X2dvcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWE5OGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvcnRzeF9nb3BzLmMKQEAgLTAsMCArMSwzNyBAQAorLyogRHJpdmVyIGZvciBSZWFsdGVrIFBDSS1FeHByZXNzIGNhcmQgcmVhZGVyCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogQXV0aG9yOgorICogICBNaWNreSBDaGluZyA8bWlja3lfY2hpbmdAcmVhbHNpbC5jb20uY24+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21mZC9ydHN4X3BjaS5oPgorI2luY2x1ZGUgInJ0c3hfcGNyLmgiCisKK2ludCBydHN4X2dvcHNfcG1fcmVzZXQoc3RydWN0IHJ0c3hfcGNyICpwY3IpCit7CisJaW50IGVycjsKKworCS8qIGluaXQgYXNwbSAqLworCXJ0c3hfcGNpX3dyaXRlX3JlZ2lzdGVyKHBjciwgQVNQTV9GT1JDRV9DVEwsIDB4RkYsIDB4MDApOworCWVyciA9IHJ0c3hfcGNpX3VwZGF0ZV9jZmdfYnl0ZShwY3IsIExDVExSLCB+TENUTFJfQVNQTV9DVExfTUFTSywgMHgwMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiByZXNldCBQTV9DVFJMMyBiZWZvcmUgc2VuZCBidWZmZXIgY21kICovCisJcmV0dXJuIHJ0c3hfcGNpX3dyaXRlX3JlZ2lzdGVyKHBjciwgUE1fQ1RSTDMsIEQzX0RFTElOS19NT0RFX0VOLCAweDAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3J0c3hfcGNyLmMgYi9kcml2ZXJzL21mZC9ydHN4X3Bjci5jCmluZGV4IGYyNjQzYzIuLjMwZjdjYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3J0c3hfcGNyLmMKKysrIGIvZHJpdmVycy9tZmQvcnRzeF9wY3IuYwpAQCAtOTQ3LDYgKzk0Nyw3IEBACiAJbXV0ZXhfdW5sb2NrKCZwY3ItPnBjcl9tdXRleCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB2b2lkIHJ0c3hfcGNpX3Bvd2VyX29mZihzdHJ1Y3QgcnRzeF9wY3IgKnBjciwgdTggcG1fc3RhdGUpCiB7CiAJaWYgKHBjci0+b3BzLT50dXJuX29mZl9sZWQpCkBAIC05NjEsNiArOTYyLDcgQEAKIAlpZiAocGNyLT5vcHMtPmZvcmNlX3Bvd2VyX2Rvd24pCiAJCXBjci0+b3BzLT5mb3JjZV9wb3dlcl9kb3duKHBjciwgcG1fc3RhdGUpOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgcnRzeF9wY2lfaW5pdF9odyhzdHJ1Y3QgcnRzeF9wY3IgKnBjcikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3J0c3hfcGNyLmggYi9kcml2ZXJzL21mZC9ydHN4X3Bjci5oCmluZGV4IDA3ZTRjMmUuLmZlMmJiYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3J0c3hfcGNyLmgKKysrIGIvZHJpdmVycy9tZmQvcnRzeF9wY3IuaApAQCAtNzIsNCArNzIsNyBAQAogCXBjci0+bXNfcHVsbF9jdGxfZGlzYWJsZV90YmwgPSBfX2RldmljZSMjX21zX3B1bGxfY3RsX2Rpc2FibGVfdGJsOyBcCiB9IHdoaWxlICgwKQogCisvKiBnZW5lcmljIG9wZXJhdGlvbnMgKi8KK2ludCBydHN4X2dvcHNfcG1fcmVzZXQoc3RydWN0IHJ0c3hfcGNyICpwY3IpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3J0c3hfdXNiLmMgYi9kcml2ZXJzL21mZC9ydHN4X3VzYi5jCmluZGV4IDljZjk4ZDEuLmRiZGQwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3J0c3hfdXNiLmMKKysrIGIvZHJpdmVycy9tZmQvcnRzeF91c2IuYwpAQCAtNjQ3LDggKzY0Nyw4IEBACiAJLyogaW5pdGlhbGl6ZSBVU0IgU0cgdHJhbnNmZXIgdGltZXIgKi8KIAlzZXR1cF90aW1lcigmdWNyLT5zZ190aW1lciwgcnRzeF91c2Jfc2dfdGltZWRfb3V0LCAodW5zaWduZWQgbG9uZykgdWNyKTsKIAotCXJldCA9IG1mZF9hZGRfZGV2aWNlcygmaW50Zi0+ZGV2LCB1c2JfZGV2LT5kZXZudW0sIHJ0c3hfdXNiX2NlbGxzLAotCQkJQVJSQVlfU0laRShydHN4X3VzYl9jZWxscyksIE5VTEwsIDAsIE5VTEwpOworCXJldCA9IG1mZF9hZGRfaG90cGx1Z19kZXZpY2VzKCZpbnRmLT5kZXYsIHJ0c3hfdXNiX2NlbGxzLAorCQkJCSAgICAgIEFSUkFZX1NJWkUocnRzeF91c2JfY2VsbHMpKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9pbml0X2ZhaWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3NlYy1jb3JlLmMgYi9kcml2ZXJzL21mZC9zZWMtY29yZS5jCmluZGV4IGRiYTdlMmIuLjBhN2JjNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NlYy1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvc2VjLWNvcmUuYwpAQCAtMjcsMTEgKzI3LDExIEBACiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcGEwMS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wczEzLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxNC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXB1MDIuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zNW04NzYzLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczVtODc2Ny5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgczVtODc1MV9kZXZzW10gPSB7CkBAIC03NCw2ICs3NCwxNSBAQAogCX0KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgczJtcHMxM19kZXZzW10gPSB7CisJeyAubmFtZSA9ICJzMm1wczEzLXBtaWMiLCB9LAorCXsgLm5hbWUgPSAiczJtcHMxMy1ydGMiLCB9LAorCXsKKwkJLm5hbWUgPSAiczJtcHMxMy1jbGsiLAorCQkub2ZfY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMybXBzMTMtY2xrIiwKKwl9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBzMm1wczE0X2RldnNbXSA9IHsKIAl7CiAJCS5uYW1lID0gInMybXBzMTQtcG1pYyIsCkBAIC0xMDgsNiArMTE3LDkgQEAKIAkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczExLXBtaWMiLAogCQkuZGF0YSA9ICh2b2lkICopUzJNUFMxMVgsCiAJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMybXBzMTMtcG1pYyIsCisJCS5kYXRhID0gKHZvaWQgKilTMk1QUzEzWCwKKwl9LCB7CiAJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsczJtcHMxNC1wbWljIiwKIAkJLmRhdGEgPSAodm9pZCAqKVMyTVBTMTRYLAogCX0sIHsKQEAgLTE5NCw2ICsyMDYsMTUgQEAKIAkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX0ZMQVQsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgczJtcHMxM19yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyA9IDgsCisJLnZhbF9iaXRzID0gOCwKKworCS5tYXhfcmVnaXN0ZXIgPSBTMk1QUzEzX1JFR19MRE9EU0NINSwKKwkudm9sYXRpbGVfcmVnID0gczJtcHMxMV92b2xhdGlsZSwKKwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX0ZMQVQsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgczJtcHMxNF9yZWdtYXBfY29uZmlnID0gewogCS5yZWdfYml0cyA9IDgsCiAJLnZhbF9iaXRzID0gOCwKQEAgLTMyNSw2ICszNDYsOSBAQAogCWNhc2UgUzJNUFMxMVg6CiAJCXJlZ21hcCA9ICZzMm1wczExX3JlZ21hcF9jb25maWc7CiAJCWJyZWFrOworCWNhc2UgUzJNUFMxM1g6CisJCXJlZ21hcCA9ICZzMm1wczEzX3JlZ21hcF9jb25maWc7CisJCWJyZWFrOwogCWNhc2UgUzJNUFMxNFg6CiAJCXJlZ21hcCA9ICZzMm1wczE0X3JlZ21hcF9jb25maWc7CiAJCWJyZWFrOwpAQCAtMzc4LDYgKzQwMiwxMCBAQAogCQlzZWNfZGV2cyA9IHMybXBzMTFfZGV2czsKIAkJbnVtX3NlY19kZXZzID0gQVJSQVlfU0laRShzMm1wczExX2RldnMpOwogCQlicmVhazsKKwljYXNlIFMyTVBTMTNYOgorCQlzZWNfZGV2cyA9IHMybXBzMTNfZGV2czsKKwkJbnVtX3NlY19kZXZzID0gQVJSQVlfU0laRShzMm1wczEzX2RldnMpOworCQlicmVhazsKIAljYXNlIFMyTVBTMTRYOgogCQlzZWNfZGV2cyA9IHMybXBzMTRfZGV2czsKIAkJbnVtX3NlY19kZXZzID0gQVJSQVlfU0laRShzMm1wczE0X2RldnMpOwpAQCAtNDMyLDE1ICs0NjAsNiBAQAogCSAqLwogCWRpc2FibGVfaXJxKHNlY19wbWljLT5pcnEpOwogCi0Jc3dpdGNoIChzZWNfcG1pYy0+ZGV2aWNlX3R5cGUpIHsKLQljYXNlIFMyTVBTMTRYOgotCWNhc2UgUzJNUFUwMjoKLQkJcmVndWxhdG9yX3N1c3BlbmRfcHJlcGFyZShQTV9TVVNQRU5EX01FTSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zZWMtaXJxLmMgYi9kcml2ZXJzL21mZC9zZWMtaXJxLmMKaW5kZXggZjlhNTc4Ni4uYmE4NmE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvc2VjLWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL3NlYy1pcnEuYwpAQCAtMzg5LDE0ICszODksMjIgQEAKIAkuYWNrX2Jhc2UgPSBTMk1QUzExX1JFR19JTlQxLAogfTsKIAorI2RlZmluZSBTMk1QUzFYX0lSUV9DSElQX0NPTU1PTl9EQVRBCQlcCisJLmlycXMgPSBzMm1wczE0X2lycXMsCQkJXAorCS5udW1faXJxcyA9IEFSUkFZX1NJWkUoczJtcHMxNF9pcnFzKSwJXAorCS5udW1fcmVncyA9IDMsCQkJCVwKKwkuc3RhdHVzX2Jhc2UgPSBTMk1QUzE0X1JFR19JTlQxLAlcCisJLm1hc2tfYmFzZSA9IFMyTVBTMTRfUkVHX0lOVDFNLAkJXAorCS5hY2tfYmFzZSA9IFMyTVBTMTRfUkVHX0lOVDEJCVwKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAgczJtcHMxM19pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJzMm1wczEzIiwKKwlTMk1QUzFYX0lSUV9DSElQX0NPTU1PTl9EQVRBLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAgczJtcHMxNF9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJzMm1wczE0IiwKLQkuaXJxcyA9IHMybXBzMTRfaXJxcywKLQkubnVtX2lycXMgPSBBUlJBWV9TSVpFKHMybXBzMTRfaXJxcyksCi0JLm51bV9yZWdzID0gMywKLQkuc3RhdHVzX2Jhc2UgPSBTMk1QUzE0X1JFR19JTlQxLAotCS5tYXNrX2Jhc2UgPSBTMk1QUzE0X1JFR19JTlQxTSwKLQkuYWNrX2Jhc2UgPSBTMk1QUzE0X1JFR19JTlQxLAorCVMyTVBTMVhfSVJRX0NISVBfQ09NTU9OX0RBVEEsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnFfY2hpcCBzMm1wdTAyX2lycV9jaGlwID0gewpAQCAtNDUyLDYgKzQ2MCw5IEBACiAJY2FzZSBTMk1QUzExWDoKIAkJc2VjX2lycV9jaGlwID0gJnMybXBzMTFfaXJxX2NoaXA7CiAJCWJyZWFrOworCWNhc2UgUzJNUFMxM1g6CisJCXNlY19pcnFfY2hpcCA9ICZzMm1wczEzX2lycV9jaGlwOworCQlicmVhazsKIAljYXNlIFMyTVBTMTRYOgogCQlzZWNfaXJxX2NoaXAgPSAmczJtcHMxNF9pcnFfY2hpcDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zdG1wZS5oIGIvZHJpdmVycy9tZmQvc3RtcGUuaAppbmRleCAyZDA0NWYyLi5iZWUwYWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zdG1wZS5oCisrKyBiL2RyaXZlcnMvbWZkL3N0bXBlLmgKQEAgLTI2OSw3ICsyNjksNyBAQAogI2RlZmluZSBTVE1QRTI0WFhfUkVHX0NISVBfSUQJCTB4ODAKICNkZWZpbmUgU1RNUEUyNFhYX1JFR19JRUdQSU9SX0xTQgkweDE4CiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfSVNHUElPUl9NU0IJMHgxOQotI2RlZmluZSBTVE1QRTI0WFhfUkVHX0dQTVJfTFNCCQkweEE1CisjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BNUl9MU0IJCTB4QTQKICNkZWZpbmUgU1RNUEUyNFhYX1JFR19HUFNSX0xTQgkJMHg4NQogI2RlZmluZSBTVE1QRTI0WFhfUkVHX0dQQ1JfTFNCCQkweDg4CiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BEUl9MU0IJCTB4OEIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3N5c2Nvbi5jIGIvZHJpdmVycy9tZmQvc3lzY29uLmMKaW5kZXggY2ExNTg3OC4uNzIzNzNiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvc3lzY29uLmMKKysrIGIvZHJpdmVycy9tZmQvc3lzY29uLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgpAQCAtMjIsMzEgKzIzLDk0IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3lzY29uX2RyaXZlcjsKIAorc3RhdGljIERFRklORV9TUElOTE9DSyhzeXNjb25fbGlzdF9zbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHN5c2Nvbl9saXN0KTsKKwogc3RydWN0IHN5c2NvbiB7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAotc3RhdGljIGludCBzeXNjb25fbWF0Y2hfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbiA9IGRhdGE7CitzdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgc3lzY29uX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gMzIsCisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorfTsKIAotCXJldHVybiAoZGV2LT5vZl9ub2RlID09IGRuKSA/IDEgOiAwOworc3RhdGljIHN0cnVjdCBzeXNjb24gKm9mX3N5c2Nvbl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBzeXNjb24gKnN5c2NvbjsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCByZXQ7CisJc3RydWN0IHJlZ21hcF9jb25maWcgc3lzY29uX2NvbmZpZyA9IHN5c2Nvbl9yZWdtYXBfY29uZmlnOworCisJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInN5c2NvbiIpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXN5c2NvbiA9IGt6YWxsb2Moc2l6ZW9mKCpzeXNjb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN5c2NvbikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwliYXNlID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghYmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9tYXA7CisJfQorCisJLyogUGFyc2UgdGhlIGRldmljZSdzIERUIG5vZGUgZm9yIGFuIGVuZGlhbm5lc3Mgc3BlY2lmaWNhdGlvbiAqLworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJiaWctZW5kaWFuIikpCisJCXN5c2Nvbl9jb25maWcudmFsX2Zvcm1hdF9lbmRpYW4gPSBSRUdNQVBfRU5ESUFOX0JJRzsKKwkgZWxzZSBpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAibGl0dGxlLWVuZGlhbiIpKQorCQlzeXNjb25fY29uZmlnLnZhbF9mb3JtYXRfZW5kaWFuID0gUkVHTUFQX0VORElBTl9MSVRUTEU7CisKKwlyZWdtYXAgPSByZWdtYXBfaW5pdF9tbWlvKE5VTEwsIGJhc2UsICZzeXNjb25fY29uZmlnKTsKKwlpZiAoSVNfRVJSKHJlZ21hcCkpIHsKKwkJcHJfZXJyKCJyZWdtYXAgaW5pdCBmYWlsZWRcbiIpOworCQlyZXQgPSBQVFJfRVJSKHJlZ21hcCk7CisJCWdvdG8gZXJyX3JlZ21hcDsKKwl9CisKKwlzeXNjb24tPnJlZ21hcCA9IHJlZ21hcDsKKwlzeXNjb24tPm5wID0gbnA7CisKKwlzcGluX2xvY2soJnN5c2Nvbl9saXN0X3Nsb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZzeXNjb24tPmxpc3QsICZzeXNjb25fbGlzdCk7CisJc3Bpbl91bmxvY2soJnN5c2Nvbl9saXN0X3Nsb2NrKTsKKworCXJldHVybiBzeXNjb247CisKK2Vycl9yZWdtYXA6CisJaW91bm1hcChiYXNlKTsKK2Vycl9tYXA6CisJa2ZyZWUoc3lzY29uKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCiBzdHJ1Y3QgcmVnbWFwICpzeXNjb25fbm9kZV90b19yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQlzdHJ1Y3Qgc3lzY29uICpzeXNjb247Ci0Jc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBzeXNjb24gKmVudHJ5LCAqc3lzY29uID0gTlVMTDsKIAotCWRldiA9IGRyaXZlcl9maW5kX2RldmljZSgmc3lzY29uX2RyaXZlci5kcml2ZXIsIE5VTEwsIG5wLAotCQkJCSBzeXNjb25fbWF0Y2hfbm9kZSk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCXNwaW5fbG9jaygmc3lzY29uX2xpc3Rfc2xvY2spOwogCi0Jc3lzY29uID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnN5c2Nvbl9saXN0LCBsaXN0KQorCQlpZiAoZW50cnktPm5wID09IG5wKSB7CisJCQlzeXNjb24gPSBlbnRyeTsKKwkJCWJyZWFrOworCQl9CisKKwlzcGluX3VubG9jaygmc3lzY29uX2xpc3Rfc2xvY2spOworCisJaWYgKCFzeXNjb24pCisJCXN5c2NvbiA9IG9mX3N5c2Nvbl9yZWdpc3RlcihucCk7CisKKwlpZiAoSVNfRVJSKHN5c2NvbikpCisJCXJldHVybiBFUlJfQ0FTVChzeXNjb24pOwogCiAJcmV0dXJuIHN5c2Nvbi0+cmVnbWFwOwogfQpAQCAtMTEwLDE3ICsxNzQsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZSk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3N5c2Nvbl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAic3lzY29uIiwgfSwKLQl7IH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgc3lzY29uX3JlZ21hcF9jb25maWcgPSB7Ci0JLnJlZ19iaXRzID0gMzIsCi0JLnZhbF9iaXRzID0gMzIsCi0JLnJlZ19zdHJpZGUgPSA0LAotfTsKLQogc3RhdGljIGludCBzeXNjb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwpAQCAtMTY3LDcgKzIyMCw2IEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAic3lzY29uIiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5vZl9tYXRjaF90YWJsZSA9IG9mX3N5c2Nvbl9tYXRjaCwKIAl9LAogCS5wcm9iZQkJPSBzeXNjb25fcHJvYmUsCiAJLmlkX3RhYmxlCT0gc3lzY29uX2lkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYyBiL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYwppbmRleCA5ZTA0YTc0Li40MzlkOTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90N2w2NnhiLmMKKysrIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBkZXZfY3RsOwogCi0JY2xrX2VuYWJsZSh0N2w2NnhiLT5jbGszMmspOworCWNsa19wcmVwYXJlX2VuYWJsZSh0N2w2NnhiLT5jbGszMmspOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnQ3bDY2eGItPmxvY2ssIGZsYWdzKTsKIApAQCAtMTE4LDcgKzExOCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0N2w2NnhiLT5sb2NrLCBmbGFncyk7CiAKLQljbGtfZGlzYWJsZSh0N2w2NnhiLT5jbGszMmspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0N2w2NnhiLT5jbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODUsNyArMjg1LDcgQEAKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+c3VzcGVuZCkKIAkJcGRhdGEtPnN1c3BlbmQoZGV2KTsKLQljbGtfZGlzYWJsZSh0N2w2NnhiLT5jbGs0OG0pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0N2w2NnhiLT5jbGs0OG0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTUsNyArMjk1LDcgQEAKIAlzdHJ1Y3QgdDdsNjZ4YiAqdDdsNjZ4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZkZXYtPmRldik7CiAKLQljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazQ4bSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHQ3bDY2eGItPmNsazQ4bSk7CiAJaWYgKHBkYXRhICYmIHBkYXRhLT5yZXN1bWUpCiAJCXBkYXRhLT5yZXN1bWUoZGV2KTsKIApAQCAtMzY5LDcgKzM2OSw3IEBACiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCi0JY2xrX2VuYWJsZSh0N2w2NnhiLT5jbGs0OG0pOworCWNsa19wcmVwYXJlX2VuYWJsZSh0N2w2NnhiLT5jbGs0OG0pOwogCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5lbmFibGUpCiAJCXBkYXRhLT5lbmFibGUoZGV2KTsKQEAgLTQxNCw5ICs0MTQsOSBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBwZGF0YS0+ZGlzYWJsZShkZXYpOwotCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazQ4bSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHQ3bDY2eGItPmNsazQ4bSk7CiAJY2xrX3B1dCh0N2w2NnhiLT5jbGs0OG0pOwotCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazMyayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHQ3bDY2eGItPmNsazMyayk7CiAJY2xrX3B1dCh0N2w2NnhiLT5jbGszMmspOwogCXQ3bDY2eGJfZGV0YWNoX2lycShkZXYpOwogCWlvdW5tYXAodDdsNjZ4Yi0+c2NyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RjMzU4OXguYyBiL2RyaXZlcnMvbWZkL3RjMzU4OXguYwppbmRleCAwMDcyZTY2Li5hYWNiMzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90YzM1ODl4LmMKKysrIGIvZHJpdmVycy9tZmQvdGMzNTg5eC5jCkBAIC0yNDEsMTAgKzI0MSw4IEBACiAKIHN0YXRpYyBpbnQgdGMzNTg5eF9pcnFfaW5pdChzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCwgc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQlpbnQgYmFzZSA9IHRjMzU4OXgtPmlycV9iYXNlOwotCiAJdGMzNTg5eC0+ZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfc2ltcGxlKAotCQlucCwgVEMzNTg5eF9OUl9JTlRFUk5BTF9JUlFTLCBiYXNlLAorCQlucCwgVEMzNTg5eF9OUl9JTlRFUk5BTF9JUlFTLCAwLAogCQkmdGMzNTg5eF9pcnFfb3BzLCB0YzM1ODl4KTsKIAogCWlmICghdGMzNTg5eC0+ZG9tYWluKSB7CkBAIC0yOTgsNyArMjk2LDcgQEAKIAlpZiAoYmxvY2tzICYgVEMzNTg5eF9CTE9DS19HUElPKSB7CiAJCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh0YzM1ODl4LT5kZXYsIC0xLCB0YzM1ODl4X2Rldl9ncGlvLAogCQkJCSAgICAgIEFSUkFZX1NJWkUodGMzNTg5eF9kZXZfZ3BpbyksIE5VTEwsCi0JCQkJICAgICAgdGMzNTg5eC0+aXJxX2Jhc2UsIHRjMzU4OXgtPmRvbWFpbik7CisJCQkJICAgICAgMCwgdGMzNTg5eC0+ZG9tYWluKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2Vycih0YzM1ODl4LT5kZXYsICJmYWlsZWQgdG8gYWRkIGdwaW8gY2hpbGRcbiIpOwogCQkJcmV0dXJuIHJldDsKQEAgLTMwOSw3ICszMDcsNyBAQAogCWlmIChibG9ja3MgJiBUQzM1ODl4X0JMT0NLX0tFWVBBRCkgewogCQlyZXQgPSBtZmRfYWRkX2RldmljZXModGMzNTg5eC0+ZGV2LCAtMSwgdGMzNTg5eF9kZXZfa2V5cGFkLAogCQkJCSAgICAgIEFSUkFZX1NJWkUodGMzNTg5eF9kZXZfa2V5cGFkKSwgTlVMTCwKLQkJCQkgICAgICB0YzM1ODl4LT5pcnFfYmFzZSwgdGMzNTg5eC0+ZG9tYWluKTsKKwkJCQkgICAgICAwLCB0YzM1ODl4LT5kb21haW4pOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKHRjMzU4OXgtPmRldiwgImZhaWxlZCB0byBrZXlwYWQgY2hpbGRcbiIpOwogCQkJcmV0dXJuIHJldDsKQEAgLTQwNCw3ICs0MDIsNiBAQAogCXRjMzU4OXgtPmRldiA9ICZpMmMtPmRldjsKIAl0YzM1ODl4LT5pMmMgPSBpMmM7CiAJdGMzNTg5eC0+cGRhdGEgPSBwZGF0YTsKLQl0YzM1ODl4LT5pcnFfYmFzZSA9IHBkYXRhLT5pcnFfYmFzZTsKIAogCXN3aXRjaCAodmVyc2lvbikgewogCWNhc2UgVEMzNTg5WF9UQzM1ODkzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMKaW5kZXggZTcxZjg4MC4uODVmYWIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzODd4Yi5jCkBAIC01Miw3ICs1Miw3IEBACiAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnN1c3BlbmQpCiAJCXBkYXRhLT5zdXNwZW5kKGRldik7Ci0JY2xrX2Rpc2FibGUodGM2Mzg3eGItPmNsazMyayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRjNjM4N3hiLT5jbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02Miw3ICs2Miw3IEBACiAJc3RydWN0IHRjNjM4N3hiICp0YzYzODd4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmZGV2LT5kZXYpOwogCi0JY2xrX2VuYWJsZSh0YzYzODd4Yi0+Y2xrMzJrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUodGM2Mzg3eGItPmNsazMyayk7CiAJaWYgKHBkYXRhICYmIHBkYXRhLT5yZXN1bWUpCiAJCXBkYXRhLT5yZXN1bWUoZGV2KTsKIApAQCAtMTAwLDcgKzEwMCw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ICAgICAgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgdGM2Mzg3eGIgKnRjNjM4N3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWNsa19lbmFibGUodGM2Mzg3eGItPmNsazMyayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHRjNjM4N3hiLT5jbGszMmspOwogCiAJdG1pb19jb3JlX21tY19lbmFibGUodGM2Mzg3eGItPnNjciArIDB4MjAwLCAwLAogCQl0YzYzODd4Yl9tbWNfcmVzb3VyY2VzWzBdLnN0YXJ0ICYgMHhmZmZlKTsKQEAgLTExMyw3ICsxMTMsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiAgICAgID0gdG9fcGxhdGZvcm1fZGV2aWNlKG1tYy0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHRjNjM4N3hiICp0YzYzODd4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQljbGtfZGlzYWJsZSh0YzYzODd4Yi0+Y2xrMzJrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodGM2Mzg3eGItPmNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNCw3ICsyMTQsNyBAQAogCW1mZF9yZW1vdmVfZGV2aWNlcygmZGV2LT5kZXYpOwogCWlvdW5tYXAodGM2Mzg3eGItPnNjcik7CiAJcmVsZWFzZV9yZXNvdXJjZSgmdGM2Mzg3eGItPnJzY3IpOwotCWNsa19kaXNhYmxlKHRjNjM4N3hiLT5jbGszMmspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0YzYzODd4Yi0+Y2xrMzJrKTsKIAljbGtfcHV0KHRjNjM4N3hiLT5jbGszMmspOwogCWtmcmVlKHRjNjM4N3hiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKaW5kZXggNGZhYzE2Yi4uZDM1ZjExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCkBAIC0yNjMsNiArMjYzLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdGM2MzkzeGJfb2hjaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSAqdGNwZCA9IGRldl9nZXRfcGxhdGRhdGEoZGV2LT5kZXYucGFyZW50KTsKKworCS8qIFdlIGNhbid0IHByb3Blcmx5IHN0b3JlL3Jlc3RvcmUgT0hDSSBzdGF0ZSwgc28gZmFpbCBoZXJlICovCisJaWYgKHRjcGQtPnJlc3VtZV9yZXN0b3JlKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIHRjNjM5M3hiX29oY2lfZGlzYWJsZShkZXYpOworfQorCiBzdGF0aWMgaW50IHRjNjM5M3hiX2ZiX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPmRldi5wYXJlbnQpOwpAQCAtNDAzLDcgKzQxNCw3IEBACiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0YzYzOTN4Yl9vaGNpX3Jlc291cmNlcyksCiAJCS5yZXNvdXJjZXMgPSB0YzYzOTN4Yl9vaGNpX3Jlc291cmNlcywKIAkJLmVuYWJsZSA9IHRjNjM5M3hiX29oY2lfZW5hYmxlLAotCQkuc3VzcGVuZCA9IHRjNjM5M3hiX29oY2lfZGlzYWJsZSwKKwkJLnN1c3BlbmQgPSB0YzYzOTN4Yl9vaGNpX3N1c3BlbmQsCiAJCS5yZXN1bWUgPSB0YzYzOTN4Yl9vaGNpX2VuYWJsZSwKIAkJLmRpc2FibGUgPSB0YzYzOTN4Yl9vaGNpX2Rpc2FibGUsCiAJfSwKQEAgLTY1NCw3ICs2NjUsNyBAQAogCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAotCXJldCA9IGNsa19lbmFibGUodGM2MzkzeGItPmNsayk7CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHRjNjM5M3hiLT5jbGspOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2Nsa19lbmFibGU7CiAKQEAgLTcxNyw3ICs3MjgsNyBAQAogCQlncGlvY2hpcF9yZW1vdmUoJnRjNjM5M3hiLT5ncGlvKTsKIAl0Y3BkLT5kaXNhYmxlKGRldik7CiBlcnJfZW5hYmxlOgotCWNsa19kaXNhYmxlKHRjNjM5M3hiLT5jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0YzYzOTN4Yi0+Y2xrKTsKIGVycl9jbGtfZW5hYmxlOgogCWlvdW5tYXAodGM2MzkzeGItPnNjcik7CiBlcnJfaW9yZW1hcDoKQEAgLTc0OCw3ICs3NTksNyBAQAogCQlncGlvY2hpcF9yZW1vdmUoJnRjNjM5M3hiLT5ncGlvKTsKIAogCXJldCA9IHRjcGQtPmRpc2FibGUoZGV2KTsKLQljbGtfZGlzYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodGM2MzkzeGItPmNsayk7CiAJaW91bm1hcCh0YzYzOTN4Yi0+c2NyKTsKIAlyZWxlYXNlX3Jlc291cmNlKCZ0YzYzOTN4Yi0+cnNjcik7CiAJY2xrX3B1dCh0YzYzOTN4Yi0+Y2xrKTsKQEAgLTc3Niw3ICs3ODcsNyBAQAogCQkJaW9yZWFkOCh0YzYzOTN4Yi0+c2NyICsgU0NSX0dQSV9CQ1IoaSkpOwogCX0KIAlyZXQgPSB0Y3BkLT5zdXNwZW5kKGRldik7Ci0JY2xrX2Rpc2FibGUodGM2MzkzeGItPmNsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRjNjM5M3hiLT5jbGspOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTc4OCw3ICs3OTksNyBAQAogCWludCByZXQ7CiAJaW50IGk7CiAKLQljbGtfZW5hYmxlKHRjNjM5M3hiLT5jbGspOworCWNsa19wcmVwYXJlX2VuYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKIAogCXJldCA9IHRjcGQtPnJlc3VtZShkZXYpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90cHM2NTA5MC5jIGIvZHJpdmVycy9tZmQvdHBzNjUwOTAuYwppbmRleCAxYzNlNmUyLi4xNGI2MmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90cHM2NTA5MC5jCisrKyBiL2RyaXZlcnMvbWZkL3RwczY1MDkwLmMKQEAgLTc2LDU4ICs3Niw1OCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfaXJxIHRwczY1MDkwX2lycXNbXSA9IHsKIAkvKiBJTlQxIElSUXMqLwogCVtUUFM2NTA5MF9JUlFfVkFDX1NUQVRVU19DSEFOR0VdID0gewotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfVkFDX1NUQVRVU19DSEFOR0UsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX1ZBQ19TVEFUVVNfQ0hBTkdFLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9WU1lTX1NUQVRVU19DSEFOR0VdID0gewotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfVlNZU19TVEFUVVNfQ0hBTkdFLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19WU1lTX1NUQVRVU19DSEFOR0UsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX0JBVF9TVEFUVVNfQ0hBTkdFXSA9IHsKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX0JBVF9TVEFUVVNfQ0hBTkdFLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19CQVRfU1RBVFVTX0NIQU5HRSwKIAl9LAogCVtUUFM2NTA5MF9JUlFfQ0hBUkdJTkdfU1RBVFVTX0NIQU5HRV0gPSB7Ci0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19DSEFSR0lOR19TVEFUVVNfQ0hBTkdFLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19DSEFSR0lOR19TVEFUVVNfQ0hBTkdFLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9DSEFSR0lOR19DT01QTEVURV0gPSB7Ci0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19DSEFSR0lOR19DT01QTEVURSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfQ0hBUkdJTkdfQ09NUExFVEUsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0RDREMxXSA9IHsKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX09WRVJMT0FEX0RDREMxLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19PVkVSTE9BRF9EQ0RDMSwKIAl9LAogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRENEQzJdID0gewotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfT1ZFUkxPQURfRENEQzIsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX09WRVJMT0FEX0RDREMyLAogCX0sCiAJLyogSU5UMiBJUlFzKi8KIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0RDREMzXSA9IHsKLQkJCS5yZWdfb2Zmc2V0ID0gMSwKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0RDREMzLAorCQkucmVnX29mZnNldCA9IDEsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0RDREMzLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9GRVQxXSA9IHsKLQkJCS5yZWdfb2Zmc2V0ID0gMSwKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDEsCisJCS5yZWdfb2Zmc2V0ID0gMSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUMSwKIAl9LAogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRkVUMl0gPSB7Ci0JCQkucmVnX29mZnNldCA9IDEsCi0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQyLAorCQkucmVnX29mZnNldCA9IDEsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDIsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0ZFVDNdID0gewotCQkJLnJlZ19vZmZzZXQgPSAxLAotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUMywKKwkJLnJlZ19vZmZzZXQgPSAxLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQzLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9GRVQ0XSA9IHsKLQkJCS5yZWdfb2Zmc2V0ID0gMSwKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDQsCisJCS5yZWdfb2Zmc2V0ID0gMSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUNCwKIAl9LAogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRkVUNV0gPSB7Ci0JCQkucmVnX29mZnNldCA9IDEsCi0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQ1LAorCQkucmVnX29mZnNldCA9IDEsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDUsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0ZFVDZdID0gewotCQkJLnJlZ19vZmZzZXQgPSAxLAotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUNiwKKwkJLnJlZ19vZmZzZXQgPSAxLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQ2LAogCX0sCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9GRVQ3XSA9IHsKLQkJCS5yZWdfb2Zmc2V0ID0gMSwKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDcsCisJCS5yZWdfb2Zmc2V0ID0gMSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUNywKIAl9LAogfTsKIApAQCAtMTc2LDcgKzE3Niw3IEBACiAjZW5kaWYKIAogc3RhdGljIGludCB0cHM2NTA5MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB0cHM2NTA5MF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJmNsaWVudC0+ZGV2KTsKIAlpbnQgaXJxX2Jhc2UgPSAwOwpAQCAtMjEwLDExICsyMTAsMTEgQEAKIAogCWlmIChjbGllbnQtPmlycSkgewogCQlyZXQgPSByZWdtYXBfYWRkX2lycV9jaGlwKHRwczY1MDkwLT5ybWFwLCBjbGllbnQtPmlycSwKLQkJCUlSUUZfT05FU0hPVCB8IElSUUZfVFJJR0dFUl9MT1csIGlycV9iYXNlLAotCQkJJnRwczY1MDkwX2lycV9jaGlwLCAmdHBzNjUwOTAtPmlycV9kYXRhKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCQkJIklSUSBpbml0IGZhaWxlZCB3aXRoIGVycjogJWRcbiIsIHJldCk7CisJCQkJCSAgSVJRRl9PTkVTSE9UIHwgSVJRRl9UUklHR0VSX0xPVywgaXJxX2Jhc2UsCisJCQkJCSAgJnRwczY1MDkwX2lycV9jaGlwLCAmdHBzNjUwOTAtPmlycV9kYXRhKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJIklSUSBpbml0IGZhaWxlZCB3aXRoIGVycjogJWRcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfSBlbHNlIHsKQEAgLTIyMyw4ICsyMjMsOCBAQAogCX0KIAogCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh0cHM2NTA5MC0+ZGV2LCAtMSwgdHBzNjUwOTBzLAotCQlBUlJBWV9TSVpFKHRwczY1MDkwcyksIE5VTEwsCi0JCTAsIHJlZ21hcF9pcnFfZ2V0X2RvbWFpbih0cHM2NTA5MC0+aXJxX2RhdGEpKTsKKwkJCSAgICAgIEFSUkFZX1NJWkUodHBzNjUwOTBzKSwgTlVMTCwKKwkJCSAgICAgIDAsIHJlZ21hcF9pcnFfZ2V0X2RvbWFpbih0cHM2NTA5MC0+aXJxX2RhdGEpKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiYWRkIG1mZCBkZXZpY2VzIGZhaWxlZCB3aXRoIGVycjogJWRcbiIsCiAJCQlyZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHBzNjUyMTcuYyBiL2RyaXZlcnMvbWZkL3RwczY1MjE3LmMKaW5kZXggYThlZTUyYy4uODBhOTE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHBzNjUyMTcuYworKysgYi9kcml2ZXJzL21mZC90cHM2NTIxNy5jCkBAIC0zMyw5ICszMywxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCB0cHM2NTIxN3NbXSA9IHsKIAl7CiAJCS5uYW1lID0gInRwczY1MjE3LXBtaWMiLAorCQkub2ZfY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTIxNy1wbWljIiwKIAl9LAogCXsKIAkJLm5hbWUgPSAidHBzNjUyMTctYmwiLAorCQkub2ZfY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTIxNy1ibCIsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYwppbmRleCBjZjkyYTZkLi43ZDYzZTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jCkBAIC00NCw2ICs0NCwxNSBAQAogI2RlZmluZSBQV1JfREVWU0xQCQlCSVQoMSkKICNkZWZpbmUgUFdSX0RFVk9GRgkJQklUKDApCiAKKy8qIFJlZ2lzdGVyIGJpdHMgZm9yIENGR19QMV9UUkFOU0lUSU9OIChhbHNvIGZvciBQMiBhbmQgUDMpICovCisjZGVmaW5lIFNUQVJUT05fU1dCVUcJCUJJVCg3KQkvKiBTdGFydCBvbiB3YXRjaGRvZyAqLworI2RlZmluZSBTVEFSVE9OX1ZCVVMJCUJJVCg1KQkvKiBTdGFydCBvbiBWQlVTICovCisjZGVmaW5lIFNUQVJUT05fVkJBVAkJQklUKDQpCS8qIFN0YXJ0IG9uIGJhdHRlcnkgaW5zZXJ0ICovCisjZGVmaW5lIFNUQVJUT05fUlRDCQlCSVQoMykJLyogU3RhcnQgb24gUlRDICovCisjZGVmaW5lIFNUQVJUT05fVVNCCQlCSVQoMikJLyogU3RhcnQgb24gVVNCIGhvc3QgKi8KKyNkZWZpbmUgU1RBUlRPTl9DSEcJCUJJVCgxKQkvKiBTdGFydCBvbiBjaGFyZ2VyICovCisjZGVmaW5lIFNUQVJUT05fUFdPTgkJQklUKDApCS8qIFN0YXJ0IG9uIFBXUk9OIGJ1dHRvbiAqLworCiAjZGVmaW5lIFNFUV9PRkZTWU5DCQkoMSA8PCAwKQogCiAjZGVmaW5lIFBIWV9UT19PRkZfUE1fTUFTVEVSKHApCQkocCAtIDB4MzYpCkBAIC02MDYsNiArNjE1LDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdHdsNDAzMF9zdGFydG9uX21hc2tfYW5kX3NldCh1OCBiaXRtYXNrLCB1OCBiaXR2YWx1ZXMpCit7CisJdTggcmVnc1szXSA9IHsgVFdMNDAzMF9QTV9NQVNURVJfQ0ZHX1AxX1RSQU5TSVRJT04sCisJCSAgICAgICBUV0w0MDMwX1BNX01BU1RFUl9DRkdfUDJfVFJBTlNJVElPTiwKKwkJICAgICAgIFRXTDQwMzBfUE1fTUFTVEVSX0NGR19QM19UUkFOU0lUSU9OLCB9OworCXU4IHZhbDsKKwlpbnQgaSwgZXJyOworCisJZXJyID0gdHdsX2kyY193cml0ZV91OChUV0xfTU9EVUxFX1BNX01BU1RFUiwgVFdMNDAzMF9QTV9NQVNURVJfS0VZX0NGRzEsCisJCQkgICAgICAgVFdMNDAzMF9QTV9NQVNURVJfUFJPVEVDVF9LRVkpOworCWlmIChlcnIpCisJCWdvdG8gcmVsb2NrOworCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMX01PRFVMRV9QTV9NQVNURVIsCisJCQkgICAgICAgVFdMNDAzMF9QTV9NQVNURVJfS0VZX0NGRzIsCisJCQkgICAgICAgVFdMNDAzMF9QTV9NQVNURVJfUFJPVEVDVF9LRVkpOworCWlmIChlcnIpCisJCWdvdG8gcmVsb2NrOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihyZWdzKTsgaSsrKSB7CisJCWVyciA9IHR3bF9pMmNfcmVhZF91OChUV0xfTU9EVUxFX1BNX01BU1RFUiwKKwkJCQkgICAgICAmdmFsLCByZWdzW2ldKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQl2YWwgPSAofmJpdG1hc2sgJiB2YWwpIHwgKGJpdG1hc2sgJiBiaXR2YWx1ZXMpOworCQllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTF9NT0RVTEVfUE1fTUFTVEVSLAorCQkJCSAgICAgICB2YWwsIHJlZ3NbaV0pOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGVycikKKwkJcHJfZXJyKCJUV0w0MDMwIFJlZ2lzdGVyIGFjY2VzcyBmYWlsZWQ6ICVpXG4iLCBlcnIpOworCityZWxvY2s6CisJcmV0dXJuIHR3bF9pMmNfd3JpdGVfdTgoVFdMX01PRFVMRV9QTV9NQVNURVIsIDAsCisJCQkJVFdMNDAzMF9QTV9NQVNURVJfUFJPVEVDVF9LRVkpOworfQorCiAvKgogICogSW4gbWFzdGVyIG1vZGUsIHN0YXJ0IHRoZSBwb3dlciBvZmYgc2VxdWVuY2UuCiAgKiBBZnRlciBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uLCBUV0wgc2h1dHMgZG93biB0aGUgcG93ZXIgdG8gdGhlIFNvQwpAQCAtNjE1LDYgKzY2MiwxMSBAQAogewogCWludCBlcnI7CiAKKwkvKiBEaXNhYmxlIHN0YXJ0IG9uIGNoYXJnZXIgb3IgVkJVUyBhcyBpdCBjYW4gYnJlYWsgcG93ZXJvZmYgKi8KKwllcnIgPSB0d2w0MDMwX3N0YXJ0b25fbWFza19hbmRfc2V0KFNUQVJUT05fVkJVUyB8IFNUQVJUT05fQ0hHLCAwKTsKKwlpZiAoZXJyKQorCQlwcl9lcnIoIlRXTDQwMzAgVW5hYmxlIHRvIGNvbmZpZ3VyZSBzdGFydC11cFxuIik7CisKIAllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTF9NT0RVTEVfUE1fTUFTVEVSLCBQV1JfREVWT0ZGLAogCQkJICAgICAgIFRXTDQwMzBfUE1fTUFTVEVSX1AxX1NXX0VWRU5UUyk7CiAJaWYgKGVycikKQEAgLTc3OSw2ICs4MzEsOSBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB0d2w0MDMwX3Bvd2VyX29mX21hdGNoW10gPSB7CiAJeworCQkuY29tcGF0aWJsZSA9ICJ0aSx0d2w0MDMwLXBvd2VyIiwKKwl9LAorCXsKIAkJLmNvbXBhdGlibGUgPSAidGksdHdsNDAzMC1wb3dlci1yZXNldCIsCiAJCS5kYXRhID0gJm9tYXAzX3Jlc2V0LAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC92aXBlcmJvYXJkLmMgYi9kcml2ZXJzL21mZC92aXBlcmJvYXJkLmMKaW5kZXggZTAwZjUzNC4uZTZiM2M3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdmlwZXJib2FyZC5jCisrKyBiL2RyaXZlcnMvbWZkL3ZpcGVyYm9hcmQuYwpAQCAtOTMsOCArOTMsOCBAQAogCQkgdmVyc2lvbiA+PiA4LCB2ZXJzaW9uICYgMHhmZiwKIAkJIHZiLT51c2JfZGV2LT5idXMtPmJ1c251bSwgdmItPnVzYl9kZXYtPmRldm51bSk7CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMoJmludGVyZmFjZS0+ZGV2LCAtMSwgdnByYnJkX2RldnMsCi0JCQkJQVJSQVlfU0laRSh2cHJicmRfZGV2cyksIE5VTEwsIDAsIE5VTEwpOworCXJldCA9IG1mZF9hZGRfaG90cGx1Z19kZXZpY2VzKCZpbnRlcmZhY2UtPmRldiwgdnByYnJkX2RldnMsCisJCQkJICAgICAgQVJSQVlfU0laRSh2cHJicmRfZGV2cykpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkZhaWxlZCB0byBhZGQgbWZkIGRldmljZXMgdG8gY29yZS4iKTsKIAkJZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtNTEwMi10YWJsZXMuYyBiL2RyaXZlcnMvbWZkL3dtNTEwMi10YWJsZXMuYwppbmRleCBkNmYzNWJiLi5iMzI2YTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTUxMDItdGFibGVzLmMKKysrIGIvZHJpdmVycy9tZmQvd201MTAyLXRhYmxlcy5jCkBAIC0zMzYsOCArMzM2LDYgQEAKIAl7IDB4MDAwMDAyMTgsIDB4MDFBNiB9LCAgIC8qIFI1MzYgICAtIE1pYyBCaWFzIEN0cmwgMSAqLyAKIAl7IDB4MDAwMDAyMTksIDB4MDFBNiB9LCAgIC8qIFI1MzcgICAtIE1pYyBCaWFzIEN0cmwgMiAqLyAKIAl7IDB4MDAwMDAyMUEsIDB4MDFBNiB9LCAgIC8qIFI1MzggICAtIE1pYyBCaWFzIEN0cmwgMyAqLyAKLQl7IDB4MDAwMDAyMjUsIDB4MDQwMCB9LCAgIC8qIFI1NDkgICAtIEhQIEN0cmwgMUwgKi8KLQl7IDB4MDAwMDAyMjYsIDB4MDQwMCB9LCAgIC8qIFI1NTAgICAtIEhQIEN0cmwgMVIgKi8KIAl7IDB4MDAwMDAyOTMsIDB4MDAwMCB9LCAgIC8qIFI2NTkgICAtIEFjY2Vzc29yeSBEZXRlY3QgTW9kZSAxICovIAogCXsgMHgwMDAwMDI5QiwgMHgwMDIwIH0sICAgLyogUjY2NyAgIC0gSGVhZHBob25lIERldGVjdCAxICovIAogCXsgMHgwMDAwMDI5QywgMHgwMDAwIH0sICAgLyogUjY2OCAgIC0gSGVhZHBob25lIERldGVjdCAyICovCkBAIC0xMTEyLDYgKzExMTAsOCBAQAogCWNhc2UgQVJJWk9OQV9NSUNfQklBU19DVFJMXzE6CiAJY2FzZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMjoKIAljYXNlIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9BQ0NFU1NPUllfREVURUNUX01PREVfMToKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8xOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CkBAIC0xOTQ5LDYgKzE5NDksOCBAQAogCWNhc2UgQVJJWk9OQV9EU1AxX1NDUkFUQ0hfMToKIAljYXNlIEFSSVpPTkFfRFNQMV9TQ1JBVENIXzI6CiAJY2FzZSBBUklaT05BX0RTUDFfU0NSQVRDSF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CiAJY2FzZSBBUklaT05BX0hQX0RBQ1ZBTDoKIAljYXNlIEFSSVpPTkFfTUlDX0RFVEVDVF8zOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd201MTEwLXRhYmxlcy5jIGIvZHJpdmVycy9tZmQvd201MTEwLXRhYmxlcy5jCmluZGV4IDQ2NDJiNWIuLjEyY2FkOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtNTExMC10YWJsZXMuYworKysgYi9kcml2ZXJzL21mZC93bTUxMTAtdGFibGVzLmMKQEAgLTg5NSw4ICs4OTUsMTYgQEAKIAl7IDB4MDAwMDA1NDgsIDB4MTgxOCB9LCAgICAvKiBSMTM1MiAgLSBBSUYyIEZyYW1lIEN0cmwgMiAqLwogCXsgMHgwMDAwMDU0OSwgMHgwMDAwIH0sICAgIC8qIFIxMzUzICAtIEFJRjIgRnJhbWUgQ3RybCAzICovCiAJeyAweDAwMDAwNTRBLCAweDAwMDEgfSwgICAgLyogUjEzNTQgIC0gQUlGMiBGcmFtZSBDdHJsIDQgKi8KKwl7IDB4MDAwMDA1NEIsIDB4MDAwMiB9LCAgICAvKiBSMTM1NSAgLSBBSUYyIEZyYW1lIEN0cmwgNSAqLworCXsgMHgwMDAwMDU0QywgMHgwMDAzIH0sICAgIC8qIFIxMzU2ICAtIEFJRjIgRnJhbWUgQ3RybCA2ICovCisJeyAweDAwMDAwNTRELCAweDAwMDQgfSwgICAgLyogUjEzNTcgIC0gQUlGMiBGcmFtZSBDdHJsIDcgKi8KKwl7IDB4MDAwMDA1NEUsIDB4MDAwNSB9LCAgICAvKiBSMTM1OCAgLSBBSUYyIEZyYW1lIEN0cmwgOCAqLwogCXsgMHgwMDAwMDU1MSwgMHgwMDAwIH0sICAgIC8qIFIxMzYxICAtIEFJRjIgRnJhbWUgQ3RybCAxMSAqLwogCXsgMHgwMDAwMDU1MiwgMHgwMDAxIH0sICAgIC8qIFIxMzYyICAtIEFJRjIgRnJhbWUgQ3RybCAxMiAqLworCXsgMHgwMDAwMDU1MywgMHgwMDAyIH0sICAgIC8qIFIxMzYzICAtIEFJRjIgRnJhbWUgQ3RybCAxMyAqLworCXsgMHgwMDAwMDU1NCwgMHgwMDAzIH0sICAgIC8qIFIxMzY0ICAtIEFJRjIgRnJhbWUgQ3RybCAxNCAqLworCXsgMHgwMDAwMDU1NSwgMHgwMDA0IH0sICAgIC8qIFIxMzY1ICAtIEFJRjIgRnJhbWUgQ3RybCAxNSAqLworCXsgMHgwMDAwMDU1NiwgMHgwMDA1IH0sICAgIC8qIFIxMzY2ICAtIEFJRjIgRnJhbWUgQ3RybCAxNiAqLwogCXsgMHgwMDAwMDU1OSwgMHgwMDAwIH0sICAgIC8qIFIxMzY5ICAtIEFJRjIgVHggRW5hYmxlcyAqLwogCXsgMHgwMDAwMDU1QSwgMHgwMDAwIH0sICAgIC8qIFIxMzcwICAtIEFJRjIgUnggRW5hYmxlcyAqLwogCXsgMHgwMDAwMDU4MCwgMHgwMDBDIH0sICAgIC8qIFIxNDA4ICAtIEFJRjMgQkNMSyBDdHJsICovCkBAIC0xNzkwLDYgKzE3OTgsOCBAQAogCWNhc2UgQVJJWk9OQV9NSUNfQklBU19DVFJMXzE6CiAJY2FzZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMjoKIAljYXNlIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9BQ0NFU1NPUllfREVURUNUX01PREVfMToKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8xOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CkBAIC0xOTM0LDggKzE5NDQsMTYgQEAKIAljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzI6CiAJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8zOgogCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfNDoKKwljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzU6CisJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF82OgorCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfNzoKKwljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzg6CiAJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xMToKIAljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzEyOgorCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTM6CisJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xNDoKKwljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzE1OgorCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTY6CiAJY2FzZSBBUklaT05BX0FJRjJfVFhfRU5BQkxFUzoKIAljYXNlIEFSSVpPTkFfQUlGMl9SWF9FTkFCTEVTOgogCWNhc2UgQVJJWk9OQV9BSUYzX0JDTEtfQ1RSTDoKQEAgLTI4MjUsNiArMjg0Myw4IEBACiAJY2FzZSBBUklaT05BX0FTWU5DX1NBTVBMRV9SQVRFXzFfU1RBVFVTOgogCWNhc2UgQVJJWk9OQV9BU1lOQ19TQU1QTEVfUkFURV8yX1NUQVRVUzoKIAljYXNlIEFSSVpPTkFfTUlDX0RFVEVDVF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CiAJY2FzZSBBUklaT05BX0lOUFVUX0VOQUJMRVNfU1RBVFVTOgogCWNhc2UgQVJJWk9OQV9PVVRQVVRfU1RBVFVTXzE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jIGIvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYwppbmRleCA0YWI1MjdmLi5mNTEyNGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQltb2RlID0gaWQyICYgV004MzUwX0NPTkZfU1RTX01BU0sgPj4gMTA7CisJbW9kZSA9IChpZDIgJiBXTTgzNTBfQ09ORl9TVFNfTUFTSykgPj4gMTA7CiAJY3VzdF9pZCA9IGlkMiAmIFdNODM1MF9DVVNUX0lEX01BU0s7CiAJY2hpcF9yZXYgPSAoaWQyICYgV004MzUwX0NISVBfUkVWX01BU0spID4+IDEyOwogCWRldl9pbmZvKHdtODM1MC0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204OTk3LXRhYmxlcy5jIGIvZHJpdmVycy9tZmQvd204OTk3LXRhYmxlcy5jCmluZGV4IDUxMGRhM2IuLmMwYzI1ZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTg5OTctdGFibGVzLmMKKysrIGIvZHJpdmVycy9tZmQvd204OTk3LXRhYmxlcy5jCkBAIC02NzAsNiArNjcwLDcgQEAKIAl7IDB4MDAwMDBDMjMsIDB4MDAwMCB9LCAgICAvKiBSMzEwNyAgLSBNaXNjIFBhZCBDdHJsIDQgKi8KIAl7IDB4MDAwMDBDMjQsIDB4MDAwMCB9LCAgICAvKiBSMzEwOCAgLSBNaXNjIFBhZCBDdHJsIDUgKi8KIAl7IDB4MDAwMDBEMDgsIDB4RkZGRiB9LCAgICAvKiBSMzMzNiAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzayAqLworCXsgMHgwMDAwMEQwOSwgMHhGRkZGIH0sICAgIC8qIFIzMzM3ICAtIEludGVycnVwdCBTdGF0dXMgMiBNYXNrICovCiAJeyAweDAwMDAwRDBBLCAweEZGRkYgfSwgICAgLyogUjMzMzggIC0gSW50ZXJydXB0IFN0YXR1cyAzIE1hc2sgKi8KIAl7IDB4MDAwMDBEMEIsIDB4RkZGRiB9LCAgICAvKiBSMzMzOSAgLSBJbnRlcnJ1cHQgU3RhdHVzIDQgTWFzayAqLwogCXsgMHgwMDAwMEQwQywgMHhGRUZGIH0sICAgIC8qIFIzMzQwICAtIEludGVycnVwdCBTdGF0dXMgNSBNYXNrICovCkBAIC04ODYsNiArODg3LDggQEAKIAljYXNlIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8xOgogCWNhc2UgQVJJWk9OQV9NSUNfQklBU19DVFJMXzI6CiAJY2FzZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMzoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xTDoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xUjoKIAljYXNlIEFSSVpPTkFfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzE6CiAJY2FzZSBBUklaT05BX0hFQURQSE9ORV9ERVRFQ1RfMToKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8yOgpAQCAtMTMyOCw2ICsxMzMxLDcgQEAKIAljYXNlIEFSSVpPTkFfSU5URVJSVVBUX1NUQVRVU180OgogCWNhc2UgQVJJWk9OQV9JTlRFUlJVUFRfU1RBVFVTXzU6CiAJY2FzZSBBUklaT05BX0lOVEVSUlVQVF9TVEFUVVNfMV9NQVNLOgorCWNhc2UgQVJJWk9OQV9JTlRFUlJVUFRfU1RBVFVTXzJfTUFTSzoKIAljYXNlIEFSSVpPTkFfSU5URVJSVVBUX1NUQVRVU18zX01BU0s6CiAJY2FzZSBBUklaT05BX0lOVEVSUlVQVF9TVEFUVVNfNF9NQVNLOgogCWNhc2UgQVJJWk9OQV9JTlRFUlJVUFRfU1RBVFVTXzVfTUFTSzoKQEAgLTE0NzcsNiArMTQ4MSw4IEBACiAJY2FzZSBBUklaT05BX1NBTVBMRV9SQVRFXzNfU1RBVFVTOgogCWNhc2UgQVJJWk9OQV9BU1lOQ19TQU1QTEVfUkFURV8xX1NUQVRVUzoKIAljYXNlIEFSSVpPTkFfTUlDX0RFVEVDVF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CiAJY2FzZSBBUklaT05BX0lOUFVUX0VOQUJMRVNfU1RBVFVTOgogCWNhc2UgQVJJWk9OQV9PVVRQVVRfU1RBVFVTXzE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IGJiZWI0NTEuLjAwNjI0MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC03NSw3ICs3NSw3IEBACiBjb25maWcgQVRNRUxfVENCX0NMS1NSQ19CTE9DSwogCWludAogCWRlcGVuZHMgb24gQVRNRUxfVENCX0NMS1NSQwotCXByb21wdCAiVEMgQmxvY2siIGlmIEFSQ0hfQVQ5MVJNOTIwMCB8fCBBUkNIX0FUOTFTQU05MjYwIHx8IENQVV9BVDMyQVA3MDBYCisJcHJvbXB0ICJUQyBCbG9jayIgaWYgQ1BVX0FUMzJBUDcwMFgKIAlkZWZhdWx0IDAKIAlyYW5nZSAwIDEKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZWVwcm9tL2VlcHJvbV85M2N4Ni5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9lZXByb21fOTNjeDYuYwppbmRleCAwZmY0YjAyLi4wY2YyYzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZWVwcm9tL2VlcHJvbV85M2N4Ni5jCisrKyBiL2RyaXZlcnMvbWlzYy9lZXByb20vZWVwcm9tXzkzY3g2LmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogfQogCiAvKioKLSAqIGVlcHJvbV85M2N4Nl9yZWFkIC0gUmVhZCBtdWx0aXBsZSB3b3JkcyBmcm9tIGVlcHJvbQorICogZWVwcm9tXzkzY3g2X3JlYWQgLSBSZWFkIGEgd29yZCBmcm9tIGVlcHJvbQogICogQGVlcHJvbTogUG9pbnRlciB0byBlZXByb20gc3RydWN0dXJlCiAgKiBAd29yZDogV29yZCBpbmRleCBmcm9tIHdoZXJlIHdlIHNob3VsZCBzdGFydCByZWFkaW5nCiAgKiBAZGF0YTogdGFyZ2V0IHBvaW50ZXIgd2hlcmUgdGhlIGluZm9ybWF0aW9uIHdpbGwgaGF2ZSB0byBiZSBzdG9yZWQKQEAgLTIzNSw2ICsyMzUsNjYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGVlcHJvbV85M2N4Nl9tdWx0aXJlYWQpOwogCiAvKioKKyAqIGVlcHJvbV85M2N4Nl9yZWFkYiAtIFJlYWQgYSBieXRlIGZyb20gZWVwcm9tCisgKiBAZWVwcm9tOiBQb2ludGVyIHRvIGVlcHJvbSBzdHJ1Y3R1cmUKKyAqIEB3b3JkOiBCeXRlIGluZGV4IGZyb20gd2hlcmUgd2Ugc2hvdWxkIHN0YXJ0IHJlYWRpbmcKKyAqIEBkYXRhOiB0YXJnZXQgcG9pbnRlciB3aGVyZSB0aGUgaW5mb3JtYXRpb24gd2lsbCBoYXZlIHRvIGJlIHN0b3JlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGEgYnl0ZSBvZiB0aGUgZWVwcm9tIGRhdGEKKyAqIGludG8gdGhlIGdpdmVuIGRhdGEgcG9pbnRlci4KKyAqLwordm9pZCBlZXByb21fOTNjeDZfcmVhZGIoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tLCBjb25zdCB1OCBieXRlLAorCXU4ICpkYXRhKQoreworCXUxNiBjb21tYW5kOworCXUxNiB0bXA7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGVlcHJvbSByZWdpc3RlcgorCSAqLworCWVlcHJvbV85M2N4Nl9zdGFydHVwKGVlcHJvbSk7CisKKwkvKgorCSAqIFNlbGVjdCB0aGUgcmVhZCBvcGNvZGUgYW5kIHRoZSBieXRlIHRvIGJlIHJlYWQuCisJICovCisJY29tbWFuZCA9IChQQ0lfRUVQUk9NX1JFQURfT1BDT0RFIDw8IChlZXByb20tPndpZHRoICsgMSkpIHwgYnl0ZTsKKwllZXByb21fOTNjeDZfd3JpdGVfYml0cyhlZXByb20sIGNvbW1hbmQsCisJCVBDSV9FRVBST01fV0lEVEhfT1BDT0RFICsgZWVwcm9tLT53aWR0aCArIDEpOworCisJLyoKKwkgKiBSZWFkIHRoZSByZXF1ZXN0ZWQgOCBiaXRzLgorCSAqLworCWVlcHJvbV85M2N4Nl9yZWFkX2JpdHMoZWVwcm9tLCAmdG1wLCA4KTsKKwkqZGF0YSA9IHRtcCAmIDB4ZmY7CisKKwkvKgorCSAqIENsZWFudXAgZWVwcm9tIHJlZ2lzdGVyLgorCSAqLworCWVlcHJvbV85M2N4Nl9jbGVhbnVwKGVlcHJvbSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlZXByb21fOTNjeDZfcmVhZGIpOworCisvKioKKyAqIGVlcHJvbV85M2N4Nl9tdWx0aXJlYWRiIC0gUmVhZCBtdWx0aXBsZSBieXRlcyBmcm9tIGVlcHJvbQorICogQGVlcHJvbTogUG9pbnRlciB0byBlZXByb20gc3RydWN0dXJlCisgKiBAYnl0ZTogSW5kZXggZnJvbSB3aGVyZSB3ZSBzaG91bGQgc3RhcnQgcmVhZGluZworICogQGRhdGE6IHRhcmdldCBwb2ludGVyIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGhhdmUgdG8gYmUgc3RvcmVkCisgKiBAd29yZHM6IE51bWJlciBvZiBieXRlcyB0aGF0IHNob3VsZCBiZSByZWFkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGFsbCByZXF1ZXN0ZWQgYnl0ZXMgZnJvbSB0aGUgZWVwcm9tLAorICogdGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgZWVwcm9tXzkzY3g2X3JlYWRiKCkgbXVsdGlwbGUgdGltZXMuCisgKi8KK3ZvaWQgZWVwcm9tXzkzY3g2X211bHRpcmVhZGIoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tLCBjb25zdCB1OCBieXRlLAorCXU4ICpkYXRhLCBjb25zdCB1MTYgYnl0ZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykKKwkJZWVwcm9tXzkzY3g2X3JlYWRiKGVlcHJvbSwgYnl0ZSArIGksICZkYXRhW2ldKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGVlcHJvbV85M2N4Nl9tdWx0aXJlYWRiKTsKKworLyoqCiAgKiBlZXByb21fOTNjeDZfd3JlbiAtIHNldCB0aGUgd3JpdGUgZW5hYmxlIHN0YXRlCiAgKiBAZWVwcm9tOiBQb2ludGVyIHRvIGVlcHJvbSBzdHJ1Y3R1cmUKICAqIEBlbmFibGU6IHRydWUgdG8gZW5hYmxlIHdyaXRlcywgb3RoZXJ3aXNlIGRpc2FibGUgd3JpdGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMgYi9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKaW5kZXggMmNmMmJiYy4uMTgwYTU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYwpAQCAtMTg3LDYgKzE4Nyw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChlbmNsb3N1cmVfdW5yZWdpc3Rlcik7CiAKICNkZWZpbmUgRU5DTE9TVVJFX05BTUVfU0laRQk2NAorI2RlZmluZSBDT01QT05FTlRfTkFNRV9TSVpFCTY0CiAKIHN0YXRpYyB2b2lkIGVuY2xvc3VyZV9saW5rX25hbWUoc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmNkZXYsIGNoYXIgKm5hbWUpCiB7CkBAIC0yNDYsNiArMjQ3LDI5IEBACiAJcHV0X2RldmljZShkZXYtPnBhcmVudCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqCitlbmNsb3N1cmVfY29tcG9uZW50X2ZpbmRfYnlfbmFtZShzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwKKwkJCQljb25zdCBjaGFyICpuYW1lKQoreworCWludCBpOworCWNvbnN0IGNoYXIgKmNuYW1lOworCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICplY29tcDsKKworCWlmICghZWRldiB8fCAhbmFtZSB8fCAhbmFtZVswXSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZWRldi0+Y29tcG9uZW50czsgaSsrKSB7CisJCWVjb21wID0gJmVkZXYtPmNvbXBvbmVudFtpXTsKKwkJY25hbWUgPSBkZXZfbmFtZSgmZWNvbXAtPmNkZXYpOworCQlpZiAoZWNvbXAtPm51bWJlciAhPSAtMSAmJgorCQkgICAgY25hbWUgJiYgY25hbWVbMF0gJiYKKwkJICAgICFzdHJjbXAoY25hbWUsIG5hbWUpKQorCQkJcmV0dXJuIGVjb21wOworCX0KKworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZW5jbG9zdXJlX2NvbXBvbmVudF9ncm91cHNbXTsKIAogLyoqCkBAIC0yNjksNyArMjkzLDggQEAKIHsKIAlzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXA7CiAJc3RydWN0IGRldmljZSAqY2RldjsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CisJY2hhciBuZXduYW1lW0NPTVBPTkVOVF9OQU1FX1NJWkVdOwogCiAJaWYgKG51bWJlciA+PSBlZGV2LT5jb21wb25lbnRzKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTI4Myw5ICszMDgsMjAgQEAKIAllY29tcC0+bnVtYmVyID0gbnVtYmVyOwogCWNkZXYgPSAmZWNvbXAtPmNkZXY7CiAJY2Rldi0+cGFyZW50ID0gZ2V0X2RldmljZSgmZWRldi0+ZWRldik7Ci0JaWYgKG5hbWUgJiYgbmFtZVswXSkKLQkJZGV2X3NldF9uYW1lKGNkZXYsICIlcyIsIG5hbWUpOwotCWVsc2UKKworCWlmIChuYW1lICYmIG5hbWVbMF0pIHsKKwkJLyogU29tZSBoYXJkd2FyZSAoZS5nLiBlbmNsb3N1cmUgaW4gUlgzMDAgUzYpIGhhcyBjb21wb25lbnRzCisJCSAqIHdpdGggbm9uIHVuaXF1ZSBuYW1lcy4gUmVnaXN0ZXJpbmcgZHVwbGljYXRlcyBpbiBzeXNmcworCQkgKiB3aWxsIGxlYWQgdG8gd2FybmluZ3MgZHVyaW5nIGJvb3R1cC4gU28gbWFrZSB0aGUgbmFtZXMKKwkJICogdW5pcXVlIGJ5IGFwcGVuZGluZyBjb25zZWN1dGl2ZSBudW1iZXJzIC0xLCAtMiwgLi4uICovCisJCWkgPSAxOworCQlzbnByaW50ZihuZXduYW1lLCBDT01QT05FTlRfTkFNRV9TSVpFLAorCQkJICIlcyIsIG5hbWUpOworCQl3aGlsZSAoZW5jbG9zdXJlX2NvbXBvbmVudF9maW5kX2J5X25hbWUoZWRldiwgbmV3bmFtZSkpCisJCQlzbnByaW50ZihuZXduYW1lLCBDT01QT05FTlRfTkFNRV9TSVpFLAorCQkJCSAiJXMtJWkiLCBuYW1lLCBpKyspOworCQlkZXZfc2V0X25hbWUoY2RldiwgIiVzIiwgbmV3bmFtZSk7CisJfSBlbHNlCiAJCWRldl9zZXRfbmFtZShjZGV2LCAiJXUiLCBudW1iZXIpOwogCiAJY2Rldi0+cmVsZWFzZSA9IGVuY2xvc3VyZV9jb21wb25lbnRfcmVsZWFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy92ZXhwcmVzcy1zeXNjZmcuYyBiL2RyaXZlcnMvbWlzYy92ZXhwcmVzcy1zeXNjZmcuYwppbmRleCBiM2E4MTIzLi5jMzQ0NDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdmV4cHJlc3Mtc3lzY2ZnLmMKKysrIGIvZHJpdmVycy9taXNjL3ZleHByZXNzLXN5c2NmZy5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVnbWFwICp2ZXhwcmVzc19zeXNjZmdfcmVnbWFwX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAogCQl2b2lkICpjb250ZXh0KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlpbnQgZXJyOwogCXN0cnVjdCB2ZXhwcmVzc19zeXNjZmcgKnN5c2NmZyA9IGNvbnRleHQ7CiAJc3RydWN0IHZleHByZXNzX3N5c2NmZ19mdW5jICpmdW5jOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKQEAgLTE1NSwzMiArMTU1LDE4IEBACiAJdTMyIHNpdGUsIHBvc2l0aW9uLCBkY2M7CiAJaW50IGk7CiAKLQlpZiAoZGV2LT5vZl9ub2RlKSB7Ci0JCWludCBlcnIgPSB2ZXhwcmVzc19jb25maWdfZ2V0X3RvcG8oZGV2LT5vZl9ub2RlLCAmc2l0ZSwKKwllcnIgPSB2ZXhwcmVzc19jb25maWdfZ2V0X3RvcG8oZGV2LT5vZl9ub2RlLCAmc2l0ZSwKIAkJCQkmcG9zaXRpb24sICZkY2MpOworCWlmIChlcnIpCisJCXJldHVybiBFUlJfUFRSKGVycik7CiAKLQkJaWYgKGVycikKLQkJCXJldHVybiBFUlJfUFRSKGVycik7CisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZGV2LT5vZl9ub2RlLAorCQkJImFybSx2ZXhwcmVzcy1zeXNyZWcsZnVuYyIsIE5VTEwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQkJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZGV2LT5vZl9ub2RlLAotCQkJCSJhcm0sdmV4cHJlc3Mtc3lzcmVnLGZ1bmMiLCBOVUxMKTsKLQkJaWYgKCFwcm9wKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQkJbnVtID0gcHJvcC0+bGVuZ3RoIC8gc2l6ZW9mKHUzMikgLyAyOwotCQl2YWwgPSBwcm9wLT52YWx1ZTsKLQl9IGVsc2UgewotCQlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAxIHx8Ci0JCQkJcGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9CVVMpCi0JCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKLQotCQlzaXRlID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7Ci0JCWlmIChzaXRlID09IFZFWFBSRVNTX1NJVEVfTUFTVEVSKQotCQkJc2l0ZSA9IHZleHByZXNzX2NvbmZpZ19nZXRfbWFzdGVyKCk7Ci0JCXBvc2l0aW9uID0gMDsKLQkJZGNjID0gMDsKLQkJbnVtID0gMTsKLQl9CisJbnVtID0gcHJvcC0+bGVuZ3RoIC8gc2l6ZW9mKHUzMikgLyAyOworCXZhbCA9IHByb3AtPnZhbHVlOwogCiAJLyoKIAkgKiAiYXJtLHZleHByZXNzLWVuZXJneSIgZnVuY3Rpb24gdXNlZCB0byBiZSBkZXNjcmliZWQKQEAgLTIwNywxMyArMTkzLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKIAkJdTMyIGZ1bmN0aW9uLCBkZXZpY2U7CiAKLQkJaWYgKGRldi0+b2Zfbm9kZSkgewotCQkJZnVuY3Rpb24gPSBiZTMyX3RvX2NwdXAodmFsKyspOwotCQkJZGV2aWNlID0gYmUzMl90b19jcHVwKHZhbCsrKTsKLQkJfSBlbHNlIHsKLQkJCWZ1bmN0aW9uID0gcGRldi0+cmVzb3VyY2VbMF0uZW5kOwotCQkJZGV2aWNlID0gcGRldi0+aWQ7Ci0JCX0KKwkJZnVuY3Rpb24gPSBiZTMyX3RvX2NwdXAodmFsKyspOworCQlkZXZpY2UgPSBiZTMyX3RvX2NwdXAodmFsKyspOwogCiAJCWRldl9kYmcoZGV2LCAiZnVuYyAlcDogJXUvJXUvJXUvJXUvJXVcbiIsCiAJCQkJZnVuYywgc2l0ZSwgcG9zaXRpb24sIGRjYywKQEAgLTI2NSwxNyArMjQ2LDYgQEAKIH07CiAKIAotLyogTm9uLURUIGhhY2ssIHRvIGJlIGdvbmUuLi4gKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICp2ZXhwcmVzc19zeXNjZmdfYnJpZGdlOwotCi1pbnQgdmV4cHJlc3Nfc3lzY2ZnX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXBkZXYtPmRldi5wYXJlbnQgPSB2ZXhwcmVzc19zeXNjZmdfYnJpZGdlOwotCi0JcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotCiBzdGF0aWMgaW50IHZleHByZXNzX3N5c2NmZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB2ZXhwcmVzc19zeXNjZmcgKnN5c2NmZzsKQEAgLTMwMywxMCArMjczLDYgQEAKIAlpZiAoSVNfRVJSKGJyaWRnZSkpCiAJCXJldHVybiBQVFJfRVJSKGJyaWRnZSk7CiAKLQkvKiBOb24tRFQgY2FzZSAqLwotCWlmICghcGRldi0+ZGV2Lm9mX25vZGUpCi0JCXZleHByZXNzX3N5c2NmZ19icmlkZ2UgPSBicmlkZ2U7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCmluZGV4IDFmYTRjODAuLjQ0MDlkNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKQEAgLTc4LDEzICs3OCwxNiBAQAogCiAvKgogICogV2UndmUgb25seSBnb3Qgb25lIG1ham9yLCBzbyBudW1iZXIgb2YgbW1jYmxrIGRldmljZXMgaXMKLSAqIGxpbWl0ZWQgdG8gMjU2IC8gbnVtYmVyIG9mIG1pbm9ycyBwZXIgZGV2aWNlLgorICogbGltaXRlZCB0byAoMSA8PCAyMCkgLyBudW1iZXIgb2YgbWlub3JzIHBlciBkZXZpY2UuICBJdCBpcyBhbHNvCisgKiBjdXJyZW50bHkgbGltaXRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgc3RhdGljIGJpdG1hcHMgYmVsb3cuCiAgKi8KIHN0YXRpYyBpbnQgbWF4X2RldmljZXM7CiAKLS8qIDI1NiBtaW5vcnMsIHNvIGF0IG1vc3QgMjU2IHNlcGFyYXRlIGRldmljZXMgKi8KLXN0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfdXNlLCAyNTYpOwotc3RhdGljIERFQ0xBUkVfQklUTUFQKG5hbWVfdXNlLCAyNTYpOworI2RlZmluZSBNQVhfREVWSUNFUyAyNTYKKworLyogVE9ETzogUmVwbGFjZSB0aGVzZSB3aXRoIHN0cnVjdCBpZGEgKi8KK3N0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfdXNlLCBNQVhfREVWSUNFUyk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAobmFtZV91c2UsIE1BWF9ERVZJQ0VTKTsKIAogLyoKICAqIFRoZXJlIGlzIG9uZSBtbWNfYmxrX2RhdGEgcGVyIHNsb3QuCkBAIC0xMTIsNyArMTE1LDcgQEAKIAogCS8qCiAJICogT25seSBzZXQgaW4gbWFpbiBtbWNfYmxrX2RhdGEgYXNzb2NpYXRlZAotCSAqIHdpdGggbW1jX2NhcmQgd2l0aCBtbWNfc2V0X2RydmRhdGEsIGFuZCBrZWVwcworCSAqIHdpdGggbW1jX2NhcmQgd2l0aCBkZXZfc2V0X2RydmRhdGEsIGFuZCBrZWVwcwogCSAqIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGVkIGRldmljZSBwYXJ0aXRpb24uCiAJICovCiAJdW5zaWduZWQgaW50CXBhcnRfY3VycjsKQEAgLTI2MCw3ICsyNjMsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IG1tY19ibGtfZGF0YSAqbWQgPSBtbWNfYmxrX2dldChkZXZfdG9fZGlzayhkZXYpKTsKIAotCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWQiLAorCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCiAJCSAgICAgICBnZXRfZGlza19ybyhkZXZfdG9fZGlzayhkZXYpKSBeCiAJCSAgICAgICBtZC0+cmVhZF9vbmx5KTsKIAltbWNfYmxrX3B1dChtZCk7CkBAIC02NDIsNyArNjQ1LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1haW5fbWQgPSBtbWNfZ2V0X2RydmRhdGEoY2FyZCk7CisJc3RydWN0IG1tY19ibGtfZGF0YSAqbWFpbl9tZCA9IGRldl9nZXRfZHJ2ZGF0YSgmY2FyZC0+ZGV2KTsKIAogCWlmIChtYWluX21kLT5wYXJ0X2N1cnIgPT0gbWQtPnBhcnRfdHlwZSkKIAkJcmV0dXJuIDA7CkBAIC0xMDA0LDcgKzEwMDcsOCBAQAogCWVyciA9IG1tY19od19yZXNldChob3N0KTsKIAkvKiBFbnN1cmUgd2Ugc3dpdGNoIGJhY2sgdG8gdGhlIGNvcnJlY3QgcGFydGl0aW9uICovCiAJaWYgKGVyciAhPSAtRU9QTk9UU1VQUCkgewotCQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptYWluX21kID0gbW1jX2dldF9kcnZkYXRhKGhvc3QtPmNhcmQpOworCQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptYWluX21kID0KKwkJCWRldl9nZXRfZHJ2ZGF0YSgmaG9zdC0+Y2FyZC0+ZGV2KTsKIAkJaW50IHBhcnRfZXJyOwogCiAJCW1haW5fbWQtPnBhcnRfY3VyciA9IG1haW5fbWQtPnBhcnRfdHlwZTsKQEAgLTEzMDgsMTkgKzEzMTIsMTEgQEAKIAl9CiAKIAlpZiAoc3RhdHVzICYgUjFfRVhDRVBUSU9OX0VWRU5UKSB7Ci0JCWV4dF9jc2QgPSBremFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZXh0X2NzZCkgewotCQkJcHJfZXJyKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZXh0X2NzZFxuIiwKLQkJCSAgICAgICByZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCWVyciA9IG1tY19zZW5kX2V4dF9jc2QoY2FyZCwgZXh0X2NzZCk7CisJCWVyciA9IG1tY19nZXRfZXh0X2NzZChjYXJkLCAmZXh0X2NzZCk7CiAJCWlmIChlcnIpIHsKIAkJCXByX2VycigiJXM6IGVycm9yICVkIHNlbmRpbmcgZXh0X2NzZFxuIiwKIAkJCSAgICAgICByZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSwgZXJyKTsKLQkJCWNoZWNrID0gTU1DX0JMS19BQk9SVDsKLQkJCWdvdG8gZnJlZTsKKwkJCXJldHVybiBNTUNfQkxLX0FCT1JUOwogCQl9CiAKIAkJaWYgKChleHRfY3NkW0VYVF9DU0RfRVhQX0VWRU5UU19TVEFUVVNdICYKQEAgLTEzMzgsNyArMTMzNCw2IEBACiAJCQkgICAgICAgcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUsIHBhY2tlZC0+bnJfZW50cmllcywKIAkJCSAgICAgICBwYWNrZWQtPmJsb2NrcywgcGFja2VkLT5pZHhfZmFpbHVyZSk7CiAJCX0KLWZyZWU6CiAJCWtmcmVlKGV4dF9jc2QpOwogCX0KIApAQCAtMjA5Myw3ICsyMDg4LDcgQEAKIAogCS8qCiAJICogIXN1Ym5hbWUgaW1wbGllcyB3ZSBhcmUgY3JlYXRpbmcgbWFpbiBtbWNfYmxrX2RhdGEgdGhhdCB3aWxsIGJlCi0JICogYXNzb2NpYXRlZCB3aXRoIG1tY19jYXJkIHdpdGggbW1jX3NldF9kcnZkYXRhLiBEdWUgdG8gZGV2aWNlCisJICogYXNzb2NpYXRlZCB3aXRoIG1tY19jYXJkIHdpdGggZGV2X3NldF9kcnZkYXRhLiBEdWUgdG8gZGV2aWNlCiAJICogcGFydGl0aW9ucywgZGV2aWR4IHdpbGwgbm90IGNvaW5jaWRlIHdpdGggYSBwZXItcGh5c2ljYWwgY2FyZAogCSAqIGluZGV4IGFueW1vcmUgc28gd2Uga2VlcCB0cmFjayBvZiBhIG5hbWUgaW5kZXguCiAJICovCkBAIC0yNDI1LDggKzI0MjAsOSBAQAogCUVORF9GSVhVUAogfTsKIAotc3RhdGljIGludCBtbWNfYmxrX3Byb2JlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyBpbnQgbW1jX2Jsa19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7CiAJc3RydWN0IG1tY19ibGtfZGF0YSAqbWQsICpwYXJ0X21kOwogCWNoYXIgY2FwX3N0clsxMF07CiAKQEAgLTI0NTEsNyArMjQ0Nyw3IEBACiAJaWYgKG1tY19ibGtfYWxsb2NfcGFydHMoY2FyZCwgbWQpKQogCQlnb3RvIG91dDsKIAotCW1tY19zZXRfZHJ2ZGF0YShjYXJkLCBtZCk7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgbWQpOwogCiAJaWYgKG1tY19hZGRfZGlzayhtZCkpCiAJCWdvdG8gb3V0OwpAQCAtMjQ4MSw5ICsyNDc3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1tY19ibGtfcmVtb3ZlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyBpbnQgbW1jX2Jsa19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gbW1jX2dldF9kcnZkYXRhKGNhcmQpOworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOworCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAltbWNfYmxrX3JlbW92ZV9wYXJ0cyhjYXJkLCBtZCk7CiAJcG1fcnVudGltZV9nZXRfc3luYygmY2FyZC0+ZGV2KTsKQEAgLTI0OTQsMTMgKzI0OTEsMTUgQEAKIAkJcG1fcnVudGltZV9kaXNhYmxlKCZjYXJkLT5kZXYpOwogCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmY2FyZC0+ZGV2KTsKIAltbWNfYmxrX3JlbW92ZV9yZXEobWQpOwotCW1tY19zZXRfZHJ2ZGF0YShjYXJkLCBOVUxMKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9tbWNfYmxrX3N1c3BlbmQoc3RydWN0IG1tY19jYXJkICpjYXJkKQorc3RhdGljIGludCBfbW1jX2Jsa19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbW1jX2Jsa19kYXRhICpwYXJ0X21kOwotCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gbW1jX2dldF9kcnZkYXRhKGNhcmQpOworCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobWQpIHsKIAkJbW1jX3F1ZXVlX3N1c3BlbmQoJm1kLT5xdWV1ZSk7CkBAIC0yNTExLDIxICsyNTEwLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1tY19ibGtfc2h1dGRvd24oc3RydWN0IG1tY19jYXJkICpjYXJkKQorc3RhdGljIHZvaWQgbW1jX2Jsa19zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JX21tY19ibGtfc3VzcGVuZChjYXJkKTsKKwlfbW1jX2Jsa19zdXNwZW5kKGRldik7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgbW1jX2Jsa19zdXNwZW5kKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgbW1jX2Jsa19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gX21tY19ibGtfc3VzcGVuZChjYXJkKTsKKwlyZXR1cm4gX21tY19ibGtfc3VzcGVuZChkZXYpOwogfQogCi1zdGF0aWMgaW50IG1tY19ibGtfcmVzdW1lKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyBpbnQgbW1jX2Jsa19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtbWNfYmxrX2RhdGEgKnBhcnRfbWQ7Ci0Jc3RydWN0IG1tY19ibGtfZGF0YSAqbWQgPSBtbWNfZ2V0X2RydmRhdGEoY2FyZCk7CisJc3RydWN0IG1tY19ibGtfZGF0YSAqbWQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChtZCkgewogCQkvKgpAQCAtMjU0MCwxOSArMjUzOSwxNSBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lCW1tY19ibGtfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIG1tY19ibGtfcmVzdW1lCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IG1tY19kcml2ZXIgbW1jX2RyaXZlciA9IHsKLQkuZHJ2CQk9IHsKLQkJLm5hbWUJPSAibW1jYmxrIiwKLQl9LAorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG1tY19ibGtfcG1fb3BzLCBtbWNfYmxrX3N1c3BlbmQsIG1tY19ibGtfcmVzdW1lKTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1tY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gIm1tY2JsayIsCisJLnBtCQk9ICZtbWNfYmxrX3BtX29wcywKIAkucHJvYmUJCT0gbW1jX2Jsa19wcm9iZSwKIAkucmVtb3ZlCQk9IG1tY19ibGtfcmVtb3ZlLAotCS5zdXNwZW5kCT0gbW1jX2Jsa19zdXNwZW5kLAotCS5yZXN1bWUJCT0gbW1jX2Jsa19yZXN1bWUsCiAJLnNodXRkb3duCT0gbW1jX2Jsa19zaHV0ZG93biwKIH07CiAKQEAgLTI1NjMsNyArMjU1OCw3IEBACiAJaWYgKHBlcmRldl9taW5vcnMgIT0gQ09ORklHX01NQ19CTE9DS19NSU5PUlMpCiAJCXByX2luZm8oIm1tY2JsazogdXNpbmcgJWQgbWlub3JzIHBlciBkZXZpY2VcbiIsIHBlcmRldl9taW5vcnMpOwogCi0JbWF4X2RldmljZXMgPSAyNTYgLyBwZXJkZXZfbWlub3JzOworCW1heF9kZXZpY2VzID0gbWluKE1BWF9ERVZJQ0VTLCAoMSA8PCBNSU5PUkJJVFMpIC8gcGVyZGV2X21pbm9ycyk7CiAKIAlyZXMgPSByZWdpc3Rlcl9ibGtkZXYoTU1DX0JMT0NLX01BSk9SLCAibW1jIik7CiAJaWYgKHJlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYyBiL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYwppbmRleCAwYzBmYzUyLi4wYTc0MzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CQkvKiBGb3IgbnJfZnJlZV9idWZmZXJfcGFnZXMoKSAqLwpAQCAtMzIsNiArMzMsOCBAQAogI2RlZmluZSBCVUZGRVJfT1JERVIJCTIKICNkZWZpbmUgQlVGRkVSX1NJWkUJCShQQUdFX1NJWkUgPDwgQlVGRkVSX09SREVSKQogCisjZGVmaW5lIFRFU1RfQUxJR05fRU5ECQk4CisKIC8qCiAgKiBMaW1pdCB0aGUgdGVzdCBhcmVhIHNpemUgdG8gdGhlIG1heGltdW0gTU1DIEhDIGVyYXNlIGdyb3VwIHNpemUuICBOb3RlIHRoYXQKICAqIHRoZSBtYXhpbXVtIFNEIGFsbG9jYXRpb24gdW5pdCBzaXplIGlzIGp1c3QgNE1pQi4KQEAgLTExNzQsNyArMTE3Nyw3IEBACiAJaW50IHJldCwgaTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAKLQlmb3IgKGkgPSAxO2kgPCA0O2krKykgeworCWZvciAoaSA9IDE7IGkgPCBURVNUX0FMSUdOX0VORDsgaSsrKSB7CiAJCXNnX2luaXRfb25lKCZzZywgdGVzdC0+YnVmZmVyICsgaSwgNTEyKTsKIAkJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCAxLCA1MTIsIDEpOwogCQlpZiAocmV0KQpAQCAtMTE4OSw3ICsxMTkyLDcgQEAKIAlpbnQgcmV0LCBpOwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKIAotCWZvciAoaSA9IDE7aSA8IDQ7aSsrKSB7CisJZm9yIChpID0gMTsgaSA8IFRFU1RfQUxJR05fRU5EOyBpKyspIHsKIAkJc2dfaW5pdF9vbmUoJnNnLCB0ZXN0LT5idWZmZXIgKyBpLCA1MTIpOwogCQlyZXQgPSBtbWNfdGVzdF90cmFuc2Zlcih0ZXN0LCAmc2csIDEsIDAsIDEsIDUxMiwgMCk7CiAJCWlmIChyZXQpCkBAIC0xMjE2LDcgKzEyMTksNyBAQAogCWlmIChzaXplIDwgMTAyNCkKIAkJcmV0dXJuIFJFU1VMVF9VTlNVUF9IT1NUOwogCi0JZm9yIChpID0gMTtpIDwgNDtpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgVEVTVF9BTElHTl9FTkQ7IGkrKykgewogCQlzZ19pbml0X29uZSgmc2csIHRlc3QtPmJ1ZmZlciArIGksIHNpemUpOwogCQlyZXQgPSBtbWNfdGVzdF90cmFuc2Zlcih0ZXN0LCAmc2csIDEsIDAsIHNpemUvNTEyLCA1MTIsIDEpOwogCQlpZiAocmV0KQpAQCAtMTI0Myw3ICsxMjQ2LDcgQEAKIAlpZiAoc2l6ZSA8IDEwMjQpCiAJCXJldHVybiBSRVNVTFRfVU5TVVBfSE9TVDsKIAotCWZvciAoaSA9IDE7aSA8IDQ7aSsrKSB7CisJZm9yIChpID0gMTsgaSA8IFRFU1RfQUxJR05fRU5EOyBpKyspIHsKIAkJc2dfaW5pdF9vbmUoJnNnLCB0ZXN0LT5idWZmZXIgKyBpLCBzaXplKTsKIAkJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCBzaXplLzUxMiwgNTEyLCAwKTsKIAkJaWYgKHJldCkKQEAgLTI5OTcsOCArMzAwMCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtbWNfdGVzdF9wcm9iZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCitzdGF0aWMgaW50IG1tY190ZXN0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKIAlpbnQgcmV0OwogCiAJaWYgKCFtbWNfY2FyZF9tbWMoY2FyZCkgJiYgIW1tY19jYXJkX3NkKGNhcmQpKQpAQCAtMzAxMywyMCArMzAxNywyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtbWNfdGVzdF9yZW1vdmUoc3RydWN0IG1tY19jYXJkICpjYXJkKQorc3RhdGljIGludCBtbWNfdGVzdF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOworCiAJbW1jX3Rlc3RfZnJlZV9yZXN1bHQoY2FyZCk7CiAJbW1jX3Rlc3RfZnJlZV9kYmdmc19maWxlKGNhcmQpOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1tY190ZXN0X3NodXRkb3duKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyB2b2lkIG1tY190ZXN0X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBtbWNfZHJpdmVyIG1tY19kcml2ZXIgPSB7Ci0JLmRydgkJPSB7Ci0JCS5uYW1lCT0gIm1tY190ZXN0IiwKLQl9LAorc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1tY19kcml2ZXIgPSB7CisJLm5hbWUJPSAibW1jX3Rlc3QiLAogCS5wcm9iZQkJPSBtbWNfdGVzdF9wcm9iZSwKIAkucmVtb3ZlCQk9IG1tY190ZXN0X3JlbW92ZSwKIAkuc2h1dGRvd24JPSBtbWNfdGVzdF9zaHV0ZG93biwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwppbmRleCBjZmE2MTEwLi4yMzZkMTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCkBAIC0yMzIsMTMgKzIzMiwxNSBAQAogCQkJaWYgKCFtcXJxX2N1ci0+Ym91bmNlX2J1ZikgewogCQkJCXByX3dhcm4oIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgYm91bmNlIGN1ciBidWZmZXJcbiIsCiAJCQkJCW1tY19jYXJkX25hbWUoY2FyZCkpOwotCQkJfQotCQkJbXFycV9wcmV2LT5ib3VuY2VfYnVmID0ga21hbGxvYyhib3VuY2VzeiwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIW1xcnFfcHJldi0+Ym91bmNlX2J1ZikgewotCQkJCXByX3dhcm4oIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgYm91bmNlIHByZXYgYnVmZmVyXG4iLAotCQkJCQltbWNfY2FyZF9uYW1lKGNhcmQpKTsKLQkJCQlrZnJlZShtcXJxX2N1ci0+Ym91bmNlX2J1Zik7Ci0JCQkJbXFycV9jdXItPmJvdW5jZV9idWYgPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQltcXJxX3ByZXYtPmJvdW5jZV9idWYgPQorCQkJCQkJa21hbGxvYyhib3VuY2VzeiwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFtcXJxX3ByZXYtPmJvdW5jZV9idWYpIHsKKwkJCQkJcHJfd2FybigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBib3VuY2UgcHJldiBidWZmZXJcbiIsCisJCQkJCQltbWNfY2FyZF9uYW1lKGNhcmQpKTsKKwkJCQkJa2ZyZWUobXFycV9jdXItPmJvdW5jZV9idWYpOworCQkJCQltcXJxX2N1ci0+Ym91bmNlX2J1ZiA9IE5VTEw7CisJCQkJfQogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCmluZGV4IDhhMWYxMjQuLjVjYTU2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwpAQCAtMjUsOCArMjUsNiBAQAogI2luY2x1ZGUgInNkaW9fY2lzLmgiCiAjaW5jbHVkZSAiYnVzLmgiCiAKLSNkZWZpbmUgdG9fbW1jX2RyaXZlcihkKQljb250YWluZXJfb2YoZCwgc3RydWN0IG1tY19kcml2ZXIsIGRydikKLQogc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMTA2LDMzICsxMDQsMTQgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IG1tY19idXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBtbWNfZHJpdmVyICpkcnYgPSB0b19tbWNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKLQotCXJldHVybiBkcnYtPnByb2JlKGNhcmQpOwotfQotCi1zdGF0aWMgaW50IG1tY19idXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbW1jX2RyaXZlciAqZHJ2ID0gdG9fbW1jX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0Jc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7Ci0KLQlkcnYtPnJlbW92ZShjYXJkKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBtbWNfYnVzX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2RyaXZlciAqZHJ2ID0gdG9fbW1jX2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7CiAJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gY2FyZC0+aG9zdDsKIAlpbnQgcmV0OwogCi0JaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+c2h1dGRvd24pCi0JCWRydi0+c2h1dGRvd24oY2FyZCk7CisJaWYgKGRldi0+ZHJpdmVyICYmIGRldi0+ZHJpdmVyLT5zaHV0ZG93bikKKwkJZGV2LT5kcml2ZXItPnNodXRkb3duKGRldik7CiAKIAlpZiAoaG9zdC0+YnVzX29wcy0+c2h1dGRvd24pIHsKIAkJcmV0ID0gaG9zdC0+YnVzX29wcy0+c2h1dGRvd24oaG9zdCk7CkBAIC0xNDUsMTYgKzEyNCwxMyBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBtbWNfYnVzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfZHJpdmVyICpkcnYgPSB0b19tbWNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OwogCWludCByZXQ7CiAKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5zdXNwZW5kKSB7Ci0JCXJldCA9IGRydi0+c3VzcGVuZChjYXJkKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQorCXJldCA9IHBtX2dlbmVyaWNfc3VzcGVuZChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBob3N0LT5idXNfb3BzLT5zdXNwZW5kKGhvc3QpOwogCXJldHVybiByZXQ7CkBAIC0xNjIsNyArMTM4LDYgQEAKIAogc3RhdGljIGludCBtbWNfYnVzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19kcml2ZXIgKmRydiA9IHRvX21tY19kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOwogCXN0cnVjdCBtbWNfaG9zdCAqaG9zdCA9IGNhcmQtPmhvc3Q7CiAJaW50IHJldDsKQEAgLTE3Miw5ICsxNDcsNyBAQAogCQlwcl93YXJuKCIlczogZXJyb3IgJWQgZHVyaW5nIHJlc3VtZSAoY2FyZCB3YXMgcmVtb3ZlZD8pXG4iLAogCQkJbW1jX2hvc3RuYW1lKGhvc3QpLCByZXQpOwogCi0JaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+cmVzdW1lKQotCQlyZXQgPSBkcnYtPnJlc3VtZShjYXJkKTsKLQorCXJldCA9IHBtX2dlbmVyaWNfcmVzdW1lKGRldik7CiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZgpAQCAtMjA3LDggKzE4MCw2IEBACiAJLmRldl9ncm91cHMJPSBtbWNfZGV2X2dyb3VwcywKIAkubWF0Y2gJCT0gbW1jX2J1c19tYXRjaCwKIAkudWV2ZW50CQk9IG1tY19idXNfdWV2ZW50LAotCS5wcm9iZQkJPSBtbWNfYnVzX3Byb2JlLAotCS5yZW1vdmUJCT0gbW1jX2J1c19yZW1vdmUsCiAJLnNodXRkb3duCT0gbW1jX2J1c19zaHV0ZG93biwKIAkucG0JCT0gJm1tY19idXNfcG1fb3BzLAogfTsKQEAgLTIyNywyNCArMTk4LDIyIEBACiAgKgltbWNfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBtZWRpYSBkcml2ZXIKICAqCUBkcnY6IE1NQyBtZWRpYSBkcml2ZXIKICAqLwotaW50IG1tY19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1tY19kcml2ZXIgKmRydikKK2ludCBtbWNfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7Ci0JZHJ2LT5kcnYuYnVzID0gJm1tY19idXNfdHlwZTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRydik7CisJZHJ2LT5idXMgPSAmbW1jX2J1c190eXBlOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoZHJ2KTsKIH0KLQogRVhQT1JUX1NZTUJPTChtbWNfcmVnaXN0ZXJfZHJpdmVyKTsKIAogLyoqCiAgKgltbWNfdW5yZWdpc3Rlcl9kcml2ZXIgLSB1bnJlZ2lzdGVyIGEgbWVkaWEgZHJpdmVyCiAgKglAZHJ2OiBNTUMgbWVkaWEgZHJpdmVyCiAgKi8KLXZvaWQgbW1jX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtbWNfZHJpdmVyICpkcnYpCit2b2lkIG1tY191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCWRydi0+ZHJ2LmJ1cyA9ICZtbWNfYnVzX3R5cGU7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJ2KTsKKwlkcnYtPmJ1cyA9ICZtbWNfYnVzX3R5cGU7CisJZHJpdmVyX3VucmVnaXN0ZXIoZHJ2KTsKIH0KLQogRVhQT1JUX1NZTUJPTChtbWNfdW5yZWdpc3Rlcl9kcml2ZXIpOwogCiBzdGF0aWMgdm9pZCBtbWNfcmVsZWFzZV9jYXJkKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKaW5kZXggZjI2YTVmMS4uOTU4NGJmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKQEAgLTE0OSw2ICsxNDksMTQgQEAKIAogCQlsZWRfdHJpZ2dlcl9ldmVudChob3N0LT5sZWQsIExFRF9PRkYpOwogCisJCWlmIChtcnEtPnNiYykgeworCQkJcHJfZGVidWcoIiVzOiByZXEgZG9uZSA8Q01EJXU+OiAlZDogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKKwkJCQltbWNfaG9zdG5hbWUoaG9zdCksIG1ycS0+c2JjLT5vcGNvZGUsCisJCQkJbXJxLT5zYmMtPmVycm9yLAorCQkJCW1ycS0+c2JjLT5yZXNwWzBdLCBtcnEtPnNiYy0+cmVzcFsxXSwKKwkJCQltcnEtPnNiYy0+cmVzcFsyXSwgbXJxLT5zYmMtPnJlc3BbM10pOworCQl9CisKIAkJcHJfZGVidWcoIiVzOiByZXEgZG9uZSAoQ01EJXUpOiAlZDogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0KSwgY21kLT5vcGNvZGUsIGVyciwKIAkJCWNtZC0+cmVzcFswXSwgY21kLT5yZXNwWzFdLApAQCAtMjE0LDYgKzIyMiwxMCBAQAogCiAJbXJxLT5jbWQtPmVycm9yID0gMDsKIAltcnEtPmNtZC0+bXJxID0gbXJxOworCWlmIChtcnEtPnNiYykgeworCQltcnEtPnNiYy0+ZXJyb3IgPSAwOworCQltcnEtPnNiYy0+bXJxID0gbXJxOworCX0KIAlpZiAobXJxLT5kYXRhKSB7CiAJCUJVR19PTihtcnEtPmRhdGEtPmJsa3N6ID4gaG9zdC0+bWF4X2Jsa19zaXplKTsKIAkJQlVHX09OKG1ycS0+ZGF0YS0+YmxvY2tzID4gaG9zdC0+bWF4X2Jsa19jb3VudCk7CkBAIC01MzgsOCArNTUwLDE4IEBACiAJCWlmIChob3N0LT5jYXJkICYmIG1tY19jYXJkX21tYyhob3N0LT5jYXJkKSAmJgogCQkgICAgKChtbWNfcmVzcF90eXBlKGhvc3QtPmFyZXEtPm1ycS0+Y21kKSA9PSBNTUNfUlNQX1IxKSB8fAogCQkgICAgIChtbWNfcmVzcF90eXBlKGhvc3QtPmFyZXEtPm1ycS0+Y21kKSA9PSBNTUNfUlNQX1IxQikpICYmCi0JCSAgICAoaG9zdC0+YXJlcS0+bXJxLT5jbWQtPnJlc3BbMF0gJiBSMV9FWENFUFRJT05fRVZFTlQpKQorCQkgICAgKGhvc3QtPmFyZXEtPm1ycS0+Y21kLT5yZXNwWzBdICYgUjFfRVhDRVBUSU9OX0VWRU5UKSkgeworCisJCQkvKiBDYW5jZWwgdGhlIHByZXBhcmVkIHJlcXVlc3QgKi8KKwkJCWlmIChhcmVxKQorCQkJCW1tY19wb3N0X3JlcShob3N0LCBhcmVxLT5tcnEsIC1FSU5WQUwpOworCiAJCQltbWNfc3RhcnRfYmtvcHMoaG9zdC0+Y2FyZCwgdHJ1ZSk7CisKKwkJCS8qIHByZXBhcmUgdGhlIHJlcXVlc3QgYWdhaW4gKi8KKwkJCWlmIChhcmVxKQorCQkJCW1tY19wcmVfcmVxKGhvc3QsIGFyZXEtPm1ycSwgIWhvc3QtPmFyZXEpOworCQl9CiAJfQogCiAJaWYgKCFlcnIgJiYgYXJlcSkKQEAgLTcwOSwyNyArNzMxLDE2IEBACiAJaW50IGVycjsKIAl1OCAqZXh0X2NzZDsKIAotCS8qCi0JICogSW4gZnV0dXJlIHdvcmssIHdlIHNob3VsZCBjb25zaWRlciBzdG9yaW5nIHRoZSBlbnRpcmUgZXh0X2NzZC4KLQkgKi8KLQlleHRfY3NkID0ga21hbGxvYyg1MTIsIEdGUF9LRVJORUwpOwotCWlmICghZXh0X2NzZCkgewotCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGV4dF9jc2QuXG4iLAotCQkgICAgICAgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJbW1jX2NsYWltX2hvc3QoY2FyZC0+aG9zdCk7Ci0JZXJyID0gbW1jX3NlbmRfZXh0X2NzZChjYXJkLCBleHRfY3NkKTsKKwllcnIgPSBtbWNfZ2V0X2V4dF9jc2QoY2FyZCwgJmV4dF9jc2QpOwogCW1tY19yZWxlYXNlX2hvc3QoY2FyZC0+aG9zdCk7CiAJaWYgKGVycikKLQkJZ290byBvdXQ7CisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5leHRfY3NkLnJhd19ia29wc19zdGF0dXMgPSBleHRfY3NkW0VYVF9DU0RfQktPUFNfU1RBVFVTXTsKIAljYXJkLT5leHRfY3NkLnJhd19leGNlcHRpb25fc3RhdHVzID0gZXh0X2NzZFtFWFRfQ1NEX0VYUF9FVkVOVFNfU1RBVFVTXTsKLW91dDoKIAlrZnJlZShleHRfY3NkKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChtbWNfcmVhZF9ia29wc19zdGF0dXMpOwogCkBAIC0xMDg4LDYgKzEwOTksMjIgQEAKIAltbWNfaG9zdF9jbGtfcmVsZWFzZShob3N0KTsKIH0KIAorLyoKKyAqIFNldCBpbml0aWFsIHN0YXRlIGFmdGVyIGEgcG93ZXIgY3ljbGUgb3IgYSBod19yZXNldC4KKyAqLwordm9pZCBtbWNfc2V0X2luaXRpYWxfc3RhdGUoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCWlmIChtbWNfaG9zdF9pc19zcGkoaG9zdCkpCisJCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ISUdIOworCWVsc2UKKwkJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gTU1DX0NTX0RPTlRDQVJFOworCWhvc3QtPmlvcy5idXNfbW9kZSA9IE1NQ19CVVNNT0RFX1BVU0hQVUxMOworCWhvc3QtPmlvcy5idXNfd2lkdGggPSBNTUNfQlVTX1dJRFRIXzE7CisJaG9zdC0+aW9zLnRpbWluZyA9IE1NQ19USU1JTkdfTEVHQUNZOworCisJbW1jX3NldF9pb3MoaG9zdCk7Cit9CisKIC8qKgogICogbW1jX3ZkZF90b19vY3JiaXRudW0gLSBDb252ZXJ0IGEgdm9sdGFnZSB0byB0aGUgT0NSIGJpdCBudW1iZXIKICAqIEB2ZGQ6CXZvbHRhZ2UgKG1WKQpAQCAtMTQyMCwxOCArMTQ0NywyMCBAQAogCQlwcl93YXJuKCIlczogY2Fubm90IHZlcmlmeSBzaWduYWwgdm9sdGFnZSBzd2l0Y2hcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdCkpOwogCisJbW1jX2hvc3RfY2xrX2hvbGQoaG9zdCk7CisKIAljbWQub3Bjb2RlID0gU0RfU1dJVENIX1ZPTFRBR0U7CiAJY21kLmFyZyA9IDA7CiAJY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQUM7CiAKIAllcnIgPSBtbWNfd2FpdF9mb3JfY21kKGhvc3QsICZjbWQsIDApOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX2NvbW1hbmQ7CiAKLQlpZiAoIW1tY19ob3N0X2lzX3NwaShob3N0KSAmJiAoY21kLnJlc3BbMF0gJiBSMV9FUlJPUikpCi0JCXJldHVybiAtRUlPOwotCi0JbW1jX2hvc3RfY2xrX2hvbGQoaG9zdCk7CisJaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkgJiYgKGNtZC5yZXNwWzBdICYgUjFfRVJST1IpKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX2NvbW1hbmQ7CisJfQogCS8qCiAJICogVGhlIGNhcmQgc2hvdWxkIGRyaXZlIGNtZCBhbmQgZGF0WzA6M10gbG93IGltbWVkaWF0ZWx5CiAJICogYWZ0ZXIgdGhlIHJlc3BvbnNlIG9mIGNtZDExLCBidXQgd2FpdCAxIG1zIHRvIGJlIHN1cmUKQEAgLTE0ODAsNiArMTUwOSw3IEBACiAJCW1tY19wb3dlcl9jeWNsZShob3N0LCBvY3IpOwogCX0KIAorZXJyX2NvbW1hbmQ6CiAJbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTUyNiwxNSArMTU1Niw5IEBACiAJbW1jX2hvc3RfY2xrX2hvbGQoaG9zdCk7CiAKIAlob3N0LT5pb3MudmRkID0gZmxzKG9jcikgLSAxOwotCWlmIChtbWNfaG9zdF9pc19zcGkoaG9zdCkpCi0JCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ISUdIOwotCWVsc2UKLQkJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gTU1DX0NTX0RPTlRDQVJFOwotCWhvc3QtPmlvcy5idXNfbW9kZSA9IE1NQ19CVVNNT0RFX1BVU0hQVUxMOwogCWhvc3QtPmlvcy5wb3dlcl9tb2RlID0gTU1DX1BPV0VSX1VQOwotCWhvc3QtPmlvcy5idXNfd2lkdGggPSBNTUNfQlVTX1dJRFRIXzE7Ci0JaG9zdC0+aW9zLnRpbWluZyA9IE1NQ19USU1JTkdfTEVHQUNZOwotCW1tY19zZXRfaW9zKGhvc3QpOworCS8qIFNldCBpbml0aWFsIHN0YXRlIGFuZCBjYWxsIG1tY19zZXRfaW9zICovCisJbW1jX3NldF9pbml0aWFsX3N0YXRlKGhvc3QpOwogCiAJLyogVHJ5IHRvIHNldCBzaWduYWwgdm9sdGFnZSB0byAzLjNWIGJ1dCBmYWxsIGJhY2sgdG8gMS44diBvciAxLjJ2ICovCiAJaWYgKF9fbW1jX3NldF9zaWduYWxfdm9sdGFnZShob3N0LCBNTUNfU0lHTkFMX1ZPTFRBR0VfMzMwKSA9PSAwKQpAQCAtMTU3NCwxNCArMTU5OCw5IEBACiAJaG9zdC0+aW9zLmNsb2NrID0gMDsKIAlob3N0LT5pb3MudmRkID0gMDsKIAotCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7Ci0JCWhvc3QtPmlvcy5idXNfbW9kZSA9IE1NQ19CVVNNT0RFX09QRU5EUkFJTjsKLQkJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gTU1DX0NTX0RPTlRDQVJFOwotCX0KIAlob3N0LT5pb3MucG93ZXJfbW9kZSA9IE1NQ19QT1dFUl9PRkY7Ci0JaG9zdC0+aW9zLmJ1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfMTsKLQlob3N0LT5pb3MudGltaW5nID0gTU1DX1RJTUlOR19MRUdBQ1k7Ci0JbW1jX3NldF9pb3MoaG9zdCk7CisJLyogU2V0IGluaXRpYWwgc3RhdGUgYW5kIGNhbGwgbW1jX3NldF9pb3MgKi8KKwltbWNfc2V0X2luaXRpYWxfc3RhdGUoaG9zdCk7CiAKIAkvKgogCSAqIFNvbWUgY29uZmlndXJhdGlvbnMsIHN1Y2ggYXMgdGhlIDgwMi4xMSBTRElPIGNhcmQgaW4gdGhlIE9MUEMKQEAgLTIyNTksMzAgKzIyNzgsMTYgQEAKIAogCS8qIElmIHRoZSByZXNldCBoYXMgaGFwcGVuZWQsIHRoZW4gYSBzdGF0dXMgY29tbWFuZCB3aWxsIGZhaWwgKi8KIAlpZiAoY2hlY2spIHsKLQkJc3RydWN0IG1tY19jb21tYW5kIGNtZCA9IHswfTsKLQkJaW50IGVycjsKKwkJdTMyIHN0YXR1czsKIAotCQljbWQub3Bjb2RlID0gTU1DX1NFTkRfU1RBVFVTOwotCQlpZiAoIW1tY19ob3N0X2lzX3NwaShjYXJkLT5ob3N0KSkKLQkJCWNtZC5hcmcgPSBjYXJkLT5yY2EgPDwgMTY7Ci0JCWNtZC5mbGFncyA9IE1NQ19SU1BfU1BJX1IyIHwgTU1DX1JTUF9SMSB8IE1NQ19DTURfQUM7Ci0JCWVyciA9IG1tY193YWl0X2Zvcl9jbWQoY2FyZC0+aG9zdCwgJmNtZCwgMCk7Ci0JCWlmICghZXJyKSB7CisJCWlmICghbW1jX3NlbmRfc3RhdHVzKGNhcmQsICZzdGF0dXMpKSB7CiAJCQltbWNfaG9zdF9jbGtfcmVsZWFzZShob3N0KTsKIAkJCXJldHVybiAtRU5PU1lTOwogCQl9CiAJfQogCi0JaWYgKG1tY19ob3N0X2lzX3NwaShob3N0KSkgewotCQlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfSElHSDsKLQkJaG9zdC0+aW9zLmJ1c19tb2RlID0gTU1DX0JVU01PREVfUFVTSFBVTEw7Ci0JfSBlbHNlIHsKLQkJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gTU1DX0NTX0RPTlRDQVJFOwotCQlob3N0LT5pb3MuYnVzX21vZGUgPSBNTUNfQlVTTU9ERV9PUEVORFJBSU47Ci0JfQotCWhvc3QtPmlvcy5idXNfd2lkdGggPSBNTUNfQlVTX1dJRFRIXzE7Ci0JaG9zdC0+aW9zLnRpbWluZyA9IE1NQ19USU1JTkdfTEVHQUNZOwotCW1tY19zZXRfaW9zKGhvc3QpOworCS8qIFNldCBpbml0aWFsIHN0YXRlIGFuZCBjYWxsIG1tY19zZXRfaW9zICovCisJbW1jX3NldF9pbml0aWFsX3N0YXRlKGhvc3QpOwogCiAJbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmgKaW5kZXggNDQzYTU4NC4uZDc2NTk3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmgKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKIHZvaWQgbW1jX3Bvd2VyX3VwKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jcik7CiB2b2lkIG1tY19wb3dlcl9vZmYoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIHZvaWQgbW1jX3Bvd2VyX2N5Y2xlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jcik7Cit2b2lkIG1tY19zZXRfaW5pdGlhbF9zdGF0ZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1jX2RlbGF5KHVuc2lnbmVkIGludCBtcykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKaW5kZXggOTFlYjE2Mi4uZTkxNDIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKQEAgLTI5MSwxNCArMjkxLDggQEAKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlleHRfY3NkID0ga21hbGxvYyg1MTIsIEdGUF9LRVJORUwpOwotCWlmICghZXh0X2NzZCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQogCW1tY19nZXRfY2FyZChjYXJkKTsKLQllcnIgPSBtbWNfc2VuZF9leHRfY3NkKGNhcmQsIGV4dF9jc2QpOworCWVyciA9IG1tY19nZXRfZXh0X2NzZChjYXJkLCAmZXh0X2NzZCk7CiAJbW1jX3B1dF9jYXJkKGNhcmQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0zMTQsNyArMzA4LDYgQEAKIAogb3V0X2ZyZWU6CiAJa2ZyZWUoYnVmKTsKLQlrZnJlZShleHRfY3NkKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2hvc3QuYyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCmluZGV4IDAzYzUzYjcuLjI3MGQ1OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCkBAIC0zMTEsNyArMzExLDggQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXUzMiBidXNfd2lkdGg7CiAJaW50IGxlbiwgcmV0OwotCWJvb2wgY2FwX2ludmVydCwgZ3Bpb19pbnZlcnQ7CisJYm9vbCBjZF9jYXBfaW52ZXJ0LCBjZF9ncGlvX2ludmVydCA9IGZhbHNlOworCWJvb2wgcm9fY2FwX2ludmVydCwgcm9fZ3Bpb19pbnZlcnQgPSBmYWxzZTsKIAogCWlmICghaG9zdC0+cGFyZW50IHx8ICFob3N0LT5wYXJlbnQtPm9mX25vZGUpCiAJCXJldHVybiAwOwpAQCAtMzU5LDE2ICszNjAsMTMgQEAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgIm5vbi1yZW1vdmFibGUiLCAmbGVuKSkgewogCQlob3N0LT5jYXBzIHw9IE1NQ19DQVBfTk9OUkVNT1ZBQkxFOwogCX0gZWxzZSB7Ci0JCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJjZC1pbnZlcnRlZCIpKQotCQkJY2FwX2ludmVydCA9IHRydWU7Ci0JCWVsc2UKLQkJCWNhcF9pbnZlcnQgPSBmYWxzZTsKKwkJY2RfY2FwX2ludmVydCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImNkLWludmVydGVkIik7CiAKIAkJaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJicm9rZW4tY2QiLCAmbGVuKSkKIAkJCWhvc3QtPmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOwogCiAJCXJldCA9IG1tY19ncGlvZF9yZXF1ZXN0X2NkKGhvc3QsICJjZCIsIDAsIHRydWUsCi0JCQkJCSAgIDAsICZncGlvX2ludmVydCk7CisJCQkJCSAgIDAsICZjZF9ncGlvX2ludmVydCk7CiAJCWlmIChyZXQpIHsKIAkJCWlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikKIAkJCQlyZXR1cm4gcmV0OwpAQCAtMzkxLDE3ICszODksMTQgQEAKIAkJICogYm90aCBpbnZlcnRlZCwgdGhlIGVuZCByZXN1bHQgaXMgdGhhdCB0aGUgQ0QgbGluZSBpcwogCQkgKiBub3QgaW52ZXJ0ZWQuCiAJCSAqLwotCQlpZiAoY2FwX2ludmVydCBeIGdwaW9faW52ZXJ0KQorCQlpZiAoY2RfY2FwX2ludmVydCBeIGNkX2dwaW9faW52ZXJ0KQogCQkJaG9zdC0+Y2FwczIgfD0gTU1DX0NBUDJfQ0RfQUNUSVZFX0hJR0g7CiAJfQogCiAJLyogUGFyc2UgV3JpdGUgUHJvdGVjdGlvbiAqLwotCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJ3cC1pbnZlcnRlZCIpKQotCQljYXBfaW52ZXJ0ID0gdHJ1ZTsKLQllbHNlCi0JCWNhcF9pbnZlcnQgPSBmYWxzZTsKKwlyb19jYXBfaW52ZXJ0ID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAid3AtaW52ZXJ0ZWQiKTsKIAotCXJldCA9IG1tY19ncGlvZF9yZXF1ZXN0X3JvKGhvc3QsICJ3cCIsIDAsIGZhbHNlLCAwLCAmZ3Bpb19pbnZlcnQpOworCXJldCA9IG1tY19ncGlvZF9yZXF1ZXN0X3JvKGhvc3QsICJ3cCIsIDAsIGZhbHNlLCAwLCAmcm9fZ3Bpb19pbnZlcnQpOwogCWlmIChyZXQpIHsKIAkJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKQogCQkJZ290byBvdXQ7CkBAIC00MTQsNyArNDA5LDcgQEAKIAkJZGV2X2luZm8oaG9zdC0+cGFyZW50LCAiR290IFdQIEdQSU9cbiIpOwogCiAJLyogU2VlIHRoZSBjb21tZW50IG9uIENEIGludmVyc2lvbiBhYm92ZSAqLwotCWlmIChjYXBfaW52ZXJ0IF4gZ3Bpb19pbnZlcnQpCisJaWYgKHJvX2NhcF9pbnZlcnQgXiByb19ncGlvX2ludmVydCkKIAkJaG9zdC0+Y2FwczIgfD0gTU1DX0NBUDJfUk9fQUNUSVZFX0hJR0g7CiAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgImNhcC1zZC1oaWdoc3BlZWQiLCAmbGVuKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IGEzMDFhNzguLjAyYWQ3OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtMTc3LDY1ICsxNzcsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogUmVhZCBleHRlbmRlZCBDU0QuCi0gKi8KLXN0YXRpYyBpbnQgbW1jX2dldF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKipuZXdfZXh0X2NzZCkKLXsKLQlpbnQgZXJyOwotCXU4ICpleHRfY3NkOwotCi0JQlVHX09OKCFjYXJkKTsKLQlCVUdfT04oIW5ld19leHRfY3NkKTsKLQotCSpuZXdfZXh0X2NzZCA9IE5VTEw7Ci0KLQlpZiAoY2FyZC0+Y3NkLm1tY2FfdnNuIDwgQ1NEX1NQRUNfVkVSXzQpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBBcyB0aGUgZXh0X2NzZCBpcyBzbyBsYXJnZSBhbmQgbW9zdGx5IHVudXNlZCwgd2UgZG9uJ3Qgc3RvcmUgdGhlCi0JICogcmF3IGJsb2NrIGluIG1tY19jYXJkLgotCSAqLwotCWV4dF9jc2QgPSBrbWFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFleHRfY3NkKSB7Ci0JCXByX2VycigiJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBhIGJ1ZmZlciB0byAiCi0JCQkicmVjZWl2ZSB0aGUgZXh0X2NzZC5cbiIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWVyciA9IG1tY19zZW5kX2V4dF9jc2QoY2FyZCwgZXh0X2NzZCk7Ci0JaWYgKGVycikgewotCQlrZnJlZShleHRfY3NkKTsKLQkJKm5ld19leHRfY3NkID0gTlVMTDsKLQotCQkvKiBJZiB0aGUgaG9zdCBvciB0aGUgY2FyZCBjYW4ndCBkbyB0aGUgc3dpdGNoLAotCQkgKiBmYWlsIG1vcmUgZ3JhY2VmdWxseS4gKi8KLQkJaWYgKChlcnIgIT0gLUVJTlZBTCkKLQkJICYmIChlcnIgIT0gLUVOT1NZUykKLQkJICYmIChlcnIgIT0gLUVGQVVMVCkpCi0JCQlyZXR1cm4gZXJyOwotCi0JCS8qCi0JCSAqIEhpZ2ggY2FwYWNpdHkgY2FyZHMgc2hvdWxkIGhhdmUgdGhpcyAibWFnaWMiIHNpemUKLQkJICogc3RvcmVkIGluIHRoZWlyIENTRC4KLQkJICovCi0JCWlmIChjYXJkLT5jc2QuY2FwYWNpdHkgPT0gKDQwOTYgKiA1MTIpKSB7Ci0JCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gcmVhZCBFWFRfQ1NEICIKLQkJCQkib24gYSBwb3NzaWJsZSBoaWdoIGNhcGFjaXR5IGNhcmQuICIKLQkJCQkiQ2FyZCB3aWxsIGJlIGlnbm9yZWQuXG4iLAotCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlwcl93YXJuKCIlczogdW5hYmxlIHRvIHJlYWQgRVhUX0NTRCwgcGVyZm9ybWFuY2UgbWlnaHQgc3VmZmVyXG4iLAotCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7Ci0JCQllcnIgPSAwOwotCQl9Ci0JfSBlbHNlCi0JCSpuZXdfZXh0X2NzZCA9IGV4dF9jc2Q7Ci0KLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgdm9pZCBtbWNfc2VsZWN0X2NhcmRfdHlwZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gY2FyZC0+aG9zdDsKQEAgLTM5MSwxNiArMzMyLDExIEBACiAvKgogICogRGVjb2RlIGV4dGVuZGVkIENTRC4KICAqLwotc3RhdGljIGludCBtbWNfcmVhZF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKmV4dF9jc2QpCitzdGF0aWMgaW50IG1tY19kZWNvZGVfZXh0X2NzZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHU4ICpleHRfY3NkKQogewogCWludCBlcnIgPSAwLCBpZHg7CiAJdW5zaWduZWQgaW50IHBhcnRfc2l6ZTsKIAotCUJVR19PTighY2FyZCk7Ci0KLQlpZiAoIWV4dF9jc2QpCi0JCXJldHVybiAwOwotCiAJLyogVmVyc2lvbiBpcyBjb2RlZCBpbiB0aGUgQ1NEX1NUUlVDVFVSRSBieXRlIGluIHRoZSBFWFRfQ1NEIHJlZ2lzdGVyICovCiAJY2FyZC0+ZXh0X2NzZC5yYXdfZXh0X2NzZF9zdHJ1Y3R1cmUgPSBleHRfY3NkW0VYVF9DU0RfU1RSVUNUVVJFXTsKIAlpZiAoY2FyZC0+Y3NkLnN0cnVjdHVyZSA9PSAzKSB7CkBAIC02MjgsMTUgKzU2NCw1NSBAQAogCQljYXJkLT5leHRfY3NkLmRhdGFfc2VjdG9yX3NpemUgPSA1MTI7CiAJfQogCisJLyogZU1NQyB2NSBvciBsYXRlciAqLworCWlmIChjYXJkLT5leHRfY3NkLnJldiA+PSA3KSB7CisJCW1lbWNweShjYXJkLT5leHRfY3NkLmZ3cmV2LCAmZXh0X2NzZFtFWFRfQ1NEX0ZJUk1XQVJFX1ZFUlNJT05dLAorCQkgICAgICAgTU1DX0ZJUk1XQVJFX0xFTik7CisJCWNhcmQtPmV4dF9jc2QuZmZ1X2NhcGFibGUgPQorCQkJKGV4dF9jc2RbRVhUX0NTRF9TVVBQT1JURURfTU9ERV0gJiAweDEpICYmCisJCQkhKGV4dF9jc2RbRVhUX0NTRF9GV19DT05GSUddICYgMHgxKTsKKwl9CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1tY19mcmVlX2V4dF9jc2QodTggKmV4dF9jc2QpCitzdGF0aWMgaW50IG1tY19yZWFkX2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkKQogewotCWtmcmVlKGV4dF9jc2QpOwotfQorCXU4ICpleHRfY3NkOworCWludCBlcnI7CiAKKwlpZiAoIW1tY19jYW5fZXh0X2NzZChjYXJkKSkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBtbWNfZ2V0X2V4dF9jc2QoY2FyZCwgJmV4dF9jc2QpOworCWlmIChlcnIpIHsKKwkJLyogSWYgdGhlIGhvc3Qgb3IgdGhlIGNhcmQgY2FuJ3QgZG8gdGhlIHN3aXRjaCwKKwkJICogZmFpbCBtb3JlIGdyYWNlZnVsbHkuICovCisJCWlmICgoZXJyICE9IC1FSU5WQUwpCisJCSAmJiAoZXJyICE9IC1FTk9TWVMpCisJCSAmJiAoZXJyICE9IC1FRkFVTFQpKQorCQkJcmV0dXJuIGVycjsKKworCQkvKgorCQkgKiBIaWdoIGNhcGFjaXR5IGNhcmRzIHNob3VsZCBoYXZlIHRoaXMgIm1hZ2ljIiBzaXplCisJCSAqIHN0b3JlZCBpbiB0aGVpciBDU0QuCisJCSAqLworCQlpZiAoY2FyZC0+Y3NkLmNhcGFjaXR5ID09ICg0MDk2ICogNTEyKSkgeworCQkJcHJfZXJyKCIlczogdW5hYmxlIHRvIHJlYWQgRVhUX0NTRCBvbiBhIHBvc3NpYmxlIGhpZ2ggY2FwYWNpdHkgY2FyZC4gQ2FyZCB3aWxsIGJlIGlnbm9yZWQuXG4iLAorCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7CisJCX0gZWxzZSB7CisJCQlwcl93YXJuKCIlczogdW5hYmxlIHRvIHJlYWQgRVhUX0NTRCwgcGVyZm9ybWFuY2UgbWlnaHQgc3VmZmVyXG4iLAorCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7CisJCQllcnIgPSAwOworCQl9CisKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBtbWNfZGVjb2RlX2V4dF9jc2QoY2FyZCwgZXh0X2NzZCk7CisJa2ZyZWUoZXh0X2NzZCk7CisJcmV0dXJuIGVycjsKK30KIAogc3RhdGljIGludCBtbWNfY29tcGFyZV9leHRfY3NkcyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGJ1c193aWR0aCkKIHsKQEAgLTY0NywxMSArNjIzLDggQEAKIAkJcmV0dXJuIDA7CiAKIAllcnIgPSBtbWNfZ2V0X2V4dF9jc2QoY2FyZCwgJmJ3X2V4dF9jc2QpOwotCi0JaWYgKGVyciB8fCBid19leHRfY3NkID09IE5VTEwpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAkvKiBvbmx5IGNvbXBhcmUgcmVhZCBvbmx5IGZpZWxkcyAqLwogCWVyciA9ICEoKGNhcmQtPmV4dF9jc2QucmF3X3BhcnRpdGlvbl9zdXBwb3J0ID09CkBAIC03MTAsOCArNjgzLDcgQEAKIAlpZiAoZXJyKQogCQllcnIgPSAtRUlOVkFMOwogCi1vdXQ6Ci0JbW1jX2ZyZWVfZXh0X2NzZChid19leHRfY3NkKTsKKwlrZnJlZShid19leHRfY3NkKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MjIsNyArNjk0LDcgQEAKIE1NQ19ERVZfQVRUUihkYXRlLCAiJTAyZC8lMDRkXG4iLCBjYXJkLT5jaWQubW9udGgsIGNhcmQtPmNpZC55ZWFyKTsKIE1NQ19ERVZfQVRUUihlcmFzZV9zaXplLCAiJXVcbiIsIGNhcmQtPmVyYXNlX3NpemUgPDwgOSk7CiBNTUNfREVWX0FUVFIocHJlZmVycmVkX2VyYXNlX3NpemUsICIldVxuIiwgY2FyZC0+cHJlZl9lcmFzZSA8PCA5KTsKLU1NQ19ERVZfQVRUUihmd3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5md3Jldik7CitNTUNfREVWX0FUVFIoZmZ1X2NhcGFibGUsICIlZFxuIiwgY2FyZC0+ZXh0X2NzZC5mZnVfY2FwYWJsZSk7CiBNTUNfREVWX0FUVFIoaHdyZXYsICIweCV4XG4iLCBjYXJkLT5jaWQuaHdyZXYpOwogTU1DX0RFVl9BVFRSKG1hbmZpZCwgIjB4JTA2eFxuIiwgY2FyZC0+Y2lkLm1hbmZpZCk7CiBNTUNfREVWX0FUVFIobmFtZSwgIiVzXG4iLCBjYXJkLT5jaWQucHJvZF9uYW1lKTsKQEAgLTczNSw2ICs3MDcsMjIgQEAKIE1NQ19ERVZfQVRUUihyYXdfcnBtYl9zaXplX211bHQsICIlI3hcbiIsIGNhcmQtPmV4dF9jc2QucmF3X3JwbWJfc2l6ZV9tdWx0KTsKIE1NQ19ERVZfQVRUUihyZWxfc2VjdG9ycywgIiUjeFxuIiwgY2FyZC0+ZXh0X2NzZC5yZWxfc2VjdG9ycyk7CiAKK3N0YXRpYyBzc2l6ZV90IG1tY19md3Jldl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOworCisJaWYgKGNhcmQtPmV4dF9jc2QucmV2IDwgNykgeworCQlyZXR1cm4gc3ByaW50ZihidWYsICIweCV4XG4iLCBjYXJkLT5jaWQuZndyZXYpOworCX0gZWxzZSB7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JSpwaE5cbiIsIE1NQ19GSVJNV0FSRV9MRU4sCisJCQkgICAgICAgY2FyZC0+ZXh0X2NzZC5md3Jldik7CisJfQorfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZndyZXYsIFNfSVJVR08sIG1tY19md3Jldl9zaG93LCBOVUxMKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1tY19zdGRfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfY2lkLmF0dHIsCiAJJmRldl9hdHRyX2NzZC5hdHRyLApAQCAtNzQyLDYgKzczMCw3IEBACiAJJmRldl9hdHRyX2VyYXNlX3NpemUuYXR0ciwKIAkmZGV2X2F0dHJfcHJlZmVycmVkX2VyYXNlX3NpemUuYXR0ciwKIAkmZGV2X2F0dHJfZndyZXYuYXR0ciwKKwkmZGV2X2F0dHJfZmZ1X2NhcGFibGUuYXR0ciwKIAkmZGV2X2F0dHJfaHdyZXYuYXR0ciwKIAkmZGV2X2F0dHJfbWFuZmlkLmF0dHIsCiAJJmRldl9hdHRyX25hbWUuYXR0ciwKQEAgLTc3NCwxNCArNzYzLDYgQEAKIAl1bnNpZ25lZCBpbnQgcHdyY2xhc3NfdmFsID0gMDsKIAlpbnQgZXJyID0gMDsKIAotCS8qIFBvd2VyIGNsYXNzIHNlbGVjdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIHZlcnNpb25zID49IDQuMCAqLwotCWlmIChjYXJkLT5jc2QubW1jYV92c24gPCBDU0RfU1BFQ19WRVJfNCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBQb3dlciBjbGFzcyB2YWx1ZXMgYXJlIGRlZmluZWQgb25seSBmb3IgNC84IGJpdCBidXMgKi8KLQlpZiAoYnVzX3dpZHRoID09IEVYVF9DU0RfQlVTX1dJRFRIXzEpCi0JCXJldHVybiAwOwotCiAJc3dpdGNoICgxIDw8IGhvc3QtPmlvcy52ZGQpIHsKIAljYXNlIE1NQ19WRERfMTY1XzE5NToKIAkJaWYgKGhvc3QtPmlvcy5jbG9jayA8PSBNTUNfSElHSF8yNl9NQVhfRFRSKQpAQCAtODQ0LDcgKzgyNSw3IEBACiAJaW50IGVyciwgZGRyOwogCiAJLyogUG93ZXIgY2xhc3Mgc2VsZWN0aW9uIGlzIHN1cHBvcnRlZCBmb3IgdmVyc2lvbnMgPj0gNC4wICovCi0JaWYgKGNhcmQtPmNzZC5tbWNhX3ZzbiA8IENTRF9TUEVDX1ZFUl80KQorCWlmICghbW1jX2Nhbl9leHRfY3NkKGNhcmQpKQogCQlyZXR1cm4gMDsKIAogCWJ1c193aWR0aCA9IGhvc3QtPmlvcy5idXNfd2lkdGg7CkBAIC05MDUsNyArODg2LDcgQEAKIAl1bnNpZ25lZCBpZHgsIGJ1c193aWR0aCA9IDA7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoKGNhcmQtPmNzZC5tbWNhX3ZzbiA8IENTRF9TUEVDX1ZFUl80KSAmJgorCWlmICghbW1jX2Nhbl9leHRfY3NkKGNhcmQpICYmCiAJICAgICEoaG9zdC0+Y2FwcyAmIChNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEpKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTk5OCw3ICs5NzksNyBAQAogCQkJZXh0X2NzZF9iaXRzLAogCQkJY2FyZC0+ZXh0X2NzZC5nZW5lcmljX2NtZDZfdGltZSk7CiAJaWYgKGVycikgewotCQlwcl93YXJuKCIlczogc3dpdGNoIHRvIGJ1cyB3aWR0aCAlZCBkZHIgZmFpbGVkXG4iLAorCQlwcl9lcnIoIiVzOiBzd2l0Y2ggdG8gYnVzIHdpZHRoICVkIGRkciBmYWlsZWRcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdCksIDEgPDwgYnVzX3dpZHRoKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMDY5LDcgKzEwNTAsNyBAQAogCQkJICAgY2FyZC0+ZXh0X2NzZC5nZW5lcmljX2NtZDZfdGltZSwKIAkJCSAgIHRydWUsIHRydWUsIHRydWUpOwogCWlmIChlcnIpIHsKLQkJcHJfd2FybigiJXM6IHN3aXRjaCB0byBoaWdoLXNwZWVkIGZyb20gaHMyMDAgZmFpbGVkLCBlcnI6JWRcbiIsCisJCXByX2VycigiJXM6IHN3aXRjaCB0byBoaWdoLXNwZWVkIGZyb20gaHMyMDAgZmFpbGVkLCBlcnI6JWRcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdCksIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTA3OSw3ICsxMDYwLDcgQEAKIAkJCSBFWFRfQ1NEX0REUl9CVVNfV0lEVEhfOCwKIAkJCSBjYXJkLT5leHRfY3NkLmdlbmVyaWNfY21kNl90aW1lKTsKIAlpZiAoZXJyKSB7Ci0JCXByX3dhcm4oIiVzOiBzd2l0Y2ggdG8gYnVzIHdpZHRoIGZvciBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKKwkJcHJfZXJyKCIlczogc3dpdGNoIHRvIGJ1cyB3aWR0aCBmb3IgaHM0MDAgZmFpbGVkLCBlcnI6JWRcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdCksIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTA4OSw3ICsxMDcwLDcgQEAKIAkJCSAgIGNhcmQtPmV4dF9jc2QuZ2VuZXJpY19jbWQ2X3RpbWUsCiAJCQkgICB0cnVlLCB0cnVlLCB0cnVlKTsKIAlpZiAoZXJyKSB7Ci0JCXByX3dhcm4oIiVzOiBzd2l0Y2ggdG8gaHM0MDAgZmFpbGVkLCBlcnI6JWRcbiIsCisJCXByX2VycigiJXM6IHN3aXRjaCB0byBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKIAkJCSBtbWNfaG9zdG5hbWUoaG9zdCksIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTE0Niw4ICsxMTI3LDcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCWlmICgoY2FyZC0+Y3NkLm1tY2FfdnNuIDwgQ1NEX1NQRUNfVkVSXzQgJiYKLQkgICAgIGNhcmQtPmV4dF9jc2QuaHNfbWF4X2R0ciA9PSAwKSkKKwlpZiAoIW1tY19jYW5fZXh0X2NzZChjYXJkKSkKIAkJZ290byBidXNfc3BlZWQ7CiAKIAlpZiAoY2FyZC0+bW1jX2F2YWlsX3R5cGUgJiBFWFRfQ1NEX0NBUkRfVFlQRV9IUzIwMCkKQEAgLTEyMzIsNyArMTIxMiw3IEBACiAJCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogCiAJCWlmIChlcnIpCi0JCQlwcl93YXJuKCIlczogdHVuaW5nIGV4ZWN1dGlvbiBmYWlsZWRcbiIsCisJCQlwcl9lcnIoIiVzOiB0dW5pbmcgZXhlY3V0aW9uIGZhaWxlZFxuIiwKIAkJCQltbWNfaG9zdG5hbWUoaG9zdCkpOwogCX0KIApAQCAtMTI1Miw3ICsxMjMyLDYgQEAKIAlpbnQgZXJyOwogCXUzMiBjaWRbNF07CiAJdTMyIHJvY3I7Ci0JdTggKmV4dF9jc2QgPSBOVUxMOwogCiAJQlVHX09OKCFob3N0KTsKIAlXQVJOX09OKCFob3N0LT5jbGFpbWVkKTsKQEAgLTEzNjEsMTQgKzEzNDAsOCBAQAogCX0KIAogCWlmICghb2xkY2FyZCkgewotCQkvKgotCQkgKiBGZXRjaCBhbmQgcHJvY2VzcyBleHRlbmRlZCBDU0QuCi0JCSAqLwotCi0JCWVyciA9IG1tY19nZXRfZXh0X2NzZChjYXJkLCAmZXh0X2NzZCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGZyZWVfY2FyZDsKLQkJZXJyID0gbW1jX3JlYWRfZXh0X2NzZChjYXJkLCBleHRfY3NkKTsKKwkJLyogUmVhZCBleHRlbmRlZCBDU0QuICovCisJCWVyciA9IG1tY19yZWFkX2V4dF9jc2QoY2FyZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGZyZWVfY2FyZDsKIApAQCAtMTQ1OCwxOCArMTQzMSwxOCBAQAogCWlmIChtbWNfY2FyZF9oczIwMChjYXJkKSkgewogCQllcnIgPSBtbWNfaHMyMDBfdHVuaW5nKGNhcmQpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGZyZWVfY2FyZDsKIAogCQllcnIgPSBtbWNfc2VsZWN0X2hzNDAwKGNhcmQpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGZyZWVfY2FyZDsKIAl9IGVsc2UgaWYgKG1tY19jYXJkX2hzKGNhcmQpKSB7CiAJCS8qIFNlbGVjdCB0aGUgZGVzaXJlZCBidXMgd2lkdGggb3B0aW9uYWxseSAqLwogCQllcnIgPSBtbWNfc2VsZWN0X2J1c193aWR0aChjYXJkKTsKIAkJaWYgKCFJU19FUlJfVkFMVUUoZXJyKSkgewogCQkJZXJyID0gbW1jX3NlbGVjdF9oc19kZHIoY2FyZCk7CiAJCQlpZiAoZXJyKQotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZnJlZV9jYXJkOwogCQl9CiAJfQogCkBAIC0xNTQ1LDE1ICsxNTE4LDEyIEBACiAJaWYgKCFvbGRjYXJkKQogCQlob3N0LT5jYXJkID0gY2FyZDsKIAotCW1tY19mcmVlX2V4dF9jc2QoZXh0X2NzZCk7CiAJcmV0dXJuIDA7CiAKIGZyZWVfY2FyZDoKIAlpZiAoIW9sZGNhcmQpCiAJCW1tY19yZW1vdmVfY2FyZChjYXJkKTsKIGVycjoKLQltbWNfZnJlZV9leHRfY3NkKGV4dF9jc2QpOwotCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYwppbmRleCA3OTExZTA1Li4zYjA0NGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYwpAQCAtMjY0LDIwICsyNjQsNiBAQAogCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQgPSB7MH07CiAJc3RydWN0IG1tY19kYXRhIGRhdGEgPSB7MH07CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwotCXZvaWQgKmRhdGFfYnVmOwotCWludCBpc19vbl9zdGFjazsKLQotCWlzX29uX3N0YWNrID0gb2JqZWN0X2lzX29uX3N0YWNrKGJ1Zik7Ci0JaWYgKGlzX29uX3N0YWNrKSB7Ci0JCS8qCi0JCSAqIGRtYSBvbnRvIHN0YWNrIGlzIHVuc2FmZS9ub25wb3J0YWJsZSwgYnV0IGNhbGxlcnMgdG8gdGhpcwotCQkgKiByb3V0aW5lIG5vcm1hbGx5IHByb3ZpZGUgdGVtcG9yYXJ5IG9uLXN0YWNrIGJ1ZmZlcnMgLi4uCi0JCSAqLwotCQlkYXRhX2J1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkYXRhX2J1ZikKLQkJCXJldHVybiAtRU5PTUVNOwotCX0gZWxzZQotCQlkYXRhX2J1ZiA9IGJ1ZjsKIAogCW1ycS5jbWQgPSAmY21kOwogCW1ycS5kYXRhID0gJmRhdGE7CkBAIC0yOTgsNyArMjg0LDcgQEAKIAlkYXRhLnNnID0gJnNnOwogCWRhdGEuc2dfbGVuID0gMTsKIAotCXNnX2luaXRfb25lKCZzZywgZGF0YV9idWYsIGxlbik7CisJc2dfaW5pdF9vbmUoJnNnLCBidWYsIGxlbik7CiAKIAlpZiAob3Bjb2RlID09IE1NQ19TRU5EX0NTRCB8fCBvcGNvZGUgPT0gTU1DX1NFTkRfQ0lEKSB7CiAJCS8qCkBAIC0zMTIsMTEgKzI5OCw2IEBACiAKIAltbWNfd2FpdF9mb3JfcmVxKGhvc3QsICZtcnEpOwogCi0JaWYgKGlzX29uX3N0YWNrKSB7Ci0JCW1lbWNweShidWYsIGRhdGFfYnVmLCBsZW4pOwotCQlrZnJlZShkYXRhX2J1Zik7Ci0JfQotCiAJaWYgKGNtZC5lcnJvcikKIAkJcmV0dXJuIGNtZC5lcnJvcjsKIAlpZiAoZGF0YS5lcnJvcikKQEAgLTMzNCw3ICszMTUsNyBAQAogCQlyZXR1cm4gbW1jX3NlbmRfY3hkX25hdGl2ZShjYXJkLT5ob3N0LCBjYXJkLT5yY2EgPDwgMTYsCiAJCQkJY3NkLCBNTUNfU0VORF9DU0QpOwogCi0JY3NkX3RtcCA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCWNzZF90bXAgPSBremFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNzZF90bXApCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zNjIsNyArMzQzLDcgQEAKIAkJCQljaWQsIE1NQ19TRU5EX0NJRCk7CiAJfQogCi0JY2lkX3RtcCA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCWNpZF90bXAgPSBremFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNpZF90bXApCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zNzgsMTIgKzM1OSwzNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBtbWNfc2VuZF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKmV4dF9jc2QpCitpbnQgbW1jX2dldF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKipuZXdfZXh0X2NzZCkKIHsKLQlyZXR1cm4gbW1jX3NlbmRfY3hkX2RhdGEoY2FyZCwgY2FyZC0+aG9zdCwgTU1DX1NFTkRfRVhUX0NTRCwKLQkJCWV4dF9jc2QsIDUxMik7CisJaW50IGVycjsKKwl1OCAqZXh0X2NzZDsKKworCWlmICghY2FyZCB8fCAhbmV3X2V4dF9jc2QpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFtbWNfY2FuX2V4dF9jc2QoY2FyZCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qCisJICogQXMgdGhlIGV4dF9jc2QgaXMgc28gbGFyZ2UgYW5kIG1vc3RseSB1bnVzZWQsIHdlIGRvbid0IHN0b3JlIHRoZQorCSAqIHJhdyBibG9jayBpbiBtbWNfY2FyZC4KKwkgKi8KKwlleHRfY3NkID0ga3phbGxvYyg1MTIsIEdGUF9LRVJORUwpOworCWlmICghZXh0X2NzZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBtbWNfc2VuZF9jeGRfZGF0YShjYXJkLCBjYXJkLT5ob3N0LCBNTUNfU0VORF9FWFRfQ1NELCBleHRfY3NkLAorCQkJCTUxMik7CisJaWYgKGVycikKKwkJa2ZyZWUoZXh0X2NzZCk7CisJZWxzZQorCQkqbmV3X2V4dF9jc2QgPSBleHRfY3NkOworCisJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKG1tY19zZW5kX2V4dF9jc2QpOworRVhQT1JUX1NZTUJPTF9HUEwobW1jX2dldF9leHRfY3NkKTsKIAogaW50IG1tY19zcGlfcmVhZF9vY3Ioc3RydWN0IG1tY19ob3N0ICpob3N0LCBpbnQgaGlnaGNhcCwgdTMyICpvY3JwKQogewpAQCAtNTQzLDYgKzU0Nyw3NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobW1jX3N3aXRjaCk7CiAKK2ludCBtbWNfc2VuZF90dW5pbmcoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfcmVxdWVzdCBtcnEgPSB7TlVMTH07CisJc3RydWN0IG1tY19jb21tYW5kIGNtZCA9IHswfTsKKwlzdHJ1Y3QgbW1jX2RhdGEgZGF0YSA9IHswfTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJc3RydWN0IG1tY19pb3MgKmlvcyA9ICZob3N0LT5pb3M7CisJY29uc3QgdTggKnR1bmluZ19ibG9ja19wYXR0ZXJuOworCWludCBzaXplLCBlcnIgPSAwOworCXU4ICpkYXRhX2J1ZjsKKwl1MzIgb3Bjb2RlOworCisJaWYgKGlvcy0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfOCkgeworCQl0dW5pbmdfYmxvY2tfcGF0dGVybiA9IHR1bmluZ19ibGtfcGF0dGVybl84Yml0OworCQlzaXplID0gc2l6ZW9mKHR1bmluZ19ibGtfcGF0dGVybl84Yml0KTsKKwkJb3Bjb2RlID0gTU1DX1NFTkRfVFVOSU5HX0JMT0NLX0hTMjAwOworCX0gZWxzZSBpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KSB7CisJCXR1bmluZ19ibG9ja19wYXR0ZXJuID0gdHVuaW5nX2Jsa19wYXR0ZXJuXzRiaXQ7CisJCXNpemUgPSBzaXplb2YodHVuaW5nX2Jsa19wYXR0ZXJuXzRiaXQpOworCQlvcGNvZGUgPSBNTUNfU0VORF9UVU5JTkdfQkxPQ0s7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YV9idWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YV9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJbXJxLmNtZCA9ICZjbWQ7CisJbXJxLmRhdGEgPSAmZGF0YTsKKworCWNtZC5vcGNvZGUgPSBvcGNvZGU7CisJY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQURUQzsKKworCWRhdGEuYmxrc3ogPSBzaXplOworCWRhdGEuYmxvY2tzID0gMTsKKwlkYXRhLmZsYWdzID0gTU1DX0RBVEFfUkVBRDsKKworCS8qCisJICogQWNjb3JkaW5nIHRvIHRoZSB0dW5pbmcgc3BlY3MsIFR1bmluZyBwcm9jZXNzCisJICogaXMgbm9ybWFsbHkgc2hvcnRlciA0MCBleGVjdXRpb25zIG9mIENNRDE5LAorCSAqIGFuZCB0aW1lb3V0IHZhbHVlIHNob3VsZCBiZSBzaG9ydGVyIHRoYW4gMTUwIG1zCisJICovCisJZGF0YS50aW1lb3V0X25zID0gMTUwICogTlNFQ19QRVJfTVNFQzsKKworCWRhdGEuc2cgPSAmc2c7CisJZGF0YS5zZ19sZW4gPSAxOworCXNnX2luaXRfb25lKCZzZywgZGF0YV9idWYsIHNpemUpOworCisJbW1jX3dhaXRfZm9yX3JlcShob3N0LCAmbXJxKTsKKworCWlmIChjbWQuZXJyb3IpIHsKKwkJZXJyID0gY21kLmVycm9yOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGF0YS5lcnJvcikgeworCQllcnIgPSBkYXRhLmVycm9yOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobWVtY21wKGRhdGFfYnVmLCB0dW5pbmdfYmxvY2tfcGF0dGVybiwgc2l6ZSkpCisJCWVyciA9IC1FSU87CisKK291dDoKKwlrZnJlZShkYXRhX2J1Zik7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1tY19zZW5kX3R1bmluZyk7CisKIHN0YXRpYyBpbnQKIG1tY19zZW5kX2J1c190ZXN0KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgc3RydWN0IG1tY19ob3N0ICpob3N0LCB1OCBvcGNvZGUsCiAJCSAgdTggbGVuKQpAQCAtNjc1LDMgKzc0OCw4IEBACiAKIAlyZXR1cm4gMDsKIH0KKworaW50IG1tY19jYW5fZXh0X2NzZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCit7CisJcmV0dXJuIChjYXJkICYmIGNhcmQtPmNzZC5tbWNhX3ZzbiA+IENTRF9TUEVDX1ZFUl8zKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5oIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmgKaW5kZXggMzkwZGFjNi4uNmY0YjAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmgKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmgKQEAgLTIwLDEzICsyMCwxMyBAQAogaW50IG1tY19hbGxfc2VuZF9jaWQoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgKmNpZCk7CiBpbnQgbW1jX3NldF9yZWxhdGl2ZV9hZGRyKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiBpbnQgbW1jX3NlbmRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTMyICpjc2QpOwotaW50IG1tY19zZW5kX2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCAqZXh0X2NzZCk7CiBpbnQgbW1jX3NlbmRfc3RhdHVzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTMyICpzdGF0dXMpOwogaW50IG1tY19zZW5kX2NpZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiAqY2lkKTsKIGludCBtbWNfc3BpX3JlYWRfb2NyKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IGhpZ2hjYXAsIHUzMiAqb2NycCk7CiBpbnQgbW1jX3NwaV9zZXRfY3JjKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IHVzZV9jcmMpOwogaW50IG1tY19idXNfdGVzdChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHU4IGJ1c193aWR0aCk7CiBpbnQgbW1jX3NlbmRfaHBpX2NtZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHUzMiAqc3RhdHVzKTsKK2ludCBtbWNfY2FuX2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKaW5kZXggMjQzOWU3MS4uZmQwNzUwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKQEAgLTk4MCw4ICs5ODAsMTIgQEAKIAlpZiAobW1jX2NhcmRfaXNfcmVtb3ZhYmxlKGhvc3QpIHx8ICFtbWNfY2FyZF9rZWVwX3Bvd2VyKGhvc3QpKSB7CiAJCXNkaW9fcmVzZXQoaG9zdCk7CiAJCW1tY19nb19pZGxlKGhvc3QpOwotCQllcnIgPSBtbWNfc2Rpb19pbml0X2NhcmQoaG9zdCwgaG9zdC0+Y2FyZC0+b2NyLCBob3N0LT5jYXJkLAotCQkJCQltbWNfY2FyZF9rZWVwX3Bvd2VyKGhvc3QpKTsKKwkJbW1jX3NlbmRfaWZfY29uZChob3N0LCBob3N0LT5jYXJkLT5vY3IpOworCQllcnIgPSBtbWNfc2VuZF9pb19vcF9jb25kKGhvc3QsIDAsIE5VTEwpOworCQlpZiAoIWVycikKKwkJCWVyciA9IG1tY19zZGlvX2luaXRfY2FyZChob3N0LCBob3N0LT5jYXJkLT5vY3IsCisJCQkJCQkgaG9zdC0+Y2FyZCwKKwkJCQkJCSBtbWNfY2FyZF9rZWVwX3Bvd2VyKGhvc3QpKTsKIAl9IGVsc2UgaWYgKG1tY19jYXJkX2tlZXBfcG93ZXIoaG9zdCkgJiYgbW1jX2NhcmRfd2FrZV9zZGlvX2lycShob3N0KSkgewogCQkvKiBXZSBtYXkgaGF2ZSBzd2l0Y2hlZCB0byAxLWJpdCBtb2RlIGR1cmluZyBzdXNwZW5kICovCiAJCWVyciA9IHNkaW9fZW5hYmxlXzRiaXRfYnVzKGhvc3QtPmNhcmQpOwpAQCAtMTAzNSw3ICsxMDM5LDcgQEAKIAogCXNkaW9fcmVzZXQoaG9zdCk7CiAJbW1jX2dvX2lkbGUoaG9zdCk7Ci0JbW1jX3NlbmRfaWZfY29uZChob3N0LCBob3N0LT5vY3JfYXZhaWwpOworCW1tY19zZW5kX2lmX2NvbmQoaG9zdCwgaG9zdC0+Y2FyZC0+b2NyKTsKIAogCXJldCA9IG1tY19zZW5kX2lvX29wX2NvbmQoaG9zdCwgMCwgTlVMTCk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYwppbmRleCA2ZGE5N2IxLi42MDg4NTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAic2Rpb19jaXMuaCIKICNpbmNsdWRlICJzZGlvX2J1cy5oIgogCisjZGVmaW5lIHRvX3NkaW9fZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2Rpb19kcml2ZXIsIGRydikKKwogLyogc2hvdyBjb25maWd1cmF0aW9uIGZpZWxkcyAqLwogI2RlZmluZSBzZGlvX2NvbmZpZ19hdHRyKGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXApAQCAtMTk2LDggKzE5OCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2Rpb19idXNfcG1fb3BzID0gewogCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHBtX2dlbmVyaWNfc3VzcGVuZCwgcG1fZ2VuZXJpY19yZXN1bWUpCiAJU0VUX1JVTlRJTUVfUE1fT1BTKApAQCAtMjA3LDE0ICsyMDcsNiBAQAogCSkKIH07CiAKLSNkZWZpbmUgU0RJT19QTV9PUFNfUFRSCSgmc2Rpb19idXNfcG1fb3BzKQotCi0jZWxzZSAvKiAhQ09ORklHX1BNICovCi0KLSNkZWZpbmUgU0RJT19QTV9PUFNfUFRSCU5VTEwKLQotI2VuZGlmIC8qICFDT05GSUdfUE0gKi8KLQogc3RhdGljIHN0cnVjdCBidXNfdHlwZSBzZGlvX2J1c190eXBlID0gewogCS5uYW1lCQk9ICJzZGlvIiwKIAkuZGV2X2dyb3Vwcwk9IHNkaW9fZGV2X2dyb3VwcywKQEAgLTIyMiw3ICsyMTQsNyBAQAogCS51ZXZlbnQJCT0gc2Rpb19idXNfdWV2ZW50LAogCS5wcm9iZQkJPSBzZGlvX2J1c19wcm9iZSwKIAkucmVtb3ZlCQk9IHNkaW9fYnVzX3JlbW92ZSwKLQkucG0JCT0gU0RJT19QTV9PUFNfUFRSLAorCS5wbQkJPSAmc2Rpb19idXNfcG1fb3BzLAogfTsKIAogaW50IHNkaW9fcmVnaXN0ZXJfYnVzKHZvaWQpCkBAIC0yOTUsNyArMjg3LDcgQEAKIHN0YXRpYyB2b2lkIHNkaW9fYWNwaV9zZXRfaGFuZGxlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCiB7CiAJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gZnVuYy0+Y2FyZC0+aG9zdDsKLQl1NjQgYWRkciA9IChob3N0LT5zbG90bm8gPDwgMTYpIHwgZnVuYy0+bnVtOworCXU2NCBhZGRyID0gKCh1NjQpaG9zdC0+c2xvdG5vIDw8IDE2KSB8IGZ1bmMtPm51bTsKIAogCWFjcGlfcHJlc2V0X2NvbXBhbmlvbigmZnVuYy0+ZGV2LCBBQ1BJX0NPTVBBTklPTihob3N0LT5wYXJlbnQpLCBhZGRyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCAxMzg2MDY1Li4yZDZmYmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC01ODAsNyArNTgwLDcgQEAKIGNvbmZpZyBNTUNfRFcKIAl0cmlzdGF0ZSAiU3lub3BzeXMgRGVzaWduV2FyZSBNZW1vcnkgQ2FyZCBJbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBIQVNfRE1BCi0JZGVwZW5kcyBvbiBBUkMgfHwgQVJNIHx8IE1JUFMgfHwgQ09NUElMRV9URVNUCisJZGVwZW5kcyBvbiBBUkMgfHwgQVJNIHx8IEFSTTY0IHx8IE1JUFMgfHwgQ09NUElMRV9URVNUCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIE1vYmlsZSBTdG9yYWdlIElQCiAJICBibG9jaywgdGhpcyBwcm92aWRlcyBob3N0IHN1cHBvcnQgZm9yIFNEIGFuZCBNTUMgaW50ZXJmYWNlcywgaW4gYm90aApAQCAtNzQ4LDMgKzc0OCw4IEBACiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIHRoZSBTRC9NTUMgSG9zdCBDb250cm9sbGVyIG9uCiAJICBBbGx3aW5uZXIgc3VueGkgU29Dcy4KKworY29uZmlnIE1NQ19UT1NISUJBX1BDSQorCXRyaXN0YXRlICJUb3NoaWJhIFR5cGUgQSBTRC9NTUMgQ2FyZCBJbnRlcmZhY2UgRHJpdmVyIgorCWRlcGVuZHMgb24gUENJCisJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKaW5kZXggYjA5ZWNmYi4uZjdiMGE3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCkBAIC01NSw2ICs1NSw3IEBACiBvYmotJChDT05GSUdfTU1DX01PWEFSVCkJKz0gbW94YXJ0LW1tYy5vCiBvYmotJChDT05GSUdfTU1DX1NVTlhJKQkJKz0gc3VueGktbW1jLm8KIG9iai0kKENPTkZJR19NTUNfVVNESEk2Uk9MMCkJKz0gdXNkaGk2cm9sMC5vCitvYmotJChDT05GSUdfTU1DX1RPU0hJQkFfUENJKQkrPSB0b3Noc2QubwogCiBvYmotJChDT05GSUdfTU1DX1JFQUxURUtfUENJKQkrPSBydHN4X3BjaV9zZG1tYy5vCiBvYmotJChDT05GSUdfTU1DX1JFQUxURUtfVVNCKQkrPSBydHN4X3VzYl9zZG1tYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwppbmRleCA3NzI1MGQ0Li42MmFiYTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKQEAgLTMwLDEzICszMCwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXRtZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL21tYy1hdG1lbC1tY2kuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NkaW8uaD4KIAotI2luY2x1ZGUgPG1hY2gvYXRtZWwtbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZWwtbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZWxfcGRjLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQ0LDYgKzQ3LDggQEAKIAogI2luY2x1ZGUgImF0bWVsLW1jaS1yZWdzLmgiCiAKKyNkZWZpbmUgQVVUT1NVU1BFTkRfREVMQVkJNTAKKwogI2RlZmluZSBBVE1DSV9EQVRBX0VSUk9SX0ZMQUdTCShBVE1DSV9EQ1JDRSB8IEFUTUNJX0RUT0UgfCBBVE1DSV9PVlJFIHwgQVRNQ0lfVU5SRSkKICNkZWZpbmUgQVRNQ0lfRE1BX1RIUkVTSE9MRAkxNgogCkBAIC0zODYsMjAgKzM5MSwxOSBAQAogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmhvc3QtPnBkZXYtPmRldik7CisKIAkvKgogCSAqIEdyYWIgYSBtb3JlIG9yIGxlc3MgY29uc2lzdGVudCBzbmFwc2hvdC4gTm90ZSB0aGF0IHdlJ3JlCiAJICogbm90IGRpc2FibGluZyBpbnRlcnJ1cHRzLCBzbyBJTVIgYW5kIFNSIG1heSBub3QgYmUKIAkgKiBjb25zaXN0ZW50LgogCSAqLwotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5tY2spOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCiAJc3Bpbl9sb2NrX2JoKCZob3N0LT5sb2NrKTsKIAltZW1jcHlfZnJvbWlvKGJ1ZiwgaG9zdC0+cmVncywgQVRNQ0lfUkVHU19TSVpFKTsKIAlzcGluX3VubG9ja19iaCgmaG9zdC0+bG9jayk7CiAKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+bWNrKTsKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KCZob3N0LT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKCZob3N0LT5wZGV2LT5kZXYpOwogCiAJc2VxX3ByaW50ZihzLCAiTVI6XHQweCUwOHglcyVzICIsCiAJCQlidWZbQVRNQ0lfTVIgLyA0XSwKQEAgLTQ0OSw3ICs0NTMsNiBAQAogCQkJCXZhbCAmIEFUTUNJX0NGR19MU1lOQyA/ICIgTFNZTkMiIDogIiIpOwogCX0KIAotb3V0OgogCWtmcmVlKGJ1Zik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNTYwLDYgKzU2Myw5IEBACiAJCXBkYXRhLT5zbG90W3Nsb3RfaWRdLmRldGVjdF9pc19hY3RpdmVfaGlnaCA9CiAJCQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY25wLCAiY2QtaW52ZXJ0ZWQiKTsKIAorCQlwZGF0YS0+c2xvdFtzbG90X2lkXS5ub25fcmVtb3ZhYmxlID0KKwkJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChjbnAsICJub24tcmVtb3ZhYmxlIik7CisKIAkJcGRhdGEtPnNsb3Rbc2xvdF9pZF0ud3BfcGluID0KIAkJCW9mX2dldF9uYW1lZF9ncGlvKGNucCwgIndwLWdwaW9zIiwgMCk7CiAJfQpAQCAtMTI1Miw2ICsxMjU4LDggQEAKIAlXQVJOX09OKHNsb3QtPm1ycSk7CiAJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiTVJROiBjbWQgJXVcbiIsIG1ycS0+Y21kLT5vcGNvZGUpOwogCisJcG1fcnVudGltZV9nZXRfc3luYygmaG9zdC0+cGRldi0+ZGV2KTsKKwogCS8qCiAJICogV2UgbWF5ICJrbm93IiB0aGUgY2FyZCBpcyBnb25lIGV2ZW4gdGhvdWdoIHRoZXJlJ3Mgc3RpbGwgYW4KIAkgKiBlbGVjdHJpY2FsIGNvbm5lY3Rpb24uIElmIHNvLCB3ZSByZWFsbHkgbmVlZCB0byBjb21tdW5pY2F0ZQpAQCAtMTI4MSw3ICsxMjg5LDggQEAKIAlzdHJ1Y3QgYXRtZWxfbWNpX3Nsb3QJKnNsb3QgPSBtbWNfcHJpdihtbWMpOwogCXN0cnVjdCBhdG1lbF9tY2kJKmhvc3QgPSBzbG90LT5ob3N0OwogCXVuc2lnbmVkIGludAkJaTsKLQlib29sCQkJdW5wcmVwYXJlX2NsazsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmhvc3QtPnBkZXYtPmRldik7CiAKIAlzbG90LT5zZGNfcmVnICY9IH5BVE1DSV9TRENCVVNfTUFTSzsKIAlzd2l0Y2ggKGlvcy0+YnVzX3dpZHRoKSB7CkBAIC0xMjk3LDEzICsxMzA2LDggQEAKIAkJdW5zaWduZWQgaW50IGNsb2NrX21pbiA9IH4wVTsKIAkJdTMyIGNsa2RpdjsKIAotCQljbGtfcHJlcGFyZShob3N0LT5tY2spOwotCQl1bnByZXBhcmVfY2xrID0gdHJ1ZTsKLQogCQlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwogCQlpZiAoIWhvc3QtPm1vZGVfcmVnKSB7Ci0JCQljbGtfZW5hYmxlKGhvc3QtPm1jayk7Ci0JCQl1bnByZXBhcmVfY2xrID0gZmFsc2U7CiAJCQlhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfQ1IsIEFUTUNJX0NSX1NXUlNUKTsKIAkJCWF0bWNpX3dyaXRlbChob3N0LCBBVE1DSV9DUiwgQVRNQ0lfQ1JfTUNJRU4pOwogCQkJaWYgKGhvc3QtPmNhcHMuaGFzX2NmZ19yZWcpCkBAIC0xMzcxLDggKzEzNzUsNiBAQAogCX0gZWxzZSB7CiAJCWJvb2wgYW55X3Nsb3RfYWN0aXZlID0gZmFsc2U7CiAKLQkJdW5wcmVwYXJlX2NsayA9IGZhbHNlOwotCiAJCXNwaW5fbG9ja19iaCgmaG9zdC0+bG9jayk7CiAJCXNsb3QtPmNsb2NrID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IEFUTUNJX01BWF9OUl9TTE9UUzsgaSsrKSB7CkBAIC0xMzg1LDE3ICsxMzg3LDEyIEBACiAJCQlhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfQ1IsIEFUTUNJX0NSX01DSURJUyk7CiAJCQlpZiAoaG9zdC0+bW9kZV9yZWcpIHsKIAkJCQlhdG1jaV9yZWFkbChob3N0LCBBVE1DSV9NUik7Ci0JCQkJY2xrX2Rpc2FibGUoaG9zdC0+bWNrKTsKLQkJCQl1bnByZXBhcmVfY2xrID0gdHJ1ZTsKIAkJCX0KIAkJCWhvc3QtPm1vZGVfcmVnID0gMDsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmaG9zdC0+bG9jayk7CiAJfQogCi0JaWYgKHVucHJlcGFyZV9jbGspCi0JCWNsa191bnByZXBhcmUoaG9zdC0+bWNrKTsKLQogCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CiAJY2FzZSBNTUNfUE9XRVJfT0ZGOgogCQlpZiAoIUlTX0VSUihtbWMtPnN1cHBseS52bW1jKSkKQEAgLTE0MjEsNiArMTQxOCw5IEBACiAJCSAqLwogCQlicmVhazsKIAl9CisKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KCZob3N0LT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKCZob3N0LT5wZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGF0bWNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKQEAgLTE1MTIsNiArMTUxMiw5IEBACiAJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOwogCW1tY19yZXF1ZXN0X2RvbmUocHJldl9tbWMsIG1ycSk7CiAJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koJmhvc3QtPnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoJmhvc3QtPnBkZXYtPmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGF0bWNpX2NvbW1hbmRfY29tcGxldGUoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwKQEAgLTIxMzcsNyArMjE0MCw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBhdG1jaV9pbml0X3Nsb3Qoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwKK3N0YXRpYyBpbnQgYXRtY2lfaW5pdF9zbG90KHN0cnVjdCBhdG1lbF9tY2kgKmhvc3QsCiAJCXN0cnVjdCBtY2lfc2xvdF9wZGF0YSAqc2xvdF9kYXRhLCB1bnNpZ25lZCBpbnQgaWQsCiAJCXUzMiBzZGNfcmVnLCB1MzIgc2Rpb19pcnEpCiB7CkBAIC0yMjA2LDggKzIyMDksMTIgQEAKIAkJfQogCX0KIAotCWlmICghZ3Bpb19pc192YWxpZChzbG90LT5kZXRlY3RfcGluKSkKLQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKKwlpZiAoIWdwaW9faXNfdmFsaWQoc2xvdC0+ZGV0ZWN0X3BpbikpIHsKKwkJaWYgKHNsb3RfZGF0YS0+bm9uX3JlbW92YWJsZSkKKwkJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX05PTlJFTU9WQUJMRTsKKwkJZWxzZQorCQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKKwl9CiAKIAlpZiAoZ3Bpb19pc192YWxpZChzbG90LT53cF9waW4pKSB7CiAJCWlmIChkZXZtX2dwaW9fcmVxdWVzdCgmaG9zdC0+cGRldi0+ZGV2LCBzbG90LT53cF9waW4sCkBAIC0yMjY1LDU1ICsyMjcyLDI1IEBACiAJbW1jX2ZyZWVfaG9zdChzbG90LT5tbWMpOwogfQogCi1zdGF0aWMgYm9vbCBhdG1jaV9maWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpwZGF0YSkKK3N0YXRpYyBpbnQgYXRtY2lfY29uZmlndXJlX2RtYShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KQogewotCXN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqc2xfcGRhdGEgPSBwZGF0YTsKLQlzdHJ1Y3QgbWNpX2RtYV9kYXRhICpzbDsKKwlob3N0LT5kbWEuY2hhbiA9IGRtYV9yZXF1ZXN0X3NsYXZlX2NoYW5uZWxfcmVhc29uKCZob3N0LT5wZGV2LT5kZXYsCisJCQkJCQkJInJ4dHgiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPmRtYS5jaGFuKSkKKwkJcmV0dXJuIFBUUl9FUlIoaG9zdC0+ZG1hLmNoYW4pOwogCi0JaWYgKCFzbF9wZGF0YSkKLQkJcmV0dXJuIGZhbHNlOworCWRldl9pbmZvKCZob3N0LT5wZGV2LT5kZXYsICJ1c2luZyAlcyBmb3IgRE1BIHRyYW5zZmVyc1xuIiwKKwkJIGRtYV9jaGFuX25hbWUoaG9zdC0+ZG1hLmNoYW4pKTsKIAotCXNsID0gc2xfcGRhdGEtPmRtYV9zbGF2ZTsKLQlpZiAoc2wgJiYgZmluZF9zbGF2ZV9kZXYoc2wpID09IGNoYW4tPmRldmljZS0+ZGV2KSB7Ci0JCWNoYW4tPnByaXZhdGUgPSBzbGF2ZV9kYXRhX3B0cihzbCk7Ci0JCXJldHVybiB0cnVlOwotCX0gZWxzZSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19CisJaG9zdC0+ZG1hX2NvbmYuc3JjX2FkZHIgPSBob3N0LT5tYXBiYXNlICsgQVRNQ0lfUkRSOworCWhvc3QtPmRtYV9jb25mLnNyY19hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7CisJaG9zdC0+ZG1hX2NvbmYuc3JjX21heGJ1cnN0ID0gMTsKKwlob3N0LT5kbWFfY29uZi5kc3RfYWRkciA9IGhvc3QtPm1hcGJhc2UgKyBBVE1DSV9URFI7CisJaG9zdC0+ZG1hX2NvbmYuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKKwlob3N0LT5kbWFfY29uZi5kc3RfbWF4YnVyc3QgPSAxOworCWhvc3QtPmRtYV9jb25mLmRldmljZV9mYyA9IGZhbHNlOwogCi1zdGF0aWMgYm9vbCBhdG1jaV9jb25maWd1cmVfZG1hKHN0cnVjdCBhdG1lbF9tY2kgKmhvc3QpCi17Ci0Jc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKLQlkbWFfY2FwX21hc2tfdCBtYXNrOwotCi0JaWYgKGhvc3QgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcGRhdGEgPSBob3N0LT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQotCWRtYV9jYXBfemVybyhtYXNrKTsKLQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwotCi0JaG9zdC0+ZG1hLmNoYW4gPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsX2NvbXBhdChtYXNrLCBhdG1jaV9maWx0ZXIsIHBkYXRhLAotCQkJCQkJCSAgJmhvc3QtPnBkZXYtPmRldiwgInJ4dHgiKTsKLQlpZiAoIWhvc3QtPmRtYS5jaGFuKSB7Ci0JCWRldl93YXJuKCZob3N0LT5wZGV2LT5kZXYsICJubyBETUEgY2hhbm5lbCBhdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJZGV2X2luZm8oJmhvc3QtPnBkZXYtPmRldiwKLQkJCQkJInVzaW5nICVzIGZvciBETUEgdHJhbnNmZXJzXG4iLAotCQkJCQlkbWFfY2hhbl9uYW1lKGhvc3QtPmRtYS5jaGFuKSk7Ci0KLQkJaG9zdC0+ZG1hX2NvbmYuc3JjX2FkZHIgPSBob3N0LT5tYXBiYXNlICsgQVRNQ0lfUkRSOwotCQlob3N0LT5kbWFfY29uZi5zcmNfYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOwotCQlob3N0LT5kbWFfY29uZi5zcmNfbWF4YnVyc3QgPSAxOwotCQlob3N0LT5kbWFfY29uZi5kc3RfYWRkciA9IGhvc3QtPm1hcGJhc2UgKyBBVE1DSV9URFI7Ci0JCWhvc3QtPmRtYV9jb25mLmRzdF9hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7Ci0JCWhvc3QtPmRtYV9jb25mLmRzdF9tYXhidXJzdCA9IDE7Ci0JCWhvc3QtPmRtYV9jb25mLmRldmljZV9mYyA9IGZhbHNlOwotCQlyZXR1cm4gdHJ1ZTsKLQl9CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yMzIxLDcgKzIyOTgsNyBAQAogICogSFNNQ0kgcHJvdmlkZXMgRE1BIHN1cHBvcnQgYW5kIGEgbmV3IGNvbmZpZyByZWdpc3RlciBidXQgbm8gbW9yZSBzdXBwb3J0cwogICogUERDLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgYXRtY2lfZ2V0X2NhcChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KQorc3RhdGljIHZvaWQgYXRtY2lfZ2V0X2NhcChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KQogewogCXVuc2lnbmVkIGludCB2ZXJzaW9uOwogCkBAIC0yMzcwLDcgKzIzNDcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgYXRtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgYXRtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEJKnBkYXRhOwogCXN0cnVjdCBhdG1lbF9tY2kJCSpob3N0OwpAQCAtMjQxNywxOSArMjM5NCwyMyBAQAogCiAJYXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0NSLCBBVE1DSV9DUl9TV1JTVCk7CiAJaG9zdC0+YnVzX2h6ID0gY2xrX2dldF9yYXRlKGhvc3QtPm1jayk7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPm1jayk7CiAKIAlob3N0LT5tYXBiYXNlID0gcmVncy0+c3RhcnQ7CiAKIAl0YXNrbGV0X2luaXQoJmhvc3QtPnRhc2tsZXQsIGF0bWNpX3Rhc2tsZXRfZnVuYywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWNpX2ludGVycnVwdCwgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIGhvc3QpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+bWNrKTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAkvKiBHZXQgTUNJIGNhcGFiaWxpdGllcyBhbmQgc2V0IG9wZXJhdGlvbnMgYWNjb3JkaW5nIHRvIGl0ICovCiAJYXRtY2lfZ2V0X2NhcChob3N0KTsKLQlpZiAoYXRtY2lfY29uZmlndXJlX2RtYShob3N0KSkgeworCXJldCA9IGF0bWNpX2NvbmZpZ3VyZV9kbWEoaG9zdCk7CisJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKQorCQlnb3RvIGVycl9kbWFfcHJvYmVfZGVmZXI7CisJaWYgKHJldCA9PSAwKSB7CiAJCWhvc3QtPnByZXBhcmVfZGF0YSA9ICZhdG1jaV9wcmVwYXJlX2RhdGFfZG1hOwogCQlob3N0LT5zdWJtaXRfZGF0YSA9ICZhdG1jaV9zdWJtaXRfZGF0YV9kbWE7CiAJCWhvc3QtPnN0b3BfdHJhbnNmZXIgPSAmYXRtY2lfc3RvcF90cmFuc2Zlcl9kbWE7CkBAIC0yNDQ5LDYgKzI0MzAsMTIgQEAKIAogCXNldHVwX3RpbWVyKCZob3N0LT50aW1lciwgYXRtY2lfdGltZW91dF90aW1lciwgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CiAKKwlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnBkZXYtPmRldiwgQVVUT1NVU1BFTkRfREVMQVkpOworCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCiAJLyogV2UgbmVlZCBhdCBsZWFzdCBvbmUgc2xvdCB0byBzdWNjZWVkICovCiAJbnJfc2xvdHMgPSAwOwogCXJldCA9IC1FTk9ERVY7CkBAIC0yNDkxLDYgKzI0NzgsOSBAQAogCQkJIkF0bWVsIE1DSSBjb250cm9sbGVyIGF0IDB4JTA4bHggaXJxICVkLCAldSBzbG90c1xuIiwKIAkJCWhvc3QtPm1hcGJhc2UsIGlycSwgbnJfc2xvdHMpOwogCisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeSgmaG9zdC0+cGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKKwogCXJldHVybiAwOwogCiBlcnJfZG1hX2FsbG9jOgpAQCAtMjQ5OSwxOCArMjQ4OSwyNiBAQAogCQkJYXRtY2lfY2xlYW51cF9zbG90KGhvc3QtPnNsb3RbaV0sIGkpOwogCX0KIGVycl9pbml0X3Nsb3Q6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPm1jayk7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOworCiAJZGVsX3RpbWVyX3N5bmMoJmhvc3QtPnRpbWVyKTsKLQlpZiAoaG9zdC0+ZG1hLmNoYW4pCisJaWYgKCFJU19FUlIoaG9zdC0+ZG1hLmNoYW4pKQogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGhvc3QtPmRtYS5jaGFuKTsKK2Vycl9kbWFfcHJvYmVfZGVmZXI6CiAJZnJlZV9pcnEoaXJxLCBob3N0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBhdG1jaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgYXRtY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGF0bWVsX21jaQkqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXVuc2lnbmVkIGludAkJaTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CisKIAlpZiAoaG9zdC0+YnVmZmVyKQogCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBob3N0LT5idWZfc2l6ZSwKIAkJICAgICAgICAgICAgICAgICAgaG9zdC0+YnVmZmVyLCBob3N0LT5idWZfcGh5c19hZGRyKTsKQEAgLTI1MjAsNDEgKzI1MTgsNjIgQEAKIAkJCWF0bWNpX2NsZWFudXBfc2xvdChob3N0LT5zbG90W2ldLCBpKTsKIAl9CiAKLQljbGtfcHJlcGFyZV9lbmFibGUoaG9zdC0+bWNrKTsKIAlhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSURSLCB+MFVMKTsKIAlhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfQ1IsIEFUTUNJX0NSX01DSURJUyk7CiAJYXRtY2lfcmVhZGwoaG9zdCwgQVRNQ0lfU1IpOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5tY2spOwogCiAJZGVsX3RpbWVyX3N5bmMoJmhvc3QtPnRpbWVyKTsKLQlpZiAoaG9zdC0+ZG1hLmNoYW4pCisJaWYgKCFJU19FUlIoaG9zdC0+ZG1hLmNoYW4pKQogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGhvc3QtPmRtYS5jaGFuKTsKIAogCWZyZWVfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIGhvc3QpOwogCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPm1jayk7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXRtY2lfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXRtZWxfbWNpICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+bWNrKTsKKworCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1jaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF0bWVsX21jaSAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcGluY3RybF9wbV9zZWxlY3RfZGVmYXVsdF9zdGF0ZShkZXYpOworCisJcmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5tY2spOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBhdG1jaV9kZXZfcG1fb3BzID0geworCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZCwKKwkJCQlwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSkKKwlTRVRfUE1fUlVOVElNRV9QTV9PUFMoYXRtY2lfcnVudGltZV9zdXNwZW5kLCBhdG1jaV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWNpX2RyaXZlciA9IHsKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKGF0bWNpX3JlbW92ZSksCisJLnByb2JlCQk9IGF0bWNpX3Byb2JlLAorCS5yZW1vdmUJCT0gYXRtY2lfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKIAkJLm9mX21hdGNoX3RhYmxlCT0gb2ZfbWF0Y2hfcHRyKGF0bWNpX2R0X2lkcyksCisJCS5wbQkJPSAmYXRtY2lfZGV2X3BtX29wcywKIAl9LAogfTsKLQotc3RhdGljIGludCBfX2luaXQgYXRtY2lfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0bWNpX2RyaXZlciwgYXRtY2lfcHJvYmUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXRtY2lfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1jaV9kcml2ZXIpOwotfQotCi1sYXRlX2luaXRjYWxsKGF0bWNpX2luaXQpOyAvKiB0cnkgdG8gbG9hZCBhZnRlciBkbWEgZHJpdmVyIHdoZW4gYnVpbHQtaW4gKi8KLW1vZHVsZV9leGl0KGF0bWNpX2V4aXQpOworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhdG1jaV9kcml2ZXIpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkF0bWVsIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gKEF0bWVsKSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtZXh5bm9zLmMgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYwppbmRleCAwZmJjNTNhLi41MDkzNjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYwpAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBOVU1fUElOUyh4KQkJCSh4ICsgMikKIAogI2RlZmluZSBTRE1NQ19DTEtTRUwJCQkweDA5QworI2RlZmluZSBTRE1NQ19DTEtTRUw2NAkJCTB4MEE4CiAjZGVmaW5lIFNETU1DX0NMS1NFTF9DQ0xLX1NBTVBMRSh4KQkoKCh4KSAmIDcpIDw8IDApCiAjZGVmaW5lIFNETU1DX0NMS1NFTF9DQ0xLX0RSSVZFKHgpCSgoKHgpICYgNykgPDwgMTYpCiAjZGVmaW5lIFNETU1DX0NMS1NFTF9DQ0xLX0RJVklERVIoeCkJKCgoeCkgJiA3KSA8PCAyNCkKQEAgLTY1LDYgKzY2LDggQEAKIAlEV19NQ0lfVFlQRV9FWFlOT1M1MjUwLAogCURXX01DSV9UWVBFX0VYWU5PUzU0MjAsCiAJRFdfTUNJX1RZUEVfRVhZTk9TNTQyMF9TTVUsCisJRFdfTUNJX1RZUEVfRVhZTk9TNywKKwlEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSwKIH07CiAKIC8qIEV4eW5vcyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBkcml2ZXIgcHJpdmF0ZSBkYXRhICovCkBAIC05NSw2ICs5OCwxMiBAQAogCX0sIHsKIAkJLmNvbXBhdGlibGUJPSAic2Ftc3VuZyxleHlub3M1NDIwLWR3LW1zaGMtc211IiwKIAkJLmN0cmxfdHlwZQk9IERXX01DSV9UWVBFX0VYWU5PUzU0MjBfU01VLAorCX0sIHsKKwkJLmNvbXBhdGlibGUJPSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMiLAorCQkuY3RybF90eXBlCT0gRFdfTUNJX1RZUEVfRVhZTk9TNywKKwl9LCB7CisJCS5jb21wYXRpYmxlCT0gInNhbXN1bmcsZXh5bm9zNy1kdy1tc2hjLXNtdSIsCisJCS5jdHJsX3R5cGUJPSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSwKIAl9LAogfTsKIApAQCAtMTAyLDcgKzExMSw4IEBACiB7CiAJc3RydWN0IGR3X21jaV9leHlub3NfcHJpdl9kYXRhICpwcml2ID0gaG9zdC0+cHJpdjsKIAotCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNTQyMF9TTVUpIHsKKwlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzU0MjBfU01VIHx8CisJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkgewogCQltY2lfd3JpdGVsKGhvc3QsIE1QU0JFR0lOMCwgMCk7CiAJCW1jaV93cml0ZWwoaG9zdCwgTVBTRU5EMCwgRFdNQ0lfQkxPQ0tfTlVNKTsKIAkJbWNpX3dyaXRlbChob3N0LCBNUFNDVFJMMCwgRFdNQ0lfTVBTQ1RSTF9TRUNVUkVfV1JJVEVfQklUIHwKQEAgLTE1MywxMSArMTYzLDIyIEBACiBzdGF0aWMgaW50IGR3X21jaV9leHlub3NfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGR3X21jaV9leHlub3NfcHJpdl9kYXRhICpwcml2ID0gaG9zdC0+cHJpdjsKIAl1MzIgY2xrc2VsOwogCi0JY2xrc2VsID0gbWNpX3JlYWRsKGhvc3QsIENMS1NFTCk7Ci0JaWYgKGNsa3NlbCAmIFNETU1DX0NMS1NFTF9XQUtFVVBfSU5UKQotCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgY2xrc2VsKTsKKwlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzcgfHwKKwkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKQorCQljbGtzZWwgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMNjQpOworCWVsc2UKKwkJY2xrc2VsID0gbWNpX3JlYWRsKGhvc3QsIENMS1NFTCk7CisKKwlpZiAoY2xrc2VsICYgU0RNTUNfQ0xLU0VMX1dBS0VVUF9JTlQpIHsKKwkJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTDY0LCBjbGtzZWwpOworCQllbHNlCisJCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgY2xrc2VsKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSw2ICsxOTAsNyBAQAogCiBzdGF0aWMgdm9pZCBkd19tY2lfZXh5bm9zX3ByZXBhcmVfY29tbWFuZChzdHJ1Y3QgZHdfbWNpICpob3N0LCB1MzIgKmNtZHIpCiB7CisJc3RydWN0IGR3X21jaV9leHlub3NfcHJpdl9kYXRhICpwcml2ID0gaG9zdC0+cHJpdjsKIAkvKgogCSAqIEV4eW5vczQ0MTIgYW5kIEV4eW5vczUyNTAgZXh0ZW5kcyB0aGUgdXNlIG9mIENNRCByZWdpc3RlciB3aXRoIHRoZQogCSAqIHVzZSBvZiBiaXQgMjkgKHdoaWNoIGlzIHJlc2VydmVkIG9uIHN0YW5kYXJkIE1TSEMgY29udHJvbGxlcnMpIGZvcgpAQCAtMTc2LDggKzE5OCwxNCBAQAogCSAqIEhPTEQgcmVnaXN0ZXIgc2hvdWxkIGJlIGJ5cGFzc2VkIGluIGNhc2UgdGhlcmUgaXMgbm8gcGhhc2Ugc2hpZnQKIAkgKiBhcHBsaWVkIG9uIENNRC9EQVRBIHRoYXQgaXMgc2VudCB0byB0aGUgY2FyZC4KIAkgKi8KLQlpZiAoU0RNTUNfQ0xLU0VMX0dFVF9EUlZfV0QzKG1jaV9yZWFkbChob3N0LCBDTEtTRUwpKSkKLQkJKmNtZHIgfD0gU0RNTUNfQ01EX1VTRV9IT0xEX1JFRzsKKwlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzcgfHwKKwkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKSB7CisJCWlmIChTRE1NQ19DTEtTRUxfR0VUX0RSVl9XRDMobWNpX3JlYWRsKGhvc3QsIENMS1NFTDY0KSkpCisJCQkqY21kciB8PSBTRE1NQ19DTURfVVNFX0hPTERfUkVHOworCSB9IGVsc2UgeworCQlpZiAoU0RNTUNfQ0xLU0VMX0dFVF9EUlZfV0QzKG1jaV9yZWFkbChob3N0LCBDTEtTRUwpKSkKKwkJCSpjbWRyIHw9IFNETU1DX0NNRF9VU0VfSE9MRF9SRUc7CisJfQogfQogCiBzdGF0aWMgdm9pZCBkd19tY2lfZXh5bm9zX3NldF9pb3Moc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19pb3MgKmlvcykKQEAgLTE4OCwxMiArMjE2LDIwIEBACiAJdTggZGl2ID0gcHJpdi0+Y2l1X2RpdiArIDE7CiAKIAlpZiAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfRERSNTIpIHsKLQkJbWNpX3dyaXRlbChob3N0LCBDTEtTRUwsIHByaXYtPmRkcl90aW1pbmcpOworCQlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzcgfHwKKwkJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMNjQsIHByaXYtPmRkcl90aW1pbmcpOworCQllbHNlCisJCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgcHJpdi0+ZGRyX3RpbWluZyk7CiAJCS8qIFNob3VsZCBiZSBkb3VibGUgcmF0ZSBmb3IgRERSIG1vZGUgKi8KIAkJaWYgKGlvcy0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfOCkKIAkJCXdhbnRlZCA8PD0gMTsKIAl9IGVsc2UgewotCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgcHJpdi0+c2RyX3RpbWluZyk7CisJCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKQorCQkJbWNpX3dyaXRlbChob3N0LCBDTEtTRUw2NCwgcHJpdi0+c2RyX3RpbWluZyk7CisJCWVsc2UKKwkJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBwcml2LT5zZHJfdGltaW5nKTsKIAl9CiAKIAkvKiBEb24ndCBjYXJlIGlmIHdhbnRlZCBjbG9jayBpcyB6ZXJvICovCkBAIC0yNjUsMjYgKzMwMSw1MSBAQAogCiBzdGF0aWMgaW5saW5lIHU4IGR3X21jaV9leHlub3NfZ2V0X2Nsa3NtcGwoc3RydWN0IGR3X21jaSAqaG9zdCkKIHsKLQlyZXR1cm4gU0RNTUNfQ0xLU0VMX0NDTEtfU0FNUExFKG1jaV9yZWFkbChob3N0LCBDTEtTRUwpKTsKKwlzdHJ1Y3QgZHdfbWNpX2V4eW5vc19wcml2X2RhdGEgKnByaXYgPSBob3N0LT5wcml2OworCisJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJcmV0dXJuIFNETU1DX0NMS1NFTF9DQ0xLX1NBTVBMRShtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMNjQpKTsKKwllbHNlCisJCXJldHVybiBTRE1NQ19DTEtTRUxfQ0NMS19TQU1QTEUobWNpX3JlYWRsKGhvc3QsIENMS1NFTCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHdfbWNpX2V4eW5vc19zZXRfY2xrc21wbChzdHJ1Y3QgZHdfbWNpICpob3N0LCB1OCBzYW1wbGUpCiB7CiAJdTMyIGNsa3NlbDsKLQljbGtzZWwgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMKTsKKwlzdHJ1Y3QgZHdfbWNpX2V4eW5vc19wcml2X2RhdGEgKnByaXYgPSBob3N0LT5wcml2OworCisJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJY2xrc2VsID0gbWNpX3JlYWRsKGhvc3QsIENMS1NFTDY0KTsKKwllbHNlCisJCWNsa3NlbCA9IG1jaV9yZWFkbChob3N0LCBDTEtTRUwpOwogCWNsa3NlbCA9IChjbGtzZWwgJiB+MHg3KSB8IFNETU1DX0NMS1NFTF9DQ0xLX1NBTVBMRShzYW1wbGUpOwotCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBjbGtzZWwpOworCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMNjQsIGNsa3NlbCk7CisJZWxzZQorCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgY2xrc2VsKTsKIH0KIAogc3RhdGljIGlubGluZSB1OCBkd19tY2lfZXh5bm9zX21vdmVfbmV4dF9jbGtzbXBsKHN0cnVjdCBkd19tY2kgKmhvc3QpCiB7CisJc3RydWN0IGR3X21jaV9leHlub3NfcHJpdl9kYXRhICpwcml2ID0gaG9zdC0+cHJpdjsKIAl1MzIgY2xrc2VsOwogCXU4IHNhbXBsZTsKIAotCWNsa3NlbCA9IG1jaV9yZWFkbChob3N0LCBDTEtTRUwpOworCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCWNsa3NlbCA9IG1jaV9yZWFkbChob3N0LCBDTEtTRUw2NCk7CisJZWxzZQorCQljbGtzZWwgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMKTsKIAlzYW1wbGUgPSAoY2xrc2VsICsgMSkgJiAweDc7CiAJY2xrc2VsID0gKGNsa3NlbCAmIH4weDcpIHwgc2FtcGxlOwotCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBjbGtzZWwpOworCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMNjQsIGNsa3NlbCk7CisJZWxzZQorCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgY2xrc2VsKTsKIAlyZXR1cm4gc2FtcGxlOwogfQogCkBAIC00MTEsNiArNDcyLDEwIEBACiAJCQkuZGF0YSA9ICZleHlub3NfZHJ2X2RhdGEsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MjAtZHctbXNoYy1zbXUiLAogCQkJLmRhdGEgPSAmZXh5bm9zX2Rydl9kYXRhLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMiLAorCQkJLmRhdGEgPSAmZXh5bm9zX2Rydl9kYXRhLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMtc211IiwKKwkJCS5kYXRhID0gJmV4eW5vc19kcnZfZGF0YSwgfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkd19tY2lfZXh5bm9zX21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXBsdGZtLmMgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1wbHRmbS5jCmluZGV4IDhiNjU3MjEuLmVjNmRiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXBsdGZtLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcGx0Zm0uYwpAQCAtMzUsNiArMzUsMTAgQEAKIAkucHJlcGFyZV9jb21tYW5kCT0gZHdfbWNpX3BsdGZtX3ByZXBhcmVfY29tbWFuZCwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHdfbWNpX2Rydl9kYXRhIHBpc3RhY2hpb19kcnZfZGF0YSA9IHsKKwkucHJlcGFyZV9jb21tYW5kCT0gZHdfbWNpX3BsdGZtX3ByZXBhcmVfY29tbWFuZCwKK307CisKIGludCBkd19tY2lfcGx0Zm1fcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgY29uc3Qgc3RydWN0IGR3X21jaV9kcnZfZGF0YSAqZHJ2X2RhdGEpCiB7CkBAIC05MCw2ICs5NCw4IEBACiAJeyAuY29tcGF0aWJsZSA9ICJzbnBzLGR3LW1zaGMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLWR3LW1zaGMiLAogCQkuZGF0YSA9ICZzb2NmcGdhX2Rydl9kYXRhIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpbWcscGlzdGFjaGlvLWR3LW1zaGMiLAorCQkuZGF0YSA9ICZwaXN0YWNoaW9fZHJ2X2RhdGEgfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkd19tY2lfcGx0Zm1fbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMKaW5kZXggZjBjMmNiMS4uNTY1MGFjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1yb2NrY2hpcC5jCkBAIC0zNyw2ICszNyw5IEBACiAJdW5zaWduZWQgaW50IGNjbGtpbjsKIAl1MzIgYnVzX2h6OwogCisJaWYgKGlvcy0+Y2xvY2sgPT0gMCkKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBjY2xraW46IHNvdXJjZSBjbG9jayBvZiBtbWMgY29udHJvbGxlcgogCSAqIGJ1c19oejogY2FyZCBpbnRlcmZhY2UgY2xvY2sgZ2VuZXJhdGVkIGJ5IENMS0dFTgpAQCAtNjUsMTQgKzY4LDI0IEBACiAJfQogfQogCitzdGF0aWMgaW50IGR3X21jaV9yb2NrY2hpcF9pbml0KHN0cnVjdCBkd19tY2kgKmhvc3QpCit7CisJLyogSXQgaXMgc2xvdCA4IG9uIFJvY2tjaGlwIFNvQ3MgKi8KKwlob3N0LT5zZGlvX2lkMCA9IDg7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgcmsyOTI4X2Rydl9kYXRhID0gewogCS5wcmVwYXJlX2NvbW1hbmQgICAgICAgID0gZHdfbWNpX3JvY2tjaGlwX3ByZXBhcmVfY29tbWFuZCwKKwkuaW5pdAkJCT0gZHdfbWNpX3JvY2tjaGlwX2luaXQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGR3X21jaV9kcnZfZGF0YSByazMyODhfZHJ2X2RhdGEgPSB7CiAJLnByZXBhcmVfY29tbWFuZCAgICAgICAgPSBkd19tY2lfcm9ja2NoaXBfcHJlcGFyZV9jb21tYW5kLAogCS5zZXRfaW9zCQk9IGR3X21jaV9yazMyODhfc2V0X2lvcywKIAkuc2V0dXBfY2xvY2sgICAgPSBkd19tY2lfcmszMjg4X3NldHVwX2Nsb2NrLAorCS5pbml0CQkJPSBkd19tY2lfcm9ja2NoaXBfaW5pdCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3X21jaV9yb2NrY2hpcF9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMKaW5kZXggNjlmMGNjNi4uNjdjMDQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2R3X21tYy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zbG90LWdwaW8uaD4KQEAgLTYyLDYgKzYxLDI0IEBACiAJCQkJIFNETU1DX0lETUFDX0lOVF9GQkUgfCBTRE1NQ19JRE1BQ19JTlRfUkkgfCBcCiAJCQkJIFNETU1DX0lETUFDX0lOVF9USSkKIAorc3RydWN0IGlkbWFjX2Rlc2NfNjRhZGRyIHsKKwl1MzIJCWRlczA7CS8qIENvbnRyb2wgRGVzY3JpcHRvciAqLworCisJdTMyCQlkZXMxOwkvKiBSZXNlcnZlZCAqLworCisJdTMyCQlkZXMyOwkvKkJ1ZmZlciBzaXplcyAqLworI2RlZmluZSBJRE1BQ182NEFERFJfU0VUX0JVRkZFUjFfU0laRShkLCBzKSBcCisJKChkKS0+ZGVzMiA9ICgoZCktPmRlczIgJiAweDAzZmZlMDAwKSB8ICgocykgJiAweDFmZmYpKQorCisJdTMyCQlkZXMzOwkvKiBSZXNlcnZlZCAqLworCisJdTMyCQlkZXM0OwkvKiBMb3dlciAzMi1iaXRzIG9mIEJ1ZmZlciBBZGRyZXNzIFBvaW50ZXIgMSovCisJdTMyCQlkZXM1OwkvKiBVcHBlciAzMi1iaXRzIG9mIEJ1ZmZlciBBZGRyZXNzIFBvaW50ZXIgMSovCisKKwl1MzIJCWRlczY7CS8qIExvd2VyIDMyLWJpdHMgb2YgTmV4dCBEZXNjcmlwdG9yIEFkZHJlc3MgKi8KKwl1MzIJCWRlczc7CS8qIFVwcGVyIDMyLWJpdHMgb2YgTmV4dCBEZXNjcmlwdG9yIEFkZHJlc3MgKi8KK307CisKIHN0cnVjdCBpZG1hY19kZXNjIHsKIAl1MzIJCWRlczA7CS8qIENvbnRyb2wgRGVzY3JpcHRvciAqLwogI2RlZmluZSBJRE1BQ19ERVMwX0RJQwlCSVQoMSkKQEAgLTgzLDYgKzEwMCw3IEBACiAjZW5kaWYgLyogQ09ORklHX01NQ19EV19JRE1BQyAqLwogCiBzdGF0aWMgYm9vbCBkd19tY2lfcmVzZXQoc3RydWN0IGR3X21jaSAqaG9zdCk7CitzdGF0aWMgYm9vbCBkd19tY2lfY3RybF9yZXNldChzdHJ1Y3QgZHdfbWNpICpob3N0LCB1MzIgcmVzZXQpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiBzdGF0aWMgaW50IGR3X21jaV9yZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCkBAIC00MTQsMzEgKzQzMiw2NyBAQAogCQkJCSAgICB1bnNpZ25lZCBpbnQgc2dfbGVuKQogewogCWludCBpOwotCXN0cnVjdCBpZG1hY19kZXNjICpkZXNjID0gaG9zdC0+c2dfY3B1OworCWlmIChob3N0LT5kbWFfNjRiaXRfYWRkcmVzcyA9PSAxKSB7CisJCXN0cnVjdCBpZG1hY19kZXNjXzY0YWRkciAqZGVzYyA9IGhvc3QtPnNnX2NwdTsKIAotCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKywgZGVzYysrKSB7Ci0JCXVuc2lnbmVkIGludCBsZW5ndGggPSBzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSk7Ci0JCXUzMiBtZW1fYWRkciA9IHNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKywgZGVzYysrKSB7CisJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gc2dfZG1hX2xlbigmZGF0YS0+c2dbaV0pOworCQkJdTY0IG1lbV9hZGRyID0gc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKTsKIAotCQkvKiBTZXQgdGhlIE9XTiBiaXQgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXNjcmlwdG9yICovCi0JCWRlc2MtPmRlczAgPSBJRE1BQ19ERVMwX09XTiB8IElETUFDX0RFUzBfRElDIHwgSURNQUNfREVTMF9DSDsKKwkJCS8qCisJCQkgKiBTZXQgdGhlIE9XTiBiaXQgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcworCQkJICogZGVzY3JpcHRvcgorCQkJICovCisJCQlkZXNjLT5kZXMwID0gSURNQUNfREVTMF9PV04gfCBJRE1BQ19ERVMwX0RJQyB8CisJCQkJCQlJRE1BQ19ERVMwX0NIOworCQkJLyogQnVmZmVyIGxlbmd0aCAqLworCQkJSURNQUNfNjRBRERSX1NFVF9CVUZGRVIxX1NJWkUoZGVzYywgbGVuZ3RoKTsKIAotCQkvKiBCdWZmZXIgbGVuZ3RoICovCi0JCUlETUFDX1NFVF9CVUZGRVIxX1NJWkUoZGVzYywgbGVuZ3RoKTsKKwkJCS8qIFBoeXNpY2FsIGFkZHJlc3MgdG8gRE1BIHRvL2Zyb20gKi8KKwkJCWRlc2MtPmRlczQgPSBtZW1fYWRkciAmIDB4ZmZmZmZmZmY7CisJCQlkZXNjLT5kZXM1ID0gbWVtX2FkZHIgPj4gMzI7CisJCX0KIAotCQkvKiBQaHlzaWNhbCBhZGRyZXNzIHRvIERNQSB0by9mcm9tICovCi0JCWRlc2MtPmRlczIgPSBtZW1fYWRkcjsKKwkJLyogU2V0IGZpcnN0IGRlc2NyaXB0b3IgKi8KKwkJZGVzYyA9IGhvc3QtPnNnX2NwdTsKKwkJZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0ZEOworCisJCS8qIFNldCBsYXN0IGRlc2NyaXB0b3IgKi8KKwkJZGVzYyA9IGhvc3QtPnNnX2NwdSArIChpIC0gMSkgKgorCQkJCXNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzY182NGFkZHIpOworCQlkZXNjLT5kZXMwICY9IH4oSURNQUNfREVTMF9DSCB8IElETUFDX0RFUzBfRElDKTsKKwkJZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0xEOworCisJfSBlbHNlIHsKKwkJc3RydWN0IGlkbWFjX2Rlc2MgKmRlc2MgPSBob3N0LT5zZ19jcHU7CisKKwkJZm9yIChpID0gMDsgaSA8IHNnX2xlbjsgaSsrLCBkZXNjKyspIHsKKwkJCXVuc2lnbmVkIGludCBsZW5ndGggPSBzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSk7CisJCQl1MzIgbWVtX2FkZHIgPSBzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbaV0pOworCisJCQkvKgorCQkJICogU2V0IHRoZSBPV04gYml0IGFuZCBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoaXMKKwkJCSAqIGRlc2NyaXB0b3IKKwkJCSAqLworCQkJZGVzYy0+ZGVzMCA9IElETUFDX0RFUzBfT1dOIHwgSURNQUNfREVTMF9ESUMgfAorCQkJCQkJSURNQUNfREVTMF9DSDsKKwkJCS8qIEJ1ZmZlciBsZW5ndGggKi8KKwkJCUlETUFDX1NFVF9CVUZGRVIxX1NJWkUoZGVzYywgbGVuZ3RoKTsKKworCQkJLyogUGh5c2ljYWwgYWRkcmVzcyB0byBETUEgdG8vZnJvbSAqLworCQkJZGVzYy0+ZGVzMiA9IG1lbV9hZGRyOworCQl9CisKKwkJLyogU2V0IGZpcnN0IGRlc2NyaXB0b3IgKi8KKwkJZGVzYyA9IGhvc3QtPnNnX2NwdTsKKwkJZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0ZEOworCisJCS8qIFNldCBsYXN0IGRlc2NyaXB0b3IgKi8KKwkJZGVzYyA9IGhvc3QtPnNnX2NwdSArIChpIC0gMSkgKiBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2MpOworCQlkZXNjLT5kZXMwICY9IH4oSURNQUNfREVTMF9DSCB8IElETUFDX0RFUzBfRElDKTsKKwkJZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0xEOwogCX0KIAotCS8qIFNldCBmaXJzdCBkZXNjcmlwdG9yICovCi0JZGVzYyA9IGhvc3QtPnNnX2NwdTsKLQlkZXNjLT5kZXMwIHw9IElETUFDX0RFUzBfRkQ7Ci0KLQkvKiBTZXQgbGFzdCBkZXNjcmlwdG9yICovCi0JZGVzYyA9IGhvc3QtPnNnX2NwdSArIChpIC0gMSkgKiBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2MpOwotCWRlc2MtPmRlczAgJj0gfihJRE1BQ19ERVMwX0NIIHwgSURNQUNfREVTMF9ESUMpOwotCWRlc2MtPmRlczAgfD0gSURNQUNfREVTMF9MRDsKLQogCXdtYigpOwogfQogCkBAIC00NDgsNiArNTAyLDEwIEBACiAKIAlkd19tY2lfdHJhbnNsYXRlX3NnbGlzdChob3N0LCBob3N0LT5kYXRhLCBzZ19sZW4pOwogCisJLyogTWFrZSBzdXJlIHRvIHJlc2V0IERNQSBpbiBjYXNlIHdlIGRpZCBQSU8gYmVmb3JlIHRoaXMgKi8KKwlkd19tY2lfY3RybF9yZXNldChob3N0LCBTRE1NQ19DVFJMX0RNQV9SRVNFVCk7CisJZHdfbWNpX2lkbWFjX3Jlc2V0KGhvc3QpOworCiAJLyogU2VsZWN0IElETUFDIGludGVyZmFjZSAqLwogCXRlbXAgPSBtY2lfcmVhZGwoaG9zdCwgQ1RSTCk7CiAJdGVtcCB8PSBTRE1NQ19DVFJMX1VTRV9JRE1BQzsKQEAgLTQ2NiwyOSArNTI0LDcxIEBACiAKIHN0YXRpYyBpbnQgZHdfbWNpX2lkbWFjX2luaXQoc3RydWN0IGR3X21jaSAqaG9zdCkKIHsKLQlzdHJ1Y3QgaWRtYWNfZGVzYyAqcDsKIAlpbnQgaTsKIAotCS8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgcmluZyBidWZmZXIgKi8KLQlob3N0LT5yaW5nX3NpemUgPSBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2MpOworCWlmIChob3N0LT5kbWFfNjRiaXRfYWRkcmVzcyA9PSAxKSB7CisJCXN0cnVjdCBpZG1hY19kZXNjXzY0YWRkciAqcDsKKwkJLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSByaW5nIGJ1ZmZlciAqLworCQlob3N0LT5yaW5nX3NpemUgPSBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2NfNjRhZGRyKTsKIAotCS8qIEZvcndhcmQgbGluayB0aGUgZGVzY3JpcHRvciBsaXN0ICovCi0JZm9yIChpID0gMCwgcCA9IGhvc3QtPnNnX2NwdTsgaSA8IGhvc3QtPnJpbmdfc2l6ZSAtIDE7IGkrKywgcCsrKQotCQlwLT5kZXMzID0gaG9zdC0+c2dfZG1hICsgKHNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzYykgKiAoaSArIDEpKTsKKwkJLyogRm9yd2FyZCBsaW5rIHRoZSBkZXNjcmlwdG9yIGxpc3QgKi8KKwkJZm9yIChpID0gMCwgcCA9IGhvc3QtPnNnX2NwdTsgaSA8IGhvc3QtPnJpbmdfc2l6ZSAtIDE7CisJCQkJCQkJCWkrKywgcCsrKSB7CisJCQlwLT5kZXM2ID0gKGhvc3QtPnNnX2RtYSArCisJCQkJCShzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2NfNjRhZGRyKSAqCisJCQkJCQkJKGkgKyAxKSkpICYgMHhmZmZmZmZmZjsKIAotCS8qIFNldCB0aGUgbGFzdCBkZXNjcmlwdG9yIGFzIHRoZSBlbmQtb2YtcmluZyBkZXNjcmlwdG9yICovCi0JcC0+ZGVzMyA9IGhvc3QtPnNnX2RtYTsKLQlwLT5kZXMwID0gSURNQUNfREVTMF9FUjsKKwkJCXAtPmRlczcgPSAodTY0KShob3N0LT5zZ19kbWEgKworCQkJCQkoc2l6ZW9mKHN0cnVjdCBpZG1hY19kZXNjXzY0YWRkcikgKgorCQkJCQkJCShpICsgMSkpKSA+PiAzMjsKKwkJCS8qIEluaXRpYWxpemUgcmVzZXJ2ZWQgYW5kIGJ1ZmZlciBzaXplIGZpZWxkcyB0byAiMCIgKi8KKwkJCXAtPmRlczEgPSAwOworCQkJcC0+ZGVzMiA9IDA7CisJCQlwLT5kZXMzID0gMDsKKwkJfQorCisJCS8qIFNldCB0aGUgbGFzdCBkZXNjcmlwdG9yIGFzIHRoZSBlbmQtb2YtcmluZyBkZXNjcmlwdG9yICovCisJCXAtPmRlczYgPSBob3N0LT5zZ19kbWEgJiAweGZmZmZmZmZmOworCQlwLT5kZXM3ID0gKHU2NClob3N0LT5zZ19kbWEgPj4gMzI7CisJCXAtPmRlczAgPSBJRE1BQ19ERVMwX0VSOworCisJfSBlbHNlIHsKKwkJc3RydWN0IGlkbWFjX2Rlc2MgKnA7CisJCS8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgcmluZyBidWZmZXIgKi8KKwkJaG9zdC0+cmluZ19zaXplID0gUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBpZG1hY19kZXNjKTsKKworCQkvKiBGb3J3YXJkIGxpbmsgdGhlIGRlc2NyaXB0b3IgbGlzdCAqLworCQlmb3IgKGkgPSAwLCBwID0gaG9zdC0+c2dfY3B1OyBpIDwgaG9zdC0+cmluZ19zaXplIC0gMTsgaSsrLCBwKyspCisJCQlwLT5kZXMzID0gaG9zdC0+c2dfZG1hICsgKHNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzYykgKgorCQkJCQkJCQkoaSArIDEpKTsKKworCQkvKiBTZXQgdGhlIGxhc3QgZGVzY3JpcHRvciBhcyB0aGUgZW5kLW9mLXJpbmcgZGVzY3JpcHRvciAqLworCQlwLT5kZXMzID0gaG9zdC0+c2dfZG1hOworCQlwLT5kZXMwID0gSURNQUNfREVTMF9FUjsKKwl9CiAKIAlkd19tY2lfaWRtYWNfcmVzZXQoaG9zdCk7CiAKLQkvKiBNYXNrIG91dCBpbnRlcnJ1cHRzIC0gZ2V0IFR4ICYgUnggY29tcGxldGUgb25seSAqLwotCW1jaV93cml0ZWwoaG9zdCwgSURTVFMsIElETUFDX0lOVF9DTFIpOwotCW1jaV93cml0ZWwoaG9zdCwgSURJTlRFTiwgU0RNTUNfSURNQUNfSU5UX05JIHwgU0RNTUNfSURNQUNfSU5UX1JJIHwKLQkJICAgU0RNTUNfSURNQUNfSU5UX1RJKTsKKwlpZiAoaG9zdC0+ZG1hXzY0Yml0X2FkZHJlc3MgPT0gMSkgeworCQkvKiBNYXNrIG91dCBpbnRlcnJ1cHRzIC0gZ2V0IFR4ICYgUnggY29tcGxldGUgb25seSAqLworCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTNjQsIElETUFDX0lOVF9DTFIpOworCQltY2lfd3JpdGVsKGhvc3QsIElESU5URU42NCwgU0RNTUNfSURNQUNfSU5UX05JIHwKKwkJCQlTRE1NQ19JRE1BQ19JTlRfUkkgfCBTRE1NQ19JRE1BQ19JTlRfVEkpOwogCi0JLyogU2V0IHRoZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLwotCW1jaV93cml0ZWwoaG9zdCwgREJBRERSLCBob3N0LT5zZ19kbWEpOworCQkvKiBTZXQgdGhlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJCW1jaV93cml0ZWwoaG9zdCwgREJBRERSTCwgaG9zdC0+c2dfZG1hICYgMHhmZmZmZmZmZik7CisJCW1jaV93cml0ZWwoaG9zdCwgREJBRERSVSwgKHU2NClob3N0LT5zZ19kbWEgPj4gMzIpOworCisJfSBlbHNlIHsKKwkJLyogTWFzayBvdXQgaW50ZXJydXB0cyAtIGdldCBUeCAmIFJ4IGNvbXBsZXRlIG9ubHkgKi8KKwkJbWNpX3dyaXRlbChob3N0LCBJRFNUUywgSURNQUNfSU5UX0NMUik7CisJCW1jaV93cml0ZWwoaG9zdCwgSURJTlRFTiwgU0RNTUNfSURNQUNfSU5UX05JIHwKKwkJCQlTRE1NQ19JRE1BQ19JTlRfUkkgfCBTRE1NQ19JRE1BQ19JTlRfVEkpOworCisJCS8qIFNldCB0aGUgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwkJbWNpX3dyaXRlbChob3N0LCBEQkFERFIsIGhvc3QtPnNnX2RtYSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyNiw2ICs3MjYsMTMgQEAKIAogCVdBUk5fT04oIShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpKTsKIAorCS8qCisJICogQ0RUSFJDVEwgZG9lc24ndCBleGlzdCBwcmlvciB0byAyNDBBIChpbiBmYWN0IHRoYXQgcmVnaXN0ZXIgb2Zmc2V0IGlzCisJICogaW4gdGhlIEZJRk8gcmVnaW9uLCBzbyB3ZSByZWFsbHkgc2hvdWxkbid0IGFjY2VzcyBpdCkuCisJICovCisJaWYgKGhvc3QtPnZlcmlkIDwgRFdfTU1DXzI0MEEpCisJCXJldHVybjsKKwogCWlmIChob3N0LT50aW1pbmcgIT0gTU1DX1RJTUlOR19NTUNfSFMyMDAgJiYKIAkgICAgaG9zdC0+dGltaW5nICE9IE1NQ19USU1JTkdfVUhTX1NEUjEwNCkKIAkJZ290byBkaXNhYmxlOwpAQCAtODE5LDcgKzkyNiw3IEBACiAKIAkJLyogZW5hYmxlIGNsb2NrOyBvbmx5IGxvdyBwb3dlciBpZiBubyBTRElPICovCiAJCWNsa19lbl9hID0gU0RNTUNfQ0xLRU5fRU5BQkxFIDw8IHNsb3QtPmlkOwotCQlpZiAoIShtY2lfcmVhZGwoaG9zdCwgSU5UTUFTSykgJiBTRE1NQ19JTlRfU0RJTyhzbG90LT5pZCkpKQorCQlpZiAoIShtY2lfcmVhZGwoaG9zdCwgSU5UTUFTSykgJiBTRE1NQ19JTlRfU0RJTyhzbG90LT5zZGlvX2lkKSkpCiAJCQljbGtfZW5fYSB8PSBTRE1NQ19DTEtFTl9MT1dfUFdSIDw8IHNsb3QtPmlkOwogCQltY2lfd3JpdGVsKGhvc3QsIENMS0VOQSwgY2xrX2VuX2EpOwogCkBAIC0xMDc1LDcgKzExODIsNyBAQAogCQlyZXQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UobW1jLT5zdXBwbHkudnFtbWMsIG1pbl91diwgbWF4X3V2KTsKIAogCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKCZtbWMtPmNsYXNzX2RldiwKKwkJCWRldl9kYmcoJm1tYy0+Y2xhc3NfZGV2LAogCQkJCQkgIlJlZ3VsYXRvciBzZXQgZXJyb3IgJWQ6ICVkIC0gJWRcbiIsCiAJCQkJCSByZXQsIG1pbl91diwgbWF4X3V2KTsKIAkJCXJldHVybiByZXQ7CkBAIC0xMTgwLDEwICsxMjg3LDEwIEBACiAJCWR3X21jaV9kaXNhYmxlX2xvd19wb3dlcihzbG90KTsKIAogCQltY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssCi0JCQkgICAoaW50X21hc2sgfCBTRE1NQ19JTlRfU0RJTyhzbG90LT5pZCkpKTsKKwkJCSAgIChpbnRfbWFzayB8IFNETU1DX0lOVF9TRElPKHNsb3QtPnNkaW9faWQpKSk7CiAJfSBlbHNlIHsKIAkJbWNpX3dyaXRlbChob3N0LCBJTlRNQVNLLAotCQkJICAgKGludF9tYXNrICYgflNETU1DX0lOVF9TRElPKHNsb3QtPmlkKSkpOworCQkJICAgKGludF9tYXNrICYgflNETU1DX0lOVF9TRElPKHNsb3QtPnNkaW9faWQpKSk7CiAJfQogfQogCkBAIC0xOTU0LDYgKzIwNjEsMjMgQEAKIAl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsKIH0KIAorc3RhdGljIHZvaWQgZHdfbWNpX2hhbmRsZV9jZChzdHJ1Y3QgZHdfbWNpICpob3N0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm51bV9zbG90czsgaSsrKSB7CisJCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IGhvc3QtPnNsb3RbaV07CisKKwkJaWYgKCFzbG90KQorCQkJY29udGludWU7CisKKwkJaWYgKHNsb3QtPm1tYy0+b3BzLT5jYXJkX2V2ZW50KQorCQkJc2xvdC0+bW1jLT5vcHMtPmNhcmRfZXZlbnQoc2xvdC0+bW1jKTsKKwkJbW1jX2RldGVjdF9jaGFuZ2Uoc2xvdC0+bW1jLAorCQkJbXNlY3NfdG9famlmZmllcyhob3N0LT5wZGF0YS0+ZGV0ZWN0X2RlbGF5X21zKSk7CisJfQorfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgZHdfbWNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGR3X21jaSAqaG9zdCA9IGRldl9pZDsKQEAgLTIwMjksMTQgKzIxNTMsMTUgQEAKIAogCQlpZiAocGVuZGluZyAmIFNETU1DX0lOVF9DRCkgewogCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCBTRE1NQ19JTlRfQ0QpOwotCQkJcXVldWVfd29yayhob3N0LT5jYXJkX3dvcmtxdWV1ZSwgJmhvc3QtPmNhcmRfd29yayk7CisJCQlkd19tY2lfaGFuZGxlX2NkKGhvc3QpOwogCQl9CiAKIAkJLyogSGFuZGxlIFNESU8gSW50ZXJydXB0cyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bnVtX3Nsb3RzOyBpKyspIHsKIAkJCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IGhvc3QtPnNsb3RbaV07Ci0JCQlpZiAocGVuZGluZyAmIFNETU1DX0lOVF9TRElPKGkpKSB7Ci0JCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCBTRE1NQ19JTlRfU0RJTyhpKSk7CisJCQlpZiAocGVuZGluZyAmIFNETU1DX0lOVF9TRElPKHNsb3QtPnNkaW9faWQpKSB7CisJCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLAorCQkJCQkgICBTRE1NQ19JTlRfU0RJTyhzbG90LT5zZGlvX2lkKSk7CiAJCQkJbW1jX3NpZ25hbF9zZGlvX2lycShzbG90LT5tbWMpOwogCQkJfQogCQl9CkBAIC0yMDQ1LDk5ICsyMTcwLDI4IEBACiAKICNpZmRlZiBDT05GSUdfTU1DX0RXX0lETUFDCiAJLyogSGFuZGxlIERNQSBpbnRlcnJ1cHRzICovCi0JcGVuZGluZyA9IG1jaV9yZWFkbChob3N0LCBJRFNUUyk7Ci0JaWYgKHBlbmRpbmcgJiAoU0RNTUNfSURNQUNfSU5UX1RJIHwgU0RNTUNfSURNQUNfSU5UX1JJKSkgewotCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTLCBTRE1NQ19JRE1BQ19JTlRfVEkgfCBTRE1NQ19JRE1BQ19JTlRfUkkpOwotCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTLCBTRE1NQ19JRE1BQ19JTlRfTkkpOwotCQlob3N0LT5kbWFfb3BzLT5jb21wbGV0ZShob3N0KTsKKwlpZiAoaG9zdC0+ZG1hXzY0Yml0X2FkZHJlc3MgPT0gMSkgeworCQlwZW5kaW5nID0gbWNpX3JlYWRsKGhvc3QsIElEU1RTNjQpOworCQlpZiAocGVuZGluZyAmIChTRE1NQ19JRE1BQ19JTlRfVEkgfCBTRE1NQ19JRE1BQ19JTlRfUkkpKSB7CisJCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTNjQsIFNETU1DX0lETUFDX0lOVF9USSB8CisJCQkJCQkJU0RNTUNfSURNQUNfSU5UX1JJKTsKKwkJCW1jaV93cml0ZWwoaG9zdCwgSURTVFM2NCwgU0RNTUNfSURNQUNfSU5UX05JKTsKKwkJCWhvc3QtPmRtYV9vcHMtPmNvbXBsZXRlKGhvc3QpOworCQl9CisJfSBlbHNlIHsKKwkJcGVuZGluZyA9IG1jaV9yZWFkbChob3N0LCBJRFNUUyk7CisJCWlmIChwZW5kaW5nICYgKFNETU1DX0lETUFDX0lOVF9USSB8IFNETU1DX0lETUFDX0lOVF9SSSkpIHsKKwkJCW1jaV93cml0ZWwoaG9zdCwgSURTVFMsIFNETU1DX0lETUFDX0lOVF9USSB8CisJCQkJCQkJU0RNTUNfSURNQUNfSU5UX1JJKTsKKwkJCW1jaV93cml0ZWwoaG9zdCwgSURTVFMsIFNETU1DX0lETUFDX0lOVF9OSSk7CisJCQlob3N0LT5kbWFfb3BzLT5jb21wbGV0ZShob3N0KTsKKwkJfQogCX0KICNlbmRpZgogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCBkd19tY2lfd29ya19yb3V0aW5lX2NhcmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBkd19tY2kgKmhvc3QgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGR3X21jaSwgY2FyZF93b3JrKTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBob3N0LT5udW1fc2xvdHM7IGkrKykgewotCQlzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBob3N0LT5zbG90W2ldOwotCQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHNsb3QtPm1tYzsKLQkJc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7Ci0JCWludCBwcmVzZW50OwotCi0JCXByZXNlbnQgPSBkd19tY2lfZ2V0X2NkKG1tYyk7Ci0JCXdoaWxlIChwcmVzZW50ICE9IHNsb3QtPmxhc3RfZGV0ZWN0X3N0YXRlKSB7Ci0JCQlkZXZfZGJnKCZzbG90LT5tbWMtPmNsYXNzX2RldiwgImNhcmQgJXNcbiIsCi0JCQkJcHJlc2VudCA/ICJpbnNlcnRlZCIgOiAicmVtb3ZlZCIpOwotCi0JCQlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwotCi0JCQkvKiBDYXJkIGNoYW5nZSBkZXRlY3RlZCAqLwotCQkJc2xvdC0+bGFzdF9kZXRlY3Rfc3RhdGUgPSBwcmVzZW50OwotCi0JCQkvKiBDbGVhbiB1cCBxdWV1ZSBpZiBwcmVzZW50ICovCi0JCQltcnEgPSBzbG90LT5tcnE7Ci0JCQlpZiAobXJxKSB7Ci0JCQkJaWYgKG1ycSA9PSBob3N0LT5tcnEpIHsKLQkJCQkJaG9zdC0+ZGF0YSA9IE5VTEw7Ci0JCQkJCWhvc3QtPmNtZCA9IE5VTEw7Ci0KLQkJCQkJc3dpdGNoIChob3N0LT5zdGF0ZSkgewotCQkJCQljYXNlIFNUQVRFX0lETEU6Ci0JCQkJCWNhc2UgU1RBVEVfV0FJVElOR19DTUQxMV9ET05FOgotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgU1RBVEVfU0VORElOR19DTUQxMToKLQkJCQkJY2FzZSBTVEFURV9TRU5ESU5HX0NNRDoKLQkJCQkJCW1ycS0+Y21kLT5lcnJvciA9IC1FTk9NRURJVU07Ci0JCQkJCQlpZiAoIW1ycS0+ZGF0YSkKLQkJCQkJCQlicmVhazsKLQkJCQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQkJCQljYXNlIFNUQVRFX1NFTkRJTkdfREFUQToKLQkJCQkJCW1ycS0+ZGF0YS0+ZXJyb3IgPSAtRU5PTUVESVVNOwotCQkJCQkJZHdfbWNpX3N0b3BfZG1hKGhvc3QpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgU1RBVEVfREFUQV9CVVNZOgotCQkJCQljYXNlIFNUQVRFX0RBVEFfRVJST1I6Ci0JCQkJCQlpZiAobXJxLT5kYXRhLT5lcnJvciA9PSAtRUlOUFJPR1JFU1MpCi0JCQkJCQkJbXJxLT5kYXRhLT5lcnJvciA9IC1FTk9NRURJVU07Ci0JCQkJCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJCQkJY2FzZSBTVEFURV9TRU5ESU5HX1NUT1A6Ci0JCQkJCQlpZiAobXJxLT5zdG9wKQotCQkJCQkJCW1ycS0+c3RvcC0+ZXJyb3IgPSAtRU5PTUVESVVNOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQotCQkJCQlkd19tY2lfcmVxdWVzdF9lbmQoaG9zdCwgbXJxKTsKLQkJCQl9IGVsc2UgewotCQkJCQlsaXN0X2RlbCgmc2xvdC0+cXVldWVfbm9kZSk7Ci0JCQkJCW1ycS0+Y21kLT5lcnJvciA9IC1FTk9NRURJVU07Ci0JCQkJCWlmIChtcnEtPmRhdGEpCi0JCQkJCQltcnEtPmRhdGEtPmVycm9yID0gLUVOT01FRElVTTsKLQkJCQkJaWYgKG1ycS0+c3RvcCkKLQkJCQkJCW1ycS0+c3RvcC0+ZXJyb3IgPSAtRU5PTUVESVVNOwotCi0JCQkJCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKLQkJCQkJbW1jX3JlcXVlc3RfZG9uZShzbG90LT5tbWMsIG1ycSk7Ci0JCQkJCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7Ci0JCQkJfQotCQkJfQotCi0JCQkvKiBQb3dlciBkb3duIHNsb3QgKi8KLQkJCWlmIChwcmVzZW50ID09IDApCi0JCQkJZHdfbWNpX3Jlc2V0KGhvc3QpOwotCi0JCQlzcGluX3VubG9ja19iaCgmaG9zdC0+bG9jayk7Ci0KLQkJCXByZXNlbnQgPSBkd19tY2lfZ2V0X2NkKG1tYyk7Ci0JCX0KLQotCQltbWNfZGV0ZWN0X2NoYW5nZShzbG90LT5tbWMsCi0JCQltc2Vjc190b19qaWZmaWVzKGhvc3QtPnBkYXRhLT5kZXRlY3RfZGVsYXlfbXMpKTsKLQl9Ci19Ci0KICNpZmRlZiBDT05GSUdfT0YKIC8qIGdpdmVuIGEgc2xvdCBpZCwgZmluZCBvdXQgdGhlIGRldmljZSBub2RlIHJlcHJlc2VudGluZyB0aGF0IHNsb3QgKi8KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmR3X21jaV9vZl9maW5kX3Nsb3Rfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IHNsb3QpCkBAIC0yMjA2LDYgKzIyNjAsNyBAQAogCiAJc2xvdCA9IG1tY19wcml2KG1tYyk7CiAJc2xvdC0+aWQgPSBpZDsKKwlzbG90LT5zZGlvX2lkID0gaG9zdC0+c2Rpb19pZDAgKyBpZDsKIAlzbG90LT5tbWMgPSBtbWM7CiAJc2xvdC0+aG9zdCA9IGhvc3Q7CiAJaG9zdC0+c2xvdFtpZF0gPSBzbG90OwpAQCAtMjI4OSw5ICsyMzQ0LDYgQEAKIAlkd19tY2lfaW5pdF9kZWJ1Z2ZzKHNsb3QpOwogI2VuZGlmCiAKLQkvKiBDYXJkIGluaXRpYWxseSB1bmRldGVjdGVkICovCi0Jc2xvdC0+bGFzdF9kZXRlY3Rfc3RhdGUgPSAwOwotCiAJcmV0dXJuIDA7CiAKIGVycl9ob3N0X2FsbG9jYXRlZDoKQEAgLTIzMDksNiArMjM2MSwyMiBAQAogCiBzdGF0aWMgdm9pZCBkd19tY2lfaW5pdF9kbWEoc3RydWN0IGR3X21jaSAqaG9zdCkKIHsKKwlpbnQgYWRkcl9jb25maWc7CisJLyogQ2hlY2sgQUREUl9DT05GSUcgYml0IGluIEhDT04gdG8gZmluZCBJRE1BQyBhZGRyZXNzIGJ1cyB3aWR0aCAqLworCWFkZHJfY29uZmlnID0gKG1jaV9yZWFkbChob3N0LCBIQ09OKSA+PiAyNykgJiAweDAxOworCisJaWYgKGFkZHJfY29uZmlnID09IDEpIHsKKwkJLyogaG9zdCBzdXBwb3J0cyBJRE1BQyBpbiA2NC1iaXQgYWRkcmVzcyBtb2RlICovCisJCWhvc3QtPmRtYV82NGJpdF9hZGRyZXNzID0gMTsKKwkJZGV2X2luZm8oaG9zdC0+ZGV2LCAiSURNQUMgc3VwcG9ydHMgNjQtYml0IGFkZHJlc3MgbW9kZS5cbiIpOworCQlpZiAoIWRtYV9zZXRfbWFzayhob3N0LT5kZXYsIERNQV9CSVRfTUFTSyg2NCkpKQorCQkJZG1hX3NldF9jb2hlcmVudF9tYXNrKGhvc3QtPmRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJfSBlbHNlIHsKKwkJLyogaG9zdCBzdXBwb3J0cyBJRE1BQyBpbiAzMi1iaXQgYWRkcmVzcyBtb2RlICovCisJCWhvc3QtPmRtYV82NGJpdF9hZGRyZXNzID0gMDsKKwkJZGV2X2luZm8oaG9zdC0+ZGV2LCAiSURNQUMgc3VwcG9ydHMgMzItYml0IGFkZHJlc3MgbW9kZS5cbiIpOworCX0KKwogCS8qIEFsbG9jIG1lbW9yeSBmb3Igc2cgdHJhbnNsYXRpb24gKi8KIAlob3N0LT5zZ19jcHUgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGhvc3QtPmRldiwgUEFHRV9TSVpFLAogCQkJCQkgICZob3N0LT5zZ19kbWEsIEdGUF9LRVJORUwpOwpAQCAtMjY3MiwxNyArMjc0MCwxMCBAQAogCQlob3N0LT5kYXRhX29mZnNldCA9IERBVEFfMjQwQV9PRkZTRVQ7CiAKIAl0YXNrbGV0X2luaXQoJmhvc3QtPnRhc2tsZXQsIGR3X21jaV90YXNrbGV0X2Z1bmMsICh1bnNpZ25lZCBsb25nKWhvc3QpOwotCWhvc3QtPmNhcmRfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkdy1tY2ktY2FyZCIsCi0JCQlXUV9NRU1fUkVDTEFJTSwgMSk7Ci0JaWYgKCFob3N0LT5jYXJkX3dvcmtxdWV1ZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9kbWF1bm1hcDsKLQl9Ci0JSU5JVF9XT1JLKCZob3N0LT5jYXJkX3dvcmssIGR3X21jaV93b3JrX3JvdXRpbmVfY2FyZCk7CiAJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShob3N0LT5kZXYsIGhvc3QtPmlycSwgZHdfbWNpX2ludGVycnVwdCwKIAkJCSAgICAgICBob3N0LT5pcnFfZmxhZ3MsICJkdy1tY2kiLCBob3N0KTsKIAlpZiAocmV0KQotCQlnb3RvIGVycl93b3JrcXVldWU7CisJCWdvdG8gZXJyX2RtYXVubWFwOwogCiAJaWYgKGhvc3QtPnBkYXRhLT5udW1fc2xvdHMpCiAJCWhvc3QtPm51bV9zbG90cyA9IGhvc3QtPnBkYXRhLT5udW1fc2xvdHM7CkBAIC0yNzE4LDcgKzI3NzksNyBAQAogCX0gZWxzZSB7CiAJCWRldl9kYmcoaG9zdC0+ZGV2LCAiYXR0ZW1wdGVkIHRvIGluaXRpYWxpemUgJWQgc2xvdHMsICIKIAkJCQkJImJ1dCBmYWlsZWQgb24gYWxsXG4iLCBob3N0LT5udW1fc2xvdHMpOwotCQlnb3RvIGVycl93b3JrcXVldWU7CisJCWdvdG8gZXJyX2RtYXVubWFwOwogCX0KIAogCWlmIChob3N0LT5xdWlya3MgJiBEV19NQ0lfUVVJUktfSURNQUNfRFRPKQpAQCAtMjcyNiw5ICsyNzg3LDYgQEAKIAogCXJldHVybiAwOwogCi1lcnJfd29ya3F1ZXVlOgotCWRlc3Ryb3lfd29ya3F1ZXVlKGhvc3QtPmNhcmRfd29ya3F1ZXVlKTsKLQogZXJyX2RtYXVubWFwOgogCWlmIChob3N0LT51c2VfZG1hICYmIGhvc3QtPmRtYV9vcHMtPmV4aXQpCiAJCWhvc3QtPmRtYV9vcHMtPmV4aXQoaG9zdCk7CkBAIC0yNzYyLDggKzI4MjAsNiBAQAogCW1jaV93cml0ZWwoaG9zdCwgQ0xLRU5BLCAwKTsKIAltY2lfd3JpdGVsKGhvc3QsIENMS1NSQywgMCk7CiAKLQlkZXN0cm95X3dvcmtxdWV1ZShob3N0LT5jYXJkX3dvcmtxdWV1ZSk7Ci0KIAlpZiAoaG9zdC0+dXNlX2RtYSAmJiBob3N0LT5kbWFfb3BzLT5leGl0KQogCQlob3N0LT5kbWFfb3BzLT5leGl0KGhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaAppbmRleCAwMWI5OWU4Li4wZDBmN2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmgKQEAgLTU1LDYgKzU1LDE3IEBACiAjZGVmaW5lIFNETU1DX0JVRkFERFIJCTB4MDk4CiAjZGVmaW5lIFNETU1DX0NEVEhSQ1RMCQkweDEwMAogI2RlZmluZSBTRE1NQ19EQVRBKHgpCQkoeCkKKy8qCisqIFJlZ2lzdGVycyB0byBzdXBwb3J0IGlkbWFjIDY0LWJpdCBhZGRyZXNzIG1vZGUKKyovCisjZGVmaW5lIFNETU1DX0RCQUREUkwJCTB4MDg4CisjZGVmaW5lIFNETU1DX0RCQUREUlUJCTB4MDhjCisjZGVmaW5lIFNETU1DX0lEU1RTNjQJCTB4MDkwCisjZGVmaW5lIFNETU1DX0lESU5URU42NAkJMHgwOTQKKyNkZWZpbmUgU0RNTUNfRFNDQUREUkwJCTB4MDk4CisjZGVmaW5lIFNETU1DX0RTQ0FERFJVCQkweDA5YworI2RlZmluZSBTRE1NQ19CVUZBRERSTAkJMHgwQTAKKyNkZWZpbmUgU0RNTUNfQlVGQUREUlUJCTB4MEE0CiAKIC8qCiAgKiBEYXRhIG9mZnNldCBpcyBkaWZmZXJlbmNlIGFjY29yZGluZyB0byBWZXJzaW9uCkBAIC0yMTQsNyArMjI1LDcgQEAKICAqCXdpdGggQ09ORklHX01NQ19DTEtHQVRFLgogICogQGZsYWdzOiBSYW5kb20gc3RhdGUgYml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHNsb3QuCiAgKiBAaWQ6IE51bWJlciBvZiB0aGlzIHNsb3QuCi0gKiBAbGFzdF9kZXRlY3Rfc3RhdGU6IE1vc3QgcmVjZW50bHkgb2JzZXJ2ZWQgY2FyZCBkZXRlY3Qgc3RhdGUuCisgKiBAc2Rpb19pZDogTnVtYmVyIG9mIHRoaXMgc2xvdCBpbiB0aGUgU0RJTyBpbnRlcnJ1cHQgcmVnaXN0ZXJzLgogICovCiBzdHJ1Y3QgZHdfbWNpX3Nsb3QgewogCXN0cnVjdCBtbWNfaG9zdAkJKm1tYzsKQEAgLTIzNCw3ICsyNDUsNyBAQAogI2RlZmluZSBEV19NTUNfQ0FSRF9QUkVTRU5UCTAKICNkZWZpbmUgRFdfTU1DX0NBUkRfTkVFRF9JTklUCTEKIAlpbnQJCQlpZDsKLQlpbnQJCQlsYXN0X2RldGVjdF9zdGF0ZTsKKwlpbnQJCQlzZGlvX2lkOwogfTsKIAogc3RydWN0IGR3X21jaV90dW5pbmdfZGF0YSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDQzYWY3OTEuLjUzYmY3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC03MzYsOCArNzM2LDE1IEBACiAJCQljaGFuID0gaG9zdC0+ZG1hX3R4X2NoYW5uZWw7CiAJCWRtYWVuZ2luZV90ZXJtaW5hdGVfYWxsKGNoYW4pOwogCisJCWlmIChob3N0LT5kbWFfZGVzY19jdXJyZW50ID09IG5leHQtPmRtYV9kZXNjKQorCQkJaG9zdC0+ZG1hX2Rlc2NfY3VycmVudCA9IE5VTEw7CisKKwkJaWYgKGhvc3QtPmRtYV9jdXJyZW50ID09IG5leHQtPmRtYV9jaGFuKQorCQkJaG9zdC0+ZG1hX2N1cnJlbnQgPSBOVUxMOworCiAJCW5leHQtPmRtYV9kZXNjID0gTlVMTDsKIAkJbmV4dC0+ZG1hX2NoYW4gPSBOVUxMOworCQlkYXRhLT5ob3N0X2Nvb2tpZSA9IDA7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKaW5kZXggOTQwNWVjZC4uOTBjNjBmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwpAQCAtMTM2MCw3ICsxMzYwLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGNtZF9pcnFfZnJlZTsKIAotCW1tY19zZXRfZHJ2ZGF0YShwZGV2LCBtbWMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKIAlwcl9pbmZvKCIlczogUXVhbGNvbW0gTVNNIFNEQ0MgYXQgMHglMDE2bGx4IGlycSAlZCwlZCBkbWEgJWRcbiIsCkBAIC0xNDE5LDcgKzE0MTksNyBAQAogc3RhdGljIGludAogbXNtc2RjY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gbW1jX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKG1tYykgewogCQlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKQEAgLTE0MzcsNyArMTQzNyw3IEBACiBzdGF0aWMgaW50CiBtc21zZGNjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBtbWNfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobW1jKSB7CiAJCXN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uYyBiL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmMKaW5kZXggNmI0YzVhZDMuLjRmODYxOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uYwpAQCAtMTExLDEwICsxMTEsMTUgQEAKIAltdnNkX3dyaXRlKE1WU0RfQkxLX0NPVU5ULCBkYXRhLT5ibG9ja3MpOwogCW12c2Rfd3JpdGUoTVZTRF9CTEtfU0laRSwgZGF0YS0+Ymxrc3opOwogCi0JaWYgKG5vZG1hIHx8IChkYXRhLT5ibGtzeiB8IGRhdGEtPnNnLT5vZmZzZXQpICYgMykgeworCWlmIChub2RtYSB8fCAoZGF0YS0+Ymxrc3ogfCBkYXRhLT5zZy0+b2Zmc2V0KSAmIDMgfHwKKwkgICAgKCghKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgJiYgZGF0YS0+c2ctPm9mZnNldCAmIDB4M2YpKSkgewogCQkvKgogCQkgKiBXZSBjYW5ub3QgZG8gRE1BIG9uIGEgYnVmZmVyIHdoaWNoIG9mZnNldCBvciBzaXplCiAJCSAqIGlzIG5vdCBhbGlnbmVkIG9uIGEgNC1ieXRlIGJvdW5kYXJ5LgorCQkgKgorCQkgKiBJdCBhbHNvIGFwcGVhcnMgdGhlIGhvc3QgdG8gY2FyZCBETUEgY2FuIGNvcnJ1cHQKKwkJICogZGF0YSB3aGVuIHRoZSBidWZmZXIgaXMgbm90IGFsaWduZWQgb24gYSA2NCBieXRlCisJCSAqIGJvdW5kYXJ5LgogCQkgKi8KIAkJaG9zdC0+cGlvX3NpemUgPSBkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzejsKIAkJaG9zdC0+cGlvX3B0ciA9IHNnX3ZpcnQoZGF0YS0+c2cpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKaW5kZXggYWQxMTE0Mi4uNTMxNmQ5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCkBAIC0zNzMsMTMgKzM3Myw5IEBACiAJZGVsX3RpbWVyKCZob3N0LT53YXRjaGRvZyk7CiAKIAlzdGF0ID0gbXhjbWNpX3JlYWRsKGhvc3QsIE1NQ19SRUdfU1RBVFVTKTsKLQlteGNtY2lfd3JpdGVsKGhvc3QsIHN0YXQgJiB+U1RBVFVTX0RBVEFfVFJBTlNfRE9ORSwgTU1DX1JFR19TVEFUVVMpOwogCiAJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICIlczogMHglMDh4XG4iLCBfX2Z1bmNfXywgc3RhdCk7CiAKLQlpZiAoc3RhdCAmIFNUQVRVU19SRUFEX09QX0RPTkUpCi0JCW14Y21jaV93cml0ZWwoaG9zdCwgU1RBVFVTX1JFQURfT1BfRE9ORSwgTU1DX1JFR19TVEFUVVMpOwotCiAJbXhjbWNpX2RhdGFfZG9uZShob3N0LCBzdGF0KTsKIH0KIApAQCAtNzQzLDEwICs3MzksOCBAQAogCXNkaW9faXJxID0gKHN0YXQgJiBTVEFUVVNfU0RJT19JTlRfQUNUSVZFKSAmJiBob3N0LT51c2Vfc2RpbzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAobXhjbWNpX3VzZV9kbWEoaG9zdCkgJiYKLQkgICAgKHN0YXQgJiAoU1RBVFVTX1JFQURfT1BfRE9ORSB8IFNUQVRVU19XUklURV9PUF9ET05FKSkpCi0JCW14Y21jaV93cml0ZWwoaG9zdCwgU1RBVFVTX1JFQURfT1BfRE9ORSB8IFNUQVRVU19XUklURV9PUF9ET05FLAotCQkJTU1DX1JFR19TVEFUVVMpOworCWlmIChteGNtY2lfdXNlX2RtYShob3N0KSAmJiAoc3RhdCAmIChTVEFUVVNfV1JJVEVfT1BfRE9ORSkpKQorCQlteGNtY2lfd3JpdGVsKGhvc3QsIFNUQVRVU19XUklURV9PUF9ET05FLCBNTUNfUkVHX1NUQVRVUyk7CiAKIAlpZiAoc2Rpb19pcnEpIHsKIAkJbXhjbWNpX3dyaXRlbChob3N0LCBTVEFUVVNfU0RJT19JTlRfQUNUSVZFLCBNTUNfUkVHX1NUQVRVUyk7CkBAIC03NTYsOCArNzUwLDcgQEAKIAlpZiAoc3RhdCAmIFNUQVRVU19FTkRfQ01EX1JFU1ApCiAJCW14Y21jaV9jbWRfZG9uZShob3N0LCBzdGF0KTsKIAotCWlmIChteGNtY2lfdXNlX2RtYShob3N0KSAmJgotCQkgIChzdGF0ICYgKFNUQVRVU19EQVRBX1RSQU5TX0RPTkUgfCBTVEFUVVNfV1JJVEVfT1BfRE9ORSkpKSB7CisJaWYgKG14Y21jaV91c2VfZG1hKGhvc3QpICYmIChzdGF0ICYgU1RBVFVTX1dSSVRFX09QX0RPTkUpKSB7CiAJCWRlbF90aW1lcigmaG9zdC0+d2F0Y2hkb2cpOwogCQlteGNtY2lfZGF0YV9kb25lKGhvc3QsIHN0YXQpOwogCX0KQEAgLTEwODQsMTIgKzEwNzcsMTQgQEAKIAkJZGF0M19jYXJkX2RldGVjdCA9IHRydWU7CiAKIAlyZXQgPSBtbWNfcmVndWxhdG9yX2dldF9zdXBwbHkobW1jKTsKLQlpZiAocmV0KSB7Ci0JCWlmIChwZGF0YSAmJiByZXQgIT0gLUVQUk9CRV9ERUZFUikKLQkJCW1tYy0+b2NyX2F2YWlsID0gcGRhdGEtPm9jcl9hdmFpbCA/IDoKLQkJCQlNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKKwlpZiAocmV0ID09IC1FUFJPQkVfREVGRVIpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAoIW1tYy0+b2NyX2F2YWlsKSB7CisJCWlmIChwZGF0YSAmJiBwZGF0YS0+b2NyX2F2YWlsKQorCQkJbW1jLT5vY3JfYXZhaWwgPSBwZGF0YS0+b2NyX2F2YWlsOwogCQllbHNlCi0JCQlnb3RvIG91dF9mcmVlOworCQkJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKIAl9CiAKIAlpZiAoZGF0M19jYXJkX2RldGVjdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXhzLW1tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9teHMtbW1jLmMKaW5kZXggY2Q3NGU1MS4uNjBjNGNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9teHMtbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9teHMtbW1jLmMKQEAgLTU4MSwxMCArNTgxLDkgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yICpyZWdfdm1tYzsKIAlzdHJ1Y3QgbXhzX3NzcCAqc3NwOwogCi0JaW9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlycV9lcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghaW9yZXMgfHwgaXJxX2VyciA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChpcnFfZXJyIDwgMCkKKwkJcmV0dXJuIGlycV9lcnI7CiAKIAltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IG14c19tbWNfaG9zdCksICZwZGV2LT5kZXYpOwogCWlmICghbW1jKQpAQCAtNTkzLDYgKzU5Miw3IEBACiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJc3NwID0gJmhvc3QtPnNzcDsKIAlzc3AtPmRldiA9ICZwZGV2LT5kZXY7CisJaW9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXNzcC0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCBpb3Jlcyk7CiAJaWYgKElTX0VSUihzc3AtPmJhc2UpKSB7CiAJCXJldCA9IFBUUl9FUlIoc3NwLT5iYXNlKTsKQEAgLTYxOSw3ICs2MTksOSBAQAogCQlyZXQgPSBQVFJfRVJSKHNzcC0+Y2xrKTsKIAkJZ290byBvdXRfbW1jX2ZyZWU7CiAJfQotCWNsa19wcmVwYXJlX2VuYWJsZShzc3AtPmNsayk7CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHNzcC0+Y2xrKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9tbWNfZnJlZTsKIAogCXJldCA9IG14c19tbWNfcmVzZXQoaG9zdCk7CiAJaWYgKHJldCkgewpAQCAtNjYwLDcgKzY2Miw3IEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKIAogCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxX2VyciwgbXhzX21tY19pcnFfaGFuZGxlciwgMCwKLQkJCSAgICAgICBEUklWRVJfTkFNRSwgaG9zdCk7CisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIGhvc3QpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZyZWVfZG1hOwogCkBAIC03MDIsNyArNzA0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBteHNfbW1jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC03MTksMjUgKzcyMSwxOSBAQAogCXN0cnVjdCBteHNfbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCXN0cnVjdCBteHNfc3NwICpzc3AgPSAmaG9zdC0+c3NwOwogCi0JY2xrX3ByZXBhcmVfZW5hYmxlKHNzcC0+Y2xrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKHNzcC0+Y2xrKTsKIH0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG14c19tbWNfcG1fb3BzID0gewotCS5zdXNwZW5kCT0gbXhzX21tY19zdXNwZW5kLAotCS5yZXN1bWUJCT0gbXhzX21tY19yZXN1bWUsCi19OwogI2VuZGlmCiAKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhteHNfbW1jX3BtX29wcywgbXhzX21tY19zdXNwZW5kLCBteHNfbW1jX3Jlc3VtZSk7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14c19tbWNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBteHNfbW1jX3Byb2JlLAogCS5yZW1vdmUJCT0gbXhzX21tY19yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbXhzX3NzcF9pZHMsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gRFJJVkVSX05BTUUsCi0jaWZkZWYgQ09ORklHX1BNCiAJCS5wbQk9ICZteHNfbW1jX3BtX29wcywKLSNlbmRpZgogCQkub2ZfbWF0Y2hfdGFibGUgPSBteHNfbW1jX2R0X2lkcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggZGYyN2JiNC4uN2M3MWRjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9waW5jdHJsL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbW1jLW9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2hzbW1jLW9tYXAuaD4KIAogLyogT01BUCBIU01NQyBIb3N0IENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCiAjZGVmaW5lIE9NQVBfSFNNTUNfU1lTU1RBVFVTCTB4MDAxNApAQCAtMTU1LDcgKzE1NSw3IEBACiAgKiBvbWFwLmMgY29udHJvbGxlciBkcml2ZXIuIEx1Y2tpbHkgdGhpcyBpcyBub3QgY3VycmVudGx5IGRvbmUgb24gYW55IGtub3duCiAgKiBvbWFwX2hzbW1jLmMgZGV2aWNlLgogICovCi0jZGVmaW5lIG1tY19zbG90KGhvc3QpCQkoaG9zdC0+cGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdKQorI2RlZmluZSBtbWNfcGRhdGEoaG9zdCkJCWhvc3QtPnBkYXRhCiAKIC8qCiAgKiBNTUMgSG9zdCBjb250cm9sbGVyIHJlYWQvd3JpdGUgQVBJJ3MKQEAgLTIwNyw3ICsyMDcsNiBAQAogCWludAkJCXVzZV9kbWEsIGRtYV9jaDsKIAlzdHJ1Y3QgZG1hX2NoYW4JCSp0eF9jaGFuOwogCXN0cnVjdCBkbWFfY2hhbgkJKnJ4X2NoYW47Ci0JaW50CQkJc2xvdF9pZDsKIAlpbnQJCQlyZXNwb25zZV9idXN5OwogCWludAkJCWNvbnRleHRfbG9zczsKIAlpbnQJCQlwcm90ZWN0X2NhcmQ7CkBAIC0yMjAsNyArMjE5LDI2IEBACiAjZGVmaW5lIEhTTU1DX1NESU9fSVJRX0VOQUJMRUQJKDEgPDwgMSkgICAgICAgIC8qIFNESU8gaXJxIGVuYWJsZWQgKi8KICNkZWZpbmUgSFNNTUNfV0FLRV9JUlFfRU5BQkxFRAkoMSA8PCAyKQogCXN0cnVjdCBvbWFwX2hzbW1jX25leHQJbmV4dF9kYXRhOwotCXN0cnVjdAlvbWFwX21tY19wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKKwlzdHJ1Y3QJb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKKworCS8qIFRvIGhhbmRsZSBib2FyZCByZWxhdGVkIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9uYWxpdHkgZm9yIE1NQyAqLworCWludCAoKnN1c3BlbmQpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqcmVzdW1lKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisJLyogcmV0dXJuIE1NQyBjb3ZlciBzd2l0Y2ggc3RhdGUsIGNhbiBiZSBOVUxMIGlmIG5vdCBzdXBwb3J0ZWQuCisJICoKKwkgKiBwb3NzaWJsZSByZXR1cm4gdmFsdWVzOgorCSAqICAgMCAtIGNsb3NlZAorCSAqICAgMSAtIG9wZW4KKwkgKi8KKwlpbnQgKCpnZXRfY292ZXJfc3RhdGUpKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKwkvKiBDYXJkIGRldGVjdGlvbiBJUlFzICovCisJaW50IGNhcmRfZGV0ZWN0X2lycTsKKworCWludCAoKmNhcmRfZGV0ZWN0KShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCWludCAoKmdldF9ybykoc3RydWN0IGRldmljZSAqZGV2KTsKKwogfTsKIAogc3RydWN0IG9tYXBfbW1jX29mX2RhdGEgewpAQCAtMjMwLDUwICsyNDgsNDggQEAKIAogc3RhdGljIHZvaWQgb21hcF9oc21tY19zdGFydF9kbWFfdHJhbnNmZXIoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCk7CiAKLXN0YXRpYyBpbnQgb21hcF9oc21tY19jYXJkX2RldGVjdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQorc3RhdGljIGludCBvbWFwX2hzbW1jX2NhcmRfZGV0ZWN0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhvc3QtPnBkYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhvc3QtPnBkYXRhOwogCiAJLyogTk9URTogYXNzdW1lcyBjYXJkIGRldGVjdCBzaWduYWwgaXMgYWN0aXZlLWxvdyAqLwotCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c3dpdGNoX3Bpbik7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfd3Aoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3N0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfd3Aoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaG9zdC0+cGRhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaG9zdC0+cGRhdGE7CiAKIAkvKiBOT1RFOiBhc3N1bWVzIHdyaXRlIHByb3RlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1oaWdoICovCi0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uZ3Bpb193cCk7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+Z3Bpb193cCk7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3N0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaG9zdC0+cGRhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaG9zdC0+cGRhdGE7CiAKIAkvKiBOT1RFOiBhc3N1bWVzIGNhcmQgZGV0ZWN0IHNpZ25hbCBpcyBhY3RpdmUtbG93ICovCi0JcmV0dXJuICFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4pOworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zd2l0Y2hfcGluKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfc3VzcGVuZF9jZGlycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQorc3RhdGljIGludCBvbWFwX2hzbW1jX3N1c3BlbmRfY2RpcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaG9zdC0+cGRhdGE7CiAKLQlkaXNhYmxlX2lycShtbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSk7CisJZGlzYWJsZV9pcnEoaG9zdC0+Y2FyZF9kZXRlY3RfaXJxKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbWFwX2hzbW1jX3Jlc3VtZV9jZGlycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQorc3RhdGljIGludCBvbWFwX2hzbW1jX3Jlc3VtZV9jZGlycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKIAotCWVuYWJsZV9pcnEobW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpOworCWVuYWJsZV9pcnEoaG9zdC0+Y2FyZF9kZXRlY3RfaXJxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg2LDggKzMwMiw3IEBACiAKICNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAKLXN0YXRpYyBpbnQgb21hcF9oc21tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLAotCQkJCSAgIGludCB2ZGQpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBvd2VyX29uLCBpbnQgdmRkKQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPQogCQlwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CkBAIC0zMDAsOCArMzE1LDggQEAKIAlpZiAoIWhvc3QtPnZjYykKIAkJcmV0dXJuIDA7CiAKLQlpZiAobW1jX3Nsb3QoaG9zdCkuYmVmb3JlX3NldF9yZWcpCi0JCW1tY19zbG90KGhvc3QpLmJlZm9yZV9zZXRfcmVnKGRldiwgc2xvdCwgcG93ZXJfb24sIHZkZCk7CisJaWYgKG1tY19wZGF0YShob3N0KS0+YmVmb3JlX3NldF9yZWcpCisJCW1tY19wZGF0YShob3N0KS0+YmVmb3JlX3NldF9yZWcoZGV2LCBwb3dlcl9vbiwgdmRkKTsKIAogCWlmIChob3N0LT5wYmlhcykgewogCQlpZiAoaG9zdC0+cGJpYXNfZW5hYmxlZCA9PSAxKSB7CkBAIC0zNjMsOCArMzc4LDggQEAKIAkJfQogCX0KIAotCWlmIChtbWNfc2xvdChob3N0KS5hZnRlcl9zZXRfcmVnKQotCQltbWNfc2xvdChob3N0KS5hZnRlcl9zZXRfcmVnKGRldiwgc2xvdCwgcG93ZXJfb24sIHZkZCk7CisJaWYgKG1tY19wZGF0YShob3N0KS0+YWZ0ZXJfc2V0X3JlZykKKwkJbW1jX3BkYXRhKGhvc3QpLT5hZnRlcl9zZXRfcmVnKGRldiwgcG93ZXJfb24sIHZkZCk7CiAKIGVycm9yX3NldF9wb3dlcjoKIAlyZXR1cm4gcmV0OwpAQCAtMzgzLDE4ICszOTgsMTggQEAKIAl9IGVsc2UgewogCQlob3N0LT52Y2MgPSByZWc7CiAJCW9jcl92YWx1ZSA9IG1tY19yZWd1bGF0b3JfZ2V0X29jcm1hc2socmVnKTsKLQkJaWYgKCFtbWNfc2xvdChob3N0KS5vY3JfbWFzaykgewotCQkJbW1jX3Nsb3QoaG9zdCkub2NyX21hc2sgPSBvY3JfdmFsdWU7CisJCWlmICghbW1jX3BkYXRhKGhvc3QpLT5vY3JfbWFzaykgeworCQkJbW1jX3BkYXRhKGhvc3QpLT5vY3JfbWFzayA9IG9jcl92YWx1ZTsKIAkJfSBlbHNlIHsKLQkJCWlmICghKG1tY19zbG90KGhvc3QpLm9jcl9tYXNrICYgb2NyX3ZhbHVlKSkgeworCQkJaWYgKCEobW1jX3BkYXRhKGhvc3QpLT5vY3JfbWFzayAmIG9jcl92YWx1ZSkpIHsKIAkJCQlkZXZfZXJyKGhvc3QtPmRldiwgIm9jcm1hc2sgJXggaXMgbm90IHN1cHBvcnRlZFxuIiwKLQkJCQkJbW1jX3Nsb3QoaG9zdCkub2NyX21hc2spOwotCQkJCW1tY19zbG90KGhvc3QpLm9jcl9tYXNrID0gMDsKKwkJCQkJbW1jX3BkYXRhKGhvc3QpLT5vY3JfbWFzayk7CisJCQkJbW1jX3BkYXRhKGhvc3QpLT5vY3JfbWFzayA9IDA7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KIAl9Ci0JbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyID0gb21hcF9oc21tY19zZXRfcG93ZXI7CisJbW1jX3BkYXRhKGhvc3QpLT5zZXRfcG93ZXIgPSBvbWFwX2hzbW1jX3NldF9wb3dlcjsKIAogCS8qIEFsbG93IGFuIGF1eCByZWd1bGF0b3IgKi8KIAlyZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoaG9zdC0+ZGV2LCAidm1tY19hdXgiKTsKQEAgLTQwNCw3ICs0MTksNyBAQAogCWhvc3QtPnBiaWFzID0gSVNfRVJSKHJlZykgPyBOVUxMIDogcmVnOwogCiAJLyogRm9yIGVNTUMgZG8gbm90IHBvd2VyIG9mZiB3aGVuIG5vdCBpbiBzbGVlcCBzdGF0ZSAqLwotCWlmIChtbWNfc2xvdChob3N0KS5ub19yZWd1bGF0b3Jfb2ZmX2luaXQpCisJaWYgKG1tY19wZGF0YShob3N0KS0+bm9fcmVndWxhdG9yX29mZl9pbml0KQogCQlyZXR1cm4gMDsKIAkvKgogCSAqIFRvIGRpc2FibGUgYm9vdF9vbiByZWd1bGF0b3IsIGVuYWJsZSByZWd1bGF0b3IKQEAgLTQxMiwxMCArNDI3LDEwIEBACiAJICovCiAJaWYgKChob3N0LT52Y2MgJiYgcmVndWxhdG9yX2lzX2VuYWJsZWQoaG9zdC0+dmNjKSA+IDApIHx8CiAJICAgIChob3N0LT52Y2NfYXV4ICYmIHJlZ3VsYXRvcl9pc19lbmFibGVkKGhvc3QtPnZjY19hdXgpKSkgewotCQlpbnQgdmRkID0gZmZzKG1tY19zbG90KGhvc3QpLm9jcl9tYXNrKSAtIDE7CisJCWludCB2ZGQgPSBmZnMobW1jX3BkYXRhKGhvc3QpLT5vY3JfbWFzaykgLSAxOwogCi0JCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDEsIHZkZCk7Ci0JCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDAsIDApOworCQltbWNfcGRhdGEoaG9zdCktPnNldF9wb3dlcihob3N0LT5kZXYsIDEsIHZkZCk7CisJCW1tY19wZGF0YShob3N0KS0+c2V0X3Bvd2VyKGhvc3QtPmRldiwgMCwgMCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MjMsNyArNDM4LDcgQEAKIAogc3RhdGljIHZvaWQgb21hcF9oc21tY19yZWdfcHV0KHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCiB7Ci0JbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyID0gTlVMTDsKKwltbWNfcGRhdGEoaG9zdCktPnNldF9wb3dlciA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9tYXBfaHNtbWNfaGF2ZV9yZWcodm9pZCkKQEAgLTQ0OSw1NSArNDY0LDU5IEBACiAKICNlbmRpZgogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfZ3Bpb19pbml0KHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3N0YXRpYyBpbnQgb21hcF9oc21tY19ncGlvX2luaXQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwKKwkJCQlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKIAlpbnQgcmV0OwogCi0JaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pKSB7Ci0JCWlmIChwZGF0YS0+c2xvdHNbMF0uY292ZXIpCi0JCQlwZGF0YS0+c2xvdHNbMF0uZ2V0X2NvdmVyX3N0YXRlID0KLQkJCQkJb21hcF9oc21tY19nZXRfY292ZXJfc3RhdGU7CisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnN3aXRjaF9waW4pKSB7CisJCWlmIChwZGF0YS0+Y292ZXIpCisJCQlob3N0LT5nZXRfY292ZXJfc3RhdGUgPQorCQkJCW9tYXBfaHNtbWNfZ2V0X2NvdmVyX3N0YXRlOwogCQllbHNlCi0JCQlwZGF0YS0+c2xvdHNbMF0uY2FyZF9kZXRlY3QgPSBvbWFwX2hzbW1jX2NhcmRfZGV0ZWN0OwotCQlwZGF0YS0+c2xvdHNbMF0uY2FyZF9kZXRlY3RfaXJxID0KLQkJCQlncGlvX3RvX2lycShwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7Ci0JCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3BpbiwgIm1tY19jZCIpOworCQkJaG9zdC0+Y2FyZF9kZXRlY3QgPSBvbWFwX2hzbW1jX2NhcmRfZGV0ZWN0OworCQlob3N0LT5jYXJkX2RldGVjdF9pcnEgPQorCQkJCWdwaW9fdG9faXJxKHBkYXRhLT5zd2l0Y2hfcGluKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5zd2l0Y2hfcGluLCAibW1jX2NkIik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7CisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBkYXRhLT5zd2l0Y2hfcGluKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyX2ZyZWVfc3A7Ci0JfSBlbHNlCi0JCXBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlwZGF0YS0+c3dpdGNoX3BpbiA9IC1FSU5WQUw7CisJfQogCi0JaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnNsb3RzWzBdLmdwaW9fd3ApKSB7Ci0JCXBkYXRhLT5zbG90c1swXS5nZXRfcm8gPSBvbWFwX2hzbW1jX2dldF93cDsKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5zbG90c1swXS5ncGlvX3dwLCAibW1jX3dwIik7CisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fd3ApKSB7CisJCWhvc3QtPmdldF9ybyA9IG9tYXBfaHNtbWNfZ2V0X3dwOworCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fd3AsICJtbWNfd3AiKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyX2ZyZWVfY2Q7Ci0JCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBkYXRhLT5zbG90c1swXS5ncGlvX3dwKTsKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPmdwaW9fd3ApOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfZnJlZV93cDsKLQl9IGVsc2UKLQkJcGRhdGEtPnNsb3RzWzBdLmdwaW9fd3AgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXBkYXRhLT5ncGlvX3dwID0gLUVJTlZBTDsKKwl9CiAKIAlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfd3A6Ci0JZ3Bpb19mcmVlKHBkYXRhLT5zbG90c1swXS5ncGlvX3dwKTsKKwlncGlvX2ZyZWUocGRhdGEtPmdwaW9fd3ApOwogZXJyX2ZyZWVfY2Q6Ci0JaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pKQorCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zd2l0Y2hfcGluKSkKIGVycl9mcmVlX3NwOgotCQlncGlvX2ZyZWUocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pOworCQlncGlvX2ZyZWUocGRhdGEtPnN3aXRjaF9waW4pOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXBfaHNtbWNfZ3Bpb19mcmVlKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfZ3Bpb19mcmVlKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QsCisJCQkJIHN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQogewotCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zbG90c1swXS5ncGlvX3dwKSkKLQkJZ3Bpb19mcmVlKHBkYXRhLT5zbG90c1swXS5ncGlvX3dwKTsKLQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3BpbikpCi0JCWdwaW9fZnJlZShwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7CisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fd3ApKQorCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9fd3ApOworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zd2l0Y2hfcGluKSkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5zd2l0Y2hfcGluKTsKIH0KIAogLyoKQEAgLTYwNyw4ICs2MjYsOSBAQAogCSAqCSAgaW4gY2FwYWJpbGl0aWVzIHJlZ2lzdGVyCiAJICoJLSBNTUMvU0QgY2xvY2sgY29taW5nIG91dCBvZiBjb250cm9sbGVyID4gMjVNSHoKIAkgKi8KLQlpZiAoKG1tY19zbG90KGhvc3QpLmZlYXR1cmVzICYgSFNNTUNfSEFTX0hTUEVfU1VQUE9SVCkgJiYKKwlpZiAoKG1tY19wZGF0YShob3N0KS0+ZmVhdHVyZXMgJiBIU01NQ19IQVNfSFNQRV9TVVBQT1JUKSAmJgogCSAgICAoaW9zLT50aW1pbmcgIT0gTU1DX1RJTUlOR19NTUNfRERSNTIpICYmCisJICAgIChpb3MtPnRpbWluZyAhPSBNTUNfVElNSU5HX1VIU19ERFI1MCkgJiYKIAkgICAgKChPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ0FQQSkgJiBIU1MpID09IEhTUykpIHsKIAkJcmVndmFsID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpOwogCQlpZiAoY2xrZGl2ICYmIChjbGtfZ2V0X3JhdGUoaG9zdC0+ZmNsaykvY2xrZGl2KSA+IDI1MDAwMDAwKQpAQCAtNjI4LDcgKzY0OCw4IEBACiAJdTMyIGNvbjsKIAogCWNvbiA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBDT04pOwotCWlmIChpb3MtPnRpbWluZyA9PSBNTUNfVElNSU5HX01NQ19ERFI1MikKKwlpZiAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfRERSNTIgfHwKKwkgICAgaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19VSFNfRERSNTApCiAJCWNvbiB8PSBERFI7CS8qIGNvbmZpZ3VyZSBpbiBERFIgbW9kZSAqLwogCWVsc2UKIAkJY29uICY9IH5ERFI7CkBAIC03OTEsOCArODEyLDggQEAKIHsKIAlpbnQgciA9IDE7CiAKLQlpZiAobW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKQotCQlyID0gbW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCk7CisJaWYgKGhvc3QtPmdldF9jb3Zlcl9zdGF0ZSkKKwkJciA9IGhvc3QtPmdldF9jb3Zlcl9zdGF0ZShob3N0LT5kZXYpOwogCXJldHVybiByOwogfQogCkBAIC04MTYsNyArODM3LDcgQEAKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtbWNfaG9zdCwgY2xhc3NfZGV2KTsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtbWNfc2xvdChob3N0KS5uYW1lKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgbW1jX3BkYXRhKGhvc3QpLT5uYW1lKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKHNsb3RfbmFtZSwgU19JUlVHTywgb21hcF9oc21tY19zaG93X3Nsb3RfbmFtZSwgTlVMTCk7CkBAIC0xMDYxLDcgKzEwODIsNyBAQAogCSAqIE9NQVA0IEVTMiBhbmQgZ3JlYXRlciBoYXMgYW4gdXBkYXRlZCByZXNldCBsb2dpYy4KIAkgKiBNb25pdG9yIGEgMC0+MSB0cmFuc2l0aW9uIGZpcnN0CiAJICovCi0JaWYgKG1tY19zbG90KGhvc3QpLmZlYXR1cmVzICYgSFNNTUNfSEFTX1VQREFURURfUkVTRVQpIHsKKwlpZiAobW1jX3BkYXRhKGhvc3QpLT5mZWF0dXJlcyAmIEhTTU1DX0hBU19VUERBVEVEX1JFU0VUKSB7CiAJCXdoaWxlICgoIShPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ1RMKSAmIGJpdCkpCiAJCQkJCSYmIChpKysgPCBsaW1pdCkpCiAJCQl1ZGVsYXkoMSk7CkBAIC0xMjEwLDEyICsxMjMxLDExIEBACiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5kYmNsayk7CiAKIAkvKiBUdXJuIHRoZSBwb3dlciBvZmYgKi8KLQlyZXQgPSBtbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLCAwLCAwKTsKKwlyZXQgPSBtbWNfcGRhdGEoaG9zdCktPnNldF9wb3dlcihob3N0LT5kZXYsIDAsIDApOwogCiAJLyogVHVybiB0aGUgcG93ZXIgT04gd2l0aCBnaXZlbiBWREQgMS44IG9yIDMuMHYgKi8KIAlpZiAoIXJldCkKLQkJcmV0ID0gbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMSwKLQkJCQkJICAgICAgIHZkZCk7CisJCXJldCA9IG1tY19wZGF0YShob3N0KS0+c2V0X3Bvd2VyKGhvc3QtPmRldiwgMSwgdmRkKTsKIAlwbV9ydW50aW1lX2dldF9zeW5jKGhvc3QtPmRldik7CiAJaWYgKGhvc3QtPmRiY2xrKQogCQljbGtfcHJlcGFyZV9lbmFibGUoaG9zdC0+ZGJjbGspOwpAQCAtMTI1OSwxMSArMTI3OSwxMSBAQAogLyogUHJvdGVjdCB0aGUgY2FyZCB3aGlsZSB0aGUgY292ZXIgaXMgb3BlbiAqLwogc3RhdGljIHZvaWQgb21hcF9oc21tY19wcm90ZWN0X2NhcmQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKIHsKLQlpZiAoIW1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZSkKKwlpZiAoIWhvc3QtPmdldF9jb3Zlcl9zdGF0ZSkKIAkJcmV0dXJuOwogCiAJaG9zdC0+cmVxc19ibG9ja2VkID0gMDsKLQlpZiAobW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCkpIHsKKwlpZiAoaG9zdC0+Z2V0X2NvdmVyX3N0YXRlKGhvc3QtPmRldikpIHsKIAkJaWYgKGhvc3QtPnByb3RlY3RfY2FyZCkgewogCQkJZGV2X2luZm8oaG9zdC0+ZGV2LCAiJXM6IGNvdmVyIGlzIGNsb3NlZCwgIgogCQkJCQkgImNhcmQgaXMgbm93IGFjY2Vzc2libGVcbiIsCkBAIC0xMjg2LDEzICsxMzA2LDEyIEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9oc21tY19kZXRlY3QoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfaWQ7Ci0Jc3RydWN0IG9tYXBfbW1jX3Nsb3RfZGF0YSAqc2xvdCA9ICZtbWNfc2xvdChob3N0KTsKIAlpbnQgY2FyZGRldGVjdDsKIAogCXN5c2ZzX25vdGlmeSgmaG9zdC0+bW1jLT5jbGFzc19kZXYua29iaiwgTlVMTCwgImNvdmVyX3N3aXRjaCIpOwogCi0JaWYgKHNsb3QtPmNhcmRfZGV0ZWN0KQotCQljYXJkZGV0ZWN0ID0gc2xvdC0+Y2FyZF9kZXRlY3QoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkKTsKKwlpZiAoaG9zdC0+Y2FyZF9kZXRlY3QpCisJCWNhcmRkZXRlY3QgPSBob3N0LT5jYXJkX2RldGVjdChob3N0LT5kZXYpOwogCWVsc2UgewogCQlvbWFwX2hzbW1jX3Byb3RlY3RfY2FyZChob3N0KTsKIAkJY2FyZGRldGVjdCA9IC1FTk9TWVM7CkBAIC0xNjE4LDEyICsxNjM3LDEwIEBACiAJaWYgKGlvcy0+cG93ZXJfbW9kZSAhPSBob3N0LT5wb3dlcl9tb2RlKSB7CiAJCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CiAJCWNhc2UgTU1DX1BPV0VSX09GRjoKLQkJCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsCi0JCQkJCQkgMCwgMCk7CisJCQltbWNfcGRhdGEoaG9zdCktPnNldF9wb3dlcihob3N0LT5kZXYsIDAsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgTU1DX1BPV0VSX1VQOgotCQkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwKLQkJCQkJCSAxLCBpb3MtPnZkZCk7CisJCQltbWNfcGRhdGEoaG9zdCktPnNldF9wb3dlcihob3N0LT5kZXYsIDEsIGlvcy0+dmRkKTsKIAkJCWJyZWFrOwogCQljYXNlIE1NQ19QT1dFUl9PTjoKIAkJCWRvX3NlbmRfaW5pdF9zdHJlYW0gPSAxOwpAQCAtMTY2OCwyNiArMTY4NSwyNiBAQAogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JaWYgKCFtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCkKKwlpZiAoIWhvc3QtPmNhcmRfZGV0ZWN0KQogCQlyZXR1cm4gLUVOT1NZUzsKLQlyZXR1cm4gbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkKTsKKwlyZXR1cm4gaG9zdC0+Y2FyZF9kZXRlY3QoaG9zdC0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBvbWFwX2hzbW1jX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCWlmICghbW1jX3Nsb3QoaG9zdCkuZ2V0X3JvKQorCWlmICghaG9zdC0+Z2V0X3JvKQogCQlyZXR1cm4gLUVOT1NZUzsKLQlyZXR1cm4gbW1jX3Nsb3QoaG9zdCkuZ2V0X3JvKGhvc3QtPmRldiwgMCk7CisJcmV0dXJuIGhvc3QtPmdldF9ybyhob3N0LT5kZXYpOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2luaXRfY2FyZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JaWYgKG1tY19zbG90KGhvc3QpLmluaXRfY2FyZCkKLQkJbW1jX3Nsb3QoaG9zdCkuaW5pdF9jYXJkKGNhcmQpOworCWlmIChtbWNfcGRhdGEoaG9zdCktPmluaXRfY2FyZCkKKwkJbW1jX3BkYXRhKGhvc3QpLT5pbml0X2NhcmQoY2FyZCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfaHNtbWNfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKQpAQCAtMTk1Nyw5ICsxOTc0LDkgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvbWFwX21tY19vZl9tYXRjaCk7CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqb2ZfZ2V0X2hzbW1jX3BkYXRhKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICpvZl9nZXRfaHNtbWNfcGRhdGEoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwogCXUzMiBidXNfd2lkdGgsIG1heF9mcmVxOwogCWludCBjZF9ncGlvLCB3cF9ncGlvOwpAQCAtMTk3Niw0MCArMTk5MywzOCBAQAogCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAidGksZHVhbC12b2x0IiwgTlVMTCkpCiAJCXBkYXRhLT5jb250cm9sbGVyX2ZsYWdzIHw9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUOwogCi0JLyogVGhpcyBkcml2ZXIgb25seSBzdXBwb3J0cyAxIHNsb3QgKi8KLQlwZGF0YS0+bnJfc2xvdHMgPSAxOwotCXBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluID0gY2RfZ3BpbzsKLQlwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCA9IHdwX2dwaW87CisJcGRhdGEtPnN3aXRjaF9waW4gPSBjZF9ncGlvOworCXBkYXRhLT5ncGlvX3dwID0gd3BfZ3BpbzsKIAogCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAidGksbm9uLXJlbW92YWJsZSIsIE5VTEwpKSB7Ci0JCXBkYXRhLT5zbG90c1swXS5ub25yZW1vdmFibGUgPSB0cnVlOwotCQlwZGF0YS0+c2xvdHNbMF0ubm9fcmVndWxhdG9yX29mZl9pbml0ID0gdHJ1ZTsKKwkJcGRhdGEtPm5vbnJlbW92YWJsZSA9IHRydWU7CisJCXBkYXRhLT5ub19yZWd1bGF0b3Jfb2ZmX2luaXQgPSB0cnVlOwogCX0KIAlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImJ1cy13aWR0aCIsICZidXNfd2lkdGgpOwogCWlmIChidXNfd2lkdGggPT0gNCkKLQkJcGRhdGEtPnNsb3RzWzBdLmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOworCQlwZGF0YS0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAJZWxzZSBpZiAoYnVzX3dpZHRoID09IDgpCi0JCXBkYXRhLT5zbG90c1swXS5jYXBzIHw9IE1NQ19DQVBfOF9CSVRfREFUQTsKKwkJcGRhdGEtPmNhcHMgfD0gTU1DX0NBUF84X0JJVF9EQVRBOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJ0aSxuZWVkcy1zcGVjaWFsLXJlc2V0IiwgTlVMTCkpCi0JCXBkYXRhLT5zbG90c1swXS5mZWF0dXJlcyB8PSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVDsKKwkJcGRhdGEtPmZlYXR1cmVzIHw9IEhTTU1DX0hBU19VUERBVEVEX1JFU0VUOwogCiAJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgIm1heC1mcmVxdWVuY3kiLCAmbWF4X2ZyZXEpKQogCQlwZGF0YS0+bWF4X2ZyZXEgPSBtYXhfZnJlcTsKIAogCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAidGksbmVlZHMtc3BlY2lhbC1ocy1oYW5kbGluZyIsIE5VTEwpKQotCQlwZGF0YS0+c2xvdHNbMF0uZmVhdHVyZXMgfD0gSFNNTUNfSEFTX0hTUEVfU1VQUE9SVDsKKwkJcGRhdGEtPmZlYXR1cmVzIHw9IEhTTU1DX0hBU19IU1BFX1NVUFBPUlQ7CiAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgImtlZXAtcG93ZXItaW4tc3VzcGVuZCIsIE5VTEwpKQotCQlwZGF0YS0+c2xvdHNbMF0ucG1fY2FwcyB8PSBNTUNfUE1fS0VFUF9QT1dFUjsKKwkJcGRhdGEtPnBtX2NhcHMgfD0gTU1DX1BNX0tFRVBfUE9XRVI7CiAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgImVuYWJsZS1zZGlvLXdha2V1cCIsIE5VTEwpKQotCQlwZGF0YS0+c2xvdHNbMF0ucG1fY2FwcyB8PSBNTUNfUE1fV0FLRV9TRElPX0lSUTsKKwkJcGRhdGEtPnBtX2NhcHMgfD0gTU1DX1BNX1dBS0VfU0RJT19JUlE7CiAKIAlyZXR1cm4gcGRhdGE7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhCiAJCQkqb2ZfZ2V0X2hzbW1jX3BkYXRhKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTIwMTgsNyArMjAzMyw3IEBACiAKIHN0YXRpYyBpbnQgb21hcF9oc21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC0yMDQ4LDExICsyMDYzLDYgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQlpZiAocGRhdGEtPm5yX3Nsb3RzID09IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gU2xvdHNcbiIpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAocmVzID09IE5VTEwgfHwgaXJxIDwgMCkKQEAgLTIwNjIsMTQgKzIwNzIsMTAgQEAKIAlpZiAoSVNfRVJSKGJhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKIAotCXJldCA9IG9tYXBfaHNtbWNfZ3Bpb19pbml0KHBkYXRhKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQogCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3Qgb21hcF9oc21tY19ob3N0KSwgJnBkZXYtPmRldik7CiAJaWYgKCFtbWMpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfYWxsb2M7CisJCWdvdG8gZXJyOwogCX0KIAogCWhvc3QJCT0gbW1jX3ByaXYobW1jKTsKQEAgLTIwNzksMTMgKzIwODUsMTYgQEAKIAlob3N0LT51c2VfZG1hCT0gMTsKIAlob3N0LT5kbWFfY2gJPSAtMTsKIAlob3N0LT5pcnEJPSBpcnE7Ci0JaG9zdC0+c2xvdF9pZAk9IDA7CiAJaG9zdC0+bWFwYmFzZQk9IHJlcy0+c3RhcnQgKyBwZGF0YS0+cmVnX29mZnNldDsKIAlob3N0LT5iYXNlCT0gYmFzZSArIHBkYXRhLT5yZWdfb2Zmc2V0OwogCWhvc3QtPnBvd2VyX21vZGUgPSBNTUNfUE9XRVJfT0ZGOwogCWhvc3QtPm5leHRfZGF0YS5jb29raWUgPSAxOwogCWhvc3QtPnBiaWFzX2VuYWJsZWQgPSAwOwogCisJcmV0ID0gb21hcF9oc21tY19ncGlvX2luaXQoaG9zdCwgcGRhdGEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW87CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKIAogCWlmIChwZGV2LT5kZXYub2Zfbm9kZSkKQEAgLTIxNDQsMTQgKzIxNTMsMTQgQEAKIAltbWMtPmNhcHMgfD0gTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwgTU1DX0NBUF9TRF9ISUdIU1BFRUQgfAogCQkgICAgIE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZIHwgTU1DX0NBUF9FUkFTRTsKIAotCW1tYy0+Y2FwcyB8PSBtbWNfc2xvdChob3N0KS5jYXBzOworCW1tYy0+Y2FwcyB8PSBtbWNfcGRhdGEoaG9zdCktPmNhcHM7CiAJaWYgKG1tYy0+Y2FwcyAmIE1NQ19DQVBfOF9CSVRfREFUQSkKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKIAotCWlmIChtbWNfc2xvdChob3N0KS5ub25yZW1vdmFibGUpCisJaWYgKG1tY19wZGF0YShob3N0KS0+bm9ucmVtb3ZhYmxlKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9OT05SRU1PVkFCTEU7CiAKLQltbWMtPnBtX2NhcHMgPSBtbWNfc2xvdChob3N0KS5wbV9jYXBzOworCW1tYy0+cG1fY2FwcyA9IG1tY19wZGF0YShob3N0KS0+cG1fY2FwczsKIAogCW9tYXBfaHNtbWNfY29uZl9idXNfcG93ZXIoaG9zdCk7CiAKQEAgLTIyMDQsMjcgKzIyMTMsMTkgQEAKIAkJZ290byBlcnJfaXJxOwogCX0KIAotCWlmIChwZGF0YS0+aW5pdCAhPSBOVUxMKSB7Ci0JCWlmIChwZGF0YS0+aW5pdCgmcGRldi0+ZGV2KSAhPSAwKSB7Ci0JCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKLQkJCQkiVW5hYmxlIHRvIGNvbmZpZ3VyZSBNTUMgSVJRc1xuIik7Ci0JCQlnb3RvIGVycl9pcnE7Ci0JCX0KLQl9Ci0KLQlpZiAob21hcF9oc21tY19oYXZlX3JlZygpICYmICFtbWNfc2xvdChob3N0KS5zZXRfcG93ZXIpIHsKKwlpZiAob21hcF9oc21tY19oYXZlX3JlZygpICYmICFtbWNfcGRhdGEoaG9zdCktPnNldF9wb3dlcikgewogCQlyZXQgPSBvbWFwX2hzbW1jX3JlZ19nZXQoaG9zdCk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIGVycl9yZWc7CisJCQlnb3RvIGVycl9pcnE7CiAJCWhvc3QtPnVzZV9yZWcgPSAxOwogCX0KIAotCW1tYy0+b2NyX2F2YWlsID0gbW1jX3Nsb3QoaG9zdCkub2NyX21hc2s7CisJbW1jLT5vY3JfYXZhaWwgPSBtbWNfcGRhdGEoaG9zdCktPm9jcl9tYXNrOwogCiAJLyogUmVxdWVzdCBJUlEgZm9yIGNhcmQgZGV0ZWN0ICovCi0JaWYgKChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEpKSB7CisJaWYgKGhvc3QtPmNhcmRfZGV0ZWN0X2lycSkgewogCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZwZGV2LT5kZXYsCi0JCQkJCQltbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEsCisJCQkJCQlob3N0LT5jYXJkX2RldGVjdF9pcnEsCiAJCQkJCQlOVUxMLCBvbWFwX2hzbW1jX2RldGVjdCwKIAkJCQkJICAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9PTkVTSE9ULAogCQkJCQkgICBtbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7CkBAIC0yMjMzLDggKzIyMzQsOCBAQAogCQkJCSJVbmFibGUgdG8gZ3JhYiBNTUMgQ0QgSVJRXG4iKTsKIAkJCWdvdG8gZXJyX2lycV9jZDsKIAkJfQotCQlwZGF0YS0+c3VzcGVuZCA9IG9tYXBfaHNtbWNfc3VzcGVuZF9jZGlycTsKLQkJcGRhdGEtPnJlc3VtZSA9IG9tYXBfaHNtbWNfcmVzdW1lX2NkaXJxOworCQlob3N0LT5zdXNwZW5kID0gb21hcF9oc21tY19zdXNwZW5kX2NkaXJxOworCQlob3N0LT5yZXN1bWUgPSBvbWFwX2hzbW1jX3Jlc3VtZV9jZGlycTsKIAl9CiAKIAlvbWFwX2hzbW1jX2Rpc2FibGVfaXJxKGhvc3QpOwpAQCAtMjI1NSwxMiArMjI1NiwxMiBAQAogCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKLQlpZiAobW1jX3Nsb3QoaG9zdCkubmFtZSAhPSBOVUxMKSB7CisJaWYgKG1tY19wZGF0YShob3N0KS0+bmFtZSAhPSBOVUxMKSB7CiAJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmbW1jLT5jbGFzc19kZXYsICZkZXZfYXR0cl9zbG90X25hbWUpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX3Nsb3RfbmFtZTsKIAl9Ci0JaWYgKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSAmJiBtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUpIHsKKwlpZiAoaG9zdC0+Y2FyZF9kZXRlY3RfaXJxICYmIGhvc3QtPmdldF9jb3Zlcl9zdGF0ZSkgewogCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1tYy0+Y2xhc3NfZGV2LAogCQkJCQkmZGV2X2F0dHJfY292ZXJfc3dpdGNoKTsKIAkJaWYgKHJldCA8IDApCkBAIC0yMjc4LDkgKzIyNzksNiBAQAogZXJyX2lycV9jZDoKIAlpZiAoaG9zdC0+dXNlX3JlZykKIAkJb21hcF9oc21tY19yZWdfcHV0KGhvc3QpOwotZXJyX3JlZzoKLQlpZiAoaG9zdC0+cGRhdGEtPmNsZWFudXApCi0JCWhvc3QtPnBkYXRhLT5jbGVhbnVwKCZwZGV2LT5kZXYpOwogZXJyX2lycToKIAlpZiAoaG9zdC0+dHhfY2hhbikKIAkJZG1hX3JlbGVhc2VfY2hhbm5lbChob3N0LT50eF9jaGFuKTsKQEAgLTIyOTEsOSArMjI4OSw5IEBACiAJaWYgKGhvc3QtPmRiY2xrKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+ZGJjbGspOwogZXJyMToKKwlvbWFwX2hzbW1jX2dwaW9fZnJlZShob3N0LCBwZGF0YSk7CitlcnJfZ3BpbzoKIAltbWNfZnJlZV9ob3N0KG1tYyk7Ci1lcnJfYWxsb2M6Ci0Jb21hcF9oc21tY19ncGlvX2ZyZWUocGRhdGEpOwogZXJyOgogCXJldHVybiByZXQ7CiB9CkBAIC0yMzA2LDggKzIzMDQsNiBAQAogCW1tY19yZW1vdmVfaG9zdChob3N0LT5tbWMpOwogCWlmIChob3N0LT51c2VfcmVnKQogCQlvbWFwX2hzbW1jX3JlZ19wdXQoaG9zdCk7Ci0JaWYgKGhvc3QtPnBkYXRhLT5jbGVhbnVwKQotCQlob3N0LT5wZGF0YS0+Y2xlYW51cCgmcGRldi0+ZGV2KTsKIAogCWlmIChob3N0LT50eF9jaGFuKQogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGhvc3QtPnR4X2NoYW4pOwpAQCAtMjMxOSw3ICsyMzE1LDcgQEAKIAlpZiAoaG9zdC0+ZGJjbGspCiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5kYmNsayk7CiAKLQlvbWFwX2hzbW1jX2dwaW9fZnJlZShob3N0LT5wZGF0YSk7CisJb21hcF9oc21tY19ncGlvX2ZyZWUoaG9zdCwgaG9zdC0+cGRhdGEpOwogCW1tY19mcmVlX2hvc3QoaG9zdC0+bW1jKTsKIAogCXJldHVybiAwOwpAQCAtMjMzMCw4ICsyMzI2LDggQEAKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoaG9zdC0+cGRhdGEtPnN1c3BlbmQpCi0JCXJldHVybiBob3N0LT5wZGF0YS0+c3VzcGVuZChkZXYsIGhvc3QtPnNsb3RfaWQpOworCWlmIChob3N0LT5zdXNwZW5kKQorCQlyZXR1cm4gaG9zdC0+c3VzcGVuZChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzQwLDggKzIzMzYsOCBAQAogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmIChob3N0LT5wZGF0YS0+cmVzdW1lKQotCQlob3N0LT5wZGF0YS0+cmVzdW1lKGRldiwgaG9zdC0+c2xvdF9pZCk7CisJaWYgKGhvc3QtPnJlc3VtZSkKKwkJaG9zdC0+cmVzdW1lKGRldik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1hY3BpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWFjcGkuYwppbmRleCA5Y2NjYzBlLi5kYWJhNDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWFjcGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWFjcGkuYwpAQCAtNzYsNiArNzYsNyBAQAogCWNvbnN0IHN0cnVjdCBzZGhjaV9hY3BpX3Nsb3QJKnNsb3Q7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkZXY7CiAJYm9vbAkJCQl1c2VfcnVudGltZV9wbTsKKwlib29sCQkJCWRtYV9zZXR1cDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZGhjaV9hY3BpX2ZsYWcoc3RydWN0IHNkaGNpX2FjcGlfaG9zdCAqYywgdW5zaWduZWQgaW50IGZsYWcpCkBAIC04NSw3ICs4NiwyOSBAQAogCiBzdGF0aWMgaW50IHNkaGNpX2FjcGlfZW5hYmxlX2RtYShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKIHsKLQlyZXR1cm4gMDsKKwlzdHJ1Y3Qgc2RoY2lfYWNwaV9ob3N0ICpjID0gc2RoY2lfcHJpdihob3N0KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYy0+cGRldi0+ZGV2OworCWludCBlcnIgPSAtMTsKKworCWlmIChjLT5kbWFfc2V0dXApCisJCXJldHVybiAwOworCisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpIHsKKwkJaWYgKGhvc3QtPnF1aXJrczIgJiBTREhDSV9RVUlSSzJfQlJPS0VOXzY0X0JJVF9ETUEpIHsKKwkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9VU0VfNjRfQklUX0RNQTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTsKKwkJCWlmIChlcnIpCisJCQkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIHNldCA2NC1iaXQgRE1BIG1hc2tcbiIpOworCQl9CisJfQorCisJaWYgKGVycikKKwkJZXJyID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSygzMikpOworCisJYy0+ZG1hX3NldHVwID0gIWVycjsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHNkaGNpX2FjcGlfaW50X2h3X3Jlc2V0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQpAQCAtMTgwLDE3ICsyMDMsMjEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RoY2lfYWNwaV9zbG90IHNkaGNpX2FjcGlfc2xvdF9pbnRfZW1tYyA9IHsKIAkuY2hpcCAgICA9ICZzZGhjaV9hY3BpX2NoaXBfaW50LAogCS5jYXBzICAgID0gTU1DX0NBUF84X0JJVF9EQVRBIHwgTU1DX0NBUF9OT05SRU1PVkFCTEUgfAotCQkgICBNTUNfQ0FQX0hXX1JFU0VUIHwgTU1DX0NBUF8xXzhWX0REUiwKKwkJICAgTU1DX0NBUF9IV19SRVNFVCB8IE1NQ19DQVBfMV84Vl9ERFIgfAorCQkgICBNTUNfQ0FQX0JVU19XSURUSF9URVNUIHwgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1ksCiAJLmNhcHMyICAgPSBNTUNfQ0FQMl9IQ19FUkFTRV9TWiwKIAkuZmxhZ3MgICA9IFNESENJX0FDUElfUlVOVElNRV9QTSwKKwkucXVpcmtzICA9IFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQywKIAkucXVpcmtzMiA9IFNESENJX1FVSVJLMl9QUkVTRVRfVkFMVUVfQlJPS0VOIHwgU0RIQ0lfUVVJUksyX1NUT1BfV0lUSF9UQywKIAkucHJvYmVfc2xvdAk9IHNkaGNpX2FjcGlfZW1tY19wcm9iZV9zbG90LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9hY3BpX3Nsb3Qgc2RoY2lfYWNwaV9zbG90X2ludF9zZGlvID0gewotCS5xdWlya3MgID0gU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OLAorCS5xdWlya3MgID0gU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OIHwKKwkJICAgU0RIQ0lfUVVJUktfTk9fRU5EQVRUUl9JTl9OT1BERVNDLAogCS5xdWlya3MyID0gU0RIQ0lfUVVJUksyX0hPU1RfT0ZGX0NBUkRfT04sCi0JLmNhcHMgICAgPSBNTUNfQ0FQX05PTlJFTU9WQUJMRSB8IE1NQ19DQVBfUE9XRVJfT0ZGX0NBUkQsCisJLmNhcHMgICAgPSBNTUNfQ0FQX05PTlJFTU9WQUJMRSB8IE1NQ19DQVBfUE9XRVJfT0ZGX0NBUkQgfAorCQkgICBNTUNfQ0FQX0JVU19XSURUSF9URVNUIHwgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1ksCiAJLmZsYWdzICAgPSBTREhDSV9BQ1BJX1JVTlRJTUVfUE0sCiAJLnBtX2NhcHMgPSBNTUNfUE1fS0VFUF9QT1dFUiwKIAkucHJvYmVfc2xvdAk9IHNkaGNpX2FjcGlfc2Rpb19wcm9iZV9zbG90LApAQCAtMTk5LDggKzIyNiwxMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9hY3BpX3Nsb3Qgc2RoY2lfYWNwaV9zbG90X2ludF9zZCA9IHsKIAkuZmxhZ3MgICA9IFNESENJX0FDUElfU0RfQ0QgfCBTREhDSV9BQ1BJX1NEX0NEX09WRVJSSURFX0xFVkVMIHwKIAkJICAgU0RIQ0lfQUNQSV9SVU5USU1FX1BNLAorCS5xdWlya3MgID0gU0RIQ0lfUVVJUktfTk9fRU5EQVRUUl9JTl9OT1BERVNDLAogCS5xdWlya3MyID0gU0RIQ0lfUVVJUksyX0NBUkRfT05fTkVFRFNfQlVTX09OIHwKIAkJICAgU0RIQ0lfUVVJUksyX1NUT1BfV0lUSF9UQywKKwkuY2FwcyAgICA9IE1NQ19DQVBfQlVTX1dJRFRIX1RFU1QgfCBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWSwKIAkucHJvYmVfc2xvdAk9IHNkaGNpX2FjcGlfc2RfcHJvYmVfc2xvdCwKIH07CiAKQEAgLTMwNSwyMSArMzM0LDYgQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQlpZiAoIWRldi0+ZG1hX21hc2spIHsKLQkJdTY0IGRtYV9tYXNrOwotCi0JCWlmIChzZGhjaV9yZWFkbChob3N0LCBTREhDSV9DQVBBQklMSVRJRVMpICYgU0RIQ0lfQ0FOXzY0QklUKSB7Ci0JCQkvKiA2NC1iaXQgRE1BIGlzIG5vdCBzdXBwb3J0ZWQgYXQgcHJlc2VudCAqLwotCQkJZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwotCQl9IGVsc2UgewotCQkJZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwotCQl9Ci0KLQkJZXJyID0gZG1hX2NvZXJjZV9tYXNrX2FuZF9jb2hlcmVudChkZXYsIGRtYV9tYXNrKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX2ZyZWU7Ci0JfQotCiAJaWYgKGMtPnNsb3QpIHsKIAkJaWYgKGMtPnNsb3QtPnByb2JlX3Nsb3QpIHsKIAkJCWVyciA9IGMtPnNsb3QtPnByb2JlX3Nsb3QocGRldiwgaGlkLCB1aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMKaW5kZXggNTg3ZWUwZS4uMTI3MTFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLWlteC5jCkBAIC02NSw4ICs2NSw2IEBACiAvKiBOT1RFOiB0aGUgbWluaW11bSB2YWxpZCB0dW5pbmcgc3RhcnQgdGFwIGZvciBteDZzbCBpcyAxICovCiAjZGVmaW5lIEVTREhDX1RVTklOR19TVEFSVF9UQVAJCTB4MQogCi0jZGVmaW5lIEVTREhDX1RVTklOR19CTE9DS19QQVRURVJOX0xFTgk2NAotCiAvKiBwaW5jdHJsIHN0YXRlICovCiAjZGVmaW5lIEVTREhDX1BJTkNUUkxfU1RBVEVfMTAwTUhaCSJzdGF0ZV8xMDBtaHoiCiAjZGVmaW5lIEVTREhDX1BJTkNUUkxfU1RBVEVfMjAwTUhaCSJzdGF0ZV8yMDBtaHoiCkBAIC02OTIsOCArNjkwLDYgQEAKIAkvKiBGSVhNRTogZGVsYXkgYSBiaXQgZm9yIGNhcmQgdG8gYmUgcmVhZHkgZm9yIG5leHQgdHVuaW5nIGR1ZSB0byBlcnJvcnMgKi8KIAltZGVsYXkoMSk7CiAKLQkvKiBUaGlzIGlzIGJhbGFuY2VkIGJ5IHRoZSBydW50aW1lIHB1dCBpbiBzZGhjaV90YXNrbGV0X2ZpbmlzaCAqLwotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaG9zdC0+bW1jLT5wYXJlbnQpOwogCXJlZyA9IHJlYWRsKGhvc3QtPmlvYWRkciArIEVTREhDX01JWF9DVFJMKTsKIAlyZWcgfD0gRVNESENfTUlYX0NUUkxfRVhFX1RVTkUgfCBFU0RIQ19NSVhfQ1RSTF9TTVBDTEtfU0VMIHwKIAkJCUVTREhDX01JWF9DVFJMX0ZCQ0xLX1NFTDsKQEAgLTcwNCw1NCArNzAwLDYgQEAKIAkJCXZhbCwgcmVhZGwoaG9zdC0+aW9hZGRyICsgRVNESENfVFVORV9DVFJMX1NUQVRVUykpOwogfQogCi1zdGF0aWMgdm9pZCBlc2RoY19yZXF1ZXN0X2RvbmUoc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCi17Ci0JY29tcGxldGUoJm1ycS0+Y29tcGxldGlvbik7Ci19Ci0KLXN0YXRpYyBpbnQgZXNkaGNfc2VuZF90dW5pbmdfY21kKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgb3Bjb2RlLAotCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQotewotCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQgPSB7MH07Ci0Jc3RydWN0IG1tY19yZXF1ZXN0IG1ycSA9IHtOVUxMfTsKLQlzdHJ1Y3QgbW1jX2RhdGEgZGF0YSA9IHswfTsKLQotCWNtZC5vcGNvZGUgPSBvcGNvZGU7Ci0JY21kLmFyZyA9IDA7Ci0JY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQURUQzsKLQotCWRhdGEuYmxrc3ogPSBFU0RIQ19UVU5JTkdfQkxPQ0tfUEFUVEVSTl9MRU47Ci0JZGF0YS5ibG9ja3MgPSAxOwotCWRhdGEuZmxhZ3MgPSBNTUNfREFUQV9SRUFEOwotCWRhdGEuc2cgPSBzZzsKLQlkYXRhLnNnX2xlbiA9IDE7Ci0KLQltcnEuY21kID0gJmNtZDsKLQltcnEuY21kLT5tcnEgPSAmbXJxOwotCW1ycS5kYXRhID0gJmRhdGE7Ci0JbXJxLmRhdGEtPm1ycSA9ICZtcnE7Ci0JbXJxLmNtZC0+ZGF0YSA9IG1ycS5kYXRhOwotCi0JbXJxLmRvbmUgPSBlc2RoY19yZXF1ZXN0X2RvbmU7Ci0JaW5pdF9jb21wbGV0aW9uKCYobXJxLmNvbXBsZXRpb24pKTsKLQotCXNwaW5fbG9ja19pcnEoJmhvc3QtPmxvY2spOwotCWhvc3QtPm1ycSA9ICZtcnE7Ci0KLQlzZGhjaV9zZW5kX2NvbW1hbmQoaG9zdCwgbXJxLmNtZCk7Ci0KLQlzcGluX3VubG9ja19pcnEoJmhvc3QtPmxvY2spOwotCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmbXJxLmNvbXBsZXRpb24pOwotCi0JaWYgKGNtZC5lcnJvcikKLQkJcmV0dXJuIGNtZC5lcnJvcjsKLQlpZiAoZGF0YS5lcnJvcikKLQkJcmV0dXJuIGRhdGEuZXJyb3I7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgZXNkaGNfcG9zdF90dW5pbmcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7CiAJdTMyIHJlZzsKQEAgLTc2MywyMSArNzExLDEzIEBACiAKIHN0YXRpYyBpbnQgZXNkaGNfZXhlY3V0aW5nX3R1bmluZyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIG9wY29kZSkKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7Ci0JY2hhciAqdHVuaW5nX3BhdHRlcm47CiAJaW50IG1pbiwgbWF4LCBhdmcsIHJldDsKIAotCXR1bmluZ19wYXR0ZXJuID0ga21hbGxvYyhFU0RIQ19UVU5JTkdfQkxPQ0tfUEFUVEVSTl9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghdHVuaW5nX3BhdHRlcm4pCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc2dfaW5pdF9vbmUoJnNnLCB0dW5pbmdfcGF0dGVybiwgRVNESENfVFVOSU5HX0JMT0NLX1BBVFRFUk5fTEVOKTsKLQogCS8qIGZpbmQgdGhlIG1pbmludW0gZGVsYXkgZmlyc3Qgd2hpY2ggY2FuIHBhc3MgdHVuaW5nICovCiAJbWluID0gRVNESENfVFVORV9DVFJMX01JTjsKIAl3aGlsZSAobWluIDwgRVNESENfVFVORV9DVFJMX01BWCkgewogCQllc2RoY19wcmVwYXJlX3R1bmluZyhob3N0LCBtaW4pOwotCQlpZiAoIWVzZGhjX3NlbmRfdHVuaW5nX2NtZChob3N0LCBvcGNvZGUsICZzZykpCisJCWlmICghbW1jX3NlbmRfdHVuaW5nKGhvc3QtPm1tYykpCiAJCQlicmVhazsKIAkJbWluICs9IEVTREhDX1RVTkVfQ1RSTF9TVEVQOwogCX0KQEAgLTc4Niw3ICs3MjYsNyBAQAogCW1heCA9IG1pbiArIEVTREhDX1RVTkVfQ1RSTF9TVEVQOwogCXdoaWxlIChtYXggPCBFU0RIQ19UVU5FX0NUUkxfTUFYKSB7CiAJCWVzZGhjX3ByZXBhcmVfdHVuaW5nKGhvc3QsIG1heCk7Ci0JCWlmIChlc2RoY19zZW5kX3R1bmluZ19jbWQoaG9zdCwgb3Bjb2RlLCAmc2cpKSB7CisJCWlmIChtbWNfc2VuZF90dW5pbmcoaG9zdC0+bW1jKSkgewogCQkJbWF4IC09IEVTREhDX1RVTkVfQ1RSTF9TVEVQOwogCQkJYnJlYWs7CiAJCX0KQEAgLTc5NiwxMSArNzM2LDkgQEAKIAkvKiB1c2UgYXZlcmFnZSBkZWxheSB0byBnZXQgdGhlIGJlc3QgdGltaW5nICovCiAJYXZnID0gKG1pbiArIG1heCkgLyAyOwogCWVzZGhjX3ByZXBhcmVfdHVuaW5nKGhvc3QsIGF2Zyk7Ci0JcmV0ID0gZXNkaGNfc2VuZF90dW5pbmdfY21kKGhvc3QsIG9wY29kZSwgJnNnKTsKKwlyZXQgPSBtbWNfc2VuZF90dW5pbmcoaG9zdC0+bW1jKTsKIAllc2RoY19wb3N0X3R1bmluZyhob3N0KTsKIAotCWtmcmVlKHR1bmluZ19wYXR0ZXJuKTsKLQogCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAidHVubmluZyAlcyBhdCAweCV4IHJldCAlZFxuIiwKIAkJcmV0ID8gImZhaWxlZCIgOiAicGFzc2VkIiwgYXZnLCByZXQpOwogCkBAIC0xMDMxLDExICs5NjksOCBAQAogCiAJaW14X2RhdGEtPnBpbnNfZGVmYXVsdCA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKGlteF9kYXRhLT5waW5jdHJsLAogCQkJCQkJUElOQ1RSTF9TVEFURV9ERUZBVUxUKTsKLQlpZiAoSVNfRVJSKGlteF9kYXRhLT5waW5zX2RlZmF1bHQpKSB7Ci0JCWVyciA9IFBUUl9FUlIoaW14X2RhdGEtPnBpbnNfZGVmYXVsdCk7Ci0JCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiY291bGQgbm90IGdldCBkZWZhdWx0IHN0YXRlXG4iKTsKLQkJZ290byBkaXNhYmxlX2NsazsKLQl9CisJaWYgKElTX0VSUihpbXhfZGF0YS0+cGluc19kZWZhdWx0KSkKKwkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiY291bGQgbm90IGdldCBkZWZhdWx0IHN0YXRlXG4iKTsKIAogCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19CUk9LRU5fVElNRU9VVF9WQUw7CiAKQEAgLTExMjMsNyArMTA1OCw4IEBACiAJfQogCiAJLyogc2RyNTAgYW5kIHNkcjEwNCBuZWVkcyB3b3JrIG9uIDEuOHYgc2lnbmFsIHZvbHRhZ2UgKi8KLQlpZiAoKGJvYXJkZGF0YS0+c3VwcG9ydF92c2VsKSAmJiBlc2RoY19pc191c2RoYyhpbXhfZGF0YSkpIHsKKwlpZiAoKGJvYXJkZGF0YS0+c3VwcG9ydF92c2VsKSAmJiBlc2RoY19pc191c2RoYyhpbXhfZGF0YSkgJiYKKwkgICAgIUlTX0VSUihpbXhfZGF0YS0+cGluc19kZWZhdWx0KSkgewogCQlpbXhfZGF0YS0+cGluc18xMDBtaHogPSBwaW5jdHJsX2xvb2t1cF9zdGF0ZShpbXhfZGF0YS0+cGluY3RybCwKIAkJCQkJCUVTREhDX1BJTkNUUkxfU1RBVEVfMTAwTUhaKTsKIAkJaW14X2RhdGEtPnBpbnNfMjAwbWh6ID0gcGluY3RybF9sb29rdXBfc3RhdGUoaW14X2RhdGEtPnBpbmN0cmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW1zbS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1tc20uYwppbmRleCAzMDgwNDM4NS4uM2QzMmNlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1tc20uYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW1zbS5jCkBAIC0zMzksOSArMzM5LDcgQEAKIHN0YXRpYyBpbnQgc2RoY2lfbXNtX2V4ZWN1dGVfdHVuaW5nKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgb3Bjb2RlKQogewogCWludCB0dW5pbmdfc2VxX2NudCA9IDM7Ci0JdTggcGhhc2UsICpkYXRhX2J1ZiwgdHVuZWRfcGhhc2VzWzE2XSwgdHVuZWRfcGhhc2VfY250ID0gMDsKLQljb25zdCB1OCAqdHVuaW5nX2Jsb2NrX3BhdHRlcm4gPSB0dW5pbmdfYmxrX3BhdHRlcm5fNGJpdDsKLQlpbnQgc2l6ZSA9IHNpemVvZih0dW5pbmdfYmxrX3BhdHRlcm5fNGJpdCk7CisJdTggcGhhc2UsIHR1bmVkX3BoYXNlc1sxNl0sIHR1bmVkX3BoYXNlX2NudCA9IDA7CiAJaW50IHJjOwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gaG9zdC0+bW1jOwogCXN0cnVjdCBtbWNfaW9zIGlvcyA9IGhvc3QtPm1tYy0+aW9zOwpAQCAtMzU1LDUzICszNTMsMjEgQEAKIAkgICAgICAoaW9zLnRpbWluZyA9PSBNTUNfVElNSU5HX1VIU19TRFIxMDQpKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKG9wY29kZSA9PSBNTUNfU0VORF9UVU5JTkdfQkxPQ0tfSFMyMDApICYmCi0JICAgIChtbWMtPmlvcy5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF84KSkgewotCQl0dW5pbmdfYmxvY2tfcGF0dGVybiA9IHR1bmluZ19ibGtfcGF0dGVybl84Yml0OwotCQlzaXplID0gc2l6ZW9mKHR1bmluZ19ibGtfcGF0dGVybl84Yml0KTsKLQl9Ci0KLQlkYXRhX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhX2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIHJldHJ5OgogCS8qIEZpcnN0IG9mIGFsbCByZXNldCB0aGUgdHVuaW5nIGJsb2NrICovCiAJcmMgPSBtc21faW5pdF9jbV9kbGwoaG9zdCk7CiAJaWYgKHJjKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIHJjOwogCiAJcGhhc2UgPSAwOwogCWRvIHsKLQkJc3RydWN0IG1tY19jb21tYW5kIGNtZCA9IHsgMCB9OwotCQlzdHJ1Y3QgbW1jX2RhdGEgZGF0YSA9IHsgMCB9OwotCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgbXJxID0gewotCQkJLmNtZCA9ICZjbWQsCi0JCQkuZGF0YSA9ICZkYXRhCi0JCX07Ci0JCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKLQogCQkvKiBTZXQgdGhlIHBoYXNlIGluIGRlbGF5IGxpbmUgaHcgYmxvY2sgKi8KIAkJcmMgPSBtc21fY29uZmlnX2NtX2RsbF9waGFzZShob3N0LCBwaGFzZSk7CiAJCWlmIChyYykKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIHJjOwogCi0JCWNtZC5vcGNvZGUgPSBvcGNvZGU7Ci0JCWNtZC5mbGFncyA9IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FEVEM7Ci0KLQkJZGF0YS5ibGtzeiA9IHNpemU7Ci0JCWRhdGEuYmxvY2tzID0gMTsKLQkJZGF0YS5mbGFncyA9IE1NQ19EQVRBX1JFQUQ7Ci0JCWRhdGEudGltZW91dF9ucyA9IE5TRUNfUEVSX1NFQzsJLyogMSBzZWNvbmQgKi8KLQotCQlkYXRhLnNnID0gJnNnOwotCQlkYXRhLnNnX2xlbiA9IDE7Ci0JCXNnX2luaXRfb25lKCZzZywgZGF0YV9idWYsIHNpemUpOwotCQltZW1zZXQoZGF0YV9idWYsIDAsIHNpemUpOwotCQltbWNfd2FpdF9mb3JfcmVxKG1tYywgJm1ycSk7Ci0KLQkJaWYgKCFjbWQuZXJyb3IgJiYgIWRhdGEuZXJyb3IgJiYKLQkJICAgICFtZW1jbXAoZGF0YV9idWYsIHR1bmluZ19ibG9ja19wYXR0ZXJuLCBzaXplKSkgeworCQlyYyA9IG1tY19zZW5kX3R1bmluZyhtbWMpOworCQlpZiAoIXJjKSB7CiAJCQkvKiBUdW5pbmcgaXMgc3VjY2Vzc2Z1bCBhdCB0aGlzIHR1bmluZyBwb2ludCAqLwogCQkJdHVuZWRfcGhhc2VzW3R1bmVkX3BoYXNlX2NudCsrXSA9IHBoYXNlOwogCQkJZGV2X2RiZyhtbWNfZGV2KG1tYyksICIlczogRm91bmQgZ29vZCBwaGFzZSA9ICVkXG4iLApAQCAtNDEzLDcgKzM3OSw3IEBACiAJCXJjID0gbXNtX2ZpbmRfbW9zdF9hcHByb3ByaWF0ZV9waGFzZShob3N0LCB0dW5lZF9waGFzZXMsCiAJCQkJCQkgICAgIHR1bmVkX3BoYXNlX2NudCk7CiAJCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKKwkJCXJldHVybiByYzsKIAkJZWxzZQogCQkJcGhhc2UgPSByYzsKIApAQCAtNDIzLDcgKzM4OSw3IEBACiAJCSAqLwogCQlyYyA9IG1zbV9jb25maWdfY21fZGxsX3BoYXNlKGhvc3QsIHBoYXNlKTsKIAkJaWYgKHJjKQotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gcmM7CiAJCWRldl9kYmcobW1jX2RldihtbWMpLCAiJXM6IFNldHRpbmcgdGhlIHR1bmluZyBwaGFzZSB0byAlZFxuIiwKIAkJCSBtbWNfaG9zdG5hbWUobW1jKSwgcGhhc2UpOwogCX0gZWxzZSB7CkBAIC00MzUsOCArNDAxLDYgQEAKIAkJcmMgPSAtRUlPOwogCX0KIAotb3V0OgotCWtmcmVlKGRhdGFfYnVmKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtYXJhc2FuLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWFyYXNhbi5jCmluZGV4IDk4MWQ2NmUuLmJjYjUxZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtYXJhc2FuLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1hcmFzYW4uYwpAQCAtMTY1LDcgKzE2NSw2IEBACiAJaG9zdCA9IHNkaGNpX3BsdGZtX2luaXQocGRldiwgJnNkaGNpX2FyYXNhbl9wZGF0YSwgMCk7CiAJaWYgKElTX0VSUihob3N0KSkgewogCQlyZXQgPSBQVFJfRVJSKGhvc3QpOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBpbml0IGZhaWxlZCAoJXUpXG4iLCByZXQpOwogCQlnb3RvIGNsa19kaXNhYmxlX2FsbDsKIAl9CiAKQEAgLTE3NSwxMCArMTc0LDggQEAKIAlwbHRmbV9ob3N0LT5jbGsgPSBjbGtfeGluOwogCiAJcmV0ID0gc2RoY2lfYWRkX2hvc3QoaG9zdCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSByZWdpc3RlciBmYWlsZWQgKCV1KVxuIiwgcmV0KTsKKwlpZiAocmV0KQogCQlnb3RvIGVycl9wbHRmbV9mcmVlOwotCX0KIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS1vMm1pY3JvLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS1vMm1pY3JvLmMKaW5kZXggNTY3MGUzOC4uZTJlYzEwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLW8ybWljcm8uYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS1vMm1pY3JvLmMKQEAgLTEyNyw4ICsxMjcsNiBAQAogCQlyZXR1cm47CiAJc2NyYXRjaF8zMiAmPSB+KCgxIDw8IDIxKSB8ICgxIDw8IDMwKSk7CiAKLQkvKiBTZXQgUlREMyBmdW5jdGlvbiBkaXNhYmxlZCAqLwotCXNjcmF0Y2hfMzIgfD0gKCgxIDw8IDI5KSB8ICgxIDw8IDI4KSk7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChjaGlwLT5wZGV2LCBPMl9TRF9GVU5DX1JFRzMsIHNjcmF0Y2hfMzIpOwogCiAJLyogU2V0IEwxIEVudHJhbmNlIFRpbWVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwppbmRleCA2MTE5Mjk3Li45NWY3MzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKQEAgLTI2OSw3ICsyNjksOSBAQAogc3RhdGljIGludCBieXRfZW1tY19wcm9iZV9zbG90KHN0cnVjdCBzZGhjaV9wY2lfc2xvdCAqc2xvdCkKIHsKIAlzbG90LT5ob3N0LT5tbWMtPmNhcHMgfD0gTU1DX0NBUF84X0JJVF9EQVRBIHwgTU1DX0NBUF9OT05SRU1PVkFCTEUgfAotCQkJCSBNTUNfQ0FQX0hXX1JFU0VUIHwgTU1DX0NBUF8xXzhWX0REUjsKKwkJCQkgTU1DX0NBUF9IV19SRVNFVCB8IE1NQ19DQVBfMV84Vl9ERFIgfAorCQkJCSBNTUNfQ0FQX0JVU19XSURUSF9URVNUIHwKKwkJCQkgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1k7CiAJc2xvdC0+aG9zdC0+bW1jLT5jYXBzMiB8PSBNTUNfQ0FQMl9IQ19FUkFTRV9TWjsKIAlzbG90LT5od19yZXNldCA9IHNkaGNpX3BjaV9pbnRfaHdfcmVzZXQ7CiAJaWYgKHNsb3QtPmNoaXAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0JTV19FTU1DKQpAQCAtMjc5LDEyICsyODEsMTYgQEAKIAogc3RhdGljIGludCBieXRfc2Rpb19wcm9iZV9zbG90KHN0cnVjdCBzZGhjaV9wY2lfc2xvdCAqc2xvdCkKIHsKLQlzbG90LT5ob3N0LT5tbWMtPmNhcHMgfD0gTU1DX0NBUF9QT1dFUl9PRkZfQ0FSRCB8IE1NQ19DQVBfTk9OUkVNT1ZBQkxFOworCXNsb3QtPmhvc3QtPm1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1BPV0VSX09GRl9DQVJEIHwgTU1DX0NBUF9OT05SRU1PVkFCTEUgfAorCQkJCSBNTUNfQ0FQX0JVU19XSURUSF9URVNUIHwKKwkJCQkgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1k7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnl0X3NkX3Byb2JlX3Nsb3Qoc3RydWN0IHNkaGNpX3BjaV9zbG90ICpzbG90KQogeworCXNsb3QtPmhvc3QtPm1tYy0+Y2FwcyB8PSBNTUNfQ0FQX0JVU19XSURUSF9URVNUIHwKKwkJCQkgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1k7CiAJc2xvdC0+Y2RfY29uX2lkID0gTlVMTDsKIAlzbG90LT5jZF9pZHggPSAwOwogCXNsb3QtPmNkX292ZXJyaWRlX2xldmVsID0gdHJ1ZTsKQEAgLTI5NCwxMSArMzAwLDEzIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9pbnRlbF9ieXRfZW1tYyA9IHsKIAkuYWxsb3dfcnVudGltZV9wbSA9IHRydWUsCiAJLnByb2JlX3Nsb3QJPSBieXRfZW1tY19wcm9iZV9zbG90LAorCS5xdWlya3MJCT0gU0RIQ0lfUVVJUktfTk9fRU5EQVRUUl9JTl9OT1BERVNDLAogCS5xdWlya3MyCT0gU0RIQ0lfUVVJUksyX1BSRVNFVF9WQUxVRV9CUk9LRU4gfAogCQkJICBTREhDSV9RVUlSSzJfU1RPUF9XSVRIX1RDLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9wY2lfZml4ZXMgc2RoY2lfaW50ZWxfYnl0X3NkaW8gPSB7CisJLnF1aXJrcwkJPSBTREhDSV9RVUlSS19OT19FTkRBVFRSX0lOX05PUERFU0MsCiAJLnF1aXJrczIJPSBTREhDSV9RVUlSSzJfSE9TVF9PRkZfQ0FSRF9PTiB8CiAJCQlTREhDSV9RVUlSSzJfUFJFU0VUX1ZBTFVFX0JST0tFTiwKIAkuYWxsb3dfcnVudGltZV9wbSA9IHRydWUsCkBAIC0zMDYsNiArMzE0LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RoY2lfcGNpX2ZpeGVzIHNkaGNpX2ludGVsX2J5dF9zZCA9IHsKKwkucXVpcmtzCQk9IFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQywKIAkucXVpcmtzMgk9IFNESENJX1FVSVJLMl9DQVJEX09OX05FRURTX0JVU19PTiB8CiAJCQkgIFNESENJX1FVSVJLMl9QUkVTRVRfVkFMVUVfQlJPS0VOIHwKIAkJCSAgU0RIQ0lfUVVJUksyX1NUT1BfV0lUSF9UQywKQEAgLTY0NSw2ICs2NTQsMjUgQEAKIAkucHJvYmVfc2xvdAk9IHJ0c3hfcHJvYmVfc2xvdCwKIH07CiAKK3N0YXRpYyBpbnQgYW1kX3Byb2JlKHN0cnVjdCBzZGhjaV9wY2lfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgcGNpX2Rldgkqc21idXNfZGV2OworCisJc21idXNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsCisJCQlQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NNQlVTLCBOVUxMKTsKKworCWlmIChzbWJ1c19kZXYgJiYgKHNtYnVzX2Rldi0+cmV2aXNpb24gPCAweDUxKSkgeworCQljaGlwLT5xdWlya3MyIHw9IFNESENJX1FVSVJLMl9DTEVBUl9UUkFOU0ZFUk1PREVfUkVHX0JFRk9SRV9DTUQ7CisJCWNoaXAtPnF1aXJrczIgfD0gU0RIQ0lfUVVJUksyX0JST0tFTl9IUzIwMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9wY2lfZml4ZXMgc2RoY2lfYW1kID0geworCS5wcm9iZQkJPSBhbWRfcHJvYmUsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdID0gewogCXsKIAkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1JJQ09ILApAQCAtMTA0NCw3ICsxMDcyLDE1IEBACiAJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAogCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX28yLAogCX0sCi0KKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9BTUQsCisJCS5kZXZpY2UJCT0gUENJX0FOWV9JRCwKKwkJLmNsYXNzCQk9IFBDSV9DTEFTU19TWVNURU1fU0RIQ0kgPDwgOCwKKwkJLmNsYXNzX21hc2sJPSAweEZGRkYwMCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX2FtZCwKKwl9LAogCXsJLyogR2VuZXJpYyBTRCBob3N0IGNvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRV9DTEFTUygoUENJX0NMQVNTX1NZU1RFTV9TREhDSSA8PCA4KSwgMHhGRkZGMDApCiAJfSwKQEAgLTEwNjQsNyArMTEwMCw3IEBACiB7CiAJc3RydWN0IHNkaGNpX3BjaV9zbG90ICpzbG90OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCWludCByZXQ7CisJaW50IHJldCA9IC0xOwogCiAJc2xvdCA9IHNkaGNpX3ByaXYoaG9zdCk7CiAJcGRldiA9IHNsb3QtPmNoaXAtPnBkZXY7CkBAIC0xMDc2LDcgKzExMTIsMTcgQEAKIAkJCSJkb2Vzbid0IGZ1bGx5IGNsYWltIHRvIHN1cHBvcnQgaXQuXG4iKTsKIAl9CiAKLQlyZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOworCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV82NF9CSVRfRE1BKSB7CisJCWlmIChob3N0LT5xdWlya3MyICYgU0RIQ0lfUVVJUksyX0JST0tFTl82NF9CSVRfRE1BKSB7CisJCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFXzY0X0JJVF9ETUE7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpOworCQkJaWYgKHJldCkKKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCA2NC1iaXQgRE1BIG1hc2tcbiIpOworCQl9CisJfQorCWlmIChyZXQpCisJCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2Mi5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2Mi5jCmluZGV4IGI0YzIzZTkuLmY5ODAwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjIuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYyLmMKQEAgLTE2NywyMyArMTY3LDE3IEBACiAJc3RydWN0IHNkaGNpX3B4YV9wbGF0ZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gTlVMTDsKLQlzdHJ1Y3Qgc2RoY2lfcHhhICpweGEgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCiAJaW50IHJldDsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKLQlweGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2RoY2lfcHhhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFweGEpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJaG9zdCA9IHNkaGNpX3BsdGZtX2luaXQocGRldiwgTlVMTCwgMCk7Ci0JaWYgKElTX0VSUihob3N0KSkgewotCQlrZnJlZShweGEpOworCWlmIChJU19FUlIoaG9zdCkpCiAJCXJldHVybiBQVFJfRVJSKGhvc3QpOwotCX0KKwogCXBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwotCXBsdGZtX2hvc3QtPnByaXYgPSBweGE7CisJcGx0Zm1faG9zdC0+cHJpdiA9IE5VTEw7CiAKIAljbGsgPSBjbGtfZ2V0KGRldiwgIlBYQS1TREhDTEsiKTsKIAlpZiAoSVNfRVJSKGNsaykpIHsKQEAgLTIzOCw3ICsyMzIsNiBAQAogCWNsa19wdXQoY2xrKTsKIGVycl9jbGtfZ2V0OgogCXNkaGNpX3BsdGZtX2ZyZWUocGRldik7Ci0Ja2ZyZWUocHhhKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDYsMTQgKzIzOSwxMiBAQAogewogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNkaGNpX3BsdGZtX2hvc3QgKnBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwotCXN0cnVjdCBzZGhjaV9weGEgKnB4YSA9IHBsdGZtX2hvc3QtPnByaXY7CiAKIAlzZGhjaV9yZW1vdmVfaG9zdChob3N0LCAxKTsKIAogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwbHRmbV9ob3N0LT5jbGspOwogCWNsa19wdXQocGx0Zm1faG9zdC0+Y2xrKTsKIAlzZGhjaV9wbHRmbV9mcmVlKHBkZXYpOwotCWtmcmVlKHB4YSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYwppbmRleCA1MDM2ZDdkLi5hZDBiYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYzLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2My5jCkBAIC01OCw2ICs1OCwxMiBAQAogI2RlZmluZSBTRENFX01JU0NfSU5UCQkoMTw8MikKICNkZWZpbmUgU0RDRV9NSVNDX0lOVF9FTgkoMTw8MSkKIAorc3RydWN0IHNkaGNpX3B4YSB7CisJc3RydWN0IGNsayAqY2xrX2NvcmU7CisJc3RydWN0IGNsayAqY2xrX2lvOworCXU4CXBvd2VyX21vZGU7Cit9OworCiAvKgogICogVGhlc2UgcmVnaXN0ZXJzIGFyZSByZWxhdGl2ZSB0byB0aGUgc2Vjb25kIHJlZ2lzdGVyIHJlZ2lvbiwgZm9yIHRoZQogICogTUJ1cyBicmlkZ2UuCkBAIC0yMTEsNiArMjE3LDcgQEAKIAljYXNlIE1NQ19USU1JTkdfVUhTX1NEUjEwNDoKIAkJY3RybF8yIHw9IFNESENJX0NUUkxfVUhTX1NEUjEwNCB8IFNESENJX0NUUkxfVkREXzE4MDsKIAkJYnJlYWs7CisJY2FzZSBNTUNfVElNSU5HX01NQ19ERFI1MjoKIAljYXNlIE1NQ19USU1JTkdfVUhTX0REUjUwOgogCQljdHJsXzIgfD0gU0RIQ0lfQ1RSTF9VSFNfRERSNTAgfCBTREhDSV9DVFJMX1ZERF8xODA7CiAJCWJyZWFrOwpAQCAtMjgzLDkgKzI5MCw3IEBACiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCBzZGhjaV9weGEgKnB4YSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7Ci0KIAlpbnQgcmV0OwotCXN0cnVjdCBjbGsgKmNsazsKIAogCXB4YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHNkaGNpX3B4YSksIEdGUF9LRVJORUwpOwogCWlmICghcHhhKQpAQCAtMzA1LDE0ICszMTAsMjAgQEAKIAlwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKIAlwbHRmbV9ob3N0LT5wcml2ID0gcHhhOwogCi0JY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihjbGspKSB7CisJcHhhLT5jbGtfaW8gPSBkZXZtX2Nsa19nZXQoZGV2LCAiaW8iKTsKKwlpZiAoSVNfRVJSKHB4YS0+Y2xrX2lvKSkKKwkJcHhhLT5jbGtfaW8gPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHB4YS0+Y2xrX2lvKSkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgaW8gY2xvY2tcbiIpOwotCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCXJldCA9IFBUUl9FUlIocHhhLT5jbGtfaW8pOwogCQlnb3RvIGVycl9jbGtfZ2V0OwogCX0KLQlwbHRmbV9ob3N0LT5jbGsgPSBjbGs7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7CisJcGx0Zm1faG9zdC0+Y2xrID0gcHhhLT5jbGtfaW87CisJY2xrX3ByZXBhcmVfZW5hYmxlKHB4YS0+Y2xrX2lvKTsKKworCXB4YS0+Y2xrX2NvcmUgPSBkZXZtX2Nsa19nZXQoZGV2LCAiY29yZSIpOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfcHJlcGFyZV9lbmFibGUocHhhLT5jbGtfY29yZSk7CiAKIAkvKiBlbmFibGUgMS84ViBERFIgY2FwYWJsZSAqLwogCWhvc3QtPm1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzFfOFZfRERSOwpAQCAtMzg1LDcgKzM5Niw5IEBACiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogZXJyX29mX3BhcnNlOgogZXJyX2NkX3JlcToKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfaW8pOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfY29yZSk7CiBlcnJfY2xrX2dldDoKIGVycl9tYnVzX3dpbjoKIAlzZGhjaV9wbHRmbV9mcmVlKHBkZXYpOwpAQCAtMzk2LDEyICs0MDksMTUgQEAKIHsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlzdHJ1Y3Qgc2RoY2lfcHhhICpweGEgPSBwbHRmbV9ob3N0LT5wcml2OwogCiAJcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKIAlzZGhjaV9yZW1vdmVfaG9zdChob3N0LCAxKTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAKLQljbGtfZGlzYWJsZV91bnByZXBhcmUocGx0Zm1faG9zdC0+Y2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfaW8pOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfY29yZSk7CiAKIAlzZGhjaV9wbHRmbV9mcmVlKHBkZXYpOwogCkBAIC00NDEsMTUgKzQ1NywxNiBAQAogewogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNkaGNpX3BsdGZtX2hvc3QgKnBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCXN0cnVjdCBzZGhjaV9weGEgKnB4YSA9IHBsdGZtX2hvc3QtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChwbHRmbV9ob3N0LT5jbGspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQkJaG9zdC0+cnVudGltZV9zdXNwZW5kZWQgPSB0cnVlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlob3N0LT5ydW50aW1lX3N1c3BlbmRlZCA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShwbHRmbV9ob3N0LT5jbGspOwotCX0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfaW8pOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfY29yZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1OCwxNSArNDc1LDE2IEBACiB7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisJc3RydWN0IHNkaGNpX3B4YSAqcHhhID0gcGx0Zm1faG9zdC0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKHBsdGZtX2hvc3QtPmNsaykgewotCQljbGtfcHJlcGFyZV9lbmFibGUocGx0Zm1faG9zdC0+Y2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUocHhhLT5jbGtfaW8pOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfcHJlcGFyZV9lbmFibGUocHhhLT5jbGtfY29yZSk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQkJaG9zdC0+cnVudGltZV9zdXNwZW5kZWQgPSBmYWxzZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWhvc3QtPnJ1bnRpbWVfc3VzcGVuZGVkID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwppbmRleCAwY2U2ZWIxNy4uNGY3YTYzMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwpAQCAtMzAwLDYgKzMwMCw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gJm91cmhvc3QtPnBkZXYtPmRldjsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdTE2IGNsayA9IDA7CisJaW50IHJldDsKIAogCWhvc3QtPm1tYy0+YWN0dWFsX2Nsb2NrID0gMDsKIApAQCAtMzExLDcgKzMxMiwxMiBAQAogCiAJc2RoY2lfczNjX3NldF9jbG9jayhob3N0LCBjbG9jayk7CiAKLQljbGtfc2V0X3JhdGUob3VyaG9zdC0+Y2xrX2J1c1tvdXJob3N0LT5jdXJfY2xrXSwgY2xvY2spOworCXJldCA9IGNsa19zZXRfcmF0ZShvdXJob3N0LT5jbGtfYnVzW291cmhvc3QtPmN1cl9jbGtdLCBjbG9jayk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IGZhaWxlZCB0byBzZXQgY2xvY2sgcmF0ZSAldUh6XG4iLAorCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGNsb2NrKTsKKwkJcmV0dXJuOworCX0KIAogCWNsayA9IFNESENJX0NMT0NLX0lOVF9FTjsKIAlzZGhjaV93cml0ZXcoaG9zdCwgY2xrLCBTREhDSV9DTE9DS19DT05UUk9MKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwppbmRleCBhZGExYTNlLi43M2RlNjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCkBAIC00NCw4ICs0NCw2IEBACiAKICNkZWZpbmUgTUFYX1RVTklOR19MT09QIDQwCiAKLSNkZWZpbmUgQURNQV9TSVpFCSgoMTI4ICogMiArIDEpICogNCkKLQogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1Z19xdWlya3MgPSAwOwogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1Z19xdWlya3MyOwogCkBAIC0xMTksMTAgKzExNywxNyBAQAogCXByX2RlYnVnKERSSVZFUl9OQU1FICI6IEhvc3QgY3RsMjogMHglMDh4XG4iLAogCQlzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9IT1NUX0NPTlRST0wyKSk7CiAKLQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkKLQkJcHJfZGVidWcoRFJJVkVSX05BTUUgIjogQURNQSBFcnI6IDB4JTA4eCB8IEFETUEgUHRyOiAweCUwOHhcbiIsCi0JCSAgICAgICByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0VSUk9SKSwKLQkJICAgICAgIHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0FETUFfQUREUkVTUykpOworCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKSB7CisJCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV82NF9CSVRfRE1BKQorCQkJcHJfZGVidWcoRFJJVkVSX05BTUUgIjogQURNQSBFcnI6IDB4JTA4eCB8IEFETUEgUHRyOiAweCUwOHglMDh4XG4iLAorCQkJCSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0VSUk9SKSwKKwkJCQkgcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQURNQV9BRERSRVNTX0hJKSwKKwkJCQkgcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQURNQV9BRERSRVNTKSk7CisJCWVsc2UKKwkJCXByX2RlYnVnKERSSVZFUl9OQU1FICI6IEFETUEgRXJyOiAweCUwOHggfCBBRE1BIFB0cjogMHglMDh4XG4iLAorCQkJCSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0VSUk9SKSwKKwkJCQkgcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQURNQV9BRERSRVNTKSk7CisJfQogCiAJcHJfZGVidWcoRFJJVkVSX05BTUUgIjogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiB9CkBAIC00NDgsMTggKzQ1MywyNiBAQAogCWxvY2FsX2lycV9yZXN0b3JlKCpmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNkaGNpX3NldF9hZG1hX2Rlc2ModTggKmRlc2MsIHUzMiBhZGRyLCBpbnQgbGVuLCB1bnNpZ25lZCBjbWQpCitzdGF0aWMgdm9pZCBzZGhjaV9hZG1hX3dyaXRlX2Rlc2Moc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHZvaWQgKmRlc2MsCisJCQkJICBkbWFfYWRkcl90IGFkZHIsIGludCBsZW4sIHVuc2lnbmVkIGNtZCkKIHsKLQlfX2xlMzIgKmRhdGFkZHIgPSAoX19sZTMyIF9fZm9yY2UgKikoZGVzYyArIDQpOwotCV9fbGUxNiAqY21kbGVuID0gKF9fbGUxNiBfX2ZvcmNlICopZGVzYzsKKwlzdHJ1Y3Qgc2RoY2lfYWRtYTJfNjRfZGVzYyAqZG1hX2Rlc2MgPSBkZXNjOwogCi0JLyogU0RIQ0kgc3BlY2lmaWNhdGlvbiBzYXlzIEFETUEgZGVzY3JpcHRvcnMgc2hvdWxkIGJlIDQgYnl0ZQotCSAqIGFsaWduZWQsIHNvIHVzaW5nIDE2IG9yIDMyYml0IG9wZXJhdGlvbnMgc2hvdWxkIGJlIHNhZmUuICovCisJLyogMzItYml0IGFuZCA2NC1iaXQgZGVzY3JpcHRvcnMgaGF2ZSB0aGVzZSBtZW1iZXJzIGluIHNhbWUgcG9zaXRpb24gKi8KKwlkbWFfZGVzYy0+Y21kID0gY3B1X3RvX2xlMTYoY21kKTsKKwlkbWFfZGVzYy0+bGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKwlkbWFfZGVzYy0+YWRkcl9sbyA9IGNwdV90b19sZTMyKCh1MzIpYWRkcik7CiAKLQljbWRsZW5bMF0gPSBjcHVfdG9fbGUxNihjbWQpOwotCWNtZGxlblsxXSA9IGNwdV90b19sZTE2KGxlbik7CisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpCisJCWRtYV9kZXNjLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoKHU2NClhZGRyID4+IDMyKTsKK30KIAotCWRhdGFkZHJbMF0gPSBjcHVfdG9fbGUzMihhZGRyKTsKK3N0YXRpYyB2b2lkIHNkaGNpX2FkbWFfbWFya19lbmQodm9pZCAqZGVzYykKK3sKKwlzdHJ1Y3Qgc2RoY2lfYWRtYTJfNjRfZGVzYyAqZG1hX2Rlc2MgPSBkZXNjOworCisJLyogMzItYml0IGFuZCA2NC1iaXQgZGVzY3JpcHRvcnMgaGF2ZSAnY21kJyBpbiBzYW1lIHBvc2l0aW9uICovCisJZG1hX2Rlc2MtPmNtZCB8PSBjcHVfdG9fbGUxNihBRE1BMl9FTkQpOwogfQogCiBzdGF0aWMgaW50IHNkaGNpX2FkbWFfdGFibGVfcHJlKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LApAQCAtNDY3LDggKzQ4MCw4IEBACiB7CiAJaW50IGRpcmVjdGlvbjsKIAotCXU4ICpkZXNjOwotCXU4ICphbGlnbjsKKwl2b2lkICpkZXNjOworCXZvaWQgKmFsaWduOwogCWRtYV9hZGRyX3QgYWRkcjsKIAlkbWFfYWRkcl90IGFsaWduX2FkZHI7CiAJaW50IGxlbiwgb2Zmc2V0OwpAQCAtNDg5LDE3ICs1MDIsMTcgQEAKIAkJZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKIAogCWhvc3QtPmFsaWduX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShtbWNfZGV2KGhvc3QtPm1tYyksCi0JCWhvc3QtPmFsaWduX2J1ZmZlciwgMTI4ICogNCwgZGlyZWN0aW9uKTsKKwkJaG9zdC0+YWxpZ25fYnVmZmVyLCBob3N0LT5hbGlnbl9idWZmZXJfc3osIGRpcmVjdGlvbik7CiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+YWxpZ25fYWRkcikpCiAJCWdvdG8gZmFpbDsKLQlCVUdfT04oaG9zdC0+YWxpZ25fYWRkciAmIDB4Myk7CisJQlVHX09OKGhvc3QtPmFsaWduX2FkZHIgJiBob3N0LT5hbGlnbl9tYXNrKTsKIAogCWhvc3QtPnNnX2NvdW50ID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksCiAJCWRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sIGRpcmVjdGlvbik7CiAJaWYgKGhvc3QtPnNnX2NvdW50ID09IDApCiAJCWdvdG8gdW5tYXBfYWxpZ247CiAKLQlkZXNjID0gaG9zdC0+YWRtYV9kZXNjOworCWRlc2MgPSBob3N0LT5hZG1hX3RhYmxlOwogCWFsaWduID0gaG9zdC0+YWxpZ25fYnVmZmVyOwogCiAJYWxpZ25fYWRkciA9IGhvc3QtPmFsaWduX2FkZHI7CkBAIC01MTUsMjQgKzUyOCwyNyBAQAogCQkgKiB0aGUgKHVwIHRvIHRocmVlKSBieXRlcyB0aGF0IHNjcmV3IHVwIHRoZQogCQkgKiBhbGlnbm1lbnQuCiAJCSAqLwotCQlvZmZzZXQgPSAoNCAtIChhZGRyICYgMHgzKSkgJiAweDM7CisJCW9mZnNldCA9IChob3N0LT5hbGlnbl9zeiAtIChhZGRyICYgaG9zdC0+YWxpZ25fbWFzaykpICYKKwkJCSBob3N0LT5hbGlnbl9tYXNrOwogCQlpZiAob2Zmc2V0KSB7CiAJCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgewogCQkJCWJ1ZmZlciA9IHNkaGNpX2ttYXBfYXRvbWljKHNnLCAmZmxhZ3MpOwotCQkJCVdBUk5fT04oKChsb25nKWJ1ZmZlciAmIFBBR0VfTUFTSykgPiAoUEFHRV9TSVpFIC0gMykpOworCQkJCVdBUk5fT04oKChsb25nKWJ1ZmZlciAmIChQQUdFX1NJWkUgLSAxKSkgPgorCQkJCQkoUEFHRV9TSVpFIC0gb2Zmc2V0KSk7CiAJCQkJbWVtY3B5KGFsaWduLCBidWZmZXIsIG9mZnNldCk7CiAJCQkJc2RoY2lfa3VubWFwX2F0b21pYyhidWZmZXIsICZmbGFncyk7CiAJCQl9CiAKIAkJCS8qIHRyYW4sIHZhbGlkICovCi0JCQlzZGhjaV9zZXRfYWRtYV9kZXNjKGRlc2MsIGFsaWduX2FkZHIsIG9mZnNldCwgMHgyMSk7CisJCQlzZGhjaV9hZG1hX3dyaXRlX2Rlc2MoaG9zdCwgZGVzYywgYWxpZ25fYWRkciwgb2Zmc2V0LAorCQkJCQkgICAgICBBRE1BMl9UUkFOX1ZBTElEKTsKIAogCQkJQlVHX09OKG9mZnNldCA+IDY1NTM2KTsKIAotCQkJYWxpZ24gKz0gNDsKLQkJCWFsaWduX2FkZHIgKz0gNDsKKwkJCWFsaWduICs9IGhvc3QtPmFsaWduX3N6OworCQkJYWxpZ25fYWRkciArPSBob3N0LT5hbGlnbl9zejsKIAotCQkJZGVzYyArPSA4OworCQkJZGVzYyArPSBob3N0LT5kZXNjX3N6OwogCiAJCQlhZGRyICs9IG9mZnNldDsKIAkJCWxlbiAtPSBvZmZzZXQ7CkBAIC01NDEsMjMgKzU1NywyMyBAQAogCQlCVUdfT04obGVuID4gNjU1MzYpOwogCiAJCS8qIHRyYW4sIHZhbGlkICovCi0JCXNkaGNpX3NldF9hZG1hX2Rlc2MoZGVzYywgYWRkciwgbGVuLCAweDIxKTsKLQkJZGVzYyArPSA4OworCQlzZGhjaV9hZG1hX3dyaXRlX2Rlc2MoaG9zdCwgZGVzYywgYWRkciwgbGVuLCBBRE1BMl9UUkFOX1ZBTElEKTsKKwkJZGVzYyArPSBob3N0LT5kZXNjX3N6OwogCiAJCS8qCiAJCSAqIElmIHRoaXMgdHJpZ2dlcnMgdGhlbiB3ZSBoYXZlIGEgY2FsY3VsYXRpb24gYnVnCiAJCSAqIHNvbWV3aGVyZS4gOi8KIAkJICovCi0JCVdBUk5fT04oKGRlc2MgLSBob3N0LT5hZG1hX2Rlc2MpID4gQURNQV9TSVpFKTsKKwkJV0FSTl9PTigoZGVzYyAtIGhvc3QtPmFkbWFfdGFibGUpID49IGhvc3QtPmFkbWFfdGFibGVfc3opOwogCX0KIAogCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19OT19FTkRBVFRSX0lOX05PUERFU0MpIHsKIAkJLyoKIAkJKiBNYXJrIHRoZSBsYXN0IGRlc2NyaXB0b3IgYXMgdGhlIHRlcm1pbmF0aW5nIGRlc2NyaXB0b3IKIAkJKi8KLQkJaWYgKGRlc2MgIT0gaG9zdC0+YWRtYV9kZXNjKSB7Ci0JCQlkZXNjIC09IDg7Ci0JCQlkZXNjWzBdIHw9IDB4MjsgLyogZW5kICovCisJCWlmIChkZXNjICE9IGhvc3QtPmFkbWFfdGFibGUpIHsKKwkJCWRlc2MgLT0gaG9zdC0+ZGVzY19zejsKKwkJCXNkaGNpX2FkbWFfbWFya19lbmQoZGVzYyk7CiAJCX0KIAl9IGVsc2UgewogCQkvKgpAQCAtNTY1LDcgKzU4MSw3IEBACiAJCSovCiAKIAkJLyogbm9wLCBlbmQsIHZhbGlkICovCi0JCXNkaGNpX3NldF9hZG1hX2Rlc2MoZGVzYywgMCwgMCwgMHgzKTsKKwkJc2RoY2lfYWRtYV93cml0ZV9kZXNjKGhvc3QsIGRlc2MsIDAsIDAsIEFETUEyX05PUF9FTkRfVkFMSUQpOwogCX0KIAogCS8qCkBAIC01NzMsMTQgKzU4OSwxNCBAQAogCSAqLwogCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSB7CiAJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKG1tY19kZXYoaG9zdC0+bW1jKSwKLQkJCWhvc3QtPmFsaWduX2FkZHIsIDEyOCAqIDQsIGRpcmVjdGlvbik7CisJCQlob3N0LT5hbGlnbl9hZGRyLCBob3N0LT5hbGlnbl9idWZmZXJfc3osIGRpcmVjdGlvbik7CiAJfQogCiAJcmV0dXJuIDA7CiAKIHVubWFwX2FsaWduOgogCWRtYV91bm1hcF9zaW5nbGUobW1jX2Rldihob3N0LT5tbWMpLCBob3N0LT5hbGlnbl9hZGRyLAotCQkxMjggKiA0LCBkaXJlY3Rpb24pOworCQlob3N0LT5hbGlnbl9idWZmZXJfc3osIGRpcmVjdGlvbik7CiBmYWlsOgogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtNTkyLDcgKzYwOCw3IEBACiAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCBpLCBzaXplOwotCXU4ICphbGlnbjsKKwl2b2lkICphbGlnbjsKIAljaGFyICpidWZmZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIGhhc191bmFsaWduZWQ7CkBAIC02MDMsMTIgKzYxOSwxMiBAQAogCQlkaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwogCiAJZG1hX3VubWFwX3NpbmdsZShtbWNfZGV2KGhvc3QtPm1tYyksIGhvc3QtPmFsaWduX2FkZHIsCi0JCTEyOCAqIDQsIGRpcmVjdGlvbik7CisJCWhvc3QtPmFsaWduX2J1ZmZlcl9zeiwgZGlyZWN0aW9uKTsKIAogCS8qIERvIGEgcXVpY2sgc2NhbiBvZiB0aGUgU0cgbGlzdCBmb3IgYW55IHVuYWxpZ25lZCBtYXBwaW5ncyAqLwogCWhhc191bmFsaWduZWQgPSBmYWxzZTsKIAlmb3JfZWFjaF9zZyhkYXRhLT5zZywgc2csIGhvc3QtPnNnX2NvdW50LCBpKQotCQlpZiAoc2dfZG1hX2FkZHJlc3Moc2cpICYgMykgeworCQlpZiAoc2dfZG1hX2FkZHJlc3Moc2cpICYgaG9zdC0+YWxpZ25fbWFzaykgewogCQkJaGFzX3VuYWxpZ25lZCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQpAQCAtNjIwLDE1ICs2MzYsMTcgQEAKIAkJYWxpZ24gPSBob3N0LT5hbGlnbl9idWZmZXI7CiAKIAkJZm9yX2VhY2hfc2coZGF0YS0+c2csIHNnLCBob3N0LT5zZ19jb3VudCwgaSkgewotCQkJaWYgKHNnX2RtYV9hZGRyZXNzKHNnKSAmIDB4MykgewotCQkJCXNpemUgPSA0IC0gKHNnX2RtYV9hZGRyZXNzKHNnKSAmIDB4Myk7CisJCQlpZiAoc2dfZG1hX2FkZHJlc3Moc2cpICYgaG9zdC0+YWxpZ25fbWFzaykgeworCQkJCXNpemUgPSBob3N0LT5hbGlnbl9zeiAtCisJCQkJICAgICAgIChzZ19kbWFfYWRkcmVzcyhzZykgJiBob3N0LT5hbGlnbl9tYXNrKTsKIAogCQkJCWJ1ZmZlciA9IHNkaGNpX2ttYXBfYXRvbWljKHNnLCAmZmxhZ3MpOwotCQkJCVdBUk5fT04oKChsb25nKWJ1ZmZlciAmIFBBR0VfTUFTSykgPiAoUEFHRV9TSVpFIC0gMykpOworCQkJCVdBUk5fT04oKChsb25nKWJ1ZmZlciAmIChQQUdFX1NJWkUgLSAxKSkgPgorCQkJCQkoUEFHRV9TSVpFIC0gc2l6ZSkpOwogCQkJCW1lbWNweShidWZmZXIsIGFsaWduLCBzaXplKTsKIAkJCQlzZGhjaV9rdW5tYXBfYXRvbWljKGJ1ZmZlciwgJmZsYWdzKTsKIAotCQkJCWFsaWduICs9IDQ7CisJCQkJYWxpZ24gKz0gaG9zdC0+YWxpZ25fc3o7CiAJCQl9CiAJCX0KIAl9CkBAIC04MjIsNiArODQwLDEwIEBACiAJCQl9IGVsc2UgewogCQkJCXNkaGNpX3dyaXRlbChob3N0LCBob3N0LT5hZG1hX2FkZHIsCiAJCQkJCVNESENJX0FETUFfQUREUkVTUyk7CisJCQkJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpCisJCQkJCXNkaGNpX3dyaXRlbChob3N0LAorCQkJCQkJICAgICAodTY0KWhvc3QtPmFkbWFfYWRkciA+PiAzMiwKKwkJCQkJCSAgICAgU0RIQ0lfQURNQV9BRERSRVNTX0hJKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWludCBzZ19jbnQ7CkBAIC04NTUsMTAgKzg3NywxNCBAQAogCQljdHJsID0gc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIAkJY3RybCAmPSB+U0RIQ0lfQ1RSTF9ETUFfTUFTSzsKIAkJaWYgKChob3N0LT5mbGFncyAmIFNESENJX1JFUV9VU0VfRE1BKSAmJgotCQkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpKQotCQkJY3RybCB8PSBTREhDSV9DVFJMX0FETUEzMjsKLQkJZWxzZQorCQkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpKSB7CisJCQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkKKwkJCQljdHJsIHw9IFNESENJX0NUUkxfQURNQTY0OworCQkJZWxzZQorCQkJCWN0cmwgfD0gU0RIQ0lfQ1RSTF9BRE1BMzI7CisJCX0gZWxzZSB7CiAJCQljdHJsIHw9IFNESENJX0NUUkxfU0RNQTsKKwkJfQogCQlzZGhjaV93cml0ZWIoaG9zdCwgY3RybCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIAl9CiAKQEAgLTg4OSwxMCArOTE1LDE1IEBACiAJc3RydWN0IG1tY19kYXRhICpkYXRhID0gY21kLT5kYXRhOwogCiAJaWYgKGRhdGEgPT0gTlVMTCkgeworCQlpZiAoaG9zdC0+cXVpcmtzMiAmCisJCQlTREhDSV9RVUlSSzJfQ0xFQVJfVFJBTlNGRVJNT0RFX1JFR19CRUZPUkVfQ01EKSB7CisJCQlzZGhjaV93cml0ZXcoaG9zdCwgMHgwLCBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKKwkJfSBlbHNlIHsKIAkJLyogY2xlYXIgQXV0byBDTUQgc2V0dGluZ3MgZm9yIG5vIGRhdGEgQ01EcyAqLwotCQltb2RlID0gc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7Ci0JCXNkaGNpX3dyaXRldyhob3N0LCBtb2RlICYgfihTREhDSV9UUk5TX0FVVE9fQ01EMTIgfAorCQkJbW9kZSA9IHNkaGNpX3JlYWR3KGhvc3QsIFNESENJX1RSQU5TRkVSX01PREUpOworCQkJc2RoY2lfd3JpdGV3KGhvc3QsIG1vZGUgJiB+KFNESENJX1RSTlNfQVVUT19DTUQxMiB8CiAJCQkJU0RIQ0lfVFJOU19BVVRPX0NNRDIzKSwgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7CisJCX0KIAkJcmV0dXJuOwogCX0KIApAQCAtMTExNyw2ICsxMTQ4LDkgQEAKIAljYXNlIE1NQ19USU1JTkdfVUhTX0REUjUwOgogCQlwcmVzZXQgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9QUkVTRVRfRk9SX0REUjUwKTsKIAkJYnJlYWs7CisJY2FzZSBNTUNfVElNSU5HX01NQ19IUzQwMDoKKwkJcHJlc2V0ID0gc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfUFJFU0VUX0ZPUl9IUzQwMCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX3dhcm4oIiVzOiBJbnZhbGlkIFVIUy1JIG1vZGUgc2VsZWN0ZWRcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CkBAIC0xNDQ0LDYgKzE0NzgsOCBAQAogCWVsc2UgaWYgKCh0aW1pbmcgPT0gTU1DX1RJTUlOR19VSFNfRERSNTApIHx8CiAJCSAodGltaW5nID09IE1NQ19USU1JTkdfTU1DX0REUjUyKSkKIAkJY3RybF8yIHw9IFNESENJX0NUUkxfVUhTX0REUjUwOworCWVsc2UgaWYgKHRpbWluZyA9PSBNTUNfVElNSU5HX01NQ19IUzQwMCkKKwkJY3RybF8yIHw9IFNESENJX0NUUkxfSFM0MDA7IC8qIE5vbi1zdGFuZGFyZCAqLwogCXNkaGNpX3dyaXRldyhob3N0LCBjdHJsXzIsIFNESENJX0hPU1RfQ09OVFJPTDIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2RoY2lfc2V0X3Voc19zaWduYWxpbmcpOwpAQCAtMTUxNSw3ICsxNTUxLDggQEAKIAkJdTE2IGNsaywgY3RybF8yOwogCiAJCS8qIEluIGNhc2Ugb2YgVUhTLUkgbW9kZXMsIHNldCBIaWdoIFNwZWVkIEVuYWJsZSAqLwotCQlpZiAoKGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfTU1DX0hTMjAwKSB8fAorCQlpZiAoKGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfTU1DX0hTNDAwKSB8fAorCQkgICAgKGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfTU1DX0hTMjAwKSB8fAogCQkgICAgKGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfTU1DX0REUjUyKSB8fAogCQkgICAgKGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfVUhTX1NEUjUwKSB8fAogCQkgICAgKGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfVUhTX1NEUjEwNCkgfHwKQEAgLTE4NjIsNiArMTg5OSw3IEBACiAJICogdHVuaW5nIGZ1bmN0aW9uIGhhcyB0byBiZSBleGVjdXRlZC4KIAkgKi8KIAlzd2l0Y2ggKGhvc3QtPnRpbWluZykgeworCWNhc2UgTU1DX1RJTUlOR19NTUNfSFM0MDA6CiAJY2FzZSBNTUNfVElNSU5HX01NQ19IUzIwMDoKIAljYXNlIE1NQ19USU1JTkdfVUhTX1NEUjEwNDoKIAkJYnJlYWs7CkBAIC0yMTQ0LDkgKzIxODIsMTAgQEAKIAkgKi8KIAlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX0RFVklDRV9ERUFEKSAmJgogCSAgICAoKG1ycS0+Y21kICYmIG1ycS0+Y21kLT5lcnJvcikgfHwKLQkJIChtcnEtPmRhdGEgJiYgKG1ycS0+ZGF0YS0+ZXJyb3IgfHwKLQkJICAobXJxLT5kYXRhLT5zdG9wICYmIG1ycS0+ZGF0YS0+c3RvcC0+ZXJyb3IpKSkgfHwKLQkJICAgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX1JFU0VUX0FGVEVSX1JFUVVFU1QpKSkgeworCSAgICAgKG1ycS0+c2JjICYmIG1ycS0+c2JjLT5lcnJvcikgfHwKKwkgICAgIChtcnEtPmRhdGEgJiYgKChtcnEtPmRhdGEtPmVycm9yICYmICFtcnEtPmRhdGEtPnN0b3ApIHx8CisJCQkgICAgKG1ycS0+ZGF0YS0+c3RvcCAmJiBtcnEtPmRhdGEtPnN0b3AtPmVycm9yKSkpIHx8CisJICAgICAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfUkVTRVRfQUZURVJfUkVRVUVTVCkpKSB7CiAKIAkJLyogU29tZSBjb250cm9sbGVycyBuZWVkIHRoaXMga2ljayBvciByZXNldCB3b24ndCB3b3JrIGhlcmUgKi8KIAkJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0NMT0NLX0JFRk9SRV9SRVNFVCkKQEAgLTIyODIsMzIgKzIzMjEsMzYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLXN0YXRpYyB2b2lkIHNkaGNpX3Nob3dfYWRtYV9lcnJvcihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3N0YXRpYyB2b2lkIHNkaGNpX2FkbWFfc2hvd19lcnJvcihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKIHsKIAljb25zdCBjaGFyICpuYW1lID0gbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyk7Ci0JdTggKmRlc2MgPSBob3N0LT5hZG1hX2Rlc2M7Ci0JX19sZTMyICpkbWE7Ci0JX19sZTE2ICpsZW47Ci0JdTggYXR0cjsKKwl2b2lkICpkZXNjID0gaG9zdC0+YWRtYV90YWJsZTsKIAogCXNkaGNpX2R1bXByZWdzKGhvc3QpOwogCiAJd2hpbGUgKHRydWUpIHsKLQkJZG1hID0gKF9fbGUzMiAqKShkZXNjICsgNCk7Ci0JCWxlbiA9IChfX2xlMTYgKikoZGVzYyArIDIpOwotCQlhdHRyID0gKmRlc2M7CisJCXN0cnVjdCBzZGhjaV9hZG1hMl82NF9kZXNjICpkbWFfZGVzYyA9IGRlc2M7CiAKLQkJREJHKCIlczogJXA6IERNQSAweCUwOHgsIExFTiAweCUwNHgsIEF0dHI9MHglMDJ4XG4iLAotCQkgICAgbmFtZSwgZGVzYywgbGUzMl90b19jcHUoKmRtYSksIGxlMTZfdG9fY3B1KCpsZW4pLCBhdHRyKTsKKwkJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpCisJCQlEQkcoIiVzOiAlcDogRE1BIDB4JTA4eCUwOHgsIExFTiAweCUwNHgsIEF0dHI9MHglMDJ4XG4iLAorCQkJICAgIG5hbWUsIGRlc2MsIGxlMzJfdG9fY3B1KGRtYV9kZXNjLT5hZGRyX2hpKSwKKwkJCSAgICBsZTMyX3RvX2NwdShkbWFfZGVzYy0+YWRkcl9sbyksCisJCQkgICAgbGUxNl90b19jcHUoZG1hX2Rlc2MtPmxlbiksCisJCQkgICAgbGUxNl90b19jcHUoZG1hX2Rlc2MtPmNtZCkpOworCQllbHNlCisJCQlEQkcoIiVzOiAlcDogRE1BIDB4JTA4eCwgTEVOIDB4JTA0eCwgQXR0cj0weCUwMnhcbiIsCisJCQkgICAgbmFtZSwgZGVzYywgbGUzMl90b19jcHUoZG1hX2Rlc2MtPmFkZHJfbG8pLAorCQkJICAgIGxlMTZfdG9fY3B1KGRtYV9kZXNjLT5sZW4pLAorCQkJICAgIGxlMTZfdG9fY3B1KGRtYV9kZXNjLT5jbWQpKTsKIAotCQlkZXNjICs9IDg7CisJCWRlc2MgKz0gaG9zdC0+ZGVzY19zejsKIAotCQlpZiAoYXR0ciAmIDIpCisJCWlmIChkbWFfZGVzYy0+Y21kICYgY3B1X3RvX2xlMTYoQURNQTJfRU5EKSkKIAkJCWJyZWFrOwogCX0KIH0KICNlbHNlCi1zdGF0aWMgdm9pZCBzZGhjaV9zaG93X2FkbWFfZXJyb3Ioc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpIHsgfQorc3RhdGljIHZvaWQgc2RoY2lfYWRtYV9zaG93X2Vycm9yKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KSB7IH0KICNlbmRpZgogCiBzdGF0aWMgdm9pZCBzZGhjaV9kYXRhX2lycShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIGludG1hc2spCkBAIC0yMzcwLDcgKzI0MTMsNyBAQAogCQlob3N0LT5kYXRhLT5lcnJvciA9IC1FSUxTRVE7CiAJZWxzZSBpZiAoaW50bWFzayAmIFNESENJX0lOVF9BRE1BX0VSUk9SKSB7CiAJCXByX2VycigiJXM6IEFETUEgZXJyb3JcbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKLQkJc2RoY2lfc2hvd19hZG1hX2Vycm9yKGhvc3QpOworCQlzZGhjaV9hZG1hX3Nob3dfZXJyb3IoaG9zdCk7CiAJCWhvc3QtPmRhdGEtPmVycm9yID0gLUVJTzsKIAkJaWYgKGhvc3QtPm9wcy0+YWRtYV93b3JrYXJvdW5kKQogCQkJaG9zdC0+b3BzLT5hZG1hX3dvcmthcm91bmQoaG9zdCwgaW50bWFzayk7CkBAIC0yODQ5LDYgKzI4OTIsMTYgQEAKIAkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX1VTRV9BRE1BOwogCX0KIAorCS8qCisJICogSXQgaXMgYXNzdW1lZCB0aGF0IGEgNjQtYml0IGNhcGFibGUgZGV2aWNlIGhhcyBzZXQgYSA2NC1iaXQgRE1BIG1hc2sKKwkgKiBhbmQgKm11c3QqIGRvIDY0LWJpdCBETUEuICBBIGRyaXZlciBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGNoYW5nZQorCSAqIHRoYXQgZHVyaW5nIHRoZSBmaXJzdCBjYWxsIHRvIC0+ZW5hYmxlX2RtYSgpLiAgU2ltaWxhcmx5CisJICogU0RIQ0lfUVVJUksyX0JST0tFTl82NF9CSVRfRE1BIG11c3QgYmUgbGVmdCB0byB0aGUgZHJpdmVycyB0bworCSAqIGltcGxlbWVudC4KKwkgKi8KKwlpZiAoc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfQ0FQQUJJTElUSUVTKSAmIFNESENJX0NBTl82NEJJVCkKKwkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfVVNFXzY0X0JJVF9ETUE7CisKIAlpZiAoaG9zdC0+ZmxhZ3MgJiAoU0RIQ0lfVVNFX1NETUEgfCBTREhDSV9VU0VfQURNQSkpIHsKIAkJaWYgKGhvc3QtPm9wcy0+ZW5hYmxlX2RtYSkgewogCQkJaWYgKGhvc3QtPm9wcy0+ZW5hYmxlX2RtYShob3N0KSkgewpAQCAtMjg2MCwzMyArMjkxMyw1NiBAQAogCQl9CiAJfQogCisJLyogU0RNQSBkb2VzIG5vdCBzdXBwb3J0IDY0LWJpdCBETUEgKi8KKwlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkKKwkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX1VTRV9TRE1BOworCiAJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpIHsKIAkJLyoKLQkJICogV2UgbmVlZCB0byBhbGxvY2F0ZSBkZXNjcmlwdG9ycyBmb3IgYWxsIHNnIGVudHJpZXMKLQkJICogKDEyOCkgYW5kIHBvdGVudGlhbGx5IG9uZSBhbGlnbm1lbnQgdHJhbnNmZXIgZm9yCi0JCSAqIGVhY2ggb2YgdGhvc2UgZW50cmllcy4KKwkJICogVGhlIERNQSBkZXNjcmlwdG9yIHRhYmxlIHNpemUgaXMgY2FsY3VsYXRlZCBhcyB0aGUgbWF4aW11bQorCQkgKiBudW1iZXIgb2Ygc2VnbWVudHMgdGltZXMgMiwgdG8gYWxsb3cgZm9yIGFuIGFsaWdubWVudAorCQkgKiBkZXNjcmlwdG9yIGZvciBlYWNoIHNlZ21lbnQsIHBsdXMgMSBmb3IgYSBub3AgZW5kIGRlc2NyaXB0b3IsCisJCSAqIGFsbCBtdWx0aXBsZWQgYnkgdGhlIGRlc2NyaXB0b3Igc2l6ZS4KIAkJICovCi0JCWhvc3QtPmFkbWFfZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChtbWNfZGV2KG1tYyksCi0JCQkJCQkgICAgIEFETUFfU0laRSwgJmhvc3QtPmFkbWFfYWRkciwKLQkJCQkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0JCWhvc3QtPmFsaWduX2J1ZmZlciA9IGttYWxsb2MoMTI4ICogNCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghaG9zdC0+YWRtYV9kZXNjIHx8ICFob3N0LT5hbGlnbl9idWZmZXIpIHsKLQkJCWRtYV9mcmVlX2NvaGVyZW50KG1tY19kZXYobW1jKSwgQURNQV9TSVpFLAotCQkJCQkgIGhvc3QtPmFkbWFfZGVzYywgaG9zdC0+YWRtYV9hZGRyKTsKKwkJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpIHsKKwkJCWhvc3QtPmFkbWFfdGFibGVfc3ogPSAoU0RIQ0lfTUFYX1NFR1MgKiAyICsgMSkgKgorCQkJCQkgICAgICBTREhDSV9BRE1BMl82NF9ERVNDX1NaOworCQkJaG9zdC0+YWxpZ25fYnVmZmVyX3N6ID0gU0RIQ0lfTUFYX1NFR1MgKgorCQkJCQkJU0RIQ0lfQURNQTJfNjRfQUxJR047CisJCQlob3N0LT5kZXNjX3N6ID0gU0RIQ0lfQURNQTJfNjRfREVTQ19TWjsKKwkJCWhvc3QtPmFsaWduX3N6ID0gU0RIQ0lfQURNQTJfNjRfQUxJR047CisJCQlob3N0LT5hbGlnbl9tYXNrID0gU0RIQ0lfQURNQTJfNjRfQUxJR04gLSAxOworCQl9IGVsc2UgeworCQkJaG9zdC0+YWRtYV90YWJsZV9zeiA9IChTREhDSV9NQVhfU0VHUyAqIDIgKyAxKSAqCisJCQkJCSAgICAgIFNESENJX0FETUEyXzMyX0RFU0NfU1o7CisJCQlob3N0LT5hbGlnbl9idWZmZXJfc3ogPSBTREhDSV9NQVhfU0VHUyAqCisJCQkJCQlTREhDSV9BRE1BMl8zMl9BTElHTjsKKwkJCWhvc3QtPmRlc2Nfc3ogPSBTREhDSV9BRE1BMl8zMl9ERVNDX1NaOworCQkJaG9zdC0+YWxpZ25fc3ogPSBTREhDSV9BRE1BMl8zMl9BTElHTjsKKwkJCWhvc3QtPmFsaWduX21hc2sgPSBTREhDSV9BRE1BMl8zMl9BTElHTiAtIDE7CisJCX0KKwkJaG9zdC0+YWRtYV90YWJsZSA9IGRtYV9hbGxvY19jb2hlcmVudChtbWNfZGV2KG1tYyksCisJCQkJCQkgICAgICBob3N0LT5hZG1hX3RhYmxlX3N6LAorCQkJCQkJICAgICAgJmhvc3QtPmFkbWFfYWRkciwKKwkJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlob3N0LT5hbGlnbl9idWZmZXIgPSBrbWFsbG9jKGhvc3QtPmFsaWduX2J1ZmZlcl9zeiwgR0ZQX0tFUk5FTCk7CisJCWlmICghaG9zdC0+YWRtYV90YWJsZSB8fCAhaG9zdC0+YWxpZ25fYnVmZmVyKSB7CisJCQlkbWFfZnJlZV9jb2hlcmVudChtbWNfZGV2KG1tYyksIGhvc3QtPmFkbWFfdGFibGVfc3osCisJCQkJCSAgaG9zdC0+YWRtYV90YWJsZSwgaG9zdC0+YWRtYV9hZGRyKTsKIAkJCWtmcmVlKGhvc3QtPmFsaWduX2J1ZmZlcik7CiAJCQlwcl93YXJuKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlIEFETUEgYnVmZmVycyAtIGZhbGxpbmcgYmFjayB0byBzdGFuZGFyZCBETUFcbiIsCiAJCQkJbW1jX2hvc3RuYW1lKG1tYykpOwogCQkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX1VTRV9BRE1BOwotCQkJaG9zdC0+YWRtYV9kZXNjID0gTlVMTDsKKwkJCWhvc3QtPmFkbWFfdGFibGUgPSBOVUxMOwogCQkJaG9zdC0+YWxpZ25fYnVmZmVyID0gTlVMTDsKLQkJfSBlbHNlIGlmIChob3N0LT5hZG1hX2FkZHIgJiAzKSB7CisJCX0gZWxzZSBpZiAoaG9zdC0+YWRtYV9hZGRyICYgaG9zdC0+YWxpZ25fbWFzaykgewogCQkJcHJfd2FybigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBhbGlnbmVkIEFETUEgZGVzY3JpcHRvclxuIiwKIAkJCQltbWNfaG9zdG5hbWUobW1jKSk7CiAJCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX0FETUE7Ci0JCQlkbWFfZnJlZV9jb2hlcmVudChtbWNfZGV2KG1tYyksIEFETUFfU0laRSwKLQkJCQkJICBob3N0LT5hZG1hX2Rlc2MsIGhvc3QtPmFkbWFfYWRkcik7CisJCQlkbWFfZnJlZV9jb2hlcmVudChtbWNfZGV2KG1tYyksIGhvc3QtPmFkbWFfdGFibGVfc3osCisJCQkJCSAgaG9zdC0+YWRtYV90YWJsZSwgaG9zdC0+YWRtYV9hZGRyKTsKIAkJCWtmcmVlKGhvc3QtPmFsaWduX2J1ZmZlcik7Ci0JCQlob3N0LT5hZG1hX2Rlc2MgPSBOVUxMOworCQkJaG9zdC0+YWRtYV90YWJsZSA9IE5VTEw7CiAJCQlob3N0LT5hbGlnbl9idWZmZXIgPSBOVUxMOwogCQl9CiAJfQpAQCAtMzAyNyw3ICszMTAzLDcgQEAKIAkJaWYgKHJldCkgewogCQkJcHJfd2FybigiJXM6IEZhaWxlZCB0byBlbmFibGUgdnFtbWMgcmVndWxhdG9yOiAlZFxuIiwKIAkJCQltbWNfaG9zdG5hbWUobW1jKSwgcmV0KTsKLQkJCW1tYy0+c3VwcGx5LnZxbW1jID0gTlVMTDsKKwkJCW1tYy0+c3VwcGx5LnZxbW1jID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJfQogCX0KIApAQCAtMzA0NiwxNiArMzEyMiwyMSBAQAogCQkvKiBTRDMuMDogU0RSMTA0IGlzIHN1cHBvcnRlZCBzbyAoZm9yIGVNTUMpIHRoZSBjYXBzMgogCQkgKiBmaWVsZCBjYW4gYmUgcHJvbW90ZWQgdG8gc3VwcG9ydCBIUzIwMC4KIAkJICovCi0JCWlmICghKGhvc3QtPnF1aXJrczIgJiBTREhDSV9RVUlSSzJfQlJPS0VOX0hTMjAwKSkgeworCQlpZiAoIShob3N0LT5xdWlya3MyICYgU0RIQ0lfUVVJUksyX0JST0tFTl9IUzIwMCkpCiAJCQltbWMtPmNhcHMyIHw9IE1NQ19DQVAyX0hTMjAwOwotCQkJaWYgKElTX0VSUihtbWMtPnN1cHBseS52cW1tYykgfHwKLQkJCQkJIXJlZ3VsYXRvcl9pc19zdXBwb3J0ZWRfdm9sdGFnZQotCQkJCQkobW1jLT5zdXBwbHkudnFtbWMsIDExMDAwMDAsIDEzMDAwMDApKQotCQkJCW1tYy0+Y2FwczIgJj0gfk1NQ19DQVAyX0hTMjAwXzFfMlZfU0RSOwotCQl9CiAJfSBlbHNlIGlmIChjYXBzWzFdICYgU0RIQ0lfU1VQUE9SVF9TRFI1MCkKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfVUhTX1NEUjUwOwogCisJaWYgKGhvc3QtPnF1aXJrczIgJiBTREhDSV9RVUlSSzJfQ0FQU19CSVQ2M19GT1JfSFM0MDAgJiYKKwkgICAgKGNhcHNbMV0gJiBTREhDSV9TVVBQT1JUX0hTNDAwKSkKKwkJbW1jLT5jYXBzMiB8PSBNTUNfQ0FQMl9IUzQwMDsKKworCWlmICgobW1jLT5jYXBzMiAmIE1NQ19DQVAyX0hTWDAwXzFfMlYpICYmCisJICAgIChJU19FUlIobW1jLT5zdXBwbHkudnFtbWMpIHx8CisJICAgICAhcmVndWxhdG9yX2lzX3N1cHBvcnRlZF92b2x0YWdlKG1tYy0+c3VwcGx5LnZxbW1jLCAxMTAwMDAwLAorCQkJCQkgICAgIDEzMDAwMDApKSkKKwkJbW1jLT5jYXBzMiAmPSB+TU1DX0NBUDJfSFNYMDBfMV8yVjsKKwogCWlmICgoY2Fwc1sxXSAmIFNESENJX1NVUFBPUlRfRERSNTApICYmCiAJCSEoaG9zdC0+cXVpcmtzMiAmIFNESENJX1FVSVJLMl9CUk9LRU5fRERSNTApKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9VSFNfRERSNTA7CkBAIC0zMTc1LDExICszMjU2LDExIEBACiAJICogY2FuIGRvIHNjYXR0ZXIvZ2F0aGVyIG9yIG5vdC4KIAkgKi8KIAlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkKLQkJbW1jLT5tYXhfc2VncyA9IDEyODsKKwkJbW1jLT5tYXhfc2VncyA9IFNESENJX01BWF9TRUdTOwogCWVsc2UgaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX1NETUEpCiAJCW1tYy0+bWF4X3NlZ3MgPSAxOwogCWVsc2UgLyogUElPICovCi0JCW1tYy0+bWF4X3NlZ3MgPSAxMjg7CisJCW1tYy0+bWF4X3NlZ3MgPSBTREhDSV9NQVhfU0VHUzsKIAogCS8qCiAJICogTWF4aW11bSBudW1iZXIgb2Ygc2VjdG9ycyBpbiBvbmUgdHJhbnNmZXIuIExpbWl0ZWQgYnkgRE1BIGJvdW5kYXJ5CkBAIC0zMjc3LDcgKzMzNTgsOCBAQAogCiAJcHJfaW5mbygiJXM6IFNESENJIGNvbnRyb2xsZXIgb24gJXMgWyVzXSB1c2luZyAlc1xuIiwKIAkJbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QtPmh3X25hbWUsIGRldl9uYW1lKG1tY19kZXYobW1jKSksCi0JCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKSA/ICJBRE1BIiA6CisJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKSA/CisJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV82NF9CSVRfRE1BKSA/ICJBRE1BIDY0LWJpdCIgOiAiQURNQSIgOgogCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfU0RNQSkgPyAiRE1BIiA6ICJQSU8iKTsKIAogCXNkaGNpX2VuYWJsZV9jYXJkX2RldGVjdGlvbihob3N0KTsKQEAgLTMzMzksMTggKzM0MjEsMTUgQEAKIAogCXRhc2tsZXRfa2lsbCgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQpOwogCi0JaWYgKCFJU19FUlIobW1jLT5zdXBwbHkudm1tYykpCi0JCXJlZ3VsYXRvcl9kaXNhYmxlKG1tYy0+c3VwcGx5LnZtbWMpOwotCiAJaWYgKCFJU19FUlIobW1jLT5zdXBwbHkudnFtbWMpKQogCQlyZWd1bGF0b3JfZGlzYWJsZShtbWMtPnN1cHBseS52cW1tYyk7CiAKLQlpZiAoaG9zdC0+YWRtYV9kZXNjKQotCQlkbWFfZnJlZV9jb2hlcmVudChtbWNfZGV2KG1tYyksIEFETUFfU0laRSwKLQkJCQkgIGhvc3QtPmFkbWFfZGVzYywgaG9zdC0+YWRtYV9hZGRyKTsKKwlpZiAoaG9zdC0+YWRtYV90YWJsZSkKKwkJZG1hX2ZyZWVfY29oZXJlbnQobW1jX2RldihtbWMpLCBob3N0LT5hZG1hX3RhYmxlX3N6LAorCQkJCSAgaG9zdC0+YWRtYV90YWJsZSwgaG9zdC0+YWRtYV9hZGRyKTsKIAlrZnJlZShob3N0LT5hbGlnbl9idWZmZXIpOwogCi0JaG9zdC0+YWRtYV9kZXNjID0gTlVMTDsKKwlob3N0LT5hZG1hX3RhYmxlID0gTlVMTDsKIAlob3N0LT5hbGlnbl9idWZmZXIgPSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKaW5kZXggMzE4OTZhNy4uZGRkMzFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaApAQCAtMTYxLDcgKzE2MSw3IEBACiAjZGVmaW5lICAgU0RIQ0lfQ1RSTF9VSFNfU0RSNTAJCTB4MDAwMgogI2RlZmluZSAgIFNESENJX0NUUkxfVUhTX1NEUjEwNAkJMHgwMDAzCiAjZGVmaW5lICAgU0RIQ0lfQ1RSTF9VSFNfRERSNTAJCTB4MDAwNAotI2RlZmluZSAgIFNESENJX0NUUkxfSFNfU0RSMjAwCQkweDAwMDUgLyogcmVzZXJ2ZWQgdmFsdWUgaW4gU0RJTyBzcGVjICovCisjZGVmaW5lICAgU0RIQ0lfQ1RSTF9IUzQwMAkJMHgwMDA1IC8qIE5vbi1zdGFuZGFyZCAqLwogI2RlZmluZSAgU0RIQ0lfQ1RSTF9WRERfMTgwCQkweDAwMDgKICNkZWZpbmUgIFNESENJX0NUUkxfRFJWX1RZUEVfTUFTSwkweDAwMzAKICNkZWZpbmUgICBTREhDSV9DVFJMX0RSVl9UWVBFX0IJCTB4MDAwMApAQCAtMjA0LDYgKzIwNCw3IEBACiAjZGVmaW5lICBTREhDSV9SRVRVTklOR19NT0RFX1NISUZUCQkxNAogI2RlZmluZSAgU0RIQ0lfQ0xPQ0tfTVVMX01BU0sJMHgwMEZGMDAwMAogI2RlZmluZSAgU0RIQ0lfQ0xPQ0tfTVVMX1NISUZUCTE2CisjZGVmaW5lICBTREhDSV9TVVBQT1JUX0hTNDAwCTB4ODAwMDAwMDAgLyogTm9uLXN0YW5kYXJkICovCiAKICNkZWZpbmUgU0RIQ0lfQ0FQQUJJTElUSUVTXzEJMHg0NAogCkBAIC0yMjcsNiArMjI4LDcgQEAKIC8qIDU1LTU3IHJlc2VydmVkICovCiAKICNkZWZpbmUgU0RIQ0lfQURNQV9BRERSRVNTCTB4NTgKKyNkZWZpbmUgU0RIQ0lfQURNQV9BRERSRVNTX0hJCTB4NUMKIAogLyogNjAtRkIgcmVzZXJ2ZWQgKi8KIApAQCAtMjM1LDYgKzIzNyw3IEBACiAjZGVmaW5lIFNESENJX1BSRVNFVF9GT1JfU0RSNTAgMHg2QQogI2RlZmluZSBTREhDSV9QUkVTRVRfRk9SX1NEUjEwNCAgICAgICAgMHg2QwogI2RlZmluZSBTREhDSV9QUkVTRVRfRk9SX0REUjUwIDB4NkUKKyNkZWZpbmUgU0RIQ0lfUFJFU0VUX0ZPUl9IUzQwMCAweDc0IC8qIE5vbi1zdGFuZGFyZCAqLwogI2RlZmluZSBTREhDSV9QUkVTRVRfRFJWX01BU0sgIDB4QzAwMAogI2RlZmluZSBTREhDSV9QUkVTRVRfRFJWX1NISUZUICAxNAogI2RlZmluZSBTREhDSV9QUkVTRVRfQ0xLR0VOX1NFTF9NQVNLICAgMHg0MDAKQEAgLTI2Niw2ICsyNjksNDYgQEAKICNkZWZpbmUgU0RIQ0lfREVGQVVMVF9CT1VOREFSWV9TSVpFICAoNTEyICogMTAyNCkKICNkZWZpbmUgU0RIQ0lfREVGQVVMVF9CT1VOREFSWV9BUkcgICAoaWxvZzIoU0RIQ0lfREVGQVVMVF9CT1VOREFSWV9TSVpFKSAtIDEyKQogCisvKiBBRE1BMiAzMi1iaXQgRE1BIGRlc2NyaXB0b3Igc2l6ZSAqLworI2RlZmluZSBTREhDSV9BRE1BMl8zMl9ERVNDX1NaCTgKKworLyogQURNQTIgMzItYml0IERNQSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgU0RIQ0lfQURNQTJfMzJfQUxJR04JNAorCisvKiBBRE1BMiAzMi1iaXQgZGVzY3JpcHRvciAqLworc3RydWN0IHNkaGNpX2FkbWEyXzMyX2Rlc2MgeworCV9fbGUxNgljbWQ7CisJX19sZTE2CWxlbjsKKwlfX2xlMzIJYWRkcjsKK30gIF9fcGFja2VkIF9fYWxpZ25lZChTREhDSV9BRE1BMl8zMl9BTElHTik7CisKKy8qIEFETUEyIDY0LWJpdCBETUEgZGVzY3JpcHRvciBzaXplICovCisjZGVmaW5lIFNESENJX0FETUEyXzY0X0RFU0NfU1oJMTIKKworLyogQURNQTIgNjQtYml0IERNQSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgU0RIQ0lfQURNQTJfNjRfQUxJR04JOAorCisvKgorICogQURNQTIgNjQtYml0IGRlc2NyaXB0b3IuIE5vdGUgMTItYnl0ZSBkZXNjcmlwdG9yIGNhbid0IGFsd2F5cyBiZSA4LWJ5dGUKKyAqIGFsaWduZWQuCisgKi8KK3N0cnVjdCBzZGhjaV9hZG1hMl82NF9kZXNjIHsKKwlfX2xlMTYJY21kOworCV9fbGUxNglsZW47CisJX19sZTMyCWFkZHJfbG87CisJX19sZTMyCWFkZHJfaGk7Cit9ICBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CisKKyNkZWZpbmUgQURNQTJfVFJBTl9WQUxJRAkweDIxCisjZGVmaW5lIEFETUEyX05PUF9FTkRfVkFMSUQJMHgzCisjZGVmaW5lIEFETUEyX0VORAkJMHgyCisKKy8qCisgKiBNYXhpbXVtIHNlZ21lbnRzIGFzc3VtaW5nIGEgNTEyS2lCIG1heGltdW0gcmVxdWlzaXRpb24gc2l6ZSBhbmQgYSBtaW5pbXVtCisgKiA0S2lCIHBhZ2Ugc2l6ZS4KKyAqLworI2RlZmluZSBTREhDSV9NQVhfU0VHUwkJMTI4CisKIHN0cnVjdCBzZGhjaV9vcHMgewogI2lmZGVmIENPTkZJR19NTUNfU0RIQ0lfSU9fQUNDRVNTT1JTCiAJdTMyCQkoKnJlYWRfbCkoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zdW54aS1tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc3VueGktbW1jLmMKaW5kZXggZDE2NjNiMy4uMTVjYjhiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zdW54aS1tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3N1bnhpLW1tYy5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGstcHJpdmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay9zdW54aS5oPgogCiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdG9zaHNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2NjI2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdG9zaHNkLmMKQEAgLTAsMCArMSw3MTcgQEAKKy8qCisgKiAgVG9zaGliYSBQQ0kgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IE9uZHJlaiBaYXJ5CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFJpY2hhcmQgQmV0dHMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICoJQmFzZWQgb24gYXNpYzNfbW1jLmMsIGNvcHlyaWdodCAoYykgMjAwNSBTREcgU3lzdGVtcywgTExDIGFuZCwKKyAqCXNkaGNpLmMsIGNvcHlyaWdodCAoQykgMjAwNS0yMDA2IFBpZXJyZSBPc3NtYW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL21tYy5oPgorCisjaW5jbHVkZSAidG9zaHNkLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInRvc2hzZCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHNbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9UT1NISUJBLCAweDA4MDUpIH0sCisJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lfaWRzKTsKKworc3RhdGljIHZvaWQgdG9zaHNkX2luaXQoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0KQoreworCS8qIGVuYWJsZSBjbG9jayAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfQ0xLU1RPUCwKKwkJCQkJU0RfUENJQ0ZHX0NMS1NUT1BfRU5BQkxFX0FMTCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19DQVJEREVURUNULCAyKTsKKworCS8qIHJlc2V0ICovCisJaW93cml0ZTE2KDAsIGhvc3QtPmlvYWRkciArIFNEX1NPRlRXQVJFUkVTRVQpOyAvKiBhc3NlcnQgKi8KKwltZGVsYXkoMik7CisJaW93cml0ZTE2KDEsIGhvc3QtPmlvYWRkciArIFNEX1NPRlRXQVJFUkVTRVQpOyAvKiBkZWFzc2VydCAqLworCW1kZWxheSgyKTsKKworCS8qIENsZWFyIGNhcmQgcmVnaXN0ZXJzICovCisJaW93cml0ZTE2KDAsIGhvc3QtPmlvYWRkciArIFNEX0NBUkRDTE9DS0NUUkwpOworCWlvd3JpdGUzMigwLCBob3N0LT5pb2FkZHIgKyBTRF9DQVJEU1RBVFVTKTsKKwlpb3dyaXRlMzIoMCwgaG9zdC0+aW9hZGRyICsgU0RfRVJST1JTVEFUVVMwKTsKKwlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfU1RPUElOVEVSTkFMKTsKKworCS8qIFNESU8gY2xvY2s/ICovCisJaW93cml0ZTE2KDB4MTAwLCBob3N0LT5pb2FkZHIgKyBTRElPX0JBU0UgKyBTRElPX0NMT0NLTldBSVRDVFJMKTsKKworCS8qIGVuYWJsZSBMRUQgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX1NETEVEX0VOQUJMRTEsCisJCQkJCVNEX1BDSUNGR19MRURfRU5BQkxFMV9TVEFSVCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19TRExFRF9FTkFCTEUyLAorCQkJCQlTRF9QQ0lDRkdfTEVEX0VOQUJMRTJfU1RBUlQpOworCisJLyogc2V0IGludGVycnVwdCBtYXNrcyAqLworCWlvd3JpdGUzMih+KHUzMikoU0RfQ0FSRF9SRVNQX0VORCB8IFNEX0NBUkRfUldfRU5ECisJCQl8IFNEX0NBUkRfQ0FSRF9SRU1PVkVEXzAgfCBTRF9DQVJEX0NBUkRfSU5TRVJURURfMAorCQkJfCBTRF9CVUZfUkVBRF9FTkFCTEUgfCBTRF9CVUZfV1JJVEVfRU5BQkxFCisJCQl8IFNEX0JVRl9DTURfVElNRU9VVCksCisJCQlob3N0LT5pb2FkZHIgKyBTRF9JTlRNQVNLQ0FSRCk7CisKKwlpb3dyaXRlMTYoMHgxMDAwLCBob3N0LT5pb2FkZHIgKyBTRF9UUkFOU0FDVElPTkNUUkwpOworfQorCisvKiBTZXQgTU1DIGNsb2NrIC8gcG93ZXIuCisgKiBOb3RlOiBUaGlzIGNvbnRyb2xsZXIgdXNlcyBhIHNpbXBsZSBkaXZpZGVyIHNjaGVtZSB0aGVyZWZvcmUgaXQgY2Fubm90IHJ1bgorICogU0QvTU1DIGNhcmRzIGF0IGZ1bGwgc3BlZWQgKDI0LzIwTUh6KS4gSENMSyAoPTMzTUh6IFBDSSBjbG9jaz8pIGlzIHRvbyBoaWdoCisgKiBhbmQgdGhlIG5leHQgc2xvd2VzdCBpcyAxNk1IeiAoZGl2PTIpLgorICovCitzdGF0aWMgdm9pZCBfX3Rvc2hzZF9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQoreworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwlpZiAoaW9zLT5jbG9jaykgeworCQl1MTYgY2xrOworCQlpbnQgZGl2ID0gMTsKKworCQl3aGlsZSAoaW9zLT5jbG9jayA8IEhDTEsgLyBkaXYpCisJCQlkaXYgKj0gMjsKKworCQljbGsgPSBkaXYgPj4gMjsKKworCQlpZiAoZGl2ID09IDEpIHsgLyogZGlzYWJsZSB0aGUgZGl2aWRlciAqLworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19DTEtNT0RFLAorCQkJCQkgICAgICBTRF9QQ0lDRkdfQ0xLTU9ERV9ESVZfRElTQUJMRSk7CisJCQljbGsgfD0gU0RfQ0FSRENMS19ESVZfRElTQUJMRTsKKwkJfSBlbHNlCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX0NMS01PREUsIDApOworCisJCWNsayB8PSBTRF9DQVJEQ0xLX0VOQUJMRV9DTE9DSzsKKwkJaW93cml0ZTE2KGNsaywgaG9zdC0+aW9hZGRyICsgU0RfQ0FSRENMT0NLQ1RSTCk7CisKKwkJbWRlbGF5KDEwKTsKKwl9IGVsc2UKKwkJaW93cml0ZTE2KDAsIGhvc3QtPmlvYWRkciArIFNEX0NBUkRDTE9DS0NUUkwpOworCisJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKKwljYXNlIE1NQ19QT1dFUl9PRkY6CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfUE9XRVIxLAorCQkJCQlTRF9QQ0lDRkdfUFdSMV9PRkYpOworCQltZGVsYXkoMSk7CisJCWJyZWFrOworCWNhc2UgTU1DX1BPV0VSX1VQOgorCQlicmVhazsKKwljYXNlIE1NQ19QT1dFUl9PTjoKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19QT1dFUjEsCisJCQkJCVNEX1BDSUNGR19QV1IxXzMzVik7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfUE9XRVIyLAorCQkJCQlTRF9QQ0lDRkdfUFdSMl9BVVRPKTsKKwkJbWRlbGF5KDIwKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpb3MtPmJ1c193aWR0aCkgeworCWNhc2UgTU1DX0JVU19XSURUSF8xOgorCQlpb3dyaXRlMTYoU0RfQ0FSRE9QVF9SRVFVSVJFRCB8IFNEX0NBUkRPUFRfREFUQV9SRVNQX1RJTUVPVVQoMTQpCisJCQkJfCBTRF9DQVJET1BUX0MyX01PRFVMRV9BQlNFTlQKKwkJCQl8IFNEX0NBUkRPUFRfREFUQV9YRlJfV0lEVEhfMSwKKwkJCQlob3N0LT5pb2FkZHIgKyBTRF9DQVJET1BUSU9OU0VUVVApOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNfV0lEVEhfNDoKKwkJaW93cml0ZTE2KFNEX0NBUkRPUFRfUkVRVUlSRUQgfCBTRF9DQVJET1BUX0RBVEFfUkVTUF9USU1FT1VUKDE0KQorCQkJCXwgU0RfQ0FSRE9QVF9DMl9NT0RVTEVfQUJTRU5UCisJCQkJfCBTRF9DQVJET1BUX0RBVEFfWEZSX1dJRFRIXzQsCisJCQkJaG9zdC0+aW9hZGRyICsgU0RfQ0FSRE9QVElPTlNFVFVQKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCB0b3Noc2Rfc2V0X2xlZChzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGNoYXIgc3RhdGUpCit7CisJaW93cml0ZTE2KHN0YXRlLCBob3N0LT5pb2FkZHIgKyBTRElPX0JBU0UgKyBTRElPX0xFRENUUkwpOworfQorCitzdGF0aWMgdm9pZCB0b3Noc2RfZmluaXNoX3JlcXVlc3Qoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxID0gaG9zdC0+bXJxOworCisJLyogV3JpdGUgc29tZXRoaW5nIHRvIGVuZCB0aGUgY29tbWFuZCAqLworCWhvc3QtPm1ycSA9IE5VTEw7CisJaG9zdC0+Y21kID0gTlVMTDsKKwlob3N0LT5kYXRhID0gTlVMTDsKKworCXRvc2hzZF9zZXRfbGVkKGhvc3QsIDApOworCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdG9zaHNkX3RocmVhZF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IGRldl9pZDsKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCXN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIgKnNnX21pdGVyID0gJmhvc3QtPnNnX21pdGVyOworCXVuc2lnbmVkIHNob3J0ICpidWY7CisJaW50IGNvdW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X3dhcm4oJmhvc3QtPnBkZXYtPmRldiwgIlNwdXJpb3VzIERhdGEgSVJRXG4iKTsKKwkJaWYgKGhvc3QtPmNtZCkgeworCQkJaG9zdC0+Y21kLT5lcnJvciA9IC1FSU87CisJCQl0b3Noc2RfZmluaXNoX3JlcXVlc3QoaG9zdCk7CisJCX0KKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJaWYgKCFzZ19taXRlcl9uZXh0KHNnX21pdGVyKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCWJ1ZiA9IHNnX21pdGVyLT5hZGRyOworCisJLyogRW5zdXJlIHdlIGRvbnQgcmVhZCBtb3JlIHRoYW4gb25lIGJsb2NrLiBUaGUgY2hpcCB3aWxsIGludGVycnVwdCB1cworCSAqIFdoZW4gdGhlIG5leHQgYmxvY2sgaXMgYXZhaWxhYmxlLgorCSAqLworCWNvdW50ID0gc2dfbWl0ZXItPmxlbmd0aDsKKwlpZiAoY291bnQgPiBkYXRhLT5ibGtzeikKKwkJY291bnQgPSBkYXRhLT5ibGtzejsKKworCWRldl9kYmcoJmhvc3QtPnBkZXYtPmRldiwgImNvdW50OiAlMDh4LCBmbGFncyAlMDh4XG4iLCBjb3VudCwKKwkJZGF0YS0+ZmxhZ3MpOworCisJLyogVHJhbnNmZXIgdGhlIGRhdGEgKi8KKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQorCQlpb3JlYWQzMl9yZXAoaG9zdC0+aW9hZGRyICsgU0RfREFUQVBPUlQsIGJ1ZiwgY291bnQgPj4gMik7CisJZWxzZQorCQlpb3dyaXRlMzJfcmVwKGhvc3QtPmlvYWRkciArIFNEX0RBVEFQT1JULCBidWYsIGNvdW50ID4+IDIpOworCisJc2dfbWl0ZXItPmNvbnN1bWVkID0gY291bnQ7CisJc2dfbWl0ZXJfc3RvcChzZ19taXRlcik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9jbWRfaXJxKHN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IGhvc3QtPmNtZDsKKwl1OCAqYnVmOworCXUxNiBkYXRhOworCisJaWYgKCFob3N0LT5jbWQpIHsKKwkJZGV2X3dhcm4oJmhvc3QtPnBkZXYtPmRldiwgIlNwdXJpb3VzIENNRCBpcnFcbiIpOworCQlyZXR1cm47CisJfQorCWJ1ZiA9ICh1OCAqKWNtZC0+cmVzcDsKKwlob3N0LT5jbWQgPSBOVUxMOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQgJiYgY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KSB7CisJCS8qIFIyICovCisJCWJ1ZlsxMl0gPSAweGZmOworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0UwKTsKKwkJYnVmWzEzXSA9IGRhdGEgJiAweGZmOworCQlidWZbMTRdID0gZGF0YSA+PiA4OworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0UxKTsKKwkJYnVmWzE1XSA9IGRhdGEgJiAweGZmOworCQlidWZbOF0gPSBkYXRhID4+IDg7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTIpOworCQlidWZbOV0gPSBkYXRhICYgMHhmZjsKKwkJYnVmWzEwXSA9IGRhdGEgPj4gODsKKwkJZGF0YSA9IGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX1JFU1BPTlNFMyk7CisJCWJ1ZlsxMV0gPSBkYXRhICYgMHhmZjsKKwkJYnVmWzRdID0gZGF0YSA+PiA4OworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0U0KTsKKwkJYnVmWzVdID0gZGF0YSAmIDB4ZmY7CisJCWJ1Zls2XSA9IGRhdGEgPj4gODsKKwkJZGF0YSA9IGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX1JFU1BPTlNFNSk7CisJCWJ1Zls3XSA9IGRhdGEgJiAweGZmOworCQlidWZbMF0gPSBkYXRhID4+IDg7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTYpOworCQlidWZbMV0gPSBkYXRhICYgMHhmZjsKKwkJYnVmWzJdID0gZGF0YSA+PiA4OworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0U3KTsKKwkJYnVmWzNdID0gZGF0YSAmIDB4ZmY7CisJfSBlbHNlIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKSB7CisJCS8qIFIxLCBSMUIsIFIzLCBSNiwgUjcgKi8KKwkJZGF0YSA9IGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX1JFU1BPTlNFMCk7CisJCWJ1ZlswXSA9IGRhdGEgJiAweGZmOworCQlidWZbMV0gPSBkYXRhID4+IDg7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTEpOworCQlidWZbMl0gPSBkYXRhICYgMHhmZjsKKwkJYnVmWzNdID0gZGF0YSA+PiA4OworCX0KKworCWRldl9kYmcoJmhvc3QtPnBkZXYtPmRldiwgIkNvbW1hbmQgSVJRIGNvbXBsZXRlICVkICVkICV4XG4iLAorCQljbWQtPm9wY29kZSwgY21kLT5lcnJvciwgY21kLT5mbGFncyk7CisKKwkvKiBJZiB0aGVyZSBpcyBkYXRhIHRvIGhhbmRsZSB3ZSB3aWxsCisJICogZmluaXNoIHRoZSByZXF1ZXN0IGluIHRoZSBtbWNfZGF0YV9lbmRfaXJxIGhhbmRsZXIuKi8KKwlpZiAoaG9zdC0+ZGF0YSkKKwkJcmV0dXJuOworCisJdG9zaHNkX2ZpbmlzaF9yZXF1ZXN0KGhvc3QpOworfQorCitzdGF0aWMgdm9pZCB0b3Noc2RfZGF0YV9lbmRfaXJxKHN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCisJaG9zdC0+ZGF0YSA9IE5VTEw7CisKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X3dhcm4oJmhvc3QtPnBkZXYtPmRldiwgIlNwdXJpb3VzIGRhdGEgZW5kIElSUVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGF0YS0+ZXJyb3IgPT0gMCkKKwkJZGF0YS0+Ynl0ZXNfeGZlcmVkID0gZGF0YS0+YmxvY2tzICogZGF0YS0+Ymxrc3o7CisJZWxzZQorCQlkYXRhLT5ieXRlc194ZmVyZWQgPSAwOworCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiQ29tcGxldGVkIGRhdGEgcmVxdWVzdCB4ZnI9JWRcbiIsCisJCWRhdGEtPmJ5dGVzX3hmZXJlZCk7CisKKwlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfU1RPUElOVEVSTkFMKTsKKworCXRvc2hzZF9maW5pc2hfcmVxdWVzdChob3N0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHRvc2hzZF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IGRldl9pZDsKKwl1MzIgaW50X3JlZywgaW50X21hc2ssIGludF9zdGF0dXMsIGRldGFpbDsKKwlpbnQgZXJyb3IgPSAwLCByZXQgPSBJUlFfSEFORExFRDsKKworCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CisJaW50X3N0YXR1cyA9IGlvcmVhZDMyKGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCWludF9tYXNrID0gaW9yZWFkMzIoaG9zdC0+aW9hZGRyICsgU0RfSU5UTUFTS0NBUkQpOworCWludF9yZWcgPSBpbnRfc3RhdHVzICYgfmludF9tYXNrICYgfklSUV9ET05UX0NBUkVfQklUUzsKKworCWRldl9kYmcoJmhvc3QtPnBkZXYtPmRldiwgIklSUSBzdGF0dXM6JXggbWFzazoleFxuIiwKKwkJaW50X3N0YXR1cywgaW50X21hc2spOworCisJLyogbm90aGluZyB0byBkbzogaXQncyBub3Qgb3VyIElSUSAqLworCWlmICghaW50X3JlZykgeworCQlyZXQgPSBJUlFfTk9ORTsKKwkJZ290byBpcnFfZW5kOworCX0KKworCWlmIChpbnRfcmVnICYgU0RfQlVGX0NNRF9USU1FT1VUKSB7CisJCWVycm9yID0gLUVUSU1FRE9VVDsKKwkJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiVGltZW91dFxuIik7CisJfSBlbHNlIGlmIChpbnRfcmVnICYgU0RfQlVGX0NSQ19FUlIpIHsKKwkJZXJyb3IgPSAtRUlMU0VROworCQlkZXZfZXJyKCZob3N0LT5wZGV2LT5kZXYsICJCYWRDUkNcbiIpOworCX0gZWxzZSBpZiAoaW50X3JlZyAmIChTRF9CVUZfSUxMRUdBTF9BQ0NFU1MKKwkJCQl8IFNEX0JVRl9DTURfSU5ERVhfRVJSCisJCQkJfCBTRF9CVUZfU1RPUF9CSVRfRU5EX0VSUgorCQkJCXwgU0RfQlVGX09WRVJGTE9XCisJCQkJfCBTRF9CVUZfVU5ERVJGTE9XCisJCQkJfCBTRF9CVUZfREFUQV9USU1FT1VUKSkgeworCQlkZXZfZXJyKCZob3N0LT5wZGV2LT5kZXYsICJCdWZmZXIgc3RhdHVzIGVycm9yOiB7ICVzJXMlcyVzJXMlc31cbiIsCisJCQlpbnRfcmVnICYgU0RfQlVGX0lMTEVHQUxfQUNDRVNTID8gIklMTEVHQUxfQUNDICIgOiAiIiwKKwkJCWludF9yZWcgJiBTRF9CVUZfQ01EX0lOREVYX0VSUiA/ICJDTURfSU5ERVggIiA6ICIiLAorCQkJaW50X3JlZyAmIFNEX0JVRl9TVE9QX0JJVF9FTkRfRVJSID8gIlNUT1BCSVRfRU5EICIgOiAiIiwKKwkJCWludF9yZWcgJiBTRF9CVUZfT1ZFUkZMT1cgPyAiT1ZFUkZMT1cgIiA6ICIiLAorCQkJaW50X3JlZyAmIFNEX0JVRl9VTkRFUkZMT1cgPyAiVU5ERVJGTE9XICIgOiAiIiwKKwkJCWludF9yZWcgJiBTRF9CVUZfREFUQV9USU1FT1VUID8gIkRBVEFfVElNRU9VVCAiIDogIiIpOworCisJCWRldGFpbCA9IGlvcmVhZDMyKGhvc3QtPmlvYWRkciArIFNEX0VSUk9SU1RBVFVTMCk7CisJCWRldl9lcnIoJmhvc3QtPnBkZXYtPmRldiwgImRldGFpbCBlcnJvciBzdGF0dXMgeyAlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlc31cbiIsCisJCQlkZXRhaWwgJiBTRF9FUlIwX1JFU1BfQ01EX0VSUiA/ICJSRVNQX0NNRCAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIwX1JFU1BfTk9OX0NNRDEyX0VORF9CSVRfRVJSID8gIlJFU1BfRU5EX0JJVCAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIwX1JFU1BfQ01EMTJfRU5EX0JJVF9FUlIgPyAiUkVTUF9FTkRfQklUICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfUkVBRF9EQVRBX0VORF9CSVRfRVJSID8gIlJFQURfREFUQV9FTkRfQklUICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfV1JJVEVfQ1JDX1NUQVRVU19FTkRfQklUX0VSUiA/ICJXUklURV9DTURfRU5EX0JJVCAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIwX1JFU1BfTk9OX0NNRDEyX0NSQ19FUlIgPyAiUkVTUF9DUkMgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMF9SRVNQX0NNRDEyX0NSQ19FUlIgPyAiUkVTUF9DUkMgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMF9SRUFEX0RBVEFfQ1JDX0VSUiA/ICJSRUFEX0RBVEFfQ1JDICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfV1JJVEVfQ01EX0NSQ19FUlIgPyAiV1JJVEVfQ01EX0NSQyAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIxX05PX0NNRF9SRVNQID8gIk5PX0NNRF9SRVNQICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjFfVElNRU9VVF9SRUFEX0RBVEEgPyAiUkVBRF9EQVRBX1RJTUVPVVQgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMV9USU1FT1VUX0NSU19TVEFUVVMgPyAiQ1JTX1NUQVRVU19USU1FT1VUICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjFfVElNRU9VVF9DUkNfQlVTWSA/ICJDUkNfQlVTWV9USU1FT1VUICIgOiAiIik7CisJCWVycm9yID0gLUVJTzsKKwl9CisKKwlpZiAoZXJyb3IpIHsKKwkJaWYgKGhvc3QtPmNtZCkKKwkJCWhvc3QtPmNtZC0+ZXJyb3IgPSBlcnJvcjsKKworCQlpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVCkgeworCQkJaW93cml0ZTMyKGludF9zdGF0dXMgJgorCQkJCSAgfihTRF9CVUZfQ01EX1RJTUVPVVQgfCBTRF9DQVJEX1JFU1BfRU5EKSwKKwkJCQkgIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCQl9IGVsc2UgeworCQkJdG9zaHNkX2luaXQoaG9zdCk7CisJCQlfX3Rvc2hzZF9zZXRfaW9zKGhvc3QtPm1tYywgJmhvc3QtPm1tYy0+aW9zKTsKKwkJCWdvdG8gaXJxX2VuZDsKKwkJfQorCX0KKworCS8qIENhcmQgaW5zZXJ0L3JlbW92ZS4gVGhlIG1tYyBjb250cm9sbGluZyBjb2RlIGlzIHN0YXRlbGVzcy4gKi8KKwlpZiAoaW50X3JlZyAmIChTRF9DQVJEX0NBUkRfSU5TRVJURURfMCB8IFNEX0NBUkRfQ0FSRF9SRU1PVkVEXzApKSB7CisJCWlvd3JpdGUzMihpbnRfc3RhdHVzICYKKwkJCSAgfihTRF9DQVJEX0NBUkRfUkVNT1ZFRF8wIHwgU0RfQ0FSRF9DQVJEX0lOU0VSVEVEXzApLAorCQkJICBob3N0LT5pb2FkZHIgKyBTRF9DQVJEU1RBVFVTKTsKKworCQlpZiAoaW50X3JlZyAmIFNEX0NBUkRfQ0FSRF9JTlNFUlRFRF8wKQorCQkJdG9zaHNkX2luaXQoaG9zdCk7CisKKwkJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCAxKTsKKwl9CisKKwkvKiBEYXRhIHRyYW5zZmVyICovCisJaWYgKGludF9yZWcgJiAoU0RfQlVGX1JFQURfRU5BQkxFIHwgU0RfQlVGX1dSSVRFX0VOQUJMRSkpIHsKKwkJaW93cml0ZTMyKGludF9zdGF0dXMgJgorCQkJICB+KFNEX0JVRl9XUklURV9FTkFCTEUgfCBTRF9CVUZfUkVBRF9FTkFCTEUpLAorCQkJICBob3N0LT5pb2FkZHIgKyBTRF9DQVJEU1RBVFVTKTsKKworCQlyZXQgPSBJUlFfV0FLRV9USFJFQUQ7CisJCWdvdG8gaXJxX2VuZDsKKwl9CisKKwkvKiBDb21tYW5kIGNvbXBsZXRpb24gKi8KKwlpZiAoaW50X3JlZyAmIFNEX0NBUkRfUkVTUF9FTkQpIHsKKwkJaW93cml0ZTMyKGludF9zdGF0dXMgJiB+KFNEX0NBUkRfUkVTUF9FTkQpLAorCQkJICBob3N0LT5pb2FkZHIgKyBTRF9DQVJEU1RBVFVTKTsKKwkJdG9zaHNkX2NtZF9pcnEoaG9zdCk7CisJfQorCisJLyogRGF0YSB0cmFuc2ZlciBjb21wbGV0aW9uICovCisJaWYgKGludF9yZWcgJiBTRF9DQVJEX1JXX0VORCkgeworCQlpb3dyaXRlMzIoaW50X3N0YXR1cyAmIH4oU0RfQ0FSRF9SV19FTkQpLAorCQkJICBob3N0LT5pb2FkZHIgKyBTRF9DQVJEU1RBVFVTKTsKKwkJdG9zaHNkX2RhdGFfZW5kX2lycShob3N0KTsKKwl9CitpcnFfZW5kOgorCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0b3Noc2Rfc3RhcnRfY21kKHN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQpCit7CisJc3RydWN0IG1tY19kYXRhICpkYXRhID0gaG9zdC0+ZGF0YTsKKwlpbnQgYyA9IGNtZC0+b3Bjb2RlOworCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiQ29tbWFuZCBvcGNvZGU6ICVkXG4iLCBjbWQtPm9wY29kZSk7CisKKwlpZiAoY21kLT5vcGNvZGUgPT0gTU1DX1NUT1BfVFJBTlNNSVNTSU9OKSB7CisJCWlvd3JpdGUxNihTRF9TVE9QSU5UX0lTU1VFX0NNRDEyLAorCQkJICBob3N0LT5pb2FkZHIgKyBTRF9TVE9QSU5URVJOQUwpOworCisJCWNtZC0+cmVzcFswXSA9IGNtZC0+b3Bjb2RlOworCQljbWQtPnJlc3BbMV0gPSAwOworCQljbWQtPnJlc3BbMl0gPSAwOworCQljbWQtPnJlc3BbM10gPSAwOworCisJCXRvc2hzZF9maW5pc2hfcmVxdWVzdChob3N0KTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAobW1jX3Jlc3BfdHlwZShjbWQpKSB7CisJY2FzZSBNTUNfUlNQX05PTkU6CisJCWMgfD0gU0RfQ01EX1JFU1BfVFlQRV9OT05FOworCQlicmVhazsKKworCWNhc2UgTU1DX1JTUF9SMToKKwkJYyB8PSBTRF9DTURfUkVTUF9UWVBFX0VYVF9SMTsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUlNQX1IxQjoKKwkJYyB8PSBTRF9DTURfUkVTUF9UWVBFX0VYVF9SMUI7CisJCWJyZWFrOworCWNhc2UgTU1DX1JTUF9SMjoKKwkJYyB8PSBTRF9DTURfUkVTUF9UWVBFX0VYVF9SMjsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUlNQX1IzOgorCQljIHw9IFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IzOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmhvc3QtPnBkZXYtPmRldiwgIlVua25vd24gcmVzcG9uc2UgdHlwZSAlZFxuIiwKKwkJCW1tY19yZXNwX3R5cGUoY21kKSk7CisJCWJyZWFrOworCX0KKworCWhvc3QtPmNtZCA9IGNtZDsKKworCWlmIChjbWQtPm9wY29kZSA9PSBNTUNfQVBQX0NNRCkKKwkJYyB8PSBTRF9DTURfVFlQRV9BQ01EOworCisJaWYgKGNtZC0+b3Bjb2RlID09IE1NQ19HT19JRExFX1NUQVRFKQorCQljIHw9ICgzIDw8IDgpOyAgLyogcmVtb3ZlZCBmcm9tIGlwYXEtYXNpYzMuaCBmb3Igc29tZSByZWFzb24gKi8KKworCWlmIChkYXRhKSB7CisJCWMgfD0gU0RfQ01EX0RBVEFfUFJFU0VOVDsKKworCQlpZiAoZGF0YS0+YmxvY2tzID4gMSkgeworCQkJaW93cml0ZTE2KFNEX1NUT1BJTlRfQVVUT19JU1NVRV9DTUQxMiwKKwkJCQkgIGhvc3QtPmlvYWRkciArIFNEX1NUT1BJTlRFUk5BTCk7CisJCQljIHw9IFNEX0NNRF9NVUxUSV9CTE9DSzsKKwkJfQorCisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCQljIHw9IFNEX0NNRF9UUkFOU0ZFUl9SRUFEOworCisJCS8qIE1NQ19EQVRBX1dSSVRFIGRvZXMgbm90IHJlcXVpcmUgYSBiaXQgdG8gYmUgc2V0ICovCisJfQorCisJLyogU2VuZCB0aGUgY29tbWFuZCAqLworCWlvd3JpdGUzMihjbWQtPmFyZywgaG9zdC0+aW9hZGRyICsgU0RfQVJHMCk7CisJaW93cml0ZTE2KGMsIGhvc3QtPmlvYWRkciArIFNEX0NNRCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9zdGFydF9kYXRhKHN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IFNHX01JVEVSX0FUT01JQzsKKworCWRldl9kYmcoJmhvc3QtPnBkZXYtPmRldiwgInNldHVwIGRhdGEgdHJhbnNmZXI6IGJsb2Nrc2l6ZSAlMDh4ICBucl9ibG9ja3MgJWQsIG9mZnNldDogJTA4eFxuIiwKKwkJZGF0YS0+Ymxrc3osIGRhdGEtPmJsb2NrcywgZGF0YS0+c2ctPm9mZnNldCk7CisKKwlob3N0LT5kYXRhID0gZGF0YTsKKworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCWZsYWdzIHw9IFNHX01JVEVSX1RPX1NHOworCWVsc2UKKwkJZmxhZ3MgfD0gU0dfTUlURVJfRlJPTV9TRzsKKworCXNnX21pdGVyX3N0YXJ0KCZob3N0LT5zZ19taXRlciwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwgZmxhZ3MpOworCisJLyogU2V0IHRyYW5zZmVyIGxlbmd0aCBhbmQgYmxvY2tzaXplICovCisJaW93cml0ZTE2KGRhdGEtPmJsb2NrcywgaG9zdC0+aW9hZGRyICsgU0RfQkxPQ0tDT1VOVCk7CisJaW93cml0ZTE2KGRhdGEtPmJsa3N6LCBob3N0LT5pb2FkZHIgKyBTRF9DQVJEWEZFUkRBVEFMRU4pOworfQorCisvKiBQcm9jZXNzIHJlcXVlc3RzIGZyb20gdGhlIE1NQyBsYXllciAqLworc3RhdGljIHZvaWQgdG9zaHNkX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQoreworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGFib3J0IGlmIGNhcmQgbm90IHByZXNlbnQgKi8KKwlpZiAoIShpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9DQVJEU1RBVFVTKSAmIFNEX0NBUkRfUFJFU0VOVF8wKSkgeworCQltcnEtPmNtZC0+ZXJyb3IgPSAtRU5PTUVESVVNOworCQltbWNfcmVxdWVzdF9kb25lKG1tYywgbXJxKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlXQVJOX09OKGhvc3QtPm1ycSAhPSBOVUxMKTsKKworCWhvc3QtPm1ycSA9IG1ycTsKKworCWlmIChtcnEtPmRhdGEpCisJCXRvc2hzZF9zdGFydF9kYXRhKGhvc3QsIG1ycS0+ZGF0YSk7CisKKwl0b3Noc2Rfc2V0X2xlZChob3N0LCAxKTsKKworCXRvc2hzZF9zdGFydF9jbWQoaG9zdCwgbXJxLT5jbWQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB0b3Noc2Rfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwlzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCV9fdG9zaHNkX3NldF9pb3MobW1jLCBpb3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCB0b3Noc2RfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQoreworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwkvKiBhY3RpdmUgbG93ICovCisJcmV0dXJuICEoaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfQ0FSRFNUQVRVUykgJiBTRF9DQVJEX1dSSVRFX1BST1RFQ1QpOworfQorCitzdGF0aWMgaW50IHRvc2hzZF9nZXRfY2Qoc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCXJldHVybiAhIShpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9DQVJEU1RBVFVTKSAmIFNEX0NBUkRfUFJFU0VOVF8wKTsKK30KKworc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgdG9zaHNkX29wcyA9IHsKKwkucmVxdWVzdCA9IHRvc2hzZF9yZXF1ZXN0LAorCS5zZXRfaW9zID0gdG9zaHNkX3NldF9pb3MsCisJLmdldF9ybyA9IHRvc2hzZF9nZXRfcm8sCisJLmdldF9jZCA9IHRvc2hzZF9nZXRfY2QsCit9OworCisKK3N0YXRpYyB2b2lkIHRvc2hzZF9wb3dlcmRvd24oc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0KQoreworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KKwlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgaG9zdC0+aW9hZGRyICsgU0RfSU5UTUFTS0NBUkQpOworCS8qIGRpc2FibGUgY2FyZCBjbG9jayAqLworCWlvd3JpdGUxNigweDAwMCwgaG9zdC0+aW9hZGRyICsgU0RJT19CQVNFICsgU0RJT19DTE9DS05XQUlUQ1RSTCk7CisJaW93cml0ZTE2KDAsIGhvc3QtPmlvYWRkciArIFNEX0NBUkRDTE9DS0NUUkwpOworCS8qIHBvd2VyIGRvd24gY2FyZCAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfUE9XRVIxLCBTRF9QQ0lDRkdfUFdSMV9PRkYpOworCS8qIGRpc2FibGUgY2xvY2sgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX0NMS1NUT1AsIDApOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IHRvc2hzZF9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwl0b3Noc2RfcG93ZXJkb3duKGhvc3QpOworCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvc2hzZF9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0b3Noc2RfaW5pdChob3N0KTsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLworCitzdGF0aWMgaW50IHRvc2hzZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwlyZXNvdXJjZV9zaXplX3QgYmFzZTsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IHRvc2hzZF9ob3N0KSwgJnBkZXYtPmRldik7CisJaWYgKCFtbWMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaG9zdC0+bW1jID0gbW1jOworCisJaG9zdC0+cGRldiA9IHBkZXY7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUklWRVJfTkFNRSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlOworCisJaG9zdC0+aW9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCWlmICghaG9zdC0+aW9hZGRyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcmVsZWFzZTsKKwl9CisKKwkvKiBTZXQgTU1DIGhvc3QgcGFyYW1ldGVycyAqLworCW1tYy0+b3BzID0gJnRvc2hzZF9vcHM7CisJbW1jLT5jYXBzID0gTU1DX0NBUF80X0JJVF9EQVRBOworCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zMzsKKworCW1tYy0+Zl9taW4gPSBIQ0xLIC8gNTEyOworCW1tYy0+Zl9tYXggPSBIQ0xLOworCisJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOworCisJdG9zaHNkX2luaXQoaG9zdCk7CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShwZGV2LT5pcnEsIHRvc2hzZF9pcnEsIHRvc2hzZF90aHJlYWRfaXJxLAorCQkJCSAgIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgaG9zdCk7CisJaWYgKHJldCkKKwkJZ290byB1bm1hcDsKKworCW1tY19hZGRfaG9zdChtbWMpOworCisJYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJNTUlPICVwYSwgSVJRICVkXG4iLCAmYmFzZSwgcGRldi0+aXJxKTsKKworCXBtX3N1c3BlbmRfaWdub3JlX2NoaWxkcmVuKCZwZGV2LT5kZXYsIDEpOworCisJcmV0dXJuIDA7CisKK3VubWFwOgorCXBjaV9pb3VubWFwKHBkZXYsIGhvc3QtPmlvYWRkcik7CityZWxlYXNlOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitmcmVlOgorCW1tY19mcmVlX2hvc3QobW1jKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CitlcnI6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJbW1jX3JlbW92ZV9ob3N0KGhvc3QtPm1tYyk7CisJdG9zaHNkX3Bvd2VyZG93bihob3N0KTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIGhvc3QpOworCXBjaV9pb3VubWFwKHBkZXYsIGhvc3QtPmlvYWRkcik7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwltbWNfZnJlZV9ob3N0KGhvc3QtPm1tYyk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRvc2hzZF9wbV9vcHMgPSB7CisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFModG9zaHNkX3BtX3N1c3BlbmQsIHRvc2hzZF9wbV9yZXN1bWUpCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdG9zaHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IHBjaV9pZHMsCisJLnByb2JlID0gdG9zaHNkX3Byb2JlLAorCS5yZW1vdmUgPSB0b3Noc2RfcmVtb3ZlLAorCS5kcml2ZXIucG0gPSAmdG9zaHNkX3BtX29wcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvc2hzZF9kcnZfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ0b3Noc2RfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRvc2hzZF9kcnZfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdG9zaHNkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRvc2hzZF9kcnZfaW5pdCk7Cittb2R1bGVfZXhpdCh0b3Noc2RfZHJ2X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJPbmRyZWogWmFyeSwgUmljaGFyZCBCZXR0cyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUb3NoaWJhIFBDSSBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuaCBiL2RyaXZlcnMvbW1jL2hvc3QvdG9zaHNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjMGQ4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdG9zaHNkLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiAgVG9zaGliYSBQQ0kgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IE9uZHJlaiBaYXJ5CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFJpY2hhcmQgQmV0dHMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICAgICBCYXNlZCBvbiBhc2ljM19tbWMuYyBDb3B5cmlnaHQgKGMpIDIwMDUgU0RHIFN5c3RlbXMsIExMQworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBIQ0xLCTMzMDAwMDAwCS8qIDMzIE1IeiAoUENJIGNsb2NrKSAqLworCisjZGVmaW5lIFNEX1BDSUNGR19DTEtTVE9QCTB4NDAJLyogMHgxZiA9IGNsb2NrIGNvbnRyb2xsZXIsIDAgPSBzdG9wICovCisjZGVmaW5lIFNEX1BDSUNGR19HQVRFRENMSwkweDQxCS8qIEdhdGVkIGNsb2NrICovCisjZGVmaW5lIFNEX1BDSUNGR19DTEtNT0RFCTB4NDIJLyogQ29udHJvbCBjbG9jayBvZiBTRCBjb250cm9sbGVyICovCisjZGVmaW5lIFNEX1BDSUNGR19QSU5TVEFUVVMJMHg0NAkvKiBSL086IHJlYWQgc3RhdHVzIG9mIFNEIHBpbnMgKi8KKyNkZWZpbmUgU0RfUENJQ0ZHX1BPV0VSMQkweDQ4CisjZGVmaW5lIFNEX1BDSUNGR19QT1dFUjIJMHg0OQorI2RlZmluZSBTRF9QQ0lDRkdfUE9XRVIzCTB4NGEKKyNkZWZpbmUgU0RfUENJQ0ZHX0NBUkRERVRFQ1QJMHg0YworI2RlZmluZSBTRF9QQ0lDRkdfU0xPVFMJCTB4NTAJLyogUi9POiBkZWZpbmUgc3VwcG9ydCBzbG90IG51bWJlciAqLworI2RlZmluZSBTRF9QQ0lDRkdfRVhUR0FURUNMSzEJMHhmMAkvKiBDb3VsZCBiZSB1c2VkIGZvciBnYXRlZCBjbG9jayAqLworI2RlZmluZSBTRF9QQ0lDRkdfRVhUR0FURUNMSzIJMHhmMQkvKiBDb3VsZCBiZSB1c2VkIGZvciBnYXRlZCBjbG9jayAqLworI2RlZmluZSBTRF9QQ0lDRkdfRVhUR0FURUNMSzMJMHhmOQkvKiBCaXQgMTogZG91YmxlIGJ1ZmZlci9zaW5nbGUgYnVmZmVyICovCisjZGVmaW5lIFNEX1BDSUNGR19TRExFRF9FTkFCTEUxCTB4ZmEKKyNkZWZpbmUgU0RfUENJQ0ZHX1NETEVEX0VOQUJMRTIJMHhmZQorCisjZGVmaW5lIFNEX1BDSUNGR19DTEtNT0RFX0RJVl9ESVNBQkxFCUJJVCgwKQorI2RlZmluZSBTRF9QQ0lDRkdfQ0xLU1RPUF9FTkFCTEVfQUxMCTB4MWYKKyNkZWZpbmUgU0RfUENJQ0ZHX0xFRF9FTkFCTEUxX1NUQVJUCTB4MTIKKyNkZWZpbmUgU0RfUENJQ0ZHX0xFRF9FTkFCTEUyX1NUQVJUCTB4ODAKKworI2RlZmluZSBTRF9QQ0lDRkdfUFdSMV8zM1YJMHgwOAkvKiBTZXQgZm9yIDMuMyB2b2x0cyAqLworI2RlZmluZSBTRF9QQ0lDRkdfUFdSMV9PRkYJMHgwMAkvKiBUdXJuIG9mZiBwb3dlciAqLworI2RlZmluZSBTRF9QQ0lDRkdfUFdSMl9BVVRPCTB4MDIKKworI2RlZmluZSBTRF9DTUQJCQkweDAwCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfQVJHMAkJCTB4MDQJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9BUkcxCQkJMHgwNgkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX1NUT1BJTlRFUk5BTAkJMHgwOAorI2RlZmluZSBTRF9CTE9DS0NPVU5UCQkweDBhCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfUkVTUE9OU0UwCQkweDBjCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfUkVTUE9OU0UxCQkweDBlCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfUkVTUE9OU0UyCQkweDEwCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfUkVTUE9OU0UzCQkweDEyCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfUkVTUE9OU0U0CQkweDE0CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfUkVTUE9OU0U1CQkweDE2CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfUkVTUE9OU0U2CQkweDE4CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfUkVTUE9OU0U3CQkweDFhCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfQ0FSRFNUQVRVUwkJMHgxYwkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX0JVRkZFUkNUUkwJCTB4MWUJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9JTlRNQVNLQ0FSRAkJMHgyMAkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX0lOVE1BU0tCVUZGRVIJMHgyMgkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX0NBUkRDTE9DS0NUUkwJMHgyNAorI2RlZmluZSBTRF9DQVJEWEZFUkRBVEFMRU4JMHgyNgkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX0NBUkRPUFRJT05TRVRVUAkweDI4CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfRVJST1JTVEFUVVMwCQkweDJjCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfRVJST1JTVEFUVVMxCQkweDJlCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfREFUQVBPUlQJCTB4MzAJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9UUkFOU0FDVElPTkNUUkwJMHgzNAkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX1NPRlRXQVJFUkVTRVQJMHhlMAkvKiBhbHNvIGZvciBTRElPICovCisKKy8qIHJlZ2lzdGVycyBhYm92ZSBtYXJrZWQgImFsc28gZm9yIFNESU8iIGFuZCBhbGwgU0RJTyByZWdpc3RlcnMgYmVsb3cgY2FuIGJlCisgKiBhY2Nlc3NlZCBhdCBTRElPX0JBU0UgKyByZWcgYWRkcmVzcyAqLworI2RlZmluZSBTRElPX0JBU0UJIDB4MTAwCisKKyNkZWZpbmUgU0RJT19DQVJEUE9SVFNFTAkweDAyCisjZGVmaW5lIFNESU9fQ0FSRElOVENUUkwJMHgzNgorI2RlZmluZSBTRElPX0NMT0NLTldBSVRDVFJMCTB4MzgKKyNkZWZpbmUgU0RJT19IT1NUSU5GT1JNQVRJT04JMHgzYQorI2RlZmluZSBTRElPX0VSUk9SQ1RSTAkJMHgzYworI2RlZmluZSBTRElPX0xFRENUUkwJCTB4M2UKKworI2RlZmluZSBTRF9UUkFOU0NUTF9TRVQJCUJJVCg4KQorCisjZGVmaW5lIFNEX0NBUkRDTEtfRElWX0RJU0FCTEUJQklUKDE1KQorI2RlZmluZSBTRF9DQVJEQ0xLX0VOQUJMRV9DTE9DSwlCSVQoOCkKKyNkZWZpbmUgU0RfQ0FSRENMS19DTEtfRElWXzUxMglCSVQoNykKKyNkZWZpbmUgU0RfQ0FSRENMS19DTEtfRElWXzI1NglCSVQoNikKKyNkZWZpbmUgU0RfQ0FSRENMS19DTEtfRElWXzEyOAlCSVQoNSkKKyNkZWZpbmUgU0RfQ0FSRENMS19DTEtfRElWXzY0CUJJVCg0KQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfMzIJQklUKDMpCisjZGVmaW5lIFNEX0NBUkRDTEtfQ0xLX0RJVl8xNglCSVQoMikKKyNkZWZpbmUgU0RfQ0FSRENMS19DTEtfRElWXzgJQklUKDEpCisjZGVmaW5lIFNEX0NBUkRDTEtfQ0xLX0RJVl80CUJJVCgwKQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfMgkwCisKKyNkZWZpbmUgU0RfQ0FSRE9QVF9SRVFVSVJFRAkJMHgwMDBlCisjZGVmaW5lIFNEX0NBUkRPUFRfREFUQV9SRVNQX1RJTUVPVVQoeCkJKCgoeCkgJiAweDBmKSA8PCA0KSAvKiA0IGJpdHMgKi8KKyNkZWZpbmUgU0RfQ0FSRE9QVF9DMl9NT0RVTEVfQUJTRU5UCUJJVCgxNCkKKyNkZWZpbmUgU0RfQ0FSRE9QVF9EQVRBX1hGUl9XSURUSF8xCSgxIDw8IDE1KQorI2RlZmluZSBTRF9DQVJET1BUX0RBVEFfWEZSX1dJRFRIXzQJKDAgPDwgMTUpCisKKyNkZWZpbmUgU0RfQ01EX1RZUEVfQ01ECQkJKDAgPDwgNikKKyNkZWZpbmUgU0RfQ01EX1RZUEVfQUNNRAkJKDEgPDwgNikKKyNkZWZpbmUgU0RfQ01EX1RZUEVfQVVUSEVOCQkoMiA8PCA2KQorI2RlZmluZSBTRF9DTURfUkVTUF9UWVBFX05PTkUJCSgzIDw8IDgpCisjZGVmaW5lIFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IxCQkoNCA8PCA4KQorI2RlZmluZSBTRF9DTURfUkVTUF9UWVBFX0VYVF9SMUIJKDUgPDwgOCkKKyNkZWZpbmUgU0RfQ01EX1JFU1BfVFlQRV9FWFRfUjIJCSg2IDw8IDgpCisjZGVmaW5lIFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IzCQkoNyA8PCA4KQorI2RlZmluZSBTRF9DTURfUkVTUF9UWVBFX0VYVF9SNgkJKDQgPDwgOCkKKyNkZWZpbmUgU0RfQ01EX1JFU1BfVFlQRV9FWFRfUjcJCSg0IDw8IDgpCisjZGVmaW5lIFNEX0NNRF9EQVRBX1BSRVNFTlQJCUJJVCgxMSkKKyNkZWZpbmUgU0RfQ01EX1RSQU5TRkVSX1JFQUQJCUJJVCgxMikKKyNkZWZpbmUgU0RfQ01EX01VTFRJX0JMT0NLCQlCSVQoMTMpCisjZGVmaW5lIFNEX0NNRF9TRUNVUklUWV9DTUQJCUJJVCgxNCkKKworI2RlZmluZSBTRF9TVE9QSU5UX0lTU1VFX0NNRDEyCQlCSVQoMCkKKyNkZWZpbmUgU0RfU1RPUElOVF9BVVRPX0lTU1VFX0NNRDEyCUJJVCg4KQorCisjZGVmaW5lIFNEX0NBUkRfUkVTUF9FTkQJQklUKDApCisjZGVmaW5lIFNEX0NBUkRfUldfRU5ECQlCSVQoMikKKyNkZWZpbmUgU0RfQ0FSRF9DQVJEX1JFTU9WRURfMAlCSVQoMykKKyNkZWZpbmUgU0RfQ0FSRF9DQVJEX0lOU0VSVEVEXzAJQklUKDQpCisjZGVmaW5lIFNEX0NBUkRfUFJFU0VOVF8wCUJJVCg1KQorI2RlZmluZSBTRF9DQVJEX1VOSzYJCUJJVCg2KQorI2RlZmluZSBTRF9DQVJEX1dSSVRFX1BST1RFQ1QJQklUKDcpCisjZGVmaW5lIFNEX0NBUkRfQ0FSRF9SRU1PVkVEXzMJQklUKDgpCisjZGVmaW5lIFNEX0NBUkRfQ0FSRF9JTlNFUlRFRF8zCUJJVCg5KQorI2RlZmluZSBTRF9DQVJEX1BSRVNFTlRfMwlCSVQoMTApCisKKyNkZWZpbmUgU0RfQlVGX0NNRF9JTkRFWF9FUlIJQklUKDE2KQorI2RlZmluZSBTRF9CVUZfQ1JDX0VSUgkJQklUKDE3KQorI2RlZmluZSBTRF9CVUZfU1RPUF9CSVRfRU5EX0VSUglCSVQoMTgpCisjZGVmaW5lIFNEX0JVRl9EQVRBX1RJTUVPVVQJQklUKDE5KQorI2RlZmluZSBTRF9CVUZfT1ZFUkZMT1cJCUJJVCgyMCkKKyNkZWZpbmUgU0RfQlVGX1VOREVSRkxPVwlCSVQoMjEpCisjZGVmaW5lIFNEX0JVRl9DTURfVElNRU9VVAlCSVQoMjIpCisjZGVmaW5lIFNEX0JVRl9VTks3CQlCSVQoMjMpCisjZGVmaW5lIFNEX0JVRl9SRUFEX0VOQUJMRQlCSVQoMjQpCisjZGVmaW5lIFNEX0JVRl9XUklURV9FTkFCTEUJQklUKDI1KQorI2RlZmluZSBTRF9CVUZfSUxMRUdBTF9GVU5DVElPTglCSVQoMjkpCisjZGVmaW5lIFNEX0JVRl9DTURfQlVTWQkJQklUKDMwKQorI2RlZmluZSBTRF9CVUZfSUxMRUdBTF9BQ0NFU1MJQklUKDMxKQorCisjZGVmaW5lIFNEX0VSUjBfUkVTUF9DTURfRVJSCQkJQklUKDApCisjZGVmaW5lIFNEX0VSUjBfUkVTUF9OT05fQ01EMTJfRU5EX0JJVF9FUlIJQklUKDIpCisjZGVmaW5lIFNEX0VSUjBfUkVTUF9DTUQxMl9FTkRfQklUX0VSUgkJQklUKDMpCisjZGVmaW5lIFNEX0VSUjBfUkVBRF9EQVRBX0VORF9CSVRfRVJSCQlCSVQoNCkKKyNkZWZpbmUgU0RfRVJSMF9XUklURV9DUkNfU1RBVFVTX0VORF9CSVRfRVJSCUJJVCg1KQorI2RlZmluZSBTRF9FUlIwX1JFU1BfTk9OX0NNRDEyX0NSQ19FUlIJCUJJVCg4KQorI2RlZmluZSBTRF9FUlIwX1JFU1BfQ01EMTJfQ1JDX0VSUgkJQklUKDkpCisjZGVmaW5lIFNEX0VSUjBfUkVBRF9EQVRBX0NSQ19FUlIJCUJJVCgxMCkKKyNkZWZpbmUgU0RfRVJSMF9XUklURV9DTURfQ1JDX0VSUgkJQklUKDExKQorCisjZGVmaW5lIFNEX0VSUjFfTk9fQ01EX1JFU1AJCUJJVCgxNikKKyNkZWZpbmUgU0RfRVJSMV9USU1FT1VUX1JFQURfREFUQQlCSVQoMjApCisjZGVmaW5lIFNEX0VSUjFfVElNRU9VVF9DUlNfU1RBVFVTCUJJVCgyMSkKKyNkZWZpbmUgU0RfRVJSMV9USU1FT1VUX0NSQ19CVVNZCUJJVCgyMikKKworI2RlZmluZSBJUlFfRE9OVF9DQVJFX0JJVFMgKFNEX0NBUkRfUFJFU0VOVF8zIFwKKwl8IFNEX0NBUkRfV1JJVEVfUFJPVEVDVCBcCisJfCBTRF9DQVJEX1VOSzYgXAorCXwgU0RfQ0FSRF9QUkVTRU5UXzAgXAorCXwgU0RfQlVGX1VOSzcgXAorCXwgU0RfQlVGX0NNRF9CVVNZKQorCitzdHJ1Y3QgdG9zaHNkX2hvc3QgeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCisJc3BpbmxvY2tfdCBsb2NrOworCisJc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7LyogQ3VycmVudCByZXF1ZXN0ICovCisJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7LyogQ3VycmVudCBjb21tYW5kICovCisJc3RydWN0IG1tY19kYXRhICpkYXRhOwkvKiBDdXJyZW50IGRhdGEgcmVxdWVzdCAqLworCisJc3RydWN0IHNnX21hcHBpbmdfaXRlciBzZ19taXRlcjsgLyogZm9yIFBJTyAqLworCisJdm9pZCBfX2lvbWVtICppb2FkZHI7IC8qIG1hcHBlZCBhZGRyZXNzICovCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggYzlhYzA2Yy4uYTUxMTVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0yNDcxLDcgKzI0NzEsOCBAQAogCQkJYm9uZF9zbGF2ZV9zdGF0ZV9jaGFuZ2UoYm9uZCk7CiAJCQlpZiAoQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9YT1IpCiAJCQkJYm9uZF91cGRhdGVfc2xhdmVfYXJyKGJvbmQsIE5VTEwpOwotCQl9IGVsc2UgaWYgKGRvX2ZhaWxvdmVyKSB7CisJCX0KKwkJaWYgKGRvX2ZhaWxvdmVyKSB7CiAJCQlibG9ja19uZXRwb2xsX3R4KCk7CiAJCQlib25kX3NlbGVjdF9hY3RpdmVfc2xhdmUoYm9uZCk7CiAJCQl1bmJsb2NrX25ldHBvbGxfdHgoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jCmluZGV4IGMxM2Q4M2UuLjQ1ZjA5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYwpAQCAtMjI1LDcgKzIyNSwxMiBAQAogCiAJCWJvbmRfb3B0aW9uX2FycF9pcF90YXJnZXRzX2NsZWFyKGJvbmQpOwogCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGRhdGFbSUZMQV9CT05EX0FSUF9JUF9UQVJHRVRdLCByZW0pIHsKLQkJCV9fYmUzMiB0YXJnZXQgPSBubGFfZ2V0X2JlMzIoYXR0cik7CisJCQlfX2JlMzIgdGFyZ2V0OworCisJCQlpZiAobmxhX2xlbihhdHRyKSA8IHNpemVvZih0YXJnZXQpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQl0YXJnZXQgPSBubGFfZ2V0X2JlMzIoYXR0cik7CiAKIAkJCWJvbmRfb3B0X2luaXR2YWwoJm5ld3ZhbCwgKF9fZm9yY2UgdTY0KXRhcmdldCk7CiAJCQllcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BUlBfVEFSR0VUUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYwppbmRleCAwMjQ5MmQyLi4yY2ZlNTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2Rldi5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlsb25nIHJhdGU7CiAJdTY0IHY2NDsKIAotCS8qIFVzZSBDSUEgcmVjb21tZW5kZWQgc2FtcGxlIHBvaW50cyAqLworCS8qIFVzZSBDaUEgcmVjb21tZW5kZWQgc2FtcGxlIHBvaW50cyAqLwogCWlmIChidC0+c2FtcGxlX3BvaW50KSB7CiAJCXNhbXBsX3B0ID0gYnQtPnNhbXBsZV9wb2ludDsKIAl9IGVsc2UgewpAQCAtMzgyLDcgKzM4Miw3IEBACiAJQlVHX09OKGlkeCA+PSBwcml2LT5lY2hvX3NrYl9tYXgpOwogCiAJaWYgKHByaXYtPmVjaG9fc2tiW2lkeF0pIHsKLQkJa2ZyZWVfc2tiKHByaXYtPmVjaG9fc2tiW2lkeF0pOworCQlkZXZfa2ZyZWVfc2tiX2FueShwcml2LT5lY2hvX3NrYltpZHhdKTsKIAkJcHJpdi0+ZWNob19za2JbaWR4XSA9IE5VTEw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21fY2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vbV9jYW4vS2NvbmZpZwppbmRleCBmY2E1NDgyLi4wNGYyMGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbV9jYW4vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9jYW4vbV9jYW4vS2NvbmZpZwpAQCAtMSw0ICsxLDUgQEAKIGNvbmZpZyBDQU5fTV9DQU4KKwlkZXBlbmRzIG9uIEhBU19JT01FTQogCXRyaXN0YXRlICJCb3NjaCBNX0NBTiBkZXZpY2VzIgogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBmb3IgQm9zY2ggTV9DQU4gY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9tX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL21fY2FuL21fY2FuLmMKaW5kZXggMTBkNTcxZS4uZDdiYzQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21fY2FuL21fY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21fY2FuL21fY2FuLmMKQEAgLTEwNSwxNCArMTA1LDM2IEBACiAJTVJBTV9DRkdfTlVNLAogfTsKIAorLyogRmFzdCBCaXQgVGltaW5nICYgUHJlc2NhbGVyIFJlZ2lzdGVyIChGQlRQKSAqLworI2RlZmluZSBGQlRSX0ZCUlBfTUFTSwkJMHgxZgorI2RlZmluZSBGQlRSX0ZCUlBfU0hJRlQJCTE2CisjZGVmaW5lIEZCVFJfRlRTRUcxX1NISUZUCTgKKyNkZWZpbmUgRkJUUl9GVFNFRzFfTUFTSwkoMHhmIDw8IEZCVFJfRlRTRUcxX1NISUZUKQorI2RlZmluZSBGQlRSX0ZUU0VHMl9TSElGVAk0CisjZGVmaW5lIEZCVFJfRlRTRUcyX01BU0sJKDB4NyA8PCBGQlRSX0ZUU0VHMl9TSElGVCkKKyNkZWZpbmUgRkJUUl9GU0pXX1NISUZUCQkwCisjZGVmaW5lIEZCVFJfRlNKV19NQVNLCQkweDMKKwogLyogVGVzdCBSZWdpc3RlciAoVEVTVCkgKi8KICNkZWZpbmUgVEVTVF9MQkNLCUJJVCg0KQogCiAvKiBDQyBDb250cm9sIFJlZ2lzdGVyKENDQ1IpICovCi0jZGVmaW5lIENDQ1JfVEVTVAlCSVQoNykKLSNkZWZpbmUgQ0NDUl9NT04JQklUKDUpCi0jZGVmaW5lIENDQ1JfQ0NFCUJJVCgxKQotI2RlZmluZSBDQ0NSX0lOSVQJQklUKDApCisjZGVmaW5lIENDQ1JfVEVTVAkJQklUKDcpCisjZGVmaW5lIENDQ1JfQ01SX01BU0sJCTB4MworI2RlZmluZSBDQ0NSX0NNUl9TSElGVAkJMTAKKyNkZWZpbmUgQ0NDUl9DTVJfQ0FORkQJCTB4MQorI2RlZmluZSBDQ0NSX0NNUl9DQU5GRF9CUlMJMHgyCisjZGVmaW5lIENDQ1JfQ01SX0NBTgkJMHgzCisjZGVmaW5lIENDQ1JfQ01FX01BU0sJCTB4MworI2RlZmluZSBDQ0NSX0NNRV9TSElGVAkJOAorI2RlZmluZSBDQ0NSX0NNRV9DQU4JCTAKKyNkZWZpbmUgQ0NDUl9DTUVfQ0FORkQJCTB4MQorI2RlZmluZSBDQ0NSX0NNRV9DQU5GRF9CUlMJMHgyCisjZGVmaW5lIENDQ1JfVEVTVAkJQklUKDcpCisjZGVmaW5lIENDQ1JfTU9OCQlCSVQoNSkKKyNkZWZpbmUgQ0NDUl9DQ0UJCUJJVCgxKQorI2RlZmluZSBDQ0NSX0lOSVQJCUJJVCgwKQorI2RlZmluZSBDQ0NSX0NBTkZECQkweDEwCiAKIC8qIEJpdCBUaW1pbmcgJiBQcmVzY2FsZXIgUmVnaXN0ZXIgKEJUUCkgKi8KICNkZWZpbmUgQlRSX0JSUF9NQVNLCQkweDNmZgpAQCAtMjA0LDYgKzIyNiw3IEBACiAKIC8qIFJ4IEJ1ZmZlciAvIEZJRk8gRWxlbWVudCBTaXplIENvbmZpZ3VyYXRpb24gKFJYRVNDKSAqLwogI2RlZmluZSBNX0NBTl9SWEVTQ184QllURVMJMHgwCisjZGVmaW5lIE1fQ0FOX1JYRVNDXzY0QllURVMJMHg3NzcKIAogLyogVHggQnVmZmVyIENvbmZpZ3VyYXRpb24oVFhCQykgKi8KICNkZWZpbmUgVFhCQ19ORFRCX09GRgkJMTYKQEAgLTIxMSw2ICsyMzQsNyBAQAogCiAvKiBUeCBCdWZmZXIgRWxlbWVudCBTaXplIENvbmZpZ3VyYXRpb24oVFhFU0MpICovCiAjZGVmaW5lIFRYRVNDX1RCRFNfOEJZVEVTCTB4MAorI2RlZmluZSBUWEVTQ19UQkRTXzY0QllURVMJMHg3CiAKIC8qIFR4IEV2ZW50IEZJRk8gQ29uLmd1cmF0aW9uIChUWEVGQykgKi8KICNkZWZpbmUgVFhFRkNfRUZTX09GRgkJMTYKQEAgLTIxOSwxMSArMjQzLDExIEBACiAvKiBNZXNzYWdlIFJBTSBDb25maWd1cmF0aW9uIChpbiBieXRlcykgKi8KICNkZWZpbmUgU0lERl9FTEVNRU5UX1NJWkUJNAogI2RlZmluZSBYSURGX0VMRU1FTlRfU0laRQk4Ci0jZGVmaW5lIFJYRjBfRUxFTUVOVF9TSVpFCTE2Ci0jZGVmaW5lIFJYRjFfRUxFTUVOVF9TSVpFCTE2CisjZGVmaW5lIFJYRjBfRUxFTUVOVF9TSVpFCTcyCisjZGVmaW5lIFJYRjFfRUxFTUVOVF9TSVpFCTcyCiAjZGVmaW5lIFJYQl9FTEVNRU5UX1NJWkUJMTYKICNkZWZpbmUgVFhFX0VMRU1FTlRfU0laRQk4Ci0jZGVmaW5lIFRYQl9FTEVNRU5UX1NJWkUJMTYKKyNkZWZpbmUgVFhCX0VMRU1FTlRfU0laRQk3MgogCiAvKiBNZXNzYWdlIFJBTSBFbGVtZW50cyAqLwogI2RlZmluZSBNX0NBTl9GSUZPX0lECQkweDAKQEAgLTIzMSwxMSArMjU1LDE3IEBACiAjZGVmaW5lIE1fQ0FOX0ZJRk9fREFUQShuKQkoMHg4ICsgKChuKSA8PCAyKSkKIAogLyogUnggQnVmZmVyIEVsZW1lbnQgKi8KKy8qIFIwICovCiAjZGVmaW5lIFJYX0JVRl9FU0kJCUJJVCgzMSkKICNkZWZpbmUgUlhfQlVGX1hURAkJQklUKDMwKQogI2RlZmluZSBSWF9CVUZfUlRSCQlCSVQoMjkpCisvKiBSMSAqLworI2RlZmluZSBSWF9CVUZfQU5NRgkJQklUKDMxKQorI2RlZmluZSBSWF9CVUZfRURMCQlCSVQoMjEpCisjZGVmaW5lIFJYX0JVRl9CUlMJCUJJVCgyMCkKIAogLyogVHggQnVmZmVyIEVsZW1lbnQgKi8KKy8qIFIwICovCiAjZGVmaW5lIFRYX0JVRl9YVEQJCUJJVCgzMCkKICNkZWZpbmUgVFhfQlVGX1JUUgkJQklUKDI5KQogCkBAIC0yOTYsNiArMzI2LDcgQEAKIAlpZiAoZW5hYmxlKSB7CiAJCS8qIGVuYWJsZSBtX2NhbiBjb25maWd1cmF0aW9uICovCiAJCW1fY2FuX3dyaXRlKHByaXYsIE1fQ0FOX0NDQ1IsIGNjY3IgfCBDQ0NSX0lOSVQpOworCQl1ZGVsYXkoNSk7CiAJCS8qIENDQ1IuQ0NFIGNhbiBvbmx5IGJlIHNldC9yZXNldCB3aGlsZSBDQ0NSLklOSVQgPSAnMScgKi8KIAkJbV9jYW5fd3JpdGUocHJpdiwgTV9DQU5fQ0NDUiwgY2NjciB8IENDQ1JfSU5JVCB8IENDQ1JfQ0NFKTsKIAl9IGVsc2UgewpAQCAtMzI2LDQxICszNTcsNjcgQEAKIAltX2Nhbl93cml0ZShwcml2LCBNX0NBTl9JTEUsIDB4MCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1fY2FuX3JlYWRfZmlmbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2ZyYW1lICpjZiwKLQkJCSAgICB1MzIgcnhmcykKK3N0YXRpYyB2b2lkIG1fY2FuX3JlYWRfZmlmbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhmcykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAlzdHJ1Y3QgbV9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdTMyIGlkLCBmZ2k7CisJc3RydWN0IGNhbmZkX2ZyYW1lICpjZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBpZCwgZmdpLCBkbGM7CisJaW50IGk7CiAKIAkvKiBjYWxjdWxhdGUgdGhlIGZpZm8gZ2V0IGluZGV4IGZvciB3aGVyZSB0byByZWFkIGRhdGEgKi8KIAlmZ2kgPSAocnhmcyAmIFJYRlNfRkdJX01BU0spID4+IFJYRlNfRkdJX09GRjsKKwlkbGMgPSBtX2Nhbl9maWZvX3JlYWQocHJpdiwgZmdpLCBNX0NBTl9GSUZPX0RMQyk7CisJaWYgKGRsYyAmIFJYX0JVRl9FREwpCisJCXNrYiA9IGFsbG9jX2NhbmZkX3NrYihkZXYsICZjZik7CisJZWxzZQorCQlza2IgPSBhbGxvY19jYW5fc2tiKGRldiwgKHN0cnVjdCBjYW5fZnJhbWUgKiopJmNmKTsKKwlpZiAoIXNrYikgeworCQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCQlyZXR1cm47CisJfQorCisJaWYgKGRsYyAmIFJYX0JVRl9FREwpCisJCWNmLT5sZW4gPSBjYW5fZGxjMmxlbigoZGxjID4+IDE2KSAmIDB4MEYpOworCWVsc2UKKwkJY2YtPmxlbiA9IGdldF9jYW5fZGxjKChkbGMgPj4gMTYpICYgMHgwRik7CisKIAlpZCA9IG1fY2FuX2ZpZm9fcmVhZChwcml2LCBmZ2ksIE1fQ0FOX0ZJRk9fSUQpOwogCWlmIChpZCAmIFJYX0JVRl9YVEQpCiAJCWNmLT5jYW5faWQgPSAoaWQgJiBDQU5fRUZGX01BU0spIHwgQ0FOX0VGRl9GTEFHOwogCWVsc2UKIAkJY2YtPmNhbl9pZCA9IChpZCA+PiAxOCkgJiBDQU5fU0ZGX01BU0s7CiAKLQlpZiAoaWQgJiBSWF9CVUZfUlRSKSB7CisJaWYgKGlkICYgUlhfQlVGX0VTSSkgeworCQljZi0+ZmxhZ3MgfD0gQ0FORkRfRVNJOworCQluZXRkZXZfZGJnKGRldiwgIkVTSSBFcnJvclxuIik7CisJfQorCisJaWYgKCEoZGxjICYgUlhfQlVGX0VETCkgJiYgKGlkICYgUlhfQlVGX1JUUikpIHsKIAkJY2YtPmNhbl9pZCB8PSBDQU5fUlRSX0ZMQUc7CiAJfSBlbHNlIHsKLQkJaWQgPSBtX2Nhbl9maWZvX3JlYWQocHJpdiwgZmdpLCBNX0NBTl9GSUZPX0RMQyk7Ci0JCWNmLT5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMoKGlkID4+IDE2KSAmIDB4MEYpOwotCQkqKHUzMiAqKShjZi0+ZGF0YSArIDApID0gbV9jYW5fZmlmb19yZWFkKHByaXYsIGZnaSwKLQkJCQkJCQkgTV9DQU5fRklGT19EQVRBKDApKTsKLQkJKih1MzIgKikoY2YtPmRhdGEgKyA0KSA9IG1fY2FuX2ZpZm9fcmVhZChwcml2LCBmZ2ksCi0JCQkJCQkJIE1fQ0FOX0ZJRk9fREFUQSgxKSk7CisJCWlmIChkbGMgJiBSWF9CVUZfQlJTKQorCQkJY2YtPmZsYWdzIHw9IENBTkZEX0JSUzsKKworCQlmb3IgKGkgPSAwOyBpIDwgY2YtPmxlbjsgaSArPSA0KQorCQkJKih1MzIgKikoY2YtPmRhdGEgKyBpKSA9CisJCQkJbV9jYW5fZmlmb19yZWFkKHByaXYsIGZnaSwKKwkJCQkJCU1fQ0FOX0ZJRk9fREFUQShpIC8gNCkpOwogCX0KIAogCS8qIGFja25vd2xlZGdlIHJ4IGZpZm8gMCAqLwogCW1fY2FuX3dyaXRlKHByaXYsIE1fQ0FOX1JYRjBBLCBmZ2kpOworCisJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmxlbjsKKworCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiB9CiAKIHN0YXRpYyBpbnQgbV9jYW5fZG9fcnhfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcXVvdGEpCiB7CiAJc3RydWN0IG1fY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGNhbl9mcmFtZSAqZnJhbWU7CiAJdTMyIHBrdHMgPSAwOwogCXUzMiByeGZzOwogCkBAIC0zNzQsMTggKzQzMSw3IEBACiAJCWlmIChyeGZzICYgUlhGU19SRkwpCiAJCQluZXRkZXZfd2FybihkZXYsICJSeCBGSUZPIDAgTWVzc2FnZSBMb3N0XG4iKTsKIAotCQlza2IgPSBhbGxvY19jYW5fc2tiKGRldiwgJmZyYW1lKTsKLQkJaWYgKCFza2IpIHsKLQkJCXN0YXRzLT5yeF9kcm9wcGVkKys7Ci0JCQlyZXR1cm4gcGt0czsKLQkJfQotCi0JCW1fY2FuX3JlYWRfZmlmbyhkZXYsIGZyYW1lLCByeGZzKTsKLQotCQlzdGF0cy0+cnhfcGFja2V0cysrOwotCQlzdGF0cy0+cnhfYnl0ZXMgKz0gZnJhbWUtPmNhbl9kbGM7Ci0KLQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJbV9jYW5fcmVhZF9maWZvKGRldiwgcnhmcyk7CiAKIAkJcXVvdGEtLTsKIAkJcGt0cysrOwpAQCAtNDgxLDExICs1MjcsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBfX21fY2FuX2dldF9iZXJyX2NvdW50ZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgKmJlYykKK3sKKwlzdHJ1Y3QgbV9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IGVjcjsKKworCWVjciA9IG1fY2FuX3JlYWQocHJpdiwgTV9DQU5fRUNSKTsKKwliZWMtPnJ4ZXJyID0gKGVjciAmIEVDUl9SRUNfTUFTSykgPj4gRUNSX1JFQ19TSElGVDsKKwliZWMtPnR4ZXJyID0gZWNyICYgRUNSX1RFQ19NQVNLOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbV9jYW5fZ2V0X2JlcnJfY291bnRlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgKmJlYykKIHsKIAlzdHJ1Y3QgbV9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IGVjcjsKIAlpbnQgZXJyOwogCiAJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmhjbGspOwpAQCAtNDk4LDkgKzU1Niw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JZWNyID0gbV9jYW5fcmVhZChwcml2LCBNX0NBTl9FQ1IpOwotCWJlYy0+cnhlcnIgPSAoZWNyICYgRUNSX1JFQ19NQVNLKSA+PiBFQ1JfUkVDX1NISUZUOwotCWJlYy0+dHhlcnIgPSBlY3IgJiBFQ1JfVEVDX01BU0s7CisJX19tX2Nhbl9nZXRfYmVycl9jb3VudGVyKGRldiwgYmVjKTsKIAogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5jY2xrKTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+aGNsayk7CkBAIC01NDQsNyArNjAwLDcgQEAKIAlpZiAodW5saWtlbHkoIXNrYikpCiAJCXJldHVybiAwOwogCi0JbV9jYW5fZ2V0X2JlcnJfY291bnRlcihkZXYsICZiZWMpOworCV9fbV9jYW5fZ2V0X2JlcnJfY291bnRlcihkZXYsICZiZWMpOwogCiAJc3dpdGNoIChuZXdfc3RhdGUpIHsKIAljYXNlIENBTl9TVEFURV9FUlJPUl9BQ1RJVkU6CkBAIC01OTYsMTQgKzY1MiwxNCBAQAogCiAJaWYgKChwc3IgJiBQU1JfRVApICYmCiAJICAgIChwcml2LT5jYW4uc3RhdGUgIT0gQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkUpKSB7Ci0JCW5ldGRldl9kYmcoZGV2LCAiZW50ZXJlZCBlcnJvciB3YXJuaW5nIHN0YXRlXG4iKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJlbnRlcmVkIGVycm9yIHBhc3NpdmUgc3RhdGVcbiIpOwogCQl3b3JrX2RvbmUgKz0gbV9jYW5faGFuZGxlX3N0YXRlX2NoYW5nZShkZXYsCiAJCQkJCQkgICAgICAgQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkUpOwogCX0KIAogCWlmICgocHNyICYgUFNSX0JPKSAmJgogCSAgICAocHJpdi0+Y2FuLnN0YXRlICE9IENBTl9TVEFURV9CVVNfT0ZGKSkgewotCQluZXRkZXZfZGJnKGRldiwgImVudGVyZWQgZXJyb3Igd2FybmluZyBzdGF0ZVxuIik7CisJCW5ldGRldl9kYmcoZGV2LCAiZW50ZXJlZCBlcnJvciBidXMgb2ZmIHN0YXRlXG4iKTsKIAkJd29ya19kb25lICs9IG1fY2FuX2hhbmRsZV9zdGF0ZV9jaGFuZ2UoZGV2LAogCQkJCQkJICAgICAgIENBTl9TVEFURV9CVVNfT0ZGKTsKIAl9CkBAIC02MTUsNyArNjcxLDcgQEAKIHsKIAlpZiAoaXJxc3RhdHVzICYgSVJfV0RJKQogCQluZXRkZXZfZXJyKGRldiwgIk1lc3NhZ2UgUkFNIFdhdGNoZG9nIGV2ZW50IGR1ZSB0byBtaXNzaW5nIFJFQURZXG4iKTsKLQlpZiAoaXJxc3RhdHVzICYgSVJfQkVVKQorCWlmIChpcnFzdGF0dXMgJiBJUl9FTE8pCiAJCW5ldGRldl9lcnIoZGV2LCAiRXJyb3IgTG9nZ2luZyBPdmVyZmxvd1xuIik7CiAJaWYgKGlycXN0YXR1cyAmIElSX0JFVSkKIAkJbmV0ZGV2X2VycihkZXYsICJCaXQgRXJyb3IgVW5jb3JyZWN0ZWRcbiIpOwpAQCAtNzMzLDEwICs3ODksMjMgQEAKIAkuYnJwX2luYyA9IDEsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgbV9jYW5fZGF0YV9iaXR0aW1pbmdfY29uc3QgPSB7CisJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKKwkudHNlZzFfbWluID0gMiwJCS8qIFRpbWUgc2VnbWVudCAxID0gcHJvcF9zZWcgKyBwaGFzZV9zZWcxICovCisJLnRzZWcxX21heCA9IDE2LAorCS50c2VnMl9taW4gPSAxLAkJLyogVGltZSBzZWdtZW50IDIgPSBwaGFzZV9zZWcyICovCisJLnRzZWcyX21heCA9IDgsCisJLnNqd19tYXggPSA0LAorCS5icnBfbWluID0gMSwKKwkuYnJwX21heCA9IDMyLAorCS5icnBfaW5jID0gMSwKK307CisKIHN0YXRpYyBpbnQgbV9jYW5fc2V0X2JpdHRpbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQgPSAmcHJpdi0+Y2FuLmJpdHRpbWluZzsKKwljb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqZGJ0ID0gJnByaXYtPmNhbi5kYXRhX2JpdHRpbWluZzsKIAl1MTYgYnJwLCBzancsIHRzZWcxLCB0c2VnMjsKIAl1MzIgcmVnX2J0cDsKIApAQCAtNzQ3LDcgKzgxNiwxNyBAQAogCXJlZ19idHAgPSAoYnJwIDw8IEJUUl9CUlBfU0hJRlQpIHwgKHNqdyA8PCBCVFJfU0pXX1NISUZUKSB8CiAJCQkodHNlZzEgPDwgQlRSX1RTRUcxX1NISUZUKSB8ICh0c2VnMiA8PCBCVFJfVFNFRzJfU0hJRlQpOwogCW1fY2FuX3dyaXRlKHByaXYsIE1fQ0FOX0JUUCwgcmVnX2J0cCk7Ci0JbmV0ZGV2X2RiZyhkZXYsICJzZXR0aW5nIEJUUCAweCV4XG4iLCByZWdfYnRwKTsKKworCWlmIChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfRkQpIHsKKwkJYnJwID0gZGJ0LT5icnAgLSAxOworCQlzancgPSBkYnQtPnNqdyAtIDE7CisJCXRzZWcxID0gZGJ0LT5wcm9wX3NlZyArIGRidC0+cGhhc2Vfc2VnMSAtIDE7CisJCXRzZWcyID0gZGJ0LT5waGFzZV9zZWcyIC0gMTsKKwkJcmVnX2J0cCA9IChicnAgPDwgRkJUUl9GQlJQX1NISUZUKSB8IChzancgPDwgRkJUUl9GU0pXX1NISUZUKSB8CisJCQkJKHRzZWcxIDw8IEZCVFJfRlRTRUcxX1NISUZUKSB8CisJCQkJKHRzZWcyIDw8IEZCVFJfRlRTRUcyX1NISUZUKTsKKwkJbV9jYW5fd3JpdGUocHJpdiwgTV9DQU5fRkJUUCwgcmVnX2J0cCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC03NjcsOCArODQ2LDggQEAKIAogCW1fY2FuX2NvbmZpZ19lbmRpc2FibGUocHJpdiwgdHJ1ZSk7CiAKLQkvKiBSWCBCdWZmZXIvRklGTyBFbGVtZW50IFNpemUgOCBieXRlcyBkYXRhIGZpZWxkICovCi0JbV9jYW5fd3JpdGUocHJpdiwgTV9DQU5fUlhFU0MsIE1fQ0FOX1JYRVNDXzhCWVRFUyk7CisJLyogUlggQnVmZmVyL0ZJRk8gRWxlbWVudCBTaXplIDY0IGJ5dGVzIGRhdGEgZmllbGQgKi8KKwltX2Nhbl93cml0ZShwcml2LCBNX0NBTl9SWEVTQywgTV9DQU5fUlhFU0NfNjRCWVRFUyk7CiAKIAkvKiBBY2NlcHQgTm9uLW1hdGNoaW5nIEZyYW1lcyBJbnRvIEZJRk8gMCAqLwogCW1fY2FuX3dyaXRlKHByaXYsIE1fQ0FOX0dGQywgMHgwKTsKQEAgLTc3Nyw4ICs4NTYsOCBAQAogCW1fY2FuX3dyaXRlKHByaXYsIE1fQ0FOX1RYQkMsICgxIDw8IFRYQkNfTkRUQl9PRkYpIHwKIAkJICAgIHByaXYtPm1jZmdbTVJBTV9UWEJdLm9mZik7CiAKLQkvKiBvbmx5IHN1cHBvcnQgOCBieXRlcyBmaXJzdGx5ICovCi0JbV9jYW5fd3JpdGUocHJpdiwgTV9DQU5fVFhFU0MsIFRYRVNDX1RCRFNfOEJZVEVTKTsKKwkvKiBzdXBwb3J0IDY0IGJ5dGVzIHBheWxvYWQgKi8KKwltX2Nhbl93cml0ZShwcml2LCBNX0NBTl9UWEVTQywgVFhFU0NfVEJEU182NEJZVEVTKTsKIAogCW1fY2FuX3dyaXRlKHByaXYsIE1fQ0FOX1RYRUZDLCAoMSA8PCBUWEVGQ19FRlNfT0ZGKSB8CiAJCSAgICBwcml2LT5tY2ZnW01SQU1fVFhFXS5vZmYpOwpAQCAtNzkzLDcgKzg3Miw4IEBACiAJCSAgICBSWEZDX0ZXTV8xIHwgcHJpdi0+bWNmZ1tNUkFNX1JYRjFdLm9mZik7CiAKIAljY2NyID0gbV9jYW5fcmVhZChwcml2LCBNX0NBTl9DQ0NSKTsKLQljY2NyICY9IH4oQ0NDUl9URVNUIHwgQ0NDUl9NT04pOworCWNjY3IgJj0gfihDQ0NSX1RFU1QgfCBDQ0NSX01PTiB8IChDQ0NSX0NNUl9NQVNLIDw8IENDQ1JfQ01SX1NISUZUKSB8CisJCShDQ0NSX0NNRV9NQVNLIDw8IENDQ1JfQ01FX1NISUZUKSk7CiAJdGVzdCA9IG1fY2FuX3JlYWQocHJpdiwgTV9DQU5fVEVTVCk7CiAJdGVzdCAmPSB+VEVTVF9MQkNLOwogCkBAIC04MDUsNiArODg1LDkgQEAKIAkJdGVzdCB8PSBURVNUX0xCQ0s7CiAJfQogCisJaWYgKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9GRCkKKwkJY2NjciB8PSBDQ0NSX0NNRV9DQU5GRF9CUlMgPDwgQ0NDUl9DTUVfU0hJRlQ7CisKIAltX2Nhbl93cml0ZShwcml2LCBNX0NBTl9DQ0NSLCBjY2NyKTsKIAltX2Nhbl93cml0ZShwcml2LCBNX0NBTl9URVNULCB0ZXN0KTsKIApAQCAtODY5LDExICs5NTIsMTMgQEAKIAogCXByaXYtPmRldiA9IGRldjsKIAlwcml2LT5jYW4uYml0dGltaW5nX2NvbnN0ID0gJm1fY2FuX2JpdHRpbWluZ19jb25zdDsKKwlwcml2LT5jYW4uZGF0YV9iaXR0aW1pbmdfY29uc3QgPSAmbV9jYW5fZGF0YV9iaXR0aW1pbmdfY29uc3Q7CiAJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gbV9jYW5fc2V0X21vZGU7CiAJcHJpdi0+Y2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBtX2Nhbl9nZXRfYmVycl9jb3VudGVyOwogCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfTE9PUEJBQ0sgfAogCQkJCQlDQU5fQ1RSTE1PREVfTElTVEVOT05MWSB8Ci0JCQkJCUNBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORzsKKwkJCQkJQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HIHwKKwkJCQkJQ0FOX0NUUkxNT0RFX0ZEOwogCiAJcmV0dXJuIGRldjsKIH0KQEAgLTk1Niw4ICsxMDQxLDkgQEAKIAkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbV9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKLQl1MzIgaWQ7CisJc3RydWN0IGNhbmZkX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItPmRhdGE7CisJdTMyIGlkLCBjY2NyOworCWludCBpOwogCiAJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKGRldiwgc2tiKSkKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTk3NiwxMSArMTA2MiwyOCBAQAogCiAJLyogbWVzc2FnZSByYW0gY29uZmlndXJhdGlvbiAqLwogCW1fY2FuX2ZpZm9fd3JpdGUocHJpdiwgMCwgTV9DQU5fRklGT19JRCwgaWQpOwotCW1fY2FuX2ZpZm9fd3JpdGUocHJpdiwgMCwgTV9DQU5fRklGT19ETEMsIGNmLT5jYW5fZGxjIDw8IDE2KTsKLQltX2Nhbl9maWZvX3dyaXRlKHByaXYsIDAsIE1fQ0FOX0ZJRk9fREFUQSgwKSwgKih1MzIgKikoY2YtPmRhdGEgKyAwKSk7Ci0JbV9jYW5fZmlmb193cml0ZShwcml2LCAwLCBNX0NBTl9GSUZPX0RBVEEoMSksICoodTMyICopKGNmLT5kYXRhICsgNCkpOworCW1fY2FuX2ZpZm9fd3JpdGUocHJpdiwgMCwgTV9DQU5fRklGT19ETEMsIGNhbl9sZW4yZGxjKGNmLT5sZW4pIDw8IDE2KTsKKworCWZvciAoaSA9IDA7IGkgPCBjZi0+bGVuOyBpICs9IDQpCisJCW1fY2FuX2ZpZm9fd3JpdGUocHJpdiwgMCwgTV9DQU5fRklGT19EQVRBKGkgLyA0KSwKKwkJCQkgKih1MzIgKikoY2YtPmRhdGEgKyBpKSk7CisKIAljYW5fcHV0X2VjaG9fc2tiKHNrYiwgZGV2LCAwKTsKIAorCWlmIChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfRkQpIHsKKwkJY2NjciA9IG1fY2FuX3JlYWQocHJpdiwgTV9DQU5fQ0NDUik7CisJCWNjY3IgJj0gfihDQ0NSX0NNUl9NQVNLIDw8IENDQ1JfQ01SX1NISUZUKTsKKwkJaWYgKGNhbl9pc19jYW5mZF9za2Ioc2tiKSkgeworCQkJaWYgKGNmLT5mbGFncyAmIENBTkZEX0JSUykKKwkJCQljY2NyIHw9IENDQ1JfQ01SX0NBTkZEX0JSUyA8PCBDQ0NSX0NNUl9TSElGVDsKKwkJCWVsc2UKKwkJCQljY2NyIHw9IENDQ1JfQ01SX0NBTkZEIDw8IENDQ1JfQ01SX1NISUZUOworCQl9IGVsc2UgeworCQkJY2NjciB8PSBDQ0NSX0NNUl9DQU4gPDwgQ0NDUl9DTVJfU0hJRlQ7CisJCX0KKwkJbV9jYW5fd3JpdGUocHJpdiwgTV9DQU5fQ0NDUiwgY2Njcik7CisJfQorCiAJLyogZW5hYmxlIGZpcnN0IFRYIGJ1ZmZlciB0byBzdGFydCB0cmFuc2ZlciAgKi8KIAltX2Nhbl93cml0ZShwcml2LCBNX0NBTl9UWEJUSUUsIDB4MSk7CiAJbV9jYW5fd3JpdGUocHJpdiwgTV9DQU5fVFhCQVIsIDB4MSk7CkBAIC05OTIsNiArMTA5NSw3IEBACiAJLm5kb19vcGVuID0gbV9jYW5fb3BlbiwKIAkubmRvX3N0b3AgPSBtX2Nhbl9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQgPSBtX2Nhbl9zdGFydF94bWl0LAorCS5uZG9fY2hhbmdlX210dSA9IGNhbl9jaGFuZ2VfbXR1LAogfTsKIAogc3RhdGljIGludCByZWdpc3Rlcl9tX2Nhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEwMDksNyArMTExMyw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCXUzMiBvdXRfdmFsW01SQU1fQ0ZHX0xFTl07Ci0JaW50IHJldDsKKwlpbnQgaSwgc3RhcnQsIGVuZCwgcmV0OwogCiAJLyogbWVzc2FnZSByYW0gY291bGQgYmUgc2hhcmVkICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgIm1lc3NhZ2VfcmFtIik7CkBAIC0xMDYwLDYgKzExNjQsMTUgQEAKIAkJcHJpdi0+bWNmZ1tNUkFNX1RYRV0ub2ZmLCBwcml2LT5tY2ZnW01SQU1fVFhFXS5udW0sCiAJCXByaXYtPm1jZmdbTVJBTV9UWEJdLm9mZiwgcHJpdi0+bWNmZ1tNUkFNX1RYQl0ubnVtKTsKIAorCS8qIGluaXRpYWxpemUgdGhlIGVudGlyZSBNZXNzYWdlIFJBTSBpbiB1c2UgdG8gYXZvaWQgcG9zc2libGUKKwkgKiBFQ0MvcGFyaXR5IGNoZWNrc3VtIGVycm9ycyB3aGVuIHJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBidWZmZXIKKwkgKi8KKwlzdGFydCA9IHByaXYtPm1jZmdbTVJBTV9TSURGXS5vZmY7CisJZW5kID0gcHJpdi0+bWNmZ1tNUkFNX1RYQl0ub2ZmICsKKwkJcHJpdi0+bWNmZ1tNUkFNX1RYQl0ubnVtICogVFhCX0VMRU1FTlRfU0laRTsKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSA0KQorCQl3cml0ZWwoMHgwLCBwcml2LT5tcmFtX2Jhc2UgKyBpKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcmNhcl9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9yY2FyX2Nhbi5jCmluZGV4IDFhYmUxMzMuLjk3MTgyNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yY2FyX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9yY2FyX2Nhbi5jCkBAIC02MjgsNiArNjI4LDcgQEAKIAkubmRvX29wZW4gPSByY2FyX2Nhbl9vcGVuLAogCS5uZG9fc3RvcCA9IHJjYXJfY2FuX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdCA9IHJjYXJfY2FuX3N0YXJ0X3htaXQsCisJLm5kb19jaGFuZ2VfbXR1ID0gY2FuX2NoYW5nZV9tdHUsCiB9OwogCiBzdGF0aWMgdm9pZCByY2FyX2Nhbl9yeF9wa3Qoc3RydWN0IHJjYXJfY2FuX3ByaXYgKnByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9rdmFzZXJfcGNpLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9rdmFzZXJfcGNpLmMKaW5kZXggOGZmMzQyNC4uMTVjMDBmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAva3Zhc2VyX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2t2YXNlcl9wY2kuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2OwogCXN0cnVjdCBrdmFzZXJfcGNpICpib2FyZDsKLQlpbnQgZXJyLCBpbml0X3N0ZXA7CisJaW50IGVycjsKIAogCWRldiA9IGFsbG9jX3NqYTEwMDBkZXYoc2l6ZW9mKHN0cnVjdCBrdmFzZXJfcGNpKSk7CiAJaWYgKGRldiA9PSBOVUxMKQpAQCAtMjM1LDcgKzIzNSw2IEBACiAJaWYgKGNoYW5uZWwgPT0gMCkgewogCQlib2FyZC0+eGlsaW54X3ZlciA9CiAJCQlpb3JlYWQ4KGJvYXJkLT5yZXNfYWRkciArIFhJTElOWF9WRVJJTlQpID4+IDQ7Ci0JCWluaXRfc3RlcCA9IDI7CiAKIAkJLyogQXNzZXJ0IFBUQURSIyAtIHdlJ3JlIGluIHBhc3NpdmUgbW9kZSBzbyB0aGUgb3RoZXIgYml0cyBhcmUKIAkJICAgbm90IGltcG9ydGFudCAqLwpAQCAtMjY0LDggKzI2Myw2IEBACiAJcHJpdi0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKLQlpbml0X3N0ZXAgPSA0OwotCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlZ19iYXNlPSVwIGNvbmZfYWRkcj0lcCBpcnE9JWRcbiIsCiAJCSBwcml2LT5yZWdfYmFzZSwgYm9hcmQtPmNvbmZfYWRkciwgZGV2LT5pcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Vtc191c2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCmluZGV4IDAwZjI1MzQuLjI5ZDNmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCkBAIC00MzQsMTAgKzQzNCw5IEBACiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IENQQ19IRUFERVJfU0laRSkgewogCQlzdHJ1Y3QgZW1zX2NwY19tc2cgKm1zZzsKIAkJdTggKmlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQkJdTggbXNnX2NvdW50LCBhZ2Fpbiwgc3RhcnQ7CisJCXU4IG1zZ19jb3VudCwgc3RhcnQ7CiAKIAkJbXNnX2NvdW50ID0gaWJ1ZlswXSAmIH4weDgwOwotCQlhZ2FpbiA9IGlidWZbMF0gJiAweDgwOwogCiAJCXN0YXJ0ID0gQ1BDX0hFQURFUl9TSVpFOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2VzZF91c2IyLmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2VzZF91c2IyLmMKaW5kZXggYjdjOWU4Yi4uYzA2M2E1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lc2RfdXNiMi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZXNkX3VzYjIuYwpAQCAtNDY0LDcgKzQ2NCw2IEBACiB7CiAJc3RydWN0IGVzZF90eF91cmJfY29udGV4dCAqY29udGV4dCA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXY7Ci0Jc3RydWN0IGVzZF91c2IyICpkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZXNkX3VzYjJfbXNnKTsKIApAQCAtNDcyLDcgKzQ3MSw2IEBACiAKIAlwcml2ID0gY29udGV4dC0+cHJpdjsKIAluZXRkZXYgPSBwcml2LT5uZXRkZXY7Ci0JZGV2ID0gcHJpdi0+dXNiMjsKIAogCS8qIGZyZWUgdXAgb3VyIGFsbG9jYXRlZCBidWZmZXIgKi8KIAl1c2JfZnJlZV9jb2hlcmVudCh1cmItPmRldiwgc2l6ZSwKQEAgLTExNDMsNiArMTE0MSw3IEBACiAJCQl9CiAJCX0KIAkJdW5saW5rX2FsbF91cmJzKGRldik7CisJCWtmcmVlKGRldik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2dzX3VzYi5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9nc191c2IuYwppbmRleCAwNGIwZjg0Li4wMDlhY2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2dzX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZ3NfdXNiLmMKQEAgLTcxOCw2ICs3MTgsNyBAQAogCS5uZG9fb3BlbiA9IGdzX2Nhbl9vcGVuLAogCS5uZG9fc3RvcCA9IGdzX2Nhbl9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQgPSBnc19jYW5fc3RhcnRfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUgPSBjYW5fY2hhbmdlX210dSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ3NfY2FuICpnc19tYWtlX2NhbmRldih1bnNpZ25lZCBpbnQgY2hhbm5lbCwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4veGlsaW54X2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3hpbGlueF9jYW4uYwppbmRleCA1ZThiNTYwLi44YTk5OGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4veGlsaW54X2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi94aWxpbnhfY2FuLmMKQEAgLTMwMCw3ICszMDAsOCBAQAogc3RhdGljIGludCB4Y2FuX2NoaXBfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwotCXUzMiBlcnIsIHJlZ19tc3IsIHJlZ19zcl9tYXNrOworCXUzMiByZWdfbXNyLCByZWdfc3JfbWFzazsKKwlpbnQgZXJyOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAogCS8qIENoZWNrIGlmIGl0IGlzIGluIHJlc2V0IG1vZGUgKi8KQEAgLTk2MSw2ICs5NjIsNyBAQAogCS5uZG9fb3Blbgk9IHhjYW5fb3BlbiwKIAkubmRvX3N0b3AJPSB4Y2FuX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAk9IHhjYW5fc3RhcnRfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJPSBjYW5fY2hhbmdlX210dSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYyBiL2RyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMKaW5kZXggYjk2MjU5Ni4uNGY0YzJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYworKysgYi9kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jCkBAIC0zNzcsNiArMzc3LDI5IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaW50IGJjbV9zZjJfc3dfcnN0KHN0cnVjdCBiY21fc2YyX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAxMDAwOworCXUzMiByZWc7CisKKwlyZWcgPSBjb3JlX3JlYWRsKHByaXYsIENPUkVfV0FUQ0hET0dfQ1RSTCk7CisJcmVnIHw9IFNPRlRXQVJFX1JFU0VUIHwgRU5fQ0hJUF9SU1QgfCBFTl9TV19SRVNFVDsKKwljb3JlX3dyaXRlbChwcml2LCByZWcsIENPUkVfV0FUQ0hET0dfQ1RSTCk7CisKKwlkbyB7CisJCXJlZyA9IGNvcmVfcmVhZGwocHJpdiwgQ09SRV9XQVRDSERPR19DVFJMKTsKKwkJaWYgKCEocmVnICYgU09GVFdBUkVfUkVTRVQpKQorCQkJYnJlYWs7CisKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCX0gd2hpbGUgKHRpbWVvdXQtLSA+IDApOworCisJaWYgKHRpbWVvdXQgPT0gMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBiY21fc2YyX3N3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAljb25zdCBjaGFyICpyZWdfbmFtZXNbQkNNX1NGMl9SRUdTX05VTV0gPSBCQ01fU0YyX1JFR1NfTkFNRTsKQEAgLTQwNCwxMSArNDI3LDE4IEBACiAJCSpiYXNlID0gb2ZfaW9tYXAoZG4sIGkpOwogCQlpZiAoKmJhc2UgPT0gTlVMTCkgewogCQkJcHJfZXJyKCJ1bmFibGUgdG8gZmluZCByZWdpc3RlcjogJXNcbiIsIHJlZ19uYW1lc1tpXSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF91bm1hcDsKIAkJfQogCQliYXNlKys7CiAJfQogCisJcmV0ID0gYmNtX3NmMl9zd19yc3QocHJpdik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInVuYWJsZSB0byBzb2Z0d2FyZSByZXNldCBzd2l0Y2g6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dF91bm1hcDsKKwl9CisKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCByZXF1ZXN0IHRoZW0gKi8KIAlpbnRybDJfMF93cml0ZWwocHJpdiwgMHhmZmZmZmZmZiwgSU5UUkwyX0NQVV9NQVNLX1NFVCk7CiAJaW50cmwyXzBfd3JpdGVsKHByaXYsIDB4ZmZmZmZmZmYsIElOVFJMMl9DUFVfQ0xFQVIpOwpAQCAtNDg0LDcgKzUxNCw4IEBACiBvdXRfdW5tYXA6CiAJYmFzZSA9ICZwcml2LT5jb3JlOwogCWZvciAoaSA9IDA7IGkgPCBCQ01fU0YyX1JFR1NfTlVNOyBpKyspIHsKLQkJaW91bm1hcCgqYmFzZSk7CisJCWlmICgqYmFzZSkKKwkJCWlvdW5tYXAoKmJhc2UpOwogCQliYXNlKys7CiAJfQogCXJldHVybiByZXQ7CkBAIC03MzMsMjkgKzc2NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmNtX3NmMl9zd19yc3Qoc3RydWN0IGJjbV9zZjJfcHJpdiAqcHJpdikKLXsKLQl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDEwMDA7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGNvcmVfcmVhZGwocHJpdiwgQ09SRV9XQVRDSERPR19DVFJMKTsKLQlyZWcgfD0gU09GVFdBUkVfUkVTRVQgfCBFTl9DSElQX1JTVCB8IEVOX1NXX1JFU0VUOwotCWNvcmVfd3JpdGVsKHByaXYsIHJlZywgQ09SRV9XQVRDSERPR19DVFJMKTsKLQotCWRvIHsKLQkJcmVnID0gY29yZV9yZWFkbChwcml2LCBDT1JFX1dBVENIRE9HX0NUUkwpOwotCQlpZiAoIShyZWcgJiBTT0ZUV0FSRV9SRVNFVCkpCi0JCQlicmVhazsKLQotCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Ci0JfSB3aGlsZSAodGltZW91dC0tID4gMCk7Ci0KLQlpZiAodGltZW91dCA9PSAwKQotCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGJjbV9zZjJfc3dfcmVzdW1lKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3QgYmNtX3NmMl9wcml2ICpwcml2ID0gZHNfdG9fcHJpdihkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYwppbmRleCA2M2VhMTk0Li43YmE4M2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMKQEAgLTU3NSwxMCArNTc1LDI0IEBACiAJeGdlbmVfZW5ldF93cl9tY3hfbWFjKHBkYXRhLCBNQUNfQ09ORklHXzFfQUREUiwgZGF0YSAmIH5UWF9FTik7CiB9CiAKLXN0YXRpYyB2b2lkIHhnZW5lX2VuZXRfcmVzZXQoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKQorYm9vbCB4Z2VuZV9yaW5nX21ncl9pbml0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwKQoreworCWlmICghaW9yZWFkMzIocC0+cmluZ19jc3JfYWRkciArIENMS0VOX0FERFIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoaW9yZWFkMzIocC0+cmluZ19jc3JfYWRkciArIFNSU1RfQUREUikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHhnZW5lX2VuZXRfcmVzZXQoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKQogewogCXUzMiB2YWw7CiAKKwlpZiAoIXhnZW5lX3JpbmdfbWdyX2luaXQocGRhdGEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWNsa19wcmVwYXJlX2VuYWJsZShwZGF0YS0+Y2xrKTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUocGRhdGEtPmNsayk7CiAJY2xrX3ByZXBhcmVfZW5hYmxlKHBkYXRhLT5jbGspOwpAQCAtNTkwLDYgKzYwNCw4IEBACiAJdmFsIHw9IFNDQU5fQVVUT19JTkNSOwogCU1HTVRfQ0xPQ0tfU0VMX1NFVCgmdmFsLCAxKTsKIAl4Z2VuZV9lbmV0X3dyX21jeF9tYWMocGRhdGEsIE1JSV9NR01UX0NPTkZJR19BRERSLCB2YWwpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHhnZW5lX2dwb3J0X3NodXRkb3duKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5oCmluZGV4IDM4NTU4NTguLmVjNDVmMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuaApAQCAtMTA0LDYgKzEwNCw5IEBACiAjZGVmaW5lIEJMT0NLX0VUSF9NQUNfT0ZGU0VUCQkweDAwMDAKICNkZWZpbmUgQkxPQ0tfRVRIX01BQ19DU1JfT0ZGU0VUCTB4MjgwMAogCisjZGVmaW5lIENMS0VOX0FERFIJCQkweGMyMDgKKyNkZWZpbmUgU1JTVF9BRERSCQkJMHhjMjAwCisKICNkZWZpbmUgTUFDX0FERFJfUkVHX09GRlNFVAkJMHgwMAogI2RlZmluZSBNQUNfQ09NTUFORF9SRUdfT0ZGU0VUCQkweDA0CiAjZGVmaW5lIE1BQ19XUklURV9SRUdfT0ZGU0VUCQkweDA4CkBAIC0zMTgsNiArMzIxLDcgQEAKIAogaW50IHhnZW5lX2VuZXRfbWRpb19jb25maWcoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKTsKIHZvaWQgeGdlbmVfZW5ldF9tZGlvX3JlbW92ZShzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpOworYm9vbCB4Z2VuZV9yaW5nX21ncl9pbml0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwKTsKIAogZXh0ZXJuIHN0cnVjdCB4Z2VuZV9tYWNfb3BzIHhnZW5lX2dtYWNfb3BzOwogZXh0ZXJuIHN0cnVjdCB4Z2VuZV9wb3J0X29wcyB4Z2VuZV9ncG9ydF9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMKaW5kZXggM2MyMDhjYy4uMTIzNjY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYwpAQCAtNjM5LDkgKzYzOSw5IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gbmRldl90b19kZXYobmRldik7CiAJc3RydWN0IHhnZW5lX2VuZXRfZGVzY19yaW5nICpyeF9yaW5nLCAqdHhfcmluZywgKmNwX3Jpbmc7CiAJc3RydWN0IHhnZW5lX2VuZXRfZGVzY19yaW5nICpidWZfcG9vbCA9IE5VTEw7Ci0JdTggY3B1X2J1Zm51bSA9IDAsIGV0aF9idWZudW0gPSAwOwotCXU4IGJwX2J1Zm51bSA9IDB4MjA7Ci0JdTE2IHJpbmdfaWQsIHJpbmdfbnVtID0gMDsKKwl1OCBjcHVfYnVmbnVtID0gMCwgZXRoX2J1Zm51bSA9IFNUQVJUX0VUSF9CVUZOVU07CisJdTggYnBfYnVmbnVtID0gU1RBUlRfQlBfQlVGTlVNOworCXUxNiByaW5nX2lkLCByaW5nX251bSA9IFNUQVJUX1JJTkdfTlVNOwogCWludCByZXQ7CiAKIAkvKiBhbGxvY2F0ZSByeCBkZXNjcmlwdG9yIHJpbmcgKi8KQEAgLTg1Miw3ICs4NTIsOSBAQAogCXUxNiBkc3RfcmluZ19udW07CiAJaW50IHJldDsKIAotCXBkYXRhLT5wb3J0X29wcy0+cmVzZXQocGRhdGEpOworCXJldCA9IHBkYXRhLT5wb3J0X29wcy0+cmVzZXQocGRhdGEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlyZXQgPSB4Z2VuZV9lbmV0X2NyZWF0ZV9kZXNjX3JpbmdzKG5kZXYpOwogCWlmIChyZXQpIHsKQEAgLTk1NCw2ICs5NTYsNyBAQAogCiAJcmV0dXJuIHJldDsKIGVycjoKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKIAlmcmVlX25ldGRldihuZGV2KTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5oCmluZGV4IDg3NGU1YTAuLmY5OTU4ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmgKQEAgLTM4LDYgKzM4LDkgQEAKICNkZWZpbmUgU0tCX0JVRkZFUl9TSVpFCQkoWEdFTkVfRU5FVF9NQVhfTVRVIC0gTkVUX0lQX0FMSUdOKQogI2RlZmluZSBOVU1fUEtUX0JVRgk2NAogI2RlZmluZSBOVU1fQlVGUE9PTAkzMgorI2RlZmluZSBTVEFSVF9FVEhfQlVGTlVNCTIKKyNkZWZpbmUgU1RBUlRfQlBfQlVGTlVNCQkweDIyCisjZGVmaW5lIFNUQVJUX1JJTkdfTlVNCQk4CiAKICNkZWZpbmUgUEhZX1BPTExfTElOS19PTgkoMTAgKiBIWikKICNkZWZpbmUgUEhZX1BPTExfTElOS19PRkYJKFBIWV9QT0xMX0xJTktfT04gLyA1KQpAQCAtODMsNyArODYsNyBAQAogfTsKIAogc3RydWN0IHhnZW5lX3BvcnRfb3BzIHsKLQl2b2lkICgqcmVzZXQpKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSk7CisJaW50ICgqcmVzZXQpKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSk7CiAJdm9pZCAoKmNsZV9ieXBhc3MpKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSwKIAkJCSAgIHUzMiBkc3RfcmluZ19udW0sIHUxNiBidWZwb29sX2lkKTsKIAl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9zZ21hYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfc2dtYWMuYwppbmRleCBjMjJmMzI2Li5mNWQ0ZjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9zZ21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3NnbWFjLmMKQEAgLTMxMSwxNCArMzExLDE5IEBACiAJeGdlbmVfc2dtYWNfcnh0eChwLCBUWF9FTiwgZmFsc2UpOwogfQogCi1zdGF0aWMgdm9pZCB4Z2VuZV9lbmV0X3Jlc2V0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwKQorc3RhdGljIGludCB4Z2VuZV9lbmV0X3Jlc2V0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwKQogeworCWlmICgheGdlbmVfcmluZ19tZ3JfaW5pdChwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAljbGtfcHJlcGFyZV9lbmFibGUocC0+Y2xrKTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUocC0+Y2xrKTsKIAljbGtfcHJlcGFyZV9lbmFibGUocC0+Y2xrKTsKIAogCXhnZW5lX2VuZXRfZWNjX2luaXQocCk7CiAJeGdlbmVfZW5ldF9jb25maWdfcmluZ19pZl9hc3NvYyhwKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB4Z2VuZV9lbmV0X2NsZV9ieXBhc3Moc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYwppbmRleCA2N2QwNzIwLi5hMThhOWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmMKQEAgLTI1MiwxNCArMjUyLDE5IEBACiAJeGdlbmVfZW5ldF93cl9tYWMocGRhdGEsIEFYR01BQ19DT05GSUdfMSwgZGF0YSAmIH5IU1RURkVOKTsKIH0KIAotc3RhdGljIHZvaWQgeGdlbmVfZW5ldF9yZXNldChzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpCitzdGF0aWMgaW50IHhnZW5lX2VuZXRfcmVzZXQoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKQogeworCWlmICgheGdlbmVfcmluZ19tZ3JfaW5pdChwZGF0YSkpCisJCXJldHVybiAtRU5PREVWOworCiAJY2xrX3ByZXBhcmVfZW5hYmxlKHBkYXRhLT5jbGspOwogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwZGF0YS0+Y2xrKTsKIAljbGtfcHJlcGFyZV9lbmFibGUocGRhdGEtPmNsayk7CiAKIAl4Z2VuZV9lbmV0X2VjY19pbml0KHBkYXRhKTsKIAl4Z2VuZV9lbmV0X2NvbmZpZ19yaW5nX2lmX2Fzc29jKHBkYXRhKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB4Z2VuZV9lbmV0X3hnY2xlX2J5cGFzcyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMKaW5kZXggM2E2Nzc4YS4uNTMxYmI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtc3lzcG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYwpAQCAtMTExMCw3ICsxMTEwLDggQEAKIAkvKiBXZSBqdXN0IG5lZWQgb25lIERNQSBkZXNjcmlwdG9yIHdoaWNoIGlzIERNQS1hYmxlLCBzaW5jZSB3cml0aW5nIHRvCiAJICogdGhlIHBvcnQgd2lsbCBhbGxvY2F0ZSBhIG5ldyBkZXNjcmlwdG9yIGluIGl0cyBpbnRlcm5hbCBsaW5rZWQtbGlzdAogCSAqLwotCXAgPSBkbWFfemFsbG9jX2NvaGVyZW50KGtkZXYsIDEsICZyaW5nLT5kZXNjX2RtYSwgR0ZQX0tFUk5FTCk7CisJcCA9IGRtYV96YWxsb2NfY29oZXJlbnQoa2Rldiwgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYyksICZyaW5nLT5kZXNjX2RtYSwKKwkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIXApIHsKIAkJbmV0aWZfZXJyKHByaXYsIGh3LCBwcml2LT5uZXRkZXYsICJETUEgYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMTc0LDYgKzExNzUsMTMgQEAKIAlpZiAoIShyZWcgJiBURE1BX0RJU0FCTEVEKSkKIAkJbmV0ZGV2X3dhcm4ocHJpdi0+bmV0ZGV2LCAiVERNQSBub3Qgc3RvcHBlZCFcbiIpOwogCisJLyogcmluZy0+Y2JzIGlzIHRoZSBsYXN0IHBhcnQgaW4gYmNtX3N5c3BvcnRfaW5pdF90eF9yaW5nIHdoaWNoIGNvdWxkCisJICogZmFpbCwgc28gYnkgY2hlY2tpbmcgdGhpcyBwb2ludGVyIHdlIGtub3cgd2hldGhlciB0aGUgVFggcmluZyB3YXMKKwkgKiBmdWxseSBpbml0aWFsaXplZCBvciBub3QuCisJICovCisJaWYgKCFyaW5nLT5jYnMpCisJCXJldHVybjsKKwogCW5hcGlfZGlzYWJsZSgmcmluZy0+bmFwaSk7CiAJbmV0aWZfbmFwaV9kZWwoJnJpbmctPm5hcGkpOwogCkBAIC0xMTgzLDcgKzExOTEsOCBAQAogCXJpbmctPmNicyA9IE5VTEw7CiAKIAlpZiAocmluZy0+ZGVzY19kbWEpIHsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoa2RldiwgMSwgcmluZy0+ZGVzY19jcHUsIHJpbmctPmRlc2NfZG1hKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoa2Rldiwgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYyksCisJCQkJICByaW5nLT5kZXNjX2NwdSwgcmluZy0+ZGVzY19kbWEpOwogCQlyaW5nLT5kZXNjX2RtYSA9IDA7CiAJfQogCXJpbmctPnNpemUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMKaW5kZXggZmRjOWVjMC4uZGExYTI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jCkBAIC0yMTQwLDYgKzIxNDAsMTIgQEAKIAkJZ290byBlcnJfaXJxMDsKIAl9CiAKKwkvKiBSZS1jb25maWd1cmUgdGhlIHBvcnQgbXVsdGlwbGV4ZXIgdG93YXJkcyB0aGUgUEhZIGRldmljZSAqLworCWJjbWdlbmV0X21paV9jb25maWcocHJpdi0+ZGV2LCBmYWxzZSk7CisKKwlwaHlfY29ubmVjdF9kaXJlY3QoZGV2LCBwcml2LT5waHlkZXYsIGJjbWdlbmV0X21paV9zZXR1cCwKKwkJCSAgIHByaXYtPnBoeV9pbnRlcmZhY2UpOworCiAJYmNtZ2VuZXRfbmV0aWZfc3RhcnQoZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMjE4NCw2ICsyMTkwLDkgQEAKIAogCWJjbWdlbmV0X25ldGlmX3N0b3AoZGV2KTsKIAorCS8qIFJlYWxseSBraWxsIHRoZSBQSFkgc3RhdGUgbWFjaGluZSBhbmQgZGlzY29ubmVjdCBmcm9tIGl0ICovCisJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5ZGV2KTsKKwogCS8qIERpc2FibGUgTUFDIHJlY2VpdmUgKi8KIAl1bWFjX2VuYWJsZV9zZXQocHJpdiwgQ01EX1JYX0VOLCBmYWxzZSk7CiAKQEAgLTI2ODUsNyArMjY5NCw3IEBACiAKIAlwaHlfaW5pdF9odyhwcml2LT5waHlkZXYpOwogCS8qIFNwZWVkIHNldHRpbmdzIG11c3QgYmUgcmVzdG9yZWQgKi8KLQliY21nZW5ldF9taWlfY29uZmlnKHByaXYtPmRldik7CisJYmNtZ2VuZXRfbWlpX2NvbmZpZyhwcml2LT5kZXYsIGZhbHNlKTsKIAogCS8qIGRpc2FibGUgZXRoZXJuZXQgTUFDIHdoaWxlIHVwZGF0aW5nIGl0cyByZWdpc3RlcnMgKi8KIAl1bWFjX2VuYWJsZV9zZXQocHJpdiwgQ01EX1RYX0VOIHwgQ01EX1JYX0VOLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuaAppbmRleCBkYmY1MjRlLi4zMWIyZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmgKQEAgLTYxNyw5ICs2MTcsMTAgQEAKIAogLyogTURJTyByb3V0aW5lcyAqLwogaW50IGJjbWdlbmV0X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgYmNtZ2VuZXRfbWlpX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIGluaXQpOwogdm9pZCBiY21nZW5ldF9taWlfZXhpdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgYmNtZ2VuZXRfbWlpX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBiY21nZW5ldF9taWlfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIFdha2Utb24tTEFOIHJvdXRpbmVzICovCiB2b2lkIGJjbWdlbmV0X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMKaW5kZXggOWZmNzk5YS4uOTMzY2Q3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMKQEAgLTc3LDcgKzc3LDcgQEAKIC8qIHNldHVwIG5ldGRldiBsaW5rIHN0YXRlIHdoZW4gUEhZIGxpbmsgc3RhdHVzIGNoYW5nZSBhbmQKICAqIHVwZGF0ZSBVTUFDIGFuZCBSR01JSSBibG9jayB3aGVuIGxpbmsgdXAKICAqLwotc3RhdGljIHZvaWQgYmNtZ2VuZXRfbWlpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit2b2lkIGJjbWdlbmV0X21paV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi0+cGh5ZGV2OwpAQCAtMjExLDcgKzIxMSw3IEBACiAJYmNtZ2VuZXRfc3lzX3dyaXRlbChwcml2LCByZWcsIFNZU19QT1JUX0NUUkwpOwogfQogCi1pbnQgYmNtZ2VuZXRfbWlpX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KQogewogCXN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi0+cGh5ZGV2OwpAQCAtMjk4LDcgKzI5OCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRldl9pbmZvKGtkZXYsICJjb25maWd1cmluZyBpbnN0YW5jZSBmb3IgJXNcbiIsIHBoeV9uYW1lKTsKKwlpZiAoaW5pdCkKKwkJZGV2X2luZm8oa2RldiwgImNvbmZpZ3VyaW5nIGluc3RhbmNlIGZvciAlc1xuIiwgcGh5X25hbWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTAsNyArMzUxLDcgQEAKIAkgKiBQSFkgc3BlZWQgd2hpY2ggaXMgbmVlZGVkIGZvciBiY21nZW5ldF9taWlfY29uZmlnKCkgdG8gY29uZmlndXJlCiAJICogdGhpbmdzIGFwcHJvcHJpYXRlbHkuCiAJICovCi0JcmV0ID0gYmNtZ2VuZXRfbWlpX2NvbmZpZyhkZXYpOworCXJldCA9IGJjbWdlbmV0X21paV9jb25maWcoZGV2LCB0cnVlKTsKIAlpZiAocmV0KSB7CiAJCXBoeV9kaXNjb25uZWN0KHByaXYtPnBoeWRldik7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jCmluZGV4IGRiYjQxYzEuLjc3ZjhmODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jCkBAIC04NTYzLDcgKzg1NjMsOCBAQAogCQlpZiAodG5hcGktPnJ4X3JjYikKIAkJCW1lbXNldCh0bmFwaS0+cnhfcmNiLCAwLCBURzNfUlhfUkNCX1JJTkdfQllURVModHApKTsKIAotCQlpZiAodGczX3J4X3Byb2RyaW5nX2FsbG9jKHRwLCAmdG5hcGktPnByb2RyaW5nKSkgeworCQlpZiAodG5hcGktPnByb2RyaW5nLnJ4X3N0ZCAmJgorCQkgICAgdGczX3J4X3Byb2RyaW5nX2FsbG9jKHRwLCAmdG5hcGktPnByb2RyaW5nKSkgewogCQkJdGczX2ZyZWVfcmluZ3ModHApOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZwppbmRleCA5ZTA4OWQyLi4zNTY0ZmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnCkBAIC0yMiw3ICsyMiw3IEBACiAKIGNvbmZpZyBBUk1fQVQ5MV9FVEhFUgogCXRyaXN0YXRlICJBVDkxUk05MjAwIEV0aGVybmV0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBIQVNfRE1BICYmIChBUkNIX0FUOTFSTTkyMDAgfHwgQ09NUElMRV9URVNUKQorCWRlcGVuZHMgb24gSEFTX0RNQSAmJiAoQVJDSF9BVDkxIHx8IENPTVBJTEVfVEVTVCkKIAlzZWxlY3QgTUFDQgogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYSBrZXJuZWwgZm9yIHRoZSBBVDkxUk05MjAwIGFuZCBlbmFibGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGNiLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RjYi5jCmluZGV4IDZmZTMwMGUuLjRmZTMzNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGNiLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kY2IuYwpAQCAtNzksOCArNzksOSBAQAogCQlhcHAucHJvdG9jb2wgPSBkY2ItPmFwcF9wcmlvcml0eVtpXS5wcm90b2NvbGlkOwogCiAJCWlmIChkY2ItPmRjYl92ZXJzaW9uID09IEZXX1BPUlRfRENCX1ZFUl9JRUVFKSB7CisJCQlhcHAucHJpb3JpdHkgPSBkY2ItPmFwcF9wcmlvcml0eVtpXS51c2VyX3ByaW9fbWFwOwogCQkJYXBwLnNlbGVjdG9yID0gZGNiLT5hcHBfcHJpb3JpdHlbaV0uc2VsX2ZpZWxkICsgMTsKLQkJCWVyciA9IGRjYl9pZWVlX3NldGFwcChkZXYsICZhcHApOworCQkJZXJyID0gZGNiX2llZWVfZGVsYXBwKGRldiwgJmFwcCk7CiAJCX0gZWxzZSB7CiAJCQlhcHAuc2VsZWN0b3IgPSAhIShkY2ItPmFwcF9wcmlvcml0eVtpXS5zZWxfZmllbGQpOwogCQkJZXJyID0gZGNiX3NldGFwcChkZXYsICZhcHApOwpAQCAtMTIyLDcgKzEyMywxMSBAQAogCQljYXNlIENYR0I0X0RDQl9JTlBVVF9GV19FTkFCTEVEOiB7CiAJCQkvKiB3ZSdyZSBnb2luZyB0byB1c2UgRmlybXdhcmUgRENCICovCiAJCQlkY2ItPnN0YXRlID0gQ1hHQjRfRENCX1NUQVRFX0ZXX0lOQ09NUExFVEU7Ci0JCQlkY2ItPnN1cHBvcnRlZCA9IENYR0I0X0RDQlhfRldfU1VQUE9SVDsKKwkJCWRjYi0+c3VwcG9ydGVkID0gRENCX0NBUF9EQ0JYX0xMRF9NQU5BR0VEOworCQkJaWYgKGRjYi0+ZGNiX3ZlcnNpb24gPT0gRldfUE9SVF9EQ0JfVkVSX0lFRUUpCisJCQkJZGNiLT5zdXBwb3J0ZWQgfD0gRENCX0NBUF9EQ0JYX1ZFUl9JRUVFOworCQkJZWxzZQorCQkJCWRjYi0+c3VwcG9ydGVkIHw9IERDQl9DQVBfRENCWF9WRVJfQ0VFOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNDM2LDE0ICs0NDEsMTcgQEAKIAkqdXBfdGNfbWFwID0gKDEgPDwgdGMpOwogCiAJLyogcHJpb190eXBlIGlzIGxpbmsgc3RyaWN0ICovCi0JKnByaW9fdHlwZSA9IDB4MjsKKwlpZiAoKnBnaWQgIT0gMHhGKQorCQkqcHJpb190eXBlID0gMHgyOwogfQogCiBzdGF0aWMgdm9pZCBjeGdiNF9nZXRwZ3RjY2ZnX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0YywKIAkJCQl1OCAqcHJpb190eXBlLCB1OCAqcGdpZCwgdTggKmJ3X3BlciwKIAkJCQl1OCAqdXBfdGNfbWFwKQogewotCXJldHVybiBjeGdiNF9nZXRwZ3RjY2ZnKGRldiwgdGMsIHByaW9fdHlwZSwgcGdpZCwgYndfcGVyLCB1cF90Y19tYXAsIDEpOworCS8qIHRjIDAgaXMgd3JpdHRlbiBhdCBNU0IgcG9zaXRpb24gKi8KKwlyZXR1cm4gY3hnYjRfZ2V0cGd0Y2NmZyhkZXYsICg3IC0gdGMpLCBwcmlvX3R5cGUsIHBnaWQsIGJ3X3BlciwKKwkJCQl1cF90Y19tYXAsIDEpOwogfQogCiAKQEAgLTQ1MSw3ICs0NTksOSBAQAogCQkJCXU4ICpwcmlvX3R5cGUsIHU4ICpwZ2lkLCB1OCAqYndfcGVyLAogCQkJCXU4ICp1cF90Y19tYXApCiB7Ci0JcmV0dXJuIGN4Z2I0X2dldHBndGNjZmcoZGV2LCB0YywgcHJpb190eXBlLCBwZ2lkLCBid19wZXIsIHVwX3RjX21hcCwgMCk7CisJLyogdGMgMCBpcyB3cml0dGVuIGF0IE1TQiBwb3NpdGlvbiAqLworCXJldHVybiBjeGdiNF9nZXRwZ3RjY2ZnKGRldiwgKDcgLSB0YyksIHByaW9fdHlwZSwgcGdpZCwgYndfcGVyLAorCQkJCXVwX3RjX21hcCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGN4Z2I0X3NldHBndGNjZmdfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRjLApAQCAtNDYxLDYgKzQ3MSw3IEBACiAJc3RydWN0IGZ3X3BvcnRfY21kIHBjbWQ7CiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXYycGluZm8oZGV2KTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHBpLT5hZGFwdGVyOworCWludCBmd190YyA9IDcgLSB0YzsKIAl1MzIgX3BnaWQ7CiAJaW50IGVycjsKIApAQCAtNDc5LDggKzQ5MCw4IEBACiAJfQogCiAJX3BnaWQgPSBiZTMyX3RvX2NwdShwY21kLnUuZGNiLnBnaWQucGdpZCk7Ci0JX3BnaWQgJj0gfigweEYgPDwgKHRjICogNCkpOwotCV9wZ2lkIHw9IHBnaWQgPDwgKHRjICogNCk7CisJX3BnaWQgJj0gfigweEYgPDwgKGZ3X3RjICogNCkpOworCV9wZ2lkIHw9IHBnaWQgPDwgKGZ3X3RjICogNCk7CiAJcGNtZC51LmRjYi5wZ2lkLnBnaWQgPSBjcHVfdG9fYmUzMihfcGdpZCk7CiAKIAlJTklUX1BPUlRfRENCX1dSSVRFX0NNRChwY21kLCBwaS0+cG9ydF9pZCk7CkBAIC01OTMsNyArNjA0LDcgQEAKIAkgICAgcHJpb3JpdHkgPj0gQ1hHQjRfTUFYX1BSSU9SSVRZKQogCQkqcGZjY2ZnID0gMDsKIAllbHNlCi0JCSpwZmNjZmcgPSAocGktPmRjYi5wZmNlbiA+PiBwcmlvcml0eSkgJiAxOworCQkqcGZjY2ZnID0gKHBpLT5kY2IucGZjZW4gPj4gKDcgLSBwcmlvcml0eSkpICYgMTsKIH0KIAogLyogRW5hYmxlL2Rpc2FibGUgUHJpb3JpdHkgUGF1c2UgRnJhbWVzIGZvciB0aGUgc3BlY2lmaWVkIFRyYWZmaWMgQ2xhc3MKQEAgLTYxOCw5ICs2MjksOSBAQAogCXBjbWQudS5kY2IucGZjLnBmY2VuID0gcGktPmRjYi5wZmNlbjsKIAogCWlmIChwZmNjZmcpCi0JCXBjbWQudS5kY2IucGZjLnBmY2VuIHw9ICgxIDw8IHByaW9yaXR5KTsKKwkJcGNtZC51LmRjYi5wZmMucGZjZW4gfD0gKDEgPDwgKDcgLSBwcmlvcml0eSkpOwogCWVsc2UKLQkJcGNtZC51LmRjYi5wZmMucGZjZW4gJj0gKH4oMSA8PCBwcmlvcml0eSkpOworCQlwY21kLnUuZGNiLnBmYy5wZmNlbiAmPSAofigxIDw8ICg3IC0gcHJpb3JpdHkpKSk7CiAKIAllcnIgPSB0NF93cl9tYm94KGFkYXAsIGFkYXAtPm1ib3gsICZwY21kLCBzaXplb2YocGNtZCksICZwY21kKTsKIAlpZiAoZXJyICE9IEZXX1BPUlRfRENCX0NGR19TVUNDRVNTKSB7CkBAIC0xMDcxLDcgKzEwODIsNyBAQAogCXBnaWQgPSBiZTMyX3RvX2NwdShwY21kLnUuZGNiLnBnaWQucGdpZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ1hHQjRfTUFYX1BSSU9SSVRZOyBpKyspCi0JCXBnLT5wcmlvX3BnW2ldID0gKHBnaWQgPj4gKGkgKiA0KSkgJiAweEY7CisJCXBnLT5wcmlvX3BnWzcgLSBpXSA9IChwZ2lkID4+IChpICogNCkpICYgMHhGOwogCiAJSU5JVF9QT1JUX0RDQl9SRUFEX1BFRVJfQ01EKHBjbWQsIHBpLT5wb3J0X2lkKTsKIAlwY21kLnUuZGNiLnBncmF0ZS50eXBlID0gRldfUE9SVF9EQ0JfVFlQRV9QR1JBVEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jCmluZGV4IDg1MjBkNTUuLjI3OTg3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jCkBAIC0yNDQyLDkgKzI0NDIsMTMgQEAKIAkJICAgICBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbCB8IFNVUFBPUlRFRF8xMDAwYmFzZUtYX0Z1bGwgfAogCQkgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VLWDRfRnVsbDsKIAllbHNlIGlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9GSUJFUl9YRkkgfHwKLQkJIHR5cGUgPT0gRldfUE9SVF9UWVBFX0ZJQkVSX1hBVUkgfHwgdHlwZSA9PSBGV19QT1JUX1RZUEVfU0ZQKQorCQkgdHlwZSA9PSBGV19QT1JUX1RZUEVfRklCRVJfWEFVSSB8fCB0eXBlID09IEZXX1BPUlRfVFlQRV9TRlApIHsKIAkJdiB8PSBTVVBQT1JURURfRklCUkU7Ci0JZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfQlA0MF9CQSkKKwkJaWYgKGNhcHMgJiBGV19QT1JUX0NBUF9TUEVFRF8xRykKKwkJCXYgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCQlpZiAoY2FwcyAmIEZXX1BPUlRfQ0FQX1NQRUVEXzEwRykKKwkJCXYgfD0gU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbDsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gRldfUE9SVF9UWVBFX0JQNDBfQkEpCiAJCXYgfD0gU1VQUE9SVEVEXzQwMDAwYmFzZVNSNF9GdWxsOwogCiAJaWYgKGNhcHMgJiBGV19QT1JUX0NBUF9BTkVHKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9zZ2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvc2dlLmMKaW5kZXggNWUxYjMxNC4uMzlmMmIxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3NnZS5jCkBAIC0yOTE0LDcgKzI5MTQsOCBAQAogaW50IHQ0X3NnZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwKQogewogCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcC0+c2dlOwotCXUzMiBzZ2VfY29udHJvbCwgc2dlX2Nvbm1fY3RybDsKKwl1MzIgc2dlX2NvbnRyb2wsIHNnZV9jb250cm9sMiwgc2dlX2Nvbm1fY3RybDsKKwl1bnNpZ25lZCBpbnQgaW5ncGFkYm91bmRhcnksIGluZ3BhY2tib3VuZGFyeTsKIAlpbnQgcmV0LCBlZ3Jlc3NfdGhyZXNob2xkOwogCiAJLyoKQEAgLTI5MjQsOCArMjkyNSwzMSBAQAogCXNnZV9jb250cm9sID0gdDRfcmVhZF9yZWcoYWRhcCwgU0dFX0NPTlRST0wpOwogCXMtPnBrdHNoaWZ0ID0gUEtUU0hJRlRfR0VUKHNnZV9jb250cm9sKTsKIAlzLT5zdGF0X2xlbiA9IChzZ2VfY29udHJvbCAmIEVHUlNUQVRVU1BBR0VTSVpFX01BU0spID8gMTI4IDogNjQ7Ci0Jcy0+ZmxfYWxpZ24gPSAxIDw8IChJTkdQQURCT1VOREFSWV9HRVQoc2dlX2NvbnRyb2wpICsKLQkJCSAgICBYX0lOR1BBREJPVU5EQVJZX1NISUZUKTsKKworCS8qIFQ0IHVzZXMgYSBzaW5nbGUgY29udHJvbCBmaWVsZCB0byBzcGVjaWZ5IGJvdGggdGhlIFBDSWUgUGFkZGluZyBhbmQKKwkgKiBQYWNraW5nIEJvdW5kYXJ5LiAgVDUgaW50cm9kdWNlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IHRoZXNlCisJICogc2VwYXJhdGVseS4gIFRoZSBhY3R1YWwgSW5ncmVzcyBQYWNrZXQgRGF0YSBhbGlnbm1lbnQgYm91bmRhcnkKKwkgKiB3aXRoaW4gUGFja2VkIEJ1ZmZlciBNb2RlIGlzIHRoZSBtYXhpbXVtIG9mIHRoZXNlIHR3bworCSAqIHNwZWNpZmljYXRpb25zLgorCSAqLworCWluZ3BhZGJvdW5kYXJ5ID0gMSA8PCAoSU5HUEFEQk9VTkRBUllfR0VUKHNnZV9jb250cm9sKSArCisJCQkgICAgICAgWF9JTkdQQURCT1VOREFSWV9TSElGVCk7CisJaWYgKGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSkgeworCQlzLT5mbF9hbGlnbiA9IGluZ3BhZGJvdW5kYXJ5OworCX0gZWxzZSB7CisJCS8qIFQ1IGhhcyBhIGRpZmZlcmVudCBpbnRlcnByZXRhdGlvbiBvZiBvbmUgb2YgdGhlIFBDSWUgUGFja2luZworCQkgKiBCb3VuZGFyeSB2YWx1ZXMuCisJCSAqLworCQlzZ2VfY29udHJvbDIgPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfQ09OVFJPTDJfQSk7CisJCWluZ3BhY2tib3VuZGFyeSA9IElOR1BBQ0tCT1VOREFSWV9HKHNnZV9jb250cm9sMik7CisJCWlmIChpbmdwYWNrYm91bmRhcnkgPT0gSU5HUEFDS0JPVU5EQVJZXzE2Ql9YKQorCQkJaW5ncGFja2JvdW5kYXJ5ID0gMTY7CisJCWVsc2UKKwkJCWluZ3BhY2tib3VuZGFyeSA9IDEgPDwgKGluZ3BhY2tib3VuZGFyeSArCisJCQkJCQlJTkdQQUNLQk9VTkRBUllfU0hJRlRfWCk7CisKKwkJcy0+ZmxfYWxpZ24gPSBtYXgoaW5ncGFkYm91bmRhcnksIGluZ3BhY2tib3VuZGFyeSk7CisJfQogCiAJaWYgKGFkYXAtPmZsYWdzICYgVVNJTkdfU09GVF9QQVJBTVMpCiAJCXJldCA9IHQ0X3NnZV9pbml0X3NvZnQoYWRhcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0X2h3LmMKaW5kZXggYTlkOWQ3NC4uMTYzYTJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfaHcuYwpAQCAtMzEyOSwxMiArMzEyOSw1MSBAQAogCQkgICAgIEhPU1RQQUdFU0laRVBGNihzZ2VfaHBzKSB8CiAJCSAgICAgSE9TVFBBR0VTSVpFUEY3KHNnZV9ocHMpKTsKIAotCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgU0dFX0NPTlRST0wsCi0JCQkgSU5HUEFEQk9VTkRBUllfTUFTSyB8Ci0JCQkgRUdSU1RBVFVTUEFHRVNJWkVfTUFTSywKLQkJCSBJTkdQQURCT1VOREFSWShmbF9hbGlnbl9sb2cgLSA1KSB8Ci0JCQkgRUdSU1RBVFVTUEFHRVNJWkUoc3RhdF9sZW4gIT0gNjQpKTsKLQorCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpIHsKKwkJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBTR0VfQ09OVFJPTCwKKwkJCQkgSU5HUEFEQk9VTkRBUllfTUFTSyB8CisJCQkJIEVHUlNUQVRVU1BBR0VTSVpFX01BU0ssCisJCQkJIElOR1BBREJPVU5EQVJZKGZsX2FsaWduX2xvZyAtIDUpIHwKKwkJCQkgRUdSU1RBVFVTUEFHRVNJWkUoc3RhdF9sZW4gIT0gNjQpKTsKKwl9IGVsc2UgeworCQkvKiBUNSBpbnRyb2R1Y2VkIHRoZSBzZXBhcmF0aW9uIG9mIHRoZSBGcmVlIExpc3QgUGFkZGluZyBhbmQKKwkJICogUGFja2luZyBCb3VuZGFyaWVzLiAgVGh1cywgd2UgY2FuIHNlbGVjdCBhIHNtYWxsZXIgUGFkZGluZworCQkgKiBCb3VuZGFyeSB0byBhdm9pZCB1c2VsZXNzbHkgY2hld2luZyB1cCBQQ0llIExpbmsgYW5kIE1lbW9yeQorCQkgKiBCYW5kd2lkdGgsIGFuZCB1c2UgYSBQYWNraW5nIEJvdW5kYXJ5IHdoaWNoIGlzIGxhcmdlIGVub3VnaAorCQkgKiB0byBhdm9pZCBmYWxzZSBzaGFyaW5nIGJldHdlZW4gQ1BVcywgZXRjLgorCQkgKgorCQkgKiBGb3IgdGhlIFBDSSBMaW5rLCB0aGUgc21hbGxlciB0aGUgUGFkZGluZyBCb3VuZGFyeSB0aGUKKwkJICogYmV0dGVyLiAgRm9yIHRoZSBNZW1vcnkgQ29udHJvbGxlciwgYSBzbWFsbGVyIFBhZGRpbmcKKwkJICogQm91bmRhcnkgaXMgYmV0dGVyIHVudGlsIHdlIGNyb3NzIHVuZGVyIHRoZSBNZW1vcnkgTGluZQorCQkgKiBTaXplICh0aGUgbWluaW11bSB1bml0IG9mIHRyYW5zZmVyIHRvL2Zyb20gTWVtb3J5KS4gIElmIHdlCisJCSAqIGhhdmUgYSBQYWRkaW5nIEJvdW5kYXJ5IHdoaWNoIGlzIHNtYWxsZXIgdGhhbiB0aGUgTWVtb3J5CisJCSAqIExpbmUgU2l6ZSwgdGhhdCdsbCBpbnZvbHZlIGEgUmVhZC1Nb2RpZnktV3JpdGUgY3ljbGUgb24gdGhlCisJCSAqIE1lbW9yeSBDb250cm9sbGVyIHdoaWNoIGlzIG5ldmVyIGdvb2QuICBGb3IgVDUgdGhlIHNtYWxsZXN0CisJCSAqIFBhZGRpbmcgQm91bmRhcnkgd2hpY2ggd2UgY2FuIHNlbGVjdCBpcyAzMiBieXRlcyB3aGljaCBpcworCQkgKiBsYXJnZXIgdGhhbiBhbnkga25vd24gTWVtb3J5IENvbnRyb2xsZXIgTGluZSBTaXplIHNvIHdlJ2xsCisJCSAqIHVzZSB0aGF0LgorCQkgKgorCQkgKiBUNSBoYXMgYSBkaWZmZXJlbnQgaW50ZXJwcmV0YXRpb24gb2YgdGhlICIwIiB2YWx1ZSBmb3IgdGhlCisJCSAqIFBhY2tpbmcgQm91bmRhcnkuICBUaGlzIGNvcnJlc3BvbmRzIHRvIDE2IGJ5dGVzIGluc3RlYWQgb2YKKwkJICogdGhlIGV4cGVjdGVkIDMyIGJ5dGVzLiAgV2UgbmV2ZXIgaGF2ZSBhIFBhY2tpbmcgQm91bmRhcnkKKwkJICogbGVzcyB0aGFuIDMyIGJ5dGVzIHNvIHdlIGNhbid0IHVzZSB0aGF0IHNwZWNpYWwgdmFsdWUgYnV0CisJCSAqIG9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSB3YW50ZWQgMzIgYnl0ZXMsIHRoZSBiZXN0IHdlIGNhbgorCQkgKiByZWFsbHkgZG8gaXMgNjQgYnl0ZXMuCisJCSovCisJCWlmIChmbF9hbGlnbiA8PSAzMikgeworCQkJZmxfYWxpZ24gPSA2NDsKKwkJCWZsX2FsaWduX2xvZyA9IDY7CisJCX0KKwkJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBTR0VfQ09OVFJPTCwKKwkJCQkgSU5HUEFEQk9VTkRBUllfTUFTSyB8CisJCQkJIEVHUlNUQVRVU1BBR0VTSVpFX01BU0ssCisJCQkJIElOR1BBREJPVU5EQVJZKElOR1BDSUVCT1VOREFSWV8zMkJfWCkgfAorCQkJCSBFR1JTVEFUVVNQQUdFU0laRShzdGF0X2xlbiAhPSA2NCkpOworCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFNHRV9DT05UUk9MMl9BLAorCQkJCSBJTkdQQUNLQk9VTkRBUllfVihJTkdQQUNLQk9VTkRBUllfTSksCisJCQkJIElOR1BBQ0tCT1VOREFSWV9WKGZsX2FsaWduX2xvZyAtCisJCQkJCQkgSU5HUEFDS0JPVU5EQVJZX1NISUZUX1gpKTsKKwl9CiAJLyoKIAkgKiBBZGp1c3QgdmFyaW91cyBTR0UgRnJlZSBMaXN0IEhvc3QgQnVmZmVyIFNpemVzLgogCSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0X3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfcmVncy5oCmluZGV4IGExMDI0ZGIuLjhkMmRlMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfcmVncy5oCkBAIC05NSw2ICs5NSw3IEBACiAjZGVmaW5lIFhfSU5HUEFEQk9VTkRBUllfU0hJRlQgNQogCiAjZGVmaW5lIFNHRV9DT05UUk9MIDB4MTAwOAorI2RlZmluZSBTR0VfQ09OVFJPTDJfQQkJMHgxMTI0CiAjZGVmaW5lICBEQ0FTWVNUWVBFICAgICAgICAgICAgIDB4MDAwODAwMDBVCiAjZGVmaW5lICBSWFBLVENQTE1PREVfTUFTSyAgICAgIDB4MDAwNDAwMDBVCiAjZGVmaW5lICBSWFBLVENQTE1PREVfU0hJRlQgICAgIDE4CkBAIC0xMDYsNiArMTA3LDcgQEAKICNkZWZpbmUgIFBLVFNISUZUX1NISUZUICAgICAgICAgMTAKICNkZWZpbmUgIFBLVFNISUZUKHgpICAgICAgICAgICAgKCh4KSA8PCBQS1RTSElGVF9TSElGVCkKICNkZWZpbmUgIFBLVFNISUZUX0dFVCh4KQkoKCh4KSAmIFBLVFNISUZUX01BU0spID4+IFBLVFNISUZUX1NISUZUKQorI2RlZmluZSAgSU5HUENJRUJPVU5EQVJZXzMyQl9YCTAKICNkZWZpbmUgIElOR1BDSUVCT1VOREFSWV9NQVNLICAgMHgwMDAwMDM4MFUKICNkZWZpbmUgIElOR1BDSUVCT1VOREFSWV9TSElGVCAgNwogI2RlZmluZSAgSU5HUENJRUJPVU5EQVJZKHgpICAgICAoKHgpIDw8IElOR1BDSUVCT1VOREFSWV9TSElGVCkKQEAgLTExNCw2ICsxMTYsMTQgQEAKICNkZWZpbmUgIElOR1BBREJPVU5EQVJZKHgpICAgICAgKCh4KSA8PCBJTkdQQURCT1VOREFSWV9TSElGVCkKICNkZWZpbmUgIElOR1BBREJPVU5EQVJZX0dFVCh4KQkoKCh4KSAmIElOR1BBREJPVU5EQVJZX01BU0spIFwKIAkJCQkgPj4gSU5HUEFEQk9VTkRBUllfU0hJRlQpCisjZGVmaW5lICBJTkdQQUNLQk9VTkRBUllfMTZCX1gJMAorI2RlZmluZSAgSU5HUEFDS0JPVU5EQVJZX1NISUZUX1ggNQorCisjZGVmaW5lICBJTkdQQUNLQk9VTkRBUllfUwkxNgorI2RlZmluZSAgSU5HUEFDS0JPVU5EQVJZX00JMHg3VQorI2RlZmluZSAgSU5HUEFDS0JPVU5EQVJZX1YoeCkJKCh4KSA8PCBJTkdQQUNLQk9VTkRBUllfUykKKyNkZWZpbmUgIElOR1BBQ0tCT1VOREFSWV9HKHgpCSgoKHgpID4+IElOR1BBQ0tCT1VOREFSWV9TKSBcCisJCQkJICYgSU5HUEFDS0JPVU5EQVJZX00pCiAjZGVmaW5lICBFR1JQQ0lFQk9VTkRBUllfTUFTSyAgIDB4MDAwMDAwMGVVCiAjZGVmaW5lICBFR1JQQ0lFQk9VTkRBUllfU0hJRlQgIDEKICNkZWZpbmUgIEVHUlBDSUVCT1VOREFSWSh4KSAgICAgKCh4KSA8PCBFR1JQQ0lFQk9VTkRBUllfU0hJRlQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2FkYXB0ZXIuaAppbmRleCA2OGVhYTljLi4zZDA2ZTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9hZGFwdGVyLmgKQEAgLTI5OSw2ICsyOTksMTQgQEAKIAl1MTYgdGltZXJfdmFsW1NHRV9OVElNRVJTXTsJLyogaW50ZXJydXB0IGhvbGRvZmYgdGltZXIgYXJyYXkgKi8KIAl1OCBjb3VudGVyX3ZhbFtTR0VfTkNPVU5URVJTXTsJLyogaW50ZXJydXB0IFJYIHRocmVzaG9sZCBhcnJheSAqLwogCisJLyogRGVjb2RlZCBBZGFwdGVyIFBhcmFtZXRlcnMuCisJICovCisJdTMyIGZsX3BnX29yZGVyOwkJLyogbGFyZ2UgcGFnZSBhbGxvY2F0aW9uIHNpemUgKi8KKwl1MzIgc3RhdF9sZW47CQkJLyogbGVuZ3RoIG9mIHN0YXR1cyBwYWdlIGF0IHJpbmcgZW5kICovCisJdTMyIHBrdHNoaWZ0OwkJCS8qIHBhZGRpbmcgYmV0d2VlbiBDUEwgJiBwYWNrZXQgZGF0YSAqLworCXUzMiBmbF9hbGlnbjsJCQkvKiByZXNwb25zZSBxdWV1ZSBtZXNzYWdlIGFsaWdubWVudCAqLworCXUzMiBmbF9zdGFydmVfdGhyZXM7CQkvKiBGcmVlIExpc3Qgc3RhcnZhdGlvbiB0aHJlc2hvbGQgKi8KKwogCS8qCiAJICogUmV2ZXJzZSBtYXBzIGZyb20gQWJzb2x1dGUgUXVldWUgSURzIHRvIGFzc29jaWF0ZWQgcXVldWUgcG9pbnRlcnMuCiAJICogVGhlIGFic29sdXRlIFF1ZXVlIElEcyBhcmUgaW4gYSBjb21wYWN0IHJhbmdlIHdoaWNoIHN0YXJ0IGF0IGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9zZ2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9zZ2UuYwppbmRleCA4NTAzNmU2Li5mZGQwNzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3NnZS5jCkBAIC01MSwxNCArNTEsNiBAQAogI2luY2x1ZGUgIi4uL2N4Z2I0L3Q0X21zZy5oIgogCiAvKgotICogRGVjb2RlZCBBZGFwdGVyIFBhcmFtZXRlcnMuCi0gKi8KLXN0YXRpYyB1MzIgRkxfUEdfT1JERVI7CQkvKiBsYXJnZSBwYWdlIGFsbG9jYXRpb24gc2l6ZSAqLwotc3RhdGljIHUzMiBTVEFUX0xFTjsJCS8qIGxlbmd0aCBvZiBzdGF0dXMgcGFnZSBhdCByaW5nIGVuZCAqLwotc3RhdGljIHUzMiBQS1RTSElGVDsJCS8qIHBhZGRpbmcgYmV0d2VlbiBDUEwgYW5kIHBhY2tldCBkYXRhICovCi1zdGF0aWMgdTMyIEZMX0FMSUdOOwkJLyogcmVzcG9uc2UgcXVldWUgbWVzc2FnZSBhbGlnbm1lbnQgKi8KLQotLyoKICAqIENvbnN0YW50cyAuLi4KICAqLwogZW51bSB7CkBAIC0xMDIsMTIgKzk0LDYgQEAKIAlNQVhfVElNRVJfVFhfUkVDTEFJTSA9IDEwMCwKIAogCS8qCi0JICogQW4gRkwgd2l0aCA8PSBGTF9TVEFSVkVfVEhSRVMgYnVmZmVycyBpcyBzdGFydmluZyBhbmQgYSBwZXJpb2RpYwotCSAqIHRpbWVyIHdpbGwgYXR0ZW1wdCB0byByZWZpbGwgaXQuCi0JICovCi0JRkxfU1RBUlZFX1RIUkVTID0gNCwKLQotCS8qCiAJICogU3VzcGVuZCBhbiBFdGhlcm5ldCBUWCBxdWV1ZSB3aXRoIGZld2VyIGF2YWlsYWJsZSBkZXNjcmlwdG9ycyB0aGFuCiAJICogdGhpcy4gIFdlIGFsd2F5cyB3YW50IHRvIGhhdmUgcm9vbSBmb3IgYSBtYXhpbXVtIHNpemVkIHBhY2tldDoKIAkgKiBpbmxpbmUgaW1tZWRpYXRlIGRhdGEgKyBNQVhfU0tCX0ZSQUdTLiBUaGlzIGlzIHRoZSBzYW1lIGFzCkBAIC0yNjQsMTUgKzI1MCwxOSBAQAogCiAvKioKICAqCWZsX3N0YXJ2aW5nIC0gcmV0dXJuIHdoZXRoZXIgYSBGcmVlIExpc3QgaXMgc3RhcnZpbmcuCisgKglAYWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlcgogICoJQGZsOiB0aGUgRnJlZSBMaXN0CiAgKgogICoJVGVzdHMgc3BlY2lmaWVkIEZyZWUgTGlzdCB0byBzZWUgd2hldGhlciB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMKICAqCWF2YWlsYWJsZSB0byB0aGUgaGFyZHdhcmUgaGFzIGZhbGxlZCBiZWxvdyBvdXIgInN0YXJ2YXRpb24iCiAgKgl0aHJlc2hvbGQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBmbF9zdGFydmluZyhjb25zdCBzdHJ1Y3Qgc2dlX2ZsICpmbCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBmbF9zdGFydmluZyhjb25zdCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2dlX2ZsICpmbCkKIHsKLQlyZXR1cm4gZmwtPmF2YWlsIC0gZmwtPnBlbmRfY3JlZCA8PSBGTF9TVEFSVkVfVEhSRVM7CisJY29uc3Qgc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7CisKKwlyZXR1cm4gZmwtPmF2YWlsIC0gZmwtPnBlbmRfY3JlZCA8PSBzLT5mbF9zdGFydmVfdGhyZXM7CiB9CiAKIC8qKgpAQCAtNDU3LDEzICs0NDcsMTYgQEAKIAogLyoqCiAgKglnZXRfYnVmX3NpemUgLSByZXR1cm4gdGhlIHNpemUgb2YgYW4gUlggRnJlZSBMaXN0IGJ1ZmZlci4KKyAqCUBhZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhc3NvY2lhdGVkIGFkYXB0ZXIKICAqCUBzZGVzYzogcG9pbnRlciB0byB0aGUgc29mdHdhcmUgYnVmZmVyIGRlc2NyaXB0b3IKICAqLwotc3RhdGljIGlubGluZSBpbnQgZ2V0X2J1Zl9zaXplKGNvbnN0IHN0cnVjdCByeF9zd19kZXNjICpzZGVzYykKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9idWZfc2l6ZShjb25zdCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2Rlc2MpCiB7Ci0JcmV0dXJuIEZMX1BHX09SREVSID4gMCAmJiAoc2Rlc2MtPmRtYV9hZGRyICYgUlhfTEFSR0VfQlVGKQotCQk/IChQQUdFX1NJWkUgPDwgRkxfUEdfT1JERVIpCi0JCTogUEFHRV9TSVpFOworCWNvbnN0IHN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCisJcmV0dXJuIChzLT5mbF9wZ19vcmRlciA+IDAgJiYgKHNkZXNjLT5kbWFfYWRkciAmIFJYX0xBUkdFX0JVRikKKwkJPyAoUEFHRV9TSVpFIDw8IHMtPmZsX3BnX29yZGVyKSA6IFBBR0VfU0laRSk7CiB9CiAKIC8qKgpAQCAtNDgzLDcgKzQ3Niw4IEBACiAKIAkJaWYgKGlzX2J1Zl9tYXBwZWQoc2Rlc2MpKQogCQkJZG1hX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldl9kZXYsIGdldF9idWZfYWRkcihzZGVzYyksCi0JCQkJICAgICAgIGdldF9idWZfc2l6ZShzZGVzYyksIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJICAgICAgIGdldF9idWZfc2l6ZShhZGFwdGVyLCBzZGVzYyksCisJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCXB1dF9wYWdlKHNkZXNjLT5wYWdlKTsKIAkJc2Rlc2MtPnBhZ2UgPSBOVUxMOwogCQlpZiAoKytmbC0+Y2lkeCA9PSBmbC0+c2l6ZSkKQEAgLTUxMSw3ICs1MDUsOCBAQAogCiAJaWYgKGlzX2J1Zl9tYXBwZWQoc2Rlc2MpKQogCQlkbWFfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2X2RldiwgZ2V0X2J1Zl9hZGRyKHNkZXNjKSwKLQkJCSAgICAgICBnZXRfYnVmX3NpemUoc2Rlc2MpLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJICAgICAgIGdldF9idWZfc2l6ZShhZGFwdGVyLCBzZGVzYyksCisJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAlzZGVzYy0+cGFnZSA9IE5VTEw7CiAJaWYgKCsrZmwtPmNpZHggPT0gZmwtPnNpemUpCiAJCWZsLT5jaWR4ID0gMDsKQEAgLTU4OSw2ICs1ODQsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCByZWZpbGxfZmwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBzZ2VfZmwgKmZsLAogCQkJICAgICAgaW50IG4sIGdmcF90IGdmcCkKIHsKKwlzdHJ1Y3Qgc2dlICpzID0gJmFkYXB0ZXItPnNnZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCXVuc2lnbmVkIGludCBjcmVkID0gZmwtPmF2YWlsOwpAQCAtNjA4LDEyICs2MDQsMTIgQEAKIAkgKiBJZiB3ZSBkb24ndCBzdXBwb3J0IGxhcmdlIHBhZ2VzLCBkcm9wIGRpcmVjdGx5IGludG8gdGhlIHNtYWxsIHBhZ2UKIAkgKiBhbGxvY2F0aW9uIGNvZGUuCiAJICovCi0JaWYgKEZMX1BHX09SREVSID09IDApCisJaWYgKHMtPmZsX3BnX29yZGVyID09IDApCiAJCWdvdG8gYWxsb2Nfc21hbGxfcGFnZXM7CiAKIAl3aGlsZSAobikgewogCQlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwIHwgX19HRlBfQ09NUCB8IF9fR0ZQX05PV0FSTiwKLQkJCQkgICBGTF9QR19PUkRFUik7CisJCQkJICAgcy0+ZmxfcGdfb3JkZXIpOwogCQlpZiAodW5saWtlbHkoIXBhZ2UpKSB7CiAJCQkvKgogCQkJICogV2UndmUgZmFpbGVkIGlub3VyIGF0dGVtcHQgdG8gYWxsb2NhdGUgYSAibGFyZ2UKQEAgLTYyMywxMCArNjE5LDEwIEBACiAJCQlmbC0+bGFyZ2VfYWxsb2NfZmFpbGVkKys7CiAJCQlicmVhazsKIAkJfQotCQlwb2lzb25fYnVmKHBhZ2UsIFBBR0VfU0laRSA8PCBGTF9QR19PUkRFUik7CisJCXBvaXNvbl9idWYocGFnZSwgUEFHRV9TSVpFIDw8IHMtPmZsX3BnX29yZGVyKTsKIAogCQlkbWFfYWRkciA9IGRtYV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2X2RldiwgcGFnZSwgMCwKLQkJCQkJUEFHRV9TSVpFIDw8IEZMX1BHX09SREVSLAorCQkJCQlQQUdFX1NJWkUgPDwgcy0+ZmxfcGdfb3JkZXIsCiAJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihhZGFwdGVyLT5wZGV2X2RldiwgZG1hX2FkZHIpKSkgewogCQkJLyoKQEAgLTYzNyw3ICs2MzMsNyBAQAogCQkJICogYmVjYXVzZSBETUEgbWFwcGluZyByZXNvdXJjZXMgYXJlIHR5cGljYWxseQogCQkJICogY3JpdGljYWwgcmVzb3VyY2VzIG9uY2UgdGhleSBiZWNvbWUgc2NhcnNlLgogCQkJICovCi0JCQlfX2ZyZWVfcGFnZXMocGFnZSwgRkxfUEdfT1JERVIpOworCQkJX19mcmVlX3BhZ2VzKHBhZ2UsIHMtPmZsX3BnX29yZGVyKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWRtYV9hZGRyIHw9IFJYX0xBUkdFX0JVRjsKQEAgLTY5Myw3ICs2ODksNyBAQAogCWZsLT5wZW5kX2NyZWQgKz0gY3JlZDsKIAlyaW5nX2ZsX2RiKGFkYXB0ZXIsIGZsKTsKIAotCWlmICh1bmxpa2VseShmbF9zdGFydmluZyhmbCkpKSB7CisJaWYgKHVubGlrZWx5KGZsX3N0YXJ2aW5nKGFkYXB0ZXIsIGZsKSkpIHsKIAkJc21wX3dtYigpOwogCQlzZXRfYml0KGZsLT5jbnR4dF9pZCwgYWRhcHRlci0+c2dlLnN0YXJ2aW5nX2ZsKTsKIAl9CkBAIC0xNDY4LDYgKzE0NjQsOCBAQAogc3RhdGljIHZvaWQgZG9fZ3JvKHN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxLCBjb25zdCBzdHJ1Y3QgcGt0X2dsICpnbCwKIAkJICAgY29uc3Qgc3RydWN0IGNwbF9yeF9wa3QgKnBrdCkKIHsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHJ4cS0+cnNwcS5hZGFwdGVyOworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOwogCWludCByZXQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTQ3OCw4ICsxNDc2LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWNvcHlfZnJhZ3Moc2tiLCBnbCwgUEtUU0hJRlQpOwotCXNrYi0+bGVuID0gZ2wtPnRvdF9sZW4gLSBQS1RTSElGVDsKKwljb3B5X2ZyYWdzKHNrYiwgZ2wsIHMtPnBrdHNoaWZ0KTsKKwlza2ItPmxlbiA9IGdsLT50b3RfbGVuIC0gcy0+cGt0c2hpZnQ7CiAJc2tiLT5kYXRhX2xlbiA9IHNrYi0+bGVuOwogCXNrYi0+dHJ1ZXNpemUgKz0gc2tiLT5kYXRhX2xlbjsKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtMTUxNiw2ICsxNTE0LDggQEAKIAlib29sIGNzdW1fb2sgPSBwa3QtPmNzdW1fY2FsYyAmJiAhcGt0LT5lcnJfdmVjICYmCiAJCSAgICAgICAocnNwcS0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKTsKIAlzdHJ1Y3Qgc2dlX2V0aF9yeHEgKnJ4cSA9IGNvbnRhaW5lcl9vZihyc3BxLCBzdHJ1Y3Qgc2dlX2V0aF9yeHEsIHJzcHEpOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcnNwcS0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc2dlICpzID0gJmFkYXB0ZXItPnNnZTsKIAogCS8qCiAJICogSWYgdGhpcyBpcyBhIGdvb2QgVENQIHBhY2tldCBhbmQgd2UgaGF2ZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZApAQCAtMTUzNyw3ICsxNTM3LDcgQEAKIAkJcnhxLT5zdGF0cy5yeF9kcm9wcysrOwogCQlyZXR1cm4gMDsKIAl9Ci0JX19za2JfcHVsbChza2IsIFBLVFNISUZUKTsKKwlfX3NrYl9wdWxsKHNrYiwgcy0+cGt0c2hpZnQpOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJzcHEtPm5ldGRldik7CiAJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJzcHEtPmlkeCk7CiAJcnhxLT5zdGF0cy5wa3RzKys7CkBAIC0xNjQ4LDYgKzE2NDgsOCBAQAogc3RhdGljIGludCBwcm9jZXNzX3Jlc3BvbnNlcyhzdHJ1Y3Qgc2dlX3JzcHEgKnJzcHEsIGludCBidWRnZXQpCiB7CiAJc3RydWN0IHNnZV9ldGhfcnhxICpyeHEgPSBjb250YWluZXJfb2YocnNwcSwgc3RydWN0IHNnZV9ldGhfcnhxLCByc3BxKTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHJzcHEtPmFkYXB0ZXI7CisJc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7CiAJaW50IGJ1ZGdldF9sZWZ0ID0gYnVkZ2V0OwogCiAJd2hpbGUgKGxpa2VseShidWRnZXRfbGVmdCkpIHsKQEAgLTE2OTcsNyArMTY5OSw3IEBACiAJCQkJQlVHX09OKGZyYWcgPj0gTUFYX1NLQl9GUkFHUyk7CiAJCQkJQlVHX09OKHJ4cS0+ZmwuYXZhaWwgPT0gMCk7CiAJCQkJc2Rlc2MgPSAmcnhxLT5mbC5zZGVzY1tyeHEtPmZsLmNpZHhdOwotCQkJCWJ1ZnN6ID0gZ2V0X2J1Zl9zaXplKHNkZXNjKTsKKwkJCQlidWZzeiA9IGdldF9idWZfc2l6ZShhZGFwdGVyLCBzZGVzYyk7CiAJCQkJZnAtPnBhZ2UgPSBzZGVzYy0+cGFnZTsKIAkJCQlmcC0+b2Zmc2V0ID0gcnNwcS0+b2Zmc2V0OwogCQkJCWZwLT5zaXplID0gbWluKGJ1ZnN6LCBsZW4pOwpAQCAtMTcyNiw3ICsxNzI4LDcgQEAKIAkJCSAqLwogCQkJcmV0ID0gcnNwcS0+aGFuZGxlcihyc3BxLCByc3BxLT5jdXJfZGVzYywgJmdsKTsKIAkJCWlmIChsaWtlbHkocmV0ID09IDApKQotCQkJCXJzcHEtPm9mZnNldCArPSBBTElHTihmcC0+c2l6ZSwgRkxfQUxJR04pOworCQkJCXJzcHEtPm9mZnNldCArPSBBTElHTihmcC0+c2l6ZSwgcy0+ZmxfYWxpZ24pOwogCQkJZWxzZQogCQkJCXJlc3RvcmVfcnhfYnVmcygmZ2wsICZyeHEtPmZsLCBmcmFnKTsKIAkJfSBlbHNlIGlmIChsaWtlbHkocnNwX3R5cGUgPT0gUlNQX1RZUEVfQ1BMKSkgewpAQCAtMTk2Myw3ICsxOTY1LDcgQEAKIAkJCSAqIHNjaGVkdWxlIG5hcGkgYnV0IHRoZSBGTCBpcyBubyBsb25nZXIgc3RhcnZpbmcuCiAJCQkgKiBObyBiaWdnaWUuCiAJCQkgKi8KLQkJCWlmIChmbF9zdGFydmluZyhmbCkpIHsKKwkJCWlmIChmbF9zdGFydmluZyhhZGFwdGVyLCBmbCkpIHsKIAkJCQlzdHJ1Y3Qgc2dlX2V0aF9yeHEgKnJ4cTsKIAogCQkJCXJ4cSA9IGNvbnRhaW5lcl9vZihmbCwgc3RydWN0IHNnZV9ldGhfcnhxLCBmbCk7CkBAIC0yMDQ3LDYgKzIwNDksNyBAQAogCQkgICAgICAgaW50IGludHJfZGVzdCwKIAkJICAgICAgIHN0cnVjdCBzZ2VfZmwgKmZsLCByc3BxX2hhbmRsZXJfdCBobmQpCiB7CisJc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7CiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBmd19pcV9jbWQgY21kLCBycGw7CiAJaW50IHJldCwgaXFhbmRzdCwgZmxzeiA9IDA7CkBAIC0yMTE3LDcgKzIxMjAsNyBAQAogCQlmbC0+c2l6ZSA9IHJvdW5kdXAoZmwtPnNpemUsIEZMX1BFUl9FUV9VTklUKTsKIAkJZmwtPmRlc2MgPSBhbGxvY19yaW5nKGFkYXB0ZXItPnBkZXZfZGV2LCBmbC0+c2l6ZSwKIAkJCQkgICAgICBzaXplb2YoX19iZTY0KSwgc2l6ZW9mKHN0cnVjdCByeF9zd19kZXNjKSwKLQkJCQkgICAgICAmZmwtPmFkZHIsICZmbC0+c2Rlc2MsIFNUQVRfTEVOKTsKKwkJCQkgICAgICAmZmwtPmFkZHIsICZmbC0+c2Rlc2MsIHMtPnN0YXRfbGVuKTsKIAkJaWYgKCFmbC0+ZGVzYykgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyOwpAQCAtMjEyOSw3ICsyMTMyLDcgQEAKIAkJICogZnJlZSBsaXN0IHJpbmcpIGluIEVncmVzcyBRdWV1ZSBVbml0cy4KIAkJICovCiAJCWZsc3ogPSAoZmwtPnNpemUgLyBGTF9QRVJfRVFfVU5JVCArCi0JCQlTVEFUX0xFTiAvIEVRX1VOSVQpOworCQkJcy0+c3RhdF9sZW4gLyBFUV9VTklUKTsKIAogCQkvKgogCQkgKiBGaWxsIGluIGFsbCB0aGUgcmVsZXZhbnQgZmlybXdhcmUgSW5ncmVzcyBRdWV1ZSBDb21tYW5kCkBAIC0yMjE3LDYgKzIyMjAsNyBAQAogCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2cSwKIAkJCSAgIHVuc2lnbmVkIGludCBpcWlkKQogeworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOwogCWludCByZXQsIG5lbnRyaWVzOwogCXN0cnVjdCBmd19lcV9ldGhfY21kIGNtZCwgcnBsOwogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTIyMjUsNyArMjIyOSw3IEBACiAJICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBoYXJkd2FyZSBUWCBRdWV1ZSAoaW5jbHVkaW5nIHRoZSBTdGF0dXMKIAkgKiBQYWdlIG9uIHRoZSBlbmQgb2YgdGhlIFRYIFF1ZXVlKSBpbiB1bml0cyBvZiBUWCBEZXNjcmlwdG9ycy4KIAkgKi8KLQluZW50cmllcyA9IHR4cS0+cS5zaXplICsgU1RBVF9MRU4gLyBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOworCW5lbnRyaWVzID0gdHhxLT5xLnNpemUgKyBzLT5zdGF0X2xlbiAvIHNpemVvZihzdHJ1Y3QgdHhfZGVzYyk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBoYXJkd2FyZSByaW5nIGZvciB0aGUgVFggcmluZyAod2l0aCBzcGFjZSBmb3IgaXRzCkBAIC0yMjM0LDcgKzIyMzgsNyBAQAogCXR4cS0+cS5kZXNjID0gYWxsb2NfcmluZyhhZGFwdGVyLT5wZGV2X2RldiwgdHhxLT5xLnNpemUsCiAJCQkJIHNpemVvZihzdHJ1Y3QgdHhfZGVzYyksCiAJCQkJIHNpemVvZihzdHJ1Y3QgdHhfc3dfZGVzYyksCi0JCQkJICZ0eHEtPnEucGh5c19hZGRyLCAmdHhxLT5xLnNkZXNjLCBTVEFUX0xFTik7CisJCQkJICZ0eHEtPnEucGh5c19hZGRyLCAmdHhxLT5xLnNkZXNjLCBzLT5zdGF0X2xlbik7CiAJaWYgKCF0eHEtPnEuZGVzYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIzMDcsOCArMjMxMSwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBmcmVlX3R4cShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNnZV90eHEgKnRxKQogeworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCiAJZG1hX2ZyZWVfY29oZXJlbnQoYWRhcHRlci0+cGRldl9kZXYsCi0JCQkgIHRxLT5zaXplICogc2l6ZW9mKCp0cS0+ZGVzYykgKyBTVEFUX0xFTiwKKwkJCSAgdHEtPnNpemUgKiBzaXplb2YoKnRxLT5kZXNjKSArIHMtPnN0YXRfbGVuLAogCQkJICB0cS0+ZGVzYywgdHEtPnBoeXNfYWRkcik7CiAJdHEtPmNudHh0X2lkID0gMDsKIAl0cS0+c2Rlc2MgPSBOVUxMOwpAQCAtMjMyMiw2ICsyMzI4LDcgQEAKIHN0YXRpYyB2b2lkIGZyZWVfcnNwcV9mbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNnZV9yc3BxICpyc3BxLAogCQkJIHN0cnVjdCBzZ2VfZmwgKmZsKQogeworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOwogCXVuc2lnbmVkIGludCBmbGlkID0gZmwgPyBmbC0+Y250eHRfaWQgOiAweGZmZmY7CiAKIAl0NHZmX2lxX2ZyZWUoYWRhcHRlciwgRldfSVFfVFlQRV9GTF9JTlRfQ0FQLApAQCAtMjMzNyw3ICsyMzQ0LDcgQEAKIAlpZiAoZmwpIHsKIAkJZnJlZV9yeF9idWZzKGFkYXB0ZXIsIGZsLCBmbC0+YXZhaWwpOwogCQlkbWFfZnJlZV9jb2hlcmVudChhZGFwdGVyLT5wZGV2X2RldiwKLQkJCQkgIGZsLT5zaXplICogc2l6ZW9mKCpmbC0+ZGVzYykgKyBTVEFUX0xFTiwKKwkJCQkgIGZsLT5zaXplICogc2l6ZW9mKCpmbC0+ZGVzYykgKyBzLT5zdGF0X2xlbiwKIAkJCQkgIGZsLT5kZXNjLCBmbC0+YWRkcik7CiAJCWtmcmVlKGZsLT5zZGVzYyk7CiAJCWZsLT5zZGVzYyA9IE5VTEw7CkBAIC0yNDIzLDYgKzI0MzAsNyBAQAogCXUzMiBmbDAgPSBzZ2VfcGFyYW1zLT5zZ2VfZmxfYnVmZmVyX3NpemVbMF07CiAJdTMyIGZsMSA9IHNnZV9wYXJhbXMtPnNnZV9mbF9idWZmZXJfc2l6ZVsxXTsKIAlzdHJ1Y3Qgc2dlICpzID0gJmFkYXB0ZXItPnNnZTsKKwl1bnNpZ25lZCBpbnQgaW5ncGFkYm91bmRhcnksIGluZ3BhY2tib3VuZGFyeTsKIAogCS8qCiAJICogU3RhcnQgYnkgdmV0dGluZyB0aGUgYmFzaWMgU0dFIHBhcmFtZXRlcnMgd2hpY2ggaGF2ZSBiZWVuIHNldCB1cCBieQpAQCAtMjQ0MywxMiArMjQ1MSw0OCBAQAogCSAqIE5vdyB0cmFuc2xhdGUgdGhlIGFkYXB0ZXIgcGFyYW1ldGVycyBpbnRvIG91ciBpbnRlcm5hbCBmb3Jtcy4KIAkgKi8KIAlpZiAoZmwxKQotCQlGTF9QR19PUkRFUiA9IGlsb2cyKGZsMSkgLSBQQUdFX1NISUZUOwotCVNUQVRfTEVOID0gKChzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCAmIEVHUlNUQVRVU1BBR0VTSVpFX01BU0spCi0JCSAgICA/IDEyOCA6IDY0KTsKLQlQS1RTSElGVCA9IFBLVFNISUZUX0dFVChzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCk7Ci0JRkxfQUxJR04gPSAxIDw8IChJTkdQQURCT1VOREFSWV9HRVQoc2dlX3BhcmFtcy0+c2dlX2NvbnRyb2wpICsKLQkJCSBTR0VfSU5HUEFEQk9VTkRBUllfU0hJRlQpOworCQlzLT5mbF9wZ19vcmRlciA9IGlsb2cyKGZsMSkgLSBQQUdFX1NISUZUOworCXMtPnN0YXRfbGVuID0gKChzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCAmIEVHUlNUQVRVU1BBR0VTSVpFX01BU0spCisJCQk/IDEyOCA6IDY0KTsKKwlzLT5wa3RzaGlmdCA9IFBLVFNISUZUX0dFVChzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCk7CisKKwkvKiBUNCB1c2VzIGEgc2luZ2xlIGNvbnRyb2wgZmllbGQgdG8gc3BlY2lmeSBib3RoIHRoZSBQQ0llIFBhZGRpbmcgYW5kCisJICogUGFja2luZyBCb3VuZGFyeS4gIFQ1IGludHJvZHVjZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSB0aGVzZQorCSAqIHNlcGFyYXRlbHkuICBUaGUgYWN0dWFsIEluZ3Jlc3MgUGFja2V0IERhdGEgYWxpZ25tZW50IGJvdW5kYXJ5CisJICogd2l0aGluIFBhY2tlZCBCdWZmZXIgTW9kZSBpcyB0aGUgbWF4aW11bSBvZiB0aGVzZSB0d28KKwkgKiBzcGVjaWZpY2F0aW9ucy4gIChOb3RlIHRoYXQgaXQgbWFrZXMgbm8gcmVhbCBwcmFjdGljYWwgc2Vuc2UgdG8KKwkgKiBoYXZlIHRoZSBQYWRpbmcgQm91ZGFyeSBiZSBsYXJnZXIgdGhhbiB0aGUgUGFja2luZyBCb3VuZGFyeSBidXQgeW91CisJICogY291bGQgc2V0IHRoZSBjaGlwIHVwIHRoYXQgd2F5IGFuZCwgaW4gZmFjdCwgbGVnYWN5IFQ0IGNvZGUgd291bGQKKwkgKiBlbmQgZG9pbmcgdGhpcyBiZWNhdXNlIGl0IHdvdWxkIGluaXRpYWxpemUgdGhlIFBhZGRpbmcgQm91bmRhcnkgYW5kCisJICogbGVhdmUgdGhlIFBhY2tpbmcgQm91bmRhcnkgaW5pdGlhbGl6ZWQgdG8gMCAoMTYgYnl0ZXMpLikKKwkgKi8KKwlpbmdwYWRib3VuZGFyeSA9IDEgPDwgKElOR1BBREJPVU5EQVJZX0dFVChzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCkgKworCQkJICAgICAgIFhfSU5HUEFEQk9VTkRBUllfU0hJRlQpOworCWlmIChpc190NChhZGFwdGVyLT5wYXJhbXMuY2hpcCkpIHsKKwkJcy0+ZmxfYWxpZ24gPSBpbmdwYWRib3VuZGFyeTsKKwl9IGVsc2UgeworCQkvKiBUNSBoYXMgYSBkaWZmZXJlbnQgaW50ZXJwcmV0YXRpb24gb2Ygb25lIG9mIHRoZSBQQ0llIFBhY2tpbmcKKwkJICogQm91bmRhcnkgdmFsdWVzLgorCQkgKi8KKwkJaW5ncGFja2JvdW5kYXJ5ID0gSU5HUEFDS0JPVU5EQVJZX0coc2dlX3BhcmFtcy0+c2dlX2NvbnRyb2wyKTsKKwkJaWYgKGluZ3BhY2tib3VuZGFyeSA9PSBJTkdQQUNLQk9VTkRBUllfMTZCX1gpCisJCQlpbmdwYWNrYm91bmRhcnkgPSAxNjsKKwkJZWxzZQorCQkJaW5ncGFja2JvdW5kYXJ5ID0gMSA8PCAoaW5ncGFja2JvdW5kYXJ5ICsKKwkJCQkJCUlOR1BBQ0tCT1VOREFSWV9TSElGVF9YKTsKKworCQlzLT5mbF9hbGlnbiA9IG1heChpbmdwYWRib3VuZGFyeSwgaW5ncGFja2JvdW5kYXJ5KTsKKwl9CisKKwkvKiBBIEZMIHdpdGggPD0gZmxfc3RhcnZlX3RocmVzIGJ1ZmZlcnMgaXMgc3RhcnZpbmcgYW5kIGEgcGVyaW9kaWMKKwkgKiB0aW1lciB3aWxsIGF0dGVtcHQgdG8gcmVmaWxsIGl0LiAgVGhpcyBuZWVkcyB0byBiZSBsYXJnZXIgdGhhbiB0aGUKKwkgKiBTR0UncyBFZ3Jlc3MgQ29uZ2VzdGlvbiBUaHJlc2hvbGQuICBJZiBpdCBpc24ndCwgdGhlbiB3ZSBjYW4gZ2V0CisJICogc3R1Y2sgd2FpdGluZyBmb3IgbmV3IHBhY2tldHMgd2hpbGUgdGhlIFNHRSBpcyB3YWl0aW5nIGZvciB1cyB0bworCSAqIGdpdmUgaXQgbW9yZSBGcmVlIExpc3QgZW50cmllcy4gIChOb3RlIHRoYXQgdGhlIFNHRSdzIEVncmVzcworCSAqIENvbmdlc3Rpb24gVGhyZXNob2xkIGlzIGluIHVuaXRzIG9mIDIgRnJlZSBMaXN0IHBvaW50ZXJzLikKKwkgKi8KKwlzLT5mbF9zdGFydmVfdGhyZXMKKwkJPSBFR1JUSFJFU0hPTERfR0VUKHNnZV9wYXJhbXMtPnNnZV9jb25nZXN0aW9uX2NvbnRyb2wpKjIgKyAxOwogCiAJLyoKIAkgKiBTZXQgdXAgdGFza2xldCB0aW1lcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2NvbW1vbi5oCmluZGV4IDk1ZGY2MWQuLjRiNmE2ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2NvbW1vbi5oCkBAIC0xMzQsMTEgKzEzNCwxMyBAQAogICovCiBzdHJ1Y3Qgc2dlX3BhcmFtcyB7CiAJdTMyIHNnZV9jb250cm9sOwkJLyogcGFkZGluZywgYm91bmRhcmllcywgbGVuZ3RocywgZXRjLiAqLworCXUzMiBzZ2VfY29udHJvbDI7CQkvKiBUNTogbW9yZSBvZiB0aGUgc2FtZSAqLwogCXUzMiBzZ2VfaG9zdF9wYWdlX3NpemU7CQkvKiBSRE1BIHBhZ2Ugc2l6ZXMgKi8KIAl1MzIgc2dlX3F1ZXVlc19wZXJfcGFnZTsJLyogUkRNQSBxdWV1ZXMvcGFnZSAqLwogCXUzMiBzZ2VfdXNlcl9tb2RlX2xpbWl0czsJLyogbGltaXRzIGZvciBCQVIyIHVzZXIgbW9kZSBhY2Nlc3NlcyAqLwogCXUzMiBzZ2VfZmxfYnVmZmVyX3NpemVbMTZdOwkvKiBmcmVlIGxpc3QgYnVmZmVyIHNpemVzICovCiAJdTMyIHNnZV9pbmdyZXNzX3J4X3RocmVzaG9sZDsJLyogUlggY291bnRlciBpbnRlcnJ1cHQgdGhyZXNob2xkWzRdICovCisJdTMyIHNnZV9jb25nZXN0aW9uX2NvbnRyb2w7ICAgICAvKiBjb25nZXN0aW9uIHRocmVzaG9sZHMsIGV0Yy4gKi8KIAl1MzIgc2dlX3RpbWVyX3ZhbHVlXzBfYW5kXzE7CS8qIGludGVycnVwdCBjb2FsZXNjaW5nIHRpbWVyIHZhbHVlcyAqLwogCXUzMiBzZ2VfdGltZXJfdmFsdWVfMl9hbmRfMzsKIAl1MzIgc2dlX3RpbWVyX3ZhbHVlXzRfYW5kXzU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfaHcuYwppbmRleCBlOTg0ZmRjLi4xZTg5NmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2h3LmMKQEAgLTQ2OCwxMiArNDY4LDM4IEBACiAJc2dlX3BhcmFtcy0+c2dlX3RpbWVyX3ZhbHVlXzJfYW5kXzMgPSB2YWxzWzVdOwogCXNnZV9wYXJhbXMtPnNnZV90aW1lcl92YWx1ZV80X2FuZF81ID0gdmFsc1s2XTsKIAorCS8qIFQ0IHVzZXMgYSBzaW5nbGUgY29udHJvbCBmaWVsZCB0byBzcGVjaWZ5IGJvdGggdGhlIFBDSWUgUGFkZGluZyBhbmQKKwkgKiBQYWNraW5nIEJvdW5kYXJ5LiAgVDUgaW50cm9kdWNlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IHRoZXNlCisJICogc2VwYXJhdGVseSB3aXRoIHRoZSBQYWRkaW5nIEJvdW5kYXJ5IGluIFNHRV9DT05UUk9MIGFuZCBhbmQgUGFja2luZworCSAqIEJvdW5kYXJ5IGluIFNHRV9DT05UUk9MMi4gIFNvIGZvciBUNSBhbmQgbGF0ZXIgd2UgbmVlZCB0byBncmFiCisJICogU0dFX0NPTlRST0wgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGhvdyBpbmdyZXNzIHBhY2tldCBkYXRhIHdpbGwgYmUKKwkgKiBsYWlkIG91dCBpbiBQYWNrZWQgQnVmZmVyIE1vZGUuICBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZgorCSAqIHRoZSBmaXJtd2FyZSB3b24ndCBsZXQgdXMgcmV0cmlldmUgU0dFX0NPTlRST0wyIHNvIGlmIHdlIGdldCBhCisJICogZmFpbHVyZSBncmFiYmluZyBpdCB3ZSB0aHJvdyBhbiBlcnJvciBzaW5jZSB3ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZQorCSAqIHJpZ2h0IHZhbHVlLgorCSAqLworCWlmICghaXNfdDQoYWRhcHRlci0+cGFyYW1zLmNoaXApKSB7CisJCXBhcmFtc1swXSA9IChGV19QQVJBTVNfTU5FTShGV19QQVJBTVNfTU5FTV9SRUcpIHwKKwkJCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWihTR0VfQ09OVFJPTDJfQSkpOworCQl2ID0gdDR2Zl9xdWVyeV9wYXJhbXMoYWRhcHRlciwgMSwgcGFyYW1zLCB2YWxzKTsKKwkJaWYgKHYgIT0gRldfU1VDQ0VTUykgeworCQkJZGV2X2VycihhZGFwdGVyLT5wZGV2X2RldiwKKwkJCQkiVW5hYmxlIHRvIGdldCBTR0UgQ29udHJvbDI7ICIKKwkJCQkicHJvYmFibHkgb2xkIGZpcm13YXJlLlxuIik7CisJCQlyZXR1cm4gdjsKKwkJfQorCQlzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbDIgPSB2YWxzWzBdOworCX0KKwogCXBhcmFtc1swXSA9IChGV19QQVJBTVNfTU5FTShGV19QQVJBTVNfTU5FTV9SRUcpIHwKIAkJICAgICBGV19QQVJBTVNfUEFSQU1fWFlaKFNHRV9JTkdSRVNTX1JYX1RIUkVTSE9MRCkpOwotCXYgPSB0NHZmX3F1ZXJ5X3BhcmFtcyhhZGFwdGVyLCAxLCBwYXJhbXMsIHZhbHMpOworCXBhcmFtc1sxXSA9IChGV19QQVJBTVNfTU5FTShGV19QQVJBTVNfTU5FTV9SRUcpIHwKKwkJICAgICBGV19QQVJBTVNfUEFSQU1fWFlaKFNHRV9DT05NX0NUUkwpKTsKKwl2ID0gdDR2Zl9xdWVyeV9wYXJhbXMoYWRhcHRlciwgMiwgcGFyYW1zLCB2YWxzKTsKIAlpZiAodikKIAkJcmV0dXJuIHY7CiAJc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkID0gdmFsc1swXTsKKwlzZ2VfcGFyYW1zLT5zZ2VfY29uZ2VzdGlvbl9jb250cm9sID0gdmFsc1sxXTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMKaW5kZXggMTgwZTUzZi4uNzNjZjE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jCkBAIC05NDAsMTggKzk0MCw4IEBACiAJc3RydWN0IHZuaWNfcnFfYnVmICpidWYgPSBycS0+dG9fdXNlOwogCiAJaWYgKGJ1Zi0+b3NfYnVmKSB7Ci0JCWJ1ZiA9IGJ1Zi0+bmV4dDsKLQkJcnEtPnRvX3VzZSA9IGJ1ZjsKLQkJcnEtPnJpbmcuZGVzY19hdmFpbC0tOwotCQlpZiAoKGJ1Zi0+aW5kZXggJiBWTklDX1JRX1JFVFVSTl9SQVRFKSA9PSAwKSB7Ci0JCQkvKiBBZGRpbmcgd3JpdGUgbWVtb3J5IGJhcnJpZXIgcHJldmVudHMgY29tcGlsZXIgYW5kL29yCi0JCQkgKiBDUFUgcmVvcmRlcmluZywgdGh1cyBhdm9pZGluZyBkZXNjcmlwdG9yIHBvc3RpbmcKLQkJCSAqIGJlZm9yZSBkZXNjcmlwdG9yIGlzIGluaXRpYWxpemVkLiBPdGhlcndpc2UsIGhhcmR3YXJlCi0JCQkgKiBjYW4gcmVhZCBzdGFsZSBkZXNjcmlwdG9yIGZpZWxkcy4KLQkJCSAqLwotCQkJd21iKCk7Ci0JCQlpb3dyaXRlMzIoYnVmLT5pbmRleCwgJnJxLT5jdHJsLT5wb3N0ZWRfaW5kZXgpOwotCQl9CisJCWVuaWNfcXVldWVfcnFfZGVzYyhycSwgYnVmLT5vc19idWYsIG9zX2J1Zl9pbmRleCwgYnVmLT5kbWFfYWRkciwKKwkJCQkgICBidWYtPmxlbik7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTAzNyw3ICsxMDI3LDEwIEBACiAJCQkJZW5pYy0+cnFfdHJ1bmNhdGVkX3BrdHMrKzsKIAkJfQogCisJCXBjaV91bm1hcF9zaW5nbGUoZW5pYy0+cGRldiwgYnVmLT5kbWFfYWRkciwgYnVmLT5sZW4sCisJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWJ1Zi0+b3NfYnVmID0gTlVMTDsKIAogCQlyZXR1cm47CiAJfQpAQCAtMTA4OCw3ICsxMDgxLDEwIEBACiAJCS8qIEJ1ZmZlciBvdmVyZmxvdwogCQkgKi8KIAorCQlwY2lfdW5tYXBfc2luZ2xlKGVuaWMtPnBkZXYsIGJ1Zi0+ZG1hX2FkZHIsIGJ1Zi0+bGVuLAorCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlidWYtPm9zX2J1ZiA9IE5VTEw7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYwppbmRleCA5YTE4ZTc5Li41OTdjNDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKQEAgLTQzMDksMTEgKzQzMDksMTYgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJYnJfc3BlYyA9IG5sbXNnX2ZpbmRfYXR0cihubGgsIHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSwgSUZMQV9BRl9TUEVDKTsKKwlpZiAoIWJyX3NwZWMpCisJCXJldHVybiAtRUlOVkFMOwogCiAJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBicl9zcGVjLCByZW0pIHsKIAkJaWYgKG5sYV90eXBlKGF0dHIpICE9IElGTEFfQlJJREdFX01PREUpCiAJCQljb250aW51ZTsKIAorCQlpZiAobmxhX2xlbihhdHRyKSA8IHNpemVvZihtb2RlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCiAJCW1vZGUgPSBubGFfZ2V0X3UxNihhdHRyKTsKIAkJaWYgKG1vZGUgIT0gQlJJREdFX01PREVfVkVQQSAmJiBtb2RlICE9IEJSSURHRV9NT0RFX1ZFQikKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDQyMSw2ICs0NDI2LDExIEBACiAJCSAiRGlzYWJsZWQgVnhMQU4gb2ZmbG9hZHMgZm9yIFVEUCBwb3J0ICVkXG4iLAogCQkgYmUxNl90b19jcHUocG9ydCkpOwogfQorCitzdGF0aWMgYm9vbCBiZV9nc29fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdnhsYW5fZ3NvX2NoZWNrKHNrYik7Cit9CiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiZV9uZXRkZXZfb3BzID0gewpAQCAtNDQ1MCw2ICs0NDYwLDcgQEAKICNpZmRlZiBDT05GSUdfQkUyTkVUX1ZYTEFOCiAJLm5kb19hZGRfdnhsYW5fcG9ydAk9IGJlX2FkZF92eGxhbl9wb3J0LAogCS5uZG9fZGVsX3Z4bGFuX3BvcnQJPSBiZV9kZWxfdnhsYW5fcG9ydCwKKwkubmRvX2dzb19jaGVjawkJPSBiZV9nc29fY2hlY2ssCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKaW5kZXggNTBhODUxZC4uM2RjYTQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKQEAgLTI5OCw2ICsyOTgsMTYgQEAKIAlyZXR1cm4gYnVmYWRkcjsKIH0KIAorc3RhdGljIHZvaWQgc3dhcF9idWZmZXIyKHZvaWQgKmRzdF9idWYsIHZvaWQgKnNyY19idWYsIGludCBsZW4pCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50ICpzcmMgPSBzcmNfYnVmOworCXVuc2lnbmVkIGludCAqZHN0ID0gZHN0X2J1ZjsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCwgc3JjKyssIGRzdCsrKQorCQkqZHN0ID0gc3dhYjMycChzcmMpOworfQorCiBzdGF0aWMgdm9pZCBmZWNfZHVtcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC0xMzA3LDcgKzEzMTcsNyBAQAogfQogCiBzdGF0aWMgYm9vbCBmZWNfZW5ldF9jb3B5YnJlYWsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBza19idWZmICoqc2tiLAotCQkJICAgICAgIHN0cnVjdCBidWZkZXNjICpiZHAsIHUzMiBsZW5ndGgpCisJCQkgICAgICAgc3RydWN0IGJ1ZmRlc2MgKmJkcCwgdTMyIGxlbmd0aCwgYm9vbCBzd2FwKQogewogCXN0cnVjdCAgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CkBAIC0xMzIyLDcgKzEzMzIsMTAgQEAKIAlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmZmVwLT5wZGV2LT5kZXYsIGJkcC0+Y2JkX2J1ZmFkZHIsCiAJCQkJRkVDX0VORVRfUlhfRlJTSVpFIC0gZmVwLT5yeF9hbGlnbiwKIAkJCQlETUFfRlJPTV9ERVZJQ0UpOwotCW1lbWNweShuZXdfc2tiLT5kYXRhLCAoKnNrYiktPmRhdGEsIGxlbmd0aCk7CisJaWYgKCFzd2FwKQorCQltZW1jcHkobmV3X3NrYi0+ZGF0YSwgKCpza2IpLT5kYXRhLCBsZW5ndGgpOworCWVsc2UKKwkJc3dhcF9idWZmZXIyKG5ld19za2ItPmRhdGEsICgqc2tiKS0+ZGF0YSwgbGVuZ3RoKTsKIAkqc2tiID0gbmV3X3NrYjsKIAogCXJldHVybiB0cnVlOwpAQCAtMTM1Miw2ICsxMzY1LDcgQEAKIAl1MTYJdmxhbl90YWc7CiAJaW50CWluZGV4ID0gMDsKIAlib29sCWlzX2NvcHlicmVhazsKKwlib29sCW5lZWRfc3dhcCA9IGlkX2VudHJ5LT5kcml2ZXJfZGF0YSAmIEZFQ19RVUlSS19TV0FQX0ZSQU1FOwogCiAjaWZkZWYgQ09ORklHX001MzJ4CiAJZmx1c2hfY2FjaGVfYWxsKCk7CkBAIC0xNDE1LDcgKzE0MjksOCBAQAogCQkgKiBpbmNsdWRlIHRoYXQgd2hlbiBwYXNzaW5nIHVwc3RyZWFtIGFzIGl0IG1lc3NlcyB1cAogCQkgKiBicmlkZ2luZyBhcHBsaWNhdGlvbnMuCiAJCSAqLwotCQlpc19jb3B5YnJlYWsgPSBmZWNfZW5ldF9jb3B5YnJlYWsobmRldiwgJnNrYiwgYmRwLCBwa3RfbGVuIC0gNCk7CisJCWlzX2NvcHlicmVhayA9IGZlY19lbmV0X2NvcHlicmVhayhuZGV2LCAmc2tiLCBiZHAsIHBrdF9sZW4gLSA0LAorCQkJCQkJICBuZWVkX3N3YXApOwogCQlpZiAoIWlzX2NvcHlicmVhaykgewogCQkJc2tiX25ldyA9IG5ldGRldl9hbGxvY19za2IobmRldiwgRkVDX0VORVRfUlhfRlJTSVpFKTsKIAkJCWlmICh1bmxpa2VseSghc2tiX25ldykpIHsKQEAgLTE0MzAsNyArMTQ0NSw3IEBACiAJCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CiAJCXNrYl9wdXQoc2tiLCBwa3RfbGVuIC0gNCk7CiAJCWRhdGEgPSBza2ItPmRhdGE7Ci0JCWlmIChpZF9lbnRyeS0+ZHJpdmVyX2RhdGEgJiBGRUNfUVVJUktfU1dBUF9GUkFNRSkKKwkJaWYgKCFpc19jb3B5YnJlYWsgJiYgbmVlZF9zd2FwKQogCQkJc3dhcF9idWZmZXIoZGF0YSwgcGt0X2xlbik7CiAKIAkJLyogRXh0cmFjdCB0aGUgZW5oYW5jZWQgYnVmZmVyIGRlc2NyaXB0b3IgKi8KQEAgLTMzNDMsMTIgKzMzNTgsMTEgQEAKIAkJbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsKIAkJbmV0aWZfdHhfdW5sb2NrX2JoKG5kZXYpOwogCQlmZWNfc3RvcChuZGV2KTsKKwkJZmVjX2VuZXRfY2xrX2VuYWJsZShuZGV2LCBmYWxzZSk7CisJCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKCZmZXAtPnBkZXYtPmRldik7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CiAKLQlmZWNfZW5ldF9jbGtfZW5hYmxlKG5kZXYsIGZhbHNlKTsKLQlwaW5jdHJsX3BtX3NlbGVjdF9zbGVlcF9zdGF0ZSgmZmVwLT5wZGV2LT5kZXYpOwotCiAJaWYgKGZlcC0+cmVnX3BoeSkKIAkJcmVndWxhdG9yX2Rpc2FibGUoZmVwLT5yZWdfcGh5KTsKIApAQCAtMzM2NywxMyArMzM4MSwxNCBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlwaW5jdHJsX3BtX3NlbGVjdF9kZWZhdWx0X3N0YXRlKCZmZXAtPnBkZXYtPmRldik7Ci0JcmV0ID0gZmVjX2VuZXRfY2xrX2VuYWJsZShuZGV2LCB0cnVlKTsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWxlZF9jbGs7Ci0KIAlydG5sX2xvY2soKTsKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQlwaW5jdHJsX3BtX3NlbGVjdF9kZWZhdWx0X3N0YXRlKCZmZXAtPnBkZXYtPmRldik7CisJCXJldCA9IGZlY19lbmV0X2Nsa19lbmFibGUobmRldiwgdHJ1ZSk7CisJCWlmIChyZXQpIHsKKwkJCXJ0bmxfdW5sb2NrKCk7CisJCQlnb3RvIGZhaWxlZF9jbGs7CisJCX0KIAkJZmVjX3Jlc3RhcnQobmRldik7CiAJCW5ldGlmX3R4X2xvY2tfYmgobmRldik7CiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jCmluZGV4IGEyZDcyYTguLjQ4N2NkOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jCkBAIC0xMDEyLDcgKzEwMTIsOCBAQAogCS8qIGlnYl9nZXRfc3RhdHM2NCgpIG1pZ2h0IGFjY2VzcyB0aGUgcmluZ3Mgb24gdGhpcyB2ZWN0b3IsCiAJICogd2UgbXVzdCB3YWl0IGEgZ3JhY2UgcGVyaW9kIGJlZm9yZSBmcmVlaW5nIGl0LgogCSAqLwotCWtmcmVlX3JjdShxX3ZlY3RvciwgcmN1KTsKKwlpZiAocV92ZWN0b3IpCisJCWtmcmVlX3JjdShxX3ZlY3RvciwgcmN1KTsKIH0KIAogLyoqCkBAIC0xNzkyLDggKzE3OTMsMTAgQEAKIAlhZGFwdGVyLT5mbGFncyAmPSB+SUdCX0ZMQUdfTkVFRF9MSU5LX1VQREFURTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcV92ZWN0b3JzOyBpKyspIHsKLQkJbmFwaV9zeW5jaHJvbml6ZSgmKGFkYXB0ZXItPnFfdmVjdG9yW2ldLT5uYXBpKSk7Ci0JCW5hcGlfZGlzYWJsZSgmKGFkYXB0ZXItPnFfdmVjdG9yW2ldLT5uYXBpKSk7CisJCWlmIChhZGFwdGVyLT5xX3ZlY3RvcltpXSkgeworCQkJbmFwaV9zeW5jaHJvbml6ZSgmYWRhcHRlci0+cV92ZWN0b3JbaV0tPm5hcGkpOworCQkJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5xX3ZlY3RvcltpXS0+bmFwaSk7CisJCX0KIAl9CiAKIApAQCAtMzcxNyw3ICszNzIwLDggQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWlnYl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJaWYgKGFkYXB0ZXItPnR4X3JpbmdbaV0pCisJCQlpZ2JfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlci0+dHhfcmluZ1tpXSk7CiB9CiAKIHZvaWQgaWdiX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpZ2JfcmluZyAqcmluZywKQEAgLTM3ODIsNyArMzc4Niw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpZ2JfY2xlYW5fdHhfcmluZyhhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJaWYgKGFkYXB0ZXItPnR4X3JpbmdbaV0pCisJCQlpZ2JfY2xlYW5fdHhfcmluZyhhZGFwdGVyLT50eF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC0zODE5LDcgKzM4MjQsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJaWdiX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlpZiAoYWRhcHRlci0+cnhfcmluZ1tpXSkKKwkJCWlnYl9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC0zODc0LDcgKzM4ODAsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJaWdiX2NsZWFuX3J4X3JpbmcoYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlmIChhZGFwdGVyLT5yeF9yaW5nW2ldKQorCQkJaWdiX2NsZWFuX3J4X3JpbmcoYWRhcHRlci0+cnhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtNzQwNCw2ICs3NDExLDggQEAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAorCWlmICghcGNpX2RldmljZV9pc19wcmVzZW50KHBkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggZDJkZjRlMy4uY2M1MTU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtMzkzNiw4ICszOTM2LDggQEAKIAkJICogaWYgU1ItSU9WIGFuZCBWTURRIGFyZSBkaXNhYmxlZCAtIG90aGVyd2lzZSBlbnN1cmUKIAkJICogdGhhdCBoYXJkd2FyZSBWTEFOIGZpbHRlcnMgcmVtYWluIGVuYWJsZWQuCiAJCSAqLwotCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIChJWEdCRV9GTEFHX1ZNRFFfRU5BQkxFRCB8Ci0JCQkJCUlYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkpKQorCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiAoSVhHQkVfRkxBR19WTURRX0VOQUJMRUQgfAorCQkJCSAgICAgIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkpCiAJCQl2bG5jdHJsIHw9IChJWEdCRV9WTE5DVFJMX1ZGRSB8IElYR0JFX1ZMTkNUUkxfQ0ZJRU4pOwogCX0gZWxzZSB7CiAJCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CkBAIC03NjY5LDYgKzc2NjksOCBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlicl9zcGVjID0gbmxtc2dfZmluZF9hdHRyKG5saCwgc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpLCBJRkxBX0FGX1NQRUMpOworCWlmICghYnJfc3BlYykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGJyX3NwZWMsIHJlbSkgewogCQlfX3UxNiBtb2RlOwpAQCAtNzY3Nyw2ICs3Njc5LDkgQEAKIAkJaWYgKG5sYV90eXBlKGF0dHIpICE9IElGTEFfQlJJREdFX01PREUpCiAJCQljb250aW51ZTsKIAorCQlpZiAobmxhX2xlbihhdHRyKSA8IHNpemVvZihtb2RlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCiAJCW1vZGUgPSBubGFfZ2V0X3UxNihhdHRyKTsKIAkJaWYgKG1vZGUgPT0gQlJJREdFX01PREVfVkVQQSkgewogCQkJcmVnID0gMDsKQEAgLTc5NzksNiArNzk4NCw3IEBACiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYywgZXhwZWN0ZWRfZ3RzOwogCXVuc2lnbmVkIGludCBpbmRpY2VzID0gTUFYX1RYX1FVRVVFUzsKIAl1OCBwYXJ0X3N0cltJWEdCRV9QQkFOVU1fTEVOR1RIXTsKKwlib29sIGRpc2FibGVfZGV2ID0gZmFsc2U7CiAjaWZkZWYgSVhHQkVfRkNPRQogCXUxNiBkZXZpY2VfY2FwczsKICNlbmRpZgpAQCAtODM2OSwxMyArODM3NSwxNCBAQAogCWlvdW5tYXAoYWRhcHRlci0+aW9fYWRkcik7CiAJa2ZyZWUoYWRhcHRlci0+bWFjX3RhYmxlKTsKIGVycl9pb3JlbWFwOgorCWRpc2FibGVfZGV2ID0gIXRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9ESVNBQkxFRCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlmcmVlX25ldGRldihuZXRkZXYpOwogZXJyX2FsbG9jX2V0aGVyZGV2OgogCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwKIAkJCQkgICAgIHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSkpOwogZXJyX3BjaV9yZWc6CiBlcnJfZG1hOgotCWlmICghYWRhcHRlciB8fCAhdGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX0RJU0FCTEVELCAmYWRhcHRlci0+c3RhdGUpKQorCWlmICghYWRhcHRlciB8fCBkaXNhYmxlX2RldikKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXJldHVybiBlcnI7CiB9CkBAIC04MzkzLDYgKzg0MDAsNyBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJYm9vbCBkaXNhYmxlX2RldjsKIAogCWl4Z2JlX2RiZ19hZGFwdGVyX2V4aXQoYWRhcHRlcik7CiAKQEAgLTg0NDIsMTEgKzg0NTAsMTIgQEAKIAllX2Rldl9pbmZvKCJjb21wbGV0ZVxuIik7CiAKIAlrZnJlZShhZGFwdGVyLT5tYWNfdGFibGUpOworCWRpc2FibGVfZGV2ID0gIXRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9ESVNBQkxFRCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlmcmVlX25ldGRldihuZXRkZXYpOwogCiAJcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CiAKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9ESVNBQkxFRCwgJmFkYXB0ZXItPnN0YXRlKSkKKwlpZiAoZGlzYWJsZV9kZXYpCiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYwppbmRleCBkNDdiMTlmLi4yOGI4MWFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMKQEAgLTYzNSw3ICs2MzUsNiBAQAogICoqLwogczMyIGl4Z2JlX3NldHVwX3BoeV9saW5rX3RueChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewotCXMzMiBzdGF0dXM7CiAJdTE2IGF1dG9uZWdfcmVnID0gSVhHQkVfTUlJX0FVVE9ORUdfUkVHOwogCWJvb2wgYXV0b25lZyA9IGZhbHNlOwogCWl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQ7CkBAIC03MDAsOCArNjk5LDcgQEAKIAogCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgTURJT19DVFJMMSwKIAkJCSAgICAgIE1ESU9fTU1EX0FOLCBhdXRvbmVnX3JlZyk7Ci0KLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYwppbmRleCBiMTUxYTk0Li5kNDQ1NjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jCkBAIC0xMDQ3LDcgKzEwNDcsNiBAQAogCQlpbnQgdHhfaW5kZXg7CiAJCXN0cnVjdCB0eF9kZXNjICpkZXNjOwogCQl1MzIgY21kX3N0czsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCQl0eF9pbmRleCA9IHR4cS0+dHhfdXNlZF9kZXNjOwogCQlkZXNjID0gJnR4cS0+dHhfZGVzY19hcmVhW3R4X2luZGV4XTsKQEAgLTEwNjYsMTkgKzEwNjUsMjIgQEAKIAkJcmVjbGFpbWVkKys7CiAJCXR4cS0+dHhfZGVzY19jb3VudC0tOwogCi0JCXNrYiA9IE5VTEw7Ci0JCWlmIChjbWRfc3RzICYgVFhfTEFTVF9ERVNDKQotCQkJc2tiID0gX19za2JfZGVxdWV1ZSgmdHhxLT50eF9za2IpOworCQlpZiAoIUlTX1RTT19IRUFERVIodHhxLCBkZXNjLT5idWZfcHRyKSkKKwkJCWRtYV91bm1hcF9zaW5nbGUobXAtPmRldi0+ZGV2LnBhcmVudCwgZGVzYy0+YnVmX3B0ciwKKwkJCQkJIGRlc2MtPmJ5dGVfY250LCBETUFfVE9fREVWSUNFKTsKKworCQlpZiAoY21kX3N0cyAmIFRYX0VOQUJMRV9JTlRFUlJVUFQpIHsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKCZ0eHEtPnR4X3NrYik7CisKKwkJCWlmICghV0FSTl9PTighc2tiKSkKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCX0KIAogCQlpZiAoY21kX3N0cyAmIEVSUk9SX1NVTU1BUlkpIHsKIAkJCW5ldGRldl9pbmZvKG1wLT5kZXYsICJ0eCBlcnJvclxuIik7CiAJCQltcC0+ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJfQogCi0JCWlmICghSVNfVFNPX0hFQURFUih0eHEsIGRlc2MtPmJ1Zl9wdHIpKQotCQkJZG1hX3VubWFwX3NpbmdsZShtcC0+ZGV2LT5kZXYucGFyZW50LCBkZXNjLT5idWZfcHRyLAotCQkJCQkgZGVzYy0+Ynl0ZV9jbnQsIERNQV9UT19ERVZJQ0UpOwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQogCiAJX19uZXRpZl90eF91bmxvY2tfYmgobnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi5jCmluZGV4IGVjZTgzZjEuLmZkZjNlMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyLmMKQEAgLTE2OTIsNiArMTY5Miw3IEBACiB7CiAJc3RydWN0IG12cHAyX3Byc19lbnRyeSAqcGU7CiAJaW50IHRpZF9hdXgsIHRpZDsKKwlpbnQgcmV0ID0gMDsKIAogCXBlID0gbXZwcDJfcHJzX3ZsYW5fZmluZChwcml2LCB0cGlkLCBhaSk7CiAKQEAgLTE3MjMsOCArMTcyNCwxMCBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKHRpZCA8PSB0aWRfYXV4KQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh0aWQgPD0gdGlkX2F1eCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KIAogCQltZW1zZXQocGUsIDAgLCBzaXplb2Yoc3RydWN0IG12cHAyX3Byc19lbnRyeSkpOwogCQltdnBwMl9wcnNfdGNhbV9sdV9zZXQocGUsIE1WUFAyX1BSU19MVV9WTEFOKTsKQEAgLTE3NTYsOSArMTc1OSwxMCBAQAogCiAJbXZwcDJfcHJzX2h3X3dyaXRlKHByaXYsIHBlKTsKIAorZXJyb3I6CiAJa2ZyZWUocGUpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyogR2V0IGZpcnN0IGZyZWUgZG91YmxlIHZsYW4gYWkgbnVtYmVyICovCkBAIC0xODIxLDcgKzE4MjUsNyBAQAogCQkJCSAgICAgdW5zaWduZWQgaW50IHBvcnRfbWFwKQogewogCXN0cnVjdCBtdnBwMl9wcnNfZW50cnkgKnBlOwotCWludCB0aWRfYXV4LCB0aWQsIGFpOworCWludCB0aWRfYXV4LCB0aWQsIGFpLCByZXQgPSAwOwogCiAJcGUgPSBtdnBwMl9wcnNfZG91YmxlX3ZsYW5fZmluZChwcml2LCB0cGlkMSwgdHBpZDIpOwogCkBAIC0xODM4LDggKzE4NDIsMTAgQEAKIAogCQkvKiBTZXQgYWkgdmFsdWUgZm9yIG5ldyBkb3VibGUgdmxhbiBlbnRyeSAqLwogCQlhaSA9IG12cHAyX3Byc19kb3VibGVfdmxhbl9haV9mcmVlX2dldChwcml2KTsKLQkJaWYgKGFpIDwgMCkKLQkJCXJldHVybiBhaTsKKwkJaWYgKGFpIDwgMCkgeworCQkJcmV0ID0gYWk7CisJCQlnb3RvIGVycm9yOworCQl9CiAKIAkJLyogR2V0IGZpcnN0IHNpbmdsZS90cmlwbGUgdmxhbiB0aWQgKi8KIAkJZm9yICh0aWRfYXV4ID0gTVZQUDJfUEVfRklSU1RfRlJFRV9USUQ7CkBAIC0xODU5LDggKzE4NjUsMTAgQEAKIAkJCQlicmVhazsKIAkJfQogCi0JCWlmICh0aWQgPj0gdGlkX2F1eCkKLQkJCXJldHVybiAtRVJBTkdFOworCQlpZiAodGlkID49IHRpZF9hdXgpIHsKKwkJCXJldCA9IC1FUkFOR0U7CisJCQlnb3RvIGVycm9yOworCQl9CiAKIAkJbWVtc2V0KHBlLCAwLCBzaXplb2Yoc3RydWN0IG12cHAyX3Byc19lbnRyeSkpOwogCQltdnBwMl9wcnNfdGNhbV9sdV9zZXQocGUsIE1WUFAyX1BSU19MVV9WTEFOKTsKQEAgLTE4ODcsOCArMTg5NSw5IEBACiAJbXZwcDJfcHJzX3RjYW1fcG9ydF9tYXBfc2V0KHBlLCBwb3J0X21hcCk7CiAJbXZwcDJfcHJzX2h3X3dyaXRlKHByaXYsIHBlKTsKIAorZXJyb3I6CiAJa2ZyZWUocGUpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qIElQdjQgaGVhZGVyIHBhcnNpbmcgZm9yIGZyYWdtZW50YXRpb24gYW5kIEw0IG9mZnNldCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbmV0ZGV2LmMKaW5kZXggZjMwMzJmZS4uNGQ2OWUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jCkBAIC0xNjkzLDcgKzE2OTMsNyBAQAogCW1seDRfc2V0X3N0YXRzX2JpdG1hcChtZGV2LT5kZXYsICZwcml2LT5zdGF0c19iaXRtYXApOwogCiAjaWZkZWYgQ09ORklHX01MWDRfRU5fVlhMQU4KLQlpZiAocHJpdi0+bWRldi0+ZGV2LT5jYXBzLmZsYWdzMiAmIE1MWDRfREVWX0NBUF9GTEFHMl9WWExBTl9PRkZMT0FEUykKKwlpZiAocHJpdi0+bWRldi0+ZGV2LT5jYXBzLnR1bm5lbF9vZmZsb2FkX21vZGUgPT0gTUxYNF9UVU5ORUxfT0ZGTE9BRF9NT0RFX1ZYTEFOKQogCQl2eGxhbl9nZXRfcnhfcG9ydChkZXYpOwogI2VuZGlmCiAJcHJpdi0+cG9ydF91cCA9IHRydWU7CkBAIC0yMjgxLDggKzIyODEsMTYgQEAKIAlyZXQgPSBtbHg0X1NFVF9QT1JUX1ZYTEFOKHByaXYtPm1kZXYtPmRldiwgcHJpdi0+cG9ydCwKIAkJCQkgIFZYTEFOX1NURUVSX0JZX09VVEVSX01BQywgMSk7CiBvdXQ6Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CiAJCWVuX2Vycihwcml2LCAiZmFpbGVkIHNldHRpbmcgTDIgdHVubmVsIGNvbmZpZ3VyYXRpb24gcmV0ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJLyogc2V0IG9mZmxvYWRzICovCisJcHJpdi0+ZGV2LT5od19lbmNfZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfAorCQkJCSAgICAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9HU09fVURQX1RVTk5FTDsKKwlwcml2LT5kZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfR1NPX1VEUF9UVU5ORUw7CisJcHJpdi0+ZGV2LT5mZWF0dXJlcyAgICB8PSBORVRJRl9GX0dTT19VRFBfVFVOTkVMOwogfQogCiBzdGF0aWMgdm9pZCBtbHg0X2VuX2RlbF92eGxhbl9vZmZsb2FkcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0yMjkwLDYgKzIyOTgsMTEgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1seDRfZW5fcHJpdiwKIAkJCQkJCSB2eGxhbl9kZWxfdGFzayk7CisJLyogdW5zZXQgb2ZmbG9hZHMgKi8KKwlwcml2LT5kZXYtPmh3X2VuY19mZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwKKwkJCQkgICAgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfR1NPX1VEUF9UVU5ORUwpOworCXByaXYtPmRldi0+aHdfZmVhdHVyZXMgJj0gfk5FVElGX0ZfR1NPX1VEUF9UVU5ORUw7CisJcHJpdi0+ZGV2LT5mZWF0dXJlcyAgICAmPSB+TkVUSUZfRl9HU09fVURQX1RVTk5FTDsKIAogCXJldCA9IG1seDRfU0VUX1BPUlRfVlhMQU4ocHJpdi0+bWRldi0+ZGV2LCBwcml2LT5wb3J0LAogCQkJCSAgVlhMQU5fU1RFRVJfQllfT1VURVJfTUFDLCAwKTsKQEAgLTIzNDIsNiArMjM1NSwxMSBAQAogCiAJcXVldWVfd29yayhwcml2LT5tZGV2LT53b3JrcXVldWUsICZwcml2LT52eGxhbl9kZWxfdGFzayk7CiB9CisKK3N0YXRpYyBib29sIG1seDRfZW5fZ3NvX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHZ4bGFuX2dzb19jaGVjayhza2IpOworfQogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWx4NF9uZXRkZXZfb3BzID0gewpAQCAtMjM3Myw2ICsyMzkxLDcgQEAKICNpZmRlZiBDT05GSUdfTUxYNF9FTl9WWExBTgogCS5uZG9fYWRkX3Z4bGFuX3BvcnQJPSBtbHg0X2VuX2FkZF92eGxhbl9wb3J0LAogCS5uZG9fZGVsX3Z4bGFuX3BvcnQJPSBtbHg0X2VuX2RlbF92eGxhbl9wb3J0LAorCS5uZG9fZ3NvX2NoZWNrCQk9IG1seDRfZW5fZ3NvX2NoZWNrLAogI2VuZGlmCiB9OwogCkBAIC0yNDAzLDYgKzI0MjIsMTEgQEAKIAkubmRvX3J4X2Zsb3dfc3RlZXIJPSBtbHg0X2VuX2ZpbHRlcl9yZnMsCiAjZW5kaWYKIAkubmRvX2dldF9waHlzX3BvcnRfaWQJPSBtbHg0X2VuX2dldF9waHlzX3BvcnRfaWQsCisjaWZkZWYgQ09ORklHX01MWDRfRU5fVlhMQU4KKwkubmRvX2FkZF92eGxhbl9wb3J0CT0gbWx4NF9lbl9hZGRfdnhsYW5fcG9ydCwKKwkubmRvX2RlbF92eGxhbl9wb3J0CT0gbWx4NF9lbl9kZWxfdnhsYW5fcG9ydCwKKwkubmRvX2dzb19jaGVjawkJPSBtbHg0X2VuX2dzb19jaGVjaywKKyNlbmRpZgogfTsKIAogaW50IG1seDRfZW5faW5pdF9uZXRkZXYoc3RydWN0IG1seDRfZW5fZGV2ICptZGV2LCBpbnQgcG9ydCwKQEAgLTI1NjgsMTMgKzI1OTIsNiBAQAogCWlmIChtZGV2LT5kZXYtPmNhcHMuc3RlZXJpbmdfbW9kZSAhPSBNTFg0X1NURUVSSU5HX01PREVfQTApCiAJCWRldi0+cHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7CiAKLQlpZiAobWRldi0+ZGV2LT5jYXBzLnR1bm5lbF9vZmZsb2FkX21vZGUgPT0gTUxYNF9UVU5ORUxfT0ZGTE9BRF9NT0RFX1ZYTEFOKSB7Ci0JCWRldi0+aHdfZW5jX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwKLQkJCQkJTkVUSUZfRl9UU08gfCBORVRJRl9GX0dTT19VRFBfVFVOTkVMOwotCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfR1NPX1VEUF9UVU5ORUw7Ci0JCWRldi0+ZmVhdHVyZXMgICAgfD0gTkVUSUZfRl9HU09fVURQX1RVTk5FTDsKLQl9Ci0KIAltZGV2LT5wbmRldltwb3J0XSA9IGRldjsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L3Jlc291cmNlX3RyYWNrZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcmVzb3VyY2VfdHJhY2tlci5jCmluZGV4IDVkMjQ5OGQuLmNkNWNmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcmVzb3VyY2VfdHJhY2tlci5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcmVzb3VyY2VfdHJhY2tlci5jCkBAIC0xNTQ2LDcgKzE1NDYsNyBAQAogCiAJc3dpdGNoIChvcCkgewogCWNhc2UgUkVTX09QX1JFU0VSVkU6Ci0JCWNvdW50ID0gZ2V0X3BhcmFtX2woJmluX3BhcmFtKTsKKwkJY291bnQgPSBnZXRfcGFyYW1fbCgmaW5fcGFyYW0pICYgMHhmZmZmZmY7CiAJCWFsaWduID0gZ2V0X3BhcmFtX2goJmluX3BhcmFtKTsKIAkJZXJyID0gbWx4NF9ncmFudF9yZXNvdXJjZShkZXYsIHNsYXZlLCBSRVNfUVAsIGNvdW50LCAwKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lcS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VxLmMKaW5kZXggYTI3ODIzOC4uYWQyYzk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VxLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VxLmMKQEAgLTM3NCwxNSArMzc0LDE0IEBACiAJc25wcmludGYoZXEtPm5hbWUsIE1MWDVfTUFYX0VRX05BTUUsICIlc0BwY2k6JXMiLAogCQkgbmFtZSwgcGNpX25hbWUoZGV2LT5wZGV2KSk7CiAJZXEtPmVxbiA9IG91dC5lcV9udW1iZXI7CisJZXEtPmlycW4gPSB2ZWNpZHg7CisJZXEtPmRldiA9IGRldjsKKwllcS0+ZG9vcmJlbGwgPSB1YXItPm1hcCArIE1MWDVfRVFfRE9PUkJFTF9PRkZTRVQ7CiAJZXJyID0gcmVxdWVzdF9pcnEodGFibGUtPm1zaXhfYXJyW3ZlY2lkeF0udmVjdG9yLCBtbHg1X21zaXhfaGFuZGxlciwgMCwKIAkJCSAgZXEtPm5hbWUsIGVxKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9lcTsKIAotCWVxLT5pcnFuID0gdmVjaWR4OwotCWVxLT5kZXYgPSBkZXY7Ci0JZXEtPmRvb3JiZWxsID0gdWFyLT5tYXAgKyBNTFg1X0VRX0RPT1JCRUxfT0ZGU0VUOwotCiAJZXJyID0gbWx4NV9kZWJ1Z19lcV9hZGQoZGV2LCBlcSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMKaW5kZXggM2Q4ZThlNC4uNzFiMTBiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jCkBAIC04NjQsMTQgKzg2NCwxNCBAQAogCWRldi0+cHJvZmlsZSA9ICZwcm9maWxlW3Byb2Zfc2VsXTsKIAlkZXYtPmV2ZW50ID0gbWx4NV9jb3JlX2V2ZW50OwogCisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmN0eF9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+Y3R4X2xvY2spOwogCWVyciA9IG1seDVfZGV2X2luaXQoZGV2LCBwZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1seDVfZGV2X2luaXQgZmFpbGVkICVkXG4iLCBlcnIpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+Y3R4X2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZwcml2LT5jdHhfbG9jayk7CiAJZXJyID0gbWx4NV9yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1seDVfcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZCAlZFxuIiwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDBiMmExY2MuLjYxMzAzNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtMjc2Miw3ICsyNzYyLDggQEAKIAlpZiAodGVzdF9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWdvdG8gcmVzY2hlZHVsZTsKIAotCWlmICh0ZXN0X2JpdChfX05YX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkgeworCWlmICh0ZXN0X2JpdChfX05YX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSAmJgorCSAgICAhKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0ZXX0NBUEFCSUxJVFlfTElOS19OT1RJRklDQVRJT04pKSB7CiAJCWlmICghYWRhcHRlci0+aGFzX2xpbmtfZXZlbnRzKSB7CiAKIAkJCW5ldHhlbl9uaWNfaGFuZGxlX3BoeV9pbnRyKGFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jCmluZGV4IGY1ZTI5ZjcuLmE5MTNiM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMKQEAgLTUwMyw2ICs1MDMsMTEgQEAKIAogCWFkYXB0ZXItPmZsYWdzIHw9IFFMQ05JQ19ERUxfVlhMQU5fUE9SVDsKIH0KKworc3RhdGljIGJvb2wgcWxjbmljX2dzb19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiB2eGxhbl9nc29fY2hlY2soc2tiKTsKK30KICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHFsY25pY19uZXRkZXZfb3BzID0gewpAQCAtNTI2LDYgKzUzMSw3IEBACiAjaWZkZWYgQ09ORklHX1FMQ05JQ19WWExBTgogCS5uZG9fYWRkX3Z4bGFuX3BvcnQJPSBxbGNuaWNfYWRkX3Z4bGFuX3BvcnQsCiAJLm5kb19kZWxfdnhsYW5fcG9ydAk9IHFsY25pY19kZWxfdnhsYW5fcG9ydCwKKwkubmRvX2dzb19jaGVjawkJPSBxbGNuaWNfZ3NvX2NoZWNrLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IHFsY25pY19wb2xsX2NvbnRyb2xsZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vS2NvbmZpZwppbmRleCBmM2E0NzE0Li45YTQ5ZjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL0tjb25maWcKQEAgLTUsNyArNSw2IEBACiBjb25maWcgTkVUX1ZFTkRPUl9RVUFMQ09NTQogCWJvb2wgIlF1YWxjb21tIGRldmljZXMiCiAJZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIE9GX0dQSU8KIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWQogCSAgYW5kIHJlYWQgdGhlIEV0aGVybmV0LUhPV1RPLCBhdmFpbGFibGUgZnJvbQpAQCAtMjAsNyArMTksNyBAQAogCiBjb25maWcgUUNBNzAwMAogCXRyaXN0YXRlICJRdWFsY29tbSBBdGhlcm9zIFFDQTcwMDAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgT0ZfR1BJTworCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiBPRgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgU1BJIHByb3RvY29sIGRyaXZlciBzdXBwb3J0cyB0aGUgUXVhbGNvbW0gQXRoZXJvcyBRQ0E3MDAwLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYwppbmRleCA2MGU5YzJjLi5iNWRiNmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMKQEAgLTkxNywyMSArOTE3LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpCiBzdGF0aWMgdm9pZCBzaF9ldGhfc2V0X3JlY2VpdmVfYWxpZ24oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgcmVzZXJ2ZTsKKwl1aW50cHRyX3QgcmVzZXJ2ZSA9ICh1aW50cHRyX3Qpc2tiLT5kYXRhICYgKFNIX0VUSF9SWF9BTElHTiAtIDEpOwogCi0JcmVzZXJ2ZSA9IFNINF9TS0JfUlhfQUxJR04gLSAoKHUzMilza2ItPmRhdGEgJiAoU0g0X1NLQl9SWF9BTElHTiAtIDEpKTsKIAlpZiAocmVzZXJ2ZSkKLQkJc2tiX3Jlc2VydmUoc2tiLCByZXNlcnZlKTsKKwkJc2tiX3Jlc2VydmUoc2tiLCBTSF9FVEhfUlhfQUxJR04gLSByZXNlcnZlKTsKIH0KLSNlbHNlCi1zdGF0aWMgdm9pZCBzaF9ldGhfc2V0X3JlY2VpdmVfYWxpZ24oc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlza2JfcmVzZXJ2ZShza2IsIFNIMl9TSDNfU0tCX1JYX0FMSUdOKTsKLX0KLSNlbmRpZgogCiAKIC8qIENQVSA8LT4gRURNQUMgZW5kaWFuIGNvbnZlcnQgKi8KQEAgLTExMTksNiArMTExMSw3IEBACiAJc3RydWN0IHNoX2V0aF90eGRlc2MgKnR4ZGVzYyA9IE5VTEw7CiAJaW50IHJ4X3JpbmdzaXplID0gc2l6ZW9mKCpyeGRlc2MpICogbWRwLT5udW1fcnhfcmluZzsKIAlpbnQgdHhfcmluZ3NpemUgPSBzaXplb2YoKnR4ZGVzYykgKiBtZHAtPm51bV90eF9yaW5nOworCWludCBza2J1ZmZfc2l6ZSA9IG1kcC0+cnhfYnVmX3N6ICsgU0hfRVRIX1JYX0FMSUdOIC0gMTsKIAogCW1kcC0+Y3VyX3J4ID0gMDsKIAltZHAtPmN1cl90eCA9IDA7CkBAIC0xMTMxLDIxICsxMTI0LDIxIEBACiAJZm9yIChpID0gMDsgaSA8IG1kcC0+bnVtX3J4X3Jpbmc7IGkrKykgewogCQkvKiBza2IgKi8KIAkJbWRwLT5yeF9za2J1ZmZbaV0gPSBOVUxMOwotCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5kZXYsIG1kcC0+cnhfYnVmX3N6KTsKKwkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBza2J1ZmZfc2l6ZSk7CiAJCW1kcC0+cnhfc2tidWZmW2ldID0gc2tiOwogCQlpZiAoc2tiID09IE5VTEwpCiAJCQlicmVhazsKLQkJZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLCBtZHAtPnJ4X2J1Zl9zeiwKLQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQlzaF9ldGhfc2V0X3JlY2VpdmVfYWxpZ24oc2tiKTsKIAogCQkvKiBSWCBkZXNjcmlwdG9yICovCiAJCXJ4ZGVzYyA9ICZtZHAtPnJ4X3JpbmdbaV07CisJCS8qIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgaXMgYSBtdWx0aXBsZSBvZiAxNiBieXRlcy4gKi8KKwkJcnhkZXNjLT5idWZmZXJfbGVuZ3RoID0gQUxJR04obWRwLT5yeF9idWZfc3osIDE2KTsKKwkJZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLCByeGRlc2MtPmJ1ZmZlcl9sZW5ndGgsCisJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAkJcnhkZXNjLT5hZGRyID0gdmlydF90b19waHlzKFBUUl9BTElHTihza2ItPmRhdGEsIDQpKTsKIAkJcnhkZXNjLT5zdGF0dXMgPSBjcHVfdG9fZWRtYWMobWRwLCBSRF9SQUNUIHwgUkRfUkZQKTsKIAotCQkvKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIDE2IGJ5dGUgYm91bmRhcnkuICovCi0JCXJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IEFMSUdOKG1kcC0+cnhfYnVmX3N6LCAxNik7CiAJCS8qIFJ4IGRlc2NyaXB0b3IgYWRkcmVzcyBzZXQgKi8KIAkJaWYgKGkgPT0gMCkgewogCQkJc2hfZXRoX3dyaXRlKG5kZXYsIG1kcC0+cnhfZGVzY19kbWEsIFJETEFSKTsKQEAgLTEzOTcsNiArMTM5MCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MTYgcGt0X2xlbiA9IDA7CiAJdTMyIGRlc2Nfc3RhdHVzOworCWludCBza2J1ZmZfc2l6ZSA9IG1kcC0+cnhfYnVmX3N6ICsgU0hfRVRIX1JYX0FMSUdOIC0gMTsKIAogCXJ4ZGVzYyA9ICZtZHAtPnJ4X3JpbmdbZW50cnldOwogCXdoaWxlICghKHJ4ZGVzYy0+c3RhdHVzICYgY3B1X3RvX2VkbWFjKG1kcCwgUkRfUkFDVCkpKSB7CkBAIC0xNDQ4LDcgKzE0NDIsNyBAQAogCQkJaWYgKG1kcC0+Y2QtPnJwYWRpcikKIAkJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CiAJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmbmRldi0+ZGV2LCByeGRlc2MtPmFkZHIsCi0JCQkJCQltZHAtPnJ4X2J1Zl9zeiwKKwkJCQkJCUFMSUdOKG1kcC0+cnhfYnVmX3N6LCAxNiksCiAJCQkJCQlETUFfRlJPTV9ERVZJQ0UpOwogCQkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CkBAIC0xNDY4LDEzICsxNDYyLDEzIEBACiAJCXJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IEFMSUdOKG1kcC0+cnhfYnVmX3N6LCAxNik7CiAKIAkJaWYgKG1kcC0+cnhfc2tidWZmW2VudHJ5XSA9PSBOVUxMKSB7Ci0JCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5kZXYsIG1kcC0+cnhfYnVmX3N6KTsKKwkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmRldiwgc2tidWZmX3NpemUpOwogCQkJbWRwLT5yeF9za2J1ZmZbZW50cnldID0gc2tiOwogCQkJaWYgKHNrYiA9PSBOVUxMKQogCQkJCWJyZWFrOwkvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kLiAqLwotCQkJZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLCBtZHAtPnJ4X2J1Zl9zeiwKLQkJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAkJCXNoX2V0aF9zZXRfcmVjZWl2ZV9hbGlnbihza2IpOworCQkJZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLAorCQkJCSAgICAgICByeGRlc2MtPmJ1ZmZlcl9sZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOwogCQkJcnhkZXNjLT5hZGRyID0gdmlydF90b19waHlzKFBUUl9BTElHTihza2ItPmRhdGEsIDQpKTsKQEAgLTIwNDIsNiArMjAzNiw4IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZV9pcnE7CiAKKwltZHAtPmlzX29wZW5lZCA9IDE7CisKIAlyZXR1cm4gcmV0OwogCiBvdXRfZnJlZV9pcnE6CkBAIC0yMTMxLDYgKzIxMjcsMzYgQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNoX2V0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCWlmIChzaF9ldGhfaXNfcnpfZmFzdF9ldGhlcihtZHApKQorCQlyZXR1cm4gJm5kZXYtPnN0YXRzOworCisJaWYgKCFtZHAtPmlzX29wZW5lZCkKKwkJcmV0dXJuICZuZGV2LT5zdGF0czsKKworCW5kZXYtPnN0YXRzLnR4X2Ryb3BwZWQgKz0gc2hfZXRoX3JlYWQobmRldiwgVFJPQ1IpOworCXNoX2V0aF93cml0ZShuZGV2LCAwLCBUUk9DUik7CS8qICh3cml0ZSBjbGVhcikgKi8KKwluZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IHNoX2V0aF9yZWFkKG5kZXYsIENEQ1IpOworCXNoX2V0aF93cml0ZShuZGV2LCAwLCBDRENSKTsJLyogKHdyaXRlIGNsZWFyKSAqLworCW5kZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IHNoX2V0aF9yZWFkKG5kZXYsIExDQ1IpOworCXNoX2V0aF93cml0ZShuZGV2LCAwLCBMQ0NSKTsJLyogKHdyaXRlIGNsZWFyKSAqLworCisJaWYgKHNoX2V0aF9pc19nZXRoZXIobWRwKSkgeworCQluZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBzaF9ldGhfcmVhZChuZGV2LCBDRVJDUik7CisJCXNoX2V0aF93cml0ZShuZGV2LCAwLCBDRVJDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KKwkJbmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gc2hfZXRoX3JlYWQobmRldiwgQ0VFQ1IpOworCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgQ0VFQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCisJfSBlbHNlIHsKKwkJbmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gc2hfZXRoX3JlYWQobmRldiwgQ05EQ1IpOworCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgQ05EQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCisJfQorCisJcmV0dXJuICZuZGV2LT5zdGF0czsKK30KKwogLyogZGV2aWNlIGNsb3NlIGZ1bmN0aW9uICovCiBzdGF0aWMgaW50IHNoX2V0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKQEAgLTIxNDUsNiArMjE3MSw3IEBACiAJc2hfZXRoX3dyaXRlKG5kZXYsIDAsIEVEVFJSKTsKIAlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURSUlIpOwogCisJc2hfZXRoX2dldF9zdGF0cyhuZGV2KTsKIAkvKiBQSFkgRGlzY29ubmVjdCAqLwogCWlmIChtZHAtPnBoeWRldikgewogCQlwaHlfc3RvcChtZHAtPnBoeWRldik7CkBAIC0yMTYzLDM4ICsyMTkwLDExIEBACiAKIAlwbV9ydW50aW1lX3B1dF9zeW5jKCZtZHAtPnBkZXYtPmRldik7CiAKKwltZHAtPmlzX29wZW5lZCA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzaF9ldGhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0KLQlpZiAoc2hfZXRoX2lzX3J6X2Zhc3RfZXRoZXIobWRwKSkKLQkJcmV0dXJuICZuZGV2LT5zdGF0czsKLQotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJm1kcC0+cGRldi0+ZGV2KTsKLQotCW5kZXYtPnN0YXRzLnR4X2Ryb3BwZWQgKz0gc2hfZXRoX3JlYWQobmRldiwgVFJPQ1IpOwotCXNoX2V0aF93cml0ZShuZGV2LCAwLCBUUk9DUik7CS8qICh3cml0ZSBjbGVhcikgKi8KLQluZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IHNoX2V0aF9yZWFkKG5kZXYsIENEQ1IpOwotCXNoX2V0aF93cml0ZShuZGV2LCAwLCBDRENSKTsJLyogKHdyaXRlIGNsZWFyKSAqLwotCW5kZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IHNoX2V0aF9yZWFkKG5kZXYsIExDQ1IpOwotCXNoX2V0aF93cml0ZShuZGV2LCAwLCBMQ0NSKTsJLyogKHdyaXRlIGNsZWFyKSAqLwotCWlmIChzaF9ldGhfaXNfZ2V0aGVyKG1kcCkpIHsKLQkJbmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gc2hfZXRoX3JlYWQobmRldiwgQ0VSQ1IpOwotCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgQ0VSQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCi0JCW5kZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IHNoX2V0aF9yZWFkKG5kZXYsIENFRUNSKTsKLQkJc2hfZXRoX3dyaXRlKG5kZXYsIDAsIENFRUNSKTsJLyogKHdyaXRlIGNsZWFyKSAqLwotCX0gZWxzZSB7Ci0JCW5kZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IHNoX2V0aF9yZWFkKG5kZXYsIENORENSKTsKLQkJc2hfZXRoX3dyaXRlKG5kZXYsIDAsIENORENSKTsJLyogKHdyaXRlIGNsZWFyKSAqLwotCX0KLQlwbV9ydW50aW1lX3B1dF9zeW5jKCZtZHAtPnBkZXYtPmRldik7Ci0KLQlyZXR1cm4gJm5kZXYtPnN0YXRzOwotfQotCiAvKiBpb2N0bCB0byBkZXZpY2UgZnVuY3Rpb24gKi8KIHN0YXRpYyBpbnQgc2hfZXRoX2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmgKaW5kZXggYjM3YzQyNy4uMjIzMDFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5oCkBAIC0xNjIsOSArMTYyLDkgQEAKIAogLyogRHJpdmVyJ3MgcGFyYW1ldGVycyAqLwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpCi0jZGVmaW5lIFNINF9TS0JfUlhfQUxJR04JMzIKKyNkZWZpbmUgU0hfRVRIX1JYX0FMSUdOCQkzMgogI2Vsc2UKLSNkZWZpbmUgU0gyX1NIM19TS0JfUlhfQUxJR04JMgorI2RlZmluZSBTSF9FVEhfUlhfQUxJR04JCTIKICNlbmRpZgogCiAvKiBSZWdpc3RlcidzIGJpdHMKQEAgLTUyMiw2ICs1MjIsNyBAQAogCiAJdW5zaWduZWQgbm9fZXRoZXJfbGluazoxOwogCXVuc2lnbmVkIGV0aGVyX2xpbmtfYWN0aXZlX2xvdzoxOworCXVuc2lnbmVkIGlzX29wZW5lZDoxOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNoX2V0aF9zb2Z0X3N3YXAoY2hhciAqc3JjLCBpbnQgbGVuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmMKaW5kZXggMDAyZDRjZC4uYTc3ZjA1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jCkBAIC0xODAsNyArMTgwLDggQEAKIAkJICAgICAgRUZYX01BWF9DSEFOTkVMUywKIAkJICAgICAgcmVzb3VyY2Vfc2l6ZSgmZWZ4LT5wY2lfZGV2LT5yZXNvdXJjZVtFRlhfTUVNX0JBUl0pIC8KIAkJICAgICAgKEVGWF9WSV9QQUdFX1NJWkUgKiBFRlhfVFhRX1RZUEVTKSk7Ci0JQlVHX09OKGVmeC0+bWF4X2NoYW5uZWxzID09IDApOworCWlmIChXQVJOX09OKGVmeC0+bWF4X2NoYW5uZWxzID09IDApKQorCQlyZXR1cm4gLUVJTzsKIAogCW5pY19kYXRhID0ga3phbGxvYyhzaXplb2YoKm5pY19kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuaWNfZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jCmluZGV4IDJjNjIyMDguLjZjYzNjZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYwpAQCAtMjI0Myw5ICsyMjQzLDEwIEBACiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2ggPSBOVUxMOwogCXN0cnVjdCBzbWNfbG9jYWwgKmxwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwotCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqaXJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1bnNpZ25lZCBpbnQgX19pb21lbSAqYWRkcjsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFncyA9IFNNQ19JUlFfRkxBR1M7CisJdW5zaWduZWQgbG9uZyBpcnFfcmVzZmxhZ3M7CiAJaW50IHJldDsKIAogCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHNtY19sb2NhbCkpOwpAQCAtMjMzNywxNiArMjMzOCwxOSBAQAogCQlnb3RvIG91dF9mcmVlX25ldGRldjsKIAl9CiAKLQlpcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKLQlpZiAoIWlyZXMpIHsKKwluZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChuZGV2LT5pcnEgPD0gMCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF9yZWxlYXNlX2lvOwogCX0KLQotCW5kZXYtPmlycSA9IGlyZXMtPnN0YXJ0OwotCi0JaWYgKGlycV9mbGFncyA9PSAtMSB8fCBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQotCQlpcnFfZmxhZ3MgPSBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOworCS8qCisJICogSWYgdGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBzcGVjaWZ5IGFueSBzcGVjaWFsIGlycWZsYWdzLCBvciBpZgorCSAqIHRoZSByZXNvdXJjZSBzdXBwbGllcyBhIHRyaWdnZXIsIG92ZXJyaWRlIHRoZSBpcnFmbGFncyB3aXRoCisJICogdGhlIHRyaWdnZXIgZmxhZ3MgZnJvbSB0aGUgcmVzb3VyY2UuCisJICovCisJaXJxX3Jlc2ZsYWdzID0gaXJxZF9nZXRfdHJpZ2dlcl90eXBlKGlycV9nZXRfaXJxX2RhdGEobmRldi0+aXJxKSk7CisJaWYgKGlycV9mbGFncyA9PSAtMSB8fCBpcnFfcmVzZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykKKwkJaXJxX2ZsYWdzID0gaXJxX3Jlc2ZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CiAKIAlyZXQgPSBzbWNfcmVxdWVzdF9hdHRyaWIocGRldiwgbmRldik7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYwppbmRleCBhZmZiMjlkLi43N2VkNzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jCkBAIC0xMzQyLDYgKzEzNDIsNDIgQEAKIAlzcGluX3VubG9jaygmcGRhdGEtPm1hY19sb2NrKTsKIH0KIAorc3RhdGljIGludCBzbXNjOTExeF9waHlfZ2VuZXJhbF9wb3dlcl91cChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEpCit7CisJaW50IHJjID0gMDsKKworCWlmICghcGRhdGEtPnBoeV9kZXYpCisJCXJldHVybiByYzsKKworCS8qIElmIHRoZSBpbnRlcm5hbCBQSFkgaXMgaW4gR2VuZXJhbCBQb3dlci1Eb3duIG1vZGUsIGFsbCwgZXhjZXB0IHRoZQorCSAqIG1hbmFnZW1lbnQgaW50ZXJmYWNlLCBpcyBwb3dlcmVkLWRvd24gYW5kIHN0YXlzIGluIHRoYXQgY29uZGl0aW9uIGFzCisJICogbG9uZyBhcyBQaHkgcmVnaXN0ZXIgYml0IDAuMTEgaXMgSElHSC4KKwkgKgorCSAqIEluIHRoYXQgY2FzZSwgY2xlYXIgdGhlIGJpdCAwLjExLCBzbyB0aGUgUEhZIHBvd2VycyB1cCBhbmQgd2UgY2FuCisJICogYWNjZXNzIHRvIHRoZSBwaHkgcmVnaXN0ZXJzLgorCSAqLworCXJjID0gcGh5X3JlYWQocGRhdGEtPnBoeV9kZXYsIE1JSV9CTUNSKTsKKwlpZiAocmMgPCAwKSB7CisJCVNNU0NfV0FSTihwZGF0YSwgZHJ2LCAiRmFpbGVkIHJlYWRpbmcgUEhZIGNvbnRyb2wgcmVnIik7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBJZiB0aGUgUEhZIGdlbmVyYWwgcG93ZXItZG93biBiaXQgaXMgbm90IHNldCBpcyBub3QgbmVjZXNzYXJ5IHRvCisJICogZGlzYWJsZSB0aGUgZ2VuZXJhbCBwb3dlciBkb3duLW1vZGUuCisJICovCisJaWYgKHJjICYgQk1DUl9QRE9XTikgeworCQlyYyA9IHBoeV93cml0ZShwZGF0YS0+cGh5X2RldiwgTUlJX0JNQ1IsIHJjICYgfkJNQ1JfUERPV04pOworCQlpZiAocmMgPCAwKSB7CisJCQlTTVNDX1dBUk4ocGRhdGEsIGRydiwgIkZhaWxlZCB3cml0aW5nIFBIWSBjb250cm9sIHJlZyIpOworCQkJcmV0dXJuIHJjOworCQl9CisKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDE1MDApOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNtc2M5MTF4X3BoeV9kaXNhYmxlX2VuZXJneV9kZXRlY3Qoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhKQogewogCWludCByYyA9IDA7CkBAIC0xMzU2LDEyICsxMzkyLDggQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCS8qCi0JICogSWYgZW5lcmd5IGlzIGRldGVjdGVkIHRoZSBQSFkgaXMgYWxyZWFkeSBhd2FrZSBzbyBpcyBub3QgbmVjZXNzYXJ5Ci0JICogdG8gZGlzYWJsZSB0aGUgZW5lcmd5IGRldGVjdCBwb3dlci1kb3duIG1vZGUuCi0JICovCi0JaWYgKChyYyAmIE1JSV9MQU44M0MxODVfRURQV1JET1dOKSAmJgotCSAgICAhKHJjICYgTUlJX0xBTjgzQzE4NV9FTkVSR1lPTikpIHsKKwkvKiBPbmx5IGRpc2FibGUgaWYgZW5lcmd5IGRldGVjdCBtb2RlIGlzIGFscmVhZHkgZW5hYmxlZCAqLworCWlmIChyYyAmIE1JSV9MQU44M0MxODVfRURQV1JET1dOKSB7CiAJCS8qIERpc2FibGUgZW5lcmd5IGRldGVjdCBtb2RlIGZvciB0aGlzIFNNU0MgVHJhbnNjZWl2ZXJzICovCiAJCXJjID0gcGh5X3dyaXRlKHBkYXRhLT5waHlfZGV2LCBNSUlfTEFOODNDMTg1X0NUUkxfU1RBVFVTLAogCQkJICAgICAgIHJjICYgKH5NSUlfTEFOODNDMTg1X0VEUFdSRE9XTikpOwpAQCAtMTM3MCw4ICsxNDAyLDggQEAKIAkJCVNNU0NfV0FSTihwZGF0YSwgZHJ2LCAiRmFpbGVkIHdyaXRpbmcgUEhZIGNvbnRyb2wgcmVnIik7CiAJCQlyZXR1cm4gcmM7CiAJCX0KLQotCQltZGVsYXkoMSk7CisJCS8qIEFsbG93IFBIWSB0byB3YWtldXAgKi8KKwkJbWRlbGF5KDIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTM5Myw3ICsxNDI1LDYgQEAKIAogCS8qIE9ubHkgZW5hYmxlIGlmIGVuZXJneSBkZXRlY3QgbW9kZSBpcyBhbHJlYWR5IGRpc2FibGVkICovCiAJaWYgKCEocmMgJiBNSUlfTEFOODNDMTg1X0VEUFdSRE9XTikpIHsKLQkJbWRlbGF5KDEwMCk7CiAJCS8qIEVuYWJsZSBlbmVyZ3kgZGV0ZWN0IG1vZGUgZm9yIHRoaXMgU01TQyBUcmFuc2NlaXZlcnMgKi8KIAkJcmMgPSBwaHlfd3JpdGUocGRhdGEtPnBoeV9kZXYsIE1JSV9MQU44M0MxODVfQ1RSTF9TVEFUVVMsCiAJCQkgICAgICAgcmMgfCBNSUlfTEFOODNDMTg1X0VEUFdSRE9XTik7CkBAIC0xNDAyLDggKzE0MzMsNiBAQAogCQkJU01TQ19XQVJOKHBkYXRhLCBkcnYsICJGYWlsZWQgd3JpdGluZyBQSFkgY29udHJvbCByZWciKTsKIAkJCXJldHVybiByYzsKIAkJfQotCi0JCW1kZWxheSgxKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDE1LDYgKzE0NDQsMTYgQEAKIAlpbnQgcmV0OwogCiAJLyoKKwkgKiBNYWtlIHN1cmUgdG8gcG93ZXItdXAgdGhlIFBIWSBjaGlwIGJlZm9yZSBkb2luZyBhIHJlc2V0LCBvdGhlcndpc2UKKwkgKiB0aGUgcmVzZXQgZmFpbHMuCisJICovCisJcmV0ID0gc21zYzkxMXhfcGh5X2dlbmVyYWxfcG93ZXJfdXAocGRhdGEpOworCWlmIChyZXQpIHsKKwkJU01TQ19XQVJOKHBkYXRhLCBkcnYsICJGYWlsZWQgdG8gcG93ZXItdXAgdGhlIFBIWSBjaGlwIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKIAkgKiBMQU45MjEwL0xBTjkyMTEvTEFOOTIyMC9MQU45MjIxIGNoaXBzIGhhdmUgYW4gaW50ZXJuYWwgUEhZIHRoYXQKIAkgKiBhcmUgaW5pdGlhbGl6ZWQgaW4gYSBFbmVyZ3kgRGV0ZWN0IFBvd2VyLURvd24gbW9kZSB0aGF0IHByZXZlbnRzCiAJICogdGhlIE1BQyBjaGlwIHRvIGJlIHNvZnR3YXJlIHJlc2V0ZWQuIFNvIHdlIGhhdmUgdG8gd2FrZXVwIHRoZSBQSFkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IDZmNzdhNDYuLjE4YzQ2YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtMjc2LDYgKzI3Niw3IEBACiBib29sIHN0bW1hY19lZWVfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7CiAJY2hhciAqcGh5X2J1c19uYW1lID0gcHJpdi0+cGxhdC0+cGh5X2J1c19uYW1lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCByZXQgPSBmYWxzZTsKIAogCS8qIFVzaW5nIFBDUyB3ZSBjYW5ub3QgZGlhbCB3aXRoIHRoZSBwaHkgcmVnaXN0ZXJzIGF0IHRoaXMgc3RhZ2UKQEAgLTMwMCw2ICszMDEsNyBAQAogCQkJICogY2hhbmdlZCkuCiAJCQkgKiBJbiB0aGF0IGNhc2UgdGhlIGRyaXZlciBkaXNhYmxlIG93biB0aW1lcnMuCiAJCQkgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCQlpZiAocHJpdi0+ZWVlX2FjdGl2ZSkgewogCQkJCXByX2RlYnVnKCJzdG1tYWM6IGRpc2FibGUgRUVFXG4iKTsKIAkJCQlkZWxfdGltZXJfc3luYygmcHJpdi0+ZWVlX2N0cmxfdGltZXIpOwpAQCAtMzA3LDkgKzMwOSwxMSBAQAogCQkJCQkJCSAgICAgdHhfbHBpX3RpbWVyKTsKIAkJCX0KIAkJCXByaXYtPmVlZV9hY3RpdmUgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJLyogQWN0aXZhdGUgdGhlIEVFRSBhbmQgc3RhcnQgdGltZXJzICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWlmICghcHJpdi0+ZWVlX2FjdGl2ZSkgewogCQkJcHJpdi0+ZWVlX2FjdGl2ZSA9IDE7CiAJCQlpbml0X3RpbWVyKCZwcml2LT5lZWVfY3RybF90aW1lcik7CkBAIC0zMjUsOSArMzI5LDEwIEBACiAJCS8qIFNldCBIVyBFRUUgYWNjb3JkaW5nIHRvIHRoZSBzcGVlZCAqLwogCQlwcml2LT5ody0+bWFjLT5zZXRfZWVlX3Bscyhwcml2LT5odywgcHJpdi0+cGh5ZGV2LT5saW5rKTsKIAotCQlwcl9kZWJ1Zygic3RtbWFjOiBFbmVyZ3ktRWZmaWNpZW50IEV0aGVybmV0IGluaXRpYWxpemVkXG4iKTsKLQogCQlyZXQgPSB0cnVlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJcHJfZGVidWcoInN0bW1hYzogRW5lcmd5LUVmZmljaWVudCBFdGhlcm5ldCBpbml0aWFsaXplZFxuIik7CiAJfQogb3V0OgogCXJldHVybiByZXQ7CkBAIC03NjAsMTIgKzc2NSwxMiBAQAogCWlmIChuZXdfc3RhdGUgJiYgbmV0aWZfbXNnX2xpbmsocHJpdikpCiAJCXBoeV9wcmludF9zdGF0dXMocGh5ZGV2KTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwogCS8qIEF0IHRoaXMgc3RhZ2UsIGl0IGNvdWxkIGJlIG5lZWRlZCB0byBzZXR1cCB0aGUgRUVFIG9yIGFkanVzdCBzb21lCiAJICogTUFDIHJlbGF0ZWQgSFcgcmVnaXN0ZXJzLgogCSAqLwogCXByaXYtPmVlZV9lbmFibGVkID0gc3RtbWFjX2VlZV9pbml0KHByaXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTk1OSwxMiArOTY0LDEyIEBACiB9CiAKIHN0YXRpYyBpbnQgc3RtbWFjX2luaXRfcnhfYnVmZmVycyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHN0cnVjdCBkbWFfZGVzYyAqcCwKLQkJCQkgIGludCBpKQorCQkJCSAgaW50IGksIGdmcF90IGZsYWdzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlza2IgPSBfX25ldGRldl9hbGxvY19za2IocHJpdi0+ZGV2LCBwcml2LT5kbWFfYnVmX3N6ICsgTkVUX0lQX0FMSUdOLAotCQkJCSBHRlBfS0VSTkVMKTsKKwkJCQkgZmxhZ3MpOwogCWlmICghc2tiKSB7CiAJCXByX2VycigiJXM6IFJ4IGluaXQgZmFpbHM7IHNrYiBpcyBOVUxMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTAwNiw3ICsxMDExLDcgQEAKICAqIGFuZCBhbGxvY2F0ZXMgdGhlIHNvY2tldCBidWZmZXJzLiBJdCBzdXBwb3JzIHRoZSBjaGFpbmVkIGFuZCByaW5nCiAgKiBtb2Rlcy4KICAqLwotc3RhdGljIGludCBpbml0X2RtYV9kZXNjX3JpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGluaXRfZG1hX2Rlc2NfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZ2ZwX3QgZmxhZ3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEwNDEsNyArMTA0Niw3IEBACiAJCWVsc2UKIAkJCXAgPSBwcml2LT5kbWFfcnggKyBpOwogCi0JCXJldCA9IHN0bW1hY19pbml0X3J4X2J1ZmZlcnMocHJpdiwgcCwgaSk7CisJCXJldCA9IHN0bW1hY19pbml0X3J4X2J1ZmZlcnMocHJpdiwgcCwgaSwgZmxhZ3MpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfaW5pdF9yeF9idWZmZXJzOwogCkBAIC0xNjQ3LDExICsxNjUyLDYgQEAKIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXQ7CiAKLQlyZXQgPSBpbml0X2RtYV9kZXNjX3JpbmdzKGRldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJfZXJyKCIlczogRE1BIGRlc2NyaXB0b3JzIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KIAkvKiBETUEgaW5pdGlhbGl6YXRpb24gYW5kIFNXIHJlc2V0ICovCiAJcmV0ID0gc3RtbWFjX2luaXRfZG1hX2VuZ2luZShwcml2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTcwNSwxMCArMTcwNSw2IEBACiAJfQogCXByaXYtPnR4X2xwaV90aW1lciA9IFNUTU1BQ19ERUZBVUxUX1RXVF9MUzsKIAotCXByaXYtPmVlZV9lbmFibGVkID0gc3RtbWFjX2VlZV9pbml0KHByaXYpOwotCi0Jc3RtbWFjX2luaXRfdHhfY29hbGVzY2UocHJpdik7Ci0KIAlpZiAoKHByaXYtPnVzZV9yaXd0KSAmJiAocHJpdi0+aHctPmRtYS0+cnhfd2F0Y2hkb2cpKSB7CiAJCXByaXYtPnJ4X3Jpd3QgPSBNQVhfRE1BX1JJV1Q7CiAJCXByaXYtPmh3LT5kbWEtPnJ4X3dhdGNoZG9nKHByaXYtPmlvYWRkciwgTUFYX0RNQV9SSVdUKTsKQEAgLTE3NjEsMTIgKzE3NTcsMjAgQEAKIAkJZ290byBkbWFfZGVzY19lcnJvcjsKIAl9CiAKKwlyZXQgPSBpbml0X2RtYV9kZXNjX3JpbmdzKGRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCIlczogRE1BIGRlc2NyaXB0b3JzIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlnb3RvIGluaXRfZXJyb3I7CisJfQorCiAJcmV0ID0gc3RtbWFjX2h3X3NldHVwKGRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJfZXJyKCIlczogSHcgc2V0dXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gaW5pdF9lcnJvcjsKIAl9CiAKKwlzdG1tYWNfaW5pdF90eF9jb2FsZXNjZShwcml2KTsKKwogCWlmIChwcml2LT5waHlkZXYpCiAJCXBoeV9zdGFydChwcml2LT5waHlkZXYpOwogCkBAIC0xODk0LDcgKzE4OTgsMTAgQEAKIAl1bnNpZ25lZCBpbnQgbm9wYWdlZF9sZW4gPSBza2JfaGVhZGxlbihza2IpOwogCXVuc2lnbmVkIGludCBlbmhfZGVzYyA9IHByaXYtPnBsYXQtPmVuaF9kZXNjOwogCisJc3Bpbl9sb2NrKCZwcml2LT50eF9sb2NrKTsKKwogCWlmICh1bmxpa2VseShzdG1tYWNfdHhfYXZhaWwocHJpdikgPCBuZnJhZ3MgKyAxKSkgeworCQlzcGluX3VubG9jaygmcHJpdi0+dHhfbG9jayk7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCQkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLwpAQCAtMTkwMyw4ICsxOTEwLDYgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAotCXNwaW5fbG9jaygmcHJpdi0+dHhfbG9jayk7Ci0KIAlpZiAocHJpdi0+dHhfcGF0aF9pbl9scGlfbW9kZSkKIAkJc3RtbWFjX2Rpc2FibGVfZWVlX21vZGUocHJpdik7CiAKQEAgLTIwMjUsNiArMjAzMCw3IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZG1hX21hcF9lcnI6CisJc3Bpbl91bmxvY2soJnByaXYtPnR4X2xvY2spOwogCWRldl9lcnIocHJpdi0+ZGV2aWNlLCAiVHggZG1hIG1hcCBmYWlsZWRcbiIpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlwcml2LT5kZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKQEAgLTIyODEsOSArMjI4Nyw3IEBACiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAJcHJpdi0+aHctPm1hYy0+c2V0X2ZpbHRlcihwcml2LT5odywgZGV2KTsKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CiB9CiAKIC8qKgpAQCAtMjk1MCw3ICsyOTU0LDcgQEAKIAkJc3RtbWFjX3NldF9tYWMocHJpdi0+aW9hZGRyLCBmYWxzZSk7CiAJCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKHByaXYtPmRldmljZSk7CiAJCS8qIERpc2FibGUgY2xvY2sgaW4gY2FzZSBvZiBQV00gaXMgb2ZmICovCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5zdG1tYWNfY2xrKTsKKwkJY2xrX2Rpc2FibGUocHJpdi0+c3RtbWFjX2Nsayk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIApAQCAtMjk4Miw3ICsyOTg2LDcgQEAKIAl9IGVsc2UgewogCQlwaW5jdHJsX3BtX3NlbGVjdF9kZWZhdWx0X3N0YXRlKHByaXYtPmRldmljZSk7CiAJCS8qIGVuYWJsZSB0aGUgY2xrIHByZXZvdXNseSBkaXNhYmxlZCAqLwotCQljbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+c3RtbWFjX2Nsayk7CisJCWNsa19lbmFibGUocHJpdi0+c3RtbWFjX2Nsayk7CiAJCS8qIHJlc2V0IHRoZSBwaHkgc28gdGhhdCBpdCdzIHJlYWR5ICovCiAJCWlmIChwcml2LT5taWkpCiAJCQlzdG1tYWNfbWRpb19yZXNldChwcml2LT5taWkpOwpAQCAtMjk5MCw3ICsyOTk0LDkgQEAKIAogCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiAKKwlpbml0X2RtYV9kZXNjX3JpbmdzKG5kZXYsIEdGUF9BVE9NSUMpOwogCXN0bW1hY19od19zZXR1cChuZGV2KTsKKwlzdG1tYWNfaW5pdF90eF9jb2FsZXNjZShwcml2KTsKIAogCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwppbmRleCBkYjU2ZmE3Li41OGExYTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwpAQCAtMTc3LDEyICsxNzcsNiBAQAogCSAqLwogCXBsYXQtPm1heG10dSA9IEpVTUJPX0xFTjsKIAotCS8qIFNldCBkZWZhdWx0IHZhbHVlIGZvciBtdWx0aWNhc3QgaGFzaCBiaW5zICovCi0JcGxhdC0+bXVsdGljYXN0X2ZpbHRlcl9iaW5zID0gSEFTSF9UQUJMRV9TSVpFOwotCi0JLyogU2V0IGRlZmF1bHQgdmFsdWUgZm9yIHVuaWNhc3QgZmlsdGVyIGVudHJpZXMgKi8KLQlwbGF0LT51bmljYXN0X2ZpbHRlcl9lbnRyaWVzID0gMTsKLQogCS8qCiAJICogQ3VycmVudGx5IG9ubHkgdGhlIHByb3BlcnRpZXMgbmVlZGVkIG9uIFNQRUFyNjAwCiAJICogYXJlIHByb3ZpZGVkLiBBbGwgb3RoZXIgcHJvcGVydGllcyBzaG91bGQgYmUgYWRkZWQKQEAgLTI3MCwxNiArMjY0LDIzIEBACiAJCXJldHVybiBQVFJfRVJSKGFkZHIpOwogCiAJcGxhdF9kYXQgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwotCWlmIChwZGV2LT5kZXYub2Zfbm9kZSkgewotCQlpZiAoIXBsYXRfZGF0KQotCQkJcGxhdF9kYXQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKKworCWlmICghcGxhdF9kYXQpCisJCXBsYXRfZGF0ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCiAJCQkJCXNpemVvZihzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEpLAogCQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFwbGF0X2RhdCkgewotCQkJcHJfZXJyKCIlczogRVJST1I6IG5vIG1lbW9yeSIsIF9fZnVuY19fKTsKLQkJCXJldHVybiAgLUVOT01FTTsKLQkJfQorCWlmICghcGxhdF9kYXQpIHsKKwkJcHJfZXJyKCIlczogRVJST1I6IG5vIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJcmV0dXJuICAtRU5PTUVNOworCX0KIAorCS8qIFNldCBkZWZhdWx0IHZhbHVlIGZvciBtdWx0aWNhc3QgaGFzaCBiaW5zICovCisJcGxhdF9kYXQtPm11bHRpY2FzdF9maWx0ZXJfYmlucyA9IEhBU0hfVEFCTEVfU0laRTsKKworCS8qIFNldCBkZWZhdWx0IHZhbHVlIGZvciB1bmljYXN0IGZpbHRlciBlbnRyaWVzICovCisJcGxhdF9kYXQtPnVuaWNhc3RfZmlsdGVyX2VudHJpZXMgPSAxOworCisJaWYgKHBkZXYtPmRldi5vZl9ub2RlKSB7CiAJCXJldCA9IHN0bW1hY19wcm9iZV9jb25maWdfZHQocGRldiwgcGxhdF9kYXQsICZtYWMpOwogCQlpZiAocmV0KSB7CiAJCQlwcl9lcnIoIiVzOiBtYWluIGR0IHByb2JlIGZhaWxlZCIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9zdW5obWUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9zdW5obWUuYwppbmRleCA3MmM4NTI1Li45YzAxNDgwM2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vc3VuaG1lLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL3N1bmhtZS5jCkBAIC0xMjYyLDYgKzEyNjIsNyBAQAogCUhNRCgoImluaXQgcnhyaW5nLCAiKSk7CiAJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CisJCXUzMiBtYXBwaW5nOwogCiAJCXNrYiA9IGhhcHB5X21lYWxfYWxsb2Nfc2tiKFJYX0JVRl9BTExPQ19TSVpFLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IpIHsKQEAgLTEyNzIsMTAgKzEyNzMsMTYgQEAKIAogCQkvKiBCZWNhdXNlIHdlIHJlc2VydmUgYWZ0ZXJ3YXJkcy4gKi8KIAkJc2tiX3B1dChza2IsIChFVEhfRlJBTUVfTEVOICsgUlhfT0ZGU0VUICsgNCkpOworCQltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoaHAtPmRtYV9kZXYsIHNrYi0+ZGF0YSwgUlhfQlVGX0FMTE9DX1NJWkUsCisJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoaHAtPmRtYV9kZXYsIG1hcHBpbmcpKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJaG1lX3dyaXRlX3J4ZChocCwgJmhiLT5oYXBweV9tZWFsX3J4ZFtpXSwgMCwgMCk7CisJCQljb250aW51ZTsKKwkJfQogCQlobWVfd3JpdGVfcnhkKGhwLCAmaGItPmhhcHB5X21lYWxfcnhkW2ldLAogCQkJICAgICAgKFJYRkxBR19PV04gfCAoKFJYX0JVRl9BTExPQ19TSVpFIC0gUlhfT0ZGU0VUKSA8PCAxNikpLAotCQkJICAgICAgZG1hX21hcF9zaW5nbGUoaHAtPmRtYV9kZXYsIHNrYi0+ZGF0YSwgUlhfQlVGX0FMTE9DX1NJWkUsCi0JCQkJCSAgICAgRE1BX0ZST01fREVWSUNFKSk7CisJCQkgICAgICBtYXBwaW5nKTsKIAkJc2tiX3Jlc2VydmUoc2tiLCBSWF9PRkZTRVQpOwogCX0KIApAQCAtMjAyMCw2ICsyMDI3LDcgQEAKIAkJc2tiID0gaHAtPnJ4X3NrYnNbZWxlbV07CiAJCWlmIChsZW4gPiBSWF9DT1BZX1RIUkVTSE9MRCkgewogCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CisJCQl1MzIgbWFwcGluZzsKIAogCQkJLyogTm93IHJlZmlsbCB0aGUgZW50cnksIGlmIHdlIGNhbi4gKi8KIAkJCW5ld19za2IgPSBoYXBweV9tZWFsX2FsbG9jX3NrYihSWF9CVUZfQUxMT0NfU0laRSwgR0ZQX0FUT01JQyk7CkBAIC0yMDI3LDEzICsyMDM1LDIxIEBACiAJCQkJZHJvcHMrKzsKIAkJCQlnb3RvIGRyb3BfaXQ7CiAJCQl9CisJCQlza2JfcHV0KG5ld19za2IsIChFVEhfRlJBTUVfTEVOICsgUlhfT0ZGU0VUICsgNCkpOworCQkJbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKGhwLT5kbWFfZGV2LCBuZXdfc2tiLT5kYXRhLAorCQkJCQkJIFJYX0JVRl9BTExPQ19TSVpFLAorCQkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoaHAtPmRtYV9kZXYsIG1hcHBpbmcpKSkgeworCQkJCWRldl9rZnJlZV9za2JfYW55KG5ld19za2IpOworCQkJCWRyb3BzKys7CisJCQkJZ290byBkcm9wX2l0OworCQkJfQorCiAJCQlkbWFfdW5tYXBfc2luZ2xlKGhwLT5kbWFfZGV2LCBkbWFfYWRkciwgUlhfQlVGX0FMTE9DX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAJCQlocC0+cnhfc2tic1tlbGVtXSA9IG5ld19za2I7Ci0JCQlza2JfcHV0KG5ld19za2IsIChFVEhfRlJBTUVfTEVOICsgUlhfT0ZGU0VUICsgNCkpOwogCQkJaG1lX3dyaXRlX3J4ZChocCwgdGhpcywKIAkJCQkgICAgICAoUlhGTEFHX09XTnwoKFJYX0JVRl9BTExPQ19TSVpFLVJYX09GRlNFVCk8PDE2KSksCi0JCQkJICAgICAgZG1hX21hcF9zaW5nbGUoaHAtPmRtYV9kZXYsIG5ld19za2ItPmRhdGEsIFJYX0JVRl9BTExPQ19TSVpFLAotCQkJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpKTsKKwkJCQkgICAgICBtYXBwaW5nKTsKIAkJCXNrYl9yZXNlcnZlKG5ld19za2IsIFJYX09GRlNFVCk7CiAKIAkJCS8qIFRyaW0gdGhlIG9yaWdpbmFsIHNrYiBmb3IgdGhlIG5ldGlmLiAqLwpAQCAtMjI0OCw2ICsyMjY0LDI1IEBACiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCitzdGF0aWMgdm9pZCB1bm1hcF9wYXJ0aWFsX3R4X3NrYihzdHJ1Y3QgaGFwcHlfbWVhbCAqaHAsIHUzMiBmaXJzdF9tYXBwaW5nLAorCQkJCSB1MzIgZmlyc3RfbGVuLCB1MzIgZmlyc3RfZW50cnksIHUzMiBlbnRyeSkKK3sKKwlzdHJ1Y3QgaGFwcHlfbWVhbF90eGQgKnR4YmFzZSA9ICZocC0+aGFwcHlfYmxvY2stPmhhcHB5X21lYWxfdHhkWzBdOworCisJZG1hX3VubWFwX3NpbmdsZShocC0+ZG1hX2RldiwgZmlyc3RfbWFwcGluZywgZmlyc3RfbGVuLCBETUFfVE9fREVWSUNFKTsKKworCWZpcnN0X2VudHJ5ID0gTkVYVF9UWChmaXJzdF9lbnRyeSk7CisJd2hpbGUgKGZpcnN0X2VudHJ5ICE9IGVudHJ5KSB7CisJCXN0cnVjdCBoYXBweV9tZWFsX3R4ZCAqdGhpcyA9ICZ0eGJhc2VbZmlyc3RfZW50cnldOworCQl1MzIgYWRkciwgbGVuOworCisJCWFkZHIgPSBobWVfcmVhZF9kZXNjMzIoaHAsICZ0aGlzLT50eF9hZGRyKTsKKwkJbGVuID0gaG1lX3JlYWRfZGVzYzMyKGhwLCAmdGhpcy0+dHhfZmxhZ3MpOworCQlsZW4gJj0gVFhGTEFHX1NJWkU7CisJCWRtYV91bm1hcF9wYWdlKGhwLT5kbWFfZGV2LCBhZGRyLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCX0KK30KKwogc3RhdGljIG5ldGRldl90eF90IGhhcHB5X21lYWxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTIyODQsNiArMjMxOSw4IEBACiAKIAkJbGVuID0gc2tiLT5sZW47CiAJCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZShocC0+ZG1hX2Rldiwgc2tiLT5kYXRhLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoaHAtPmRtYV9kZXYsIG1hcHBpbmcpKSkKKwkJCWdvdG8gb3V0X2RtYV9lcnJvcjsKIAkJdHhfZmxhZ3MgfD0gKFRYRkxBR19TT1AgfCBUWEZMQUdfRU9QKTsKIAkJaG1lX3dyaXRlX3R4ZChocCwgJmhwLT5oYXBweV9ibG9jay0+aGFwcHlfbWVhbF90eGRbZW50cnldLAogCQkJICAgICAgKHR4X2ZsYWdzIHwgKGxlbiAmIFRYRkxBR19TSVpFKSksCkBAIC0yMjk5LDYgKzIzMzYsOCBAQAogCQlmaXJzdF9sZW4gPSBza2JfaGVhZGxlbihza2IpOwogCQlmaXJzdF9tYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoaHAtPmRtYV9kZXYsIHNrYi0+ZGF0YSwgZmlyc3RfbGVuLAogCQkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihocC0+ZG1hX2RldiwgZmlyc3RfbWFwcGluZykpKQorCQkJZ290byBvdXRfZG1hX2Vycm9yOwogCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwogCiAJCWZvciAoZnJhZyA9IDA7IGZyYWcgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBmcmFnKyspIHsKQEAgLTIzMDgsNiArMjM0NywxMSBAQAogCQkJbGVuID0gc2tiX2ZyYWdfc2l6ZSh0aGlzX2ZyYWcpOwogCQkJbWFwcGluZyA9IHNrYl9mcmFnX2RtYV9tYXAoaHAtPmRtYV9kZXYsIHRoaXNfZnJhZywKIAkJCQkJCSAgIDAsIGxlbiwgRE1BX1RPX0RFVklDRSk7CisJCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoaHAtPmRtYV9kZXYsIG1hcHBpbmcpKSkgeworCQkJCXVubWFwX3BhcnRpYWxfdHhfc2tiKGhwLCBmaXJzdF9tYXBwaW5nLCBmaXJzdF9sZW4sCisJCQkJCQkgICAgIGZpcnN0X2VudHJ5LCBlbnRyeSk7CisJCQkJZ290byBvdXRfZG1hX2Vycm9yOworCQkJfQogCQkJdGhpc190eGZsYWdzID0gdHhfZmxhZ3M7CiAJCQlpZiAoZnJhZyA9PSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gMSkKIAkJCQl0aGlzX3R4ZmxhZ3MgfD0gVFhGTEFHX0VPUDsKQEAgLTIzMzMsNiArMjM3NywxNCBAQAogCiAJdHhfYWRkX2xvZyhocCwgVFhMT0dfQUNUSU9OX1RYTUlULCAwKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOworCitvdXRfZG1hX2Vycm9yOgorCWhwLT50eF9za2JzW2hwLT50eF9uZXddID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnEoJmhwLT5oYXBweV9sb2NrKTsKKworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpoYXBweV9tZWFsX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jCmluZGV4IGQ4Nzk0NDguLmM1NjBmOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMKQEAgLTEyOSw5ICsxMjksOSBAQAogI2RlZmluZSBDUFNXX1ZMQU5fQVdBUkUJCUJJVCgxKQogI2RlZmluZSBDUFNXX0FMRV9WTEFOX0FXQVJFCTEKIAotI2RlZmluZSBDUFNXX0ZJRk9fTk9STUFMX01PREUJCSgwIDw8IDE1KQotI2RlZmluZSBDUFNXX0ZJRk9fRFVBTF9NQUNfTU9ERQkJKDEgPDwgMTUpCi0jZGVmaW5lIENQU1dfRklGT19SQVRFX0xJTUlUX01PREUJKDIgPDwgMTUpCisjZGVmaW5lIENQU1dfRklGT19OT1JNQUxfTU9ERQkJKDAgPDwgMTYpCisjZGVmaW5lIENQU1dfRklGT19EVUFMX01BQ19NT0RFCQkoMSA8PCAxNikKKyNkZWZpbmUgQ1BTV19GSUZPX1JBVEVfTElNSVRfTU9ERQkoMiA8PCAxNikKIAogI2RlZmluZSBDUFNXX0lOVFBBQ0VFTgkJKDB4M2YgPDwgMTYpCiAjZGVmaW5lIENQU1dfSU5UUFJFU0NBTEVfTUFTSwkoMHg3RkYgPDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfYWxlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X2FsZS5jCmluZGV4IDNhZTgzODcuLjA5N2ViZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfYWxlLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19hbGUuYwpAQCAtNzg1LDcgKzc4NSw2IEBACiB7CiAJaWYgKCFhbGUpCiAJCXJldHVybiAtRUlOVkFMOwotCWNwc3dfYWxlX3N0b3AoYWxlKTsKIAljcHN3X2FsZV9jb250cm9sX3NldChhbGUsIDAsIEFMRV9FTkFCTEUsIDApOwogCWtmcmVlKGFsZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHRzLmMKaW5kZXggYWI5MmY2Ny4uNGE0Mzg4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3B0cy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2NwdHMuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIAlzd2l0Y2ggKHB0cF9jbGFzcyAmIFBUUF9DTEFTU19QTUFTSykgewogCWNhc2UgUFRQX0NMQVNTX0lQVjQ6Ci0JCW9mZnNldCArPSBFVEhfSExFTiArIElQVjRfSExFTihkYXRhKSArIFVEUF9ITEVOOworCQlvZmZzZXQgKz0gRVRIX0hMRU4gKyBJUFY0X0hMRU4oZGF0YSArIG9mZnNldCkgKyBVRFBfSExFTjsKIAkJYnJlYWs7CiAJY2FzZSBQVFBfQ0xBU1NfSVBWNjoKIAkJb2Zmc2V0ICs9IEVUSF9ITEVOICsgSVA2X0hMRU4gKyBVRFBfSExFTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWhhcmQuYyBiL2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWhhcmQuYwppbmRleCA5Y2U4NTRmLi42Y2JjNTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZWVlODAyMTU0L2Zha2VoYXJkLmMKKysrIGIvZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCkBAIC0zNzcsMTcgKzM3NywyMCBAQAogCiAJZXJyID0gd3Bhbl9waHlfcmVnaXN0ZXIocGh5KTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwkJZ290byBlcnJfcGh5X3JlZzsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9uZXRkZXZfcmVnOwogCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkFkZGVkIGllZWU4MDIxNTQgSGFyZE1BQyBoYXJkd2FyZVxuIik7CiAJcmV0dXJuIDA7CiAKLW91dDoKLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworZXJyX25ldGRldl9yZWc6CisJd3Bhbl9waHlfdW5yZWdpc3RlcihwaHkpOworZXJyX3BoeV9yZWc6CisJZnJlZV9uZXRkZXYoZGV2KTsKKwl3cGFuX3BoeV9mcmVlKHBoeSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdnRhcC5jIGIvZHJpdmVycy9uZXQvbWFjdnRhcC5jCmluZGV4IDZmMjI2ZGUuLjg4MGNjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3Z0YXAuYworKysgYi9kcml2ZXJzL25ldC9tYWN2dGFwLmMKQEAgLTYyOSw2ICs2MjksOCBAQAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCXZuZXRfaGRyLT5mbGFncyA9IFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTTsKIAkJdm5ldF9oZHItPmNzdW1fc3RhcnQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CisJCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCisJCQl2bmV0X2hkci0+Y3N1bV9zdGFydCArPSBWTEFOX0hMRU47CiAJCXZuZXRfaGRyLT5jc3VtX29mZnNldCA9IHNrYi0+Y3N1bV9vZmZzZXQ7CiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgewogCQl2bmV0X2hkci0+ZmxhZ3MgPSBWSVJUSU9fTkVUX0hEUl9GX0RBVEFfVkFMSUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvZHA4MzY0MC5jIGIvZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYwppbmRleCAyOTU0MDUyLi5lMjJlNjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvZHA4MzY0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmMKQEAgLTc5MSw3ICs3OTEsNyBAQAogCiAJc3dpdGNoICh0eXBlICYgUFRQX0NMQVNTX1BNQVNLKSB7CiAJY2FzZSBQVFBfQ0xBU1NfSVBWNDoKLQkJb2Zmc2V0ICs9IEVUSF9ITEVOICsgSVBWNF9ITEVOKGRhdGEpICsgVURQX0hMRU47CisJCW9mZnNldCArPSBFVEhfSExFTiArIElQVjRfSExFTihkYXRhICsgb2Zmc2V0KSArIFVEUF9ITEVOOwogCQlicmVhazsKIAljYXNlIFBUUF9DTEFTU19JUFY2OgogCQlvZmZzZXQgKz0gRVRIX0hMRU4gKyBJUDZfSExFTiArIFVEUF9ITEVOOwpAQCAtOTM0LDcgKzkzNCw3IEBACiAKIAlzd2l0Y2ggKHR5cGUgJiBQVFBfQ0xBU1NfUE1BU0spIHsKIAljYXNlIFBUUF9DTEFTU19JUFY0OgotCQlvZmZzZXQgKz0gRVRIX0hMRU4gKyBJUFY0X0hMRU4oZGF0YSkgKyBVRFBfSExFTjsKKwkJb2Zmc2V0ICs9IEVUSF9ITEVOICsgSVBWNF9ITEVOKGRhdGEgKyBvZmZzZXQpICsgVURQX0hMRU47CiAJCWJyZWFrOwogCWNhc2UgUFRQX0NMQVNTX0lQVjY6CiAJCW9mZnNldCArPSBFVEhfSExFTiArIElQNl9ITEVOICsgVURQX0hMRU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggMWRmZmZkYy4uNzY3Y2QxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwpAQCAtMzUyLDYgKzM1Miw3IEBACiB7CiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWlfZGF0YSA9IGlmX21paShpZnIpOwogCXUxNiB2YWwgPSBtaWlfZGF0YS0+dmFsX2luOworCWJvb2wgY2hhbmdlX2F1dG9uZWcgPSBmYWxzZTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR01JSVBIWToKQEAgLTM2NywyMiArMzY4LDI5IEBACiAJCWlmIChtaWlfZGF0YS0+cGh5X2lkID09IHBoeWRldi0+YWRkcikgewogCQkJc3dpdGNoIChtaWlfZGF0YS0+cmVnX251bSkgewogCQkJY2FzZSBNSUlfQk1DUjoKLQkJCQlpZiAoKHZhbCAmIChCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSkpID09IDApCisJCQkJaWYgKCh2YWwgJiAoQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpKSA9PSAwKSB7CisJCQkJCWlmIChwaHlkZXYtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCisJCQkJCQljaGFuZ2VfYXV0b25lZyA9IHRydWU7CiAJCQkJCXBoeWRldi0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKLQkJCQllbHNlCisJCQkJCWlmICh2YWwgJiBCTUNSX0ZVTExEUExYKQorCQkJCQkJcGh5ZGV2LT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCQkJZWxzZQorCQkJCQkJcGh5ZGV2LT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKwkJCQkJaWYgKHZhbCAmIEJNQ1JfU1BFRUQxMDAwKQorCQkJCQkJcGh5ZGV2LT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQkJCWVsc2UgaWYgKHZhbCAmIEJNQ1JfU1BFRUQxMDApCisJCQkJCQlwaHlkZXYtPnNwZWVkID0gU1BFRURfMTAwOworCQkJCQllbHNlIHBoeWRldi0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWlmIChwaHlkZXYtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKQorCQkJCQkJY2hhbmdlX2F1dG9uZWcgPSB0cnVlOwogCQkJCQlwaHlkZXYtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQkJCQlpZiAoIXBoeWRldi0+YXV0b25lZyAmJiAodmFsICYgQk1DUl9GVUxMRFBMWCkpCi0JCQkJCXBoeWRldi0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQkJZWxzZQotCQkJCQlwaHlkZXYtPmR1cGxleCA9IERVUExFWF9IQUxGOwotCQkJCWlmICghcGh5ZGV2LT5hdXRvbmVnICYmICh2YWwgJiBCTUNSX1NQRUVEMTAwMCkpCi0JCQkJCXBoeWRldi0+c3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJCWVsc2UgaWYgKCFwaHlkZXYtPmF1dG9uZWcgJiYKLQkJCQkJICh2YWwgJiBCTUNSX1NQRUVEMTAwKSkKLQkJCQkJcGh5ZGV2LT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIE1JSV9BRFZFUlRJU0U6Ci0JCQkJcGh5ZGV2LT5hZHZlcnRpc2luZyA9IHZhbDsKKwkJCQlwaHlkZXYtPmFkdmVydGlzaW5nID0gbWlpX2Fkdl90b19ldGh0b29sX2Fkdl90KHZhbCk7CisJCQkJY2hhbmdlX2F1dG9uZWcgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQkvKiBkbyBub3RoaW5nICovCkBAIC0zOTYsNiArNDA0LDEwIEBACiAJCWlmIChtaWlfZGF0YS0+cmVnX251bSA9PSBNSUlfQk1DUiAmJgogCQkgICAgdmFsICYgQk1DUl9SRVNFVCkKIAkJCXJldHVybiBwaHlfaW5pdF9odyhwaHlkZXYpOworCisJCWlmIChjaGFuZ2VfYXV0b25lZykKKwkJCXJldHVybiBwaHlfc3RhcnRfYW5lZyhwaHlkZXYpOworCiAJCXJldHVybiAwOwogCiAJY2FzZSBTSU9DU0hXVFNUQU1QOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwppbmRleCA2OGMzYTNmLi43OTRhNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwpAQCAtNzU1LDIzICs3NTUsMjMgQEAKIAogCQllcnIgPSBnZXRfZmlsdGVyKGFyZ3AsICZjb2RlKTsKIAkJaWYgKGVyciA+PSAwKSB7CisJCQlzdHJ1Y3QgYnBmX3Byb2cgKnBhc3NfZmlsdGVyID0gTlVMTDsKIAkJCXN0cnVjdCBzb2NrX2Zwcm9nX2tlcm4gZnByb2cgPSB7CiAJCQkJLmxlbiA9IGVyciwKIAkJCQkuZmlsdGVyID0gY29kZSwKIAkJCX07CiAKLQkJCXBwcF9sb2NrKHBwcCk7Ci0JCQlpZiAocHBwLT5wYXNzX2ZpbHRlcikgewotCQkJCWJwZl9wcm9nX2Rlc3Ryb3kocHBwLT5wYXNzX2ZpbHRlcik7Ci0JCQkJcHBwLT5wYXNzX2ZpbHRlciA9IE5VTEw7CisJCQllcnIgPSAwOworCQkJaWYgKGZwcm9nLmZpbHRlcikKKwkJCQllcnIgPSBicGZfcHJvZ19jcmVhdGUoJnBhc3NfZmlsdGVyLCAmZnByb2cpOworCQkJaWYgKCFlcnIpIHsKKwkJCQlwcHBfbG9jayhwcHApOworCQkJCWlmIChwcHAtPnBhc3NfZmlsdGVyKQorCQkJCQlicGZfcHJvZ19kZXN0cm95KHBwcC0+cGFzc19maWx0ZXIpOworCQkJCXBwcC0+cGFzc19maWx0ZXIgPSBwYXNzX2ZpbHRlcjsKKwkJCQlwcHBfdW5sb2NrKHBwcCk7CiAJCQl9Ci0JCQlpZiAoZnByb2cuZmlsdGVyICE9IE5VTEwpCi0JCQkJZXJyID0gYnBmX3Byb2dfY3JlYXRlKCZwcHAtPnBhc3NfZmlsdGVyLAotCQkJCQkJICAgICAgJmZwcm9nKTsKLQkJCWVsc2UKLQkJCQllcnIgPSAwOwogCQkJa2ZyZWUoY29kZSk7Ci0JCQlwcHBfdW5sb2NrKHBwcCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtNzgxLDIzICs3ODEsMjMgQEAKIAogCQllcnIgPSBnZXRfZmlsdGVyKGFyZ3AsICZjb2RlKTsKIAkJaWYgKGVyciA+PSAwKSB7CisJCQlzdHJ1Y3QgYnBmX3Byb2cgKmFjdGl2ZV9maWx0ZXIgPSBOVUxMOwogCQkJc3RydWN0IHNvY2tfZnByb2dfa2VybiBmcHJvZyA9IHsKIAkJCQkubGVuID0gZXJyLAogCQkJCS5maWx0ZXIgPSBjb2RlLAogCQkJfTsKIAotCQkJcHBwX2xvY2socHBwKTsKLQkJCWlmIChwcHAtPmFjdGl2ZV9maWx0ZXIpIHsKLQkJCQlicGZfcHJvZ19kZXN0cm95KHBwcC0+YWN0aXZlX2ZpbHRlcik7Ci0JCQkJcHBwLT5hY3RpdmVfZmlsdGVyID0gTlVMTDsKKwkJCWVyciA9IDA7CisJCQlpZiAoZnByb2cuZmlsdGVyKQorCQkJCWVyciA9IGJwZl9wcm9nX2NyZWF0ZSgmYWN0aXZlX2ZpbHRlciwgJmZwcm9nKTsKKwkJCWlmICghZXJyKSB7CisJCQkJcHBwX2xvY2socHBwKTsKKwkJCQlpZiAocHBwLT5hY3RpdmVfZmlsdGVyKQorCQkJCQlicGZfcHJvZ19kZXN0cm95KHBwcC0+YWN0aXZlX2ZpbHRlcik7CisJCQkJcHBwLT5hY3RpdmVfZmlsdGVyID0gYWN0aXZlX2ZpbHRlcjsKKwkJCQlwcHBfdW5sb2NrKHBwcCk7CiAJCQl9Ci0JCQlpZiAoZnByb2cuZmlsdGVyICE9IE5VTEwpCi0JCQkJZXJyID0gYnBmX3Byb2dfY3JlYXRlKCZwcHAtPmFjdGl2ZV9maWx0ZXIsCi0JCQkJCQkgICAgICAmZnByb2cpOwotCQkJZWxzZQotCQkJCWVyciA9IDA7CiAJCQlrZnJlZShjb2RlKTsKLQkJCXBwcF91bmxvY2socHBwKTsKIAkJfQogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwppbmRleCAxYWZmOTcwLi4xZGM2MjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKQEAgLTUwNiw3ICs1MDYsOSBAQAogCWludCBsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3BwcG94KTsKIAlzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggc3A7CiAKLQlzcC5zYV9mYW1pbHkJICA9IEFGX1BQUE9YOworCW1lbXNldCgmc3Auc2FfYWRkciwgMCwgc2l6ZW9mKHNwLnNhX2FkZHIpKTsKKworCXNwLnNhX2ZhbWlseSAgICA9IEFGX1BQUE9YOwogCXNwLnNhX3Byb3RvY29sICA9IFBYX1BST1RPX1BQVFA7CiAJc3Auc2FfYWRkci5wcHRwID0gcHBwb3hfc2soc29jay0+c2spLT5wcm90by5wcHRwLnNyY19hZGRyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDczMDIzOTguLjlkZDM3NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC0xMjM1LDEyICsxMjM1LDIwIEBACiAJc3RydWN0IHR1bl9waSBwaSA9IHsgMCwgc2tiLT5wcm90b2NvbCB9OwogCXNzaXplX3QgdG90YWwgPSAwOwogCWludCB2bGFuX29mZnNldCA9IDAsIGNvcGllZDsKKwlpbnQgdmxhbl9obGVuID0gMDsKKwlpbnQgdm5ldF9oZHJfc3ogPSAwOworCisJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKKwkJdmxhbl9obGVuID0gVkxBTl9ITEVOOworCisJaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fVk5FVF9IRFIpCisJCXZuZXRfaGRyX3N6ID0gdHVuLT52bmV0X2hkcl9zejsKIAogCWlmICghKHR1bi0+ZmxhZ3MgJiBUVU5fTk9fUEkpKSB7CiAJCWlmICgobGVuIC09IHNpemVvZihwaSkpIDwgMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmIChsZW4gPCBza2ItPmxlbikgeworCQlpZiAobGVuIDwgc2tiLT5sZW4gKyB2bGFuX2hsZW4gKyB2bmV0X2hkcl9zeikgewogCQkJLyogUGFja2V0IHdpbGwgYmUgc3RyaXBlZCAqLwogCQkJcGkuZmxhZ3MgfD0gVFVOX1BLVF9TVFJJUDsKIAkJfQpAQCAtMTI1MCw5ICsxMjU4LDkgQEAKIAkJdG90YWwgKz0gc2l6ZW9mKHBpKTsKIAl9CiAKLQlpZiAodHVuLT5mbGFncyAmIFRVTl9WTkVUX0hEUikgeworCWlmICh2bmV0X2hkcl9zeikgewogCQlzdHJ1Y3QgdmlydGlvX25ldF9oZHIgZ3NvID0geyAwIH07IC8qIG5vIGluZm8gbGVhayAqLwotCQlpZiAoKGxlbiAtPSB0dW4tPnZuZXRfaGRyX3N6KSA8IDApCisJCWlmICgobGVuIC09IHZuZXRfaGRyX3N6KSA8IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CkBAIC0xMjg0LDcgKzEyOTIsOCBAQAogCiAJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCQlnc28uZmxhZ3MgPSBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU07Ci0JCQlnc28uY3N1bV9zdGFydCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKKwkJCWdzby5jc3VtX3N0YXJ0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpICsKKwkJCQkJIHZsYW5faGxlbjsKIAkJCWdzby5jc3VtX29mZnNldCA9IHNrYi0+Y3N1bV9vZmZzZXQ7CiAJCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKIAkJCWdzby5mbGFncyA9IFZJUlRJT19ORVRfSERSX0ZfREFUQV9WQUxJRDsKQEAgLTEyOTMsMTQgKzEzMDIsMTMgQEAKIAkJaWYgKHVubGlrZWx5KG1lbWNweV90b2lvdmVjZW5kKGl2LCAodm9pZCAqKSZnc28sIHRvdGFsLAogCQkJCQkgICAgICAgc2l6ZW9mKGdzbykpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQl0b3RhbCArPSB0dW4tPnZuZXRfaGRyX3N6OworCQl0b3RhbCArPSB2bmV0X2hkcl9zejsKIAl9CiAKIAljb3BpZWQgPSB0b3RhbDsKLQl0b3RhbCArPSBza2ItPmxlbjsKLQlpZiAoIXZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewotCQlsZW4gPSBtaW5fdChpbnQsIHNrYi0+bGVuLCBsZW4pOwotCX0gZWxzZSB7CisJbGVuID0gbWluX3QoaW50LCBza2ItPmxlbiArIHZsYW5faGxlbiwgbGVuKTsKKwl0b3RhbCArPSBza2ItPmxlbiArIHZsYW5faGxlbjsKKwlpZiAodmxhbl9obGVuKSB7CiAJCWludCBjb3B5LCByZXQ7CiAJCXN0cnVjdCB7CiAJCQlfX2JlMTYgaF92bGFuX3Byb3RvOwpAQCAtMTMxMSw4ICsxMzE5LDYgQEAKIAkJdmV0aC5oX3ZsYW5fVENJID0gaHRvbnModmxhbl90eF90YWdfZ2V0KHNrYikpOwogCiAJCXZsYW5fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fcHJvdG8pOwotCQlsZW4gPSBtaW5fdChpbnQsIHNrYi0+bGVuICsgVkxBTl9ITEVOLCBsZW4pOwotCQl0b3RhbCArPSBWTEFOX0hMRU47CiAKIAkJY29weSA9IG1pbl90KGludCwgdmxhbl9vZmZzZXQsIGxlbik7CiAJCXJldCA9IHNrYl9jb3B5X2RhdGFncmFtX2NvbnN0X2lvdmVjKHNrYiwgMCwgaXYsIGNvcGllZCwgY29weSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMKaW5kZXggMmMwNWY2Yy4uODE2ZDUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYwpAQCAtNDY1LDE5ICs0NjUsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGFzaXhfc3dfcmVzZXQoZGV2LCBBWF9TV1JFU0VUX0lQUEQgfCBBWF9TV1JFU0VUX1BSTCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQltc2xlZXAoMTUwKTsKLQotCXJldCA9IGFzaXhfc3dfcmVzZXQoZGV2LCBBWF9TV1JFU0VUX0NMRUFSKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCW1zbGVlcCgxNTApOwotCi0JcmV0ID0gYXNpeF9zd19yZXNldChkZXYsIGVtYmRfcGh5ID8gQVhfU1dSRVNFVF9JUFJMIDogQVhfU1dSRVNFVF9QUlRFKTsKKwlheDg4NzcyX3Jlc2V0KGRldik7CiAKIAkvKiBSZWFkIFBIWUlEIHJlZ2lzdGVyICpBRlRFUiogdGhlIFBIWSB3YXMgcmVzZXQgcHJvcGVybHkgKi8KIAlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYyBiL2RyaXZlcnMvbmV0L3VzYi9xbWlfd3dhbi5jCmluZGV4IDIyNzU2ZGIuLmI4YTgyYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9xbWlfd3dhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9xbWlfd3dhbi5jCkBAIC03ODAsNiArNzgwLDcgQEAKIAl7UU1JX0ZJWEVEX0lOVEYoMHg0MTNjLCAweDgxYTQsIDgpfSwJLyogRGVsbCBXaXJlbGVzcyA1NTcwZSBIU1BBKyAoNDJNYnBzKSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgKi8KIAl7UU1JX0ZJWEVEX0lOVEYoMHg0MTNjLCAweDgxYTgsIDgpfSwJLyogRGVsbCBXaXJlbGVzcyA1ODA4IEdvYmkoVE0pIDRHIExURSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgKi8KIAl7UU1JX0ZJWEVEX0lOVEYoMHg0MTNjLCAweDgxYTksIDgpfSwJLyogRGVsbCBXaXJlbGVzcyA1ODA4ZSBHb2JpKFRNKSA0RyBMVEUgTW9iaWxlIEJyb2FkYmFuZCBDYXJkICovCisJe1FNSV9GSVhFRF9JTlRGKDB4MDNmMCwgMHg1ODFkLCA0KX0sCS8qIEhQIGx0NDExMiBMVEUvSFNQQSsgR29iaSA0RyBNb2R1bGUgKEh1YXdlaSBtZTkwNmUpICovCiAKIAkvKiA0LiBHb2JpIDEwMDAgZGV2aWNlcyAqLwogCXtRTUlfR09CSTFLX0RFVklDRSgweDA1YzYsIDB4OTIxMil9LAkvKiBBY2VyIEdvYmkgTW9kZW0gRGV2aWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggZWMyYThiNC4uYjBiYzhlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtMTY3Myw2ICsxNjczLDQwIEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBib29sIHZpcnRuZXRfZmFpbF9vbl9mZWF0dXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZmJpdCwKKwkJCQkgICAgY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKmRuYW1lKQoreworCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIGZiaXQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJkZXZpY2UgYWR2ZXJ0aXNlcyBmZWF0dXJlICVzIGJ1dCBub3QgJXMiLAorCQlmbmFtZSwgZG5hbWUpOworCisJcmV0dXJuIHRydWU7Cit9CisKKyNkZWZpbmUgVklSVE5FVF9GQUlMX09OKHZkZXYsIGZiaXQsIGRiaXQpCQkJXAorCXZpcnRuZXRfZmFpbF9vbl9mZWF0dXJlKHZkZXYsIGZiaXQsICNmYml0LCBkYml0KQorCitzdGF0aWMgYm9vbCB2aXJ0bmV0X3ZhbGlkYXRlX2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSAmJgorCSAgICAoVklSVE5FVF9GQUlMX09OKHZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1JYLAorCQkJICAgICAiVklSVElPX05FVF9GX0NUUkxfVlEiKSB8fAorCSAgICAgVklSVE5FVF9GQUlMX09OKHZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZMQU4sCisJCQkgICAgICJWSVJUSU9fTkVUX0ZfQ1RSTF9WUSIpIHx8CisJICAgICBWSVJUTkVUX0ZBSUxfT04odmRldiwgVklSVElPX05FVF9GX0dVRVNUX0FOTk9VTkNFLAorCQkJICAgICAiVklSVElPX05FVF9GX0NUUkxfVlEiKSB8fAorCSAgICAgVklSVE5FVF9GQUlMX09OKHZkZXYsIFZJUlRJT19ORVRfRl9NUSwgIlZJUlRJT19ORVRfRl9DVFJMX1ZRIikgfHwKKwkgICAgIFZJUlRORVRfRkFJTF9PTih2ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9NQUNfQUREUiwKKwkJCSAgICAgIlZJUlRJT19ORVRfRl9DVFJMX1ZRIikpKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGludCB2aXJ0bmV0X3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCWludCBpLCBlcnI7CkBAIC0xNjgwLDYgKzE3MTQsOSBAQAogCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpOwogCXUxNiBtYXhfcXVldWVfcGFpcnM7CiAKKwlpZiAoIXZpcnRuZXRfdmFsaWRhdGVfZmVhdHVyZXModmRldikpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogRmluZCBpZiBob3N0IHN1cHBvcnRzIG11bHRpcXVldWUgdmlydGlvX25ldCBkZXZpY2UgKi8KIAllcnIgPSB2aXJ0aW9fY3JlYWRfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfTVEsCiAJCQkJICAgc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4uYyBiL2RyaXZlcnMvbmV0L3Z4bGFuLmMKaW5kZXggY2EzMDk4Mi4uYmU0NjQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhsYW4uYworKysgYi9kcml2ZXJzL25ldC92eGxhbi5jCkBAIC02NywxMiArNjcsNiBAQAogCiAjZGVmaW5lIFZYTEFOX0ZMQUdTIDB4MDgwMDAwMDAJLyogc3RydWN0IHZ4bGFuaGRyLnZ4X2ZsYWdzIHJlcXVpcmVkIHZhbHVlLiAqLwogCi0vKiBWWExBTiBwcm90b2NvbCBoZWFkZXIgKi8KLXN0cnVjdCB2eGxhbmhkciB7Ci0JX19iZTMyIHZ4X2ZsYWdzOwotCV9fYmUzMiB2eF92bmk7Ci19OwotCiAvKiBVRFAgcG9ydCBmb3IgVlhMQU4gdHJhZmZpYy4KICAqIFRoZSBJQU5BIGFzc2lnbmVkIHBvcnQgaXMgNDc4OSwgYnV0IHRoZSBMaW51eCBkZWZhdWx0IGlzIDg0NzIKICAqIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZWFybHkgYWRvcHRlcnMuCkBAIC0yNzUsMTMgKzI2OSwxNSBAQAogCXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5KCZmZGItPnJlbW90ZXMsIHN0cnVjdCB2eGxhbl9yZHN0LCBsaXN0KTsKIH0KIAotLyogRmluZCBWWExBTiBzb2NrZXQgYmFzZWQgb24gbmV0d29yayBuYW1lc3BhY2UgYW5kIFVEUCBwb3J0ICovCi1zdGF0aWMgc3RydWN0IHZ4bGFuX3NvY2sgKnZ4bGFuX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUxNiBwb3J0KQorLyogRmluZCBWWExBTiBzb2NrZXQgYmFzZWQgb24gbmV0d29yayBuYW1lc3BhY2UsIGFkZHJlc3MgZmFtaWx5IGFuZCBVRFAgcG9ydCAqLworc3RhdGljIHN0cnVjdCB2eGxhbl9zb2NrICp2eGxhbl9maW5kX3NvY2soc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgIHNhX2ZhbWlseV90IGZhbWlseSwgX19iZTE2IHBvcnQpCiB7CiAJc3RydWN0IHZ4bGFuX3NvY2sgKnZzOwogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZzLCB2c19oZWFkKG5ldCwgcG9ydCksIGhsaXN0KSB7Ci0JCWlmIChpbmV0X3NrKHZzLT5zb2NrLT5zayktPmluZXRfc3BvcnQgPT0gcG9ydCkKKwkJaWYgKGluZXRfc2sodnMtPnNvY2stPnNrKS0+aW5ldF9zcG9ydCA9PSBwb3J0ICYmCisJCSAgICBpbmV0X3NrKHZzLT5zb2NrLT5zayktPnNrLnNrX2ZhbWlseSA9PSBmYW1pbHkpCiAJCQlyZXR1cm4gdnM7CiAJfQogCXJldHVybiBOVUxMOwpAQCAtMzAwLDExICsyOTYsMTIgQEAKIH0KIAogLyogTG9vayB1cCBWTkkgaW4gYSBwZXIgbmV0IG5hbWVzcGFjZSB0YWJsZSAqLwotc3RhdGljIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuX2ZpbmRfdm5pKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLCBfX2JlMTYgcG9ydCkKK3N0YXRpYyBzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbl9maW5kX3ZuaShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCwKKwkJCQkJc2FfZmFtaWx5X3QgZmFtaWx5LCBfX2JlMTYgcG9ydCkKIHsKIAlzdHJ1Y3QgdnhsYW5fc29jayAqdnM7CiAKLQl2cyA9IHZ4bGFuX2ZpbmRfc29jayhuZXQsIHBvcnQpOworCXZzID0gdnhsYW5fZmluZF9zb2NrKG5ldCwgZmFtaWx5LCBwb3J0KTsKIAlpZiAoIXZzKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNjIxLDYgKzYxOCw4IEBACiAJaW50IHZ4bGFuX2xlbiAgPSBzaXplb2Yoc3RydWN0IHZ4bGFuaGRyKSArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKTsKIAlpbnQgZXJyID0gLUVOT1NZUzsKIAorCXVkcF90dW5uZWxfZ3JvX2NvbXBsZXRlKHNrYiwgbmhvZmYpOworCiAJZWggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBuaG9mZiArIHNpemVvZihzdHJ1Y3QgdnhsYW5oZHIpKTsKIAl0eXBlID0gZWgtPmhfcHJvdG87CiAKQEAgLTE3NzEsNyArMTc3MCw4IEBACiAJCQlzdHJ1Y3QgdnhsYW5fZGV2ICpkc3RfdnhsYW47CiAKIAkJCWlwX3J0X3B1dChydCk7Ci0JCQlkc3RfdnhsYW4gPSB2eGxhbl9maW5kX3ZuaSh2eGxhbi0+bmV0LCB2bmksIGRzdF9wb3J0KTsKKwkJCWRzdF92eGxhbiA9IHZ4bGFuX2ZpbmRfdm5pKHZ4bGFuLT5uZXQsIHZuaSwKKwkJCQkJCSAgIGRzdC0+c2Euc2FfZmFtaWx5LCBkc3RfcG9ydCk7CiAJCQlpZiAoIWRzdF92eGxhbikKIAkJCQlnb3RvIHR4X2Vycm9yOwogCQkJdnhsYW5fZW5jYXBfYnlwYXNzKHNrYiwgdnhsYW4sIGRzdF92eGxhbik7CkBAIC0xODI1LDcgKzE4MjUsOCBAQAogCQkJc3RydWN0IHZ4bGFuX2RldiAqZHN0X3Z4bGFuOwogCiAJCQlkc3RfcmVsZWFzZShuZHN0KTsKLQkJCWRzdF92eGxhbiA9IHZ4bGFuX2ZpbmRfdm5pKHZ4bGFuLT5uZXQsIHZuaSwgZHN0X3BvcnQpOworCQkJZHN0X3Z4bGFuID0gdnhsYW5fZmluZF92bmkodnhsYW4tPm5ldCwgdm5pLAorCQkJCQkJICAgZHN0LT5zYS5zYV9mYW1pbHksIGRzdF9wb3J0KTsKIAkJCWlmICghZHN0X3Z4bGFuKQogCQkJCWdvdG8gdHhfZXJyb3I7CiAJCQl2eGxhbl9lbmNhcF9ieXBhc3Moc2tiLCB2eGxhbiwgZHN0X3Z4bGFuKTsKQEAgLTE5ODUsMTMgKzE5ODYsMTUgQEAKIAlzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyh2eGxhbi0+bmV0LCB2eGxhbl9uZXRfaWQpOwogCXN0cnVjdCB2eGxhbl9zb2NrICp2czsKKwlib29sIGlwdjYgPSB2eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX0lQVjY7CiAKIAlkZXYtPnRzdGF0cyA9IG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzKTsKIAlpZiAoIWRldi0+dHN0YXRzKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9jaygmdm4tPnNvY2tfbG9jayk7Ci0JdnMgPSB2eGxhbl9maW5kX3NvY2sodnhsYW4tPm5ldCwgdnhsYW4tPmRzdF9wb3J0KTsKKwl2cyA9IHZ4bGFuX2ZpbmRfc29jayh2eGxhbi0+bmV0LCBpcHY2ID8gQUZfSU5FVDYgOiBBRl9JTkVULAorCQkJICAgICB2eGxhbi0+ZHN0X3BvcnQpOwogCWlmICh2cykgewogCQkvKiBJZiB3ZSBoYXZlIGEgc29ja2V0IHdpdGggc2FtZSBwb3J0IGFscmVhZHksIHJldXNlIGl0ICovCiAJCWF0b21pY19pbmMoJnZzLT5yZWZjbnQpOwpAQCAtMjMwMyw5ICsyMzA2LDkgQEAKIAlpZiAoaXB2NikgewogCQl1ZHBfY29uZi5mYW1pbHkgPSBBRl9JTkVUNjsKIAkJdWRwX2NvbmYudXNlX3VkcDZfdHhfY2hlY2tzdW1zID0KLQkJICAgICEhKGZsYWdzICYgVlhMQU5fRl9VRFBfWkVST19DU1VNNl9UWCk7CisJCSAgICAhKGZsYWdzICYgVlhMQU5fRl9VRFBfWkVST19DU1VNNl9UWCk7CiAJCXVkcF9jb25mLnVzZV91ZHA2X3J4X2NoZWNrc3VtcyA9Ci0JCSAgICAhIShmbGFncyAmIFZYTEFOX0ZfVURQX1pFUk9fQ1NVTTZfUlgpOworCQkgICAgIShmbGFncyAmIFZYTEFOX0ZfVURQX1pFUk9fQ1NVTTZfUlgpOwogCX0gZWxzZSB7CiAJCXVkcF9jb25mLmZhbWlseSA9IEFGX0lORVQ7CiAJCXVkcF9jb25mLmxvY2FsX2lwLnNfYWRkciA9IElOQUREUl9BTlk7CkBAIC0yMzgyLDYgKzIzODUsNyBAQAogewogCXN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWMobmV0LCB2eGxhbl9uZXRfaWQpOwogCXN0cnVjdCB2eGxhbl9zb2NrICp2czsKKwlib29sIGlwdjYgPSBmbGFncyAmIFZYTEFOX0ZfSVBWNjsKIAogCXZzID0gdnhsYW5fc29ja2V0X2NyZWF0ZShuZXQsIHBvcnQsIHJjdiwgZGF0YSwgZmxhZ3MpOwogCWlmICghSVNfRVJSKHZzKSkKQEAgLTIzOTEsNyArMjM5NSw3IEBACiAJCXJldHVybiB2czsKIAogCXNwaW5fbG9jaygmdm4tPnNvY2tfbG9jayk7Ci0JdnMgPSB2eGxhbl9maW5kX3NvY2sobmV0LCBwb3J0KTsKKwl2cyA9IHZ4bGFuX2ZpbmRfc29jayhuZXQsIGlwdjYgPyBBRl9JTkVUNiA6IEFGX0lORVQsIHBvcnQpOwogCWlmICh2cykgewogCQlpZiAodnMtPnJjdiA9PSByY3YpCiAJCQlhdG9taWNfaW5jKCZ2cy0+cmVmY250KTsKQEAgLTI1NTAsNyArMjU1NCw4IEBACiAJICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1JYXSkpCiAJCXZ4bGFuLT5mbGFncyB8PSBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1JYOwogCi0JaWYgKHZ4bGFuX2ZpbmRfdm5pKG5ldCwgdm5pLCB2eGxhbi0+ZHN0X3BvcnQpKSB7CisJaWYgKHZ4bGFuX2ZpbmRfdm5pKG5ldCwgdm5pLCB1c2VfaXB2NiA/IEFGX0lORVQ2IDogQUZfSU5FVCwKKwkJCSAgIHZ4bGFuLT5kc3RfcG9ydCkpIHsKIAkJcHJfaW5mbygiZHVwbGljYXRlIFZOSSAldVxuIiwgdm5pKTsKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMKaW5kZXggNjk3YzRhZS4uMWU4ZWE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jCkBAIC02NjQsNiArNjY0LDE5IEBACiAJCWFoLT5lbmFibGVkX2NhbHMgfD0gVFhfQ0xfQ0FMOwogCWVsc2UKIAkJYWgtPmVuYWJsZWRfY2FscyAmPSB+VFhfQ0xfQ0FMOworCisJaWYgKEFSX1NSRVZfOTM0MChhaCkgfHwgQVJfU1JFVl85NTMxKGFoKSB8fCBBUl9TUkVWXzk1NTAoYWgpKSB7CisJCWlmIChhaC0+aXNfY2xrXzI1bWh6KSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSywgMHgxN2MgPDwgMSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1NMUDMyX01PREUsIDB4MDAxMGYzZDcpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9TTFAzMl9JTkMsIDB4MDAwMWU3YWUpOworCQl9IGVsc2UgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9SVENfREVSSVZFRF9DTEssIDB4MjYxIDw8IDEpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9TTFAzMl9NT0RFLCAweDAwMTBmNDAwKTsKKwkJCVJFR19XUklURShhaCwgQVJfU0xQMzJfSU5DLCAweDAwMDFlODAwKTsKKwkJfQorCQl1ZGVsYXkoMTAwKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGFyOTAwM19od19wcm9nX2luaShzdHJ1Y3QgYXRoX2h3ICphaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKaW5kZXggOGJlNGIxNC4uMmFkNjA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKQEAgLTg2MSwxOSArODYxLDYgQEAKIAl1ZGVsYXkoUlRDX1BMTF9TRVRUTEVfREVMQVkpOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfU0xFRVBfQ0xLLCBBUl9SVENfRk9SQ0VfREVSSVZFRF9DTEspOwotCi0JaWYgKEFSX1NSRVZfOTM0MChhaCkgfHwgQVJfU1JFVl85NTUwKGFoKSkgewotCQlpZiAoYWgtPmlzX2Nsa18yNW1oeikgewotCQkJUkVHX1dSSVRFKGFoLCBBUl9SVENfREVSSVZFRF9DTEssIDB4MTdjIDw8IDEpOwotCQkJUkVHX1dSSVRFKGFoLCBBUl9TTFAzMl9NT0RFLCAweDAwMTBmM2Q3KTsKLQkJCVJFR19XUklURShhaCwgIEFSX1NMUDMyX0lOQywgMHgwMDAxZTdhZSk7Ci0JCX0gZWxzZSB7Ci0JCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSywgMHgyNjEgPDwgMSk7Ci0JCQlSRUdfV1JJVEUoYWgsIEFSX1NMUDMyX01PREUsIDB4MDAxMGY0MDApOwotCQkJUkVHX1dSSVRFKGFoLCAgQVJfU0xQMzJfSU5DLCAweDAwMDFlODAwKTsKLQkJfQotCQl1ZGVsYXkoMTAwKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKHN0cnVjdCBhdGhfaHcgKmFoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKaW5kZXggMzBjNjZkZi4uNGYxOGE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCkBAIC05NzQsOSArOTc0LDggQEAKIAlzdHJ1Y3QgYXRoX3ZpZiAqYXZwOwogCiAJLyoKLQkgKiBQaWNrIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgZmlyc3QgaW50ZXJmYWNlIGFzIHRoZSBuZXcgaGFyZHdhcmUKLQkgKiBNQUMgYWRkcmVzcy4gVGhlIGhhcmR3YXJlIHdpbGwgdXNlIGl0IHRvZ2V0aGVyIHdpdGggdGhlIEJTU0lEIG1hc2sKLQkgKiB3aGVuIG1hdGNoaW5nIGFkZHJlc3Nlcy4KKwkgKiBUaGUgaGFyZHdhcmUgd2lsbCB1c2UgcHJpbWFyeSBzdGF0aW9uIGFkZHIgdG9nZXRoZXIgd2l0aCB0aGUKKwkgKiBCU1NJRCBtYXNrIHdoZW4gbWF0Y2hpbmcgYWRkcmVzc2VzLgogCSAqLwogCW1lbXNldChpdGVyX2RhdGEsIDAsIHNpemVvZigqaXRlcl9kYXRhKSk7CiAJbWVtc2V0KCZpdGVyX2RhdGEtPm1hc2ssIDB4ZmYsIEVUSF9BTEVOKTsKQEAgLTEyMDUsNiArMTIwNCw4IEBACiAJCWxpc3RfYWRkX3RhaWwoJmF2cC0+bGlzdCwgJmF2cC0+Y2hhbmN0eC0+dmlmcyk7CiAJfQogCisJYXRoOWtfY2FsY3VsYXRlX3N1bW1hcnlfc3RhdGUoc2MsIGF2cC0+Y2hhbmN0eCk7CisKIAlhdGg5a19hc3NpZ25faHdfcXVldWVzKGh3LCB2aWYpOwogCiAJYW4tPnNjID0gc2M7CkBAIC0xMjc0LDYgKzEyNzUsOCBAQAogCiAJYXRoX3R4X25vZGVfY2xlYW51cChzYywgJmF2cC0+bWNhc3Rfbm9kZSk7CiAKKwlhdGg5a19jYWxjdWxhdGVfc3VtbWFyeV9zdGF0ZShzYywgYXZwLT5jaGFuY3R4KTsKKwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmMKaW5kZXggMWRmYzY4Mi4uZWUyN2IwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5jCkBAIC0zMDAsOSArMzAwLDcgQEAKIAogdm9pZCBiNDNfcGh5X2NvcHkoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgZGVzdHJlZywgdTE2IHNyY3JlZykKIHsKLQlhc3NlcnRfbWFjX3N1c3BlbmRlZChkZXYpOwotCWRldi0+cGh5Lm9wcy0+cGh5X3dyaXRlKGRldiwgZGVzdHJlZywKLQkJZGV2LT5waHkub3BzLT5waHlfcmVhZChkZXYsIHNyY3JlZykpOworCWI0M19waHlfd3JpdGUoZGV2LCBkZXN0cmVnLCBiNDNfcGh5X3JlYWQoZGV2LCBzcmNyZWcpKTsKIH0KIAogdm9pZCBiNDNfcGh5X21hc2soc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCB1MTYgbWFzaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9vZi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL29mLmMKaW5kZXggZjA1ZjUyNy4uOTI3YmZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL29mLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL29mLmMKQEAgLTQwLDggKzQwLDggQEAKIAkJcmV0dXJuOwogCiAJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwotCWlmIChpcnEgPCAwKSB7Ci0JCWJyY21mX2VycigiaW50ZXJydXB0IGNvdWxkIG5vdCBiZSBtYXBwZWQ6IGVycj0lZFxuIiwgaXJxKTsKKwlpZiAoIWlycSkgeworCQlicmNtZl9lcnIoImludGVycnVwdCBjb3VsZCBub3QgYmUgbWFwcGVkXG4iKTsKIAkJZGV2bV9rZnJlZShkZXYsIHNkaW9kZXYtPnBkYXRhKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jCmluZGV4IDhjMDYzMmUuLjE2ZmVmMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYwpAQCAtMTksMTAgKzE5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2FjY2Vzc19vay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JjbWEvYmNtYS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8c29jLmg+CiAjaW5jbHVkZSA8Y2hpcGNvbW1vbi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jCmluZGV4IGRjMTM1OTEuLjg3NWQxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMKQEAgLTY2OSwxMCArNjY5LDEyIEBACiAJCWdvdG8gZmluYWxpemU7CiAJfQogCi0JaWYgKCFicmNtZl91c2JfaW9jdGxfcmVzcF93YWl0KGRldmluZm8pKQorCWlmICghYnJjbWZfdXNiX2lvY3RsX3Jlc3Bfd2FpdChkZXZpbmZvKSkgeworCQl1c2Jfa2lsbF91cmIoZGV2aW5mby0+Y3RsX3VyYik7CiAJCXJldCA9IC1FVElNRURPVVQ7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCW1lbWNweShidWZmZXIsIHRtcGJ1ZiwgYnVmbGVuKTsKKwl9CiAKIGZpbmFsaXplOgogCWtmcmVlKHRtcGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvd2xfY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy93bF9jZmc4MDIxMS5jCmluZGV4IDI4ZmEyNWIuLjM5YjQ1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy93bF9jZmc4MDIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy93bF9jZmc4MDIxMS5jCkBAIC0yOTksNiArMjk5LDcgQEAKIAlwcmltYXJ5X29mZnNldCA9IGNoLT5jZW50ZXJfZnJlcTEgLSBjaC0+Y2hhbi0+Y2VudGVyX2ZyZXE7CiAJc3dpdGNoIChjaC0+d2lkdGgpIHsKIAljYXNlIE5MODAyMTFfQ0hBTl9XSURUSF8yMDoKKwljYXNlIE5MODAyMTFfQ0hBTl9XSURUSF8yMF9OT0hUOgogCQljaF9pbmYuYncgPSBCUkNNVV9DSEFOX0JXXzIwOwogCQlXQVJOX09OKHByaW1hcnlfb2Zmc2V0ICE9IDApOwogCQlicmVhazsKQEAgLTMyMyw2ICszMjQsMTAgQEAKIAkJCQljaF9pbmYuc2IgPSBCUkNNVV9DSEFOX1NCX0xVOwogCQl9CiAJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzgwUDgwOgorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzE2MDoKKwljYXNlIE5MODAyMTFfQ0hBTl9XSURUSF81OgorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzEwOgogCWRlZmF1bHQ6CiAJCVdBUk5fT05fT05DRSgxKTsKIAl9CkBAIC0zMzMsNiArMzM4LDcgQEAKIAljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CiAJCWNoX2luZi5iYW5kID0gQlJDTVVfQ0hBTl9CQU5EXzVHOwogCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzYwR0haOgogCWRlZmF1bHQ6CiAJCVdBUk5fT05fT05DRSgxKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZncuaAppbmRleCA0ZjZlNjY4Li5iODk0YTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZ3LmgKQEAgLTE1NSw2ICsxNTUsNyBAQAogICogQElXTF9VQ09ERV9UTFZfQ0FQQV9RVUlFVF9QRVJJT0RfU1VQUE9SVDogc3VwcG9ydHMgUXVpZXQgUGVyaW9kIHJlcXVlc3RzCiAgKiBASVdMX1VDT0RFX1RMVl9DQVBBX0RRQV9TVVBQT1JUOiBzdXBwb3J0cyBkeW5hbWljIHF1ZXVlIGFsbG9jYXRpb24gKERRQSksCiAgKgl3aGljaCBhbHNvIGltcGxpZXMgc3VwcG9ydCBmb3IgdGhlIHNjaGVkdWxlciBjb25maWd1cmF0aW9uIGNvbW1hbmQKKyAqIEBJV0xfVUNPREVfVExWX0NBUEFfSE9UU1BPVF9TVVBQT1JUOiBzdXBwb3J0cyBIb3QgU3BvdCBDb21tYW5kCiAgKi8KIGVudW0gaXdsX3Vjb2RlX3Rsdl9jYXBhIHsKIAlJV0xfVUNPREVfVExWX0NBUEFfRDBJM19TVVBQT1JUCQkJPSBCSVQoMCksCkBAIC0xNjMsNiArMTY0LDcgQEAKIAlJV0xfVUNPREVfVExWX0NBUEFfV0ZBX1RQQ19SRVBfSUVfU1VQUE9SVAk9IEJJVCgxMCksCiAJSVdMX1VDT0RFX1RMVl9DQVBBX1FVSUVUX1BFUklPRF9TVVBQT1JUCQk9IEJJVCgxMSksCiAJSVdMX1VDT0RFX1RMVl9DQVBBX0RRQV9TVVBQT1JUCQkJPSBCSVQoMTIpLAorCUlXTF9VQ09ERV9UTFZfQ0FQQV9IT1RTUE9UX1NVUFBPUlQJCT0gQklUKDE4KSwKIH07CiAKIC8qIFRoZSBkZWZhdWx0IGNhbGlicmF0ZSB0YWJsZSBzaXplIGlmIG5vdCBzcGVjaWZpZWQgYnkgZmlybXdhcmUgZmlsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LmMKaW5kZXggZTBkOWYxOS4uZWIwMzk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZncuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm12bS0+bXV0ZXgpOwogCi0JaWYgKFdBUk5fT05fT05DRShtdm0tPmluaXRfdWNvZGVfY29tcGxldGUpKQorCWlmIChXQVJOX09OX09OQ0UobXZtLT5pbml0X3Vjb2RlX2NvbXBsZXRlIHx8IG12bS0+Y2FsaWJyYXRpbmcpKQogCQlyZXR1cm4gMDsKIAogCWl3bF9pbml0X25vdGlmaWNhdGlvbl93YWl0KCZtdm0tPm5vdGlmX3dhaXQsCkBAIC0zMzQsNiArMzM0LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCisJbXZtLT5jYWxpYnJhdGluZyA9IHRydWU7CisKIAkvKiBTZW5kIFRYIHZhbGlkIGFudGVubmFzIGJlZm9yZSB0cmlnZ2VyaW5nIGNhbGlicmF0aW9ucyAqLwogCXJldCA9IGl3bF9zZW5kX3R4X2FudF9jZmcobXZtLCBtdm0tPmZ3LT52YWxpZF90eF9hbnQpOwogCWlmIChyZXQpCkBAIC0zNTgsMTEgKzM2MCwxNyBAQAogCQkJTVZNX1VDT0RFX0NBTElCX1RJTUVPVVQpOwogCWlmICghcmV0KQogCQltdm0tPmluaXRfdWNvZGVfY29tcGxldGUgPSB0cnVlOworCisJaWYgKHJldCAmJiBpd2xfbXZtX2lzX3JhZGlvX2tpbGxlZChtdm0pKSB7CisJCUlXTF9ERUJVR19SRl9LSUxMKG12bSwgIlJGS0lMTCB3aGlsZSBjYWxpYnJhdGluZy5cbiIpOworCQlyZXQgPSAxOworCX0KIAlnb3RvIG91dDsKIAogZXJyb3I6CiAJaXdsX3JlbW92ZV9ub3RpZmljYXRpb24oJm12bS0+bm90aWZfd2FpdCwgJmNhbGliX3dhaXQpOwogb3V0OgorCW12bS0+Y2FsaWJyYXRpbmcgPSBmYWxzZTsKIAlpZiAoaXdsbXZtX21vZF9wYXJhbXMuaW5pdF9kYmcgJiYgIW12bS0+bnZtX2RhdGEpIHsKIAkJLyogd2Ugd2FudCB0byBkZWJ1ZyBJTklUIGFuZCB3ZSBoYXZlIG5vIE5WTSAtIGZha2UgKi8KIAkJbXZtLT5udm1fZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2xfbnZtX2RhdGEpICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tYWM4MDIxMS5jCmluZGV4IDU4NWZlNWIuLmI2ZDI2ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL21hYzgwMjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbWFjODAyMTEuYwpAQCAtNzg4LDYgKzc4OCw3IEBACiAKIAltdm0tPnNjYW5fc3RhdHVzID0gSVdMX01WTV9TQ0FOX05PTkU7CiAJbXZtLT5wc19kaXNhYmxlZCA9IGZhbHNlOworCW12bS0+Y2FsaWJyYXRpbmcgPSBmYWxzZTsKIAogCS8qIGp1c3QgaW4gY2FzZSBvbmUgd2FzIHJ1bm5pbmcgKi8KIAlpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhwaXJlZChtdm0tPmh3KTsKQEAgLTI0NDcsOSArMjQ0OCwxNSBAQAogCiAJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCS8qIFVzZSBhdXggcm9jIGZyYW1ld29yayAoSFMyMCkgKi8KLQkJcmV0ID0gaXdsX212bV9zZW5kX2F1eF9yb2NfY21kKG12bSwgY2hhbm5lbCwKLQkJCQkJICAgICAgIHZpZiwgZHVyYXRpb24pOworCQlpZiAobXZtLT5mdy0+dWNvZGVfY2FwYS5jYXBhWzBdICYKKwkJICAgIElXTF9VQ09ERV9UTFZfQ0FQQV9IT1RTUE9UX1NVUFBPUlQpIHsKKwkJCS8qIFVzZSBhdXggcm9jIGZyYW1ld29yayAoSFMyMCkgKi8KKwkJCXJldCA9IGl3bF9tdm1fc2VuZF9hdXhfcm9jX2NtZChtdm0sIGNoYW5uZWwsCisJCQkJCQkgICAgICAgdmlmLCBkdXJhdGlvbik7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwkJSVdMX0VSUihtdm0sICJob3RzcG90IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfREVWSUNFOgogCQkvKiBoYW5kbGUgYmVsb3cgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL212bS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbXZtLmgKaW5kZXggYjE1M2NlZC4uODQ1NDI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbXZtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbXZtLmgKQEAgLTU0OCw2ICs1NDgsNyBAQAogCWVudW0gaXdsX3Vjb2RlX3R5cGUgY3VyX3Vjb2RlOwogCWJvb2wgdWNvZGVfbG9hZGVkOwogCWJvb2wgaW5pdF91Y29kZV9jb21wbGV0ZTsKKwlib29sIGNhbGlicmF0aW5nOwogCXUzMiBlcnJvcl9ldmVudF90YWJsZTsKIAl1MzIgbG9nX2V2ZW50X3RhYmxlOwogCXUzMiB1bWFjX2Vycm9yX2V2ZW50X3RhYmxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vb3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9vcHMuYwppbmRleCA0OGNiMjVhLi41YjcxOWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9vcHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9vcHMuYwpAQCAtNDI0LDYgKzQyNCw3IEBACiAJfQogCW12bS0+c2Zfc3RhdGUgPSBTRl9VTklOSVQ7CiAJbXZtLT5sb3dfbGF0ZW5jeV9hZ2dfZnJhbWVfbGltaXQgPSA2OworCW12bS0+Y3VyX3Vjb2RlID0gSVdMX1VDT0RFX0lOSVQ7CiAKIAltdXRleF9pbml0KCZtdm0tPm11dGV4KTsKIAltdXRleF9pbml0KCZtdm0tPmQwaTNfc3VzcGVuZF9tdXRleCk7CkBAIC03NTIsNiArNzUzLDcgQEAKIHN0YXRpYyBib29sIGl3bF9tdm1fc2V0X2h3X3Jma2lsbF9zdGF0ZShzdHJ1Y3QgaXdsX29wX21vZGUgKm9wX21vZGUsIGJvb2wgc3RhdGUpCiB7CiAJc3RydWN0IGl3bF9tdm0gKm12bSA9IElXTF9PUF9NT0RFX0dFVF9NVk0ob3BfbW9kZSk7CisJYm9vbCBjYWxpYnJhdGluZyA9IEFDQ0VTU19PTkNFKG12bS0+Y2FsaWJyYXRpbmcpOwogCiAJaWYgKHN0YXRlKQogCQlzZXRfYml0KElXTF9NVk1fU1RBVFVTX0hXX1JGS0lMTCwgJm12bS0+c3RhdHVzKTsKQEAgLTc2MCw3ICs3NjIsMTUgQEAKIAogCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUobXZtLT5ody0+d2lwaHksIGl3bF9tdm1faXNfcmFkaW9fa2lsbGVkKG12bSkpOwogCi0JcmV0dXJuIHN0YXRlICYmIG12bS0+Y3VyX3Vjb2RlICE9IElXTF9VQ09ERV9JTklUOworCS8qIGl3bF9ydW5faW5pdF9tdm1fdWNvZGUgaXMgd2FpdGluZyBmb3IgcmVzdWx0cywgYWJvcnQgaXQgKi8KKwlpZiAoY2FsaWJyYXRpbmcpCisJCWl3bF9hYm9ydF9ub3RpZmljYXRpb25fd2FpdHMoJm12bS0+bm90aWZfd2FpdCk7CisKKwkvKgorCSAqIFN0b3AgdGhlIGRldmljZSBpZiB3ZSBydW4gT1BFUkFUSU9OQUwgZmlybXdhcmUgb3IgaWYgd2UgYXJlIGluIHRoZQorCSAqIG1pZGRsZSBvZiB0aGUgY2FsaWJyYXRpb25zLgorCSAqLworCXJldHVybiBzdGF0ZSAmJiAobXZtLT5jdXJfdWNvZGUgIT0gSVdMX1VDT0RFX0lOSVQgfHwgY2FsaWJyYXRpbmcpOwogfQogCiBzdGF0aWMgdm9pZCBpd2xfbXZtX2ZyZWVfc2tiKHN0cnVjdCBpd2xfb3BfbW9kZSAqb3BfbW9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3NjYW4uYwppbmRleCBiMjgwZDVkLi43NTU0ZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc2Nhbi5jCkBAIC02MDIsMTYgKzYwMiw2IEBACiAJCQkJCSAgICAgICBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTiB9OwogCWludCByZXQ7CiAKLQlpZiAobXZtLT5zY2FuX3N0YXR1cyA9PSBJV0xfTVZNX1NDQU5fTk9ORSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoaXdsX212bV9pc19yYWRpb19raWxsZWQobXZtKSkgewotCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQobXZtLT5odywgdHJ1ZSk7Ci0JCWl3bF9tdm1fdW5yZWYobXZtLCBJV0xfTVZNX1JFRl9TQ0FOKTsKLQkJbXZtLT5zY2FuX3N0YXR1cyA9IElXTF9NVk1fU0NBTl9OT05FOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpd2xfaW5pdF9ub3RpZmljYXRpb25fd2FpdCgmbXZtLT5ub3RpZl93YWl0LCAmd2FpdF9zY2FuX2Fib3J0LAogCQkJCSAgIHNjYW5fYWJvcnRfbm90aWYsCiAJCQkJICAgQVJSQVlfU0laRShzY2FuX2Fib3J0X25vdGlmKSwKQEAgLTE0MDAsNiArMTM5MCwxNiBAQAogCiBpbnQgaXdsX212bV9jYW5jZWxfc2NhbihzdHJ1Y3QgaXdsX212bSAqbXZtKQogeworCWlmIChtdm0tPnNjYW5fc3RhdHVzID09IElXTF9NVk1fU0NBTl9OT05FKQorCQlyZXR1cm4gMDsKKworCWlmIChpd2xfbXZtX2lzX3JhZGlvX2tpbGxlZChtdm0pKSB7CisJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChtdm0tPmh3LCB0cnVlKTsKKwkJaXdsX212bV91bnJlZihtdm0sIElXTF9NVk1fUkVGX1NDQU4pOworCQltdm0tPnNjYW5fc3RhdHVzID0gSVdMX01WTV9TQ0FOX05PTkU7CisJCXJldHVybiAwOworCX0KKwogCWlmIChtdm0tPmZ3LT51Y29kZV9jYXBhLmFwaVswXSAmIElXTF9VQ09ERV9UTFZfQVBJX0xNQUNfU0NBTikKIAkJcmV0dXJuIGl3bF9tdm1fc2Nhbl9vZmZsb2FkX3N0b3AobXZtLCB0cnVlKTsKIAlyZXR1cm4gaXdsX212bV9jYW5jZWxfcmVndWxhcl9zY2FuKG12bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL3BjaWUvdHJhbnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90cmFucy5jCmluZGV4IDM3ODFiMDIuLmRkMmYzZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90cmFucy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90cmFucy5jCkBAIC05MTUsNyArOTE1LDggQEAKIAkgKiByZXN0YXJ0LiBTbyBkb24ndCBwcm9jZXNzIGFnYWluIGlmIHRoZSBkZXZpY2UgaXMKIAkgKiBhbHJlYWR5IGRlYWQuCiAJICovCi0JaWYgKHRlc3RfYml0KFNUQVRVU19ERVZJQ0VfRU5BQkxFRCwgJnRyYW5zLT5zdGF0dXMpKSB7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTVEFUVVNfREVWSUNFX0VOQUJMRUQsICZ0cmFucy0+c3RhdHVzKSkgeworCQlJV0xfREVCVUdfSU5GTyh0cmFucywgIkRFVklDRV9FTkFCTEVEIGJpdCB3YXMgc2V0IGFuZCBpcyBub3cgY2xlYXJlZFxuIik7CiAJCWl3bF9wY2llX3R4X3N0b3AodHJhbnMpOwogCQlpd2xfcGNpZV9yeF9zdG9wKHRyYW5zKTsKIApAQCAtOTQ1LDcgKzk0Niw2IEBACiAJLyogY2xlYXIgYWxsIHN0YXR1cyBiaXRzICovCiAJY2xlYXJfYml0KFNUQVRVU19TWU5DX0hDTURfQUNUSVZFLCAmdHJhbnMtPnN0YXR1cyk7CiAJY2xlYXJfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnRyYW5zLT5zdGF0dXMpOwotCWNsZWFyX2JpdChTVEFUVVNfREVWSUNFX0VOQUJMRUQsICZ0cmFucy0+c3RhdHVzKTsKIAljbGVhcl9iaXQoU1RBVFVTX1RQT1dFUl9QTUksICZ0cmFucy0+c3RhdHVzKTsKIAljbGVhcl9iaXQoU1RBVFVTX1JGS0lMTCwgJnRyYW5zLT5zdGF0dXMpOwogCkBAIC0xODk0LDggKzE4OTQsNyBAQAogCQlpbnQgcmVnOwogCQlfX2xlMzIgKnZhbDsKIAotCQlwcnBoX2xlbiArPSBzaXplb2YoKmRhdGEpICsgc2l6ZW9mKCpwcnBoKSArCi0JCQludW1fYnl0ZXNfaW5fY2h1bms7CisJCXBycGhfbGVuICs9IHNpemVvZigqKmRhdGEpICsgc2l6ZW9mKCpwcnBoKSArIG51bV9ieXRlc19pbl9jaHVuazsKIAogCQkoKmRhdGEpLT50eXBlID0gY3B1X3RvX2xlMzIoSVdMX0ZXX0VSUk9SX0RVTVBfUFJQSCk7CiAJCSgqZGF0YSktPmxlbiA9IGNwdV90b19sZTMyKHNpemVvZigqcHJwaCkgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggYmFiYmRjMS4uYzlhZDRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC0xOTg3LDcgKzE5ODcsNyBAQAogCWlmIChlcnIgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAibWFjODAyMTFfaHdzaW06IGRldmljZV9iaW5kX2RyaXZlciBmYWlsZWQgKCVkKVxuIiwKIAkJICAgICAgIGVycik7Ci0JCWdvdG8gZmFpbGVkX2h3OworCQlnb3RvIGZhaWxlZF9iaW5kOwogCX0KIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmRhdGEtPnBlbmRpbmcpOwpAQCAtMjE4Myw2ICsyMTgzLDggQEAKIAlyZXR1cm4gaWR4OwogCiBmYWlsZWRfaHc6CisJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtPmRldik7CitmYWlsZWRfYmluZDoKIAlkZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5kZXYpOwogZmFpbGVkX2RydmRhdGE6CiAJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYwppbmRleCA4ZTY4Zjg3Li42NmZmMzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYwpAQCAtMTU4LDU1ICsxNTgsMjkgQEAKIAlza2JfdHJpbShza2IsIGZyYW1lX2xlbmd0aCk7CiB9CiAKLXZvaWQgcnQyeDAwcXVldWVfaW5zZXJ0X2wycGFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoKQorLyoKKyAqIEgvVyBuZWVkcyBMMiBwYWRkaW5nIGJldHdlZW4gdGhlIGhlYWRlciBhbmQgdGhlIHBheWxvZCBpZiBoZWFkZXIgc2l6ZQorICogaXMgbm90IDQgYnl0ZXMgYWxpZ25lZC4KKyAqLwordm9pZCBydDJ4MDBxdWV1ZV9pbnNlcnRfbDJwYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcl9sZW4pCiB7Ci0JdW5zaWduZWQgaW50IHBheWxvYWRfbGVuZ3RoID0gc2tiLT5sZW4gLSBoZWFkZXJfbGVuZ3RoOwotCXVuc2lnbmVkIGludCBoZWFkZXJfYWxpZ24gPSBBTElHTl9TSVpFKHNrYiwgMCk7Ci0JdW5zaWduZWQgaW50IHBheWxvYWRfYWxpZ24gPSBBTElHTl9TSVpFKHNrYiwgaGVhZGVyX2xlbmd0aCk7Ci0JdW5zaWduZWQgaW50IGwycGFkID0gcGF5bG9hZF9sZW5ndGggPyBMMlBBRF9TSVpFKGhlYWRlcl9sZW5ndGgpIDogMDsKLQotCS8qCi0JICogQWRqdXN0IHRoZSBoZWFkZXIgYWxpZ25tZW50IGlmIHRoZSBwYXlsb2FkIG5lZWRzIHRvIGJlIG1vdmVkIG1vcmUKLQkgKiB0aGFuIHRoZSBoZWFkZXIuCi0JICovCi0JaWYgKHBheWxvYWRfYWxpZ24gPiBoZWFkZXJfYWxpZ24pCi0JCWhlYWRlcl9hbGlnbiArPSA0OwotCi0JLyogVGhlcmUgaXMgbm90aGluZyB0byBkbyBpZiBubyBhbGlnbm1lbnQgaXMgbmVlZGVkICovCi0JaWYgKCFoZWFkZXJfYWxpZ24pCi0JCXJldHVybjsKLQotCS8qIFJlc2VydmUgdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgaW4gZnJvbnQgb2YgdGhlIGZyYW1lICovCi0Jc2tiX3B1c2goc2tiLCBoZWFkZXJfYWxpZ24pOwotCi0JLyoKLQkgKiBNb3ZlIHRoZSBoZWFkZXIuCi0JICovCi0JbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGhlYWRlcl9hbGlnbiwgaGVhZGVyX2xlbmd0aCk7Ci0KLQkvKiBNb3ZlIHRoZSBwYXlsb2FkLCBpZiBwcmVzZW50IGFuZCBpZiByZXF1aXJlZCAqLwotCWlmIChwYXlsb2FkX2xlbmd0aCAmJiBwYXlsb2FkX2FsaWduKQotCQltZW1tb3ZlKHNrYi0+ZGF0YSArIGhlYWRlcl9sZW5ndGggKyBsMnBhZCwKLQkJCXNrYi0+ZGF0YSArIGhlYWRlcl9sZW5ndGggKyBsMnBhZCArIHBheWxvYWRfYWxpZ24sCi0JCQlwYXlsb2FkX2xlbmd0aCk7Ci0KLQkvKiBUcmltIHRoZSBza2IgdG8gdGhlIGNvcnJlY3Qgc2l6ZSAqLwotCXNrYl90cmltKHNrYiwgaGVhZGVyX2xlbmd0aCArIGwycGFkICsgcGF5bG9hZF9sZW5ndGgpOwotfQotCi12b2lkIHJ0MngwMHF1ZXVlX3JlbW92ZV9sMnBhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCkKLXsKLQkvKgotCSAqIEwyIHBhZGRpbmcgaXMgb25seSBwcmVzZW50IGlmIHRoZSBza2IgY29udGFpbnMgbW9yZSB0aGFuIGp1c3QgdGhlCi0JICogSUVFRSA4MDIuMTEgaGVhZGVyLgotCSAqLwotCXVuc2lnbmVkIGludCBsMnBhZCA9IChza2ItPmxlbiA+IGhlYWRlcl9sZW5ndGgpID8KLQkJCQlMMlBBRF9TSVpFKGhlYWRlcl9sZW5ndGgpIDogMDsKKwl1bnNpZ25lZCBpbnQgbDJwYWQgPSAoc2tiLT5sZW4gPiBoZHJfbGVuKSA/IEwyUEFEX1NJWkUoaGRyX2xlbikgOiAwOwogCiAJaWYgKCFsMnBhZCkKIAkJcmV0dXJuOwogCi0JbWVtbW92ZShza2ItPmRhdGEgKyBsMnBhZCwgc2tiLT5kYXRhLCBoZWFkZXJfbGVuZ3RoKTsKKwlza2JfcHVzaChza2IsIGwycGFkKTsKKwltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgbDJwYWQsIGhkcl9sZW4pOworfQorCit2b2lkIHJ0MngwMHF1ZXVlX3JlbW92ZV9sMnBhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRyX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgbDJwYWQgPSAoc2tiLT5sZW4gPiBoZHJfbGVuKSA/IEwyUEFEX1NJWkUoaGRyX2xlbikgOiAwOworCisJaWYgKCFsMnBhZCkKKwkJcmV0dXJuOworCisJbWVtbW92ZShza2ItPmRhdGEgKyBsMnBhZCwgc2tiLT5kYXRhLCBoZHJfbGVuKTsKIAlza2JfcHVsbChza2IsIGwycGFkKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKaW5kZXggMjVkYWE4Ny4uODQ2YTJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCkBAIC04NDIsNyArODQyLDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCS8qIGhhbmRsZSBjb21tYW5kIHBhY2tldCBoZXJlICovCi0JCWlmIChydGxwcml2LT5jZmctPm9wcy0+cnhfY29tbWFuZF9wYWNrZXQoaHcsIHN0YXRzLCBza2IpKSB7CisJCWlmIChydGxwcml2LT5jZmctPm9wcy0+cnhfY29tbWFuZF9wYWNrZXQgJiYKKwkJICAgIHJ0bHByaXYtPmNmZy0+b3BzLT5yeF9jb21tYW5kX3BhY2tldChodywgc3RhdHMsIHNrYikpIHsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCWdvdG8gZW5kOwogCQl9CkBAIC0xMTI3LDkgKzExMjgsMTQgQEAKIAogCV9fc2tiX3F1ZXVlX3RhaWwoJnJpbmctPnF1ZXVlLCBwc2tiKTsKIAotCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYyhodywgKHU4ICopcGRlc2MsIHRydWUsIEhXX0RFU0NfT1dOLAotCQkJCSAgICAmdGVtcF9vbmUpOwotCisJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpIHsKKwkJdGVtcF9vbmUgPSA0OworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoaHcsICh1OCAqKXBidWZmZXJfZGVzYywgdHJ1ZSwKKwkJCQkJICAgIEhXX0RFU0NfT1dOLCAodTggKikmdGVtcF9vbmUpOworCX0gZWxzZSB7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYyhodywgKHU4ICopcGRlc2MsIHRydWUsIEhXX0RFU0NfT1dOLAorCQkJCQkgICAgJnRlbXBfb25lKTsKKwl9CiAJcmV0dXJuOwogfQogCkBAIC0xMzcwLDkgKzEzNzYsOSBAQAogCXJpbmctPmRlc2MgPSBOVUxMOwogCWlmIChydGxwcml2LT51c2VfbmV3X3RyeF9mbG93KSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocnRscGNpLT5wZGV2LAotCQkJCSAgICBzaXplb2YoKnJpbmctPmRlc2MpICogcmluZy0+ZW50cmllcywKKwkJCQkgICAgc2l6ZW9mKCpyaW5nLT5idWZmZXJfZGVzYykgKiByaW5nLT5lbnRyaWVzLAogCQkJCSAgICByaW5nLT5idWZmZXJfZGVzYywgcmluZy0+YnVmZmVyX2Rlc2NfZG1hKTsKLQkJcmluZy0+ZGVzYyA9IE5VTEw7CisJCXJpbmctPmJ1ZmZlcl9kZXNjID0gTlVMTDsKIAl9CiB9CiAKQEAgLTE1NDMsNyArMTU0OSw2IEBACiAJCQkJCQkJIHRydWUsCiAJCQkJCQkJIEhXX0RFU0NfVFhCVUZGX0FERFIpLAogCQkJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCQlyaW5nLT5pZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOwogCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCXJpbmctPmlkeCA9IChyaW5nLT5pZHggKyAxKSAlIHJpbmctPmVudHJpZXM7CiAJCQl9CkBAIC0yMjQ0LDYgKzIyNDksMTYgQEAKIAkvKmxpa2UgcmVhZCBlZXByb20gYW5kIHNvIG9uICovCiAJcnRscHJpdi0+Y2ZnLT5vcHMtPnJlYWRfZWVwcm9tX2luZm8oaHcpOwogCisJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5pbml0X3N3X3ZhcnMoaHcpKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsICJDYW4ndCBpbml0X3N3X3ZhcnNcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWwzOworCX0KKwlydGxwcml2LT5jZmctPm9wcy0+aW5pdF9zd19sZWRzKGh3KTsKKworCS8qYXNwbSAqLworCXJ0bF9wY2lfaW5pdF9hc3BtKGh3KTsKKwogCS8qIEluaXQgbWFjODAyMTEgc3cgKi8KIAllcnIgPSBydGxfaW5pdF9jb3JlKGh3KTsKIAlpZiAoZXJyKSB7CkBAIC0yMjU5LDE2ICsyMjc0LDYgQEAKIAkJZ290byBmYWlsMzsKIAl9CiAKLQlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmluaXRfc3dfdmFycyhodykpIHsKLQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgIkNhbid0IGluaXRfc3dfdmFyc1xuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZmFpbDM7Ci0JfQotCXJ0bHByaXYtPmNmZy0+b3BzLT5pbml0X3N3X2xlZHMoaHcpOwotCi0JLyphc3BtICovCi0JcnRsX3BjaV9pbml0X2FzcG0oaHcpOwotCiAJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAlpZiAoZXJyKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvaHcuYwppbmRleCAwMGUwNjcwLi41NzYxZDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2h3LmMKQEAgLTEyMDEsNiArMTIwMSw5IEBACiAKIAl9CiAKKwlpZiAodHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgorCSAgICBydGxwcml2LT5tYWM4MDIxMS5saW5rX3N0YXRlIDwgTUFDODAyMTFfTElOS0VEKQorCQlidF9tc3IgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIE1TUikgJiB+TVNSX0xJTktfTUFTSzsKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAoTVNSKSwgYnRfbXNyKTsKIAogCXRlbXAgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBUQ1IpOwpAQCAtMTI2Miw2ICsxMjY1LDcgQEAKIAlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSU5UQV9NQVNLLCBydGxwY2ktPmlycV9tYXNrWzBdKTsKIAkvKiBTdXBwb3J0IEJpdCAzMi0zNyhBc3NpZ24gYXMgQml0IDAtNSkgaW50ZXJydXB0IHNldHRpbmcgbm93ICovCiAJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIElOVEFfTUFTSyArIDQsIHJ0bHBjaS0+aXJxX21hc2tbMV0gJiAweDNGKTsKKwlydGxwY2ktPmlycV9lbmFibGVkID0gdHJ1ZTsKIH0KIAogdm9pZCBydGw5MnNlX2Rpc2FibGVfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQpAQCAtMTI3Niw4ICsxMjgwLDcgQEAKIAlydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CiAJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIElOVEFfTUFTSywgMCk7CiAJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIElOVEFfTUFTSyArIDQsIDApOwotCi0Jc3luY2hyb25pemVfaXJxKHJ0bHBjaS0+cGRldi0+aXJxKTsKKwlydGxwY2ktPmlycV9lbmFibGVkID0gZmFsc2U7CiB9CiAKIHN0YXRpYyB1OCBfcnRsOTJzX3NldF9zeXNjbGsoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3BoeS5jCmluZGV4IDc3YzViNWYuLjRiNDYxMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3BoeS5jCkBAIC0zOTksNiArMzk5LDggQEAKIAkJY2FzZSAyOgogCQkJY3VycmVudGNtZCA9ICZwb3N0Y29tbW9uY21kWypzdGVwXTsKIAkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIHRydWU7CiAJCX0KIAogCQlpZiAoY3VycmVudGNtZC0+Y21kaWQgPT0gQ01ESURfRU5EKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuYwppbmRleCBhYWRiYTI5Li5mYjAwMzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9zdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3N3LmMKQEAgLTIzNiw2ICsyMzYsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyBib29sIHJ0bDkyc2VfaXNfdHhfZGVzY19jbG9zZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X3F1ZXVlLAorCQkJCSAgICAgIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSAmcnRscGNpLT50eF9yaW5nW2h3X3F1ZXVlXTsKKwl1OCAqZW50cnkgPSAodTggKikoJnJpbmctPmRlc2NbcmluZy0+aWR4XSk7CisJdTggb3duID0gKHU4KXJ0bDkyc2VfZ2V0X2Rlc2MoZW50cnksIHRydWUsIEhXX0RFU0NfT1dOKTsKKworCWlmIChvd24pCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHN0cnVjdCBydGxfaGFsX29wcyBydGw4MTkyc2VfaGFsX29wcyA9IHsKIAkuaW5pdF9zd192YXJzID0gcnRsOTJzX2luaXRfc3dfdmFycywKIAkuZGVpbml0X3N3X3ZhcnMgPSBydGw5MnNfZGVpbml0X3N3X3ZhcnMsCkBAIC0yNjksNiArMjgyLDcgQEAKIAkubGVkX2NvbnRyb2wgPSBydGw5MnNlX2xlZF9jb250cm9sLAogCS5zZXRfZGVzYyA9IHJ0bDkyc2Vfc2V0X2Rlc2MsCiAJLmdldF9kZXNjID0gcnRsOTJzZV9nZXRfZGVzYywKKwkuaXNfdHhfZGVzY19jbG9zZWQgPSBydGw5MnNlX2lzX3R4X2Rlc2NfY2xvc2VkLAogCS50eF9wb2xsaW5nID0gcnRsOTJzZV90eF9wb2xsaW5nLAogCS5lbmFibGVfaHdfc2VjID0gcnRsOTJzZV9lbmFibGVfaHdfc2VjdXJpdHlfY29uZmlnLAogCS5zZXRfa2V5ID0gcnRsOTJzZV9zZXRfa2V5LApAQCAtMzA2LDYgKzMyMCw4IEBACiAJLm1hcHNbTUFDX1JDUl9BQ1JDMzJdID0gUkNSX0FDUkMzMiwKIAkubWFwc1tNQUNfUkNSX0FDRl0gPSBSQ1JfQUNGLAogCS5tYXBzW01BQ19SQ1JfQUFQXSA9IFJDUl9BQVAsCisJLm1hcHNbTUFDX0hJTVJdID0gSU5UQV9NQVNLLAorCS5tYXBzW01BQ19ISU1SRV0gPSBJTlRBX01BU0sgKyA0LAogCiAJLm1hcHNbRUZVU0VfVEVTVF0gPSBSRUdfRUZVU0VfVEVTVCwKIAkubWFwc1tFRlVTRV9DVFJMXSA9IFJFR19FRlVTRV9DVFJMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL2h3LmMKaW5kZXggMzEwZDMxNi4uOGVjODIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg4MjFhZS9ody5jCkBAIC0zNjcyLDggKzM2NzIsOSBAQAogCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJbWFjaWQgPSBzdGEtPmFpZCArIDE7CiAJaWYgKHdpcmVsZXNzbW9kZSA9PSBXSVJFTEVTU19NT0RFX05fNUcgfHwKLQkgICAgd2lyZWxlc3Ntb2RlID09IFdJUkVMRVNTX01PREVfQUNfNUcpCi0JCXJhdHJfYml0bWFwID0gc3RhLT5zdXBwX3JhdGVzW05MODAyMTFfQkFORF81R0haXTsKKwkgICAgd2lyZWxlc3Ntb2RlID09IFdJUkVMRVNTX01PREVfQUNfNUcgfHwKKwkgICAgd2lyZWxlc3Ntb2RlID09IFdJUkVMRVNTX01PREVfQSkKKwkJcmF0cl9iaXRtYXAgPSBzdGEtPnN1cHBfcmF0ZXNbTkw4MDIxMV9CQU5EXzVHSFpdIDw8IDQ7CiAJZWxzZQogCQlyYXRyX2JpdG1hcCA9IHN0YS0+c3VwcF9yYXRlc1tOTDgwMjExX0JBTkRfMkdIWl07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL3hlbmJ1cy5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKaW5kZXggNGU1NmEyNy4uZmFiMGQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKQEAgLTM5LDcgKzM5LDcgQEAKIHN0YXRpYyBpbnQgY29ubmVjdF9yaW5ncyhzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSwgc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpOwogc3RhdGljIHZvaWQgY29ubmVjdChzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSk7CiBzdGF0aWMgaW50IHJlYWRfeGVuYnVzX3ZpZl9mbGFncyhzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSk7Ci1zdGF0aWMgdm9pZCBiYWNrZW5kX2NyZWF0ZV94ZW52aWYoc3RydWN0IGJhY2tlbmRfaW5mbyAqYmUpOworc3RhdGljIGludCBiYWNrZW5kX2NyZWF0ZV94ZW52aWYoc3RydWN0IGJhY2tlbmRfaW5mbyAqYmUpOwogc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9ob3RwbHVnX3N0YXR1c193YXRjaChzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSk7CiBzdGF0aWMgdm9pZCBzZXRfYmFja2VuZF9zdGF0ZShzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSwKIAkJCSAgICAgIGVudW0geGVuYnVzX3N0YXRlIHN0YXRlKTsKQEAgLTM1Miw3ICszNTIsOSBAQAogCWJlLT5zdGF0ZSA9IFhlbmJ1c1N0YXRlSW5pdFdhaXQ7CiAKIAkvKiBUaGlzIGtpY2tzIGhvdHBsdWcgc2NyaXB0cywgc28gZG8gaXQgaW1tZWRpYXRlbHkuICovCi0JYmFja2VuZF9jcmVhdGVfeGVudmlmKGJlKTsKKwllcnIgPSBiYWNrZW5kX2NyZWF0ZV94ZW52aWYoYmUpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKIAogCXJldHVybiAwOwogCkBAIC0zOTcsMTkgKzM5OSwxOSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGJhY2tlbmRfY3JlYXRlX3hlbnZpZihzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSkKK3N0YXRpYyBpbnQgYmFja2VuZF9jcmVhdGVfeGVudmlmKHN0cnVjdCBiYWNrZW5kX2luZm8gKmJlKQogewogCWludCBlcnI7CiAJbG9uZyBoYW5kbGU7CiAJc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiA9IGJlLT5kZXY7CiAKIAlpZiAoYmUtPnZpZiAhPSBOVUxMKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJZXJyID0geGVuYnVzX3NjYW5mKFhCVF9OSUwsIGRldi0+bm9kZW5hbWUsICJoYW5kbGUiLCAiJWxpIiwgJmhhbmRsZSk7CiAJaWYgKGVyciAhPSAxKSB7CiAJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJyZWFkaW5nIGhhbmRsZSIpOwotCQlyZXR1cm47CisJCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAtRUlOVkFMOwogCX0KIAogCWJlLT52aWYgPSB4ZW52aWZfYWxsb2MoJmRldi0+ZGV2LCBkZXYtPm90aGVyZW5kX2lkLCBoYW5kbGUpOwpAQCAtNDE3LDEwICs0MTksMTEgQEAKIAkJZXJyID0gUFRSX0VSUihiZS0+dmlmKTsKIAkJYmUtPnZpZiA9IE5VTEw7CiAJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJjcmVhdGluZyBpbnRlcmZhY2UiKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWtvYmplY3RfdWV2ZW50KCZkZXYtPmRldi5rb2JqLCBLT0JKX09OTElORSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJhY2tlbmRfZGlzY29ubmVjdChzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggY2NhODcxMy4uZWNlOGQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTQ5Niw5ICs0OTYsNiBAQAogCQlsZW4gPSBza2JfZnJhZ19zaXplKGZyYWcpOwogCQlvZmZzZXQgPSBmcmFnLT5wYWdlX29mZnNldDsKIAotCQkvKiBEYXRhIG11c3Qgbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeS4gKi8KLQkJQlVHX09OKGxlbiArIG9mZnNldCA+IFBBR0VfU0laRTw8Y29tcG91bmRfb3JkZXIocGFnZSkpOwotCiAJCS8qIFNraXAgdW51c2VkIGZyYW1lcyBmcm9tIHN0YXJ0IG9mIHBhZ2UgKi8KIAkJcGFnZSArPSBvZmZzZXQgPj4gUEFHRV9TSElGVDsKIAkJb2Zmc2V0ICY9IH5QQUdFX01BU0s7CkBAIC01MDYsOCArNTAzLDYgQEAKIAkJd2hpbGUgKGxlbiA+IDApIHsKIAkJCXVuc2lnbmVkIGxvbmcgYnl0ZXM7CiAKLQkJCUJVR19PTihvZmZzZXQgPj0gUEFHRV9TSVpFKTsKLQogCQkJYnl0ZXMgPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CiAJCQlpZiAoYnl0ZXMgPiBsZW4pCiAJCQkJYnl0ZXMgPSBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL251YnVzL251YnVzLmMgYi9kcml2ZXJzL251YnVzL251YnVzLmMKaW5kZXggNTA2NmE3ZS4uMzMxOWNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9udWJ1cy9udWJ1cy5jCisrKyBiL2RyaXZlcnMvbnVidXMvbnVidXMuYwpAQCAtOTIwLDE0ICs5MjAsMTAgQEAKIAlycCA9IG51YnVzX3JvbV9hZGRyKHNsb3QpOwkKIAlmb3IoaSA9IDQ7IGk7IGktLSkKIAl7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCWludCBjYXJkX3ByZXNlbnQ7CiAKIAkJcnAtLTsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQljYXJkX3ByZXNlbnQgPSBod3JlZ19wcmVzZW50KHJwKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgICAgICAKIAkJaWYgKCFjYXJkX3ByZXNlbnQpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9hZGRyZXNzLmMgYi9kcml2ZXJzL29mL2FkZHJlc3MuYwppbmRleCBhZmRiNzgyLi4wNmFmNDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2FkZHJlc3MuYworKysgYi9kcml2ZXJzL29mL2FkZHJlc3MuYwpAQCAtNDUwLDYgKzQ1MCwyMSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50IG9mX2VtcHR5X3Jhbmdlc19xdWlyayh2b2lkKQoreworCWlmIChJU19FTkFCTEVEKENPTkZJR19QUEMpKSB7CisJCS8qIFRvIHNhdmUgY3ljbGVzLCB3ZSBjYWNoZSB0aGUgcmVzdWx0ICovCisJCXN0YXRpYyBpbnQgcXVpcmtfc3RhdGUgPSAtMTsKKworCQlpZiAocXVpcmtfc3RhdGUgPCAwKQorCQkJcXVpcmtfc3RhdGUgPQorCQkJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXIgTWFjaW50b3NoIikgfHwKKwkJCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MiKTsKKwkJcmV0dXJuIHF1aXJrX3N0YXRlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBpbnQgb2ZfdHJhbnNsYXRlX29uZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgc3RydWN0IG9mX2J1cyAqYnVzLAogCQkJICAgIHN0cnVjdCBvZl9idXMgKnBidXMsIF9fYmUzMiAqYWRkciwKIAkJCSAgICBpbnQgbmEsIGludCBucywgaW50IHBuYSwgY29uc3QgY2hhciAqcnByb3ApCkBAIC00NzUsMTIgKzQ5MCwxMCBAQAogCSAqIFRoaXMgY29kZSBpcyBvbmx5IGVuYWJsZWQgb24gcG93ZXJwYy4gLS1nY2wKIAkgKi8KIAlyYW5nZXMgPSBvZl9nZXRfcHJvcGVydHkocGFyZW50LCBycHJvcCwgJnJsZW4pOwotI2lmICFkZWZpbmVkKENPTkZJR19QUEMpCi0JaWYgKHJhbmdlcyA9PSBOVUxMKSB7CisJaWYgKHJhbmdlcyA9PSBOVUxMICYmICFvZl9lbXB0eV9yYW5nZXNfcXVpcmsoKSkgewogCQlwcl9lcnIoIk9GOiBubyByYW5nZXM7IGNhbm5vdCB0cmFuc2xhdGVcbiIpOwogCQlyZXR1cm4gMTsKIAl9Ci0jZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1BQQykgKi8KIAlpZiAocmFuZ2VzID09IE5VTEwgfHwgcmxlbiA9PSAwKSB7CiAJCW9mZnNldCA9IG9mX3JlYWRfbnVtYmVyKGFkZHIsIG5hKTsKIAkJbWVtc2V0KGFkZHIsIDAsIHBuYSAqIDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNlLmMgYi9kcml2ZXJzL29mL2Jhc2UuYwppbmRleCAyMzA1ZGMwLi4zODIzZWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2Jhc2UuYworKysgYi9kcml2ZXJzL29mL2Jhc2UuYwpAQCAtMTI4MCw1MiArMTI4MCw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyk7CiAKIC8qKgotICogb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXggLSBGaW5kIGFuZCByZWFkIGEgc3RyaW5nIGZyb20gYSBtdWx0aXBsZQotICogc3RyaW5ncyBwcm9wZXJ0eS4KLSAqIEBucDoJCWRldmljZSBub2RlIGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRvIGJlIHJlYWQuCi0gKiBAcHJvcG5hbWU6CW5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNlYXJjaGVkLgotICogQGluZGV4OglpbmRleCBvZiB0aGUgc3RyaW5nIGluIHRoZSBsaXN0IG9mIHN0cmluZ3MKLSAqIEBvdXRfc3RyaW5nOglwb2ludGVyIHRvIG51bGwgdGVybWluYXRlZCByZXR1cm4gc3RyaW5nLCBtb2RpZmllZCBvbmx5IGlmCi0gKgkJcmV0dXJuIHZhbHVlIGlzIDAuCi0gKgotICogU2VhcmNoIGZvciBhIHByb3BlcnR5IGluIGEgZGV2aWNlIHRyZWUgbm9kZSBhbmQgcmV0cmlldmUgYSBudWxsCi0gKiB0ZXJtaW5hdGVkIHN0cmluZyB2YWx1ZSAocG9pbnRlciB0byBkYXRhLCBub3QgYSBjb3B5KSBpbiB0aGUgbGlzdCBvZiBzdHJpbmdzCi0gKiBjb250YWluZWQgaW4gdGhhdCBwcm9wZXJ0eS4KLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdCwgLUVOT0RBVEEgaWYKLSAqIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwgYW5kIC1FSUxTRVEgaWYgdGhlIHN0cmluZyBpcyBub3QKLSAqIG51bGwtdGVybWluYXRlZCB3aXRoaW4gdGhlIGxlbmd0aCBvZiB0aGUgcHJvcGVydHkgZGF0YS4KLSAqCi0gKiBUaGUgb3V0X3N0cmluZyBwb2ludGVyIGlzIG1vZGlmaWVkIG9ubHkgaWYgYSB2YWxpZCBzdHJpbmcgY2FuIGJlIGRlY29kZWQuCi0gKi8KLWludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwcm9wbmFtZSwKLQkJCQkgIGludCBpbmRleCwgY29uc3QgY2hhciAqKm91dHB1dCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCBwcm9wbmFtZSwgTlVMTCk7Ci0JaW50IGkgPSAwOwotCXNpemVfdCBsID0gMCwgdG90YWwgPSAwOwotCWNvbnN0IGNoYXIgKnA7Ci0KLQlpZiAoIXByb3ApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghcHJvcC0+dmFsdWUpCi0JCXJldHVybiAtRU5PREFUQTsKLQlpZiAoc3Rybmxlbihwcm9wLT52YWx1ZSwgcHJvcC0+bGVuZ3RoKSA+PSBwcm9wLT5sZW5ndGgpCi0JCXJldHVybiAtRUlMU0VROwotCi0JcCA9IHByb3AtPnZhbHVlOwotCi0JZm9yIChpID0gMDsgdG90YWwgPCBwcm9wLT5sZW5ndGg7IHRvdGFsICs9IGwsIHAgKz0gbCkgewotCQlsID0gc3RybGVuKHApICsgMTsKLQkJaWYgKGkrKyA9PSBpbmRleCkgewotCQkJKm91dHB1dCA9IHA7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlyZXR1cm4gLUVOT0RBVEE7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleCk7Ci0KLS8qKgogICogb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKCkgLSBGaW5kIHN0cmluZyBpbiBhIGxpc3QgYW5kIHJldHVybiBpbmRleAogICogQG5wOiBwb2ludGVyIHRvIG5vZGUgY29udGFpbmluZyBzdHJpbmcgbGlzdCBwcm9wZXJ0eQogICogQHByb3BuYW1lOiBzdHJpbmcgbGlzdCBwcm9wZXJ0eSBuYW1lCkBAIC0xMzUxLDcgKzEzMDUsNyBAQAogCWVuZCA9IHAgKyBwcm9wLT5sZW5ndGg7CiAKIAlmb3IgKGkgPSAwOyBwIDwgZW5kOyBpKyssIHAgKz0gbCkgewotCQlsID0gc3RybGVuKHApICsgMTsKKwkJbCA9IHN0cm5sZW4ocCwgZW5kIC0gcCkgKyAxOwogCQlpZiAocCArIGwgPiBlbmQpCiAJCQlyZXR1cm4gLUVJTFNFUTsKIAkJcHJfZGVidWcoImNvbXBhcmluZyAlcyB3aXRoICVzXG4iLCBzdHJpbmcsIHApOwpAQCAtMTM2MywzOSArMTMxNyw0MSBAQAogRVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKTsKIAogLyoqCi0gKiBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzIC0gRmluZCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBmcm9tIGEKLSAqIG11bHRpcGxlIHN0cmluZ3MgcHJvcGVydHkuCisgKiBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ191dGlsKCkgLSBVdGlsaXR5IGhlbHBlciBmb3IgcGFyc2luZyBzdHJpbmcgcHJvcGVydGllcwogICogQG5wOgkJZGV2aWNlIG5vZGUgZnJvbSB3aGljaCB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdG8gYmUgcmVhZC4KICAqIEBwcm9wbmFtZToJbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgc2VhcmNoZWQuCisgKiBAb3V0X3N0cnM6CW91dHB1dCBhcnJheSBvZiBzdHJpbmcgcG9pbnRlcnMuCisgKiBAc3o6CQludW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgdG8gcmVhZC4KKyAqIEBza2lwOglOdW1iZXIgb2Ygc3RyaW5ncyB0byBza2lwIG92ZXIgYXQgYmVnaW5uaW5nIG9mIGxpc3QuCiAgKgotICogU2VhcmNoIGZvciBhIHByb3BlcnR5IGluIGEgZGV2aWNlIHRyZWUgbm9kZSBhbmQgcmV0cmlldmUgdGhlIG51bWJlciBvZiBudWxsCi0gKiB0ZXJtaW5hdGVkIHN0cmluZyBjb250YWluIGluIGl0LiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBvbgotICogc3VjY2VzcywgLUVJTlZBTCBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QsIC1FTk9EQVRBIGlmIHByb3BlcnR5Ci0gKiBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsIGFuZCAtRUlMU0VRIGlmIHRoZSBzdHJpbmcgaXMgbm90IG51bGwtdGVybWluYXRlZAotICogd2l0aGluIHRoZSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IGRhdGEuCisgKiBEb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBoZWxwZXIgZm9yIHRoZQorICogb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcqKCkgZmFtaWx5IG9mIGZ1bmN0aW9ucy4KICAqLwotaW50IG9mX3Byb3BlcnR5X2NvdW50X3N0cmluZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcHJvcG5hbWUpCitpbnQgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaGVscGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCSAgIGNvbnN0IGNoYXIgKipvdXRfc3Rycywgc2l6ZV90IHN6LCBpbnQgc2tpcCkKIHsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCBwcm9wbmFtZSwgTlVMTCk7Ci0JaW50IGkgPSAwOwotCXNpemVfdCBsID0gMCwgdG90YWwgPSAwOwotCWNvbnN0IGNoYXIgKnA7CisJaW50IGwgPSAwLCBpID0gMDsKKwljb25zdCBjaGFyICpwLCAqZW5kOwogCiAJaWYgKCFwcm9wKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIXByb3AtPnZhbHVlKQogCQlyZXR1cm4gLUVOT0RBVEE7Ci0JaWYgKHN0cm5sZW4ocHJvcC0+dmFsdWUsIHByb3AtPmxlbmd0aCkgPj0gcHJvcC0+bGVuZ3RoKQotCQlyZXR1cm4gLUVJTFNFUTsKLQogCXAgPSBwcm9wLT52YWx1ZTsKKwllbmQgPSBwICsgcHJvcC0+bGVuZ3RoOwogCi0JZm9yIChpID0gMDsgdG90YWwgPCBwcm9wLT5sZW5ndGg7IHRvdGFsICs9IGwsIHAgKz0gbCwgaSsrKQotCQlsID0gc3RybGVuKHApICsgMTsKLQotCXJldHVybiBpOworCWZvciAoaSA9IDA7IHAgPCBlbmQgJiYgKCFvdXRfc3RycyB8fCBpIDwgc2tpcCArIHN6KTsgaSsrLCBwICs9IGwpIHsKKwkJbCA9IHN0cm5sZW4ocCwgZW5kIC0gcCkgKyAxOworCQlpZiAocCArIGwgPiBlbmQpCisJCQlyZXR1cm4gLUVJTFNFUTsKKwkJaWYgKG91dF9zdHJzICYmIGkgPj0gc2tpcCkKKwkJCSpvdXRfc3RycysrID0gcDsKKwl9CisJaSAtPSBza2lwOworCXJldHVybiBpIDw9IDAgPyAtRU5PREFUQSA6IGk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2hlbHBlcik7CiAKIHZvaWQgb2ZfcHJpbnRfcGhhbmRsZV9hcmdzKGNvbnN0IGNoYXIgKm1zZywgY29uc3Qgc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqYXJncykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvZHluYW1pYy5jIGIvZHJpdmVycy9vZi9keW5hbWljLmMKaW5kZXggZjI5Nzg5MS4uZDQ5OTQxNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvZHluYW1pYy5jCisrKyBiL2RyaXZlcnMvb2YvZHluYW1pYy5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKICAqIEBhbGxvY2ZsYWdzOglBbGxvY2F0aW9uIGZsYWdzICh0eXBpY2FsbHkgcGFzcyBHRlBfS0VSTkVMKQogICoKICAqIENvcHkgYSBwcm9wZXJ0eSBieSBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHRoZSBtZW1vcnkgb2YgYm90aCB0aGUKLSAqIHByb3BlcnR5IHN0dWN0dXJlIGFuZCB0aGUgcHJvcGVydHkgbmFtZSAmIGNvbnRlbnRzLiBUaGUgcHJvcGVydHkncworICogcHJvcGVydHkgc3RydWN0dXJlIGFuZCB0aGUgcHJvcGVydHkgbmFtZSAmIGNvbnRlbnRzLiBUaGUgcHJvcGVydHkncwogICogZmxhZ3MgaGF2ZSB0aGUgT0ZfRFlOQU1JQyBiaXQgc2V0IHNvIHRoYXQgd2UgY2FuIGRpZmZlcmVudGlhdGUgYmV0d2VlbgogICogZHluYW1pY2FsbHkgYWxsb2NhdGVkIHByb3BlcnRpZXMgYW5kIG5vdC4KICAqIFJldHVybnMgdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wZXJ0eSBvciBOVUxMIG9uIG91dCBvZiBtZW1vcnkgZXJyb3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2ZkdC5jIGIvZHJpdmVycy9vZi9mZHQuYwppbmRleCBkMWZmY2E4Li5kMTM0NzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2ZkdC5jCisrKyBiL2RyaXZlcnMvb2YvZmR0LmMKQEAgLTc3Myw3ICs3NzMsNyBAQAogCWlmIChvZmZzZXQgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXdoaWxlIChtYXRjaC0+Y29tcGF0aWJsZSkgeworCXdoaWxlIChtYXRjaC0+Y29tcGF0aWJsZVswXSkgewogCQl1bnNpZ25lZCBsb25nIGFkZHI7CiAJCWlmIChmZHRfbm9kZV9jaGVja19jb21wYXRpYmxlKGZkdCwgb2Zmc2V0LCBtYXRjaC0+Y29tcGF0aWJsZSkpIHsKIAkJCW1hdGNoKys7CkBAIC05NjQsOCArOTY0LDYgQEAKIGludCBfX2luaXQgX193ZWFrIGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlfYXJjaChwaHlzX2FkZHJfdCBiYXNlLAogCQkJCQlwaHlzX2FkZHJfdCBzaXplLCBib29sIG5vbWFwKQogewotCWlmIChtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkpCi0JCXJldHVybiAtRUJVU1k7CiAJaWYgKG5vbWFwKQogCQlyZXR1cm4gbWVtYmxvY2tfcmVtb3ZlKGJhc2UsIHNpemUpOwogCXJldHVybiBtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9wY2kuYyBiL2RyaXZlcnMvb2Yvb2ZfcGNpLmMKaW5kZXggODg4MmI0Ni4uODg0NzFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9wY2kuYworKysgYi9kcml2ZXJzL29mL29mX3BjaS5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIHN0YXRpYyBMSVNUX0hFQUQob2ZfcGNpX21zaV9jaGlwX2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChvZl9wY2lfbXNpX2NoaXBfbXV0ZXgpOwogCi1pbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApCitpbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hpcC0+b2Zfbm9kZSwgIm1zaS1jb250cm9sbGVyIikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvZl9wY2lfbXNpX2NoaXBfYWRkKTsKIAotdm9pZCBvZl9wY2lfbXNpX2NoaXBfcmVtb3ZlKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCkKK3ZvaWQgb2ZfcGNpX21zaV9jaGlwX3JlbW92ZShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJbXV0ZXhfbG9jaygmb2ZfcGNpX21zaV9jaGlwX211dGV4KTsKIAlsaXN0X2RlbCgmY2hpcC0+bGlzdCk7CkBAIC0yNTcsOSArMjU3LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9mX3BjaV9tc2lfY2hpcF9yZW1vdmUpOwogCi1zdHJ1Y3QgbXNpX2NoaXAgKm9mX3BjaV9maW5kX21zaV9jaGlwX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQorc3RydWN0IG1zaV9jb250cm9sbGVyICpvZl9wY2lfZmluZF9tc2lfY2hpcF9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKIHsKLQlzdHJ1Y3QgbXNpX2NoaXAgKmM7CisJc3RydWN0IG1zaV9jb250cm9sbGVyICpjOwogCiAJbXV0ZXhfbG9jaygmb2ZfcGNpX21zaV9jaGlwX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZvZl9wY2lfbXNpX2NoaXBfbGlzdCwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9zZWxmdGVzdC5jIGIvZHJpdmVycy9vZi9zZWxmdGVzdC5jCmluZGV4IDc4MDAxMjcuLmUyZDc5YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yvc2VsZnRlc3QuYworKysgYi9kcml2ZXJzL29mL3NlbGZ0ZXN0LmMKQEAgLTMzOSw4ICszMzksOSBAQAogCXNlbGZ0ZXN0KHJjID09IC1FSU5WQUwsICJleHBlY3RlZDolaSBnb3Q6JWlcbiIsIC1FSU5WQUwsIHJjKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG9mX3NlbGZ0ZXN0X3Byb3BlcnR5X21hdGNoX3N0cmluZyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9mX3NlbGZ0ZXN0X3Byb3BlcnR5X3N0cmluZyh2b2lkKQogeworCWNvbnN0IGNoYXIgKnN0cmluZ3NbNF07CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAlpbnQgcmM7CiAKQEAgLTM1NywxMyArMzU4LDY2IEBACiAJcmMgPSBvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcobnAsICJwaGFuZGxlLWxpc3QtbmFtZXMiLCAidGhpcmQiKTsKIAlzZWxmdGVzdChyYyA9PSAyLCAidGhpcmQgZXhwZWN0ZWQ6MCBnb3Q6JWlcbiIsIHJjKTsKIAlyYyA9IG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgInBoYW5kbGUtbGlzdC1uYW1lcyIsICJmb3VydGgiKTsKLQlzZWxmdGVzdChyYyA9PSAtRU5PREFUQSwgInVubWF0Y2hlZCBzdHJpbmc7IHJjPSVpIiwgcmMpOworCXNlbGZ0ZXN0KHJjID09IC1FTk9EQVRBLCAidW5tYXRjaGVkIHN0cmluZzsgcmM9JWlcbiIsIHJjKTsKIAlyYyA9IG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgIm1pc3NpbmctcHJvcGVydHkiLCAiYmxhaCIpOwotCXNlbGZ0ZXN0KHJjID09IC1FSU5WQUwsICJtaXNzaW5nIHByb3BlcnR5OyByYz0laSIsIHJjKTsKKwlzZWxmdGVzdChyYyA9PSAtRUlOVkFMLCAibWlzc2luZyBwcm9wZXJ0eTsgcmM9JWlcbiIsIHJjKTsKIAlyYyA9IG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgImVtcHR5LXByb3BlcnR5IiwgImJsYWgiKTsKLQlzZWxmdGVzdChyYyA9PSAtRU5PREFUQSwgImVtcHR5IHByb3BlcnR5OyByYz0laSIsIHJjKTsKKwlzZWxmdGVzdChyYyA9PSAtRU5PREFUQSwgImVtcHR5IHByb3BlcnR5OyByYz0laVxuIiwgcmMpOwogCXJjID0gb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKG5wLCAidW50ZXJtaW5hdGVkLXN0cmluZyIsICJibGFoIik7Ci0Jc2VsZnRlc3QocmMgPT0gLUVJTFNFUSwgInVudGVybWluYXRlZCBzdHJpbmc7IHJjPSVpIiwgcmMpOworCXNlbGZ0ZXN0KHJjID09IC1FSUxTRVEsICJ1bnRlcm1pbmF0ZWQgc3RyaW5nOyByYz0laVxuIiwgcmMpOworCisJLyogb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncygpIHRlc3RzICovCisJcmMgPSBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKG5wLCAic3RyaW5nLXByb3BlcnR5Iik7CisJc2VsZnRlc3QocmMgPT0gMSwgIkluY29ycmVjdCBzdHJpbmcgY291bnQ7IHJjPSVpXG4iLCByYyk7CisJcmMgPSBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKG5wLCAicGhhbmRsZS1saXN0LW5hbWVzIik7CisJc2VsZnRlc3QocmMgPT0gMywgIkluY29ycmVjdCBzdHJpbmcgY291bnQ7IHJjPSVpXG4iLCByYyk7CisJcmMgPSBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKG5wLCAidW50ZXJtaW5hdGVkLXN0cmluZyIpOworCXNlbGZ0ZXN0KHJjID09IC1FSUxTRVEsICJ1bnRlcm1pbmF0ZWQgc3RyaW5nOyByYz0laVxuIiwgcmMpOworCXJjID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhucCwgInVudGVybWluYXRlZC1zdHJpbmctbGlzdCIpOworCXNlbGZ0ZXN0KHJjID09IC1FSUxTRVEsICJ1bnRlcm1pbmF0ZWQgc3RyaW5nIGFycmF5OyByYz0laVxuIiwgcmMpOworCisJLyogb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgoKSB0ZXN0cyAqLworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgobnAsICJzdHJpbmctcHJvcGVydHkiLCAwLCBzdHJpbmdzKTsKKwlzZWxmdGVzdChyYyA9PSAwICYmICFzdHJjbXAoc3RyaW5nc1swXSwgImZvb2JhciIpLCAib2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgoKSBmYWlsdXJlOyByYz0laVxuIiwgcmMpOworCXN0cmluZ3NbMF0gPSBOVUxMOworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgobnAsICJzdHJpbmctcHJvcGVydHkiLCAxLCBzdHJpbmdzKTsKKwlzZWxmdGVzdChyYyA9PSAtRU5PREFUQSAmJiBzdHJpbmdzWzBdID09IE5VTEwsICJvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleCgpIGZhaWx1cmU7IHJjPSVpXG4iLCByYyk7CisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChucCwgInBoYW5kbGUtbGlzdC1uYW1lcyIsIDAsIHN0cmluZ3MpOworCXNlbGZ0ZXN0KHJjID09IDAgJiYgIXN0cmNtcChzdHJpbmdzWzBdLCAiZmlyc3QiKSwgIm9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KCkgZmFpbHVyZTsgcmM9JWlcbiIsIHJjKTsKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLCAicGhhbmRsZS1saXN0LW5hbWVzIiwgMSwgc3RyaW5ncyk7CisJc2VsZnRlc3QocmMgPT0gMCAmJiAhc3RyY21wKHN0cmluZ3NbMF0sICJzZWNvbmQiKSwgIm9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KCkgZmFpbHVyZTsgcmM9JWlcbiIsIHJjKTsKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLCAicGhhbmRsZS1saXN0LW5hbWVzIiwgMiwgc3RyaW5ncyk7CisJc2VsZnRlc3QocmMgPT0gMCAmJiAhc3RyY21wKHN0cmluZ3NbMF0sICJ0aGlyZCIpLCAib2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgoKSBmYWlsdXJlOyByYz0laVxuIiwgcmMpOworCXN0cmluZ3NbMF0gPSBOVUxMOworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgobnAsICJwaGFuZGxlLWxpc3QtbmFtZXMiLCAzLCBzdHJpbmdzKTsKKwlzZWxmdGVzdChyYyA9PSAtRU5PREFUQSAmJiBzdHJpbmdzWzBdID09IE5VTEwsICJvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleCgpIGZhaWx1cmU7IHJjPSVpXG4iLCByYyk7CisJc3RyaW5nc1swXSA9IE5VTEw7CisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChucCwgInVudGVybWluYXRlZC1zdHJpbmciLCAwLCBzdHJpbmdzKTsKKwlzZWxmdGVzdChyYyA9PSAtRUlMU0VRICYmIHN0cmluZ3NbMF0gPT0gTlVMTCwgIm9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KCkgZmFpbHVyZTsgcmM9JWlcbiIsIHJjKTsKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLCAidW50ZXJtaW5hdGVkLXN0cmluZy1saXN0IiwgMCwgc3RyaW5ncyk7CisJc2VsZnRlc3QocmMgPT0gMCAmJiAhc3RyY21wKHN0cmluZ3NbMF0sICJmaXJzdCIpLCAib2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgoKSBmYWlsdXJlOyByYz0laVxuIiwgcmMpOworCXN0cmluZ3NbMF0gPSBOVUxMOworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgobnAsICJ1bnRlcm1pbmF0ZWQtc3RyaW5nLWxpc3QiLCAyLCBzdHJpbmdzKTsgLyogc2hvdWxkIGZhaWwgKi8KKwlzZWxmdGVzdChyYyA9PSAtRUlMU0VRICYmIHN0cmluZ3NbMF0gPT0gTlVMTCwgIm9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KCkgZmFpbHVyZTsgcmM9JWlcbiIsIHJjKTsKKwlzdHJpbmdzWzFdID0gTlVMTDsKKworCS8qIG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2FycmF5KCkgdGVzdHMgKi8KKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2FycmF5KG5wLCAic3RyaW5nLXByb3BlcnR5Iiwgc3RyaW5ncywgNCk7CisJc2VsZnRlc3QocmMgPT0gMSwgIkluY29ycmVjdCBzdHJpbmcgY291bnQ7IHJjPSVpXG4iLCByYyk7CisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheShucCwgInBoYW5kbGUtbGlzdC1uYW1lcyIsIHN0cmluZ3MsIDQpOworCXNlbGZ0ZXN0KHJjID09IDMsICJJbmNvcnJlY3Qgc3RyaW5nIGNvdW50OyByYz0laVxuIiwgcmMpOworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfYXJyYXkobnAsICJ1bnRlcm1pbmF0ZWQtc3RyaW5nIiwgc3RyaW5ncywgNCk7CisJc2VsZnRlc3QocmMgPT0gLUVJTFNFUSwgInVudGVybWluYXRlZCBzdHJpbmc7IHJjPSVpXG4iLCByYyk7CisJLyogLS0gQW4gaW5jb3JyZWN0bHkgZm9ybWVkIHN0cmluZyBzaG91bGQgY2F1c2UgYSBmYWlsdXJlICovCisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheShucCwgInVudGVybWluYXRlZC1zdHJpbmctbGlzdCIsIHN0cmluZ3MsIDQpOworCXNlbGZ0ZXN0KHJjID09IC1FSUxTRVEsICJ1bnRlcm1pbmF0ZWQgc3RyaW5nIGFycmF5OyByYz0laVxuIiwgcmMpOworCS8qIC0tIHBhcnNpbmcgdGhlIGNvcnJlY3RseSBmb3JtZWQgc3RyaW5ncyBzaG91bGQgc3RpbGwgd29yazogKi8KKwlzdHJpbmdzWzJdID0gTlVMTDsKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2FycmF5KG5wLCAidW50ZXJtaW5hdGVkLXN0cmluZy1saXN0Iiwgc3RyaW5ncywgMik7CisJc2VsZnRlc3QocmMgPT0gMiAmJiBzdHJpbmdzWzJdID09IE5VTEwsICJvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheSgpIGZhaWx1cmU7IHJjPSVpXG4iLCByYyk7CisJc3RyaW5nc1sxXSA9IE5VTEw7CisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheShucCwgInBoYW5kbGUtbGlzdC1uYW1lcyIsIHN0cmluZ3MsIDEpOworCXNlbGZ0ZXN0KHJjID09IDEgJiYgc3RyaW5nc1sxXSA9PSBOVUxMLCAiT3Zlcndyb3RlIGVuZCBvZiBzdHJpbmcgYXJyYXk7IHJjPSVpLCBzdHI9JyVzJ1xuIiwgcmMsIHN0cmluZ3NbMV0pOwogfQogCiAjZGVmaW5lIHByb3BjbXAocDEsIHAyKSAoKChwMSktPmxlbmd0aCA9PSAocDIpLT5sZW5ndGgpICYmIFwKQEAgLTg0MiwxMCArODk2LDE0IEBACiAJCXJldHVybjsKIAl9CiAKLQl3aGlsZSAobGFzdF9ub2RlX2luZGV4ID49IDApIHsKKwl3aGlsZSAobGFzdF9ub2RlX2luZGV4LS0gPiAwKSB7CiAJCWlmIChub2Rlc1tsYXN0X25vZGVfaW5kZXhdKSB7CiAJCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKG5vZGVzW2xhc3Rfbm9kZV9pbmRleF0tPmZ1bGxfbmFtZSk7Ci0JCQlpZiAoc3RyY21wKG5wLT5mdWxsX25hbWUsICIvYWxpYXNlcyIpICE9IDApIHsKKwkJCWlmIChucCA9PSBub2Rlc1tsYXN0X25vZGVfaW5kZXhdKSB7CisJCQkJaWYgKG9mX2FsaWFzZXMgPT0gbnApIHsKKwkJCQkJb2Zfbm9kZV9wdXQob2ZfYWxpYXNlcyk7CisJCQkJCW9mX2FsaWFzZXMgPSBOVUxMOworCQkJCX0KIAkJCQlkZXRhY2hfbm9kZV9hbmRfY2hpbGRyZW4obnApOwogCQkJfSBlbHNlIHsKIAkJCQlmb3JfZWFjaF9wcm9wZXJ0eV9vZl9ub2RlKG5wLCBwcm9wKSB7CkBAIC04NTQsNyArOTEyLDYgQEAKIAkJCQl9CiAJCQl9CiAJCX0KLQkJbGFzdF9ub2RlX2luZGV4LS07CiAJfQogfQogCkBAIC04NjcsNiArOTI0LDggQEAKIAlyZXMgPSBzZWxmdGVzdF9kYXRhX2FkZCgpOwogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CisJaWYgKCFvZl9hbGlhc2VzKQorCQlvZl9hbGlhc2VzID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9hbGlhc2VzIik7CiAKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvdGVzdGNhc2UtZGF0YS9waGFuZGxlLXRlc3RzL2NvbnN1bWVyLWEiKTsKIAlpZiAoIW5wKSB7CkBAIC04ODEsNyArOTQwLDcgQEAKIAlvZl9zZWxmdGVzdF9maW5kX25vZGVfYnlfbmFtZSgpOwogCW9mX3NlbGZ0ZXN0X2R5bmFtaWMoKTsKIAlvZl9zZWxmdGVzdF9wYXJzZV9waGFuZGxlX3dpdGhfYXJncygpOwotCW9mX3NlbGZ0ZXN0X3Byb3BlcnR5X21hdGNoX3N0cmluZygpOworCW9mX3NlbGZ0ZXN0X3Byb3BlcnR5X3N0cmluZygpOwogCW9mX3NlbGZ0ZXN0X3Byb3BlcnR5X2NvcHkoKTsKIAlvZl9zZWxmdGVzdF9jaGFuZ2VzZXQoKTsKIAlvZl9zZWxmdGVzdF9wYXJzZV9pbnRlcnJ1cHRzKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL3Rlc3RjYXNlLWRhdGEvdGVzdHMtcGhhbmRsZS5kdHNpIGIvZHJpdmVycy9vZi90ZXN0Y2FzZS1kYXRhL3Rlc3RzLXBoYW5kbGUuZHRzaQppbmRleCBjZTBmZTA4Li41YjE1MjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL3Rlc3RjYXNlLWRhdGEvdGVzdHMtcGhhbmRsZS5kdHNpCisrKyBiL2RyaXZlcnMvb2YvdGVzdGNhc2UtZGF0YS90ZXN0cy1waGFuZGxlLmR0c2kKQEAgLTM5LDcgKzM5LDkgQEAKIAkJCQlwaGFuZGxlLWxpc3QtYmFkLWFyZ3MgPSA8JnByb3ZpZGVyMiAxIDA+LAogCQkJCQkJCTwmcHJvdmlkZXIzIDA+OwogCQkJCWVtcHR5LXByb3BlcnR5OworCQkJCXN0cmluZy1wcm9wZXJ0eSA9ICJmb29iYXIiOwogCQkJCXVudGVybWluYXRlZC1zdHJpbmcgPSBbNDAgNDEgNDIgNDNdOworCQkJCXVudGVybWluYXRlZC1zdHJpbmctbGlzdCA9ICJmaXJzdCIsICJzZWNvbmQiLCBbNDAgNDEgNDIgNDNdOwogCQkJfTsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggODkzNTAzZi4uY2NlZDg0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogY29uZmlnIFBDSV9NU0kKIAlib29sICJNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSBhbmQgTVNJLVgpIgogCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IEdFTkVSSUNfTVNJX0lSUQogCWhlbHAKIAkgICBUaGlzIGFsbG93cyBkZXZpY2UgZHJpdmVycyB0byBlbmFibGUgTVNJIChNZXNzYWdlIFNpZ25hbGVkCiAJICAgSW50ZXJydXB0cykuICBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgZW5hYmxlIGEgZGV2aWNlIHRvCkBAIC0xNiw2ICsxNywxMSBAQAogCiAJICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS4KIAorY29uZmlnIFBDSV9NU0lfSVJRX0RPTUFJTgorCWJvb2wKKwlkZXBlbmRzIG9uIFBDSV9NU0kKKwlzZWxlY3QgR0VORVJJQ19NU0lfSVJRX0RPTUFJTgorCiBjb25maWcgUENJX0RFQlVHCiAJYm9vbCAiUENJIERlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIFBDSSAmJiBERUJVR19LRVJORUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2FjY2Vzcy5jIGIvZHJpdmVycy9wY2kvYWNjZXNzLmMKaW5kZXggZDI5MmQ3Yy4uNDlkZDc2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYWNjZXNzLmMKKysrIGIvZHJpdmVycy9wY2kvYWNjZXNzLmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCXJldHVybiBwY2llX2NhcHNfcmVnKGRldikgJiBQQ0lfRVhQX0ZMQUdTX1ZFUlM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwY2llX2NhcF9oYXNfbG5rY3RsKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpCitib29sIHBjaWVfY2FwX2hhc19sbmtjdGwoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlpbnQgdHlwZSA9IHBjaV9wY2llX3R5cGUoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUtZHcuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLWR3LmMKaW5kZXggMzQwODZjZS4uMzEzMzM4ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLWR3LmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUtZHcuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJLyogTWFzayB0aGUgZW5kIHBvaW50IGlmIFBWTSBpbXBsZW1lbnRlZCAqLwogCWlmIChJU19FTkFCTEVEKENPTkZJR19QQ0lfTVNJKSkgewogCQlpZiAobXNpLT5tc2lfYXR0cmliLm1hc2tiaXQpCi0JCQltYXNrX21zaV9pcnEoZCk7CisJCQlwY2lfbXNpX21hc2tfaXJxKGQpOwogCX0KIAogCWtzX2R3X3BjaWVfbXNpX2NsZWFyX2lycShwcCwgb2Zmc2V0KTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCS8qIE1hc2sgdGhlIGVuZCBwb2ludCBpZiBQVk0gaW1wbGVtZW50ZWQgKi8KIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX01TSSkpIHsKIAkJaWYgKG1zaS0+bXNpX2F0dHJpYi5tYXNrYml0KQotCQkJdW5tYXNrX21zaV9pcnEoZCk7CisJCQlwY2lfbXNpX3VubWFza19pcnEoZCk7CiAJfQogCiAJa3NfZHdfcGNpZV9tc2lfc2V0X2lycShwcCwgb2Zmc2V0KTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogCS5tYXAgPSBrc19kd19wY2llX21zaV9tYXAsCiB9OwogCi1pbnQga3NfZHdfcGNpZV9tc2lfaG9zdF9pbml0KHN0cnVjdCBwY2llX3BvcnQgKnBwLCBzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApCitpbnQga3NfZHdfcGNpZV9tc2lfaG9zdF9pbml0KHN0cnVjdCBwY2llX3BvcnQgKnBwLCBzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJc3RydWN0IGtleXN0b25lX3BjaWUgKmtzX3BjaWUgPSB0b19rZXlzdG9uZV9wY2llKHBwKTsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLmggYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1rZXlzdG9uZS5oCmluZGV4IDFmYzFmY2UuLjQ3OGQ5MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLmgKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUuaApAQCAtNTUsNCArNTUsNCBAQAogdm9pZCBrc19kd19wY2llX21zaV9jbGVhcl9pcnEoc3RydWN0IHBjaWVfcG9ydCAqcHAsIGludCBpcnEpOwogdm9pZCBrc19kd19wY2llX3YzXzY1X3NjYW5fYnVzKHN0cnVjdCBwY2llX3BvcnQgKnBwKTsKIGludCBrc19kd19wY2llX21zaV9ob3N0X2luaXQoc3RydWN0IHBjaWVfcG9ydCAqcHAsCi0JCXN0cnVjdCBtc2lfY2hpcCAqY2hpcCk7CisJCXN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1tdmVidS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktbXZlYnUuYwppbmRleCBiMTMxNWUxLi45YWE4MTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1tdmVidS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLW12ZWJ1LmMKQEAgLTk5LDcgKzk5LDcgQEAKIHN0cnVjdCBtdmVidV9wY2llIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCBtdmVidV9wY2llX3BvcnQgKnBvcnRzOwotCXN0cnVjdCBtc2lfY2hpcCAqbXNpOworCXN0cnVjdCBtc2lfY29udHJvbGxlciAqbXNpOwogCXN0cnVjdCByZXNvdXJjZSBpbzsKIAljaGFyIGlvX25hbWVbMzBdOwogCXN0cnVjdCByZXNvdXJjZSByZWFsaW87CkBAIC03NzQsMTIgKzc3NCw2IEBACiAJcmV0dXJuIGJ1czsKIH0KIAotc3RhdGljIHZvaWQgbXZlYnVfcGNpZV9hZGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IG12ZWJ1X3BjaWUgKnBjaWUgPSBzeXNfdG9fcGNpZShidXMtPnN5c2RhdGEpOwotCWJ1cy0+bXNpID0gcGNpZS0+bXNpOwotfQotCiBzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IG12ZWJ1X3BjaWVfYWxpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkJCSBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCQkJCSByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCkBAIC04MTYsNiArODEwLDEwIEBACiAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaHcubXNpX2N0cmwgPSBwY2llLT5tc2k7CisjZW5kaWYKKwogCWh3Lm5yX2NvbnRyb2xsZXJzID0gMTsKIAlody5wcml2YXRlX2RhdGEgICA9ICh2b2lkICoqKSZwY2llOwogCWh3LnNldHVwICAgICAgICAgID0gbXZlYnVfcGNpZV9zZXR1cDsKQEAgLTgyMyw3ICs4MjEsNiBAQAogCWh3Lm1hcF9pcnEgICAgICAgID0gb2ZfaXJxX3BhcnNlX2FuZF9tYXBfcGNpOwogCWh3Lm9wcyAgICAgICAgICAgID0gJm12ZWJ1X3BjaWVfb3BzOwogCWh3LmFsaWduX3Jlc291cmNlID0gbXZlYnVfcGNpZV9hbGlnbl9yZXNvdXJjZTsKLQlody5hZGRfYnVzICAgICAgICA9IG12ZWJ1X3BjaWVfYWRkX2J1czsKIAogCXBjaV9jb21tb25faW5pdCgmaHcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktdGVncmEuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXRlZ3JhLmMKaW5kZXggM2Q0Mzg3NC4uZmVjY2ZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktdGVncmEuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS10ZWdyYS5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIAkpCiAKIHN0cnVjdCB0ZWdyYV9tc2kgewotCXN0cnVjdCBtc2lfY2hpcCBjaGlwOworCXN0cnVjdCBtc2lfY29udHJvbGxlciBjaGlwOwogCURFQ0xBUkVfQklUTUFQKHVzZWQsIElOVF9QQ0lfTVNJX05SKTsKIAlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwogCXVuc2lnbmVkIGxvbmcgcGFnZXM7CkBAIC0yNTksNyArMjU5LDcgQEAKIAlib29sIGhhc19nZW4yOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVncmFfbXNpICp0b190ZWdyYV9tc2koc3RydWN0IG1zaV9jaGlwICpjaGlwKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVncmFfbXNpICp0b190ZWdyYV9tc2koc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKQogewogCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHRlZ3JhX21zaSwgY2hpcCk7CiB9CkBAIC0yNzYsNiArMjc2LDcgQEAKIAogCXN0cnVjdCByZXNvdXJjZSBhbGw7CiAJc3RydWN0IHJlc291cmNlIGlvOworCXN0cnVjdCByZXNvdXJjZSBwaW87CiAJc3RydWN0IHJlc291cmNlIG1lbTsKIAlzdHJ1Y3QgcmVzb3VyY2UgcHJlZmV0Y2g7CiAJc3RydWN0IHJlc291cmNlIGJ1c247CkBAIC02NTgsNyArNjU5LDYgQEAKIHsKIAlzdHJ1Y3QgdGVncmFfcGNpZSAqcGNpZSA9IHN5c190b19wY2llKHN5cyk7CiAJaW50IGVycjsKLQlwaHlzX2FkZHJfdCBpb19zdGFydDsKIAogCWVyciA9IGRldm1fcmVxdWVzdF9yZXNvdXJjZShwY2llLT5kZXYsICZwY2llLT5hbGwsICZwY2llLT5tZW0pOwogCWlmIChlcnIgPCAwKQpAQCAtNjY4LDE0ICs2NjgsMTIgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaW9fc3RhcnQgPSBwY2lfcGlvX3RvX2FkZHJlc3MocGNpZS0+aW8uc3RhcnQpOwotCiAJcGNpX2FkZF9yZXNvdXJjZV9vZmZzZXQoJnN5cy0+cmVzb3VyY2VzLCAmcGNpZS0+bWVtLCBzeXMtPm1lbV9vZmZzZXQpOwogCXBjaV9hZGRfcmVzb3VyY2Vfb2Zmc2V0KCZzeXMtPnJlc291cmNlcywgJnBjaWUtPnByZWZldGNoLAogCQkJCXN5cy0+bWVtX29mZnNldCk7CiAJcGNpX2FkZF9yZXNvdXJjZSgmc3lzLT5yZXNvdXJjZXMsICZwY2llLT5idXNuKTsKIAotCXBjaV9pb3JlbWFwX2lvKG5yICogU1pfNjRLLCBpb19zdGFydCk7CisJcGNpX2lvcmVtYXBfaW8ocGNpZS0+cGlvLnN0YXJ0LCBwY2llLT5pby5zdGFydCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTY5NCwxNSArNjkyLDYgQEAKIAlyZXR1cm4gaXJxOwogfQogCi1zdGF0aWMgdm9pZCB0ZWdyYV9wY2llX2FkZF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX01TSSkpIHsKLQkJc3RydWN0IHRlZ3JhX3BjaWUgKnBjaWUgPSBzeXNfdG9fcGNpZShidXMtPnN5c2RhdGEpOwotCi0JCWJ1cy0+bXNpID0gJnBjaWUtPm1zaS5jaGlwOwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBwY2lfYnVzICp0ZWdyYV9wY2llX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQogewogCXN0cnVjdCB0ZWdyYV9wY2llICpwY2llID0gc3lzX3RvX3BjaWUoc3lzKTsKQEAgLTc4Niw3ICs3NzUsNiBAQAogc3RhdGljIHZvaWQgdGVncmFfcGNpZV9zZXR1cF90cmFuc2xhdGlvbnMoc3RydWN0IHRlZ3JhX3BjaWUgKnBjaWUpCiB7CiAJdTMyIGZwY2lfYmFyLCBzaXplLCBheGlfYWRkcmVzczsKLQlwaHlzX2FkZHJfdCBpb19zdGFydCA9IHBjaV9waW9fdG9fYWRkcmVzcyhwY2llLT5pby5zdGFydCk7CiAKIAkvKiBCYXIgMDogdHlwZSAxIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KIAlmcGNpX2JhciA9IDB4ZmUxMDAwMDA7CkBAIC03OTksNyArNzg3LDcgQEAKIAkvKiBCYXIgMTogZG93bnN0cmVhbSBJTyBiYXIgKi8KIAlmcGNpX2JhciA9IDB4ZmRmYzAwMDA7CiAJc2l6ZSA9IHJlc291cmNlX3NpemUoJnBjaWUtPmlvKTsKLQlheGlfYWRkcmVzcyA9IGlvX3N0YXJ0OworCWF4aV9hZGRyZXNzID0gcGNpZS0+aW8uc3RhcnQ7CiAJYWZpX3dyaXRlbChwY2llLCBheGlfYWRkcmVzcywgQUZJX0FYSV9CQVIxX1NUQVJUKTsKIAlhZmlfd3JpdGVsKHBjaWUsIHNpemUgPj4gMTIsIEFGSV9BWElfQkFSMV9TWik7CiAJYWZpX3dyaXRlbChwY2llLCBmcGNpX2JhciwgQUZJX0ZQQ0lfQkFSMSk7CkBAIC0xMjgzLDggKzEyNzEsOCBAQAogCXJldHVybiBwcm9jZXNzZWQgPiAwID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKIH0KIAotc3RhdGljIGludCB0ZWdyYV9tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkgICAgICAgc3RydWN0IG1zaV9kZXNjICpkZXNjKQorc3RhdGljIGludCB0ZWdyYV9tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwKKwkJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjKQogewogCXN0cnVjdCB0ZWdyYV9tc2kgKm1zaSA9IHRvX3RlZ3JhX21zaShjaGlwKTsKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7CkBAIC0xMzA4LDEyICsxMjk2LDEzIEBACiAJbXNnLmFkZHJlc3NfaGkgPSAwOwogCW1zZy5kYXRhID0gaHdpcnE7CiAKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0ZWdyYV9tc2lfdGVhcmRvd25faXJxKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHRlZ3JhX21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAorCQkJCSAgIHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IHRlZ3JhX21zaSAqbXNpID0gdG9fdGVncmFfbXNpKGNoaXApOwogCXN0cnVjdCBpcnFfZGF0YSAqZCA9IGlycV9nZXRfaXJxX2RhdGEoaXJxKTsKQEAgLTEzMjUsMTAgKzEzMTQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0ZWdyYV9tc2lfaXJxX2NoaXAgPSB7CiAJLm5hbWUgPSAiVGVncmEgUENJZSBNU0kiLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9kaXNhYmxlID0gbWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAorCS5pcnFfZW5hYmxlID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIHN0YXRpYyBpbnQgdGVncmFfbXNpX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLApAQCAtMTY5MCw4ICsxNjc5LDIzIEBACiAKIAkJc3dpdGNoIChyZXMuZmxhZ3MgJiBJT1JFU09VUkNFX1RZUEVfQklUUykgewogCQljYXNlIElPUkVTT1VSQ0VfSU86Ci0JCQltZW1jcHkoJnBjaWUtPmlvLCAmcmVzLCBzaXplb2YocmVzKSk7Ci0JCQlwY2llLT5pby5uYW1lID0gbnAtPmZ1bGxfbmFtZTsKKwkJCW1lbWNweSgmcGNpZS0+cGlvLCAmcmVzLCBzaXplb2YocmVzKSk7CisJCQlwY2llLT5waW8ubmFtZSA9IG5wLT5mdWxsX25hbWU7CisKKwkJCS8qCisJCQkgKiBUaGUgVGVncmEgUENJZSBob3N0IGJyaWRnZSB1c2VzIHRoaXMgdG8gcHJvZ3JhbSB0aGUKKwkJCSAqIG1hcHBpbmcgb2YgdGhlIEkvTyBzcGFjZSB0byB0aGUgcGh5c2ljYWwgYWRkcmVzcywKKwkJCSAqIHNvIHdlIG92ZXJyaWRlIHRoZSAuc3RhcnQgYW5kIC5lbmQgZmllbGRzIGhlcmUgdGhhdAorCQkJICogb2ZfcGNpX3JhbmdlX3RvX3Jlc291cmNlKCkgY29udmVydGVkIHRvIEkvTyBzcGFjZS4KKwkJCSAqIFdlIGFsc28gc2V0IHRoZSBJT1JFU09VUkNFX01FTSB0eXBlIHRvIGNsYXJpZnkgdGhhdAorCQkJICogdGhlIHJlc291cmNlIGlzIGluIHRoZSBwaHlzaWNhbCBtZW1vcnkgc3BhY2UuCisJCQkgKi8KKwkJCXBjaWUtPmlvLnN0YXJ0ID0gcmFuZ2UuY3B1X2FkZHI7CisJCQlwY2llLT5pby5lbmQgPSByYW5nZS5jcHVfYWRkciArIHJhbmdlLnNpemUgLSAxOworCQkJcGNpZS0+aW8uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwkJCXBjaWUtPmlvLm5hbWUgPSAiSS9PIjsKKworCQkJbWVtY3B5KCZyZXMsICZwY2llLT5pbywgc2l6ZW9mKHJlcykpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBJT1JFU09VUkNFX01FTToKQEAgLTE4ODEsMTEgKzE4ODUsMTQgQEAKIAogCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwogCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlody5tc2lfY3RybCA9ICZwY2llLT5tc2kuY2hpcDsKKyNlbmRpZgorCiAJaHcubnJfY29udHJvbGxlcnMgPSAxOwogCWh3LnByaXZhdGVfZGF0YSA9ICh2b2lkICoqKSZwY2llOwogCWh3LnNldHVwID0gdGVncmFfcGNpZV9zZXR1cDsKIAlody5tYXBfaXJxID0gdGVncmFfcGNpZV9tYXBfaXJxOwotCWh3LmFkZF9idXMgPSB0ZWdyYV9wY2llX2FkZF9idXM7CiAJaHcuc2NhbiA9IHRlZ3JhX3BjaWVfc2Nhbl9idXM7CiAJaHcub3BzID0gJnRlZ3JhX3BjaWVfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS14Z2VuZS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2kteGdlbmUuYwppbmRleCA5ZWNhYmZhLi4yOTg4ZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS14Z2VuZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXhnZW5lLmMKQEAgLTYzMSwxMCArNjMxLDE1IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWJ1cyA9IHBjaV9zY2FuX3Jvb3RfYnVzKCZwZGV2LT5kZXYsIDAsICZ4Z2VuZV9wY2llX29wcywgcG9ydCwgJnJlcyk7CisJYnVzID0gcGNpX2NyZWF0ZV9yb290X2J1cygmcGRldi0+ZGV2LCAwLAorCQkJCQkmeGdlbmVfcGNpZV9vcHMsIHBvcnQsICZyZXMpOwogCWlmICghYnVzKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBjaV9zY2FuX2NoaWxkX2J1cyhidXMpOworCXBjaV9hc3NpZ25fdW5hc3NpZ25lZF9idXNfcmVzb3VyY2VzKGJ1cyk7CisJcGNpX2J1c19hZGRfZGV2aWNlcyhidXMpOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcG9ydCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuYwppbmRleCBkZmVkMDBhLi4xN2I1MTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMKQEAgLTE1MiwxMCArMTUyLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZHdfbXNpX2lycV9jaGlwID0gewogCS5uYW1lID0gIlBDSS1NU0kiLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9kaXNhYmxlID0gbWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAorCS5pcnFfZW5hYmxlID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIC8qIE1TSSBpbnQgaGFuZGxlciAqLwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKLXN0YXRpYyBpbnQgZHdfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorc3RhdGljIGludCBkd19tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7CiAJaW50IGlycSwgcG9zOwpAQCAtMjk4LDEyICsyOTgsMTIgQEAKIAllbHNlCiAJCW1zZy5kYXRhID0gcG9zOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHdfbXNpX3RlYXJkb3duX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBkd19tc2lfdGVhcmRvd25faXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwgdW5zaWduZWQgaW50IGlycSkKIHsKIAlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKGlycSk7CiAJc3RydWN0IG1zaV9kZXNjICptc2kgPSBpcnFfZGF0YV9nZXRfbXNpKGRhdGEpOwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJY2xlYXJfaXJxX3JhbmdlKHBwLCBpcnEsIDEsIGRhdGEtPmh3aXJxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtc2lfY2hpcCBkd19wY2llX21zaV9jaGlwID0geworc3RhdGljIHN0cnVjdCBtc2lfY29udHJvbGxlciBkd19wY2llX21zaV9jaGlwID0gewogCS5zZXR1cF9pcnEgPSBkd19tc2lfc2V0dXBfaXJxLAogCS50ZWFyZG93bl9pcnEgPSBkd19tc2lfdGVhcmRvd25faXJxLAogfTsKQEAgLTQ5OCw2ICs0OTgsMTEgQEAKIAl2YWwgfD0gUE9SVF9MT0dJQ19TUEVFRF9DSEFOR0U7CiAJZHdfcGNpZV93cl9vd25fY29uZihwcCwgUENJRV9MSU5LX1dJRFRIX1NQRUVEX0NPTlRST0wsIDQsIHZhbCk7CiAKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWR3X3BjaWVfbXNpX2NoaXAuZGV2ID0gcHAtPmRldjsKKwlkd19wY2kubXNpX2N0cmwgPSAmZHdfcGNpZV9tc2lfY2hpcDsKKyNlbmRpZgorCiAJZHdfcGNpLm5yX2NvbnRyb2xsZXJzID0gMTsKIAlkd19wY2kucHJpdmF0ZV9kYXRhID0gKHZvaWQgKiopJnBwOwogCkBAIC03NDcsMjEgKzc1MiwxMCBAQAogCXJldHVybiBpcnE7CiB9CiAKLXN0YXRpYyB2b2lkIGR3X3BjaWVfYWRkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCWlmIChJU19FTkFCTEVEKENPTkZJR19QQ0lfTVNJKSkgewotCQlzdHJ1Y3QgcGNpZV9wb3J0ICpwcCA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7Ci0KLQkJZHdfcGNpZV9tc2lfY2hpcC5kZXYgPSBwcC0+ZGV2OwotCQlidXMtPm1zaSA9ICZkd19wY2llX21zaV9jaGlwOwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBod19wY2kgZHdfcGNpID0gewogCS5zZXR1cAkJPSBkd19wY2llX3NldHVwLAogCS5zY2FuCQk9IGR3X3BjaWVfc2Nhbl9idXMsCiAJLm1hcF9pcnEJPSBkd19wY2llX21hcF9pcnEsCi0JLmFkZF9idXMJPSBkd19wY2llX2FkZF9idXMsCiB9OwogCiB2b2lkIGR3X3BjaWVfc2V0dXBfcmMoc3RydWN0IHBjaWVfcG9ydCAqcHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5oIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuaAppbmRleCBjNjI1Njc1Li5kMGJiZDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5oCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmgKQEAgLTczLDcgKzczLDcgQEAKIAl1MzIgKCpnZXRfbXNpX2FkZHIpKHN0cnVjdCBwY2llX3BvcnQgKnBwKTsKIAl1MzIgKCpnZXRfbXNpX2RhdGEpKHN0cnVjdCBwY2llX3BvcnQgKnBwLCBpbnQgcG9zKTsKIAl2b2lkICgqc2Nhbl9idXMpKHN0cnVjdCBwY2llX3BvcnQgKnBwKTsKLQlpbnQgKCptc2lfaG9zdF9pbml0KShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwgc3RydWN0IG1zaV9jaGlwICpjaGlwKTsKKwlpbnQgKCptc2lfaG9zdF9pbml0KShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwgc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKTsKIH07CiAKIGludCBkd19wY2llX2NmZ19yZWFkKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXJjYXIuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1yY2FyLmMKaW5kZXggNjExNThlMC4uZDMwNTNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXJjYXIuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtcmNhci5jCkBAIC0xMTEsMTQgKzExMSwxNCBAQAogc3RydWN0IHJjYXJfbXNpIHsKIAlERUNMQVJFX0JJVE1BUCh1c2VkLCBJTlRfUENJX01TSV9OUik7CiAJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKLQlzdHJ1Y3QgbXNpX2NoaXAgY2hpcDsKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgY2hpcDsKIAl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCXN0cnVjdCBtdXRleCBsb2NrOwogCWludCBpcnExOwogCWludCBpcnEyOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmNhcl9tc2kgKnRvX3JjYXJfbXNpKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJjYXJfbXNpICp0b19yY2FyX21zaShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcmNhcl9tc2ksIGNoaXApOwogfQpAQCAtMzgwLDIwICszODAsMTAgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgcmNhcl9wY2llX2FkZF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX01TSSkpIHsKLQkJc3RydWN0IHJjYXJfcGNpZSAqcGNpZSA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7Ci0KLQkJYnVzLT5tc2kgPSAmcGNpZS0+bXNpLmNoaXA7Ci0JfQotfQotCiBzdHJ1Y3QgaHdfcGNpIHJjYXJfcGNpID0gewogCS5zZXR1cCAgICAgICAgICA9IHJjYXJfcGNpZV9zZXR1cCwKIAkubWFwX2lycSAgICAgICAgPSBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2ksCiAJLm9wcyAgICAgICAgICAgID0gJnJjYXJfcGNpZV9vcHMsCi0JLmFkZF9idXMgICAgICAgID0gcmNhcl9wY2llX2FkZF9idXMsCiB9OwogCiBzdGF0aWMgdm9pZCByY2FyX3BjaWVfZW5hYmxlKHN0cnVjdCByY2FyX3BjaWUgKnBjaWUpCkBAIC00MDIsNiArMzkyLDkgQEAKIAogCXJjYXJfcGNpLm5yX2NvbnRyb2xsZXJzID0gMTsKIAlyY2FyX3BjaS5wcml2YXRlX2RhdGEgPSAodm9pZCAqKikmcGNpZTsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCXJjYXJfcGNpLm1zaV9jdHJsID0gJnBjaWUtPm1zaS5jaGlwOworI2VuZGlmCiAKIAlwY2lfY29tbW9uX2luaXRfZGV2KCZwZGV2LT5kZXYsICZyY2FyX3BjaSk7CiAjaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TCkBAIC02MjIsNyArNjE1LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcmNhcl9tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCitzdGF0aWMgaW50IHJjYXJfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXAsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJICAgICAgc3RydWN0IG1zaV9kZXNjICpkZXNjKQogewogCXN0cnVjdCByY2FyX21zaSAqbXNpID0gdG9fcmNhcl9tc2koY2hpcCk7CkBAIC02NDcsMTIgKzY0MCwxMiBAQAogCW1zZy5hZGRyZXNzX2hpID0gcmNhcl9wY2lfcmVhZF9yZWcocGNpZSwgUENJRU1TSUFVUik7CiAJbXNnLmRhdGEgPSBod2lycTsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJjYXJfbXNpX3RlYXJkb3duX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCByY2FyX21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCByY2FyX21zaSAqbXNpID0gdG9fcmNhcl9tc2koY2hpcCk7CiAJc3RydWN0IGlycV9kYXRhICpkID0gaXJxX2dldF9pcnFfZGF0YShpcnEpOwpAQCAtNjYyLDEwICs2NTUsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByY2FyX21zaV9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJSLUNhciBQQ0llIE1TSSIsCi0JLmlycV9lbmFibGUgPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX2Rpc2FibGUgPSBtYXNrX21zaV9pcnEsCi0JLmlycV9tYXNrID0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrID0gdW5tYXNrX21zaV9pcnEsCisJLmlycV9lbmFibGUgPSBwY2lfbXNpX3VubWFza19pcnEsCisJLmlycV9kaXNhYmxlID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX21hc2sgPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrID0gcGNpX21zaV91bm1hc2tfaXJxLAogfTsKIAogc3RhdGljIGludCByY2FyX21zaV9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS14aWxpbnguYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS14aWxpbnguYwppbmRleCBjY2M0OTZiLi4yZjUwZmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUteGlsaW54LmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLXhpbGlueC5jCkBAIC0zMzUsNyArMzM1LDggQEAKICAqIEBjaGlwOiBNU0kgQ2hpcCBkZXNjcmlwdG9yCiAgKiBAaXJxOiBNU0kgSVJRIHRvIGRlc3Ryb3kKICAqLwotc3RhdGljIHZvaWQgeGlsaW54X21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgeGlsaW54X21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgaXJxKQogewogCXhpbGlueF9wY2llX2Rlc3Ryb3lfbXNpKGlycSk7CiB9CkBAIC0zNDgsNyArMzQ5LDcgQEAKICAqCiAgKiBSZXR1cm46ICcwJyBvbiBzdWNjZXNzIGFuZCBlcnJvciB2YWx1ZSBvbiBmYWlsdXJlCiAgKi8KLXN0YXRpYyBpbnQgeGlsaW54X3BjaWVfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsCitzdGF0aWMgaW50IHhpbGlueF9wY2llX21zaV9zZXR1cF9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAogCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7CkBAIC0zNzQsMTMgKzM3NSwxMyBAQAogCW1zZy5hZGRyZXNzX2xvID0gbXNnX2FkZHI7CiAJbXNnLmRhdGEgPSBpcnE7CiAKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAogCXJldHVybiAwOwogfQogCiAvKiBNU0kgQ2hpcCBEZXNjcmlwdG9yICovCi1zdGF0aWMgc3RydWN0IG1zaV9jaGlwIHhpbGlueF9wY2llX21zaV9jaGlwID0geworc3RhdGljIHN0cnVjdCBtc2lfY29udHJvbGxlciB4aWxpbnhfcGNpZV9tc2lfY2hpcCA9IHsKIAkuc2V0dXBfaXJxID0geGlsaW54X3BjaWVfbXNpX3NldHVwX2lycSwKIAkudGVhcmRvd25faXJxID0geGlsaW54X21zaV90ZWFyZG93bl9pcnEsCiB9OwpAQCAtMzg4LDEwICszODksMTAgQEAKIC8qIEhXIEludGVycnVwdCBDaGlwIERlc2NyaXB0b3IgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGlsaW54X21zaV9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJYaWxpbnggUENJZSBNU0kiLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9kaXNhYmxlID0gbWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAorCS5pcnFfZW5hYmxlID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIC8qKgpAQCAtNDMxLDIwICs0MzIsNiBAQAogCXBjaWVfd3JpdGUocG9ydCwgbXNnX2FkZHIsIFhJTElOWF9QQ0lFX1JFR19NU0lCQVNFMik7CiB9CiAKLS8qKgotICogeGlsaW54X3BjaWVfYWRkX2J1cyAtIEFkZCBNU0kgY2hpcCBpbmZvIHRvIFBDSWUgYnVzCi0gKiBAYnVzOiBQQ0llIGJ1cwotICovCi1zdGF0aWMgdm9pZCB4aWxpbnhfcGNpZV9hZGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKSB7Ci0JCXN0cnVjdCB4aWxpbnhfcGNpZV9wb3J0ICpwb3J0ID0gc3lzX3RvX3BjaWUoYnVzLT5zeXNkYXRhKTsKLQotCQl4aWxpbnhfcGNpZV9tc2lfY2hpcC5kZXYgPSBwb3J0LT5kZXY7Ci0JCWJ1cy0+bXNpID0gJnhpbGlueF9wY2llX21zaV9jaGlwOwotCX0KLX0KLQogLyogSU5UeCBGdW5jdGlvbnMgKi8KIAogLyoqCkBAIC05MjQsMTAgKzkxMSwxNCBAQAogCQkucHJpdmF0ZV9kYXRhCT0gKHZvaWQgKiopJnBvcnQsCiAJCS5zZXR1cAkJPSB4aWxpbnhfcGNpZV9zZXR1cCwKIAkJLm1hcF9pcnEJPSBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2ksCi0JCS5hZGRfYnVzCT0geGlsaW54X3BjaWVfYWRkX2J1cywKIAkJLnNjYW4JCT0geGlsaW54X3BjaWVfc2Nhbl9idXMsCiAJCS5vcHMJCT0gJnhpbGlueF9wY2llX29wcywKIAl9OworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwl4aWxpbnhfcGNpZV9tc2lfY2hpcC5kZXYgPSBwb3J0LT5kZXY7CisJaHcubXNpX2N0cmwgPSAmeGlsaW54X3BjaWVfbXNpX2NoaXA7CisjZW5kaWYKIAlwY2lfY29tbW9uX2luaXRfZGV2KGRldiwgJmh3KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCA5ZmFiMzBhLi5mZDYwODA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtMTksMTkgKzE5LDgyIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KIAogI2luY2x1ZGUgInBjaS5oIgogCiBzdGF0aWMgaW50IHBjaV9tc2lfZW5hYmxlID0gMTsKK2ludCBwY2lfbXNpX2lnbm9yZV9tYXNrOwogCiAjZGVmaW5lIG1zaXhfdGFibGVfc2l6ZShmbGFncykJKChmbGFncyAmIFBDSV9NU0lYX0ZMQUdTX1FTSVpFKSArIDEpCiAKKyNpZmRlZiBDT05GSUdfUENJX01TSV9JUlFfRE9NQUlOCitzdGF0aWMgc3RydWN0IGlycV9kb21haW4gKnBjaV9tc2lfZGVmYXVsdF9kb21haW47CitzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9tc2lfZG9tYWluX2xvY2spOworCitzdHJ1Y3QgaXJxX2RvbWFpbiAqIF9fd2VhayBhcmNoX2dldF9wY2lfbXNpX2RvbWFpbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBwY2lfbXNpX2RlZmF1bHRfZG9tYWluOworfQorCitzdGF0aWMgc3RydWN0IGlycV9kb21haW4gKnBjaV9tc2lfZ2V0X2RvbWFpbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW4gPSBOVUxMOworCisJaWYgKGRldi0+YnVzLT5tc2kpCisJCWRvbWFpbiA9IGRldi0+YnVzLT5tc2ktPmRvbWFpbjsKKwlpZiAoIWRvbWFpbikKKwkJZG9tYWluID0gYXJjaF9nZXRfcGNpX21zaV9kb21haW4oZGV2KTsKKworCXJldHVybiBkb21haW47Cit9CisKK3N0YXRpYyBpbnQgcGNpX21zaV9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCit7CisJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKKworCWRvbWFpbiA9IHBjaV9tc2lfZ2V0X2RvbWFpbihkZXYpOworCWlmIChkb21haW4pCisJCXJldHVybiBwY2lfbXNpX2RvbWFpbl9hbGxvY19pcnFzKGRvbWFpbiwgZGV2LCBudmVjLCB0eXBlKTsKKworCXJldHVybiBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9tc2lfdGVhcmRvd25fbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworCisJZG9tYWluID0gcGNpX21zaV9nZXRfZG9tYWluKGRldik7CisJaWYgKGRvbWFpbikKKwkJcGNpX21zaV9kb21haW5fZnJlZV9pcnFzKGRvbWFpbiwgZGV2KTsKKwllbHNlCisJCWFyY2hfdGVhcmRvd25fbXNpX2lycXMoZGV2KTsKK30KKyNlbHNlCisjZGVmaW5lIHBjaV9tc2lfc2V0dXBfbXNpX2lycXMJCWFyY2hfc2V0dXBfbXNpX2lycXMKKyNkZWZpbmUgcGNpX21zaV90ZWFyZG93bl9tc2lfaXJxcwlhcmNoX3RlYXJkb3duX21zaV9pcnFzCisjZW5kaWYKIAogLyogQXJjaCBob29rcyAqLwogCitzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKiBfX3dlYWsgcGNpYmlvc19tc2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IG1zaV9jb250cm9sbGVyICpwY2lfbXNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKm1zaV9jdHJsID0gZGV2LT5idXMtPm1zaTsKKworCWlmIChtc2lfY3RybCkKKwkJcmV0dXJuIG1zaV9jdHJsOworCisJcmV0dXJuIHBjaWJpb3NfbXNpX2NvbnRyb2xsZXIoZGV2KTsKK30KKwogaW50IF9fd2VhayBhcmNoX3NldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBtc2lfY2hpcCAqY2hpcCA9IGRldi0+YnVzLT5tc2k7CisJc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwID0gcGNpX21zaV9jb250cm9sbGVyKGRldik7CiAJaW50IGVycjsKIAogCWlmICghY2hpcCB8fCAhY2hpcC0+c2V0dXBfaXJxKQpAQCAtNDgsNyArMTExLDcgQEAKIAogdm9pZCBfX3dlYWsgYXJjaF90ZWFyZG93bl9tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IG1zaV9jaGlwICpjaGlwID0gaXJxX2dldF9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXAgPSBpcnFfZ2V0X2NoaXBfZGF0YShpcnEpOwogCiAJaWYgKCFjaGlwIHx8ICFjaGlwLT50ZWFyZG93bl9pcnEpCiAJCXJldHVybjsKQEAgLTg1LDE5ICsxNDgsMTMgQEAKICAqLwogdm9pZCBkZWZhdWx0X3RlYXJkb3duX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CisJaW50IGk7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWludCBpLCBudmVjOwotCQlpZiAoZW50cnktPmlycSA9PSAwKQotCQkJY29udGludWU7Ci0JCWlmIChlbnRyeS0+bnZlY191c2VkKQotCQkJbnZlYyA9IGVudHJ5LT5udmVjX3VzZWQ7Ci0JCWVsc2UKLQkJCW52ZWMgPSAxIDw8IGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlOwotCQlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKQotCQkJYXJjaF90ZWFyZG93bl9tc2lfaXJxKGVudHJ5LT5pcnEgKyBpKTsKLQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpCisJCWlmIChlbnRyeS0+aXJxKQorCQkJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udmVjX3VzZWQ7IGkrKykKKwkJCQlhcmNoX3RlYXJkb3duX21zaV9pcnEoZW50cnktPmlycSArIGkpOwogfQogCiB2b2lkIF9fd2VhayBhcmNoX3RlYXJkb3duX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0xMjAsNyArMTc3LDcgQEAKIAl9CiAKIAlpZiAoZW50cnkpCi0JCV9fd3JpdGVfbXNpX21zZyhlbnRyeSwgJmVudHJ5LT5tc2cpOworCQlfX3BjaV93cml0ZV9tc2lfbXNnKGVudHJ5LCAmZW50cnktPm1zZyk7CiB9CiAKIHZvaWQgX193ZWFrIGFyY2hfcmVzdG9yZV9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtMTYzLDExICsyMjAsMTEgQEAKICAqIHJlbGlhYmx5IGFzIGRldmljZXMgd2l0aG91dCBhbiBJTlR4IGRpc2FibGUgYml0IHdpbGwgdGhlbiBnZW5lcmF0ZSBhCiAgKiBsZXZlbCBJUlEgd2hpY2ggd2lsbCBuZXZlciBiZSBjbGVhcmVkLgogICovCi11MzIgZGVmYXVsdF9tc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCit1MzIgX19wY2lfbXNpX2Rlc2NfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCiB7CiAJdTMyIG1hc2tfYml0cyA9IGRlc2MtPm1hc2tlZDsKIAotCWlmICghZGVzYy0+bXNpX2F0dHJpYi5tYXNrYml0KQorCWlmIChwY2lfbXNpX2lnbm9yZV9tYXNrIHx8ICFkZXNjLT5tc2lfYXR0cmliLm1hc2tiaXQpCiAJCXJldHVybiAwOwogCiAJbWFza19iaXRzICY9IH5tYXNrOwpAQCAtMTc3LDE0ICsyMzQsOSBAQAogCXJldHVybiBtYXNrX2JpdHM7CiB9CiAKLV9fd2VhayB1MzIgYXJjaF9tc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCi17Ci0JcmV0dXJuIGRlZmF1bHRfbXNpX21hc2tfaXJxKGRlc2MsIG1hc2ssIGZsYWcpOwotfQotCiBzdGF0aWMgdm9pZCBtc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCiB7Ci0JZGVzYy0+bWFza2VkID0gYXJjaF9tc2lfbWFza19pcnEoZGVzYywgbWFzaywgZmxhZyk7CisJZGVzYy0+bWFza2VkID0gX19wY2lfbXNpX2Rlc2NfbWFza19pcnEoZGVzYywgbWFzaywgZmxhZyk7CiB9CiAKIC8qCkBAIC0xOTQsMTEgKzI0NiwxNSBAQAogICogZmlsZS4gIFRoaXMgc2F2ZXMgYSBmZXcgbWlsbGlzZWNvbmRzIHdoZW4gaW5pdGlhbGlzaW5nIGRldmljZXMgd2l0aCBsb3RzCiAgKiBvZiBNU0ktWCBpbnRlcnJ1cHRzLgogICovCi11MzIgZGVmYXVsdF9tc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCit1MzIgX19wY2lfbXNpeF9kZXNjX21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCiB7CiAJdTMyIG1hc2tfYml0cyA9IGRlc2MtPm1hc2tlZDsKIAl1bnNpZ25lZCBvZmZzZXQgPSBkZXNjLT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRSArCiAJCQkJCQlQQ0lfTVNJWF9FTlRSWV9WRUNUT1JfQ1RSTDsKKworCWlmIChwY2lfbXNpX2lnbm9yZV9tYXNrKQorCQlyZXR1cm4gMDsKKwogCW1hc2tfYml0cyAmPSB+UENJX01TSVhfRU5UUllfQ1RSTF9NQVNLQklUOwogCWlmIChmbGFnKQogCQltYXNrX2JpdHMgfD0gUENJX01TSVhfRU5UUllfQ1RSTF9NQVNLQklUOwpAQCAtMjA3LDE0ICsyNjMsOSBAQAogCXJldHVybiBtYXNrX2JpdHM7CiB9CiAKLV9fd2VhayB1MzIgYXJjaF9tc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCi17Ci0JcmV0dXJuIGRlZmF1bHRfbXNpeF9tYXNrX2lycShkZXNjLCBmbGFnKTsKLX0KLQogc3RhdGljIHZvaWQgbXNpeF9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBmbGFnKQogewotCWRlc2MtPm1hc2tlZCA9IGFyY2hfbXNpeF9tYXNrX2lycShkZXNjLCBmbGFnKTsKKwlkZXNjLT5tYXNrZWQgPSBfX3BjaV9tc2l4X2Rlc2NfbWFza19pcnEoZGVzYywgZmxhZyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1zaV9zZXRfbWFza19iaXQoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1MzIgZmxhZykKQEAgLTIzMCwxMiArMjgxLDIwIEBACiAJfQogfQogCi12b2lkIG1hc2tfbXNpX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCisvKioKKyAqIHBjaV9tc2lfbWFza19pcnEgLSBHZW5lcmljIGlycSBjaGlwIGNhbGxiYWNrIHRvIG1hc2sgUENJL01TSSBpbnRlcnJ1cHRzCisgKiBAZGF0YToJcG9pbnRlciB0byBpcnFkYXRhIGFzc29jaWF0ZWQgdG8gdGhhdCBpbnRlcnJ1cHQKKyAqLwordm9pZCBwY2lfbXNpX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAltc2lfc2V0X21hc2tfYml0KGRhdGEsIDEpOwogfQogCi12b2lkIHVubWFza19tc2lfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKKy8qKgorICogcGNpX21zaV91bm1hc2tfaXJxIC0gR2VuZXJpYyBpcnEgY2hpcCBjYWxsYmFjayB0byB1bm1hc2sgUENJL01TSSBpbnRlcnJ1cHRzCisgKiBAZGF0YToJcG9pbnRlciB0byBpcnFkYXRhIGFzc29jaWF0ZWQgdG8gdGhhdCBpbnRlcnJ1cHQKKyAqLwordm9pZCBwY2lfbXNpX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewogCW1zaV9zZXRfbWFza19iaXQoZGF0YSwgMCk7CiB9CkBAIC0yNDQsMTIgKzMwMywxMSBAQAogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KQogCQlkZWZhdWx0X3Jlc3RvcmVfbXNpX2lycShkZXYsIGVudHJ5LT5pcnEpOwotCX0KIH0KIAotdm9pZCBfX3JlYWRfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQordm9pZCBfX3BjaV9yZWFkX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZykKIHsKIAlCVUdfT04oZW50cnktPmRldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApOwogCkBAIC0yNzksMzIgKzMzNyw3IEBACiAJfQogfQogCi12b2lkIHJlYWRfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBpcnFfZ2V0X21zaV9kZXNjKGlycSk7Ci0KLQlfX3JlYWRfbXNpX21zZyhlbnRyeSwgbXNnKTsKLX0KLQotdm9pZCBfX2dldF9jYWNoZWRfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCS8qIEFzc2VydCB0aGF0IHRoZSBjYWNoZSBpcyB2YWxpZCwgYXNzdW1pbmcgdGhhdAotCSAqIHZhbGlkIG1lc3NhZ2VzIGFyZSBub3QgYWxsLXplcm9lcy4gKi8KLQlCVUdfT04oIShlbnRyeS0+bXNnLmFkZHJlc3NfaGkgfCBlbnRyeS0+bXNnLmFkZHJlc3NfbG8gfAotCQkgZW50cnktPm1zZy5kYXRhKSk7Ci0KLQkqbXNnID0gZW50cnktPm1zZzsKLX0KLQotdm9pZCBnZXRfY2FjaGVkX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKLXsKLQlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gaXJxX2dldF9tc2lfZGVzYyhpcnEpOwotCi0JX19nZXRfY2FjaGVkX21zaV9tc2coZW50cnksIG1zZyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChnZXRfY2FjaGVkX21zaV9tc2cpOwotCi12b2lkIF9fd3JpdGVfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQordm9pZCBfX3BjaV93cml0ZV9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpCiB7CiAJaWYgKGVudHJ5LT5kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwKSB7CiAJCS8qIERvbid0IHRvdWNoIHRoZSBoYXJkd2FyZSBub3cgKi8KQEAgLTM0MSwzNCArMzc0LDI3IEBACiAJZW50cnktPm1zZyA9ICptc2c7CiB9CiAKLXZvaWQgd3JpdGVfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQordm9pZCBwY2lfd3JpdGVfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBpcnFfZ2V0X21zaV9kZXNjKGlycSk7CiAKLQlfX3dyaXRlX21zaV9tc2coZW50cnksIG1zZyk7CisJX19wY2lfd3JpdGVfbXNpX21zZyhlbnRyeSwgbXNnKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHdyaXRlX21zaV9tc2cpOworRVhQT1JUX1NZTUJPTF9HUEwocGNpX3dyaXRlX21zaV9tc2cpOwogCiBzdGF0aWMgdm9pZCBmcmVlX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeSwgKnRtcDsKIAlzdHJ1Y3QgYXR0cmlidXRlICoqbXNpX2F0dHJzOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZfYXR0cjsKLQlpbnQgY291bnQgPSAwOworCWludCBpLCBjb3VudCA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewotCQlpbnQgaSwgbnZlYzsKLQkJaWYgKCFlbnRyeS0+aXJxKQotCQkJY29udGludWU7Ci0JCWlmIChlbnRyeS0+bnZlY191c2VkKQotCQkJbnZlYyA9IGVudHJ5LT5udmVjX3VzZWQ7Ci0JCWVsc2UKLQkJCW52ZWMgPSAxIDw8IGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlOwotCQlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKQotCQkJQlVHX09OKGlycV9oYXNfYWN0aW9uKGVudHJ5LT5pcnEgKyBpKSk7Ci0JfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KQorCQlpZiAoZW50cnktPmlycSkKKwkJCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnZlY191c2VkOyBpKyspCisJCQkJQlVHX09OKGlycV9oYXNfYWN0aW9uKGVudHJ5LT5pcnEgKyBpKSk7CiAKLQlhcmNoX3RlYXJkb3duX21zaV9pcnFzKGRldik7CisJcGNpX21zaV90ZWFyZG93bl9tc2lfaXJxcyhkZXYpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CiAJCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5pc19tc2l4KSB7CkBAIC00NTEsOSArNDc3LDggQEAKIAkJCQlQQ0lfTVNJWF9GTEFHU19FTkFCTEUgfCBQQ0lfTVNJWF9GTEFHU19NQVNLQUxMKTsKIAogCWFyY2hfcmVzdG9yZV9tc2lfaXJxcyhkZXYpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpCiAJCW1zaXhfbWFza19pcnEoZW50cnksIGVudHJ5LT5tYXNrZWQpOwotCX0KIAogCW1zaXhfY2xlYXJfYW5kX3NldF9jdHJsKGRldiwgUENJX01TSVhfRkxBR1NfTUFTS0FMTCwgMCk7CiB9CkBAIC00OTcsOSArNTIyLDggQEAKIAlpbnQgY291bnQgPSAwOwogCiAJLyogRGV0ZXJtaW5lIGhvdyBtYW55IG1zaSBlbnRyaWVzIHdlIGhhdmUgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpCiAJCSsrbnVtX21zaTsKLQl9CiAJaWYgKCFudW1fbXNpKQogCQlyZXR1cm4gMDsKIApAQCAtNTU5LDcgKzU4Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBtc2lfZGVzYyAqbXNpX3NldHVwX2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgc3RydWN0IG1zaV9kZXNjICptc2lfc2V0dXBfZW50cnkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG52ZWMpCiB7CiAJdTE2IGNvbnRyb2w7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKQEAgLTU3Nyw2ICs2MDEsOCBAQAogCWVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXQJPSAhIShjb250cm9sICYgUENJX01TSV9GTEFHU19NQVNLQklUKTsKIAllbnRyeS0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycQk9IGRldi0+aXJxOwkvKiBTYXZlIElPQVBJQyBJUlEgKi8KIAllbnRyeS0+bXNpX2F0dHJpYi5tdWx0aV9jYXAJPSAoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfUU1BU0spID4+IDE7CisJZW50cnktPm1zaV9hdHRyaWIubXVsdGlwbGUJPSBpbG9nMihfX3JvdW5kdXBfcG93X29mX3R3byhudmVjKSk7CisJZW50cnktPm52ZWNfdXNlZAkJPSBudmVjOwogCiAJaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTXzY0QklUKQogCQllbnRyeS0+bWFza19wb3MgPSBkZXYtPm1zaV9jYXAgKyBQQ0lfTVNJX01BU0tfNjQ7CkBAIC01OTAsNiArNjE2LDIwIEBACiAJcmV0dXJuIGVudHJ5OwogfQogCitzdGF0aWMgaW50IG1zaV92ZXJpZnlfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgeworCQlpZiAoIWRldi0+bm9fNjRiaXRfbXNpIHx8ICFlbnRyeS0+bXNnLmFkZHJlc3NfaGkpCisJCQljb250aW51ZTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJEZXZpY2UgaGFzIGJyb2tlbiA2NC1iaXQgTVNJIGJ1dCBhcmNoIgorCQkJIiB0cmllZCB0byBhc3NpZ24gb25lIGFib3ZlIDRHXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCiAvKioKICAqIG1zaV9jYXBhYmlsaXR5X2luaXQgLSBjb25maWd1cmUgZGV2aWNlJ3MgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlCiAgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBwY2lfZGV2IGRhdGEgc3RydWN0dXJlIG9mIE1TSSBkZXZpY2UgZnVuY3Rpb24KQEAgLTYwOSw3ICs2NDksNyBAQAogCiAJbXNpX3NldF9lbmFibGUoZGV2LCAwKTsJLyogRGlzYWJsZSBNU0kgZHVyaW5nIHNldCB1cCAqLwogCi0JZW50cnkgPSBtc2lfc2V0dXBfZW50cnkoZGV2KTsKKwllbnRyeSA9IG1zaV9zZXR1cF9lbnRyeShkZXYsIG52ZWMpOwogCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC02MjAsNyArNjYwLDE0IEBACiAJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZkZXYtPm1zaV9saXN0KTsKIAogCS8qIENvbmZpZ3VyZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8KLQlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0kpOworCXJldCA9IHBjaV9tc2lfc2V0dXBfbXNpX2lycXMoZGV2LCBudmVjLCBQQ0lfQ0FQX0lEX01TSSk7CisJaWYgKHJldCkgeworCQltc2lfbWFza19pcnEoZW50cnksIG1hc2ssIH5tYXNrKTsKKwkJZnJlZV9tc2lfaXJxcyhkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG1zaV92ZXJpZnlfZW50cmllcyhkZXYpOwogCWlmIChyZXQpIHsKIAkJbXNpX21hc2tfaXJxKGVudHJ5LCBtYXNrLCB+bWFzayk7CiAJCWZyZWVfbXNpX2lycXMoZGV2KTsKQEAgLTY4MCw2ICs3MjcsNyBAQAogCQllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9ucgk9IGVudHJpZXNbaV0uZW50cnk7CiAJCWVudHJ5LT5tc2lfYXR0cmliLmRlZmF1bHRfaXJxCT0gZGV2LT5pcnE7CiAJCWVudHJ5LT5tYXNrX2Jhc2UJCT0gYmFzZTsKKwkJZW50cnktPm52ZWNfdXNlZAkJPSAxOwogCiAJCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmZGV2LT5tc2lfbGlzdCk7CiAJfQpAQCAtNjk4LDcgKzc0Niw2IEBACiAJCQkJCQlQQ0lfTVNJWF9FTlRSWV9WRUNUT1JfQ1RSTDsKIAogCQllbnRyaWVzW2ldLnZlY3RvciA9IGVudHJ5LT5pcnE7Ci0JCWlycV9zZXRfbXNpX2Rlc2MoZW50cnktPmlycSwgZW50cnkpOwogCQllbnRyeS0+bWFza2VkID0gcmVhZGwoZW50cnktPm1hc2tfYmFzZSArIG9mZnNldCk7CiAJCW1zaXhfbWFza19pcnEoZW50cnksIDEpOwogCQlpKys7CkBAIC03MzUsMTAgKzc4MiwxNSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0lYKTsKKwlyZXQgPSBwY2lfbXNpX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0lYKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9hdmFpbDsKIAorCS8qIENoZWNrIGlmIGFsbCBNU0kgZW50cmllcyBob25vciBkZXZpY2UgcmVzdHJpY3Rpb25zICovCisJcmV0ID0gbXNpX3ZlcmlmeV9lbnRyaWVzKGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKwogCS8qCiAJICogU29tZSBkZXZpY2VzIHJlcXVpcmUgTVNJLVggdG8gYmUgZW5hYmxlZCBiZWZvcmUgd2UgY2FuIHRvdWNoIHRoZQogCSAqIE1TSS1YIHJlZ2lzdGVycy4gIFdlIG5lZWQgdG8gbWFzayBhbGwgdGhlIHZlY3RvcnMgdG8gcHJldmVudApAQCAtODY5LDcgKzkyMSw3IEBACiAJLyogUmV0dXJuIHRoZSBkZXZpY2Ugd2l0aCBNU0kgdW5tYXNrZWQgYXMgaW5pdGlhbCBzdGF0ZXMgKi8KIAltYXNrID0gbXNpX21hc2soZGVzYy0+bXNpX2F0dHJpYi5tdWx0aV9jYXApOwogCS8qIEtlZXAgY2FjaGVkIHN0YXRlIHRvIGJlIHJlc3RvcmVkICovCi0JYXJjaF9tc2lfbWFza19pcnEoZGVzYywgbWFzaywgfm1hc2spOworCV9fcGNpX21zaV9kZXNjX21hc2tfaXJxKGRlc2MsIG1hc2ssIH5tYXNrKTsKIAogCS8qIFJlc3RvcmUgZGV2LT5pcnEgdG8gaXRzIGRlZmF1bHQgcGluLWFzc2VydGlvbiBpcnEgKi8KIAlkZXYtPmlycSA9IGRlc2MtPm1zaV9hdHRyaWIuZGVmYXVsdF9pcnE7CkBAIC05NjcsNyArMTAxOSw3IEBACiAJLyogUmV0dXJuIHRoZSBkZXZpY2Ugd2l0aCBNU0ktWCBtYXNrZWQgYXMgaW5pdGlhbCBzdGF0ZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewogCQkvKiBLZWVwIGNhY2hlZCBzdGF0ZXMgdG8gYmUgcmVzdG9yZWQgKi8KLQkJYXJjaF9tc2l4X21hc2tfaXJxKGVudHJ5LCAxKTsKKwkJX19wY2lfbXNpeF9kZXNjX21hc2tfaXJxKGVudHJ5LCAxKTsKIAl9CiAKIAltc2l4X2NsZWFyX2FuZF9zZXRfY3RybChkZXYsIFBDSV9NU0lYX0ZMQUdTX0VOQUJMRSwgMCk7CkBAIC0xMTEyLDMgKzExNjQsMTk3IEBACiAJcmV0dXJuIG52ZWM7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaV9lbmFibGVfbXNpeF9yYW5nZSk7CisKKyNpZmRlZiBDT05GSUdfUENJX01TSV9JUlFfRE9NQUlOCisvKioKKyAqIHBjaV9tc2lfZG9tYWluX3dyaXRlX21zZyAtIEhlbHBlciB0byB3cml0ZSBNU0kgbWVzc2FnZSB0byBQQ0kgY29uZmlnIHNwYWNlCisgKiBAaXJxX2RhdGE6CVBvaW50ZXIgdG8gaW50ZXJydXB0IGRhdGEgb2YgdGhlIE1TSSBpbnRlcnJ1cHQKKyAqIEBtc2c6CVBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UKKyAqLwordm9pZCBwY2lfbXNpX2RvbWFpbl93cml0ZV9tc2coc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MgPSBpcnFfZGF0YS0+bXNpX2Rlc2M7CisKKwkvKgorCSAqIEZvciBNU0ktWCBkZXNjLT5pcnEgaXMgYWx3YXlzIGVxdWFsIHRvIGlycV9kYXRhLT5pcnEuIEZvcgorCSAqIE1TSSBvbmx5IHRoZSBmaXJzdCBpbnRlcnJ1cHQgb2YgTVVMVEkgTVNJIHBhc3NlcyB0aGUgdGVzdC4KKwkgKi8KKwlpZiAoZGVzYy0+aXJxID09IGlycV9kYXRhLT5pcnEpCisJCV9fcGNpX3dyaXRlX21zaV9tc2coZGVzYywgbXNnKTsKK30KKworLyoqCisgKiBwY2lfbXNpX2RvbWFpbl9jYWxjX2h3aXJxIC0gR2VuZXJhdGUgYSB1bmlxdWUgSUQgZm9yIGFuIE1TSSBzb3VyY2UKKyAqIEBkZXY6CVBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2UKKyAqIEBkZXNjOglQb2ludGVyIHRvIHRoZSBtc2kgZGVzY3JpcHRvcgorICoKKyAqIFRoZSBJRCBudW1iZXIgaXMgb25seSB1c2VkIHdpdGhpbiB0aGUgaXJxZG9tYWluLgorICovCitpcnFfaHdfbnVtYmVyX3QgcGNpX21zaV9kb21haW5fY2FsY19od2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKK3sKKwlyZXR1cm4gKGlycV9od19udW1iZXJfdClkZXNjLT5tc2lfYXR0cmliLmVudHJ5X25yIHwKKwkJUENJX0RFVklEKGRldi0+YnVzLT5udW1iZXIsIGRldi0+ZGV2Zm4pIDw8IDExIHwKKwkJKHBjaV9kb21haW5fbnIoZGV2LT5idXMpICYgMHhGRkZGRkZGRikgPDwgMjc7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbXNpX2Rlc2NfaXNfbXVsdGlfbXNpKHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKK3sKKwlyZXR1cm4gIWRlc2MtPm1zaV9hdHRyaWIuaXNfbXNpeCAmJiBkZXNjLT5udmVjX3VzZWQgPiAxOworfQorCisvKioKKyAqIHBjaV9tc2lfZG9tYWluX2NoZWNrX2NhcCAtIFZlcmlmeSB0aGF0IEBkb21haW4gc3VwcG9ydHMgdGhlIGNhcGFiaWxpdGllcyBmb3IgQGRldgorICogQGRvbWFpbjoJVGhlIGludGVycnVwdCBkb21haW4gdG8gY2hlY2sKKyAqIEBpbmZvOglUaGUgZG9tYWluIGluZm8gZm9yIHZlcmlmaWNhdGlvbgorICogQGRldjoJVGhlIGRldmljZSB0byBjaGVjaworICoKKyAqIFJldHVybnM6CisgKiAgMCBpZiB0aGUgZnVuY3Rpb25hbGl0eSBpcyBzdXBwb3J0ZWQKKyAqICAxIGlmIE11bHRpIE1TSSBpcyByZXF1ZXN0ZWQsIGJ1dCB0aGUgZG9tYWluIGRvZXMgbm90IHN1cHBvcnQgaXQKKyAqICAtRU5PVFNVUFAgb3RoZXJ3aXNlCisgKi8KK2ludCBwY2lfbXNpX2RvbWFpbl9jaGVja19jYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCSAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtc2lfZGVzYyAqZGVzYyA9IGZpcnN0X3BjaV9tc2lfZW50cnkodG9fcGNpX2RldihkZXYpKTsKKworCS8qIFNwZWNpYWwgaGFuZGxpbmcgdG8gc3VwcG9ydCBwY2lfZW5hYmxlX21zaV9yYW5nZSgpICovCisJaWYgKHBjaV9tc2lfZGVzY19pc19tdWx0aV9tc2koZGVzYykgJiYKKwkgICAgIShpbmZvLT5mbGFncyAmIE1TSV9GTEFHX01VTFRJX1BDSV9NU0kpKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChkZXNjLT5tc2lfYXR0cmliLmlzX21zaXggJiYgIShpbmZvLT5mbGFncyAmIE1TSV9GTEFHX1BDSV9NU0lYKSkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV9tc2lfZG9tYWluX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIGludCBlcnJvcikKK3sKKwkvKiBTcGVjaWFsIGhhbmRsaW5nIHRvIHN1cHBvcnQgcGNpX2VuYWJsZV9tc2lfcmFuZ2UoKSAqLworCWlmIChwY2lfbXNpX2Rlc2NfaXNfbXVsdGlfbXNpKGRlc2MpICYmIGVycm9yID09IC1FTk9TUEMpCisJCXJldHVybiAxOworCisJcmV0dXJuIGVycm9yOworfQorCisjaWZkZWYgR0VORVJJQ19NU0lfRE9NQUlOX09QUworc3RhdGljIHZvaWQgcGNpX21zaV9kb21haW5fc2V0X2Rlc2MobXNpX2FsbG9jX2luZm9fdCAqYXJnLAorCQkJCSAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCit7CisJYXJnLT5kZXNjID0gZGVzYzsKKwlhcmctPmh3aXJxID0gcGNpX21zaV9kb21haW5fY2FsY19od2lycShtc2lfZGVzY190b19wY2lfZGV2KGRlc2MpLAorCQkJCQkgICAgICAgZGVzYyk7Cit9CisjZWxzZQorI2RlZmluZSBwY2lfbXNpX2RvbWFpbl9zZXRfZGVzYwkJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgcGNpX21zaV9kb21haW5fb3BzX2RlZmF1bHQgPSB7CisJLnNldF9kZXNjCT0gcGNpX21zaV9kb21haW5fc2V0X2Rlc2MsCisJLm1zaV9jaGVjawk9IHBjaV9tc2lfZG9tYWluX2NoZWNrX2NhcCwKKwkuaGFuZGxlX2Vycm9yCT0gcGNpX21zaV9kb21haW5faGFuZGxlX2Vycm9yLAorfTsKKworc3RhdGljIHZvaWQgcGNpX21zaV9kb21haW5fdXBkYXRlX2RvbV9vcHMoc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgKm9wcyA9IGluZm8tPm9wczsKKworCWlmIChvcHMgPT0gTlVMTCkgeworCQlpbmZvLT5vcHMgPSAmcGNpX21zaV9kb21haW5fb3BzX2RlZmF1bHQ7CisJfSBlbHNlIHsKKwkJaWYgKG9wcy0+c2V0X2Rlc2MgPT0gTlVMTCkKKwkJCW9wcy0+c2V0X2Rlc2MgPSBwY2lfbXNpX2RvbWFpbl9zZXRfZGVzYzsKKwkJaWYgKG9wcy0+bXNpX2NoZWNrID09IE5VTEwpCisJCQlvcHMtPm1zaV9jaGVjayA9IHBjaV9tc2lfZG9tYWluX2NoZWNrX2NhcDsKKwkJaWYgKG9wcy0+aGFuZGxlX2Vycm9yID09IE5VTEwpCisJCQlvcHMtPmhhbmRsZV9lcnJvciA9IHBjaV9tc2lfZG9tYWluX2hhbmRsZV9lcnJvcjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9tc2lfZG9tYWluX3VwZGF0ZV9jaGlwX29wcyhzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvKQoreworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CisKKwlCVUdfT04oIWNoaXApOworCWlmICghY2hpcC0+aXJxX3dyaXRlX21zaV9tc2cpCisJCWNoaXAtPmlycV93cml0ZV9tc2lfbXNnID0gcGNpX21zaV9kb21haW5fd3JpdGVfbXNnOworfQorCisvKioKKyAqIHBjaV9tc2lfY3JlYXRlX2lycV9kb21haW4gLSBDcmVhdCBhIE1TSSBpbnRlcnJ1cHQgZG9tYWluCisgKiBAbm9kZToJT3B0aW9uYWwgZGV2aWNlLXRyZWUgbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEBpbmZvOglNU0kgZG9tYWluIGluZm8KKyAqIEBwYXJlbnQ6CVBhcmVudCBpcnEgZG9tYWluCisgKgorICogVXBkYXRlcyB0aGUgZG9tYWluIGFuZCBjaGlwIG9wcyBhbmQgY3JlYXRlcyBhIE1TSSBpbnRlcnJ1cHQgZG9tYWluLgorICoKKyAqIFJldHVybnM6CisgKiBBIGRvbWFpbiBwb2ludGVyIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitzdHJ1Y3QgaXJxX2RvbWFpbiAqcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkJICAgICBzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50KQoreworCWlmIChpbmZvLT5mbGFncyAmIE1TSV9GTEFHX1VTRV9ERUZfRE9NX09QUykKKwkJcGNpX21zaV9kb21haW5fdXBkYXRlX2RvbV9vcHMoaW5mbyk7CisJaWYgKGluZm8tPmZsYWdzICYgTVNJX0ZMQUdfVVNFX0RFRl9DSElQX09QUykKKwkJcGNpX21zaV9kb21haW5fdXBkYXRlX2NoaXBfb3BzKGluZm8pOworCisJcmV0dXJuIG1zaV9jcmVhdGVfaXJxX2RvbWFpbihub2RlLCBpbmZvLCBwYXJlbnQpOworfQorCisvKioKKyAqIHBjaV9tc2lfZG9tYWluX2FsbG9jX2lycXMgLSBBbGxvY2F0ZSBpbnRlcnJ1cHRzIGZvciBAZGV2IGluIEBkb21haW4KKyAqIEBkb21haW46CVRoZSBpbnRlcnJ1cHQgZG9tYWluIHRvIGFsbG9jYXRlIGZyb20KKyAqIEBkZXY6CVRoZSBkZXZpY2UgZm9yIHdoaWNoIHRvIGFsbG9jYXRlCisgKiBAbnZlYzoJVGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIHRvIGFsbG9jYXRlCisgKiBAdHlwZToJVW51c2VkIHRvIGFsbG93IHNpbXBsZXIgbWlncmF0aW9uIGZyb20gdGhlIGFyY2hfWFhYIGludGVyZmFjZXMKKyAqCisgKiBSZXR1cm5zOgorICogQSB2aXJ0dWFsIGludGVycnVwdCBudW1iZXIgb3IgYW4gZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLworaW50IHBjaV9tc2lfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCSAgICAgIGludCBudmVjLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gbXNpX2RvbWFpbl9hbGxvY19pcnFzKGRvbWFpbiwgJmRldi0+ZGV2LCBudmVjKTsKK30KKworLyoqCisgKiBwY2lfbXNpX2RvbWFpbl9mcmVlX2lycXMgLSBGcmVlIGludGVycnVwdHMgZm9yIEBkZXYgaW4gQGRvbWFpbgorICogQGRvbWFpbjoJVGhlIGludGVycnVwdCBkb21haW4KKyAqIEBkZXY6CVRoZSBkZXZpY2UgZm9yIHdoaWNoIHRvIGZyZWUgaW50ZXJydXB0cworICovCit2b2lkIHBjaV9tc2lfZG9tYWluX2ZyZWVfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCW1zaV9kb21haW5fZnJlZV9pcnFzKGRvbWFpbiwgJmRldi0+ZGV2KTsKK30KKworLyoqCisgKiBwY2lfbXNpX2NyZWF0ZV9kZWZhdWx0X2lycV9kb21haW4gLSBDcmVhdGUgYSBkZWZhdWx0IE1TSSBpbnRlcnJ1cHQgZG9tYWluCisgKiBAbm9kZToJT3B0aW9uYWwgZGV2aWNlLXRyZWUgbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEBpbmZvOglNU0kgZG9tYWluIGluZm8KKyAqIEBwYXJlbnQ6CVBhcmVudCBpcnEgZG9tYWluCisgKgorICogUmV0dXJuczogQSBkb21haW4gcG9pbnRlciBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS4gSWYgc3VjY2Vzc2Z1bAorICogdGhlIGRlZmF1bHQgUENJL01TSSBpcnFkb21haW4gcG9pbnRlciBpcyB1cGRhdGVkLgorICovCitzdHJ1Y3QgaXJxX2RvbWFpbiAqcGNpX21zaV9jcmVhdGVfZGVmYXVsdF9pcnFfZG9tYWluKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywgc3RydWN0IGlycV9kb21haW4gKnBhcmVudCkKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworCisJbXV0ZXhfbG9jaygmcGNpX21zaV9kb21haW5fbG9jayk7CisJaWYgKHBjaV9tc2lfZGVmYXVsdF9kb21haW4pIHsKKwkJcHJfZXJyKCJQQ0k6IGRlZmF1bHQgaXJxIGRvbWFpbiBmb3IgUENJIE1TSSBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuXG4iKTsKKwkJZG9tYWluID0gTlVMTDsKKwl9IGVsc2UgeworCQlkb21haW4gPSBwY2lfbXNpX2NyZWF0ZV9pcnFfZG9tYWluKG5vZGUsIGluZm8sIHBhcmVudCk7CisJCXBjaV9tc2lfZGVmYXVsdF9kb21haW4gPSBkb21haW47CisJfQorCW11dGV4X3VubG9jaygmcGNpX21zaV9kb21haW5fbG9jayk7CisKKwlyZXR1cm4gZG9tYWluOworfQorI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJX0lSUV9ET01BSU4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggMDYwMTg5MC4uNGEzOTAyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTYsNiArNiw4IEBACiAKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHBjaWVfbGlua19zcGVlZFtdOwogCitib29sIHBjaWVfY2FwX2hhc19sbmtjdGwoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldik7CisKIC8qIEZ1bmN0aW9ucyBpbnRlcm5hbCB0byB0aGUgUENJIGNvcmUgY29kZSAqLwogCiBpbnQgcGNpX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggNWVkOTkzMC4uYzhjYTk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYworKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCkBAIC00MDcsMTUgKzQwNywxNiBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKIAl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKLQl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OworCXU2NCBiYXNlNjQsIGxpbWl0NjQ7CisJZG1hX2FkZHJfdCBiYXNlLCBsaW1pdDsKIAlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzJdOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1BSRUZfTUVNT1JZX0JBU0UsICZtZW1fYmFzZV9sbyk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfUFJFRl9NRU1PUllfTElNSVQsICZtZW1fbGltaXRfbG8pOwotCWJhc2UgPSAoKHVuc2lnbmVkIGxvbmcpIG1lbV9iYXNlX2xvICYgUENJX1BSRUZfUkFOR0VfTUFTSykgPDwgMTY7Ci0JbGltaXQgPSAoKHVuc2lnbmVkIGxvbmcpIG1lbV9saW1pdF9sbyAmIFBDSV9QUkVGX1JBTkdFX01BU0spIDw8IDE2OworCWJhc2U2NCA9IChtZW1fYmFzZV9sbyAmIFBDSV9QUkVGX1JBTkdFX01BU0spIDw8IDE2OworCWxpbWl0NjQgPSAobWVtX2xpbWl0X2xvICYgUENJX1BSRUZfUkFOR0VfTUFTSykgPDwgMTY7CiAKIAlpZiAoKG1lbV9iYXNlX2xvICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSA9PSBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSB7CiAJCXUzMiBtZW1fYmFzZV9oaSwgbWVtX2xpbWl0X2hpOwpAQCAtNDI5LDE3ICs0MzAsMjAgQEAKIAkJICogdGhpcywganVzdCBhc3N1bWUgdGhleSBhcmUgbm90IGJlaW5nIHVzZWQuCiAJCSAqLwogCQlpZiAobWVtX2Jhc2VfaGkgPD0gbWVtX2xpbWl0X2hpKSB7Ci0jaWYgQklUU19QRVJfTE9ORyA9PSA2NAotCQkJYmFzZSB8PSAoKHVuc2lnbmVkIGxvbmcpIG1lbV9iYXNlX2hpKSA8PCAzMjsKLQkJCWxpbWl0IHw9ICgodW5zaWduZWQgbG9uZykgbWVtX2xpbWl0X2hpKSA8PCAzMjsKLSNlbHNlCi0JCQlpZiAobWVtX2Jhc2VfaGkgfHwgbWVtX2xpbWl0X2hpKSB7Ci0JCQkJZGV2X2VycigmZGV2LT5kZXYsICJjYW4ndCBoYW5kbGUgNjQtYml0IGFkZHJlc3Mgc3BhY2UgZm9yIGJyaWRnZVxuIik7Ci0JCQkJcmV0dXJuOwotCQkJfQotI2VuZGlmCisJCQliYXNlNjQgfD0gKHU2NCkgbWVtX2Jhc2VfaGkgPDwgMzI7CisJCQlsaW1pdDY0IHw9ICh1NjQpIG1lbV9saW1pdF9oaSA8PCAzMjsKIAkJfQogCX0KKworCWJhc2UgPSAoZG1hX2FkZHJfdCkgYmFzZTY0OworCWxpbWl0ID0gKGRtYV9hZGRyX3QpIGxpbWl0NjQ7CisKKwlpZiAoYmFzZSAhPSBiYXNlNjQpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJjYW4ndCBoYW5kbGUgYnJpZGdlIHdpbmRvdyBhYm92ZSA0R0IgKGJ1cyBhZGRyZXNzICUjMDEwbGx4KVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGJhc2U2NCk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKG1lbV9iYXNlX2xvICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSB8CiAJCQkJCSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CkBAIC0xMzIzLDcgKzEzMjcsNyBAQAogCQkJfmhwcC0+cGNpX2V4cF9kZXZjdGxfYW5kLCBocHAtPnBjaV9leHBfZGV2Y3RsX29yKTsKIAogCS8qIEluaXRpYWxpemUgTGluayBDb250cm9sIFJlZ2lzdGVyICovCi0JaWYgKGRldi0+c3Vib3JkaW5hdGUpCisJaWYgKHBjaWVfY2FwX2hhc19sbmtjdGwoZGV2KSkKIAkJcGNpZV9jYXBhYmlsaXR5X2NsZWFyX2FuZF9zZXRfd29yZChkZXYsIFBDSV9FWFBfTE5LQ1RMLAogCQkJfmhwcC0+cGNpX2V4cF9sbmtjdGxfYW5kLCBocHAtPnBjaV9leHBfbG5rY3RsX29yKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LW9tYXAtdXNiMi5jIGIvZHJpdmVycy9waHkvcGh5LW9tYXAtdXNiMi5jCmluZGV4IDhjODQyOTguLmYwOTE1NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L3BoeS1vbWFwLXVzYjIuYworKysgYi9kcml2ZXJzL3BoeS9waHktb21hcC11c2IyLmMKQEAgLTI1OCwxNCArMjU4LDE2IEBACiAJb3RnLT5waHkJCT0gJnBoeS0+cGh5OwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGh5KTsKKwlwbV9ydW50aW1lX2VuYWJsZShwaHktPmRldik7CiAKIAlnZW5lcmljX3BoeSA9IGRldm1fcGh5X2NyZWF0ZShwaHktPmRldiwgTlVMTCwgJm9wcywgTlVMTCk7Ci0JaWYgKElTX0VSUihnZW5lcmljX3BoeSkpCisJaWYgKElTX0VSUihnZW5lcmljX3BoeSkpIHsKKwkJcG1fcnVudGltZV9kaXNhYmxlKHBoeS0+ZGV2KTsKIAkJcmV0dXJuIFBUUl9FUlIoZ2VuZXJpY19waHkpOworCX0KIAogCXBoeV9zZXRfZHJ2ZGF0YShnZW5lcmljX3BoeSwgcGh5KTsKIAotCXBtX3J1bnRpbWVfZW5hYmxlKHBoeS0+ZGV2KTsKIAlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihwaHktPmRldiwKIAkJCW9mX3BoeV9zaW1wbGVfeGxhdGUpOwogCWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYmF5dHJhaWwuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWJheXRyYWlsLmMKaW5kZXggZTEyZTViMC4uOWRjMzgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYmF5dHJhaWwuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1iYXl0cmFpbC5jCkBAIC0yMjcsMTAgKzIyNywxNCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2Zy0+bG9jaywgZmxhZ3MpOwogCXZhbHVlID0gcmVhZGwocmVnKTsKIAorCVdBUk4odmFsdWUgJiBCWVRfRElSRUNUX0lSUV9FTiwKKwkJIkJhZCBwYWQgY29uZmlnIGZvciBpbyBtb2RlLCBmb3JjZSBkaXJlY3RfaXJxX2VuIGJpdCBjbGVhcmluZyIpOworCiAJLyogRm9yIGxldmVsIHRyaWdnZXMgdGhlIEJZVF9UUklHX1BPUyBhbmQgQllUX1RSSUdfTkVHIGJpdHMKIAkgKiBhcmUgdXNlZCB0byBpbmRpY2F0ZSBoaWdoIGFuZCBsb3cgbGV2ZWwgdHJpZ2dlcmluZwogCSAqLwotCXZhbHVlICY9IH4oQllUX1RSSUdfUE9TIHwgQllUX1RSSUdfTkVHIHwgQllUX1RSSUdfTFZMKTsKKwl2YWx1ZSAmPSB+KEJZVF9ESVJFQ1RfSVJRX0VOIHwgQllUX1RSSUdfUE9TIHwgQllUX1RSSUdfTkVHIHwKKwkJICAgQllUX1RSSUdfTFZMKTsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKQEAgLTMxOCw3ICszMjIsNyBAQAogCQkiUG90ZW50aWFsIEVycm9yOiBTZXR0aW5nIEdQSU8gd2l0aCBkaXJlY3RfaXJxX2VuIHRvIG91dHB1dCIpOwogCiAJcmVnX3ZhbCA9IHJlYWRsKHJlZykgfCBCWVRfRElSX01BU0s7Ci0JcmVnX3ZhbCAmPSB+QllUX09VVFBVVF9FTjsKKwlyZWdfdmFsICY9IH4oQllUX09VVFBVVF9FTiB8IEJZVF9JTlBVVF9FTik7CiAKIAlpZiAodmFsdWUpCiAJCXdyaXRlbChyZWdfdmFsIHwgQllUX0xFVkVMLCByZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggNGRjZmI3MS4uYTJlYWJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC0yMDIsNiArMjAyLDcgQEAKIGNvbmZpZyBIUF9BQ0NFTAogCXRyaXN0YXRlICJIUCBsYXB0b3AgYWNjZWxlcm9tZXRlciIKIAlkZXBlbmRzIG9uIElOUFVUICYmIEFDUEkKKwlkZXBlbmRzIG9uIFNFUklPX0k4MDQyCiAJc2VsZWN0IFNFTlNPUlNfTElTM0xWMDJECiAJc2VsZWN0IE5FV19MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCmluZGV4IDk2YTBiNzUuLjI2YzRmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwpAQCAtNTc5LDYgKzU3OSwxNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBc3BpcmUgNTc0MSIpLAogCQl9LAogCX0sCisJeworCQkvKgorCQkgKiBOb3RlIG5vIHZpZGVvX3NldF9iYWNrbGlnaHRfdmlkZW9fdmVuZG9yLCB3ZSBtdXN0IHVzZSB0aGUKKwkJICogYWNlciBpbnRlcmZhY2UsIGFzIHRoZXJlIGlzIG5vIG5hdGl2ZSBiYWNrbGlnaHQgaW50ZXJmYWNlLgorCQkgKi8KKwkJLmlkZW50ID0gIkFjZXIgS0FWODAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiS0FWODAiKSwKKwkJfSwKKwl9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLW5iLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1uYi13bWkuYwppbmRleCAzYTQ5NTFmLi5jMWE2Y2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLW5iLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbmItd21pLmMKQEAgLTE4Miw2ICsxODIsMTUgQEAKIAl9LAogCXsKIAkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCisJCS5pZGVudCA9ICJBU1VTVGVLIENPTVBVVEVSIElOQy4gWDU1MFZCIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENPTVBVVEVSIElOQy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiWDU1MFZCIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YSA9ICZxdWlya19hc3VzX3dhcGY0LAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKIAkJLmlkZW50ID0gIkFTVVNUZUsgQ09NUFVURVIgSU5DLiBYNTVBIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENPTVBVVEVSIElOQy4iKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwX2FjY2VsLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocF9hY2NlbC5jCmluZGV4IDEzZTE0ZWMuLjZiZWM3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwX2FjY2VsLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHBfYWNjZWwuYwpAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvaTgwNDIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgogI2luY2x1ZGUgIi4uLy4uL21pc2MvbGlzM2x2MDJkL2xpczNsdjAyZC5oIgogCiAjZGVmaW5lIERSSVZFUl9OQU1FICAgICAiaHBfYWNjZWwiCkBAIC03Myw2ICs3NSwxMyBAQAogCiAvKiBIUC1zcGVjaWZpYyBhY2NlbGVyb21ldGVyIGRyaXZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLyogZTAgMjUsIGUwIDI2LCBlMCAyNywgZTAgMjggYXJlIHNjYW4gY29kZXMgdGhhdCB0aGUgYWNjZWxlcm9tZXRlciB3aXRoIGFjcGkgaWQKKyAqIEhQUTYwMDAgc2VuZHMgdGhyb3VnaCB0aGUga2V5Ym9hcmQgYnVzICovCisjZGVmaW5lIEFDQ0VMXzEgMHgyNQorI2RlZmluZSBBQ0NFTF8yIDB4MjYKKyNkZWZpbmUgQUNDRUxfMyAweDI3CisjZGVmaW5lIEFDQ0VMXzQgMHgyOAorCiAvKiBGb3IgYXV0b21hdGljIGluc2VydGlvbiBvZiB0aGUgbW9kdWxlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGxpczNsdjAyZF9kZXZpY2VfaWRzW10gPSB7CiAJeyJIUFEwMDA0IiwgMH0sIC8qIEhQIE1vYmlsZSBEYXRhIFByb3RlY3Rpb24gU3lzdGVtIFBOUCAqLwpAQCAtMjk0LDYgKzMwMywzNSBAQAogCQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBFcnJvciBnZXR0aW5nIHJlc291cmNlc1xuIik7CiB9CiAKK3N0YXRpYyBib29sIGhwX2FjY2VsX2k4MDQyX2ZpbHRlcih1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGNoYXIgc3RyLAorCQkJCSAgc3RydWN0IHNlcmlvICpwb3J0KQoreworCXN0YXRpYyBib29sIGV4dGVuZGVkOworCisJaWYgKHN0ciAmIEk4MDQyX1NUUl9BVVhEQVRBKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZGF0YSA9PSAweGUwKSB7CisJCWV4dGVuZGVkID0gdHJ1ZTsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlIGlmICh1bmxpa2VseShleHRlbmRlZCkpIHsKKwkJZXh0ZW5kZWQgPSBmYWxzZTsKKworCQlzd2l0Y2ggKGRhdGEpIHsKKwkJY2FzZSBBQ0NFTF8xOgorCQljYXNlIEFDQ0VMXzI6CisJCWNhc2UgQUNDRUxfMzoKKwkJY2FzZSBBQ0NFTF80OgorCQkJcmV0dXJuIHRydWU7CisJCWRlZmF1bHQ6CisJCQlzZXJpb19pbnRlcnJ1cHQocG9ydCwgMHhlMCwgMCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBpbnQgbGlzM2x2MDJkX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgcmV0OwpAQCAtMzI2LDYgKzM2NCwxMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKiBmaWx0ZXIgdG8gcmVtb3ZlIEhQUTYwMDAgYWNjZWxlcm9tZXRlciBkYXRhCisJICogZnJvbSBrZXlib2FyZCBidXMgc3RyZWFtICovCisJaWYgKHN0cnN0cihkZXZfbmFtZSgmZGV2aWNlLT5kZXYpLCAiSFBRNjAwMCIpKQorCQlpODA0Ml9pbnN0YWxsX2ZpbHRlcihocF9hY2NlbF9pODA0Ml9maWx0ZXIpOworCiAJSU5JVF9XT1JLKCZocGxlZF9sZWQud29yaywgZGVsYXllZF9zZXRfc3RhdHVzX3dvcmtlcik7CiAJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKE5VTEwsICZocGxlZF9sZWQubGVkX2NsYXNzZGV2KTsKIAlpZiAocmV0KSB7CkBAIC0zNDMsNiArMzg2LDcgQEAKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpODA0Ml9yZW1vdmVfZmlsdGVyKGhwX2FjY2VsX2k4MDQyX2ZpbHRlcik7CiAJbGlzM2x2MDJkX2pveXN0aWNrX2Rpc2FibGUoJmxpczNfZGV2KTsKIAlsaXMzbHYwMmRfcG93ZXJvZmYoJmxpczNfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaWRlYXBhZC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2lkZWFwYWQtbGFwdG9wLmMKaW5kZXggMDIxNTJkZS4uZWQ0OTRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaWRlYXBhZC1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pZGVhcGFkLWxhcHRvcC5jCkBAIC04MzcsNiArODM3LDEzIEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIkxlbm92byBZb2dhIDIiKSwKIAkJfSwKIAl9LAorCXsKKwkJLmlkZW50ID0gIkxlbm92byBZb2dhIDMgUHJvIDEzNzAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkxFTk9WTyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICJMZW5vdm8gWU9HQSAzIFByby0xMzcwIiksCisJCX0sCisJfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc2Ftc3VuZy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NhbXN1bmctbGFwdG9wLmMKaW5kZXggNWE1OTY2NS4uZmY3NjVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc2Ftc3VuZy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zYW1zdW5nLWxhcHRvcC5jCkBAIC0xNTYxLDYgKzE1NjEsMTYgQEAKIAl9LAogCXsKIAkgLmNhbGxiYWNrID0gc2Ftc3VuZ19kbWlfbWF0Y2hlZCwKKwkgLmlkZW50ID0gIk5DMjEwIiwKKwkgLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTkMyMTAvTkMxMTAiKSwKKwkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTkMyMTAvTkMxMTAiKSwKKwkJfSwKKwkgLmRyaXZlcl9kYXRhID0gJnNhbXN1bmdfYnJva2VuX2FjcGlfdmlkZW8sCisJfSwKKwl7CisJIC5jYWxsYmFjayA9IHNhbXN1bmdfZG1pX21hdGNoZWQsCiAJIC5pZGVudCA9ICI3MzBVM0UvNzQwVTNFIiwKIAkgLm1hdGNoZXMgPSB7CiAJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCmluZGV4IGVmM2ExOTAuLmFiNjE1MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCkBAIC0yNDAsNiArMjQwLDEyIEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlFvc21pbyBYNzUtQSIpLAogCQl9LAogCX0sCisJeworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVEVDUkEgQTUwLUEiKSwKKwkJfSwKKwl9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL2FiODUwMF9mZy5jIGIvZHJpdmVycy9wb3dlci9hYjg1MDBfZmcuYwppbmRleCAyMTdkYTRiLi45OWE3OGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL2FiODUwMF9mZy5jCisrKyBiL2RyaXZlcnMvcG93ZXIvYWI4NTAwX2ZnLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdGltZTY0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KQEAgLTEwOCw3ICsxMDksNyBAQAogc3RydWN0IGFiODUwMF9mZ19hdmdfY2FwIHsKIAlpbnQgYXZnOwogCWludCBzYW1wbGVzW05CUl9BVkdfU0FNUExFU107Ci0JX19rZXJuZWxfdGltZV90IHRpbWVfc3RhbXBzW05CUl9BVkdfU0FNUExFU107CisJdGltZTY0X3QgdGltZV9zdGFtcHNbTkJSX0FWR19TQU1QTEVTXTsKIAlpbnQgcG9zOwogCWludCBuYnJfc2FtcGxlczsKIAlpbnQgc3VtOwpAQCAtMzg2LDE1ICszODcsMTUgQEAKICAqLwogc3RhdGljIGludCBhYjg1MDBfZmdfYWRkX2NhcF9zYW1wbGUoc3RydWN0IGFiODUwMF9mZyAqZGksIGludCBzYW1wbGUpCiB7Ci0Jc3RydWN0IHRpbWVzcGVjIHRzOworCXN0cnVjdCB0aW1lc3BlYzY0IHRzNjQ7CiAJc3RydWN0IGFiODUwMF9mZ19hdmdfY2FwICphdmcgPSAmZGktPmF2Z19jYXA7CiAKLQlnZXRuc3RpbWVvZmRheSgmdHMpOworCWdldG5zdGltZW9mZGF5NjQoJnRzNjQpOwogCiAJZG8gewogCQlhdmctPnN1bSArPSBzYW1wbGUgLSBhdmctPnNhbXBsZXNbYXZnLT5wb3NdOwogCQlhdmctPnNhbXBsZXNbYXZnLT5wb3NdID0gc2FtcGxlOwotCQlhdmctPnRpbWVfc3RhbXBzW2F2Zy0+cG9zXSA9IHRzLnR2X3NlYzsKKwkJYXZnLT50aW1lX3N0YW1wc1thdmctPnBvc10gPSB0czY0LnR2X3NlYzsKIAkJYXZnLT5wb3MrKzsKIAogCQlpZiAoYXZnLT5wb3MgPT0gTkJSX0FWR19TQU1QTEVTKQpAQCAtNDA3LDcgKzQwOCw3IEBACiAJCSAqIENoZWNrIHRoZSB0aW1lIHN0YW1wIGZvciBlYWNoIHNhbXBsZS4gSWYgdG9vIG9sZCwKIAkJICogcmVwbGFjZSB3aXRoIGxhdGVzdCBzYW1wbGUKIAkJICovCi0JfSB3aGlsZSAodHMudHZfc2VjIC0gVkFMSURfQ0FQQUNJVFlfU0VDID4gYXZnLT50aW1lX3N0YW1wc1thdmctPnBvc10pOworCX0gd2hpbGUgKHRzNjQudHZfc2VjIC0gVkFMSURfQ0FQQUNJVFlfU0VDID4gYXZnLT50aW1lX3N0YW1wc1thdmctPnBvc10pOwogCiAJYXZnLT5hdmcgPSBhdmctPnN1bSAvIGF2Zy0+bmJyX3NhbXBsZXM7CiAKQEAgLTQ0NiwxNCArNDQ3LDE0IEBACiBzdGF0aWMgdm9pZCBhYjg1MDBfZmdfZmlsbF9jYXBfc2FtcGxlKHN0cnVjdCBhYjg1MDBfZmcgKmRpLCBpbnQgc2FtcGxlKQogewogCWludCBpOwotCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OwogCXN0cnVjdCBhYjg1MDBfZmdfYXZnX2NhcCAqYXZnID0gJmRpLT5hdmdfY2FwOwogCi0JZ2V0bnN0aW1lb2ZkYXkoJnRzKTsKKwlnZXRuc3RpbWVvZmRheTY0KCZ0czY0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBOQlJfQVZHX1NBTVBMRVM7IGkrKykgewogCQlhdmctPnNhbXBsZXNbaV0gPSBzYW1wbGU7Ci0JCWF2Zy0+dGltZV9zdGFtcHNbaV0gPSB0cy50dl9zZWM7CisJCWF2Zy0+dGltZV9zdGFtcHNbaV0gPSB0czY0LnR2X3NlYzsKIAl9CiAKIAlhdmctPnBvcyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL2JxMjQxNXhfY2hhcmdlci5jIGIvZHJpdmVycy9wb3dlci9icTI0MTV4X2NoYXJnZXIuYwppbmRleCBlMzg0ODQ0Li4xZjQ5OTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL2JxMjQxNXhfY2hhcmdlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvYnEyNDE1eF9jaGFyZ2VyLmMKQEAgLTE1NzksOCArMTU3OSwxNSBAQAogCWlmIChucCkgewogCQlicS0+bm90aWZ5X3BzeSA9IHBvd2VyX3N1cHBseV9nZXRfYnlfcGhhbmRsZShucCwgInRpLHVzYi1jaGFyZ2VyLWRldGVjdGlvbiIpOwogCi0JCWlmICghYnEtPm5vdGlmeV9wc3kpCi0JCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJaWYgKElTX0VSUihicS0+bm90aWZ5X3BzeSkpIHsKKwkJCWRldl9pbmZvKCZjbGllbnQtPmRldiwKKwkJCQkibm8gJ3RpLHVzYi1jaGFyZ2VyLWRldGVjdGlvbicgcHJvcGVydHkgKGVycj0lbGQpXG4iLAorCQkJCVBUUl9FUlIoYnEtPm5vdGlmeV9wc3kpKTsKKwkJCWJxLT5ub3RpZnlfcHN5ID0gTlVMTDsKKwkJfSBlbHNlIGlmICghYnEtPm5vdGlmeV9wc3kpIHsKKwkJCXJldCA9IC1FUFJPQkVfREVGRVI7CisJCQlnb3RvIGVycm9yXzI7CisJCX0KIAl9CiAJZWxzZSBpZiAocGRhdGEtPm5vdGlmeV9kZXZpY2UpCiAJCWJxLT5ub3RpZnlfcHN5ID0gcG93ZXJfc3VwcGx5X2dldF9ieV9uYW1lKHBkYXRhLT5ub3RpZnlfZGV2aWNlKTsKQEAgLTE2MDIsMjcgKzE2MDksMjcgQEAKIAkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJ0aSxjdXJyZW50LWxpbWl0IiwKIAkJCQkmYnEtPmluaXRfZGF0YS5jdXJyZW50X2xpbWl0KTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycm9yXzI7CiAJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAidGksd2Vhay1iYXR0ZXJ5LXZvbHRhZ2UiLAogCQkJCSZicS0+aW5pdF9kYXRhLndlYWtfYmF0dGVyeV92b2x0YWdlKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycm9yXzI7CiAJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAidGksYmF0dGVyeS1yZWd1bGF0aW9uLXZvbHRhZ2UiLAogCQkJCSZicS0+aW5pdF9kYXRhLmJhdHRlcnlfcmVndWxhdGlvbl92b2x0YWdlKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycm9yXzI7CiAJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAidGksY2hhcmdlLWN1cnJlbnQiLAogCQkJCSZicS0+aW5pdF9kYXRhLmNoYXJnZV9jdXJyZW50KTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycm9yXzI7CiAJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAidGksdGVybWluYXRpb24tY3VycmVudCIsCiAJCQkJJmJxLT5pbml0X2RhdGEudGVybWluYXRpb25fY3VycmVudCk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBlcnJvcl8yOwogCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInRpLHJlc2lzdG9yLXNlbnNlIiwKIAkJCQkmYnEtPmluaXRfZGF0YS5yZXNpc3Rvcl9zZW5zZSk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBlcnJvcl8yOwogCX0gZWxzZSB7CiAJCW1lbWNweSgmYnEtPmluaXRfZGF0YSwgcGRhdGEsIHNpemVvZihicS0+aW5pdF9kYXRhKSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9jaGFyZ2VyLW1hbmFnZXIuYyBiL2RyaXZlcnMvcG93ZXIvY2hhcmdlci1tYW5hZ2VyLmMKaW5kZXggNzA5OGExYy4uZWY4MDk0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9jaGFyZ2VyLW1hbmFnZXIuYworKysgYi9kcml2ZXJzL3Bvd2VyL2NoYXJnZXItbWFuYWdlci5jCkBAIC05Nyw2ICs5Nyw3IEBACiBzdGF0aWMgYm9vbCBpc19iYXR0X3ByZXNlbnQoc3RydWN0IGNoYXJnZXJfbWFuYWdlciAqY20pCiB7CiAJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgdmFsOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeTsKIAlib29sIHByZXNlbnQgPSBmYWxzZTsKIAlpbnQgaSwgcmV0OwogCkBAIC0xMDcsMTYgKzEwOCwyNyBAQAogCWNhc2UgQ01fTk9fQkFUVEVSWToKIAkJYnJlYWs7CiAJY2FzZSBDTV9GVUVMX0dBVUdFOgotCQlyZXQgPSBjbS0+ZnVlbF9nYXVnZS0+Z2V0X3Byb3BlcnR5KGNtLT5mdWVsX2dhdWdlLAorCQlwc3kgPSBwb3dlcl9zdXBwbHlfZ2V0X2J5X25hbWUoY20tPmRlc2MtPnBzeV9mdWVsX2dhdWdlKTsKKwkJaWYgKCFwc3kpCisJCQlicmVhazsKKworCQlyZXQgPSBwc3ktPmdldF9wcm9wZXJ0eShwc3ksCiAJCQkJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwgJnZhbCk7CiAJCWlmIChyZXQgPT0gMCAmJiB2YWwuaW50dmFsKQogCQkJcHJlc2VudCA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgQ01fQ0hBUkdFUl9TVEFUOgotCQlmb3IgKGkgPSAwOyBjbS0+Y2hhcmdlcl9zdGF0W2ldOyBpKyspIHsKLQkJCXJldCA9IGNtLT5jaGFyZ2VyX3N0YXRbaV0tPmdldF9wcm9wZXJ0eSgKLQkJCQkJY20tPmNoYXJnZXJfc3RhdFtpXSwKLQkJCQkJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwgJnZhbCk7CisJCWZvciAoaSA9IDA7IGNtLT5kZXNjLT5wc3lfY2hhcmdlcl9zdGF0W2ldOyBpKyspIHsKKwkJCXBzeSA9IHBvd2VyX3N1cHBseV9nZXRfYnlfbmFtZSgKKwkJCQkJY20tPmRlc2MtPnBzeV9jaGFyZ2VyX3N0YXRbaV0pOworCQkJaWYgKCFwc3kpIHsKKwkJCQlkZXZfZXJyKGNtLT5kZXYsICJDYW5ub3QgZmluZCBwb3dlciBzdXBwbHkgXCIlc1wiXG4iLAorCQkJCQljbS0+ZGVzYy0+cHN5X2NoYXJnZXJfc3RhdFtpXSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXJldCA9IHBzeS0+Z2V0X3Byb3BlcnR5KHBzeSwgUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwkJCQkJJnZhbCk7CiAJCQlpZiAocmV0ID09IDAgJiYgdmFsLmludHZhbCkgewogCQkJCXByZXNlbnQgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMTM5LDE0ICsxNTEsMjAgQEAKIHN0YXRpYyBib29sIGlzX2V4dF9wd3Jfb25saW5lKHN0cnVjdCBjaGFyZ2VyX21hbmFnZXIgKmNtKQogewogCXVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsIHZhbDsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3k7CiAJYm9vbCBvbmxpbmUgPSBmYWxzZTsKIAlpbnQgaSwgcmV0OwogCiAJLyogSWYgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaGFzIG9uZSwgaXQncyB5ZXMuICovCi0JZm9yIChpID0gMDsgY20tPmNoYXJnZXJfc3RhdFtpXTsgaSsrKSB7Ci0JCXJldCA9IGNtLT5jaGFyZ2VyX3N0YXRbaV0tPmdldF9wcm9wZXJ0eSgKLQkJCQljbS0+Y2hhcmdlcl9zdGF0W2ldLAotCQkJCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwgJnZhbCk7CisJZm9yIChpID0gMDsgY20tPmRlc2MtPnBzeV9jaGFyZ2VyX3N0YXRbaV07IGkrKykgeworCQlwc3kgPSBwb3dlcl9zdXBwbHlfZ2V0X2J5X25hbWUoY20tPmRlc2MtPnBzeV9jaGFyZ2VyX3N0YXRbaV0pOworCQlpZiAoIXBzeSkgeworCQkJZGV2X2VycihjbS0+ZGV2LCAiQ2Fubm90IGZpbmQgcG93ZXIgc3VwcGx5IFwiJXNcIlxuIiwKKwkJCQkJY20tPmRlc2MtPnBzeV9jaGFyZ2VyX3N0YXRbaV0pOworCQkJY29udGludWU7CisJCX0KKworCQlyZXQgPSBwc3ktPmdldF9wcm9wZXJ0eShwc3ksIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwgJnZhbCk7CiAJCWlmIChyZXQgPT0gMCAmJiB2YWwuaW50dmFsKSB7CiAJCQlvbmxpbmUgPSB0cnVlOwogCQkJYnJlYWs7CkBAIC0xNjcsMTIgKzE4NSwxNCBAQAogc3RhdGljIGludCBnZXRfYmF0dF91VihzdHJ1Y3QgY2hhcmdlcl9tYW5hZ2VyICpjbSwgaW50ICp1VikKIHsKIAl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCB2YWw7CisJc3RydWN0IHBvd2VyX3N1cHBseSAqZnVlbF9nYXVnZTsKIAlpbnQgcmV0OwogCi0JaWYgKCFjbS0+ZnVlbF9nYXVnZSkKKwlmdWVsX2dhdWdlID0gcG93ZXJfc3VwcGx5X2dldF9ieV9uYW1lKGNtLT5kZXNjLT5wc3lfZnVlbF9nYXVnZSk7CisJaWYgKCFmdWVsX2dhdWdlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IGNtLT5mdWVsX2dhdWdlLT5nZXRfcHJvcGVydHkoY20tPmZ1ZWxfZ2F1Z2UsCisJcmV0ID0gZnVlbF9nYXVnZS0+Z2V0X3Byb3BlcnR5KGZ1ZWxfZ2F1Z2UsCiAJCQkJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csICZ2YWwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xODksNiArMjA5LDcgQEAKIHsKIAlpbnQgaSwgcmV0OwogCWJvb2wgY2hhcmdpbmcgPSBmYWxzZTsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3k7CiAJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgdmFsOwogCiAJLyogSWYgdGhlcmUgaXMgbm8gYmF0dGVyeSwgaXQgY2Fubm90IGJlIGNoYXJnZWQgKi8KQEAgLTE5NiwxNyArMjE3LDIyIEBACiAJCXJldHVybiBmYWxzZTsKIAogCS8qIElmIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2hhcmdlciBpcyBjaGFyZ2luZywgcmV0dXJuIHllcyAqLwotCWZvciAoaSA9IDA7IGNtLT5jaGFyZ2VyX3N0YXRbaV07IGkrKykgeworCWZvciAoaSA9IDA7IGNtLT5kZXNjLT5wc3lfY2hhcmdlcl9zdGF0W2ldOyBpKyspIHsKIAkJLyogMS4gVGhlIGNoYXJnZXIgc2hvbHVsZCBub3QgYmUgRElTQUJMRUQgKi8KIAkJaWYgKGNtLT5lbWVyZ2VuY3lfc3RvcCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIWNtLT5jaGFyZ2VyX2VuYWJsZWQpCiAJCQljb250aW51ZTsKIAorCQlwc3kgPSBwb3dlcl9zdXBwbHlfZ2V0X2J5X25hbWUoY20tPmRlc2MtPnBzeV9jaGFyZ2VyX3N0YXRbaV0pOworCQlpZiAoIXBzeSkgeworCQkJZGV2X2VycihjbS0+ZGV2LCAiQ2Fubm90IGZpbmQgcG93ZXIgc3VwcGx5IFwiJXNcIlxuIiwKKwkJCQkJY20tPmRlc2MtPnBzeV9jaGFyZ2VyX3N0YXRbaV0pOworCQkJY29udGludWU7CisJCX0KKwogCQkvKiAyLiBUaGUgY2hhcmdlciBzaG91bGQgYmUgb25saW5lIChleHQtcG93ZXIpICovCi0JCXJldCA9IGNtLT5jaGFyZ2VyX3N0YXRbaV0tPmdldF9wcm9wZXJ0eSgKLQkJCQljbS0+Y2hhcmdlcl9zdGF0W2ldLAotCQkJCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwgJnZhbCk7CisJCXJldCA9IHBzeS0+Z2V0X3Byb3BlcnR5KHBzeSwgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FLCAmdmFsKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X3dhcm4oY20tPmRldiwgIkNhbm5vdCByZWFkIE9OTElORSB2YWx1ZSBmcm9tICVzXG4iLAogCQkJCSBjbS0+ZGVzYy0+cHN5X2NoYXJnZXJfc3RhdFtpXSk7CkBAIC0yMTksOSArMjQ1LDcgQEAKIAkJICogMy4gVGhlIGNoYXJnZXIgc2hvdWxkIG5vdCBiZSBGVUxMLCBESVNDSEFSR0lORywKIAkJICogb3IgTk9UX0NIQVJHSU5HLgogCQkgKi8KLQkJcmV0ID0gY20tPmNoYXJnZXJfc3RhdFtpXS0+Z2V0X3Byb3BlcnR5KAotCQkJCWNtLT5jaGFyZ2VyX3N0YXRbaV0sCi0JCQkJUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTLCAmdmFsKTsKKwkJcmV0ID0gcHN5LT5nZXRfcHJvcGVydHkocHN5LCBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsICZ2YWwpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfd2FybihjbS0+ZGV2LCAiQ2Fubm90IHJlYWQgU1RBVFVTIHZhbHVlIGZyb20gJXNcbiIsCiAJCQkJIGNtLT5kZXNjLT5wc3lfY2hhcmdlcl9zdGF0W2ldKTsKQEAgLTI0OCw2ICsyNzIsNyBAQAogewogCXN0cnVjdCBjaGFyZ2VyX2Rlc2MgKmRlc2MgPSBjbS0+ZGVzYzsKIAl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCB2YWw7CisJc3RydWN0IHBvd2VyX3N1cHBseSAqZnVlbF9nYXVnZTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgdVY7CiAKQEAgLTI1NSwxMSArMjgwLDE1IEBACiAJaWYgKCFpc19iYXR0X3ByZXNlbnQoY20pKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoY20tPmZ1ZWxfZ2F1Z2UgJiYgZGVzYy0+ZnVsbGJhdHRfZnVsbF9jYXBhY2l0eSA+IDApIHsKKwlmdWVsX2dhdWdlID0gcG93ZXJfc3VwcGx5X2dldF9ieV9uYW1lKGNtLT5kZXNjLT5wc3lfZnVlbF9nYXVnZSk7CisJaWYgKCFmdWVsX2dhdWdlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZGVzYy0+ZnVsbGJhdHRfZnVsbF9jYXBhY2l0eSA+IDApIHsKIAkJdmFsLmludHZhbCA9IDA7CiAKIAkJLyogTm90IGZ1bGwgaWYgY2FwYWNpdHkgb2YgZnVlbCBnYXVnZSBpc24ndCBmdWxsICovCi0JCXJldCA9IGNtLT5mdWVsX2dhdWdlLT5nZXRfcHJvcGVydHkoY20tPmZ1ZWxfZ2F1Z2UsCisJCXJldCA9IGZ1ZWxfZ2F1Z2UtPmdldF9wcm9wZXJ0eShmdWVsX2dhdWdlLAogCQkJCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMLCAmdmFsKTsKIAkJaWYgKCFyZXQgJiYgdmFsLmludHZhbCA+IGRlc2MtPmZ1bGxiYXR0X2Z1bGxfY2FwYWNpdHkpCiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTI3MywxMCArMzAyLDEwIEBACiAJfQogCiAJLyogRnVsbCwgaWYgdGhlIGNhcGFjaXR5IGlzIG1vcmUgdGhhbiBmdWxsYmF0dF9zb2MgKi8KLQlpZiAoY20tPmZ1ZWxfZ2F1Z2UgJiYgZGVzYy0+ZnVsbGJhdHRfc29jID4gMCkgeworCWlmIChkZXNjLT5mdWxsYmF0dF9zb2MgPiAwKSB7CiAJCXZhbC5pbnR2YWwgPSAwOwogCi0JCXJldCA9IGNtLT5mdWVsX2dhdWdlLT5nZXRfcHJvcGVydHkoY20tPmZ1ZWxfZ2F1Z2UsCisJCXJldCA9IGZ1ZWxfZ2F1Z2UtPmdldF9wcm9wZXJ0eShmdWVsX2dhdWdlLAogCQkJCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLCAmdmFsKTsKIAkJaWYgKCFyZXQgJiYgdmFsLmludHZhbCA+PSBkZXNjLT5mdWxsYmF0dF9zb2MpCiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTU1MSw2ICs1ODAsMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGNtX2dldF9iYXR0ZXJ5X3RlbXBlcmF0dXJlX2J5X3BzeShzdHJ1Y3QgY2hhcmdlcl9tYW5hZ2VyICpjbSwKKwkJCQkJaW50ICp0ZW1wKQoreworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmZ1ZWxfZ2F1Z2U7CisKKwlmdWVsX2dhdWdlID0gcG93ZXJfc3VwcGx5X2dldF9ieV9uYW1lKGNtLT5kZXNjLT5wc3lfZnVlbF9nYXVnZSk7CisJaWYgKCFmdWVsX2dhdWdlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBmdWVsX2dhdWdlLT5nZXRfcHJvcGVydHkoZnVlbF9nYXVnZSwKKwkJCQlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorCQkJCSh1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqKXRlbXApOworfQorCiBzdGF0aWMgaW50IGNtX2dldF9iYXR0ZXJ5X3RlbXBlcmF0dXJlKHN0cnVjdCBjaGFyZ2VyX21hbmFnZXIgKmNtLAogCQkJCQlpbnQgKnRlbXApCiB7CkBAIC01NjAsMTUgKzYwMywxOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogI2lmZGVmIENPTkZJR19USEVSTUFMCi0JcmV0ID0gdGhlcm1hbF96b25lX2dldF90ZW1wKGNtLT50emRfYmF0dCwgKHVuc2lnbmVkIGxvbmcgKil0ZW1wKTsKLQlpZiAoIXJldCkKLQkJLyogQ2FsaWJyYXRlIHRlbXBlcmF0dXJlIHVuaXQgKi8KLQkJKnRlbXAgLz0gMTAwOwotI2Vsc2UKLQlyZXQgPSBjbS0+ZnVlbF9nYXVnZS0+Z2V0X3Byb3BlcnR5KGNtLT5mdWVsX2dhdWdlLAotCQkJCVBPV0VSX1NVUFBMWV9QUk9QX1RFTVAsCi0JCQkJKHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICopdGVtcCk7CisJaWYgKGNtLT50emRfYmF0dCkgeworCQlyZXQgPSB0aGVybWFsX3pvbmVfZ2V0X3RlbXAoY20tPnR6ZF9iYXR0LCAodW5zaWduZWQgbG9uZyAqKXRlbXApOworCQlpZiAoIXJldCkKKwkJCS8qIENhbGlicmF0ZSB0ZW1wZXJhdHVyZSB1bml0ICovCisJCQkqdGVtcCAvPSAxMDA7CisJfSBlbHNlCiAjZW5kaWYKKwl7CisJCS8qIGlmLWVsc2UgY29udGludWVkIGZyb20gQ09ORklHX1RIRVJNQUwgKi8KKwkJcmV0ID0gY21fZ2V0X2JhdHRlcnlfdGVtcGVyYXR1cmVfYnlfcHN5KGNtLCB0ZW1wKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04MjcsNiArODczLDcgQEAKIAlzdHJ1Y3QgY2hhcmdlcl9tYW5hZ2VyICpjbSA9IGNvbnRhaW5lcl9vZihwc3ksCiAJCQlzdHJ1Y3QgY2hhcmdlcl9tYW5hZ2VyLCBjaGFyZ2VyX3BzeSk7CiAJc3RydWN0IGNoYXJnZXJfZGVzYyAqZGVzYyA9IGNtLT5kZXNjOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmZ1ZWxfZ2F1Z2U7CiAJaW50IHJldCA9IDA7CiAJaW50IHVWOwogCkBAIC04NTcsMTQgKzkwNCwyMCBAQAogCQlyZXQgPSBnZXRfYmF0dF91VihjbSwgJnZhbC0+aW50dmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVzoKLQkJcmV0ID0gY20tPmZ1ZWxfZ2F1Z2UtPmdldF9wcm9wZXJ0eShjbS0+ZnVlbF9nYXVnZSwKKwkJZnVlbF9nYXVnZSA9IHBvd2VyX3N1cHBseV9nZXRfYnlfbmFtZShjbS0+ZGVzYy0+cHN5X2Z1ZWxfZ2F1Z2UpOworCQlpZiAoIWZ1ZWxfZ2F1Z2UpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBmdWVsX2dhdWdlLT5nZXRfcHJvcGVydHkoZnVlbF9nYXVnZSwKIAkJCQlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywgdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URU1QOgogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVEVNUF9BTUJJRU5UOgogCQlyZXR1cm4gY21fZ2V0X2JhdHRlcnlfdGVtcGVyYXR1cmUoY20sICZ2YWwtPmludHZhbCk7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKLQkJaWYgKCFjbS0+ZnVlbF9nYXVnZSkgeworCQlmdWVsX2dhdWdlID0gcG93ZXJfc3VwcGx5X2dldF9ieV9uYW1lKGNtLT5kZXNjLT5wc3lfZnVlbF9nYXVnZSk7CisJCWlmICghZnVlbF9nYXVnZSkgewogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWJyZWFrOwogCQl9CkBAIC04NzUsNyArOTI4LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJcmV0ID0gY20tPmZ1ZWxfZ2F1Z2UtPmdldF9wcm9wZXJ0eShjbS0+ZnVlbF9nYXVnZSwKKwkJcmV0ID0gZnVlbF9nYXVnZS0+Z2V0X3Byb3BlcnR5KGZ1ZWxfZ2F1Z2UsCiAJCQkJCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLCB2YWwpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CkBAIC05MjQsNyArOTc3LDE0IEBACiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVzoKIAkJaWYgKGlzX2NoYXJnaW5nKGNtKSkgewotCQkJcmV0ID0gY20tPmZ1ZWxfZ2F1Z2UtPmdldF9wcm9wZXJ0eShjbS0+ZnVlbF9nYXVnZSwKKwkJCWZ1ZWxfZ2F1Z2UgPSBwb3dlcl9zdXBwbHlfZ2V0X2J5X25hbWUoCisJCQkJCWNtLT5kZXNjLT5wc3lfZnVlbF9nYXVnZSk7CisJCQlpZiAoIWZ1ZWxfZ2F1Z2UpIHsKKwkJCQlyZXQgPSAtRU5PREVWOworCQkJCWJyZWFrOworCQkJfQorCisJCQlyZXQgPSBmdWVsX2dhdWdlLT5nZXRfcHJvcGVydHkoZnVlbF9nYXVnZSwKIAkJCQkJCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9OT1csCiAJCQkJCQl2YWwpOwogCQkJaWYgKHJldCkgewpAQCAtOTcwLDYgKzEwMzAsNyBAQAogCS5wcm9wZXJ0aWVzID0gZGVmYXVsdF9jaGFyZ2VyX3Byb3BzLAogCS5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUoZGVmYXVsdF9jaGFyZ2VyX3Byb3BzKSwKIAkuZ2V0X3Byb3BlcnR5ID0gY2hhcmdlcl9nZXRfcHJvcGVydHksCisJLm5vX3RoZXJtYWwgPSB0cnVlLAogfTsKIAogLyoqCkBAIC0xNDg1LDE0ICsxNTQ2LDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjbV9pbml0X3RoZXJtYWxfZGF0YShzdHJ1Y3QgY2hhcmdlcl9tYW5hZ2VyICpjbSkKK3N0YXRpYyBpbnQgY21faW5pdF90aGVybWFsX2RhdGEoc3RydWN0IGNoYXJnZXJfbWFuYWdlciAqY20sCisJCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmZ1ZWxfZ2F1Z2UpCiB7CiAJc3RydWN0IGNoYXJnZXJfZGVzYyAqZGVzYyA9IGNtLT5kZXNjOwogCXVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsIHZhbDsKIAlpbnQgcmV0OwogCiAJLyogVmVyaWZ5IHdoZXRoZXIgZnVlbCBnYXVnZSBwcm92aWRlcyBiYXR0ZXJ5IHRlbXBlcmF0dXJlICovCi0JcmV0ID0gY20tPmZ1ZWxfZ2F1Z2UtPmdldF9wcm9wZXJ0eShjbS0+ZnVlbF9nYXVnZSwKKwlyZXQgPSBmdWVsX2dhdWdlLT5nZXRfcHJvcGVydHkoZnVlbF9nYXVnZSwKIAkJCQkJUE9XRVJfU1VQUExZX1BST1BfVEVNUCwgJnZhbCk7CiAKIAlpZiAoIXJldCkgewpAQCAtMTUwMiw4ICsxNTY0LDYgQEAKIAkJY20tPmRlc2MtPm1lYXN1cmVfYmF0dGVyeV90ZW1wID0gdHJ1ZTsKIAl9CiAjaWZkZWYgQ09ORklHX1RIRVJNQUwKLQljbS0+dHpkX2JhdHQgPSBjbS0+ZnVlbF9nYXVnZS0+dHpkOwotCiAJaWYgKHJldCAmJiBkZXNjLT50aGVybWFsX3pvbmUpIHsKIAkJY20tPnR6ZF9iYXR0ID0KIAkJCXRoZXJtYWxfem9uZV9nZXRfem9uZV9ieV9uYW1lKGRlc2MtPnRoZXJtYWxfem9uZSk7CkBAIC0xNjY2LDYgKzE3MjYsNyBAQAogCWludCByZXQgPSAwLCBpID0gMDsKIAlpbnQgaiA9IDA7CiAJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgdmFsOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmZ1ZWxfZ2F1Z2U7CiAKIAlpZiAoZ19kZXNjICYmICFydGNfZGV2ICYmIGdfZGVzYy0+cnRjX25hbWUpIHsKIAkJcnRjX2RldiA9IHJ0Y19jbGFzc19vcGVuKGdfZGVzYy0+cnRjX25hbWUpOwpAQCAtMTcyOSwyMyArMTc5MCwyMCBAQAogCXdoaWxlIChkZXNjLT5wc3lfY2hhcmdlcl9zdGF0W2ldKQogCQlpKys7CiAKLQljbS0+Y2hhcmdlcl9zdGF0ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCi0JCQkJc2l6ZW9mKHN0cnVjdCBwb3dlcl9zdXBwbHkgKikgKiBpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNtLT5jaGFyZ2VyX3N0YXQpCi0JCXJldHVybiAtRU5PTUVNOwotCisJLyogQ2hlY2sgaWYgY2hhcmdlcidzIHN1cHBsaWVzIGFyZSBwcmVzZW50IGF0IHByb2JlICovCiAJZm9yIChpID0gMDsgZGVzYy0+cHN5X2NoYXJnZXJfc3RhdFtpXTsgaSsrKSB7Ci0JCWNtLT5jaGFyZ2VyX3N0YXRbaV0gPSBwb3dlcl9zdXBwbHlfZ2V0X2J5X25hbWUoCi0JCQkJCWRlc2MtPnBzeV9jaGFyZ2VyX3N0YXRbaV0pOwotCQlpZiAoIWNtLT5jaGFyZ2VyX3N0YXRbaV0pIHsKKwkJc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5OworCisJCXBzeSA9IHBvd2VyX3N1cHBseV9nZXRfYnlfbmFtZShkZXNjLT5wc3lfY2hhcmdlcl9zdGF0W2ldKTsKKwkJaWYgKCFwc3kpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBmaW5kIHBvd2VyIHN1cHBseSBcIiVzXCJcbiIsCiAJCQkJZGVzYy0+cHN5X2NoYXJnZXJfc3RhdFtpXSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KIAotCWNtLT5mdWVsX2dhdWdlID0gcG93ZXJfc3VwcGx5X2dldF9ieV9uYW1lKGRlc2MtPnBzeV9mdWVsX2dhdWdlKTsKLQlpZiAoIWNtLT5mdWVsX2dhdWdlKSB7CisJZnVlbF9nYXVnZSA9IHBvd2VyX3N1cHBseV9nZXRfYnlfbmFtZShkZXNjLT5wc3lfZnVlbF9nYXVnZSk7CisJaWYgKCFmdWVsX2dhdWdlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBmaW5kIHBvd2VyIHN1cHBseSBcIiVzXCJcbiIsCiAJCQlkZXNjLT5wc3lfZnVlbF9nYXVnZSk7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTc4OCwxMyArMTg0NiwxMyBAQAogCWNtLT5jaGFyZ2VyX3BzeS5udW1fcHJvcGVydGllcyA9IHBzeV9kZWZhdWx0Lm51bV9wcm9wZXJ0aWVzOwogCiAJLyogRmluZCB3aGljaCBvcHRpb25hbCBwc3ktcHJvcGVydGllcyBhcmUgYXZhaWxhYmxlICovCi0JaWYgKCFjbS0+ZnVlbF9nYXVnZS0+Z2V0X3Byb3BlcnR5KGNtLT5mdWVsX2dhdWdlLAorCWlmICghZnVlbF9nYXVnZS0+Z2V0X3Byb3BlcnR5KGZ1ZWxfZ2F1Z2UsCiAJCQkJCSAgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVywgJnZhbCkpIHsKIAkJY20tPmNoYXJnZXJfcHN5LnByb3BlcnRpZXNbY20tPmNoYXJnZXJfcHN5Lm51bV9wcm9wZXJ0aWVzXSA9CiAJCQkJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVzsKIAkJY20tPmNoYXJnZXJfcHN5Lm51bV9wcm9wZXJ0aWVzKys7CiAJfQotCWlmICghY20tPmZ1ZWxfZ2F1Z2UtPmdldF9wcm9wZXJ0eShjbS0+ZnVlbF9nYXVnZSwKKwlpZiAoIWZ1ZWxfZ2F1Z2UtPmdldF9wcm9wZXJ0eShmdWVsX2dhdWdlLAogCQkJCQkgIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLAogCQkJCQkgICZ2YWwpKSB7CiAJCWNtLT5jaGFyZ2VyX3BzeS5wcm9wZXJ0aWVzW2NtLT5jaGFyZ2VyX3BzeS5udW1fcHJvcGVydGllc10gPQpAQCAtMTgwMiw3ICsxODYwLDcgQEAKIAkJY20tPmNoYXJnZXJfcHN5Lm51bV9wcm9wZXJ0aWVzKys7CiAJfQogCi0JcmV0ID0gY21faW5pdF90aGVybWFsX2RhdGEoY20pOworCXJldCA9IGNtX2luaXRfdGhlcm1hbF9kYXRhKGNtLCBmdWVsX2dhdWdlKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHRoZXJtYWwgZGF0YVxuIik7CiAJCWNtLT5kZXNjLT5tZWFzdXJlX2JhdHRlcnlfdGVtcCA9IGZhbHNlOwpAQCAtMjA2Niw4ICsyMTI0LDggQEAKIAlpbnQgaTsKIAlib29sIGZvdW5kID0gZmFsc2U7CiAKLQlmb3IgKGkgPSAwOyBjbS0+Y2hhcmdlcl9zdGF0W2ldOyBpKyspIHsKLQkJaWYgKHBzeSA9PSBjbS0+Y2hhcmdlcl9zdGF0W2ldKSB7CisJZm9yIChpID0gMDsgY20tPmRlc2MtPnBzeV9jaGFyZ2VyX3N0YXRbaV07IGkrKykgeworCQlpZiAoIXN0cmNtcChwc3ktPm5hbWUsIGNtLT5kZXNjLT5wc3lfY2hhcmdlcl9zdGF0W2ldKSkgewogCQkJZm91bmQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYwppbmRleCA2Y2I3ZmU1Li42OTRlOGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9jb3JlLmMKKysrIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jCkBAIC00MTcsNiArNDE3LDkgQEAKIHsKIAlpbnQgaTsKIAorCWlmIChwc3ktPm5vX3RoZXJtYWwpCisJCXJldHVybiAwOworCiAJLyogUmVnaXN0ZXIgYmF0dGVyeSB6b25lIGRldmljZSBwc3kgcmVwb3J0cyB0ZW1wZXJhdHVyZSAqLwogCWZvciAoaSA9IDA7IGkgPCBwc3ktPm51bV9wcm9wZXJ0aWVzOyBpKyspIHsKIAkJaWYgKHBzeS0+cHJvcGVydGllc1tpXSA9PSBQT1dFUl9TVVBQTFlfUFJPUF9URU1QKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWcgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWcKaW5kZXggZjY1ZmY0OS4uMDI4ZTc2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZwpAQCAtNzEsNiArNzEsMTUgQEAKIAloZWxwCiAJICBSZWJvb3Qgc3VwcG9ydCBmb3IgSGlzaWxpY29uIGJvYXJkcy4KIAorY29uZmlnIFBPV0VSX1JFU0VUX0lNWAorCWJvb2wgIklNWDYgcG93ZXItb2ZmIGRyaXZlciIKKwlkZXBlbmRzIG9uIFBPV0VSX1JFU0VUICYmIFNPQ19JTVg2CisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydCBwb3dlciBvZmYgZXh0ZXJuYWwgUE1JQyBieSBQTUlDX09OX1JFUSBvbiBpLm14NgorCSAgYm9hcmRzLklmIHlvdSB3YW50IHRvIHVzZSBvdGhlciBwaW4gdG8gY29udHJvbCBleHRlcm5hbCBwb3dlcixwbGVhc2UKKwkgIHNheSBOIGhlcmUgb3IgZGlzYWJsZSBpbiBkdHMgdG8gbWFrZSBzdXJlIHBtX3Bvd2VyX29mZiBuZXZlciBiZQorCSAgb3Zlcndyb3RlIHdyb25nbHkgYnkgdGhpcyBkcml2ZXIuCisKIGNvbmZpZyBQT1dFUl9SRVNFVF9NU00KIAlib29sICJRdWFsY29tbSBNU00gcG93ZXItb2ZmIGRyaXZlciIKIAlkZXBlbmRzIG9uIEFSQ0hfUUNPTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9NYWtlZmlsZSBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvTWFrZWZpbGUKaW5kZXggNzZjZTFjNS4uMWQ0ODA0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0dQSU8pICs9IGdwaW8tcG93ZXJvZmYubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0dQSU9fUkVTVEFSVCkgKz0gZ3Bpby1yZXN0YXJ0Lm8KIG9iai0kKENPTkZJR19QT1dFUl9SRVNFVF9ISVNJKSArPSBoaXNpLXJlYm9vdC5vCitvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfSU1YKSArPSBpbXgtc252cy1wb3dlcm9mZi5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfTVNNKSArPSBtc20tcG93ZXJvZmYubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0xUQzI5NTIpICs9IGx0YzI5NTItcG93ZXJvZmYubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1FOQVApICs9IHFuYXAtcG93ZXJvZmYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXJlc2V0LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2F0OTEtcmVzZXQuYwppbmRleCAzY2IzNjY5Li42OWE3NWQ5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXJlc2V0LmMKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXJlc2V0LmMKQEAgLTE5LDggKzE5LDggQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgogCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9kZHJzZHIuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NkcmFtYy5oPgorI2luY2x1ZGUgPHNvYy9hdDkxL2F0OTFzYW05X2RkcnNkci5oPgorI2luY2x1ZGUgPHNvYy9hdDkxL2F0OTFzYW05X3NkcmFtYy5oPgogCiAjZGVmaW5lIEFUOTFfUlNUQ19DUgkweDAwCQkvKiBSZXNldCBDb250cm9sbGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQVQ5MV9SU1RDX1BST0NSU1QJQklUKDApCQkvKiBQcm9jZXNzb3IgUmVzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvaW14LXNudnMtcG93ZXJvZmYuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvaW14LXNudnMtcG93ZXJvZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDZjZTUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9pbXgtc252cy1wb3dlcm9mZi5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qIFBvd2VyIG9mZiBkcml2ZXIgZm9yIGkubXg2CisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZSRUVTQ0FMRSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogYmFzZWQgb24gbXNtLXBvd2Vyb2ZmLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNudnNfYmFzZTsKKworc3RhdGljIHZvaWQgZG9faW14X3Bvd2Vyb2ZmKHZvaWQpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoc252c19iYXNlKTsKKworCS8qIHNldCBUT1AgYW5kIERQX0VOIGJpdCAqLworCXdyaXRlbCh2YWx1ZSB8IDB4NjAsIHNudnNfYmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgaW14X3Bvd2Vyb2ZmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc252c19iYXNlID0gb2ZfaW9tYXAocGRldi0+ZGV2Lm9mX25vZGUsIDApOworCWlmICghc252c19iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcG1fcG93ZXJfb2ZmID0gZG9faW14X3Bvd2Vyb2ZmOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9pbXhfcG93ZXJvZmZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1wb3dlcm9mZiIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfaW14X3Bvd2Vyb2ZmX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14X3Bvd2Vyb2ZmX2RyaXZlciA9IHsKKwkucHJvYmUgPSBpbXhfcG93ZXJvZmZfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiaW14LXNudnMtcG93ZXJvZmYiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfaW14X3Bvd2Vyb2ZmX21hdGNoKSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW14X3Bvd2Vyb2ZmX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpbXhfcG93ZXJvZmZfZHJpdmVyKTsKK30KK2RldmljZV9pbml0Y2FsbChpbXhfcG93ZXJvZmZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jIGIvZHJpdmVycy9yZWd1bGF0b3IvODhwbTg2MDcuYwppbmRleCA2ZDc3ZGNkLi4zZmU0N2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMKQEAgLTMzMCw3ICszMzAsOCBAQAogCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnByb290LCBucCkgewogCQlpZiAoIW9mX25vZGVfY21wKG5wLT5uYW1lLCBpbmZvLT5kZXNjLm5hbWUpKSB7CiAJCQljb25maWctPmluaXRfZGF0YSA9Ci0JCQkJb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgbnApOworCQkJCW9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIG5wLAorCQkJCQkJCSAgICZpbmZvLT5kZXNjKTsKIAkJCWNvbmZpZy0+b2Zfbm9kZSA9IG5wOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcgYi9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCmluZGV4IDU1ZDdiN2IuLmMzYTYwYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwpAQCAtNTIxLDYgKzUyMSwxNCBAQAogCWhlbHAKIAkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgcmVndWxhdG9ycyBmb3VuZCBvbiBSaWNvaCBSTjVUNjE4IFBNSUMuCiAKK2NvbmZpZyBSRUdVTEFUT1JfUlQ1MDMzCisJdHJpc3RhdGUgIlJpY2h0ZWsgUlQ1MDMzIFJlZ3VsYXRvcnMiCisJZGVwZW5kcyBvbiBNRkRfUlQ1MDMzCisJaGVscAorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHZvbHRhZ2UgYW5kIGN1cnJlbnQgcmVndWxhdG9ycyBpbiBSaWNodGVrCisJICBSVDUwMzMgUE1JQy4gVGhlIGRldmljZSBzdXBwb3J0cyBtdWx0aXBsZSByZWd1bGF0b3JzIGxpa2UKKwkgIGN1cnJlbnQgc291cmNlLCBMRE8gYW5kIEJ1Y2suCisKIGNvbmZpZyBSRUdVTEFUT1JfUzJNUEEwMQogCXRyaXN0YXRlICJTYW1zdW5nIFMyTVBBMDEgdm9sdGFnZSByZWd1bGF0b3IiCiAJZGVwZW5kcyBvbiBNRkRfU0VDX0NPUkUKQEAgLTUyOSwxMyArNTM3LDEzIEBACiAJIHZpYSBJMkMgYnVzLiBTMk1QQTAxIGhhcyAxMCBCdWNrcyBhbmQgMjYgTERPIG91dHB1dHMuCiAKIGNvbmZpZyBSRUdVTEFUT1JfUzJNUFMxMQotCXRyaXN0YXRlICJTYW1zdW5nIFMyTVBTMTEvUzJNUFMxNC9TMk1QVTAyIHZvbHRhZ2UgcmVndWxhdG9yIgorCXRyaXN0YXRlICJTYW1zdW5nIFMyTVBTMTEvUzJNUFMxMy9TMk1QUzE0L1MyTVBVMDIgdm9sdGFnZSByZWd1bGF0b3IiCiAJZGVwZW5kcyBvbiBNRkRfU0VDX0NPUkUKIAloZWxwCi0JIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGEgU2Ftc3VuZyBTMk1QUzExL1MyTVBTMTQvUzJNUFUwMiB2b2x0YWdlIG91dHB1dAotCSByZWd1bGF0b3IgdmlhIEkyQyBidXMuIFRoZSBjaGlwIGlzIGNvbXByaXNlZCBvZiBoaWdoIGVmZmljaWVudCBCdWNrCi0JIGNvbnZlcnRlcnMgaW5jbHVkaW5nIER1YWwtUGhhc2UgQnVjayBjb252ZXJ0ZXIsIEJ1Y2stQm9vc3QgY29udmVydGVyLAotCSB2YXJpb3VzIExET3MuCisJIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGEgU2Ftc3VuZyBTMk1QUzExL1MyTVBTMTMvUzJNUFMxNC9TMk1QVTAyIHZvbHRhZ2UKKwkgb3V0cHV0IHJlZ3VsYXRvciB2aWEgSTJDIGJ1cy4gVGhlIGNoaXAgaXMgY29tcHJpc2VkIG9mIGhpZ2ggZWZmaWNpZW50CisJIEJ1Y2sgY29udmVydGVycyBpbmNsdWRpbmcgRHVhbC1QaGFzZSBCdWNrIGNvbnZlcnRlciwgQnVjay1Cb29zdAorCSBjb252ZXJ0ZXIsIHZhcmlvdXMgTERPcy4KIAogY29uZmlnIFJFR1VMQVRPUl9TNU04NzY3CiAJdHJpc3RhdGUgIlNhbXN1bmcgUzVNODc2N0Egdm9sdGFnZSByZWd1bGF0b3IiCkBAIC01NDcsNyArNTU1LDcgQEAKIAogY29uZmlnIFJFR1VMQVRPUl9TS1k4MTQ1MgogCXRyaXN0YXRlICJTa3l3b3JrcyBTb2x1dGlvbnMgU0tZODE0NTIgdm9sdGFnZSByZWd1bGF0b3IiCi0JZGVwZW5kcyBvbiBTS1k4MTQ1MgorCWRlcGVuZHMgb24gTUZEX1NLWTgxNDUyCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgU2t5d29ya3MgU0tZODE0NTIgdm9sdGFnZSBvdXRwdXQgcmVndWxhdG9yCiAJICB2aWEgSTJDIGJ1cy4gU0tZODE0NTIgaGFzIG9uZSB2b2x0YWdlIGxpbmVhciByZWd1bGF0b3IgY2FuIGJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZSBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCmluZGV4IDEwMjllZDMuLjFmMjhlYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCkBAIC02OSw2ICs2OSw3IEBACiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1JDNVQ1ODMpICArPSByYzV0NTgzLXJlZ3VsYXRvci5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1JLODA4KSAgICs9IHJrODA4LXJlZ3VsYXRvci5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1JONVQ2MTgpICs9IHJuNXQ2MTgtcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfUlQ1MDMzKQkrPSBydDUwMzMtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUzJNUEEwMSkgKz0gczJtcGEwMS5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1MyTVBTMTEpICs9IHMybXBzMTEubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9TNU04NzY3KSArPSBzNW04NzY3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2FjdDg4NjUtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9hY3Q4ODY1LXJlZ3VsYXRvci5jCmluZGV4IGFmZDA2ZjkuLjllZWM0NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2FjdDg4NjUtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IuYwpAQCAtNjEsNiArNjEsOCBAQAogI2RlZmluZQlBQ1Q4ODQ2X1JFRzEyX1ZTRVQJMHhhMAogI2RlZmluZQlBQ1Q4ODQ2X1JFRzEyX0NUUkwJMHhhMQogI2RlZmluZQlBQ1Q4ODQ2X1JFRzEzX0NUUkwJMHhiMQorI2RlZmluZQlBQ1Q4ODQ2X0dMQl9PRkZfQ1RSTAkweGMzCisjZGVmaW5lCUFDVDg4NDZfT0ZGX1NZU01BU0sJMHgxOAogCiAvKgogICogQUNUODg2NSBHbG9iYWwgUmVnaXN0ZXIgTWFwLgpAQCAtODQsNiArODYsNyBAQAogI2RlZmluZQlBQ1Q4ODY1X0xETzNfQ1RSTAkweDYxCiAjZGVmaW5lCUFDVDg4NjVfTERPNF9WU0VUCTB4NjQKICNkZWZpbmUJQUNUODg2NV9MRE80X0NUUkwJMHg2NQorI2RlZmluZQlBQ1Q4ODY1X01TVFJPRkYJCTB4MjAKIAogLyoKICAqIEZpZWxkIERlZmluaXRpb25zLgpAQCAtOTgsNiArMTAxLDggQEAKIAogc3RydWN0IGFjdDg4NjUgewogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlpbnQgb2ZmX3JlZzsKKwlpbnQgb2ZmX21hc2s7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWN0ODg2NV9yZWdtYXBfY29uZmlnID0gewpAQCAtMjc1LDYgKzI4MCwxNiBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKmFjdDg4NjVfaTJjX2NsaWVudDsKK3N0YXRpYyB2b2lkIGFjdDg4NjVfcG93ZXJfb2ZmKHZvaWQpCit7CisJc3RydWN0IGFjdDg4NjUgKmFjdDg4NjU7CisKKwlhY3Q4ODY1ID0gaTJjX2dldF9jbGllbnRkYXRhKGFjdDg4NjVfaTJjX2NsaWVudCk7CisJcmVnbWFwX3dyaXRlKGFjdDg4NjUtPnJlZ21hcCwgYWN0ODg2NS0+b2ZmX3JlZywgYWN0ODg2NS0+b2ZmX21hc2spOworCXdoaWxlICgxKTsKK30KKwogc3RhdGljIGludCBhY3Q4ODY1X3BtaWNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppMmNfaWQpCiB7CkBAIC0yODUsNiArMzAwLDcgQEAKIAlpbnQgaSwgcmV0LCBudW1fcmVndWxhdG9yczsKIAlzdHJ1Y3QgYWN0ODg2NSAqYWN0ODg2NTsKIAl1bnNpZ25lZCBsb25nIHR5cGU7CisJaW50IG9mZl9yZWcsIG9mZl9tYXNrOwogCiAJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7CiAKQEAgLTMwNCwxMCArMzIwLDE0IEBACiAJY2FzZSBBQ1Q4ODQ2OgogCQlyZWd1bGF0b3JzID0gYWN0ODg0Nl9yZWd1bGF0b3JzOwogCQludW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUoYWN0ODg0Nl9yZWd1bGF0b3JzKTsKKwkJb2ZmX3JlZyA9IEFDVDg4NDZfR0xCX09GRl9DVFJMOworCQlvZmZfbWFzayA9IEFDVDg4NDZfT0ZGX1NZU01BU0s7CiAJCWJyZWFrOwogCWNhc2UgQUNUODg2NToKIAkJcmVndWxhdG9ycyA9IGFjdDg4NjVfcmVndWxhdG9yczsKIAkJbnVtX3JlZ3VsYXRvcnMgPSBBUlJBWV9TSVpFKGFjdDg4NjVfcmVndWxhdG9ycyk7CisJCW9mZl9yZWcgPSBBQ1Q4ODY1X1NZU19DVFJMOworCQlvZmZfbWFzayA9IEFDVDg4NjVfTVNUUk9GRjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X2VycihkZXYsICJpbnZhbGlkIGRldmljZSBpZCAlbHVcbiIsIHR5cGUpOwpAQCAtMzQ1LDYgKzM2NSwxNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCWlmIChvZl9kZXZpY2VfaXNfc3lzdGVtX3Bvd2VyX2NvbnRyb2xsZXIoZGV2LT5vZl9ub2RlKSkgeworCQlpZiAoIXBtX3Bvd2VyX29mZikgeworCQkJYWN0ODg2NV9pMmNfY2xpZW50ID0gY2xpZW50OworCQkJYWN0ODg2NS0+b2ZmX3JlZyA9IG9mZl9yZWc7CisJCQlhY3Q4ODY1LT5vZmZfbWFzayA9IG9mZl9tYXNrOworCQkJcG1fcG93ZXJfb2ZmID0gYWN0ODg2NV9wb3dlcl9vZmY7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZXQgcG93ZXJvZmYgY2FwYWJpbGl0eSwgYWxyZWFkeSBkZWZpbmVkXG4iKTsKKwkJfQorCX0KKwogCS8qIEZpbmFsbHkgcmVnaXN0ZXIgZGV2aWNlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fcmVndWxhdG9yczsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYyA9ICZyZWd1bGF0b3JzW2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYW5hdG9wLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYW5hdG9wLXJlZ3VsYXRvci5jCmluZGV4IDRmNzMwYWYuLjM1ODY1NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2FuYXRvcC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9hbmF0b3AtcmVndWxhdG9yLmMKQEAgLTE4OSwxNyArMTg5LDE4IEBACiAJaW50IHJldCA9IDA7CiAJdTMyIHZhbDsKIAotCWluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBucCk7CiAJc3JlZyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqc3JlZyksIEdGUF9LRVJORUwpOwogCWlmICghc3JlZykKIAkJcmV0dXJuIC1FTk9NRU07Ci0Jc3JlZy0+aW5pdGRhdGEgPSBpbml0ZGF0YTsKIAlzcmVnLT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVndWxhdG9yLW5hbWUiLCBOVUxMKTsKIAlyZGVzYyA9ICZzcmVnLT5yZGVzYzsKIAlyZGVzYy0+bmFtZSA9IHNyZWctPm5hbWU7CiAJcmRlc2MtPnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKIAlyZGVzYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAorCWluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBucCwgcmRlc2MpOworCXNyZWctPmluaXRkYXRhID0gaW5pdGRhdGE7CisKIAlhbmF0b3BfbnAgPSBvZl9nZXRfcGFyZW50KG5wKTsKIAlpZiAoIWFuYXRvcF9ucCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yODMsNiArMjg0LDE5IEBACiAJCQlzcmVnLT5zZWwgPSAwOwogCQkJc3JlZy0+YnlwYXNzID0gdHJ1ZTsKIAkJfQorCisJCS8qCisJCSAqIEluIGNhc2UgdmRkcHUgd2FzIGRpc2FibGVkIGJ5IHRoZSBib290bG9hZGVyLCB3ZSBuZWVkIHRvIHNldAorCQkgKiBhIHNhbmUgZGVmYXVsdCB1bnRpbCBpbXg2LWNwdWZyZXEgd2FzIHByb2JlZCBhbmQgY2hhbmdlcyB0aGUKKwkJICogdm9sdGFnZSB0byB0aGUgY29ycmVjdCB2YWx1ZS4gSW4gdGhpcyBjYXNlIHdlIHNldCAxLjI1Vi4KKwkJICovCisJCWlmICghc3JlZy0+c2VsICYmICFzdHJjbXAoc3JlZy0+bmFtZSwgInZkZHB1IikpCisJCQlzcmVnLT5zZWwgPSAyMjsKKworCQlpZiAoIXNyZWctPnNlbCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgYSB2YWxpZCBkZWZhdWx0IHZvbHRhZ2Ugc2VsZWN0b3IuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfSBlbHNlIHsKIAkJcmRlc2MtPm9wcyA9ICZhbmF0b3Bfcm9wczsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLWxkbzEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2FyaXpvbmEtbGRvMS5jCmluZGV4IDRjOWRiNTguLmQwNzFiMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2FyaXpvbmEtbGRvMS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2FyaXpvbmEtbGRvMS5jCkBAIC0xNzksNyArMTc5LDggQEAKIH07CiAKIHN0YXRpYyBpbnQgYXJpem9uYV9sZG8xX29mX2dldF9wZGF0YShzdHJ1Y3QgYXJpem9uYSAqYXJpem9uYSwKLQkJCQkgICAgIHN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcpCisJCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCXN0cnVjdCBhcml6b25hX3BkYXRhICpwZGF0YSA9ICZhcml6b25hLT5wZGF0YTsKIAlzdHJ1Y3QgYXJpem9uYV9sZG8xICpsZG8xID0gY29uZmlnLT5kcml2ZXJfZGF0YTsKQEAgLTE5NCw3ICsxOTUsOCBAQAogCWlmIChpbml0X25vZGUpIHsKIAkJY29uZmlnLT5vZl9ub2RlID0gaW5pdF9ub2RlOwogCi0JCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGFyaXpvbmEtPmRldiwgaW5pdF9ub2RlKTsKKwkJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoYXJpem9uYS0+ZGV2LCBpbml0X25vZGUsCisJCQkJCQkgICAgICAgZGVzYyk7CiAKIAkJaWYgKGluaXRfZGF0YSkgewogCQkJaW5pdF9kYXRhLT5jb25zdW1lcl9zdXBwbGllcyA9ICZsZG8xLT5zdXBwbHk7CkBAIC0yNTcsOSArMjU5LDExIEBACiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpKSB7CiAJCWlmICghZGV2X2dldF9wbGF0ZGF0YShhcml6b25hLT5kZXYpKSB7Ci0JCQlyZXQgPSBhcml6b25hX2xkbzFfb2ZfZ2V0X3BkYXRhKGFyaXpvbmEsICZjb25maWcpOworCQkJcmV0ID0gYXJpem9uYV9sZG8xX29mX2dldF9wZGF0YShhcml6b25hLCAmY29uZmlnLCBkZXNjKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7CisKKwkJCWNvbmZpZy5lbmFfZ3Bpb19pbml0aWFsaXplZCA9IHRydWU7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2FyaXpvbmEtbWljc3VwcC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1taWNzdXBwLmMKaW5kZXggY2U5YWNhNS4uYzMxM2VmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1taWNzdXBwLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1taWNzdXBwLmMKQEAgLTE5OCw3ICsxOTgsOCBAQAogfTsKIAogc3RhdGljIGludCBhcml6b25hX21pY3N1cHBfb2ZfZ2V0X3BkYXRhKHN0cnVjdCBhcml6b25hICphcml6b25hLAotCQkJCQlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyAqY29uZmlnKQorCQkJCQlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyAqY29uZmlnLAorCQkJCQljb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGFyaXpvbmFfcGRhdGEgKnBkYXRhID0gJmFyaXpvbmEtPnBkYXRhOwogCXN0cnVjdCBhcml6b25hX21pY3N1cHAgKm1pY3N1cHAgPSBjb25maWctPmRyaXZlcl9kYXRhOwpAQCAtMjEwLDcgKzIxMSw3IEBACiAJaWYgKG5wKSB7CiAJCWNvbmZpZy0+b2Zfbm9kZSA9IG5wOwogCi0JCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGFyaXpvbmEtPmRldiwgbnApOworCQlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShhcml6b25hLT5kZXYsIG5wLCBkZXNjKTsKIAogCQlpZiAoaW5pdF9kYXRhKSB7CiAJCQlpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzID0gJm1pY3N1cHAtPnN1cHBseTsKQEAgLTI2NCw3ICsyNjUsOCBAQAogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSkgewogCQlpZiAoIWRldl9nZXRfcGxhdGRhdGEoYXJpem9uYS0+ZGV2KSkgewotCQkJcmV0ID0gYXJpem9uYV9taWNzdXBwX29mX2dldF9wZGF0YShhcml6b25hLCAmY29uZmlnKTsKKwkJCXJldCA9IGFyaXpvbmFfbWljc3VwcF9vZl9nZXRfcGRhdGEoYXJpem9uYSwgJmNvbmZpZywKKwkJCQkJCQkgICBkZXNjKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwppbmRleCBjZDg3YzBjLi5lMjI1NzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCkBAIC04MjgsNyArODI4LDcgQEAKIAlpZiAoIWNvdW50KQogCQlzcHJpbnRmKGJ1ZiwgIm5vIHBhcmFtZXRlcnMiKTsKIAotCXJkZXZfaW5mbyhyZGV2LCAiJXNcbiIsIGJ1Zik7CisJcmRldl9kYmcocmRldiwgIiVzXG4iLCBidWYpOwogCiAJaWYgKChjb25zdHJhaW50cy0+bWluX3VWICE9IGNvbnN0cmFpbnRzLT5tYXhfdVYpICYmCiAJICAgICEoY29uc3RyYWludHMtPnZhbGlkX29wc19tYXNrICYgUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFKSkKQEAgLTE3MTMsNiArMTcxMyw4IEBACiAJCQkJZ3Bpb2RfcHV0KHBpbi0+Z3Bpb2QpOwogCQkJCWxpc3RfZGVsKCZwaW4tPmxpc3QpOwogCQkJCWtmcmVlKHBpbik7CisJCQkJcmRldi0+ZW5hX3BpbiA9IE5VTEw7CisJCQkJcmV0dXJuOwogCQkJfSBlbHNlIHsKIAkJCQlwaW4tPnJlcXVlc3RfY291bnQtLTsKIAkJCX0KQEAgLTE5NzYsOSArMTk3OCwxOCBAQAogCiAJCS8qIHdlIGFyZSBsYXN0IHVzZXIgKi8KIAkJaWYgKF9yZWd1bGF0b3JfY2FuX2NoYW5nZV9zdGF0dXMocmRldikpIHsKKwkJCXJldCA9IF9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsCisJCQkJCQkgICBSRUdVTEFUT1JfRVZFTlRfUFJFX0RJU0FCTEUsCisJCQkJCQkgICBOVUxMKTsKKwkJCWlmIChyZXQgJiBOT1RJRllfU1RPUF9NQVNLKQorCQkJCXJldHVybiAtRUlOVkFMOworCiAJCQlyZXQgPSBfcmVndWxhdG9yX2RvX2Rpc2FibGUocmRldik7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gZGlzYWJsZVxuIik7CisJCQkJX25vdGlmaWVyX2NhbGxfY2hhaW4ocmRldiwKKwkJCQkJCVJFR1VMQVRPUl9FVkVOVF9BQk9SVF9ESVNBQkxFLAorCQkJCQkJTlVMTCk7CiAJCQkJcmV0dXJuIHJldDsKIAkJCX0KIAkJCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9ESVNBQkxFLApAQCAtMjAzNSw5ICsyMDQ2LDE2IEBACiB7CiAJaW50IHJldCA9IDA7CiAKKwlyZXQgPSBfbm90aWZpZXJfY2FsbF9jaGFpbihyZGV2LCBSRUdVTEFUT1JfRVZFTlRfRk9SQ0VfRElTQUJMRSB8CisJCQlSRUdVTEFUT1JfRVZFTlRfUFJFX0RJU0FCTEUsIE5VTEwpOworCWlmIChyZXQgJiBOT1RJRllfU1RPUF9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJldCA9IF9yZWd1bGF0b3JfZG9fZGlzYWJsZShyZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQlyZGV2X2VycihyZGV2LCAiZmFpbGVkIHRvIGZvcmNlIGRpc2FibGVcbiIpOworCQlfbm90aWZpZXJfY2FsbF9jaGFpbihyZGV2LCBSRUdVTEFUT1JfRVZFTlRfRk9SQ0VfRElTQUJMRSB8CisJCQkJUkVHVUxBVE9SX0VWRU5UX0FCT1JUX0RJU0FCTEUsIE5VTEwpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMzY1MCw3ICszNjY4LDggQEAKIAogCWRldl9zZXRfZHJ2ZGF0YSgmcmRldi0+ZGV2LCByZGV2KTsKIAotCWlmIChjb25maWctPmVuYV9ncGlvICYmIGdwaW9faXNfdmFsaWQoY29uZmlnLT5lbmFfZ3BpbykpIHsKKwlpZiAoKGNvbmZpZy0+ZW5hX2dwaW8gfHwgY29uZmlnLT5lbmFfZ3Bpb19pbml0aWFsaXplZCkgJiYKKwkgICAgZ3Bpb19pc192YWxpZChjb25maWctPmVuYV9ncGlvKSkgewogCQlyZXQgPSByZWd1bGF0b3JfZW5hX2dwaW9fcmVxdWVzdChyZGV2LCBjb25maWcpOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCXJkZXZfZXJyKHJkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBlbmFibGUgR1BJTyVkOiAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTA1Mi1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTA1Mi1yZWd1bGF0b3IuYwppbmRleCAwMDAzMzYyLi4zOTQ1ZjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwNTItcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDUyLXJlZ3VsYXRvci5jCkBAIC00MzYsNyArNDM2LDggQEAKIAkJCWlmICghb2Zfbm9kZV9jbXAobnAtPm5hbWUsCiAJCQkJCSByZWd1bGF0b3ItPmluZm8tPnJlZ19kZXNjLm5hbWUpKSB7CiAJCQkJY29uZmlnLmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKAotCQkJCQkmcGRldi0+ZGV2LCBucCk7CisJCQkJCSZwZGV2LT5kZXYsIG5wLAorCQkJCQkmcmVndWxhdG9yLT5pbmZvLT5yZWdfZGVzYyk7CiAJCQkJY29uZmlnLm9mX25vZGUgPSBucDsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTA2My1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTA2My1yZWd1bGF0b3IuYwppbmRleCA3Yzk0NjFkLi4zN2RkNDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwNjMtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDYzLXJlZ3VsYXRvci5jCkBAIC04NjcsMTcgKzg2NywxNCBAQAogCQlyZXR1cm4gaXJxOwogCX0KIAotCXJlZ3VsYXRvcnMtPmlycV9sZG9fbGltID0gcmVnbWFwX2lycV9nZXRfdmlycShkYTkwNjMtPnJlZ21hcF9pcnEsIGlycSk7Ci0JaWYgKHJlZ3VsYXRvcnMtPmlycV9sZG9fbGltID49IDApIHsKLQkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocmVndWxhdG9ycy0+aXJxX2xkb19saW0sCi0JCQkJCSAgIE5VTEwsIGRhOTA2M19sZG9fbGltX2V2ZW50LAotCQkJCQkgICBJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAotCQkJCQkgICAiTERPX0xJTSIsIHJlZ3VsYXRvcnMpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJCSJGYWlsZWQgdG8gcmVxdWVzdCBMRE9fTElNIElSUS5cbiIpOwotCQkJcmVndWxhdG9ycy0+aXJxX2xkb19saW0gPSAtRU5YSU87Ci0JCX0KKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsCisJCQkJTlVMTCwgZGE5MDYzX2xkb19saW1fZXZlbnQsCisJCQkJSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfT05FU0hPVCwKKwkJCQkiTERPX0xJTSIsIHJlZ3VsYXRvcnMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVxdWVzdCBMRE9fTElNIElSUS5cbiIpOworCQlyZWd1bGF0b3JzLT5pcnFfbGRvX2xpbSA9IC1FTlhJTzsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTIxMC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTIxMC1yZWd1bGF0b3IuYwppbmRleCA3YTMyMGRkLi5iYzYxMDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkyMTAtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MjEwLXJlZ3VsYXRvci5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogCWNvbmZpZy5kZXYgPSAmaTJjLT5kZXY7CiAJY29uZmlnLmluaXRfZGF0YSA9IHBkYXRhID8gJnBkYXRhLT5kYTkyMTBfY29uc3RyYWludHMgOgotCQlvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIGRldi0+b2Zfbm9kZSk7CisJCW9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgZGV2LT5vZl9ub2RlLCAmZGE5MjEwX3JlZyk7CiAJY29uZmlnLmRyaXZlcl9kYXRhID0gY2hpcDsKIAljb25maWcucmVnbWFwID0gY2hpcC0+cmVnbWFwOwogCWNvbmZpZy5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZHVtbXkuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmMKaW5kZXggMjQzNmRiOS4uN2FlZjllNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvZHVtbXkuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9kdW1teS5jCkBAIC0zMyw3ICszMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBkdW1teV9vcHM7CiAKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgZHVtbXlfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgZHVtbXlfZGVzYyA9IHsKIAkubmFtZSA9ICJyZWd1bGF0b3ItZHVtbXkiLAogCS5pZCA9IC0xLAogCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9mYW41MzU1NS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZmFuNTM1NTUuYwppbmRleCBmOGU0MjU3Li42YzQzYWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9mYW41MzU1NS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZhbjUzNTU1LmMKQEAgLTMwMiw3ICszMDIsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBmYW41MzU1NV9wbGF0Zm9ybV9kYXRhICpmYW41MzU1NV9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQkJc3RydWN0IGRldmljZV9ub2RlICpucCkKKwkJCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCXN0cnVjdCBmYW41MzU1NV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlpbnQgcmV0OwpAQCAtMzEyLDcgKzMxMyw3IEBACiAJaWYgKCFwZGF0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlwZGF0YS0+cmVndWxhdG9yID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBucCk7CisJcGRhdGEtPnJlZ3VsYXRvciA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgbnAsIGRlc2MpOwogCiAJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJmY3Msc3VzcGVuZC12b2x0YWdlLXNlbGVjdG9yIiwKIAkJCQkgICAmdG1wKTsKQEAgLTM0NywyMCArMzQ4LDIwIEBACiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgcmV0OwogCisJZGkgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IGZhbjUzNTU1X2RldmljZV9pbmZvKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFkaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJmNsaWVudC0+ZGV2KTsKIAlpZiAoIXBkYXRhKQotCQlwZGF0YSA9IGZhbjUzNTU1X3BhcnNlX2R0KCZjbGllbnQtPmRldiwgbnApOworCQlwZGF0YSA9IGZhbjUzNTU1X3BhcnNlX2R0KCZjbGllbnQtPmRldiwgbnAsICZkaS0+ZGVzYyk7CiAKIAlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+cmVndWxhdG9yKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUGxhdGZvcm0gZGF0YSBub3QgZm91bmQhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGkgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IGZhbjUzNTU1X2RldmljZV9pbmZvKSwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkaSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAlkaS0+cmVndWxhdG9yID0gcGRhdGEtPnJlZ3VsYXRvcjsKIAlpZiAoY2xpZW50LT5kZXYub2Zfbm9kZSkgewogCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCmluZGV4IDM1NDEwNWUuLmQyMWRhMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwpAQCAtNDAsMTMgKzQwLDE1IEBACiAvKioKICAqIG9mX2dldF9maXhlZF92b2x0YWdlX2NvbmZpZyAtIGV4dHJhY3QgZml4ZWRfdm9sdGFnZV9jb25maWcgc3RydWN0dXJlIGluZm8KICAqIEBkZXY6IGRldmljZSByZXF1ZXN0aW5nIGZvciBmaXhlZF92b2x0YWdlX2NvbmZpZworICogQGRlc2M6IHJlZ3VsYXRvciBkZXNjcmlwdGlvbgogICoKICAqIFBvcHVsYXRlcyBmaXhlZF92b2x0YWdlX2NvbmZpZyBzdHJ1Y3R1cmUgYnkgZXh0cmFjdGluZyBkYXRhIGZyb20gZGV2aWNlCiAgKiB0cmVlIG5vZGUsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwb3B1bGF0ZWQgc3RydWN0dXJlIG9mIE5VTEwgaWYgbWVtb3J5CiAgKiBhbGxvYyBmYWlscy4KICAqLwogc3RhdGljIHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyAqCi1vZl9nZXRfZml4ZWRfdm9sdGFnZV9jb25maWcoc3RydWN0IGRldmljZSAqZGV2KQorb2ZfZ2V0X2ZpeGVkX3ZvbHRhZ2VfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnICpjb25maWc7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKQEAgLTU3LDcgKzU5LDcgQEAKIAlpZiAoIWNvbmZpZykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQljb25maWctPmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgZGV2LT5vZl9ub2RlKTsKKwljb25maWctPmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgZGV2LT5vZl9ub2RlLCBkZXNjKTsKIAlpZiAoIWNvbmZpZy0+aW5pdF9kYXRhKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIApAQCAtMTEyLDggKzExNCwxNCBAQAogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNmZyA9IHsgfTsKIAlpbnQgcmV0OwogCisJZHJ2ZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcnZkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWlmIChwZGV2LT5kZXYub2Zfbm9kZSkgewotCQljb25maWcgPSBvZl9nZXRfZml4ZWRfdm9sdGFnZV9jb25maWcoJnBkZXYtPmRldik7CisJCWNvbmZpZyA9IG9mX2dldF9maXhlZF92b2x0YWdlX2NvbmZpZygmcGRldi0+ZGV2LAorCQkJCQkJICAgICAmZHJ2ZGF0YS0+ZGVzYyk7CiAJCWlmIChJU19FUlIoY29uZmlnKSkKIAkJCXJldHVybiBQVFJfRVJSKGNvbmZpZyk7CiAJfSBlbHNlIHsKQEAgLTEyMywxMSArMTMxLDYgQEAKIAlpZiAoIWNvbmZpZykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkcnZkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9kYXRhKSwKLQkJCSAgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWRydmRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJZHJ2ZGF0YS0+ZGVzYy5uYW1lID0gZGV2bV9rc3RyZHVwKCZwZGV2LT5kZXYsCiAJCQkJCSAgY29uZmlnLT5zdXBwbHlfbmFtZSwKIAkJCQkJICBHRlBfS0VSTkVMKTsKQEAgLTE1Nyw4ICsxNjAsMTEgQEAKIAogCWRydmRhdGEtPmRlc2MuZml4ZWRfdVYgPSBjb25maWctPm1pY3Jvdm9sdHM7CiAKLQlpZiAoY29uZmlnLT5ncGlvID49IDApCisJaWYgKGdwaW9faXNfdmFsaWQoY29uZmlnLT5ncGlvKSkgewogCQljZmcuZW5hX2dwaW8gPSBjb25maWctPmdwaW87CisJCWlmIChwZGV2LT5kZXYub2Zfbm9kZSkKKwkJCWNmZy5lbmFfZ3Bpb19pbml0aWFsaXplZCA9IHRydWU7CisJfQogCWNmZy5lbmFfZ3Bpb19pbnZlcnQgPSAhY29uZmlnLT5lbmFibGVfaGlnaDsKIAlpZiAoY29uZmlnLT5lbmFibGVkX2F0X2Jvb3QpIHsKIAkJaWYgKGNvbmZpZy0+ZW5hYmxlX2hpZ2gpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9ncGlvLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZ3Bpby1yZWd1bGF0b3IuYwppbmRleCA5ODliMjNiLi5jODg4YTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9ncGlvLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2dwaW8tcmVndWxhdG9yLmMKQEAgLTEzMyw3ICsxMzMsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBncGlvX3JlZ3VsYXRvcl9jb25maWcgKgotb2ZfZ2V0X2dwaW9fcmVndWxhdG9yX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCitvZl9nZXRfZ3Bpb19yZWd1bGF0b3JfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCXN0cnVjdCBncGlvX3JlZ3VsYXRvcl9jb25maWcgKmNvbmZpZzsKIAljb25zdCBjaGFyICpyZWd0eXBlOwpAQCAtMTQ2LDcgKzE0Nyw3IEBACiAJaWYgKCFjb25maWcpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JY29uZmlnLT5pbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wKTsKKwljb25maWctPmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgbnAsIGRlc2MpOwogCWlmICghY29uZmlnLT5pbml0X2RhdGEpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCkBAIC0xNjIsMzQgKzE2Myw0MSBAQAogCiAJY29uZmlnLT5lbmFibGVfZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG5wLCAiZW5hYmxlLWdwaW8iLCAwKTsKIAotCS8qIEZldGNoIEdQSU9zLiAqLwotCWNvbmZpZy0+bnJfZ3Bpb3MgPSBvZl9ncGlvX2NvdW50KG5wKTsKKwkvKiBGZXRjaCBHUElPcy4gLSBvcHRpb25hbCBwcm9wZXJ0eSovCisJcmV0ID0gb2ZfZ3Bpb19jb3VudChucCk7CisJaWYgKChyZXQgPCAwKSAmJiAocmV0ICE9IC1FTk9FTlQpKQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCi0JY29uZmlnLT5ncGlvcyA9IGRldm1fa3phbGxvYyhkZXYsCi0JCQkJc2l6ZW9mKHN0cnVjdCBncGlvKSAqIGNvbmZpZy0+bnJfZ3Bpb3MsCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb25maWctPmdwaW9zKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlpZiAocmV0ID4gMCkgeworCQljb25maWctPm5yX2dwaW9zID0gcmV0OworCQljb25maWctPmdwaW9zID0gZGV2bV9remFsbG9jKGRldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBncGlvKSAqIGNvbmZpZy0+bnJfZ3Bpb3MsCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIWNvbmZpZy0+Z3Bpb3MpCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCXByb3BsZW4gPSBvZl9wcm9wZXJ0eV9jb3VudF91MzJfZWxlbXMobnAsICJncGlvcy1zdGF0ZXMiKTsKLQkvKiBvcHRpb25hbCBwcm9wZXJ0eSAqLwotCWlmIChwcm9wbGVuIDwgMCkKLQkJcHJvcGxlbiA9IDA7CisJCXByb3BsZW4gPSBvZl9wcm9wZXJ0eV9jb3VudF91MzJfZWxlbXMobnAsICJncGlvcy1zdGF0ZXMiKTsKKwkJLyogb3B0aW9uYWwgcHJvcGVydHkgKi8KKwkJaWYgKHByb3BsZW4gPCAwKQorCQkJcHJvcGxlbiA9IDA7CiAKLQlpZiAocHJvcGxlbiA+IDAgJiYgcHJvcGxlbiAhPSBjb25maWctPm5yX2dwaW9zKSB7Ci0JCWRldl93YXJuKGRldiwgImdwaW9zIDwtPiBncGlvcy1zdGF0ZXMgbWlzbWF0Y2hcbiIpOwotCQlwcm9wbGVuID0gMDsKLQl9CisJCWlmIChwcm9wbGVuID4gMCAmJiBwcm9wbGVuICE9IGNvbmZpZy0+bnJfZ3Bpb3MpIHsKKwkJCWRldl93YXJuKGRldiwgImdwaW9zIDwtPiBncGlvcy1zdGF0ZXMgbWlzbWF0Y2hcbiIpOworCQkJcHJvcGxlbiA9IDA7CisJCX0KIAotCWZvciAoaSA9IDA7IGkgPCBjb25maWctPm5yX2dwaW9zOyBpKyspIHsKLQkJZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG5wLCAiZ3Bpb3MiLCBpKTsKLQkJaWYgKGdwaW8gPCAwKQotCQkJYnJlYWs7Ci0JCWNvbmZpZy0+Z3Bpb3NbaV0uZ3BpbyA9IGdwaW87Ci0JCWlmIChwcm9wbGVuID4gMCkgewotCQkJb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJncGlvcy1zdGF0ZXMiLCBpLCAmcmV0KTsKLQkJCWlmIChyZXQpCi0JCQkJY29uZmlnLT5ncGlvc1tpXS5mbGFncyA9IEdQSU9GX09VVF9JTklUX0hJR0g7CisJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPm5yX2dwaW9zOyBpKyspIHsKKwkJCWdwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgImdwaW9zIiwgaSk7CisJCQlpZiAoZ3BpbyA8IDApCisJCQkJYnJlYWs7CisJCQljb25maWctPmdwaW9zW2ldLmdwaW8gPSBncGlvOworCQkJaWYgKHByb3BsZW4gPiAwKSB7CisJCQkJb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJncGlvcy1zdGF0ZXMiLAorCQkJCQkJCSAgIGksICZyZXQpOworCQkJCWlmIChyZXQpCisJCQkJCWNvbmZpZy0+Z3Bpb3NbaV0uZmxhZ3MgPQorCQkJCQkJCSAgIEdQSU9GX09VVF9JTklUX0hJR0g7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTI0MywxNyArMjUxLDE4IEBACiAJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY2ZnID0geyB9OwogCWludCBwdHIsIHJldCwgc3RhdGU7CiAKLQlpZiAobnApIHsKLQkJY29uZmlnID0gb2ZfZ2V0X2dwaW9fcmVndWxhdG9yX2NvbmZpZygmcGRldi0+ZGV2LCBucCk7Ci0JCWlmIChJU19FUlIoY29uZmlnKSkKLQkJCXJldHVybiBQVFJfRVJSKGNvbmZpZyk7Ci0JfQotCiAJZHJ2ZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGdwaW9fcmVndWxhdG9yX2RhdGEpLAogCQkJICAgICAgIEdGUF9LRVJORUwpOwogCWlmIChkcnZkYXRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWYgKG5wKSB7CisJCWNvbmZpZyA9IG9mX2dldF9ncGlvX3JlZ3VsYXRvcl9jb25maWcoJnBkZXYtPmRldiwgbnAsCisJCQkJCQkgICAgICAmZHJ2ZGF0YS0+ZGVzYyk7CisJCWlmIChJU19FUlIoY29uZmlnKSkKKwkJCXJldHVybiBQVFJfRVJSKGNvbmZpZyk7CisJfQorCiAJZHJ2ZGF0YS0+ZGVzYy5uYW1lID0ga3N0cmR1cChjb25maWctPnN1cHBseV9uYW1lLCBHRlBfS0VSTkVMKTsKIAlpZiAoZHJ2ZGF0YS0+ZGVzYy5uYW1lID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHN1cHBseSBuYW1lXG4iKTsKQEAgLTI2MSwxMyArMjcwLDIzIEBACiAJCWdvdG8gZXJyOwogCX0KIAotCWRydmRhdGEtPmdwaW9zID0ga21lbWR1cChjb25maWctPmdwaW9zLAotCQkJCSBjb25maWctPm5yX2dwaW9zICogc2l6ZW9mKHN0cnVjdCBncGlvKSwKLQkJCQkgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRydmRhdGEtPmdwaW9zID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGdwaW8gZGF0YVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX25hbWU7CisJaWYgKGNvbmZpZy0+bnJfZ3Bpb3MgIT0gMCkgeworCQlkcnZkYXRhLT5ncGlvcyA9IGttZW1kdXAoY29uZmlnLT5ncGlvcywKKwkJCQkJIGNvbmZpZy0+bnJfZ3Bpb3MgKiBzaXplb2Yoc3RydWN0IGdwaW8pLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmIChkcnZkYXRhLT5ncGlvcyA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZ3BpbyBkYXRhXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9uYW1lOworCQl9CisKKwkJZHJ2ZGF0YS0+bnJfZ3Bpb3MgPSBjb25maWctPm5yX2dwaW9zOworCQlyZXQgPSBncGlvX3JlcXVlc3RfYXJyYXkoZHJ2ZGF0YS0+Z3Bpb3MsIGRydmRhdGEtPm5yX2dwaW9zKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkNvdWxkIG5vdCBvYnRhaW4gcmVndWxhdG9yIHNldHRpbmcgR1BJT3M6ICVkXG4iLCByZXQpOworCQkJZ290byBlcnJfbWVtc3RhdGU7CisJCX0KIAl9CiAKIAlkcnZkYXRhLT5zdGF0ZXMgPSBrbWVtZHVwKGNvbmZpZy0+c3RhdGVzLApAQCAtMzAxLDE0ICszMjAsNiBAQAogCQlnb3RvIGVycl9tZW1ncGlvOwogCX0KIAotCWRydmRhdGEtPm5yX2dwaW9zID0gY29uZmlnLT5ucl9ncGlvczsKLQlyZXQgPSBncGlvX3JlcXVlc3RfYXJyYXkoZHJ2ZGF0YS0+Z3Bpb3MsIGRydmRhdGEtPm5yX2dwaW9zKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJICAgIkNvdWxkIG5vdCBvYnRhaW4gcmVndWxhdG9yIHNldHRpbmcgR1BJT3M6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9tZW1zdGF0ZTsKLQl9Ci0KIAkvKiBidWlsZCBpbml0aWFsIHN0YXRlIGZyb20gZ3BpbyBpbml0IGRhdGEuICovCiAJc3RhdGUgPSAwOwogCWZvciAocHRyID0gMDsgcHRyIDwgZHJ2ZGF0YS0+bnJfZ3Bpb3M7IHB0cisrKSB7CkBAIC0zMjIsOCArMzMzLDEwIEBACiAJY2ZnLmRyaXZlcl9kYXRhID0gZHJ2ZGF0YTsKIAljZmcub2Zfbm9kZSA9IG5wOwogCi0JaWYgKGNvbmZpZy0+ZW5hYmxlX2dwaW8gPj0gMCkKKwlpZiAoZ3Bpb19pc192YWxpZChjb25maWctPmVuYWJsZV9ncGlvKSkgewogCQljZmcuZW5hX2dwaW8gPSBjb25maWctPmVuYWJsZV9ncGlvOworCQljZmcuZW5hX2dwaW9faW5pdGlhbGl6ZWQgPSB0cnVlOworCX0KIAljZmcuZW5hX2dwaW9faW52ZXJ0ID0gIWNvbmZpZy0+ZW5hYmxlX2hpZ2g7CiAJaWYgKGNvbmZpZy0+ZW5hYmxlZF9hdF9ib290KSB7CiAJCWlmIChjb25maWctPmVuYWJsZV9oaWdoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTU4Ni5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTU4Ni5jCmluZGV4IDg2ZGIzMTAuLmQyYThjNjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXgxNTg2LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTU4Ni5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkJCQkgc3RydWN0IG1heDE1ODZfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7CiAJc3RydWN0IG1heDE1ODZfc3ViZGV2X2RhdGEgKnN1YjsKLQlzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoIHJtYXRjaFtBUlJBWV9TSVpFKG1heDE1ODZfcmVnKV07CisJc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCBybWF0Y2hbQVJSQVlfU0laRShtYXgxNTg2X3JlZyldID0geyB9OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CiAJaW50IGksIG1hdGNoZWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21heDc3Njg2LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY4Ni5jCmluZGV4IGVmMWFmMmQuLjg3MWI5NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDc3Njg2LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc2ODYuYwpAQCAtNDUsNiArNDUsMjMgQEAKICNkZWZpbmUgTUFYNzc2ODZfRFZTX01JTlVWCTYwMDAwMAogI2RlZmluZSBNQVg3NzY4Nl9EVlNfVVZTVEVQCTEyNTAwCiAKKy8qCisgKiBWYWx1ZXMgdXNlZCBmb3IgY29uZmlndXJpbmcgTERPcyBhbmQgYnVja3MuCisgKiBGb3JjaW5nIGxvdyBwb3dlciBtb2RlOiBMRE8xLCAzLTUsIDksIDEzLCAxNy0yNgorICovCisjZGVmaW5lIE1BWDc3Njg2X0xET19MT1dQT1dFUgkJMHgxCisvKgorICogT24vb2ZmIGNvbnRyb2xsZWQgYnkgUFdSUkVROgorICogIC0gTERPMiwgNi04LCAxMC0xMiwgMTQtMTYKKyAqICAtIGJ1Y2tbMTIzNF0KKyAqLworI2RlZmluZSBNQVg3NzY4Nl9PRkZfUFdSUkVRCQkweDEKKy8qIExvdyBwb3dlciBtb2RlIGNvbnRyb2xsZWQgYnkgUFdSUkVROiBBbGwgTERPcyAqLworI2RlZmluZSBNQVg3NzY4Nl9MRE9fTE9XUE9XRVJfUFdSUkVRCTB4MgorLyogRm9yY2luZyBsb3cgcG93ZXIgbW9kZTogYnVja1syMzRdICovCisjZGVmaW5lIE1BWDc3Njg2X0JVQ0tfTE9XUE9XRVIJCTB4MgorI2RlZmluZSBNQVg3NzY4Nl9OT1JNQUwJCQkweDMKKwogI2RlZmluZSBNQVg3NzY4Nl9PUE1PREVfU0hJRlQJNgogI2RlZmluZSBNQVg3NzY4Nl9PUE1PREVfQlVDSzIzNF9TSElGVAk0CiAjZGVmaW5lIE1BWDc3Njg2X09QTU9ERV9NQVNLCTB4MwpAQCAtNjUsMjMgKzgyLDM2IEBACiB9OwogCiBzdHJ1Y3QgbWF4Nzc2ODZfZGF0YSB7CisJLyogQXJyYXkgaW5kZXhlZCBieSByZWd1bGF0b3IgaWQgKi8KIAl1bnNpZ25lZCBpbnQgb3Btb2RlW01BWDc3Njg2X1JFR1VMQVRPUlNdOwogfTsKIAotLyogU29tZSBCVUNLUyBzdXBwb3J0cyBOb3JtYWxbT04vT0ZGXSBtb2RlIGR1cmluZyBzdXNwZW5kICovCi1zdGF0aWMgaW50IG1heDc3Njg2X2J1Y2tfc2V0X3N1c3BlbmRfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4Nzc2ODZfZ2V0X29wbW9kZV9zaGlmdChpbnQgaWQpCiB7Ci0JdW5zaWduZWQgaW50IHZhbDsKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBNQVg3NzY4Nl9CVUNLMToKKwljYXNlIE1BWDc3Njg2X0JVQ0s1IC4uLiBNQVg3NzY4Nl9CVUNLOToKKwkJcmV0dXJuIDA7CisJY2FzZSBNQVg3NzY4Nl9CVUNLMiAuLi4gTUFYNzc2ODZfQlVDSzQ6CisJCXJldHVybiBNQVg3NzY4Nl9PUE1PREVfQlVDSzIzNF9TSElGVDsKKwlkZWZhdWx0OgorCQkvKiBhbGwgTERPcyAqLworCQlyZXR1cm4gTUFYNzc2ODZfT1BNT0RFX1NISUZUOworCX0KK30KKworLyogU29tZSBCVUNLcyBhbmQgTERPcyBzdXBwb3J0cyBOb3JtYWxbT04vT0ZGXSBtb2RlIGR1cmluZyBzdXNwZW5kICovCitzdGF0aWMgaW50IG1heDc3Njg2X3NldF9zdXNwZW5kX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbCwgc2hpZnQ7CiAJc3RydWN0IG1heDc3Njg2X2RhdGEgKm1heDc3Njg2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgcmV0LCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwogCi0JaWYgKGlkID09IE1BWDc3Njg2X0JVQ0sxKQotCQl2YWwgPSAweDE7Ci0JZWxzZQotCQl2YWwgPSAweDEgPDwgTUFYNzc2ODZfT1BNT0RFX0JVQ0syMzRfU0hJRlQ7CisJc2hpZnQgPSBtYXg3NzY4Nl9nZXRfb3Btb2RlX3NoaWZ0KGlkKTsKKwl2YWwgPSBNQVg3NzY4Nl9PRkZfUFdSUkVROwogCiAJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKLQkJCQkgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssIHZhbCk7CisJCQkJIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLCB2YWwgPDwgc2hpZnQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTEwMywxMCArMTMzLDEwIEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFJFR1VMQVRPUl9NT0RFX0lETEU6CQkJLyogT04gaW4gTFAgTW9kZSAqLwotCQl2YWwgPSAweDIgPDwgTUFYNzc2ODZfT1BNT0RFX1NISUZUOworCQl2YWwgPSBNQVg3NzY4Nl9MRE9fTE9XUE9XRVJfUFdSUkVROwogCQlicmVhazsKIAljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoJCQkvKiBPTiBpbiBOb3JtYWwgTW9kZSAqLwotCQl2YWwgPSAweDMgPDwgTUFYNzc2ODZfT1BNT0RFX1NISUZUOworCQl2YWwgPSBNQVg3NzY4Nl9OT1JNQUw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX3dhcm4oIiVzOiByZWd1bGF0b3Jfc3VzcGVuZF9tb2RlIDogMHgleCBub3Qgc3VwcG9ydGVkXG4iLApAQCAtMTE1LDcgKzE0NSw4IEBACiAJfQogCiAJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKLQkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLCB2YWwpOworCQkJCSAgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssCisJCQkJICB2YWwgPDwgTUFYNzc2ODZfT1BNT0RFX1NISUZUKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMzMsMTMgKzE2NCwxMyBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOgkJCS8qIHN3aXRjaCBvZmYgKi8KLQkJdmFsID0gMHgxIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVDsKKwkJdmFsID0gTUFYNzc2ODZfT0ZGX1BXUlJFUTsKIAkJYnJlYWs7CiAJY2FzZSBSRUdVTEFUT1JfTU9ERV9JRExFOgkJCS8qIE9OIGluIExQIE1vZGUgKi8KLQkJdmFsID0gMHgyIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVDsKKwkJdmFsID0gTUFYNzc2ODZfTERPX0xPV1BPV0VSX1BXUlJFUTsKIAkJYnJlYWs7CiAJY2FzZSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw6CQkJLyogT04gaW4gTm9ybWFsIE1vZGUgKi8KLQkJdmFsID0gMHgzIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVDsKKwkJdmFsID0gTUFYNzc2ODZfTk9STUFMOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl93YXJuKCIlczogcmVndWxhdG9yX3N1c3BlbmRfbW9kZSA6IDB4JXggbm90IHN1cHBvcnRlZFxuIiwKQEAgLTE0OCw3ICsxNzksOCBAQAogCX0KIAogCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcsCi0JCQkJIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLCB2YWwpOworCQkJCSByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywKKwkJCQkgdmFsIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTU5LDEwICsxOTEsMTcgQEAKIHN0YXRpYyBpbnQgbWF4Nzc2ODZfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCBtYXg3NzY4Nl9kYXRhICptYXg3NzY4NiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJdW5zaWduZWQgaW50IHNoaWZ0OworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCisJc2hpZnQgPSBtYXg3NzY4Nl9nZXRfb3Btb2RlX3NoaWZ0KGlkKTsKKworCWlmIChtYXg3NzY4Ni0+b3Btb2RlW2lkXSA9PSBNQVg3NzY4Nl9PRkZfUFdSUkVRKQorCQltYXg3NzY4Ni0+b3Btb2RlW2lkXSA9IE1BWDc3Njg2X05PUk1BTDsKIAogCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocmRldi0+cmVnbWFwLCByZGV2LT5kZXNjLT5lbmFibGVfcmVnLAogCQkJCSAgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssCi0JCQkJICBtYXg3NzY4Ni0+b3Btb2RlW3JkZXZfZ2V0X2lkKHJkZXYpXSk7CisJCQkJICBtYXg3NzY4Ni0+b3Btb2RlW2lkXSA8PCBzaGlmdCk7CiB9CiAKIHN0YXRpYyBpbnQgbWF4Nzc2ODZfc2V0X3JhbXBfZGVsYXkoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCByYW1wX2RlbGF5KQpAQCAtMjEyLDYgKzI1MSw3IEBACiAJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKIAkuc2V0X3N1c3BlbmRfbW9kZQk9IG1heDc3Njg2X2xkb19zZXRfc3VzcGVuZF9tb2RlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4Nzc2ODZfc2V0X3N1c3BlbmRfZGlzYWJsZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYXg3NzY4Nl9idWNrMV9vcHMgPSB7CkBAIC0yMjMsNyArMjYzLDcgQEAKIAkuZ2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKLQkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3Njg2X2J1Y2tfc2V0X3N1c3BlbmRfZGlzYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3Njg2X3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWF4Nzc2ODZfYnVja19kdnNfb3BzID0gewpAQCAtMjM2LDExICsyNzYsMTMgQEAKIAkuc2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3RpbWVfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3RpbWVfc2VsLAogCS5zZXRfcmFtcF9kZWxheQkJPSBtYXg3NzY4Nl9zZXRfcmFtcF9kZWxheSwKLQkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3Njg2X2J1Y2tfc2V0X3N1c3BlbmRfZGlzYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3Njg2X3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiAjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX2xkbyhudW0pCQl7CQkJCVwKIAkubmFtZQkJPSAiTERPIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJMRE8iI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInZvbHRhZ2UtcmVndWxhdG9ycyIpLAlcCiAJLmlkCQk9IE1BWDc3Njg2X0xETyMjbnVtLAkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc2ODZfb3BzLAkJCQlcCiAJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKQEAgLTI1Nyw2ICsyOTksOCBAQAogfQogI2RlZmluZSByZWd1bGF0b3JfZGVzY19scG1fbGRvKG51bSkJewkJCQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9MRE8jI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X2xkb19vcHMsCQkJCVwKIAkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXApAQCAtMjczLDYgKzMxNyw4IEBACiB9CiAjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX2xkb19sb3cobnVtKQkJewkJCVwKIAkubmFtZQkJPSAiTERPIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJMRE8iI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInZvbHRhZ2UtcmVndWxhdG9ycyIpLAlcCiAJLmlkCQk9IE1BWDc3Njg2X0xETyMjbnVtLAkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc2ODZfbGRvX29wcywJCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0yODksNiArMzM1LDggQEAKIH0KICNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfbGRvMV9sb3cobnVtKQkJewkJCVwKIAkubmFtZQkJPSAiTERPIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJMRE8iI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInZvbHRhZ2UtcmVndWxhdG9ycyIpLAlcCiAJLmlkCQk9IE1BWDc3Njg2X0xETyMjbnVtLAkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc2ODZfb3BzLAkJCQlcCiAJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKQEAgLTMwNSw2ICszNTMsOCBAQAogfQogI2RlZmluZSByZWd1bGF0b3JfZGVzY19idWNrKG51bSkJCXsJCQlcCiAJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkJVQ0siI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInZvbHRhZ2UtcmVndWxhdG9ycyIpLAlcCiAJLmlkCQk9IE1BWDc3Njg2X0JVQ0sjI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X29wcywJCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0zMjAsNiArMzcwLDggQEAKIH0KICNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfYnVjazEobnVtKQkJewkJCVwKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiQlVDSyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigidm9sdGFnZS1yZWd1bGF0b3JzIiksCVwKIAkuaWQJCT0gTUFYNzc2ODZfQlVDSyMjbnVtLAkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc2ODZfYnVjazFfb3BzLAkJCQlcCiAJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKQEAgLTMzNSw2ICszODcsOCBAQAogfQogI2RlZmluZSByZWd1bGF0b3JfZGVzY19idWNrX2R2cyhudW0pCQl7CQkJXAogCS5uYW1lCQk9ICJCVUNLIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJCVUNLIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9CVUNLIyNudW0sCQkJCVwKIAkub3BzCQk9ICZtYXg3NzY4Nl9idWNrX2R2c19vcHMsCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0zNTAsNyArNDA0LDcgQEAKIAkJCTw8IE1BWDc3Njg2X09QTU9ERV9CVUNLMjM0X1NISUZULAkJXAogfQogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgcmVndWxhdG9yc1tdID0gewogCXJlZ3VsYXRvcl9kZXNjX2xkbzFfbG93KDEpLAogCXJlZ3VsYXRvcl9kZXNjX2xkb19sb3coMiksCiAJcmVndWxhdG9yX2Rlc2NfbGRvKDMpLApAQCAtMzg4LDEwMyArNDQyLDM3IEBACiAJcmVndWxhdG9yX2Rlc2NfYnVjayg5KSwKIH07CiAKLSNpZmRlZiBDT05GSUdfT0YKLXN0YXRpYyBpbnQgbWF4Nzc2ODZfcG1pY19kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQlzdHJ1Y3QgbWF4Nzc2ODZfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCi17Ci0Jc3RydWN0IG1heDc3Njg2X2RldiAqaW9kZXYgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwbWljX25wLCAqcmVndWxhdG9yc19ucDsKLQlzdHJ1Y3QgbWF4Nzc2ODZfcmVndWxhdG9yX2RhdGEgKnJkYXRhOwotCXN0cnVjdCBvZl9yZWd1bGF0b3JfbWF0Y2ggcm1hdGNoOwotCXVuc2lnbmVkIGludCBpOwotCi0JcG1pY19ucCA9IGlvZGV2LT5kZXYtPm9mX25vZGU7Ci0JcmVndWxhdG9yc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBtaWNfbnAsICJ2b2x0YWdlLXJlZ3VsYXRvcnMiKTsKLQlpZiAoIXJlZ3VsYXRvcnNfbnApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGZpbmQgcmVndWxhdG9ycyBzdWItbm9kZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXBkYXRhLT5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUocmVndWxhdG9ycyk7Ci0JcmRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpyZGF0YSkgKgotCQkJICAgICBwZGF0YS0+bnVtX3JlZ3VsYXRvcnMsIEdGUF9LRVJORUwpOwotCWlmICghcmRhdGEpIHsKLQkJb2Zfbm9kZV9wdXQocmVndWxhdG9yc19ucCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JlZ3VsYXRvcnM7IGkrKykgewotCQlybWF0Y2gubmFtZSA9IHJlZ3VsYXRvcnNbaV0ubmFtZTsKLQkJcm1hdGNoLmluaXRfZGF0YSA9IE5VTEw7Ci0JCXJtYXRjaC5vZl9ub2RlID0gTlVMTDsKLQkJb2ZfcmVndWxhdG9yX21hdGNoKCZwZGV2LT5kZXYsIHJlZ3VsYXRvcnNfbnAsICZybWF0Y2gsIDEpOwotCQlyZGF0YVtpXS5pbml0ZGF0YSA9IHJtYXRjaC5pbml0X2RhdGE7Ci0JCXJkYXRhW2ldLm9mX25vZGUgPSBybWF0Y2gub2Zfbm9kZTsKLQl9Ci0KLQlwZGF0YS0+cmVndWxhdG9ycyA9IHJkYXRhOwotCW9mX25vZGVfcHV0KHJlZ3VsYXRvcnNfbnApOwotCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotc3RhdGljIGludCBtYXg3NzY4Nl9wbWljX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCXN0cnVjdCBtYXg3NzY4Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfT0YgKi8KLQogc3RhdGljIGludCBtYXg3NzY4Nl9wbWljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG1heDc3Njg2X2RldiAqaW9kZXYgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IG1heDc3Njg2X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShpb2Rldi0+ZGV2KTsKIAlzdHJ1Y3QgbWF4Nzc2ODZfZGF0YSAqbWF4Nzc2ODY7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IGk7CiAJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY29uZmlnID0geyB9OwogCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCWlmICghcGRhdGEpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBmb3VuZCBmb3IgcmVndWxhdG9yXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGlvZGV2LT5kZXYtPm9mX25vZGUpIHsKLQkJcmV0ID0gbWF4Nzc2ODZfcG1pY19kdF9wYXJzZV9wZGF0YShwZGV2LCBwZGF0YSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChwZGF0YS0+bnVtX3JlZ3VsYXRvcnMgIT0gTUFYNzc2ODZfUkVHVUxBVE9SUykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiSW52YWxpZCBpbml0aWFsIGRhdGEgZm9yIHJlZ3VsYXRvcidzIGluaXRpYWxpYXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAltYXg3NzY4NiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IG1heDc3Njg2X2RhdGEpLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghbWF4Nzc2ODYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29uZmlnLmRldiA9ICZwZGV2LT5kZXY7CisJY29uZmlnLmRldiA9IGlvZGV2LT5kZXY7CiAJY29uZmlnLnJlZ21hcCA9IGlvZGV2LT5yZWdtYXA7CiAJY29uZmlnLmRyaXZlcl9kYXRhID0gbWF4Nzc2ODY7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWF4Nzc2ODYpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWDc3Njg2X1JFR1VMQVRPUlM7IGkrKykgewogCQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKwkJaW50IGlkID0gcmVndWxhdG9yc1tpXS5pZDsKIAotCQljb25maWcuaW5pdF9kYXRhID0gcGRhdGEtPnJlZ3VsYXRvcnNbaV0uaW5pdGRhdGE7Ci0JCWNvbmZpZy5vZl9ub2RlID0gcGRhdGEtPnJlZ3VsYXRvcnNbaV0ub2Zfbm9kZTsKLQotCQltYXg3NzY4Ni0+b3Btb2RlW2ldID0gcmVndWxhdG9yc1tpXS5lbmFibGVfbWFzazsKKwkJbWF4Nzc2ODYtPm9wbW9kZVtpZF0gPSBNQVg3NzY4Nl9OT1JNQUw7CiAJCXJkZXYgPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcigmcGRldi0+ZGV2LAogCQkJCQkJJnJlZ3VsYXRvcnNbaV0sICZjb25maWcpOwogCQlpZiAoSVNfRVJSKHJkZXYpKSB7CisJCQlpbnQgcmV0ID0gUFRSX0VSUihyZGV2KTsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkicmVndWxhdG9yIGluaXQgZmFpbGVkIGZvciAlZFxuIiwgaSk7Ci0JCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwkJCQkicmVndWxhdG9yIGluaXQgZmFpbGVkIGZvciAlZDogJWRcbiIsIGksIHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY5My5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc2OTMuYwppbmRleCBjNjdmZjA1Li43Yjk3NTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY5My5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3NjkzLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCS5lbmFibGVfbWFzawk9IFNBRkVPVVRfQ1RSTF9FTlNBRkVPVVQjI19udW0jI19NQVNLICwJXAogfQogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgcmVndWxhdG9yc1tdID0gewogCXJlZ3VsYXRvcl9kZXNjX2VzYWZlb3V0KDEpLAogCXJlZ3VsYXRvcl9kZXNjX2VzYWZlb3V0KDIpLAogCXsKQEAgLTIyNyw3ICsyMjcsNyBAQAogCXN0cnVjdCBtYXg3NzY5M19kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBtYXg3NzY5M19yZWd1bGF0b3JfZGF0YSAqcmRhdGEgPSBOVUxMOwogCWludCBudW1fcmRhdGEsIGk7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY29uZmlnOworCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKIAogCW51bV9yZGF0YSA9IG1heDc3NjkzX3BtaWNfaW5pdF9yZGF0YSgmcGRldi0+ZGV2LCAmcmRhdGEpOwogCWlmICghcmRhdGEgfHwgbnVtX3JkYXRhIDw9IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21heDc3ODAyLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzgwMi5jCmluZGV4IGQ4OTc5MmIuLjA3NjY2MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDc3ODAyLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc4MDIuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvbWF4Nzc2ODYuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvbWF4Nzc2ODYtcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3JlZ3VsYXRvci9tYXhpbSxtYXg3NzgwMi5oPgogCiAvKiBEZWZhdWx0IHJhbXAgZGVsYXkgaW4gY2FzZSBpdCBpcyBub3QgbWFudWFsbHkgc2V0ICovCiAjZGVmaW5lIE1BWDc3ODAyX1JBTVBfREVMQVkJCTEwMDAwMAkJLyogdVYvdXMgKi8KQEAgLTQ5LDYgKzUwLDEwIEBACiAjZGVmaW5lIE1BWDc3ODAyX1JBTVBfUkFURV9NQVNLXzRCSVQJMHhGMAogI2RlZmluZSBNQVg3NzgwMl9SQU1QX1JBVEVfU0hJRlRfNEJJVAk0CiAKKyNkZWZpbmUgTUFYNzc4MDJfU1RBVFVTX09GRgkJMHgwCisjZGVmaW5lIE1BWDc3ODAyX09GRl9QV1JSRVEJCTB4MQorI2RlZmluZSBNQVg3NzgwMl9MUF9QV1JSRVEJCTB4MgorCiAvKiBNQVg3NzgwMiBoYXMgdHdvIHJlZ2lzdGVyIGZvcm1hdHM6IDItYml0IGFuZCA0LWJpdCAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByYW1wX3RhYmxlXzc3ODAyXzJiaXRbXSA9IHsKIAkxMjUwMCwKQEAgLTY1LDkgKzcwLDE2IEBACiB9OwogCiBzdHJ1Y3QgbWF4Nzc4MDJfcmVndWxhdG9yX3BydiB7CisJLyogQXJyYXkgaW5kZXhlZCBieSByZWd1bGF0b3IgaWQgKi8KIAl1bnNpZ25lZCBpbnQgb3Btb2RlW01BWDc3ODAyX1JFR19NQVhdOwogfTsKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWF4Nzc4MDJfbWFwX21vZGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJcmV0dXJuIG1vZGUgPT0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTCA/CisJCVJFR1VMQVRPUl9NT0RFX05PUk1BTCA6IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk7Cit9CisKIHN0YXRpYyBpbnQgbWF4Nzc4MDJfZ2V0X29wbW9kZV9zaGlmdChpbnQgaWQpCiB7CiAJaWYgKGlkID09IE1BWDc3ODAyX0JVQ0sxIHx8IChpZCA+PSBNQVg3NzgwMl9CVUNLNSAmJgpAQCAtODMsMTcgKzk1LDE2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLS8qCi0gKiBTb21lIEJVQ0tTIHN1cHBvcnRzIE5vcm1hbFtPTi9PRkZdIG1vZGUgZHVyaW5nIHN1c3BlbmQKKy8qKgorICogbWF4Nzc4MDJfc2V0X3N1c3BlbmRfZGlzYWJsZSAtIERpc2FibGUgdGhlIHJlZ3VsYXRvciBkdXJpbmcgc3lzdGVtIHN1c3BlbmQKKyAqIEByZGV2OiByZWd1bGF0b3IgdG8gbWFyayBhcyBkaXNhYmxlZAogICoKLSAqIEJVQ0sgMSwgNiwgMi00LCA1LCA3LTEwIChhbGwpCi0gKgotICogVGhlIG90aGVyIG1vZGUgKDB4MDIpIHdpbGwgbWFrZSBQV1JSRVEgc3dpdGNoIGJldHdlZW4gbm9ybWFsCi0gKiBhbmQgbG93IHBvd2VyLgorICogQWxsIHJlZ3VsYXRvcnMgZXhwZWN0IExETyAxLCAzLCAyMCBhbmQgMjEgc3VwcG9ydCBPRkYgYnkgUFdSUkVRLgorICogQ29uZmlndXJlIHRoZSByZWd1bGF0b3Igc28gdGhlIFBNSUMgd2lsbCB0dXJuIGl0IE9GRiBkdXJpbmcgc3lzdGVtIHN1c3BlbmQuCiAgKi8KLXN0YXRpYyBpbnQgbWF4Nzc4MDJfYnVja19zZXRfc3VzcGVuZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQorc3RhdGljIGludCBtYXg3NzgwMl9zZXRfc3VzcGVuZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCXVuc2lnbmVkIGludCB2YWwgPSBNQVg3NzgwMl9PUE1PREVfU1RBTkRCWTsKKwl1bnNpZ25lZCBpbnQgdmFsID0gTUFYNzc4MDJfT0ZGX1BXUlJFUTsKIAlzdHJ1Y3QgbWF4Nzc4MDJfcmVndWxhdG9yX3BydiAqbWF4Nzc4MDIgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwogCWludCBzaGlmdCA9IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaWQpOwpAQCAtMTA0LDE0ICsxMTUsMTEgQEAKIH0KIAogLyoKLSAqIFNvbWUgTERPcyBzdXBwb3J0cyBMUE0tT04vT0ZGL05vcm1hbC1PTiBtb2RlIGR1cmluZyBzdXNwZW5kIHN0YXRlCi0gKiAoRW5hYmxlIENvbnRyb2wgTG9naWMxIGJ5IFBXUlJFUSkKKyAqIFNvbWUgTERPcyBzdXBwb3J0IExvdyBQb3dlciBNb2RlIHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZy4KICAqCi0gKiBMRE9zIDIsIDQtMTksIDIyLTM1LgotICoKKyAqIExET3MgMSwgMywgMjAsIDIxLgogICovCi1zdGF0aWMgaW50IG1heDc3ODAyX2xkb19zZXRfc3VzcGVuZF9tb2RlX2xvZ2ljMShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQkJCQkJCXVuc2lnbmVkIGludCBtb2RlKQorc3RhdGljIGludCBtYXg3NzgwMl9zZXRfbW9kZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW50IG1vZGUpCiB7CiAJc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYgKm1heDc3ODAyID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKQEAgLTExOSwxNCArMTI3LDExIEBACiAJaW50IHNoaWZ0ID0gbWF4Nzc4MDJfZ2V0X29wbW9kZV9zaGlmdChpZCk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIFJFR1VMQVRPUl9NT0RFX0lETEU6CQkJLyogT04gaW4gTFAgTW9kZSAqLwotCQl2YWwgPSBNQVg3NzgwMl9PUE1PREVfTFA7CisJY2FzZSBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOgorCQl2YWwgPSBNQVg3NzgwMl9PUE1PREVfTFA7CS8qIE9OIGluIExvdyBQb3dlciBNb2RlICovCiAJCWJyZWFrOwotCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgkJCS8qIE9OIGluIE5vcm1hbCBNb2RlICovCi0JCXZhbCA9IE1BWDc3ODAyX09QTU9ERV9OT1JNQUw7Ci0JCWJyZWFrOwotCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToJCQkvKiBPTi9PRkYgYnkgUFdSUkVRICovCi0JCXZhbCA9IE1BWDc3ODAyX09QTU9ERV9TVEFOREJZOworCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgorCQl2YWwgPSBNQVg3NzgwMl9PUE1PREVfTk9STUFMOwkvKiBPTiBpbiBOb3JtYWwgTW9kZSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfd2FybigmcmRldi0+ZGV2LCAiJXM6IHJlZ3VsYXRvciBtb2RlOiAweCV4IG5vdCBzdXBwb3J0ZWRcbiIsCkBAIC0xMzksMzUgKzE0NCw3NiBAQAogCQkJCSAgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssIHZhbCA8PCBzaGlmdCk7CiB9CiAKLS8qCi0gKiBNb2RlIDEgKE91dHB1dFtPTi9PRkZdIGJ5IFBXUlJFUSkgaXMgbm90IHN1cHBvcnRlZCBvbiBzb21lIExET3MKLSAqIChFbmFibGUgQ29udHJvbCBMb2dpYzIgYnkgUFdSUkVRKQorc3RhdGljIHVuc2lnbmVkIG1heDc3ODAyX2dldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg3NzgwMl9yZWd1bGF0b3JfcHJ2ICptYXg3NzgwMiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7CisKKwlyZXR1cm4gbWF4Nzc4MDJfbWFwX21vZGUobWF4Nzc4MDItPm9wbW9kZVtpZF0pOworfQorCisvKioKKyAqIG1heDc3ODAyX3NldF9zdXNwZW5kX21vZGUgLSBzZXQgcmVndWxhdG9yIG9wbW9kZSB3aGVuIHRoZSBzeXN0ZW0gaXMgc3VzcGVuZGVkCisgKiBAcmRldjogcmVndWxhdG9yIHRvIGNoYW5nZSBtb2RlCisgKiBAbW9kZTogb3BlcmF0aW5nIG1vZGUgdG8gYmUgc2V0CiAgKgotICogTERPcyAxLCAyMCwgMjEsIGFuZCAzLAorICogV2lsbCBzZXQgdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgcmVndWxhdG9ycyBkdXJpbmcgc3lzdGVtIHN1c3BlbmQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIGZvciB0aGUgdGhyZWUgZGlmZmVyZW50IGVuYWJsZSBjb250cm9sIGxvZ2ljczoKICAqCisgKiBFbmFibGUgQ29udHJvbCBMb2dpYzEgYnkgUFdSUkVRIChCVUNLIDItNCBhbmQgTERPcyAyLCA0LTE5LCAyMi0zNSkKKyAqIEVuYWJsZSBDb250cm9sIExvZ2ljMiBieSBQV1JSRVEgKExET3MgMSwgMjAsIDIxKQorICogRW5hYmxlIENvbnRyb2wgTG9naWMzIGJ5IFBXUlJFUSAoTERPIDMpCisgKgorICogSWYgc2V0dGluZyB0aGUgcmVndWxhdG9yIG1vZGUgZmFpbHMsIHRoZSBmdW5jdGlvbiBvbmx5IHdhcm5zIGJ1dCBkb2VzCisgKiBub3QgcmV0dXJuIGFuIGVycm9yIGNvZGUgdG8gYXZvaWQgdGhlIHJlZ3VsYXRvciBjb3JlIHRvIHN0b3Agc2V0dGluZworICogdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgcmVtYWluaW5nIHJlZ3VsYXRvcnMuCiAgKi8KLXN0YXRpYyBpbnQgbWF4Nzc4MDJfbGRvX3NldF9zdXNwZW5kX21vZGVfbG9naWMyKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCQkJdW5zaWduZWQgaW50IG1vZGUpCitzdGF0aWMgaW50IG1heDc3ODAyX3NldF9zdXNwZW5kX21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgbWF4Nzc4MDJfcmVndWxhdG9yX3BydiAqbWF4Nzc4MDIgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IHNoaWZ0ID0gbWF4Nzc4MDJfZ2V0X29wbW9kZV9zaGlmdChpZCk7CiAKKwkvKgorCSAqIElmIHRoZSByZWd1bGF0b3IgaGFzIGJlZW4gZGlzYWJsZWQgZm9yIHN1c3BlbmQKKwkgKiB0aGVuIGlzIGludmFsaWQgdG8gdHJ5IHNldHRpbmcgYSBzdXNwZW5kIG1vZGUuCisJICovCisJaWYgKG1heDc3ODAyLT5vcG1vZGVbaWRdID09IE1BWDc3ODAyX09GRl9QV1JSRVEpIHsKKwkJZGV2X3dhcm4oJnJkZXYtPmRldiwgIiVzOiBpcyBkaXNhYmxlZCwgbW9kZTogMHgleCBub3Qgc2V0XG4iLAorCQkJIHJkZXYtPmRlc2MtPm5hbWUsIG1vZGUpOworCQlyZXR1cm4gMDsKKwl9CisKIAlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIFJFR1VMQVRPUl9NT0RFX0lETEU6CQkJLyogT04gaW4gTFAgTW9kZSAqLwotCQl2YWwgPSBNQVg3NzgwMl9PUE1PREVfTFA7CisJY2FzZSBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOgorCQkvKgorCQkgKiBJZiB0aGUgcmVndWxhdG9yIG9wbW9kZSBpcyBub3JtYWwgdGhlbiBlbmFibGUKKwkJICogT04gaW4gTG93IFBvd2VyIE1vZGUgYnkgUFdSUkVRLiBJZiB0aGUgbW9kZSBpcworCQkgKiBhbHJlYWR5IExvdyBQb3dlciB0aGVuIG5vIGFjdGlvbiBpcyByZXF1aXJlZC4KKwkJICovCisJCWlmIChtYXg3NzgwMi0+b3Btb2RlW2lkXSA9PSBNQVg3NzgwMl9PUE1PREVfTk9STUFMKQorCQkJdmFsID0gTUFYNzc4MDJfTFBfUFdSUkVROworCQllbHNlCisJCQlyZXR1cm4gMDsKIAkJYnJlYWs7Ci0JY2FzZSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw6CQkJLyogT04gaW4gTm9ybWFsIE1vZGUgKi8KLQkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTDsKLQkJYnJlYWs7CisJY2FzZSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw6CisJCS8qCisJCSAqIElmIHRoZSByZWd1bGF0b3Igb3BlcmF0aW5nIG1vZGUgaXMgTG93IFBvd2VyIHRoZW4KKwkJICogbm9ybWFsIGlzIG5vdCBhIHZhbGlkIG9wbW9kZSBpbiBzdXNwZW5kLiBJZiB0aGUKKwkJICogbW9kZSBpcyBhbHJlYWR5IG5vcm1hbCB0aGVuIG5vIGFjdGlvbiBpcyByZXF1aXJlZC4KKwkJICovCisJCWlmIChtYXg3NzgwMi0+b3Btb2RlW2lkXSA9PSBNQVg3NzgwMl9PUE1PREVfTFApCisJCQlkZXZfd2FybigmcmRldi0+ZGV2LCAiJXM6IGluIExvdyBQb3dlcjogMHgleCBpbnZhbGlkXG4iLAorCQkJCSByZGV2LT5kZXNjLT5uYW1lLCBtb2RlKTsKKwkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJZGV2X3dhcm4oJnJkZXYtPmRldiwgIiVzOiByZWd1bGF0b3IgbW9kZTogMHgleCBub3Qgc3VwcG9ydGVkXG4iLAogCQkJIHJkZXYtPmRlc2MtPm5hbWUsIG1vZGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQltYXg3NzgwMi0+b3Btb2RlW2lkXSA9IHZhbDsKIAlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKIAkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLCB2YWwgPDwgc2hpZnQpOwogfQpAQCAtMTc4LDYgKzIyNCw5IEBACiAJaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7CiAJaW50IHNoaWZ0ID0gbWF4Nzc4MDJfZ2V0X29wbW9kZV9zaGlmdChpZCk7CiAKKwlpZiAobWF4Nzc4MDItPm9wbW9kZVtpZF0gPT0gTUFYNzc4MDJfT0ZGX1BXUlJFUSkKKwkJbWF4Nzc4MDItPm9wbW9kZVtpZF0gPSBNQVg3NzgwMl9PUE1PREVfTk9STUFMOworCiAJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcsCiAJCQkJICByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywKIAkJCQkgIG1heDc3ODAyLT5vcG1vZGVbaWRdIDw8IHNoaWZ0KTsKQEAgLTI0Nyw3ICsyOTYsOCBAQAogCS5nZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3RpbWVfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3RpbWVfc2VsLAotCS5zZXRfc3VzcGVuZF9tb2RlCT0gbWF4Nzc4MDJfbGRvX3NldF9zdXNwZW5kX21vZGVfbG9naWMxLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4Nzc4MDJfc2V0X3N1c3BlbmRfZGlzYWJsZSwKKwkuc2V0X3N1c3BlbmRfbW9kZQk9IG1heDc3ODAyX3NldF9zdXNwZW5kX21vZGUsCiB9OwogCiAvKgpAQCAtMjYyLDcgKzMxMiw5IEBACiAJLmdldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCi0JLnNldF9zdXNwZW5kX21vZGUJPSBtYXg3NzgwMl9sZG9fc2V0X3N1c3BlbmRfbW9kZV9sb2dpYzIsCisJLnNldF9tb2RlCQk9IG1heDc3ODAyX3NldF9tb2RlLAorCS5nZXRfbW9kZQkJPSBtYXg3NzgwMl9nZXRfbW9kZSwKKwkuc2V0X3N1c3BlbmRfbW9kZQk9IG1heDc3ODAyX3NldF9zdXNwZW5kX21vZGUsCiB9OwogCiAvKiBCVUNLUyAxLCA2ICovCkBAIC0yNzYsMTAgKzMyOCwyNSBAQAogCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCiAJLnNldF9yYW1wX2RlbGF5CQk9IG1heDc3ODAyX3NldF9yYW1wX2RlbGF5XzRiaXQsCi0JLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzgwMl9idWNrX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzgwMl9zZXRfc3VzcGVuZF9kaXNhYmxlLAogfTsKIAotLyogQlVDS3MgMi00LCA1LCA3LTEwICovCisvKiBCVUNLcyAyLTQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYXg3NzgwMl9idWNrXzIzNF9vcHMgPSB7CisJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhciwKKwkubWFwX3ZvbHRhZ2UJCT0gcmVndWxhdG9yX21hcF92b2x0YWdlX2xpbmVhciwKKwkuaXNfZW5hYmxlZAkJPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCisJLmVuYWJsZQkJCT0gbWF4Nzc4MDJfZW5hYmxlLAorCS5kaXNhYmxlCQk9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKKwkuZ2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCisJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKKwkuc2V0X3JhbXBfZGVsYXkJCT0gbWF4Nzc4MDJfc2V0X3JhbXBfZGVsYXlfMmJpdCwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3ODAyX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX21vZGUJPSBtYXg3NzgwMl9zZXRfc3VzcGVuZF9tb2RlLAorfTsKKworLyogQlVDS3MgNSwgNy0xMCAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1heDc3ODAyX2J1Y2tfZHZzX29wcyA9IHsKIAkubGlzdF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfbGluZWFyLAogCS5tYXBfdm9sdGFnZQkJPSByZWd1bGF0b3JfbWFwX3ZvbHRhZ2VfbGluZWFyLApAQCAtMjkwLDEyICszNTcsMTQgQEAKIAkuc2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3RpbWVfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3RpbWVfc2VsLAogCS5zZXRfcmFtcF9kZWxheQkJPSBtYXg3NzgwMl9zZXRfcmFtcF9kZWxheV8yYml0LAotCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4Nzc4MDJfYnVja19zZXRfc3VzcGVuZF9kaXNhYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4Nzc4MDJfc2V0X3N1c3BlbmRfZGlzYWJsZSwKIH07CiAKIC8qIExET3MgMy03LCA5LTE0LCAxOC0yNiwgMjgsIDI5LCAzMi0zNCAqLwogI2RlZmluZSByZWd1bGF0b3JfNzc4MDJfZGVzY19wX2xkbyhudW0sIHN1cHBseSwgbG9nKQl7CQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQlcCiAJLmlkCQk9IE1BWDc3ODAyX0xETyMjbnVtLAkJCQlcCiAJLnN1cHBseV9uYW1lCT0gImlubCIjc3VwcGx5LAkJCQkJXAogCS5vcHMJCT0gJm1heDc3ODAyX2xkb19vcHNfbG9naWMjI2xvZywJCQlcCkBAIC0zMDksMTEgKzM3OCwxNCBAQAogCS52c2VsX21hc2sJPSBNQVg3NzgwMl9WU0VMX01BU0ssCQkJCVwKIAkuZW5hYmxlX3JlZwk9IE1BWDc3ODAyX1JFR19MRE8xQ1RSTDEgKyBudW0gLSAxLAkJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLIDw8IE1BWDc3ODAyX09QTU9ERV9TSElGVF9MRE8sIFwKKwkub2ZfbWFwX21vZGUJPSBtYXg3NzgwMl9tYXBfbW9kZSwJCQkJXAogfQogCiAvKiBMRE9zIDEsIDIsIDgsIDE1LCAxNywgMjcsIDMwLCAzNSAqLwogI2RlZmluZSByZWd1bGF0b3JfNzc4MDJfZGVzY19uX2xkbyhudW0sIHN1cHBseSwgbG9nKSAgIHsJCVwKIAkubmFtZQkJPSAiTERPIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJMRE8iI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJCVwKIAkuaWQJCT0gTUFYNzc4MDJfTERPIyNudW0sCQkJCVwKIAkuc3VwcGx5X25hbWUJPSAiaW5sIiNzdXBwbHksCQkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc4MDJfbGRvX29wc19sb2dpYyMjbG9nLAkJCVwKQEAgLTMyNywxMSArMzk5LDE0IEBACiAJLnZzZWxfbWFzawk9IE1BWDc3ODAyX1ZTRUxfTUFTSywJCQkJXAogCS5lbmFibGVfcmVnCT0gTUFYNzc4MDJfUkVHX0xETzFDVFJMMSArIG51bSAtIDEsCQlcCiAJLmVuYWJsZV9tYXNrCT0gTUFYNzc4MDJfT1BNT0RFX01BU0sgPDwgTUFYNzc4MDJfT1BNT0RFX1NISUZUX0xETywgXAorCS5vZl9tYXBfbW9kZQk9IG1heDc3ODAyX21hcF9tb2RlLAkJCQlcCiB9CiAKIC8qIEJVQ0tzIDEsIDYgKi8KICNkZWZpbmUgcmVndWxhdG9yXzc3ODAyX2Rlc2NfMTZfYnVjayhudW0pCXsJCVwKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiQlVDSyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAkJXAogCS5pZAkJPSBNQVg3NzgwMl9CVUNLIyNudW0sCQkJCVwKIAkuc3VwcGx5X25hbWUJPSAiaW5iIiNudW0sCQkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc4MDJfYnVja18xNl9kdnNfb3BzLAkJCVwKQEAgLTM0NSwxNCArNDIwLDE3IEBACiAJLnZzZWxfbWFzawk9IE1BWDc3ODAyX0RWU19WU0VMX01BU0ssCQkJXAogCS5lbmFibGVfcmVnCT0gTUFYNzc4MDJfUkVHX0JVQ0sgIyMgbnVtICMjIENUUkwsCQlcCiAJLmVuYWJsZV9tYXNrCT0gTUFYNzc4MDJfT1BNT0RFX01BU0ssCQkJCVwKKwkub2ZfbWFwX21vZGUJPSBtYXg3NzgwMl9tYXBfbW9kZSwJCQkJXAogfQogCiAvKiBCVUNLUyAyLTQgKi8KICNkZWZpbmUgcmVndWxhdG9yXzc3ODAyX2Rlc2NfMjM0X2J1Y2sobnVtKQl7CQlcCiAJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkJVQ0siI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJCVwKIAkuaWQJCT0gTUFYNzc4MDJfQlVDSyMjbnVtLAkJCQlcCiAJLnN1cHBseV9uYW1lCT0gImluYiIjbnVtLAkJCQkJXAotCS5vcHMJCT0gJm1heDc3ODAyX2J1Y2tfZHZzX29wcywJCQlcCisJLm9wcwkJPSAmbWF4Nzc4MDJfYnVja18yMzRfb3BzLAkJCVwKIAkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwJCQkJCVwKIAkubWluX3VWCQk9IDYwMDAwMCwJCQkJCVwKQEAgLTM2NCwxMSArNDQyLDE0IEBACiAJLmVuYWJsZV9yZWcJPSBNQVg3NzgwMl9SRUdfQlVDSyAjIyBudW0gIyMgQ1RSTDEsCQlcCiAJLmVuYWJsZV9tYXNrCT0gTUFYNzc4MDJfT1BNT0RFX01BU0sgPDwJCQlcCiAJCQkJTUFYNzc4MDJfT1BNT0RFX0JVQ0syMzRfU0hJRlQsCQlcCisJLm9mX21hcF9tb2RlCT0gbWF4Nzc4MDJfbWFwX21vZGUsCQkJCVwKIH0KIAogLyogQlVDSyA1ICovCiAjZGVmaW5lIHJlZ3VsYXRvcl83NzgwMl9kZXNjX2J1Y2s1KG51bSkJCXsJCVwKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiQlVDSyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAkJXAogCS5pZAkJPSBNQVg3NzgwMl9CVUNLIyNudW0sCQkJCVwKIAkuc3VwcGx5X25hbWUJPSAiaW5iIiNudW0sCQkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc4MDJfYnVja19kdnNfb3BzLAkJCVwKQEAgLTM4MiwxMSArNDYzLDE0IEBACiAJLnZzZWxfbWFzawk9IE1BWDc3ODAyX1ZTRUxfTUFTSywJCQkJXAogCS5lbmFibGVfcmVnCT0gTUFYNzc4MDJfUkVHX0JVQ0s1Q1RSTCwJCQlcCiAJLmVuYWJsZV9tYXNrCT0gTUFYNzc4MDJfT1BNT0RFX01BU0ssCQkJCVwKKwkub2ZfbWFwX21vZGUJPSBtYXg3NzgwMl9tYXBfbW9kZSwJCQkJXAogfQogCiAvKiBCVUNLcyA3LTEwICovCiAjZGVmaW5lIHJlZ3VsYXRvcl83NzgwMl9kZXNjX2J1Y2s3XzEwKG51bSkJewkJXAogCS5uYW1lCQk9ICJCVUNLIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJCVUNLIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQlcCiAJLmlkCQk9IE1BWDc3ODAyX0JVQ0sjI251bSwJCQkJXAogCS5zdXBwbHlfbmFtZQk9ICJpbmIiI251bSwJCQkJCVwKIAkub3BzCQk9ICZtYXg3NzgwMl9idWNrX2R2c19vcHMsCQkJXApAQCAtNDAwLDkgKzQ4NCwxMCBAQAogCS52c2VsX21hc2sJPSBNQVg3NzgwMl9WU0VMX01BU0ssCQkJCVwKIAkuZW5hYmxlX3JlZwk9IE1BWDc3ODAyX1JFR19CVUNLN0NUUkwgKyAobnVtIC0gNykgKiAzLAlcCiAJLmVuYWJsZV9tYXNrCT0gTUFYNzc4MDJfT1BNT0RFX01BU0ssCQkJCVwKKwkub2ZfbWFwX21vZGUJPSBtYXg3NzgwMl9tYXBfbW9kZSwJCQkJXAogfQogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgcmVndWxhdG9yc1tdID0gewogCXJlZ3VsYXRvcl83NzgwMl9kZXNjXzE2X2J1Y2soMSksCiAJcmVndWxhdG9yXzc3ODAyX2Rlc2NfMjM0X2J1Y2soMiksCiAJcmVndWxhdG9yXzc3ODAyX2Rlc2NfMjM0X2J1Y2soMyksCkBAIC00NDcsODUgKzUzMiwxOSBAQAogCXJlZ3VsYXRvcl83NzgwMl9kZXNjX25fbGRvKDM1LCAyLCAxKSwKIH07CiAKLSNpZmRlZiBDT05GSUdfT0YKLXN0YXRpYyBpbnQgbWF4Nzc4MDJfcG1pY19kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQlzdHJ1Y3QgbWF4Nzc2ODZfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCi17Ci0Jc3RydWN0IG1heDc3Njg2X2RldiAqaW9kZXYgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwbWljX25wLCAqcmVndWxhdG9yc19ucDsKLQlzdHJ1Y3QgbWF4Nzc2ODZfcmVndWxhdG9yX2RhdGEgKnJkYXRhOwotCXN0cnVjdCBvZl9yZWd1bGF0b3JfbWF0Y2ggcm1hdGNoOwotCXVuc2lnbmVkIGludCBpOwotCi0JcG1pY19ucCA9IGlvZGV2LT5kZXYtPm9mX25vZGU7Ci0JcmVndWxhdG9yc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBtaWNfbnAsICJyZWd1bGF0b3JzIik7Ci0JaWYgKCFyZWd1bGF0b3JzX25wKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBmaW5kIHJlZ3VsYXRvcnMgc3ViLW5vZGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwZGF0YS0+bnVtX3JlZ3VsYXRvcnMgPSBBUlJBWV9TSVpFKHJlZ3VsYXRvcnMpOwotCXJkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcmRhdGEpICoKLQkJCSAgICAgcGRhdGEtPm51bV9yZWd1bGF0b3JzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJkYXRhKSB7Ci0JCW9mX25vZGVfcHV0KHJlZ3VsYXRvcnNfbnApOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZWd1bGF0b3JzOyBpKyspIHsKLQkJcm1hdGNoLm5hbWUgPSByZWd1bGF0b3JzW2ldLm5hbWU7Ci0JCXJtYXRjaC5pbml0X2RhdGEgPSBOVUxMOwotCQlybWF0Y2gub2Zfbm9kZSA9IE5VTEw7Ci0JCWlmIChvZl9yZWd1bGF0b3JfbWF0Y2goJnBkZXYtPmRldiwgcmVndWxhdG9yc19ucCwgJnJtYXRjaCwKLQkJCQkgICAgICAgMSkgIT0gMSkgewotCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIk5vIG1hdGNoaW5nIHJlZ3VsYXRvciBmb3IgJyVzJ1xuIiwKLQkJCQkgcm1hdGNoLm5hbWUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJcmRhdGFbaV0uaW5pdGRhdGEgPSBybWF0Y2guaW5pdF9kYXRhOwotCQlyZGF0YVtpXS5vZl9ub2RlID0gcm1hdGNoLm9mX25vZGU7Ci0JCXJkYXRhW2ldLmlkID0gcmVndWxhdG9yc1tpXS5pZDsKLQl9Ci0KLQlwZGF0YS0+cmVndWxhdG9ycyA9IHJkYXRhOwotCW9mX25vZGVfcHV0KHJlZ3VsYXRvcnNfbnApOwotCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotc3RhdGljIGludCBtYXg3NzgwMl9wbWljX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCXN0cnVjdCBtYXg3NzY4Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfT0YgKi8KLQogc3RhdGljIGludCBtYXg3NzgwMl9wbWljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG1heDc3Njg2X2RldiAqaW9kZXYgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IG1heDc3Njg2X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShpb2Rldi0+ZGV2KTsKIAlzdHJ1Y3QgbWF4Nzc4MDJfcmVndWxhdG9yX3BydiAqbWF4Nzc4MDI7Ci0JaW50IGksIHJldCA9IDAsIHZhbDsKKwlpbnQgaSwgdmFsOwogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKIAotCS8qIFRoaXMgaXMgYWxsb2NhdGVkIGJ5IHRoZSBNRkQgZHJpdmVyICovCi0JaWYgKCFwZGF0YSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIGZvdW5kIGZvciByZWd1bGF0b3JcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAltYXg3NzgwMiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LAogCQkJCXNpemVvZihzdHJ1Y3QgbWF4Nzc4MDJfcmVndWxhdG9yX3BydiksCiAJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFtYXg3NzgwMikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoaW9kZXYtPmRldi0+b2Zfbm9kZSkgewotCQlyZXQgPSBtYXg3NzgwMl9wbWljX2R0X3BhcnNlX3BkYXRhKHBkZXYsIHBkYXRhKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCiAJY29uZmlnLmRldiA9IGlvZGV2LT5kZXY7CiAJY29uZmlnLnJlZ21hcCA9IGlvZGV2LT5yZWdtYXA7CiAJY29uZmlnLmRyaXZlcl9kYXRhID0gbWF4Nzc4MDI7CkBAIC01MzMsMjEgKzU1MiwyNSBAQAogCiAJZm9yIChpID0gMDsgaSA8IE1BWDc3ODAyX1JFR19NQVg7IGkrKykgewogCQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQkJaW50IGlkID0gcGRhdGEtPnJlZ3VsYXRvcnNbaV0uaWQ7CisJCWludCBpZCA9IHJlZ3VsYXRvcnNbaV0uaWQ7CiAJCWludCBzaGlmdCA9IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaWQpOwotCi0JCWNvbmZpZy5pbml0X2RhdGEgPSBwZGF0YS0+cmVndWxhdG9yc1tpXS5pbml0ZGF0YTsKLQkJY29uZmlnLm9mX25vZGUgPSBwZGF0YS0+cmVndWxhdG9yc1tpXS5vZl9ub2RlOworCQlpbnQgcmV0OwogCiAJCXJldCA9IHJlZ21hcF9yZWFkKGlvZGV2LT5yZWdtYXAsIHJlZ3VsYXRvcnNbaV0uZW5hYmxlX3JlZywgJnZhbCk7Ci0JCXZhbCA9IHZhbCA+PiBzaGlmdCAmIE1BWDc3ODAyX09QTU9ERV9NQVNLOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkiY2Fubm90IHJlYWQgY3VycmVudCBtb2RlIGZvciAlZFxuIiwgaSk7CisJCQl2YWwgPSBNQVg3NzgwMl9PUE1PREVfTk9STUFMOworCQl9IGVsc2UgeworCQkJdmFsID0gdmFsID4+IHNoaWZ0ICYgTUFYNzc4MDJfT1BNT0RFX01BU0s7CisJCX0KIAogCQkvKgogCQkgKiBJZiB0aGUgcmVndWxhdG9yIGlzIGRpc2FibGVkIGFuZCB0aGUgc3lzdGVtIHdhcm0gcmVib290ZWQsCiAJCSAqIHRoZSBoYXJkd2FyZSByZXBvcnRzIE9GRiBhcyB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlLgogCQkgKiBEZWZhdWx0IHRvIG9wZXJhdGluZyBtb2RlIE5PUk1BTCBpbiB0aGF0IGNhc2UuCiAJCSAqLwotCQlpZiAodmFsID09IE1BWDc3ODAyX09QTU9ERV9PRkYpCisJCWlmICh2YWwgPT0gTUFYNzc4MDJfU1RBVFVTX09GRikKIAkJCW1heDc3ODAyLT5vcG1vZGVbaWRdID0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTDsKIAkJZWxzZQogCQkJbWF4Nzc4MDItPm9wbW9kZVtpZF0gPSB2YWw7CkBAIC01NTUsOSArNTc4LDEwIEBACiAJCXJkZXYgPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcigmcGRldi0+ZGV2LAogCQkJCQkgICAgICAgJnJlZ3VsYXRvcnNbaV0sICZjb25maWcpOwogCQlpZiAoSVNfRVJSKHJkZXYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHJkZXYpOwogCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJyZWd1bGF0b3IgaW5pdCBmYWlsZWQgZm9yICVkXG4iLCBpKTsKLQkJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCQkJCSJyZWd1bGF0b3IgaW5pdCBmYWlsZWQgZm9yICVkOiAlZFxuIiwgaSwgcmV0KTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NjAuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NjAuYwppbmRleCAyZmM0MTExLi43ZWVlMmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjYwLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODY2MC5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAlpbnQgbWF0Y2hlZCwgaTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXN0cnVjdCBtYXg4NjYwX3N1YmRldl9kYXRhICpzdWI7Ci0Jc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCBybWF0Y2hbQVJSQVlfU0laRShtYXg4NjYwX3JlZyldOworCXN0cnVjdCBvZl9yZWd1bGF0b3JfbWF0Y2ggcm1hdGNoW0FSUkFZX1NJWkUobWF4ODY2MF9yZWcpXSA9IHsgfTsKIAogCW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LT5vZl9ub2RlLCAicmVndWxhdG9ycyIpOwogCWlmICghbnApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NTIuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NTIuYwppbmRleCBmN2Y5ZWZjLi4xYWY4ZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk1Mi5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJtYXg4OTUyLHJhbXAtc3BlZWQiLCAmcGQtPnJhbXBfc3BlZWQpKQogCQlkZXZfd2FybihkZXYsICJtYXg4OTUyLHJhbXAtc3BlZWQgcHJvcGVydHkgbm90IHNwZWNpZmllZCwgZGVmYXVsdGluZyB0byAzMm1WL3VzXG4iKTsKIAotCXBkLT5yZWdfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgbnApOworCXBkLT5yZWdfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgbnAsICZyZWd1bGF0b3IpOwogCWlmICghcGQtPnJlZ19kYXRhKSB7CiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHBhcnNlIHJlZ3VsYXRvciBpbml0IGRhdGFcbiIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTIyNSw2ICsyMjUsOCBAQAogCWNvbmZpZy5vZl9ub2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKIAogCWNvbmZpZy5lbmFfZ3BpbyA9IHBkYXRhLT5ncGlvX2VuOworCWlmIChjbGllbnQtPmRldi5vZl9ub2RlKQorCQljb25maWcuZW5hX2dwaW9faW5pdGlhbGl6ZWQgPSB0cnVlOwogCWlmIChwZGF0YS0+cmVnX2RhdGEtPmNvbnN0cmFpbnRzLmJvb3Rfb24pCiAJCWNvbmZpZy5lbmFfZ3Bpb19mbGFncyB8PSBHUElPRl9PVVRfSU5JVF9ISUdIOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTczLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk3My1yZWd1bGF0b3IuYwppbmRleCBkYmVkZjE3Li5jM2Q1NWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTczLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NzMtcmVndWxhdG9yLmMKQEAgLTQ1OCw3ICs0NTgsOCBAQAogCiAJY29uZmlnLmRldiA9ICZjbGllbnQtPmRldjsKIAljb25maWcuaW5pdF9kYXRhID0gcGRhdGEgPyBwZGF0YS0+cmVnX2luaXRfZGF0YSA6Ci0JCW9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZjbGllbnQtPmRldiwgY2xpZW50LT5kZXYub2Zfbm9kZSk7CisJCW9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZjbGllbnQtPmRldiwgY2xpZW50LT5kZXYub2Zfbm9kZSwKKwkJCQkJICAgJm1heC0+ZGVzYyk7CiAJY29uZmlnLmRyaXZlcl9kYXRhID0gbWF4OwogCWNvbmZpZy5vZl9ub2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKIAljb25maWcucmVnbWFwID0gbWF4LT5yZWdtYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk3LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk3LmMKaW5kZXggOWMzMWUyMS4uNzI2ZmRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5Ny5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5OTcuYwpAQCAtOTUzLDcgKzk1Myw4IEBACiAKIAkJcmRhdGEtPmlkID0gaTsKIAkJcmRhdGEtPmluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwKLQkJCQkJCQkgICAgIHJlZ19ucCk7CisJCQkJCQkJICAgICByZWdfbnAsCisJCQkJCQkJICAgICAmcmVndWxhdG9yc1tpXSk7CiAJCXJkYXRhLT5yZWdfbm9kZSA9IHJlZ19ucDsKIAkJcmRhdGErKzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk4LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk4LmMKaW5kZXggOTYxMDkxYi4uNTllMzRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5OC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5OTguYwpAQCAtNjg2LDggKzY4Niw5IEBACiAJCQljb250aW51ZTsKIAogCQlyZGF0YS0+aWQgPSByZWd1bGF0b3JzW2ldLmlkOwotCQlyZGF0YS0+aW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgKLQkJCQkJCQlpb2Rldi0+ZGV2LCByZWdfbnApOworCQlyZGF0YS0+aW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShpb2Rldi0+ZGV2LAorCQkJCQkJCSAgICAgcmVnX25wLAorCQkJCQkJCSAgICAgJnJlZ3VsYXRvcnNbaV0pOwogCQlyZGF0YS0+cmVnX25vZGUgPSByZWdfbnA7CiAJCSsrcmRhdGE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jCmluZGV4IGFmYmEwMjQuLjAyODFjMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzeHh4LXJlZ3VsYXRvci1jb3JlLmMKQEAgLTE5NCw3ICsxOTQsOCBAQAogCQkJCQkgcmVndWxhdG9yc1tpXS5kZXNjLm5hbWUpKSB7CiAJCQkJcC0+aWQgPSBpOwogCQkJCXAtPmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKAotCQkJCQkJCSZwZGV2LT5kZXYsIGNoaWxkKTsKKwkJCQkJCQkmcGRldi0+ZGV2LCBjaGlsZCwKKwkJCQkJCQkmcmVndWxhdG9yc1tpXS5kZXNjKTsKIAkJCQlwLT5ub2RlID0gY2hpbGQ7CiAJCQkJcCsrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5jCmluZGV4IDdhNTE4MTQuLjkxZWFhZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5jCkBAIC0xOSwxMiArMTksMjAgQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCByZWd1bGF0b3Jfc3RhdGVzW1BNX1NVU1BFTkRfTUFYICsgMV0gPSB7CisJW1BNX1NVU1BFTkRfTUVNXQk9ICJyZWd1bGF0b3Itc3RhdGUtbWVtIiwKKwlbUE1fU1VTUEVORF9NQVhdCT0gInJlZ3VsYXRvci1zdGF0ZS1kaXNrIiwKK307CisKIHN0YXRpYyB2b2lkIG9mX2dldF9yZWd1bGF0aW9uX2NvbnN0cmFpbnRzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICoqaW5pdF9kYXRhKQorCQkJCQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqKmluaXRfZGF0YSwKKwkJCQkJY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCWNvbnN0IF9fYmUzMiAqbWluX3VWLCAqbWF4X3VWOwogCXN0cnVjdCByZWd1bGF0aW9uX2NvbnN0cmFpbnRzICpjb25zdHJhaW50cyA9ICYoKmluaXRfZGF0YSktPmNvbnN0cmFpbnRzOwotCWludCByZXQ7CisJc3RydWN0IHJlZ3VsYXRvcl9zdGF0ZSAqc3VzcGVuZF9zdGF0ZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1c3BlbmRfbnA7CisJaW50IHJldCwgaTsKIAl1MzIgcHZhbDsKIAogCWNvbnN0cmFpbnRzLT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVndWxhdG9yLW5hbWUiLCBOVUxMKTsKQEAgLTczLDE4ICs4MSw4NCBAQAogCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5IiwgJnB2YWwpOwogCWlmICghcmV0KQogCQljb25zdHJhaW50cy0+ZW5hYmxlX3RpbWUgPSBwdmFsOworCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJlZ3VsYXRvci1pbml0aWFsLW1vZGUiLCAmcHZhbCkpIHsKKwkJaWYgKGRlc2MgJiYgZGVzYy0+b2ZfbWFwX21vZGUpIHsKKwkJCXJldCA9IGRlc2MtPm9mX21hcF9tb2RlKHB2YWwpOworCQkJaWYgKHJldCA9PSAtRUlOVkFMKQorCQkJCXByX2VycigiJXM6IGludmFsaWQgbW9kZSAldVxuIiwgbnAtPm5hbWUsIHB2YWwpOworCQkJZWxzZQorCQkJCWNvbnN0cmFpbnRzLT5pbml0aWFsX21vZGUgPSByZXQ7CisJCX0gZWxzZSB7CisJCQlwcl93YXJuKCIlczogbWFwcGluZyBmb3IgbW9kZSAlZCBub3QgZGVmaW5lZFxuIiwKKwkJCQlucC0+bmFtZSwgcHZhbCk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWd1bGF0b3Jfc3RhdGVzKTsgaSsrKSB7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIFBNX1NVU1BFTkRfTUVNOgorCQkJc3VzcGVuZF9zdGF0ZSA9ICZjb25zdHJhaW50cy0+c3RhdGVfbWVtOworCQkJYnJlYWs7CisJCWNhc2UgUE1fU1VTUEVORF9NQVg6CisJCQlzdXNwZW5kX3N0YXRlID0gJmNvbnN0cmFpbnRzLT5zdGF0ZV9kaXNrOworCQkJYnJlYWs7CisJCWNhc2UgUE1fU1VTUEVORF9PTjoKKwkJY2FzZSBQTV9TVVNQRU5EX0ZSRUVaRToKKwkJY2FzZSBQTV9TVVNQRU5EX1NUQU5EQlk6CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfTsKKworCQlzdXNwZW5kX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIHJlZ3VsYXRvcl9zdGF0ZXNbaV0pOworCQlpZiAoIXN1c3BlbmRfbnAgfHwgIXN1c3BlbmRfc3RhdGUpCisJCQljb250aW51ZTsKKworCQlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKHN1c3BlbmRfbnAsICJyZWd1bGF0b3ItbW9kZSIsCisJCQkJCSAgJnB2YWwpKSB7CisJCQlpZiAoZGVzYyAmJiBkZXNjLT5vZl9tYXBfbW9kZSkgeworCQkJCXJldCA9IGRlc2MtPm9mX21hcF9tb2RlKHB2YWwpOworCQkJCWlmIChyZXQgPT0gLUVJTlZBTCkKKwkJCQkJcHJfZXJyKCIlczogaW52YWxpZCBtb2RlICV1XG4iLAorCQkJCQkgICAgICAgbnAtPm5hbWUsIHB2YWwpOworCQkJCWVsc2UKKwkJCQkJc3VzcGVuZF9zdGF0ZS0+bW9kZSA9IHJldDsKKwkJCX0gZWxzZSB7CisJCQkJcHJfd2FybigiJXM6IG1hcHBpbmcgZm9yIG1vZGUgJWQgbm90IGRlZmluZWRcbiIsCisJCQkJCW5wLT5uYW1lLCBwdmFsKTsKKwkJCX0KKwkJfQorCisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woc3VzcGVuZF9ucCwKKwkJCQkJInJlZ3VsYXRvci1vbi1pbi1zdXNwZW5kIikpCisJCQlzdXNwZW5kX3N0YXRlLT5lbmFibGVkID0gdHJ1ZTsKKwkJZWxzZSBpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKHN1c3BlbmRfbnAsCisJCQkJCSJyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQiKSkKKwkJCXN1c3BlbmRfc3RhdGUtPmRpc2FibGVkID0gdHJ1ZTsKKworCQlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKHN1c3BlbmRfbnAsCisJCQkJCSJyZWd1bGF0b3Itc3VzcGVuZC1taWNyb3ZvbHQiLCAmcHZhbCkpCisJCQlzdXNwZW5kX3N0YXRlLT51ViA9IHB2YWw7CisKKwkJb2Zfbm9kZV9wdXQoc3VzcGVuZF9ucCk7CisJCXN1c3BlbmRfc3RhdGUgPSBOVUxMOworCQlzdXNwZW5kX25wID0gTlVMTDsKKwl9CiB9CiAKIC8qKgogICogb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEgLSBleHRyYWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc3RydWN0dXJlIGluZm8KICAqIEBkZXY6IGRldmljZSByZXF1ZXN0aW5nIGZvciByZWd1bGF0b3JfaW5pdF9kYXRhCisgKiBAbm9kZTogcmVndWxhdG9yIGRldmljZSBub2RlCisgKiBAZGVzYzogcmVndWxhdG9yIGRlc2NyaXB0aW9uCiAgKgogICogUG9wdWxhdGVzIHJlZ3VsYXRvcl9pbml0X2RhdGEgc3RydWN0dXJlIGJ5IGV4dHJhY3RpbmcgZGF0YSBmcm9tIGRldmljZQogICogdHJlZSBub2RlLCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcG9wdWxhdGVkIHN0cnV0dXJlIG9yIE5VTEwgaWYgbWVtb3J5CiAgKiBhbGxvYyBmYWlscy4KICAqLwogc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKm9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CiAKQEAgLTk1LDcgKzE2OSw3IEBACiAJaWYgKCFpbml0X2RhdGEpCiAJCXJldHVybiBOVUxMOyAvKiBPdXQgb2YgbWVtb3J5PyAqLwogCi0Jb2ZfZ2V0X3JlZ3VsYXRpb25fY29uc3RyYWludHMobm9kZSwgJmluaXRfZGF0YSk7CisJb2ZfZ2V0X3JlZ3VsYXRpb25fY29uc3RyYWludHMobm9kZSwgJmluaXRfZGF0YSwgZGVzYyk7CiAJcmV0dXJuIGluaXRfZGF0YTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKTsKQEAgLTE3Niw3ICsyNTAsOCBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQltYXRjaC0+aW5pdF9kYXRhID0KLQkJCQlvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIGNoaWxkKTsKKwkJCQlvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIGNoaWxkLAorCQkJCQkJCSAgIG1hdGNoLT5kZXNjKTsKIAkJCWlmICghbWF0Y2gtPmluaXRfZGF0YSkgewogCQkJCWRldl9lcnIoZGV2LAogCQkJCQkiZmFpbGVkIHRvIHBhcnNlIERUIGZvciByZWd1bGF0b3IgJXNcbiIsCkBAIC0yMTEsNyArMjg2LDggQEAKIAkJc2VhcmNoID0gZGV2LT5vZl9ub2RlOwogCiAJaWYgKCFzZWFyY2gpIHsKLQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCByZWd1bGF0b3IgY29udGFpbmVyIG5vZGVcbiIpOworCQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBmaW5kIHJlZ3VsYXRvciBjb250YWluZXIgbm9kZSAnJXMnXG4iLAorCQkJZGVzYy0+cmVndWxhdG9yc19ub2RlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMjMsNyArMjk5LDcgQEAKIAkJaWYgKHN0cmNtcChkZXNjLT5vZl9tYXRjaCwgbmFtZSkpCiAJCQljb250aW51ZTsKIAotCQlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIGNoaWxkKTsKKwkJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBjaGlsZCwgZGVzYyk7CiAJCWlmICghaW5pdF9kYXRhKSB7CiAJCQlkZXZfZXJyKGRldiwKIAkJCQkiZmFpbGVkIHRvIHBhcnNlIERUIGZvciByZWd1bGF0b3IgJXNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9wd20tcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9wd20tcmVndWxhdG9yLmMKaW5kZXggZDNmNTVlYS4uOTFmMzRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcHdtLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3B3bS1yZWd1bGF0b3IuYwpAQCAtMTQ5LDcgKzE0OSw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JY29uZmlnLmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIG5wKTsKKwljb25maWcuaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgbnAsCisJCQkJCQkgICAgICAmZHJ2ZGF0YS0+ZGVzYyk7CiAJaWYgKCFjb25maWcuaW5pdF9kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcWNvbV9ycG0tcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9xY29tX3JwbS1yZWd1bGF0b3IuYwppbmRleCBiNTVjZDViLi4xODM1OThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9xY29tX3JwbS1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9xY29tX3JwbS1yZWd1bGF0b3IuYwpAQCAtMTgzLDYgKzE4MywxMyBAQAogCVJFR1VMQVRPUl9MSU5FQVJfUkFOR0UoMTUwMDAwMCwgIDY0LCAxMDAsIDUwMDAwKSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2xpbmVhcl9yYW5nZSBzbWIyMDhfcmFuZ2VzW10gPSB7CisJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSggMzc1MDAwLCAgIDAsICAyOSwgMTI1MDApLAorCVJFR1VMQVRPUl9MSU5FQVJfUkFOR0UoIDc1MDAwMCwgIDMwLCAgODksIDEyNTAwKSwKKwlSRUdVTEFUT1JfTElORUFSX1JBTkdFKDE1MDAwMDAsICA5MCwgMTUzLCAyNTAwMCksCisJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSgzMTAwMDAwLCAxNTQsIDIzNCwgMjUwMDApLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfbGluZWFyX3JhbmdlIG5jcF9yYW5nZXNbXSA9IHsKIAlSRUdVTEFUT1JfTElORUFSX1JBTkdFKDE1MDAwMDAsICAgMCwgIDMxLCA1MDAwMCksCiB9OwpAQCAtNTU5LDYgKzU2NiwxNiBAQAogCS5wYXJ0cyA9ICZycG04OTYwX3N3aXRjaF9wYXJ0cywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcWNvbV9ycG1fcmVnIHNtYjIwOF9zbXBzID0geworCS5kZXNjLmxpbmVhcl9yYW5nZXMgPSBzbWIyMDhfcmFuZ2VzLAorCS5kZXNjLm5fbGluZWFyX3JhbmdlcyA9IEFSUkFZX1NJWkUoc21iMjA4X3JhbmdlcyksCisJLmRlc2Mubl92b2x0YWdlcyA9IDIzNSwKKwkuZGVzYy5vcHMgPSAmdVZfb3BzLAorCS5wYXJ0cyA9ICZycG04OTYwX3NtcHNfcGFydHMsCisJLnN1cHBvcnRzX2ZvcmNlX21vZGVfYXV0byA9IGZhbHNlLAorCS5zdXBwb3J0c19mb3JjZV9tb2RlX2J5cGFzcyA9IGZhbHNlLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnBtX29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJxY29tLHJwbS1wbTgwNTgtcGxkbyIsICAgICAuZGF0YSA9ICZwbTgwNThfcGxkbyB9LAogCXsgLmNvbXBhdGlibGUgPSAicWNvbSxycG0tcG04MDU4LW5sZG8iLCAgICAgLmRhdGEgPSAmcG04MDU4X25sZG8gfSwKQEAgLTU3OCw2ICs1OTUsOCBAQAogCXsgLmNvbXBhdGlibGUgPSAicWNvbSxycG0tcG04OTIxLWZ0c21wcyIsICAgLmRhdGEgPSAmcG04OTIxX2Z0c21wcyB9LAogCXsgLmNvbXBhdGlibGUgPSAicWNvbSxycG0tcG04OTIxLW5jcCIsICAgICAgLmRhdGEgPSAmcG04OTIxX25jcCB9LAogCXsgLmNvbXBhdGlibGUgPSAicWNvbSxycG0tcG04OTIxLXN3aXRjaCIsICAgLmRhdGEgPSAmcG04OTIxX3N3aXRjaCB9LAorCisJeyAuY29tcGF0aWJsZSA9ICJxY29tLHJwbS1zbWIyMDgiLCAuZGF0YSA9ICZzbWIyMDhfc21wcyB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJwbV9vZl9tYXRjaCk7CkBAIC02NDMsMTAgKzY2Miw2IEBACiAJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UocnBtX29mX21hdGNoLCAmcGRldi0+ZGV2KTsKIAl0ZW1wbGF0ZSA9IG1hdGNoLT5kYXRhOwogCi0JaW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LCBwZGV2LT5kZXYub2Zfbm9kZSk7Ci0JaWYgKCFpbml0ZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAl2cmVnID0gZGV2bV9rbWFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqdnJlZyksIEdGUF9LRVJORUwpOwogCWlmICghdnJlZykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgdnJlZ1xuIik7CkBAIC02NjYsNiArNjgxLDExIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCSAgICAgICZ2cmVnLT5kZXNjKTsKKwlpZiAoIWluaXRkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWtleSA9ICJyZWciOwogCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCBrZXksICZ2YWwpOwogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivcms4MDgtcmVndWxhdG9yLmMKaW5kZXggMTk2YTVjOC4uZWE5ZDA1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivcms4MDgtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivcms4MDgtcmVndWxhdG9yLmMKQEAgLTM2LDYgKzM2LDEyIEBACiAjZGVmaW5lIFJLODA4X1JBTVBfUkFURV82TVZfUEVSX1VTCSgyIDw8IFJLODA4X1JBTVBfUkFURV9PRkZTRVQpCiAjZGVmaW5lIFJLODA4X1JBTVBfUkFURV8xME1WX1BFUl9VUwkoMyA8PCBSSzgwOF9SQU1QX1JBVEVfT0ZGU0VUKQogCisvKiBPZmZzZXQgZnJvbSBYWFhfT05fVlNFTCB0byBYWFhfU0xQX1ZTRUwgKi8KKyNkZWZpbmUgUks4MDhfU0xQX1JFR19PRkZTRVQgMQorCisvKiBPZmZzZXQgZnJvbSBYWFhfRU5fUkVHIHRvIFNMRUVQX1NFVF9PRkZfWFhYICovCisjZGVmaW5lIFJLODA4X1NMUF9TRVRfT0ZGX1JFR19PRkZTRVQgMgorCiBzdGF0aWMgY29uc3QgaW50IHJrODA4X2J1Y2tfY29uZmlnX3JlZ3NbXSA9IHsKIAlSSzgwOF9CVUNLMV9DT05GSUdfUkVHLAogCVJLODA4X0JVQ0syX0NPTkZJR19SRUcsCkBAIC05MSw2ICs5Nyw0MyBAQAogCQkJCSAgUks4MDhfUkFNUF9SQVRFX01BU0ssIHJhbXBfdmFsdWUpOwogfQogCitpbnQgcms4MDhfc2V0X3N1c3BlbmRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHV2KQoreworCXVuc2lnbmVkIGludCByZWc7CisJaW50IHNlbCA9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXJfcmFuZ2UocmRldiwgdXYsIHV2KTsKKworCWlmIChzZWwgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZyA9IHJkZXYtPmRlc2MtPnZzZWxfcmVnICsgUks4MDhfU0xQX1JFR19PRkZTRVQ7CisKKwlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmVnLAorCQkJCSAgcmRldi0+ZGVzYy0+dnNlbF9tYXNrLAorCQkJCSAgc2VsKTsKK30KKworaW50IHJrODA4X3NldF9zdXNwZW5kX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZyArIFJLODA4X1NMUF9TRVRfT0ZGX1JFR19PRkZTRVQ7CisKKwlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmVnLAorCQkJCSAgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssCisJCQkJICAwKTsKK30KKworaW50IHJrODA4X3NldF9zdXNwZW5kX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcgKyBSSzgwOF9TTFBfU0VUX09GRl9SRUdfT0ZGU0VUOworCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJlZywKKwkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLAorCQkJCSAgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2spOworfQorCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcms4MDhfYnVjazFfMl9vcHMgPSB7CiAJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhcl9yYW5nZSwKIAkubWFwX3ZvbHRhZ2UJCT0gcmVndWxhdG9yX21hcF92b2x0YWdlX2xpbmVhcl9yYW5nZSwKQEAgLTEwMCw2ICsxNDMsOSBAQAogCS5kaXNhYmxlCQk9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKIAkuaXNfZW5hYmxlZAkJPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCiAJLnNldF9yYW1wX2RlbGF5CQk9IHJrODA4X3NldF9yYW1wX2RlbGF5LAorCS5zZXRfc3VzcGVuZF92b2x0YWdlCT0gcms4MDhfc2V0X3N1c3BlbmRfdm9sdGFnZSwKKwkuc2V0X3N1c3BlbmRfZW5hYmxlCT0gcms4MDhfc2V0X3N1c3BlbmRfZW5hYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gcms4MDhfc2V0X3N1c3BlbmRfZGlzYWJsZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyByazgwOF9yZWdfb3BzID0gewpAQCAtMTEwLDEyICsxNTYsMTcgQEAKIAkuZW5hYmxlCQkJPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKIAkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCiAJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5zZXRfc3VzcGVuZF92b2x0YWdlCT0gcms4MDhfc2V0X3N1c3BlbmRfdm9sdGFnZSwKKwkuc2V0X3N1c3BlbmRfZW5hYmxlCT0gcms4MDhfc2V0X3N1c3BlbmRfZW5hYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gcms4MDhfc2V0X3N1c3BlbmRfZGlzYWJsZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyByazgwOF9zd2l0Y2hfb3BzID0gewotCS5lbmFibGUgPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKLQkuZGlzYWJsZSA9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKLQkuaXNfZW5hYmxlZCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkuZW5hYmxlCQkJPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKKwkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCisJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5zZXRfc3VzcGVuZF9lbmFibGUJPSByazgwOF9zZXRfc3VzcGVuZF9lbmFibGUsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUJPSByazgwOF9zZXRfc3VzcGVuZF9kaXNhYmxlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyByazgwOF9yZWdbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3JuNXQ2MTgtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9ybjV0NjE4LXJlZ3VsYXRvci5jCmluZGV4IGU1OGQ3OWEuLmI4NWNlYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3JuNXQ2MTgtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivcm41dDYxOC1yZWd1bGF0b3IuYwpAQCAtMzEsNiArMzEsOCBAQAogI2RlZmluZSBSRUcocmlkLCBlcmVnLCBlbWFzaywgdnJlZywgdm1hc2ssIG1pbiwgbWF4LCBzdGVwKQkJXAogCVtSTjVUNjE4XyMjcmlkXSA9IHsJCQkJCQlcCiAJCS5uYW1lCQk9ICNyaWQsCQkJCQlcCisJCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigjcmlkKSwJCQlcCisJCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJCVwKIAkJLmlkCQk9IFJONVQ2MThfIyNyaWQsCQkJXAogCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwJCQkJXApAQCAtNjAsNjAgKzYyLDE1IEBACiAJUkVHKExET1JUQzIsIExET0VOMiwgQklUKDUpLCBMRE9SVEMyREFDLCAweDdmLCA5MDAwMDAsIDM1MDAwMDAsIDI1MDAwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoIHJuNXQ2MThfbWF0Y2hlc1tdID0gewotCVtSTjVUNjE4X0RDREMxXQkJPSB7IC5uYW1lID0gIkRDREMxIiB9LAotCVtSTjVUNjE4X0RDREMyXQkJPSB7IC5uYW1lID0gIkRDREMyIiB9LAotCVtSTjVUNjE4X0RDREMzXQkJPSB7IC5uYW1lID0gIkRDREMzIiB9LAotCVtSTjVUNjE4X0xETzFdCQk9IHsgLm5hbWUgPSAiTERPMSIgfSwKLQlbUk41VDYxOF9MRE8yXQkJPSB7IC5uYW1lID0gIkxETzIiIH0sCi0JW1JONVQ2MThfTERPM10JCT0geyAubmFtZSA9ICJMRE8zIiB9LAotCVtSTjVUNjE4X0xETzRdCQk9IHsgLm5hbWUgPSAiTERPNCIgfSwKLQlbUk41VDYxOF9MRE81XQkJPSB7IC5uYW1lID0gIkxETzUiIH0sCi0JW1JONVQ2MThfTERPUlRDMV0JPSB7IC5uYW1lID0gIkxET1JUQzEiIH0sCi0JW1JONVQ2MThfTERPUlRDMl0JPSB7IC5uYW1lID0gIkxET1JUQzIiIH0sCi19OwotCi1zdGF0aWMgaW50IHJuNXQ2MThfcmVndWxhdG9yX3BhcnNlX2R0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCwgKnJlZ3VsYXRvcnM7Ci0JaW50IHJldDsKLQotCW5wID0gb2Zfbm9kZV9nZXQocGRldi0+ZGV2LnBhcmVudC0+b2Zfbm9kZSk7Ci0JaWYgKCFucCkKLQkJcmV0dXJuIDA7Ci0KLQlyZWd1bGF0b3JzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsICJyZWd1bGF0b3JzIik7Ci0JaWYgKCFyZWd1bGF0b3JzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ3VsYXRvcnMgbm9kZSBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPSBvZl9yZWd1bGF0b3JfbWF0Y2goJnBkZXYtPmRldiwgcmVndWxhdG9ycywgcm41dDYxOF9tYXRjaGVzLAotCQkJCSBBUlJBWV9TSVpFKHJuNXQ2MThfbWF0Y2hlcykpOwotCW9mX25vZGVfcHV0KHJlZ3VsYXRvcnMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIHBhcnNpbmcgcmVndWxhdG9yIGluaXQgZGF0YTogJWRcbiIsCi0JCQlyZXQpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHJuNXQ2MThfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJuNXQ2MTggKnJuNXQ2MTggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY29uZmlnID0geyB9OwogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwotCWludCByZXQsIGk7Ci0KLQlyZXQgPSBybjV0NjE4X3JlZ3VsYXRvcl9wYXJzZV9kdChwZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFJONVQ2MThfUkVHX05VTTsgaSsrKSB7Ci0JCWNvbmZpZy5kZXYgPSAmcGRldi0+ZGV2OwotCQljb25maWcuaW5pdF9kYXRhID0gcm41dDYxOF9tYXRjaGVzW2ldLmluaXRfZGF0YTsKLQkJY29uZmlnLm9mX25vZGUgPSBybjV0NjE4X21hdGNoZXNbaV0ub2Zfbm9kZTsKKwkJY29uZmlnLmRldiA9IHBkZXYtPmRldi5wYXJlbnQ7CiAJCWNvbmZpZy5yZWdtYXAgPSBybjV0NjE4LT5yZWdtYXA7CiAKIAkJcmRldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9ydDUwMzMtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9ydDUwMzMtcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcwY2M0OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3J0NTAzMy1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIFJlZ3VsYXRvciBkcml2ZXIgZm9yIHRoZSBSaWNodGVrIFJUNTAzMworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzLCBDby4sIEx0ZC4KKyAqIEF1dGhvcjogQmVvbWhvIFNlbyA8YmVvbWhvLnNlb0BzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvcnQ1MDMzLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3J0NTAzMy1wcml2YXRlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oPgorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcnQ1MDMzX3NhZmVfbGRvX29wcyA9IHsKKwkuaXNfZW5hYmxlZAkJPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCisJLmVuYWJsZQkJCT0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCisJLmRpc2FibGUJCT0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5saXN0X3ZvbHRhZ2UJCT0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcnQ1MDMzX2J1Y2tfb3BzID0geworCS5pc19lbmFibGVkCQk9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkuZW5hYmxlCQkJPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKKwkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCisJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhciwKKwkubWFwX3ZvbHRhZ2UJCT0gcmVndWxhdG9yX21hcF92b2x0YWdlX2xpbmVhciwKKwkuZ2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCisJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBydDUwMzNfc3VwcG9ydGVkX3JlZ3VsYXRvcnNbXSA9IHsKKwlbUlQ1MDMzX0JVQ0tdID0geworCQkubmFtZQkJPSAiQlVDSyIsCisJCS5pZAkJPSBSVDUwMzNfQlVDSywKKwkJLm9wcwkJPSAmcnQ1MDMzX2J1Y2tfb3BzLAorCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubl92b2x0YWdlcwk9IFJUNTAzM19SRUdVTEFUT1JfQlVDS19WT0xUQUdFX1NURVBfTlVNLAorCQkubWluX3VWCQk9IFJUNTAzM19SRUdVTEFUT1JfQlVDS19WT0xUQUdFX01JTiwKKwkJLnVWX3N0ZXAJPSBSVDUwMzNfUkVHVUxBVE9SX0JVQ0tfVk9MVEFHRV9TVEVQLAorCQkuZW5hYmxlX3JlZwk9IFJUNTAzM19SRUdfQ1RSTCwKKwkJLmVuYWJsZV9tYXNrCT0gUlQ1MDMzX0NUUkxfRU5fQlVDS19NQVNLLAorCQkudnNlbF9yZWcJPSBSVDUwMzNfUkVHX0JVQ0tfQ1RSTCwKKwkJLnZzZWxfbWFzawk9IFJUNTAzM19CVUNLX0NUUkxfTUFTSywKKwl9LAorCVtSVDUwMzNfTERPXSA9IHsKKwkJLm5hbWUJCT0gIkxETyIsCisJCS5pZAkJPSBSVDUwMzNfTERPLAorCQkub3BzCQk9ICZydDUwMzNfYnVja19vcHMsCisJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5uX3ZvbHRhZ2VzCT0gUlQ1MDMzX1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9TVEVQX05VTSwKKwkJLm1pbl91VgkJPSBSVDUwMzNfUkVHVUxBVE9SX0xET19WT0xUQUdFX01JTiwKKwkJLnVWX3N0ZXAJPSBSVDUwMzNfUkVHVUxBVE9SX0xET19WT0xUQUdFX1NURVAsCisJCS5lbmFibGVfcmVnCT0gUlQ1MDMzX1JFR19DVFJMLAorCQkuZW5hYmxlX21hc2sJPSBSVDUwMzNfQ1RSTF9FTl9MRE9fTUFTSywKKwkJLnZzZWxfcmVnCT0gUlQ1MDMzX1JFR19MRE9fQ1RSTCwKKwkJLnZzZWxfbWFzawk9IFJUNTAzM19MRE9fQ1RSTF9NQVNLLAorCX0sCisJW1JUNTAzM19TQUZFX0xET10gPSB7CisJCS5uYW1lCQk9ICJTQUZFX0xETyIsCisJCS5pZAkJPSBSVDUwMzNfU0FGRV9MRE8sCisJCS5vcHMJCT0gJnJ0NTAzM19zYWZlX2xkb19vcHMsCisJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5uX3ZvbHRhZ2VzCT0gMSwKKwkJLm1pbl91VgkJPSBSVDUwMzNfUkVHVUxBVE9SX1NBRkVfTERPX1ZPTFRBR0UsCisJCS5lbmFibGVfcmVnCT0gUlQ1MDMzX1JFR19DVFJMLAorCQkuZW5hYmxlX21hc2sJPSBSVDUwMzNfQ1RSTF9FTl9TQUZFX0xET19NQVNLLAorCX0sCit9OworCitzdGF0aWMgaW50IHJ0NTAzM19yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnQ1MDMzX2RldiAqcnQ1MDMzID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCWludCByZXQsIGk7CisJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY29uZmlnID0ge307CisKKwljb25maWcuZGV2ID0gJnBkZXYtPmRldjsKKwljb25maWcuZHJpdmVyX2RhdGEgPSBydDUwMzM7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydDUwMzNfc3VwcG9ydGVkX3JlZ3VsYXRvcnMpOyBpKyspIHsKKwkJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ3VsYXRvcjsKKworCQljb25maWcucmVnbWFwID0gcnQ1MDMzLT5yZWdtYXA7CisKKwkJcmVndWxhdG9yID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoJnBkZXYtPmRldiwKKwkJCQkmcnQ1MDMzX3N1cHBvcnRlZF9yZWd1bGF0b3JzW2ldLCAmY29uZmlnKTsKKwkJaWYgKElTX0VSUihyZWd1bGF0b3IpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHJlZ3VsYXRvcik7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIlJlZ3VsYXRvciBpbml0IGZhaWxlZCAlZDogd2l0aCBlcnJvcjogJWRcbiIsCisJCQkJaSwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgcnQ1MDMzX3JlZ3VsYXRvcl9pZFtdID0geworCXsgInJ0NTAzMy1yZWd1bGF0b3IiLCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHJ0NTAzM19yZWd1bGF0b3JfaWQpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBydDUwMzNfcmVndWxhdG9yX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJydDUwMzMtcmVndWxhdG9yIiwKKwl9LAorCS5wcm9iZQkJPSBydDUwMzNfcmVndWxhdG9yX3Byb2JlLAorCS5pZF90YWJsZQk9IHJ0NTAzM19yZWd1bGF0b3JfaWQsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihydDUwMzNfcmVndWxhdG9yX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiUmljaHRlayBSVDUwMzMgUmVndWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQmVvbWhvIFNlbyA8YmVvbWhvLnNlb0BzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3MybXBhMDEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBhMDEuYwppbmRleCA0YWNlZmE2Li41ZGI0ZTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wYTAxLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvczJtcGEwMS5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAkuZW5hYmxlX21hc2sJPSBTMk1QQTAxX0VOQUJMRV9NQVNLCQkJXAogfQogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgcmVndWxhdG9yc1tdID0gewogCXJlZ3VsYXRvcl9kZXNjX2xkbygxLCBTVEVQXzI1X01WKSwKIAlyZWd1bGF0b3JfZGVzY19sZG8oMiwgU1RFUF81MF9NViksCiAJcmVndWxhdG9yX2Rlc2NfbGRvKDMsIFNURVBfNTBfTVYpLApAQCAtMzQxLDcgKzM0MSw3IEBACiB7CiAJc3RydWN0IHNlY19wbWljX2RldiAqaW9kZXYgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNlY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoaW9kZXYtPmRldik7Ci0Jc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCByZGF0YVtTMk1QQTAxX1JFR1VMQVRPUl9NQVhdOworCXN0cnVjdCBvZl9yZWd1bGF0b3JfbWF0Y2ggcmRhdGFbUzJNUEEwMV9SRUdVTEFUT1JfTUFYXSA9IHsgfTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlZ19ucCA9IE5VTEw7CiAJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY29uZmlnID0geyB9OwogCXN0cnVjdCBzMm1wYTAxX2luZm8gKnMybXBhMDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMKaW5kZXggYWRhYjgyZC4uYjM0NWNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvczJtcHMxMS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxMS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wczE0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHUwMi5oPgogCkBAIC00NSwxMCArNDYsMTAgQEAKIAllbnVtIHNlY19kZXZpY2VfdHlwZSBkZXZfdHlwZTsKIAogCS8qCi0JICogT25lIGJpdCBmb3IgZWFjaCBTMk1QUzE0L1MyTVBVMDIgcmVndWxhdG9yIHdoZXRoZXIgdGhlIHN1c3BlbmQgbW9kZQotCSAqIHdhcyBlbmFibGVkLgorCSAqIE9uZSBiaXQgZm9yIGVhY2ggUzJNUFMxMy9TMk1QUzE0L1MyTVBVMDIgcmVndWxhdG9yIHdoZXRoZXIKKwkgKiB0aGUgc3VzcGVuZCBtb2RlIHdhcyBlbmFibGVkLgogCSAqLwotCXVuc2lnbmVkIGxvbmcgbG9uZyBzMm1wczE0X3N1c3BlbmRfc3RhdGU6MzU7CisJdW5zaWduZWQgbG9uZyBsb25nIHMybXBzMTRfc3VzcGVuZF9zdGF0ZTo1MDsKIAogCS8qIEFycmF5IG9mIHNpemUgcmRldl9udW0gd2l0aCBHUElPLXMgZm9yIGV4dGVybmFsIHNsZWVwIGNvbnRyb2wgKi8KIAlpbnQgKmV4dF9jb250cm9sX2dwaW87CkBAIC0zNjksMTIgKzM3MCwxMDEgQEAKIAlyZWd1bGF0b3JfZGVzY19zMm1wczExX2J1Y2s2XzEwKDEwLCBNSU5fNzUwX01WLCBTVEVQXzEyXzVfTVYpLAogfTsKIAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHMybXBzMTRfcmVnX29wczsKKworI2RlZmluZSByZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbyhudW0sIG1pbiwgc3RlcCwgbWluX3NlbCkgewlcCisJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQlcCisJLmlkCQk9IFMyTVBTMTNfTERPIyNudW0sCQkJXAorCS5vcHMJCT0gJnMybXBzMTRfcmVnX29wcywJCQlcCisJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJXAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwJCQkJXAorCS5taW5fdVYJCT0gbWluLAkJCQkJXAorCS51Vl9zdGVwCT0gc3RlcCwJCQkJCVwKKwkubGluZWFyX21pbl9zZWwJPSBtaW5fc2VsLAkJCQlcCisJLm5fdm9sdGFnZXMJPSBTMk1QUzE0X0xET19OX1ZPTFRBR0VTLAkJXAorCS52c2VsX3JlZwk9IFMyTVBTMTNfUkVHX0wxQ1RSTCArIG51bSAtIDEsCQlcCisJLnZzZWxfbWFzawk9IFMyTVBTMTRfTERPX1ZTRUxfTUFTSywJCVwKKwkuZW5hYmxlX3JlZwk9IFMyTVBTMTNfUkVHX0wxQ1RSTCArIG51bSAtIDEsCQlcCisJLmVuYWJsZV9tYXNrCT0gUzJNUFMxNF9FTkFCTEVfTUFTSwkJCVwKK30KKworI2RlZmluZSByZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2sobnVtLCBtaW4sIHN0ZXAsIG1pbl9zZWwpIHsJXAorCS5uYW1lCQk9ICJCVUNLIiNudW0sCQkJCVwKKwkuaWQJCT0gUzJNUFMxM19CVUNLIyNudW0sCQkJXAorCS5vcHMJCT0gJnMybXBzMTRfcmVnX29wcywJCQlcCisJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJXAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwJCQkJXAorCS5taW5fdVYJCT0gbWluLAkJCQkJXAorCS51Vl9zdGVwCT0gc3RlcCwJCQkJCVwKKwkubGluZWFyX21pbl9zZWwJPSBtaW5fc2VsLAkJCQlcCisJLm5fdm9sdGFnZXMJPSBTMk1QUzE0X0JVQ0tfTl9WT0xUQUdFUywJCVwKKwkucmFtcF9kZWxheQk9IFMyTVBTMTNfQlVDS19SQU1QX0RFTEFZLAkJXAorCS52c2VsX3JlZwk9IFMyTVBTMTNfUkVHX0IxT1VUICsgKG51bSAtIDEpICogMiwJXAorCS52c2VsX21hc2sJPSBTMk1QUzE0X0JVQ0tfVlNFTF9NQVNLLAkJXAorCS5lbmFibGVfcmVnCT0gUzJNUFMxM19SRUdfQjFDVFJMICsgKG51bSAtIDEpICogMiwJXAorCS5lbmFibGVfbWFzawk9IFMyTVBTMTRfRU5BQkxFX01BU0sJCQlcCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgczJtcHMxM19yZWd1bGF0b3JzW10gPSB7CisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMSwgIE1JTl84MDBfTVYsICBTVEVQXzEyXzVfTVYsIDB4MDApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDIsICBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzLCAgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oNCwgIE1JTl84MDBfTVYsICBTVEVQXzEyXzVfTVYsIDB4MDApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDUsICBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbyg2LCAgTUlOXzgwMF9NViwgIFNURVBfMTJfNV9NViwgMHgwMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oNywgIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDgsICBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbyg5LCAgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTAsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDExLCBNSU5fODAwX01WLCAgU1RFUF8yNV9NViwgICAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxMiwgTUlOXzgwMF9NViwgIFNURVBfMjVfTVYsICAgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTMsIE1JTl84MDBfTVYsICBTVEVQXzI1X01WLCAgIDB4MTApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDE0LCBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxNSwgTUlOXzgwMF9NViwgIFNURVBfMTJfNV9NViwgMHgwMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTYsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDE3LCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxOCwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTksIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDIwLCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyMSwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjIsIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDIzLCBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyNCwgTUlOXzgwMF9NViwgIFNURVBfMTJfNV9NViwgMHgwMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjUsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDI2LCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyNywgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjgsIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDI5LCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzMCwgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMzEsIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDMyLCBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzMywgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMzQsIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDM1LCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzNiwgTUlOXzgwMF9NViwgIFNURVBfMTJfNV9NViwgMHgwMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMzcsIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDM4LCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzOSwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oNDAsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjaygxLCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDIsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soMywgIE1JTl81MDBfTVYsICBTVEVQXzZfMjVfTVYsIDB4MTApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg0LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDUsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soNiwgIE1JTl81MDBfTVYsICBTVEVQXzZfMjVfTVYsIDB4MTApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg3LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDgsICBNSU5fMTAwMF9NViwgU1RFUF8xMl81X01WLCAweDIwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soOSwgIE1JTl8xMDAwX01WLCBTVEVQXzEyXzVfTVYsIDB4MjApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjaygxMCwgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCit9OworCiBzdGF0aWMgaW50IHMybXBzMTRfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgczJtcHMxMV9pbmZvICpzMm1wczExID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJc3dpdGNoIChzMm1wczExLT5kZXZfdHlwZSkgeworCWNhc2UgUzJNUFMxM1g6CiAJY2FzZSBTMk1QUzE0WDoKIAkJaWYgKHMybXBzMTEtPnMybXBzMTRfc3VzcGVuZF9zdGF0ZSAmICgxIDw8IHJkZXZfZ2V0X2lkKHJkZXYpKSkKIAkJCXZhbCA9IFMyTVBTMTRfRU5BQkxFX1NVU1BFTkQ7CkBAIC00MDYsNiArNDk2LDcgQEAKIAogCS8qIEJlbG93IExETyBzaG91bGQgYmUgYWx3YXlzIG9uIG9yIGRvZXMgbm90IHN1cHBvcnQgc3VzcGVuZCBtb2RlLiAqLwogCXN3aXRjaCAoczJtcHMxMS0+ZGV2X3R5cGUpIHsKKwljYXNlIFMyTVBTMTNYOgogCWNhc2UgUzJNUFMxNFg6CiAJCXN3aXRjaCAocmRldl9pZCkgewogCQljYXNlIFMyTVBTMTRfTERPMzoKQEAgLTgzMSw2ICs5MjIsMTAgQEAKIAkJczJtcHMxMS0+cmRldl9udW0gPSBBUlJBWV9TSVpFKHMybXBzMTFfcmVndWxhdG9ycyk7CiAJCXJlZ3VsYXRvcnMgPSBzMm1wczExX3JlZ3VsYXRvcnM7CiAJCWJyZWFrOworCWNhc2UgUzJNUFMxM1g6CisJCXMybXBzMTEtPnJkZXZfbnVtID0gQVJSQVlfU0laRShzMm1wczEzX3JlZ3VsYXRvcnMpOworCQlyZWd1bGF0b3JzID0gczJtcHMxM19yZWd1bGF0b3JzOworCQlicmVhazsKIAljYXNlIFMyTVBTMTRYOgogCQlzMm1wczExLT5yZGV2X251bSA9IEFSUkFZX1NJWkUoczJtcHMxNF9yZWd1bGF0b3JzKTsKIAkJcmVndWxhdG9ycyA9IHMybXBzMTRfcmVndWxhdG9yczsKQEAgLTg0NSw3ICs5NDAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9OwogCi0JczJtcHMxMS0+ZXh0X2NvbnRyb2xfZ3BpbyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LAorCXMybXBzMTEtPmV4dF9jb250cm9sX2dwaW8gPSBkZXZtX2ttYWxsb2MoJnBkZXYtPmRldiwKIAkJCXNpemVvZigqczJtcHMxMS0+ZXh0X2NvbnRyb2xfZ3BpbykgKiBzMm1wczExLT5yZGV2X251bSwKIAkJCUdGUF9LRVJORUwpOwogCWlmICghczJtcHMxMS0+ZXh0X2NvbnRyb2xfZ3BpbykKQEAgLTg4Niw2ICs5ODEsNyBAQAogCWNvbmZpZy5yZWdtYXAgPSBpb2Rldi0+cmVnbWFwX3BtaWM7CiAJY29uZmlnLmRyaXZlcl9kYXRhID0gczJtcHMxMTsKIAljb25maWcuZW5hX2dwaW9fZmxhZ3MgPSBHUElPRl9PVVRfSU5JVF9ISUdIOworCWNvbmZpZy5lbmFfZ3Bpb19pbml0aWFsaXplZCA9IHRydWU7CiAJZm9yIChpID0gMDsgaSA8IHMybXBzMTEtPnJkZXZfbnVtOyBpKyspIHsKIAkJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ3VsYXRvcjsKIApAQCAtOTI3LDYgKzEwMjMsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzMm1wczExX3BtaWNfaWRbXSA9IHsKIAl7ICJzMm1wczExLXBtaWMiLCBTMk1QUzExWH0sCisJeyAiczJtcHMxMy1wbWljIiwgUzJNUFMxM1h9LAogCXsgInMybXBzMTQtcG1pYyIsIFMyTVBTMTRYfSwKIAl7ICJzMm1wdTAyLXBtaWMiLCBTMk1QVTAyfSwKIAl7IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9zNW04NzY3LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zNW04NzY3LmMKaW5kZXggMGFiNWNiZS4uZGMxMzI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvczVtODc2Ny5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3M1bTg3NjcuYwpAQCAtNTgxLDcgKzU4MSw4IEBACiAKIAkJcmRhdGEtPmlkID0gaTsKIAkJcmRhdGEtPmluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoCi0JCQkJCQkmcGRldi0+ZGV2LCByZWdfbnApOworCQkJCQkJJnBkZXYtPmRldiwgcmVnX25wLAorCQkJCQkJJnJlZ3VsYXRvcnNbaV0pOwogCQlyZGF0YS0+cmVnX25vZGUgPSByZWdfbnA7CiAJCXJkYXRhKys7CiAJCXJtb2RlLT5pZCA9IGk7CkBAIC05NTAsNiArOTUxLDcgQEAKIAkJY29uZmlnLm9mX25vZGUgPSBwZGF0YS0+cmVndWxhdG9yc1tpXS5yZWdfbm9kZTsKIAkJY29uZmlnLmVuYV9ncGlvID0gLUVJTlZBTDsKIAkJY29uZmlnLmVuYV9ncGlvX2ZsYWdzID0gMDsKKwkJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKIAkJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnJlZ3VsYXRvcnNbaV0uZXh0X2NvbnRyb2xfZ3BpbykpCiAJCQlzNW04NzY3X3JlZ3VsYXRvcl9jb25maWdfZXh0X2NvbnRyb2woczVtODc2NywKIAkJCQkJJnBkYXRhLT5yZWd1bGF0b3JzW2ldLCAmY29uZmlnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3NreTgxNDUyLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLmMKaW5kZXggOTdhZmYwYy4uNjQ3ODYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLmMKQEAgLTUsOSArNSw4IEBACiAgKiBBdXRob3IgOiBHeXVuZ29oIFlvbyA8amFjay55b29Ac2t5d29ya3NpbmMuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtNTIsNiArNTEsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHNreTgxNDUyX3JlZyA9IHsKIAkubmFtZSA9ICJMT1VUIiwKKwkub2ZfbWF0Y2ggPSBvZl9tYXRjaF9wdHIoImxvdXQiKSwKKwkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3IiKSwKIAkub3BzID0gJnNreTgxNDUyX3JlZ19vcHMsCiAJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTY0LDMwICs2NSw2IEBACiAJLmVuYWJsZV9tYXNrID0gU0tZODE0NTJfTEVOLAogfTsKIAotI2lmZGVmIENPTkZJR19PRgotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpza3k4MTQ1Ml9yZWdfcGFyc2VfZHQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LT5wYXJlbnQtPm9mX25vZGUsICJyZWd1bGF0b3IiKTsKLQlpZiAodW5saWtlbHkoIW5wKSkgewotCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvciBub2RlIG5vdCBmb3VuZCIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wKTsKLQotCW9mX25vZGVfcHV0KG5wKTsKLQlyZXR1cm4gaW5pdF9kYXRhOwotfQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqc2t5ODE0NTJfcmVnX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHNreTgxNDUyX3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CkBAIC05NSwyMCArNzIsMTYgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyBjb25maWcgPSB7IH07CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CiAKLQlpZiAoIWluaXRfZGF0YSkgewotCQlpbml0X2RhdGEgPSBza3k4MTQ1Ml9yZWdfcGFyc2VfZHQoZGV2KTsKLQkJaWYgKElTX0VSUihpbml0X2RhdGEpKQotCQkJcmV0dXJuIFBUUl9FUlIoaW5pdF9kYXRhKTsKLQl9Ci0KLQljb25maWcuZGV2ID0gZGV2OworCWNvbmZpZy5kZXYgPSBkZXYtPnBhcmVudDsKIAljb25maWcuaW5pdF9kYXRhID0gaW5pdF9kYXRhOwogCWNvbmZpZy5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOwogCWNvbmZpZy5yZWdtYXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQpOwogCiAJcmRldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKGRldiwgJnNreTgxNDUyX3JlZywgJmNvbmZpZyk7Ci0JaWYgKElTX0VSUihyZGV2KSkKKwlpZiAoSVNfRVJSKHJkZXYpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyLiBlcnI9JWxkXG4iLCBQVFJfRVJSKHJkZXYpKTsKIAkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7CiAKQEAgLTEyNiw1ICs5OSw0IEBACiAKIE1PRFVMRV9ERVNDUklQVElPTigiU2t5d29ya3MgU0tZODE0NTIgUmVndWxhdG9yIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiR3l1bmdvaCBZb28gPGphY2sueW9vQHNreXdvcmtzaW5jLmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCIxLjAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3N0dzQ4MXgtdm1tYy5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivc3R3NDgxeC12bW1jLmMKaW5kZXggYTdlMTUyNi4uYjRmMTY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivc3R3NDgxeC12bW1jLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivc3R3NDgxeC12bW1jLmMKQEAgLTcyLDcgKzcyLDggQEAKIAljb25maWcucmVnbWFwID0gc3R3NDgxeC0+bWFwOwogCWNvbmZpZy5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAJY29uZmlnLmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsCi0JCQkJCQkgICAgICBwZGV2LT5kZXYub2Zfbm9kZSk7CisJCQkJCQkgICAgICBwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJCSAgICAgICZ2bW1jX3JlZ3VsYXRvcik7CiAKIAlzdHc0ODF4LT52bW1jX3JlZ3VsYXRvciA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCiAJCQkJCQkmdm1tY19yZWd1bGF0b3IsICZjb25maWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdGktYWJiLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdGktYWJiLXJlZ3VsYXRvci5jCmluZGV4IGEyZGFiYjUuLjFlZjVhYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RpLWFiYi1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90aS1hYmItcmVndWxhdG9yLmMKQEAgLTgzNyw3ICs4MzcsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpbml0ZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgcGRldi0+ZGV2Lm9mX25vZGUpOworCWluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJICAgICAgJmFiYi0+cmRlc2MpOwogCWlmICghaW5pdGRhdGEpIHsKIAkJZGV2X2VycihkZXYsICIlczogVW5hYmxlIHRvIGFsbG9jIHJlZ3VsYXRvciBpbml0IGRhdGFcbiIsCiAJCQlfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM1MTYzMi1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczUxNjMyLXJlZ3VsYXRvci5jCmluZGV4IGYzMWYyMmUuLmMyMTNlMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczUxNjMyLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczUxNjMyLXJlZ3VsYXRvci5jCkBAIC0yMjEsNyArMjIxLDggQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRwczUxNjMyX29mX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCB0cHM1MTYzMl9yZWd1bGF0b3JfcGxhdGZvcm1fZGF0YSAqCi0Jb2ZfZ2V0X3RwczUxNjMyX3BsYXRmb3JtX2RhdGEoc3RydWN0IGRldmljZSAqZGV2KQorCW9mX2dldF90cHM1MTYzMl9wbGF0Zm9ybV9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IHRwczUxNjMyX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwpAQCAtMjMwLDcgKzIzMSw4IEBACiAJaWYgKCFwZGF0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlwZGF0YS0+cmVnX2luaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgZGV2LT5vZl9ub2RlKTsKKwlwZGF0YS0+cmVnX2luaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgZGV2LT5vZl9ub2RlLAorCQkJCQkJCSAgZGVzYyk7CiAJaWYgKCFwZGF0YS0+cmVnX2luaXRfZGF0YSkgewogCQlkZXZfZXJyKGRldiwgIk5vdCBhYmxlIHRvIGdldCBPRiByZWd1bGF0b3IgaW5pdCBkYXRhXG4iKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNDgsNyArMjUwLDggQEAKIH0KICNlbHNlCiBzdGF0aWMgc3RydWN0IHRwczUxNjMyX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhICoKLQlvZl9nZXRfdHBzNTE2MzJfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCisJb2ZfZ2V0X3RwczUxNjMyX3BsYXRmb3JtX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTI3Myw5ICsyNzYsMjUgQEAKIAkJfQogCX0KIAorCXRwcyA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqdHBzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cHMpCisJCXJldHVybiAtRU5PTUVNOworCisJdHBzLT5kZXYgPSAmY2xpZW50LT5kZXY7CisJdHBzLT5kZXNjLm5hbWUgPSBjbGllbnQtPm5hbWU7CisJdHBzLT5kZXNjLmlkID0gMDsKKwl0cHMtPmRlc2MucmFtcF9kZWxheSA9IFRQUzUxNjMyX0RFRkFVTFRfUkFNUF9ERUxBWTsKKwl0cHMtPmRlc2MubWluX3VWID0gVFBTNTE2MzJfTUlOX1ZPTFRBR0U7CisJdHBzLT5kZXNjLnVWX3N0ZXAgPSBUUFM1MTYzMl9WT0xUQUdFX1NURVBfMTBtVjsKKwl0cHMtPmRlc2MubGluZWFyX21pbl9zZWwgPSBUUFM1MTYzMl9NSU5fVlNFTDsKKwl0cHMtPmRlc2Mubl92b2x0YWdlcyA9IFRQUzUxNjMyX01BWF9WU0VMICsgMTsKKwl0cHMtPmRlc2Mub3BzID0gJnRwczUxNjMyX2RjZGNfb3BzOworCXRwcy0+ZGVzYy50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0U7CisJdHBzLT5kZXNjLm93bmVyID0gVEhJU19NT0RVTEU7CisKIAlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJmNsaWVudC0+ZGV2KTsKIAlpZiAoIXBkYXRhICYmIGNsaWVudC0+ZGV2Lm9mX25vZGUpCi0JCXBkYXRhID0gb2ZfZ2V0X3RwczUxNjMyX3BsYXRmb3JtX2RhdGEoJmNsaWVudC0+ZGV2KTsKKwkJcGRhdGEgPSBvZl9nZXRfdHBzNTE2MzJfcGxhdGZvcm1fZGF0YSgmY2xpZW50LT5kZXYsICZ0cHMtPmRlc2MpOwogCWlmICghcGRhdGEpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJObyBQbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTYsMjIgKzMxNSw2IEBACiAJCX0KIAl9CiAKLQl0cHMgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKnRwcyksIEdGUF9LRVJORUwpOwotCWlmICghdHBzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXRwcy0+ZGV2ID0gJmNsaWVudC0+ZGV2OwotCXRwcy0+ZGVzYy5uYW1lID0gY2xpZW50LT5uYW1lOwotCXRwcy0+ZGVzYy5pZCA9IDA7Ci0JdHBzLT5kZXNjLnJhbXBfZGVsYXkgPSBUUFM1MTYzMl9ERUZBVUxUX1JBTVBfREVMQVk7Ci0JdHBzLT5kZXNjLm1pbl91ViA9IFRQUzUxNjMyX01JTl9WT0xUQUdFOwotCXRwcy0+ZGVzYy51Vl9zdGVwID0gVFBTNTE2MzJfVk9MVEFHRV9TVEVQXzEwbVY7Ci0JdHBzLT5kZXNjLmxpbmVhcl9taW5fc2VsID0gVFBTNTE2MzJfTUlOX1ZTRUw7Ci0JdHBzLT5kZXNjLm5fdm9sdGFnZXMgPSBUUFM1MTYzMl9NQVhfVlNFTCArIDE7Ci0JdHBzLT5kZXNjLm9wcyA9ICZ0cHM1MTYzMl9kY2RjX29wczsKLQl0cHMtPmRlc2MudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFOwotCXRwcy0+ZGVzYy5vd25lciA9IFRISVNfTU9EVUxFOwotCiAJaWYgKHBkYXRhLT5lbmFibGVfcHdtX2R2ZnMpCiAJCXRwcy0+ZGVzYy52c2VsX3JlZyA9IFRQUzUxNjMyX1ZPTFRBR0VfQkFTRV9SRUc7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjIzNjAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2MjM2MC1yZWd1bGF0b3IuYwppbmRleCBhMTY3MjA0Li5hMWZkNjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2MjM2MC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2MjM2MC1yZWd1bGF0b3IuYwpAQCAtMjkzLDcgKzI5Myw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHRwczYyMzYwX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhICoKLQlvZl9nZXRfdHBzNjIzNjBfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCisJb2ZfZ2V0X3RwczYyMzYwX3BsYXRmb3JtX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgdHBzNjIzNjBfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CkBAIC0zMDIsNyArMzAzLDggQEAKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gTlVMTDsKIAotCXBkYXRhLT5yZWdfaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUpOworCXBkYXRhLT5yZWdfaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUsCisJCQkJCQkJICBkZXNjKTsKIAlpZiAoIXBkYXRhLT5yZWdfaW5pdF9kYXRhKSB7CiAJCWRldl9lcnIoZGV2LCAiTm90IGFibGUgdG8gZ2V0IE9GIHJlZ3VsYXRvciBpbml0IGRhdGFcbiIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTM1MCw2ICszNTIsMTcgQEAKIAogCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOwogCisJdHBzID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCp0cHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cHMtPmRlc2MubmFtZSA9IGNsaWVudC0+bmFtZTsKKwl0cHMtPmRlc2MuaWQgPSAwOworCXRwcy0+ZGVzYy5vcHMgPSAmdHBzNjIzNjBfZGNkY19vcHM7CisJdHBzLT5kZXNjLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKKwl0cHMtPmRlc2Mub3duZXIgPSBUSElTX01PRFVMRTsKKwl0cHMtPmRlc2MudVZfc3RlcCA9IDEwMDAwOworCiAJaWYgKGNsaWVudC0+ZGV2Lm9mX25vZGUpIHsKIAkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG9mX21hdGNoX3B0cih0cHM2MjM2MF9vZl9tYXRjaCksCkBAIC0zNjAsNyArMzczLDggQEAKIAkJfQogCQljaGlwX2lkID0gKGludCkobG9uZyltYXRjaC0+ZGF0YTsKIAkJaWYgKCFwZGF0YSkKLQkJCXBkYXRhID0gb2ZfZ2V0X3RwczYyMzYwX3BsYXRmb3JtX2RhdGEoJmNsaWVudC0+ZGV2KTsKKwkJCXBkYXRhID0gb2ZfZ2V0X3RwczYyMzYwX3BsYXRmb3JtX2RhdGEoJmNsaWVudC0+ZGV2LAorCQkJCQkJCSAgICAgICZ0cHMtPmRlc2MpOwogCX0gZWxzZSBpZiAoaWQpIHsKIAkJY2hpcF9pZCA9IGlkLT5kcml2ZXJfZGF0YTsKIAl9IGVsc2UgewpAQCAtMzc0LDEwICszODgsNiBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQl0cHMgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKnRwcyksIEdGUF9LRVJORUwpOwotCWlmICghdHBzKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXRwcy0+ZW5fZGlzY2hhcmdlID0gcGRhdGEtPmVuX2Rpc2NoYXJnZTsKIAl0cHMtPmVuX2ludGVybmFsX3B1bGxkbiA9IHBkYXRhLT5lbl9pbnRlcm5hbF9wdWxsZG47CiAJdHBzLT52c2VsMF9ncGlvID0gcGRhdGEtPnZzZWwwX2dwaW87CkBAIC00MDEsMTMgKzQxMSw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXRwcy0+ZGVzYy5uYW1lID0gY2xpZW50LT5uYW1lOwotCXRwcy0+ZGVzYy5pZCA9IDA7Ci0JdHBzLT5kZXNjLm9wcyA9ICZ0cHM2MjM2MF9kY2RjX29wczsKLQl0cHMtPmRlc2MudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFOwotCXRwcy0+ZGVzYy5vd25lciA9IFRISVNfTU9EVUxFOwotCXRwcy0+ZGVzYy51Vl9zdGVwID0gMTAwMDA7Ci0KIAl0cHMtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJnRwczYyMzYwX3JlZ21hcF9jb25maWcpOwogCWlmIChJU19FUlIodHBzLT5yZWdtYXApKSB7CiAJCXJldCA9IFBUUl9FUlIodHBzLT5yZWdtYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwOTAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA5MC1yZWd1bGF0b3IuYwppbmRleCBkNWRmMWU5Li5mMWRmNDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA5MC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA5MC1yZWd1bGF0b3IuYwpAQCAtMzEyLDcgKzMxMiwxMSBAQAogCQkJZ3Bpb19mbGFnID0gR1BJT0ZfT1VUX0lOSVRfSElHSDsKIAogCQljb25maWctPmVuYV9ncGlvID0gdHBzX3BkYXRhLT5ncGlvOworCQljb25maWctPmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKIAkJY29uZmlnLT5lbmFfZ3Bpb19mbGFncyA9IGdwaW9fZmxhZzsKKwl9IGVsc2UgeworCQljb25maWctPmVuYV9ncGlvID0gLUVJTlZBTDsKKwkJY29uZmlnLT5lbmFfZ3Bpb19pbml0aWFsaXplZCA9IGZhbHNlOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUyMTgtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxOC1yZWd1bGF0b3IuYwppbmRleCBmMGE0MDI4Li4yNjNjYzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxOC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxOC1yZWd1bGF0b3IuYwpAQCAtMjMxLDcgKzIzMSw4IEBACiAKIAl0ZW1wbGF0ZSA9IG1hdGNoLT5kYXRhOwogCWlkID0gdGVtcGxhdGUtPmlkOwotCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIHBkZXYtPmRldi5vZl9ub2RlKTsKKwlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LCBwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJICAgICAgICZyZWd1bGF0b3JzW2lkXSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0cHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMKaW5kZXggMGI0Zjg2Ni4uZGQ3MjdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYwpAQCAtMTEwNCw3ICsxMTA0LDggQEAKIAkJdGVtcGxhdGUgPSBtYXRjaC0+ZGF0YTsKIAkJaWQgPSB0ZW1wbGF0ZS0+ZGVzYy5pZDsKIAkJaW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LAotCQkJCQkJICAgICAgcGRldi0+ZGV2Lm9mX25vZGUpOworCQkJCQkJICAgICAgcGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCQkgICAgICAmdGVtcGxhdGUtPmRlc2MpOwogCQlkcnZkYXRhID0gTlVMTDsKIAl9IGVsc2UgewogCQlpZCA9IHBkZXYtPmlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdmV4cHJlc3MuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3ZleHByZXNzLmMKaW5kZXggMDJlNzI2Ny4uNWU3Yzc4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdmV4cHJlc3MuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci92ZXhwcmVzcy5jCkBAIC03NCw3ICs3NCw4IEBACiAJcmVnLT5kZXNjLm93bmVyID0gVEhJU19NT0RVTEU7CiAJcmVnLT5kZXNjLmNvbnRpbnVvdXNfdm9sdGFnZV9yYW5nZSA9IHRydWU7CiAKLQlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCSAgICAgICAmcmVnLT5kZXNjKTsKIAlpZiAoIWluaXRfZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODk5NC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODk5NC1yZWd1bGF0b3IuYwppbmRleCBjMjQzNDZkLi44OGY1MDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTg5OTQtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jCkBAIC0xNDUsMTAgKzE0NSwxMiBAQAogCWNvbmZpZy5kcml2ZXJfZGF0YSA9IGxkbzsKIAljb25maWcucmVnbWFwID0gd204OTk0LT5yZWdtYXA7CiAJY29uZmlnLmluaXRfZGF0YSA9ICZsZG8tPmluaXRfZGF0YTsKLQlpZiAocGRhdGEpCisJaWYgKHBkYXRhKSB7CiAJCWNvbmZpZy5lbmFfZ3BpbyA9IHBkYXRhLT5sZG9baWRdLmVuYWJsZTsKLQllbHNlIGlmICh3bTg5OTQtPmRldi0+b2Zfbm9kZSkKKwl9IGVsc2UgaWYgKHdtODk5NC0+ZGV2LT5vZl9ub2RlKSB7CiAJCWNvbmZpZy5lbmFfZ3BpbyA9IHdtODk5NC0+cGRhdGEubGRvW2lkXS5lbmFibGU7CisJCWNvbmZpZy5lbmFfZ3Bpb19pbml0aWFsaXplZCA9IHRydWU7CisJfQogCiAJLyogVXNlIGRlZmF1bHQgY29uc3RyYWludHMgaWYgbm9uZSBzZXQgdXAgKi8KIAlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+bGRvW2lkXS5pbml0X2RhdGEgfHwgd204OTk0LT5kZXYtPm9mX25vZGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVzZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3Jlc2V0L01ha2VmaWxlCmluZGV4IDYwZmVkM2QuLjE1N2Q0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVzZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZXNldC9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIG9iai0kKENPTkZJR19SRVNFVF9DT05UUk9MTEVSKSArPSBjb3JlLm8KIG9iai0kKENPTkZJR19BUkNIX1NPQ0ZQR0EpICs9IHJlc2V0LXNvY2ZwZ2Eubworb2JqLSQoQ09ORklHX0FSQ0hfQkVSTElOKSArPSByZXNldC1iZXJsaW4ubwogb2JqLSQoQ09ORklHX0FSQ0hfU1VOWEkpICs9IHJlc2V0LXN1bnhpLm8KIG9iai0kKENPTkZJR19BUkNIX1NUSSkgKz0gc3RpLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9jb3JlLmMgYi9kcml2ZXJzL3Jlc2V0L2NvcmUuYwppbmRleCBiYWVhZjgyLi43OTU1ZTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jlc2V0L2NvcmUuYworKysgYi9kcml2ZXJzL3Jlc2V0L2NvcmUuYwpAQCAtMTI2LDYgKzEyNiwyMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmVzZXRfY29udHJvbF9kZWFzc2VydCk7CiAKIC8qKgorICogcmVzZXRfY29udHJvbF9zdGF0dXMgLSByZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gaWYgbm90IHN1cHBvcnRlZCwgYQorICogcG9zaXRpdmUgdmFsdWUgaWYgdGhlIHJlc2V0IGxpbmUgaXMgYXNzZXJ0ZWQsIG9yIHplcm8gaWYgdGhlIHJlc2V0CisgKiBsaW5lIGlzIG5vdCBhc3NlcnRlZC4KKyAqIEByc3RjOiByZXNldCBjb250cm9sbGVyCisgKi8KK2ludCByZXNldF9jb250cm9sX3N0YXR1cyhzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0YykKK3sKKwlpZiAocnN0Yy0+cmNkZXYtPm9wcy0+c3RhdHVzKQorCQlyZXR1cm4gcnN0Yy0+cmNkZXYtPm9wcy0+c3RhdHVzKHJzdGMtPnJjZGV2LCByc3RjLT5pZCk7CisKKwlyZXR1cm4gLUVOT1NZUzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlc2V0X2NvbnRyb2xfc3RhdHVzKTsKKworLyoqCiAgKiBvZl9yZXNldF9jb250cm9sX2dldCAtIExvb2t1cCBhbmQgb2J0YWluIGEgcmVmZXJlbmNlIHRvIGEgcmVzZXQgY29udHJvbGxlci4KICAqIEBub2RlOiBkZXZpY2UgdG8gYmUgcmVzZXQgYnkgdGhlIGNvbnRyb2xsZXIKICAqIEBpZDogcmVzZXQgbGluZSBuYW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jlc2V0L3Jlc2V0LWJlcmxpbi5jIGIvZHJpdmVycy9yZXNldC9yZXNldC1iZXJsaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGI0OGExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZXNldC9yZXNldC1iZXJsaW4uYwpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXJ2ZWxsIFRlY2hub2xvZ3kgR3JvdXAgTHRkLgorICoKKyAqIEFudG9pbmUgVGVuYXJ0IDxhbnRvaW5lLnRlbmFydEBmcmVlLWVsZWN0cm9ucy5jb20+CisgKiBTZWJhc3RpYW4gSGVzc2VsYmFydGggPHNlYmFzdGlhbi5oZXNzZWxiYXJ0aEBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0LWNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBCRVJMSU5fTUFYX1JFU0VUUwkzMgorCisjZGVmaW5lIHRvX2Jlcmxpbl9yZXNldF9wcml2KHApCQlcCisJY29udGFpbmVyX29mKChwKSwgc3RydWN0IGJlcmxpbl9yZXNldF9wcml2LCByY2RldikKKworc3RydWN0IGJlcmxpbl9yZXNldF9wcml2IHsKKwl2b2lkIF9faW9tZW0JCQkqYmFzZTsKKwl1bnNpZ25lZCBpbnQJCQlzaXplOworCXN0cnVjdCByZXNldF9jb250cm9sbGVyX2RldglyY2RldjsKK307CisKK3N0YXRpYyBpbnQgYmVybGluX3Jlc2V0X3Jlc2V0KHN0cnVjdCByZXNldF9jb250cm9sbGVyX2RldiAqcmNkZXYsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGlkKQoreworCXN0cnVjdCBiZXJsaW5fcmVzZXRfcHJpdiAqcHJpdiA9IHRvX2Jlcmxpbl9yZXNldF9wcml2KHJjZGV2KTsKKwlpbnQgb2Zmc2V0ID0gaWQgPj4gODsKKwlpbnQgbWFzayA9IEJJVChpZCAmIDB4MWYpOworCisJd3JpdGVsKG1hc2ssIHByaXYtPmJhc2UgKyBvZmZzZXQpOworCisJLyogbGV0IHRoZSByZXNldCBiZSBlZmZlY3RpdmUgKi8KKwl1ZGVsYXkoMTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzZXRfY29udHJvbF9vcHMgYmVybGluX3Jlc2V0X29wcyA9IHsKKwkucmVzZXQJPSBiZXJsaW5fcmVzZXRfcmVzZXQsCit9OworCitzdGF0aWMgaW50IGJlcmxpbl9yZXNldF94bGF0ZShzdHJ1Y3QgcmVzZXRfY29udHJvbGxlcl9kZXYgKnJjZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqcmVzZXRfc3BlYykKK3sKKwlzdHJ1Y3QgYmVybGluX3Jlc2V0X3ByaXYgKnByaXYgPSB0b19iZXJsaW5fcmVzZXRfcHJpdihyY2Rldik7CisJdW5zaWduZWQgb2Zmc2V0LCBiaXQ7CisKKwlpZiAoV0FSTl9PTihyZXNldF9zcGVjLT5hcmdzX2NvdW50ICE9IHJjZGV2LT5vZl9yZXNldF9uX2NlbGxzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvZmZzZXQgPSByZXNldF9zcGVjLT5hcmdzWzBdOworCWJpdCA9IHJlc2V0X3NwZWMtPmFyZ3NbMV07CisKKwlpZiAob2Zmc2V0ID49IHByaXYtPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJpdCA+PSBCRVJMSU5fTUFYX1JFU0VUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gKG9mZnNldCA8PCA4KSB8IGJpdDsKK30KKworc3RhdGljIGludCBfX2Jlcmxpbl9yZXNldF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IGJlcmxpbl9yZXNldF9wcml2ICpwcml2OworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJcmVzb3VyY2Vfc2l6ZV90IHNpemU7CisJaW50IHJldDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXNpemUgPSByZXNvdXJjZV9zaXplKCZyZXMpOworCXByaXYtPmJhc2UgPSBpb3JlbWFwKHJlcy5zdGFydCwgc2l6ZSk7CisJaWYgKCFwcml2LT5iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKwlwcml2LT5zaXplID0gc2l6ZTsKKworCXByaXYtPnJjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisJcHJpdi0+cmNkZXYub3BzID0gJmJlcmxpbl9yZXNldF9vcHM7CisJcHJpdi0+cmNkZXYub2Zfbm9kZSA9IG5wOworCXByaXYtPnJjZGV2Lm9mX3Jlc2V0X25fY2VsbHMgPSAyOworCXByaXYtPnJjZGV2Lm9mX3hsYXRlID0gYmVybGluX3Jlc2V0X3hsYXRlOworCisJcmVzZXRfY29udHJvbGxlcl9yZWdpc3RlcigmcHJpdi0+cmNkZXYpOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiZXJsaW5fcmVzZXRfb2ZfbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMi1jaGlwLWN0cmwiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJjZC1jaGlwLWN0cmwiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJxLWNoaXAtY3RybCIgfSwKKwl7IH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiZXJsaW5fcmVzZXRfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldDsKKworCWZvcl9lYWNoX21hdGNoaW5nX25vZGUobnAsIGJlcmxpbl9yZXNldF9vZl9tYXRjaCkgeworCQlyZXQgPSBfX2Jlcmxpbl9yZXNldF9pbml0KG5wKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGJlcmxpbl9yZXNldF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVzZXQvcmVzZXQtc29jZnBnYS5jIGIvZHJpdmVycy9yZXNldC9yZXNldC1zb2NmcGdhLmMKaW5kZXggNzljMzJjYS4uNDA1ODIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZXNldC9yZXNldC1zb2NmcGdhLmMKKysrIGIvZHJpdmVycy9yZXNldC9yZXNldC1zb2NmcGdhLmMKQEAgLTc2LDkgKzc2LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc29jZnBnYV9yZXNldF9zdGF0dXMoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwKKwkJCQl1bnNpZ25lZCBsb25nIGlkKQoreworCXN0cnVjdCBzb2NmcGdhX3Jlc2V0X2RhdGEgKmRhdGEgPSBjb250YWluZXJfb2YocmNkZXYsCisJCQkJCQlzdHJ1Y3Qgc29jZnBnYV9yZXNldF9kYXRhLCByY2Rldik7CisJaW50IGJhbmsgPSBpZCAvIEJJVFNfUEVSX0xPTkc7CisJaW50IG9mZnNldCA9IGlkICUgQklUU19QRVJfTE9ORzsKKwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwoZGF0YS0+bWVtYmFzZSArIE9GRlNFVF9NT0RSU1QgKyAoYmFuayAqIE5SX0JBTktTKSk7CisKKwlyZXR1cm4gIShyZWcgJiBCSVQob2Zmc2V0KSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVzZXRfY29udHJvbF9vcHMgc29jZnBnYV9yZXNldF9vcHMgPSB7CiAJLmFzc2VydAkJPSBzb2NmcGdhX3Jlc2V0X2Fzc2VydCwKIAkuZGVhc3NlcnQJPSBzb2NmcGdhX3Jlc2V0X2RlYXNzZXJ0LAorCS5zdGF0dXMJCT0gc29jZnBnYV9yZXNldF9zdGF0dXMsCiB9OwogCiBzdGF0aWMgaW50IHNvY2ZwZ2FfcmVzZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVzZXQvc3RpL0tjb25maWcgYi9kcml2ZXJzL3Jlc2V0L3N0aS9LY29uZmlnCmluZGV4IDg4ZDJkMDMuLmY4YzE1YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVzZXQvc3RpL0tjb25maWcKKysrIGIvZHJpdmVycy9yZXNldC9zdGkvS2NvbmZpZwpAQCAtMTIsNCArMTIsOCBAQAogCWJvb2wKIAlzZWxlY3QgU1RJX1JFU0VUX1NZU0NGRwogCitjb25maWcgU1RJSDQwN19SRVNFVAorCWJvb2wKKwlzZWxlY3QgU1RJX1JFU0VUX1NZU0NGRworCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9zdGkvTWFrZWZpbGUgYi9kcml2ZXJzL3Jlc2V0L3N0aS9NYWtlZmlsZQppbmRleCBiZTFjOTc2Li5kYzg1ZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jlc2V0L3N0aS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Jlc2V0L3N0aS9NYWtlZmlsZQpAQCAtMiwzICsyLDQgQEAKIAogb2JqLSQoQ09ORklHX1NUSUg0MTVfUkVTRVQpICs9IHJlc2V0LXN0aWg0MTUubwogb2JqLSQoQ09ORklHX1NUSUg0MTZfUkVTRVQpICs9IHJlc2V0LXN0aWg0MTYubworb2JqLSQoQ09ORklHX1NUSUg0MDdfUkVTRVQpICs9IHJlc2V0LXN0aWg0MDcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9zdGkvcmVzZXQtc3RpaDQwNy5jIGIvZHJpdmVycy9yZXNldC9zdGkvcmVzZXQtc3RpaDQwNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4M2RiNWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZXNldC9zdGkvcmVzZXQtc3RpaDQwNy5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyAoUiZEKSBMaW1pdGVkCisgKiBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQwNy1yZXNldHMuaD4KKyNpbmNsdWRlICJyZXNldC1zeXNjZmcuaCIKKworLyogU1RpSDQwNyBQZXJpcGhlcmFsIHBvd2VyZG93biBkZWZpbml0aW9ucy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyIHN0aWg0MDdfY29yZVtdID0gInN0LHN0aWg0MDctY29yZS1zeXNjZmciOworc3RhdGljIGNvbnN0IGNoYXIgc3RpaDQwN19zYmNfcmVnW10gPSAic3Qsc3RpaDQwNy1zYmMtcmVnLXN5c2NmZyI7CitzdGF0aWMgY29uc3QgY2hhciBzdGloNDA3X2xwbVtdID0gInN0LHN0aWg0MDctbHBtLXN5c2NmZyI7CisKKyNkZWZpbmUgU1RJSDQwN19QRE5fMChfYml0KSBcCisJX1NZU0NGR19SU1RfQ0goc3RpaDQwN19jb3JlLCBTWVNDRkdfNTAwMCwgX2JpdCwgU1lTU1RBVF81NTAwLCBfYml0KQorI2RlZmluZSBTVElINDA3X1BETl8xKF9iaXQpIFwKKwlfU1lTQ0ZHX1JTVF9DSChzdGloNDA3X2NvcmUsIFNZU0NGR181MDAxLCBfYml0LCBTWVNTVEFUXzU1MDEsIF9iaXQpCisjZGVmaW5lIFNUSUg0MDdfUEROX0VUSChfYml0LCBfc3RhdCkgXAorCV9TWVNDRkdfUlNUX0NIKHN0aWg0MDdfc2JjX3JlZywgU1lTQ0ZHXzQwMzIsIF9iaXQsIFNZU1NUQVRfNDUyMCwgX3N0YXQpCisKKy8qIFBvd2VyZG93biByZXF1ZXN0cyBjb250cm9sIDAgKi8KKyNkZWZpbmUgU1lTQ0ZHXzUwMDAJMHgwCisjZGVmaW5lIFNZU1NUQVRfNTUwMAkweDdkMAorLyogUG93ZXJkb3duIHJlcXVlc3RzIGNvbnRyb2wgMSAoSGlnaCBTcGVlZCBMaW5rcykgKi8KKyNkZWZpbmUgU1lTQ0ZHXzUwMDEJMHg0CisjZGVmaW5lIFNZU1NUQVRfNTUwMQkweDdkNAorCisvKiBFdGhlcm5ldCBwb3dlcmRvd24vc3RhdHVzL3Jlc2V0ICovCisjZGVmaW5lIFNZU0NGR180MDMyCTB4ODAKKyNkZWZpbmUgU1lTU1RBVF80NTIwCTB4ODIwCisjZGVmaW5lIFNZU0NGR180MDAyCTB4OAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NmZ19yZXNldF9jaGFubmVsX2RhdGEgc3RpaDQwN19wb3dlcmRvd25zW10gPSB7CisJW1NUSUg0MDdfRU1JU1NfUE9XRVJET1dOXSA9IFNUSUg0MDdfUEROXzAoMSksCisJW1NUSUg0MDdfTkFORF9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMCgwKSwKKwlbU1RJSDQwN19VU0IzX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl8xKDYpLAorCVtTVElINDA3X1VTQjJfUE9SVDFfUE9XRVJET1dOXSA9IFNUSUg0MDdfUEROXzEoNSksCisJW1NUSUg0MDdfVVNCMl9QT1JUMF9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSg0KSwKKwlbU1RJSDQwN19QQ0lFMV9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSgzKSwKKwlbU1RJSDQwN19QQ0lFMF9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSgyKSwKKwlbU1RJSDQwN19TQVRBMV9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSgxKSwKKwlbU1RJSDQwN19TQVRBMF9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSgwKSwKKwlbU1RJSDQwN19FVEgxX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl9FVEgoMCwgMiksCit9OworCisvKiBSZXNldCBHZW5lcmF0b3IgY29udHJvbCAwLzEgKi8KKyNkZWZpbmUgU1lTQ0ZHXzUxMzEJMHgyMGMKKyNkZWZpbmUgU1lTQ0ZHXzUxMzIJMHgyMTAKKworI2RlZmluZSBMUE1fU1lTQ0ZHXzEJMHg0CS8qIFNvZnRyZXNldCBJUkIgJiBTQkMgVUFSVCAqLworCisjZGVmaW5lIFNUSUg0MDdfU1JTVF9DT1JFKF9yZWcsIF9iaXQpIFwKKwlfU1lTQ0ZHX1JTVF9DSF9OT19BQ0soc3RpaDQwN19jb3JlLCBfcmVnLCBfYml0KQorCisjZGVmaW5lIFNUSUg0MDdfU1JTVF9TQkMoX3JlZywgX2JpdCkgXAorCV9TWVNDRkdfUlNUX0NIX05PX0FDSyhzdGloNDA3X3NiY19yZWcsIF9yZWcsIF9iaXQpCisKKyNkZWZpbmUgU1RJSDQwN19TUlNUX0xQTShfcmVnLCBfYml0KSBcCisJX1NZU0NGR19SU1RfQ0hfTk9fQUNLKHN0aWg0MDdfbHBtLCBfcmVnLCBfYml0KQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NmZ19yZXNldF9jaGFubmVsX2RhdGEgc3RpaDQwN19zb2Z0cmVzZXRzW10gPSB7CisJW1NUSUg0MDdfRVRIMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX1NCQyhTWVNDRkdfNDAwMiwgNCksCisJW1NUSUg0MDdfTU1DMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDMpLAorCVtTVElINDA3X1VTQjJfUE9SVDBfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAyOCksCisJW1NUSUg0MDdfVVNCMl9QT1JUMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDI5KSwKKwlbU1RJSDQwN19QSUNPUEhZX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgMzApLAorCVtTVElINDA3X0lSQl9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0xQTShMUE1fU1lTQ0ZHXzEsIDYpLAorCVtTVElINDA3X1BDSUUwX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgNiksCisJW1NUSUg0MDdfUENJRTFfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAxNSksCisJW1NUSUg0MDdfU0FUQTBfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCA3KSwKKwlbU1RJSDQwN19TQVRBMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDE2KSwKKwlbU1RJSDQwN19NSVBIWTBfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCA0KSwKKwlbU1RJSDQwN19NSVBIWTFfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAxMyksCisJW1NUSUg0MDdfTUlQSFkyX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgMjIpLAorCVtTVElINDA3X1NBVEEwX1BXUl9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDUpLAorCVtTVElINDA3X1NBVEExX1BXUl9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDE0KSwKKwlbU1RJSDQwN19ERUxUQV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDMpLAorCVtTVElINDA3X0JMSVRURVJfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMxLCAxMCksCisJW1NUSUg0MDdfSERUVk9VVF9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDExKSwKKwlbU1RJSDQwN19IRFFWRFBfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMxLCAxMiksCisJW1NUSUg0MDdfVkRQX0FVWF9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDE0KSwKKwlbU1RJSDQwN19DT01QT19TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDE1KSwKKwlbU1RJSDQwN19IRE1JX1RYX1BIWV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDIxKSwKKwlbU1RJSDQwN19KUEVHX0RFQ19TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDIzKSwKKwlbU1RJSDQwN19WUDhfREVDX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMSwgMjQpLAorCVtTVElINDA3X0dQVV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDMwKSwKKwlbU1RJSDQwN19IVkFfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAwKSwKKwlbU1RJSDQwN19FUkFNX0hWQV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDEpLAorCVtTVElINDA3X0xQTV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX1NCQyhTWVNDRkdfNDAwMiwgMiksCisJW1NUSUg0MDdfS0VZU0NBTl9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0xQTShMUE1fU1lTQ0ZHXzEsIDgpLAorfTsKKworLyogUGljb1BIWSByZXNldC9jb250cm9sICovCisjZGVmaW5lIFNZU0NGR181MDYxCTB4MGY0CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2ZnX3Jlc2V0X2NoYW5uZWxfZGF0YSBzdGloNDA3X3BpY29waHlyZXNldHNbXSA9IHsKKwlbU1RJSDQwN19QSUNPUEhZMF9SRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTA2MSwgNSksCisJW1NUSUg0MDdfUElDT1BIWTFfUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUwNjEsIDYpLAorCVtTVElINDA3X1BJQ09QSFkyX1JFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MDYxLCA3KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2ZnX3Jlc2V0X2NvbnRyb2xsZXJfZGF0YSBzdGloNDA3X3Bvd2VyZG93bl9jb250cm9sbGVyID0geworCS53YWl0X2Zvcl9hY2sgPSB0cnVlLAorCS5ucl9jaGFubmVscyA9IEFSUkFZX1NJWkUoc3RpaDQwN19wb3dlcmRvd25zKSwKKwkuY2hhbm5lbHMgPSBzdGloNDA3X3Bvd2VyZG93bnMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NmZ19yZXNldF9jb250cm9sbGVyX2RhdGEgc3RpaDQwN19zb2Z0cmVzZXRfY29udHJvbGxlciA9IHsKKwkud2FpdF9mb3JfYWNrID0gZmFsc2UsCisJLmFjdGl2ZV9sb3cgPSB0cnVlLAorCS5ucl9jaGFubmVscyA9IEFSUkFZX1NJWkUoc3RpaDQwN19zb2Z0cmVzZXRzKSwKKwkuY2hhbm5lbHMgPSBzdGloNDA3X3NvZnRyZXNldHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NmZ19yZXNldF9jb250cm9sbGVyX2RhdGEgc3RpaDQwN19waWNvcGh5cmVzZXRfY29udHJvbGxlciA9IHsKKwkud2FpdF9mb3JfYWNrID0gZmFsc2UsCisJLm5yX2NoYW5uZWxzID0gQVJSQVlfU0laRShzdGloNDA3X3BpY29waHlyZXNldHMpLAorCS5jaGFubmVscyA9IHN0aWg0MDdfcGljb3BoeXJlc2V0cywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN0aWg0MDdfcmVzZXRfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInN0LHN0aWg0MDctcG93ZXJkb3duIiwKKwkJLmRhdGEgPSAmc3RpaDQwN19wb3dlcmRvd25fY29udHJvbGxlciwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1zb2Z0cmVzZXQiLAorCQkuZGF0YSA9ICZzdGloNDA3X3NvZnRyZXNldF9jb250cm9sbGVyLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBpY29waHlyZXNldCIsCisJCS5kYXRhID0gJnN0aWg0MDdfcGljb3BoeXJlc2V0X2NvbnRyb2xsZXIsCisJfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdGloNDA3X3Jlc2V0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBzeXNjZmdfcmVzZXRfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicmVzZXQtc3RpaDQwNyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHN0aWg0MDdfcmVzZXRfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN0aWg0MDdfcmVzZXRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN0aWg0MDdfcmVzZXRfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzdGloNDA3X3Jlc2V0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggNmRkMTJkZC4uYjY4MjY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0xMTA5LDM2ICsxMTA5LDQyIEBACiAJICB0aGlzIGlzIHBvd2VyZWQgYnkgdGhlIGJhY2t1cCBwb3dlciBzdXBwbHkuCiAKIGNvbmZpZyBSVENfRFJWX0FUOTFTQU05Ci0JdHJpc3RhdGUgIkFUOTFTQU05eC9BVDkxQ0FQOSBSVFQgYXMgUlRDIgotCWRlcGVuZHMgb24gQVJDSF9BVDkxICYmICEoQVJDSF9BVDkxUk05MjAwIHx8IEFSQ0hfQVQ5MVg0MCkKKwl0cmlzdGF0ZSAiQVQ5MVNBTTkgUlRUIGFzIFJUQyIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MQorCXNlbGVjdCBNRkRfU1lTQ09OCiAJaGVscAotCSAgUlRDIGRyaXZlciBmb3IgdGhlIEF0bWVsIEFUOTFTQU05eCBhbmQgQVQ5MUNBUDkgaW50ZXJuYWwgUlRUCi0JICAoUmVhbCBUaW1lIFRpbWVyKS4gVGhlc2UgdGltZXJzIGFyZSBwb3dlcmVkIGJ5IHRoZSBiYWNrdXAgcG93ZXIKLQkgIHN1cHBseSAoc3VjaCBhcyBhIHNtYWxsIGNvaW4gY2VsbCBiYXR0ZXJ5KSwgYnV0IGRvIG5vdCBuZWVkIHRvCi0JICBiZSB1c2VkIGFzIFJUQ3MuCi0KLQkgIChPbiBBVDkxU0FNOXJsIGFuZCBBVDkxU0FNOUc0NSBjaGlwcyB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UgdGhlCi0JICBkZWRpY2F0ZWQgUlRDIG1vZHVsZSBhbmQgbGVhdmUgdGhlIFJUVCBhdmFpbGFibGUgZm9yIG90aGVyIHVzZXMuKQorCSAgU29tZSBBVDkxU0FNOSBTb0NzIHByb3ZpZGUgYW4gUlRUIChSZWFsIFRpbWUgVGltZXIpIGJsb2NrIHdoaWNoCisJICBjYW4gYmUgdXNlZCBhcyBhbiBSVEMgdGhhbmtzIHRvIHRoZSBiYWNrdXAgcG93ZXIgc3VwcGx5IChlLmcuIGEKKwkgIHNtYWxsIGNvaW4gY2VsbCBiYXR0ZXJ5KSB3aGljaCBrZWVwcyB0aGlzIGJsb2NrIGFuZCB0aGUgR1BCUgorCSAgKEdlbmVyYWwgUHVycG9zZSBCYWNrdXAgUmVnaXN0ZXJzKSBibG9jayBwb3dlcmVkIHdoZW4gdGhlIGRldmljZQorCSAgaXMgc2h1dGRvd24uCisJICBTb21lIEFUOTFTQU05IFNvQ3MgcHJvdmlkZSBhIHJlYWwgUlRDIGJsb2NrLCBvbiB0aG9zZSBvbmVzIHlvdSdkCisJICBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgcmVhbCBSVEMgYmxvY2sgaW5zdGVhZCBvZiB0aGUgIlJUVCBhcyBhbgorCSAgUlRDIiBkcml2ZXIuCiAKIGNvbmZpZyBSVENfRFJWX0FUOTFTQU05X1JUVAogCWludAogCXJhbmdlIDAgMQogCWRlZmF1bHQgMAotCXByb21wdCAiUlRUIG1vZHVsZSBOdW1iZXIiIGlmIEFSQ0hfQVQ5MVNBTTkyNjMKIAlkZXBlbmRzIG9uIFJUQ19EUlZfQVQ5MVNBTTkKIAloZWxwCisJICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IGZvciBsZWdhY3kgYm9hcmQgc3VwcG9ydCBhbmQKKwkgIHdvbid0IGJlIHVzZWQgd2hlbiBib290aW5nIGEgRFQgYm9hcmQuCisKIAkgIE1vcmUgdGhhbiBvbmUgUlRUIG1vZHVsZSBpcyBhdmFpbGFibGUuIFlvdSBjYW4gY2hvb3NlIHdoaWNoCiAJICBvbmUgd2lsbCBiZSB1c2VkIGFzIGFuIFJUQy4gVGhlIGRlZmF1bHQgb2YgemVybyBpcyBub3JtYWxseQogCSAgT0sgdG8gdXNlLCB0aG91Z2ggc29tZSBzeXN0ZW1zIHVzZSB0aGF0IGZvciBub24tUlRDIHB1cnBvc2VzLgogCiBjb25maWcgUlRDX0RSVl9BVDkxU0FNOV9HUEJSCiAJaW50Ci0JcmFuZ2UgMCAzIGlmICFBUkNIX0FUOTFTQU05MjYzCi0JcmFuZ2UgMCAxNSBpZiBBUkNIX0FUOTFTQU05MjYzCisJcmFuZ2UgMCAzCiAJZGVmYXVsdCAwCiAJcHJvbXB0ICJCYWNrdXAgUmVnaXN0ZXIgTnVtYmVyIgogCWRlcGVuZHMgb24gUlRDX0RSVl9BVDkxU0FNOQogCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgZm9yIGxlZ2FjeSBib2FyZCBzdXBwb3J0IGFuZAorCSAgd29uJ3QgYmUgdXNlZCB3aGVuIGJvb3RpbmcgYSBEVCBib2FyZC4KKwogCSAgVGhlIFJUQyBkcml2ZXIgbmVlZHMgdG8gdXNlIG9uZSBvZiB0aGUgR2VuZXJhbCBQdXJwb3NlIEJhY2t1cAogCSAgUmVnaXN0ZXJzIChHUEJScykgYXMgd2VsbCBhcyB0aGUgUlRULiBZb3UgY2FuIGNob29zZSB3aGljaCBvbmUKIAkgIHdpbGwgYmUgdXNlZC4gVGhlIGRlZmF1bHQgb2YgemVybyBpcyBub3JtYWxseSBPSyB0byB1c2UsIGJ1dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvY2xhc3MuYyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKaW5kZXggMzhlMjZiZS4uNDcyYTVhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvY2xhc3MuYworKysgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCkBAIC00NSwxNCArNDUsMTQgQEAKICAqIHN5c3RlbSdzIHdhbGwgY2xvY2s7IHJlc3RvcmUgaXQgb24gcmVzdW1lKCkuCiAgKi8KIAotc3RhdGljIHN0cnVjdCB0aW1lc3BlYyBvbGRfcnRjLCBvbGRfc3lzdGVtLCBvbGRfZGVsdGE7CitzdGF0aWMgc3RydWN0IHRpbWVzcGVjNjQgb2xkX3J0Yywgb2xkX3N5c3RlbSwgb2xkX2RlbHRhOwogCiAKIHN0YXRpYyBpbnQgcnRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBydGNfZGV2aWNlCSpydGMgPSB0b19ydGNfZGV2aWNlKGRldik7CiAJc3RydWN0IHJ0Y190aW1lCQl0bTsKLQlzdHJ1Y3QgdGltZXNwZWMJCWRlbHRhLCBkZWx0YV9kZWx0YTsKKwlzdHJ1Y3QgdGltZXNwZWM2NAlkZWx0YSwgZGVsdGFfZGVsdGE7CiAJaW50IGVycjsKIAogCWlmIChoYXNfcGVyc2lzdGVudF9jbG9jaygpKQpAQCAtNjgsOCArNjgsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlnZXRuc3RpbWVvZmRheSgmb2xkX3N5c3RlbSk7Ci0JcnRjX3RtX3RvX3RpbWUoJnRtLCAmb2xkX3J0Yy50dl9zZWMpOworCWdldG5zdGltZW9mZGF5NjQoJm9sZF9zeXN0ZW0pOworCW9sZF9ydGMudHZfc2VjID0gcnRjX3RtX3RvX3RpbWU2NCgmdG0pOwogCiAKIAkvKgpAQCAtNzgsOCArNzgsOCBAQAogCSAqIHRyeSB0byBjb21wZW5zYXRlIHNvIHRoZSBkaWZmZXJlbmNlIGluIHN5c3RlbSB0aW1lCiAJICogYW5kIHJ0YyB0aW1lIHN0YXlzIGNsb3NlIHRvIGNvbnN0YW50LgogCSAqLwotCWRlbHRhID0gdGltZXNwZWNfc3ViKG9sZF9zeXN0ZW0sIG9sZF9ydGMpOwotCWRlbHRhX2RlbHRhID0gdGltZXNwZWNfc3ViKGRlbHRhLCBvbGRfZGVsdGEpOworCWRlbHRhID0gdGltZXNwZWM2NF9zdWIob2xkX3N5c3RlbSwgb2xkX3J0Yyk7CisJZGVsdGFfZGVsdGEgPSB0aW1lc3BlYzY0X3N1YihkZWx0YSwgb2xkX2RlbHRhKTsKIAlpZiAoZGVsdGFfZGVsdGEudHZfc2VjIDwgLTIgfHwgZGVsdGFfZGVsdGEudHZfc2VjID49IDIpIHsKIAkJLyoKIAkJICogaWYgZGVsdGFfZGVsdGEgaXMgdG9vIGxhcmdlLCBhc3N1bWUgdGltZSBjb3JyZWN0aW9uCkBAIC04OCw3ICs4OCw3IEBACiAJCW9sZF9kZWx0YSA9IGRlbHRhOwogCX0gZWxzZSB7CiAJCS8qIE90aGVyd2lzZSB0cnkgdG8gYWRqdXN0IG9sZF9zeXN0ZW0gdG8gY29tcGVuc2F0ZSAqLwotCQlvbGRfc3lzdGVtID0gdGltZXNwZWNfc3ViKG9sZF9zeXN0ZW0sIGRlbHRhX2RlbHRhKTsKKwkJb2xkX3N5c3RlbSA9IHRpbWVzcGVjNjRfc3ViKG9sZF9zeXN0ZW0sIGRlbHRhX2RlbHRhKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTk4LDggKzk4LDggQEAKIHsKIAlzdHJ1Y3QgcnRjX2RldmljZQkqcnRjID0gdG9fcnRjX2RldmljZShkZXYpOwogCXN0cnVjdCBydGNfdGltZQkJdG07Ci0Jc3RydWN0IHRpbWVzcGVjCQluZXdfc3lzdGVtLCBuZXdfcnRjOwotCXN0cnVjdCB0aW1lc3BlYwkJc2xlZXBfdGltZTsKKwlzdHJ1Y3QgdGltZXNwZWM2NAluZXdfc3lzdGVtLCBuZXdfcnRjOworCXN0cnVjdCB0aW1lc3BlYzY0CXNsZWVwX3RpbWU7CiAJaW50IGVycjsKIAogCWlmIChoYXNfcGVyc2lzdGVudF9jbG9jaygpKQpAQCAtMTEwLDcgKzExMCw3IEBACiAJCXJldHVybiAwOwogCiAJLyogc25hcHNob3QgdGhlIGN1cnJlbnQgcnRjIGFuZCBzeXN0ZW0gdGltZSBhdCByZXN1bWUgKi8KLQlnZXRuc3RpbWVvZmRheSgmbmV3X3N5c3RlbSk7CisJZ2V0bnN0aW1lb2ZkYXk2NCgmbmV3X3N5c3RlbSk7CiAJZXJyID0gcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJfZGVidWcoIiVzOiAgZmFpbCB0byByZWFkIHJ0YyB0aW1lXG4iLCBkZXZfbmFtZSgmcnRjLT5kZXYpKTsKQEAgLTEyMSw3ICsxMjEsNyBAQAogCQlwcl9kZWJ1ZygiJXM6ICBib2d1cyByZXN1bWUgdGltZVxuIiwgZGV2X25hbWUoJnJ0Yy0+ZGV2KSk7CiAJCXJldHVybiAwOwogCX0KLQlydGNfdG1fdG9fdGltZSgmdG0sICZuZXdfcnRjLnR2X3NlYyk7CisJbmV3X3J0Yy50dl9zZWMgPSBydGNfdG1fdG9fdGltZTY0KCZ0bSk7CiAJbmV3X3J0Yy50dl9uc2VjID0gMDsKIAogCWlmIChuZXdfcnRjLnR2X3NlYyA8IG9sZF9ydGMudHZfc2VjKSB7CkBAIC0xMzAsNyArMTMwLDcgQEAKIAl9CiAKIAkvKiBjYWxjdWxhdGUgdGhlIFJUQyB0aW1lIGRlbHRhIChzbGVlcCB0aW1lKSovCi0Jc2xlZXBfdGltZSA9IHRpbWVzcGVjX3N1YihuZXdfcnRjLCBvbGRfcnRjKTsKKwlzbGVlcF90aW1lID0gdGltZXNwZWM2NF9zdWIobmV3X3J0Yywgb2xkX3J0Yyk7CiAKIAkvKgogCSAqIFNpbmNlIHRoZXNlIFJUQyBzdXNwZW5kL3Jlc3VtZSBoYW5kbGVycyBhcmUgbm90IGNhbGxlZApAQCAtMTM5LDExICsxMzksMTEgQEAKIAkgKiBzbyBzdWJ0cmFjdCBrZXJuZWwgcnVuLXRpbWUgYmV0d2VlbiBydGNfc3VzcGVuZCB0byBydGNfcmVzdW1lCiAJICogdG8ga2VlcCB0aGluZ3MgYWNjdXJhdGUuCiAJICovCi0Jc2xlZXBfdGltZSA9IHRpbWVzcGVjX3N1YihzbGVlcF90aW1lLAotCQkJdGltZXNwZWNfc3ViKG5ld19zeXN0ZW0sIG9sZF9zeXN0ZW0pKTsKKwlzbGVlcF90aW1lID0gdGltZXNwZWM2NF9zdWIoc2xlZXBfdGltZSwKKwkJCXRpbWVzcGVjNjRfc3ViKG5ld19zeXN0ZW0sIG9sZF9zeXN0ZW0pKTsKIAogCWlmIChzbGVlcF90aW1lLnR2X3NlYyA+PSAwKQotCQl0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lKCZzbGVlcF90aW1lKTsKKwkJdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZTY0KCZzbGVlcF90aW1lKTsKIAlydGNfaGN0b3N5c19yZXQgPSAwOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwppbmRleCA1OTYzNzQzLi5hYmFjMzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwpAQCAtMjEsMTAgKzIxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdG1lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFfcnR0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAvKgogICogVGhpcyBkcml2ZXIgdXNlcyB0d28gY29uZmlndXJhYmxlIGhhcmR3YXJlIHJlc291cmNlcyB0aGF0IGxpdmUgaW4gdGhlCkBAIC00Nyw2ICs0NiwyMiBAQAogICogcmVnaXN0ZXJzIGF2YWlsYWJsZSwgbGlrZXdpc2UgdXNhYmxlIGZvciBtb3JlIHRoYW4gIlJUQyIgc3VwcG9ydC4KICAqLwogCisjZGVmaW5lIEFUOTFfUlRUX01SCQkweDAwCQkJLyogUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9SVFRfUlRQUkVTCQkoMHhmZmZmIDw8IDApCQkvKiBSZWFsLXRpbWUgVGltZXIgUHJlc2NhbGVyIFZhbHVlICovCisjZGVmaW5lIEFUOTFfUlRUX0FMTUlFTgkJKDEgPDwgMTYpCQkvKiBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfUlRUX1JUVElOQ0lFTgkoMSA8PCAxNykJCS8qIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBBVDkxX1JUVF9SVFRSU1QJCSgxIDw8IDE4KQkJLyogUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQgKi8KKworI2RlZmluZSBBVDkxX1JUVF9BUgkJMHgwNAkJCS8qIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1JUVF9BTE1WCQkoMHhmZmZmZmZmZikJCS8qIEFsYXJtIFZhbHVlICovCisKKyNkZWZpbmUgQVQ5MV9SVFRfVlIJCTB4MDgJCQkvKiBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9SVFRfQ1JUVgkJKDB4ZmZmZmZmZmYpCQkvKiBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSAqLworCisjZGVmaW5lIEFUOTFfUlRUX1NSCQkweDBjCQkJLyogUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1JUVF9BTE1TCQkoMSA8PCAwKQkJLyogUmVhbC10aW1lIEFsYXJtIFN0YXR1cyAqLworI2RlZmluZSBBVDkxX1JUVF9SVFRJTkMJCSgxIDw8IDEpCQkvKiBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50ICovCisKIC8qCiAgKiBXZSBzdG9yZSBBTEFSTV9ESVNBQkxFRCBpbiBBTE1WIHRvIHJlY29yZCB0aGF0IG5vIGFsYXJtIGlzIHNldC4KICAqIEl0J3MgYWxzbyB0aGUgcmVzZXQgdmFsdWUgZm9yIHRoYXQgZmllbGQuCkBAIC01OCwxOSArNzMsMzAgQEAKIAl2b2lkIF9faW9tZW0JCSpydHQ7CiAJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0Y2RldjsKIAl1MzIJCQlpbXI7Ci0Jdm9pZCBfX2lvbWVtCQkqZ3BicjsKKwlzdHJ1Y3QgcmVnbWFwCQkqZ3BicjsKKwl1bnNpZ25lZCBpbnQJCWdwYnJfb2Zmc2V0OwogCWludCAJCQlpcnE7CisJc3RydWN0IGNsawkJKnNjbGs7CiB9OwogCiAjZGVmaW5lIHJ0dF9yZWFkbChydGMsIGZpZWxkKSBcCi0JX19yYXdfcmVhZGwoKHJ0YyktPnJ0dCArIEFUOTFfUlRUXyAjIyBmaWVsZCkKKwlyZWFkbCgocnRjKS0+cnR0ICsgQVQ5MV9SVFRfICMjIGZpZWxkKQogI2RlZmluZSBydHRfd3JpdGVsKHJ0YywgZmllbGQsIHZhbCkgXAotCV9fcmF3X3dyaXRlbCgodmFsKSwgKHJ0YyktPnJ0dCArIEFUOTFfUlRUXyAjIyBmaWVsZCkKKwl3cml0ZWwoKHZhbCksIChydGMpLT5ydHQgKyBBVDkxX1JUVF8gIyMgZmllbGQpCiAKLSNkZWZpbmUgZ3Bicl9yZWFkbChydGMpIFwKLQlfX3Jhd19yZWFkbCgocnRjKS0+Z3BicikKLSNkZWZpbmUgZ3Bicl93cml0ZWwocnRjLCB2YWwpIFwKLQlfX3Jhd193cml0ZWwoKHZhbCksIChydGMpLT5ncGJyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ3Bicl9yZWFkbChzdHJ1Y3Qgc2FtOV9ydGMgKnJ0YykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJcmVnbWFwX3JlYWQocnRjLT5ncGJyLCBydGMtPmdwYnJfb2Zmc2V0LCAmdmFsKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGJyX3dyaXRlbChzdHJ1Y3Qgc2FtOV9ydGMgKnJ0YywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlyZWdtYXBfd3JpdGUocnRjLT5ncGJyLCBydGMtPmdwYnJfb2Zmc2V0LCB2YWwpOworfQogCiAvKgogICogUmVhZCBjdXJyZW50IHRpbWUgYW5kIGRhdGUgaW4gUlRDCkBAIC0yODcsMjIgKzMxMywyMiBAQAogCS5hbGFybV9pcnFfZW5hYmxlID0gYXQ5MV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBncGJyX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gMzIsCisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorfTsKKwogLyoKICAqIEluaXRpYWxpemUgYW5kIGluc3RhbGwgUlRDIGRyaXZlcgogICovCiBzdGF0aWMgaW50IGF0OTFfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHJlc291cmNlCSpyLCAqcl9ncGJyOworCXN0cnVjdCByZXNvdXJjZQkqcjsKIAlzdHJ1Y3Qgc2FtOV9ydGMJKnJ0YzsKIAlpbnQJCXJldCwgaXJxOwogCXUzMgkJbXI7Ci0KLQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyX2dwYnIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwotCWlmICghciB8fCAhcl9ncGJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5lZWQgMiByZXNzb3VyY2VzXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCXVuc2lnbmVkIGludAlzY2xrX3JhdGU7CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChpcnEgPCAwKSB7CkBAIC0zMjEsMjQgKzM0Nyw2NiBAQAogCQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwotCXJ0Yy0+cnR0ID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKLQlpZiAoIXJ0Yy0+cnR0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzLCBhYm9ydGluZy5cbiIpOworCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcnRjLT5ydHQgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcik7CisJaWYgKElTX0VSUihydGMtPnJ0dCkpCisJCXJldHVybiBQVFJfRVJSKHJ0Yy0+cnR0KTsKKworCWlmICghcGRldi0+ZGV2Lm9mX25vZGUpIHsKKwkJLyoKKwkJICogVE9ETzogUmVtb3ZlIHRoaXMgY29kZSBjaHVuayB3aGVuIHJlbW92aW5nIG5vbiBEVCBib2FyZAorCQkgKiBzdXBwb3J0LiBSZW1lbWJlciB0byByZW1vdmUgdGhlIGdwYnJfcmVnbWFwX2NvbmZpZworCQkgKiB2YXJpYWJsZSB0b28uCisJCSAqLworCQl2b2lkIF9faW9tZW0gKmdwYnI7CisKKwkJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJCWdwYnIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcik7CisJCWlmIChJU19FUlIoZ3BicikpCisJCQlyZXR1cm4gUFRSX0VSUihncGJyKTsKKworCQlydGMtPmdwYnIgPSByZWdtYXBfaW5pdF9tbWlvKE5VTEwsIGdwYnIsCisJCQkJCSAgICAgJmdwYnJfcmVnbWFwX2NvbmZpZyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmdzOworCisJCXJldCA9IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9maXhlZF9hcmdzKHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkJImF0bWVsLHJ0dC1ydGMtdGltZS1yZWciLCAxLCAwLAorCQkJCQkJJmFyZ3MpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlydGMtPmdwYnIgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoYXJncy5ucCk7CisJCXJ0Yy0+Z3Bicl9vZmZzZXQgPSBhcmdzLmFyZ3NbMF07CisJfQorCisJaWYgKElTX0VSUihydGMtPmdwYnIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXRyaWV2ZSBncGJyIHJlZ21hcCwgYWJvcnRpbmcuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcnRjLT5ncGJyID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJfZ3Bici0+c3RhcnQsCi0JCQkJcmVzb3VyY2Vfc2l6ZShyX2dwYnIpKTsKLQlpZiAoIXJ0Yy0+Z3BicikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIGdwYnIgcmVnaXN0ZXJzLCBhYm9ydGluZy5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlydGMtPnNjbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihydGMtPnNjbGspKQorCQlyZXR1cm4gUFRSX0VSUihydGMtPnNjbGspOworCisJc2Nsa19yYXRlID0gY2xrX2dldF9yYXRlKHJ0Yy0+c2Nsayk7CisJaWYgKCFzY2xrX3JhdGUgfHwgc2Nsa19yYXRlID4gQVQ5MV9SVFRfUlRQUkVTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgc2xvdyBjbG9jayByYXRlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHJ0Yy0+c2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgZW5hYmxlIHNsb3cgY2xvY2tcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCW1yID0gcnR0X3JlYWRsKHJ0YywgTVIpOwogCiAJLyogdW5sZXNzIFJUVCBpcyBjb3VudGluZyBhdCAxIEh6LCByZS1pbml0aWFsaXplIGl0ICovCi0JaWYgKChtciAmIEFUOTFfUlRUX1JUUFJFUykgIT0gQVQ5MV9TTE9XX0NMT0NLKSB7Ci0JCW1yID0gQVQ5MV9SVFRfUlRUUlNUIHwgKEFUOTFfU0xPV19DTE9DSyAmIEFUOTFfUlRUX1JUUFJFUyk7CisJaWYgKChtciAmIEFUOTFfUlRUX1JUUFJFUykgIT0gc2Nsa19yYXRlKSB7CisJCW1yID0gQVQ5MV9SVFRfUlRUUlNUIHwgKHNjbGtfcmF0ZSAmIEFUOTFfUlRUX1JUUFJFUyk7CiAJCWdwYnJfd3JpdGVsKHJ0YywgMCk7CiAJfQogCkBAIC0zODMsNiArNDUxLDkgQEAKIAkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJcnR0X3dyaXRlbChydGMsIE1SLCBtciAmIH4oQVQ5MV9SVFRfQUxNSUVOIHwgQVQ5MV9SVFRfUlRUSU5DSUVOKSk7CiAKKwlpZiAoIUlTX0VSUihydGMtPnNjbGspKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocnRjLT5zY2xrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NDAsNiArNTExLDE0IEBACiAKIHN0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhhdDkxX3J0Y19wbV9vcHMsIGF0OTFfcnRjX3N1c3BlbmQsIGF0OTFfcnRjX3Jlc3VtZSk7CiAKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0OTFfcnRjX2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjAtcnR0IiB9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0OTFfcnRjX2R0X2lkcyk7CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXQ5MV9ydGNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBhdDkxX3J0Y19wcm9iZSwKIAkucmVtb3ZlCQk9IGF0OTFfcnRjX3JlbW92ZSwKQEAgLTQ0OCw2ICs1MjcsNyBAQAogCQkubmFtZQk9ICJydGMtYXQ5MXNhbTkiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLnBtCT0gJmF0OTFfcnRjX3BtX29wcywKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGF0OTFfcnRjX2R0X2lkcyksCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1saWIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1saWIuYwppbmRleCBjNGNmMDU3Li5lNmJmYjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWxpYi5jCkBAIC00NSwxNiArNDUsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnRjX3llYXJfZGF5cyk7CiAKKwogLyoKKyAqIHJ0Y190aW1lX3RvX3RtNjQgLSBDb252ZXJ0cyB0aW1lNjRfdCB0byBydGNfdGltZS4KICAqIENvbnZlcnQgc2Vjb25kcyBzaW5jZSAwMS0wMS0xOTcwIDAwOjAwOjAwIHRvIEdyZWdvcmlhbiBkYXRlLgogICovCi12b2lkIHJ0Y190aW1lX3RvX3RtKHVuc2lnbmVkIGxvbmcgdGltZSwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3ZvaWQgcnRjX3RpbWU2NF90b190bSh0aW1lNjRfdCB0aW1lLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXVuc2lnbmVkIGludCBtb250aCwgeWVhcjsKKwl1bnNpZ25lZCBsb25nIHNlY3M7CiAJaW50IGRheXM7CiAKLQlkYXlzID0gdGltZSAvIDg2NDAwOwotCXRpbWUgLT0gKHVuc2lnbmVkIGludCkgZGF5cyAqIDg2NDAwOworCS8qIHRpbWUgbXVzdCBiZSBwb3NpdGl2ZSAqLworCWRheXMgPSBkaXZfczY0KHRpbWUsIDg2NDAwKTsKKwlzZWNzID0gdGltZSAtICh1bnNpZ25lZCBpbnQpIGRheXMgKiA4NjQwMDsKIAogCS8qIGRheSBvZiB0aGUgd2VlaywgMTk3MC0wMS0wMSB3YXMgYSBUaHVyc2RheSAqLwogCXRtLT50bV93ZGF5ID0gKGRheXMgKyA0KSAlIDc7CkBAIC04MSwxNCArODUsMTQgQEAKIAl0bS0+dG1fbW9uID0gbW9udGg7CiAJdG0tPnRtX21kYXkgPSBkYXlzICsgMTsKIAotCXRtLT50bV9ob3VyID0gdGltZSAvIDM2MDA7Ci0JdGltZSAtPSB0bS0+dG1faG91ciAqIDM2MDA7Ci0JdG0tPnRtX21pbiA9IHRpbWUgLyA2MDsKLQl0bS0+dG1fc2VjID0gdGltZSAtIHRtLT50bV9taW4gKiA2MDsKKwl0bS0+dG1faG91ciA9IHNlY3MgLyAzNjAwOworCXNlY3MgLT0gdG0tPnRtX2hvdXIgKiAzNjAwOworCXRtLT50bV9taW4gPSBzZWNzIC8gNjA7CisJdG0tPnRtX3NlYyA9IHNlY3MgLSB0bS0+dG1fbWluICogNjA7CiAKIAl0bS0+dG1faXNkc3QgPSAwOwogfQotRVhQT1JUX1NZTUJPTChydGNfdGltZV90b190bSk7CitFWFBPUlRfU1lNQk9MKHJ0Y190aW1lNjRfdG9fdG0pOwogCiAvKgogICogRG9lcyB0aGUgcnRjX3RpbWUgcmVwcmVzZW50IGEgdmFsaWQgZGF0ZS90aW1lPwpAQCAtMTA5LDI0ICsxMTMsMjIgQEAKIEVYUE9SVF9TWU1CT0wocnRjX3ZhbGlkX3RtKTsKIAogLyoKKyAqIHJ0Y190bV90b190aW1lNjQgLSBDb252ZXJ0cyBydGNfdGltZSB0byB0aW1lNjRfdC4KICAqIENvbnZlcnQgR3JlZ29yaWFuIGRhdGUgdG8gc2Vjb25kcyBzaW5jZSAwMS0wMS0xOTcwIDAwOjAwOjAwLgogICovCi1pbnQgcnRjX3RtX3RvX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSwgdW5zaWduZWQgbG9uZyAqdGltZSkKK3RpbWU2NF90IHJ0Y190bV90b190aW1lNjQoc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKLQkqdGltZSA9IG1rdGltZSh0bS0+dG1feWVhciArIDE5MDAsIHRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSwKKwlyZXR1cm4gbWt0aW1lNjQodG0tPnRtX3llYXIgKyAxOTAwLCB0bS0+dG1fbW9uICsgMSwgdG0tPnRtX21kYXksCiAJCQl0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYyk7Ci0JcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHJ0Y190bV90b190aW1lKTsKK0VYUE9SVF9TWU1CT0wocnRjX3RtX3RvX3RpbWU2NCk7CiAKIC8qCiAgKiBDb252ZXJ0IHJ0Y190aW1lIHRvIGt0aW1lCiAgKi8KIGt0aW1lX3QgcnRjX3RtX3RvX2t0aW1lKHN0cnVjdCBydGNfdGltZSB0bSkKIHsKLQl0aW1lX3QgdGltZTsKLQlydGNfdG1fdG9fdGltZSgmdG0sICZ0aW1lKTsKLQlyZXR1cm4ga3RpbWVfc2V0KHRpbWUsIDApOworCXJldHVybiBrdGltZV9zZXQocnRjX3RtX3RvX3RpbWU2NCgmdG0pLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y190bV90b19rdGltZSk7CiAKQEAgLTEzNSwxNCArMTM3LDE0IEBACiAgKi8KIHN0cnVjdCBydGNfdGltZSBydGNfa3RpbWVfdG9fdG0oa3RpbWVfdCBrdCkKIHsKLQlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHRpbWVzcGVjNjQgdHM7CiAJc3RydWN0IHJ0Y190aW1lIHJldDsKIAotCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3QpOworCXRzID0ga3RpbWVfdG9fdGltZXNwZWM2NChrdCk7CiAJLyogUm91bmQgdXAgYW55IG5zICovCiAJaWYgKHRzLnR2X25zZWMpCiAJCXRzLnR2X3NlYysrOwotCXJ0Y190aW1lX3RvX3RtKHRzLnR2X3NlYywgJnJldCk7CisJcnRjX3RpbWU2NF90b190bSh0cy50dl9zZWMsICZyZXQpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfa3RpbWVfdG9fdG0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2t2bS92aXJ0aW9fY2N3LmMgYi9kcml2ZXJzL3MzOTAva3ZtL3ZpcnRpb19jY3cuYwppbmRleCA2Y2JlNmVmLi5iZGE1MmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAva3ZtL3ZpcnRpb19jY3cuYworKysgYi9kcml2ZXJzL3MzOTAva3ZtL3ZpcnRpb19jY3cuYwpAQCAtODg4LDcgKzg4OCw2IEBACiAJc3RydWN0IHZpcnRpb19jY3dfZGV2aWNlICp2Y2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmY2Rldi0+ZGV2KTsKIAlpbnQgaTsKIAlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKLQlzdHJ1Y3QgdmlydGlvX2RyaXZlciAqZHJ2OwogCiAJaWYgKCF2Y2RldikKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggODAwNGIwNy4uMDFhNzMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC0zNTMsOSArMzUzLDExIEBACiAJYWRhcHRlci0+Y2N3X2RldmljZSA9IGNjd19kZXZpY2U7CiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnN0YXRfd29yaywgX3pmY3Bfc3RhdHVzX3JlYWRfc2NoZWR1bGVyKTsKLQlJTklUX1dPUksoJmFkYXB0ZXItPnNjYW5fd29yaywgemZjcF9mY19zY2FuX3BvcnRzKTsKKwlJTklUX0RFTEFZRURfV09SSygmYWRhcHRlci0+c2Nhbl93b3JrLCB6ZmNwX2ZjX3NjYW5fcG9ydHMpOwogCUlOSVRfV09SSygmYWRhcHRlci0+bnNfdXBfd29yaywgemZjcF9mY19zeW1fbmFtZV91cGRhdGUpOwogCisJYWRhcHRlci0+bmV4dF9wb3J0X3NjYW4gPSBqaWZmaWVzOworCiAJaWYgKHpmY3BfcWRpb19zZXR1cChhZGFwdGVyKSkKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTQyMCw3ICs0MjIsNyBAQAogewogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2ID0gYWRhcHRlci0+Y2N3X2RldmljZTsKIAotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNjYW5fd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGFwdGVyLT5zY2FuX3dvcmspOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnN0YXRfd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bnNfdXBfd29yayk7CiAJemZjcF9kZXN0cm95X2FkYXB0ZXJfd29ya19xdWV1ZShhZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IGY5ODc5ZDQuLjU0YzdiNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtNTYsOCArNTYsMjIgQEAKIAl6ZmNwX2VycF9zZXRfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpOwogCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAogCQkJCXRhZyk7CisKKwkvKgorCSAqIFdlIHdhbnQgdG8gc2NhbiBwb3J0cyBoZXJlLCB3aXRoIHNvbWUgcmFuZG9tIGJhY2tvZmYgYW5kIHdpdGhvdXQKKwkgKiByYXRlIGxpbWl0LiBSZWNvdmVyeSBoYXMgYWxyZWFkeSBzY2hlZHVsZWQgYSBwb3J0IHNjYW4gZm9yIHVzLAorCSAqIGJ1dCB3aXRoIGJvdGggcmFuZG9tIGRlbGF5IGFuZCByYXRlIGxpbWl0LiBOZXZlcnRoZWxlc3Mgd2UgZ2V0CisJICogd2hhdCB3ZSB3YW50IGhlcmUgYnkgZmx1c2hpbmcgdGhlIHNjaGVkdWxlZCB3b3JrIGFmdGVyIHNsZWVwaW5nCisJICogYW4gZXF1aXZhbGVudCByYW5kb20gdGltZS4KKwkgKiBMZXQgdGhlIHBvcnQgc2NhbiByYW5kb20gZGVsYXkgZWxhcHNlIGZpcnN0LiBJZiByZWNvdmVyeSBmaW5pc2hlcworCSAqIHVwIHRvIHRoYXQgcG9pbnQgaW4gdGltZSwgdGhhdCB3b3VsZCBiZSBwZXJmZWN0IGZvciBib3RoIHJlY292ZXJ5CisJICogYW5kIHBvcnQgc2Nhbi4gSWYgbm90LCBpLmUuIHJlY292ZXJ5IHRha2VzIGFnZXMsIHRoZXJlIHdhcyBubworCSAqIHBvaW50IGluIHdhaXRpbmcgYSByYW5kb20gZGVsYXkgb24gdG9wIG9mIHRoZSB0aW1lIGNvbnN1bWVkIGJ5CisJICogcmVjb3ZlcnkuCisJICovCisJbXNsZWVwKHpmY3BfZmNfcG9ydF9zY2FuX2JhY2tvZmYoKSk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKLQlmbHVzaF93b3JrKCZhZGFwdGVyLT5zY2FuX3dvcmspOyAvKiBvayB0byBjYWxsIGV2ZW4gaWYgbm90aGluZyBxdWV1ZWQgKi8KKwlmbHVzaF9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7CiAKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIApAQCAtMTYyLDExICsxNzYsMTkgQEAKIAlhZGFwdGVyLT5yZXFfbm8gPSAwOwogCiAJemZjcF9jY3dfYWN0aXZhdGUoY2RldiwgMCwgImNjc29ubDEiKTsKLQkvKiBzY2FuIGZvciByZW1vdGUgcG9ydHMKLQkgICBlaXRoZXIgYXQgdGhlIGVuZCBvZiBhbnkgc3VjY2Vzc2Z1bCBhZGFwdGVyIHJlY292ZXJ5Ci0JICAgb3Igb25seSBhZnRlciB0aGUgYWRhcHRlciByZWNvdmVyeSBmb3Igc2V0dGluZyBhIGRldmljZSBvbmxpbmUgKi8KKworCS8qCisJICogV2Ugd2FudCB0byBzY2FuIHBvcnRzIGhlcmUsIGFsd2F5cywgd2l0aCBzb21lIHJhbmRvbSBkZWxheSBhbmQKKwkgKiB3aXRob3V0IHJhdGUgbGltaXQgLSBiYXNpY2FsbHkgd2hhdCB6ZmNwX2Njd19hY3RpdmF0ZSgpIGhhcworCSAqIGFjaGlldmVkIGZvciB1cy4gTm90IHF1aXRlISBUaGF0IHBvcnQgc2NhbiBkZXBlbmRlZCBvbgorCSAqICFub19hdXRvX3BvcnRfcmVzY2FuLiBTbyBsZXQncyBjb3ZlciB0aGUgbm9fYXV0b19wb3J0X3Jlc2NhbgorCSAqIGNhc2UgaGVyZSB0byBtYWtlIHN1cmUgYSBwb3J0IHNjYW4gaXMgZG9uZSB1bmNvbmRpdGlvbmFsbHkuCisJICogU2luY2UgemZjcF9jY3dfYWN0aXZhdGUoKSBoYXMgd2FpdGVkIHRoZSBkZXNpcmVkIHJhbmRvbSB0aW1lLAorCSAqIHdlIGNhbiBpbW1lZGlhdGVseSBzY2hlZHVsZSBhbmQgZmx1c2ggYSBwb3J0IHNjYW4gZm9yIHRoZQorCSAqIHJlbWFpbmluZyBjYXNlcy4KKwkgKi8KIAl6ZmNwX2ZjX2ludmVyc2VfY29uZGl0aW9uYWxfcG9ydF9zY2FuKGFkYXB0ZXIpOwotCWZsdXNoX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7IC8qIG9rIHRvIGNhbGwgZXZlbiBpZiBub3RoaW5nIHF1ZXVlZCAqLworCWZsdXNoX2RlbGF5ZWRfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IGQ5MTE3M2YuLmI4ZTg1M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtMTg2LDEyICsxODYsMTMgQEAKIAlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzICpmY19zdGF0czsKIAlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3BvcnQgKnN0YXRzX3Jlc2V0X2RhdGE7CiAJdW5zaWduZWQgbG9uZwkJc3RhdHNfcmVzZXQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXNjYW5fd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXNjYW5fd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbnNfdXBfd29yazsKIAlzdHJ1Y3Qgc2VydmljZV9sZXZlbAlzZXJ2aWNlX2xldmVsOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrX3F1ZXVlOwogCXN0cnVjdCBkZXZpY2VfZG1hX3BhcmFtZXRlcnMgZG1hX3Bhcm1zOwogCXN0cnVjdCB6ZmNwX2ZjX2V2ZW50cyBldmVudHM7CisJdW5zaWduZWQgbG9uZwkJbmV4dF9wb3J0X3NjYW47CiB9OwogCiBzdHJ1Y3QgemZjcF9wb3J0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCmluZGV4IGM4MmZlNjUuLjJjNWQ0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwpAQCAtODIxLDExICs4MjEsNiBAQAogCXJldHVybiBaRkNQX0VSUF9DT05USU5VRVM7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xlYXJzdGF0aShzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQotewotCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVELCAmcG9ydC0+c3RhdHVzKTsKLX0KLQogc3RhdGljIGludCB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9zdHJhdGVneShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OwpAQCAtODMzLDcgKzgyOCw2IEBACiAKIAlzd2l0Y2ggKGVycF9hY3Rpb24tPnN0ZXApIHsKIAljYXNlIFpGQ1BfRVJQX1NURVBfVU5JTklUSUFMSVpFRDoKLQkJemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbGVhcnN0YXRpKHBvcnQpOwogCQlpZiAoKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX1BPUlRfUEhZU19PUEVOKSAmJgogCQkgICAgKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKSkKIAkJCXJldHVybiB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9zdHJhdGVneV9jbG9zZShlcnBfYWN0aW9uKTsKQEAgLTkzMyw3ICs5MjcsNiBAQAogCiAJc3dpdGNoIChlcnBfYWN0aW9uLT5zdGVwKSB7CiAJY2FzZSBaRkNQX0VSUF9TVEVQX1VOSU5JVElBTElaRUQ6Ci0JCXpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xlYXJzdGF0aShwb3J0KTsKIAkJaWYgKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCiAJCQlyZXR1cm4gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbG9zZShlcnBfYWN0aW9uKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAppbmRleCBhOWM1NzBhLi41YjUwMDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKQEAgLTg1LDYgKzg1LDcgQEAKIGV4dGVybiBpbnQgemZjcF9mY19leGVjX2JzZ19qb2Ioc3RydWN0IGZjX2JzZ19qb2IgKik7CiBleHRlcm4gaW50IHpmY3BfZmNfdGltZW91dF9ic2dfam9iKHN0cnVjdCBmY19ic2dfam9iICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19zeW1fbmFtZV91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICopOworZXh0ZXJuIHVuc2lnbmVkIGludCB6ZmNwX2ZjX3BvcnRfc2Nhbl9iYWNrb2ZmKHZvaWQpOwogZXh0ZXJuIHZvaWQgemZjcF9mY19jb25kaXRpb25hbF9wb3J0X3NjYW4oc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfaW52ZXJzZV9jb25kaXRpb25hbF9wb3J0X3NjYW4oc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCmluZGV4IGNhMjhlMWMuLjI1ZDQ5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8c2NzaS9mYy9mY19lbHMuaD4KICNpbmNsdWRlIDxzY3NpL2xpYmZjLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKQEAgLTMxLDEyICszMiw1NCBAQAogTU9EVUxFX1BBUk1fREVTQyhub19hdXRvX3BvcnRfcmVzY2FuLAogCQkgIm5vIGF1dG9tYXRpYyBwb3J0X3Jlc2NhbiAoZGVmYXVsdCBvZmYpIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydF9zY2FuX2JhY2tvZmYgPSA1MDA7Cittb2R1bGVfcGFyYW0ocG9ydF9zY2FuX2JhY2tvZmYsIHVpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhwb3J0X3NjYW5fYmFja29mZiwKKwkidXBwZXIgbGltaXQgb2YgcG9ydCBzY2FuIHJhbmRvbSBiYWNrb2ZmIGluIG1zZWNzIChkZWZhdWx0IDUwMCkiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBwb3J0X3NjYW5fcmF0ZWxpbWl0ID0gNjAwMDA7Cittb2R1bGVfcGFyYW0ocG9ydF9zY2FuX3JhdGVsaW1pdCwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnRfc2Nhbl9yYXRlbGltaXQsCisJIm1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBwb3J0IHNjYW5zIGluIG1zZWNzIChkZWZhdWx0IDYwMDAwKSIpOworCit1bnNpZ25lZCBpbnQgemZjcF9mY19wb3J0X3NjYW5fYmFja29mZih2b2lkKQoreworCWlmICghcG9ydF9zY2FuX2JhY2tvZmYpCisJCXJldHVybiAwOworCXJldHVybiBnZXRfcmFuZG9tX2ludCgpICUgcG9ydF9zY2FuX2JhY2tvZmY7Cit9CisKK3N0YXRpYyB2b2lkIHpmY3BfZmNfcG9ydF9zY2FuX3RpbWUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhwb3J0X3NjYW5fcmF0ZWxpbWl0KTsKKwl1bnNpZ25lZCBsb25nIGJhY2tvZmYgPSBtc2Vjc190b19qaWZmaWVzKHpmY3BfZmNfcG9ydF9zY2FuX2JhY2tvZmYoKSk7CisKKwlhZGFwdGVyLT5uZXh0X3BvcnRfc2NhbiA9IGppZmZpZXMgKyBpbnRlcnZhbCArIGJhY2tvZmY7Cit9CisKK3N0YXRpYyB2b2lkIHpmY3BfZmNfcG9ydF9zY2FuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgbmV4dCA9IGFkYXB0ZXItPm5leHRfcG9ydF9zY2FuOworCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwLCBtYXg7CisKKwkvKiBkZWxheSBvbmx5IG5lZWRlZCB3aXRoaW4gd2FpdGluZyBwZXJpb2QgKi8KKwlpZiAodGltZV9iZWZvcmUobm93LCBuZXh0KSkgeworCQlkZWxheSA9IG5leHQgLSBub3c7CisJCS8qIHBhcmFub2lhOiBuZXZlciBldmVyIGRlbGF5IHNjYW5zIGxvbmdlciB0aGFuIHNwZWNpZmllZCAqLworCQltYXggPSBtc2Vjc190b19qaWZmaWVzKHBvcnRfc2Nhbl9yYXRlbGltaXQgKyBwb3J0X3NjYW5fYmFja29mZik7CisJCWRlbGF5ID0gbWluKGRlbGF5LCBtYXgpOworCX0KKworCXF1ZXVlX2RlbGF5ZWRfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLCAmYWRhcHRlci0+c2Nhbl93b3JrLCBkZWxheSk7Cit9CisKIHZvaWQgemZjcF9mY19jb25kaXRpb25hbF9wb3J0X3NjYW4oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAobm9fYXV0b19wb3J0X3Jlc2NhbikKIAkJcmV0dXJuOwogCi0JcXVldWVfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLCAmYWRhcHRlci0+c2Nhbl93b3JrKTsKKwl6ZmNwX2ZjX3BvcnRfc2NhbihhZGFwdGVyKTsKIH0KIAogdm9pZCB6ZmNwX2ZjX2ludmVyc2VfY29uZGl0aW9uYWxfcG9ydF9zY2FuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC00NCw3ICs4Nyw3IEBACiAJaWYgKCFub19hdXRvX3BvcnRfcmVzY2FuKQogCQlyZXR1cm47CiAKLQlxdWV1ZV93b3JrKGFkYXB0ZXItPndvcmtfcXVldWUsICZhZGFwdGVyLT5zY2FuX3dvcmspOworCXpmY3BfZmNfcG9ydF9zY2FuKGFkYXB0ZXIpOwogfQogCiAvKioKQEAgLTY4MCwxMiArNzIzLDE1IEBACiAgKi8KIHZvaWQgemZjcF9mY19zY2FuX3BvcnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX2FkYXB0ZXIsCisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHcgPSB0b19kZWxheWVkX3dvcmsod29yayk7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihkdywgc3RydWN0IHpmY3BfYWRhcHRlciwKIAkJCQkJCSAgICBzY2FuX3dvcmspOwogCWludCByZXQsIGk7CiAJc3RydWN0IHpmY3BfZmNfcmVxICpmY19yZXE7CiAJaW50IGNoYWluLCBtYXhfZW50cmllcywgYnVmX251bSwgbWF4X2J5dGVzOwogCisJemZjcF9mY19wb3J0X3NjYW5fdGltZShhZGFwdGVyKTsKKwogCWNoYWluID0gYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0VMU19DVF9DSEFJTkVEX1NCQUxTOwogCWJ1Zl9udW0gPSBjaGFpbiA/IFpGQ1BfRkNfR1BOX0ZUX05VTV9CVUZTIDogMTsKIAltYXhfZW50cmllcyA9IGNoYWluID8gWkZDUF9GQ19HUE5fRlRfTUFYX0VOVCA6IFpGQ1BfRkNfR1BOX0ZUX0VOVF9QQUdFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5oCmluZGV4IGIxZDIwMjQuLmRmMmI1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmgKQEAgLTIxMiw4ICsyMTIsNiBAQAogdm9pZCB6ZmNwX2ZjX3Njc2lfdG9fZmNwKHN0cnVjdCBmY3BfY21uZCAqZmNwLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpLAogCQkJIHU4IHRtX2ZsYWdzKQogewotCWNoYXIgdGFnWzJdOwotCiAJaW50X3RvX3Njc2lsdW4oc2NzaS0+ZGV2aWNlLT5sdW4sIChzdHJ1Y3Qgc2NzaV9sdW4gKikgJmZjcC0+ZmNfbHVuKTsKIAogCWlmICh1bmxpa2VseSh0bV9mbGFncykpIHsKQEAgLTIyMSwxNyArMjE5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coc2NzaSwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIE1TR19PUkRFUkVEX1RBRzoKLQkJCWZjcC0+ZmNfcHJpX3RhIHw9IEZDUF9QVEFfT1JERVJFRDsKLQkJCWJyZWFrOwotCQljYXNlIE1TR19TSU1QTEVfVEFHOgotCQkJZmNwLT5mY19wcmlfdGEgfD0gRkNQX1BUQV9TSU1QTEU7Ci0JCQlicmVhazsKLQkJfTsKLQl9IGVsc2UKLQkJZmNwLT5mY19wcmlfdGEgPSBGQ1BfUFRBX1NJTVBMRTsKKwlmY3AtPmZjX3ByaV90YSA9IEZDUF9QVEFfU0lNUExFOwogCiAJaWYgKHNjc2ktPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKIAkJZmNwLT5mY19mbGFncyB8PSBGQ1BfQ0ZMX1JEREFUQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IDBmZThkNWQuLjIxZWM1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMTM5Niw4ICsxMzk2LDcgQEAKIAkJcG9ydC0+aGFuZGxlID0gaGVhZGVyLT5wb3J0X2hhbmRsZTsKIAkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOIHwKIAkJCQlaRkNQX1NUQVRVU19QT1JUX1BIWVNfT1BFTiwgJnBvcnQtPnN0YXR1cyk7Ci0JCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVEIHwKLQkJICAgICAgICAgICAgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCwKKwkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCwKIAkJICAgICAgICAgICAgICAgICAgJnBvcnQtPnN0YXR1cyk7CiAJCS8qIGNoZWNrIHdoZXRoZXIgRF9JRCBoYXMgY2hhbmdlZCBkdXJpbmcgb3BlbiAqLwogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCA3YjM1MzY0Li43NWY0YmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtMzIsMjUgKzMyLDYgQEAKIG1vZHVsZV9wYXJhbShhbGxvd19sdW5fc2NhbiwgYm9vbCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFsbG93X2x1bl9zY2FuLCAiRm9yIE5QSVYsIHNjYW4gYW5kIGF0dGFjaCBhbGwgc3RvcmFnZSBMVU5zIik7CiAKLXN0YXRpYyBpbnQgemZjcF9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCwKLQkJCQkJaW50IHJlYXNvbikKLXsKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9RRlVMTDoKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgZGVwdGgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLQogc3RhdGljIHZvaWQgemZjcF9zY3NpX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXN0cnVjdCB6ZmNwX3Njc2lfZGV2ICp6ZmNwX3NkZXYgPSBzZGV2X3RvX3pmY3Aoc2Rldik7CkBAIC02Niw5ICs0Nyw3IEBACiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCiB7CiAJaWYgKHNkcC0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RwLCBNU0dfU0lNUExFX1RBRywgZGVmYXVsdF9kZXB0aCk7Ci0JZWxzZQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZHAsIDAsIDEpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZHAsIGRlZmF1bHRfZGVwdGgpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDcsNyArMjg2LDcgQEAKIAkuc2xhdmVfYWxsb2MJCSA9IHpmY3Bfc2NzaV9zbGF2ZV9hbGxvYywKIAkuc2xhdmVfY29uZmlndXJlCSA9IHpmY3Bfc2NzaV9zbGF2ZV9jb25maWd1cmUsCiAJLnNsYXZlX2Rlc3Ryb3kJCSA9IHpmY3Bfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJID0gemZjcF9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCSA9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5wcm9jX25hbWUJCSA9ICJ6ZmNwIiwKIAkuY2FuX3F1ZXVlCQkgPSA0MDk2LAogCS50aGlzX2lkCQkgPSAtMSwKQEAgLTMyMiw2ICszMDEsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJID0gMSwKIAkuc2hvc3RfYXR0cnMJCSA9IHpmY3Bfc3lzZnNfc2hvc3RfYXR0cnMsCiAJLnNkZXZfYXR0cnMJCSA9IHpmY3Bfc3lzZnNfc2Rldl9hdHRycywKKwkudHJhY2tfcXVldWVfZGVwdGgJID0gMSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCmluZGV4IDY3MmI1NzIuLjk2YTBiZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKQEAgLTczLDkgKzczLDcgQEAKIFpGQ1BfREVGSU5FX0FUVFIoemZjcF9wb3J0LCBwb3J0LCBpbl9yZWNvdmVyeSwgIiVkXG4iLAogCQkgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYKIAkJICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFKSAhPSAwKTsKLVpGQ1BfREVGSU5FX0FUVFIoemZjcF9wb3J0LCBwb3J0LCBhY2Nlc3NfZGVuaWVkLCAiJWRcbiIsCi0JCSAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJgotCQkgIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVEKSAhPSAwKTsKK1pGQ1BfREVGSU5FX0FUVFJfQ09OU1QocG9ydCwgYWNjZXNzX2RlbmllZCwgIiVkXG4iLCAwKTsKIAogWkZDUF9ERUZJTkVfQVRUUih6ZmNwX3VuaXQsIHVuaXQsIHN0YXR1cywgIjB4JTA4eFxuIiwKIAkJIHpmY3BfdW5pdF9zZGV2X3N0YXR1cyh1bml0KSk7CkBAIC0yMjMsOSArMjIxLDEzIEBACiAJaWYgKCFhZGFwdGVyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIHN5bmMgdGhlIHVzZXItc3BhY2UtIHdpdGggdGhlIGtlcm5lbC1pbnZvY2F0aW9uIG9mIHNjYW5fd29yayAqLwotCXF1ZXVlX3dvcmsoYWRhcHRlci0+d29ya19xdWV1ZSwgJmFkYXB0ZXItPnNjYW5fd29yayk7Ci0JZmx1c2hfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsKKwkvKgorCSAqIFVzZXJzIHdpc2ggaXMgb3VyIGNvbW1hbmQ6IGltbWVkaWF0ZWx5IHNjaGVkdWxlIGFuZCBmbHVzaCBhCisJICogd29ya2VyIHRvIGNvbmR1Y3QgYSBzeW5jaHJvbm91cyBwb3J0IHNjYW4sIHRoYXQgaXMsIG5laXRoZXIKKwkgKiBhIHJhbmRvbSBkZWxheSBub3IgYSByYXRlIGxpbWl0IGlzIGFwcGxpZWQgaGVyZS4KKwkgKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci0+d29ya19xdWV1ZSwgJmFkYXB0ZXItPnNjYW5fd29yaywgMCk7CisJZmx1c2hfZGVsYXllZF93b3JrKCZhZGFwdGVyLT5zY2FuX3dvcmspOwogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwogCiAJcmV0dXJuIChzc2l6ZV90KSBjb3VudDsKQEAgLTQzOSwxNiArNDQxLDE1IEBACiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CQkJIFwKIAlzdHJ1Y3QgemZjcF9zY3NpX2RldiAqemZjcF9zZGV2ID0gc2Rldl90b196ZmNwKHNkZXYpOwkJIFwKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gemZjcF9zZGV2LT5wb3J0OwkJCSBcCiAJCQkJCQkJCQkgXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgX2Zvcm1hdCwgX3ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHN0YXRpYyBERVZJQ0VfQVRUUihfbmFtZSwgU19JUlVHTywgemZjcF9zeXNmc19zY3NpXyMjX25hbWUjI19zaG93LCBOVUxMKTsKIAogWkZDUF9ERUZJTkVfU0NTSV9BVFRSKGhiYV9pZCwgIiVzXG4iLAotCQkgICAgICBkZXZfbmFtZSgmcG9ydC0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7CisJCSAgICAgIGRldl9uYW1lKCZ6ZmNwX3NkZXYtPnBvcnQtPmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOwogWkZDUF9ERUZJTkVfU0NTSV9BVFRSKHd3cG4sICIweCUwMTZsbHhcbiIsCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBvcnQtPnd3cG4pOworCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB6ZmNwX3NkZXYtPnBvcnQtPnd3cG4pOwogCiBzdGF0aWMgc3NpemVfdCB6ZmNwX3N5c2ZzX3Njc2lfZmNwX2x1bl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNDYwLDYgKzQ2MSw0OSBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGZjcF9sdW4sIFNfSVJVR08sIHpmY3Bfc3lzZnNfc2NzaV9mY3BfbHVuX3Nob3csIE5VTEwpOwogCitaRkNQX0RFRklORV9TQ1NJX0FUVFIoemZjcF9hY2Nlc3NfZGVuaWVkLCAiJWRcbiIsCisJCSAgICAgIChhdG9taWNfcmVhZCgmemZjcF9zZGV2LT5zdGF0dXMpICYKKwkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVEKSAhPSAwKTsKKworc3RhdGljIHNzaXplX3QgemZjcF9zeXNmc19zY3NpX3pmY3BfZmFpbGVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IGF0b21pY19yZWFkKCZzZGV2X3RvX3pmY3Aoc2RldiktPnN0YXR1cyk7CisJdW5zaWduZWQgaW50IGZhaWxlZCA9IHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEID8gMSA6IDA7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZmFpbGVkKTsKK30KKworc3RhdGljIHNzaXplX3QgemZjcF9zeXNmc19zY3NpX3pmY3BfZmFpbGVkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChrc3RydG91bChidWYsIDAsICZ2YWwpIHx8IHZhbCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXpmY3BfZXJwX3NldF9sdW5fc3RhdHVzKHNkZXYsIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKTsKKwl6ZmNwX2VycF9sdW5fcmVvcGVuKHNkZXYsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAorCQkJICAgICJzeXVmYWkzIik7CisJemZjcF9lcnBfd2FpdChzZGV2X3RvX3pmY3Aoc2RldiktPnBvcnQtPmFkYXB0ZXIpOworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKHpmY3BfZmFpbGVkLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgemZjcF9zeXNmc19zY3NpX3pmY3BfZmFpbGVkX3Nob3csCisJCSAgIHpmY3Bfc3lzZnNfc2NzaV96ZmNwX2ZhaWxlZF9zdG9yZSk7CisKK1pGQ1BfREVGSU5FX1NDU0lfQVRUUih6ZmNwX2luX3JlY292ZXJ5LCAiJWRcbiIsCisJCSAgICAgIChhdG9taWNfcmVhZCgmemZjcF9zZGV2LT5zdGF0dXMpICYKKwkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UpICE9IDApOworCitaRkNQX0RFRklORV9TQ1NJX0FUVFIoemZjcF9zdGF0dXMsICIweCUwOHhcbiIsCisJCSAgICAgIGF0b21pY19yZWFkKCZ6ZmNwX3NkZXYtPnN0YXR1cykpOworCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqemZjcF9zeXNmc19zZGV2X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2ZjcF9sdW4sCiAJJmRldl9hdHRyX3d3cG4sCkBAIC00NjcsNiArNTExLDEwIEBACiAJJmRldl9hdHRyX3JlYWRfbGF0ZW5jeSwKIAkmZGV2X2F0dHJfd3JpdGVfbGF0ZW5jeSwKIAkmZGV2X2F0dHJfY21kX2xhdGVuY3ksCisJJmRldl9hdHRyX3pmY3BfYWNjZXNzX2RlbmllZCwKKwkmZGV2X2F0dHJfemZjcF9mYWlsZWQsCisJJmRldl9hdHRyX3pmY3BfaW5fcmVjb3ZlcnksCisJJmRldl9hdHRyX3pmY3Bfc3RhdHVzLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCmluZGV4IDBhNzMyNTMuLmNkNDEyOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwpAQCAtMTg5LDE5ICsxODksNiBAQAogCXJldHVybiBsZW47CiB9IC8qIEVuZCB0d2Ffc2hvd19zdGF0cygpICovCiAKLS8qIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYSBkZXZpY2VzIHF1ZXVlIGRlcHRoICovCi1zdGF0aWMgaW50IHR3YV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXVldWVfZGVwdGgsCi0JCQkJICBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHF1ZXVlX2RlcHRoID4gVFdfUV9MRU5HVEgtMikKLQkJcXVldWVfZGVwdGggPSBUV19RX0xFTkdUSC0yOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgcXVldWVfZGVwdGgpOwotCXJldHVybiBxdWV1ZV9kZXB0aDsKLX0gLyogRW5kIHR3YV9jaGFuZ2VfcXVldWVfZGVwdGgoKSAqLwotCiAvKiBDcmVhdGUgc3lzZnMgJ3N0YXRzJyBlbnRyeSAqLwogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHR3YV9ob3N0X3N0YXRzX2F0dHIgPSB7CiAJLmF0dHIgPSB7CkBAIC0yMDE2LDcgKzIwMDMsNyBAQAogCS5xdWV1ZWNvbW1hbmQJCT0gdHdhX3Njc2lfcXVldWUsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHR3YV9zY3NpX2VoX3Jlc2V0LAogCS5iaW9zX3BhcmFtCQk9IHR3YV9zY3NpX2Jpb3NwYXJhbSwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gdHdhX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLmNhbl9xdWV1ZQkJPSBUV19RX0xFTkdUSC0yLAogCS5zbGF2ZV9jb25maWd1cmUJPSB0d2Ffc2xhdmVfY29uZmlndXJlLAogCS50aGlzX2lkCQk9IC0xLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LXNhcy5jIGIvZHJpdmVycy9zY3NpLzN3LXNhcy5jCmluZGV4IDZkYTZjZWMuLjIzNjE3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy1zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvM3ctc2FzLmMKQEAgLTE5MSwxOSArMTkxLDYgQEAKIAlyZXR1cm4gbGVuOwogfSAvKiBFbmQgdHdsX3Nob3dfc3RhdHMoKSAqLwogCi0vKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGEgZGV2aWNlcyBxdWV1ZSBkZXB0aCAqLwotc3RhdGljIGludCB0d2xfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHF1ZXVlX2RlcHRoLAotCQkJCSAgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChxdWV1ZV9kZXB0aCA+IFRXX1FfTEVOR1RILTIpCi0JCXF1ZXVlX2RlcHRoID0gVFdfUV9MRU5HVEgtMjsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfT1JERVJFRF9UQUcsIHF1ZXVlX2RlcHRoKTsKLQlyZXR1cm4gcXVldWVfZGVwdGg7Ci19IC8qIEVuZCB0d2xfY2hhbmdlX3F1ZXVlX2RlcHRoKCkgKi8KLQogLyogc3RhdHMgc3lzZnMgYXR0cmlidXRlIGluaXRpYWxpemVyICovCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdHdsX2hvc3Rfc3RhdHNfYXR0ciA9IHsKIAkuYXR0ciA9IHsKQEAgLTE1OTAsNyArMTU3Nyw3IEBACiAJLnF1ZXVlY29tbWFuZAkJPSB0d2xfc2NzaV9xdWV1ZSwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCT0gdHdsX3Njc2lfZWhfcmVzZXQsCiAJLmJpb3NfcGFyYW0JCT0gdHdsX3Njc2lfYmlvc3BhcmFtLAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSB0d2xfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IFRXX1FfTEVOR1RILTIsCiAJLnNsYXZlX2NvbmZpZ3VyZQk9IHR3bF9zbGF2ZV9jb25maWd1cmUsCiAJLnRoaXNfaWQJCT0gLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5jIGIvZHJpdmVycy9zY3NpLzN3LXh4eHguYwppbmRleCA3NTI2MjRlLi5jNzVmMjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKQEAgLTUyMywxOSArNTIzLDYgQEAKIAlyZXR1cm4gbGVuOwogfSAvKiBFbmQgdHdfc2hvd19zdGF0cygpICovCiAKLS8qIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYSBkZXZpY2VzIHF1ZXVlIGRlcHRoICovCi1zdGF0aWMgaW50IHR3X2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxdWV1ZV9kZXB0aCwKLQkJCQkgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChxdWV1ZV9kZXB0aCA+IFRXX1FfTEVOR1RILTIpCi0JCXF1ZXVlX2RlcHRoID0gVFdfUV9MRU5HVEgtMjsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfT1JERVJFRF9UQUcsIHF1ZXVlX2RlcHRoKTsKLQlyZXR1cm4gcXVldWVfZGVwdGg7Ci19IC8qIEVuZCB0d19jaGFuZ2VfcXVldWVfZGVwdGgoKSAqLwotCiAvKiBDcmVhdGUgc3lzZnMgJ3N0YXRzJyBlbnRyeSAqLwogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHR3X2hvc3Rfc3RhdHNfYXR0ciA9IHsKIAkuYXR0ciA9IHsKQEAgLTIyNzAsNyArMjI1Nyw3IEBACiAJLnF1ZXVlY29tbWFuZAkJPSB0d19zY3NpX3F1ZXVlLAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSB0d19zY3NpX2VoX3Jlc2V0LAogCS5iaW9zX3BhcmFtCQk9IHR3X3Njc2lfYmlvc3BhcmFtLAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSB0d19jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5jYW5fcXVldWUJCT0gVFdfUV9MRU5HVEgtMiwKIAkuc2xhdmVfY29uZmlndXJlCT0gdHdfc2xhdmVfY29uZmlndXJlLAogCS50aGlzX2lkCQk9IC0xLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzUzYzcwMC5jIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5jCmluZGV4IGZhYmQ0YmUuLmFhOTE1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS81M2M3MDAuYworKysgYi9kcml2ZXJzL3Njc2kvNTNjNzAwLmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogU1RBVElDIGludCBOQ1JfNzAwX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwbnQpOwogU1RBVElDIGludCBOQ1JfNzAwX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50KTsKIFNUQVRJQyB2b2lkIE5DUl83MDBfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50KTsKLXN0YXRpYyBpbnQgTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpTRHBudCwgaW50IGRlcHRoLCBpbnQgcmVhc29uKTsKK3N0YXRpYyBpbnQgTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpTRHBudCwgaW50IGRlcHRoKTsKIHN0YXRpYyBpbnQgTkNSXzcwMF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50LCBpbnQgZGVwdGgpOwogCiBTVEFUSUMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKk5DUl83MDBfZGV2X2F0dHJzW107CkBAIC0zMjcsNiArMzI3LDcgQEAKIAl0cG50LT5zbGF2ZV9hbGxvYyA9IE5DUl83MDBfc2xhdmVfYWxsb2M7CiAJdHBudC0+Y2hhbmdlX3F1ZXVlX2RlcHRoID0gTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGg7CiAJdHBudC0+Y2hhbmdlX3F1ZXVlX3R5cGUgPSBOQ1JfNzAwX2NoYW5nZV9xdWV1ZV90eXBlOworCXRwbnQtPnVzZV9ibGtfdGFncyA9IDE7CiAKIAlpZih0cG50LT5uYW1lID09IE5VTEwpCiAJCXRwbnQtPm5hbWUgPSAiNTNjNzAwIjsKQEAgLTU5MiwxOSArNTkzLDE0IEBACiAJaG9zdGRhdGEtPmNtZCA9IE5VTEw7CiAKIAlpZihTQ3AgIT0gTlVMTCkgewotCQlzdHJ1Y3QgTkNSXzcwMF9jb21tYW5kX3Nsb3QgKnNsb3QgPSAKKwkJc3RydWN0IE5DUl83MDBfY29tbWFuZF9zbG90ICpzbG90ID0KIAkJCShzdHJ1Y3QgTkNSXzcwMF9jb21tYW5kX3Nsb3QgKilTQ3AtPmhvc3Rfc2NyaWJibGU7Ci0JCQorCiAJCWRtYV91bm1hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgc2xvdC0+cENtZCwKIAkJCQkgTUFYX0NPTU1BTkRfU0laRSwgRE1BX1RPX0RFVklDRSk7CiAJCWlmIChzbG90LT5mbGFncyA9PSBOQ1JfNzAwX0ZMQUdfQVVUT1NFTlNFKSB7CiAJCQljaGFyICpjbW5kID0gTkNSXzcwMF9nZXRfc2Vuc2VfY21uZChTQ3AtPmRldmljZSk7Ci0jaWZkZWYgTkNSXzcwMF9ERUJVRwotCQkJcHJpbnRrKCIgT1JJR0lOQUwgQ01EICVwIFJFVFVSTkVEICVkLCBuZXcgcmV0dXJuIGlzICVkIHNlbnNlIGlzXG4iLAotCQkJICAgICAgIFNDcCwgU0NwLT5jbW5kWzddLCByZXN1bHQpOwotCQkJc2NzaV9wcmludF9zZW5zZSgiNTNjNzAwIiwgU0NwKTsKIAotI2VuZGlmCiAJCQlkbWFfdW5tYXBfc2luZ2xlKGhvc3RkYXRhLT5kZXYsIHNsb3QtPmRtYV9oYW5kbGUsCiAJCQkJCSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAJCQkvKiByZXN0b3JlIHRoZSBvbGQgcmVzdWx0IGlmIHRoZSByZXF1ZXN0IHNlbnNlIHdhcwpAQCAtOTA2LDggKzkwMiwxMCBAQAogCQkJLyogd2UncmUgZG9uZSBuZWdvdGlhdGluZyAqLwogCQkJTkNSXzcwMF9zZXRfdGFnX25lZ19zdGF0ZShTQ3AtPmRldmljZSwgTkNSXzcwMF9GSU5JU0hFRF9UQUdfTkVHT1RJQVRJT04pOwogCQkJaG9zdGRhdGEtPnRhZ19uZWdvdGlhdGVkICY9IH4oMTw8c2NtZF9pZChTQ3ApKTsKKwogCQkJU0NwLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAwOwotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShTQ3AtPmRldmljZSwgaG9zdC0+Y21kX3Blcl9sdW4pOworCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoU0NwLT5kZXZpY2UsIGhvc3QtPmNtZF9wZXJfbHVuKTsKKwkJCXNjc2lfc2V0X3RhZ190eXBlKFNDcC0+ZGV2aWNlLCAwKTsKIAkJfSBlbHNlIHsKIAkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhvc3QsCiAJCQkJIiglZDolZCkgVW5leHBlY3RlZCBSRUpFQ1QgTWVzc2FnZSAlc1xuIiwKQEAgLTE0MzIsNyArMTQzMCw3IEBACiAJaWYoKGhvc3RkYXRhLT50YWdfbmVnb3RpYXRlZCAmICgxPDxzY21kX2lkKFNDcCkpKQogCSAgICYmIChzbG90LT50YWcgIT0gU0NTSV9OT19UQUcgJiYgU0NwLT5jbW5kWzBdICE9IFJFUVVFU1RfU0VOU0UgJiYKIAkgICAgICAgc2xvdC0+ZmxhZ3MgIT0gTkNSXzcwMF9GTEFHX0FVVE9TRU5TRSkpIHsKLQkJY291bnQgKz0gc2NzaV9wb3B1bGF0ZV90YWdfbXNnKFNDcCwgJmhvc3RkYXRhLT5tc2dvdXRbY291bnRdKTsKKwkJY291bnQgKz0gc3BpX3BvcHVsYXRlX3RhZ19tc2coJmhvc3RkYXRhLT5tc2dvdXRbY291bnRdLCBTQ3ApOwogCX0KIAogCWlmKGhvc3RkYXRhLT5mYXN0ICYmCkBAIC0xNzcyLDcgKzE3NzAsNyBAQAogCSAqLwogCWlmKE5DUl83MDBfZ2V0X2RlcHRoKFNDcC0+ZGV2aWNlKSAhPSAwCiAJICAgJiYgKCEoaG9zdGRhdGEtPnRhZ19uZWdvdGlhdGVkICYgKDE8PHNjbWRfaWQoU0NwKSkpCi0JICAgICAgIHx8ICFibGtfcnFfdGFnZ2VkKFNDcC0+cmVxdWVzdCkpKSB7CisJICAgICAgIHx8ICEoU0NwLT5mbGFncyAmIFNDTURfVEFHR0VEKSkpIHsKIAkJQ0RFQlVHKEtFUk5fRVJSLCBTQ3AsICJoYXMgbm9uIHplcm8gZGVwdGggJWRcbiIsCiAJCSAgICAgICBOQ1JfNzAwX2dldF9kZXB0aChTQ3AtPmRldmljZSkpOwogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwpAQCAtMTgwMCw3ICsxNzk4LDcgQEAKIAlwcmludGsoIjUzYzcwMDogc2NzaSVkLCBjb21tYW5kICIsIFNDcC0+ZGV2aWNlLT5ob3N0LT5ob3N0X25vKTsKIAlzY3NpX3ByaW50X2NvbW1hbmQoU0NwKTsKICNlbmRpZgotCWlmKGJsa19ycV90YWdnZWQoU0NwLT5yZXF1ZXN0KQorCWlmICgoU0NwLT5mbGFncyAmIFNDTURfVEFHR0VEKQogCSAgICYmIChob3N0ZGF0YS0+dGFnX25lZ290aWF0ZWQgJigxPDxzY21kX2lkKFNDcCkpKSA9PSAwCiAJICAgJiYgTkNSXzcwMF9nZXRfdGFnX25lZ19zdGF0ZShTQ3AtPmRldmljZSkgPT0gTkNSXzcwMF9TVEFSVF9UQUdfTkVHT1RJQVRJT04pIHsKIAkJc2NtZF9wcmludGsoS0VSTl9FUlIsIFNDcCwgIkVuYWJsaW5nIFRhZyBDb21tYW5kIFF1ZXVpbmdcbiIpOwpAQCAtMTgxNCw3ICsxODEyLDcgQEAKIAkgKgogCSAqIEZJWE1FOiBUaGlzIHdpbGwgcm95YWxseSBzY3JldyB1cCBvbiBtdWx0aXBsZSBMVU4gZGV2aWNlcwogCSAqICovCi0JaWYoIWJsa19ycV90YWdnZWQoU0NwLT5yZXF1ZXN0KQorCWlmICghKFNDcC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkKIAkgICAmJiAoaG9zdGRhdGEtPnRhZ19uZWdvdGlhdGVkICYoMTw8c2NtZF9pZChTQ3ApKSkpIHsKIAkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ3AsICJEaXNhYmxpbmcgVGFnIENvbW1hbmQgUXVldWluZ1xuIik7CiAJCWhvc3RkYXRhLT50YWdfbmVnb3RpYXRlZCAmPSB+KDE8PHNjbWRfaWQoU0NwKSk7CkBAIC0xOTExLDkgKzE5MDksNyBAQAogewogCXN0cnVjdCBOQ1JfNzAwX2NvbW1hbmRfc2xvdCAqc2xvdDsKIAotCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwLAotCQkiTmV3IGVycm9yIGhhbmRsZXIgd2FudHMgdG8gYWJvcnQgY29tbWFuZFxuXHQiKTsKLQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcCwgImFib3J0IGNvbW1hbmRcbiIpOwogCiAJc2xvdCA9IChzdHJ1Y3QgTkNSXzcwMF9jb21tYW5kX3Nsb3QgKilTQ3AtPmhvc3Rfc2NyaWJibGU7CiAKQEAgLTIwNTYsMTMgKzIwNTIsMTAgQEAKIAogCS8qIHRvIGRvIGhlcmU6IGFsbG9jYXRlIG1lbW9yeTsgYnVpbGQgYSBxdWV1ZV9mdWxsIGxpc3QgKi8KIAlpZihTRHAtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoU0RwLCBNU0dfT1JERVJFRF9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShTRHAsIE5DUl83MDBfREVGQVVMVF9UQUdTKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoU0RwLCBOQ1JfNzAwX0RFRkFVTFRfVEFHUyk7CiAJCU5DUl83MDBfc2V0X3RhZ19uZWdfc3RhdGUoU0RwLCBOQ1JfNzAwX1NUQVJUX1RBR19ORUdPVElBVElPTik7Ci0JfSBlbHNlIHsKLQkJLyogaW5pdGlhbGlzZSB0byBkZWZhdWx0IGRlcHRoICovCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKFNEcCwgMCwgU0RwLT5ob3N0LT5jbWRfcGVyX2x1bik7CiAJfQorCiAJaWYoaG9zdGRhdGEtPmZhc3QpIHsKIAkJLyogRmluZCB0aGUgY29ycmVjdCBvZmZzZXQgYW5kIHBlcmlvZCB2aWEgZG9tYWluIHZhbGlkYXRpb24gKi8KIAkJaWYgKCFzcGlfaW5pdGlhbF9kdihTRHAtPnNkZXZfdGFyZ2V0KSkKQEAgLTIwODIsMTYgKzIwNzUsMTEgQEAKIH0KIAogc3RhdGljIGludAotTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpTRHAsIGludCBkZXB0aCwgaW50IHJlYXNvbikKK05DUl83MDBfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwLCBpbnQgZGVwdGgpCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAoZGVwdGggPiBOQ1JfNzAwX01BWF9UQUdTKQogCQlkZXB0aCA9IE5DUl83MDBfTUFYX1RBR1M7Ci0KLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChTRHAsIHNjc2lfZ2V0X3RhZ190eXBlKFNEcCksIGRlcHRoKTsKLQlyZXR1cm4gZGVwdGg7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKFNEcCwgZGVwdGgpOwogfQogCiBzdGF0aWMgaW50IE5DUl83MDBfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpTRHAsIGludCB0YWdfdHlwZSkKQEAgLTIxMDEsOCArMjA4OSw2IEBACiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IAogCQkoc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICopU0RwLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAotCXNjc2lfc2V0X3RhZ190eXBlKFNEcCwgdGFnX3R5cGUpOwotCiAJLyogV2UgaGF2ZSBhIGdsb2JhbCAocGVyIHRhcmdldCkgZmxhZyB0byB0cmFjayB3aGV0aGVyIFRDUSBpcwogCSAqIGVuYWJsZWQsIHNvIHdlJ2xsIGJlIHR1cm5pbmcgaXQgb2ZmIGZvciB0aGUgZW50aXJlIHRhcmdldCBoZXJlLgogCSAqIG91ciB0YWcgYWxnb3JpdGhtIHdpbGwgZmFpbCBpZiB3ZSBtaXggdGFnZ2VkIGFuZCB1bnRhZ2dlZCBjb21tYW5kcywKQEAgLTIxMTAsMTUgKzIwOTYsMTYgQEAKIAlpZiAoY2hhbmdlX3RhZykKIAkJc2NzaV90YXJnZXRfcXVpZXNjZShTRHAtPnNkZXZfdGFyZ2V0KTsKIAorCXNjc2lfc2V0X3RhZ190eXBlKFNEcCwgdGFnX3R5cGUpOwogCWlmICghdGFnX3R5cGUpIHsKIAkJLyogc2hpZnQgYmFjayB0byB0aGUgZGVmYXVsdCB1bnF1ZXVlZCBudW1iZXIgb2YgY29tbWFuZHMKIAkJICogKHRoZSB1c2VyIGNhbiBzdGlsbCByYWlzZSB0aGlzKSAqLwotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKFNEcCwgU0RwLT5ob3N0LT5jbWRfcGVyX2x1bik7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKFNEcCwgU0RwLT5ob3N0LT5jbWRfcGVyX2x1bik7CiAJCWhvc3RkYXRhLT50YWdfbmVnb3RpYXRlZCAmPSB+KDEgPDwgc2Rldl9pZChTRHApKTsKIAl9IGVsc2UgewogCQkvKiBIZXJlLCB3ZSBjbGVhcmVkIHRoZSBuZWdvdGlhdGlvbiBmbGFnIGFib3ZlLCBzbyB0aGlzCiAJCSAqIHdpbGwgZm9yY2UgdGhlIGRyaXZlciB0byByZW5lZ290aWF0ZSAqLwotCQlzY3NpX2FjdGl2YXRlX3RjcShTRHAsIFNEcC0+cXVldWVfZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChTRHAsIFNEcC0+cXVldWVfZGVwdGgpOwogCQlpZiAoY2hhbmdlX3RhZykKIAkJCU5DUl83MDBfc2V0X3RhZ19uZWdfc3RhdGUoU0RwLCBOQ1JfNzAwX1NUQVJUX1RBR19ORUdPVElBVElPTik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0J1c0xvZ2ljLmMgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYwppbmRleCA2NGM3NTE0Li44ZDY2YTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYworKysgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYwpAQCAtMjMyNywxMiArMjMyNywxMiBAQAogCQlpZiAocWRlcHRoID09IDApCiAJCQlxZGVwdGggPSBCTE9HSUNfTUFYX0FVVE9fVEFHX0RFUFRIOwogCQlhZGFwdGVyLT5xZGVwdGhbdGd0X2lkXSA9IHFkZXB0aDsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCBNU0dfU0lNUExFX1RBRywgcWRlcHRoKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCBxZGVwdGgpOwogCX0gZWxzZSB7CiAJCWFkYXB0ZXItPnRhZ3Ffb2sgJj0gfigxIDw8IHRndF9pZCk7CiAJCXFkZXB0aCA9IGFkYXB0ZXItPnVudGFnX3FkZXB0aDsKIAkJYWRhcHRlci0+cWRlcHRoW3RndF9pZF0gPSBxZGVwdGg7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgMCwgcWRlcHRoKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCBxZGVwdGgpOwogCX0KIAlxZGVwdGggPSAwOwogCWZvciAodGd0X2lkID0gMDsgdGd0X2lkIDwgYWRhcHRlci0+bWF4ZGV2OyB0Z3RfaWQrKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggM2E4MjBmNi4uODZjZjNkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTEzNDEsMTMgKzEzNDEsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRjMzk1eC4KIAotY29uZmlnIFNDU0lfREMzOTBUCi0JdHJpc3RhdGUgIlRla3JhbSBEQzM5MChUKSBhbmQgQW01My83OUM5NzQgU0NTSSBzdXBwb3J0IgorY29uZmlnIFNDU0lfQU01M0M5NzQKKwl0cmlzdGF0ZSAiVGVrcmFtIERDMzkwKFQpIGFuZCBBbTUzLzc5Qzk3NCBTQ1NJIHN1cHBvcnQgKG5ldyBkcml2ZXIpIgogCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBQQ0kgU0NTSSBob3N0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBBbTUzQzk3NEEKIAkgIGNoaXAsIGUuZy4gVGVrcmFtIERDMzkwKFQpLCBEYXdpQ29udHJvbCAyOTc0IGFuZCBzb21lIG9uYm9hcmQKIAkgIFBDc2NzaS9QQ25ldCAoQW01My83OUM5NzQpIHNvbHV0aW9ucy4KKwkgIFRoaXMgaXMgYSBuZXcgaW1wbGVtZW50YXRpb24gYmFzZSBvbiB0aGUgZ2VuZXJpYyBlc3Bfc2NzaSBkcml2ZXIuCiAKIAkgIERvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIDxmaWxlOkRvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dD4uCiAKQEAgLTEzNTUsNyArMTM1Nyw3IEBACiAJICBiYXNlZCBvbiBOQ1IvU3ltYmlvcyBjaGlwcy4gVXNlICJOQ1I1M0M4WFggU0NTSSBzdXBwb3J0IiBmb3IgdGhvc2UuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRtc2NzaW0uCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYW01M2M5NzQuCiAKIGNvbmZpZyBTQ1NJX1QxMjgKIAl0cmlzdGF0ZSAiVHJhbnRvciBUMTI4L1QxMjhGL1QyMjggU0NTSSBzdXBwb3J0IgpAQCAtMTQ1MSw2ICsxNDUzLDE0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBuc3AzMi4KIAorY29uZmlnIFNDU0lfV0Q3MTlYCisJdHJpc3RhdGUgIldlc3Rlcm4gRGlnaXRhbCBXRDcxOTMvNzE5Ny83Mjk2IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQorCXNlbGVjdCBFRVBST01fOTNDWDYKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBXZXN0ZXJuIERpZ2l0YWwgV0Q3MTkzLCBXRDcxOTcgYW5kIFdENzI5NiBQQ0kKKwkgIFNDU0kgY29udHJvbGxlcnMgKGJhc2VkIG9uIFdEMzNDMjk2QSBjaGlwKS4KKwogY29uZmlnIFNDU0lfREVCVUcKIAl0cmlzdGF0ZSAiU0NTSSBkZWJ1Z2dpbmcgaG9zdCBzaW11bGF0b3IiCiAJZGVwZW5kcyBvbiBTQ1NJCkBAIC0xNjE1LDcgKzE2MjUsNyBAQAogCSAgdGhhdCBsZWF2ZSB0aGUgZGV2aWNlcyB3aXRoIFNDU0kgb3BlcmF0aW9ucyBwYXJ0d2F5IGNvbXBsZXRlZC4KIAogY29uZmlnIE1BQ19TQ1NJCi0JYm9vbCAiTWFjaW50b3NoIE5DUjUzODAgU0NTSSIKKwl0cmlzdGF0ZSAiTWFjaW50b3NoIE5DUjUzODAgU0NTSSIKIAlkZXBlbmRzIG9uIE1BQyAmJiBTQ1NJPXkKIAlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggNTlmMWNlNi4uNTgxNThmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtMTAwLDcgKzEwMCw3IEBACiBvYmotJChDT05GSUdfU0NTSV83MDAwRkFTU1QpCSs9IHdkNzAwMC5vCiBvYmotJChDT05GSUdfU0NTSV9FQVRBKQkJKz0gZWF0YS5vCiBvYmotJChDT05GSUdfU0NTSV9EQzM5NXgpCSs9IGRjMzk1eC5vCi1vYmotJChDT05GSUdfU0NTSV9EQzM5MFQpCSs9IHRtc2NzaW0ubworb2JqLSQoQ09ORklHX1NDU0lfQU01M0M5NzQpCSs9IGVzcF9zY3NpLm8JYW01M2M5NzQubwogb2JqLSQoQ09ORklHX01FR0FSQUlEX0xFR0FDWSkJKz0gbWVnYXJhaWQubwogb2JqLSQoQ09ORklHX01FR0FSQUlEX05FV0dFTikJKz0gbWVnYXJhaWQvCiBvYmotJChDT05GSUdfTUVHQVJBSURfU0FTKQkrPSBtZWdhcmFpZC8KQEAgLTE0Myw2ICsxNDMsNyBAQAogb2JqLSQoQ09ORklHX1ZNV0FSRV9QVlNDU0kpCSs9IHZtd19wdnNjc2kubwogb2JqLSQoQ09ORklHX1hFTl9TQ1NJX0ZST05URU5EKQkrPSB4ZW4tc2NzaWZyb250Lm8KIG9iai0kKENPTkZJR19IWVBFUlZfU1RPUkFHRSkJKz0gaHZfc3RvcnZzYy5vCitvYmotJChDT05GSUdfU0NTSV9XRDcxOVgpCSs9IHdkNzE5eC5vCiAKIG9iai0kKENPTkZJR19BUk0pCQkrPSBhcm0vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCmluZGV4IDQ1ZGEzYzguLjM2MjQ0ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL05DUjUzODAuYwpAQCAtMTEsOCArMTEsNiBAQAogICogICAgICBkcmV3QGNvbG9yYWRvLmVkdQogICogICAgICArMSAoMzAzKSA2NjYtNTgzNgogICoKLSAqIERJU1RSSUJVVElPTiBSRUxFQVNFIDYuIAotICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKICAqCiAgKiBOQ1IgNTM4MCBGYW1pbHkKQEAgLTI3OSw3ICsyNzcsNyBAQAogICoJU2V0IHVwIHRoZSBpbnRlcm5hbCBmaWVsZHMgaW4gdGhlIFNDU0kgY29tbWFuZC4KICAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGluaXRpYWxpemVfU0NwKFNjc2lfQ21uZCAqIGNtZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0aWFsaXplX1NDcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJLyogCiAJICogSW5pdGlhbGl6ZSB0aGUgU2NzaSBQb2ludGVyIGZpZWxkIHNvIHRoYXQgYWxsIG9mIHRoZSBjb21tYW5kcyBpbiB0aGUgCkBAIC01NzQsMTIgKzU3MiwxMiBAQAogCWludCB0cnlpbmdfaXJxcywgaSwgbWFzazsKIAlOQ1I1MzgwX3NldHVwKGluc3RhbmNlKTsKIAotCWZvciAodHJ5aW5nX2lycXMgPSBpID0gMCwgbWFzayA9IDE7IGkgPCAxNjsgKytpLCBtYXNrIDw8PSAxKQorCWZvciAodHJ5aW5nX2lycXMgPSAwLCBpID0gMSwgbWFzayA9IDI7IGkgPCAxNjsgKytpLCBtYXNrIDw8PSAxKQogCQlpZiAoKG1hc2sgJiBwb3NzaWJsZSkgJiYgKHJlcXVlc3RfaXJxKGksICZwcm9iZV9pbnRyLCAwLCAiTkNSLXByb2JlIiwgTlVMTCkgPT0gMCkpCiAJCQl0cnlpbmdfaXJxcyB8PSBtYXNrOwogCiAJdGltZW91dCA9IGppZmZpZXMgKyAoMjUwICogSFogLyAxMDAwKTsKLQlwcm9iZV9pcnEgPSBTQ1NJX0lSUV9OT05FOworCXByb2JlX2lycSA9IE5PX0lSUTsKIAogCS8qCiAJICogQSBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkIHdoZW5ldmVyIEJTWSA9IGZhbHNlLCBTRUwgPSB0cnVlCkBAIC01OTYsMTMgKzU5NCwxMyBAQAogCU5DUjUzODBfd3JpdGUoT1VUUFVUX0RBVEFfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7CiAJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9EQVRBIHwgSUNSX0FTU0VSVF9TRUwpOwogCi0Jd2hpbGUgKHByb2JlX2lycSA9PSBTQ1NJX0lSUV9OT05FICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQorCXdoaWxlIChwcm9iZV9pcnEgPT0gTk9fSVJRICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKIAkKIAlOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCAwKTsKIAlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwogCi0JZm9yIChpID0gMCwgbWFzayA9IDE7IGkgPCAxNjsgKytpLCBtYXNrIDw8PSAxKQorCWZvciAoaSA9IDEsIG1hc2sgPSAyOyBpIDwgMTY7ICsraSwgbWFzayA8PD0gMSkKIAkJaWYgKHRyeWluZ19pcnFzICYgbWFzaykKIAkJCWZyZWVfaXJxKGksIE5VTEwpOwogCkBAIC02MTAsNTAgKzYwOCw3MCBAQAogfQogCiAvKioKLSAqCU5DUjU4MzgwX3ByaW50X29wdGlvbnMJLQlzaG93IG9wdGlvbnMKLSAqCUBpbnN0YW5jZTogdW51c2VkIGZvciBub3cKKyAqCU5DUjU4MzgwX2luZm8gLSByZXBvcnQgZHJpdmVyIGFuZCBob3N0IGluZm9ybWF0aW9uCisgKglAaW5zdGFuY2U6IHJlbGV2YW50IHNjc2kgaG9zdCBpbnN0YW5jZQogICoKLSAqCUNhbGxlZCBieSBwcm9iZSBjb2RlIGluZGljYXRpbmcgdGhlIE5DUjUzODAgZHJpdmVyIG9wdGlvbnMgdGhhdCAKLSAqCXdlcmUgc2VsZWN0ZWQuIEF0IHNvbWUgcG9pbnQgdGhpcyB3aWxsIHN3aXRjaCB0byBydW50aW1lIG9wdGlvbnMKLSAqCXJlYWQgZnJvbSB0aGUgYWRhcHRlciBpbiBxdWVzdGlvbgorICoJRm9yIHVzZSBhcyB0aGUgaG9zdCB0ZW1wbGF0ZSBpbmZvKCkgaGFuZGxlci4KICAqCiAgKglMb2Nrczogbm9uZQogICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZAotTkNSNTM4MF9wcmludF9vcHRpb25zKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorc3RhdGljIGNvbnN0IGNoYXIgKk5DUjUzODBfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKLQlwcmludGsoIiBnZW5lcmljIG9wdGlvbnMiCi0jaWZkZWYgQVVUT1BST0JFX0lSUQotCSAgICAgICAiIEFVVE9QUk9CRV9JUlEiCisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwlyZXR1cm4gaG9zdGRhdGEtPmluZm87Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKKworCXNucHJpbnRmKGhvc3RkYXRhLT5pbmZvLCBzaXplb2YoaG9zdGRhdGEtPmluZm8pLAorCSAgICAgICAgICIlcywgaW9fcG9ydCAweCVseCwgbl9pb19wb3J0ICVkLCAiCisJICAgICAgICAgImJhc2UgMHglbHgsIGlycSAlZCwgIgorCSAgICAgICAgICJjYW5fcXVldWUgJWQsIGNtZF9wZXJfbHVuICVkLCAiCisJICAgICAgICAgInNnX3RhYmxlc2l6ZSAlZCwgdGhpc19pZCAlZCwgIgorCSAgICAgICAgICJmbGFncyB7ICVzJXMlc30sICIKKyNpZiBkZWZpbmVkKFVTTEVFUF9QT0xMKSAmJiBkZWZpbmVkKFVTTEVFUF9XQUlUTE9ORykKKwkgICAgICAgICAiVVNMRUVQX1BPTEwgJWQsIFVTTEVFUF9XQUlUTE9ORyAlZCwgIgogI2VuZGlmCi0jaWZkZWYgQVVUT1NFTlNFCi0JICAgICAgICIgQVVUT1NFTlNFIgorCSAgICAgICAgICJvcHRpb25zIHsgJXN9ICIsCisJICAgICAgICAgaW5zdGFuY2UtPmhvc3R0LT5uYW1lLCBpbnN0YW5jZS0+aW9fcG9ydCwgaW5zdGFuY2UtPm5faW9fcG9ydCwKKwkgICAgICAgICBpbnN0YW5jZS0+YmFzZSwgaW5zdGFuY2UtPmlycSwKKwkgICAgICAgICBpbnN0YW5jZS0+Y2FuX3F1ZXVlLCBpbnN0YW5jZS0+Y21kX3Blcl9sdW4sCisJICAgICAgICAgaW5zdGFuY2UtPnNnX3RhYmxlc2l6ZSwgaW5zdGFuY2UtPnRoaXNfaWQsCisJICAgICAgICAgaG9zdGRhdGEtPmZsYWdzICYgRkxBR19OQ1I1M0M0MDAgICAgID8gIk5DUjUzQzQwMCAiICAgICA6ICIiLAorCSAgICAgICAgIGhvc3RkYXRhLT5mbGFncyAmIEZMQUdfRFRDMzE4MUUgICAgICA/ICJEVEMzMTgxRSAiICAgICAgOiAiIiwKKwkgICAgICAgICBob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX05PX1BTRVVET19ETUEgPyAiTk9fUFNFVURPX0RNQSAiIDogIiIsCisjaWYgZGVmaW5lZChVU0xFRVBfUE9MTCkgJiYgZGVmaW5lZChVU0xFRVBfV0FJVExPTkcpCisJICAgICAgICAgVVNMRUVQX1BPTEwsIFVTTEVFUF9XQUlUTE9ORywKKyNlbmRpZgorI2lmZGVmIEFVVE9QUk9CRV9JUlEKKwkgICAgICAgICAiQVVUT1BST0JFX0lSUSAiCiAjZW5kaWYKICNpZmRlZiBESUZGRVJFTlRJQUwKLQkgICAgICAgIiBESUZGRVJFTlRJQUwiCisJICAgICAgICAgIkRJRkZFUkVOVElBTCAiCiAjZW5kaWYKICNpZmRlZiBSRUFMX0RNQQotCSAgICAgICAiIFJFQUwgRE1BIgorCSAgICAgICAgICJSRUFMX0RNQSAiCiAjZW5kaWYKICNpZmRlZiBSRUFMX0RNQV9QT0xMCi0JICAgICAgICIgUkVBTCBETUEgUE9MTCIKKwkgICAgICAgICAiUkVBTF9ETUFfUE9MTCAiCiAjZW5kaWYKICNpZmRlZiBQQVJJVFkKLQkgICAgICAgIiBQQVJJVFkiCisJICAgICAgICAgIlBBUklUWSAiCiAjZW5kaWYKICNpZmRlZiBQU0VVRE9fRE1BCi0JICAgICAgICIgUFNFVURPIERNQSIKKwkgICAgICAgICAiUFNFVURPX0RNQSAiCiAjZW5kaWYKICNpZmRlZiBVTlNBRkUKLQkgICAgICAgIiBVTlNBRkUgIgorCSAgICAgICAgICJVTlNBRkUgIgogI2VuZGlmCi0JICAgICk7Ci0JcHJpbnRrKCIgVVNMRUVQLCBVU0xFRVBfUE9MTD0lZCBVU0xFRVBfU0xFRVA9JWQiLCBVU0xFRVBfUE9MTCwgVVNMRUVQX1NMRUVQKTsKLQlwcmludGsoIiBnZW5lcmljIHJlbGVhc2U9JWQiLCBOQ1I1MzgwX1BVQkxJQ19SRUxFQVNFKTsKLQlpZiAoKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKSBpbnN0YW5jZS0+aG9zdGRhdGEpLT5mbGFncyAmIEZMQUdfTkNSNTNDNDAwKSB7Ci0JCXByaW50aygiIG5jcjUzYzQwMCByZWxlYXNlPSVkIiwgTkNSNTNDNDAwX1BVQkxJQ19SRUxFQVNFKTsKLQl9CisjaWZkZWYgTkNSNTNDNDAwCisJICAgICAgICAgIk5DUjUzQzQwMCAiCisjZW5kaWYKKwkgICAgICAgICAiIik7CiB9CiAKIC8qKgpAQCAtNjcyLDYgKzY5MCw3IEBACiAJTkNSNTM4MF9kcHJpbnRfcGhhc2UoTkRFQlVHX0FOWSwgaW5zdGFuY2UpOwogfQogCisjaWZkZWYgUFNFVURPX0RNQQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiAvcHJvYy9zY3NpL1tkdGMgcGFzMTYgdDEyOCBnZW5lcmljXS9bMC1BU0NfTlVNX0JPQVJEX1NVUFBPUlRFRF0KQEAgLTY4OSwxOSArNzA4LDE4IEBACiBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIE5DUjUzODBfd3JpdGVfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKIAljaGFyICpidWZmZXIsIGludCBsZW5ndGgpCiB7Ci0jaWZkZWYgRFRDX1BVQkxJQ19SRUxFQVNFCi0JZHRjX3dtYXhpID0gZHRjX21heGkgPSAwOwotI2VuZGlmCi0jaWZkZWYgUEFTMTZfUFVCTElDX1JFTEVBU0UKLQlwYXNfd21heGkgPSBwYXNfbWF4aSA9IDA7Ci0jZW5kaWYKLQlyZXR1cm4gKC1FTk9TWVMpOwkvKiBDdXJyZW50bHkgdGhpcyBpcyBhIG5vLW9wICovCisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwlob3N0ZGF0YS0+c3Bpbl9tYXhfciA9IDA7CisJaG9zdGRhdGEtPnNwaW5fbWF4X3cgPSAwOworCXJldHVybiAwOwogfQorI2VuZGlmCiAKICN1bmRlZiBTUFJJTlRGCiAjZGVmaW5lIFNQUklOVEYoYXJncy4uLikgc2VxX3ByaW50ZihtLCAjIyBhcmdzKQogc3RhdGljCi12b2lkIGxwcmludF9TY3NpX0NtbmQoU2NzaV9DbW5kICogY21kLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwordm9pZCBscHJpbnRfU2NzaV9DbW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IHNlcV9maWxlICptKTsKIHN0YXRpYwogdm9pZCBscHJpbnRfY29tbWFuZCh1bnNpZ25lZCBjaGFyICpjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSk7CiBzdGF0aWMKQEAgLTcxMSw1NiArNzI5LDMxIEBACiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCVNjc2lfQ21uZCAqcHRyOworCXN0cnVjdCBzY3NpX2NtbmQgKnB0cjsKIAogCWhvc3RkYXRhID0gKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopIGluc3RhbmNlLT5ob3N0ZGF0YTsKIAotCVNQUklOVEYoIk5DUjUzODAgY29yZSByZWxlYXNlPSVkLiAgICIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwotCWlmICgoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopIGluc3RhbmNlLT5ob3N0ZGF0YSktPmZsYWdzICYgRkxBR19OQ1I1M0M0MDApCi0JCVNQUklOVEYoIm5jcjUzYzQwMCByZWxlYXNlPSVkLiAgIiwgTkNSNTNDNDAwX1BVQkxJQ19SRUxFQVNFKTsKLSNpZmRlZiBEVENfUFVCTElDX1JFTEVBU0UKLQlTUFJJTlRGKCJEVEMgMzE4MC8zMjgwIHJlbGVhc2UgJWQiLCBEVENfUFVCTElDX1JFTEVBU0UpOwotI2VuZGlmCi0jaWZkZWYgVDEyOF9QVUJMSUNfUkVMRUFTRQotCVNQUklOVEYoIlQxMjggcmVsZWFzZSAlZCIsIFQxMjhfUFVCTElDX1JFTEVBU0UpOwotI2VuZGlmCi0jaWZkZWYgR0VORVJJQ19OQ1I1MzgwX1BVQkxJQ19SRUxFQVNFCi0JU1BSSU5URigiR2VuZXJpYzUzODAgcmVsZWFzZSAlZCIsIEdFTkVSSUNfTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0jZW5kaWYKLSNpZmRlZiBQQVMxNl9QVUJMSUNfUkVMRUFTRQotCVNQUklOVEYoIlBBUzE2IHJlbGVhc2U9JWQiLCBQQVMxNl9QVUJMSUNfUkVMRUFTRSk7Ci0jZW5kaWYKLQotCVNQUklOVEYoIlxuQmFzZSBBZGRyOiAweCUwNWxYICAgICIsIChsb25nKSBpbnN0YW5jZS0+YmFzZSk7Ci0JU1BSSU5URigiaW9fcG9ydDogJTA0eCAgICAgICIsIChpbnQpIGluc3RhbmNlLT5pb19wb3J0KTsKLQlpZiAoaW5zdGFuY2UtPmlycSA9PSBTQ1NJX0lSUV9OT05FKQotCQlTUFJJTlRGKCJJUlE6IE5vbmUuXG4iKTsKLQllbHNlCi0JCVNQUklOVEYoIklSUTogJWQuXG4iLCBpbnN0YW5jZS0+aXJxKTsKLQotI2lmZGVmIERUQ19QVUJMSUNfUkVMRUFTRQotCVNQUklOVEYoIkhpZ2h3YXRlciBJL08gYnVzeV9zcGluX2NvdW50cyAtLSB3cml0ZTogJWQgIHJlYWQ6ICVkXG4iLCBkdGNfd21heGksIGR0Y19tYXhpKTsKLSNlbmRpZgotI2lmZGVmIFBBUzE2X1BVQkxJQ19SRUxFQVNFCi0JU1BSSU5URigiSGlnaHdhdGVyIEkvTyBidXN5X3NwaW5fY291bnRzIC0tIHdyaXRlOiAlZCAgcmVhZDogJWRcbiIsIHBhc193bWF4aSwgcGFzX21heGkpOworI2lmZGVmIFBTRVVET19ETUEKKwlTUFJJTlRGKCJIaWdod2F0ZXIgSS9PIGJ1c3kgc3BpbiBjb3VudHM6IHdyaXRlICVkLCByZWFkICVkXG4iLAorCSAgICAgICAgaG9zdGRhdGEtPnNwaW5fbWF4X3csIGhvc3RkYXRhLT5zcGluX21heF9yKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnEoaW5zdGFuY2UtPmhvc3RfbG9jayk7CiAJaWYgKCFob3N0ZGF0YS0+Y29ubmVjdGVkKQogCQlTUFJJTlRGKCJzY3NpJWQ6IG5vIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCWVsc2UKLQkJbHByaW50X1Njc2lfQ21uZCgoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQsIG0pOworCQlscHJpbnRfU2NzaV9DbW5kKChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQsIG0pOwogCVNQUklOVEYoInNjc2klZDogaXNzdWVfcXVldWVcbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IChTY3NpX0NtbmQgKikgcHRyLT5ob3N0X3NjcmliYmxlKQorCWZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHB0ci0+aG9zdF9zY3JpYmJsZSkKIAkJbHByaW50X1Njc2lfQ21uZChwdHIsIG0pOwogCiAJU1BSSU5URigic2NzaSVkOiBkaXNjb25uZWN0ZWRfcXVldWVcbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOyBwdHIgPSAoU2NzaV9DbW5kICopIHB0ci0+aG9zdF9zY3JpYmJsZSkKKwlmb3IgKHB0ciA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsgcHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgcHRyLT5ob3N0X3NjcmliYmxlKQogCQlscHJpbnRfU2NzaV9DbW5kKHB0ciwgbSk7CiAJc3Bpbl91bmxvY2tfaXJxKGluc3RhbmNlLT5ob3N0X2xvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBscHJpbnRfU2NzaV9DbW5kKFNjc2lfQ21uZCAqIGNtZCwgc3RydWN0IHNlcV9maWxlICptKQorc3RhdGljIHZvaWQgbHByaW50X1Njc2lfQ21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlTUFJJTlRGKCJzY3NpJWQgOiBkZXN0aW5hdGlvbiB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLCBjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKIAlTUFJJTlRGKCIgICAgICAgIGNvbW1hbmQgPSAiKTsKQEAgLTgzNiwxOCArODI5LDYgQEAKIAkKIAlJTklUX0RFTEFZRURfV09SSygmaG9zdGRhdGEtPmNvcm91dGluZSwgTkNSNTM4MF9tYWluKTsKIAkKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JZm9yIChpID0gMDsgaSA8IDg7ICsraSkgewotCQlob3N0ZGF0YS0+dGltZV9yZWFkW2ldID0gMDsKLQkJaG9zdGRhdGEtPnRpbWVfd3JpdGVbaV0gPSAwOwotCQlob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtpXSA9IDA7Ci0JCWhvc3RkYXRhLT5ieXRlc193cml0ZVtpXSA9IDA7Ci0JfQotCWhvc3RkYXRhLT50aW1lYmFzZSA9IDA7Ci0JaG9zdGRhdGEtPnBlbmRpbmd3ID0gMDsKLQlob3N0ZGF0YS0+cGVuZGluZ3IgPSAwOwotI2VuZGlmCi0KIAkvKiBUaGUgQ0hFQ0sgY29kZSBzZWVtcyB0byBicmVhayB0aGUgNTNDNDAwLiBXaWxsIGNoZWNrIGl0IGxhdGVyIG1heWJlICovCiAJaWYgKGZsYWdzICYgRkxBR19OQ1I1M0M0MDApCiAJCWhvc3RkYXRhLT5mbGFncyA9IEZMQUdfSEFTX0xBU1RfQllURV9TRU5UIHwgZmxhZ3M7CkBAIC04NTcsMTEgKzgzOCw3IEBACiAJaG9zdGRhdGEtPmhvc3QgPSBpbnN0YW5jZTsKIAlob3N0ZGF0YS0+dGltZV9leHBpcmVzID0gMDsKIAotI2lmbmRlZiBBVVRPU0VOU0UKLQlpZiAoKGluc3RhbmNlLT5jbWRfcGVyX2x1biA+IDEpIHx8IGluc3RhbmNlLT5jYW5fcXVldWUgPiAxKQotCQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogV0FSTklORyA6IHN1cHBvcnQgZm9yIG11bHRpcGxlIG91dHN0YW5kaW5nIGNvbW1hbmRzIGVuYWJsZWRcbiIgIiAgICAgICAgIHdpdGhvdXQgQVVUT1NFTlNFIG9wdGlvbiwgY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbnMgbWF5XG4iCi0JCSAgICAJICAgIiAgICAgICAgIGJlIGluY29ycmVjdGx5IGNsZWFyZWQuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7Ci0jZW5kaWYJCQkJLyogZGVmIEFVVE9TRU5TRSAqLworCXByZXBhcmVfaW5mbyhpbnN0YW5jZSk7CiAKIAlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwogCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UpOwpAQCAtOTM1LDExICs5MTIsMTEgQEAKICAqCUxvY2tzOiBob3N0IGxvY2sgdGFrZW4gYnkgY2FsbGVyCiAgKi8KIAotc3RhdGljIGludCBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmRfbGNrKFNjc2lfQ21uZCAqIGNtZCwgdm9pZCAoKmRvbmUpIChTY3NpX0NtbmQgKikpCitzdGF0aWMgaW50IE5DUjUzODBfcXVldWVfY29tbWFuZF9sY2soc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgaW5zdGFuY2UtPmhvc3RkYXRhOwotCVNjc2lfQ21uZCAqdG1wOworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcDsKIAogI2lmIChOREVCVUcgJiBOREVCVUdfTk9fV1JJVEUpCiAJc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKQEAgLTk1MiwyNSArOTI5LDYgQEAKIAl9CiAjZW5kaWYJCQkJLyogKE5ERUJVRyAmIE5ERUJVR19OT19XUklURSkgKi8KIAotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQlzd2l0Y2ggKGNtZC0+Y21uZFswXSkgewotCQljYXNlIFdSSVRFOgotCQljYXNlIFdSSVRFXzY6Ci0JCWNhc2UgV1JJVEVfMTA6Ci0JCQlob3N0ZGF0YS0+dGltZV93cml0ZVtjbWQtPmRldmljZS0+aWRdIC09IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJCWhvc3RkYXRhLT5ieXRlc193cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOwotCQkJaG9zdGRhdGEtPnBlbmRpbmd3Kys7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUFEOgotCQljYXNlIFJFQURfNjoKLQkJY2FzZSBSRUFEXzEwOgotCQkJaG9zdGRhdGEtPnRpbWVfcmVhZFtjbWQtPmRldmljZS0+aWRdIC09IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJCWhvc3RkYXRhLT5ieXRlc19yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ci0JCQlob3N0ZGF0YS0+cGVuZGluZ3IrKzsKLQkJCWJyZWFrOwotCX0KLSNlbmRpZgotCiAJLyogCiAJICogV2UgdXNlIHRoZSBob3N0X3NjcmliYmxlIGZpZWxkIGFzIGEgcG9pbnRlciB0byB0aGUgbmV4dCBjb21tYW5kICAKIAkgKiBpbiBhIHF1ZXVlIApAQCAtOTkyLDcgKzk1MCw3IEBACiAJCWNtZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsKIAkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gY21kOwogCX0gZWxzZSB7Ci0JCWZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWU7IHRtcC0+aG9zdF9zY3JpYmJsZTsgdG1wID0gKFNjc2lfQ21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpOworCQlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgdG1wLT5ob3N0X3NjcmliYmxlOyB0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpOwogCQlMSVNUKGNtZCwgdG1wKTsKIAkJdG1wLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikgY21kOwogCX0KQEAgLTEwMjMsNyArOTgxLDcgQEAKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IE5DUjUzODBfaG9zdGRhdGEsIGNvcm91dGluZS53b3JrKTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGhvc3RkYXRhLT5ob3N0OwotCVNjc2lfQ21uZCAqdG1wLCAqcHJldjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAsICpwcmV2OwogCWludCBkb25lOwogCQogCXNwaW5fbG9ja19pcnEoaW5zdGFuY2UtPmhvc3RfbG9jayk7CkBAIC0xMDM2LDcgKzk5NCw3IEBACiAJCQkgKiBTZWFyY2ggdGhyb3VnaCB0aGUgaXNzdWVfcXVldWUgZm9yIGEgY29tbWFuZCBkZXN0aW5lZAogCQkJICogZm9yIGEgdGFyZ2V0IHRoYXQncyBub3QgYnVzeS4KIAkJCSAqLwotCQkJZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7IHRtcDsgcHJldiA9IHRtcCwgdG1wID0gKFNjc2lfQ21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpIAorCQkJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWUsIHByZXYgPSBOVUxMOyB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKIAkJCXsKIAkJCQlpZiAocHJldiAhPSB0bXApCiAJCQkJICAgIGRwcmludGsoTkRFQlVHX0xJU1RTLCAiTUFJTiB0bXA9JXAgICB0YXJnZXQ9JWQgICBidXN5PSVkIGx1bj0lbGx1XG4iLCB0bXAsIHRtcC0+ZGV2aWNlLT5pZCwgaG9zdGRhdGEtPmJ1c3lbdG1wLT5kZXZpY2UtPmlkXSwgdG1wLT5kZXZpY2UtPmx1bik7CkBAIC0xMDQ4LDcgKzEwMDYsNyBAQAogCQkJCQkJcHJldi0+aG9zdF9zY3JpYmJsZSA9IHRtcC0+aG9zdF9zY3JpYmJsZTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCVJFTU9WRSgtMSwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLCB0bXAsIHRtcC0+aG9zdF9zY3JpYmJsZSk7Ci0JCQkJCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKKwkJCQkJCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKIAkJCQkJfQogCQkJCQl0bXAtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCkBAIC0xMDczLDE0ICsxMDMxLDE0IEBACiAJCQkJCWhvc3RkYXRhLT5zZWxlY3RpbmcgPSBOVUxMOwogCQkJCQkvKiBSdkM6IGhhdmUgdG8gcHJlc2V0IHRoaXMgdG8gaW5kaWNhdGUgYSBuZXcgY29tbWFuZCBpcyBiZWluZyBwZXJmb3JtZWQgKi8KIAotCQkJCQlpZiAoIU5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCB0bXAsCi0JCQkJCQkJICAgIC8qIAotCQkJCQkJCSAgICAgKiBSRVFVRVNUIFNFTlNFIGNvbW1hbmRzIGFyZSBpc3N1ZWQgd2l0aG91dCB0YWdnZWQKLQkJCQkJCQkgICAgICogcXVldWVpbmcsIGV2ZW4gb24gU0NTSS1JSSBkZXZpY2VzIGJlY2F1c2UgdGhlIAotCQkJCQkJCSAgICAgKiBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9uIGV4aXN0cyBmb3IgdGhlIAotCQkJCQkJCSAgICAgKiBlbnRpcmUgdW5pdC4KLQkJCQkJCQkgICAgICovCi0JCQkJCQkJICAgICh0bXAtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgPyBUQUdfTk9ORSA6IFRBR19ORVhUKSkgeworCQkJCQkvKgorCQkJCQkgKiBSRVFVRVNUIFNFTlNFIGNvbW1hbmRzIGFyZSBpc3N1ZWQgd2l0aG91dCB0YWdnZWQKKwkJCQkJICogcXVldWVpbmcsIGV2ZW4gb24gU0NTSS1JSSBkZXZpY2VzIGJlY2F1c2UgdGhlCisJCQkJCSAqIGNvbnRpbmdlbnQgYWxsZWdpYW5jZSBjb25kaXRpb24gZXhpc3RzIGZvciB0aGUKKwkJCQkJICogZW50aXJlIHVuaXQuCisJCQkJCSAqLworCisJCQkJCWlmICghTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIHRtcCkpIHsKIAkJCQkJCWJyZWFrOwogCQkJCQl9IGVsc2UgewogCQkJCQkJTElTVCh0bXAsIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSk7CkBAIC0xMDk1LDkgKzEwNTMsOSBAQAogCQkJLyogZXhpdGVkIGxvY2tlZCAqLwogCQl9CS8qIGlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgKi8KIAkJaWYgKGhvc3RkYXRhLT5zZWxlY3RpbmcpIHsKLQkJCXRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPnNlbGVjdGluZzsKKwkJCXRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5zZWxlY3Rpbmc7CiAJCQkvKiBTZWxlY3Rpb24gd2lsbCBkcm9wIGFuZCByZXRha2UgdGhlIGxvY2sgKi8KLQkJCWlmICghTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIHRtcCwgKHRtcC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSA/IFRBR19OT05FIDogVEFHX05FWFQpKSB7CisJCQlpZiAoIU5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCB0bXApKSB7CiAJCQkJLyogT2sgPz8gKi8KIAkJCX0gZWxzZSB7CiAJCQkJLyogUnZDOiBkZXZpY2UgZmFpbGVkLCBzbyB3ZSB3YWl0IGEgbG9uZyB0aW1lCkBAIC0xMjE2LDQ3ICsxMTc0LDE2IEBACiAKICNlbmRpZiAKIAotLyoqCi0gKgljb2xsZWN0X3N0YXRzCQktCWNvbGxlY3Qgc3RhdHMgb24gYSBzY3NpIGNvbW1hbmQKLSAqCUBob3N0ZGF0YTogYWRhcHRlciAKLSAqCUBjbWQ6IGNvbW1hbmQgYmVpbmcgaXNzdWVkCi0gKgotICoJVXBkYXRlIHRoZSBzdGF0aXN0aWNhbCBkYXRhIGJ5IHBhcnNpbmcgdGhlIGNvbW1hbmQgaW4gcXVlc3Rpb24KLSAqLwotIAotc3RhdGljIHZvaWQgY29sbGVjdF9zdGF0cyhzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEsIFNjc2lfQ21uZCAqIGNtZCkgCi17Ci0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCXN3aXRjaCAoY21kLT5jbW5kWzBdKSB7Ci0JY2FzZSBXUklURToKLQljYXNlIFdSSVRFXzY6Ci0JY2FzZSBXUklURV8xMDoKLQkJaG9zdGRhdGEtPnRpbWVfd3JpdGVbc2NtZF9pZChjbWQpXSArPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCWhvc3RkYXRhLT5wZW5kaW5ndy0tOwotCQlicmVhazsKLQljYXNlIFJFQUQ6Ci0JY2FzZSBSRUFEXzY6Ci0JY2FzZSBSRUFEXzEwOgotCQlob3N0ZGF0YS0+dGltZV9yZWFkW3NjbWRfaWQoY21kKV0gKz0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQlob3N0ZGF0YS0+cGVuZGluZ3ItLTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi19Ci0KLQogLyogCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3NlbGVjdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIFNjc2lfQ21uZCAqY21kLCAKLSAqICAgICAgaW50IHRhZyk7CisgKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKICAqCiAgKiBQdXJwb3NlIDogZXN0YWJsaXNoZXMgSV9UX0wgb3IgSV9UX0xfUSBuZXh1cyBmb3IgbmV3IG9yIGV4aXN0aW5nIGNvbW1hbmQsCiAgKiAgICAgIGluY2x1ZGluZyBBUkJJVFJBVElPTiwgU0VMRUNUSU9OLCBhbmQgaW5pdGlhbCBtZXNzYWdlIG91dCBmb3IgCiAgKiAgICAgIElERU5USUZZIGFuZCBxdWV1ZSBtZXNzYWdlcy4gCiAgKgogICogSW5wdXRzIDogaW5zdGFuY2UgLSBpbnN0YW50aWF0aW9uIG9mIHRoZSA1MzgwIGRyaXZlciBvbiB3aGljaCB0aGlzIAotICogICAgICB0YXJnZXQgbGl2ZXMsIGNtZCAtIFNDU0kgY29tbWFuZCB0byBleGVjdXRlLCB0YWcgLSBzZXQgdG8gVEFHX05FWFQgZm9yIAotICogICAgICBuZXcgdGFnLCBUQUdfTk9ORSBmb3IgdW50YWdnZWQgcXVldWVpbmcsIG90aGVyd2lzZSBzZXQgdG8gdGhlIHRhZyBmb3IgCi0gKiAgICAgIHRoZSBjb21tYW5kIHRoYXQgaXMgcHJlc2VudGx5IGNvbm5lY3RlZC4KKyAqICAgICAgdGFyZ2V0IGxpdmVzLCBjbWQgLSBTQ1NJIGNvbW1hbmQgdG8gZXhlY3V0ZS4KICAqIAogICogUmV0dXJucyA6IC0xIGlmIHNlbGVjdGlvbiBjb3VsZCBub3QgZXhlY3V0ZSBmb3Igc29tZSByZWFzb24sCiAgKiAgICAgIDAgaWYgc2VsZWN0aW9uIHN1Y2NlZWRlZCBvciBmYWlsZWQgYmVjYXVzZSB0aGUgdGFyZ2V0IApAQCAtMTI3OCw3ICsxMjA1LDcgQEAKICAqCUxvY2tzOiBjYWxsZXIgaG9sZHMgaG9zdGRhdGEgbG9jayBpbiBJUlEgbW9kZQogICovCiAgCi1zdGF0aWMgaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBTY3NpX0NtbmQgKiBjbWQsIGludCB0YWcpIAorc3RhdGljIGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKSBpbnN0YW5jZS0+aG9zdGRhdGE7CkBAIC0xNDc2LDcgKzE0MDMsNiBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWNtZC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7Ci0JCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7CiAJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKIAkJZHByaW50ayhOREVCVUdfU0VMRUNUSU9OLCAic2NzaSVkIDogdGFyZ2V0IGRpZCBub3QgcmVzcG9uZCB3aXRoaW4gMjUwbXNcbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKQEAgLTE1MTMsNyArMTQzOSw3IEBACiAJfQogCiAJZHByaW50ayhOREVCVUdfU0VMRUNUSU9OLCAic2NzaSVkIDogdGFyZ2V0ICVkIHNlbGVjdGVkLCBnb2luZyBpbnRvIE1FU1NBR0UgT1VUIHBoYXNlLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8sIGNtZC0+ZGV2aWNlLT5pZCk7Ci0JdG1wWzBdID0gSURFTlRJRlkoKChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpID8gMCA6IDEpLCBjbWQtPmRldmljZS0+bHVuKTsKKwl0bXBbMF0gPSBJREVOVElGWSgoKGluc3RhbmNlLT5pcnEgPT0gTk9fSVJRKSA/IDAgOiAxKSwgY21kLT5kZXZpY2UtPmx1bik7CiAKIAlsZW4gPSAxOwogCWNtZC0+dGFnID0gMDsKQEAgLTIwODYsNyArMjAxMiw3IEBACiAjZW5kaWYKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwogCXVuc2lnbmVkIGNoYXIgcGhhc2UsIHRtcCwgZXh0ZW5kZWRfbXNnWzEwXSwgb2xkX3BoYXNlID0gMHhmZjsKLQlTY3NpX0NtbmQgKmNtZCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZDsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkOwogCS8qIFJ2Qzogd2UgbmVlZCB0byBzZXQgdGhlIGVuZCBvZiB0aGUgcG9sbGluZyB0aW1lICovCiAJdW5zaWduZWQgbG9uZyBwb2xsX3RpbWUgPSBqaWZmaWVzICsgVVNMRUVQX1BPTEw7CiAKQEAgLTIyMjgsNyArMjE1NCw2IEBACiAJCQkJCWNtZC0+bmV4dF9saW5rLT50YWcgPSBjbWQtPnRhZzsKIAkJCQkJY21kLT5yZXN1bHQgPSBjbWQtPlNDcC5TdGF0dXMgfCAoY21kLT5TQ3AuTWVzc2FnZSA8PCA4KTsKIAkJCQkJZHByaW50ayhOREVCVUdfTElOS0VELCAic2NzaSVkIDogdGFyZ2V0ICVkIGx1biAlbGx1IGxpbmtlZCByZXF1ZXN0IGRvbmUsIGNhbGxpbmcgc2NzaV9kb25lKCkuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQkJCQkJY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKIAkJCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJCQkJY21kID0gaG9zdGRhdGEtPmNvbm5lY3RlZDsKIAkJCQkJYnJlYWs7CkBAIC0yMjYzLDcgKzIxODgsNiBAQAogCQkJCQllbHNlIGlmIChzdGF0dXNfYnl0ZShjbWQtPlNDcC5TdGF0dXMpICE9IEdPT0QpCiAJCQkJCQljbWQtPnJlc3VsdCA9IChjbWQtPnJlc3VsdCAmIDB4MDBmZmZmKSB8IChESURfRVJST1IgPDwgMTYpOwogCi0jaWZkZWYgQVVUT1NFTlNFCiAJCQkJCWlmICgoY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpICYmCiAJCQkJCQlob3N0ZGF0YS0+c2VzLmNtZF9sZW4pIHsKIAkJCQkJCXNjc2lfZWhfcmVzdG9yZV9jbW5kKGNtZCwgJmhvc3RkYXRhLT5zZXMpOwpAQCAtMjI3OCwxMiArMjIwMiw5IEBACiAJCQkJCQlMSVNUKGNtZCwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKTsKIAkJCQkJCWNtZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopCiAJCQkJCQkgICAgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwotCQkJCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gKFNjc2lfQ21uZCAqKSBjbWQ7CisJCQkJCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjbWQ7CiAJCQkJCQlkcHJpbnRrKE5ERUJVR19RVUVVRVMsICJzY3NpJWQgOiBSRVFVRVNUIFNFTlNFIGFkZGVkIHRvIGhlYWQgb2YgaXNzdWUgcXVldWVcbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLQkJCQkJfSBlbHNlCi0jZW5kaWYJCQkJLyogZGVmIEFVVE9TRU5TRSAqLwotCQkJCQl7Ci0JCQkJCQljb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOworCQkJCQl9IGVsc2UgewogCQkJCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJCQkJfQogCkBAIC0yNDMwLDcgKzIzNTEsNiBAQAogCQkJCQlob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCAoY21kLT5kZXZpY2UtPmx1biAmIDB4RkYpKTsKIAkJCQkJaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7CiAJCQkJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQkJCQljb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwogCQkJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJCQlOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7CiAJCQkJCXJldHVybjsKQEAgLTI0NzksNyArMjM5OSw3IEBACiAgKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9yZXNlbGVjdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiAgKgogICogUHVycG9zZSA6IGRvZXMgcmVzZWxlY3Rpb24sIGluaXRpYWxpemluZyB0aGUgaW5zdGFuY2UtPmNvbm5lY3RlZCAKLSAqICAgICAgZmllbGQgdG8gcG9pbnQgdG8gdGhlIFNjc2lfQ21uZCBmb3Igd2hpY2ggdGhlIElfVF9MIG9yIElfVF9MX1EgCisgKiAgICAgIGZpZWxkIHRvIHBvaW50IHRvIHRoZSBzY3NpX2NtbmQgZm9yIHdoaWNoIHRoZSBJX1RfTCBvciBJX1RfTF9RCiAgKiAgICAgIG5leHVzIGhhcyBiZWVuIHJlZXN0YWJsaXNoZWQsCiAgKiAgICAgIAogICogSW5wdXRzIDogaW5zdGFuY2UgLSB0aGlzIGluc3RhbmNlIG9mIHRoZSBOQ1I1MzgwLgpAQCAtMjQ5Niw3ICsyNDE2LDcgQEAKIAlpbnQgbGVuOwogCXVuc2lnbmVkIGNoYXIgbXNnWzNdOwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0JU2NzaV9DbW5kICp0bXAgPSBOVUxMLCAqcHJldjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAgPSBOVUxMLCAqcHJldjsKIAlpbnQgYWJvcnQgPSAwOwogCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCkBAIC0yNTYyLDcgKzI0ODIsNyBAQAogCQkgKi8KIAogCi0JCWZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCBwcmV2ID0gTlVMTDsgdG1wOyBwcmV2ID0gdG1wLCB0bXAgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKKwkJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCBwcmV2ID0gTlVMTDsgdG1wOyBwcmV2ID0gdG1wLCB0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpCiAJCQlpZiAoKHRhcmdldF9tYXNrID09ICgxIDw8IHRtcC0+ZGV2aWNlLT5pZCkpICYmIChsdW4gPT0gKHU4KXRtcC0+ZGV2aWNlLT5sdW4pCiAJCQkgICAgKSB7CiAJCQkJaWYgKHByZXYpIHsKQEAgLTI1NzAsNyArMjQ5MCw3IEBACiAJCQkJCXByZXYtPmhvc3Rfc2NyaWJibGUgPSB0bXAtPmhvc3Rfc2NyaWJibGU7CiAJCQkJfSBlbHNlIHsKIAkJCQkJUkVNT1ZFKC0xLCBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCB0bXAsIHRtcC0+aG9zdF9zY3JpYmJsZSk7Ci0JCQkJCWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKKwkJCQkJaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKIAkJCQl9CiAJCQkJdG1wLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkJCQlicmVhazsKQEAgLTI2MDEsNyArMjUyMSw3IEBACiAgKgogICogSW5wdXRzIDogaW5zdGFuY2UgLSB0aGlzIGluc3RhbmNlIG9mIHRoZSBOQ1I1MzgwLgogICoKLSAqIFJldHVybnMgOiBwb2ludGVyIHRvIHRoZSBTY3NpX0NtbmQgc3RydWN0dXJlIGZvciB3aGljaCB0aGUgSV9UX0wKKyAqIFJldHVybnMgOiBwb2ludGVyIHRvIHRoZSBzY3NpX2NtbmQgc3RydWN0dXJlIGZvciB3aGljaCB0aGUgSV9UX0wKICAqICAgICAgbmV4dXMgaGFzIGJlZW4gcmVlc3RhYmxpc2hlZCwgb24gZmFpbHVyZSBOVUxMIGlzIHJldHVybmVkLgogICovCiAKQEAgLTI2NDMsMzIgKzI1NjMsMzIgQEAKICNlbmRpZgkJCQkvKiBkZWYgUkVBTF9ETUEgKi8KIAogLyoKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYWJvcnQgKFNjc2lfQ21uZCAqY21kKQorICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9hYm9ydCAoc3RydWN0IHNjc2lfY21uZCAqY21kKQogICoKICAqIFB1cnBvc2UgOiBhYm9ydCBhIGNvbW1hbmQKICAqCi0gKiBJbnB1dHMgOiBjbWQgLSB0aGUgU2NzaV9DbW5kIHRvIGFib3J0LCBjb2RlIC0gY29kZSB0byBzZXQgdGhlIAotICogICAgICBob3N0IGJ5dGUgb2YgdGhlIHJlc3VsdCBmaWVsZCB0bywgaWYgemVybyBESURfQUJPUlRFRCBpcyAKKyAqIElucHV0cyA6IGNtZCAtIHRoZSBzY3NpX2NtbmQgdG8gYWJvcnQsIGNvZGUgLSBjb2RlIHRvIHNldCB0aGUKKyAqICAgICAgaG9zdCBieXRlIG9mIHRoZSByZXN1bHQgZmllbGQgdG8sIGlmIHplcm8gRElEX0FCT1JURUQgaXMKICAqICAgICAgdXNlZC4KICAqCi0gKiBSZXR1cm5zIDogMCAtIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKiBSZXR1cm5zIDogU1VDQ0VTUyAtIHN1Y2Nlc3MsIEZBSUxFRCBvbiBmYWlsdXJlLgogICoKLSAqCVhYWCAtIHRoZXJlIGlzIG5vIHdheSB0byBhYm9ydCB0aGUgY29tbWFuZCB0aGF0IGlzIGN1cnJlbnRseSAKLSAqCWNvbm5lY3RlZCwgeW91IGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBJZiB0aGlzIGlzIAorICoJWFhYIC0gdGhlcmUgaXMgbm8gd2F5IHRvIGFib3J0IHRoZSBjb21tYW5kIHRoYXQgaXMgY3VycmVudGx5CisgKgljb25uZWN0ZWQsIHlvdSBoYXZlIHRvIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLiAgSWYgdGhpcyBpcwogICoJYSBwcm9ibGVtLCB3ZSBjb3VsZCBpbXBsZW1lbnQgbG9uZ2ptcCgpIC8gc2V0am1wKCksIHNldGptcCgpCiAgKgljYWxsZWQgd2hlcmUgdGhlIGxvb3Agc3RhcnRlZCBpbiBOQ1I1MzgwX21haW4oKS4KICAqCiAgKiBMb2NrczogaG9zdCBsb2NrIHRha2VuIGJ5IGNhbGxlcgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9hYm9ydChTY3NpX0NtbmQgKiBjbWQpIHsKK3N0YXRpYyBpbnQgTkNSNTM4MF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CiAJTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCk7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgaW5zdGFuY2UtPmhvc3RkYXRhOwotCVNjc2lfQ21uZCAqdG1wLCAqKnByZXY7Ci0JCi0JcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogYWJvcnRpbmcgY29tbWFuZFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCXNjc2lfcHJpbnRfY29tbWFuZChjbWQpOworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcCwgKipwcmV2OworCisJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBjbWQsICJhYm9ydGluZyBjb21tYW5kXG4iKTsKIAogCU5DUjUzODBfcHJpbnRfc3RhdHVzKGluc3RhbmNlKTsKIApAQCAtMjcwNCw3ICsyNjI0LDcgQEAKICAqIGFib3J0ZWQgZmxhZyBhbmQgZ2V0IGJhY2sgaW50byBvdXIgbWFpbiBsb29wLgogICovCiAKLQkJcmV0dXJuIDA7CisJCXJldHVybiBTVUNDRVNTOwogCX0KICNlbmRpZgogCkBAIC0yNzE0LDEwICsyNjM0LDEwIEBACiAgKi8KICAKIAlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZCA6IGFib3J0IGdvaW5nIGludG8gbG9vcC5cbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLQlmb3IgKHByZXYgPSAoU2NzaV9DbW5kICoqKSAmIChob3N0ZGF0YS0+aXNzdWVfcXVldWUpLCB0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgdG1wOyBwcmV2ID0gKFNjc2lfQ21uZCAqKikgJiAodG1wLT5ob3N0X3NjcmliYmxlKSwgdG1wID0gKFNjc2lfQ21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpCisJZm9yIChwcmV2ID0gKHN0cnVjdCBzY3NpX2NtbmQgKiopICYoaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKSwgdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyB0bXA7IHByZXYgPSAoc3RydWN0IHNjc2lfY21uZCAqKikgJih0bXAtPmhvc3Rfc2NyaWJibGUpLCB0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpCiAJCWlmIChjbWQgPT0gdG1wKSB7CiAJCQlSRU1PVkUoNSwgKnByZXYsIHRtcCwgdG1wLT5ob3N0X3NjcmliYmxlKTsKLQkJCSgqcHJldikgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKKwkJCSgqcHJldikgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGU7CiAJCQl0bXAtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCQkJdG1wLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CiAJCQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZCA6IGFib3J0IHJlbW92ZWQgY29tbWFuZCBmcm9tIGlzc3VlIHF1ZXVlLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwpAQCAtMjc3MCwyMCArMjY5MCwyMCBAQAogICogaXQgZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLgogICovCiAKLQlmb3IgKHRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgdG1wOyB0bXAgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKKwlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHRtcDsgdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlKQogCQlpZiAoY21kID09IHRtcCkgewogCQkJZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQgOiBhYm9ydGluZyBkaXNjb25uZWN0ZWQgY29tbWFuZC5cbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKIAotCQkJaWYgKE5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCBjbWQsIChpbnQpIGNtZC0+dGFnKSkKKwkJCWlmIChOQ1I1MzgwX3NlbGVjdChpbnN0YW5jZSwgY21kKSkKIAkJCQlyZXR1cm4gRkFJTEVEOwogCQkJZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQgOiBuZXh1cyByZWVzdGFibGlzaGVkLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCiAJCQlkb19hYm9ydChpbnN0YW5jZSk7CiAKLQkJCWZvciAocHJldiA9IChTY3NpX0NtbmQgKiopICYgKGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpLCB0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHRtcDsgcHJldiA9IChTY3NpX0NtbmQgKiopICYgKHRtcC0+aG9zdF9zY3JpYmJsZSksIHRtcCA9IChTY3NpX0NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlKQorCQkJZm9yIChwcmV2ID0gKHN0cnVjdCBzY3NpX2NtbmQgKiopICYoaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSksIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHRtcDsgcHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSAmKHRtcC0+aG9zdF9zY3JpYmJsZSksIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKIAkJCQlpZiAoY21kID09IHRtcCkgewogCQkJCQlSRU1PVkUoNSwgKnByZXYsIHRtcCwgdG1wLT5ob3N0X3NjcmliYmxlKTsKLQkJCQkJKnByZXYgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKKwkJCQkJKnByZXYgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGU7CiAJCQkJCXRtcC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJCQkJCXRtcC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQkJCQl0bXAtPnNjc2lfZG9uZSh0bXApOwpAQCAtMjgwNiw3ICsyNzI2LDcgQEAKIAogCiAvKiAKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYnVzX3Jlc2V0IChTY3NpX0NtbmQgKmNtZCkKKyAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYnVzX3Jlc2V0IChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiAgKiAKICAqIFB1cnBvc2UgOiByZXNldCB0aGUgU0NTSSBidXMuCiAgKgpAQCAtMjgxNSw3ICsyNzM1LDcgQEAKICAqIExvY2tzOiBob3N0IGxvY2sgdGFrZW4gYnkgY2FsbGVyCiAgKi8KIAotc3RhdGljIGludCBOQ1I1MzgwX2J1c19yZXNldChTY3NpX0NtbmQgKiBjbWQpCitzdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5oIGIvZHJpdmVycy9zY3NpL05DUjUzODAuaAppbmRleCBjNzlkZGZhLi4xNjIxMTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5oCisrKyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmgKQEAgLTcsOCArNyw2IEBACiAgKiAJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNjY2LTU4MzYKICAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSA3Ci0gKgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0IAogICoKICAqIE5DUiA1MzgwIEZhbWlseQpAQCAtMjUsMTMgKzIzLDcgQEAKICNkZWZpbmUgTkNSNTM4MF9ICiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotI2lmZGVmIEFVVE9TRU5TRQogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSA3Ci0jZGVmaW5lIE5DUjUzQzQwMF9QVUJMSUNfUkVMRUFTRSAyCiAKICNkZWZpbmUgTkRFQlVHX0FSQklUUkFUSU9OCTB4MQogI2RlZmluZSBOREVCVUdfQVVUT1NFTlNFCTB4MgpAQCAtMjI0LDMzICsyMTYsNDQgQEAKICNkZWZpbmUgRElTQ09OTkVDVF9MT05HCQkyCiAKIC8qIAotICogVGhlc2UgYXJlICJzcGVjaWFsIiB2YWx1ZXMgZm9yIHRoZSB0YWcgcGFyYW1ldGVyIHBhc3NlZCB0byBOQ1I1MzgwX3NlbGVjdC4KKyAqICJTcGVjaWFsIiB2YWx1ZSBmb3IgdGhlICh1bnNpZ25lZCBjaGFyKSBjb21tYW5kIHRhZywgdG8gaW5kaWNhdGUKKyAqIElfVF9MIG5leHVzIGluc3RlYWQgb2YgSV9UX0xfUS4KICAqLwogCi0jZGVmaW5lIFRBR19ORVhUCS0xCS8qIFVzZSBuZXh0IGZyZWUgdGFnICovCi0jZGVmaW5lIFRBR19OT05FCS0yCS8qIAotCQkJCSAqIEVzdGFibGlzaCBJX1RfTCBuZXh1cyBpbnN0ZWFkIG9mIElfVF9MX1EKLQkJCQkgKiBldmVuIG9uIFNDU0ktSUkgZGV2aWNlcy4KLQkJCQkgKi8KKyNkZWZpbmUgVEFHX05PTkUJMHhmZgogCiAvKgogICogVGhlc2UgYXJlICJzcGVjaWFsIiB2YWx1ZXMgZm9yIHRoZSBpcnEgYW5kIGRtYV9jaGFubmVsIGZpZWxkcyBvZiB0aGUgCiAgKiBTY3NpX0hvc3Qgc3RydWN0dXJlCiAgKi8KIAotI2RlZmluZSBTQ1NJX0lSUV9OT05FCTI1NQogI2RlZmluZSBETUFfTk9ORQkyNTUKICNkZWZpbmUgSVJRX0FVVE8JMjU0CiAjZGVmaW5lIERNQV9BVVRPCTI1NAogI2RlZmluZSBQT1JUX0FVVE8JMHhmZmZmCS8qIGF1dG9wcm9iZSBpbyBwb3J0IGZvciA1M2M0MDBhICovCiAKKyNpZm5kZWYgTk9fSVJRCisjZGVmaW5lIE5PX0lSUQkJMAorI2VuZGlmCisKICNkZWZpbmUgRkxBR19IQVNfTEFTVF9CWVRFX1NFTlQJCTEJLyogTkNSNTNjODEgb3IgYmV0dGVyICovCiAjZGVmaW5lIEZMQUdfQ0hFQ0tfTEFTVF9CWVRFX1NFTlQJMgkvKiBPbmx5IHRlc3Qgb25jZSAqLwogI2RlZmluZSBGTEFHX05DUjUzQzQwMAkJCTQJLyogTkNSNTNjNDAwICovCiAjZGVmaW5lIEZMQUdfTk9fUFNFVURPX0RNQQkJOAkvKiBJbmhpYml0IERNQSAqLwogI2RlZmluZSBGTEFHX0RUQzMxODFFCQkJMTYJLyogRFRDMzE4MUUgKi8KKyNkZWZpbmUgRkxBR19MQVRFX0RNQV9TRVRVUAkJMzIJLyogU2V0dXAgTkNSIGJlZm9yZSBETUEgSC9XICovCisjZGVmaW5lIEZMQUdfVEFHR0VEX1FVRVVJTkcJCTY0CS8qIGFzIFgzVDkuMiBzcGVsbGVkIGl0ICovCiAKICNpZm5kZWYgQVNNCisKKyNpZmRlZiBTVVBQT1JUX1RBR1MKK3N0cnVjdCB0YWdfYWxsb2MgeworCURFQ0xBUkVfQklUTUFQKGFsbG9jYXRlZCwgTUFYX1RBR1MpOworCWludCBucl9hbGxvY2F0ZWQ7CisJaW50IHF1ZXVlX3NpemU7Cit9OworI2VuZGlmCisKIHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhIHsKIAlOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkczsJCS8qIGltcGxlbWVudGF0aW9uIHNwZWNpZmljICovCiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsJCQkvKiBIb3N0IGJhY2twb2ludGVyICovCkBAIC0yNjMsOSArMjY2LDkgQEAKIAl2b2xhdGlsZSBpbnQgZG1hX2xlbjsJCQkvKiByZXF1ZXN0ZWQgbGVuZ3RoIG9mIERNQSAqLwogI2VuZGlmCiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBsYXN0X21lc3NhZ2U7CS8qIGxhc3QgbWVzc2FnZSBPVVQgKi8KLQl2b2xhdGlsZSBTY3NpX0NtbmQgKmNvbm5lY3RlZDsJCS8qIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZCAqLwotCXZvbGF0aWxlIFNjc2lfQ21uZCAqaXNzdWVfcXVldWU7CS8qIHdhaXRpbmcgdG8gYmUgaXNzdWVkICovCi0Jdm9sYXRpbGUgU2NzaV9DbW5kICpkaXNjb25uZWN0ZWRfcXVldWU7CS8qIHdhaXRpbmcgZm9yIHJlY29ubmVjdCAqLworCXZvbGF0aWxlIHN0cnVjdCBzY3NpX2NtbmQgKmNvbm5lY3RlZDsJLyogY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kICovCisJdm9sYXRpbGUgc3RydWN0IHNjc2lfY21uZCAqaXNzdWVfcXVldWU7CS8qIHdhaXRpbmcgdG8gYmUgaXNzdWVkICovCisJdm9sYXRpbGUgc3RydWN0IHNjc2lfY21uZCAqZGlzY29ubmVjdGVkX3F1ZXVlOwkvKiB3YWl0aW5nIGZvciByZWNvbm5lY3QgKi8KIAl2b2xhdGlsZSBpbnQgcmVzdGFydF9zZWxlY3Q7CQkvKiB3ZSBoYXZlIGRpc2Nvbm5lY3RlZCwKIAkJCQkJCSAgIHVzZWQgdG8gcmVzdGFydCAKIAkJCQkJCSAgIE5DUjUzODBfc2VsZWN0KCkgKi8KQEAgLTI3MywxOSArMjc2LDIxIEBACiAJaW50IGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdGltZV9leHBpcmVzOwkJLyogaW4gamlmZmllcywgc2V0IHByaW9yIHRvIHNsZWVwaW5nICovCiAJaW50IHNlbGVjdF90aW1lOwkJCS8qIHRpbWVyIGluIHNlbGVjdCBmb3IgdGFyZ2V0IHJlc3BvbnNlICovCi0Jdm9sYXRpbGUgU2NzaV9DbW5kICpzZWxlY3Rpbmc7CisJdm9sYXRpbGUgc3RydWN0IHNjc2lfY21uZCAqc2VsZWN0aW5nOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgY29yb3V0aW5lOwkJLyogb3VyIGNvLXJvdXRpbmUgKi8KLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JdW5zaWduZWQgdGltZWJhc2U7CQkJLyogQmFzZSBmb3IgdGltZSBjYWxjcyAqLwotCWxvbmcgdGltZV9yZWFkWzhdOwkJCS8qIHRpbWUgdG8gZG8gcmVhZHMgKi8KLQlsb25nIHRpbWVfd3JpdGVbOF07CQkJLyogdGltZSB0byBkbyB3cml0ZXMgKi8KLQl1bnNpZ25lZCBsb25nIGJ5dGVzX3JlYWRbOF07CQkvKiBieXRlcyByZWFkICovCi0JdW5zaWduZWQgbG9uZyBieXRlc193cml0ZVs4XTsJCS8qIGJ5dGVzIHdyaXR0ZW4gKi8KLQl1bnNpZ25lZCBwZW5kaW5ncjsKLQl1bnNpZ25lZCBwZW5kaW5ndzsKLSNlbmRpZgotI2lmZGVmIEFVVE9TRU5TRQogCXN0cnVjdCBzY3NpX2VoX3NhdmUgc2VzOworCWNoYXIgaW5mb1syNTZdOworCWludCByZWFkX292ZXJydW5zOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgdG8gY3V0IGZyb20gYQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0cmFuc2ZlciB0byBoYW5kbGUgY2hpcCBvdmVycnVucyAqLworCWludCByZXRhaW5fZG1hX2ludHI7CisJc3RydWN0IHdvcmtfc3RydWN0IG1haW5fdGFzazsKKwl2b2xhdGlsZSBpbnQgbWFpbl9ydW5uaW5nOworI2lmZGVmIFNVUFBPUlRfVEFHUworCXN0cnVjdCB0YWdfYWxsb2MgVGFnQWxsb2NbOF1bOF07CS8qIDggdGFyZ2V0cyBhbmQgOCBMVU5zICovCisjZW5kaWYKKyNpZmRlZiBQU0VVRE9fRE1BCisJdW5zaWduZWQgc3Bpbl9tYXhfcjsKKwl1bnNpZ25lZCBzcGluX21heF93OwogI2VuZGlmCiB9OwogCkBAIC0yOTYsNyArMzAxLDggQEAKICNlbmRpZgogCiAjZGVmaW5lIGRwcmludGsoZmxnLCBmbXQsIC4uLikgXAotCWRvIHsgaWYgKChOREVCVUcpICYgKGZsZykpIHByX2RlYnVnKGZtdCwgIyMgX19WQV9BUkdTX18pOyB9IHdoaWxlICgwKQorCWRvIHsgaWYgKChOREVCVUcpICYgKGZsZykpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgZm10LCAjIyBfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApCiAKICNpZiBOREVCVUcKICNkZWZpbmUgTkNSNTM4MF9kcHJpbnQoZmxnLCBhcmcpIFwKQEAgLTMyMCwxNyArMzI2LDkgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBOQ1I1MzgwX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKICNlbmRpZgogc3RhdGljIHZvaWQgTkNSNTM4MF9tYWluKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBOQ1I1MzgwX3ByaW50X29wdGlvbnMoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpOwotc3RhdGljIGludCBOQ1I1MzgwX2Fib3J0KFNjc2lfQ21uZCAqIGNtZCk7Ci1zdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqIGNtZCk7Ci1zdGF0aWMgaW50IE5DUjUzODBfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIE5DUjUzODBfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqLAotCXN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIE5DUjUzODBfd3JpdGVfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKLQljaGFyICpidWZmZXIsIGludCBsZW5ndGgpOwotCitzdGF0aWMgY29uc3QgY2hhciAqTkNSNTM4MF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKTsKIHN0YXRpYyB2b2lkIE5DUjUzODBfcmVzZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpOwotc3RhdGljIGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgU2NzaV9DbW5kICogY21kLCBpbnQgdGFnKTsKK3N0YXRpYyBpbnQgTkNSNTM4MF9zZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiAjaWYgZGVmaW5lZChQU0VVRE9fRE1BKSB8fCBkZWZpbmVkKFJFQUxfRE1BKSB8fCBkZWZpbmVkKFJFQUxfRE1BX1BPTEwpCiBzdGF0aWMgaW50IE5DUjUzODBfdHJhbnNmZXJfZG1hKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCB1bnNpZ25lZCBjaGFyICpwaGFzZSwgaW50ICpjb3VudCwgdW5zaWduZWQgY2hhciAqKmRhdGEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCmluZGV4IDY4MTQzNGUuLmIzMmU3N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCkBAIC0yMTgxLDcgKzIxODEsNyBAQAogCQkJICAoZnNhX2Rldl9wdHJbY2lkXS5zZW5zZV9kYXRhLnNlbnNlX2tleSA9PQogCQkJICAgTk9UX1JFQURZKSkgewogCQkJCXN3aXRjaCAoc2NzaWNtZC0+Y21uZFswXSkgewotCQkJCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJCQkJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAkJCQkJaWYgKCEoZGV2LT5yYXdfaW9faW50ZXJmYWNlKSB8fAogCQkJCQkgICAgIShkZXYtPnJhd19pb182NCkgfHwKIAkJCQkJICAgICgoc2NzaWNtZC0+Y21uZFsxXSAmIDB4MWYpICE9IFNBSV9SRUFEX0NBUEFDSVRZXzE2KSkKQEAgLTIzMDksNyArMjMwOSw3IEBACiAJCXNjc2lfc2dfY29weV9mcm9tX2J1ZmZlcihzY3NpY21kLCAmaW5xX2RhdGEsIHNpemVvZihpbnFfZGF0YSkpOwogCQlyZXR1cm4gYWFjX2dldF9jb250YWluZXJfbmFtZShzY3NpY21kKTsKIAl9Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlpZiAoIShkZXYtPnJhd19pb19pbnRlcmZhY2UpIHx8CiAJCSAgICAhKGRldi0+cmF3X2lvXzY0KSB8fAogCQkgICAgKChzY3NpY21kLT5jbW5kWzFdICYgMHgxZikgIT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKaW5kZXggYTc1OWNiMi4uZmRjZGY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCkBAIC00NjIsOSArNDYyLDkgQEAKIAkJCWRlcHRoID0gMjU2OwogCQllbHNlIGlmIChkZXB0aCA8IDIpCiAJCQlkZXB0aCA9IDI7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBkZXB0aCk7CiAJfSBlbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIDEpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDc4LDEyICs0NzgsOCBAQAogICoJdG90YWwgY2FwYWNpdHkgYW5kIHRoZSBxdWV1ZSBkZXB0aCBzdXBwb3J0ZWQgYnkgdGhlIHRhcmdldCBkZXZpY2UuCiAgKi8KIAotc3RhdGljIGludCBhYWNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoLAotCQkJCSAgaW50IHJlYXNvbikKK3N0YXRpYyBpbnQgYWFjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKIHsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkICYmIChzZGV2LT50eXBlID09IFRZUEVfRElTSykgJiYKIAkgICAgKHNkZXZfY2hhbm5lbChzZGV2KSA9PSBDT05UQUlORVJfQ0hBTk5FTCkpIHsKIAkJc3RydWN0IHNjc2lfZGV2aWNlICogZGV2OwpAQCAtNTA0LDEwICs1MDAsMTAgQEAKIAkJCWRlcHRoID0gMjU2OwogCQllbHNlIGlmIChkZXB0aCA8IDIpCiAJCQlkZXB0aCA9IDI7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgZGVwdGgpOwotCX0gZWxzZQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCAxKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CisJCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBkZXB0aCk7CisJfQorCisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIDEpOwogfQogCiBzdGF0aWMgc3NpemVfdCBhYWNfc2hvd19yYWlkX2xldmVsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTU1NSw3ICs1NTEsNyBAQAogCQlBQUNfRFJJVkVSTkFNRSwKIAkJaG9zdC0+aG9zdF9ubywgc2Rldl9jaGFubmVsKGRldiksIHNkZXZfaWQoZGV2KSwgZGV2LT5sdW4pOwogCXN3aXRjaCAoY21kLT5jbW5kWzBdKSB7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlpZiAoIShhYWMtPnJhd19pb19pbnRlcmZhY2UpIHx8CiAJCSAgICAhKGFhYy0+cmF3X2lvXzY0KSB8fAogCQkgICAgKChjbWQtPmNtbmRbMV0gJiAweDFmKSAhPSBTQUlfUkVBRF9DQVBBQ0lUWV8xNikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCmluZGV4IDQzNzYxYzEuLjY3MTlhMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCkBAIC03NzA2LDcgKzc3MDYsNyBAQAogCQkJCWFzY19kdmMtPmNmZy0+Y2FuX3RhZ2dlZF9xbmcgfD0gdGlkX2JpdDsKIAkJCQlhc2NfZHZjLT51c2VfdGFnZ2VkX3FuZyB8PSB0aWRfYml0OwogCQkJfQotCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLAorCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgCiAJCQkJCQlhc2NfZHZjLT5tYXhfZHZjX3FuZ1tzZGV2LT5pZF0pOwogCQl9CiAJfSBlbHNlIHsKQEAgLTc3MTQsNyArNzcxNCw2IEBACiAJCQlhc2NfZHZjLT5jZmctPmNhbl90YWdnZWRfcW5nICY9IH50aWRfYml0OwogCQkJYXNjX2R2Yy0+dXNlX3RhZ2dlZF9xbmcgJj0gfnRpZF9iaXQ7CiAJCX0KLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOwogCX0KIAogCWlmICgoc2Rldi0+bHVuID09IDApICYmCkBAIC03ODQ4LDEyICs3ODQ3LDggQEAKIAkJfQogCX0KIAotCWlmICgoYWR2X2R2Yy0+dGFncW5nX2FibGUgJiB0aWRtYXNrKSAmJiBzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywKLQkJCQkJYWR2X2R2Yy0+bWF4X2R2Y19xbmcpOwotCX0gZWxzZSB7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9CisJaWYgKChhZHZfZHZjLT50YWdxbmdfYWJsZSAmIHRpZG1hc2spICYmIHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGFkdl9kdmMtPm1heF9kdmNfcW5nKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMgYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCmluZGV4IGU3N2I3MmYuLjJiOTYwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAgKgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIAorCiAgc2VlIERvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dCBmb3IgY29uZmlndXJhdGlvbiBkZXRhaWxzCiAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI3OSw0NSArMjc5LDExIEBACiAjZXJyb3IgZGVmaW5lIEFVVE9DT05GIG9yIFNFVFVQMAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0jZGVmaW5lIERFQlVHX0RFRkFVTFQgZGVidWdfZWgKLQotI2RlZmluZSBEUFJJTlRLKHdoZW4sbXNncy4uLikgXAotCWRvIHsgaWYoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmICh3aGVuKSkgcHJpbnRrKG1zZ3MpOyB9IHdoaWxlKDApCi0KLSNkZWZpbmUgRE9fTE9DSyhmbGFncykJXAotCWRvIHsgXAotCQlpZihzcGluX2lzX2xvY2tlZCgmUUxPQ0spKSB7IFwKLQkJCURQUklOVEsoZGVidWdfaW50ciwgREVCVUdfTEVBRCAiKCVzOiVkKSBhbHJlYWR5IGxvY2tlZCBhdCAlczolZFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgX19mdW5jX18sIF9fTElORV9fLCBRTE9DS0VSLCBRTE9DS0VSTCk7IFwKLQkJfSBcCi0JCURQUklOVEsoZGVidWdfbG9ja2luZywgREVCVUdfTEVBRCAiKCVzOiVkKSBsb2NraW5nXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZRTE9DSyxmbGFncyk7IFwKLQkJRFBSSU5USyhkZWJ1Z19sb2NraW5nLCBERUJVR19MRUFEICIoJXM6JWQpIGxvY2tlZFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgX19mdW5jX18sIF9fTElORV9fKTsgXAotCQlRTE9DS0VSPV9fZnVuY19fOyBcCi0JCVFMT0NLRVJMPV9fTElORV9fOyBcCi0JfSB3aGlsZSgwKQotCi0jZGVmaW5lIERPX1VOTE9DSyhmbGFncykJXAotCWRvIHsgXAotCQlEUFJJTlRLKGRlYnVnX2xvY2tpbmcsIERFQlVHX0xFQUQgIiglczolZCkgdW5sb2NraW5nIChsb2NrZWQgYXQgJXM6JWQpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBfX2Z1bmNfXywgX19MSU5FX18sIFFMT0NLRVIsIFFMT0NLRVJMKTsgXAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZRTE9DSyxmbGFncyk7IFwKLQkJRFBSSU5USyhkZWJ1Z19sb2NraW5nLCBERUJVR19MRUFEICIoJXM6JWQpIHVubG9ja2VkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCi0JCVFMT0NLRVI9Iihub3QgbG9ja2VkKSI7IFwKLQkJUUxPQ0tFUkw9MDsgXAotCX0gd2hpbGUoMCkKLQotI2Vsc2UKLSNkZWZpbmUgRFBSSU5USyh3aGVuLG1zZ3MuLi4pCiAjZGVmaW5lCURPX0xPQ0soZmxhZ3MpCQlzcGluX2xvY2tfaXJxc2F2ZSgmUUxPQ0ssZmxhZ3MpCiAjZGVmaW5lCURPX1VOTE9DSyhmbGFncykJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUUxPQ0ssZmxhZ3MpCi0jZW5kaWYKIAogI2RlZmluZSBMRUFECQkiKHNjc2klZDolZDolZCkgIgotI2RlZmluZSBXQVJOX0xFQUQJS0VSTl9XQVJOSU5HCUxFQUQKICNkZWZpbmUgSU5GT19MRUFECUtFUk5fSU5GTwlMRUFECi0jZGVmaW5lIE5PVEVfTEVBRAlLRVJOX05PVElDRQlMRUFECi0jZGVmaW5lIEVSUl9MRUFECUtFUk5fRVJSCUxFQUQKLSNkZWZpbmUgREVCVUdfTEVBRAlLRVJOX0RFQlVHCUxFQUQKICNkZWZpbmUgQ01ESU5GTyhjbWQpIFwKIAkJCShjbWQpID8gKChjbWQpLT5kZXZpY2UtPmhvc3QtPmhvc3Rfbm8pIDogLTEsIFwKICAgICAgICAgICAgICAgICAgICAgICAgIChjbWQpID8gKChjbWQpLT5kZXZpY2UtPmlkICYgMHgwZikgOiAtMSwgXApAQCAtMzQ1LDEwICszMTEsMTAgQEAKIAogZW51bSB7CiAJbm90X2lzc3VlZAk9IDB4MDAwMSwJLyogY29tbWFuZCBub3QgeWV0IGlzc3VlZCAqLwotCXNlbGVjdGluZwk9IDB4MDAwMiwgCS8qIHRhcmdldCBpcyBiZWVpbmcgc2VsZWN0ZWQgKi8KKwlzZWxlY3RpbmcJPSAweDAwMDIsCS8qIHRhcmdldCBpcyBiZWluZyBzZWxlY3RlZCAqLwogCWlkZW50aWZpZWQJPSAweDAwMDQsCS8qIElERU5USUZZIHdhcyBzZW50ICovCiAJZGlzY29ubmVjdGVkCT0gMHgwMDA4LAkvKiB0YXJnZXQgZGlzY29ubmVjdGVkICovCi0JY29tcGxldGVkCT0gMHgwMDEwLAkvKiB0YXJnZXQgc2VudCBDT01NQU5EIENPTVBMRVRFICovIAorCWNvbXBsZXRlZAk9IDB4MDAxMCwJLyogdGFyZ2V0IHNlbnQgQ09NTUFORCBDT01QTEVURSAqLwogCWFib3J0ZWQJCT0gMHgwMDIwLAkvKiBBQk9SVCB3YXMgc2VudCAqLwogCXJlc2V0dGVkCT0gMHgwMDQwLAkvKiBCVVMgREVWSUNFIFJFU0VUIHdhcyBzZW50ICovCiAJc3Bpb3JkeQkJPSAweDAwODAsCS8qIHdhaXRpbmcgZm9yIFNQSU9SRFkgdG8gcmFpc2UgKi8KQEAgLTM5Niw3ICszNjIsNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGV4dHRyYW5zLCBpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhleHR0cmFucywidXNlIGV4dGVuZGVkIHRyYW5zbGF0aW9uIik7CiAKLSNpZiAhZGVmaW5lZChBSEExNTJYX0RFQlVHKQogc3RhdGljIGludCBhaGExNTJ4W10gPSB7MCwgMTEsIDcsIDEsIDEsIDAsIERFTEFZX0RFRkFVTFQsIDB9OwogbW9kdWxlX3BhcmFtX2FycmF5KGFoYTE1MngsIGludCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFoYTE1MngsICJwYXJhbWV0ZXJzIGZvciBmaXJzdCBjb250cm9sbGVyIik7CkBAIC00MDQsMTkgKzM2OSw2IEBACiBzdGF0aWMgaW50IGFoYTE1MngxW10gPSB7MCwgMTEsIDcsIDEsIDEsIDAsIERFTEFZX0RFRkFVTFQsIDB9OwogbW9kdWxlX3BhcmFtX2FycmF5KGFoYTE1MngxLCBpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhhaGExNTJ4MSwgInBhcmFtZXRlcnMgZm9yIHNlY29uZCBjb250cm9sbGVyIik7Ci0jZWxzZQotc3RhdGljIGludCBkZWJ1Z1tdID0ge0RFQlVHX0RFRkFVTFQsIERFQlVHX0RFRkFVTFR9OwotbW9kdWxlX3BhcmFtX2FycmF5KGRlYnVnLCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImZsYWdzIGZvciBkcml2ZXIgZGVidWdnaW5nIik7Ci0KLXN0YXRpYyBpbnQgYWhhMTUyeFtdICAgPSB7MCwgMTEsIDcsIDEsIDEsIDEsIERFTEFZX0RFRkFVTFQsIDAsIERFQlVHX0RFRkFVTFR9OwotbW9kdWxlX3BhcmFtX2FycmF5KGFoYTE1MngsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFoYTE1MngsICJwYXJhbWV0ZXJzIGZvciBmaXJzdCBjb250cm9sbGVyIik7Ci0KLXN0YXRpYyBpbnQgYWhhMTUyeDFbXSAgPSB7MCwgMTEsIDcsIDEsIDEsIDEsIERFTEFZX0RFRkFVTFQsIDAsIERFQlVHX0RFRkFVTFR9OwotbW9kdWxlX3BhcmFtX2FycmF5KGFoYTE1MngxLCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhhaGExNTJ4MSwgInBhcmFtZXRlcnMgZm9yIHNlY29uZCBjb250cm9sbGVyIik7Ci0jZW5kaWYgLyogIWRlZmluZWQoQUhBMTUyWF9ERUJVRykgKi8KICNlbmRpZiAvKiBNT0RVTEUgKi8KIAogI2lmZGVmIF9fSVNBUE5QX18KQEAgLTQ0Niw3ICszOTgsNyBAQAogLyoKICAqIGludGVybmFsIHN0YXRlcyBvZiB0aGUgaG9zdAogICoKLSAqLyAKKyAqLwogZW51bSBhaGExNTJ4X3N0YXRlIHsKIAlpZGxlPTAsCiAJdW5rbm93biwKQEAgLTQ4NSwyNCArNDM3LDE2IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCQkvKiBob3N0IGxvY2sgKi8KIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQljb25zdCBjaGFyICpsb2NrZXI7Ci0JCS8qIHdoaWNoIGZ1bmN0aW9uIGhhcyB0aGUgbG9jayAqLwotCWludCBsb2NrZXJsOwkvKiB3aGVyZSBkaWQgaXQgZ2V0IGl0ICovCi0KLQlpbnQgZGVidWc7CS8qIGN1cnJlbnQgZGVidWdnaW5nIHNldHRpbmcgKi8KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChBSEExNTJYX1NUQVQpCi0JaW50ICAgICAgICAgICB0b3RhbF9jb21tYW5kczsKKwlpbnQJICAgICAgdG90YWxfY29tbWFuZHM7CiAJaW50CSAgICAgIGRpc2Nvbm5lY3Rpb25zOwogCWludAkgICAgICBidXNmcmVlX3dpdGhvdXRfYW55X2FjdGlvbjsKIAlpbnQJICAgICAgYnVzZnJlZV93aXRob3V0X29sZF9jb21tYW5kOwogCWludAkgICAgICBidXNmcmVlX3dpdGhvdXRfbmV3X2NvbW1hbmQ7CiAJaW50CSAgICAgIGJ1c2ZyZWVfd2l0aG91dF9kb25lX2NvbW1hbmQ7CiAJaW50CSAgICAgIGJ1c2ZyZWVfd2l0aF9jaGVja19jb25kaXRpb247Ci0JaW50ICAgICAgICAgICBjb3VudFttYXhzdGF0ZV07Ci0JaW50ICAgICAgICAgICBjb3VudF90cmFuc1ttYXhzdGF0ZV07CisJaW50CSAgICAgIGNvdW50W21heHN0YXRlXTsKKwlpbnQJICAgICAgY291bnRfdHJhbnNbbWF4c3RhdGVdOwogCXVuc2lnbmVkIGxvbmcgdGltZVttYXhzdGF0ZV07CiAjZW5kaWYKIApAQCAtNTE0LDcgKzQ1OCw3IEBACiAJaW50IGRlbGF5OwkJLyogcmVzZXQgb3V0IGRlbGF5ICovCiAJaW50IGV4dF90cmFuczsJCS8qIGV4dGVuZGVkIHRyYW5zbGF0aW9uIGVuYWJsZWQgKi8KIAotCWludCBzd2ludDsgCQkvKiBzb2Z0d2FyZS1pbnRlcnJ1cHQgd2FzIGZpcmVkIGR1cmluZyBkZXRlY3QoKSAqLworCWludCBzd2ludDsJCS8qIHNvZnR3YXJlLWludGVycnVwdCB3YXMgZmlyZWQgZHVyaW5nIGRldGVjdCgpICovCiAJaW50IHNlcnZpY2U7CQkvKiBiaCBuZWVkcyB0byBiZSBydW4gKi8KIAlpbnQgaW5faW50cjsJCS8qIGJoIGlzIHJ1bm5pbmcgKi8KIApAQCAtNTQzLDcgKzQ4Nyw3IEBACiAJdW5zaWduZWQgY2hhciBtc2dpWzI1Nl07CiAJCS8qIHJlY2VpdmVkIG1lc3NhZ2UgYnl0ZXMgKi8KIAotCWludCBtc2dvX2ksIG1zZ29fbGVuOwkKKwlpbnQgbXNnb19pLCBtc2dvX2xlbjsKIAkJLyogbnVtYmVyIG9mIHNlbnQgYnl0ZXMgYW5kIGxlbmd0aCBvZiBjdXJyZW50IG1lc3NhZ2VzICovCiAJdW5zaWduZWQgY2hhciBtc2dvWzI1Nl07CiAJCS8qIHBlbmRpbmcgbWVzc2FnZXMgKi8KQEAgLTY4OSw3ICs2MzMsNiBAQAogc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCwgaW50IGVycm9yKTsKIAogLyogZGlhZ25vc3RpY3MgKi8KLXN0YXRpYyB2b2lkIGRpc3BfcG9ydHMoc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpOwogc3RhdGljIHZvaWQgc2hvd19jb21tYW5kKFNjc2lfQ21uZCAqIHB0cik7CiBzdGF0aWMgdm9pZCBzaG93X3F1ZXVlcyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCk7CiBzdGF0aWMgdm9pZCBkaXNwX2VuaW50cihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCk7CkBAIC04MTIsMTAgKzc1NSw2IEBACiAJREVMQVkgICAgICAgPSBzZXR1cC0+ZGVsYXk7CiAJRVhUX1RSQU5TICAgPSBzZXR1cC0+ZXh0X3RyYW5zOwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCUhPU1REQVRBKHNocG50KS0+ZGVidWcgPSBzZXR1cC0+ZGVidWc7Ci0jZW5kaWYKLQogCVNFVFBPUlQoU0NTSUlELCBzZXR1cC0+c2NzaWlkIDw8IDQpOwogCXNocG50LT50aGlzX2lkID0gc2V0dXAtPnNjc2lpZDsKIApAQCAtOTQxLDMxICs4ODAsMjQgQEAKICAqIHNldHVwIGNvbnRyb2xsZXIgdG8gZ2VuZXJhdGUgaW50ZXJydXB0cyBkZXBlbmRpbmcKICAqIG9uIGN1cnJlbnQgc3RhdGUgKGxvY2sgaGFzIHRvIGJlIGFjcXVpcmVkKQogICoKLSAqLyAKKyAqLwogc3RhdGljIGludCBzZXR1cF9leHBlY3RlZF9pbnRlcnJ1cHRzKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewogCWlmKENVUlJFTlRfU0MpIHsKIAkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IDEgPDwgMTY7Ci0JCisKIAkJaWYoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgc2VsZWN0aW5nKSB7Ci0JCQlEUFJJTlRLKGRlYnVnX2ludHIsIERFQlVHX0xFQUQgImV4cGVjdGluZzogKHNlbGRvKSAoc2VsdGltbykgKHNlbGRpKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CiAJCQlTRVRQT1JUKFNTVEFUMSwgU0VMVE8pOwogCQkJU0VUUE9SVChTSU1PREUwLCBFTlNFTERPIHwgKERJU0NPTk5FQ1RFRF9TQyA/IEVOU0VMREkgOiAwKSk7CiAJCQlTRVRQT1JUKFNJTU9ERTEsIEVOU0VMVElNTyk7CiAJCX0gZWxzZSB7Ci0JCQlEUFJJTlRLKGRlYnVnX2ludHIsIERFQlVHX0xFQUQgImV4cGVjdGluZzogKHBoYXNlIGNoYW5nZSkgKGJ1c2ZyZWUpICVzXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBzcGlvcmR5ID8gIihzcGlvcmR5KSIgOiAiIik7CiAJCQlTRVRQT1JUKFNJTU9ERTAsIChDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBzcGlvcmR5KSA/IEVOU1BJT1JEWSA6IDApOwotCQkJU0VUUE9SVChTSU1PREUxLCBFTlBIQVNFTUlTIHwgRU5TQ1NJUlNUIHwgRU5TQ1NJUEVSUiB8IEVOQlVTRlJFRSk7IAorCQkJU0VUUE9SVChTSU1PREUxLCBFTlBIQVNFTUlTIHwgRU5TQ1NJUlNUIHwgRU5TQ1NJUEVSUiB8IEVOQlVTRlJFRSk7CiAJCX0KIAl9IGVsc2UgaWYoU1RBVEU9PXNlbGRpKSB7Ci0JCURQUklOVEsoZGVidWdfaW50ciwgREVCVUdfTEVBRCAiZXhwZWN0aW5nOiAocGhhc2UgY2hhbmdlKSAoaWRlbnRpZnkpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKIAkJU0VUUE9SVChTSU1PREUwLCAwKTsKLQkJU0VUUE9SVChTSU1PREUxLCBFTlBIQVNFTUlTIHwgRU5TQ1NJUlNUIHwgRU5TQ1NJUEVSUiB8IEVOQlVTRlJFRSk7IAorCQlTRVRQT1JUKFNJTU9ERTEsIEVOUEhBU0VNSVMgfCBFTlNDU0lSU1QgfCBFTlNDU0lQRVJSIHwgRU5CVVNGUkVFKTsKIAl9IGVsc2UgewotCQlEUFJJTlRLKGRlYnVnX2ludHIsIERFQlVHX0xFQUQgImV4cGVjdGluZzogJXMgJXNcbiIsCi0JCQlDTURJTkZPKENVUlJFTlRfU0MpLAotCQkJRElTQ09OTkVDVEVEX1NDID8gIihyZXNlbGVjdGlvbikiIDogIiIsCi0JCQlJU1NVRV9TQyA/ICIoYnVzZnJlZSkiIDogIiIpOwogCQlTRVRQT1JUKFNJTU9ERTAsIERJU0NPTk5FQ1RFRF9TQyA/IEVOU0VMREkgOiAwKTsKIAkJU0VUUE9SVChTSU1PREUxLCBFTlNDU0lSU1QgfCAoIChJU1NVRV9TQ3x8RE9ORV9TQykgPyBFTkJVU0ZSRUUgOiAwKSk7CiAJfQpAQCAtOTc3LDcgKzkwOSw3IEBACiB9CiAKIAotLyogCisvKgogICogIFF1ZXVlIGEgY29tbWFuZCBhbmQgc2V0dXAgaW50ZXJydXB0cyBmb3IgYSBmcmVlIGJ1cy4KICAqLwogc3RhdGljIGludCBhaGExNTJ4X2ludGVybmFsX3F1ZXVlKFNjc2lfQ21uZCAqU0NwbnQsIHN0cnVjdCBjb21wbGV0aW9uICpjb21wbGV0ZSwKQEAgLTk4NiwxNSArOTE4LDYgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCA9IFNDcG50LT5kZXZpY2UtPmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpZiAoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmIGRlYnVnX3F1ZXVlKSB7Ci0JCXByaW50ayhJTkZPX0xFQUQgInF1ZXVlOiAlcDsgY21kX2xlbj0lZCBwaWVjZXM9JWQgc2l6ZT0ldSBjbW5kPSIsCi0JCSAgICAgICBDTURJTkZPKFNDcG50KSwgU0NwbnQsIFNDcG50LT5jbWRfbGVuLAotCQkgICAgICAgc2NzaV9zZ19jb3VudChTQ3BudCksIHNjc2lfYnVmZmxlbihTQ3BudCkpOwotCQlfX3Njc2lfcHJpbnRfY29tbWFuZChTQ3BudC0+Y21uZCk7Ci0JfQotI2VuZGlmCi0KIAlTQ3BudC0+c2NzaV9kb25lCT0gZG9uZTsKIAlTQ3BudC0+U0NwLnBoYXNlCT0gbm90X2lzc3VlZCB8IHBoYXNlOwogCVNDcG50LT5TQ3AuU3RhdHVzCT0gMHgxOyAvKiBJbGVnYWwgc3RhdHVzIGJ5IFNDU0kgc3RhbmRhcmQgKi8KQEAgLTEwMDQsMTMgKzkyNywxMyBAQAogCiAJaWYoU0NwbnQtPlNDcC5waGFzZSAmIChyZXNldHRpbmd8Y2hlY2tfY29uZGl0aW9uKSkgewogCQlpZiAoIVNDcG50LT5ob3N0X3NjcmliYmxlIHx8IFNDU0VNKFNDcG50KSB8fCBTQ05FWFQoU0NwbnQpKSB7Ci0JCQlwcmludGsoRVJSX0xFQUQgImNhbm5vdCByZXVzZSBjb21tYW5kXG4iLCBDTURJTkZPKFNDcG50KSk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgU0NwbnQsICJjYW5ub3QgcmV1c2UgY29tbWFuZFxuIik7CiAJCQlyZXR1cm4gRkFJTEVEOwogCQl9CiAJfSBlbHNlIHsKIAkJU0NwbnQtPmhvc3Rfc2NyaWJibGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWhhMTUyeF9zY2RhdGEpLCBHRlBfQVRPTUlDKTsKIAkJaWYoIVNDcG50LT5ob3N0X3NjcmliYmxlKSB7Ci0JCQlwcmludGsoRVJSX0xFQUQgImFsbG9jYXRpb24gZmFpbGVkXG4iLCBDTURJTkZPKFNDcG50KSk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgU0NwbnQsICJhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gRkFJTEVEOwogCQl9CiAJfQpAQCAtMTA2NiwxNSArOTg5LDYgQEAKICAqLwogc3RhdGljIGludCBhaGExNTJ4X3F1ZXVlX2xjayhTY3NpX0NtbmQgKlNDcG50LCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKQogewotI2lmIDAKLQlpZigqU0NwbnQtPmNtbmQgPT0gUkVRVUVTVF9TRU5TRSkgewotCQlTQ3BudC0+cmVzdWx0ID0gMDsKLQkJZG9uZShTQ3BudCk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmCi0KIAlyZXR1cm4gYWhhMTUyeF9pbnRlcm5hbF9xdWV1ZShTQ3BudCwgTlVMTCwgMCwgZG9uZSk7CiB9CiAKQEAgLTEwODIsMTUgKzk5NiwxMCBAQAogCiAKIC8qCi0gKiAgCiAgKgogICovCiBzdGF0aWMgdm9pZCByZXNldF9kb25lKFNjc2lfQ21uZCAqU0NwbnQpCiB7Ci0jaWYgMAotCXN0cnVjdCBTY3NpX0hvc3QgKnNocG50ID0gU0NwbnQtPmhvc3Q7Ci0JRFBSSU5USyhkZWJ1Z19laCwgSU5GT19MRUFEICJyZXNldF9kb25lIGNhbGxlZFxuIiwgQ01ESU5GTyhTQ3BudCkpOwotI2VuZGlmCiAJaWYoU0NTRU0oU0NwbnQpKSB7CiAJCWNvbXBsZXRlKFNDU0VNKFNDcG50KSk7CiAJfSBlbHNlIHsKQEAgLTExMDgsMjAgKzEwMTcsMTEgQEAKIAlTY3NpX0NtbmQgKnB0cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19laCkgewotCQlwcmludGsoREVCVUdfTEVBRCAiYWJvcnQoJXApIiwgQ01ESU5GTyhTQ3BudCksIFNDcG50KTsKLQkJc2hvd19xdWV1ZXMoc2hwbnQpOwotCX0KLSNlbmRpZgotCiAJRE9fTE9DSyhmbGFncyk7CiAKIAlwdHI9cmVtb3ZlX1NDKCZJU1NVRV9TQywgU0NwbnQpOwogCiAJaWYocHRyKSB7Ci0JCURQUklOVEsoZGVidWdfZWgsIERFQlVHX0xFQUQgIm5vdCB5ZXQgaXNzdWVkIC0gU1VDQ0VTU1xuIiwgQ01ESU5GTyhTQ3BudCkpOwotCiAJCUhPU1REQVRBKHNocG50KS0+Y29tbWFuZHMtLTsKIAkJaWYgKCFIT1NUREFUQShzaHBudCktPmNvbW1hbmRzKQogCQkJU0VUUE9SVChQT1JUQSwgMCk7CkBAIC0xMTMxLDcgKzEwMzEsNyBAQAogCQlTQ3BudC0+aG9zdF9zY3JpYmJsZT1OVUxMOwogCiAJCXJldHVybiBTVUNDRVNTOwotCX0gCisJfQogCiAJRE9fVU5MT0NLKGZsYWdzKTsKIApAQCAtMTE0Miw3ICsxMDQyLDggQEAKIAkgKgogCSAqLwogCi0JcHJpbnRrKEVSUl9MRUFEICJjYW5ub3QgYWJvcnQgcnVubmluZyBvciBkaXNjb25uZWN0ZWQgY29tbWFuZFxuIiwgQ01ESU5GTyhTQ3BudCkpOworCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBTQ3BudCwKKwkJICAgICJjYW5ub3QgYWJvcnQgcnVubmluZyBvciBkaXNjb25uZWN0ZWQgY29tbWFuZFxuIik7CiAKIAlyZXR1cm4gRkFJTEVEOwogfQpAQCAtMTE2MCwxNSArMTA2MSw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19laCkgewotCQlwcmludGsoSU5GT19MRUFEICJhaGExNTJ4X2RldmljZV9yZXNldCglcCkiLCBDTURJTkZPKFNDcG50KSwgU0NwbnQpOwotCQlzaG93X3F1ZXVlcyhzaHBudCk7Ci0JfQotI2VuZGlmCi0KIAlpZihDVVJSRU5UX1NDPT1TQ3BudCkgewotCQlwcmludGsoRVJSX0xFQUQgImNhbm5vdCByZXNldCBjdXJyZW50IGRldmljZVxuIiwgQ01ESU5GTyhTQ3BudCkpOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgU0NwbnQsICJjYW5ub3QgcmVzZXQgY3VycmVudCBkZXZpY2VcbiIpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIApAQCAtMTIwOCw3ICsxMTAyLDcgQEAKIAkJfSBlbHNlIGlmKGRpc2Nvbm5lY3RlZCkgewogCQkJYXBwZW5kX1NDKCZESVNDT05ORUNURURfU0MsIFNDcG50KTsKIAkJfQotCQorCiAJCXJldCA9IEZBSUxFRDsKIAl9CiAKQEAgLTEyMjcsMTIgKzExMjEsMTIgQEAKIAkJaWYoU0NEQVRBKHB0cikpIHsKIAkJCW5leHQgPSBTQ05FWFQocHRyKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhERUJVR19MRUFEICJxdWV1ZSBjb3JydXB0ZWQgYXQgJXBcbiIsIENNRElORk8ocHRyKSwgcHRyKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fREVCVUcsIHB0ciwKKwkJCQkgICAgInF1ZXVlIGNvcnJ1cHRlZCBhdCAlcFxuIiwgcHRyKTsKIAkJCW5leHQgPSBOVUxMOwogCQl9CiAKIAkJaWYgKCFwdHItPmRldmljZS0+c29mdF9yZXNldCkgewotCQkJRFBSSU5USyhkZWJ1Z19laCwgREVCVUdfTEVBRCAiZGlzY29ubmVjdGVkIGNvbW1hbmQgJXAgcmVtb3ZlZFxuIiwgQ01ESU5GTyhwdHIpLCBwdHIpOwogCQkJcmVtb3ZlX1NDKFNDcywgcHRyKTsKIAkJCUhPU1REQVRBKHNocG50KS0+Y29tbWFuZHMtLTsKIAkJCWtmcmVlKHB0ci0+aG9zdF9zY3JpYmJsZSk7CkBAIC0xMjUzLDI1ICsxMTQ3LDE0IEBACiAKIAlET19MT0NLKGZsYWdzKTsKIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpZihIT1NUREFUQShzaHBudCktPmRlYnVnICYgZGVidWdfZWgpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogYnVzIHJlc2V0Iiwgc2hwbnQtPmhvc3Rfbm8pOwotCQlzaG93X3F1ZXVlcyhzaHBudCk7Ci0JfQotI2VuZGlmCi0KIAlmcmVlX2hhcmRfcmVzZXRfU0NzKHNocG50LCAmSVNTVUVfU0MpOwogCWZyZWVfaGFyZF9yZXNldF9TQ3Moc2hwbnQsICZESVNDT05ORUNURURfU0MpOwogCi0JRFBSSU5USyhkZWJ1Z19laCwgS0VSTl9ERUJVRyAic2NzaSVkOiByZXNldHRpbmcgYnVzXG4iLCBzaHBudC0+aG9zdF9ubyk7Ci0KIAlTRVRQT1JUKFNDU0lTRVEsIFNDU0lSU1RPKTsKIAltZGVsYXkoMjU2KTsKIAlTRVRQT1JUKFNDU0lTRVEsIDApOwogCW1kZWxheShERUxBWSk7CiAKLQlEUFJJTlRLKGRlYnVnX2VoLCBLRVJOX0RFQlVHICJzY3NpJWQ6IGJ1cyByZXNldHRlZFxuIiwgc2hwbnQtPmhvc3Rfbm8pOwotCiAJc2V0dXBfZXhwZWN0ZWRfaW50ZXJydXB0cyhzaHBudCk7CiAJaWYoSE9TVERBVEEoc2hwbnQpLT5jb21tYW5kcz09MCkKIAkJU0VUUE9SVChQT1JUQSwgMCk7CkBAIC0xMzMzLDExICsxMjE2LDcgQEAKICAqLwogaW50IGFoYTE1MnhfaG9zdF9yZXNldF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewotCURQUklOVEsoZGVidWdfZWgsIEtFUk5fREVCVUcgInNjc2klZDogaG9zdCByZXNldFxuIiwgc2hwbnQtPmhvc3Rfbm8pOwotCiAJYWhhMTUyeF9idXNfcmVzZXRfaG9zdChzaHBudCk7Ci0KLQlEUFJJTlRLKGRlYnVnX2VoLCBLRVJOX0RFQlVHICJzY3NpJWQ6IHJlc2V0dGluZyBwb3J0c1xuIiwgc2hwbnQtPmhvc3Rfbm8pOwogCXJlc2V0X3BvcnRzKHNocG50KTsKIAogCXJldHVybiBTVUNDRVNTOwpAQCAtMTM0NSw3ICsxMjI0LDcgQEAKIAogLyoKICAqIFJlc2V0IHRoZSBob3N0IChidXMgYW5kIGNvbnRyb2xsZXIpCi0gKiAKKyAqCiAgKi8KIHN0YXRpYyBpbnQgYWhhMTUyeF9ob3N0X3Jlc2V0KFNjc2lfQ21uZCAqU0NwbnQpCiB7CkBAIC0xNDExLDcgKzEyOTAsOSBAQAogewogCWlmIChDVVJSRU5UX1NDKSB7CiAJCWlmKERPTkVfU0MpCi0JCQlwcmludGsoRVJSX0xFQUQgInRoZXJlJ3MgYWxyZWFkeSBhIGNvbXBsZXRlZCBjb21tYW5kICVwIC0gd2lsbCBjYXVzZSBhYm9ydFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgRE9ORV9TQyk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCQkgICAgInRoZXJlJ3MgYWxyZWFkeSBhIGNvbXBsZXRlZCBjb21tYW5kICVwICIKKwkJCQkgICAgIi0gd2lsbCBjYXVzZSBhYm9ydFxuIiwgRE9ORV9TQyk7CiAKIAkJRE9ORV9TQyA9IENVUlJFTlRfU0M7CiAJCUNVUlJFTlRfU0MgPSBOVUxMOwpAQCAtMTQ2Niw3ICsxMzQ3LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYoIFRFU1RMTyhETUFTVEFULCBJTlRTVEFUKSApCi0JCXJldHVybiBJUlFfTk9ORTsJCisJCXJldHVybiBJUlFfTk9ORTsKIAogCS8qIG5vIG1vcmUgaW50ZXJydXB0cyBmcm9tIHRoZSBjb250cm9sbGVyLCB3aGlsZSB3ZSdyZSBidXN5LgogCSAgIElOVEVOIGlzIHJlc3RvcmVkIGJ5IHRoZSBCSCBoYW5kbGVyICovCkBAIC0xNTAxLDcgKzEzODIsNyBAQAogCVNFVFBPUlQoU1hGUkNUTDAsIENIMSk7CiAKIAlTRVRQT1JUKFNTVEFUMSwgQ0xSQlVTRlJFRSk7Ci0JCisKIAlpZihDVVJSRU5UX1NDKSB7CiAjaWYgZGVmaW5lZChBSEExNTJYX1NUQVQpCiAJCWFjdGlvbisrOwpAQCAtMTUxMywxOSArMTM5NCwxMyBAQAogCQkJZG9uZShzaHBudCwgKENVUlJFTlRfU0MtPlNDcC5TdGF0dXMgJiAweGZmKSB8ICgoQ1VSUkVOVF9TQy0+U0NwLk1lc3NhZ2UgJiAweGZmKSA8PCA4KSB8IChESURfT0sgPDwgMTYpKTsKIAogCQl9IGVsc2UgaWYoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgYWJvcnRlZCkgewotCQkJRFBSSU5USyhkZWJ1Z19laCwgREVCVUdfTEVBRCAiQUJPUlQgc2VudFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CiAJCQlkb25lKHNocG50LCAoQ1VSUkVOVF9TQy0+U0NwLlN0YXR1cyAmIDB4ZmYpIHwgKChDVVJSRU5UX1NDLT5TQ3AuTWVzc2FnZSAmIDB4ZmYpIDw8IDgpIHwgKERJRF9BQk9SVCA8PCAxNikpOwogCiAJCX0gZWxzZSBpZihDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiByZXNldHRlZCkgewotCQkJRFBSSU5USyhkZWJ1Z19laCwgREVCVUdfTEVBRCAiQlVTIERFVklDRSBSRVNFVCBzZW50XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKIAkJCWRvbmUoc2hwbnQsIChDVVJSRU5UX1NDLT5TQ3AuU3RhdHVzICYgMHhmZikgfCAoKENVUlJFTlRfU0MtPlNDcC5NZXNzYWdlICYgMHhmZikgPDwgOCkgfCAoRElEX1JFU0VUIDw8IDE2KSk7CiAKIAkJfSBlbHNlIGlmKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIGRpc2Nvbm5lY3RlZCkgewogCQkJLyogdGFyZ2V0IHNlbnQgRElTQ09OTkVDVCAqLwotCQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgInRhcmdldCBkaXNjb25uZWN0ZWQgYXQgJWQvJWRcbiIsCi0JCQkJQ01ESU5GTyhDVVJSRU5UX1NDKSwKLQkJCQlzY3NpX2dldF9yZXNpZChDVVJSRU5UX1NDKSwKLQkJCQlzY3NpX2J1ZmZsZW4oQ1VSUkVOVF9TQykpOwogI2lmIGRlZmluZWQoQUhBMTUyWF9TVEFUKQogCQkJSE9TVERBVEEoc2hwbnQpLT5kaXNjb25uZWN0aW9ucysrOwogI2VuZGlmCkBAIC0xNTUzLDEzICsxNDI4LDYgQEAKIAkJCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IEhPU1REQVRBKHNocG50KS0+ZG9uZV9TQzsKIAkJCXN0cnVjdCBhaGExNTJ4X3NjZGF0YSAqc2MgPSBTQ0RBVEEoY21kKTsKIAotI2lmIDAKLQkJCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19laCkgewotCQkJCXByaW50ayhFUlJfTEVBRCAicmVjZWl2ZWQgc2Vuc2U6ICIsIENNRElORk8oRE9ORV9TQykpOwotCQkJCXNjc2lfcHJpbnRfc2Vuc2UoImJoIiwgRE9ORV9TQyk7Ci0JCQl9Ci0jZW5kaWYKLQogCQkJc2NzaV9laF9yZXN0b3JlX2NtbmQoY21kLCAmc2MtPnNlcyk7CiAKIAkJCWNtZC0+U0NwLlN0YXR1cyA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKQEAgLTE1NzEsMTcgKzE0MzksMTEgQEAKICNpZiBkZWZpbmVkKEFIQTE1MlhfU1RBVCkKIAkJCUhPU1REQVRBKHNocG50KS0+YnVzZnJlZV93aXRoX2NoZWNrX2NvbmRpdGlvbisrOwogI2VuZGlmCi0jaWYgMAotCQkJRFBSSU5USyhkZWJ1Z19laCwgRVJSX0xFQUQgIkNIRUNLIENPTkRJVElPTiBmb3VuZFxuIiwgQ01ESU5GTyhET05FX1NDKSk7Ci0jZW5kaWYKIAogCQkJaWYoIShET05FX1NDLT5TQ3AucGhhc2UgJiBub3RfaXNzdWVkKSkgewogCQkJCXN0cnVjdCBhaGExNTJ4X3NjZGF0YSAqc2M7CiAJCQkJU2NzaV9DbW5kICpwdHIgPSBET05FX1NDOwogCQkJCURPTkVfU0M9TlVMTDsKLSNpZiAwCi0JCQkJRFBSSU5USyhkZWJ1Z19laCwgRVJSX0xFQUQgInJlcXVlc3Rpbmcgc2Vuc2VcbiIsIENNRElORk8ocHRyKSk7Ci0jZW5kaWYKIAogCQkJCXNjID0gU0NEQVRBKHB0cik7CiAJCQkJLyogSXQgd2FzIGFsbG9jYXRlZCBpbiBhaGExNTJ4X2ludGVybmFsX3F1ZXVlPyAqLwpAQCAtMTU5MSwxOSArMTQ1MywxMCBAQAogCQkJCURPX1VOTE9DSyhmbGFncyk7CiAJCQkJYWhhMTUyeF9pbnRlcm5hbF9xdWV1ZShwdHIsIE5VTEwsIGNoZWNrX2NvbmRpdGlvbiwgcHRyLT5zY3NpX2RvbmUpOwogCQkJCURPX0xPQ0soZmxhZ3MpOwotI2lmIDAKLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5USyhkZWJ1Z19laCwgRVJSX0xFQUQgImNvbW1hbmQgbm90IGlzc3VlZCAtIENIRUNLIENPTkRJVElPTiBpZ25vcmVkXG4iLCBDTURJTkZPKERPTkVfU0MpKTsKLSNlbmRpZgogCQkJfQogCQl9CiAKIAkJaWYoRE9ORV9TQyAmJiBET05FX1NDLT5zY3NpX2RvbmUpIHsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlpbnQgaG9zdG5vPURPTkVfU0MtPmRldmljZS0+aG9zdC0+aG9zdF9ubzsKLQkJCWludCBpZD1ET05FX1NDLT5kZXZpY2UtPmlkICYgMHhmOwotCQkJaW50IGx1bj0oKHU4KURPTkVfU0MtPmRldmljZS0+bHVuKSAmIDB4NzsKLSNlbmRpZgogCQkJU2NzaV9DbW5kICpwdHIgPSBET05FX1NDOwogCQkJRE9ORV9TQz1OVUxMOwogCkBAIC0xNjE4LDkgKzE0NzEsNyBAQAogCQkJfQogCiAJCQlET19VTkxPQ0soZmxhZ3MpOwotCQkJRFBSSU5USyhkZWJ1Z19kb25lLCBERUJVR19MRUFEICJjYWxsaW5nIHNjc2lfZG9uZSglcClcbiIsIGhvc3RubywgaWQsIGx1biwgcHRyKTsKLSAgICAgICAgICAgICAgICAJcHRyLT5zY3NpX2RvbmUocHRyKTsKLQkJCURQUklOVEsoZGVidWdfZG9uZSwgREVCVUdfTEVBRCAic2NzaV9kb25lKCVwKSByZXR1cm5lZFxuIiwgaG9zdG5vLCBpZCwgbHVuLCBwdHIpOworCQkJcHRyLT5zY3NpX2RvbmUocHRyKTsKIAkJCURPX0xPQ0soZmxhZ3MpOwogCQl9CiAKQEAgLTE2NDAsOSArMTQ5MSw3IEBACiAjaWYgZGVmaW5lZChBSEExNTJYX1NUQVQpCiAJCWFjdGlvbisrOwogI2VuZGlmCi0JICAgIAlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgfD0gc2VsZWN0aW5nOwotCi0JCURQUklOVEsoZGVidWdfc2VsZWN0aW9uLCBERUJVR19MRUFEICJzZWxlY3RpbmcgdGFyZ2V0XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IHNlbGVjdGluZzsKIAogCQkvKiBjbGVhciBzZWxlY3Rpb24gdGltZW91dCAqLwogCQlTRVRQT1JUKFNTVEFUMSwgU0VMVE8pOwpAQCAtMTY3NCwxOCArMTUyMywxOSBAQAogCVNFVFBPUlQoU1NUQVQxLCBDTFJCVVNGUkVFKTsKIAlTRVRQT1JUKFNTVEFUMSwgQ0xSUEhBU0VDSEcpOwogCi0gICAgCUNVUlJFTlRfU0MtPlNDcC5waGFzZSAmPSB+KHNlbGVjdGluZ3xub3RfaXNzdWVkKTsKKwlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJj0gfihzZWxlY3Rpbmd8bm90X2lzc3VlZCk7CiAKIAlTRVRQT1JUKFNDU0lTRVEsIDApOwogCiAJaWYgKFRFU1RMTyhTU1RBVDAsIFNFTERPKSkgewotCQlwcmludGsoRVJSX0xFQUQgImFoYTE1Mng6IHBhc3NpbmcgYnVzIGZyZWUgY29uZGl0aW9uXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkgICAgImFoYTE1Mng6IHBhc3NpbmcgYnVzIGZyZWUgY29uZGl0aW9uXG4iKTsKIAkJZG9uZShzaHBudCwgRElEX05PX0NPTk5FQ1QgPDwgMTYpOwogCQlyZXR1cm47CiAJfQogCiAJU0VUUE9SVChTU1RBVDAsIENMUlNFTERPKTsKLQkKKwogCUFERE1TR08oSURFTlRJRlkoUkVDT05ORUNULCBDVVJSRU5UX1NDLT5kZXZpY2UtPmx1bikpOwogCiAJaWYgKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIGFib3J0aW5nKSB7CkBAIC0xNjkzLDcgKzE1NDMsNyBAQAogCX0gZWxzZSBpZiAoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgcmVzZXR0aW5nKSB7CiAJCUFERE1TR08oQlVTX0RFVklDRV9SRVNFVCk7CiAJfSBlbHNlIGlmIChTWU5DTkVHPT0wICYmIFNZTkNIUk9OT1VTKSB7Ci0gICAgCQlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgfD0gc3luY25lZzsKKwkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IHN5bmNuZWc7CiAJCU1TR09MRU4gKz0gc3BpX3BvcHVsYXRlX3N5bmNfbXNnKCZNU0dPKE1TR09MRU4pLCA1MCwgOCk7CiAJCVNZTkNORUc9MTsJCS8qIG5lZ290aWF0aW9uIGluIHByb2dyZXNzICovCiAJfQpAQCAtMTcwOCwyOSArMTU1OCwyMSBAQAogICovCiBzdGF0aWMgdm9pZCBzZWx0b19ydW4oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7Ci0JU0VUUE9SVChTQ1NJU0VRLCAwKTsJCQorCVNFVFBPUlQoU0NTSVNFUSwgMCk7CiAJU0VUUE9SVChTU1RBVDEsIENMUlNFTFRJTU8pOwogCi0JRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgInNlbGVjdGlvbiB0aW1lb3V0XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQotCWlmKCFDVVJSRU5UX1NDKSB7Ci0JCURQUklOVEsoZGVidWdfc2VsZWN0aW9uLCBERUJVR19MRUFEICIhQ1VSUkVOVF9TQ1xuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJaWYgKCFDVVJSRU5UX1NDKQogCQlyZXR1cm47Ci0JfQogCi0gICAgCUNVUlJFTlRfU0MtPlNDcC5waGFzZSAmPSB+c2VsZWN0aW5nOworCUNVUlJFTlRfU0MtPlNDcC5waGFzZSAmPSB+c2VsZWN0aW5nOwogCi0JaWYgKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIGFib3J0ZWQpIHsKLQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgImFib3J0ZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCWlmIChDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBhYm9ydGVkKQogCQlkb25lKHNocG50LCBESURfQUJPUlQgPDwgMTYpOwotCX0gZWxzZSBpZiAoVEVTVExPKFNTVEFUMCwgU0VMSU5HTykpIHsKLQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgImFyYml0cmF0aW9uIG5vdCB3b25cbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCWVsc2UgaWYgKFRFU1RMTyhTU1RBVDAsIFNFTElOR08pKQogCQlkb25lKHNocG50LCBESURfQlVTX0JVU1kgPDwgMTYpOwotCX0gZWxzZSB7CisJZWxzZQogCQkvKiBBUkJJVFJBVElPTiB3b24sIGJ1dCBTRUxFQ1RJT04gZmFpbGVkICovCi0JCURQUklOVEsoZGVidWdfc2VsZWN0aW9uLCBERUJVR19MRUFEICJzZWxlY3Rpb24gZmFpbGVkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKIAkJZG9uZShzaHBudCwgRElEX05PX0NPTk5FQ1QgPDwgMTYpOwotCX0KIH0KIAogLyoKQEAgLTE3NTMsOSArMTU5NSw4IEBACiAKIAlpZihDVVJSRU5UX1NDKSB7CiAJCWlmKCEoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgbm90X2lzc3VlZCkpCi0JCQlwcmludGsoRVJSX0xFQUQgImNvbW1hbmQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaXNzdWVkIHlldFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7Ci0KLQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIEVSUl9MRUFEICJjb21tYW5kIHJlcXVldWVkIC0gcmVzZWxlY3Rpb25cbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkJICAgICJjb21tYW5kIHNob3VsZCBub3QgaGF2ZSBiZWVuIGlzc3VlZCB5ZXRcbiIpOwogCiAJCURPX0xPQ0soZmxhZ3MpOwogCQlhcHBlbmRfU0MoJklTU1VFX1NDLCBDVVJSRU5UX1NDKTsKQEAgLTE3NjQsMTcgKzE2MDUsMTYgQEAKIAkJQ1VSUkVOVF9TQyA9IE5VTEw7CiAJfQogCi0JaWYoIURJU0NPTk5FQ1RFRF9TQykgewotCQlEUFJJTlRLKGRlYnVnX3NlbGVjdGlvbiwgREVCVUdfTEVBRCAidW5leHBlY3RlZCBTRUxESSAiLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwlpZiAoIURJU0NPTk5FQ1RFRF9TQykKIAkJcmV0dXJuOwotCX0KIAogCVJFQ09OTl9UQVJHRVQ9LTE7CiAKIAlzZWxpZCA9IEdFVFBPUlQoU0VMSUQpICYgfigxIDw8IHNocG50LT50aGlzX2lkKTsKIAogCWlmIChzZWxpZD09MCkgewotCQlwcmludGsoImFoYTE1MnglZDogdGFyZ2V0IGlkIHVua25vd24gKCUwMngpXG4iLCBIT1NUTk8sIHNlbGlkKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hwbnQsCisJCQkgICAgICJ0YXJnZXQgaWQgdW5rbm93biAoJTAyeClcbiIsIHNlbGlkKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTc4Miw4ICsxNjIyLDggQEAKIAkJOwogCiAJaWYoc2VsaWQgJiB+KDEgPDwgdGFyZ2V0KSkgewotCQlwcmludGsoImFoYTE1MnglZDogbXVsdGlwbGUgdGFyZ2V0cyByZWNvbm5lY3RlZCAoJTAyeClcbiIsCi0JCSAgICAgICBIT1NUTk8sIHNlbGlkKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hwbnQsCisJCQkgICAgICJtdWx0aXBsZSB0YXJnZXRzIHJlY29ubmVjdGVkICglMDJ4KVxuIiwgc2VsaWQpOwogCX0KIAogCkBAIC0xNzkzLDcgKzE2MzMsNiBAQAogCVNFVFJBVEUoSE9TVERBVEEoc2hwbnQpLT5zeW5jcmF0ZVt0YXJnZXRdKTsKIAogCVJFQ09OTl9UQVJHRVQ9dGFyZ2V0OwotCURQUklOVEsoZGVidWdfc2VsZWN0aW9uLCBERUJVR19MRUFEICJ0YXJnZXQgJWQgcmVzZWxlY3RlZCAoJTAyeCkuXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCB0YXJnZXQsIHNlbGlkKTsKIH0KIAogLyoKQEAgLTE4MTcsMzEgKzE2NTYsMjQgQEAKIAkJaWYoc3N0YXQxICYgKFBIQVNFQ0hHfFBIQVNFTUlTfEJVU0ZSRUUpIHx8ICEoc3N0YXQxICYgUkVRSU5JVCkpCiAJCQlyZXR1cm47CiAKLQkJaWYoVEVTVExPKFNTVEFUMCxTUElPUkRZKSkgewotCQkJRFBSSU5USyhkZWJ1Z19tc2dpLCBERUJVR19MRUFEICIhU1BJT1JEWVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCWlmIChURVNUTE8oU1NUQVQwLCBTUElPUkRZKSkKIAkJCXJldHVybjsKLQkJfQkKIAogCQlBRERNU0dJKEdFVFBPUlQoU0NTSURBVCkpOwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCQlpZiAoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmIGRlYnVnX21zZ2kpIHsKLQkJCXByaW50ayhJTkZPX0xFQUQgImluYm91bmQgbWVzc2FnZSAlMDJ4ICIsIENNRElORk8oQ1VSUkVOVF9TQyksIE1TR0koMCkpOwotCQkJc3BpX3ByaW50X21zZygmTVNHSSgwKSk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLSNlbmRpZgotCiAJCWlmKCFDVVJSRU5UX1NDKSB7CiAJCQlpZihMQVNUU1RBVEUhPXNlbGRpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJhaGExNTJ4JWQ6IG1lc3NhZ2UgaW4gdy9vIGN1cnJlbnQgY29tbWFuZCBub3QgYWZ0ZXIgcmVzZWxlY3Rpb25cbiIsIEhPU1ROTyk7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaHBudCwKKwkJCQkJICAgICAibWVzc2FnZSBpbiB3L28gY3VycmVudCBjb21tYW5kIgorCQkJCQkgICAgICIgbm90IGFmdGVyIHJlc2VsZWN0aW9uXG4iKTsKIAkJCX0KIAogCQkJLyoKLQkgCSAJICogSGFuZGxlIHJlc2VsZWN0aW9uCi0JIAkJICovCisJCQkgKiBIYW5kbGUgcmVzZWxlY3Rpb24KKwkJCSAqLwogCQkJaWYoIShNU0dJKDApICYgSURFTlRJRllfQkFTRSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgImFoYTE1MnglZDogdGFyZ2V0IGRpZG4ndCBpZGVudGlmeSBhZnRlciByZXNlbGVjdGlvblxuIiwgSE9TVE5PKTsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNocG50LAorCQkJCQkgICAgICJ0YXJnZXQgZGlkbid0IGlkZW50aWZ5IGFmdGVyIHJlc2VsZWN0aW9uXG4iKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMTg0OSwxMiArMTY4MSwxMyBAQAogCiAJCQlpZiAoIUNVUlJFTlRfU0MpIHsKIAkJCQlzaG93X3F1ZXVlcyhzaHBudCk7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJhaGExNTJ4JWQ6IG5vIGRpc2Nvbm5lY3RlZCBjb21tYW5kIGZvciB0YXJnZXQgJWQvJWRcbiIsIEhPU1ROTywgUkVDT05OX1RBUkdFVCwgTVNHSSgwKSAmIDB4M2YpOworCQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgc2hwbnQsCisJCQkJCSAgICAgIm5vIGRpc2Nvbm5lY3RlZCBjb21tYW5kIgorCQkJCQkgICAgICIgZm9yIHRhcmdldCAlZC8lZFxuIiwKKwkJCQkJICAgICBSRUNPTk5fVEFSR0VULCBNU0dJKDApICYgMHgzZik7CiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCURQUklOVEsoZGVidWdfbXNnaSwgREVCVUdfTEVBRCAidGFyZ2V0IHJlY29ubmVjdGVkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQogCQkJQ1VSUkVOVF9TQy0+U0NwLk1lc3NhZ2UgPSBNU0dJKDApOwogCQkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICY9IH5kaXNjb25uZWN0ZWQ7CiAKQEAgLTE4NjIsMzEgKzE2OTUsMzIgQEAKIAogCQkJLyogbmV4dCBtZXNzYWdlIGlmIGFueSAqLwogCQkJY29udGludWU7Ci0JCX0gCisJCX0KIAogCQlDVVJSRU5UX1NDLT5TQ3AuTWVzc2FnZSA9IE1TR0koMCk7CiAKIAkJc3dpdGNoIChNU0dJKDApKSB7CiAJCWNhc2UgRElTQ09OTkVDVDoKIAkJCWlmICghUkVDT05ORUNUKQotCQkJCXByaW50ayhXQVJOX0xFQUQgInRhcmdldCB3YXMgbm90IGFsbG93ZWQgdG8gZGlzY29ubmVjdFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCQkJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBDVVJSRU5UX1NDLAorCQkJCQkgICAgInRhcmdldCB3YXMgbm90IGFsbG93ZWQgdG8gZGlzY29ubmVjdFxuIik7CiAKIAkJCUNVUlJFTlRfU0MtPlNDcC5waGFzZSB8PSBkaXNjb25uZWN0ZWQ7CiAJCQlicmVhazsKIAogCQljYXNlIENPTU1BTkRfQ09NUExFVEU6Ci0JCQlpZihDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBjb21wbGV0ZWQpCi0JCQkJRFBSSU5USyhkZWJ1Z19tc2dpLCBERUJVR19MRUFEICJhZ2FpbiBDT01NQU5EIENPTVBMRVRFXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQogCQkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IGNvbXBsZXRlZDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTUVTU0FHRV9SRUpFQ1Q6CiAJCQlpZiAoU1lOQ05FRz09MSkgewotCQkJCXByaW50ayhJTkZPX0xFQUQgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCB3YXMgcmVqZWN0ZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgQ1VSUkVOVF9TQywKKwkJCQkJICAgICJTeW5jaHJvbm91cyBEYXRhIFRyYW5zZmVyIFJlcXVlc3QiCisJCQkJCSAgICAiIHdhcyByZWplY3RlZFxuIik7CiAJCQkJU1lOQ05FRz0yOwkvKiBuZWdvdGlhdGlvbiBjb21wbGV0ZWQgKi8KIAkJCX0gZWxzZQotCQkJCXByaW50ayhJTkZPX0xFQUQgImluYm91bmQgbWVzc2FnZSAoTUVTU0FHRSBSRUpFQ1QpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIENVUlJFTlRfU0MsCisJCQkJCSAgICAiaW5ib3VuZCBtZXNzYWdlIChNRVNTQUdFIFJFSkVDVClcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQVZFX1BPSU5URVJTOgpAQCAtMTkwNyw3ICsxNzQxLDggQEAKIAkJCQkJbG9uZyB0aWNrczsKIAogCQkJCQlpZiAoTVNHSSgxKSAhPSAzKSB7Ci0JCQkJCQlwcmludGsoRVJSX0xFQUQgIlNEVFIgbWVzc2FnZSBsZW5ndGghPTNcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkJCQkJICAgICJTRFRSIG1lc3NhZ2UgbGVuZ3RoIT0zXG4iKTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAKQEAgLTE5MjQsMTAgKzE3NTksMTIgQEAKIAkJCQkJCS8qIG5lZ290aWF0aW9uIGluIHByb2dyZXNzICovCiAJCQkJCQlpZiAodGlja3MgPiA5IHx8IE1TR0koNCkgPCAxIHx8IE1TR0koNCkgPiA4KSB7CiAJCQkJCQkJQURETVNHTyhNRVNTQUdFX1JFSkVDVCk7Ci0JCQkJCQkJcHJpbnRrKElORk9fTEVBRCAicmVjZWl2ZWQgU3luY2hyb25vdXMgRGF0YSBUcmFuc2ZlciBSZXF1ZXN0IGludmFsaWQgLSByZWplY3RlZFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCQkJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLAorCQkJCQkJCQkgICAgQ1VSUkVOVF9TQywKKwkJCQkJCQkJICAgICJyZWNlaXZlZCBTeW5jaHJvbm91cyBEYXRhIFRyYW5zZmVyIFJlcXVlc3QgaW52YWxpZCAtIHJlamVjdGVkXG4iKTsKIAkJCQkJCQlicmVhazsKIAkJCQkJCX0KLQkJCQkJCQorCiAJCQkJCQlTWU5DUkFURSB8PSAoKHRpY2tzIC0gMikgPDwgNCkgKyBNU0dJKDQpOwogCQkJCQl9IGVsc2UgaWYgKHRpY2tzIDw9IDkgJiYgTVNHSSg0KSA+PSAxKSB7CiAJCQkJCQlBRERNU0dPKEVYVEVOREVEX01FU1NBR0UpOwpAQCAtMTk0NywxMSArMTc4NCwxNCBAQAogCQkJCQkJU1lOQ1JBVEUgfD0gKCh0aWNrcyAtIDIpIDw8IDQpICsgTVNHSSg0KTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCS8qIHJlcXVlc3RlZCBTRFRSIGlzIHRvbyBzbG93LCBkbyBpdCBhc3luY2hyb25vdXNseSAqLwotCQkJCQkJcHJpbnRrKElORk9fTEVBRCAiU3luY2hyb25vdXMgRGF0YSBUcmFuc2ZlciBSZXF1ZXN0IHRvbyBzbG93IC0gUmVqZWN0aW5nXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywKKwkJCQkJCQkgICAgQ1VSUkVOVF9TQywKKwkJCQkJCQkgICAgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCB0b28gc2xvdyAtIFJlamVjdGluZ1xuIik7CiAJCQkJCQlBRERNU0dPKE1FU1NBR0VfUkVKRUNUKTsKIAkJCQkJfQogCi0JCQkJCVNZTkNORUc9MjsJCS8qIG5lZ290aWF0aW9uIGNvbXBsZXRlZCAqLworCQkJCQkvKiBuZWdvdGlhdGlvbiBjb21wbGV0ZWQgKi8KKwkJCQkJU1lOQ05FRz0yOwogCQkJCQlTRVRSQVRFKFNZTkNSQVRFKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0xOTg1LDEyICsxODI1LDEyIEBACiBzdGF0aWMgdm9pZCBtc2dpX2VuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKIAlpZihNU0dJTEVOPjApCi0JCXByaW50ayhXQVJOX0xFQUQgInRhcmdldCBsZWZ0IGJlZm9yZSBtZXNzYWdlIGNvbXBsZXRlZCAoJWQpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBNU0dJTEVOKTsKKwkJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBDVVJSRU5UX1NDLAorCQkJICAgICJ0YXJnZXQgbGVmdCBiZWZvcmUgbWVzc2FnZSBjb21wbGV0ZWQgKCVkKVxuIiwKKwkJCSAgICBNU0dJTEVOKTsKIAotCWlmIChNU0dPTEVOID4gMCAmJiAhKEdFVFBPUlQoU1NUQVQxKSAmIEJVU0ZSRUUpKSB7Ci0JCURQUklOVEsoZGVidWdfbXNnaSwgREVCVUdfTEVBRCAibXNnbyBwZW5kaW5nXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwlpZiAoTVNHT0xFTiA+IDAgJiYgIShHRVRQT1JUKFNTVEFUMSkgJiBCVVNGUkVFKSkKIAkJU0VUUE9SVChTQ1NJU0lHLCBQX01TR0kgfCBTSUdfQVROTyk7Ci0JfSAKIH0KIAogLyoKQEAgLTIwMDMsMjEgKzE4NDMsMTIgQEAKIAkJaWYoKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIHN5bmNuZWcpICYmIFNZTkNORUc9PTIgJiYgU1lOQ1JBVEU9PTApIHsKIAkJCUFERE1TR08oSURFTlRJRlkoUkVDT05ORUNULCBDVVJSRU5UX1NDLT5kZXZpY2UtPmx1bikpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKElORk9fTEVBRCAidW5leHBlY3RlZCBNRVNTQUdFIE9VVCBwaGFzZTsgcmVqZWN0aW5nXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgQ1VSUkVOVF9TQywKKwkJCQkgICAgInVuZXhwZWN0ZWQgTUVTU0FHRSBPVVQgcGhhc2U7IHJlamVjdGluZ1xuIik7CiAJCQlBRERNU0dPKE1FU1NBR0VfUkVKRUNUKTsKIAkJfQogCX0KIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpZihIT1NUREFUQShzaHBudCktPmRlYnVnICYgZGVidWdfbXNnbykgewotCQlpbnQgaTsKLQotCQlwcmludGsoREVCVUdfTEVBRCAibWVzc2FnZXMoICIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCQlmb3IgKGk9MDsgaTxNU0dPTEVOOyBpKz1zcGlfcHJpbnRfbXNnKCZNU0dPKGkpKSwgcHJpbnRrKCIgIikpCi0JCQk7Ci0JCXByaW50aygiKVxuIik7Ci0JfQotI2VuZGlmCiB9CiAKIC8qCkBAIC0yMDI2LDE2ICsxODU3LDkgQEAKICAqLwogc3RhdGljIHZvaWQgbXNnb19ydW4oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7Ci0JaWYoTVNHT19JPT1NU0dPTEVOKQotCQlEUFJJTlRLKGRlYnVnX21zZ28sIERFQlVHX0xFQUQgIm1lc3NhZ2VzIGFsbCBzZW50ICglZC8lZClcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIE1TR09fSSwgTVNHT0xFTik7Ci0KIAl3aGlsZShNU0dPX0k8TVNHT0xFTikgewotCQlEUFJJTlRLKGRlYnVnX21zZ28sIERFQlVHX0xFQUQgIm1lc3NhZ2UgYnl0ZSAlMDJ4ICglZC8lZClcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIE1TR08oTVNHT19JKSwgTVNHT19JLCBNU0dPTEVOKTsKLQotCQlpZihURVNUTE8oU1NUQVQwLCBTUElPUkRZKSkgewotCQkJRFBSSU5USyhkZWJ1Z19tc2dvLCBERUJVR19MRUFEICIhU1BJT1JEWVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCWlmIChURVNUTE8oU1NUQVQwLCBTUElPUkRZKSkKIAkJCXJldHVybjsKLQkJfQogCiAJCWlmIChNU0dPX0k9PU1TR09MRU4tMSkgewogCQkJLyogTGVhdmUgTUVTU0FHRSBPVVQgYWZ0ZXIgdHJhbnNmZXIgKi8KQEAgLTIwNTksMzYgKzE4ODMsMzMgQEAKIHN0YXRpYyB2b2lkIG1zZ29fZW5kKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewogCWlmKE1TR09fSTxNU0dPTEVOKSB7Ci0JCXByaW50ayhFUlJfTEVBRCAibWVzc2FnZSBzZW50IGluY29tcGxldGVseSAoJWQvJWQpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBNU0dPX0ksIE1TR09MRU4pOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCSAgICAibWVzc2FnZSBzZW50IGluY29tcGxldGVseSAoJWQvJWQpXG4iLAorCQkJICAgIE1TR09fSSwgTVNHT0xFTik7CiAJCWlmKFNZTkNORUc9PTEpIHsKLQkJCXByaW50ayhJTkZPX0xFQUQgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCB3YXMgcmVqZWN0ZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBDVVJSRU5UX1NDLAorCQkJCSAgICAiU3luY2hyb25vdXMgRGF0YSBUcmFuc2ZlciBSZXF1ZXN0IHdhcyByZWplY3RlZFxuIik7CiAJCQlTWU5DTkVHPTI7CiAJCX0KIAl9Ci0JCQorCiAJTVNHT19JICA9IDA7CiAJTVNHT0xFTiA9IDA7CiB9CiAKLS8qIAorLyoKICAqIGNvbW1hbmQgcGhhc2UKICAqCiAgKi8KIHN0YXRpYyB2b2lkIGNtZF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewogCWlmIChDVVJSRU5UX1NDLT5TQ3Auc2VudF9jb21tYW5kKSB7Ci0JCXByaW50ayhFUlJfTEVBRCAiY29tbWFuZCBhbHJlYWR5IHNlbnRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCSAgICAiY29tbWFuZCBhbHJlYWR5IHNlbnRcbiIpOwogCQlkb25lKHNocG50LCBESURfRVJST1IgPDwgMTYpOwogCQlyZXR1cm47CiAJfQogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWlmIChIT1NUREFUQShzaHBudCktPmRlYnVnICYgZGVidWdfY21kKSB7Ci0JCXByaW50ayhERUJVR19MRUFEICJjbWRfaW5pdDogIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7Ci0JCV9fc2NzaV9wcmludF9jb21tYW5kKENVUlJFTlRfU0MtPmNtbmQpOwotCX0KLSNlbmRpZgotCiAJQ01EX0k9MDsKIH0KIApAQCAtMjA5OCwxOCArMTkxOSw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNtZF9ydW4oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7Ci0JaWYoQ01EX0k9PUNVUlJFTlRfU0MtPmNtZF9sZW4pIHsKLQkJRFBSSU5USyhkZWJ1Z19jbWQsIERFQlVHX0xFQUQgImNvbW1hbmQgYWxyZWFkeSBjb21wbGV0ZWx5IHNlbnQgKCVkLyVkKSIsIENNRElORk8oQ1VSUkVOVF9TQyksIENNRF9JLCBDVVJSRU5UX1NDLT5jbWRfbGVuKTsKLQkJZGlzcF9wb3J0cyhzaHBudCk7Ci0JfQotCiAJd2hpbGUoQ01EX0k8Q1VSUkVOVF9TQy0+Y21kX2xlbikgewotCQlEUFJJTlRLKGRlYnVnX2NtZCwgREVCVUdfTEVBRCAiY29tbWFuZCBieXRlICUwMnggKCVkLyVkKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgQ1VSUkVOVF9TQy0+Y21uZFtDTURfSV0sIENNRF9JLCBDVVJSRU5UX1NDLT5jbWRfbGVuKTsKLQotCQlpZihURVNUTE8oU1NUQVQwLCBTUElPUkRZKSkgewotCQkJRFBSSU5USyhkZWJ1Z19jbWQsIERFQlVHX0xFQUQgIiFTUElPUkRZXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJaWYgKFRFU1RMTyhTU1RBVDAsIFNQSU9SRFkpKQogCQkJcmV0dXJuOwotCQl9CiAKIAkJU0VUUE9SVChTQ1NJREFULCBDVVJSRU5UX1NDLT5jbW5kW0NNRF9JKytdKTsKIAl9CkBAIC0yMTE4LDcgKzE5MzAsOSBAQAogc3RhdGljIHZvaWQgY21kX2VuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKIAlpZihDTURfSTxDVVJSRU5UX1NDLT5jbWRfbGVuKQotCQlwcmludGsoRVJSX0xFQUQgImNvbW1hbmQgc2VudCBpbmNvbXBsZXRlbHkgKCVkLyVkKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgQ01EX0ksIENVUlJFTlRfU0MtPmNtZF9sZW4pOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCSAgICAiY29tbWFuZCBzZW50IGluY29tcGxldGVseSAoJWQvJWQpXG4iLAorCQkJICAgIENNRF9JLCBDVVJSRU5UX1NDLT5jbWRfbGVuKTsKIAllbHNlCiAJCUNVUlJFTlRfU0MtPlNDcC5zZW50X2NvbW1hbmQrKzsKIH0KQEAgLTIxMjksMjAgKzE5NDMsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgc3RhdHVzX3J1bihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKLQlpZihURVNUTE8oU1NUQVQwLFNQSU9SRFkpKSB7Ci0JCURQUklOVEsoZGVidWdfc3RhdHVzLCBERUJVR19MRUFEICIhU1BJT1JEWVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJaWYgKFRFU1RMTyhTU1RBVDAsIFNQSU9SRFkpKQogCQlyZXR1cm47Ci0JfQogCiAJQ1VSUkVOVF9TQy0+U0NwLlN0YXR1cyA9IEdFVFBPUlQoU0NTSURBVCk7CiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JaWYgKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19zdGF0dXMpIHsKLQkJcHJpbnRrKERFQlVHX0xFQUQgImluYm91bmQgc3RhdHVzICUwMnggIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgQ1VSUkVOVF9TQy0+U0NwLlN0YXR1cyk7Ci0JCXNjc2lfcHJpbnRfc3RhdHVzKENVUlJFTlRfU0MtPlNDcC5TdGF0dXMpOwotCQlwcmludGsoIlxuIik7Ci0JfQotI2VuZGlmCiB9CiAKIC8qCkBAIC0yMTYxLDEwICsxOTY2LDYgQEAKIAlTRVRQT1JUKFNJTU9ERTEsIEVOU0NTSVBFUlIgfCBFTlNDU0lSU1QgfCBFTlBIQVNFTUlTIHwgRU5CVVNGUkVFKTsKIAogCURBVEFfTEVOPTA7Ci0JRFBSSU5USyhkZWJ1Z19kYXRhaSwKLQkJREVCVUdfTEVBRCAiZGF0YWlfaW5pdDogcmVxdWVzdF9idWZmbGVuPSVkIHJlc2lkPSVkXG4iLAotCQlDTURJTkZPKENVUlJFTlRfU0MpLCBzY3NpX2J1ZmZsZW4oQ1VSUkVOVF9TQyksCi0JCXNjc2lfZ2V0X3Jlc2lkKENVUlJFTlRfU0MpKTsKIH0KIAogc3RhdGljIHZvaWQgZGF0YWlfcnVuKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQpAQCAtMjE4Niw4ICsxOTg3LDcgQEAKIAkJCWJhcnJpZXIoKTsKIAogCQlpZihURVNUTE8oRE1BU1RBVCwgREZJRk9GVUxMfElOVFNUQVQpKSB7Ci0JCQlwcmludGsoRVJSX0xFQUQgImRhdGFpIHRpbWVvdXQiLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJCWRpc3BfcG9ydHMoc2hwbnQpOworCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsICJkYXRhaSB0aW1lb3V0XG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTIxOTksOCArMTk5OSw4IEBACiAJCQkJYmFycmllcigpOwogCiAJCQlpZihURVNUTE8oU1NUQVQyLCBTRU1QVFkpKSB7Ci0JCQkJcHJpbnRrKEVSUl9MRUFEICJkYXRhaSBzZW1wdHkgdGltZW91dCIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCQkJCWRpc3BfcG9ydHMoc2hwbnQpOworCQkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJCQkgICAgImRhdGFpIHNlbXB0eSB0aW1lb3V0Iik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTIyMDksNDggKzIwMDksNDkgQEAKIAogCQlpZihDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbD4wKSB7CiAJCQl3aGlsZShmaWZvZGF0YT4wICYmIENVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsPjApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlkYXRhX2NvdW50ID0gZmlmb2RhdGE+Q1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWwgPworCQkJCWRhdGFfY291bnQgPSBmaWZvZGF0YSA+IENVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsID8KIAkJCQkJCUNVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsIDoKIAkJCQkJCWZpZm9kYXRhOwogCQkJCWZpZm9kYXRhIC09IGRhdGFfY291bnQ7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIAlpZihkYXRhX2NvdW50ICYgMSkgewotCQkJCQlEUFJJTlRLKGRlYnVnX2RhdGFpLCBERUJVR19MRUFEICI4Yml0XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVNFVFBPUlQoRE1BQ05UUkwwLCBFTkRNQXxfOEJJVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqQ1VSUkVOVF9TQy0+U0NwLnB0cisrID0gR0VUUE9SVChEQVRBUE9SVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbC0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJREFUQV9MRU4rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVNFVFBPUlQoRE1BQ05UUkwwLCBFTkRNQSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJfQotCQotICAgICAgICAgICAgICAgICAgICAgICAgCWlmKGRhdGFfY291bnQgPiAxKSB7Ci0JCQkJCURQUklOVEsoZGVidWdfZGF0YWksIERFQlVHX0xFQUQgIjE2Yml0KCVkKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgZGF0YV9jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlkYXRhX2NvdW50ID4+PSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaW5zdyhEQVRBUE9SVCwgQ1VSUkVOVF9TQy0+U0NwLnB0ciwgZGF0YV9jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlDVVJSRU5UX1NDLT5TQ3AucHRyICAgICAgICAgICArPSAyICogZGF0YV9jb3VudDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCUNVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsIC09IDIgKiBkYXRhX2NvdW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJREFUQV9MRU4gICAgICAgICAgICAgICAgICAgICAgKz0gMiAqIGRhdGFfY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJfQotCQotICAgICAgICAgICAgICAgICAgICAgICAgCWlmKENVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsPT0wICYmIENVUlJFTlRfU0MtPlNDcC5idWZmZXJzX3Jlc2lkdWFsPjApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCS8qIGFkdmFuY2UgdG8gbmV4dCBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCUNVUlJFTlRfU0MtPlNDcC5idWZmZXJzX3Jlc2lkdWFsLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlDVVJSRU5UX1NDLT5TQ3AucHRyICAgICAgICAgICA9IFNHX0FERFJFU1MoQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCA9IENVUlJFTlRfU0MtPlNDcC5idWZmZXItPmxlbmd0aDsKLQkJCQl9IAotICAgICAgICAgICAgICAgIAl9Ci0JCX0gZWxzZSBpZihmaWZvZGF0YT4wKSB7IAotCQkJcHJpbnRrKEVSUl9MRUFEICJubyBidWZmZXJzIGxlZnQgZm9yICVkKCVkKSBieXRlcyAoZGF0YSBvdmVycnVuIT8pXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBmaWZvZGF0YSwgR0VUUE9SVChGSUZPU1RBVCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgU0VUUE9SVChETUFDTlRSTDAsIEVORE1BfF84QklUKTsKKwkJCQlpZiAoZGF0YV9jb3VudCAmIDEpIHsKKwkJCQkJU0VUUE9SVChETUFDTlRSTDAsIEVORE1BfF84QklUKTsKKwkJCQkJKkNVUlJFTlRfU0MtPlNDcC5wdHIrKyA9IEdFVFBPUlQoREFUQVBPUlQpOworCQkJCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbC0tOworCQkJCQlEQVRBX0xFTisrOworCQkJCQlTRVRQT1JUKERNQUNOVFJMMCwgRU5ETUEpOworCQkJCX0KKworCQkJCWlmIChkYXRhX2NvdW50ID4gMSkgeworCQkJCQlkYXRhX2NvdW50ID4+PSAxOworCQkJCQlpbnN3KERBVEFQT1JULCBDVVJSRU5UX1NDLT5TQ3AucHRyLCBkYXRhX2NvdW50KTsKKwkJCQkJQ1VSUkVOVF9TQy0+U0NwLnB0ciArPSAyICogZGF0YV9jb3VudDsKKwkJCQkJQ1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWwgLT0gMiAqIGRhdGFfY291bnQ7CisJCQkJCURBVEFfTEVOICs9IDIgKiBkYXRhX2NvdW50OworCQkJCX0KKworCQkJCWlmIChDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCA9PSAwICYmCisJCQkJICAgIENVUlJFTlRfU0MtPlNDcC5idWZmZXJzX3Jlc2lkdWFsID4gMCkgeworCQkJCQkvKiBhZHZhbmNlIHRvIG5leHQgYnVmZmVyICovCisJCQkJCUNVUlJFTlRfU0MtPlNDcC5idWZmZXJzX3Jlc2lkdWFsLS07CisJCQkJCUNVUlJFTlRfU0MtPlNDcC5idWZmZXIrKzsKKwkJCQkJQ1VSUkVOVF9TQy0+U0NwLnB0ciAgICAgICAgICAgPSBTR19BRERSRVNTKENVUlJFTlRfU0MtPlNDcC5idWZmZXIpOworCQkJCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCA9IENVUlJFTlRfU0MtPlNDcC5idWZmZXItPmxlbmd0aDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoZmlmb2RhdGEgPiAwKSB7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCQkgICAgIm5vIGJ1ZmZlcnMgbGVmdCBmb3IgJWQoJWQpIGJ5dGVzIgorCQkJCSAgICAiIChkYXRhIG92ZXJydW4hPylcbiIsCisJCQkJICAgIGZpZm9kYXRhLCBHRVRQT1JUKEZJRk9TVEFUKSk7CisJCQlTRVRQT1JUKERNQUNOVFJMMCwgRU5ETUF8XzhCSVQpOwogCQkJd2hpbGUoZmlmb2RhdGE+MCkgewogCQkJCWludCBkYXRhOwogCQkJCWRhdGE9R0VUUE9SVChEQVRBUE9SVCk7Ci0JCQkJRFBSSU5USyhkZWJ1Z19kYXRhaSwgREVCVUdfTEVBRCAiZGF0YT0lMDJ4XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBkYXRhKTsKIAkJCQlmaWZvZGF0YS0tOwogCQkJCURBVEFfTEVOKys7CiAJCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICBTRVRQT1JUKERNQUNOVFJMMCwgRU5ETUF8XzhCSVQpOworCQkJU0VUUE9SVChETUFDTlRSTDAsIEVORE1BfF84QklUKTsKIAkJfQogCX0KIApAQCAtMjI1OCwxOSArMjA1OSwyMCBAQAogCSAgIFRFU1RMTyhETUFTVEFULCBERklGT0VNUCkgfHwKIAkgICBURVNUTE8oU1NUQVQyLCBTRU1QVFkpIHx8CiAJICAgR0VUUE9SVChGSUZPU1RBVCk+MCkgewotCSAgIAkvKgorCQkvKgogCQkgKiBzb21ldGhpbmcgd2VudCB3cm9uZywgaWYgdGhlcmUncyBzb21ldGhpbmcgbGVmdCBpbiB0aGUgZmlmb3MKIAkJICogb3IgdGhlIHBoYXNlIGRpZG4ndCBjaGFuZ2UKIAkJICovCi0JCXByaW50ayhFUlJfTEVBRCAiZmlmb3Mgc2hvdWxkIGJlIGVtcHR5IGFuZCBwaGFzZSBzaG91bGQgaGF2ZSBjaGFuZ2VkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJZGlzcF9wb3J0cyhzaHBudCk7CisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJICAgICJmaWZvcyBzaG91bGQgYmUgZW1wdHkgYW5kIHBoYXNlIHNob3VsZCBoYXZlIGNoYW5nZWRcbiIpOwogCX0KIAogCWlmKERBVEFfTEVOIT1HRVRTVENOVCgpKSB7Ci0JCXByaW50ayhFUlJfTEVBRAotCQkgICAgICAgIm1hbnVhbCB0cmFuc2ZlciBjb3VudCBkaWZmZXJzIGZyb20gYXV0b21hdGljIChjb3VudD0lZDtzdGNudD0lZDtkaWZmPSVkO2ZpZm9zdGF0PSVkKSIsCi0JCSAgICAgICBDTURJTkZPKENVUlJFTlRfU0MpLCBEQVRBX0xFTiwgR0VUU1RDTlQoKSwgR0VUU1RDTlQoKS1EQVRBX0xFTiwgR0VUUE9SVChGSUZPU1RBVCkpOwotCQlkaXNwX3BvcnRzKHNocG50KTsKKwkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkgICAgIm1hbnVhbCB0cmFuc2ZlciBjb3VudCBkaWZmZXJzIGZyb20gYXV0b21hdGljICIKKwkJCSAgICAiKGNvdW50PSVkO3N0Y250PSVkO2RpZmY9JWQ7Zmlmb3N0YXQ9JWQpIiwKKwkJCSAgICBEQVRBX0xFTiwgR0VUU1RDTlQoKSwgR0VUU1RDTlQoKS1EQVRBX0xFTiwKKwkJCSAgICBHRVRQT1JUKEZJRk9TVEFUKSk7CiAJCW1kZWxheSgxMDAwMCk7CiAJfQogfQpAQCAtMjI3OSwxMSArMjA4MSw2IEBACiB7CiAJQ01EX0lOQ19SRVNJRChDVVJSRU5UX1NDLCAtR0VUU1RDTlQoKSk7CiAKLQlEUFJJTlRLKGRlYnVnX2RhdGFpLAotCQlERUJVR19MRUFEICJkYXRhaV9lbmQ6IHJlcXVlc3RfYnVmZmxlbj0lZCByZXNpZD0lZCBzdGNudD0lZFxuIiwKLQkJQ01ESU5GTyhDVVJSRU5UX1NDKSwgc2NzaV9idWZmbGVuKENVUlJFTlRfU0MpLAotCQlzY3NpX2dldF9yZXNpZChDVVJSRU5UX1NDKSwgR0VUU1RDTlQoKSk7Ci0KIAlTRVRQT1JUKFNYRlJDVEwwLCBDSDF8Q0xSU1RDTlQpOwogCVNFVFBPUlQoRE1BQ05UUkwwLCAwKTsKIH0KQEAgLTIzMDQsMTEgKzIxMDEsNiBAQAogCVNFVFBPUlQoU0lNT0RFMSwgRU5TQ1NJUEVSUiB8IEVOU0NTSVJTVCB8IEVOUEhBU0VNSVMgfCBFTkJVU0ZSRUUgKTsKIAogCURBVEFfTEVOID0gc2NzaV9nZXRfcmVzaWQoQ1VSUkVOVF9TQyk7Ci0KLQlEUFJJTlRLKGRlYnVnX2RhdGFvLAotCQlERUJVR19MRUFEICJkYXRhb19pbml0OiByZXF1ZXN0X2J1ZmZsZW49JWQ7IHJlc2lkPSVkXG4iLAotCQlDTURJTkZPKENVUlJFTlRfU0MpLCBzY3NpX2J1ZmZsZW4oQ1VSUkVOVF9TQyksCi0JCXNjc2lfZ2V0X3Jlc2lkKENVUlJFTlRfU0MpKTsKIH0KIAogc3RhdGljIHZvaWQgZGF0YW9fcnVuKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQpAQCAtMjMyMyw4ICsyMTE1LDkgQEAKIAkJCWRhdGFfY291bnQ9Q1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWw7CiAKIAkJaWYoVEVTVExPKERNQVNUQVQsIERGSUZPRU1QKSkgewotCQkJcHJpbnRrKEVSUl9MRUFEICJkYXRhbyBmaWZvIG5vdCBlbXB0eSAoJWQpIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgR0VUUE9SVChGSUZPU1RBVCkpOwotCQkJZGlzcF9wb3J0cyhzaHBudCk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCQkgICAgImRhdGFvIGZpZm8gbm90IGVtcHR5ICglZCkiLAorCQkJCSAgICBHRVRQT1JUKEZJRk9TVEFUKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0yMzQyLDcgKzIxMzUsNyBAQAogCQkJQ1VSUkVOVF9TQy0+U0NwLnB0ciAgICAgICAgICAgKz0gMiAqIGRhdGFfY291bnQ7CiAJCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCAtPSAyICogZGF0YV9jb3VudDsKIAkJCUNNRF9JTkNfUkVTSUQoQ1VSUkVOVF9TQywgLTIgKiBkYXRhX2NvdW50KTsKLQkgIAl9CisJCX0KIAogCQlpZihDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbD09MCAmJiBDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyc19yZXNpZHVhbD4wKSB7CiAJCQkvKiBhZHZhbmNlIHRvIG5leHQgYnVmZmVyICovCkBAIC0yMzU3LDggKzIxNTAsNyBAQAogCQkJYmFycmllcigpOwogCiAJCWlmKFRFU1RMTyhETUFTVEFULCBERklGT0VNUHxJTlRTVEFUKSkgewotCQkJcHJpbnRrKEVSUl9MRUFEICJkYXRhb3V0IHRpbWVvdXQiLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJCWRpc3BfcG9ydHMoc2hwbnQpOworCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsICJkYXRhb3V0IHRpbWVvdXRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yMzY4LDM1ICsyMTYwLDIzIEBACiB7CiAJaWYoVEVTVExPKERNQVNUQVQsIERGSUZPRU1QKSkgewogCQlpbnQgZGF0YV9jb3VudCA9IChEQVRBX0xFTiAtIHNjc2lfZ2V0X3Jlc2lkKENVUlJFTlRfU0MpKSAtCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRTVENOVCgpOwotCi0JCURQUklOVEsoZGVidWdfZGF0YW8sIERFQlVHX0xFQUQgImRhdGFvOiAlZCBieXRlcyB0byByZXNlbmQgKCVkIHdyaXR0ZW4sICVkIHRyYW5zZmVycmVkKVxuIiwKLQkJCUNNRElORk8oQ1VSUkVOVF9TQyksCi0JCQlkYXRhX2NvdW50LAotCQkJREFUQV9MRU4gLSBzY3NpX2dldF9yZXNpZChDVVJSRU5UX1NDKSwKLQkJCUdFVFNUQ05UKCkpOworCQkJR0VUU1RDTlQoKTsKIAogCQlDTURfSU5DX1JFU0lEKENVUlJFTlRfU0MsIGRhdGFfY291bnQpOwogCiAJCWRhdGFfY291bnQgLT0gQ1VSUkVOVF9TQy0+U0NwLnB0ciAtCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0dfQUREUkVTUyhDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyKTsKKwkJCVNHX0FERFJFU1MoQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcik7CiAJCXdoaWxlKGRhdGFfY291bnQ+MCkgewogCQkJQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlci0tOwogCQkJQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwrKzsKIAkJCWRhdGFfY291bnQgLT0gQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlci0+bGVuZ3RoOwogCQl9CiAJCUNVUlJFTlRfU0MtPlNDcC5wdHIgPSBTR19BRERSRVNTKENVUlJFTlRfU0MtPlNDcC5idWZmZXIpIC0KLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NvdW50OworCQkJZGF0YV9jb3VudDsKIAkJQ1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWwgPSBDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyLT5sZW5ndGggKwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfY291bnQ7CisJCQlkYXRhX2NvdW50OwogCX0KIAotCURQUklOVEsoZGVidWdfZGF0YW8sIERFQlVHX0xFQUQgImRhdGFvX2VuZDogcmVxdWVzdF9idWZmbGVuPSVkOyByZXNpZD0lZDsgc3RjbnQ9JWRcbiIsCi0JCUNNRElORk8oQ1VSUkVOVF9TQyksCi0JCXNjc2lfYnVmZmxlbihDVVJSRU5UX1NDKSwKLQkJc2NzaV9nZXRfcmVzaWQoQ1VSUkVOVF9TQyksCi0JCUdFVFNUQ05UKCkpOwotCiAJU0VUUE9SVChTWEZSQ1RMMCwgQ0gxfENMUkNIMXxDTFJTVENOVCk7CiAJU0VUUE9SVChTWEZSQ1RMMCwgQ0gxKTsKIApAQCAtMjQyMCw3ICsyMjAwLDcgQEAKIAkJU1RBVEU9cnN0aTsKIAkJU0VUUE9SVChTQ1NJU0VRLDApOwogCQlTRVRQT1JUKFNTVEFUMSxTQ1NJUlNUSSk7Ci0gIAl9IGVsc2UgaWYoc3RhdDAgJiBTRUxESSAmJiBQUkVWU1RBVEU9PWJ1c2ZyZWUpIHsKKwl9IGVsc2UgaWYgKHN0YXQwICYgU0VMREkgJiYgUFJFVlNUQVRFID09IGJ1c2ZyZWUpIHsKIAkJU1RBVEU9c2VsZGk7CiAJfSBlbHNlIGlmKHN0YXQwICYgU0VMRE8gJiYgQ1VSUkVOVF9TQyAmJiAoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgc2VsZWN0aW5nKSkgewogCQlTVEFURT1zZWxkbzsKQEAgLTI0NDUsOCArMjIyNSw3IEBACiAJfQogCiAJaWYoKHN0YXQwICYgU0VMREkpICYmIFNUQVRFIT1zZWxkaSAmJiAhZGF0YXBoYXNlKSB7Ci0JCXByaW50ayhJTkZPX0xFQUQgInJlc2VsZWN0aW9uIG1pc3NlZD8iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJZGlzcF9wb3J0cyhzaHBudCk7CisJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgQ1VSUkVOVF9TQywgInJlc2VsZWN0aW9uIG1pc3NlZD8iKTsKIAl9CiAKIAlpZihTVEFURSE9UFJFVlNUQVRFKSB7CkBAIC0yNDY0LDcgKzIyNDMsNyBAQAogICovCiBzdGF0aWMgdm9pZCBwYXJlcnJfcnVuKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewotCXByaW50ayhFUlJfTEVBRCAicGFyaXR5IGVycm9yXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywgInBhcml0eSBlcnJvclxuIik7CiAJZG9uZShzaHBudCwgRElEX1BBUklUWSA8PCAxNik7CiB9CiAKQEAgLTI0NzYsOCArMjI1NSw4IEBACiB7CiAJU2NzaV9DbW5kICpwdHI7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgImFoYTE1MnglZDogc2NzaSByZXNldCBpblxuIiwgSE9TVE5PKTsKLQkKKwlzaG9zdF9wcmludGsoS0VSTl9OT1RJQ0UsIHNocG50LCAic2NzaSByZXNldCBpblxuIik7CisKIAlwdHI9RElTQ09OTkVDVEVEX1NDOwogCXdoaWxlKHB0cikgewogCQlTY3NpX0NtbmQgKm5leHQgPSBTQ05FWFQocHRyKTsKQEAgLTI1MzksOCArMjMxOCw2IEBACiAKIAkJZGF0YXBoYXNlPXVwZGF0ZV9zdGF0ZShzaHBudCk7CiAKLQkJRFBSSU5USyhkZWJ1Z19waGFzZXMsIExFQUQgInN0YXJ0ICVzICVzKCVzKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgc3RhdGVzW1NUQVRFXS5uYW1lLCBzdGF0ZXNbUFJFVlNUQVRFXS5uYW1lLCBzdGF0ZXNbTEFTVFNUQVRFXS5uYW1lKTsKLQogCQkvKgogCQkgKiBlbmQgcHJldmlvdXMgc3RhdGUKIAkJICoKQEAgLTI1NjcsOSArMjM0NCw5IEBACiAJCWlmKGRhdGFwaGFzZSkgewogCQkJU0VUUE9SVChTU1RBVDAsIFJFUUlOSVQpOwogCQkJU0VUUE9SVChTQ1NJU0lHLCBHRVRQT1JUKFNDU0lTSUcpICYgUF9NQVNLKTsKLQkJCVNFVFBPUlQoU1NUQVQxLCBQSEFTRUNIRyk7ICAKKwkJCVNFVFBPUlQoU1NUQVQxLCBQSEFTRUNIRyk7CiAJCX0KLQkJCisKIAkJLyoKIAkJICogZW5hYmxlIFNQSU8gbW9kZSBpZiBwcmV2aW91cyBkaWRuJ3QgdXNlIGl0CiAJCSAqIGFuZCB0aGlzIG9uZSBkb2VzCkBAIC0yNTgxLDE0ICsyMzU4LDE0IEBACiAJCQlpZihDVVJSRU5UX1NDKQogCQkJCUNVUlJFTlRfU0MtPlNDcC5waGFzZSB8PSBzcGlvcmR5OwogCQl9Ci0JCQorCiAJCS8qCiAJCSAqIGluaXRpYWxpemUgZm9yIG5ldyBzdGF0ZQogCQkgKgogCQkgKi8KIAkJaWYoUFJFVlNUQVRFIT1TVEFURSAmJiBzdGF0ZXNbU1RBVEVdLmluaXQpCiAJCQlzdGF0ZXNbU1RBVEVdLmluaXQoc2hwbnQpOwotCQkKKwogCQkvKgogCQkgKiBoYW5kbGUgY3VycmVudCBzdGF0ZQogCQkgKgpAQCAtMjU5Niw4ICsyMzczLDkgQEAKIAkJaWYoc3RhdGVzW1NUQVRFXS5ydW4pCiAJCQlzdGF0ZXNbU1RBVEVdLnJ1bihzaHBudCk7CiAJCWVsc2UKLQkJCXByaW50ayhFUlJfTEVBRCAidW5leHBlY3RlZCBzdGF0ZSAoJXgpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBTVEFURSk7Ci0JCQorCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkJICAgICJ1bmV4cGVjdGVkIHN0YXRlICgleClcbiIsIFNUQVRFKTsKKwogCQkvKgogCQkgKiBzZXR1cCBjb250cm9sbGVyIHRvIGludGVycnVwdCBvbgogCQkgKiB0aGUgbmV4dCBleHBlY3RlZCBjb25kaXRpb24gYW5kCkBAIC0yNjEzLDcgKzIzOTEsNiBAQAogCQlIT1NUREFUQShzaHBudCktPnRpbWVbU1RBVEVdICs9IGppZmZpZXMtc3RhcnQ7CiAjZW5kaWYKIAotCQlEUFJJTlRLKGRlYnVnX3BoYXNlcywgTEVBRCAiZW5kICVzICVzKCVzKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgc3RhdGVzW1NUQVRFXS5uYW1lLCBzdGF0ZXNbUFJFVlNUQVRFXS5uYW1lLCBzdGF0ZXNbTEFTVFNUQVRFXS5uYW1lKTsKIAl9IHdoaWxlKHBlbmRpbmcpOwogCiAJLyoKQEAgLTI2MjYsMjg5ICsyNDAzLDQyIEBACiB9CiAKIAotLyogCisvKgogICogRHVtcCB0aGUgY3VycmVudCBkcml2ZXIgc3RhdHVzIGFuZCBwYW5pYwogICovCiBzdGF0aWMgdm9pZCBhaGExNTJ4X2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50LCBjaGFyICptc2cpCiB7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlxuYWhhMTUyeCVkOiAlc1xuIiwgSE9TVE5PLCBtc2cpOworCXNob3N0X3ByaW50ayhLRVJOX0VNRVJHLCBzaHBudCwgIiVzXG4iLCBtc2cpOwogCXNob3dfcXVldWVzKHNocG50KTsKIAlwYW5pYygiYWhhMTUyeCBwYW5pY1xuIik7CiB9CiAKIC8qCi0gKiBEaXNwbGF5IHJlZ2lzdGVycyBvZiBBSUMtNjI2MAotICovCi1zdGF0aWMgdm9pZCBkaXNwX3BvcnRzKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQotewotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpbnQgczsKLQotCXByaW50aygiXG4lczogJXMoJXMpICIsCi0JCUNVUlJFTlRfU0MgPyAiYnVzeSIgOiAid2FpdGluZyIsCi0JCXN0YXRlc1tTVEFURV0ubmFtZSwKLQkJc3RhdGVzW1BSRVZTVEFURV0ubmFtZSk7Ci0KLQlzID0gR0VUUE9SVChTQ1NJU0VRKTsKLQlwcmludGsoIlNDU0lTRVEoICIpOwotCWlmIChzICYgVEVNT0RFTykKLQkJcHJpbnRrKCJUQVJHRVQgTU9ERSAiKTsKLQlpZiAocyAmIEVOU0VMTykKLQkJcHJpbnRrKCJTRUxPICIpOwotCWlmIChzICYgRU5TRUxJKQotCQlwcmludGsoIlNFTEkgIik7Ci0JaWYgKHMgJiBFTlJFU0VMSSkKLQkJcHJpbnRrKCJSRVNFTEkgIik7Ci0JaWYgKHMgJiBFTkFVVE9BVE5PKQotCQlwcmludGsoIkFVVE9BVE5PICIpOwotCWlmIChzICYgRU5BVVRPQVROSSkKLQkJcHJpbnRrKCJBVVRPQVROSSAiKTsKLQlpZiAocyAmIEVOQVVUT0FUTlApCi0JCXByaW50aygiQVVUT0FUTlAgIik7Ci0JaWYgKHMgJiBTQ1NJUlNUTykKLQkJcHJpbnRrKCJTQ1NJUlNUTyAiKTsKLQlwcmludGsoIik7Iik7Ci0KLQlwcmludGsoIiBTQ1NJU0lHKCIpOwotCXMgPSBHRVRQT1JUKFNDU0lTSUcpOwotCXN3aXRjaCAocyAmIFBfTUFTSykgewotCWNhc2UgUF9EQVRBTzoKLQkJcHJpbnRrKCJEQVRBIE9VVCIpOwotCQlicmVhazsKLQljYXNlIFBfREFUQUk6Ci0JCXByaW50aygiREFUQSBJTiIpOwotCQlicmVhazsKLQljYXNlIFBfQ01EOgotCQlwcmludGsoIkNPTU1BTkQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQX1NUQVRVUzoKLQkJcHJpbnRrKCJTVEFUVVMiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQX01TR086Ci0JCXByaW50aygiTUVTU0FHRSBPVVQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQX01TR0k6Ci0JCXByaW50aygiTUVTU0FHRSBJTiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIippbnZhbGlkKiIpOwotCQlicmVhazsKLQl9Ci0KLQlwcmludGsoIik7ICIpOwotCi0JcHJpbnRrKCJJTlRTVEFUICglcyk7ICIsIFRFU1RISShETUFTVEFULCBJTlRTVEFUKSA/ICJoaSIgOiAibG8iKTsKLQotCXByaW50aygiU1NUQVQoICIpOwotCXMgPSBHRVRQT1JUKFNTVEFUMCk7Ci0JaWYgKHMgJiBUQVJHRVQpCi0JCXByaW50aygiVEFSR0VUICIpOwotCWlmIChzICYgU0VMRE8pCi0JCXByaW50aygiU0VMRE8gIik7Ci0JaWYgKHMgJiBTRUxESSkKLQkJcHJpbnRrKCJTRUxESSAiKTsKLQlpZiAocyAmIFNFTElOR08pCi0JCXByaW50aygiU0VMSU5HTyAiKTsKLQlpZiAocyAmIFNXUkFQKQotCQlwcmludGsoIlNXUkFQICIpOwotCWlmIChzICYgU0RPTkUpCi0JCXByaW50aygiU0RPTkUgIik7Ci0JaWYgKHMgJiBTUElPUkRZKQotCQlwcmludGsoIlNQSU9SRFkgIik7Ci0JaWYgKHMgJiBETUFET05FKQotCQlwcmludGsoIkRNQURPTkUgIik7Ci0KLQlzID0gR0VUUE9SVChTU1RBVDEpOwotCWlmIChzICYgU0VMVE8pCi0JCXByaW50aygiU0VMVE8gIik7Ci0JaWYgKHMgJiBBVE5UQVJHKQotCQlwcmludGsoIkFUTlRBUkcgIik7Ci0JaWYgKHMgJiBTQ1NJUlNUSSkKLQkJcHJpbnRrKCJTQ1NJUlNUSSAiKTsKLQlpZiAocyAmIFBIQVNFTUlTKQotCQlwcmludGsoIlBIQVNFTUlTICIpOwotCWlmIChzICYgQlVTRlJFRSkKLQkJcHJpbnRrKCJCVVNGUkVFICIpOwotCWlmIChzICYgU0NTSVBFUlIpCi0JCXByaW50aygiU0NTSVBFUlIgIik7Ci0JaWYgKHMgJiBQSEFTRUNIRykKLQkJcHJpbnRrKCJQSEFTRUNIRyAiKTsKLQlpZiAocyAmIFJFUUlOSVQpCi0JCXByaW50aygiUkVRSU5JVCAiKTsKLQlwcmludGsoIik7ICIpOwotCi0KLQlwcmludGsoIlNTVEFUKCAiKTsKLQotCXMgPSBHRVRQT1JUKFNTVEFUMCkgJiBHRVRQT1JUKFNJTU9ERTApOwotCi0JaWYgKHMgJiBUQVJHRVQpCi0JCXByaW50aygiVEFSR0VUICIpOwotCWlmIChzICYgU0VMRE8pCi0JCXByaW50aygiU0VMRE8gIik7Ci0JaWYgKHMgJiBTRUxESSkKLQkJcHJpbnRrKCJTRUxESSAiKTsKLQlpZiAocyAmIFNFTElOR08pCi0JCXByaW50aygiU0VMSU5HTyAiKTsKLQlpZiAocyAmIFNXUkFQKQotCQlwcmludGsoIlNXUkFQICIpOwotCWlmIChzICYgU0RPTkUpCi0JCXByaW50aygiU0RPTkUgIik7Ci0JaWYgKHMgJiBTUElPUkRZKQotCQlwcmludGsoIlNQSU9SRFkgIik7Ci0JaWYgKHMgJiBETUFET05FKQotCQlwcmludGsoIkRNQURPTkUgIik7Ci0KLQlzID0gR0VUUE9SVChTU1RBVDEpICYgR0VUUE9SVChTSU1PREUxKTsKLQotCWlmIChzICYgU0VMVE8pCi0JCXByaW50aygiU0VMVE8gIik7Ci0JaWYgKHMgJiBBVE5UQVJHKQotCQlwcmludGsoIkFUTlRBUkcgIik7Ci0JaWYgKHMgJiBTQ1NJUlNUSSkKLQkJcHJpbnRrKCJTQ1NJUlNUSSAiKTsKLQlpZiAocyAmIFBIQVNFTUlTKQotCQlwcmludGsoIlBIQVNFTUlTICIpOwotCWlmIChzICYgQlVTRlJFRSkKLQkJcHJpbnRrKCJCVVNGUkVFICIpOwotCWlmIChzICYgU0NTSVBFUlIpCi0JCXByaW50aygiU0NTSVBFUlIgIik7Ci0JaWYgKHMgJiBQSEFTRUNIRykKLQkJcHJpbnRrKCJQSEFTRUNIRyAiKTsKLQlpZiAocyAmIFJFUUlOSVQpCi0JCXByaW50aygiUkVRSU5JVCAiKTsKLQlwcmludGsoIik7ICIpOwotCi0JcHJpbnRrKCJTWEZSQ1RMMCggIik7Ci0KLQlzID0gR0VUUE9SVChTWEZSQ1RMMCk7Ci0JaWYgKHMgJiBTQ1NJRU4pCi0JCXByaW50aygiU0NTSUVOICIpOwotCWlmIChzICYgRE1BRU4pCi0JCXByaW50aygiRE1BRU4gIik7Ci0JaWYgKHMgJiBDSDEpCi0JCXByaW50aygiQ0gxICIpOwotCWlmIChzICYgQ0xSU1RDTlQpCi0JCXByaW50aygiQ0xSU1RDTlQgIik7Ci0JaWYgKHMgJiBTUElPRU4pCi0JCXByaW50aygiU1BJT0VOICIpOwotCWlmIChzICYgQ0xSQ0gxKQotCQlwcmludGsoIkNMUkNIMSAiKTsKLQlwcmludGsoIik7ICIpOwotCi0JcHJpbnRrKCJTSUdOQUwoICIpOwotCi0JcyA9IEdFVFBPUlQoU0NTSVNJRyk7Ci0JaWYgKHMgJiBTSUdfQVROSSkKLQkJcHJpbnRrKCJBVE5JICIpOwotCWlmIChzICYgU0lHX1NFTEkpCi0JCXByaW50aygiU0VMSSAiKTsKLQlpZiAocyAmIFNJR19CU1lJKQotCQlwcmludGsoIkJTWUkgIik7Ci0JaWYgKHMgJiBTSUdfUkVRSSkKLQkJcHJpbnRrKCJSRVFJICIpOwotCWlmIChzICYgU0lHX0FDS0kpCi0JCXByaW50aygiQUNLSSAiKTsKLQlwcmludGsoIik7ICIpOwotCi0JcHJpbnRrKCJTRUxJRCAoJTAyeCksICIsIEdFVFBPUlQoU0VMSUQpKTsKLQotCXByaW50aygiU1RDTlQgKCVkKSwgIiwgR0VUU1RDTlQoKSk7Ci0JCi0JcHJpbnRrKCJTU1RBVDIoICIpOwotCi0JcyA9IEdFVFBPUlQoU1NUQVQyKTsKLQlpZiAocyAmIFNPRkZTRVQpCi0JCXByaW50aygiU09GRlNFVCAiKTsKLQlpZiAocyAmIFNFTVBUWSkKLQkJcHJpbnRrKCJTRU1QVFkgIik7Ci0JaWYgKHMgJiBTRlVMTCkKLQkJcHJpbnRrKCJTRlVMTCAiKTsKLQlwcmludGsoIik7IFNGQ05UICglZCk7ICIsIHMgJiAoU0ZVTEwgfCBTRkNOVCkpOwotCi0JcyA9IEdFVFBPUlQoU1NUQVQzKTsKLQlwcmludGsoIlNDU0lDTlQgKCVkKSwgT0ZGQ05UKCVkKSwgIiwgKHMgJiAweGYwKSA+PiA0LCBzICYgMHgwZik7Ci0KLQlwcmludGsoIlNTVEFUNCggIik7Ci0JcyA9IEdFVFBPUlQoU1NUQVQ0KTsKLQlpZiAocyAmIFNZTkNFUlIpCi0JCXByaW50aygiU1lOQ0VSUiAiKTsKLQlpZiAocyAmIEZXRVJSKQotCQlwcmludGsoIkZXRVJSICIpOwotCWlmIChzICYgRlJFUlIpCi0JCXByaW50aygiRlJFUlIgIik7Ci0JcHJpbnRrKCIpOyAiKTsKLQotCXByaW50aygiRE1BQ05UUkwwKCAiKTsKLQlzID0gR0VUUE9SVChETUFDTlRSTDApOwotCXByaW50aygiJXMgIiwgcyAmIF84QklUID8gIjhCSVQiIDogIjE2QklUIik7Ci0JcHJpbnRrKCIlcyAiLCBzICYgRE1BID8gIkRNQSIgOiAiUElPIik7Ci0JcHJpbnRrKCIlcyAiLCBzICYgV1JJVEVfUkVBRCA/ICJXUklURSIgOiAiUkVBRCIpOwotCWlmIChzICYgRU5ETUEpCi0JCXByaW50aygiRU5ETUEgIik7Ci0JaWYgKHMgJiBJTlRFTikKLQkJcHJpbnRrKCJJTlRFTiAiKTsKLQlpZiAocyAmIFJTVEZJRk8pCi0JCXByaW50aygiUlNURklGTyAiKTsKLQlpZiAocyAmIFNXSU5UKQotCQlwcmludGsoIlNXSU5UICIpOwotCXByaW50aygiKTsgIik7Ci0KLQlwcmludGsoIkRNQVNUQVQoICIpOwotCXMgPSBHRVRQT1JUKERNQVNUQVQpOwotCWlmIChzICYgQVRET05FKQotCQlwcmludGsoIkFURE9ORSAiKTsKLQlpZiAocyAmIFdPUkRSRFkpCi0JCXByaW50aygiV09SRFJEWSAiKTsKLQlpZiAocyAmIERGSUZPRlVMTCkKLQkJcHJpbnRrKCJERklGT0ZVTEwgIik7Ci0JaWYgKHMgJiBERklGT0VNUCkKLQkJcHJpbnRrKCJERklGT0VNUCAiKTsKLQlwcmludGsoIilcbiIpOwotI2VuZGlmCi19Ci0KLS8qCiAgKiBkaXNwbGF5IGVuYWJsZWQgaW50ZXJydXB0cwogICovCiBzdGF0aWMgdm9pZCBkaXNwX2VuaW50cihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKLQlpbnQgczsKKwlpbnQgczAsIHMxOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgImVuYWJsZWQgaW50ZXJydXB0cyAoICIpOworCXMwID0gR0VUUE9SVChTSU1PREUwKTsKKwlzMSA9IEdFVFBPUlQoU0lNT0RFMSk7CiAKLQlzID0gR0VUUE9SVChTSU1PREUwKTsKLQlpZiAocyAmIEVOU0VMRE8pCi0JCXByaW50aygiRU5TRUxETyAiKTsKLQlpZiAocyAmIEVOU0VMREkpCi0JCXByaW50aygiRU5TRUxESSAiKTsKLQlpZiAocyAmIEVOU0VMSU5HTykKLQkJcHJpbnRrKCJFTlNFTElOR08gIik7Ci0JaWYgKHMgJiBFTlNXUkFQKQotCQlwcmludGsoIkVOU1dSQVAgIik7Ci0JaWYgKHMgJiBFTlNET05FKQotCQlwcmludGsoIkVOU0RPTkUgIik7Ci0JaWYgKHMgJiBFTlNQSU9SRFkpCi0JCXByaW50aygiRU5TUElPUkRZICIpOwotCWlmIChzICYgRU5ETUFET05FKQotCQlwcmludGsoIkVORE1BRE9ORSAiKTsKLQotCXMgPSBHRVRQT1JUKFNJTU9ERTEpOwotCWlmIChzICYgRU5TRUxUSU1PKQotCQlwcmludGsoIkVOU0VMVElNTyAiKTsKLQlpZiAocyAmIEVOQVROVEFSRykKLQkJcHJpbnRrKCJFTkFUTlRBUkcgIik7Ci0JaWYgKHMgJiBFTlBIQVNFTUlTKQotCQlwcmludGsoIkVOUEhBU0VNSVMgIik7Ci0JaWYgKHMgJiBFTkJVU0ZSRUUpCi0JCXByaW50aygiRU5CVVNGUkVFICIpOwotCWlmIChzICYgRU5TQ1NJUEVSUikKLQkJcHJpbnRrKCJFTlNDU0lQRVJSICIpOwotCWlmIChzICYgRU5QSEFTRUNIRykKLQkJcHJpbnRrKCJFTlBIQVNFQ0hHICIpOwotCWlmIChzICYgRU5SRVFJTklUKQotCQlwcmludGsoIkVOUkVRSU5JVCAiKTsKLQlwcmludGsoIilcbiIpOworCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBzaHBudCwKKwkJICAgICAiZW5hYmxlZCBpbnRlcnJ1cHRzICglcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzKVxuIiwKKwkJICAgICAoczAgJiBFTlNFTERPKSA/ICJFTlNFTERPICIgOiAiIiwKKwkJICAgICAoczAgJiBFTlNFTERJKSA/ICJFTlNFTERJICIgOiAiIiwKKwkJICAgICAoczAgJiBFTlNFTElOR08pID8gIkVOU0VMSU5HTyAiIDogIiIsCisJCSAgICAgKHMwICYgRU5TV1JBUCkgPyAiRU5TV1JBUCAiIDogIiIsCisJCSAgICAgKHMwICYgRU5TRE9ORSkgPyAiRU5TRE9ORSAiIDogIiIsCisJCSAgICAgKHMwICYgRU5TUElPUkRZKSA/ICJFTlNQSU9SRFkgIiA6ICIiLAorCQkgICAgIChzMCAmIEVORE1BRE9ORSkgPyAiRU5ETUFET05FICIgOiAiIiwKKwkJICAgICAoczEgJiBFTlNFTFRJTU8pID8gIkVOU0VMVElNTyAiIDogIiIsCisJCSAgICAgKHMxICYgRU5BVE5UQVJHKSA/ICJFTkFUTlRBUkcgIiA6ICIiLAorCQkgICAgIChzMSAmIEVOUEhBU0VNSVMpID8gIkVOUEhBU0VNSVMgIiA6ICIiLAorCQkgICAgIChzMSAmIEVOQlVTRlJFRSkgPyAiRU5CVVNGUkVFICIgOiAiIiwKKwkJICAgICAoczEgJiBFTlNDU0lQRVJSKSA/ICJFTlNDU0lQRVJSICIgOiAiIiwKKwkJICAgICAoczEgJiBFTlBIQVNFQ0hHKSA/ICJFTlBIQVNFQ0hHICIgOiAiIiwKKwkJICAgICAoczEgJiBFTlJFUUlOSVQpID8gIkVOUkVRSU5JVCAiIDogIiIpOwogfQogCiAvKgpAQCAtMjkxNiwzNiArMjQ0NiwyMSBAQAogICovCiBzdGF0aWMgdm9pZCBzaG93X2NvbW1hbmQoU2NzaV9DbW5kICpwdHIpCiB7Ci0Jc2NtZF9wcmludGsoS0VSTl9ERUJVRywgcHRyLCAiJXA6IGNtbmQ9KCIsIHB0cik7Ci0KLQlfX3Njc2lfcHJpbnRfY29tbWFuZChwdHItPmNtbmQpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIik7IHJlcXVlc3RfYnVmZmxlbj0lZDsgcmVzaWQ9JWQ7IHBoYXNlIHwiLAotCSAgICAgICBzY3NpX2J1ZmZsZW4ocHRyKSwgc2NzaV9nZXRfcmVzaWQocHRyKSk7Ci0KLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBub3RfaXNzdWVkKQotCQlwcmludGsoIm5vdCBpc3N1ZWR8Iik7Ci0JaWYgKHB0ci0+U0NwLnBoYXNlICYgc2VsZWN0aW5nKQotCQlwcmludGsoInNlbGVjdGluZ3wiKTsKLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBpZGVudGlmaWVkKQotCQlwcmludGsoImlkZW50aWZpZWR8Iik7Ci0JaWYgKHB0ci0+U0NwLnBoYXNlICYgZGlzY29ubmVjdGVkKQotCQlwcmludGsoImRpc2Nvbm5lY3RlZHwiKTsKLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBjb21wbGV0ZWQpCi0JCXByaW50aygiY29tcGxldGVkfCIpOwotCWlmIChwdHItPlNDcC5waGFzZSAmIHNwaW9yZHkpCi0JCXByaW50aygic3Bpb3JkeXwiKTsKLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBzeW5jbmVnKQotCQlwcmludGsoInN5bmNuZWd8Iik7Ci0JaWYgKHB0ci0+U0NwLnBoYXNlICYgYWJvcnRlZCkKLQkJcHJpbnRrKCJhYm9ydGVkfCIpOwotCWlmIChwdHItPlNDcC5waGFzZSAmIHJlc2V0dGVkKQotCQlwcmludGsoInJlc2V0dGVkfCIpOwotCWlmKCBTQ0RBVEEocHRyKSApIHsKLQkJcHJpbnRrKCI7IG5leHQ9MHglcFxuIiwgU0NORVhUKHB0cikpOwotCX0gZWxzZSB7Ci0JCXByaW50aygiOyBuZXh0PShob3N0IHNjcmliYmxlIE5VTEwpXG4iKTsKLQl9CisJc2NzaV9wcmludF9jb21tYW5kKHB0cik7CisJc2NtZF9wcmludGsoS0VSTl9ERUJVRywgcHRyLAorCQkgICAgInJlcXVlc3RfYnVmZmxlbj0lZDsgcmVzaWQ9JWQ7ICIKKwkJICAgICJwaGFzZSB8JXMlcyVzJXMlcyVzJXMlcyVzOyBuZXh0PTB4JXAiLAorCQkgICAgc2NzaV9idWZmbGVuKHB0ciksIHNjc2lfZ2V0X3Jlc2lkKHB0ciksCisJCSAgICAocHRyLT5TQ3AucGhhc2UgJiBub3RfaXNzdWVkKSA/ICJub3QgaXNzdWVkfCIgOiAiIiwKKwkJICAgIChwdHItPlNDcC5waGFzZSAmIHNlbGVjdGluZykgPyAic2VsZWN0aW5nfCIgOiAiIiwKKwkJICAgIChwdHItPlNDcC5waGFzZSAmIGlkZW50aWZpZWQpID8gImlkZW50aWZpZWR8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgZGlzY29ubmVjdGVkKSA/ICJkaXNjb25uZWN0ZWR8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgY29tcGxldGVkKSA/ICJjb21wbGV0ZWR8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgc3Bpb3JkeSkgPyAic3Bpb3JkeXwiIDogIiIsCisJCSAgICAocHRyLT5TQ3AucGhhc2UgJiBzeW5jbmVnKSA/ICJzeW5jbmVnfCIgOiAiIiwKKwkJICAgIChwdHItPlNDcC5waGFzZSAmIGFib3J0ZWQpID8gImFib3J0ZWR8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgcmVzZXR0ZWQpID8gInJlc2V0dGVkfCIgOiAiIiwKKwkJICAgIChTQ0RBVEEocHRyKSkgPyBTQ05FWFQocHRyKSA6IE5VTEwpOwogfQogCiAvKgpAQCAtMjk3Miw3ICsyNDg3LDYgQEAKIAlmb3IgKHB0ciA9IERJU0NPTk5FQ1RFRF9TQzsgcHRyOyBwdHIgPSBTQ0RBVEEocHRyKSA/IFNDTkVYVChwdHIpIDogTlVMTCkKIAkJc2hvd19jb21tYW5kKHB0cik7CiAKLQlkaXNwX3BvcnRzKHNocG50KTsKIAlkaXNwX2VuaW50cihzaHBudCk7CiB9CiAKQEAgLTMyNzYsMTUgKzI3OTAsNiBAQAogCWlmKCFzaHBudCB8fCAhYnVmZmVyIHx8IGxlbmd0aDw4IHx8IHN0cm5jbXAoImFoYTE1MnggIiwgYnVmZmVyLCA4KSE9MCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JaWYobGVuZ3RoPjE0ICYmIHN0cm5jbXAoImRlYnVnICIsIGJ1ZmZlcis4LCA2KT09MCkgewotCQlpbnQgZGVidWcgPSBIT1NUREFUQShzaHBudCktPmRlYnVnOwotCi0JCUhPU1REQVRBKHNocG50KS0+ZGVidWcgPSBzaW1wbGVfc3RydG91bChidWZmZXIrMTQsIE5VTEwsIDApOwotCi0JCXByaW50ayhLRVJOX0lORk8gImFoYTE1MnglZDogZGVidWdnaW5nIG9wdGlvbnMgc2V0IHRvIDB4JTA0eCAod2VyZSAweCUwNHgpXG4iLCBIT1NUTk8sIEhPU1REQVRBKHNocG50KS0+ZGVidWcsIGRlYnVnKTsKLQl9IGVsc2UKLSNlbmRpZgogI2lmIGRlZmluZWQoQUhBMTUyWF9TVEFUKQogCWlmKGxlbmd0aD4xMyAmJiBzdHJuY21wKCJyZXNldCIsIGJ1ZmZlcis4LCA1KT09MCkgewogCQlpbnQgaTsKQEAgLTMzMDIsNyArMjgwNyw3IEBACiAJCQlIT1NUREFUQShzaHBudCktPnRpbWVbaV09MDsKIAkJfQogCi0JCXByaW50ayhLRVJOX0lORk8gImFoYTE1MnglZDogc3RhdHMgcmVzZXRlZC5cbiIsIEhPU1ROTyk7CisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNocG50LCAiYWhhMTUyeDogc3RhdHMgcmVzZXQuXG4iKTsKIAogCX0gZWxzZQogI2VuZGlmCkBAIC0zMzQzLDI5ICsyODQ4LDYgQEAKIAkJCQkJKCgoSE9TVERBVEEoc2hwbnQpLT5zeW5jcmF0ZVtpXSAmIDB4NzApID4+IDQpICsgMikgKiA1MCwKIAkJCQkgICAgSE9TVERBVEEoc2hwbnQpLT5zeW5jcmF0ZVtpXSAmIDB4MGYpOwogCX0KLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0jZGVmaW5lIFBERUJVRyhmbGFncyx0eHQpIFwKLQlpZihIT1NUREFUQShzaHBudCktPmRlYnVnICYgZmxhZ3MpIFNQUklOVEYoIiglcykgIiwgdHh0KTsKLQotCVNQUklOVEYoImVuYWJsZWQgZGVidWdnaW5nIG9wdGlvbnM6ICIpOwotCi0JUERFQlVHKGRlYnVnX3Byb2NpbmZvLCAicHJvY2luZm8iKTsKLQlQREVCVUcoZGVidWdfcXVldWUsICJxdWV1ZSIpOwotCVBERUJVRyhkZWJ1Z19pbnRyLCAiaW50ZXJydXB0Iik7Ci0JUERFQlVHKGRlYnVnX3NlbGVjdGlvbiwgInNlbGVjdGlvbiIpOwotCVBERUJVRyhkZWJ1Z19tc2dvLCAibWVzc2FnZSBvdXQiKTsKLQlQREVCVUcoZGVidWdfbXNnaSwgIm1lc3NhZ2UgaW4iKTsKLQlQREVCVUcoZGVidWdfc3RhdHVzLCAic3RhdHVzIik7Ci0JUERFQlVHKGRlYnVnX2NtZCwgImNvbW1hbmQiKTsKLQlQREVCVUcoZGVidWdfZGF0YWksICJkYXRhIGluIik7Ci0JUERFQlVHKGRlYnVnX2RhdGFvLCAiZGF0YSBvdXQiKTsKLQlQREVCVUcoZGVidWdfZWgsICJlaCIpOwotCVBERUJVRyhkZWJ1Z19sb2NraW5nLCAibG9ja3MiKTsKLQlQREVCVUcoZGVidWdfcGhhc2VzLCAicGhhc2VzIik7Ci0KLQlTUFJJTlRGKCJcbiIpOwotI2VuZGlmCi0KIAlTUFJJTlRGKCJcbnF1ZXVlIHN0YXR1czpcbiIpOwogCURPX0xPQ0soZmxhZ3MpOwogCWlmIChJU1NVRV9TQykgewpAQCAtMzM5Myw4ICsyODc1LDggQEAKIAogI2lmIGRlZmluZWQoQUhBMTUyWF9TVEFUKQogCVNQUklOVEYoInN0YXRpc3RpY3M6XG4iCi0JICAgICAgICAidG90YWwgY29tbWFuZHM6ICAgICAgICAgICAgICAgJWRcbiIKLQkgICAgICAgICJkaXNjb25uZWN0aW9uczogICAgICAgICAgICAgICAlZFxuIgorCQkidG90YWwgY29tbWFuZHM6ICAgICAgICAgICAgICAgJWRcbiIKKwkJImRpc2Nvbm5lY3Rpb25zOiAgICAgICAgICAgICAgICVkXG4iCiAJCSJidXNmcmVlIHdpdGggY2hlY2sgY29uZGl0aW9uOiAlZFxuIgogCQkiYnVzZnJlZSB3aXRob3V0IG9sZCBjb21tYW5kOiAgJWRcbiIKIAkJImJ1c2ZyZWUgd2l0aG91dCBuZXcgY29tbWFuZDogICVkXG4iCkBAIC0zNDEzLDcgKzI4OTUsNyBAQAogCQlIT1NUREFUQShzaHBudCktPmJ1c2ZyZWVfd2l0aG91dF9hbnlfYWN0aW9uKTsKIAlmb3IoaT0wOyBpPG1heHN0YXRlOyBpKyspIHsKIAkJU1BSSU5URigiJS0xMHMgJS0xMmQgJS0xMmQgJS0xMmxkXG4iLAotCQkgICAgICAgIHN0YXRlc1tpXS5uYW1lLAorCQkJc3RhdGVzW2ldLm5hbWUsCiAJCQlIT1NUREFUQShzaHBudCktPmNvdW50X3RyYW5zW2ldLAogCQkJSE9TVERBVEEoc2hwbnQpLT5jb3VudFtpXSwKIAkJCUhPU1REQVRBKHNocG50KS0+dGltZVtpXSk7CkBAIC0zNjcxLDI1ICszMTUzLDE5IEBACiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uc3luY2hyb25vdXMgPSBhaGExNTJ4WzVdOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlbGF5ICAgICAgID0gYWhhMTUyeFs2XTsKIAkJCXNldHVwW3NldHVwX2NvdW50XS5leHRfdHJhbnMgICA9IGFoYTE1MnhbN107Ci0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlYnVnICAgICAgID0gYWhhMTUyeFs4XTsKLSNlbmRpZgotCSAgCX0gZWxzZSBpZihpb1swXSE9MCB8fCBpcnFbMF0hPTApIHsKKwkJfSBlbHNlIGlmIChpb1swXSAhPSAwIHx8IGlycVswXSAhPSAwKSB7CiAJCQlpZihpb1swXSE9MCkgIHNldHVwW3NldHVwX2NvdW50XS5pb19wb3J0ID0gaW9bMF07CiAJCQlpZihpcnFbMF0hPTApIHNldHVwW3NldHVwX2NvdW50XS5pcnEgICAgID0gaXJxWzBdOwogCi0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnNjc2lpZCAgICAgID0gc2NzaWlkWzBdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5yZWNvbm5lY3QgICA9IHJlY29ubmVjdFswXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0ucGFyaXR5ICAgICAgPSBwYXJpdHlbMF07Ci0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gc3luY1swXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBkZWxheVswXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBleHR0cmFuc1swXTsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBkZWJ1Z1swXTsKLSNlbmRpZgorCQkJc2V0dXBbc2V0dXBfY291bnRdLnNjc2lpZCAgICAgID0gc2NzaWlkWzBdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnJlY29ubmVjdCAgID0gcmVjb25uZWN0WzBdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnBhcml0eSAgICAgID0gcGFyaXR5WzBdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gc3luY1swXTsKKwkJCXNldHVwW3NldHVwX2NvdW50XS5kZWxheSAgICAgICA9IGRlbGF5WzBdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLmV4dF90cmFucyAgID0gZXh0dHJhbnNbMF07CiAJCX0KIAotICAgICAgICAgIAlpZiAoY2hlY2tzZXR1cCgmc2V0dXBbc2V0dXBfY291bnRdKSkKKwkJaWYgKGNoZWNrc2V0dXAoJnNldHVwW3NldHVwX2NvdW50XSkpCiAJCQlzZXR1cF9jb3VudCsrOwogCQllbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgImFoYTE1Mng6IGludmFsaWQgbW9kdWxlIHBhcmFtcyBpbz0weCV4LCBpcnE9JWQsc2NzaWlkPSVkLHJlY29ubmVjdD0lZCxwYXJpdHk9JWQsc3luYz0lZCxkZWxheT0lZCxleHR0cmFucz0lZFxuIiwKQEAgLTM3MTQsMjIgKzMxOTAsMTYgQEAKIAkJCXNldHVwW3NldHVwX2NvdW50XS5zeW5jaHJvbm91cyA9IGFoYTE1MngxWzVdOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlbGF5ICAgICAgID0gYWhhMTUyeDFbNl07CiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBhaGExNTJ4MVs3XTsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBhaGExNTJ4MVs4XTsKLSNlbmRpZgotCSAgCX0gZWxzZSBpZihpb1sxXSE9MCB8fCBpcnFbMV0hPTApIHsKKwkJfSBlbHNlIGlmIChpb1sxXSAhPSAwIHx8IGlycVsxXSAhPSAwKSB7CiAJCQlpZihpb1sxXSE9MCkgIHNldHVwW3NldHVwX2NvdW50XS5pb19wb3J0ID0gaW9bMV07CiAJCQlpZihpcnFbMV0hPTApIHNldHVwW3NldHVwX2NvdW50XS5pcnEgICAgID0gaXJxWzFdOwogCi0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnNjc2lpZCAgICAgID0gc2NzaWlkWzFdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5yZWNvbm5lY3QgICA9IHJlY29ubmVjdFsxXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0ucGFyaXR5ICAgICAgPSBwYXJpdHlbMV07Ci0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gc3luY1sxXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBkZWxheVsxXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBleHR0cmFuc1sxXTsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBkZWJ1Z1sxXTsKLSNlbmRpZgorCQkJc2V0dXBbc2V0dXBfY291bnRdLnNjc2lpZCAgICAgID0gc2NzaWlkWzFdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnJlY29ubmVjdCAgID0gcmVjb25uZWN0WzFdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnBhcml0eSAgICAgID0gcGFyaXR5WzFdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gc3luY1sxXTsKKwkJCXNldHVwW3NldHVwX2NvdW50XS5kZWxheSAgICAgICA9IGRlbGF5WzFdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLmV4dF90cmFucyAgID0gZXh0dHJhbnNbMV07CiAJCX0KIAkJaWYgKGNoZWNrc2V0dXAoJnNldHVwW3NldHVwX2NvdW50XSkpCiAJCQlzZXR1cF9jb3VudCsrOwpAQCAtMzc3Niw5ICszMjQ2LDYgQEAKIAkJCXNldHVwW3NldHVwX2NvdW50XS5zeW5jaHJvbm91cyA9IDE7CiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBERUxBWV9ERUZBVUxUOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmV4dF90cmFucyAgID0gMDsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBERUJVR19ERUZBVUxUOwotI2VuZGlmCiAjaWYgZGVmaW5lZChfX0lTQVBOUF9fKQogCQkJcG5wZGV2W3NldHVwX2NvdW50XSAgICAgICAgICAgID0gZGV2OwogI2VuZGlmCkBAIC0zODQ3LDkgKzMzMTQsNiBAQAogCQkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gY29uZi5jZl9zeW5jbmVnOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlbGF5ID0gREVMQVlfREVGQVVMVDsKIAkJCXNldHVwW3NldHVwX2NvdW50XS5leHRfdHJhbnMgPSAwOwotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQkJCXNldHVwW3NldHVwX2NvdW50XS5kZWJ1ZyA9IERFQlVHX0RFRkFVTFQ7Ci0jZW5kaWYKIAkJCXNldHVwX2NvdW50Kys7CiAKIAkJfQpAQCAtMzkwMywxMSArMzM2Nyw4IEBACiAjaWYgIWRlZmluZWQoTU9EVUxFKQogc3RhdGljIGludCBfX2luaXQgYWhhMTUyeF9zZXR1cChjaGFyICpzdHIpCiB7Ci0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWludCBpbnRzWzExXTsKLSNlbHNlCiAJaW50IGludHNbMTBdOwotI2VuZGlmCisKIAlnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOwogCiAJaWYoc2V0dXBfY291bnQ+PUFSUkFZX1NJWkUoc2V0dXApKSB7CkBAIC0zOTI0LDE2ICszMzg1LDkgQEAKIAlzZXR1cFtzZXR1cF9jb3VudF0uc3luY2hyb25vdXMgPSBpbnRzWzBdID49IDYgPyBpbnRzWzZdIDogMTsKIAlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBpbnRzWzBdID49IDcgPyBpbnRzWzddIDogREVMQVlfREVGQVVMVDsKIAlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBpbnRzWzBdID49IDggPyBpbnRzWzhdIDogMDsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0Jc2V0dXBbc2V0dXBfY291bnRdLmRlYnVnICAgICAgID0gaW50c1swXSA+PSA5ID8gaW50c1s5XSA6IERFQlVHX0RFRkFVTFQ7Ci0JaWYgKGludHNbMF0gPiA5KSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiYWhhMTUyeDogdXNhZ2U6IGFoYTE1Mng9PElPQkFTRT5bLDxJUlE+Wyw8U0NTSSBJRD4iCi0JCSAgICAgICAiWyw8UkVDT05ORUNUPlssPFBBUklUWT5bLDxTWU5DSFJPTk9VUz5bLDxERUxBWT5bLDxFWFRfVFJBTlM+Wyw8REVCVUc+XV1dXV1dXV1cbiIpOwotI2Vsc2UKIAlpZiAoaW50c1swXSA+IDgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKn0qLwogCQlwcmludGsoS0VSTl9OT1RJQ0UgImFoYTE1Mng6IHVzYWdlOiBhaGExNTJ4PTxJT0JBU0U+Wyw8SVJRPlssPFNDU0kgSUQ+IgogCQkgICAgICAgIlssPFJFQ09OTkVDVD5bLDxQQVJJVFk+Wyw8U1lOQ0hST05PVVM+Wyw8REVMQVk+Wyw8RVhUX1RSQU5TPl1dXV1dXV1cbiIpOwotI2VuZGlmCiAJfSBlbHNlIHsKIAkJc2V0dXBfY291bnQrKzsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jIGIvZHJpdmVycy9zY3NpL2FoYTE3NDAuYwppbmRleCA1ZjMxMDE3Li4zMWFjZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNzQwLmMKQEAgLTUzMSw3ICs1MzEsNyBAQAogICogcXVpZXQgYXMgcG9zc2libGUuLi4KICAqLwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFoYTE3NDBfdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwppbmRleCBlZDMzMzY2OS4uZDVjN2IxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCkBAIC05MjUsNiArOTI1LDcgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYWhkX2xpbnV4X3NsYXZlX2NvbmZpZ3VyZSwKIAkudGFyZ2V0X2FsbG9jCQk9IGFoZF9saW51eF90YXJnZXRfYWxsb2MsCiAJLnRhcmdldF9kZXN0cm95CQk9IGFoZF9saW51eF90YXJnZXRfZGVzdHJveSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQnVzIERNQSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTQ2OCwxMiArMTQ2OSw5IEBACiAKIAlzd2l0Y2ggKChkZXYtPmZsYWdzICYgKEFIRF9ERVZfUV9CQVNJQ3xBSERfREVWX1FfVEFHR0VEKSkpIHsKIAljYXNlIEFIRF9ERVZfUV9CQVNJQzoKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgTVNHX1NJTVBMRV9UQVNLKTsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKLQkJYnJlYWs7CiAJY2FzZSBBSERfREVWX1FfVEFHR0VEOgotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfT1JERVJFRF9UQVNLKTsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwKKwkJCQlkZXYtPm9wZW5pbmdzICsgZGV2LT5hY3RpdmUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKgpAQCAtMTQ4Miw3ICsxNDgwLDcgQEAKIAkJICogc2VyaWFsbHkgb24gdGhlIGNvbnRyb2xsZXIvZGV2aWNlLiAgVGhpcyBzaG91bGQKIAkJICogcmVtb3ZlIHNvbWUgbGF0ZW5jeS4KIAkJICovCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgMSk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIDEpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xNjE5LDE1ICsxNjE3LDYgQEAKIAl9CiAKIAlpZiAoKGRldi0+ZmxhZ3MgJiAoQUhEX0RFVl9RX1RBR0dFRHxBSERfREVWX1FfQkFTSUMpKSAhPSAwKSB7Ci0JCWludAltc2dfYnl0ZXM7Ci0JCXVpbnQ4X3QgdGFnX21zZ3NbMl07Ci0KLQkJbXNnX2J5dGVzID0gc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnX21zZ3MpOwotCQlpZiAobXNnX2J5dGVzICYmIHRhZ19tc2dzWzBdICE9IE1TR19TSU1QTEVfVEFTSykgewotCQkJaHNjYi0+Y29udHJvbCB8PSB0YWdfbXNnc1swXTsKLQkJCWlmICh0YWdfbXNnc1swXSA9PSBNU0dfT1JERVJFRF9UQVNLKQotCQkJCWRldi0+Y29tbWFuZHNfc2luY2VfaWRsZV9vcl9vdGFnID0gMDsKLQkJfSBlbHNlCiAJCWlmIChkZXYtPmNvbW1hbmRzX3NpbmNlX2lkbGVfb3Jfb3RhZyA9PSBBSERfT1RBR19USFJFU0gKIAkJICYmIChkZXYtPmZsYWdzICYgQUhEX0RFVl9RX1RBR0dFRCkgIT0gMCkgewogCQkJaHNjYi0+Y29udHJvbCB8PSBNU0dfT1JERVJFRF9UQVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKaW5kZXggZDJjOWJmMy4uODgzNjAxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCkBAIC04MTIsNiArODEyLDcgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYWhjX2xpbnV4X3NsYXZlX2NvbmZpZ3VyZSwKIAkudGFyZ2V0X2FsbG9jCQk9IGFoY19saW51eF90YXJnZXRfYWxsb2MsCiAJLnRhcmdldF9kZXN0cm95CQk9IGFoY19saW51eF90YXJnZXRfZGVzdHJveSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUYXNrbGV0IEhhbmRsZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTMzNCwxMyArMTMzNSw5IEBACiAJfQogCXN3aXRjaCAoKGRldi0+ZmxhZ3MgJiAoQUhDX0RFVl9RX0JBU0lDfEFIQ19ERVZfUV9UQUdHRUQpKSkgewogCWNhc2UgQUhDX0RFVl9RX0JBU0lDOgotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfU0lNUExFX1RBRyk7Ci0JCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIGRldi0+b3BlbmluZ3MgKyBkZXYtPmFjdGl2ZSk7Ci0JCWJyZWFrOwogCWNhc2UgQUhDX0RFVl9RX1RBR0dFRDoKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgTVNHX09SREVSRURfVEFHKTsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKLQkJYnJlYWs7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsCisJCQkJZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKIAlkZWZhdWx0OgogCQkvKgogCQkgKiBXZSBhbGxvdyB0aGUgT1MgdG8gcXVldWUgMiB1bnRhZ2dlZCB0cmFuc2FjdGlvbnMgdG8KQEAgLTEzNDgsNyArMTM0NSw3IEBACiAJCSAqIHNlcmlhbGx5IG9uIHRoZSBjb250cm9sbGVyL2RldmljZS4gIFRoaXMgc2hvdWxkCiAJCSAqIHJlbW92ZSBzb21lIGxhdGVuY3kuCiAJCSAqLwotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIDIpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCAyKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMTQ0Nyw3ICsxNDQ0LDcgQEAKIAkgKiB3ZSBhcmUgc3RvcmluZyBhIGZ1bGwgYnVzeSB0YXJnZXQgKmx1bioKIAkgKiB0YWJsZSBpbiBTQ0Igc3BhY2UuCiAJICovCi0JaWYgKCFibGtfcnFfdGFnZ2VkKGNtZC0+cmVxdWVzdCkKKwlpZiAoIShjbWQtPmZsYWdzICYgU0NNRF9UQUdHRUQpCiAJICAgICYmIChhaGMtPmZlYXR1cmVzICYgQUhDX1NDQl9CVFQpID09IDApIHsKIAkJaW50IHRhcmdldF9vZmZzZXQ7CiAKQEAgLTE1MDEsMTUgKzE0OTgsNyBAQAogCX0KIAogCWlmICgoZGV2LT5mbGFncyAmIChBSENfREVWX1FfVEFHR0VEfEFIQ19ERVZfUV9CQVNJQykpICE9IDApIHsKLQkJaW50CW1zZ19ieXRlczsKLQkJdWludDhfdCB0YWdfbXNnc1syXTsKLQkJCi0JCW1zZ19ieXRlcyA9IHNjc2lfcG9wdWxhdGVfdGFnX21zZyhjbWQsIHRhZ19tc2dzKTsKLQkJaWYgKG1zZ19ieXRlcyAmJiB0YWdfbXNnc1swXSAhPSBNU0dfU0lNUExFX1RBU0spIHsKLQkJCWhzY2ItPmNvbnRyb2wgfD0gdGFnX21zZ3NbMF07Ci0JCQlpZiAodGFnX21zZ3NbMF0gPT0gTVNHX09SREVSRURfVEFTSykKLQkJCQlkZXYtPmNvbW1hbmRzX3NpbmNlX2lkbGVfb3Jfb3RhZyA9IDA7Ci0JCX0gZWxzZSBpZiAoZGV2LT5jb21tYW5kc19zaW5jZV9pZGxlX29yX290YWcgPT0gQUhDX09UQUdfVEhSRVNICisJCWlmIChkZXYtPmNvbW1hbmRzX3NpbmNlX2lkbGVfb3Jfb3RhZyA9PSBBSENfT1RBR19USFJFU0gKIAkJCQkmJiAoZGV2LT5mbGFncyAmIEFIQ19ERVZfUV9UQUdHRUQpICE9IDApIHsKIAkJCWhzY2ItPmNvbnRyb2wgfD0gTVNHX09SREVSRURfVEFTSzsKIAkJCWRldi0+Y29tbWFuZHNfc2luY2VfaWRsZV9vcl9vdGFnID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHguaCBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHguaAppbmRleCA2NmNkYTY2Li4yNmQ0YWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eC5oCkBAIC03OCw3ICs3OCw3IEBACiAKIHZvaWQgYXNkX2ludmFsaWRhdGVfZWRiKHN0cnVjdCBhc2RfYXNjYiAqYXNjYiwgaW50IGVkYl9pZCk7CiAKLWludCAgYXNkX2V4ZWN1dGVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKiwgaW50IG51bSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKK2ludCAgYXNkX2V4ZWN1dGVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGdmcF90IGdmcF9mbGFncyk7CiAKIHZvaWQgYXNkX3NldF9kbWFtb2RlKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2h3aS5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuYwppbmRleCA0ZGY4NjdlLi45ZjYzNmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2h3aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmMKQEAgLTEyMDAsOCArMTIwMCw3IEBACiAgKiBDYXNlIEE6IHdlIGNhbiBzZW5kIHRoZSB3aG9sZSBiYXRjaCBhdCBvbmNlLiAgSW5jcmVtZW50ICJwZW5kaW5nIgogICogaW4gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZ1bmN0aW9uLCB3aGVuIGl0IGlzIGNoZWNrZWQsIGluIG9yZGVyIHRvCiAgKiBlbGltaW5hdGUgcmFjZXMgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBtdWx0aXBsZSBwcm9jZXNzZXMuCi0gKiBDYXNlIEI6IHNob3VsZCBuZXZlciBoYXBwZW4gaWYgdGhlIG1hbmFnaW5nIGxheWVyIGNvbnNpZGVycwotICogbGxkZF9xdWV1ZV9zaXplLgorICogQ2FzZSBCOiBzaG91bGQgbmV2ZXIgaGFwcGVuLgogICovCiBpbnQgYXNkX3Bvc3RfYXNjYl9saXN0KHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsIHN0cnVjdCBhc2RfYXNjYiAqYXNjYiwKIAkJICAgICAgIGludCBudW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jCmluZGV4IGM1Njc0MWYuLjE0ZmMwMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jCkBAIC00OSwxNCArNDksNiBAQAogCSJcdEVuYWJsZSgxKSBvciBkaXNhYmxlKDApIHVzaW5nIFBDSSBNU0kuXG4iCiAJIlx0RGVmYXVsdDogMCIpOwogCi1zdGF0aWMgaW50IGxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gMDsKLW1vZHVsZV9wYXJhbV9uYW1lZChjb2xsZWN0b3IsIGxsZGRfbWF4X2V4ZWN1dGVfbnVtLCBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhjb2xsZWN0b3IsICJcbiIKLQkiXHRJZiBncmVhdGVyIHRoYW4gb25lLCB0ZWxscyB0aGUgU0FTIExheWVyIHRvIHJ1biBpbiBUYXNrIENvbGxlY3RvclxuIgotCSJcdE1vZGUuICBJZiAxIG9yIDAsIHRlbGxzIHRoZSBTQVMgTGF5ZXIgdG8gcnVuIGluIERpcmVjdCBNb2RlLlxuIgotCSJcdFRoZSBhaWM5NHh4IFNBUyBMTEREIHN1cHBvcnRzIGJvdGggbW9kZXMuXG4iCi0JIlx0RGVmYXVsdDogMCAoRGlyZWN0IE1vZGUpLlxuIik7Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKmFpYzk0eHhfdHJhbnNwb3J0X3RlbXBsYXRlOwogc3RhdGljIGludCBhc2Rfc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgYXNkX3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqKTsKQEAgLTgzLDYgKzc1LDggQEAKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIJPSBzYXNfZWhfYnVzX3Jlc2V0X2hhbmRsZXIsCiAJLnRhcmdldF9kZXN0cm95CQk9IHNhc190YXJnZXRfZGVzdHJveSwKIAkuaW9jdGwJCQk9IHNhc19pb2N0bCwKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBpbnQgYXNkX21hcF9tZW1pbyhzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKQpAQCAtNzA5LDkgKzcwMyw2IEBACiAJYXNkX2hhLT5zYXNfaGEuc2FzX3BvcnQ9IHNhc19wb3J0czsKIAlhc2RfaGEtPnNhc19oYS5udW1fcGh5cz0gQVNEX01BWF9QSFlTOwogCi0JYXNkX2hhLT5zYXNfaGEubGxkZF9xdWV1ZV9zaXplID0gYXNkX2hhLT5zZXEuY2FuX3F1ZXVlOwotCWFzZF9oYS0+c2FzX2hhLmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gbGxkZF9tYXhfZXhlY3V0ZV9udW07Ci0KIAlyZXR1cm4gc2FzX3JlZ2lzdGVyX2hhKCZhc2RfaGEtPnNhc19oYSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfdGFzay5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90YXNrLmMKaW5kZXggNTliODZlMi4uNWZmMWNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90YXNrLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90YXNrLmMKQEAgLTU0Myw4ICs1NDMsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLWludCBhc2RfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgY29uc3QgaW50IG51bSwKLQkJICAgICBnZnBfdCBnZnBfZmxhZ3MpCitpbnQgYXNkX2V4ZWN1dGVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGdmcF90IGdmcF9mbGFncykKIHsKIAlpbnQgcmVzID0gMDsKIAlMSVNUX0hFQUQoYWxpc3QpOwpAQCAtNTUzLDExICs1NTIsMTEgQEAKIAlzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhID0gdGFzay0+ZGV2LT5wb3J0LT5oYS0+bGxkZF9oYTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcmVzID0gYXNkX2Nhbl9xdWV1ZShhc2RfaGEsIG51bSk7CisJcmVzID0gYXNkX2Nhbl9xdWV1ZShhc2RfaGEsIDEpOwogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKLQlyZXMgPSBudW07CisJcmVzID0gMTsKIAlhc2NiID0gYXNkX2FzY2JfYWxsb2NfbGlzdChhc2RfaGEsICZyZXMsIGdmcF9mbGFncyk7CiAJaWYgKHJlcykgewogCQlyZXMgPSAtRU5PTUVNOwpAQCAtNTY4LDcgKzU2Nyw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmYWxpc3QsIGxpc3QpIHsKIAkJYS0+dWxkZF90YXNrID0gdDsKIAkJdC0+bGxkZF90YXNrID0gYTsKLQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LCBzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOworCQlicmVhazsKIAl9CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmYWxpc3QsIGxpc3QpIHsKIAkJdCA9IGEtPnVsZGRfdGFzazsKQEAgLTYwMSw3ICs2MDAsNyBAQAogCX0KIAlsaXN0X2RlbF9pbml0KCZhbGlzdCk7CiAKLQlyZXMgPSBhc2RfcG9zdF9hc2NiX2xpc3QoYXNkX2hhLCBhc2NiLCBudW0pOworCXJlcyA9IGFzZF9wb3N0X2FzY2JfbGlzdChhc2RfaGEsIGFzY2IsIDEpOwogCWlmICh1bmxpa2VseShyZXMpKSB7CiAJCWEgPSBOVUxMOwogCQlfX2xpc3RfYWRkKCZhbGlzdCwgYXNjYi0+bGlzdC5wcmV2LCAmYXNjYi0+bGlzdCk7CkBAIC02MzksNiArNjM4LDYgQEAKIG91dF9lcnI6CiAJaWYgKGFzY2IpCiAJCWFzZF9hc2NiX2ZyZWVfbGlzdChhc2NiKTsKLQlhc2RfY2FuX2RlcXVldWUoYXNkX2hhLCBudW0pOworCWFzZF9jYW5fZGVxdWV1ZShhc2RfaGEsIDEpOwogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYW01M2M5NzQuYyBiL2RyaXZlcnMvc2NzaS9hbTUzYzk3NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhM2UyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYW01M2M5NzQuYwpAQCAtMCwwICsxLDU4NiBAQAorLyoKKyAqIEFNRCBhbTUzYzk3NCBkcml2ZXIuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSGFubmVzIFJlaW5lY2tlLCBTVVNFIExpbnV4IEdtYkgKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCisjaW5jbHVkZSAiZXNwX3Njc2kuaCIKKworI2RlZmluZSBEUlZfTU9EVUxFX05BTUUgImFtNTNjOTc0IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gIjEuMDAiCisKK3N0YXRpYyBib29sIGFtNTNjOTc0X2RlYnVnOworc3RhdGljIGJvb2wgYW01M2M5NzRfZmVuYWIgPSB0cnVlOworCisjZGVmaW5lIGVzcF9kbWFfbG9nKGYsIGEuLi4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGFtNTNjOTc0X2RlYnVnKQkJCQkJXAorCQkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyNhKTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRVNQX0RNQV9DTUQgMHgxMAorI2RlZmluZSBFU1BfRE1BX1NUQyAweDExCisjZGVmaW5lIEVTUF9ETUFfU1BBIDB4MTIKKyNkZWZpbmUgRVNQX0RNQV9XQkMgMHgxMworI2RlZmluZSBFU1BfRE1BX1dBQyAweDE0CisjZGVmaW5lIEVTUF9ETUFfU1RBVFVTIDB4MTUKKyNkZWZpbmUgRVNQX0RNQV9TTURMQSAweDE2CisjZGVmaW5lIEVTUF9ETUFfV01BQyAweDE3CisKKyNkZWZpbmUgRVNQX0RNQV9DTURfSURMRSAweDAwCisjZGVmaW5lIEVTUF9ETUFfQ01EX0JMQVNUIDB4MDEKKyNkZWZpbmUgRVNQX0RNQV9DTURfQUJPUlQgMHgwMgorI2RlZmluZSBFU1BfRE1BX0NNRF9TVEFSVCAweDAzCisjZGVmaW5lIEVTUF9ETUFfQ01EX01BU0sgIDB4MDMKKyNkZWZpbmUgRVNQX0RNQV9DTURfRElBRyAweDA0CisjZGVmaW5lIEVTUF9ETUFfQ01EX01ETCAweDEwCisjZGVmaW5lIEVTUF9ETUFfQ01EX0lOVEVfUCAweDIwCisjZGVmaW5lIEVTUF9ETUFfQ01EX0lOVEVfRCAweDQwCisjZGVmaW5lIEVTUF9ETUFfQ01EX0RJUiAweDgwCisKKyNkZWZpbmUgRVNQX0RNQV9TVEFUX1BXRE4gMHgwMQorI2RlZmluZSBFU1BfRE1BX1NUQVRfRVJST1IgMHgwMgorI2RlZmluZSBFU1BfRE1BX1NUQVRfQUJPUlQgMHgwNAorI2RlZmluZSBFU1BfRE1BX1NUQVRfRE9ORSAweDA4CisjZGVmaW5lIEVTUF9ETUFfU1RBVF9TQ1NJSU5UIDB4MTAKKyNkZWZpbmUgRVNQX0RNQV9TVEFUX0JDTVBMVCAweDIwCisKKy8qIEVFUFJPTSBpcyBhY2Nlc3NlZCB3aXRoIDE2LWJpdCB2YWx1ZXMgKi8KKyNkZWZpbmUgREMzOTBfRUVQUk9NX1JFQUQgMHg4MAorI2RlZmluZSBEQzM5MF9FRVBST01fTEVOIDB4NDAKKworLyoKKyAqIERDMzkwIEVFUFJPTQorICoKKyAqIDggKiA0IGJ5dGVzIG9mIHBlci1kZXZpY2Ugb3B0aW9ucworICogZm9sbG93ZWQgYnkgSEJBIHNwZWNpZmljIG9wdGlvbnMKKyAqLworCisvKiBQZXItZGV2aWNlIG9wdGlvbnMgKi8KKyNkZWZpbmUgREMzOTBfRUVfTU9ERTEgMHgwMAorI2RlZmluZSBEQzM5MF9FRV9TUEVFRCAweDAxCisKKy8qIEhCQS1zcGVjaWZpYyBvcHRpb25zICovCisjZGVmaW5lIERDMzkwX0VFX0FEQVBUX1NDU0lfSUQgMHg0MAorI2RlZmluZSBEQzM5MF9FRV9NT0RFMiAweDQxCisjZGVmaW5lIERDMzkwX0VFX0RFTEFZIDB4NDIKKyNkZWZpbmUgREMzOTBfRUVfVEFHX0NNRF9OVU0gMHg0MworCisjZGVmaW5lIERDMzkwX0VFX01PREUxX1BBUklUWV9DSEsgICAweDAxCisjZGVmaW5lIERDMzkwX0VFX01PREUxX1NZTkNfTkVHTyAgICAweDAyCisjZGVmaW5lIERDMzkwX0VFX01PREUxX0VOX0RJU0MgICAgICAweDA0CisjZGVmaW5lIERDMzkwX0VFX01PREUxX1NFTkRfU1RBUlQgICAweDA4CisjZGVmaW5lIERDMzkwX0VFX01PREUxX1RDUSAgICAgICAgICAweDEwCisKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTJfTU9SRV8yRFJWICAgIDB4MDEKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTJfR1JFQVRFUl8xRyAgIDB4MDIKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTJfUlNUX1NDU0lfQlVTIDB4MDQKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTJfQUNUSVZFX05FR0FUSU9OIDB4MDgKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTJfTk9fU0VFSyAgICAgIDB4MTAKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTJfTFVOX0NIRUNLICAgIDB4MjAKKworc3RydWN0IHBjaV9lc3BfcHJpdiB7CisJc3RydWN0IGVzcCAqZXNwOworCXU4IGRtYV9zdGF0dXM7Cit9OworCitzdGF0aWMgdm9pZCBwY2lfZXNwX2RtYV9kcmFpbihzdHJ1Y3QgZXNwICplc3ApOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZXNwX3ByaXYgKnBjaV9lc3BfZ2V0X3ByaXYoc3RydWN0IGVzcCAqZXNwKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZXNwLT5kZXY7CisKKwlyZXR1cm4gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworfQorCitzdGF0aWMgdm9pZCBwY2lfZXNwX3dyaXRlOChzdHJ1Y3QgZXNwICplc3AsIHU4IHZhbCwgdW5zaWduZWQgbG9uZyByZWcpCit7CisJaW93cml0ZTgodmFsLCBlc3AtPnJlZ3MgKyAocmVnICogNFVMKSk7Cit9CisKK3N0YXRpYyB1OCBwY2lfZXNwX3JlYWQ4KHN0cnVjdCBlc3AgKmVzcCwgdW5zaWduZWQgbG9uZyByZWcpCit7CisJcmV0dXJuIGlvcmVhZDgoZXNwLT5yZWdzICsgKHJlZyAqIDRVTCkpOworfQorCitzdGF0aWMgdm9pZCBwY2lfZXNwX3dyaXRlMzIoc3RydWN0IGVzcCAqZXNwLCB1MzIgdmFsLCB1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlyZXR1cm4gaW93cml0ZTMyKHZhbCwgZXNwLT5yZWdzICsgKHJlZyAqIDRVTCkpOworfQorCitzdGF0aWMgZG1hX2FkZHJfdCBwY2lfZXNwX21hcF9zaW5nbGUoc3RydWN0IGVzcCAqZXNwLCB2b2lkICpidWYsCisJCQkJICAgICBzaXplX3Qgc3osIGludCBkaXIpCit7CisJcmV0dXJuIHBjaV9tYXBfc2luZ2xlKGVzcC0+ZGV2LCBidWYsIHN6LCBkaXIpOworfQorCitzdGF0aWMgaW50IHBjaV9lc3BfbWFwX3NnKHN0cnVjdCBlc3AgKmVzcCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgaW50IG51bV9zZywgaW50IGRpcikKK3sKKwlyZXR1cm4gcGNpX21hcF9zZyhlc3AtPmRldiwgc2csIG51bV9zZywgZGlyKTsKK30KKworc3RhdGljIHZvaWQgcGNpX2VzcF91bm1hcF9zaW5nbGUoc3RydWN0IGVzcCAqZXNwLCBkbWFfYWRkcl90IGFkZHIsCisJCQkJIHNpemVfdCBzeiwgaW50IGRpcikKK3sKKwlwY2lfdW5tYXBfc2luZ2xlKGVzcC0+ZGV2LCBhZGRyLCBzeiwgZGlyKTsKK30KKworc3RhdGljIHZvaWQgcGNpX2VzcF91bm1hcF9zZyhzdHJ1Y3QgZXNwICplc3AsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgIGludCBudW1fc2csIGludCBkaXIpCit7CisJcGNpX3VubWFwX3NnKGVzcC0+ZGV2LCBzZywgbnVtX3NnLCBkaXIpOworfQorCitzdGF0aWMgaW50IHBjaV9lc3BfaXJxX3BlbmRpbmcoc3RydWN0IGVzcCAqZXNwKQoreworCXN0cnVjdCBwY2lfZXNwX3ByaXYgKnBlcCA9IHBjaV9lc3BfZ2V0X3ByaXYoZXNwKTsKKworCXBlcC0+ZG1hX3N0YXR1cyA9IHBjaV9lc3BfcmVhZDgoZXNwLCBFU1BfRE1BX1NUQVRVUyk7CisJZXNwX2RtYV9sb2coImRtYSBpbnRyIGRyZWdbJTAyeF1cbiIsIHBlcC0+ZG1hX3N0YXR1cyk7CisKKwlpZiAocGVwLT5kbWFfc3RhdHVzICYgKEVTUF9ETUFfU1RBVF9FUlJPUiB8CisJCQkgICAgICAgRVNQX0RNQV9TVEFUX0FCT1JUIHwKKwkJCSAgICAgICBFU1BfRE1BX1NUQVRfRE9ORSB8CisJCQkgICAgICAgRVNQX0RNQV9TVEFUX1NDU0lJTlQpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwY2lfZXNwX3Jlc2V0X2RtYShzdHJ1Y3QgZXNwICplc3ApCit7CisJLyogTm90aGluZyB0byBkbyA/ICovCit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3BfZG1hX2RyYWluKHN0cnVjdCBlc3AgKmVzcCkKK3sKKwl1OCByZXNpZDsKKwlpbnQgbGltID0gMTAwMDsKKworCisJaWYgKChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgPT0gRVNQX0RPUCB8fAorCSAgICAoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spID09IEVTUF9ESVApCisJCS8qIERhdGEtSW4gb3IgRGF0YS1PdXQsIG5vdGhpbmcgdG8gYmUgZG9uZSAqLworCQlyZXR1cm47CisKKwl3aGlsZSAoLS1saW0gPiAwKSB7CisJCXJlc2lkID0gcGNpX2VzcF9yZWFkOChlc3AsIEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUzsKKwkJaWYgKHJlc2lkIDw9IDEpCisJCQlicmVhazsKKwkJY3B1X3JlbGF4KCk7CisJfQorCWlmIChyZXNpZCA+IDEpIHsKKwkJLyogRklGTyBub3QgY2xlYXJlZCAqLworCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkgICAgICJGSUZPIG5vdCBjbGVhcmVkLCAlZCBieXRlcyBsZWZ0XG4iLAorCQkJICAgICByZXNpZCk7CisJfQorCisJLyoKKwkgKiBXaGVuIHRoZXJlIGlzIGEgcmVzaWR1YWwgQkNNUExUIHdpbGwgbmV2ZXIgYmUgc2V0CisJICogKG9idmlvdXNseSkuIEJ1dCB3ZSBzdGlsbCBoYXZlIHRvIGlzc3VlIHRoZSBCTEFTVAorCSAqIGNvbW1hbmQsIG90aGVyd2lzZSB0aGUgZGF0YSB3aWxsIG5vdCBiZWluZyB0cmFuc2ZlcnJlZC4KKwkgKiBCdXQgd2UnbGwgbmV2ZXIga25vdyB3aGVuIHRoZSBCTEFTVCBvcGVyYXRpb24gaXMKKwkgKiBmaW5pc2hlZC4gU28gY2hlY2sgZm9yIHNvbWUgdGltZSBhbmQgZ2l2ZSB1cCBldmVudHVhbGx5LgorCSAqLworCWxpbSA9IDEwMDA7CisJcGNpX2VzcF93cml0ZTgoZXNwLCBFU1BfRE1BX0NNRF9ESVIgfCBFU1BfRE1BX0NNRF9CTEFTVCwgRVNQX0RNQV9DTUQpOworCXdoaWxlIChwY2lfZXNwX3JlYWQ4KGVzcCwgRVNQX0RNQV9TVEFUVVMpICYgRVNQX0RNQV9TVEFUX0JDTVBMVCkgeworCQlpZiAoLS1saW0gPT0gMCkKKwkJCWJyZWFrOworCQljcHVfcmVsYXgoKTsKKwl9CisJcGNpX2VzcF93cml0ZTgoZXNwLCBFU1BfRE1BX0NNRF9ESVIgfCBFU1BfRE1BX0NNRF9JRExFLCBFU1BfRE1BX0NNRCk7CisJZXNwX2RtYV9sb2coIkRNQSBibGFzdCBkb25lICglZCB0cmllcywgJWQgYnl0ZXMgbGVmdClcbiIsIGxpbSwgcmVzaWQpOworCS8qIEJMQVNUIHJlc2lkdWFsIGhhbmRsaW5nIGlzIGN1cnJlbnRseSB1bnRlc3RlZCAqLworCWlmIChXQVJOX09OX09OQ0UocmVzaWQgPT0gMSkpIHsKKwkJc3RydWN0IGVzcF9jbWRfZW50cnkgKmVudCA9IGVzcC0+YWN0aXZlX2NtZDsKKworCQllbnQtPmZsYWdzIHw9IEVTUF9DTURfRkxBR19SRVNJRFVBTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3BfZG1hX2ludmFsaWRhdGUoc3RydWN0IGVzcCAqZXNwKQoreworCXN0cnVjdCBwY2lfZXNwX3ByaXYgKnBlcCA9IHBjaV9lc3BfZ2V0X3ByaXYoZXNwKTsKKworCWVzcF9kbWFfbG9nKCJpbnZhbGlkYXRlIERNQVxuIik7CisKKwlwY2lfZXNwX3dyaXRlOChlc3AsIEVTUF9ETUFfQ01EX0lETEUsIEVTUF9ETUFfQ01EKTsKKwlwZXAtPmRtYV9zdGF0dXMgPSAwOworfQorCitzdGF0aWMgaW50IHBjaV9lc3BfZG1hX2Vycm9yKHN0cnVjdCBlc3AgKmVzcCkKK3sKKwlzdHJ1Y3QgcGNpX2VzcF9wcml2ICpwZXAgPSBwY2lfZXNwX2dldF9wcml2KGVzcCk7CisKKwlpZiAocGVwLT5kbWFfc3RhdHVzICYgRVNQX0RNQV9TVEFUX0VSUk9SKSB7CisJCXU4IGRtYV9jbWQgPSBwY2lfZXNwX3JlYWQ4KGVzcCwgRVNQX0RNQV9DTUQpOworCisJCWlmICgoZG1hX2NtZCAmIEVTUF9ETUFfQ01EX01BU0spID09IEVTUF9ETUFfQ01EX1NUQVJUKQorCQkJcGNpX2VzcF93cml0ZTgoZXNwLCBFU1BfRE1BX0NNRF9BQk9SVCwgRVNQX0RNQV9DTUQpOworCisJCXJldHVybiAxOworCX0KKwlpZiAocGVwLT5kbWFfc3RhdHVzICYgRVNQX0RNQV9TVEFUX0FCT1JUKSB7CisJCXBjaV9lc3Bfd3JpdGU4KGVzcCwgRVNQX0RNQV9DTURfSURMRSwgRVNQX0RNQV9DTUQpOworCQlwZXAtPmRtYV9zdGF0dXMgPSBwY2lfZXNwX3JlYWQ4KGVzcCwgRVNQX0RNQV9DTUQpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3Bfc2VuZF9kbWFfY21kKHN0cnVjdCBlc3AgKmVzcCwgdTMyIGFkZHIsIHUzMiBlc3BfY291bnQsCisJCQkJIHUzMiBkbWFfY291bnQsIGludCB3cml0ZSwgdTggY21kKQoreworCXN0cnVjdCBwY2lfZXNwX3ByaXYgKnBlcCA9IHBjaV9lc3BfZ2V0X3ByaXYoZXNwKTsKKwl1MzIgdmFsID0gMDsKKworCUJVR19PTighKGNtZCAmIEVTUF9DTURfRE1BKSk7CisKKwlwZXAtPmRtYV9zdGF0dXMgPSAwOworCisJLyogU2V0IERNQSBlbmdpbmUgdG8gSURMRSAqLworCWlmICh3cml0ZSkKKwkJLyogRE1BIHdyaXRlIGRpcmVjdGlvbiBsb2dpYyBpcyBpbnZlcnRlZCAqLworCQl2YWwgfD0gRVNQX0RNQV9DTURfRElSOworCXBjaV9lc3Bfd3JpdGU4KGVzcCwgRVNQX0RNQV9DTURfSURMRSB8IHZhbCwgRVNQX0RNQV9DTUQpOworCisJcGNpX2VzcF93cml0ZTgoZXNwLCAoZXNwX2NvdW50ID4+IDApICYgMHhmZiwgRVNQX1RDTE9XKTsKKwlwY2lfZXNwX3dyaXRlOChlc3AsIChlc3BfY291bnQgPj4gOCkgJiAweGZmLCBFU1BfVENNRUQpOworCWlmIChlc3AtPmNvbmZpZzIgJiBFU1BfQ09ORklHMl9GRU5BQikKKwkJcGNpX2VzcF93cml0ZTgoZXNwLCAoZXNwX2NvdW50ID4+IDE2KSAmIDB4ZmYsIEVTUF9UQ0hJKTsKKworCXBjaV9lc3Bfd3JpdGUzMihlc3AsIGVzcF9jb3VudCwgRVNQX0RNQV9TVEMpOworCXBjaV9lc3Bfd3JpdGUzMihlc3AsIGFkZHIsIEVTUF9ETUFfU1BBKTsKKworCWVzcF9kbWFfbG9nKCJzdGFydCBkbWEgYWRkclsleF0gY291bnRbJWQ6JWRdXG4iLAorCQkgICAgYWRkciwgZXNwX2NvdW50LCBkbWFfY291bnQpOworCisJc2NzaV9lc3BfY21kKGVzcCwgY21kKTsKKwkvKiBTZW5kIERNQSBTdGFydCBjb21tYW5kICovCisJcGNpX2VzcF93cml0ZTgoZXNwLCBFU1BfRE1BX0NNRF9TVEFSVCB8IHZhbCwgRVNQX0RNQV9DTUQpOworfQorCitzdGF0aWMgdTMyIHBjaV9lc3BfZG1hX2xlbmd0aF9saW1pdChzdHJ1Y3QgZXNwICplc3AsIHUzMiBkbWFfYWRkciwgdTMyIGRtYV9sZW4pCit7CisJaW50IGRtYV9saW1pdCA9IDE2OworCXUzMiBiYXNlLCBlbmQ7CisKKwkvKgorCSAqIElmIENPTkZJRzJfRkVOQUIgaXMgc2V0IHdlIGNhbgorCSAqIGhhbmRsZSB1cCB0byAyNCBiaXQgYWRkcmVzc2VzCisJICovCisJaWYgKGVzcC0+Y29uZmlnMiAmIEVTUF9DT05GSUcyX0ZFTkFCKQorCQlkbWFfbGltaXQgPSAyNDsKKworCWlmIChkbWFfbGVuID4gKDFVIDw8IGRtYV9saW1pdCkpCisJCWRtYV9sZW4gPSAoMVUgPDwgZG1hX2xpbWl0KTsKKworCS8qCisJICogUHJldmVudCBjcm9zc2luZyBhIDI0LWJpdCBhZGRyZXNzIGJvdW5kYXJ5LgorCSAqLworCWJhc2UgPSBkbWFfYWRkciAmICgoMVUgPDwgMjQpIC0gMVUpOworCWVuZCA9IGJhc2UgKyBkbWFfbGVuOworCWlmIChlbmQgPiAoMVUgPDwgMjQpKQorCQllbmQgPSAoMVUgPDwyNCk7CisJZG1hX2xlbiA9IGVuZCAtIGJhc2U7CisKKwlyZXR1cm4gZG1hX2xlbjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlc3BfZHJpdmVyX29wcyBwY2lfZXNwX29wcyA9IHsKKwkuZXNwX3dyaXRlOAk9CXBjaV9lc3Bfd3JpdGU4LAorCS5lc3BfcmVhZDgJPQlwY2lfZXNwX3JlYWQ4LAorCS5tYXBfc2luZ2xlCT0JcGNpX2VzcF9tYXBfc2luZ2xlLAorCS5tYXBfc2cJCT0JcGNpX2VzcF9tYXBfc2csCisJLnVubWFwX3NpbmdsZQk9CXBjaV9lc3BfdW5tYXBfc2luZ2xlLAorCS51bm1hcF9zZwk9CXBjaV9lc3BfdW5tYXBfc2csCisJLmlycV9wZW5kaW5nCT0JcGNpX2VzcF9pcnFfcGVuZGluZywKKwkucmVzZXRfZG1hCT0JcGNpX2VzcF9yZXNldF9kbWEsCisJLmRtYV9kcmFpbgk9CXBjaV9lc3BfZG1hX2RyYWluLAorCS5kbWFfaW52YWxpZGF0ZQk9CXBjaV9lc3BfZG1hX2ludmFsaWRhdGUsCisJLnNlbmRfZG1hX2NtZAk9CXBjaV9lc3Bfc2VuZF9kbWFfY21kLAorCS5kbWFfZXJyb3IJPQlwY2lfZXNwX2RtYV9lcnJvciwKKwkuZG1hX2xlbmd0aF9saW1pdCA9CXBjaV9lc3BfZG1hX2xlbmd0aF9saW1pdCwKK307CisKKy8qCisgKiBSZWFkIERDLTM5MCBlZXByb20KKyAqLworc3RhdGljIHZvaWQgZGMzOTBfZWVwcm9tX3ByZXBhcmVfcmVhZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY21kKQoreworCXU4IGNhcnJ5X2ZsYWcgPSAxLCBqID0gMHg4MCwgYnZhbDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJaWYgKGNhcnJ5X2ZsYWcpIHsKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAweDQwKTsKKwkJCWJ2YWwgPSAweGMwOworCQl9IGVsc2UKKwkJCWJ2YWwgPSAweDgwOworCisJCXVkZWxheSgxNjApOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgYnZhbCk7CisJCXVkZWxheSgxNjApOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMCk7CisJCXVkZWxheSgxNjApOworCisJCWNhcnJ5X2ZsYWcgPSAoY21kICYgaikgPyAxIDogMDsKKwkJaiA+Pj0gMTsKKwl9Cit9CisKK3N0YXRpYyB1MTYgZGMzOTBfZWVwcm9tX2dldF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCXUxNiB3dmFsID0gMDsKKwl1OCBidmFsOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJd3ZhbCA8PD0gMTsKKworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMHg4MCk7CisJCXVkZWxheSgxNjApOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMHg0MCk7CisJCXVkZWxheSgxNjApOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDAwLCAmYnZhbCk7CisKKwkJaWYgKGJ2YWwgPT0gMHgyMikKKwkJCXd2YWwgfD0gMTsKKwl9CisKKwlyZXR1cm4gd3ZhbDsKK30KKworc3RhdGljIHZvaWQgZGMzOTBfcmVhZF9lZXByb20oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiAqcHRyKQoreworCXU4IGNtZCA9IERDMzkwX0VFUFJPTV9SRUFELCBpOworCisJZm9yIChpID0gMDsgaSA8IERDMzkwX0VFUFJPTV9MRU47IGkrKykgeworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHhjMCwgMCk7CisJCXVkZWxheSgxNjApOworCisJCWRjMzkwX2VlcHJvbV9wcmVwYXJlX3JlYWQocGRldiwgY21kKyspOworCQkqcHRyKysgPSBkYzM5MF9lZXByb21fZ2V0X2RhdGEocGRldik7CisKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDApOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMCk7CisJCXVkZWxheSgxNjApOworCX0KK30KKworc3RhdGljIHZvaWQgZGMzOTBfY2hlY2tfZWVwcm9tKHN0cnVjdCBlc3AgKmVzcCkKK3sKKwl1OCBFRWJ1ZlsxMjhdOworCXUxNiAqcHRyID0gKHUxNiAqKUVFYnVmLCB3dmFsID0gMDsKKwlpbnQgaTsKKworCWRjMzkwX3JlYWRfZWVwcm9tKChzdHJ1Y3QgcGNpX2RldiAqKWVzcC0+ZGV2LCBwdHIpOworCisJZm9yIChpID0gMDsgaSA8IERDMzkwX0VFUFJPTV9MRU47IGkrKywgcHRyKyspCisJCXd2YWwgKz0gKnB0cjsKKworCS8qIG5vIFRla3JhbSBFRXByb20gZm91bmQgKi8KKwlpZiAod3ZhbCAhPSAweDEyMzQpIHsKKwkJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBlc3AtPmRldjsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsCisJCQkgICAiTm8gdmFsaWQgVGVrcmFtIEVFcHJvbSBmb3VuZFxuIik7CisJCXJldHVybjsKKwl9CisJZXNwLT5zY3NpX2lkID0gRUVidWZbREMzOTBfRUVfQURBUFRfU0NTSV9JRF07CisJZXNwLT5udW1fdGFncyA9IDIgPDwgRUVidWZbREMzOTBfRUVfVEFHX0NNRF9OVU1dOworCWlmIChFRWJ1ZltEQzM5MF9FRV9NT0RFMl0gJiBEQzM5MF9FRV9NT0RFMl9BQ1RJVkVfTkVHQVRJT04pCisJCWVzcC0+Y29uZmlnNCB8PSBFU1BfQ09ORklHNF9SQURFIHwgRVNQX0NPTkZJRzRfUkFFOworfQorCitzdGF0aWMgaW50IHBjaV9lc3BfcHJvYmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3R0ID0gJnNjc2lfZXNwX3RlbXBsYXRlOworCWludCBlcnIgPSAtRU5PREVWOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBlc3AgKmVzcDsKKwlzdHJ1Y3QgcGNpX2VzcF9wcml2ICpwZXA7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsICJjYW5ub3QgZW5hYmxlIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAorCQkJICAgImZhaWxlZCB0byBzZXQgMzJiaXQgRE1BIG1hc2tcbiIpOworCQlnb3RvIGZhaWxfZGlzYWJsZV9kZXZpY2U7CisJfQorCisJc2hvc3QgPSBzY3NpX2hvc3RfYWxsb2MoaG9zdHQsIHNpemVvZihzdHJ1Y3QgZXNwKSk7CisJaWYgKCFzaG9zdCkgeworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwKKwkJCSAgICJmYWlsZWQgdG8gYWxsb2NhdGUgc2NzaSBob3N0XG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2Rpc2FibGVfZGV2aWNlOworCX0KKworCXBlcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfZXNwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBlcCkgeworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwKKwkJCSAgICJmYWlsZWQgdG8gYWxsb2NhdGUgZXNwX3ByaXZcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfaG9zdF9hbGxvYzsKKwl9CisKKwllc3AgPSBzaG9zdF9wcml2KHNob3N0KTsKKwllc3AtPmhvc3QgPSBzaG9zdDsKKwllc3AtPmRldiA9IHBkZXY7CisJZXNwLT5vcHMgPSAmcGNpX2VzcF9vcHM7CisJLyoKKwkgKiBUaGUgYW01M2M5NzQgSEJBIGhhcyBhIGRlc2lnbiBmbGF3IG9mIGdlbmVyYXRpbmcKKwkgKiBzcHVyaW91cyBETUEgY29tcGxldGlvbiBpbnRlcnJ1cHRzIHdoZW4gdXNpbmcKKwkgKiBETUEgZm9yIGNvbW1hbmQgc3VibWlzc2lvbi4KKwkgKi8KKwllc3AtPmZsYWdzIHw9IEVTUF9GTEFHX1VTRV9GSUZPOworCS8qCisJICogRW5hYmxlIENPTkZJRzJfRkVOQUIgdG8gYWxsb3cgZm9yIGxhcmdlIERNQSB0cmFuc2ZlcnMKKwkgKi8KKwlpZiAoYW01M2M5NzRfZmVuYWIpCisJCWVzcC0+Y29uZmlnMiB8PSBFU1BfQ09ORklHMl9GRU5BQjsKKworCXBlcC0+ZXNwID0gZXNwOworCisJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX01PRFVMRV9OQU1FKSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkJICAgInBjaSBtZW1vcnkgc2VsZWN0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbF9wcml2X2FsbG9jOworCX0KKworCWVzcC0+cmVncyA9IHBjaV9pb21hcChwZGV2LCAwLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAoIWVzcC0+cmVncykgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LCAicGNpIEkvTyBtYXAgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsX3JlbGVhc2VfcmVnaW9uczsKKwl9CisJZXNwLT5kbWFfcmVncyA9IGVzcC0+cmVnczsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJZXNwLT5jb21tYW5kX2Jsb2NrID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgMTYsCisJCQkJCQkgICZlc3AtPmNvbW1hbmRfYmxvY2tfZG1hKTsKKwlpZiAoIWVzcC0+Y29tbWFuZF9ibG9jaykgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkJICAgImZhaWxlZCB0byBhbGxvY2F0ZSBjb21tYW5kIGJsb2NrXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsX3VubWFwX3JlZ3M7CisJfQorCisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBzY3NpX2VzcF9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJCSAgRFJWX01PRFVMRV9OQU1FLCBlc3ApOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRXG4iKTsKKwkJZ290byBmYWlsX3VubWFwX2NvbW1hbmRfYmxvY2s7CisJfQorCisJZXNwLT5zY3NpX2lkID0gNzsKKwlkYzM5MF9jaGVja19lZXByb20oZXNwKTsKKworCXNob3N0LT50aGlzX2lkID0gZXNwLT5zY3NpX2lkOworCXNob3N0LT5tYXhfaWQgPSA4OworCXNob3N0LT5pcnEgPSBwZGV2LT5pcnE7CisJc2hvc3QtPmlvX3BvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJc2hvc3QtPm5faW9fcG9ydCA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJc2hvc3QtPnVuaXF1ZV9pZCA9IHNob3N0LT5pb19wb3J0OworCWVzcC0+c2NzaV9pZF9tYXNrID0gKDEgPDwgZXNwLT5zY3NpX2lkKTsKKwkvKiBBc3N1bWUgNDBNSHogY2xvY2sgKi8KKwllc3AtPmNmcmVxID0gNDAwMDAwMDA7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcGVwKTsKKworCWVyciA9IHNjc2lfZXNwX3JlZ2lzdGVyKGVzcCwgJnBkZXYtPmRldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsX2ZyZWVfaXJxOworCisJcmV0dXJuIDA7CisKK2ZhaWxfZnJlZV9pcnE6CisJZnJlZV9pcnEocGRldi0+aXJxLCBlc3ApOworZmFpbF91bm1hcF9jb21tYW5kX2Jsb2NrOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgMTYsIGVzcC0+Y29tbWFuZF9ibG9jaywKKwkJCSAgICBlc3AtPmNvbW1hbmRfYmxvY2tfZG1hKTsKK2ZhaWxfdW5tYXBfcmVnczoKKwlwY2lfaW91bm1hcChwZGV2LCBlc3AtPnJlZ3MpOworZmFpbF9yZWxlYXNlX3JlZ2lvbnM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2ZhaWxfcHJpdl9hbGxvYzoKKwlrZnJlZShwZXApOworZmFpbF9ob3N0X2FsbG9jOgorCXNjc2lfaG9zdF9wdXQoc2hvc3QpOworZmFpbF9kaXNhYmxlX2RldmljZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwY2lfZXNwX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaV9lc3BfcHJpdiAqcGVwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBlc3AgKmVzcCA9IHBlcC0+ZXNwOworCisJc2NzaV9lc3BfdW5yZWdpc3Rlcihlc3ApOworCWZyZWVfaXJxKHBkZXYtPmlycSwgZXNwKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIDE2LCBlc3AtPmNvbW1hbmRfYmxvY2ssCisJCQkgICAgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSk7CisJcGNpX2lvdW5tYXAocGRldiwgZXNwLT5yZWdzKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlrZnJlZShwZXApOworCisJc2NzaV9ob3N0X3B1dChlc3AtPmhvc3QpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW01M2M5NzRfcGNpX3RibFtdID0geworCXsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NDU0ksCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYW01M2M5NzRfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbTUzYzk3NF9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgICAgID0gRFJWX01PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgICAgICA9IGFtNTNjOTc0X3BjaV90YmwsCisJLnByb2JlICAgICAgICAgID0gcGNpX2VzcF9wcm9iZV9vbmUsCisJLnJlbW92ZSAgICAgICAgID0gcGNpX2VzcF9yZW1vdmVfb25lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYW01M2M5NzRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYW01M2M5NzRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFtNTNjOTc0X21vZHVsZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhbTUzYzk3NF9kcml2ZXIpOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIkFNNTNDOTc0IFNDU0kgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJIYW5uZXMgUmVpbmVja2UgPGhhcmVAc3VzZS5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9NT0RVTEVfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInRtc2NzaW0iKTsKKworbW9kdWxlX3BhcmFtKGFtNTNjOTc0X2RlYnVnLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYW01M2M5NzRfZGVidWcsICJFbmFibGUgZGVidWdnaW5nIik7CisKK21vZHVsZV9wYXJhbShhbTUzYzk3NF9mZW5hYiwgYm9vbCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGFtNTNjOTc0X2ZlbmFiLCAiRW5hYmxlIDI0LWJpdCBETUEgdHJhbnNmZXIgc2l6ZXMiKTsKKworbW9kdWxlX2luaXQoYW01M2M5NzRfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoYW01M2M5NzRfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYwppbmRleCAwYjQ0ZmI1Li45MTRjMzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYworKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYwpAQCAtMTE0LDE2ICsxMTQsMTEgQEAKIHN0YXRpYyBjb25zdCBjaGFyICphcmNtc3JfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICopOwogc3RhdGljIGlycXJldHVybl90IGFyY21zcl9pbnRlcnJ1cHQoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYik7CiBzdGF0aWMgdm9pZCBhcmNtc3JfZnJlZV9pcnEoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKik7Ci1zdGF0aWMgaW50IGFyY21zcl9hZGp1c3RfZGlza19xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkJCSAgaW50IHF1ZXVlX2RlcHRoLCBpbnQgcmVhc29uKQorc3RhdGljIGludCBhcmNtc3JfYWRqdXN0X2Rpc2tfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXVldWVfZGVwdGgpCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAocXVldWVfZGVwdGggPiBBUkNNU1JfTUFYX0NNRF9QRVJMVU4pCiAJCXF1ZXVlX2RlcHRoID0gQVJDTVNSX01BWF9DTURfUEVSTFVOOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgcXVldWVfZGVwdGgpOwotCXJldHVybiBxdWV1ZV9kZXB0aDsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcXVldWVfZGVwdGgpOwogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhcmNtc3Jfc2NzaV9ob3N0X3RlbXBsYXRlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKaW5kZXggZDg5YjliNC4uZGVhYWY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCkBAIC04NTAsMTMgKzg1MCwxMyBAQAogCQkJYnJlYWs7CiAKIAkJICAgIGRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgInNjc2klZC5IOiBpbmNvbXBsZXRlIGRhdGEgdHJhbnNmZXIgZGV0ZWN0ZWQ6IHJlc3VsdD0lMDhYIGNvbW1hbmQ9IiwKLQkJCQlob3N0LT5ob3N0LT5ob3N0X25vLCBTQ3BudC0+cmVzdWx0KTsKLQkJCV9fc2NzaV9wcmludF9jb21tYW5kKFNDcG50LT5jbW5kKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBTQ3BudCwKKwkJCQkgICAgImluY29tcGxldGUgZGF0YSB0cmFuc2ZlciBkZXRlY3RlZDogIgorCQkJCSAgICAicmVzdWx0PSUwOFgiLCBTQ3BudC0+cmVzdWx0KTsKKwkJCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CiAJCQlhY29ybnNjc2lfZHVtcGRtYShob3N0LCAiZG9uZSIpOwotCQkgCWFjb3Juc2NzaV9kdW1wbG9nKGhvc3QsIFNDcG50LT5kZXZpY2UtPmlkKTsKLQkJCVNDcG50LT5yZXN1bHQgJj0gMHhmZmZmOwotCQkJU0NwbnQtPnJlc3VsdCB8PSBESURfRVJST1IgPDwgMTY7CisJCQlhY29ybnNjc2lfZHVtcGxvZyhob3N0LCBTQ3BudC0+ZGV2aWNlLT5pZCk7CisJCQlzZXRfaG9zdF9ieXRlKFNDcG50LCBESURfRVJST1IpOwogCQkgICAgfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jCmluZGV4IDhlZjgxMGEuLmQyOGQ2YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzEuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMKQEAgLTEzLDE2ICsxMywxMiBAQAogI2luY2x1ZGUgPGFzbS9lY2FyZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaW5jbHVkZSAiLi4vc2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KIAotI2RlZmluZSBBVVRPU0VOU0UKICNkZWZpbmUgUFNFVURPX0RNQQogCi0jZGVmaW5lIENVTUFOQVNDU0lfUFVCTElDX1JFTEVBU0UgMQotCiAjZGVmaW5lIHByaXYoaG9zdCkJCQkoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopKGhvc3QpLT5ob3N0ZGF0YSkKICNkZWZpbmUgTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCkJCXN0cnVjdCBTY3NpX0hvc3QgKl9pbnN0YW5jZQogI2RlZmluZSBOQ1I1MzgwX3NldHVwKGluc3RhbmNlKQkJX2luc3RhbmNlID0gaW5zdGFuY2UKQEAgLTMwLDYgKzI2LDcgQEAKICNkZWZpbmUgTkNSNTM4MF93cml0ZShyZWcsIHZhbHVlKQljdW1hbmFzY3NpX3dyaXRlKF9pbnN0YW5jZSwgcmVnLCB2YWx1ZSkKICNkZWZpbmUgTkNSNTM4MF9pbnRyCQkJY3VtYW5hc2NzaV9pbnRyCiAjZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZAkJY3VtYW5hc2NzaV9xdWV1ZV9jb21tYW5kCisjZGVmaW5lIE5DUjUzODBfaW5mbwkJCWN1bWFuYXNjc2lfaW5mbwogCiAjZGVmaW5lIE5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzCVwKIAl1bnNpZ25lZCBjdHJsOwkJCVwKQEAgLTQyLDExICszOSw2IEBACiB7CiB9CiAKLWNvbnN0IGNoYXIgKmN1bWFuYXNjc2lfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzcG50KQotewotCXJldHVybiAiIjsKLX0KLQogI2RlZmluZSBDVFJMCTB4MTZmYwogI2RlZmluZSBTVEFUCTB4MjAwNAogI2RlZmluZSBMKHYpCSgoKHYpPDwxNil8KCh2KSAmIDB4MDAwMGZmZmYpKQpAQCAtMjY3LDE0ICsyNTksNiBAQAogCQlnb3RvIG91dF91bm1hcDsKIAl9CiAKLQlwcmludGsoInNjc2klZDogYXQgcG9ydCAweCUwOGx4IGlycSAlZCIsCi0JCWhvc3QtPmhvc3Rfbm8sIGhvc3QtPmlvX3BvcnQsIGhvc3QtPmlycSk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsCi0JCWhvc3QtPmNhbl9xdWV1ZSwgaG9zdC0+Y21kX3Blcl9sdW4sIENVTUFOQVNDU0lfUFVCTElDX1JFTEVBU0UpOwotCXByaW50aygiXG5zY3NpJWQ6IiwgaG9zdC0+aG9zdF9ubyk7Ci0JTkNSNTM4MF9wcmludF9vcHRpb25zKGhvc3QpOwotCXByaW50aygiXG4iKTsKLQogCXJldCA9IHNjc2lfYWRkX2hvc3QoaG9zdCwgJmVjLT5kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZyZWVfaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYyBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMKaW5kZXggNzFjZmIxZS4uZTY0YzNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jCkBAIC0zMDgsOCArMzA4LDcgQEAKIAlmYXMyMTZfZG9fbG9nKGluZm8sICcwJyArIFNDcG50LT5kZXZpY2UtPmlkLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIAotCXByaW50aygiIENEQjogIik7Ci0JX19zY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQtPmNtbmQpOworCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMDc5LDE0ICsyMDc4LDEyIEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQuJWM6IGluY29tcGxldGUgZGF0YSB0cmFuc2ZlciAiCi0JCQkJImRldGVjdGVkOiByZXM9JTA4WCBwdHI9JXAgbGVuPSVYIENEQjogIiwKLQkJCQlpbmZvLT5ob3N0LT5ob3N0X25vLCAnMCcgKyBTQ3BudC0+ZGV2aWNlLT5pZCwKLQkJCQlTQ3BudC0+cmVzdWx0LCBpbmZvLT5zY3NpLlNDcC5wdHIsCi0JCQkJaW5mby0+c2NzaS5TQ3AudGhpc19yZXNpZHVhbCk7Ci0JCQlfX3Njc2lfcHJpbnRfY29tbWFuZChTQ3BudC0+Y21uZCk7Ci0JCQlTQ3BudC0+cmVzdWx0ICY9IH4oMjU1IDw8IDE2KTsKLQkJCVNDcG50LT5yZXN1bHQgfD0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgU0NwbnQsCisJCQkJICAgICJpbmNvbXBsZXRlIGRhdGEgdHJhbnNmZXIgZGV0ZWN0ZWQ6IHJlcz0lMDhYIHB0cj0lcCBsZW49JVhcbiIsCisJCQkJICAgIFNDcG50LT5yZXN1bHQsIGluZm8tPnNjc2kuU0NwLnB0ciwKKwkJCQkgICAgaW5mby0+c2NzaS5TQ3AudGhpc19yZXNpZHVhbCk7CisJCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOworCQkJc2V0X2hvc3RfYnl0ZShTQ3BudCwgRElEX0VSUk9SKTsKIAkJCWdvdG8gcmVxdWVzdF9zZW5zZTsKIAkJfQogCX0KQEAgLTIxNTgsMTIgKzIxNTUsMTEgQEAKIAkgKiB0byB0cmFuc2Zlciwgd2Ugc2hvdWxkIG5vdCBoYXZlIGEgdmFsaWQgcG9pbnRlci4KIAkgKi8KIAlpZiAoaW5mby0+c2NzaS5TQ3AucHRyICYmIGluZm8tPnNjc2kuU0NwLnRoaXNfcmVzaWR1YWwgPT0gMCkgewotCQlwcmludGsoInNjc2klZC4lYzogemVybyBieXRlcyBsZWZ0IHRvIHRyYW5zZmVyLCBidXQgIgotCQkgICAgICAgImJ1ZmZlciBwb2ludGVyIHN0aWxsIHZhbGlkOiBwdHI9JXAgbGVuPSUwOHggQ0RCOiAiLAotCQkgICAgICAgaW5mby0+aG9zdC0+aG9zdF9ubywgJzAnICsgU0NwbnQtPmRldmljZS0+aWQsCi0JCSAgICAgICBpbmZvLT5zY3NpLlNDcC5wdHIsIGluZm8tPnNjc2kuU0NwLnRoaXNfcmVzaWR1YWwpOworCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAorCQkJICAgICJ6ZXJvIGJ5dGVzIGxlZnQgdG8gdHJhbnNmZXIsIGJ1dCBidWZmZXIgcG9pbnRlciBzdGlsbCB2YWxpZDogcHRyPSVwIGxlbj0lMDh4XG4iLAorCQkJICAgIGluZm8tPnNjc2kuU0NwLnB0ciwgaW5mby0+c2NzaS5TQ3AudGhpc19yZXNpZHVhbCk7CiAJCWluZm8tPnNjc2kuU0NwLnB0ciA9IE5VTEw7Ci0JCV9fc2NzaV9wcmludF9jb21tYW5kKFNDcG50LT5jbW5kKTsKKwkJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKIAl9CiAKIAkvKgpAQCAtMjQyNywxNCArMjQyMywxMSBAQAogCiAJaW5mby0+c3RhdHMuYWJvcnRzICs9IDE7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IGFib3J0IGNvbW1hbmQgIiwgaW5mby0+aG9zdC0+aG9zdF9ubyk7Ci0JX19zY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQtPmNtbmQpOworCXNjbWRfcHJpbnRrKEtFUk5fV0FSTklORywgU0NwbnQsICJhYm9ydCBjb21tYW5kXG4iKTsKIAogCXByaW50X2RlYnVnX2xpc3QoKTsKIAlmYXMyMTZfZHVtcHN0YXRlKGluZm8pOwogCi0JcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiBhYm9ydCAlcCAiLCBpbmZvLT5ob3N0LT5ob3N0X25vLCBTQ3BudCk7Ci0KIAlzd2l0Y2ggKGZhczIxNl9maW5kX2NvbW1hbmQoaW5mbywgU0NwbnQpKSB7CiAJLyoKIAkgKiBXZSBmb3VuZCB0aGUgY29tbWFuZCwgYW5kIGNsZWFyZWQgaXQgb3V0LiAgRWl0aGVyCkBAIC0yNDQyLDcgKzI0MzUsNyBAQAogCSAqIHRhcmdldCwgb3IgdGhlIGJ1c3lsdW4gYml0IGlzIG5vdCBzZXQuCiAJICovCiAJY2FzZSByZXNfc3VjY2VzczoKLQkJcHJpbnRrKCJzdWNjZXNzXG4iKTsKKwkJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBTQ3BudCwgImFib3J0ICVwIHN1Y2Nlc3NcbiIsIFNDcG50KTsKIAkJcmVzdWx0ID0gU1VDQ0VTUzsKIAkJYnJlYWs7CiAKQEAgLTI0NTIsMTQgKzI0NDUsMTMgQEAKIAkgKiBpZiB0aGUgYnVzIGlzIGZyZWUuCiAJICovCiAJY2FzZSByZXNfaHdfYWJvcnQ6Ci0JCQogCiAJLyoKIAkgKiBXZSBhcmUgdW5hYmxlIHRvIGFib3J0IHRoZSBjb21tYW5kIGZvciBzb21lIHJlYXNvbi4KIAkgKi8KIAlkZWZhdWx0OgogCWNhc2UgcmVzX2ZhaWxlZDoKLQkJcHJpbnRrKCJmYWlsZWRcbiIpOworCQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIFNDcG50LCAiYWJvcnQgJXAgZmFpbGVkXG4iLCBTQ3BudCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjY2NCw4ICsyNjU2LDcgQEAKIAogCWZhczIxNl9jaGVja21hZ2ljKGluZm8pOwogCi0JcHJpbnRrKCJzY3NpJWQuJWM6ICVzOiByZXNldHRpbmcgaG9zdFxuIiwKLQkJaW5mby0+aG9zdC0+aG9zdF9ubywgJzAnICsgU0NwbnQtPmRldmljZS0+aWQsIF9fZnVuY19fKTsKKwlmYXMyMTZfbG9nKGluZm8sIExPR19FUlJPUiwgInJlc2V0dGluZyBob3N0Iik7CiAKIAkvKgogCSAqIFJlc2V0IHRoZSBTQ1NJIGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL29hay5jIGIvZHJpdmVycy9zY3NpL2FybS9vYWsuYwppbmRleCAxODhlNzM0Li43YzZmYTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL29hay5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vb2FrLmMKQEAgLTE0LDEzICsxNCw5IEBACiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlICIuLi9zY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KIAotI2RlZmluZSBBVVRPU0VOU0UKIC8qI2RlZmluZSBQU0VVRE9fRE1BKi8KLQotI2RlZmluZSBPQUtTQ1NJX1BVQkxJQ19SRUxFQVNFIDEKICNkZWZpbmUgRE9OVF9VU0VfSU5UUgogCiAjZGVmaW5lIHByaXYoaG9zdCkJCQkoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopKGhvc3QpLT5ob3N0ZGF0YSkKQEAgLTI5LDEwICsyNSw5IEBACiAKICNkZWZpbmUgTkNSNTM4MF9yZWFkKHJlZykJCXJlYWRiKF9iYXNlICsgKChyZWcpIDw8IDIpKQogI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpCXdyaXRlYih2YWx1ZSwgX2Jhc2UgKyAoKHJlZykgPDwgMikpCi0jZGVmaW5lIE5DUjUzODBfaW50cgkJCW9ha3Njc2lfaW50cgogI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQJCW9ha3Njc2lfcXVldWVfY29tbWFuZAorI2RlZmluZSBOQ1I1MzgwX2luZm8JCQlvYWtzY3NpX2luZm8KICNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8JCW9ha3Njc2lfc2hvd19pbmZvCi0jZGVmaW5lIE5DUjUzODBfd3JpdGVfaW5mbwkJb2Frc2NzaV93cml0ZV9pbmZvCiAKICNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMJXAogCXZvaWQgX19pb21lbSAqYmFzZQpAQCAtNDIsMTEgKzM3LDYgQEAKICN1bmRlZiBTVEFSVF9ETUFfSU5JVElBVE9SX1JFQ0VJVkVfUkVHCiAjZGVmaW5lIFNUQVJUX0RNQV9JTklUSUFUT1JfUkVDRUlWRV9SRUcJKDEyOCArIDcpCiAKLWNvbnN0IGNoYXIgKiBvYWtzY3NpX2luZm8gKHN0cnVjdCBTY3NpX0hvc3QgKnNwbnQpCi17Ci0JcmV0dXJuICIiOwotfQotCiAjZGVmaW5lIFNUQVQJKCgxMjggKyAxNikgPDwgMikKICNkZWZpbmUgREFUQQkoKDEyOCArIDgpIDw8IDIpCiAKQEAgLTExNCw3ICsxMDQsNiBAQAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgb2Frc2NzaV90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkuc2hvd19pbmZvCQk9IG9ha3Njc2lfc2hvd19pbmZvLAotCS53cml0ZV9pbmZvCQk9IG9ha3Njc2lfd3JpdGVfaW5mbywKIAkubmFtZQkJCT0gIk9hayAxNi1iaXQgU0NTSSIsCiAJLmluZm8JCQk9IG9ha3Njc2lfaW5mbywKIAkucXVldWVjb21tYW5kCQk9IG9ha3Njc2lfcXVldWVfY29tbWFuZCwKQEAgLTE1MCwxOSArMTM5LDExIEBACiAJCWdvdG8gdW5yZWc7CiAJfQogCi0JaG9zdC0+aXJxID0gSVJRX05PTkU7CisJaG9zdC0+aXJxID0gTk9fSVJROwogCWhvc3QtPm5faW9fcG9ydCA9IDI1NTsKIAogCU5DUjUzODBfaW5pdChob3N0LCAwKTsKIAotCXByaW50aygic2NzaSVkOiBhdCBwb3J0IDB4JTA4bHggaXJxcyBkaXNhYmxlZCIsCi0JCWhvc3QtPmhvc3Rfbm8sIGhvc3QtPmlvX3BvcnQpOwotCXByaW50aygiIG9wdGlvbnMgQ0FOX1FVRVVFPSVkICBDTURfUEVSX0xVTj0lZCByZWxlYXNlPSVkIiwKLQkJaG9zdC0+Y2FuX3F1ZXVlLCBob3N0LT5jbWRfcGVyX2x1biwgT0FLU0NTSV9QVUJMSUNfUkVMRUFTRSk7Ci0JcHJpbnRrKCJcbnNjc2klZDoiLCBob3N0LT5ob3N0X25vKTsKLQlOQ1I1MzgwX3ByaW50X29wdGlvbnMoaG9zdCk7Ci0JcHJpbnRrKCJcbiIpOwotCiAJcmV0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmZWMtPmRldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwppbmRleCA3OWU2ZjA0Li42ZGFlZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKQEAgLTExLDggKzExLDYgQEAKICAqCWRyZXdAY29sb3JhZG8uZWR1CiAgKgkrMSAoMzAzKSA2NjYtNTgzNgogICoKLSAqIERJU1RSSUJVVElPTiBSRUxFQVNFIDYuCi0gKgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0CiAgKgogICogTkNSIDUzODAgRmFtaWx5CkBAIC03Myw2ICs3MSw5IEBACiAgKiAxLiAgVGVzdCBsaW5rZWQgY29tbWFuZCBoYW5kbGluZyBjb2RlIGFmdGVyIEVyaWMgaXMgcmVhZHkgd2l0aAogICogICAgIHRoZSBoaWdoIGxldmVsIGNvZGUuCiAgKi8KKworLyogQWRhcHRlZCBmb3IgdGhlIHN1bjMgYnkgU2FtIENyZWFzZXkuICovCisKICNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaD4KIApAQCAtMTAzLDI3ICsxMDQsNyBAQAogCiAvKgogICogRGVzaWduCi0gKiBJc3N1ZXMgOgogICoKLSAqIFRoZSBvdGhlciBMaW51eCBTQ1NJIGRyaXZlcnMgd2VyZSB3cml0dGVuIHdoZW4gTGludXggd2FzIEludGVsIFBDLW9ubHksCi0gKiBhbmQgc3BlY2lmaWNhbGx5IGZvciBlYWNoIGJvYXJkIHJhdGhlciB0aGFuIGVhY2ggY2hpcC4gIFRoaXMgbWFrZXMgdGhlaXIKLSAqIGFkYXB0YXRpb24gdG8gcGxhdGZvcm1zIGxpa2UgdGhlIE1hYyAoU29tZSBvZiB3aGljaCB1c2UgTkNSNTM4MCdzKQotICogbW9yZSBkaWZmaWN1bHQgdGhhbiBpdCBoYXMgdG8gYmUuCi0gKgotICogQWxzbywgbWFueSBvZiB0aGUgU0NTSSBkcml2ZXJzIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvbW1hbmQgcXVldWluZwotICogcm91dGluZXMgd2VyZSBpbXBsZW1lbnRlZCwgbWVhbmluZyB0aGVpciBpbXBsZW1lbnRhdGlvbnMgb2YgcXVldWVkCi0gKiBjb21tYW5kcyB3ZXJlIGhhY2tlZCBvbiByYXRoZXIgdGhhbiBkZXNpZ25lZCBpbiBmcm9tIHRoZSBzdGFydC4KLSAqCi0gKiBXaGVuIEkgZGVzaWduZWQgdGhlIExpbnV4IFNDU0kgZHJpdmVycyBJIGZpZ3VyZWQgdGhhdAotICogd2hpbGUgaGF2aW5nIHR3byBkaWZmZXJlbnQgU0NTSSBib2FyZHMgaW4gYSBzeXN0ZW0gbWlnaHQgYmUgdXNlZnVsCi0gKiBmb3IgZGVidWdnaW5nIHRoaW5ncywgdHdvIG9mIHRoZSBzYW1lIHR5cGUgd291bGRuJ3QgYmUgdXNlZC4KLSAqIFdlbGwsIEkgd2FzIHdyb25nIGFuZCBhIG51bWJlciBvZiB1c2VycyBoYXZlIG1haWxlZCBtZSBhYm91dCBydW5uaW5nCi0gKiBtdWx0aXBsZSBoaWdoLXBlcmZvcm1hbmNlIFNDU0kgYm9hcmRzIGluIGEgc2VydmVyLgotICoKLSAqIEZpbmFsbHksIHdoZW4gSSBnZXQgcXVlc3Rpb25zIGZyb20gdXNlcnMsIEkgaGF2ZSBubyBpZGVhIHdoYXQKLSAqIHJldmlzaW9uIG9mIG15IGRyaXZlciB0aGV5IGFyZSBydW5uaW5nLgotICoKLSAqIFRoaXMgZHJpdmVyIGF0dGVtcHRzIHRvIGFkZHJlc3MgdGhlc2UgcHJvYmxlbXMgOgogICogVGhpcyBpcyBhIGdlbmVyaWMgNTM4MCBkcml2ZXIuICBUbyB1c2UgaXQgb24gYSBkaWZmZXJlbnQgcGxhdGZvcm0sCiAgKiBvbmUgc2ltcGx5IHdyaXRlcyBhcHByb3ByaWF0ZSBzeXN0ZW0gc3BlY2lmaWMgbWFjcm9zIChpZSwgZGF0YQogICogdHJhbnNmZXIgLSBzb21lIFBDJ3Mgd2lsbCB1c2UgdGhlIEkvTyBidXMsIDY4SydzIG11c3QgdXNlCkBAIC0xMzgsMTcgKzExOSw2IEBACiAgKiBhbGxvd2luZyBtdWx0aXBsZSBjb21tYW5kcyB0byBwcm9wYWdhdGUgYWxsIHRoZSB3YXkgdG8gYSBTQ1NJLUlJIGRldmljZQogICogd2hpbGUgYSBjb21tYW5kIGlzIGFscmVhZHkgZXhlY3V0aW5nLgogICoKLSAqIFRvIHNvbHZlIHRoZSBtdWx0aXBsZS1ib2FyZHMtaW4tdGhlLXNhbWUtc3lzdGVtIHByb2JsZW0sCi0gKiB0aGVyZSBpcyBhIHNlcGFyYXRlIGluc3RhbmNlIHN0cnVjdHVyZSBmb3IgZWFjaCBpbnN0YW5jZQotICogb2YgYSA1MzgwIGluIHRoZSBzeXN0ZW0uICBTbywgbXVsdGlwbGUgTkNSNTM4MCBkcml2ZXJzIHdpbGwKLSAqIGJlIGFibGUgdG8gY29leGlzdCB3aXRoIGFwcHJvcHJpYXRlIGNoYW5nZXMgdG8gdGhlIGhpZ2ggbGV2ZWwKLSAqIFNDU0kgY29kZS4KLSAqCi0gKiBBIE5DUjUzODBfUFVCTElDX1JFVklTSU9OIG1hY3JvIGlzIHByb3ZpZGVkLCB3aXRoIHRoZSByZWxlYXNlCi0gKiBudW1iZXIgKHVwZGF0ZWQgZm9yIGVhY2ggcHVibGljIHJlbGVhc2UpIHByaW50ZWQgYnkgdGhlCi0gKiBOQ1I1MzgwX3ByaW50X29wdGlvbnMgY29tbWFuZCwgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZQotICogd3JhcHBlciBkZXRlY3QgZnVuY3Rpb24sIHNvIHRoYXQgSSBrbm93IHdoYXQgcmVsZWFzZSBvZiB0aGUgZHJpdmVyCi0gKiB1c2VycyBhcmUgdXNpbmcuCiAgKgogICogSXNzdWVzIHNwZWNpZmljIHRvIHRoZSBOQ1I1MzgwIDoKICAqCkBAIC0xNzMsMTkgKzE0MywxNyBAQAogICogQXJjaGl0ZWN0dXJlIDoKICAqCiAgKiBBdCB0aGUgaGVhcnQgb2YgdGhlIGRlc2lnbiBpcyBhIGNvcm91dGluZSwgTkNSNTM4MF9tYWluLAotICogd2hpY2ggaXMgc3RhcnRlZCB3aGVuIG5vdCBydW5uaW5nIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwKLSAqIHRpbWVyLCBhbmQgcXVldWUgY29tbWFuZCBmdW5jdGlvbi4gIEl0IGF0dGVtcHRzIHRvIGVzdGFibGlzaAotICogSV9UX0wgb3IgSV9UX0xfUSBuZXh1c2VzIGJ5IHJlbW92aW5nIHRoZSBjb21tYW5kcyBmcm9tIHRoZQotICogaXNzdWUgcXVldWUgYW5kIGNhbGxpbmcgTkNSNTM4MF9zZWxlY3QoKSBpZiBhIG5leHVzCi0gKiBpcyBub3QgZXN0YWJsaXNoZWQuCisgKiB3aGljaCBpcyBzdGFydGVkIGZyb20gYSB3b3JrcXVldWUgZm9yIGVhY2ggTkNSNTM4MCBob3N0IGluIHRoZQorICogc3lzdGVtLiAgSXQgYXR0ZW1wdHMgdG8gZXN0YWJsaXNoIElfVF9MIG9yIElfVF9MX1EgbmV4dXNlcyBieQorICogcmVtb3ZpbmcgdGhlIGNvbW1hbmRzIGZyb20gdGhlIGlzc3VlIHF1ZXVlIGFuZCBjYWxsaW5nCisgKiBOQ1I1MzgwX3NlbGVjdCgpIGlmIGEgbmV4dXMgaXMgbm90IGVzdGFibGlzaGVkLgogICoKICAqIE9uY2UgYSBuZXh1cyBpcyBlc3RhYmxpc2hlZCwgdGhlIE5DUjUzODBfaW5mb3JtYXRpb25fdHJhbnNmZXIoKQogICogcGhhc2UgZ29lcyB0aHJvdWdoIHRoZSB2YXJpb3VzIHBoYXNlcyBhcyBpbnN0cnVjdGVkIGJ5IHRoZSB0YXJnZXQuCiAgKiBpZiB0aGUgdGFyZ2V0IGdvZXMgaW50byBNU0cgSU4gYW5kIHNlbmRzIGEgRElTQ09OTkVDVCBtZXNzYWdlLAogICogdGhlIGNvbW1hbmQgc3RydWN0dXJlIGlzIHBsYWNlZCBpbnRvIHRoZSBwZXIgaW5zdGFuY2UgZGlzY29ubmVjdGVkCi0gKiBxdWV1ZSwgYW5kIE5DUjUzODBfbWFpbiB0cmllcyB0byBmaW5kIG1vcmUgd29yay4gIElmIFVTTEVFUAotICogd2FzIGRlZmluZWQsIGFuZCB0aGUgdGFyZ2V0IGlzIGlkbGUgZm9yIHRvbyBsb25nLCB0aGUgc3lzdGVtCi0gKiB3aWxsIHRyeSB0byBzbGVlcC4KKyAqIHF1ZXVlLCBhbmQgTkNSNTM4MF9tYWluIHRyaWVzIHRvIGZpbmQgbW9yZSB3b3JrLiAgSWYgdGhlIHRhcmdldCBpcworICogaWRsZSBmb3IgdG9vIGxvbmcsIHRoZSBzeXN0ZW0gd2lsbCB0cnkgdG8gc2xlZXAuCiAgKgogICogSWYgYSBjb21tYW5kIGhhcyBkaXNjb25uZWN0ZWQsIGV2ZW50dWFsbHkgYW4gaW50ZXJydXB0IHdpbGwgdHJpZ2dlciwKICAqIGNhbGxpbmcgTkNSNTM4MF9pbnRyKCkgIHdoaWNoIHdpbGwgaW4gdHVybiBjYWxsIE5DUjUzODBfcmVzZWxlY3QKQEAgLTIxMSw2ICsxNzksOSBAQAogICogQVVUT1NFTlNFIC0gaWYgZGVmaW5lZCwgUkVRVUVTVCBTRU5TRSB3aWxsIGJlIHBlcmZvcm1lZCBhdXRvbWF0aWNhbGx5CiAgKglmb3IgY29tbWFuZHMgdGhhdCByZXR1cm4gd2l0aCBhIENIRUNLIENPTkRJVElPTiBzdGF0dXMuCiAgKgorICogRElGRkVSRU5USUFMIC0gaWYgZGVmaW5lZCwgTkNSNTNjODEgY2hpcHMgd2lsbCB1c2UgZXh0ZXJuYWwgZGlmZmVyZW50aWFsCisgKgl0cmFuc2NlaXZlcnMuCisgKgogICogTElOS0VEIC0gaWYgZGVmaW5lZCwgbGlua2VkIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuCiAgKgogICogUkVBTF9ETUEgLSBpZiBkZWZpbmVkLCBSRUFMIERNQSBpcyB1c2VkIGR1cmluZyB0aGUgZGF0YSB0cmFuc2ZlciBwaGFzZXMuCkBAIC0yMjMsNiArMTk0LDkgQEAKICAqCiAgKiBOQ1I1MzgwX3dyaXRlKHJlZ2lzdGVyLCB2YWx1ZSkgLSB3cml0ZSB0byB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIKICAqCisgKiBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcyAgLSBhZGRpdGlvbmFsIGZpZWxkcyBuZWVkZWQgZm9yIHRoaXMKKyAqICAgICAgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIE5DUjUzODAKKyAqCiAgKiBFaXRoZXIgcmVhbCBETUEgKm9yKiBwc2V1ZG8gRE1BIG1heSBiZSBpbXBsZW1lbnRlZAogICogUkVBTCBmdW5jdGlvbnMgOgogICogTkNSNTM4MF9SRUFMX0RNQSBzaG91bGQgYmUgZGVmaW5lZCBpZiByZWFsIERNQSBpcyB0byBiZSB1c2VkLgpAQCAtMjQxLDQwICsyMTUsMjEgQEAKICAqIE5DUjUzODBfcHdyaXRlKGluc3RhbmNlLCBzcmMsIGNvdW50KQogICogTkNSNTM4MF9wcmVhZChpbnN0YW5jZSwgZHN0LCBjb3VudCk7CiAgKgotICogSWYgbm90aGluZyBzcGVjaWZpYyB0byB0aGlzIGltcGxlbWVudGF0aW9uIG5lZWRzIGRvaW5nIChpZSwgd2l0aCBleHRlcm5hbAotICogaGFyZHdhcmUpLCB5b3UgbXVzdCBhbHNvIGRlZmluZQotICoKLSAqIE5DUjUzODBfcXVldWVfY29tbWFuZAotICogTkNSNTM4MF9yZXNldAotICogTkNSNTM4MF9hYm9ydAotICogTkNSNTM4MF9wcm9jX2luZm8KLSAqCi0gKiB0byBiZSB0aGUgZ2xvYmFsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBzcGVjaWZpYyBkcml2ZXIsIGllCi0gKiAjZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZCB0MTI4X3F1ZXVlX2NvbW1hbmQuCi0gKgotICogSWYgdGhpcyBpcyBub3QgZG9uZSwgdGhlIHJvdXRpbmVzIHdpbGwgYmUgZGVmaW5lZCBhcyBzdGF0aWMgZnVuY3Rpb25zCi0gKiB3aXRoIHRoZSBOQ1I1MzgwKiBuYW1lcyBhbmQgdGhlIHVzZXIgbXVzdCBwcm92aWRlIGEgZ2xvYmFsbHkKLSAqIGFjY2Vzc2libGUgd3JhcHBlciBmdW5jdGlvbi4KLSAqCiAgKiBUaGUgZ2VuZXJpYyBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgYnkgY2FsbGluZyBOQ1I1MzgwX2luaXQoaW5zdGFuY2UpLAogICogYWZ0ZXIgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgaG9zdCBzcGVjaWZpYyBmaWVsZHMgYW5kIElELiAgSWYgdGhlCiAgKiBkcml2ZXIgd2lzaGVzIHRvIGF1dG9wcm9iZSBmb3IgYW4gSVJRIGxpbmUsIHRoZSBOQ1I1MzgwX3Byb2JlX2lycShpbnN0YW5jZSwKLSAqIHBvc3NpYmxlKSBmdW5jdGlvbiBtYXkgYmUgdXNlZC4gIEJlZm9yZSB0aGUgc3BlY2lmaWMgZHJpdmVyIGluaXRpYWxpemF0aW9uCi0gKiBjb2RlIGZpbmlzaGVzLCBOQ1I1MzgwX3ByaW50X29wdGlvbnMgc2hvdWxkIGJlIGNhbGxlZC4KKyAqIHBvc3NpYmxlKSBmdW5jdGlvbiBtYXkgYmUgdXNlZC4KICAqLwogCi1zdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqZmlyc3RfaW5zdGFuY2UgPSBOVUxMOwotc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRoZV90ZW1wbGF0ZSA9IE5VTEw7Ci0KIC8qIE1hY3JvcyBlYXNlIGxpZmUuLi4gOi0pICovCiAjZGVmaW5lCVNFVFVQX0hPU1REQVRBKGluKQkJCQlcCiAgICAgc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0JCQlcCiAJKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopKGluKS0+aG9zdGRhdGEKICNkZWZpbmUJSE9TVERBVEEoaW4pICgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaW4pLT5ob3N0ZGF0YSkKIAotI2RlZmluZQlORVhUKGNtZCkJCSgoU2NzaV9DbW5kICopKGNtZCktPmhvc3Rfc2NyaWJibGUpCisjZGVmaW5lCU5FWFQoY21kKQkJKChzdHJ1Y3Qgc2NzaV9jbW5kICopKGNtZCktPmhvc3Rfc2NyaWJibGUpCiAjZGVmaW5lCVNFVF9ORVhUKGNtZCxuZXh0KQkoKGNtZCktPmhvc3Rfc2NyaWJibGUgPSAodm9pZCAqKShuZXh0KSkKLSNkZWZpbmUJTkVYVEFERFIoY21kKQkJKChTY3NpX0NtbmQgKiopJihjbWQpLT5ob3N0X3NjcmliYmxlKQorI2RlZmluZQlORVhUQUREUihjbWQpCQkoKHN0cnVjdCBzY3NpX2NtbmQgKiopJihjbWQpLT5ob3N0X3NjcmliYmxlKQogCiAjZGVmaW5lCUhPU1ROTwkJaW5zdGFuY2UtPmhvc3Rfbm8KICNkZWZpbmUJSF9OTyhjbWQpCShjbWQpLT5kZXZpY2UtPmhvc3QtPmhvc3Rfbm8KQEAgLTMxNiwzMCArMjcxLDE3IEBACiAgKiBpbXBvcnRhbnQ6IHRoZSB0YWcgYml0IG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgJ25yX2FsbG9jYXRlZCcgaXMgZGVjcmVhc2VkLgogICovCiAKLS8qIC0xIGZvciBUQUdfTk9ORSBpcyBub3QgcG9zc2libGUgd2l0aCB1bnNpZ25lZCBjaGFyIGNtZC0+dGFnICovCi0jdW5kZWYgVEFHX05PTkUKLSNkZWZpbmUgVEFHX05PTkUgMHhmZgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JREVDTEFSRV9CSVRNQVAoYWxsb2NhdGVkLCBNQVhfVEFHUyk7Ci0JaW50IG5yX2FsbG9jYXRlZDsKLQlpbnQgcXVldWVfc2l6ZTsKLX0gVEFHX0FMTE9DOwotCi1zdGF0aWMgVEFHX0FMTE9DIFRhZ0FsbG9jWzhdWzhdOwkvKiA4IHRhcmdldHMgYW5kIDggTFVOcyAqLwotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3RhZ3Modm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X3RhZ3Moc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhKQogewogCWludCB0YXJnZXQsIGx1bjsKLQlUQUdfQUxMT0MgKnRhOworCXN0cnVjdCB0YWdfYWxsb2MgKnRhOwogCi0JaWYgKCFzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcpCisJaWYgKCEoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19UQUdHRURfUVVFVUlORykpCiAJCXJldHVybjsKIAogCWZvciAodGFyZ2V0ID0gMDsgdGFyZ2V0IDwgODsgKyt0YXJnZXQpIHsKIAkJZm9yIChsdW4gPSAwOyBsdW4gPCA4OyArK2x1bikgewotCQkJdGEgPSAmVGFnQWxsb2NbdGFyZ2V0XVtsdW5dOworCQkJdGEgPSAmaG9zdGRhdGEtPlRhZ0FsbG9jW3RhcmdldF1bbHVuXTsKIAkJCWJpdG1hcF96ZXJvKHRhLT5hbGxvY2F0ZWQsIE1BWF9UQUdTKTsKIAkJCXRhLT5ucl9hbGxvY2F0ZWQgPSAwOwogCQkJLyogQXQgdGhlIGJlZ2lubmluZywgYXNzdW1lIHRoZSBtYXhpbXVtIHF1ZXVlIHNpemUgd2UgY291bGQKQEAgLTM1OSw3ICszMDEsNyBAQAogICogY29uZGl0aW9ucy4KICAqLwogCi1zdGF0aWMgaW50IGlzX2x1bl9idXN5KFNjc2lfQ21uZCAqY21kLCBpbnQgc2hvdWxkX2JlX3RhZ2dlZCkKK3N0YXRpYyBpbnQgaXNfbHVuX2J1c3koc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgc2hvdWxkX2JlX3RhZ2dlZCkKIHsKIAl1OCBsdW4gPSBjbWQtPmRldmljZS0+bHVuOwogCVNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKQEAgLTM2NywxMCArMzA5LDExIEBACiAJaWYgKGhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJiAoMSA8PCBsdW4pKQogCQlyZXR1cm4gMTsKIAlpZiAoIXNob3VsZF9iZV90YWdnZWQgfHwKLQkgICAgIXNldHVwX3VzZV90YWdnZWRfcXVldWluZyB8fCAhY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJICAgICEoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19UQUdHRURfUVVFVUlORykgfHwKKwkgICAgIWNtZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKQogCQlyZXR1cm4gMDsKLQlpZiAoVGFnQWxsb2NbY21kLT5kZXZpY2UtPmlkXVtsdW5dLm5yX2FsbG9jYXRlZCA+PQotCSAgICBUYWdBbGxvY1tjbWQtPmRldmljZS0+aWRdW2x1bl0ucXVldWVfc2l6ZSkgeworCWlmIChob3N0ZGF0YS0+VGFnQWxsb2Nbc2NtZF9pZChjbWQpXVtsdW5dLm5yX2FsbG9jYXRlZCA+PQorCSAgICBob3N0ZGF0YS0+VGFnQWxsb2Nbc2NtZF9pZChjbWQpXVtsdW5dLnF1ZXVlX3NpemUpIHsKIAkJZHByaW50ayhOREVCVUdfVEFHUywgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlZDogbm8gZnJlZSB0YWdzXG4iLAogCQkJICAgSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGx1bik7CiAJCXJldHVybiAxOwpAQCAtMzg0LDcgKzMyNyw3IEBACiAgKiB1bnRhZ2dlZC4KICAqLwogCi1zdGF0aWMgdm9pZCBjbWRfZ2V0X3RhZyhTY3NpX0NtbmQgKmNtZCwgaW50IHNob3VsZF9iZV90YWdnZWQpCitzdGF0aWMgdm9pZCBjbWRfZ2V0X3RhZyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCBzaG91bGRfYmVfdGFnZ2VkKQogewogCXU4IGx1biA9IGNtZC0+ZGV2aWNlLT5sdW47CiAJU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwpAQCAtMzkzLDEzICszMzYsMTQgQEAKIAkgKiBhbiB1bnRhZ2dlZCBjb21tYW5kLgogCSAqLwogCWlmICghc2hvdWxkX2JlX3RhZ2dlZCB8fAotCSAgICAhc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nIHx8ICFjbWQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkgeworCSAgICAhKGhvc3RkYXRhLT5mbGFncyAmIEZMQUdfVEFHR0VEX1FVRVVJTkcpIHx8CisJICAgICFjbWQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkgewogCQljbWQtPnRhZyA9IFRBR19OT05FOwogCQlob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdIHw9ICgxIDw8IGx1bik7CiAJCWRwcmludGsoTkRFQlVHX1RBR1MsICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWQgbm93IGFsbG9jYXRlZCBieSB1bnRhZ2dlZCAiCiAJCQkgICAiY29tbWFuZFxuIiwgSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGx1bik7CiAJfSBlbHNlIHsKLQkJVEFHX0FMTE9DICp0YSA9ICZUYWdBbGxvY1tjbWQtPmRldmljZS0+aWRdW2x1bl07CisJCXN0cnVjdCB0YWdfYWxsb2MgKnRhID0gJmhvc3RkYXRhLT5UYWdBbGxvY1tzY21kX2lkKGNtZCldW2x1bl07CiAKIAkJY21kLT50YWcgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHRhLT5hbGxvY2F0ZWQsIE1BWF9UQUdTKTsKIAkJc2V0X2JpdChjbWQtPnRhZywgdGEtPmFsbG9jYXRlZCk7CkBAIC00MTYsNyArMzYwLDcgQEAKICAqIHVubG9jayB0aGUgTFVOLgogICovCiAKLXN0YXRpYyB2b2lkIGNtZF9mcmVlX3RhZyhTY3NpX0NtbmQgKmNtZCkKK3N0YXRpYyB2b2lkIGNtZF9mcmVlX3RhZyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJdTggbHVuID0gY21kLT5kZXZpY2UtPmx1bjsKIAlTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7CkBAIC00MjksNyArMzczLDcgQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJzY3NpJWQ6IHRyeWluZyB0byBmcmVlIGJhZCB0YWcgJWQhXG4iLAogCQkgICAgICAgSF9OTyhjbWQpLCBjbWQtPnRhZyk7CiAJfSBlbHNlIHsKLQkJVEFHX0FMTE9DICp0YSA9ICZUYWdBbGxvY1tjbWQtPmRldmljZS0+aWRdW2x1bl07CisJCXN0cnVjdCB0YWdfYWxsb2MgKnRhID0gJmhvc3RkYXRhLT5UYWdBbGxvY1tzY21kX2lkKGNtZCldW2x1bl07CiAJCWNsZWFyX2JpdChjbWQtPnRhZywgdGEtPmFsbG9jYXRlZCk7CiAJCXRhLT5ucl9hbGxvY2F0ZWQtLTsKIAkJZHByaW50ayhOREVCVUdfVEFHUywgInNjc2klZDogZnJlZWQgdGFnICVkIGZvciB0YXJnZXQgJWQgbHVuICVkXG4iLApAQCAtNDM4LDE3ICszODIsMTcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBmcmVlX2FsbF90YWdzKHZvaWQpCitzdGF0aWMgdm9pZCBmcmVlX2FsbF90YWdzKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSkKIHsKIAlpbnQgdGFyZ2V0LCBsdW47Ci0JVEFHX0FMTE9DICp0YTsKKwlzdHJ1Y3QgdGFnX2FsbG9jICp0YTsKIAotCWlmICghc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nKQorCWlmICghKGhvc3RkYXRhLT5mbGFncyAmIEZMQUdfVEFHR0VEX1FVRVVJTkcpKQogCQlyZXR1cm47CiAKIAlmb3IgKHRhcmdldCA9IDA7IHRhcmdldCA8IDg7ICsrdGFyZ2V0KSB7CiAJCWZvciAobHVuID0gMDsgbHVuIDwgODsgKytsdW4pIHsKLQkJCXRhID0gJlRhZ0FsbG9jW3RhcmdldF1bbHVuXTsKKwkJCXRhID0gJmhvc3RkYXRhLT5UYWdBbGxvY1t0YXJnZXRdW2x1bl07CiAJCQliaXRtYXBfemVybyh0YS0+YWxsb2NhdGVkLCBNQVhfVEFHUyk7CiAJCQl0YS0+bnJfYWxsb2NhdGVkID0gMDsKIAkJfQpAQCAtNDU5LDE5ICs0MDMsMjAgQEAKIAogCiAvKgotICogRnVuY3Rpb246IHZvaWQgbWVyZ2VfY29udGlndW91c19idWZmZXJzKCBTY3NpX0NtbmQgKmNtZCApCisgKiBGdW5jdGlvbjogdm9pZCBtZXJnZV9jb250aWd1b3VzX2J1ZmZlcnMoIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCApCiAgKgogICogUHVycG9zZTogVHJ5IHRvIG1lcmdlIHNldmVyYWwgc2NhdHRlci1nYXRoZXIgcmVxdWVzdHMgaW50byBvbmUgRE1BCiAgKiAgICB0cmFuc2Zlci4gVGhpcyBpcyBwb3NzaWJsZSBpZiB0aGUgc2NhdHRlciBidWZmZXJzIGxpZSBvbgogICogICAgcGh5c2ljYWwgY29udGlndW91cyBhZGRyZXNzZXMuCiAgKgotICogUGFyYW1ldGVyczogU2NzaV9DbW5kICpjbWQKKyAqIFBhcmFtZXRlcnM6IHN0cnVjdCBzY3NpX2NtbmQgKmNtZAogICogICAgVGhlIGNvbW1hbmQgdG8gd29yayBvbi4gVGhlIGZpcnN0IHNjYXR0ZXIgYnVmZmVyJ3MgZGF0YSBhcmUKICAqICAgIGFzc3VtZWQgdG8gYmUgYWxyZWFkeSB0cmFuc2ZlcnJlZCBpbnRvIHB0ci90aGlzX3Jlc2lkdWFsLgogICovCiAKLXN0YXRpYyB2b2lkIG1lcmdlX2NvbnRpZ3VvdXNfYnVmZmVycyhTY3NpX0NtbmQgKmNtZCkKK3N0YXRpYyB2b2lkIG1lcmdlX2NvbnRpZ3VvdXNfYnVmZmVycyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CisjaWYgIWRlZmluZWQoQ09ORklHX1NVTjMpCiAJdW5zaWduZWQgbG9uZyBlbmRhZGRyOwogI2lmIChOREVCVUcgJiBOREVCVUdfTUVSR0lORykKIAl1bnNpZ25lZCBsb25nIG9sZGxlbiA9IGNtZC0+U0NwLnRoaXNfcmVzaWR1YWw7CkBAIC00OTYsMTggKzQ0MSwxNyBAQAogCQlkcHJpbnRrKE5ERUJVR19NRVJHSU5HLCAibWVyZ2VkICVkIGJ1ZmZlcnMgZnJvbSAlcCwgbmV3IGxlbmd0aCAlMDh4XG4iLAogCQkJICAgY250LCBjbWQtPlNDcC5wdHIsIGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwpOwogI2VuZGlmCisjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NVTjMpICovCiB9CiAKLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgaW5pdGlhbGl6ZV9TQ3AoU2NzaV9DbW5kICpjbWQpCisvKioKKyAqIGluaXRpYWxpemVfU0NwIC0gaW5pdCB0aGUgc2NzaSBwb2ludGVyIGZpZWxkCisgKiBAY21kOiBjb21tYW5kIGJsb2NrIHRvIHNldCB1cAogICoKLSAqIFB1cnBvc2UgOiBpbml0aWFsaXplIHRoZSBzYXZlZCBkYXRhIHBvaW50ZXJzIGZvciBjbWQgdG8gcG9pbnQgdG8gdGhlCi0gKglzdGFydCBvZiB0aGUgYnVmZmVyLgotICoKLSAqIElucHV0cyA6IGNtZCAtIFNjc2lfQ21uZCBzdHJ1Y3R1cmUgdG8gaGF2ZSBwb2ludGVycyByZXNldC4KKyAqIFNldCB1cCB0aGUgaW50ZXJuYWwgZmllbGRzIGluIHRoZSBTQ1NJIGNvbW1hbmQuCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpemVfU0NwKFNjc2lfQ21uZCAqY21kKQorc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpemVfU0NwKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIFNjc2kgUG9pbnRlciBmaWVsZCBzbyB0aGF0IGFsbCBvZiB0aGUgY29tbWFuZHMgaW4gdGhlCkBAIC01NTcsMTIgKzUwMSwxMSBAQAogCXswLCBOVUxMfQogfTsKIAotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX3ByaW50KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorLyoqCisgKiBOQ1I1MzgwX3ByaW50IC0gcHJpbnQgc2NzaSBidXMgc2lnbmFscworICogQGluc3RhbmNlOiBhZGFwdGVyIHN0YXRlIHRvIGR1bXAKICAqCi0gKiBQdXJwb3NlIDogcHJpbnQgdGhlIFNDU0kgYnVzIHNpZ25hbHMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwotICoKLSAqIElucHV0IDogaW5zdGFuY2UgLSB3aGljaCBOQ1I1MzgwCisgKiBQcmludCB0aGUgU0NTSSBidXMgc2lnbmFscyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCiAgKi8KIAogc3RhdGljIHZvaWQgTkNSNTM4MF9wcmludChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKQEAgLTYwNSwxMiArNTQ4LDEzIEBACiAJe1BIQVNFX1VOS05PV04sICJVTktOT1dOIn0KIH07CiAKLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9wcmludF9waGFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKKy8qKgorICogTkNSNTM4MF9wcmludF9waGFzZSAtIHNob3cgU0NTSSBwaGFzZQorICogQGluc3RhbmNlOiBhZGFwdGVyIHRvIGR1bXAKICAqCi0gKiBQdXJwb3NlIDogcHJpbnQgdGhlIGN1cnJlbnQgU0NTSSBwaGFzZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCisgKiBQcmludCB0aGUgY3VycmVudCBTQ1NJIHBoYXNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKICAqCi0gKiBJbnB1dCA6IGluc3RhbmNlIC0gd2hpY2ggTkNSNTM4MAorICogTG9ja3M6IG5vbmUKICAqLwogCiBzdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50X3BoYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQpAQCAtNjQ4LDcxICs1OTIsNzUgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAotc3RhdGljIHZvbGF0aWxlIGludCBtYWluX3J1bm5pbmc7Ci1zdGF0aWMgREVDTEFSRV9XT1JLKE5DUjUzODBfdHF1ZXVlLCBOQ1I1MzgwX21haW4pOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfbWFpbih2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX21haW4oc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhKQogewotCWlmICghbWFpbl9ydW5uaW5nKSB7CisJaWYgKCFob3N0ZGF0YS0+bWFpbl9ydW5uaW5nKSB7CiAJCS8qIElmIGluIGludGVycnVwdCBhbmQgTkNSNTM4MF9tYWluKCkgbm90IGFscmVhZHkgcnVubmluZywKIAkJICAgcXVldWUgaXQgb24gdGhlICdpbW1lZGlhdGUnIHRhc2sgcXVldWUsIHRvIGJlIHByb2Nlc3NlZAogCQkgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgY3VycmVudCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMKIAkJICAgZmluaXNoZWQuICovCi0JCXNjaGVkdWxlX3dvcmsoJk5DUjUzODBfdHF1ZXVlKTsKKwkJc2NoZWR1bGVfd29yaygmaG9zdGRhdGEtPm1haW5fdGFzayk7CiAJfQogCS8qIGVsc2U6IG5vdGhpbmcgdG8gZG86IHRoZSBydW5uaW5nIE5DUjUzODBfbWFpbigpIHdpbGwgcGljayB1cAogCSAgIGFueSBuZXdseSBxdWV1ZWQgY29tbWFuZC4gKi8KIH0KIAotCi1zdGF0aWMgaW5saW5lIHZvaWQgTkNSNTM4MF9hbGxfaW5pdCh2b2lkKQotewotCXN0YXRpYyBpbnQgZG9uZSA9IDA7Ci0JaWYgKCFkb25lKSB7Ci0JCWRwcmludGsoTkRFQlVHX0lOSVQsICJzY3NpIDogTkNSNTM4MF9hbGxfaW5pdCgpXG4iKTsKLQkJZG9uZSA9IDE7Ci0JfQotfQotCi0KLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTgzODBfcHJpbnRfb3B0aW9ucyAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCisvKioKKyAqIE5DUjU4MzgwX2luZm8gLSByZXBvcnQgZHJpdmVyIGFuZCBob3N0IGluZm9ybWF0aW9uCisgKiBAaW5zdGFuY2U6IHJlbGV2YW50IHNjc2kgaG9zdCBpbnN0YW5jZQogICoKLSAqIFB1cnBvc2UgOiBjYWxsZWQgYnkgcHJvYmUgY29kZSBpbmRpY2F0aW5nIHRoZSBOQ1I1MzgwIGRyaXZlcgotICoJICAgICBvcHRpb25zIHRoYXQgd2VyZSBzZWxlY3RlZC4KKyAqIEZvciB1c2UgYXMgdGhlIGhvc3QgdGVtcGxhdGUgaW5mbygpIGhhbmRsZXIuCiAgKgotICogSW5wdXRzIDogaW5zdGFuY2UsIHBvaW50ZXIgdG8gdGhpcyBpbnN0YW5jZS4gIFVudXNlZC4KKyAqIExvY2tzOiBub25lCiAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IE5DUjUzODBfcHJpbnRfb3B0aW9ucyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKK3N0YXRpYyBjb25zdCBjaGFyICpOQ1I1MzgwX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7Ci0JcHJpbnRrKCIgZ2VuZXJpYyBvcHRpb25zIgotI2lmZGVmIEFVVE9TRU5TRQotCSAgICAgICAiIEFVVE9TRU5TRSIKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKKworCXJldHVybiBob3N0ZGF0YS0+aW5mbzsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQoreworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOworCisJc25wcmludGYoaG9zdGRhdGEtPmluZm8sIHNpemVvZihob3N0ZGF0YS0+aW5mbyksCisJICAgICAgICAgIiVzLCBpb19wb3J0IDB4JWx4LCBuX2lvX3BvcnQgJWQsICIKKwkgICAgICAgICAiYmFzZSAweCVseCwgaXJxICVkLCAiCisJICAgICAgICAgImNhbl9xdWV1ZSAlZCwgY21kX3Blcl9sdW4gJWQsICIKKwkgICAgICAgICAic2dfdGFibGVzaXplICVkLCB0aGlzX2lkICVkLCAiCisJICAgICAgICAgImZsYWdzIHsgJXN9LCAiCisJICAgICAgICAgIm9wdGlvbnMgeyAlc30gIiwKKwkgICAgICAgICBpbnN0YW5jZS0+aG9zdHQtPm5hbWUsIGluc3RhbmNlLT5pb19wb3J0LCBpbnN0YW5jZS0+bl9pb19wb3J0LAorCSAgICAgICAgIGluc3RhbmNlLT5iYXNlLCBpbnN0YW5jZS0+aXJxLAorCSAgICAgICAgIGluc3RhbmNlLT5jYW5fcXVldWUsIGluc3RhbmNlLT5jbWRfcGVyX2x1biwKKwkgICAgICAgICBpbnN0YW5jZS0+c2dfdGFibGVzaXplLCBpbnN0YW5jZS0+dGhpc19pZCwKKwkgICAgICAgICBob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX1RBR0dFRF9RVUVVSU5HID8gIlRBR0dFRF9RVUVVSU5HICIgOiAiIiwKKyNpZmRlZiBESUZGRVJFTlRJQUwKKwkgICAgICAgICAiRElGRkVSRU5USUFMICIKICNlbmRpZgogI2lmZGVmIFJFQUxfRE1BCi0JICAgICAgICIgUkVBTCBETUEiCisJICAgICAgICAgIlJFQUxfRE1BICIKICNlbmRpZgogI2lmZGVmIFBBUklUWQotCSAgICAgICAiIFBBUklUWSIKKwkgICAgICAgICAiUEFSSVRZICIKICNlbmRpZgogI2lmZGVmIFNVUFBPUlRfVEFHUwotCSAgICAgICAiIFNDU0ktMiBUQUdHRUQgUVVFVUlORyIKKwkgICAgICAgICAiU1VQUE9SVF9UQUdTICIKICNlbmRpZgotCSAgICAgICApOwotCXByaW50aygiIGdlbmVyaWMgcmVsZWFzZT0lZCIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOworCSAgICAgICAgICIiKTsKIH0KIAotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX3ByaW50X3N0YXR1cyAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCisvKioKKyAqIE5DUjUzODBfcHJpbnRfc3RhdHVzIC0gZHVtcCBjb250cm9sbGVyIGluZm8KKyAqIEBpbnN0YW5jZTogY29udHJvbGxlciB0byBkdW1wCiAgKgotICogUHVycG9zZSA6IHByaW50IGNvbW1hbmRzIGluIHRoZSB2YXJpb3VzIHF1ZXVlcywgY2FsbGVkIGZyb20KLSAqCU5DUjUzODBfYWJvcnQgYW5kIE5DUjUzODBfZGVidWcgdG8gYWlkIGRlYnVnZ2luZy4KLSAqCi0gKiBJbnB1dHMgOiBpbnN0YW5jZSwgcG9pbnRlciB0byB0aGlzIGluc3RhbmNlLgorICogUHJpbnQgY29tbWFuZHMgaW4gdGhlIHZhcmlvdXMgcXVldWVzLCBjYWxsZWQgZnJvbSBOQ1I1MzgwX2Fib3J0CisgKiB0byBhaWQgZGVidWdnaW5nLgogICovCiAKLXN0YXRpYyB2b2lkIGxwcmludF9TY3NpX0NtbmQoU2NzaV9DbW5kICpjbWQpCitzdGF0aWMgdm9pZCBscHJpbnRfU2NzaV9DbW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlpbnQgaSwgczsKIAl1bnNpZ25lZCBjaGFyICpjb21tYW5kOwpAQCAtNzI5LDcgKzY3Nyw3IEBACiBzdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50X3N0YXR1cyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JU2NzaV9DbW5kICpwdHI7CisJc3RydWN0IHNjc2lfY21uZCAqcHRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlOQ1I1MzgwX2RwcmludChOREVCVUdfQU5ZLCBpbnN0YW5jZSk7CkBAIC03MzcsMjAgKzY4NSwxOSBAQAogCiAJaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGE7CiAKLQlwcmludGsoIlxuTkNSNTM4MCBjb3JlIHJlbGVhc2U9JWQuXG4iLCBOQ1I1MzgwX1BVQkxJQ19SRUxFQVNFKTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcHJpbnRrKCJOQ1I1MzgwOiBjb3JvdXRpbmUgaXMlcyBydW5uaW5nLlxuIiwKLQkJbWFpbl9ydW5uaW5nID8gIiIgOiAibid0Iik7CisJCWhvc3RkYXRhLT5tYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKIAlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpCiAJCXByaW50aygic2NzaSVkOiBubyBjdXJyZW50bHkgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhPU1ROTyk7CiAJZWxzZQotCQlscHJpbnRfU2NzaV9DbW5kKChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZCk7CisJCWxwcmludF9TY3NpX0NtbmQoKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZCk7CiAJcHJpbnRrKCJzY3NpJWQ6IGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCisJZm9yIChwdHIgPSAoc3RydWN0IHNjc2lfY21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCiAJCWxwcmludF9TY3NpX0NtbmQocHRyKTsKIAogCXByaW50aygic2NzaSVkOiBkaXNjb25uZWN0ZWRfcXVldWVcbiIsIEhPU1ROTyk7Ci0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsKKwlmb3IgKHB0ciA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsKIAkgICAgIHB0ciA9IE5FWFQocHRyKSkKIAkJbHByaW50X1Njc2lfQ21uZChwdHIpOwogCkBAIC03NTgsNyArNzA1LDcgQEAKIAlwcmludGsoIlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfU2NzaV9DbW5kKFNjc2lfQ21uZCAqY21kLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCitzdGF0aWMgdm9pZCBzaG93X1Njc2lfQ21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlpbnQgaSwgczsKIAl1bnNpZ25lZCBjaGFyICpjb21tYW5kOwpAQCAtNzcyLDI4ICs3MTksMjggQEAKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogfQogCi1zdGF0aWMgaW50IE5DUjUzODBfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIE5DUjUzODBfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCVNjc2lfQ21uZCAqcHRyOworCXN0cnVjdCBzY3NpX2NtbmQgKnB0cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGE7CiAKLQlzZXFfcHJpbnRmKG0sICJOQ1I1MzgwIGNvcmUgcmVsZWFzZT0lZC5cbiIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlzZXFfcHJpbnRmKG0sICJOQ1I1MzgwOiBjb3JvdXRpbmUgaXMlcyBydW5uaW5nLlxuIiwKLQkJbWFpbl9ydW5uaW5nID8gIiIgOiAibid0Iik7CisJCWhvc3RkYXRhLT5tYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKIAlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpCiAJCXNlcV9wcmludGYobSwgInNjc2klZDogbm8gY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kXG4iLCBIT1NUTk8pOwogCWVsc2UKLQkJc2hvd19TY3NpX0NtbmQoKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkLCBtKTsKKwkJc2hvd19TY3NpX0NtbmQoKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZCwgbSk7CiAJc2VxX3ByaW50ZihtLCAic2NzaSVkOiBpc3N1ZV9xdWV1ZVxuIiwgSE9TVE5PKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKilob3N0ZGF0YS0+aXNzdWVfcXVldWU7IHB0cjsgcHRyID0gTkVYVChwdHIpKQorCWZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKilob3N0ZGF0YS0+aXNzdWVfcXVldWU7IHB0cjsgcHRyID0gTkVYVChwdHIpKQogCQlzaG93X1Njc2lfQ21uZChwdHIsIG0pOwogCiAJc2VxX3ByaW50ZihtLCAic2NzaSVkOiBkaXNjb25uZWN0ZWRfcXVldWVcbiIsIEhPU1ROTyk7Ci0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsKKwlmb3IgKHB0ciA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsKIAkgICAgIHB0ciA9IE5FWFQocHRyKSkKIAkJc2hvd19TY3NpX0NtbmQocHRyLCBtKTsKIApAQCAtODAxLDE2ICs3NDgsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX2luaXQgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorLyoqCisgKiBOQ1I1MzgwX2luaXQgLSBpbml0aWFsaXNlIGFuIE5DUjUzODAKKyAqIEBpbnN0YW5jZTogYWRhcHRlciB0byBjb25maWd1cmUKKyAqIEBmbGFnczogY29udHJvbCBmbGFncwogICoKLSAqIFB1cnBvc2UgOiBpbml0aWFsaXplcyAqaW5zdGFuY2UgYW5kIGNvcnJlc3BvbmRpbmcgNTM4MCBjaGlwLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlIC0gaW5zdGFudGlhdGlvbiBvZiB0aGUgNTM4MCBkcml2ZXIuCisgKiBJbml0aWFsaXplcyAqaW5zdGFuY2UgYW5kIGNvcnJlc3BvbmRpbmcgNTM4MCBjaGlwLAorICogd2l0aCBmbGFncyBPUidkIGludG8gdGhlIGluaXRpYWwgZmxhZ3MgdmFsdWUuCiAgKgogICogTm90ZXMgOiBJIGFzc3VtZSB0aGF0IHRoZSBob3N0LCBob3N0bm8sIGFuZCBpZCBiaXRzIGhhdmUgYmVlbgotICoJc2V0IGNvcnJlY3RseS4gIEkgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaXJxIGFuZCBvdGhlciBmaWVsZHMuCisgKiBzZXQgY29ycmVjdGx5LiBJIGRvbid0IGNhcmUgYWJvdXQgdGhlIGlycSBhbmQgb3RoZXIgZmllbGRzLgogICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcwogICovCiAKIHN0YXRpYyBpbnQgX19pbml0IE5DUjUzODBfaW5pdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgaW50IGZsYWdzKQpAQCAtODE4LDggKzc2Nyw3IEBACiAJaW50IGk7CiAJU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwogCi0JTkNSNTM4MF9hbGxfaW5pdCgpOwotCisJaG9zdGRhdGEtPmhvc3QgPSBpbnN0YW5jZTsKIAlob3N0ZGF0YS0+YWJvcnRlZCA9IDA7CiAJaG9zdGRhdGEtPmlkX21hc2sgPSAxIDw8IGluc3RhbmNlLT50aGlzX2lkOwogCWhvc3RkYXRhLT5pZF9oaWdoZXJfbWFzayA9IDA7CkBAIC04MjksNyArNzc3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQogCQlob3N0ZGF0YS0+YnVzeVtpXSA9IDA7CiAjaWZkZWYgU1VQUE9SVF9UQUdTCi0JaW5pdF90YWdzKCk7CisJaW5pdF90YWdzKGhvc3RkYXRhKTsKICNlbmRpZgogI2lmIGRlZmluZWQgKFJFQUxfRE1BKQogCWhvc3RkYXRhLT5kbWFfbGVuID0gMDsKQEAgLTgzOCwxOSArNzg2LDExIEBACiAJaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7CiAJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gTlVMTDsKIAlob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlID0gTlVMTDsKLQlob3N0ZGF0YS0+ZmxhZ3MgPSBGTEFHX0NIRUNLX0xBU1RfQllURV9TRU5UOworCWhvc3RkYXRhLT5mbGFncyA9IGZsYWdzOwogCi0JaWYgKCF0aGVfdGVtcGxhdGUpIHsKLQkJdGhlX3RlbXBsYXRlID0gaW5zdGFuY2UtPmhvc3R0OwotCQlmaXJzdF9pbnN0YW5jZSA9IGluc3RhbmNlOwotCX0KKwlJTklUX1dPUksoJmhvc3RkYXRhLT5tYWluX3Rhc2ssIE5DUjUzODBfbWFpbik7CiAKLSNpZm5kZWYgQVVUT1NFTlNFCi0JaWYgKChpbnN0YW5jZS0+Y21kX3Blcl9sdW4gPiAxKSB8fCAoaW5zdGFuY2UtPmNhbl9xdWV1ZSA+IDEpKQotCQlwcmludGsoInNjc2klZDogV0FSTklORyA6IHN1cHBvcnQgZm9yIG11bHRpcGxlIG91dHN0YW5kaW5nIGNvbW1hbmRzIGVuYWJsZWRcbiIKLQkJICAgICAgICIgICAgICAgIHdpdGhvdXQgQVVUT1NFTlNFIG9wdGlvbiwgY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbnMgbWF5XG4iCi0JCSAgICAgICAiICAgICAgICBiZSBpbmNvcnJlY3RseSBjbGVhcmVkLlxuIiwgSE9TVE5PKTsKLSNlbmRpZiAvKiBkZWYgQVVUT1NFTlNFICovCisJcHJlcGFyZV9pbmZvKGluc3RhbmNlKTsKIAogCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7CiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7CkBAIC04NjAsMzMgKzgwMCwzNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX2V4aXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi17Ci0JLyogRW1wdHksIGFzIHdlIGRpZG4ndCBzY2hlZHVsZSBhbnkgZGVsYXllZCB3b3JrICovCi19Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgKFNjc2lfQ21uZCAqY21kLAotICoJdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSkKKy8qKgorICogTkNSNTM4MF9leGl0IC0gcmVtb3ZlIGFuIE5DUjUzODAKKyAqIEBpbnN0YW5jZTogYWRhcHRlciB0byByZW1vdmUKICAqCi0gKiBQdXJwb3NlIDogIGVucXVldWVzIGEgU0NTSSBjb21tYW5kCi0gKgotICogSW5wdXRzIDogY21kIC0gU0NTSSBjb21tYW5kLCBkb25lIC0gZnVuY3Rpb24gY2FsbGVkIG9uIGNvbXBsZXRpb24sIHdpdGgKLSAqCWEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yLgotICoKLSAqIFJldHVybnMgOiAwCi0gKgotICogU2lkZSBlZmZlY3RzIDoKLSAqICAgICAgY21kIGlzIGFkZGVkIHRvIHRoZSBwZXIgaW5zdGFuY2UgaXNzdWVfcXVldWUsIHdpdGggbWlub3IKLSAqCXR3aWRkbGluZyBkb25lIHRvIHRoZSBob3N0IHNwZWNpZmljIGZpZWxkcyBvZiBjbWQuICBJZiB0aGUKLSAqCW1haW4gY29yb3V0aW5lIGlzIG5vdCBydW5uaW5nLCBpdCBpcyByZXN0YXJ0ZWQuCi0gKgorICogQXNzdW1lcyB0aGF0IG5vIG1vcmUgd29yayBjYW4gYmUgcXVldWVkIChlLmcuIGJ5IE5DUjUzODBfaW50cikuCiAgKi8KIAotc3RhdGljIGludCBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmRfbGNrKFNjc2lfQ21uZCAqY21kLCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKQorc3RhdGljIHZvaWQgTkNSNTM4MF9leGl0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQogewotCVNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKLQlTY3NpX0NtbmQgKnRtcDsKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmhvc3RkYXRhLT5tYWluX3Rhc2spOworfQorCisvKioKKyAqIE5DUjUzODBfcXVldWVfY29tbWFuZCAtIHF1ZXVlIGEgY29tbWFuZAorICogQGluc3RhbmNlOiB0aGUgcmVsZXZhbnQgU0NTSSBhZGFwdGVyCisgKiBAY21kOiBTQ1NJIGNvbW1hbmQKKyAqCisgKiBjbWQgaXMgYWRkZWQgdG8gdGhlIHBlciBpbnN0YW5jZSBpc3N1ZV9xdWV1ZSwgd2l0aCBtaW5vcgorICogdHdpZGRsaW5nIGRvbmUgdG8gdGhlIGhvc3Qgc3BlY2lmaWMgZmllbGRzIG9mIGNtZC4gIElmIHRoZQorICogbWFpbiBjb3JvdXRpbmUgaXMgbm90IHJ1bm5pbmcsIGl0IGlzIHJlc3RhcnRlZC4KKyAqLworCitzdGF0aWMgaW50IE5DUjUzODBfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogI2lmIChOREVCVUcgJiBOREVCVUdfTk9fV1JJVEUpCkBAIC04OTYsNDcgKzgzOCwxNyBAQAogCQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogV1JJVEUgYXR0ZW1wdGVkIHdpdGggTk9fV1JJVEUgZGVidWdnaW5nIGZsYWcgc2V0XG4iLAogCQkgICAgICAgSF9OTyhjbWQpKTsKIAkJY21kLT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKLQkJZG9uZShjbWQpOworCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYgLyogKE5ERUJVRyAmIE5ERUJVR19OT19XUklURSkgKi8KIAotI2lmZGVmIE5DUjUzODBfU1RBVFMKLSMgaWYgMAotCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCAmJiAhaG9zdGRhdGEtPmlzc3VlX3F1ZXVlICYmCi0JICAgICFob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKSB7Ci0JCWhvc3RkYXRhLT50aW1lYmFzZSA9IGppZmZpZXM7Ci0JfQotIyBlbmRpZgotIyBpZmRlZiBOQ1I1MzgwX1NUQVRfTElNSVQKLQlpZiAoc2NzaV9idWZmbGVuKGNtZCkgPiBOQ1I1MzgwX1NUQVRfTElNSVQpCi0jIGVuZGlmCi0JCXN3aXRjaCAoY21kLT5jbW5kWzBdKSB7Ci0JCWNhc2UgV1JJVEU6Ci0JCWNhc2UgV1JJVEVfNjoKLQkJY2FzZSBXUklURV8xMDoKLQkJCWhvc3RkYXRhLT50aW1lX3dyaXRlW2NtZC0+ZGV2aWNlLT5pZF0gLT0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQkJaG9zdGRhdGEtPmJ5dGVzX3dyaXRlW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ci0JCQlob3N0ZGF0YS0+cGVuZGluZ3crKzsKLQkJCWJyZWFrOwotCQljYXNlIFJFQUQ6Ci0JCWNhc2UgUkVBRF82OgotCQljYXNlIFJFQURfMTA6Ci0JCQlob3N0ZGF0YS0+dGltZV9yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gLT0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQkJaG9zdGRhdGEtPmJ5dGVzX3JlYWRbY21kLT5kZXZpY2UtPmlkXSArPSBzY3NpX2J1ZmZsZW4oY21kKTsKLQkJCWhvc3RkYXRhLT5wZW5kaW5ncisrOwotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCiAJLyoKIAkgKiBXZSB1c2UgdGhlIGhvc3Rfc2NyaWJibGUgZmllbGQgYXMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGNvbW1hbmQKIAkgKiBpbiBhIHF1ZXVlCiAJICovCiAKIAlTRVRfTkVYVChjbWQsIE5VTEwpOwotCWNtZC0+c2NzaV9kb25lID0gZG9uZTsKLQogCWNtZC0+cmVzdWx0ID0gMDsKIAogCS8qCkBAIC05NDYsNyArODU4LDYgQEAKIAkgKiBzZW5zZSBkYXRhIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCB3aGlsZSB0aGUgY29uZGl0aW9uIGV4aXN0cy4KIAkgKi8KIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkvKiArK2d1ZW50aGVyOiBub3cgdGhhdCB0aGUgaXNzdWUgcXVldWUgaXMgYmVpbmcgc2V0IHVwLCB3ZSBjYW4gbG9jayBTVC1ETUEuCiAJICogT3RoZXJ3aXNlIGEgcnVubmluZyBOQ1I1MzgwX21haW4gbWF5IHN0ZWFsIHRoZSBsb2NrLgogCSAqIExvY2sgYmVmb3JlIGFjdHVhbGx5IGluc2VydGluZyBkdWUgdG8gZmFpcm5lc3MgcmVhc29ucyBleHBsYWluZWQgaW4KQEAgLTk1OSwxNyArODcwLDI0IEBACiAJICogYmVjYXVzZSBhbHNvIGEgdGltZXIgaW50IGNhbiB0cmlnZ2VyIGFuIGFib3J0IG9yIHJlc2V0LCB3aGljaCB3b3VsZAogCSAqIGFsdGVyIHF1ZXVlcyBhbmQgdG91Y2ggdGhlIGxvY2suCiAJICovCi0JaWYgKCFJU19BX1RUKCkpIHsKLQkJLyogcGVyaGFwcyBzdG9wIGNvbW1hbmQgdGltZXIgaGVyZSAqLwotCQlmYWxjb25fZ2V0X2xvY2soKTsKLQkJLyogcGVyaGFwcyByZXN0YXJ0IGNvbW1hbmQgdGltZXIgaGVyZSAqLwotCX0KKwlpZiAoIU5DUjUzODBfYWNxdWlyZV9kbWFfaXJxKGluc3RhbmNlKSkKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKgorCSAqIEluc2VydCB0aGUgY21kIGludG8gdGhlIGlzc3VlIHF1ZXVlLiBOb3RlIHRoYXQgUkVRVUVTVCBTRU5TRQorCSAqIGNvbW1hbmRzIGFyZSBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGUgcXVldWUgc2luY2UgYW55IGNvbW1hbmQgd2lsbAorCSAqIGNsZWFyIHRoZSBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9uIHRoYXQgZXhpc3RzIGFuZCB0aGUKKwkgKiBzZW5zZSBkYXRhIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCB3aGlsZSB0aGUgY29uZGl0aW9uIGV4aXN0cy4KKwkgKi8KKwogCWlmICghKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSkgfHwgKGNtZC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSkgewogCQlMSVNUKGNtZCwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKTsKIAkJU0VUX05FWFQoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwogCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBjbWQ7CiAJfSBlbHNlIHsKLQkJZm9yICh0bXAgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOworCQlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwogCQkgICAgIE5FWFQodG1wKTsgdG1wID0gTkVYVCh0bXApKQogCQkJOwogCQlMSVNUKGNtZCwgdG1wKTsKQEAgLTk4NywzMiArOTA1LDQyIEBACiAJICogSWYgd2UncmUgbm90IGluIGFuIGludGVycnVwdCwgd2UgY2FuIGNhbGwgTkNSNTM4MF9tYWluKCkKIAkgKiB1bmNvbmRpdGlvbmFsbHksIGJlY2F1c2UgaXQgY2Fubm90IGJlIGFscmVhZHkgcnVubmluZy4KIAkgKi8KLQlpZiAoaW5faW50ZXJydXB0KCkgfHwgKChmbGFncyA+PiA4KSAmIDcpID49IDYpCi0JCXF1ZXVlX21haW4oKTsKKwlpZiAoaW5faW50ZXJydXB0KCkgfHwgaXJxc19kaXNhYmxlZCgpKQorCQlxdWV1ZV9tYWluKGhvc3RkYXRhKTsKIAllbHNlCi0JCU5DUjUzODBfbWFpbihOVUxMKTsKKwkJTkNSNTM4MF9tYWluKCZob3N0ZGF0YS0+bWFpbl90YXNrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIERFRl9TQ1NJX1FDTUQoTkNSNTM4MF9xdWV1ZV9jb21tYW5kKQorc3RhdGljIGlubGluZSB2b2lkIG1heWJlX3JlbGVhc2VfZG1hX2lycShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKIAotLyoKLSAqIEZ1bmN0aW9uIDogTkNSNTM4MF9tYWluICh2b2lkKQorCS8qIENhbGxlciBkb2VzIHRoZSBsb2NraW5nIG5lZWRlZCB0byBzZXQgJiB0ZXN0IHRoZXNlIGRhdGEgYXRvbWljYWxseSAqLworCWlmICghaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSAmJgorCSAgICAhaG9zdGRhdGEtPmlzc3VlX3F1ZXVlICYmCisJICAgICFob3N0ZGF0YS0+Y29ubmVjdGVkICYmCisJICAgICFob3N0ZGF0YS0+cmV0YWluX2RtYV9pbnRyKQorCQlOQ1I1MzgwX3JlbGVhc2VfZG1hX2lycShpbnN0YW5jZSk7Cit9CisKKy8qKgorICogTkNSNTM4MF9tYWluIC0gTkNSIHN0YXRlIG1hY2hpbmVzCiAgKgotICogUHVycG9zZSA6IE5DUjUzODBfbWFpbiBpcyBhIGNvcm91dGluZSB0aGF0IHJ1bnMgYXMgbG9uZyBhcyBtb3JlIHdvcmsgY2FuCi0gKgliZSBkb25lIG9uIHRoZSBOQ1I1MzgwIGhvc3QgYWRhcHRlcnMgaW4gYSBzeXN0ZW0uICBCb3RoCi0gKglOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQoKSBhbmQgTkNSNTM4MF9pbnRyKCkgd2lsbCB0cnkgdG8gc3RhcnQgaXQKLSAqCWluIGNhc2UgaXQgaXMgbm90IHJ1bm5pbmcuCisgKiBOQ1I1MzgwX21haW4gaXMgYSBjb3JvdXRpbmUgdGhhdCBydW5zIGFzIGxvbmcgYXMgbW9yZSB3b3JrIGNhbgorICogYmUgZG9uZSBvbiB0aGUgTkNSNTM4MCBob3N0IGFkYXB0ZXJzIGluIGEgc3lzdGVtLiAgQm90aAorICogTkNSNTM4MF9xdWV1ZV9jb21tYW5kKCkgYW5kIE5DUjUzODBfaW50cigpIHdpbGwgdHJ5IHRvIHN0YXJ0IGl0CisgKiBpbiBjYXNlIGl0IGlzIG5vdCBydW5uaW5nLgogICoKLSAqIE5PVEUgOiBOQ1I1MzgwX21haW4gZXhpdHMgd2l0aCBpbnRlcnJ1cHRzICpkaXNhYmxlZCosIHRoZSBjYWxsZXIgc2hvdWxkCi0gKiAgcmVlbmFibGUgdGhlbS4gIFRoaXMgcHJldmVudHMgcmVlbnRyYW5jeSBhbmQga2VybmVsIHN0YWNrIG92ZXJmbG93LgorICogTG9ja3M6IGNhbGxlZCBhcyBpdHMgb3duIHRocmVhZCB3aXRoIG5vIGxvY2tzIGhlbGQuCiAgKi8KIAogc3RhdGljIHZvaWQgTkNSNTM4MF9tYWluKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlTY3NpX0NtbmQgKnRtcCwgKnByZXY7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBmaXJzdF9pbnN0YW5jZTsKLQlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBIT1NUREFUQShpbnN0YW5jZSk7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhLCBtYWluX3Rhc2spOworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gaG9zdGRhdGEtPmhvc3Q7CisJc3RydWN0IHNjc2lfY21uZCAqdG1wLCAqcHJldjsKIAlpbnQgZG9uZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMDM3LDkgKzk2NSw5IEBACiAJICAgJ21haW5fcnVubmluZycgaXMgc2V0IGhlcmUsIGFuZCBxdWV1ZXMvZXhlY3V0ZXMgbWFpbiB2aWEgdGhlCiAJICAgdGFzayBxdWV1ZSwgaXQgZG9lc24ndCBkbyBhbnkgaGFybSwganVzdCB0aGlzIGluc3RhbmNlIG9mIG1haW4KIAkgICB3b24ndCBmaW5kIGFueSB3b3JrIGxlZnQgdG8gZG8uICovCi0JaWYgKG1haW5fcnVubmluZykKKwlpZiAoaG9zdGRhdGEtPm1haW5fcnVubmluZykKIAkJcmV0dXJuOwotCW1haW5fcnVubmluZyA9IDE7CisJaG9zdGRhdGEtPm1haW5fcnVubmluZyA9IDE7CiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAlkbyB7CkBAIC0xMDUzLDcgKzk4MSw3IEBACiAJCQkgKiBmb3IgYSB0YXJnZXQgdGhhdCdzIG5vdCBidXN5LgogCQkJICovCiAjaWYgKE5ERUJVRyAmIE5ERUJVR19MSVNUUykKLQkJCWZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWUsIHByZXYgPSBOVUxMOworCQkJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWUsIHByZXYgPSBOVUxMOwogCQkJICAgICB0bXAgJiYgKHRtcCAhPSBwcmV2KTsgcHJldiA9IHRtcCwgdG1wID0gTkVYVCh0bXApKQogCQkJCTsKIAkJCS8qcHJpbnRrKCIlcCAgIiwgdG1wKTsqLwpAQCAtMTA2MSwxNiArOTg5LDE0IEBACiAJCQkJcHJpbnRrKCIgTE9PUFxuIik7CiAJCQkvKiBlbHNlIHByaW50aygiXG4iKTsgKi8KICNlbmRpZgotCQkJZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwKKwkJCWZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLAogCQkJICAgICBwcmV2ID0gTlVMTDsgdG1wOyBwcmV2ID0gdG1wLCB0bXAgPSBORVhUKHRtcCkpIHsKIAkJCQl1OCBsdW4gPSB0bXAtPmRldmljZS0+bHVuOwogCi0jaWYgKE5ERUJVRyAmIE5ERUJVR19MSVNUUykKLQkJCQlpZiAocHJldiAhPSB0bXApCi0JCQkJCXByaW50aygiTUFJTiB0bXA9JXAgICB0YXJnZXQ9JWQgICBidXN5PSVkIGx1bj0lbGx1XG4iLAotCQkJCQkgICAgICAgdG1wLCB0bXAtPmRldmljZS0+aWQsIGhvc3RkYXRhLT5idXN5W3RtcC0+ZGV2aWNlLT5pZF0sCi0JCQkJCSAgICAgICBsdW4pOwotI2VuZGlmCisJCQkJZHByaW50ayhOREVCVUdfTElTVFMsCisJCQkJICAgICAgICAiTUFJTiB0bXA9JXAgdGFyZ2V0PSVkIGJ1c3k9JWQgbHVuPSVkXG4iLAorCQkJCSAgICAgICAgdG1wLCBzY21kX2lkKHRtcCksIGhvc3RkYXRhLT5idXN5W3NjbWRfaWQodG1wKV0sCisJCQkJICAgICAgICBsdW4pOwogCQkJCS8qICBXaGVuIHdlIGZpbmQgb25lLCByZW1vdmUgaXQgZnJvbSB0aGUgaXNzdWUgcXVldWUuICovCiAJCQkJLyogKytndWVudGhlcjogcG9zc2libGUgcmFjZSB3aXRoIEZhbGNvbiBsb2NraW5nICovCiAJCQkJaWYgKApAQCAtMTA5MCw3ICsxMDE2LDcgQEAKIAkJCQkJCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IE5FWFQodG1wKTsKIAkJCQkJfQogCQkJCQlTRVRfTkVYVCh0bXAsIE5VTEwpOwotCQkJCQlmYWxjb25fZG9udF9yZWxlYXNlKys7CisJCQkJCWhvc3RkYXRhLT5yZXRhaW5fZG1hX2ludHIrKzsKIAogCQkJCQkvKiByZWVuYWJsZSBpbnRlcnJ1cHRzIGFmdGVyIGZpbmRpbmcgb25lICovCiAJCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTExMTcsMTIgKzEwNDMsMTIgQEAKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJCQkJY21kX2dldF90YWcodG1wLCB0bXAtPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSk7CiAjZW5kaWYKLQkJCQkJaWYgKCFOQ1I1MzgwX3NlbGVjdChpbnN0YW5jZSwgdG1wLAotCQkJCQkgICAgKHRtcC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSA/IFRBR19OT05FIDoKLQkJCQkJICAgIFRBR19ORVhUKSkgewotCQkJCQkJZmFsY29uX2RvbnRfcmVsZWFzZS0tOworCQkJCQlpZiAoIU5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCB0bXApKSB7CisJCQkJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJCQkJaG9zdGRhdGEtPnJldGFpbl9kbWFfaW50ci0tOwogCQkJCQkJLyogcmVsZWFzZSBpZiB0YXJnZXQgZGlkIG5vdCByZXNwb25zZSEgKi8KLQkJCQkJCWZhbGNvbl9yZWxlYXNlX2xvY2tfaWZfcG9zc2libGUoaG9zdGRhdGEpOworCQkJCQkJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKKwkJCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9IGVsc2UgewogCQkJCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTExMzIsNyArMTA1OCw3IEBACiAjaWZkZWYgU1VQUE9SVF9UQUdTCiAJCQkJCQljbWRfZnJlZV90YWcodG1wKTsKICNlbmRpZgotCQkJCQkJZmFsY29uX2RvbnRfcmVsZWFzZS0tOworCQkJCQkJaG9zdGRhdGEtPnJldGFpbl9kbWFfaW50ci0tOwogCQkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJCQkJZHByaW50ayhOREVCVUdfTUFJTiwgInNjc2klZDogbWFpbigpOiBzZWxlY3QoKSBmYWlsZWQsICIKIAkJCQkJCQkgICAgInJldHVybmVkIHRvIGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwpAQCAtMTE2MCw3ICsxMDg2LDcgQEAKIAkvKiBCZXR0ZXIgYWxsb3cgaW50cyBfYWZ0ZXJfICdtYWluX3J1bm5pbmcnIGhhcyBiZWVuIGNsZWFyZWQsIGVsc2UKIAkgICBhbiBpbnRlcnJ1cHQgY291bGQgYmVsaWV2ZSB3ZSdsbCBwaWNrIHVwIHRoZSB3b3JrIGl0IGxlZnQgZm9yCiAJICAgdXMsIGJ1dCB3ZSB3b24ndCBzZWUgaXQgYW55bW9yZSBoZXJlLi4uICovCi0JbWFpbl9ydW5uaW5nID0gMDsKKwlob3N0ZGF0YS0+bWFpbl9ydW5uaW5nID0gMDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTExNzksOSArMTEwNSwxMSBAQAogc3RhdGljIHZvaWQgTkNSNTM4MF9kbWFfY29tcGxldGUoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotCWludCB0cmFuc2ZlcmVkLCBzYXZlZF9kYXRhID0gMCwgb3ZlcnJ1biA9IDAsIGNudCwgdG9QSU87Ci0JdW5zaWduZWQgY2hhciAqKmRhdGEsIHA7CisJaW50IHRyYW5zZmVycmVkOworCXVuc2lnbmVkIGNoYXIgKipkYXRhOwogCXZvbGF0aWxlIGludCAqY291bnQ7CisJaW50IHNhdmVkX2RhdGEgPSAwLCBvdmVycnVuID0gMDsKKwl1bnNpZ25lZCBjaGFyIHA7CiAKIAlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiByZWNlaXZlZCBlbmQgb2YgRE1BIGludGVycnVwdCB3aXRoICIKQEAgLTExODksNyArMTExNyw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoYXRhcmlfcmVhZF9vdmVycnVucykgeworCWlmIChob3N0ZGF0YS0+cmVhZF9vdmVycnVucykgewogCQlwID0gaG9zdGRhdGEtPmNvbm5lY3RlZC0+U0NwLnBoYXNlOwogCQlpZiAocCAmIFNSX0lPKSB7CiAJCQl1ZGVsYXkoMTApOwpAQCAtMTIwNywyMSArMTEzNSw0MSBAQAogCQkgICBIT1NUTk8sIE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpLAogCQkgICBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpOwogCisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykKKwlpZiAoKHN1bjNzY3NpX2RtYV9maW5pc2gocnFfZGF0YV9kaXIoaG9zdGRhdGEtPmNvbm5lY3RlZC0+cmVxdWVzdCkpKSkgeworCQlwcl9lcnIoInNjc2klZDogb3ZlcnJ1biBpbiBVREMgY291bnRlciAtLSBub3QgcHJlcGFyZWQgdG8gZGVhbCB3aXRoIHRoaXMhXG4iLAorCQkgICAgICAgaW5zdGFuY2UtPmhvc3Rfbm8pOworCQlCVUcoKTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgd2UncmUgbm90IHN0dWNrIGluIGEgZGF0YSBwaGFzZSAqLworCWlmICgoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiAoQkFTUl9QSEFTRV9NQVRDSCB8IEJBU1JfQUNLKSkgPT0KKwkgICAgKEJBU1JfUEhBU0VfTUFUQ0ggfCBCQVNSX0FDSykpIHsKKwkJcHJfZXJyKCJzY3NpJWQ6IEJBU1IgJTAyeFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8sCisJCSAgICAgICBOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSk7CisJCXByX2Vycigic2NzaSVkOiBidXMgc3R1Y2sgaW4gZGF0YSBwaGFzZSAtLSBwcm9iYWJseSBhIHNpbmdsZSBieXRlIG92ZXJydW4hXG4iLAorCQkgICAgICAgaW5zdGFuY2UtPmhvc3Rfbm8pOworCQlCVUcoKTsKKwl9CisjZW5kaWYKKwogCSh2b2lkKU5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7CiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7CiAJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKIAotCXRyYW5zZmVyZWQgPSBob3N0ZGF0YS0+ZG1hX2xlbiAtIE5DUjUzODBfZG1hX3Jlc2lkdWFsKGluc3RhbmNlKTsKKwl0cmFuc2ZlcnJlZCA9IGhvc3RkYXRhLT5kbWFfbGVuIC0gTkNSNTM4MF9kbWFfcmVzaWR1YWwoaW5zdGFuY2UpOwogCWhvc3RkYXRhLT5kbWFfbGVuID0gMDsKIAogCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKikmaG9zdGRhdGEtPmNvbm5lY3RlZC0+U0NwLnB0cjsKIAljb3VudCA9ICZob3N0ZGF0YS0+Y29ubmVjdGVkLT5TQ3AudGhpc19yZXNpZHVhbDsKLQkqZGF0YSArPSB0cmFuc2ZlcmVkOwotCSpjb3VudCAtPSB0cmFuc2ZlcmVkOworCSpkYXRhICs9IHRyYW5zZmVycmVkOworCSpjb3VudCAtPSB0cmFuc2ZlcnJlZDsKIAotCWlmIChhdGFyaV9yZWFkX292ZXJydW5zKSB7CisJaWYgKGhvc3RkYXRhLT5yZWFkX292ZXJydW5zKSB7CisJCWludCBjbnQsIHRvUElPOworCiAJCWlmICgoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgUEhBU0VfTUFTSykgPT0gcCAmJiAocCAmIFNSX0lPKSkgewotCQkJY250ID0gdG9QSU8gPSBhdGFyaV9yZWFkX292ZXJydW5zOworCQkJY250ID0gdG9QSU8gPSBob3N0ZGF0YS0+cmVhZF9vdmVycnVuczsKIAkJCWlmIChvdmVycnVuKSB7CiAJCQkJZHByaW50ayhOREVCVUdfRE1BLCAiR290IGFuIGlucHV0IG92ZXJydW4sIHVzaW5nIHNhdmVkIGJ5dGVcbiIpOwogCQkJCSooKmRhdGEpKysgPSBzYXZlZF9kYXRhOwpAQCAtMTIzOCwyMCArMTE4NiwxOSBAQAogI2VuZGlmIC8qIFJFQUxfRE1BICovCiAKIAotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX2ludHIgKGludCBpcnEpCisvKioKKyAqIE5DUjUzODBfaW50ciAtIGdlbmVyaWMgTkNSNTM4MCBpcnEgaGFuZGxlcgorICogQGlycTogaW50ZXJydXB0IG51bWJlcgorICogQGRldl9pZDogZGV2aWNlIGluZm8KICAqCi0gKiBQdXJwb3NlIDogaGFuZGxlIGludGVycnVwdHMsIHJlZXN0YWJsaXNoaW5nIElfVF9MIG9yIElfVF9MX1EgbmV4dXNlcwotICoJZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLCBhbmQgcmVzdGFydGluZyBOQ1I1MzgwX21haW4oKQotICoJYXMgcmVxdWlyZWQuCi0gKgotICogSW5wdXRzIDogaW50IGlycSwgaXJxIHRoYXQgY2F1c2VkIHRoaXMgaW50ZXJydXB0LgotICoKKyAqIEhhbmRsZSBpbnRlcnJ1cHRzLCByZWVzdGFibGlzaGluZyBJX1RfTCBvciBJX1RfTF9RIG5leHVzZXMKKyAqIGZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZSwgYW5kIHJlc3RhcnRpbmcgTkNSNTM4MF9tYWluKCkKKyAqIGFzIHJlcXVpcmVkLgogICovCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBOQ1I1MzgwX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gZmlyc3RfaW5zdGFuY2U7CisJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBkZXZfaWQ7CiAJaW50IGRvbmUgPSAxLCBoYW5kbGVkID0gMDsKIAl1bnNpZ25lZCBjaGFyIGJhc3I7CiAKQEAgLTEyNjUsNyArMTIxMiw2IEBACiAJCU5DUjUzODBfZHByaW50KE5ERUJVR19JTlRSLCBpbnN0YW5jZSk7CiAJCWlmICgoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgKFNSX1NFTHxTUl9JTykpID09IChTUl9TRUx8U1JfSU8pKSB7CiAJCQlkb25lID0gMDsKLQkJCUVOQUJMRV9JUlEoKTsKIAkJCWRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IFNFTCBpbnRlcnJ1cHRcbiIsIEhPU1ROTyk7CiAJCQlOQ1I1MzgwX3Jlc2VsZWN0KGluc3RhbmNlKTsKIAkJCSh2b2lkKU5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7CkBAIC0xMjk1LDE3ICsxMjQxLDE5IEBACiAJCQkJZHByaW50ayhOREVCVUdfSU5UUiwgInNjc2klZDogUEhBU0UgTUlTTSBvciBFT1AgaW50ZXJydXB0XG4iLCBIT1NUTk8pOwogCQkJCU5DUjUzODBfZG1hX2NvbXBsZXRlKCBpbnN0YW5jZSApOwogCQkJCWRvbmUgPSAwOwotCQkJCUVOQUJMRV9JUlEoKTsKIAkJCX0gZWxzZQogI2VuZGlmIC8qIFJFQUxfRE1BICovCiAJCQl7CiAvKiBNUzogSWdub3JlIHVua25vd24gcGhhc2UgbWlzbWF0Y2ggaW50ZXJydXB0cyAoY2F1c2VkIGJ5IEVPUCBpbnRlcnJ1cHQpICovCiAJCQkJaWYgKGJhc3IgJiBCQVNSX1BIQVNFX01BVENIKQotCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogdW5rbm93biBpbnRlcnJ1cHQsICIKKwkJCQkJZHByaW50ayhOREVCVUdfSU5UUiwgInNjc2klZDogdW5rbm93biBpbnRlcnJ1cHQsICIKIAkJCQkJICAgICAgICJCQVNSIDB4JXgsIE1SIDB4JXgsIFNSIDB4JXhcbiIsCiAJCQkJCSAgICAgICBIT1NUTk8sIGJhc3IsIE5DUjUzODBfcmVhZChNT0RFX1JFRyksCiAJCQkJCSAgICAgICBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpOwogCQkJCSh2b2lkKU5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7CisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCQkJCWRyZWdzLT5jc3IgfD0gQ1NSX0RNQV9FTkFCTEU7CisjZW5kaWYKIAkJCX0KIAkJfSAvKiBpZiAhKFNFTEVDVElPTiB8fCBQQVJJVFkpICovCiAJCWhhbmRsZWQgPSAxOwpAQCAtMTMxNCw1MyArMTI2MiwyOSBAQAogCQkgICAgICAgIkJBU1IgMHglWCwgTVIgMHglWCwgU1IgMHgleFxuIiwgSE9TVE5PLCBiYXNyLAogCQkgICAgICAgTkNSNTM4MF9yZWFkKE1PREVfUkVHKSwgTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpKTsKIAkJKHZvaWQpTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJCWRyZWdzLT5jc3IgfD0gQ1NSX0RNQV9FTkFCTEU7CisjZW5kaWYKIAl9CiAKIAlpZiAoIWRvbmUpIHsKIAkJZHByaW50ayhOREVCVUdfSU5UUiwgInNjc2klZDogaW4gaW50IHJvdXRpbmUsIGNhbGxpbmcgbWFpblxuIiwgSE9TVE5PKTsKIAkJLyogUHV0IGEgY2FsbCB0byBOQ1I1MzgwX21haW4oKSBvbiB0aGUgcXVldWUuLi4gKi8KLQkJcXVldWVfbWFpbigpOworCQlxdWV1ZV9tYWluKHNob3N0X3ByaXYoaW5zdGFuY2UpKTsKIAl9CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi1zdGF0aWMgdm9pZCBjb2xsZWN0X3N0YXRzKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKiBob3N0ZGF0YSwgU2NzaV9DbW5kICpjbWQpCi17Ci0jIGlmZGVmIE5DUjUzODBfU1RBVF9MSU1JVAotCWlmIChzY3NpX2J1ZmZsZW4oY21kKSA+IE5DUjUzODBfU1RBVF9MSU1JVCkKLSMgZW5kaWYKLQkJc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKLQkJY2FzZSBXUklURToKLQkJY2FzZSBXUklURV82OgotCQljYXNlIFdSSVRFXzEwOgotCQkJaG9zdGRhdGEtPnRpbWVfd3JpdGVbY21kLT5kZXZpY2UtPmlkXSArPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCQkvKmhvc3RkYXRhLT5ieXRlc193cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOyovCi0JCQlob3N0ZGF0YS0+cGVuZGluZ3ctLTsKLQkJCWJyZWFrOwotCQljYXNlIFJFQUQ6Ci0JCWNhc2UgUkVBRF82OgotCQljYXNlIFJFQURfMTA6Ci0JCQlob3N0ZGF0YS0+dGltZV9yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gKz0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQkJLypob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOyovCi0JCQlob3N0ZGF0YS0+cGVuZGluZ3ItLTsKLQkJCWJyZWFrOwotCQl9Ci19Ci0jZW5kaWYKLQogLyoKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfc2VsZWN0IChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgU2NzaV9DbW5kICpjbWQsCi0gKglpbnQgdGFnKTsKKyAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjc2lfY21uZCAqY21kKQogICoKICAqIFB1cnBvc2UgOiBlc3RhYmxpc2hlcyBJX1RfTCBvciBJX1RfTF9RIG5leHVzIGZvciBuZXcgb3IgZXhpc3RpbmcgY29tbWFuZCwKICAqCWluY2x1ZGluZyBBUkJJVFJBVElPTiwgU0VMRUNUSU9OLCBhbmQgaW5pdGlhbCBtZXNzYWdlIG91dCBmb3IKICAqCUlERU5USUZZIGFuZCBxdWV1ZSBtZXNzYWdlcy4KICAqCiAgKiBJbnB1dHMgOiBpbnN0YW5jZSAtIGluc3RhbnRpYXRpb24gb2YgdGhlIDUzODAgZHJpdmVyIG9uIHdoaWNoIHRoaXMKLSAqCXRhcmdldCBsaXZlcywgY21kIC0gU0NTSSBjb21tYW5kIHRvIGV4ZWN1dGUsIHRhZyAtIHNldCB0byBUQUdfTkVYVCBmb3IKLSAqCW5ldyB0YWcsIFRBR19OT05FIGZvciB1bnRhZ2dlZCBxdWV1ZWluZywgb3RoZXJ3aXNlIHNldCB0byB0aGUgdGFnIGZvcgotICoJdGhlIGNvbW1hbmQgdGhhdCBpcyBwcmVzZW50bHkgY29ubmVjdGVkLgorICoJdGFyZ2V0IGxpdmVzLCBjbWQgLSBTQ1NJIGNvbW1hbmQgdG8gZXhlY3V0ZS4KICAqCiAgKiBSZXR1cm5zIDogLTEgaWYgc2VsZWN0aW9uIGNvdWxkIG5vdCBleGVjdXRlIGZvciBzb21lIHJlYXNvbiwKICAqCTAgaWYgc2VsZWN0aW9uIHN1Y2NlZWRlZCBvciBmYWlsZWQgYmVjYXVzZSB0aGUgdGFyZ2V0CkBAIC0xMzgwLDcgKzEzMDQsNyBAQAogICoJCWNtZC0+cmVzdWx0IGhvc3QgYnl0ZSBzZXQgdG8gRElEX0JBRF9UQVJHRVQuCiAgKi8KIAotc3RhdGljIGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgU2NzaV9DbW5kICpjbWQsIGludCB0YWcpCitzdGF0aWMgaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwogCXVuc2lnbmVkIGNoYXIgdG1wWzNdLCBwaGFzZTsKQEAgLTE1NjIsNyArMTQ4Niw3IEBACiAJICogc2VsZWN0aW9uLgogCSAqLwogCi0JdGltZW91dCA9IGppZmZpZXMgKyAyNTsKKwl0aW1lb3V0ID0gamlmZmllcyArICgyNTAgKiBIWiAvIDEwMDApOwogCiAJLyoKIAkgKiBYWFggdmVyeSBpbnRlcmVzdGluZyAtIHdlJ3JlIHNlZWluZyBhIGJvdW5jZSB3aGVyZSB0aGUgQlNZIHdlCkBAIC0xNjE2LDkgKzE1NDAsNiBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWNtZC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7Ci0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCQljb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwotI2VuZGlmCiAjaWZkZWYgU1VQUE9SVF9UQUdTCiAJCWNtZF9mcmVlX3RhZyhjbWQpOwogI2VuZGlmCkBAIC0xNjc2LDYgKzE1OTcsOSBAQAogI2lmbmRlZiBTVVBQT1JUX1RBR1MKIAlob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdIHw9ICgxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwogI2VuZGlmCisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCWRyZWdzLT5jc3IgfD0gQ1NSX0lOVFI7CisjZW5kaWYKIAogCWluaXRpYWxpemVfU0NwKGNtZCk7CiAKQEAgLTE4MjYsNyArMTc1MCw3IEBACiAgKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgogICovCiAKLXN0YXRpYyBpbnQgZG9fYWJvcnQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKK3N0YXRpYyBpbnQgZG9fYWJvcnQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJdW5zaWduZWQgY2hhciB0bXAsICptc2dwdHIsIHBoYXNlOwogCWludCBsZW47CkBAIC0xODYxLDcgKzE3ODUsNyBAQAogCW1zZ3B0ciA9ICZ0bXA7CiAJbGVuID0gMTsKIAlwaGFzZSA9IFBIQVNFX01TR09VVDsKLQlOQ1I1MzgwX3RyYW5zZmVyX3Bpbyhob3N0LCAmcGhhc2UsICZsZW4sICZtc2dwdHIpOworCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZtc2dwdHIpOwogCiAJLyoKIAkgKiBJZiB3ZSBnb3QgaGVyZSwgYW5kIHRoZSBjb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksCkBAIC0xODk5LDE3ICsxODIzLDYyIEBACiAJU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwogCXJlZ2lzdGVyIGludCBjID0gKmNvdW50OwogCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgcCA9ICpwaGFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoIXN1bjNfZG1hX3NldHVwX2RvbmUpIHsKKwkJcHJfZXJyKCJzY3NpJWQ6IHRyYW5zZmVyX2RtYSB3aXRob3V0IHNldHVwIVxuIiwKKwkJICAgICAgIGluc3RhbmNlLT5ob3N0X25vKTsKKwkJQlVHKCk7CisJfQorCWhvc3RkYXRhLT5kbWFfbGVuID0gYzsKKworCWRwcmludGsoTkRFQlVHX0RNQSwgInNjc2klZDogaW5pdGlhbGl6aW5nIERNQSBmb3IgJXMsICVkIGJ5dGVzICVzICVwXG4iLAorCQlpbnN0YW5jZS0+aG9zdF9ubywgKHAgJiBTUl9JTykgPyAicmVhZGluZyIgOiAid3JpdGluZyIsCisJCWMsIChwICYgU1JfSU8pID8gInRvIiA6ICJmcm9tIiwgKmRhdGEpOworCisJLyogbmV0YnNkIHR1cm5zIG9mZiBpbnRzIGhlcmUsIHdoeSBub3QgYmUgc2FmZSBhbmQgZG8gaXQgdG9vICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogc2VuZCBzdGFydCBjaGFpbiAqLworCXN1bjNzY3NpX2RtYV9zdGFydChjLCAqZGF0YSk7CisKKwlpZiAocCAmIFNSX0lPKSB7CisJCU5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAxKTsKKwkJTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKKwkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIDApOworCQlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLAorCQkJICAgICAgKE5DUjUzODBfcmVhZChNT0RFX1JFRykgfCBNUl9ETUFfTU9ERSB8IE1SX0VOQUJMRV9FT1BfSU5UUikpOworCQlOQ1I1MzgwX3dyaXRlKFNUQVJUX0RNQV9JTklUSUFUT1JfUkVDRUlWRV9SRUcsIDApOworCX0gZWxzZSB7CisJCU5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAwKTsKKwkJTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKKwkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9BU1NFUlRfREFUQSk7CisJCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsCisJCQkgICAgICAoTkNSNTM4MF9yZWFkKE1PREVfUkVHKSB8IE1SX0RNQV9NT0RFIHwgTVJfRU5BQkxFX0VPUF9JTlRSKSk7CisJCU5DUjUzODBfd3JpdGUoU1RBUlRfRE1BX1NFTkRfUkVHLCAwKTsKKwl9CisKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKKyNlbmRpZgorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJc3VuM19kbWFfYWN0aXZlID0gMTsKKworI2Vsc2UgLyogIWRlZmluZWQoQ09ORklHX1NVTjMpICovCiAJcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqZCA9ICpkYXRhOwogCXVuc2lnbmVkIGNoYXIgdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoKHRtcCA9IChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBQSEFTRV9NQVNLKSkgIT0gcCkgewogCQkqcGhhc2UgPSB0bXA7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoYXRhcmlfcmVhZF9vdmVycnVucyAmJiAocCAmIFNSX0lPKSkKLQkJYyAtPSBhdGFyaV9yZWFkX292ZXJydW5zOworCWlmIChob3N0ZGF0YS0+cmVhZF9vdmVycnVucyAmJiAocCAmIFNSX0lPKSkKKwkJYyAtPSBob3N0ZGF0YS0+cmVhZF9vdmVycnVuczsKIAogCWRwcmludGsoTkRFQlVHX0RNQSwgInNjc2klZDogaW5pdGlhbGl6aW5nIERNQSBmb3IgJXMsICVkIGJ5dGVzICVzICVwXG4iLAogCQkgICBIT1NUTk8sIChwICYgU1JfSU8pID8gInJlYWRpbmciIDogIndyaXRpbmciLApAQCAtMTkyMSw3ICsxODkwLDcgQEAKIAlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFIHwgTVJfRE1BX01PREUgfCBNUl9FTkFCTEVfRU9QX0lOVFIgfCBNUl9NT05JVE9SX0JTWSk7CiAjZW5kaWYgLyogZGVmIFJFQUxfRE1BICAqLwogCi0JaWYgKElTX0FfVFQoKSkgeworCWlmICghKGhvc3RkYXRhLT5mbGFncyAmIEZMQUdfTEFURV9ETUFfU0VUVVApKSB7CiAJCS8qIE9uIHRoZSBNZWR1c2EsIGl0IGlzIGEgbXVzdCB0byBpbml0aWFsaXplIHRoZSBETUEgYmVmb3JlCiAJCSAqIHN0YXJ0aW5nIHRoZSBOQ1IuIFRoaXMgaXMgYWxzbyB0aGUgY2xlYW5lciB3YXkgZm9yIHRoZSBUVC4KIAkJICovCkBAIC0xOTM5LDcgKzE5MDgsNyBAQAogCQlOQ1I1MzgwX3dyaXRlKFNUQVJUX0RNQV9TRU5EX1JFRywgMCk7CiAJfQogCi0JaWYgKCFJU19BX1RUKCkpIHsKKwlpZiAoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19MQVRFX0RNQV9TRVRVUCkgewogCQkvKiBPbiB0aGUgRmFsY29uLCB0aGUgRE1BIHNldHVwIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgbGFzdCAqLwogCQkvKiBOQ1IgYWNjZXNzLCBlbHNlIHRoZSBETUEgc2V0dXAgZ2V0cyB0cmFzaGVkIQogCQkgKi8KQEAgLTE5NDksNiArMTkxOCw4IEBACiAJCQlOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0YW5jZSwgZCwgYyk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CisjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NVTjMpICovCisKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBkZWZpbmVkKFJFQUxfRE1BKSAqLwpAQCAtMTk4Miw3ICsxOTUzLDExIEBACiAjZW5kaWYKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwogCXVuc2lnbmVkIGNoYXIgcGhhc2UsIHRtcCwgZXh0ZW5kZWRfbXNnWzEwXSwgb2xkX3BoYXNlID0gMHhmZjsKLQlTY3NpX0NtbmQgKmNtZCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZDsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkOworCisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCWRyZWdzLT5jc3IgfD0gQ1NSX0lOVFI7CisjZW5kaWYKIAogCXdoaWxlICgxKSB7CiAJCXRtcCA9IE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKTsKQEAgLTE5OTMsNiArMTk2OCwzMyBAQAogCQkJCW9sZF9waGFzZSA9IHBoYXNlOwogCQkJCU5DUjUzODBfZHByaW50X3BoYXNlKE5ERUJVR19JTkZPUk1BVElPTiwgaW5zdGFuY2UpOwogCQkJfQorI2lmIGRlZmluZWQoQ09ORklHX1NVTjMpCisJCQlpZiAocGhhc2UgPT0gUEhBU0VfQ01ET1VUKSB7CisjaWYgZGVmaW5lZChSRUFMX0RNQSkKKwkJCQl2b2lkICpkOworCQkJCXVuc2lnbmVkIGxvbmcgY291bnQ7CisKKwkJCQlpZiAoIWNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgJiYgY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCkgeworCQkJCQljb3VudCA9IGNtZC0+U0NwLmJ1ZmZlci0+bGVuZ3RoOworCQkJCQlkID0gc2dfdmlydChjbWQtPlNDcC5idWZmZXIpOworCQkJCX0gZWxzZSB7CisJCQkJCWNvdW50ID0gY21kLT5TQ3AudGhpc19yZXNpZHVhbDsKKwkJCQkJZCA9IGNtZC0+U0NwLnB0cjsKKwkJCQl9CisJCQkJLyogdGhpcyBjb21tYW5kIHNldHVwIGZvciBkbWEgeWV0PyAqLworCQkJCWlmICgoY291bnQgPj0gRE1BX01JTl9TSVpFKSAmJiAoc3VuM19kbWFfc2V0dXBfZG9uZSAhPSBjbWQpKSB7CisJCQkJCWlmIChjbWQtPnJlcXVlc3QtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKSB7CisJCQkJCQlzdW4zc2NzaV9kbWFfc2V0dXAoZCwgY291bnQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgcnFfZGF0YV9kaXIoY21kLT5yZXF1ZXN0KSk7CisJCQkJCQlzdW4zX2RtYV9zZXR1cF9kb25lID0gY21kOworCQkJCQl9CisJCQkJfQorI2VuZGlmCisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCQkJCWRyZWdzLT5jc3IgfD0gQ1NSX0lOVFI7CisjZW5kaWYKKwkJCX0KKyNlbmRpZiAvKiBDT05GSUdfU1VOMyAqLwogCiAJCQlpZiAoc2luayAmJiAocGhhc2UgIT0gUEhBU0VfTVNHT1VUKSkgewogCQkJCU5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCBQSEFTRV9TUl9UT19UQ1IodG1wKSk7CkBAIC0yMDU0LDggKzIwNTYsMTEgQEAKIAkJCQkgKi8KIAogI2lmIGRlZmluZWQoUkVBTF9ETUEpCi0JCQkJaWYgKCFjbWQtPmRldmljZS0+Ym9ya2VuICYmCi0JCQkJICAgICh0cmFuc2ZlcnNpemUgPSBOQ1I1MzgwX2RtYV94ZmVyX2xlbihpbnN0YW5jZSxjbWQscGhhc2UpKSA+IDMxKSB7CisJCQkJaWYgKAorI2lmICFkZWZpbmVkKENPTkZJR19TVU4zKQorCQkJCSAgICAhY21kLT5kZXZpY2UtPmJvcmtlbiAmJgorI2VuZGlmCisJCQkJICAgICh0cmFuc2ZlcnNpemUgPSBOQ1I1MzgwX2RtYV94ZmVyX2xlbihpbnN0YW5jZSwgY21kLCBwaGFzZSkpID49IERNQV9NSU5fU0laRSkgewogCQkJCQlsZW4gPSB0cmFuc2ZlcnNpemU7CiAJCQkJCWNtZC0+U0NwLnBoYXNlID0gcGhhc2U7CiAJCQkJCWlmIChOQ1I1MzgwX3RyYW5zZmVyX2RtYShpbnN0YW5jZSwgJnBoYXNlLApAQCAtMjA2NCw5ICsyMDY5LDggQEAKIAkJCQkJCSAqIElmIHRoZSB3YXRjaGRvZyB0aW1lciBmaXJlcywgYWxsIGZ1dHVyZQogCQkJCQkJICogYWNjZXNzZXMgdG8gdGhpcyBkZXZpY2Ugd2lsbCB1c2UgdGhlCiAJCQkJCQkgKiBwb2xsZWQtSU8uICovCi0JCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogc3dpdGNoaW5nIHRhcmdldCAlZCAiCi0JCQkJCQkJICAgImx1biAlbGx1IHRvIHNsb3cgaGFuZHNoYWtlXG4iLCBIT1NUTk8sCi0JCQkJCQkJICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKKwkJCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkJCQkJCSJzd2l0Y2hpbmcgdG8gc2xvdyBoYW5kc2hha2VcbiIpOwogCQkJCQkJY21kLT5kZXZpY2UtPmJvcmtlbiA9IDE7CiAJCQkJCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfAogCQkJCQkJCUlDUl9BU1NFUlRfQVROKTsKQEAgLTIwOTIsNiArMjA5NiwxMSBAQAogCQkJCQlOQ1I1MzgwX3RyYW5zZmVyX3BpbyhpbnN0YW5jZSwgJnBoYXNlLAogCQkJCQkJCSAgICAgKGludCAqKSZjbWQtPlNDcC50aGlzX3Jlc2lkdWFsLAogCQkJCQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKiopJmNtZC0+U0NwLnB0cik7CisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykgJiYgZGVmaW5lZChSRUFMX0RNQSkKKwkJCQkvKiBpZiB3ZSBoYWQgaW50ZW5kZWQgdG8gZG1hIHRoYXQgY29tbWFuZCBjbGVhciBpdCAqLworCQkJCWlmIChzdW4zX2RtYV9zZXR1cF9kb25lID09IGNtZCkKKwkJCQkJc3VuM19kbWFfc2V0dXBfZG9uZSA9IE5VTEw7CisjZW5kaWYKIAkJCQlicmVhazsKIAkJCWNhc2UgUEhBU0VfTVNHSU46CiAJCQkJbGVuID0gMTsKQEAgLTIxNDUsOSArMjE1NCw2IEBACiAJCQkJCWRwcmludGsoTkRFQlVHX0xJTktFRCwgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlbGx1IGxpbmtlZCByZXF1ZXN0ICIKIAkJCQkJCSAgICJkb25lLCBjYWxsaW5nIHNjc2lfZG9uZSgpLlxuIiwKIAkJCQkJCSAgIEhPU1ROTywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JCQkJCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKIAkJCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJCQkJY21kID0gaG9zdGRhdGEtPmNvbm5lY3RlZDsKIAkJCQkJYnJlYWs7CkBAIC0yMTU2LDExICsyMTYyLDEyIEBACiAJCQkJY2FzZSBDT01NQU5EX0NPTVBMRVRFOgogCQkJCQkvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KIAkJCQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQkJCQkJLyogKytndWVudGhlcjogcG9zc2libGUgcmFjZSB3aXRoIEZhbGNvbiBsb2NraW5nICovCi0JCQkJCWZhbGNvbl9kb250X3JlbGVhc2UrKzsKLQkJCQkJaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7CiAJCQkJCWRwcmludGsoTkRFQlVHX1FVRVVFUywgInNjc2klZDogY29tbWFuZCBmb3IgdGFyZ2V0ICVkLCBsdW4gJWxsdSAiCiAJCQkJCQkgICJjb21wbGV0ZWRcbiIsIEhPU1ROTywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKKworCQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQkJCWhvc3RkYXRhLT5yZXRhaW5fZG1hX2ludHIrKzsKKwkJCQkJaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7CiAjaWZkZWYgU1VQUE9SVF9UQUdTCiAJCQkJCWNtZF9mcmVlX3RhZyhjbWQpOwogCQkJCQlpZiAoc3RhdHVzX2J5dGUoY21kLT5TQ3AuU3RhdHVzKSA9PSBRVUVVRV9GVUxMKSB7CkBAIC0yMTcyLDcgKzIxNzksNyBAQAogCQkJCQkJICovCiAJCQkJCQkvKiArK0FuZHJlYXM6IHRoZSBtaWQgbGV2ZWwgY29kZSBrbm93cyBhYm91dAogCQkJCQkJICAgUVVFVUVfRlVMTCBub3cuICovCi0JCQkJCQlUQUdfQUxMT0MgKnRhID0gJlRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bY21kLT5kZXZpY2UtPmx1bl07CisJCQkJCQlzdHJ1Y3QgdGFnX2FsbG9jICp0YSA9ICZob3N0ZGF0YS0+VGFnQWxsb2Nbc2NtZF9pZChjbWQpXVtjbWQtPmRldmljZS0+bHVuXTsKIAkJCQkJCWRwcmludGsoTkRFQlVHX1RBR1MsICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWxsdSByZXR1cm5lZCAiCiAJCQkJCQkJICAgIlFVRVVFX0ZVTEwgYWZ0ZXIgJWQgY29tbWFuZHNcbiIsCiAJCQkJCQkJICAgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sCkBAIC0yMjA3LDcgKzIyMTQsNiBAQAogCQkJCQllbHNlIGlmIChzdGF0dXNfYnl0ZShjbWQtPlNDcC5TdGF0dXMpICE9IEdPT0QpCiAJCQkJCQljbWQtPnJlc3VsdCA9IChjbWQtPnJlc3VsdCAmIDB4MDBmZmZmKSB8IChESURfRVJST1IgPDwgMTYpOwogCi0jaWZkZWYgQVVUT1NFTlNFCiAJCQkJCWlmICgoY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpICYmCiAJCQkJCQlob3N0ZGF0YS0+c2VzLmNtZF9sZW4pIHsKIAkJCQkJCXNjc2lfZWhfcmVzdG9yZV9jbW5kKGNtZCwgJmhvc3RkYXRhLT5zZXMpOwpAQCAtMjIyMCwyMiArMjIyNiwxNyBAQAogCiAJCQkJCQlkcHJpbnRrKE5ERUJVR19BVVRPU0VOU0UsICJzY3NpJWQ6IHBlcmZvcm1pbmcgcmVxdWVzdCBzZW5zZVxuIiwgSE9TVE5PKTsKIAotCQkJCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJCQkJTElTVChjbWQsaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKTsKIAkJCQkJCVNFVF9ORVhUKGNtZCwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKTsKLQkJCQkJCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IChTY3NpX0NtbmQgKikgY21kOwotCQkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgY21kOwogCQkJCQkJZHByaW50ayhOREVCVUdfUVVFVUVTLCAic2NzaSVkOiBSRVFVRVNUIFNFTlNFIGFkZGVkIHRvIGhlYWQgb2YgIgogCQkJCQkJCSAgImlzc3VlIHF1ZXVlXG4iLCBIX05PKGNtZCkpOwotCQkJCQl9IGVsc2UKLSNlbmRpZiAvKiBkZWYgQVVUT1NFTlNFICovCi0JCQkJCXsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JCQkJCQljb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwotI2VuZGlmCisJCQkJCX0gZWxzZSB7CiAJCQkJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJCQl9CiAKKwkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJCQkJCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKIAkJCQkJLyoKIAkJCQkJICogUmVzdG9yZSBwaGFzZSBiaXRzIHRvIDAgc28gYW4gaW50ZXJydXB0ZWQgc2VsZWN0aW9uLApAQCAtMjI0NiwxMiArMjI0NywxNCBAQAogCQkJCQl3aGlsZSAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX0JTWSkgJiYgIWhvc3RkYXRhLT5jb25uZWN0ZWQpCiAJCQkJCQliYXJyaWVyKCk7CiAKLQkJCQkJZmFsY29uX2RvbnRfcmVsZWFzZS0tOworCQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQkJCWhvc3RkYXRhLT5yZXRhaW5fZG1hX2ludHItLTsKIAkJCQkJLyogKytyb21hbjogRm9yIEZhbGNvbiBTQ1NJLCByZWxlYXNlIHRoZSBsb2NrIG9uIHRoZQogCQkJCQkgKiBTVC1ETUEgaGVyZSBpZiBubyBvdGhlciBjb21tYW5kcyBhcmUgd2FpdGluZyBvbiB0aGUKIAkJCQkJICogZGlzY29ubmVjdGVkIHF1ZXVlLgogCQkJCQkgKi8KLQkJCQkJZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZShob3N0ZGF0YSk7CisJCQkJCW1heWJlX3JlbGVhc2VfZG1hX2lycShpbnN0YW5jZSk7CisJCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCQkJcmV0dXJuOwogCQkJCWNhc2UgTUVTU0FHRV9SRUpFQ1Q6CiAJCQkJCS8qIEFjY2VwdCBtZXNzYWdlIGJ5IGNsZWFyaW5nIEFDSyAqLwpAQCAtMjMwMyw2ICsyMzA2LDkgQEAKIAkJCQkJLyogV2FpdCBmb3IgYnVzIGZyZWUgdG8gYXZvaWQgbmFzdHkgdGltZW91dHMgKi8KIAkJCQkJd2hpbGUgKChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9CU1kpICYmICFob3N0ZGF0YS0+Y29ubmVjdGVkKQogCQkJCQkJYmFycmllcigpOworI2lmZGVmIFNVTjNfU0NTSV9WTUUKKwkJCQkJZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKKyNlbmRpZgogCQkJCQlyZXR1cm47CiAJCQkJCS8qCiAJCQkJCSAqIFRoZSBTQ1NJIGRhdGEgcG9pbnRlciBpcyAqSU1QTElDSVRMWSogc2F2ZWQgb24gYSBkaXNjb25uZWN0CkBAIC0yMzg0LDIwICsyMzkwLDE4IEBACiAJCQkJCSAqLwogCQkJCWRlZmF1bHQ6CiAJCQkJCWlmICghdG1wKSB7Ci0JCQkJCQlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiByZWplY3RpbmcgbWVzc2FnZSAiLCBIT1NUTk8pOworCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaSVkOiByZWplY3RpbmcgbWVzc2FnZSAiLAorCQkJCQkJICAgICAgIGluc3RhbmNlLT5ob3N0X25vKTsKIAkJCQkJCXNwaV9wcmludF9tc2coZXh0ZW5kZWRfbXNnKTsKIAkJCQkJCXByaW50aygiXG4iKTsKIAkJCQkJfSBlbHNlIGlmICh0bXAgIT0gRVhURU5ERURfTUVTU0FHRSkKLQkJCQkJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IHJlamVjdGluZyB1bmtub3duICIKLQkJCQkJCSAgICAgICAibWVzc2FnZSAlMDJ4IGZyb20gdGFyZ2V0ICVkLCBsdW4gJWxsdVxuIiwKLQkJCQkJCSAgICAgICBIT1NUTk8sIHRtcCwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKKwkJCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkJCQkJICAgICAgICAgICAgInJlamVjdGluZyB1bmtub3duIG1lc3NhZ2UgJTAyeFxuIiwKKwkJCQkJCSAgICAgICAgICAgIHRtcCk7CiAJCQkJCWVsc2UKLQkJCQkJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IHJlamVjdGluZyB1bmtub3duICIKLQkJCQkJCSAgICAgICAiZXh0ZW5kZWQgbWVzc2FnZSAiCi0JCQkJCQkgICAgICAgImNvZGUgJTAyeCwgbGVuZ3RoICVkIGZyb20gdGFyZ2V0ICVkLCBsdW4gJWxsdVxuIiwKLQkJCQkJCSAgICAgICBIT1NUTk8sIGV4dGVuZGVkX21zZ1sxXSwgZXh0ZW5kZWRfbXNnWzBdLAotCQkJCQkJICAgICAgIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0KKwkJCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkJCQkJICAgICAgICAgICAgInJlamVjdGluZyB1bmtub3duIGV4dGVuZGVkIG1lc3NhZ2UgY29kZSAlMDJ4LCBsZW5ndGggJWRcbiIsCisJCQkJCQkgICAgICAgICAgICBleHRlbmRlZF9tc2dbMV0sIGV4dGVuZGVkX21zZ1swXSk7CiAKIAkJCQkJbXNnb3V0ID0gTUVTU0FHRV9SRUpFQ1Q7CiAJCQkJCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfQVROKTsKQEAgLTI0MTAsNiArMjQxNCw3IEBACiAJCQkJaG9zdGRhdGEtPmxhc3RfbWVzc2FnZSA9IG1zZ291dDsKIAkJCQlOQ1I1MzgwX3RyYW5zZmVyX3BpbyhpbnN0YW5jZSwgJnBoYXNlLCAmbGVuLCAmZGF0YSk7CiAJCQkJaWYgKG1zZ291dCA9PSBBQk9SVCkgeworCQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAjaWZkZWYgU1VQUE9SVF9UQUdTCiAJCQkJCWNtZF9mcmVlX3RhZyhjbWQpOwogI2Vsc2UKQEAgLTI0MTcsMTIgKzI0MjIsMTAgQEAKICNlbmRpZgogCQkJCQlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKIAkJCQkJY21kLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7Ci0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCQkJCQljb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwotI2VuZGlmCi0JCQkJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCQkJCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQkJCQkJZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZShob3N0ZGF0YSk7CisJCQkJCW1heWJlX3JlbGVhc2VfZG1hX2lycShpbnN0YW5jZSk7CisJCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJCQkJcmV0dXJuOwogCQkJCX0KIAkJCQltc2dvdXQgPSBOT1A7CkBAIC0yNDU1LDcgKzI0NTgsNyBAQAogICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcmVzZWxlY3QgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQogICoKICAqIFB1cnBvc2UgOiBkb2VzIHJlc2VsZWN0aW9uLCBpbml0aWFsaXppbmcgdGhlIGluc3RhbmNlLT5jb25uZWN0ZWQKLSAqCWZpZWxkIHRvIHBvaW50IHRvIHRoZSBTY3NpX0NtbmQgZm9yIHdoaWNoIHRoZSBJX1RfTCBvciBJX1RfTF9RCisgKglmaWVsZCB0byBwb2ludCB0byB0aGUgc2NzaV9jbW5kIGZvciB3aGljaCB0aGUgSV9UX0wgb3IgSV9UX0xfUQogICoJbmV4dXMgaGFzIGJlZW4gcmVlc3RhYmxpc2hlZCwKICAqCiAgKiBJbnB1dHMgOiBpbnN0YW5jZSAtIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIE5DUjUzODAuCkBAIC0yNDYzLDE5ICsyNDY2LDIxIEBACiAgKi8KIAogCisvKiBpdCBtaWdodCBldmVudHVhbGx5IHByb3ZlIG5lY2Vzc2FyeSB0byBkbyBhIGRtYSBzZXR1cCBvbgorICAgcmVzZWxlY3Rpb24sIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgbmVlZGVkIG5vdyAtLSBzYW0gKi8KKwogc3RhdGljIHZvaWQgTkNSNTM4MF9yZXNlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CiAJdW5zaWduZWQgY2hhciB0YXJnZXRfbWFzazsKLQl1bnNpZ25lZCBjaGFyIGx1biwgcGhhc2U7Ci0JaW50IGxlbjsKKwl1bnNpZ25lZCBjaGFyIGx1bjsKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAl1bnNpZ25lZCBjaGFyIHRhZzsKICNlbmRpZgogCXVuc2lnbmVkIGNoYXIgbXNnWzNdOwotCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0JU2NzaV9DbW5kICp0bXAgPSBOVUxMLCAqcHJldjsKLS8qCXVuc2lnbmVkIGxvbmcgZmxhZ3M7ICovCisJaW50IF9fbWF5YmVfdW51c2VkIGxlbjsKKwl1bnNpZ25lZCBjaGFyIF9fbWF5YmVfdW51c2VkICpkYXRhLCBfX21heWJlX3VudXNlZCBwaGFzZTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAgPSBOVUxMLCAqcHJldjsKIAogCS8qCiAJICogRGlzYWJsZSBhcmJpdHJhdGlvbiwgZXRjLiBzaW5jZSB0aGUgaG9zdCBhZGFwdGVyIG9idmlvdXNseQpAQCAtMjUxMSwxMCArMjUxNiwxOCBAQAogCXdoaWxlICghKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JFUSkpCiAJCTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NVTjMpICYmIGRlZmluZWQoUkVBTF9ETUEpCisJLyogYWNrbm93bGVkZ2UgdG9nZ2xlIHRvIE1TR0lOICovCisJTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIFBIQVNFX1NSX1RPX1RDUihQSEFTRV9NU0dJTikpOworCisJLyogcGVlayBhdCB0aGUgYnl0ZSB3aXRob3V0IHJlYWxseSBoaXR0aW5nIHRoZSBidXMgKi8KKwltc2dbMF0gPSBOQ1I1MzgwX3JlYWQoQ1VSUkVOVF9TQ1NJX0RBVEFfUkVHKTsKKyNlbHNlCiAJbGVuID0gMTsKIAlkYXRhID0gbXNnOwogCXBoYXNlID0gUEhBU0VfTVNHSU47CiAJTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJmRhdGEpOworI2VuZGlmCiAKIAlpZiAoIShtc2dbMF0gJiAweDgwKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiBleHBlY3RpbmcgSURFTlRJRlkgbWVzc2FnZSwgZ290ICIsIEhPU1ROTyk7CkBAIC0yNTI0LDEzICsyNTM3LDEzIEBACiAJfQogCWx1biA9IChtc2dbMF0gJiAweDA3KTsKIAotI2lmZGVmIFNVUFBPUlRfVEFHUworI2lmIGRlZmluZWQoU1VQUE9SVF9UQUdTKSAmJiAhZGVmaW5lZChDT05GSUdfU1VOMykKIAkvKiBJZiB0aGUgcGhhc2UgaXMgc3RpbGwgTVNHSU4sIHRoZSB0YXJnZXQgd2FudHMgdG8gc2VuZCBzb21lIG1vcmUKIAkgKiBtZXNzYWdlcy4gSW4gY2FzZSBpdCBzdXBwb3J0cyB0YWdnZWQgcXVldWluZywgdGhpcyBpcyBwcm9iYWJseSBhCiAJICogU0lNUExFX1FVRVVFX1RBRyBmb3IgdGhlIElfVF9MX1EgbmV4dXMuCiAJICovCiAJdGFnID0gVEFHX05PTkU7Ci0JaWYgKHBoYXNlID09IFBIQVNFX01TR0lOICYmIHNldHVwX3VzZV90YWdnZWRfcXVldWluZykgeworCWlmIChwaGFzZSA9PSBQSEFTRV9NU0dJTiAmJiAoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19UQUdHRURfUVVFVUlORykpIHsKIAkJLyogQWNjZXB0IHByZXZpb3VzIElERU5USUZZIG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCiAJCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7CiAJCWxlbiA9IDI7CkBAIC0yNTQ4LDE1ICsyNTYxLDEzIEBACiAJICoganVzdCByZWVzdGFibGlzaGVkLCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZS4KIAkgKi8KIAotCWZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCBwcmV2ID0gTlVMTDsKKwlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUsIHByZXYgPSBOVUxMOwogCSAgICAgdG1wOyBwcmV2ID0gdG1wLCB0bXAgPSBORVhUKHRtcCkpIHsKIAkJaWYgKCh0YXJnZXRfbWFzayA9PSAoMSA8PCB0bXAtPmRldmljZS0+aWQpKSAmJiAobHVuID09IHRtcC0+ZGV2aWNlLT5sdW4pCiAjaWZkZWYgU1VQUE9SVF9UQUdTCiAJCSAgICAmJiAodGFnID09IHRtcC0+dGFnKQogI2VuZGlmCiAJCSAgICApIHsKLQkJCS8qICsrZ3VlbnRoZXI6IHByZXZlbnQgcmFjZSB3aXRoIGZhbGNvbl9yZWxlYXNlX2xvY2sgKi8KLQkJCWZhbGNvbl9kb250X3JlbGVhc2UrKzsKIAkJCWlmIChwcmV2KSB7CiAJCQkJUkVNT1ZFKHByZXYsIE5FWFQocHJldiksIHRtcCwgTkVYVCh0bXApKTsKIAkJCQlTRVRfTkVYVChwcmV2LCBORVhUKHRtcCkpOwpAQCAtMjU4OCwyNiArMjU5OSw2NyBAQAogCQlyZXR1cm47CiAJfQogCisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykgJiYgZGVmaW5lZChSRUFMX0RNQSkKKwkvKiBlbmdhZ2UgZG1hIHNldHVwIGZvciB0aGUgY29tbWFuZCB3ZSBqdXN0IHNhdyAqLworCXsKKwkJdm9pZCAqZDsKKwkJdW5zaWduZWQgbG9uZyBjb3VudDsKKworCQlpZiAoIXRtcC0+U0NwLnRoaXNfcmVzaWR1YWwgJiYgdG1wLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCkgeworCQkJY291bnQgPSB0bXAtPlNDcC5idWZmZXItPmxlbmd0aDsKKwkJCWQgPSBzZ192aXJ0KHRtcC0+U0NwLmJ1ZmZlcik7CisJCX0gZWxzZSB7CisJCQljb3VudCA9IHRtcC0+U0NwLnRoaXNfcmVzaWR1YWw7CisJCQlkID0gdG1wLT5TQ3AucHRyOworCQl9CisJCS8qIHNldHVwIHRoaXMgY29tbWFuZCBmb3IgZG1hIGlmIG5vdCBhbHJlYWR5ICovCisJCWlmICgoY291bnQgPj0gRE1BX01JTl9TSVpFKSAmJiAoc3VuM19kbWFfc2V0dXBfZG9uZSAhPSB0bXApKSB7CisJCQlzdW4zc2NzaV9kbWFfc2V0dXAoZCwgY291bnQsIHJxX2RhdGFfZGlyKHRtcC0+cmVxdWVzdCkpOworCQkJc3VuM19kbWFfc2V0dXBfZG9uZSA9IHRtcDsKKwkJfQorCX0KKworCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfQUNLKTsKKyNlbmRpZgorCiAJLyogQWNjZXB0IG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCiAJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKIAorI2lmIGRlZmluZWQoU1VQUE9SVF9UQUdTKSAmJiBkZWZpbmVkKENPTkZJR19TVU4zKQorCS8qIElmIHRoZSBwaGFzZSBpcyBzdGlsbCBNU0dJTiwgdGhlIHRhcmdldCB3YW50cyB0byBzZW5kIHNvbWUgbW9yZQorCSAqIG1lc3NhZ2VzLiBJbiBjYXNlIGl0IHN1cHBvcnRzIHRhZ2dlZCBxdWV1aW5nLCB0aGlzIGlzIHByb2JhYmx5IGEKKwkgKiBTSU1QTEVfUVVFVUVfVEFHIGZvciB0aGUgSV9UX0xfUSBuZXh1cy4KKwkgKi8KKwl0YWcgPSBUQUdfTk9ORTsKKwlpZiAocGhhc2UgPT0gUEhBU0VfTVNHSU4gJiYgc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nKSB7CisJCS8qIEFjY2VwdCBwcmV2aW91cyBJREVOVElGWSBtZXNzYWdlIGJ5IGNsZWFyaW5nIEFDSyAqLworCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOworCQlsZW4gPSAyOworCQlkYXRhID0gbXNnICsgMTsKKwkJaWYgKCFOQ1I1MzgwX3RyYW5zZmVyX3BpbyhpbnN0YW5jZSwgJnBoYXNlLCAmbGVuLCAmZGF0YSkgJiYKKwkJICAgIG1zZ1sxXSA9PSBTSU1QTEVfUVVFVUVfVEFHKQorCQkJdGFnID0gbXNnWzJdOworCQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiB0YXJnZXQgbWFzayAlMDJ4LCBsdW4gJWQgc2VudCB0YWcgJWQgYXQgcmVzZWxlY3Rpb25cbiIKKwkJCUhPU1ROTywgdGFyZ2V0X21hc2ssIGx1biwgdGFnKTsKKwl9CisjZW5kaWYKKwogCWhvc3RkYXRhLT5jb25uZWN0ZWQgPSB0bXA7CiAJZHByaW50ayhOREVCVUdfUkVTRUxFQ1RJT04sICJzY3NpJWQ6IG5leHVzIGVzdGFibGlzaGVkLCB0YXJnZXQgPSAlZCwgbHVuID0gJWxsdSwgdGFnID0gJWRcbiIsCiAJCSAgIEhPU1ROTywgdG1wLT5kZXZpY2UtPmlkLCB0bXAtPmRldmljZS0+bHVuLCB0bXAtPnRhZyk7Ci0JZmFsY29uX2RvbnRfcmVsZWFzZS0tOwogfQogCiAKIC8qCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX2Fib3J0IChTY3NpX0NtbmQgKmNtZCkKKyAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYWJvcnQgKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKICAqCiAgKiBQdXJwb3NlIDogYWJvcnQgYSBjb21tYW5kCiAgKgotICogSW5wdXRzIDogY21kIC0gdGhlIFNjc2lfQ21uZCB0byBhYm9ydCwgY29kZSAtIGNvZGUgdG8gc2V0IHRoZQorICogSW5wdXRzIDogY21kIC0gdGhlIHNjc2lfY21uZCB0byBhYm9ydCwgY29kZSAtIGNvZGUgdG8gc2V0IHRoZQogICoJaG9zdCBieXRlIG9mIHRoZSByZXN1bHQgZmllbGQgdG8sIGlmIHplcm8gRElEX0FCT1JURUQgaXMKICAqCXVzZWQuCiAgKgotICogUmV0dXJucyA6IDAgLSBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICogUmV0dXJucyA6IFNVQ0NFU1MgLSBzdWNjZXNzLCBGQUlMRUQgb24gZmFpbHVyZS4KICAqCiAgKiBYWFggLSB0aGVyZSBpcyBubyB3YXkgdG8gYWJvcnQgdGhlIGNvbW1hbmQgdGhhdCBpcyBjdXJyZW50bHkKICAqCSBjb25uZWN0ZWQsIHlvdSBoYXZlIHRvIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLiAgSWYgdGhpcyBpcwpAQCAtMjYxNiwyNCArMjY2OCwxOSBAQAogICovCiAKIHN0YXRpYwotaW50IE5DUjUzODBfYWJvcnQoU2NzaV9DbW5kICpjbWQpCitpbnQgTkNSNTM4MF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7Ci0JU2NzaV9DbW5kICp0bXAsICoqcHJldjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAsICoqcHJldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcHJpbnRrKEtFUk5fTk9USUNFICJzY3NpJWQ6IGFib3J0aW5nIGNvbW1hbmRcbiIsIEhPU1ROTyk7Ci0Jc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CisJc2NtZF9wcmludGsoS0VSTl9OT1RJQ0UsIGNtZCwgImFib3J0aW5nIGNvbW1hbmRcbiIpOwogCiAJTkNSNTM4MF9wcmludF9zdGF0dXMoaW5zdGFuY2UpOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0JaWYgKCFJU19BX1RUKCkgJiYgIWZhbGNvbl9nb3RfbG9jaykKLQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQ6ICEhQklOR08hISBGYWxjb24gaGFzIG5vIGxvY2sgaW4gTkNSNTM4MF9hYm9ydFxuIiwKLQkJICAgICAgIEhPU1ROTyk7Ci0KIAlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogYWJvcnQgY2FsbGVkIGJhc3IgMHglMDJ4LCBzciAweCUwMnhcbiIsIEhPU1ROTywKIAkJICAgIE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpLAogCQkgICAgTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpKTsKQEAgLTI2NzQsMTIgKzI3MjEsMTIgQEAKICNlbHNlCiAJCQlob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKICNlbmRpZgorCQkJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCWNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JCQlmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKGhvc3RkYXRhKTsKIAkJCXJldHVybiBTVUNDRVNTOwogCQl9IGVsc2UgewotLyoJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7ICovCisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCQlwcmludGsoInNjc2klZDogYWJvcnQgb2YgY29ubmVjdGVkIGNvbW1hbmQgZmFpbGVkIVxuIiwgSE9TVE5PKTsKIAkJCXJldHVybiBGQUlMRUQ7CiAJCX0KQEAgLTI2OTAsMjEgKzI3MzcsMjEgQEAKIAkgKiBDYXNlIDIgOiBJZiB0aGUgY29tbWFuZCBoYXNuJ3QgYmVlbiBpc3N1ZWQgeWV0LCB3ZSBzaW1wbHkgcmVtb3ZlIGl0CiAJICoJICAgIGZyb20gdGhlIGlzc3VlIHF1ZXVlLgogCSAqLwotCWZvciAocHJldiA9IChTY3NpX0NtbmQgKiopJihob3N0ZGF0YS0+aXNzdWVfcXVldWUpLAotCSAgICAgdG1wID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsKKwlmb3IgKHByZXYgPSAoc3RydWN0IHNjc2lfY21uZCAqKikmKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSksCisJICAgICB0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsKIAkgICAgIHRtcDsgcHJldiA9IE5FWFRBRERSKHRtcCksIHRtcCA9IE5FWFQodG1wKSkgewogCQlpZiAoY21kID09IHRtcCkgewogCQkJUkVNT1ZFKDUsICpwcmV2LCB0bXAsIE5FWFQodG1wKSk7CiAJCQkoKnByZXYpID0gTkVYVCh0bXApOwogCQkJU0VUX05FWFQodG1wLCBOVUxMKTsKIAkJCXRtcC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCQkJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiBhYm9ydCByZW1vdmVkIGNvbW1hbmQgZnJvbSBpc3N1ZSBxdWV1ZS5cbiIsCiAJCQkJICAgIEhPU1ROTyk7CiAJCQkvKiBUYWdnZWQgcXVldWluZyBub3RlOiBubyB0YWcgdG8gZnJlZSBoZXJlLCBoYXNuJ3QgYmVlbiBhc3NpZ25lZAogCQkJICogeWV0Li4uICovCiAJCQl0bXAtPnNjc2lfZG9uZSh0bXApOwotCQkJZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZShob3N0ZGF0YSk7CiAJCQlyZXR1cm4gU1VDQ0VTUzsKIAkJfQogCX0KQEAgLTI3NTEsMTMgKzI3OTgsMTMgQEAKIAkgKiBpdCBmcm9tIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUuCiAJICovCiAKLQlmb3IgKHRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgdG1wOworCWZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgdG1wOwogCSAgICAgdG1wID0gTkVYVCh0bXApKSB7CiAJCWlmIChjbWQgPT0gdG1wKSB7CiAJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogYWJvcnRpbmcgZGlzY29ubmVjdGVkIGNvbW1hbmQuXG4iLCBIT1NUTk8pOwogCi0JCQlpZiAoTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIGNtZCwgKGludCljbWQtPnRhZykpCisJCQlpZiAoTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIGNtZCkpCiAJCQkJcmV0dXJuIEZBSUxFRDsKIAogCQkJZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IG5leHVzIHJlZXN0YWJsaXNoZWQuXG4iLCBIT1NUTk8pOwpAQCAtMjc2NSw4ICsyODEyLDggQEAKIAkJCWRvX2Fib3J0KGluc3RhbmNlKTsKIAogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkJZm9yIChwcmV2ID0gKFNjc2lfQ21uZCAqKikmKGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpLAotCQkJICAgICB0bXAgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsKKwkJCWZvciAocHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSYoaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSksCisJCQkgICAgIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsKIAkJCSAgICAgdG1wOyBwcmV2ID0gTkVYVEFERFIodG1wKSwgdG1wID0gTkVYVCh0bXApKSB7CiAJCQkJaWYgKGNtZCA9PSB0bXApIHsKIAkJCQkJUkVNT1ZFKDUsICpwcmV2LCB0bXAsIE5FWFQodG1wKSk7CkBAIC0yNzgyLDE1ICsyODI5LDIyIEBACiAjZWxzZQogCQkJCQlob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKICNlbmRpZgorCQkJCQltYXliZV9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpOwogCQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCQkJCXRtcC0+c2NzaV9kb25lKHRtcCk7Ci0JCQkJCWZhbGNvbl9yZWxlYXNlX2xvY2tfaWZfcG9zc2libGUoaG9zdGRhdGEpOwogCQkJCQlyZXR1cm4gU1VDQ0VTUzsKIAkJCQl9CiAJCQl9CiAJCX0KIAl9CiAKKwkvKiBNYXliZSBpdCBpcyBzdWZmaWNpZW50IGp1c3QgdG8gcmVsZWFzZSB0aGUgU1QtRE1BIGxvY2suLi4gKGlmCisJICogcG9zc2libGUgYXQgYWxsKSBBdCBsZWFzdCwgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBsb2NrIGNvdWxkIGJlCisJICogcmVsZWFzZWQgYWZ0ZXIgdGhlIGFib3J0LCBpbiBjYXNlIGl0IGlzIGtlcHQgZHVlIHRvIHNvbWUgYnVnLgorCSAqLworCW1heWJlX3JlbGVhc2VfZG1hX2lycShpbnN0YW5jZSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJLyoKIAkgKiBDYXNlIDUgOiBJZiB3ZSByZWFjaGVkIHRoaXMgcG9pbnQsIHRoZSBjb21tYW5kIHdhcyBub3QgZm91bmQgaW4gYW55IG9mCiAJICoJICAgIHRoZSBxdWV1ZXMuCkBAIC0yODAxLDIxICsyODU1LDE0IEBACiAJICogYnJva2UuCiAJICovCiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAic2NzaSVkOiB3YXJuaW5nIDogU0NTSSBjb21tYW5kIHByb2JhYmx5IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYmVmb3JlIGFib3J0aW9uXG4iLCBIT1NUTk8pOwogCi0JLyogTWF5YmUgaXQgaXMgc3VmZmljaWVudCBqdXN0IHRvIHJlbGVhc2UgdGhlIFNULURNQSBsb2NrLi4uIChpZgotCSAqIHBvc3NpYmxlIGF0IGFsbCkgQXQgbGVhc3QsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgbG9jayBjb3VsZCBiZQotCSAqIHJlbGVhc2VkIGFmdGVyIHRoZSBhYm9ydCwgaW4gY2FzZSBpdCBpcyBrZXB0IGR1ZSB0byBzb21lIGJ1Zy4KLQkgKi8KLQlmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKGhvc3RkYXRhKTsKLQogCXJldHVybiBGQUlMRUQ7CiB9CiAKIAogLyoKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfcmVzZXQgKFNjc2lfQ21uZCAqY21kKQorICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9yZXNldCAoc3RydWN0IHNjc2lfY21uZCAqY21kKQogICoKICAqIFB1cnBvc2UgOiByZXNldCB0aGUgU0NTSSBidXMuCiAgKgpAQCAtMjgyMywyMCArMjg3MCwxNCBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqY21kKQorc3RhdGljIGludCBOQ1I1MzgwX2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0JU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gY21kLT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSNpZiBkZWZpbmVkKFJFU0VUX1JVTl9ET05FKQotCVNjc2lfQ21uZCAqY29ubmVjdGVkLCAqZGlzY29ubmVjdGVkX3F1ZXVlOwotI2VuZGlmCiAKLQlpZiAoIUlTX0FfVFQoKSAmJiAhZmFsY29uX2dvdF9sb2NrKQotCQlwcmludGsoS0VSTl9FUlIgInNjc2klZDogISFCSU5HTyEhIEZhbGNvbiBoYXMgbm8gbG9jayBpbiBOQ1I1MzgwX3Jlc2V0XG4iLAotCQkgICAgICAgSF9OTyhjbWQpKTsKLQotCU5DUjUzODBfcHJpbnRfc3RhdHVzKGNtZC0+ZGV2aWNlLT5ob3N0KTsKKwlOQ1I1MzgwX3ByaW50X3N0YXR1cyhpbnN0YW5jZSk7CiAKIAkvKiBnZXQgaW4gcGhhc2UgKi8KIAlOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywKQEAgLTI4NTMsODkgKzI4OTQsNiBAQAogCSAqIHRocm91Z2ggYW55bW9yZSAuLi4gKi8KIAkodm9pZClOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwogCi0JLyogTVNjaCAyMDE0MDExNSAtIGxvb2tpbmcgYXQgdGhlIGdlbmVyaWMgTkNSNTM4MCBkcml2ZXIsIGFsbCBvZiB0aGlzCi0JICogc2hvdWxkIGdvLgotCSAqIENhdGNoLTIyOiBpZiB3ZSBkb24ndCBjbGVhciBhbGwgcXVldWVzLCB0aGUgU0NTSSBkcml2ZXIgbG9jayB3aWxsCi0JICogbm90IGJlIHJlc2V0IGJ5IGF0YXJpX3Njc2lfcmVzZXQoKSEKLQkgKi8KLQotI2lmIGRlZmluZWQoUkVTRVRfUlVOX0RPTkUpCi0JLyogWFhYIFNob3VsZCBub3cgYmUgZG9uZSBieSBtaWRsZXZlbCBjb2RlLCBidXQgaXQncyBicm9rZW4gWFhYICovCi0JLyogWFhYIHNlZSBiZWxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFhYICovCi0KLQkvKiBNU2NoOiBvbGQtc3R5bGUgcmVzZXQ6IGFjdHVhbGx5IGFib3J0IGFsbCBjb21tYW5kIHByb2Nlc3NpbmcgaGVyZSAqLwotCi0JLyogQWZ0ZXIgdGhlIHJlc2V0LCB0aGVyZSBhcmUgbm8gbW9yZSBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkIGNvbW1hbmRzCi0JICogYW5kIG5vIGJ1c3kgdW5pdHM7IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggcmUtaW5zZXJ0aW5nIHRoZSBjb21tYW5kcwotCSAqIGludG8gdGhlIGlzc3VlX3F1ZXVlICh2aWEgc2NzaV9kb25lKCkpLCB0aGUgYWJvcnRlZCBjb21tYW5kcyBhcmUKLQkgKiByZW1lbWJlcmVkIGluIGxvY2FsIHZhcmlhYmxlcyBmaXJzdC4KLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY29ubmVjdGVkID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5jb25uZWN0ZWQ7Ci0JaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7Ci0JZGlzY29ubmVjdGVkX3F1ZXVlID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7Ci0JaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSA9IE5VTEw7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JZnJlZV9hbGxfdGFncygpOwotI2VuZGlmCi0JZm9yIChpID0gMDsgaSA8IDg7ICsraSkKLQkJaG9zdGRhdGEtPmJ1c3lbaV0gPSAwOwotI2lmZGVmIFJFQUxfRE1BCi0JaG9zdGRhdGEtPmRtYV9sZW4gPSAwOwotI2VuZGlmCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyogSW4gb3JkZXIgdG8gdGVsbCB0aGUgbWlkLWxldmVsIGNvZGUgd2hpY2ggY29tbWFuZHMgd2VyZSBhYm9ydGVkLAotCSAqIHNldCB0aGUgY29tbWFuZCBzdGF0dXMgdG8gRElEX1JFU0VUIGFuZCBjYWxsIHNjc2lfZG9uZSgpICEhIQotCSAqIFRoaXMgdWx0aW1hdGVseSBhYm9ydHMgcHJvY2Vzc2luZyBvZiB0aGVzZSBjb21tYW5kcyBpbiB0aGUgbWlkLWxldmVsLgotCSAqLwotCi0JaWYgKChjbWQgPSBjb25uZWN0ZWQpKSB7Ci0JCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiByZXNldCBhYm9ydGVkIGEgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhfTk8oY21kKSk7Ci0JCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHhmZmZmKSB8IChESURfUkVTRVQgPDwgMTYpOwotCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCX0KLQotCWZvciAoaSA9IDA7IChjbWQgPSBkaXNjb25uZWN0ZWRfcXVldWUpOyArK2kpIHsKLQkJZGlzY29ubmVjdGVkX3F1ZXVlID0gTkVYVChjbWQpOwotCQlTRVRfTkVYVChjbWQsIE5VTEwpOwotCQljbWQtPnJlc3VsdCA9IChjbWQtPnJlc3VsdCAmIDB4ZmZmZikgfCAoRElEX1JFU0VUIDw8IDE2KTsKLQkJY21kLT5zY3NpX2RvbmUoY21kKTsKLQl9Ci0JaWYgKGkgPiAwKQotCQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2k6IHJlc2V0IGFib3J0ZWQgJWQgZGlzY29ubmVjdGVkIGNvbW1hbmQocylcbiIsIGkpOwotCi0JLyogVGhlIEZhbGNvbiBsb2NrIHNob3VsZCBiZSByZWxlYXNlZCBhZnRlciBhIHJlc2V0Li4uCi0JICovCi0JLyogKytndWVudGhlcjogbW92ZWQgdG8gYXRhcmlfc2NzaV9yZXNldCgpLCB0byBwcmV2ZW50IGEgcmFjZSBiZXR3ZWVuCi0JICogdW5sb2NraW5nIGFuZCBlbmFibGluZyBkbWEgaW50ZXJydXB0LgotCSAqLwotLyoJZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZSggaG9zdGRhdGEgKTsqLwotCi0JLyogc2luY2UgYWxsIGNvbW1hbmRzIGhhdmUgYmVlbiBleHBsaWNpdGx5IHRlcm1pbmF0ZWQsIHdlIG5lZWQgdG8gdGVsbAotCSAqIHRoZSBtaWRsZXZlbCBjb2RlIHRoYXQgdGhlIHJlc2V0IHdhcyBTVUNDRVNTRlVMLCBhbmQgdGhlcmUgaXMgbm8KLQkgKiBuZWVkIHRvICd3YWtlIHVwJyB0aGUgY29tbWFuZHMgYnkgYSByZXF1ZXN0X3NlbnNlCi0JICovCi0JcmV0dXJuIFNVQ0NFU1M7Ci0jZWxzZSAvKiAxICovCi0KLQkvKiBNU2NoOiBuZXctc3R5bGUgcmVzZXQgaGFuZGxpbmc6IGxldCB0aGUgbWlkLWxldmVsIGRvIHdoYXQgaXQgY2FuICovCi0KLQkvKiArK2d1ZW50aGVyOiBNSUQtTEVWRUwgSVMgU1RJTEwgQlJPS0VOLgotCSAqIE1pZC1sZXZlbCBpcyBzdXBwb3NlZCB0byByZXF1ZXVlIGFsbCBjb21tYW5kcyB0aGF0IHdlcmUgYWN0aXZlIG9uIHRoZQotCSAqIHZhcmlvdXMgbG93LWxldmVsIHF1ZXVlcy4gSW4gZmFjdCBpdCBkb2VzIHRoaXMsIGJ1dCB0aGF0J3Mgbm90IGVub3VnaAotCSAqIGJlY2F1c2UgYWxsIHRoZXNlIGNvbW1hbmRzIGFyZSBzdWJqZWN0IHRvIHRpbWVvdXQuIEFuZCBpZiBhIHRpbWVvdXQKLQkgKiBoYXBwZW5zIGZvciBhbnkgcmVtb3ZlZCBjb21tYW5kLCAqX2Fib3J0KCkgaXMgY2FsbGVkIGJ1dCBhbGwgcXVldWVzCi0JICogYXJlIG5vdyBlbXB0eS4gQWJvcnQgdGhlbiBnaXZlcyB1cCB0aGUgZmFsY29uIGxvY2ssIHdoaWNoIGlzIGZhdGFsLAotCSAqIHNpbmNlIHRoZSBtaWQtbGV2ZWwgd2lsbCBxdWV1ZSBtb3JlIGNvbW1hbmRzIGFuZCBtdXN0IGhhdmUgdGhlIGxvY2sKLQkgKiAoaXQncyBhbGwgaGFwcGVuaW5nIGluc2lkZSB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlciEhKS4KLQkgKiBFdmVuIHdvcnNlLCBhYm9ydCB3aWxsIHJldHVybiBOT1RfUlVOTklORyBmb3IgYWxsIHRob3NlIGNvbW1hbmRzIG5vdAotCSAqIG9uIGFueSBxdWV1ZSwgc28gdGhleSB3b24ndCBiZSByZXRyaWVkIC4uLgotCSAqCi0JICogQ29uY2x1c2lvbjogZWl0aGVyIHNjc2kuYyBkaXNhYmxlcyB0aW1lb3V0IGZvciBhbGwgcmVzZXR0ZWQgY29tbWFuZHMKLQkgKiBpbW1lZGlhdGVseSwgb3Igd2UgbG9zZSEgIEFzIG9mIGxpbnV4LTIuMC4yMCBpdCBkb2Vzbid0LgotCSAqLwotCiAJLyogQWZ0ZXIgdGhlIHJlc2V0LCB0aGVyZSBhcmUgbm8gbW9yZSBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkIGNvbW1hbmRzCiAJICogYW5kIG5vIGJ1c3kgdW5pdHM7IHNvIGNsZWFyIHRoZSBsb3ctbGV2ZWwgc3RhdHVzIGhlcmUgdG8gYXZvaWQKIAkgKiBjb25mbGljdHMgd2hlbiB0aGUgbWlkLWxldmVsIGNvZGUgdHJpZXMgdG8gd2FrZSB1cCB0aGUgYWZmZWN0ZWQKQEAgLTI5NTQsMTYgKzI5MTIsMTYgQEAKIAlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKIAlob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlID0gTlVMTDsKICNpZmRlZiBTVVBQT1JUX1RBR1MKLQlmcmVlX2FsbF90YWdzKCk7CisJZnJlZV9hbGxfdGFncyhob3N0ZGF0YSk7CiAjZW5kaWYKIAlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQogCQlob3N0ZGF0YS0+YnVzeVtpXSA9IDA7CiAjaWZkZWYgUkVBTF9ETUEKIAlob3N0ZGF0YS0+ZG1hX2xlbiA9IDA7CiAjZW5kaWYKKworCW1heWJlX3JlbGVhc2VfZG1hX2lycShpbnN0YW5jZSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JLyogd2UgZGlkIG5vIGNvbXBsZXRlIHJlc2V0IG9mIGFsbCBjb21tYW5kcywgc28gYSB3YWtldXAgaXMgcmVxdWlyZWQgKi8KIAlyZXR1cm4gU1VDQ0VTUzsKLSNlbmRpZiAvKiAxICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwppbmRleCBiNTIyMTM0Li5kMWMzN2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKQEAgLTY0LDQ1ICs2NCw1NyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jZGVmaW5lIEFVVE9TRU5TRQotLyogRm9yIHRoZSBBdGFyaSB2ZXJzaW9uLCB1c2Ugb25seSBwb2xsZWQgSU8gb3IgUkVBTF9ETUEgKi8KLSNkZWZpbmUJUkVBTF9ETUEKLS8qIFN1cHBvcnQgdGFnZ2VkIHF1ZXVpbmc/IChvbiBkZXZpY2VzIHRoYXQgYXJlIGFibGUgdG8uLi4gOi0pICovCi0jZGVmaW5lCVNVUFBPUlRfVEFHUwotI2RlZmluZQlNQVhfVEFHUyAzMgotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbnZyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vYXRhcmlody5oPgogI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS90cmFwcy5oPgotCi0jaW5jbHVkZSAic2NzaS5oIgotI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0jaW5jbHVkZSAiYXRhcmlfc2NzaS5oIgotI2luY2x1ZGUgIk5DUjUzODAuaCIKICNpbmNsdWRlIDxhc20vYXRhcmlfc3RkbWEuaD4KICNpbmNsdWRlIDxhc20vYXRhcmlfc3RyYW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIGNvcmUgTkNSNTM4MCBkcml2ZXIuICovCisKKyNkZWZpbmUgUkVBTF9ETUEKKyNkZWZpbmUgU1VQUE9SVF9UQUdTCisjZGVmaW5lIE1BWF9UQUdTICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRE1BX01JTl9TSVpFICAgICAgICAgICAgICAgICAgICAzMgorCisjZGVmaW5lIE5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzICAgLyogbm9uZSAqLworCisjZGVmaW5lIE5DUjUzODBfcmVhZChyZWcpICAgICAgICAgICAgICAgYXRhcmlfc2NzaV9yZWdfcmVhZChyZWcpCisjZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkgICAgICAgYXRhcmlfc2NzaV9yZWdfd3JpdGUocmVnLCB2YWx1ZSkKKworI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgICAgICAgICAgIGF0YXJpX3Njc2lfcXVldWVfY29tbWFuZAorI2RlZmluZSBOQ1I1MzgwX2Fib3J0ICAgICAgICAgICAgICAgICAgIGF0YXJpX3Njc2lfYWJvcnQKKyNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gICAgICAgICAgICAgICBhdGFyaV9zY3NpX3Nob3dfaW5mbworI2RlZmluZSBOQ1I1MzgwX2luZm8gICAgICAgICAgICAgICAgICAgIGF0YXJpX3Njc2lfaW5mbworCisjZGVmaW5lIE5DUjUzODBfZG1hX3JlYWRfc2V0dXAoaW5zdGFuY2UsIGRhdGEsIGNvdW50KSBcCisgICAgICAgIGF0YXJpX3Njc2lfZG1hX3NldHVwKGluc3RhbmNlLCBkYXRhLCBjb3VudCwgMCkKKyNkZWZpbmUgTkNSNTM4MF9kbWFfd3JpdGVfc2V0dXAoaW5zdGFuY2UsIGRhdGEsIGNvdW50KSBcCisgICAgICAgIGF0YXJpX3Njc2lfZG1hX3NldHVwKGluc3RhbmNlLCBkYXRhLCBjb3VudCwgMSkKKyNkZWZpbmUgTkNSNTM4MF9kbWFfcmVzaWR1YWwoaW5zdGFuY2UpIFwKKyAgICAgICAgYXRhcmlfc2NzaV9kbWFfcmVzaWR1YWwoaW5zdGFuY2UpCisjZGVmaW5lIE5DUjUzODBfZG1hX3hmZXJfbGVuKGluc3RhbmNlLCBjbWQsIHBoYXNlKSBcCisgICAgICAgIGF0YXJpX2RtYV94ZmVyX2xlbihjbWQtPlNDcC50aGlzX3Jlc2lkdWFsLCBjbWQsICEoKHBoYXNlKSAmIFNSX0lPKSkKKworI2RlZmluZSBOQ1I1MzgwX2FjcXVpcmVfZG1hX2lycShpbnN0YW5jZSkgICAgICBmYWxjb25fZ2V0X2xvY2soaW5zdGFuY2UpCisjZGVmaW5lIE5DUjUzODBfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKSAgICAgIGZhbGNvbl9yZWxlYXNlX2xvY2soKQorCisjaW5jbHVkZSAiTkNSNTM4MC5oIgorCiAKICNkZWZpbmUJSVNfQV9UVCgpCUFUQVJJSFdfUFJFU0VOVChUVF9TQ1NJKQogCkBAIC0xNDksMjMgKzE2MSw2IEBACiAJcmV0dXJuIGFkcjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIEVOQUJMRV9JUlEodm9pZCkKLXsKLQlpZiAoSVNfQV9UVCgpKQotCQlhdGFyaV9lbmFibGVfaXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0JZWxzZQotCQlhdGFyaV9lbmFibGVfaXJxKElSUV9NRlBfRlNDU0kpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgRElTQUJMRV9JUlEodm9pZCkKLXsKLQlpZiAoSVNfQV9UVCgpKQotCQlhdGFyaV9kaXNhYmxlX2lycShJUlFfVFRfTUZQX1NDU0kpOwotCWVsc2UKLQkJYXRhcmlfZGlzYWJsZV9pcnEoSVJRX01GUF9GU0NTSSk7Ci19Ci0KLQogI2RlZmluZSBIT1NUREFUQV9ETUFMRU4JCSgoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopIFwKIAkJCQkoYXRhcmlfc2NzaV9ob3N0LT5ob3N0ZGF0YSkpLT5kbWFfbGVuKQogCkBAIC0xNzgsMzAgKzE3Myw5IEBACiAjZGVmaW5lCUFGVEVSX1JFU0VUX0RFTEFZCSg1KkhaLzIpCiAjZW5kaWYKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KICNpZmRlZiBSRUFMX0RNQQotc3RhdGljIGludCBzY3NpX2RtYV9pc19pZ25vcmVkX2J1c2Vycih1bnNpZ25lZCBjaGFyIGRtYV9zdGF0KTsKIHN0YXRpYyB2b2lkIGF0YXJpX3Njc2lfZmV0Y2hfcmVzdGJ5dGVzKHZvaWQpOwotc3RhdGljIGxvbmcgYXRhcmlfc2NzaV9kbWFfcmVzaWR1YWwoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpOwotc3RhdGljIGludCBmYWxjb25fY2xhc3NpZnlfY21kKFNjc2lfQ21uZCAqY21kKTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGF0YXJpX2RtYV94ZmVyX2xlbih1bnNpZ25lZCBsb25nIHdhbnRlZF9sZW4sCi0JCQkJCVNjc2lfQ21uZCAqY21kLCBpbnQgd3JpdGVfZmxhZyk7CiAjZW5kaWYKLXN0YXRpYyBpcnFyZXR1cm5fdCBzY3NpX3R0X2ludHIoaW50IGlycSwgdm9pZCAqZHVtbXkpOwotc3RhdGljIGlycXJldHVybl90IHNjc2lfZmFsY29uX2ludHIoaW50IGlycSwgdm9pZCAqZHVtbXkpOwotc3RhdGljIHZvaWQgZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZShzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEpOwotc3RhdGljIHZvaWQgZmFsY29uX2dldF9sb2NrKHZvaWQpOwotI2lmZGVmIENPTkZJR19BVEFSSV9TQ1NJX1JFU0VUX0JPT1QKLXN0YXRpYyB2b2lkIGF0YXJpX3Njc2lfcmVzZXRfYm9vdCh2b2lkKTsKLSNlbmRpZgotc3RhdGljIHVuc2lnbmVkIGNoYXIgYXRhcmlfc2NzaV90dF9yZWdfcmVhZCh1bnNpZ25lZCBjaGFyIHJlZyk7Ci1zdGF0aWMgdm9pZCBhdGFyaV9zY3NpX3R0X3JlZ193cml0ZSh1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWx1ZSk7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBhdGFyaV9zY3NpX2ZhbGNvbl9yZWdfcmVhZCh1bnNpZ25lZCBjaGFyIHJlZyk7Ci1zdGF0aWMgdm9pZCBhdGFyaV9zY3NpX2ZhbGNvbl9yZWdfd3JpdGUodW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsdWUpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgb2YgUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogCiBzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqYXRhcmlfc2NzaV9ob3N0Owogc3RhdGljIHVuc2lnbmVkIGNoYXIgKCphdGFyaV9zY3NpX3JlZ19yZWFkKSh1bnNpZ25lZCBjaGFyIHJlZyk7CkBAIC0yMjYsOCArMjAwLDYgQEAKIC8qIG1hc2sgZm9yIGFkZHJlc3MgYml0cyB0aGF0IGNhbid0IGJlIHVzZWQgd2l0aCB0aGUgU1QtRE1BICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZwlhdGFyaV9kbWFfc3RyYW1fbWFzazsKICNkZWZpbmUgU1RSQU1fQUREUihhKQkoKChhKSAmIGF0YXJpX2RtYV9zdHJhbV9tYXNrKSA9PSAwKQotLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGN1dCBmcm9tIGEgdHJhbnNmZXIgdG8gaGFuZGxlIE5DUiBvdmVycnVucyAqLwotc3RhdGljIGludCBhdGFyaV9yZWFkX292ZXJydW5zOwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgc2V0dXBfY2FuX3F1ZXVlID0gLTE7CkBAIC0zODYsMTAgKzM1OCw2IEBACiAKIAlOQ1I1MzgwX2ludHIoaXJxLCBkdW1teSk7CiAKLSNpZiAwCi0JLyogVG8gYmUgc3VyZSB0aGUgaW50IGlzIG5vdCBtYXNrZWQgKi8KLQlhdGFyaV9lbmFibGVfaXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0jZW5kaWYKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTQ4MCwyNTcgKzQ0OCwzNSBAQAogI2VuZGlmIC8qIFJFQUxfRE1BICovCiAKIAotc3RhdGljIGludCBmYWxjb25fZ290X2xvY2sgPSAwOwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGZhbGNvbl9mYWlybmVzc193YWl0KTsKLXN0YXRpYyBpbnQgZmFsY29uX3RyeWluZ19sb2NrID0gMDsKLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChmYWxjb25fdHJ5X3dhaXQpOwotc3RhdGljIGludCBmYWxjb25fZG9udF9yZWxlYXNlID0gMDsKLQogLyogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgbG9jayBvbiB0aGUgRE1BIGNoaXAgaWYgdGhlcmUgaXMgbm8KLSAqIGNvbm5lY3RlZCBjb21tYW5kIGFuZCB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlIGlzIGVtcHR5LiBPbgotICogcmVsZWFzaW5nLCBpbnN0YW5jZXMgb2YgZmFsY29uX2dldF9sb2NrIGFyZSBhd29rZW4sIHRoYXQgcHV0Ci0gKiB0aGVtc2VsdmVzIHRvIHNsZWVwIGZvciBmYWlybmVzcy4gVGhleSBjYW4gbm93IHRyeSB0byBnZXQgdGhlIGxvY2sKLSAqIGFnYWluIChidXQgb3RoZXJzIHdhaXRpbmcgbG9uZ2VyIG1vcmUgcHJvYmFibHkgd2lsbCB3aW4pLgorICogY29ubmVjdGVkIGNvbW1hbmQgYW5kIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUgaXMgZW1wdHkuCiAgKi8KIAotc3RhdGljIHZvaWQgZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZShzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEpCitzdGF0aWMgdm9pZCBmYWxjb25fcmVsZWFzZV9sb2NrKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCWlmIChJU19BX1RUKCkpCiAJCXJldHVybjsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWlmIChmYWxjb25fZ290X2xvY2sgJiYgIWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgJiYKLQkgICAgIWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSAmJiAhaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCi0JCWlmIChmYWxjb25fZG9udF9yZWxlYXNlKSB7Ci0jaWYgMAotCQkJcHJpbnRrKCJXQVJOSU5HOiBMb2NrIHJlbGVhc2Ugbm90IGFsbG93ZWQuIElnbm9yZWRcbiIpOwotI2VuZGlmCi0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZmFsY29uX2dvdF9sb2NrID0gMDsKKwlpZiAoc3RkbWFfaXNfbG9ja2VkX2J5KHNjc2lfZmFsY29uX2ludHIpKQogCQlzdGRtYV9yZWxlYXNlKCk7Ci0JCXdha2VfdXAoJmZhbGNvbl9mYWlybmVzc193YWl0KTsKLQl9Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gbWFuYWdlcyB0aGUgbG9ja2luZyBvZiB0aGUgU1QtRE1BLgogICogSWYgdGhlIERNQSBpc24ndCBsb2NrZWQgYWxyZWFkeSBmb3IgU0NTSSwgaXQgdHJpZXMgdG8gbG9jayBpdCBieQogICogY2FsbGluZyBzdGRtYV9sb2NrKCkuIEJ1dCBpZiB0aGUgRE1BIGlzIGxvY2tlZCBieSB0aGUgU0NTSSBjb2RlIGFuZAogICogdGhlcmUgYXJlIG90aGVyIGRyaXZlcnMgd2FpdGluZyBmb3IgdGhlIGNoaXAsIHdlIGRvIG5vdCBpc3N1ZSB0aGUKLSAqIGNvbW1hbmQgaW1tZWRpYXRlbHkgYnV0IHdhaXQgb24gJ2ZhbGNvbl9mYWlybmVzc19xdWV1ZScuIFdlIHdpbGwgYmUKLSAqIHdha2VkIHVwIHdoZW4gdGhlIERNQSBpcyB1bmxvY2tlZCBieSBzb21lIFNDU0kgaW50ZXJydXB0LiBBZnRlciB0aGF0Ci0gKiB3ZSB0cnkgdG8gZ2V0IHRoZSBsb2NrIGFnYWluLgotICogQnV0IHdlIG11c3QgYmUgcHJlcGFyZWQgdGhhdCBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mCi0gKiBmYWxjb25fZ2V0X2xvY2soKSBpcyB3YWl0aW5nIG9uIHRoZSBmYWlybmVzcyBxdWV1ZS4gVGhleSBzaG91bGQgbm90Ci0gKiB0cnkgYWxsIGF0IG9uY2UgdG8gY2FsbCBzdGRtYV9sb2NrKCksIG9uZSBpcyBlbm91Z2ghIEZvciB0aGF0LCB0aGUKLSAqIGZpcnN0IG9uZSBzZXRzICdmYWxjb25fdHJ5aW5nX2xvY2snLCBvdGhlcnMgdGhhdCBzZWUgdGhhdCB2YXJpYWJsZQotICogc2V0IHdhaXQgb24gdGhlIHF1ZXVlICdmYWxjb25fdHJ5X3dhaXQnLgotICogQ29tcGxpY2F0ZWQsIGNvbXBsaWNhdGVkLi4uLiBTaWdoLi4uCisgKiBjb21tYW5kIGltbWVkaWF0ZWx5IGJ1dCB0ZWxsIHRoZSBTQ1NJIG1pZC1sYXllciB0byBkZWZlci4KICAqLwogCi1zdGF0aWMgdm9pZCBmYWxjb25fZ2V0X2xvY2sodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKElTX0FfVFQoKSkKLQkJcmV0dXJuOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0Jd2FpdF9ldmVudF9jbWQoZmFsY29uX2ZhaXJuZXNzX3dhaXQsCi0JCWluX2ludGVycnVwdCgpIHx8ICFmYWxjb25fZ290X2xvY2sgfHwgIXN0ZG1hX290aGVyc193YWl0aW5nKCksCi0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSwKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpKTsKLQotCXdoaWxlICghZmFsY29uX2dvdF9sb2NrKSB7Ci0JCWlmIChpbl9pcnEoKSkKLQkJCXBhbmljKCJGYWxjb24gU0NTSSBoYXNuJ3QgU1QtRE1BIGxvY2sgaW4gaW50ZXJydXB0Iik7Ci0JCWlmICghZmFsY29uX3RyeWluZ19sb2NrKSB7Ci0JCQlmYWxjb25fdHJ5aW5nX2xvY2sgPSAxOwotCQkJc3RkbWFfbG9jayhzY3NpX2ZhbGNvbl9pbnRyLCBOVUxMKTsKLQkJCWZhbGNvbl9nb3RfbG9jayA9IDE7Ci0JCQlmYWxjb25fdHJ5aW5nX2xvY2sgPSAwOwotCQkJd2FrZV91cCgmZmFsY29uX3RyeV93YWl0KTsKLQkJfSBlbHNlIHsKLQkJCXdhaXRfZXZlbnRfY21kKGZhbGNvbl90cnlfd2FpdCwKLQkJCQlmYWxjb25fZ290X2xvY2sgJiYgIWZhbGNvbl90cnlpbmdfbG9jaywKLQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyksCi0JCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpKTsKLQkJfQotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlpZiAoIWZhbGNvbl9nb3RfbG9jaykKLQkJcGFuaWMoIkZhbGNvbiBTQ1NJOiBzb21lb25lIHN0b2xlIHRoZSBsb2NrIDotKFxuIik7Ci19Ci0KLQotc3RhdGljIGludCBfX2luaXQgYXRhcmlfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdCkKLXsKLQlzdGF0aWMgaW50IGNhbGxlZCA9IDA7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7Ci0KLQlpZiAoIU1BQ0hfSVNfQVRBUkkgfHwKLQkgICAgKCFBVEFSSUhXX1BSRVNFTlQoU1RfU0NTSSkgJiYgIUFUQVJJSFdfUFJFU0VOVChUVF9TQ1NJKSkgfHwKLQkgICAgY2FsbGVkKQotCQlyZXR1cm4gMDsKLQotCWhvc3QtPnByb2NfbmFtZSA9ICJBdGFyaSI7Ci0KLQlhdGFyaV9zY3NpX3JlZ19yZWFkICA9IElTX0FfVFQoKSA/IGF0YXJpX3Njc2lfdHRfcmVnX3JlYWQgOgotCQkJCQkgICBhdGFyaV9zY3NpX2ZhbGNvbl9yZWdfcmVhZDsKLQlhdGFyaV9zY3NpX3JlZ193cml0ZSA9IElTX0FfVFQoKSA/IGF0YXJpX3Njc2lfdHRfcmVnX3dyaXRlIDoKLQkJCQkJICAgYXRhcmlfc2NzaV9mYWxjb25fcmVnX3dyaXRlOwotCi0JLyogc2V0dXAgdmFyaWFibGVzICovCi0JaG9zdC0+Y2FuX3F1ZXVlID0KLQkJKHNldHVwX2Nhbl9xdWV1ZSA+IDApID8gc2V0dXBfY2FuX3F1ZXVlIDoKLQkJSVNfQV9UVCgpID8gQVRBUklfVFRfQ0FOX1FVRVVFIDogQVRBUklfRkFMQ09OX0NBTl9RVUVVRTsKLQlob3N0LT5jbWRfcGVyX2x1biA9Ci0JCShzZXR1cF9jbWRfcGVyX2x1biA+IDApID8gc2V0dXBfY21kX3Blcl9sdW4gOgotCQlJU19BX1RUKCkgPyBBVEFSSV9UVF9DTURfUEVSX0xVTiA6IEFUQVJJX0ZBTENPTl9DTURfUEVSX0xVTjsKLQkvKiBGb3JjZSBzZ190YWJsZXNpemUgdG8gMCBvbiBhIEZhbGNvbiEgKi8KLQlob3N0LT5zZ190YWJsZXNpemUgPQotCQkhSVNfQV9UVCgpID8gQVRBUklfRkFMQ09OX1NHX1RBQkxFU0laRSA6Ci0JCShzZXR1cF9zZ190YWJsZXNpemUgPj0gMCkgPyBzZXR1cF9zZ190YWJsZXNpemUgOiBBVEFSSV9UVF9TR19UQUJMRVNJWkU7Ci0KLQlpZiAoc2V0dXBfaG9zdGlkID49IDApCi0JCWhvc3QtPnRoaXNfaWQgPSBzZXR1cF9ob3N0aWQ7Ci0JZWxzZSB7Ci0JCS8qIHVzZSA3IGFzIGRlZmF1bHQgKi8KLQkJaG9zdC0+dGhpc19pZCA9IDc7Ci0JCS8qIFRlc3QgaWYgYSBob3N0IGlkIGlzIHNldCBpbiB0aGUgTlZSYW0gKi8KLQkJaWYgKEFUQVJJSFdfUFJFU0VOVChUVF9DTEspICYmIG52cmFtX2NoZWNrX2NoZWNrc3VtKCkpIHsKLQkJCXVuc2lnbmVkIGNoYXIgYiA9IG52cmFtX3JlYWRfYnl0ZSggMTQgKTsKLQkJCS8qIEFyYml0cmF0aW9uIGVuYWJsZWQ/IChmb3IgVE9TKSBJZiB5ZXMsIHVzZSBjb25maWd1cmVkIGhvc3QgSUQgKi8KLQkJCWlmIChiICYgMHg4MCkKLQkJCQlob3N0LT50aGlzX2lkID0gYiAmIDc7Ci0JCX0KLQl9Ci0KLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQlpZiAoc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nIDwgMCkKLQkJc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID0gREVGQVVMVF9VU0VfVEFHR0VEX1FVRVVJTkc7Ci0jZW5kaWYKLSNpZmRlZiBSRUFMX0RNQQotCS8qIElmIHJ1bm5pbmcgb24gYSBGYWxjb24gYW5kIGlmIHRoZXJlJ3MgVFQtUmFtIChpLmUuLCBtb3JlIHRoYW4gb25lCi0JICogbWVtb3J5IGJsb2NrLCBzaW5jZSB0aGVyZSdzIGFsd2F5cyBTVC1SYW0gaW4gYSBGYWxjb24pLCB0aGVuIGFsbG9jYXRlIGEKLQkgKiBTVFJBTV9CVUZGRVJfU0laRSBieXRlIGRyaWJibGUgYnVmZmVyIGZvciB0cmFuc2ZlcnMgZnJvbS90byBhbHRlcm5hdGl2ZQotCSAqIFJhbS4KLQkgKi8KLQlpZiAoTUFDSF9JU19BVEFSSSAmJiBBVEFSSUhXX1BSRVNFTlQoU1RfU0NTSSkgJiYKLQkgICAgIUFUQVJJSFdfUFJFU0VOVChFWFREX0RNQSkgJiYgbTY4a19udW1fbWVtb3J5ID4gMSkgewotCQlhdGFyaV9kbWFfYnVmZmVyID0gYXRhcmlfc3RyYW1fYWxsb2MoU1RSQU1fQlVGRkVSX1NJWkUsICJTQ1NJIik7Ci0JCWlmICghYXRhcmlfZG1hX2J1ZmZlcikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJhdGFyaV9zY3NpX2RldGVjdDogY2FuJ3QgYWxsb2NhdGUgU1QtUkFNICIKLQkJCQkJImRvdWJsZSBidWZmZXJcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJYXRhcmlfZG1hX3BoeXNfYnVmZmVyID0gYXRhcmlfc3RyYW1fdG9fcGh5cyhhdGFyaV9kbWFfYnVmZmVyKTsKLQkJYXRhcmlfZG1hX29yaWdfYWRkciA9IDA7Ci0JfQotI2VuZGlmCi0JaW5zdGFuY2UgPSBzY3NpX3JlZ2lzdGVyKGhvc3QsIHNpemVvZihzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSkpOwotCWlmIChpbnN0YW5jZSA9PSBOVUxMKSB7Ci0JCWF0YXJpX3N0cmFtX2ZyZWUoYXRhcmlfZG1hX2J1ZmZlcik7Ci0JCWF0YXJpX2RtYV9idWZmZXIgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0JYXRhcmlfc2NzaV9ob3N0ID0gaW5zdGFuY2U7Ci0JLyoKLQkgKiBTZXQgaXJxIHRvIDAsIHRvIGF2b2lkIHRoYXQgdGhlIG1pZC1sZXZlbCBjb2RlIGRpc2FibGVzIG91ciBpbnRlcnJ1cHQKLQkgKiBkdXJpbmcgcXVldWVfY29tbWFuZCBjYWxscy4gVGhpcyBpcyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5LCBhbmQgZXZlbgotCSAqIHdvcnNlIGNhdXNlcyBiYWQgcHJvYmxlbXMgb24gdGhlIEZhbGNvbiwgd2hlcmUgdGhlIGludCBpcyBzaGFyZWQgd2l0aAotCSAqIElERSBhbmQgZmxvcHB5IQotCSAqLwotICAgICAgIGluc3RhbmNlLT5pcnEgPSAwOwotCi0jaWZkZWYgQ09ORklHX0FUQVJJX1NDU0lfUkVTRVRfQk9PVAotCWF0YXJpX3Njc2lfcmVzZXRfYm9vdCgpOwotI2VuZGlmCi0JTkNSNTM4MF9pbml0KGluc3RhbmNlLCAwKTsKLQotCWlmIChJU19BX1RUKCkpIHsKLQotCQkvKiBUaGlzIGludCBpcyBhY3R1YWxseSAicHNldWRvLXNsb3ciLCBpLmUuIGl0IGFjdHMgbGlrZSBhIHNsb3cKLQkJICogaW50ZXJydXB0IGFmdGVyIGhhdmluZyBjbGVhcmVkIHRoZSBwZW5kaW5nIGZsYWcgZm9yIHRoZSBETUEKLQkJICogaW50ZXJydXB0LiAqLwotCQlpZiAocmVxdWVzdF9pcnEoSVJRX1RUX01GUF9TQ1NJLCBzY3NpX3R0X2ludHIsIElSUV9UWVBFX1NMT1csCi0JCQkJICJTQ1NJIE5DUjUzODAiLCBpbnN0YW5jZSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYXRhcmlfc2NzaV9kZXRlY3Q6IGNhbm5vdCBhbGxvY2F0ZSBpcnEgJWQsIGFib3J0aW5nIixJUlFfVFRfTUZQX1NDU0kpOwotCQkJc2NzaV91bnJlZ2lzdGVyKGF0YXJpX3Njc2lfaG9zdCk7Ci0JCQlhdGFyaV9zdHJhbV9mcmVlKGF0YXJpX2RtYV9idWZmZXIpOwotCQkJYXRhcmlfZG1hX2J1ZmZlciA9IDA7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQl0dF9tZnAuYWN0aXZlX2VkZ2UgfD0gMHg4MDsJCS8qIFNDU0kgaW50IG9uIEwtPkggKi8KLSNpZmRlZiBSRUFMX0RNQQotCQl0dF9zY3NpX2RtYS5kbWFfY3RybCA9IDA7Ci0JCWF0YXJpX2RtYV9yZXNpZHVhbCA9IDA7Ci0KLQkJaWYgKE1BQ0hfSVNfTUVEVVNBKSB7Ci0JCQkvKiBXaGlsZSB0aGUgcmVhZCBvdmVycnVucyAoZGVzY3JpYmVkIGJ5IERyZXcgRWNraGFyZHQgaW4KLQkJCSAqIE5DUjUzODAuYykgbmV2ZXIgaGFwcGVuZWQgb24gVFRzLCB0aGV5IGRvIGluIGZhY3Qgb24gdGhlIE1lZHVzYQotCQkJICogKFRoaXMgd2FzIHRoZSBjYXVzZSB3aHkgU0NTSSBkaWRuJ3Qgd29yayByaWdodCBmb3Igc28gbG9uZwotCQkJICogdGhlcmUuKSBTaW5jZSBoYW5kbGluZyB0aGUgb3ZlcnJ1bnMgc2xvd3MgZG93biBhIGJpdCwgSSB0dXJuZWQKLQkJCSAqIHRoZSAjaWZkZWYncyBpbnRvIGEgcnVudGltZSBjb25kaXRpb24uCi0JCQkgKgotCQkJICogSW4gcHJpbmNpcGxlIGl0IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGRvIG1heC4gMSBieXRlIHdpdGgKLQkJCSAqIFBJTywgYnV0IHRoZXJlIGlzIGFub3RoZXIgcHJvYmxlbSBvbiB0aGUgTWVkdXNhIHdpdGggdGhlIERNQQotCQkJICogcmVzdCBkYXRhIHJlZ2lzdGVyLiBTbyAnYXRhcmlfcmVhZF9vdmVycnVucycgaXMgY3VycmVudGx5IHNldAotCQkJICogdG8gNCB0byBhdm9pZCBoYXZpbmcgdHJhbnNmZXJzIHRoYXQgYXJlbid0IGEgbXVsdGlwbGUgb2YgNC4gSWYKLQkJCSAqIHRoZSByZXN0IGRhdGEgYnVnIGlzIGZpeGVkLCB0aGlzIGNhbiBiZSBsb3dlcmVkIHRvIDEuCi0JCQkgKi8KLQkJCWF0YXJpX3JlYWRfb3ZlcnJ1bnMgPSA0OwotCQl9Ci0jZW5kaWYgLypSRUFMX0RNQSovCi0JfSBlbHNlIHsgLyogISBJU19BX1RUICovCi0KLQkJLyogTm90aGluZyB0byBkbyBmb3IgdGhlIGludGVycnVwdDogdGhlIFNULURNQSBpcyBpbml0aWFsaXplZAotCQkgKiBhbHJlYWR5IGJ5IGF0YXJpX2luaXRfSU5UUygpCi0JCSAqLwotCi0jaWZkZWYgUkVBTF9ETUEKLQkJYXRhcmlfZG1hX3Jlc2lkdWFsID0gMDsKLQkJYXRhcmlfZG1hX2FjdGl2ZSA9IDA7Ci0JCWF0YXJpX2RtYV9zdHJhbV9tYXNrID0gKEFUQVJJSFdfUFJFU0VOVChFWFREX0RNQSkgPyAweDAwMDAwMDAwCi0JCQkJCTogMHhmZjAwMDAwMCk7Ci0jZW5kaWYKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IG9wdGlvbnMgQ0FOX1FVRVVFPSVkIENNRF9QRVJfTFVOPSVkIFNDQVQtR0FUPSVkICIKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQkJCSJUQUdHRUQtUVVFVUlORz0lcyAiCi0jZW5kaWYKLQkJCSJIT1NUSUQ9JWQiLAotCQkJaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5ob3N0dC0+Y2FuX3F1ZXVlLAotCQkJaW5zdGFuY2UtPmhvc3R0LT5jbWRfcGVyX2x1biwKLQkJCWluc3RhbmNlLT5ob3N0dC0+c2dfdGFibGVzaXplLAotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkJc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID8gInllcyIgOiAibm8iLAotI2VuZGlmCi0JCQlpbnN0YW5jZS0+aG9zdHQtPnRoaXNfaWQgKTsKLQlOQ1I1MzgwX3ByaW50X29wdGlvbnMoaW5zdGFuY2UpOwotCXByaW50aygiXG4iKTsKLQotCWNhbGxlZCA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgYXRhcmlfc2NzaV9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKnNoKQorc3RhdGljIGludCBmYWxjb25fZ2V0X2xvY2soc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJaWYgKElTX0FfVFQoKSkKLQkJZnJlZV9pcnEoSVJRX1RUX01GUF9TQ1NJLCBzaCk7Ci0JaWYgKGF0YXJpX2RtYV9idWZmZXIpCi0JCWF0YXJpX3N0cmFtX2ZyZWUoYXRhcmlfZG1hX2J1ZmZlcik7Ci0JTkNSNTM4MF9leGl0KHNoKTsKKwkJcmV0dXJuIDE7CisKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCXJldHVybiBzdGRtYV90cnlfbG9jayhzY3NpX2ZhbGNvbl9pbnRyLCBpbnN0YW5jZSk7CisKKwlzdGRtYV9sb2NrKHNjc2lfZmFsY29uX2ludHIsIGluc3RhbmNlKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNzM5LDcgKzQ4NSw3IEBACiB7CiAJLyogRm9ybWF0IG9mIGF0YXNjc2kgcGFyYW1ldGVyIGlzOgogCSAqICAgYXRhc2NzaT08Y2FuX3F1ZXVlPiw8Y21kX3Blcl9sdW4+LDxzZ190YWJsZXNpemU+LDxob3N0aWQ+LDx1c2VfdGFncz4KLQkgKiBEZWZhdWx0cyBkZXBlbmQgb24gVFQgb3IgRmFsY29uLCBob3N0aWQgZGV0ZXJtaW5lZCBhdCBydW4gdGltZS4KKwkgKiBEZWZhdWx0cyBkZXBlbmQgb24gVFQgb3IgRmFsY29uLCBkZXRlcm1pbmVkIGF0IHJ1biB0aW1lLgogCSAqIE5lZ2F0aXZlIHZhbHVlcyBtZWFuIGRvbid0IGNoYW5nZS4KIAkgKi8KIAlpbnQgaW50c1s2XTsKQEAgLTc1MCwzNiArNDk2LDE3IEBACiAJCXByaW50aygiYXRhcmlfc2NzaV9zZXR1cDogbm8gYXJndW1lbnRzIVxuIik7CiAJCXJldHVybiAwOwogCX0KLQotCWlmIChpbnRzWzBdID49IDEpIHsKLQkJaWYgKGludHNbMV0gPiAwKQotCQkJLyogbm8gbGltaXRzIG9uIHRoaXMsIGp1c3QgPiAwICovCi0JCQlzZXR1cF9jYW5fcXVldWUgPSBpbnRzWzFdOwotCX0KLQlpZiAoaW50c1swXSA+PSAyKSB7Ci0JCWlmIChpbnRzWzJdID4gMCkKLQkJCXNldHVwX2NtZF9wZXJfbHVuID0gaW50c1syXTsKLQl9Ci0JaWYgKGludHNbMF0gPj0gMykgewotCQlpZiAoaW50c1szXSA+PSAwKSB7Ci0JCQlzZXR1cF9zZ190YWJsZXNpemUgPSBpbnRzWzNdOwotCQkJLyogTXVzdCBiZSA8PSBTR19BTEwgKDI1NSkgKi8KLQkJCWlmIChzZXR1cF9zZ190YWJsZXNpemUgPiBTR19BTEwpCi0JCQkJc2V0dXBfc2dfdGFibGVzaXplID0gU0dfQUxMOwotCQl9Ci0JfQotCWlmIChpbnRzWzBdID49IDQpIHsKLQkJLyogTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDcgKi8KLQkJaWYgKGludHNbNF0gPj0gMCAmJiBpbnRzWzRdIDw9IDcpCi0JCQlzZXR1cF9ob3N0aWQgPSBpbnRzWzRdOwotCQllbHNlIGlmIChpbnRzWzRdID4gNykKLQkJCXByaW50aygiYXRhcmlfc2NzaV9zZXR1cDogaW52YWxpZCBob3N0IElEICVkICFcbiIsIGludHNbNF0pOwotCX0KKwlpZiAoaW50c1swXSA+PSAxKQorCQlzZXR1cF9jYW5fcXVldWUgPSBpbnRzWzFdOworCWlmIChpbnRzWzBdID49IDIpCisJCXNldHVwX2NtZF9wZXJfbHVuID0gaW50c1syXTsKKwlpZiAoaW50c1swXSA+PSAzKQorCQlzZXR1cF9zZ190YWJsZXNpemUgPSBpbnRzWzNdOworCWlmIChpbnRzWzBdID49IDQpCisJCXNldHVwX2hvc3RpZCA9IGludHNbNF07CiAjaWZkZWYgU1VQUE9SVF9UQUdTCi0JaWYgKGludHNbMF0gPj0gNSkgewotCQlpZiAoaW50c1s1XSA+PSAwKQotCQkJc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID0gISFpbnRzWzVdOwotCX0KKwlpZiAoaW50c1swXSA+PSA1KQorCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBpbnRzWzVdOwogI2VuZGlmCiAKIAlyZXR1cm4gMTsKQEAgLTc4OCw0NSArNTE1LDYgQEAKIF9fc2V0dXAoImF0YXNjc2k9IiwgYXRhcmlfc2NzaV9zZXR1cCk7CiAjZW5kaWYgLyogIU1PRFVMRSAqLwogCi1zdGF0aWMgaW50IGF0YXJpX3Njc2lfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqY21kKQotewotCWludCBydjsKLQlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQotCQkoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKiljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0KLQkvKiBGb3IgZG9pbmcgdGhlIHJlc2V0LCBTQ1NJIGludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZCBmaXJzdCwKLQkgKiBzaW5jZSB0aGUgNTM4MCByYWlzZXMgaXRzIElSUSBsaW5lIHdoaWxlIF9SU1QgaXMgYWN0aXZlIGFuZCB3ZQotCSAqIGNhbid0IGRpc2FibGUgaW50ZXJydXB0cyBjb21wbGV0ZWx5LCBzaW5jZSB3ZSBuZWVkIHRoZSB0aW1lci4KLQkgKi8KLQkvKiBBbmQgYWJvcnQgYSBtYXliZSBhY3RpdmUgRE1BIHRyYW5zZmVyICovCi0JaWYgKElTX0FfVFQoKSkgewotCQlhdGFyaV90dXJub2ZmX2lycShJUlFfVFRfTUZQX1NDU0kpOwotI2lmZGVmIFJFQUxfRE1BCi0JCXR0X3Njc2lfZG1hLmRtYV9jdHJsID0gMDsKLSNlbmRpZiAvKiBSRUFMX0RNQSAqLwotCX0gZWxzZSB7Ci0JCWF0YXJpX3R1cm5vZmZfaXJxKElSUV9NRlBfRlNDU0kpOwotI2lmZGVmIFJFQUxfRE1BCi0JCXN0X2RtYS5kbWFfbW9kZV9zdGF0dXMgPSAweDkwOwotCQlhdGFyaV9kbWFfYWN0aXZlID0gMDsKLQkJYXRhcmlfZG1hX29yaWdfYWRkciA9IE5VTEw7Ci0jZW5kaWYgLyogUkVBTF9ETUEgKi8KLQl9Ci0KLQlydiA9IE5DUjUzODBfYnVzX3Jlc2V0KGNtZCk7Ci0KLQkvKiBSZS1lbmFibGUgaW50cyAqLwotCWlmIChJU19BX1RUKCkpIHsKLQkJYXRhcmlfdHVybm9uX2lycShJUlFfVFRfTUZQX1NDU0kpOwotCX0gZWxzZSB7Ci0JCWF0YXJpX3R1cm5vbl9pcnEoSVJRX01GUF9GU0NTSSk7Ci0JfQotCWlmIChydiA9PSBTVUNDRVNTKQotCQlmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKGhvc3RkYXRhKTsKLQotCXJldHVybiBydjsKLX0KLQogCiAjaWZkZWYgQ09ORklHX0FUQVJJX1NDU0lfUkVTRVRfQk9PVAogc3RhdGljIHZvaWQgX19pbml0IGF0YXJpX3Njc2lfcmVzZXRfYm9vdCh2b2lkKQpAQCAtODYwLDE1ICs1NDgsNiBAQAogfQogI2VuZGlmCiAKLQotc3RhdGljIGNvbnN0IGNoYXIgKmF0YXJpX3Njc2lfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQotewotCS8qIGF0YXJpX3Njc2lfZGV0ZWN0KCkgaXMgdmVyYm9zZSBlbm91Z2guLi4gKi8KLQlzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdbXSA9ICJBdGFyaSBuYXRpdmUgU0NTSSI7Ci0JcmV0dXJuIHN0cmluZzsKLX0KLQotCiAjaWYgZGVmaW5lZChSRUFMX0RNQSkKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYXRhcmlfc2NzaV9kbWFfc2V0dXAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsCkBAIC05NDksNyArNjI4LDcgQEAKICNkZWZpbmUJQ01EX1NVUkVMWV9CWVRFX01PREUJMQogI2RlZmluZQlDTURfTU9ERV9VTktOT1dOCQkyCiAKLXN0YXRpYyBpbnQgZmFsY29uX2NsYXNzaWZ5X2NtZChTY3NpX0NtbmQgKmNtZCkKK3N0YXRpYyBpbnQgZmFsY29uX2NsYXNzaWZ5X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJdW5zaWduZWQgY2hhciBvcGNvZGUgPSBjbWQtPmNtbmRbMF07CiAKQEAgLTk4MSw3ICs2NjAsNyBAQAogICovCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF0YXJpX2RtYV94ZmVyX2xlbih1bnNpZ25lZCBsb25nIHdhbnRlZF9sZW4sCi0JCQkJCVNjc2lfQ21uZCAqY21kLCBpbnQgd3JpdGVfZmxhZykKKwkJCQkJc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgd3JpdGVfZmxhZykKIHsKIAl1bnNpZ25lZCBsb25nCXBvc3NpYmxlX2xlbiwgbGltaXQ7CiAKQEAgLTEwOTksMjMgKzc3OCwyNDcgQEAKIAogI2luY2x1ZGUgImF0YXJpX05DUjUzODAuYyIKIAotc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIGludCBhdGFyaV9zY3NpX2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJaW50IHJ2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKyNpZmRlZiBSRUFMX0RNQQorCS8qIEFib3J0IGEgbWF5YmUgYWN0aXZlIERNQSB0cmFuc2ZlciAqLworCWlmIChJU19BX1RUKCkpIHsKKwkJdHRfc2NzaV9kbWEuZG1hX2N0cmwgPSAwOworCX0gZWxzZSB7CisJCXN0X2RtYS5kbWFfbW9kZV9zdGF0dXMgPSAweDkwOworCQlhdGFyaV9kbWFfYWN0aXZlID0gMDsKKwkJYXRhcmlfZG1hX29yaWdfYWRkciA9IE5VTEw7CisJfQorI2VuZGlmCisKKwlydiA9IE5DUjUzODBfYnVzX3Jlc2V0KGNtZCk7CisKKwkvKiBUaGUgNTM4MCByYWlzZXMgaXRzIElSUSBsaW5lIHdoaWxlIF9SU1QgaXMgYWN0aXZlIGJ1dCB0aGUgU1QgRE1BCisJICogImxvY2siIGhhcyBiZWVuIHJlbGVhc2VkIHNvIHRoaXMgaW50ZXJydXB0IG1heSBlbmQgdXAgaGFuZGxlZCBieQorCSAqIGZsb3BweSBvciBJREUgZHJpdmVyIChpZiBvbmUgb2YgdGhlbSBob2xkcyB0aGUgbG9jaykuIFRoZSBOQ1I1MzgwCisJICogaW50ZXJydXB0IGZsYWcgaGFzIGJlZW4gY2xlYXJlZCBhbHJlYWR5LgorCSAqLworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJ2OworfQorCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAgICAgICAgICJhdGFyaV9zY3NpIgorI2RlZmluZSBQRlggICAgICAgICAgICAgICAgICAgICBEUlZfTU9EVUxFX05BTUUgIjogIgorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhdGFyaV9zY3NpX3RlbXBsYXRlID0geworCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAorCS5wcm9jX25hbWUJCT0gRFJWX01PRFVMRV9OQU1FLAogCS5zaG93X2luZm8JCT0gYXRhcmlfc2NzaV9zaG93X2luZm8sCiAJLm5hbWUJCQk9ICJBdGFyaSBuYXRpdmUgU0NTSSIsCi0JLmRldGVjdAkJCT0gYXRhcmlfc2NzaV9kZXRlY3QsCi0JLnJlbGVhc2UJCT0gYXRhcmlfc2NzaV9yZWxlYXNlLAogCS5pbmZvCQkJPSBhdGFyaV9zY3NpX2luZm8sCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFyaV9zY3NpX3F1ZXVlX2NvbW1hbmQsCiAJLmVoX2Fib3J0X2hhbmRsZXIJPSBhdGFyaV9zY3NpX2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IGF0YXJpX3Njc2lfYnVzX3Jlc2V0LAotCS5jYW5fcXVldWUJCT0gMCwgLyogaW5pdGlhbGl6ZWQgYXQgcnVuLXRpbWUgKi8KLQkudGhpc19pZAkJPSAwLCAvKiBpbml0aWFsaXplZCBhdCBydW4tdGltZSAqLwotCS5zZ190YWJsZXNpemUJCT0gMCwgLyogaW5pdGlhbGl6ZWQgYXQgcnVuLXRpbWUgKi8KLQkuY21kX3Blcl9sdW4JCT0gMCwgLyogaW5pdGlhbGl6ZWQgYXQgcnVuLXRpbWUgKi8KKwkudGhpc19pZAkJPSA3LAogCS51c2VfY2x1c3RlcmluZwkJPSBESVNBQkxFX0NMVVNURVJJTkcKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IGF0YXJpX3Njc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKKwlpbnQgZXJyb3I7CisJc3RydWN0IHJlc291cmNlICppcnE7CisJaW50IGhvc3RfZmxhZ3MgPSAwOwogCi0jaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghaXJxKQorCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmIChBVEFSSUhXX1BSRVNFTlQoVFRfU0NTSSkpIHsKKwkJYXRhcmlfc2NzaV9yZWdfcmVhZCAgPSBhdGFyaV9zY3NpX3R0X3JlZ19yZWFkOworCQlhdGFyaV9zY3NpX3JlZ193cml0ZSA9IGF0YXJpX3Njc2lfdHRfcmVnX3dyaXRlOworCX0gZWxzZSB7CisJCWF0YXJpX3Njc2lfcmVnX3JlYWQgID0gYXRhcmlfc2NzaV9mYWxjb25fcmVnX3JlYWQ7CisJCWF0YXJpX3Njc2lfcmVnX3dyaXRlID0gYXRhcmlfc2NzaV9mYWxjb25fcmVnX3dyaXRlOworCX0KKworCS8qIFRoZSB2YWx1ZXMgZm9yIENNRF9QRVJfTFVOIGFuZCBDQU5fUVVFVUUgYXJlIHNvbWVob3cgYXJiaXRyYXJ5LgorCSAqIEhpZ2hlciB2YWx1ZXMgc2hvdWxkIHdvcmssIHRvbzsgdHJ5IGl0IQorCSAqIChCdXQgY21kX3Blcl9sdW4gY29zdHMgbWVtb3J5ISkKKwkgKgorCSAqIEJ1dCB0aGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBzb21ld2hlcmUgdGhhdCByZXF1aXJlcyBDQU5fUVVFVUUgdG8gYmUKKwkgKiAyKkNNRF9QRVJfTFVOLiBBdCBsZWFzdCBvbiBhIFRULCBubyBzcHVyaW91cyB0aW1lb3V0cyBzZWVuIHNpbmNlCisJICogY2hhbmdlZCBDTURfUEVSX0xVTi4uLgorCSAqCisJICogTm90ZTogVGhlIEZhbGNvbiBjdXJyZW50bHkgdXNlcyA4LzEgc2V0dGluZyBkdWUgdG8gdW5zb2x2ZWQgcHJvYmxlbXMKKwkgKiB3aXRoIGNtZF9wZXJfbHVuICE9IDEKKwkgKi8KKwlpZiAoQVRBUklIV19QUkVTRU5UKFRUX1NDU0kpKSB7CisJCWF0YXJpX3Njc2lfdGVtcGxhdGUuY2FuX3F1ZXVlICAgID0gMTY7CisJCWF0YXJpX3Njc2lfdGVtcGxhdGUuY21kX3Blcl9sdW4gID0gODsKKwkJYXRhcmlfc2NzaV90ZW1wbGF0ZS5zZ190YWJsZXNpemUgPSBTR19BTEw7CisJfSBlbHNlIHsKKwkJYXRhcmlfc2NzaV90ZW1wbGF0ZS5jYW5fcXVldWUgICAgPSA4OworCQlhdGFyaV9zY3NpX3RlbXBsYXRlLmNtZF9wZXJfbHVuICA9IDE7CisJCWF0YXJpX3Njc2lfdGVtcGxhdGUuc2dfdGFibGVzaXplID0gU0dfTk9ORTsKKwl9CisKKwlpZiAoc2V0dXBfY2FuX3F1ZXVlID4gMCkKKwkJYXRhcmlfc2NzaV90ZW1wbGF0ZS5jYW5fcXVldWUgPSBzZXR1cF9jYW5fcXVldWU7CisKKwlpZiAoc2V0dXBfY21kX3Blcl9sdW4gPiAwKQorCQlhdGFyaV9zY3NpX3RlbXBsYXRlLmNtZF9wZXJfbHVuID0gc2V0dXBfY21kX3Blcl9sdW47CisKKwkvKiBMZWF2ZSBzZ190YWJsZXNpemUgYXQgMCBvbiBhIEZhbGNvbiEgKi8KKwlpZiAoQVRBUklIV19QUkVTRU5UKFRUX1NDU0kpICYmIHNldHVwX3NnX3RhYmxlc2l6ZSA+PSAwKQorCQlhdGFyaV9zY3NpX3RlbXBsYXRlLnNnX3RhYmxlc2l6ZSA9IHNldHVwX3NnX3RhYmxlc2l6ZTsKKworCWlmIChzZXR1cF9ob3N0aWQgPj0gMCkgeworCQlhdGFyaV9zY3NpX3RlbXBsYXRlLnRoaXNfaWQgPSBzZXR1cF9ob3N0aWQgJiA3OworCX0gZWxzZSB7CisJCS8qIFRlc3QgaWYgYSBob3N0IGlkIGlzIHNldCBpbiB0aGUgTlZSYW0gKi8KKwkJaWYgKEFUQVJJSFdfUFJFU0VOVChUVF9DTEspICYmIG52cmFtX2NoZWNrX2NoZWNrc3VtKCkpIHsKKwkJCXVuc2lnbmVkIGNoYXIgYiA9IG52cmFtX3JlYWRfYnl0ZSgxNCk7CisKKwkJCS8qIEFyYml0cmF0aW9uIGVuYWJsZWQ/IChmb3IgVE9TKQorCQkJICogSWYgeWVzLCB1c2UgY29uZmlndXJlZCBob3N0IElECisJCQkgKi8KKwkJCWlmIChiICYgMHg4MCkKKwkJCQlhdGFyaV9zY3NpX3RlbXBsYXRlLnRoaXNfaWQgPSBiICYgNzsKKwkJfQorCX0KKworCisjaWZkZWYgUkVBTF9ETUEKKwkvKiBJZiBydW5uaW5nIG9uIGEgRmFsY29uIGFuZCBpZiB0aGVyZSdzIFRULVJhbSAoaS5lLiwgbW9yZSB0aGFuIG9uZQorCSAqIG1lbW9yeSBibG9jaywgc2luY2UgdGhlcmUncyBhbHdheXMgU1QtUmFtIGluIGEgRmFsY29uKSwgdGhlbgorCSAqIGFsbG9jYXRlIGEgU1RSQU1fQlVGRkVSX1NJWkUgYnl0ZSBkcmliYmxlIGJ1ZmZlciBmb3IgdHJhbnNmZXJzCisJICogZnJvbS90byBhbHRlcm5hdGl2ZSBSYW0uCisJICovCisJaWYgKEFUQVJJSFdfUFJFU0VOVChTVF9TQ1NJKSAmJiAhQVRBUklIV19QUkVTRU5UKEVYVERfRE1BKSAmJgorCSAgICBtNjhrX251bV9tZW1vcnkgPiAxKSB7CisJCWF0YXJpX2RtYV9idWZmZXIgPSBhdGFyaV9zdHJhbV9hbGxvYyhTVFJBTV9CVUZGRVJfU0laRSwgIlNDU0kiKTsKKwkJaWYgKCFhdGFyaV9kbWFfYnVmZmVyKSB7CisJCQlwcl9lcnIoUEZYICJjYW4ndCBhbGxvY2F0ZSBTVC1SQU0gZG91YmxlIGJ1ZmZlclxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlhdGFyaV9kbWFfcGh5c19idWZmZXIgPSBhdGFyaV9zdHJhbV90b19waHlzKGF0YXJpX2RtYV9idWZmZXIpOworCQlhdGFyaV9kbWFfb3JpZ19hZGRyID0gMDsKKwl9CisjZW5kaWYKKworCWluc3RhbmNlID0gc2NzaV9ob3N0X2FsbG9jKCZhdGFyaV9zY3NpX3RlbXBsYXRlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSkpOworCWlmICghaW5zdGFuY2UpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfYWxsb2M7CisJfQorCWF0YXJpX3Njc2lfaG9zdCA9IGluc3RhbmNlOworCisjaWZkZWYgQ09ORklHX0FUQVJJX1NDU0lfUkVTRVRfQk9PVAorCWF0YXJpX3Njc2lfcmVzZXRfYm9vdCgpOworI2VuZGlmCisKKwlpbnN0YW5jZS0+aXJxID0gaXJxLT5zdGFydDsKKworCWhvc3RfZmxhZ3MgfD0gSVNfQV9UVCgpID8gMCA6IEZMQUdfTEFURV9ETUFfU0VUVVA7CisKKyNpZmRlZiBTVVBQT1JUX1RBR1MKKwlob3N0X2ZsYWdzIHw9IHNldHVwX3VzZV90YWdnZWRfcXVldWluZyA+IDAgPyBGTEFHX1RBR0dFRF9RVUVVSU5HIDogMDsKKyNlbmRpZgorCisJTkNSNTM4MF9pbml0KGluc3RhbmNlLCBob3N0X2ZsYWdzKTsKKworCWlmIChJU19BX1RUKCkpIHsKKwkJZXJyb3IgPSByZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCBzY3NpX3R0X2ludHIsIDAsCisJCSAgICAgICAgICAgICAgICAgICAgIk5DUjUzODAiLCBpbnN0YW5jZSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKFBGWCAicmVxdWVzdCBpcnEgJWQgZmFpbGVkLCBhYm9ydGluZ1xuIiwKKwkJCSAgICAgICBpbnN0YW5jZS0+aXJxKTsKKwkJCWdvdG8gZmFpbF9pcnE7CisJCX0KKwkJdHRfbWZwLmFjdGl2ZV9lZGdlIHw9IDB4ODA7CS8qIFNDU0kgaW50IG9uIEwtPkggKi8KKyNpZmRlZiBSRUFMX0RNQQorCQl0dF9zY3NpX2RtYS5kbWFfY3RybCA9IDA7CisJCWF0YXJpX2RtYV9yZXNpZHVhbCA9IDA7CisKKwkJLyogV2hpbGUgdGhlIHJlYWQgb3ZlcnJ1bnMgKGRlc2NyaWJlZCBieSBEcmV3IEVja2hhcmR0IGluCisJCSAqIE5DUjUzODAuYykgbmV2ZXIgaGFwcGVuZWQgb24gVFRzLCB0aGV5IGRvIGluIGZhY3Qgb24gdGhlCisJCSAqIE1lZHVzYSAoVGhpcyB3YXMgdGhlIGNhdXNlIHdoeSBTQ1NJIGRpZG4ndCB3b3JrIHJpZ2h0IGZvcgorCQkgKiBzbyBsb25nIHRoZXJlLikgU2luY2UgaGFuZGxpbmcgdGhlIG92ZXJydW5zIHNsb3dzIGRvd24KKwkJICogYSBiaXQsIEkgdHVybmVkIHRoZSAjaWZkZWYncyBpbnRvIGEgcnVudGltZSBjb25kaXRpb24uCisJCSAqCisJCSAqIEluIHByaW5jaXBsZSBpdCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBkbyBtYXguIDEgYnl0ZSB3aXRoCisJCSAqIFBJTywgYnV0IHRoZXJlIGlzIGFub3RoZXIgcHJvYmxlbSBvbiB0aGUgTWVkdXNhIHdpdGggdGhlIERNQQorCQkgKiByZXN0IGRhdGEgcmVnaXN0ZXIuIFNvIHJlYWRfb3ZlcnJ1bnMgaXMgY3VycmVudGx5IHNldAorCQkgKiB0byA0IHRvIGF2b2lkIGhhdmluZyB0cmFuc2ZlcnMgdGhhdCBhcmVuJ3QgYSBtdWx0aXBsZSBvZiA0LgorCQkgKiBJZiB0aGUgcmVzdCBkYXRhIGJ1ZyBpcyBmaXhlZCwgdGhpcyBjYW4gYmUgbG93ZXJlZCB0byAxLgorCQkgKi8KKwkJaWYgKE1BQ0hfSVNfTUVEVVNBKSB7CisJCQlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQorCQkJCXNob3N0X3ByaXYoaW5zdGFuY2UpOworCisJCQlob3N0ZGF0YS0+cmVhZF9vdmVycnVucyA9IDQ7CisJCX0KKyNlbmRpZgorCX0gZWxzZSB7CisJCS8qIE5vdGhpbmcgdG8gZG8gZm9yIHRoZSBpbnRlcnJ1cHQ6IHRoZSBTVC1ETUEgaXMgaW5pdGlhbGl6ZWQKKwkJICogYWxyZWFkeS4KKwkJICovCisjaWZkZWYgUkVBTF9ETUEKKwkJYXRhcmlfZG1hX3Jlc2lkdWFsID0gMDsKKwkJYXRhcmlfZG1hX2FjdGl2ZSA9IDA7CisJCWF0YXJpX2RtYV9zdHJhbV9tYXNrID0gKEFUQVJJSFdfUFJFU0VOVChFWFREX0RNQSkgPyAweDAwMDAwMDAwCisJCQkJCTogMHhmZjAwMDAwMCk7CisjZW5kaWYKKwl9CisKKwllcnJvciA9IHNjc2lfYWRkX2hvc3QoaW5zdGFuY2UsIE5VTEwpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsX2hvc3Q7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbnN0YW5jZSk7CisKKwlzY3NpX3NjYW5faG9zdChpbnN0YW5jZSk7CisJcmV0dXJuIDA7CisKK2ZhaWxfaG9zdDoKKwlpZiAoSVNfQV9UVCgpKQorCQlmcmVlX2lycShpbnN0YW5jZS0+aXJxLCBpbnN0YW5jZSk7CitmYWlsX2lycToKKwlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOworCXNjc2lfaG9zdF9wdXQoaW5zdGFuY2UpOworZmFpbF9hbGxvYzoKKwlpZiAoYXRhcmlfZG1hX2J1ZmZlcikKKwkJYXRhcmlfc3RyYW1fZnJlZShhdGFyaV9kbWFfYnVmZmVyKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGF0YXJpX3Njc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNjc2lfcmVtb3ZlX2hvc3QoaW5zdGFuY2UpOworCWlmIChJU19BX1RUKCkpCisJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKKwlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOworCXNjc2lfaG9zdF9wdXQoaW5zdGFuY2UpOworCWlmIChhdGFyaV9kbWFfYnVmZmVyKQorCQlhdGFyaV9zdHJhbV9mcmVlKGF0YXJpX2RtYV9idWZmZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdGFyaV9zY3NpX2RyaXZlciA9IHsKKwkucmVtb3ZlID0gX19leGl0X3AoYXRhcmlfc2NzaV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gRFJWX01PRFVMRV9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcl9wcm9iZShhdGFyaV9zY3NpX2RyaXZlciwgYXRhcmlfc2NzaV9wcm9iZSk7CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTU9EVUxFX05BTUUpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuaCBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOTlkOTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBhdGFyaV9zY3NpLmggLS0gSGVhZGVyIGZpbGUgZm9yIHRoZSBBdGFyaSBuYXRpdmUgU0NTSSBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgMTk5NCBSb21hbiBIb2RlayA8Um9tYW4uSG9kZWtAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0gKgotICogKExvb3NlbHkgYmFzZWQgb24gdGhlIHdvcmsgb2YgUm9iZXJ0IERlIFZyaWVzJyB0ZWFtKQotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotCi0jaWZuZGVmIEFUQVJJX1NDU0lfSAotI2RlZmluZSBBVEFSSV9TQ1NJX0gKLQotLyogKElfSEFWRV9PVkVSUlVOUyBzdHVmZiByZW1vdmVkKSAqLwotCi0jaWZuZGVmIEFTTQotLyogVGhlIHZhbHVlcyBmb3IgQ01EX1BFUl9MVU4gYW5kIENBTl9RVUVVRSBhcmUgc29tZWhvdyBhcmJpdHJhcnkuIEhpZ2hlcgotICogdmFsdWVzIHNob3VsZCB3b3JrLCB0b287IHRyeSBpdCEgKGJ1dCBjbWRfcGVyX2x1biBjb3N0cyBtZW1vcnkhKSAqLwotCi0vKiBCdXQgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgc29tZXdoZXJlIHRoYXQgcmVxdWlyZXMgQ0FOX1FVRVVFIHRvIGJlCi0gKiAyKkNNRF9QRVJfTFVOLiBBdCBsZWFzdCBvbiBhIFRULCBubyBzcHVyaW91cyB0aW1lb3V0cyBzZWVuIHNpbmNlCi0gKiBjaGFuZ2VkIENNRF9QRVJfTFVOLi4uICovCi0KLS8qIE5vdGU6IFRoZSBGYWxjb24gY3VycmVudGx5IHVzZXMgOC8xIHNldHRpbmcgZHVlIHRvIHVuc29sdmVkIHByb2JsZW1zIHdpdGgKLSAqIGNtZF9wZXJfbHVuICE9IDEgKi8KLQotI2RlZmluZSBBVEFSSV9UVF9DQU5fUVVFVUUJCTE2Ci0jZGVmaW5lIEFUQVJJX1RUX0NNRF9QRVJfTFVOCQk4Ci0jZGVmaW5lIEFUQVJJX1RUX1NHX1RBQkxFU0laRQkJU0dfQUxMCi0KLSNkZWZpbmUgQVRBUklfRkFMQ09OX0NBTl9RVUVVRQkJOAotI2RlZmluZSBBVEFSSV9GQUxDT05fQ01EX1BFUl9MVU4JMQotI2RlZmluZSBBVEFSSV9GQUxDT05fU0dfVEFCTEVTSVpFCVNHX05PTkUKLQotI2RlZmluZQlERUZBVUxUX1VTRV9UQUdHRURfUVVFVUlORwkwCi0KLQotI2RlZmluZQlOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcwkvKiBub25lICovCi0KLSNkZWZpbmUgTkNSNTM4MF9yZWFkKHJlZykJCSAgYXRhcmlfc2NzaV9yZWdfcmVhZCggcmVnICkKLSNkZWZpbmUgTkNSNTM4MF93cml0ZShyZWcsIHZhbHVlKSBhdGFyaV9zY3NpX3JlZ193cml0ZSggcmVnLCB2YWx1ZSApCi0KLSNkZWZpbmUgTkNSNTM4MF9pbnRyIGF0YXJpX3Njc2lfaW50cgotI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgYXRhcmlfc2NzaV9xdWV1ZV9jb21tYW5kCi0jZGVmaW5lIE5DUjUzODBfYWJvcnQgYXRhcmlfc2NzaV9hYm9ydAotI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyBhdGFyaV9zY3NpX3Nob3dfaW5mbwotI2RlZmluZSBOQ1I1MzgwX2RtYV9yZWFkX3NldHVwKGluc3QsZCxjKSBhdGFyaV9zY3NpX2RtYV9zZXR1cCAoaW5zdCwgZCwgYywgMCkKLSNkZWZpbmUgTkNSNTM4MF9kbWFfd3JpdGVfc2V0dXAoaW5zdCxkLGMpIGF0YXJpX3Njc2lfZG1hX3NldHVwIChpbnN0LCBkLCBjLCAxKQotI2RlZmluZSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0KSBhdGFyaV9zY3NpX2RtYV9yZXNpZHVhbCggaW5zdCApCi0jZGVmaW5lCU5DUjUzODBfZG1hX3hmZXJfbGVuKGksY21kLHBoYXNlKSBcCi0JYXRhcmlfZG1hX3hmZXJfbGVuKGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwsY21kLCgocGhhc2UpICYgU1JfSU8pID8gMCA6IDEpCi0KLSNlbmRpZiAvKiBuZGVmIEFTTSAqLwotI2VuZGlmIC8qIEFUQVJJX1NDU0lfSCAqLwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCmluZGV4IDMwZDc0YTAuLmYzMTkzNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYwpAQCAtNTU2LDcgKzU1Niw3IEBACiAJLm5hbWUgPSAiRW11bGV4IDEwR2JlIG9wZW4taXNjc2kgSW5pdGlhdG9yIERyaXZlciIsCiAJLnByb2NfbmFtZSA9IERSVl9OQU1FLAogCS5xdWV1ZWNvbW1hbmQgPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLnNsYXZlX2NvbmZpZ3VyZSA9IGJlaXNjc2lfc2xhdmVfY29uZmlndXJlLAogCS50YXJnZXRfYWxsb2MgPSBpc2NzaV90YXJnZXRfYWxsb2MsCiAJLmVoX2Fib3J0X2hhbmRsZXIgPSBiZWlzY3NpX2VoX2Fib3J0LApAQCAtNTcwLDcgKzU3MCw3IEBACiAJLmNtZF9wZXJfbHVuID0gQkVJU0NTSV9DTURfUEVSX0xVTiwKIAkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKIAkudmVuZG9yX2lkID0gU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBCRV9WRU5ET1JfSUQsCi0KKwkudHJhY2tfcXVldWVfZGVwdGggPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqYmVpc2NzaV9zY3NpX3RyYW5zcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jCmluZGV4IDhlODNkMDQuLjc0YTMwN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2RlYnVnZnMuYwpAQCAtMjYwLDE4ICsyNjAsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCAqa2Vybl9idWY7CiAKLQlrZXJuX2J1ZiA9IGt6YWxsb2MobmJ5dGVzLCBHRlBfS0VSTkVMKTsKLQotCWlmICgha2Vybl9idWYpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYmZhZFslZF06IEZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXJcbiIsCi0JCQkJYmZhZC0+aW5zdF9ubyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWlmIChjb3B5X2Zyb21fdXNlcihrZXJuX2J1ZiwgKHZvaWQgIF9fdXNlciAqKWJ1ZiwgbmJ5dGVzKSkgewotCQlrZnJlZShrZXJuX2J1Zik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlrZXJuX2J1ZiA9IG1lbWR1cF91c2VyKGJ1ZiwgbmJ5dGVzKTsKKwlpZiAoSVNfRVJSKGtlcm5fYnVmKSkKKwkJcmV0dXJuIFBUUl9FUlIoa2Vybl9idWYpOwogCiAJcmMgPSBzc2NhbmYoa2Vybl9idWYsICIleDoleCIsICZhZGRyLCAmbGVuKTsKIAlpZiAocmMgPCAyKSB7CkBAIC0zMzYsMTggKzMyNyw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICprZXJuX2J1ZjsKIAotCWtlcm5fYnVmID0ga3phbGxvYyhuYnl0ZXMsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFrZXJuX2J1ZikgewotCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlclxuIiwKLQkJCQliZmFkLT5pbnN0X25vKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGtlcm5fYnVmLCAodm9pZCAgX191c2VyICopYnVmLCBuYnl0ZXMpKSB7Ci0JCWtmcmVlKGtlcm5fYnVmKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWtlcm5fYnVmID0gbWVtZHVwX3VzZXIoYnVmLCBuYnl0ZXMpOworCWlmIChJU19FUlIoa2Vybl9idWYpKQorCQlyZXR1cm4gUFRSX0VSUihrZXJuX2J1Zik7CiAKIAlyYyA9IHNzY2FuZihrZXJuX2J1ZiwgIiV4OiV4IiwgJmFkZHIsICZ2YWwpOwogCWlmIChyYyA8IDIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMKaW5kZXggZjA2NzMzMi4uNzIyM2IwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMKQEAgLTc3NiwxMSArNzc2LDcgQEAKIHN0YXRpYyBpbnQKIGJmYWRfaW1fc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgYmZhX2x1bl9xdWV1ZV9kZXB0aCk7Ci0JZWxzZQotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIGJmYV9sdW5fcXVldWVfZGVwdGgpOwotCisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgYmZhX2x1bl9xdWV1ZV9kZXB0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgwNCw2ICs4MDAsNyBAQAogCS5zaG9zdF9hdHRycyA9IGJmYWRfaW1faG9zdF9hdHRycywKIAkubWF4X3NlY3RvcnMgPSBCRkFEX01BWF9TRUNUT1JTLAogCS52ZW5kb3JfaWQgPSBCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLAorCS51c2VfYmxrX3RhZ3MgPSAxLAogfTsKIAogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZmFkX2ltX3Zwb3J0X3RlbXBsYXRlID0gewpAQCAtODI1LDYgKzgyMiw3IEBACiAJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzID0gYmZhZF9pbV92cG9ydF9hdHRycywKIAkubWF4X3NlY3RvcnMgPSBCRkFEX01BWF9TRUNUT1JTLAorCS51c2VfYmxrX3RhZ3MgPSAxLAogfTsKIAogYmZhX3N0YXR1c190CkBAIC04NjgsMTQgKzg2Niw4IEBACiAJCQlpZiAoYmZhX2x1bl9xdWV1ZV9kZXB0aCA+IHRtcF9zZGV2LT5xdWV1ZV9kZXB0aCkgewogCQkJCWlmICh0bXBfc2Rldi0+aWQgIT0gc2Rldi0+aWQpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmICh0bXBfc2Rldi0+b3JkZXJlZF90YWdzKQotCQkJCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCh0bXBfc2RldiwKLQkJCQkJCU1TR19PUkRFUkVEX1RBRywKLQkJCQkJCXRtcF9zZGV2LT5xdWV1ZV9kZXB0aCArIDEpOwotCQkJCWVsc2UKLQkJCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgodG1wX3NkZXYsCi0JCQkJCQlNU0dfU0lNUExFX1RBRywKLQkJCQkJCXRtcF9zZGV2LT5xdWV1ZV9kZXB0aCArIDEpOworCQkJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHRtcF9zZGV2LAorCQkJCQl0bXBfc2Rldi0+cXVldWVfZGVwdGggKyAxKTsKIAogCQkJCWl0bmltLT5sYXN0X3JhbXBfdXBfdGltZSA9IGppZmZpZXM7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCmluZGV4IGNhNzVjN2MuLmVmMzU1YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCkBAIC00ODAsOSArNDgwLDcgQEAKIAkJCWJueDJmY19pbml0aWF0ZV9jbGVhbnVwKG9yaWdfaW9fcmVxKTsKIAkJCS8qIFBvc3QgYSBuZXcgSU8gcmVxIHdpdGggdGhlIHNhbWUgc2NfY21kICovCiAJCQlCTlgyRkNfSU9fREJHKHJlY19yZXEsICJQb3N0IElPIHJlcXVlc3QgYWdhaW5cbiIpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOwogCQkJcmMgPSBibngyZmNfcG9zdF9pb19yZXEodGd0LCBuZXdfaW9fcmVxKTsKLQkJCXNwaW5fbG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CiAJCQlpZiAoIXJjKQogCQkJCWdvdG8gZnJlZV9mcmFtZTsKIAkJCUJOWDJGQ19JT19EQkcocmVjX3JlcSwgIlJFQzogaW8gcG9zdCBlcnJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jCmluZGV4IDc5ZTVjOTQuLmU4NjFmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMKQEAgLTQxMiw2ICs0MTIsNyBAQAogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwogCXN0cnVjdCBmY29lX3Jjdl9pbmZvICpmcjsKIAlzdHJ1Y3QgZmNvZV9wZXJjcHVfcyAqYmc7CisJc3RydWN0IHNrX2J1ZmYgKnRtcF9za2I7CiAJdW5zaWduZWQgc2hvcnQgb3hpZDsKIAogCWludGVyZmFjZSA9IGNvbnRhaW5lcl9vZihwdHlwZSwgc3RydWN0IGJueDJmY19pbnRlcmZhY2UsCkBAIC00MjQsNiArNDI1LDEyIEBACiAJCWdvdG8gZXJyOwogCX0KIAorCXRtcF9za2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXRtcF9za2IpCisJCWdvdG8gZXJyOworCisJc2tiID0gdG1wX3NrYjsKKwogCWlmICh1bmxpa2VseShldGhfaGRyKHNrYiktPmhfcHJvdG8gIT0gaHRvbnMoRVRIX1BfRkNPRSkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImJueDJmY19yY3Y6IFdyb25nIEZDIHR5cGUgZnJhbWVcbiIpOwogCQlnb3RvIGVycjsKQEAgLTEwODEsNyArMTA4OCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZibngyZmNfZGV2X2xvY2spOwogCXJ0bmxfdW5sb2NrKCk7CiAKLQlpZiAoSVNfRVJSKHZuX3BvcnQpKSB7CisJaWYgKCF2bl9wb3J0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImJueDJmY192cG9ydF9jcmVhdGUgKCVzKSBmYWlsZWRcbiIsCiAJCQluZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTIxOTUsNiArMjIwMiw3IEBACiAJaW50ZXJmYWNlID0gYm54MmZjX2ludGVyZmFjZV9jcmVhdGUoaGJhLCBuZXRkZXYsIGZpcF9tb2RlKTsKIAlpZiAoIWludGVyZmFjZSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJibngyZmNfaW50ZXJmYWNlX2NyZWF0ZSBmYWlsZWRcbiIpOworCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gaWZwdXRfZXJyOwogCX0KIApAQCAtMjc4MywxMyArMjc5MSwxNSBAQAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IGJueDJmY19laF90YXJnZXRfcmVzZXQsIC8qIHRndCByZXNldCAqLwogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSBmY19laF9ob3N0X3Jlc2V0LAogCS5zbGF2ZV9hbGxvYwkJPSBmY19zbGF2ZV9hbGxvYywKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gZmNfY2hhbmdlX3F1ZXVlX2RlcHRoLAotCS5jaGFuZ2VfcXVldWVfdHlwZQk9IGZjX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlLAogCS50aGlzX2lkCQk9IC0xLAogCS5jbWRfcGVyX2x1bgkJPSAzLAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2dfdGFibGVzaXplCQk9IEJOWDJGQ19NQVhfQkRTX1BFUl9DTUQsCiAJLm1heF9zZWN0b3JzCQk9IDEwMjQsCisJLnVzZV9ibGtfdGFncwkJPSAxLAorCS50cmFja19xdWV1ZV9kZXB0aAk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGxpYmZjX2Z1bmN0aW9uX3RlbXBsYXRlIGJueDJmY19saWJmY19mY25fdGVtcGwgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYwppbmRleCAwNjc5NzgyLi40YjU2ODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2lvLmMKQEAgLTE3MjUsNyArMTcyNSw2IEBACiAJCQkJICBzdHJ1Y3QgZmNwX2NtbmQgKmZjcF9jbW5kKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKnNjX2NtZCA9IGlvX3JlcS0+c2NfY21kOwotCWNoYXIgdGFnWzJdOwogCiAJbWVtc2V0KGZjcF9jbW5kLCAwLCBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSk7CiAKQEAgLTE3MzksMjEgKzE3MzgsMTAgQEAKIAlmY3BfY21uZC0+ZmNfdG1fZmxhZ3MgPSBpb19yZXEtPm1wX3JlcS50bV9mbGFnczsKIAlmY3BfY21uZC0+ZmNfZmxhZ3MgPSBpb19yZXEtPmlvX3JlcV9mbGFnczsKIAotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coc2NfY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQlmY3BfY21uZC0+ZmNfcHJpX3RhID0gRkNQX1BUQV9IRUFEUTsKLQkJCWJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJZmNwX2NtbmQtPmZjX3ByaV90YSA9IEZDUF9QVEFfT1JERVJFRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZmNwX2NtbmQtPmZjX3ByaV90YSA9IEZDUF9QVEFfU0lNUExFOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgeworCWlmIChzY19jbWQtPmZsYWdzICYgU0NNRF9UQUdHRUQpCisJCWZjcF9jbW5kLT5mY19wcmlfdGEgPSBGQ1BfUFRBX1NJTVBMRTsKKwllbHNlCiAJCWZjcF9jbW5kLT5mY19wcmlfdGEgPSAwOwotCX0KIH0KIAogc3RhdGljIHZvaWQgYm54MmZjX3BhcnNlX2ZjcF9yc3Aoc3RydWN0IGJueDJmY19jbWQgKmlvX3JlcSwKQEAgLTE4OTQsMTggKzE4ODIsMjQgQEAKIAkJCWdvdG8gZXhpdF9xY21kOwogCQl9CiAJfQorCisJc3Bpbl9sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKKwogCWlvX3JlcSA9IGJueDJmY19jbWRfYWxsb2ModGd0KTsKIAlpZiAoIWlvX3JlcSkgewogCQlyYyA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0JCWdvdG8gZXhpdF9xY21kOworCQlnb3RvIGV4aXRfcWNtZF90Z3Rsb2NrOwogCX0KIAlpb19yZXEtPnNjX2NtZCA9IHNjX2NtZDsKIAogCWlmIChibngyZmNfcG9zdF9pb19yZXEodGd0LCBpb19yZXEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byBwb3N0IGlvX3JlcVxuIik7CiAJCXJjID0gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQkJZ290byBleGl0X3FjbWQ7CisJCWdvdG8gZXhpdF9xY21kX3RndGxvY2s7CiAJfQorCitleGl0X3FjbWRfdGd0bG9jazoKKwlzcGluX3VubG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CiBleGl0X3FjbWQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtMjAyMCw2ICsyMDE0LDggQEAKIAlpbnQgdGFza19pZHgsIGluZGV4OwogCXUxNiB4aWQ7CiAKKwkvKiBibngyZmNfcG9zdF9pb19yZXEoKSBpcyBjYWxsZWQgd2l0aCB0aGUgdGd0X2xvY2sgaGVsZCAqLworCiAJLyogSW5pdGlhbGl6ZSByZXN0IG9mIGlvX3JlcSBmaWVsZHMgKi8KIAlpb19yZXEtPmNtZF90eXBlID0gQk5YMkZDX1NDU0lfQ01EOwogCWlvX3JlcS0+cG9ydCA9IHBvcnQ7CkBAIC0yMDQ3LDkgKzIwNDMsNyBAQAogCS8qIEJ1aWxkIGJ1ZmZlciBkZXNjcmlwdG9yIGxpc3QgZm9yIGZpcm13YXJlIGZyb20gc2cgbGlzdCAqLwogCWlmIChibngyZmNfYnVpbGRfYmRfbGlzdF9mcm9tX3NnKGlvX3JlcSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQkQgbGlzdCBjcmVhdGlvbiBmYWlsZWRcbiIpOwotCQlzcGluX2xvY2tfYmgoJnRndC0+dGd0X2xvY2spOwogCQlrcmVmX3B1dCgmaW9fcmVxLT5yZWZjb3VudCwgYm54MmZjX2NtZF9yZWxlYXNlKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKQEAgLTIwNjEsMTkgKzIwNTUsMTUgQEAKIAl0YXNrID0gJih0YXNrX3BhZ2VbaW5kZXhdKTsKIAlibngyZmNfaW5pdF90YXNrKGlvX3JlcSwgdGFzayk7CiAKLQlzcGluX2xvY2tfYmgoJnRndC0+dGd0X2xvY2spOwotCiAJaWYgKHRndC0+Zmx1c2hfaW5fcHJvZykgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJGbHVzaCBpbiBwcm9ncmVzcy4uSG9zdCBCdXN5XG4iKTsKIAkJa3JlZl9wdXQoJmlvX3JlcS0+cmVmY291bnQsIGJueDJmY19jbWRfcmVsZWFzZSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJaWYgKCF0ZXN0X2JpdChCTlgyRkNfRkxBR19TRVNTSU9OX1JFQURZLCAmdGd0LT5mbGFncykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU2Vzc2lvbiBub3QgcmVhZHkuLi5wb3N0X2lvXG4iKTsKIAkJa3JlZl9wdXQoJmlvX3JlcS0+cmVmY291bnQsIGJueDJmY19jbWRfcmVsZWFzZSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC0yMDkxLDYgKzIwODEsNSBAQAogCiAJLyogUmluZyBkb29yYmVsbCAqLwogCWJueDJmY19yaW5nX2Rvb3JiZWxsKHRndCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwppbmRleCA3YTM2Mzg4Li5lNTMwNzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwpAQCAtMjI1OSw3ICsyMjU5LDcgQEAKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX2RldmljZV9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSBpc2NzaV9laF9yZWNvdmVyX3RhcmdldCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkudGFyZ2V0X2FsbG9jCQk9IGlzY3NpX3RhcmdldF9hbGxvYywKIAkuY2FuX3F1ZXVlCQk9IDIwNDgsCiAJLm1heF9zZWN0b3JzCQk9IDEyNywKQEAgLTIyNjgsNiArMjI2OCw3IEBACiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zZ190YWJsZXNpemUJCT0gSVNDU0lfTUFYX0JEU19QRVJfQ01ELAogCS5zaG9zdF9hdHRycwkJPSBibngyaV9kZXZfYXR0cmlidXRlcywKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBibngyaV9pc2NzaV90cmFuc3BvcnQgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY2guYyBiL2RyaXZlcnMvc2NzaS9jaC5jCmluZGV4IGVmNWFlMGQuLjZiYWM4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jaC5jCkBAIC04NSw4ICs4NSw3IEBACiAvLyBtb2R1bGVfcGFyYW1fc3RyaW5nX2FycmF5KHZlbmRvcl9sYWJlbHMsIE5VTEwsIDA0NDQpOwogCiAjZGVmaW5lIGNoX3ByaW50ayhwcmVmaXgsIGNoLCBmbXQsIGEuLi4pIFwKLQlzZGV2X3ByaW50ayhwcmVmaXgsIChjaCktPmRldmljZSwgIlslc10gIiBmbXQsIFwKLQkJICAgIChjaCktPm5hbWUsICMjYSkKKwlzZGV2X3ByZWZpeF9wcmludGsocHJlZml4LCAoY2gpLT5kZXZpY2UsIChjaCktPm5hbWUsIGZtdCwgIyNhKQogCiAjZGVmaW5lIERQUklOVEsoZm10LCBhcmcuLi4pCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKQEAgLTE4Myw3ICsxODIsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1jaF9kb19zY3NpKHNjc2lfY2hhbmdlciAqY2gsIHVuc2lnbmVkIGNoYXIgKmNtZCwKK2NoX2RvX3Njc2koc2NzaV9jaGFuZ2VyICpjaCwgdW5zaWduZWQgY2hhciAqY21kLCBpbnQgY21kX2xlbiwKIAkgICB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGJ1Zmxlbmd0aCwKIAkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CkBAIC0xOTcsNyArMTk2LDcgQEAKIAllcnJubyA9IDA7CiAJaWYgKGRlYnVnKSB7CiAJCURQUklOVEsoImNvbW1hbmQ6ICIpOwotCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjbWQpOworCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjbWQsIGNtZF9sZW4pOwogCX0KIAogCXJlc3VsdCA9IHNjc2lfZXhlY3V0ZV9yZXEoY2gtPmRldmljZSwgY21kLCBkaXJlY3Rpb24sIGJ1ZmZlciwKQEAgLTIwNyw3ICsyMDYsNyBAQAogCURQUklOVEsoInJlc3VsdDogMHgleFxuIixyZXN1bHQpOwogCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKSB7CiAJCWlmIChkZWJ1ZykKLQkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNoLT5uYW1lLCAmc3NoZHIpOworCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoY2gtPmRldmljZSwgY2gtPm5hbWUsICZzc2hkcik7CiAJCWVycm5vID0gY2hfZmluZF9lcnJubygmc3NoZHIpOwogCiAJCXN3aXRjaChzc2hkci5zZW5zZV9rZXkpIHsKQEAgLTI1OCw3ICsyNTcsOCBAQAogCWNtZFszXSA9IGVsZW0gICAgICAgICYgMHhmZjsKIAljbWRbNV0gPSAxOwogCWNtZFs5XSA9IDI1NTsKLQlpZiAoMCA9PSAocmVzdWx0ID0gY2hfZG9fc2NzaShjaCwgY21kLCBidWZmZXIsIDI1NiwgRE1BX0ZST01fREVWSUNFKSkpIHsKKwlpZiAoMCA9PSAocmVzdWx0ID0gY2hfZG9fc2NzaShjaCwgY21kLCAxMiwKKwkJCQkgICAgICBidWZmZXIsIDI1NiwgRE1BX0ZST01fREVWSUNFKSkpIHsKIAkJaWYgKCgoYnVmZmVyWzE2XSA8PCA4KSB8IGJ1ZmZlclsxN10pICE9IGVsZW0pIHsKIAkJCURQUklOVEsoImFza2VkIGZvciBlbGVtZW50IDB4JTAyeCwgZ290IDB4JTAyeFxuIiwKIAkJCQllbGVtLChidWZmZXJbMTZdIDw8IDgpIHwgYnVmZmVyWzE3XSk7CkBAIC0yODgsNyArMjg4LDcgQEAKIAltZW1zZXQoY21kLDAsc2l6ZW9mKGNtZCkpOwogCWNtZFswXSA9IElOSVRJQUxJWkVfRUxFTUVOVF9TVEFUVVM7CiAJY21kWzFdID0gKGNoLT5kZXZpY2UtPmx1biAmIDB4NykgPDwgNTsKLQllcnIgPSBjaF9kb19zY3NpKGNoLCBjbWQsIE5VTEwsIDAsIERNQV9OT05FKTsKKwllcnIgPSBjaF9kb19zY3NpKGNoLCBjbWQsIDYsIE5VTEwsIDAsIERNQV9OT05FKTsKIAlWUFJJTlRLKEtFUk5fSU5GTywgIi4uLiBmaW5pc2hlZFxuIik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTMxMCwxMCArMzEwLDEwIEBACiAJY21kWzFdID0gKGNoLT5kZXZpY2UtPmx1biAmIDB4NykgPDwgNTsKIAljbWRbMl0gPSAweDFkOwogCWNtZFs0XSA9IDI1NTsKLQlyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjbWQsIGJ1ZmZlciwgMjU1LCBETUFfRlJPTV9ERVZJQ0UpOworCXJlc3VsdCA9IGNoX2RvX3Njc2koY2gsIGNtZCwgMTAsIGJ1ZmZlciwgMjU1LCBETUFfRlJPTV9ERVZJQ0UpOwogCWlmICgwICE9IHJlc3VsdCkgewogCQljbWRbMV0gfD0gKDE8PDMpOwotCQlyZXN1bHQgID0gY2hfZG9fc2NzaShjaCwgY21kLCBidWZmZXIsIDI1NSwgRE1BX0ZST01fREVWSUNFKTsKKwkJcmVzdWx0ICA9IGNoX2RvX3Njc2koY2gsIGNtZCwgMTAsIGJ1ZmZlciwgMjU1LCBETUFfRlJPTV9ERVZJQ0UpOwogCX0KIAlpZiAoMCA9PSByZXN1bHQpIHsKIAkJY2gtPmZpcnN0c1tDSEVUX01UXSA9CkBAIC00MzgsNyArNDM4LDcgQEAKIAljbWRbNF0gID0gKGVsZW0gID4+IDgpICYgMHhmZjsKIAljbWRbNV0gID0gIGVsZW0gICAgICAgICYgMHhmZjsKIAljbWRbOF0gID0gcm90YXRlID8gMSA6IDA7Ci0JcmV0dXJuIGNoX2RvX3Njc2koY2gsIGNtZCwgTlVMTCwgMCwgRE1BX05PTkUpOworCXJldHVybiBjaF9kb19zY3NpKGNoLCBjbWQsIDEwLCBOVUxMLCAwLCBETUFfTk9ORSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQ1OSw3ICs0NTksNyBAQAogCWNtZFs2XSAgPSAoZGVzdCAgPj4gOCkgJiAweGZmOwogCWNtZFs3XSAgPSAgZGVzdCAgICAgICAgJiAweGZmOwogCWNtZFsxMF0gPSByb3RhdGUgPyAxIDogMDsKLQlyZXR1cm4gY2hfZG9fc2NzaShjaCwgY21kLCBOVUxMLDAsIERNQV9OT05FKTsKKwlyZXR1cm4gY2hfZG9fc2NzaShjaCwgY21kLCAxMiwgTlVMTCwwLCBETUFfTk9ORSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCWNtZFs5XSAgPSAgZGVzdDIgICAgICAgJiAweGZmOwogCWNtZFsxMF0gPSAocm90YXRlMSA/IDEgOiAwKSB8IChyb3RhdGUyID8gMiA6IDApOwogCi0JcmV0dXJuIGNoX2RvX3Njc2koY2gsIGNtZCwgTlVMTCwwLCBETUFfTk9ORSk7CisJcmV0dXJuIGNoX2RvX3Njc2koY2gsIGNtZCwgMTIsIE5VTEwsIDAsIERNQV9OT05FKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTUzNSw3ICs1MzUsNyBAQAogCW1lbWNweShidWZmZXIsdGFnLDMyKTsKIAljaF9jaGVja192b2x0YWcoYnVmZmVyKTsKIAotCXJlc3VsdCA9IGNoX2RvX3Njc2koY2gsIGNtZCwgYnVmZmVyLCAyNTYsIERNQV9UT19ERVZJQ0UpOworCXJlc3VsdCA9IGNoX2RvX3Njc2koY2gsIGNtZCwgMTIsIGJ1ZmZlciwgMjU2LCBETUFfVE9fREVWSUNFKTsKIAlrZnJlZShidWZmZXIpOwogCXJldHVybiByZXN1bHQ7CiB9CkBAIC02MTYsNiArNjE2LDExIEBACiAJaW50IHJldHZhbDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAorCXJldHZhbCA9IHNjc2lfaW9jdGxfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhjaC0+ZGV2aWNlLCBjbWQsCisJCQlmaWxlLT5mX2ZsYWdzICYgT19OREVMQVkpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQ0hJT0dQQVJBTVM6CiAJewpAQCAtNzY2LDcgKzc3MSw4IEBACiAJCWNoX2NtZFs1XSA9IDE7CiAJCWNoX2NtZFs5XSA9IDI1NTsKIAotCQlyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjaF9jbWQsIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpOworCQlyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjaF9jbWQsIDEyLAorCQkJCSAgICBidWZmZXIsIDI1NiwgRE1BX0ZST01fREVWSUNFKTsKIAkJaWYgKCFyZXN1bHQpIHsKIAkJCWNnZS5jZ2Vfc3RhdHVzID0gYnVmZmVyWzE4XTsKIAkJCWNnZS5jZ2VfZmxhZ3MgPSAwOwpAQCAtOTY2LDkgKzk3Miw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kcml2ZXIgY2hfdGVtcGxhdGUgPSB7Ci0JLm93bmVyICAgICAJPSBUSElTX01PRFVMRSwKIAkuZ2VuZHJ2ICAgICAJPSB7CiAJCS5uYW1lCT0gImNoIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5wcm9iZSAgPSBjaF9wcm9iZSwKIAkJLnJlbW92ZSA9IGNoX3JlbW92ZSwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCmluZGV4IGQzNWE1ZDYuLmUyMDY4YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYworKysgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKQEAgLTIxLDE1ICsyMSwyMSBAQAogCiAKIC8qIENvbW1hbmRzIHdpdGggc2VydmljZSBhY3Rpb25zIHRoYXQgY2hhbmdlIHRoZSBjb21tYW5kIG5hbWUgKi8KLSNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU5fMTIgMHhhYgotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9PVVRfMTIgMHhhOQotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9CSURJUkVDVElPTkFMIDB4OWQKLSNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU5fMTYgMHg5ZQotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9PVVRfMTYgMHg5ZgogI2RlZmluZSBUSElSRF9QQVJUWV9DT1BZX09VVCAweDgzCiAjZGVmaW5lIFRISVJEX1BBUlRZX0NPUFlfSU4gMHg4NAogCisjZGVmaW5lIFZFTkRPUl9TUEVDSUZJQ19DREIgMHhjMAogCitzdHJ1Y3Qgc2FfbmFtZV9saXN0IHsKKwlpbnQgb3Bjb2RlOworCWNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgKmFycjsKKwlpbnQgYXJyX3N6OworfTsKKworc3RydWN0IHZhbHVlX25hbWVfcGFpciB7CisJaW50IHZhbHVlOworCWNvbnN0IGNoYXIgKiBuYW1lOworfTsKIAogI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwogc3RhdGljIGNvbnN0IGNoYXIgKiBjZGJfYnl0ZTBfbmFtZXNbXSA9IHsKQEAgLTEwMiwxMSArMTA4LDYgQEAKICAgICAgICAgICAgICJWb2x1bWUgc2V0IChvdXQpLCBTZW5kIERWRCBzdHJ1Y3R1cmUiLAogfTsKIAotc3RydWN0IHZhbHVlX25hbWVfcGFpciB7Ci0JaW50IHZhbHVlOwotCWNvbnN0IGNoYXIgKiBuYW1lOwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgbWFpbnRfaW5fYXJyW10gPSB7CiAJezB4NSwgIlJlcG9ydCBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiJ9LAogCXsweGEsICJSZXBvcnQgdGFyZ2V0IHBvcnQgZ3JvdXBzIn0sCkBAIC0yNDQsMTcwICsyNDUsMTE5IEBACiB9OwogI2RlZmluZSBWQVJJQUJMRV9MRU5HVEhfU1ogQVJSQVlfU0laRSh2YXJpYWJsZV9sZW5ndGhfYXJyKQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGdldF9zYV9uYW1lKGNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgKiBhcnIsCi0JCQkgICAgICAgIGludCBhcnJfc3osIGludCBzZXJ2aWNlX2FjdGlvbikKK3N0YXRpYyBzdHJ1Y3Qgc2FfbmFtZV9saXN0IHNhX25hbWVzX2FycltdID0geworCXtWQVJJQUJMRV9MRU5HVEhfQ01ELCB2YXJpYWJsZV9sZW5ndGhfYXJyLCBWQVJJQUJMRV9MRU5HVEhfU1p9LAorCXtNQUlOVEVOQU5DRV9JTiwgbWFpbnRfaW5fYXJyLCBNQUlOVF9JTl9TWn0sCisJe01BSU5URU5BTkNFX09VVCwgbWFpbnRfb3V0X2FyciwgTUFJTlRfT1VUX1NafSwKKwl7UEVSU0lTVEVOVF9SRVNFUlZFX0lOLCBwcl9pbl9hcnIsIFBSX0lOX1NafSwKKwl7UEVSU0lTVEVOVF9SRVNFUlZFX09VVCwgcHJfb3V0X2FyciwgUFJfT1VUX1NafSwKKwl7U0VSVklDRV9BQ1RJT05fSU5fMTIsIHNlcnZfaW4xMl9hcnIsIFNFUlZfSU4xMl9TWn0sCisJe1NFUlZJQ0VfQUNUSU9OX09VVF8xMiwgc2Vydl9vdXQxMl9hcnIsIFNFUlZfT1VUMTJfU1p9LAorCXtTRVJWSUNFX0FDVElPTl9CSURJUkVDVElPTkFMLCBzZXJ2X2JpZGlfYXJyLCBTRVJWX0JJRElfU1p9LAorCXtTRVJWSUNFX0FDVElPTl9JTl8xNiwgc2Vydl9pbjE2X2FyciwgU0VSVl9JTjE2X1NafSwKKwl7U0VSVklDRV9BQ1RJT05fT1VUXzE2LCBzZXJ2X291dDE2X2FyciwgU0VSVl9PVVQxNl9TWn0sCisJe1RISVJEX1BBUlRZX0NPUFlfSU4sIHRwY19pbl9hcnIsIFRQQ19JTl9TWn0sCisJe1RISVJEX1BBUlRZX0NPUFlfT1VULCB0cGNfb3V0X2FyciwgVFBDX09VVF9TWn0sCisJezAsIE5VTEwsIDB9LAorfTsKKworI2Vsc2UgLyogaWZuZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNkYl9ieXRlMF9uYW1lc1swXTsKKworc3RhdGljIHN0cnVjdCBzYV9uYW1lX2xpc3Qgc2FfbmFtZXNfYXJyW10gPSB7CisJe1ZBUklBQkxFX0xFTkdUSF9DTUQsIE5VTEwsIDB9LAorCXtNQUlOVEVOQU5DRV9JTiwgTlVMTCwgMH0sCisJe01BSU5URU5BTkNFX09VVCwgTlVMTCwgMH0sCisJe1BFUlNJU1RFTlRfUkVTRVJWRV9JTiwgTlVMTCwgMH0sCisJe1BFUlNJU1RFTlRfUkVTRVJWRV9PVVQsIE5VTEwsIDB9LAorCXtTRVJWSUNFX0FDVElPTl9JTl8xMiwgTlVMTCwgMH0sCisJe1NFUlZJQ0VfQUNUSU9OX09VVF8xMiwgTlVMTCwgMH0sCisJe1NFUlZJQ0VfQUNUSU9OX0JJRElSRUNUSU9OQUwsIE5VTEwsIDB9LAorCXtTRVJWSUNFX0FDVElPTl9JTl8xNiwgTlVMTCwgMH0sCisJe1NFUlZJQ0VfQUNUSU9OX09VVF8xNiwgTlVMTCwgMH0sCisJe1RISVJEX1BBUlRZX0NPUFlfSU4sIE5VTEwsIDB9LAorCXtUSElSRF9QQVJUWV9DT1BZX09VVCwgTlVMTCwgMH0sCisJezAsIE5VTEwsIDB9LAorfTsKKyNlbmRpZiAvKiBDT05GSUdfU0NTSV9DT05TVEFOVFMgKi8KKworc3RhdGljIGJvb2wgc2NzaV9vcGNvZGVfc2FfbmFtZShpbnQgb3Bjb2RlLCBpbnQgc2VydmljZV9hY3Rpb24sCisJCQkJY29uc3QgY2hhciAqKmNkYl9uYW1lLCBjb25zdCBjaGFyICoqc2FfbmFtZSkKIHsKLQlpbnQgazsKKwlzdHJ1Y3Qgc2FfbmFtZV9saXN0ICpzYV9uYW1lX3B0cjsKKwljb25zdCBzdHJ1Y3QgdmFsdWVfbmFtZV9wYWlyICphcnIgPSBOVUxMOworCWludCBhcnJfc3osIGs7CisKKwkqY2RiX25hbWUgPSBOVUxMOworCWlmIChvcGNvZGUgPj0gVkVORE9SX1NQRUNJRklDX0NEQikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKG9wY29kZSA8IEFSUkFZX1NJWkUoY2RiX2J5dGUwX25hbWVzKSkKKwkJKmNkYl9uYW1lID0gY2RiX2J5dGUwX25hbWVzW29wY29kZV07CisKKwlmb3IgKHNhX25hbWVfcHRyID0gc2FfbmFtZXNfYXJyOyBzYV9uYW1lX3B0ci0+YXJyOyArK3NhX25hbWVfcHRyKSB7CisJCWlmIChzYV9uYW1lX3B0ci0+b3Bjb2RlID09IG9wY29kZSkgeworCQkJYXJyID0gc2FfbmFtZV9wdHItPmFycjsKKwkJCWFycl9zeiA9IHNhX25hbWVfcHRyLT5hcnJfc3o7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWFycikKKwkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChrID0gMDsgayA8IGFycl9zejsgKytrLCArK2FycikgewogCQlpZiAoc2VydmljZV9hY3Rpb24gPT0gYXJyLT52YWx1ZSkKIAkJCWJyZWFrOwogCX0KLQlyZXR1cm4gKGsgPCBhcnJfc3opID8gYXJyLT5uYW1lIDogTlVMTDsKKwlpZiAoayA8IGFycl9zeikKKwkJKnNhX25hbWUgPSBhcnItPm5hbWU7CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogYXR0ZW1wdCB0byBndWVzcyBjZGIgbGVuZ3RoIGlmIGNkYl9sZW49PTAgLiBObyB0cmFpbGluZyBsaW5lZmVlZC4gKi8KLXN0YXRpYyB2b2lkIHByaW50X29wY29kZV9uYW1lKHVuc2lnbmVkIGNoYXIgKiBjZGJwLCBpbnQgY2RiX2xlbikKK3N0YXRpYyB2b2lkIHByaW50X29wY29kZV9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNkYnAsIHNpemVfdCBjZGJfbGVuKQogewotCWludCBzYSwgbGVuLCBjZGIwOwotCWludCBmaW5fbmFtZSA9IDA7Ci0JY29uc3QgY2hhciAqIG5hbWU7CisJaW50IHNhLCBjZGIwOworCWNvbnN0IGNoYXIgKmNkYl9uYW1lID0gTlVMTCwgKnNhX25hbWUgPSBOVUxMOwogCiAJY2RiMCA9IGNkYnBbMF07Ci0Jc3dpdGNoKGNkYjApIHsKLQljYXNlIFZBUklBQkxFX0xFTkdUSF9DTUQ6Ci0JCWxlbiA9IHNjc2lfdmFybGVuX2NkYl9sZW5ndGgoY2RicCk7Ci0JCWlmIChsZW4gPCAxMCkgewotCQkJcHJpbnRrKCJzaG9ydCB2YXJpYWJsZSBsZW5ndGggY29tbWFuZCwgIgotCQkJICAgICAgICJsZW49JWQgZXh0X2xlbj0lZCIsIGxlbiwgY2RiX2xlbik7Ci0JCQlicmVhazsKKwlpZiAoY2RiMCA9PSBWQVJJQUJMRV9MRU5HVEhfQ01EKSB7CisJCWlmIChjZGJfbGVuIDwgMTApIHsKKwkJCXByaW50aygic2hvcnQgdmFyaWFibGUgbGVuZ3RoIGNvbW1hbmQsIGxlbj0lenUiLAorCQkJICAgICAgIGNkYl9sZW4pOworCQkJcmV0dXJuOwogCQl9CiAJCXNhID0gKGNkYnBbOF0gPDwgOCkgKyBjZGJwWzldOwotCQluYW1lID0gZ2V0X3NhX25hbWUodmFyaWFibGVfbGVuZ3RoX2FyciwgVkFSSUFCTEVfTEVOR1RIX1NaLAotCQkJCSAgIHNhKTsKLQkJaWYgKG5hbWUpCi0JCQlwcmludGsoIiVzIiwgbmFtZSk7Ci0JCWVsc2UKLQkJCXByaW50aygiY2RiWzBdPTB4JXgsIHNhPTB4JXgiLCBjZGIwLCBzYSk7CisJfSBlbHNlCisJCXNhID0gY2RicFsxXSAmIDB4MWY7CiAKLQkJaWYgKChjZGJfbGVuID4gMCkgJiYgKGxlbiAhPSBjZGJfbGVuKSkKLQkJCXByaW50aygiLCBpbl9jZGJfbGVuPSVkLCBleHRfbGVuPSVkIiwgbGVuLCBjZGJfbGVuKTsKLQotCQlicmVhazsKLQljYXNlIE1BSU5URU5BTkNFX0lOOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQluYW1lID0gZ2V0X3NhX25hbWUobWFpbnRfaW5fYXJyLCBNQUlOVF9JTl9TWiwgc2EpOwotCQlmaW5fbmFtZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgTUFJTlRFTkFOQ0VfT1VUOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQluYW1lID0gZ2V0X3NhX25hbWUobWFpbnRfb3V0X2FyciwgTUFJTlRfT1VUX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBQRVJTSVNURU5UX1JFU0VSVkVfSU46Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShwcl9pbl9hcnIsIFBSX0lOX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBQRVJTSVNURU5UX1JFU0VSVkVfT1VUOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQluYW1lID0gZ2V0X3NhX25hbWUocHJfb3V0X2FyciwgUFJfT1VUX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xMjoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHNlcnZfaW4xMl9hcnIsIFNFUlZfSU4xMl9TWiwgc2EpOwotCQlmaW5fbmFtZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fT1VUXzEyOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQluYW1lID0gZ2V0X3NhX25hbWUoc2Vydl9vdXQxMl9hcnIsIFNFUlZfT1VUMTJfU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0JJRElSRUNUSU9OQUw6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShzZXJ2X2JpZGlfYXJyLCBTRVJWX0JJRElfU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQluYW1lID0gZ2V0X3NhX25hbWUoc2Vydl9pbjE2X2FyciwgU0VSVl9JTjE2X1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9PVVRfMTY6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShzZXJ2X291dDE2X2FyciwgU0VSVl9PVVQxNl9TWiwgc2EpOwotCQlmaW5fbmFtZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgVEhJUkRfUEFSVFlfQ09QWV9JTjoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHRwY19pbl9hcnIsIFRQQ19JTl9TWiwgc2EpOwotCQlmaW5fbmFtZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgVEhJUkRfUEFSVFlfQ09QWV9PVVQ6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZSh0cGNfb3V0X2FyciwgVFBDX09VVF9TWiwgc2EpOwotCQlmaW5fbmFtZSA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlmIChjZGIwIDwgMHhjMCkgewotCQkJbmFtZSA9IGNkYl9ieXRlMF9uYW1lc1tjZGIwXTsKLQkJCWlmIChuYW1lKQotCQkJCXByaW50aygiJXMiLCBuYW1lKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoImNkYlswXT0weCV4IChyZXNlcnZlZCkiLCBjZGIwKTsKLQkJfSBlbHNlCisJaWYgKCFzY3NpX29wY29kZV9zYV9uYW1lKGNkYjAsIHNhLCAmY2RiX25hbWUsICZzYV9uYW1lKSkgeworCQlpZiAoY2RiX25hbWUpCisJCQlwcmludGsoIiVzIiwgY2RiX25hbWUpOworCQllbHNlIGlmIChjZGIwID49IFZFTkRPUl9TUEVDSUZJQ19DREIpCiAJCQlwcmludGsoImNkYlswXT0weCV4ICh2ZW5kb3IpIiwgY2RiMCk7Ci0JCWJyZWFrOwotCX0KLQlpZiAoZmluX25hbWUpIHsKLQkJaWYgKG5hbWUpCi0JCQlwcmludGsoIiVzIiwgbmFtZSk7CisJCWVsc2UgaWYgKGNkYjAgPj0gMHg2MCAmJiBjZGIwIDwgMHg3ZSkKKwkJCXByaW50aygiY2RiWzBdPTB4JXggKHJlc2VydmVkKSIsIGNkYjApOwogCQllbHNlCi0JCQlwcmludGsoImNkYlswXT0weCV4LCBzYT0weCV4IiwgY2RiMCwgc2EpOwotCX0KLX0KLQotI2Vsc2UgLyogaWZuZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUyAqLwotCi1zdGF0aWMgdm9pZCBwcmludF9vcGNvZGVfbmFtZSh1bnNpZ25lZCBjaGFyICogY2RicCwgaW50IGNkYl9sZW4pCi17Ci0JaW50IHNhLCBsZW4sIGNkYjA7Ci0KLQljZGIwID0gY2RicFswXTsKLQlzd2l0Y2goY2RiMCkgewotCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKLQkJbGVuID0gc2NzaV92YXJsZW5fY2RiX2xlbmd0aChjZGJwKTsKLQkJaWYgKGxlbiA8IDEwKSB7Ci0JCQlwcmludGsoInNob3J0IG9wY29kZT0weCV4IGNvbW1hbmQsIGxlbj0lZCAiCi0JCQkgICAgICAgImV4dF9sZW49JWQiLCBjZGIwLCBsZW4sIGNkYl9sZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2EgPSAoY2RicFs4XSA8PCA4KSArIGNkYnBbOV07Ci0JCXByaW50aygiY2RiWzBdPTB4JXgsIHNhPTB4JXgiLCBjZGIwLCBzYSk7Ci0JCWlmIChsZW4gIT0gY2RiX2xlbikKLQkJCXByaW50aygiLCBpbl9jZGJfbGVuPSVkLCBleHRfbGVuPSVkIiwgbGVuLCBjZGJfbGVuKTsKLQkJYnJlYWs7Ci0JY2FzZSBNQUlOVEVOQU5DRV9JTjoKLQljYXNlIE1BSU5URU5BTkNFX09VVDoKLQljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9JTjoKLQljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9PVVQ6Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xMjoKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX09VVF8xMjoKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0JJRElSRUNUSU9OQUw6Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX09VVF8xNjoKLQljYXNlIFRISVJEX1BBUlRZX0NPUFlfSU46Ci0JY2FzZSBUSElSRF9QQVJUWV9DT1BZX09VVDoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJcHJpbnRrKCJjZGJbMF09MHgleCwgc2E9MHgleCIsIGNkYjAsIHNhKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKGNkYjAgPCAweGMwKQogCQkJcHJpbnRrKCJjZGJbMF09MHgleCIsIGNkYjApOworCX0gZWxzZSB7CisJCWlmIChzYV9uYW1lKQorCQkJcHJpbnRrKCIlcyIsIHNhX25hbWUpOworCQllbHNlIGlmIChjZGJfbmFtZSkKKwkJCXByaW50aygiJXMsIHNhPTB4JXgiLCBjZGJfbmFtZSwgc2EpOwogCQllbHNlCi0JCQlwcmludGsoImNkYlswXT0weCV4ICh2ZW5kb3IpIiwgY2RiMCk7Ci0JCWJyZWFrOworCQkJcHJpbnRrKCJjZGJbMF09MHgleCwgc2E9MHgleCIsIGNkYjAsIHNhKTsKIAl9CiB9Ci0jZW5kaWYKIAotdm9pZCBfX3Njc2lfcHJpbnRfY29tbWFuZCh1bnNpZ25lZCBjaGFyICpjZGIpCit2b2lkIF9fc2NzaV9wcmludF9jb21tYW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNkYiwgc2l6ZV90IGNkYl9sZW4pCiB7CiAJaW50IGssIGxlbjsKIAotCXByaW50X29wY29kZV9uYW1lKGNkYiwgMCk7CisJcHJpbnRfb3Bjb2RlX25hbWUoY2RiLCBjZGJfbGVuKTsKIAlsZW4gPSBzY3NpX2NvbW1hbmRfc2l6ZShjZGIpOworCWlmIChjZGJfbGVuIDwgbGVuKQorCQlsZW4gPSBjZGJfbGVuOwogCS8qIHByaW50IG91dCBhbGwgYnl0ZXMgaW4gY2RiICovCiAJZm9yIChrID0gMDsgayA8IGxlbjsgKytrKQogCQlwcmludGsoIiAlMDJ4IiwgY2RiW2tdKTsKQEAgLTQzMyw0MSArMzgzLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9wcmludF9jb21tYW5kKTsKIAotLyoqCi0gKglzY3NpX3ByaW50X3N0YXR1cyAtIHByaW50IHNjc2kgc3RhdHVzIGRlc2NyaXB0aW9uCi0gKglAc2NzaV9zdGF0dXM6IHNjc2kgc3RhdHVzIHZhbHVlCi0gKgotICoJSWYgdGhlIHN0YXR1cyBpcyByZWNvZ25pemVkLCB0aGUgZGVzY3JpcHRpb24gaXMgcHJpbnRlZC4KLSAqCU90aGVyd2lzZSAiVW5rbm93biBzdGF0dXMiIGlzIG91dHB1dC4gTm8gdHJhaWxpbmcgc3BhY2UuCi0gKglJZiBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldCwgdGhlbiBwcmludCBzdGF0dXMgaW4gaGV4Ci0gKgkoZS5nLiAiMHgyIiBmb3IgQ2hlY2sgQ29uZGl0aW9uKS4KLSAqKi8KLXZvaWQKLXNjc2lfcHJpbnRfc3RhdHVzKHVuc2lnbmVkIGNoYXIgc2NzaV9zdGF0dXMpIHsKLSNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKLQljb25zdCBjaGFyICogY2NwOwotCi0Jc3dpdGNoIChzY3NpX3N0YXR1cykgewotCWNhc2UgMDogICAgY2NwID0gIkdvb2QiOyBicmVhazsKLQljYXNlIDB4MjogIGNjcCA9ICJDaGVjayBDb25kaXRpb24iOyBicmVhazsKLQljYXNlIDB4NDogIGNjcCA9ICJDb25kaXRpb24gTWV0IjsgYnJlYWs7Ci0JY2FzZSAweDg6ICBjY3AgPSAiQnVzeSI7IGJyZWFrOwotCWNhc2UgMHgxMDogY2NwID0gIkludGVybWVkaWF0ZSI7IGJyZWFrOwotCWNhc2UgMHgxNDogY2NwID0gIkludGVybWVkaWF0ZS1Db25kaXRpb24gTWV0IjsgYnJlYWs7Ci0JY2FzZSAweDE4OiBjY3AgPSAiUmVzZXJ2YXRpb24gQ29uZmxpY3QiOyBicmVhazsKLQljYXNlIDB4MjI6IGNjcCA9ICJDb21tYW5kIFRlcm1pbmF0ZWQiOyBicmVhazsJLyogb2Jzb2xldGUgKi8KLQljYXNlIDB4Mjg6IGNjcCA9ICJUYXNrIHNldCBGdWxsIjsgYnJlYWs7CS8qIHdhczogUXVldWUgRnVsbCAqLwotCWNhc2UgMHgzMDogY2NwID0gIkFDQSBBY3RpdmUiOyBicmVhazsKLQljYXNlIDB4NDA6IGNjcCA9ICJUYXNrIEFib3J0ZWQiOyBicmVhazsKLQlkZWZhdWx0OiAgIGNjcCA9ICJVbmtub3duIHN0YXR1cyI7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gIiVzIiwgY2NwKTsKLSNlbHNlCi0JcHJpbnRrKEtFUk5fSU5GTyAiMHglMHgiLCBzY3NpX3N0YXR1cyk7Ci0jZW5kaWYKLX0KLUVYUE9SVF9TWU1CT0woc2NzaV9wcmludF9zdGF0dXMpOwotCiAjaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCiAKIHN0cnVjdCBlcnJvcl9pbmZvIHsKQEAgLTEyOTIsMTggKzEyMDcsMTkgQEAKIAogc3RydWN0IGVycm9yX2luZm8yIHsKIAl1bnNpZ25lZCBjaGFyIGNvZGUxLCBjb2RlMl9taW4sIGNvZGUyX21heDsKKwljb25zdCBjaGFyICogc3RyOwogCWNvbnN0IGNoYXIgKiBmbXQ7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGVycm9yX2luZm8yIGFkZGl0aW9uYWwyW10gPQogewotCXsweDQwLCAweDAwLCAweDdmLCAiUmFtIGZhaWx1cmUgKCV4KSJ9LAotCXsweDQwLCAweDgwLCAweGZmLCAiRGlhZ25vc3RpYyBmYWlsdXJlIG9uIGNvbXBvbmVudCAoJXgpIn0sCi0JezB4NDEsIDB4MDAsIDB4ZmYsICJEYXRhIHBhdGggZmFpbHVyZSAoJXgpIn0sCi0JezB4NDIsIDB4MDAsIDB4ZmYsICJQb3dlci1vbiBvciBzZWxmLXRlc3QgZmFpbHVyZSAoJXgpIn0sCi0JezB4NEQsIDB4MDAsIDB4ZmYsICJUYWdnZWQgb3ZlcmxhcHBlZCBjb21tYW5kcyAodGFzayB0YWcgJXgpIn0sCi0JezB4NzAsIDB4MDAsIDB4ZmYsICJEZWNvbXByZXNzaW9uIGV4Y2VwdGlvbiBzaG9ydCBhbGdvcml0aG0gaWQgb2YgJXgifSwKLQl7MCwgMCwgMCwgTlVMTH0KKwl7MHg0MCwgMHgwMCwgMHg3ZiwgIlJhbSBmYWlsdXJlIiwgIiJ9LAorCXsweDQwLCAweDgwLCAweGZmLCAiRGlhZ25vc3RpYyBmYWlsdXJlIG9uIGNvbXBvbmVudCIsICIifSwKKwl7MHg0MSwgMHgwMCwgMHhmZiwgIkRhdGEgcGF0aCBmYWlsdXJlIiwgIiJ9LAorCXsweDQyLCAweDAwLCAweGZmLCAiUG93ZXItb24gb3Igc2VsZi10ZXN0IGZhaWx1cmUiLCAiIn0sCisJezB4NEQsIDB4MDAsIDB4ZmYsICJUYWdnZWQgb3ZlcmxhcHBlZCBjb21tYW5kcyIsICJ0YXNrIHRhZyAifSwKKwl7MHg3MCwgMHgwMCwgMHhmZiwgIkRlY29tcHJlc3Npb24gZXhjZXB0aW9uIiwgInNob3J0IGFsZ29yaXRobSBpZCBvZiAifSwKKwl7MCwgMCwgMCwgTlVMTCwgTlVMTH0KIH07CiAKIC8qIGRlc2NyaXB0aW9uIG9mIHRoZSBzZW5zZSBrZXkgdmFsdWVzICovCkBAIC0xMzQ5LDY5ICsxMjY1LDc5IEBACiAgKiBUaGlzIHN0cmluZyBtYXkgY29udGFpbiBhICIleCIgYW5kIHNob3VsZCBiZSBwcmludGVkIHdpdGggYXNjcSBhcyBhcmcuCiAgKi8KIGNvbnN0IGNoYXIgKgotc2NzaV9leHRkX3NlbnNlX2Zvcm1hdCh1bnNpZ25lZCBjaGFyIGFzYywgdW5zaWduZWQgY2hhciBhc2NxKSB7CitzY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KHVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EsIGNvbnN0IGNoYXIgKipmbXQpCit7CiAjaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCiAJaW50IGk7CiAJdW5zaWduZWQgc2hvcnQgY29kZSA9ICgoYXNjIDw8IDgpIHwgYXNjcSk7CiAKKwkqZm10ID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBhZGRpdGlvbmFsW2ldLnRleHQ7IGkrKykKIAkJaWYgKGFkZGl0aW9uYWxbaV0uY29kZTEyID09IGNvZGUpCiAJCQlyZXR1cm4gYWRkaXRpb25hbFtpXS50ZXh0OwogCWZvciAoaSA9IDA7IGFkZGl0aW9uYWwyW2ldLmZtdDsgaSsrKSB7CiAJCWlmIChhZGRpdGlvbmFsMltpXS5jb2RlMSA9PSBhc2MgJiYKIAkJICAgIGFzY3EgPj0gYWRkaXRpb25hbDJbaV0uY29kZTJfbWluICYmCi0JCSAgICBhc2NxIDw9IGFkZGl0aW9uYWwyW2ldLmNvZGUyX21heCkKLQkJCXJldHVybiBhZGRpdGlvbmFsMltpXS5mbXQ7CisJCSAgICBhc2NxIDw9IGFkZGl0aW9uYWwyW2ldLmNvZGUyX21heCkgeworCQkJKmZtdCA9IGFkZGl0aW9uYWwyW2ldLmZtdDsKKwkJCXJldHVybiBhZGRpdGlvbmFsMltpXS5zdHI7CisJCX0KIAl9CisjZWxzZQorCSpmbXQgPSBOVUxMOwogI2VuZGlmCiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQpOwogCiB2b2lkCi1zY3NpX3Nob3dfZXh0ZF9zZW5zZSh1bnNpZ25lZCBjaGFyIGFzYywgdW5zaWduZWQgY2hhciBhc2NxKQorc2NzaV9zaG93X2V4dGRfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EpCiB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmV4dGRfc2Vuc2VfZm10ID0gc2NzaV9leHRkX3NlbnNlX2Zvcm1hdChhc2MsIGFzY3EpOworCWNvbnN0IGNoYXIgKmV4dGRfc2Vuc2VfZm10ID0gTlVMTDsKKwljb25zdCBjaGFyICpleHRkX3NlbnNlX3N0ciA9IHNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQoYXNjLCBhc2NxLAorCQkJCQkJCSAgICAmZXh0ZF9zZW5zZV9mbXQpOwogCi0JaWYgKGV4dGRfc2Vuc2VfZm10KSB7Ci0JCWlmIChzdHJzdHIoZXh0ZF9zZW5zZV9mbXQsICIleCIpKSB7Ci0JCQlwcmludGsoIkFkZC4gU2Vuc2U6ICIpOwotCQkJcHJpbnRrKGV4dGRfc2Vuc2VfZm10LCBhc2NxKTsKLQkJfSBlbHNlCi0JCQlwcmludGsoIkFkZC4gU2Vuc2U6ICVzIiwgZXh0ZF9zZW5zZV9mbXQpOwotCX0gZWxzZSB7Ci0JCWlmIChhc2MgPj0gMHg4MCkKLQkJCXByaW50aygiPDx2ZW5kb3I+PiBBU0M9MHgleCBBU0NRPTB4JXgiLCBhc2MsCi0JCQkgICAgICAgYXNjcSk7Ci0JCWlmIChhc2NxID49IDB4ODApCi0JCQlwcmludGsoIkFTQz0weCV4IDw8dmVuZG9yPj4gQVNDUT0weCV4IiwgYXNjLAotCQkJICAgICAgIGFzY3EpOworCWlmIChleHRkX3NlbnNlX3N0cikgeworCQlpZiAoZXh0ZF9zZW5zZV9mbXQpCisJCQlzZGV2X3ByZWZpeF9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCBuYW1lLAorCQkJCQkgICAiQWRkLiBTZW5zZTogJXMgKCVzJXgpIiwKKwkJCQkJICAgZXh0ZF9zZW5zZV9zdHIsIGV4dGRfc2Vuc2VfZm10LAorCQkJCQkgICBhc2NxKTsKIAkJZWxzZQotCQkJcHJpbnRrKCJBU0M9MHgleCBBU0NRPTB4JXgiLCBhc2MsIGFzY3EpOwotCX0KKwkJCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCisJCQkJCSAgICJBZGQuIFNlbnNlOiAlcyIsIGV4dGRfc2Vuc2Vfc3RyKTsKIAotCXByaW50aygiXG4iKTsKKwl9IGVsc2UgeworCQlzZGV2X3ByZWZpeF9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCBuYW1lLAorCQkJCSAgICIlc0FTQz0weCV4ICVzQVNDUT0weCV4XG4iLAorCQkJCSAgIGFzYyA+PSAweDgwID8gIjw8dmVuZG9yPj4gIiA6ICIiLCBhc2MsCisJCQkJICAgYXNjcSA+PSAweDgwID8gIjw8dmVuZG9yPj4gIiA6ICIiLCBhc2NxKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfc2hvd19leHRkX3NlbnNlKTsKIAogdm9pZAotc2NzaV9zaG93X3NlbnNlX2hkcihzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorc2NzaV9zaG93X3NlbnNlX2hkcihjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICBjb25zdCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQogewogCWNvbnN0IGNoYXIgKnNlbnNlX3R4dDsKIAogCXNlbnNlX3R4dCA9IHNjc2lfc2Vuc2Vfa2V5X3N0cmluZyhzc2hkci0+c2Vuc2Vfa2V5KTsKIAlpZiAoc2Vuc2VfdHh0KQotCQlwcmludGsoIlNlbnNlIEtleSA6ICVzICIsIHNlbnNlX3R4dCk7CisJCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCisJCQkJICAgIlNlbnNlIEtleSA6ICVzIFslc10lc1xuIiwgc2Vuc2VfdHh0LAorCQkJCSAgIHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoc3NoZHIpID8KKwkJCQkgICAiZGVmZXJyZWQiIDogImN1cnJlbnQiLAorCQkJCSAgIHNzaGRyLT5yZXNwb25zZV9jb2RlID49IDB4NzIgPworCQkJCSAgICIgW2Rlc2NyaXB0b3JdIiA6ICIiKTsKIAllbHNlCi0JCXByaW50aygiU2Vuc2UgS2V5IDogMHgleCAiLCBzc2hkci0+c2Vuc2Vfa2V5KTsKLQotCXByaW50aygiJXMiLCBzY3NpX3NlbnNlX2lzX2RlZmVycmVkKHNzaGRyKSA/ICJbZGVmZXJyZWRdICIgOgotCSAgICAgICAiW2N1cnJlbnRdICIpOwotCi0JaWYgKHNzaGRyLT5yZXNwb25zZV9jb2RlID49IDB4NzIpCi0JCXByaW50aygiW2Rlc2NyaXB0b3JdIik7Ci0KLQlwcmludGsoIlxuIik7CisJCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCisJCQkJICAgIlNlbnNlIEtleSA6IDB4JXggWyVzXSVzIiwgc3NoZHItPnNlbnNlX2tleSwKKwkJCQkgICBzY3NpX3NlbnNlX2lzX2RlZmVycmVkKHNzaGRyKSA/CisJCQkJICAgImRlZmVycmVkIiA6ICJjdXJyZW50IiwKKwkJCQkgICBzc2hkci0+cmVzcG9uc2VfY29kZSA+PSAweDcyID8KKwkJCQkgICAiIFtkZXNjcmlwdG9yXSIgOiAiIik7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfc2hvd19zZW5zZV9oZHIpOwogCkBAIC0xNDE5LDE0MSArMTM0NSw1NSBAQAogICogUHJpbnQgbm9ybWFsaXplZCBTQ1NJIHNlbnNlIGhlYWRlciB3aXRoIGEgcHJlZml4LgogICovCiB2b2lkCi1zY3NpX3ByaW50X3NlbnNlX2hkcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorc2NzaV9wcmludF9zZW5zZV9oZHIoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgIGNvbnN0IHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIsIG5hbWUpOwotCXNjc2lfc2hvd19zZW5zZV9oZHIoc3NoZHIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAiLCBuYW1lKTsKLQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzc2hkci0+YXNjLCBzc2hkci0+YXNjcSk7CisJc2NzaV9zaG93X3NlbnNlX2hkcihzZGV2LCBuYW1lLCBzc2hkcik7CisJc2NzaV9zaG93X2V4dGRfc2Vuc2Uoc2RldiwgbmFtZSwgc3NoZHItPmFzYywgc3NoZHItPmFzY3EpOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X3NlbnNlX2hkcik7CiAKLS8qCi0gKiBQcmludCBub3JtYWxpemVkIFNDU0kgc2Vuc2UgaGVhZGVyIHdpdGggZGV2aWNlIGluZm9ybWF0aW9uIGFuZCBhIHByZWZpeC4KLSAqLwotdm9pZAotc2NzaV9jbWRfcHJpbnRfc2Vuc2VfaGRyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIGNvbnN0IGNoYXIgKmRlc2MsCi0JCQkgIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCi17Ci0Jc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLCAiJXM6ICIsIGRlc2MpOwotCXNjc2lfc2hvd19zZW5zZV9oZHIoc3NoZHIpOwotCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwgIiVzOiAiLCBkZXNjKTsKLQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzc2hkci0+YXNjLCBzc2hkci0+YXNjcSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc2lfY21kX3ByaW50X3NlbnNlX2hkcik7Ci0KIHN0YXRpYyB2b2lkCi1zY3NpX2RlY29kZV9zZW5zZV9idWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc2Vuc2VfYnVmZmVyLCBpbnQgc2Vuc2VfbGVuLAotCQkgICAgICAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKK3Njc2lfZHVtcF9zZW5zZV9idWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc2Vuc2VfYnVmZmVyLCBpbnQgc2Vuc2VfbGVuKQogewotCWludCBrLCBudW0sIHJlczsKKwlpbnQgaywgbnVtOwogCi0JcmVzID0gc2NzaV9ub3JtYWxpemVfc2Vuc2Uoc2Vuc2VfYnVmZmVyLCBzZW5zZV9sZW4sIHNzaGRyKTsKLQlpZiAoMCA9PSByZXMpIHsKLQkJLyogdGhpcyBtYXkgYmUgU0NTSS0xIHNlbnNlIGRhdGEgKi8KLQkJbnVtID0gKHNlbnNlX2xlbiA8IDMyKSA/IHNlbnNlX2xlbiA6IDMyOwotCQlwcmludGsoIlVucmVjb2duaXplZCBzZW5zZSBkYXRhIChpbiBoZXgpOiIpOwotCQlmb3IgKGsgPSAwOyBrIDwgbnVtOyArK2spIHsKLQkJCWlmICgwID09IChrICUgMTYpKSB7Ci0JCQkJcHJpbnRrKCJcbiIpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiAgICAgICAgIik7Ci0JCQl9Ci0JCQlwcmludGsoIiUwMnggIiwgc2Vuc2VfYnVmZmVyW2tdKTsKKwludW0gPSAoc2Vuc2VfbGVuIDwgMzIpID8gc2Vuc2VfbGVuIDogMzI7CisJcHJpbnRrKCJVbnJlY29nbml6ZWQgc2Vuc2UgZGF0YSAoaW4gaGV4KToiKTsKKwlmb3IgKGsgPSAwOyBrIDwgbnVtOyArK2spIHsKKwkJaWYgKDAgPT0gKGsgJSAxNikpIHsKKwkJCXByaW50aygiXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiAgICAgICAgIik7CiAJCX0KLQkJcHJpbnRrKCJcbiIpOwotCQlyZXR1cm47CisJCXByaW50aygiJTAyeCAiLCBzZW5zZV9idWZmZXJba10pOwogCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjc2lfZGVjb2RlX3NlbnNlX2V4dHJhcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzZW5zZV9idWZmZXIsIGludCBzZW5zZV9sZW4sCi0JCQkgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKLXsKLQlpbnQgaywgbnVtLCByZXM7Ci0KLQlpZiAoc3NoZHItPnJlc3BvbnNlX2NvZGUgPCAweDcyKQotCXsKLQkJLyogb25seSBkZWNvZGUgZXh0cmFzIGZvciAiZml4ZWQiIGZvcm1hdCBub3cgKi8KLQkJY2hhciBidWZmWzgwXTsKLQkJaW50IGJsZW4sIGZpeGVkX3ZhbGlkOwotCQl1bnNpZ25lZCBpbnQgaW5mbzsKLQotCQlmaXhlZF92YWxpZCA9IHNlbnNlX2J1ZmZlclswXSAmIDB4ODA7Ci0JCWluZm8gPSAoKHNlbnNlX2J1ZmZlclszXSA8PCAyNCkgfCAoc2Vuc2VfYnVmZmVyWzRdIDw8IDE2KSB8Ci0JCQkoc2Vuc2VfYnVmZmVyWzVdIDw8IDgpIHwgc2Vuc2VfYnVmZmVyWzZdKTsKLQkJcmVzID0gMDsKLQkJbWVtc2V0KGJ1ZmYsIDAsIHNpemVvZihidWZmKSk7Ci0JCWJsZW4gPSBzaXplb2YoYnVmZikgLSAxOwotCQlpZiAoZml4ZWRfdmFsaWQpCi0JCQlyZXMgKz0gc25wcmludGYoYnVmZiArIHJlcywgYmxlbiAtIHJlcywKLQkJCQkJIkluZm8gZmxkPTB4JXgiLCBpbmZvKTsKLQkJaWYgKHNlbnNlX2J1ZmZlclsyXSAmIDB4ODApIHsKLQkJCS8qIGN1cnJlbnQgY29tbWFuZCBoYXMgcmVhZCBhIGZpbGVtYXJrICovCi0JCQlpZiAocmVzID4gMCkKLQkJCQlyZXMgKz0gc25wcmludGYoYnVmZiArIHJlcywgYmxlbiAtIHJlcywgIiwgIik7Ci0JCQlyZXMgKz0gc25wcmludGYoYnVmZiArIHJlcywgYmxlbiAtIHJlcywgIkZNSyIpOwotCQl9Ci0JCWlmIChzZW5zZV9idWZmZXJbMl0gJiAweDQwKSB7Ci0JCQkvKiBlbmQtb2YtbWVkaXVtIGNvbmRpdGlvbiBleGlzdHMgKi8KLQkJCWlmIChyZXMgPiAwKQotCQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiLCAiKTsKLQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiRU9NIik7Ci0JCX0KLQkJaWYgKHNlbnNlX2J1ZmZlclsyXSAmIDB4MjApIHsKLQkJCS8qIGluY29ycmVjdCBibG9jayBsZW5ndGggcmVxdWVzdGVkICovCi0JCQlpZiAocmVzID4gMCkKLQkJCQlyZXMgKz0gc25wcmludGYoYnVmZiArIHJlcywgYmxlbiAtIHJlcywgIiwgIik7Ci0JCQlyZXMgKz0gc25wcmludGYoYnVmZiArIHJlcywgYmxlbiAtIHJlcywgIklMSSIpOwotCQl9Ci0JCWlmIChyZXMgPiAwKQotCQkJcHJpbnRrKCIlc1xuIiwgYnVmZik7Ci0JfSBlbHNlIGlmIChzc2hkci0+YWRkaXRpb25hbF9sZW5ndGggPiAwKSB7Ci0JCS8qIGRlc2NyaXB0b3IgZm9ybWF0IHdpdGggc2Vuc2UgZGVzY3JpcHRvcnMgKi8KLQkJbnVtID0gOCArIHNzaGRyLT5hZGRpdGlvbmFsX2xlbmd0aDsKLQkJbnVtID0gKHNlbnNlX2xlbiA8IG51bSkgPyBzZW5zZV9sZW4gOiBudW07Ci0JCXByaW50aygiRGVzY3JpcHRvciBzZW5zZSBkYXRhIHdpdGggc2Vuc2UgZGVzY3JpcHRvcnMgIgotCQkgICAgICAgIihpbiBoZXgpOiIpOwotCQlmb3IgKGsgPSAwOyBrIDwgbnVtOyArK2spIHsKLQkJCWlmICgwID09IChrICUgMTYpKSB7Ci0JCQkJcHJpbnRrKCJcbiIpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiAgICAgICAgIik7Ci0JCQl9Ci0JCQlwcmludGsoIiUwMnggIiwgc2Vuc2VfYnVmZmVyW2tdKTsKLQkJfQotCi0JCXByaW50aygiXG4iKTsKLQl9Ci0KKwlwcmludGsoIlxuIik7CisJcmV0dXJuOwogfQogCiAvKiBOb3JtYWxpemUgYW5kIHByaW50IHNlbnNlIGJ1ZmZlciB3aXRoIG5hbWUgcHJlZml4ICovCi12b2lkIF9fc2NzaV9wcmludF9zZW5zZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZW5zZV9idWZmZXIsCi0JCQlpbnQgc2Vuc2VfbGVuKQordm9pZCBfX3Njc2lfcHJpbnRfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2Vuc2VfYnVmZmVyLCBpbnQgc2Vuc2VfbGVuKQogewogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAiLCBuYW1lKTsKLQlzY3NpX2RlY29kZV9zZW5zZV9idWZmZXIoc2Vuc2VfYnVmZmVyLCBzZW5zZV9sZW4sICZzc2hkcik7Ci0Jc2NzaV9zaG93X3NlbnNlX2hkcigmc3NoZHIpOwotCXNjc2lfZGVjb2RlX3NlbnNlX2V4dHJhcyhzZW5zZV9idWZmZXIsIHNlbnNlX2xlbiwgJnNzaGRyKTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogIiwgbmFtZSk7Ci0Jc2NzaV9zaG93X2V4dGRfc2Vuc2Uoc3NoZHIuYXNjLCBzc2hkci5hc2NxKTsKKwlpZiAoIXNjc2lfbm9ybWFsaXplX3NlbnNlKHNlbnNlX2J1ZmZlciwgc2Vuc2VfbGVuLCAmc3NoZHIpKSB7CisJCXNjc2lfZHVtcF9zZW5zZV9idWZmZXIoc2Vuc2VfYnVmZmVyLCBzZW5zZV9sZW4pOworCQlyZXR1cm47CisJfQorCXNjc2lfc2hvd19zZW5zZV9oZHIoc2RldiwgbmFtZSwgJnNzaGRyKTsKKwlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzZGV2LCBuYW1lLCBzc2hkci5hc2MsIHNzaGRyLmFzY3EpOwogfQogRVhQT1JUX1NZTUJPTChfX3Njc2lfcHJpbnRfc2Vuc2UpOwogCiAvKiBOb3JtYWxpemUgYW5kIHByaW50IHNlbnNlIGJ1ZmZlciBpbiBTQ1NJIGNvbW1hbmQgKi8KLXZvaWQgc2NzaV9wcmludF9zZW5zZShjaGFyICpuYW1lLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit2b2lkIHNjc2lfcHJpbnRfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfY21uZCAqY21kKQogewotCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGNtZC0+cmVxdWVzdC0+cnFfZGlzazsKKwljb25zdCBjaGFyICpkaXNrX25hbWUgPSBkaXNrID8gZGlzay0+ZGlza19uYW1lIDogTlVMTDsKIAotCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLCAiICIpOwotCXNjc2lfZGVjb2RlX3NlbnNlX2J1ZmZlcihjbWQtPnNlbnNlX2J1ZmZlciwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLAotCQkJCSAmc3NoZHIpOwotCXNjc2lfc2hvd19zZW5zZV9oZHIoJnNzaGRyKTsKLQlzY3NpX2RlY29kZV9zZW5zZV9leHRyYXMoY21kLT5zZW5zZV9idWZmZXIsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwKLQkJCQkgJnNzaGRyKTsKLQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIiAiKTsKLQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzc2hkci5hc2MsIHNzaGRyLmFzY3EpOworCV9fc2NzaV9wcmludF9zZW5zZShjbWQtPmRldmljZSwgZGlza19uYW1lLCBjbWQtPnNlbnNlX2J1ZmZlciwKKwkJCSAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfc2Vuc2UpOwogCkBAIC0xNTY1LDM4ICsxNDA1LDg3IEBACiAiRElEX1BBU1NUSFJPVUdIIiwgIkRJRF9TT0ZUX0VSUk9SIiwgIkRJRF9JTU1fUkVUUlkiLCAiRElEX1JFUVVFVUUiLAogIkRJRF9UUkFOU1BPUlRfRElTUlVQVEVEIiwgIkRJRF9UUkFOU1BPUlRfRkFJTEZBU1QiLCAiRElEX1RBUkdFVF9GQUlMVVJFIiwKICJESURfTkVYVVNfRkFJTFVSRSIgfTsKLSNkZWZpbmUgTlVNX0hPU1RCWVRFX1NUUlMgQVJSQVlfU0laRShob3N0Ynl0ZV90YWJsZSkKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkcml2ZXJieXRlX3RhYmxlW109ewogIkRSSVZFUl9PSyIsICJEUklWRVJfQlVTWSIsICJEUklWRVJfU09GVCIsICAiRFJJVkVSX01FRElBIiwgIkRSSVZFUl9FUlJPUiIsCiAiRFJJVkVSX0lOVkFMSUQiLCAiRFJJVkVSX1RJTUVPVVQiLCAiRFJJVkVSX0hBUkQiLCAiRFJJVkVSX1NFTlNFIn07Ci0jZGVmaW5lIE5VTV9EUklWRVJCWVRFX1NUUlMgQVJSQVlfU0laRShkcml2ZXJieXRlX3RhYmxlKQotCi12b2lkIHNjc2lfc2hvd19yZXN1bHQoaW50IHJlc3VsdCkKLXsKLQlpbnQgaGIgPSBob3N0X2J5dGUocmVzdWx0KTsKLQlpbnQgZGIgPSBkcml2ZXJfYnl0ZShyZXN1bHQpOwotCi0JcHJpbnRrKCJSZXN1bHQ6IGhvc3RieXRlPSVzIGRyaXZlcmJ5dGU9JXNcbiIsCi0JICAgICAgIChoYiA8IE5VTV9IT1NUQllURV9TVFJTID8gaG9zdGJ5dGVfdGFibGVbaGJdICAgICA6ICJpbnZhbGlkIiksCi0JICAgICAgIChkYiA8IE5VTV9EUklWRVJCWVRFX1NUUlMgPyBkcml2ZXJieXRlX3RhYmxlW2RiXSA6ICJpbnZhbGlkIikpOwotfQotCi0jZWxzZQotCi12b2lkIHNjc2lfc2hvd19yZXN1bHQoaW50IHJlc3VsdCkKLXsKLQlwcmludGsoIlJlc3VsdDogaG9zdGJ5dGU9MHglMDJ4IGRyaXZlcmJ5dGU9MHglMDJ4XG4iLAotCSAgICAgICBob3N0X2J5dGUocmVzdWx0KSwgZHJpdmVyX2J5dGUocmVzdWx0KSk7Ci19CiAKICNlbmRpZgotRVhQT1JUX1NZTUJPTChzY3NpX3Nob3dfcmVzdWx0KTsKIAotCi12b2lkIHNjc2lfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK2NvbnN0IGNoYXIgKnNjc2lfaG9zdGJ5dGVfc3RyaW5nKGludCByZXN1bHQpCiB7Ci0Jc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsICIgIik7Ci0Jc2NzaV9zaG93X3Jlc3VsdChjbWQtPnJlc3VsdCk7CisJY29uc3QgY2hhciAqaGJfc3RyaW5nID0gTlVMTDsKKyNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKKwlpbnQgaGIgPSBob3N0X2J5dGUocmVzdWx0KTsKKworCWlmIChoYiA8IEFSUkFZX1NJWkUoaG9zdGJ5dGVfdGFibGUpKQorCQloYl9zdHJpbmcgPSBob3N0Ynl0ZV90YWJsZVtoYl07CisjZW5kaWYKKwlyZXR1cm4gaGJfc3RyaW5nOworfQorRVhQT1JUX1NZTUJPTChzY3NpX2hvc3RieXRlX3N0cmluZyk7CisKK2NvbnN0IGNoYXIgKnNjc2lfZHJpdmVyYnl0ZV9zdHJpbmcoaW50IHJlc3VsdCkKK3sKKwljb25zdCBjaGFyICpkYl9zdHJpbmcgPSBOVUxMOworI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUworCWludCBkYiA9IGRyaXZlcl9ieXRlKHJlc3VsdCk7CisKKwlpZiAoZGIgPCBBUlJBWV9TSVpFKGRyaXZlcmJ5dGVfdGFibGUpKQorCQlkYl9zdHJpbmcgPSBkcml2ZXJieXRlX3RhYmxlW2RiXTsKKyNlbmRpZgorCXJldHVybiBkYl9zdHJpbmc7Cit9CitFWFBPUlRfU1lNQk9MKHNjc2lfZHJpdmVyYnl0ZV9zdHJpbmcpOworCisjaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCisjZGVmaW5lIHNjc2lfbWxyZXR1cm5fbmFtZShyZXN1bHQpCXsgcmVzdWx0LCAjcmVzdWx0IH0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmFsdWVfbmFtZV9wYWlyIHNjc2lfbWxyZXR1cm5fYXJyW10gPSB7CisJc2NzaV9tbHJldHVybl9uYW1lKE5FRURTX1JFVFJZKSwKKwlzY3NpX21scmV0dXJuX25hbWUoU1VDQ0VTUyksCisJc2NzaV9tbHJldHVybl9uYW1lKEZBSUxFRCksCisJc2NzaV9tbHJldHVybl9uYW1lKFFVRVVFRCksCisJc2NzaV9tbHJldHVybl9uYW1lKFNPRlRfRVJST1IpLAorCXNjc2lfbWxyZXR1cm5fbmFtZShBRERfVE9fTUxRVUVVRSksCisJc2NzaV9tbHJldHVybl9uYW1lKFRJTUVPVVRfRVJST1IpLAorCXNjc2lfbWxyZXR1cm5fbmFtZShTQ1NJX1JFVFVSTl9OT1RfSEFORExFRCksCisJc2NzaV9tbHJldHVybl9uYW1lKEZBU1RfSU9fRkFJTCkKK307CisjZW5kaWYKKworY29uc3QgY2hhciAqc2NzaV9tbHJldHVybl9zdHJpbmcoaW50IHJlc3VsdCkKK3sKKyNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKKwljb25zdCBzdHJ1Y3QgdmFsdWVfbmFtZV9wYWlyICphcnIgPSBzY3NpX21scmV0dXJuX2FycjsKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHNjc2lfbWxyZXR1cm5fYXJyKTsgKytrLCArK2FycikgeworCQlpZiAocmVzdWx0ID09IGFyci0+dmFsdWUpCisJCQlyZXR1cm4gYXJyLT5uYW1lOworCX0KKyNlbmRpZgorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzY3NpX21scmV0dXJuX3N0cmluZyk7CisKK3ZvaWQgc2NzaV9wcmludF9yZXN1bHQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBjb25zdCBjaGFyICptc2csIGludCBkaXNwb3NpdGlvbikKK3sKKwljb25zdCBjaGFyICptbHJldF9zdHJpbmcgPSBzY3NpX21scmV0dXJuX3N0cmluZyhkaXNwb3NpdGlvbik7CisJY29uc3QgY2hhciAqaGJfc3RyaW5nID0gc2NzaV9ob3N0Ynl0ZV9zdHJpbmcoY21kLT5yZXN1bHQpOworCWNvbnN0IGNoYXIgKmRiX3N0cmluZyA9IHNjc2lfZHJpdmVyYnl0ZV9zdHJpbmcoY21kLT5yZXN1bHQpOworCisJaWYgKGhiX3N0cmluZyB8fCBkYl9zdHJpbmcpCisJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkJICAgICIlcyVzIFJlc3VsdDogaG9zdGJ5dGU9JXMgZHJpdmVyYnl0ZT0lcyIsCisJCQkgICAgbXNnID8gbXNnIDogIiIsCisJCQkgICAgbWxyZXRfc3RyaW5nID8gbWxyZXRfc3RyaW5nIDogIlVOS05PV04iLAorCQkJICAgIGhiX3N0cmluZyA/IGhiX3N0cmluZyA6ICJpbnZhbGlkIiwKKwkJCSAgICBkYl9zdHJpbmcgPyBkYl9zdHJpbmcgOiAiaW52YWxpZCIpOworCWVsc2UKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkgICAgIiVzJXMgUmVzdWx0OiBob3N0Ynl0ZT0weCUwMnggZHJpdmVyYnl0ZT0weCUwMngiLAorCQkJICAgIG1zZyA/IG1zZyA6ICIiLAorCQkJICAgIG1scmV0X3N0cmluZyA/IG1scmV0X3N0cmluZyA6ICJVTktOT1dOIiwKKwkJCSAgICBob3N0X2J5dGUoY21kLT5yZXN1bHQpLCBkcml2ZXJfYnl0ZShjbWQtPnJlc3VsdCkpOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X3Jlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19zY3NpLmMKaW5kZXggODYxMDNjOC4uNGQwYjZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9fc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX3Njc2kuYwpAQCAtMTUyLDI4ICsxNTIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWNzaW9fc2NzaV90YWcoc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsIHVpbnQ4X3QgKnRhZywgdWludDhfdCBocSwKLQkgICAgICB1aW50OF90IG9xLCB1aW50OF90IHNxKQotewotCWNoYXIgc3RhZ1syXTsKLQotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coc2NtbmQsIHN0YWcpKSB7Ci0JCXN3aXRjaCAoc3RhZ1swXSkgewotCQljYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCQkJKnRhZyA9IGhxOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6Ci0JCQkqdGFnID0gb3E7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCSp0YWcgPSBzcTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlCi0JCSp0YWcgPSAwOwotfQotCiAvKgogICogY3Npb19zY3NpX2ZjcF9jbW5kIC0gRnJhbWUgdGhlIFNDU0kgRkNQIGNvbW1hbmQgcGF5bG9kLgogICogQHJlcTogSU8gcmVxIHN0cnVjdHVyZS4KQEAgLTE5MiwxMSArMTcwLDEyIEBACiAJCWludF90b19zY3NpbHVuKHNjbW5kLT5kZXZpY2UtPmx1biwgJmZjcF9jbW5kLT5mY19sdW4pOwogCQlmY3BfY21uZC0+ZmNfdG1fZmxhZ3MgPSAwOwogCQlmY3BfY21uZC0+ZmNfY21kcmVmID0gMDsKLQkJZmNwX2NtbmQtPmZjX3ByaV90YSA9IDA7CiAKIAkJbWVtY3B5KGZjcF9jbW5kLT5mY19jZGIsIHNjbW5kLT5jbW5kLCAxNik7Ci0JCWNzaW9fc2NzaV90YWcoc2NtbmQsICZmY3BfY21uZC0+ZmNfcHJpX3RhLAotCQkJICAgICAgRkNQX1BUQV9IRUFEUSwgRkNQX1BUQV9PUkRFUkVELCBGQ1BfUFRBX1NJTVBMRSk7CisJCWlmIChzY21uZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkKKwkJCWZjcF9jbW5kLT5mY19wcmlfdGEgPSBGQ1BfUFRBX1NJTVBMRTsKKwkJZWxzZQorCQkJZmNwX2NtbmQtPmZjX3ByaV90YSA9IDA7CiAJCWZjcF9jbW5kLT5mY19kbCA9IGNwdV90b19iZTMyKHNjc2lfYnVmZmxlbihzY21uZCkpOwogCiAJCWlmIChyZXEtPm5zZ2UpCkBAIC0yMjYyLDExICsyMjQxLDcgQEAKIHN0YXRpYyBpbnQKIGNzaW9fc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgY3Npb19sdW5fcWRlcHRoKTsKLQllbHNlCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgY3Npb19sdW5fcWRlcHRoKTsKLQorCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGNzaW9fbHVuX3FkZXB0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzMTEsNiArMjI4Niw3IEBACiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycwkJPSBjc2lvX2Zjb2VfbHBvcnRfYXR0cnMsCiAJLm1heF9zZWN0b3JzCQk9IENTSU9fTUFYX1NFQ1RPUl9TSVpFLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKIH07CiAKIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgY3Npb19mY29lX3Nob3N0X3Zwb3J0X3RlbXBsYXRlID0gewpAQCAtMjMzMCw2ICsyMzA2LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQk9IGNzaW9fZmNvZV92cG9ydF9hdHRycywKIAkubWF4X3NlY3RvcnMJCT0gQ1NJT19NQVhfU0VDVE9SX1NJWkUsCisJLnVzZV9ibGtfdGFncwkJPSAxLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjNpL2N4Z2IzaS5jCmluZGV4IDQ5NjkyYTEuLjNkYjRjNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2IzaS9jeGdiM2kuYwpAQCAtODYsNyArODYsNyBAQAogCS5wcm9jX25hbWUJPSBEUlZfTU9EVUxFX05BTUUsCiAJLmNhbl9xdWV1ZQk9IENYR0IzSV9TQ1NJX0hPU1RfUURFUFRILAogCS5xdWV1ZWNvbW1hbmQJPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLnNnX3RhYmxlc2l6ZQk9IFNHX0FMTCwKIAkubWF4X3NlY3RvcnMJPSAweEZGRkYsCiAJLmNtZF9wZXJfbHVuCT0gSVNDU0lfREVGX0NNRF9QRVJfTFVOLApAQCAtOTYsNiArOTYsNyBAQAogCS50YXJnZXRfYWxsb2MJPSBpc2NzaV90YXJnZXRfYWxsb2MsCiAJLnVzZV9jbHVzdGVyaW5nCT0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS50aGlzX2lkCT0gLTEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGN4Z2IzaV9pc2NzaV90cmFuc3BvcnQgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jIGIvZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYwppbmRleCAzZTBhMGQzLi5lNmMzZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkvY3hnYjRpLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAkucHJvY19uYW1lCT0gRFJWX01PRFVMRV9OQU1FLAogCS5jYW5fcXVldWUJPSBDWEdCNElfU0NTSV9IT1NUX1FERVBUSCwKIAkucXVldWVjb21tYW5kCT0gaXNjc2lfcXVldWVjb21tYW5kLAotCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5zZ190YWJsZXNpemUJPSBTR19BTEwsCiAJLm1heF9zZWN0b3JzCT0gMHhGRkZGLAogCS5jbWRfcGVyX2x1bgk9IElTQ1NJX0RFRl9DTURfUEVSX0xVTiwKQEAgLTk5LDYgKzk5LDcgQEAKIAkudGFyZ2V0X2FsbG9jCT0gaXNjc2lfdGFyZ2V0X2FsbG9jLAogCS51c2VfY2x1c3RlcmluZwk9IERJU0FCTEVfQ0xVU1RFUklORywKIAkudGhpc19pZAk9IC0xLAorCS50cmFja19xdWV1ZV9kZXB0aCA9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBjeGdiNGlfaXNjc2lfdHJhbnNwb3J0ID0gewpAQCAtODI4LDYgKzgyOSw4IEBACiAJaWYgKHN0YXR1cyA9PSBDUExfRVJSX1JUWF9ORUdfQURWSUNFKQogCQlnb3RvIHJlbF9za2I7CiAKKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwogCWlmIChzdGF0dXMgJiYgc3RhdHVzICE9IENQTF9FUlJfVENBTV9GVUxMICYmCiAJICAgIHN0YXR1cyAhPSBDUExfRVJSX0NPTk5fRVhJU1QgJiYKIAkgICAgc3RhdHVzICE9IENQTF9FUlJfQVJQX01JU1MpCkBAIC05MzYsMjAgKzkzOSwyMyBAQAogCWN4Z2JpX3NvY2tfZ2V0KGNzayk7CiAJc3Bpbl9sb2NrX2JoKCZjc2stPmxvY2spOwogCi0JaWYgKCFjeGdiaV9zb2NrX2ZsYWcoY3NrLCBDVFBGX0FCT1JUX1JFUV9SQ1ZEKSkgewotCQljeGdiaV9zb2NrX3NldF9mbGFnKGNzaywgQ1RQRl9BQk9SVF9SRVFfUkNWRCk7Ci0JCWN4Z2JpX3NvY2tfc2V0X3N0YXRlKGNzaywgQ1RQX0FCT1JUSU5HKTsKLQkJZ290byBkb25lOworCWN4Z2JpX3NvY2tfY2xlYXJfZmxhZyhjc2ssIENUUEZfQUJPUlRfUkVRX1JDVkQpOworCisJaWYgKCFjeGdiaV9zb2NrX2ZsYWcoY3NrLCBDVFBGX1RYX0RBVEFfU0VOVCkpIHsKKwkJc2VuZF90eF9mbG93Y193cihjc2spOworCQljeGdiaV9zb2NrX3NldF9mbGFnKGNzaywgQ1RQRl9UWF9EQVRBX1NFTlQpOwogCX0KIAotCWN4Z2JpX3NvY2tfY2xlYXJfZmxhZyhjc2ssIENUUEZfQUJPUlRfUkVRX1JDVkQpOworCWN4Z2JpX3NvY2tfc2V0X2ZsYWcoY3NrLCBDVFBGX0FCT1JUX1JFUV9SQ1ZEKTsKKwljeGdiaV9zb2NrX3NldF9zdGF0ZShjc2ssIENUUF9BQk9SVElORyk7CisKIAlzZW5kX2Fib3J0X3JwbChjc2ssIHJzdF9zdGF0dXMpOwogCiAJaWYgKCFjeGdiaV9zb2NrX2ZsYWcoY3NrLCBDVFBGX0FCT1JUX1JQTF9QRU5ESU5HKSkgewogCQljc2stPmVyciA9IGFib3J0X3N0YXR1c190b19lcnJubyhjc2ssIHJlcS0+c3RhdHVzLCAmcnN0X3N0YXR1cyk7CiAJCWN4Z2JpX3NvY2tfY2xvc2VkKGNzayk7CiAJfQotZG9uZToKKwogCXNwaW5fdW5sb2NrX2JoKCZjc2stPmxvY2spOwogCWN4Z2JpX3NvY2tfcHV0KGNzayk7CiByZWxfc2tiOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYwppbmRleCA2NzRkNDk4Li43ZGE1OWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYwpAQCAtODE2LDcgKzgxNiw3IEBACiAJCXJlYWRfbG9ja19iaCgmY3NrLT5jYWxsYmFja19sb2NrKTsKIAkJaWYgKGNzay0+dXNlcl9kYXRhKQogCQkJaXNjc2lfY29ubl9mYWlsdXJlKGNzay0+dXNlcl9kYXRhLAotCQkJCQlJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCQkJCQlJU0NTSV9FUlJfVENQX0NPTk5fQ0xPU0UpOwogCQlyZWFkX3VubG9ja19iaCgmY3NrLT5jYWxsYmFja19sb2NrKTsKIAl9CiB9CkBAIC05MDUsMTggKzkwNSwxNiBAQAogewogCWN4Z2JpX3NvY2tfZ2V0KGNzayk7CiAJc3Bpbl9sb2NrX2JoKCZjc2stPmxvY2spOworCisJY3hnYmlfc29ja19zZXRfZmxhZyhjc2ssIENUUEZfQUJPUlRfUlBMX1JDVkQpOwogCWlmIChjeGdiaV9zb2NrX2ZsYWcoY3NrLCBDVFBGX0FCT1JUX1JQTF9QRU5ESU5HKSkgewotCQlpZiAoIWN4Z2JpX3NvY2tfZmxhZyhjc2ssIENUUEZfQUJPUlRfUlBMX1JDVkQpKQotCQkJY3hnYmlfc29ja19zZXRfZmxhZyhjc2ssIENUUEZfQUJPUlRfUlBMX1JDVkQpOwotCQllbHNlIHsKLQkJCWN4Z2JpX3NvY2tfY2xlYXJfZmxhZyhjc2ssIENUUEZfQUJPUlRfUlBMX1JDVkQpOwotCQkJY3hnYmlfc29ja19jbGVhcl9mbGFnKGNzaywgQ1RQRl9BQk9SVF9SUExfUEVORElORyk7Ci0JCQlpZiAoY3hnYmlfc29ja19mbGFnKGNzaywgQ1RQRl9BQk9SVF9SRVFfUkNWRCkpCi0JCQkJcHJfZXJyKCJjc2sgMHglcCwldSwweCVseCwldSxBQlRfUlBMX1JTUy5cbiIsCi0JCQkJCWNzaywgY3NrLT5zdGF0ZSwgY3NrLT5mbGFncywgY3NrLT50aWQpOwotCQkJY3hnYmlfc29ja19jbG9zZWQoY3NrKTsKLQkJfQorCQljeGdiaV9zb2NrX2NsZWFyX2ZsYWcoY3NrLCBDVFBGX0FCT1JUX1JQTF9QRU5ESU5HKTsKKwkJaWYgKGN4Z2JpX3NvY2tfZmxhZyhjc2ssIENUUEZfQUJPUlRfUkVRX1JDVkQpKQorCQkJcHJfZXJyKCJjc2sgMHglcCwldSwweCVseCwldSxBQlRfUlBMX1JTUy5cbiIsCisJCQkgICAgICAgY3NrLCBjc2stPnN0YXRlLCBjc2stPmZsYWdzLCBjc2stPnRpZCk7CisJCWN4Z2JpX3NvY2tfY2xvc2VkKGNzayk7CiAJfQorCiAJc3Bpbl91bmxvY2tfYmgoJmNzay0+bG9jayk7CiAJY3hnYmlfc29ja19wdXQoY3NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCmluZGV4IDMzZTQyMmUuLjFkYmE2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwpAQCAtOTgsMjcgKzk4LDUxIEBACiBzdGF0aWMgaW50IHNjc2lfZGhfaGFuZGxlcl9hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAogCQkJCSAgc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgKnNjc2lfZGgpCiB7Ci0JaW50IGVyciA9IDA7CisJc3RydWN0IHNjc2lfZGhfZGF0YSAqZDsKIAogCWlmIChzZGV2LT5zY3NpX2RoX2RhdGEpIHsKIAkJaWYgKHNkZXYtPnNjc2lfZGhfZGF0YS0+c2NzaV9kaCAhPSBzY3NpX2RoKQotCQkJZXJyID0gLUVCVVNZOwotCQllbHNlCi0JCQlrcmVmX2dldCgmc2Rldi0+c2NzaV9kaF9kYXRhLT5rcmVmKTsKLQl9IGVsc2UgaWYgKHNjc2lfZGgtPmF0dGFjaCkgewotCQllcnIgPSBzY3NpX2RoLT5hdHRhY2goc2Rldik7Ci0JCWlmICghZXJyKSB7Ci0JCQlrcmVmX2luaXQoJnNkZXYtPnNjc2lfZGhfZGF0YS0+a3JlZik7Ci0JCQlzZGV2LT5zY3NpX2RoX2RhdGEtPnNkZXYgPSBzZGV2OwotCQl9CisJCQlyZXR1cm4gLUVCVVNZOworCisJCWtyZWZfZ2V0KCZzZGV2LT5zY3NpX2RoX2RhdGEtPmtyZWYpOworCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIGVycjsKKworCWlmICghdHJ5X21vZHVsZV9nZXQoc2NzaV9kaC0+bW9kdWxlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkID0gc2NzaV9kaC0+YXR0YWNoKHNkZXYpOworCWlmIChJU19FUlIoZCkpIHsKKwkJc2Rldl9wcmludGsoS0VSTl9FUlIsIHNkZXYsICIlczogQXR0YWNoIGZhaWxlZCAoJWxkKVxuIiwKKwkJCSAgICBzY3NpX2RoLT5uYW1lLCBQVFJfRVJSKGQpKTsKKwkJbW9kdWxlX3B1dChzY3NpX2RoLT5tb2R1bGUpOworCQlyZXR1cm4gUFRSX0VSUihkKTsKKwl9CisKKwlkLT5zY3NpX2RoID0gc2NzaV9kaDsKKwlrcmVmX2luaXQoJmQtPmtyZWYpOworCWQtPnNkZXYgPSBzZGV2OworCisJc3Bpbl9sb2NrX2lycShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKKwlzZGV2LT5zY3NpX2RoX2RhdGEgPSBkOworCXNwaW5fdW5sb2NrX2lycShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXRhY2hfaGFuZGxlciAoc3RydWN0IGtyZWYgKmtyZWYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBzY3NpX2RoX2RhdGEsIGtyZWYpOwotCXNjc2lfZGhfZGF0YS0+c2NzaV9kaC0+ZGV0YWNoKHNjc2lfZGhfZGF0YS0+c2Rldik7CisJc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0KKwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBzY3NpX2RoX2RhdGEsIGtyZWYpOworCXN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyICpzY3NpX2RoID0gc2NzaV9kaF9kYXRhLT5zY3NpX2RoOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHNjc2lfZGhfZGF0YS0+c2RldjsKKworCXNwaW5fbG9ja19pcnEoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7CisJc2Rldi0+c2NzaV9kaF9kYXRhID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnEoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7CisKKwlzY3NpX2RoLT5kZXRhY2goc2Rldik7CisJc2Rldl9wcmludGsoS0VSTl9OT1RJQ0UsIHNkZXYsICIlczogRGV0YWNoZWRcbiIsIHNjc2lfZGgtPm5hbWUpOworCW1vZHVsZV9wdXQoc2NzaV9kaC0+bW9kdWxlKTsKIH0KIAogLyoKQEAgLTE0MSw3ICsxNjUsNyBAQAogCWlmICghc2NzaV9kaCkKIAkJc2NzaV9kaCA9IHNkZXYtPnNjc2lfZGhfZGF0YS0+c2NzaV9kaDsKIAotCWlmIChzY3NpX2RoICYmIHNjc2lfZGgtPmRldGFjaCkKKwlpZiAoc2NzaV9kaCkKIAkJa3JlZl9wdXQoJnNkZXYtPnNjc2lfZGhfZGF0YS0+a3JlZiwgX19kZXRhY2hfaGFuZGxlcik7CiB9CiAKQEAgLTMzMCw2ICszNTQsOSBAQAogCWlmIChnZXRfZGV2aWNlX2hhbmRsZXIoc2NzaV9kaC0+bmFtZSkpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlpZiAoIXNjc2lfZGgtPmF0dGFjaCB8fCAhc2NzaV9kaC0+ZGV0YWNoKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNwaW5fbG9jaygmbGlzdF9sb2NrKTsKIAlsaXN0X2FkZCgmc2NzaV9kaC0+bGlzdCwgJnNjc2lfZGhfbGlzdCk7CiAJc3Bpbl91bmxvY2soJmxpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKaW5kZXggZTk5NTA3ZS4uODU0YjU2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwpAQCAtNjIsNiArNjIsNyBAQAogI2RlZmluZSBBTFVBX09QVElNSVpFX1NUUEcJCTEKIAogc3RydWN0IGFsdWFfZGhfZGF0YSB7CisJc3RydWN0IHNjc2lfZGhfZGF0YQlkaF9kYXRhOwogCWludAkJCWdyb3VwX2lkOwogCWludAkJCXJlbF9wb3J0OwogCWludAkJCXRwZ3M7CkBAIC04Nyw5ICs4OCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFsdWFfZGhfZGF0YSAqZ2V0X2FsdWFfZGF0YShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCUJVR19PTihzY3NpX2RoX2RhdGEgPT0gTlVMTCk7Ci0JcmV0dXJuICgoc3RydWN0IGFsdWFfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1Zik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZGV2LT5zY3NpX2RoX2RhdGEsIHN0cnVjdCBhbHVhX2RoX2RhdGEsIGRoX2RhdGEpOwogfQogCiBzdGF0aWMgaW50IHJlYWxsb2NfYnVmZmVyKHN0cnVjdCBhbHVhX2RoX2RhdGEgKmgsIHVuc2lnbmVkIGxlbikKQEAgLTQ3NCw2ICs0NzMsMTMgQEAKIAkJCSAqIExVTiBOb3QgUmVhZHkgLS0gT2ZmbGluZQogCQkJICovCiAJCQlyZXR1cm4gU1VDQ0VTUzsKKwkJaWYgKHNkZXYtPmFsbG93X3Jlc3RhcnQgJiYKKwkJICAgIHNlbnNlX2hkci0+YXNjID09IDB4MDQgJiYgc2Vuc2VfaGRyLT5hc2NxID09IDB4MDIpCisJCQkvKgorCQkJICogaWYgdGhlIGRldmljZSBpcyBub3Qgc3RhcnRlZCwgd2UgbmVlZCB0byB3YWtlCisJCQkgKiB0aGUgZXJyb3IgaGFuZGxlciB0byBzdGFydCB0aGUgbW90b3IKKwkJCSAqLworCQkJcmV0dXJuIEZBSUxFRDsKIAkJYnJlYWs7CiAJY2FzZSBVTklUX0FUVEVOVElPTjoKIAkJaWYgKHNlbnNlX2hkci0+YXNjID09IDB4MjkgJiYgc2Vuc2VfaGRyLT5hc2NxID09IDB4MDApCkBAIC04MTgsOCArODI0LDQ5IEBACiAJcmV0dXJuIChzY3NpX2RldmljZV90cGdzKHNkZXYpICE9IDApOwogfQogCi1zdGF0aWMgaW50IGFsdWFfYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwotc3RhdGljIHZvaWQgYWx1YV9idXNfZGV0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CisvKgorICogYWx1YV9idXNfYXR0YWNoIC0gQXR0YWNoIGRldmljZSBoYW5kbGVyCisgKiBAc2RldjogZGV2aWNlIHRvIGJlIGF0dGFjaGVkIHRvCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9kaF9kYXRhICphbHVhX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBhbHVhX2RoX2RhdGEgKmg7CisJaW50IGVycjsKKworCWggPSBremFsbG9jKHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWgtPnRwZ3MgPSBUUEdTX01PREVfVU5JTklUSUFMSVpFRDsKKwloLT5zdGF0ZSA9IFRQR1NfU1RBVEVfT1BUSU1JWkVEOworCWgtPmdyb3VwX2lkID0gLTE7CisJaC0+cmVsX3BvcnQgPSAtMTsKKwloLT5idWZmID0gaC0+aW5xOworCWgtPmJ1ZmZsZW4gPSBBTFVBX0lOUVVJUllfU0laRTsKKwloLT5zZGV2ID0gc2RldjsKKworCWVyciA9IGFsdWFfaW5pdGlhbGl6ZShzZGV2LCBoKTsKKwlpZiAoZXJyICE9IFNDU0lfREhfT0sgJiYgZXJyICE9IFNDU0lfREhfREVWX09GRkxJTkVEKQorCQlnb3RvIGZhaWxlZDsKKworCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IEF0dGFjaGVkXG4iLCBBTFVBX0RIX05BTUUpOworCXJldHVybiAmaC0+ZGhfZGF0YTsKK2ZhaWxlZDoKKwlrZnJlZShoKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworLyoKKyAqIGFsdWFfYnVzX2RldGFjaCAtIERldGFjaCBkZXZpY2UgaGFuZGxlcgorICogQHNkZXY6IGRldmljZSB0byBiZSBkZXRhY2hlZCBmcm9tCisgKi8KK3N0YXRpYyB2b2lkIGFsdWFfYnVzX2RldGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IGFsdWFfZGhfZGF0YSAqaCA9IGdldF9hbHVhX2RhdGEoc2Rldik7CisKKwlpZiAoaC0+YnVmZiAmJiBoLT5pbnEgIT0gaC0+YnVmZikKKwkJa2ZyZWUoaC0+YnVmZik7CisJa2ZyZWUoaCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciBhbHVhX2RoID0gewogCS5uYW1lID0gQUxVQV9ESF9OQU1FLApAQCAtODMzLDc4ICs4ODAsNiBAQAogCS5tYXRjaCA9IGFsdWFfbWF0Y2gsCiB9OwogCi0vKgotICogYWx1YV9idXNfYXR0YWNoIC0gQXR0YWNoIGRldmljZSBoYW5kbGVyCi0gKiBAc2RldjogZGV2aWNlIHRvIGJlIGF0dGFjaGVkIHRvCi0gKi8KLXN0YXRpYyBpbnQgYWx1YV9idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7Ci0Jc3RydWN0IGFsdWFfZGhfZGF0YSAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSBTQ1NJX0RIX09LOwotCi0Jc2NzaV9kaF9kYXRhID0ga3phbGxvYyhzaXplb2YoKnNjc2lfZGhfZGF0YSkKLQkJCSAgICAgICArIHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNjc2lfZGhfZGF0YSkgewotCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBBdHRhY2ggZmFpbGVkXG4iLAotCQkJICAgIEFMVUFfREhfTkFNRSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNjc2lfZGhfZGF0YS0+c2NzaV9kaCA9ICZhbHVhX2RoOwotCWggPSAoc3RydWN0IGFsdWFfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1ZjsKLQloLT50cGdzID0gVFBHU19NT0RFX1VOSU5JVElBTElaRUQ7Ci0JaC0+c3RhdGUgPSBUUEdTX1NUQVRFX09QVElNSVpFRDsKLQloLT5ncm91cF9pZCA9IC0xOwotCWgtPnJlbF9wb3J0ID0gLTE7Ci0JaC0+YnVmZiA9IGgtPmlucTsKLQloLT5idWZmbGVuID0gQUxVQV9JTlFVSVJZX1NJWkU7Ci0JaC0+c2RldiA9IHNkZXY7Ci0KLQllcnIgPSBhbHVhX2luaXRpYWxpemUoc2RldiwgaCk7Ci0JaWYgKChlcnIgIT0gU0NTSV9ESF9PSykgJiYgKGVyciAhPSBTQ1NJX0RIX0RFVl9PRkZMSU5FRCkpCi0JCWdvdG8gZmFpbGVkOwotCi0JaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCi0JCWdvdG8gZmFpbGVkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlzZGV2X3ByaW50ayhLRVJOX05PVElDRSwgc2RldiwgIiVzOiBBdHRhY2hlZFxuIiwgQUxVQV9ESF9OQU1FKTsKLQotCXJldHVybiAwOwotCi1mYWlsZWQ6Ci0Ja2ZyZWUoc2NzaV9kaF9kYXRhKTsKLQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBub3QgYXR0YWNoZWRcbiIsIEFMVUFfREhfTkFNRSk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qCi0gKiBhbHVhX2J1c19kZXRhY2ggLSBEZXRhY2ggZGV2aWNlIGhhbmRsZXIKLSAqIEBzZGV2OiBkZXZpY2UgdG8gYmUgZGV0YWNoZWQgZnJvbQotICovCi1zdGF0aWMgdm9pZCBhbHVhX2J1c19kZXRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQotewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YTsKLQlzdHJ1Y3QgYWx1YV9kaF9kYXRhICpoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0Jc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KLQloID0gKHN0cnVjdCBhbHVhX2RoX2RhdGEgKikgc2NzaV9kaF9kYXRhLT5idWY7Ci0JaWYgKGgtPmJ1ZmYgJiYgaC0+aW5xICE9IGgtPmJ1ZmYpCi0JCWtmcmVlKGgtPmJ1ZmYpOwotCWtmcmVlKHNjc2lfZGhfZGF0YSk7Ci0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0Jc2Rldl9wcmludGsoS0VSTl9OT1RJQ0UsIHNkZXYsICIlczogRGV0YWNoZWRcbiIsIEFMVUFfREhfTkFNRSk7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGFsdWFfaW5pdCh2b2lkKQogewogCWludCByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwppbmRleCA4NDc2NTM4Li42ZWQxY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwpAQCAtNzIsNiArNzIsNyBAQAogfTsKIAogc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEgeworCXN0cnVjdCBzY3NpX2RoX2RhdGEgZGhfZGF0YTsKIAkvKgogCSAqIEZsYWdzOgogCSAqICBDTEFSSUlPTl9TSE9SVF9UUkVTUEFTUwpAQCAtMTE2LDkgKzExNyw4IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGFyaWlvbl9kaF9kYXRhCiAJCQkqZ2V0X2NsYXJpaW9uX2RhdGEoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9IHNkZXYtPnNjc2lfZGhfZGF0YTsKLQlCVUdfT04oc2NzaV9kaF9kYXRhID09IE5VTEwpOwotCXJldHVybiAoKHN0cnVjdCBjbGFyaWlvbl9kaF9kYXRhICopIHNjc2lfZGhfZGF0YS0+YnVmKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkZXYtPnNjc2lfZGhfZGF0YSwgc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEsCisJCQlkaF9kYXRhKTsKIH0KIAogLyoKQEAgLTYyMiw3ICs2MjIsMTAgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCBjbGFyaWlvbl9kZXZfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY2hhciAqdmVuZG9yOworCWNoYXIgKm1vZGVsOworfSBjbGFyaWlvbl9kZXZfbGlzdFtdID0gewogCXsiREdDIiwgIlJBSUQifSwKIAl7IkRHQyIsICJESVNLIn0sCiAJeyJER0MiLCAiVlJBSUQifSwKQEAgLTY0NywzOSArNjUwLDE0IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IGNsYXJpaW9uX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKLXN0YXRpYyB2b2lkIGNsYXJpaW9uX2J1c19kZXRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKLQotc3RhdGljIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyIGNsYXJpaW9uX2RoID0gewotCS5uYW1lCQk9IENMQVJJSU9OX05BTUUsCi0JLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKLQkuZGV2bGlzdAk9IGNsYXJpaW9uX2Rldl9saXN0LAotCS5hdHRhY2gJCT0gY2xhcmlpb25fYnVzX2F0dGFjaCwKLQkuZGV0YWNoCQk9IGNsYXJpaW9uX2J1c19kZXRhY2gsCi0JLmNoZWNrX3NlbnNlCT0gY2xhcmlpb25fY2hlY2tfc2Vuc2UsCi0JLmFjdGl2YXRlCT0gY2xhcmlpb25fYWN0aXZhdGUsCi0JLnByZXBfZm4JPSBjbGFyaWlvbl9wcmVwX2ZuLAotCS5zZXRfcGFyYW1zCT0gY2xhcmlpb25fc2V0X3BhcmFtcywKLQkubWF0Y2gJCT0gY2xhcmlpb25fbWF0Y2gsCi19OwotCi1zdGF0aWMgaW50IGNsYXJpaW9uX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorc3RhdGljIHN0cnVjdCBzY3NpX2RoX2RhdGEgKmNsYXJpaW9uX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YTsKIAlzdHJ1Y3QgY2xhcmlpb25fZGhfZGF0YSAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKLQlzY3NpX2RoX2RhdGEgPSBremFsbG9jKHNpemVvZigqc2NzaV9kaF9kYXRhKQotCQkJICAgICAgICsgc2l6ZW9mKCpoKSAsIEdGUF9LRVJORUwpOwotCWlmICghc2NzaV9kaF9kYXRhKSB7Ci0JCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IEF0dGFjaCBmYWlsZWRcbiIsCi0JCQkgICAgQ0xBUklJT05fTkFNRSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNjc2lfZGhfZGF0YS0+c2NzaV9kaCA9ICZjbGFyaWlvbl9kaDsKLQloID0gKHN0cnVjdCBjbGFyaWlvbl9kaF9kYXRhICopIHNjc2lfZGhfZGF0YS0+YnVmOworCWggPSBremFsbG9jKHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWgtPmx1bl9zdGF0ZSA9IENMQVJJSU9OX0xVTl9VTklOSVRJQUxJWkVEOwogCWgtPmRlZmF1bHRfc3AgPSBDTEFSSUlPTl9VTkJPVU5EX0xVOwogCWgtPmN1cnJlbnRfc3AgPSBDTEFSSUlPTl9VTkJPVU5EX0xVOwpAQCAtNjkyLDQ1ICs2NzAsMzcgQEAKIAlpZiAoZXJyICE9IFNDU0lfREhfT0spCiAJCWdvdG8gZmFpbGVkOwogCi0JaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCi0JCWdvdG8gZmFpbGVkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQogCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKIAkJICAgICIlczogY29ubmVjdGVkIHRvIFNQICVjIFBvcnQgJWQgKCVzLCBkZWZhdWx0IFNQICVjKVxuIiwKIAkJICAgIENMQVJJSU9OX05BTUUsIGgtPmN1cnJlbnRfc3AgKyAnQScsCiAJCSAgICBoLT5wb3J0LCBsdW5fc3RhdGVbaC0+bHVuX3N0YXRlXSwKIAkJICAgIGgtPmRlZmF1bHRfc3AgKyAnQScpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuICZoLT5kaF9kYXRhOwogCiBmYWlsZWQ6Ci0Ja2ZyZWUoc2NzaV9kaF9kYXRhKTsKLQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBub3QgYXR0YWNoZWRcbiIsCi0JCSAgICBDTEFSSUlPTl9OQU1FKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlrZnJlZShoKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIAogc3RhdGljIHZvaWQgY2xhcmlpb25fYnVzX2RldGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEgKmggPSBnZXRfY2xhcmlpb25fZGF0YShzZGV2KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlzY3NpX2RoX2RhdGEgPSBzZGV2LT5zY3NpX2RoX2RhdGE7Ci0Jc2Rldi0+c2NzaV9kaF9kYXRhID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IERldGFjaGVkXG4iLAotCQkgICAgQ0xBUklJT05fTkFNRSk7Ci0KLQlrZnJlZShzY3NpX2RoX2RhdGEpOwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCWtmcmVlKGgpOwogfQogCitzdGF0aWMgc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgY2xhcmlpb25fZGggPSB7CisJLm5hbWUJCT0gQ0xBUklJT05fTkFNRSwKKwkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5hdHRhY2gJCT0gY2xhcmlpb25fYnVzX2F0dGFjaCwKKwkuZGV0YWNoCQk9IGNsYXJpaW9uX2J1c19kZXRhY2gsCisJLmNoZWNrX3NlbnNlCT0gY2xhcmlpb25fY2hlY2tfc2Vuc2UsCisJLmFjdGl2YXRlCT0gY2xhcmlpb25fYWN0aXZhdGUsCisJLnByZXBfZm4JPSBjbGFyaWlvbl9wcmVwX2ZuLAorCS5zZXRfcGFyYW1zCT0gY2xhcmlpb25fc2V0X3BhcmFtcywKKwkubWF0Y2gJCT0gY2xhcmlpb25fbWF0Y2gsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBjbGFyaWlvbl9pbml0KHZvaWQpCiB7CiAJaW50IHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYwppbmRleCA0ZWUyNzU5Li40ODVkOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2hwX3N3LmMKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgSFBfU1dfUEFUSF9QQVNTSVZFCQkxCiAKIHN0cnVjdCBocF9zd19kaF9kYXRhIHsKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhIGRoX2RhdGE7CiAJdW5zaWduZWQgY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogCWludCBwYXRoX3N0YXRlOwogCWludCByZXRyaWVzOwpAQCAtNTEsOSArNTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBocF9zd19kaF9kYXRhICpnZXRfaHBfc3dfZGF0YShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCUJVR19PTihzY3NpX2RoX2RhdGEgPT0gTlVMTCk7Ci0JcmV0dXJuICgoc3RydWN0IGhwX3N3X2RoX2RhdGEgKikgc2NzaV9kaF9kYXRhLT5idWYpOworCXJldHVybiBjb250YWluZXJfb2Yoc2Rldi0+c2NzaV9kaF9kYXRhLCBzdHJ1Y3QgaHBfc3dfZGhfZGF0YSwgZGhfZGF0YSk7CiB9CiAKIC8qCkBAIC0zMTIsNyArMzExLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NzaV9kaF9kZXZsaXN0IGhwX3N3X2RoX2RhdGFfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY2hhciAqdmVuZG9yOworCWNoYXIgKm1vZGVsOworfSBocF9zd19kaF9kYXRhX2xpc3RbXSA9IHsKIAl7IkNPTVBBUSIsICJNU0ExMDAwIFZPTFVNRSJ9LAogCXsiQ09NUEFRIiwgIkhTVjExMCJ9LAogCXsiSFAiLCAiSFNWMTAwIn0sCkBAIC0zMzgsMzcgKzM0MCwxNCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBocF9zd19idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci1zdGF0aWMgdm9pZCBocF9zd19idXNfZGV0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciBocF9zd19kaCA9IHsKLQkubmFtZQkJPSBIUF9TV19OQU1FLAotCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCi0JLmRldmxpc3QJPSBocF9zd19kaF9kYXRhX2xpc3QsCi0JLmF0dGFjaAkJPSBocF9zd19idXNfYXR0YWNoLAotCS5kZXRhY2gJCT0gaHBfc3dfYnVzX2RldGFjaCwKLQkuYWN0aXZhdGUJPSBocF9zd19hY3RpdmF0ZSwKLQkucHJlcF9mbgk9IGhwX3N3X3ByZXBfZm4sCi0JLm1hdGNoCQk9IGhwX3N3X21hdGNoLAotfTsKLQotc3RhdGljIGludCBocF9zd19idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpocF9zd19idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7CiAJc3RydWN0IGhwX3N3X2RoX2RhdGEgKmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0Jc2NzaV9kaF9kYXRhID0ga3phbGxvYyhzaXplb2YoKnNjc2lfZGhfZGF0YSkKLQkJCSAgICAgICArIHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNjc2lfZGhfZGF0YSkgewotCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBBdHRhY2ggRmFpbGVkXG4iLAotCQkJICAgIEhQX1NXX05BTUUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzY3NpX2RoX2RhdGEtPnNjc2lfZGggPSAmaHBfc3dfZGg7Ci0JaCA9IChzdHJ1Y3QgaHBfc3dfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1ZjsKKwloID0ga3phbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWgtPnBhdGhfc3RhdGUgPSBIUF9TV19QQVRIX1VOSU5JVElBTElaRUQ7CiAJaC0+cmV0cmllcyA9IEhQX1NXX1JFVFJJRVM7CiAJaC0+c2RldiA9IHNkZXY7CkBAIC0zNzcsNDIgKzM1NiwzMiBAQAogCWlmIChyZXQgIT0gU0NTSV9ESF9PSyB8fCBoLT5wYXRoX3N0YXRlID09IEhQX1NXX1BBVEhfVU5JTklUSUFMSVpFRCkKIAkJZ290byBmYWlsZWQ7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKLQkJZ290byBmYWlsZWQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0Jc2Rldi0+c2NzaV9kaF9kYXRhID0gc2NzaV9kaF9kYXRhOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCiAJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiJXM6IGF0dGFjaGVkIHRvICVzIHBhdGhcbiIsCiAJCSAgICBIUF9TV19OQU1FLCBoLT5wYXRoX3N0YXRlID09IEhQX1NXX1BBVEhfQUNUSVZFPwogCQkgICAgImFjdGl2ZSI6InBhc3NpdmUiKTsKLQotCXJldHVybiAwOwotCisJcmV0dXJuICZoLT5kaF9kYXRhOwogZmFpbGVkOgotCWtmcmVlKHNjc2lfZGhfZGF0YSk7Ci0Jc2Rldl9wcmludGsoS0VSTl9FUlIsIHNkZXYsICIlczogbm90IGF0dGFjaGVkXG4iLAotCQkgICAgSFBfU1dfTkFNRSk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJa2ZyZWUoaCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhwX3N3X2J1c19kZXRhY2goIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiApCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGhwX3N3X2RoX2RhdGEgKmggPSBnZXRfaHBfc3dfZGF0YShzZGV2KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlzY3NpX2RoX2RhdGEgPSBzZGV2LT5zY3NpX2RoX2RhdGE7Ci0Jc2Rldi0+c2NzaV9kaF9kYXRhID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQotCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IERldGFjaGVkXG4iLCBIUF9TV19OQU1FKTsKLQotCWtmcmVlKHNjc2lfZGhfZGF0YSk7CisJa2ZyZWUoaCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciBocF9zd19kaCA9IHsKKwkubmFtZQkJPSBIUF9TV19OQU1FLAorCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmF0dGFjaAkJPSBocF9zd19idXNfYXR0YWNoLAorCS5kZXRhY2gJCT0gaHBfc3dfYnVzX2RldGFjaCwKKwkuYWN0aXZhdGUJPSBocF9zd19hY3RpdmF0ZSwKKwkucHJlcF9mbgk9IGhwX3N3X3ByZXBfZm4sCisJLm1hdGNoCQk9IGhwX3N3X21hdGNoLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaHBfc3dfaW5pdCh2b2lkKQogewogCXJldHVybiBzY3NpX3JlZ2lzdGVyX2RldmljZV9oYW5kbGVyKCZocF9zd19kaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKaW5kZXggMWI1YmM5Mi4uYjQ2YWNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwpAQCAtMTgxLDYgKzE4MSw3IEBACiB9OwogCiBzdHJ1Y3QgcmRhY19kaF9kYXRhIHsKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhCWRoX2RhdGE7CiAJc3RydWN0IHJkYWNfY29udHJvbGxlcgkqY3RscjsKICNkZWZpbmUgVU5JTklUSUFMSVpFRF9MVU4JKDEgPDwgOCkKIAl1bnNpZ25lZAkJbHVuOwpAQCAtMjYxLDkgKzI2Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJkYWNfZGhfZGF0YSAqZ2V0X3JkYWNfZGF0YShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCUJVR19PTihzY3NpX2RoX2RhdGEgPT0gTlVMTCk7Ci0JcmV0dXJuICgoc3RydWN0IHJkYWNfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1Zik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZGV2LT5zY3NpX2RoX2RhdGEsIHN0cnVjdCByZGFjX2RoX2RhdGEsIGRoX2RhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmdldF9yZGFjX3JlcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCkBAIC03NzksNyArNzc4LDEwIEBACiAJcmV0dXJuIFNDU0lfUkVUVVJOX05PVF9IQU5ETEVEOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCByZGFjX2Rldl9saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljaGFyICp2ZW5kb3I7CisJY2hhciAqbW9kZWw7Cit9IHJkYWNfZGV2X2xpc3RbXSA9IHsKIAl7IklCTSIsICIxNzIyIn0sCiAJeyJJQk0iLCAiMTcyNCJ9LAogCXsiSUJNIiwgIjE3MjYifSwKQEAgLTgyNSw0MCArODI3LDE2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IHJkYWNfYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwotc3RhdGljIHZvaWQgcmRhY19idXNfZGV0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciByZGFjX2RoID0gewotCS5uYW1lID0gUkRBQ19OQU1FLAotCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKLQkuZGV2bGlzdCA9IHJkYWNfZGV2X2xpc3QsCi0JLnByZXBfZm4gPSByZGFjX3ByZXBfZm4sCi0JLmNoZWNrX3NlbnNlID0gcmRhY19jaGVja19zZW5zZSwKLQkuYXR0YWNoID0gcmRhY19idXNfYXR0YWNoLAotCS5kZXRhY2ggPSByZGFjX2J1c19kZXRhY2gsCi0JLmFjdGl2YXRlID0gcmRhY19hY3RpdmF0ZSwKLQkubWF0Y2ggPSByZGFjX21hdGNoLAotfTsKLQotc3RhdGljIGludCByZGFjX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorc3RhdGljIHN0cnVjdCBzY3NpX2RoX2RhdGEgKnJkYWNfYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwogCXN0cnVjdCByZGFjX2RoX2RhdGEgKmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWNoYXIgYXJyYXlfbmFtZVtBUlJBWV9MQUJFTF9MRU5dOwogCWNoYXIgYXJyYXlfaWRbVU5JUVVFX0lEX0xFTl07CiAKLQlzY3NpX2RoX2RhdGEgPSBremFsbG9jKHNpemVvZigqc2NzaV9kaF9kYXRhKQotCQkJICAgICAgICsgc2l6ZW9mKCpoKSAsIEdGUF9LRVJORUwpOwotCWlmICghc2NzaV9kaF9kYXRhKSB7Ci0JCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IEF0dGFjaCBmYWlsZWRcbiIsCi0JCQkgICAgUkRBQ19OQU1FKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc2NzaV9kaF9kYXRhLT5zY3NpX2RoID0gJnJkYWNfZGg7Ci0JaCA9IChzdHJ1Y3QgcmRhY19kaF9kYXRhICopIHNjc2lfZGhfZGF0YS0+YnVmOworCWggPSBremFsbG9jKHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWgtPmx1biA9IFVOSU5JVElBTElaRURfTFVOOwogCWgtPnN0YXRlID0gUkRBQ19TVEFURV9BQ1RJVkU7CiAKQEAgLTg3OCwxOSArODU2LDEyIEBACiAJaWYgKGVyciAhPSBTQ1NJX0RIX09LKQogCQlnb3RvIGNsZWFuX2N0bHI7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKLQkJZ290byBjbGVhbl9jdGxyOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQogCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LAogCQkgICAgIiVzOiBMVU4gJWQgKCVzKSAoJXMpXG4iLAogCQkgICAgUkRBQ19OQU1FLCBoLT5sdW4sIG1vZGVbKGludCloLT5tb2RlXSwKIAkJICAgIGx1bl9zdGF0ZVsoaW50KWgtPmx1bl9zdGF0ZV0pOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuICZoLT5kaF9kYXRhOwogCiBjbGVhbl9jdGxyOgogCXNwaW5fbG9jaygmbGlzdF9sb2NrKTsKQEAgLTg5OCwzNyArODY5LDM0IEBACiAJc3Bpbl91bmxvY2soJmxpc3RfbG9jayk7CiAKIGZhaWxlZDoKLQlrZnJlZShzY3NpX2RoX2RhdGEpOwotCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IG5vdCBhdHRhY2hlZFxuIiwKLQkJICAgIFJEQUNfTkFNRSk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJa2ZyZWUoaCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJkYWNfYnVzX2RldGFjaCggc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ICkKIHsKLQlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7Ci0Jc3RydWN0IHJkYWNfZGhfZGF0YSAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZGFjX2RoX2RhdGEgKmggPSBnZXRfcmRhY19kYXRhKHNkZXYpOwogCi0Jc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCWggPSAoc3RydWN0IHJkYWNfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1ZjsKIAlpZiAoaC0+Y3RsciAmJiBoLT5jdGxyLT5tc19xdWV1ZWQpCiAJCWZsdXNoX3dvcmtxdWV1ZShrbXBhdGhfcmRhY2QpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KIAlzcGluX2xvY2soJmxpc3RfbG9jayk7CiAJaWYgKGgtPmN0bHIpCiAJCWtyZWZfcHV0KCZoLT5jdGxyLT5rcmVmLCByZWxlYXNlX2NvbnRyb2xsZXIpOwogCXNwaW5fdW5sb2NrKCZsaXN0X2xvY2spOwotCWtmcmVlKHNjc2lfZGhfZGF0YSk7Ci0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0Jc2Rldl9wcmludGsoS0VSTl9OT1RJQ0UsIHNkZXYsICIlczogRGV0YWNoZWRcbiIsIFJEQUNfTkFNRSk7CisJa2ZyZWUoaCk7CiB9CiAKLQorc3RhdGljIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyIHJkYWNfZGggPSB7CisJLm5hbWUgPSBSREFDX05BTUUsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5wcmVwX2ZuID0gcmRhY19wcmVwX2ZuLAorCS5jaGVja19zZW5zZSA9IHJkYWNfY2hlY2tfc2Vuc2UsCisJLmF0dGFjaCA9IHJkYWNfYnVzX2F0dGFjaCwKKwkuZGV0YWNoID0gcmRhY19idXNfZGV0YWNoLAorCS5hY3RpdmF0ZSA9IHJkYWNfYWN0aXZhdGUsCisJLm1hdGNoID0gcmRhY19tYXRjaCwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IHJkYWNfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RteDMxOTFkLmMgYi9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYwppbmRleCA0YjBkZDhjLi4zZTA4ODEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYworKysgYi9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYwpAQCAtMzMsMjAgKzMzLDIwIEBACiAvKgogICogRGVmaW5pdGlvbnMgZm9yIHRoZSBnZW5lcmljIDUzODAgZHJpdmVyLgogICovCi0jZGVmaW5lIEFVVE9TRU5TRQorCisjZGVmaW5lIERPTlRfVVNFX0lOVFIKIAogI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKQkJaW5iKHBvcnQgKyByZWcpCiAjZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkJb3V0Yih2YWx1ZSwgcG9ydCArIHJlZykKIAotI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcwl1bnNpZ25lZCBpbnQgcG9ydAotI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKQkJTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMKKyNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMJLyogbm9uZSAqLworI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKQkJdW5zaWduZWQgaW50IHBvcnQKICNkZWZpbmUgTkNSNTM4MF9zZXR1cChpbnN0YW5jZSkJCXBvcnQgPSBpbnN0YW5jZS0+aW9fcG9ydAogCiAvKgogICogSW5jbHVkZXMgbmVlZGVkIGZvciBOQ1I1MzgwLltjaF0gKFhYWDogTW92ZSB0aGVtIHRvIE5DUjUzODAuaCkKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogI2luY2x1ZGUgIk5DUjUzODAuYyIKQEAgLTU4LDYgKzU4LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRteDMxOTFkX2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQk9IERNWDMxOTFEX0RSSVZFUl9OQU1FLAogCS5uYW1lCQkJPSAiRG9tZXggRE1YMzE5MUQiLAorCS5pbmZvCQkJPSBOQ1I1MzgwX2luZm8sCiAJLnF1ZXVlY29tbWFuZAkJPSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQsCiAJLmVoX2Fib3J0X2hhbmRsZXIJPSBOQ1I1MzgwX2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IE5DUjUzODBfYnVzX3Jlc2V0LApAQCAtOTAsMzEgKzkxLDIzIEBACiAJaWYgKCFzaG9zdCkKIAkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247ICAgICAgIAogCXNob3N0LT5pb19wb3J0ID0gaW87Ci0Jc2hvc3QtPmlycSA9IHBkZXYtPmlycTsKKworCS8qIFRoaXMgY2FyZCBkb2VzIG5vdCBzZWVtIHRvIHJhaXNlIGFuIGludGVycnVwdCBvbiBwZGV2LT5pcnEuCisJICogU3RlYW0tcG93ZXJlZCBTQ1NJIGNvbnRyb2xsZXJzIHJ1biB3aXRob3V0IGFuIElSUSBhbnl3YXkuCisJICovCisJc2hvc3QtPmlycSA9IE5PX0lSUTsKIAogCU5DUjUzODBfaW5pdChzaG9zdCwgRkxBR19OT19QU0VVRE9fRE1BIHwgRkxBR19EVEMzMTgxRSk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBOQ1I1MzgwX2ludHIsIElSUUZfU0hBUkVELAotCQkJCURNWDMxOTFEX0RSSVZFUl9OQU1FLCBzaG9zdCkpIHsKLQkJLyoKLQkJICogU3RlYW0gcG93ZXJlZCBzY3NpIGNvbnRyb2xsZXJzIHJ1biB3aXRob3V0IGFuIElSUSBhbnl3YXkKLQkJICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImRteDMxOTE6IElSUSAlZCBub3QgYXZhaWxhYmxlIC0gIgotCQkJCSAgICAic3dpdGNoaW5nIHRvIHBvbGxlZCBtb2RlLlxuIiwgcGRldi0+aXJxKTsKLQkJc2hvc3QtPmlycSA9IFNDU0lfSVJRX05PTkU7Ci0JfQotCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHNob3N0KTsKIAogCWVycm9yID0gc2NzaV9hZGRfaG9zdChzaG9zdCwgJnBkZXYtPmRldik7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9mcmVlX2lycTsKKwkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247CiAKIAlzY3NpX3NjYW5faG9zdChzaG9zdCk7CiAJcmV0dXJuIDA7CiAKLSBvdXRfZnJlZV9pcnE6Ci0JZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogIG91dF9yZWxlYXNlX3JlZ2lvbjoKIAlyZWxlYXNlX3JlZ2lvbihpbywgRE1YMzE5MURfUkVHSU9OX0xFTik7CiAgb3V0X2Rpc2FibGVfZGV2aWNlOgpAQCAtMTMxLDggKzEyNCw2IEBACiAKIAlOQ1I1MzgwX2V4aXQoc2hvc3QpOwogCi0JaWYgKHNob3N0LT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKLQkJZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogCXJlbGVhc2VfcmVnaW9uKHNob3N0LT5pb19wb3J0LCBETVgzMTkxRF9SRUdJT05fTEVOKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IDA3MmYwZWMuLjBiZjk3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtNDE1LDEwICs0MTUsOCBAQAogCXBIYmEgPSAoYWRwdF9oYmEgKikgaG9zdC0+aG9zdGRhdGFbMF07CiAKIAlpZiAoaG9zdC0+Y2FuX3F1ZXVlICYmIGRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXZpY2UsIE1TR19TSU1QTEVfVEFHLAorCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXZpY2UsCiAJCQkJaG9zdC0+Y2FuX3F1ZXVlIC0gMSk7Ci0JfSBlbHNlIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2aWNlLCAwLCAxKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHRjLmMgYi9kcml2ZXJzL3Njc2kvZHRjLmMKaW5kZXggMGE2NjdmZS4uNGM3NGM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2R0Yy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kdGMuYwpAQCAtMSw1ICsxLDQgQEAKIAotI2RlZmluZSBBVVRPU0VOU0UKICNkZWZpbmUgUFNFVURPX0RNQQogI2RlZmluZSBET05UX1VTRV9JTlRSCiAjZGVmaW5lIFVOU0FGRQkJCS8qIExlYXZlIGludGVycnVwdHMgZW5hYmxlZCBkdXJpbmcgcHNldWRvLWRtYSBJL08gKi8KQEAgLTE4LDI5ICsxNyw5IEBACiAgKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSAxLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSovCisgKi8KIAogLyoKLSAqIE9wdGlvbnMgOiAKLSAqIEFVVE9TRU5TRSAtIGlmIGRlZmluZWQsIFJFUVVFU1QgU0VOU0Ugd2lsbCBiZSBwZXJmb3JtZWQgYXV0b21hdGljYWxseQotICogICAgICBmb3IgY29tbWFuZHMgdGhhdCByZXR1cm4gd2l0aCBhIENIRUNLIENPTkRJVElPTiBzdGF0dXMuIAotICoKLSAqIFBTRVVET19ETUEgLSBlbmFibGVzIFBTRVVETy1ETUEgaGFyZHdhcmUsIHNob3VsZCBnaXZlIGEgMy00WCBwZXJmb3JtYW5jZQotICogaW5jcmVhc2UgY29tcGFyZWQgdG8gcG9sbGVkIEkvTy4KLSAqCi0gKiBQQVJJVFkgLSBlbmFibGUgcGFyaXR5IGNoZWNraW5nLiAgTm90IHN1cHBvcnRlZC4KLSAqCi0gKiBVTlNBRkUgLSBsZWF2ZSBpbnRlcnJ1cHRzIGVuYWJsZWQgZHVyaW5nIHBzZXVkby1ETUEgdHJhbnNmZXJzLiAKLSAqCQlZb3UgcHJvYmFibHkgd2FudCB0aGlzLgotICoKICAqIFRoZSBjYXJkIGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCBpbiBvbmUgb2Ygc2V2ZXJhbCB3YXlzIDogCiAgKiAxLiAgQXV0b3Byb2JlIChkZWZhdWx0KSAtIHNpbmNlIHRoZSBib2FyZCBpcyBtZW1vcnkgbWFwcGVkLCAKICAqICAgICBhIEJJT1Mgc2lnbmF0dXJlIGlzIHNjYW5uZWQgZm9yIHRvIGxvY2F0ZSB0aGUgcmVnaXN0ZXJzLgpAQCAtNzksMTUgKzU4LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAiZHRjLmgiCiAjZGVmaW5lIEFVVE9QUk9CRV9JUlEKICNpbmNsdWRlICJOQ1I1MzgwLmgiCiAKLQotI2RlZmluZSBEVENfUFVCTElDX1JFTEVBU0UgMgotCiAvKgogICogVGhlIERUQzMxODAgJiAzMjgwIGJvYXJkcyBhcmUgbWVtb3J5IG1hcHBlZC4KICAqIApAQCAtMTczLDEwICsxNDgsMTMgQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IGR0Y19zZXR1cChjaGFyICpzdHIsIGludCAqaW50cykKK3N0YXRpYyBpbnQgX19pbml0IGR0Y19zZXR1cChjaGFyICpzdHIpCiB7CiAJc3RhdGljIGludCBjb21tYW5kbGluZV9jdXJyZW50ID0gMDsKIAlpbnQgaTsKKwlpbnQgaW50c1sxMF07CisKKwlnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOwogCWlmIChpbnRzWzBdICE9IDIpCiAJCXByaW50aygiZHRjX3NldHVwOiB1c2FnZSBkdGM9YWRkcmVzcyxpcnFcbiIpOwogCWVsc2UgaWYgKGNvbW1hbmRsaW5lX2N1cnJlbnQgPCBOT19PVkVSUklERVMpIHsKQEAgLTE4OSw3ICsxNjcsMTAgQEAKIAkJCX0KIAkJKytjb21tYW5kbGluZV9jdXJyZW50OwogCX0KKwlyZXR1cm4gMTsKIH0KKworX19zZXR1cCgiZHRjPSIsIGR0Y19zZXR1cCk7CiAjZW5kaWYKIAogLyogCkBAIC0yMTMsMTAgKzE5NCw2IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCBzaWcsIGNvdW50OwogCi0JdHBudC0+cHJvY19uYW1lID0gImR0YzN4ODAiOwotCXRwbnQtPnNob3dfaW5mbyA9IGR0Y19zaG93X2luZm87Ci0JdHBudC0+d3JpdGVfaW5mbyA9IGR0Y193cml0ZV9pbmZvOwotCiAJZm9yIChjb3VudCA9IDA7IGN1cnJlbnRfb3ZlcnJpZGUgPCBOT19PVkVSUklERVM7ICsrY3VycmVudF9vdmVycmlkZSkgewogCQlhZGRyID0gMDsKIAkJYmFzZSA9IE5VTEw7CkBAIC0yNzEsMzggKzI0OCwzMyBAQAogCQllbHNlCiAJCQlpbnN0YW5jZS0+aXJxID0gTkNSNTM4MF9wcm9iZV9pcnEoaW5zdGFuY2UsIERUQ19JUlFTKTsKIAorCQkvKiBDb21wYXRpYmlsaXR5IHdpdGggZG9jdW1lbnRlZCBOQ1I1MzgwIGtlcm5lbCBwYXJhbWV0ZXJzICovCisJCWlmIChpbnN0YW5jZS0+aXJxID09IDI1NSkKKwkJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CisKICNpZm5kZWYgRE9OVF9VU0VfSU5UUgogCQkvKiBXaXRoIGludGVycnVwdHMgZW5hYmxlZCwgaXQgd2lsbCBzb21ldGltZXMgaGFuZyB3aGVuIGRvaW5nIGhlYXZ5CiAJCSAqIHJlYWRzLiBTbyBiZXR0ZXIgbm90IGVuYWJsZSB0aGVtIHVudGlsIEkgZmluZ2VyIGl0IG91dC4gKi8KLQkJaWYgKGluc3RhbmNlLT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKKwkJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCQkJaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIGR0Y19pbnRyLCAwLAogCQkJCQkiZHRjIiwgaW5zdGFuY2UpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwotCQkJCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOworCQkJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CiAJCQl9CiAKLQkJaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkgeworCQlpZiAoaW5zdGFuY2UtPmlycSA9PSBOT19JUlEpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZCA6IGludGVycnVwdHMgbm90IGVuYWJsZWQuIGZvciBiZXR0ZXIgaW50ZXJhY3RpdmUgcGVyZm9ybWFuY2UsXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQgOiBwbGVhc2UganVtcGVyIHRoZSBib2FyZCBmb3IgYSBmcmVlIElSUS5cbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKIAkJfQogI2Vsc2UKLQkJaWYgKGluc3RhbmNlLT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKKwkJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogaW50ZXJydXB0cyBub3QgdXNlZC4gTWlnaHQgYXMgd2VsbCBub3QganVtcGVyIGl0LlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKKwkJaW5zdGFuY2UtPmlycSA9IE5PX0lSUTsKICNlbmRpZgogI2lmIGRlZmluZWQoRFRDREVCVUcpICYmIChEVENERUJVRyAmIERUQ0RFQlVHX0lOSVQpCiAJCXByaW50aygic2NzaSVkIDogaXJxID0gJWRcbiIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKICNlbmRpZgogCi0JCXByaW50ayhLRVJOX0lORk8gInNjc2klZCA6IGF0IDB4JTA1WCIsIGluc3RhbmNlLT5ob3N0X25vLCAoaW50KSBpbnN0YW5jZS0+YmFzZSk7Ci0JCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JCQlwcmludGsoIiBpbnRlcnJ1cHRzIGRpc2FibGVkIik7Ci0JCWVsc2UKLQkJCXByaW50aygiIGlycSAlZCIsIGluc3RhbmNlLT5pcnEpOwotCQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCAgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsIENBTl9RVUVVRSwgQ01EX1BFUl9MVU4sIERUQ19QVUJMSUNfUkVMRUFTRSk7Ci0JCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JCXByaW50aygiXG4iKTsKLQogCQkrK2N1cnJlbnRfb3ZlcnJpZGU7CiAJCSsrY291bnQ7CiAJfQpAQCAtMzU0LDIwICszMjYsMTggQEAKICAqIAl0aW1lb3V0LgogKi8KIAotc3RhdGljIGludCBkdGNfbWF4aSA9IDA7Ci1zdGF0aWMgaW50IGR0Y193bWF4aSA9IDA7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IE5DUjUzODBfcHJlYWQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBjaGFyICpkID0gZHN0OwogCWludCBpOwkJCS8qIEZvciBjb3VudGluZyB0aW1lIHNwZW50IGluIHRoZSBwb2xsLWxvb3AgKi8KKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKIAlOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKIAlOQ1I1MzgwX3NldHVwKGluc3RhbmNlKTsKIAogCWkgPSAwOwogCU5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7CiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfRU5BQkxFX0VPUF9JTlRSIHwgTVJfRE1BX01PREUpOwotCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCisJaWYgKGluc3RhbmNlLT5pcnEgPT0gTk9fSVJRKQogCQlOQ1I1MzgwX3dyaXRlKERUQ19DT05UUk9MX1JFRywgQ1NSX0RJUl9SRUFEKTsKIAllbHNlCiAJCU5DUjUzODBfd3JpdGUoRFRDX0NPTlRST0xfUkVHLCBDU1JfRElSX1JFQUQgfCBDU1JfSU5UX0JBU0UpOwpAQCAtMzkxLDggKzM2MSw4IEBACiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgMCk7CS8qIENsZWFyIHRoZSBvcGVyYXRpbmcgbW9kZSAqLwogCXJ0cmMoMCk7CiAJTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQlpZiAoaSA+IGR0Y19tYXhpKQotCQlkdGNfbWF4aSA9IGk7CisJaWYgKGkgPiBob3N0ZGF0YS0+c3Bpbl9tYXhfcikKKwkJaG9zdGRhdGEtPnNwaW5fbWF4X3IgPSBpOwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTQxMiwxMyArMzgyLDE0IEBACiBzdGF0aWMgaW5saW5lIGludCBOQ1I1MzgwX3B3cml0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQogewogCWludCBpOworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOwogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCiAJTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKIAlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9FTkFCTEVfRU9QX0lOVFIgfCBNUl9ETUFfTU9ERSk7CiAJLyogc2V0IGRpcmVjdGlvbiAod3JpdGUpICovCi0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKKwlpZiAoaW5zdGFuY2UtPmlycSA9PSBOT19JUlEpCiAJCU5DUjUzODBfd3JpdGUoRFRDX0NPTlRST0xfUkVHLCAwKTsKIAllbHNlCiAJCU5DUjUzODBfd3JpdGUoRFRDX0NPTlRST0xfUkVHLCBDU1JfNTM4MF9JTlRSKTsKQEAgLTQ0NCw4ICs0MTUsOCBAQAogCS8qIENoZWNrIGZvciBwYXJpdHkgZXJyb3IgaGVyZS4gZml4bWUuICovCiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgMCk7CS8qIENsZWFyIHRoZSBvcGVyYXRpbmcgbW9kZSAqLwogCXJ0cmMoMCk7Ci0JaWYgKGkgPiBkdGNfd21heGkpCi0JCWR0Y193bWF4aSA9IGk7CisJaWYgKGkgPiBob3N0ZGF0YS0+c3Bpbl9tYXhfdykKKwkJaG9zdGRhdGEtPnNwaW5fbWF4X3cgPSBpOwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTQ1Nyw3ICs0MjgsNyBAQAogewogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCU5DUjUzODBfc2V0dXAoc2hvc3QpOwotCWlmIChzaG9zdC0+aXJxKQorCWlmIChzaG9zdC0+aXJxICE9IE5PX0lSUSkKIAkJZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogCU5DUjUzODBfZXhpdChzaG9zdCk7CiAJaWYgKHNob3N0LT5pb19wb3J0ICYmIHNob3N0LT5uX2lvX3BvcnQpCkBAIC00NzEsNiArNDQyLDEwIEBACiAJLm5hbWUJCQkJPSAiRFRDIDMxODAvMzI4MCAiLAogCS5kZXRlY3QJCQkJPSBkdGNfZGV0ZWN0LAogCS5yZWxlYXNlCQkJPSBkdGNfcmVsZWFzZSwKKwkucHJvY19uYW1lCQkJPSAiZHRjM3g4MCIsCisJLnNob3dfaW5mbwkJCT0gZHRjX3Nob3dfaW5mbywKKwkud3JpdGVfaW5mbwkJCT0gZHRjX3dyaXRlX2luZm8sCisJLmluZm8JCQkJPSBkdGNfaW5mbywKIAkucXVldWVjb21tYW5kCQkJPSBkdGNfcXVldWVfY29tbWFuZCwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBkdGNfYWJvcnQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCQk9IGR0Y19idXNfcmVzZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHRjLmggYi9kcml2ZXJzL3Njc2kvZHRjLmgKaW5kZXggOTJkN2NmYy4uNzhhMjMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2R0Yy5oCisrKyBiL2RyaXZlcnMvc2NzaS9kdGMuaApAQCAtNSwyNCArNSw2IEBACiAgKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSAyLiAKLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgCi0gKgotICogCi0gKiAKLSAqIGFuZCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCiAjaWZuZGVmIERUQzMyODBfSApAQCAtMzIsMTMgKzE0LDYgQEAKICNkZWZpbmUgRFRDREVCVUdfSU5JVAkweDEKICNkZWZpbmUgRFRDREVCVUdfVFJBTlNGRVIgMHgyCiAKLXN0YXRpYyBpbnQgZHRjX2Fib3J0KFNjc2lfQ21uZCAqKTsKLXN0YXRpYyBpbnQgZHRjX2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqLAotCQkgICAgICAgICBzZWN0b3JfdCwgaW50Kik7Ci1zdGF0aWMgaW50IGR0Y19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKLXN0YXRpYyBpbnQgZHRjX3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCBkdGNfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqKTsKLQogI2lmbmRlZiBDTURfUEVSX0xVTgogI2RlZmluZSBDTURfUEVSX0xVTiAyCiAjZW5kaWYKQEAgLTg4LDYgKzYzLDcgQEAKICNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kCQlkdGNfcXVldWVfY29tbWFuZAogI2RlZmluZSBOQ1I1MzgwX2Fib3J0CQkJZHRjX2Fib3J0CiAjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0CQlkdGNfYnVzX3Jlc2V0CisjZGVmaW5lIE5DUjUzODBfaW5mbwkJCWR0Y19pbmZvCiAjZGVmaW5lIE5DUjUzODBfc2hvd19pbmZvCQlkdGNfc2hvd19pbmZvIAogI2RlZmluZSBOQ1I1MzgwX3dyaXRlX2luZm8JCWR0Y193cml0ZV9pbmZvIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZWF0YS5jIGIvZHJpdmVycy9zY3NpL2VhdGEuYwppbmRleCA5NDNhZDNhLi4yMjdkZDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZWF0YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKQEAgLTk0NiwyMCArOTQ2LDE4IEBACiAKIAlpZiAoVExERVYoZGV2LT50eXBlKSAmJiBkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKIAkJaWYgKHRhZ19tb2RlID09IFRBR19TSU1QTEUpIHsKLQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgTVNHX1NJTVBMRV9UQUcsIHRxZCk7CiAJCQl0YWdfc3VmZml4ID0gIiwgc2ltcGxlIHRhZ3MiOwogCQl9IGVsc2UgaWYgKHRhZ19tb2RlID09IFRBR19PUkRFUkVEKSB7Ci0JCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXYsIE1TR19PUkRFUkVEX1RBRywgdHFkKTsKIAkJCXRhZ19zdWZmaXggPSAiLCBvcmRlcmVkIHRhZ3MiOwogCQl9IGVsc2UgewotCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB0cWQpOwogCQkJdGFnX3N1ZmZpeCA9ICIsIG5vIHRhZ3MiOwogCQl9CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldiwgdHFkKTsKIAl9IGVsc2UgaWYgKFRMREVWKGRldi0+dHlwZSkgJiYgbGlua2VkX2NvbW0pIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB0cWQpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHRxZCk7CiAJCXRhZ19zdWZmaXggPSAiLCB1bnRhZ2dlZCI7CiAJfSBlbHNlIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB1dHFkKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB1dHFkKTsKIAkJdGFnX3N1ZmZpeCA9ICIiOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnIuaCBiL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyLmgKaW5kZXggM2ZkMzA1ZC4uYjYwMzBlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnIuaAorKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMyci5oCkBAIC05NzIsMTEgKzk3Miw2IEBACiAJCSAgICBzdHJ1Y3QgYXR0b19pb2N0bCAqaW9jdGxfaGJhKTsKIGludCBlc2FzMnJfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiBpbnQgZXNhczJyX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBTY3NpX0hvc3QgKnNoKTsKLWludCBlc2FzMnJfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpkZXYpOwotaW50IGVzYXMycl9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYpOwotdm9pZCBlc2FzMnJfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldik7Ci1pbnQgZXNhczJyX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGRlcHRoLCBpbnQgcmVhc29uKTsKLWludCBlc2FzMnJfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCB0eXBlKTsKIGxvbmcgZXNhczJyX3Byb2NfaW9jdGwoc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIC8qIFNDU0kgZXJyb3IgaGFuZGxlciAoZWgpIGZ1bmN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfaW9jdGwuYyBiL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyX2lvY3RsLmMKaW5kZXggZDg5YTAyNy4uYmFmOTEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfaW9jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9pb2N0bC5jCkBAIC0xMTcsOSArMTE3LDggQEAKIAogCXJxID0gZXNhczJyX2FsbG9jX3JlcXVlc3QoYSk7CiAJaWYgKHJxID09IE5VTEwpIHsKLQkJdXAoJmEtPmZtX2FwaV9zZW1hcGhvcmUpOwogCQlmaS0+c3RhdHVzID0gRklfU1RBVF9CVVNZOwotCQlyZXR1cm47CisJCWdvdG8gZnJlZV9zZW07CiAJfQogCiAJaWYgKGZpID09ICZhLT5maXJtd2FyZS5oZWFkZXIpIHsKQEAgLTEzNSw3ICsxMzQsNyBAQAogCQlpZiAoYS0+ZmlybXdhcmUuaGVhZGVyX2J1ZmYgPT0gTlVMTCkgewogCQkJZXNhczJyX2RlYnVnKCJmYWlsZWQgdG8gYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlciEiKTsKIAkJCWZpLT5zdGF0dXMgPSBGSV9TVEFUX0JVU1k7Ci0JCQlyZXR1cm47CisJCQlnb3RvIGZyZWVfcmVxOwogCQl9CiAKIAkJbWVtY3B5KGEtPmZpcm13YXJlLmhlYWRlcl9idWZmLCBmaSwKQEAgLTE3MSw5ICsxNzAsMTAgQEAKIAkJCQkgIGEtPmZpcm13YXJlLmhlYWRlcl9idWZmLAogCQkJCSAgKGRtYV9hZGRyX3QpYS0+ZmlybXdhcmUuaGVhZGVyX2J1ZmZfcGh5cyk7CiAJfQotCi0JdXAoJmEtPmZtX2FwaV9zZW1hcGhvcmUpOworZnJlZV9yZXE6CiAJZXNhczJyX2ZyZWVfcmVxdWVzdChhLCAoc3RydWN0IGVzYXMycl9yZXF1ZXN0ICopcnEpOworZnJlZV9zZW06CisJdXAoJmEtPmZtX2FwaV9zZW1hcGhvcmUpOwogCXJldHVybjsKIAogfQpAQCAtMTQyMCw5ICsxNDIwLDEwIEBACiAKIAkJcnEgPSBlc2FzMnJfYWxsb2NfcmVxdWVzdChhKTsKIAkJaWYgKHJxID09IE5VTEwpIHsKLQkJCXVwKCZhLT5udnJhbV9zZW1hcGhvcmUpOwotCQkJaW9jdGwtPmRhdGEucHJ3LmNvZGUgPSAwOwotCQkJYnJlYWs7CisJCQlrZnJlZShpb2N0bCk7CisJCQllc2FzMnJfbG9nKEVTQVMyUl9MT0dfV0FSTiwKKwkJCSAgICJjb3VsZCBub3QgYWxsb2NhdGUgYW4gaW50ZXJuYWwgcmVxdWVzdCIpOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAogCQljb2RlID0gZXNhczJyX3dyaXRlX3BhcmFtcyhhLCBycSwKQEAgLTE1MjMsOSArMTUyNCwxMiBAQAogCQljYXNlIC1FSU5WQUw6CiAJCQlpb2N0bC0+aGVhZGVyLnJldHVybl9jb2RlID0gSU9DVExfSU5WQUxJRF9QQVJBTTsKIAkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpb2N0bC0+aGVhZGVyLnJldHVybl9jb2RlID0gSU9DVExfR0VORVJBTF9FUlJPUjsKKwkJCWJyZWFrOwogCQl9CiAKLQkJaW9jdGwtPmhlYWRlci5yZXR1cm5fY29kZSA9IElPQ1RMX0dFTkVSQUxfRVJST1I7CiAJfQogCiAJLyogQWx3YXlzIGNvcHkgdGhlIGJ1ZmZlciBiYWNrLCBpZiBvbmx5IHRvIHBpY2sgdXAgdGhlIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfbWFpbi5jIGIvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfbWFpbi5jCmluZGV4IDY1MDRhMTkuLjU5M2ZmOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9tYWluLmMKQEAgLTI1NCwxMiArMjU0LDEwIEBACiAJLnVzZV9jbHVzdGVyaW5nCQkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuZW11bGF0ZWQJCQk9IDAsCiAJLnByb2NfbmFtZQkJCT0gRVNBUzJSX0RSVlJfTkFNRSwKLQkuc2xhdmVfY29uZmlndXJlCQk9IGVzYXMycl9zbGF2ZV9jb25maWd1cmUsCi0JLnNsYXZlX2FsbG9jCQkJPSBlc2FzMnJfc2xhdmVfYWxsb2MsCi0JLnNsYXZlX2Rlc3Ryb3kJCQk9IGVzYXMycl9zbGF2ZV9kZXN0cm95LAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJCT0gZXNhczJyX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gZXNhczJyX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCQk9IHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUsCiAJLm1heF9zZWN0b3JzCQkJPSAweEZGRkYsCisJLnVzZV9ibGtfdGFncwkJCT0gMSwKIH07CiAKIGludCBzZ2xfcGFnZV9zaXplID0gNTEyOwpAQCAtMTA1Nyw3ICsxMDU1LDcgQEAKIAogCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCi0JCXJldHVybiAwOworCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYS0+cXVldWVfbG9jaywgZmxhZ3MpOwpAQCAtMTI1OSw2MCArMTI1Nyw2IEBACiAJcmV0dXJuIGVzYXMycl9kZXZfdGFyZ19yZXNldChjbWQsIHRydWUpOwogfQogCi1pbnQgZXNhczJyX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGRlcHRoLCBpbnQgcmVhc29uKQotewotCWVzYXMycl9sb2coRVNBUzJSX0xPR19JTkZPLCAiY2hhbmdlX3F1ZXVlX2RlcHRoICVwLCAlZCIsIGRldiwgZGVwdGgpOwotCi0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCBzY3NpX2dldF90YWdfdHlwZShkZXYpLCBkZXB0aCk7Ci0KLQlyZXR1cm4gZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLQotaW50IGVzYXMycl9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IHR5cGUpCi17Ci0JZXNhczJyX2xvZyhFU0FTMlJfTE9HX0lORk8sICJjaGFuZ2VfcXVldWVfdHlwZSAlcCwgJWQiLCBkZXYsIHR5cGUpOwotCi0JaWYgKGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShkZXYsIHR5cGUpOwotCi0JCWlmICh0eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3EoZGV2LCBkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShkZXYsIGRldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZSB7Ci0JCXR5cGUgPSAwOwotCX0KLQotCXJldHVybiB0eXBlOwotfQotCi1pbnQgZXNhczJyX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2KQotewotCXJldHVybiAwOwotfQotCi1pbnQgZXNhczJyX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldikKLXsKLQllc2FzMnJfbG9nX2RldihFU0FTMlJfTE9HX0lORk8sICYoZGV2LT5zZGV2X2dlbmRldiksCi0JCSAgICAgICAiZXNhczJyX3NsYXZlX2NvbmZpZ3VyZSgpIik7Ci0KLQlpZiAoZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKGRldiwgTVNHX1NJTVBMRV9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShkZXYsIGNtZF9wZXJfbHVuKTsKLQl9IGVsc2UgewotCQlzY3NpX3NldF90YWdfdHlwZShkZXYsIDApOwotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKGRldiwgY21kX3Blcl9sdW4pOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIGVzYXMycl9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2KQotewotCWVzYXMycl9sb2dfZGV2KEVTQVMyUl9MT0dfSU5GTywgJihkZXYtPnNkZXZfZ2VuZGV2KSwKLQkJICAgICAgICJlc2FzMnJfc2xhdmVfZGVzdHJveSgpIik7Ci19Ci0KIHZvaWQgZXNhczJyX2xvZ19yZXF1ZXN0X2ZhaWx1cmUoc3RydWN0IGVzYXMycl9hZGFwdGVyICphLAogCQkJCXN0cnVjdCBlc2FzMnJfcmVxdWVzdCAqcnEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCmluZGV4IDU1NTQ4ZGMuLmNlNWJkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCkBAIC00OSw1NSArNDksNjcgQEAKICNkZWZpbmUgRVNQX0RFQlVHX0RBVEFET05FCTB4MDAwMDAxMDAKICNkZWZpbmUgRVNQX0RFQlVHX1JFQ09OTkVDVAkweDAwMDAwMjAwCiAjZGVmaW5lIEVTUF9ERUJVR19BVVRPU0VOU0UJMHgwMDAwMDQwMAorI2RlZmluZSBFU1BfREVCVUdfRVZFTlQJCTB4MDAwMDA4MDAKKyNkZWZpbmUgRVNQX0RFQlVHX0NPTU1BTkQJMHgwMDAwMTAwMAogCiAjZGVmaW5lIGVzcF9sb2dfaW50cihmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfSU5UUikgXAotCQlwcmludGsoZiwgIyMgYSk7IFwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX2xvZ19yZXNldChmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfUkVTRVQpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfbXNnaW4oZiwgYS4uLikgXAogZG8gewlpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX01TR0lOKSBcCi0JCXByaW50ayhmLCAjIyBhKTsgXAorCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgZXNwLT5ob3N0LCBmLCAjIyBhKTsJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBlc3BfbG9nX21zZ291dChmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfTVNHT1VUKSBcCi0JCXByaW50ayhmLCAjIyBhKTsgXAorCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgZXNwLT5ob3N0LCBmLCAjIyBhKTsJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBlc3BfbG9nX2NtZGRvbmUoZiwgYS4uLikgXAogZG8gewlpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX0NNRERPTkUpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfZGlzY29ubmVjdChmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfRElTQ09OTkVDVCkgXAotCQlwcmludGsoZiwgIyMgYSk7IFwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX2xvZ19kYXRhc3RhcnQoZiwgYS4uLikgXAogZG8gewlpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX0RBVEFTVEFSVCkgXAotCQlwcmludGsoZiwgIyMgYSk7IFwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX2xvZ19kYXRhZG9uZShmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfREFUQURPTkUpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfcmVjb25uZWN0KGYsIGEuLi4pIFwKIGRvIHsJaWYgKGVzcF9kZWJ1ZyAmIEVTUF9ERUJVR19SRUNPTk5FQ1QpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfYXV0b3NlbnNlKGYsIGEuLi4pIFwKIGRvIHsJaWYgKGVzcF9kZWJ1ZyAmIEVTUF9ERUJVR19BVVRPU0VOU0UpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGVzcF9sb2dfZXZlbnQoZiwgYS4uLikgXAorZG8geyAgIGlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfRVZFTlQpCVwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgZXNwX2xvZ19jb21tYW5kKGYsIGEuLi4pIFwKK2RvIHsgICBpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX0NPTU1BTkQpCVwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX3JlYWQ4KFJFRykJCWVzcC0+b3BzLT5lc3BfcmVhZDgoZXNwLCBSRUcpCkBAIC0xMjYsMTAgKzEzOCwyOSBAQAogCiAJZXNwLT5lc3BfZXZlbnRfY3VyID0gKGlkeCArIDEpICYgKEVTUF9FVkVOVF9MT0dfU1ogLSAxKTsKIAorCWVzcF9sb2dfY29tbWFuZCgiY21kWyUwMnhdXG4iLCB2YWwpOwogCWVzcF93cml0ZTgodmFsLCBFU1BfQ01EKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9lc3BfY21kKTsKIAorc3RhdGljIHZvaWQgZXNwX3NlbmRfZG1hX2NtZChzdHJ1Y3QgZXNwICplc3AsIGludCBsZW4sIGludCBtYXhfbGVuLCBpbnQgY21kKQoreworCWlmIChlc3AtPmZsYWdzICYgRVNQX0ZMQUdfVVNFX0ZJRk8pIHsKKwkJaW50IGk7CisKKwkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9GTFVTSCk7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCWVzcF93cml0ZTgoZXNwLT5jb21tYW5kX2Jsb2NrW2ldLCBFU1BfRkRBVEEpOworCQlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOworCX0gZWxzZSB7CisJCWlmIChlc3AtPnJldiA9PSBGQVNITUUpCisJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKKwkJY21kIHw9IEVTUF9DTURfRE1BOworCQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSwKKwkJCQkgICAgICAgbGVuLCBtYXhfbGVuLCAwLCBjbWQpOworCX0KK30KKwogc3RhdGljIHZvaWQgZXNwX2V2ZW50KHN0cnVjdCBlc3AgKmVzcCwgdTggdmFsKQogewogCXN0cnVjdCBlc3BfZXZlbnRfZW50ICpwOwpAQCAtMTUwLDE5ICsxODEsMTcgQEAKIAlpbnQgaWR4ID0gZXNwLT5lc3BfZXZlbnRfY3VyOwogCWludCBzdG9wID0gaWR4OwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggImVzcCVkOiBEdW1waW5nIGNvbW1hbmQgbG9nXG4iLAotCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LCAiRHVtcGluZyBjb21tYW5kIGxvZ1xuIik7CiAJZG8gewogCQlzdHJ1Y3QgZXNwX2V2ZW50X2VudCAqcCA9ICZlc3AtPmVzcF9ldmVudF9sb2dbaWR4XTsKIAotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZXNwJWQ6IGVudFslZF0gJXMgIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBpZHgsCi0JCSAgICAgICBwLT50eXBlID09IEVTUF9FVkVOVF9UWVBFX0NNRCA/ICJDTUQiIDogIkVWRU5UIik7Ci0KLQkJcHJpbnRrKCJ2YWxbJTAyeF0gc3JlZ1slMDJ4XSBzZXFyZWdbJTAyeF0gIgotCQkgICAgICAgInNyZWcyWyUwMnhdIGlyZWdbJTAyeF0gc3NbJTAyeF0gZXZlbnRbJTAyeF1cbiIsCi0JCSAgICAgICBwLT52YWwsIHAtPnNyZWcsIHAtPnNlcXJlZywKLQkJICAgICAgIHAtPnNyZWcyLCBwLT5pcmVnLCBwLT5zZWxlY3Rfc3RhdGUsIHAtPmV2ZW50KTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LAorCQkJICAgICAiZW50WyVkXSAlcyB2YWxbJTAyeF0gc3JlZ1slMDJ4XSBzZXFyZWdbJTAyeF0gIgorCQkJICAgICAic3JlZzJbJTAyeF0gaXJlZ1slMDJ4XSBzc1slMDJ4XSBldmVudFslMDJ4XVxuIiwKKwkJCSAgICAgaWR4LAorCQkJICAgICBwLT50eXBlID09IEVTUF9FVkVOVF9UWVBFX0NNRCA/ICJDTUQiIDogIkVWRU5UIiwKKwkJCSAgICAgcC0+dmFsLCBwLT5zcmVnLCBwLT5zZXFyZWcsCisJCQkgICAgIHAtPnNyZWcyLCBwLT5pcmVnLCBwLT5zZWxlY3Rfc3RhdGUsIHAtPmV2ZW50KTsKIAogCQlpZHggPSAoaWR4ICsgMSkgJiAoRVNQX0VWRU5UX0xPR19TWiAtIDEpOwogCX0gd2hpbGUgKGlkeCAhPSBzdG9wKTsKQEAgLTE3Niw5ICsyMDUsOCBAQAogCiAJCXdoaWxlIChlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTKSB7CiAJCQlpZiAoLS1saW0gPT0gMCkgewotCQkJCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiZXNwJWQ6IEVTUF9GRl9CWVRFUyAiCi0JCQkJICAgICAgICJ3aWxsIG5vdCBjbGVhciFcbiIsCi0JCQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkKTsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9BTEVSVCwgZXNwLT5ob3N0LAorCQkJCQkgICAgICJFU1BfRkZfQllURVMgd2lsbCBub3QgY2xlYXIhXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXVkZWxheSgxKTsKQEAgLTI0MCw2ICsyNjgsMTkgQEAKIAl9IGVsc2UgewogCQllc3AtPm1pbl9wZXJpb2QgPSAoKDUgKiBlc3AtPmNjeWNsZSkgLyAxMDAwKTsKIAl9CisJaWYgKGVzcC0+cmV2ID09IEZBUzIzNikgeworCQkvKgorCQkgKiBUaGUgQU01M2M5NzQgY2hpcCByZXR1cm5zIHRoZSBzYW1lIElEIGFzIEZBUzIzNjsKKwkJICogdHJ5IHRvIGNvbmZpZ3VyZSBnbGl0Y2ggZWF0ZXIuCisJCSAqLworCQl1OCBjb25maWc0ID0gRVNQX0NPTkZJRzRfR0UxOworCQllc3Bfd3JpdGU4KGNvbmZpZzQsIEVTUF9DRkc0KTsKKwkJY29uZmlnNCA9IGVzcF9yZWFkOChFU1BfQ0ZHNCk7CisJCWlmIChjb25maWc0ICYgRVNQX0NPTkZJRzRfR0UxKSB7CisJCQllc3AtPnJldiA9IFBDU0NTSTsKKwkJCWVzcF93cml0ZTgoZXNwLT5jb25maWc0LCBFU1BfQ0ZHNCk7CisJCX0KKwl9CiAJZXNwLT5tYXhfcGVyaW9kID0gKGVzcC0+bWF4X3BlcmlvZCArIDMpPj4yOwogCWVzcC0+bWluX3BlcmlvZCA9IChlc3AtPm1pbl9wZXJpb2QgKyAzKT4+MjsKIApAQCAtMjY1LDcgKzMwNiw4IEBACiAJCS8qIGZhbGx0aHJvdWdoLi4uICovCiAKIAljYXNlIEZBUzIzNjoKLQkJLyogRmFzdCAyMzYgb3IgSE1FICovCisJY2FzZSBQQ1NDU0k6CisJCS8qIEZhc3QgMjM2LCBBTTUzYzk3NCBvciBITUUgKi8KIAkJZXNwX3dyaXRlOChlc3AtPmNvbmZpZzIsIEVTUF9DRkcyKTsKIAkJaWYgKGVzcC0+cmV2ID09IEZBU0hNRSkgewogCQkJdTggY2ZnMyA9IGVzcC0+dGFyZ2V0WzBdLmVzcF9jb25maWczOwpAQCAtMzgzLDEyICs0MjUsMTEgQEAKIAlwLT5jdXJfcmVzaWR1ZSAtPSBsZW47CiAJcC0+dG90X3Jlc2lkdWUgLT0gbGVuOwogCWlmIChwLT5jdXJfcmVzaWR1ZSA8IDAgfHwgcC0+dG90X3Jlc2lkdWUgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBEYXRhIHRyYW5zZmVyIG92ZXJmbG93LlxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkKTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IGN1cl9yZXNpZHVlWyVkXSB0b3RfcmVzaWR1ZVslZF0gIgotCQkgICAgICAgImxlblsldV1cbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwKLQkJICAgICAgIHAtPmN1cl9yZXNpZHVlLCBwLT50b3RfcmVzaWR1ZSwgbGVuKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkgICAgICJEYXRhIHRyYW5zZmVyIG92ZXJmbG93LlxuIik7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiY3VyX3Jlc2lkdWVbJWRdIHRvdF9yZXNpZHVlWyVkXSBsZW5bJXVdXG4iLAorCQkJICAgICBwLT5jdXJfcmVzaWR1ZSwgcC0+dG90X3Jlc2lkdWUsIGxlbik7CiAJCXAtPmN1cl9yZXNpZHVlID0gMDsKIAkJcC0+dG90X3Jlc2lkdWUgPSAwOwogCX0KQEAgLTYwNCw5ICs2NDUsOCBAQAogCiAKIAlpZiAoIWVudC0+c2Vuc2VfcHRyKSB7Ci0JCWVzcF9sb2dfYXV0b3NlbnNlKCJlc3AlZDogRG9pbmcgYXV0by1zZW5zZSBmb3IgIgotCQkJCSAgInRndFslZF0gbHVuWyVkXVxuIiwKLQkJCQkgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCB0Z3QsIGx1bik7CisJCWVzcF9sb2dfYXV0b3NlbnNlKCJEb2luZyBhdXRvLXNlbnNlIGZvciB0Z3RbJWRdIGx1blslZF1cbiIsCisJCQkJICB0Z3QsIGx1bik7CiAKIAkJZW50LT5zZW5zZV9wdHIgPSBjbWQtPnNlbnNlX2J1ZmZlcjsKIAkJZW50LT5zZW5zZV9kbWEgPSBlc3AtPm9wcy0+bWFwX3NpbmdsZShlc3AsCkBAIC02NDIsMTAgKzY4Miw3IEBACiAKIAl2YWwgPSAocCAtIGVzcC0+Y29tbWFuZF9ibG9jayk7CiAKLQlpZiAoZXNwLT5yZXYgPT0gRkFTSE1FKQotCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKLQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSwKLQkJCSAgICAgICB2YWwsIDE2LCAwLCBFU1BfQ01EX0RNQSB8IEVTUF9DTURfU0VMQSk7CisJZXNwX3NlbmRfZG1hX2NtZChlc3AsIHZhbCwgMTYsIEVTUF9DTURfU0VMQSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXNwX2NtZF9lbnRyeSAqZmluZF9hbmRfcHJlcF9pc3N1YWJsZV9jb21tYW5kKHN0cnVjdCBlc3AgKmVzcCkKQEAgLTY2Myw3ICs3MDAsNyBAQAogCQkJcmV0dXJuIGVudDsKIAkJfQogCi0JCWlmICghc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgJmVudC0+dGFnWzBdKSkgeworCQlpZiAoIXNwaV9wb3B1bGF0ZV90YWdfbXNnKCZlbnQtPnRhZ1swXSwgY21kKSkgewogCQkJZW50LT50YWdbMF0gPSAwOwogCQkJZW50LT50YWdbMV0gPSAwOwogCQl9CkBAIC03ODEsMTIgKzgxOCwxMiBAQAogCX0KIAogCWlmICghKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ET0lOR19TTE9XQ01EKSkgewotCQlzdGFydF9jbWQgPSBFU1BfQ01EX0RNQSB8IEVTUF9DTURfU0VMQTsKKwkJc3RhcnRfY21kID0gRVNQX0NNRF9TRUxBOwogCQlpZiAoZW50LT50YWdbMF0pIHsKIAkJCSpwKysgPSBlbnQtPnRhZ1swXTsKIAkJCSpwKysgPSBlbnQtPnRhZ1sxXTsKIAotCQkJc3RhcnRfY21kID0gRVNQX0NNRF9ETUEgfCBFU1BfQ01EX1NBMzsKKwkJCXN0YXJ0X2NtZCA9IEVTUF9DTURfU0EzOwogCQl9CiAKIAkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y21kX2xlbjsgaSsrKQpAQCAtODA2LDcgKzg0Myw3IEBACiAJCQllc3AtPm1zZ19vdXRfbGVuICs9IDI7CiAJCX0KIAotCQlzdGFydF9jbWQgPSBFU1BfQ01EX0RNQSB8IEVTUF9DTURfU0VMQVM7CisJCXN0YXJ0X2NtZCA9IEVTUF9DTURfU0VMQVM7CiAJCWVzcC0+c2VsZWN0X3N0YXRlID0gRVNQX1NFTEVDVF9NU0dPVVQ7CiAJfQogCXZhbCA9IHRndDsKQEAgLTgyNiwxMCArODYzLDcgQEAKIAkJcHJpbnRrKCJdXG4iKTsKIAl9CiAKLQlpZiAoZXNwLT5yZXYgPT0gRkFTSE1FKQotCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKLQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSwKLQkJCSAgICAgICB2YWwsIDE2LCAwLCBzdGFydF9jbWQpOworCWVzcF9zZW5kX2RtYV9jbWQoZXNwLCB2YWwsIDE2LCBzdGFydF9jbWQpOwogfQogCiBzdGF0aWMgc3RydWN0IGVzcF9jbWRfZW50cnkgKmVzcF9nZXRfZW50KHN0cnVjdCBlc3AgKmVzcCkKQEAgLTk1Myw4ICs5ODcsOCBAQAogCQkgKiAtIERNQSBwcm9ncmFtbWVkIHdpdGggd3JvbmcgZGlyZWN0aW9uCiAJCSAqIC0gaW1wcm9wZXIgcGhhc2UgY2hhbmdlCiAJCSAqLwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlc3AlZDogR3Jvc3MgZXJyb3Igc3JlZ1slMDJ4XVxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlc3AtPnNyZWcpOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwKKwkJCSAgICAgIkdyb3NzIGVycm9yIHNyZWdbJTAyeF1cbiIsIGVzcC0+c3JlZyk7CiAJCS8qIFhYWCBSZXNldCB0aGUgY2hpcC4gWFhYICovCiAJCXJldHVybiAxOwogCX0KQEAgLTk3NCw3ICsxMDA4LDYgQEAKIAogCWRlZmF1bHQ6CiAJCWlmICghKGVzcC0+c3JlZyAmIEVTUF9TVEFUX0lOVFIpKSB7Ci0JCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CiAJCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfU1IpCiAJCQkJcmV0dXJuIDE7CiAKQEAgLTk4MiwxNCArMTAxNSwxMyBAQAogCQkJICogRVNQIGlzIG5vdCwgdGhlIG9ubHkgcG9zc2liaWxpdHkgaXMgYSBETUEgZXJyb3IuCiAJCQkgKi8KIAkJCWlmICghZXNwLT5vcHMtPmRtYV9lcnJvcihlc3ApKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFNwdXJpb3VzIGlycSwgIgotCQkJCSAgICAgICAic3JlZz0lMDJ4LlxuIiwKLQkJCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+c3JlZyk7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkJCSAgICAgIlNwdXJpb3VzIGlycSwgc3JlZz0lMDJ4LlxuIiwKKwkJCQkJICAgICBlc3AtPnNyZWcpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IERNQSBlcnJvclxuIiwKLQkJCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwgIkRNQSBlcnJvclxuIik7CiAKIAkJCS8qIFhYWCBSZXNldCB0aGUgY2hpcC4gWFhYICovCiAJCQlyZXR1cm4gLTE7CkBAIC0xMDAyLDcgKzEwMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBlc3Bfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGVzcCAqZXNwKQogewotCWVzcF9sb2dfcmVzZXQoIkVTUDogZXNwX3NjaGVkdWxlX3Jlc2V0KCkgZnJvbSAlcGZcbiIsCisJZXNwX2xvZ19yZXNldCgiZXNwX3NjaGVkdWxlX3Jlc2V0KCkgZnJvbSAlcGZcbiIsCiAJCSAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJZXNwLT5mbGFncyB8PSBFU1BfRkxBR19SRVNFVFRJTkc7CiAJZXNwX2V2ZW50KGVzcCwgRVNQX0VWRU5UX1JFU0VUKTsKQEAgLTEwMTksMjAgKzEwNTEsMjAgQEAKIAlpbnQgaTsKIAogCWlmICghbHAtPm51bV90YWdnZWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCB3L251bV90YWdnZWQ9PTBcbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0IHcvbnVtX3RhZ2dlZD09MFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWVzcF9sb2dfcmVjb25uZWN0KCJFU1A6IHJlY29ubmVjdCB0YWcsICIpOworCWVzcF9sb2dfcmVjb25uZWN0KCJyZWNvbm5lY3QgdGFnLCAiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBFU1BfUVVJQ0tJUlFfTElNSVQ7IGkrKykgewogCQlpZiAoZXNwLT5vcHMtPmlycV9wZW5kaW5nKGVzcCkpCiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gRVNQX1FVSUNLSVJRX0xJTUlUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBSZWNvbm5lY3QgSVJRMSB0aW1lb3V0XG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQpOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwKKwkJCSAgICAgIlJlY29ubmVjdCBJUlExIHRpbWVvdXRcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTEwNDMsMTQgKzEwNzUsMTQgQEAKIAkJCSAgaSwgZXNwLT5pcmVnLCBlc3AtPnNyZWcpOwogCiAJaWYgKGVzcC0+aXJlZyAmIEVTUF9JTlRSX0RDKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBSZWNvbm5lY3QsIGdvdCBkaXNjb25uZWN0LlxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkgICAgICJSZWNvbm5lY3QsIGdvdCBkaXNjb25uZWN0LlxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWlmICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9NSVApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCwgbm90IE1JUCBzcmVnWyUwMnhdLlxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlc3AtPnNyZWcpOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwKKwkJCSAgICAgIlJlY29ubmVjdCwgbm90IE1JUCBzcmVnWyUwMnhdLlxuIiwgZXNwLT5zcmVnKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMDczLDggKzExMDUsNyBAQAogCQl1ZGVsYXkoMSk7CiAJfQogCWlmIChpID09IEVTUF9SRVNFTEVDVF9UQUdfTElNSVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCBJUlEyIHRpbWVvdXRcbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LCAiUmVjb25uZWN0IElSUTIgdGltZW91dFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAllc3AtPm9wcy0+ZG1hX2RyYWluKGVzcCk7CkBAIC0xMDg3LDE3ICsxMTE4LDE3IEBACiAKIAlpZiAoZXNwLT5jb21tYW5kX2Jsb2NrWzBdIDwgU0lNUExFX1FVRVVFX1RBRyB8fAogCSAgICBlc3AtPmNvbW1hbmRfYmxvY2tbMF0gPiBPUkRFUkVEX1FVRVVFX1RBRykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlc3AlZDogUmVjb25uZWN0LCBiYWQgdGFnICIKLQkJICAgICAgICJ0eXBlICUwMnguXG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+Y29tbWFuZF9ibG9ja1swXSk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0LCBiYWQgdGFnIHR5cGUgJTAyeC5cbiIsCisJCQkgICAgIGVzcC0+Y29tbWFuZF9ibG9ja1swXSk7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWVudCA9IGxwLT50YWdnZWRfY21kc1tlc3AtPmNvbW1hbmRfYmxvY2tbMV1dOwogCWlmICghZW50KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBSZWNvbm5lY3QsIG5vIGVudHJ5IGZvciAiCi0JCSAgICAgICAidGFnICUwMnguXG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+Y29tbWFuZF9ibG9ja1sxXSk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0LCBubyBlbnRyeSBmb3IgdGFnICUwMnguXG4iLAorCQkJICAgICBlc3AtPmNvbW1hbmRfYmxvY2tbMV0pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTExNjMsOSArMTE5NCw5IEBACiAJdHAgPSAmZXNwLT50YXJnZXRbdGFyZ2V0XTsKIAlkZXYgPSBfX3Njc2lfZGV2aWNlX2xvb2t1cF9ieV90YXJnZXQodHAtPnN0YXJnZXQsIGx1bik7CiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCwgbm8gbHAgIgotCQkgICAgICAgInRndFsldV0gbHVuWyV1XVxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCB0YXJnZXQsIGx1bik7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0LCBubyBscCB0Z3RbJXVdIGx1blsldV1cbiIsCisJCQkgICAgIHRhcmdldCwgbHVuKTsKIAkJZ290byBkb19yZXNldDsKIAl9CiAJbHAgPSBkZXYtPmhvc3RkYXRhOwpAQCAtMTI5MSw4ICsxMzIyLDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcHJpbnRrKCJFU1A6IFVuZXhwZWN0ZWQgc2VsZWN0aW9uIGNvbXBsZXRpb24gaXJlZ1sleF0uXG4iLAotCSAgICAgICBlc3AtPmlyZWcpOworCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJICAgICAiVW5leHBlY3RlZCBzZWxlY3Rpb24gY29tcGxldGlvbiBpcmVnWyV4XVxuIiwgZXNwLT5pcmVnKTsKIAllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMTIsMTEgKzEzNDMsNDIgQEAKIAkJCSAgKCgodW5zaWduZWQgaW50KWVzcF9yZWFkOChFU1BfVENNRUQpKSA8PCA4KSk7CiAJCWlmIChlc3AtPnJldiA9PSBGQVNITUUpCiAJCQllY291bnQgfD0gKCh1bnNpZ25lZCBpbnQpZXNwX3JlYWQ4KEZBU19STE8pKSA8PCAxNjsKKwkJaWYgKGVzcC0+cmV2ID09IFBDU0NTSSAmJiAoZXNwLT5jb25maWcyICYgRVNQX0NPTkZJRzJfRkVOQUIpKQorCQkJZWNvdW50IHw9ICgodW5zaWduZWQgaW50KWVzcF9yZWFkOChFU1BfVENISSkpIDw8IDE2OwogCX0KIAogCWJ5dGVzX3NlbnQgPSBlc3AtPmRhdGFfZG1hX2xlbjsKIAlieXRlc19zZW50IC09IGVjb3VudDsKIAorCS8qCisJICogVGhlIGFtNTNjOTc0IGhhcyBhIERNQSAncGVjdWxhcml0eScuIFRoZSBkb2Mgc3RhdGVzOgorCSAqIEluIHNvbWUgb2RkIGJ5dGUgY29uZGl0aW9ucywgb25lIHJlc2lkdWFsIGJ5dGUgd2lsbAorCSAqIGJlIGxlZnQgaW4gdGhlIFNDU0kgRklGTywgYW5kIHRoZSBGSUZPIEZsYWdzIHdpbGwKKwkgKiBuZXZlciBjb3VudCB0byAnMCAnLiBXaGVuIHRoaXMgaGFwcGVucywgdGhlIHJlc2lkdWFsCisJICogYnl0ZSBzaG91bGQgYmUgcmV0cmlldmVkIHZpYSBQSU8gZm9sbG93aW5nIGNvbXBsZXRpb24KKwkgKiBvZiB0aGUgQkxBU1Qgb3BlcmF0aW9uLgorCSAqLworCWlmIChmaWZvX2NudCA9PSAxICYmIGVudC0+ZmxhZ3MgJiBFU1BfQ01EX0ZMQUdfUkVTSURVQUwpIHsKKwkJc2l6ZV90IGNvdW50ID0gMTsKKwkJc2l6ZV90IG9mZnNldCA9IGJ5dGVzX3NlbnQ7CisJCXU4IGJ2YWwgPSBlc3BfcmVhZDgoRVNQX0ZEQVRBKTsKKworCQlpZiAoZW50LT5mbGFncyAmIEVTUF9DTURfRkxBR19BVVRPU0VOU0UpCisJCQllbnQtPnNlbnNlX3B0cltieXRlc19zZW50XSA9IGJ2YWw7CisJCWVsc2UgeworCQkJc3RydWN0IGVzcF9jbWRfcHJpdiAqcCA9IEVTUF9DTURfUFJJVihjbWQpOworCQkJdTggKnB0cjsKKworCQkJcHRyID0gc2NzaV9rbWFwX2F0b21pY19zZyhwLT5jdXJfc2csIHAtPnUubnVtX3NnLAorCQkJCQkJICAmb2Zmc2V0LCAmY291bnQpOworCQkJaWYgKGxpa2VseShwdHIpKSB7CisJCQkJKihwdHIgKyBvZmZzZXQpID0gYnZhbDsKKwkJCQlzY3NpX2t1bm1hcF9hdG9taWNfc2cocHRyKTsKKwkJCX0KKwkJfQorCQlieXRlc19zZW50ICs9IGZpZm9fY250OworCQllbnQtPmZsYWdzICY9IH5FU1BfQ01EX0ZMQUdfUkVTSURVQUw7CisJfQogCWlmICghKGVudC0+ZmxhZ3MgJiBFU1BfQ01EX0ZMQUdfV1JJVEUpKQogCQlieXRlc19zZW50IC09IGZpZm9fY250OwogCkBAIC0xNTU2LDggKzE2MTgsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JcHJpbnRrKCJFU1A6IFVuZXhwZWN0ZWQgZXh0ZW5kZWQgbXNnIHR5cGUgJXhcbiIsCi0JICAgICAgIGVzcC0+bXNnX2luWzJdKTsKKwlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCSAgICAgIlVuZXhwZWN0ZWQgZXh0ZW5kZWQgbXNnIHR5cGUgJXhcbiIsIGVzcC0+bXNnX2luWzJdKTsKIAogCWVzcC0+bXNnX291dFswXSA9IEFCT1JUX1RBU0tfU0VUOwogCWVzcC0+bXNnX291dF9sZW4gPSAxOwpAQCAtMTU3NCw3ICsxNjM2LDggQEAKIAogCWlmIChtc2cwICYgMHg4MCkgewogCQkvKiBJZGVudGlmeSAqLwotCQlwcmludGsoIkVTUDogVW5leHBlY3RlZCBtc2dpbiBpZGVudGlmeVxuIik7CisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCSAgICAgIlVuZXhwZWN0ZWQgbXNnaW4gaWRlbnRpZnlcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2NDAsMTAgKzE3MDMsMTIgQEAKIAogc3RhdGljIGludCBlc3BfcHJvY2Vzc19ldmVudChzdHJ1Y3QgZXNwICplc3ApCiB7Ci0JaW50IHdyaXRlOworCWludCB3cml0ZSwgaTsKIAogYWdhaW46CiAJd3JpdGUgPSAwOworCWVzcF9sb2dfZXZlbnQoInByb2Nlc3MgZXZlbnQgJWQgcGhhc2UgJXhcbiIsCisJCSAgICAgIGVzcC0+ZXZlbnQsIGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKTsKIAlzd2l0Y2ggKGVzcC0+ZXZlbnQpIHsKIAljYXNlIEVTUF9FVkVOVF9DSEVDS19QSEFTRToKIAkJc3dpdGNoIChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgewpAQCAtMTY3Myw4ICsxNzM4LDkgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoIkVTUDogVW5leHBlY3RlZCBwaGFzZSwgc3JlZz0lMDJ4XG4iLAotCQkJICAgICAgIGVzcC0+c3JlZyk7CisJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkJICAgICAiVW5leHBlY3RlZCBwaGFzZSwgc3JlZz0lMDJ4XG4iLAorCQkJCSAgICAgZXNwLT5zcmVnKTsKIAkJCWVzcF9zY2hlZHVsZV9yZXNldChlc3ApOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE3MDgsMTggKzE3NzQsMTcgQEAKIAkJZXNwLT5kYXRhX2RtYV9sZW4gPSBkbWFfbGVuOwogCiAJCWlmICghZG1hX2xlbikgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IERNQSBsZW5ndGggaXMgemVybyFcbiIsCi0JCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQpOwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IGN1ciBhZHJbJTA4bGx4XSBsZW5bJTA4eF1cbiIsCi0JCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllc3BfY3VyX2RtYV9hZGRyKGVudCwgY21kKSwKLQkJCSAgICAgICBlc3BfY3VyX2RtYV9sZW4oZW50LCBjbWQpKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJCSAgICAgIkRNQSBsZW5ndGggaXMgemVybyFcbiIpOworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkJICAgICAiY3VyIGFkclslMDhsbHhdIGxlblslMDh4XVxuIiwKKwkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXNwX2N1cl9kbWFfYWRkcihlbnQsIGNtZCksCisJCQkJICAgICBlc3BfY3VyX2RtYV9sZW4oZW50LCBjbWQpKTsKIAkJCWVzcF9zY2hlZHVsZV9yZXNldChlc3ApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQllc3BfbG9nX2RhdGFzdGFydCgiRVNQOiBzdGFydCBkYXRhIGFkZHJbJTA4bGx4XSBsZW5bJXVdICIKLQkJCQkgICJ3cml0ZSglZClcbiIsCisJCWVzcF9sb2dfZGF0YXN0YXJ0KCJzdGFydCBkYXRhIGFkZHJbJTA4bGx4XSBsZW5bJXVdIHdyaXRlKCVkKVxuIiwKIAkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZG1hX2FkZHIsIGRtYV9sZW4sIHdyaXRlKTsKIAogCQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZG1hX2FkZHIsIGRtYV9sZW4sIGRtYV9sZW4sCkBAIC0xNzMzLDcgKzE3OTgsOCBAQAogCQlpbnQgYnl0ZXNfc2VudDsKIAogCQlpZiAoZXNwLT5vcHMtPmRtYV9lcnJvcihlc3ApKSB7Ci0JCQlwcmludGsoIkVTUDogZGF0YSBkb25lLCBETUEgZXJyb3IsIHJlc2V0dGluZ1xuIik7CisJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkJICAgICAiZGF0YSBkb25lLCBETUEgZXJyb3IsIHJlc2V0dGluZ1xuIik7CiAJCQllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xNzQ5LDE0ICsxODE1LDE1IEBACiAJCQkvKiBXZSBzaG91bGQgYWx3YXlzIHNlZSBleGFjdGx5IGEgYnVzLXNlcnZpY2UKIAkJCSAqIGludGVycnVwdCBhdCB0aGUgZW5kIG9mIGEgc3VjY2Vzc2Z1bCB0cmFuc2Zlci4KIAkJCSAqLwotCQkJcHJpbnRrKCJFU1A6IGRhdGEgZG9uZSwgbm90IEJTRVJWLCByZXNldHRpbmdcbiIpOworCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LAorCQkJCSAgICAgImRhdGEgZG9uZSwgbm90IEJTRVJWLCByZXNldHRpbmdcbiIpOwogCQkJZXNwX3NjaGVkdWxlX3Jlc2V0KGVzcCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWJ5dGVzX3NlbnQgPSBlc3BfZGF0YV9ieXRlc19zZW50KGVzcCwgZW50LCBjbWQpOwogCi0JCWVzcF9sb2dfZGF0YWRvbmUoIkVTUDogZGF0YSBkb25lIGZsZ3NbJXhdIHNlbnRbJWRdXG4iLAorCQllc3BfbG9nX2RhdGFkb25lKCJkYXRhIGRvbmUgZmxnc1sleF0gc2VudFslZF1cbiIsCiAJCQkJIGVudC0+ZmxhZ3MsIGJ5dGVzX3NlbnQpOwogCiAJCWlmIChieXRlc19zZW50IDwgMCkgewpAQCAtMTc4NSw4ICsxODUyLDkgQEAKIAkJfQogCiAJCWlmIChlbnQtPm1lc3NhZ2UgIT0gQ09NTUFORF9DT01QTEVURSkgewotCQkJcHJpbnRrKCJFU1A6IFVuZXhwZWN0ZWQgbWVzc2FnZSAleCBpbiBzdGF0dXNcbiIsCi0JCQkgICAgICAgZW50LT5tZXNzYWdlKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCQkgICAgICJVbmV4cGVjdGVkIG1lc3NhZ2UgJXggaW4gc3RhdHVzXG4iLAorCQkJCSAgICAgZW50LT5tZXNzYWdlKTsKIAkJCWVzcF9zY2hlZHVsZV9yZXNldChlc3ApOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE4MDQsOCArMTg3Miw3IEBACiAJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0VTRUwpOwogCiAJCWlmIChlbnQtPm1lc3NhZ2UgPT0gQ09NTUFORF9DT01QTEVURSkgewotCQkJZXNwX2xvZ19jbWRkb25lKCJFU1A6IENvbW1hbmQgZG9uZSBzdGF0dXNbJXhdICIKLQkJCQkJIm1lc3NhZ2VbJXhdXG4iLAorCQkJZXNwX2xvZ19jbWRkb25lKCJDb21tYW5kIGRvbmUgc3RhdHVzWyV4XSBtZXNzYWdlWyV4XVxuIiwKIAkJCQkJZW50LT5zdGF0dXMsIGVudC0+bWVzc2FnZSk7CiAJCQlpZiAoZW50LT5zdGF0dXMgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCkKIAkJCQllc3BfZXZlbnRfcXVldWVfZnVsbChlc3AsIGVudCk7CkBAIC0xODIxLDE2ICsxODg4LDE2IEBACiAJCQkJCQkJICAgICAgIERJRF9PSykpOwogCQkJfQogCQl9IGVsc2UgaWYgKGVudC0+bWVzc2FnZSA9PSBESVNDT05ORUNUKSB7Ci0JCQllc3BfbG9nX2Rpc2Nvbm5lY3QoIkVTUDogRGlzY29ubmVjdGluZyB0Z3RbJWRdICIKLQkJCQkJICAgInRhZ1sleDoleF1cbiIsCisJCQllc3BfbG9nX2Rpc2Nvbm5lY3QoIkRpc2Nvbm5lY3RpbmcgdGd0WyVkXSB0YWdbJXg6JXhdXG4iLAogCQkJCQkgICBjbWQtPmRldmljZS0+aWQsCiAJCQkJCSAgIGVudC0+dGFnWzBdLCBlbnQtPnRhZ1sxXSk7CiAKIAkJCWVzcC0+YWN0aXZlX2NtZCA9IE5VTEw7CiAJCQllc3BfbWF5YmVfZXhlY3V0ZV9jb21tYW5kKGVzcCk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIkVTUDogVW5leHBlY3RlZCBtZXNzYWdlICV4IGluIGZyZWVidXNcbiIsCi0JCQkgICAgICAgZW50LT5tZXNzYWdlKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCQkgICAgICJVbmV4cGVjdGVkIG1lc3NhZ2UgJXggaW4gZnJlZWJ1c1xuIiwKKwkJCQkgICAgIGVudC0+bWVzc2FnZSk7CiAJCQllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xODYyLDYgKzE5MjksMTAgQEAKIAkJCWlmIChlc3AtPm1zZ19vdXRfbGVuID09IDEpIHsKIAkJCQllc3Bfd3JpdGU4KGVzcC0+bXNnX291dFswXSwgRVNQX0ZEQVRBKTsKIAkJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX1RJKTsKKwkJCX0gZWxzZSBpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX1VTRV9GSUZPKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IGVzcC0+bXNnX291dF9sZW47IGkrKykKKwkJCQkJZXNwX3dyaXRlOChlc3AtPm1zZ19vdXRbaV0sIEVTUF9GREFUQSk7CisJCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9USSk7CiAJCQl9IGVsc2UgewogCQkJCS8qIFVzZSBETUEuICovCiAJCQkJbWVtY3B5KGVzcC0+Y29tbWFuZF9ibG9jaywKQEAgLTE5MTcsNyArMTk4OCw3IEBACiAJCQkJdmFsID0gZXNwX3JlYWQ4KEVTUF9GREFUQSk7CiAJCQllc3AtPm1zZ19pbltlc3AtPm1zZ19pbl9sZW4rK10gPSB2YWw7CiAKLQkJCWVzcF9sb2dfbXNnaW4oIkVTUDogR290IG1zZ2luIGJ5dGUgJXhcbiIsIHZhbCk7CisJCQllc3BfbG9nX21zZ2luKCJHb3QgbXNnaW4gYnl0ZSAleFxuIiwgdmFsKTsKIAogCQkJaWYgKCFlc3BfbXNnaW5fcHJvY2Vzcyhlc3ApKQogCQkJCWVzcC0+bXNnX2luX2xlbiA9IDA7CkBAIC0xOTMwLDcgKzIwMDEsOCBAQAogCQkJaWYgKGVzcC0+ZXZlbnQgIT0gRVNQX0VWRU5UX0ZSRUVfQlVTKQogCQkJCWVzcF9ldmVudChlc3AsIEVTUF9FVkVOVF9DSEVDS19QSEFTRSk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIkVTUDogTVNHSU4gbmVpdGhlciBCU0VSViBub3QgRkRPTiwgcmVzZXR0aW5nIik7CisJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkJICAgICAiTVNHSU4gbmVpdGhlciBCU0VSViBub3QgRkRPTiwgcmVzZXR0aW5nIik7CiAJCQllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xOTM4LDExICsyMDEwLDcgQEAKIAljYXNlIEVTUF9FVkVOVF9DTURfU1RBUlQ6CiAJCW1lbWNweShlc3AtPmNvbW1hbmRfYmxvY2ssIGVzcC0+Y21kX2J5dGVzX3B0ciwKIAkJICAgICAgIGVzcC0+Y21kX2J5dGVzX2xlZnQpOwotCQlpZiAoZXNwLT5yZXYgPT0gRkFTSE1FKQotCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9GTFVTSCk7Ci0JCWVzcC0+b3BzLT5zZW5kX2RtYV9jbWQoZXNwLCBlc3AtPmNvbW1hbmRfYmxvY2tfZG1hLAotCQkJCSAgICAgICBlc3AtPmNtZF9ieXRlc19sZWZ0LCAxNiwgMCwKLQkJCQkgICAgICAgRVNQX0NNRF9ETUEgfCBFU1BfQ01EX1RJKTsKKwkJZXNwX3NlbmRfZG1hX2NtZChlc3AsIGVzcC0+Y21kX2J5dGVzX2xlZnQsIDE2LCBFU1BfQ01EX1RJKTsKIAkJZXNwX2V2ZW50KGVzcCwgRVNQX0VWRU5UX0NNRF9ET05FKTsKIAkJZXNwLT5mbGFncyB8PSBFU1BfRkxBR19RVUlDS0lSUV9DSEVDSzsKIAkJYnJlYWs7CkBAIC0xOTYxLDggKzIwMjksOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50aygiRVNQOiBVbmV4cGVjdGVkIGV2ZW50ICV4LCByZXNldHRpbmdcbiIsCi0JCSAgICAgICBlc3AtPmV2ZW50KTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LAorCQkJICAgICAiVW5leHBlY3RlZCBldmVudCAleCwgcmVzZXR0aW5nXG4iLCBlc3AtPmV2ZW50KTsKIAkJZXNwX3NjaGVkdWxlX3Jlc2V0KGVzcCk7CiAJCXJldHVybiAwOwogCQlicmVhazsKQEAgLTIwNDQsNyArMjExMiwxMiBAQAogCWludCBmaW5pc2hfcmVzZXQsIGludHJfZG9uZTsKIAl1OCBwaGFzZTsKIAorICAgICAgIC8qCisJKiBPbmNlIElOVFJQVCBpcyByZWFkIFNUQVRVUyBhbmQgU1NURVAgYXJlIGNsZWFyZWQuCisJKi8KIAllc3AtPnNyZWcgPSBlc3BfcmVhZDgoRVNQX1NUQVRVUyk7CisJZXNwLT5zZXFyZWcgPSBlc3BfcmVhZDgoRVNQX1NTVEVQKTsKKwllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CiAKIAlpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX1JFU0VUVElORykgewogCQlmaW5pc2hfcmVzZXQgPSAxOwpAQCAtMjA1Nyw4ICsyMTMwLDYgQEAKIAkJCXJldHVybjsKIAl9CiAKLQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7Ci0KIAlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfU1IpCiAJCWZpbmlzaF9yZXNldCA9IDE7CiAKQEAgLTIwODUsMTQgKzIxNTYsMTUgQEAKIAkJfQogCX0KIAotCWVzcF9sb2dfaW50cigiRVNQOiBpbnRyIHNyZWdbJTAyeF0gc2VxcmVnWyUwMnhdICIKKwllc3BfbG9nX2ludHIoImludHIgc3JlZ1slMDJ4XSBzZXFyZWdbJTAyeF0gIgogCQkgICAgICJzcmVnMlslMDJ4XSBpcmVnWyUwMnhdXG4iLAogCQkgICAgIGVzcC0+c3JlZywgZXNwLT5zZXFyZWcsIGVzcC0+c3JlZzIsIGVzcC0+aXJlZyk7CiAKIAlpbnRyX2RvbmUgPSAwOwogCiAJaWYgKGVzcC0+aXJlZyAmIChFU1BfSU5UUl9TIHwgRVNQX0lOVFJfU0FUTiB8IEVTUF9JTlRSX0lDKSkgewotCQlwcmludGsoIkVTUDogdW5leHBlY3RlZCBJUkVHICUwMnhcbiIsIGVzcC0+aXJlZyk7CisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCSAgICAgInVuZXhwZWN0ZWQgSVJFRyAlMDJ4XG4iLCBlc3AtPmlyZWcpOwogCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfSUMpCiAJCQllc3BfZHVtcF9jbWRfbG9nKGVzcCk7CiAKQEAgLTIxNDksNDYgKzIyMjEsNTAgQEAKIAl1OCB2YWw7CiAKIAllc3AtPmNvbmZpZzEgPSAoRVNQX0NPTkZJRzFfUEVOQUJMRSB8IChlc3AtPnNjc2lfaWQgJiA3KSk7Ci0JZXNwLT5jb25maWcyID0gKEVTUF9DT05GSUcyX1NDU0kyRU5BQiB8IEVTUF9DT05GSUcyX1JFR1BBUklUWSk7Ci0JZXNwX3dyaXRlOChlc3AtPmNvbmZpZzIsIEVTUF9DRkcyKTsKLQotCXZhbCA9IGVzcF9yZWFkOChFU1BfQ0ZHMik7Ci0JdmFsICY9IH5FU1BfQ09ORklHMl9NQUdJQzsKLQlpZiAodmFsICE9IChFU1BfQ09ORklHMl9TQ1NJMkVOQUIgfCBFU1BfQ09ORklHMl9SRUdQQVJJVFkpKSB7Ci0JCS8qIElmIHdoYXQgd2Ugd3JpdGUgdG8gY2ZnMiBkb2VzIG5vdCBjb21lIGJhY2ssIGNmZzIgaXMgbm90Ci0JCSAqIGltcGxlbWVudGVkLCB0aGVyZWZvcmUgdGhpcyBtdXN0IGJlIGEgcGxhaW4gZXNwMTAwLgotCQkgKi8KLQkJZXNwLT5yZXYgPSBFU1AxMDA7Ci0JfSBlbHNlIHsKLQkJZXNwLT5jb25maWcyID0gMDsKLQkJZXNwX3NldF9hbGxfY29uZmlnMyhlc3AsIDUpOwotCQllc3AtPnByZXZfY2ZnMyA9IDU7CisJaWYgKGVzcC0+Y29uZmlnMiA9PSAwKSB7CisJCWVzcC0+Y29uZmlnMiA9IChFU1BfQ09ORklHMl9TQ1NJMkVOQUIgfCBFU1BfQ09ORklHMl9SRUdQQVJJVFkpOwogCQllc3Bfd3JpdGU4KGVzcC0+Y29uZmlnMiwgRVNQX0NGRzIpOwotCQllc3Bfd3JpdGU4KDAsIEVTUF9DRkczKTsKKworCQl2YWwgPSBlc3BfcmVhZDgoRVNQX0NGRzIpOworCQl2YWwgJj0gfkVTUF9DT05GSUcyX01BR0lDOworCisJCWVzcC0+Y29uZmlnMiA9IDA7CisJCWlmICh2YWwgIT0gKEVTUF9DT05GSUcyX1NDU0kyRU5BQiB8IEVTUF9DT05GSUcyX1JFR1BBUklUWSkpIHsKKwkJCS8qCisJCQkgKiBJZiB3aGF0IHdlIHdyaXRlIHRvIGNmZzIgZG9lcyBub3QgY29tZSBiYWNrLAorCQkJICogY2ZnMiBpcyBub3QgaW1wbGVtZW50ZWQuCisJCQkgKiBUaGVyZWZvcmUgdGhpcyBtdXN0IGJlIGEgcGxhaW4gZXNwMTAwLgorCQkJICovCisJCQllc3AtPnJldiA9IEVTUDEwMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWVzcF9zZXRfYWxsX2NvbmZpZzMoZXNwLCA1KTsKKwllc3AtPnByZXZfY2ZnMyA9IDU7CisJZXNwX3dyaXRlOChlc3AtPmNvbmZpZzIsIEVTUF9DRkcyKTsKKwllc3Bfd3JpdGU4KDAsIEVTUF9DRkczKTsKKwllc3Bfd3JpdGU4KGVzcC0+cHJldl9jZmczLCBFU1BfQ0ZHMyk7CisKKwl2YWwgPSBlc3BfcmVhZDgoRVNQX0NGRzMpOworCWlmICh2YWwgIT0gNSkgeworCQkvKiBUaGUgY2ZnMiByZWdpc3RlciBpcyBpbXBsZW1lbnRlZCwgaG93ZXZlcgorCQkgKiBjZmczIGlzIG5vdCwgbXVzdCBiZSBlc3AxMDBhLgorCQkgKi8KKwkJZXNwLT5yZXYgPSBFU1AxMDBBOworCX0gZWxzZSB7CisJCWVzcF9zZXRfYWxsX2NvbmZpZzMoZXNwLCAwKTsKKwkJZXNwLT5wcmV2X2NmZzMgPSAwOwogCQllc3Bfd3JpdGU4KGVzcC0+cHJldl9jZmczLCBFU1BfQ0ZHMyk7CiAKLQkJdmFsID0gZXNwX3JlYWQ4KEVTUF9DRkczKTsKLQkJaWYgKHZhbCAhPSA1KSB7Ci0JCQkvKiBUaGUgY2ZnMiByZWdpc3RlciBpcyBpbXBsZW1lbnRlZCwgaG93ZXZlcgotCQkJICogY2ZnMyBpcyBub3QsIG11c3QgYmUgZXNwMTAwYS4KLQkJCSAqLwotCQkJZXNwLT5yZXYgPSBFU1AxMDBBOworCQkvKiBBbGwgb2YgY2ZnezEsMiwzfSBpbXBsZW1lbnRlZCwgbXVzdCBiZSBvbmUgb2YKKwkJICogdGhlIGZhcyB2YXJpYW50cywgZmlndXJlIG91dCB3aGljaCBvbmUuCisJCSAqLworCQlpZiAoZXNwLT5jZmFjdCA9PSAwIHx8IGVzcC0+Y2ZhY3QgPiBFU1BfQ0NGX0Y1KSB7CisJCQllc3AtPnJldiA9IEZBU1Q7CisJCQllc3AtPnN5bmNfZGVmcCA9IFNZTkNfREVGUF9GQVNUOwogCQl9IGVsc2UgewotCQkJZXNwX3NldF9hbGxfY29uZmlnMyhlc3AsIDApOwotCQkJZXNwLT5wcmV2X2NmZzMgPSAwOwotCQkJZXNwX3dyaXRlOChlc3AtPnByZXZfY2ZnMywgRVNQX0NGRzMpOwotCi0JCQkvKiBBbGwgb2YgY2ZnezEsMiwzfSBpbXBsZW1lbnRlZCwgbXVzdCBiZSBvbmUgb2YKLQkJCSAqIHRoZSBmYXMgdmFyaWFudHMsIGZpZ3VyZSBvdXQgd2hpY2ggb25lLgotCQkJICovCi0JCQlpZiAoZXNwLT5jZmFjdCA9PSAwIHx8IGVzcC0+Y2ZhY3QgPiBFU1BfQ0NGX0Y1KSB7Ci0JCQkJZXNwLT5yZXYgPSBGQVNUOwotCQkJCWVzcC0+c3luY19kZWZwID0gU1lOQ19ERUZQX0ZBU1Q7Ci0JCQl9IGVsc2UgewotCQkJCWVzcC0+cmV2ID0gRVNQMjM2OwotCQkJfQotCQkJZXNwLT5jb25maWcyID0gMDsKLQkJCWVzcF93cml0ZTgoZXNwLT5jb25maWcyLCBFU1BfQ0ZHMik7CisJCQllc3AtPnJldiA9IEVTUDIzNjsKIAkJfQogCX0KIH0KQEAgLTIzMDgsNiArMjM4NCw3IEBACiAJIkZBUzEwMEEiLAogCSJGQVNUIiwKIAkiRkFTSE1FIiwKKwkiQU01M0M5NzQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqZXNwX3RyYW5zcG9ydF90ZW1wbGF0ZTsKQEAgLTIzMTcsNiArMjM5NCwxMCBAQAogCXN0YXRpYyBpbnQgaW5zdGFuY2U7CiAJaW50IGVycjsKIAorCWlmICghZXNwLT5udW1fdGFncykKKwkJZXNwLT5udW1fdGFncyA9IEVTUF9ERUZBVUxUX1RBR1M7CisJZWxzZSBpZiAoZXNwLT5udW1fdGFncyA+PSBFU1BfTUFYX1RBRykKKwkJZXNwLT5udW1fdGFncyA9IEVTUF9NQVhfVEFHIC0gMTsKIAllc3AtPmhvc3QtPnRyYW5zcG9ydHQgPSBlc3BfdHJhbnNwb3J0X3RlbXBsYXRlOwogCWVzcC0+aG9zdC0+bWF4X2x1biA9IEVTUF9NQVhfTFVOOwogCWVzcC0+aG9zdC0+Y21kX3Blcl9sdW4gPSAyOwpAQCAtMjMzMCwxMiArMjQxMSwxMyBAQAogCiAJZXNwX2Jvb3R1cF9yZXNldChlc3ApOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggImVzcCV1LCByZWdzWyUxcDolMXBdIGlycVsldV1cbiIsCi0JICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlc3AtPnJlZ3MsIGVzcC0+ZG1hX3JlZ3MsCi0JICAgICAgIGVzcC0+aG9zdC0+aXJxKTsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZXNwJXUgaXMgYSAlcywgJXUgTUh6IChjY2Y9JXUpLCBTQ1NJIElEICV1XG4iLAotCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwgZXNwX2NoaXBfbmFtZXNbZXNwLT5yZXZdLAotCSAgICAgICBlc3AtPmNmcmVxIC8gMTAwMDAwMCwgZXNwLT5jZmFjdCwgZXNwLT5zY3NpX2lkKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgZGV2LCAiZXNwJXU6IHJlZ3NbJTFwOiUxcF0gaXJxWyV1XVxuIiwKKwkJICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+cmVncywgZXNwLT5kbWFfcmVncywKKwkJICAgZXNwLT5ob3N0LT5pcnEpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCBkZXYsCisJCSAgICJlc3AldTogaXMgYSAlcywgJXUgTUh6IChjY2Y9JXUpLCBTQ1NJIElEICV1XG4iLAorCQkgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwgZXNwX2NoaXBfbmFtZXNbZXNwLT5yZXZdLAorCQkgICBlc3AtPmNmcmVxIC8gMTAwMDAwMCwgZXNwLT5jZmFjdCwgZXNwLT5zY3NpX2lkKTsKIAogCS8qIExldCB0aGUgU0NTSSBidXMgcmVzZXQgc2V0dGxlLiAqLwogCXNzbGVlcChlc3BfYnVzX3Jlc2V0X3NldHRsZSk7CkBAIC0yNDAyLDI4ICsyNDg0LDEwIEBACiB7CiAJc3RydWN0IGVzcCAqZXNwID0gc2hvc3RfcHJpdihkZXYtPmhvc3QpOwogCXN0cnVjdCBlc3BfdGFyZ2V0X2RhdGEgKnRwID0gJmVzcC0+dGFyZ2V0W2Rldi0+aWRdOwotCWludCBnb2FsX3RhZ3MsIHF1ZXVlX2RlcHRoOwogCi0JZ29hbF90YWdzID0gMDsKKwlpZiAoZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIGVzcC0+bnVtX3RhZ3MpOwogCi0JaWYgKGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQkvKiBYWFggbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBzb21laG93IFhYWCAqLwotCQlnb2FsX3RhZ3MgPSBFU1BfREVGQVVMVF9UQUdTOwotCi0JCWlmIChnb2FsX3RhZ3MgPiBFU1BfTUFYX1RBRykKLQkJCWdvYWxfdGFncyA9IEVTUF9NQVhfVEFHOwotCX0KLQotCXF1ZXVlX2RlcHRoID0gZ29hbF90YWdzOwotCWlmIChxdWV1ZV9kZXB0aCA8IGRldi0+aG9zdC0+Y21kX3Blcl9sdW4pCi0JCXF1ZXVlX2RlcHRoID0gZGV2LT5ob3N0LT5jbWRfcGVyX2x1bjsKLQotCWlmIChnb2FsX3RhZ3MpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoZGV2LCBNU0dfT1JERVJFRF9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShkZXYsIHF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UgewotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKGRldiwgcXVldWVfZGVwdGgpOwotCX0KIAl0cC0+ZmxhZ3MgfD0gRVNQX1RHVF9ESVNDT05ORUNUOwogCiAJaWYgKCFzcGlfaW5pdGlhbF9kdihkZXYtPnNkZXZfdGFyZ2V0KSkKQEAgLTI0NTEsMTkgKzI1MTUsMjAgQEAKIAkgKiBYWFggbXVjaCBmb3IgdGhlIGZpbmFsIGRyaXZlci4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZShlc3AtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBBYm9ydGluZyBjb21tYW5kIFslcDolMDJ4XVxuIiwKLQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGNtZCwgY21kLT5jbW5kWzBdKTsKKwlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwgIkFib3J0aW5nIGNvbW1hbmQgWyVwOiUwMnhdXG4iLAorCQkgICAgIGNtZCwgY21kLT5jbW5kWzBdKTsKIAllbnQgPSBlc3AtPmFjdGl2ZV9jbWQ7CiAJaWYgKGVudCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IEN1cnJlbnQgY29tbWFuZCBbJXA6JTAyeF1cbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwgZW50LT5jbWQsIGVudC0+Y21kLT5jbW5kWzBdKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkgICAgICJDdXJyZW50IGNvbW1hbmQgWyVwOiUwMnhdXG4iLAorCQkJICAgICBlbnQtPmNtZCwgZW50LT5jbWQtPmNtbmRbMF0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50LCAmZXNwLT5xdWV1ZWRfY21kcywgbGlzdCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlc3AlZDogUXVldWVkIGNvbW1hbmQgWyVwOiUwMnhdXG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVudC0+Y21kLCBlbnQtPmNtZC0+Y21uZFswXSk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LCAiUXVldWVkIGNvbW1hbmQgWyVwOiUwMnhdXG4iLAorCQkJICAgICBlbnQtPmNtZCwgZW50LT5jbWQtPmNtbmRbMF0pOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudCwgJmVzcC0+YWN0aXZlX2NtZHMsIGxpc3QpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IEFjdGl2ZSBjb21tYW5kIFslcDolMDJ4XVxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlbnQtPmNtZCwgZW50LT5jbWQtPmNtbmRbMF0pOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwgIiBBY3RpdmUgY29tbWFuZCBbJXA6JTAyeF1cbiIsCisJCQkgICAgIGVudC0+Y21kLCBlbnQtPmNtZC0+Y21uZFswXSk7CiAJfQogCWVzcF9kdW1wX2NtZF9sb2coZXNwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGVzcC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC0yNjMxLDYgKzI2OTYsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkubWF4X3NlY3RvcnMJCT0gMHhmZmZmLAogCS5za2lwX3NldHRsZV9kZWxheQk9IDEsCisJLnVzZV9ibGtfdGFncwkJPSAxLAogfTsKIEVYUE9SVF9TWU1CT0woc2NzaV9lc3BfdGVtcGxhdGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuaCBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5oCmluZGV4IGNkNjg4MDUuLjg0ZGNiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5oCkBAIC0xLDQgKzEsNCBAQAotLyogZXNwX3Njc2kuaDogRGVmaW5lcyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIEVTUCBkcmllci4KKy8qIGVzcF9zY3NpLmg6IERlZmluZXMgYW5kIHN0cnVjdHVyZXMgZm9yIHRoZSBFU1AgZHJpdmVyLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgRVNQX0NURVNUCTB4MGFVTAkJLyogd28gIENoaXAgdGVzdCByZWdpc3RlciAgICAgIDB4MjggICovCiAjZGVmaW5lIEVTUF9DRkcyCTB4MGJVTAkJLyogcncgIFNlY29uZCBjZmcgcmVnaXN0ZXIgICAgIDB4MmMgICovCiAjZGVmaW5lIEVTUF9DRkczCTB4MGNVTAkJLyogcncgIFRoaXJkIGNmZyByZWdpc3RlciAgICAgIDB4MzAgICovCisjZGVmaW5lIEVTUF9DRkc0CTB4MGRVTAkJLyogcncgIEZvdXJ0aCBjZmcgcmVnaXN0ZXIgICAgIDB4MzQgICovCiAjZGVmaW5lIEVTUF9UQ0hJCTB4MGVVTAkJLyogcncgIEhpZ2ggYml0cyB0cmFuc2YgY291bnQgIDB4MzggICovCiAjZGVmaW5lIEVTUF9VSUQJCUVTUF9UQ0hJCS8qIHJvICBVbmlxdWUgSUQgY29kZSAgICAgICAgICAweDM4ICAqLwogI2RlZmluZSBGQVNfUkxPCQlFU1BfVENISQkvKiBydyAgSE1FIGV4dGVuZGVkIGNvdW50ZXIgICAgMHgzOCAgKi8KQEAgLTc2LDYgKzc3LDE4IEBACiAjZGVmaW5lIEVTUF9DT05GSUczX0lNUyAgICAgICAweDgwICAgICAvKiBJRCBtc2cgY2hrJ25nICAgICAgICAoZXNwL2ZhczIzNikgICovCiAjZGVmaW5lIEVTUF9DT05GSUczX09CUFVTSCAgICAweDgwICAgICAvKiBQdXNoIG9kZC1ieXRlIHRvIGRtYSAoaG1lKSAgICAgICAgICovCiAKKy8qIEVTUCBjb25maWcgcmVnaXN0ZXIgNCByZWFkLXdyaXRlLCBmb3VuZCBvbmx5IG9uIGFtNTNjOTc0IGNoaXBzICovCisjZGVmaW5lIEVTUF9DT05GSUc0X1JBREUgICAgICAweDA0ICAgICAvKiBBY3RpdmUgbmVnYXRpb24gKi8KKyNkZWZpbmUgRVNQX0NPTkZJRzRfUkFFICAgICAgIDB4MDggICAgIC8qIEFjdGl2ZSBuZWdhdGlvbiBvbiBSRVEgYW5kIEFDSyAqLworI2RlZmluZSBFU1BfQ09ORklHNF9QV0QgICAgICAgMHgyMCAgICAgLyogUmVkdWNlZCBwb3dlciBmZWF0dXJlICovCisjZGVmaW5lIEVTUF9DT05GSUc0X0dFMCAgICAgICAweDQwICAgICAvKiBHbGl0Y2ggZWF0ZXIgYml0IDAgKi8KKyNkZWZpbmUgRVNQX0NPTkZJRzRfR0UxICAgICAgIDB4ODAgICAgIC8qIEdsaXRjaCBlYXRlciBiaXQgMSAqLworCisjZGVmaW5lIEVTUF9DT05GSUdfR0VfMTJOUyAgICAoMCkKKyNkZWZpbmUgRVNQX0NPTkZJR19HRV8yNU5TICAgIChFU1BfQ09ORklHX0dFMSkKKyNkZWZpbmUgRVNQX0NPTkZJR19HRV8zNU5TICAgIChFU1BfQ09ORklHX0dFMCkKKyNkZWZpbmUgRVNQX0NPTkZJR19HRV8wTlMgICAgIChFU1BfQ09ORklHX0dFMCB8IEVTUF9DT05GSUdfR0UxKQorCiAvKiBFU1AgY29tbWFuZCByZWdpc3RlciByZWFkLXdyaXRlICovCiAvKiBHcm91cCAxIGNvbW1hbmRzOiAgVGhlc2UgbWF5IGJlIHNlbnQgYXQgYW55IHBvaW50IGluIHRpbWUgdG8gdGhlIEVTUAogICogICAgICAgICAgICAgICAgICAgIGNoaXAuICBOb25lIG9mIHRoZW0gY2FuIGdlbmVyYXRlIGludGVycnVwdHMgJ2NlcHQKQEAgLTI1NCw2ICsyNjcsNyBAQAogCUZBUzEwMEEgICAgPSAweDA0LAogCUZBU1QgICAgICAgPSAweDA1LAogCUZBU0hNRSAgICAgPSAweDA2LAorCVBDU0NTSSAgICAgPSAweDA3LCAgLyogQU01M2M5NzQgKi8KIH07CiAKIHN0cnVjdCBlc3BfY21kX2VudHJ5IHsKQEAgLTI2OSw2ICsyODMsNyBAQAogI2RlZmluZSBFU1BfQ01EX0ZMQUdfV1JJVEUJMHgwMSAvKiBETUEgaXMgYSB3cml0ZSAqLwogI2RlZmluZSBFU1BfQ01EX0ZMQUdfQUJPUlQJMHgwMiAvKiBiZWluZyBhYm9ydGVkICovCiAjZGVmaW5lIEVTUF9DTURfRkxBR19BVVRPU0VOU0UJMHgwNCAvKiBEb2luZyBhdXRvbWF0aWMgUkVRVUVTVF9TRU5TRSAqLworI2RlZmluZSBFU1BfQ01EX0ZMQUdfUkVTSURVQUwJMHgwOCAvKiBBTTUzYzk3NCBCTEFTVCByZXNpZHVhbCAqLwogCiAJdTgJCQl0YWdbMl07CiAJdTgJCQlvcmlnX3RhZ1syXTsKQEAgLTI4Myw3ICsyOTgsNiBAQAogCXN0cnVjdCBjb21wbGV0aW9uCSplaF9kb25lOwogfTsKIAotLyogWFhYIG1ha2UgdGhpcyBjb25maWd1cmFibGUgc29tZWhvdyBYWFggKi8KICNkZWZpbmUgRVNQX0RFRkFVTFRfVEFHUwkxNgogCiAjZGVmaW5lIEVTUF9NQVhfVEFSR0VUCQkxNgpAQCAtNDQ1LDcgKzQ1OSw3IEBACiAJdTgJCQlwcmV2X3NvZmY7CiAJdTgJCQlwcmV2X3N0cDsKIAl1OAkJCXByZXZfY2ZnMzsKLQl1OAkJCV9fcGFkOworCXU4CQkJbnVtX3RhZ3M7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVzcF9jbWRfcG9vbDsKIApAQCAtNDY2LDYgKzQ4MCw3IEBACiAJdTgJCQlidXJzdHM7CiAJdTgJCQljb25maWcxOwogCXU4CQkJY29uZmlnMjsKKwl1OAkJCWNvbmZpZzQ7CiAKIAl1OAkJCXNjc2lfaWQ7CiAJdTMyCQkJc2NzaV9pZF9tYXNrOwpAQCAtNDc5LDYgKzQ5NCw3IEBACiAjZGVmaW5lIEVTUF9GTEFHX1dJREVfQ0FQQUJMRQkweDAwMDAwMDA4CiAjZGVmaW5lIEVTUF9GTEFHX1FVSUNLSVJRX0NIRUNLCTB4MDAwMDAwMTAKICNkZWZpbmUgRVNQX0ZMQUdfRElTQUJMRV9TWU5DCTB4MDAwMDAwMjAKKyNkZWZpbmUgRVNQX0ZMQUdfVVNFX0ZJRk8JMHgwMDAwMDA0MAogCiAJdTgJCQlzZWxlY3Rfc3RhdGU7CiAjZGVmaW5lIEVTUF9TRUxFQ1RfTk9ORQkJMHgwMCAvKiBOb3Qgc2VsZWN0aW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKaW5kZXggNGE4YWM3ZC4uMzA4YTAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYwpAQCAtMjgwLDE0ICsyODAsMTYgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBmY19laF9kZXZpY2VfcmVzZXQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlciA9IGZjX2VoX2hvc3RfcmVzZXQsCiAJLnNsYXZlX2FsbG9jID0gZmNfc2xhdmVfYWxsb2MsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgPSBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZCA9IC0xLAogCS5jbWRfcGVyX2x1biA9IDMsCiAJLmNhbl9xdWV1ZSA9IEZDT0VfTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zZ190YWJsZXNpemUgPSBTR19BTEwsCiAJLm1heF9zZWN0b3JzID0gMHhmZmZmLAorCS51c2VfYmxrX3RhZ3MgPSAxLAorCS50cmFja19xdWV1ZV9kZXB0aCA9IDEsCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaCBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaAppbmRleCBiZjhkMzRjLi4zYjczYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCkBAIC0zOSw3ICszOSw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJmbmljIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJDaXNjbyBGQ29FIEhCQSBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS42LjAuMTEiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS42LjAuMTYiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKICNkZWZpbmUgREZYICAgICAgICAgICAgICAgICAgICAgRFJWX05BTUUgIiVkOiAiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jCmluZGV4IGYzOTg0YjQuLmJmMGJiZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19mY3MuYwpAQCAtMTM1LDYgKzEzNSwxMSBAQAogCQkJZm5pYy0+bHBvcnQtPmhvc3QtPmhvc3Rfbm8sIEZOSUNfRkNfTEUsCiAJCQkiTGluayBTdGF0dXM6IFVQX0RPV04iLAogCQkJc3RybGVuKCJMaW5rIFN0YXR1czogVVBfRE9XTiIpKTsKKwkJaWYgKGZuaWMtPmNvbmZpZy5mbGFncyAmIFZGQ0ZfRklQX0NBUEFCTEUpIHsKKwkJCUZOSUNfRkNTX0RCRyhLRVJOX0RFQlVHLCBmbmljLT5scG9ydC0+aG9zdCwKKwkJCQkiZGVsZXRpbmcgZmlwLXRpbWVyIGR1cmluZyBsaW5rLWRvd25cbiIpOworCQkJZGVsX3RpbWVyX3N5bmMoJmZuaWMtPmZpcF90aW1lcik7CisJCX0KIAkJZmNvZV9jdGxyX2xpbmtfZG93bigmZm5pYy0+Y3Rscik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCmluZGV4IDhjNTZmZGMuLjBjMWY4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCkBAIC05NSwxMiArOTUsMTAgQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzZGV2KSk7CiAKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKLQogCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQogCQlyZXR1cm4gLUVOWElPOwogCi0Jc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZm5pY19tYXhfcWRlcHRoKTsKKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBmbmljX21heF9xZGVwdGgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTIsOCArMTEwLDggQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBmbmljX2RldmljZV9yZXNldCwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyID0gZm5pY19ob3N0X3Jlc2V0LAogCS5zbGF2ZV9hbGxvYyA9IGZuaWNfc2xhdmVfYWxsb2MsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgPSBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZCA9IC0xLAogCS5jbWRfcGVyX2x1biA9IDMsCiAJLmNhbl9xdWV1ZSA9IEZOSUNfREZMVF9JT19SRVEsCkBAIC0xMjEsNiArMTE5LDggQEAKIAkuc2dfdGFibGVzaXplID0gRk5JQ19NQVhfU0dfREVTQ19DTlQsCiAJLm1heF9zZWN0b3JzID0gMHhmZmZmLAogCS5zaG9zdF9hdHRycyA9IGZuaWNfYXR0cnMsCisJLnVzZV9ibGtfdGFncyA9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC00MzgsMjEgKzQzOCwzMCBAQAogCXVuc2lnbmVkIGxvbmcgdGltZTsKIAlpbnQgZG9uZTsKIAlpbnQgZXJyOworCWludCBjb3VudDsKKworCWNvdW50ID0gMDsKIAogCWVyciA9IHN0YXJ0KHZkZXYsIGFyZyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIFdhaXQgZm9yIGZ1bmMgdG8gY29tcGxldGUuLi4yIHNlY29uZHMgbWF4ICovCisJLyogV2FpdCBmb3IgZnVuYyB0byBjb21wbGV0ZS4KKwkqIFNvbWV0aW1lIHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlIHRha2UgbG9uZyB0aW1lCisJKiB0byB3YWtlIHVwIHNvIHdlIGRvIG5vdCByZXRyeSBhcyB3ZSBhcmUgb25seSB3YWl0aW5nIGZvcgorCSogMiBzZWNvbmRzIGluIHdoaWxlIGxvb3AuIEJ5IGFkZGluZyBjb3VudCwgd2UgbWFrZSBzdXJlCisJKiB3ZSB0cnkgYXRsZWFzdCB0aHJlZSB0aW1lcyBiZWZvcmUgcmV0dXJuaW5nIC1FVElNRURPVVQKKwkqLwogCXRpbWUgPSBqaWZmaWVzICsgKEhaICogMik7CiAJZG8gewogCQllcnIgPSBmaW5pc2hlZCh2ZGV2LCAmZG9uZSk7CisJCWNvdW50Kys7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlpZiAoZG9uZSkKIAkJCXJldHVybiAwOwogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiAvIDEwKTsKLQl9IHdoaWxlICh0aW1lX2FmdGVyKHRpbWUsIGppZmZpZXMpKTsKKwl9IHdoaWxlICh0aW1lX2FmdGVyKHRpbWUsIGppZmZpZXMpIHx8IChjb3VudCA8IDMpKTsKIAogCXJldHVybiAtRVRJTUVET1VUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYwppbmRleCA5NjFiZGY1Li4yMDk3ZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYwpAQCAtMzI1LDEzICszMjUsMTEgQEAKIAlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcnAgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaG9zdF9zZ19kZXNjICpkZXNjOwogCXN0cnVjdCBtaXNjX3N0YXRzICptaXNjX3N0YXRzID0gJmZuaWMtPmZuaWNfc3RhdHMubWlzY19zdGF0czsKLQl1OCBwcmlfdGFnID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGludHJfZmxhZ3M7CiAJaW50IGZsYWdzOwogCXU4IGV4Y2hfZmxhZ3M7CiAJc3RydWN0IHNjc2lfbHVuIGZjX2x1bjsKLQljaGFyIG1zZ1syXTsKIAogCWlmIChzZ19jb3VudCkgewogCQkvKiBGb3IgZWFjaCBTR0UsIGNyZWF0ZSBhIGRldmljZSBkZXNjIGVudHJ5ICovCkBAIC0zNTcsMTIgKzM1NSw2IEBACiAKIAlpbnRfdG9fc2NzaWx1bihzYy0+ZGV2aWNlLT5sdW4sICZmY19sdW4pOwogCi0JcHJpX3RhZyA9IEZDUElPX0lDTU5EX1BUQV9TSU1QTEU7Ci0JbXNnWzBdID0gTVNHX1NJTVBMRV9UQUc7Ci0Jc2NzaV9wb3B1bGF0ZV90YWdfbXNnKHNjLCBtc2cpOwotCWlmIChtc2dbMF0gPT0gTVNHX09SREVSRURfVEFHKQotCQlwcmlfdGFnID0gRkNQSU9fSUNNTkRfUFRBX09SREVSRUQ7Ci0KIAkvKiBFbnF1ZXVlIHRoZSBkZXNjcmlwdG9yIGluIHRoZSBDb3B5IFdRICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZuaWMtPndxX2NvcHlfbG9ja1swXSwgaW50cl9mbGFncyk7CiAKQEAgLTM5NCw3ICszODYsOCBAQAogCQkJCQkgaW9fcmVxLT5zZ2xfbGlzdF9wYSwKIAkJCQkJIGlvX3JlcS0+c2Vuc2VfYnVmX3BhLAogCQkJCQkgMCwgLyogc2NzaSBjbWQgcmVmLCBhbHdheXMgMCAqLwotCQkJCQkgcHJpX3RhZywgLyogc2NzaSBwcmkgYW5kIHRhZyAqLworCQkJCQkgRkNQSU9fSUNNTkRfUFRBX1NJTVBMRSwKKwkJCQkJIAkvKiBzY3NpIHByaSBhbmQgdGFnICovCiAJCQkJCSBmbGFncywJLyogY29tbWFuZCBmbGFncyAqLwogCQkJCQkgc2MtPmNtbmQsIHNjLT5jbWRfbGVuLAogCQkJCQkgc2NzaV9idWZmbGVuKHNjKSwKQEAgLTQyOCw4ICs0MjEsMTAgQEAKIAlpbnQgcmV0OwogCXU2NCBjbWRfdHJhY2U7CiAJaW50IHNnX2NvdW50ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgcHRyOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKKwlzcGlubG9ja190ICppb19sb2NrID0gTlVMTDsKIAogCWlmICh1bmxpa2VseShmbmljX2Noa19zdGF0ZV9mbGFnc19sb2NrZWQoZm5pYywgRk5JQ19GTEFHU19JT19CTE9DS0VEKSkpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwpAQCAtNDQzLDYgKzQzOCwxNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlyZGF0YSA9IGxwLT50dC5ycG9ydF9sb29rdXAobHAsIHJwb3J0LT5wb3J0X2lkKTsKKwlpZiAoIXJkYXRhIHx8IChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfREVMRVRFKSkgeworCQlGTklDX1NDU0lfREJHKEtFUk5fREVCVUcsIGZuaWMtPmxwb3J0LT5ob3N0LAorCQkJInJldHVybmluZyBJTyBhcyBycG9ydCBpcyByZW1vdmVkXG4iKTsKKwkJYXRvbWljNjRfaW5jKCZmbmljX3N0YXRzLT5taXNjX3N0YXRzLnJwb3J0X25vdF9yZWFkeSk7CisJCXNjLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVDsKKwkJZG9uZShzYyk7CisJCXJldHVybiAwOworCX0KKwogCWlmIChscC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkgfHwgIShscC0+bGlua191cCkpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCkBAIC01MDUsNiArNTEwLDEzIEBACiAJCX0KIAl9CiAKKwkvKgorCSogV2lsbCBhY3F1aXJlIGxvY2sgZGVmb3JlIHNldHRpbmcgdG8gSU8gaW5pdGlhbGl6ZWQuCisJKi8KKworCWlvX2xvY2sgPSBmbmljX2lvX2xvY2tfaGFzaChmbmljLCBzYyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoaW9fbG9jaywgZmxhZ3MpOworCiAJLyogaW5pdGlhbGl6ZSByZXN0IG9mIGlvX3JlcSAqLwogCWlvX3JlcS0+cG9ydF9pZCA9IHJwb3J0LT5wb3J0X2lkOwogCWlvX3JlcS0+c3RhcnRfdGltZSA9IGppZmZpZXM7CkBAIC01MjEsMTEgKzUzMyw5IEBACiAJCSAqIEluIGNhc2UgYW5vdGhlciB0aHJlYWQgY2FuY2VsbGVkIHRoZSByZXF1ZXN0LAogCQkgKiByZWZldGNoIHRoZSBwb2ludGVyIHVuZGVyIHRoZSBsb2NrLgogCQkgKi8KLQkJc3BpbmxvY2tfdCAqaW9fbG9jayA9IGZuaWNfaW9fbG9ja19oYXNoKGZuaWMsIHNjKTsKIAkJRk5JQ19UUkFDRShmbmljX3F1ZXVlY29tbWFuZCwgc2MtPmRldmljZS0+aG9zdC0+aG9zdF9ubywKIAkJCSAgc2MtPnJlcXVlc3QtPnRhZywgc2MsIDAsIDAsIDAsCiAJCQkgICgoKHU2NClDTURfRkxBR1Moc2MpIDw8IDMyKSB8IENNRF9TVEFURShzYykpKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoaW9fbG9jaywgZmxhZ3MpOwogCQlpb19yZXEgPSAoc3RydWN0IGZuaWNfaW9fcmVxICopQ01EX1NQKHNjKTsKIAkJQ01EX1NQKHNjKSA9IE5VTEw7CiAJCUNNRF9TVEFURShzYykgPSBGTklDX0lPUkVRX0NNRF9DT01QTEVURTsKQEAgLTUzNCw2ICs1NDQsMTAgQEAKIAkJCWZuaWNfcmVsZWFzZV9pb3JlcV9idWYoZm5pYywgaW9fcmVxLCBzYyk7CiAJCQltZW1wb29sX2ZyZWUoaW9fcmVxLCBmbmljLT5pb19yZXFfcG9vbCk7CiAJCX0KKwkJYXRvbWljX2RlYygmZm5pYy0+aW5fZmxpZ2h0KTsKKwkJLyogYWNxdWlyZSBob3N0IGxvY2sgYmVmb3JlIHJldHVybmluZyB0byBTQ1NJICovCisJCXNwaW5fbG9jayhscC0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewogCQlhdG9taWM2NF9pbmMoJmZuaWNfc3RhdHMtPmlvX3N0YXRzLmFjdGl2ZV9pb3MpOwogCQlhdG9taWM2NF9pbmMoJmZuaWNfc3RhdHMtPmlvX3N0YXRzLm51bV9pb3MpOwpAQCAtNTU1LDYgKzU2OSwxMSBAQAogCQkgIHNjLT5yZXF1ZXN0LT50YWcsIHNjLCBpb19yZXEsCiAJCSAgc2dfY291bnQsIGNtZF90cmFjZSwKIAkJICAoKCh1NjQpQ01EX0ZMQUdTKHNjKSA+PiAzMikgfCBDTURfU1RBVEUoc2MpKSk7CisKKwkvKiBpZiBvbmx5IHdlIGlzc3VlZCBJTywgd2lsbCB3ZSBoYXZlIHRoZSBpbyBsb2NrICovCisJaWYgKENNRF9GTEFHUyhzYykgJiBGTklDX0lPX0lOSVRJQUxJWkVEKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvX2xvY2ssIGZsYWdzKTsKKwogCWF0b21pY19kZWMoJmZuaWMtPmluX2ZsaWdodCk7CiAJLyogYWNxdWlyZSBob3N0IGxvY2sgYmVmb3JlIHJldHVybmluZyB0byBTQ1NJICovCiAJc3Bpbl9sb2NrKGxwLT5ob3N0LT5ob3N0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY190cmFjZS5jIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY190cmFjZS5jCmluZGV4IGFjZjFmOTUuLjY1YTliZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfdHJhY2UuYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3RyYWNlLmMKQEAgLTYyNCwxMiArNjI0LDEyIEBACiAJaWYgKGZyYW1lX3R5cGUgPT0gRk5JQ19GQ19SRUNWKSB7CiAJCWV0aF9mY29lX2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKwogCQkJCQlzaXplb2Yoc3RydWN0IGZjb2VfaGRyKTsKLQkJZmNfdHJjX2ZyYW1lX2xlbiA9IGZjX3RyY19mcmFtZV9sZW4gKyBldGhfZmNvZV9oZHJfbGVuOwogCQltZW1zZXQoKGNoYXIgKilmY190cmFjZSwgMHhmZiwgZXRoX2Zjb2VfaGRyX2xlbik7CiAJCS8qIENvcHkgdGhlIHJlc3Qgb2YgZGF0YSBmcmFtZSAqLwogCQltZW1jcHkoKGNoYXIgKikoZmNfdHJhY2UgKyBldGhfZmNvZV9oZHJfbGVuKSwgKHZvaWQgKilmcmFtZSwKIAkJbWluX3QodTgsIGZjX3RyY19mcmFtZV9sZW4sCi0JCQkodTgpKEZDX1RSQ19TSVpFX0JZVEVTIC0gRkNfVFJDX0hFQURFUl9TSVpFKSkpOworCQkJKHU4KShGQ19UUkNfU0laRV9CWVRFUyAtIEZDX1RSQ19IRUFERVJfU0laRQorCQkJCQkJLSBldGhfZmNvZV9oZHJfbGVuKSkpOwogCX0gZWxzZSB7CiAJCW1lbWNweSgoY2hhciAqKWZjX3RyYWNlLCAodm9pZCAqKWZyYW1lLAogCQltaW5fdCh1OCwgZmNfdHJjX2ZyYW1lX2xlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYwppbmRleCBiMzMxMjcyLi5mMzU3OTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jCkBAIC0xOCwyMCArMTgsNiBAQAogICoKICAqIEFkZGVkIElTQVBOUCBzdXBwb3J0IGZvciBEVEM0MzYgYWRhcHRlcnMsCiAgKiBUaG9tYXMgU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2gKLSAqCi0gKiBBTFBIQSBSRUxFQVNFIDEuIAotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCiAvKiAKQEAgLTQwLDE0ICsyNiw2IEBACiAgKi8KIAogLyoKLSAqIE9wdGlvbnMgOgotICoKLSAqIFBBUklUWSAtIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcuICBOb3Qgc3VwcG9ydGVkLgotICoKLSAqIFNDU0kyIC0gZW5hYmxlIHN1cHBvcnQgZm9yIFNDU0ktSUkgdGFnZ2VkIHF1ZXVlaW5nLiAgVW50ZXN0ZWQuCi0gKgotICogVVNMRUVQIC0gZW5hYmxlIHN1cHBvcnQgZm9yIGRldmljZXMgdGhhdCBkb24ndCBkaXNjb25uZWN0LiAgVW50ZXN0ZWQuCi0gKgogICogVGhlIGNhcmQgaXMgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkIGluIG9uZSBvZiBzZXZlcmFsIHdheXMgOiAKICAqIDEuICBXaXRoIGNvbW1hbmQgbGluZSBvdmVycmlkZXMgLSBOQ1I1MzgwPXBvcnQsaXJxIG1heSBiZSAKICAqICAgICB1c2VkIG9uIHRoZSBMSUxPIGNvbW1hbmQgbGluZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuCkBAIC03OSwyNyArNTcsMjEgQEAKICAqLwogCiAvKiBzZXR0aW5ncyBmb3IgRFRDMzE4MUUgY2FyZCB3aXRoIG9ubHkgTXVzdGVrIHNjYW5uZXIgYXR0YWNoZWQgKi8KLSNkZWZpbmUgVVNMRUVQCiAjZGVmaW5lIFVTTEVFUF9QT0xMCTEKICNkZWZpbmUgVVNMRUVQX1NMRUVQCTIwCiAjZGVmaW5lIFVTTEVFUF9XQUlUTE9ORwk1MDAKIAogI2RlZmluZSBBVVRPUFJPQkVfSVJRCi0jZGVmaW5lIEFVVE9TRU5TRQotCiAKICNpZmRlZiBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzQzQwMAogI2RlZmluZSBOQ1I1M0M0MDBfUFNFVURPX0RNQSAxCiAjZGVmaW5lIFBTRVVET19ETUEKICNkZWZpbmUgTkNSNTNDNDAwCi0jZGVmaW5lIE5DUjUzODBfU1RBVFMKLSN1bmRlZiBOQ1I1MzgwX1NUQVRfTElNSVQKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAiZ19OQ1I1MzgwLmgiCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgpAQCAtMjc3LDcgKzI0OSw3IEBACiAgKglMb2Nrczogbm9uZQogICovCiAKLWludCBfX2luaXQgZ2VuZXJpY19OQ1I1MzgwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKK3N0YXRpYyBpbnQgX19pbml0IGdlbmVyaWNfTkNSNTM4MF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKIAlzdGF0aWMgaW50IGN1cnJlbnRfb3ZlcnJpZGUgPSAwOwogCWludCBjb3VudDsKQEAgLTMzNSw3ICszMDcsNyBAQAogCQkJaWYgKHBucF9pcnFfdmFsaWQoZGV2LCAwKSkKIAkJCQlvdmVycmlkZXNbY291bnRdLmlycSA9IHBucF9pcnEoZGV2LCAwKTsKIAkJCWVsc2UKLQkJCQlvdmVycmlkZXNbY291bnRdLmlycSA9IFNDU0lfSVJRX05PTkU7CisJCQkJb3ZlcnJpZGVzW2NvdW50XS5pcnEgPSBOT19JUlE7CiAJCQlpZiAocG5wX2RtYV92YWxpZChkZXYsIDApKQogCQkJCW92ZXJyaWRlc1tjb3VudF0uZG1hID0gcG5wX2RtYShkZXYsIDApOwogCQkJZWxzZQpAQCAtNDU1LDI3ICs0MjcsMjIgQEAKIAkJZWxzZQogCQkJaW5zdGFuY2UtPmlycSA9IE5DUjUzODBfcHJvYmVfaXJxKGluc3RhbmNlLCAweGZmZmYpOwogCi0JCWlmIChpbnN0YW5jZS0+aXJxICE9IFNDU0lfSVJRX05PTkUpCisJCS8qIENvbXBhdGliaWxpdHkgd2l0aCBkb2N1bWVudGVkIE5DUjUzODAga2VybmVsIHBhcmFtZXRlcnMgKi8KKwkJaWYgKGluc3RhbmNlLT5pcnEgPT0gMjU1KQorCQkJaW5zdGFuY2UtPmlycSA9IE5PX0lSUTsKKworCQlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCiAJCQlpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgZ2VuZXJpY19OQ1I1MzgwX2ludHIsCiAJCQkJCTAsICJOQ1I1MzgwIiwgaW5zdGFuY2UpKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogSVJRJWQgbm90IGZyZWUsIGludGVycnVwdHMgZGlzYWJsZWRcbiIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKLQkJCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKKwkJCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROwogCQkJfQogCi0JCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpIHsKKwkJaWYgKGluc3RhbmNlLT5pcnEgPT0gTk9fSVJRKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQgOiBpbnRlcnJ1cHRzIG5vdCBlbmFibGVkLiBmb3IgYmV0dGVyIGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaSVkIDogcGxlYXNlIGp1bXBlciB0aGUgYm9hcmQgZm9yIGEgZnJlZSBJUlEuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJCX0KIAotCQlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQgOiBhdCAiIFNUUlZBTChOQ1I1MzgwX21hcF9uYW1lKSAiIDB4JXgiLCBpbnN0YW5jZS0+aG9zdF9ubywgKHVuc2lnbmVkIGludCkgaW5zdGFuY2UtPk5DUjUzODBfaW5zdGFuY2VfbmFtZSk7Ci0JCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JCQlwcmludGsoIiBpbnRlcnJ1cHRzIGRpc2FibGVkIik7Ci0JCWVsc2UKLQkJCXByaW50aygiIGlycSAlZCIsIGluc3RhbmNlLT5pcnEpOwotCQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCAgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsIENBTl9RVUVVRSwgQ01EX1BFUl9MVU4sIEdFTkVSSUNfTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0JCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JCXByaW50aygiXG4iKTsKLQogCQkrK2N1cnJlbnRfb3ZlcnJpZGU7CiAJCSsrY291bnQ7CiAJfQpAQCAtNDgzLDE5ICs0NTAsNiBAQAogfQogCiAvKioKLSAqCWdlbmVyaWNfTkNSNTM4MF9pbmZvCS0JcmVwb3J0aW5nIHN0cmluZwotICoJQGhvc3Q6IE5DUjUzODAgdG8gcmVwb3J0IG9uCi0gKgotICoJUmVwb3J0IGRyaXZlciBpbmZvcm1hdGlvbiBmb3IgdGhlIE5DUjUzODAKLSAqLwotIAkKLWNvbnN0IGNoYXIgKmdlbmVyaWNfTkNSNTM4MF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgc3RyaW5nW10gPSAiR2VuZXJpYyBOQ1I1MzgwLzUzQzQwMCBEcml2ZXIiOwotCXJldHVybiBzdHJpbmc7Ci19Ci0KLS8qKgogICoJZ2VuZXJpY19OQ1I1MzgwX3JlbGVhc2VfcmVzb3VyY2VzCS0JZnJlZSByZXNvdXJjZXMKICAqCUBpbnN0YW5jZTogaG9zdCBhZGFwdGVyIHRvIGNsZWFuIHVwIAogICoKQEAgLTUwNCwxMiArNDU4LDEyIEBACiAgKglMb2Nrczogbm9uZQogICovCiAgCi1pbnQgZ2VuZXJpY19OQ1I1MzgwX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCk7CiAJTkNSNTM4MF9zZXR1cChpbnN0YW5jZSk7CiAJCi0JaWYgKGluc3RhbmNlLT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCiAJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKIAlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOwogCkBAIC03NDEsMTYzICs2OTUsOSBAQAogIAogI2luY2x1ZGUgIk5DUjUzODAuYyIKIAotI2RlZmluZSBQUklOVFAoeCkgc2VxX3ByaW50ZihtLCB4KQotI2RlZmluZSBBTkRQICwKLQotc3RhdGljIHZvaWQgc3ByaW50X29wY29kZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBvcGNvZGUpCi17Ci0JUFJJTlRQKCIweCUwMnggIiBBTkRQIG9wY29kZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwcmludF9jb21tYW5kKHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgY2hhciAqY29tbWFuZCkKLXsKLQlpbnQgaSwgczsKLQlzcHJpbnRfb3Bjb2RlKG0sIGNvbW1hbmRbMF0pOwotCWZvciAoaSA9IDEsIHMgPSBDT01NQU5EX1NJWkUoY29tbWFuZFswXSk7IGkgPCBzOyArK2kpCi0JCVBSSU5UUCgiJTAyeCAiIEFORFAgY29tbWFuZFtpXSk7Ci0JUFJJTlRQKCJcbiIpOwotfQotCi0vKioKLSAqCXNwcmludGZfU2NzaV9DbW5kCS0JcHJpbnQgYSBzY3NpIGNvbW1hbmQKLSAqCUBtOiBzZXFfZmlsIHRvIHByaW50IGludG8KLSAqCUBjbWQ6IFNDU0kgY29tbWFuZCBibG9jawotICoJCi0gKglQcmludCBvdXQgdGhlIHRhcmdldCBhbmQgY29tbWFuZCBkYXRhIGluIGhleAotICovCi0KLXN0YXRpYyB2b2lkIHNwcmludF9TY3NpX0NtbmQoc3RydWN0IHNlcV9maWxlICptLCBTY3NpX0NtbmQgKiBjbWQpCi17Ci0JUFJJTlRQKCJob3N0IG51bWJlciAlZCBkZXN0aW5hdGlvbiB0YXJnZXQgJWQsIGx1biAlbGx1XG4iIEFORFAgY21kLT5kZXZpY2UtPmhvc3QtPmhvc3Rfbm8gQU5EUCBjbWQtPmRldmljZS0+aWQgQU5EUCBjbWQtPmRldmljZS0+bHVuKTsKLQlQUklOVFAoIiAgICAgICAgY29tbWFuZCA9ICIpOwotCXNwcmludF9jb21tYW5kKG0sIGNtZC0+Y21uZCk7Ci19Ci0KLS8qKgotICoJZ2VuZXJpY19OQ1I1MzgwX3Byb2NfaW5mbwktCS9wcm9jIGZvciBOQ1I1MzgwIGRyaXZlcgotICoJQGJ1ZmZlcjogYnVmZmVyIHRvIHByaW50IGludG8KLSAqCUBzdGFydDogc3RhcnQgcG9zaXRpb24KLSAqCUBvZmZzZXQ6IG9mZnNldCBpbnRvIGJ1ZmZlcgotICoJQGxlbjogbGVuZ3RoCi0gKglAaG9zdG5vOiBpbnN0YW5jZSB0byBhZmZlY3QKLSAqCUBpbm91dDogcmVhZC93cml0ZQotICoKLSAqCVByb3ZpZGUgdGhlIHByb2NmcyBpbmZvcm1hdGlvbiBmb3IgdGhlIDUzODAgY29udHJvbGxlci4gV2UgZmlsbAotICoJdGhpcyB3aXRoIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHRoZSBjb21tYW5kcwotICoJYmVpbmcgZXhlY3V0ZWQsIGRpc2Nvbm5lY3RlZCBjb21tYW5kIHF1ZXVlIGFuZCB0aGUgc3RhdGlzdGljYWwKLSAqCWRhdGEKLSAqCi0gKglMb2NrczogZ2xvYmFsIGNsaS9sb2NrIGZvciBxdWV1ZSB3YWxrCi0gKi8KLSAKLXN0YXRpYyBpbnQgZ2VuZXJpY19OQ1I1MzgwX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfcHRyKQotewotCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciBzdGF0dXM7Ci0JaW50IGk7Ci0JU2NzaV9DbW5kICpwdHI7Ci0Jc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhOwotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldjsKLSNlbmRpZgotCi0JTkNSNTM4MF9zZXR1cChzY3NpX3B0cik7Ci0JaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgc2NzaV9wdHItPmhvc3RkYXRhOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2NzaV9wdHItPmhvc3RfbG9jaywgZmxhZ3MpOwotCVBSSU5UUCgiU0NTSSBob3N0IG51bWJlciAlZCA6ICVzXG4iIEFORFAgc2NzaV9wdHItPmhvc3Rfbm8gQU5EUCBzY3NpX3B0ci0+aG9zdHQtPm5hbWUpOwotCVBSSU5UUCgiR2VuZXJpYyBOQ1I1MzgwIGRyaXZlciB2ZXJzaW9uICVkXG4iIEFORFAgR0VORVJJQ19OQ1I1MzgwX1BVQkxJQ19SRUxFQVNFKTsKLQlQUklOVFAoIk5DUjUzODAgY29yZSB2ZXJzaW9uICVkXG4iIEFORFAgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0jaWZkZWYgTkNSNTNDNDAwCi0JUFJJTlRQKCJOQ1I1M0M0MDAgZXh0ZW5zaW9uIHZlcnNpb24gJWRcbiIgQU5EUCBOQ1I1M0M0MDBfUFVCTElDX1JFTEVBU0UpOwotCVBSSU5UUCgiTkNSNTNDNDAwIGNhcmQlcyBkZXRlY3RlZFxuIiBBTkRQKCgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgc2NzaV9wdHItPmhvc3RkYXRhKS0+ZmxhZ3MgJiBGTEFHX05DUjUzQzQwMCkgPyAiIiA6ICIgbm90Iik7Ci0jIGlmIE5DUjUzQzQwMF9QU0VVRE9fRE1BCi0JUFJJTlRQKCJOQ1I1M0M0MDAgcHNldWRvIERNQSB1c2VkXG4iKTsKLSMgZW5kaWYKLSNlbHNlCi0JUFJJTlRQKCJOTyBOQ1I1M0M0MDAgZHJpdmVyIGV4dGVuc2lvbnNcbiIpOwotI2VuZGlmCi0JUFJJTlRQKCJVc2luZyAlcyBtYXBwaW5nIGF0ICVzIDB4JWx4LCAiIEFORFAgU1RSVkFMKE5DUjUzODBfbWFwX2NvbmZpZykgQU5EUCBTVFJWQUwoTkNSNTM4MF9tYXBfbmFtZSkgQU5EUCBzY3NpX3B0ci0+TkNSNTM4MF9pbnN0YW5jZV9uYW1lKTsKLQlpZiAoc2NzaV9wdHItPmlycSA9PSBTQ1NJX0lSUV9OT05FKQotCQlQUklOVFAoIm5vIGludGVycnVwdFxuIik7Ci0JZWxzZQotCQlQUklOVFAoIm9uIGludGVycnVwdCAlZFxuIiBBTkRQIHNjc2lfcHRyLT5pcnEpOwotCi0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCWlmIChob3N0ZGF0YS0+Y29ubmVjdGVkIHx8IGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSB8fCBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKQotCQlQUklOVFAoIlRoZXJlIGFyZSBjb21tYW5kcyBwZW5kaW5nLCB0cmFuc2ZlciByYXRlcyBtYXkgYmUgY3J1ZFxuIik7Ci0JaWYgKGhvc3RkYXRhLT5wZW5kaW5ncikKLQkJUFJJTlRQKCIgICVkIHBlbmRpbmcgcmVhZHMiIEFORFAgaG9zdGRhdGEtPnBlbmRpbmdyKTsKLQlpZiAoaG9zdGRhdGEtPnBlbmRpbmd3KQotCQlQUklOVFAoIiAgJWQgcGVuZGluZyB3cml0ZXMiIEFORFAgaG9zdGRhdGEtPnBlbmRpbmd3KTsKLQlpZiAoaG9zdGRhdGEtPnBlbmRpbmdyIHx8IGhvc3RkYXRhLT5wZW5kaW5ndykKLQkJUFJJTlRQKCJcbiIpOwotCXNob3N0X2Zvcl9lYWNoX2RldmljZShkZXYsIHNjc2lfcHRyKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYnIgPSBob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtkZXYtPmlkXTsKLQkJdW5zaWduZWQgbG9uZyBidyA9IGhvc3RkYXRhLT5ieXRlc193cml0ZVtkZXYtPmlkXTsKLQkJbG9uZyB0ciA9IGhvc3RkYXRhLT50aW1lX3JlYWRbZGV2LT5pZF0gLyBIWjsKLQkJbG9uZyB0dyA9IGhvc3RkYXRhLT50aW1lX3dyaXRlW2Rldi0+aWRdIC8gSFo7Ci0KLQkJUFJJTlRQKCIgIFQ6JWQgJXMgIiBBTkRQIGRldi0+aWQgQU5EUCBzY3NpX2RldmljZV90eXBlKGRldi0+dHlwZSkpOwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQkJaWYgKGRldi0+dmVuZG9yW2ldID49IDB4MjApCi0JCQkJc2VxX3B1dGMobSwgZGV2LT52ZW5kb3JbaV0pOwotCQlzZXFfcHV0YyhtLCAnICcpOwotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJCWlmIChkZXYtPm1vZGVsW2ldID49IDB4MjApCi0JCQkJc2VxX3B1dGMobSwgZGV2LT5tb2RlbFtpXSk7Ci0JCXNlcV9wdXRjKG0sICcgJyk7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQlpZiAoZGV2LT5yZXZbaV0gPj0gMHgyMCkKLQkJCQlzZXFfcHV0YyhtLCBkZXYtPnJldltpXSk7Ci0JCXNlcV9wdXRjKG0sICcgJyk7Ci0KLQkJUFJJTlRQKCJcbiUxMGxkIGtiIHJlYWQgICAgaW4gJTVsZCBzZWNzIiBBTkRQIGJyIC8gMTAyNCBBTkRQIHRyKTsKLQkJaWYgKHRyKQotCQkJUFJJTlRQKCIgQCAlNWxkIGJwcyIgQU5EUCBiciAvIHRyKTsKLQotCQlQUklOVFAoIlxuJTEwbGQga2Igd3JpdHRlbiBpbiAlNWxkIHNlY3MiIEFORFAgYncgLyAxMDI0IEFORFAgdHcpOwotCQlpZiAodHcpCi0JCQlQUklOVFAoIiBAICU1bGQgYnBzIiBBTkRQIGJ3IC8gdHcpOwotCQlQUklOVFAoIlxuIik7Ci0JfQotI2VuZGlmCi0KLQlzdGF0dXMgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRyk7Ci0JaWYgKCEoc3RhdHVzICYgU1JfUkVRKSkKLQkJUFJJTlRQKCJSRVEgbm90IGFzc2VydGVkLCBwaGFzZSB1bmtub3duLlxuIik7Ci0JZWxzZSB7Ci0JCWZvciAoaSA9IDA7IChwaGFzZXNbaV0udmFsdWUgIT0gUEhBU0VfVU5LTk9XTikgJiYgKHBoYXNlc1tpXS52YWx1ZSAhPSAoc3RhdHVzICYgUEhBU0VfTUFTSykpOyArK2kpOwotCQlQUklOVFAoIlBoYXNlICVzXG4iIEFORFAgcGhhc2VzW2ldLm5hbWUpOwotCX0KLQotCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCQlQUklOVFAoIk5vIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZFxuIik7Ci0JfSBlbHNlIHsKLQkJc3ByaW50X1Njc2lfQ21uZChtLCAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQpOwotCX0KLQotCVBSSU5UUCgiaXNzdWVfcXVldWVcbiIpOwotCi0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSAoU2NzaV9DbW5kICopIHB0ci0+aG9zdF9zY3JpYmJsZSkKLQkJc3ByaW50X1Njc2lfQ21uZChtLCBwdHIpOwotCi0JUFJJTlRQKCJkaXNjb25uZWN0ZWRfcXVldWVcbiIpOwotCi0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsgcHRyID0gKFNjc2lfQ21uZCAqKSBwdHItPmhvc3Rfc2NyaWJibGUpCi0JCXNwcmludF9TY3NpX0NtbmQobSwgcHRyKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NzaV9wdHItPmhvc3RfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0jdW5kZWYgUFJJTlRQCi0jdW5kZWYgQU5EUAotCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnNob3dfaW5mbyAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9zaG93X2luZm8sCi0JLm5hbWUgICAgICAgICAgIAk9ICJHZW5lcmljIE5DUjUzODAvTkNSNTNDNDAwIFNjc2kgRHJpdmVyIiwKKwkubmFtZSAgICAgICAgICAgCT0gIkdlbmVyaWMgTkNSNTM4MC9OQ1I1M0M0MDAgU0NTSSIsCiAJLmRldGVjdCAgICAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9kZXRlY3QsCiAJLnJlbGVhc2UgICAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9yZWxlYXNlX3Jlc291cmNlcywKIAkuaW5mbyAgICAgICAgICAgCT0gZ2VuZXJpY19OQ1I1MzgwX2luZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmggYi9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmgKaW5kZXggNzAzYWRmNy4uYmVhMWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuaApAQCAtOSwyOCArOSwxMSBAQAogICoKICAqIE5DUjUzQzQwMCBleHRlbnNpb25zIChjKSAxOTk0LDE5OTUsMTk5NiwgS2V2aW4gTGVudGluCiAgKiAgICBLLkxlbnRpbkBjcy5tb25hc2guZWR1LmF1Ci0gKgotICogQUxQSEEgUkVMRUFTRSAxLiAKLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgCi0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0CiAgKi8KIAogI2lmbmRlZiBHRU5FUklDX05DUjUzODBfSAogI2RlZmluZSBHRU5FUklDX05DUjUzODBfSAogCi0KLSNkZWZpbmUgR0VORVJJQ19OQ1I1MzgwX1BVQkxJQ19SRUxFQVNFIDEKLQogI2lmZGVmIE5DUjUzQzQwMAogI2RlZmluZSBCSU9TUEFSQU0KICNkZWZpbmUgTkNSNTM4MF9CSU9TUEFSQU0gZ2VuZXJpY19OQ1I1MzgwX2Jpb3NwYXJhbQpAQCAtMzksMTIgKzIyLDYgQEAKICNlbmRpZgogCiAjaWZuZGVmIEFTTQotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfYWJvcnQoU2NzaV9DbW5kICopOwotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7Ci1zdGF0aWMgaW50IGdlbmVyaWNfTkNSNTM4MF9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IGdlbmVyaWNfTkNSNTM4MF9idXNfcmVzZXQoU2NzaV9DbW5kICopOwotc3RhdGljIGNvbnN0IGNoYXIqIGdlbmVyaWNfTkNSNTM4MF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7CiAKICNpZm5kZWYgQ01EX1BFUl9MVU4KICNkZWZpbmUgQ01EX1BFUl9MVU4gMgpAQCAtMTE4LDcgKzk1LDggQEAKICNkZWZpbmUgTkNSNTM4MF9idXNfcmVzZXQgZ2VuZXJpY19OQ1I1MzgwX2J1c19yZXNldAogI2RlZmluZSBOQ1I1MzgwX3ByZWFkIGdlbmVyaWNfTkNSNTM4MF9wcmVhZAogI2RlZmluZSBOQ1I1MzgwX3B3cml0ZSBnZW5lcmljX05DUjUzODBfcHdyaXRlCi0jZGVmaW5lIE5DUjUzODBfcHJvY19pbmZvIG5vdHlldF9nZW5lcmljX3Byb2NfaW5mbworI2RlZmluZSBOQ1I1MzgwX2luZm8gZ2VuZXJpY19OQ1I1MzgwX2luZm8KKyNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gZ2VuZXJpY19OQ1I1MzgwX3Nob3dfaW5mbwogCiAjZGVmaW5lIEJPQVJEX05DUjUzODAJMAogI2RlZmluZSBCT0FSRF9OQ1I1M0M0MDAJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGguYyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKaW5kZXggMGYxYWUxMy4uNzFlMTM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGguYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCkBAIC0yMTU5LDcgKzIxNTksNyBAQAogICAgICAgICAgICAgICBjYXNlIFZFUklGWToKICAgICAgICAgICAgICAgY2FzZSBTVEFSVF9TVE9QOgogICAgICAgICAgICAgICBjYXNlIE1PREVfU0VOU0U6Ci0gICAgICAgICAgICAgIGNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisgICAgICAgICAgICAgIGNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAgICAgICAgICAgICAgICAgVFJBQ0UoKCJjYWNoZSBjbWQgJXgvJXgvJXgvJXgvJXgvJXhcbiIsbnNjcC0+Y21uZFswXSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNjcC0+Y21uZFsxXSxuc2NwLT5jbW5kWzJdLG5zY3AtPmNtbmRbM10sCiAgICAgICAgICAgICAgICAgICAgICAgIG5zY3AtPmNtbmRbNF0sbnNjcC0+Y21uZFs1XSkpOwpAQCAtMjM5MSw3ICsyMzkxLDcgQEAKICAgICAgICAgZ2R0aF9jb3B5X2ludGVybmFsX2RhdGEoaGEsIHNjcCwgKGNoYXIqKSZyZGMsIHNpemVvZihnZHRoX3JkY2FwX2RhdGEpKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICAgIGNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisgICAgICBjYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogICAgICAgICBpZiAoKHNjcC0+Y21uZFsxXSAmIDB4MWYpID09IFNBSV9SRUFEX0NBUEFDSVRZXzE2ICYmCiAgICAgICAgICAgICAoaGEtPmNhY2hlX2ZlYXQgJiBHRFRfNjRCSVQpKSB7CiAgICAgICAgICAgICBnZHRoX3JkY2FwMTZfZGF0YSByZGMxNjsKQEAgLTQ2NjEsNyArNDY2MSw2IEBACiAvKiBjb25maWd1cmUgbHVuICovCiBzdGF0aWMgaW50IGdkdGhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLSAgICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBzZGV2LT5ob3N0LT5jbWRfcGVyX2x1bik7CiAgICAgc2Rldi0+c2tpcF9tc19wYWdlXzNmID0gMTsKICAgICBzZGV2LT5za2lwX21zX3BhZ2VfOCA9IDE7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IDZkZTgwZTMuLjhiYjE3M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC00MTgsNyArNDE4LDYgQEAKIAlzaG9zdC0+Y21kX3Blcl9sdW4gPSBzaHQtPmNtZF9wZXJfbHVuOwogCXNob3N0LT51bmNoZWNrZWRfaXNhX2RtYSA9IHNodC0+dW5jaGVja2VkX2lzYV9kbWE7CiAJc2hvc3QtPnVzZV9jbHVzdGVyaW5nID0gc2h0LT51c2VfY2x1c3RlcmluZzsKLQlzaG9zdC0+b3JkZXJlZF90YWcgPSBzaHQtPm9yZGVyZWRfdGFnOwogCXNob3N0LT5ub193cml0ZV9zYW1lID0gc2h0LT5ub193cml0ZV9zYW1lOwogCiAJaWYgKHNob3N0X2VoX2RlYWRsaW5lID09IC0xIHx8ICFzaHQtPmVoX2hvc3RfcmVzZXRfaGFuZGxlcikKQEAgLTQ4NSw4ICs0ODQsOCBAQAogCQkJCQkgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLAogCQkJCQkgICAxLCBzaG9zdC0+aG9zdF9ubyk7CiAJaWYgKCFzaG9zdC0+dG1mX3dvcmtfcSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IGZhaWxlZCB0byBjcmVhdGUgdG1mIHdvcmtxXG4iLAotCQkgICAgICAgc2hvc3QtPmhvc3Rfbm8pOworCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBzaG9zdCwKKwkJCSAgICAgImZhaWxlZCB0byBjcmVhdGUgdG1mIHdvcmtxXG4iKTsKIAkJZ290byBmYWlsX2t0aHJlYWQ7CiAJfQogCXNjc2lfcHJvY19ob3N0ZGlyX2FkZChzaG9zdC0+aG9zdHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuYyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKaW5kZXggY2VmNWQ0OS4uNmJiNDYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2EuYworKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS1kZWZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiaHBzYV9jbWQuaCIKQEAgLTEwMyw3ICsxMDQsNiBAQAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTSCwgICAgIDB4MTAzQywgMHgxOTIyfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0gsICAgICAweDEwM0MsIDB4MTkyM30sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NILCAgICAgMHgxMDNDLCAweDE5MjR9LAotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTSCwgICAgIDB4MTAzQywgMHgxOTI1fSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0gsICAgICAweDEwM0MsIDB4MTkyNn0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NILCAgICAgMHgxMDNDLCAweDE5Mjh9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTSCwgICAgIDB4MTAzQywgMHgxOTI5fSwKQEAgLTE0OSw2ICsxNDksNyBAQAogCXsweDMyNDkxMDNDLCAiU21hcnQgQXJyYXkgUDgxMiIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjRBMTAzQywgIlNtYXJ0IEFycmF5IFA3MTJtIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNEIxMDNDLCAiU21hcnQgQXJyYXkgUDcxMW0iLCAmU0E1X2FjY2Vzc30sCisJezB4MzIzMzEwM0MsICJIUCBTdG9yYWdlV29ya3MgMTIxMG0iLCAmU0E1X2FjY2Vzc30sIC8qIGFsaWFzIG9mIDMzM2YgKi8KIAl7MHgzMzUwMTAzQywgIlNtYXJ0IEFycmF5IFAyMjIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzM1MTEwM0MsICJTbWFydCBBcnJheSBQNDIwIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMzNTIxMDNDLCAiU21hcnQgQXJyYXkgUDQyMSIsICZTQTVfYWNjZXNzfSwKQEAgLTE5MywxMiArMTk0LDEzIEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHJfaW50eChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGlycXJldHVybl90IGRvX2hwc2FfaW50cl9tc2koaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyBpbnQgaHBzYV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKTsKK3N0YXRpYyBpbnQgaHBzYV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBzdGF0aWMgdm9pZCBsb2NrX2FuZF9zdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyB2b2lkIHN0YXJ0X2lvKHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19DT01QQVQKLXN0YXRpYyBpbnQgaHBzYV9jb21wYXRfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLAorCXZvaWQgX191c2VyICphcmcpOwogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGNtZF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CkBAIC0yMTQsOCArMjE2LDYgQEAKIHN0YXRpYyB2b2lkIGhwc2Ffc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwogc3RhdGljIGludCBocHNhX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2gsCiAJdW5zaWduZWQgbG9uZyBlbGFwc2VkX3RpbWUpOwotc3RhdGljIGludCBocHNhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JaW50IHFkZXB0aCwgaW50IHJlYXNvbik7CiAKIHN0YXRpYyBpbnQgaHBzYV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kKTsKIHN0YXRpYyBpbnQgaHBzYV9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2ljbWQpOwpAQCAtMjc0LDEyICsyNzQsMTIgQEAKIAkJCSJkZXRlY3RlZCwgY29tbWFuZCByZXRyaWVkXG4iLCBoLT5jdGxyKTsKIAkJYnJlYWs7CiAJY2FzZSBMVU5fRkFJTEVEOgotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCBIUFNBICIlZDogTFVOIGZhaWx1cmUgIgotCQkJImRldGVjdGVkLCBhY3Rpb24gcmVxdWlyZWRcbiIsIGgtPmN0bHIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJSFBTQSAiJWQ6IExVTiBmYWlsdXJlIGRldGVjdGVkXG4iLCBoLT5jdGxyKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVBPUlRfTFVOU19DSEFOR0VEOgotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCBIUFNBICIlZDogcmVwb3J0IExVTiBkYXRhICIKLQkJCSJjaGFuZ2VkLCBhY3Rpb24gcmVxdWlyZWRcbiIsIGgtPmN0bHIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJSFBTQSAiJWQ6IHJlcG9ydCBMVU4gZGF0YSBjaGFuZ2VkXG4iLCBoLT5jdGxyKTsKIAkvKgogCSAqIE5vdGU6IHRoaXMgUkVQT1JUX0xVTlNfQ0hBTkdFRCBjb25kaXRpb24gb25seSBvY2N1cnMgb24gdGhlIGV4dGVybmFsCiAJICogdGFyZ2V0IChhcnJheSkgZGV2aWNlcy4KQEAgLTM5Miw3ICszOTIsOCBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gc2hvc3RfdG9faGJhKHNob3N0KTsKIAotCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJWRcbiIsIGgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVkXG4iLAorCQkJYXRvbWljX3JlYWQoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhvc3Rfc2hvd190cmFuc3BvcnRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC02NzAsNyArNjcxLDcgQEAKIAkucXVldWVjb21tYW5kCQk9IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kLAogCS5zY2FuX3N0YXJ0CQk9IGhwc2Ffc2Nhbl9zdGFydCwKIAkuc2Nhbl9maW5pc2hlZAkJPSBocHNhX3NjYW5fZmluaXNoZWQsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGhwc2FfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkudGhpc19pZAkJPSAtMSwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLmVoX2Fib3J0X2hhbmRsZXIJPSBocHNhX2VoX2Fib3J0X2hhbmRsZXIsCkBAIC02OTgsNyArNjk5LDYgQEAKIHsKIAl1MzIgYTsKIAlzdHJ1Y3QgcmVwbHlfcXVldWVfYnVmZmVyICpycSA9ICZoLT5yZXBseV9xdWV1ZVtxXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGgtPnRyYW5zTWV0aG9kICYgQ0ZHVEJMX1RyYW5zX2lvX2FjY2VsMSkKIAkJcmV0dXJuIGgtPmFjY2Vzcy5jb21tYW5kX2NvbXBsZXRlZChoLCBxKTsKQEAgLTcwOSw5ICs3MDksNyBAQAogCWlmICgocnEtPmhlYWRbcnEtPmN1cnJlbnRfZW50cnldICYgMSkgPT0gcnEtPndyYXBhcm91bmQpIHsKIAkJYSA9IHJxLT5oZWFkW3JxLT5jdXJyZW50X2VudHJ5XTsKIAkJcnEtPmN1cnJlbnRfZW50cnkrKzsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCQlhdG9taWNfZGVjKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAJfSBlbHNlIHsKIAkJYSA9IEZJRk9fRU1QVFk7CiAJfQpAQCAtMTUwMCwyMiArMTQ5OCwyMiBAQAogewogCXN0cnVjdCBTR0Rlc2NyaXB0b3IgKmNoYWluX3NnLCAqY2hhaW5fYmxvY2s7CiAJdTY0IHRlbXA2NDsKKwl1MzIgY2hhaW5fbGVuOwogCiAJY2hhaW5fc2cgPSAmYy0+U0dbaC0+bWF4X2NtZF9zZ19lbnRyaWVzIC0gMV07CiAJY2hhaW5fYmxvY2sgPSBoLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF07Ci0JY2hhaW5fc2ctPkV4dCA9IEhQU0FfU0dfQ0hBSU47Ci0JY2hhaW5fc2ctPkxlbiA9IHNpemVvZigqY2hhaW5fc2cpICoKKwljaGFpbl9zZy0+RXh0ID0gY3B1X3RvX2xlMzIoSFBTQV9TR19DSEFJTik7CisJY2hhaW5fbGVuID0gc2l6ZW9mKCpjaGFpbl9zZykgKgogCQkoYy0+SGVhZGVyLlNHVG90YWwgLSBoLT5tYXhfY21kX3NnX2VudHJpZXMpOwotCXRlbXA2NCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGNoYWluX2Jsb2NrLCBjaGFpbl9zZy0+TGVuLAorCWNoYWluX3NnLT5MZW4gPSBjcHVfdG9fbGUzMihjaGFpbl9sZW4pOworCXRlbXA2NCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGNoYWluX2Jsb2NrLCBjaGFpbl9sZW4sCiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZoLT5wZGV2LT5kZXYsIHRlbXA2NCkpIHsKIAkJLyogcHJldmVudCBzdWJzZXF1ZW50IHVubWFwcGluZyAqLwotCQljaGFpbl9zZy0+QWRkci5sb3dlciA9IDA7Ci0JCWNoYWluX3NnLT5BZGRyLnVwcGVyID0gMDsKKwkJY2hhaW5fc2ctPkFkZHIgPSBjcHVfdG9fbGU2NCgwKTsKIAkJcmV0dXJuIC0xOwogCX0KLQljaGFpbl9zZy0+QWRkci5sb3dlciA9ICh1MzIpICh0ZW1wNjQgJiAweDBGRkZGRkZGRlVMTCk7Ci0JY2hhaW5fc2ctPkFkZHIudXBwZXIgPSAodTMyKSAoKHRlbXA2NCA+PiAzMikgJiAweDBGRkZGRkZGRlVMTCk7CisJY2hhaW5fc2ctPkFkZHIgPSBjcHVfdG9fbGU2NCh0ZW1wNjQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTIzLDE1ICsxNTIxLDEzIEBACiAJc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewogCXN0cnVjdCBTR0Rlc2NyaXB0b3IgKmNoYWluX3NnOwotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CiAKLQlpZiAoYy0+SGVhZGVyLlNHVG90YWwgPD0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzKQorCWlmIChsZTE2X3RvX2NwdShjLT5IZWFkZXIuU0dUb3RhbCkgPD0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzKQogCQlyZXR1cm47CiAKIAljaGFpbl9zZyA9ICZjLT5TR1toLT5tYXhfY21kX3NnX2VudHJpZXMgLSAxXTsKLQl0ZW1wNjQudmFsMzIubG93ZXIgPSBjaGFpbl9zZy0+QWRkci5sb3dlcjsKLQl0ZW1wNjQudmFsMzIudXBwZXIgPSBjaGFpbl9zZy0+QWRkci51cHBlcjsKLQlwY2lfdW5tYXBfc2luZ2xlKGgtPnBkZXYsIHRlbXA2NC52YWwsIGNoYWluX3NnLT5MZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCXBjaV91bm1hcF9zaW5nbGUoaC0+cGRldiwgbGU2NF90b19jcHUoY2hhaW5fc2ctPkFkZHIpLAorCQkJbGUzMl90b19jcHUoY2hhaW5fc2ctPkxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCiAKQEAgLTE3MzIsOCArMTcyOCw3IEBACiAJCXN0cnVjdCBpb19hY2NlbDFfY21kICpjID0gJmgtPmlvYWNjZWxfY21kX3Bvb2xbY3AtPmNtZGluZGV4XTsKIAkJY3AtPkhlYWRlci5TR0xpc3QgPSBjcC0+SGVhZGVyLlNHVG90YWwgPSBzY3NpX3NnX2NvdW50KGNtZCk7CiAJCWNwLT5SZXF1ZXN0LkNEQkxlbiA9IGMtPmlvX2ZsYWdzICYgSU9BQ0NFTDFfSU9GTEFHU19DREJMRU5fTUFTSzsKLQkJY3AtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5UYWcubG93ZXI7Ci0JCWNwLT5IZWFkZXIuVGFnLnVwcGVyID0gYy0+VGFnLnVwcGVyOworCQljcC0+SGVhZGVyLnRhZyA9IGMtPnRhZzsKIAkJbWVtY3B5KGNwLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgYy0+Q0lTU19MVU4sIDgpOwogCQltZW1jcHkoY3AtPlJlcXVlc3QuQ0RCLCBjLT5DREIsIGNwLT5SZXF1ZXN0LkNEQkxlbik7CiAKQEAgLTE3NjMsNzIgKzE3NTgsMTMgQEAKIAkJCS8qIEdldCBhZGRpdGlvbiBzZW5zZSBjb2RlIHF1YWxpZmllciAqLwogCQkJYXNjcSA9IGVpLT5TZW5zZUluZm9bMTNdOwogCQl9Ci0KIAkJaWYgKGVpLT5TY3NpU3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgewotCQkJaWYgKGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihoLCBjcCkpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoc2Vuc2Vfa2V5ID09IElMTEVHQUxfUkVRVUVTVCkgewotCQkJCS8qCi0JCQkJICogU0NTSSBSRVBPUlRfTFVOUyBpcyBjb21tb25seSB1bnN1cHBvcnRlZCBvbgotCQkJCSAqIFNtYXJ0IEFycmF5LiAgU3VwcHJlc3Mgbm9pc3kgY29tcGxhaW50LgotCQkJCSAqLwotCQkJCWlmIChjcC0+UmVxdWVzdC5DREJbMF0gPT0gUkVQT1JUX0xVTlMpCi0JCQkJCWJyZWFrOwotCi0JCQkJLyogSWYgQVNDL0FTQ1EgaW5kaWNhdGUgTG9naWNhbCBVbml0Ci0JCQkJICogTm90IFN1cHBvcnRlZCBjb25kaXRpb24sCi0JCQkJICovCi0JCQkJaWYgKChhc2MgPT0gMHgyNSkgJiYgKGFzY3EgPT0gMHgwKSkgewotCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgotCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb25cbiIsIGNwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoc2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkgewotCQkJCS8qIElmIFNlbnNlIGlzIE5vdCBSZWFkeSwgTG9naWNhbCBVbml0Ci0JCQkJICogTm90IHJlYWR5LCBNYW51YWwgSW50ZXJ2ZW50aW9uCi0JCQkJICogcmVxdWlyZWQKLQkJCQkgKi8KLQkJCQlpZiAoKGFzYyA9PSAweDA0KSAmJiAoYXNjcSA9PSAweDAzKSkgewotCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgotCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IHVuaXQgIgotCQkJCQkJIm5vdCByZWFkeSwgbWFudWFsICIKLQkJCQkJCSJpbnRlcnZlbnRpb24gcmVxdWlyZWRcbiIsIGNwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQogCQkJaWYgKHNlbnNlX2tleSA9PSBBQk9SVEVEX0NPTU1BTkQpIHsKLQkJCQkvKiBBYm9ydGVkIGNvbW1hbmQgaXMgcmV0cnlhYmxlICovCi0JCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwICIKLQkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IGFib3J0ZWQgY29tbWFuZDogIgotCQkJCQkiQVNDOiAweCV4LCBBU0NROiAweCV4XG4iLAotCQkJCQljcCwgYXNjLCBhc2NxKTsKIAkJCQljbWQtPnJlc3VsdCB8PSBESURfU09GVF9FUlJPUiA8PCAxNjsKIAkJCQlicmVhazsKIAkJCX0KLQkJCS8qIE11c3QgYmUgc29tZSBvdGhlciB0eXBlIG9mIGNoZWNrIGNvbmRpdGlvbiAqLwotCQkJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFzIGNoZWNrIGNvbmRpdGlvbjogIgotCQkJCQkidW5rbm93biB0eXBlOiAiCi0JCQkJCSJTZW5zZTogMHgleCwgQVNDOiAweCV4LCBBU0NROiAweCV4LCAiCi0JCQkJCSJSZXR1cm5pbmcgcmVzdWx0OiAweCV4LCAiCi0JCQkJCSJjbWQ9WyUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCi0JCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCi0JCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhdXG4iLAotCQkJCQljcCwgc2Vuc2Vfa2V5LCBhc2MsIGFzY3EsCi0JCQkJCWNtZC0+cmVzdWx0LAotCQkJCQljbWQtPmNtbmRbMF0sIGNtZC0+Y21uZFsxXSwKLQkJCQkJY21kLT5jbW5kWzJdLCBjbWQtPmNtbmRbM10sCi0JCQkJCWNtZC0+Y21uZFs0XSwgY21kLT5jbW5kWzVdLAotCQkJCQljbWQtPmNtbmRbNl0sIGNtZC0+Y21uZFs3XSwKLQkJCQkJY21kLT5jbW5kWzhdLCBjbWQtPmNtbmRbOV0sCi0JCQkJCWNtZC0+Y21uZFsxMF0sIGNtZC0+Y21uZFsxMV0sCi0JCQkJCWNtZC0+Y21uZFsxMl0sIGNtZC0+Y21uZFsxM10sCi0JCQkJCWNtZC0+Y21uZFsxNF0sIGNtZC0+Y21uZFsxNV0pOwogCQkJYnJlYWs7CiAJCX0KLQotCiAJCS8qIFByb2JsZW0gd2FzIG5vdCBhIGNoZWNrIGNvbmRpdGlvbgogCQkgKiBQYXNzIGl0IHVwIHRvIHRoZSB1cHBlciBsYXllcnMuLi4KIAkJICovCkBAIC0xOTM0LDE0ICsxODcwLDExIEBACiAJc3RydWN0IENvbW1hbmRMaXN0ICpjLCBpbnQgc2dfdXNlZCwgaW50IGRhdGFfZGlyZWN0aW9uKQogewogCWludCBpOwotCXVuaW9uIHU2NGJpdCBhZGRyNjQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2dfdXNlZDsgaSsrKSB7Ci0JCWFkZHI2NC52YWwzMi5sb3dlciA9IGMtPlNHW2ldLkFkZHIubG93ZXI7Ci0JCWFkZHI2NC52YWwzMi51cHBlciA9IGMtPlNHW2ldLkFkZHIudXBwZXI7Ci0JCXBjaV91bm1hcF9zaW5nbGUocGRldiwgKGRtYV9hZGRyX3QpIGFkZHI2NC52YWwsIGMtPlNHW2ldLkxlbiwKLQkJCWRhdGFfZGlyZWN0aW9uKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IHNnX3VzZWQ7IGkrKykKKwkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCAoZG1hX2FkZHJfdCkgbGU2NF90b19jcHUoYy0+U0dbaV0uQWRkciksCisJCQkJbGUzMl90b19jcHUoYy0+U0dbaV0uTGVuKSwKKwkJCQlkYXRhX2RpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyBpbnQgaHBzYV9tYXBfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMTk1NCwyNSArMTg4NywyMiBAQAogCiAJaWYgKGJ1ZmxlbiA9PSAwIHx8IGRhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkgewogCQljcC0+SGVhZGVyLlNHTGlzdCA9IDA7Ci0JCWNwLT5IZWFkZXIuU0dUb3RhbCA9IDA7CisJCWNwLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KDApOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlhZGRyNjQgPSAodTY0KSBwY2lfbWFwX3NpbmdsZShwZGV2LCBidWYsIGJ1ZmxlbiwgZGF0YV9kaXJlY3Rpb24pOworCWFkZHI2NCA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIGJ1ZiwgYnVmbGVuLCBkYXRhX2RpcmVjdGlvbik7CiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZwZGV2LT5kZXYsIGFkZHI2NCkpIHsKIAkJLyogUHJldmVudCBzdWJzZXF1ZW50IHVubWFwIG9mIHNvbWV0aGluZyBuZXZlciBtYXBwZWQgKi8KIAkJY3AtPkhlYWRlci5TR0xpc3QgPSAwOwotCQljcC0+SGVhZGVyLlNHVG90YWwgPSAwOworCQljcC0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigwKTsKIAkJcmV0dXJuIC0xOwogCX0KLQljcC0+U0dbMF0uQWRkci5sb3dlciA9Ci0JICAodTMyKSAoYWRkcjY0ICYgKHU2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKLQljcC0+U0dbMF0uQWRkci51cHBlciA9Ci0JICAodTMyKSAoKGFkZHI2NCA+PiAzMikgJiAodTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwotCWNwLT5TR1swXS5MZW4gPSBidWZsZW47Ci0JY3AtPlNHWzBdLkV4dCA9IEhQU0FfU0dfTEFTVDsgLyogd2UgYXJlIG5vdCBjaGFpbmluZyAqLwotCWNwLT5IZWFkZXIuU0dMaXN0ID0gKHU4KSAxOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCi0JY3AtPkhlYWRlci5TR1RvdGFsID0gKHUxNikgMTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KKwljcC0+U0dbMF0uQWRkciA9IGNwdV90b19sZTY0KGFkZHI2NCk7CisJY3AtPlNHWzBdLkxlbiA9IGNwdV90b19sZTMyKGJ1Zmxlbik7CisJY3AtPlNHWzBdLkV4dCA9IGNwdV90b19sZTMyKEhQU0FfU0dfTEFTVCk7IC8qIHdlIGFyZSBub3QgY2hhaW5pbmcgKi8KKwljcC0+SGVhZGVyLlNHTGlzdCA9IDE7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KKwljcC0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigxKTsgLyogdG90YWwgc2dzIGluIGNtZCBsaXN0ICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4MzAsOCArMjc2MCw4IEBACiAJaWYgKGQgPT0gTlVMTCkKIAkJcmV0dXJuIDA7IC8qIG5vIG1hdGNoICovCiAKLQlpdF9uZXh1cyA9IGNwdV90b19sZTMyKCh1MzIpIGQtPmlvYWNjZWxfaGFuZGxlKTsKLQlzY3NpX25leHVzID0gY3B1X3RvX2xlMzIoKHUzMikgYzJhLT5zY3NpX25leHVzKTsKKwlpdF9uZXh1cyA9IGNwdV90b19sZTMyKGQtPmlvYWNjZWxfaGFuZGxlKTsKKwlzY3NpX25leHVzID0gY3B1X3RvX2xlMzIoYzJhLT5zY3NpX25leHVzKTsKIAlmaW5kID0gYzJhLT5zY3NpX25leHVzOwogCiAJaWYgKGgtPnJhaWRfb2ZmbG9hZF9kZWJ1ZyA+IDApCkBAIC0yODkxLDcgKzI4MjEsNyBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGludCBocHNhX2dhdGhlcl9sdW5faW5mbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCWludCByZXBvcnRsdW5zaXplLAorCWludCByZXBvcnRwaHlzbHVuc2l6ZSwgaW50IHJlcG9ydGxvZ2x1bnNpemUsCiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXYsIHUzMiAqbnBoeXNpY2FscywgaW50ICpwaHlzaWNhbF9tb2RlLAogCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXYsIHUzMiAqbmxvZ2ljYWxzKQogewpAQCAtMjkwNSw3ICsyODM1LDcgQEAKIAkJKnBoeXNpY2FsX21vZGUgPSBIUFNBX1JFUE9SVF9QSFlTX0VYVEVOREVEOwogCQlwaHlzaWNhbF9lbnRyeV9zaXplID0gMjQ7CiAJfQotCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X3BoeXNfbHVucyhoLCBwaHlzZGV2LCByZXBvcnRsdW5zaXplLAorCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X3BoeXNfbHVucyhoLCBwaHlzZGV2LCByZXBvcnRwaHlzbHVuc2l6ZSwKIAkJCQkJCQkqcGh5c2ljYWxfbW9kZSkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IHBoeXNpY2FsIExVTnMgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtMTsKQEAgLTI5MTgsNyArMjg0OCw3IEBACiAJCQkqbnBoeXNpY2FscyAtIEhQU0FfTUFYX1BIWVNfTFVOKTsKIAkJKm5waHlzaWNhbHMgPSBIUFNBX01BWF9QSFlTX0xVTjsKIAl9Ci0JaWYgKGhwc2Ffc2NzaV9kb19yZXBvcnRfbG9nX2x1bnMoaCwgbG9nZGV2LCByZXBvcnRsdW5zaXplKSkgeworCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X2xvZ19sdW5zKGgsIGxvZ2RldiwgcmVwb3J0bG9nbHVuc2l6ZSkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IGxvZ2ljYWwgTFVOcyBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI5NDEsOCArMjg3MSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4ICpmaWd1cmVfbHVuYWRkcmJ5dGVzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCByYWlkX2N0bHJfcG9zaXRpb24sIGludCBpLAotCWludCBucGh5c2ljYWxzLCBpbnQgbmxvZ2ljYWxzLAorc3RhdGljIHU4ICpmaWd1cmVfbHVuYWRkcmJ5dGVzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCByYWlkX2N0bHJfcG9zaXRpb24sCisJaW50IGksIGludCBucGh5c2ljYWxzLCBpbnQgbmxvZ2ljYWxzLAogCXN0cnVjdCBSZXBvcnRFeHRlbmRlZExVTmRhdGEgKnBoeXNkZXZfbGlzdCwKIAlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqbG9nZGV2X2xpc3QpCiB7CkBAIC0zMDExLDE1ICsyOTQxLDE0IEBACiAJdTMyIG5kZXZfYWxsb2NhdGVkID0gMDsKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICoqY3VycmVudHNkLCAqdGhpc19kZXZpY2UsICp0bXBkZXZpY2U7CiAJaW50IG5jdXJyZW50ID0gMDsKLQlpbnQgcmVwb3J0bHVuc2l6ZSA9IHNpemVvZigqcGh5c2Rldl9saXN0KSArIEhQU0FfTUFYX1BIWVNfTFVOICogMjQ7CiAJaW50IGksIG5fZXh0X3RhcmdldF9kZXZzLCBuZGV2c190b19hbGxvY2F0ZTsKIAlpbnQgcmFpZF9jdGxyX3Bvc2l0aW9uOwogCWludCByZXNjYW5faGJhX21vZGU7CiAJREVDTEFSRV9CSVRNQVAobHVuemVyb2JpdHMsIE1BWF9FWFRfVEFSR0VUUyk7CiAKIAljdXJyZW50c2QgPSBremFsbG9jKHNpemVvZigqY3VycmVudHNkKSAqIEhQU0FfTUFYX0RFVklDRVMsIEdGUF9LRVJORUwpOwotCXBoeXNkZXZfbGlzdCA9IGt6YWxsb2MocmVwb3J0bHVuc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JbG9nZGV2X2xpc3QgPSBremFsbG9jKHJlcG9ydGx1bnNpemUsIEdGUF9LRVJORUwpOworCXBoeXNkZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpwaHlzZGV2X2xpc3QpLCBHRlBfS0VSTkVMKTsKKwlsb2dkZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpsb2dkZXZfbGlzdCksIEdGUF9LRVJORUwpOwogCXRtcGRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBkZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghY3VycmVudHNkIHx8ICFwaHlzZGV2X2xpc3QgfHwgIWxvZ2Rldl9saXN0IHx8ICF0bXBkZXZpY2UpIHsKQEAgLTMwMzksNyArMjk2OCw4IEBACiAKIAloLT5oYmFfbW9kZV9lbmFibGVkID0gcmVzY2FuX2hiYV9tb2RlOwogCi0JaWYgKGhwc2FfZ2F0aGVyX2x1bl9pbmZvKGgsIHJlcG9ydGx1bnNpemUsCisJaWYgKGhwc2FfZ2F0aGVyX2x1bl9pbmZvKGgsCisJCQlzaXplb2YoKnBoeXNkZXZfbGlzdCksIHNpemVvZigqbG9nZGV2X2xpc3QpLAogCQkJKHN0cnVjdCBSZXBvcnRMVU5kYXRhICopIHBoeXNkZXZfbGlzdCwgJm5waHlzaWNhbHMsCiAJCQkmcGh5c2ljYWxfbW9kZSwgbG9nZGV2X2xpc3QsICZubG9naWNhbHMpKQogCQlnb3RvIG91dDsKQEAgLTMyMTAsMTkgKzMxNDAsMTkgQEAKIAkJfQogCQlhZGRyNjQgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCWxlbiAgPSBzZ19kbWFfbGVuKHNnKTsKLQkJY3Vycl9zZy0+QWRkci5sb3dlciA9ICh1MzIpIChhZGRyNjQgJiAweDBGRkZGRkZGRlVMTCk7Ci0JCWN1cnJfc2ctPkFkZHIudXBwZXIgPSAodTMyKSAoKGFkZHI2NCA+PiAzMikgJiAweDBGRkZGRkZGRlVMTCk7Ci0JCWN1cnJfc2ctPkxlbiA9IGxlbjsKLQkJY3Vycl9zZy0+RXh0ID0gKGkgPCBzY3NpX3NnX2NvdW50KGNtZCkgLSAxKSA/IDAgOiBIUFNBX1NHX0xBU1Q7CisJCWN1cnJfc2ctPkFkZHIgPSBjcHVfdG9fbGU2NChhZGRyNjQpOworCQljdXJyX3NnLT5MZW4gPSBjcHVfdG9fbGUzMihsZW4pOworCQljdXJyX3NnLT5FeHQgPSBjcHVfdG9fbGUzMigwKTsKIAkJY3Vycl9zZysrOwogCX0KKwkoLS1jdXJyX3NnKS0+RXh0ID0gY3B1X3RvX2xlMzIoSFBTQV9TR19MQVNUKTsKIAogCWlmICh1c2Vfc2cgKyBjaGFpbmVkID4gaC0+bWF4U0cpCiAJCWgtPm1heFNHID0gdXNlX3NnICsgY2hhaW5lZDsKIAogCWlmIChjaGFpbmVkKSB7CiAJCWNwLT5IZWFkZXIuU0dMaXN0ID0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzOwotCQljcC0+SGVhZGVyLlNHVG90YWwgPSAodTE2KSAodXNlX3NnICsgMSk7CisJCWNwLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KHVzZV9zZyArIDEpOwogCQlpZiAoaHBzYV9tYXBfc2dfY2hhaW5fYmxvY2soaCwgY3ApKSB7CiAJCQlzY3NpX2RtYV91bm1hcChjbWQpOwogCQkJcmV0dXJuIC0xOwpAQCAtMzIzMyw3ICszMTYzLDcgQEAKIHNnbGlzdF9maW5pc2hlZDoKIAogCWNwLT5IZWFkZXIuU0dMaXN0ID0gKHU4KSB1c2Vfc2c7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KLQljcC0+SGVhZGVyLlNHVG90YWwgPSAodTE2KSB1c2Vfc2c7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCisJY3AtPkhlYWRlci5TR1RvdGFsID0gY3B1X3RvX2xlMTYodXNlX3NnKTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMyNSwxNyArMzI1NSwxMiBAQAogCQkJYWRkcjY0ID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCQkJbGVuICA9IHNnX2RtYV9sZW4oc2cpOwogCQkJdG90YWxfbGVuICs9IGxlbjsKLQkJCWN1cnJfc2ctPkFkZHIubG93ZXIgPSAodTMyKSAoYWRkcjY0ICYgMHgwRkZGRkZGRkZVTEwpOwotCQkJY3Vycl9zZy0+QWRkci51cHBlciA9Ci0JCQkJKHUzMikgKChhZGRyNjQgPj4gMzIpICYgMHgwRkZGRkZGRkZVTEwpOwotCQkJY3Vycl9zZy0+TGVuID0gbGVuOwotCi0JCQlpZiAoaSA9PSAoc2NzaV9zZ19jb3VudChjbWQpIC0gMSkpCi0JCQkJY3Vycl9zZy0+RXh0ID0gSFBTQV9TR19MQVNUOwotCQkJZWxzZQotCQkJCWN1cnJfc2ctPkV4dCA9IDA7ICAvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCisJCQljdXJyX3NnLT5BZGRyID0gY3B1X3RvX2xlNjQoYWRkcjY0KTsKKwkJCWN1cnJfc2ctPkxlbiA9IGNwdV90b19sZTMyKGxlbik7CisJCQljdXJyX3NnLT5FeHQgPSBjcHVfdG9fbGUzMigwKTsKIAkJCWN1cnJfc2crKzsKIAkJfQorCQkoLS1jdXJyX3NnKS0+RXh0ID0gY3B1X3RvX2xlMzIoSFBTQV9TR19MQVNUKTsKIAogCQlzd2l0Y2ggKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pIHsKIAkJY2FzZSBETUFfVE9fREVWSUNFOgpAQCAtMzU5Miw3ICszNTE3LDcgQEAKIAljcC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMih0b3RhbF9sZW4pOwogCWNwLT5lcnJfcHRyID0gY3B1X3RvX2xlNjQoYy0+YnVzYWRkciArCiAJCQlvZmZzZXRvZihzdHJ1Y3QgaW9fYWNjZWwyX2NtZCwgZXJyb3JfZGF0YSkpOwotCWNwLT5lcnJfbGVuID0gY3B1X3RvX2xlMzIoKHUzMikgc2l6ZW9mKGNwLT5lcnJvcl9kYXRhKSk7CisJY3AtPmVycl9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YoY3AtPmVycm9yX2RhdGEpKTsKIAogCWVucXVldWVfY21kX2FuZF9zdGFydF9pbyhoLCBjKTsKIAlyZXR1cm4gMDsKQEAgLTM4MDksMTEgKzM3MzQsNiBAQAogCQlvZmZsb2FkX3RvX21pcnJvciA9CiAJCQkob2ZmbG9hZF90b19taXJyb3IgPj0gbWFwLT5sYXlvdXRfbWFwX2NvdW50IC0gMSkKIAkJCT8gMCA6IG9mZmxvYWRfdG9fbWlycm9yICsgMTsKLQkJLyogRklYTUU6IHJlbW92ZSBhZnRlciBkZWJ1Zy9kZXYgKi8KLQkJQlVHX09OKG9mZmxvYWRfdG9fbWlycm9yID49IG1hcC0+bGF5b3V0X21hcF9jb3VudCk7Ci0JCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCi0JCQkiREVCVUc6IFVzaW5nIHBoeXNpY2FsIGRpc2sgbWFwIGluZGV4ICVkIGZyb20gbWlycm9yIGdyb3VwICVkXG4iLAotCQkJbWFwX2luZGV4LCBvZmZsb2FkX3RvX21pcnJvcik7CiAJCWRldi0+b2ZmbG9hZF90b19taXJyb3IgPSBvZmZsb2FkX3RvX21pcnJvcjsKIAkJLyogQXZvaWQgZGlyZWN0IHVzZSBvZiBkZXYtPm9mZmxvYWRfdG9fbWlycm9yIHdpdGhpbiB0aGlzCiAJCSAqIGZ1bmN0aW9uIHNpbmNlIG11bHRpcGxlIHRocmVhZHMgbWlnaHQgc2ltdWx0YW5lb3VzbHkKQEAgLTM5NTksOCArMzg3OSwxMSBAQAogCQkJCQkJZGV2LT5zY3NpM2FkZHIpOwogfQogCi1zdGF0aWMgaW50IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0Jdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCisvKgorICogUnVubmluZyBpbiBzdHJ1Y3QgU2NzaV9Ib3N0LT5ob3N0X2xvY2sgbGVzcyBtb2RlIHVzaW5nIExMRCBpbnRlcm5hbAorICogc3RydWN0IGN0bHJfaW5mbyAqaC0+bG9jayB3LyBzcGluX2xvY2tfaXJxc2F2ZSgpIHByb3RlY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgaHBzYV9zY3NpX3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2gsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldjsKQEAgLTM5NzMsMTQgKzM4OTYsMTQgQEAKIAlkZXYgPSBjbWQtPmRldmljZS0+aG9zdGRhdGE7CiAJaWYgKCFkZXYpIHsKIAkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKLQkJZG9uZShjbWQpOworCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQlyZXR1cm4gMDsKIAl9CiAJbWVtY3B5KHNjc2kzYWRkciwgZGV2LT5zY3NpM2FkZHIsIHNpemVvZihzY3NpM2FkZHIpKTsKIAogCWlmICh1bmxpa2VseShsb2NrdXBfZGV0ZWN0ZWQoaCkpKSB7CiAJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCXJldHVybiAwOwogCX0KIAljID0gY21kX2FsbG9jKGgpOwpAQCAtMzk5MCw5ICszOTEzLDYgQEAKIAl9CiAKIAkvKiBGaWxsIGluIHRoZSBjb21tYW5kIGxpc3QgaGVhZGVyICovCi0KLQljbWQtPnNjc2lfZG9uZSA9IGRvbmU7ICAgIC8qIHNhdmUgdGhpcyBmb3IgdXNlIGJ5IGNvbXBsZXRpb24gY29kZSAqLwotCiAJLyogc2F2ZSBjIGluIGNhc2Ugd2UgaGF2ZSB0byBhYm9ydCBpdCAgKi8KIAljbWQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSBjOwogCkBAIC00MDI2LDggKzM5NDYsOCBAQAogCiAJYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOyAgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCiAJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlc1swXSwgJnNjc2kzYWRkclswXSwgOCk7Ci0JYy0+SGVhZGVyLlRhZy5sb3dlciA9IChjLT5jbWRpbmRleCA8PCBESVJFQ1RfTE9PS1VQX1NISUZUKTsKLQljLT5IZWFkZXIuVGFnLmxvd2VyIHw9IERJUkVDVF9MT09LVVBfQklUOworCWMtPkhlYWRlci50YWcgPSBjcHVfdG9fbGU2NCgoYy0+Y21kaW5kZXggPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAorCQkJCQlESVJFQ1RfTE9PS1VQX0JJVCk7CiAKIAkvKiBGaWxsIGluIHRoZSByZXF1ZXN0IGJsb2NrLi4uICovCiAKQEAgLTQwMzYsMTcgKzM5NTYsMTggQEAKIAlCVUdfT04oY21kLT5jbWRfbGVuID4gc2l6ZW9mKGMtPlJlcXVlc3QuQ0RCKSk7CiAJYy0+UmVxdWVzdC5DREJMZW4gPSBjbWQtPmNtZF9sZW47CiAJbWVtY3B5KGMtPlJlcXVlc3QuQ0RCLCBjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbik7Ci0JYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsKLQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CiAJc3dpdGNoIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uKSB7CiAJY2FzZSBETUFfVE9fREVWSUNFOgotCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCVRZUEVfQVRUUl9ESVIoVFlQRV9DTUQsIEFUVFJfU0lNUExFLCBYRkVSX1dSSVRFKTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfRlJPTV9ERVZJQ0U6Ci0JCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQlUWVBFX0FUVFJfRElSKFRZUEVfQ01ELCBBVFRSX1NJTVBMRSwgWEZFUl9SRUFEKTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfTk9ORToKLQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCVRZUEVfQVRUUl9ESVIoVFlQRV9DTUQsIEFUVFJfU0lNUExFLCBYRkVSX05PTkUpOwogCQlicmVhazsKIAljYXNlIERNQV9CSURJUkVDVElPTkFMOgogCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBidWdneSBhcHBsaWNhdGlvbiBkb2VzIGEgc2NzaSBwYXNzdGhydQpAQCAtNDA1NCw3ICszOTc1LDggQEAKIAkJICogLi4vc2NzaS9zY3NpX2lvY3RsLmM6c2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoKSApCiAJCSAqLwogCi0JCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JTVkQ7CisJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQlUWVBFX0FUVFJfRElSKFRZUEVfQ01ELCBBVFRSX1NJTVBMRSwgWEZFUl9SU1ZEKTsKIAkJLyogVGhpcyBpcyB0ZWNobmljYWxseSB3cm9uZywgYW5kIGhwc2EgY29udHJvbGxlcnMgc2hvdWxkCiAJCSAqIHJlamVjdCBpdCB3aXRoIENNRF9JTlZBTElELCB3aGljaCBpcyB0aGUgbW9zdCBjb3JyZWN0CiAJCSAqIHJlc3BvbnNlLCBidXQgbm9uLWZpYnJlIGJhY2tlbmRzIGFwcGVhciB0byBsZXQgaXQKQEAgLTQwODEsOCArNDAwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBERUZfU0NTSV9RQ01EKGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kKQotCiBzdGF0aWMgaW50IGRvX25vdF9zY2FuX2lmX2NvbnRyb2xsZXJfbG9ja2VkX3VwKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQxNTIsMjMgKzQwNzIsNiBAQAogCXJldHVybiBmaW5pc2hlZDsKIH0KIAotc3RhdGljIGludCBocHNhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gc2Rldl90b19oYmEoc2Rldik7Ci0KLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlpZiAocWRlcHRoIDwgMSkKLQkJcWRlcHRoID0gMTsKLQllbHNlCi0JCWlmIChxZGVwdGggPiBoLT5ucl9jbWRzKQotCQkJcWRlcHRoID0gaC0+bnJfY21kczsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgcWRlcHRoKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KIHN0YXRpYyB2b2lkIGhwc2FfdW5yZWdpc3Rlcl9zY3NpKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJLyogd2UgYXJlIGJlaW5nIGZvcmNpYmx5IHVubG9hZGVkLCBhbmQgbWF5IG5vdCByZWZ1c2UuICovCkBAIC00MzI5LDggKzQyMzIsOCBAQAogCWlmIChjLT5jbWRfdHlwZSA9PSBDTURfSU9BQ0NFTDEpIHsKIAkJc3RydWN0IGlvX2FjY2VsMV9jbWQgKmNtMSA9IChzdHJ1Y3QgaW9fYWNjZWwxX2NtZCAqKQogCQkJJmgtPmlvYWNjZWxfY21kX3Bvb2xbYy0+Y21kaW5kZXhdOwotCQkqdGFndXBwZXIgPSBjbTEtPlRhZy51cHBlcjsKLQkJKnRhZ2xvd2VyID0gY20xLT5UYWcubG93ZXI7CisJCSp0YWd1cHBlciA9ICh1MzIpIChjbTEtPnRhZyA+PiAzMik7CisJCSp0YWdsb3dlciA9ICh1MzIpIChjbTEtPnRhZyAmIDB4MGZmZmZmZmZmVUxMKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQUNDRUwyKSB7CkBAIC00MzQxLDExICs0MjQ0LDEwIEBACiAJCSp0YWdsb3dlciA9IGNtMi0+VGFnOwogCQlyZXR1cm47CiAJfQotCSp0YWd1cHBlciA9IGMtPkhlYWRlci5UYWcudXBwZXI7Ci0JKnRhZ2xvd2VyID0gYy0+SGVhZGVyLlRhZy5sb3dlcjsKKwkqdGFndXBwZXIgPSAodTMyKSAoYy0+SGVhZGVyLnRhZyA+PiAzMik7CisJKnRhZ2xvd2VyID0gKHUzMikgKGMtPkhlYWRlci50YWcgJiAweDBmZmZmZmZmZlVMTCk7CiB9CiAKLQogc3RhdGljIGludCBocHNhX3NlbmRfYWJvcnQoc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYWJvcnQsIGludCBzd2l6emxlKQogewpAQCAtNDQxMCw3ICs0MzEyLDcgQEAKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMgPSBOVUxMOwkvKiBwdHIgaW50byBjbXBRICovCiAKIAlpZiAoIWZpbmQpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgcXVldWVfaGVhZCwgbGlzdCkgewogCQlpZiAoYy0+c2NzaV9jbWQgPT0gTlVMTCkgLyogZS5nLjogcGFzc3RocnUgaW9jdGwgKi8KQEAgLTQ0MzIsNyArNDMzNCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgcXVldWVfaGVhZCwgbGlzdCkgewotCQlpZiAobWVtY21wKCZjLT5IZWFkZXIuVGFnLCB0YWcsIDgpICE9IDApCisJCWlmIChtZW1jbXAoJmMtPkhlYWRlci50YWcsIHRhZywgOCkgIT0gMCkKIAkJCWNvbnRpbnVlOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiBjOwpAQCAtNDY4NiwxOSArNDU4OCwzMiBAQAogCWludCBpOwogCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CiAJZG1hX2FkZHJfdCBjbWRfZG1hX2hhbmRsZSwgZXJyX2RtYV9oYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbG9vcGNvdW50OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkvKiBUaGVyZSBpcyBzb21lICpleHRyZW1lbHkqIHNtYWxsIGJ1dCBub24temVybyBjaGFuY2UgdGhhdCB0aGF0CisJICogbXVsdGlwbGUgdGhyZWFkcyBjb3VsZCBnZXQgaW4gaGVyZSwgYW5kIG9uZSB0aHJlYWQgY291bGQKKwkgKiBiZSBzY2FubmluZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJpdHMgbG9va2luZyBmb3IgYSBmcmVlCisJICogb25lLCBidXQgdGhlIGZyZWUgb25lcyBhcmUgYWx3YXlzIGJlaGluZCBoaW0sIGFuZCBvdGhlcgorCSAqIHRocmVhZHMgc25lYWsgaW4gYmVoaW5kIGhpbSBhbmQgZWF0IHRoZW0gYmVmb3JlIGhlIGNhbgorCSAqIGdldCB0byB0aGVtLCBzbyB0aGF0IHdoaWxlIHRoZXJlIGlzIGFsd2F5cyBhIGZyZWUgb25lLCBhCisJICogdmVyeSB1bmx1Y2t5IHRocmVhZCBtaWdodCBiZSBzdGFydmVkIGFueXdheSwgbmV2ZXIgYWJsZSB0bworCSAqIGJlYXQgdGhlIG90aGVyIHRocmVhZHMuICBJbiByZWFsaXR5LCB0aGlzIGhhcHBlbnMgc28KKwkgKiBpbmZyZXF1ZW50bHkgYXMgdG8gYmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBuZXZlci4KKwkgKi8KKworCWxvb3Bjb3VudCA9IDA7CiAJZG8gewogCQlpID0gZmluZF9maXJzdF96ZXJvX2JpdChoLT5jbWRfcG9vbF9iaXRzLCBoLT5ucl9jbWRzKTsKLQkJaWYgKGkgPT0gaC0+bnJfY21kcykgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0Ci0JCSAoaSAmIChCSVRTX1BFUl9MT05HIC0gMSksCi0JCSAgaC0+Y21kX3Bvb2xfYml0cyArIChpIC8gQklUU19QRVJfTE9ORykpICE9IDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGkgPT0gaC0+bnJfY21kcykKKwkJCWkgPSAwOworCQlsb29wY291bnQrKzsKKwl9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAorCQkgIGgtPmNtZF9wb29sX2JpdHMgKyAoaSAvIEJJVFNfUEVSX0xPTkcpKSAhPSAwICYmCisJCWxvb3Bjb3VudCA8IDEwKTsKKworCS8qIFRocmVhZCBnb3Qgc3RhcnZlZD8gIFdlIGRvIG5vdCBleHBlY3QgdGhpcyB0byBldmVyIGhhcHBlbi4gKi8KKwlpZiAobG9vcGNvdW50ID49IDEwKQorCQlyZXR1cm4gTlVMTDsKIAogCWMgPSBoLT5jbWRfcG9vbCArIGk7CiAJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwpAQCAtNDcxNCw5ICs0NjI5LDggQEAKIAlJTklUX0xJU1RfSEVBRCgmYy0+bGlzdCk7CiAJYy0+YnVzYWRkciA9ICh1MzIpIGNtZF9kbWFfaGFuZGxlOwogCXRlbXA2NC52YWwgPSAodTY0KSBlcnJfZG1hX2hhbmRsZTsKLQljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7Ci0JYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwotCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKCpjLT5lcnJfaW5mbyk7CisJYy0+RXJyRGVzYy5BZGRyID0gY3B1X3RvX2xlNjQoZXJyX2RtYV9oYW5kbGUpOworCWMtPkVyckRlc2MuTGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCpjLT5lcnJfaW5mbykpOwogCiAJYy0+aCA9IGg7CiAJcmV0dXJuIGM7CkBAIC00NzI5LDcgKzQ2NDMsNiBAQAogc3RhdGljIHN0cnVjdCBDb21tYW5kTGlzdCAqY21kX3NwZWNpYWxfYWxsb2Moc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7Ci0JdW5pb24gdTY0Yml0IHRlbXA2NDsKIAlkbWFfYWRkcl90IGNtZF9kbWFfaGFuZGxlLCBlcnJfZG1hX2hhbmRsZTsKIAogCWMgPSBwY2lfemFsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKCpjKSwgJmNtZF9kbWFfaGFuZGxlKTsKQEAgLTQ3NTAsMTAgKzQ2NjMsOCBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmMtPmxpc3QpOwogCWMtPmJ1c2FkZHIgPSAodTMyKSBjbWRfZG1hX2hhbmRsZTsKLQl0ZW1wNjQudmFsID0gKHU2NCkgZXJyX2RtYV9oYW5kbGU7Ci0JYy0+RXJyRGVzYy5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwotCWMtPkVyckRlc2MuQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKLQljLT5FcnJEZXNjLkxlbiA9IHNpemVvZigqYy0+ZXJyX2luZm8pOworCWMtPkVyckRlc2MuQWRkciA9IGNwdV90b19sZTY0KGVycl9kbWFfaGFuZGxlKTsKKwljLT5FcnJEZXNjLkxlbiA9IGNwdV90b19sZTMyKHNpemVvZigqYy0+ZXJyX2luZm8pKTsKIAogCWMtPmggPSBoOwogCXJldHVybiBjOwpAQCAtNDc2MiwzMCArNDY3MywyNSBAQAogc3RhdGljIHZvaWQgY21kX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpID0gYyAtIGgtPmNtZF9wb29sOwotCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJY2xlYXJfYml0KGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAogCQkgIGgtPmNtZF9wb29sX2JpdHMgKyAoaSAvIEJJVFNfUEVSX0xPTkcpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNtZF9zcGVjaWFsX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7Ci0KLQl0ZW1wNjQudmFsMzIubG93ZXIgPSBjLT5FcnJEZXNjLkFkZHIubG93ZXI7Ci0JdGVtcDY0LnZhbDMyLnVwcGVyID0gYy0+RXJyRGVzYy5BZGRyLnVwcGVyOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKCpjLT5lcnJfaW5mbyksCi0JCQkgICAgYy0+ZXJyX2luZm8sIChkbWFfYWRkcl90KSB0ZW1wNjQudmFsKTsKKwkJCSAgICBjLT5lcnJfaW5mbywKKwkJCSAgICAoZG1hX2FkZHJfdCkgbGU2NF90b19jcHUoYy0+RXJyRGVzYy5BZGRyKSk7CiAJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LCBzaXplb2YoKmMpLAogCQkJICAgIGMsIChkbWFfYWRkcl90KSAoYy0+YnVzYWRkciAmIERJUkVDVF9MT09LVVBfTUFTSykpOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCi1zdGF0aWMgaW50IGhwc2FfaW9jdGwzMl9wYXNzdGhydShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBocHNhX2lvY3RsMzJfcGFzc3RocnUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsCisJdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlJT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqYXJnMzIgPQogCSAgICAoSU9DVEwzMl9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKikgYXJnOwpAQCAtNDgxMCw3ICs0NzE2LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGhwc2FfaW9jdGwoZGV2LCBDQ0lTU19QQVNTVEhSVSwgKHZvaWQgKilwKTsKKwllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfUEFTU1RIUlUsIHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLApAQCAtNDgyMSw3ICs0NzI3LDcgQEAKIH0KIAogc3RhdGljIGludCBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LAotCWludCBjbWQsIHZvaWQgKmFyZykKKwlpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCUJJR19JT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqYXJnMzIgPQogCSAgICAoQklHX0lPQ1RMMzJfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICopIGFyZzsKQEAgLTQ4NDgsNyArNDc1NCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfQklHX1BBU1NUSFJVLCAodm9pZCAqKXApOworCWVyciA9IGhwc2FfaW9jdGwoZGV2LCBDQ0lTU19CSUdfUEFTU1RIUlUsIHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLApAQCAtNDg1OCw3ICs0NzY0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDQ0lTU19HRVRQQ0lJTkZPOgpAQCAtNDkzMiw3ICs0ODM4LDcgQEAKIAlJT0NUTF9Db21tYW5kX3N0cnVjdCBpb2NvbW1hbmQ7CiAJc3RydWN0IENvbW1hbmRMaXN0ICpjOwogCWNoYXIgKmJ1ZmYgPSBOVUxMOwotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisJdTY0IHRlbXA2NDsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKCFhcmdwKQpAQCAtNDk3MSwxNCArNDg3NywxNCBAQAogCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCiAJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApIHsJLyogYnVmZmVyIHRvIGZpbGwgKi8KIAkJYy0+SGVhZGVyLlNHTGlzdCA9IDE7Ci0JCWMtPkhlYWRlci5TR1RvdGFsID0gMTsKKwkJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigxKTsKIAl9IGVsc2UJeyAvKiBubyBidWZmZXJzIHRvIGZpbGwgKi8KIAkJYy0+SGVhZGVyLlNHTGlzdCA9IDA7Ci0JCWMtPkhlYWRlci5TR1RvdGFsID0gMDsKKwkJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigwKTsKIAl9CiAJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLCAmaW9jb21tYW5kLkxVTl9pbmZvLCBzaXplb2YoYy0+SGVhZGVyLkxVTikpOwogCS8qIHVzZSB0aGUga2VybmVsIGFkZHJlc3MgdGhlIGNtZCBibG9jayBmb3IgdGFnICovCi0JYy0+SGVhZGVyLlRhZy5sb3dlciA9IGMtPmJ1c2FkZHI7CisJYy0+SGVhZGVyLnRhZyA9IGMtPmJ1c2FkZHI7CiAKIAkvKiBGaWxsIGluIFJlcXVlc3QgYmxvY2sgKi8KIAltZW1jcHkoJmMtPlJlcXVlc3QsICZpb2NvbW1hbmQuUmVxdWVzdCwKQEAgLTQ5ODYsMTkgKzQ4OTIsMTcgQEAKIAogCS8qIEZpbGwgaW4gdGhlIHNjYXR0ZXIgZ2F0aGVyIGluZm9ybWF0aW9uICovCiAJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApIHsKLQkJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGJ1ZmYsCisJCXRlbXA2NCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGJ1ZmYsCiAJCQlpb2NvbW1hbmQuYnVmX3NpemUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JCWlmIChkbWFfbWFwcGluZ19lcnJvcigmaC0+cGRldi0+ZGV2LCB0ZW1wNjQudmFsKSkgewotCQkJYy0+U0dbMF0uQWRkci5sb3dlciA9IDA7Ci0JCQljLT5TR1swXS5BZGRyLnVwcGVyID0gMDsKLQkJCWMtPlNHWzBdLkxlbiA9IDA7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmaC0+cGRldi0+ZGV2LCAoZG1hX2FkZHJfdCkgdGVtcDY0KSkgeworCQkJYy0+U0dbMF0uQWRkciA9IGNwdV90b19sZTY0KDApOworCQkJYy0+U0dbMF0uTGVuID0gY3B1X3RvX2xlMzIoMCk7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQotCQljLT5TR1swXS5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwotCQljLT5TR1swXS5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwotCQljLT5TR1swXS5MZW4gPSBpb2NvbW1hbmQuYnVmX3NpemU7Ci0JCWMtPlNHWzBdLkV4dCA9IEhQU0FfU0dfTEFTVDsgLyogd2UgYXJlIG5vdCBjaGFpbmluZyovCisJCWMtPlNHWzBdLkFkZHIgPSBjcHVfdG9fbGU2NCh0ZW1wNjQpOworCQljLT5TR1swXS5MZW4gPSBjcHVfdG9fbGUzMihpb2NvbW1hbmQuYnVmX3NpemUpOworCQljLT5TR1swXS5FeHQgPSBjcHVfdG9fbGUzMihIUFNBX1NHX0xBU1QpOyAvKiBub3QgY2hhaW5pbmcgKi8KIAl9CiAJaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfY29yZV9pZl9ub19sb2NrdXAoaCwgYyk7CiAJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApCkBAIC01MDMzLDcgKzQ5MzcsNyBAQAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKIAl1bnNpZ25lZCBjaGFyICoqYnVmZiA9IE5VTEw7CiAJaW50ICpidWZmX3NpemUgPSBOVUxMOwotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisJdTY0IHRlbXA2NDsKIAlCWVRFIHNnX3VzZWQgPSAwOwogCWludCBzdGF0dXMgPSAwOwogCWludCBpOwpAQCAtNTEwNywyOSArNTAxMSwzMCBAQAogCX0KIAljLT5jbWRfdHlwZSA9IENNRF9JT0NUTF9QRU5EOwogCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsKLQljLT5IZWFkZXIuU0dMaXN0ID0gYy0+SGVhZGVyLlNHVG90YWwgPSBzZ191c2VkOworCWMtPkhlYWRlci5TR0xpc3QgPSAodTgpIHNnX3VzZWQ7CisJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNihzZ191c2VkKTsKIAltZW1jcHkoJmMtPkhlYWRlci5MVU4sICZpb2MtPkxVTl9pbmZvLCBzaXplb2YoYy0+SGVhZGVyLkxVTikpOwotCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOworCWMtPkhlYWRlci50YWcgPSBjLT5idXNhZGRyOwogCW1lbWNweSgmYy0+UmVxdWVzdCwgJmlvYy0+UmVxdWVzdCwgc2l6ZW9mKGMtPlJlcXVlc3QpKTsKIAlpZiAoaW9jLT5idWZfc2l6ZSA+IDApIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBzZ191c2VkOyBpKyspIHsKLQkJCXRlbXA2NC52YWwgPSBwY2lfbWFwX3NpbmdsZShoLT5wZGV2LCBidWZmW2ldLAorCQkJdGVtcDY0ID0gcGNpX21hcF9zaW5nbGUoaC0+cGRldiwgYnVmZltpXSwKIAkJCQkgICAgYnVmZl9zaXplW2ldLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZoLT5wZGV2LT5kZXYsIHRlbXA2NC52YWwpKSB7Ci0JCQkJYy0+U0dbaV0uQWRkci5sb3dlciA9IDA7Ci0JCQkJYy0+U0dbaV0uQWRkci51cHBlciA9IDA7Ci0JCQkJYy0+U0dbaV0uTGVuID0gMDsKKwkJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmaC0+cGRldi0+ZGV2LAorCQkJCQkJCShkbWFfYWRkcl90KSB0ZW1wNjQpKSB7CisJCQkJYy0+U0dbaV0uQWRkciA9IGNwdV90b19sZTY0KDApOworCQkJCWMtPlNHW2ldLkxlbiA9IGNwdV90b19sZTMyKDApOwogCQkJCWhwc2FfcGNpX3VubWFwKGgtPnBkZXYsIGMsIGksCiAJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJCQkJc3RhdHVzID0gLUVOT01FTTsKIAkJCQlnb3RvIGNsZWFudXAwOwogCQkJfQotCQkJYy0+U0dbaV0uQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKLQkJCWMtPlNHW2ldLkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7Ci0JCQljLT5TR1tpXS5MZW4gPSBidWZmX3NpemVbaV07Ci0JCQljLT5TR1tpXS5FeHQgPSBpIDwgc2dfdXNlZCAtIDEgPyAwIDogSFBTQV9TR19MQVNUOworCQkJYy0+U0dbaV0uQWRkciA9IGNwdV90b19sZTY0KHRlbXA2NCk7CisJCQljLT5TR1tpXS5MZW4gPSBjcHVfdG9fbGUzMihidWZmX3NpemVbaV0pOworCQkJYy0+U0dbaV0uRXh0ID0gY3B1X3RvX2xlMzIoMCk7CiAJCX0KKwkJYy0+U0dbLS1pXS5FeHQgPSBjcHVfdG9fbGUzMihIUFNBX1NHX0xBU1QpOwogCX0KIAlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF9jb3JlX2lmX25vX2xvY2t1cChoLCBjKTsKIAlpZiAoc2dfdXNlZCkKQEAgLTUyMDYsNyArNTExMSw3IEBACiAvKgogICogaW9jdGwKICAqLwotc3RhdGljIGludCBocHNhX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGhwc2FfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCiB7CiAJc3RydWN0IGN0bHJfaW5mbyAqaDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTUyNjgsMjAgKzUxNzMsMjAgQEAKIHsKIAlpbnQgcGNpX2RpciA9IFhGRVJfTk9ORTsKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmE7IC8qIGZvciBjb21tYW5kcyB0byBiZSBhYm9ydGVkICovCisJdTMyIHR1cHBlciwgdGxvd2VyOwogCiAJYy0+Y21kX3R5cGUgPSBDTURfSU9DVExfUEVORDsKIAljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CiAJaWYgKGJ1ZmYgIT0gTlVMTCAmJiBzaXplID4gMCkgewogCQljLT5IZWFkZXIuU0dMaXN0ID0gMTsKLQkJYy0+SGVhZGVyLlNHVG90YWwgPSAxOworCQljLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KDEpOwogCX0gZWxzZSB7CiAJCWMtPkhlYWRlci5TR0xpc3QgPSAwOwotCQljLT5IZWFkZXIuU0dUb3RhbCA9IDA7CisJCWMtPkhlYWRlci5TR1RvdGFsID0gY3B1X3RvX2xlMTYoMCk7CiAJfQotCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOworCWMtPkhlYWRlci50YWcgPSBjLT5idXNhZGRyOwogCW1lbWNweShjLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgc2NzaTNhZGRyLCA4KTsKIAotCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gY21kX3R5cGU7CiAJaWYgKGNtZF90eXBlID09IFRZUEVfQ01EKSB7CiAJCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgSFBTQV9JTlFVSVJZOgpAQCAtNTI5MSw4ICs1MTk2LDggQEAKIAkJCQljLT5SZXF1ZXN0LkNEQlsyXSA9IChwYWdlX2NvZGUgJiAweGZmKTsKIAkJCX0KIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gNjsKLQkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKLQkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCQljLT5SZXF1ZXN0LnR5cGVfYXR0cl9kaXIgPQorCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsIEFUVFJfU0lNUExFLCBYRkVSX1JFQUQpOwogCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gSFBTQV9JTlFVSVJZOwogCQkJYy0+UmVxdWVzdC5DREJbNF0gPSBzaXplICYgMHhGRjsKQEAgLTUzMDMsOCArNTIwOCw4IEBACiAJCQkgICBtb2RlID0gMDAgdGFyZ2V0ID0gMC4gIE5vdGhpbmcgdG8gd3JpdGUuCiAJCQkgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTI7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9SRUFEOworCQkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCQlUWVBFX0FUVFJfRElSKGNtZF90eXBlLCBBVFRSX1NJTVBMRSwgWEZFUl9SRUFEKTsKIAkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CiAJCQljLT5SZXF1ZXN0LkNEQlswXSA9IGNtZDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzZdID0gKHNpemUgPj4gMjQpICYgMHhGRjsgLyogTVNCICovCkBAIC01MzE0LDggKzUyMTksOSBAQAogCQkJYnJlYWs7CiAJCWNhc2UgSFBTQV9DQUNIRV9GTFVTSDoKIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTI7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsCisJCQkJCQlBVFRSX1NJTVBMRSwgWEZFUl9XUklURSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBCTUlDX1dSSVRFOwogCQkJYy0+UmVxdWVzdC5DREJbNl0gPSBCTUlDX0NBQ0hFX0ZMVVNIOwpAQCAtNTMyNCwxNCArNTIzMCwxNCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVEVTVF9VTklUX1JFQURZOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSA2OwotCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwotCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwgQVRUUl9TSU1QTEUsIFhGRVJfTk9ORSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgSFBTQV9HRVRfUkFJRF9NQVA6CiAJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEyOwotCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwotCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfUkVBRDsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwgQVRUUl9TSU1QTEUsIFhGRVJfUkVBRCk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBIUFNBX0NJU1NfUkVBRDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gY21kOwpAQCAtNTM0Miw4ICs1MjQ4LDggQEAKIAkJCWJyZWFrOwogCQljYXNlIEJNSUNfU0VOU0VfQ09OVFJPTExFUl9QQVJBTUVURVJTOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxMDsKLQkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKLQkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCQljLT5SZXF1ZXN0LnR5cGVfYXR0cl9kaXIgPQorCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsIEFUVFJfU0lNUExFLCBYRkVSX1JFQUQpOwogCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gQk1JQ19SRUFEOwogCQkJYy0+UmVxdWVzdC5DREJbNl0gPSBCTUlDX1NFTlNFX0NPTlRST0xMRVJfUEFSQU1FVEVSUzsKQEAgLTUzNjAsOSArNTI2Niw4IEBACiAKIAkJY2FzZSAgSFBTQV9ERVZJQ0VfUkVTRVRfTVNHOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxNjsKLQkJCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gIDE7IC8qIEl0IGlzIGEgTVNHIG5vdCBhIENNRCAqLwotCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwotCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwgQVRUUl9TSU1QTEUsIFhGRVJfTk9ORSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwogCQkJbWVtc2V0KCZjLT5SZXF1ZXN0LkNEQlswXSwgMCwgc2l6ZW9mKGMtPlJlcXVlc3QuQ0RCKSk7CiAJCQljLT5SZXF1ZXN0LkNEQlswXSA9ICBjbWQ7CkBAIC01Mzc2LDI3ICs1MjgxLDI4IEBACiAJCQlicmVhazsKIAkJY2FzZSAgSFBTQV9BQk9SVF9NU0c6CiAJCQlhID0gYnVmZjsgICAgICAgLyogcG9pbnQgdG8gY29tbWFuZCB0byBiZSBhYm9ydGVkICovCi0JCQlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJBYm9ydCBUYWc6MHglMDh4OiUwOHggdXNpbmcgcmVxdWVzdCBUYWc6MHglMDh4OiUwOHhcbiIsCi0JCQkJYS0+SGVhZGVyLlRhZy51cHBlciwgYS0+SGVhZGVyLlRhZy5sb3dlciwKLQkJCQljLT5IZWFkZXIuVGFnLnVwcGVyLCBjLT5IZWFkZXIuVGFnLmxvd2VyKTsKKwkJCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIkFib3J0IFRhZzoweCUwMTZsbHggdXNpbmcgcmVxdWVzdCBUYWc6MHglMDE2bGx4IiwKKwkJCQlhLT5IZWFkZXIudGFnLCBjLT5IZWFkZXIudGFnKTsKKwkJCXRsb3dlciA9ICh1MzIpIChhLT5IZWFkZXIudGFnID4+IDMyKTsKKwkJCXR1cHBlciA9ICh1MzIpIChhLT5IZWFkZXIudGFnICYgMHgwZmZmZmZmZmZVTEwpOwogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxNjsKLQkJCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gVFlQRV9NU0c7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsCisJCQkJCQlBVFRSX1NJTVBMRSwgWEZFUl9XUklURSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBIUFNBX1RBU0tfTUFOQUdFTUVOVDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gSFBTQV9UTUZfQUJPUlRfVEFTSzsKIAkJCWMtPlJlcXVlc3QuQ0RCWzJdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzNdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KIAkJCS8qIFRhZyB0byBhYm9ydCBnb2VzIGluIENEQls0XS1DREJbMTFdICovCi0JCQljLT5SZXF1ZXN0LkNEQls0XSA9IGEtPkhlYWRlci5UYWcubG93ZXIgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbNV0gPSAoYS0+SGVhZGVyLlRhZy5sb3dlciA+PiA4KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls2XSA9IChhLT5IZWFkZXIuVGFnLmxvd2VyID4+IDE2KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls3XSA9IChhLT5IZWFkZXIuVGFnLmxvd2VyID4+IDI0KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls4XSA9IGEtPkhlYWRlci5UYWcudXBwZXIgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbOV0gPSAoYS0+SGVhZGVyLlRhZy51cHBlciA+PiA4KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQlsxMF0gPSAoYS0+SGVhZGVyLlRhZy51cHBlciA+PiAxNikgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbMTFdID0gKGEtPkhlYWRlci5UYWcudXBwZXIgPj4gMjQpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzRdID0gdGxvd2VyICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzVdID0gKHRsb3dlciA+PiA4KSAmIDB4RkY7CisJCQljLT5SZXF1ZXN0LkNEQls2XSA9ICh0bG93ZXIgPj4gMTYpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzddID0gKHRsb3dlciA+PiAyNCkgJiAweEZGOworCQkJYy0+UmVxdWVzdC5DREJbOF0gPSB0dXBwZXIgJiAweEZGOworCQkJYy0+UmVxdWVzdC5DREJbOV0gPSAodHVwcGVyID4+IDgpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzEwXSA9ICh0dXBwZXIgPj4gMTYpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzExXSA9ICh0dXBwZXIgPj4gMjQpICYgMHhGRjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzEyXSA9IDB4MDA7IC8qIHJlc2VydmVkICovCiAJCQljLT5SZXF1ZXN0LkNEQlsxM10gPSAweDAwOyAvKiByZXNlcnZlZCAqLwogCQkJYy0+UmVxdWVzdC5DREJbMTRdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KQEAgLTU0MTIsNyArNTMxOCw3IEBACiAJCUJVRygpOwogCX0KIAotCXN3aXRjaCAoYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbikgeworCXN3aXRjaCAoR0VUX0RJUihjLT5SZXF1ZXN0LnR5cGVfYXR0cl9kaXIpKSB7CiAJY2FzZSBYRkVSX1JFQUQ6CiAJCXBjaV9kaXIgPSBQQ0lfRE1BX0ZST01ERVZJQ0U7CiAJCWJyZWFrOwpAQCAtNTQ2NywxNSArNTM3Myw5IEBACiAKIAkJLyogUHV0IGpvYiBvbnRvIHRoZSBjb21wbGV0ZWQgUSAqLwogCQlhZGRRKCZoLT5jbXBRLCBjKTsKLQotCQkvKiBNdXN0IGluY3JlbWVudCBjb21tYW5kc19vdXRzdGFuZGluZyBiZWZvcmUgdW5sb2NraW5nCi0JCSAqIGFuZCBzdWJtaXR0aW5nIHRvIGF2b2lkIHJhY2UgY2hlY2tpbmcgZm9yIGZpZm8gZnVsbAotCQkgKiBjb25kaXRpb24uCi0JCSAqLwotCQloLT5jb21tYW5kc19vdXRzdGFuZGluZysrOwotCi0JCS8qIFRlbGwgdGhlIGNvbnRyb2xsZXIgZXhlY3V0ZSBjb21tYW5kICovCisJCWF0b21pY19pbmMoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgKmZsYWdzKTsKKwkJLyogVGVsbCB0aGUgY29udHJvbGxlciBleGVjdXRlIGNvbW1hbmQgKi8KIAkJaC0+YWNjZXNzLnN1Ym1pdF9jb21tYW5kKGgsIGMpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgKmZsYWdzKTsKIAl9CkBAIC01NTIxLDYgKzU0MjEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGlvX21heV9iZV9zdGFsbGVkID0gMDsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gYy0+aDsKKwlpbnQgY291bnQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCXJlbW92ZVEoYyk7CkBAIC01NTQxLDExICs1NDQyLDEwIEBACiAJICogd2FudCB0byBnZXQgaW4gYSBjeWNsZSB3aGVyZSB3ZSBjYWxsIHN0YXJ0X2lvIGV2ZXJ5IHRpbWUKIAkgKiB0aHJvdWdoIGhlcmUuCiAJICovCi0JaWYgKHVubGlrZWx5KGgtPmZpZm9fcmVjZW50bHlfZnVsbCkgJiYKLQkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcgPCA1KQotCQlpb19tYXlfYmVfc3RhbGxlZCA9IDE7Ci0KKwljb3VudCA9IGF0b21pY19yZWFkKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCWlmICh1bmxpa2VseShoLT5maWZvX3JlY2VudGx5X2Z1bGwpICYmIGNvdW50IDwgNSkKKwkJaW9fbWF5X2JlX3N0YWxsZWQgPSAxOwogCiAJZGlhbF91cF9sb2NrdXBfZGV0ZWN0aW9uX29uX2Z3X2ZsYXNoX2NvbXBsZXRlKGMtPmgsIGMpOwogCWlmIChsaWtlbHkoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQUNDRUwxIHx8IGMtPmNtZF90eXBlID09IENNRF9TQ1NJCkBAIC01NzY1LDIyICs1NjY1LDIwIEBACiAKIAljbWQtPkNvbW1hbmRIZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CiAJY21kLT5Db21tYW5kSGVhZGVyLlNHTGlzdCA9IDA7Ci0JY21kLT5Db21tYW5kSGVhZGVyLlNHVG90YWwgPSAwOwotCWNtZC0+Q29tbWFuZEhlYWRlci5UYWcubG93ZXIgPSBwYWRkcjMyOwotCWNtZC0+Q29tbWFuZEhlYWRlci5UYWcudXBwZXIgPSAwOworCWNtZC0+Q29tbWFuZEhlYWRlci5TR1RvdGFsID0gY3B1X3RvX2xlMTYoMCk7CisJY21kLT5Db21tYW5kSGVhZGVyLnRhZyA9IHBhZGRyMzI7CiAJbWVtc2V0KCZjbWQtPkNvbW1hbmRIZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgMCwgOCk7CiAKIAljbWQtPlJlcXVlc3QuQ0RCTGVuID0gMTY7Ci0JY21kLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfTVNHOwotCWNtZC0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfSEVBRE9GUVVFVUU7Ci0JY21kLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9OT05FOworCWNtZC0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCVRZUEVfQVRUUl9ESVIoVFlQRV9NU0csIEFUVFJfSEVBRE9GUVVFVUUsIFhGRVJfTk9ORSk7CiAJY21kLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwogCWNtZC0+UmVxdWVzdC5DREJbMF0gPSBvcGNvZGU7CiAJY21kLT5SZXF1ZXN0LkNEQlsxXSA9IHR5cGU7CiAJbWVtc2V0KCZjbWQtPlJlcXVlc3QuQ0RCWzJdLCAwLCAxNCk7IC8qIHJlc3Qgb2YgdGhlIENEQiBpcyByZXNlcnZlZCAqLwotCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkFkZHIubG93ZXIgPSBwYWRkcjMyICsgc2l6ZW9mKCpjbWQpOwotCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkFkZHIudXBwZXIgPSAwOwotCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkxlbiA9IHNpemVvZihzdHJ1Y3QgRXJyb3JJbmZvKTsKKwljbWQtPkVycm9yRGVzY3JpcHRvci5BZGRyID0KKwkJCWNwdV90b19sZTY0KChwYWRkcjMyICsgc2l6ZW9mKCpjbWQpKSk7CisJY21kLT5FcnJvckRlc2NyaXB0b3IuTGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pKTsKIAogCXdyaXRlbChwYWRkcjMyLCB2YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKIApAQCAtNTgxOCw3ICs1NzE2LDcgQEAKICNkZWZpbmUgaHBzYV9ub29wKHApIGhwc2FfbWVzc2FnZShwLCAzLCAwKQogCiBzdGF0aWMgaW50IGhwc2FfY29udHJvbGxlcl9oYXJkX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCXZvaWQgKiBfX2lvbWVtIHZhZGRyLCB1MzIgdXNlX2Rvb3JiZWxsKQorCXZvaWQgX19pb21lbSAqdmFkZHIsIHUzMiB1c2VfZG9vcmJlbGwpCiB7CiAJdTE2IHBtY3NyOwogCWludCBwb3M7CkBAIC02MDU2LDcgKzU5NTQsNyBAQAogICogICB0aGUgaW8gZnVuY3Rpb25zLgogICogICBUaGlzIGlzIGZvciBkZWJ1ZyBvbmx5LgogICovCi1zdGF0aWMgdm9pZCBwcmludF9jZmdfdGFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgQ2ZnVGFibGUgKnRiKQorc3RhdGljIHZvaWQgcHJpbnRfY2ZnX3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKnRiKQogewogI2lmZGVmIEhQU0FfREVCVUcKIAlpbnQgaTsKQEAgLTYzMjMsMTEgKzYyMjEsMTEgQEAKIAloLT5tYXhfY21kX3NnX2VudHJpZXMgPSAzMTsKIAlpZiAoaC0+bWF4c2dlbnRyaWVzID4gNTEyKSB7CiAJCWgtPm1heF9jbWRfc2dfZW50cmllcyA9IDMyOwotCQloLT5jaGFpbnNpemUgPSBoLT5tYXhzZ2VudHJpZXMgLSBoLT5tYXhfY21kX3NnX2VudHJpZXMgKyAxOworCQloLT5jaGFpbnNpemUgPSBoLT5tYXhzZ2VudHJpZXMgLSBoLT5tYXhfY21kX3NnX2VudHJpZXM7CiAJCWgtPm1heHNnZW50cmllcy0tOyAvKiBzYXZlIG9uZSBmb3IgY2hhaW4gcG9pbnRlciAqLwogCX0gZWxzZSB7Ci0JCWgtPm1heHNnZW50cmllcyA9IDMxOyAvKiBkZWZhdWx0IHRvIHRyYWRpdGlvbmFsIHZhbHVlcyAqLwogCQloLT5jaGFpbnNpemUgPSAwOworCQloLT5tYXhzZ2VudHJpZXMgPSAzMTsgLyogZGVmYXVsdCB0byB0cmFkaXRpb25hbCB2YWx1ZXMgKi8KIAl9CiAKIAkvKiBGaW5kIG91dCB3aGF0IHRhc2sgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZCBhbmQgY2FjaGUgKi8KQEAgLTY0NTYsMTUgKzYzNTQsMTUgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyAocGNpX2Rpc2FibGVfZGV2aWNlIG1heSBkaXNhYmxlIHRoaXMpICovCi0JcGNpX3NldF9tYXN0ZXIoaC0+cGRldik7Ci0KIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGgtPnBkZXYsIEhQU0EpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LAogCQkJImNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KKworCXBjaV9zZXRfbWFzdGVyKGgtPnBkZXYpOworCiAJaHBzYV9pbnRlcnJ1cHRfbW9kZShoKTsKIAllcnIgPSBocHNhX3BjaV9maW5kX21lbW9yeV9CQVIoaC0+cGRldiwgJmgtPnBhZGRyKTsKIAlpZiAoZXJyKQpAQCAtNjU0NCw3ICs2NDQyLDkgQEAKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgZGV2aWNlLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCiAJLyogUmVzZXQgdGhlIGNvbnRyb2xsZXIgd2l0aCBhIFBDSSBwb3dlci1jeWNsZSBvciB2aWEgZG9vcmJlbGwgKi8KIAlyYyA9IGhwc2Ffa2R1bXBfaGFyZF9yZXNldF9jb250cm9sbGVyKHBkZXYpOwogCkBAIC03NDMxLDEzICs3MzMxLDEyIEBACiAJCQljcC0+aG9zdF9jb250ZXh0X2ZsYWdzID0gSU9BQ0NFTDFfSENGTEFHU19DSVNTX0ZPUk1BVDsKIAkJCWNwLT50aW1lb3V0X3NlYyA9IDA7CiAJCQljcC0+UmVwbHlRdWV1ZSA9IDA7Ci0JCQljcC0+VGFnLmxvd2VyID0gKGkgPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAotCQkJCQkJRElSRUNUX0xPT0tVUF9CSVQ7Ci0JCQljcC0+VGFnLnVwcGVyID0gMDsKLQkJCWNwLT5ob3N0X2FkZHIubG93ZXIgPQotCQkJCSh1MzIpIChoLT5pb2FjY2VsX2NtZF9wb29sX2RoYW5kbGUgKworCQkJY3AtPnRhZyA9CisJCQkJY3B1X3RvX2xlNjQoKGkgPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAorCQkJCQkJRElSRUNUX0xPT0tVUF9CSVQpOworCQkJY3AtPmhvc3RfYWRkciA9CisJCQkJY3B1X3RvX2xlNjQoaC0+aW9hY2NlbF9jbWRfcG9vbF9kaGFuZGxlICsKIAkJCQkJKGkgKiBzaXplb2Yoc3RydWN0IGlvX2FjY2VsMV9jbWQpKSk7Ci0JCQljcC0+aG9zdF9hZGRyLnVwcGVyID0gMDsKIAkJfQogCX0gZWxzZSBpZiAodHJhbnNfc3VwcG9ydCAmIENGR1RCTF9UcmFuc19pb19hY2NlbDIpIHsKIAkJdTY0IGNmZ19vZmZzZXQsIGNmZ19iYXNlX2FkZHJfaW5kZXg7CkBAIC03NzExLDcgKzc2MTAsNyBAQAogCVZFUklGWV9PRkZTRVQodGltZW91dF9zZWMsIDB4NjIpOwogCVZFUklGWV9PRkZTRVQoUmVwbHlRdWV1ZSwgMHg2NCk7CiAJVkVSSUZZX09GRlNFVChyZXNlcnZlZDksIDB4NjUpOwotCVZFUklGWV9PRkZTRVQoVGFnLCAweDY4KTsKKwlWRVJJRllfT0ZGU0VUKHRhZywgMHg2OCk7CiAJVkVSSUZZX09GRlNFVChob3N0X2FkZHIsIDB4NzApOwogCVZFUklGWV9PRkZTRVQoQ0lTU19MVU4sIDB4NzgpOwogCVZFUklGWV9PRkZTRVQoU0csIDB4NzggKyA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhLmggYi9kcml2ZXJzL3Njc2kvaHBzYS5oCmluZGV4IDI0NDcyY2UuLjhlMDZkOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuaApAQCAtMTE4LDcgKzExOCw3IEBACiAJc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKmNmZ3RhYmxlOwogCWludAlpbnRlcnJ1cHRzX2VuYWJsZWQ7CiAJaW50IAltYXhfY29tbWFuZHM7Ci0JaW50CWNvbW1hbmRzX291dHN0YW5kaW5nOworCWF0b21pY190IGNvbW1hbmRzX291dHN0YW5kaW5nOwogIwlkZWZpbmUgUEVSRl9NT0RFX0lOVAkwCiAjCWRlZmluZSBET09SQkVMTF9JTlQJMQogIwlkZWZpbmUgU0lNUExFX01PREVfSU5UCTIKQEAgLTE2NCw3ICsxNjQsNyBAQAogCSAqLwogCXUzMiB0cmFuc19zdXBwb3J0OwogCXUzMiB0cmFuc19vZmZzZXQ7Ci0Jc3RydWN0IFRyYW5zVGFibGVfc3RydWN0ICp0cmFuc3RhYmxlOworCXN0cnVjdCBUcmFuc1RhYmxlX3N0cnVjdCBfX2lvbWVtICp0cmFuc3RhYmxlOwogCXVuc2lnbmVkIGxvbmcgdHJhbnNNZXRob2Q7CiAKIAkvKiBjYXAgY29uY3VycmVudCBwYXNzdGhydXMgYXQgc29tZSByZWFzb25hYmxlIG1heGltdW0gKi8KQEAgLTE4MSw3ICsxODEsNyBAQAogCXUzMiAqYmxvY2tGZXRjaFRhYmxlOwogCXUzMiAqaW9hY2NlbDFfYmxvY2tGZXRjaFRhYmxlOwogCXUzMiAqaW9hY2NlbDJfYmxvY2tGZXRjaFRhYmxlOwotCXUzMiAqaW9hY2NlbDJfYmZ0Ml9yZWdzOworCXUzMiBfX2lvbWVtICppb2FjY2VsMl9iZnQyX3JlZ3M7CiAJdW5zaWduZWQgY2hhciAqaGJhX2lucXVpcnlfZGF0YTsKIAl1MzIgZHJpdmVyX3N1cHBvcnQ7CiAJdTMyIGZ3X3N1cHBvcnQ7CkBAIC0xOTIsNyArMTkyLDcgQEAKIAl1NjQgbGFzdF9oZWFydGJlYXRfdGltZXN0YW1wOwogCXUzMiBoZWFydGJlYXRfc2FtcGxlX2ludGVydmFsOwogCWF0b21pY190IGZpcm13YXJlX2ZsYXNoX2luX3Byb2dyZXNzOwotCXUzMiAqbG9ja3VwX2RldGVjdGVkOworCXUzMiBfX3BlcmNwdSAqbG9ja3VwX2RldGVjdGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgbW9uaXRvcl9jdGxyX3dvcms7CiAJaW50IHJlbW92ZV9pbl9wcm9ncmVzczsKIAl1MzIgZmlmb19yZWNlbnRseV9mdWxsOwpAQCAtMzk1LDcgKzM5NSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfcGVyZm9ybWFudF9jb21wbGV0ZWQoc3RydWN0IGN0bHJfaW5mbyAqaCwgdTggcSkKIHsKIAlzdHJ1Y3QgcmVwbHlfcXVldWVfYnVmZmVyICpycSA9ICZoLT5yZXBseV9xdWV1ZVtxXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCByZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CiAKIAkvKiBtc2kgYXV0byBjbGVhcnMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdC4gKi8KIAlpZiAoIShoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKSkgewpAQCAtNDEzLDkgKzQxMyw3IEBACiAJaWYgKChycS0+aGVhZFtycS0+Y3VycmVudF9lbnRyeV0gJiAxKSA9PSBycS0+d3JhcGFyb3VuZCkgewogCQlyZWdpc3Rlcl92YWx1ZSA9IHJxLT5oZWFkW3JxLT5jdXJyZW50X2VudHJ5XTsKIAkJcnEtPmN1cnJlbnRfZW50cnkrKzsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCQlhdG9taWNfZGVjKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAJfSBlbHNlIHsKIAkJcmVnaXN0ZXJfdmFsdWUgPSBGSUZPX0VNUFRZOwogCX0KQEAgLTQzMywxMSArNDMxLDcgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgU0E1X2ZpZm9fZnVsbChzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCWlmIChoLT5jb21tYW5kc19vdXRzdGFuZGluZyA+PSBoLT5tYXhfY29tbWFuZHMpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci0KKwlyZXR1cm4gYXRvbWljX3JlYWQoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKSA+PSBoLT5tYXhfY29tbWFuZHM7CiB9CiAvKgogICogICByZXR1cm5zIHZhbHVlIHJlYWQgZnJvbSBoYXJkd2FyZS4KQEAgLTQ0OCwxMyArNDQyLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlCiAJCT0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfUkVQTFlfUE9SVF9PRkZTRVQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocmVnaXN0ZXJfdmFsdWUgIT0gRklGT19FTVBUWSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7Ci0JfQorCWlmIChyZWdpc3Rlcl92YWx1ZSAhPSBGSUZPX0VNUFRZKQorCQlhdG9taWNfZGVjKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAKICNpZmRlZiBIUFNBX0RFQlVHCiAJaWYgKHJlZ2lzdGVyX3ZhbHVlICE9IEZJRk9fRU1QVFkpCkBAIC01MTAsNyArNTAwLDYgQEAKIHsKIAl1NjQgcmVnaXN0ZXJfdmFsdWU7CiAJc3RydWN0IHJlcGx5X3F1ZXVlX2J1ZmZlciAqcnEgPSAmaC0+cmVwbHlfcXVldWVbcV07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUJVR19PTihxID49IGgtPm5yZXBseV9xdWV1ZXMpOwogCkBAIC01MjgsOSArNTE3LDcgQEAKIAkJd21iKCk7CiAJCXdyaXRlbCgocSA8PCAyNCkgfCBycS0+Y3VycmVudF9lbnRyeSwgaC0+dmFkZHIgKwogCQkJCUlPQUNDRUxfTU9ERTFfQ09OU1VNRVJfSU5ERVgpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJCWF0b21pY19kZWMoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKIAl9CiAJcmV0dXJuICh1bnNpZ25lZCBsb25nKSByZWdpc3Rlcl92YWx1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKaW5kZXggYjUxMjVkYy4uY2I5ODhjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKQEAgLTI1Miw3ICsyNTIsNyBAQAogCXU4IExVTkxpc3RMZW5ndGhbNF07CiAJdTggZXh0ZW5kZWRfcmVzcG9uc2VfZmxhZzsKIAl1OCByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgZXh0X3JlcG9ydF9sdW5fZW50cnkgTFVOW0hQU0FfTUFYX0xVTl07CisJc3RydWN0IGV4dF9yZXBvcnRfbHVuX2VudHJ5IExVTltIUFNBX01BWF9QSFlTX0xVTl07CiB9OwogCiBzdHJ1Y3QgU2Vuc2VTdWJzeXN0ZW1faW5mbyB7CkBAIC0zMTQsMjggKzMxNCwzNiBAQAogCXU4ICAgICAgICAgICAgICBSZXBseVF1ZXVlOwogCXU4ICAgICAgICAgICAgICBTR0xpc3Q7CiAJdTE2ICAgICAgICAgICAgIFNHVG90YWw7Ci0Jc3RydWN0IHZhbHMzMiAgICAgVGFnOworCXU2NAkJdGFnOwogCXVuaW9uIExVTkFkZHIgICAgIExVTjsKIH07CiAKIHN0cnVjdCBSZXF1ZXN0QmxvY2sgewogCXU4ICAgQ0RCTGVuOwotCXN0cnVjdCB7Ci0JCXU4IFR5cGU6MzsKLQkJdTggQXR0cmlidXRlOjM7Ci0JCXU4IERpcmVjdGlvbjoyOwotCX0gVHlwZTsKKwkvKgorCSAqIHR5cGVfYXR0cl9kaXI6CisJICogdHlwZTogbG93IDMgYml0cworCSAqIGF0dHI6IG1pZGRsZSAzIGJpdHMKKwkgKiBkaXI6IGhpZ2ggMiBiaXRzCisJICovCisJdTgJdHlwZV9hdHRyX2RpcjsKKyNkZWZpbmUgVFlQRV9BVFRSX0RJUih0LCBhLCBkKSAoKCgoZCkgJiAweDAzKSA8PCA2KSB8XAorCQkJCSgoKGEpICYgMHgwNykgPDwgMykgfFwKKwkJCQkoKHQpICYgMHgwNykpCisjZGVmaW5lIEdFVF9UWVBFKHRhZCkgKCh0YWQpICYgMHgwNykKKyNkZWZpbmUgR0VUX0FUVFIodGFkKSAoKCh0YWQpID4+IDMpICYgMHgwNykKKyNkZWZpbmUgR0VUX0RJUih0YWQpICgoKHRhZCkgPj4gNikgJiAweDAzKQogCXUxNiAgVGltZW91dDsKIAl1OCAgIENEQlsxNl07CiB9OwogCiBzdHJ1Y3QgRXJyRGVzY3JpcHRvciB7Ci0Jc3RydWN0IHZhbHMzMiBBZGRyOworCXU2NCBBZGRyOwogCXUzMiAgTGVuOwogfTsKIAogc3RydWN0IFNHRGVzY3JpcHRvciB7Ci0Jc3RydWN0IHZhbHMzMiBBZGRyOworCXU2NCBBZGRyOwogCXUzMiAgTGVuOwogCXUzMiAgRXh0OwogfTsKQEAgLTQzNCw4ICs0NDIsOCBAQAogCXUxNiB0aW1lb3V0X3NlYzsJCS8qIDB4NjIgLSAweDYzICovCiAJdTggIFJlcGx5UXVldWU7CQkJLyogMHg2NCAqLwogCXU4ICByZXNlcnZlZDlbM107CQkvKiAweDY1IC0gMHg2NyAqLwotCXN0cnVjdCB2YWxzMzIgVGFnOwkJLyogMHg2OCAtIDB4NkYgKi8KLQlzdHJ1Y3QgdmFsczMyIGhvc3RfYWRkcjsJLyogMHg3MCAtIDB4NzcgKi8KKwl1NjQgdGFnOwkJCS8qIDB4NjggLSAweDZGICovCisJdTY0IGhvc3RfYWRkcjsJCQkvKiAweDcwIC0gMHg3NyAqLwogCXU4ICBDSVNTX0xVTls4XTsJCS8qIDB4NzggLSAweDdGICovCiAJc3RydWN0IFNHRGVzY3JpcHRvciBTR1tJT0FDQ0VMMV9NQVhTR0VOVFJJRVNdOwogfSBfX2FsaWduZWQoSU9BQ0NFTDFfQ09NTUFORExJU1RfQUxJR05NRU5UKTsKQEAgLTU1NSw4ICs1NjMsOCBAQAogCXU4IHJlc2VydmVkMTsJCS8qIGJ5dGUgMyBSZXNlcnZlZCAqLwogCXUzMiBpdF9uZXh1czsJCS8qIFNDU0kgSS1UIE5leHVzICovCiAJdTggbHVuX2lkWzhdOwkJLyogTFVOIElEIGZvciBUTUYgcmVxdWVzdCAqLwotCXN0cnVjdCB2YWxzMzIgVGFnOwkvKiBjY2lzcyB0YWcgYXNzb2NpYXRlZCB3LyByZXF1ZXN0ICovCi0Jc3RydWN0IHZhbHMzMiBhYm9ydF90YWc7LyogY2Npc3MgdGFnIG9mIFNDU0kgY21kIG9yIHRhc2sgdG8gYWJvcnQgKi8KKwl1NjQgdGFnOwkJLyogY2Npc3MgdGFnIGFzc29jaWF0ZWQgdy8gcmVxdWVzdCAqLworCXU2NCBhYm9ydF90YWc7CQkvKiBjY2lzcyB0YWcgb2YgU0NTSSBjbWQgb3IgdGFzayB0byBhYm9ydCAqLwogCXU2NCBlcnJvcl9wdHI7CQkvKiBFcnJvciBQb2ludGVyICovCiAJdTMyIGVycm9yX2xlbjsJCS8qIEVycm9yIExlbmd0aCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuYwppbmRleCBkZWRiNjJjLi5lOTk1MjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCkBAIC0xMTE4LDE3ICsxMTE4LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgaHB0aW9wX2FkanVzdF9kaXNrX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCQkJICBpbnQgcXVldWVfZGVwdGgsIGludCByZWFzb24pCisJCQkJCSAgaW50IHF1ZXVlX2RlcHRoKQogewogCXN0cnVjdCBocHRpb3BfaGJhICpoYmEgPSAoc3RydWN0IGhwdGlvcF9oYmEgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKIAotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJaWYgKHF1ZXVlX2RlcHRoID4gaGJhLT5tYXhfcmVxdWVzdHMpCiAJCXF1ZXVlX2RlcHRoID0gaGJhLT5tYXhfcmVxdWVzdHM7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxdWV1ZV9kZXB0aCk7Ci0JcmV0dXJuIHF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxdWV1ZV9kZXB0aCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhwdGlvcF9zaG93X3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCmluZGV4IDU5OGM0MmMuLmY1OGM2ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKQEAgLTE2NDMsMTkgKzE2NDMsOSBAQAogCWludF90b19zY3NpbHVuKGNtbmQtPmRldmljZS0+bHVuLCAmdmZjX2NtZC0+aXUubHVuKTsKIAltZW1jcHkodmZjX2NtZC0+aXUuY2RiLCBjbW5kLT5jbW5kLCBjbW5kLT5jbWRfbGVuKTsKIAotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21uZCwgdGFnKSkgewotCQl2ZmNfY21kLT50YXNrX3RhZyA9IGNwdV90b19iZTY0KHRhZ1sxXSk7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgTVNHX1NJTVBMRV9UQUc6Ci0JCQl2ZmNfY21kLT5pdS5wcmlfdGFza19hdHRyID0gSUJNVkZDX1NJTVBMRV9UQVNLOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX0hFQURfVEFHOgotCQkJdmZjX2NtZC0+aXUucHJpX3Rhc2tfYXR0ciA9IElCTVZGQ19IRUFEX09GX1FVRVVFOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJdmZjX2NtZC0+aXUucHJpX3Rhc2tfYXR0ciA9IElCTVZGQ19PUkRFUkVEX1RBU0s7Ci0JCQlicmVhazsKLQkJfTsKKwlpZiAoY21uZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkgeworCQl2ZmNfY21kLT50YXNrX3RhZyA9IGNwdV90b19iZTY0KGNtbmQtPnRhZyk7CisJCXZmY19jbWQtPml1LnByaV90YXNrX2F0dHIgPSBJQk1WRkNfU0lNUExFX1RBU0s7CiAJfQogCiAJaWYgKGxpa2VseSghKHJjID0gaWJtdmZjX21hcF9zZ19kYXRhKGNtbmQsIGV2dCwgdmZjX2NtZCwgdmhvc3QtPmRldikpKSkKQEAgLTI4OTcsMTIgKzI4ODcsNiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX0RJU0spCiAJCXNkZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwotCi0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgTVNHX1NJTVBMRV9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JfSBlbHNlCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtMjkxNiw0MCArMjkwMCwxMiBAQAogICogUmV0dXJuIHZhbHVlOgogICogCWFjdHVhbCBkZXB0aCBzZXQKICAqKi8KLXN0YXRpYyBpbnQgaWJtdmZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsCi0JCQkJICAgICBpbnQgcmVhc29uKQorc3RhdGljIGludCBpYm12ZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCkKIHsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChxZGVwdGggPiBJQk1WRkNfTUFYX0NNRFNfUEVSX0xVTikKIAkJcWRlcHRoID0gSUJNVkZDX01BWF9DTURTX1BFUl9MVU47CiAKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBxZGVwdGgpOwotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLQotLyoqCi0gKiBpYm12ZmNfY2hhbmdlX3F1ZXVlX3R5cGUgLSBDaGFuZ2UgdGhlIGRldmljZSdzIHF1ZXVlIHR5cGUKLSAqIEBzZGV2OgkJc2NzaSBkZXZpY2Ugc3RydWN0Ci0gKiBAdGFnX3R5cGU6CXR5cGUgb2YgdGFncyB0byB1c2UKLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKiAJYWN0dWFsIHF1ZXVlIHR5cGUgc2V0Ci0gKiovCi1zdGF0aWMgaW50IGlibXZmY19jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKLXsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0KLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiBzdGF0aWMgc3NpemVfdCBpYm12ZmNfc2hvd19ob3N0X3BhcnRpdGlvbl9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTMxMzMsNyArMzA4OSw3IEBACiAJLnRhcmdldF9hbGxvYyA9IGlibXZmY190YXJnZXRfYWxsb2MsCiAJLnNjYW5fZmluaXNoZWQgPSBpYm12ZmNfc2Nhbl9maW5pc2hlZCwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gaWJtdmZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgPSBpYm12ZmNfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmNoYW5nZV9xdWV1ZV90eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkuY21kX3Blcl9sdW4gPSAxNiwKIAkuY2FuX3F1ZXVlID0gSUJNVkZDX01BWF9SRVFVRVNUU19ERUZBVUxULAogCS50aGlzX2lkID0gLTEsCkBAIC0zMTQxLDYgKzMwOTcsOCBAQAogCS5tYXhfc2VjdG9ycyA9IElCTVZGQ19NQVhfU0VDVE9SUywKIAkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2hvc3RfYXR0cnMgPSBpYm12ZmNfYXR0cnMsCisJLnVzZV9ibGtfdGFncyA9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCA3YjIzZjIxLi5hY2VhNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtMTkyOSw3ICsxOTI5LDYgQEAKIAkJYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMTIwICogSFopOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNob3N0LT5jbWRfcGVyX2x1bik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NDIsMTcgKzE5NDEsMTEgQEAKICAqIFJldHVybiB2YWx1ZToKICAqIAlhY3R1YWwgZGVwdGggc2V0CiAgKiovCi1zdGF0aWMgaW50IGlibXZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsCi0JCQkJICAgICAgIGludCByZWFzb24pCitzdGF0aWMgaW50IGlibXZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAocWRlcHRoID4gSUJNVlNDU0lfTUFYX0NNRFNfUEVSX0xVTikKIAkJcWRlcHRoID0gSUJNVlNDU0lfTUFYX0NNRFNfUEVSX0xVTjsKLQotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHFkZXB0aCk7Ci0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCAyYTk1NzhjLi41NDAyOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC0zOTQyLDggKzM5NDIsOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzZ2xpc3QtPm51bV9kbWFfc2cgPSBwY2lfbWFwX3NnKGlvYV9jZmctPnBkZXYsIHNnbGlzdC0+c2NhdHRlcmxpc3QsCi0JCQkJCXNnbGlzdC0+bnVtX3NnLCBETUFfVE9fREVWSUNFKTsKKwlzZ2xpc3QtPm51bV9kbWFfc2cgPSBkbWFfbWFwX3NnKCZpb2FfY2ZnLT5wZGV2LT5kZXYsCisJCQkJCXNnbGlzdC0+c2NhdHRlcmxpc3QsIHNnbGlzdC0+bnVtX3NnLAorCQkJCQlETUFfVE9fREVWSUNFKTsKIAogCWlmICghc2dsaXN0LT5udW1fZG1hX3NnKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKQEAgLTQzMjcsMTYgKzQzMjgsMTIgQEAKICAqIFJldHVybiB2YWx1ZToKICAqIAlhY3R1YWwgZGVwdGggc2V0CiAgKiovCi1zdGF0aWMgaW50IGlwcl9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLAotCQkJCSAgaW50IHJlYXNvbikKK3N0YXRpYyBpbnQgaXByX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gKHN0cnVjdCBpcHJfaW9hX2NmZyAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlczsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwogCi0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCXJlcyA9IChzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICopc2Rldi0+aG9zdGRhdGE7CiAKQEAgLTQzNDQsNyArNDM0MSw3IEBACiAJCXFkZXB0aCA9IElQUl9NQVhfQ01EX1BFUl9BVEFfTFVOOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOworCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiAJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwogfQogCkBAIC00MzY0LDI0ICs0MzYxLDEwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCXJlcyA9IChzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICopc2Rldi0+aG9zdGRhdGE7Ci0KLQlpZiAocmVzKSB7Ci0JCWlmIChpcHJfaXNfZ3Njc2kocmVzKSAmJiBzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCQkvKgotCQkJICogV2UgZG9uJ3QgYm90aGVyIHF1aWVzY2luZyB0aGUgZGV2aWNlIGhlcmUgc2luY2UgdGhlCi0JCQkgKiBhZGFwdGVyIGZpcm13YXJlIGRvZXMgaXQgZm9yIHVzLgotCQkJICovCi0JCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0KLQkJCWlmICh0YWdfdHlwZSkKLQkJCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCQllbHNlCi0JCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCX0gZWxzZQotCQkJdGFnX3R5cGUgPSAwOwotCX0gZWxzZQorCWlmIChyZXMgJiYgaXByX2lzX2dzY3NpKHJlcykpCisJCXRhZ190eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZShzZGV2LCB0YWdfdHlwZSk7CisJZWxzZQogCQl0YWdfdHlwZSA9IDA7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJcmV0dXJuIHRhZ190eXBlOwogfQpAQCAtNDc2NSwxMCArNDc0OCwxMCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAKIAkJaWYgKGFwKSB7Ci0JCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBJUFJfTUFYX0NNRF9QRVJfQVRBX0xVTik7CisJCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBJUFJfTUFYX0NNRF9QRVJfQVRBX0xVTik7CiAJCQlhdGFfc2FzX3NsYXZlX2NvbmZpZ3VyZShzZGV2LCBhcCk7Ci0JCX0gZWxzZQotCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOworCQl9CisKIAkJaWYgKGlvYV9jZmctPnNpczY0KQogCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiUmVzb3VyY2UgcGF0aDogJXNcbiIsCiAJCQkJICAgIGlwcl9mb3JtYXRfcmVzX3BhdGgoaW9hX2NmZywKQEAgLTU1ODUsNyArNTU2OCw3IEBACiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAJaWYgKG5zZWcgPCAwKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICJwY2lfbWFwX3NnIGZhaWxlZCFcbiIpOworCQkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAic2NzaV9kbWFfbWFwIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC01NjM2LDcgKzU2MTksNyBAQAogCiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAJaWYgKG5zZWcgPCAwKSB7Ci0JCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgInBjaV9tYXBfc2cgZmFpbGVkIVxuIik7CisJCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgInNjc2lfZG1hX21hcCBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNTY3MywzNSArNTY1Niw2IEBACiB9CiAKIC8qKgotICogaXByX2dldF90YXNrX2F0dHJpYnV0ZXMgLSBUcmFuc2xhdGUgU1BJIFEtVGFnIHRvIHRhc2sgYXR0cmlidXRlcwotICogQHNjc2lfY21kOglzY3NpIGNvbW1hbmQgc3RydWN0Ci0gKgotICogUmV0dXJuIHZhbHVlOgotICogCXRhc2sgYXR0cmlidXRlcwotICoqLwotc3RhdGljIHU4IGlwcl9nZXRfdGFza19hdHRyaWJ1dGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kKQotewotCXU4IHRhZ1syXTsKLQl1OCByYyA9IElQUl9GTEFHU19MT19VTlRBR0dFRF9UQVNLOwotCi0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY3NpX2NtZCwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIE1TR19TSU1QTEVfVEFHOgotCQkJcmMgPSBJUFJfRkxBR1NfTE9fU0lNUExFX1RBU0s7Ci0JCQlicmVhazsKLQkJY2FzZSBNU0dfSEVBRF9UQUc6Ci0JCQlyYyA9IElQUl9GTEFHU19MT19IRUFEX09GX1FfVEFTSzsKLQkJCWJyZWFrOwotCQljYXNlIE1TR19PUkRFUkVEX1RBRzoKLQkJCXJjID0gSVBSX0ZMQUdTX0xPX09SREVSRURfVEFTSzsKLQkJCWJyZWFrOwotCQl9OwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCiAgKiBpcHJfZXJwX2RvbmUgLSBQcm9jZXNzIGNvbXBsZXRpb24gb2YgRVJQIGZvciBhIGRldmljZQogICogQGlwcl9jbWQ6CQlpcHIgY29tbWFuZCBzdHJ1Y3QKICAqCkBAIC02MjM2LDcgKzYxOTAsMTAgQEAKIAkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fREVMQVlfQUZURVJfUlNUOwogCQl9CiAJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fQUxJR05FRF9CRlI7Ci0JCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBpcHJfZ2V0X3Rhc2tfYXR0cmlidXRlcyhzY3NpX2NtZCk7CisJCWlmIChzY3NpX2NtZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkKKwkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fU0lNUExFX1RBU0s7CisJCWVsc2UKKwkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fVU5UQUdHRURfVEFTSzsKIAl9CiAKIAlpZiAoc2NzaV9jbWQtPmNtbmRbMF0gPj0gMHhDMCAmJgpAQCAtNjM1Nyw2ICs2MzE0LDcgQEAKIAkuc2Rldl9hdHRycyA9IGlwcl9kZXZfYXR0cnMsCiAJLnByb2NfbmFtZSA9IElQUl9OQU1FLAogCS5ub193cml0ZV9zYW1lID0gMSwKKwkudXNlX2Jsa190YWdzID0gMSwKIH07CiAKIC8qKgpAQCAtODQzMSw3ICs4Mzg5LDcgQEAKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSBpcHJfY21kLT5pb2FfY2ZnOwogCXN0cnVjdCBpcHJfc2dsaXN0ICpzZ2xpc3QgPSBpb2FfY2ZnLT51Y29kZV9zZ2xpc3Q7CiAKLQlwY2lfdW5tYXBfc2coaW9hX2NmZy0+cGRldiwgc2dsaXN0LT5zY2F0dGVybGlzdCwKKwlkbWFfdW5tYXBfc2coJmlvYV9jZmctPnBkZXYtPmRldiwgc2dsaXN0LT5zY2F0dGVybGlzdCwKIAkJICAgICBzZ2xpc3QtPm51bV9zZywgRE1BX1RPX0RFVklDRSk7CiAKIAlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9yZXNldF9hbGVydDsKQEAgLTg4NzEsNyArODgyOSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgSVBSX05VTV9DTURfQkxLUzsgaSsrKSB7CiAJCWlmIChpb2FfY2ZnLT5pcHJfY21uZF9saXN0W2ldKQotCQkJcGNpX3Bvb2xfZnJlZShpb2FfY2ZnLT5pcHJfY21kX3Bvb2wsCisJCQlkbWFfcG9vbF9mcmVlKGlvYV9jZmctPmlwcl9jbWRfcG9vbCwKIAkJCQkgICAgICBpb2FfY2ZnLT5pcHJfY21uZF9saXN0W2ldLAogCQkJCSAgICAgIGlvYV9jZmctPmlwcl9jbW5kX2xpc3RfZG1hW2ldKTsKIApAQCAtODg3OSw3ICs4ODM3LDcgQEAKIAl9CiAKIAlpZiAoaW9hX2NmZy0+aXByX2NtZF9wb29sKQotCQlwY2lfcG9vbF9kZXN0cm95KGlvYV9jZmctPmlwcl9jbWRfcG9vbCk7CisJCWRtYV9wb29sX2Rlc3Ryb3koaW9hX2NmZy0+aXByX2NtZF9wb29sKTsKIAogCWtmcmVlKGlvYV9jZmctPmlwcl9jbW5kX2xpc3QpOwogCWtmcmVlKGlvYV9jZmctPmlwcl9jbW5kX2xpc3RfZG1hKTsKQEAgLTg5MDAsMjUgKzg4NTgsMjQgQEAKIAlpbnQgaTsKIAogCWtmcmVlKGlvYV9jZmctPnJlc19lbnRyaWVzKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsIHNpemVvZihzdHJ1Y3QgaXByX21pc2NfY2JzKSwKLQkJCSAgICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmlvYV9jZmctPnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBpcHJfbWlzY19jYnMpLAorCQkJICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CiAJaXByX2ZyZWVfY21kX2Jsa3MoaW9hX2NmZyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaW9hX2NmZy0+aHJycV9udW07IGkrKykKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LAotCQkJCQlzaXplb2YodTMyKSAqIGlvYV9jZmctPmhycnFbaV0uc2l6ZSwKLQkJCQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycSwKLQkJCQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmaW9hX2NmZy0+cGRldi0+ZGV2LAorCQkJCSAgc2l6ZW9mKHUzMikgKiBpb2FfY2ZnLT5ocnJxW2ldLnNpemUsCisJCQkJICBpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxLAorCQkJCSAgaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOwogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKLQkJCSAgICBpb2FfY2ZnLT51LmNmZ190YWJsZSwKLQkJCSAgICBpb2FfY2ZnLT5jZmdfdGFibGVfZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmaW9hX2NmZy0+cGRldi0+ZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKKwkJCSAgaW9hX2NmZy0+dS5jZmdfdGFibGUsIGlvYV9jZmctPmNmZ190YWJsZV9kbWEpOwogCiAJZm9yIChpID0gMDsgaSA8IElQUl9OVU1fSENBTVM7IGkrKykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgaXByX2hvc3RyY2IpLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiW2ldLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiX2RtYVtpXSk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZpb2FfY2ZnLT5wZGV2LT5kZXYsCisJCQkJICBzaXplb2Yoc3RydWN0IGlwcl9ob3N0cmNiKSwKKwkJCQkgIGlvYV9jZmctPmhvc3RyY2JbaV0sCisJCQkJICBpb2FfY2ZnLT5ob3N0cmNiX2RtYVtpXSk7CiAJfQogCiAJaXByX2ZyZWVfZHVtcChpb2FfY2ZnKTsKQEAgLTg5NzksNyArODkzNiw3IEBACiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgaSwgZW50cmllc19lYWNoX2hycnEsIGhycnFfaWQgPSAwOwogCi0JaW9hX2NmZy0+aXByX2NtZF9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKElQUl9OQU1FLCBpb2FfY2ZnLT5wZGV2LAorCWlvYV9jZmctPmlwcl9jbWRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZShJUFJfTkFNRSwgJmlvYV9jZmctPnBkZXYtPmRldiwKIAkJCQkJCXNpemVvZihzdHJ1Y3QgaXByX2NtbmQpLCA1MTIsIDApOwogCiAJaWYgKCFpb2FfY2ZnLT5pcHJfY21kX3Bvb2wpCkBAIC05MDI5LDcgKzg5ODYsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBJUFJfTlVNX0NNRF9CTEtTOyBpKyspIHsKLQkJaXByX2NtZCA9IHBjaV9wb29sX2FsbG9jKGlvYV9jZmctPmlwcl9jbWRfcG9vbCwgR0ZQX0tFUk5FTCwgJmRtYV9hZGRyKTsKKwkJaXByX2NtZCA9IGRtYV9wb29sX2FsbG9jKGlvYV9jZmctPmlwcl9jbWRfcG9vbCwgR0ZQX0tFUk5FTCwgJmRtYV9hZGRyKTsKIAogCQlpZiAoIWlwcl9jbWQpIHsKIAkJCWlwcl9mcmVlX2NtZF9ibGtzKGlvYV9jZmcpOwpAQCAtOTEwMCw5ICs5MDU3LDEwIEBACiAJCWlvYV9jZmctPnJlc19lbnRyaWVzW2ldLmlvYV9jZmcgPSBpb2FfY2ZnOwogCX0KIAotCWlvYV9jZmctPnZwZF9jYnMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBpcHJfbWlzY19jYnMpLAotCQkJCQkJJmlvYV9jZmctPnZwZF9jYnNfZG1hKTsKKwlpb2FfY2ZnLT52cGRfY2JzID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXByX21pc2NfY2JzKSwKKwkJCQkJICAgICAgJmlvYV9jZmctPnZwZF9jYnNfZG1hLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAogCWlmICghaW9hX2NmZy0+dnBkX2NicykKIAkJZ290byBvdXRfZnJlZV9yZXNfZW50cmllczsKQEAgLTkxMTEsMTMgKzkwNjksMTQgQEAKIAkJZ290byBvdXRfZnJlZV92cGRfY2JzOwogCiAJZm9yIChpID0gMDsgaSA8IGlvYV9jZmctPmhycnFfbnVtOyBpKyspIHsKLQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsCisJCWlvYV9jZmctPmhycnFbaV0uaG9zdF9ycnEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKIAkJCQkJc2l6ZW9mKHUzMikgKiBpb2FfY2ZnLT5ocnJxW2ldLnNpemUsCi0JCQkJCSZpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxX2RtYSk7CisJCQkJCSZpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxX2RtYSwKKwkJCQkJR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKCFpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxKSAgewogCQkJd2hpbGUgKC0taSA+IDApCi0JCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LAorCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsCiAJCQkJCXNpemVvZih1MzIpICogaW9hX2NmZy0+aHJycVtpXS5zaXplLAogCQkJCQlpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxLAogCQkJCQlpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxX2RtYSk7CkBAIC05MTI2LDE3ICs5MDg1LDE5IEBACiAJCWlvYV9jZmctPmhycnFbaV0uaW9hX2NmZyA9IGlvYV9jZmc7CiAJfQogCi0JaW9hX2NmZy0+dS5jZmdfdGFibGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LAotCQkJCQkJICAgIGlvYV9jZmctPmNmZ190YWJsZV9zaXplLAotCQkJCQkJICAgICZpb2FfY2ZnLT5jZmdfdGFibGVfZG1hKTsKKwlpb2FfY2ZnLT51LmNmZ190YWJsZSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJICBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKKwkJCQkJCSAgJmlvYV9jZmctPmNmZ190YWJsZV9kbWEsCisJCQkJCQkgIEdGUF9LRVJORUwpOwogCiAJaWYgKCFpb2FfY2ZnLT51LmNmZ190YWJsZSkKIAkJZ290byBvdXRfZnJlZV9ob3N0X3JycTsKIAogCWZvciAoaSA9IDA7IGkgPCBJUFJfTlVNX0hDQU1TOyBpKyspIHsKLQkJaW9hX2NmZy0+aG9zdHJjYltpXSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsCi0JCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBpcHJfaG9zdHJjYiksCi0JCQkJCQkJICAgJmlvYV9jZmctPmhvc3RyY2JfZG1hW2ldKTsKKwkJaW9hX2NmZy0+aG9zdHJjYltpXSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJCSBzaXplb2Yoc3RydWN0IGlwcl9ob3N0cmNiKSwKKwkJCQkJCQkgJmlvYV9jZmctPmhvc3RyY2JfZG1hW2ldLAorCQkJCQkJCSBHRlBfS0VSTkVMKTsKIAogCQlpZiAoIWlvYV9jZmctPmhvc3RyY2JbaV0pCiAJCQlnb3RvIG91dF9mcmVlX2hvc3RyY2JfZG1hOwpAQCAtOTE2MCwyNSArOTEyMSwyNCBAQAogCiBvdXRfZnJlZV9ob3N0cmNiX2RtYToKIAl3aGlsZSAoaS0tID4gMCkgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgaXByX2hvc3RyY2IpLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiW2ldLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiX2RtYVtpXSk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgaXByX2hvc3RyY2IpLAorCQkJCSAgaW9hX2NmZy0+aG9zdHJjYltpXSwKKwkJCQkgIGlvYV9jZmctPmhvc3RyY2JfZG1hW2ldKTsKIAl9Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKLQkJCSAgICBpb2FfY2ZnLT51LmNmZ190YWJsZSwKLQkJCSAgICBpb2FfY2ZnLT5jZmdfdGFibGVfZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKKwkJCSAgaW9hX2NmZy0+dS5jZmdfdGFibGUsIGlvYV9jZmctPmNmZ190YWJsZV9kbWEpOwogb3V0X2ZyZWVfaG9zdF9ycnE6CiAJZm9yIChpID0gMDsgaSA8IGlvYV9jZmctPmhycnFfbnVtOyBpKyspIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LAotCQkJCXNpemVvZih1MzIpICogaW9hX2NmZy0+aHJycVtpXS5zaXplLAotCQkJCWlvYV9jZmctPmhycnFbaV0uaG9zdF9ycnEsCi0JCQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCSAgc2l6ZW9mKHUzMikgKiBpb2FfY2ZnLT5ocnJxW2ldLnNpemUsCisJCQkJICBpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxLAorCQkJCSAgaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOwogCX0KIG91dF9pcHJfZnJlZV9jbWRfYmxvY2tzOgogCWlwcl9mcmVlX2NtZF9ibGtzKGlvYV9jZmcpOwogb3V0X2ZyZWVfdnBkX2NiczoKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgaXByX21pc2NfY2JzKSwKLQkJCSAgICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBpcHJfbWlzY19jYnMpLAorCQkJICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CiBvdXRfZnJlZV9yZXNfZW50cmllczoKIAlrZnJlZShpb2FfY2ZnLT5yZXNfZW50cmllcyk7CiAJZ290byBvdXQ7CkBAIC05NjE4LDE2ICs5NTc4LDE3IEBACiAJaXByX2luaXRfcmVncyhpb2FfY2ZnKTsKIAogCWlmIChpb2FfY2ZnLT5zaXM2NCkgewotCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJCXJjID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LCBETUFfQklUX01BU0soNjQpKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCA2NCBiaXQgUENJIERNQSBtYXNrXG4iKTsKLQkJCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgNjQgYml0IERNQSBtYXNrXG4iKTsKKwkJCXJjID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJICAgICAgIERNQV9CSVRfTUFTSygzMikpOwogCQl9CiAJfSBlbHNlCi0JCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJcmMgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOwogCiAJaWYgKHJjIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IFBDSSBETUEgbWFza1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgRE1BIG1hc2tcbiIpOwogCQlnb3RvIGNsZWFudXBfbm9tZW07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggZDAyMDFjZS4uOWViZGViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMTU0OSw3ICsxNTQ5LDcgQEAKIAlzdHJ1Y3QgaXByX21pc2NfY2JzICp2cGRfY2JzOwogCWRtYV9hZGRyX3QgdnBkX2Nic19kbWE7CiAKLQlzdHJ1Y3QgcGNpX3Bvb2wgKmlwcl9jbWRfcG9vbDsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKmlwcl9jbWRfcG9vbDsKIAogCXN0cnVjdCBpcHJfY21uZCAqcmVzZXRfY21kOwogCWludCAoKnJlc2V0KSAoc3RydWN0IGlwcl9jbW5kICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwcy5jIGIvZHJpdmVycy9zY3NpL2lwcy5jCmluZGV4IGU1YWZjMzguLmU1YzI4NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHMuYworKysgYi9kcml2ZXJzL3Njc2kvaXBzLmMKQEAgLTEyMTAsNyArMTIxMCw3IEBACiAJCW1pbiA9IGhhLT5tYXhfY21kcyAvIDI7CiAJCWlmIChoYS0+ZW5xLT51Y0xvZ0RyaXZlQ291bnQgPD0gMikKIAkJCW1pbiA9IGhhLT5tYXhfY21kcyAtIDE7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKFNEcHRyLCBNU0dfT1JERVJFRF9UQUcsIG1pbik7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKFNEcHRyLCBtaW4pOwogCX0KIAogCVNEcHRyLT5za2lwX21zX3BhZ2VfOCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjaS9pbml0LmMgYi9kcml2ZXJzL3Njc2kvaXNjaS9pbml0LmMKaW5kZXggMmU4OTBiMS4uNzI0YzYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY2kvaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NpL2luaXQuYwpAQCAtMTcyLDYgKzE3Miw4IEBACiAJLnRhcmdldF9kZXN0cm95CQkJPSBzYXNfdGFyZ2V0X2Rlc3Ryb3ksCiAJLmlvY3RsCQkJCT0gc2FzX2lvY3RsLAogCS5zaG9zdF9hdHRycwkJCT0gaXNjaV9ob3N0X2F0dHJzLAorCS51c2VfYmxrX3RhZ3MJCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCQk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNhc19kb21haW5fZnVuY3Rpb25fdGVtcGxhdGUgaXNjaV90cmFuc3BvcnRfb3BzICA9IHsKQEAgLTI1OCw4ICsyNjAsNiBAQAogCXNhc19oYS0+c2FzX3BvcnQgPSBzYXNfcG9ydHM7CiAJc2FzX2hhLT5udW1fcGh5cyA9IFNDSV9NQVhfUEhZUzsKIAotCXNhc19oYS0+bGxkZF9xdWV1ZV9zaXplID0gSVNDSV9DQU5fUVVFVUVfVkFMOwotCXNhc19oYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPSAxOwogCXNhc19oYS0+c3RyaWN0X3dpZGVfcG9ydHMgPSAxOwogCiAJc2FzX3JlZ2lzdGVyX2hhKHNhc19oYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjaS90YXNrLmMgYi9kcml2ZXJzL3Njc2kvaXNjaS90YXNrLmMKaW5kZXggNWQ2ZmRhNy4uM2Y2M2M2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY2kvdGFzay5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NpL3Rhc2suYwpAQCAtMTE3LDEwNCArMTE3LDk3IEBACiAgKiAgICBmdW5jdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGxpYnNhcyB0byBzZW5kIGEgdGFzayBkb3duIHRvCiAgKiAgICBoYXJkd2FyZS4KICAqIEB0YXNrOiBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIFNBUyB0YXNrIHRvIHNlbmQuCi0gKiBAbnVtOiBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0YXNrcyB0byBxdWV1ZS4KICAqIEBnZnBfZmxhZ3M6IFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgY29udGV4dCBvZiB0aGlzIGNhbGwuCiAgKgogICogc3RhdHVzLCB6ZXJvIGluZGljYXRlcyBzdWNjZXNzLgogICovCi1pbnQgaXNjaV90YXNrX2V4ZWN1dGVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGludCBudW0sIGdmcF90IGdmcF9mbGFncykKK2ludCBpc2NpX3Rhc2tfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBpc2NpX2hvc3QgKmlob3N0ID0gZGV2X3RvX2lob3N0KHRhc2stPmRldik7CiAJc3RydWN0IGlzY2lfcmVtb3RlX2RldmljZSAqaWRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWVudW0gc2NpX3N0YXR1cyBzdGF0dXMgPSBTQ0lfRkFJTFVSRTsKIAlib29sIGlvX3JlYWR5OwogCXUxNiB0YWc7CiAKLQlkZXZfZGJnKCZpaG9zdC0+cGRldi0+ZGV2LCAiJXM6IG51bT0lZFxuIiwgX19mdW5jX18sIG51bSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlob3N0LT5zY2ljX2xvY2ssIGZsYWdzKTsKKwlpZGV2ID0gaXNjaV9sb29rdXBfZGV2aWNlKHRhc2stPmRldik7CisJaW9fcmVhZHkgPSBpc2NpX2RldmljZV9pb19yZWFkeShpZGV2LCB0YXNrKTsKKwl0YWcgPSBpc2NpX2FsbG9jX3RhZyhpaG9zdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOwogCi0JZm9yX2VhY2hfc2FzX3Rhc2sobnVtLCB0YXNrKSB7Ci0JCWVudW0gc2NpX3N0YXR1cyBzdGF0dXMgPSBTQ0lfRkFJTFVSRTsKKwlkZXZfZGJnKCZpaG9zdC0+cGRldi0+ZGV2LAorCQkidGFzazogJXAsIGRldjogJXAgaWRldjogJXA6JSNseCBjbWQgPSAlcFxuIiwKKwkJdGFzaywgdGFzay0+ZGV2LCBpZGV2LCBpZGV2ID8gaWRldi0+ZmxhZ3MgOiAwLAorCQl0YXNrLT51bGRkX3Rhc2spOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpaG9zdC0+c2NpY19sb2NrLCBmbGFncyk7Ci0JCWlkZXYgPSBpc2NpX2xvb2t1cF9kZXZpY2UodGFzay0+ZGV2KTsKLQkJaW9fcmVhZHkgPSBpc2NpX2RldmljZV9pb19yZWFkeShpZGV2LCB0YXNrKTsKLQkJdGFnID0gaXNjaV9hbGxvY190YWcoaWhvc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpaG9zdC0+c2NpY19sb2NrLCBmbGFncyk7CisJaWYgKCFpZGV2KSB7CisJCWlzY2lfdGFza19yZWZ1c2UoaWhvc3QsIHRhc2ssIFNBU19UQVNLX1VOREVMSVZFUkVELAorCQkJCSBTQVNfREVWSUNFX1VOS05PV04pOworCX0gZWxzZSBpZiAoIWlvX3JlYWR5IHx8IHRhZyA9PSBTQ0lfQ09OVFJPTExFUl9JTlZBTElEX0lPX1RBRykgeworCQkvKiBJbmRpY2F0ZSBRVUVVRV9GVUxMIHNvIHRoYXQgdGhlIHNjc2kgbWlkbGF5ZXIKKwkJICogcmV0cmllcy4KKwkJICAqLworCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLCBTQVNfVEFTS19DT01QTEVURSwKKwkJCQkgU0FTX1FVRVVFX0ZVTEwpOworCX0gZWxzZSB7CisJCS8qIFRoZXJlIGlzIGEgZGV2aWNlIGFuZCBpdCdzIHJlYWR5IGZvciBJL08uICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAotCQlkZXZfZGJnKCZpaG9zdC0+cGRldi0+ZGV2LAotCQkJInRhc2s6ICVwLCBudW06ICVkIGRldjogJXAgaWRldjogJXA6JSNseCBjbWQgPSAlcFxuIiwKLQkJCXRhc2ssIG51bSwgdGFzay0+ZGV2LCBpZGV2LCBpZGV2ID8gaWRldi0+ZmxhZ3MgOiAwLAotCQkJdGFzay0+dWxkZF90YXNrKTsKKwkJaWYgKHRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9BQk9SVEVEKSB7CisJCQkvKiBUaGUgSS9PIHdhcyBhYm9ydGVkLiAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CiAKLQkJaWYgKCFpZGV2KSB7Ci0JCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLCBTQVNfVEFTS19VTkRFTElWRVJFRCwKLQkJCQkJIFNBU19ERVZJQ0VfVU5LTk9XTik7Ci0JCX0gZWxzZSBpZiAoIWlvX3JlYWR5IHx8IHRhZyA9PSBTQ0lfQ09OVFJPTExFUl9JTlZBTElEX0lPX1RBRykgewotCQkJLyogSW5kaWNhdGUgUVVFVUVfRlVMTCBzbyB0aGF0IHRoZSBzY3NpIG1pZGxheWVyCi0JCQkgKiByZXRyaWVzLgotCQkJICAqLwotCQkJaXNjaV90YXNrX3JlZnVzZShpaG9zdCwgdGFzaywgU0FTX1RBU0tfQ09NUExFVEUsCi0JCQkJCSBTQVNfUVVFVUVfRlVMTCk7CisJCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLAorCQkJCQkgU0FTX1RBU0tfVU5ERUxJVkVSRUQsCisJCQkJCSBTQU1fU1RBVF9UQVNLX0FCT1JURUQpOwogCQl9IGVsc2UgewotCQkJLyogVGhlcmUgaXMgYSBkZXZpY2UgYW5kIGl0J3MgcmVhZHkgZm9yIEkvTy4gKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfQVRfSU5JVElBVE9SOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CiAKLQkJCWlmICh0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfU1RBVEVfQUJPUlRFRCkgewotCQkJCS8qIFRoZSBJL08gd2FzIGFib3J0ZWQuICovCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLAotCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCS8qIGJ1aWxkIGFuZCBzZW5kIHRoZSByZXF1ZXN0LiAqLworCQkJc3RhdHVzID0gaXNjaV9yZXF1ZXN0X2V4ZWN1dGUoaWhvc3QsIGlkZXYsIHRhc2ssIHRhZyk7CiAKLQkJCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLAotCQkJCQkJIFNBU19UQVNLX1VOREVMSVZFUkVELAotCQkJCQkJIFNBTV9TVEFUX1RBU0tfQUJPUlRFRCk7Ci0JCQl9IGVsc2UgewotCQkJCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfQVRfSU5JVElBVE9SOworCQkJaWYgKHN0YXR1cyAhPSBTQ0lfU1VDQ0VTUykgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJCQkvKiBEaWQgbm90IHJlYWxseSBzdGFydCB0aGlzIGNvbW1hbmQuICovCisJCQkJdGFzay0+dGFza19zdGF0ZV9mbGFncyAmPSB+U0FTX1RBU0tfQVRfSU5JVElBVE9SOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwogCi0JCQkJLyogYnVpbGQgYW5kIHNlbmQgdGhlIHJlcXVlc3QuICovCi0JCQkJc3RhdHVzID0gaXNjaV9yZXF1ZXN0X2V4ZWN1dGUoaWhvc3QsIGlkZXYsIHRhc2ssIHRhZyk7Ci0KLQkJCQlpZiAoc3RhdHVzICE9IFNDSV9TVUNDRVNTKSB7Ci0KLQkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwotCQkJCQkvKiBEaWQgbm90IHJlYWxseSBzdGFydCB0aGlzIGNvbW1hbmQuICovCi0JCQkJCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJj0gflNBU19UQVNLX0FUX0lOSVRJQVRPUjsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7Ci0KLQkJCQkJaWYgKHRlc3RfYml0KElERVZfR09ORSwgJmlkZXYtPmZsYWdzKSkgewotCi0JCQkJCQkvKiBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UKLQkJCQkJCSAqIGlzIGdvbmUuCi0JCQkJCQkgKi8KLQkJCQkJCWlzY2lfdGFza19yZWZ1c2UoaWhvc3QsIHRhc2ssCi0JCQkJCQkJU0FTX1RBU0tfVU5ERUxJVkVSRUQsCi0JCQkJCQkJU0FTX0RFVklDRV9VTktOT1dOKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIEluZGljYXRlIFFVRVVFX0ZVTEwgc28gdGhhdAotCQkJCQkJICogdGhlIHNjc2kgbWlkbGF5ZXIgcmV0cmllcy4KLQkJCQkJCSAqIElmIHRoZSByZXF1ZXN0IGZhaWxlZCBmb3IKLQkJCQkJCSAqIHJlbW90ZSBkZXZpY2UgcmVhc29ucywgaXQKLQkJCQkJCSAqIGdldHMgcmV0dXJuZWQgYXMKLQkJCQkJCSAqIFNBU19UQVNLX1VOREVMSVZFUkVEIG5leHQKLQkJCQkJCSAqIHRpbWUgdGhyb3VnaC4KLQkJCQkJCSAqLwotCQkJCQkJaXNjaV90YXNrX3JlZnVzZShpaG9zdCwgdGFzaywKLQkJCQkJCQlTQVNfVEFTS19DT01QTEVURSwKLQkJCQkJCQlTQVNfUVVFVUVfRlVMTCk7Ci0JCQkJCX0KKwkJCQlpZiAodGVzdF9iaXQoSURFVl9HT05FLCAmaWRldi0+ZmxhZ3MpKSB7CisJCQkJCS8qIEluZGljYXRlIHRoYXQgdGhlIGRldmljZQorCQkJCQkgKiBpcyBnb25lLgorCQkJCQkgKi8KKwkJCQkJaXNjaV90YXNrX3JlZnVzZShpaG9zdCwgdGFzaywKKwkJCQkJCVNBU19UQVNLX1VOREVMSVZFUkVELAorCQkJCQkJU0FTX0RFVklDRV9VTktOT1dOKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBJbmRpY2F0ZSBRVUVVRV9GVUxMIHNvIHRoYXQKKwkJCQkJICogdGhlIHNjc2kgbWlkbGF5ZXIgcmV0cmllcy4KKwkJCQkJICogSWYgdGhlIHJlcXVlc3QgZmFpbGVkIGZvcgorCQkJCQkgKiByZW1vdGUgZGV2aWNlIHJlYXNvbnMsIGl0CisJCQkJCSAqIGdldHMgcmV0dXJuZWQgYXMKKwkJCQkJICogU0FTX1RBU0tfVU5ERUxJVkVSRUQgbmV4dAorCQkJCQkgKiB0aW1lIHRocm91Z2guCisJCQkJCSAqLworCQkJCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLAorCQkJCQkJU0FTX1RBU0tfQ09NUExFVEUsCisJCQkJCQlTQVNfUVVFVUVfRlVMTCk7CiAJCQkJfQogCQkJfQogCQl9Ci0JCWlmIChzdGF0dXMgIT0gU0NJX1NVQ0NFU1MgJiYgdGFnICE9IFNDSV9DT05UUk9MTEVSX0lOVkFMSURfSU9fVEFHKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOwotCQkJLyogY29tbWFuZCBuZXZlciBoaXQgdGhlIGRldmljZSwgc28ganVzdCBmcmVlCi0JCQkgKiB0aGUgdGNpIGFuZCBza2lwIHRoZSBzZXF1ZW5jZSBpbmNyZW1lbnQKLQkJCSAqLwotCQkJaXNjaV90Y2lfZnJlZShpaG9zdCwgSVNDSV9UQUdfVENJKHRhZykpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOwotCQl9Ci0JCWlzY2lfcHV0X2RldmljZShpZGV2KTsKIAl9CisKKwlpZiAoc3RhdHVzICE9IFNDSV9TVUNDRVNTICYmIHRhZyAhPSBTQ0lfQ09OVFJPTExFUl9JTlZBTElEX0lPX1RBRykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOworCQkvKiBjb21tYW5kIG5ldmVyIGhpdCB0aGUgZGV2aWNlLCBzbyBqdXN0IGZyZWUKKwkJICogdGhlIHRjaSBhbmQgc2tpcCB0aGUgc2VxdWVuY2UgaW5jcmVtZW50CisJCSAqLworCQlpc2NpX3RjaV9mcmVlKGlob3N0LCBJU0NJX1RBR19UQ0kodGFnKSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlob3N0LT5zY2ljX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlpc2NpX3B1dF9kZXZpY2UoaWRldik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NpL3Rhc2suaCBiL2RyaXZlcnMvc2NzaS9pc2NpL3Rhc2suaAppbmRleCA5YzA2Y2JhLi44ZjQ1MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjaS90YXNrLmgKKysrIGIvZHJpdmVycy9zY3NpL2lzY2kvdGFzay5oCkBAIC0xMzEsNyArMTMxLDYgQEAKIAogaW50IGlzY2lfdGFza19leGVjdXRlX3Rhc2soCiAJc3RydWN0IHNhc190YXNrICp0YXNrLAotCWludCBudW0sCiAJZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIAogaW50IGlzY2lfdGFza19hYm9ydF90YXNrKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDQyN2FmMGYuLjBiOGFmMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTk1Miw3ICs5NTIsNyBAQAogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSAiaVNDU0kgSW5pdGlhdG9yIG92ZXIgVENQL0lQIiwKIAkucXVldWVjb21tYW5kICAgICAgICAgICA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IElTQ1NJX0RFRl9YTUlUX0NNRFNfTUFYIC0gMSwKIAkuc2dfdGFibGVzaXplCQk9IDQwOTYsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKQEAgLTk2Niw2ICs5NjYsNyBAQAogCS50YXJnZXRfYWxsb2MJCT0gaXNjc2lfdGFyZ2V0X2FsbG9jLAogCS5wcm9jX25hbWUJCT0gImlzY3NpX3RjcCIsCiAJLnRoaXNfaWQJCT0gLTEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGlzY3NpX3N3X3RjcF90cmFuc3BvcnQgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggMWQ3ZTc2ZS4uYzY3OTU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwpAQCAtMjE2MCw2MiArMjE2MCwxMiBAQAogCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQogCQlyZXR1cm4gLUVOWElPOwogCi0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIEZDX0ZDUF9ERkxUX1FVRVVFX0RFUFRIKTsKLQllbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLAotCQkJCQlGQ19GQ1BfREZMVF9RVUVVRV9ERVBUSCk7Ci0KKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBGQ19GQ1BfREZMVF9RVUVVRV9ERVBUSCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX3NsYXZlX2FsbG9jKTsKIAogLyoqCi0gKiBmY19jaGFuZ2VfcXVldWVfZGVwdGgoKSAtIENoYW5nZSBhIGRldmljZSdzIHF1ZXVlIGRlcHRoCi0gKiBAc2RldjogICBUaGUgU0NTSSBkZXZpY2Ugd2hvc2UgcXVldWUgZGVwdGggaXMgdG8gY2hhbmdlCi0gKiBAcWRlcHRoOiBUaGUgbmV3IHF1ZXVlIGRlcHRoCi0gKiBAcmVhc29uOiBUaGUgcmVzYXNvbiBmb3IgdGhlIGNoYW5nZQotICovCi1pbnQgZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpOwotCQlicmVhazsKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLUVYUE9SVF9TWU1CT0woZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKTsKLQotLyoqCi0gKiBmY19jaGFuZ2VfcXVldWVfdHlwZSgpIC0gQ2hhbmdlIGEgZGV2aWNlJ3MgcXVldWUgdHlwZQotICogQHNkZXY6ICAgICBUaGUgU0NTSSBkZXZpY2Ugd2hvc2UgcXVldWUgZGVwdGggaXMgdG8gY2hhbmdlCi0gKiBAdGFnX3R5cGU6IElkZW50aWZpZXIgZm9yIHF1ZXVlIHR5cGUKLSAqLwotaW50IGZjX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ190eXBlKQotewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIHRhZ190eXBlKTsKLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOwotfQotRVhQT1JUX1NZTUJPTChmY19jaGFuZ2VfcXVldWVfdHlwZSk7Ci0KLS8qKgogICogZmNfZmNwX2Rlc3RvcnkoKSAtIFRlYXIgZG93biB0aGUgRkNQIGxheWVyIGZvciBhIGdpdmVuIGxvY2FsIHBvcnQKICAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgdGhhdCBubyBsb25nZXIgbmVlZHMgdGhlIEZDUCBsYXllcgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IDBkOGJjNmMuLjgwNTNmMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC0xNzcxLDI1ICsxNzcxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3F1ZXVlY29tbWFuZCk7CiAKLWludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgsIGludCByZWFzb24pCi17Ci0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgpOwotCiBpbnQgaXNjc2lfdGFyZ2V0X2FsbG9jKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uID0gc3RhcmdldF90b19zZXNzaW9uKHN0YXJnZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYwppbmRleCA3NjYwOThhLi41Nzc3NzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYwpAQCAtMTcxLDcgKzE3MSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCiBxY19hbHJlYWR5X2dvbmU6Ci0JbGlzdF9kZWxfaW5pdCgmdGFzay0+bGlzdCk7CiAJc2FzX2ZyZWVfdGFzayh0YXNrKTsKIH0KIApAQCAtMjQ0LDEyICsyNDMsNyBAQAogCWlmIChxYy0+c2NzaWNtZCkKIAkJQVNTSUdOX1NBU19UQVNLKHFjLT5zY3NpY21kLCB0YXNrKTsKIAotCWlmIChzYXNfaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtIDwgMikKLQkJcmV0ID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCAxLCBHRlBfQVRPTUlDKTsKLQllbHNlCi0JCXJldCA9IHNhc19xdWV1ZV91cCh0YXNrKTsKLQotCS8qIEV4YW1pbmUgKi8KKwlyZXQgPSBpLT5kZnQtPmxsZGRfZXhlY3V0ZV90YXNrKHRhc2ssIEdGUF9BVE9NSUMpOwogCWlmIChyZXQpIHsKIAkJU0FTX0RQUklOVEsoImxsZGRfZXhlY3V0ZV90YXNrIHJldHVybmVkOiAlZFxuIiwgcmV0KTsKIApAQCAtNDg1LDcgKzQ3OSw2IEBACiAKIAlyZXR1cm47CiAgb3V0OgotCWxpc3RfZGVsX2luaXQoJnRhc2stPmxpc3QpOwogCXNhc19mcmVlX3Rhc2sodGFzayk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCmluZGV4IDBjYWM3ZDguLjAyMmJiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYwpAQCAtOTYsNyArOTYsNyBAQAogCQl0YXNrLT5zbG93X3Rhc2stPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgU01QX1RJTUVPVVQqSFo7CiAJCWFkZF90aW1lcigmdGFzay0+c2xvd190YXNrLT50aW1lcik7CiAKLQkJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCAxLCBHRlBfS0VSTkVMKTsKKwkJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAocmVzKSB7CiAJCQlkZWxfdGltZXIoJnRhc2stPnNsb3dfdGFzay0+dGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jCmluZGV4IGRiYzhhNzkuLjM2MmRhNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2sgPSBrbWVtX2NhY2hlX3phbGxvYyhzYXNfdGFza19jYWNoZSwgZmxhZ3MpOwogCiAJaWYgKHRhc2spIHsKLQkJSU5JVF9MSVNUX0hFQUQoJnRhc2stPmxpc3QpOwogCQlzcGluX2xvY2tfaW5pdCgmdGFzay0+dGFza19zdGF0ZV9sb2NrKTsKIAkJdGFzay0+dGFza19zdGF0ZV9mbGFncyA9IFNBU19UQVNLX1NUQVRFX1BFTkRJTkc7CiAJfQpAQCAtNzcsNyArNzYsNiBAQAogdm9pZCBzYXNfZnJlZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaykKIHsKIAlpZiAodGFzaykgewotCQlCVUdfT04oIWxpc3RfZW1wdHkoJnRhc2stPmxpc3QpKTsKIAkJa2ZyZWUodGFzay0+c2xvd190YXNrKTsKIAkJa21lbV9jYWNoZV9mcmVlKHNhc190YXNrX2NhY2hlLCB0YXNrKTsKIAl9CkBAIC0xMjcsMTEgKzEyNSw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNhc19oYS0+cGh5X3BvcnRfbG9jayk7CiAJc2FzX2hhc2hfYWRkcihzYXNfaGEtPmhhc2hlZF9zYXNfYWRkciwgc2FzX2hhLT5zYXNfYWRkcik7CiAKLQlpZiAoc2FzX2hhLT5sbGRkX3F1ZXVlX3NpemUgPT0gMCkKLQkJc2FzX2hhLT5sbGRkX3F1ZXVlX3NpemUgPSAxOwotCWVsc2UgaWYgKHNhc19oYS0+bGxkZF9xdWV1ZV9zaXplID09IC0xKQotCQlzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZSA9IDEyODsgLyogU2FuaXR5ICovCi0KIAlzZXRfYml0KFNBU19IQV9SRUdJU1RFUkVELCAmc2FzX2hhLT5zdGF0ZSk7CiAJc3Bpbl9sb2NrX2luaXQoJnNhc19oYS0+bG9jayk7CiAJbXV0ZXhfaW5pdCgmc2FzX2hhLT5kcmFpbl9tdXRleCk7CkBAIC0xNTcsMTUgKzE1MCw2IEBACiAJCWdvdG8gVW5kb19wb3J0czsKIAl9CiAKLQlpZiAoc2FzX2hhLT5sbGRkX21heF9leGVjdXRlX251bSA+IDEpIHsKLQkJZXJyb3IgPSBzYXNfaW5pdF9xdWV1ZShzYXNfaGEpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiY291bGRuJ3Qgc3RhcnQgcXVldWUgdGhyZWFkOiVkLCAiCi0JCQkgICAgICAgInJ1bm5pbmcgaW4gZGlyZWN0IG1vZGVcbiIsIGVycm9yKTsKLQkJCXNhc19oYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPSAxOwotCQl9Ci0JfQotCiAJSU5JVF9MSVNUX0hFQUQoJnNhc19oYS0+ZWhfZG9uZV9xKTsKIAlJTklUX0xJU1RfSEVBRCgmc2FzX2hhLT5laF9hdGFfcSk7CiAKQEAgLTIwMSwxMSArMTg1LDYgQEAKIAlfX3Nhc19kcmFpbl93b3JrKHNhc19oYSk7CiAJbXV0ZXhfdW5sb2NrKCZzYXNfaGEtPmRyYWluX211dGV4KTsKIAotCWlmIChzYXNfaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID4gMSkgewotCQlzYXNfc2h1dGRvd25fcXVldWUoc2FzX2hhKTsKLQkJc2FzX2hhLT5sbGRkX21heF9leGVjdXRlX251bSA9IDE7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmggYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbnRlcm5hbC5oCmluZGV4IDdlN2JhODMuLjljZjBiYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW50ZXJuYWwuaApAQCAtNjYsOSArNjYsNyBAQAogCiBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gc2FzX3Njc2lfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKLWludCAgc2FzX2luaXRfcXVldWUoc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSk7CiBpbnQgIHNhc19pbml0X2V2ZW50cyhzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKTsKLXZvaWQgc2FzX3NodXRkb3duX3F1ZXVlKHN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEpOwogdm9pZCBzYXNfZGlzYWJsZV9yZXZhbGlkYXRpb24oc3RydWN0IHNhc19oYV9zdHJ1Y3QgKmhhKTsKIHZvaWQgc2FzX2VuYWJsZV9yZXZhbGlkYXRpb24oc3RydWN0IHNhc19oYV9zdHJ1Y3QgKmhhKTsKIHZvaWQgX19zYXNfZHJhaW5fd29yayhzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqaGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwppbmRleCAyNGU0NzdkLi43MjkxOGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwpAQCAtMTEyLDcgKzExMiw2IEBACiAKIAlzYy0+cmVzdWx0ID0gKGhzIDw8IDE2KSB8IHN0YXQ7CiAJQVNTSUdOX1NBU19UQVNLKHNjLCBOVUxMKTsKLQlsaXN0X2RlbF9pbml0KCZ0YXNrLT5saXN0KTsKIAlzYXNfZnJlZV90YXNrKHRhc2spOwogfQogCkBAIC0xMzgsNyArMTM3LDYgQEAKIAogCWlmICh1bmxpa2VseSghc2MpKSB7CiAJCVNBU19EUFJJTlRLKCJ0YXNrX2RvbmUgY2FsbGVkIHdpdGggbm9uIGV4aXN0aW5nIFNDU0kgY21uZCFcbiIpOwotCQlsaXN0X2RlbF9pbml0KCZ0YXNrLT5saXN0KTsKIAkJc2FzX2ZyZWVfdGFzayh0YXNrKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE3OSwzMSArMTc3LDEwIEBACiAJcmV0dXJuIHRhc2s7CiB9CiAKLWludCBzYXNfcXVldWVfdXAoc3RydWN0IHNhc190YXNrICp0YXNrKQotewotCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSB0YXNrLT5kZXYtPnBvcnQtPmhhOwotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKGxpc3QpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmUtPnRhc2tfcXVldWVfbG9jaywgZmxhZ3MpOwotCWlmIChzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZSA8IGNvcmUtPnRhc2tfcXVldWVfc2l6ZSArIDEpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZS0+dGFza19xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtU0FTX1FVRVVFX0ZVTEw7Ci0JfQotCWxpc3RfYWRkX3RhaWwoJnRhc2stPmxpc3QsICZjb3JlLT50YXNrX3F1ZXVlKTsKLQljb3JlLT50YXNrX3F1ZXVlX3NpemUgKz0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQl3YWtlX3VwX3Byb2Nlc3MoY29yZS0+cXVldWVfdGhyZWFkKTsKLQotCXJldHVybiAwOwotfQotCiBpbnQgc2FzX3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHNhc19pbnRlcm5hbCAqaSA9IHRvX3Nhc19pbnRlcm5hbChob3N0LT50cmFuc3BvcnR0KTsKIAlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gY21kX3RvX2RvbWFpbl9kZXYoY21kKTsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gZGV2LT5wb3J0LT5oYTsKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2s7CiAJaW50IHJlcyA9IDA7CiAKQEAgLTIyNCwxMiArMjAxLDcgQEAKIAlpZiAoIXRhc2spCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCi0JLyogUXVldWUgdXAsIERpcmVjdCBNb2RlIG9yIFRhc2sgQ29sbGVjdG9yIE1vZGUuICovCi0JaWYgKHNhc19oYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPCAyKQotCQlyZXMgPSBpLT5kZnQtPmxsZGRfZXhlY3V0ZV90YXNrKHRhc2ssIDEsIEdGUF9BVE9NSUMpOwotCWVsc2UKLQkJcmVzID0gc2FzX3F1ZXVlX3VwKHRhc2spOwotCisJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzKQogCQlnb3RvIG91dF9mcmVlX3Rhc2s7CiAJcmV0dXJuIDA7CkBAIC0zMjMsMzcgKzI5NSwxNyBAQAogCVRBU0tfSVNfRE9ORSwKIAlUQVNLX0lTX0FCT1JURUQsCiAJVEFTS19JU19BVF9MVSwKLQlUQVNLX0lTX05PVF9BVF9IQSwKIAlUQVNLX0lTX05PVF9BVF9MVSwKIAlUQVNLX0FCT1JUX0ZBSUxFRCwKIH07CiAKIHN0YXRpYyBlbnVtIHRhc2tfZGlzcG9zaXRpb24gc2FzX3Njc2lfZmluZF90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqaGEgPSB0YXNrLT5kZXYtPnBvcnQtPmhhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIHJlczsKIAlzdHJ1Y3Qgc2FzX2ludGVybmFsICpzaSA9CiAJCXRvX3Nhc19pbnRlcm5hbCh0YXNrLT5kZXYtPnBvcnQtPmhhLT5jb3JlLnNob3N0LT50cmFuc3BvcnR0KTsKIAotCWlmIChoYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPiAxKSB7Ci0JCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmaGEtPmNvcmU7Ci0JCXN0cnVjdCBzYXNfdGFzayAqdCwgKm47Ci0KLQkJbXV0ZXhfbG9jaygmY29yZS0+dGFza19xdWV1ZV9mbHVzaCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHQsIG4sICZjb3JlLT50YXNrX3F1ZXVlLCBsaXN0KQotCQkJaWYgKHRhc2sgPT0gdCkgewotCQkJCWxpc3RfZGVsX2luaXQoJnQtPmxpc3QpOwotCQkJCWJyZWFrOwotCQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJbXV0ZXhfdW5sb2NrKCZjb3JlLT50YXNrX3F1ZXVlX2ZsdXNoKTsKLQotCQlpZiAodGFzayA9PSB0KQotCQkJcmV0dXJuIFRBU0tfSVNfTk9UX0FUX0hBOwotCX0KLQogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJU0FTX0RQUklOVEsoIiVzOiBhYm9ydGluZyB0YXNrIDB4JXBcbiIsIF9fZnVuY19fLCB0YXNrKTsKIAkJcmVzID0gc2ktPmRmdC0+bGxkZF9hYm9ydF90YXNrKHRhc2spOwpAQCAtNjY3LDE0ICs2MTksNiBAQAogCQljbWQtPmVoX2VmbGFncyA9IDA7CiAKIAkJc3dpdGNoIChyZXMpIHsKLQkJY2FzZSBUQVNLX0lTX05PVF9BVF9IQToKLQkJCVNBU19EUFJJTlRLKCIlczogdGFzayAweCVwIGlzIG5vdCBhdCBoYTogJXNcbiIsCi0JCQkJICAgIF9fZnVuY19fLCB0YXNrLAotCQkJCSAgICBjbWQtPnJldHJpZXMgPyAicmV0cnkiIDogImFib3J0ZWQiKTsKLQkJCWlmIChjbWQtPnJldHJpZXMpCi0JCQkJY21kLT5yZXRyaWVzLS07Ci0JCQlzYXNfZWhfZmluaXNoX2NtZChjbWQpOwotCQkJY29udGludWU7CiAJCWNhc2UgVEFTS19JU19ET05FOgogCQkJU0FTX0RQUklOVEsoIiVzOiB0YXNrIDB4JXAgaXMgZG9uZVxuIiwgX19mdW5jX18sCiAJCQkJICAgIHRhc2spOwpAQCAtODM2LDkgKzc4MCw2IEBACiAJCXNjc2lfZWhfcmVhZHlfZGV2cyhzaG9zdCwgJmVoX3dvcmtfcSwgJmhhLT5laF9kb25lX3EpOwogCiBvdXQ6Ci0JaWYgKGhhLT5sbGRkX21heF9leGVjdXRlX251bSA+IDEpCi0JCXdha2VfdXBfcHJvY2VzcyhoYS0+Y29yZS5xdWV1ZV90aHJlYWQpOwotCiAJc2FzX2VoX2hhbmRsZV9yZXNldHMoc2hvc3QpOwogCiAJLyogbm93IGxpbmsgaW50byBsaWJhdGEgZWggLS0tIGlmIHdlIGhhdmUgYW55IGF0YSBkZXZpY2VzICovCkBAIC05NDAsMTUgKzg4MSwxMiBAQAogCXNhc19yZWFkX3BvcnRfbW9kZV9wYWdlKHNjc2lfZGV2KTsKIAogCWlmIChzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzY3NpX2RldiwgTVNHX1NJTVBMRV9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzY3NpX2RldiwgU0FTX0RFRl9RRCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBTQVNfREVGX1FEKTsKIAl9IGVsc2UgewogCQlTQVNfRFBSSU5USygiZGV2aWNlICVsbHgsIExVTiAlbGx4IGRvZXNuJ3Qgc3VwcG9ydCAiCiAJCQkgICAgIlRDUVxuIiwgU0FTX0FERFIoZGV2LT5zYXNfYWRkciksCiAJCQkgICAgc2NzaV9kZXYtPmx1bik7Ci0JCXNjc2lfZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMDsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2NzaV9kZXYsIDApOwotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNjc2lfZGV2LCAxKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2NzaV9kZXYsIDEpOwogCX0KIAogCXNjc2lfZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKQEAgLTk1Niw0NyArODk0LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoLCBpbnQgcmVhc29uKQoraW50IHNhc19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCiB7CiAJc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHNkZXZfdG9fZG9tYWluX2RldihzZGV2KTsKIAogCWlmIChkZXZfaXNfc2F0YShkZXYpKQotCQlyZXR1cm4gX19hdGFfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldi0+c2F0YV9kZXYuYXAsIHNkZXYsIGRlcHRoLAotCQkJCQkJcmVhc29uKTsKKwkJcmV0dXJuIF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYtPnNhdGFfZGV2LmFwLCBzZGV2LCBkZXB0aCk7CiAKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6Ci0JCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJCWRlcHRoID0gMTsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9RRlVMTDoKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIGRlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiBkZXB0aDsKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCWRlcHRoID0gMTsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgZGVwdGgpOwogfQogCi1pbnQgc2FzX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCBxdCkKK2ludCBzYXNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiwgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHNkZXZfdG9fZG9tYWluX2RldihzY3NpX2Rldik7Ci0KLQlpZiAoZGV2X2lzX3NhdGEoZGV2KSkKKwlpZiAoZGV2X2lzX3NhdGEoc2Rldl90b19kb21haW5fZGV2KHNjc2lfZGV2KSkpCiAJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJcmV0dXJuIDA7Ci0KLQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNjc2lfZGV2LCAxKTsKLQotCXNjc2lfc2V0X3RhZ190eXBlKHNjc2lfZGV2LCBxdCk7Ci0Jc2NzaV9hY3RpdmF0ZV90Y3Eoc2NzaV9kZXYsIHNjc2lfZGV2LT5xdWV1ZV9kZXB0aCk7Ci0KLQlyZXR1cm4gcXQ7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUoc2NzaV9kZXYsIHR5cGUpOwogfQogCiBpbnQgc2FzX2Jpb3NfcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiwKQEAgLTEwMTEsMTIxICs5MjUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tIFRhc2sgQ29sbGVjdG9yIFRocmVhZCBpbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkIHNhc19xdWV1ZShzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKQotewotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKHEpOwotCWludCBjYW5fcXVldWU7Ci0JaW50IHJlczsKLQlzdHJ1Y3Qgc2FzX2ludGVybmFsICppID0gdG9fc2FzX2ludGVybmFsKGNvcmUtPnNob3N0LT50cmFuc3BvcnR0KTsKLQotCW11dGV4X2xvY2soJmNvcmUtPnRhc2tfcXVldWVfZmx1c2gpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJgotCSAgICAgICAhbGlzdF9lbXB0eSgmY29yZS0+dGFza19xdWV1ZSkgJiYKLQkgICAgICAgIXRlc3RfYml0KFNBU19IQV9GUk9aRU4sICZzYXNfaGEtPnN0YXRlKSkgewotCi0JCWNhbl9xdWV1ZSA9IHNhc19oYS0+bGxkZF9xdWV1ZV9zaXplIC0gY29yZS0+dGFza19xdWV1ZV9zaXplOwotCQlpZiAoY2FuX3F1ZXVlID49IDApIHsKLQkJCWNhbl9xdWV1ZSA9IGNvcmUtPnRhc2tfcXVldWVfc2l6ZTsKLQkJCWxpc3Rfc3BsaWNlX2luaXQoJmNvcmUtPnRhc2tfcXVldWUsICZxKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBsaXN0X2hlYWQgKmEsICpuOwotCi0JCQljYW5fcXVldWUgPSBzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZTsKLQkJCWxpc3RfZm9yX2VhY2hfc2FmZShhLCBuLCAmY29yZS0+dGFza19xdWV1ZSkgewotCQkJCWxpc3RfbW92ZV90YWlsKGEsICZxKTsKLQkJCQlpZiAoLS1jYW5fcXVldWUgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYW5fcXVldWUgPSBzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZTsKLQkJfQotCQljb3JlLT50YXNrX3F1ZXVlX3NpemUgLT0gY2FuX3F1ZXVlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJewotCQkJc3RydWN0IHNhc190YXNrICp0YXNrID0gbGlzdF9lbnRyeShxLm5leHQsCi0JCQkJCQkJICAgc3RydWN0IHNhc190YXNrLAotCQkJCQkJCSAgIGxpc3QpOwotCQkJbGlzdF9kZWxfaW5pdCgmcSk7Ci0JCQlyZXMgPSBpLT5kZnQtPmxsZGRfZXhlY3V0ZV90YXNrKHRhc2ssIGNhbl9xdWV1ZSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmICh1bmxpa2VseShyZXMpKQotCQkJCV9fbGlzdF9hZGQoJnEsIHRhc2stPmxpc3QucHJldiwgJnRhc2stPmxpc3QpOwotCQl9Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHJlcykgewotCQkJbGlzdF9zcGxpY2VfaW5pdCgmcSwgJmNvcmUtPnRhc2tfcXVldWUpOyAvKmF0IGhlYWQqLwotCQkJY29yZS0+dGFza19xdWV1ZV9zaXplICs9IGNhbl9xdWV1ZTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmNvcmUtPnRhc2tfcXVldWVfZmx1c2gpOwotfQotCi0vKioKLSAqIHNhc19xdWV1ZV90aHJlYWQgLS0gVGhlIFRhc2sgQ29sbGVjdG9yIHRocmVhZAotICogQF9zYXNfaGE6IHBvaW50ZXIgdG8gc3RydWN0IHNhc19oYQotICovCi1zdGF0aWMgaW50IHNhc19xdWV1ZV90aHJlYWQodm9pZCAqX3Nhc19oYSkKLXsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gX3Nhc19oYTsKLQotCXdoaWxlICgxKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXNhc19xdWV1ZShzYXNfaGEpOwotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBzYXNfaW5pdF9xdWV1ZShzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKQotewotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmNvcmUtPnRhc2tfcXVldWVfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmY29yZS0+dGFza19xdWV1ZV9mbHVzaCk7Ci0JY29yZS0+dGFza19xdWV1ZV9zaXplID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmY29yZS0+dGFza19xdWV1ZSk7Ci0KLQljb3JlLT5xdWV1ZV90aHJlYWQgPSBrdGhyZWFkX3J1bihzYXNfcXVldWVfdGhyZWFkLCBzYXNfaGEsCi0JCQkJCSAic2FzX3F1ZXVlXyVkIiwgY29yZS0+c2hvc3QtPmhvc3Rfbm8pOwotCWlmIChJU19FUlIoY29yZS0+cXVldWVfdGhyZWFkKSkKLQkJcmV0dXJuIFBUUl9FUlIoY29yZS0+cXVldWVfdGhyZWFkKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBzYXNfc2h1dGRvd25fcXVldWUoc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCXN0cnVjdCBzYXNfdGFzayAqdGFzaywgKm47Ci0KLQlrdGhyZWFkX3N0b3AoY29yZS0+cXVldWVfdGhyZWFkKTsKLQotCWlmICghbGlzdF9lbXB0eSgmY29yZS0+dGFza19xdWV1ZSkpCi0JCVNBU19EUFJJTlRLKCJIQTogJWxseDogc2NzaSBjb3JlIHRhc2sgcXVldWUgaXMgTk9UIGVtcHR5IT9cbiIsCi0JCQkgICAgU0FTX0FERFIoc2FzX2hhLT5zYXNfYWRkcikpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmUtPnRhc2tfcXVldWVfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YXNrLCBuLCAmY29yZS0+dGFza19xdWV1ZSwgbGlzdCkgewotCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSB0YXNrLT51bGRkX3Rhc2s7Ci0KLQkJbGlzdF9kZWxfaW5pdCgmdGFzay0+bGlzdCk7Ci0KLQkJQVNTSUdOX1NBU19UQVNLKGNtZCwgTlVMTCk7Ci0JCXNhc19mcmVlX3Rhc2sodGFzayk7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLX0KLQogLyoKICAqIFRlbGwgYW4gdXBwZXIgbGF5ZXIgdGhhdCBpdCBuZWVkcyB0byBpbml0aWF0ZSBhbiBhYm9ydCBmb3IgYSBnaXZlbiB0YXNrLgogICogVGhpcyBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBieSBhbiBMTERELgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCBiOTkzOTlmLi5mZDg1OTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtMjQzLDEyOCArMjQzLDYgQEAKIH0KIAogLyoqCi0gKiBscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudCAtIFBvc3RzIGEgcXVldWVkZXB0aCBjaGFuZ2UgZXZlbnQKLSAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KLSAqIEB2cG9ydDogUG9pbnRlciB0byB2cG9ydCBvYmplY3QuCi0gKiBAbmRscDogUG9pbnRlciB0byBGQyBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0LgotICogQGx1bjogTHVuIG51bWJlciBvZiB0aGUgc2NzaSBkZXZpY2UuCi0gKiBAb2xkX3ZhbDogT2xkIHZhbHVlIG9mIHRoZSBxdWV1ZSBkZXB0aC4KLSAqIEBuZXdfdmFsOiBOZXcgdmFsdWUgb2YgdGhlIHF1ZXVlIGRlcHRoLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnQgdG8gdGhlIG1nbXQgYXBwbGljYXRpb24gaW5kaWNhdGluZwotICogdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoLgotICoqLwotc3RhdGljIHZvaWQKLWxwZmNfc2VuZF9zZGV2X3F1ZXVlZGVwdGhfY2hhbmdlX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKLQkJc3RydWN0IGxwZmNfdnBvcnQgICp2cG9ydCwKLQkJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCi0JCXVpbnQ2NF90IGx1biwKLQkJdWludDMyX3Qgb2xkX3ZhbCwKLQkJdWludDMyX3QgbmV3X3ZhbCkKLXsKLQlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmZhc3RfcGF0aF9ldnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWZhc3RfcGF0aF9ldnQgPSBscGZjX2FsbG9jX2Zhc3RfZXZ0KHBoYmEpOwotCWlmICghZmFzdF9wYXRoX2V2dCkKLQkJcmV0dXJuOwotCi0JZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQuZXZlbnRfdHlwZSA9Ci0JCUZDX1JFR19TQ1NJX0VWRU5UOwotCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50LnN1YmNhdGVnb3J5ID0KLQkJTFBGQ19FVkVOVF9WQVJRVUVERVBUSDsKLQotCS8qIFJlcG9ydCBhbGwgbHVucyB3aXRoIGNoYW5nZSBpbiBxdWV1ZSBkZXB0aCAqLwotCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50Lmx1biA9IGx1bjsKLQlpZiAobmRscCAmJiBOTFBfQ0hLX05PREVfQUNUKG5kbHApKSB7Ci0JCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQud3dwbiwKLQkJCSZuZGxwLT5ubHBfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7Ci0JCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQud3dubiwKLQkJCSZuZGxwLT5ubHBfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7Ci0JfQotCi0JZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0Lm9sZHZhbCA9IG9sZF92YWw7Ci0JZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0Lm5ld3ZhbCA9IG5ld192YWw7Ci0JZmFzdF9wYXRoX2V2dC0+dnBvcnQgPSB2cG9ydDsKLQotCWZhc3RfcGF0aF9ldnQtPndvcmtfZXZ0LmV2dCA9IExQRkNfRVZUX0ZBU1RQQVRIX01HTVRfRVZUOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmZmFzdF9wYXRoX2V2dC0+d29ya19ldnQuZXZ0X2xpc3RwLCAmcGhiYS0+d29ya19saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKLQotCXJldHVybjsKLX0KLQotLyoqCi0gKiBscGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIEFsdGVyIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoCi0gKiBAc2RldjogUG9pbnRlciB0aGUgc2NzaSBkZXZpY2Ugb24gd2hpY2ggdG8gY2hhbmdlIHRoZSBxdWV1ZSBkZXB0aC4KLSAqIEBxZGVwdGg6IE5ldyBxdWV1ZSBkZXB0aCB0byBzZXQgdGhlIHNkZXYgdG8uCi0gKiBAcmVhc29uOiBUaGUgcmVhc29uIGZvciB0aGUgcXVldWUgZGVwdGggY2hhbmdlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBtaWRsYXllciBhbmQgdGhlIExMRCB0byBhbHRlciB0aGUgcXVldWUKLSAqIGRlcHRoIGZvciBhIHNjc2kgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHF1ZXVlIGRlcHRoIHRvIHRoZSBuZXcKLSAqIHZhbHVlIGFuZCBzZW5kcyBhbiBldmVudCBvdXQgdG8gbG9nIHRoZSBxdWV1ZSBkZXB0aCBjaGFuZ2UuCi0gKiovCi1zdGF0aWMgaW50Ci1scGZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsIGludCByZWFzb24pCi17Ci0Jc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNkZXYtPmhvc3QtPmhvc3RkYXRhOwotCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7Ci0Jc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBuZXdfcXVldWVfZGVwdGgsIG9sZF9xdWV1ZV9kZXB0aDsKLQotCW9sZF9xdWV1ZV9kZXB0aCA9IHNkZXYtPnF1ZXVlX2RlcHRoOwotCi0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCS8qIGNoYW5nZSByZXF1ZXN0IGZyb20gc3lzZnMsIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCWlmIChzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKSA9PSAwKQotCQkJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotCi0JCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fV0FSTklORywgTE9HX0ZDUCwKLQkJCQkgIjA3MTEgZGV0ZWN0ZWQgcXVldWUgZnVsbCAtIGx1biBxdWV1ZSAiCi0JCQkJICJkZXB0aCBhZGp1c3RlZCB0byAlZC5cbiIsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCW5ld19xdWV1ZV9kZXB0aCA9IHNkZXYtPnF1ZXVlX2RlcHRoOwotCXJkYXRhID0gbHBmY19ycG9ydF9kYXRhX2Zyb21fc2NzaV9kZXZpY2Uoc2Rldik7Ci0JaWYgKHJkYXRhKQotCQlscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudChwaGJhLCB2cG9ydCwKLQkJCQkJCSAgICAgICByZGF0YS0+cG5vZGUsIHNkZXYtPmx1biwKLQkJCQkJCSAgICAgICBvbGRfcXVldWVfZGVwdGgsCi0JCQkJCQkgICAgICAgbmV3X3F1ZXVlX2RlcHRoKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KLS8qKgotICogbHBmY19jaGFuZ2VfcXVldWVfdHlwZSgpIC0gQ2hhbmdlIGEgZGV2aWNlJ3Mgc2NzaSB0YWcgcXVldWluZyB0eXBlCi0gKiBAc2RldjogUG9pbnRlciB0aGUgc2NzaSBkZXZpY2Ugd2hvc2UgcXVldWUgZGVwdGggaXMgdG8gY2hhbmdlCi0gKiBAdGFnX3R5cGU6IElkZW50aWZpZXIgZm9yIHF1ZXVlIHRhZyB0eXBlCi0gKi8KLXN0YXRpYyBpbnQKLWxwZmNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnX3R5cGUpCi17Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOwotCQlpZiAodGFnX3R5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQl0YWdfdHlwZSA9IDA7Ci0KLQlyZXR1cm4gdGFnX3R5cGU7Ci19Ci0KLS8qKgogICogbHBmY19yYW1wZG93bl9xdWV1ZV9kZXB0aCAtIFBvc3QgUkFNUF9ET1dOX1FVRVVFIGV2ZW50IHRvIHdvcmtlciB0aHJlYWQKICAqIEBwaGJhOiBUaGUgSGJhIGZvciB3aGljaCB0aGlzIGNhbGwgaXMgYmVpbmcgZXhlY3V0ZWQuCiAgKgpAQCAtNDQ5LDggKzMyNyw3IEBACiAJCQkJZWxzZQogCQkJCQluZXdfcXVldWVfZGVwdGggPSBzZGV2LT5xdWV1ZV9kZXB0aCAtCiAJCQkJCQkJCW5ld19xdWV1ZV9kZXB0aDsKLQkJCQlscGZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBuZXdfcXVldWVfZGVwdGgsCi0JCQkJCQkJU0NTSV9RREVQVEhfREVGQVVMVCk7CisJCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgbmV3X3F1ZXVlX2RlcHRoKTsKIAkJCX0KIAkJfQogCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CkBAIC00Mjg2LDcgKzQxNjMsNiBAQAogCUlPQ0JfdCAqaW9jYl9jbWQgPSAmbHBmY19jbWQtPmN1cl9pb2NicS5pb2NiOwogCXN0cnVjdCBscGZjX2lvY2JxICpwaW9jYnEgPSAmKGxwZmNfY21kLT5jdXJfaW9jYnEpOwogCWludCBkYXRhZGlyID0gc2NzaV9jbW5kLT5zY19kYXRhX2RpcmVjdGlvbjsKLQljaGFyIHRhZ1syXTsKIAl1aW50OF90ICpwdHI7CiAJYm9vbCBzbGk0OwogCXVpbnQzMl90IGZjcGRsOwpAQCAtNDMwOCwyMCArNDE4NCw3IEBACiAJCW1lbXNldChwdHIsIDAsIChMUEZDX0ZDUF9DREJfTEVOIC0gc2NzaV9jbW5kLT5jbWRfbGVuKSk7CiAJfQogCi0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY3NpX2NtbmQsIHRhZykpIHsKLQkJc3dpdGNoICh0YWdbMF0pIHsKLQkJY2FzZSBIRUFEX09GX1FVRVVFX1RBRzoKLQkJCWZjcF9jbW5kLT5mY3BDbnRsMSA9IEhFQURfT0ZfUTsKLQkJCWJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJZmNwX2NtbmQtPmZjcENudGwxID0gT1JERVJFRF9ROwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlmY3BfY21uZC0+ZmNwQ250bDEgPSBTSU1QTEVfUTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlCi0JCWZjcF9jbW5kLT5mY3BDbnRsMSA9IFNJTVBMRV9ROworCWZjcF9jbW5kLT5mY3BDbnRsMSA9IFNJTVBMRV9ROwogCiAJc2xpNCA9IChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpOwogCXBpb2NicS0+aW9jYi51bi5mY3BpLmZjcGlfWFJkeSA9IDA7CkBAIC01NjMyLDEwICs1NDk1LDcgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2Rldi0+aG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCB2cG9ydC0+Y2ZnX2x1bl9xdWV1ZV9kZXB0aCk7Ci0JZWxzZQotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHZwb3J0LT5jZmdfbHVuX3F1ZXVlX2RlcHRoKTsKKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCB2cG9ydC0+Y2ZnX2x1bl9xdWV1ZV9kZXB0aCk7CiAKIAlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBFTkFCTEVfRkNQX1JJTkdfUE9MTElORykgewogCQlscGZjX3NsaV9oYW5kbGVfZmFzdF9yaW5nX2V2ZW50KHBoYmEsCkBAIC02MDE4LDggKzU4NzgsMTAgQEAKIAkuc2hvc3RfYXR0cnMJCT0gbHBmY19oYmFfYXR0cnMsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKIAkudmVuZG9yX2lkCQk9IExQRkNfTkxfVkVORE9SX0lELAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBscGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBscGZjX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBscGZjX3Zwb3J0X3RlbXBsYXRlID0gewpAQCAtNjA0MSw2ICs1OTAzLDggQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQk9IGxwZmNfdnBvcnRfYXR0cnMsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gbHBmY19jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCT0gbHBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWFjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCmluZGV4IDZhMDM5ZWIuLjk1M2ZkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCkBAIC05LDY5ICs5LDYyIEBACiAgKiBHZW5lcmljIEdlbmVyaWMgTkNSNTM4MCBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgMTk5NSwgUnVzc2VsbCBLaW5nCi0gKgotICogQUxQSEEgUkVMRUFTRSAxLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAorI2luY2x1ZGUgPGFzbS9od3Rlc3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KLSNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0jaW5jbHVkZSAibWFjX3Njc2kuaCIKIAotLyogVGhlc2UgY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBnZW5lcmljIDUzODAgY29yZSAqLwotI2RlZmluZSBBVVRPU0VOU0UKKy8qIERlZmluaXRpb25zIGZvciB0aGUgY29yZSBOQ1I1MzgwIGRyaXZlci4gKi8KKwogI2RlZmluZSBQU0VVRE9fRE1BCiAKKyNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMgICB1bnNpZ25lZCBjaGFyICpwZG1hX2Jhc2UKKyNkZWZpbmUgTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCkgICAgICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICpfaW5zdGFuY2UKKyNkZWZpbmUgTkNSNTM4MF9zZXR1cChpbnN0YW5jZSkgICAgICAgICBfaW5zdGFuY2UgPSBpbnN0YW5jZQorCisjZGVmaW5lIE5DUjUzODBfcmVhZChyZWcpICAgICAgICAgICAgICAgbWFjc2NzaV9yZWFkKF9pbnN0YW5jZSwgcmVnKQorI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpICAgICAgIG1hY3Njc2lfd3JpdGUoX2luc3RhbmNlLCByZWcsIHZhbHVlKQorCisjZGVmaW5lIE5DUjUzODBfcHJlYWQgICAgICAgICAgICAgICAgICAgbWFjc2NzaV9wcmVhZAorI2RlZmluZSBOQ1I1MzgwX3B3cml0ZSAgICAgICAgICAgICAgICAgIG1hY3Njc2lfcHdyaXRlCisKKyNkZWZpbmUgTkNSNTM4MF9pbnRyICAgICAgICAgICAgICAgICAgICBtYWNzY3NpX2ludHIKKyNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kICAgICAgICAgICBtYWNzY3NpX3F1ZXVlX2NvbW1hbmQKKyNkZWZpbmUgTkNSNTM4MF9hYm9ydCAgICAgICAgICAgICAgICAgICBtYWNzY3NpX2Fib3J0CisjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0ICAgICAgICAgICAgICAgbWFjc2NzaV9idXNfcmVzZXQKKyNkZWZpbmUgTkNSNTM4MF9pbmZvICAgICAgICAgICAgICAgICAgICBtYWNzY3NpX2luZm8KKyNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gICAgICAgICAgICAgICBtYWNzY3NpX3Nob3dfaW5mbworI2RlZmluZSBOQ1I1MzgwX3dyaXRlX2luZm8gICAgICAgICAgICAgIG1hY3Njc2lfd3JpdGVfaW5mbworCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogCiAjZGVmaW5lIFJFU0VUX0JPT1QKLSNkZWZpbmUgRFJJVkVSX1NFVFVQCiAKLWV4dGVybiB2b2lkIHZpYV9zY3NpX2NsZWFyKHZvaWQpOwotCi0jaWZkZWYgUkVTRVRfQk9PVAotc3RhdGljIHZvaWQgbWFjX3Njc2lfcmVzZXRfYm9vdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSk7Ci0jZW5kaWYKLQotc3RhdGljIGludCBzZXR1cF9jYWxsZWQgPSAwOwogc3RhdGljIGludCBzZXR1cF9jYW5fcXVldWUgPSAtMTsKK21vZHVsZV9wYXJhbShzZXR1cF9jYW5fcXVldWUsIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX2NtZF9wZXJfbHVuID0gLTE7Cittb2R1bGVfcGFyYW0oc2V0dXBfY21kX3Blcl9sdW4sIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX3NnX3RhYmxlc2l6ZSA9IC0xOworbW9kdWxlX3BhcmFtKHNldHVwX3NnX3RhYmxlc2l6ZSwgaW50LCAwKTsKIHN0YXRpYyBpbnQgc2V0dXBfdXNlX3BkbWEgPSAtMTsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKK21vZHVsZV9wYXJhbShzZXR1cF91c2VfcGRtYSwgaW50LCAwKTsKIHN0YXRpYyBpbnQgc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID0gLTE7Ci0jZW5kaWYKK21vZHVsZV9wYXJhbShzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcsIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX2hvc3RpZCA9IC0xOworbW9kdWxlX3BhcmFtKHNldHVwX2hvc3RpZCwgaW50LCAwKTsKIAogLyogVGltZSAoaW4gamlmZmllcykgdG8gd2FpdCBhZnRlciBhIHJlc2V0OyB0aGUgU0NTSSBzdGFuZGFyZCBjYWxscyBmb3IgMjUwbXMsCiAgKiB3ZSB1c3VhbGx5IGRvIDAuNXMgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4gQnV0IFRvc2hpYmEgQ0QtUk9NcyBvbmNlIG1vcmUKQEAgLTg0LDIzMiArNzcsNDggQEAKICNkZWZpbmUJQUZURVJfUkVTRVRfREVMQVkJKEhaLzIpCiAjZW5kaWYKIAotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1hY19zY3NpX3JlZ3AgPSBOVUxMOwotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1hY19zY3NpX2RycSAgPSBOVUxMOwotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1hY19zY3NpX25vZHJxID0gTlVMTDsKLQotCiAvKgogICogTkNSIDUzODAgcmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9ucwogICovCiAKLSNpZiAwCi0vKiBEZWJ1ZyB2ZXJzaW9ucyAqLwotI2RlZmluZSBDVFJMKHAsdikgKCpjdHJsID0gKHYpKQotCi1zdGF0aWMgY2hhciBtYWNzY3NpX3JlYWQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCByZWcpCitzdGF0aWMgaW5saW5lIGNoYXIgbWFjc2NzaV9yZWFkKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnKQogewotICBpbnQgaW9iYXNlID0gaW5zdGFuY2UtPmlvX3BvcnQ7Ci0gIGludCBpOwotICBpbnQgKmN0cmwgPSAmKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YSktPmN0cmw7Ci0KLSAgQ1RSTChpb2Jhc2UsIDApOwotICBpID0gaW5fOChpb2Jhc2UgKyAocmVnPDw0KSk7Ci0gIENUUkwoaW9iYXNlLCAweDQwKTsKLQotICByZXR1cm4gaTsKKwlyZXR1cm4gaW5fOChpbnN0YW5jZS0+YmFzZSArIChyZWcgPDwgNCkpOwogfQogCi1zdGF0aWMgdm9pZCBtYWNzY3NpX3dyaXRlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnLCBpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjc2NzaV93cml0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgaW50IHJlZywgaW50IHZhbHVlKQogewotICBpbnQgaW9iYXNlID0gaW5zdGFuY2UtPmlvX3BvcnQ7Ci0gIGludCAqY3RybCA9ICYoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopaW5zdGFuY2UtPmhvc3RkYXRhKS0+Y3RybDsKLQotICBDVFJMKGlvYmFzZSwgMCk7Ci0gIG91dF84KGlvYmFzZSArIChyZWc8PDQpLCB2YWx1ZSk7Ci0gIENUUkwoaW9iYXNlLCAweDQwKTsKLX0KLSNlbHNlCi0KLS8qIEZhc3QgdmVyc2lvbnMgKi8KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgbWFjc2NzaV9yZWFkKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnKQotewotICByZXR1cm4gaW5fOChpbnN0YW5jZS0+aW9fcG9ydCArIChyZWc8PDQpKTsKKwlvdXRfOChpbnN0YW5jZS0+YmFzZSArIChyZWcgPDwgNCksIHZhbHVlKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBtYWNzY3NpX3dyaXRlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnLCBpbnQgdmFsdWUpCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgbWFjX3Njc2lfc2V0dXAoY2hhciAqc3RyKQogewotICBvdXRfOChpbnN0YW5jZS0+aW9fcG9ydCArIChyZWc8PDQpLCB2YWx1ZSk7Ci19Ci0jZW5kaWYKLQotCi0vKgotICogRnVuY3Rpb24gOiBtYWNfc2NzaV9zZXR1cChjaGFyICpzdHIpCi0gKgotICogUHVycG9zZSA6IGJvb3RlciBjb21tYW5kIGxpbmUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG92ZXJyaWRlcyBhcnJheSwKLSAqCi0gKiBJbnB1dHMgOiBzdHIgLSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBvcHRpb25zCi0gKgotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IG1hY19zY3NpX3NldHVwKGNoYXIgKnN0cikgewotI2lmZGVmIERSSVZFUl9TRVRVUAkKIAlpbnQgaW50c1s3XTsKLQkKLQkodm9pZClnZXRfb3B0aW9ucyggc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKLQkKLQlpZiAoc2V0dXBfY2FsbGVkKysgfHwgaW50c1swXSA8IDEgfHwgaW50c1swXSA+IDYpIHsKLQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaTogPG1hYzUzODA+IgotCQkiIFVzYWdlOiBtYWM1MzgwPTxjYW5fcXVldWU+Wyw8Y21kX3Blcl9sdW4+LDxzZ190YWJsZXNpemU+LDxob3N0aWQ+LDx1c2VfdGFncz4sPHVzZV9wZG1hPl1cbiIpOwotCSAgICBwcmludGsoS0VSTl9BTEVSVCAic2NzaTogPG1hYzUzODA+IEJhZCBQZW5ndWluIHBhcmFtZXRlcnM/XG4iKTsKLQkgICAgcmV0dXJuIDA7CisKKwkodm9pZClnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOworCisJaWYgKGludHNbMF0gPCAxIHx8IGludHNbMF0gPiA2KSB7CisJCXByX2VycigiVXNhZ2U6IG1hYzUzODA9PGNhbl9xdWV1ZT5bLDxjbWRfcGVyX2x1bj5bLDxzZ190YWJsZXNpemU+Wyw8aG9zdGlkPlssPHVzZV90YWdzPlssPHVzZV9wZG1hPl1dXV1dXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQotCSAgICAKLQlpZiAoaW50c1swXSA+PSAxKSB7Ci0JCWlmIChpbnRzWzFdID4gMCkKLQkJCS8qIG5vIGxpbWl0cyBvbiB0aGlzLCBqdXN0ID4gMCAqLwotCQkJc2V0dXBfY2FuX3F1ZXVlID0gaW50c1sxXTsKLQl9Ci0JaWYgKGludHNbMF0gPj0gMikgewotCQlpZiAoaW50c1syXSA+IDApCi0JCQlzZXR1cF9jbWRfcGVyX2x1biA9IGludHNbMl07Ci0JfQotCWlmIChpbnRzWzBdID49IDMpIHsKLQkJaWYgKGludHNbM10gPj0gMCkgewotCQkJc2V0dXBfc2dfdGFibGVzaXplID0gaW50c1szXTsKLQkJCS8qIE11c3QgYmUgPD0gU0dfQUxMICgyNTUpICovCi0JCQlpZiAoc2V0dXBfc2dfdGFibGVzaXplID4gU0dfQUxMKQotCQkJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IFNHX0FMTDsKLQkJfQotCX0KLQlpZiAoaW50c1swXSA+PSA0KSB7Ci0JCS8qIE11c3QgYmUgYmV0d2VlbiAwIGFuZCA3ICovCi0JCWlmIChpbnRzWzRdID49IDAgJiYgaW50c1s0XSA8PSA3KQotCQkJc2V0dXBfaG9zdGlkID0gaW50c1s0XTsKLQkJZWxzZSBpZiAoaW50c1s0XSA+IDcpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYWNfc2NzaV9zZXR1cDogaW52YWxpZCBob3N0IElEICVkICFcbiIsIGludHNbNF0gKTsKLQl9Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCQotCWlmIChpbnRzWzBdID49IDUpIHsKLQkJaWYgKGludHNbNV0gPj0gMCkKLQkJCXNldHVwX3VzZV90YWdnZWRfcXVldWluZyA9ICEhaW50c1s1XTsKLQl9Ci0JCi0JaWYgKGludHNbMF0gPT0gNikgewotCSAgICBpZiAoaW50c1s2XSA+PSAwKQorCWlmIChpbnRzWzBdID49IDEpCisJCXNldHVwX2Nhbl9xdWV1ZSA9IGludHNbMV07CisJaWYgKGludHNbMF0gPj0gMikKKwkJc2V0dXBfY21kX3Blcl9sdW4gPSBpbnRzWzJdOworCWlmIChpbnRzWzBdID49IDMpCisJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IGludHNbM107CisJaWYgKGludHNbMF0gPj0gNCkKKwkJc2V0dXBfaG9zdGlkID0gaW50c1s0XTsKKwlpZiAoaW50c1swXSA+PSA1KQorCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBpbnRzWzVdOworCWlmIChpbnRzWzBdID49IDYpCiAJCXNldHVwX3VzZV9wZG1hID0gaW50c1s2XTsKLQl9Ci0jZWxzZQotCWlmIChpbnRzWzBdID09IDUpIHsKLQkgICAgaWYgKGludHNbNV0gPj0gMCkKLQkJc2V0dXBfdXNlX3BkbWEgPSBpbnRzWzVdOwotCX0KLSNlbmRpZiAvKiBTVVBQT1JUX1RBR1MgKi8KLQkKLSNlbmRpZiAvKiBEUklWRVJfU0VUVVAgKi8KIAlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgibWFjNTM4MD0iLCBtYWNfc2NzaV9zZXR1cCk7Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IGludCBtYWNzY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKLSAqCi0gKiBQdXJwb3NlIDogaW5pdGlhbGl6ZXMgbWFjIE5DUjUzODAgZHJpdmVyIGJhc2VkIG9uIHRoZQotICoJY29tbWFuZCBsaW5lIC8gY29tcGlsZSB0aW1lIHBvcnQgYW5kIGlycSBkZWZpbml0aW9ucy4KLSAqCi0gKiBJbnB1dHMgOiB0cG50IC0gdGVtcGxhdGUgZm9yIHRoaXMgU0NTSSBhZGFwdGVyLgotICoKLSAqIFJldHVybnMgOiAxIGlmIGEgaG9zdCBhZGFwdGVyIHdhcyBmb3VuZCwgMCBpZiBub3QuCi0gKgotICovCi0gCi1pbnQgX19pbml0IG1hY3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQotewotICAgIHN0YXRpYyBpbnQgY2FsbGVkID0gMDsKLSAgICBpbnQgZmxhZ3MgPSAwOwotICAgIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOwotCi0gICAgaWYgKCFNQUNIX0lTX01BQyB8fCBjYWxsZWQpCi0JcmV0dXJuKCAwICk7Ci0KLSAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+c2NzaV90eXBlICE9IE1BQ19TQ1NJX09MRCkKLQlyZXR1cm4oIDAgKTsKLQotICAgIC8qIHNldHVwIHZhcmlhYmxlcyAqLwotICAgIHRwbnQtPmNhbl9xdWV1ZSA9Ci0JKHNldHVwX2Nhbl9xdWV1ZSA+IDApID8gc2V0dXBfY2FuX3F1ZXVlIDogQ0FOX1FVRVVFOwotICAgIHRwbnQtPmNtZF9wZXJfbHVuID0KLQkoc2V0dXBfY21kX3Blcl9sdW4gPiAwKSA/IHNldHVwX2NtZF9wZXJfbHVuIDogQ01EX1BFUl9MVU47Ci0gICAgdHBudC0+c2dfdGFibGVzaXplID0gCi0JKHNldHVwX3NnX3RhYmxlc2l6ZSA+PSAwKSA/IHNldHVwX3NnX3RhYmxlc2l6ZSA6IFNHX1RBQkxFU0laRTsKLQotICAgIGlmIChzZXR1cF9ob3N0aWQgPj0gMCkKLQl0cG50LT50aGlzX2lkID0gc2V0dXBfaG9zdGlkOwotICAgIGVsc2UgewotCS8qIHVzZSA3IGFzIGRlZmF1bHQgKi8KLQl0cG50LT50aGlzX2lkID0gNzsKLSAgICB9Ci0KLSNpZmRlZiBTVVBQT1JUX1RBR1MKLSAgICBpZiAoc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nIDwgMCkKLQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBVU0VfVEFHR0VEX1FVRVVJTkc7Ci0jZW5kaWYKLQotICAgIC8qIE9uY2Ugd2Ugc3VwcG9ydCBtdWx0aXBsZSA1MzgwcyAoZS5nLiBEdW9Eb2NrKSB3ZSdsbCBkbwotICAgICAgIHNvbWV0aGluZyBkaWZmZXJlbnQgaGVyZSAqLwotICAgIGluc3RhbmNlID0gc2NzaV9yZWdpc3RlciAodHBudCwgc2l6ZW9mKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKSk7Ci0gICAgaWYgKGluc3RhbmNlID09IE5VTEwpCi0JcmV0dXJuIDA7Ci0KLSAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0lJRlgpIHsKLQltYWNfc2NzaV9yZWdwICA9IHZpYTErMHg4MDAwOwotCW1hY19zY3NpX2RycSAgID0gdmlhMSsweEUwMDA7Ci0JbWFjX3Njc2lfbm9kcnEgPSB2aWExKzB4QzAwMDsKLQkvKiBUaGUgSUlGWCBzaG91bGQgYmUgYWJsZSB0byBkbyB0cnVlIERNQSwgYnV0IHBzZXVkby1kbWEgZG9lc24ndCB3b3JrICovCi0JZmxhZ3MgPSBGTEFHX05PX1BTRVVET19ETUE7Ci0gICAgfSBlbHNlIHsKLQltYWNfc2NzaV9yZWdwICA9IHZpYTErMHgxMDAwMDsKLQltYWNfc2NzaV9kcnEgICA9IHZpYTErMHg2MDAwOwotCW1hY19zY3NpX25vZHJxID0gdmlhMSsweDEyMDAwOwotICAgIH0KLQotICAgIGlmICghIHNldHVwX3VzZV9wZG1hKQotCWZsYWdzID0gRkxBR19OT19QU0VVRE9fRE1BOwotCQotICAgIGluc3RhbmNlLT5pb19wb3J0ID0gKHVuc2lnbmVkIGxvbmcpIG1hY19zY3NpX3JlZ3A7Ci0gICAgaW5zdGFuY2UtPmlycSA9IElSUV9NQUNfU0NTSTsKLQotI2lmZGVmIFJFU0VUX0JPT1QgICAKLSAgICBtYWNfc2NzaV9yZXNldF9ib290KGluc3RhbmNlKTsKLSNlbmRpZgotICAgIAotICAgIE5DUjUzODBfaW5pdChpbnN0YW5jZSwgZmxhZ3MpOwotCi0gICAgaW5zdGFuY2UtPm5faW9fcG9ydCA9IDI1NTsKLQotICAgICgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGEpLT5jdHJsID0gMDsKLQotICAgIGlmIChpbnN0YW5jZS0+aXJxICE9IFNDU0lfSVJRX05PTkUpCi0JaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIE5DUjUzODBfaW50ciwgMCwgIm5jcjUzODAiLCBpbnN0YW5jZSkpIHsKLQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwKLQkJICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwotCSAgICBpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKLQl9Ci0KLSAgICBwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IGdlbmVyaWMgNTM4MCBhdCBwb3J0ICVsWCBpcnEiLCBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlvX3BvcnQpOwotICAgIGlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JcHJpbnRrIChLRVJOX0lORk8gInMgZGlzYWJsZWQiKTsKLSAgICBlbHNlCi0JcHJpbnRrIChLRVJOX0lORk8gIiAlZCIsIGluc3RhbmNlLT5pcnEpOwotICAgIHByaW50ayhLRVJOX0lORk8gIiBvcHRpb25zIENBTl9RVUVVRT0lZCBDTURfUEVSX0xVTj0lZCByZWxlYXNlPSVkIiwKLQkgICBpbnN0YW5jZS0+Y2FuX3F1ZXVlLCBpbnN0YW5jZS0+Y21kX3Blcl9sdW4sIE1BQ1NDU0lfUFVCTElDX1JFTEVBU0UpOwotICAgIHByaW50ayhLRVJOX0lORk8gIlxuc2NzaSVkOiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLSAgICBOQ1I1MzgwX3ByaW50X29wdGlvbnMoaW5zdGFuY2UpOwotICAgIHByaW50aygiXG4iKTsKLSAgICBjYWxsZWQgPSAxOwotICAgIHJldHVybiAxOwotfQotCi1pbnQgbWFjc2NzaV9yZWxlYXNlIChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKLXsKLQlpZiAoc2hwbnQtPmlycSAhPSBTQ1NJX0lSUV9OT05FKQotCQlmcmVlX2lycShzaHBudC0+aXJxLCBzaHBudCk7Ci0JTkNSNTM4MF9leGl0KHNocG50KTsKLQotCXJldHVybiAwOwotfQorI2VuZGlmIC8qICFNT0RVTEUgKi8KIAogI2lmZGVmIFJFU0VUX0JPT1QKIC8qCkBAIC0zNDksMTAgKzE1OCw3IEBACiB9CiAjZW5kaWYKIAotY29uc3QgY2hhciAqIG1hY3Njc2lfaW5mbyAoc3RydWN0IFNjc2lfSG9zdCAqc3BudCkgewotCXJldHVybiAiIjsKLX0KLQorI2lmZGVmIFBTRVVET19ETUEKIC8qIAogICAgUHNldWRvLURNQTogKE92ZSBFZGx1bmQpCiAgICBUaGUgY29kZSBhdHRlbXB0cyB0byBjYXRjaCBidXMgZXJyb3JzIHRoYXQgb2NjdXIgaWYgb25lIGZvciBleGFtcGxlCkBAIC00MjIsMzggKzIyOCwzOSBAQAogICAgICA6ICIwIihzKSwgIjEiKGQpLCAiMiIobGVuKQkJCQlcCiAgICAgIDogImQwIikKIAotCi1zdGF0aWMgaW50IG1hY3Njc2lfcHJlYWQgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAotCQkJICB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4pCitzdGF0aWMgaW50IG1hY3Njc2lfcHJlYWQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuKQogewotICAgdW5zaWduZWQgY2hhciAqZDsKLSAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnM7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisJdW5zaWduZWQgY2hhciAqZDsKKwl1bnNpZ25lZCBjaGFyICpzOwogCi0gICBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKLSAgIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOworCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOworCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCi0gICBzID0gbWFjX3Njc2lfZHJxKzB4NjA7Ci0gICBkID0gZHN0OworCXMgPSBob3N0ZGF0YS0+cGRtYV9iYXNlICsgKElOUFVUX0RBVEFfUkVHIDw8IDQpOworCWQgPSBkc3Q7CiAKLS8qIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSBNYWNPUyAqLworCS8qIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSBNYWNPUyAqLwogCi0gICB3aGlsZSAoIShOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfRFJRKSAKLSAgICAgICAgICYmICEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSkKLSAgICAgIDsKLSAgIGlmICghKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9EUlEpIAotICAgICAgICAgJiYgKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9QSEFTRV9NQVRDSCkpIHsKLSAgICAgIHByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gbWFjc2NzaV9wcmVhZFxuIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICB9CisJd2hpbGUgKCEoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiBCQVNSX0RSUSkgJiYKKwkgICAgICAgIShOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9SRVEpKQorCQk7CiAKLSAgIENQX0lPX1RPX01FTShzLCBkLCBsZW4pOwotICAgCi0gICBpZiAobGVuICE9IDApIHsKLSAgICAgIHByaW50ayhLRVJOX05PVElDRSAiQnVzIGVycm9yIGluIG1hY3Njc2lfcHJlYWRcbiIpOwotICAgICAgcmV0dXJuIC0xOwotICAgfQotICAgCi0gICByZXR1cm4gMDsKKwlpZiAoIShOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfRFJRKSAmJgorCSAgICAoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiBCQVNSX1BIQVNFX01BVENIKSkgeworCQlwcl9lcnIoIkVycm9yIGluIG1hY3Njc2lfcHJlYWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJQ1BfSU9fVE9fTUVNKHMsIGQsIGxlbik7CisKKwlpZiAobGVuICE9IDApIHsKKwkJcHJfbm90aWNlKCJCdXMgZXJyb3IgaW4gbWFjc2NzaV9wcmVhZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC01MTUsNTkgKzMyMiwxNzIgQEAKICAgICAgOiAiMCIocyksICIxIihkKSwgIjIiKGxlbikJCQkJXAogICAgICA6ICJkMCIpCiAKLXN0YXRpYyBpbnQgbWFjc2NzaV9wd3JpdGUgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAotCQkJCSAgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQorc3RhdGljIGludCBtYWNzY3NpX3B3cml0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQogewotICAgdW5zaWduZWQgY2hhciAqczsKLSAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmQ7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisJdW5zaWduZWQgY2hhciAqczsKKwl1bnNpZ25lZCBjaGFyICpkOwogCi0gICBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKLSAgIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOworCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOworCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCi0gICBzID0gc3JjOwotICAgZCA9IG1hY19zY3NpX2RycTsKLSAgIAotLyogVGhlc2UgY29uZGl0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIE1hY09TICovCisJcyA9IHNyYzsKKwlkID0gaG9zdGRhdGEtPnBkbWFfYmFzZSArIChPVVRQVVRfREFUQV9SRUcgPDwgNCk7CiAKLSAgIHdoaWxlICghKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9EUlEpIAotICAgICAgICAgJiYgKCEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSAKLSAgICAgICAgICAgIHx8IChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfUEhBU0VfTUFUQ0gpKSkgCi0gICAgICA7Ci0gICBpZiAoIShOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfRFJRKSkgewotICAgICAgcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiBtYWNzY3NpX3B3cml0ZVxuIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICB9CisJLyogVGhlc2UgY29uZGl0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIE1hY09TICovCiAKLSAgIENQX01FTV9UT19JTyhzLCBkLCBsZW4pOyAgIAorCXdoaWxlICghKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9EUlEpICYmCisJICAgICAgICghKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JFUSkgfHwKKwkgICAgICAgIChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfUEhBU0VfTUFUQ0gpKSkKKwkJOwogCi0gICBpZiAobGVuICE9IDApIHsKLSAgICAgIHByaW50ayhLRVJOX05PVElDRSAiQnVzIGVycm9yIGluIG1hY3Njc2lfcHdyaXRlXG4iKTsKLSAgICAgIHJldHVybiAtMTsKLSAgIH0KLSAgIAotICAgcmV0dXJuIDA7CisJaWYgKCEoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiBCQVNSX0RSUSkpIHsKKwkJcHJfZXJyKCJFcnJvciBpbiBtYWNzY3NpX3B3cml0ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlDUF9NRU1fVE9fSU8ocywgZCwgbGVuKTsKKworCWlmIChsZW4gIT0gMCkgeworCQlwcl9ub3RpY2UoIkJ1cyBlcnJvciBpbiBtYWNzY3NpX3B3cml0ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KLQorI2VuZGlmCiAKICNpbmNsdWRlICJOQ1I1MzgwLmMiCiAKLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKLQkucHJvY19uYW1lCQkJPSAiTWFjNTM4MCIsCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAgICAgICAgICJtYWNfc2NzaSIKKyNkZWZpbmUgUEZYICAgICAgICAgICAgICAgICAgICAgRFJWX01PRFVMRV9OQU1FICI6ICIKKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbWFjX3Njc2lfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCQk9IFRISVNfTU9EVUxFLAorCS5wcm9jX25hbWUJCQk9IERSVl9NT0RVTEVfTkFNRSwKIAkuc2hvd19pbmZvCQkJPSBtYWNzY3NpX3Nob3dfaW5mbywKIAkud3JpdGVfaW5mbwkJCT0gbWFjc2NzaV93cml0ZV9pbmZvLAogCS5uYW1lCQkJCT0gIk1hY2ludG9zaCBOQ1I1MzgwIFNDU0kiLAotCS5kZXRlY3QJCQkJPSBtYWNzY3NpX2RldGVjdCwKLQkucmVsZWFzZQkJCT0gbWFjc2NzaV9yZWxlYXNlLAogCS5pbmZvCQkJCT0gbWFjc2NzaV9pbmZvLAogCS5xdWV1ZWNvbW1hbmQJCQk9IG1hY3Njc2lfcXVldWVfY29tbWFuZCwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBtYWNzY3NpX2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgkJPSBtYWNzY3NpX2J1c19yZXNldCwKLQkuY2FuX3F1ZXVlCQkJPSBDQU5fUVVFVUUsCisJLmNhbl9xdWV1ZQkJCT0gMTYsCiAJLnRoaXNfaWQJCQk9IDcsCiAJLnNnX3RhYmxlc2l6ZQkJCT0gU0dfQUxMLAotCS5jbWRfcGVyX2x1bgkJCT0gQ01EX1BFUl9MVU4sCisJLmNtZF9wZXJfbHVuCQkJPSAyLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRElTQUJMRV9DTFVTVEVSSU5HCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBtYWNfc2NzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOworCWludCBlcnJvcjsKKwlpbnQgaG9zdF9mbGFncyA9IDA7CisJc3RydWN0IHJlc291cmNlICppcnEsICpwaW9fbWVtLCAqcGRtYV9tZW0gPSBOVUxMOwogCi0jaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKKwlwaW9fbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXBpb19tZW0pCisJCXJldHVybiAtRU5PREVWOworCisjaWZkZWYgUFNFVURPX0RNQQorCXBkbWFfbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKyNlbmRpZgorCisJaXJxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKworCWlmICghaHdyZWdfcHJlc2VudCgodW5zaWduZWQgY2hhciAqKXBpb19tZW0tPnN0YXJ0ICsKKwkgICAgICAgICAgICAgICAgICAgKFNUQVRVU19SRUcgPDwgNCkpKSB7CisJCXByX2luZm8oUEZYICJubyBkZXZpY2UgZGV0ZWN0ZWQgYXQgJXBhcFxuIiwgJnBpb19tZW0tPnN0YXJ0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHNldHVwX2Nhbl9xdWV1ZSA+IDApCisJCW1hY19zY3NpX3RlbXBsYXRlLmNhbl9xdWV1ZSA9IHNldHVwX2Nhbl9xdWV1ZTsKKwlpZiAoc2V0dXBfY21kX3Blcl9sdW4gPiAwKQorCQltYWNfc2NzaV90ZW1wbGF0ZS5jbWRfcGVyX2x1biA9IHNldHVwX2NtZF9wZXJfbHVuOworCWlmIChzZXR1cF9zZ190YWJsZXNpemUgPj0gMCkKKwkJbWFjX3Njc2lfdGVtcGxhdGUuc2dfdGFibGVzaXplID0gc2V0dXBfc2dfdGFibGVzaXplOworCWlmIChzZXR1cF9ob3N0aWQgPj0gMCkKKwkJbWFjX3Njc2lfdGVtcGxhdGUudGhpc19pZCA9IHNldHVwX2hvc3RpZCAmIDc7CisJaWYgKHNldHVwX3VzZV9wZG1hIDwgMCkKKwkJc2V0dXBfdXNlX3BkbWEgPSAwOworCisJaW5zdGFuY2UgPSBzY3NpX2hvc3RfYWxsb2MoJm1hY19zY3NpX3RlbXBsYXRlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSkpOworCWlmICghaW5zdGFuY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5zdGFuY2UtPmJhc2UgPSBwaW9fbWVtLT5zdGFydDsKKwlpZiAoaXJxKQorCQlpbnN0YW5jZS0+aXJxID0gaXJxLT5zdGFydDsKKwllbHNlCisJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CisKKwlpZiAocGRtYV9tZW0gJiYgc2V0dXBfdXNlX3BkbWEpIHsKKwkJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwkJaG9zdGRhdGEtPnBkbWFfYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopcGRtYV9tZW0tPnN0YXJ0OworCX0gZWxzZQorCQlob3N0X2ZsYWdzIHw9IEZMQUdfTk9fUFNFVURPX0RNQTsKKworI2lmZGVmIFJFU0VUX0JPT1QKKwltYWNfc2NzaV9yZXNldF9ib290KGluc3RhbmNlKTsKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9UQUdTCisJaG9zdF9mbGFncyB8PSBzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPiAwID8gRkxBR19UQUdHRURfUVVFVUlORyA6IDA7CisjZW5kaWYKKworCU5DUjUzODBfaW5pdChpbnN0YW5jZSwgaG9zdF9mbGFncyk7CisKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpIHsKKwkJZXJyb3IgPSByZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCBtYWNzY3NpX2ludHIsIElSUUZfU0hBUkVELAorCQkgICAgICAgICAgICAgICAgICAgICJOQ1I1MzgwIiwgaW5zdGFuY2UpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGZhaWxfaXJxOworCX0KKworCWVycm9yID0gc2NzaV9hZGRfaG9zdChpbnN0YW5jZSwgTlVMTCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxfaG9zdDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluc3RhbmNlKTsKKworCXNjc2lfc2Nhbl9ob3N0KGluc3RhbmNlKTsKKwlyZXR1cm4gMDsKKworZmFpbF9ob3N0OgorCWlmIChpbnN0YW5jZS0+aXJxICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEoaW5zdGFuY2UtPmlycSwgaW5zdGFuY2UpOworZmFpbF9pcnE6CisJTkNSNTM4MF9leGl0KGluc3RhbmNlKTsKKwlzY3NpX2hvc3RfcHV0KGluc3RhbmNlKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG1hY19zY3NpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzY3NpX3JlbW92ZV9ob3N0KGluc3RhbmNlKTsKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCisJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKKwlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOworCXNjc2lfaG9zdF9wdXQoaW5zdGFuY2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNfc2NzaV9kcml2ZXIgPSB7CisJLnJlbW92ZSA9IF9fZXhpdF9wKG1hY19zY3NpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBEUlZfTU9EVUxFX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKG1hY19zY3NpX2RyaXZlciwgbWFjX3Njc2lfcHJvYmUpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX01PRFVMRV9OQU1FKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5oIGIvZHJpdmVycy9zY3NpL21hY19zY3NpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OTY5YjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL21hY19zY3NpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ3VtYW5hIEdlbmVyaWMgTkNSNTM4MCBkcml2ZXIgZGVmaW5lcwotICoKLSAqIENvcHlyaWdodCAxOTkzLCBEcmV3IEVja2hhcmR0Ci0gKglWaXNpb25hcnkgQ29tcHV0aW5nCi0gKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQotICoJZHJld0Bjb2xvcmFkby5lZHUKLSAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBBTFBIQSBSRUxFQVNFIDEuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0Ci0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0Ci0gKi8KLQotI2lmbmRlZiBNQUNfTkNSNTM4MF9ICi0jZGVmaW5lIE1BQ19OQ1I1MzgwX0gKLQotI2RlZmluZSBNQUNTQ1NJX1BVQkxJQ19SRUxFQVNFIDIKLQotI2lmbmRlZiBBU00KLQotI2lmbmRlZiBDTURfUEVSX0xVTgotI2RlZmluZSBDTURfUEVSX0xVTiAyCi0jZW5kaWYKLQotI2lmbmRlZiBDQU5fUVVFVUUKLSNkZWZpbmUgQ0FOX1FVRVVFIDE2Ci0jZW5kaWYKLQotI2lmbmRlZiBTR19UQUJMRVNJWkUKLSNkZWZpbmUgU0dfVEFCTEVTSVpFIFNHX05PTkUKLSNlbmRpZgotCi0jaWZuZGVmIFVTRV9UQUdHRURfUVVFVUlORwotI2RlZmluZQlVU0VfVEFHR0VEX1FVRVVJTkcgMAotI2VuZGlmCi0KLSNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KLQotI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcyBcCi0gICAgaW50IHBvcnQsIGN0cmwKLQotI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKSBcCi0gICAgICAgIHN0cnVjdCBTY3NpX0hvc3QgKl9pbnN0YW5jZQotCi0jZGVmaW5lIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpIFwKLSAgICAgICAgX2luc3RhbmNlID0gaW5zdGFuY2UKLQotI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKSBtYWNzY3NpX3JlYWQoX2luc3RhbmNlLCByZWcpCi0jZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkgbWFjc2NzaV93cml0ZShfaW5zdGFuY2UsIHJlZywgdmFsdWUpCi0KLSNkZWZpbmUgTkNSNTM4MF9wcmVhZCAJbWFjc2NzaV9wcmVhZAotI2RlZmluZSBOQ1I1MzgwX3B3cml0ZSAJbWFjc2NzaV9wd3JpdGUKLQkKLSNkZWZpbmUgTkNSNTM4MF9pbnRyIG1hY3Njc2lfaW50cgotI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgbWFjc2NzaV9xdWV1ZV9jb21tYW5kCi0jZGVmaW5lIE5DUjUzODBfYWJvcnQgbWFjc2NzaV9hYm9ydAotI2RlZmluZSBOQ1I1MzgwX2J1c19yZXNldCBtYWNzY3NpX2J1c19yZXNldAotI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyBtYWNzY3NpX3Nob3dfaW5mbwotI2RlZmluZSBOQ1I1MzgwX3dyaXRlX2luZm8gbWFjc2NzaV93cml0ZV9pbmZvCi0KLSNlbmRpZiAvKiBuZGVmIEFTTSAqLwotI2VuZGlmIC8qIE1BQ19OQ1I1MzgwX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwppbmRleCBhYzVkOTRjLi4yNDg1MjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwpAQCAtMTk0NSw3ICsxOTQ1LDcgQEAKIAkgICAgIGNtZC0+ZGV2aWNlLT5pZCwgKHUzMiljbWQtPmRldmljZS0+bHVuKTsKIAogCWlmKGxpc3RfZW1wdHkoJmFkYXB0ZXItPnBlbmRpbmdfbGlzdCkpCi0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIEZBSUxFRDsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsICZhZGFwdGVyLT5wZW5kaW5nX2xpc3QpIHsKIApAQCAtMTk2OCw3ICsxOTY4LDcgQEAKIAkJCQkJKGFvcj09U0NCX0FCT1JUKSA/ICJBQk9SVElORyI6IlJFU0VUIiwKIAkJCQkJc2NiLT5pZHgpOwogCi0JCQkJcmV0dXJuIEZBTFNFOworCQkJCXJldHVybiBGQUlMRUQ7CiAJCQl9CiAJCQllbHNlIHsKIApAQCAtMTk5MywxMiArMTk5MywxMiBAQAogCQkJCWxpc3RfYWRkX3RhaWwoU0NTSV9MSVNUKGNtZCksCiAJCQkJCQkmYWRhcHRlci0+Y29tcGxldGVkX2xpc3QpOwogCi0JCQkJcmV0dXJuIFRSVUU7CisJCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCQl9CiAJCX0KIAl9CiAKLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIEZBSUxFRDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IDUzMWRjZTQuLmYwOTg3ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtMzMyLDI3ICszMzIsNiBAQAogCU5VTEwsCiB9OwogCi0vKioKLSAqIG1lZ2FyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIENoYW5nZSB0aGUgZGV2aWNlJ3MgcXVldWUgZGVwdGgKLSAqIEBzZGV2OglzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEBxZGVwdGg6CWRlcHRoIHRvIHNldAotICogQHJlYXNvbjoJY2FsbGluZyBjb250ZXh0Ci0gKgotICogUmV0dXJuIHZhbHVlOgotICogCWFjdHVhbCBkZXB0aCBzZXQKLSAqLwotc3RhdGljIGludCBtZWdhcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLAotCQkJCSAgICAgICBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHFkZXB0aCA+IE1CT1hfTUFYX1NDU0lfQ01EUykKLQkJcWRlcHRoID0gTUJPWF9NQVhfU0NTSV9DTURTOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHFkZXB0aCk7Ci0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCiAvKgogICogU2NzaSBob3N0IHRlbXBsYXRlIGZvciBtZWdhcmFpZCB1bmlmaWVkIGRyaXZlcgogICovCkBAIC0zNjUsNyArMzQ0LDcgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSBtZWdhcmFpZF9yZXNldF9oYW5kbGVyLAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgkJPSBtZWdhcmFpZF9yZXNldF9oYW5kbGVyLAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJCT0gbWVnYXJhaWRfcmVzZXRfaGFuZGxlciwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCQk9IG1lZ2FyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCQk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLm5vX3dyaXRlX3NhbWUJCQk9IDEsCiAJLnNkZXZfYXR0cnMJCQk9IG1lZ2FyYWlkX3NkZXZfYXR0cnMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKaW5kZXggYTQ5OTE0ZC4uMGQ0NGQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaApAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMiAgTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwMy0yMDEzICBMU0kgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCAgQXZhZ28gVGVjaG5vbG9naWVzCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMTcgKzE1LDE4IEBACiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKgogICogIEZJTEU6IG1lZ2FyYWlkX3Nhcy5oCiAgKgotICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6IEF2YWdvIFRlY2hub2xvZ2llcworICogICAgICAgICAgIEthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KKyAqICAgICAgICAgICBTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgogICoKLSAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICogIFNlbmQgZmVlZGJhY2sgdG86IG1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KICAqCi0gKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKLSAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqICBNYWlsIHRvOiBBdmFnbyBUZWNobm9sb2dpZXMsIDM1MCBXZXN0IFRyaW1ibGUgUm9hZCwgQnVpbGRpbmcgOTAsCisgKiAgU2FuIEpvc2UsIENhbGlmb3JuaWEgOTUxMzEKICAqLwogCiAjaWZuZGVmIExTSV9NRUdBUkFJRF9TQVNfSApAQCAtMzMsOSArMzUsNyBAQAogLyoKICAqIE1lZ2FSQUlEIFNBUyBEcml2ZXIgbWV0YSBkYXRhCiAgKi8KLSNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwNi44MDUuMDYuMDAtcmMxIgotI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkJIlNlcC4gNCwgMjAxNCIKLSNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJCSJUaHUuIFNlcC4gNCAxNzowMDowMCBQRFQgMjAxNCIKKyNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwNi44MDUuMDYuMDEtcmMxIgogCiAvKgogICogRGV2aWNlIElEcwpAQCAtMTkzMSw4ICsxOTMxLDcgQEAKIAlzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8gKmxiSW5mbywgc3RydWN0IElPX1JFUVVFU1RfSU5GTyAqaW5faW5mbyk7CiB2b2lkIG1yX3VwZGF0ZV9sb2FkX2JhbGFuY2VfcGFyYW1zKHN0cnVjdCBNUl9EUlZfUkFJRF9NQVBfQUxMICptYXAsCiAJc3RydWN0IExEX0xPQURfQkFMQU5DRV9JTkZPICpsYkluZm8pOwotaW50IG1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0Jc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvICpjdHJsX2luZm8pOworaW50IG1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOwogaW50IG1lZ2FzYXNfc2V0X2NyYXNoX2R1bXBfcGFyYW1zKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKIAl1OCBjcmFzaF9idWZfc3RhdGUpOwogdm9pZCBtZWdhc2FzX2ZyZWVfaG9zdF9jcmFzaF9idWZmZXIoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKaW5kZXggZjZhNjlhMy4uZjA1NTgwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKQEAgLTEsNyArMSw4IEBACiAvKgogICogIExpbnV4IE1lZ2FSQUlEIGRyaXZlciBmb3IgU0FTIGJhc2VkIFJBSUQgY29udHJvbGxlcnMKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTIgIExTSSBDb3Jwb3JhdGlvbi4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMyAgTFNJIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgIEF2YWdvIFRlY2hub2xvZ2llcwogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE0LDIyICsxNSwyMCBAQAogICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICoKLSAqICBGSUxFOiBtZWdhcmFpZF9zYXNfYmFzZS5jCi0gKiAgVmVyc2lvbiA6IDA2LjgwNS4wNi4wMC1yYzEKLSAqCi0gKiAgQXV0aG9yczogTFNJIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yczogQXZhZ28gVGVjaG5vbG9naWVzCiAgKiAgICAgICAgICAgU3JlZW5pdmFzIEJhZ2Fsa290ZQogICogICAgICAgICAgIFN1bWFudCBQYXRybwogICogICAgICAgICAgIEJvIFlhbmcKLSAqICAgICAgICAgICBBZGFtIFJhZGZvcmQgPGxpbnV4cmFpZEBsc2kuY29tPgorICogICAgICAgICAgIEFkYW0gUmFkZm9yZAorICogICAgICAgICAgIEthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KKyAqICAgICAgICAgICBTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgogICoKLSAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICogIFNlbmQgZmVlZGJhY2sgdG86IG1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KICAqCi0gKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKLSAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqICBNYWlsIHRvOiBBdmFnbyBUZWNobm9sb2dpZXMsIDM1MCBXZXN0IFRyaW1ibGUgUm9hZCwgQnVpbGRpbmcgOTAsCisgKiAgU2FuIEpvc2UsIENhbGlmb3JuaWEgOTUxMzEKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDA4LDcgKzEwMDcsNyBAQAogCQljcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGNtZF90b19hYm9ydC0+ZnJhbWVfcGh5c19hZGRyKSk7CiAKIAljbWQtPnN5bmNfY21kID0gMTsKLQljbWQtPmNtZF9zdGF0dXMgPSAweEZGOworCWNtZC0+Y21kX3N0YXR1cyA9IEVOT0RBVEE7CiAKIAlpbnN0YW5jZS0+aW5zdGFuY2V0LT5pc3N1ZV9kY21kKGluc3RhbmNlLCBjbWQpOwogCkBAIC0xNTcyLDYgKzE1NzEsMTIgQEAKIAlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKQogCSAgICBzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCisJaWYgKGluc3RhbmNlLT51bmxvYWQgPT0gMSkgeworCQlzY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJc2NtZC0+c2NzaV9kb25lKHNjbWQpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoaW5zdGFuY2UtPmlzc3VlcGVuZF9kb25lID09IDApCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCkBAIC0yNTg2LDIwICsyNTkxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbWVnYXNhc19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJCSAgICAgIGludCBxdWV1ZV9kZXB0aCwgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChxdWV1ZV9kZXB0aCA+IHNkZXYtPmhvc3QtPmNhbl9xdWV1ZSkKLQkJcXVldWVfZGVwdGggPSBzZGV2LT5ob3N0LT5jYW5fcXVldWU7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksCi0JCQkJcXVldWVfZGVwdGgpOwotCi0JcmV0dXJuIHF1ZXVlX2RlcHRoOwotfQotCiBzdGF0aWMgc3NpemVfdAogbWVnYXNhc19md19jcmFzaF9idWZmZXJfc3RvcmUoc3RydWN0IGRldmljZSAqY2RldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0yNzY0LDcgKzI3NTUsNyBAQAogCS5zaG9zdF9hdHRycyA9IG1lZ2FyYWlkX2hvc3RfYXR0cnMsCiAJLmJpb3NfcGFyYW0gPSBtZWdhc2FzX2Jpb3NfcGFyYW0sCiAJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IG1lZ2FzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkubm9fd3JpdGVfc2FtZSA9IDEsCiB9OwogCkBAIC00MDI4LDI1ICs0MDE5LDgzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIG1lZ2FzYXNfdXBkYXRlX2V4dF92ZF9kZXRhaWxzIDogVXBkYXRlIGRldGFpbHMgdy5yLnQgRXh0ZW5kZWQgVkQKKyAqIGluc3RhbmNlCQkJIDogQ29udHJvbGxlcidzIGluc3RhbmNlCisqLworc3RhdGljIHZvaWQgbWVnYXNhc191cGRhdGVfZXh0X3ZkX2RldGFpbHMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCXUzMiBvbGRfbWFwX3N6OworCXUzMiBuZXdfbWFwX3N6OworCisJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKwkvKiBGb3IgTUZJIGJhc2VkIGNvbnRyb2xsZXJzIHJldHVybiBkdW1teSBzdWNjZXNzICovCisJaWYgKCFmdXNpb24pCisJCXJldHVybjsKKworCWluc3RhbmNlLT5zdXBwb3J0bWF4MjU2dmQgPQorCQlpbnN0YW5jZS0+Y3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczMuc3VwcG9ydE1heEV4dExEczsKKwkvKiBCZWxvdyBpcyBhZGRpdGlvbmFsIGNoZWNrIHRvIGFkZHJlc3MgZnV0dXJlIEZXIGVuaGFuY2VtZW50ICovCisJaWYgKGluc3RhbmNlLT5jdHJsX2luZm8tPm1heF9sZHMgPiA2NCkKKwkJaW5zdGFuY2UtPnN1cHBvcnRtYXgyNTZ2ZCA9IDE7CisKKwlpbnN0YW5jZS0+ZHJ2X3N1cHBvcnRlZF92ZF9jb3VudCA9IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTCisJCQkJCSogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3BkX2NvdW50ID0gTUVHQVNBU19NQVhfUERfQ0hBTk5FTFMKKwkJCQkJKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJaWYgKGluc3RhbmNlLT5zdXBwb3J0bWF4MjU2dmQpIHsKKwkJaW5zdGFuY2UtPmZ3X3N1cHBvcnRlZF92ZF9jb3VudCA9IE1BWF9MT0dJQ0FMX0RSSVZFU19FWFQ7CisJCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQgPSBNQVhfUEhZU0lDQUxfREVWSUNFUzsKKwl9IGVsc2UgeworCQlpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3ZkX2NvdW50ID0gTUFYX0xPR0lDQUxfRFJJVkVTOworCQlpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3BkX2NvdW50ID0gTUFYX1BIWVNJQ0FMX0RFVklDRVM7CisJfQorCWRldl9pbmZvKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiRmlybXdhcmUgc3VwcG9ydHMgJWQgVkQgJWQgUERcbiIsCisJCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQsCisJCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQpOworCWRldl9pbmZvKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiRHJpdmVyIHN1cHBvcnRzICVkIFZEICAlZCBQRFxuIiwKKwkJaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfdmRfY291bnQsCisJCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3BkX2NvdW50KTsKKworCW9sZF9tYXBfc3ogPSAgc2l6ZW9mKHN0cnVjdCBNUl9GV19SQUlEX01BUCkgKworCQkJCShzaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSAqCisJCQkJKGluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQgLSAxKSk7CisJbmV3X21hcF9zeiA9ICBzaXplb2Yoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0VYVCk7CisJZnVzaW9uLT5kcnZfbWFwX3N6ID0gIHNpemVvZihzdHJ1Y3QgTVJfRFJWX1JBSURfTUFQKSArCisJCQkJKHNpemVvZihzdHJ1Y3QgTVJfTERfU1BBTl9NQVApICoKKwkJCQkoaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfdmRfY291bnQgLSAxKSk7CisKKwlmdXNpb24tPm1heF9tYXBfc3ogPSBtYXgob2xkX21hcF9zeiwgbmV3X21hcF9zeik7CisKKworCWlmIChpbnN0YW5jZS0+c3VwcG9ydG1heDI1NnZkKQorCQlmdXNpb24tPmN1cnJlbnRfbWFwX3N6ID0gbmV3X21hcF9zejsKKwllbHNlCisJCWZ1c2lvbi0+Y3VycmVudF9tYXBfc3ogPSBvbGRfbWFwX3N6OworCit9CisKIC8qKgogICogbWVnYXNhc19nZXRfY29udHJvbGxlcl9pbmZvIC0JUmV0dXJucyBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlCiAgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICogQGN0cmxfaW5mbzoJCQkJQ29udHJvbGxlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICAqCiAgKiBJc3N1ZXMgYW4gaW50ZXJuYWwgY29tbWFuZCAoRENNRCkgdG8gZ2V0IHRoZSBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlLgogICogVGhpcyBpbmZvcm1hdGlvbiBpcyBtYWlubHkgdXNlZCB0byBmaW5kIG91dCB0aGUgbWF4aW11bSBJTyB0cmFuc2ZlciBwZXIKICAqIGNvbW1hbmQgc3VwcG9ydGVkIGJ5IHRoZSBGVy4KICAqLwogaW50Ci1tZWdhc2FzX2dldF9jdHJsX2luZm8oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkgICAgICBzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmN0cmxfaW5mbykKK21lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CiAJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKIAlzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmNpOworCXN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyAqY3RybF9pbmZvOwogCWRtYV9hZGRyX3QgY2lfaCA9IDA7CiAKKwljdHJsX2luZm8gPSBpbnN0YW5jZS0+Y3RybF9pbmZvOworCiAJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKIAogCWlmICghY21kKSB7CkBAIC00MDg2LDggKzQxMzUsMTMgQEAKIAllbHNlCiAJCXJldCA9IG1lZ2FzYXNfaXNzdWVfcG9sbGVkKGluc3RhbmNlLCBjbWQpOwogCi0JaWYgKCFyZXQpCisJaWYgKCFyZXQpIHsKIAkJbWVtY3B5KGN0cmxfaW5mbywgY2ksIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pKTsKKwkJbGUzMl90b19jcHVzKCh1MzIgKikmY3RybF9pbmZvLT5wcm9wZXJ0aWVzLk9uT2ZmUHJvcGVydGllcyk7CisJCWxlMzJfdG9fY3B1cygodTMyICopJmN0cmxfaW5mby0+YWRhcHRlck9wZXJhdGlvbnMyKTsKKwkJbGUzMl90b19jcHVzKCh1MzIgKikmY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczMpOworCQltZWdhc2FzX3VwZGF0ZV9leHRfdmRfZGV0YWlscyhpbnN0YW5jZSk7CisJfQogCiAJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyksCiAJCQkgICAgY2ksIGNpX2gpOwpAQCAtNDI4OSw3ICs0MzQzLDcgQEAKIAlpZiAobWVnYXNhc19pc3N1ZV9pbml0X21maShpbnN0YW5jZSkpCiAJCWdvdG8gZmFpbF9md19pbml0OwogCi0JaWYgKG1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhpbnN0YW5jZSwgaW5zdGFuY2UtPmN0cmxfaW5mbykpIHsKKwlpZiAobWVnYXNhc19nZXRfY3RybF9pbmZvKGluc3RhbmNlKSkgewogCQlkZXZfZXJyKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiKCVkKTogQ291bGQgZ2V0IGNvbnRyb2xsZXIgaW5mbyAiCiAJCQkiRmFpbCBmcm9tICVzICVkXG4iLCBpbnN0YW5jZS0+dW5pcXVlX2lkLAogCQkJX19mdW5jX18sIF9fTElORV9fKTsKQEAgLTQ0NTMsNyArNDUwNyw3IEBACiAJCQlpbnN0YW5jZS0+bXNpeGVudHJ5W2ldLmVudHJ5ID0gaTsKIAkJaSA9IHBjaV9lbmFibGVfbXNpeF9yYW5nZShpbnN0YW5jZS0+cGRldiwgaW5zdGFuY2UtPm1zaXhlbnRyeSwKIAkJCQkJICAxLCBpbnN0YW5jZS0+bXNpeF92ZWN0b3JzKTsKLQkJaWYgKGkpCisJCWlmIChpID4gMCkKIAkJCWluc3RhbmNlLT5tc2l4X3ZlY3RvcnMgPSBpOwogCQllbHNlCiAJCQlpbnN0YW5jZS0+bXNpeF92ZWN0b3JzID0gMDsKQEAgLTQ1MjcsMTIgKzQ1ODEsOCBAQAogCQlkZXZfaW5mbygmaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJCSJDb250cm9sbGVyIHR5cGU6IGlNUlxuIik7CiAJfQotCS8qIE9uT2ZmUHJvcGVydGllcyBhcmUgY29udmVydGVkIGludG8gQ1BVIGFyY2gqLwotCWxlMzJfdG9fY3B1cygodTMyICopJmN0cmxfaW5mby0+cHJvcGVydGllcy5Pbk9mZlByb3BlcnRpZXMpOwogCWluc3RhbmNlLT5kaXNhYmxlT25saW5lQ3RybFJlc2V0ID0KIAljdHJsX2luZm8tPnByb3BlcnRpZXMuT25PZmZQcm9wZXJ0aWVzLmRpc2FibGVPbmxpbmVDdHJsUmVzZXQ7Ci0JLyogYWRhcHRlck9wZXJhdGlvbnMyIGFyZSBjb252ZXJ0ZWQgaW50byBDUFUgYXJjaCovCi0JbGUzMl90b19jcHVzKCh1MzIgKikmY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczIpOwogCWluc3RhbmNlLT5tcGlvID0gY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczIubXBpbzsKIAlpbnN0YW5jZS0+VW5ldmVuU3BhblN1cHBvcnQgPQogCQljdHJsX2luZm8tPmFkYXB0ZXJPcGVyYXRpb25zMi5zdXBwb3J0VW5ldmVuU3BhbnM7CkBAIC00NTYyLDcgKzQ2MTIsNiBAQAogCQkgICAgICAgInJlcXVlc3RvcklkICVkXG4iLCBpbnN0YW5jZS0+cmVxdWVzdG9ySWQpOwogCX0KIAotCWxlMzJfdG9fY3B1cygodTMyICopJmN0cmxfaW5mby0+YWRhcHRlck9wZXJhdGlvbnMzKTsKIAlpbnN0YW5jZS0+Y3Jhc2hfZHVtcF9md19zdXBwb3J0ID0KIAkJY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczMuc3VwcG9ydENyYXNoRHVtcDsKIAlpbnN0YW5jZS0+Y3Jhc2hfZHVtcF9kcnZfc3VwcG9ydCA9CkBAIC00NTg3LDggKzQ2MzYsNiBAQAogCWlmICh0bXBfc2VjdG9ycyAmJiAoaW5zdGFuY2UtPm1heF9zZWN0b3JzX3Blcl9yZXEgPiB0bXBfc2VjdG9ycykpCiAJCWluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxID0gdG1wX3NlY3RvcnM7CiAKLQlrZnJlZShjdHJsX2luZm8pOwotCiAJLyogQ2hlY2sgZm9yIHZhbGlkIHRocm90dGxlcXVldWVkZXB0aCBtb2R1bGUgcGFyYW1ldGVyICovCiAJaWYgKGluc3RhbmNlLT5pc19pbXIpIHsKIAkJaWYgKHRocm90dGxlcXVldWVkZXB0aCA+IChpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLQpAQCAtNDk1NywxMCArNTAwNCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qCi0JICogVHJpZ2dlciBTQ1NJIHRvIHNjYW4gb3VyIGRyaXZlcwotCSAqLwotCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCXJldHVybiAwOwogfQogCkBAIC01MDgzLDYgKzUxMjYsOCBAQAogCQkJZ290byBmYWlsX2FsbG9jX2RtYV9idWY7CiAJCX0KIAkJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKwkJbWVtc2V0KGZ1c2lvbiwgMCwKKwkJCSgoMSA8PCBQQUdFX1NISUZUKSA8PCBpbnN0YW5jZS0+Y3RybF9jb250ZXh0X3BhZ2VzKSk7CiAJCUlOSVRfTElTVF9IRUFEKCZmdXNpb24tPmNtZF9wb29sKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmZ1c2lvbi0+bXB0X3Bvb2xfbG9jayk7CiAJCW1lbXNldChmdXNpb24tPmxvYWRfYmFsYW5jZV9pbmZvLCAwLApAQCAtNTI4OCw2ICs1MzMzLDEwIEBACiAJCWdvdG8gZmFpbF9pb19hdHRhY2g7CiAKIAlpbnN0YW5jZS0+dW5sb2FkID0gMDsKKwkvKgorCSAqIFRyaWdnZXIgU0NTSSB0byBzY2FuIG91ciBkcml2ZXMKKwkgKi8KKwlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCS8qCiAJICogSW5pdGlhdGUgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKQpAQCAtNjA1MSw2ICs2MTAwLDExIEBACiAJbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZChpbnN0YW5jZSwgY21kLCAwKTsKIAljbWQtPnN5bmNfY21kID0gMDsKIAorCWlmIChpbnN0YW5jZS0+dW5sb2FkID09IDEpIHsKKwkJZGV2X2luZm8oJmluc3RhbmNlLT5wZGV2LT5kZXYsICJEcml2ZXIgdW5sb2FkIGlzIGluIHByb2dyZXNzICIKKwkJCSJkb24ndCBzdWJtaXQgZGF0YSB0byBhcHBsaWNhdGlvblxuIik7CisJCWdvdG8gb3V0OworCX0KIAkvKgogCSAqIGNvcHkgb3V0IHRoZSBrZXJuZWwgYnVmZmVycyB0byB1c2VyIGJ1ZmZlcnMKIAkgKi8KQEAgLTY0MDAsMTYgKzY0NTQsNiBAQAogc3RhdGljIERSSVZFUl9BVFRSKHZlcnNpb24sIFNfSVJVR08sIG1lZ2FzYXNfc3lzZnNfc2hvd192ZXJzaW9uLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QKLW1lZ2FzYXNfc3lzZnNfc2hvd19yZWxlYXNlX2RhdGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRkLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc3RybGVuKE1FR0FTQVNfUkVMREFURSkgKyAyLCAiJXNcbiIsCi0JCQlNRUdBU0FTX1JFTERBVEUpOwotfQotCi1zdGF0aWMgRFJJVkVSX0FUVFIocmVsZWFzZV9kYXRlLCBTX0lSVUdPLCBtZWdhc2FzX3N5c2ZzX3Nob3dfcmVsZWFzZV9kYXRlLAotCQkgICBOVUxMKTsKLQotc3RhdGljIHNzaXplX3QKIG1lZ2FzYXNfc3lzZnNfc2hvd19zdXBwb3J0X3BvbGxfZm9yX2V2ZW50KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZCwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBzdXBwb3J0X3BvbGxfZm9yX2V2ZW50KTsKQEAgLTY3MTIsOCArNjc1Niw3IEBACiAJLyoKIAkgKiBBbm5vdW5jZSBkcml2ZXIgdmVyc2lvbiBhbmQgb3RoZXIgaW5mb3JtYXRpb24KIAkgKi8KLQlwcmludGsoS0VSTl9JTkZPICJtZWdhc2FzOiAlcyAlc1xuIiwgTUVHQVNBU19WRVJTSU9OLAotCSAgICAgICBNRUdBU0FTX0VYVF9WRVJTSU9OKTsKKwlwcl9pbmZvKCJtZWdhc2FzOiAlc1xuIiwgTUVHQVNBU19WRVJTSU9OKTsKIAogCXNwaW5fbG9ja19pbml0KCZwb2xsX2Flbl9sb2NrKTsKIApAQCAtNjc0OCwxMCArNjc5MSw2IEBACiAJCQkJICAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiAJaWYgKHJ2YWwpCiAJCWdvdG8gZXJyX2RjZl9hdHRyX3ZlcjsKLQlydmFsID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJCSAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7Ci0JaWYgKHJ2YWwpCi0JCWdvdG8gZXJyX2RjZl9yZWxfZGF0ZTsKIAogCXJ2YWwgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCiAJCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOwpAQCAtNjc3NSwxMiArNjgxNCw3IEBACiBlcnJfZGNmX2RiZ19sdmw6CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAogCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOwotCiBlcnJfZGNmX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQ6Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJICAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7Ci0KLWVycl9kY2ZfcmVsX2RhdGU6CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiBlcnJfZGNmX2F0dHJfdmVyOgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWVnYXNhc19wY2lfZHJpdmVyKTsKQEAgLTY4MDAsOCArNjgzNCw2IEBACiAJCQkmZHJpdmVyX2F0dHJfc3VwcG9ydF9wb2xsX2Zvcl9ldmVudCk7CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAogCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfZGV2aWNlX2NoYW5nZSk7Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJICAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1lZ2FzYXNfcGNpX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2ZwLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2ZwLmMKaW5kZXggNjg1ZTZmMy4uNDYwYzZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnAuYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiAgTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEzICBMU0kgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCAgQXZhZ28gVGVjaG5vbG9naWVzCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMjAgKzE1LDIxIEBACiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKgogICogIEZJTEU6IG1lZ2FyYWlkX3Nhc19mcC5jCiAgKgotICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6IEF2YWdvIFRlY2hub2xvZ2llcwogICogICAgICAgICAgIFN1bWFudCBQYXRybwogICogICAgICAgICAgIFZhcmFkIFRhbGFtYWNraQogICogICAgICAgICAgIE1hbm9qIEpvc2UKKyAqICAgICAgICAgICBLYXNoeWFwIERlc2FpIDxrYXNoeWFwLmRlc2FpQGF2YWdvdGVjaC5jb20+CisgKiAgICAgICAgICAgU3VtaXQgU2F4ZW5hIDxzdW1pdC5zYXhlbmFAYXZhZ290ZWNoLmNvbT4KICAqCi0gKiAgU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KKyAqICBTZW5kIGZlZWRiYWNrIHRvOiBtZWdhcmFpZGxpbnV4LnBkbEBhdmFnb3RlY2guY29tCiAgKgotICogIE1haWwgdG86IExTSSBDb3Jwb3JhdGlvbiwgMTYyMSBCYXJiZXIgTGFuZSwgTWlscGl0YXMsIENBIDk1MDM1Ci0gKiAgICAgQVRUTjogTGludXhyYWlkCisgKiAgTWFpbCB0bzogQXZhZ28gVGVjaG5vbG9naWVzLCAzNTAgV2VzdCBUcmltYmxlIFJvYWQsIEJ1aWxkaW5nIDkwLAorICogIFNhbiBKb3NlLCBDYWxpZm9ybmlhIDk1MTMxCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTgzLDE0ICsxODUsMTUgQEAKIAkJLyogTmV3IFJhaWQgbWFwIHdpbGwgbm90IHNldCB0b3RhbFNpemUsIHNvIGtlZXAgZXhwZWN0ZWQgdmFsdWUKIAkJICogZm9yIGxlZ2FjeSBjb2RlIGluIFZhbGlkYXRlTWFwSW5mbwogCQkgKi8KLQkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9IHNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfRVhUKTsKKwkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9CisJCQljcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0VYVCkpOwogCX0gZWxzZSB7CiAJCWZ3X21hcF9vbGQgPSAoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqKQogCQkJZnVzaW9uLT5sZF9tYXBbKGluc3RhbmNlLT5tYXBfaWQgJiAxKV07CiAJCXBGd1JhaWRNYXAgPSAmZndfbWFwX29sZC0+cmFpZE1hcDsKIAogI2lmIFZEX0VYVF9ERUJVRwotCQlmb3IgKGkgPSAwOyBpIDwgcEZ3UmFpZE1hcC0+bGRDb3VudDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwRndSYWlkTWFwLT5sZENvdW50KTsgaSsrKSB7CiAJCQlkZXZfZGJnKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiKCVkKSA6SW5kZXggMHgleCAiCiAJCQkJIlRhcmdldCBJZCAweCV4IFNlcSBOdW0gMHgleCBTaXplIDAvJWxseFxuIiwKIAkJCQlpbnN0YW5jZS0+dW5pcXVlX2lkLCBpLApAQCAtMjAyLDEyICsyMDUsMTIgQEAKIAogCQltZW1zZXQoZHJ2X21hcCwgMCwgZnVzaW9uLT5kcnZfbWFwX3N6KTsKIAkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9IHBGd1JhaWRNYXAtPnRvdGFsU2l6ZTsKLQkJcERydlJhaWRNYXAtPmxkQ291bnQgPSBwRndSYWlkTWFwLT5sZENvdW50OworCQlwRHJ2UmFpZE1hcC0+bGRDb3VudCA9IChfX2xlMTYpcEZ3UmFpZE1hcC0+bGRDb3VudDsKIAkJcERydlJhaWRNYXAtPmZwUGRJb1RpbWVvdXRTZWMgPSBwRndSYWlkTWFwLT5mcFBkSW9UaW1lb3V0U2VjOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1JBSURNQVBfTE9HSUNBTF9EUklWRVMgKyBNQVhfUkFJRE1BUF9WSUVXUzsgaSsrKQogCQkJcERydlJhaWRNYXAtPmxkVGd0SWRUb0xkW2ldID0KIAkJCQkodTgpcEZ3UmFpZE1hcC0+bGRUZ3RJZFRvTGRbaV07Ci0JCWZvciAoaSA9IDA7IGkgPCBwRHJ2UmFpZE1hcC0+bGRDb3VudDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwRHJ2UmFpZE1hcC0+bGRDb3VudCk7IGkrKykgewogCQkJcERydlJhaWRNYXAtPmxkU3Bhbk1hcFtpXSA9IHBGd1JhaWRNYXAtPmxkU3Bhbk1hcFtpXTsKICNpZiBWRF9FWFRfREVCVUcKIAkJCWRldl9kYmcoJmluc3RhbmNlLT5wZGV2LT5kZXYsCkBAIC0yNjgsNyArMjcxLDcgQEAKIAllbHNlCiAJCWV4cGVjdGVkX3NpemUgPQogCQkJKHNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVApIC0gc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKwotCQkJKHNpemVvZihzdHJ1Y3QgTVJfTERfU1BBTl9NQVApICogbGUzMl90b19jcHUocERydlJhaWRNYXAtPmxkQ291bnQpKSk7CisJCQkoc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKiBsZTE2X3RvX2NwdShwRHJ2UmFpZE1hcC0+bGRDb3VudCkpKTsKIAogCWlmIChsZTMyX3RvX2NwdShwRHJ2UmFpZE1hcC0+dG90YWxTaXplKSAhPSBleHBlY3RlZF9zaXplKSB7CiAJCWRldl9lcnIoJmluc3RhbmNlLT5wZGV2LT5kZXYsICJtYXAgaW5mbyBzdHJ1Y3R1cmUgc2l6ZSAweCV4IGlzIG5vdCBtYXRjaGluZyB3aXRoIGxkIGNvdW50XG4iLApAQCAtMjg0LDcgKzI4Nyw3IEBACiAKIAltcl91cGRhdGVfbG9hZF9iYWxhbmNlX3BhcmFtcyhkcnZfbWFwLCBsYkluZm8pOwogCi0JbnVtX2xkcyA9IGxlMzJfdG9fY3B1KGRydl9tYXAtPnJhaWRNYXAubGRDb3VudCk7CisJbnVtX2xkcyA9IGxlMTZfdG9fY3B1KGRydl9tYXAtPnJhaWRNYXAubGRDb3VudCk7CiAKIAkvKkNvbnZlcnQgUmFpZCBjYXBhYmlsaXR5IHZhbHVlcyB0byBDUFUgYXJjaCAqLwogCWZvciAobGRDb3VudCA9IDA7IGxkQ291bnQgPCBudW1fbGRzOyBsZENvdW50KyspIHsKQEAgLTQ1Nyw3ICs0NjAsNyBAQAogCQkJCXF1YWQgPSAmbWFwLT5yYWlkTWFwLmxkU3Bhbk1hcFtsZF0uCiAJCQkJCXNwYW5CbG9ja1tzcGFuXS4KIAkJCQkJYmxvY2tfc3Bhbl9pbmZvLnF1YWRbaW5mb107Ci0JCQkJaWYgKGxlMzJfdG9fY3B1KHF1YWQtPmRpZmYgPT0gMCkpCisJCQkJaWYgKGxlMzJfdG9fY3B1KHF1YWQtPmRpZmYpID09IDApCiAJCQkJCXJldHVybiBTUEFOX0lOVkFMSUQ7CiAJCQkJaWYgKGxlNjRfdG9fY3B1KHF1YWQtPmxvZ1N0YXJ0KSA8PSByb3cgICYmCiAJCQkJCXJvdyA8PSBsZTY0X3RvX2NwdShxdWFkLT5sb2dFbmQpICAmJgpAQCAtNTIwLDcgKzUyMyw3IEBACiAJCQkJc3Bhbl9zZXQtPnNwYW5fcm93X2RhdGFfd2lkdGgpICogc3Bhbl9zZXQtPmRpZmY7CiAJCWZvciAoc3BhbiA9IDAsIHNwYW5fb2Zmc2V0ID0gMDsgc3BhbiA8IHJhaWQtPnNwYW5EZXB0aDsgc3BhbisrKQogCQkJaWYgKGxlMzJfdG9fY3B1KG1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLnNwYW5CbG9ja1tzcGFuXS4KLQkJCQlibG9ja19zcGFuX2luZm8ubm9FbGVtZW50cyA+PSBpbmZvKzEpKSB7CisJCQkJYmxvY2tfc3Bhbl9pbmZvLm5vRWxlbWVudHMpID49IGluZm8rMSkgewogCQkJCWlmIChzdHJpcF9vZmZzZXQgPj0KIAkJCQkJc3Bhbl9zZXQtPnN0cmlwX29mZnNldFtzcGFuXSkKIAkJCQkJc3Bhbl9vZmZzZXQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5jCmluZGV4IGYzN2VlZDYuLjcxNTU3ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiAgTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEzICBMU0kgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCAgQXZhZ28gVGVjaG5vbG9naWVzCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMTkgKzE1LDIwIEBACiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKgogICogIEZJTEU6IG1lZ2FyYWlkX3Nhc19mdXNpb24uYwogICoKLSAqICBBdXRob3JzOiBMU0kgQ29ycG9yYXRpb24KKyAqICBBdXRob3JzOiBBdmFnbyBUZWNobm9sb2dpZXMKICAqICAgICAgICAgICBTdW1hbnQgUGF0cm8KLSAqICAgICAgICAgICBBZGFtIFJhZGZvcmQgPGxpbnV4cmFpZEBsc2kuY29tPgorICogICAgICAgICAgIEFkYW0gUmFkZm9yZAorICogICAgICAgICAgIEthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KKyAqICAgICAgICAgICBTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgogICoKLSAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICogIFNlbmQgZmVlZGJhY2sgdG86IG1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KICAqCi0gKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKLSAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqICBNYWlsIHRvOiBBdmFnbyBUZWNobm9sb2dpZXMsIDM1MCBXZXN0IFRyaW1ibGUgUm9hZCwgQnVpbGRpbmcgOTAsCisgKiAgU2FuIEpvc2UsIENhbGlmb3JuaWEgOTUxMzEKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC04ODAsNyArODgyLDcgQEAKIAogCW1hcCA9IGZ1c2lvbi0+bGRfZHJ2X21hcFtpbnN0YW5jZS0+bWFwX2lkICYgMV07CiAKLQludW1fbGRzID0gbGUzMl90b19jcHUobWFwLT5yYWlkTWFwLmxkQ291bnQpOworCW51bV9sZHMgPSBsZTE2X3RvX2NwdShtYXAtPnJhaWRNYXAubGRDb3VudCk7CiAKIAlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CiAKQEAgLTEwNjUsNDggKzEwNjcsMTYgQEAKIAkJZ290byBmYWlsX2lvY19pbml0OwogCiAJbWVnYXNhc19kaXNwbGF5X2ludGVsX2JyYW5kaW5nKGluc3RhbmNlKTsKLQlpZiAobWVnYXNhc19nZXRfY3RybF9pbmZvKGluc3RhbmNlLCBpbnN0YW5jZS0+Y3RybF9pbmZvKSkgeworCWlmIChtZWdhc2FzX2dldF9jdHJsX2luZm8oaW5zdGFuY2UpKSB7CiAJCWRldl9lcnIoJmluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkiQ291bGQgbm90IGdldCBjb250cm9sbGVyIGluZm8uIEZhaWwgZnJvbSAlcyAlZFxuIiwKIAkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCWdvdG8gZmFpbF9pb2NfaW5pdDsKIAl9CiAKLQlpbnN0YW5jZS0+c3VwcG9ydG1heDI1NnZkID0KLQkJaW5zdGFuY2UtPmN0cmxfaW5mby0+YWRhcHRlck9wZXJhdGlvbnMzLnN1cHBvcnRNYXhFeHRMRHM7Ci0JLyogQmVsb3cgaXMgYWRkaXRpb25hbCBjaGVjayB0byBhZGRyZXNzIGZ1dHVyZSBGVyBlbmhhbmNlbWVudCAqLwotCWlmIChpbnN0YW5jZS0+Y3RybF9pbmZvLT5tYXhfbGRzID4gNjQpCi0JCWluc3RhbmNlLT5zdXBwb3J0bWF4MjU2dmQgPSAxOwotCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3ZkX2NvdW50ID0gTUVHQVNBU19NQVhfTERfQ0hBTk5FTFMKLQkJCQkJKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7Ci0JaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfcGRfY291bnQgPSBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUwotCQkJCQkqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKLQlpZiAoaW5zdGFuY2UtPnN1cHBvcnRtYXgyNTZ2ZCkgewotCQlpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3ZkX2NvdW50ID0gTUFYX0xPR0lDQUxfRFJJVkVTX0VYVDsKLQkJaW5zdGFuY2UtPmZ3X3N1cHBvcnRlZF9wZF9jb3VudCA9IE1BWF9QSFlTSUNBTF9ERVZJQ0VTOwotCX0gZWxzZSB7Ci0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQgPSBNQVhfTE9HSUNBTF9EUklWRVM7Ci0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQgPSBNQVhfUEhZU0lDQUxfREVWSUNFUzsKLQl9Ci0JZGV2X2luZm8oJmluc3RhbmNlLT5wZGV2LT5kZXYsICJGaXJtd2FyZSBzdXBwb3J0cyAlZCBWRHMgJWQgUERzXG4iCi0JCSJEcml2ZXIgc3VwcG9ydHMgJWQgVkRzICAlZCBQRHNcbiIsCi0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQsCi0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQsCi0JCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3ZkX2NvdW50LAotCQlpbnN0YW5jZS0+ZHJ2X3N1cHBvcnRlZF9wZF9jb3VudCk7Ci0KIAlpbnN0YW5jZS0+ZmxhZ19pZWVlID0gMTsKIAlmdXNpb24tPmZhc3RfcGF0aF9pbyA9IDA7CiAKLQlmdXNpb24tPm9sZF9tYXBfc3ogPQotCQlzaXplb2Yoc3RydWN0IE1SX0ZXX1JBSURfTUFQKSArIChzaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSAqCi0JCShpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3ZkX2NvdW50IC0gMSkpOwotCWZ1c2lvbi0+bmV3X21hcF9zeiA9Ci0JCXNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfRVhUKTsKLQlmdXNpb24tPmRydl9tYXBfc3ogPQotCQlzaXplb2Yoc3RydWN0IE1SX0RSVl9SQUlEX01BUCkgKyAoc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKgotCQkoaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfdmRfY291bnQgLSAxKSk7Ci0KIAlmdXNpb24tPmRydl9tYXBfcGFnZXMgPSBnZXRfb3JkZXIoZnVzaW9uLT5kcnZfbWFwX3N6KTsKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWZ1c2lvbi0+bGRfbWFwW2ldID0gTlVMTDsKQEAgLTExMjEsMTYgKzEwOTEsMTAgQEAKIAkJCQkJZnVzaW9uLT5kcnZfbWFwX3BhZ2VzKTsKIAkJCWdvdG8gZmFpbF9pb2NfaW5pdDsKIAkJfQorCQltZW1zZXQoZnVzaW9uLT5sZF9kcnZfbWFwW2ldLCAwLAorCQkJKCgxIDw8IFBBR0VfU0hJRlQpIDw8IGZ1c2lvbi0+ZHJ2X21hcF9wYWdlcykpOwogCX0KIAotCWZ1c2lvbi0+bWF4X21hcF9zeiA9IG1heChmdXNpb24tPm9sZF9tYXBfc3osIGZ1c2lvbi0+bmV3X21hcF9zeik7Ci0KLQlpZiAoaW5zdGFuY2UtPnN1cHBvcnRtYXgyNTZ2ZCkKLQkJZnVzaW9uLT5jdXJyZW50X21hcF9zeiA9IGZ1c2lvbi0+bmV3X21hcF9zejsKLQllbHNlCi0JCWZ1c2lvbi0+Y3VycmVudF9tYXBfc3ogPSBmdXNpb24tPm9sZF9tYXBfc3o7Ci0KLQogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJZnVzaW9uLT5sZF9tYXBbaV0gPSBkbWFfYWxsb2NfY29oZXJlbnQoJmluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkJCQkgICAgICAgZnVzaW9uLT5tYXhfbWFwX3N6LApAQCAtMTE3Myw5ICsxMTM3LDEwIEBACiAJCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKIHsKICNpZiBkZWZpbmVkKHdyaXRlcSkgJiYgZGVmaW5lZChDT05GSUdfNjRCSVQpCi0JdTY0IHJlcV9kYXRhID0gKCgodTY0KXJlcV9kZXNjX2hpIDw8IDMyKSB8ICh1MzIpcmVxX2Rlc2NfbG8pOworCXU2NCByZXFfZGF0YSA9ICgoKHU2NClsZTMyX3RvX2NwdShyZXFfZGVzY19oaSkgPDwgMzIpIHwKKwkJCWxlMzJfdG9fY3B1KHJlcV9kZXNjX2xvKSk7CiAKLQl3cml0ZXEobGU2NF90b19jcHUocmVxX2RhdGEpLCAmKHJlZ3MpLT5pbmJvdW5kX2xvd19xdWV1ZV9wb3J0KTsKKwl3cml0ZXEocmVxX2RhdGEsICYocmVncyktPmluYm91bmRfbG93X3F1ZXVlX3BvcnQpOwogI2Vsc2UKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMzczLDcgKzEzMzgsNyBAQAogCQkvKiBMb2dpY2FsIGJsb2NrIHJlZmVyZW5jZSB0YWcgKi8KIAkJaW9fcmVxdWVzdC0+Q0RCLkVFRFAzMi5QcmltYXJ5UmVmZXJlbmNlVGFnID0KIAkJCWNwdV90b19iZTMyKHJlZl90YWcpOwotCQlpb19yZXF1ZXN0LT5DREIuRUVEUDMyLlByaW1hcnlBcHBsaWNhdGlvblRhZ01hc2sgPSAweGZmZmY7CisJCWlvX3JlcXVlc3QtPkNEQi5FRURQMzIuUHJpbWFyeUFwcGxpY2F0aW9uVGFnTWFzayA9IGNwdV90b19iZTE2KDB4ZmZmZik7CiAJCWlvX3JlcXVlc3QtPklvRmxhZ3MgPSBjcHVfdG9fbGUxNigzMik7IC8qIFNwZWNpZnkgMzItYnl0ZSBjZGIgKi8KIAogCQkvKiBUcmFuc2ZlciBsZW5ndGggKi8KQEAgLTE3NjksNyArMTczNCw3IEBACiAKIAkJLyogc2V0IFJBSUQgY29udGV4dCB2YWx1ZXMgKi8KIAkJcFJBSURfQ29udGV4dC0+cmVnTG9ja0ZsYWdzICAgICA9IFJFR0lPTl9UWVBFX1NIQVJFRF9SRUFEOwotCQlwUkFJRF9Db250ZXh0LT50aW1lb3V0VmFsdWUgICAgID0gcmFpZC0+ZnBJb1RpbWVvdXRGb3JMZDsKKwkJcFJBSURfQ29udGV4dC0+dGltZW91dFZhbHVlICAgICA9IGNwdV90b19sZTE2KHJhaWQtPmZwSW9UaW1lb3V0Rm9yTGQpOwogCQlwUkFJRF9Db250ZXh0LT5WaXJ0dWFsRGlza1RndElkID0gY3B1X3RvX2xlMTYoZGV2aWNlX2lkKTsKIAkJcFJBSURfQ29udGV4dC0+cmVnTG9ja1Jvd0xCQSAgICA9IDA7CiAJCXBSQUlEX0NvbnRleHQtPnJlZ0xvY2tMZW5ndGggICAgPSAwOwpAQCAtMjI1NCw3ICsyMjE5LDcgQEAKIAkgKiBtZWdhc2FzX2NvbXBsZXRlX2NtZAogCSAqLwogCi0JaWYgKGZyYW1lX2hkci0+ZmxhZ3MgJiBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFKQorCWlmIChmcmFtZV9oZHItPmZsYWdzICYgY3B1X3RvX2xlMTYoTUZJX0ZSQU1FX0RPTlRfUE9TVF9JTl9SRVBMWV9RVUVVRSkpCiAJCWNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFOwogCiAJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKQEAgLTIzODUsNiArMjM1MCw4IEBACiAJCQkJIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBhdCBpbmRleCAlZFxuIiwgaSk7CiAJCQlicmVhazsKIAkJfQorCQltZW1zZXQoaW5zdGFuY2UtPmNyYXNoX2J1ZltpXSwgMCwKKwkJCSgoMSA8PCBQQUdFX1NISUZUKSA8PCBpbnN0YW5jZS0+Y3Jhc2hfYnVmX3BhZ2VzKSk7CiAJfQogCWluc3RhbmNlLT5kcnZfYnVmX2FsbG9jID0gaTsKIH0KQEAgLTI4MzcsMTEgKzI4MDQsMTUgQEAKIAkJCQl9CiAJCQl9CiAKLQkJCWNsZWFyX2JpdChNRUdBU0FTX0ZVU0lPTl9JTl9SRVNFVCwKLQkJCQkgICZpbnN0YW5jZS0+cmVzZXRfZmxhZ3MpOwotCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZW5hYmxlX2ludHIoaW5zdGFuY2UpOwotCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUw7Ci0KKwkJCWlmIChtZWdhc2FzX2dldF9jdHJsX2luZm8oaW5zdGFuY2UpKSB7CisJCQkJZGV2X2luZm8oJmluc3RhbmNlLT5wZGV2LT5kZXYsCisJCQkJCSJGYWlsZWQgZnJvbSAlcyAlZFxuIiwKKwkJCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJCQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPQorCQkJCQlNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworCQkJCW1lZ2FyYWlkX3Nhc19raWxsX2hiYShpbnN0YW5jZSk7CisJCQkJcmV0dmFsID0gRkFJTEVEOworCQkJfQogCQkJLyogUmVzZXQgbG9hZCBiYWxhbmNlIGluZm8gKi8KIAkJCW1lbXNldChmdXNpb24tPmxvYWRfYmFsYW5jZV9pbmZvLCAwLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8pCkBAIC0yODUwLDYgKzI4MjEsMTEgQEAKIAkJCWlmICghbWVnYXNhc19nZXRfbWFwX2luZm8oaW5zdGFuY2UpKQogCQkJCW1lZ2FzYXNfc3luY19tYXBfaW5mbyhpbnN0YW5jZSk7CiAKKwkJCWNsZWFyX2JpdChNRUdBU0FTX0ZVU0lPTl9JTl9SRVNFVCwKKwkJCQkgICZpbnN0YW5jZS0+cmVzZXRfZmxhZ3MpOworCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZW5hYmxlX2ludHIoaW5zdGFuY2UpOworCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUw7CisKIAkJCS8qIFJlc3RhcnQgU1ItSU9WIGhlYXJ0YmVhdCAqLwogCQkJaWYgKGluc3RhbmNlLT5yZXF1ZXN0b3JJZCkgewogCQkJCWlmICghbWVnYXNhc19zcmlvdl9zdGFydF9oZWFydGJlYXQoaW5zdGFuY2UsIDApKQpAQCAtMjg2NiwxNCArMjg0MiwxNCBAQAogCQkJICAgICAgICJzdWNjZXNzZnVsIGZvciBzY3NpJWQuXG4iLAogCQkJCWluc3RhbmNlLT5ob3N0LT5ob3N0X25vKTsKIAotCQkJaWYgKGluc3RhbmNlLT5jcmFzaF9kdW1wX2Rydl9zdXBwb3J0KSB7Ci0JCQkJaWYgKGluc3RhbmNlLT5jcmFzaF9kdW1wX2FwcF9zdXBwb3J0KQotCQkJCQltZWdhc2FzX3NldF9jcmFzaF9kdW1wX3BhcmFtcyhpbnN0YW5jZSwKLQkJCQkJCU1SX0NSQVNIX0JVRl9UVVJOX09OKTsKLQkJCQllbHNlCi0JCQkJCW1lZ2FzYXNfc2V0X2NyYXNoX2R1bXBfcGFyYW1zKGluc3RhbmNlLAotCQkJCQkJTVJfQ1JBU0hfQlVGX1RVUk5fT0ZGKTsKLQkJCX0KKwkJCWlmIChpbnN0YW5jZS0+Y3Jhc2hfZHVtcF9kcnZfc3VwcG9ydCAmJgorCQkJCWluc3RhbmNlLT5jcmFzaF9kdW1wX2FwcF9zdXBwb3J0KQorCQkJCW1lZ2FzYXNfc2V0X2NyYXNoX2R1bXBfcGFyYW1zKGluc3RhbmNlLAorCQkJCQlNUl9DUkFTSF9CVUZfVFVSTl9PTik7CisJCQllbHNlCisJCQkJbWVnYXNhc19zZXRfY3Jhc2hfZHVtcF9wYXJhbXMoaW5zdGFuY2UsCisJCQkJCU1SX0NSQVNIX0JVRl9UVVJOX09GRik7CisKIAkJCXJldHZhbCA9IFNVQ0NFU1M7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmgKaW5kZXggMGQxODNkNS4uNWFiN2RhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5oCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqICBMaW51eCBNZWdhUkFJRCBkcml2ZXIgZm9yIFNBUyBiYXNlZCBSQUlEIGNvbnRyb2xsZXJzCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEyICBMU0kgQ29ycG9yYXRpb24uCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTMgIExTSSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMjAxMy0yMDE0ICBBdmFnbyBUZWNobm9sb2dpZXMKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNCwxOSArMTUsMjAgQEAKICAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqCiAgKiAgRklMRTogbWVnYXJhaWRfc2FzX2Z1c2lvbi5oCiAgKgotICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6IEF2YWdvIFRlY2hub2xvZ2llcwogICogICAgICAgICAgIE1hbm9qIEpvc2UKICAqICAgICAgICAgICBTdW1hbnQgUGF0cm8KKyAqICAgICAgICAgICBLYXNoeWFwIERlc2FpIDxrYXNoeWFwLmRlc2FpQGF2YWdvdGVjaC5jb20+CisgKiAgICAgICAgICAgU3VtaXQgU2F4ZW5hIDxzdW1pdC5zYXhlbmFAYXZhZ290ZWNoLmNvbT4KICAqCi0gKiAgU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KKyAqICBTZW5kIGZlZWRiYWNrIHRvOiBtZWdhcmFpZGxpbnV4LnBkbEBhdmFnb3RlY2guY29tCiAgKgotICogIE1haWwgdG86IExTSSBDb3Jwb3JhdGlvbiwgMTYyMSBCYXJiZXIgTGFuZSwgTWlscGl0YXMsIENBIDk1MDM1Ci0gKiAgICAgQVRUTjogTGludXhyYWlkCisgKiAgTWFpbCB0bzogQXZhZ28gVGVjaG5vbG9naWVzLCAzNTAgV2VzdCBUcmltYmxlIFJvYWQsIEJ1aWxkaW5nIDkwLAorICogIFNhbiBKb3NlLCBDYWxpZm9ybmlhIDk1MTMxCiAgKi8KIAogI2lmbmRlZiBfTUVHQVJBSURfU0FTX0ZVU0lPTl9IXwpAQCAtODM0LDggKzgzNiw2IEBACiAKIAl1MzIgbWF4X21hcF9zejsKIAl1MzIgY3VycmVudF9tYXBfc3o7Ci0JdTMyIG9sZF9tYXBfc3o7Ci0JdTMyIG5ld19tYXBfc3o7CiAJdTMyIGRydl9tYXBfc3o7CiAJdTMyIGRydl9tYXBfcGFnZXM7CiAJdTggZmFzdF9wYXRoX2lvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IGM4MGVkMDQuLjg0MzFlYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTExNzksMTUgKzExNzksMTQgQEAKIH0KIAogLyoqCi0gKiBfc2NzaWhfYWRqdXN0X3F1ZXVlX2RlcHRoIC0gc2V0dGluZyBkZXZpY2UgcXVldWUgZGVwdGgKKyAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAogICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCiAgKgotICoKLSAqIFJldHVybnMgbm90aGluZworICogUmV0dXJucyBxdWV1ZSBkZXB0aC4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9hZGp1c3RfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQorc3RhdGljIGludAorX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCWludCBtYXhfZGVwdGg7CkBAIC0xMjE3LDYzICsxMjE2LDExIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAogIG5vdF9zYXRhOgotCiAJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQogCQltYXhfZGVwdGggPSAxOwogCWlmIChxZGVwdGggPiBtYXhfZGVwdGgpCiAJCXFkZXB0aCA9IG1heF9kZXB0aDsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgcWRlcHRoKTsKLX0KLQotLyoqCi0gKiBfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gc2V0dGluZyBkZXZpY2UgcXVldWUgZGVwdGgKLSAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEBxZGVwdGg6IHJlcXVlc3RlZCBxdWV1ZSBkZXB0aAotICogQHJlYXNvbjogU0NTSV9RREVQVEhfREVGQVVMVC9TQ1NJX1FERVBUSF9RRlVMTC9TQ1NJX1FERVBUSF9SQU1QX1VQCi0gKiAoc2VlIGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBmb3IgZGVmaW5pdGlvbikKLSAqCi0gKiBSZXR1cm5zIHF1ZXVlIGRlcHRoLgotICovCi1zdGF0aWMgaW50Ci1fc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uID09IFNDU0lfUURFUFRIX0RFRkFVTFQgfHwgcmVhc29uID09IFNDU0lfUURFUFRIX1JBTVBfVVApCi0JCV9zY3NpaF9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKLQllbHNlIGlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfUUZVTEwpCi0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpOwotCWVsc2UKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHNkZXYtPmlucXVpcnlfbGVuID4gNykKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAicWRlcHRoKCVkKSwgdGFnZ2VkKCVkKSwgIgotCQkic2ltcGxlKCVkKSwgb3JkZXJlZCglZCksIHNjc2lfbGV2ZWwoJWQpLCBjbWRfcXVlKCVkKVxuIiwKLQkJc2Rldi0+cXVldWVfZGVwdGgsIHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQsIHNkZXYtPnNpbXBsZV90YWdzLAotCQlzZGV2LT5vcmRlcmVkX3RhZ3MsIHNkZXYtPnNjc2lfbGV2ZWwsCi0JCShzZGV2LT5pbnF1aXJ5WzddICYgMikgPj4gMSk7Ci0KLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KLS8qKgotICogX3Njc2loX2NoYW5nZV9xdWV1ZV90eXBlIC0gY2hhbmdpbmcgZGV2aWNlIHF1ZXVlIHRhZyB0eXBlCi0gKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0Ci0gKiBAdGFnX3R5cGU6IHJlcXVlc3RlZCB0YWcgdHlwZQotICoKLSAqIFJldHVybnMgcXVldWUgdGFnIHR5cGUuCi0gKi8KLXN0YXRpYyBpbnQKLV9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKLXsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0JCWlmICh0YWdfdHlwZSkKLQkJCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JfSBlbHNlCi0JCXRhZ190eXBlID0gMDsKLQotCXJldHVybiB0YWdfdHlwZTsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKIH0KIAogLyoqCkBAIC0yMTA0LDcgKzIwNTEsNyBAQAogCQkJICAgIHJfbGV2ZWwsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCwKIAkJCSAgICByYWlkX2RldmljZS0+bnVtX3BkcywgZHMpOwotCQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJCV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKIAkJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLwogCQlpZiAoIWlvYy0+aXNfd2FycGRyaXZlKQogCQkJX3Njc2loX3NldF9sZXZlbChzZGV2LCByYWlkX2RldmljZS0+dm9sdW1lX3R5cGUpOwpAQCAtMjE2OSw3ICsyMTE2LDcgQEAKIAkJX3Njc2loX2Rpc3BsYXlfc2F0YV9jYXBhYmlsaXRpZXMoaW9jLCBoYW5kbGUsIHNkZXYpOwogCiAKLQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogCiAJaWYgKHNzcF90YXJnZXQpIHsKIAkJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CkBAIC0zOTY2LDE2ICszOTEzLDggQEAKIAkJbXBpX2NvbnRyb2wgPSBNUEkyX1NDU0lJT19DT05UUk9MX05PREFUQVRSQU5TRkVSOwogCiAJLyogc2V0IHRhZ3MgKi8KLQlpZiAoIShzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX0ZMQUdTX0lOSVQpKSB7Ci0JCWlmIChzY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJCWlmIChzY21kLT5kZXZpY2UtPm9yZGVyZWRfdGFncykKLQkJCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX09SREVSRURROwotCQkJZWxzZQotCQkJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQkJfSBlbHNlCi0JCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0JfSBlbHNlCi0JCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKKwltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7CisKIAkvKiBNYWtlIHN1cmUgRGV2aWNlIGlzIG5vdCByYWlkIHZvbHVtZS4KIAkgKiBXZSBkbyBub3QgZXhwb3NlIHJhaWQgZnVuY3Rpb25hbGl0eSB0byB1cHBlciBsYXllciBmb3Igd2FycGRyaXZlLgogCSAqLwpAQCAtNzY1Myw3ICs3NTkyLDcgQEAKIAkuc2Nhbl9maW5pc2hlZAkJCT0gX3Njc2loX3NjYW5fZmluaXNoZWQsCiAJLnNjYW5fc3RhcnQJCQk9IF9zY3NpaF9zY2FuX3N0YXJ0LAogCS5jaGFuZ2VfcXVldWVfZGVwdGggCQk9IF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCQk9IF9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBfc2NzaWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyCT0gX3Njc2loX2Rldl9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIJPSBfc2NzaWhfdGFyZ2V0X3Jlc2V0LApAQCAtNzY2Nyw2ICs3NjA2LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycwkJCT0gbXB0MnNhc19ob3N0X2F0dHJzLAogCS5zZGV2X2F0dHJzCQkJPSBtcHQyc2FzX2Rldl9hdHRycywKKwkudHJhY2tfcXVldWVfZGVwdGgJCT0gMSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jCmluZGV4IDg1NzI3NmIuLmEyYjYwOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3Njc2loLmMKQEAgLTEwNTMsOSArMTA1MywxNSBAQAogCXJldHVybiBmb3VuZDsKIH0KIAotCi1zdGF0aWMgdm9pZAotX3Njc2loX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCisvKioKKyAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCisgKgorICogUmV0dXJucyBxdWV1ZSBkZXB0aC4KKyAqLworc3RhdGljIGludAorX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCWludCBtYXhfZGVwdGg7CkBAIC0xMDkwLDYyICsxMDk2LDEwIEBACiAJCW1heF9kZXB0aCA9IDE7CiAJaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKIAkJcWRlcHRoID0gbWF4X2RlcHRoOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiAvKioKLSAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAotICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCi0gKiBAcmVhc29uOiBTQ1NJX1FERVBUSF9ERUZBVUxUL1NDU0lfUURFUFRIX1FGVUxML1NDU0lfUURFUFRIX1JBTVBfVVAKLSAqIChzZWUgaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGZvciBkZWZpbml0aW9uKQotICoKLSAqIFJldHVybnMgcXVldWUgZGVwdGguCi0gKi8KLXN0YXRpYyBpbnQKLV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLCBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfREVGQVVMVCB8fCByZWFzb24gPT0gU0NTSV9RREVQVEhfUkFNUF9VUCkKLQkJX3Njc2loX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwotCWVsc2UgaWYgKHJlYXNvbiA9PSBTQ1NJX1FERVBUSF9RRlVMTCkKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIHFkZXB0aCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoc2Rldi0+aW5xdWlyeV9sZW4gPiA3KQotCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJxZGVwdGgoJWQpLCB0YWdnZWQoJWQpLCAiIFwKLQkJInNpbXBsZSglZCksIG9yZGVyZWQoJWQpLCBzY3NpX2xldmVsKCVkKSwgY21kX3F1ZSglZClcbiIsCi0JCXNkZXYtPnF1ZXVlX2RlcHRoLCBzZGV2LT50YWdnZWRfc3VwcG9ydGVkLCBzZGV2LT5zaW1wbGVfdGFncywKLQkJc2Rldi0+b3JkZXJlZF90YWdzLCBzZGV2LT5zY3NpX2xldmVsLAotCQkoc2Rldi0+aW5xdWlyeVs3XSAmIDIpID4+IDEpOwotCi0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCi0vKioKLSAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZSAtIGNoYW5naW5nIGRldmljZSBxdWV1ZSB0YWcgdHlwZQotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAotICogQHRhZ190eXBlOiByZXF1ZXN0ZWQgdGFnIHR5cGUKLSAqCi0gKiBSZXR1cm5zIHF1ZXVlIHRhZyB0eXBlLgotICovCi1zdGF0aWMgaW50Ci1fc2NzaWhfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnX3R5cGUpCi17Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOwotCQlpZiAodGFnX3R5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQl0YWdfdHlwZSA9IDA7Ci0KLQlyZXR1cm4gdGFnX3R5cGU7Ci19Ci0KLQotLyoqCiAgKiBfc2NzaWhfdGFyZ2V0X2FsbG9jIC0gdGFyZ2V0IGFkZCByb3V0aW5lCiAgKiBAc3RhcmdldDogc2NzaSB0YXJnZXQgc3RydWN0CiAgKgpAQCAtMTc2Miw3ICsxNzE2LDcgQEAKIAkJCSByYWlkX2RldmljZS0+bnVtX3BkcywgZHMpOwogCiAKLQkJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgsIFNDU0lfUURFUFRIX0RFRkFVTFQpOworCQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiAKIC8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KIAkJX3Njc2loX3NldF9sZXZlbChzZGV2LCByYWlkX2RldmljZS0+dm9sdW1lX3R5cGUpOwpAQCAtMTgyOCw3ICsxNzgyLDcgQEAKIAkJX3Njc2loX2Rpc3BsYXlfc2F0YV9jYXBhYmlsaXRpZXMoaW9jLCBoYW5kbGUsIHNkZXYpOwogCiAKLQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogCiAJaWYgKHNzcF90YXJnZXQpIHsKIAkJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CkBAIC0zNTg2LDE2ICszNTQwLDcgQEAKIAkJbXBpX2NvbnRyb2wgPSBNUEkyX1NDU0lJT19DT05UUk9MX05PREFUQVRSQU5TRkVSOwogCiAJLyogc2V0IHRhZ3MgKi8KLQlpZiAoIShzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX0ZMQUdTX0lOSVQpKSB7Ci0JCWlmIChzY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJCWlmIChzY21kLT5kZXZpY2UtPm9yZGVyZWRfdGFncykKLQkJCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX09SREVSRURROwotCQkJZWxzZQotCQkJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQkJfSBlbHNlCi0JCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0JfSBlbHNlCi0JCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKKwltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7CiAKIAlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSAmJgogCSAgICBzY21kLT5jbWRfbGVuICE9IDMyKQpAQCAtNzI4NCw3ICs3MjI5LDcgQEAKIAkuc2Nhbl9maW5pc2hlZAkJCT0gX3Njc2loX3NjYW5fZmluaXNoZWQsCiAJLnNjYW5fc3RhcnQJCQk9IF9zY3NpaF9zY2FuX3N0YXJ0LAogCS5jaGFuZ2VfcXVldWVfZGVwdGgJCT0gX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gX3Njc2loX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfdHlwZQkJPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlLAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IF9zY3NpaF9hYm9ydCwKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSBfc2NzaWhfZGV2X3Jlc2V0LAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlcgk9IF9zY3NpaF90YXJnZXRfcmVzZXQsCkBAIC03Mjk4LDYgKzcyNDMsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQkJPSBtcHQzc2FzX2hvc3RfYXR0cnMsCiAJLnNkZXZfYXR0cnMJCQk9IG1wdDNzYXNfZGV2X2F0dHJzLAorCS50cmFja19xdWV1ZV9kZXB0aAkJPSAxLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jIGIvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYwppbmRleCBlYWNlZTQ4Li5mMTVkZjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKQEAgLTI2LDE4ICsyNiw5IEBACiAKICNpbmNsdWRlICJtdl9zYXMuaCIKIAotc3RhdGljIGludCBsbGRkX21heF9leGVjdXRlX251bSA9IDE7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoY29sbGVjdG9yLCBsbGRkX21heF9leGVjdXRlX251bSwgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoY29sbGVjdG9yLCAiXG4iCi0JIlx0SWYgZ3JlYXRlciB0aGFuIG9uZSwgdGVsbHMgdGhlIFNBUyBMYXllciB0byBydW4gaW4gVGFzayBDb2xsZWN0b3JcbiIKLQkiXHRNb2RlLiAgSWYgMSBvciAwLCB0ZWxscyB0aGUgU0FTIExheWVyIHRvIHJ1biBpbiBEaXJlY3QgTW9kZS5cbiIKLQkiXHRUaGUgbXZzYXMgU0FTIExMREQgc3VwcG9ydHMgYm90aCBtb2Rlcy5cbiIKLQkiXHREZWZhdWx0OiAxIChEaXJlY3QgTW9kZSkuXG4iKTsKLQogaW50IGludGVycnVwdF9jb2FsZXNjaW5nID0gMHg4MDsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXZzX3N0dDsKLXN0cnVjdCBrbWVtX2NhY2hlICptdnNfdGFza19saXN0X2NhY2hlOwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdnNfY2hpcF9pbmZvIG12c19jaGlwc1tdID0gewogCVtjaGlwXzYzMjBdID0JeyAxLCAyLCAweDQwMCwgMTcsIDE2LCA2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzY0NDBdID0JeyAxLCA0LCAweDQwMCwgMTcsIDE2LCA2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LApAQCAtNzYsNiArNjcsOCBAQAogCS50YXJnZXRfZGVzdHJveQkJPSBzYXNfdGFyZ2V0X2Rlc3Ryb3ksCiAJLmlvY3RsCQkJPSBzYXNfaW9jdGwsCiAJLnNob3N0X2F0dHJzCQk9IG12c3RfaG9zdF9hdHRycywKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FzX2RvbWFpbl9mdW5jdGlvbl90ZW1wbGF0ZSBtdnNfdHJhbnNwb3J0X29wcyA9IHsKQEAgLTUxMSwxNCArNTA0LDExIEBACiAKIAlzaGEtPm51bV9waHlzID0gbnJfY29yZSAqIGNoaXBfaW5mby0+bl9waHk7CiAKLQlzaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gbGxkZF9tYXhfZXhlY3V0ZV9udW07Ci0KIAlpZiAobXZpLT5mbGFncyAmIE1WRl9GTEFHX1NPQykKIAkJY2FuX3F1ZXVlID0gTVZTX1NPQ19DQU5fUVVFVUU7CiAJZWxzZQogCQljYW5fcXVldWUgPSBNVlNfQ0hJUF9TTE9UX1NaOwogCi0Jc2hhLT5sbGRkX3F1ZXVlX3NpemUgPSBjYW5fcXVldWU7CiAJc2hvc3QtPnNnX3RhYmxlc2l6ZSA9IG1pbl90KHUxNiwgU0dfQUxMLCBNVlNfTUFYX1NHKTsKIAlzaG9zdC0+Y2FuX3F1ZXVlID0gY2FuX3F1ZXVlOwogCW12aS0+c2hvc3QtPmNtZF9wZXJfbHVuID0gTVZTX1FVRVVFX1NJWkU7CkBAIC04MzEsMTYgKzgyMSw3IEBACiAJaWYgKCFtdnNfc3R0KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW12c190YXNrX2xpc3RfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibXZzX3Rhc2tfbGlzdCIsIHNpemVvZihzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCksCi0JCQkJCQkJIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7Ci0JaWYgKCFtdnNfdGFza19saXN0X2NhY2hlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJbXZfcHJpbnRrKCIlczogbXZzX3Rhc2tfbGlzdF9jYWNoZSBhbGxvYyBmYWlsZWQhIFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCiAJcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtdnNfcGNpX2RyaXZlcik7Ci0KIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKIApAQCAtODU1LDcgKzgzNiw2IEBACiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtdnNfcGNpX2RyaXZlcik7CiAJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG12c19zdHQpOwotCWttZW1fY2FjaGVfZGVzdHJveShtdnNfdGFza19saXN0X2NhY2hlKTsKIH0KIAogc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm12c3RfaG9zdF9hdHRyc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jIGIvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jCmluZGV4IGFjNTJmN2MuLjg1ZDg2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmMKQEAgLTg1Miw0MyArODUyLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCAqbXZzX3Rhc2tfYWxsb2NfbGlzdChpbnQgKm51bSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCXN0cnVjdCBtdnNfdGFza19saXN0ICpmaXJzdCA9IE5VTEw7Ci0KLQlmb3IgKDsgKm51bSA+IDA7IC0tKm51bSkgewotCQlzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCAqbXZzX2xpc3QgPSBrbWVtX2NhY2hlX3phbGxvYyhtdnNfdGFza19saXN0X2NhY2hlLCBnZnBfZmxhZ3MpOwotCi0JCWlmICghbXZzX2xpc3QpCi0JCQlicmVhazsKLQotCQlJTklUX0xJU1RfSEVBRCgmbXZzX2xpc3QtPmxpc3QpOwotCQlpZiAoIWZpcnN0KQotCQkJZmlyc3QgPSBtdnNfbGlzdDsKLQkJZWxzZQotCQkJbGlzdF9hZGRfdGFpbCgmbXZzX2xpc3QtPmxpc3QsICZmaXJzdC0+bGlzdCk7Ci0KLQl9Ci0KLQlyZXR1cm4gZmlyc3Q7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtdnNfdGFza19mcmVlX2xpc3Qoc3RydWN0IG12c190YXNrX2xpc3QgKm12c19saXN0KQotewotCUxJU1RfSEVBRChsaXN0KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICphOwotCXN0cnVjdCBtdnNfdGFza19saXN0ICptbGlzdCA9IE5VTEw7Ci0KLQlfX2xpc3RfYWRkKCZsaXN0LCBtdnNfbGlzdC0+bGlzdC5wcmV2LCAmbXZzX2xpc3QtPmxpc3QpOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgYSwgJmxpc3QpIHsKLQkJbGlzdF9kZWxfaW5pdChwb3MpOwotCQltbGlzdCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCwgbGlzdCk7Ci0JCWttZW1fY2FjaGVfZnJlZShtdnNfdGFza19saXN0X2NhY2hlLCBtbGlzdCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IG12c190YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLCBnZnBfdCBnZnBfZmxhZ3MsCitzdGF0aWMgaW50IG12c190YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLCBnZnBfdCBnZnBfZmxhZ3MsCiAJCQkJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24sIGludCBpc190bWYsCiAJCQkJc3RydWN0IG12c190bWZfdGFzayAqdG1mKQogewpAQCAtOTEyLDc0ICs4NzYsOSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBtdnNfY29sbGVjdG9yX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sIGdmcF90IGdmcF9mbGFncywKLQkJCQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbiwgaW50IGlzX3RtZiwKLQkJCQlzdHJ1Y3QgbXZzX3RtZl90YXNrICp0bWYpCitpbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBnZnBfdCBnZnBfZmxhZ3MpCiB7Ci0Jc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHRhc2stPmRldjsKLQlzdHJ1Y3QgbXZzX3Bydl9pbmZvICptcGkgPSBkZXYtPnBvcnQtPmhhLT5sbGRkX2hhOwotCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gTlVMTDsKLQlzdHJ1Y3Qgc2FzX3Rhc2sgKnQgPSB0YXNrOwotCXN0cnVjdCBtdnNfdGFza19saXN0ICptdnNfbGlzdCA9IE5VTEwsICphOwotCUxJU1RfSEVBRChxKTsKLQlpbnQgcGFzc1syXSA9IHswfTsKLQl1MzIgcmMgPSAwOwotCXUzMiBuID0gbnVtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotCi0JbXZzX2xpc3QgPSBtdnNfdGFza19hbGxvY19saXN0KCZuLCBnZnBfZmxhZ3MpOwotCWlmIChuKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG12cyBhbGxvYyBsaXN0IGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfbGlzdDsKLQl9Ci0KLQlfX2xpc3RfYWRkKCZxLCBtdnNfbGlzdC0+bGlzdC5wcmV2LCAmbXZzX2xpc3QtPmxpc3QpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmcSwgbGlzdCkgewotCQlhLT50YXNrID0gdDsKLQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LCBzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJnEgLCBsaXN0KSB7Ci0KLQkJdCA9IGEtPnRhc2s7Ci0JCW12aSA9ICgoc3RydWN0IG12c19kZXZpY2UgKil0LT5kZXYtPmxsZGRfZGV2KS0+bXZpX2luZm87Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm12aS0+bG9jaywgZmxhZ3MpOwotCQlyYyA9IG12c190YXNrX3ByZXAodCwgbXZpLCBpc190bWYsIHRtZiwgJnBhc3NbbXZpLT5pZF0pOwotCQlpZiAocmMpCi0JCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBtdmktPmRldiwgIm12c2FzIGV4ZWMgZmFpbGVkWyVkXSFcbiIsIHJjKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKGxpa2VseShwYXNzWzBdKSkKLQkJCU1WU19DSElQX0RJU1AtPnN0YXJ0X2RlbGl2ZXJ5KG1waS0+bXZpWzBdLAotCQkJCShtcGktPm12aVswXS0+dHhfcHJvZCAtIDEpICYgKE1WU19DSElQX1NMT1RfU1ogLSAxKSk7Ci0KLQlpZiAobGlrZWx5KHBhc3NbMV0pKQotCQkJTVZTX0NISVBfRElTUC0+c3RhcnRfZGVsaXZlcnkobXBpLT5tdmlbMV0sCi0JCQkJKG1waS0+bXZpWzFdLT50eF9wcm9kIC0gMSkgJiAoTVZTX0NISVBfU0xPVF9TWiAtIDEpKTsKLQotCWxpc3RfZGVsX2luaXQoJnEpOwotCi1mcmVlX2xpc3Q6Ci0JaWYgKG12c19saXN0KQotCQltdnNfdGFza19mcmVlX2xpc3QobXZzX2xpc3QpOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLAotCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCXN0cnVjdCBtdnNfZGV2aWNlICptdmlfZGV2ID0gdGFzay0+ZGV2LT5sbGRkX2RldjsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzID0gbXZpX2Rldi0+bXZpX2luZm8tPnNhczsKLQotCWlmIChzYXMtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtIDwgMikKLQkJcmV0dXJuIG12c190YXNrX2V4ZWModGFzaywgbnVtLCBnZnBfZmxhZ3MsIE5VTEwsIDAsIE5VTEwpOwotCWVsc2UKLQkJcmV0dXJuIG12c19jb2xsZWN0b3JfdGFza19leGVjKHRhc2ssIG51bSwgZ2ZwX2ZsYWdzLCBOVUxMLCAwLCBOVUxMKTsKKwlyZXR1cm4gbXZzX3Rhc2tfZXhlYyh0YXNrLCBnZnBfZmxhZ3MsIE5VTEwsIDAsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBtdnNfc2xvdF9mcmVlKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcnhfZGVzYykKQEAgLTE0MTEsNyArMTMxMCw3IEBACiAJCXRhc2stPnNsb3dfdGFzay0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBNVlNfVEFTS19USU1FT1VUKkhaOwogCQlhZGRfdGltZXIoJnRhc2stPnNsb3dfdGFzay0+dGltZXIpOwogCi0JCXJlcyA9IG12c190YXNrX2V4ZWModGFzaywgMSwgR0ZQX0tFUk5FTCwgTlVMTCwgMSwgdG1mKTsKKwkJcmVzID0gbXZzX3Rhc2tfZXhlYyh0YXNrLCBHRlBfS0VSTkVMLCBOVUxMLCAxLCB0bWYpOwogCiAJCWlmIChyZXMpIHsKIAkJCWRlbF90aW1lcigmdGFzay0+c2xvd190YXNrLT50aW1lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmgKaW5kZXggZDZiMTlkYy4uZGM0MDljMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuaApAQCAtNjUsNyArNjUsNiBAQAogZXh0ZXJuIHN0cnVjdCBtdnNfaW5mbyAqdGd0X212aTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXZzX2Rpc3BhdGNoIG12c182NHh4X2Rpc3BhdGNoOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdnNfZGlzcGF0Y2ggbXZzXzk0eHhfZGlzcGF0Y2g7Ci1leHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKm12c190YXNrX2xpc3RfY2FjaGU7CiAKICNkZWZpbmUgREVWX0lTX0VYUEFOREVSKHR5cGUpCVwKIAkoKHR5cGUgPT0gU0FTX0VER0VfRVhQQU5ERVJfREVWSUNFKSB8fCAodHlwZSA9PSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRSkpCkBAIC00NDAsMTIgKzQzOSw2IEBACiAJaW50IG5fZWxlbTsKIH07CiAKLXN0cnVjdCBtdnNfdGFza19saXN0IHsKLQlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotCiAvKioqKioqKioqKioqKioqKioqKiogZnVuY3Rpb24gcHJvdG90eXBlICoqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgbXZzX2dldF9zYXNfYWRkcih2b2lkICpidWYsIHUzMiBidWZsZW4pOwogdm9pZCBtdnNfdGFnX2NsZWFyKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgdGFnKTsKQEAgLTQ2Miw4ICs0NTUsNyBAQAogCQkgICAgICB1MzIgb2ZmX2hpLCB1NjQgc2FzX2FkZHIpOwogdm9pZCBtdnNfc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CiBpbnQgbXZzX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGxvbmcgdGltZSk7Ci1pbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLAotCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKTsKK2ludCBtdnNfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGdmcF90IGdmcF9mbGFncyk7CiBpbnQgbXZzX2Fib3J0X3Rhc2soc3RydWN0IHNhc190YXNrICp0YXNrKTsKIGludCBtdnNfYWJvcnRfdGFza19zZXQoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiwgdTggKmx1bik7CiBpbnQgbXZzX2NsZWFyX2FjYShzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LCB1OCAqbHVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYyBiL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYwppbmRleCBhNzMwNWZmLi41YjkzZWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCkBAIC03OTk3LDEwICs3OTk3LDcgQEAKIAlpZiAoZGVwdGhfdG9fdXNlID4gTUFYX1RBR1MpCiAJCWRlcHRoX3RvX3VzZSA9IE1BWF9UQUdTOwogCi0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2aWNlLAotCQkJCShkZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgPwotCQkJCSBNU0dfU0lNUExFX1RBRyA6IDApLAotCQkJCWRlcHRoX3RvX3VzZSk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2aWNlLCBkZXB0aF90b191c2UpOwogCiAJLyoKIAkqKglTaW5jZSB0aGUgcXVldWUgZGVwdGggaXMgbm90IHR1bmFibGUgdW5kZXIgTGludXgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NkL29zZF91bGQuYyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCmluZGV4IDkyY2RkNGIuLjI0M2VhYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCkBAIC01NDAsOSArNTQwLDkgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIG9zZF9kcml2ZXIgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZ2VuZHJ2ID0gewogCQkubmFtZQkJPSBvc2RfbmFtZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucHJvYmUJCT0gb3NkX3Byb2JlLAogCQkucmVtb3ZlCQk9IG9zZF9yZW1vdmUsCiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zc3QuYyBiL2RyaXZlcnMvc2NzaS9vc3N0LmMKaW5kZXggZGZmMzdhMjUuLjUwMzMyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtMTcyLDkgKzE3Miw5IEBACiBzdGF0aWMgaW50IG9zc3RfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kcml2ZXIgb3NzdF90ZW1wbGF0ZSA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5nZW5kcnYgPSB7CiAJCS5uYW1lCQk9ICAib3NzdCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnByb2JlCQk9IG9zc3RfcHJvYmUsCiAJCS5yZW1vdmUJCT0gb3NzdF9yZW1vdmUsCiAJfQpAQCAtMjU5LDkgKzI1OSwxMCBAQAogCQkgICBTUnBudC0+Y21kWzBdLCBTUnBudC0+Y21kWzFdLCBTUnBudC0+Y21kWzJdLAogCQkgICBTUnBudC0+Y21kWzNdLCBTUnBudC0+Y21kWzRdLCBTUnBudC0+Y21kWzVdKTsKIAkJaWYgKHNjb2RlKSBwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBTZW5zZTogJTAyeCwgQVNDOiAlMDJ4LCBBU0NROiAlMDJ4XG4iLAotCQkJICAgICAgIAluYW1lLCBzY29kZSwgc2Vuc2VbMTJdLCBzZW5zZVsxM10pOworCQkJCSAgbmFtZSwgc2NvZGUsIHNlbnNlWzEyXSwgc2Vuc2VbMTNdKTsKIAkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKQotCQkJX19zY3NpX3ByaW50X3NlbnNlKCJvc3N0ICIsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCX0KIAllbHNlCiAjZW5kaWYKQEAgLTI3NSw3ICsyNzYsOCBAQAogCQkgU1JwbnQtPmNtZFswXSAhPSBURVNUX1VOSVRfUkVBRFkpKSB7IC8qIEFibm9ybWFsIGNvbmRpdGlvbnMgZm9yIHRhcGUgKi8KIAkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczpXOiBDb21tYW5kIHdpdGggc2Vuc2UgZGF0YTpcbiIsIG5hbWUpOwotCQkJX19zY3NpX3ByaW50X3NlbnNlKCJvc3N0ICIsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQl9CiAJCWVsc2UgewogCQkJc3RhdGljCWludAlub3R5ZXRwcmludGVkID0gMTsKQEAgLTMzMjUsMTkgKzMzMjcsMTggQEAKIC8qIExvY2sgb3IgdW5sb2NrIHRoZSBkcml2ZSBkb29yLiBEb24ndCB1c2Ugd2hlbiBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0IGFsbG9jYXRlZC4gKi8KIHN0YXRpYyBpbnQgZG9fZG9vcl9sb2NrKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIGludCBkb19sb2NrKQogewotCWludCByZXR2YWwsIGNtZDsKKwlpbnQgcmV0dmFsOwogCi0JY21kID0gZG9fbG9jayA/IFNDU0lfSU9DVExfRE9PUkxPQ0sgOiBTQ1NJX0lPQ1RMX0RPT1JVTkxPQ0s7CiAjaWYgREVCVUcKIAlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiAlc29ja2luZyBkcml2ZSBkb29yLlxuIiwgdGFwZV9uYW1lKFNUcCksIGRvX2xvY2sgPyAiTCIgOiAiVW5sIik7CiAjZW5kaWYKLQlyZXR2YWwgPSBzY3NpX2lvY3RsKFNUcC0+ZGV2aWNlLCBjbWQsIE5VTEwpOwotCWlmICghcmV0dmFsKSB7CisKKwlyZXR2YWwgPSBzY3NpX3NldF9tZWRpdW1fcmVtb3ZhbChTVHAtPmRldmljZSwKKwkJCWRvX2xvY2sgPyBTQ1NJX1JFTU9WQUxfUFJFVkVOVCA6IFNDU0lfUkVNT1ZBTF9BTExPVyk7CisJaWYgKCFyZXR2YWwpCiAJCVNUcC0+ZG9vcl9sb2NrZWQgPSBkb19sb2NrID8gU1RfTE9DS0VEX0VYUExJQ0lUIDogU1RfVU5MT0NLRUQ7Ci0JfQotCWVsc2UgeworCWVsc2UKIAkJU1RwLT5kb29yX2xvY2tlZCA9IFNUX0xPQ0tfRkFJTFM7Ci0JfQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQ5NjcsMTAgKzQ5NjgsMTAgQEAKIAkgKiBtYXkgdHJ5IGFuZCB0YWtlIHRoZSBkZXZpY2Ugb2ZmbGluZSwgaW4gd2hpY2ggY2FzZSBhbGwgZnVydGhlcgogCSAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHByb2hpYml0ZWQuCiAJICovCi0JaWYoICFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoU1RwLT5kZXZpY2UpICkgewotCQlyZXR2YWwgPSAoLUVOWElPKTsKKwlyZXR2YWwgPSBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoU1RwLT5kZXZpY2UsIGNtZF9pbiwKKwkJCWZpbGUtPmZfZmxhZ3MgJiBPX05ERUxBWSk7CisJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7Ci0JfQogCiAJY21kX3R5cGUgPSBfSU9DX1RZUEUoY21kX2luKTsKIAljbWRfbnIgICA9IF9JT0NfTlIoY21kX2luKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wYXMxNi5jIGIvZHJpdmVycy9zY3NpL3BhczE2LmMKaW5kZXggODBiYWNiNS4uZTgxZWFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BhczE2LmMKKysrIGIvZHJpdmVycy9zY3NpL3BhczE2LmMKQEAgLTEsNiArMSw0IEBACi0jZGVmaW5lIEFVVE9TRU5TRQogI2RlZmluZSBQU0VVRE9fRE1BCi0jZGVmaW5lIEZPTwogI2RlZmluZSBVTlNBRkUgIC8qIE5vdCB1bnNhZmUgZm9yIFBBUzE2IC0tIHVzZSBpdCAqLwogI2RlZmluZSBQREVCVUcgMAogCkBAIC0yNCw0NyArMjIsOSBAQAogICogTWVkaWEgVmlzaW9uCiAgKiAoNTEwKSA3NzAtODYwMAogICogKDgwMCkgMzQ4LTcxMTYKLSAqIAotICogYW5kIAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKIC8qCi0gKiBPcHRpb25zIDogCi0gKiBBVVRPU0VOU0UgLSBpZiBkZWZpbmVkLCBSRVFVRVNUIFNFTlNFIHdpbGwgYmUgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkKLSAqICAgICAgZm9yIGNvbW1hbmRzIHRoYXQgcmV0dXJuIHdpdGggYSBDSEVDSyBDT05ESVRJT04gc3RhdHVzLiAKLSAqCi0gKiBMSU1JVF9UUkFOU0ZFUlNJWkUgLSBpZiBkZWZpbmVkLCBsaW1pdCB0aGUgcHNldWRvLWRtYSB0cmFuc2ZlcnMgdG8gNTEyCi0gKiAgICAgIGJ5dGVzIGF0IGEgdGltZS4gIFNpbmNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgZHVyaW5nCi0gKiAgICAgIHRoZXNlIHRyYW5zZmVycywgd2UgbWlnaHQgbmVlZCB0aGlzIHRvIGdpdmUgcmVhc29uYWJsZSBpbnRlcnJ1cHQKLSAqICAgICAgc2VydmljZSB0aW1lIGlmIHRoZSB0cmFuc2ZlciBzaXplIGdldHMgdG9vIGxhcmdlLgotICoKLSAqIFBTRVVET19ETUEgLSBlbmFibGVzIFBTRVVETy1ETUEgaGFyZHdhcmUsIHNob3VsZCBnaXZlIGEgMy00WCBwZXJmb3JtYW5jZQotICogaW5jcmVhc2UgY29tcGFyZWQgdG8gcG9sbGVkIEkvTy4KLSAqCi0gKiBQQVJJVFkgLSBlbmFibGUgcGFyaXR5IGNoZWNraW5nLiAgTm90IHN1cHBvcnRlZC4KLSAqIAotICogU0NTSTIgLSBlbmFibGUgc3VwcG9ydCBmb3IgU0NTSS1JSSB0YWdnZWQgcXVldWVpbmcuICBVbnRlc3RlZC4KLSAqCi0gKiBVTlNBRkUgLSBsZWF2ZSBpbnRlcnJ1cHRzIGVuYWJsZWQgZHVyaW5nIHBzZXVkby1ETUEgdHJhbnNmZXJzLiAgVGhpcwotICoJICAgIHBhcmFtZXRlciBjb21lcyBmcm9tIHRoZSBOQ1I1MzgwIGNvZGUuICBJdCBpcyBOT1QgdW5zYWZlIHdpdGgKLSAqCSAgICB0aGUgUEFTMTYgYW5kIHlvdSBzaG91bGQgdXNlIGl0LiAgSWYgeW91IGRvbid0IHlvdSB3aWxsIGhhdmUKLSAqCSAgICBhIHByb2JsZW0gd2l0aCBkcm9wcGVkIGNoYXJhY3RlcnMgZHVyaW5nIGhpZ2ggc3BlZWQKLSAqCSAgICBjb21tdW5pY2F0aW9ucyBkdXJpbmcgU0NTSSB0cmFuc2ZlcnMuICBJZiB5b3UgcmVhbGx5IGRvbid0Ci0gKgkgICAgd2FudCB0byB1c2UgVU5TQUZFIHlvdSBjYW4gdHJ5IGRlZmluaW5nIExJTUlUX1RSQU5TRkVSU0laRSBvcgotICoJICAgIHR3aWRkbGUgd2l0aCB0aGUgdHJhbnNmZXIgc2l6ZSBpbiB0aGUgaGlnaCBsZXZlbCBjb2RlLgotICoKLSAqIFVTTEVFUCAtIGVuYWJsZSBzdXBwb3J0IGZvciBkZXZpY2VzIHRoYXQgZG9uJ3QgZGlzY29ubmVjdC4gIFVudGVzdGVkLgotICoKICAqIFRoZSBjYXJkIGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCBpbiBvbmUgb2Ygc2V2ZXJhbCB3YXlzIDogCiAgKiAxLiAgQXV0b3Byb2JlIChkZWZhdWx0KSAtIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBtb2RlbHMgb2YKICAqICAgICB0aGUgUHJvIEF1ZGlvIFNwZWN0cnVtL1N0dWRpbyAxNiwgYW5kIEkgb25seSBoYXZlIG9uZSBvZgpAQCAtMTAyLDEzICs2MiwxMSBAQAogICogICBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIHlvdXIgY2FyZCBub3QgYmVpbmcgcmVjb2duaXplZCwgdXNlCiAgKiAgIHRoZSBMSUxPIGNvbW1hbmQgbGluZSBvdmVycmlkZS4gIFRyeSB0byBnZXQgaXQgcmVjb2duaXplZCB3aXRob3V0CiAgKiAgIGludGVycnVwdHMuICBJZSwgZm9yIGEgYm9hcmQgYXQgdGhlIGRlZmF1bHQgMHgzODggYmFzZSBwb3J0LAotICogICBib290OiBsaW51eCBwYXMxNj0weDM4OCwyNTUKKyAqICAgYm9vdDogbGludXggcGFzMTY9MHgzODgsMAogICoKLSAqICAgU0NTSV9JUlFfTk9ORSAoMjU1KSBzaG91bGQgYmUgc3BlY2lmaWVkIGZvciBubyBpbnRlcnJ1cHQsCisgKiAgIE5PX0lSUSAoMCkgc2hvdWxkIGJlIHNwZWNpZmllZCBmb3Igbm8gaW50ZXJydXB0LAogICogICBJUlFfQVVUTyAoMjU0KSB0byBhdXRvcHJvYmUgZm9yIGFuIElSUSBsaW5lIGlmIG92ZXJyaWRkZW4KICAqICAgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAqCi0gKiAgIChJUlFfQVVUTyA9PSAyNTQsIFNDU0lfSVJRX05PTkUgPT0gMjU1IGluIE5DUjUzODAuaCkKICAqLwogIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTIzLDE1ICs4MSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlICJwYXMxNi5oIgogI2RlZmluZSBBVVRPUFJPQkVfSVJRCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogCiAKLXN0YXRpYyBpbnQgcGFzX21heGkgPSAwOwotc3RhdGljIGludCBwYXNfd21heGkgPSAwOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHBhczE2X2FkZHIgPSAwOwogc3RhdGljIGludCBwYXMxNl9pcnEgPSAwOwogIApAQCAtMzM3LDYgKzI5Miw3IEBACiB9CiAKIAorI2lmbmRlZiBNT0RVTEUKIC8qCiAgKiBGdW5jdGlvbiA6IHBhczE2X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQogICoKQEAgLTM0NywxMCArMzAzLDEzIEBACiAgKgogICovCiAKLXZvaWQgX19pbml0IHBhczE2X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQorc3RhdGljIGludCBfX2luaXQgcGFzMTZfc2V0dXAoY2hhciAqc3RyKQogewogICAgIHN0YXRpYyBpbnQgY29tbWFuZGxpbmVfY3VycmVudCA9IDA7CiAgICAgaW50IGk7CisgICAgaW50IGludHNbMTBdOworCisgICAgZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKICAgICBpZiAoaW50c1swXSAhPSAyKSAKIAlwcmludGsoInBhczE2X3NldHVwIDogdXNhZ2UgcGFzMTY9aW9fcG9ydCxpcnFcbiIpOwogICAgIGVsc2UgCkBAIC0zNjQsOCArMzIzLDEyIEBACiAJCX0KIAkgICAgKytjb21tYW5kbGluZV9jdXJyZW50OwogCX0KKyAgICByZXR1cm4gMTsKIH0KIAorX19zZXR1cCgicGFzMTY9IiwgcGFzMTZfc2V0dXApOworI2VuZGlmCisKIC8qIAogICogRnVuY3Rpb24gOiBpbnQgcGFzMTZfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogICoKQEAgLTM3OSw3ICszNDIsNyBAQAogICoKICAqLwogCi1pbnQgX19pbml0IHBhczE2X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKK3N0YXRpYyBpbnQgX19pbml0IHBhczE2X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogewogICAgIHN0YXRpYyBpbnQgY3VycmVudF9vdmVycmlkZSA9IDA7CiAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGN1cnJlbnRfYmFzZSA9IDA7CkBAIC0zODcsMTAgKzM1MCw2IEBACiAgICAgdW5zaWduZWQgc2hvcnQgaW9fcG9ydDsKICAgICBpbnQgIGNvdW50OwogCi0gICAgdHBudC0+cHJvY19uYW1lID0gInBhczE2IjsKLSAgICB0cG50LT5zaG93X2luZm8gPSBwYXMxNl9zaG93X2luZm87Ci0gICAgdHBudC0+d3JpdGVfaW5mbyA9IHBhczE2X3dyaXRlX2luZm87Ci0KICAgICBpZiAocGFzMTZfYWRkciAhPSAwKSB7CiAJb3ZlcnJpZGVzWzBdLmlvX3BvcnQgPSBwYXMxNl9hZGRyOwogCS8qCkBAIC00NTIsMTUgKzQxMSwxOSBAQAogCWVsc2UgCiAJICAgIGluc3RhbmNlLT5pcnEgPSBOQ1I1MzgwX3Byb2JlX2lycShpbnN0YW5jZSwgUEFTMTZfSVJRUyk7CiAKLQlpZiAoaW5zdGFuY2UtPmlycSAhPSBTQ1NJX0lSUV9OT05FKSAKKwkvKiBDb21wYXRpYmlsaXR5IHdpdGggZG9jdW1lbnRlZCBOQ1I1MzgwIGtlcm5lbCBwYXJhbWV0ZXJzICovCisJaWYgKGluc3RhbmNlLT5pcnEgPT0gMjU1KQorCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROworCisJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCSAgICBpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgcGFzMTZfaW50ciwgMCwKIAkJCSAgICAicGFzMTYiLCBpbnN0YW5jZSkpIHsKIAkJcHJpbnRrKCJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwgCiAJCSAgICBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7Ci0JCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOworCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROwogCSAgICB9IAogCi0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkgeworCWlmIChpbnN0YW5jZS0+aXJxID09IE5PX0lSUSkgewogCSAgICBwcmludGsoInNjc2klZCA6IGludGVycnVwdHMgbm90IGVuYWJsZWQuIGZvciBiZXR0ZXIgaW50ZXJhY3RpdmUgcGVyZm9ybWFuY2UsXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJICAgIHByaW50aygic2NzaSVkIDogcGxlYXNlIGp1bXBlciB0aGUgYm9hcmQgZm9yIGEgZnJlZSBJUlEuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJICAgIC8qIERpc2FibGUgNTM4MCBpbnRlcnJ1cHRzLCBsZWF2ZSBkcml2ZSBwYXJhbXMgdGhlIHNhbWUgKi8KQEAgLTQ3MiwxNyArNDM1LDYgQEAKIAlwcmludGsoInNjc2klZCA6IGlycSA9ICVkXG4iLCBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7CiAjZW5kaWYKIAotCXByaW50aygic2NzaSVkIDogYXQgMHglMDR4IiwgaW5zdGFuY2UtPmhvc3Rfbm8sIChpbnQpIAotCSAgICBpbnN0YW5jZS0+aW9fcG9ydCk7Ci0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKLQkgICAgcHJpbnRrICgiIGludGVycnVwdHMgZGlzYWJsZWQiKTsKLQllbHNlIAotCSAgICBwcmludGsgKCIgaXJxICVkIiwgaW5zdGFuY2UtPmlycSk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgIENNRF9QRVJfTFVOPSVkIHJlbGVhc2U9JWQiLAotCSAgICBDQU5fUVVFVUUsIENNRF9QRVJfTFVOLCBQQVMxNl9QVUJMSUNfUkVMRUFTRSk7Ci0JTkNSNTM4MF9wcmludF9vcHRpb25zKGluc3RhbmNlKTsKLQlwcmludGsoIlxuIik7Ci0KIAkrK2N1cnJlbnRfb3ZlcnJpZGU7CiAJKytjb3VudDsKICAgICB9CkBAIC01MDksOCArNDYxLDggQEAKICAqIGFuZCBtYXRjaGluZyB0aGUgSF9DX1MgY29vcmRpbmF0ZXMgdG8gd2hhdCBET1MgdXNlcy4KICAqLwogCi1pbnQgcGFzMTZfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqZGV2LAotCQlzZWN0b3JfdCBjYXBhY2l0eSwgaW50ICogaXApCitzdGF0aWMgaW50IHBhczE2X2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgKmlwKQogewogICBpbnQgc2l6ZSA9IGNhcGFjaXR5OwogICBpcFswXSA9IDY0OwpAQCAtNTQ3LDYgKzQ5OSw3IEBACiAJUF9EQVRBX1JFR19PRkZTRVQpOwogICAgIHJlZ2lzdGVyIGludCBpID0gbGVuOwogICAgIGludCBpaSA9IDA7CisgICAgc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CiAKICAgICB3aGlsZSAoICEoaW5iKGluc3RhbmNlLT5pb19wb3J0ICsgUF9TVEFUVVNfUkVHX09GRlNFVCkgJiBQX1NUX1JEWSkgKQogCSArK2lpOwpAQCAtNTU5LDggKzUxMiw4IEBACiAJICAgIGluc3RhbmNlLT5ob3N0X25vKTsKIAlyZXR1cm4gLTE7CiAgICAgfQotICAgaWYgKGlpID4gcGFzX21heGkpCi0gICAgICBwYXNfbWF4aSA9IGlpOworICAgIGlmIChpaSA+IGhvc3RkYXRhLT5zcGluX21heF9yKQorICAgICAgICBob3N0ZGF0YS0+c3Bpbl9tYXhfciA9IGlpOwogICAgIHJldHVybiAwOwogfQogCkBAIC01ODMsNiArNTM2LDcgQEAKICAgICByZWdpc3RlciB1bnNpZ25lZCBzaG9ydCByZWcgPSAoaW5zdGFuY2UtPmlvX3BvcnQgKyBQX0RBVEFfUkVHX09GRlNFVCk7CiAgICAgcmVnaXN0ZXIgaW50IGkgPSBsZW47CiAgICAgaW50IGlpID0gMDsKKyAgICBzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKIAogICAgIHdoaWxlICggISgoaW5iKGluc3RhbmNlLT5pb19wb3J0ICsgUF9TVEFUVVNfUkVHX09GRlNFVCkpICYgUF9TVF9SRFkpICkKIAkgKytpaTsKQEAgLTU5NSw4ICs1NDksOCBAQAogCSAgICBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoaWkgPiBwYXNfbWF4aSkKLQkgcGFzX3dtYXhpID0gaWk7CisgICAgaWYgKGlpID4gaG9zdGRhdGEtPnNwaW5fbWF4X3cpCisgICAgICAgIGhvc3RkYXRhLT5zcGluX21heF93ID0gaWk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTYwNCw3ICs1NTgsNyBAQAogCiBzdGF0aWMgaW50IHBhczE2X3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7Ci0JaWYgKHNob3N0LT5pcnEpCisJaWYgKHNob3N0LT5pcnEgIT0gTk9fSVJRKQogCQlmcmVlX2lycShzaG9zdC0+aXJxLCBzaG9zdCk7CiAJTkNSNTM4MF9leGl0KHNob3N0KTsKIAlpZiAoc2hvc3QtPmlvX3BvcnQgJiYgc2hvc3QtPm5faW9fcG9ydCkKQEAgLTYxNyw2ICs1NzEsMTAgQEAKIAkubmFtZSAgICAgICAgICAgPSAiUHJvIEF1ZGlvIFNwZWN0cnVtLTE2IFNDU0kiLAogCS5kZXRlY3QgICAgICAgICA9IHBhczE2X2RldGVjdCwKIAkucmVsZWFzZSAgICAgICAgPSBwYXMxNl9yZWxlYXNlLAorCS5wcm9jX25hbWUgICAgICA9ICJwYXMxNiIsCisJLnNob3dfaW5mbyAgICAgID0gcGFzMTZfc2hvd19pbmZvLAorCS53cml0ZV9pbmZvICAgICA9IHBhczE2X3dyaXRlX2luZm8sCisJLmluZm8gICAgICAgICAgID0gcGFzMTZfaW5mbywKIAkucXVldWVjb21tYW5kICAgPSBwYXMxNl9xdWV1ZV9jb21tYW5kLAogCS5laF9hYm9ydF9oYW5kbGVyID0gcGFzMTZfYWJvcnQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyID0gcGFzMTZfYnVzX3Jlc2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BhczE2LmggYi9kcml2ZXJzL3Njc2kvcGFzMTYuaAppbmRleCBhYTUyOGY1Li5jNjEwOWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGFzMTYuaAorKysgYi9kcml2ZXJzL3Njc2kvcGFzMTYuaApAQCAtMTgsMjYgKzE4LDEyIEBACiAgKiBNZWRpYSBWaXNpb24KICAqICg1MTApIDc3MC04NjAwCiAgKiAoODAwKSAzNDgtNzExNgotICogCi0gKiBhbmQgCi0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0CiAgKi8KIAogCiAjaWZuZGVmIFBBUzE2X0gKICNkZWZpbmUgUEFTMTZfSAogCi0jZGVmaW5lIFBBUzE2X1BVQkxJQ19SRUxFQVNFIDMKLQogI2RlZmluZSBQREVCVUdfSU5JVAkweDEKICNkZWZpbmUgUERFQlVHX1RSQU5TRkVSIDB4MgogCkBAIC0xMTQsMTIgKzEwMCw2IEBACiAKIAogI2lmbmRlZiBBU00KLXN0YXRpYyBpbnQgcGFzMTZfYWJvcnQoU2NzaV9DbW5kICopOwotc3RhdGljIGludCBwYXMxNl9iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKLQkJCSAgIHNlY3Rvcl90LCBpbnQqKTsKLXN0YXRpYyBpbnQgcGFzMTZfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7Ci1zdGF0aWMgaW50IHBhczE2X3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCBwYXMxNl9idXNfcmVzZXQoU2NzaV9DbW5kICopOwogCiAjaWZuZGVmIENNRF9QRVJfTFVOCiAjZGVmaW5lIENNRF9QRVJfTFVOIDIKQEAgLTE2MSw2ICsxNDEsNyBAQAogI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgcGFzMTZfcXVldWVfY29tbWFuZAogI2RlZmluZSBOQ1I1MzgwX2Fib3J0IHBhczE2X2Fib3J0CiAjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0IHBhczE2X2J1c19yZXNldAorI2RlZmluZSBOQ1I1MzgwX2luZm8gcGFzMTZfaW5mbwogI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyBwYXMxNl9zaG93X2luZm8KICNkZWZpbmUgTkNSNTM4MF93cml0ZV9pbmZvIHBhczE2X3dyaXRlX2luZm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCmluZGV4IDY2NmJmNWEuLjMyOWFiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKQEAgLTg5LDYgKzg5LDggQEAKIAkudGFyZ2V0X2Rlc3Ryb3kJCT0gc2FzX3RhcmdldF9kZXN0cm95LAogCS5pb2N0bAkJCT0gc2FzX2lvY3RsLAogCS5zaG9zdF9hdHRycwkJPSBwbTgwMDFfaG9zdF9hdHRycywKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIC8qKgpAQCAtNTk5LDggKzYwMSw2IEBACiAJc2hhLT5sbGRkX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXNoYS0+c2FzX2FkZHIgPSAmcG04MDAxX2hhLT5zYXNfYWRkclswXTsKIAlzaGEtPm51bV9waHlzID0gY2hpcF9pbmZvLT5uX3BoeTsKLQlzaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gMTsKLQlzaGEtPmxsZGRfcXVldWVfc2l6ZSA9IFBNODAwMV9DQU5fUVVFVUU7CiAJc2hhLT5jb3JlLnNob3N0ID0gc2hvc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKaW5kZXggNzY1NzBlNi4uYjkzZjI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogICAqLwogI2RlZmluZSBERVZfSVNfR09ORShwbTgwMDFfZGV2KQlcCiAJKCghcG04MDAxX2RldiB8fCAocG04MDAxX2Rldi0+ZGV2X3R5cGUgPT0gU0FTX1BIWV9VTlVTRUQpKSkKLXN0YXRpYyBpbnQgcG04MDAxX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sCitzdGF0aWMgaW50IHBtODAwMV90YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLAogCWdmcF90IGdmcF9mbGFncywgaW50IGlzX3RtZiwgc3RydWN0IHBtODAwMV90bWZfdGFzayAqdG1mKQogewogCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSB0YXNrLT5kZXY7CkBAIC0zNjAsNyArMzYwLDYgQEAKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnQgPSB0YXNrOwogCXN0cnVjdCBwbTgwMDFfY2NiX2luZm8gKmNjYjsKIAl1MzIgdGFnID0gMHhkZWFkYmVlZiwgcmMsIG5fZWxlbSA9IDA7Ci0JdTMyIG4gPSBudW07CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKIAlpZiAoIWRldi0+cG9ydCkgewpAQCAtMzg3LDE4ICszODYsMTIgQEAKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJCQl0LT50YXNrX2RvbmUodCk7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwotCQkJCWlmIChuID4gMSkKLQkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAotCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgewogCQkJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzID0gJnQtPnRhc2tfc3RhdHVzOwogCQkJCXRzLT5yZXNwID0gU0FTX1RBU0tfVU5ERUxJVkVSRUQ7CiAJCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047CiAJCQkJdC0+dGFza19kb25lKHQpOwotCQkJCWlmIChuID4gMSkKLQkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAotCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KQEAgLTQ2MCw5ICs0NTMsNyBAQAogCQl0LT50YXNrX3N0YXRlX2ZsYWdzIHw9IFNBU19UQVNLX0FUX0lOSVRJQVRPUjsKIAkJc3Bpbl91bmxvY2soJnQtPnRhc2tfc3RhdGVfbG9jayk7CiAJCXBtODAwMV9kZXYtPnJ1bm5pbmdfcmVxKys7Ci0JCWlmIChuID4gMSkKLQkJCXQgPSBsaXN0X2VudHJ5KHQtPmxpc3QubmV4dCwgc3RydWN0IHNhc190YXNrLCBsaXN0KTsKLQl9IHdoaWxlICgtLW4pOworCX0gd2hpbGUgKDApOwogCXJjID0gMDsKIAlnb3RvIG91dF9kb25lOwogCkBAIC00ODMsMTQgKzQ3NCwxMSBAQAogICAqIHBtODAwMV9xdWV1ZV9jb21tYW5kIC0gcmVnaXN0ZXIgZm9yIHVwcGVyIGxheWVyIHVzZWQsIGFsbCBJTyBjb21tYW5kcyBzZW50CiAgICogdG8gSEJBIGFyZSBmcm9tIHRoaXMgaW50ZXJmYWNlLgogICAqIEB0YXNrOiB0aGUgdGFzayB0byBiZSBleGVjdXRlLgotICAqIEBudW06IGlmIGNhbl9xdWV1ZSBncmVhdCB0aGFuIDEsIHRoZSB0YXNrIGNhbiBiZSBxdWV1ZWQgdXAuIGZvciBTTVAgdGFzaywKLSAgKiB3ZSBhbHdheXMgZXhlY3V0ZSBvbmUgb25lIHRpbWUKICAgKiBAZ2ZwX2ZsYWdzOiBnZnBfZmxhZ3MKICAgKi8KLWludCBwbTgwMDFfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sCi0JCWdmcF90IGdmcF9mbGFncykKK2ludCBwbTgwMDFfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGdmcF90IGdmcF9mbGFncykKIHsKLQlyZXR1cm4gcG04MDAxX3Rhc2tfZXhlYyh0YXNrLCBudW0sIGdmcF9mbGFncywgMCwgTlVMTCk7CisJcmV0dXJuIHBtODAwMV90YXNrX2V4ZWModGFzaywgZ2ZwX2ZsYWdzLCAwLCBOVUxMKTsKIH0KIAogLyoqCkBAIC03MDgsNyArNjk2LDcgQEAKIAkJdGFzay0+c2xvd190YXNrLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFBNODAwMV9UQVNLX1RJTUVPVVQqSFo7CiAJCWFkZF90aW1lcigmdGFzay0+c2xvd190YXNrLT50aW1lcik7CiAKLQkJcmVzID0gcG04MDAxX3Rhc2tfZXhlYyh0YXNrLCAxLCBHRlBfS0VSTkVMLCAxLCB0bWYpOworCQlyZXMgPSBwbTgwMDFfdGFza19leGVjKHRhc2ssIEdGUF9LRVJORUwsIDEsIHRtZik7CiAKIAkJaWYgKHJlcykgewogCQkJZGVsX3RpbWVyKCZ0YXNrLT5zbG93X3Rhc2stPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5oIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKaW5kZXggZjZiMmFjNS4uOGRkOGI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKQEAgLTYyMyw4ICs2MjMsNyBAQAogCXZvaWQgKmZ1bmNkYXRhKTsKIHZvaWQgcG04MDAxX3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogaW50IHBtODAwMV9zY2FuX2ZpbmlzaGVkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1bnNpZ25lZCBsb25nIHRpbWUpOwotaW50IHBtODAwMV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgY29uc3QgaW50IG51bSwKLQlnZnBfdCBnZnBfZmxhZ3MpOworaW50IHBtODAwMV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIGludCBwbTgwMDFfYWJvcnRfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spOwogaW50IHBtODAwMV9hYm9ydF90YXNrX3NldChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LCB1OCAqbHVuKTsKIGludCBwbTgwMDFfY2xlYXJfYWNhKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYsIHU4ICpsdW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggYmNiNjRlYi4uYjFiMWY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0yNDksMTUgKzI0OSwxMSBAQAogCQkJCSAgICAgIFBNQ1JBSURfVlNFVF9NQVhfU0VDVE9SUyk7CiAJfQogCi0JaWYgKHNjc2lfZGV2LT50YWdnZWRfc3VwcG9ydGVkICYmCi0JICAgIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpIHx8IFJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkpIHsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2NzaV9kZXYsIHNjc2lfZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBNU0dfU0lNUExFX1RBRywKLQkJCQkJc2NzaV9kZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9IGVsc2UgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzY3NpX2RldiwgMCwKLQkJCQkJc2NzaV9kZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9CisJLyoKKwkgKiBXZSBuZXZlciB3YW50IHRvIHJlcG9ydCBUQ1Egc3VwcG9ydCBmb3IgdGhlc2UgdHlwZXMgb2YgZGV2aWNlcy4KKwkgKi8KKwlpZiAoIVJFU19JU19HU0NTSShyZXMtPmNmZ19lbnRyeSkgJiYgIVJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkKKwkJc2NzaV9kZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODksNTUgKzI4NSwxOCBAQAogICogcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGggLSBDaGFuZ2UgdGhlIGRldmljZSdzIHF1ZXVlIGRlcHRoCiAgKiBAc2NzaV9kZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICogQGRlcHRoOiBkZXB0aCB0byBzZXQKLSAqIEByZWFzb246IGNhbGxpbmcgY29udGV4dAogICoKICAqIFJldHVybiB2YWx1ZQogICoJYWN0dWFsIGRlcHRoIHNldAogICovCi1zdGF0aWMgaW50IHBtY3JhaWRfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCBkZXB0aCwKLQkJCQkgICAgICBpbnQgcmVhc29uKQorc3RhdGljIGludCBwbWNyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2LCBpbnQgZGVwdGgpCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAoZGVwdGggPiBQTUNSQUlEX01BWF9DTURfUEVSX0xVTikKIAkJZGVwdGggPSBQTUNSQUlEX01BWF9DTURfUEVSX0xVTjsKLQotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBzY3NpX2dldF90YWdfdHlwZShzY3NpX2RldiksIGRlcHRoKTsKLQotCXJldHVybiBzY3NpX2Rldi0+cXVldWVfZGVwdGg7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBkZXB0aCk7CiB9CiAKIC8qKgotICogcG1jcmFpZF9jaGFuZ2VfcXVldWVfdHlwZSAtIENoYW5nZSB0aGUgZGV2aWNlJ3MgcXVldWUgdHlwZQotICogQHNjc2lfZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEB0YWc6IHR5cGUgb2YgdGFncyB0byB1c2UKLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKglhY3R1YWwgcXVldWUgdHlwZSBzZXQKLSAqLwotc3RhdGljIGludCBwbWNyYWlkX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCB0YWcpCi17Ci0Jc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKLQotCXJlcyA9IChzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqKXNjc2lfZGV2LT5ob3N0ZGF0YTsKLQotCWlmICgocmVzKSAmJiBzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCAmJgotCSAgICAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSB8fCBSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkpKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNjc2lfZGV2LCB0YWcpOwotCi0JCWlmICh0YWcpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzY3NpX2Rldiwgc2NzaV9kZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzY3NpX2Rldiwgc2NzaV9kZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnID0gMDsKLQotCXJldHVybiB0YWc7Ci19Ci0KLQotLyoqCiAgKiBwbWNyYWlkX2luaXRfY21kYmxrIC0gaW5pdGlhbGl6ZXMgYSBjb21tYW5kIGJsb2NrCiAgKgogICogQGNtZDogcG9pbnRlciB0byBzdHJ1Y3QgcG1jcmFpZF9jbWQgdG8gYmUgaW5pdGlhbGl6ZWQKQEAgLTMxNzUsMzYgKzMxMzQsNiBAQAogfQogCiAvKioKLSAqIHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzIC0gVHJhbnNsYXRlIFNQSSBRLVRhZ3MgdG8gdGFzayBhdHRyaWJ1dGVzCi0gKiBAc2NzaV9jbWQ6ICAgc2NzaSBjb21tYW5kIHN0cnVjdAotICoKLSAqIFJldHVybiB2YWx1ZQotICoJICBudW1iZXIgb2YgdGFncyBvciAwIGlmIHRoZSB0YXNrIGlzIG5vdCB0YWdnZWQKLSAqLwotc3RhdGljIHU4IHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kKQotewotCWNoYXIgdGFnWzJdOwotCXU4IHJjID0gMDsKLQotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coc2NzaV9jbWQsIHRhZykpIHsKLQkJc3dpdGNoICh0YWdbMF0pIHsKLQkJY2FzZSBNU0dfU0lNUExFX1RBRzoKLQkJCXJjID0gVEFTS19UQUdfU0lNUExFOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX0hFQURfVEFHOgotCQkJcmMgPSBUQVNLX1RBR19RVUVVRV9IRUFEOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJcmMgPSBUQVNLX1RBR19PUkRFUkVEOwotCQkJYnJlYWs7Ci0JCX07Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0KLS8qKgogICogcG1jcmFpZF9pbml0X2lvYWRscyAtIGluaXRpYWxpemVzIElPQURMIHJlbGF0ZWQgZmllbGRzIGluIElPQVJDQgogICogQGNtZDogcG1jcmFpZCBjb21tYW5kIHN0cnVjdAogICogQHNnY291bnQ6IGNvdW50IG9mIHNjYXR0ZXItZ2F0aGVyIGVsZW1lbnRzCkBAIC0zNTU5LDcgKzM0ODgsOSBAQAogCQl9CiAKIAkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCB8PSBOT19MSU5LX0RFU0NTOwotCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MxIHw9IHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzKHNjc2lfY21kKTsKKworCQlpZiAoc2NzaV9jbWQtPmZsYWdzICYgU0NNRF9UQUdHRUQpCisJCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MxIHw9IFRBU0tfVEFHX1NJTVBMRTsKIAogCQlpZiAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSkKIAkJCWlvYXJjYi0+cmVxdWVzdF9mbGFnczEgfD0gREVMQVlfQUZURVJfUkVTRVQ7CkBAIC00MzIwLDcgKzQyNTEsNyBAQAogCS5zbGF2ZV9jb25maWd1cmUgPSBwbWNyYWlkX3NsYXZlX2NvbmZpZ3VyZSwKIAkuc2xhdmVfZGVzdHJveSA9IHBtY3JhaWRfc2xhdmVfZGVzdHJveSwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlICA9IHBtY3JhaWRfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmNoYW5nZV9xdWV1ZV90eXBlICA9IHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUsCiAJLmNhbl9xdWV1ZSA9IFBNQ1JBSURfTUFYX0lPX0NNRCwKIAkudGhpc19pZCA9IC0xLAogCS5zZ190YWJsZXNpemUgPSBQTUNSQUlEX01BWF9JT0FETFMsCkBAIC00MzI5LDcgKzQyNjAsOCBAQAogCS5jbWRfcGVyX2x1biA9IFBNQ1JBSURfTUFYX0NNRF9QRVJfTFVOLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycyA9IHBtY3JhaWRfaG9zdF9hdHRycywKLQkucHJvY19uYW1lID0gUE1DUkFJRF9EUklWRVJfTkFNRQorCS5wcm9jX25hbWUgPSBQTUNSQUlEX0RSSVZFUl9OQU1FLAorCS51c2VfYmxrX3RhZ3MgPSAxLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wczNyb20uYyBiL2RyaXZlcnMvc2NzaS9wczNyb20uYwppbmRleCBlZjIzZmFiLi5iM2I0OGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcHMzcm9tLmMKKysrIGIvZHJpdmVycy9zY3NpL3BzM3JvbS5jCkBAIC0yMjAsMTAgKzIyMCw2IEBACiAJdW5zaWduZWQgY2hhciBvcGNvZGU7CiAJaW50IHJlczsKIAotI2lmZGVmIERFQlVHCi0Jc2NzaV9wcmludF9jb21tYW5kKGNtZCk7Ci0jZW5kaWYKLQogCXByaXYtPmN1cnJfY21kID0gY21kOwogCWNtZC0+c2NzaV9kb25lID0gZG9uZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggMTU4MDIwNS4uYzY4YTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC0xMjI0LDEwICsxMjI0LDkgQEAKIAogCWlmIChkZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgJiYKIAkgICAgKGhhLT5idXNfc2V0dGluZ3NbYnVzXS5xdGFnX2VuYWJsZXMgJiAoQklUXzAgPDwgdGFyZ2V0KSkpIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2aWNlLCBNU0dfT1JERVJFRF9UQUcsCi0JCQkJCWhhLT5idXNfc2V0dGluZ3NbYnVzXS5oaXdhdCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldmljZSwgaGEtPmJ1c19zZXR0aW5nc1tidXNdLmhpd2F0KTsKIAl9IGVsc2UgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXZpY2UsIDAsIGRlZmF1bHRfZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXZpY2UsIGRlZmF1bHRfZGVwdGgpOwogCX0KIAogCW52LT5idXNbYnVzXS50YXJnZXRbdGFyZ2V0XS5wYXJhbWV0ZXIuZW5hYmxlX3N5bmMgPSBkZXZpY2UtPnNkdHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKaW5kZXggYjE4NjVhNy4uNzY4NmJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaApAQCAtNzUyLDggKzc1Miw2IEBACiBleHRlcm4gaW50IHFsYTgwNDRfcmRfZGlyZWN0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIGNvbnN0IHVpbnQzMl90IGNyYl9yZWcpOwogZXh0ZXJuIHZvaWQgcWxhODA0NF93cl9kaXJlY3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwKIAkJCSAgICAgIGNvbnN0IHVpbnQzMl90IGNyYl9yZWcsIGNvbnN0IHVpbnQzMl90IHZhbHVlKTsKLWV4dGVybiBpbmxpbmUgdm9pZCBxbGE4MDQ0X3NldF9xc250X3JlYWR5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwotZXh0ZXJuIGlubGluZSB2b2lkIHFsYTgwNDRfbmVlZF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwogZXh0ZXJuIGludCBxbGE4MDQ0X2RldmljZV9zdGF0ZV9oYW5kbGVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwogZXh0ZXJuIHZvaWQgcWxhODA0NF9jbGVhcl9xc250X3JlYWR5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwogZXh0ZXJuIHZvaWQgcWxhODA0NF9jbGVhcl9kcnZfYWN0aXZlKHN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCmluZGV4IGYwZWRiMDcuLmExYWIyNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwpAQCAtMzI1LDcgKzMyNSw2IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYTsKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwogCXN0cnVjdCByc3BfcXVlICpyc3A7Ci0JY2hhcgkJdGFnWzJdOwogCiAJLyogU2V0dXAgZGV2aWNlIHBvaW50ZXJzLiAqLwogCXJldCA9IDA7CkBAIC00MDQsMjYgKzQwMyw3IEBACiAJLyogU2V0IHRhcmdldCBJRCBhbmQgTFVOIG51bWJlciovCiAJU0VUX1RBUkdFVF9JRChoYSwgY21kX3BrdC0+dGFyZ2V0LCBzcC0+ZmNwb3J0LT5sb29wX2lkKTsKIAljbWRfcGt0LT5sdW4gPSBjcHVfdG9fbGUxNihjbWQtPmRldmljZS0+bHVuKTsKLQotCS8qIFVwZGF0ZSB0YWdnZWQgcXVldWluZyBtb2RpZmllciAqLwotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQljbWRfcGt0LT5jb250cm9sX2ZsYWdzID0KLQkJCSAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KENGX0hFQURfVEFHKTsKLQkJCWJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJY21kX3BrdC0+Y29udHJvbF9mbGFncyA9Ci0JCQkgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihDRl9PUkRFUkVEX1RBRyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNtZF9wa3QtPmNvbnRyb2xfZmxhZ3MgPQotCQkJICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0ZfU0lNUExFX1RBRyk7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWNtZF9wa3QtPmNvbnRyb2xfZmxhZ3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KENGX1NJTVBMRV9UQUcpOwotCX0KKwljbWRfcGt0LT5jb250cm9sX2ZsYWdzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihDRl9TSU1QTEVfVEFHKTsKIAogCS8qIExvYWQgU0NTSSBjb21tYW5kIHBhY2tldC4gKi8KIAltZW1jcHkoY21kX3BrdC0+c2NzaV9jZGIsIGNtZC0+Y21uZCwgY21kLT5jbWRfbGVuKTsKQEAgLTEyNjQsNyArMTI0NCw2IEBACiAJdWludDE2X3QJCWZjcF9jbW5kX2xlbjsKIAlzdHJ1Y3QgZmNwX2NtbmQJCSpmY3BfY21uZDsKIAlkbWFfYWRkcl90CQljcmNfY3R4X2RtYTsKLQljaGFyCQkJdGFnWzJdOwogCiAJY21kID0gR0VUX0NNRF9TUChzcCk7CiAKQEAgLTEzNTYsMjUgKzEzMzUsNyBAQAogCWNtZF9wa3QtPmZjcF9jbW5kX2RzZWdfYWRkcmVzc1sxXSA9IGNwdV90b19sZTMyKAogCSAgICBNU0QoY3JjX2N0eF9kbWEgKyBDUkNfQ09OVEVYVF9GQ1BDTU5EX09GRikpOwogCWZjcF9jbW5kLT50YXNrX21hbmFnZW1lbnQgPSAwOwotCi0JLyoKLQkgKiBVcGRhdGUgdGFnZ2VkIHF1ZXVpbmcgbW9kaWZpZXIgaWYgdXNpbmcgY29tbWFuZCB0YWcgcXVldWluZwotCSAqLwotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCSAgICBmY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPSBUU0tfSEVBRF9PRl9RVUVVRTsKLQkJICAgIGJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkgICAgZmNwX2NtbmQtPnRhc2tfYXR0cmlidXRlID0gVFNLX09SREVSRUQ7Ci0JCSAgICBicmVhazsKLQkJZGVmYXVsdDoKLQkJICAgIGZjcF9jbW5kLT50YXNrX2F0dHJpYnV0ZSA9IFRTS19TSU1QTEU7Ci0JCSAgICBicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWZjcF9jbW5kLT50YXNrX2F0dHJpYnV0ZSA9IFRTS19TSU1QTEU7Ci0JfQorCWZjcF9jbW5kLT50YXNrX2F0dHJpYnV0ZSA9IFRTS19TSU1QTEU7CiAKIAljbWRfcGt0LT5mY3BfcnNwX2RzZWdfbGVuID0gMDsgLyogTGV0IHJlc3BvbnNlIGNvbWUgaW4gc3RhdHVzIGlvY2IgKi8KIApAQCAtMTQ5NSw3ICsxNDU2LDYgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBHRVRfQ01EX1NQKHNwKTsKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gc3AtPmZjcG9ydC0+dmhhOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwotCWNoYXIJCXRhZ1syXTsKIAogCS8qIFNldHVwIGRldmljZSBwb2ludGVycy4gKi8KIAlyZXQgPSAwOwpAQCAtMTU3OCwyMiArMTUzOCw3IEBACiAJaW50X3RvX3Njc2lsdW4oY21kLT5kZXZpY2UtPmx1biwgJmNtZF9wa3QtPmx1bik7CiAJaG9zdF90b19mY3Bfc3dhcCgodWludDhfdCAqKSZjbWRfcGt0LT5sdW4sIHNpemVvZihjbWRfcGt0LT5sdW4pKTsKIAotCS8qIFVwZGF0ZSB0YWdnZWQgcXVldWluZyBtb2RpZmllciAtLSBkZWZhdWx0IGlzIFRTS19TSU1QTEUgKDApLiAqLwotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQljbWRfcGt0LT50YXNrID0gVFNLX0hFQURfT0ZfUVVFVUU7Ci0JCQlicmVhazsKLQkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJCWNtZF9wa3QtPnRhc2sgPSBUU0tfT1JERVJFRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkgICAgY21kX3BrdC0+dGFzayA9IFRTS19TSU1QTEU7Ci0JCSAgICBicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWNtZF9wa3QtPnRhc2sgPSBUU0tfU0lNUExFOwotCX0KKwljbWRfcGt0LT50YXNrID0gVFNLX1NJTVBMRTsKIAogCS8qIExvYWQgU0NTSSBjb21tYW5kIHBhY2tldC4gKi8KIAltZW1jcHkoY21kX3BrdC0+ZmNwX2NkYiwgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOwpAQCAtMjMxMCw3ICsyMjU1LDYgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0gTlVMTDsKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwID0gTlVMTDsKLQljaGFyIHRhZ1syXTsKIAogCS8qIFNldHVwIGRldmljZSBwb2ludGVycy4gKi8KIAlyZXQgPSAwOwpAQCAtMjQ4OSwyMiArMjQzMyw2IEBACiAJCWVsc2UgaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQogCQkJY3R4LT5mY3BfY21uZC0+YWRkaXRpb25hbF9jZGJfbGVuIHw9IDI7CiAKLQkJLyoKLQkJICogVXBkYXRlIHRhZ2dlZCBxdWV1aW5nIG1vZGlmaWVyIC0tIGRlZmF1bHQgaXMgVFNLX1NJTVBMRSAoMCkuCi0JCSAqLwotCQlpZiAoc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnKSkgewotCQkJc3dpdGNoICh0YWdbMF0pIHsKLQkJCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQkJY3R4LT5mY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPQotCQkJCSAgICBUU0tfSEVBRF9PRl9RVUVVRTsKLQkJCQlicmVhazsKLQkJCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6Ci0JCQkJY3R4LT5mY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPQotCQkJCSAgICBUU0tfT1JERVJFRDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCiAJCS8qIFBvcHVsYXRlIHRoZSBGQ1BfUFJJTy4gKi8KIAkJaWYgKGhhLT5mbGFncy5mY3BfcHJpb19lbmFibGVkKQogCQkJY3R4LT5mY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgfD0KQEAgLTI1NjUsMjAgKzI0OTMsNiBAQAogCQlob3N0X3RvX2ZjcF9zd2FwKCh1aW50OF90ICopJmNtZF9wa3QtPmx1biwKIAkJICAgIHNpemVvZihjbWRfcGt0LT5sdW4pKTsKIAotCQkvKgotCQkgKiBVcGRhdGUgdGFnZ2VkIHF1ZXVpbmcgbW9kaWZpZXIgLS0gZGVmYXVsdCBpcyBUU0tfU0lNUExFICgwKS4KLQkJICovCi0JCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCQlzd2l0Y2ggKHRhZ1swXSkgewotCQkJY2FzZSBIRUFEX09GX1FVRVVFX1RBRzoKLQkJCQljbWRfcGt0LT50YXNrID0gVFNLX0hFQURfT0ZfUVVFVUU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJCWNtZF9wa3QtPnRhc2sgPSBUU0tfT1JERVJFRDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCiAJCS8qIFBvcHVsYXRlIHRoZSBGQ1BfUFJJTy4gKi8KIAkJaWYgKGhhLT5mbGFncy5mY3BfcHJpb19lbmFibGVkKQogCQkJY21kX3BrdC0+dGFzayB8PSBzcC0+ZmNwb3J0LT5mY3BfcHJpbyA8PCAzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21yLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbXIuYwppbmRleCA4MDg2NzU5Li42ZDE5MGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbXIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbXIuYwpAQCAtMzA4Niw3ICszMDg2LDYgQEAKIAlzdHJ1Y3QgY21kX3R5cGVfN19meDAwICpjbWRfcGt0OwogCXN0cnVjdCBjbWRfdHlwZV83X2Z4MDAgbGNtZF9wa3Q7CiAJc3RydWN0IHNjc2lfbHVuIGxsdW47Ci0JY2hhcgkJdGFnWzJdOwogCiAJLyogU2V0dXAgZGV2aWNlIHBvaW50ZXJzLiAqLwogCXJldCA9IDA7CkBAIC0zMTU3LDE4ICszMTU2LDYgQEAKIAlob3N0X3RvX2FkYXAoKHVpbnQ4X3QgKikmbGx1biwgKHVpbnQ4X3QgKikmbGNtZF9wa3QubHVuLAogCSAgICBzaXplb2YobGNtZF9wa3QubHVuKSk7CiAKLQkvKiBVcGRhdGUgdGFnZ2VkIHF1ZXVpbmcgbW9kaWZpZXIgLS0gZGVmYXVsdCBpcyBUU0tfU0lNUExFICgwKS4gKi8KLQlpZiAoc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCQkJbGNtZF9wa3QudGFzayA9IFRTS19IRUFEX09GX1FVRVVFOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6Ci0JCQlsY21kX3BrdC50YXNrID0gVFNLX09SREVSRUQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQogCS8qIExvYWQgU0NTSSBjb21tYW5kIHBhY2tldC4gKi8KIAlob3N0X3RvX2FkYXAoY21kLT5jbW5kLCBsY21kX3BrdC5mY3BfY2RiLCBzaXplb2YobGNtZF9wa3QuZmNwX2NkYikpOwogCWxjbWRfcGt0LmJ5dGVfY291bnQgPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2NzaV9idWZmbGVuKGNtZCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254Mi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254Mi5jCmluZGV4IDI0YTg1MjguLmVkNGQ2YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueDIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbngyLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCXJldHVybjsKIH0KIAotaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogcWxhODA0NF9zZXRfcXNudF9yZWFkeShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhKQogewogCXVpbnQzMl90IHFzbnRfc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IGRiM2RiZDkuLjZiNGQ5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0yMzYsOCArMjM2LDYgQEAKIHN0YXRpYyBpbnQgcWxhMnh4eF9laF9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKIHN0YXRpYyBpbnQgcWxhMnh4eF9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKLXN0YXRpYyBpbnQgcWxhMngwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCwgaW50KTsKLXN0YXRpYyBpbnQgcWxhMngwMF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfY2xlYXJfZHJ2X2FjdGl2ZShzdHJ1Y3QgcWxhX2h3X2RhdGEgKik7CiBzdGF0aWMgdm9pZCBxbGEyeDAwX2ZyZWVfZGV2aWNlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIHN0YXRpYyB2b2lkIHFsYTgzeHhfZGlzYWJsZV9sYXNlcihzY3NpX3FsYV9ob3N0X3QgKnZoYSk7CkBAIC0yNTksOCArMjU3LDggQEAKIAkuc2xhdmVfZGVzdHJveQkJPSBxbGEyeHh4X3NsYXZlX2Rlc3Ryb3ksCiAJLnNjYW5fZmluaXNoZWQJCT0gcWxhMnh4eF9zY2FuX2ZpbmlzaGVkLAogCS5zY2FuX3N0YXJ0CQk9IHFsYTJ4eHhfc2Nhbl9zdGFydCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gcWxhMngwMF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCT0gcWxhMngwMF9jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZAkJPSAtMSwKIAkuY21kX3Blcl9sdW4JCT0gMywKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCkBAIC0yNzAsNiArMjY4LDggQEAKIAkuc2hvc3RfYXR0cnMJCT0gcWxhMngwMF9ob3N0X2F0dHJzLAogCiAJLnN1cHBvcnRlZF9tb2RlCQk9IE1PREVfSU5JVElBVE9SLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqcWxhMnh4eF90cmFuc3BvcnRfdGVtcGxhdGUgPSBOVUxMOwpAQCAtMTQwNSwxMCArMTQwNSw3IEBACiAJaWYgKElTX1QxMF9QSV9DQVBBQkxFKHZoYS0+aHcpKQogCQlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMHg3KTsKIAotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCByZXEtPm1heF9xX2RlcHRoKTsKLQllbHNlCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgcmVxLT5tYXhfcV9kZXB0aCk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcmVxLT5tYXhfcV9kZXB0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MTgsNzYgKzE0MTUsNiBAQAogCXNkZXYtPmhvc3RkYXRhID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgcWxhMngwMF9oYW5kbGVfcXVldWVfZnVsbChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCi17Ci0JZmNfcG9ydF90ICpmY3BvcnQgPSAoc3RydWN0IGZjX3BvcnQgKikgc2Rldi0+aG9zdGRhdGE7Ci0KLQlpZiAoIXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpKQotCQlyZXR1cm47Ci0KLQlxbF9kYmcocWxfZGJnX2lvLCBmY3BvcnQtPnZoYSwgMHgzMDI5LAotCSAgICAiUXVldWUgZGVwdGggYWRqdXN0ZWQtZG93biB0byAlZCBmb3IgbmV4dXM9JWxkOiVkOiVsbHUuXG4iLAotCSAgICBzZGV2LT5xdWV1ZV9kZXB0aCwgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwotfQotCi1zdGF0aWMgdm9pZCBxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCi17Ci0JZmNfcG9ydF90ICpmY3BvcnQgPSBzZGV2LT5ob3N0ZGF0YTsKLQlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gZmNwb3J0LT52aGE7Ci0Jc3RydWN0IHJlcV9xdWUgKnJlcSA9IE5VTEw7Ci0KLQlyZXEgPSB2aGEtPnJlcTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuOwotCi0JaWYgKHJlcS0+bWF4X3FfZGVwdGggPD0gc2Rldi0+cXVldWVfZGVwdGggfHwgcmVxLT5tYXhfcV9kZXB0aCA8IHFkZXB0aCkKLQkJcmV0dXJuOwotCi0JaWYgKHNkZXYtPm9yZGVyZWRfdGFncykKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxZGVwdGgpOwotCWVsc2UKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX1NJTVBMRV9UQUcsIHFkZXB0aCk7Ci0KLQlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAyYSwKLQkgICAgIlF1ZXVlIGRlcHRoIGFkanVzdGVkLXVwIHRvICVkIGZvciBuZXh1cz0lbGQ6JWQ6JWxsdS5cbiIsCi0JICAgIHNkZXYtPnF1ZXVlX2RlcHRoLCBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc2Rldi0+aWQsIHNkZXYtPmx1bik7Ci19Ci0KLXN0YXRpYyBpbnQKLXFsYTJ4MDBfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXFsYTJ4MDBfaGFuZGxlX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQlxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzZGV2LCBxZGVwdGgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCi1zdGF0aWMgaW50Ci1xbGEyeDAwX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ190eXBlKQotewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIHRhZ190eXBlKTsKLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOwotfQotCiAvKioKICAqIHFsYTJ4MDBfY29uZmlnX2RtYV9hZGRyZXNzaW5nKCkgLSBDb25maWd1cmUgT1MgRE1BIGFkZHJlc3NpbmcgbWV0aG9kLgogICogQGhhOiBIQSBjb250ZXh0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYwppbmRleCAwOGFiNmRhLi4xNzIyMmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pb2NiLmMKQEAgLTI4MCw3ICsyODAsNiBAQAogCXVpbnQxNl90IHJlcV9jbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50MzJfdCBpbmRleDsKLQljaGFyIHRhZ1syXTsKIAogCS8qIEdldCByZWFsIGx1biBhbmQgYWRhcHRlciAqLwogCWRkYl9lbnRyeSA9IHNyYi0+ZGRiOwpAQCAtMzUyLDE1ICszNTEsNiBAQAogCiAJLyogU2V0IHRhZ2dlZCBxdWV1ZWluZyBjb250cm9sIGZsYWdzICovCiAJY21kX2VudHJ5LT5jb250cm9sX2ZsYWdzIHw9IENGX1NJTVBMRV9UQUc7Ci0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhjbWQsIHRhZykpCi0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgTVNHX0hFQURfVEFHOgotCQkJY21kX2VudHJ5LT5jb250cm9sX2ZsYWdzIHw9IENGX0hFQURfVEFHOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJY21kX2VudHJ5LT5jb250cm9sX2ZsYWdzIHw9IENGX09SREVSRURfVEFHOwotCQkJYnJlYWs7Ci0JCX0KIAogCXFsYTR4eHhfYWR2YW5jZV9yZXFfcmluZ19wdHIoaGEpOwogCXFsYTR4eHhfYnVpbGRfc2NzaV9pb2NicyhzcmIsIGNtZF9lbnRyeSwgdG90X2RzZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCAxOTlmY2Y3Li42ZDI1ODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtMTYyLDEyICsxNjIsOCBAQAogc3RhdGljIGludCBxbGE0eHh4X2VoX3RhcmdldF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogc3RhdGljIGludCBxbGE0eHh4X2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIHN0YXRpYyBpbnQgcWxhNHh4eF9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgaW50IHFsYTR4eHhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyB2b2lkIHFsYTR4eHhfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwogc3RhdGljIHVtb2RlX3QgcWxhNF9hdHRyX2lzX3Zpc2libGUoaW50IHBhcmFtX3R5cGUsIGludCBwYXJhbSk7CiBzdGF0aWMgaW50IHFsYTR4eHhfaG9zdF9yZXNldChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgaW50IHJlc2V0X3R5cGUpOwotc3RhdGljIGludCBxbGE0eHh4X2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsCi0JCQkJICAgICAgaW50IHJlYXNvbik7CiAKIC8qCiAgKiBpU0NTSSBGbGFzaCBEREIgc3lzZnMgZW50cnkgcG9pbnRzCkBAIC0yMDQsMTAgKzIwMCw4IEBACiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHFsYTR4eHhfZWhfaG9zdF9yZXNldCwKIAkuZWhfdGltZWRfb3V0CQk9IHFsYTR4eHhfZWhfY21kX3RpbWVkX291dCwKIAotCS5zbGF2ZV9jb25maWd1cmUJPSBxbGE0eHh4X3NsYXZlX2NvbmZpZ3VyZSwKIAkuc2xhdmVfYWxsb2MJCT0gcWxhNHh4eF9zbGF2ZV9hbGxvYywKLQkuc2xhdmVfZGVzdHJveQkJPSBxbGE0eHh4X3NsYXZlX2Rlc3Ryb3ksCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHFsYTR4eHhfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAogCS50aGlzX2lkCQk9IC0xLAogCS5jbWRfcGVyX2x1bgkJPSAzLApAQCAtMjE4LDYgKzIxMiw3IEBACiAJLnNob3N0X2F0dHJzCQk9IHFsYTR4eHhfaG9zdF9hdHRycywKIAkuaG9zdF9yZXNldAkJPSBxbGE0eHh4X2hvc3RfcmVzZXQsCiAJLnZlbmRvcl9pZAkJPSBTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfUUxPR0lDLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IHFsYTR4eHhfaXNjc2lfdHJhbnNwb3J0ID0gewpAQCAtOTA2MCwzNSArOTA1NSwxNCBAQAogCWRkYiA9IHNlc3MtPmRkX2RhdGE7CiAKIAlzZGV2LT5ob3N0ZGF0YSA9IGRkYjsKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKIAogCWlmIChxbDR4bWF4cWRlcHRoICE9IDAgJiYgcWw0eG1heHFkZXB0aCA8PSAweGZmZmZVKQogCQlxdWV1ZV9kZXB0aCA9IHFsNHhtYXhxZGVwdGg7CiAKLQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBxdWV1ZV9kZXB0aCk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcXVldWVfZGVwdGgpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHFsYTR4eHhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcWxhNHh4eF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIDEpOwotfQotCi1zdGF0aWMgaW50IHFsYTR4eHhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwKLQkJCQkgICAgICBpbnQgcmVhc29uKQotewotCWlmICghcWw0eHFmdWxsdHJhY2tpbmcpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoLCByZWFzb24pOwotfQotCiAvKioKICAqIHFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5IC0gcmV0dXJucyBhbiBhY3RpdmUgc3JiCiAgKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KQEAgLTk4ODgsNiArOTg2Miw5IEBACiB7CiAJaW50IHJldDsKIAorCWlmIChxbDR4cWZ1bGx0cmFja2luZykKKwkJcWxhNHh4eF9kcml2ZXJfdGVtcGxhdGUudHJhY2tfcXVldWVfZGVwdGggPSAxOworCiAJLyogQWxsb2NhdGUgY2FjaGUgZm9yIFNSQnMuICovCiAJc3JiX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJxbGE0eHh4X3NyYnMiLCBzaXplb2Yoc3RydWN0IHNyYiksIDAsCiAJCQkJICAgICAgIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCA3OWM3N2I0Li4xYWQwYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTUyNyw5ICs1MjcsOSBAQAogCSAqCiAJICogMTogbm90aGluZyAobWF0Y2ggY29tcGxldGlvbikKIAkgKgotCSAqIDI6IGxvZyBvcGNvZGUgKyBjb21tYW5kIG9mIGFsbCBjb21tYW5kcworCSAqIDI6IGxvZyBvcGNvZGUgKyBjb21tYW5kIG9mIGFsbCBjb21tYW5kcyArIGNtZCBhZGRyZXNzCiAJICoKLQkgKiAzOiBzYW1lIGFzIDIgcGx1cyBkdW1wIGNtZCBhZGRyZXNzCisJICogMzogc2FtZSBhcyAyCiAJICoKIAkgKiA0OiBzYW1lIGFzIDMgcGx1cyBkdW1wIGV4dHJhIGp1bmsKIAkgKi8KQEAgLTUzNywxMCArNTM3LDggQEAKIAkJbGV2ZWwgPSBTQ1NJX0xPR19MRVZFTChTQ1NJX0xPR19NTFFVRVVFX1NISUZULAogCQkJCSAgICAgICBTQ1NJX0xPR19NTFFVRVVFX0JJVFMpOwogCQlpZiAobGV2ZWwgPiAxKSB7Ci0JCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIlNlbmQ6ICIpOwotCQkJaWYgKGxldmVsID4gMikKLQkJCQlwcmludGsoIjB4JXAgIiwgY21kKTsKLQkJCXByaW50aygiXG4iKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkJCSAgICAiU2VuZDogc2NtZCAweCVwXG4iLCBjbWQpOwogCQkJc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CiAJCQlpZiAobGV2ZWwgPiAzKSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnVmZmVyID0gMHglcCwgYnVmZmxlbiA9ICVkLCIKQEAgLTU2NSw3ICs1NjMsNyBAQAogCSAqCiAJICogMjogc2FtZSBhcyAxIGJ1dCBmb3IgYWxsIGNvbW1hbmQgY29tcGxldGlvbnMuCiAJICoKLQkgKiAzOiBzYW1lIGFzIDIgcGx1cyBkdW1wIGNtZCBhZGRyZXNzCisJICogMzogc2FtZSBhcyAyCiAJICoKIAkgKiA0OiBzYW1lIGFzIDMgcGx1cyBkdW1wIGV4dHJhIGp1bmsKIAkgKi8KQEAgLTU3NCwzOSArNTcyLDEwIEBACiAJCQkJICAgICAgIFNDU0lfTE9HX01MQ09NUExFVEVfQklUUyk7CiAJCWlmICgoKGxldmVsID4gMCkgJiYgKGNtZC0+cmVzdWx0IHx8IGRpc3Bvc2l0aW9uICE9IFNVQ0NFU1MpKSB8fAogCQkgICAgKGxldmVsID4gMSkpIHsKLQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLCAiRG9uZTogIik7Ci0JCQlpZiAobGV2ZWwgPiAyKQotCQkJCXByaW50aygiMHglcCAiLCBjbWQpOwotCQkJLyoKLQkJCSAqIER1bXAgdHJ1bmNhdGVkIHZhbHVlcywgc28gd2UgdXN1YWxseSBmaXQgd2l0aGluCi0JCQkgKiA4MCBjaGFycy4KLQkJCSAqLwotCQkJc3dpdGNoIChkaXNwb3NpdGlvbikgewotCQkJY2FzZSBTVUNDRVNTOgotCQkJCXByaW50aygiU1VDQ0VTU1xuIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE5FRURTX1JFVFJZOgotCQkJCXByaW50aygiUkVUUllcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRERfVE9fTUxRVUVVRToKLQkJCQlwcmludGsoIk1MUVVFVUVcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGQUlMRUQ6Ci0JCQkJcHJpbnRrKCJGQUlMRURcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FT1VUX0VSUk9SOgotCQkJCS8qIAotCQkJCSAqIElmIGNhbGxlZCB2aWEgc2NzaV90aW1lc19vdXQuCi0JCQkJICovCi0JCQkJcHJpbnRrKCJUSU1FT1VUXG4iKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKCJVTktOT1dOXG4iKTsKLQkJCX0KLQkJCXNjc2lfcHJpbnRfcmVzdWx0KGNtZCk7CisJCQlzY3NpX3ByaW50X3Jlc3VsdChjbWQsICJEb25lOiAiLCBkaXNwb3NpdGlvbik7CiAJCQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKIAkJCWlmIChzdGF0dXNfYnl0ZShjbWQtPnJlc3VsdCkgJiBDSEVDS19DT05ESVRJT04pCi0JCQkJc2NzaV9wcmludF9zZW5zZSgiIiwgY21kKTsKKwkJCQlzY3NpX3ByaW50X3NlbnNlKGNtZCk7CiAJCQlpZiAobGV2ZWwgPiAzKQogCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAogCQkJCQkgICAgInNjc2kgaG9zdCBidXN5ICVkIGZhaWxlZCAlZFxuIiwKQEAgLTYzNCw4NyArNjAzLDYgQEAKIEVYUE9SVF9TWU1CT0woc2NzaV9jbWRfZ2V0X3NlcmlhbCk7CiAKIC8qKgotICogc2NzaV9kaXNwYXRjaF9jb21tYW5kIC0gRGlzcGF0Y2ggYSBjb21tYW5kIHRvIHRoZSBsb3ctbGV2ZWwgZHJpdmVyLgotICogQGNtZDogY29tbWFuZCBibG9jayB3ZSBhcmUgZGlzcGF0Y2hpbmcuCi0gKgotICogUmV0dXJuOiBub256ZXJvIHJldHVybiByZXF1ZXN0IHdhcyByZWplY3RlZCBhbmQgZGV2aWNlJ3MgcXVldWUgbmVlZHMgdG8gYmUKLSAqIHBsdWdnZWQuCi0gKi8KLWludCBzY3NpX2Rpc3BhdGNoX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwotCWludCBydG4gPSAwOwotCi0JYXRvbWljX2luYygmY21kLT5kZXZpY2UtPmlvcmVxdWVzdF9jbnQpOwotCi0JLyogY2hlY2sgaWYgdGhlIGRldmljZSBpcyBzdGlsbCB1c2FibGUgKi8KLQlpZiAodW5saWtlbHkoY21kLT5kZXZpY2UtPnNkZXZfc3RhdGUgPT0gU0RFVl9ERUwpKSB7Ci0JCS8qIGluIFNERVZfREVMIHdlIGVycm9yIGFsbCBjb21tYW5kcy4gRElEX05PX0NPTk5FQ1QKLQkJICogcmV0dXJucyBhbiBpbW1lZGlhdGUgZXJyb3IgdXB3YXJkcywgYW5kIHNpZ25hbHMKLQkJICogdGhhdCB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBwcmVzZW50ICovCi0JCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHNjc2kgbGxkIG1hZGUgdGhpcyBkZXZpY2UgYmxvY2tlZC4gKi8KLQlpZiAodW5saWtlbHkoc2NzaV9kZXZpY2VfYmxvY2tlZChjbWQtPmRldmljZSkpKSB7Ci0JCS8qCi0JCSAqIGluIGJsb2NrZWQgc3RhdGUsIHRoZSBjb21tYW5kIGlzIGp1c3QgcHV0IGJhY2sgb24KLQkJICogdGhlIGRldmljZSBxdWV1ZS4gIFRoZSBzdXNwZW5kIHN0YXRlIGhhcyBhbHJlYWR5Ci0JCSAqIGJsb2NrZWQgdGhlIHF1ZXVlIHNvIGZ1dHVyZSByZXF1ZXN0cyBzaG91bGQgbm90Ci0JCSAqIG9jY3VyIHVudGlsIHRoZSBkZXZpY2UgdHJhbnNpdGlvbnMgb3V0IG9mIHRoZQotCQkgKiBzdXNwZW5kIHN0YXRlLgotCQkgKi8KLQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKLQkJCSJxdWV1ZWNvbW1hbmQgOiBkZXZpY2UgYmxvY2tlZFxuIikpOwotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwotCX0KLQotCS8qIFN0b3JlIHRoZSBMVU4gdmFsdWUgaW4gY21uZCwgaWYgbmVlZGVkLiAqLwotCWlmIChjbWQtPmRldmljZS0+bHVuX2luX2NkYikKLQkJY21kLT5jbW5kWzFdID0gKGNtZC0+Y21uZFsxXSAmIDB4MWYpIHwKLQkJCSAgICAgICAoY21kLT5kZXZpY2UtPmx1biA8PCA1ICYgMHhlMCk7Ci0KLQlzY3NpX2xvZ19zZW5kKGNtZCk7Ci0KLQkvKgotCSAqIEJlZm9yZSB3ZSBxdWV1ZSB0aGlzIGNvbW1hbmQsIGNoZWNrIGlmIHRoZSBjb21tYW5kCi0JICogbGVuZ3RoIGV4Y2VlZHMgd2hhdCB0aGUgaG9zdCBhZGFwdGVyIGNhbiBoYW5kbGUuCi0JICovCi0JaWYgKGNtZC0+Y21kX2xlbiA+IGNtZC0+ZGV2aWNlLT5ob3N0LT5tYXhfY21kX2xlbikgewotCQlTQ1NJX0xPR19NTFFVRVVFKDMsIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAotCQkJICAgICAgICJxdWV1ZWNvbW1hbmQgOiBjb21tYW5kIHRvbyBsb25nLiAiCi0JCQkgICAgICAgImNkYl9zaXplPSVkIGhvc3QtPm1heF9jbWRfbGVuPSVkXG4iLAotCQkJICAgICAgIGNtZC0+Y21kX2xlbiwgY21kLT5kZXZpY2UtPmhvc3QtPm1heF9jbWRfbGVuKSk7Ci0JCWNtZC0+cmVzdWx0ID0gKERJRF9BQk9SVCA8PCAxNik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfREVMKSkgewotCQljbWQtPnJlc3VsdCA9IChESURfTk9fQ09OTkVDVCA8PCAxNik7Ci0JCWdvdG8gZG9uZTsKLQotCX0KLQotCXRyYWNlX3Njc2lfZGlzcGF0Y2hfY21kX3N0YXJ0KGNtZCk7Ci0JcnRuID0gaG9zdC0+aG9zdHQtPnF1ZXVlY29tbWFuZChob3N0LCBjbWQpOwotCWlmIChydG4pIHsKLQkJdHJhY2Vfc2NzaV9kaXNwYXRjaF9jbWRfZXJyb3IoY21kLCBydG4pOwotCQlpZiAocnRuICE9IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSAmJgotCQkgICAgcnRuICE9IFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWSkKLQkJCXJ0biA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0KLQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKLQkJCSJxdWV1ZWNvbW1hbmQgOiByZXF1ZXN0IHJlamVjdGVkXG4iKSk7Ci0JfQotCi0JcmV0dXJuIHJ0bjsKLSBkb25lOgotCWNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogc2NzaV9maW5pc2hfY29tbWFuZCAtIGNsZWFudXAgYW5kIHBhc3MgY29tbWFuZCBiYWNrIHRvIHVwcGVyIGxheWVyCiAgKiBAY21kOiB0aGUgY29tbWFuZAogICoKQEAgLTc3MywzMiArNjYxLDE4IEBACiB9CiAKIC8qKgotICogc2NzaV9hZGp1c3RfcXVldWVfZGVwdGggLSBMZXQgbG93IGxldmVsIGRyaXZlcnMgY2hhbmdlIGEgZGV2aWNlJ3MgcXVldWUgZGVwdGgKKyAqIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gY2hhbmdlIGEgZGV2aWNlJ3MgcXVldWUgZGVwdGgKICAqIEBzZGV2OiBTQ1NJIERldmljZSBpbiBxdWVzdGlvbgotICogQHRhZ2dlZDogRG8gd2UgdXNlIHRhZ2dlZCBxdWV1ZWluZyAobm9uLTApIG9yIGRvIHdlIHRyZWF0Ci0gKiAgICAgICAgICB0aGlzIGRldmljZSBhcyBhbiB1bnRhZ2dlZCBkZXZpY2UgKDApCi0gKiBAdGFnczogTnVtYmVyIG9mIHRhZ3MgYWxsb3dlZCBpZiB0YWdnZWQgcXVldWVpbmcgZW5hYmxlZCwKLSAqICAgICAgICBvciBudW1iZXIgb2YgY29tbWFuZHMgdGhlIGxvdyBsZXZlbCBkcml2ZXIgY2FuCi0gKiAgICAgICAgcXVldWUgdXAgaW4gbm9uLXRhZ2dlZCBtb2RlIChhcyBwZXIgY21kX3Blcl9sdW4pLgorICogQGRlcHRoOiBudW1iZXIgb2YgY29tbWFuZHMgYWxsb3dlZCB0byBiZSBxdWV1ZWQgdG8gdGhlIGRyaXZlcgogICoKLSAqIFJldHVybnM6CU5vdGhpbmcKLSAqCi0gKiBMb2NrIFN0YXR1czoJTm9uZSBoZWxkIG9uIGVudHJ5Ci0gKgotICogTm90ZXM6CUxvdyBsZXZlbCBkcml2ZXJzIG1heSBjYWxsIHRoaXMgYXQgYW55IHRpbWUgYW5kIHdlIHdpbGwgZG8KLSAqIAkJdGhlIHJpZ2h0IHRoaW5nIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGlzCi0gKiAJCWN1cnJlbnRseSBhY3RpdmUgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGV2ZW4gaGFzIHRoZQotICogCQljb21tYW5kIGJsb2NrcyBidWlsdCB5ZXQuCisgKiBTZXRzIHRoZSBkZXZpY2UgcXVldWUgZGVwdGggYW5kIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4KICAqLwotdm9pZCBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdnZWQsIGludCB0YWdzKQoraW50IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKgotCSAqIHJlZnVzZSB0byBzZXQgdGFnZ2VkIGRlcHRoIHRvIGFuIHVud29ya2FibGUgc2l6ZQotCSAqLwotCWlmICh0YWdzIDw9IDApCi0JCXJldHVybjsKKwlpZiAoZGVwdGggPD0gMCkKKwkJZ290byBvdXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAKQEAgLTgxMywzNSArNjg3LDE3IEBACiAJICovCiAJaWYgKCFzaG9zdF91c2VfYmxrX21xKHNkZXYtPmhvc3QpICYmICFzZGV2LT5ob3N0LT5icXQpIHsKIAkJaWYgKGJsa19xdWV1ZV90YWdnZWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSkgJiYKLQkJICAgIGJsa19xdWV1ZV9yZXNpemVfdGFncyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCB0YWdzKSAhPSAwKQotCQkJZ290byBvdXQ7CisJCSAgICBibGtfcXVldWVfcmVzaXplX3RhZ3Moc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZGVwdGgpICE9IDApCisJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jc2Rldi0+cXVldWVfZGVwdGggPSB0YWdzOwotCXN3aXRjaCAodGFnZ2VkKSB7Ci0JCWNhc2UgMDoKLQkJCXNkZXYtPm9yZGVyZWRfdGFncyA9IDA7Ci0JCQlzZGV2LT5zaW1wbGVfdGFncyA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBNU0dfT1JERVJFRF9UQUc6Ci0JCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAxOwotCQkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX1NJTVBMRV9UQUc6Ci0JCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAwOwotCQkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAwOwotCQkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAwOwotCQkJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGV2LAotCQkJCSAgICAic2NzaV9hZGp1c3RfcXVldWVfZGVwdGgsIGJhZCBxdWV1ZSB0eXBlLCAiCi0JCQkJICAgICJkaXNhYmxlZFxuIik7Ci0JfQotIG91dDoKKwlzZGV2LT5xdWV1ZV9kZXB0aCA9IGRlcHRoOworb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CiB9Ci1FWFBPUlRfU1lNQk9MKHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKTsKK0VYUE9SVF9TWU1CT0woc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgpOwogCiAvKioKICAqIHNjc2lfdHJhY2tfcXVldWVfZnVsbCAtIHRyYWNrIFFVRVVFX0ZVTEwgZXZlbnRzIHRvIGFkanVzdCBxdWV1ZSBkZXB0aApAQCAtODg1LDE5ICs3NDEsMzIgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKHNkZXYtPmxhc3RfcXVldWVfZnVsbF9kZXB0aCA8IDgpIHsKIAkJLyogRHJvcCBiYWNrIHRvIHVudGFnZ2VkICovCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKKwkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgMCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkKLQlpZiAoc2Rldi0+b3JkZXJlZF90YWdzKQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfT1JERVJFRF9UQUcsIGRlcHRoKTsKLQllbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBkZXB0aCk7Ci0JcmV0dXJuIGRlcHRoOworCisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV90cmFja19xdWV1ZV9mdWxsKTsKIAogLyoqCisgKiBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKCkgLSBDaGFuZ2UgYSBkZXZpY2UncyBxdWV1ZSB0eXBlCisgKiBAc2RldjogICAgIFRoZSBTQ1NJIGRldmljZSB3aG9zZSBxdWV1ZSBkZXB0aCBpcyB0byBjaGFuZ2UKKyAqIEB0YWdfdHlwZTogSWRlbnRpZmllciBmb3IgcXVldWUgdHlwZQorICovCitpbnQgc2NzaV9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKK3sKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCXJldHVybiAwOworCisJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOworCXJldHVybiB0YWdfdHlwZTsKKworfQorRVhQT1JUX1NZTUJPTChzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKTsKKworLyoqCiAgKiBzY3NpX3ZwZF9pbnF1aXJ5IC0gUmVxdWVzdCBhIGRldmljZSBwcm92aWRlIHVzIHdpdGggYSBWUEQgcGFnZQogICogQHNkZXY6IFRoZSBkZXZpY2UgdG8gYXNrCiAgKiBAYnVmZmVyOiBXaGVyZSB0byBwdXQgdGhlIHJlc3VsdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggMjM4ZTA2Zi4uYWE0YjZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC02Myw4ICs2Myw4IEBACiAjaW5jbHVkZSAic2QuaCIKICNpbmNsdWRlICJzY3NpX2xvZ2dpbmcuaCIKIAotI2RlZmluZSBTQ1NJX0RFQlVHX1ZFUlNJT04gIjEuODQiCi1zdGF0aWMgY29uc3QgY2hhciAqc2NzaV9kZWJ1Z192ZXJzaW9uX2RhdGUgPSAiMjAxNDA3MDYiOworI2RlZmluZSBTQ1NJX0RFQlVHX1ZFUlNJT04gIjEuODUiCitzdGF0aWMgY29uc3QgY2hhciAqc2NzaV9kZWJ1Z192ZXJzaW9uX2RhdGUgPSAiMjAxNDEwMjIiOwogCiAjZGVmaW5lIE1ZX05BTUUgInNjc2lfZGVidWciCiAKQEAgLTc1LDE5ICs3NSwyMiBAQAogI2RlZmluZSBVTlJFQ09WRVJFRF9SRUFEX0VSUiAweDExCiAjZGVmaW5lIFBBUkFNRVRFUl9MSVNUX0xFTkdUSF9FUlIgMHgxYQogI2RlZmluZSBJTlZBTElEX09QQ09ERSAweDIwCi0jZGVmaW5lIEFERFJfT1VUX09GX1JBTkdFIDB4MjEKLSNkZWZpbmUgSU5WQUxJRF9DT01NQU5EX09QQ09ERSAweDIwCisjZGVmaW5lIExCQV9PVVRfT0ZfUkFOR0UgMHgyMQogI2RlZmluZSBJTlZBTElEX0ZJRUxEX0lOX0NEQiAweDI0CiAjZGVmaW5lIElOVkFMSURfRklFTERfSU5fUEFSQU1fTElTVCAweDI2CiAjZGVmaW5lIFVBX1JFU0VUX0FTQyAweDI5CiAjZGVmaW5lIFVBX0NIQU5HRURfQVNDIDB4MmEKKyNkZWZpbmUgSU5TVUZGX1JFU19BU0MgMHg1NQorI2RlZmluZSBJTlNVRkZfUkVTX0FTQ1EgMHgzCiAjZGVmaW5lIFBPV0VSX09OX1JFU0VUX0FTQ1EgMHgwCiAjZGVmaW5lIEJVU19SRVNFVF9BU0NRIDB4MgkvKiBzY3NpIGJ1cyByZXNldCBvY2N1cnJlZCAqLwogI2RlZmluZSBNT0RFX0NIQU5HRURfQVNDUSAweDEJLyogbW9kZSBwYXJhbWV0ZXJzIGNoYW5nZWQgKi8KKyNkZWZpbmUgQ0FQQUNJVFlfQ0hBTkdFRF9BU0NRIDB4OQogI2RlZmluZSBTQVZJTkdfUEFSQU1TX1VOU1VQIDB4MzkKICNkZWZpbmUgVFJBTlNQT1JUX1BST0JMRU0gMHg0YgogI2RlZmluZSBUSFJFU0hPTERfRVhDRUVERUQgMHg1ZAogI2RlZmluZSBMT1dfUE9XRVJfQ09ORF9PTiAweDVlCisjZGVmaW5lIE1JU0NPTVBBUkVfVkVSSUZZX0FTQyAweDFkCiAKIC8qIEFkZGl0aW9uYWwgU2Vuc2UgQ29kZSBRdWFsaWZpZXIgKEFTQ1EpICovCiAjZGVmaW5lIEFDS19OQUtfVE8gMHgzCkBAIC0xMzMsNiArMTM2LDcgQEAKICNkZWZpbmUgREVGX1ZJUlRVQUxfR0IgICAwCiAjZGVmaW5lIERFRl9WUERfVVNFX0hPU1ROTyAxCiAjZGVmaW5lIERFRl9XUklURVNBTUVfTEVOR1RIIDB4RkZGRgorI2RlZmluZSBERUZfU1RSSUNUIDAKICNkZWZpbmUgREVMQVlfT1ZFUlJJRERFTiAtOTk5OQogCiAvKiBiaXQgbWFzayB2YWx1ZXMgZm9yIHNjc2lfZGVidWdfb3B0cyAqLwpAQCAtMTc2LDExICsxODAsMTIgQEAKICNkZWZpbmUgU0RFQlVHX1VBX1BPUiAwCQkvKiBQb3dlciBvbiwgcmVzZXQsIG9yIGJ1cyBkZXZpY2UgcmVzZXQgKi8KICNkZWZpbmUgU0RFQlVHX1VBX0JVU19SRVNFVCAxCiAjZGVmaW5lIFNERUJVR19VQV9NT0RFX0NIQU5HRUQgMgotI2RlZmluZSBTREVCVUdfTlVNX1VBUyAzCisjZGVmaW5lIFNERUJVR19VQV9DQVBBQ0lUWV9DSEFOR0VEIDMKKyNkZWZpbmUgU0RFQlVHX05VTV9VQVMgNAogCiAvKiBmb3IgY2hlY2tfcmVhZGluZXNzKCkgKi8KLSNkZWZpbmUgVUFTX09OTFkgMQotI2RlZmluZSBVQVNfVFVSIDAKKyNkZWZpbmUgVUFTX09OTFkgMQkvKiBjaGVjayBmb3IgVUFzIG9ubHkgKi8KKyNkZWZpbmUgVUFTX1RVUiAwCS8qIGlmIG5vIFVBcyB0aGVuIGNoZWNrIGlmIG1lZGlhIGFjY2VzcyBwb3NzaWJsZSAqLwogCiAvKiB3aGVuIDE9PVNDU0lfREVCVUdfT1BUX01FRElVTV9FUlIsIGEgbWVkaXVtIGVycm9yIGlzIHNpbXVsYXRlZCBhdCB0aGlzCiAgKiBzZWN0b3Igb24gcmVhZCBjb21tYW5kczogKi8KQEAgLTIwNiw2ICsyMTEsMzAxIEBACiAjd2FybmluZyAiRXhwZWN0IERFRl9DTURfUEVSX0xVTiA8PSBTQ1NJX0RFQlVHX0NBTlFVRVVFIgogI2VuZGlmCiAKKy8qIFNDU0kgb3Bjb2RlcyAoZmlyc3QgYnl0ZSBvZiBjZGIpIG1hcHBlZCBvbnRvIHRoZXNlIGluZGV4ZXMgKi8KK2VudW0gc2RlYl9vcGNvZGVfaW5kZXggeworCVNERUJfSV9JTlZBTElEX09QQ09ERSA9CTAsCisJU0RFQl9JX0lOUVVJUlkgPSAxLAorCVNERUJfSV9SRVBPUlRfTFVOUyA9IDIsCisJU0RFQl9JX1JFUVVFU1RfU0VOU0UgPSAzLAorCVNERUJfSV9URVNUX1VOSVRfUkVBRFkgPSA0LAorCVNERUJfSV9NT0RFX1NFTlNFID0gNSwJCS8qIDYsIDEwICovCisJU0RFQl9JX01PREVfU0VMRUNUID0gNiwJCS8qIDYsIDEwICovCisJU0RFQl9JX0xPR19TRU5TRSA9IDcsCisJU0RFQl9JX1JFQURfQ0FQQUNJVFkgPSA4LAkvKiAxMDsgMTYgaXMgaW4gU0FfSU4oMTYpICovCisJU0RFQl9JX1JFQUQgPSA5LAkJLyogNiwgMTAsIDEyLCAxNiAqLworCVNERUJfSV9XUklURSA9IDEwLAkJLyogNiwgMTAsIDEyLCAxNiAqLworCVNERUJfSV9TVEFSVF9TVE9QID0gMTEsCisJU0RFQl9JX1NFUlZfQUNUX0lOID0gMTIsCS8qIDEyLCAxNiAqLworCVNERUJfSV9TRVJWX0FDVF9PVVQgPSAxMywJLyogMTIsIDE2ICovCisJU0RFQl9JX01BSU5UX0lOID0gMTQsCisJU0RFQl9JX01BSU5UX09VVCA9IDE1LAorCVNERUJfSV9WRVJJRlkgPSAxNiwJCS8qIDEwIG9ubHkgKi8KKwlTREVCX0lfVkFSSUFCTEVfTEVOID0gMTcsCisJU0RFQl9JX1JFU0VSVkUgPSAxOCwJCS8qIDYsIDEwICovCisJU0RFQl9JX1JFTEVBU0UgPSAxOSwJCS8qIDYsIDEwICovCisJU0RFQl9JX0FMTE9XX1JFTU9WQUwgPSAyMCwJLyogUFJFVkVOVCBBTExPVyBNRURJVU0gUkVNT1ZBTCAqLworCVNERUJfSV9SRVpFUk9fVU5JVCA9IDIxLAkvKiBSRVdJTkQgaW4gU1NDICovCisJU0RFQl9JX0FUQV9QVCA9IDIyLAkJLyogMTIsIDE2ICovCisJU0RFQl9JX1NFTkRfRElBRyA9IDIzLAorCVNERUJfSV9VTk1BUCA9IDI0LAorCVNERUJfSV9YRFdSSVRFUkVBRCA9IDI1LAkvKiAxMCBvbmx5ICovCisJU0RFQl9JX1dSSVRFX0JVRkZFUiA9IDI2LAorCVNERUJfSV9XUklURV9TQU1FID0gMjcsCQkvKiAxMCwgMTYgKi8KKwlTREVCX0lfU1lOQ19DQUNIRSA9IDI4LAkJLyogMTAgb25seSAqLworCVNERUJfSV9DT01QX1dSSVRFID0gMjksCisJU0RFQl9JX0xBU1RfRUxFTUVOVCA9IDMwLAkvKiBrZWVwIHRoaXMgbGFzdCAqLworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb3Bjb2RlX2luZF9hcnJbMjU2XSA9IHsKKy8qIDB4MDsgMHgwLT4weDFmOiA2IGJ5dGUgY2RicyAqLworCVNERUJfSV9URVNUX1VOSVRfUkVBRFksIFNERUJfSV9SRVpFUk9fVU5JVCwgMCwgU0RFQl9JX1JFUVVFU1RfU0VOU0UsCisJICAgIDAsIDAsIDAsIDAsCisJU0RFQl9JX1JFQUQsIDAsIFNERUJfSV9XUklURSwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCBTREVCX0lfSU5RVUlSWSwgMCwgMCwgU0RFQl9JX01PREVfU0VMRUNULCBTREVCX0lfUkVTRVJWRSwKKwkgICAgU0RFQl9JX1JFTEVBU0UsCisJMCwgMCwgU0RFQl9JX01PREVfU0VOU0UsIFNERUJfSV9TVEFSVF9TVE9QLCAwLCBTREVCX0lfU0VORF9ESUFHLAorCSAgICBTREVCX0lfQUxMT1dfUkVNT1ZBTCwgMCwKKy8qIDB4MjA7IDB4MjAtPjB4M2Y6IDEwIGJ5dGUgY2RicyAqLworCTAsIDAsIDAsIDAsIDAsIFNERUJfSV9SRUFEX0NBUEFDSVRZLCAwLCAwLAorCVNERUJfSV9SRUFELCAwLCBTREVCX0lfV1JJVEUsIDAsIDAsIDAsIDAsIFNERUJfSV9WRVJJRlksCisJMCwgMCwgMCwgMCwgMCwgU0RFQl9JX1NZTkNfQ0FDSEUsIDAsIDAsCisJMCwgMCwgMCwgU0RFQl9JX1dSSVRFX0JVRkZFUiwgMCwgMCwgMCwgMCwKKy8qIDB4NDA7IDB4NDAtPjB4NWY6IDEwIGJ5dGUgY2RicyAqLworCTAsIFNERUJfSV9XUklURV9TQU1FLCBTREVCX0lfVU5NQVAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgU0RFQl9JX0xPR19TRU5TRSwgMCwgMCwKKwkwLCAwLCAwLCBTREVCX0lfWERXUklURVJFQUQsIDAsIFNERUJfSV9NT0RFX1NFTEVDVCwgU0RFQl9JX1JFU0VSVkUsCisJICAgIFNERUJfSV9SRUxFQVNFLAorCTAsIDAsIFNERUJfSV9NT0RFX1NFTlNFLCAwLCAwLCAwLCAwLCAwLAorLyogMHg2MDsgMHg2MC0+MHg3ZCBhcmUgcmVzZXJ2ZWQgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgU0RFQl9JX1ZBUklBQkxFX0xFTiwKKy8qIDB4ODA7IDB4ODAtPjB4OWY6IDE2IGJ5dGUgY2RicyAqLworCTAsIDAsIDAsIDAsIDAsIFNERUJfSV9BVEFfUFQsIDAsIDAsCisJU0RFQl9JX1JFQUQsIFNERUJfSV9DT01QX1dSSVRFLCBTREVCX0lfV1JJVEUsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgU0RFQl9JX1dSSVRFX1NBTUUsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgU0RFQl9JX1NFUlZfQUNUX0lOLCBTREVCX0lfU0VSVl9BQ1RfT1VULAorLyogMHhhMDsgMHhhMC0+MHhiZjogMTIgYnl0ZSBjZGJzICovCisJU0RFQl9JX1JFUE9SVF9MVU5TLCBTREVCX0lfQVRBX1BULCAwLCBTREVCX0lfTUFJTlRfSU4sCisJICAgICBTREVCX0lfTUFJTlRfT1VULCAwLCAwLCAwLAorCVNERUJfSV9SRUFELCBTREVCX0lfU0VSVl9BQ1RfT1VULCBTREVCX0lfV1JJVEUsIFNERUJfSV9TRVJWX0FDVF9JTiwKKwkgICAgIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorLyogMHhjMDsgMHhjMC0+MHhmZjogdmVuZG9yIHNwZWNpZmljICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKK307CisKKyNkZWZpbmUgRl9EX0lOCQkJMQorI2RlZmluZSBGX0RfT1VUCQkJMgorI2RlZmluZSBGX0RfT1VUX01BWUJFCQk0CS8qIFdSSVRFIFNBTUUsIE5ET0IgYml0ICovCisjZGVmaW5lIEZfRF9VTktOCQk4CisjZGVmaW5lIEZfUkxfV0xVTl9PSwkJMHgxMAorI2RlZmluZSBGX1NLSVBfVUEJCTB4MjAKKyNkZWZpbmUgRl9ERUxBWV9PVkVSUgkJMHg0MAorI2RlZmluZSBGX1NBX0xPVwkJMHg4MAkvKiBjZGIgYnl0ZSAxLCBiaXRzIDQgdG8gMCAqLworI2RlZmluZSBGX1NBX0hJR0gJCTB4MTAwCS8qIGFzIHVzZWQgYnkgdmFyaWFibGUgbGVuZ3RoIGNkYnMgKi8KKyNkZWZpbmUgRl9JTlZfT1AJCTB4MjAwCisjZGVmaW5lIEZfRkFLRV9SVwkJMHg0MDAKKyNkZWZpbmUgRl9NX0FDQ0VTUwkJMHg4MDAJLyogbWVkaWEgYWNjZXNzICovCisKKyNkZWZpbmUgRkZfUkVTUE9ORCAoRl9STF9XTFVOX09LIHwgRl9TS0lQX1VBIHwgRl9ERUxBWV9PVkVSUikKKyNkZWZpbmUgRkZfRElSRUNUX0lPIChGX01fQUNDRVNTIHwgRl9GQUtFX1JXKQorI2RlZmluZSBGRl9TQSAoRl9TQV9ISUdIIHwgRl9TQV9MT1cpCisKK3N0cnVjdCBzZGVidWdfZGV2X2luZm87CitzdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3BfcmVwb3J0X2x1bnMoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3JlcXVlc3RzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbGVjdChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3BfbG9nX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkY2FwKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkX2R0MChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3Bfd3JpdGVfZHQwKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9zdGFydF9zdG9wKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkY2FwMTYoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX2dldF9sYmFfc3RhdHVzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZXBvcnRfdGd0cGdzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF91bm1hcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3BfcnN1cF9vcGNvZGVzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yc3VwX3RtZnMoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3dyaXRlX3NhbWVfMTAoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3dyaXRlX3NhbWVfMTYoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3hkd3JpdGVyZWFkXzEwKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9jb21wX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKKworc3RydWN0IG9wY29kZV9pbmZvX3QgeworCXU4IG51bV9hdHRhY2hlZDsJLyogMCBpZiB0aGlzIGlzIGl0IChpLmUuIGEgbGVhZik7IHVzZSAweGZmCisJCQkJICogZm9yIHRlcm1pbmF0aW5nIGVsZW1lbnQgKi8KKwl1OCBvcGNvZGU7CQkvKiBpZiBudW1fYXR0YWNoZWQgPiAwLCBwcmVmZXJyZWQgKi8KKwl1MTYgc2E7CQkJLyogc2VydmljZSBhY3Rpb24gKi8KKwl1MzIgZmxhZ3M7CQkvKiBPUi1lZCBzZXQgb2YgU0RFQl9GXyogKi8KKwlpbnQgKCpwZnApKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKKwljb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCAqYXJycDsgIC8qIG51bV9hdHRhY2hlZCBlbGVtZW50cyBvciBOVUxMICovCisJdTggbGVuX21hc2tbMTZdOwkvKiBsZW49bGVuX21hc2tbMF0sIHRoZW4gbWFzayBmb3IgY2RiWzFdLi4uICovCisJCQkJLyogaWdub3JlIGNkYiBieXRlcyBhZnRlciBwb3NpdGlvbiAxNSAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190IG1zZW5zZV9pYXJyWzFdID0geworCXswLCAweDFhLCAwLCBGX0RfSU4sIE5VTEwsIE5VTEwsCisJICAgIHs2LCAgMHhlOCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCBtc2VsZWN0X2lhcnJbMV0gPSB7CisJezAsIDB4MTUsIDAsIEZfRF9PVVQsIE5VTEwsIE5VTEwsCisJICAgIHs2LCAgMHhmMSwgMCwgMCwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCByZWFkX2lhcnJbM10gPSB7CisJezAsIDB4MjgsIDAsIEZfRF9JTiB8IEZGX0RJUkVDVF9JTywgcmVzcF9yZWFkX2R0MCwgTlVMTCwvKiBSRUFEKDEwKSAqLworCSAgICB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLAorCSAgICAgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHg4LCAwLCBGX0RfSU4gfCBGRl9ESVJFQ1RfSU8sIHJlc3BfcmVhZF9kdDAsIE5VTEwsIC8qIFJFQUQoNikgKi8KKwkgICAgezYsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweGE4LCAwLCBGX0RfSU4gfCBGRl9ESVJFQ1RfSU8sIHJlc3BfcmVhZF9kdDAsIE5VTEwsLyogUkVBRCgxMikgKi8KKwkgICAgezEyLCAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwKKwkgICAgIDB4YzcsIDAsIDAsIDAsIDB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3Qgd3JpdGVfaWFyclszXSA9IHsKKwl7MCwgMHgyYSwgMCwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF93cml0ZV9kdDAsIE5VTEwsICAgLyogMTAgKi8KKwkgICAgezEwLCAgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgxZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDAsIDAsIDB9IH0sCisJezAsIDB4YSwgMCwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF93cml0ZV9kdDAsIE5VTEwsICAgIC8qIDYgKi8KKwkgICAgezYsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweGFhLCAwLCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX3dyaXRlX2R0MCwgTlVMTCwgICAvKiAxMiAqLworCSAgICB7MTIsICAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDlmLAorCSAgICAgMHhjNywgMCwgMCwgMCwgMH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCBzYV9pbl9pYXJyWzFdID0geworCXswLCAweDllLCAweDEyLCBGX1NBX0xPVyB8IEZfRF9JTiwgcmVzcF9nZXRfbGJhX3N0YXR1cywgTlVMTCwKKwkgICAgezE2LCAgMHgxMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDB4Yzd9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgdmxfaWFyclsxXSA9IHsJLyogVkFSSUFCTEUgTEVOR1RIICovCisJezAsIDB4N2YsIDB4YiwgRl9TQV9ISUdIIHwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF93cml0ZV9kdDAsCisJICAgIE5VTEwsIHszMiwgIDB4YzcsIDAsIDAsIDAsIDAsIDB4MWYsIDB4MTgsIDB4MCwgMHhiLCAweGZhLAorCQkgICAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmfSB9LAkvKiBXUklURSgzMikgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCBtYWludF9pbl9pYXJyWzJdID0geworCXswLCAweGEzLCAweGMsIEZfU0FfTE9XIHwgRl9EX0lOLCByZXNwX3JzdXBfb3Bjb2RlcywgTlVMTCwKKwkgICAgezEyLCAgMHhjLCAweDg3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAwLAorCSAgICAgMHhjNywgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHhhMywgMHhkLCBGX1NBX0xPVyB8IEZfRF9JTiwgcmVzcF9yc3VwX3RtZnMsIE5VTEwsCisJICAgIHsxMiwgIDB4ZCwgMHg4MCwgMCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMCwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3Qgd3JpdGVfc2FtZV9pYXJyWzFdID0geworCXswLCAweDkzLCAwLCBGX0RfT1VUX01BWUJFIHwgRkZfRElSRUNUX0lPLCByZXNwX3dyaXRlX3NhbWVfMTYsIE5VTEwsCisJICAgIHsxNiwgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJICAgICAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGM3fSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190IHJlc2VydmVfaWFyclsxXSA9IHsKKwl7MCwgMHgxNiwgMCwgRl9EX09VVCwgTlVMTCwgTlVMTCwJLyogUkVTRVJWRSg2KSAqLworCSAgICB7NiwgIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgcmVsZWFzZV9pYXJyWzFdID0geworCXswLCAweDE3LCAwLCBGX0RfT1VULCBOVUxMLCBOVUxMLAkvKiBSRUxFQVNFKDYpICovCisJICAgIHs2LCAgMHgxZiwgMHhmZiwgMCwgMCwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKK307CisKKworLyogVGhpcyBhcnJheSBpcyBhY2Nlc3NlZCB2aWEgU0RFQl9JXyogdmFsdWVzLiBNYWtlIHN1cmUgYWxsIGFyZSBtYXBwZWQsCisgKiBwbHVzIHRoZSB0ZXJtaW5hdGluZyBlbGVtZW50cyBmb3IgbG9naWMgdGhhdCBzY2FucyB0aGlzIHRhYmxlIHN1Y2ggYXMKKyAqIFJFUE9SVCBTVVBQT1JURUQgT1BFUkFUSU9OIENPREVTLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190IG9wY29kZV9pbmZvX2FycltTREVCX0lfTEFTVF9FTEVNRU5UICsgMV0gPSB7CisvKiAwICovCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwKKwkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDEyLCAwLCBGRl9SRVNQT05EIHwgRl9EX0lOLCByZXNwX2lucXVpcnksIE5VTEwsCisJICAgIHs2LCAgMHhlMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHhhMCwgMCwgRkZfUkVTUE9ORCB8IEZfRF9JTiwgcmVzcF9yZXBvcnRfbHVucywgTlVMTCwKKwkgICAgezEyLCAgMHhlMywgMHhmZiwgMCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMCwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDB9IH0sCisJezAsIDB4MywgMCwgRkZfUkVTUE9ORCB8IEZfRF9JTiwgcmVzcF9yZXF1ZXN0cywgTlVMTCwKKwkgICAgezYsICAweGUxLCAwLCAwLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDAsIDAsIEZfTV9BQ0NFU1MgfCBGX1JMX1dMVU5fT0ssIE5VTEwsIE5VTEwsLyogVEVTVCBVTklUIFJFQURZICovCisJICAgIHs2LCAgMCwgMCwgMCwgMCwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MSwgMHg1YSwgMCwgRl9EX0lOLCByZXNwX21vZGVfc2Vuc2UsIG1zZW5zZV9pYXJyLAorCSAgICB7MTAsICAweGY4LCAweGZmLCAweGZmLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLAorCSAgICAgMH0gfSwKKwl7MSwgMHg1NSwgMCwgRl9EX09VVCwgcmVzcF9tb2RlX3NlbGVjdCwgbXNlbGVjdF9pYXJyLAorCSAgICB7MTAsICAweGYxLCAwLCAwLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDRkLCAwLCBGX0RfSU4sIHJlc3BfbG9nX3NlbnNlLCBOVUxMLAorCSAgICB7MTAsICAweGUzLCAweGZmLCAweGZmLCAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLAorCSAgICAgMCwgMCwgMH0gfSwKKwl7MCwgMHgyNSwgMCwgRl9EX0lOLCByZXNwX3JlYWRjYXAsIE5VTEwsCisJICAgIHsxMCwgIDB4ZTEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDAsIDB4MSwgMHhjNywgMCwgMCwgMCwgMCwKKwkgICAgIDAsIDB9IH0sCisJezMsIDB4ODgsIDAsIEZfRF9JTiB8IEZGX0RJUkVDVF9JTywgcmVzcF9yZWFkX2R0MCwgcmVhZF9pYXJyLAorCSAgICB7MTYsICAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCSAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwgMHhjN30gfSwJCS8qIFJFQUQoMTYpICovCisvKiAxMCAqLworCXszLCAweDhhLCAwLCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX3dyaXRlX2R0MCwgd3JpdGVfaWFyciwKKwkgICAgezE2LCAgMHhmYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OWYsIDB4Yzd9IH0sCQkvKiBXUklURSgxNikgKi8KKwl7MCwgMHgxYiwgMCwgMCwgcmVzcF9zdGFydF9zdG9wLCBOVUxMLAkJLyogU1RBUlQgU1RPUCBVTklUICovCisJICAgIHs2LCAgMHgxLCAwLCAweGYsIDB4ZjcsIDB4YzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezEsIDB4OWUsIDB4MTAsIEZfU0FfTE9XIHwgRl9EX0lOLCByZXNwX3JlYWRjYXAxNiwgc2FfaW5faWFyciwKKwkgICAgezE2LCAgMHgxMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MSwgMHhjN30gfSwJLyogUkVBRCBDQVBBQ0lUWSgxNikgKi8KKwl7MCwgMCwgMCwgRl9JTlZfT1AgfCBGRl9SRVNQT05ELCBOVUxMLCBOVUxMLCAvKiBTQSBPVVQgKi8KKwkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXsyLCAweGEzLCAweGEsIEZfU0FfTE9XIHwgRl9EX0lOLCByZXNwX3JlcG9ydF90Z3RwZ3MsIG1haW50X2luX2lhcnIsCisJICAgIHsxMiwgIDB4ZWEsIDAsIDAsIDAsIDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDB4YzcsIDAsIDAsIDAsCisJICAgICAwfSB9LAorCXswLCAwLCAwLCBGX0lOVl9PUCB8IEZGX1JFU1BPTkQsIE5VTEwsIE5VTEwsIC8qIE1BSU5UIE9VVCAqLworCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwgLyogVkVSSUZZICovCisJICAgIHswLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MSwgMHg3ZiwgMHg5LCBGX1NBX0hJR0ggfCBGX0RfSU4gfCBGRl9ESVJFQ1RfSU8sIHJlc3BfcmVhZF9kdDAsCisJICAgIHZsX2lhcnIsIHszMiwgIDB4YzcsIDAsIDAsIDAsIDAsIDB4MWYsIDB4MTgsIDB4MCwgMHg5LCAweGZlLCAwLAorCQkgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmfSB9LC8qIFZBUklBQkxFIExFTkdUSCwgUkVBRCgzMikgKi8KKwl7MSwgMHg1NiwgMCwgRl9EX09VVCwgTlVMTCwgcmVzZXJ2ZV9pYXJyLCAvKiBSRVNFUlZFKDEwKSAqLworCSAgICB7MTAsICAweGZmLCAweGZmLCAweGZmLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLAorCSAgICAgMH0gfSwKKwl7MSwgMHg1NywgMCwgRl9EX09VVCwgTlVMTCwgcmVsZWFzZV9pYXJyLCAvKiBSRUxFQVNFKDEwKSAqLworCSAgICB7MTAsICAweDEzLCAweGZmLCAweGZmLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLAorCSAgICAgMH0gfSwKKy8qIDIwICovCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwgLyogQUxMT1cgUkVNT1ZBTCAqLworCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDB4MSwgMCwgMCwgcmVzcF9zdGFydF9zdG9wLCBOVUxMLCAvKiBSRVdJTkQgPz8gKi8KKwkgICAgezYsICAweDEsIDAsIDAsIDAsIDB4YzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwgLyogQVRBX1BUICovCisJICAgIHswLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHgxZCwgRl9EX09VVCwgMCwgTlVMTCwgTlVMTCwJLyogU0VORCBESUFHTk9TVElDICovCisJICAgIHs2LCAgMHhmNywgMCwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHg0MiwgMCwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF91bm1hcCwgTlVMTCwgLyogVU5NQVAgKi8KKwkgICAgezEwLCAgMHgxLCAwLCAwLCAwLCAwLCAweDFmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDUzLCAwLCBGX0RfSU4gfCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX3hkd3JpdGVyZWFkXzEwLAorCSAgICBOVUxMLCB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLCAweGZmLCAweGM3LAorCQkgICAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAwLCAwLCBGX0lOVl9PUCB8IEZGX1JFU1BPTkQsIE5VTEwsIE5VTEwsIC8qIFdSSVRFX0JVRkZFUiAqLworCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezEsIDB4NDEsIDAsIEZfRF9PVVRfTUFZQkUgfCBGRl9ESVJFQ1RfSU8sIHJlc3Bfd3JpdGVfc2FtZV8xMCwKKwkgICAgd3JpdGVfc2FtZV9pYXJyLCB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLAorCQkJICAgICAgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHgzNSwgMCwgRl9ERUxBWV9PVkVSUiB8IEZGX0RJUkVDVF9JTywgTlVMTCwgTlVMTCwgLyogU1lOQ19DQUNIRSAqLworCSAgICB7MTAsICAweDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4YzcsIDAsIDAsCisJICAgICAwLCAwLCAwLCAwfSB9LAorCXswLCAweDg5LCAwLCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX2NvbXBfd3JpdGUsIE5VTEwsCisJICAgIHsxNiwgIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDAsCisJICAgICAwLCAweGZmLCAweDFmLCAweGM3fSB9LAkJLyogQ09NUEFSRSBBTkQgV1JJVEUgKi8KKworLyogMzAgKi8KKwl7MHhmZiwgMCwgMCwgMCwgTlVMTCwgTlVMTCwJCS8qIHRlcm1pbmF0aW5nIGVsZW1lbnQgKi8KKwkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorfTsKKworc3RydWN0IHNkZWJ1Z19zY21kX2V4dHJhX3QgeworCWJvb2wgaW5qX3JlY292ZXJlZDsKKwlib29sIGlual90cmFuc3BvcnQ7CisJYm9vbCBpbmpfZGlmOworCWJvb2wgaW5qX2RpeDsKKwlib29sIGlual9zaG9ydDsKK307CisKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19hZGRfaG9zdCA9IERFRl9OVU1fSE9TVDsKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19hdG8gPSBERUZfQVRPOwogc3RhdGljIGludCBzY3NpX2RlYnVnX2RlbGF5ID0gREVGX0RFTEFZOwpAQCAtMjQ1LDYgKzU0NSw4IEBACiBzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX3JlbW92YWJsZSA9IERFRl9SRU1PVkFCTEU7CiBzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX2NsdXN0ZXJpbmc7CiBzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX2hvc3RfbG9jayA9IERFRl9IT1NUX0xPQ0s7CitzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX3N0cmljdCA9IERFRl9TVFJJQ1Q7CitzdGF0aWMgYm9vbCBzZGVidWdfYW55X2luamVjdGluZ19vcHQ7CiAKIHN0YXRpYyBhdG9taWNfdCBzZGVidWdfY21uZF9jb3VudDsKIHN0YXRpYyBhdG9taWNfdCBzZGVidWdfY29tcGxldGlvbnM7CkBAIC0yNzcsMTEgKzU3OSwxMCBAQAogCXVuc2lnbmVkIGludCB0YXJnZXQ7CiAJdTY0IGx1bjsKIAlzdHJ1Y3Qgc2RlYnVnX2hvc3RfaW5mbyAqc2RiZ19ob3N0OwotCXU2NCB3bHVuOwogCXVuc2lnbmVkIGxvbmcgdWFzX2JtWzFdOwogCWF0b21pY190IG51bV9pbl9xOwotCWNoYXIgc3RvcHBlZDsKLQljaGFyIHVzZWQ7CisJY2hhciBzdG9wcGVkOwkJLyogVE9ETzogc2hvdWxkIGJlIGF0b21pYyAqLworCWJvb2wgdXNlZDsKIH07CiAKIHN0cnVjdCBzZGVidWdfaG9zdF9pbmZvIHsKQEAgLTM5NCw2ICs2OTUsNTAgQEAKIAlzcGluX3VubG9jaygmc2RlYnVnX2hvc3RfbGlzdF9sb2NrKTsKIH0KIAorZW51bSBzZGViX2NtZF9kYXRhIHtTREVCX0lOX0RBVEEgPSAwLCBTREVCX0lOX0NEQiA9IDF9OworCisvKiBTZXQgaW5fYml0IHRvIC0xIHRvIGluZGljYXRlIG5vIGJpdCBwb3NpdGlvbiBvZiBpbnZhbGlkIGZpZWxkICovCitzdGF0aWMgdm9pZAorbWtfc2Vuc2VfaW52YWxpZF9mbGQoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBlbnVtIHNkZWJfY21kX2RhdGEgY19kLAorCQkgICAgIGludCBpbl9ieXRlLCBpbnQgaW5fYml0KQoreworCXVuc2lnbmVkIGNoYXIgKnNidWZmOworCXU4IHNrc1s0XTsKKwlpbnQgc2wsIGFzYzsKKworCXNidWZmID0gc2NwLT5zZW5zZV9idWZmZXI7CisJaWYgKCFzYnVmZikgeworCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NwLT5kZXZpY2UsCisJCQkgICAgIiVzOiBzZW5zZV9idWZmZXIgaXMgTlVMTFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWFzYyA9IGNfZCA/IElOVkFMSURfRklFTERfSU5fQ0RCIDogSU5WQUxJRF9GSUVMRF9JTl9QQVJBTV9MSVNUOworCW1lbXNldChzYnVmZiwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwlzY3NpX2J1aWxkX3NlbnNlX2J1ZmZlcihzY3NpX2RlYnVnX2RzZW5zZSwgc2J1ZmYsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQlhc2MsIDApOworCW1lbXNldChza3MsIDAsIHNpemVvZihza3MpKTsKKwlza3NbMF0gPSAweDgwOworCWlmIChjX2QpCisJCXNrc1swXSB8PSAweDQwOworCWlmIChpbl9iaXQgPj0gMCkgeworCQlza3NbMF0gfD0gMHg4OworCQlza3NbMF0gfD0gMHg3ICYgaW5fYml0OworCX0KKwlwdXRfdW5hbGlnbmVkX2JlMTYoaW5fYnl0ZSwgc2tzICsgMSk7CisJaWYgKHNjc2lfZGVidWdfZHNlbnNlKSB7CisJCXNsID0gc2J1ZmZbN10gKyA4OworCQlzYnVmZls3XSA9IHNsOworCQlzYnVmZltzbF0gPSAweDI7CisJCXNidWZmW3NsICsgMV0gPSAweDY7CisJCW1lbWNweShzYnVmZiArIHNsICsgNCwgc2tzLCAzKTsKKwl9IGVsc2UKKwkJbWVtY3B5KHNidWZmICsgMTUsIHNrcywgMyk7CisJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQorCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNjcC0+ZGV2aWNlLCAiJXM6ICBbc2Vuc2Vfa2V5LGFzYyxhc2NxIgorCQkJICAgICJdOiBbMHg1LDB4JXgsMHgwXSAlYyBieXRlPSVkLCBiaXQ9JWRcbiIsCisJCQkgICAgbXlfbmFtZSwgYXNjLCBjX2QgPyAnQycgOiAnRCcsIGluX2J5dGUsIGluX2JpdCk7Cit9CisKIHN0YXRpYyB2b2lkIG1rX3NlbnNlX2J1ZmZlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIGludCBrZXksIGludCBhc2MsIGludCBhc3EpCiB7CiAJdW5zaWduZWQgY2hhciAqc2J1ZmY7CkBAIC00MTQsNjMgKzc1OSwxMCBAQAogCQkJICAgIG15X25hbWUsIGtleSwgYXNjLCBhc3EpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKHVuc2lnbmVkIGNoYXIgKmNtZCwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxiYSwgdW5zaWduZWQgaW50ICpudW0sCi0JCQkJICAgdTMyICplaV9sYmEpCitzdGF0aWMgdm9pZAorbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc3RydWN0IHNjc2lfY21uZCAqc2NwKQogewotCSplaV9sYmEgPSAwOwotCi0Jc3dpdGNoICgqY21kKSB7Ci0JY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgotCQkqbGJhID0gKHU2NCljbWRbMTldIHwgKHU2NCljbWRbMThdIDw8IDggfAotCQkJKHU2NCljbWRbMTddIDw8IDE2IHwgKHU2NCljbWRbMTZdIDw8IDI0IHwKLQkJCSh1NjQpY21kWzE1XSA8PCAzMiB8ICh1NjQpY21kWzE0XSA8PCA0MCB8Ci0JCQkodTY0KWNtZFsxM10gPDwgNDggfCAodTY0KWNtZFsxMl0gPDwgNTY7Ci0KLQkJKmVpX2xiYSA9ICh1MzIpY21kWzIzXSB8ICh1MzIpY21kWzIyXSA8PCA4IHwKLQkJCSh1MzIpY21kWzIxXSA8PCAxNiB8ICh1MzIpY21kWzIwXSA8PCAyNDsKLQotCQkqbnVtID0gKHUzMiljbWRbMzFdIHwgKHUzMiljbWRbMzBdIDw8IDggfCAodTMyKWNtZFsyOV0gPDwgMTYgfAotCQkJKHUzMiljbWRbMjhdIDw8IDI0OwotCQlicmVhazsKLQotCWNhc2UgV1JJVEVfU0FNRV8xNjoKLQljYXNlIFdSSVRFXzE2OgotCWNhc2UgUkVBRF8xNjoKLQkJKmxiYSA9ICh1NjQpY21kWzldIHwgKHU2NCljbWRbOF0gPDwgOCB8Ci0JCQkodTY0KWNtZFs3XSA8PCAxNiB8ICh1NjQpY21kWzZdIDw8IDI0IHwKLQkJCSh1NjQpY21kWzVdIDw8IDMyIHwgKHU2NCljbWRbNF0gPDwgNDAgfAotCQkJKHU2NCljbWRbM10gPDwgNDggfCAodTY0KWNtZFsyXSA8PCA1NjsKLQotCQkqbnVtID0gKHUzMiljbWRbMTNdIHwgKHUzMiljbWRbMTJdIDw8IDggfCAodTMyKWNtZFsxMV0gPDwgMTYgfAotCQkJKHUzMiljbWRbMTBdIDw8IDI0OwotCQlicmVhazsKLQljYXNlIFdSSVRFXzEyOgotCWNhc2UgUkVBRF8xMjoKLQkJKmxiYSA9ICh1MzIpY21kWzVdIHwgKHUzMiljbWRbNF0gPDwgOCB8ICh1MzIpY21kWzNdIDw8IDE2IHwKLQkJCSh1MzIpY21kWzJdIDw8IDI0OwotCi0JCSpudW0gPSAodTMyKWNtZFs5XSB8ICh1MzIpY21kWzhdIDw8IDggfCAodTMyKWNtZFs3XSA8PCAxNiB8Ci0JCQkodTMyKWNtZFs2XSA8PCAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBXUklURV9TQU1FOgotCWNhc2UgV1JJVEVfMTA6Ci0JY2FzZSBSRUFEXzEwOgotCWNhc2UgWERXUklURVJFQURfMTA6Ci0JCSpsYmEgPSAodTMyKWNtZFs1XSB8ICh1MzIpY21kWzRdIDw8IDggfAkodTMyKWNtZFszXSA8PCAxNiB8Ci0JCQkodTMyKWNtZFsyXSA8PCAyNDsKLQotCQkqbnVtID0gKHUzMiljbWRbOF0gfCAodTMyKWNtZFs3XSA8PCA4OwotCQlicmVhazsKLQljYXNlIFdSSVRFXzY6Ci0JY2FzZSBSRUFEXzY6Ci0JCSpsYmEgPSAodTMyKWNtZFszXSB8ICh1MzIpY21kWzJdIDw8IDggfAotCQkJKHUzMikoY21kWzFdICYgMHgxZikgPDwgMTY7Ci0JCSpudW0gPSAoMCA9PSBjbWRbNF0pID8gMjU2IDogY21kWzRdOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX09QQ09ERSwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKQEAgLTUyMCw2ICs4MTIsMTEgQEAKIAkJCWlmIChkZWJ1ZykKIAkJCQljcCA9ICJtb2RlIHBhcmFtZXRlcnMgY2hhbmdlZCI7CiAJCQlicmVhazsKKwkJY2FzZSBTREVCVUdfVUFfQ0FQQUNJVFlfQ0hBTkdFRDoKKwkJCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgVU5JVF9BVFRFTlRJT04sCisJCQkJCVVBX0NIQU5HRURfQVNDLCBDQVBBQ0lUWV9DSEFOR0VEX0FTQ1EpOworCQkJaWYgKGRlYnVnKQorCQkJCWNwID0gImNhcGFjaXR5IGRhdGEgY2hhbmdlZCI7CiAJCWRlZmF1bHQ6CiAJCQlwcl93YXJuKCIlczogdW5leHBlY3RlZCB1bml0IGF0dGVudGlvbiBjb2RlPSVkXG4iLAogCQkJCV9fZnVuY19fLCBrKTsKQEAgLTkyNCwxOSArMTIyMSwyMCBAQAogI2RlZmluZSBTREVCVUdfTE9OR19JTlFfU1ogOTYKICNkZWZpbmUgU0RFQlVHX01BWF9JTlFfQVJSX1NaIDU4NAogCi1zdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIGludCB0YXJnZXQsCi0JCQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogewogCXVuc2lnbmVkIGNoYXIgcHFfcGR0OwogCXVuc2lnbmVkIGNoYXIgKiBhcnI7CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCWludCBhbGxvY19sZW4sIG4sIHJldDsKKwlib29sIGhhdmVfd2x1bjsKIAogCWFsbG9jX2xlbiA9IChjbWRbM10gPDwgOCkgKyBjbWRbNF07CiAJYXJyID0ga3phbGxvYyhTREVCVUdfTUFYX0lOUV9BUlJfU1osIEdGUF9BVE9NSUMpOwogCWlmICghIGFycikKIAkJcmV0dXJuIERJRF9SRVFVRVVFIDw8IDE2OwotCWlmIChkZXZpcC0+d2x1bikKKwloYXZlX3dsdW4gPSAoc2NwLT5kZXZpY2UtPmx1biA9PSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMpOworCWlmIChoYXZlX3dsdW4pCiAJCXBxX3BkdCA9IDB4MWU7CS8qIHByZXNlbnQsIHdsdW4gKi8KIAllbHNlIGlmIChzY3NpX2RlYnVnX25vX2x1bl8wICYmICgwID09IGRldmlwLT5sdW4pKQogCQlwcV9wZHQgPSAweDdmOwkvKiBub3QgcHJlc2VudCwgbm8gZGV2aWNlIHR5cGUgKi8KQEAgLTk0NCw4ICsxMjQyLDcgQEAKIAkJcHFfcGR0ID0gKHNjc2lfZGVidWdfcHR5cGUgJiAweDFmKTsKIAlhcnJbMF0gPSBwcV9wZHQ7CiAJaWYgKDB4MiAmIGNtZFsxXSkgeyAgLyogQ01ERFQgYml0IHNldCAqLwotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAotCQkJICAgICAgIAkwKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgMSwgMSk7CiAJCWtmcmVlKGFycik7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0gZWxzZSBpZiAoMHgxICYgY21kWzFdKSB7ICAvKiBFVlBEIGJpdCBzZXQgKi8KQEAgLTk1Nyw3ICsxMjU0LDcgQEAKIAkJICAgIChkZXZpcC0+Y2hhbm5lbCAmIDB4N2YpOwogCQlpZiAoMCA9PSBzY3NpX2RlYnVnX3ZwZF91c2VfaG9zdG5vKQogCQkJaG9zdF9ubyA9IDA7Ci0JCWx1X2lkX251bSA9IGRldmlwLT53bHVuID8gLTEgOiAoKChob3N0X25vICsgMSkgKiAyMDAwKSArCisJCWx1X2lkX251bSA9IGhhdmVfd2x1biA/IC0xIDogKCgoaG9zdF9ubyArIDEpICogMjAwMCkgKwogCQkJICAgIChkZXZpcC0+dGFyZ2V0ICogMTAwMCkgKyBkZXZpcC0+bHVuKTsKIAkJdGFyZ2V0X2Rldl9pZCA9ICgoaG9zdF9ubyArIDEpICogMjAwMCkgKwogCQkJCSAoZGV2aXAtPnRhcmdldCAqIDEwMDApIC0gMzsKQEAgLTEwMjksOSArMTMyNiw3IEBACiAJCQlhcnJbMV0gPSBjbWRbMl07ICAgICAgICAvKnNhbml0eSAqLwogCQkJYXJyWzNdID0gaW5xdWlyeV9ldnBkX2IyKCZhcnJbNF0pOwogCQl9IGVsc2UgewotCQkJLyogSWxsZWdhbCByZXF1ZXN0LCBpbnZhbGlkIGZpZWxkIGluIGNkYiAqLwotCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAyLCAtMSk7CiAJCQlrZnJlZShhcnIpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KQEAgLTEwNzcsMTggKzEzNzIsMjAgQEAKIAl1bnNpZ25lZCBjaGFyICogc2J1ZmY7CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07Ci0JaW50IHdhbnRfZHNlbnNlOworCWJvb2wgZHNlbnNlLCB3YW50X2RzZW5zZTsKIAlpbnQgbGVuID0gMTg7CiAKIAltZW1zZXQoYXJyLCAwLCBzaXplb2YoYXJyKSk7Ci0Jd2FudF9kc2Vuc2UgPSAhIShjbWRbMV0gJiAxKSB8fCBzY3NpX2RlYnVnX2RzZW5zZTsKKwlkc2Vuc2UgPSAhIShjbWRbMV0gJiAxKTsKKwl3YW50X2RzZW5zZSA9IGRzZW5zZSB8fCBzY3NpX2RlYnVnX2RzZW5zZTsKIAlzYnVmZiA9IHNjcC0+c2Vuc2VfYnVmZmVyOwogCWlmICgoaWVjX21fcGdbMl0gJiAweDQpICYmICg2ID09IChpZWNfbV9wZ1szXSAmIDB4ZikpKSB7Ci0JCWlmICh3YW50X2RzZW5zZSkgeworCQlpZiAoZHNlbnNlKSB7CiAJCQlhcnJbMF0gPSAweDcyOwogCQkJYXJyWzFdID0gMHgwOwkJLyogTk9fU0VOU0UgaW4gc2Vuc2Vfa2V5ICovCiAJCQlhcnJbMl0gPSBUSFJFU0hPTERfRVhDRUVERUQ7CiAJCQlhcnJbM10gPSAweGZmOwkJLyogVEVTVCBzZXQgYW5kIE1SSUU9PTYgKi8KKwkJCWxlbiA9IDg7CiAJCX0gZWxzZSB7CiAJCQlhcnJbMF0gPSAweDcwOwogCQkJYXJyWzJdID0gMHgwOwkJLyogTk9fU0VOU0UgaW4gc2Vuc2Vfa2V5ICovCkBAIC0xMDk4LDE1ICsxMzk1LDM0IEBACiAJCX0KIAl9IGVsc2UgewogCQltZW1jcHkoYXJyLCBzYnVmZiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQkJaWYgKChjbWRbMV0gJiAxKSAmJiAoISBzY3NpX2RlYnVnX2RzZW5zZSkpIHsKLQkJCS8qIERFU0MgYml0IHNldCBhbmQgc2Vuc2VfYnVmZiBpbiBmaXhlZCBmb3JtYXQgKi8KLQkJCW1lbXNldChhcnIsIDAsIHNpemVvZihhcnIpKTsKKwkJaWYgKGFyclswXSA+PSAweDcwICYmIGRzZW5zZSA9PSBzY3NpX2RlYnVnX2RzZW5zZSkKKwkJCTsJLyogaGF2ZSBzZW5zZSBhbmQgZm9ybWF0cyBtYXRjaCAqLworCQllbHNlIGlmIChhcnJbMF0gPD0gMHg3MCkgeworCQkJaWYgKGRzZW5zZSkgeworCQkJCW1lbXNldChhcnIsIDAsIDgpOworCQkJCWFyclswXSA9IDB4NzI7CisJCQkJbGVuID0gODsKKwkJCX0gZWxzZSB7CisJCQkJbWVtc2V0KGFyciwgMCwgMTgpOworCQkJCWFyclswXSA9IDB4NzA7CisJCQkJYXJyWzddID0gMHhhOworCQkJfQorCQl9IGVsc2UgaWYgKGRzZW5zZSkgeworCQkJbWVtc2V0KGFyciwgMCwgOCk7CiAJCQlhcnJbMF0gPSAweDcyOwogCQkJYXJyWzFdID0gc2J1ZmZbMl07ICAgICAvKiBzZW5zZSBrZXkgKi8KIAkJCWFyclsyXSA9IHNidWZmWzEyXTsgICAgLyogYXNjICovCiAJCQlhcnJbM10gPSBzYnVmZlsxM107ICAgIC8qIGFzY3EgKi8KIAkJCWxlbiA9IDg7CisJCX0gZWxzZSB7CisJCQltZW1zZXQoYXJyLCAwLCAxOCk7CisJCQlhcnJbMF0gPSAweDcwOworCQkJYXJyWzJdID0gc2J1ZmZbMV07CisJCQlhcnJbN10gPSAweGE7CisJCQlhcnJbMTJdID0gc2J1ZmZbMV07CisJCQlhcnJbMTNdID0gc2J1ZmZbM107CiAJCX0KKwogCX0KIAlta19zZW5zZV9idWZmZXIoc2NwLCAwLCBOT19BRERJVElPTkFMX1NFTlNFLCAwKTsKIAlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsIGxlbik7CkBAIC0xMTE2LDE1ICsxNDMyLDExIEBACiAJCQkgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwotCWludCBwb3dlcl9jb25kLCBlcnJzdHMsIHN0YXJ0OworCWludCBwb3dlcl9jb25kLCBzdGFydDsKIAotCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIFVBU19PTkxZLCBkZXZpcCk7Ci0JaWYgKGVycnN0cykKLQkJcmV0dXJuIGVycnN0czsKIAlwb3dlcl9jb25kID0gKGNtZFs0XSAmIDB4ZjApID4+IDQ7CiAJaWYgKHBvd2VyX2NvbmQpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwKLQkJCSAgICAgICAJMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDQsIDcpOwogCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAl9CiAJc3RhcnQgPSBjbWRbNF0gJiAxOwpAQCAtMTE0OCwxMSArMTQ2MCw3IEBACiB7CiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX1JFQURDQVBfQVJSX1NaXTsKIAl1bnNpZ25lZCBpbnQgY2FwYWM7Ci0JaW50IGVycnN0czsKIAotCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIFVBU19PTkxZLCBkZXZpcCk7Ci0JaWYgKGVycnN0cykKLQkJcmV0dXJuIGVycnN0czsKIAkvKiBmb2xsb3dpbmcganVzdCBpbiBjYXNlIHZpcnR1YWxfZ2IgY2hhbmdlZCAqLwogCXNkZWJ1Z19jYXBhY2l0eSA9IGdldF9zZGVidWdfY2FwYWNpdHkoKTsKIAltZW1zZXQoYXJyLCAwLCBTREVCVUdfUkVBRENBUF9BUlJfU1opOwpAQCAtMTE4MCwxMSArMTQ4OCw4IEBACiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NERUJVR19SRUFEQ0FQMTZfQVJSX1NaXTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgY2FwYWM7Ci0JaW50IGVycnN0cywgaywgYWxsb2NfbGVuOworCWludCBrLCBhbGxvY19sZW47CiAKLQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCBVQVNfT05MWSwgZGV2aXApOwotCWlmIChlcnJzdHMpCi0JCXJldHVybiBlcnJzdHM7CiAJYWxsb2NfbGVuID0gKChjbWRbMTBdIDw8IDI0KSArIChjbWRbMTFdIDw8IDE2KSArIChjbWRbMTJdIDw8IDgpCiAJCSAgICAgKyBjbWRbMTNdKTsKIAkvKiBmb2xsb3dpbmcganVzdCBpbiBjYXNlIHZpcnR1YWxfZ2IgY2hhbmdlZCAqLwpAQCAtMTMwMCw2ICsxNjA1LDE4NCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQKK3Jlc3BfcnN1cF9vcGNvZGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJYm9vbCByY3RkOworCXU4IHJlcG9ydGluZ19vcHRzLCByZXFfb3Bjb2RlLCBzZGViX2ksIHN1cHA7CisJdTE2IHJlcV9zYSwgdTsKKwl1MzIgYWxsb2NfbGVuLCBhX2xlbjsKKwlpbnQgaywgb2Zmc2V0LCBsZW4sIGVycnN0cywgY291bnQsIGJ1bXAsIG5hOworCWNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190ICpvaXA7CisJY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgKnJfb2lwOworCXU4ICphcnI7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKworCXJjdGQgPSAhIShjbWRbMl0gJiAweDgwKTsKKwlyZXBvcnRpbmdfb3B0cyA9IGNtZFsyXSAmIDB4NzsKKwlyZXFfb3Bjb2RlID0gY21kWzNdOworCXJlcV9zYSA9IGdldF91bmFsaWduZWRfYmUxNihjbWQgKyA0KTsKKwlhbGxvY19sZW4gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgNik7CisJaWYgKGFsbG9jX2xlbiA8IDQgJiYgYWxsb2NfbGVuID4gMHhmZmZmKSB7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDYsIC0xKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCWlmIChhbGxvY19sZW4gPiA4MTkyKQorCQlhX2xlbiA9IDgxOTI7CisJZWxzZQorCQlhX2xlbiA9IGFsbG9jX2xlbjsKKwlhcnIgPSBremFsbG9jKChhX2xlbiA8IDI1NikgPyAzMjAgOiBhX2xlbiArIDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBhcnIpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlNVRkZfUkVTX0FTQywKKwkJCQlJTlNVRkZfUkVTX0FTQ1EpOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJc3dpdGNoIChyZXBvcnRpbmdfb3B0cykgeworCWNhc2UgMDoJLyogYWxsIGNvbW1hbmRzICovCisJCS8qIGNvdW50IG51bWJlciBvZiBjb21tYW5kcyAqLworCQlmb3IgKGNvdW50ID0gMCwgb2lwID0gb3Bjb2RlX2luZm9fYXJyOworCQkgICAgIG9pcC0+bnVtX2F0dGFjaGVkICE9IDB4ZmY7ICsrb2lwKSB7CisJCQlpZiAoRl9JTlZfT1AgJiBvaXAtPmZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJY291bnQgKz0gKG9pcC0+bnVtX2F0dGFjaGVkICsgMSk7CisJCX0KKwkJYnVtcCA9IHJjdGQgPyAyMCA6IDg7CisJCXB1dF91bmFsaWduZWRfYmUzMihjb3VudCAqIGJ1bXAsIGFycik7CisJCWZvciAob2Zmc2V0ID0gNCwgb2lwID0gb3Bjb2RlX2luZm9fYXJyOworCQkgICAgIG9pcC0+bnVtX2F0dGFjaGVkICE9IDB4ZmYgJiYgb2Zmc2V0IDwgYV9sZW47ICsrb2lwKSB7CisJCQlpZiAoRl9JTlZfT1AgJiBvaXAtPmZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJbmEgPSBvaXAtPm51bV9hdHRhY2hlZDsKKwkJCWFycltvZmZzZXRdID0gb2lwLT5vcGNvZGU7CisJCQlwdXRfdW5hbGlnbmVkX2JlMTYob2lwLT5zYSwgYXJyICsgb2Zmc2V0ICsgMik7CisJCQlpZiAocmN0ZCkKKwkJCQlhcnJbb2Zmc2V0ICsgNV0gfD0gMHgyOworCQkJaWYgKEZGX1NBICYgb2lwLT5mbGFncykKKwkJCQlhcnJbb2Zmc2V0ICsgNV0gfD0gMHgxOworCQkJcHV0X3VuYWxpZ25lZF9iZTE2KG9pcC0+bGVuX21hc2tbMF0sIGFyciArIG9mZnNldCArIDYpOworCQkJaWYgKHJjdGQpCisJCQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4YSwgYXJyICsgb2Zmc2V0ICsgOCk7CisJCQlyX29pcCA9IG9pcDsKKwkJCWZvciAoayA9IDAsIG9pcCA9IG9pcC0+YXJycDsgayA8IG5hOyArK2ssICsrb2lwKSB7CisJCQkJaWYgKEZfSU5WX09QICYgb2lwLT5mbGFncykKKwkJCQkJY29udGludWU7CisJCQkJb2Zmc2V0ICs9IGJ1bXA7CisJCQkJYXJyW29mZnNldF0gPSBvaXAtPm9wY29kZTsKKwkJCQlwdXRfdW5hbGlnbmVkX2JlMTYob2lwLT5zYSwgYXJyICsgb2Zmc2V0ICsgMik7CisJCQkJaWYgKHJjdGQpCisJCQkJCWFycltvZmZzZXQgKyA1XSB8PSAweDI7CisJCQkJaWYgKEZGX1NBICYgb2lwLT5mbGFncykKKwkJCQkJYXJyW29mZnNldCArIDVdIHw9IDB4MTsKKwkJCQlwdXRfdW5hbGlnbmVkX2JlMTYob2lwLT5sZW5fbWFza1swXSwKKwkJCQkJCSAgIGFyciArIG9mZnNldCArIDYpOworCQkJCWlmIChyY3RkKQorCQkJCQlwdXRfdW5hbGlnbmVkX2JlMTYoMHhhLAorCQkJCQkJCSAgIGFyciArIG9mZnNldCArIDgpOworCQkJfQorCQkJb2lwID0gcl9vaXA7CisJCQlvZmZzZXQgKz0gYnVtcDsKKwkJfQorCQlicmVhazsKKwljYXNlIDE6CS8qIG9uZSBjb21tYW5kOiBvcGNvZGUgb25seSAqLworCWNhc2UgMjoJLyogb25lIGNvbW1hbmQ6IG9wY29kZSBwbHVzIHNlcnZpY2UgYWN0aW9uICovCisJY2FzZSAzOgkvKiBvbmUgY29tbWFuZDogaWYgc2E9PTAgdGhlbiBvcGNvZGUgb25seSBlbHNlIG9wY29kZStzYSAqLworCQlzZGViX2kgPSBvcGNvZGVfaW5kX2FycltyZXFfb3Bjb2RlXTsKKwkJb2lwID0gJm9wY29kZV9pbmZvX2FycltzZGViX2ldOworCQlpZiAoRl9JTlZfT1AgJiBvaXAtPmZsYWdzKSB7CisJCQlzdXBwID0gMTsKKwkJCW9mZnNldCA9IDQ7CisJCX0gZWxzZSB7CisJCQlpZiAoMSA9PSByZXBvcnRpbmdfb3B0cykgeworCQkJCWlmIChGRl9TQSAmIG9pcC0+ZmxhZ3MpIHsKKwkJCQkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwKKwkJCQkJCQkgICAgIDIsIDIpOworCQkJCQlrZnJlZShhcnIpOworCQkJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCQl9CisJCQkJcmVxX3NhID0gMDsKKwkJCX0gZWxzZSBpZiAoMiA9PSByZXBvcnRpbmdfb3B0cyAmJgorCQkJCSAgIDAgPT0gKEZGX1NBICYgb2lwLT5mbGFncykpIHsKKwkJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA0LCAtMSk7CisJCQkJa2ZyZWUoYXJyKTsJLyogcG9pbnQgYXQgcmVxdWVzdGVkIHNhICovCisJCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCQl9CisJCQlpZiAoMCA9PSAoRkZfU0EgJiBvaXAtPmZsYWdzKSAmJgorCQkJICAgIHJlcV9vcGNvZGUgPT0gb2lwLT5vcGNvZGUpCisJCQkJc3VwcCA9IDM7CisJCQllbHNlIGlmICgwID09IChGRl9TQSAmIG9pcC0+ZmxhZ3MpKSB7CisJCQkJbmEgPSBvaXAtPm51bV9hdHRhY2hlZDsKKwkJCQlmb3IgKGsgPSAwLCBvaXAgPSBvaXAtPmFycnA7IGsgPCBuYTsKKwkJCQkgICAgICsraywgKytvaXApIHsKKwkJCQkJaWYgKHJlcV9vcGNvZGUgPT0gb2lwLT5vcGNvZGUpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc3VwcCA9IChrID49IG5hKSA/IDEgOiAzOworCQkJfSBlbHNlIGlmIChyZXFfc2EgIT0gb2lwLT5zYSkgeworCQkJCW5hID0gb2lwLT5udW1fYXR0YWNoZWQ7CisJCQkJZm9yIChrID0gMCwgb2lwID0gb2lwLT5hcnJwOyBrIDwgbmE7CisJCQkJICAgICArK2ssICsrb2lwKSB7CisJCQkJCWlmIChyZXFfc2EgPT0gb2lwLT5zYSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzdXBwID0gKGsgPj0gbmEpID8gMSA6IDM7CisJCQl9IGVsc2UKKwkJCQlzdXBwID0gMzsKKwkJCWlmICgzID09IHN1cHApIHsKKwkJCQl1ID0gb2lwLT5sZW5fbWFza1swXTsKKwkJCQlwdXRfdW5hbGlnbmVkX2JlMTYodSwgYXJyICsgMik7CisJCQkJYXJyWzRdID0gb2lwLT5vcGNvZGU7CisJCQkJZm9yIChrID0gMTsgayA8IHU7ICsraykKKwkJCQkJYXJyWzQgKyBrXSA9IChrIDwgMTYpID8KKwkJCQkJCSBvaXAtPmxlbl9tYXNrW2tdIDogMHhmZjsKKwkJCQlvZmZzZXQgPSA0ICsgdTsKKwkJCX0gZWxzZQorCQkJCW9mZnNldCA9IDQ7CisJCX0KKwkJYXJyWzFdID0gKHJjdGQgPyAweDgwIDogMCkgfCBzdXBwOworCQlpZiAocmN0ZCkgeworCQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4YSwgYXJyICsgb2Zmc2V0KTsKKwkJCW9mZnNldCArPSAxMjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAyLCAyKTsKKwkJa2ZyZWUoYXJyKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCW9mZnNldCA9IChvZmZzZXQgPCBhX2xlbikgPyBvZmZzZXQgOiBhX2xlbjsKKwlsZW4gPSAob2Zmc2V0IDwgYWxsb2NfbGVuKSA/IG9mZnNldCA6IGFsbG9jX2xlbjsKKwllcnJzdHMgPSBmaWxsX2Zyb21fZGV2X2J1ZmZlcihzY3AsIGFyciwgbGVuKTsKKwlrZnJlZShhcnIpOworCXJldHVybiBlcnJzdHM7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc3BfcnN1cF90bWZzKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJYm9vbCByZXBkOworCXUzMiBhbGxvY19sZW4sIGxlbjsKKwl1OCBhcnJbMTZdOworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisKKwltZW1zZXQoYXJyLCAwLCBzaXplb2YoYXJyKSk7CisJcmVwZCA9ICEhKGNtZFsyXSAmIDB4ODApOworCWFsbG9jX2xlbiA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyA2KTsKKwlpZiAoYWxsb2NfbGVuIDwgNCkgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA2LCAtMSk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlhcnJbMF0gPSAweGM4OwkJLyogQVRTIHwgQVRTUyB8IExVUlMgKi8KKwlhcnJbMV0gPSAweDE7CQkvKiBJVE5SUyAqLworCWlmIChyZXBkKSB7CisJCWFyclszXSA9IDB4YzsKKwkJbGVuID0gMTY7CisJfSBlbHNlCisJCWxlbiA9IDQ7CisKKwlsZW4gPSAobGVuIDwgYWxsb2NfbGVuKSA/IGxlbiA6IGFsbG9jX2xlbjsKKwlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsIGxlbik7Cit9CisKIC8qIDw8Rm9sbG93aW5nIG1vZGUgcGFnZSBpbmZvIGNvcGllZCBmcm9tIFNUMzE4NDUxTFc+PiAqLwogCiBzdGF0aWMgaW50IHJlc3BfZXJyX3JlY292X3BnKHVuc2lnbmVkIGNoYXIgKiBwLCBpbnQgcGNvbnRyb2wsIGludCB0YXJnZXQpCkBAIC0xNDU5LDIwICsxOTQyLDE4IEBACiAKICNkZWZpbmUgU0RFQlVHX01BWF9NU0VOU0VfU1ogMjU2CiAKLXN0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsIGludCB0YXJnZXQsCi0JCQkgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50CityZXNwX21vZGVfc2Vuc2Uoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKIAl1bnNpZ25lZCBjaGFyIGRiZCwgbGxiYWE7CiAJaW50IHBjb250cm9sLCBwY29kZSwgc3VicGNvZGUsIGJkX2xlbjsKIAl1bnNpZ25lZCBjaGFyIGRldl9zcGVjOwotCWludCBrLCBhbGxvY19sZW4sIG1zZW5zZV82LCBvZmZzZXQsIGxlbiwgZXJyc3RzLCB0YXJnZXRfZGV2X2lkOworCWludCBrLCBhbGxvY19sZW4sIG1zZW5zZV82LCBvZmZzZXQsIGxlbiwgdGFyZ2V0X2Rldl9pZDsKKwlpbnQgdGFyZ2V0ID0gc2NwLT5kZXZpY2UtPmlkOwogCXVuc2lnbmVkIGNoYXIgKiBhcDsKIAl1bnNpZ25lZCBjaGFyIGFycltTREVCVUdfTUFYX01TRU5TRV9TWl07CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCi0JZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKHNjcCwgVUFTX09OTFksIGRldmlwKTsKLQlpZiAoZXJyc3RzKQotCQlyZXR1cm4gZXJyc3RzOwogCWRiZCA9ICEhKGNtZFsxXSAmIDB4OCk7CiAJcGNvbnRyb2wgPSAoY21kWzJdICYgMHhjMCkgPj4gNjsKIAlwY29kZSA9IGNtZFsyXSAmIDB4M2Y7CkBAIC0xNTQyLDggKzIwMjMsNyBAQAogCiAJaWYgKChzdWJwY29kZSA+IDB4MCkgJiYgKHN1YnBjb2RlIDwgMHhmZikgJiYgKDB4MTkgIT0gcGNvZGUpKSB7CiAJCS8qIFRPRE86IENvbnRyb2wgRXh0ZW5zaW9uIHBhZ2UgKi8KLQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwKLQkJCSAgICAgICAJMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDMsIC0xKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXN3aXRjaCAocGNvZGUpIHsKQEAgLTE1NjksOCArMjA0OSw3IEBACiAJCWJyZWFrOwogCWNhc2UgMHgxOToJLyogaWYgc3BjPT0xIHRoZW4gc2FzIHBoeSwgY29udHJvbCtkaXNjb3ZlciAqLwogCQlpZiAoKHN1YnBjb2RlID4gMHgyKSAmJiAoc3VicGNvZGUgPCAweGZmKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAzLCAtMSk7CiAJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAkgICAgICAgIH0KIAkJbGVuID0gMDsKQEAgLTE2MDIsMTUgKzIwODEsMTMgQEAKIAkJCX0KIAkJCWxlbiArPSByZXNwX2llY19tX3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKIAkJfSBlbHNlIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgMywgLTEpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQogCQlvZmZzZXQgKz0gbGVuOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAotCQkJICAgICAgIAkwKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgMiwgNSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAlpZiAobXNlbnNlXzYpCkBAIC0xNjI0LDI0ICsyMTAxLDIxIEBACiAKICNkZWZpbmUgU0RFQlVHX01BWF9NU0VMRUNUX1NaIDUxMgogCi1zdGF0aWMgaW50IHJlc3BfbW9kZV9zZWxlY3Qoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwgaW50IG1zZWxlY3Q2LAotCQkJICAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKK3N0YXRpYyBpbnQKK3Jlc3BfbW9kZV9zZWxlY3Qoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKIAlpbnQgcGYsIHNwLCBwcywgbWRfbGVuLCBiZF9sZW4sIG9mZiwgc3BmLCBwZ19sZW47Ci0JaW50IHBhcmFtX2xlbiwgcmVzLCBlcnJzdHMsIG1wYWdlOworCWludCBwYXJhbV9sZW4sIHJlcywgbXBhZ2U7CiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX01BWF9NU0VMRUNUX1NaXTsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSBzY3AtPmNtbmQ7CisJaW50IG1zZWxlY3Q2ID0gKE1PREVfU0VMRUNUID09IGNtZFswXSk7CiAKLQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCBVQVNfT05MWSwgZGV2aXApOwotCWlmIChlcnJzdHMpCi0JCXJldHVybiBlcnJzdHM7CiAJbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOwogCXBmID0gY21kWzFdICYgMHgxMDsKIAlzcCA9IGNtZFsxXSAmIDB4MTsKIAlwYXJhbV9sZW4gPSBtc2VsZWN0NiA/IGNtZFs0XSA6ICgoY21kWzddIDw8IDgpICsgY21kWzhdKTsKIAlpZiAoKDAgPT0gcGYpIHx8IHNwIHx8IChwYXJhbV9sZW4gPiBTREVCVUdfTUFYX01TRUxFQ1RfU1opKSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIG1zZWxlY3Q2ID8gNCA6IDcsIC0xKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogICAgICAgICByZXMgPSBmZXRjaF90b19kZXZfYnVmZmVyKHNjcCwgYXJyLCBwYXJhbV9sZW4pOwpAQCAtMTY1NSwxNiArMjEyOSwxNCBAQAogCW1kX2xlbiA9IG1zZWxlY3Q2ID8gKGFyclswXSArIDEpIDogKChhcnJbMF0gPDwgOCkgKyBhcnJbMV0gKyAyKTsKIAliZF9sZW4gPSBtc2VsZWN0NiA/IGFyclszXSA6ICgoYXJyWzZdIDw8IDgpICsgYXJyWzddKTsKIAlpZiAobWRfbGVuID4gMikgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJSU5WQUxJRF9GSUVMRF9JTl9QQVJBTV9MSVNULCAwKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0RBVEEsIDAsIC0xKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCW9mZiA9IGJkX2xlbiArIChtc2VsZWN0NiA/IDQgOiA4KTsKIAltcGFnZSA9IGFycltvZmZdICYgMHgzZjsKIAlwcyA9ICEhKGFycltvZmZdICYgMHg4MCk7CiAJaWYgKHBzKSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQlJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QsIDApOworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fREFUQSwgb2ZmLCA3KTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXNwZiA9ICEhKGFycltvZmZdICYgMHg0MCk7CkBAIC0xNzAxLDggKzIxNzMsNyBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQlJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QsIDApOworCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9EQVRBLCBvZmYsIDUpOwogCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0Owogc2V0X21vZGVfY2hhbmdlZF91YToKIAlzZXRfYml0KFNERUJVR19VQV9NT0RFX0NIQU5HRUQsIGRldmlwLT51YXNfYm0pOwpAQCAtMTczNywxOSArMjIwOCwxNSBAQAogc3RhdGljIGludCByZXNwX2xvZ19zZW5zZShzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7Ci0JaW50IHBwYywgc3AsIHBjb250cm9sLCBwY29kZSwgc3VicGNvZGUsIGFsbG9jX2xlbiwgZXJyc3RzLCBsZW4sIG47CisJaW50IHBwYywgc3AsIHBjb250cm9sLCBwY29kZSwgc3VicGNvZGUsIGFsbG9jX2xlbiwgbGVuLCBuOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NERUJVR19NQVhfTFNFTlNFX1NaXTsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSBzY3AtPmNtbmQ7CiAKLQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCBVQVNfT05MWSwgZGV2aXApOwotCWlmIChlcnJzdHMpCi0JCXJldHVybiBlcnJzdHM7CiAJbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOwogCXBwYyA9IGNtZFsxXSAmIDB4MjsKIAlzcCA9IGNtZFsxXSAmIDB4MTsKIAlpZiAocHBjIHx8IHNwKSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDEsIHBwYyA/IDEgOiAwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXBjb250cm9sID0gKGNtZFsyXSAmIDB4YzApID4+IDY7CkBAIC0xNzczLDggKzIyNDAsNyBAQAogCQkJYXJyWzNdID0gcmVzcF9pZV9sX3BnKGFyciArIDQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKKwkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDIsIDUpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAl9IGVsc2UgaWYgKDB4ZmYgPT0gc3VicGNvZGUpIHsKQEAgLTE4MDYsMTMgKzIyNzIsMTEgQEAKIAkJCWFyclszXSA9IG4gLSA0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKKwkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDIsIDUpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAl9IGVsc2UgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAzLCAtMSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAlsZW4gPSBtaW4oKChhcnJbMl0gPDwgOCkgKyBhcnJbM10pICsgNCwgYWxsb2NfbGVuKTsKQEAgLTE4MjQsMTEgKzIyODgsMTIgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtKQogewogCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBBRERSX09VVF9PRl9SQU5HRSwgMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgTEJBX09VVF9PRl9SQU5HRSwgMCk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAkvKiB0cmFuc2ZlciBsZW5ndGggZXhjZXNzaXZlICh0aWUgaW4gdG8gYmxvY2sgbGltaXRzIFZQRCBwYWdlKSAqLwogCWlmIChudW0gPiBzZGVidWdfc3RvcmVfc2VjdG9ycykgeworCQkvKiBuZWVkcyB3b3JrIHRvIGZpbmQgd2hpY2ggY2RiIGJ5dGUgJ251bScgY29tZXMgZnJvbSAqLwogCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQpAQCAtMTgzNiwxNyArMjMwMSwxNyBAQAogfQogCiAvKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyBjb3BpZWQgb3IgLTEgaWYgZXJyb3IuICovCi1zdGF0aWMgaW50IGRvX2RldmljZV9hY2Nlc3Moc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtLCBpbnQgd3JpdGUpCitzdGF0aWMgaW50Citkb19kZXZpY2VfYWNjZXNzKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHU2NCBsYmEsIHUzMiBudW0sIGJvb2wgZG9fd3JpdGUpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIHJlc3QgPSAwOworCXU2NCBibG9jaywgcmVzdCA9IDA7CiAJc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYjsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CiAJc2l6ZV90ICgqZnVuYykoc3RydWN0IHNjYXR0ZXJsaXN0ICosIHVuc2lnbmVkIGludCwgdm9pZCAqLCBzaXplX3QsCiAJCSAgICAgICBvZmZfdCk7CiAKLQlpZiAod3JpdGUpIHsKKwlpZiAoZG9fd3JpdGUpIHsKIAkJc2RiID0gc2NzaV9vdXQoc2NtZCk7CiAJCWRpciA9IERNQV9UT19ERVZJQ0U7CiAJCWZ1bmMgPSBzZ19wY29weV90b19idWZmZXI7CkBAIC0xODgwLDYgKzIzNDUsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBJZiBmYWtlX3N0b3JlKGxiYSxudW0pIGNvbXBhcmVzIGVxdWFsIHRvIGFycihudW0pLCB0aGVuIGNvcHkgdG9wIGhhbGYgb2YKKyAqIGFyciBpbnRvIGZha2Vfc3RvcmUobGJhLG51bSkgYW5kIHJldHVybiB0cnVlLiBJZiBjb21wYXJpc29uIGZhaWxzIHRoZW4KKyAqIHJldHVybiBmYWxzZS4gKi8KK3N0YXRpYyBib29sCitjb21wX3dyaXRlX3dvcmtlcih1NjQgbGJhLCB1MzIgbnVtLCBjb25zdCB1OCAqYXJyKQoreworCWJvb2wgcmVzOworCXU2NCBibG9jaywgcmVzdCA9IDA7CisJdTMyIHN0b3JlX2Jsa3MgPSBzZGVidWdfc3RvcmVfc2VjdG9yczsKKwl1MzIgbGJfc2l6ZSA9IHNjc2lfZGVidWdfc2VjdG9yX3NpemU7CisKKwlibG9jayA9IGRvX2RpdihsYmEsIHN0b3JlX2Jsa3MpOworCWlmIChibG9jayArIG51bSA+IHN0b3JlX2Jsa3MpCisJCXJlc3QgPSBibG9jayArIG51bSAtIHN0b3JlX2Jsa3M7CisKKwlyZXMgPSAhbWVtY21wKGZha2Vfc3RvcmVwICsgKGJsb2NrICogbGJfc2l6ZSksIGFyciwKKwkJICAgICAgKG51bSAtIHJlc3QpICogbGJfc2l6ZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiByZXM7CisJaWYgKHJlc3QpCisJCXJlcyA9IG1lbWNtcChmYWtlX3N0b3JlcCwgYXJyICsgKChudW0gLSByZXN0KSAqIGxiX3NpemUpLAorCQkJICAgICByZXN0ICogbGJfc2l6ZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiByZXM7CisJYXJyICs9IG51bSAqIGxiX3NpemU7CisJbWVtY3B5KGZha2Vfc3RvcmVwICsgKGJsb2NrICogbGJfc2l6ZSksIGFyciwgKG51bSAtIHJlc3QpICogbGJfc2l6ZSk7CisJaWYgKHJlc3QpCisJCW1lbWNweShmYWtlX3N0b3JlcCwgYXJyICsgKChudW0gLSByZXN0KSAqIGxiX3NpemUpLAorCQkgICAgICAgcmVzdCAqIGxiX3NpemUpOworCXJldHVybiByZXM7Cit9CisKIHN0YXRpYyBfX2JlMTYgZGlmX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWYsIGludCBsZW4pCiB7CiAJX19iZTE2IGNzdW07CkBAIC0xOTkyLDU1ICsyNDg5LDE0MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlc3BfcmVhZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKLQkJICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1MzIgZWlfbGJhKQorc3RhdGljIGludAorcmVzcF9yZWFkX2R0MChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogeworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisJdTY0IGxiYTsKKwl1MzIgbnVtOworCXUzMiBlaV9sYmE7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJaW50IHJldDsKKwlib29sIGNoZWNrX3Byb3Q7CiAKLQlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhTQ3BudCwgbGJhLCBudW0pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJc3dpdGNoIChjbWRbMF0pIHsKKwljYXNlIFJFQURfMTY6CisJCWVpX2xiYSA9IDA7CisJCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAyKTsKKwkJbnVtID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDEwKTsKKwkJY2hlY2tfcHJvdCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgUkVBRF8xMDoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFJFQURfNjoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gKHUzMiljbWRbM10gfCAodTMyKWNtZFsyXSA8PCA4IHwKKwkJICAgICAgKHUzMikoY21kWzFdICYgMHgxZikgPDwgMTY7CisJCW51bSA9ICgwID09IGNtZFs0XSkgPyAyNTYgOiBjbWRbNF07CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFJFQURfMTI6CisJCWVpX2xiYSA9IDA7CisJCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyKTsKKwkJbnVtID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDYpOworCQljaGVja19wcm90ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBYRFdSSVRFUkVBRF8xMDoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJCWNoZWNrX3Byb3QgPSBmYWxzZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoJLyogYXNzdW1lIFJFQUQoMzIpICovCisJCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAxMik7CisJCWVpX2xiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyMCk7CisJCW51bSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyOCk7CisJCWNoZWNrX3Byb3QgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCWlmIChjaGVja19wcm90KSB7CisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX29wY29kZShzY3ApOworCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0KKwkJaWYgKChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8fAorCQkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApID09IDApCisJCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NwLT5kZXZpY2UsICJVbnByb3RlY3RlZCBSRCAiCisJCQkJICAgICJ0byBESUYgZGV2aWNlXG4iKTsKKwl9CisJaWYgKHNkZWJ1Z19hbnlfaW5qZWN0aW5nX29wdCkgeworCQlzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCAqZXAgPSBzY3NpX2NtZF9wcml2KHNjcCk7CisKKwkJaWYgKGVwLT5pbmpfc2hvcnQpCisJCQludW0gLz0gMjsKKwl9CisKKwkvKiBpbmxpbmUgY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoKSAqLworCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBMQkFfT1VUX09GX1JBTkdFLCAwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCS8qIHRyYW5zZmVyIGxlbmd0aCBleGNlc3NpdmUgKHRpZSBpbiB0byBibG9jayBsaW1pdHMgVlBEIHBhZ2UpICovCisJaWYgKG51bSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKSB7CisJCS8qIG5lZWRzIHdvcmsgdG8gZmluZCB3aGljaCBjZGIgYnl0ZSAnbnVtJyBjb21lcyBmcm9tICovCisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CiAKIAlpZiAoKFNDU0lfREVCVUdfT1BUX01FRElVTV9FUlIgJiBzY3NpX2RlYnVnX29wdHMpICYmCiAJICAgIChsYmEgPD0gKE9QVF9NRURJVU1fRVJSX0FERFIgKyBPUFRfTUVESVVNX0VSUl9OVU0gLSAxKSkgJiYKIAkgICAgKChsYmEgKyBudW0pID4gT1BUX01FRElVTV9FUlJfQUREUikpIHsKIAkJLyogY2xhaW0gdW5yZWNvdmVyYWJsZSByZWFkIGVycm9yICovCi0JCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgTUVESVVNX0VSUk9SLCBVTlJFQ09WRVJFRF9SRUFEX0VSUiwgMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIE1FRElVTV9FUlJPUiwgVU5SRUNPVkVSRURfUkVBRF9FUlIsIDApOwogCQkvKiBzZXQgaW5mbyBmaWVsZCBhbmQgdmFsaWQgYml0IGZvciBmaXhlZCBkZXNjcmlwdG9yICovCi0JCWlmICgweDcwID09IChTQ3BudC0+c2Vuc2VfYnVmZmVyWzBdICYgMHg3ZikpIHsKLQkJCVNDcG50LT5zZW5zZV9idWZmZXJbMF0gfD0gMHg4MDsJLyogVmFsaWQgYml0ICovCisJCWlmICgweDcwID09IChzY3AtPnNlbnNlX2J1ZmZlclswXSAmIDB4N2YpKSB7CisJCQlzY3AtPnNlbnNlX2J1ZmZlclswXSB8PSAweDgwOwkvKiBWYWxpZCBiaXQgKi8KIAkJCXJldCA9IChsYmEgPCBPUFRfTUVESVVNX0VSUl9BRERSKQogCQkJICAgICAgPyBPUFRfTUVESVVNX0VSUl9BRERSIDogKGludClsYmE7Ci0JCQlTQ3BudC0+c2Vuc2VfYnVmZmVyWzNdID0gKHJldCA+PiAyNCkgJiAweGZmOwotCQkJU0NwbnQtPnNlbnNlX2J1ZmZlcls0XSA9IChyZXQgPj4gMTYpICYgMHhmZjsKLQkJCVNDcG50LT5zZW5zZV9idWZmZXJbNV0gPSAocmV0ID4+IDgpICYgMHhmZjsKLQkJCVNDcG50LT5zZW5zZV9idWZmZXJbNl0gPSByZXQgJiAweGZmOworCQkJcHV0X3VuYWxpZ25lZF9iZTMyKHJldCwgc2NwLT5zZW5zZV9idWZmZXIgKyAzKTsKIAkJfQotCSAgICAgICAgc2NzaV9zZXRfcmVzaWQoU0NwbnQsIHNjc2lfYnVmZmxlbihTQ3BudCkpOworCQlzY3NpX3NldF9yZXNpZChzY3AsIHNjc2lfYnVmZmxlbihzY3ApKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCiAJcmVhZF9sb2NrX2lycXNhdmUoJmF0b21pY19ydywgaWZsYWdzKTsKIAogCS8qIERJWCArIFQxMCBESUYgKi8KLQlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV9yZWFkKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKKwlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KHNjcCkpIHsKKwkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfcmVhZChzY3AsIGxiYSwgbnVtLCBlaV9sYmEpOwogCiAJCWlmIChwcm90X3JldCkgewogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBBQk9SVEVEX0NPTU1BTkQsIDB4MTAsIHByb3RfcmV0KTsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgcHJvdF9yZXQpOwogCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKIAkJfQogCX0KIAotCXJldCA9IGRvX2RldmljZV9hY2Nlc3MoU0NwbnQsIGxiYSwgbnVtLCAwKTsKKwlyZXQgPSBkb19kZXZpY2VfYWNjZXNzKHNjcCwgbGJhLCBudW0sIGZhbHNlKTsKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfcncsIGlmbGFncyk7CiAJaWYgKHJldCA9PSAtMSkKIAkJcmV0dXJuIERJRF9FUlJPUiA8PCAxNjsKIAotCXNjc2lfaW4oU0NwbnQpLT5yZXNpZCA9IHNjc2lfYnVmZmxlbihTQ3BudCkgLSByZXQ7CisJc2NzaV9pbihzY3ApLT5yZXNpZCA9IHNjc2lfYnVmZmxlbihzY3ApIC0gcmV0OwogCisJaWYgKHNkZWJ1Z19hbnlfaW5qZWN0aW5nX29wdCkgeworCQlzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCAqZXAgPSBzY3NpX2NtZF9wcml2KHNjcCk7CisKKwkJaWYgKGVwLT5pbmpfcmVjb3ZlcmVkKSB7CisJCQlta19zZW5zZV9idWZmZXIoc2NwLCBSRUNPVkVSRURfRVJST1IsCisJCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7CisJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfSBlbHNlIGlmIChlcC0+aW5qX3RyYW5zcG9ydCkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgQUJPUlRFRF9DT01NQU5ELAorCQkJCQlUUkFOU1BPUlRfUFJPQkxFTSwgQUNLX05BS19UTyk7CisJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfSBlbHNlIGlmIChlcC0+aW5qX2RpZikgeworCQkJLyogTG9naWNhbCBibG9jayBndWFyZCBjaGVjayBmYWlsZWQgKi8KKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgMSk7CisJCQlyZXR1cm4gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UgaWYgKGVwLT5pbmpfZGl4KSB7CisJCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsIDEpOworCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIyMywzMSArMjgwOCw5NSBAQAogCX0KIH0KIAotc3RhdGljIGludCByZXNwX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1MzIgZWlfbGJhKQorc3RhdGljIGludAorcmVzcF93cml0ZV9kdDAoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKKwl1OCAqY21kID0gc2NwLT5jbW5kOworCXU2NCBsYmE7CisJdTMyIG51bTsKKwl1MzIgZWlfbGJhOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCWludCByZXQ7CisJYm9vbCBjaGVja19wcm90OwogCi0JcmV0ID0gY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoU0NwbnQsIGxiYSwgbnVtKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCXN3aXRjaCAoY21kWzBdKSB7CisJY2FzZSBXUklURV8xNjoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTY0KGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMTApOworCQljaGVja19wcm90ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV8xMDoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFdSSVRFXzY6CisJCWVpX2xiYSA9IDA7CisJCWxiYSA9ICh1MzIpY21kWzNdIHwgKHUzMiljbWRbMl0gPDwgOCB8CisJCSAgICAgICh1MzIpKGNtZFsxXSAmIDB4MWYpIDw8IDE2OworCQludW0gPSAoMCA9PSBjbWRbNF0pID8gMjU2IDogY21kWzRdOworCQljaGVja19wcm90ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV8xMjoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgNik7CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIDB4NTM6CS8qIFhEV1JJVEVSRUFEKDEwKSAqLworCQllaV9sYmEgPSAwOworCQlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMik7CisJCW51bSA9IGdldF91bmFsaWduZWRfYmUxNihjbWQgKyA3KTsKKwkJY2hlY2tfcHJvdCA9IGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgkvKiBhc3N1bWUgV1JJVEUoMzIpICovCisJCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAxMik7CisJCWVpX2xiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyMCk7CisJCW51bSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyOCk7CisJCWNoZWNrX3Byb3QgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCWlmIChjaGVja19wcm90KSB7CisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX29wY29kZShzY3ApOworCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0KKwkJaWYgKChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8fAorCQkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApID09IDApCisJCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NwLT5kZXZpY2UsICJVbnByb3RlY3RlZCBXUiAiCisJCQkJICAgICJ0byBESUYgZGV2aWNlXG4iKTsKKwl9CisKKwkvKiBpbmxpbmUgY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoKSAqLworCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBMQkFfT1VUX09GX1JBTkdFLCAwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCS8qIHRyYW5zZmVyIGxlbmd0aCBleGNlc3NpdmUgKHRpZSBpbiB0byBibG9jayBsaW1pdHMgVlBEIHBhZ2UpICovCisJaWYgKG51bSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKSB7CisJCS8qIG5lZWRzIHdvcmsgdG8gZmluZCB3aGljaCBjZGIgYnl0ZSAnbnVtJyBjb21lcyBmcm9tICovCisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmF0b21pY19ydywgaWZsYWdzKTsKIAogCS8qIERJWCArIFQxMCBESUYgKi8KLQlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV93cml0ZShTQ3BudCwgbGJhLCBudW0sIGVpX2xiYSk7CisJaWYgKHNjc2lfZGVidWdfZGl4ICYmIHNjc2lfcHJvdF9zZ19jb3VudChzY3ApKSB7CisJCWludCBwcm90X3JldCA9IHByb3RfdmVyaWZ5X3dyaXRlKHNjcCwgbGJhLCBudW0sIGVpX2xiYSk7CiAKIAkJaWYgKHByb3RfcmV0KSB7CiAJCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsCi0JCQkJCXByb3RfcmV0KTsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgcHJvdF9yZXQpOwogCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKIAkJfQogCX0KIAotCXJldCA9IGRvX2RldmljZV9hY2Nlc3MoU0NwbnQsIGxiYSwgbnVtLCAxKTsKKwlyZXQgPSBkb19kZXZpY2VfYWNjZXNzKHNjcCwgbGJhLCBudW0sIHRydWUpOwogCWlmIChzY3NpX2RlYnVnX2xicCgpKQogCQltYXBfcmVnaW9uKGxiYSwgbnVtKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwpAQCAtMjI1NSwzMCArMjkwNCw0MSBAQAogCQlyZXR1cm4gKERJRF9FUlJPUiA8PCAxNik7CiAJZWxzZSBpZiAoKHJldCA8IChudW0gKiBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKSkgJiYKIAkJIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykpCi0JCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQtPmRldmljZSwKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY3AtPmRldmljZSwKIAkJCSAgICAiJXM6IHdyaXRlOiBjZGIgaW5kaWNhdGVkPSV1LCBJTyBzZW50PSVkIGJ5dGVzXG4iLAogCQkJICAgIG15X25hbWUsIG51bSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUsIHJldCk7CiAKKwlpZiAoc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0KSB7CisJCXN0cnVjdCBzZGVidWdfc2NtZF9leHRyYV90ICplcCA9IHNjc2lfY21kX3ByaXYoc2NwKTsKKworCQlpZiAoZXAtPmlual9yZWNvdmVyZWQpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIFJFQ09WRVJFRF9FUlJPUiwKKwkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UgaWYgKGVwLT5pbmpfZGlmKSB7CisJCQkvKiBMb2dpY2FsIGJsb2NrIGd1YXJkIGNoZWNrIGZhaWxlZCAqLworCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgQUJPUlRFRF9DT01NQU5ELCAweDEwLCAxKTsKKwkJCXJldHVybiBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0gZWxzZSBpZiAoZXAtPmlual9kaXgpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgMSk7CisJCQlyZXR1cm4gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OworCQl9CisJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlc3Bfd3JpdGVfc2FtZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1MzIgZWlfbGJhLCB1bnNpZ25lZCBpbnQgdW5tYXApCitzdGF0aWMgaW50CityZXNwX3dyaXRlX3NhbWUoc3RydWN0IHNjc2lfY21uZCAqc2NwLCB1NjQgbGJhLCB1MzIgbnVtLCB1MzIgZWlfbGJhLAorCQlib29sIHVubWFwLCBib29sIG5kb2IpCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBsb25nIGk7CiAJaW50IHJldDsKIAotCXJldCA9IGNoZWNrX2RldmljZV9hY2Nlc3NfcGFyYW1zKHNjbWQsIGxiYSwgbnVtKTsKKwlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhzY3AsIGxiYSwgbnVtKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKG51bSA+IHNjc2lfZGVidWdfd3JpdGVfc2FtZV9sZW5ndGgpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKHNjbWQsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsCi0JCQkJMCk7Ci0JCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCX0KLQogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCiAJaWYgKHVubWFwICYmIHNjc2lfZGVidWdfbGJwKCkpIHsKQEAgLTIyODYsMTcgKzI5NDYsMjIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogRWxzZSBmZXRjaCBvbmUgbG9naWNhbCBibG9jayAqLwotCXJldCA9IGZldGNoX3RvX2Rldl9idWZmZXIoc2NtZCwKLQkJCQkgIGZha2Vfc3RvcmVwICsgKGxiYSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpLAotCQkJCSAgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSk7CisJLyogaWYgbmRvYiB0aGVuIHplcm8gMSBsb2dpY2FsIGJsb2NrLCBlbHNlIGZldGNoIDEgbG9naWNhbCBibG9jayAqLworCWlmIChuZG9iKSB7CisJCW1lbXNldChmYWtlX3N0b3JlcCArIChsYmEgKiBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKSwgMCwKKwkJICAgICAgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOworCQlyZXQgPSAwOworCX0gZWxzZQorCQlyZXQgPSBmZXRjaF90b19kZXZfYnVmZmVyKHNjcCwgZmFrZV9zdG9yZXAgKworCQkJCQkgICAgICAgKGxiYSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpLAorCQkJCQkgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOwogCiAJaWYgKC0xID09IHJldCkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCQlyZXR1cm4gKERJRF9FUlJPUiA8PCAxNik7CiAJfSBlbHNlIGlmICgocmV0IDwgKG51bSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpKSAmJgogCQkgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKSkKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY21kLT5kZXZpY2UsCisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2NwLT5kZXZpY2UsCiAJCQkgICAgIiVzOiAlczogY2RiIGluZGljYXRlZD0ldSwgSU8gc2VudD0lZCBieXRlc1xuIiwKIAkJCSAgICBteV9uYW1lLCAid3JpdGUgc2FtZSIsCiAJCQkgICAgbnVtICogc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSwgcmV0KTsKQEAgLTIzMTUsMTMgKzI5ODAsMTQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK3Jlc3Bfd3JpdGVfc2FtZV8xMChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQoreworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisJdTMyIGxiYTsKKwl1MTYgbnVtOworCXUzMiBlaV9sYmEgPSAwOworCWJvb2wgdW5tYXAgPSBmYWxzZTsKKworCWlmIChjbWRbMV0gJiAweDgpIHsKKwkJaWYgKHNjc2lfZGVidWdfbGJwd3MxMCA9PSAwKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAxLCAzKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UKKwkJCXVubWFwID0gdHJ1ZTsKKwl9CisJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCW51bSA9IGdldF91bmFsaWduZWRfYmUxNihjbWQgKyA3KTsKKwlpZiAobnVtID4gc2NzaV9kZWJ1Z193cml0ZV9zYW1lX2xlbmd0aCkgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA3LCAtMSk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlyZXR1cm4gcmVzcF93cml0ZV9zYW1lKHNjcCwgbGJhLCBudW0sIGVpX2xiYSwgdW5tYXAsIGZhbHNlKTsKK30KKworc3RhdGljIGludAorcmVzcF93cml0ZV9zYW1lXzE2KHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKwl1NjQgbGJhOworCXUzMiBudW07CisJdTMyIGVpX2xiYSA9IDA7CisJYm9vbCB1bm1hcCA9IGZhbHNlOworCWJvb2wgbmRvYiA9IGZhbHNlOworCisJaWYgKGNtZFsxXSAmIDB4OCkgewkvKiBVTk1BUCAqLworCQlpZiAoc2NzaV9kZWJ1Z19sYnB3cyA9PSAwKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAxLCAzKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UKKwkJCXVubWFwID0gdHJ1ZTsKKwl9CisJaWYgKGNtZFsxXSAmIDB4MSkgIC8qIE5ET0IgKG5vIGRhdGEtb3V0IGJ1ZmZlciwgYXNzdW1lcyB6ZXJvZXMpICovCisJCW5kb2IgPSB0cnVlOworCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAyKTsKKwludW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMTApOworCWlmIChudW0gPiBzY3NpX2RlYnVnX3dyaXRlX3NhbWVfbGVuZ3RoKSB7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDEwLCAtMSk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlyZXR1cm4gcmVzcF93cml0ZV9zYW1lKHNjcCwgbGJhLCBudW0sIGVpX2xiYSwgdW5tYXAsIG5kb2IpOworfQorCitzdGF0aWMgaW50CityZXNwX2NvbXBfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKK3sKKwl1OCAqY21kID0gc2NwLT5jbW5kOworCXU4ICphcnI7CisJdTggKmZha2Vfc3RvcmVwX2hvbGQ7CisJdTY0IGxiYTsKKwl1MzIgZG51bTsKKwl1MzIgbGJfc2l6ZSA9IHNjc2lfZGVidWdfc2VjdG9yX3NpemU7CisJdTggbnVtOworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCWludCByZXQ7CisKKwlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMik7CisJbnVtID0gY21kWzEzXTsJCS8qIDEgdG8gYSBtYXhpbXVtIG9mIDI1NSBsb2dpY2FsIGJsb2NrcyAqLworCWlmICgwID09IG51bSkKKwkJcmV0dXJuIDA7CS8qIGRlZ2VuZXJhdGUgY2FzZSwgbm90IGFuIGVycm9yICovCisJZG51bSA9IDIgKiBudW07CisJYXJyID0ga3phbGxvYyhkbnVtICogbGJfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKE5VTEwgPT0gYXJyKSB7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5TVUZGX1JFU19BU0MsCisJCQkJSU5TVUZGX1JFU19BU0NRKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCSAgICAoY21kWzFdICYgMHhlMCkpIHsKKwkJbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc2NwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCWlmICgoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gfHwKKwkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKKwkJc2Rldl9wcmludGsoS0VSTl9FUlIsIHNjcC0+ZGV2aWNlLCAiVW5wcm90ZWN0ZWQgV1IgIgorCQkJICAgICJ0byBESUYgZGV2aWNlXG4iKTsKKworCS8qIGlubGluZSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcygpICovCisJaWYgKGxiYSArIG51bSA+IHNkZWJ1Z19jYXBhY2l0eSkgeworCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIExCQV9PVVRfT0ZfUkFOR0UsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJLyogdHJhbnNmZXIgbGVuZ3RoIGV4Y2Vzc2l2ZSAodGllIGluIHRvIGJsb2NrIGxpbWl0cyBWUEQgcGFnZSkgKi8KKwlpZiAobnVtID4gc2RlYnVnX3N0b3JlX3NlY3RvcnMpIHsKKwkJLyogbmVlZHMgd29yayB0byBmaW5kIHdoaWNoIGNkYiBieXRlICdudW0nIGNvbWVzIGZyb20gKi8KKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYXRvbWljX3J3LCBpZmxhZ3MpOworCisJLyogdHJpY2sgZG9fZGV2aWNlX2FjY2VzcygpIHRvIGZldGNoIGJvdGggY29tcGFyZSBhbmQgd3JpdGUgYnVmZmVycworCSAqIGZyb20gZGF0YS1pbiBpbnRvIGFyci4gU2FmZSAoYXRvbWljKSBzaW5jZSB3cml0ZV9sb2NrIGhlbGQuICovCisJZmFrZV9zdG9yZXBfaG9sZCA9IGZha2Vfc3RvcmVwOworCWZha2Vfc3RvcmVwID0gYXJyOworCXJldCA9IGRvX2RldmljZV9hY2Nlc3Moc2NwLCAwLCBkbnVtLCB0cnVlKTsKKwlmYWtlX3N0b3JlcCA9IGZha2Vfc3RvcmVwX2hvbGQ7CisJaWYgKHJldCA9PSAtMSkgeworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOworCQlrZnJlZShhcnIpOworCQlyZXR1cm4gRElEX0VSUk9SIDw8IDE2OworCX0gZWxzZSBpZiAoKHJldCA8IChkbnVtICogbGJfc2l6ZSkpICYmCisJCSAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpKQorCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNjcC0+ZGV2aWNlLCAiJXM6IGNvbXBhcmVfd3JpdGU6IGNkYiAiCisJCQkgICAgImluZGljYXRlZD0ldSwgSU8gc2VudD0lZCBieXRlc1xuIiwgbXlfbmFtZSwKKwkJCSAgICBkbnVtICogbGJfc2l6ZSwgcmV0KTsKKwlpZiAoIWNvbXBfd3JpdGVfd29ya2VyKGxiYSwgbnVtLCBhcnIpKSB7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfcncsIGlmbGFncyk7CisJCWtmcmVlKGFycik7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIE1JU0NPTVBBUkUsIE1JU0NPTVBBUkVfVkVSSUZZX0FTQywgMCk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlpZiAoc2NzaV9kZWJ1Z19sYnAoKSkKKwkJbWFwX3JlZ2lvbihsYmEsIG51bSk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19ydywgaWZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IHVubWFwX2Jsb2NrX2Rlc2MgewogCV9fYmU2NAlsYmE7CiAJX19iZTMyCWJsb2NrczsKIAlfX2JlMzIJX19yZXNlcnZlZDsKIH07CiAKLXN0YXRpYyBpbnQgcmVzcF91bm1hcChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NtZCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKQorc3RhdGljIGludAorcmVzcF91bm1hcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogewogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAlzdHJ1Y3QgdW5tYXBfYmxvY2tfZGVzYyAqZGVzYzsKQEAgLTIzMjksMjAgKzMxMjQsMjYgQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCi0JcmV0ID0gY2hlY2tfcmVhZGluZXNzKHNjbWQsIFVBU19PTkxZLCBkZXZpcCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKIAotCXBheWxvYWRfbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZzY21kLT5jbW5kWzddKTsKLQlCVUdfT04oc2NzaV9idWZmbGVuKHNjbWQpICE9IHBheWxvYWRfbGVuKTsKKwlpZiAoIXNjc2lfZGVidWdfbGJwKCkpCisJCXJldHVybiAwOwkvKiBmaWIgYW5kIHNheSBpdHMgZG9uZSAqLworCXBheWxvYWRfbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTE2KHNjcC0+Y21uZCArIDcpOworCUJVR19PTihzY3NpX2J1ZmZsZW4oc2NwKSAhPSBwYXlsb2FkX2xlbik7CiAKIAlkZXNjcmlwdG9ycyA9IChwYXlsb2FkX2xlbiAtIDgpIC8gMTY7Ci0KLQlidWYgPSBrbWFsbG9jKHNjc2lfYnVmZmxlbihzY21kKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFidWYpCisJaWYgKGRlc2NyaXB0b3JzID4gc2NzaV9kZWJ1Z191bm1hcF9tYXhfZGVzYykgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA3LCAtMSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KIAotCXNjc2lfc2dfY29weV90b19idWZmZXIoc2NtZCwgYnVmLCBzY3NpX2J1ZmZsZW4oc2NtZCkpOworCWJ1ZiA9IGttYWxsb2Moc2NzaV9idWZmbGVuKHNjcCksIEdGUF9BVE9NSUMpOworCWlmICghYnVmKSB7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5TVUZGX1JFU19BU0MsCisJCQkJSU5TVUZGX1JFU19BU0NRKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCisJc2NzaV9zZ19jb3B5X3RvX2J1ZmZlcihzY3AsIGJ1Ziwgc2NzaV9idWZmbGVuKHNjcCkpOwogCiAJQlVHX09OKGdldF91bmFsaWduZWRfYmUxNigmYnVmWzBdKSAhPSBwYXlsb2FkX2xlbiAtIDIpOwogCUJVR19PTihnZXRfdW5hbGlnbmVkX2JlMTYoJmJ1ZlsyXSkgIT0gZGVzY3JpcHRvcnMgKiAxNik7CkBAIC0yMzU1LDcgKzMxNTYsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxvbmcgbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZkZXNjW2ldLmxiYSk7CiAJCXVuc2lnbmVkIGludCBudW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmRlc2NbaV0uYmxvY2tzKTsKIAotCQlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhzY21kLCBsYmEsIG51bSk7CisJCXJldCA9IGNoZWNrX2RldmljZV9hY2Nlc3NfcGFyYW1zKHNjcCwgbGJhLCBudW0pOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAKQEAgLTIzNzMsMzcgKzMxNzQsNDQgQEAKIAogI2RlZmluZSBTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOIDMyCiAKLXN0YXRpYyBpbnQgcmVzcF9nZXRfbGJhX3N0YXR1cyhzdHJ1Y3Qgc2NzaV9jbW5kICogc2NtZCwKLQkJCSAgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50CityZXNwX2dldF9sYmFfc3RhdHVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGxiYTsKLQl1bnNpZ25lZCBpbnQgYWxsb2NfbGVuLCBtYXBwZWQsIG51bTsKLQl1bnNpZ25lZCBjaGFyIGFycltTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOXTsKKwl1OCAqY21kID0gc2NwLT5jbW5kOworCXU2NCBsYmE7CisJdTMyIGFsbG9jX2xlbiwgbWFwcGVkLCBudW07CisJdTggYXJyW1NERUJVR19HRVRfTEJBX1NUQVRVU19MRU5dOwogCWludCByZXQ7CiAKLQlyZXQgPSBjaGVja19yZWFkaW5lc3Moc2NtZCwgVUFTX09OTFksIGRldmlwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZzY21kLT5jbW5kWzJdKTsKLQlhbGxvY19sZW4gPSBnZXRfdW5hbGlnbmVkX2JlMzIoJnNjbWQtPmNtbmRbMTBdKTsKKwlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlNjQoY21kICsgMik7CisJYWxsb2NfbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDEwKTsKIAogCWlmIChhbGxvY19sZW4gPCAyNCkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhzY21kLCBsYmEsIDEpOworCXJldCA9IGNoZWNrX2RldmljZV9hY2Nlc3NfcGFyYW1zKHNjcCwgbGJhLCAxKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbWFwcGVkID0gbWFwX3N0YXRlKGxiYSwgJm51bSk7CisJaWYgKHNjc2lfZGVidWdfbGJwKCkpCisJCW1hcHBlZCA9IG1hcF9zdGF0ZShsYmEsICZudW0pOworCWVsc2UgeworCQltYXBwZWQgPSAxOworCQkvKiBmb2xsb3dpbmcganVzdCBpbiBjYXNlIHZpcnR1YWxfZ2IgY2hhbmdlZCAqLworCQlzZGVidWdfY2FwYWNpdHkgPSBnZXRfc2RlYnVnX2NhcGFjaXR5KCk7CisJCWlmIChzZGVidWdfY2FwYWNpdHkgLSBsYmEgPD0gMHhmZmZmZmZmZikKKwkJCW51bSA9IHNkZWJ1Z19jYXBhY2l0eSAtIGxiYTsKKwkJZWxzZQorCQkJbnVtID0gMHhmZmZmZmZmZjsKKwl9CiAKIAltZW1zZXQoYXJyLCAwLCBTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOKTsKLQlwdXRfdW5hbGlnbmVkX2JlMzIoMjAsICZhcnJbMF0pOwkvKiBQYXJhbWV0ZXIgRGF0YSBMZW5ndGggKi8KLQlwdXRfdW5hbGlnbmVkX2JlNjQobGJhLCAmYXJyWzhdKTsJLyogTEJBICovCi0JcHV0X3VuYWxpZ25lZF9iZTMyKG51bSwgJmFyclsxNl0pOwkvKiBOdW1iZXIgb2YgYmxvY2tzICovCi0JYXJyWzIwXSA9ICFtYXBwZWQ7CQkJLyogbWFwcGVkID0gMCwgdW5tYXBwZWQgPSAxICovCisJcHV0X3VuYWxpZ25lZF9iZTMyKDIwLCBhcnIpOwkJLyogUGFyYW1ldGVyIERhdGEgTGVuZ3RoICovCisJcHV0X3VuYWxpZ25lZF9iZTY0KGxiYSwgYXJyICsgOCk7CS8qIExCQSAqLworCXB1dF91bmFsaWduZWRfYmUzMihudW0sIGFyciArIDE2KTsJLyogTnVtYmVyIG9mIGJsb2NrcyAqLworCWFyclsyMF0gPSAhbWFwcGVkOwkJLyogcHJvdl9zdGF0PTA6IG1hcHBlZDsgMTogZGVhbGxvYyAqLwogCi0JcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjbWQsIGFyciwgU0RFQlVHX0dFVF9MQkFfU1RBVFVTX0xFTik7CisJcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjcCwgYXJyLCBTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOKTsKIH0KIAogI2RlZmluZSBTREVCVUdfUkxVTl9BUlJfU1ogMjU2CkBAIC0yNDEyLDggKzMyMjAsOCBAQAogCQkJICAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKIHsKIAl1bnNpZ25lZCBpbnQgYWxsb2NfbGVuOwotCWludCBsdW5fY250LCBpLCB1cHBlciwgbnVtLCBuOwotCXU2NCB3bHVuLCBsdW47CisJaW50IGx1bl9jbnQsIGksIHVwcGVyLCBudW0sIG4sIHdhbnRfd2x1biwgc2hvcnRpc2g7CisJdTY0IGx1bjsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSBzY3AtPmNtbmQ7CiAJaW50IHNlbGVjdF9yZXBvcnQgPSAoaW50KWNtZFsyXTsKIAlzdHJ1Y3Qgc2NzaV9sdW4gKm9uZV9sdW47CkBAIC0yNDIxLDkgKzMyMjksOSBAQAogCXVuc2lnbmVkIGNoYXIgKiBtYXhfYWRkcjsKIAogCWFsbG9jX2xlbiA9IGNtZFs5XSArIChjbWRbOF0gPDwgOCkgKyAoY21kWzddIDw8IDE2KSArIChjbWRbNl0gPDwgMjQpOwotCWlmICgoYWxsb2NfbGVuIDwgNCkgfHwgKHNlbGVjdF9yZXBvcnQgPiAyKSkgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAotCQkJICAgICAgIAkwKTsKKwlzaG9ydGlzaCA9IChhbGxvY19sZW4gPCA0KTsKKwlpZiAoc2hvcnRpc2ggfHwgKHNlbGVjdF9yZXBvcnQgPiAyKSkgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCBzaG9ydGlzaCA/IDYgOiAyLCAtMSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAkvKiBjYW4gcHJvZHVjZSByZXNwb25zZSB3aXRoIHVwIHRvIDE2ayBsdW5zIChsdW4gMCB0byBsdW4gMTYzODMpICovCkBAIC0yNDMzLDE0ICszMjQxLDE0IEBACiAJCWx1bl9jbnQgPSAwOwogCWVsc2UgaWYgKHNjc2lfZGVidWdfbm9fbHVuXzAgJiYgKGx1bl9jbnQgPiAwKSkKIAkJLS1sdW5fY250OwotCXdsdW4gPSAoc2VsZWN0X3JlcG9ydCA+IDApID8gMSA6IDA7Ci0JbnVtID0gbHVuX2NudCArIHdsdW47CisJd2FudF93bHVuID0gKHNlbGVjdF9yZXBvcnQgPiAwKSA/IDEgOiAwOworCW51bSA9IGx1bl9jbnQgKyB3YW50X3dsdW47CiAJYXJyWzJdID0gKChzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSAqIG51bSkgPj4gOCkgJiAweGZmOwogCWFyclszXSA9IChzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSAqIG51bSkgJiAweGZmOwogCW4gPSBtaW4oKGludCkoKFNERUJVR19STFVOX0FSUl9TWiAtIDgpIC8KIAkJCSAgICBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSksIG51bSk7CiAJaWYgKG4gPCBudW0pIHsKLQkJd2x1biA9IDA7CisJCXdhbnRfd2x1biA9IDA7CiAJCWx1bl9jbnQgPSBuOwogCX0KIAlvbmVfbHVuID0gKHN0cnVjdCBzY3NpX2x1biAqKSAmYXJyWzhdOwpAQCAtMjQ1NCw3ICszMjYyLDcgQEAKIAkJCSAgICAodXBwZXIgfCAoU0FNMl9MVU5fQUREUkVTU19NRVRIT0QgPDwgNikpOwogCQlvbmVfbHVuW2ldLnNjc2lfbHVuWzFdID0gbHVuICYgMHhmZjsKIAl9Ci0JaWYgKHdsdW4pIHsKKwlpZiAod2FudF93bHVuKSB7CiAJCW9uZV9sdW5baV0uc2NzaV9sdW5bMF0gPSAoU0FNMl9XTFVOX1JFUE9SVF9MVU5TID4+IDgpICYgMHhmZjsKIAkJb25lX2x1bltpXS5zY3NpX2x1blsxXSA9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUyAmIDB4ZmY7CiAJCWkrKzsKQEAgLTI0NzYsOCArMzI4NCw4IEBACiAJLyogYmV0dGVyIG5vdCB0byB1c2UgdGVtcG9yYXJ5IGJ1ZmZlci4gKi8KIAlidWYgPSBrbWFsbG9jKHNjc2lfYnVmZmxlbihzY3ApLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZikgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBOT1RfUkVBRFksCi0JCQkJTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRSwgMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5TVUZGX1JFU19BU0MsCisJCQkJSU5TVUZGX1JFU19BU0NRKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCkBAIC0yNTAwLDYgKzMzMDgsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorcmVzcF94ZHdyaXRlcmVhZF8xMChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQoreworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisJdTY0IGxiYTsKKwl1MzIgbnVtOworCWludCBlcnJzdHM7CisKKwlpZiAoIXNjc2lfYmlkaV9jbW5kKHNjcCkpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlNVRkZfUkVTX0FTQywKKwkJCQlJTlNVRkZfUkVTX0FTQ1EpOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJZXJyc3RzID0gcmVzcF9yZWFkX2R0MChzY3AsIGRldmlwKTsKKwlpZiAoZXJyc3RzKQorCQlyZXR1cm4gZXJyc3RzOworCWlmICghKGNtZFsxXSAmIDB4NCkpIHsJCS8qIERJU0FCTEVfV1JJVEUgaXMgbm90IHNldCAqLworCQllcnJzdHMgPSByZXNwX3dyaXRlX2R0MChzY3AsIGRldmlwKTsKKwkJaWYgKGVycnN0cykKKwkJCXJldHVybiBlcnJzdHM7CisJfQorCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyKTsKKwludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJcmV0dXJuIHJlc3BfeGR3cml0ZXJlYWQoc2NwLCBsYmEsIG51bSwgZGV2aXApOworfQorCiAvKiBXaGVuIHRpbWVyIG9yIHRhc2tsZXQgZ29lcyBvZmYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovCiBzdGF0aWMgdm9pZCBzZGVidWdfcV9jbWRfY29tcGxldGUodW5zaWduZWQgbG9uZyBpbmR4KQogewpAQCAtMjY3MiwxMCArMzUwNiw3IEBACiAJb3Blbl9kZXZpcC0+c2RiZ19ob3N0ID0gc2RiZ19ob3N0OwogCWF0b21pY19zZXQoJm9wZW5fZGV2aXAtPm51bV9pbl9xLCAwKTsKIAlzZXRfYml0KFNERUJVR19VQV9QT1IsIG9wZW5fZGV2aXAtPnVhc19ibSk7Ci0Jb3Blbl9kZXZpcC0+dXNlZCA9IDE7Ci0JaWYgKHNkZXYtPmx1biA9PSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMpCi0JCW9wZW5fZGV2aXAtPndsdW4gPSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMgJiAweGZmOwotCisJb3Blbl9kZXZpcC0+dXNlZCA9IHRydWU7CiAJcmV0dXJuIG9wZW5fZGV2aXA7CiB9CiAKQEAgLTI3MDEsMTAgKzM1MzIsNiBAQAogCWlmIChOVUxMID09IGRldmlwKQogCQlyZXR1cm4gMTsJLyogbm8gcmVzb3VyY2VzLCB3aWxsIGJlIG1hcmtlZCBvZmZsaW5lICovCiAJc2RwLT5ob3N0ZGF0YSA9IGRldmlwOwotCXNkcC0+dGFnZ2VkX3N1cHBvcnRlZCA9IDE7Ci0JaWYgKHNkcC0+aG9zdC0+Y21kX3Blcl9sdW4pCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkcCwgREVGX1RBR0dFRF9RVUVVSU5HLAotCQkJCQlERUZfQ01EX1BFUl9MVU4pOwogCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHNkcC0+cmVxdWVzdF9xdWV1ZSwgLTFVKTsKIAlpZiAoc2NzaV9kZWJ1Z19ub191bGQpCiAJCXNkcC0+bm9fdWxkX2F0dGFjaCA9IDE7CkBAIC0yNzIxLDcgKzM1NDgsNyBAQAogCQkgICAgICAgc2RwLT5ob3N0LT5ob3N0X25vLCBzZHAtPmNoYW5uZWwsIHNkcC0+aWQsIHNkcC0+bHVuKTsKIAlpZiAoZGV2aXApIHsKIAkJLyogbWFrZSB0aGlzIHNsb3QgYXZhaWxhYmxlIGZvciByZS11c2UgKi8KLQkJZGV2aXAtPnVzZWQgPSAwOworCQlkZXZpcC0+dXNlZCA9IGZhbHNlOwogCQlzZHAtPmhvc3RkYXRhID0gTlVMTDsKIAl9CiB9CkBAIC0zMTY2LDYgKzM5OTMsNyBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHJlbW92YWJsZSwgc2NzaV9kZWJ1Z19yZW1vdmFibGUsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChzY3NpX2xldmVsLCBzY3NpX2RlYnVnX3Njc2lfbGV2ZWwsIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQoc2VjdG9yX3NpemUsIHNjc2lfZGVidWdfc2VjdG9yX3NpemUsIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fbmFtZWQoc3RyaWN0LCBzY3NpX2RlYnVnX3N0cmljdCwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwogbW9kdWxlX3BhcmFtX25hbWVkKHVubWFwX2FsaWdubWVudCwgc2NzaV9kZWJ1Z191bm1hcF9hbGlnbm1lbnQsIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQodW5tYXBfZ3JhbnVsYXJpdHksIHNjc2lfZGVidWdfdW5tYXBfZ3JhbnVsYXJpdHksIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQodW5tYXBfbWF4X2Jsb2Nrcywgc2NzaV9kZWJ1Z191bm1hcF9tYXhfYmxvY2tzLCBpbnQsIFNfSVJVR08pOwpAQCAtMzE4NSw3ICs0MDEzLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYXRvLCAiYXBwbGljYXRpb24gdGFnIG93bmVyc2hpcDogMD1kaXNrIDE9aG9zdCAoZGVmPTEpIik7CiBNT0RVTEVfUEFSTV9ERVNDKGNsdXN0ZXJpbmcsICJ3aGVuIHNldCBlbmFibGVzIGxhcmdlciB0cmFuc2ZlcnMgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkZWxheSwgInJlc3BvbnNlIGRlbGF5IChkZWY9MSBqaWZmeSk7IDA6aW1tLCAtMSwtMjp0aW55Iik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRldl9zaXplX21iLCAic2l6ZSBpbiBNQiBvZiByYW0gc2hhcmVkIGJ5IGRldnMoZGVmPTgpIik7CitNT0RVTEVfUEFSTV9ERVNDKGRldl9zaXplX21iLCAic2l6ZSBpbiBNaUIgb2YgcmFtIHNoYXJlZCBieSBkZXZzKGRlZj04KSIpOwogTU9EVUxFX1BBUk1fREVTQyhkaWYsICJkYXRhIGludGVncml0eSBmaWVsZCB0eXBlOiAwLTMgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkaXgsICJkYXRhIGludGVncml0eSBleHRlbnNpb25zIG1hc2sgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkc2Vuc2UsICJ1c2UgZGVzY3JpcHRvciBzZW5zZSBmb3JtYXQoZGVmPTAgLT4gZml4ZWQpIik7CkBAIC0zMjEyLDExICs0MDQwLDEyIEBACiBNT0RVTEVfUEFSTV9ERVNDKHJlbW92YWJsZSwgImNsYWltIHRvIGhhdmUgcmVtb3ZhYmxlIG1lZGlhIChkZWY9MCkiKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2NzaV9sZXZlbCwgIlNDU0kgbGV2ZWwgdG8gc2ltdWxhdGUoZGVmPTZbU1BDLTRdKSIpOwogTU9EVUxFX1BBUk1fREVTQyhzZWN0b3Jfc2l6ZSwgImxvZ2ljYWwgYmxvY2sgc2l6ZSBpbiBieXRlcyAoZGVmPTUxMikiKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RyaWN0LCAic3RyaWN0ZXIgY2hlY2tzOiByZXNlcnZlZCBmaWVsZCBpbiBjZGIgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyh1bm1hcF9hbGlnbm1lbnQsICJsb3dlc3QgYWxpZ25lZCB0aGluIHByb3Zpc2lvbmluZyBsYmEgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyh1bm1hcF9ncmFudWxhcml0eSwgInRoaW4gcHJvdmlzaW9uaW5nIGdyYW51bGFyaXR5IGluIGJsb2NrcyAoZGVmPTEpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHVubWFwX21heF9ibG9ja3MsICJtYXggIyBvZiBibG9ja3MgY2FuIGJlIHVubWFwcGVkIGluIG9uZSBjbWQgKGRlZj0weGZmZmZmZmZmKSIpOwogTU9EVUxFX1BBUk1fREVTQyh1bm1hcF9tYXhfZGVzYywgIm1heCAjIG9mIHJhbmdlcyB0aGF0IGNhbiBiZSB1bm1hcHBlZCBpbiBvbmUgY21kIChkZWY9MjU2KSIpOwotTU9EVUxFX1BBUk1fREVTQyh2aXJ0dWFsX2diLCAidmlydHVhbCBnaWdhYnl0ZSBzaXplIChkZWY9MCAtPiB1c2UgZGV2X3NpemVfbWIpIik7CitNT0RVTEVfUEFSTV9ERVNDKHZpcnR1YWxfZ2IsICJ2aXJ0dWFsIGdpZ2FieXRlIChHaUIpIHNpemUgKGRlZj0wIC0+IHVzZSBkZXZfc2l6ZV9tYikiKTsKIE1PRFVMRV9QQVJNX0RFU0ModnBkX3VzZV9ob3N0bm8sICIwIC0+IGRldiBpZHMgaWdub3JlIGhvc3RubyAoZGVmPTEgLT4gdW5pcXVlIGRldiBpZHMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHdyaXRlX3NhbWVfbGVuZ3RoLCAiTWF4aW11bSBibG9ja3MgcGVyIFdSSVRFIFNBTUUgY21kIChkZWY9MHhmZmZmKSIpOwogCkBAIC0zMzgyLDYgKzQyMTEsMTYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIG9wdHNfZG9uZToKIAlzY3NpX2RlYnVnX29wdHMgPSBvcHRzOworCWlmIChTQ1NJX0RFQlVHX09QVF9SRUNPVkVSRURfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9UUkFOU1BPUlRfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9ESUZfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9ESVhfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9TSE9SVF9UUkFOU0ZFUiAmIG9wdHMpCisJCXNkZWJ1Z19hbnlfaW5qZWN0aW5nX29wdCA9IHRydWU7CiAJYXRvbWljX3NldCgmc2RlYnVnX2NtbmRfY291bnQsIDApOwogCWF0b21pY19zZXQoJnNkZWJ1Z19hX3RzZiwgMCk7CiAJcmV0dXJuIGNvdW50OwpAQCAtMzU4OSwxMiArNDQyOCwyNSBAQAogCQkJCXNpemVfdCBjb3VudCkKIHsKICAgICAgICAgaW50IG47CisJYm9vbCBjaGFuZ2VkOwogCiAJaWYgKChjb3VudCA+IDApICYmICgxID09IHNzY2FuZihidWYsICIlZCIsICZuKSkgJiYgKG4gPj0gMCkpIHsKKwkJY2hhbmdlZCA9IChzY3NpX2RlYnVnX3ZpcnR1YWxfZ2IgIT0gbik7CiAJCXNjc2lfZGVidWdfdmlydHVhbF9nYiA9IG47Ci0KIAkJc2RlYnVnX2NhcGFjaXR5ID0gZ2V0X3NkZWJ1Z19jYXBhY2l0eSgpOworCQlpZiAoY2hhbmdlZCkgeworCQkJc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKnNkaHA7CisJCQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkcDsKIAorCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGhwLCAmc2RlYnVnX2hvc3RfbGlzdCwKKwkJCQkJICAgIGhvc3RfbGlzdCkgeworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHAsICZzZGhwLT5kZXZfaW5mb19saXN0LAorCQkJCQkJICAgIGRldl9saXN0KSB7CisJCQkJCXNldF9iaXQoU0RFQlVHX1VBX0NBUEFDSVRZX0NIQU5HRUQsCisJCQkJCQlkcC0+dWFzX2JtKTsKKwkJCQl9CisJCQl9CisJCX0KIAkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTM3NDAsNiArNDU5MiwyMyBAQAogfQogc3RhdGljIERSSVZFUl9BVFRSX1JXKGhvc3RfbG9jayk7CiAKK3N0YXRpYyBzc2l6ZV90IHN0cmljdF9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsICEhc2NzaV9kZWJ1Z19zdHJpY3QpOworfQorc3RhdGljIHNzaXplX3Qgc3RyaWN0X3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQpCit7CisJaW50IG47CisKKwlpZiAoKGNvdW50ID4gMCkgJiYgKDEgPT0gc3NjYW5mKGJ1ZiwgIiVkIiwgJm4pKSAmJiAobiA+PSAwKSkgeworCQlzY3NpX2RlYnVnX3N0cmljdCA9IChuID4gMCk7CisJCXJldHVybiBjb3VudDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgRFJJVkVSX0FUVFJfUlcoc3RyaWN0KTsKKwogCiAvKiBOb3RlOiBUaGUgZm9sbG93aW5nIGFycmF5IGNyZWF0ZXMgYXR0cmlidXRlIGZpbGVzIGluIHRoZQogICAgL3N5cy9idXMvcHNldWRvL2RyaXZlcnMvc2NzaV9kZWJ1ZyBkaXJlY3RvcnkuIFRoZSBhZHZhbnRhZ2Ugb2YgdGhlc2UKQEAgLTM3NzUsNiArNDY0NCw3IEBACiAJJmRyaXZlcl9hdHRyX3JlbW92YWJsZS5hdHRyLAogCSZkcml2ZXJfYXR0cl9ob3N0X2xvY2suYXR0ciwKIAkmZHJpdmVyX2F0dHJfbmRlbGF5LmF0dHIsCisJJmRyaXZlcl9hdHRyX3N0cmljdC5hdHRyLAogCU5VTEwsCiB9OwogQVRUUklCVVRFX0dST1VQUyhzZGVidWdfZHJ2KTsKQEAgLTQwODcsMzk2ICs0OTU3LDkgQEAKIH0KIAogc3RhdGljIGludAotc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCi17Ci0JdW5zaWduZWQgY2hhciAqY21kID0gU0NwbnQtPmNtbmQ7Ci0JaW50IGxlbiwgazsKLQl1bnNpZ25lZCBpbnQgbnVtOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBsYmE7Ci0JdTMyIGVpX2xiYTsKLQlpbnQgZXJyc3RzID0gMDsKLQlpbnQgdGFyZ2V0ID0gU0NwbnQtPmRldmljZS0+aWQ7Ci0Jc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXAgPSBOVUxMOwotCWludCBpbmpfcmVjb3ZlcmVkID0gMDsKLQlpbnQgaW5qX3RyYW5zcG9ydCA9IDA7Ci0JaW50IGlual9kaWYgPSAwOwotCWludCBpbmpfZGl4ID0gMDsKLQlpbnQgaW5qX3Nob3J0ID0gMDsKLQlpbnQgZGVsYXlfb3ZlcnJpZGUgPSAwOwotCWludCB1bm1hcCA9IDA7Ci0KLQlzY3NpX3NldF9yZXNpZChTQ3BudCwgMCk7Ci0JaWYgKChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykgJiYKLQkgICAgIShTQ1NJX0RFQlVHX09QVF9OT19DREJfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpKSB7Ci0JCWNoYXIgYlsxMjBdOwotCQlpbnQgbjsKLQotCQlsZW4gPSBTQ3BudC0+Y21kX2xlbjsKLQkJaWYgKGxlbiA+IDMyKQotCQkJc3RyY3B5KGIsICJ0b28gbG9uZywgb3ZlciAzMiBieXRlcyIpOwotCQllbHNlIHsKLQkJCWZvciAoayA9IDAsIG4gPSAwOyBrIDwgbGVuOyArK2spCi0JCQkJbiArPSBzY25wcmludGYoYiArIG4sIHNpemVvZihiKSAtIG4sICIlMDJ4ICIsCi0JCQkJCSAgICAgICAodW5zaWduZWQgaW50KWNtZFtrXSk7Ci0JCX0KLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBTQ3BudC0+ZGV2aWNlLCAiJXM6IGNtZCAlc1xuIiwgbXlfbmFtZSwKLQkJCSAgICBiKTsKLQl9Ci0KLQlpZiAoKFNDcG50LT5kZXZpY2UtPmx1biA+PSBzY3NpX2RlYnVnX21heF9sdW5zKSAmJgotCSAgICAoU0NwbnQtPmRldmljZS0+bHVuICE9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUykpCi0JCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBOVUxMLCBESURfTk9fQ09OTkVDVCA8PCAxNiwgMCk7Ci0JZGV2aXAgPSBkZXZJbmZvUmVnKFNDcG50LT5kZXZpY2UpOwotCWlmIChOVUxMID09IGRldmlwKQotCQlyZXR1cm4gc2NoZWR1bGVfcmVzcChTQ3BudCwgTlVMTCwgRElEX05PX0NPTk5FQ1QgPDwgMTYsIDApOwotCi0JaWYgKChzY3NpX2RlYnVnX2V2ZXJ5X250aCAhPSAwKSAmJgotCSAgICAoYXRvbWljX2luY19yZXR1cm4oJnNkZWJ1Z19jbW5kX2NvdW50KSA+PQotCSAgICAgYWJzKHNjc2lfZGVidWdfZXZlcnlfbnRoKSkpIHsKLQkJYXRvbWljX3NldCgmc2RlYnVnX2NtbmRfY291bnQsIDApOwotCQlpZiAoc2NzaV9kZWJ1Z19ldmVyeV9udGggPCAtMSkKLQkJCXNjc2lfZGVidWdfZXZlcnlfbnRoID0gLTE7Ci0JCWlmIChTQ1NJX0RFQlVHX09QVF9USU1FT1VUICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJcmV0dXJuIDA7IC8qIGlnbm9yZSBjb21tYW5kIGNhdXNpbmcgdGltZW91dCAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9NQUNfVElNRU9VVCAmIHNjc2lfZGVidWdfb3B0cyAmJgotCQkJIHNjc2lfbWVkaXVtX2FjY2Vzc19jb21tYW5kKFNDcG50KSkKLQkJCXJldHVybiAwOyAvKiB0aW1lIG91dCByZWFkcyBhbmQgd3JpdGVzICovCi0JCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1JFQ09WRVJFRF9FUlIgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlpbmpfcmVjb3ZlcmVkID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9UUkFOU1BPUlRfRVJSICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJaW5qX3RyYW5zcG9ydCA9IDE7IC8qIHRvIHJlYWRzIGFuZCB3cml0ZXMgYmVsb3cgKi8KLQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElGX0VSUiAmIHNjc2lfZGVidWdfb3B0cykKLQkJCWlual9kaWYgPSAxOyAvKiB0byByZWFkcyBhbmQgd3JpdGVzIGJlbG93ICovCi0JCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJWF9FUlIgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlpbmpfZGl4ID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9TSE9SVF9UUkFOU0ZFUiAmIHNjc2lfZGVidWdfb3B0cykKLQkJCWlual9zaG9ydCA9IDE7Ci0JfQotCi0JaWYgKGRldmlwLT53bHVuKSB7Ci0JCXN3aXRjaCAoKmNtZCkgewotCQljYXNlIElOUVVJUlk6Ci0JCWNhc2UgUkVRVUVTVF9TRU5TRToKLQkJY2FzZSBURVNUX1VOSVRfUkVBRFk6Ci0JCWNhc2UgUkVQT1JUX0xVTlM6Ci0JCQlicmVhazsgIC8qIG9ubHkgYWxsb3dhYmxlIHdsdW4gY29tbWFuZHMgKi8KLQkJZGVmYXVsdDoKLQkJCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKLQkJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBPcGNvZGU6IDB4JXggIgotCQkJCSAgICAgICAibm90IHN1cHBvcnRlZCBmb3Igd2x1blxuIiwgKmNtZCk7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBkZXZpcCwgZXJyc3RzLCAwKTsKLQkJfQotCX0KLQotCXN3aXRjaCAoKmNtZCkgewotCWNhc2UgSU5RVUlSWTogICAgIC8qIG1hbmRhdG9yeSwgaWdub3JlIHVuaXQgYXR0ZW50aW9uICovCi0JCWRlbGF5X292ZXJyaWRlID0gMTsKLQkJZXJyc3RzID0gcmVzcF9pbnF1aXJ5KFNDcG50LCB0YXJnZXQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVFVRVNUX1NFTlNFOgkvKiBtYW5kYXRvcnksIGlnbm9yZSB1bml0IGF0dGVudGlvbiAqLwotCQlkZWxheV9vdmVycmlkZSA9IDE7Ci0JCWVycnN0cyA9IHJlc3BfcmVxdWVzdHMoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVpFUk9fVU5JVDoJLyogYWN0dWFsbHkgdGhpcyBpcyBSRVdJTkQgZm9yIFNTQyAqLwotCWNhc2UgU1RBUlRfU1RPUDoKLQkJZXJyc3RzID0gcmVzcF9zdGFydF9zdG9wKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgQUxMT1dfTUVESVVNX1JFTU9WQUw6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX09OTFksIGRldmlwKTsKLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBNZWRpdW0gcmVtb3ZhbCAlc1xuIiwKLQkJCSAgICAgICBjbWRbNF0gPyAiaW5oaWJpdGVkIiA6ICJlbmFibGVkIik7Ci0JCWJyZWFrOwotCWNhc2UgU0VORF9ESUFHTk9TVElDOiAgICAgLyogbWFuZGF0b3J5ICovCi0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX09OTFksIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBURVNUX1VOSVRfUkVBRFk6ICAgICAvKiBtYW5kYXRvcnkgKi8KLQkJLyogZGVsYXlfb3ZlcnJpZGUgPSAxOyAqLwotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19UVVIsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVNFUlZFOgotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19PTkxZLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgUkVTRVJWRV8xMDoKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCBVQVNfT05MWSwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFJFTEVBU0U6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX09OTFksIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRUxFQVNFXzEwOgotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19PTkxZLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgUkVBRF9DQVBBQ0lUWToKLQkJZXJyc3RzID0gcmVzcF9yZWFkY2FwKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46Ci0JCWlmIChjbWRbMV0gPT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpCi0JCQllcnJzdHMgPSByZXNwX3JlYWRjYXAxNihTQ3BudCwgZGV2aXApOwotCQllbHNlIGlmIChjbWRbMV0gPT0gU0FJX0dFVF9MQkFfU1RBVFVTKSB7Ci0KLQkJCWlmIChzY3NpX2RlYnVnX2xicCgpID09IDApIHsKLQkJCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJCUlOVkFMSURfQ09NTUFORF9PUENPREUsIDApOwotCQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQl9IGVsc2UKLQkJCQllcnJzdHMgPSByZXNwX2dldF9sYmFfc3RhdHVzKFNDcG50LCBkZXZpcCk7Ci0JCX0gZWxzZSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJfQotCQlicmVhazsKLQljYXNlIE1BSU5URU5BTkNFX0lOOgotCQlpZiAoTUlfUkVQT1JUX1RBUkdFVF9QR1MgIT0gY21kWzFdKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJCWJyZWFrOwotCQl9Ci0JCWVycnN0cyA9IHJlc3BfcmVwb3J0X3RndHBncyhTQ3BudCwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFJFQURfMTY6Ci0JY2FzZSBSRUFEXzEyOgotCWNhc2UgUkVBRF8xMDoKLQkJLyogUkVBRHsxMCwxMiwxNn0gYW5kIERJRiBUeXBlIDIgYXJlIG5hdHVyYWwgZW5lbWllcyAqLwotCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYKLQkJICAgIGNtZFsxXSAmIDB4ZTApIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0NPTU1BTkRfT1BDT0RFLCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICgoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gfHwKLQkJICAgICBzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTikgJiYKLQkJICAgIChjbWRbMV0gJiAweGUwKSA9PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJVbnByb3RlY3RlZCBSRC9XUiB0byBESUYgZGV2aWNlXG4iKTsKLQotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFJFQURfNjoKLXJlYWQ6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOwotCi0JCWlmIChpbmpfc2hvcnQpCi0JCQludW0gLz0gMjsKLQotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwotCQlpZiAoaW5qX3JlY292ZXJlZCAmJiAoMCA9PSBlcnJzdHMpKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIFJFQ09WRVJFRF9FUlJPUiwKLQkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCX0gZWxzZSBpZiAoaW5qX3RyYW5zcG9ydCAmJiAoMCA9PSBlcnJzdHMpKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIEFCT1JURURfQ09NTUFORCwKLQkJCQkJVFJBTlNQT1JUX1BST0JMRU0sIEFDS19OQUtfVE8pOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJfSBlbHNlIGlmIChpbmpfZGlmICYmICgwID09IGVycnN0cykpIHsKLQkJCS8qIExvZ2ljYWwgYmxvY2sgZ3VhcmQgY2hlY2sgZmFpbGVkICovCi0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgMSk7Ci0JCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCX0gZWxzZSBpZiAoaW5qX2RpeCAmJiAoMCA9PSBlcnJzdHMpKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgMSk7Ci0JCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBSRVBPUlRfTFVOUzoJLyogbWFuZGF0b3J5LCBpZ25vcmUgdW5pdCBhdHRlbnRpb24gKi8KLQkJZGVsYXlfb3ZlcnJpZGUgPSAxOwotCQllcnJzdHMgPSByZXNwX3JlcG9ydF9sdW5zKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgVkVSSUZZOgkJLyogMTAgYnl0ZSBTQkMtMiBjb21tYW5kICovCi0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFdSSVRFXzE2OgotCWNhc2UgV1JJVEVfMTI6Ci0JY2FzZSBXUklURV8xMDoKLQkJLyogV1JJVEV7MTAsMTIsMTZ9IGFuZCBESUYgVHlwZSAyIGFyZSBuYXR1cmFsIGVuZW1pZXMgKi8KLQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCi0JCSAgICBjbWRbMV0gJiAweGUwKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OIHx8Ci0JCSAgICAgc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pICYmCi0JCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7Ci0KLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBXUklURV82Ogotd3JpdGU6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOwotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKLQkJaWYgKGlual9yZWNvdmVyZWQgJiYgKDAgPT0gZXJyc3RzKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBSRUNPVkVSRURfRVJST1IsCi0JCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQl9IGVsc2UgaWYgKGlual9kaWYgJiYgKDAgPT0gZXJyc3RzKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBBQk9SVEVEX0NPTU1BTkQsIDB4MTAsIDEpOwotCQkJZXJyc3RzID0gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OwotCQl9IGVsc2UgaWYgKGlual9kaXggJiYgKDAgPT0gZXJyc3RzKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsIDEpOwotCQkJZXJyc3RzID0gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEVfU0FNRV8xNjoKLQljYXNlIFdSSVRFX1NBTUU6Ci0JCWlmIChjbWRbMV0gJiAweDgpIHsKLQkJCWlmICgoKmNtZCA9PSBXUklURV9TQU1FXzE2ICYmIHNjc2lfZGVidWdfbGJwd3MgPT0gMCkgfHwKLQkJCSAgICAoKmNtZCA9PSBXUklURV9TQU1FICYmIHNjc2lfZGVidWdfbGJwd3MxMCA9PSAwKSkgewotCQkJCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOwotCQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQl9IGVsc2UKLQkJCQl1bm1hcCA9IDE7Ci0JCX0KLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19UVVIsIGRldmlwKTsKLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQlpZiAoc2NzaV9kZWJ1Z19mYWtlX3J3KQotCQkJYnJlYWs7Ci0JCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtLCAmZWlfbGJhKTsKLQkJZXJyc3RzID0gcmVzcF93cml0ZV9zYW1lKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhLCB1bm1hcCk7Ci0JCWJyZWFrOwotCWNhc2UgVU5NQVA6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQotCQlpZiAoc2NzaV9kZWJ1Z191bm1hcF9tYXhfZGVzYyA9PSAwIHx8IHNjc2lfZGVidWdfbGJwdSA9PSAwKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQl9IGVsc2UKLQkJCWVycnN0cyA9IHJlc3BfdW5tYXAoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RFX1NFTlNFOgotCWNhc2UgTU9ERV9TRU5TRV8xMDoKLQkJZXJyc3RzID0gcmVzcF9tb2RlX3NlbnNlKFNDcG50LCB0YXJnZXQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RFX1NFTEVDVDoKLQkJZXJyc3RzID0gcmVzcF9tb2RlX3NlbGVjdChTQ3BudCwgMSwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIE1PREVfU0VMRUNUXzEwOgotCQllcnJzdHMgPSByZXNwX21vZGVfc2VsZWN0KFNDcG50LCAwLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgTE9HX1NFTlNFOgotCQllcnJzdHMgPSByZXNwX2xvZ19zZW5zZShTQ3BudCwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgotCQlkZWxheV9vdmVycmlkZSA9IDE7Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFdSSVRFX0JVRkZFUjoKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCBVQVNfT05MWSwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFhEV1JJVEVSRUFEXzEwOgotCQlpZiAoIXNjc2lfYmlkaV9jbW5kKFNDcG50KSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOwotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWVycnN0cyA9IHJlc3BfeGR3cml0ZXJlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKLQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OKSB7Ci0KLQkJCWlmICgoY21kWzEwXSAmIDB4ZTApID09IDApCi0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJVbnByb3RlY3RlZCBSRC9XUiB0byBESUYgZGV2aWNlXG4iKTsKLQotCQkJaWYgKGNtZFs5XSA9PSBSRUFEXzMyKSB7Ci0JCQkJQlVHX09OKFNDcG50LT5jbWRfbGVuIDwgMzIpOwotCQkJCWdvdG8gcmVhZDsKLQkJCX0KLQotCQkJaWYgKGNtZFs5XSA9PSBXUklURV8zMikgewotCQkJCUJVR19PTihTQ3BudC0+Y21kX2xlbiA8IDMyKTsKLQkJCQlnb3RvIHdyaXRlOwotCQkJfQotCQl9Ci0KLQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOwotCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQlicmVhazsKLQljYXNlIDB4ODU6Ci0JCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQtPmRldmljZSwKLQkJCSIlczogQVRBIFBBU1MtVEhST1VHSCgxNikgbm90IHN1cHBvcnRlZFxuIiwgbXlfbmFtZSk7Ci0JCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCUlOVkFMSURfT1BDT0RFLCAwKTsKLQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBTQ3BudC0+ZGV2aWNlLAotCQkJCSAgICAiJXM6IE9wY29kZTogMHgleCBub3Qgc3VwcG9ydGVkXG4iLAotCQkJCSAgICBteV9uYW1lLCAqY21kKTsKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCBVQVNfT05MWSwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7CS8qIFVuaXQgYXR0ZW50aW9uIHRha2VzIHByZWNlZGVuY2UgKi8KLQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfT1BDT0RFLCAwKTsKLQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBkZXZpcCwgZXJyc3RzLAotCQkJICAgICAoZGVsYXlfb3ZlcnJpZGUgPyAwIDogc2NzaV9kZWJ1Z19kZWxheSkpOwotfQotCi1zdGF0aWMgaW50Ci1zZGVidWdfcXVldWVjb21tYW5kX2xvY2tfb3Jfbm90KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0JaWYgKHNjc2lfZGVidWdfaG9zdF9sb2NrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwotCQlpbnQgcmM7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgaWZsYWdzKTsKLQkJcmMgPSBzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChjbWQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7Ci0JCXJldHVybiByYzsKLQl9IGVsc2UKLQkJcmV0dXJuIHNjc2lfZGVidWdfcXVldWVjb21tYW5kKGNtZCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNkZWJ1Z19jaGFuZ2VfcWRlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKK3NkZWJ1Z19jaGFuZ2VfcWRlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCkKIHsKIAlpbnQgbnVtX2luX3EgPSAwOwotCWludCBiYWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwOwogCkBAIC00NDg4LDQzICs0OTcxLDE4IEBACiAJfQogCW51bV9pbl9xID0gYXRvbWljX3JlYWQoJmRldmlwLT5udW1faW5fcSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWVkX2Fycl9sb2NrLCBpZmxhZ3MpOwotCWlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfREVGQVVMVCB8fCByZWFzb24gPT0gU0NTSV9RREVQVEhfUkFNUF9VUCkgewotCQlpZiAocWRlcHRoIDwgMSkKLQkJCXFkZXB0aCA9IDE7Ci0JCS8qIGFsbG93IHRvIGV4Y2VlZCBtYXggaG9zdCBxdWV1ZWRfYXJyIGVsZW1lbnRzIGZvciB0ZXN0aW5nICovCi0JCWlmIChxZGVwdGggPiBTQ1NJX0RFQlVHX0NBTlFVRVVFICsgMTApCi0JCQlxZGVwdGggPSBTQ1NJX0RFQlVHX0NBTlFVRVVFICsgMTA7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwotCX0gZWxzZSBpZiAocmVhc29uID09IFNDU0lfUURFUFRIX1FGVUxMKQotCQlzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKTsKLQllbHNlCi0JCWJhZCA9IDE7Ci0JaWYgKGJhZCkKLQkJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGV2LAotCQkJICAgICIlczogdW5rbm93biByZWFzb249MHgleFxuIiwgX19mdW5jX18sIHJlYXNvbik7Ci0JaWYgKFNDU0lfREVCVUdfT1BUX1FfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpIHsKLQkJaWYgKFNDU0lfUURFUFRIX1FGVUxMID09IHJlYXNvbikKLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCSAgICAiJXM6IC0+ICVkLCBudW1faW5fcT0lZCwgcmVhc29uOiBxdWV1ZSBmdWxsXG4iLAotCQkJCSAgICBfX2Z1bmNfXywgcWRlcHRoLCBudW1faW5fcSk7Ci0JCWVsc2UgewotCQkJY29uc3QgY2hhciAqY3A7CiAKLQkJCXN3aXRjaCAocmVhc29uKSB7Ci0JCQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCQkJY3AgPSAiZGVmYXVsdCAoc3lzZnMgPykiOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQkJCWNwID0gInJhbXAgdXAiOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQljcCA9ICJ1bmtub3duIjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCQkgICAgIiVzOiBxZGVwdGg9JWQsIG51bV9pbl9xPSVkLCByZWFzb246ICVzXG4iLAotCQkJCSAgICBfX2Z1bmNfXywgcWRlcHRoLCBudW1faW5fcSwgY3ApOwotCQl9CisJaWYgKHFkZXB0aCA8IDEpCisJCXFkZXB0aCA9IDE7CisJLyogYWxsb3cgdG8gZXhjZWVkIG1heCBob3N0IHF1ZXVlZF9hcnIgZWxlbWVudHMgZm9yIHRlc3RpbmcgKi8KKwlpZiAocWRlcHRoID4gU0NTSV9ERUJVR19DQU5RVUVVRSArIDEwKQorCQlxZGVwdGggPSBTQ1NJX0RFQlVHX0NBTlFVRVVFICsgMTA7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKKworCWlmIChTQ1NJX0RFQlVHX09QVF9RX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKSB7CisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCSAgICAiJXM6IHFkZXB0aD0lZCwgbnVtX2luX3E9JWRcbiIsCisJCQkgICAgX19mdW5jX18sIHFkZXB0aCwgbnVtX2luX3EpOwogCX0KIAlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CiB9CkBAIC00NTMyLDE0ICs0OTkwLDcgQEAKIHN0YXRpYyBpbnQKIHNkZWJ1Z19jaGFuZ2VfcXR5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXR5cGUpCiB7Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgcXR5cGUpOwotCQlpZiAocXR5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQlxdHlwZSA9IDA7CisJcXR5cGUgPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKHNkZXYsIHF0eXBlKTsKIAlpZiAoU0NTSV9ERUJVR19PUFRfUV9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykgewogCQljb25zdCBjaGFyICpjcDsKIApAQCAtNDU2Miw2ICs1MDEzLDE5MyBAQAogCXJldHVybiBxdHlwZTsKIH0KIAorc3RhdGljIGludAorY2hlY2tfaW5qZWN0KHN0cnVjdCBzY3NpX2NtbmQgKnNjcCkKK3sKKwlzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCAqZXAgPSBzY3NpX2NtZF9wcml2KHNjcCk7CisKKwltZW1zZXQoZXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCkpOworCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzZGVidWdfY21uZF9jb3VudCkgPj0KKwkgICAgYWJzKHNjc2lfZGVidWdfZXZlcnlfbnRoKSkgeworCQlhdG9taWNfc2V0KCZzZGVidWdfY21uZF9jb3VudCwgMCk7CisJCWlmIChzY3NpX2RlYnVnX2V2ZXJ5X250aCA8IC0xKQorCQkJc2NzaV9kZWJ1Z19ldmVyeV9udGggPSAtMTsKKwkJaWYgKFNDU0lfREVCVUdfT1BUX1RJTUVPVVQgJiBzY3NpX2RlYnVnX29wdHMpCisJCQlyZXR1cm4gMTsgLyogaWdub3JlIGNvbW1hbmQgY2F1c2luZyB0aW1lb3V0ICovCisJCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX01BQ19USU1FT1VUICYgc2NzaV9kZWJ1Z19vcHRzICYmCisJCQkgc2NzaV9tZWRpdW1fYWNjZXNzX2NvbW1hbmQoc2NwKSkKKwkJCXJldHVybiAxOyAvKiB0aW1lIG91dCByZWFkcyBhbmQgd3JpdGVzICovCisJCWlmIChzZGVidWdfYW55X2luamVjdGluZ19vcHQpIHsKKwkJCWludCBvcHRzID0gc2NzaV9kZWJ1Z19vcHRzOworCisJCQlpZiAoU0NTSV9ERUJVR19PUFRfUkVDT1ZFUkVEX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual9yZWNvdmVyZWQgPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfVFJBTlNQT1JUX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual90cmFuc3BvcnQgPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElGX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual9kaWYgPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElYX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual9kaXggPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfU0hPUlRfVFJBTlNGRVIgJiBvcHRzKQorCQkJCWVwLT5pbmpfc2hvcnQgPSB0cnVlOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3ApCit7CisJdTggc2RlYl9pOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2NwLT5kZXZpY2U7CisJY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgKm9pcDsKKwljb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCAqcl9vaXA7CisJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXA7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKwlpbnQgKCpyX3BmcCkoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworCWludCBrLCBuYTsKKwlpbnQgZXJyc3RzID0gMDsKKwlpbnQgZXJyc3RzX25vX2Nvbm5lY3QgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwl1MzIgZmxhZ3M7CisJdTE2IHNhOworCXU4IG9wY29kZSA9IGNtZFswXTsKKwlib29sIGhhc193bHVuX3JsOworCWJvb2wgZGVidWcgPSAhIShTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cyk7CisKKwlzY3NpX3NldF9yZXNpZChzY3AsIDApOworCWlmIChkZWJ1ZyAmJiAhKFNDU0lfREVCVUdfT1BUX05PX0NEQl9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykpIHsKKwkJY2hhciBiWzEyMF07CisJCWludCBuLCBsZW4sIHNiOworCisJCWxlbiA9IHNjcC0+Y21kX2xlbjsKKwkJc2IgPSAoaW50KXNpemVvZihiKTsKKwkJaWYgKGxlbiA+IDMyKQorCQkJc3RyY3B5KGIsICJ0b28gbG9uZywgb3ZlciAzMiBieXRlcyIpOworCQllbHNlIHsKKwkJCWZvciAoayA9IDAsIG4gPSAwOyBrIDwgbGVuICYmIG4gPCBzYjsgKytrKQorCQkJCW4gKz0gc2NucHJpbnRmKGIgKyBuLCBzYiAtIG4sICIlMDJ4ICIsCisJCQkJCSAgICAgICAodTMyKWNtZFtrXSk7CisJCX0KKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZHAsICIlczogY21kICVzXG4iLCBteV9uYW1lLCBiKTsKKwl9CisJaGFzX3dsdW5fcmwgPSAoc2RwLT5sdW4gPT0gU0FNMl9XTFVOX1JFUE9SVF9MVU5TKTsKKwlpZiAoKHNkcC0+bHVuID49IHNjc2lfZGVidWdfbWF4X2x1bnMpICYmICFoYXNfd2x1bl9ybCkKKwkJcmV0dXJuIHNjaGVkdWxlX3Jlc3Aoc2NwLCBOVUxMLCBlcnJzdHNfbm9fY29ubmVjdCwgMCk7CisKKwlzZGViX2kgPSBvcGNvZGVfaW5kX2FycltvcGNvZGVdOwkvKiBmdWxseSBtYXBwZWQgKi8KKwlvaXAgPSAmb3Bjb2RlX2luZm9fYXJyW3NkZWJfaV07CQkvKiBzYWZlIGlmIHRhYmxlIGNvbnNpc3RlbnQgKi8KKwlkZXZpcCA9IChzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopc2RwLT5ob3N0ZGF0YTsKKwlpZiAoIWRldmlwKSB7CisJCWRldmlwID0gZGV2SW5mb1JlZyhzZHApOworCQlpZiAoTlVMTCA9PSBkZXZpcCkKKwkJCXJldHVybiBzY2hlZHVsZV9yZXNwKHNjcCwgTlVMTCwgZXJyc3RzX25vX2Nvbm5lY3QsIDApOworCX0KKwluYSA9IG9pcC0+bnVtX2F0dGFjaGVkOworCXJfcGZwID0gb2lwLT5wZnA7CisJaWYgKG5hKSB7CS8qIG11bHRpcGxlIGNvbW1hbmRzIHdpdGggdGhpcyBvcGNvZGUgKi8KKwkJcl9vaXAgPSBvaXA7CisJCWlmIChGRl9TQSAmIHJfb2lwLT5mbGFncykgeworCQkJaWYgKEZfU0FfTE9XICYgb2lwLT5mbGFncykKKwkJCQlzYSA9IDB4MWYgJiBjbWRbMV07CisJCQllbHNlCisJCQkJc2EgPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgOCk7CisJCQlmb3IgKGsgPSAwOyBrIDw9IG5hOyBvaXAgPSByX29pcC0+YXJycCArIGsrKykgeworCQkJCWlmIChvcGNvZGUgPT0gb2lwLT5vcGNvZGUgJiYgc2EgPT0gb2lwLT5zYSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7ICAgLyogc2luY2Ugbm8gc2VydmljZSBhY3Rpb24gb25seSBjaGVjayBvcGNvZGUgKi8KKwkJCWZvciAoayA9IDA7IGsgPD0gbmE7IG9pcCA9IHJfb2lwLT5hcnJwICsgaysrKSB7CisJCQkJaWYgKG9wY29kZSA9PSBvaXAtPm9wY29kZSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGsgPiBuYSkgeworCQkJaWYgKEZfU0FfTE9XICYgcl9vaXAtPmZsYWdzKQorCQkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDEsIDQpOworCQkJZWxzZSBpZiAoRl9TQV9ISUdIICYgcl9vaXAtPmZsYWdzKQorCQkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDgsIDcpOworCQkJZWxzZQorCQkJCW1rX3NlbnNlX2ludmFsaWRfb3Bjb2RlKHNjcCk7CisJCQlnb3RvIGNoZWNrX2NvbmQ7CisJCX0KKwl9CS8qIGVsc2UgKHdoZW4gbmE9PTApIHdlIGFzc3VtZSB0aGUgb2lwIGlzIGEgbWF0Y2ggKi8KKwlmbGFncyA9IG9pcC0+ZmxhZ3M7CisJaWYgKEZfSU5WX09QICYgZmxhZ3MpIHsKKwkJbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc2NwKTsKKwkJZ290byBjaGVja19jb25kOworCX0KKwlpZiAoaGFzX3dsdW5fcmwgJiYgIShGX1JMX1dMVU5fT0sgJiBmbGFncykpIHsKKwkJaWYgKGRlYnVnKQorCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZHAsICJzY3NpX2RlYnVnOiBPcGNvZGU6ICIKKwkJCQkgICAgIjB4JXggbm90IHN1cHBvcnRlZCBmb3Igd2x1blxuIiwgb3Bjb2RlKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc2NwKTsKKwkJZ290byBjaGVja19jb25kOworCX0KKwlpZiAoc2NzaV9kZWJ1Z19zdHJpY3QpIHsJLyogY2hlY2sgY2RiIGFnYWluc3QgbWFzayAqLworCQl1OCByZW07CisJCWludCBqOworCisJCWZvciAoayA9IDE7IGsgPCBvaXAtPmxlbl9tYXNrWzBdICYmIGsgPCAxNjsgKytrKSB7CisJCQlyZW0gPSB+b2lwLT5sZW5fbWFza1trXSAmIGNtZFtrXTsKKwkJCWlmIChyZW0pIHsKKwkJCQlmb3IgKGogPSA3OyBqID49IDA7IC0taiwgcmVtIDw8PSAxKSB7CisJCQkJCWlmICgweDgwICYgcmVtKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIGssIGopOworCQkJCWdvdG8gY2hlY2tfY29uZDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIShGX1NLSVBfVUEgJiBmbGFncykgJiYKKwkgICAgU0RFQlVHX05VTV9VQVMgIT0gZmluZF9maXJzdF9iaXQoZGV2aXAtPnVhc19ibSwgU0RFQlVHX05VTV9VQVMpKSB7CisJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIFVBU19PTkxZLCBkZXZpcCk7CisJCWlmIChlcnJzdHMpCisJCQlnb3RvIGNoZWNrX2NvbmQ7CisJfQorCWlmICgoRl9NX0FDQ0VTUyAmIGZsYWdzKSAmJiBkZXZpcC0+c3RvcHBlZCkgeworCQlta19zZW5zZV9idWZmZXIoc2NwLCBOT1RfUkVBRFksIExPR0lDQUxfVU5JVF9OT1RfUkVBRFksIDB4Mik7CisJCWlmIChkZWJ1ZykKKwkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RwLCAiJXMgcmVwb3J0czogTm90IHJlYWR5OiAiCisJCQkJICAgICIlc1xuIiwgbXlfbmFtZSwgImluaXRpYWxpemluZyBjb21tYW5kICIKKwkJCQkgICAgInJlcXVpcmVkIik7CisJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCWdvdG8gZmluaTsKKwl9CisJaWYgKHNjc2lfZGVidWdfZmFrZV9ydyAmJiAoRl9GQUtFX1JXICYgZmxhZ3MpKQorCQlnb3RvIGZpbmk7CisJaWYgKHNjc2lfZGVidWdfZXZlcnlfbnRoKSB7CisJCWlmIChjaGVja19pbmplY3Qoc2NwKSkKKwkJCXJldHVybiAwOwkvKiBpZ25vcmUgY29tbWFuZDogbWFrZSB0cm91YmxlICovCisJfQorCWlmIChvaXAtPnBmcCkJLyogaWYgdGhpcyBjb21tYW5kIGhhcyBhIHJlc3BfKiBmdW5jdGlvbiwgY2FsbCBpdCAqLworCQllcnJzdHMgPSBvaXAtPnBmcChzY3AsIGRldmlwKTsKKwllbHNlIGlmIChyX3BmcCkJLyogaWYgbGVhZiBmdW5jdGlvbiBwdHIgTlVMTCwgdHJ5IHRoZSByb290J3MgKi8KKwkJZXJyc3RzID0gcl9wZnAoc2NwLCBkZXZpcCk7CisKK2Zpbmk6CisJcmV0dXJuIHNjaGVkdWxlX3Jlc3Aoc2NwLCBkZXZpcCwgZXJyc3RzLAorCQkJICAgICAoKEZfREVMQVlfT1ZFUlIgJiBmbGFncykgPyAwIDogc2NzaV9kZWJ1Z19kZWxheSkpOworY2hlY2tfY29uZDoKKwlyZXR1cm4gc2NoZWR1bGVfcmVzcChzY3AsIGRldmlwLCBjaGVja19jb25kaXRpb25fcmVzdWx0LCAwKTsKK30KKworc3RhdGljIGludAorc2RlYnVnX3F1ZXVlY29tbWFuZF9sb2NrX29yX25vdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCWlmIChzY3NpX2RlYnVnX2hvc3RfbG9jaykgeworCQl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwkJaW50IHJjOworCisJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7CisJCXJjID0gc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQoY21kKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBpZmxhZ3MpOworCQlyZXR1cm4gcmM7CisJfSBlbHNlCisJCXJldHVybiBzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChjbWQpOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzZGVidWdfZHJpdmVyX3RlbXBsYXRlID0gewogCS5zaG93X2luZm8gPQkJc2NzaV9kZWJ1Z19zaG93X2luZm8sCiAJLndyaXRlX2luZm8gPQkJc2NzaV9kZWJ1Z193cml0ZV9pbmZvLApAQCAtNDU4NywxMyArNTIyNSwxNiBAQAogCS5tYXhfc2VjdG9ycyA9CQktMVUsCiAJLnVzZV9jbHVzdGVyaW5nID0gCURJU0FCTEVfQ0xVU1RFUklORywKIAkubW9kdWxlID0JCVRISVNfTU9EVUxFLAorCS50cmFja19xdWV1ZV9kZXB0aCA9CTEsCisJLmNtZF9zaXplID0JCXNpemVvZihzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCksCiB9OwogCiBzdGF0aWMgaW50IHNkZWJ1Z19kcml2ZXJfcHJvYmUoc3RydWN0IGRldmljZSAqIGRldikKIHsKLSAgICAgICAgaW50IGVycm9yID0gMDsKLSAgICAgICAgc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKnNkYmdfaG9zdDsKLSAgICAgICAgc3RydWN0IFNjc2lfSG9zdCAqaHBudDsKKwlpbnQgZXJyb3IgPSAwOworCWludCBvcHRzOworCXN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICpzZGJnX2hvc3Q7CisJc3RydWN0IFNjc2lfSG9zdCAqaHBudDsKIAlpbnQgaG9zdF9wcm90OwogCiAJc2RiZ19ob3N0ID0gdG9fc2RlYnVnX2hvc3QoZGV2KTsKQEAgLTQ2MDMsNyArNTI0NCw3IEBACiAJCXNkZWJ1Z19kcml2ZXJfdGVtcGxhdGUudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORzsKIAlocG50ID0gc2NzaV9ob3N0X2FsbG9jKCZzZGVidWdfZHJpdmVyX3RlbXBsYXRlLCBzaXplb2Yoc2RiZ19ob3N0KSk7CiAJaWYgKE5VTEwgPT0gaHBudCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzY3NpX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlwcl9lcnIoIiVzOiBzY3NpX2hvc3RfYWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWVycm9yID0gLUVOT0RFVjsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTQ2NjAsNiArNTMwMSwxOCBAQAogCWVsc2UKIAkJc2NzaV9ob3N0X3NldF9ndWFyZChocG50LCBTSE9TVF9ESVhfR1VBUkRfQ1JDKTsKIAorCW9wdHMgPSBzY3NpX2RlYnVnX29wdHM7CisJaWYgKFNDU0lfREVCVUdfT1BUX1JFQ09WRVJFRF9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1RSQU5TUE9SVF9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJRl9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJWF9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1NIT1JUX1RSQU5TRkVSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwogICAgICAgICBlcnJvciA9IHNjc2lfYWRkX2hvc3QoaHBudCwgJnNkYmdfaG9zdC0+ZGV2KTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogc2NzaV9hZGRfaG9zdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwppbmRleCA0OTAxNGExLi5jMWQwNGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCkBAIC0yMDIsNiArMjAyLDcgQEAKIAl7IklPTUVHQSIsICJJbzIwUyAgICAgICAgICpGIiwgTlVMTCwgQkxJU1RfS0VZfSwKIAl7IklOU0lURSIsICJGbG9wdGljYWwgICBGKjhJIiwgTlVMTCwgQkxJU1RfS0VZfSwKIAl7IklOU0lURSIsICJJMzI1Vk0iLCBOVUxMLCBCTElTVF9LRVl9LAorCXsiSW50ZWwiLCAiTXVsdGktRmxleCIsIE5VTEwsIEJMSVNUX05PX1JTT0N9LAogCXsiaVJpdmVyIiwgImlGUCBNYXNzIERyaXZlciIsIE5VTEwsIEJMSVNUX05PVF9MT0NLQUJMRSB8IEJMSVNUX0lOUVVJUllfMzZ9LAogCXsiTEFTT1VORCIsICJDRFg3NDA1IiwgIjMuMTAiLCBCTElTVF9NQVg1TFVOIHwgQkxJU1RfU0lOR0xFTFVOfSwKIAl7Ik1BVFNISVRBIiwgIlBELTEiLCBOVUxMLCBCTElTVF9GT1JDRUxVTiB8IEJMSVNUX1NJTkdMRUxVTn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCA5YTZmODQ2Li5lNDJmZmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaW9jdGwuaD4KKyNpbmNsdWRlIDxzY3NpL3NnLmg+CiAKICNpbmNsdWRlICJzY3NpX3ByaXYuaCIKICNpbmNsdWRlICJzY3NpX2xvZ2dpbmcuaCIKQEAgLTE1Nyw4ICsxNTgsOSBAQAogCQl9IGVsc2UgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKIAkJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCi0JCQkJCSAgICAic2NtZCAlcCBhYm9ydCBmYWlsZWQsIHJ0biAlZFxuIiwKLQkJCQkJICAgIHNjbWQsIHJ0bikpOworCQkJCQkgICAgInNjbWQgJXAgYWJvcnQgJXNcbiIsIHNjbWQsCisJCQkJCSAgICAocnRuID09IEZBU1RfSU9fRkFJTCkgPworCQkJCQkgICAgIm5vdCBzZW5kIiA6ICJmYWlsZWQiKSk7CiAJCX0KIAl9CiAKQEAgLTM1NSw3ICszNTcsNyBAQAogCiAJCWlmIChjbWRfY2FuY2VsIHx8IGNtZF9mYWlsZWQpIHsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAogCQkJCQkgICAgIiVzOiBjbWRzIGZhaWxlZDogJWQsIGNhbmNlbDogJWRcbiIsCiAJCQkJCSAgICBfX2Z1bmNfXywgY21kX2ZhaWxlZCwKIAkJCQkJICAgIGNtZF9jYW5jZWwpKTsKQEAgLTQ1OSwxNCArNDYxLDYgQEAKIAlpZiAoISBzY3NpX2NvbW1hbmRfbm9ybWFsaXplX3NlbnNlKHNjbWQsICZzc2hkcikpCiAJCXJldHVybiBGQUlMRUQ7CS8qIG5vIHZhbGlkIHNlbnNlIGRhdGEgKi8KIAotCWlmIChzY21kLT5jbW5kWzBdID09IFRFU1RfVU5JVF9SRUFEWSAmJiBzY21kLT5zY3NpX2RvbmUgIT0gc2NzaV9laF9kb25lKQotCQkvKgotCQkgKiBuYXN0eTogZm9yIG1pZC1sYXllciBpc3N1ZWQgVFVScywgd2UgbmVlZCB0byByZXR1cm4gdGhlCi0JCSAqIGFjdHVhbCBzZW5zZSBkYXRhIHdpdGhvdXQgYW55IHJlY292ZXJ5IGF0dGVtcHQuICBGb3IgZWgKLQkJICogaXNzdWVkIG9uZXMsIHdlIG5lZWQgdG8gdHJ5IHRvIHJlY292ZXIgYW5kIGludGVycHJldAotCQkgKi8KLQkJcmV0dXJuIFNVQ0NFU1M7Ci0KIAlzY3NpX3JlcG9ydF9zZW5zZShzZGV2LCAmc3NoZHIpOwogCiAJaWYgKHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoJnNzaGRyKSkKQEAgLTQ4Miw2ICs0NzYsMTQgQEAKIAkJLyogaGFuZGxlciBkb2VzIG5vdCBjYXJlLiBEcm9wIGRvd24gdG8gZGVmYXVsdCBoYW5kbGluZyAqLwogCX0KIAorCWlmIChzY21kLT5jbW5kWzBdID09IFRFU1RfVU5JVF9SRUFEWSAmJiBzY21kLT5zY3NpX2RvbmUgIT0gc2NzaV9laF9kb25lKQorCQkvKgorCQkgKiBuYXN0eTogZm9yIG1pZC1sYXllciBpc3N1ZWQgVFVScywgd2UgbmVlZCB0byByZXR1cm4gdGhlCisJCSAqIGFjdHVhbCBzZW5zZSBkYXRhIHdpdGhvdXQgYW55IHJlY292ZXJ5IGF0dGVtcHQuICBGb3IgZWgKKwkJICogaXNzdWVkIG9uZXMsIHdlIG5lZWQgdG8gdHJ5IHRvIHJlY292ZXIgYW5kIGludGVycHJldAorCQkgKi8KKwkJcmV0dXJuIFNVQ0NFU1M7CisKIAkvKgogCSAqIFByZXZpb3VzIGxvZ2ljIGxvb2tlZCBmb3IgRklMRU1BUkssIEVPTSBvciBJTEkgd2hpY2ggYXJlCiAJICogbWFpbmx5IGFzc29jaWF0ZWQgd2l0aCB0YXBlcyBhbmQgcmV0dXJuZWQgU1VDQ0VTUy4KQEAgLTYwOCw3ICs2MTAsNyBAQAogCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCA9IHNkZXYtPmhvc3QtPmhvc3R0OwogCXN0cnVjdCBzY3NpX2RldmljZSAqdG1wX3NkZXY7CiAKLQlpZiAoIXNodC0+Y2hhbmdlX3F1ZXVlX2RlcHRoIHx8CisJaWYgKCFzaHQtPnRyYWNrX3F1ZXVlX2RlcHRoIHx8CiAJICAgIHNkZXYtPnF1ZXVlX2RlcHRoID49IHNkZXYtPm1heF9xdWV1ZV9kZXB0aCkKIAkJcmV0dXJuOwogCkBAIC02MjksMTIgKzYzMSw4IEBACiAJCSAgICB0bXBfc2Rldi0+aWQgIT0gc2Rldi0+aWQgfHwKIAkJICAgIHRtcF9zZGV2LT5xdWV1ZV9kZXB0aCA9PSBzZGV2LT5tYXhfcXVldWVfZGVwdGgpCiAJCQljb250aW51ZTsKLQkJLyoKLQkJICogY2FsbCBiYWNrIGludG8gTExEIHRvIGluY3JlYXNlIHF1ZXVlX2RlcHRoIGJ5IG9uZQotCQkgKiB3aXRoIHJhbXAgdXAgcmVhc29uIGNvZGUuCi0JCSAqLwotCQlzaHQtPmNoYW5nZV9xdWV1ZV9kZXB0aCh0bXBfc2RldiwgdG1wX3NkZXYtPnF1ZXVlX2RlcHRoICsgMSwKLQkJCQkJU0NTSV9RREVQVEhfUkFNUF9VUCk7CisKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgodG1wX3NkZXYsIHRtcF9zZGV2LT5xdWV1ZV9kZXB0aCArIDEpOwogCQlzZGV2LT5sYXN0X3F1ZXVlX3JhbXBfdXAgPSBqaWZmaWVzOwogCX0KIH0KQEAgLTY0NCw3ICs2NDIsNyBAQAogCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCA9IHNkZXYtPmhvc3QtPmhvc3R0OwogCXN0cnVjdCBzY3NpX2RldmljZSAqdG1wX3NkZXY7CiAKLQlpZiAoIXNodC0+Y2hhbmdlX3F1ZXVlX2RlcHRoKQorCWlmICghc2h0LT50cmFja19xdWV1ZV9kZXB0aCkKIAkJcmV0dXJuOwogCiAJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHRtcF9zZGV2LCBzZGV2LT5ob3N0KSB7CkBAIC02NTYsOCArNjU0LDcgQEAKIAkJICogdGhlIGRldmljZSB3aGVuIHdlIGdvdCB0aGUgcXVldWUgZnVsbCBzbyB3ZSBzdGFydAogCQkgKiBmcm9tIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHZhbHVlIGFuZCB3b3JrIG91ciB3YXkgZG93bi4KIAkJICovCi0JCXNodC0+Y2hhbmdlX3F1ZXVlX2RlcHRoKHRtcF9zZGV2LCB0bXBfc2Rldi0+cXVldWVfZGVwdGggLSAxLAotCQkJCQlTQ1NJX1FERVBUSF9RRlVMTCk7CisJCXNjc2lfdHJhY2tfcXVldWVfZnVsbCh0bXBfc2RldiwgdG1wX3NkZXYtPnF1ZXVlX2RlcHRoIC0gMSk7CiAJfQogfQogCkBAIC04NjksNyArODY2LDI0IEBACiAJcmV0dXJuIHJ0bjsKIH0KIAotc3RhdGljIGludCBzY3NpX3RyeV90b19hYm9ydF9jbWQoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdHQsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCisvKioKKyAqIHNjc2lfdHJ5X3RvX2Fib3J0X2NtZCAtIEFzayBob3N0IHRvIGFib3J0IGEgU0NTSSBjb21tYW5kCisgKiBAc2NtZDoJU0NTSSBjbWQgdXNlZCB0byBzZW5kIGEgdGFyZ2V0IHJlc2V0CisgKgorICogUmV0dXJuIHZhbHVlOgorICoJU1VDQ0VTUywgRkFJTEVELCBvciBGQVNUX0lPX0ZBSUwKKyAqCisgKiBOb3RlczoKKyAqICAgIFNVQ0NFU1MgZG9lcyBub3QgbmVjZXNzYXJpbHkgaW5kaWNhdGUgdGhhdCB0aGUgY29tbWFuZAorICogICAgaGFzIGJlZW4gYWJvcnRlZDsgaXQgb25seSBpbmRpY2F0ZXMgdGhhdCB0aGUgTExERHMKKyAqICAgIGhhcyBjbGVhcmVkIGFsbCByZWZlcmVuY2VzIHRvIHRoYXQgY29tbWFuZC4KKyAqICAgIExMRERzIHNob3VsZCByZXR1cm4gRkFJTEVEIG9ubHkgaWYgYW4gYWJvcnQgd2FzIHJlcXVpcmVkCisgKiAgICBidXQgY291bGQgbm90IGJlIGV4ZWN1dGVkLiBMTEREcyBzaG91bGQgcmV0dXJuIEZBU1RfSU9fRkFJTAorICogICAgaWYgdGhlIGRldmljZSBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSAoZWcgZHVlIHRvIGEKKyAqICAgIGxpbmsgZG93biBvbiBGaWJyZUNoYW5uZWwpCisgKi8KK3N0YXRpYyBpbnQgc2NzaV90cnlfdG9fYWJvcnRfY21kKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3R0LAorCQkJCSBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQogewogCWlmICghaG9zdHQtPmVoX2Fib3J0X2hhbmRsZXIpCiAJCXJldHVybiBGQUlMRUQ7CkBAIC0xMTU2LDkgKzExNzAsOSBAQAogCQlzaG9zdCA9IHNjbWQtPmRldmljZS0+aG9zdDsKIAkJaWYgKHNjc2lfaG9zdF9laF9wYXN0X2RlYWRsaW5lKHNob3N0KSkgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkJICAgICJza2lwICVzLCBwYXN0IGVoIGRlYWRsaW5lXG4iLAotCQkJCQkgICAgIF9fZnVuY19fKSk7CisJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkJCQkgICAgIiVzOiBza2lwIHJlcXVlc3Qgc2Vuc2UsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICAgY3VycmVudC0+Y29tbSkpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHN0YXR1c19ieXRlKHNjbWQtPnJlc3VsdCkgIT0gQ0hFQ0tfQ09ORElUSU9OKQpAQCAtMTE4MCw3ICsxMTk0LDcgQEAKIAkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAogCQkJInNlbnNlIHJlcXVlc3RlZCBmb3IgJXAgcmVzdWx0ICV4XG4iLAogCQkJc2NtZCwgc2NtZC0+cmVzdWx0KSk7Ci0JCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsIHNjc2lfcHJpbnRfc2Vuc2UoImJoIiwgc2NtZCkpOworCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBzY3NpX3ByaW50X3NlbnNlKHNjbWQpKTsKIAogCQlydG4gPSBzY3NpX2RlY2lkZV9kaXNwb3NpdGlvbihzY21kKTsKIApAQCAtMTI2NSw5ICsxMjc5LDkgQEAKIAkJCQkvKiBQdXNoIGl0ZW1zIGJhY2sgb250byB3b3JrX3EgKi8KIAkJCQlsaXN0X3NwbGljZV9pbml0KGNtZF9saXN0LCB3b3JrX3EpOwogCQkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNkZXYtPmhvc3QsCi0JCQkJCQkgICAgICJza2lwICVzLCBwYXN0IGVoIGRlYWRsaW5lIiwKLQkJCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCQkJCQkJICAgICIlczogc2tpcCB0ZXN0IGRldmljZSwgcGFzdCBlaCBkZWFkbGluZSIsCisJCQkJCQkgICAgY3VycmVudC0+Y29tbSkpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0xMzE4LDIxICsxMzMyLDIwIEBACiAJCWlmIChzY3NpX2hvc3RfZWhfcGFzdF9kZWFkbGluZShzaG9zdCkpIHsKIAkJCWxpc3Rfc3BsaWNlX2luaXQoJmNoZWNrX2xpc3QsIHdvcmtfcSk7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmVcbiIsCi0JCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCisJCQkJCSAgICAiJXM6IHNraXAgYWJvcnRpbmcgY21kLCBwYXN0IGVoIGRlYWRsaW5lXG4iLAorCQkJCQkgICAgY3VycmVudC0+Y29tbSkpOwogCQkJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIAkJfQogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJICAgICAiJXM6IGFib3J0aW5nIGNtZDogMHglcFxuIiwKLQkJCQkgICAgIGN1cnJlbnQtPmNvbW0sIHNjbWQpKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKKwkJCQkgICAgICIlczogYWJvcnRpbmcgY21kXG4iLCBjdXJyZW50LT5jb21tKSk7CiAJCXJ0biA9IHNjc2lfdHJ5X3RvX2Fib3J0X2NtZChzaG9zdC0+aG9zdHQsIHNjbWQpOwogCQlpZiAocnRuID09IEZBSUxFRCkgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkJICAgICAiJXM6IGFib3J0aW5nIGNtZCBmYWlsZWQ6IDB4JXBcbiIsCi0JCQkJCSAgICAgY3VycmVudC0+Y29tbSwgc2NtZCkpOworCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKKwkJCQkJICAgICIlczogYWJvcnRpbmcgY21kIGZhaWxlZFxuIiwKKwkJCQkJICAgICBjdXJyZW50LT5jb21tKSk7CiAJCQlsaXN0X3NwbGljZV9pbml0KCZjaGVja19saXN0LCB3b3JrX3EpOwogCQkJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIAkJfQpAQCAtMTM5MCw5ICsxNDAzLDkgQEAKIAlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2Rldiwgc2hvc3QpIHsKIAkJaWYgKHNjc2lfaG9zdF9laF9wYXN0X2RlYWRsaW5lKHNob3N0KSkgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkJICAgICJza2lwICVzLCBwYXN0IGVoIGRlYWRsaW5lXG4iLAotCQkJCQkgICAgIF9fZnVuY19fKSk7CisJCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCQkJCQkgICAgIiVzOiBza2lwIFNUQVJUX1VOSVQsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICBjdXJyZW50LT5jb21tKSk7CiAJCQlicmVhazsKIAkJfQogCQlzdHVfc2NtZCA9IE5VTEw7CkBAIC0xNDA3LDkgKzE0MjAsOSBAQAogCQkJY29udGludWU7CiAKIAkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCSAgICAgIiVzOiBTZW5kaW5nIFNUQVJUX1VOSVQgdG8gc2RldjogMHglcFxuIiwKLQkJCQkgICAgIGN1cnJlbnQtPmNvbW0sIHNkZXYpKTsKKwkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkgICAgICIlczogU2VuZGluZyBTVEFSVF9VTklUXG4iLAorCQkJCSAgICBjdXJyZW50LT5jb21tKSk7CiAKIAkJaWYgKCFzY3NpX2VoX3RyeV9zdHUoc3R1X3NjbWQpKSB7CiAJCQlpZiAoIXNjc2lfZGV2aWNlX29ubGluZShzZGV2KSB8fApAQCAtMTQyMyw5ICsxNDM2LDkgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJCSAgICAgIiVzOiBTVEFSVF9VTklUIGZhaWxlZCB0byBzZGV2OiIKLQkJCQkJICAgICAiIDB4JXBcbiIsIGN1cnJlbnQtPmNvbW0sIHNkZXYpKTsKKwkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJCSAgICAiJXM6IFNUQVJUX1VOSVQgZmFpbGVkXG4iLAorCQkJCQkgICAgY3VycmVudC0+Y29tbSkpOwogCQl9CiAJfQogCkBAIC0xNDU2LDkgKzE0NjksOSBAQAogCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgewogCQlpZiAoc2NzaV9ob3N0X2VoX3Bhc3RfZGVhZGxpbmUoc2hvc3QpKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmVcbiIsCi0JCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJCSAgICAiJXM6IHNraXAgQkRSLCBwYXN0IGVoIGRlYWRsaW5lXG4iLAorCQkJCQkgICAgIGN1cnJlbnQtPmNvbW0pKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJkcl9zY21kID0gTlVMTDsKQEAgLTE0NzIsOSArMTQ4NSw4IEBACiAJCQljb250aW51ZTsKIAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJICAgICAiJXM6IFNlbmRpbmcgQkRSIHNkZXY6IDB4JXBcbiIsCi0JCQkJICAgICBjdXJyZW50LT5jb21tLCBzZGV2KSk7CisJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJICAgICAiJXM6IFNlbmRpbmcgQkRSXG4iLCBjdXJyZW50LT5jb21tKSk7CiAJCXJ0biA9IHNjc2lfdHJ5X2J1c19kZXZpY2VfcmVzZXQoYmRyX3NjbWQpOwogCQlpZiAocnRuID09IFNVQ0NFU1MgfHwgcnRuID09IEZBU1RfSU9fRkFJTCkgewogCQkJaWYgKCFzY3NpX2RldmljZV9vbmxpbmUoc2RldikgfHwKQEAgLTE0OTAsOSArMTUwMiw4IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgICIlczogQkRSIGZhaWxlZCBzZGV2OiAweCVwXG4iLAotCQkJCQkgICAgIGN1cnJlbnQtPmNvbW0sIHNkZXYpKTsKKwkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJCSAgICAiJXM6IEJEUiBmYWlsZWRcbiIsIGN1cnJlbnQtPmNvbW0pKTsKIAkJfQogCX0KIApAQCAtMTUyOCw4ICsxNTM5LDggQEAKIAkJCWxpc3Rfc3BsaWNlX2luaXQoJnRtcF9saXN0LCB3b3JrX3EpOwogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKIAkJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkJICAgICJza2lwICVzLCBwYXN0IGVoIGRlYWRsaW5lXG4iLAotCQkJCQkgICAgIF9fZnVuY19fKSk7CisJCQkJCSAgICAiJXM6IFNraXAgdGFyZ2V0IHJlc2V0LCBwYXN0IGVoIGRlYWRsaW5lXG4iLAorCQkJCQkgICAgIGN1cnJlbnQtPmNvbW0pKTsKIAkJCXJldHVybiBsaXN0X2VtcHR5KHdvcmtfcSk7CiAJCX0KIApAQCAtMTU5MSw4ICsxNjAyLDggQEAKIAkJCWxpc3Rfc3BsaWNlX2luaXQoJmNoZWNrX2xpc3QsIHdvcmtfcSk7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAogCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmVcbiIsCi0JCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQkJICAgICIlczogc2tpcCBCUlNULCBwYXN0IGVoIGRlYWRsaW5lXG4iLAorCQkJCQkgICAgIGN1cnJlbnQtPmNvbW0pKTsKIAkJCXJldHVybiBsaXN0X2VtcHR5KHdvcmtfcSk7CiAJCX0KIApAQCAtMjAwMSw4ICsyMDEyLDEwIEBACiAJICogaXMgbm8gcG9pbnQgdHJ5aW5nIHRvIGxvY2sgdGhlIGRvb3Igb2YgYW4gb2ZmLWxpbmUgZGV2aWNlLgogCSAqLwogCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgewotCQlpZiAoc2NzaV9kZXZpY2Vfb25saW5lKHNkZXYpICYmIHNkZXYtPmxvY2tlZCkKKwkJaWYgKHNjc2lfZGV2aWNlX29ubGluZShzZGV2KSAmJiBzZGV2LT53YXNfcmVzZXQgJiYgc2Rldi0+bG9ja2VkKSB7CiAJCQlzY3NpX2VoX2xvY2tfZG9vcihzZGV2KTsKKwkJCXNkZXYtPndhc19yZXNldCA9IDA7CisJCX0KIAl9CiAKIAkvKgpAQCAtMjE5MSw5ICsyMjA0LDkgQEAKIAkJICovCiAJCWlmICghc2hvc3QtPmVoX25vcmVzdW1lICYmIHNjc2lfYXV0b3BtX2dldF9ob3N0KHNob3N0KSAhPSAwKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgxLAotCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgaGFuZGxlciBzY3NpX2VoXyVkICIKLQkJCQkJCSJ1bmFibGUgdG8gYXV0b3Jlc3VtZVxuIiwKLQkJCQkJCXNob3N0LT5ob3N0X25vKSk7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaG9zdCwKKwkJCQkJICAgICAic2NzaV9laF8lZDogdW5hYmxlIHRvIGF1dG9yZXN1bWVcbiIsCisJCQkJCSAgICAgc2hvc3QtPmhvc3Rfbm8pKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIyOTQsNDIgKzIzMDcsMzQgQEAKIHsKIH0KIAotLyoKLSAqIEZ1bmN0aW9uOglzY3NpX3Jlc2V0X3Byb3ZpZGVyCi0gKgotICogUHVycG9zZToJU2VuZCByZXF1ZXN0ZWQgcmVzZXQgdG8gYSBidXMgb3IgZGV2aWNlIGF0IGFueSBwaGFzZS4KLSAqCi0gKiBBcmd1bWVudHM6CWRldmljZQktIGRldmljZSB0byBzZW5kIHJlc2V0IHRvCi0gKgkJZmxhZyAtIHJlc2V0IHR5cGUgKHNlZSBzY3NpLmgpCi0gKgotICogUmV0dXJuczoJU1VDQ0VTUy9GQUlMVVJFLgotICoKLSAqIE5vdGVzOglUaGlzIGlzIHVzZWQgYnkgdGhlIFNDU0kgR2VuZXJpYyBkcml2ZXIgdG8gcHJvdmlkZQotICoJCUJ1cy9EZXZpY2UgcmVzZXQgY2FwYWJpbGl0eS4KKy8qKgorICogc2NzaV9pb2N0bF9yZXNldDogZXhwbGljaXRseSByZXNldCBhIGhvc3QvYnVzL3RhcmdldC9kZXZpY2UKKyAqIEBkZXY6CXNjc2lfZGV2aWNlIHRvIG9wZXJhdGUgb24KKyAqIEBhcmc6CXJlc2V0IHR5cGUgKHNlZSBzZy5oKQogICovCiBpbnQKLXNjc2lfcmVzZXRfcHJvdmlkZXIoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBmbGFnKQorc2NzaV9pb2N0bF9yZXNldChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IF9fdXNlciAqYXJnKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXYtPmhvc3Q7CiAJc3RydWN0IHJlcXVlc3QgcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJ0bjsKKwlpbnQgZXJyb3IgPSAwLCBydG4sIHZhbDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwllcnJvciA9IGdldF91c2VyKHZhbCwgYXJnKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCWlmIChzY3NpX2F1dG9wbV9nZXRfaG9zdChzaG9zdCkgPCAwKQotCQlyZXR1cm4gRkFJTEVEOworCQlyZXR1cm4gLUVJTzsKIAotCWlmICghZ2V0X2RldmljZSgmZGV2LT5zZGV2X2dlbmRldikpIHsKLQkJcnRuID0gRkFJTEVEOwotCQlnb3RvIG91dF9wdXRfYXV0b3BtX2hvc3Q7Ci0JfQotCisJZXJyb3IgPSAtRUlPOwogCXNjbWQgPSBzY3NpX2dldF9jb21tYW5kKGRldiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzY21kKSB7Ci0JCXJ0biA9IEZBSUxFRDsKLQkJcHV0X2RldmljZSgmZGV2LT5zZGV2X2dlbmRldik7CisJaWYgKCFzY21kKQogCQlnb3RvIG91dF9wdXRfYXV0b3BtX2hvc3Q7Ci0JfQogCiAJYmxrX3JxX2luaXQoTlVMTCwgJnJlcSk7CiAJc2NtZC0+cmVxdWVzdCA9ICZyZXE7CkBAIC0yMzQ3LDI5ICsyMzUyLDM3IEBACiAJc2hvc3QtPnRtZl9pbl9wcm9ncmVzcyA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKLQlzd2l0Y2ggKGZsYWcpIHsKLQljYXNlIFNDU0lfVFJZX1JFU0VUX0RFVklDRToKLQkJcnRuID0gc2NzaV90cnlfYnVzX2RldmljZV9yZXNldChzY21kKTsKLQkJaWYgKHJ0biA9PSBTVUNDRVNTKQotCQkJYnJlYWs7Ci0JCS8qIEZBTExUSFJPVUdIICovCi0JY2FzZSBTQ1NJX1RSWV9SRVNFVF9UQVJHRVQ6Ci0JCXJ0biA9IHNjc2lfdHJ5X3RhcmdldF9yZXNldChzY21kKTsKLQkJaWYgKHJ0biA9PSBTVUNDRVNTKQotCQkJYnJlYWs7Ci0JCS8qIEZBTExUSFJPVUdIICovCi0JY2FzZSBTQ1NJX1RSWV9SRVNFVF9CVVM6Ci0JCXJ0biA9IHNjc2lfdHJ5X2J1c19yZXNldChzY21kKTsKLQkJaWYgKHJ0biA9PSBTVUNDRVNTKQotCQkJYnJlYWs7Ci0JCS8qIEZBTExUSFJPVUdIICovCi0JY2FzZSBTQ1NJX1RSWV9SRVNFVF9IT1NUOgotCQlydG4gPSBzY3NpX3RyeV9ob3N0X3Jlc2V0KHNjbWQpOworCXN3aXRjaCAodmFsICYgflNHX1NDU0lfUkVTRVRfTk9fRVNDQUxBVEUpIHsKKwljYXNlIFNHX1NDU0lfUkVTRVRfTk9USElORzoKKwkJcnRuID0gU1VDQ0VTUzsKIAkJYnJlYWs7CisJY2FzZSBTR19TQ1NJX1JFU0VUX0RFVklDRToKKwkJcnRuID0gc2NzaV90cnlfYnVzX2RldmljZV9yZXNldChzY21kKTsKKwkJaWYgKHJ0biA9PSBTVUNDRVNTIHx8ICh2YWwgJiBTR19TQ1NJX1JFU0VUX05PX0VTQ0FMQVRFKSkKKwkJCWJyZWFrOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgU0dfU0NTSV9SRVNFVF9UQVJHRVQ6CisJCXJ0biA9IHNjc2lfdHJ5X3RhcmdldF9yZXNldChzY21kKTsKKwkJaWYgKHJ0biA9PSBTVUNDRVNTIHx8ICh2YWwgJiBTR19TQ1NJX1JFU0VUX05PX0VTQ0FMQVRFKSkKKwkJCWJyZWFrOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgU0dfU0NTSV9SRVNFVF9CVVM6CisJCXJ0biA9IHNjc2lfdHJ5X2J1c19yZXNldChzY21kKTsKKwkJaWYgKHJ0biA9PSBTVUNDRVNTIHx8ICh2YWwgJiBTR19TQ1NJX1JFU0VUX05PX0VTQ0FMQVRFKSkKKwkJCWJyZWFrOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgU0dfU0NTSV9SRVNFVF9IT1NUOgorCQlydG4gPSBzY3NpX3RyeV9ob3N0X3Jlc2V0KHNjbWQpOworCQlpZiAocnRuID09IFNVQ0NFU1MpCisJCQlicmVhazsKIAlkZWZhdWx0OgorCQkvKiBGQUxMVEhST1VHSCAqLwogCQlydG4gPSBGQUlMRUQ7CisJCWJyZWFrOwogCX0KIAorCWVycm9yID0gKHJ0biA9PSBTVUNDRVNTKSA/IDAgOiAtRUlPOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXNob3N0LT50bWZfaW5fcHJvZ3Jlc3MgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtMjM4MywxNSArMjM5NiwxNSBAQAogCQkJICAgICAid2FraW5nIHVwIGhvc3QgdG8gcmVzdGFydCBhZnRlciBUTUZcbiIpKTsKIAogCXdha2VfdXAoJnNob3N0LT5ob3N0X3dhaXQpOwotCiAJc2NzaV9ydW5faG9zdF9xdWV1ZXMoc2hvc3QpOwogCi0Jc2NzaV9uZXh0X2NvbW1hbmQoc2NtZCk7CisJc2NzaV9wdXRfY29tbWFuZChzY21kKTsKKwogb3V0X3B1dF9hdXRvcG1faG9zdDoKIAlzY3NpX2F1dG9wbV9wdXRfaG9zdChzaG9zdCk7Ci0JcmV0dXJuIHJ0bjsKKwlyZXR1cm4gZXJyb3I7CiB9Ci1FWFBPUlRfU1lNQk9MKHNjc2lfcmVzZXRfcHJvdmlkZXIpOworRVhQT1JUX1NZTUJPTChzY3NpX2lvY3RsX3Jlc2V0KTsKIAogLyoqCiAgKiBzY3NpX25vcm1hbGl6ZV9zZW5zZSAtIG5vcm1hbGl6ZSBtYWluIGVsZW1lbnRzIGZyb20gZWl0aGVyIGZpeGVkIG9yCkBAIC0yNDEwLDIwICsyNDIzLDIwIEBACiAgKglyZXNwb25kZWQgdG8gYSBTQ1NJIGNvbW1hbmQgd2l0aCB0aGUgQ0hFQ0tfQ09ORElUSU9OIHN0YXR1cy4KICAqCiAgKiBSZXR1cm4gdmFsdWU6Ci0gKgkxIGlmIHZhbGlkIHNlbnNlIGRhdGEgaW5mb3JtYXRpb24gZm91bmQsIGVsc2UgMDsKKyAqCXRydWUgaWYgdmFsaWQgc2Vuc2UgZGF0YSBpbmZvcm1hdGlvbiBmb3VuZCwgZWxzZSBmYWxzZTsKICAqLwotaW50IHNjc2lfbm9ybWFsaXplX3NlbnNlKGNvbnN0IHU4ICpzZW5zZV9idWZmZXIsIGludCBzYl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKK2Jvb2wgc2NzaV9ub3JtYWxpemVfc2Vuc2UoY29uc3QgdTggKnNlbnNlX2J1ZmZlciwgaW50IHNiX2xlbiwKKwkJCSAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKIHsKIAlpZiAoIXNlbnNlX2J1ZmZlciB8fCAhc2JfbGVuKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJbWVtc2V0KHNzaGRyLCAwLCBzaXplb2Yoc3RydWN0IHNjc2lfc2Vuc2VfaGRyKSk7CiAKIAlzc2hkci0+cmVzcG9uc2VfY29kZSA9IChzZW5zZV9idWZmZXJbMF0gJiAweDdmKTsKIAogCWlmICghc2NzaV9zZW5zZV92YWxpZChzc2hkcikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoc3NoZHItPnJlc3BvbnNlX2NvZGUgPj0gMHg3MikgewogCQkvKgpAQCAtMjQ1MywxMiArMjQ2NiwxMiBAQAogCQl9CiAJfQogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfbm9ybWFsaXplX3NlbnNlKTsKIAotaW50IHNjc2lfY29tbWFuZF9ub3JtYWxpemVfc2Vuc2Uoc3RydWN0IHNjc2lfY21uZCAqY21kLAotCQkJCSBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorYm9vbCBzY3NpX2NvbW1hbmRfbm9ybWFsaXplX3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCQkgIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCiB7CiAJcmV0dXJuIHNjc2lfbm9ybWFsaXplX3NlbnNlKGNtZC0+c2Vuc2VfYnVmZmVyLAogCQkJU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCBzc2hkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jIGIvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYwppbmRleCAxYWFhZjQzLi5jNGY3YjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAogCQkJCSAgICAiaW9jdGxfaW50ZXJuYWxfY29tbWFuZCByZXR1cm4gY29kZSA9ICV4XG4iLAogCQkJCSAgICByZXN1bHQpOwotCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoIiAgICIsICZzc2hkcik7CisJCQlzY3NpX3ByaW50X3NlbnNlX2hkcihzZGV2LCBOVUxMLCAmc3NoZHIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yMDAsMTkgKzIwMCw2IEBACiB7CiAJY2hhciBzY3NpX2NtZFtNQVhfQ09NTUFORF9TSVpFXTsKIAotCS8qIE5vIGlkZWEgaG93IHRoaXMgaGFwcGVucy4uLi4gKi8KLQlpZiAoIXNkZXYpCi0JCXJldHVybiAtRU5YSU87Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGVycm9yIHJlY292ZXJ5LCBkb24ndCBsZXQgYW55b25lCi0JICogZWxzZSB0cnkgYW5kIHVzZSB0aGlzIGRldmljZS4gIEFsc28sIGlmIGVycm9yIHJlY292ZXJ5IGZhaWxzLCBpdAotCSAqIG1heSB0cnkgYW5kIHRha2UgdGhlIGRldmljZSBvZmZsaW5lLCBpbiB3aGljaCBjYXNlIGFsbCBmdXJ0aGVyCi0JICogYWNjZXNzIHRvIHRoZSBkZXZpY2UgaXMgcHJvaGliaXRlZC4KLQkgKi8KLQlpZiAoIXNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkvKiBDaGVjayBmb3IgZGVwcmVjYXRlZCBpb2N0bHMgLi4uIGFsbCB0aGUgaW9jdGxzIHdoaWNoIGRvbid0CiAJICogZm9sbG93IHRoZSBuZXcgdW5pcXVlIG51bWJlcmluZyBzY2hlbWUgYXJlIGRlcHJlY2F0ZWQgKi8KIAlzd2l0Y2ggKGNtZCkgewpAQCAtMjczLDYgKzI2MCw4IEBACiAJCQkJICAgICBTVEFSVF9TVE9QX1RJTUVPVVQsIE5PUk1BTF9SRVRSSUVTKTsKICAgICAgICAgY2FzZSBTQ1NJX0lPQ1RMX0dFVF9QQ0k6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNjc2lfaW9jdGxfZ2V0X3BjaShzZGV2LCBhcmcpOworCWNhc2UgU0dfU0NTSV9SRVNFVDoKKwkJcmV0dXJuIHNjc2lfaW9jdGxfcmVzZXQoc2RldiwgYXJnKTsKIAlkZWZhdWx0OgogCQlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPmlvY3RsKQogCQkJcmV0dXJuIHNkZXYtPmhvc3QtPmhvc3R0LT5pb2N0bChzZGV2LCBjbWQsIGFyZyk7CkBAIC0yODEsNTUgKzI3MCwyMCBAQAogfQogRVhQT1JUX1NZTUJPTChzY3NpX2lvY3RsKTsKIAotLyoqCi0gKiBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bCgpIC0gSGFuZGxlIFNHX1NDU0lfUkVTRVQKLSAqIEBzZGV2OiBzY3NpIGRldmljZSByZWNlaXZpbmcgaW9jdGwKLSAqIEBjbWQ6IE11c3QgYmUgU0NfU0NTSV9SRVNFVAotICogQGFyZzogcG9pbnRlciB0byBpbnQgY29udGFpbmluZyBTR19TQ1NJX1JFU0VUX3tERVZJQ0UsQlVTLEhPU1R9Ci0gKiBAbmRlbGF5OiBmaWxlIG1vZGUgT19OREVMQVkgZmxhZworLyoKKyAqIFdlIGNhbiBwcm9jZXNzIGEgcmVzZXQgZXZlbiB3aGVuIGEgZGV2aWNlIGlzbid0IGZ1bGx5IG9wZXJhYmxlLgogICovCi1pbnQgc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgY21kLAotCQkJICAgIHZvaWQgX191c2VyICphcmcsIGludCBuZGVsYXkpCitpbnQgc2NzaV9pb2N0bF9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGNtZCwKKwkJYm9vbCBuZGVsYXkpCiB7Ci0JaW50IHZhbCwgcmVzdWx0OwotCi0JLyogVGhlIGZpcnN0IHNldCBvZiBpb2N0cyBtYXkgYmUgZXhlY3V0ZWQgZXZlbiBpZiB3ZSdyZSBkb2luZwotCSAqIGVycm9yIHByb2Nlc3NpbmcsIGFzIGxvbmcgYXMgdGhlIGRldmljZSB3YXMgb3BlbmVkCi0JICogbm9uLWJsb2NraW5nICovCi0JaWYgKG5kZWxheSkgeworCWlmIChjbWQgPT0gU0dfU0NTSV9SRVNFVCAmJiBuZGVsYXkpIHsKIAkJaWYgKHNjc2lfaG9zdF9pbl9yZWNvdmVyeShzZGV2LT5ob3N0KSkKKwkJCXJldHVybiAtRUFHQUlOOworCX0gZWxzZSB7CisJCWlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfSBlbHNlIGlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTR19TQ1NJX1JFU0VUOgotCQlyZXN1bHQgPSBnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKTsKLQkJaWYgKHJlc3VsdCkKLQkJCXJldHVybiByZXN1bHQ7Ci0JCWlmICh2YWwgPT0gU0dfU0NTSV9SRVNFVF9OT1RISU5HKQotCQkJcmV0dXJuIDA7Ci0JCXN3aXRjaCAodmFsKSB7Ci0JCWNhc2UgU0dfU0NTSV9SRVNFVF9ERVZJQ0U6Ci0JCQl2YWwgPSBTQ1NJX1RSWV9SRVNFVF9ERVZJQ0U7Ci0JCQlicmVhazsKLQkJY2FzZSBTR19TQ1NJX1JFU0VUX1RBUkdFVDoKLQkJCXZhbCA9IFNDU0lfVFJZX1JFU0VUX1RBUkdFVDsKLQkJCWJyZWFrOwotCQljYXNlIFNHX1NDU0lfUkVTRVRfQlVTOgotCQkJdmFsID0gU0NTSV9UUllfUkVTRVRfQlVTOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0dfU0NTSV9SRVNFVF9IT1NUOgotCQkJdmFsID0gU0NTSV9UUllfUkVTRVRfSE9TVDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8ICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCXJldHVybiAoc2NzaV9yZXNldF9wcm92aWRlcihzZGV2LCB2YWwpID09Ci0JCQlTVUNDRVNTKSA/IDAgOiAtRUlPOwogCX0KLQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChzY3NpX25vbmJsb2NrYWJsZV9pb2N0bCk7CitFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCA1MGE2ZTFhLi43ZTNkOTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsay1tcS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTQ3LDcgKzQ4LDcgQEAKIAltZW1wb29sX3QJKnBvb2w7CiB9OwogCi0jZGVmaW5lIFNQKHgpIHsgeCwgInNncG9vbC0iIF9fc3RyaW5naWZ5KHgpIH0KKyNkZWZpbmUgU1AoeCkgeyAuc2l6ZSA9IHgsICJzZ3Bvb2wtIiBfX3N0cmluZ2lmeSh4KSB9CiAjaWYgKFNDU0lfTUFYX1NHX1NFR01FTlRTIDwgMzIpCiAjZXJyb3IgU0NTSV9NQVhfU0dfU0VHTUVOVFMgaXMgdG9vIHNtYWxsIChtdXN0IGJlIDMyIG9yIGdyZWF0ZXIpCiAjZW5kaWYKQEAgLTU0MiwxNyArNTQzLDYgQEAKIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiB9CiAKLXZvaWQgc2NzaV9uZXh0X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gc2Rldi0+cmVxdWVzdF9xdWV1ZTsKLQotCXNjc2lfcHV0X2NvbW1hbmQoY21kKTsKLQlzY3NpX3J1bl9xdWV1ZShxKTsKLQotCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKLX0KLQogdm9pZCBzY3NpX3J1bl9ob3N0X3F1ZXVlcyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CkBAIC01OTgsMTAgKzU4OCwxMCBAQAogCV9fc2dfZnJlZV90YWJsZSgmc2RiLT50YWJsZSwgU0NTSV9NQVhfU0dfU0VHTUVOVFMsIG1xLCBzY3NpX3NnX2ZyZWUpOwogfQogCi1zdGF0aWMgaW50IHNjc2lfYWxsb2Nfc2d0YWJsZShzdHJ1Y3Qgc2NzaV9kYXRhX2J1ZmZlciAqc2RiLCBpbnQgbmVudHMsCi0JCQkgICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBtcSkKK3N0YXRpYyBpbnQgc2NzaV9hbGxvY19zZ3RhYmxlKHN0cnVjdCBzY3NpX2RhdGFfYnVmZmVyICpzZGIsIGludCBuZW50cywgYm9vbCBtcSkKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmZpcnN0X2NodW5rID0gTlVMTDsKKwlnZnBfdCBnZnBfbWFzayA9IG1xID8gR0ZQX05PSU8gOiBHRlBfQVRPTUlDOwogCWludCByZXQ7CiAKIAlCVUdfT04oIW5lbnRzKTsKQEAgLTczMCw4ICs3MjAsNiBAQAogCQkJa2Jsb2NrZF9zY2hlZHVsZV93b3JrKCZzZGV2LT5yZXF1ZXVlX3dvcmspOwogCQllbHNlCiAJCQlibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZXMocSwgdHJ1ZSk7Ci0KLQkJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTc0Myw5ICs3MzEsMTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAKIAkJc2NzaV9yZWxlYXNlX2J1ZmZlcnMoY21kKTsKLQkJc2NzaV9uZXh0X2NvbW1hbmQoY21kKTsKKworCQlzY3NpX3B1dF9jb21tYW5kKGNtZCk7CisJCXNjc2lfcnVuX3F1ZXVlKHEpOwogCX0KIAorCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTgzMSw4ICs4MjIsOCBAQAogCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBjbWQtPnJlcXVlc3Q7CiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7Ci0JaW50IHNlbnNlX3ZhbGlkID0gMDsKLQlpbnQgc2Vuc2VfZGVmZXJyZWQgPSAwOworCWJvb2wgc2Vuc2VfdmFsaWQgPSBmYWxzZTsKKwlpbnQgc2Vuc2VfZGVmZXJyZWQgPSAwLCBsZXZlbCA9IDA7CiAJZW51bSB7QUNUSU9OX0ZBSUwsIEFDVElPTl9SRVBSRVAsIEFDVElPTl9SRVRSWSwKIAkgICAgICBBQ1RJT05fREVMQVlFRF9SRVRSWX0gYWN0aW9uOwogCXVuc2lnbmVkIGxvbmcgd2FpdF9mb3IgPSAoY21kLT5hbGxvd2VkICsgMSkgKiByZXEtPnRpbWVvdXQ7CkBAIC05MTIsNyArOTAzLDcgQEAKIAkJaWYgKChzc2hkci5hc2MgPT0gMHgwKSAmJiAoc3NoZHIuYXNjcSA9PSAweDFkKSkKIAkJCTsKIAkJZWxzZSBpZiAoIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpCi0JCQlzY3NpX3ByaW50X3NlbnNlKCIiLCBjbWQpOworCQkJc2NzaV9wcmludF9zZW5zZShjbWQpOwogCQlyZXN1bHQgPSAwOwogCQkvKiBCTE9DS19QQyBtYXkgaGF2ZSBzZXQgZXJyb3IgKi8KIAkJZXJyb3IgPSAwOwpAQCAtMTAzOSwxMCArMTAzMCwyNCBAQAogCWNhc2UgQUNUSU9OX0ZBSUw6CiAJCS8qIEdpdmUgdXAgYW5kIGZhaWwgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVxdWVzdCAqLwogCQlpZiAoIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpIHsKLQkJCXNjc2lfcHJpbnRfcmVzdWx0KGNtZCk7Ci0JCQlpZiAoZHJpdmVyX2J5dGUocmVzdWx0KSAmIERSSVZFUl9TRU5TRSkKLQkJCQlzY3NpX3ByaW50X3NlbnNlKCIiLCBjbWQpOwotCQkJc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CisJCQlzdGF0aWMgREVGSU5FX1JBVEVMSU1JVF9TVEFURShfcnMsCisJCQkJCURFRkFVTFRfUkFURUxJTUlUX0lOVEVSVkFMLAorCQkJCQlERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7CisKKwkJCWlmICh1bmxpa2VseShzY3NpX2xvZ2dpbmdfbGV2ZWwpKQorCQkJCWxldmVsID0gU0NTSV9MT0dfTEVWRUwoU0NTSV9MT0dfTUxDT01QTEVURV9TSElGVCwKKwkJCQkJCSAgICAgICBTQ1NJX0xPR19NTENPTVBMRVRFX0JJVFMpOworCisJCQkvKgorCQkJICogaWYgbG9nZ2luZyBpcyBlbmFibGVkIHRoZSBmYWlsdXJlIHdpbGwgYmUgcHJpbnRlZAorCQkJICogaW4gc2NzaV9sb2dfY29tcGxldGlvbigpLCBzbyBhdm9pZCBkdXBsaWNhdGUgbWVzc2FnZXMKKwkJCSAqLworCQkJaWYgKCFsZXZlbCAmJiBfX3JhdGVsaW1pdCgmX3JzKSkgeworCQkJCXNjc2lfcHJpbnRfcmVzdWx0KGNtZCwgTlVMTCwgRkFJTEVEKTsKKwkJCQlpZiAoZHJpdmVyX2J5dGUocmVzdWx0KSAmIERSSVZFUl9TRU5TRSkKKwkJCQkJc2NzaV9wcmludF9zZW5zZShjbWQpOworCQkJCXNjc2lfcHJpbnRfY29tbWFuZChjbWQpOworCQkJfQogCQl9CiAJCWlmICghc2NzaV9lbmRfcmVxdWVzdChyZXEsIGVycm9yLCBibGtfcnFfZXJyX2J5dGVzKHJlcSksIDApKQogCQkJcmV0dXJuOwpAQCAtMTA3Miw4ICsxMDc3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2NzaV9pbml0X3NndGFibGUoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYiwKLQkJCSAgICAgZ2ZwX3QgZ2ZwX21hc2spCitzdGF0aWMgaW50IHNjc2lfaW5pdF9zZ3RhYmxlKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBzY3NpX2RhdGFfYnVmZmVyICpzZGIpCiB7CiAJaW50IGNvdW50OwogCkBAIC0xMDgxLDcgKzEwODUsNyBAQAogCSAqIElmIHNnIHRhYmxlIGFsbG9jYXRpb24gZmFpbHMsIHJlcXVldWUgcmVxdWVzdCBsYXRlci4KIAkgKi8KIAlpZiAodW5saWtlbHkoc2NzaV9hbGxvY19zZ3RhYmxlKHNkYiwgcmVxLT5ucl9waHlzX3NlZ21lbnRzLAotCQkJCQlnZnBfbWFzaywgcmVxLT5tcV9jdHggIT0gTlVMTCkpKQorCQkJCQlyZXEtPm1xX2N0eCAhPSBOVUxMKSkpCiAJCXJldHVybiBCTEtQUkVQX0RFRkVSOwogCiAJLyogCkBAIC0xMTA2LDcgKzExMTAsNyBAQAogICoJCUJMS1BSRVBfREVGRVIgaWYgdGhlIGZhaWx1cmUgaXMgcmV0cnlhYmxlCiAgKgkJQkxLUFJFUF9LSUxMIGlmIHRoZSBmYWlsdXJlIGlzIGZhdGFsCiAgKi8KLWludCBzY3NpX2luaXRfaW8oc3RydWN0IHNjc2lfY21uZCAqY21kLCBnZnBfdCBnZnBfbWFzaykKK2ludCBzY3NpX2luaXRfaW8oc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGNtZC0+cmVxdWVzdDsKQEAgLTExMTUsNyArMTExOSw3IEBACiAKIAlCVUdfT04oIXJxLT5ucl9waHlzX3NlZ21lbnRzKTsKIAotCWVycm9yID0gc2NzaV9pbml0X3NndGFibGUocnEsICZjbWQtPnNkYiwgZ2ZwX21hc2spOworCWVycm9yID0gc2NzaV9pbml0X3NndGFibGUocnEsICZjbWQtPnNkYik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycl9leGl0OwogCkBAIC0xMTMxLDggKzExMzUsNyBAQAogCQkJcnEtPm5leHRfcnEtPnNwZWNpYWwgPSBiaWRpX3NkYjsKIAkJfQogCi0JCWVycm9yID0gc2NzaV9pbml0X3NndGFibGUocnEtPm5leHRfcnEsIHJxLT5uZXh0X3JxLT5zcGVjaWFsLAotCQkJCQkgIEdGUF9BVE9NSUMpOworCQllcnJvciA9IHNjc2lfaW5pdF9zZ3RhYmxlKHJxLT5uZXh0X3JxLCBycS0+bmV4dF9ycS0+c3BlY2lhbCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZXJyX2V4aXQ7CiAJfQpAQCAtMTE0NCw3ICsxMTQ3LDcgQEAKIAkJQlVHX09OKHByb3Rfc2RiID09IE5VTEwpOwogCQlpdmVjcyA9IGJsa19ycV9jb3VudF9pbnRlZ3JpdHlfc2cocnEtPnEsIHJxLT5iaW8pOwogCi0JCWlmIChzY3NpX2FsbG9jX3NndGFibGUocHJvdF9zZGIsIGl2ZWNzLCBnZnBfbWFzaywgaXNfbXEpKSB7CisJCWlmIChzY3NpX2FsbG9jX3NndGFibGUocHJvdF9zZGIsIGl2ZWNzLCBpc19tcSkpIHsKIAkJCWVycm9yID0gQkxLUFJFUF9ERUZFUjsKIAkJCWdvdG8gZXJyX2V4aXQ7CiAJCX0KQEAgLTEyMTMsNyArMTIxNiw3IEBACiAJICogc3VibWl0IGEgcmVxdWVzdCB3aXRob3V0IGFuIGF0dGFjaGVkIGJpby4KIAkgKi8KIAlpZiAocmVxLT5iaW8pIHsKLQkJaW50IHJldCA9IHNjc2lfaW5pdF9pbyhjbWQsIEdGUF9BVE9NSUMpOworCQlpbnQgcmV0ID0gc2NzaV9pbml0X2lvKGNtZCk7CiAJCWlmICh1bmxpa2VseShyZXQpKQogCQkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewpAQCAtMTYzOCw2ICsxNjQxLDg3IEBACiB9CiAKIC8qKgorICogc2NzaV9kaXNwYXRjaF9jb21tYW5kIC0gRGlzcGF0Y2ggYSBjb21tYW5kIHRvIHRoZSBsb3ctbGV2ZWwgZHJpdmVyLgorICogQGNtZDogY29tbWFuZCBibG9jayB3ZSBhcmUgZGlzcGF0Y2hpbmcuCisgKgorICogUmV0dXJuOiBub256ZXJvIHJldHVybiByZXF1ZXN0IHdhcyByZWplY3RlZCBhbmQgZGV2aWNlJ3MgcXVldWUgbmVlZHMgdG8gYmUKKyAqIHBsdWdnZWQuCisgKi8KK3N0YXRpYyBpbnQgc2NzaV9kaXNwYXRjaF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKKwlpbnQgcnRuID0gMDsKKworCWF0b21pY19pbmMoJmNtZC0+ZGV2aWNlLT5pb3JlcXVlc3RfY250KTsKKworCS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgc3RpbGwgdXNhYmxlICovCisJaWYgKHVubGlrZWx5KGNtZC0+ZGV2aWNlLT5zZGV2X3N0YXRlID09IFNERVZfREVMKSkgeworCQkvKiBpbiBTREVWX0RFTCB3ZSBlcnJvciBhbGwgY29tbWFuZHMuIERJRF9OT19DT05ORUNUCisJCSAqIHJldHVybnMgYW4gaW1tZWRpYXRlIGVycm9yIHVwd2FyZHMsIGFuZCBzaWduYWxzCisJCSAqIHRoYXQgdGhlIGRldmljZSBpcyBubyBsb25nZXIgcHJlc2VudCAqLworCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlnb3RvIGRvbmU7CisJfQorCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBzY3NpIGxsZCBtYWRlIHRoaXMgZGV2aWNlIGJsb2NrZWQuICovCisJaWYgKHVubGlrZWx5KHNjc2lfZGV2aWNlX2Jsb2NrZWQoY21kLT5kZXZpY2UpKSkgeworCQkvKgorCQkgKiBpbiBibG9ja2VkIHN0YXRlLCB0aGUgY29tbWFuZCBpcyBqdXN0IHB1dCBiYWNrIG9uCisJCSAqIHRoZSBkZXZpY2UgcXVldWUuICBUaGUgc3VzcGVuZCBzdGF0ZSBoYXMgYWxyZWFkeQorCQkgKiBibG9ja2VkIHRoZSBxdWV1ZSBzbyBmdXR1cmUgcmVxdWVzdHMgc2hvdWxkIG5vdAorCQkgKiBvY2N1ciB1bnRpbCB0aGUgZGV2aWNlIHRyYW5zaXRpb25zIG91dCBvZiB0aGUKKwkJICogc3VzcGVuZCBzdGF0ZS4KKwkJICovCisJCVNDU0lfTE9HX01MUVVFVUUoMywgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkicXVldWVjb21tYW5kIDogZGV2aWNlIGJsb2NrZWRcbiIpKTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWTsKKwl9CisKKwkvKiBTdG9yZSB0aGUgTFVOIHZhbHVlIGluIGNtbmQsIGlmIG5lZWRlZC4gKi8KKwlpZiAoY21kLT5kZXZpY2UtPmx1bl9pbl9jZGIpCisJCWNtZC0+Y21uZFsxXSA9IChjbWQtPmNtbmRbMV0gJiAweDFmKSB8CisJCQkgICAgICAgKGNtZC0+ZGV2aWNlLT5sdW4gPDwgNSAmIDB4ZTApOworCisJc2NzaV9sb2dfc2VuZChjbWQpOworCisJLyoKKwkgKiBCZWZvcmUgd2UgcXVldWUgdGhpcyBjb21tYW5kLCBjaGVjayBpZiB0aGUgY29tbWFuZAorCSAqIGxlbmd0aCBleGNlZWRzIHdoYXQgdGhlIGhvc3QgYWRhcHRlciBjYW4gaGFuZGxlLgorCSAqLworCWlmIChjbWQtPmNtZF9sZW4gPiBjbWQtPmRldmljZS0+aG9zdC0+bWF4X2NtZF9sZW4pIHsKKwkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKKwkJCSAgICAgICAicXVldWVjb21tYW5kIDogY29tbWFuZCB0b28gbG9uZy4gIgorCQkJICAgICAgICJjZGJfc2l6ZT0lZCBob3N0LT5tYXhfY21kX2xlbj0lZFxuIiwKKwkJCSAgICAgICBjbWQtPmNtZF9sZW4sIGNtZC0+ZGV2aWNlLT5ob3N0LT5tYXhfY21kX2xlbikpOworCQljbWQtPnJlc3VsdCA9IChESURfQUJPUlQgPDwgMTYpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHVubGlrZWx5KGhvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX0RFTCkpIHsKKwkJY21kLT5yZXN1bHQgPSAoRElEX05PX0NPTk5FQ1QgPDwgMTYpOworCQlnb3RvIGRvbmU7CisKKwl9CisKKwl0cmFjZV9zY3NpX2Rpc3BhdGNoX2NtZF9zdGFydChjbWQpOworCXJ0biA9IGhvc3QtPmhvc3R0LT5xdWV1ZWNvbW1hbmQoaG9zdCwgY21kKTsKKwlpZiAocnRuKSB7CisJCXRyYWNlX3Njc2lfZGlzcGF0Y2hfY21kX2Vycm9yKGNtZCwgcnRuKTsKKwkJaWYgKHJ0biAhPSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kgJiYKKwkJICAgIHJ0biAhPSBTQ1NJX01MUVVFVUVfVEFSR0VUX0JVU1kpCisJCQlydG4gPSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCisJCVNDU0lfTE9HX01MUVVFVUUoMywgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkicXVldWVjb21tYW5kIDogcmVxdWVzdCByZWplY3RlZFxuIikpOworCX0KKworCXJldHVybiBydG47CisgZG9uZToKKwljbWQtPnNjc2lfZG9uZShjbWQpOworCXJldHVybiAwOworfQorCisvKioKICAqIHNjc2lfZG9uZSAtIEludm9rZSBjb21wbGV0aW9uIG9uIGZpbmlzaGVkIFNDU0kgY29tbWFuZC4KICAqIEBjbWQ6IFRoZSBTQ1NJIENvbW1hbmQgZm9yIHdoaWNoIGEgbG93LWxldmVsIGRldmljZSBkcml2ZXIgKExMREQpIGdpdmVzCiAgKiBvd25lcnNoaXAgYmFjayB0byBTQ1NJIENvcmUgLS0gaS5lLiB0aGUgTExERCBoYXMgZmluaXNoZWQgd2l0aCBpdC4KQEAgLTE3MjUsNyArMTgwOSw3IEBACiAJCSAqIHdlIGFkZCB0aGUgZGV2IHRvIHRoZSBzdGFydmVkIGxpc3Qgc28gaXQgZXZlbnR1YWxseSBnZXRzCiAJCSAqIGEgcnVuIHdoZW4gYSB0YWcgaXMgZnJlZWQuCiAJCSAqLwotCQlpZiAoYmxrX3F1ZXVlX3RhZ2dlZChxKSAmJiAhYmxrX3JxX3RhZ2dlZChyZXEpKSB7CisJCWlmIChibGtfcXVldWVfdGFnZ2VkKHEpICYmICEocmVxLT5jbWRfZmxhZ3MgJiBSRVFfUVVFVUVEKSkgewogCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCWlmIChsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkKIAkJCQlsaXN0X2FkZF90YWlsKCZzZGV2LT5zdGFydmVkX2VudHJ5LApAQCAtMTczOSw2ICsxODIzLDExIEBACiAKIAkJaWYgKCFzY3NpX2hvc3RfcXVldWVfcmVhZHkocSwgc2hvc3QsIHNkZXYpKQogCQkJZ290byBob3N0X25vdF9yZWFkeTsKKwkKKwkJaWYgKHNkZXYtPnNpbXBsZV90YWdzKQorCQkJY21kLT5mbGFncyB8PSBTQ01EX1RBR0dFRDsKKwkJZWxzZQorCQkJY21kLT5mbGFncyAmPSB+U0NNRF9UQUdHRUQ7CiAKIAkJLyoKIAkJICogRmluYWxseSwgaW5pdGlhbGl6ZSBhbnkgZXJyb3IgaGFuZGxpbmcgcGFyYW1ldGVycywgYW5kIHNldCB1cApAQCAtMTg5MywxMCArMTk4MiwxMCBAQAogCQlibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpOwogCX0KIAotCWlmIChibGtfcXVldWVfdGFnZ2VkKHEpKQotCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfUVVFVUVEOworCWlmIChzZGV2LT5zaW1wbGVfdGFncykKKwkJY21kLT5mbGFncyB8PSBTQ01EX1RBR0dFRDsKIAllbHNlCi0JCXJlcS0+Y21kX2ZsYWdzICY9IH5SRVFfUVVFVUVEOworCQljbWQtPmZsYWdzICY9IH5TQ01EX1RBR0dFRDsKIAogCXNjc2lfaW5pdF9jbWRfZXJyaChjbWQpOwogCWNtZC0+c2NzaV9kb25lID0gc2NzaV9tcV9kb25lOwpAQCAtMjA5MSw3ICsyMTgwLDcgQEAKIAogCW1lbXNldCgmc2hvc3QtPnRhZ19zZXQsIDAsIHNpemVvZihzaG9zdC0+dGFnX3NldCkpOwogCXNob3N0LT50YWdfc2V0Lm9wcyA9ICZzY3NpX21xX29wczsKLQlzaG9zdC0+dGFnX3NldC5ucl9od19xdWV1ZXMgPSAxOworCXNob3N0LT50YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IHNob3N0LT5ucl9od19xdWV1ZXMgPyA6IDE7CiAJc2hvc3QtPnRhZ19zZXQucXVldWVfZGVwdGggPSBzaG9zdC0+Y2FuX3F1ZXVlOwogCXNob3N0LT50YWdfc2V0LmNtZF9zaXplID0gY21kX3NpemU7CiAJc2hvc3QtPnRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbG9nZ2luZy5oIGIvZHJpdmVycy9zY3NpL3Njc2lfbG9nZ2luZy5oCmluZGV4IDFmNjUxMzkuLjdmZTY0YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xvZ2dpbmcuaAorKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9sb2dnaW5nLmgKQEAgLTUxLDYgKzUxLDcgQEAKIAkJfSB3aGlsZSAoMCk7CQkJCQlcCiB9IHdoaWxlICgwKQogI2Vsc2UKKyNkZWZpbmUgU0NTSV9MT0dfTEVWRUwoU0hJRlQsIEJJVFMpIDAKICNkZWZpbmUgU0NTSV9DSEVDS19MT0dHSU5HKFNISUZULCBCSVRTLCBMRVZFTCwgQ01EKQogI2VuZGlmIC8qIENPTkZJR19TQ1NJX0xPR0dJTkcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCmluZGV4IDEyYjhlMWIuLjJkYzRhODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAorKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKQEAgLTI5LDcgKzI5LDYgQEAKIGV4dGVybiB2b2lkIHNjc2lfZXhpdF9ob3N0cyh2b2lkKTsKIAogLyogc2NzaS5jICovCi1leHRlcm4gaW50IHNjc2lfZGlzcGF0Y2hfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiBleHRlcm4gaW50IHNjc2lfc2V0dXBfY29tbWFuZF9mcmVlbGlzdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CiBleHRlcm4gdm9pZCBzY3NpX2Rlc3Ryb3lfY29tbWFuZF9mcmVlbGlzdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CiAjaWZkZWYgQ09ORklHX1NDU0lfTE9HR0lORwpAQCAtODQsNyArODMsNiBAQAogZXh0ZXJuIGludCBzY3NpX21heWJlX3VuYmxvY2tfaG9zdChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwogZXh0ZXJuIHZvaWQgc2NzaV9kZXZpY2VfdW5idXN5KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiBleHRlcm4gdm9pZCBzY3NpX3F1ZXVlX2luc2VydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCByZWFzb24pOwotZXh0ZXJuIHZvaWQgc2NzaV9uZXh0X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIGV4dGVybiB2b2lkIHNjc2lfaW9fY29tcGxldGlvbihzdHJ1Y3Qgc2NzaV9jbW5kICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBzY3NpX3J1bl9ob3N0X3F1ZXVlcyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CiBleHRlcm4gc3RydWN0IHJlcXVlc3RfcXVldWUgKnNjc2lfYWxsb2NfcXVldWUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCBiYTNmMWU4Li45ODNhZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC0yODYsNyArMjg2LDEzIEBACiAJfQogCVdBUk5fT05fT05DRSghYmxrX2dldF9xdWV1ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlKSk7CiAJc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVkYXRhID0gc2RldjsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBzZGV2LT5ob3N0LT5jbWRfcGVyX2x1bik7CisKKwlpZiAoIXNob3N0X3VzZV9ibGtfbXEoc2Rldi0+aG9zdCkgJiYKKwkgICAgKHNob3N0LT5icXQgfHwgc2hvc3QtPmhvc3R0LT51c2VfYmxrX3RhZ3MpKSB7CisJCWJsa19xdWV1ZV9pbml0X3RhZ3Moc2Rldi0+cmVxdWVzdF9xdWV1ZSwKKwkJCQkgICAgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4sIHNob3N0LT5icXQpOworCX0KKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBzZGV2LT5ob3N0LT5jbWRfcGVyX2x1bik7CiAKIAlzY3NpX3N5c2ZzX2RldmljZV9pbml0aWFsaXplKHNkZXYpOwogCkBAIC04NzQsOCArODgwLDEwIEBACiAJCQkoaW5xX3Jlc3VsdFszXSAmIDB4MGYpID09IDEgPyAiIENDUyIgOiAiIik7CiAKIAlpZiAoKHNkZXYtPnNjc2lfbGV2ZWwgPj0gU0NTSV8yKSAmJiAoaW5xX3Jlc3VsdFs3XSAmIDIpICYmCi0JICAgICEoKmJmbGFncyAmIEJMSVNUX05PVFEpKQorCSAgICAhKCpiZmxhZ3MgJiBCTElTVF9OT1RRKSkgewogCQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKKwkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAxOworCX0KIAogCS8qCiAJICogU29tZSBkZXZpY2VzIChUZXhlbCBDRCBST00gZHJpdmVzKSBoYXZlIGhhbmRzaGFraW5nIHByb2JsZW1zCkBAIC0xMjE0LDkgKzEyMjIsOSBAQAogCQlzcGFyc2VfbHVuID0gMDsKIAogCS8qCi0JICogSWYgbGVzcyB0aGFuIFNDU0lfMV9DU1MsIGFuZCBubyBzcGVjaWFsIGx1biBzY2FuaW5nLCBzdG9wCisJICogSWYgbGVzcyB0aGFuIFNDU0lfMV9DQ1MsIGFuZCBubyBzcGVjaWFsIGx1biBzY2FubmluZywgc3RvcAogCSAqIHNjYW5uaW5nOyB0aGlzIG1hdGNoZXMgMi40IGJlaGF2aW91ciwgYnV0IGNvdWxkIGp1c3QgYmUgYSBidWcKLQkgKiAodG8gY29udGludWUgc2Nhbm5pbmcgYSBTQ1NJXzFfQ1NTIGRldmljZSkuCisJICogKHRvIGNvbnRpbnVlIHNjYW5uaW5nIGEgU0NTSV8xX0NDUyBkZXZpY2UpLgogCSAqCiAJICogVGhpcyB0ZXN0IGlzIGJyb2tlbi4gIFdlIG1pZ2h0IG5vdCBoYXZlIGFueSBkZXZpY2Ugb24gbHVuMCBmb3IKIAkgKiBhIHNwYXJzZWx1biBkZXZpY2UsIGFuZCBpZiB0aGF0J3MgdGhlIGNhc2UgdGhlbiBob3cgd291bGQgd2UKQEAgLTE1ODUsMTYgKzE1OTMsMTUgQEAKIAogdm9pZCBzY3NpX3Jlc2Nhbl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzY3NpX2RyaXZlciAqZHJ2OwotCQogCWlmICghZGV2LT5kcml2ZXIpCiAJCXJldHVybjsKIAotCWRydiA9IHRvX3Njc2lfZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlpZiAodHJ5X21vZHVsZV9nZXQoZHJ2LT5vd25lcikpIHsKKwlpZiAodHJ5X21vZHVsZV9nZXQoZGV2LT5kcml2ZXItPm93bmVyKSkgeworCQlzdHJ1Y3Qgc2NzaV9kcml2ZXIgKmRydiA9IHRvX3Njc2lfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwogCQlpZiAoZHJ2LT5yZXNjYW4pCiAJCQlkcnYtPnJlc2NhbihkZXYpOwotCQltb2R1bGVfcHV0KGRydi0+b3duZXIpOworCQltb2R1bGVfcHV0KGRldi0+ZHJpdmVyLT5vd25lcik7CiAJfQogfQogRVhQT1JUX1NZTUJPTChzY3NpX3Jlc2Nhbl9kZXZpY2UpOwpAQCAtMTcyNyw3ICsxNzM0LDcgQEAKIAogCWlmICgoKGNoYW5uZWwgIT0gU0NBTl9XSUxEX0NBUkQpICYmIChjaGFubmVsID4gc2hvc3QtPm1heF9jaGFubmVsKSkgfHwKIAkgICAgKChpZCAhPSBTQ0FOX1dJTERfQ0FSRCkgJiYgKGlkID49IHNob3N0LT5tYXhfaWQpKSB8fAotCSAgICAoKGx1biAhPSBTQ0FOX1dJTERfQ0FSRCkgJiYgKGx1biA+IHNob3N0LT5tYXhfbHVuKSkpCisJICAgICgobHVuICE9IFNDQU5fV0lMRF9DQVJEKSAmJiAobHVuID49IHNob3N0LT5tYXhfbHVuKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmc2hvc3QtPnNjYW5fbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggZjRjYjdiMy4uMWNiNjRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC03MjcsOSArNzI3LDcgQEAKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwogCWNvbnN0IGNoYXIgKm5hbWUgPSAibm9uZSI7CiAKLQlpZiAoc2Rldi0+b3JkZXJlZF90YWdzKQotCQluYW1lID0gIm9yZGVyZWQiOwotCWVsc2UgaWYgKHNkZXYtPnNpbXBsZV90YWdzKQorCWlmIChzZGV2LT5zaW1wbGVfdGFncykKIAkJbmFtZSA9ICJzaW1wbGUiOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIlc1xuIiwgbmFtZSk7CkBAIC03NDcsOSArNzQ1LDEyIEBACiAJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkIHx8ICFzaHQtPmNoYW5nZV9xdWV1ZV90eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChzdHJuY21wKGJ1ZiwgIm9yZGVyZWQiLCA3KSA9PSAwKQotCQl0YWdfdHlwZSA9IE1TR19PUkRFUkVEX1RBRzsKLQllbHNlIGlmIChzdHJuY21wKGJ1ZiwgInNpbXBsZSIsIDYpID09IDApCisJLyoKKwkgKiBXZSdyZSBuZXZlciBpc3N1ZWluZyBvcmRlciB0YWdzIHRoZXNlIGRheXMsIGJ1dCBhbGxvdyB0aGUgdmFsdWUKKwkgKiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisJICovCisJaWYgKHN0cm5jbXAoYnVmLCAib3JkZXJlZCIsIDcpID09IDAgfHwKKwkgICAgc3RybmNtcChidWYsICJzaW1wbGUiLCA2KSA9PSAwKQogCQl0YWdfdHlwZSA9IE1TR19TSU1QTEVfVEFHOwogCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAibm9uZSIsIDQpICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODc2LDExICs4NzcsMTAgQEAKIAogCWRlcHRoID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAotCWlmIChkZXB0aCA8IDEpCisJaWYgKGRlcHRoIDwgMSB8fCBkZXB0aCA+IHNodC0+Y2FuX3F1ZXVlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHZhbCA9IHNodC0+Y2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoLAotCQkJCQkgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJcmV0dmFsID0gc2h0LT5jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgZGVwdGgpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFjZS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhY2UuYwppbmRleCA1MDM1OTRlLi44MmFmMjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFjZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYWNlLmMKQEAgLTI3OCw3ICsyNzgsNyBAQAogCQlyZXR1cm4gc2NzaV90cmFjZV9ydzE2KHAsIGNkYiwgbGVuKTsKIAljYXNlIFVOTUFQOgogCQlyZXR1cm4gc2NzaV90cmFjZV91bm1hcChwLCBjZGIsIGxlbik7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlyZXR1cm4gc2NzaV90cmFjZV9zZXJ2aWNlX2FjdGlvbl9pbihwLCBjZGIsIGxlbik7CiAJY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgogCQlyZXR1cm4gc2NzaV90cmFjZV92YXJsZW4ocCwgY2RiLCBsZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCmluZGV4IGNmMDgwNzEuLmZhMmFlY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oPgogCkBAIC0xMjA3LDYgKzEyMDgsMjggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNwaV9wb3B1bGF0ZV9wcHJfbXNnKTsKIAorLyoqCisgKiBzcGlfcG9wdWxhdGVfdGFnX21zZyAtIHBsYWNlIGEgdGFnIG1lc3NhZ2UgaW4gYSBidWZmZXIKKyAqIEBtc2c6CXBvaW50ZXIgdG8gdGhlIGFyZWEgdG8gcGxhY2UgdGhlIHRhZworICogQGNtZDoJcG9pbnRlciB0byB0aGUgc2NzaSBjb21tYW5kIGZvciB0aGUgdGFnCisgKgorICogTm90ZXM6CisgKglkZXNpZ25lZCB0byBjcmVhdGUgdGhlIGNvcnJlY3QgdHlwZSBvZiB0YWcgbWVzc2FnZSBmb3IgdGhlIAorICoJcGFydGljdWxhciByZXF1ZXN0LiAgUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdGFnIG1lc3NhZ2UuCisgKglNYXkgcmV0dXJuIDAgaWYgVENRIGlzIGRpc2FibGVkIGZvciB0aGlzIGRldmljZS4KKyAqKi8KK2ludCBzcGlfcG9wdWxhdGVfdGFnX21zZyh1bnNpZ25lZCBjaGFyICptc2csIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKyAgICAgICAgaWYgKGNtZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkgeworCQkqbXNnKysgPSBNU0dfU0lNUExFX1RBRzsKKyAgICAgICAgCSptc2crKyA9IGNtZC0+cmVxdWVzdC0+dGFnOworICAgICAgICAJcmV0dXJuIDI7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzcGlfcG9wdWxhdGVfdGFnX21zZyk7CisKICNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgb25lX2J5dGVfbXNnc1tdID0gewogLyogMHgwMCAqLyAiVGFzayBDb21wbGV0ZSIsIE5VTEwgLyogRXh0ZW5kZWQgTWVzc2FnZSAqLywgIlNhdmUgUG9pbnRlcnMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2ljYW0uYyBiL2RyaXZlcnMvc2NzaS9zY3NpY2FtLmMKaW5kZXggOTJkMjRkNi4uOTEwZjRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2ljYW0uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaWNhbS5jCkBAIC0xNjMsOCArMTYzLDggQEAKIAkJICAgIGVuZF9oZWFkICogZW5kX3NlY3RvciArIGVuZF9zZWN0b3I7CiAKIAkJLyogVGhpcyBpcyB0aGUgYWN0dWFsIF9zZWN0b3JfIG51bWJlciBhdCB0aGUgZW5kICovCi0JCWxvZ2ljYWxfZW5kID0gZ2V0X3VuYWxpZ25lZCgmbGFyZ2VzdC0+c3RhcnRfc2VjdCkKLQkJICAgICsgZ2V0X3VuYWxpZ25lZCgmbGFyZ2VzdC0+bnJfc2VjdHMpOworCQlsb2dpY2FsX2VuZCA9IGdldF91bmFsaWduZWRfbGUzMigmbGFyZ2VzdC0+c3RhcnRfc2VjdCkKKwkJICAgICsgZ2V0X3VuYWxpZ25lZF9sZTMyKCZsYXJnZXN0LT5ucl9zZWN0cyk7CiAKIAkJLyogVGhpcyBpcyBmb3IgPjEwMjMgY3lsaW5kZXJzICovCiAJCWV4dF9jeWwgPSAobG9naWNhbF9lbmQgLSAoZW5kX2hlYWQgKiBlbmRfc2VjdG9yICsgZW5kX3NlY3RvcikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IGNmYmE3NGMuLmZlZGFiM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIHN0YXRpYyB2b2lkIHNkX3JlYWRfY2FwYWNpdHkoc3RydWN0IHNjc2lfZGlzayAqc2RrcCwgdW5zaWduZWQgY2hhciAqYnVmZmVyKTsKIHN0YXRpYyB2b2lkIHNjc2lfZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmNkZXYpOwogc3RhdGljIHZvaWQgc2RfcHJpbnRfc2Vuc2VfaGRyKHN0cnVjdCBzY3NpX2Rpc2sgKiwgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOwotc3RhdGljIHZvaWQgc2RfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2Rpc2sgKiwgaW50KTsKK3N0YXRpYyB2b2lkIHNkX3ByaW50X3Jlc3VsdChjb25zdCBzdHJ1Y3Qgc2NzaV9kaXNrICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhzZF9pbmRleF9sb2NrKTsKIHN0YXRpYyBERUZJTkVfSURBKHNkX2luZGV4X2lkYSk7CkBAIC01MTAsOSArNTEwLDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kcml2ZXIgc2RfdGVtcGxhdGUgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZ2VuZHJ2ID0gewogCQkubmFtZQkJPSAic2QiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wcm9iZQkJPSBzZF9wcm9iZSwKIAkJLnJlbW92ZQkJPSBzZF9yZW1vdmUsCiAJCS5zaHV0ZG93bgk9IHNkX3NodXRkb3duLApAQCAtNjU2LDcgKzY1Niw3IEBACiAJdW5zaWduZWQgaW50IGxvZ2ljYWxfYmxvY2tfc2l6ZSA9IHNka3AtPmRldmljZS0+c2VjdG9yX3NpemU7CiAJdW5zaWduZWQgaW50IG1heF9ibG9ja3MgPSAwOwogCi0JcS0+bGltaXRzLmRpc2NhcmRfemVyb2VzX2RhdGEgPSBzZGtwLT5sYnByejsKKwlxLT5saW1pdHMuZGlzY2FyZF96ZXJvZXNfZGF0YSA9IDA7CiAJcS0+bGltaXRzLmRpc2NhcmRfYWxpZ25tZW50ID0gc2RrcC0+dW5tYXBfYWxpZ25tZW50ICoKIAkJbG9naWNhbF9ibG9ja19zaXplOwogCXEtPmxpbWl0cy5kaXNjYXJkX2dyYW51bGFyaXR5ID0KQEAgLTY4MCwxMSArNjgwLDEzIEBACiAJY2FzZSBTRF9MQlBfV1MxNjoKIAkJbWF4X2Jsb2NrcyA9IG1pbl9ub3RfemVybyhzZGtwLT5tYXhfd3NfYmxvY2tzLAogCQkJCQkgICh1MzIpU0RfTUFYX1dTMTZfQkxPQ0tTKTsKKwkJcS0+bGltaXRzLmRpc2NhcmRfemVyb2VzX2RhdGEgPSBzZGtwLT5sYnByejsKIAkJYnJlYWs7CiAKIAljYXNlIFNEX0xCUF9XUzEwOgogCQltYXhfYmxvY2tzID0gbWluX25vdF96ZXJvKHNka3AtPm1heF93c19ibG9ja3MsCiAJCQkJCSAgKHUzMilTRF9NQVhfV1MxMF9CTE9DS1MpOworCQlxLT5saW1pdHMuZGlzY2FyZF96ZXJvZXNfZGF0YSA9IHNka3AtPmxicHJ6OwogCQlicmVhazsKIAogCWNhc2UgU0RfTEJQX1pFUk86CkBAIC03ODQsNyArNzg2LDcgQEAKIAkgKiBhbW91bnQgb2YgYmxvY2tzIGRlc2NyaWJlZCBieSB0aGUgcmVxdWVzdC4KIAkgKi8KIAlibGtfYWRkX3JlcXVlc3RfcGF5bG9hZChycSwgcGFnZSwgbGVuKTsKLQlyZXQgPSBzY3NpX2luaXRfaW8oY21kLCBHRlBfQVRPTUlDKTsKKwlyZXQgPSBzY3NpX2luaXRfaW8oY21kKTsKIAlycS0+X19kYXRhX2xlbiA9IG5yX2J5dGVzOwogCiBvdXQ6CkBAIC04NzgsNyArODgwLDcgQEAKIAkgKiBrbm93cyBob3cgbXVjaCB0byBhY3R1YWxseSB3cml0ZS4KIAkgKi8KIAlycS0+X19kYXRhX2xlbiA9IHNkcC0+c2VjdG9yX3NpemU7Ci0JcmV0ID0gc2NzaV9pbml0X2lvKGNtZCwgR0ZQX0FUT01JQyk7CisJcmV0ID0gc2NzaV9pbml0X2lvKGNtZCk7CiAJcnEtPl9fZGF0YV9sZW4gPSBucl9ieXRlczsKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTEyLDcgKzkxNCw3IEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIHByb3RlY3Q7CiAKLQlyZXQgPSBzY3NpX2luaXRfaW8oU0NwbnQsIEdGUF9BVE9NSUMpOworCXJldCA9IHNjc2lfaW5pdF9pbyhTQ3BudCk7CiAJaWYgKHJldCAhPSBCTEtQUkVQX09LKQogCQlnb3RvIG91dDsKIAlTQ3BudCA9IHJxLT5zcGVjaWFsOwpAQCAtMTMzNCw5ICsxMzM2LDkgQEAKIAkgKiBtYXkgdHJ5IGFuZCB0YWtlIHRoZSBkZXZpY2Ugb2ZmbGluZSwgaW4gd2hpY2ggY2FzZSBhbGwgZnVydGhlcgogCSAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHByb2hpYml0ZWQuCiAJICovCi0JZXJyb3IgPSBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzZHAsIGNtZCwgcCwKLQkJCQkJKG1vZGUgJiBGTU9ERV9OREVMQVkpICE9IDApOwotCWlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkcCkgfHwgIWVycm9yKQorCWVycm9yID0gc2NzaV9pb2N0bF9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkcCwgY21kLAorCQkJKG1vZGUgJiBGTU9ERV9OREVMQVkpICE9IDApOworCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKIAkvKgpAQCAtMTQ5Miw3ICsxNDk0LDcgQEAKIAl9CiAKIAlpZiAocmVzKSB7Ci0JCXNkX3ByaW50X3Jlc3VsdChzZGtwLCByZXMpOworCQlzZF9wcmludF9yZXN1bHQoc2RrcCwgIlN5bmNocm9uaXplIENhY2hlKDEwKSBmYWlsZWQiLCByZXMpOwogCiAJCWlmIChkcml2ZXJfYnl0ZShyZXMpICYgRFJJVkVSX1NFTlNFKQogCQkJc2RfcHJpbnRfc2Vuc2VfaGRyKHNka3AsICZzc2hkcik7CkBAIC0xNTQxLDMxICsxNTQzLDE5IEBACiAJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBzY3NpX2Rpc2soYmRldi0+YmRfZGlzayktPmRldmljZTsKLQlpbnQgcmV0OworCWludCBlcnJvcjsKIAotCXJldCA9IHNjc2lfdmVyaWZ5X2Jsa19pb2N0bChiZGV2LCBjbWQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBlcnJvciByZWNvdmVyeSwgZG9uJ3QgbGV0IGFueW9uZQotCSAqIGVsc2UgdHJ5IGFuZCB1c2UgdGhpcyBkZXZpY2UuICBBbHNvLCBpZiBlcnJvciByZWNvdmVyeSBmYWlscywgaXQKLQkgKiBtYXkgdHJ5IGFuZCB0YWtlIHRoZSBkZXZpY2Ugb2ZmbGluZSwgaW4gd2hpY2ggY2FzZSBhbGwgZnVydGhlcgotCSAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHByb2hpYml0ZWQuCi0JICovCi0JaWYgKCFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RldikpCi0JCXJldHVybiAtRU5PREVWOworCWVycm9yID0gc2NzaV9pb2N0bF9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYsIGNtZCwKKwkJCShtb2RlICYgRk1PREVfTkRFTEFZKSAhPSAwKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAkgICAgICAgCi0JaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5jb21wYXRfaW9jdGwpIHsKLQkJcmV0ID0gc2Rldi0+aG9zdC0+aG9zdHQtPmNvbXBhdF9pb2N0bChzZGV2LCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci0KLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAkvKiAKIAkgKiBMZXQgdGhlIHN0YXRpYyBpb2N0bCB0cmFuc2xhdGlvbiB0YWJsZSB0YWtlIGNhcmUgb2YgaXQuCiAJICovCi0JcmV0dXJuIC1FTk9JT0NUTENNRDsgCisJaWYgKCFzZGV2LT5ob3N0LT5ob3N0dC0+Y29tcGF0X2lvY3RsKQorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOyAKKwlyZXR1cm4gc2Rldi0+aG9zdC0+aG9zdHQtPmNvbXBhdF9pb2N0bChzZGV2LCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CiB9CiAjZW5kaWYKIApAQCAtMTcxMywxNyArMTcwMyw2IEBACiAJCWlmIChzZW5zZV92YWxpZCkKIAkJCXNlbnNlX2RlZmVycmVkID0gc2NzaV9zZW5zZV9pc19kZWZlcnJlZCgmc3NoZHIpOwogCX0KLSNpZmRlZiBDT05GSUdfU0NTSV9MT0dHSU5HCi0JU0NTSV9MT0dfSExDT01QTEVURSgxLCBzY3NpX3ByaW50X3Jlc3VsdChTQ3BudCkpOwotCWlmIChzZW5zZV92YWxpZCkgewotCQlTQ1NJX0xPR19ITENPTVBMRVRFKDEsIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsCi0JCQkJCQkgICAic2RfZG9uZTogc2JbcmVzcGMsc2ssYXNjLCIKLQkJCQkJCSAgICJhc2NxXT0leCwleCwleCwleFxuIiwKLQkJCQkJCSAgIHNzaGRyLnJlc3BvbnNlX2NvZGUsCi0JCQkJCQkgICBzc2hkci5zZW5zZV9rZXksIHNzaGRyLmFzYywKLQkJCQkJCSAgIHNzaGRyLmFzY3EpKTsKLQl9Ci0jZW5kaWYKIAlzZGtwLT5tZWRpdW1fYWNjZXNzX3RpbWVkX291dCA9IDA7CiAKIAlpZiAoZHJpdmVyX2J5dGUocmVzdWx0KSAhPSBEUklWRVJfU0VOU0UgJiYKQEAgLTE3NDMsNyArMTcyMiw2IEBACiAJCSAqIHVua25vd24gYW1vdW50IG9mIGRhdGEgd2FzIHRyYW5zZmVycmVkIHNvIHRyZWF0IGl0IGFzIGFuCiAJCSAqIGVycm9yLgogCQkgKi8KLQkJc2NzaV9wcmludF9zZW5zZSgic2QiLCBTQ3BudCk7CiAJCVNDcG50LT5yZXN1bHQgPSAwOwogCQltZW1zZXQoU0NwbnQtPnNlbnNlX2J1ZmZlciwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKIAkJYnJlYWs7CkBAIC0xNzc5LDYgKzE3NTcsMTAgQEAKIAkJYnJlYWs7CiAJfQogIG91dDoKKwlTQ1NJX0xPR19ITENPTVBMRVRFKDEsIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsCisJCQkJCSAgICJzZF9kb25lOiBjb21wbGV0ZWQgJWQgb2YgJWQgYnl0ZXNcbiIsCisJCQkJCSAgIGdvb2RfYnl0ZXMsIHNjc2lfYnVmZmxlbihTQ3BudCkpKTsKKwogCWlmIChycV9kYXRhX2RpcihTQ3BudC0+cmVxdWVzdCkgPT0gUkVBRCAmJiBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKQogCQlzZF9kaWZfY29tcGxldGUoU0NwbnQsIGdvb2RfYnl0ZXMpOwogCkBAIC0xODM0LDEyICsxODE2LDEyIEBACiAJCQkvKiBubyBzZW5zZSwgVFVSIGVpdGhlciBzdWNjZWVkZWQgb3IgZmFpbGVkCiAJCQkgKiB3aXRoIGEgc3RhdHVzIGVycm9yICovCiAJCQlpZighc3BpbnRpbWUgJiYgIXNjc2lfc3RhdHVzX2lzX2dvb2QodGhlX3Jlc3VsdCkpIHsKLQkJCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJVbml0IE5vdCBSZWFkeVxuIik7Ci0JCQkJc2RfcHJpbnRfcmVzdWx0KHNka3AsIHRoZV9yZXN1bHQpOworCQkJCXNkX3ByaW50X3Jlc3VsdChzZGtwLCAiVGVzdCBVbml0IFJlYWR5IGZhaWxlZCIsCisJCQkJCQl0aGVfcmVzdWx0KTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9Ci0JCQkJCQorCiAJCS8qCiAJCSAqIFRoZSBkZXZpY2UgZG9lcyBub3Qgd2FudCB0aGUgYXV0b21hdGljIHN0YXJ0IHRvIGJlIGlzc3VlZC4KIAkJICovCkBAIC0xOTU1LDcgKzE5MzcsNiBAQAogCQkJc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkciwgaW50IHNlbnNlX3ZhbGlkLAogCQkJaW50IHRoZV9yZXN1bHQpCiB7Ci0Jc2RfcHJpbnRfcmVzdWx0KHNka3AsIHRoZV9yZXN1bHQpOwogCWlmIChkcml2ZXJfYnl0ZSh0aGVfcmVzdWx0KSAmIERSSVZFUl9TRU5TRSkKIAkJc2RfcHJpbnRfc2Vuc2VfaGRyKHNka3AsIHNzaGRyKTsKIAllbHNlCkBAIC0yMDAxLDcgKzE5ODIsNyBAQAogCiAJZG8gewogCQltZW1zZXQoY21kLCAwLCAxNik7Ci0JCWNtZFswXSA9IFNFUlZJQ0VfQUNUSU9OX0lOOworCQljbWRbMF0gPSBTRVJWSUNFX0FDVElPTl9JTl8xNjsKIAkJY21kWzFdID0gU0FJX1JFQURfQ0FQQUNJVFlfMTY7CiAJCWNtZFsxM10gPSBSQzE2X0xFTjsKIAkJbWVtc2V0KGJ1ZmZlciwgMCwgUkMxNl9MRU4pOwpAQCAtMjAzNiw3ICsyMDE3LDcgQEAKIAl9IHdoaWxlICh0aGVfcmVzdWx0ICYmIHJldHJpZXMpOwogCiAJaWYgKHRoZV9yZXN1bHQpIHsKLQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiUkVBRCBDQVBBQ0lUWSgxNikgZmFpbGVkXG4iKTsKKwkJc2RfcHJpbnRfcmVzdWx0KHNka3AsICJSZWFkIENhcGFjaXR5KDE2KSBmYWlsZWQiLCB0aGVfcmVzdWx0KTsKIAkJcmVhZF9jYXBhY2l0eV9lcnJvcihzZGtwLCBzZHAsICZzc2hkciwgc2Vuc2VfdmFsaWQsIHRoZV9yZXN1bHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMTE4LDcgKzIwOTksNyBAQAogCX0gd2hpbGUgKHRoZV9yZXN1bHQgJiYgcmV0cmllcyk7CiAKIAlpZiAodGhlX3Jlc3VsdCkgewotCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJSRUFEIENBUEFDSVRZIGZhaWxlZFxuIik7CisJCXNkX3ByaW50X3Jlc3VsdChzZGtwLCAiUmVhZCBDYXBhY2l0eSgxMCkgZmFpbGVkIiwgdGhlX3Jlc3VsdCk7CiAJCXJlYWRfY2FwYWNpdHlfZXJyb3Ioc2RrcCwgc2RwLCAmc3NoZHIsIHNlbnNlX3ZhbGlkLCB0aGVfcmVzdWx0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjY0MywxMiArMjYyNCwxMiBAQAogCiAJCX0gZWxzZSB7CS8qIExCUCBWUEQgcGFnZSB0ZWxscyB1cyB3aGF0IHRvIHVzZSAqLwogCi0JCQlpZiAoc2RrcC0+bGJwdSAmJiBzZGtwLT5tYXhfdW5tYXBfYmxvY2tzKQotCQkJCXNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFNEX0xCUF9VTk1BUCk7Ci0JCQllbHNlIGlmIChzZGtwLT5sYnB3cykKKwkJCWlmIChzZGtwLT5sYnB3cykKIAkJCQlzZF9jb25maWdfZGlzY2FyZChzZGtwLCBTRF9MQlBfV1MxNik7CiAJCQllbHNlIGlmIChzZGtwLT5sYnB3czEwKQogCQkJCXNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFNEX0xCUF9XUzEwKTsKKwkJCWVsc2UgaWYgKHNka3AtPmxicHUgJiYgc2RrcC0+bWF4X3VubWFwX2Jsb2NrcykKKwkJCQlzZF9jb25maWdfZGlzY2FyZChzZGtwLCBTRF9MQlBfVU5NQVApOwogCQkJZWxzZQogCQkJCXNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFNEX0xCUF9ESVNBQkxFKTsKIAkJfQpAQCAtMzE0Miw4ICszMTIzLDcgQEAKIAlyZXMgPSBzY3NpX2V4ZWN1dGVfcmVxX2ZsYWdzKHNkcCwgY21kLCBETUFfTk9ORSwgTlVMTCwgMCwgJnNzaGRyLAogCQkJICAgICAgIFNEX1RJTUVPVVQsIFNEX01BWF9SRVRSSUVTLCBOVUxMLCBSRVFfUE0pOwogCWlmIChyZXMpIHsKLQkJc2RfcHJpbnRrKEtFUk5fV0FSTklORywgc2RrcCwgIlNUQVJUX1NUT1AgRkFJTEVEXG4iKTsKLQkJc2RfcHJpbnRfcmVzdWx0KHNka3AsIHJlcyk7CisJCXNkX3ByaW50X3Jlc3VsdChzZGtwLCAiU3RhcnQvU3RvcCBVbml0IGZhaWxlZCIsIHJlcyk7CiAJCWlmIChkcml2ZXJfYnl0ZShyZXMpICYgRFJJVkVSX1NFTlNFKQogCQkJc2RfcHJpbnRfc2Vuc2VfaGRyKHNka3AsICZzc2hkcik7CiAJCWlmIChzY3NpX3NlbnNlX3ZhbGlkKCZzc2hkcikgJiYKQEAgLTMzMzcsMTUgKzMzMTcsMjcgQEAKIHN0YXRpYyB2b2lkIHNkX3ByaW50X3NlbnNlX2hkcihzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLAogCQkJICAgICAgIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCiB7Ci0Jc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwgIiAiKTsKLQlzY3NpX3Nob3dfc2Vuc2VfaGRyKHNzaGRyKTsKLQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAiICIpOwotCXNjc2lfc2hvd19leHRkX3NlbnNlKHNzaGRyLT5hc2MsIHNzaGRyLT5hc2NxKTsKKwlzY3NpX3Nob3dfc2Vuc2VfaGRyKHNka3AtPmRldmljZSwKKwkJCSAgICBzZGtwLT5kaXNrID8gc2RrcC0+ZGlzay0+ZGlza19uYW1lIDogTlVMTCwgc3NoZHIpOworCXNjc2lfc2hvd19leHRkX3NlbnNlKHNka3AtPmRldmljZSwKKwkJCSAgICAgc2RrcC0+ZGlzayA/IHNka3AtPmRpc2stPmRpc2tfbmFtZSA6IE5VTEwsCisJCQkgICAgIHNzaGRyLT5hc2MsIHNzaGRyLT5hc2NxKTsKIH0KIAotc3RhdGljIHZvaWQgc2RfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIGludCByZXN1bHQpCitzdGF0aWMgdm9pZCBzZF9wcmludF9yZXN1bHQoY29uc3Qgc3RydWN0IHNjc2lfZGlzayAqc2RrcCwgY29uc3QgY2hhciAqbXNnLAorCQkJICAgIGludCByZXN1bHQpCiB7Ci0Jc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwgIiAiKTsKLQlzY3NpX3Nob3dfcmVzdWx0KHJlc3VsdCk7CisJY29uc3QgY2hhciAqaGJfc3RyaW5nID0gc2NzaV9ob3N0Ynl0ZV9zdHJpbmcocmVzdWx0KTsKKwljb25zdCBjaGFyICpkYl9zdHJpbmcgPSBzY3NpX2RyaXZlcmJ5dGVfc3RyaW5nKHJlc3VsdCk7CisKKwlpZiAoaGJfc3RyaW5nIHx8IGRiX3N0cmluZykKKwkJc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwKKwkJCSAgIiVzOiBSZXN1bHQ6IGhvc3RieXRlPSVzIGRyaXZlcmJ5dGU9JXNcbiIsIG1zZywKKwkJCSAgaGJfc3RyaW5nID8gaGJfc3RyaW5nIDogImludmFsaWQiLAorCQkJICBkYl9zdHJpbmcgPyBkYl9zdHJpbmcgOiAiaW52YWxpZCIpOworCWVsc2UKKwkJc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwKKwkJCSAgIiVzOiBSZXN1bHQ6IGhvc3RieXRlPTB4JTAyeCBkcml2ZXJieXRlPTB4JTAyeFxuIiwKKwkJCSAgbXNnLCBob3N0X2J5dGUocmVzdWx0KSwgZHJpdmVyX2J5dGUocmVzdWx0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5oIGIvZHJpdmVycy9zY3NpL3NkLmgKaW5kZXggNDY3Mzc3OC4uNjNiYTVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmgKKysrIGIvZHJpdmVycy9zY3NpL3NkLmgKQEAgLTEwMyw5ICsxMDMsOSBAQAogCiAjZGVmaW5lIHNkX3ByaW50ayhwcmVmaXgsIHNkc2ssIGZtdCwgYS4uLikJCQkJXAogICAgICAgICAoc2RzayktPmRpc2sgPwkJCQkJCQlcCi0Jc2Rldl9wcmludGsocHJlZml4LCAoc2RzayktPmRldmljZSwgIlslc10gIiBmbXQsCQlcCi0JCSAgICAoc2RzayktPmRpc2stPmRpc2tfbmFtZSwgIyNhKSA6CQkJXAotCXNkZXZfcHJpbnRrKHByZWZpeCwgKHNkc2spLT5kZXZpY2UsIGZtdCwgIyNhKQorCSAgICAgIHNkZXZfcHJlZml4X3ByaW50ayhwcmVmaXgsIChzZHNrKS0+ZGV2aWNlLAkJXAorCQkJCSAoc2RzayktPmRpc2stPmRpc2tfbmFtZSwgZm10LCAjI2EpIDoJXAorCSAgICAgIHNkZXZfcHJpbnRrKHByZWZpeCwgKHNkc2spLT5kZXZpY2UsIGZtdCwgIyNhKQogCiAjZGVmaW5lIHNkX2ZpcnN0X3ByaW50ayhwcmVmaXgsIHNkc2ssIGZtdCwgYS4uLikJCQlcCiAJZG8gewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Nlcy5jIGIvZHJpdmVycy9zY3NpL3Nlcy5jCmluZGV4IDgwYmZlY2UuLmI3ZTc5ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2VzLmMKQEAgLTY5Myw5ICs2OTMsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2RyaXZlciBzZXNfdGVtcGxhdGUgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZ2VuZHJ2ID0gewogCQkubmFtZQkJPSAic2VzIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucHJvYmUJCT0gc2VzX3Byb2JlLAogCQkucmVtb3ZlCQk9IHNlc19yZW1vdmUsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNjAzNTQ0NC4uYjE0ZjY0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTIxOSw4ICsyMTksOCBAQAogI2RlZmluZSBTWl9TR19SRVFfSU5GTyBzaXplb2Yoc2dfcmVxX2luZm9fdCkKIAogI2RlZmluZSBzZ19wcmludGsocHJlZml4LCBzZHAsIGZtdCwgYS4uLikgXAotCXNkZXZfcHJpbnRrKHByZWZpeCwgKHNkcCktPmRldmljZSwgIlslc10gIiBmbXQsIFwKLQkJICAgIChzZHApLT5kaXNrLT5kaXNrX25hbWUsICMjYSkKKwlzZGV2X3ByZWZpeF9wcmludGsocHJlZml4LCAoc2RwKS0+ZGV2aWNlLAkJXAorCQkJICAgKHNkcCktPmRpc2stPmRpc2tfbmFtZSwgZm10LCAjI2EpCiAKIHN0YXRpYyBpbnQgc2dfYWxsb3dfYWNjZXNzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBjaGFyICpjbWQpCiB7CkBAIC0xMDcxLDM5ICsxMDcxLDYgQEAKIAkJaWYgKGF0b21pY19yZWFkKCZzZHAtPmRldGFjaGluZykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJcmV0dXJuIHB1dF91c2VyKHNkcC0+ZGV2aWNlLT5ob3N0LT5ob3N0dC0+ZW11bGF0ZWQsIGlwKTsKLQljYXNlIFNHX1NDU0lfUkVTRVQ6Ci0JCWlmIChhdG9taWNfcmVhZCgmc2RwLT5kZXRhY2hpbmcpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJaWYgKHNjc2lfaG9zdF9pbl9yZWNvdmVyeShzZHAtPmRldmljZS0+aG9zdCkpCi0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJfSBlbHNlIGlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkcC0+ZGV2aWNlKSkKLQkJCXJldHVybiAtRUJVU1k7Ci0JCXJlc3VsdCA9IGdldF91c2VyKHZhbCwgaXApOwotCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuIHJlc3VsdDsKLQkJaWYgKFNHX1NDU0lfUkVTRVRfTk9USElORyA9PSB2YWwpCi0JCQlyZXR1cm4gMDsKLQkJc3dpdGNoICh2YWwpIHsKLQkJY2FzZSBTR19TQ1NJX1JFU0VUX0RFVklDRToKLQkJCXZhbCA9IFNDU0lfVFJZX1JFU0VUX0RFVklDRTsKLQkJCWJyZWFrOwotCQljYXNlIFNHX1NDU0lfUkVTRVRfVEFSR0VUOgotCQkJdmFsID0gU0NTSV9UUllfUkVTRVRfVEFSR0VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0dfU0NTSV9SRVNFVF9CVVM6Ci0JCQl2YWwgPSBTQ1NJX1RSWV9SRVNFVF9CVVM7Ci0JCQlicmVhazsKLQkJY2FzZSBTR19TQ1NJX1JFU0VUX0hPU1Q6Ci0JCQl2YWwgPSBTQ1NJX1RSWV9SRVNFVF9IT1NUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQkJcmV0dXJuIChzY3NpX3Jlc2V0X3Byb3ZpZGVyKHNkcC0+ZGV2aWNlLCB2YWwpID09Ci0JCQlTVUNDRVNTKSA/IDAgOiAtRUlPOwogCWNhc2UgU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQ6CiAJCWlmIChhdG9taWNfcmVhZCgmc2RwLT5kZXRhY2hpbmcpKQogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTIzLDEzICsxMDkwLDYgQEAKIAkJCXJldHVybiByZXN1bHQ7CiAJCXNkcC0+c2dkZWJ1ZyA9IChjaGFyKSB2YWw7CiAJCXJldHVybiAwOwotCWNhc2UgU0NTSV9JT0NUTF9HRVRfSURMVU46Ci0JY2FzZSBTQ1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSOgotCWNhc2UgU0NTSV9JT0NUTF9QUk9CRV9IT1NUOgotCWNhc2UgU0dfR0VUX1RSQU5TRk9STToKLQkJaWYgKGF0b21pY19yZWFkKCZzZHAtPmRldGFjaGluZykpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJcmV0dXJuIHNjc2lfaW9jdGwoc2RwLT5kZXZpY2UsIGNtZF9pbiwgcCk7CiAJY2FzZSBCTEtTRUNUR0VUOgogCQlyZXR1cm4gcHV0X3VzZXIobWF4X3NlY3RvcnNfYnl0ZXMoc2RwLT5kZXZpY2UtPnJlcXVlc3RfcXVldWUpLAogCQkJCWlwKTsKQEAgLTExNDUsMTEgKzExMDUsMjUgQEAKIAkJcmV0dXJuIGJsa190cmFjZV9zdGFydHN0b3Aoc2RwLT5kZXZpY2UtPnJlcXVlc3RfcXVldWUsIDApOwogCWNhc2UgQkxLVFJBQ0VURUFSRE9XTjoKIAkJcmV0dXJuIGJsa190cmFjZV9yZW1vdmUoc2RwLT5kZXZpY2UtPnJlcXVlc3RfcXVldWUpOworCWNhc2UgU0NTSV9JT0NUTF9HRVRfSURMVU46CisJY2FzZSBTQ1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSOgorCWNhc2UgU0NTSV9JT0NUTF9QUk9CRV9IT1NUOgorCWNhc2UgU0dfR0VUX1RSQU5TRk9STToKKwljYXNlIFNHX1NDU0lfUkVTRVQ6CisJCWlmIChhdG9taWNfcmVhZCgmc2RwLT5kZXRhY2hpbmcpKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChyZWFkX29ubHkpCiAJCQlyZXR1cm4gLUVQRVJNOwkvKiBkb24ndCBrbm93IHNvIHRha2Ugc2FmZSBhcHByb2FjaCAqLwotCQlyZXR1cm4gc2NzaV9pb2N0bChzZHAtPmRldmljZSwgY21kX2luLCBwKTsKKwkJYnJlYWs7CiAJfQorCisJcmVzdWx0ID0gc2NzaV9pb2N0bF9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkcC0+ZGV2aWNlLAorCQkJY21kX2luLCBmaWxwLT5mX2ZsYWdzICYgT19OREVMQVkpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIHNjc2lfaW9jdGwoc2RwLT5kZXZpY2UsIGNtZF9pbiwgcCk7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xMzYwLDcgKzEzMzQsNyBAQAogCQlpZiAoKHNkcC0+c2dkZWJ1ZyA+IDApICYmCiAJCSAgICAoKENIRUNLX0NPTkRJVElPTiA9PSBzcnAtPmhlYWRlci5tYXNrZWRfc3RhdHVzKSB8fAogCQkgICAgIChDT01NQU5EX1RFUk1JTkFURUQgPT0gc3JwLT5oZWFkZXIubWFza2VkX3N0YXR1cykpKQotCQkJX19zY3NpX3ByaW50X3NlbnNlKF9fZnVuY19fLCBzZW5zZSwKKwkJCV9fc2NzaV9wcmludF9zZW5zZShzZHAtPmRldmljZSwgX19mdW5jX18sIHNlbnNlLAogCQkJCQkgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCiAJCS8qIEZvbGxvd2luZyBpZiBzdGF0ZW1lbnQgaXMgYSBwYXRjaCBzdXBwbGllZCBieSBFcmljIFlvdW5nZGFsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCAyZGU0NGNjLi44YmQ1NGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtODgsOSArODgsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2RyaXZlciBzcl90ZW1wbGF0ZSA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5nZW5kcnYgPSB7CiAJCS5uYW1lICAgCT0gInNyIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucHJvYmUJCT0gc3JfcHJvYmUsCiAJCS5yZW1vdmUJCT0gc3JfcmVtb3ZlLAogCQkucG0JCT0gJnNyX3BtX29wcywKQEAgLTM4Nyw3ICszODcsNyBAQAogCXN0cnVjdCByZXF1ZXN0ICpycSA9IFNDcG50LT5yZXF1ZXN0OwogCWludCByZXQ7CiAKLQlyZXQgPSBzY3NpX2luaXRfaW8oU0NwbnQsIEdGUF9BVE9NSUMpOworCXJldCA9IHNjc2lfaW5pdF9pbyhTQ3BudCk7CiAJaWYgKHJldCAhPSBCTEtQUkVQX09LKQogCQlnb3RvIG91dDsKIAlTQ3BudCA9IHJxLT5zcGVjaWFsOwpAQCAtNTQ5LDYgKzU0OSwxMSBAQAogCiAJbXV0ZXhfbG9jaygmc3JfbXV0ZXgpOwogCisJcmV0ID0gc2NzaV9pb2N0bF9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYsIGNtZCwKKwkJCShtb2RlICYgRk1PREVfTkRFTEFZKSAhPSAwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwogCS8qCiAJICogU2VuZCBTQ1NJIGFkZHJlc3NpbmcgaW9jdGxzIGRpcmVjdGx5IHRvIG1pZCBsZXZlbCwgc2VuZCBvdGhlcgogCSAqIGlvY3RscyB0byBjZHJvbS9ibG9jayBsZXZlbC4KQEAgLTU2NCwxNiArNTY5LDYgQEAKIAlpZiAocmV0ICE9IC1FTk9TWVMpCiAJCWdvdG8gb3V0OwogCi0JLyoKLQkgKiBFTk9ERVYgbWVhbnMgdGhhdCB3ZSBkaWRuJ3QgcmVjb2duaXNlIHRoZSBpb2N0bCwgb3IgdGhhdCB3ZQotCSAqIGNhbm5vdCBleGVjdXRlIGl0IGluIHRoZSBjdXJyZW50IGRldmljZSBzdGF0ZS4gIEluIGVpdGhlcgotCSAqIGNhc2UgZmFsbCB0aHJvdWdoIHRvIHNjc2lfaW9jdGwsIHdoaWNoIHdpbGwgcmV0dXJuIEVORE9FViBhZ2FpbgotCSAqIGlmIGl0IGRvZXNuJ3QgcmVjb2duaXNlIHRoZSBpb2N0bAotCSAqLwotCXJldCA9IHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKHNkZXYsIGNtZCwgYXJncCwKLQkJCQkJKG1vZGUgJiBGTU9ERV9OREVMQVkpICE9IDApOwotCWlmIChyZXQgIT0gLUVOT0RFVikKLQkJZ290byBvdXQ7CiAJcmV0ID0gc2NzaV9pb2N0bChzZGV2LCBjbWQsIGFyZ3ApOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3IuaCBiL2RyaXZlcnMvc2NzaS9zci5oCmluZGV4IDFkMWY2ZjQxLi4xZGUzMzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuaAorKysgYi9kcml2ZXJzL3Njc2kvc3IuaApAQCAtNTcsOCArNTcsNyBAQAogfSBTY3NpX0NEOwogCiAjZGVmaW5lIHNyX3ByaW50ayhwcmVmaXgsIGNkLCBmbXQsIGEuLi4pIFwKLQlzZGV2X3ByaW50ayhwcmVmaXgsIChjZCktPmRldmljZSwgIlslc10gIiBmbXQsIFwKLQkJICAgIChjZCktPmNkaS5uYW1lLCAjI2EpCisJc2Rldl9wcmVmaXhfcHJpbnRrKHByZWZpeCwgKGNkKS0+ZGV2aWNlLCAoY2QpLT5jZGkubmFtZSwgZm10LCAjI2EpCiAKIGludCBzcl9kb19pb2N0bChTY3NpX0NEICosIHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyX2lvY3RsLmMgYi9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYwppbmRleCA2Mzg5ZmNmLi5mYjkyOWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCQkJCSAgIkNEUk9NIG5vdCByZWFkeS4gIE1ha2Ugc3VyZSB0aGVyZSAiCiAJCQkJCSAgImlzIGEgZGlzYyBpbiB0aGUgZHJpdmUuXG4iKTsKICNpZmRlZiBERUJVRwotCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoInNyIiwgJnNzaGRyKTsKKwkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNkLT5kZXZpY2UsIGNkLT5jZGkubmFtZSwgJnNzaGRyKTsKICNlbmRpZgogCQkJZXJyID0gLUVOT01FRElVTTsKIAkJCWJyZWFrOwpAQCAtMjU3LDE1ICsyNTcsMTUgQEAKIAkJCQkvKiBzZW5zZTogSW52YWxpZCBjb21tYW5kIG9wZXJhdGlvbiBjb2RlICovCiAJCQkJZXJyID0gLUVEUklWRV9DQU5UX0RPX1RISVM7CiAjaWZkZWYgREVCVUcKLQkJCV9fc2NzaV9wcmludF9jb21tYW5kKGNnYy0+Y21kKTsKLQkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKCJzciIsICZzc2hkcik7CisJCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjZ2MtPmNtZCwgQ0RST01fUEFDS0VUX1NJWkUpOworCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoY2QtPmRldmljZSwgY2QtPmNkaS5uYW1lLCAmc3NoZHIpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXNyX3ByaW50ayhLRVJOX0VSUiwgY2QsCiAJCQkJICAiQ0RST00gKGlvY3RsKSBlcnJvciwgY29tbWFuZDogIik7Ci0JCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjZ2MtPmNtZCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlX2hkcigic3IiLCAmc3NoZHIpOworCQkJX19zY3NpX3ByaW50X2NvbW1hbmQoY2djLT5jbWQsIENEUk9NX1BBQ0tFVF9TSVpFKTsKKwkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNkLT5kZXZpY2UsIGNkLT5jZGkubmFtZSwgJnNzaGRyKTsKIAkJCWVyciA9IC1FSU87CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IDRkYWEzNzIuLjEyOGQzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC01Niw3ICs1Niw4IEBACiAKIC8qIFRoZSBkcml2ZXIgcHJpbnRzIHNvbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uIG9uIHRoZSBjb25zb2xlIGlmIERFQlVHCiAgICBpcyBkZWZpbmVkIGFuZCBub24temVyby4gKi8KLSNkZWZpbmUgREVCVUcgMAorI2RlZmluZSBERUJVRyAxCisjZGVmaW5lIE5PX0RFQlVHIDAKIAogI2RlZmluZSBTVF9ERUJfTVNHICBLRVJOX05PVElDRQogI2lmIERFQlVHCkBAIC04MCw2ICs4MSw3IEBACiBzdGF0aWMgaW50IHRyeV9kaXJlY3RfaW8gPSBUUllfRElSRUNUX0lPOwogc3RhdGljIGludCB0cnlfcmRpbyA9IDE7CiBzdGF0aWMgaW50IHRyeV93ZGlvID0gMTsKK3N0YXRpYyBpbnQgZGVidWdfZmxhZzsKIAogc3RhdGljIHN0cnVjdCBjbGFzcyBzdF9zeXNmc19jbGFzczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpzdF9kZXZfZ3JvdXBzW107CkBAIC0xMDAsNiArMTAyLDkgQEAKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3NnX3NlZ3MsICJNYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlciBzZWdtZW50cyB0byB1c2UgKDI1NikiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh0cnlfZGlyZWN0X2lvLCB0cnlfZGlyZWN0X2lvLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0cnlfZGlyZWN0X2lvLCAiVHJ5IGRpcmVjdCBJL08gYmV0d2VlbiB1c2VyIGJ1ZmZlciBhbmQgdGFwZSBkcml2ZSAoMSkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19mbGFnLCBkZWJ1Z19mbGFnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19mbGFnLCAiRW5hYmxlIERFQlVHLCBzYW1lIGFzIHNldHRpbmcgZGVidWdnaW5nPTEiKTsKKwogCiAvKiBFeHRyYSBwYXJhbWV0ZXJzIGZvciB0ZXN0aW5nICovCiBtb2R1bGVfcGFyYW1fbmFtZWQodHJ5X3JkaW8sIHRyeV9yZGlvLCBpbnQsIDApOwpAQCAtMTI0LDYgKzEyOSw5IEBACiAJfSwKIAl7CiAJCSJ0cnlfZGlyZWN0X2lvIiwgJnRyeV9kaXJlY3RfaW8KKwl9LAorCXsKKwkJImRlYnVnX2ZsYWciLCAmZGVidWdfZmxhZwogCX0KIH07CiAjZW5kaWYKQEAgLTE5NCw5ICsyMDIsOSBAQAogc3RhdGljIHZvaWQgZG9fcmVtb3ZlX3N5c2ZzX2ZpbGVzKHZvaWQpOwogCiBzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIHN0X3RlbXBsYXRlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmdlbmRydiA9IHsKIAkJLm5hbWUJCT0gInN0IiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucHJvYmUJCT0gc3RfcHJvYmUsCiAJCS5yZW1vdmUJCT0gc3RfcmVtb3ZlLAogCX0sCkBAIC0zMDYsOCArMzE0LDcgQEAKIH0KIAogI2RlZmluZSBzdF9wcmludGsocHJlZml4LCB0LCBmbXQsIGEuLi4pIFwKLQlzZGV2X3ByaW50ayhwcmVmaXgsICh0KS0+ZGV2aWNlLCAiJXM6ICIgZm10LCBcCi0JCSAgICB0YXBlX25hbWUodCksICMjYSkKKwlzZGV2X3ByZWZpeF9wcmludGsocHJlZml4LCAodCktPmRldmljZSwgdGFwZV9uYW1lKHQpLCBmbXQsICMjYSkKICNpZmRlZiBERUJVRwogI2RlZmluZSBERUJDX3ByaW50ayh0LCBmbXQsIGEuLi4pIFwKIAlpZiAoZGVidWdnaW5nKSB7IHN0X3ByaW50ayhTVF9ERUJfTVNHLCB0LCBmbXQsICMjYSApOyB9CkBAIC0zNzQsNyArMzgxLDggQEAKIAkJCSAgICBTUnBudC0+Y21kWzBdLCBTUnBudC0+Y21kWzFdLCBTUnBudC0+Y21kWzJdLAogCQkJICAgIFNScG50LT5jbWRbM10sIFNScG50LT5jbWRbNF0sIFNScG50LT5jbWRbNV0pOwogCQlpZiAoY21kc3RhdHAtPmhhdmVfc2Vuc2UpCi0JCQkgX19zY3NpX3ByaW50X3NlbnNlKG5hbWUsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCX0gKSAvKiBlbmQgREVCICovCiAJaWYgKCFkZWJ1Z2dpbmcpIHsgLyogQWJub3JtYWwgY29uZGl0aW9ucyBmb3IgdGFwZSAqLwogCQlpZiAoIWNtZHN0YXRwLT5oYXZlX3NlbnNlKQpAQCAtMzkwLDcgKzM5OCw4IEBACiAJCQkgU1JwbnQtPmNtZFswXSAhPSBNT0RFX1NFTlNFICYmCiAJCQkgU1JwbnQtPmNtZFswXSAhPSBURVNUX1VOSVRfUkVBRFkpIHsKIAotCQkJX19zY3NpX3ByaW50X3NlbnNlKG5hbWUsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQl9CiAJfQogCkBAIC04NTIsMTcgKzg2MSwxNiBAQAogLyogTG9jayBvciB1bmxvY2sgdGhlIGRyaXZlIGRvb3IuIERvbid0IHVzZSB3aGVuIHN0X3JlcXVlc3QgYWxsb2NhdGVkLiAqLwogc3RhdGljIGludCBkb19kb29yX2xvY2soc3RydWN0IHNjc2lfdGFwZSAqIFNUcCwgaW50IGRvX2xvY2spCiB7Ci0JaW50IHJldHZhbCwgY21kOworCWludCByZXR2YWw7CiAKLQljbWQgPSBkb19sb2NrID8gU0NTSV9JT0NUTF9ET09STE9DSyA6IFNDU0lfSU9DVExfRE9PUlVOTE9DSzsKIAlERUJDX3ByaW50ayhTVHAsICIlc29ja2luZyBkcml2ZSBkb29yLlxuIiwgZG9fbG9jayA/ICJMIiA6ICJVbmwiKTsKLQlyZXR2YWwgPSBzY3NpX2lvY3RsKFNUcC0+ZGV2aWNlLCBjbWQsIE5VTEwpOwotCWlmICghcmV0dmFsKSB7CisKKwlyZXR2YWwgPSBzY3NpX3NldF9tZWRpdW1fcmVtb3ZhbChTVHAtPmRldmljZSwKKwkJCWRvX2xvY2sgPyBTQ1NJX1JFTU9WQUxfUFJFVkVOVCA6IFNDU0lfUkVNT1ZBTF9BTExPVyk7CisJaWYgKCFyZXR2YWwpCiAJCVNUcC0+ZG9vcl9sb2NrZWQgPSBkb19sb2NrID8gU1RfTE9DS0VEX0VYUExJQ0lUIDogU1RfVU5MT0NLRUQ7Ci0JfQotCWVsc2UgeworCWVsc2UKIAkJU1RwLT5kb29yX2xvY2tlZCA9IFNUX0xPQ0tfRkFJTFM7Ci0JfQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTMzNjcsMTEgKzMzNzUsMTAgQEAKIAkgKiBtYXkgdHJ5IGFuZCB0YWtlIHRoZSBkZXZpY2Ugb2ZmbGluZSwgaW4gd2hpY2ggY2FzZSBhbGwgZnVydGhlcgogCSAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHByb2hpYml0ZWQuCiAJICovCi0JcmV0dmFsID0gc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoU1RwLT5kZXZpY2UsIGNtZF9pbiwgcCwKLQkJCQkJZmlsZS0+Zl9mbGFncyAmIE9fTkRFTEFZKTsKLQlpZiAoIXNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhTVHAtPmRldmljZSkgfHwgcmV0dmFsICE9IC1FTk9ERVYpCisJcmV0dmFsID0gc2NzaV9pb2N0bF9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKFNUcC0+ZGV2aWNlLCBjbWRfaW4sCisJCQlmaWxlLT5mX2ZsYWdzICYgT19OREVMQVkpOworCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwotCXJldHZhbCA9IDA7CiAKIAljbWRfdHlwZSA9IF9JT0NfVFlQRShjbWRfaW4pOwogCWNtZF9uciA9IF9JT0NfTlIoY21kX2luKTsKQEAgLTQzMDksNiArNDMxNiwxMiBAQAogCXByaW50ayhLRVJOX0lORk8gInN0OiBWZXJzaW9uICVzLCBmaXhlZCBidWZzaXplICVkLCBzL2cgc2VncyAlZFxuIiwKIAkJdmVyc3RyLCBzdF9maXhlZF9idWZmZXJfc2l6ZSwgc3RfbWF4X3NnX3NlZ3MpOwogCisJZGVidWdnaW5nID0gKGRlYnVnX2ZsYWcgPiAwKSA/IGRlYnVnX2ZsYWcgOiBOT19ERUJVRzsKKwlpZiAoZGVidWdnaW5nKSB7CisJCXByaW50ayhLRVJOX0lORk8gInN0OiBEZWJ1Z2dpbmcgZW5hYmxlZCBkZWJ1Z19mbGFnID0gJWRcbiIsCisJCQlkZWJ1Z2dpbmcpOworCX0KKwogCWVyciA9IGNsYXNzX3JlZ2lzdGVyKCZzdF9zeXNmc19jbGFzcyk7CiAJaWYgKGVycikgewogCQlwcl9lcnIoIlVuYWJsZSByZWdpc3RlciBzeXNmcyBjbGFzcyBmb3IgU0NTSSB0YXBlc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3RleC5jIGIvZHJpdmVycy9zY3NpL3N0ZXguYwppbmRleCAxYWE0YmVmLi45OGE2MmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3RleC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdGV4LmMKQEAgLTU0NCwzMyArNTQ0LDE1IEBACiB9CiAKIHN0YXRpYyBpbnQKLXN0ZXhfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQotewotCS8qIENoZWF0OiB1c3VhbGx5IGV4dHJhY3RlZCBmcm9tIElucXVpcnkgZGF0YSAqLwotCXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAxOwotCi0Jc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+aG9zdC0+Y2FuX3F1ZXVlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50CiBzdGV4X3NsYXZlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJc2Rldi0+dXNlXzEwX2Zvcl9ydyA9IDE7CiAJc2Rldi0+dXNlXzEwX2Zvcl9tcyA9IDE7CiAJYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNjAgKiBIWik7Ci0Jc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLXN0ZXhfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCi17Ci0Jc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCAxKTsKLX0KLQogc3RhdGljIGludAogc3RleF9xdWV1ZWNvbW1hbmRfbGNrKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7CkBAIC0xMTYyLDkgKzExNDQsNyBAQAogCWludCByZXN1bHQgPSBTVUNDRVNTOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSIoJXMpOiBhYm9ydGluZyBjb21tYW5kXG4iLCBwY2lfbmFtZShoYmEtPnBkZXYpKTsKLQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgImFib3J0aW5nIGNvbW1hbmRcbiIpOwogCiAJYmFzZSA9IGhiYS0+bW1pb19iYXNlOwogCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtMTM1Miw5ICsxMzMyLDggQEAKIAogCWhiYSA9IChzdHJ1Y3Qgc3RfaGJhICopICZjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CiAKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSIoJXMpOiByZXNldHRpbmcgaG9zdFxuIiwgcGNpX25hbWUoaGJhLT5wZGV2KSk7Ci0Jc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CisJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgY21kLT5kZXZpY2UtPmhvc3QsCisJCSAgICAgInJlc2V0dGluZyBob3N0XG4iKTsKIAogCXJldHVybiBzdGV4X2RvX3Jlc2V0KGhiYSkgPyBGQUlMRUQgOiBTVUNDRVNTOwogfQpAQCAtMTM5MSwxMiArMTM3MCwxMSBAQAogCS5wcm9jX25hbWUJCQk9IERSVl9OQU1FLAogCS5iaW9zX3BhcmFtCQkJPSBzdGV4X2Jpb3NwYXJhbSwKIAkucXVldWVjb21tYW5kCQkJPSBzdGV4X3F1ZXVlY29tbWFuZCwKLQkuc2xhdmVfYWxsb2MJCQk9IHN0ZXhfc2xhdmVfYWxsb2MsCiAJLnNsYXZlX2NvbmZpZ3VyZQkJPSBzdGV4X3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJCT0gc3RleF9zbGF2ZV9kZXN0cm95LAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IHN0ZXhfYWJvcnQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgkJPSBzdGV4X3Jlc2V0LAogCS50aGlzX2lkCQkJPSAtMSwKKwkudXNlX2Jsa190YWdzCQkJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0ZXhfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0b3J2c2NfZHJ2LmMgYi9kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYwppbmRleCA3MzNlNWY3Li5lM2JhMjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYworKysgYi9kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYwpAQCAtMTA5Nyw3ICsxMDk3LDggQEAKIAlpZiAoc2NtbmQtPnJlc3VsdCkgewogCQlpZiAoc2NzaV9ub3JtYWxpemVfc2Vuc2Uoc2NtbmQtPnNlbnNlX2J1ZmZlciwKIAkJCQlTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsICZzZW5zZV9oZHIpKQotCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoInN0b3J2c2MiLCAmc2Vuc2VfaGRyKTsKKwkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKHNjbW5kLT5kZXZpY2UsICJzdG9ydnNjIiwKKwkJCQkJICAgICAmc2Vuc2VfaGRyKTsKIAl9CiAKIAlpZiAodm1fc3JiLT5zcmJfc3RhdHVzICE9IFNSQl9TVEFUVVNfU1VDQ0VTUykKQEAgLTE0MjgsOCArMTQyOSw3IEBACiAKIHN0YXRpYyBpbnQgc3RvcnZzY19kZXZpY2VfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldmljZSkKIHsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2aWNlLCBNU0dfU0lNUExFX1RBRywKLQkJCQlTVE9SVlNDX01BWF9JT19SRVFVRVNUUyk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldmljZSwgU1RPUlZTQ19NQVhfSU9fUkVRVUVTVFMpOwogCiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoc2RldmljZS0+cmVxdWVzdF9xdWV1ZSwgUEFHRV9TSVpFKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTIzNjdhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYworKysgL2Rldi9udWxsCkBAIC0xLDI5MzMgKzAsMCBAQAotLyogc3VuM19OQ1I1MzgwLmMgLS0gYWRhcHRlZCBmcm9tIGF0YXJpX05DUjUzODAuYyBmb3IgdGhlIHN1bjMgYnkgCi0gICBTYW0gQ3JlYXNleS4gKi8gCi0vKiAKLSAqIE5DUiA1MzgwIGdlbmVyaWMgZHJpdmVyIHJvdXRpbmVzLiAgVGhlc2Ugc2hvdWxkIG1ha2UgaXQgKnRyaXZpYWwqCi0gKiAJdG8gaW1wbGVtZW50IDUzODAgU0NTSSBkcml2ZXJzIHVuZGVyIExpbnV4IHdpdGggYSBub24tdHJhbnRvcgotICoJYXJjaGl0ZWN0dXJlLgotICoKLSAqCU5vdGUgdGhhdCB0aGVzZSByb3V0aW5lcyBhbHNvIHdvcmsgd2l0aCBOUjUzYzQwMCBmYW1pbHkgY2hpcHMuCi0gKgotICogQ29weXJpZ2h0IDE5OTMsIERyZXcgRWNraGFyZHQKLSAqCVZpc2lvbmFyeSBDb21wdXRpbmcgCi0gKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQotICogCWRyZXdAY29sb3JhZG8uZWR1Ci0gKgkrMSAoMzAzKSA2NjYtNTgzNgotICoKLSAqIERJU1RSSUJVVElPTiBSRUxFQVNFIDYuIAotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKLSAqLwotCi0vKgotICogKytyb21hbjogVG8gcG9ydCB0aGUgNTM4MCBkcml2ZXIgdG8gdGhlIEF0YXJpLCBJIGhhZCB0byBkbyBzb21lIGNoYW5nZXMgaW4KLSAqIHRoaXMgZmlsZSwgdG9vOgotICoKLSAqICAtIFNvbWUgb2YgdGhlIGRlYnVnIHN0YXRlbWVudHMgd2VyZSBpbmNvcnJlY3QgKHVuZGVmaW5lZCB2YXJpYWJsZXMgYW5kIHRoZQotICogICAgbGlrZSkuIEkgZml4ZWQgdGhhdC4KLSAqCi0gKiAgLSBJbiBpbmZvcm1hdGlvbl90cmFuc2ZlcigpLCBJIHRoaW5rIGEgI2lmZGVmIHdhcyB3cm9uZy4gTG9va2luZyBhdCB0aGUKLSAqICAgIHBvc3NpYmxlIERNQSB0cmFuc2ZlciBzaXplIHNob3VsZCBhbHNvIGhhcHBlbiBmb3IgUkVBTF9ETUEuIEkgYWRkZWQgdGhpcwotICogICAgaW4gdGhlICNpZiBzdGF0ZW1lbnQuCi0gKgotICogIC0gV2hlbiB1c2luZyByZWFsIERNQSwgaW5mb3JtYXRpb25fdHJhbnNmZXIoKSBzaG91bGQgcmV0dXJuIGluIGEgREFUQU9VVAotICogICAgcGhhc2UgYWZ0ZXIgc3RhcnRpbmcgdGhlIERNQS4gSXQgaGFzIG5vdGhpbmcgbW9yZSB0byBkby4KLSAqCi0gKiAgLSBUaGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBzaG91bGQgcnVuIG1haW4gYWZ0ZXIgZW5kIG9mIERNQSwgdG9vIChub3QKLSAqICAgIG9ubHkgYWZ0ZXIgUkVTRUxFQ1RJT04gaW50ZXJydXB0cykuIEFkZGl0aW9uYWxseSwgaXQgc2hvdWxkIF9ub3RfIHRlc3QKLSAqICAgIGZvciBtb3JlIGludGVycnVwdHMgYWZ0ZXIgcnVubmluZyBtYWluLCBzaW5jZSBhIERNQSBwcm9jZXNzIG1heSBoYXZlCi0gKiAgICBiZWVuIHN0YXJ0ZWQgYW5kIGludGVycnVwdHMgYXJlIHR1cm5lZCBvbiBub3cuIFRoZSBuZXcgaW50IGNvdWxkIGhhcHBlbgotICogICAgaW5zaWRlIHRoZSBleGVjdXRpb24gb2YgTkNSNTM4MF9pbnRyKCksIGxlYWRpbmcgdG8gcmVjdXJzaXZlCi0gKiAgICBjYWxscy4KLSAqCi0gKiAtIEkndmUgZGVsZXRlZCBhbGwgdGhlIHN0dWZmIGZvciBBVVRPUFJPQkVfSVJRLCBSRUFMX0RNQV9QT0xMLCBQU0VVRE9fRE1BCi0gKiAgICBhbmQgVVNMRUVQLCBiZWNhdXNlIHRoZXNlIHdlcmUgbWVzc2luZyB1cCByZWFkYWJpbGl0eSBhbmQgd2lsbCBuZXZlciBiZQotICogICAgbmVlZGVkIGZvciBBdGFyaSBTQ1NJLgotICogCi0gKiAtIEkndmUgcmV2aXNlZCB0aGUgTkNSNTM4MF9tYWluKCkgY2FsbGluZyBzY2hlbWUgKHJlbGF4IHRoZSAnbWFpbl9ydW5uaW5nJwotICogICBzdHVmZiksIGFuZCAnbWFpbicgaXMgZXhlY3V0ZWQgaW4gYSBib3R0b20gaGFsZiBpZiBhd29rZW4gYnkgYW4KLSAqICAgaW50ZXJydXB0LgotICoKLSAqIC0gVGhlIGNvZGUgd2FzIHF1aXRlIGNsdXR0ZXJlZCB1cCBieSAiI2lmIChOREVCVUcgJiBOREVCVUdfKikgcHJpbnRrLi4uIgotICogICBjb25zdHJ1Y3RzLiBJbiBteSBleWVzLCB0aGlzIG1hZGUgdGhlIHNvdXJjZSByYXRoZXIgdW5yZWFkYWJsZSwgc28gSQotICogICBmaW5hbGx5IHJlcGxhY2VkIHRoYXQgYnkgdGhlICpfUFJJTlRLKCkgbWFjcm9zLgotICoKLSAqLwotI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oPgotCi0vKgotICogRnVydGhlciBkZXZlbG9wbWVudCAvIHRlc3RpbmcgdGhhdCBzaG91bGQgYmUgZG9uZSA6IAotICogMS4gIFRlc3QgbGlua2VkIGNvbW1hbmQgaGFuZGxpbmcgY29kZSBhZnRlciBFcmljIGlzIHJlYWR5IHdpdGggCi0gKiAgICAgdGhlIGhpZ2ggbGV2ZWwgY29kZS4KLSAqLwotCi0jaWYgKE5ERUJVRyAmIE5ERUJVR19MSVNUUykKLSNkZWZpbmUgTElTVCh4LHkpIFwKLSAgeyBwcmludGsoIkxJTkU6JWQgICBBZGRpbmcgJXAgdG8gJXBcbiIsIF9fTElORV9fLCAodm9pZCopKHgpLCAodm9pZCopKHkpKTsgXAotICAgIGlmICgoeCk9PSh5KSkgdWRlbGF5KDUpOyB9Ci0jZGVmaW5lIFJFTU9WRSh3LHgseSx6KSBcCi0gIHsgcHJpbnRrKCJMSU5FOiVkICAgUmVtb3Zpbmc6ICVwLT4lcCAgJXAtPiVwIFxuIiwgX19MSU5FX18sIFwKLQkgICAodm9pZCopKHcpLCAodm9pZCopKHgpLCAodm9pZCopKHkpLCAodm9pZCopKHopKTsgXAotICAgIGlmICgoeCk9PSh5KSkgdWRlbGF5KDUpOyB9Ci0jZWxzZQotI2RlZmluZSBMSVNUKHgseSkKLSNkZWZpbmUgUkVNT1ZFKHcseCx5LHopCi0jZW5kaWYKLQotI2lmbmRlZiBub3R5ZXQKLSN1bmRlZiBMSU5LRUQKLSNlbmRpZgotCi0vKgotICogRGVzaWduCi0gKiBJc3N1ZXMgOgotICoKLSAqIFRoZSBvdGhlciBMaW51eCBTQ1NJIGRyaXZlcnMgd2VyZSB3cml0dGVuIHdoZW4gTGludXggd2FzIEludGVsIFBDLW9ubHksCi0gKiBhbmQgc3BlY2lmaWNhbGx5IGZvciBlYWNoIGJvYXJkIHJhdGhlciB0aGFuIGVhY2ggY2hpcC4gIFRoaXMgbWFrZXMgdGhlaXIKLSAqIGFkYXB0YXRpb24gdG8gcGxhdGZvcm1zIGxpa2UgdGhlIE1hYyAoU29tZSBvZiB3aGljaCB1c2UgTkNSNTM4MCdzKQotICogbW9yZSBkaWZmaWN1bHQgdGhhbiBpdCBoYXMgdG8gYmUuCi0gKgotICogQWxzbywgbWFueSBvZiB0aGUgU0NTSSBkcml2ZXJzIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvbW1hbmQgcXVldWluZwotICogcm91dGluZXMgd2VyZSBpbXBsZW1lbnRlZCwgbWVhbmluZyB0aGVpciBpbXBsZW1lbnRhdGlvbnMgb2YgcXVldWVkIAotICogY29tbWFuZHMgd2VyZSBoYWNrZWQgb24gcmF0aGVyIHRoYW4gZGVzaWduZWQgaW4gZnJvbSB0aGUgc3RhcnQuCi0gKgotICogV2hlbiBJIGRlc2lnbmVkIHRoZSBMaW51eCBTQ1NJIGRyaXZlcnMgSSBmaWd1cmVkIHRoYXQgCi0gKiB3aGlsZSBoYXZpbmcgdHdvIGRpZmZlcmVudCBTQ1NJIGJvYXJkcyBpbiBhIHN5c3RlbSBtaWdodCBiZSB1c2VmdWwKLSAqIGZvciBkZWJ1Z2dpbmcgdGhpbmdzLCB0d28gb2YgdGhlIHNhbWUgdHlwZSB3b3VsZG4ndCBiZSB1c2VkLgotICogV2VsbCwgSSB3YXMgd3JvbmcgYW5kIGEgbnVtYmVyIG9mIHVzZXJzIGhhdmUgbWFpbGVkIG1lIGFib3V0IHJ1bm5pbmcKLSAqIG11bHRpcGxlIGhpZ2gtcGVyZm9ybWFuY2UgU0NTSSBib2FyZHMgaW4gYSBzZXJ2ZXIuCi0gKgotICogRmluYWxseSwgd2hlbiBJIGdldCBxdWVzdGlvbnMgZnJvbSB1c2VycywgSSBoYXZlIG5vIGlkZWEgd2hhdCAKLSAqIHJldmlzaW9uIG9mIG15IGRyaXZlciB0aGV5IGFyZSBydW5uaW5nLgotICoKLSAqIFRoaXMgZHJpdmVyIGF0dGVtcHRzIHRvIGFkZHJlc3MgdGhlc2UgcHJvYmxlbXMgOgotICogVGhpcyBpcyBhIGdlbmVyaWMgNTM4MCBkcml2ZXIuICBUbyB1c2UgaXQgb24gYSBkaWZmZXJlbnQgcGxhdGZvcm0sIAotICogb25lIHNpbXBseSB3cml0ZXMgYXBwcm9wcmlhdGUgc3lzdGVtIHNwZWNpZmljIG1hY3JvcyAoaWUsIGRhdGEKLSAqIHRyYW5zZmVyIC0gc29tZSBQQydzIHdpbGwgdXNlIHRoZSBJL08gYnVzLCA2OEsncyBtdXN0IHVzZSAKLSAqIG1lbW9yeSBtYXBwZWQpIGFuZCBkcm9wcyB0aGlzIGZpbGUgaW4gdGhlaXIgJ0MnIHdyYXBwZXIuCi0gKgotICogQXMgZmFyIGFzIGNvbW1hbmQgcXVldWVpbmcsIHR3byBxdWV1ZXMgYXJlIG1haW50YWluZWQgZm9yIAotICogZWFjaCA1MzgwIGluIHRoZSBzeXN0ZW0gLSBjb21tYW5kcyB0aGF0IGhhdmVuJ3QgYmVlbiBpc3N1ZWQgeWV0LAotICogYW5kIGNvbW1hbmRzIHRoYXQgYXJlIGN1cnJlbnRseSBleGVjdXRpbmcuICBUaGlzIG1lYW5zIHRoYXQgYW4gCi0gKiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNvbW1hbmRzIG1heSBiZSBxdWV1ZWQsIGxldHRpbmcgCi0gKiBtb3JlIGNvbW1hbmRzIHByb3BhZ2F0ZSBmcm9tIHRoZSBoaWdoZXIgZHJpdmVyIGxldmVscyBnaXZpbmcgaGlnaGVyIAotICogdGhyb3VnaHB1dC4gIE5vdGUgdGhhdCBib3RoIElfVF9MIGFuZCBJX1RfTF9RIG5leHVzZXMgYXJlIHN1cHBvcnRlZCwgCi0gKiBhbGxvd2luZyBtdWx0aXBsZSBjb21tYW5kcyB0byBwcm9wYWdhdGUgYWxsIHRoZSB3YXkgdG8gYSBTQ1NJLUlJIGRldmljZSAKLSAqIHdoaWxlIGEgY29tbWFuZCBpcyBhbHJlYWR5IGV4ZWN1dGluZy4KLSAqCi0gKiBUbyBzb2x2ZSB0aGUgbXVsdGlwbGUtYm9hcmRzLWluLXRoZS1zYW1lLXN5c3RlbSBwcm9ibGVtLCAKLSAqIHRoZXJlIGlzIGEgc2VwYXJhdGUgaW5zdGFuY2Ugc3RydWN0dXJlIGZvciBlYWNoIGluc3RhbmNlCi0gKiBvZiBhIDUzODAgaW4gdGhlIHN5c3RlbS4gIFNvLCBtdWx0aXBsZSBOQ1I1MzgwIGRyaXZlcnMgd2lsbAotICogYmUgYWJsZSB0byBjb2V4aXN0IHdpdGggYXBwcm9wcmlhdGUgY2hhbmdlcyB0byB0aGUgaGlnaCBsZXZlbAotICogU0NTSSBjb2RlLiAgCi0gKgotICogQSBOQ1I1MzgwX1BVQkxJQ19SRVZJU0lPTiBtYWNybyBpcyBwcm92aWRlZCwgd2l0aCB0aGUgcmVsZWFzZQotICogbnVtYmVyICh1cGRhdGVkIGZvciBlYWNoIHB1YmxpYyByZWxlYXNlKSBwcmludGVkIGJ5IHRoZSAKLSAqIE5DUjUzODBfcHJpbnRfb3B0aW9ucyBjb21tYW5kLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIAotICogd3JhcHBlciBkZXRlY3QgZnVuY3Rpb24sIHNvIHRoYXQgSSBrbm93IHdoYXQgcmVsZWFzZSBvZiB0aGUgZHJpdmVyCi0gKiB1c2VycyBhcmUgdXNpbmcuCi0gKgotICogSXNzdWVzIHNwZWNpZmljIHRvIHRoZSBOQ1I1MzgwIDogCi0gKgotICogV2hlbiB1c2VkIGluIGEgUElPIG9yIHBzZXVkby1kbWEgbW9kZSwgdGhlIE5DUjUzODAgaXMgYSBicmFpbmRlYWQgCi0gKiBwaWVjZSBvZiBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzIHlvdSB0byBzaXQgaW4gYSBsb29wIHBvbGxpbmcgZm9yIAotICogdGhlIFJFUSBzaWduYWwgYXMgbG9uZyBhcyB5b3UgYXJlIGNvbm5lY3RlZC4gIFNvbWUgZGV2aWNlcyBhcmUgCi0gKiBicmFpbiBkZWFkIChpZSwgbWFueSBURVhFTCBDRCBST00gZHJpdmVzKSBhbmQgd29uJ3QgZGlzY29ubmVjdCAKLSAqIHdoaWxlIGRvaW5nIGxvbmcgc2VlayBvcGVyYXRpb25zLgotICogCi0gKiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBpcyB0byBrZWVwIHRyYWNrIG9mIGRldmljZXMgdGhhdCBoYXZlCi0gKiBkaXNjb25uZWN0ZWQuICBJZiB0aGUgZGV2aWNlIGhhc24ndCBkaXNjb25uZWN0ZWQsIGZvciBjb21tYW5kcyB0aGF0Ci0gKiBzaG91bGQgZGlzY29ubmVjdCwgd2UgZG8gc29tZXRoaW5nIGxpa2UgCi0gKgotICogd2hpbGUgKCFSRVEgaXMgYXNzZXJ0ZWQpIHsgc2xlZXAgZm9yIE4gdXNlY3M7IHBvbGwgZm9yIE0gdXNlY3MgfQotICogCi0gKiBTb21lIHR3ZWFraW5nIG9mIE4gYW5kIE0gbmVlZHMgdG8gYmUgZG9uZS4gIEFuIGFsZ29yaXRobSBiYXNlZCAKLSAqIG9uICJ0aW1lIHRvIGRhdGEiIHdvdWxkIGdpdmUgdGhlIGJlc3QgcmVzdWx0cyBhcyBsb25nIGFzIHNob3J0IHRpbWUKLSAqIHRvIGRhdGFzIChpZSwgb24gdGhlIHNhbWUgdHJhY2spIHdlcmUgY29uc2lkZXJlZCwgaG93ZXZlciB0aGVzZSAKLSAqIGJyb2tlbiBkZXZpY2VzIGFyZSB0aGUgZXhjZXB0aW9uIHJhdGhlciB0aGFuIHRoZSBydWxlIGFuZCBJJ2QgcmF0aGVyCi0gKiBzcGVuZCBteSB0aW1lIG9wdGltaXppbmcgZm9yIHRoZSBub3JtYWwgY2FzZS4KLSAqCi0gKiBBcmNoaXRlY3R1cmUgOgotICoKLSAqIEF0IHRoZSBoZWFydCBvZiB0aGUgZGVzaWduIGlzIGEgY29yb3V0aW5lLCBOQ1I1MzgwX21haW4sCi0gKiB3aGljaCBpcyBzdGFydGVkIHdoZW4gbm90IHJ1bm5pbmcgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyLAotICogdGltZXIsIGFuZCBxdWV1ZSBjb21tYW5kIGZ1bmN0aW9uLiAgSXQgYXR0ZW1wdHMgdG8gZXN0YWJsaXNoCi0gKiBJX1RfTCBvciBJX1RfTF9RIG5leHVzZXMgYnkgcmVtb3ZpbmcgdGhlIGNvbW1hbmRzIGZyb20gdGhlIAotICogaXNzdWUgcXVldWUgYW5kIGNhbGxpbmcgTkNSNTM4MF9zZWxlY3QoKSBpZiBhIG5leHVzIAotICogaXMgbm90IGVzdGFibGlzaGVkLiAKLSAqCi0gKiBPbmNlIGEgbmV4dXMgaXMgZXN0YWJsaXNoZWQsIHRoZSBOQ1I1MzgwX2luZm9ybWF0aW9uX3RyYW5zZmVyKCkKLSAqIHBoYXNlIGdvZXMgdGhyb3VnaCB0aGUgdmFyaW91cyBwaGFzZXMgYXMgaW5zdHJ1Y3RlZCBieSB0aGUgdGFyZ2V0LgotICogaWYgdGhlIHRhcmdldCBnb2VzIGludG8gTVNHIElOIGFuZCBzZW5kcyBhIERJU0NPTk5FQ1QgbWVzc2FnZSwKLSAqIHRoZSBjb21tYW5kIHN0cnVjdHVyZSBpcyBwbGFjZWQgaW50byB0aGUgcGVyIGluc3RhbmNlIGRpc2Nvbm5lY3RlZAotICogcXVldWUsIGFuZCBOQ1I1MzgwX21haW4gdHJpZXMgdG8gZmluZCBtb3JlIHdvcmsuICBJZiBVU0xFRVAKLSAqIHdhcyBkZWZpbmVkLCBhbmQgdGhlIHRhcmdldCBpcyBpZGxlIGZvciB0b28gbG9uZywgdGhlIHN5c3RlbQotICogd2lsbCB0cnkgdG8gc2xlZXAuCi0gKgotICogSWYgYSBjb21tYW5kIGhhcyBkaXNjb25uZWN0ZWQsIGV2ZW50dWFsbHkgYW4gaW50ZXJydXB0IHdpbGwgdHJpZ2dlciwKLSAqIGNhbGxpbmcgTkNSNTM4MF9pbnRyKCkgIHdoaWNoIHdpbGwgaW4gdHVybiBjYWxsIE5DUjUzODBfcmVzZWxlY3QKLSAqIHRvIHJlZXN0YWJsaXNoIGEgbmV4dXMuICBUaGlzIHdpbGwgcnVuIG1haW4gaWYgbmVjZXNzYXJ5LgotICoKLSAqIE9uIGNvbW1hbmQgdGVybWluYXRpb24sIHRoZSBkb25lIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFzIAotICogYXBwcm9wcmlhdGUuCi0gKgotICogU0NTSSBwb2ludGVycyBhcmUgbWFpbnRhaW5lZCBpbiB0aGUgU0NwIGZpZWxkIG9mIFNDU0kgY29tbWFuZCAKLSAqIHN0cnVjdHVyZXMsIGJlaW5nIGluaXRpYWxpemVkIGFmdGVyIHRoZSBjb21tYW5kIGlzIGNvbm5lY3RlZAotICogaW4gTkNSNTM4MF9zZWxlY3QsIGFuZCBzZXQgYXMgYXBwcm9wcmlhdGUgaW4gTkNSNTM4MF9pbmZvcm1hdGlvbl90cmFuc2Zlci4KLSAqIE5vdGUgdGhhdCBpbiB2aW9sYXRpb24gb2YgdGhlIHN0YW5kYXJkLCBhbiBpbXBsaWNpdCBTQVZFIFBPSU5URVJTIG9wZXJhdGlvbgotICogaXMgZG9uZSwgc2luY2Ugc29tZSBCUk9LRU4gZGlza3MgZmFpbCB0byBpc3N1ZSBhbiBleHBsaWNpdCBTQVZFIFBPSU5URVJTLgotICovCi0KLS8qCi0gKiBVc2luZyB0aGlzIGZpbGUgOgotICogVGhpcyBmaWxlIGEgc2tlbGV0b24gTGludXggU0NTSSBkcml2ZXIgZm9yIHRoZSBOQ1IgNTM4MCBzZXJpZXMKLSAqIG9mIGNoaXBzLiAgVG8gdXNlIGl0LCB5b3Ugd3JpdGUgYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZ1bmN0aW9ucyAKLSAqIGFuZCBtYWNyb3MgYW5kIGluY2x1ZGUgdGhpcyBmaWxlIGluIHlvdXIgZHJpdmVyLgotICoKLSAqIFRoZXNlIG1hY3JvcyBjb250cm9sIG9wdGlvbnMgOiAKLSAqIEFVVE9TRU5TRSAtIGlmIGRlZmluZWQsIFJFUVVFU1QgU0VOU0Ugd2lsbCBiZSBwZXJmb3JtZWQgYXV0b21hdGljYWxseQotICoJZm9yIGNvbW1hbmRzIHRoYXQgcmV0dXJuIHdpdGggYSBDSEVDSyBDT05ESVRJT04gc3RhdHVzLiAKLSAqCi0gKiBMSU5LRUQgLSBpZiBkZWZpbmVkLCBsaW5rZWQgY29tbWFuZHMgYXJlIHN1cHBvcnRlZC4KLSAqCi0gKiBSRUFMX0RNQSAtIGlmIGRlZmluZWQsIFJFQUwgRE1BIGlzIHVzZWQgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyIHBoYXNlcy4KLSAqCi0gKiBTVVBQT1JUX1RBR1MgLSBpZiBkZWZpbmVkLCBTQ1NJLTIgdGFnZ2VkIHF1ZXVpbmcgaXMgdXNlZCB3aGVyZSBwb3NzaWJsZQotICoKLSAqIFRoZXNlIG1hY3JvcyBNVVNUIGJlIGRlZmluZWQgOgotICogCi0gKiBOQ1I1MzgwX3JlYWQocmVnaXN0ZXIpICAtIHJlYWQgZnJvbSB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyCi0gKgotICogTkNSNTM4MF93cml0ZShyZWdpc3RlciwgdmFsdWUpIC0gd3JpdGUgdG8gdGhlIHNwZWNpZmljIHJlZ2lzdGVyIAotICoKLSAqIEVpdGhlciByZWFsIERNQSAqb3IqIHBzZXVkbyBETUEgbWF5IGJlIGltcGxlbWVudGVkCi0gKiBSRUFMIGZ1bmN0aW9ucyA6IAotICogTkNSNTM4MF9SRUFMX0RNQSBzaG91bGQgYmUgZGVmaW5lZCBpZiByZWFsIERNQSBpcyB0byBiZSB1c2VkLgotICogTm90ZSB0aGF0IHRoZSBETUEgc2V0dXAgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyAKLSAqCXRoYXQgdGhleSB3ZXJlIGFibGUgdG8gcHJvZ3JhbSB0aGUgY29udHJvbGxlciBmb3IuCi0gKgotICogQWxzbyBub3RlIHRoYXQgZ2VuZXJpYyBpMzg2L1BDIHZlcnNpb25zIG9mIHRoZXNlIG1hY3JvcyBhcmUgCi0gKglhdmFpbGFibGUgYXMgTkNSNTM4MF9pMzg2X2RtYV93cml0ZV9zZXR1cCwKLSAqCU5DUjUzODBfaTM4Nl9kbWFfcmVhZF9zZXR1cCwgYW5kIE5DUjUzODBfaTM4Nl9kbWFfcmVzaWR1YWwuCi0gKgotICogTkNSNTM4MF9kbWFfd3JpdGVfc2V0dXAoaW5zdGFuY2UsIHNyYywgY291bnQpIC0gaW5pdGlhbGl6ZQotICogTkNSNTM4MF9kbWFfcmVhZF9zZXR1cChpbnN0YW5jZSwgZHN0LCBjb3VudCkgLSBpbml0aWFsaXplCi0gKiBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSk7IC0gcmVzaWR1YWwgY291bnQKLSAqCi0gKiBQU0VVRE8gZnVuY3Rpb25zIDoKLSAqIE5DUjUzODBfcHdyaXRlKGluc3RhbmNlLCBzcmMsIGNvdW50KQotICogTkNSNTM4MF9wcmVhZChpbnN0YW5jZSwgZHN0LCBjb3VudCk7Ci0gKgotICogSWYgbm90aGluZyBzcGVjaWZpYyB0byB0aGlzIGltcGxlbWVudGF0aW9uIG5lZWRzIGRvaW5nIChpZSwgd2l0aCBleHRlcm5hbAotICogaGFyZHdhcmUpLCB5b3UgbXVzdCBhbHNvIGRlZmluZSAKLSAqICAKLSAqIE5DUjUzODBfcXVldWVfY29tbWFuZAotICogTkNSNTM4MF9yZXNldAotICogTkNSNTM4MF9hYm9ydAotICogTkNSNTM4MF9wcm9jX2luZm8KLSAqCi0gKiB0byBiZSB0aGUgZ2xvYmFsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBzcGVjaWZpYyBkcml2ZXIsIGllIAotICogI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgdDEyOF9xdWV1ZV9jb21tYW5kLgotICoKLSAqIElmIHRoaXMgaXMgbm90IGRvbmUsIHRoZSByb3V0aW5lcyB3aWxsIGJlIGRlZmluZWQgYXMgc3RhdGljIGZ1bmN0aW9ucwotICogd2l0aCB0aGUgTkNSNTM4MCogbmFtZXMgYW5kIHRoZSB1c2VyIG11c3QgcHJvdmlkZSBhIGdsb2JhbGx5Ci0gKiBhY2Nlc3NpYmxlIHdyYXBwZXIgZnVuY3Rpb24uCi0gKgotICogVGhlIGdlbmVyaWMgZHJpdmVyIGlzIGluaXRpYWxpemVkIGJ5IGNhbGxpbmcgTkNSNTM4MF9pbml0KGluc3RhbmNlKSwKLSAqIGFmdGVyIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIGhvc3Qgc3BlY2lmaWMgZmllbGRzIGFuZCBJRC4gIElmIHRoZSAKLSAqIGRyaXZlciB3aXNoZXMgdG8gYXV0b3Byb2JlIGZvciBhbiBJUlEgbGluZSwgdGhlIE5DUjUzODBfcHJvYmVfaXJxKGluc3RhbmNlLAotICogcG9zc2libGUpIGZ1bmN0aW9uIG1heSBiZSB1c2VkLiAgQmVmb3JlIHRoZSBzcGVjaWZpYyBkcml2ZXIgaW5pdGlhbGl6YXRpb24KLSAqIGNvZGUgZmluaXNoZXMsIE5DUjUzODBfcHJpbnRfb3B0aW9ucyBzaG91bGQgYmUgY2FsbGVkLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpmaXJzdF9pbnN0YW5jZSA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdGhlX3RlbXBsYXRlID0gTlVMTDsKLQotLyogTWFjcm9zIGVhc2UgbGlmZS4uLiA6LSkgKi8KLSNkZWZpbmUJU0VUVVBfSE9TVERBVEEoaW4pCQkJCVwKLSAgICBzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQkJCVwKLQkoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaW4pLT5ob3N0ZGF0YQotI2RlZmluZQlIT1NUREFUQShpbikgKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKShpbiktPmhvc3RkYXRhKQotCi0jZGVmaW5lCU5FWFQoY21kKQkJKChzdHJ1Y3Qgc2NzaV9jbW5kICopKGNtZCktPmhvc3Rfc2NyaWJibGUpCi0jZGVmaW5lCVNFVF9ORVhUKGNtZCwgbmV4dCkJKChjbWQpLT5ob3N0X3NjcmliYmxlID0gKHZvaWQgKikobmV4dCkpCi0jZGVmaW5lCU5FWFRBRERSKGNtZCkJCSgoc3RydWN0IHNjc2lfY21uZCAqKikmKChjbWQpLT5ob3N0X3NjcmliYmxlKSkKLQotI2RlZmluZQlIT1NUTk8JCWluc3RhbmNlLT5ob3N0X25vCi0jZGVmaW5lCUhfTk8oY21kKQkoY21kKS0+ZGV2aWNlLT5ob3N0LT5ob3N0X25vCi0KLSNkZWZpbmUgU0dBRERSKGJ1ZmZlcikgKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKXNnX3ZpcnQoKChidWZmZXIpKSkpKQotCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0KLS8qCi0gKiBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHRhZ2dlZCBxdWV1aW5nCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogKytyb21hbiAoMDEvOTYpOiBOb3cgSSd2ZSBpbXBsZW1lbnRlZCBTQ1NJLTIgdGFnZ2VkIHF1ZXVpbmcuIFNvbWUgbm90ZXM6Ci0gKgotICogVXNpbmcgY29uc2VjdXRpdmUgbnVtYmVycyBmb3IgdGhlIHRhZ3MgaXMgbm8gZ29vZCBpZGVhIGluIG15IGV5ZXMuIFRoZXJlCi0gKiBjb3VsZCBiZSB3cm9uZyByZS11c2luZ3MgaWYgdGhlIGNvdW50ZXIgKDggYml0ISkgd3JhcHMgYW5kIHNvbWUgZWFybHkKLSAqIGNvbW1hbmQgaGFzIGJlZW4gcHJlZW1wdGVkIGZvciBhIGxvbmcgdGltZS4gTXkgc29sdXRpb246IGEgYml0ZmllbGQgZm9yCi0gKiByZW1lbWJlcmluZyB1c2VkIHRhZ3MuCi0gKgotICogVGhlcmUncyBhbHNvIHRoZSBwcm9ibGVtIHRoYXQgZWFjaCB0YXJnZXQgaGFzIGEgY2VydGFpbiBxdWV1ZSBzaXplLCBidXQgd2UKLSAqIGNhbm5vdCBrbm93IGl0IGluIGFkdmFuY2UgOi0oIFdlIGp1c3Qgc2VlIGEgUVVFVUVfRlVMTCBzdGF0dXMgYmVpbmcKLSAqIHJldHVybmVkLiBTbywgaW4gdGhpcyBjYXNlLCB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIHNpemUgYXNzdW1wdGlvbiBpcwotICogcmVkdWNlZCB0byB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB0YWdzIGlmIFFVRVVFX0ZVTEwgaXMgcmV0dXJuZWQgYnkgdGhlCi0gKiB0YXJnZXQuIFRoZSBjb21tYW5kIGlzIHJldHVybmVkIHRvIHRoZSBtaWQtbGV2ZWwsIGJ1dCB3aXRoIHN0YXR1cyBjaGFuZ2VkCi0gKiB0byBCVVNZLCBzaW5jZSAtLWFzIEkndmUgc2Vlbi0tIHRoZSBtaWQtbGV2ZWwgY2FuJ3QgaGFuZGxlIFFVRVVFX0ZVTEwKLSAqIGNvcnJlY3RseS4KLSAqCi0gKiBXZSdyZSBhbHNvIG5vdCBhbGxvd2VkIHJ1bm5pbmcgdGFnZ2VkIGNvbW1hbmRzIGFzIGxvbmcgYXMgYW4gdW50YWdnZWQKLSAqIGNvbW1hbmQgaXMgYWN0aXZlLiBBbmQgUkVRVUVTVCBTRU5TRSBjb21tYW5kcyBhZnRlciBhIGNvbnRpbmdlbnQgYWxsZWdpYW5jZQotICogY29uZGl0aW9uIF9tdXN0XyBiZSB1bnRhZ2dlZC4gVG8ga2VlcCB0cmFjayB3aGV0aGVyIGFuIHVudGFnZ2VkIGNvbW1hbmQgaGFzCi0gKiBiZWVuIGlzc3VlZCwgdGhlIGhvc3QtPmJ1c3kgYXJyYXkgaXMgc3RpbGwgZW1wbG95ZWQsIGFzIGl0IGlzIHdpdGhvdXQKLSAqIHN1cHBvcnQgZm9yIHRhZ2dlZCBxdWV1aW5nLgotICoKLSAqIE9uZSBjb3VsZCBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuCi0gKiBpc19sdW5fYnVzeSgpLCBjbWRfZ2V0X3RhZygpIGFuZCBjbWRfZnJlZV90YWcoKS4gQnV0IEkgdGhpbmsgdGhpcyBpc24ndCB0aGUKLSAqIGNhc2U6IGlzX2x1bl9idXN5KCkgYW5kIGNtZF9nZXRfdGFnKCkgYXJlIGJvdGggY2FsbGVkIGZyb20gTkNSNTM4MF9tYWluKCksCi0gKiB3aGljaCBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gYmUgcnVubmluZyBhdCBtb3N0IG9uY2UuIEl0IGlzIGFsc28gdGhlIG9ubHkKLSAqIHBsYWNlIHdoZXJlIHRhZ3MvTFVOcyBhcmUgYWxsb2NhdGVkLiBTbyBubyBvdGhlciBhbGxvY2F0aW9uIGNhbiBzbGlwCi0gKiBiZXR3ZWVuIHRoYXQgcGFpciwgdGhlcmUgY291bGQgb25seSBoYXBwZW4gYSByZXNlbGVjdGlvbiwgd2hpY2ggY2FuIGZyZWUgYQotICogdGFnLCBidXQgdGhhdCBkb2Vzbid0IGh1cnQuIE9ubHkgdGhlIHNlcXVlbmNlIGluIGNtZF9mcmVlX3RhZygpIGJlY29tZXMKLSAqIGltcG9ydGFudDogdGhlIHRhZyBiaXQgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSAnbnJfYWxsb2NhdGVkJyBpcyBkZWNyZWFzZWQuCi0gKi8KLQotLyogLTEgZm9yIFRBR19OT05FIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHVuc2lnbmVkIGNoYXIgY21kLT50YWcgKi8KLSN1bmRlZiBUQUdfTk9ORQotI2RlZmluZSBUQUdfTk9ORSAweGZmCi0KLS8qIEZvciB0aGUgbTY4aywgdGhlIG51bWJlciBvZiBiaXRzIGluICdhbGxvY2F0ZWQnIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMiEgKi8KLSNpZiAoTUFYX1RBR1MgJSAzMikgIT0gMAotI2Vycm9yICJNQVhfVEFHUyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIhIgotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyCWFsbG9jYXRlZFtNQVhfVEFHUy84XTsKLSAgICBpbnQJCW5yX2FsbG9jYXRlZDsKLSAgICBpbnQJCXF1ZXVlX3NpemU7Ci19IFRBR19BTExPQzsKLQotc3RhdGljIFRBR19BTExPQyBUYWdBbGxvY1s4XVs4XTsgLyogOCB0YXJnZXRzIGFuZCA4IExVTnMgKi8KLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF90YWdzKCB2b2lkICkKLXsKLSAgICBpbnQgdGFyZ2V0LCBsdW47Ci0gICAgVEFHX0FMTE9DICp0YTsKLSAgICAKLSAgICBpZiAoIXNldHVwX3VzZV90YWdnZWRfcXVldWluZykKLQlyZXR1cm47Ci0gICAgCi0gICAgZm9yKCB0YXJnZXQgPSAwOyB0YXJnZXQgPCA4OyArK3RhcmdldCApIHsKLQlmb3IoIGx1biA9IDA7IGx1biA8IDg7ICsrbHVuICkgewotCSAgICB0YSA9ICZUYWdBbGxvY1t0YXJnZXRdW2x1bl07Ci0JICAgIG1lbXNldCggJnRhLT5hbGxvY2F0ZWQsIDAsIE1BWF9UQUdTLzggKTsKLQkgICAgdGEtPm5yX2FsbG9jYXRlZCA9IDA7Ci0JICAgIC8qIEF0IHRoZSBiZWdpbm5pbmcsIGFzc3VtZSB0aGUgbWF4aW11bSBxdWV1ZSBzaXplIHdlIGNvdWxkCi0JICAgICAqIHN1cHBvcnQgKE1BWF9UQUdTKS4gVGhpcyB2YWx1ZSB3aWxsIGJlIGRlY3JlYXNlZCBpZiB0aGUgdGFyZ2V0Ci0JICAgICAqIHJldHVybnMgUVVFVUVfRlVMTCBzdGF0dXMuCi0JICAgICAqLwotCSAgICB0YS0+cXVldWVfc2l6ZSA9IE1BWF9UQUdTOwotCX0KLSAgICB9Ci19Ci0KLQotLyogQ2hlY2sgaWYgd2UgY2FuIGlzc3VlIGEgY29tbWFuZCB0byB0aGlzIExVTjogRmlyc3Qgc2VlIGlmIHRoZSBMVU4gaXMgbWFya2VkCi0gKiBidXN5IGJ5IGFuIHVudGFnZ2VkIGNvbW1hbmQuIElmIHRoZSBjb21tYW5kIHNob3VsZCB1c2UgdGFnZ2VkIHF1ZXVpbmcsIGFsc28KLSAqIGNoZWNrIHRoYXQgdGhlcmUgaXMgYSBmcmVlIHRhZyBhbmQgdGhlIHRhcmdldCdzIHF1ZXVlIHdvbid0IG92ZXJmbG93LiBUaGlzCi0gKiBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCB0byBhdm9pZCByYWNlCi0gKiBjb25kaXRpb25zLgotICovIAotCi1zdGF0aWMgaW50IGlzX2x1bl9idXN5KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHNob3VsZF9iZV90YWdnZWQpCi17Ci0gICAgdTggbHVuID0gY21kLT5kZXZpY2UtPmx1bjsKLSAgICBTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7Ci0KLSAgICBpZiAoaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmICgxIDw8IGx1bikpCi0JcmV0dXJuKCAxICk7Ci0gICAgaWYgKCFzaG91bGRfYmVfdGFnZ2VkIHx8Ci0JIXNldHVwX3VzZV90YWdnZWRfcXVldWluZyB8fCAhY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JcmV0dXJuKCAwICk7Ci0gICAgaWYgKFRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXS5ucl9hbGxvY2F0ZWQgPj0KLQlUYWdBbGxvY1tjbWQtPmRldmljZS0+aWRdW2x1bl0ucXVldWVfc2l6ZSApIHsKLQlkcHJpbnRrKE5ERUJVR19UQUdTLCAgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlZDogbm8gZnJlZSB0YWdzXG4iLAotCQkgICAgSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGx1biApOwotCXJldHVybiggMSApOwotICAgIH0KLSAgICByZXR1cm4oIDAgKTsKLX0KLQotCi0vKiBBbGxvY2F0ZSBhIHRhZyBmb3IgYSBjb21tYW5kICh0aGVyZSBhcmUgbm8gY2hlY2tzIGFueW1vcmUsIGNoZWNrX2x1bl9idXN5KCkKLSAqIG11c3QgYmUgY2FsbGVkIGJlZm9yZSEpLCBvciByZXNlcnZlIHRoZSBMVU4gaW4gJ2J1c3knIGlmIHRoZSBjb21tYW5kIGlzCi0gKiB1bnRhZ2dlZC4KLSAqLwotCi1zdGF0aWMgdm9pZCBjbWRfZ2V0X3RhZyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCBzaG91bGRfYmVfdGFnZ2VkKQotewotICAgIHU4IGx1biA9IGNtZC0+ZGV2aWNlLT5sdW47Ci0gICAgU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwotCi0gICAgLyogSWYgd2Ugb3IgdGhlIHRhcmdldCBkb24ndCBzdXBwb3J0IHRhZ2dlZCBxdWV1aW5nLCBhbGxvY2F0ZSB0aGUgTFVOIGZvcgotICAgICAqIGFuIHVudGFnZ2VkIGNvbW1hbmQuCi0gICAgICovCi0gICAgaWYgKCFzaG91bGRfYmVfdGFnZ2VkIHx8Ci0JIXNldHVwX3VzZV90YWdnZWRfcXVldWluZyB8fCAhY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQljbWQtPnRhZyA9IFRBR19OT05FOwotCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gfD0gKDEgPDwgbHVuKTsKLQlkcHJpbnRrKE5ERUJVR19UQUdTLCAgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlZCBub3cgYWxsb2NhdGVkIGJ5IHVudGFnZ2VkICIKLQkJICAgICJjb21tYW5kXG4iLCBIX05PKGNtZCksIGNtZC0+ZGV2aWNlLT5pZCwgbHVuICk7Ci0gICAgfQotICAgIGVsc2UgewotCVRBR19BTExPQyAqdGEgPSAmVGFnQWxsb2NbY21kLT5kZXZpY2UtPmlkXVtsdW5dOwotCi0JY21kLT50YWcgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCAmdGEtPmFsbG9jYXRlZCwgTUFYX1RBR1MgKTsKLQlzZXRfYml0KCBjbWQtPnRhZywgJnRhLT5hbGxvY2F0ZWQgKTsKLQl0YS0+bnJfYWxsb2NhdGVkKys7Ci0JZHByaW50ayhOREVCVUdfVEFHUywgICJzY3NpJWQ6IHVzaW5nIHRhZyAlZCBmb3IgdGFyZ2V0ICVkIGx1biAlZCAiCi0JCSAgICAiKG5vdyAlZCB0YWdzIGluIHVzZSlcbiIsCi0JCSAgICBIX05PKGNtZCksIGNtZC0+dGFnLCBjbWQtPmRldmljZS0+aWQsIGx1biwKLQkJICAgIHRhLT5ucl9hbGxvY2F0ZWQgKTsKLSAgICB9Ci19Ci0KLQotLyogTWFyayB0aGUgdGFnIG9mIGNvbW1hbmQgJ2NtZCcgYXMgZnJlZSwgb3IgaW4gY2FzZSBvZiBhbiB1bnRhZ2dlZCBjb21tYW5kLAotICogdW5sb2NrIHRoZSBMVU4uCi0gKi8KLQotc3RhdGljIHZvaWQgY21kX2ZyZWVfdGFnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLSAgICB1OCBsdW4gPSBjbWQtPmRldmljZS0+bHVuOwotICAgIFNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKLQotICAgIGlmIChjbWQtPnRhZyA9PSBUQUdfTk9ORSkgewotCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IGx1bik7Ci0JZHByaW50ayhOREVCVUdfVEFHUywgICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWQgdW50YWdnZWQgY21kIGZpbmlzaGVkXG4iLAotCQkgICAgSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGx1biApOwotICAgIH0KLSAgICBlbHNlIGlmIChjbWQtPnRhZyA+PSBNQVhfVEFHUykgewotCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiB0cnlpbmcgdG8gZnJlZSBiYWQgdGFnICVkIVxuIiwKLQkJSF9OTyhjbWQpLCBjbWQtPnRhZyApOwotICAgIH0KLSAgICBlbHNlIHsKLQlUQUdfQUxMT0MgKnRhID0gJlRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXTsKLQljbGVhcl9iaXQoIGNtZC0+dGFnLCAmdGEtPmFsbG9jYXRlZCApOwotCXRhLT5ucl9hbGxvY2F0ZWQtLTsKLQlkcHJpbnRrKE5ERUJVR19UQUdTLCAgInNjc2klZDogZnJlZWQgdGFnICVkIGZvciB0YXJnZXQgJWQgbHVuICVkXG4iLAotCQkgICAgSF9OTyhjbWQpLCBjbWQtPnRhZywgY21kLT5kZXZpY2UtPmlkLCBsdW4gKTsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgZnJlZV9hbGxfdGFncyggdm9pZCApCi17Ci0gICAgaW50IHRhcmdldCwgbHVuOwotICAgIFRBR19BTExPQyAqdGE7Ci0KLSAgICBpZiAoIXNldHVwX3VzZV90YWdnZWRfcXVldWluZykKLQlyZXR1cm47Ci0gICAgCi0gICAgZm9yKCB0YXJnZXQgPSAwOyB0YXJnZXQgPCA4OyArK3RhcmdldCApIHsKLQlmb3IoIGx1biA9IDA7IGx1biA8IDg7ICsrbHVuICkgewotCSAgICB0YSA9ICZUYWdBbGxvY1t0YXJnZXRdW2x1bl07Ci0JICAgIG1lbXNldCggJnRhLT5hbGxvY2F0ZWQsIDAsIE1BWF9UQUdTLzggKTsKLQkgICAgdGEtPm5yX2FsbG9jYXRlZCA9IDA7Ci0JfQotICAgIH0KLX0KLQotI2VuZGlmIC8qIFNVUFBPUlRfVEFHUyAqLwotCi0KLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgaW5pdGlhbGl6ZV9TQ3Aoc3RydWN0IHNjc2lfY21uZCAqY21kKQotICoKLSAqIFB1cnBvc2UgOiBpbml0aWFsaXplIHRoZSBzYXZlZCBkYXRhIHBvaW50ZXJzIGZvciBjbWQgdG8gcG9pbnQgdG8gdGhlIAotICoJc3RhcnQgb2YgdGhlIGJ1ZmZlci4KLSAqCi0gKiBJbnB1dHMgOiBjbWQgLSBzdHJ1Y3Qgc2NzaV9jbW5kIHN0cnVjdHVyZSB0byBoYXZlIHBvaW50ZXJzIHJlc2V0LgotICovCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaW5pdGlhbGl6ZV9TQ3Aoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotICAgIC8qIAotICAgICAqIEluaXRpYWxpemUgdGhlIFNjc2kgUG9pbnRlciBmaWVsZCBzbyB0aGF0IGFsbCBvZiB0aGUgY29tbWFuZHMgaW4gdGhlIAotICAgICAqIHZhcmlvdXMgcXVldWVzIGFyZSB2YWxpZC4KLSAgICAgKi8KLQotICAgIGlmIChzY3NpX2J1ZmZsZW4oY21kKSkgewotCWNtZC0+U0NwLmJ1ZmZlciA9IHNjc2lfc2dsaXN0KGNtZCk7Ci0JY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCA9IHNjc2lfc2dfY291bnQoY21kKSAtIDE7Ci0JY21kLT5TQ3AucHRyID0gKGNoYXIgKikgU0dBRERSKGNtZC0+U0NwLmJ1ZmZlcik7Ci0JY21kLT5TQ3AudGhpc19yZXNpZHVhbCA9IGNtZC0+U0NwLmJ1ZmZlci0+bGVuZ3RoOwotICAgIH0gZWxzZSB7Ci0JY21kLT5TQ3AuYnVmZmVyID0gTlVMTDsKLQljbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsID0gMDsKLQljbWQtPlNDcC5wdHIgPSBOVUxMOwotCWNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgPSAwOwotICAgIH0KLSAgICAKLX0KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpZiBOREVCVUcKLXN0YXRpYyBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIGNoYXIgbWFzazsKLSAgICBjb25zdCBjaGFyICogbmFtZTt9IAotc2lnbmFsc1tdID0ge3sgU1JfREJQLCAiUEFSSVRZIn0sIHsgU1JfUlNULCAiUlNUIiB9LCB7IFNSX0JTWSwgIkJTWSIgfSwgCi0gICAgeyBTUl9SRVEsICJSRVEiIH0sIHsgU1JfTVNHLCAiTVNHIiB9LCB7IFNSX0NELCAgIkNEIiB9LCB7IFNSX0lPLCAiSU8iIH0sIAotICAgIHsgU1JfU0VMLCAiU0VMIiB9LCB7MCwgTlVMTH19LCAKLWJhc3JzW10gPSB7e0JBU1JfQVROLCAiQVROIn0sIHtCQVNSX0FDSywgIkFDSyJ9LCB7MCwgTlVMTH19LAotaWNyc1tdID0ge3tJQ1JfQVNTRVJUX1JTVCwgIkFTU0VSVCBSU1QifSx7SUNSX0FTU0VSVF9BQ0ssICJBU1NFUlQgQUNLIn0sCi0gICAge0lDUl9BU1NFUlRfQlNZLCAiQVNTRVJUIEJTWSJ9LCB7SUNSX0FTU0VSVF9TRUwsICJBU1NFUlQgU0VMIn0sIAotICAgIHtJQ1JfQVNTRVJUX0FUTiwgIkFTU0VSVCBBVE4ifSwge0lDUl9BU1NFUlRfREFUQSwgIkFTU0VSVCBEQVRBIn0sIAotICAgIHswLCBOVUxMfX0sCi1tcnNbXSA9IHt7TVJfQkxPQ0tfRE1BX01PREUsICJNT0RFIEJMT0NLIERNQSJ9LCB7TVJfVEFSR0VULCAiTU9ERSBUQVJHRVQifSwgCi0gICAge01SX0VOQUJMRV9QQVJfQ0hFQ0ssICJNT0RFIFBBUklUWSBDSEVDSyJ9LCB7TVJfRU5BQkxFX1BBUl9JTlRSLCAKLSAgICAiTU9ERSBQQVJJVFkgSU5UUiJ9LCB7TVJfRU5BQkxFX0VPUF9JTlRSLCJNT0RFIEVPUCBJTlRSIn0sCi0gICAge01SX01PTklUT1JfQlNZLCAiTU9ERSBNT05JVE9SIEJTWSJ9LAotICAgIHtNUl9ETUFfTU9ERSwgIk1PREUgRE1BIn0sIHtNUl9BUkJJVFJBVEUsICJNT0RFIEFSQklUUkFUSU9OIn0sIAotICAgIHswLCBOVUxMfX07Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9wcmludChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLSAqCi0gKiBQdXJwb3NlIDogcHJpbnQgdGhlIFNDU0kgYnVzIHNpZ25hbHMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwotICoKLSAqIElucHV0IDogaW5zdGFuY2UgLSB3aGljaCBOQ1I1MzgwCi0gKi8KLQotc3RhdGljIHZvaWQgTkNSNTM4MF9wcmludChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkgewotICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzLCBkYXRhLCBiYXNyLCBtciwgaWNyLCBpOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0gICAgZGF0YSA9IE5DUjUzODBfcmVhZChDVVJSRU5UX1NDU0lfREFUQV9SRUcpOwotICAgIHN0YXR1cyA9IE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKTsKLSAgICBtciA9IE5DUjUzODBfcmVhZChNT0RFX1JFRyk7Ci0gICAgaWNyID0gTkNSNTM4MF9yZWFkKElOSVRJQVRPUl9DT01NQU5EX1JFRyk7Ci0gICAgYmFzciA9IE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpOwotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSAgICBwcmludGsoIlNUQVRVU19SRUc6ICUwMnggIiwgc3RhdHVzKTsKLSAgICBmb3IgKGkgPSAwOyBzaWduYWxzW2ldLm1hc2sgOyArK2kpIAotCWlmIChzdGF0dXMgJiBzaWduYWxzW2ldLm1hc2spCi0JICAgIHByaW50aygiLCVzIiwgc2lnbmFsc1tpXS5uYW1lKTsKLSAgICBwcmludGsoIlxuQkFTUjogJTAyeCAiLCBiYXNyKTsKLSAgICBmb3IgKGkgPSAwOyBiYXNyc1tpXS5tYXNrIDsgKytpKSAKLQlpZiAoYmFzciAmIGJhc3JzW2ldLm1hc2spCi0JICAgIHByaW50aygiLCVzIiwgYmFzcnNbaV0ubmFtZSk7Ci0gICAgcHJpbnRrKCJcbklDUjogJTAyeCAiLCBpY3IpOwotICAgIGZvciAoaSA9IDA7IGljcnNbaV0ubWFzazsgKytpKSAKLQlpZiAoaWNyICYgaWNyc1tpXS5tYXNrKQotCSAgICBwcmludGsoIiwlcyIsIGljcnNbaV0ubmFtZSk7Ci0gICAgcHJpbnRrKCJcbk1PREU6ICUwMnggIiwgbXIpOwotICAgIGZvciAoaSA9IDA7IG1yc1tpXS5tYXNrOyArK2kpIAotCWlmIChtciAmIG1yc1tpXS5tYXNrKQotCSAgICBwcmludGsoIiwlcyIsIG1yc1tpXS5uYW1lKTsKLSAgICBwcmludGsoIlxuIik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIGNoYXIgdmFsdWU7Ci0gICAgY29uc3QgY2hhciAqbmFtZTsKLX0gcGhhc2VzW10gPSB7Ci0gICAge1BIQVNFX0RBVEFPVVQsICJEQVRBT1VUIn0sIHtQSEFTRV9EQVRBSU4sICJEQVRBSU4ifSwge1BIQVNFX0NNRE9VVCwgIkNNRE9VVCJ9LAotICAgIHtQSEFTRV9TVEFUSU4sICJTVEFUSU4ifSwge1BIQVNFX01TR09VVCwgIk1TR09VVCJ9LCB7UEhBU0VfTVNHSU4sICJNU0dJTiJ9LAotICAgIHtQSEFTRV9VTktOT1dOLCAiVU5LTk9XTiJ9fTsKLQotLyogCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9wcmludF9waGFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLSAqCi0gKiBQdXJwb3NlIDogcHJpbnQgdGhlIGN1cnJlbnQgU0NTSSBwaGFzZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCi0gKgotICogSW5wdXQgOiBpbnN0YW5jZSAtIHdoaWNoIE5DUjUzODAKLSAqLwotCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50X3BoYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotewotICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzOwotICAgIGludCBpOwotCi0gICAgc3RhdHVzID0gTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpOwotICAgIGlmICghKHN0YXR1cyAmIFNSX1JFUSkpIAotCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IFJFUSBub3QgYXNzZXJ0ZWQsIHBoYXNlIHVua25vd24uXG4iLCBIT1NUTk8pOwotICAgIGVsc2UgewotCWZvciAoaSA9IDA7IChwaGFzZXNbaV0udmFsdWUgIT0gUEhBU0VfVU5LTk9XTikgJiYgCi0JICAgIChwaGFzZXNbaV0udmFsdWUgIT0gKHN0YXR1cyAmIFBIQVNFX01BU0spKTsgKytpKTsgCi0JcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcGhhc2UgJXNcbiIsIEhPU1ROTywgcGhhc2VzW2ldLm5hbWUpOwotICAgIH0KLX0KLQotI2VuZGlmCi0KLS8qCi0gKiArK3JvbWFuOiBOZXcgc2NoZW1lIG9mIGNhbGxpbmcgTkNSNTM4MF9tYWluKCkKLSAqIAotICogSWYgd2UncmUgbm90IGluIGFuIGludGVycnVwdCwgd2UgY2FuIGNhbGwgb3VyIG1haW4gZGlyZWN0bHksIGl0IGNhbm5vdCBiZQotICogYWxyZWFkeSBydW5uaW5nLiBFbHNlLCB3ZSBxdWV1ZSBpdCBvbiBhIHRhc2sgcXVldWUsIGlmIG5vdCAnbWFpbl9ydW5uaW5nJwotICogdGVsbHMgdXMgdGhhdCBhIGxvd2VyIGxldmVsIGlzIGFscmVhZHkgZXhlY3V0aW5nIGl0LiBUaGlzIHdheSwKLSAqICdtYWluX3J1bm5pbmcnIG5lZWRzIG5vdCBiZSBwcm90ZWN0ZWQgaW4gYSBzcGVjaWFsIHdheS4KLSAqCi0gKiBxdWV1ZV9tYWluKCkgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvciBwdXR0aW5nIG91ciBtYWluIG9udG8gdGhlIHRhc2sKLSAqIHF1ZXVlLCBpZiBtYWluX3J1bm5pbmcgaXMgZmFsc2UuIEl0IHNob3VsZCBiZSBjYWxsZWQgb25seSBmcm9tIGEKLSAqIGludGVycnVwdCBvciBib3R0b20gaGFsZi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLXN0YXRpYyB2b2xhdGlsZSBpbnQgbWFpbl9ydW5uaW5nID0gMDsKLXN0YXRpYyBERUNMQVJFX1dPUksoTkNSNTM4MF90cXVldWUsIE5DUjUzODBfbWFpbik7Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcXVldWVfbWFpbih2b2lkKQotewotICAgIGlmICghbWFpbl9ydW5uaW5nKSB7Ci0JLyogSWYgaW4gaW50ZXJydXB0IGFuZCBOQ1I1MzgwX21haW4oKSBub3QgYWxyZWFkeSBydW5uaW5nLAotCSAgIHF1ZXVlIGl0IG9uIHRoZSAnaW1tZWRpYXRlJyB0YXNrIHF1ZXVlLCB0byBiZSBwcm9jZXNzZWQKLQkgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgY3VycmVudCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMKLQkgICBmaW5pc2hlZC4gKi8KLQlzY2hlZHVsZV93b3JrKCZOQ1I1MzgwX3RxdWV1ZSk7Ci0gICAgfQotICAgIC8qIGVsc2U6IG5vdGhpbmcgdG8gZG86IHRoZSBydW5uaW5nIE5DUjUzODBfbWFpbigpIHdpbGwgcGljayB1cAotICAgICAgIGFueSBuZXdseSBxdWV1ZWQgY29tbWFuZC4gKi8KLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgTkNSNTM4MF9hbGxfaW5pdCAodm9pZCkKLXsKLSAgICBzdGF0aWMgaW50IGRvbmUgPSAwOwotICAgIGlmICghZG9uZSkgewotCWRwcmludGsoTkRFQlVHX0lOSVQsICJzY3NpIDogTkNSNTM4MF9hbGxfaW5pdCgpXG4iKTsKLQlkb25lID0gMTsKLSAgICB9Ci19Ci0KLSAKLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTgzODBfcHJpbnRfb3B0aW9ucyAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi0gKgotICogUHVycG9zZSA6IGNhbGxlZCBieSBwcm9iZSBjb2RlIGluZGljYXRpbmcgdGhlIE5DUjUzODAgZHJpdmVyCi0gKgkgICAgIG9wdGlvbnMgdGhhdCB3ZXJlIHNlbGVjdGVkLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlLCBwb2ludGVyIHRvIHRoaXMgaW5zdGFuY2UuICBVbnVzZWQuCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0IE5DUjUzODBfcHJpbnRfb3B0aW9ucyAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi17Ci0gICAgcHJpbnRrKCIgZ2VuZXJpYyBvcHRpb25zIgotI2lmZGVmIEFVVE9TRU5TRSAKLSAgICAiIEFVVE9TRU5TRSIKLSNlbmRpZgotI2lmZGVmIFJFQUxfRE1BCi0gICAgIiBSRUFMIERNQSIKLSNlbmRpZgotI2lmZGVmIFBBUklUWQotICAgICIgUEFSSVRZIgotI2VuZGlmCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0gICAgIiBTQ1NJLTIgVEFHR0VEIFFVRVVJTkciCi0jZW5kaWYKLSAgICApOwotICAgIHByaW50aygiIGdlbmVyaWMgcmVsZWFzZT0lZCIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwotfQotCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcHJpbnRfc3RhdHVzIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLSAqCi0gKiBQdXJwb3NlIDogcHJpbnQgY29tbWFuZHMgaW4gdGhlIHZhcmlvdXMgcXVldWVzLCBjYWxsZWQgZnJvbQotICoJTkNSNTM4MF9hYm9ydCBhbmQgTkNSNTM4MF9kZWJ1ZyB0byBhaWQgZGVidWdnaW5nLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlLCBwb2ludGVyIHRvIHRoaXMgaW5zdGFuY2UuICAKLSAqLwotCi1zdGF0aWMgdm9pZCBscHJpbnRfU2NzaV9DbW5kKFNjc2lfQ21uZCAqY21kKQotewotCWludCBpLCBzOwotCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQ7Ci0JcHJpbnRrKCJzY3NpJWQ6IGRlc3RpbmF0aW9uIHRhcmdldCAlZCwgbHVuICVsbHVcbiIsCi0JCUhfTk8oY21kKSwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQlwcmludGsoS0VSTl9DT05UICIgICAgICAgIGNvbW1hbmQgPSAiKTsKLQljb21tYW5kID0gY21kLT5jbW5kOwotCXByaW50ayhLRVJOX0NPTlQgIiUyZCAoMHglMDJ4KSIsIGNvbW1hbmRbMF0sIGNvbW1hbmRbMF0pOwotCWZvciAoaSA9IDEsIHMgPSBDT01NQU5EX1NJWkUoY29tbWFuZFswXSk7IGkgPCBzOyArK2kpCi0JCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgY29tbWFuZFtpXSk7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50X3N0YXR1cyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JU2NzaV9DbW5kICpwdHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCU5DUjUzODBfZHByaW50KE5ERUJVR19BTlksIGluc3RhbmNlKTsKLQlOQ1I1MzgwX2RwcmludF9waGFzZShOREVCVUdfQU5ZLCBpbnN0YW5jZSk7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YTsKLQotCXByaW50aygiXG5OQ1I1MzgwIGNvcmUgcmVsZWFzZT0lZC5cbiIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlwcmludGsoIk5DUjUzODA6IGNvcm91dGluZSBpcyVzIHJ1bm5pbmcuXG4iLAotCQltYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKLQlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCXByaW50aygic2NzaSVkOiBubyBjdXJyZW50bHkgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhPU1ROTyk7Ci0JZWxzZQotCQlscHJpbnRfU2NzaV9DbW5kKChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZCk7Ci0JcHJpbnRrKCJzY3NpJWQ6IGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCi0JCWxwcmludF9TY3NpX0NtbmQocHRyKTsKLQotCXByaW50aygic2NzaSVkOiBkaXNjb25uZWN0ZWRfcXVldWVcbiIsIEhPU1ROTyk7Ci0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsKLQkgICAgIHB0ciA9IE5FWFQocHRyKSkKLQkJbHByaW50X1Njc2lfQ21uZChwdHIpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgc2hvd19TY3NpX0NtbmQoU2NzaV9DbW5kICpjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKLXsKLQlpbnQgaSwgczsKLQl1bnNpZ25lZCBjaGFyICpjb21tYW5kOwotCXNlcV9wcmludGYobSwgInNjc2klZDogZGVzdGluYXRpb24gdGFyZ2V0ICVkLCBsdW4gJWxsdVxuIiwKLQkJSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgY29tbWFuZCA9ICIpOwotCWNvbW1hbmQgPSBjbWQtPmNtbmQ7Ci0Jc2VxX3ByaW50ZihtLCAiJTJkICgweCUwMngpIiwgY29tbWFuZFswXSwgY29tbWFuZFswXSk7Ci0JZm9yIChpID0gMSwgcyA9IENPTU1BTkRfU0laRShjb21tYW5kWzBdKTsgaSA8IHM7ICsraSkKLQkJc2VxX3ByaW50ZihtLCAiICUwMngiLCBjb21tYW5kW2ldKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOwotfQotCi1zdGF0aWMgaW50IE5DUjUzODBfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi17Ci0Jc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCVNjc2lfQ21uZCAqcHRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YTsKLQotCXNlcV9wcmludGYobSwgIk5DUjUzODAgY29yZSByZWxlYXNlPSVkLlxuIiwgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXNlcV9wcmludGYobSwgIk5DUjUzODA6IGNvcm91dGluZSBpcyVzIHJ1bm5pbmcuXG4iLAotCQltYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKLQlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCXNlcV9wcmludGYobSwgInNjc2klZDogbm8gY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kXG4iLCBIT1NUTk8pOwotCWVsc2UKLQkJc2hvd19TY3NpX0NtbmQoKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkLCBtKTsKLQlzZXFfcHJpbnRmKG0sICJzY3NpJWQ6IGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCi0JCXNob3dfU2NzaV9DbW5kKHB0ciwgbSk7Ci0KLQlzZXFfcHJpbnRmKG0sICJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgSE9TVE5PKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOwotCSAgICAgcHRyID0gTkVYVChwdHIpKQotCQlzaG93X1Njc2lfQ21uZChwdHIsIG0pOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0vKiAKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX2luaXQgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotICoKLSAqIFB1cnBvc2UgOiBpbml0aWFsaXplcyAqaW5zdGFuY2UgYW5kIGNvcnJlc3BvbmRpbmcgNTM4MCBjaGlwLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlIC0gaW5zdGFudGlhdGlvbiBvZiB0aGUgNTM4MCBkcml2ZXIuICAKLSAqCi0gKiBOb3RlcyA6IEkgYXNzdW1lIHRoYXQgdGhlIGhvc3QsIGhvc3RubywgYW5kIGlkIGJpdHMgaGF2ZSBiZWVuCi0gKiAJc2V0IGNvcnJlY3RseS4gIEkgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaXJxIGFuZCBvdGhlciBmaWVsZHMuIAotICogCi0gKi8KLQotc3RhdGljIGludCBfX2luaXQgTkNSNTM4MF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgZmxhZ3MpCi17Ci0gICAgaW50IGk7Ci0gICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotCi0gICAgTkNSNTM4MF9hbGxfaW5pdCgpOwotCi0gICAgaG9zdGRhdGEtPmFib3J0ZWQgPSAwOwotICAgIGhvc3RkYXRhLT5pZF9tYXNrID0gMSA8PCBpbnN0YW5jZS0+dGhpc19pZDsKLSAgICBob3N0ZGF0YS0+aWRfaGlnaGVyX21hc2sgPSAwOwotICAgIGZvciAoaSA9IGhvc3RkYXRhLT5pZF9tYXNrOyBpIDw9IDB4ODA7IGkgPDw9IDEpCi0JaWYgKGkgPiBob3N0ZGF0YS0+aWRfbWFzaykKLQkgICAgaG9zdGRhdGEtPmlkX2hpZ2hlcl9tYXNrIHw9IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkKLQlob3N0ZGF0YS0+YnVzeVtpXSA9IDA7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0gICAgaW5pdF90YWdzKCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkIChSRUFMX0RNQSkKLSAgICBob3N0ZGF0YS0+ZG1hX2xlbiA9IDA7Ci0jZW5kaWYKLSAgICBob3N0ZGF0YS0+dGFyZ2V0c19wcmVzZW50ID0gMDsKLSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLSAgICBob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBOVUxMOwotICAgIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwotICAgIGhvc3RkYXRhLT5mbGFncyA9IEZMQUdfQ0hFQ0tfTEFTVF9CWVRFX1NFTlQ7Ci0KLSAgICBpZiAoIXRoZV90ZW1wbGF0ZSkgewotCXRoZV90ZW1wbGF0ZSA9IGluc3RhbmNlLT5ob3N0dDsKLQlmaXJzdF9pbnN0YW5jZSA9IGluc3RhbmNlOwotICAgIH0KLQkKLQotI2lmbmRlZiBBVVRPU0VOU0UKLSAgICBpZiAoKGluc3RhbmNlLT5jbWRfcGVyX2x1biA+IDEpIHx8IChpbnN0YW5jZS0+Y2FuX3F1ZXVlID4gMSkpCi0JIHByaW50aygic2NzaSVkOiBXQVJOSU5HIDogc3VwcG9ydCBmb3IgbXVsdGlwbGUgb3V0c3RhbmRpbmcgY29tbWFuZHMgZW5hYmxlZFxuIgotCSAgICAgICAgIiAgICAgICAgd2l0aG91dCBBVVRPU0VOU0Ugb3B0aW9uLCBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9ucyBtYXlcbiIKLQkgICAgICAgICIgICAgICAgIGJlIGluY29ycmVjdGx5IGNsZWFyZWQuXG4iLCBIT1NUTk8pOwotI2VuZGlmIC8qIGRlZiBBVVRPU0VOU0UgKi8KLQotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0gICAgTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0gICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDApOwotICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIDApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIE5DUjUzODBfZXhpdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLXsKLQkvKiBFbXB0eSwgYXMgd2UgZGlkbid0IHNjaGVkdWxlIGFueSBkZWxheWVkIHdvcmsgKi8KLX0KLQotLyogCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKLSAqCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQotICoKLSAqIFB1cnBvc2UgOiAgZW5xdWV1ZXMgYSBTQ1NJIGNvbW1hbmQKLSAqCi0gKiBJbnB1dHMgOiBjbWQgLSBTQ1NJIGNvbW1hbmQsIGRvbmUgLSBmdW5jdGlvbiBjYWxsZWQgb24gY29tcGxldGlvbiwgd2l0aAotICoJYSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IuCi0gKiAKLSAqIFJldHVybnMgOiAwCi0gKgotICogU2lkZSBlZmZlY3RzIDogCi0gKiAgICAgIGNtZCBpcyBhZGRlZCB0byB0aGUgcGVyIGluc3RhbmNlIGlzc3VlX3F1ZXVlLCB3aXRoIG1pbm9yIAotICoJdHdpZGRsaW5nIGRvbmUgdG8gdGhlIGhvc3Qgc3BlY2lmaWMgZmllbGRzIG9mIGNtZC4gIElmIHRoZSAKLSAqCW1haW4gY29yb3V0aW5lIGlzIG5vdCBydW5uaW5nLCBpdCBpcyByZXN0YXJ0ZWQuCi0gKgotICovCi0KLS8qIE9ubHkgbWFrZSBzdGF0aWMgaWYgYSB3cmFwcGVyIGZ1bmN0aW9uIGlzIHVzZWQgKi8KLXN0YXRpYyBpbnQgTkNSNTM4MF9xdWV1ZV9jb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCQkJIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQotewotICAgIFNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICp0bXA7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQotI2lmIChOREVCVUcgJiBOREVCVUdfTk9fV1JJVEUpCi0gICAgc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKLSAgICBjYXNlIFdSSVRFXzY6Ci0gICAgY2FzZSBXUklURV8xMDoKLQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogV1JJVEUgYXR0ZW1wdGVkIHdpdGggTk9fV1JJVEUgZGVidWdnaW5nIGZsYWcgc2V0XG4iLAotCSAgICAgICBIX05PKGNtZCkpOwotCWNtZC0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNik7Ci0JZG9uZShjbWQpOwotCXJldHVybiAwOwotICAgIH0KLSNlbmRpZiAvKiAoTkRFQlVHICYgTkRFQlVHX05PX1dSSVRFKSAqLwotCi0KLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0jIGlmIDAKLSAgICBpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQgJiYgIWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSAmJgotCSFob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKSB7Ci0JaG9zdGRhdGEtPnRpbWViYXNlID0gamlmZmllczsKLSAgICB9Ci0jIGVuZGlmCi0jIGlmZGVmIE5DUjUzODBfU1RBVF9MSU1JVAotICAgIGlmIChzY3NpX2J1ZmZsZW4oY21kKSA+IE5DUjUzODBfU1RBVF9MSU1JVCkKLSMgZW5kaWYKLQlzd2l0Y2ggKGNtZC0+Y21uZFswXSkKLQl7Ci0JICAgIGNhc2UgV1JJVEU6Ci0JICAgIGNhc2UgV1JJVEVfNjoKLQkgICAgY2FzZSBXUklURV8xMDoKLQkJaG9zdGRhdGEtPnRpbWVfd3JpdGVbY21kLT5kZXZpY2UtPmlkXSAtPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCWhvc3RkYXRhLT5ieXRlc193cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOwotCQlob3N0ZGF0YS0+cGVuZGluZ3crKzsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgUkVBRDoKLQkgICAgY2FzZSBSRUFEXzY6Ci0JICAgIGNhc2UgUkVBRF8xMDoKLQkJaG9zdGRhdGEtPnRpbWVfcmVhZFtjbWQtPmRldmljZS0+aWRdIC09IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJaG9zdGRhdGEtPmJ5dGVzX3JlYWRbY21kLT5kZXZpY2UtPmlkXSArPSBzY3NpX2J1ZmZsZW4oY21kKTsKLQkJaG9zdGRhdGEtPnBlbmRpbmdyKys7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCi0gICAgLyogCi0gICAgICogV2UgdXNlIHRoZSBob3N0X3NjcmliYmxlIGZpZWxkIGFzIGEgcG9pbnRlciB0byB0aGUgbmV4dCBjb21tYW5kICAKLSAgICAgKiBpbiBhIHF1ZXVlIAotICAgICAqLwotCi0gICAgU0VUX05FWFQoY21kLCBOVUxMKTsKLSAgICBjbWQtPnNjc2lfZG9uZSA9IGRvbmU7Ci0KLSAgICBjbWQtPnJlc3VsdCA9IDA7Ci0KLQotICAgIC8qIAotICAgICAqIEluc2VydCB0aGUgY21kIGludG8gdGhlIGlzc3VlIHF1ZXVlLiBOb3RlIHRoYXQgUkVRVUVTVCBTRU5TRSAKLSAgICAgKiBjb21tYW5kcyBhcmUgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIHNpbmNlIGFueSBjb21tYW5kIHdpbGwKLSAgICAgKiBjbGVhciB0aGUgY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbiB0aGF0IGV4aXN0cyBhbmQgdGhlIAotICAgICAqIHNlbnNlIGRhdGEgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIHdoaWxlIHRoZSBjb25kaXRpb24gZXhpc3RzLgotICAgICAqLwotCi0gICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotICAgIC8qICsrZ3VlbnRoZXI6IG5vdyB0aGF0IHRoZSBpc3N1ZSBxdWV1ZSBpcyBiZWluZyBzZXQgdXAsIHdlIGNhbiBsb2NrIFNULURNQS4KLSAgICAgKiBPdGhlcndpc2UgYSBydW5uaW5nIE5DUjUzODBfbWFpbiBtYXkgc3RlYWwgdGhlIGxvY2suCi0gICAgICogTG9jayBiZWZvcmUgYWN0dWFsbHkgaW5zZXJ0aW5nIGR1ZSB0byBmYWlybmVzcyByZWFzb25zIGV4cGxhaW5lZCBpbgotICAgICAqIGF0YXJpX3Njc2kuYy4gSWYgd2UgaW5zZXJ0IGZpcnN0LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgdGhpcyBkcml2ZXIKLSAgICAgKiB0byByZWxlYXNlIHRoZSBsb2NrLgotICAgICAqIFN0b3AgdGltZXIgZm9yIHRoaXMgY29tbWFuZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbG9jaywgb3IgdGltZW91dHMKLSAgICAgKiBtYXkgaGFwcGVuIChhbmQgdGhleSByZWFsbHkgZG8pLCBhbmQgaXQncyBubyBnb29kIGlmIHRoZSBjb21tYW5kIGRvZXNuJ3QKLSAgICAgKiBhcHBlYXIgaW4gYW55IG9mIHRoZSBxdWV1ZXMuCi0gICAgICogKytyb21hbjogSnVzdCBkaXNhYmxpbmcgdGhlIE5DUiBpbnRlcnJ1cHQgaXNuJ3Qgc3VmZmljaWVudCBoZXJlLAotICAgICAqIGJlY2F1c2UgYWxzbyBhIHRpbWVyIGludCBjYW4gdHJpZ2dlciBhbiBhYm9ydCBvciByZXNldCwgd2hpY2ggd291bGQKLSAgICAgKiBhbHRlciBxdWV1ZXMgYW5kIHRvdWNoIHRoZSBsb2NrLgotICAgICAqLwotICAgIGlmICghKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSkgfHwgKGNtZC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSkgewotCUxJU1QoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCVNFVF9ORVhUKGNtZCwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKTsKLQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBjbWQ7Ci0gICAgfSBlbHNlIHsKLQlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwotCSAgICAgTkVYVCh0bXApOyB0bXAgPSBORVhUKHRtcCkpCi0JICAgIDsKLQlMSVNUKGNtZCwgdG1wKTsKLQlTRVRfTkVYVCh0bXAsIGNtZCk7Ci0gICAgfQotCi0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0gICAgZHByaW50ayhOREVCVUdfUVVFVUVTLCAic2NzaSVkOiBjb21tYW5kIGFkZGVkIHRvICVzIG9mIHF1ZXVlXG4iLCBIX05PKGNtZCksCi0JICAgICAgKGNtZC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSA/ICJoZWFkIiA6ICJ0YWlsIik7Ci0KLSAgICAvKiBJZiBxdWV1ZV9jb21tYW5kKCkgaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IChyZWFsIG9uZSBvciBib3R0b20KLSAgICAgKiBoYWxmKSwgd2UgbGV0IHF1ZXVlX21haW4oKSBkbyB0aGUgam9iIG9mIHRha2luZyBjYXJlIGFib3V0IG1haW4uIElmIGl0Ci0gICAgICogaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGlzIGEgbm8tb3AsIGVsc2UgbWFpbiB3aWxsIGJlIHF1ZXVlZC4KLSAgICAgKgotICAgICAqIElmIHdlJ3JlIG5vdCBpbiBhbiBpbnRlcnJ1cHQsIHdlIGNhbiBjYWxsIE5DUjUzODBfbWFpbigpCi0gICAgICogdW5jb25kaXRpb25hbGx5LCBiZWNhdXNlIGl0IGNhbm5vdCBiZSBhbHJlYWR5IHJ1bm5pbmcuCi0gICAgICovCi0gICAgaWYgKGluX2ludGVycnVwdCgpIHx8ICgoZmxhZ3MgPj4gOCkgJiA3KSA+PSA2KQotCXF1ZXVlX21haW4oKTsKLSAgICBlbHNlCi0JTkNSNTM4MF9tYWluKE5VTEwpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgREVGX1NDU0lfUUNNRChOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQpCi0KLS8qCi0gKiBGdW5jdGlvbiA6IE5DUjUzODBfbWFpbiAodm9pZCkgCi0gKgotICogUHVycG9zZSA6IE5DUjUzODBfbWFpbiBpcyBhIGNvcm91dGluZSB0aGF0IHJ1bnMgYXMgbG9uZyBhcyBtb3JlIHdvcmsgY2FuIAotICoJYmUgZG9uZSBvbiB0aGUgTkNSNTM4MCBob3N0IGFkYXB0ZXJzIGluIGEgc3lzdGVtLiAgQm90aCAKLSAqCU5DUjUzODBfcXVldWVfY29tbWFuZCgpIGFuZCBOQ1I1MzgwX2ludHIoKSB3aWxsIHRyeSB0byBzdGFydCBpdCAKLSAqCWluIGNhc2UgaXQgaXMgbm90IHJ1bm5pbmcuCi0gKiAKLSAqIE5PVEUgOiBOQ1I1MzgwX21haW4gZXhpdHMgd2l0aCBpbnRlcnJ1cHRzICpkaXNhYmxlZCosIHRoZSBjYWxsZXIgc2hvdWxkIAotICogIHJlZW5hYmxlIHRoZW0uICBUaGlzIHByZXZlbnRzIHJlZW50cmFuY3kgYW5kIGtlcm5lbCBzdGFjayBvdmVyZmxvdy4KLSAqLyAJCi0gICAgCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX21haW4gKHN0cnVjdCB3b3JrX3N0cnVjdCAqYmwpCi17Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqdG1wLCAqcHJldjsKLSAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGZpcnN0X2luc3RhbmNlOwotICAgIHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IEhPU1REQVRBKGluc3RhbmNlKTsKLSAgICBpbnQgZG9uZTsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIAotICAgIC8qCi0gICAgICogV2UgcnVuICh3aXRoIGludGVycnVwdHMgZGlzYWJsZWQpIHVudGlsIHdlJ3JlIHN1cmUgdGhhdCBub25lIG9mIAotICAgICAqIHRoZSBob3N0IGFkYXB0ZXJzIGhhdmUgYW55dGhpbmcgdGhhdCBjYW4gYmUgZG9uZSwgYXQgd2hpY2ggcG9pbnQgCi0gICAgICogd2Ugc2V0IG1haW5fcnVubmluZyB0byAwIGFuZCBleGl0LgotICAgICAqCi0gICAgICogSW50ZXJydXB0cyBhcmUgZW5hYmxlZCBiZWZvcmUgZG9pbmcgdmFyaW91cyBvdGhlciBpbnRlcm5hbCAKLSAgICAgKiBpbnN0cnVjdGlvbnMsIGFmdGVyIHdlJ3ZlIGRlY2lkZWQgdGhhdCB3ZSBuZWVkIHRvIHJ1biB0aHJvdWdoCi0gICAgICogdGhlIGxvb3AgYWdhaW4uCi0gICAgICoKLSAgICAgKiB0aGlzIHNob3VsZCBwcmV2ZW50IGFueSByYWNlIGNvbmRpdGlvbnMuCi0gICAgICogCi0gICAgICogKytyb21hbjogSnVzdCBkaXNhYmxpbmcgdGhlIE5DUiBpbnRlcnJ1cHQgaXNuJ3Qgc3VmZmljaWVudCBoZXJlLAotICAgICAqIGJlY2F1c2UgYWxzbyBhIHRpbWVyIGludCBjYW4gdHJpZ2dlciBhbiBhYm9ydCBvciByZXNldCwgd2hpY2ggY2FuCi0gICAgICogYWx0ZXIgcXVldWVzIGFuZCB0b3VjaCB0aGUgRmFsY29uIGxvY2suCi0gICAgICovCi0KLSAgICAvKiBUZWxsIGludCBoYW5kbGVycyBtYWluKCkgaXMgbm93IGFscmVhZHkgZXhlY3V0aW5nLiAgTm90ZSB0aGF0Ci0gICAgICAgbm8gcmFjZXMgYXJlIHBvc3NpYmxlIGhlcmUuIElmIGFuIGludCBjb21lcyBpbiBiZWZvcmUKLSAgICAgICAnbWFpbl9ydW5uaW5nJyBpcyBzZXQgaGVyZSwgYW5kIHF1ZXVlcy9leGVjdXRlcyBtYWluIHZpYSB0aGUKLSAgICAgICB0YXNrIHF1ZXVlLCBpdCBkb2Vzbid0IGRvIGFueSBoYXJtLCBqdXN0IHRoaXMgaW5zdGFuY2Ugb2YgbWFpbgotICAgICAgIHdvbid0IGZpbmQgYW55IHdvcmsgbGVmdCB0byBkby4gKi8KLSAgICBpZiAobWFpbl9ydW5uaW5nKQotICAgIAlyZXR1cm47Ci0gICAgbWFpbl9ydW5uaW5nID0gMTsKLQotICAgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotICAgIGRvIHsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOyAvKiBGcmVlemUgcmVxdWVzdCBxdWV1ZXMgKi8KLQlkb25lID0gMTsKLQkKLQlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQkgICAgZHByaW50ayhOREVCVUdfTUFJTiwgICJzY3NpJWQ6IG5vdCBjb25uZWN0ZWRcbiIsIEhPU1ROTyApOwotCSAgICAvKgotCSAgICAgKiBTZWFyY2ggdGhyb3VnaCB0aGUgaXNzdWVfcXVldWUgZm9yIGEgY29tbWFuZCBkZXN0aW5lZAotCSAgICAgKiBmb3IgYSB0YXJnZXQgdGhhdCdzIG5vdCBidXN5LgotCSAgICAgKi8KLSNpZiAoTkRFQlVHICYgTkRFQlVHX0xJU1RTKQotCSAgICBmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7Ci0JCSB0bXAgJiYgKHRtcCAhPSBwcmV2KTsgcHJldiA9IHRtcCwgdG1wID0gTkVYVCh0bXApKQotCQk7Ci0JICAgIGlmICgodG1wID09IHByZXYpICYmIHRtcCkgcHJpbnRrKCIgTE9PUFxuIik7LyogZWxzZSBwcmludGsoIlxuIik7Ki8KLSNlbmRpZgotCSAgICBmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwKLQkJIHByZXYgPSBOVUxMOyB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IE5FWFQodG1wKSApIHsKLQotCQlpZiAocHJldiAhPSB0bXApCi0JCQlkcHJpbnRrKE5ERUJVR19MSVNUUywgIk1BSU4gdG1wPSVwICAgdGFyZ2V0PSVkICAgYnVzeT0lZCBsdW49JWxsdVxuIiwgdG1wLCB0bXAtPmRldmljZS0+aWQsIGhvc3RkYXRhLT5idXN5W3RtcC0+ZGV2aWNlLT5pZF0sIHRtcC0+ZGV2aWNlLT5sdW4pOwotCQkvKiAgV2hlbiB3ZSBmaW5kIG9uZSwgcmVtb3ZlIGl0IGZyb20gdGhlIGlzc3VlIHF1ZXVlLiAqLwotCQkvKiArK2d1ZW50aGVyOiBwb3NzaWJsZSByYWNlIHdpdGggRmFsY29uIGxvY2tpbmcgKi8KLQkJaWYgKAotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkgICAgIWlzX2x1bl9idXN5KCB0bXAsIHRtcC0+Y21uZFswXSAhPSBSRVFVRVNUX1NFTlNFKQotI2Vsc2UKLQkJICAgICEoaG9zdGRhdGEtPmJ1c3lbdG1wLT5kZXZpY2UtPmlkXSAmICgxIDw8IHRtcC0+ZGV2aWNlLT5sdW4pKQotI2VuZGlmCi0JCSAgICApIHsKLQkJICAgIC8qICsrZ3VlbnRoZXI6IGp1c3QgdG8gYmUgc3VyZSwgdGhpcyBtdXN0IGJlIGF0b21pYyAqLwotCQkgICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJICAgIGlmIChwcmV2KSB7Ci0JCSAgICAgICAgUkVNT1ZFKHByZXYsIE5FWFQocHJldiksIHRtcCwgTkVYVCh0bXApKTsKLQkJCVNFVF9ORVhUKHByZXYsIE5FWFQodG1wKSk7Ci0JCSAgICB9IGVsc2UgewotCQkgICAgICAgIFJFTU9WRSgtMSwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLCB0bXAsIE5FWFQodG1wKSk7Ci0JCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBORVhUKHRtcCk7Ci0JCSAgICB9Ci0JCSAgICBTRVRfTkVYVCh0bXAsIE5VTEwpOwotCQkgICAgCi0JCSAgICAvKiByZWVuYWJsZSBpbnRlcnJ1cHRzIGFmdGVyIGZpbmRpbmcgb25lICovCi0JCSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCSAgICAKLQkJICAgIC8qIAotCQkgICAgICogQXR0ZW1wdCB0byBlc3RhYmxpc2ggYW4gSV9UX0wgbmV4dXMgaGVyZS4gCi0JCSAgICAgKiBPbiBzdWNjZXNzLCBpbnN0YW5jZS0+aG9zdGRhdGEtPmNvbm5lY3RlZCBpcyBzZXQuCi0JCSAgICAgKiBPbiBmYWlsdXJlLCB3ZSBtdXN0IGFkZCB0aGUgY29tbWFuZCBiYWNrIHRvIHRoZQotCQkgICAgICogICBpc3N1ZSBxdWV1ZSBzbyB3ZSBjYW4ga2VlcCB0cnlpbmcuCQotCQkgICAgICovCi0JCSAgICBkcHJpbnRrKE5ERUJVR19NQUlOLCAic2NzaSVkOiBtYWluKCk6IGNvbW1hbmQgZm9yIHRhcmdldCAlZCAiCi0JCQkJImx1biAlbGx1IHJlbW92ZWQgZnJvbSBpc3N1ZV9xdWV1ZVxuIiwKLQkJCQlIT1NUTk8sIHRtcC0+ZGV2aWNlLT5pZCwgdG1wLT5kZXZpY2UtPmx1bik7Ci0JCSAgICAvKiAKLQkJICAgICAqIFJFUVVFU1QgU0VOU0UgY29tbWFuZHMgYXJlIGlzc3VlZCB3aXRob3V0IHRhZ2dlZAotCQkgICAgICogcXVldWVpbmcsIGV2ZW4gb24gU0NTSS1JSSBkZXZpY2VzIGJlY2F1c2UgdGhlIAotCQkgICAgICogY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbiBleGlzdHMgZm9yIHRoZSAKLQkJICAgICAqIGVudGlyZSB1bml0LgotCQkgICAgICovCi0JCSAgICAvKiArK3JvbWFuOiAuLi5hbmQgdGhlIHN0YW5kYXJkIGFsc28gcmVxdWlyZXMgdGhhdAotCQkgICAgICogUkVRVUVTVCBTRU5TRSBjb21tYW5kIGFyZSB1bnRhZ2dlZC4KLQkJICAgICAqLwotCQkgICAgCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCSAgICBjbWRfZ2V0X3RhZyggdG1wLCB0bXAtPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSApOwotI2VuZGlmCi0JCSAgICBpZiAoIU5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCB0bXAsIAotCQkJICAgICh0bXAtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgPyBUQUdfTk9ORSA6IAotCQkJICAgIFRBR19ORVhUKSkgewotCQkJYnJlYWs7Ci0JCSAgICB9IGVsc2UgewotCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJCUxJU1QodG1wLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkJU0VUX05FWFQodG1wLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gdG1wOwotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkJY21kX2ZyZWVfdGFnKCB0bXAgKTsKLSNlbmRpZgotCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkJZHByaW50ayhOREVCVUdfTUFJTiwgInNjc2klZDogbWFpbigpOiBzZWxlY3QoKSBmYWlsZWQsICIKLQkJCQkgICAgInJldHVybmVkIHRvIGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwotCQkJaWYgKGhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCQkgICAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0gLyogaWYgdGFyZ2V0L2x1bi90YXJnZXQgcXVldWUgaXMgbm90IGJ1c3kgKi8KLQkgICAgfSAvKiBmb3IgaXNzdWVfcXVldWUgKi8KLQl9IC8qIGlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgKi8KLQlpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCAKLSNpZmRlZiBSRUFMX0RNQQotCSAgICAmJiAhaG9zdGRhdGEtPmRtYV9sZW4KLSNlbmRpZgotCSAgICApIHsKLQkgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgICBkcHJpbnRrKE5ERUJVR19NQUlOLCAic2NzaSVkOiBtYWluOiBwZXJmb3JtaW5nIGluZm9ybWF0aW9uIHRyYW5zZmVyXG4iLAotCQkJSE9TVE5PKTsKLQkgICAgTkNSNTM4MF9pbmZvcm1hdGlvbl90cmFuc2ZlcihpbnN0YW5jZSk7Ci0JICAgIGRwcmludGsoTkRFQlVHX01BSU4sICJzY3NpJWQ6IG1haW46IGRvbmUgc2V0IGZhbHNlXG4iLCBIT1NUTk8pOwotCSAgICBkb25lID0gMDsKLQl9Ci0gICAgfSB3aGlsZSAoIWRvbmUpOwotCi0gICAgLyogQmV0dGVyIGFsbG93IGludHMgX2FmdGVyXyAnbWFpbl9ydW5uaW5nJyBoYXMgYmVlbiBjbGVhcmVkLCBlbHNlCi0gICAgICAgYW4gaW50ZXJydXB0IGNvdWxkIGJlbGlldmUgd2UnbGwgcGljayB1cCB0aGUgd29yayBpdCBsZWZ0IGZvcgotICAgICAgIHVzLCBidXQgd2Ugd29uJ3Qgc2VlIGl0IGFueW1vcmUgaGVyZS4uLiAqLwotICAgIG1haW5fcnVubmluZyA9IDA7Ci0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0KLSNpZmRlZiBSRUFMX0RNQQotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX2RtYV9jb21wbGV0ZSAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi0gKgotICogUHVycG9zZSA6IENhbGxlZCBieSBpbnRlcnJ1cHQgaGFuZGxlciB3aGVuIERNQSBmaW5pc2hlcyBvciBhIHBoYXNlCi0gKgltaXNtYXRjaCBvY2N1cnMgKHdoaWNoIHdvdWxkIGZpbmlzaCB0aGUgRE1BIHRyYW5zZmVyKS4gIAotICoKLSAqIElucHV0cyA6IGluc3RhbmNlIC0gdGhpcyBpbnN0YW5jZSBvZiB0aGUgTkNSNTM4MC4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgTkNSNTM4MF9kbWFfY29tcGxldGUoIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlICkKLXsKLSAgICBTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7Ci0gICAgaW50ICAgICAgICAgICB0cmFuc2ZlcmVkOwotICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhOwotICAgIHZvbGF0aWxlIGludCAgKmNvdW50OwotCi0gICAgaWYgKCFob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiByZWNlaXZlZCBlbmQgb2YgRE1BIGludGVycnVwdCB3aXRoICIKLQkgICAgICAgIm5vIGNvbm5lY3RlZCBjbWRcbiIsIEhPU1ROTyk7Ci0JcmV0dXJuOwotICAgIH0KLQotICAgIGRwcmludGsoTkRFQlVHX0RNQSwgInNjc2klZDogcmVhbCBETUEgdHJhbnNmZXIgY29tcGxldGUsIGJhc3IgMHglWCwgc3IgMHglWFxuIiwKLQkgICAgICAgSE9TVE5PLCBOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSwKLQkgICAgICAgTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpKTsKLQotICAgIGlmKChzdW4zc2NzaV9kbWFfZmluaXNoKHJxX2RhdGFfZGlyKGhvc3RkYXRhLT5jb25uZWN0ZWQtPnJlcXVlc3QpKSkpIHsKLQkgICAgcHJpbnRrKCJzY3NpJWQ6IG92ZXJydW4gaW4gVURDIGNvdW50ZXIgLS0gbm90IHByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGlzIVxuIiwgSE9TVE5PKTsKLQkgICAgcHJpbnRrKCJwbGVhc2UgZS1tYWlsIHNhbW15QHNhbW15Lm5ldCB3aXRoIGEgZGVzY3JpcHRpb24gb2YgaG93IHRoaXNcbiIpOwotCSAgICBwcmludGsoImVycm9yIHdhcyBwcm9kdWNlZC5cbiIpOwotCSAgICBCVUcoKTsKLSAgICB9Ci0KLSAgICAvKiBtYWtlIHN1cmUgd2UncmUgbm90IHN0dWNrIGluIGEgZGF0YSBwaGFzZSAqLwotICAgIGlmKChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIChCQVNSX1BIQVNFX01BVENIIHwKLQkJCQkJICAgIEJBU1JfQUNLKSkgPT0KLSAgICAgICAoQkFTUl9QSEFTRV9NQVRDSCB8IEJBU1JfQUNLKSkgewotCSAgICBwcmludGsoInNjc2klZDogQkFTUiAlMDJ4XG4iLCBIT1NUTk8sIE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpKTsKLQkgICAgcHJpbnRrKCJzY3NpJWQ6IGJ1cyBzdHVjayBpbiBkYXRhIHBoYXNlIC0tIHByb2JhYmx5IGEgc2luZ2xlIGJ5dGUgIgotCQkgICAib3ZlcnJ1biFcbiIsIEhPU1ROTyk7Ci0JICAgIHByaW50aygibm90IHByZXBhcmVkIGZvciB0aGlzIGVycm9yIVxuIik7Ci0JICAgIHByaW50aygicGxlYXNlIGUtbWFpbCBzYW1teUBzYW1teS5uZXQgd2l0aCBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGlzXG4iKTsKLQkgICAgcHJpbnRrKCJlcnJvciB3YXMgcHJvZHVjZWQuXG4iKTsKLQkgICAgQlVHKCk7Ci0gICAgfQotCi0KLQotICAgICh2b2lkKSBOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwotICAgIE5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UpOwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0KLSAgICB0cmFuc2ZlcmVkID0gaG9zdGRhdGEtPmRtYV9sZW4gLSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSk7Ci0gICAgaG9zdGRhdGEtPmRtYV9sZW4gPSAwOwotCi0gICAgZGF0YSA9ICh1bnNpZ25lZCBjaGFyICoqKSAmKGhvc3RkYXRhLT5jb25uZWN0ZWQtPlNDcC5wdHIpOwotICAgIGNvdW50ID0gJihob3N0ZGF0YS0+Y29ubmVjdGVkLT5TQ3AudGhpc19yZXNpZHVhbCk7Ci0gICAgKmRhdGEgKz0gdHJhbnNmZXJlZDsKLSAgICAqY291bnQgLT0gdHJhbnNmZXJlZDsKLQotfQotI2VuZGlmIC8qIFJFQUxfRE1BICovCi0KLQotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX2ludHIgKGludCBpcnEpCi0gKiAKLSAqIFB1cnBvc2UgOiBoYW5kbGUgaW50ZXJydXB0cywgcmVlc3RhYmxpc2hpbmcgSV9UX0wgb3IgSV9UX0xfUSBuZXh1c2VzCi0gKglmcm9tIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUsIGFuZCByZXN0YXJ0aW5nIE5DUjUzODBfbWFpbigpIAotICoJYXMgcmVxdWlyZWQuCi0gKgotICogSW5wdXRzIDogaW50IGlycSwgaXJxIHRoYXQgY2F1c2VkIHRoaXMgaW50ZXJydXB0LgotICoKLSAqLwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgTkNSNTM4MF9pbnRyIChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0gICAgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBmaXJzdF9pbnN0YW5jZTsKLSAgICBpbnQgZG9uZSA9IDEsIGhhbmRsZWQgPSAwOwotICAgIHVuc2lnbmVkIGNoYXIgYmFzcjsKLQotICAgIGRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IE5DUjUzODAgaXJxIHRyaWdnZXJlZFxuIiwgSE9TVE5PKTsKLQotICAgIC8qIExvb2sgZm9yIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotICAgIGJhc3IgPSBOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKTsKLSAgICBkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBCQVNSPSUwMnhcbiIsIEhPU1ROTywgYmFzcik7Ci0gICAgLyogZGlzcGF0Y2ggdG8gYXBwcm9wcmlhdGUgcm91dGluZSBpZiBmb3VuZCBhbmQgZG9uZT0wICovCi0gICAgaWYgKGJhc3IgJiBCQVNSX0lSUSkgewotCU5DUjUzODBfZHByaW50KE5ERUJVR19JTlRSLCBpbnN0YW5jZSk7Ci0JaWYgKChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiAoU1JfU0VMfFNSX0lPKSkgPT0gKFNSX1NFTHxTUl9JTykpIHsKLQkgICAgZG9uZSA9IDA7Ci0vLwkgICAgRU5BQkxFX0lSUSgpOwotCSAgICBkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBTRUwgaW50ZXJydXB0XG4iLCBIT1NUTk8pOwotCSAgICBOQ1I1MzgwX3Jlc2VsZWN0KGluc3RhbmNlKTsKLQkgICAgKHZvaWQpIE5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7Ci0JfQotCWVsc2UgaWYgKGJhc3IgJiBCQVNSX1BBUklUWV9FUlJPUikgewotCSAgICBkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBQQVJJVFkgaW50ZXJydXB0XG4iLCBIT1NUTk8pOwotCSAgICAodm9pZCkgTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQl9Ci0JZWxzZSBpZiAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JTVCkgPT0gU1JfUlNUKSB7Ci0JICAgIGRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IFJFU0VUIGludGVycnVwdFxuIiwgSE9TVE5PKTsKLQkgICAgKHZvaWQpTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQl9Ci0JZWxzZSB7Ci0JICAgIC8qICAKLQkgICAgICogVGhlIHJlc3Qgb2YgdGhlIGludGVycnVwdCBjb25kaXRpb25zIGNhbiBvY2N1ciBvbmx5IGR1cmluZyBhCi0JICAgICAqIERNQSB0cmFuc2ZlcgotCSAgICAgKi8KLQotI2lmIGRlZmluZWQoUkVBTF9ETUEpCi0JICAgIC8qCi0JICAgICAqIFdlIHNob3VsZCBvbmx5IGdldCBQSEFTRSBNSVNNQVRDSCBhbmQgRU9QIGludGVycnVwdHMgaWYgd2UgaGF2ZQotCSAgICAgKiBETUEgZW5hYmxlZCwgc28gZG8gYSBzYW5pdHkgY2hlY2sgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2V0dGluZwotCSAgICAgKiBvZiB0aGUgTU9ERSByZWdpc3Rlci4KLQkgICAgICovCi0KLQkgICAgaWYgKChOQ1I1MzgwX3JlYWQoTU9ERV9SRUcpICYgTVJfRE1BX01PREUpICYmCi0JCSgoYmFzciAmIEJBU1JfRU5EX0RNQV9UUkFOU0ZFUikgfHwgCi0JCSAhKGJhc3IgJiBCQVNSX1BIQVNFX01BVENIKSkpIHsKLQkJICAgIAotCQlkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBQSEFTRSBNSVNNIG9yIEVPUCBpbnRlcnJ1cHRcbiIsIEhPU1ROTyk7Ci0JCU5DUjUzODBfZG1hX2NvbXBsZXRlKCBpbnN0YW5jZSApOwotCQlkb25lID0gMDsKLS8vCQlFTkFCTEVfSVJRKCk7Ci0JICAgIH0gZWxzZQotI2VuZGlmIC8qIFJFQUxfRE1BICovCi0JICAgIHsKLS8qIE1TOiBJZ25vcmUgdW5rbm93biBwaGFzZSBtaXNtYXRjaCBpbnRlcnJ1cHRzIChjYXVzZWQgYnkgRU9QIGludGVycnVwdCkgKi8KLQkJaWYgKGJhc3IgJiBCQVNSX1BIQVNFX01BVENIKQotCQkgICBkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiB1bmtub3duIGludGVycnVwdCwgIgotCQkJICAgIkJBU1IgMHgleCwgTVIgMHgleCwgU1IgMHgleFxuIiwKLQkJCSAgIEhPU1ROTywgYmFzciwgTkNSNTM4MF9yZWFkKE1PREVfUkVHKSwKLQkJCSAgIE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSk7Ci0JCSh2b2lkKSBOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQkJZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKLSNlbmRpZgotCSAgICB9Ci0JfSAvKiBpZiAhKFNFTEVDVElPTiB8fCBQQVJJVFkpICovCi0JaGFuZGxlZCA9IDE7Ci0gICAgfSAvKiBCQVNSICYgSVJRICovCi0gICAgZWxzZSB7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogaW50ZXJydXB0IHdpdGhvdXQgSVJRIGJpdCBzZXQgaW4gQkFTUiwgIgotCSAgICAgICAiQkFTUiAweCVYLCBNUiAweCVYLCBTUiAweCV4XG4iLCBIT1NUTk8sIGJhc3IsCi0JICAgICAgIE5DUjUzODBfcmVhZChNT0RFX1JFRyksIE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSk7Ci0JKHZvaWQpIE5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7Ci0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCQlkcmVncy0+Y3NyIHw9IENTUl9ETUFfRU5BQkxFOwotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmICghZG9uZSkgewotCWRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IGluIGludCByb3V0aW5lLCBjYWxsaW5nIG1haW5cbiIsIEhPU1ROTyk7Ci0JLyogUHV0IGEgY2FsbCB0byBOQ1I1MzgwX21haW4oKSBvbiB0aGUgcXVldWUuLi4gKi8KLQlxdWV1ZV9tYWluKCk7Ci0gICAgfQotICAgIHJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwotfQotCi0jaWZkZWYgTkNSNTM4MF9TVEFUUwotc3RhdGljIHZvaWQgY29sbGVjdF9zdGF0cyhzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEsCi0JCQkgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLSMgaWZkZWYgTkNSNTM4MF9TVEFUX0xJTUlUCi0gICAgaWYgKHNjc2lfYnVmZmxlbihjbWQpID4gTkNSNTM4MF9TVEFUX0xJTUlUKQotIyBlbmRpZgotCXN3aXRjaCAoY21kLT5jbW5kWzBdKQotCXsKLQkgICAgY2FzZSBXUklURToKLQkgICAgY2FzZSBXUklURV82OgotCSAgICBjYXNlIFdSSVRFXzEwOgotCQlob3N0ZGF0YS0+dGltZV93cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJLypob3N0ZGF0YS0+Ynl0ZXNfd3JpdGVbY21kLT5kZXZpY2UtPmlkXSArPSBzY3NpX2J1ZmZsZW4oY21kKTsqLwotCQlob3N0ZGF0YS0+cGVuZGluZ3ctLTsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgUkVBRDoKLQkgICAgY2FzZSBSRUFEXzY6Ci0JICAgIGNhc2UgUkVBRF8xMDoKLQkJaG9zdGRhdGEtPnRpbWVfcmVhZFtjbWQtPmRldmljZS0+aWRdICs9IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJLypob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOyovCi0JCWhvc3RkYXRhLT5wZW5kaW5nci0tOwotCQlicmVhazsKLQl9Ci19Ci0jZW5kaWYKLQotLyogCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKLSAqIAkJCQkgc3RydWN0IHNjc2lfY21uZCAqY21kLAlpbnQgdGFnKTsKLSAqCi0gKiBQdXJwb3NlIDogZXN0YWJsaXNoZXMgSV9UX0wgb3IgSV9UX0xfUSBuZXh1cyBmb3IgbmV3IG9yIGV4aXN0aW5nIGNvbW1hbmQsCi0gKglpbmNsdWRpbmcgQVJCSVRSQVRJT04sIFNFTEVDVElPTiwgYW5kIGluaXRpYWwgbWVzc2FnZSBvdXQgZm9yIAotICoJSURFTlRJRlkgYW5kIHF1ZXVlIG1lc3NhZ2VzLiAKLSAqCi0gKiBJbnB1dHMgOiBpbnN0YW5jZSAtIGluc3RhbnRpYXRpb24gb2YgdGhlIDUzODAgZHJpdmVyIG9uIHdoaWNoIHRoaXMgCi0gKiAJdGFyZ2V0IGxpdmVzLCBjbWQgLSBTQ1NJIGNvbW1hbmQgdG8gZXhlY3V0ZSwgdGFnIC0gc2V0IHRvIFRBR19ORVhUIGZvciAKLSAqCW5ldyB0YWcsIFRBR19OT05FIGZvciB1bnRhZ2dlZCBxdWV1ZWluZywgb3RoZXJ3aXNlIHNldCB0byB0aGUgdGFnIGZvciAKLSAqCXRoZSBjb21tYW5kIHRoYXQgaXMgcHJlc2VudGx5IGNvbm5lY3RlZC4KLSAqIAotICogUmV0dXJucyA6IC0xIGlmIHNlbGVjdGlvbiBjb3VsZCBub3QgZXhlY3V0ZSBmb3Igc29tZSByZWFzb24sCi0gKgkwIGlmIHNlbGVjdGlvbiBzdWNjZWVkZWQgb3IgZmFpbGVkIGJlY2F1c2UgdGhlIHRhcmdldCAKLSAqIAlkaWQgbm90IHJlc3BvbmQuCi0gKgotICogU2lkZSBlZmZlY3RzIDogCi0gKiAJSWYgYnVzIGJ1c3ksIGFyYml0cmF0aW9uIGZhaWxlZCwgZXRjLCBOQ1I1MzgwX3NlbGVjdCgpIHdpbGwgZXhpdCAKLSAqCQl3aXRoIHJlZ2lzdGVycyBhcyB0aGV5IHNob3VsZCBoYXZlIGJlZW4gb24gZW50cnkgLSBpZQotICoJCVNFTEVDVF9FTkFCTEUgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseSwgdGhlIE5DUjUzODAKLSAqCQl3aWxsIGNlYXNlIHRvIGRyaXZlIGFueSBTQ1NJIGJ1cyBzaWduYWxzLgotICoKLSAqCUlmIHN1Y2Nlc3NmdWwgOiBJX1RfTCBvciBJX1RfTF9RIG5leHVzIHdpbGwgYmUgZXN0YWJsaXNoZWQsIAotICoJCWluc3RhbmNlLT5jb25uZWN0ZWQgd2lsbCBiZSBzZXQgdG8gY21kLiAgCi0gKiAJCVNFTEVDVCBpbnRlcnJ1cHQgd2lsbCBiZSBkaXNhYmxlZC4KLSAqCi0gKglJZiBmYWlsZWQgKG5vIHRhcmdldCkgOiBjbWQtPnNjc2lfZG9uZSgpIHdpbGwgYmUgY2FsbGVkLCBhbmQgdGhlIAotICoJCWNtZC0+cmVzdWx0IGhvc3QgYnl0ZSBzZXQgdG8gRElEX0JBRF9UQVJHRVQuCi0gKi8KLQotc3RhdGljIGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqY21kLAotCQkJICBpbnQgdGFnKQotewotICAgIFNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKLSAgICB1bnNpZ25lZCBjaGFyIHRtcFszXSwgcGhhc2U7Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgbGVuOwotICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dDsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgaG9zdGRhdGEtPnJlc3RhcnRfc2VsZWN0ID0gMDsKLSAgICBOQ1I1MzgwX2RwcmludChOREVCVUdfQVJCSVRSQVRJT04sIGluc3RhbmNlKTsKLSAgICBkcHJpbnRrKE5ERUJVR19BUkJJVFJBVElPTiwgInNjc2klZDogc3RhcnRpbmcgYXJiaXRyYXRpb24sIGlkID0gJWRcbiIsIEhPU1ROTywKLQkgICAgICAgaW5zdGFuY2UtPnRoaXNfaWQpOwotCi0gICAgLyogCi0gICAgICogU2V0IHRoZSBwaGFzZSBiaXRzIHRvIDAsIG90aGVyd2lzZSB0aGUgTkNSNTM4MCB3b24ndCBkcml2ZSB0aGUgCi0gICAgICogZGF0YSBidXMgZHVyaW5nIFNFTEVDVElPTi4KLSAgICAgKi8KLQotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICBpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gLTE7Ci0gICAgfQotICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAwKTsKLQotCi0gICAgLyogCi0gICAgICogU3RhcnQgYXJiaXRyYXRpb24uCi0gICAgICovCi0gICAgCi0gICAgTkNSNTM4MF93cml0ZShPVVRQVVRfREFUQV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLSAgICBOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9BUkJJVFJBVEUpOwotCi0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0gICAgLyogV2FpdCBmb3IgYXJiaXRyYXRpb24gbG9naWMgdG8gY29tcGxldGUgKi8KLSNpZmRlZiBOQ1JfVElNRU9VVAotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAyKk5DUl9USU1FT1VUOwotCi0gICAgICB3aGlsZSAoIShOQ1I1MzgwX3JlYWQoSU5JVElBVE9SX0NPTU1BTkRfUkVHKSAmIElDUl9BUkJJVFJBVElPTl9QUk9HUkVTUykKLQkgICAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAhaG9zdGRhdGEtPmNvbm5lY3RlZCkKLQk7Ci0gICAgICBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkKLSAgICAgIHsKLQlwcmludGsoInNjc2kgOiBhcmJpdHJhdGlvbiB0aW1lb3V0IGF0ICVkXG4iLCBfX0xJTkVfXyk7Ci0JTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0JTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCXJldHVybiAtMTsKLSAgICAgIH0KLSAgICB9Ci0jZWxzZSAvKiBOQ1JfVElNRU9VVCAqLwotICAgIHdoaWxlICghKE5DUjUzODBfcmVhZChJTklUSUFUT1JfQ09NTUFORF9SRUcpICYgSUNSX0FSQklUUkFUSU9OX1BST0dSRVNTKQotCSAmJiAhaG9zdGRhdGEtPmNvbm5lY3RlZCk7Ci0jZW5kaWYKLQotICAgIGRwcmludGsoTkRFQlVHX0FSQklUUkFUSU9OLCAic2NzaSVkOiBhcmJpdHJhdGlvbiBjb21wbGV0ZVxuIiwgSE9TVE5PKTsKLQotICAgIGlmIChob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7IAotCXJldHVybiAtMTsKLSAgICB9Ci0gICAgLyogCi0gICAgICogVGhlIGFyYml0cmF0aW9uIGRlbGF5IGlzIDIuMnVzLCBidXQgdGhpcyBpcyBhIG1pbmltdW0gYW5kIHRoZXJlIGlzIAotICAgICAqIG5vIG1heGltdW0gc28gd2UgY2FuIHNhZmVseSBzbGVlcCBmb3IgY2VpbCgyLjIpIHVzZWNzIHRvIGFjY29tbW9kYXRlCi0gICAgICogdGhlIGludGVncmFsIG5hdHVyZSBvZiB1ZGVsYXkoKS4KLSAgICAgKgotICAgICAqLwotCi0gICAgdWRlbGF5KDMpOwotCi0gICAgLyogQ2hlY2sgZm9yIGxvc3QgYXJiaXRyYXRpb24gKi8KLSAgICBpZiAoKE5DUjUzODBfcmVhZChJTklUSUFUT1JfQ09NTUFORF9SRUcpICYgSUNSX0FSQklUUkFUSU9OX0xPU1QpIHx8Ci0JKE5DUjUzODBfcmVhZChDVVJSRU5UX1NDU0lfREFUQV9SRUcpICYgaG9zdGRhdGEtPmlkX2hpZ2hlcl9tYXNrKSB8fAotCShOQ1I1MzgwX3JlYWQoSU5JVElBVE9SX0NPTU1BTkRfUkVHKSAmIElDUl9BUkJJVFJBVElPTl9MT1NUKSB8fAotCWhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsgCi0JZHByaW50ayhOREVCVUdfQVJCSVRSQVRJT04sICJzY3NpJWQ6IGxvc3QgYXJiaXRyYXRpb24sIGRlYXNzZXJ0aW5nIE1SX0FSQklUUkFURVxuIiwKLQkJICAgSE9TVE5PKTsKLQlyZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgIC8qIGFmdGVyL2R1cmluZyBhcmJpdHJhdGlvbiwgQlNZIHNob3VsZCBiZSBhc3NlcnRlZC4KLQlJQk0gRFBFUy0zMTA4MCBWZXJzaW9uIFMzMVEgd29ya3Mgbm93ICovCi0gICAgIC8qIFRueCB0byBUaG9tYXNfUm9lc2NoQG0yLm1hdXMuZGUgZm9yIGZpbmRpbmcgdGhpcyEgKFJvbWFuKSAqLwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfU0VMIHwKLQkJCQkJIElDUl9BU1NFUlRfQlNZICkgOwotICAgIAotICAgIGlmICgoTkNSNTM4MF9yZWFkKElOSVRJQVRPUl9DT01NQU5EX1JFRykgJiBJQ1JfQVJCSVRSQVRJT05fTE9TVCkgfHwKLQlob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0JTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQlkcHJpbnRrKE5ERUJVR19BUkJJVFJBVElPTiwgInNjc2klZDogbG9zdCBhcmJpdHJhdGlvbiwgZGVhc3NlcnRpbmcgSUNSX0FTU0VSVF9TRUxcbiIsCi0JCSAgIEhPU1ROTyk7Ci0JcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qIAotICAgICAqIEFnYWluLCBidXMgY2xlYXIgKyBidXMgc2V0dGxlIHRpbWUgaXMgMS4ydXMsIGhvd2V2ZXIsIHRoaXMgaXMgCi0gICAgICogYSBtaW5pbXVtIHNvIHdlJ2xsIHVkZWxheSBjZWlsKDEuMikKLSAgICAgKi8KLQotI2lmZGVmIENPTkZJR19BVEFSSV9TQ1NJX1RPU0hJQkFfREVMQVkKLSAgICAvKiArK3JvbWFuOiBCdXQgc29tZSB0YXJnZXRzIChzZWUgYWJvdmUgOi0pIHNlZW0gdG8gbmVlZCBhIGJpdCBtb3JlLi4uICovCi0gICAgdWRlbGF5KDE1KTsKLSNlbHNlCi0gICAgdWRlbGF5KDIpOwotI2VuZGlmCi0gICAgCi0gICAgaWYgKGhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKLQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCXJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBkcHJpbnRrKE5ERUJVR19BUkJJVFJBVElPTiwgInNjc2klZDogd29uIGFyYml0cmF0aW9uXG4iLCBIT1NUTk8pOwotCi0gICAgLyogCi0gICAgICogTm93IHRoYXQgd2UgaGF2ZSB3b24gYXJiaXRyYXRpb24sIHN0YXJ0IFNlbGVjdGlvbiBwcm9jZXNzLCBhc3NlcnRpbmcgCi0gICAgICogdGhlIGhvc3QgYW5kIHRhcmdldCBJRCdzIG9uIHRoZSBTQ1NJIGJ1cy4KLSAgICAgKi8KLQotICAgIE5DUjUzODBfd3JpdGUoT1VUUFVUX0RBVEFfUkVHLCAoaG9zdGRhdGEtPmlkX21hc2sgfCAoMSA8PCBjbWQtPmRldmljZS0+aWQpKSk7Ci0KLSAgICAvKiAKLSAgICAgKiBSYWlzZSBBVE4gd2hpbGUgU0VMIGlzIHRydWUgYmVmb3JlIEJTWSBnb2VzIGZhbHNlIGZyb20gYXJiaXRyYXRpb24sCi0gICAgICogc2luY2UgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZ3VhcmFudGVlIHRoYXQgd2UnbGwgZ2V0IGEgTUVTU0FHRSBPVVQKLSAgICAgKiBwaGFzZSBpbW1lZGlhdGVseSBhZnRlciBzZWxlY3Rpb24uCi0gICAgICovCi0KLSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgKElDUl9CQVNFIHwgSUNSX0FTU0VSVF9CU1kgfCAKLQlJQ1JfQVNTRVJUX0RBVEEgfCBJQ1JfQVNTRVJUX0FUTiB8IElDUl9BU1NFUlRfU0VMICkpOwotICAgIE5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UpOwotCi0gICAgLyogCi0gICAgICogUmVzZWxlY3QgaW50ZXJydXB0cyBtdXN0IGJlIHR1cm5lZCBvZmYgcHJpb3IgdG8gdGhlIGRyb3BwaW5nIG9mIEJTWSwKLSAgICAgKiBvdGhlcndpc2Ugd2Ugd2lsbCB0cmlnZ2VyIGFuIGludGVycnVwdC4KLSAgICAgKi8KLQotICAgIGlmIChob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQlyZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgMCk7Ci0KLSAgICAvKgotICAgICAqIFRoZSBpbml0aWF0b3Igc2hhbGwgdGhlbiB3YWl0IGF0IGxlYXN0IHR3byBkZXNrZXcgZGVsYXlzIGFuZCByZWxlYXNlIAotICAgICAqIHRoZSBCU1kgc2lnbmFsLgotICAgICAqLwotICAgIHVkZWxheSgxKTsgICAgICAgIC8qIHdpbmdlbCAtLSB3YWl0IHR3byBidXMgZGVza2V3IGRlbGF5ID4yKjQ1bnMgKi8KLQotICAgIC8qIFJlc2V0IEJTWSAqLwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCAoSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0RBVEEgfCAKLQlJQ1JfQVNTRVJUX0FUTiB8IElDUl9BU1NFUlRfU0VMKSk7Ci0KLSAgICAvKiAKLSAgICAgKiBTb21ldGhpbmcgd2VpcmQgaGFwcGVucyB3aGVuIHdlIGNlYXNlIHRvIGRyaXZlIEJTWSAtIGxvb2tzCi0gICAgICogbGlrZSB0aGUgYm9hcmQvY2hpcCBpcyBsZXR0aW5nIHVzIGRvIGFub3RoZXIgcmVhZCBiZWZvcmUgdGhlIAotICAgICAqIGFwcHJvcHJpYXRlIHByb3BhZ2F0aW9uIGRlbGF5IGhhcyBleHBpcmVkLCBhbmQgd2UncmUgY29uZnVzaW5nCi0gICAgICogYSBCU1kgc2lnbmFsIGZyb20gb3Vyc2VsdmVzIGFzIHRoZSB0YXJnZXQncyByZXNwb25zZSB0byBTRUxFQ1RJT04uCi0gICAgICoKLSAgICAgKiBBIHNtYWxsIGRlbGF5ICh0aGUgJ0MrKycgZnJvbnRlbmQgYnJlYWtzIHRoZSBwaXBlbGluZSB3aXRoIGFuCi0gICAgICogdW5uZWNlc3NhcnkganVtcCwgbWFraW5nIGl0IHdvcmsgb24gbXkgMzg2LTMzL1RyYW50b3IgVDEyOCwgdGhlCi0gICAgICogdGlnaHRlciAnQycgY29kZSBicmVha3MgYW5kIHJlcXVpcmVzIHRoaXMpIHNvbHZlcyB0aGUgcHJvYmxlbSAtIAotICAgICAqIHRoZSAxIHVzIGRlbGF5IGlzIGFyYml0cmFyeSwgYW5kIG9ubHkgdXNlZCBiZWNhdXNlIHRoaXMgZGVsYXkgd2lsbCAKLSAgICAgKiBiZSB0aGUgc2FtZSBvbiBvdGhlciBwbGF0Zm9ybXMgYW5kIHNpbmNlIGl0IHdvcmtzIGhlcmUsIGl0IHNob3VsZCAKLSAgICAgKiB3b3JrIHRoZXJlLgotICAgICAqCi0gICAgICogd2luZ2VsIHN1Z2dlc3RzIHRoYXQgdGhpcyBjb3VsZCBiZSBkdWUgdG8gZmFpbGluZyB0byB3YWl0Ci0gICAgICogb25lIGRlc2tldyBkZWxheS4KLSAgICAgKi8KLQotICAgIHVkZWxheSgxKTsKLQotICAgIGRwcmludGsoTkRFQlVHX1NFTEVDVElPTiwgInNjc2klZDogc2VsZWN0aW5nIHRhcmdldCAlZFxuIiwgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQpOwotCi0gICAgLyogCi0gICAgICogVGhlIFNDU0kgc3BlY2lmaWNhdGlvbiBjYWxscyBmb3IgYSAyNTAgbXMgdGltZW91dCBmb3IgdGhlIGFjdHVhbCAKLSAgICAgKiBzZWxlY3Rpb24uCi0gICAgICovCi0KLSAgICB0aW1lb3V0ID0gamlmZmllcyArIDI1OyAKLQotICAgIC8qIAotICAgICAqIFhYWCB2ZXJ5IGludGVyZXN0aW5nIC0gd2UncmUgc2VlaW5nIGEgYm91bmNlIHdoZXJlIHRoZSBCU1kgd2UgCi0gICAgICogYXNzZXJ0ZWQgaXMgYmVpbmcgcmVmbGVjdGVkIC8gc3RpbGwgYXNzZXJ0ZWQgKHByb3BhZ2F0aW9uIGRlbGF5PykKLSAgICAgKiBhbmQgaXQncyBkZXRlY3RpbmcgYXMgdHJ1ZS4gIFNpZ2guCi0gICAgICovCi0KLSNpZiAwCi0gICAgLyogKytyb21hbjogSWYgYSB0YXJnZXQgY29uZm9ybWVkIHRvIHRoZSBTQ1NJIHN0YW5kYXJkLCBpdCB3b3VsZG4ndCBhc3NlcnQKLSAgICAgKiBJTyB3aGlsZSBTRUwgaXMgdHJ1ZS4gQnV0IGFnYWluLCB0aGVyZSBhcmUgc29tZSBkaXNrcyBvdXQgdGhlIGluIHRoZQotICAgICAqIHdvcmxkIHRoYXQgZG8gdGhhdCBuZXZlcnRoZWxlc3MuIChTb21lYm9keSBjbGFpbWVkIHRoYXQgdGhpcyBhbm5vdW5jZXMKLSAgICAgKiByZXNlbGVjdGlvbiBjYXBhYmlsaXR5IG9mIHRoZSB0YXJnZXQuKSBTbyB3ZSBiZXR0ZXIgc2tpcCB0aGF0IHRlc3QgYW5kCi0gICAgICogb25seSB3YWl0IGZvciBCU1kuLi4gKEZhbW91cyBnZXJtYW4gd29yZHM6IERlciBLbMO8Z2VyZSBnaWJ0IG5hY2ggOi0pCi0gICAgICovCi0KLSAgICB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkgJiYgIShOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiAKLQkoU1JfQlNZIHwgU1JfSU8pKSk7Ci0KLSAgICBpZiAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIChTUl9TRUwgfCBTUl9JTykpID09IAotCSAgICAoU1JfU0VMIHwgU1JfSU8pKSB7Ci0JICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JICAgIE5DUjUzODBfcmVzZWxlY3QoaW5zdGFuY2UpOwotCSAgICBwcmludGsgKEtFUk5fRVJSICJzY3NpJWQ6IHJlc2VsZWN0aW9uIGFmdGVyIHdvbiBhcmJpdHJhdGlvbj9cbiIsCi0JCSAgICBIT1NUTk8pOwotCSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0JICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZWxzZQotICAgIHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAhKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX0JTWSkpOwotI2VuZGlmCi0KLSAgICAvKiAKLSAgICAgKiBObyBsZXNzIHRoYW4gdHdvIGRlc2tldyBkZWxheXMgYWZ0ZXIgdGhlIGluaXRpYXRvciBkZXRlY3RzIHRoZSAKLSAgICAgKiBCU1kgc2lnbmFsIGlzIHRydWUsIGl0IHNoYWxsIHJlbGVhc2UgdGhlIFNFTCBzaWduYWwgYW5kIG1heSAKLSAgICAgKiBjaGFuZ2UgdGhlIERBVEEgQlVTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2luZ2VsCi0gICAgICovCi0KLSAgICB1ZGVsYXkoMSk7Ci0KLSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FUTik7Ci0KLSAgICBpZiAoIShOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9CU1kpKSB7Ci0JTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQlpZiAoaG9zdGRhdGEtPnRhcmdldHNfcHJlc2VudCAmICgxIDw8IGNtZC0+ZGV2aWNlLT5pZCkpIHsKLQkgICAgcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQ6IHdlaXJkbmVzc1xuIiwgSE9TVE5PKTsKLQkgICAgaWYgKGhvc3RkYXRhLT5yZXN0YXJ0X3NlbGVjdCkKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJcdHJlc3RhcnQgc2VsZWN0XG4iKTsKLQkgICAgTkNSNTM4MF9kcHJpbnQoTkRFQlVHX0FOWSwgaW5zdGFuY2UpOwotCSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0JICAgIHJldHVybiAtMTsKLQl9Ci0JY21kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKLSNlbmRpZgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCWNtZF9mcmVlX3RhZyggY21kICk7Ci0jZW5kaWYKLQljbWQtPnNjc2lfZG9uZShjbWQpOwotCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQlkcHJpbnRrKE5ERUJVR19TRUxFQ1RJT04sICJzY3NpJWQ6IHRhcmdldCBkaWQgbm90IHJlc3BvbmQgd2l0aGluIDI1MG1zXG4iLCBIT1NUTk8pOwotCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQlyZXR1cm4gMDsKLSAgICB9IAotCi0gICAgaG9zdGRhdGEtPnRhcmdldHNfcHJlc2VudCB8PSAoMSA8PCBjbWQtPmRldmljZS0+aWQpOwotCi0gICAgLyoKLSAgICAgKiBTaW5jZSB3ZSBmb2xsb3dlZCB0aGUgU0NTSSBzcGVjLCBhbmQgcmFpc2VkIEFUTiB3aGlsZSBTRUwgCi0gICAgICogd2FzIHRydWUgYnV0IGJlZm9yZSBCU1kgd2FzIGZhbHNlIGR1cmluZyBzZWxlY3Rpb24sIHRoZSBpbmZvcm1hdGlvbgotICAgICAqIHRyYW5zZmVyIHBoYXNlIHNob3VsZCBiZSBhIE1FU1NBR0UgT1VUIHBoYXNlIHNvIHRoYXQgd2UgY2FuIHNlbmQgdGhlCi0gICAgICogSURFTlRJRlkgbWVzc2FnZS4KLSAgICAgKiAKLSAgICAgKiBJZiBTQ1NJLUlJIHRhZ2dlZCBxdWV1aW5nIGlzIGVuYWJsZWQsIHdlIGFsc28gc2VuZCBhIFNJTVBMRV9RVUVVRV9UQUcKLSAgICAgKiBtZXNzYWdlICgyIGJ5dGVzKSB3aXRoIGEgdGFnIElEIHRoYXQgd2UgaW5jcmVtZW50IHdpdGggZXZlcnkgY29tbWFuZAotICAgICAqIHVudGlsIGl0IHdyYXBzIGJhY2sgdG8gMC4KLSAgICAgKgotICAgICAqIFhYWCAtIGl0IHR1cm5zIG91dCB0aGF0IHRoZXJlIGFyZSBzb21lIGJyb2tlbiBTQ1NJLUlJIGRldmljZXMsCi0gICAgICoJICAgICB3aGljaCBjbGFpbSB0byBzdXBwb3J0IHRhZ2dlZCBxdWV1aW5nIGJ1dCBmYWlsIHdoZW4gbW9yZSB0aGFuCi0gICAgICoJICAgICBzb21lIG51bWJlciBvZiBjb21tYW5kcyBhcmUgaXNzdWVkIGF0IG9uY2UuCi0gICAgICovCi0KLSAgICAvKiBXYWl0IGZvciBzdGFydCBvZiBSRVEvQUNLIGhhbmRzaGFrZSAqLwotICAgIHdoaWxlICghKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JFUSkpOwotCi0gICAgZHByaW50ayhOREVCVUdfU0VMRUNUSU9OLCAic2NzaSVkOiB0YXJnZXQgJWQgc2VsZWN0ZWQsIGdvaW5nIGludG8gTUVTU0FHRSBPVVQgcGhhc2UuXG4iLAotCSAgICAgICBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCk7Ci0gICAgdG1wWzBdID0gSURFTlRJRlkoMSwgY21kLT5kZXZpY2UtPmx1bik7Ci0KLSNpZmRlZiBTVVBQT1JUX1RBR1MKLSAgICBpZiAoY21kLT50YWcgIT0gVEFHX05PTkUpIHsKLQl0bXBbMV0gPSBob3N0ZGF0YS0+bGFzdF9tZXNzYWdlID0gU0lNUExFX1FVRVVFX1RBRzsKLQl0bXBbMl0gPSBjbWQtPnRhZzsKLQlsZW4gPSAzOwotICAgIH0gZWxzZSAKLQlsZW4gPSAxOwotI2Vsc2UKLSAgICBsZW4gPSAxOwotICAgIGNtZC0+dGFnPTA7Ci0jZW5kaWYgLyogU1VQUE9SVF9UQUdTICovCi0KLSAgICAvKiBTZW5kIG1lc3NhZ2UocykgKi8KLSAgICBkYXRhID0gdG1wOwotICAgIHBoYXNlID0gUEhBU0VfTVNHT1VUOwotICAgIE5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLSAgICBkcHJpbnRrKE5ERUJVR19TRUxFQ1RJT04sICJzY3NpJWQ6IG5leHVzIGVzdGFibGlzaGVkLlxuIiwgSE9TVE5PKTsKLSAgICAvKiBYWFggbmVlZCB0byBoYW5kbGUgZXJyb3JzIGhlcmUgKi8KLSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gY21kOwotI2lmbmRlZiBTVVBQT1JUX1RBR1MKLSAgICBob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdIHw9ICgxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwotI2VuZGlmICAgIAotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLSAgICBkcmVncy0+Y3NyIHw9IENTUl9JTlRSOwotI2VuZGlmCi0gICAgaW5pdGlhbGl6ZV9TQ3AoY21kKTsKLQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIAotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF90cmFuc2Zlcl9waW8gKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCAKLSAqICAgICAgdW5zaWduZWQgY2hhciAqcGhhc2UsIGludCAqY291bnQsIHVuc2lnbmVkIGNoYXIgKipkYXRhKQotICoKLSAqIFB1cnBvc2UgOiB0cmFuc2ZlcnMgZGF0YSBpbiBnaXZlbiBwaGFzZSB1c2luZyBwb2xsZWQgSS9PCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UgLSBpbnN0YW5jZSBvZiBkcml2ZXIsICpwaGFzZSAtIHBvaW50ZXIgdG8gCi0gKgl3aGF0IHBoYXNlIGlzIGV4cGVjdGVkLCAqY291bnQgLSBwb2ludGVyIHRvIG51bWJlciBvZiAKLSAqCWJ5dGVzIHRvIHRyYW5zZmVyLCAqKmRhdGEgLSBwb2ludGVyIHRvIGRhdGEgcG9pbnRlci4KLSAqIAotICogUmV0dXJucyA6IC0xIHdoZW4gZGlmZmVyZW50IHBoYXNlIGlzIGVudGVyZWQgd2l0aG91dCB0cmFuc2ZlcnJpbmcKLSAqCW1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBhcmUgdHJhbnNmZXJyZWQgb3IgZXhpdAotICoJaXMgaW4gc2FtZSBwaGFzZS4KLSAqCi0gKiAJQWxzbywgKnBoYXNlLCAqY291bnQsICpkYXRhIGFyZSBtb2RpZmllZCBpbiBwbGFjZS4KLSAqCi0gKiBYWFggTm90ZSA6IGhhbmRsaW5nIGZvciBidXMgZnJlZSBtYXkgYmUgdXNlZnVsLgotICovCi0KLS8qCi0gKiBOb3RlIDogdGhpcyBjb2RlIGlzIG5vdCBhcyBxdWljayBhcyBpdCBjb3VsZCBiZSwgaG93ZXZlciBpdCAKLSAqIElTIDEwMCUgcmVsaWFibGUsIGFuZCBmb3IgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyIHdoZXJlIHNwZWVkCi0gKiBjb3VudHMsIHdlIHdpbGwgYWx3YXlzIGRvIGEgcHNldWRvIERNQSBvciBETUEgdHJhbnNmZXIuCi0gKi8KLQotc3RhdGljIGludCBOQ1I1MzgwX3RyYW5zZmVyX3Bpbyggc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIAotCQkJCSB1bnNpZ25lZCBjaGFyICpwaGFzZSwgaW50ICpjb3VudCwKLQkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEpCi17Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBwID0gKnBoYXNlLCB0bXA7Ci0gICAgcmVnaXN0ZXIgaW50IGMgPSAqY291bnQ7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqZCA9ICpkYXRhOwotCi0gICAgLyogCi0gICAgICogVGhlIE5DUjUzODAgY2hpcCB3aWxsIG9ubHkgZHJpdmUgdGhlIFNDU0kgYnVzIHdoZW4gdGhlIAotICAgICAqIHBoYXNlIHNwZWNpZmllZCBpbiB0aGUgYXBwcm9wcmlhdGUgYml0cyBvZiB0aGUgVEFSR0VUIENPTU1BTkQKLSAgICAgKiBSRUdJU1RFUiBtYXRjaCB0aGUgU1RBVFVTIFJFR0lTVEVSCi0gICAgICovCi0KLSAgICBOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgUEhBU0VfU1JfVE9fVENSKHApKTsKLQotICAgIGRvIHsKLQkvKiAKLQkgKiBXYWl0IGZvciBhc3NlcnRpb24gb2YgUkVRLCBhZnRlciB3aGljaCB0aGUgcGhhc2UgYml0cyB3aWxsIGJlIAotCSAqIHZhbGlkIAotCSAqLwotCXdoaWxlICghKCh0bXAgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpICYgU1JfUkVRKSk7Ci0KLQlkcHJpbnRrKE5ERUJVR19IQU5EU0hBS0UsICJzY3NpJWQ6IFJFUSBkZXRlY3RlZFxuIiwgSE9TVE5PKTsKLQotCS8qIENoZWNrIGZvciBwaGFzZSBtaXNtYXRjaCAqLwkKLQlpZiAoKHRtcCAmIFBIQVNFX01BU0spICE9IHApIHsKLQkgICAgZHByaW50ayhOREVCVUdfUElPLCAic2NzaSVkOiBwaGFzZSBtaXNtYXRjaFxuIiwgSE9TVE5PKTsKLQkgICAgTkNSNTM4MF9kcHJpbnRfcGhhc2UoTkRFQlVHX1BJTywgaW5zdGFuY2UpOwotCSAgICBicmVhazsKLQl9Ci0KLQkvKiBEbyBhY3R1YWwgdHJhbnNmZXIgZnJvbSBTQ1NJIGJ1cyB0byAvIGZyb20gbWVtb3J5ICovCi0JaWYgKCEocCAmIFNSX0lPKSkgCi0JICAgIE5DUjUzODBfd3JpdGUoT1VUUFVUX0RBVEFfUkVHLCAqZCk7Ci0JZWxzZSAKLQkgICAgKmQgPSBOQ1I1MzgwX3JlYWQoQ1VSUkVOVF9TQ1NJX0RBVEFfUkVHKTsKLQotCSsrZDsKLQotCS8qIAotCSAqIFRoZSBTQ1NJIHN0YW5kYXJkIHN1Z2dlc3RzIHRoYXQgaW4gTVNHT1VUIHBoYXNlLCB0aGUgaW5pdGlhdG9yCi0JICogc2hvdWxkIGRyb3AgQVROIG9uIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIG1lc3NhZ2UgcGhhc2UKLQkgKiBhZnRlciBSRVEgaGFzIGJlZW4gYXNzZXJ0ZWQgZm9yIHRoZSBoYW5kc2hha2UgYnV0IGJlZm9yZQotCSAqIHRoZSBpbml0aWF0b3IgcmFpc2VzIEFDSy4KLQkgKi8KLQotCWlmICghKHAgJiBTUl9JTykpIHsKLQkgICAgaWYgKCEoKHAgJiBTUl9NU0cpICYmIGMgPiAxKSkgewotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCAKLQkJICAgIElDUl9BU1NFUlRfREFUQSk7Ci0JCU5DUjUzODBfZHByaW50KE5ERUJVR19QSU8sIGluc3RhbmNlKTsKLQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgCi0JCQlJQ1JfQVNTRVJUX0RBVEEgfCBJQ1JfQVNTRVJUX0FDSyk7Ci0JICAgIH0gZWxzZSB7Ci0JCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8Ci0JCSAgICBJQ1JfQVNTRVJUX0RBVEEgfCBJQ1JfQVNTRVJUX0FUTik7Ci0JCU5DUjUzODBfZHByaW50KE5ERUJVR19QSU8sIGluc3RhbmNlKTsKLQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgCi0JCSAgICBJQ1JfQVNTRVJUX0RBVEEgfCBJQ1JfQVNTRVJUX0FUTiB8IElDUl9BU1NFUlRfQUNLKTsKLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIE5DUjUzODBfZHByaW50KE5ERUJVR19QSU8sIGluc3RhbmNlKTsKLQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9BQ0spOwotCX0KLQotCXdoaWxlIChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9SRVEpOwotCi0JZHByaW50ayhOREVCVUdfSEFORFNIQUtFLCAic2NzaSVkOiByZXEgZmFsc2UsIGhhbmRzaGFrZSBjb21wbGV0ZVxuIiwgSE9TVE5PKTsKLQotLyoKLSAqIFdlIGhhdmUgc2V2ZXJhbCBzcGVjaWFsIGNhc2VzIHRvIGNvbnNpZGVyIGR1cmluZyBSRVEvQUNLIGhhbmRzaGFraW5nIDogCi0gKiAxLiAgV2Ugd2VyZSBpbiBNU0dPVVQgcGhhc2UsIGFuZCB3ZSBhcmUgb24gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgCi0gKgltZXNzYWdlLiAgQVROIG11c3QgYmUgZHJvcHBlZCBhcyBBQ0sgaXMgZHJvcHBlZC4KLSAqCi0gKiAyLiAgV2UgYXJlIGluIGEgTVNHSU4gcGhhc2UsIGFuZCB3ZSBhcmUgb24gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgIAotICoJbWVzc2FnZS4gIFdlIG11c3QgZXhpdCB3aXRoIEFDSyBhc3NlcnRlZCwgc28gdGhhdCB0aGUgY2FsbGluZwotICoJY29kZSBtYXkgcmFpc2UgQVROIGJlZm9yZSBkcm9wcGluZyBBQ0sgdG8gcmVqZWN0IHRoZSBtZXNzYWdlLgotICoKLSAqIDMuICBBQ0sgYW5kIEFUTiBhcmUgY2xlYXIgYW5kIHRoZSB0YXJnZXQgbWF5IHByb2NlZWQgYXMgbm9ybWFsLgotICovCi0JaWYgKCEocCA9PSBQSEFTRV9NU0dJTiAmJiBjID09IDEpKSB7ICAKLQkgICAgaWYgKHAgPT0gUEhBU0VfTVNHT1VUICYmIGMgPiAxKQotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FUTik7Ci0JICAgIGVsc2UKLQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQl9IAotICAgIH0gd2hpbGUgKC0tYyk7Ci0KLSAgICBkcHJpbnRrKE5ERUJVR19QSU8sICJzY3NpJWQ6IHJlc2lkdWFsICVkXG4iLCBIT1NUTk8sIGMpOwotCi0gICAgKmNvdW50ID0gYzsKLSAgICAqZGF0YSA9IGQ7Ci0gICAgdG1wID0gTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpOwotICAgIC8qIFRoZSBwaGFzZSByZWFkIGZyb20gdGhlIGJ1cyBpcyB2YWxpZCBpZiBlaXRoZXIgUkVRIGlzIChhbHJlYWR5KQotICAgICAqIGFzc2VydGVkIG9yIGlmIEFDSyBoYXNuJ3QgYmVlbiByZWxlYXNlZCB5ZXQuIFRoZSBsYXR0ZXIgaXMgdGhlIGNhc2UgaWYKLSAgICAgKiB3ZSdyZSBpbiBNU0dJTiBhbmQgYWxsIHdhbnRlZCBieXRlcyBoYXZlIGJlZW4gcmVjZWl2ZWQuICovCi0gICAgaWYgKCh0bXAgJiBTUl9SRVEpIHx8IChwID09IFBIQVNFX01TR0lOICYmIGMgPT0gMCkpCi0JKnBoYXNlID0gdG1wICYgUEhBU0VfTUFTSzsKLSAgICBlbHNlIAotCSpwaGFzZSA9IFBIQVNFX1VOS05PV047Ci0KLSAgICBpZiAoIWMgfHwgKCpwaGFzZSA9PSBwKSkKLQlyZXR1cm4gMDsKLSAgICBlbHNlIAotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uIDogZG9fYWJvcnQgKFNjc2lfSG9zdCAqaG9zdCkKLSAqIAotICogUHVycG9zZSA6IGFib3J0IHRoZSBjdXJyZW50bHkgZXN0YWJsaXNoZWQgbmV4dXMuICBTaG91bGQgb25seSBiZSAKLSAqIAljYWxsZWQgZnJvbSBhIHJvdXRpbmUgd2hpY2ggY2FuIGRyb3AgaW50byBhIAotICogCi0gKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgotICovCi0KLXN0YXRpYyBpbnQgZG9fYWJvcnQgKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpIAotewotICAgIHVuc2lnbmVkIGNoYXIgdG1wLCAqbXNncHRyLCBwaGFzZTsKLSAgICBpbnQgbGVuOwotCi0gICAgLyogUmVxdWVzdCBtZXNzYWdlIG91dCBwaGFzZSAqLwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfQVROKTsKLQotICAgIC8qIAotICAgICAqIFdhaXQgZm9yIHRoZSB0YXJnZXQgdG8gaW5kaWNhdGUgYSB2YWxpZCBwaGFzZSBieSBhc3NlcnRpbmcgCi0gICAgICogUkVRLiAgT25jZSB0aGlzIGhhcHBlbnMsIHdlJ2xsIGhhdmUgZWl0aGVyIGEgTVNHT1VUIHBoYXNlIAotICAgICAqIGFuZCBjYW4gaW1tZWRpYXRlbHkgc2VuZCB0aGUgQUJPUlQgbWVzc2FnZSwgb3Igd2UnbGwgaGF2ZSBzb21lIAotICAgICAqIG90aGVyIHBoYXNlIGFuZCB3aWxsIGhhdmUgdG8gc291cmNlL3NpbmsgZGF0YS4KLSAgICAgKiAKLSAgICAgKiBXZSByZWFsbHkgZG9uJ3QgY2FyZSB3aGF0IHZhbHVlIHdhcyBvbiB0aGUgYnVzIG9yIHdoYXQgdmFsdWUKLSAgICAgKiB0aGUgdGFyZ2V0IHNlZXMsIHNvIHdlIGp1c3QgaGFuZHNoYWtlLgotICAgICAqLwotICAgIAotICAgIHdoaWxlICghKCh0bXAgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpICYgU1JfUkVRKSk7Ci0KLSAgICBOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgUEhBU0VfU1JfVE9fVENSKHRtcCkpOwotCi0gICAgaWYgKCh0bXAgJiBQSEFTRV9NQVNLKSAhPSBQSEFTRV9NU0dPVVQpIHsKLQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FUTiB8IAotCQkgICAgICBJQ1JfQVNTRVJUX0FDSyk7Ci0Jd2hpbGUgKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JFUSk7Ci0JTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9BVE4pOwotICAgIH0KLSAgIAotICAgIHRtcCA9IEFCT1JUOwotICAgIG1zZ3B0ciA9ICZ0bXA7Ci0gICAgbGVuID0gMTsKLSAgICBwaGFzZSA9IFBIQVNFX01TR09VVDsKLSAgICBOQ1I1MzgwX3RyYW5zZmVyX3BpbyAoaG9zdCwgJnBoYXNlLCAmbGVuLCAmbXNncHRyKTsKLQotICAgIC8qCi0gICAgICogSWYgd2UgZ290IGhlcmUsIGFuZCB0aGUgY29tbWFuZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LAotICAgICAqIHdlJ3JlIGFib3V0IHRvIGdvIGludG8gYnVzIGZyZWUgc3RhdGUuCi0gICAgICovCi0KLSAgICByZXR1cm4gbGVuID8gLTEgOiAwOwotfQotCi0jaWYgZGVmaW5lZChSRUFMX0RNQSkKLS8qIAotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF90cmFuc2Zlcl9kbWEgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCAKLSAqICAgICAgdW5zaWduZWQgY2hhciAqcGhhc2UsIGludCAqY291bnQsIHVuc2lnbmVkIGNoYXIgKipkYXRhKQotICoKLSAqIFB1cnBvc2UgOiB0cmFuc2ZlcnMgZGF0YSBpbiBnaXZlbiBwaGFzZSB1c2luZyBlaXRoZXIgcmVhbAotICoJb3IgcHNldWRvIERNQS4KLSAqCi0gKiBJbnB1dHMgOiBpbnN0YW5jZSAtIGluc3RhbmNlIG9mIGRyaXZlciwgKnBoYXNlIC0gcG9pbnRlciB0byAKLSAqCXdoYXQgcGhhc2UgaXMgZXhwZWN0ZWQsICpjb3VudCAtIHBvaW50ZXIgdG8gbnVtYmVyIG9mIAotICoJYnl0ZXMgdG8gdHJhbnNmZXIsICoqZGF0YSAtIHBvaW50ZXIgdG8gZGF0YSBwb2ludGVyLgotICogCi0gKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVycmVkIG9yIGV4aXQKLSAqCWlzIGluIHNhbWUgcGhhc2UuCi0gKgotICogCUFsc28sICpwaGFzZSwgKmNvdW50LCAqZGF0YSBhcmUgbW9kaWZpZWQgaW4gcGxhY2UuCi0gKgotICovCi0KLQotc3RhdGljIGludCBOQ1I1MzgwX3RyYW5zZmVyX2RtYSggc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIAotCQkJCSB1bnNpZ25lZCBjaGFyICpwaGFzZSwgaW50ICpjb3VudCwKLQkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEpCi17Ci0gICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotICAgIHJlZ2lzdGVyIGludCBjID0gKmNvdW50OwotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgcCA9ICpwaGFzZTsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgLyogc2FuaXR5IGNoZWNrICovCi0gICAgaWYoIXN1bjNfZG1hX3NldHVwX2RvbmUpIHsKLQkgcHJpbnRrKCJzY3NpJWQ6IHRyYW5zZmVyX2RtYSB3aXRob3V0IHNldHVwIVxuIiwgSE9TVE5PKTsKLQkgQlVHKCk7Ci0gICAgfQotICAgIGhvc3RkYXRhLT5kbWFfbGVuID0gYzsKLQotICAgIGRwcmludGsoTkRFQlVHX0RNQSwgInNjc2klZDogaW5pdGlhbGl6aW5nIERNQSBmb3IgJXMsICVkIGJ5dGVzICVzICVwXG4iLAotCSAgICAgICBIT1NUTk8sIChwICYgU1JfSU8pID8gInJlYWRpbmciIDogIndyaXRpbmciLAotCSAgICAgICBjLCAocCAmIFNSX0lPKSA/ICJ0byIgOiAiZnJvbSIsICpkYXRhKTsKLQotICAgIC8qIG5ldGJzZCB0dXJucyBvZmYgaW50cyBoZXJlLCB3aHkgbm90IGJlIHNhZmUgYW5kIGRvIGl0IHRvbyAqLwotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICAKLSAgICAvKiBzZW5kIHN0YXJ0IGNoYWluICovCi0gICAgc3VuM3Njc2lfZG1hX3N0YXJ0KGMsICpkYXRhKTsKLSAgICAKLSAgICBpZiAocCAmIFNSX0lPKSB7Ci0JICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAxKTsKLQkgICAgTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIDApOwotCSAgICBOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCAoTkNSNTM4MF9yZWFkKE1PREVfUkVHKSB8IE1SX0RNQV9NT0RFIHwgTVJfRU5BQkxFX0VPUF9JTlRSKSk7Ci0JICAgIE5DUjUzODBfd3JpdGUoU1RBUlRfRE1BX0lOSVRJQVRPUl9SRUNFSVZFX1JFRywgMCk7Ci0gICAgfSBlbHNlIHsKLQkgICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDApOwotCSAgICBOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwotCSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0FTU0VSVF9EQVRBKTsKLQkgICAgTkNSNTM4MF93cml0ZShNT0RFX1JFRywgKE5DUjUzODBfcmVhZChNT0RFX1JFRykgfCBNUl9ETUFfTU9ERSB8IE1SX0VOQUJMRV9FT1BfSU5UUikpOwotCSAgICBOQ1I1MzgwX3dyaXRlKFNUQVJUX0RNQV9TRU5EX1JFRywgMCk7Ci0gICAgfQotCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotICAgIGRyZWdzLT5jc3IgfD0gQ1NSX0RNQV9FTkFCTEU7Ci0jZW5kaWYKLQotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotICAgIHN1bjNfZG1hX2FjdGl2ZSA9IDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChSRUFMX0RNQSkgKi8KLQotLyoKLSAqIEZ1bmN0aW9uIDogTkNSNTM4MF9pbmZvcm1hdGlvbl90cmFuc2ZlciAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi0gKgotICogUHVycG9zZSA6IHJ1biB0aHJvdWdoIHRoZSB2YXJpb3VzIFNDU0kgcGhhc2VzIGFuZCBkbyBhcyB0aGUgdGFyZ2V0IAotICogCWRpcmVjdHMgdXMgdG8uICBPcGVyYXRlcyBvbiB0aGUgY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kLCAKLSAqCWluc3RhbmNlLT5jb25uZWN0ZWQuCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UsIGluc3RhbmNlIGZvciB3aGljaCB3ZSBhcmUgZG9pbmcgY29tbWFuZHMKLSAqCi0gKiBTaWRlIGVmZmVjdHMgOiBTQ1NJIHRoaW5ncyBoYXBwZW4sIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUgd2lsbCBiZSAKLSAqCW1vZGlmaWVkIGlmIGEgY29tbWFuZCBkaXNjb25uZWN0cywgKmluc3RhbmNlLT5jb25uZWN0ZWQgd2lsbAotICoJY2hhbmdlLgotICoKLSAqIFhYWCBOb3RlIDogd2UgbmVlZCB0byB3YXRjaCBmb3IgYnVzIGZyZWUgb3IgYSByZXNldCBjb25kaXRpb24gaGVyZSAKLSAqIAl0byByZWNvdmVyIGZyb20gYW4gdW5leHBlY3RlZCBidXMgZnJlZSBjb25kaXRpb24uCi0gKi8KLSAKLXN0YXRpYyB2b2lkIE5DUjUzODBfaW5mb3JtYXRpb25fdHJhbnNmZXIgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotewotICAgIFNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIHVuc2lnbmVkIGNoYXIgbXNnb3V0ID0gTk9QOwotICAgIGludCBzaW5rID0gMDsKLSAgICBpbnQgbGVuOwotI2lmIGRlZmluZWQoUkVBTF9ETUEpCi0gICAgaW50IHRyYW5zZmVyc2l6ZTsKLSNlbmRpZgotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgdW5zaWduZWQgY2hhciBwaGFzZSwgdG1wLCBleHRlbmRlZF9tc2dbMTBdLCBvbGRfcGhhc2U9MHhmZjsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkOwotCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotICAgIGRyZWdzLT5jc3IgfD0gQ1NSX0lOVFI7Ci0jZW5kaWYKLQotICAgIHdoaWxlICgxKSB7Ci0JdG1wID0gTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpOwotCS8qIFdlIG9ubHkgaGF2ZSBhIHZhbGlkIFNDU0kgcGhhc2Ugd2hlbiBSRVEgaXMgYXNzZXJ0ZWQgKi8KLQlpZiAodG1wICYgU1JfUkVRKSB7Ci0JICAgIHBoYXNlID0gKHRtcCAmIFBIQVNFX01BU0spOyAKLSAJICAgIGlmIChwaGFzZSAhPSBvbGRfcGhhc2UpIHsKLQkJb2xkX3BoYXNlID0gcGhhc2U7Ci0JCU5DUjUzODBfZHByaW50X3BoYXNlKE5ERUJVR19JTkZPUk1BVElPTiwgaW5zdGFuY2UpOwotCSAgICB9Ci0KLQkgICAgaWYocGhhc2UgPT0gUEhBU0VfQ01ET1VUKSB7Ci0JCSAgICB2b2lkICpkOwotCQkgICAgdW5zaWduZWQgbG9uZyBjb3VudDsKLQotCQlpZiAoIWNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgJiYgY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCkgewotCQkJY291bnQgPSBjbWQtPlNDcC5idWZmZXItPmxlbmd0aDsKLQkJCWQgPSBTR0FERFIoY21kLT5TQ3AuYnVmZmVyKTsKLQkJfSBlbHNlIHsKLQkJCWNvdW50ID0gY21kLT5TQ3AudGhpc19yZXNpZHVhbDsKLQkJCWQgPSBjbWQtPlNDcC5wdHI7Ci0JCX0KLSNpZmRlZiBSRUFMX0RNQQotCQkvKiB0aGlzIGNvbW1hbmQgc2V0dXAgZm9yIGRtYSB5ZXQ/ICovCi0JCWlmKChjb3VudCA+IFNVTjNfRE1BX01JTlNJWkUpICYmIChzdW4zX2RtYV9zZXR1cF9kb25lCi0JCQkJCQkgICE9IGNtZCkpCi0JCXsKLQkJCWlmIChjbWQtPnJlcXVlc3QtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKSB7Ci0JCQkJc3VuM3Njc2lfZG1hX3NldHVwKGQsIGNvdW50LAotCQkJCQkJICAgcnFfZGF0YV9kaXIoY21kLT5yZXF1ZXN0KSk7Ci0JCQkJc3VuM19kbWFfc2V0dXBfZG9uZSA9IGNtZDsKLQkJCX0KLQkJfQotI2VuZGlmCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCQlkcmVncy0+Y3NyIHw9IENTUl9JTlRSOwotI2VuZGlmCi0JICAgIH0KLQotCSAgICAKLQkgICAgaWYgKHNpbmsgJiYgKHBoYXNlICE9IFBIQVNFX01TR09VVCkpIHsKLQkJTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIFBIQVNFX1NSX1RPX1RDUih0bXApKTsKLQotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FUTiB8IAotCQkgICAgSUNSX0FTU0VSVF9BQ0spOwotCQl3aGlsZSAoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKTsKLQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgCi0JCSAgICBJQ1JfQVNTRVJUX0FUTik7Ci0JCXNpbmsgPSAwOwotCQljb250aW51ZTsKLQkgICAgfQotCi0JICAgIHN3aXRjaCAocGhhc2UpIHsKLQkgICAgY2FzZSBQSEFTRV9EQVRBT1VUOgotI2lmIChOREVCVUcgJiBOREVCVUdfTk9fREFUQU9VVCkKLQkJcHJpbnRrKCJzY3NpJWQ6IE5ERUJVR19OT19EQVRBT1VUIHNldCwgYXR0ZW1wdGVkIERBVEFPVVQgIgotCQkgICAgICAgImFib3J0ZWRcbiIsIEhPU1ROTyk7Ci0JCXNpbmsgPSAxOwotCQlkb19hYm9ydChpbnN0YW5jZSk7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SICA8PCAxNjsKLQkJY21kLT5zY3NpX2RvbmUoY21kKTsKLQkJcmV0dXJuOwotI2VuZGlmCi0JICAgIGNhc2UgUEhBU0VfREFUQUlOOgotCQkvKiAKLQkJICogSWYgdGhlcmUgaXMgbm8gcm9vbSBsZWZ0IGluIHRoZSBjdXJyZW50IGJ1ZmZlciBpbiB0aGUKLQkJICogc2NhdHRlci1nYXRoZXIgbGlzdCwgbW92ZSBvbnRvIHRoZSBuZXh0IG9uZS4KLQkJICovCi0JCWlmICghY21kLT5TQ3AudGhpc19yZXNpZHVhbCAmJiBjbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsKSB7Ci0JCSAgICArK2NtZC0+U0NwLmJ1ZmZlcjsKLQkJICAgIC0tY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbDsKLQkJICAgIGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgPSBjbWQtPlNDcC5idWZmZXItPmxlbmd0aDsKLQkJICAgIGNtZC0+U0NwLnB0ciA9IFNHQUREUihjbWQtPlNDcC5idWZmZXIpOwotCQkgICAgZHByaW50ayhOREVCVUdfSU5GT1JNQVRJT04sICJzY3NpJWQ6ICVkIGJ5dGVzIGFuZCAlZCBidWZmZXJzIGxlZnRcbiIsCi0JCQkgICAgICAgSE9TVE5PLCBjbWQtPlNDcC50aGlzX3Jlc2lkdWFsLAotCQkJICAgICAgIGNtZC0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwpOwotCQl9Ci0KLQkJLyoKLQkJICogVGhlIHByZWZlcnJlZCB0cmFuc2ZlciBtZXRob2QgaXMgZ29pbmcgdG8gYmUgCi0JCSAqIFBTRVVETy1ETUEgZm9yIHN5c3RlbXMgdGhhdCBhcmUgc3RyaWN0bHkgUElPLAotCQkgKiBzaW5jZSB3ZSBjYW4gbGV0IHRoZSBoYXJkd2FyZSBkbyB0aGUgaGFuZHNoYWtpbmcuCi0JCSAqCi0JCSAqIEZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8ga25vdyB0aGUgdHJhbnNmZXJzaXplCi0JCSAqIGFoZWFkIG9mIHRpbWUsIHNpbmNlIHRoZSBwc2V1ZG8tRE1BIGNvZGUgd2lsbCBzaXQKLQkJICogaW4gYW4gdW5jb25kaXRpb25hbCBsb29wLgotCQkgKi8KLQotLyogKytyb21hbjogSSBzdWdnZXN0LCB0aGlzIHNob3VsZCBiZQotICogICAjaWYgZGVmKFJFQUxfRE1BKQotICogaW5zdGVhZCBvZiBsZWF2aW5nIFJFQUxfRE1BIG91dC4KLSAqLwotCi0jaWYgZGVmaW5lZChSRUFMX0RNQSkKLS8vCQlpZiAoIWNtZC0+ZGV2aWNlLT5ib3JrZW4gJiYKLQkJaWYoKHRyYW5zZmVyc2l6ZSA9Ci0JCSAgICBOQ1I1MzgwX2RtYV94ZmVyX2xlbihpbnN0YW5jZSxjbWQscGhhc2UpKSA+IFNVTjNfRE1BX01JTlNJWkUpIHsKLQkJICAgIGxlbiA9IHRyYW5zZmVyc2l6ZTsKLQkJICAgIGNtZC0+U0NwLnBoYXNlID0gcGhhc2U7Ci0KLQkJICAgIGlmIChOQ1I1MzgwX3RyYW5zZmVyX2RtYShpbnN0YW5jZSwgJnBoYXNlLAotCQkJJmxlbiwgKHVuc2lnbmVkIGNoYXIgKiopICZjbWQtPlNDcC5wdHIpKSB7Ci0JCQkvKgotCQkJICogSWYgdGhlIHdhdGNoZG9nIHRpbWVyIGZpcmVzLCBhbGwgZnV0dXJlCi0JCQkgKiBhY2Nlc3NlcyB0byB0aGlzIGRldmljZSB3aWxsIHVzZSB0aGUKLQkJCSAqIHBvbGxlZC1JTy4gKi8gCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogc3dpdGNoaW5nIHRhcmdldCAlZCAiCi0JCQkgICAgICAgImx1biAlbGx1IHRvIHNsb3cgaGFuZHNoYWtlXG4iLCBIT1NUTk8sCi0JCQkgICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQkJCWNtZC0+ZGV2aWNlLT5ib3JrZW4gPSAxOwotCQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgCi0JCQkgICAgSUNSX0FTU0VSVF9BVE4pOwotCQkJc2luayA9IDE7Ci0JCQlkb19hYm9ydChpbnN0YW5jZSk7Ci0JCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiAgPDwgMTY7Ci0JCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCQkJLyogWFhYIC0gbmVlZCB0byBzb3VyY2Ugb3Igc2luayBkYXRhIGhlcmUsIGFzIGFwcHJvcHJpYXRlICovCi0JCSAgICB9IGVsc2UgewotI2lmZGVmIFJFQUxfRE1BCi0JCQkvKiArK3JvbWFuOiBXaGVuIHVzaW5nIHJlYWwgRE1BLAotCQkJICogaW5mb3JtYXRpb25fdHJhbnNmZXIoKSBzaG91bGQgcmV0dXJuIGFmdGVyCi0JCQkgKiBzdGFydGluZyBETUEgc2luY2UgaXQgaGFzIG5vdGhpbmcgbW9yZSB0bwotCQkJICogZG8uCi0JCQkgKi8KLQkJCQkgICAgcmV0dXJuOwotI2Vsc2UJCQkKLQkJCWNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgLT0gdHJhbnNmZXJzaXplIC0gbGVuOwotI2VuZGlmCi0JCSAgICB9Ci0JCX0gZWxzZSAKLSNlbmRpZiAvKiBkZWZpbmVkKFJFQUxfRE1BKSAqLwotCQkgIE5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsIAotCQkgICAgKGludCAqKSAmY21kLT5TQ3AudGhpc19yZXNpZHVhbCwgKHVuc2lnbmVkIGNoYXIgKiopCi0JCSAgICAmY21kLT5TQ3AucHRyKTsKLSNpZmRlZiBSRUFMX0RNQQotCQkvKiBpZiB3ZSBoYWQgaW50ZW5kZWQgdG8gZG1hIHRoYXQgY29tbWFuZCBjbGVhciBpdCAqLwotCQlpZihzdW4zX2RtYV9zZXR1cF9kb25lID09IGNtZCkKLQkJCXN1bjNfZG1hX3NldHVwX2RvbmUgPSBOVUxMOwotI2VuZGlmCi0KLQkJYnJlYWs7Ci0JICAgIGNhc2UgUEhBU0VfTVNHSU46Ci0JCWxlbiA9IDE7Ci0JCWRhdGEgPSAmdG1wOwotCQlOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCAwKTsgCS8qIGRpc2FibGUgcmVzZWxlY3RzICovCi0JCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLQkJY21kLT5TQ3AuTWVzc2FnZSA9IHRtcDsKLQkJCi0JCXN3aXRjaCAodG1wKSB7Ci0JCS8qCi0JCSAqIExpbmtpbmcgbGV0cyB1cyByZWR1Y2UgdGhlIHRpbWUgcmVxdWlyZWQgdG8gZ2V0IHRoZSAKLQkJICogbmV4dCBjb21tYW5kIG91dCB0byB0aGUgZGV2aWNlLCBob3BlZnVsbHkgdGhpcyB3aWxsCi0JCSAqIG1lYW4gd2UgZG9uJ3Qgd2FzdGUgYW5vdGhlciByZXZvbHV0aW9uIGR1ZSB0byB0aGUgZGVsYXlzCi0JCSAqIHJlcXVpcmVkIGJ5IEFSQklUUkFUSU9OIGFuZCBhbm90aGVyIFNFTEVDVElPTi4KLQkJICoKLQkJICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcHJvcG9zYWwsIGxvdyBsZXZlbCBkcml2ZXJzCi0JCSAqIG1lcmVseSBoYXZlIHRvIHN0YXJ0IHRoZSBuZXh0IGNvbW1hbmQsIHBvaW50ZWQgdG8gYnkgCi0JCSAqIG5leHRfbGluaywgZG9uZSgpIGlzIGNhbGxlZCBhcyB3aXRoIHVubGlua2VkIGNvbW1hbmRzLgotCQkgKi8KLSNpZmRlZiBMSU5LRUQKLQkJY2FzZSBMSU5LRURfQ01EX0NPTVBMRVRFOgotCQljYXNlIExJTktFRF9GTEdfQ01EX0NPTVBMRVRFOgotCQkgICAgLyogQWNjZXB0IG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCi0JCSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCQkgICAgCi0JCSAgICBkcHJpbnRrKE5ERUJVR19MSU5LRUQsICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWxsdSBsaW5rZWQgY29tbWFuZCAiCi0JCQkgICAgICAgImNvbXBsZXRlLlxuIiwgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCi0JCSAgICAvKiBFbmFibGUgcmVzZWxlY3QgaW50ZXJydXB0cyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkgICAgLyoKLQkJICAgICAqIFNhbml0eSBjaGVjayA6IEEgbGlua2VkIGNvbW1hbmQgc2hvdWxkIG9ubHkgdGVybWluYXRlCi0JCSAgICAgKiB3aXRoIG9uZSBvZiB0aGVzZSBtZXNzYWdlcyBpZiB0aGVyZSBhcmUgbW9yZSBsaW5rZWQKLQkJICAgICAqIGNvbW1hbmRzIGF2YWlsYWJsZS4KLQkJICAgICAqLwotCi0JCSAgICBpZiAoIWNtZC0+bmV4dF9saW5rKSB7Ci0JCQkgcHJpbnRrKEtFUk5fTk9USUNFICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWxsdSAiCi0JCQkJImxpbmtlZCBjb21tYW5kIGNvbXBsZXRlLCBubyBuZXh0X2xpbmtcbiIsCi0JCQkJSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCQkJICAgIHNpbmsgPSAxOwotCQkJICAgIGRvX2Fib3J0IChpbnN0YW5jZSk7Ci0JCQkgICAgcmV0dXJuOwotCQkgICAgfQotCi0JCSAgICBpbml0aWFsaXplX1NDcChjbWQtPm5leHRfbGluayk7Ci0JCSAgICAvKiBUaGUgbmV4dCBjb21tYW5kIGlzIHN0aWxsIHBhcnQgb2YgdGhpcyBwcm9jZXNzOyBjb3B5IGl0Ci0JCSAgICAgKiBhbmQgZG9uJ3QgZnJlZSBpdCEgKi8KLQkJICAgIGNtZC0+bmV4dF9saW5rLT50YWcgPSBjbWQtPnRhZzsKLQkJICAgIGNtZC0+cmVzdWx0ID0gY21kLT5TQ3AuU3RhdHVzIHwgKGNtZC0+U0NwLk1lc3NhZ2UgPDwgOCk7IAotCQkgICAgZHByaW50ayhOREVCVUdfTElOS0VELCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVsbHUgbGlua2VkIHJlcXVlc3QgIgotCQkJICAgICAgICJkb25lLCBjYWxsaW5nIHNjc2lfZG9uZSgpLlxuIiwKLQkJCSAgICAgICBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCQkgICAgY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKLSNlbmRpZgotCQkgICAgY21kLT5zY3NpX2RvbmUoY21kKTsKLQkJICAgIGNtZCA9IGhvc3RkYXRhLT5jb25uZWN0ZWQ7Ci0JCSAgICBicmVhazsKLSNlbmRpZiAvKiBkZWYgTElOS0VEICovCi0JCWNhc2UgQUJPUlQ6Ci0JCWNhc2UgQ09NTUFORF9DT01QTEVURTogCi0JCSAgICAvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLQkJICAgIGRwcmludGsoTkRFQlVHX1FVRVVFUywgInNjc2klZDogY29tbWFuZCBmb3IgdGFyZ2V0ICVkLCBsdW4gJWxsdSAiCi0JCQkgICAgICAiY29tcGxldGVkXG4iLCBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCSAgICBjbWRfZnJlZV90YWcoIGNtZCApOwotCQkgICAgaWYgKHN0YXR1c19ieXRlKGNtZC0+U0NwLlN0YXR1cykgPT0gUVVFVUVfRlVMTCkgewotCQkJLyogVHVybiBhIFFVRVVFIEZVTEwgc3RhdHVzIGludG8gQlVTWSwgSSB0aGluayB0aGUKLQkJCSAqIG1pZCBsZXZlbCBjYW5ub3QgaGFuZGxlIFFVRVVFIEZVTEwgOi0oIChUaGUKLQkJCSAqIGNvbW1hbmQgaXMgcmV0cmllZCBhZnRlciBCVVNZKS4gQWxzbyB1cGRhdGUgb3VyCi0JCQkgKiBxdWV1ZSBzaXplIHRvIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGlzc3VlZAotCQkJICogY29tbWFuZHMgbm93LgotCQkJICovCi0JCQkvKiArK0FuZHJlYXM6IHRoZSBtaWQgbGV2ZWwgY29kZSBrbm93cyBhYm91dAotCQkJICAgUVVFVUVfRlVMTCBub3cuICovCi0JCQlUQUdfQUxMT0MgKnRhID0gJlRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bY21kLT5kZXZpY2UtPmx1bl07Ci0JCQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVsbHUgcmV0dXJuZWQgIgotCQkJCSAgICJRVUVVRV9GVUxMIGFmdGVyICVkIGNvbW1hbmRzXG4iLAotCQkJCSAgIEhPU1ROTywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLAotCQkJCSAgIHRhLT5ucl9hbGxvY2F0ZWQpOwotCQkJaWYgKHRhLT5xdWV1ZV9zaXplID4gdGEtPm5yX2FsbG9jYXRlZCkKLQkJCSAgICB0YS0+bnJfYWxsb2NhdGVkID0gdGEtPnF1ZXVlX3NpemU7Ci0JCSAgICB9Ci0jZWxzZQotCQkgICAgaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmPSB+KDEgPDwgY21kLT5kZXZpY2UtPmx1bik7Ci0jZW5kaWYKLQkJICAgIC8qIEVuYWJsZSByZXNlbGVjdCBpbnRlcnJ1cHRzICovCi0JCSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0KLQkJICAgIC8qIAotCQkgICAgICogSSdtIG5vdCBzdXJlIHdoYXQgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaGVyZSBpcyA6IAotCQkgICAgICogCi0JCSAgICAgKiBJZiB0aGUgY29tbWFuZCB0aGF0IGp1c3QgZXhlY3V0ZWQgaXMgTk9UIGEgcmVxdWVzdCAKLQkJICAgICAqIHNlbnNlLCB0aGUgb2J2aW91cyB0aGluZyB0byBkbyBpcyB0byBzZXQgdGhlIHJlc3VsdAotCQkgICAgICogY29kZSB0byB0aGUgdmFsdWVzIG9mIHRoZSBzdG9yZWQgcGFyYW1ldGVycy4KLQkJICAgICAqIAotCQkgICAgICogSWYgaXQgd2FzIGEgUkVRVUVTVCBTRU5TRSBjb21tYW5kLCB3ZSBuZWVkIHNvbWUgd2F5IHRvCi0JCSAgICAgKiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIGZhaWx1cmUgY29kZSBvZiB0aGUgb3JpZ2luYWwKLQkJICAgICAqIGFuZCB0aGUgZmFpbHVyZSBjb2RlIG9mIHRoZSBSRVFVRVNUIHNlbnNlIC0gdGhlIG9idmlvdXMKLQkJICAgICAqIGNhc2UgaXMgc3VjY2Vzcywgd2hlcmUgd2UgZmFsbCB0aHJvdWdoIGFuZCBsZWF2ZSB0aGUKLQkJICAgICAqIHJlc3VsdCBjb2RlIHVuY2hhbmdlZC4KLQkJICAgICAqIAotCQkgICAgICogVGhlIG5vbi1vYnZpb3VzIHBsYWNlIGlzIHdoZXJlIHRoZSBSRVFVRVNUIFNFTlNFIGZhaWxlZAotCQkgICAgICovCi0KLQkJICAgIGlmIChjbWQtPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSkgCi0JCQljbWQtPnJlc3VsdCA9IGNtZC0+U0NwLlN0YXR1cyB8IChjbWQtPlNDcC5NZXNzYWdlIDw8IDgpOyAKLQkJICAgIGVsc2UgaWYgKHN0YXR1c19ieXRlKGNtZC0+U0NwLlN0YXR1cykgIT0gR09PRCkKLQkJCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHgwMGZmZmYpIHwgKERJRF9FUlJPUiA8PCAxNik7Ci0JCSAgICAKLSNpZmRlZiBBVVRPU0VOU0UKLQkJICAgIGlmICgoY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpICYmCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBob3N0ZGF0YS0+c2VzLmNtZF9sZW4pIHsKLQkJCXNjc2lfZWhfcmVzdG9yZV9jbW5kKGNtZCwgJmhvc3RkYXRhLT5zZXMpOwotCQkJaG9zdGRhdGEtPnNlcy5jbWRfbGVuID0gMCA7Ci0JCSAgICB9Ci0KLQkJICAgIGlmICgoY21kLT5jbW5kWzBdICE9IFJFUVVFU1RfU0VOU0UpICYmIAotCQkJKHN0YXR1c19ieXRlKGNtZC0+U0NwLlN0YXR1cykgPT0gQ0hFQ0tfQ09ORElUSU9OKSkgewotCQkJc2NzaV9laF9wcmVwX2NtbmQoY21kLCAmaG9zdGRhdGEtPnNlcywgTlVMTCwgMCwgfjApOwotCQkJZHByaW50ayhOREVCVUdfQVVUT1NFTlNFLCAic2NzaSVkOiBwZXJmb3JtaW5nIHJlcXVlc3Qgc2Vuc2VcbiIsCi0JCQkJICAgIEhPU1ROTyk7Ci0JCQkvKiB0aGlzIGlzIGluaXRpYWxpemVkIGZyb20gaW5pdGlhbGl6ZV9TQ3AgCi0JCQljbWQtPlNDcC5idWZmZXIgPSBOVUxMOwotCQkJY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCA9IDA7Ci0JCQkqLwotCi0JCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlMSVNUKGNtZCxob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkJU0VUX05FWFQoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkgICAgICAgIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNtZDsKLQkJICAgICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQlkcHJpbnRrKE5ERUJVR19RVUVVRVMsICJzY3NpJWQ6IFJFUVVFU1QgU0VOU0UgYWRkZWQgdG8gaGVhZCBvZiAiCi0JCQkJICAiaXNzdWUgcXVldWVcbiIsIEhfTk8oY21kKSk7Ci0JCSAgIH0gZWxzZQotI2VuZGlmIC8qIGRlZiBBVVRPU0VOU0UgKi8KLQkJICAgewotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQkJICAgICAgIGNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKLQkJICAgICAgIGNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JCSAgICB9Ci0KLQkJICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQkJICAgIC8qIAotCQkgICAgICogUmVzdG9yZSBwaGFzZSBiaXRzIHRvIDAgc28gYW4gaW50ZXJydXB0ZWQgc2VsZWN0aW9uLCAKLQkJICAgICAqIGFyYml0cmF0aW9uIGNhbiByZXN1bWUuCi0JCSAgICAgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAwKTsKLQkJICAgIAotCQkgICAgd2hpbGUgKChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9CU1kpICYmICFob3N0ZGF0YS0+Y29ubmVjdGVkKQotCQkJYmFycmllcigpOwotCi0JCSAgICByZXR1cm47Ci0JCWNhc2UgTUVTU0FHRV9SRUpFQ1Q6Ci0JCSAgICAvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCSAgICAvKiBFbmFibGUgcmVzZWxlY3QgaW50ZXJydXB0cyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkgICAgc3dpdGNoIChob3N0ZGF0YS0+bGFzdF9tZXNzYWdlKSB7Ci0JCSAgICBjYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCQkgICAgY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJICAgIGNhc2UgU0lNUExFX1FVRVVFX1RBRzoKLQkJCS8qIFRoZSB0YXJnZXQgb2J2aW91c2x5IGRvZXNuJ3Qgc3VwcG9ydCB0YWdnZWQKLQkJCSAqIHF1ZXVpbmcsIGV2ZW4gdGhvdWdoIGl0IGFubm91bmNlZCB0aGlzIGFiaWxpdHkgaW4KLQkJCSAqIGl0cyBJTlFVSVJZIGRhdGEgPyE/IChtYXliZSBvbmx5IHRoaXMgTFVOPykgT2ssCi0JCQkgKiBjbGVhciAndGFnZ2VkX3N1cHBvcnRlZCcgYW5kIGxvY2sgdGhlIExVTiwgc2luY2UKLQkJCSAqIHRoZSBjb21tYW5kIGlzIHRyZWF0ZWQgYXMgdW50YWdnZWQgZnVydGhlciBvbi4KLQkJCSAqLwotCQkJY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAwOwotCQkJaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSB8PSAoMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKLQkJCWNtZC0+dGFnID0gVEFHX05PTkU7Ci0JCQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVsbHUgcmVqZWN0ZWQgIgotCQkJCSAgICJRVUVVRV9UQUcgbWVzc2FnZTsgdGFnZ2VkIHF1ZXVpbmcgIgotCQkJCSAgICJkaXNhYmxlZFxuIiwKLQkJCQkgICBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIGJyZWFrOwotCQljYXNlIERJU0NPTk5FQ1Q6Ci0JCSAgICAvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCSAgICBjbWQtPmRldmljZS0+ZGlzY29ubmVjdCA9IDE7Ci0JCSAgICBMSVNUKGNtZCxob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKTsKLQkJICAgIFNFVF9ORVhUKGNtZCwgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSk7Ci0JCSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLQkJICAgIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBjbWQ7Ci0JCSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCSAgICBkcHJpbnRrKE5ERUJVR19RVUVVRVMsICJzY3NpJWQ6IGNvbW1hbmQgZm9yIHRhcmdldCAlZCBsdW4gJWxsdSB3YXMgIgotCQkJICAgICAgIm1vdmVkIGZyb20gY29ubmVjdGVkIHRvIHRoZSAiCi0JCQkgICAgICAiZGlzY29ubmVjdGVkX3F1ZXVlXG4iLCBIT1NUTk8sIAotCQkJICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQkJICAgIC8qIAotCQkgICAgICogUmVzdG9yZSBwaGFzZSBiaXRzIHRvIDAgc28gYW4gaW50ZXJydXB0ZWQgc2VsZWN0aW9uLCAKLQkJICAgICAqIGFyYml0cmF0aW9uIGNhbiByZXN1bWUuCi0JCSAgICAgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAwKTsKLQotCQkgICAgLyogRW5hYmxlIHJlc2VsZWN0IGludGVycnVwdHMgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQkJICAgIC8qIFdhaXQgZm9yIGJ1cyBmcmVlIHRvIGF2b2lkIG5hc3R5IHRpbWVvdXRzICovCi0JCSAgICB3aGlsZSAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX0JTWSkgJiYgIWhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCSAgICAJYmFycmllcigpOwotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQkJICAgIGRyZWdzLT5jc3IgfD0gQ1NSX0RNQV9FTkFCTEU7Ci0jZW5kaWYKLQkJICAgIHJldHVybjsKLQkJLyogCi0JCSAqIFRoZSBTQ1NJIGRhdGEgcG9pbnRlciBpcyAqSU1QTElDSVRMWSogc2F2ZWQgb24gYSBkaXNjb25uZWN0Ci0JCSAqIG9wZXJhdGlvbiwgaW4gdmlvbGF0aW9uIG9mIHRoZSBTQ1NJIHNwZWMgc28gd2UgY2FuIHNhZmVseSAKLQkJICogaWdub3JlIFNBVkUvUkVTVE9SRSBwb2ludGVycyBjYWxscy4KLQkJICoKLQkJICogVW5mb3J0dW5hdGVseSwgc29tZSBkaXNrcyB2aW9sYXRlIHRoZSBTQ1NJIHNwZWMgYW5kIAotCQkgKiBkb24ndCBpc3N1ZSB0aGUgcmVxdWlyZWQgU0FWRV9QT0lOVEVSUyBtZXNzYWdlIGJlZm9yZQotCQkgKiBkaXNjb25uZWN0aW5nLCBhbmQgd2UgaGF2ZSB0byBicmVhayBzcGVjIHRvIHJlbWFpbiAKLQkJICogY29tcGF0aWJsZS4KLQkJICovCi0JCWNhc2UgU0FWRV9QT0lOVEVSUzoKLQkJY2FzZSBSRVNUT1JFX1BPSU5URVJTOgotCQkgICAgLyogQWNjZXB0IG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCi0JCSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCQkgICAgLyogRW5hYmxlIHJlc2VsZWN0IGludGVycnVwdHMgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQkJICAgIGJyZWFrOwotCQljYXNlIEVYVEVOREVEX01FU1NBR0U6Ci0vKiAKLSAqIEV4dGVuZGVkIG1lc3NhZ2VzIGFyZSBzZW50IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0IDoKLSAqIEJ5dGUgCQotICogMAkJRVhURU5ERURfTUVTU0FHRSA9PSAxCi0gKiAxCQlsZW5ndGggKGluY2x1ZGVzIG9uZSBieXRlIGZvciBjb2RlLCBkb2Vzbid0IAotICoJCWluY2x1ZGUgZmlyc3QgdHdvIGJ5dGVzKQotICogMiAJCWNvZGUKLSAqIDMuLmxlbmd0aCsxCWFyZ3VtZW50cwotICoKLSAqIFN0YXJ0IHRoZSBleHRlbmRlZCBtZXNzYWdlIGJ1ZmZlciB3aXRoIHRoZSBFWFRFTkRFRF9NRVNTQUdFCi0gKiBieXRlLCBzaW5jZSBzcGlfcHJpbnRfbXNnKCkgd2FudHMgdGhlIHdob2xlIHRoaW5nLiAgCi0gKi8KLQkJICAgIGV4dGVuZGVkX21zZ1swXSA9IEVYVEVOREVEX01FU1NBR0U7Ci0JCSAgICAvKiBBY2NlcHQgZmlyc3QgYnl0ZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0KLQkJICAgIGRwcmludGsoTkRFQlVHX0VYVEVOREVELCAic2NzaSVkOiByZWNlaXZpbmcgZXh0ZW5kZWQgbWVzc2FnZVxuIiwgSE9TVE5PKTsKLQotCQkgICAgbGVuID0gMjsKLQkJICAgIGRhdGEgPSBleHRlbmRlZF9tc2cgKyAxOwotCQkgICAgcGhhc2UgPSBQSEFTRV9NU0dJTjsKLQkJICAgIE5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLQkJICAgIGRwcmludGsoTkRFQlVHX0VYVEVOREVELCAic2NzaSVkOiBsZW5ndGg9JWQsIGNvZGU9MHglMDJ4XG4iLCBIT1NUTk8sCi0JCQkgICAgICAgKGludClleHRlbmRlZF9tc2dbMV0sIChpbnQpZXh0ZW5kZWRfbXNnWzJdKTsKLQotCQkgICAgaWYgKCFsZW4gJiYgZXh0ZW5kZWRfbXNnWzFdIDw9IAotCQkJKHNpemVvZiAoZXh0ZW5kZWRfbXNnKSAtIDEpKSB7Ci0JCQkvKiBBY2NlcHQgdGhpcmQgYnl0ZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCQlsZW4gPSBleHRlbmRlZF9tc2dbMV0gLSAxOwotCQkJZGF0YSA9IGV4dGVuZGVkX21zZyArIDM7Ci0JCQlwaGFzZSA9IFBIQVNFX01TR0lOOwotCi0JCQlOQ1I1MzgwX3RyYW5zZmVyX3BpbyhpbnN0YW5jZSwgJnBoYXNlLCAmbGVuLCAmZGF0YSk7Ci0JCQlkcHJpbnRrKE5ERUJVR19FWFRFTkRFRCwgInNjc2klZDogbWVzc2FnZSByZWNlaXZlZCwgcmVzaWR1YWwgJWRcbiIsCi0JCQkJICAgSE9TVE5PLCBsZW4pOwotCi0JCQlzd2l0Y2ggKGV4dGVuZGVkX21zZ1syXSkgewotCQkJY2FzZSBFWFRFTkRFRF9TRFRSOgotCQkJY2FzZSBFWFRFTkRFRF9XRFRSOgotCQkJY2FzZSBFWFRFTkRFRF9NT0RJRllfREFUQV9QT0lOVEVSOgotCQkJY2FzZSBFWFRFTkRFRF9FWFRFTkRFRF9JREVOVElGWToKLQkJCSAgICB0bXAgPSAwOwotCQkJfQotCQkgICAgfSBlbHNlIGlmIChsZW4pIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBlcnJvciByZWNlaXZpbmcgIgotCQkJICAgICAgICJleHRlbmRlZCBtZXNzYWdlXG4iLCBIT1NUTk8pOwotCQkJdG1wID0gMDsKLQkJICAgIH0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogZXh0ZW5kZWQgbWVzc2FnZSAiCi0JCQkgICAgICAgImNvZGUgJTAyeCBsZW5ndGggJWQgaXMgdG9vIGxvbmdcbiIsCi0JCQkgICAgICAgSE9TVE5PLCBleHRlbmRlZF9tc2dbMl0sIGV4dGVuZGVkX21zZ1sxXSk7Ci0JCQl0bXAgPSAwOwotCQkgICAgfQotCQkvKiBGYWxsIHRocm91Z2ggdG8gcmVqZWN0IG1lc3NhZ2UgKi8KLQotCQkvKiAKLSAgCQkgKiBJZiB3ZSBnZXQgc29tZXRoaW5nIHdlaXJkIHRoYXQgd2UgYXJlbid0IGV4cGVjdGluZywgCi0gCQkgKiByZWplY3QgaXQuCi0JCSAqLwotCQlkZWZhdWx0OgotCQkgICAgaWYgKCF0bXApIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IHJlamVjdGluZyBtZXNzYWdlICIsIEhPU1ROTyk7Ci0JCQlzcGlfcHJpbnRfbXNnKGV4dGVuZGVkX21zZyk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCSAgICB9IGVsc2UgaWYgKHRtcCAhPSBFWFRFTkRFRF9NRVNTQUdFKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIHVua25vd24gIgotCQkJICAgICAgICJtZXNzYWdlICUwMnggZnJvbSB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLAotCQkJICAgICAgIEhPU1ROTywgdG1wLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCQkgICAgZWxzZQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIHVua25vd24gIgotCQkJICAgICAgICJleHRlbmRlZCBtZXNzYWdlICIKLQkJCSAgICAgICAiY29kZSAlMDJ4LCBsZW5ndGggJWQgZnJvbSB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLAotCQkJICAgICAgIEhPU1ROTywgZXh0ZW5kZWRfbXNnWzFdLCBleHRlbmRlZF9tc2dbMF0sCi0JCQkgICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLSAgIAotCi0JCSAgICBtc2dvdXQgPSBNRVNTQUdFX1JFSkVDVDsKLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IAotCQkJSUNSX0FTU0VSVF9BVE4pOwotCQkgICAgYnJlYWs7Ci0JCX0gLyogc3dpdGNoICh0bXApICovCi0JCWJyZWFrOwotCSAgICBjYXNlIFBIQVNFX01TR09VVDoKLQkJbGVuID0gMTsKLQkJZGF0YSA9ICZtc2dvdXQ7Ci0JCWhvc3RkYXRhLT5sYXN0X21lc3NhZ2UgPSBtc2dvdXQ7Ci0JCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLQkJaWYgKG1zZ291dCA9PSBBQk9SVCkgewotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkgICAgY21kX2ZyZWVfdGFnKCBjbWQgKTsKLSNlbHNlCi0JCSAgICBob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKLSNlbmRpZgotCQkgICAgaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7Ci0JCSAgICBjbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JCSAgICBjb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwotI2VuZGlmCi0JCSAgICBjbWQtPnNjc2lfZG9uZShjbWQpOwotCQkgICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkgICAgcmV0dXJuOwotCQl9Ci0JCW1zZ291dCA9IE5PUDsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgUEhBU0VfQ01ET1VUOgotCQlsZW4gPSBjbWQtPmNtZF9sZW47Ci0JCWRhdGEgPSBjbWQtPmNtbmQ7Ci0JCS8qIAotCQkgKiBYWFggZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIG9uIG1hY2hpbmVzIHdpdGggYSAKLQkJICogUFNFVURPLURNQSBhcmNoaXRlY3R1cmUgd2Ugc2hvdWxkIHByb2JhYmx5IAotCQkgKiB1c2UgdGhlIGRtYSB0cmFuc2ZlciBmdW5jdGlvbi4gIAotCQkgKi8KLQkJTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgCi0JCSAgICAmZGF0YSk7Ci0JCWJyZWFrOwotCSAgICBjYXNlIFBIQVNFX1NUQVRJTjoKLQkJbGVuID0gMTsKLQkJZGF0YSA9ICZ0bXA7Ci0JCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLQkJY21kLT5TQ3AuU3RhdHVzID0gdG1wOwotCQlicmVhazsKLQkgICAgZGVmYXVsdDoKLQkJcHJpbnRrKCJzY3NpJWQ6IHVua25vd24gcGhhc2VcbiIsIEhPU1ROTyk7Ci0JCU5DUjUzODBfZHByaW50KE5ERUJVR19BTlksIGluc3RhbmNlKTsKLQkgICAgfSAvKiBzd2l0Y2gocGhhc2UpICovCi0JfSAvKiBpZiAodG1wICogU1JfUkVRKSAqLyAKLSAgICB9IC8qIHdoaWxlICgxKSAqLwotfQotCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcmVzZWxlY3QgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotICoKLSAqIFB1cnBvc2UgOiBkb2VzIHJlc2VsZWN0aW9uLCBpbml0aWFsaXppbmcgdGhlIGluc3RhbmNlLT5jb25uZWN0ZWQgCi0gKglmaWVsZCB0byBwb2ludCB0byB0aGUgc3RydWN0IHNjc2lfY21uZCBmb3Igd2hpY2ggdGhlIElfVF9MIG9yIElfVF9MX1EKLSAqCW5leHVzIGhhcyBiZWVuIHJlZXN0YWJsaXNoZWQsCi0gKgkKLSAqIElucHV0cyA6IGluc3RhbmNlIC0gdGhpcyBpbnN0YW5jZSBvZiB0aGUgTkNSNTM4MC4KLSAqCi0gKi8KLQotLyogaXQgbWlnaHQgZXZlbnR1YWxseSBwcm92ZSBuZWNlc3NhcnkgdG8gZG8gYSBkbWEgc2V0dXAgb24KLSAgIHJlc2VsZWN0aW9uLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGJlIG5lZWRlZCBub3cgLS0gc2FtICovCi0KLXN0YXRpYyB2b2lkIE5DUjUzODBfcmVzZWxlY3QgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotewotICAgIFNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKLSAgICB1bnNpZ25lZCBjaGFyIHRhcmdldF9tYXNrOwotICAgIHVuc2lnbmVkIGNoYXIgbHVuOwotI2lmZGVmIFNVUFBPUlRfVEFHUwotICAgIHVuc2lnbmVkIGNoYXIgdGFnOwotI2VuZGlmCi0gICAgdW5zaWduZWQgY2hhciBtc2dbM107Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqdG1wID0gTlVMTCwgKnByZXY7Ci0vKiAgICB1bnNpZ25lZCBsb25nIGZsYWdzOyAqLwotCi0gICAgLyoKLSAgICAgKiBEaXNhYmxlIGFyYml0cmF0aW9uLCBldGMuIHNpbmNlIHRoZSBob3N0IGFkYXB0ZXIgb2J2aW91c2x5Ci0gICAgICogbG9zdCwgYW5kIHRlbGwgYW4gaW50ZXJydXB0ZWQgTkNSNTM4MF9zZWxlY3QoKSB0byByZXN0YXJ0LgotICAgICAqLwotCi0gICAgTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0gICAgaG9zdGRhdGEtPnJlc3RhcnRfc2VsZWN0ID0gMTsKLQotICAgIHRhcmdldF9tYXNrID0gTkNSNTM4MF9yZWFkKENVUlJFTlRfU0NTSV9EQVRBX1JFRykgJiB+KGhvc3RkYXRhLT5pZF9tYXNrKTsKLQotICAgIGRwcmludGsoTkRFQlVHX1JFU0VMRUNUSU9OLCAic2NzaSVkOiByZXNlbGVjdFxuIiwgSE9TVE5PKTsKLQotICAgIC8qIAotICAgICAqIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZGV0ZWN0ZWQgdGhhdCBvdXIgU0NTSSBJRCBpcyBvbiB0aGUgYnVzLAotICAgICAqIFNFTCBpcyB0cnVlIGFuZCBCU1kgd2FzIGZhbHNlIGZvciBhdCBsZWFzdCBvbmUgYnVzIHNldHRsZSBkZWxheQotICAgICAqICg0MDAgbnMpLgotICAgICAqCi0gICAgICogV2UgbXVzdCBhc3NlcnQgQlNZIG91cnNlbHZlcywgdW50aWwgdGhlIHRhcmdldCBkcm9wcyB0aGUgU0VMCi0gICAgICogc2lnbmFsLgotICAgICAqLwotCi0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9CU1kpOwotICAgIAotICAgIHdoaWxlIChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9TRUwpOwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0KLSAgICAvKgotICAgICAqIFdhaXQgZm9yIHRhcmdldCB0byBnbyBpbnRvIE1TR0lOLgotICAgICAqLwotCi0gICAgd2hpbGUgKCEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSk7Ci0KLSNpZiAxCi0gICAgLy8gYWNrbm93bGVkZ2UgdG9nZ2xlIHRvIE1TR0lOCi0gICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIFBIQVNFX1NSX1RPX1RDUihQSEFTRV9NU0dJTikpOwotCi0gICAgLy8gcGVlayBhdCB0aGUgYnl0ZSB3aXRob3V0IHJlYWxseSBoaXR0aW5nIHRoZSBidXMKLSAgICBtc2dbMF0gPSBOQ1I1MzgwX3JlYWQoQ1VSUkVOVF9TQ1NJX0RBVEFfUkVHKTsKLSNlbmRpZgotCi0gICAgaWYgKCEobXNnWzBdICYgMHg4MCkpIHsKLQlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiBleHBlY3RpbmcgSURFTlRJRlkgbWVzc2FnZSwgZ290ICIsIEhPU1ROTyk7Ci0Jc3BpX3ByaW50X21zZyhtc2cpOwotCWRvX2Fib3J0KGluc3RhbmNlKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGx1biA9IChtc2dbMF0gJiAweDA3KTsKLQotICAgIC8qIAotICAgICAqIEZpbmQgdGhlIGNvbW1hbmQgY29ycmVzcG9uZGluZyB0byB0aGUgSV9UX0wgb3IgSV9UX0xfUSAgbmV4dXMgd2UgCi0gICAgICoganVzdCByZWVzdGFibGlzaGVkLCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZS4KLSAgICAgKi8KLQotICAgIGZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSwgcHJldiA9IE5VTEw7Ci0JIHRtcDsgcHJldiA9IHRtcCwgdG1wID0gTkVYVCh0bXApICkgewotCWlmICgodGFyZ2V0X21hc2sgPT0gKDEgPDwgdG1wLT5kZXZpY2UtPmlkKSkgJiYgKGx1biA9PSB0bXAtPmRldmljZS0+bHVuKQotI2lmZGVmIFNVUFBPUlRfVEFHUwotCSAgICAmJiAodGFnID09IHRtcC0+dGFnKSAKLSNlbmRpZgotCSAgICApIHsKLQkgICAgaWYgKHByZXYpIHsKLQkJUkVNT1ZFKHByZXYsIE5FWFQocHJldiksIHRtcCwgTkVYVCh0bXApKTsKLQkJU0VUX05FWFQocHJldiwgTkVYVCh0bXApKTsKLQkgICAgfSBlbHNlIHsKLQkJUkVNT1ZFKC0xLCBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCB0bXAsIE5FWFQodG1wKSk7Ci0JCWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBORVhUKHRtcCk7Ci0JICAgIH0KLQkgICAgU0VUX05FWFQodG1wLCBOVUxMKTsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0KLSAgICAKLSAgICBpZiAoIXRtcCkgewotCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZDogd2FybmluZzogdGFyZ2V0IGJpdG1hc2sgJTAyeCBsdW4gJWQgIgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkidGFnICVkICIKLSNlbmRpZgotCQkibm90IGluIGRpc2Nvbm5lY3RlZF9xdWV1ZS5cbiIsCi0JCUhPU1ROTywgdGFyZ2V0X21hc2ssIGx1bgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQksIHRhZwotI2VuZGlmCi0JCSk7Ci0JLyogCi0JICogU2luY2Ugd2UgaGF2ZSBhbiBlc3RhYmxpc2hlZCBuZXh1cyB0aGF0IHdlIGNhbid0IGRvIGFueXRoaW5nCi0JICogd2l0aCwgd2UgbXVzdCBhYm9ydCBpdC4gIAotCSAqLwotCWRvX2Fib3J0KGluc3RhbmNlKTsKLQlyZXR1cm47Ci0gICAgfQotI2lmIDEKLSAgICAvKiBlbmdhZ2UgZG1hIHNldHVwIGZvciB0aGUgY29tbWFuZCB3ZSBqdXN0IHNhdyAqLwotICAgIHsKLQkgICAgdm9pZCAqZDsKLQkgICAgdW5zaWduZWQgbG9uZyBjb3VudDsKLQotCSAgICBpZiAoIXRtcC0+U0NwLnRoaXNfcmVzaWR1YWwgJiYgdG1wLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCkgewotCQkgICAgY291bnQgPSB0bXAtPlNDcC5idWZmZXItPmxlbmd0aDsKLQkJICAgIGQgPSBTR0FERFIodG1wLT5TQ3AuYnVmZmVyKTsKLQkgICAgfSBlbHNlIHsKLQkJICAgIGNvdW50ID0gdG1wLT5TQ3AudGhpc19yZXNpZHVhbDsKLQkJICAgIGQgPSB0bXAtPlNDcC5wdHI7Ci0JICAgIH0KLSNpZmRlZiBSRUFMX0RNQQotCSAgICAvKiBzZXR1cCB0aGlzIGNvbW1hbmQgZm9yIGRtYSBpZiBub3QgYWxyZWFkeSAqLwotCSAgICBpZigoY291bnQgPiBTVU4zX0RNQV9NSU5TSVpFKSAmJiAoc3VuM19kbWFfc2V0dXBfZG9uZSAhPSB0bXApKQotCSAgICB7Ci0JCSAgICBzdW4zc2NzaV9kbWFfc2V0dXAoZCwgY291bnQsIHJxX2RhdGFfZGlyKHRtcC0+cmVxdWVzdCkpOwotCQkgICAgc3VuM19kbWFfc2V0dXBfZG9uZSA9IHRtcDsKLQkgICAgfQotI2VuZGlmCi0gICAgfQotI2VuZGlmCi0KLSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FDSyk7Ci0gICAgLyogQWNjZXB0IG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCi0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQotI2lmZGVmIFNVUFBPUlRfVEFHUwotICAgIC8qIElmIHRoZSBwaGFzZSBpcyBzdGlsbCBNU0dJTiwgdGhlIHRhcmdldCB3YW50cyB0byBzZW5kIHNvbWUgbW9yZQotICAgICAqIG1lc3NhZ2VzLiBJbiBjYXNlIGl0IHN1cHBvcnRzIHRhZ2dlZCBxdWV1aW5nLCB0aGlzIGlzIHByb2JhYmx5IGEKLSAgICAgKiBTSU1QTEVfUVVFVUVfVEFHIGZvciB0aGUgSV9UX0xfUSBuZXh1cy4KLSAgICAgKi8KLSAgICB0YWcgPSBUQUdfTk9ORTsKLSAgICBpZiAocGhhc2UgPT0gUEhBU0VfTVNHSU4gJiYgc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nKSB7Ci0JLyogQWNjZXB0IHByZXZpb3VzIElERU5USUZZIG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCi0JTkNSNTM4MF93cml0ZSggSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSApOwotCWxlbiA9IDI7Ci0JZGF0YSA9IG1zZysxOwotCWlmICghTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJmRhdGEpICYmCi0JICAgIG1zZ1sxXSA9PSBTSU1QTEVfUVVFVUVfVEFHKQotCSAgICB0YWcgPSBtc2dbMl07Ci0JZHByaW50ayhOREVCVUdfVEFHUywgInNjc2klZDogdGFyZ2V0IG1hc2sgJTAyeCwgbHVuICVkIHNlbnQgdGFnICVkIGF0ICIKLQkJICAgInJlc2VsZWN0aW9uXG4iLCBIT1NUTk8sIHRhcmdldF9tYXNrLCBsdW4sIHRhZyk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgaG9zdGRhdGEtPmNvbm5lY3RlZCA9IHRtcDsKLSAgICBkcHJpbnRrKE5ERUJVR19SRVNFTEVDVElPTiwgInNjc2klZDogbmV4dXMgZXN0YWJsaXNoZWQsIHRhcmdldCA9ICVkLCBsdW4gPSAlbGx1LCB0YWcgPSAlZFxuIiwKLQkgICAgICAgSE9TVE5PLCB0bXAtPmRldmljZS0+aWQsIHRtcC0+ZGV2aWNlLT5sdW4sIHRtcC0+dGFnKTsKLX0KLQotCi0vKgotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi0gKgotICogUHVycG9zZSA6IGFib3J0IGEgY29tbWFuZAotICoKLSAqIElucHV0cyA6IGNtZCAtIHRoZSBzdHJ1Y3Qgc2NzaV9jbW5kIHRvIGFib3J0LCBjb2RlIC0gY29kZSB0byBzZXQgdGhlCi0gKiAJaG9zdCBieXRlIG9mIHRoZSByZXN1bHQgZmllbGQgdG8sIGlmIHplcm8gRElEX0FCT1JURUQgaXMgCi0gKgl1c2VkLgotICoKLSAqIFJldHVybnMgOiAwIC0gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLSAqCi0gKiBYWFggLSB0aGVyZSBpcyBubyB3YXkgdG8gYWJvcnQgdGhlIGNvbW1hbmQgdGhhdCBpcyBjdXJyZW50bHkgCi0gKiAJIGNvbm5lY3RlZCwgeW91IGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBJZiB0aGlzIGlzIAotICoJIGEgcHJvYmxlbSwgd2UgY291bGQgaW1wbGVtZW50IGxvbmdqbXAoKSAvIHNldGptcCgpLCBzZXRqbXAoKQotICogCSBjYWxsZWQgd2hlcmUgdGhlIGxvb3Agc3RhcnRlZCBpbiBOQ1I1MzgwX21haW4oKS4KLSAqLwotCi1zdGF0aWMgaW50IE5DUjUzODBfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotICAgIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gY21kLT5kZXZpY2UtPmhvc3Q7Ci0gICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotICAgIHN0cnVjdCBzY3NpX2NtbmQgKnRtcCwgKipwcmV2OwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICBwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogYWJvcnRpbmcgY29tbWFuZFxuIiwgSE9TVE5PKTsKLSAgICBzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKLQotICAgIE5DUjUzODBfcHJpbnRfc3RhdHVzIChpbnN0YW5jZSk7Ci0KLSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0gICAgCi0gICAgZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IGFib3J0IGNhbGxlZCBiYXNyIDB4JTAyeCwgc3IgMHglMDJ4XG4iLCBIT1NUTk8sCi0JCU5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpLAotCQlOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpOwotCi0jaWYgMQotLyogCi0gKiBDYXNlIDEgOiBJZiB0aGUgY29tbWFuZCBpcyB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb21tYW5kLCAKLSAqIHdlJ2xsIHNldCB0aGUgYWJvcnRlZCBmbGFnIGFuZCByZXR1cm4gY29udHJvbCBzbyB0aGF0IAotICogaW5mb3JtYXRpb24gdHJhbnNmZXIgcm91dGluZSBjYW4gZXhpdCBjbGVhbmx5LgotICovCi0KLSAgICBpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCA9PSBjbWQpIHsKLQotCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiBhYm9ydGluZyBjb25uZWN0ZWQgY29tbWFuZFxuIiwgSE9TVE5PKTsKLS8qCi0gKiBXZSBzaG91bGQgcGVyZm9ybSBCU1kgY2hlY2tpbmcsIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBzbGlwcGVkCi0gKiBpbnRvIEJVUyBGUkVFLgotICovCi0KLS8qCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQVNTRVJUX0FUTik7ICovCi0vKiAKLSAqIFNpbmNlIHdlIGNhbid0IGNoYW5nZSBwaGFzZXMgdW50aWwgd2UndmUgY29tcGxldGVkIHRoZSBjdXJyZW50IAotICogaGFuZHNoYWtlLCB3ZSBoYXZlIHRvIHNvdXJjZSBvciBzaW5rIGEgYnl0ZSBvZiBkYXRhIGlmIHRoZSBjdXJyZW50Ci0gKiBwaGFzZSBpcyBub3QgTVNHT1VULgotICovCi0KLS8qIAotICogUmV0dXJuIGNvbnRyb2wgdG8gdGhlIGV4ZWN1dGluZyBOQ1IgZHJpdmUgc28gd2UgY2FuIGNsZWFyIHRoZQotICogYWJvcnRlZCBmbGFnIGFuZCBnZXQgYmFjayBpbnRvIG91ciBtYWluIGxvb3AuCi0gKi8gCi0KLQlpZiAoZG9fYWJvcnQoaW5zdGFuY2UpID09IDApIHsKLQkgIGhvc3RkYXRhLT5hYm9ydGVkID0gMTsKLQkgIGhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwotCSAgY21kLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JICBjbWRfZnJlZV90YWcoIGNtZCApOwotI2Vsc2UKLQkgIGhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwotI2VuZGlmCi0JICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JICBjbWQtPnNjc2lfZG9uZShjbWQpOwotCSAgcmV0dXJuIFNVQ0NFU1M7Ci0JfSBlbHNlIHsKLS8qCSAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAqLwotCSAgcHJpbnRrKCJzY3NpJWQ6IGFib3J0IG9mIGNvbm5lY3RlZCBjb21tYW5kIGZhaWxlZCFcbiIsIEhPU1ROTyk7Ci0JICByZXR1cm4gRkFJTEVEOwotCX0gCi0gICB9Ci0jZW5kaWYKLQotLyogCi0gKiBDYXNlIDIgOiBJZiB0aGUgY29tbWFuZCBoYXNuJ3QgYmVlbiBpc3N1ZWQgeWV0LCB3ZSBzaW1wbHkgcmVtb3ZlIGl0IAotICogCSAgICBmcm9tIHRoZSBpc3N1ZSBxdWV1ZS4KLSAqLwotICAgIGZvciAocHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSAmKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSksCi0JdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwotCXRtcDsgcHJldiA9IE5FWFRBRERSKHRtcCksIHRtcCA9IE5FWFQodG1wKSkKLQlpZiAoY21kID09IHRtcCkgewotCSAgICBSRU1PVkUoNSwgKnByZXYsIHRtcCwgTkVYVCh0bXApKTsKLQkgICAgKCpwcmV2KSA9IE5FWFQodG1wKTsKLQkgICAgU0VUX05FWFQodG1wLCBOVUxMKTsKLQkgICAgdG1wLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7Ci0JICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkgICAgZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IGFib3J0IHJlbW92ZWQgY29tbWFuZCBmcm9tIGlzc3VlIHF1ZXVlLlxuIiwKLQkJCUhPU1ROTyk7Ci0JICAgIC8qIFRhZ2dlZCBxdWV1aW5nIG5vdGU6IG5vIHRhZyB0byBmcmVlIGhlcmUsIGhhc24ndCBiZWVuIGFzc2lnbmVkCi0JICAgICAqIHlldC4uLiAqLwotCSAgICB0bXAtPnNjc2lfZG9uZSh0bXApOwotCSAgICByZXR1cm4gU1VDQ0VTUzsKLQl9Ci0KLS8qIAotICogQ2FzZSAzIDogSWYgYW55IGNvbW1hbmRzIGFyZSBjb25uZWN0ZWQsIHdlJ3JlIGdvaW5nIHRvIGZhaWwgdGhlIGFib3J0Ci0gKgkgICAgYW5kIGxldCB0aGUgaGlnaCBsZXZlbCBTQ1NJIGRyaXZlciByZXRyeSBhdCBhIGxhdGVyIHRpbWUgb3IgCi0gKgkgICAgaXNzdWUgYSByZXNldC4KLSAqCi0gKgkgICAgVGltZW91dHMsIGFuZCB0aGVyZWZvcmUgYWJvcnRlZCBjb21tYW5kcywgd2lsbCBiZSBoaWdobHkgdW5saWtlbHkKLSAqICAgICAgICAgIGFuZCBoYW5kbGluZyB0aGVtIGNsZWFubHkgaW4gdGhpcyBzaXR1YXRpb24gd291bGQgbWFrZSB0aGUgY29tbW9uCi0gKgkgICAgY2FzZSBvZiBub3Jlc2V0cyBsZXNzIGVmZmljaWVudCwgYW5kIHdvdWxkIHBvbGx1dGUgb3VyIGNvZGUuICBTbywKLSAqCSAgICB3ZSBmYWlsLgotICovCi0KLSAgICBpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogYWJvcnQgZmFpbGVkLCBjb21tYW5kIGNvbm5lY3RlZC5cbiIsIEhPU1ROTyk7Ci0gICAgICAgIHJldHVybiBGQUlMRUQ7Ci0gICAgfQotCi0vKgotICogQ2FzZSA0OiBJZiB0aGUgY29tbWFuZCBpcyBjdXJyZW50bHkgZGlzY29ubmVjdGVkIGZyb20gdGhlIGJ1cywgYW5kIAotICogCXRoZXJlIGFyZSBubyBjb25uZWN0ZWQgY29tbWFuZHMsIHdlIHJlY29ubmVjdCB0aGUgSV9UX0wgb3IgCi0gKglJX1RfTF9RIG5leHVzIGFzc29jaWF0ZWQgd2l0aCBpdCwgZ28gaW50byBtZXNzYWdlIG91dCwgYW5kIHNlbmQgCi0gKiAgICAgIGFuIGFib3J0IG1lc3NhZ2UuCi0gKgotICogVGhpcyBjYXNlIGlzIGVzcGVjaWFsbHkgdWdseS4gSW4gb3JkZXIgdG8gcmVlc3RhYmxpc2ggdGhlIG5leHVzLCB3ZQotICogbmVlZCB0byBjYWxsIE5DUjUzODBfc2VsZWN0KCkuICBUaGUgZWFzaWVzdCB3YXkgdG8gaW1wbGVtZW50IHRoaXMgCi0gKiBmdW5jdGlvbiB3YXMgdG8gYWJvcnQgaWYgdGhlIGJ1cyB3YXMgYnVzeSwgYW5kIGxldCB0aGUgaW50ZXJydXB0Ci0gKiBoYW5kbGVyIHRyaWdnZXJlZCBvbiB0aGUgU0VMIGZvciByZXNlbGVjdCB0YWtlIGNhcmUgb2YgbG9zdCBhcmJpdHJhdGlvbnMKLSAqIHdoZXJlIG5lY2Vzc2FyeSwgbWVhbmluZyBpbnRlcnJ1cHRzIG5lZWQgdG8gYmUgZW5hYmxlZC4KLSAqCi0gKiBXaGVuIGludGVycnVwdHMgYXJlIGVuYWJsZWQsIHRoZSBxdWV1ZXMgbWF5IGNoYW5nZSAtIHNvIHdlIAotICogY2FuJ3QgcmVtb3ZlIGl0IGZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZSBiZWZvcmUgc2VsZWN0aW5nIGl0Ci0gKiBiZWNhdXNlIHRoYXQgY291bGQgY2F1c2UgYSBmYWlsdXJlIGluIGhhc2hpbmcgdGhlIG5leHVzIGlmIHRoYXQgCi0gKiBkZXZpY2UgcmVzZWxlY3RlZC4KLSAqIAotICogU2luY2UgdGhlIHF1ZXVlcyBtYXkgY2hhbmdlLCB3ZSBjYW4ndCB1c2UgdGhlIHBvaW50ZXJzIGZyb20gd2hlbiB3ZQotICogZmlyc3QgbG9jYXRlIGl0LgotICoKLSAqIFNvLCB3ZSBtdXN0IGZpcnN0IGxvY2F0ZSB0aGUgY29tbWFuZCwgYW5kIGlmIE5DUjUzODBfc2VsZWN0KCkKLSAqIHN1Y2NlZWRzLCB0aGVuIGlzc3VlIHRoZSBhYm9ydCwgcmVsb2NhdGUgdGhlIGNvbW1hbmQgYW5kIHJlbW92ZQotICogaXQgZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLgotICovCi0KLSAgICBmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHRtcDsKLQkgdG1wID0gTkVYVCh0bXApKSAKLSAgICAgICAgaWYgKGNtZCA9PSB0bXApIHsKLSAgICAgICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkgICAgZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IGFib3J0aW5nIGRpc2Nvbm5lY3RlZCBjb21tYW5kLlxuIiwgSE9TVE5PKTsKLSAgCi0gICAgICAgICAgICBpZiAoTkNSNTM4MF9zZWxlY3QgKGluc3RhbmNlLCBjbWQsIChpbnQpIGNtZC0+dGFnKSkgCi0JCXJldHVybiBGQUlMRUQ7Ci0KLQkgICAgZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IG5leHVzIHJlZXN0YWJsaXNoZWQuXG4iLCBIT1NUTk8pOwotCi0JICAgIGRvX2Fib3J0IChpbnN0YW5jZSk7Ci0KLQkgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSAgICBmb3IgKHByZXYgPSAoc3RydWN0IHNjc2lfY21uZCAqKikgJihob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKSwKLQkJdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsKLQkJdG1wOyBwcmV2ID0gTkVYVEFERFIodG1wKSwgdG1wID0gTkVYVCh0bXApICkKLQkJICAgIGlmIChjbWQgPT0gdG1wKSB7Ci0JCSAgICBSRU1PVkUoNSwgKnByZXYsIHRtcCwgTkVYVCh0bXApKTsKLQkJICAgICpwcmV2ID0gTkVYVCh0bXApOwotCQkgICAgU0VUX05FWFQodG1wLCBOVUxMKTsKLQkJICAgIHRtcC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCQkgICAgLyogV2UgbXVzdCB1bmxvY2sgdGhlIHRhZy9MVU4gaW1tZWRpYXRlbHkgaGVyZSwgc2luY2UgdGhlCi0JCSAgICAgKiB0YXJnZXQgZ29lcyB0byBCVVMgRlJFRSBhbmQgZG9lc24ndCBzZW5kIHVzIGFub3RoZXIKLQkJICAgICAqIG1lc3NhZ2UgKENPTU1BTkRfQ09NUExFVEUgb3IgdGhlIGxpa2UpCi0JCSAgICAgKi8KLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQkJICAgIGNtZF9mcmVlX3RhZyggdG1wICk7Ci0jZWxzZQotCQkgICAgaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmPSB+KDEgPDwgY21kLT5kZXZpY2UtPmx1bik7Ci0jZW5kaWYKLQkJICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJICAgIHRtcC0+c2NzaV9kb25lKHRtcCk7Ci0JCSAgICByZXR1cm4gU1VDQ0VTUzsKLQkJfQotCX0KLQotLyoKLSAqIENhc2UgNSA6IElmIHdlIHJlYWNoZWQgdGhpcyBwb2ludCwgdGhlIGNvbW1hbmQgd2FzIG5vdCBmb3VuZCBpbiBhbnkgb2YgCi0gKgkgICAgdGhlIHF1ZXVlcy4KLSAqCi0gKiBXZSBwcm9iYWJseSByZWFjaGVkIHRoaXMgcG9pbnQgYmVjYXVzZSBvZiBhbiB1bmxpa2VseSByYWNlIGNvbmRpdGlvbgotICogYmV0d2VlbiB0aGUgY29tbWFuZCBjb21wbGV0aW5nIHN1Y2Nlc3NmdWxseSBhbmQgdGhlIGFib3J0aW9uIGNvZGUsCi0gKiBzbyB3ZSB3b24ndCBwYW5pYywgYnV0IHdlIHdpbGwgbm90aWZ5IHRoZSB1c2VyIGluIGNhc2Ugc29tZXRoaW5nIHJlYWxseQotICogYnJva2UuCi0gKi8KLQotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSAgICBwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IHdhcm5pbmcgOiBTQ1NJIGNvbW1hbmQgcHJvYmFibHkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBiZWZvcmUgYWJvcnRpb25cbiIsIEhPU1ROTyk7IAotCi0gICAgcmV0dXJuIEZBSUxFRDsKLX0KLQotCi0vKiAKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLSAqIAotICogUHVycG9zZSA6IHJlc2V0IHRoZSBTQ1NJIGJ1cy4KLSAqCi0gKiBSZXR1cm5zIDogU1VDQ0VTUyBvciBGQUlMVVJFCi0gKgotICovIAotCi1zdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLSAgICBTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7Ci0gICAgaW50ICAgICAgICAgICBpOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jaWYgZGVmaW5lZChSRVNFVF9SVU5fRE9ORSkKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjb25uZWN0ZWQsICpkaXNjb25uZWN0ZWRfcXVldWU7Ci0jZW5kaWYKLQotCi0gICAgTkNSNTM4MF9wcmludF9zdGF0dXMgKGNtZC0+ZGV2aWNlLT5ob3N0KTsKLQotICAgIC8qIGdldCBpbiBwaGFzZSAqLwotICAgIE5DUjUzODBfd3JpdGUoIFRBUkdFVF9DT01NQU5EX1JFRywKLQkJICAgUEhBU0VfU1JfVE9fVENSKCBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgKSk7Ci0gICAgLyogYXNzZXJ0IFJTVCAqLwotICAgIE5DUjUzODBfd3JpdGUoIElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX1JTVCApOwotICAgIHVkZWxheSAoNDApOwotICAgIC8qIHJlc2V0IE5DUiByZWdpc3RlcnMgKi8KLSAgICBOQ1I1MzgwX3dyaXRlKCBJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFICk7Ci0gICAgTkNSNTM4MF93cml0ZSggTU9ERV9SRUcsIE1SX0JBU0UgKTsKLSAgICBOQ1I1MzgwX3dyaXRlKCBUQVJHRVRfQ09NTUFORF9SRUcsIDAgKTsKLSAgICBOQ1I1MzgwX3dyaXRlKCBTRUxFQ1RfRU5BQkxFX1JFRywgMCApOwotICAgIC8qICsrcm9tYW46IHJlc2V0IGludGVycnVwdCBjb25kaXRpb24hIG90aGVyd2lzZSBubyBpbnRlcnJ1cHRzIGRvbid0IGdldAotICAgICAqIHRocm91Z2ggYW55bW9yZSAuLi4gKi8KLSAgICAodm9pZClOQ1I1MzgwX3JlYWQoIFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHICk7Ci0KLQkvKiBNU2NoIDIwMTQwMTE1IC0gbG9va2luZyBhdCB0aGUgZ2VuZXJpYyBOQ1I1MzgwIGRyaXZlciwgYWxsIG9mIHRoaXMKLQkgKiBzaG91bGQgZ28uCi0JICogQ2F0Y2gtMjI6IGlmIHdlIGRvbid0IGNsZWFyIGFsbCBxdWV1ZXMsIHRoZSBTQ1NJIGRyaXZlciBsb2NrIHdpbGwKLQkgKiBub3QgYmUgcmVsZWFzZWQgYnkgYXRhcmlfc2NzaV9yZXNldCgpIQotCSAqLwotCi0jaWYgZGVmaW5lZChSRVNFVF9SVU5fRE9ORSkKLQkvKiBYWFggU2hvdWxkIG5vdyBiZSBkb25lIGJ5IG1pZGxldmVsIGNvZGUsIGJ1dCBpdCdzIGJyb2tlbiBYWFggKi8KLQkvKiBYWFggc2VlIGJlbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWFggKi8KLQotICAgIC8qIE1TY2g6IG9sZC1zdHlsZSByZXNldDogYWN0dWFsbHkgYWJvcnQgYWxsIGNvbW1hbmQgcHJvY2Vzc2luZyBoZXJlICovCi0KLSAgICAvKiBBZnRlciB0aGUgcmVzZXQsIHRoZXJlIGFyZSBubyBtb3JlIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgY29tbWFuZHMKLSAgICAgKiBhbmQgbm8gYnVzeSB1bml0czsgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCByZS1pbnNlcnRpbmcgdGhlIGNvbW1hbmRzCi0gICAgICogaW50byB0aGUgaXNzdWVfcXVldWUgKHZpYSBzY3NpX2RvbmUoKSksIHRoZSBhYm9ydGVkIGNvbW1hbmRzIGFyZQotICAgICAqIHJlbWVtYmVyZWQgaW4gbG9jYWwgdmFyaWFibGVzIGZpcnN0LgotICAgICAqLwotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICBjb25uZWN0ZWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWhvc3RkYXRhLT5jb25uZWN0ZWQ7Ci0gICAgaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7Ci0gICAgZGlzY29ubmVjdGVkX3F1ZXVlID0gKHN0cnVjdCBzY3NpX2NtbmQgKilob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOwotICAgIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwotI2lmZGVmIFNVUFBPUlRfVEFHUwotICAgIGZyZWVfYWxsX3RhZ3MoKTsKLSNlbmRpZgotICAgIGZvciggaSA9IDA7IGkgPCA4OyArK2kgKQotCWhvc3RkYXRhLT5idXN5W2ldID0gMDsKLSNpZmRlZiBSRUFMX0RNQQotICAgIGhvc3RkYXRhLT5kbWFfbGVuID0gMDsKLSNlbmRpZgotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotICAgIC8qIEluIG9yZGVyIHRvIHRlbGwgdGhlIG1pZC1sZXZlbCBjb2RlIHdoaWNoIGNvbW1hbmRzIHdlcmUgYWJvcnRlZCwgCi0gICAgICogc2V0IHRoZSBjb21tYW5kIHN0YXR1cyB0byBESURfUkVTRVQgYW5kIGNhbGwgc2NzaV9kb25lKCkgISEhCi0gICAgICogVGhpcyB1bHRpbWF0ZWx5IGFib3J0cyBwcm9jZXNzaW5nIG9mIHRoZXNlIGNvbW1hbmRzIGluIHRoZSBtaWQtbGV2ZWwuCi0gICAgICovCi0KLSAgICBpZiAoKGNtZCA9IGNvbm5lY3RlZCkpIHsKLQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogcmVzZXQgYWJvcnRlZCBhIGNvbm5lY3RlZCBjb21tYW5kXG4iLCBIX05PKGNtZCkpOwotCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHhmZmZmKSB8IChESURfUkVTRVQgPDwgMTYpOwotCWNtZC0+c2NzaV9kb25lKCBjbWQgKTsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyAoY21kID0gZGlzY29ubmVjdGVkX3F1ZXVlKTsgKytpKSB7Ci0JZGlzY29ubmVjdGVkX3F1ZXVlID0gTkVYVChjbWQpOwotCVNFVF9ORVhUKGNtZCwgTlVMTCk7Ci0JY21kLT5yZXN1bHQgPSAoY21kLT5yZXN1bHQgJiAweGZmZmYpIHwgKERJRF9SRVNFVCA8PCAxNik7Ci0JY21kLT5zY3NpX2RvbmUoIGNtZCApOwotICAgIH0KLSAgICBpZiAoaSA+IDApCi0JZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpOiByZXNldCBhYm9ydGVkICVkIGRpc2Nvbm5lY3RlZCBjb21tYW5kKHMpXG4iLCBpKTsKLQotCi0gICAgLyogc2luY2UgYWxsIGNvbW1hbmRzIGhhdmUgYmVlbiBleHBsaWNpdGx5IHRlcm1pbmF0ZWQsIHdlIG5lZWQgdG8gdGVsbAotICAgICAqIHRoZSBtaWRsZXZlbCBjb2RlIHRoYXQgdGhlIHJlc2V0IHdhcyBTVUNDRVNTRlVMLCBhbmQgdGhlcmUgaXMgbm8gCi0gICAgICogbmVlZCB0byAnd2FrZSB1cCcgdGhlIGNvbW1hbmRzIGJ5IGEgcmVxdWVzdF9zZW5zZQotICAgICAqLwotICAgIHJldHVybiBTVUNDRVNTOwotI2Vsc2UgLyogMSAqLwotCi0gICAgLyogTVNjaDogbmV3LXN0eWxlIHJlc2V0IGhhbmRsaW5nOiBsZXQgdGhlIG1pZC1sZXZlbCBkbyB3aGF0IGl0IGNhbiAqLwotCi0gICAgLyogKytndWVudGhlcjogTUlELUxFVkVMIElTIFNUSUxMIEJST0tFTi4KLSAgICAgKiBNaWQtbGV2ZWwgaXMgc3VwcG9zZWQgdG8gcmVxdWV1ZSBhbGwgY29tbWFuZHMgdGhhdCB3ZXJlIGFjdGl2ZSBvbiB0aGUKLSAgICAgKiB2YXJpb3VzIGxvdy1sZXZlbCBxdWV1ZXMuIEluIGZhY3QgaXQgZG9lcyB0aGlzLCBidXQgdGhhdCdzIG5vdCBlbm91Z2gKLSAgICAgKiBiZWNhdXNlIGFsbCB0aGVzZSBjb21tYW5kcyBhcmUgc3ViamVjdCB0byB0aW1lb3V0LiBBbmQgaWYgYSB0aW1lb3V0Ci0gICAgICogaGFwcGVucyBmb3IgYW55IHJlbW92ZWQgY29tbWFuZCwgKl9hYm9ydCgpIGlzIGNhbGxlZCBidXQgYWxsIHF1ZXVlcwotICAgICAqIGFyZSBub3cgZW1wdHkuIEFib3J0IHRoZW4gZ2l2ZXMgdXAgdGhlIGZhbGNvbiBsb2NrLCB3aGljaCBpcyBmYXRhbCwKLSAgICAgKiBzaW5jZSB0aGUgbWlkLWxldmVsIHdpbGwgcXVldWUgbW9yZSBjb21tYW5kcyBhbmQgbXVzdCBoYXZlIHRoZSBsb2NrCi0gICAgICogKGl0J3MgYWxsIGhhcHBlbmluZyBpbnNpZGUgdGltZXIgaW50ZXJydXB0IGhhbmRsZXIhISkuCi0gICAgICogRXZlbiB3b3JzZSwgYWJvcnQgd2lsbCByZXR1cm4gTk9UX1JVTk5JTkcgZm9yIGFsbCB0aG9zZSBjb21tYW5kcyBub3QKLSAgICAgKiBvbiBhbnkgcXVldWUsIHNvIHRoZXkgd29uJ3QgYmUgcmV0cmllZCAuLi4KLSAgICAgKgotICAgICAqIENvbmNsdXNpb246IGVpdGhlciBzY3NpLmMgZGlzYWJsZXMgdGltZW91dCBmb3IgYWxsIHJlc2V0dGVkIGNvbW1hbmRzCi0gICAgICogaW1tZWRpYXRlbHksIG9yIHdlIGxvc2UhICBBcyBvZiBsaW51eC0yLjAuMjAgaXQgZG9lc24ndC4KLSAgICAgKi8KLQotICAgIC8qIEFmdGVyIHRoZSByZXNldCwgdGhlcmUgYXJlIG5vIG1vcmUgY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZCBjb21tYW5kcwotICAgICAqIGFuZCBubyBidXN5IHVuaXRzOyBzbyBjbGVhciB0aGUgbG93LWxldmVsIHN0YXR1cyBoZXJlIHRvIGF2b2lkIAotICAgICAqIGNvbmZsaWN0cyB3aGVuIHRoZSBtaWQtbGV2ZWwgY29kZSB0cmllcyB0byB3YWtlIHVwIHRoZSBhZmZlY3RlZCAKLSAgICAgKiBjb21tYW5kcyEKLSAgICAgKi8KLQotICAgIGlmIChob3N0ZGF0YS0+aXNzdWVfcXVldWUpCi0JZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IHJlc2V0IGFib3J0ZWQgaXNzdWVkIGNvbW1hbmQocylcbiIsIEhfTk8oY21kKSk7Ci0gICAgaWYgKGhvc3RkYXRhLT5jb25uZWN0ZWQpIAotCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiByZXNldCBhYm9ydGVkIGEgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhfTk8oY21kKSk7Ci0gICAgaWYgKGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpCi0JZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IHJlc2V0IGFib3J0ZWQgZGlzY29ubmVjdGVkIGNvbW1hbmQocylcbiIsIEhfTk8oY21kKSk7Ci0KLSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0gICAgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gTlVMTDsKLSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLSAgICBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlID0gTlVMTDsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLSAgICBmcmVlX2FsbF90YWdzKCk7Ci0jZW5kaWYKLSAgICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkKLQlob3N0ZGF0YS0+YnVzeVtpXSA9IDA7Ci0jaWZkZWYgUkVBTF9ETUEKLSAgICBob3N0ZGF0YS0+ZG1hX2xlbiA9IDA7Ci0jZW5kaWYKLSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLSAgICAvKiB3ZSBkaWQgbm8gY29tcGxldGUgcmVzZXQgb2YgYWxsIGNvbW1hbmRzLCBzbyBhIHdha2V1cCBpcyByZXF1aXJlZCAqLwotICAgIHJldHVybiBTVUNDRVNTOwotI2VuZGlmIC8qIDEgKi8KLX0KLQotLyogTG9jYWwgVmFyaWFibGVzOiAqLwotLyogdGFiLXdpZHRoOiA4ICAgICAqLwotLyogRW5kOiAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jCmluZGV4IDk3MDdiNzQuLjJhOTA2ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMKQEAgLTIwLDkwICsyMCw1OSBAQAogICogR2VuZXJpYyBHZW5lcmljIE5DUjUzODAgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IDE5OTUsIFJ1c3NlbGwgS2luZwotICoKLSAqIEFMUEhBIFJFTEVBU0UgMS4KLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCi0KLS8qCi0gKiBUaGlzIGlzIGZyb20gbWFjX3Njc2kuaCwgYnV0IGhleSwgbWF5YmUgdGhpcyBpcyB1c2VmdWwgZm9yIFN1bjMgdG9vISA6KQotICoKLSAqIE9wdGlvbnMgOgotICoKLSAqIFBBUklUWSAtIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcuICBOb3Qgc3VwcG9ydGVkLgotICoKLSAqIFNDU0kyIC0gZW5hYmxlIHN1cHBvcnQgZm9yIFNDU0ktSUkgdGFnZ2VkIHF1ZXVlaW5nLiAgVW50ZXN0ZWQuCi0gKgotICogVVNMRUVQIC0gZW5hYmxlIHN1cHBvcnQgZm9yIGRldmljZXMgdGhhdCBkb24ndCBkaXNjb25uZWN0LiAgVW50ZXN0ZWQuCi0gKi8KLQotI2RlZmluZSBBVVRPU0VOU0UKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3VuM2ludHMuaD4KICNpbmNsdWRlIDxhc20vZHZtYS5oPgotI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KLSNpbmNsdWRlIDxhc20vbWFjaGluZXMuaD4KIAotLyogZG1hIG9uISAqLwotI2RlZmluZSBSRUFMX0RNQQotCi0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAic3VuM19zY3NpLmgiCisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgY29yZSBOQ1I1MzgwIGRyaXZlci4gKi8KKworI2RlZmluZSBSRUFMX0RNQQorLyogI2RlZmluZSBTVVBQT1JUX1RBR1MgKi8KKy8qIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGRvIGRtYSBvbiAqLworI2RlZmluZSBETUFfTUlOX1NJWkUgICAgICAgICAgICAgICAgICAgIDEyOQorCisvKiAjZGVmaW5lIE1BWF9UQUdTICAgICAgICAgICAgICAgICAgICAgMzIgKi8KKworI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcyAgIC8qIG5vbmUgKi8KKworI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKSAgICAgICAgICAgICAgIHN1bjNzY3NpX3JlYWQocmVnKQorI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpICAgICAgIHN1bjNzY3NpX3dyaXRlKHJlZywgdmFsdWUpCisKKyNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kICAgICAgICAgICBzdW4zc2NzaV9xdWV1ZV9jb21tYW5kCisjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0ICAgICAgICAgICAgICAgc3VuM3Njc2lfYnVzX3Jlc2V0CisjZGVmaW5lIE5DUjUzODBfYWJvcnQgICAgICAgICAgICAgICAgICAgc3VuM3Njc2lfYWJvcnQKKyNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gICAgICAgICAgICAgICBzdW4zc2NzaV9zaG93X2luZm8KKyNkZWZpbmUgTkNSNTM4MF9pbmZvICAgICAgICAgICAgICAgICAgICBzdW4zc2NzaV9pbmZvCisKKyNkZWZpbmUgTkNSNTM4MF9kbWFfcmVhZF9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIFwKKyAgICAgICAgc3VuM3Njc2lfZG1hX3NldHVwKGRhdGEsIGNvdW50LCAwKQorI2RlZmluZSBOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIFwKKyAgICAgICAgc3VuM3Njc2lfZG1hX3NldHVwKGRhdGEsIGNvdW50LCAxKQorI2RlZmluZSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSkgXAorICAgICAgICBzdW4zc2NzaV9kbWFfcmVzaWR1YWwoaW5zdGFuY2UpCisjZGVmaW5lIE5DUjUzODBfZG1hX3hmZXJfbGVuKGluc3RhbmNlLCBjbWQsIHBoYXNlKSBcCisgICAgICAgIHN1bjNzY3NpX2RtYV94ZmVyX2xlbihjbWQtPlNDcC50aGlzX3Jlc2lkdWFsLCBjbWQsICEoKHBoYXNlKSAmIFNSX0lPKSkKKworI2RlZmluZSBOQ1I1MzgwX2FjcXVpcmVfZG1hX2lycShpbnN0YW5jZSkgICAgKDEpCisjZGVmaW5lIE5DUjUzODBfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKQorCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogCisKIGV4dGVybiBpbnQgc3VuM19tYXBfdGVzdCh1bnNpZ25lZCBsb25nLCBjaGFyICopOwogCi0jZGVmaW5lIFVTRV9XUkFQUEVSCi0vKiNkZWZpbmUgUkVTRVRfQk9PVCAqLwotI2RlZmluZSBEUklWRVJfU0VUVVAKLQotLyoKLSAqIEJVRyBjYW4gYmUgdXNlZCB0byB0cmlnZ2VyIGEgc3RyYW5nZSBjb2RlLXNpemUgcmVsYXRlZCBoYW5nIG9uIDIuMSBrZXJuZWxzCi0gKi8KLSNpZmRlZiBCVUcKLSN1bmRlZiBSRVNFVF9CT09UCi0jdW5kZWYgRFJJVkVSX1NFVFVQCi0jZW5kaWYKLQotLyogI2RlZmluZSBTVVBQT1JUX1RBR1MgKi8KLQotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLSNkZWZpbmUgRU5BQkxFX0lSUSgpCi0jZWxzZQotI2RlZmluZQlFTkFCTEVfSVJRKCkJZW5hYmxlX2lycSggSVJRX1NVTjNfU0NTSSApOyAKLSNlbmRpZgotCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzY3NpX3N1bjNfaW50cihpbnQgaXJxLCB2b2lkICpkdW1teSk7Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3VuM3Njc2lfcmVhZChpbnQgcmVnKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBzdW4zc2NzaV93cml0ZShpbnQgcmVnLCBpbnQgdmFsdWUpOwotCiBzdGF0aWMgaW50IHNldHVwX2Nhbl9xdWV1ZSA9IC0xOwogbW9kdWxlX3BhcmFtKHNldHVwX2Nhbl9xdWV1ZSwgaW50LCAwKTsKIHN0YXRpYyBpbnQgc2V0dXBfY21kX3Blcl9sdW4gPSAtMTsKQEAgLTExNyw5ICs4Niw3IEBACiBzdGF0aWMgaW50IHNldHVwX2hvc3RpZCA9IC0xOwogbW9kdWxlX3BhcmFtKHNldHVwX2hvc3RpZCwgaW50LCAwKTsKIAotc3RhdGljIHN0cnVjdCBzY3NpX2NtbmQgKnN1bjNfZG1hX3NldHVwX2RvbmUgPSBOVUxMOwotCi0jZGVmaW5lCVJFU0VUX1JVTl9ET05FCisvKiAjZGVmaW5lIFJFU0VUX0JPT1QgKi8KIAogI2RlZmluZQlBRlRFUl9SRVNFVF9ERUxBWQkoSFovMikKIApAQCAtMTI5LDE4ICs5NiwxNSBAQAogLyogZHZtYSBidWZmZXIgdG8gYWxsb2NhdGUgLS0gMzJrIHNob3VsZCBob3BlZnVsbHkgYmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgKi8KICNkZWZpbmUgU1VOM19EVk1BX0JVRlNJWkUgMHhlMDAwCiAKLS8qIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGRvIGRtYSBvbiAqLwotI2RlZmluZSBTVU4zX0RNQV9NSU5TSVpFIDEyOAotCi1zdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqc3VuM19zY3NpX3JlZ3A7CitzdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqc3VuM19kbWFfc2V0dXBfZG9uZTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpzdW4zX3Njc2lfcmVncDsKIHN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3Qgc3VuM19kbWFfcmVncyAqZHJlZ3M7Ci0jaWZuZGVmIFNVTjNfU0NTSV9WTUUKLXN0YXRpYyBzdHJ1Y3Qgc3VuM191ZGNfcmVncyAqdWRjX3JlZ3MgPSBOVUxMOwotI2VuZGlmCitzdGF0aWMgc3RydWN0IHN1bjNfdWRjX3JlZ3MgKnVkY19yZWdzOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgKnN1bjNfZG1hX29yaWdfYWRkciA9IE5VTEw7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdW4zX2RtYV9vcmlnX2NvdW50ID0gMDsKIHN0YXRpYyBpbnQgc3VuM19kbWFfYWN0aXZlID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfcmVzaWR1YWwgPSAwOworc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKmRlZmF1bHRfaW5zdGFuY2U7CiAKIC8qCiAgKiBOQ1IgNTM4MCByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zCkBAIC0xNDgsMTIgKzExMiwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3VuM3Njc2lfcmVhZChpbnQgcmVnKQogewotCXJldHVybiggc3VuM19zY3NpX3JlZ3BbcmVnXSApOworCXJldHVybiBpbl84KHN1bjNfc2NzaV9yZWdwICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN1bjNzY3NpX3dyaXRlKGludCByZWcsIGludCB2YWx1ZSkKIHsKLQlzdW4zX3Njc2lfcmVncFtyZWddID0gdmFsdWU7CisJb3V0Xzgoc3VuM19zY3NpX3JlZ3AgKyByZWcsIHZhbHVlKTsKIH0KIAogI2lmbmRlZiBTVU4zX1NDU0lfVk1FCkBAIC0xODAsMjEzICsxNDQsMTAgQEAKIH0KICNlbmRpZgogCi0vKgotICogWFhYOiBzdGF0dXMgZGVidWcKLSAqLwotc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKmRlZmF1bHRfaW5zdGFuY2U7Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IGludCBzdW4zc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCi0gKgotICogUHVycG9zZSA6IGluaXRpYWxpemVzIG1hYyBOQ1I1MzgwIGRyaXZlciBiYXNlZCBvbiB0aGUKLSAqCWNvbW1hbmQgbGluZSAvIGNvbXBpbGUgdGltZSBwb3J0IGFuZCBpcnEgZGVmaW5pdGlvbnMuCi0gKgotICogSW5wdXRzIDogdHBudCAtIHRlbXBsYXRlIGZvciB0aGlzIFNDU0kgYWRhcHRlci4KLSAqCi0gKiBSZXR1cm5zIDogMSBpZiBhIGhvc3QgYWRhcHRlciB3YXMgZm91bmQsIDAgaWYgbm90LgotICoKLSAqLwotIAotc3RhdGljIGludCBfX2luaXQgc3VuM3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIsIGlycTsKLQlzdGF0aWMgaW50IGNhbGxlZCA9IDA7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7Ci0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgYWRkcnNbM10gPSB7IElPQkFTRV9TVU4zX1ZNRVNDU0ksCi0JCQkJICAgSU9CQVNFX1NVTjNfVk1FU0NTSSArIDB4NDAwMCwKLQkJCQkgICAwIH07Ci0JdW5zaWduZWQgbG9uZyB2ZWNzWzNdID0geyBTVU4zX1ZFQ19WTUVTQ1NJMCwKLQkJCQkgIFNVTjNfVkVDX1ZNRVNDU0kxLAotCQkJCSAgMCB9OwotI2VuZGlmCi0KLQkvKiBjaGVjayB0aGF0IHRoaXMgbWFjaGluZSBoYXMgYW4gb25ib2FyZCA1MzgwICovCi0Jc3dpdGNoKGlkcHJvbS0+aWRfbWFjaHR5cGUpIHsKLSNpZmRlZiBTVU4zX1NDU0lfVk1FCi0JY2FzZSBTTV9TVU4zfFNNXzNfMTYwOgotCWNhc2UgU01fU1VOM3xTTV8zXzI2MDoKLQkJYnJlYWs7Ci0jZWxzZQotCWNhc2UgU01fU1VOM3xTTV8zXzUwOgotCWNhc2UgU01fU1VOM3xTTV8zXzYwOgotCQlicmVhazsKLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYoY2FsbGVkKQotCQlyZXR1cm4gMDsKLQotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQl0cG50LT5wcm9jX25hbWUgPSAiU3VuMyA1MzgwIFZNRSBTQ1NJIjsKLSNlbHNlCi0JdHBudC0+cHJvY19uYW1lID0gIlN1bjMgNTM4MCBTQ1NJIjsKLSNlbmRpZgotCi0JLyogc2V0dXAgdmFyaWFibGVzICovCi0JdHBudC0+Y2FuX3F1ZXVlID0KLQkJKHNldHVwX2Nhbl9xdWV1ZSA+IDApID8gc2V0dXBfY2FuX3F1ZXVlIDogQ0FOX1FVRVVFOwotCXRwbnQtPmNtZF9wZXJfbHVuID0KLQkJKHNldHVwX2NtZF9wZXJfbHVuID4gMCkgPyBzZXR1cF9jbWRfcGVyX2x1biA6IENNRF9QRVJfTFVOOwotCXRwbnQtPnNnX3RhYmxlc2l6ZSA9IAotCQkoc2V0dXBfc2dfdGFibGVzaXplID49IDApID8gc2V0dXBfc2dfdGFibGVzaXplIDogU0dfVEFCTEVTSVpFOwotCi0JaWYgKHNldHVwX2hvc3RpZCA+PSAwKQotCQl0cG50LT50aGlzX2lkID0gc2V0dXBfaG9zdGlkOwotCWVsc2UgewotCQkvKiB1c2UgNyBhcyBkZWZhdWx0ICovCi0JCXRwbnQtPnRoaXNfaWQgPSA3OwotCX0KLQotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQlpb2FkZHIgPSAwOwotCWZvciAoaSA9IDA7IGFkZHJzW2ldICE9IDA7IGkrKykgewotCQl1bnNpZ25lZCBjaGFyIHg7Ci0KLQkJaW9hZGRyID0gKHVuc2lnbmVkIGxvbmcpc3VuM19pb3JlbWFwKGFkZHJzW2ldLCBQQUdFX1NJWkUsCi0JCQkJCQkgICAgIFNVTjNfUEFHRV9UWVBFX1ZNRTE2KTsKLQkJaXJxID0gdmVjc1tpXTsKLQkJc3VuM19zY3NpX3JlZ3AgPSAodW5zaWduZWQgY2hhciAqKWlvYWRkcjsKLQotCQlkcmVncyA9IChzdHJ1Y3Qgc3VuM19kbWFfcmVncyAqKSgoKHVuc2lnbmVkIGNoYXIgKilpb2FkZHIpICsgOCk7Ci0KLQkJaWYgKHN1bjNfbWFwX3Rlc3QoKHVuc2lnbmVkIGxvbmcpZHJlZ3MsICZ4KSkgewotCQkJdW5zaWduZWQgc2hvcnQgb2xkY3NyOwotCi0JCQlvbGRjc3IgPSBkcmVncy0+Y3NyOwotCQkJZHJlZ3MtPmNzciA9IDA7Ci0JCQl1ZGVsYXkoU1VOM19ETUFfREVMQVkpOwotCQkJaWYgKGRyZWdzLT5jc3IgPT0gMHgxNDAwKQotCQkJCWJyZWFrOwotCi0JCQlkcmVncy0+Y3NyID0gb2xkY3NyOwotCQl9Ci0KLQkJaW91bm1hcCgodm9pZCAqKWlvYWRkcik7Ci0JCWlvYWRkciA9IDA7Ci0JfQotCi0JaWYgKCFpb2FkZHIpCi0JCXJldHVybiAwOwotI2Vsc2UKLQlpcnEgPSBJUlFfU1VOM19TQ1NJOwotCWlvYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXAoSU9CQVNFX1NVTjNfU0NTSSwgUEFHRV9TSVpFKTsKLQlzdW4zX3Njc2lfcmVncCA9ICh1bnNpZ25lZCBjaGFyICopaW9hZGRyOwotCi0JZHJlZ3MgPSAoc3RydWN0IHN1bjNfZG1hX3JlZ3MgKikoKCh1bnNpZ25lZCBjaGFyICopaW9hZGRyKSArIDgpOwotCi0JaWYoKHVkY19yZWdzID0gZHZtYV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdW4zX3VkY19yZWdzKSkpCi0JICAgPT0gTlVMTCkgewotCSAgICAgcHJpbnRrKCJTVU4zIFNjc2kgY291bGRuJ3QgYWxsb2NhdGUgRFZNQSBtZW1vcnkhXG4iKTsKLQkgICAgIHJldHVybiAwOwotCX0KLSNlbmRpZgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCWlmIChzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPCAwKQotCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBVU0VfVEFHR0VEX1FVRVVJTkc7Ci0jZW5kaWYKLQotCWluc3RhbmNlID0gc2NzaV9yZWdpc3RlciAodHBudCwgc2l6ZW9mKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKSk7Ci0JaWYoaW5zdGFuY2UgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JCQotCWRlZmF1bHRfaW5zdGFuY2UgPSBpbnN0YW5jZTsKLQotICAgICAgICBpbnN0YW5jZS0+aW9fcG9ydCA9ICh1bnNpZ25lZCBsb25nKSBpb2FkZHI7Ci0JaW5zdGFuY2UtPmlycSA9IGlycTsKLQotCU5DUjUzODBfaW5pdChpbnN0YW5jZSwgMCk7Ci0KLQlpbnN0YW5jZS0+bl9pb19wb3J0ID0gMzI7Ci0KLSAgICAgICAgKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YSktPmN0cmwgPSAwOwotCi0JaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIHNjc2lfc3VuM19pbnRyLAotCQkJICAgICAwLCAiU3VuM1NDU0ktNTM4MCIsIGluc3RhbmNlKSkgewotI2lmbmRlZiBSRUFMX0RNQQotCQlwcmludGsoInNjc2klZDogSVJRJWQgbm90IGZyZWUsIGludGVycnVwdHMgZGlzYWJsZWRcbiIsCi0JCSAgICAgICBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7Ci0JCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOwotI2Vsc2UKLQkJcHJpbnRrKCJzY3NpJWQ6IElSUSVkIG5vdCBmcmVlLCBiYWlsaW5nIG91dFxuIiwKLQkJICAgICAgIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQl9Ci0JCi0JcHJfaW5mbygic2NzaSVkOiAlcyBhdCBwb3J0ICVsWCBpcnEiLCBpbnN0YW5jZS0+aG9zdF9ubywKLQkJdHBudC0+cHJvY19uYW1lLCBpbnN0YW5jZS0+aW9fcG9ydCk7Ci0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKLQkJcHJpbnRrICgicyBkaXNhYmxlZCIpOwotCWVsc2UKLQkJcHJpbnRrICgiICVkIiwgaW5zdGFuY2UtPmlycSk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsCi0JICAgICAgIGluc3RhbmNlLT5jYW5fcXVldWUsIGluc3RhbmNlLT5jbWRfcGVyX2x1biwKLQkgICAgICAgU1VOM1NDU0lfUFVCTElDX1JFTEVBU0UpOwotCXByaW50aygiXG5zY3NpJWQ6IiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JcHJpbnRrKCJcbiIpOwotCi0JZHJlZ3MtPmNzciA9IDA7Ci0JdWRlbGF5KFNVTjNfRE1BX0RFTEFZKTsKLQlkcmVncy0+Y3NyID0gQ1NSX1NDU0kgfCBDU1JfRklGTyB8IENTUl9JTlRSOwotCXVkZWxheShTVU4zX0RNQV9ERUxBWSk7Ci0JZHJlZ3MtPmZpZm9fY291bnQgPSAwOwotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQlkcmVncy0+Zmlmb19jb3VudF9oaSA9IDA7Ci0JZHJlZ3MtPmRtYV9hZGRyX2hpID0gMDsKLQlkcmVncy0+ZG1hX2FkZHJfbG8gPSAwOwotCWRyZWdzLT5kbWFfY291bnRfaGkgPSAwOwotCWRyZWdzLT5kbWFfY291bnRfbG8gPSAwOwotCi0JZHJlZ3MtPml2ZWN0ID0gVk1FX0RBVEEyNCB8IChpbnN0YW5jZS0+aXJxICYgMHhmZik7Ci0jZW5kaWYKLQotCWNhbGxlZCA9IDE7Ci0KICNpZmRlZiBSRVNFVF9CT09UCi0Jc3VuM19zY3NpX3Jlc2V0X2Jvb3QoaW5zdGFuY2UpOwotI2VuZGlmCi0KLQlyZXR1cm4gMTsKLX0KLQotaW50IHN1bjNzY3NpX3JlbGVhc2UgKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQotewotCWlmIChzaHBudC0+aXJxICE9IFNDU0lfSVJRX05PTkUpCi0JCWZyZWVfaXJxKHNocG50LT5pcnEsIHNocG50KTsKLQotCWlvdW5tYXAoKHZvaWQgKilzdW4zX3Njc2lfcmVncCk7Ci0KLQlOQ1I1MzgwX2V4aXQoc2hwbnQpOwotCXJldHVybiAwOwotfQotCi0jaWZkZWYgUkVTRVRfQk9PVAotLyoKLSAqIE91ciAnYnVzIHJlc2V0IG9uIGJvb3QnIGZ1bmN0aW9uCi0gKi8KLQogc3RhdGljIHZvaWQgc3VuM19zY3NpX3Jlc2V0X2Jvb3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQ7Ci0KLQlOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKLQlOQ1I1MzgwX3NldHVwKGluc3RhbmNlKTsKIAkKIAkvKgogCSAqIERvIGEgU0NTSSByZXNldCB0byBjbGVhbiB1cCB0aGUgYnVzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gTm8KQEAgLTQyMiwxMSArMTgzLDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgY29uc3QgY2hhciAqc3VuM3Njc2lfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzcG50KQotewotICAgIHJldHVybiAiIjsKLX0KLQogLy8gc2FmZSBiaXRzIGZvciB0aGUgQ1NSCiAjZGVmaW5lIENTUl9HT09EIDB4MDYwZgogCkBAIC00NjgsNyArMjI0LDYgQEAKIHZvaWQgc3VuM19zdW4zX2RlYnVnICh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCk7CiAKIAlpZiAoZGVmYXVsdF9pbnN0YW5jZSkgewogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtNzMyLDI1ICs0ODcsMjAwIEBACiAKIH0KIAkKLSNpbmNsdWRlICJzdW4zX05DUjUzODAuYyIKKyNpbmNsdWRlICJhdGFyaV9OQ1I1MzgwLmMiCiAKLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisjZGVmaW5lIFNVTjNfU0NTSV9OQU1FICAgICAgICAgICJTdW4zIE5DUjUzODAgVk1FIFNDU0kiCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAgICAgICAgICJzdW4zX3Njc2lfdm1lIgorI2Vsc2UKKyNkZWZpbmUgU1VOM19TQ1NJX05BTUUgICAgICAgICAgIlN1bjMgTkNSNTM4MCBTQ1NJIgorI2RlZmluZSBEUlZfTU9EVUxFX05BTUUgICAgICAgICAic3VuM19zY3NpIgorI2VuZGlmCisKKyNkZWZpbmUgUEZYICAgICAgICAgICAgICAgICAgICAgRFJWX01PRFVMRV9OQU1FICI6ICIKKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc3VuM19zY3NpX3RlbXBsYXRlID0geworCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAorCS5wcm9jX25hbWUJCT0gRFJWX01PRFVMRV9OQU1FLAogCS5zaG93X2luZm8JCT0gc3VuM3Njc2lfc2hvd19pbmZvLAogCS5uYW1lCQkJPSBTVU4zX1NDU0lfTkFNRSwKLQkuZGV0ZWN0CQkJPSBzdW4zc2NzaV9kZXRlY3QsCi0JLnJlbGVhc2UJCT0gc3VuM3Njc2lfcmVsZWFzZSwKIAkuaW5mbwkJCT0gc3VuM3Njc2lfaW5mbywKIAkucXVldWVjb21tYW5kCQk9IHN1bjNzY3NpX3F1ZXVlX2NvbW1hbmQsCiAJLmVoX2Fib3J0X2hhbmRsZXIgICAgICAJPSBzdW4zc2NzaV9hYm9ydCwKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgIAk9IHN1bjNzY3NpX2J1c19yZXNldCwKLQkuY2FuX3F1ZXVlCQk9IENBTl9RVUVVRSwKKwkuY2FuX3F1ZXVlCQk9IDE2LAogCS50aGlzX2lkCQk9IDcsCi0JLnNnX3RhYmxlc2l6ZQkJPSBTR19UQUJMRVNJWkUsCi0JLmNtZF9wZXJfbHVuCQk9IENNRF9QRVJfTFVOLAorCS5zZ190YWJsZXNpemUJCT0gU0dfTk9ORSwKKwkuY21kX3Blcl9sdW4JCT0gMiwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRElTQUJMRV9DTFVTVEVSSU5HCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBzdW4zX3Njc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKKwlpbnQgZXJyb3I7CisJc3RydWN0IHJlc291cmNlICppcnEsICptZW07CisJdW5zaWduZWQgY2hhciAqaW9hZGRyOworCWludCBob3N0X2ZsYWdzID0gMDsKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJaW50IGk7CisjZW5kaWYKIAotI2luY2x1ZGUgInNjc2lfbW9kdWxlLmMiCisJaWYgKHNldHVwX2Nhbl9xdWV1ZSA+IDApCisJCXN1bjNfc2NzaV90ZW1wbGF0ZS5jYW5fcXVldWUgPSBzZXR1cF9jYW5fcXVldWU7CisJaWYgKHNldHVwX2NtZF9wZXJfbHVuID4gMCkKKwkJc3VuM19zY3NpX3RlbXBsYXRlLmNtZF9wZXJfbHVuID0gc2V0dXBfY21kX3Blcl9sdW47CisJaWYgKHNldHVwX3NnX3RhYmxlc2l6ZSA+PSAwKQorCQlzdW4zX3Njc2lfdGVtcGxhdGUuc2dfdGFibGVzaXplID0gc2V0dXBfc2dfdGFibGVzaXplOworCWlmIChzZXR1cF9ob3N0aWQgPj0gMCkKKwkJc3VuM19zY3NpX3RlbXBsYXRlLnRoaXNfaWQgPSBzZXR1cF9ob3N0aWQgJiA3OwogCisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCWlvYWRkciA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIHg7CisKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCBpKTsKKwkJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKKwkJaWYgKCFpcnEgfHwgIW1lbSkKKwkJCWJyZWFrOworCisJCWlvYWRkciA9IHN1bjNfaW9yZW1hcChtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSksCisJCSAgICAgICAgICAgICAgICAgICAgICBTVU4zX1BBR0VfVFlQRV9WTUUxNik7CisJCWRyZWdzID0gKHN0cnVjdCBzdW4zX2RtYV9yZWdzICopKGlvYWRkciArIDgpOworCisJCWlmIChzdW4zX21hcF90ZXN0KCh1bnNpZ25lZCBsb25nKWRyZWdzLCAmeCkpIHsKKwkJCXVuc2lnbmVkIHNob3J0IG9sZGNzcjsKKworCQkJb2xkY3NyID0gZHJlZ3MtPmNzcjsKKwkJCWRyZWdzLT5jc3IgPSAwOworCQkJdWRlbGF5KFNVTjNfRE1BX0RFTEFZKTsKKwkJCWlmIChkcmVncy0+Y3NyID09IDB4MTQwMCkKKwkJCQlicmVhazsKKworCQkJZHJlZ3MtPmNzciA9IG9sZGNzcjsKKwkJfQorCisJCWlvdW5tYXAoaW9hZGRyKTsKKwkJaW9hZGRyID0gTlVMTDsKKwl9CisJaWYgKCFpb2FkZHIpCisJCXJldHVybiAtRU5PREVWOworI2Vsc2UKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFpcnEgfHwgIW1lbSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpb2FkZHIgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisJZHJlZ3MgPSAoc3RydWN0IHN1bjNfZG1hX3JlZ3MgKikoaW9hZGRyICsgOCk7CisKKwl1ZGNfcmVncyA9IGR2bWFfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3VuM191ZGNfcmVncykpOworCWlmICghdWRjX3JlZ3MpIHsKKwkJcHJfZXJyKFBGWCAiY291bGRuJ3QgYWxsb2NhdGUgRFZNQSBtZW1vcnkhXG4iKTsKKwkJaW91bm1hcChpb2FkZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisjZW5kaWYKKworCXN1bjNfc2NzaV9yZWdwID0gaW9hZGRyOworCisJaW5zdGFuY2UgPSBzY3NpX2hvc3RfYWxsb2MoJnN1bjNfc2NzaV90ZW1wbGF0ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEpKTsKKwlpZiAoIWluc3RhbmNlKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2FsbG9jOworCX0KKwlkZWZhdWx0X2luc3RhbmNlID0gaW5zdGFuY2U7CisKKwlpbnN0YW5jZS0+aW9fcG9ydCA9ICh1bnNpZ25lZCBsb25nKWlvYWRkcjsKKwlpbnN0YW5jZS0+aXJxID0gaXJxLT5zdGFydDsKKworI2lmZGVmIFNVUFBPUlRfVEFHUworCWhvc3RfZmxhZ3MgfD0gc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID4gMCA/IEZMQUdfVEFHR0VEX1FVRVVJTkcgOiAwOworI2VuZGlmCisKKwlOQ1I1MzgwX2luaXQoaW5zdGFuY2UsIGhvc3RfZmxhZ3MpOworCisJZXJyb3IgPSByZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCBzY3NpX3N1bjNfaW50ciwgMCwKKwkgICAgICAgICAgICAgICAgICAgICJOQ1I1MzgwIiwgaW5zdGFuY2UpOworCWlmIChlcnJvcikgeworI2lmZGVmIFJFQUxfRE1BCisJCXByX2VycihQRlggInNjc2klZDogSVJRICVkIG5vdCBmcmVlLCBiYWlsaW5nIG91dFxuIiwKKwkJICAgICAgIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKKwkJZ290byBmYWlsX2lycTsKKyNlbHNlCisJCXByX3dhcm4oUEZYICJzY3NpJWQ6IElSUSAlZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwKKwkJICAgICAgICBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7CisJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CisjZW5kaWYKKwl9CisKKwlkcmVncy0+Y3NyID0gMDsKKwl1ZGVsYXkoU1VOM19ETUFfREVMQVkpOworCWRyZWdzLT5jc3IgPSBDU1JfU0NTSSB8IENTUl9GSUZPIHwgQ1NSX0lOVFI7CisJdWRlbGF5KFNVTjNfRE1BX0RFTEFZKTsKKwlkcmVncy0+Zmlmb19jb3VudCA9IDA7CisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCWRyZWdzLT5maWZvX2NvdW50X2hpID0gMDsKKwlkcmVncy0+ZG1hX2FkZHJfaGkgPSAwOworCWRyZWdzLT5kbWFfYWRkcl9sbyA9IDA7CisJZHJlZ3MtPmRtYV9jb3VudF9oaSA9IDA7CisJZHJlZ3MtPmRtYV9jb3VudF9sbyA9IDA7CisKKwlkcmVncy0+aXZlY3QgPSBWTUVfREFUQTI0IHwgKGluc3RhbmNlLT5pcnEgJiAweGZmKTsKKyNlbmRpZgorCisjaWZkZWYgUkVTRVRfQk9PVAorCXN1bjNfc2NzaV9yZXNldF9ib290KGluc3RhbmNlKTsKKyNlbmRpZgorCisJZXJyb3IgPSBzY3NpX2FkZF9ob3N0KGluc3RhbmNlLCBOVUxMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF9ob3N0OworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5zdGFuY2UpOworCisJc2NzaV9zY2FuX2hvc3QoaW5zdGFuY2UpOworCXJldHVybiAwOworCitmYWlsX2hvc3Q6CisJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQorCQlmcmVlX2lycShpbnN0YW5jZS0+aXJxLCBpbnN0YW5jZSk7CitmYWlsX2lycToKKwlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOworCXNjc2lfaG9zdF9wdXQoaW5zdGFuY2UpOworZmFpbF9hbGxvYzoKKwlpZiAodWRjX3JlZ3MpCisJCWR2bWFfZnJlZSh1ZGNfcmVncyk7CisJaW91bm1hcChzdW4zX3Njc2lfcmVncCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBzdW4zX3Njc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNjc2lfcmVtb3ZlX2hvc3QoaW5zdGFuY2UpOworCWlmIChpbnN0YW5jZS0+aXJxICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEoaW5zdGFuY2UtPmlycSwgaW5zdGFuY2UpOworCU5DUjUzODBfZXhpdChpbnN0YW5jZSk7CisJc2NzaV9ob3N0X3B1dChpbnN0YW5jZSk7CisJaWYgKHVkY19yZWdzKQorCQlkdm1hX2ZyZWUodWRjX3JlZ3MpOworCWlvdW5tYXAoc3VuM19zY3NpX3JlZ3ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdW4zX3Njc2lfZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2V4aXRfcChzdW4zX3Njc2lfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9IERSVl9NT0RVTEVfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXJfcHJvYmUoc3VuM19zY3NpX2RyaXZlciwgc3VuM19zY3NpX3Byb2JlKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9NT0RVTEVfTkFNRSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmggYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmgKaW5kZXggZTk2YTM3Yy4uZDIyNzQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuaApAQCAtMTMsOTUgKzEzLDExIEBACiAgKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBBTFBIQSBSRUxFQVNFIDEuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0Ci0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0CiAgKi8KIAogI2lmbmRlZiBTVU4zX1NDU0lfSAogI2RlZmluZSBTVU4zX1NDU0lfSAogCi0jZGVmaW5lIFNVTjNTQ1NJX1BVQkxJQ19SRUxFQVNFIDEKLQotLyoKLSAqIEludDogbGV2ZWwgMiBhdXRvdmVjdG9yCi0gKiBJTzogdHlwZSAxLCBiYXNlIDB4MDAxNDAwMDAsIDUgYml0cyBwaHlzIHNwYWNlOiBBPDQuLjA+Ci0gKi8KLSNkZWZpbmUgSVJRX1NVTjNfU0NTSSAyCi0jZGVmaW5lIElPQkFTRV9TVU4zX1NDU0kgMHgwMDE0MDAwMAotCi0jZGVmaW5lIElPQkFTRV9TVU4zX1ZNRVNDU0kgMHhmZjIwMDAwMAotCi1zdGF0aWMgaW50IHN1bjNzY3NpX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IHN1bjNzY3NpX2RldGVjdCAoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKLXN0YXRpYyBjb25zdCBjaGFyICpzdW4zc2NzaV9pbmZvIChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIGludCBzdW4zc2NzaV9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgc3VuM3Njc2lfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IHN1bjNzY3NpX3JlbGVhc2UgKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci0KLSNpZm5kZWYgQ01EX1BFUl9MVU4KLSNkZWZpbmUgQ01EX1BFUl9MVU4gMgotI2VuZGlmCi0KLSNpZm5kZWYgQ0FOX1FVRVVFCi0jZGVmaW5lIENBTl9RVUVVRSAxNgotI2VuZGlmCi0KLSNpZm5kZWYgU0dfVEFCTEVTSVpFCi0jZGVmaW5lIFNHX1RBQkxFU0laRSBTR19OT05FCi0jZW5kaWYKLQotI2lmbmRlZiBNQVhfVEFHUwotI2RlZmluZSBNQVhfVEFHUyAzMgotI2VuZGlmCi0KLSNpZm5kZWYgVVNFX1RBR0dFRF9RVUVVSU5HCi0jZGVmaW5lCVVTRV9UQUdHRURfUVVFVUlORyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgotCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotI2RlZmluZSBTVU4zX1NDU0lfTkFNRSAiU3VuMyBOQ1I1MzgwIFZNRSBTQ1NJIgotI2Vsc2UKLSNkZWZpbmUgU1VOM19TQ1NJX05BTUUgIlN1bjMgTkNSNTM4MCBTQ1NJIgotI2VuZGlmCi0KLSNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMgXAotICAgIGludCBwb3J0LCBjdHJsCi0KLSNkZWZpbmUgTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCkgXAotICAgICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICpfaW5zdGFuY2UKLQotI2RlZmluZSBOQ1I1MzgwX3NldHVwKGluc3RhbmNlKSBcCi0gICAgICAgIF9pbnN0YW5jZSA9IGluc3RhbmNlCi0KLSNkZWZpbmUgTkNSNTM4MF9yZWFkKHJlZykgc3VuM3Njc2lfcmVhZChyZWcpCi0jZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkgc3VuM3Njc2lfd3JpdGUocmVnLCB2YWx1ZSkKLQotI2RlZmluZSBOQ1I1MzgwX2ludHIgc3VuM3Njc2lfaW50cgotI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgc3VuM3Njc2lfcXVldWVfY29tbWFuZAotI2RlZmluZSBOQ1I1MzgwX2J1c19yZXNldCBzdW4zc2NzaV9idXNfcmVzZXQKLSNkZWZpbmUgTkNSNTM4MF9hYm9ydCBzdW4zc2NzaV9hYm9ydAotI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyBzdW4zc2NzaV9zaG93X2luZm8KLSNkZWZpbmUgTkNSNTM4MF9kbWFfeGZlcl9sZW4oaSwgY21kLCBwaGFzZSkgXAotICAgICAgICBzdW4zc2NzaV9kbWFfeGZlcl9sZW4oY21kLT5TQ3AudGhpc19yZXNpZHVhbCxjbWQsKChwaGFzZSkgJiBTUl9JTykgPyAwIDogMSkKLQotI2RlZmluZSBOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIHN1bjNzY3NpX2RtYV9zZXR1cChkYXRhLCBjb3VudCwgMSkKLSNkZWZpbmUgTkNSNTM4MF9kbWFfcmVhZF9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIHN1bjNzY3NpX2RtYV9zZXR1cChkYXRhLCBjb3VudCwgMCkKLSNkZWZpbmUgTkNSNTM4MF9kbWFfcmVzaWR1YWwgc3VuM3Njc2lfZG1hX3Jlc2lkdWFsCi0KIC8qIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIC0gbWFpbmx5IERNQSBjb250cm9sIHJlZ3MgKi8KIC8qIHRoZXNlIHN0YXJ0IGF0IHJlZ2Jhc2UgKyA4IC0tIGRpcmVjdGx5IGFmdGVyIHRoZSBOQ1IgcmVncyAqLwogc3RydWN0IHN1bjNfZG1hX3JlZ3MgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwppbmRleCBlNTllNmY5Li41ZDAwZTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwpAQCAtODIwLDkgKzgyMCw3IEBACiAJaWYgKHJlcXRhZ3MgPiBTWU1fQ09ORl9NQVhfVEFHKQogCQlyZXF0YWdzID0gU1lNX0NPTkZfTUFYX1RBRzsKIAlkZXB0aF90b191c2UgPSByZXF0YWdzID8gcmVxdGFncyA6IDE7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwKLQkJCQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID8gTVNHX1NJTVBMRV9UQUcgOiAwLAotCQkJCWRlcHRoX3RvX3VzZSk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgZGVwdGhfdG9fdXNlKTsKIAlscC0+cy5zY2Rldl9kZXB0aCA9IGRlcHRoX3RvX3VzZTsKIAlzeW1fdHVuZV9kZXZfcXVldWluZyh0cCwgc2Rldi0+bHVuLCByZXF0YWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3QxMjguYyBiL2RyaXZlcnMvc2NzaS90MTI4LmMKaW5kZXggOGNjODA5My4uODc4MjhhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3QxMjguYworKysgYi9kcml2ZXJzL3Njc2kvdDEyOC5jCkBAIC0xLDQgKzEsMyBAQAotI2RlZmluZSBBVVRPU0VOU0UKICNkZWZpbmUgUFNFVURPX0RNQQogCiAvKgpAQCAtMTIsOCArMTEsNiBAQAogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKICAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSAzLgotICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKICAqCiAgKiBUcmFudG9yIFN5c3RlbXMsIEx0ZC4KQEAgLTI0LDQwICsyMSw5IEBACiAgKiA1NDE1IFJhbmRhbGwgUGxhY2UKICAqIEZyZW1vbnQsIENBIDk0NTM4CiAgKiAxKyAoNDE1KSA3NzAtMTQwMCwgRkFYIDErICg0MTUpIDc3MC05OTEwCi0gKiAKLSAqIGFuZCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCiAvKgotICogT3B0aW9ucyA6IAotICogQVVUT1NFTlNFIC0gaWYgZGVmaW5lZCwgUkVRVUVTVCBTRU5TRSB3aWxsIGJlIHBlcmZvcm1lZCBhdXRvbWF0aWNhbGx5Ci0gKiAgICAgIGZvciBjb21tYW5kcyB0aGF0IHJldHVybiB3aXRoIGEgQ0hFQ0sgQ09ORElUSU9OIHN0YXR1cy4gCi0gKgotICogUFNFVURPX0RNQSAtIGVuYWJsZXMgUFNFVURPLURNQSBoYXJkd2FyZSwgc2hvdWxkIGdpdmUgYSAzLTRYIHBlcmZvcm1hbmNlCi0gKiBpbmNyZWFzZSBjb21wYXJlZCB0byBwb2xsZWQgSS9PLgotICoKLSAqIFBBUklUWSAtIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcuICBOb3Qgc3VwcG9ydGVkLgotICogCi0gKiBTQ1NJMiAtIGVuYWJsZSBzdXBwb3J0IGZvciBTQ1NJLUlJIHRhZ2dlZCBxdWV1ZWluZy4gIFVudGVzdGVkLgotICoKLSAqCi0gKiBVTlNBRkUgLSBsZWF2ZSBpbnRlcnJ1cHRzIGVuYWJsZWQgZHVyaW5nIHBzZXVkby1ETUEgdHJhbnNmZXJzLiAgWW91Ci0gKiAgICAgICAgICBvbmx5IHJlYWxseSB3YW50IHRvIHVzZSB0aGlzIGlmIHlvdSdyZSBoYXZpbmcgYSBwcm9ibGVtIHdpdGgKLSAqICAgICAgICAgIGRyb3BwZWQgY2hhcmFjdGVycyBkdXJpbmcgaGlnaCBzcGVlZCBjb21tdW5pY2F0aW9ucywgYW5kIGV2ZW4KLSAqICAgICAgICAgIHRoZW4sIHlvdSdyZSBnb2luZyB0byBiZSBiZXR0ZXIgb2ZmIHR3aWRkbGluZyB3aXRoIHRyYW5zZmVyc2l6ZS4KLSAqCi0gKiBVU0xFRVAgLSBlbmFibGUgc3VwcG9ydCBmb3IgZGV2aWNlcyB0aGF0IGRvbid0IGRpc2Nvbm5lY3QuICBVbnRlc3RlZC4KLSAqCiAgKiBUaGUgY2FyZCBpcyBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQgaW4gb25lIG9mIHNldmVyYWwgd2F5cyA6IAogICogMS4gIEF1dG9wcm9iZSAoZGVmYXVsdCkgLSBzaW5jZSB0aGUgYm9hcmQgaXMgbWVtb3J5IG1hcHBlZCwgCiAgKiAgICAgYSBCSU9TIHNpZ25hdHVyZSBpcyBzY2FubmVkIGZvciB0byBsb2NhdGUgdGhlIHJlZ2lzdGVycy4KQEAgLTExMSw3ICs3Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgInQxMjguaCIKICNkZWZpbmUgQVVUT1BST0JFX0lSUQpAQCAtMTQ4LDYgKzExMyw3IEBACiAKICNkZWZpbmUgTk9fU0lHTkFUVVJFUyBBUlJBWV9TSVpFKHNpZ25hdHVyZXMpCiAKKyNpZm5kZWYgTU9EVUxFCiAvKgogICogRnVuY3Rpb24gOiB0MTI4X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQogICoKQEAgLTE1OCw5ICsxMjQsMTMgQEAKICAqCiAgKi8KIAotdm9pZCBfX2luaXQgdDEyOF9zZXR1cChjaGFyICpzdHIsIGludCAqaW50cyl7CitzdGF0aWMgaW50IF9faW5pdCB0MTI4X3NldHVwKGNoYXIgKnN0cikKK3sKICAgICBzdGF0aWMgaW50IGNvbW1hbmRsaW5lX2N1cnJlbnQgPSAwOwogICAgIGludCBpOworICAgIGludCBpbnRzWzEwXTsKKworICAgIGdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7CiAgICAgaWYgKGludHNbMF0gIT0gMikgCiAJcHJpbnRrKCJ0MTI4X3NldHVwIDogdXNhZ2UgdDEyOD1hZGRyZXNzLGlycVxuIik7CiAgICAgZWxzZSAKQEAgLTE3NCw4ICsxNDQsMTIgQEAKIAkJfQogCSAgICArK2NvbW1hbmRsaW5lX2N1cnJlbnQ7CiAJfQorICAgIHJldHVybiAxOwogfQogCitfX3NldHVwKCJ0MTI4PSIsIHQxMjhfc2V0dXApOworI2VuZGlmCisKIC8qIAogICogRnVuY3Rpb24gOiBpbnQgdDEyOF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiAgKgpAQCAtMTg5LDE3ICsxNjMsMTQgQEAKICAqCiAgKi8KIAotaW50IF9faW5pdCB0MTI4X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCl7CitzdGF0aWMgaW50IF9faW5pdCB0MTI4X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQorewogICAgIHN0YXRpYyBpbnQgY3VycmVudF9vdmVycmlkZSA9IDAsIGN1cnJlbnRfYmFzZSA9IDA7CiAgICAgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7CiAgICAgdW5zaWduZWQgbG9uZyBiYXNlOwogICAgIHZvaWQgX19pb21lbSAqcDsKICAgICBpbnQgc2lnLCBjb3VudDsKIAotICAgIHRwbnQtPnByb2NfbmFtZSA9ICJ0MTI4IjsKLSAgICB0cG50LT5zaG93X2luZm8gPSB0MTI4X3Nob3dfaW5mbzsKLSAgICB0cG50LT53cml0ZV9pbmZvID0gdDEyOF93cml0ZV9pbmZvOwotCiAgICAgZm9yIChjb3VudCA9IDA7IGN1cnJlbnRfb3ZlcnJpZGUgPCBOT19PVkVSUklERVM7ICsrY3VycmVudF9vdmVycmlkZSkgewogCWJhc2UgPSAwOwogCXAgPSBOVUxMOwpAQCAtMjU0LDE1ICsyMjUsMTkgQEAKIAllbHNlIAogCSAgICBpbnN0YW5jZS0+aXJxID0gTkNSNTM4MF9wcm9iZV9pcnEoaW5zdGFuY2UsIFQxMjhfSVJRUyk7CiAKLQlpZiAoaW5zdGFuY2UtPmlycSAhPSBTQ1NJX0lSUV9OT05FKSAKKwkvKiBDb21wYXRpYmlsaXR5IHdpdGggZG9jdW1lbnRlZCBOQ1I1MzgwIGtlcm5lbCBwYXJhbWV0ZXJzICovCisJaWYgKGluc3RhbmNlLT5pcnEgPT0gMjU1KQorCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROworCisJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCSAgICBpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgdDEyOF9pbnRyLCAwLCAidDEyOCIsCiAJCQkgICAgaW5zdGFuY2UpKSB7CiAJCXByaW50aygic2NzaSVkIDogSVJRJWQgbm90IGZyZWUsIGludGVycnVwdHMgZGlzYWJsZWRcbiIsIAogCQkgICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwotCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKKwkJaW5zdGFuY2UtPmlycSA9IE5PX0lSUTsKIAkgICAgfSAKIAotCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpIHsKKwlpZiAoaW5zdGFuY2UtPmlycSA9PSBOT19JUlEpIHsKIAkgICAgcHJpbnRrKCJzY3NpJWQgOiBpbnRlcnJ1cHRzIG5vdCBlbmFibGVkLiBmb3IgYmV0dGVyIGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCSAgICBwcmludGsoInNjc2klZCA6IHBsZWFzZSBqdW1wZXIgdGhlIGJvYXJkIGZvciBhIGZyZWUgSVJRLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCX0KQEAgLTI3MSwxNiArMjQ2LDYgQEAKIAlwcmludGsoInNjc2klZCA6IGlycSA9ICVkXG4iLCBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7CiAjZW5kaWYKIAotCXByaW50aygic2NzaSVkIDogYXQgMHglMDhseCIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+YmFzZSk7Ci0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKLQkgICAgcHJpbnRrICgiIGludGVycnVwdHMgZGlzYWJsZWQiKTsKLQllbHNlIAotCSAgICBwcmludGsgKCIgaXJxICVkIiwgaW5zdGFuY2UtPmlycSk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgIENNRF9QRVJfTFVOPSVkIHJlbGVhc2U9JWQiLAotCSAgICBDQU5fUVVFVUUsIENNRF9QRVJfTFVOLCBUMTI4X1BVQkxJQ19SRUxFQVNFKTsKLQlOQ1I1MzgwX3ByaW50X29wdGlvbnMoaW5zdGFuY2UpOwotCXByaW50aygiXG4iKTsKLQogCSsrY3VycmVudF9vdmVycmlkZTsKIAkrK2NvdW50OwogICAgIH0KQEAgLTI5MSw3ICsyNTYsNyBAQAogewogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCU5DUjUzODBfc2V0dXAoc2hvc3QpOwotCWlmIChzaG9zdC0+aXJxKQorCWlmIChzaG9zdC0+aXJxICE9IE5PX0lSUSkKIAkJZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogCU5DUjUzODBfZXhpdChzaG9zdCk7CiAJaWYgKHNob3N0LT5pb19wb3J0ICYmIHNob3N0LT5uX2lvX3BvcnQpCkBAIC0zMjEsOCArMjg2LDggQEAKICAqIGFuZCBtYXRjaGluZyB0aGUgSF9DX1MgY29vcmRpbmF0ZXMgdG8gd2hhdCBET1MgdXNlcy4KICAqLwogCi1pbnQgdDEyOF9iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAotCQlzZWN0b3JfdCBjYXBhY2l0eSwgaW50ICogaXApCitzdGF0aWMgaW50IHQxMjhfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yX3QgY2FwYWNpdHksIGludCAqaXApCiB7CiAgIGlwWzBdID0gNjQ7CiAgIGlwWzFdID0gMzI7CkBAIC00MzAsNiArMzk1LDEwIEBACiAJLm5hbWUgICAgICAgICAgID0gIlRyYW50b3IgVDEyOC9UMTI4Ri9UMjI4IiwKIAkuZGV0ZWN0ICAgICAgICAgPSB0MTI4X2RldGVjdCwKIAkucmVsZWFzZSAgICAgICAgPSB0MTI4X3JlbGVhc2UsCisJLnByb2NfbmFtZSAgICAgID0gInQxMjgiLAorCS5zaG93X2luZm8gICAgICA9IHQxMjhfc2hvd19pbmZvLAorCS53cml0ZV9pbmZvICAgICA9IHQxMjhfd3JpdGVfaW5mbywKKwkuaW5mbyAgICAgICAgICAgPSB0MTI4X2luZm8sCiAJLnF1ZXVlY29tbWFuZCAgID0gdDEyOF9xdWV1ZV9jb21tYW5kLAogCS5laF9hYm9ydF9oYW5kbGVyID0gdDEyOF9hYm9ydCwKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgICAgPSB0MTI4X2J1c19yZXNldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS90MTI4LmggYi9kcml2ZXJzL3Njc2kvdDEyOC5oCmluZGV4IGZkNjhjZWMuLjJjNzM3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS90MTI4LmgKKysrIGIvZHJpdmVycy9zY3NpL3QxMjguaApAQCAtOCw4ICs4LDYgQEAKICAqCWRyZXdAY29sb3JhZG8uZWR1CiAgKiAgICAgICsxICgzMDMpIDQ0MC00ODk0CiAgKgotICogRElTVFJJQlVUSU9OIFJFTEVBU0UgMy4KLSAqCiAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQKICAqCiAgKiBUcmFudG9yIFN5c3RlbXMsIEx0ZC4KQEAgLTIwLDI1ICsxOCwxMSBAQAogICogNTQxNSBSYW5kYWxsIFBsYWNlCiAgKiBGcmVtb250LCBDQSA5NDUzOAogICogMSsgKDQxNSkgNzcwLTE0MDAsIEZBWCAxKyAoNDE1KSA3NzAtOTkxMAotICoKLSAqIGFuZAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKICNpZm5kZWYgVDEyOF9ICiAjZGVmaW5lIFQxMjhfSAogCi0jZGVmaW5lIFQxMjhfUFVCTElDX1JFTEVBU0UgMwotCiAjZGVmaW5lIFRERUJVRwkJMAogI2RlZmluZSBUREVCVUdfSU5JVAkweDEKICNkZWZpbmUgVERFQlVHX1RSQU5TRkVSIDB4MgpAQCAtODgsMTIgKzcyLDYgQEAKICNkZWZpbmUgVF9EQVRBX1JFR19PRkZTRVQJMHgxZTAwCS8qIHJ3IDUxMiBieXRlcyBsb25nICovCiAKICNpZm5kZWYgQVNNCi1zdGF0aWMgaW50IHQxMjhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgdDEyOF9iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKLQkJCSAgc2VjdG9yX3QsIGludCopOwotc3RhdGljIGludCB0MTI4X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwotc3RhdGljIGludCB0MTI4X3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCB0MTI4X2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCiAjaWZuZGVmIENNRF9QRVJfTFVOCiAjZGVmaW5lIENNRF9QRVJfTFVOIDIKQEAgLTEzNCw2ICsxMTIsNyBAQAogI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgdDEyOF9xdWV1ZV9jb21tYW5kCiAjZGVmaW5lIE5DUjUzODBfYWJvcnQgdDEyOF9hYm9ydAogI2RlZmluZSBOQ1I1MzgwX2J1c19yZXNldCB0MTI4X2J1c19yZXNldAorI2RlZmluZSBOQ1I1MzgwX2luZm8gdDEyOF9pbmZvCiAjZGVmaW5lIE5DUjUzODBfc2hvd19pbmZvIHQxMjhfc2hvd19pbmZvCiAjZGVmaW5lIE5DUjUzODBfd3JpdGVfaW5mbyB0MTI4X3dyaXRlX2luZm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYyBiL2RyaXZlcnMvc2NzaS90bXNjc2ltLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NDU3NTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYworKysgL2Rldi9udWxsCkBAIC0xLDI2MjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJRklMRSBOQU1FIDogVE1TQ1NJTS5DCQkJCQkJKgotICoJICAgICBCWSAgIDogQy5MLiBIdWFuZywgIGNoaW5nQHRla3JhbS5jb20udHcJCQkqCi0gKglEZXNjcmlwdGlvbjogRGV2aWNlIERyaXZlciBmb3IgVGVrcmFtIERDLTM5MChUKSBQQ0kgU0NTSQkqCi0gKgkJICAgICBCdXMgTWFzdGVyIEhvc3QgQWRhcHRlcgkJCQkqCi0gKiAoQylDb3B5cmlnaHQgMTk5NS0xOTk2IFRla3JhbSBUZWNobm9sb2d5IENvLiwgTHRkLgkJCSoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIChDKSBDb3B5cmlnaHQ6IHB1dCB1bmRlciBHTlUgR1BMIGluIDEwLzk2CQkJCSoKLSAqCQkJCShzZWUgRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0KQkqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAkSWQ6IHRtc2NzaW0uYyx2IDIuNjAuMi4zMCAyMDAwLzEyLzIwIDAxOjA3OjEyIGdhcmxvZmYgRXhwICQJCSoKLSAqCUVuaGFuY2VtZW50cyBhbmQgYnVnZml4ZXMgYnkJCQkJCSoKLSAqCUt1cnQgR2FybG9mZiA8a3VydEBnYXJsb2ZmLmRlPgk8Z2FybG9mZkBzdXNlLmRlPgkJKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJSElTVE9SWToJCQkJCQkJKgotICoJCQkJCQkJCQkqCi0gKglSRVYjCURBVEUJTkFNRQlERVNDUklQVElPTgkJCQkqCi0gKgkxLjAwICA5Ni8wNC8yNAlDTEgJRmlyc3QgcmVsZWFzZQkJCQkqCi0gKgkxLjAxICA5Ni8wNi8xMglDTEgJRml4ZWQgYnVnIG9mIE1lZGlhIENoYW5nZSBmb3IgUmVtb3ZhYmxlICoKLSAqCQkJCURldmljZSwgc2NhbiBhbGwgTFVOLiBTdXBwb3J0IFByZTIuMC4xMCAqCi0gKgkxLjAyICA5Ni8wNi8xOAlDTEgJRml4ZWQgYnVnIG9mIENvbW1hbmQgdGltZW91dCAuLi4JKgotICoJMS4wMyAgOTYvMDkvMjUJS0cJQWRkZWQgdG1zY3NpbV9wcm9jX2luZm8oKQkJKgotICoJMS4wNCAgOTYvMTAvMTEJQ0xICVVwZGF0aW5nIGZvciBzdXBwb3J0IEtWIDIuMC54CQkqCi0gKgkxLjA1ICA5Ni8xMC8xOAlLRwlGaXhlZCBidWcgaW4gREMzOTBfYWJvcnQobnVsbCBwdHIgZGVyZWYpKgotICoJMS4wNiAgOTYvMTAvMjUJS0cJRml4ZWQgbW9kdWxlIHN1cHBvcnQJCQkqCi0gKgkxLjA3ICA5Ni8xMS8wOQlLRwlGaXhlZCB0bXNjc2ltX3Byb2NfaW5mbygpCQkqCi0gKgkxLjA4ICA5Ni8xMS8xOAlLRwlGaXhlZCBudWxsIHB0ciBpbiBEQzM5MF9EaXNjb25uZWN0KCkJKgotICoJMS4wOSAgOTYvMTEvMzAJS0cJQWRkZWQgcmVnaXN0ZXIgdGhlIGFsbG9jYXRlZCBJTyBzcGFjZQkqCi0gKgkxLjEwICA5Ni8xMi8wNQlDTEgJTW9kaWZpZWQgdG1zY3NpbV9wcm9jX2luZm8oKSwgYW5kIHJlc2V0ICoKLSAqCQkJCXBlbmRpbmcgaW50ZXJydXB0IGluIERDMzkwX2RldGVjdCgpCSoKLSAqCTEuMTEgIDk3LzAyLzA1CUtHL0NMSAlGaXhlZHMgcHJvYmxlbSB3aXRoIHBhcnRpdGlvbnMgZ3JlYXRlcgkqCi0gKgkJCQl0aGFuIDFHQgkJCQkqCi0gKgkxLjEyICA5OC8wMi8xNSAgTUogICAgICBSZXdyaXR0ZW4gUENJIHByb2JpbmcJCQkqCi0gKgkxLjEzICA5OC8wNC8wOAlLRwlTdXBwb3J0IGZvciBub24gREMzOTAsIF9faW5pdGZ1bmMgZGVjbHMsKgotICoJCQkJY2hhbmdlZCBtYXggZGV2cyBmcm9tIDEwIHRvIDE2CQkqCi0gKgkxLjE0YSA5OC8wNS8wNQlLRwlEeW5hbWljIERDQiBhbGxvY2F0aW9uLCBhZGQtc2luZ2xlLWRldgkqCi0gKgkJCQlmb3IgTFVOcyBpZiBMVU5fU0NBTiAoQklPUykgbm90IHNldAkqCi0gKgkJCQlydW50aW1lIGNvbmZpZyB1c2luZyAvcHJvYyBpbnRlcmZhY2UJKgotICoJMS4xNGIgOTgvMDUvMDYJS0cJZWxpbWluYXRlZCBjbGkgKCk7IHN0aSAoKTsgc3BpbmxvY2tzCSoKLSAqCTEuMTRjIDk4LzA1LzA3CUtHCTIuMC54IGNvbXBhdGliaWxpdHkJCQkqCi0gKgkxLjIwYSA5OC8wNS8wNwlLRwljaGFuZ2VkIG5hbWVzIG9mIGZ1bmNzIHRvIGJlIGNvbnNpc3RlbnQgKgotICoJCQkJREMzOTBfIChlbnRyeSBwb2ludHMpLCBkYzM5MF8gKGludGVybmFsKSoKLSAqCQkJCXJld29ya2VkIGxvY2tpbmcJCQkqCi0gKgkxLjIwYiA5OC8wNS8xMglLRwlidWdzOiB2ZXJzaW9uLCBrZnJlZSwgX2N0bXAJCSoKLSAqCQkJCWRlYnVnIG91dHB1dAkJCQkqCi0gKgkxLjIwYyA5OC8wNS8xMglLRwlidWdzOiBrZnJlZSwgcGFyc2luZywgRUVwcm9tRGVmYXVsdHMJKgotICoJMS4yMGQgOTgvMDUvMTQJS0cJYnVnczogbGlzdCBsaW5rYWdlLCBjbGVhciBmbGFnIGFmdGVyICAJKgotICoJCQkJcmVzZXQgb24gc3RhcnR1cCwgY29kZSBjbGVhbnVwCQkqCi0gKgkxLjIwZSA5OC8wNS8xNQlLRwlzcGlubG9jayBjb21tZW50cywgbmFtZSBzcGFjZSBjbGVhbnVwCSoKLSAqCQkJCXBMYXN0RENCIG5vdyBwYXJ0IG9mIEFDQiBzdHJ1Y3R1cmUJKgotICoJCQkJYWRkZWQgc3RhdHMsIHRpbWVvdXQgZm9yIDIuMSwgVGFnUSBidWcJKgotICoJCQkJUkVTRVQgYW5kIElOUVVJUlkgaW50ZXJmYWNlIGNvbW1hbmRzCSoKLSAqCTEuMjBmIDk4LzA1LzE4CUtHCXNwaW5sb2NrcyBmaXhlcywgbWF4X2x1biBmaXgsIGZyZWUgRENCcwkqCi0gKgkJCQlmb3IgbWlzc2luZyBMVU5zLCBwZW5kaW5nIGludAkJKgotICoJMS4yMGcgOTgvMDUvMTkJS0cJQ2xlYW4gdXA6IEF2b2lkIHNob3J0CQkJKgotICoJMS4yMGggOTgvMDUvMjEJS0cJUmVtb3ZlIEFkYXB0U0NTSUlELCBtYXhfbHVuIC4uLgkJKgotICoJMS4yMGkgOTgvMDUvMjEJS0cJQWlpaWU6IEJ1ZyB3aXRoIFRhZ1FNYXNrICAgICAgIAkJKgotICoJMS4yMGogOTgvMDUvMjQJS0cJSGFuZGxlIFNUQVRfQlVTWSwgaGFuZGxlIHBBQ0ItPnBMaW5rRENCCSoKLSAqCQkJCT09IDAgaW4gcmVtb3ZlX2RldiBhbmQgRG9pbmdTUkJfRG9uZQkqCi0gKgkxLjIwayA5OC8wNS8yNQlLRwlETUFfSU5UCShleHBlcmltZW50YWwpCSAgICAgICAJCSoKLSAqCTEuMjBsIDk4LzA1LzI3CUtHCXJlbW92ZSBETUFfSU5UOyBETUFfSURMRSBjbWRzIGFkZGVkOwkqCi0gKgkxLjIwbSA5OC8wNi8xMAlLRwlnbGl0Y2ggY29uZmlndXJhYmxlOyBtYWRlIHNvbWUgZ2xvYmFsCSoKLSAqCQkJCXZhcnMgcGFydCBvZiBBQ0I7IHVzZSBEQzM5MF9yZWFkWAkqCi0gKgkxLjIwbiA5OC8wNi8xMQlLRwlzdGFydHVwIHBhcmFtcwkJCQkqCi0gKgkxLjIwbyA5OC8wNi8xNQlLRwlhZGRlZCBUYWdNYXhOdW0gdG8gYm9vdC9tb2R1bGUgcGFyYW1zCSoKLSAqCQkJCURldmljZSBOciAtPiBJZHgsIFRhZ01heE51bSBwb3dlciBvZiAyICAqCi0gKgkxLjIwcCA5OC8wNi8xNwlLRwlEb2N1IHVwZGF0ZXMuIFJlc2V0IGRlcGVuZHMgb24gc2V0dGluZ3MgKgotICoJCQkJcGNpX3NldF9tYXN0ZXIgYWRkZWQ7IDIuMC54eDogcGNpYmlvc18qCSoKLSAqCQkJCXVzZWQgaW5zdGVhZCBvZiBNZWNoTnVtIHRoaW5ncyAuLi4JKgotICoJMS4yMHEgOTgvMDYvMjMJS0cJQ2hhbmdlZCBkZWZhdWx0cy4gQWRkZWQgZGVidWcgY29kZSBmb3IJKgotICoJCQkJcmVtb3ZhYmxlIG1lZGlhIGFuZCBmaXhlZCBpdC4gVGFnTWF4TnVtCSoKLSAqCQkJCWZpeGVkIGZvciBEQzM5MC4gTG9ja2luZzogQUNCLCBEUlYgZm9yCSoKLSAqCQkJCWJldHRlciBJUlEgc2hhcmluZy4gU3BlbGxpbmc6IFF1ZXVlaW5nCSoKLSAqCQkJCVBhcnNpbmcgYW5kIGdsaXRjaF9jZmcgY2hhbmdlcy4gRGlzcGxheQkqCi0gKgkJCQlyZWFsIFN5bmNTcGVlZCB2YWx1ZS4gTWFkZSBEaXNDb25uCSoKLSAqCQkJCWZ1bmN0aW9uYWwgKCEpCQkJCSoKLSAqCTEuMjByIDk4LzA2LzMwCUtHCURlYnVnIG1hY3JvcywgYWxsb3cgZGlzYWJsaW5nIERzQ24sIHNldAkqCi0gKgkJCQlCSVQ0IGluIEN0cmxSNCwgRU5fUEFHRV9JTlQsIDIuMCBtb2R1bGUJKgotICoJCQkJcGFyYW0gLTEgZml4ZWQuCQkJCSoKLSAqCTEuMjBzIDk4LzA4LzIwCUtHCURlYnVnIGluZm8gb24gYWJvcnQoKSwgdHJ5IHRvIGNoZWNrIFBDSSwqCi0gKgkJCQlwaHlzX3RvX2J1cyBpbnN0ZWFkIG9mIHBoeXNfdG9fdmlydCwJKgotICoJCQkJZml4ZWQgc2VsLiBwcm9jZXNzLCBmaXhlZCBsb2NraW5nLAkqCi0gKgkJCQlhZGRlZCBNT0RVTEVfWFhYIGluZm9zLCBjaGFuZ2VkIElSUQkqCi0gKgkJCQlyZXF1ZXN0IGZsYWdzLCBkaXNhYmxlIERNQV9JTlQJCSoKLSAqCTEuMjB0IDk4LzA5LzA3CUtHCVRhZ1EgcmVwb3J0IGZpeGVkOyBXcml0ZSBFcmFzZSBETUEgU3RhdDsqCi0gKgkJCQlpbml0ZnVuYyAtPiBfX2luaXQ7IGJldHRlciBhYm9ydDsJKgotICoJCQkJVGltZW91dCBmb3IgWEZFUl9ET05FICYgQkxBU1RfQ09NUExFVEU7CSoKLSAqCQkJCUFsbG93IHVwIHRvIDMzIGNvbW1hbmRzIGJlaW5nIHByb2Nlc3NlZCAqCi0gKgkyLjBhICA5OC8xMC8xNAlLRwlNYXggQ21uZHMgYmFjayB0byAxNy4gRE1BX1N0YXQgY2xlYXJpbmcgKgotICoJCQkJYWxsIGZsYWdzLiBDbGVhciB3aXRoaW4gd2hpbGUoKSBsb29wcwkqCi0gKgkJCQlpbiBEYXRhSW5fMC9PdXRfMC4gTnVsbCBwdHIgaW4gZHVtcGluZm8JKgotICoJCQkJZm9yIHBTUkI9PTAuIEJldHRlciBsb2NraW5nIGR1cmluZyBpbml0LioKLSAqCQkJCWJpb3NfcGFyYW0oKSBub3cgcmVzcGVjdHMgcGFydC4gdGFibGUuCSoKLSAqCTIuMGIgIDk4LzEwLzI0CUtHCURvY3UgZml4ZXMuIFRpbWVvdXQgTXNnIGluIERNQSBCbGFzdC4JKgotICoJCQkJRGlzYWxsb3cgaWxsZWdhbCBpZHggaW4gSU5RVUlSWS9SRU1PVkUJKgotICoJMi4wYyAgOTgvMTEvMTkJS0cJQ2xlYW5lZCB1cCBkZXRlY3QvaW5pdCBmb3IgU01QIGJveGVzLCAJKgotICoJCQkJV3JpdGUgRXJhc2UgRE1BICgxLjIwdCkgY2F1c2VkIHByb2JsZW1zCSoKLSAqCTIuMGQgIDk4LzEyLzI1CUtHCUNocmlzdG1hcyByZWxlYXNlIDstKSBNZXNzYWdlIGhhbmRsaW5nICAqCi0gKgkJCQljb21wbGV0ZWx5IHJld29ya2VkLiBIYW5kbGUgdGFyZ2V0IGluaS0JKgotICoJCQkJdGlhdGVkIFNEVFIgY29ycmVjdGx5LgkJCSoKLSAqCTIuMGQxIDk5LzAxLzI1CUtHCVRyeSB0byBoYW5kbGUgUkVTVE9SRV9QVFIJCSoKLSAqCTIuMGQyIDk5LzAyLzA4CUtHCUNoZWNrIGZvciBmYWlsdXJlIG9mIGttYWxsb2MsIGNvcnJlY3QgCSoKLSAqCQkJCWluY2x1c2lvbiBvZiBzY3NpY2FtLmgsIERlbGF5UmVzZXQJKgotICoJMi4wZDMgOTkvMDUvMzEJS0cJRFJJVkVSX09LIC0+IERJRF9PSywgRElEX05PX0NPTk5FQ1QsCSoKLSAqCQkJCWRldGVjdCBUYXJnZXQgbW9kZSBhbmQgd2Fybi4JCSoKLSAqCQkJCXBjbWQtPnJlc3VsdCBoYW5kbGluZyBjbGVhbmVkIHVwLgkqCi0gKgkyLjBkNCA5OS8wNi8wMQlLRwlDbGVhbmVkIHNlbGVjdGlvbiBwcm9jZXNzLiBGb3VuZCBidWcJKgotICoJCQkJd2hpY2ggcHJldmVudGVkIG1vcmUgdGhhbiAxNiB0YWdzLiBOb3c6CSoKLSAqCQkJCTI0LiBTRFRSIGNsZWFudXAuIENsZWFuZXIgbXVsdGktTFVOCSoKLSAqCQkJCWhhbmRsaW5nLiBEb24ndCBtb2RpZnkgQ29udHJvbFJlZ3MvRklGTwkqCi0gKgkJCQl3aGVuIGNvbm5lY3RlZC4JCQkJKgotICoJMi4wZDUgOTkvMDYvMDEJS0cJQ2xlYXIgRGV2SUQsIEZpeCBJTlFVSVJZIGFmdGVyIGNmZyBjaGcuCSoKLSAqCTIuMGQ2IDk5LzA2LzAyCUtHCUFkZGVkIEFERCBzcGVjaWFsIGNvbW1hbmQgdG8gYWxsb3cgY2ZnLgkqCi0gKgkJCQliZWZvcmUgZGV0ZWN0aW9uLiBSZXNldCBTWU5DX05FR09fRE9ORQkqCi0gKgkJCQlhZnRlciBhIGJ1cyByZXNldC4JCQkqCi0gKgkyLjBkNyA5OS8wNi8wMwlLRwlGaXhlZCBidWdzIHdydCBhZGQscmVtb3ZlIGNvbW1hbmRzCSoKLSAqCTIuMGQ4IDk5LzA2LzA0CUtHCVJlbW92ZWQgY29weWluZyBvZiBjbW5kIGludG8gQ21kQmxvY2suCSoKLSAqCQkJCUZpeGVkIE9vcHMgaW4gX3JlbGVhc2UoKS4JCSoKLSAqCTIuMGQ5IDk5LzA2LzA2CUtHCUFsc28gdGFnIHF1ZXVlIElOUVVJUlksIFRfVV9SLCAuLi4JKgotICoJCQkJQWxsb3cgYXJiLiBuby4gb2YgVGFnZ2VkIENtbmRzLiBNYXggMzIJKgotICoJMi4wZDEwOTkvMDYvMjAJS0cJVGFnTWF4Tm8gY2hhbmdlcyBub3cgaG9ub3VyZWQhIFF1ZXVlaW5nICoKLSAqCQkJCWNsZWFyaWZpZWQgKHJlbmFtZWQgLi4pIFRhZ01hc2sgaGFuZGxpbmcqCi0gKgkJCQljbGVhbmVkLgkJCQkqCi0gKgkyLjBkMTE5OS8wNi8yOAlLRwljbWQtPnJlc3VsdCBub3cgaWRlbnRpY2FsIHRvIDIuMGQyCSoKLSAqCTIuMGQxMjk5LzA3LzA0CUtHCUNoYW5nZWQgb3JkZXIgb2YgcHJvY2Vzc2luZyBpbiBJUlEJKgotICoJMi4wZDEzOTkvMDcvMDUJS0cJRG9uJ3QgdXBkYXRlIERDQiBmaWVsZHMgaWYgcmVtb3ZlZAkqCi0gKgkyLjBkMTQ5OS8wNy8wNQlLRwlyZW1vdmVfZGV2OiBNb3ZlIGtmcmVlKCkgdG8gdGhlIGVuZAkqCi0gKgkyLjBkMTU5OS8wNy8xMglLRwl1c2VfbmV3X2VoX2NvZGU6IDAsIFVMT05HIC0+IFVJTlQgd2hlcmUJKgotICoJCQkJYXBwcm9wcmlhdGUJCQkJKgotICoJMi4wZDE2OTkvMDcvMTMJS0cJUmVlbmFibGUgU3RhcnRTQ1NJIGludGVycnVwdCwgUmV0cnkgbXNnCSoKLSAqCTIuMGQxNzk5LzA3LzE1CUtHCVJlbW92ZSBkZWJ1ZyBtc2cuIERpc2FibGUgcmVjZmcuIHdoZW4JKgotICoJCQkJdGhlcmUgYXJlIHF1ZXVlZCBjbW5kcwkJCSoKLSAqCTIuMGQxODk5LzA3LzE4CUtHCVNlbGVjdGlvbiB0aW1lb3V0OiBEb24ndCByZXF1ZXVlCSoKLSAqCTIuMGQxOTk5LzA3LzE4CUtHCUFib3J0OiBPbmx5IGNhbGwgc2NzaV9kb25lIGlmIGRlcXVldWVkCSoKLSAqCTIuMGQyMDk5LzA3LzE5CUtHCVJzdF9EZXRlY3Q6IERvaW5nU1JCX0RvbmUJCSoKLSAqCTIuMGQyMTk5LzA4LzE1CUtHCWRldl9pZCBmb3IgcmVxdWVzdC9mcmVlX2lycSwgY21uZFswXSBmb3IqCi0gKgkJCQlSRVRSWSwgU1JCZG9uZSBkb2VzIERJRF9BQk9SVCBmb3IgdGhlIAkqCi0gKgkJCQljbWQgcGFzc2VkIGJ5IERDMzkwX3Jlc2V0KCkJCSoKLSAqCTIuMGQyMjk5LzA4LzI1CUtHCWRldl9pZCBmaXhlZC4gY2FuX3F1ZXVlOiA0MgkJKgotICoJMi4wZDIzOTkvMDgvMjUJS0cJUmVtb3ZlZCBzb21lIGRlYnVnZ2luZyBjb2RlLiBkZXZfaWQgCSoKLSAqCQkJCW5vdyBpcyBzZXQgdG8gcEFDQi4gVXNlIHU4LHUxNix1MzIuIAkqCi0gKgkyLjBkMjQ5OS8xMS8xNAlLRwlVbnJlZy4gSS9PIGlmIGZhaWxlZCBJUlEgYWxsb2MuIENhbGwJKgotICogCQkJCWRvbmUgKCkgdy8gRElEX0JBRF9UQVJHRVQgaW4gY2FzZSBvZgkqCi0gKgkJCQltaXNzaW5nIERDQi4gV2UJYXJlIG9sZCBFSCEhCQkqCi0gKgkyLjBkMjUwMC8wMS8xNQlLRwkyLjMuM3ggY29tcGF0IGZyb20gQW5kcmVhcyBTY2h1bHR6CSoKLSAqCQkJCXNldCB1bmlxdWVfaWQuIERpc2FibGUgUkVUUlkgbWVzc2FnZS4JKgotICoJMi4wZDI2MDAvMDEvMjkJS0cJR28gdG8gbmV3IEVILgkJCQkqCi0gKgkyLjBkMjcwMC8wMS8zMQlLRwkuLi4gYnV0IG1haW50YWluIDIuMCBjb21wYXQuCQkqCi0gKgkJCQlhbmQgZml4IERDQiBmcmVlaW5nCQkJKgotICoJMi4wZDI4MDAvMDIvMTQJS0cJUXVldWUgc3RhdGlzdGljcyBmaXhlZCwgZHVtcCBzcGVjaWFsIGNtZCoKLSAqCQkJCVdhaXRpbmdfVGltZXIgZm9yIGZhaWxlZCBTdGFydFNDU0kJKgotICoJCQkJTmV3IEVIOiBEb24ndCByZXR1cm4gY21uZHMgdG8gTUwgb24gUlNUICoKLSAqCQkJCVVzZSBvbGQgRUggKGRvbid0IGhhdmUgbmV3IEVIIGZucyB5ZXQpCSoKLSAqIAkJCQlSZXNldDogVW5sb2NrLCBidXQgcmVmdXNlIHRvIHF1ZXVlCSoKLSAqIAkJCQkyLjMgX19zZXR1cCBmdW5jdGlvbgkJCSoKLSAqCTIuMGUgIDAwLzA1LzIyCUtHCVJldHVybiByZXNpZHVhbCBmb3IgMi4zCQkJKgotICoJMi4wZTEgMDAvMDUvMjUJS0cJQ29tcGlsZSBmaXhlcyBmb3IgMi4zLjk5CQkqCi0gKgkyLjBlMiAwMC8wNS8yNwlLRwlKZWZmIEdhcnppaydzIHBjaV9lbmFibGVfZGV2aWNlKCkJKgotICoJMi4wZTMgMDAvMDkvMjkJS0cJU29tZSAyLjQgY2hhbmdlcy4gRG9uJ3QgdHJ5IFN5bmMgTmVnbwkqCi0gKgkJCQliZWZvcmUgSU5RVUlSWSBoYXMgcmVwb3J0ZWQgYWJpbGl0eS4gCSoKLSAqCQkJCVJlY29nbmlzZSBJTlFVSVJZIGFzIHNjYW5uaW5nIGNvbW1hbmQuCSoKLSAqCTIuMGU0IDAwLzEwLzEzCUtHCUFsbG93IGNvbXBpbGF0aW9uIGludG8gMi40IGtlcm5lbAkqCi0gKgkyLjBlNSAwMC8xMS8xNwlLRwlTdG9yZSBJbnEuZmxhZ3MgaW4gRENCCQkJKgotICoJMi4wZTYgMDAvMTEvMjIgIEtHCTIuNCBpbml0IGZ1bmN0aW9uIChUaHggdG8gTy5TY2h1bWFubikJKgotICogCQkJCTIuNCBQQ0kgZGV2aWNlIHRhYmxlIChUaHggdG8gQS5SaWNodGVyKQkqCi0gKgkyLjBlNyAwMC8xMS8yOAlLRwlBbGxvdyBvdmVycmlkaW5nIG9mIEJJT1Mgc2V0dGluZ3MJKgotICoJMi4wZiAgMDAvMTIvMjAJS0cJSGFuZGxlIGZhaWxlZCBJTlFVSVJZcyBkdXJpbmcgc2NhbgkqCi0gKgkyLjFhICAwMy8xMS8yOSAgR0wsIEtHCUluaXRpYWwgZml4aW5nIGZvciAyLjYuIENvbnZlcnQgdG8JKgotICoJCQkJdXNlIHRoZSBjdXJyZW50IFBDSS1tYXBwaW5nIEFQSSwgdXBkYXRlCSoKLSAqCQkJCWNvbW1hbmQtcXVldWluZy4JCQkqCi0gKgkyLjFiICAwNC8wNC8xMyAgR0wJRml4IGZvciA2NC1iaXQgcGxhdGZvcm1zCQkqCi0gKgkyLjFiMSAwNC8wMS8zMQlHTAkoYXBwbGllZCAwNS4wNCkgUmVtb3ZlIGludGVybmFsCQkqCi0gKgkJCQljb21tYW5kLXF1ZXVpbmcuCQkJKgotICoJMi4xYjIgMDQvMDIvMDEJQ0gJKGFwcGxpZWQgMDUuMDQpIEZpeCBlcnJvci1oYW5kbGluZwkqCi0gKgkyLjFjICAwNC8wNS8yMyAgR0wJVXBkYXRlIHRvIHVzZSB0aGUgbmV3IHBjaV9kcml2ZXIgQVBJLAkqCi0gKgkJCQlzb21lIHNjc2kgRUggdXBkYXRlcywgbW9yZSBjbGVhbnVwLgkqCi0gKgkyLjFkICAwNC8wNS8yNwlHTAlNb3ZlZCBzZXR0aW5nIG9mIHNjYW5fZGV2aWNlcyB0bwkqCi0gKgkJCQlzbGF2ZV9hbGxvYy9fY29uZmlndXJlL19kZXN0cm95LCBhcwkqCi0gKgkJCQlzdWdnZXN0ZWQgYnkgQ0guCQkJKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBERUJVRyBvcHRpb25zICovCi0vLyNkZWZpbmUgREMzOTBfREVCVUcwCi0vLyNkZWZpbmUgREMzOTBfREVCVUcxCi0vLyNkZWZpbmUgREMzOTBfRENCREVCVUcKLS8vI2RlZmluZSBEQzM5MF9QQVJTRURFQlVHCi0vLyNkZWZpbmUgREMzOTBfUkVNT1ZBQkxFREVCVUcKLS8vI2RlZmluZSBEQzM5MF9MT0NLREVCVUcKLQotLy8jZGVmaW5lIE5PUCBkb3t9d2hpbGUoMCkKLSNkZWZpbmUgQ19OT1AKLQotLyogRGVidWcgZGVmaW5pdGlvbnMgKi8KLSNpZmRlZiBEQzM5MF9ERUJVRzAKLSMgZGVmaW5lIERFQlVHMCh4KSB4Ci0jZWxzZQotIyBkZWZpbmUgREVCVUcwKHgpIENfTk9QCi0jZW5kaWYKLSNpZmRlZiBEQzM5MF9ERUJVRzEKLSMgZGVmaW5lIERFQlVHMSh4KSB4Ci0jZWxzZQotIyBkZWZpbmUgREVCVUcxKHgpIENfTk9QCi0jZW5kaWYKLSNpZmRlZiBEQzM5MF9EQ0JERUJVRwotIyBkZWZpbmUgRENCREVCVUcoeCkgeAotI2Vsc2UKLSMgZGVmaW5lIERDQkRFQlVHKHgpIENfTk9QCi0jZW5kaWYKLSNpZmRlZiBEQzM5MF9QQVJTRURFQlVHCi0jIGRlZmluZSBQQVJTRURFQlVHKHgpIHgKLSNlbHNlCi0jIGRlZmluZSBQQVJTRURFQlVHKHgpIENfTk9QCi0jZW5kaWYKLSNpZmRlZiBEQzM5MF9SRU1PVkFCTEVERUJVRwotIyBkZWZpbmUgUkVNT1ZBQkxFREVCVUcoeCkgeAotI2Vsc2UKLSMgZGVmaW5lIFJFTU9WQUJMRURFQlVHKHgpIENfTk9QCi0jZW5kaWYKLSNkZWZpbmUgRENCREVCVUcxKHgpIENfTk9QCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KLQotCi0jZGVmaW5lIERDMzkwX0JBTk5FUiAiVGVrcmFtIERDMzkwL0FNNTNDOTc0IgotI2RlZmluZSBEQzM5MF9WRVJTSU9OICIyLjFkIDIwMDQtMDUtMjciCi0KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTUQ1M0M5NzQgCVBDSV9ERVZJQ0VfSURfQU1EX1NDU0kKLQotI2luY2x1ZGUgInRtc2NzaW0uaCIKLQotCi1zdGF0aWMgdm9pZCBkYzM5MF9EYXRhT3V0XzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9EYXRhSW5fMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX0NvbW1hbmRfMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX1N0YXR1c18wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfTXNnT3V0XzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9Nc2dJbl8wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfRGF0YU91dFBoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfRGF0YUluUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9Db21tYW5kUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9TdGF0dXNQaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX01zZ091dFBoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfTXNnSW5QaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX05vcF8wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfTm9wXzEoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci0KLXN0YXRpYyB2b2lkIGRjMzkwX1NldFhmZXJSYXRlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCICk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9EaXNjb25uZWN0KCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9SZXNlbGVjdCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiApOwotc3RhdGljIHZvaWQgZGMzOTBfU1JCZG9uZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX2RjYiogcERDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiApOwotc3RhdGljIHZvaWQgZGMzOTBfU2NzaVJzdERldGVjdCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiApOwotc3RhdGljIHZvaWQgZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0KHN0cnVjdCBkYzM5MF9hY2IqLCBzdHJ1Y3QgZGMzOTBfc3JiKik7Ci1zdGF0aWMgdm9pZCBkYzM5MF9kdW1waW5mbyhzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKTsKLXN0YXRpYyB2b2lkIGRjMzkwX1Jlc2V0RGV2UGFyYW0oc3RydWN0IGRjMzkwX2FjYiogcEFDQik7Ci0KLXN0YXRpYyB1MzIJZGMzOTBfbGFzdHN0YXR1cyA9IDA7Ci1zdGF0aWMgdTgJZGMzOTBfYWRhcHRlckNudCA9IDA7Ci0KLXN0YXRpYyBpbnQgZGlzYWJsZV9jbHVzdGVyaW5nOwotbW9kdWxlX3BhcmFtKGRpc2FibGVfY2x1c3RlcmluZywgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9jbHVzdGVyaW5nLCAiSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXMgd2l0aCB5b3VyIGRldmljZXMsIHRyeSBzZXR0aW5nIHRvIDEiKTsKLQotLyogU3RhcnR1cCB2YWx1ZXMsIHRvIGJlIG92ZXJyaWRlbiBvbiB0aGUgY29tbWFuZGxpbmUgKi8KLXN0YXRpYyBpbnQgdG1zY3NpbVtdID0gey0yLCAtMiwgLTIsIC0yLCAtMiwgLTJ9OwotCi1tb2R1bGVfcGFyYW1fYXJyYXkodG1zY3NpbSwgaW50LCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModG1zY3NpbSwgIkhvc3QgU0NTSSBJRCwgU3BlZWQgKDA9MTBNSHopLCBEZXZpY2UgRmxhZ3MsIEFkYXB0ZXIgRmxhZ3MsIE1heCBUYWdzIChsb2cyKHRhZ3MpLTEpLCBEZWxheVJlc2V0IChzKSIpOwotTU9EVUxFX0FVVEhPUigiQy5MLiBIdWFuZyAvIEt1cnQgR2FybG9mZiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIGhvc3QgYWRhcHRlciBkcml2ZXIgZm9yIFRla3JhbSBEQzM5MCBhbmQgb3RoZXIgQU1ENTNDOTc0QSBiYXNlZCBQQ0kgU0NTSSBhZGFwdGVycyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInNkLHNyLHNnLHN0Iik7Ci0KLXN0YXRpYyB2b2lkICpkYzM5MF9waGFzZTBbXT17Ci0gICAgICAgZGMzOTBfRGF0YU91dF8wLAotICAgICAgIGRjMzkwX0RhdGFJbl8wLAotICAgICAgIGRjMzkwX0NvbW1hbmRfMCwKLSAgICAgICBkYzM5MF9TdGF0dXNfMCwKLSAgICAgICBkYzM5MF9Ob3BfMCwKLSAgICAgICBkYzM5MF9Ob3BfMCwKLSAgICAgICBkYzM5MF9Nc2dPdXRfMCwKLSAgICAgICBkYzM5MF9Nc2dJbl8wLAotICAgICAgIGRjMzkwX05vcF8xCi0gICAgICAgfTsKLQotc3RhdGljIHZvaWQgKmRjMzkwX3BoYXNlMVtdPXsKLSAgICAgICBkYzM5MF9EYXRhT3V0UGhhc2UsCi0gICAgICAgZGMzOTBfRGF0YUluUGhhc2UsCi0gICAgICAgZGMzOTBfQ29tbWFuZFBoYXNlLAotICAgICAgIGRjMzkwX1N0YXR1c1BoYXNlLAotICAgICAgIGRjMzkwX05vcF8wLAotICAgICAgIGRjMzkwX05vcF8wLAotICAgICAgIGRjMzkwX01zZ091dFBoYXNlLAotICAgICAgIGRjMzkwX01zZ0luUGhhc2UsCi0gICAgICAgZGMzOTBfTm9wXzEKLSAgICAgICB9OwotCi0jaWZkZWYgREMzOTBfREVCVUcxCi1zdGF0aWMgY2hhciogZGMzOTBfcDBfc3RyW10gPSB7Ci0gICAgICAgImRjMzkwX0RhdGFPdXRfMCIsCi0gICAgICAgImRjMzkwX0RhdGFJbl8wIiwKLSAgICAgICAiZGMzOTBfQ29tbWFuZF8wIiwKLSAgICAgICAiZGMzOTBfU3RhdHVzXzAiLAotICAgICAgICJkYzM5MF9Ob3BfMCIsCi0gICAgICAgImRjMzkwX05vcF8wIiwKLSAgICAgICAiZGMzOTBfTXNnT3V0XzAiLAotICAgICAgICJkYzM5MF9Nc2dJbl8wIiwKLSAgICAgICAiZGMzOTBfTm9wXzEiCi0gICAgICAgfTsKLSAgICAgCi1zdGF0aWMgY2hhciogZGMzOTBfcDFfc3RyW10gPSB7Ci0gICAgICAgImRjMzkwX0RhdGFPdXRQaGFzZSIsCi0gICAgICAgImRjMzkwX0RhdGFJblBoYXNlIiwKLSAgICAgICAiZGMzOTBfQ29tbWFuZFBoYXNlIiwKLSAgICAgICAiZGMzOTBfU3RhdHVzUGhhc2UiLAotICAgICAgICJkYzM5MF9Ob3BfMCIsCi0gICAgICAgImRjMzkwX05vcF8wIiwKLSAgICAgICAiZGMzOTBfTXNnT3V0UGhhc2UiLAotICAgICAgICJkYzM5MF9Nc2dJblBoYXNlIiwKLSAgICAgICAiZGMzOTBfTm9wXzEiCi0gICAgICAgfTsKLSNlbmRpZiAgIAotCi1zdGF0aWMgdTggIGRjMzkwX2VlcHJvbUJ1ZltNQVhfQURBUFRFUl9OVU1dW0VFX0xFTl07Ci1zdGF0aWMgdTggIGRjMzkwX2Nsb2NrX3BlcmlvZDFbXSA9IHs0LCA1LCA2LCA3LCA4LCAxMCwgMTMsIDIwfTsKLXN0YXRpYyB1OCAgZGMzOTBfY2xvY2tfc3BlZWRbXSA9IHsxMDAsODAsNjcsNTcsNTAsIDQwLCAzMSwgMjB9OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZ1bmN0aW9ucyBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgCi0gKiAoRENCcywgU1JCcywgUXVldWVpbmcpCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBpbmxpbmUgZGMzOTBfc3RhcnRfc2VnbWVudChzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotCXN0cnVjdCBzY2F0dGVybGlzdCAqcHNnbCA9IHBTUkItPnBTZWdtZW50TGlzdDsKLQotCS8qIHN0YXJ0IG5ldyBzZyBzZWdtZW50ICovCi0JcFNSQi0+U0dCdXNBZGRyID0gc2dfZG1hX2FkZHJlc3MocHNnbCk7Ci0JcFNSQi0+U0dUb0JlWGZlckxlbiA9IHNnX2RtYV9sZW4ocHNnbCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlubGluZSBkYzM5MF9hZHZhbmNlX3NlZ21lbnQoc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTMyIHJlc2lkdWUpCi17Ci0JdW5zaWduZWQgbG9uZyB4ZmVyID0gcFNSQi0+U0dUb0JlWGZlckxlbiAtIHJlc2lkdWU7Ci0KLQkvKiB4ZmVyIG1vcmUgYnl0ZXMgdHJhbnNmZXJyZWQgKi8KLQlwU1JCLT5TR0J1c0FkZHIgKz0geGZlcjsKLQlwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gKz0geGZlcjsKLQlwU1JCLT5TR1RvQmVYZmVyTGVuID0gcmVzaWR1ZTsKLQotCXJldHVybiB4ZmVyOwotfQotCi1zdGF0aWMgc3RydWN0IGRjMzkwX2RjYiBfX2lubGluZV9fICpkYzM5MF9maW5kRENCICggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgdTggaWQsIHU4IGx1bikKLXsKLSAgIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IgPSBwQUNCLT5wTGlua0RDQjsgaWYgKCFwRENCKSByZXR1cm4gTlVMTDsKLSAgIHdoaWxlIChwRENCLT5UYXJnZXRJRCAhPSBpZCB8fCBwRENCLT5UYXJnZXRMVU4gIT0gbHVuKQotICAgICB7Ci0JcERDQiA9IHBEQ0ItPnBOZXh0RENCOwotCWlmIChwRENCID09IHBBQ0ItPnBMaW5rRENCKQotCSAgICAgcmV0dXJuIE5VTEw7Ci0gICAgIH0KLSAgIERDQkRFQlVHMSggcHJpbnRrIChLRVJOX0RFQlVHICJEQ0IgJXAgKCUwMngsJTAyeCkgZm91bmQuXG4iLAlcCi0JCSAgICAgIHBEQ0IsIHBEQ0ItPlRhcmdldElELCBwRENCLT5UYXJnZXRMVU4pKTsKLSAgIHJldHVybiBwRENCOwotfQotCi0vKiBJbnNlcnQgU1JCIG9pbiB0b3Agb2YgZnJlZSBsaXN0ICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRjMzkwX0ZyZWVfaW5zZXJ0IChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotICAgIERFQlVHMChwcmludGsgKCJEQzM5MDogRnJlZSBTUkIgJXBcbiIsIHBTUkIpKTsKLSAgICBwU1JCLT5wTmV4dFNSQiA9IHBBQ0ItPnBGcmVlU1JCOwotICAgIHBBQ0ItPnBGcmVlU1JCID0gcFNSQjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBkYzM5MF9Hb2luZ19hcHBlbmQgKHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gICAgcERDQi0+R29pbmdTUkJDbnQrKzsKLSAgICBERUJVRzAocHJpbnRrKCJEQzM5MDogQXBwZW5kIFNSQiAlcCB0byBHb2luZ1xuIiwgcFNSQikpOwotICAgIC8qIEFwcGVuZCB0byB0aGUgbGlzdCBvZiBHb2luZyBjb21tYW5kcyAqLwotICAgIGlmKCBwRENCLT5wR29pbmdTUkIgKQotCXBEQ0ItPnBHb2luZ0xhc3QtPnBOZXh0U1JCID0gcFNSQjsKLSAgICBlbHNlCi0JcERDQi0+cEdvaW5nU1JCID0gcFNSQjsKLQotICAgIHBEQ0ItPnBHb2luZ0xhc3QgPSBwU1JCOwotICAgIC8qIE5vIG5leHQgb25lIGluIHNlbnQgbGlzdCAqLwotICAgIHBTUkItPnBOZXh0U1JCID0gTlVMTDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBkYzM5MF9Hb2luZ19yZW1vdmUgKHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0JREVCVUcwKHByaW50aygiREMzOTA6IFJlbW92ZSBTUkIgJXAgZnJvbSBHb2luZ1xuIiwgcFNSQikpOwotICAgaWYgKHBTUkIgPT0gcERDQi0+cEdvaW5nU1JCKQotCXBEQ0ItPnBHb2luZ1NSQiA9IHBTUkItPnBOZXh0U1JCOwotICAgZWxzZQotICAgICB7Ci0Jc3RydWN0IGRjMzkwX3NyYiogcHNyYiA9IHBEQ0ItPnBHb2luZ1NSQjsKLQl3aGlsZSAocHNyYiAmJiBwc3JiLT5wTmV4dFNSQiAhPSBwU1JCKQotCSAgcHNyYiA9IHBzcmItPnBOZXh0U1JCOwotCWlmICghcHNyYikgCi0JICB7IHByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBSZW1vdmUgbm9uLWV4LiBTUkIgJXAgZnJvbSBHb2luZyFcbiIsIHBTUkIpOyByZXR1cm47IH0KLQlwc3JiLT5wTmV4dFNSQiA9IHBTUkItPnBOZXh0U1JCOwotCWlmIChwU1JCID09IHBEQ0ItPnBHb2luZ0xhc3QpCi0JICBwRENCLT5wR29pbmdMYXN0ID0gcHNyYjsKLSAgICAgfQotICAgcERDQi0+R29pbmdTUkJDbnQtLTsKLX0KLQotc3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCogZGMzOTBfc2dfYnVpbGRfc2luZ2xlKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0Jc2dfaW5pdF9vbmUoc2csIGFkZHIsIGxlbmd0aCk7Ci0JcmV0dXJuIHNnOwotfQotCi0vKiBDcmVhdGUgcGNpIG1hcHBpbmcgKi8KLXN0YXRpYyBpbnQgZGMzOTBfcGNpX21hcCAoc3RydWN0IGRjMzkwX3NyYiogcFNSQikKLXsKLQlpbnQgZXJyb3IgPSAwOwotCXN0cnVjdCBzY3NpX2NtbmQgKnBjbWQgPSBwU1JCLT5wY21kOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcFNSQi0+cFNSQkRDQi0+cERDQkFDQi0+cGRldjsKLQlkYzM5MF9jbWRfc2NwX3QqIGNtZHAgPSAoKGRjMzkwX2NtZF9zY3BfdCopKCZwY21kLT5TQ3ApKTsKLQotCS8qIE1hcCBzZW5zZSBidWZmZXIgKi8KLQlpZiAocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpIHsKLQkJcFNSQi0+cFNlZ21lbnRMaXN0CT0gZGMzOTBfc2dfYnVpbGRfc2luZ2xlKCZwU1JCLT5TZWdtZW50eCwgcGNtZC0+c2Vuc2VfYnVmZmVyLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwotCQlwU1JCLT5TR2NvdW50CQk9IHBjaV9tYXBfc2cocGRldiwgcFNSQi0+cFNlZ21lbnRMaXN0LCAxLAotCQkJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwotCQljbWRwLT5zYXZlZF9kbWFfaGFuZGxlCT0gc2dfZG1hX2FkZHJlc3MocFNSQi0+cFNlZ21lbnRMaXN0KTsKLQotCQkvKiBUT0RPOiBlcnJvciBoYW5kbGluZyAqLwotCQlpZiAocFNSQi0+U0djb3VudCAhPSAxKQotCQkJZXJyb3IgPSAxOwotCQlERUJVRzEocHJpbnRrKCIlcygpOiBNYXBwZWQgc2Vuc2UgYnVmZmVyICVwIGF0ICV4XG4iLCBfX2Z1bmNfXywgcGNtZC0+c2Vuc2VfYnVmZmVyLCBjbWRwLT5zYXZlZF9kbWFfaGFuZGxlKSk7Ci0JLyogTWFwIFNHIGxpc3QgKi8KLQl9IGVsc2UgaWYgKHNjc2lfc2dfY291bnQocGNtZCkpIHsKLQkJaW50IG5zZWc7Ci0KLQkJbnNlZyA9IHNjc2lfZG1hX21hcChwY21kKTsKLQotCQlwU1JCLT5wU2VnbWVudExpc3QJPSBzY3NpX3NnbGlzdChwY21kKTsKLQkJcFNSQi0+U0djb3VudAkJPSBuc2VnOwotCi0JCS8qIFRPRE86IGVycm9yIGhhbmRsaW5nICovCi0JCWlmIChuc2VnIDwgMCkKLQkJCWVycm9yID0gMTsKLQkJREVCVUcxKHByaW50aygiJXMoKTogTWFwcGVkIFNHICVwIHdpdGggJWQgKCVkKSBlbGVtZW50c1xuIixcCi0JCQkgICAgICBfX2Z1bmNfXywgc2NzaV9zZ2xpc3QocGNtZCksIG5zZWcsIHNjc2lfc2dfY291bnQocGNtZCkpKTsKLQkvKiBNYXAgc2luZ2xlIHNlZ21lbnQgKi8KLQl9IGVsc2UKLQkJcFNSQi0+U0djb3VudCA9IDA7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qIFJlbW92ZSBwY2kgbWFwcGluZyAqLwotc3RhdGljIHZvaWQgZGMzOTBfcGNpX3VubWFwIChzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotCXN0cnVjdCBzY3NpX2NtbmQgKnBjbWQgPSBwU1JCLT5wY21kOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcFNSQi0+cFNSQkRDQi0+cERDQkFDQi0+cGRldjsKLQlERUJVRzEoZGMzOTBfY21kX3NjcF90KiBjbWRwID0gKChkYzM5MF9jbWRfc2NwX3QqKSgmcGNtZC0+U0NwKSkpOwotCi0JaWYgKHBTUkItPlNSQkZsYWcpIHsKLQkJcGNpX3VubWFwX3NnKHBkZXYsICZwU1JCLT5TZWdtZW50eCwgMSwgRE1BX0ZST01fREVWSUNFKTsKLQkJREVCVUcxKHByaW50aygiJXMoKTogVW5tYXBwZWQgc2Vuc2UgYnVmZmVyIGF0ICV4XG4iLCBfX2Z1bmNfXywgY21kcC0+c2F2ZWRfZG1hX2hhbmRsZSkpOwotCX0gZWxzZSB7Ci0JCXNjc2lfZG1hX3VubWFwKHBjbWQpOwotCQlERUJVRzEocHJpbnRrKCIlcygpOiBVbm1hcHBlZCBTRyBhdCAlcCB3aXRoICVkIGVsZW1lbnRzXG4iLAotCQkJICAgICAgX19mdW5jX18sIHNjc2lfc2dsaXN0KHBjbWQpLCBzY3NpX3NnX2NvdW50KHBjbWQpKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fCi1kYzM5MF9mcmVldGFnIChzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotCWlmIChwU1JCLT5UYWdOdW1iZXIgIT0gU0NTSV9OT19UQUcpIHsKLQkJcERDQi0+VGFnTWFzayAmPSB+KDEgPDwgcFNSQi0+VGFnTnVtYmVyKTsgICAvKiBmcmVlIHRhZyBtYXNrICovCi0JCXBTUkItPlRhZ051bWJlciA9IFNDU0lfTk9fVEFHOwotCX0KLX0KLQotCi1zdGF0aWMgaW50Ci1kYzM5MF9TdGFydFNDU0koIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIgKQotewotICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQgPSBwU1JCLT5wY21kOwotICAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHNjbWQtPmRldmljZTsKLSAgICB1OCBjbWQsIGRpc2NfYWxsb3dlZCwgdHJ5X3N5bmNfbmVnbzsKLSAgICBjaGFyIHRhZ1syXTsKLQotICAgIHBTUkItPlNjc2lQaGFzZSA9IFNDU0lfTk9QMDsKLQotICAgIGlmIChwQUNCLT5Db25uZWN0ZWQpCi0gICAgewotCS8vIFNob3VsZCBub3QgaGFwcGVuIG5vcm1hbGx5Ci0JcHJpbnRrIChLRVJOX1dBUk5JTkcgIkRDMzkwOiBDYW4ndCBzZWxlY3Qgd2hlbiBjb25uZWN0ZWQhICglMDh4LCUwMngpXG4iLAotCQlwU1JCLT5TUkJTdGF0ZSwgcFNSQi0+U1JCRmxhZyk7Ci0JcFNSQi0+U1JCU3RhdGUgPSBTUkJfUkVBRFk7Ci0JcEFDQi0+U2VsQ29ubisrOwotCXJldHVybiAxOwotICAgIH0KLSAgICBpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIHBBQ0ItPmxhc3RfcmVzZXQpKQotICAgIHsKLQlERUJVRzAocHJpbnRrICgiREMzOTA6IFdlIHdlcmUganVzdCByZXNldCBhbmQgZG9uJ3QgYWNjZXB0IGNvbW1hbmRzIHlldCFcbiIpKTsKLQlyZXR1cm4gMTsKLSAgICB9Ci0gICAgLyogS0c6IE1vdmVkIHBjaSBtYXBwaW5nIGhlcmUgKi8KLSAgICBkYzM5MF9wY2lfbWFwKHBTUkIpOwotICAgIC8qIFRPRE86IGVycm9yIGhhbmRsaW5nICovCi0gICAgREMzOTBfd3JpdGU4IChTY3NpX0Rlc3RfSUQsIHBEQ0ItPlRhcmdldElEKTsKLSAgICBEQzM5MF93cml0ZTggKFN5bmNfUGVyaW9kLCBwRENCLT5TeW5jUGVyaW9kKTsKLSAgICBEQzM5MF93cml0ZTggKFN5bmNfT2Zmc2V0LCBwRENCLT5TeW5jT2Zmc2V0KTsKLSAgICBEQzM5MF93cml0ZTggKEN0cmxSZWcxLCBwRENCLT5DdHJsUjEpOwotICAgIERDMzkwX3dyaXRlOCAoQ3RybFJlZzMsIHBEQ0ItPkN0cmxSMyk7Ci0gICAgREMzOTBfd3JpdGU4IChDdHJsUmVnNCwgcERDQi0+Q3RybFI0KTsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsJCS8qIEZsdXNoIEZJRk8gKi8KLSAgICBERUJVRzEocHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBTdGFydCBTQ1NJIGNvbW1hbmQ6ICUwMnggKFN5bmM6JTAyeClcbiIsXAotICAgICAgICAgICAgc2NtZC0+Y21uZFswXSwgcERDQi0+U3luY01vZGUpKTsKLQotICAgIC8qIERvbid0IGRpc2Nvbm5lY3Qgb24gQVVUT19SRVFTRU5TRSwgY2F1c2UgaXQgbWlnaHQgYmUgYW4KLSAgICAgKiBDb250aW5nZW50IEFsbGVnaWFuY2UgQ29uZGl0aW9uICg2LjYpLCB3aGVyZSBubyB0YWdzIHNob3VsZCBiZSB1c2VkLgotICAgICAqIEFsbCBvdGhlciBoYXZlIHRvIGJlIGFsbG93ZWQgdG8gZGlzY29ubmVjdCB0byBwcmV2ZW50IEluY29ycmVjdCAKLSAgICAgKiBJbml0aWF0b3IgQ29ubmVjdGlvbiAoNi44LjIvNi41LjIpICovCi0gICAgLyogQ2hhbmdlZCBLRywgOTkvMDYvMDYgKi8KLSAgICBpZiAoISAocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpKQotCWRpc2NfYWxsb3dlZCA9IHBEQ0ItPkRldk1vZGUgJiBFTl9ESVNDT05ORUNUXzsKLSAgICBlbHNlCi0JZGlzY19hbGxvd2VkID0gMDsKLQotICAgIGlmICgocERDQi0+U3luY01vZGUgJiBTWU5DX0VOQUJMRSkgJiYgcERDQi0+VGFyZ2V0TFVOID09IDAgJiYgc2Rldi0+c2R0ciAmJgotCSgoKHNjbWQtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSB8fCAocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpKSAmJgotCSAgIShwRENCLT5TeW5jTW9kZSAmIFNZTkNfTkVHT19ET05FKSkgfHwgc2NtZC0+Y21uZFswXSA9PSBJTlFVSVJZKSkKLSAgICAgIHRyeV9zeW5jX25lZ28gPSAxOwotICAgIGVsc2UKLSAgICAgIHRyeV9zeW5jX25lZ28gPSAwOwotCi0gICAgcFNSQi0+TXNnQ250ID0gMDsKLSAgICBjbWQgPSBTRUxfV19BVE47Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgSURFTlRJRlkoZGlzY19hbGxvd2VkLCBwRENCLT5UYXJnZXRMVU4pKTsKLSAgICAvKiBDaGFuZ2UgOTkvMDUvMzE6IERvbid0IHVzZSB0YWdzIHdoZW4gbm90IGRpc2Nvbm5lY3RpbmcgKEJVU1kpICovCi0gICAgaWYgKChwRENCLT5TeW5jTW9kZSAmIEVOX1RBR19RVUVVRUlORykgJiYgZGlzY19hbGxvd2VkICYmIHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY21kLCB0YWcpKSB7Ci0JREMzOTBfd3JpdGU4KFNjc2lGaWZvLCB0YWdbMF0pOwotCXBEQ0ItPlRhZ01hc2sgfD0gMSA8PCB0YWdbMV07Ci0JcFNSQi0+VGFnTnVtYmVyID0gdGFnWzFdOwotCURDMzkwX3dyaXRlOChTY3NpRmlmbywgdGFnWzFdKTsKLQlERUJVRzEocHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IFNlbGVjdCB3L0Rpc0NuIGZvciBTUkIgJXAsIGJsb2NrIHRhZyAlMDJ4XG4iLCBwU1JCLCB0YWdbMV0pKTsKLQljbWQgPSBTRUxfV19BVE4zOwotICAgIH0gZWxzZSB7Ci0JLyogTm8gVGFnUSAqLwotLy9ub190YWc6Ci0JREVCVUcxKHByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBTZWxlY3QgdyVzL0Rpc0NuIGZvciBTUkIgJXAsIE5vIFRhZ1FcbiIsIGRpc2NfYWxsb3dlZCA/ICIiIDogIm8iLCBwU1JCKSk7Ci0gICAgfQotCi0gICAgcFNSQi0+U1JCU3RhdGUgPSBTUkJfU1RBUlRfOwotCi0gICAgaWYgKHRyeV9zeW5jX25lZ28pCi0gICAgICB7IAotCXU4IFN5bmNfT2ZmID0gcERDQi0+U3luY09mZnNldDsKLSAgICAgICAgREVCVUcwKHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogTkVXIFN5bmMgTmVnbyBjb2RlIHRyaWdnZXJlZCAoJWkgJWkpXG4iLCBwRENCLT5UYXJnZXRJRCwgcERDQi0+VGFyZ2V0TFVOKSk7Ci0JcFNSQi0+TXNnT3V0QnVmWzBdID0gRVhURU5ERURfTUVTU0FHRTsKLQlwU1JCLT5Nc2dPdXRCdWZbMV0gPSAzOwotCXBTUkItPk1zZ091dEJ1ZlsyXSA9IEVYVEVOREVEX1NEVFI7Ci0JcFNSQi0+TXNnT3V0QnVmWzNdID0gcERDQi0+TmVnb1BlcmlvZDsKLQlpZiAoIShTeW5jX09mZiAmIDB4MGYpKSBTeW5jX09mZiA9IFNZTkNfTkVHT19PRkZTRVQ7Ci0JcFNSQi0+TXNnT3V0QnVmWzRdID0gU3luY19PZmY7Ci0JcFNSQi0+TXNnQ250ID0gNTsKLQkvL3BTUkItPlNSQlN0YXRlID0gU1JCX01TR09VVF87Ci0JcFNSQi0+U1JCU3RhdGUgfD0gRE9fU1lOQ19ORUdPOwotCWNtZCA9IFNFTF9XX0FUTl9TVE9QOwotICAgICAgfQotCi0gICAgLyogQ29tbWFuZCBpcyB3cml0dGVuIGluIENvbW1hbmRQaGFzZSwgaWYgU0VMX1dfQVROX1NUT1AgLi4uICovCi0gICAgaWYgKGNtZCAhPSBTRUxfV19BVE5fU1RPUCkKLSAgICAgIHsKLQlpZiggcFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UgKQotCSAgewotCSAgICBEQzM5MF93cml0ZTggKFNjc2lGaWZvLCBSRVFVRVNUX1NFTlNFKTsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgcERDQi0+VGFyZ2V0TFVOIDw8IDUpOwotCSAgICBEQzM5MF93cml0ZTggKFNjc2lGaWZvLCAwKTsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgMCk7Ci0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7Ci0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIDApOwotCSAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJEQzM5MDogQXV0b1JlcVNlbnNlICFcbiIpKTsKLQkgIH0KLQllbHNlCS8qIHdyaXRlIGNtbmQgdG8gYnVzICovIAotCSAgewotCSAgICB1OCAqcHRyOyB1OCBpOwotCSAgICBwdHIgPSAodTggKilzY21kLT5jbW5kOwotCSAgICBmb3IgKGkgPSAwOyBpIDwgc2NtZC0+Y21kX2xlbjsgaSsrKQotCSAgICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sICoocHRyKyspKTsKLQkgIH0KLSAgICAgIH0KLSAgICBERUJVRzAoaWYgKHBBQ0ItPnBBY3RpdmVEQ0IpCVwKLQkgICBwcmludGsgKEtFUk5fV0FSTklORyAiREMzOTA6IEFjdGl2ZURDQiAhPSAwXG4iKSk7Ci0gICAgREVCVUcwKGlmIChwRENCLT5wQWN0aXZlU1JCKQlcCi0JICAgcHJpbnRrIChLRVJOX1dBUk5JTkcgIkRDMzkwOiBBY3RpdmVTUkIgIT0gMFxuIikpOwotICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotICAgIGlmIChEQzM5MF9yZWFkOCAoU2NzaV9TdGF0dXMpICYgSU5URVJSVVBUKQotICAgIHsKLQlkYzM5MF9mcmVldGFnIChwRENCLCBwU1JCKTsKLQlERUJVRzAocHJpbnRrICgiREMzOTA6IEludGVycnVwdCBkdXJpbmcgU3RhcnQgU0NTSSAodGFyZ2V0ICUwMmktJTAyaSlcbiIsCi0JCSAgICAgICBzY21kLT5kZXZpY2UtPmlkLCAodTgpc2NtZC0+ZGV2aWNlLT5sdW4pKTsKLQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9SRUFEWTsKLQkvL0RDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotCXBBQ0ItPlNlbExvc3QrKzsKLQlyZXR1cm4gMTsKLSAgICB9Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBjbWQpOwotICAgIHBBQ0ItPnBBY3RpdmVEQ0IgPSBwRENCOwotICAgIHBEQ0ItPnBBY3RpdmVTUkIgPSBwU1JCOwotICAgIHBBQ0ItPkNvbm5lY3RlZCA9IDE7Ci0gICAgcFNSQi0+U2NzaVBoYXNlID0gU0NTSV9OT1AxOwotICAgIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18KLWRjMzkwX0ludmFsaWRDbWQoc3RydWN0IGRjMzkwX2FjYiogcEFDQikKLXsKLQlpZiAocEFDQi0+cEFjdGl2ZURDQi0+cEFjdGl2ZVNSQi0+U1JCU3RhdGUgJiAoU1JCX1NUQVJUXyB8IFNSQl9NU0dPVVQpKQotCQlEQzM5MF93cml0ZTgoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotfQotCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBfX2lubGluZV9fCi1EQzM5MF9JbnRlcnJ1cHQodm9pZCAqZGV2X2lkKQotewotICAgIHN0cnVjdCBkYzM5MF9hY2IgKnBBQ0IgPSBkZXZfaWQ7Ci0gICAgc3RydWN0IGRjMzkwX2RjYiAqcERDQjsKLSAgICBzdHJ1Y3QgZGMzOTBfc3JiICpwU1JCOwotICAgIHU4ICBzc3RhdHVzPTA7Ci0gICAgdTggIHBoYXNlOwotICAgIHZvaWQgICAoKnN0YXRlVikoIHN0cnVjdCBkYzM5MF9hY2IqLCBzdHJ1Y3QgZGMzOTBfc3JiKiwgdTggKik7Ci0gICAgdTggIGlzdGF0ZSwgaXN0YXR1czsKLQotICAgIHNzdGF0dXMgPSBEQzM5MF9yZWFkOCAoU2NzaV9TdGF0dXMpOwotICAgIGlmKCAhKHNzdGF0dXMgJiBJTlRFUlJVUFQpICkKLQlyZXR1cm4gSVJRX05PTkU7Ci0KLSAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJzc3RhdHVzPSUwMngsIiwgc3N0YXR1cykpOwotCi0gICAgLy9EQzM5MF93cml0ZTMyIChETUFfU2NzaUJ1c0N0cmwsIFdSVF9FUkFTRV9ETUFfU1RBVCB8IEVOX0lOVF9PTl9QQ0lfQUJPUlQpOwotICAgIC8vZHN0YXR1cyA9IERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKTsKLSAgICAvL0RDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgRU5fSU5UX09OX1BDSV9BQk9SVCk7Ci0KLSAgICBzcGluX2xvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLQotICAgIGlzdGF0ZSA9IERDMzkwX3JlYWQ4IChJbnRlcm5fU3RhdGUpOwotICAgIGlzdGF0dXMgPSBEQzM5MF9yZWFkOCAoSU5UX1N0YXR1cyk7IC8qIFRoaXMgY2xlYXJzIFNjc2lfU3RhdHVzLCBJbnRlcm5fU3RhdGUgYW5kIElOVF9TdGF0dXMgISAqLwotCi0gICAgREVCVUcxKHByaW50ayAoS0VSTl9JTkZPICJJc3RhdHVzKFJlcyxJbnYsRGlzLFNlcnYsU3VjYyxSZVMsU2VsQSxTZWwpPSUwMngsIixpc3RhdHVzKSk7Ci0gICAgZGMzOTBfbGFzdHN0YXR1cyAmPSB+MHgwMGZmZmZmZjsKLSAgICBkYzM5MF9sYXN0c3RhdHVzIHw9IC8qIGRzdGF0dXM8PDI0IHwgKi8gc3N0YXR1czw8MTYgfCBpc3RhdGU8PDggfCBpc3RhdHVzOwotCi0gICAgaWYgKHNzdGF0dXMgJiBJTExFR0FMX09QX0VSUikKLSAgICB7Ci0JcHJpbnRrICgiREMzOTA6IElsbGVnYWwgT3BlcmF0aW9uIGRldGVjdGVkICglMDh4KSFcbiIsIGRjMzkwX2xhc3RzdGF0dXMpOwotCWRjMzkwX2R1bXBpbmZvIChwQUNCLCBwQUNCLT5wQWN0aXZlRENCLCBwQUNCLT5wQWN0aXZlRENCLT5wQWN0aXZlU1JCKTsKLSAgICB9Ci0JCi0gICAgZWxzZSBpZiAoaXN0YXR1cyAmICBJTlZBTElEX0NNRCkKLSAgICB7Ci0JcHJpbnRrICgiREMzOTA6IEludmFsaWQgQ29tbWFuZCBkZXRlY3RlZCAoJTA4eCkhXG4iLCBkYzM5MF9sYXN0c3RhdHVzKTsKLQlkYzM5MF9JbnZhbGlkQ21kKCBwQUNCICk7Ci0JZ290byB1bmxvY2s7Ci0gICAgfQotCi0gICAgaWYgKGlzdGF0dXMgJiAgU0NTSV9SRVNFVCkKLSAgICB7Ci0JZGMzOTBfU2NzaVJzdERldGVjdCggcEFDQiApOwotCWdvdG8gdW5sb2NrOwotICAgIH0KLQotICAgIGlmIChpc3RhdHVzICYgIERJU0NPTk5FQ1RFRCkKLSAgICB7Ci0JZGMzOTBfRGlzY29ubmVjdCggcEFDQiApOwotCWdvdG8gdW5sb2NrOwotICAgIH0KLQotICAgIGlmIChpc3RhdHVzICYgIFJFU0VMRUNURUQpCi0gICAgewotCWRjMzkwX1Jlc2VsZWN0KCBwQUNCICk7Ci0JZ290byB1bmxvY2s7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoaXN0YXR1cyAmIChTRUxFQ1RFRCB8IFNFTF9BVFRFTlRJT04pKQotICAgIHsKLQlwcmludGsgKEtFUk5fRVJSICJEQzM5MDogVGFyZ2V0IG1vZGUgbm90IHN1cHBvcnRlZCFcbiIpOwotCWdvdG8gdW5sb2NrOwotICAgIH0KLQotICAgIGlmIChpc3RhdHVzICYgKFNVQ0NFU1NGVUxfT1B8U0VSVklDRV9SRVFVRVNUKSApCi0gICAgewotCXBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotCWlmICghcERDQikKLQl7Ci0JCXByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBTdWMuIG9wLyBTZXJ2LiByZXE6IHBBY3RpdmVEQ0IgPSAwIVxuIik7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQlwU1JCID0gcERDQi0+cEFjdGl2ZVNSQjsKLQlpZiggcERDQi0+RENCRmxhZyAmIEFCT1JUX0RFVl8gKQotCSAgZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0IChwQUNCLCBwU1JCKTsKLQotCXBoYXNlID0gcFNSQi0+U2NzaVBoYXNlOwotCURFQlVHMShwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFslaV0lcygwKSAoJTAyeClcbiIsIHBoYXNlLCBkYzM5MF9wMF9zdHJbcGhhc2VdLCBzc3RhdHVzKSk7Ci0Jc3RhdGVWID0gKHZvaWQgKikgZGMzOTBfcGhhc2UwW3BoYXNlXTsKLQkoICpzdGF0ZVYgKSggcEFDQiwgcFNSQiwgJnNzdGF0dXMgKTsKLQotCXBTUkItPlNjc2lQaGFzZSA9IHNzdGF0dXMgJiA3OwotCXBoYXNlID0gKHU4KSBzc3RhdHVzICYgNzsKLQlERUJVRzEocHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBbJWldJXMoMSkgKCUwMngpXG4iLCBwaGFzZSwgZGMzOTBfcDFfc3RyW3BoYXNlXSwgc3N0YXR1cykpOwotCXN0YXRlViA9ICh2b2lkICopIGRjMzkwX3BoYXNlMVtwaGFzZV07Ci0JKCAqc3RhdGVWICkoIHBBQ0IsIHBTUkIsICZzc3RhdHVzICk7Ci0gICAgfQotCi0gdW5sb2NrOgotICAgIHNwaW5fdW5sb2NrX2lycShwQUNCLT5wU2NzaUhvc3QtPmhvc3RfbG9jayk7Ci0gICAgcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG9fREMzOTBfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLSAgICBpcnFyZXR1cm5fdCByZXQ7Ci0gICAgREVCVUcxKHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogSXJxICglaSkgY2F1Z2h0OiAiLCBpcnEpKTsKLSAgICAvKiBMb2NraW5nIGlzIGRvbmUgaW4gREMzOTBfSW50ZXJydXB0ICovCi0gICAgcmV0ID0gREMzOTBfSW50ZXJydXB0KGRldl9pZCk7Ci0gICAgREVCVUcxKHByaW50ayAoIi4uIElSUSByZXR1cm5lZFxuIikpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9EYXRhT3V0XzAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotICAgIHU4ICAgc3N0YXR1czsKLSAgICB1MzIgIFJlc2lkQ250OwotICAgIHU4ICAgZHN0YXRlID0gMDsKLQotICAgIHNzdGF0dXMgPSAqcHNzdGF0dXM7Ci0KLSAgICBpZiggIShwU1JCLT5TUkJTdGF0ZSAmIFNSQl9YRkVSUEFEKSApCi0gICAgewotCWlmKCBzc3RhdHVzICYgKFBBUklUWV9FUlIgfCBJTExFR0FMX09QX0VSUikgKQotCSAgICBwU1JCLT5TUkJTdGF0dXMgfD0gUEFSSVRZX0VSUk9SOwotCi0JaWYoIHNzdGF0dXMgJiBDT1VOVF8yX1pFUk8gKQotCXsKLQkgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEhaOwotCi0JICAgIC8qIEZ1bmN0aW9uIGNhbGxlZCBmcm9tIHRoZSBJU1Igd2l0aCB0aGUgaG9zdF9sb2NrIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLQkgICAgaWYgKHBTUkItPlNHVG9CZVhmZXJMZW4pCi0JCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAhKChkc3RhdGUgPSBEQzM5MF9yZWFkOCAoRE1BX1N0YXR1cykpICYgRE1BX1hGRVJfRE9ORSkpIHsKLQkJICAgIHNwaW5fdW5sb2NrX2lycShwQUNCLT5wU2NzaUhvc3QtPmhvc3RfbG9jayk7Ci0JCSAgICB1ZGVsYXkoNTApOwotCQkgICAgc3Bpbl9sb2NrX2lycShwQUNCLT5wU2NzaUhvc3QtPmhvc3RfbG9jayk7Ci0JCX0KLQkgICAgaWYgKCF0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKLQkJcHJpbnRrIChLRVJOX0NSSVQgIkRDMzkwOiBEZWFkbG9jayBpbiBEYXRhT3V0XzA6IERNQSBhYm9ydGVkIHVuZmluaXNoZWQ6ICUwNnggYnl0ZXMgcmVtYWluISFcbiIsCi0JCQlEQzM5MF9yZWFkMzIgKERNQV9Xa19CeXRlQ250cikpOwotCSAgICBkYzM5MF9sYXN0c3RhdHVzICY9IH4weGZmMDAwMDAwOwotCSAgICBkYzM5MF9sYXN0c3RhdHVzIHw9IGRzdGF0ZSA8PCAyNDsKLQkgICAgcFNSQi0+VG90YWxYZmVycmVkTGVuICs9IHBTUkItPlNHVG9CZVhmZXJMZW47Ci0JICAgIHBTUkItPlNHSW5kZXgrKzsKLQkgICAgaWYoIHBTUkItPlNHSW5kZXggPCBwU1JCLT5TR2NvdW50ICkKLQkgICAgewotCQlwU1JCLT5wU2VnbWVudExpc3QrKzsKLQotCQlkYzM5MF9zdGFydF9zZWdtZW50KHBTUkIpOwotCSAgICB9Ci0JICAgIGVsc2UKLQkJcFNSQi0+U0dUb0JlWGZlckxlbiA9IDA7Ci0JfQotCWVsc2UKLQl7Ci0JICAgIFJlc2lkQ250ID0gKCh1MzIpIERDMzkwX3JlYWQ4IChDdXJyZW50X0ZpZm8pICYgMHgxZikgKwotCQkgICAgKCgodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0hpZ2gpIDw8IDE2KSB8Ci0JCSAgICAgKCh1MzIpIERDMzkwX3JlYWQ4IChDdGNSZWdfTWlkKSA8PCA4KSB8Ci0JCSAgICAgKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19Mb3cpKTsKLQotCSAgICBkYzM5MF9hZHZhbmNlX3NlZ21lbnQocFNSQiwgUmVzaWRDbnQpOwotCX0KLSAgICB9Ci0gICAgaWYgKCgqcHNzdGF0dXMgJiA3KSAhPSBTQ1NJX0RBVEFfT1VUKQotICAgIHsKLQkgICAgREMzOTBfd3JpdGU4IChETUFfQ21kLCBXUklURV9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0gICAgfQkgICAgCi19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9EYXRhSW5fMChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgdTggICBzc3RhdHVzLCByZXNpZHVhbCwgYnZhbDsKLSAgICB1MzIgIFJlc2lkQ250LCBpOwotICAgIHVuc2lnbmVkIGxvbmcgICB4ZmVyQ250OwotCi0gICAgc3N0YXR1cyA9ICpwc3N0YXR1czsKLQotICAgIGlmKCAhKHBTUkItPlNSQlN0YXRlICYgU1JCX1hGRVJQQUQpICkKLSAgICB7Ci0JaWYoIHNzdGF0dXMgJiAoUEFSSVRZX0VSUiB8IElMTEVHQUxfT1BfRVJSKSkKLQkgICAgcFNSQi0+U1JCU3RhdHVzIHw9IFBBUklUWV9FUlJPUjsKLQotCWlmKCBzc3RhdHVzICYgQ09VTlRfMl9aRVJPICkKLQl7Ci0JICAgIGludCBkc3RhdGUgPSAwOwotCSAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgSFo7Ci0KLQkgICAgLyogRnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIElTUiB3aXRoIHRoZSBob3N0X2xvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCSAgICBpZiAocFNSQi0+U0dUb0JlWGZlckxlbikKLQkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmICEoKGRzdGF0ZSA9IERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKSkgJiBETUFfWEZFUl9ET05FKSkgewotCQkgICAgc3Bpbl91bmxvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLQkJICAgIHVkZWxheSg1MCk7Ci0JCSAgICBzcGluX2xvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLQkJfQotCSAgICBpZiAoIXRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCXByaW50ayAoS0VSTl9DUklUICJEQzM5MDogRGVhZGxvY2sgaW4gRGF0YUluXzA6IERNQSBhYm9ydGVkIHVuZmluaXNoZWQ6ICUwNnggYnl0ZXMgcmVtYWluISFcbiIsCi0JCQlEQzM5MF9yZWFkMzIgKERNQV9Xa19CeXRlQ250cikpOwotCQlwcmludGsgKEtFUk5fQ1JJVCAiREMzOTA6IERhdGFJbl8wOiBETUEgU3RhdGU6ICVpXG4iLCBkc3RhdGUpOwotCSAgICB9Ci0JICAgIGRjMzkwX2xhc3RzdGF0dXMgJj0gfjB4ZmYwMDAwMDA7Ci0JICAgIGRjMzkwX2xhc3RzdGF0dXMgfD0gZHN0YXRlIDw8IDI0OwotCSAgICBERUJVRzEoUmVzaWRDbnQgPSAoKHVuc2lnbmVkIGxvbmcpIERDMzkwX3JlYWQ4IChDdGNSZWdfSGlnaCkgPDwgMTYpCVwKLQkJKyAoKHVuc2lnbmVkIGxvbmcpIERDMzkwX3JlYWQ4IChDdGNSZWdfTWlkKSA8PCA4KQkJXAotCQkrICgodW5zaWduZWQgbG9uZykgREMzOTBfcmVhZDggKEN0Y1JlZ19Mb3cpKSk7Ci0JICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIkNvdW50XzJfWmVybyAoUmVzaWRDbnQ9JXUsVG9CZVhmZXI9JWx1KSwiLCBSZXNpZENudCwgcFNSQi0+U0dUb0JlWGZlckxlbikpOwotCi0JICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKLQotCSAgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gKz0gcFNSQi0+U0dUb0JlWGZlckxlbjsKLQkgICAgcFNSQi0+U0dJbmRleCsrOwotCSAgICBpZiggcFNSQi0+U0dJbmRleCA8IHBTUkItPlNHY291bnQgKQotCSAgICB7Ci0JCXBTUkItPnBTZWdtZW50TGlzdCsrOwotCi0JCWRjMzkwX3N0YXJ0X3NlZ21lbnQocFNSQik7Ci0JICAgIH0KLQkgICAgZWxzZQotCQlwU1JCLT5TR1RvQmVYZmVyTGVuID0gMDsKLQl9Ci0JZWxzZQkvKiBwaGFzZSBjaGFuZ2VkICovCi0JewotCSAgICByZXNpZHVhbCA9IDA7Ci0JICAgIGJ2YWwgPSBEQzM5MF9yZWFkOCAoQ3VycmVudF9GaWZvKTsKLQkgICAgd2hpbGUoIGJ2YWwgJiAweDFmICkKLQkgICAgewotCQlERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJDaGVjayBmb3IgcmVzaWR1YWxzLCIpKTsKLQkJaWYoIChidmFsICYgMHgxZikgPT0gMSApCi0JCXsKLQkJICAgIGZvcihpPTA7IGkgPCAweDEwMDsgaSsrKQotCQkgICAgewotCQkJYnZhbCA9IERDMzkwX3JlYWQ4IChDdXJyZW50X0ZpZm8pOwotCQkJaWYoICEoYnZhbCAmIDB4MWYpICkKLQkJCSAgICBnb3RvIGRpbl8xOwotCQkJZWxzZSBpZiggaSA9PSAweDBmZiApCi0JCQl7Ci0JCQkgICAgcmVzaWR1YWwgPSAxOyAgIC8qIDsxIHJlc2lkdWFsIGJ5dGUgKi8KLQkJCSAgICBnb3RvIGRpbl8xOwotCQkJfQotCQkgICAgfQotCQl9Ci0JCWVsc2UKLQkJICAgIGJ2YWwgPSBEQzM5MF9yZWFkOCAoQ3VycmVudF9GaWZvKTsKLQkgICAgfQotZGluXzE6Ci0JICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0JMQVNUX0NNRCk7Ci0JICAgIGZvciAoaSA9IDB4YTAwMDsgaTsgaS0tKQotCSAgICB7Ci0JCWJ2YWwgPSBEQzM5MF9yZWFkOCAoRE1BX1N0YXR1cyk7Ci0JCWlmIChidmFsICYgQkxBU1RfQ09NUExFVEUpCi0JCSAgICBicmVhazsKLQkgICAgfQotCSAgICAvKiBJdCBzZWVtcyBhIERNQSBCbGFzdCBhYm9ydCBpc24ndCB0aGF0IGJhZCAuLi4gKi8KLQkgICAgaWYgKCFpKSBwcmludGsgKEtFUk5fRVJSICJEQzM5MDogRE1BIEJsYXN0IGFib3J0ZWQgdW5maW5pc2hlZCFcbiIpOwotCSAgICAvL0RDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKLQkgICAgZGMzOTBfbGFzdHN0YXR1cyAmPSB+MHhmZjAwMDAwMDsKLQkgICAgZGMzOTBfbGFzdHN0YXR1cyB8PSBidmFsIDw8IDI0OwotCi0JICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIkJsYXN0OiBSZWFkICVpIHRpbWVzIERNQV9TdGF0dXMgJTAyeCIsIDB4YTAwMC1pLCBidmFsKSk7Ci0JICAgIFJlc2lkQ250ID0gKCgodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0hpZ2gpIDw8IDE2KSB8Ci0JCQkoKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19NaWQpIDw8IDgpKSB8Ci0JCSAgICAodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0xvdyk7Ci0KLQkgICAgeGZlckNudCA9IGRjMzkwX2FkdmFuY2Vfc2VnbWVudChwU1JCLCBSZXNpZENudCk7Ci0KLQkgICAgaWYgKHJlc2lkdWFsKSB7Ci0JCXNpemVfdCBjb3VudCA9IDE7Ci0JCXNpemVfdCBvZmZzZXQgPSBwU1JCLT5TR0J1c0FkZHIgLSBzZ19kbWFfYWRkcmVzcyhwU1JCLT5wU2VnbWVudExpc3QpOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQl1OCAqcHRyOwotCi0JCWJ2YWwgPSBEQzM5MF9yZWFkOCAoU2NzaUZpZm8pOwkgICAgLyogZ2V0IG9uZSByZXNpZHVhbCBieXRlICovCi0KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlwdHIgPSBzY3NpX2ttYXBfYXRvbWljX3NnKHBTUkItPnBTZWdtZW50TGlzdCwgcFNSQi0+U0djb3VudCwgJm9mZnNldCwgJmNvdW50KTsKLQkJaWYgKGxpa2VseShwdHIpKSB7Ci0JCQkqKHB0ciArIG9mZnNldCkgPSBidmFsOwotCQkJc2NzaV9rdW5tYXBfYXRvbWljX3NnKHB0cik7Ci0JCX0KLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlXQVJOX09OKCFwdHIpOwotCi0JCS8qIDEgbW9yZSBieXRlIHJlYWQgKi8KLQkJeGZlckNudCArPSBkYzM5MF9hZHZhbmNlX3NlZ21lbnQocFNSQiwgcFNSQi0+U0dUb0JlWGZlckxlbiAtIDEpOwotCSAgICB9Ci0JICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIlhmZXJlZDogJWx1LCBUb3RhbDogJWx1LCBSZW1haW5pbmc6ICVsdVxuIiwgeGZlckNudCxcCi0JCQkgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4sIHBTUkItPlNHVG9CZVhmZXJMZW4pKTsKLQl9Ci0gICAgfQotICAgIGlmICgoKnBzc3RhdHVzICYgNykgIT0gU0NTSV9EQVRBX0lOKQotICAgIHsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0JICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9Db21tYW5kXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1N0YXR1c18wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0KLSAgICBwU1JCLT5UYXJnZXRTdGF0dXMgPSBEQzM5MF9yZWFkOCAoU2NzaUZpZm8pOwotICAgIC8vdWRlbGF5ICgxKTsKLSAgICBwU1JCLT5FbmRNZXNzYWdlID0gREMzOTBfcmVhZDggKFNjc2lGaWZvKTsJLyogZ2V0IG1lc3NhZ2UgKi8KLQotICAgICpwc3N0YXR1cyA9IFNDU0lfTk9QMDsKLSAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9DT01QTEVURUQ7Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBNU0dfQUNDRVBURURfQ01EKTsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX01zZ091dF8wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgaWYoIHBTUkItPlNSQlN0YXRlICYgKFNSQl9VTkVYUEVDVF9SRVNFTCtTUkJfQUJPUlRfU0VOVCkgKQotCSpwc3N0YXR1cyA9IFNDU0lfTk9QMDsKLSAgICAvL0RDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fCi1kYzM5MF9yZXByb2cgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IpCi17Ci0gIERDMzkwX3dyaXRlOCAoU3luY19QZXJpb2QsIHBEQ0ItPlN5bmNQZXJpb2QpOwotICBEQzM5MF93cml0ZTggKFN5bmNfT2Zmc2V0LCBwRENCLT5TeW5jT2Zmc2V0KTsKLSAgREMzOTBfd3JpdGU4IChDdHJsUmVnMywgcERDQi0+Q3RybFIzKTsKLSAgREMzOTBfd3JpdGU4IChDdHJsUmVnNCwgcERDQi0+Q3RybFI0KTsKLSAgZGMzOTBfU2V0WGZlclJhdGUgKHBBQ0IsIHBEQ0IpOwotfQotCi0KLSNpZmRlZiBEQzM5MF9ERUJVRzAKLXN0YXRpYyB2b2lkCi1kYzM5MF9wcmludE1zZyAodTggKk1zZ0J1ZiwgdTggbGVuKQotewotICBpbnQgaTsKLSAgcHJpbnRrICgiICUwMngiLCBNc2dCdWZbMF0pOwotICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCi0gICAgcHJpbnRrICgiICUwMngiLCBNc2dCdWZbaV0pOwotICBwcmludGsgKCJcbiIpOwotfQotI2VuZGlmCi0KLSNkZWZpbmUgREMzOTBfRU5BQkxFX01TR09VVCBEQzM5MF93cml0ZTggKFNjc2lDbWQsIFNFVF9BVE5fQ01EKQotCi0vKiByZWplY3RfbXNnICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fCi1kYzM5MF9Nc2dJbl9yZWplY3QgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gIHBTUkItPk1zZ091dEJ1ZlswXSA9IE1FU1NBR0VfUkVKRUNUOwotICBwU1JCLT5Nc2dDbnQgPSAxOwotICBEQzM5MF9FTkFCTEVfTVNHT1VUOwotICBERUJVRzAgKHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogUmVqZWN0IG1lc3NhZ2VcbiIpKTsKLX0KLQotLyogYWJvcnQgY29tbWFuZCAqLwotc3RhdGljIHZvaWQKLWRjMzkwX0VuYWJsZU1zZ091dF9BYm9ydCAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIgKQotewotICAgIHBTUkItPk1zZ091dEJ1ZlswXSA9IEFCT1JUOyAKLSAgICBwU1JCLT5Nc2dDbnQgPSAxOyBEQzM5MF9FTkFCTEVfTVNHT1VUOwotICAgIHBTUkItPnBTUkJEQ0ItPkRDQkZsYWcgJj0gfkFCT1JUX0RFVl87Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGMzOTBfc3JiKgotZGMzOTBfTXNnSW5fUVRhZyAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX2RjYiogcERDQiwgczggdGFnKQotewotICBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCID0gcERDQi0+cEdvaW5nU1JCOwotCi0gIGlmIChwU1JCKQotICAgIHsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gc2NzaV9maW5kX3RhZyhwU1JCLT5wY21kLT5kZXZpY2UsIHRhZyk7Ci0JcFNSQiA9IChzdHJ1Y3QgZGMzOTBfc3JiICopc2NtZC0+aG9zdF9zY3JpYmJsZTsKLQotCWlmIChwRENCLT5EQ0JGbGFnICYgQUJPUlRfREVWXykKLQl7Ci0JICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9BQk9SVF9TRU5UOwotCSAgZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0KCBwQUNCLCBwU1JCICk7Ci0JfQotCi0JaWYgKCEocFNSQi0+U1JCU3RhdGUgJiBTUkJfRElTQ09OTkVDVCkpCi0JCWdvdG8gbWluZ3gwOwotCi0JcERDQi0+cEFjdGl2ZVNSQiA9IHBTUkI7Ci0JcFNSQi0+U1JCU3RhdGUgPSBTUkJfREFUQV9YRkVSOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICBtaW5neDA6Ci0gICAgICBwU1JCID0gcEFDQi0+cFRtcFNSQjsKLSAgICAgIHBTUkItPlNSQlN0YXRlID0gU1JCX1VORVhQRUNUX1JFU0VMOwotICAgICAgcERDQi0+cEFjdGl2ZVNSQiA9IHBTUkI7Ci0gICAgICBwU1JCLT5Nc2dPdXRCdWZbMF0gPSBBQk9SVF9UQUc7Ci0gICAgICBwU1JCLT5Nc2dDbnQgPSAxOyBEQzM5MF9FTkFCTEVfTVNHT1VUOwotICAgIH0KLSAgcmV0dXJuIHBTUkI7Ci19Ci0KLQotLyogc2V0IGFzeW5jIHRyYW5zZmVyIG1vZGUgKi8KLXN0YXRpYyB2b2lkIAotZGMzOTBfTXNnSW5fc2V0X2FzeW5jIChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotICBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCID0gcFNSQi0+cFNSQkRDQjsKLSAgaWYgKCEocFNSQi0+U1JCU3RhdGUgJiBET19TWU5DX05FR08pKSAKLSAgICBwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFRhcmdldCAlaSBpbml0aWF0ZXMgTm9uLVN5bmM/XG4iLCBwRENCLT5UYXJnZXRJRCk7Ci0gIHBTUkItPlNSQlN0YXRlICY9IH5ET19TWU5DX05FR087Ci0gIHBEQ0ItPlN5bmNNb2RlICY9IH4oU1lOQ19FTkFCTEUrU1lOQ19ORUdPX0RPTkUpOwotICBwRENCLT5TeW5jUGVyaW9kID0gMDsKLSAgcERDQi0+U3luY09mZnNldCA9IDA7Ci0gIC8vcERDQi0+TmVnb1BlcmlvZCA9IDUwOyAvKiAyMDBucyA8PT4gNSBNSHogKi8KLSAgcERDQi0+Q3RybFIzID0gRkFTVF9DTEs7CS8qIGZhc3QgY2xvY2sgLyBub3JtYWwgc2NzaSAqLwotICBwRENCLT5DdHJsUjQgJj0gMHgzZjsKLSAgcERDQi0+Q3RybFI0IHw9IHBBQ0ItPmdsaXRjaF9jZmc7CS8qIGdsaXRjaCBlYXRlciAqLwotICBkYzM5MF9yZXByb2cgKHBBQ0IsIHBEQ0IpOwotfQotCi0vKiBzZXQgc3luYyB0cmFuc2ZlciBtb2RlICovCi1zdGF0aWMgdm9pZAotZGMzOTBfTXNnSW5fc2V0X3N5bmMgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gIHU4IGJ2YWw7Ci0gIHUxNiB3dmFsLCB3dmFsMTsKLSAgc3RydWN0IGRjMzkwX2RjYiogcERDQiA9IHBTUkItPnBTUkJEQ0I7Ci0gIHU4IG9sZHN5bmNwZXJpb2QgPSBwRENCLT5TeW5jUGVyaW9kOwotICB1OCBvbGRzeW5jb2Zmc2V0ID0gcERDQi0+U3luY09mZnNldDsKLSAgCi0gIGlmICghKHBTUkItPlNSQlN0YXRlICYgRE9fU1lOQ19ORUdPKSkKLSAgICB7Ci0gICAgICBwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFRhcmdldCAlaSBpbml0aWF0ZXMgU3luYzogJWlucyAlaSAuLi4gYW5zd2VyIC4uLlxuIiwgCi0JICAgICAgcERDQi0+VGFyZ2V0SUQsIHBTUkItPk1zZ0luQnVmWzNdPDwyLCBwU1JCLT5Nc2dJbkJ1Zls0XSk7Ci0KLSAgICAgIC8qIHJlamVjdCAqLwotICAgICAgLy9kYzM5MF9Nc2dJbl9yZWplY3QgKHBBQ0IsIHBTUkIpOwotICAgICAgLy9yZXR1cm4gZGMzOTBfTXNnSW5fc2V0X2FzeW5jIChwQUNCLCBwU1JCKTsKLQotICAgICAgLyogUmVwbHkgd2l0aCBjb3JyZWN0ZWQgU0RUUiBNZXNzYWdlICovCi0gICAgICBpZiAocFNSQi0+TXNnSW5CdWZbNF0gPiAxNSkKLQl7IAotCSAgcHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBMb3dlciBTeW5jIE9mZnNldCB0byAxNVxuIik7Ci0JICBwU1JCLT5Nc2dJbkJ1Zls0XSA9IDE1OwotCX0KLSAgICAgIGlmIChwU1JCLT5Nc2dJbkJ1ZlszXSA8IHBEQ0ItPk5lZ29QZXJpb2QpCi0JewotCSAgcHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBTZXQgc3luYyBuZWdvIHBlcmlvZCB0byAlaW5zXG4iLCBwRENCLT5OZWdvUGVyaW9kIDw8IDIpOwotCSAgcFNSQi0+TXNnSW5CdWZbM10gPSBwRENCLT5OZWdvUGVyaW9kOwotCX0KLSAgICAgIG1lbWNweSAocFNSQi0+TXNnT3V0QnVmLCBwU1JCLT5Nc2dJbkJ1ZiwgNSk7Ci0gICAgICBwU1JCLT5Nc2dDbnQgPSA1OwotICAgICAgREMzOTBfRU5BQkxFX01TR09VVDsKLSAgICB9Ci0KLSAgcFNSQi0+U1JCU3RhdGUgJj0gfkRPX1NZTkNfTkVHTzsKLSAgcERDQi0+U3luY01vZGUgfD0gU1lOQ19FTkFCTEUrU1lOQ19ORUdPX0RPTkU7Ci0gIHBEQ0ItPlN5bmNPZmZzZXQgJj0gMHgwZjA7Ci0gIHBEQ0ItPlN5bmNPZmZzZXQgfD0gcFNSQi0+TXNnSW5CdWZbNF07Ci0gIHBEQ0ItPk5lZ29QZXJpb2QgPSBwU1JCLT5Nc2dJbkJ1ZlszXTsKLQotICB3dmFsID0gKHUxNikgcFNSQi0+TXNnSW5CdWZbM107Ci0gIHd2YWwgPSB3dmFsIDw8IDI7IHd2YWwgLT0gMzsgd3ZhbDEgPSB3dmFsIC8gMjU7CS8qIGNvbXB1dGUgc3BlZWQgKi8KLSAgaWYoICh3dmFsMSAqIDI1KSAhPSB3dmFsKSB3dmFsMSsrOwotICBidmFsID0gRkFTVF9DTEsrRkFTVF9TQ1NJOwkvKiBmYXN0IGNsb2NrIC8gZmFzdCBzY3NpICovCi0KLSAgcERDQi0+Q3RybFI0ICY9IDB4M2Y7CQkvKiBHbGl0Y2ggZWF0ZXI6IDEybnMgbGVzcyB0aGFuIG5vcm1hbCAqLwotICBpZiAocEFDQi0+Z2xpdGNoX2NmZyAhPSBOU19UT19HTElUQ0goMCkpCi0gICAgcERDQi0+Q3RybFI0IHw9IE5TX1RPX0dMSVRDSCgoKEdMSVRDSF9UT19OUyhwQUNCLT5nbGl0Y2hfY2ZnKSkgLSAxKSk7Ci0gIGVsc2UKLSAgICBwRENCLT5DdHJsUjQgfD0gTlNfVE9fR0xJVENIKDApOwotICBpZiAod3ZhbDEgPCA0KSBwRENCLT5DdHJsUjQgfD0gTlNfVE9fR0xJVENIKDApOyAvKiBVbHRyYSAqLwotCi0gIGlmICh3dmFsMSA+PSA4KQotICAgIHsKLSAgICAgIHd2YWwxLS07CS8qIFRpbWluZyBjb21wdXRhdGlvbiBkaWZmZXJzIGJ5IDEgZnJvbSBGQVNUX1NDU0kgKi8KLSAgICAgIGJ2YWwgPSBGQVNUX0NMSzsJCS8qIGZhc3QgY2xvY2sgLyBub3JtYWwgc2NzaSAqLwotICAgICAgcERDQi0+Q3RybFI0IHw9IHBBQ0ItPmdsaXRjaF9jZmc7IAkvKiBnbGl0Y2ggZWF0ZXIgKi8KLSAgICB9Ci0KLSAgcERDQi0+Q3RybFIzID0gYnZhbDsKLSAgcERDQi0+U3luY1BlcmlvZCA9ICh1OCl3dmFsMTsKLSAgCi0gIGlmICgob2xkc3luY3BlcmlvZCAhPSB3dmFsMSB8fCBvbGRzeW5jb2Zmc2V0ICE9IHBEQ0ItPlN5bmNPZmZzZXQpICYmIHBEQ0ItPlRhcmdldExVTiA9PSAwKQotICAgIHsKLSAgICAgIGlmICghIChidmFsICYgRkFTVF9TQ1NJKSkgd3ZhbDErKzsKLSAgICAgIHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogVGFyZ2V0ICVpOiBTeW5jIHRyYW5zZmVyICVpLiUxaSBNSHosIE9mZnNldCAlaVxuIiwgcERDQi0+VGFyZ2V0SUQsIAotCSAgICAgIDQwL3d2YWwxLCAoKDQwJXd2YWwxKSoxMCt3dmFsMS8yKS93dmFsMSwgcERDQi0+U3luY09mZnNldCAmIDB4MGYpOwotICAgIH0KLSAgCi0gIGRjMzkwX3JlcHJvZyAocEFDQiwgcERDQik7Ci19Ci0KLQotLyogaGFuZGxlIFJFU1RPUkVfUFRSICovCi0vKiBUaGlzIGRvZXNuJ3QgbG9vayB2ZXJ5IGhlYWx0aHkuLi4gdG8tYmUtZml4ZWQgKi8KLXN0YXRpYyB2b2lkIAotZGMzOTBfcmVzdG9yZV9wdHIgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqcGNtZCA9IHBTUkItPnBjbWQ7Ci0gICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpwc2dsOwotICAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7Ci0gICAgcFNSQi0+U0dJbmRleCA9IDA7Ci0gICAgaWYgKHNjc2lfc2dfY291bnQocGNtZCkpIHsKLQlzaXplX3Qgc2F2ZWQ7Ci0JcFNSQi0+cFNlZ21lbnRMaXN0ID0gc2NzaV9zZ2xpc3QocGNtZCk7Ci0JcHNnbCA9IHBTUkItPnBTZWdtZW50TGlzdDsKLQkvL2RjMzkwX3BjaV9zeW5jKHBTUkIpOwotCi0Jd2hpbGUgKHBTUkItPlRvdGFsWGZlcnJlZExlbiArICh1bnNpZ25lZCBsb25nKSBzZ19kbWFfbGVuKHBzZ2wpIDwgcFNSQi0+U2F2ZWRfUHRyKQotCXsKLQkgICAgcFNSQi0+VG90YWxYZmVycmVkTGVuICs9ICh1bnNpZ25lZCBsb25nKSBzZ19kbWFfbGVuKHBzZ2wpOwotCSAgICBwU1JCLT5TR0luZGV4Kys7Ci0JICAgIGlmKCBwU1JCLT5TR0luZGV4IDwgcFNSQi0+U0djb3VudCApCi0JICAgIHsKLQkJcFNSQi0+cFNlZ21lbnRMaXN0Kys7Ci0KLQkJZGMzOTBfc3RhcnRfc2VnbWVudChwU1JCKTsKLQkgICAgfQotCSAgICBlbHNlCi0JCXBTUkItPlNHVG9CZVhmZXJMZW4gPSAwOwotCX0KLQotCXNhdmVkID0gcFNSQi0+U2F2ZWRfUHRyIC0gcFNSQi0+VG90YWxYZmVycmVkTGVuOwotCXBTUkItPlNHVG9CZVhmZXJMZW4gLT0gc2F2ZWQ7Ci0JcFNSQi0+U0dCdXNBZGRyICs9IHNhdmVkOwotCXByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogUG9pbnRlciByZXN0b3JlZC4gU2VnbWVudCAlaSwgVG90YWwgJWxpLCBCdXMgJTA4bHhcbiIsCi0JCXBTUkItPlNHSW5kZXgsIHBTUkItPlNhdmVkX1B0ciwgcFNSQi0+U0dCdXNBZGRyKTsKLQotICAgIH0gZWxzZSB7Ci0JIHBTUkItPlNHY291bnQgPSAwOwotCSBwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFJFU1RPUkVfUFRSIG1lc3NhZ2UgZm9yIFRyYW5zZmVyIHdpdGhvdXQgU2NhdHRlci1HYXRoZXIgPz9cbiIpOwotICAgIH0KLQotICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gPSBwU1JCLT5TYXZlZF9QdHI7Ci19Ci0KLQotLyogQWNjb3JkaW5nIHRvIHRoZSBkb2NzLCB0aGUgQU01M0M5NzQgcmVhZHMgdGhlIG1lc3NhZ2UgYW5kIAotICogZ2VuZXJhdGVzIGEgU3VjY2Vzc2Z1bCBPcGVyYXRpb24gSVJRIGJlZm9yZSBhc3NlcnRpbmcgQUNLIGZvcgotICogdGhlIGxhc3QgYnl0ZSAoaG93IGRvZXMgaXQga25vdyB3aGV0aGVyIGl0J3MgdGhlIGxhc3QgPykgKi8KLS8qIFRoZSBvbGQgY29kZSBoYW5kbGVkIGl0IGluIGFub3RoZXIgd2F5LCBpbmRpY2F0aW5nLCB0aGF0IG9uCi0gKiBldmVyeSBtZXNzYWdlIGJ5dGUgYW4gSVJRIGlzIGdlbmVyYXRlZCBhbmQgZXZlcnkgYnl0ZSBoYXMgdG8KLSAqIGJlIG1hbnVhbGx5IEFDS2VkLiBIbW1tID8gIChLRywgOTgvMTEvMjgpICovCi0vKiBUaGUgb2xkIGltcGxlbWVudGF0aW9uIHdhcyBjb3JyZWN0LiBTaWdoISAqLwotCi0vKiBDaGVjayBpZiB0aGUgbWVzc2FnZSBpcyBjb21wbGV0ZSAqLwotc3RhdGljIHU4IF9faW5saW5lX18KLWRjMzkwX01zZ0luX2NvbXBsZXRlICh1OCAqbXNnYnVmLCB1MzIgbGVuKQoteyAKLSAgaWYgKCptc2didWYgPT0gRVhURU5ERURfTUVTU0FHRSkKLSAgewotCWlmIChsZW4gPCAyKSByZXR1cm4gMDsKLQlpZiAobGVuIDwgbXNnYnVmWzFdICsgMikgcmV0dXJuIDA7Ci0gIH0KLSAgZWxzZSBpZiAoKm1zZ2J1ZiA+PSAweDIwICYmICptc2didWYgPD0gMHgyZikgLy8gdHdvIGJ5dGUgbWVzc2FnZXMKLQlpZiAobGVuIDwgMikgcmV0dXJuIDA7Ci0gIHJldHVybiAxOwotfQotCi0KLQotLyogcmVhZCBhbmQgZXZhbCByZWNlaXZlZCBtZXNzYWdlcyAqLwotc3RhdGljIHZvaWQKLWRjMzkwX01zZ0luXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiKiAgIHBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotCi0gICAgLyogUmVhZCB0aGUgbXNnICovCi0KLSAgICBwU1JCLT5Nc2dJbkJ1ZltwQUNCLT5Nc2dMZW4rK10gPSBEQzM5MF9yZWFkOCAoU2NzaUZpZm8pOwotICAgIC8vcFNSQi0+U1JCU3RhdGUgPSAwOwotCi0gICAgLyogTXNnIGNvbXBsZXRlID8gKi8KLSAgICBpZiAoZGMzOTBfTXNnSW5fY29tcGxldGUgKHBTUkItPk1zZ0luQnVmLCBwQUNCLT5Nc2dMZW4pKQotICAgICAgewotCURFQlVHMCAocHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBNc2dJbjoiKTsgZGMzOTBfcHJpbnRNc2cgKHBTUkItPk1zZ0luQnVmLCBwQUNCLT5Nc2dMZW4pKTsKLQkvKiBOb3cgZXZhbCB0aGUgbXNnICovCi0Jc3dpdGNoIChwU1JCLT5Nc2dJbkJ1ZlswXSkgCi0JICB7Ci0JICBjYXNlIERJU0NPTk5FQ1Q6IAotCSAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9ESVNDT05ORUNUOyBicmVhazsKLQkgICAgCi0JICBjYXNlIFNJTVBMRV9RVUVVRV9UQUc6Ci0JICBjYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCSAgY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkgICAgcFNSQiA9IGRjMzkwX01zZ0luX1FUYWcgKHBBQ0IsIHBEQ0IsIHBTUkItPk1zZ0luQnVmWzFdKTsKLQkgICAgYnJlYWs7Ci0JICAgIAotCSAgY2FzZSBNRVNTQUdFX1JFSkVDVDogCi0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgUkVTRVRfQVROX0NNRCk7Ci0JICAgIHBEQ0ItPk5lZ29QZXJpb2QgPSA1MDsgLyogMjAwbnMgPD0+IDUgTUh6ICovCi0JICAgIGlmKCBwU1JCLT5TUkJTdGF0ZSAmIERPX1NZTkNfTkVHTykKLQkgICAgICBkYzM5MF9Nc2dJbl9zZXRfYXN5bmMgKHBBQ0IsIHBTUkIpOwotCSAgICBicmVhazsKLQkgICAgCi0JICBjYXNlIEVYVEVOREVEX01FU1NBR0U6Ci0JICAgIC8qIHJlamVjdCBldmVyeSBleHRlbmRlZCBtc2cgYnV0IFNEVFIgKi8KLQkgICAgaWYgKHBTUkItPk1zZ0luQnVmWzFdICE9IDMgfHwgcFNSQi0+TXNnSW5CdWZbMl0gIT0gRVhURU5ERURfU0RUUikKLQkgICAgICBkYzM5MF9Nc2dJbl9yZWplY3QgKHBBQ0IsIHBTUkIpOwotCSAgICBlbHNlCi0JICAgICAgewotCQlpZiAocFNSQi0+TXNnSW5CdWZbM10gPT0gMCB8fCBwU1JCLT5Nc2dJbkJ1Zls0XSA9PSAwKQotCQkgIGRjMzkwX01zZ0luX3NldF9hc3luYyAocEFDQiwgcFNSQik7Ci0JCWVsc2UKLQkJICBkYzM5MF9Nc2dJbl9zZXRfc3luYyAocEFDQiwgcFNSQik7Ci0JICAgICAgfQotCSAgICAKLQkgICAgLy8gbm90aGluZyBoYXMgdG8gYmUgZG9uZQotCSAgY2FzZSBDT01NQU5EX0NPTVBMRVRFOiBicmVhazsKLQkgICAgCi0JICAgIC8vIFNBVkUgUE9JTlRFUiBtYXkgYmUgaWdub3JlZCBhcyB3ZSBoYXZlIHRoZSBzdHJ1Y3QgZGMzOTBfc3JiKiBhc3NvY2lhdGVkIHdpdGggdGhlCi0JICAgIC8vIHNjc2kgY29tbWFuZC4gVGhhbmtzLCBHZXJhcmQsIGZvciBwb2ludGluZyBpdCBvdXQuCi0JICBjYXNlIFNBVkVfUE9JTlRFUlM6IAotCSAgICBwU1JCLT5TYXZlZF9QdHIgPSBwU1JCLT5Ub3RhbFhmZXJyZWRMZW47Ci0JICAgIGJyZWFrOwotCSAgICAvLyBUaGUgZGV2aWNlIG1pZ2h0IHdhbnQgdG8gcmVzdGFydCB0cmFuc2ZlciB3aXRoIGEgUkVTVE9SRQotCSAgY2FzZSBSRVNUT1JFX1BPSU5URVJTOgotCSAgICBERUJVRzAocHJpbnRrICgiREMzOTA6IFJFU1RPUkUgUE9JTlRFUiBtZXNzYWdlIHJlY2VpdmVkIC4uLiB0cnkgdG8gaGFuZGxlXG4iKSk7Ci0JICAgIGRjMzkwX3Jlc3RvcmVfcHRyIChwQUNCLCBwU1JCKTsKLQkgICAgYnJlYWs7Ci0KLQkgICAgLy8gcmVqZWN0IHVua25vd24gbWVzc2FnZXMKLQkgIGRlZmF1bHQ6IGRjMzkwX01zZ0luX3JlamVjdCAocEFDQiwgcFNSQik7Ci0JICB9Ci0JCi0JLyogQ2xlYXIgY291bnRlciBhbmQgTXNnSW4gc3RhdGUgKi8KLQlwU1JCLT5TUkJTdGF0ZSAmPSB+U1JCX01TR0lOOwotCXBBQ0ItPk1zZ0xlbiA9IDA7Ci0gICAgICB9Ci0KLSAgICAqcHNzdGF0dXMgPSBTQ1NJX05PUDA7Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBNU0dfQUNDRVBURURfQ01EKTsKLSAgICAvL0RDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZGMzOTBfRGF0YUlPX0NvbW0oIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4IGlvRGlyKQotewotICAgIHVuc2lnbmVkIGxvbmcgIGx2YWw7Ci0gICAgc3RydWN0IGRjMzkwX2RjYiogICBwRENCID0gcEFDQi0+cEFjdGl2ZURDQjsKLQotICAgIGlmIChwU1JCID09IHBBQ0ItPnBUbXBTUkIpCi0gICAgewotCWlmIChwRENCKQotCQlwcmludGsoS0VSTl9FUlIgIkRDMzkwOiBwU1JCID09IHBUbXBTUkIhIChUYWdRIEVycm9yPykgKCUwMmktJWkpXG4iLCBwRENCLT5UYXJnZXRJRCwgcERDQi0+VGFyZ2V0TFVOKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0VSUiAiREMzOTA6IHBTUkIgPT0gcFRtcFNSQiEgKFRhZ1EgRXJyb3I/KSAoRENCIDAhKVxuIik7Ci0KLQkvKiBUcnkgdG8gcmVjb3ZlciAtIHNvbWUgYnJva2VuIGRpc2tzIHJlYWN0IGJhZGx5IHRvIHRhZ2dlZCBJTlFVSVJZICovCi0JaWYgKHBEQ0IgJiYgcEFDQi0+c2Nhbl9kZXZpY2VzICYmIHBEQ0ItPkdvaW5nU1JCQ250ID09IDEpIHsKLQkJcFNSQiA9IHBEQ0ItPnBHb2luZ1NSQjsKLQkJcERDQi0+cEFjdGl2ZVNSQiA9IHBTUkI7Ci0JfSBlbHNlIHsKLQkJcFNSQi0+cFNSQkRDQiA9IHBEQ0I7Ci0JCWRjMzkwX0VuYWJsZU1zZ091dF9BYm9ydChwQUNCLCBwU1JCKTsKLQkJaWYgKHBEQ0IpCi0JCQlwRENCLT5EQ0JGbGFnIHw9IEFCT1JUX0RFVjsKLQkJcmV0dXJuOwotCX0KLSAgICB9Ci0KLSAgICBpZiggcFNSQi0+U0dJbmRleCA8IHBTUkItPlNHY291bnQgKQotICAgIHsKLQlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCB8IGlvRGlyKTsKLQlpZiggIXBTUkItPlNHVG9CZVhmZXJMZW4gKQotCXsKLQkgICAgZGMzOTBfc3RhcnRfc2VnbWVudChwU1JCKTsKLQotCSAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICIgREMzOTA6IE5leHQgU0cgc2VnbWVudC4iKSk7Ci0JfQotCWx2YWwgPSBwU1JCLT5TR1RvQmVYZmVyTGVuOwotCURFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIiBEQzM5MDogU3RhcnQgdHJhbnNmZXI6ICVsaSBieXRlcyAoYWRkcmVzcyAlMDhseClcbiIsIGx2YWwsIHBTUkItPlNHQnVzQWRkcikpOwotCURDMzkwX3dyaXRlOCAoQ3RjUmVnX0xvdywgKHU4KSBsdmFsKTsKLQlsdmFsID4+PSA4OwotCURDMzkwX3dyaXRlOCAoQ3RjUmVnX01pZCwgKHU4KSBsdmFsKTsKLQlsdmFsID4+PSA4OwotCURDMzkwX3dyaXRlOCAoQ3RjUmVnX0hpZ2gsICh1OCkgbHZhbCk7Ci0KLQlEQzM5MF93cml0ZTMyIChETUFfWGZlckNudCwgcFNSQi0+U0dUb0JlWGZlckxlbik7Ci0JREMzOTBfd3JpdGUzMiAoRE1BX1hmZXJBZGRyLCBwU1JCLT5TR0J1c0FkZHIpOwotCi0JLy9EQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCB8IGlvRGlyKTsKLQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9EQVRBX1hGRVI7Ci0KLQlEQzM5MF93cml0ZTggKFNjc2lDbWQsIERNQV9DT01NQU5EK0lORk9fWEZFUl9DTUQpOwotCi0JREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfU1RBUlRfQ01EIHwgaW9EaXIpOwotCS8vREVCVUcxKERDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgV1JUX0VSQVNFX0RNQV9TVEFUIHwgRU5fSU5UX09OX1BDSV9BQk9SVCkpOwotCS8vREVCVUcxKHByaW50ayAoS0VSTl9ERUJVRyAiREMzOTA6IERNQV9TdGF0dXM6ICUwMnhcbiIsIERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKSkpOwotCS8vREVCVUcxKERDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgRU5fSU5UX09OX1BDSV9BQk9SVCkpOwotICAgIH0KLSAgICBlbHNlICAgIC8qIHhmZXIgcGFkICovCi0gICAgewotCWlmKCBwU1JCLT5TR2NvdW50ICkKLQl7Ci0JICAgIHBTUkItPkFkYXB0U3RhdHVzID0gSF9PVkVSX1VOREVSX1JVTjsKLQkgICAgcFNSQi0+U1JCU3RhdHVzIHw9IE9WRVJfUlVOOwotCSAgICBERUJVRzAocHJpbnRrIChLRVJOX1dBUk5JTkcgIiBEQzM5MDogT3ZlcnJ1biAtIikpOwotCX0KLQlERUJVRzAocHJpbnRrIChLRVJOX1dBUk5JTkcgIiBDbGVhciB0cmFuc2ZlciBwYWQgXG4iKSk7Ci0JREMzOTBfd3JpdGU4IChDdGNSZWdfTG93LCAwKTsKLQlEQzM5MF93cml0ZTggKEN0Y1JlZ19NaWQsIDApOwotCURDMzkwX3dyaXRlOCAoQ3RjUmVnX0hpZ2gsIDApOwotCi0JcFNSQi0+U1JCU3RhdGUgfD0gU1JCX1hGRVJQQUQ7Ci0JREMzOTBfd3JpdGU4IChTY3NpQ21kLCBETUFfQ09NTUFORCtYRkVSX1BBRF9CWVRFKTsKLS8qCi0JREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQgfCBpb0Rpcik7Ci0JREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfU1RBUlRfQ01EIHwgaW9EaXIpOwotKi8KLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLWRjMzkwX0RhdGFPdXRQaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotICAgIGRjMzkwX0RhdGFJT19Db21tIChwQUNCLCBwU1JCLCBXUklURV9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfRGF0YUluUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICBkYzM5MF9EYXRhSU9fQ29tbSAocEFDQiwgcFNSQiwgUkVBRF9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfQ29tbWFuZFBoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgc3RydWN0IGRjMzkwX2RjYiogICBwRENCOwotICAgIHU4ICBpLCBjbnQ7Ci0gICAgdTggICAgICpwdHI7Ci0KLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIFJFU0VUX0FUTl9DTUQpOwotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotICAgIGlmKCAhKHBTUkItPlNSQkZsYWcgJiBBVVRPX1JFUVNFTlNFKSApCi0gICAgewotCWNudCA9ICh1OCkgcFNSQi0+cGNtZC0+Y21kX2xlbjsKLQlwdHIgPSAodTggKikgcFNSQi0+cGNtZC0+Y21uZDsKLQlmb3IoaT0wOyBpIDwgY250OyBpKyspCi0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sICoocHRyKyspKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCBSRVFVRVNUX1NFTlNFKTsKLQlwRENCID0gcEFDQi0+cEFjdGl2ZURDQjsKLQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCBwRENCLT5UYXJnZXRMVU4gPDwgNSk7Ci0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgMCk7Ci0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgMCk7Ci0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCAwKTsKLQlERUJVRzAocHJpbnRrKEtFUk5fREVCVUcgIkRDMzkwOiBBdXRvUmVxU2Vuc2UgKENtbmRQaGFzZSkhXG4iKSk7Ci0gICAgfQotICAgIHBTUkItPlNSQlN0YXRlID0gU1JCX0NPTU1BTkQ7Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBJTkZPX1hGRVJfQ01EKTsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1N0YXR1c1BoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0gICAgcFNSQi0+U1JCU3RhdGUgPSBTUkJfU1RBVFVTOwotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgSU5JVElBVE9SX0NNRF9DTVBMVEUpOwotICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfTXNnT3V0UGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICB1OCAgIGJ2YWwsIGksIGNudDsKLSAgICB1OCAgICAgKnB0cjsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiKiAgICBwRENCOwotCi0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0gICAgcERDQiA9IHBBQ0ItPnBBY3RpdmVEQ0I7Ci0gICAgaWYoICEocFNSQi0+U1JCU3RhdGUgJiBTUkJfTVNHT1VUKSApCi0gICAgewotCWNudCA9IHBTUkItPk1zZ0NudDsKLQlpZiggY250ICkKLQl7Ci0JICAgIHB0ciA9ICh1OCAqKSBwU1JCLT5Nc2dPdXRCdWY7Ci0JICAgIGZvcihpPTA7IGkgPCBjbnQ7IGkrKykKLQkJREMzOTBfd3JpdGU4IChTY3NpRmlmbywgKihwdHIrKykpOwotCSAgICBwU1JCLT5Nc2dDbnQgPSAwOwotCSAgICBpZiggKHBEQ0ItPkRDQkZsYWcgJiBBQk9SVF9ERVZfKSAmJgotCQkocFNSQi0+TXNnT3V0QnVmWzBdID09IEFCT1JUKSApCi0JCXBTUkItPlNSQlN0YXRlID0gU1JCX0FCT1JUX1NFTlQ7Ci0JfQotCWVsc2UKLQl7Ci0JICAgIGJ2YWwgPSBBQk9SVDsJLyogPz8/IE1TR19OT1AgKi8KLQkgICAgaWYoIChwU1JCLT5wY21kLT5jbW5kWzBdID09IElOUVVJUlkgKSB8fAotCQkocFNSQi0+cGNtZC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSB8fAotCQkocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpICkKLQkgICAgewotCQlpZiggcERDQi0+U3luY01vZGUgJiBTWU5DX0VOQUJMRSApCi0JCSAgICBnb3RvICBtb3AxOwotCSAgICB9Ci0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIGJ2YWwpOwotCX0KLQlEQzM5MF93cml0ZTggKFNjc2lDbWQsIElORk9fWEZFUl9DTUQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotbW9wMToKLSAgICAgICAgcHJpbnRrIChLRVJOX0VSUiAiREMzOTA6IE9MRCBTeW5jIE5lZ28gY29kZSB0cmlnZ2VyZWQhICglaSAlaSlcbiIsIHBEQ0ItPlRhcmdldElELCBwRENCLT5UYXJnZXRMVU4pOwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIEVYVEVOREVEX01FU1NBR0UpOwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIDMpOwkvKiAgICA7bGVuZ3RoIG9mIGV4dGVuZGVkIG1zZyAqLwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIEVYVEVOREVEX1NEVFIpOwkvKiAgICA7IHN5bmMgbmVnbyAqLwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIHBEQ0ItPk5lZ29QZXJpb2QpOwotCWlmIChwRENCLT5TeW5jT2Zmc2V0ICYgMHgwZikKLQkJICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIHBEQ0ItPlN5bmNPZmZzZXQpOwotCWVsc2UKLQkJICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIFNZTkNfTkVHT19PRkZTRVQpOwkJICAgIAotCXBTUkItPlNSQlN0YXRlIHw9IERPX1NZTkNfTkVHTzsKLQlEQzM5MF93cml0ZTggKFNjc2lDbWQsIElORk9fWEZFUl9DTUQpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX01zZ0luUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsKLSAgICBpZiggIShwU1JCLT5TUkJTdGF0ZSAmIFNSQl9NU0dJTikgKQotICAgIHsKLQlwU1JCLT5TUkJTdGF0ZSAmPSB+U1JCX0RJU0NPTk5FQ1Q7Ci0JcFNSQi0+U1JCU3RhdGUgfD0gU1JCX01TR0lOOwotICAgIH0KLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIElORk9fWEZFUl9DTUQpOwotICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfTm9wXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX05vcF8xKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci19Ci0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1NldFhmZXJSYXRlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCICkKLXsKLSAgICB1OCAgYnZhbCwgaSwgY250OwotICAgIHN0cnVjdCBkYzM5MF9kY2IqICAgcHRyOwotCi0gICAgaWYoICEocERDQi0+VGFyZ2V0TFVOKSApCi0gICAgewotCWlmKCAhcEFDQi0+c2Nhbl9kZXZpY2VzICkKLQl7Ci0JICAgIHB0ciA9IHBBQ0ItPnBMaW5rRENCOwotCSAgICBjbnQgPSBwQUNCLT5EQ0JDbnQ7Ci0JICAgIGJ2YWwgPSBwRENCLT5UYXJnZXRJRDsKLQkgICAgZm9yKGk9MDsgaTxjbnQ7IGkrKykKLQkgICAgewotCQlpZiggcHRyLT5UYXJnZXRJRCA9PSBidmFsICkKLQkJewotCQkgICAgcHRyLT5TeW5jUGVyaW9kID0gcERDQi0+U3luY1BlcmlvZDsKLQkJICAgIHB0ci0+U3luY09mZnNldCA9IHBEQ0ItPlN5bmNPZmZzZXQ7Ci0JCSAgICBwdHItPkN0cmxSMyA9IHBEQ0ItPkN0cmxSMzsKLQkJICAgIHB0ci0+Q3RybFI0ID0gcERDQi0+Q3RybFI0OwotCQkgICAgcHRyLT5TeW5jTW9kZSA9IHBEQ0ItPlN5bmNNb2RlOwotCQl9Ci0JCXB0ciA9IHB0ci0+cE5leHREQ0I7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybjsKLX0KLQotCi1zdGF0aWMgdm9pZAotZGMzOTBfRGlzY29ubmVjdCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiApCi17Ci0gICAgc3RydWN0IGRjMzkwX2RjYiAqcERDQjsKLSAgICBzdHJ1Y3QgZGMzOTBfc3JiICpwU1JCLCAqcHNyYjsKLSAgICB1OCAgaSwgY250OwotCi0gICAgREVCVUcwKHByaW50ayhLRVJOX0lORk8gIkRJU0MsIikpOwotCi0gICAgaWYgKCFwQUNCLT5Db25uZWN0ZWQpIHByaW50ayhLRVJOX0VSUiAiREMzOTA6IERpc2Nvbm5lY3Qgbm90LWNvbm5lY3RlZCBidXM/XG4iKTsKLSAgICBwQUNCLT5Db25uZWN0ZWQgPSAwOwotICAgIHBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotICAgIGlmICghcERDQikKLSAgICAgewotCURFQlVHMChwcmludGsoS0VSTl9FUlIgIkFDQjolcC0+QWN0aXZlRENCOiVwIElPUG9ydDolMDR4IElSUTolMDJ4ICFcbiIsXAotCSAgICAgICBwQUNCLCBwRENCLCBwQUNCLT5JT1BvcnRCYXNlLCBwQUNCLT5JUlFMZXZlbCkpOwotCW1kZWxheSg0MDApOwotCURDMzkwX3JlYWQ4IChJTlRfU3RhdHVzKTsJLyogUmVzZXQgUGVuZGluZyBJTlQgKi8KLQlEQzM5MF93cml0ZTggKFNjc2lDbWQsIEVOX1NFTF9SRVNFTCk7Ci0JcmV0dXJuOwotICAgICB9Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBFTl9TRUxfUkVTRUwpOwotICAgIHBTUkIgPSBwRENCLT5wQWN0aXZlU1JCOwotICAgIHBBQ0ItPnBBY3RpdmVEQ0IgPSBOVUxMOwotICAgIHBTUkItPlNjc2lQaGFzZSA9IFNDU0lfTk9QMDsKLSAgICBpZiggcFNSQi0+U1JCU3RhdGUgJiBTUkJfVU5FWFBFQ1RfUkVTRUwgKQotCXBTUkItPlNSQlN0YXRlID0gMDsKLSAgICBlbHNlIGlmKCBwU1JCLT5TUkJTdGF0ZSAmIFNSQl9BQk9SVF9TRU5UICkKLSAgICB7Ci0JcERDQi0+VGFnTWFzayA9IDA7Ci0JcERDQi0+RENCRmxhZyA9IDA7Ci0JY250ID0gcERDQi0+R29pbmdTUkJDbnQ7Ci0JcERDQi0+R29pbmdTUkJDbnQgPSAwOwotCXBTUkIgPSBwRENCLT5wR29pbmdTUkI7Ci0JZm9yKCBpPTA7IGkgPCBjbnQ7IGkrKykKLQl7Ci0JICAgIHBzcmIgPSBwU1JCLT5wTmV4dFNSQjsKLQkgICAgZGMzOTBfRnJlZV9pbnNlcnQgKHBBQ0IsIHBTUkIpOwotCSAgICBwU1JCID0gcHNyYjsKLQl9Ci0JcERDQi0+cEdvaW5nU1JCID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQlpZiggKHBTUkItPlNSQlN0YXRlICYgKFNSQl9TVEFSVF8rU1JCX01TR09VVCkpIHx8Ci0JICAgIShwU1JCLT5TUkJTdGF0ZSAmIChTUkJfRElTQ09OTkVDVCtTUkJfQ09NUExFVEVEKSkgKQotCXsJLyogU2VsZWN0aW9uIHRpbWUgb3V0ICovCi0JCXBTUkItPkFkYXB0U3RhdHVzID0gSF9TRUxfVElNRU9VVDsKLQkJcFNSQi0+VGFyZ2V0U3RhdHVzID0gMDsKLQkJZ290byAgZGlzYzE7Ci0JfQotCWVsc2UgaWYgKCEocFNSQi0+U1JCU3RhdGUgJiBTUkJfRElTQ09OTkVDVCkgJiYgKHBTUkItPlNSQlN0YXRlICYgU1JCX0NPTVBMRVRFRCkpCi0JewotZGlzYzE6Ci0JICAgIGRjMzkwX2ZyZWV0YWcgKHBEQ0IsIHBTUkIpOwotCSAgICBwRENCLT5wQWN0aXZlU1JCID0gTlVMTDsKLQkgICAgcFNSQi0+U1JCU3RhdGUgPSBTUkJfRlJFRTsKLQkgICAgZGMzOTBfU1JCZG9uZSggcEFDQiwgcERDQiwgcFNSQik7Ci0JfQotICAgIH0KLSAgICBwQUNCLT5Nc2dMZW4gPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1kYzM5MF9SZXNlbGVjdCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiApCi17Ci0gICAgc3RydWN0IGRjMzkwX2RjYiogICBwRENCOwotICAgIHN0cnVjdCBkYzM5MF9zcmIqICAgcFNSQjsKLSAgICB1OCAgaWQsIGx1bjsKLQotICAgIERFQlVHMChwcmludGsoS0VSTl9JTkZPICJSU0VMLCIpKTsKLSAgICBwQUNCLT5Db25uZWN0ZWQgPSAxOwotICAgIHBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotICAgIGlmKCBwRENCICkKLSAgICB7CS8qIEFyYml0cmF0aW9uIGxvc3QgYnV0IFJlc2VsZWN0aW9uIHdvbiAqLwotCURFQlVHMChwcmludGsgKCJEQzM5MDogKEFjdGl2ZURDQiAhPSAwOiBBcmIuIGxvc3QgYnV0IHJlc2VsLiB3b24pIVxuIikpOwotCXBTUkIgPSBwRENCLT5wQWN0aXZlU1JCOwotCWlmKCAhKCBwQUNCLT5zY2FuX2RldmljZXMgKSApCi0JewotCSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpwY21kID0gcFNSQi0+cGNtZDsKLQkgICAgc2NzaV9zZXRfcmVzaWQocGNtZCwgc2NzaV9idWZmbGVuKHBjbWQpKTsKLQkgICAgU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LCBESURfU09GVF9FUlJPUik7Ci0JICAgIGRjMzkwX0dvaW5nX3JlbW92ZShwRENCLCBwU1JCKTsKLQkgICAgZGMzOTBfRnJlZV9pbnNlcnQocEFDQiwgcFNSQik7Ci0JICAgIHBjbWQtPnNjc2lfZG9uZSAocGNtZCk7Ci0JICAgIERFQlVHMChwcmludGsoS0VSTl9ERUJVRyJEQzM5MDogUmV0dXJuIFNSQiAlcCB0byBmcmVlXG4iLCBwU1JCKSk7Ci0JfQotICAgIH0KLSAgICAvKiBHZXQgSUQgKi8KLSAgICBsdW4gPSBEQzM5MF9yZWFkOCAoU2NzaUZpZm8pOwotICAgIERFQlVHMChwcmludGsgKCJEZXYgJTAyeCwiLCBsdW4pKTsKLSAgICBpZiAoIShsdW4gJiAoMSA8PCBwQUNCLT5wU2NzaUhvc3QtPnRoaXNfaWQpKSkKLSAgICAgIHByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBSZXNlbGVjdGlvbiBtdXN0IHNlbGVjdCBob3N0IGFkYXB0ZXI6ICUwMnghXG4iLCBsdW4pOwotICAgIGVsc2UKLSAgICAgIGx1biBePSAxIDw8IHBBQ0ItPnBTY3NpSG9zdC0+dGhpc19pZDsgLyogTWFzayBBZGFwdGVySUQgKi8KLSAgICBpZCA9IDA7IHdoaWxlIChsdW4gPj49IDEpIGlkKys7Ci0gICAgLyogR2V0IExVTiAqLwotICAgIGx1biA9IERDMzkwX3JlYWQ4IChTY3NpRmlmbyk7Ci0gICAgaWYgKCEobHVuICYgSURFTlRJRllfQkFTRSkpIHByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBSZXNlbDogRXhwZWN0IGlkZW50aWZ5IG1lc3NhZ2UhXG4iKTsKLSAgICBsdW4gJj0gNzsKLSAgICBERUJVRzAocHJpbnRrICgiKCUwMmktJWkpLCIsIGlkLCBsdW4pKTsKLSAgICBwRENCID0gZGMzOTBfZmluZERDQiAocEFDQiwgaWQsIGx1bik7Ci0gICAgaWYgKCFwRENCKQotICAgIHsKLQlwcmludGsgKEtFUk5fRVJSICJEQzM5MDogUmVzZWxlY3QgZnJvbSBub24gZXhpc3RpbmcgZGV2aWNlICglMDJpLSVpKVxuIiwKLQkJICAgIGlkLCBsdW4pOwotCXJldHVybjsKLSAgICB9Ci0gICAgcEFDQi0+cEFjdGl2ZURDQiA9IHBEQ0I7Ci0gICAgLyogVGFnUTogV2UgZXhwZWN0IGEgbWVzc2FnZSBzb29uLCBzbyBuZXZlciBtaW5kIHRoZSBleGFjdCBTUkIgKi8KLSAgICBpZiggcERDQi0+U3luY01vZGUgJiBFTl9UQUdfUVVFVUVJTkcgKQotICAgIHsKLQlwU1JCID0gcEFDQi0+cFRtcFNSQjsKLQlwRENCLT5wQWN0aXZlU1JCID0gcFNSQjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQlwU1JCID0gcERDQi0+cEFjdGl2ZVNSQjsKLQlpZiggIXBTUkIgfHwgIShwU1JCLT5TUkJTdGF0ZSAmIFNSQl9ESVNDT05ORUNUKSApCi0JewotCSAgICBwU1JCPSBwQUNCLT5wVG1wU1JCOwotCSAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9VTkVYUEVDVF9SRVNFTDsKLQkgICAgcHJpbnRrIChLRVJOX0VSUiAiREMzOTA6IFJlc2VsZWN0IHdpdGhvdXQgb3V0c3RhbmRpbmcgY21uZCAoJTAyaS0laSlcbiIsCi0JCSAgICBpZCwgbHVuKTsKLQkgICAgcERDQi0+cEFjdGl2ZVNSQiA9IHBTUkI7Ci0JICAgIGRjMzkwX0VuYWJsZU1zZ091dF9BYm9ydCAoIHBBQ0IsIHBTUkIgKTsKLQl9Ci0JZWxzZQotCXsKLQkgICAgaWYoIHBEQ0ItPkRDQkZsYWcgJiBBQk9SVF9ERVZfICkKLQkgICAgewotCQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9BQk9SVF9TRU5UOwotCQlwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFJlc2VsZWN0OiBBYm9ydCAoJTAyaS0laSlcbiIsCi0JCQlpZCwgbHVuKTsKLQkJZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0KCBwQUNCLCBwU1JCICk7Ci0JICAgIH0KLQkgICAgZWxzZQotCQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9EQVRBX1hGRVI7Ci0JfQotICAgIH0KLQotICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIlJlc2VsIFNSQiglcCk6IFRhZ051bSAoJTAyeClcbiIsIHBTUkIsIHBTUkItPlRhZ051bWJlcikpOwotICAgIHBTUkItPlNjc2lQaGFzZSA9IFNDU0lfTk9QMDsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lfRGVzdF9JRCwgcERDQi0+VGFyZ2V0SUQpOwotICAgIERDMzkwX3dyaXRlOCAoU3luY19QZXJpb2QsIHBEQ0ItPlN5bmNQZXJpb2QpOwotICAgIERDMzkwX3dyaXRlOCAoU3luY19PZmZzZXQsIHBEQ0ItPlN5bmNPZmZzZXQpOwotICAgIERDMzkwX3dyaXRlOCAoQ3RybFJlZzEsIHBEQ0ItPkN0cmxSMSk7Ci0gICAgREMzOTBfd3JpdGU4IChDdHJsUmVnMywgcERDQi0+Q3RybFIzKTsKLSAgICBEQzM5MF93cml0ZTggKEN0cmxSZWc0LCBwRENCLT5DdHJsUjQpOwkvKiA7IEdsaXRjaCBlYXRlciAqLwotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgTVNHX0FDQ0VQVEVEX0NNRCk7CS8qIDt0byByZWxlYXNlIHRoZSAvQUNLIHNpZ25hbCAqLwotfQotCi1zdGF0aWMgaW50IF9faW5saW5lX18KLWRjMzkwX1JlcXVlc3RTZW5zZShzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotCXN0cnVjdCBzY3NpX2NtbmQgKnBjbWQ7Ci0KLQlwY21kID0gcFNSQi0+cGNtZDsKLQotCVJFTU9WQUJMRURFQlVHKHByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBSZXF1ZXN0U2Vuc2UoQ21kICUwMngsIElkICUwMngsIExVTiAlMDJ4KVxuIixcCi0JCQkgICAgICBwY21kLT5jbW5kWzBdLCBwRENCLT5UYXJnZXRJRCwgcERDQi0+VGFyZ2V0TFVOKSk7Ci0KLQlwU1JCLT5TUkJGbGFnIHw9IEFVVE9fUkVRU0VOU0U7Ci0JcFNSQi0+U2F2ZWRUb3RYTGVuID0gcFNSQi0+VG90YWxYZmVycmVkTGVuOwotCXBTUkItPkFkYXB0U3RhdHVzID0gMDsKLQlwU1JCLT5UYXJnZXRTdGF0dXMgPSAwOyAvKiBDSEVDS19DT05ESVRJT048PDE7ICovCi0KLQkvKiBXZSBhcmUgY2FsbGVkIGZyb20gU1JCZG9uZSwgb3JpZ2luYWwgUENJIG1hcHBpbmcgaGFzIGJlZW4gcmVtb3ZlZAotCSAqIGFscmVhZHksIG5ldyBvbmUgaXMgc2V0IHVwIGZyb20gU3RhcnRTQ1NJICovCi0JcFNSQi0+U0dJbmRleCA9IDA7Ci0KLQlwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gPSAwOwotCXBTUkItPlNHVG9CZVhmZXJMZW4gPSAwOwotCXJldHVybiBkYzM5MF9TdGFydFNDU0kocEFDQiwgcERDQiwgcFNSQik7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1NSQmRvbmUoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIgKQotewotICAgIHU4IHN0YXR1czsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpwY21kOwotCi0gICAgcGNtZCA9IHBTUkItPnBjbWQ7Ci0gICAgLyogS0c6IE1vdmVkIHBjaV91bm1hcCBoZXJlICovCi0gICAgZGMzOTBfcGNpX3VubWFwKHBTUkIpOwotCi0gICAgc3RhdHVzID0gcFNSQi0+VGFyZ2V0U3RhdHVzOwotCi0gICAgREVCVUcwKHByaW50ayAoIiBTUkJkb25lICglMDJ4LCUwOHgpLCBTUkIgJXBcbiIsIHN0YXR1cywgcGNtZC0+cmVzdWx0LCBwU1JCKSk7Ci0gICAgaWYocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpCi0gICAgewkvKiBMYXN0IGNvbW1hbmQgd2FzIGEgUmVxdWVzdCBTZW5zZSAqLwotCXBTUkItPlNSQkZsYWcgJj0gfkFVVE9fUkVRU0VOU0U7Ci0JcFNSQi0+QWRhcHRTdGF0dXMgPSAwOwotCXBTUkItPlRhcmdldFN0YXR1cyA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKLQotCS8vcGNtZC0+cmVzdWx0ID0gTUtfUkVTKERSSVZFUl9TRU5TRSxESURfT0ssMCxzdGF0dXMpOwotCWlmIChzdGF0dXMgPT0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKQotCSAgICBwY21kLT5yZXN1bHQgPSBNS19SRVNfTE5YKDAsIERJRF9CQURfVEFSR0VULCAwLCAvKkNIRUNLX0NPTkRJVElPTiovMCk7Ci0JZWxzZSAvKiBSZXRyeSAqLwotCXsKLQkgICAgaWYoIHBTUkItPnBjbWQtPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZIC8qIHx8IHBTUkItPnBjbWQtPmNtbmRbMF0gPT0gU1RBUlRfU1RPUCAqLykKLQkgICAgewotCQkvKiBEb24ndCByZXRyeSBvbiBURVNUX1VOSVRfUkVBRFkgKi8KLQkJcGNtZC0+cmVzdWx0ID0gTUtfUkVTX0xOWChEUklWRVJfU0VOU0UsIERJRF9PSywgMCwgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKTsKLQkJUkVNT1ZBQkxFREVCVUcocHJpbnRrKEtFUk5fSU5GTyAiQ21kPSUwMngsIFJlc3VsdD0lMDh4LCBYZmVyTD0lMDh4XG4iLHBTUkItPnBjbWQtPmNtbmRbMF0sXAotCQkgICAgICAgKHUzMikgcGNtZC0+cmVzdWx0LCAodTMyKSBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4pKTsKLQkgICAgfSBlbHNlIHsKLQkJU0VUX1JFU19EUlYocGNtZC0+cmVzdWx0LCBEUklWRVJfU0VOU0UpOwotCQkvL3BTUkItPlNjc2lDbWRMZW4JID0gKHU4KSAocFNSQi0+U2VnbWVudDFbMF0gPj4gOCk7Ci0JCURFQlVHMCAocHJpbnRrICgiREMzOTA6IFJFVFJZICglMDJ4KSwgdGFyZ2V0ICUwMmktJTAyaVxuIiwgcGNtZC0+Y21uZFswXSwgcGNtZC0+ZGV2aWNlLT5pZCwgKHU4KXBjbWQtPmRldmljZS0+bHVuKSk7Ci0JCXBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7Ci0JCVNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCwgRElEX1NPRlRfRVJST1IpOwotCSAgICB9Ci0JfQotCWdvdG8gY21kX2RvbmU7Ci0gICAgfQotICAgIGlmKCBzdGF0dXMgKQotICAgIHsKLQlpZiAoc3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikKLQl7Ci0JICAgIGlmIChkYzM5MF9SZXF1ZXN0U2Vuc2UocEFDQiwgcERDQiwgcFNSQikpIHsKLQkJU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LCBESURfRVJST1IpOwotCQlnb3RvIGNtZF9kb25lOwotCSAgICB9Ci0JICAgIHJldHVybjsKLQl9Ci0JZWxzZSBpZiAoc3RhdHVzID09IFNBTV9TVEFUX1RBU0tfU0VUX0ZVTEwpCi0JewotCSAgICBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwocGNtZC0+ZGV2aWNlLCBwRENCLT5Hb2luZ1NSQkNudCAtIDEpOwotCSAgICBERUJVRzAgKHByaW50ayAoIkRDMzkwOiBSRVRSWSAoJTAyeCksIHRhcmdldCAlMDJpLSUwMmlcbiIsIHBjbWQtPmNtbmRbMF0sIHBjbWQtPmRldmljZS0+aWQsICh1OClwY21kLT5kZXZpY2UtPmx1bikpOwotCSAgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gPSAwOwotCSAgICBTRVRfUkVTX0RJRChwY21kLT5yZXN1bHQsIERJRF9TT0ZUX0VSUk9SKTsKLQl9Ci0JZWxzZSBpZiAoc3RhdHVzID09IFNBTV9TVEFUX0JVU1kgJiYKLQkJIChwY21kLT5jbW5kWzBdID09IFRFU1RfVU5JVF9SRUFEWSB8fCBwY21kLT5jbW5kWzBdID09IElOUVVJUlkpICYmCi0JCSBwQUNCLT5zY2FuX2RldmljZXMpCi0JewotCSAgICBwU1JCLT5BZGFwdFN0YXR1cyA9IDA7Ci0JICAgIHBTUkItPlRhcmdldFN0YXR1cyA9IHN0YXR1czsKLQkgICAgcGNtZC0+cmVzdWx0ID0gTUtfUkVTKDAsMCxwU1JCLT5FbmRNZXNzYWdlLC8qc3RhdHVzKi8wKTsKLQl9Ci0JZWxzZQotCXsgICAvKiBBbm90aGVyIGVycm9yICovCi0JICAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7Ci0JICAgIFNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCwgRElEX1NPRlRfRVJST1IpOwotCSAgICBnb3RvIGNtZF9kb25lOwotCX0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsJLyogIFRhcmdldCBzdGF0dXMgPT0gMCAqLwotCXN0YXR1cyA9IHBTUkItPkFkYXB0U3RhdHVzOwotCWlmIChzdGF0dXMgPT0gSF9PVkVSX1VOREVSX1JVTikKLQl7Ci0JICAgIHBTUkItPlRhcmdldFN0YXR1cyA9IDA7Ci0JICAgIFNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCxESURfT0spOwotCSAgICBTRVRfUkVTX01TRyhwY21kLT5yZXN1bHQscFNSQi0+RW5kTWVzc2FnZSk7Ci0JfQotCWVsc2UgaWYgKHN0YXR1cyA9PSBIX1NFTF9USU1FT1VUKQotCXsKLQkgICAgcGNtZC0+cmVzdWx0ID0gTUtfUkVTKDAsIERJRF9OT19DT05ORUNULCAwLCAwKTsKLQkgICAgLyogRGV2aWNlcyBhcmUgcmVtb3ZlZCBiZWxvdyAuLi4gKi8KLQl9Ci0JZWxzZSBpZiggcFNSQi0+U1JCU3RhdHVzICYgUEFSSVRZX0VSUk9SKQotCXsKLQkgICAgLy9wY21kLT5yZXN1bHQgPSBNS19SRVMoMCxESURfUEFSSVRZLHBTUkItPkVuZE1lc3NhZ2UsMCk7Ci0JICAgIFNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCxESURfUEFSSVRZKTsKLQkgICAgU0VUX1JFU19NU0cocGNtZC0+cmVzdWx0LHBTUkItPkVuZE1lc3NhZ2UpOwotCX0KLQllbHNlCQkgICAgICAgLyogTm8gZXJyb3IgKi8KLQl7Ci0JICAgIHBTUkItPkFkYXB0U3RhdHVzID0gMDsKLQkgICAgcFNSQi0+VGFyZ2V0U3RhdHVzID0gMDsKLQkgICAgU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LERJRF9PSyk7Ci0JfQotICAgIH0KLQotY21kX2RvbmU6Ci0gICAgc2NzaV9zZXRfcmVzaWQocGNtZCwgc2NzaV9idWZmbGVuKHBjbWQpIC0gcFNSQi0+VG90YWxYZmVycmVkTGVuKTsKLQotICAgIGRjMzkwX0dvaW5nX3JlbW92ZSAocERDQiwgcFNSQik7Ci0gICAgLyogQWRkIHRvIGZyZWUgbGlzdCAqLwotICAgIGRjMzkwX0ZyZWVfaW5zZXJ0IChwQUNCLCBwU1JCKTsKLQotICAgIERFQlVHMChwcmludGsgKEtFUk5fREVCVUcgIkRDMzkwOiBTUkJkb25lOiBkb25lXG4iKSk7Ci0gICAgcGNtZC0+c2NzaV9kb25lIChwY21kKTsKLQotICAgIHJldHVybjsKLX0KLQotCi0vKiBSZW1vdmUgYWxsIFNSQnMgZnJvbSBHb2luZyBsaXN0IGFuZCBpbmZvcm0gbWlkbGV2ZWwgKi8KLXN0YXRpYyB2b2lkCi1kYzM5MF9Eb2luZ1NSQl9Eb25lKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiICpwRENCLCAqcGRjYjsKLSAgICBzdHJ1Y3QgZGMzOTBfc3JiICpwc3JiLCAqcHNyYjI7Ci0gICAgaW50IGk7Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqcGNtZDsKLQotICAgIHBEQ0IgPSBwQUNCLT5wTGlua0RDQjsKLSAgICBwZGNiID0gcERDQjsKLSAgICBpZiAoISBwZGNiKSByZXR1cm47Ci0gICAgZG8KLSAgICB7Ci0JcHNyYiA9IHBkY2ItPnBHb2luZ1NSQjsKLQlmb3IgKGkgPSAwOyBpIDwgcGRjYi0+R29pbmdTUkJDbnQ7IGkrKykKLQl7Ci0JICAgIHBzcmIyID0gcHNyYi0+cE5leHRTUkI7Ci0JICAgIHBjbWQgPSBwc3JiLT5wY21kOwotCSAgICBkYzM5MF9GcmVlX2luc2VydCAocEFDQiwgcHNyYik7Ci0JICAgIHBzcmIgID0gcHNyYjI7Ci0JfQotCXBkY2ItPkdvaW5nU1JCQ250ID0gMDsKLQlwZGNiLT5wR29pbmdTUkIgPSBOVUxMOwotCXBkY2ItPlRhZ01hc2sgPSAwOwotCXBkY2IgPSBwZGNiLT5wTmV4dERDQjsKLSAgICB9IHdoaWxlKCBwZGNiICE9IHBEQ0IgKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZGMzOTBfUmVzZXRTQ1NJQnVzKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICkKLXsKLSAgICAvL0RDMzkwX3dyaXRlOCAoU2NzaUNtZCwgUlNUX0RFVklDRV9DTUQpOwotICAgIC8vdWRlbGF5ICgyNTApOwotICAgIC8vREMzOTBfd3JpdGU4IChTY3NpQ21kLCBOT1BfQ01EKTsKLQotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIFJTVF9TQ1NJX0JVU19DTUQpOwotICAgIHBBQ0ItPkNvbm5lY3RlZCA9IDA7Ci0KLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9TY3NpUnN0RGV0ZWN0KCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICkKLXsKLSAgICBwcmludGsgKCJEQzM5MDogUnN0X0RldGVjdDogbGFzdHN0YXQgPSAlMDh4XG4iLCBkYzM5MF9sYXN0c3RhdHVzKTsKLSAgICAvL0RFQlVHMChwcmludGsoS0VSTl9JTkZPICJSU1RfREVURUNULCIpKTsKLQotICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLSAgICAvKiBVbmxvY2sgYmVmb3JlID8gKi8KLSAgICAvKiBkZWxheSBoYWxmIGEgc2Vjb25kICovCi0gICAgdWRlbGF5ICgxMDAwKTsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsKLSAgICBwQUNCLT5sYXN0X3Jlc2V0ID0gamlmZmllcyArIDUqSFovMgotCQkgICAgKyBIWiAqIGRjMzkwX2VlcHJvbUJ1ZltwQUNCLT5BZGFwdGVySW5kZXhdW0VFX0RFTEFZXTsKLSAgICBwQUNCLT5Db25uZWN0ZWQgPSAwOwotCi0gICAgaWYoIHBBQ0ItPkFDQkZsYWcgJiBSRVNFVF9ERVYgKQotCXBBQ0ItPkFDQkZsYWcgfD0gUkVTRVRfRE9ORTsKLSAgICBlbHNlCi0gICAgeyAgIC8qIFJlc2V0IHdhcyBpc3N1ZWQgYnkgc2IgZWxzZSAqLwotCXBBQ0ItPkFDQkZsYWcgfD0gUkVTRVRfREVURUNUOwotCi0JZGMzOTBfUmVzZXREZXZQYXJhbSggcEFDQiApOwotCWRjMzkwX0RvaW5nU1JCX0RvbmUoIHBBQ0IsIE5VTEwpOwotCS8vZGMzOTBfUmVjb3ZlclNSQiggcEFDQiApOwotCXBBQ0ItPnBBY3RpdmVEQ0IgPSBOVUxMOwotCXBBQ0ItPkFDQkZsYWcgPSAwOwotICAgIH0KLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgREMzOTBfcXVldWVjb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQotewotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOwotCXN0cnVjdCBkYzM5MF9hY2IgKmFjYiA9IChzdHJ1Y3QgZGMzOTBfYWNiICopc2Rldi0+aG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX2RjYiAqZGNiID0gc2Rldi0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX3NyYiAqc3JiOwotCi0JaWYgKHNkZXYtPnF1ZXVlX2RlcHRoIDw9IGRjYi0+R29pbmdTUkJDbnQpCi0JCWdvdG8gZGV2aWNlX2J1c3k7Ci0JaWYgKGFjYi0+cEFjdGl2ZURDQikKLQkJZ290byBob3N0X2J1c3k7Ci0JaWYgKGFjYi0+QUNCRmxhZyAmIChSRVNFVF9ERVRFQ1R8UkVTRVRfRE9ORXxSRVNFVF9ERVYpKQotCQlnb3RvIGhvc3RfYnVzeTsKLQotCXNyYiA9IGFjYi0+cEZyZWVTUkI7Ci0JaWYgKHVubGlrZWx5KHNyYiA9PSBOVUxMKSkKLQkJZ290byBob3N0X2J1c3k7Ci0KLQljbWQtPnNjc2lfZG9uZSA9IGRvbmU7Ci0JY21kLT5yZXN1bHQgPSAwOwotCWFjYi0+Q21kcysrOwotCi0JYWNiLT5wRnJlZVNSQiA9IHNyYi0+cE5leHRTUkI7Ci0Jc3JiLT5wTmV4dFNSQiA9IE5VTEw7Ci0KLQlzcmItPnBTUkJEQ0IgPSBkY2I7Ci0Jc3JiLT5wY21kID0gY21kOwotCWNtZC0+aG9zdF9zY3JpYmJsZSA9IChjaGFyICopc3JiOwotICAgIAotCXNyYi0+U0dJbmRleCA9IDA7Ci0Jc3JiLT5BZGFwdFN0YXR1cyA9IDA7Ci0Jc3JiLT5UYXJnZXRTdGF0dXMgPSAwOwotCXNyYi0+TXNnQ250ID0gMDsKLQotCXNyYi0+U1JCU3RhdHVzID0gMDsKLQlzcmItPlNSQkZsYWcgPSAwOwotCXNyYi0+U1JCU3RhdGUgPSAwOwotCXNyYi0+VG90YWxYZmVycmVkTGVuID0gMDsKLQlzcmItPlNHQnVzQWRkciA9IDA7Ci0Jc3JiLT5TR1RvQmVYZmVyTGVuID0gMDsKLQlzcmItPlNjc2lQaGFzZSA9IDA7Ci0Jc3JiLT5FbmRNZXNzYWdlID0gMDsKLQlzcmItPlRhZ051bWJlciA9IFNDU0lfTk9fVEFHOwotCi0JaWYgKGRjMzkwX1N0YXJ0U0NTSShhY2IsIGRjYiwgc3JiKSkgewotCQlkYzM5MF9GcmVlX2luc2VydChhY2IsIHNyYik7Ci0JCWdvdG8gaG9zdF9idXN5OwotCX0KLQotCWRjMzkwX0dvaW5nX2FwcGVuZChkY2IsIHNyYik7Ci0KLQlyZXR1cm4gMDsKLQotIGhvc3RfYnVzeToKLQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQotIGRldmljZV9idXN5OgotCXJldHVybiBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1k7Ci19Ci0KLXN0YXRpYyBERUZfU0NTSV9RQ01EKERDMzkwX3F1ZXVlY29tbWFuZCkKLQotc3RhdGljIHZvaWQgZGMzOTBfZHVtcGluZm8gKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gICAgc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0gICAgdTE2IHBzdGF0OwotCi0gICAgaWYgKCFwRENCKSBwRENCID0gcEFDQi0+cEFjdGl2ZURDQjsKLSAgICBpZiAoIXBTUkIgJiYgcERDQikgcFNSQiA9IHBEQ0ItPnBBY3RpdmVTUkI7Ci0KLSAgICBpZiAocFNSQikgCi0gICAgewotCXByaW50ayAoIkRDMzkwOiBTUkI6IFhmZXJyZWQgJTA4bHgsIFJlbWFpbiAlMDhseCwgU3RhdGUgJTA4eCwgUGhhc2UgJTAyeFxuIiwKLQkJcFNSQi0+VG90YWxYZmVycmVkTGVuLCBwU1JCLT5TR1RvQmVYZmVyTGVuLCBwU1JCLT5TUkJTdGF0ZSwKLQkJcFNSQi0+U2NzaVBoYXNlKTsKLQlwcmludGsgKCJEQzM5MDogQWRwYXRlclN0YXR1czogJTAyeCwgU1JCIFN0YXR1cyAlMDJ4XG4iLCBwU1JCLT5BZGFwdFN0YXR1cywgcFNSQi0+U1JCU3RhdHVzKTsKLSAgICB9Ci0gICAgcHJpbnRrICgiREMzOTA6IFN0YXR1cyBvZiBsYXN0IElSUSAoRE1BL1NDL0ludC9JUlEpOiAlMDh4XG4iLCBkYzM5MF9sYXN0c3RhdHVzKTsKLSAgICBwcmludGsgKCJEQzM5MDogUmVnaXN0ZXIgZHVtcDogU0NTSSBibG9jazpcbiIpOwotICAgIHByaW50ayAoIkRDMzkwOiBYZmVyQ250ICBDbWQgU3RhdCBJbnRTIElSUVMgRkZJUyBDdGwxIEN0bDIgQ3RsMyBDdGw0XG4iKTsKLSAgICBwcmludGsgKCJEQzM5MDogICUwNnggICAlMDJ4ICAgJTAyeCAgICUwMngiLAotCSAgICBEQzM5MF9yZWFkOChDdGNSZWdfTG93KSArIChEQzM5MF9yZWFkOChDdGNSZWdfTWlkKSA8PCA4KSArIChEQzM5MF9yZWFkOChDdGNSZWdfSGlnaCkgPDwgMTYpLAotCSAgICBEQzM5MF9yZWFkOChTY3NpQ21kKSwgREMzOTBfcmVhZDgoU2NzaV9TdGF0dXMpLCBEQzM5MF9yZWFkOChJbnRlcm5fU3RhdGUpKTsKLSAgICBwcmludGsgKCIgICAlMDJ4ICAgJTAyeCAgICUwMnggICAlMDJ4ICAgJTAyeCAgICUwMnhcbiIsCi0JICAgIERDMzkwX3JlYWQ4KElOVF9TdGF0dXMpLCBEQzM5MF9yZWFkOChDdXJyZW50X0ZpZm8pLCBEQzM5MF9yZWFkOChDdHJsUmVnMSksCi0JICAgIERDMzkwX3JlYWQ4KEN0cmxSZWcyKSwgREMzOTBfcmVhZDgoQ3RybFJlZzMpLCBEQzM5MF9yZWFkOChDdHJsUmVnNCkpOwotICAgIERDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgV1JUX0VSQVNFX0RNQV9TVEFUIHwgRU5fSU5UX09OX1BDSV9BQk9SVCk7Ci0gICAgaWYgKERDMzkwX3JlYWQ4KEN1cnJlbnRfRmlmbykgJiAweDFmKQotICAgICAgewotCXByaW50ayAoIkRDMzkwOiBGSUZPOiIpOwotCXdoaWxlIChEQzM5MF9yZWFkOChDdXJyZW50X0ZpZm8pICYgMHgxZikgcHJpbnRrICgiICUwMngiLCBEQzM5MF9yZWFkOChTY3NpRmlmbykpOwotCXByaW50ayAoIlxuIik7Ci0gICAgICB9Ci0gICAgcHJpbnRrICgiREMzOTA6IFJlZ2lzdGVyIGR1bXA6IERNQSBlbmdpbmU6XG4iKTsKLSAgICBwcmludGsgKCJEQzM5MDogQ21kICAgU1RyQ250ICAgIFNCdXNBICAgIFdya0JDICAgIFdya0FDIFN0YXQgU0J1c0N0cmxcbiIpOwotICAgIHByaW50ayAoIkRDMzkwOiAgJTAyeCAlMDh4ICUwOHggJTA4eCAlMDh4ICAgJTAyeCAlMDh4XG4iLAotCSAgICBEQzM5MF9yZWFkOChETUFfQ21kKSwgREMzOTBfcmVhZDMyKERNQV9YZmVyQ250KSwgREMzOTBfcmVhZDMyKERNQV9YZmVyQWRkciksCi0JICAgIERDMzkwX3JlYWQzMihETUFfV2tfQnl0ZUNudHIpLCBEQzM5MF9yZWFkMzIoRE1BX1drX0FkZHJDbnRyKSwKLQkgICAgREMzOTBfcmVhZDgoRE1BX1N0YXR1cyksIERDMzkwX3JlYWQzMihETUFfU2NzaUJ1c0N0cmwpKTsKLSAgICBEQzM5MF93cml0ZTMyIChETUFfU2NzaUJ1c0N0cmwsIEVOX0lOVF9PTl9QQ0lfQUJPUlQpOwotCi0gICAgcGRldiA9IHBBQ0ItPnBkZXY7Ci0gICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NUQVRVUywgJnBzdGF0KTsKLSAgICBwcmludGsgKCJEQzM5MDogUmVnaXN0ZXIgZHVtcDogUENJIFN0YXR1czogJTA0eFxuIiwgcHN0YXQpOwotICAgIHByaW50ayAoIkRDMzkwOiBJbiBjYXNlIG9mIGRyaXZlciB0cm91YmxlIHJlYWQgRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0XG4iKTsKLX0KLQotCi1zdGF0aWMgaW50IERDMzkwX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLQlzdHJ1Y3QgZGMzOTBfYWNiICpwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX2RjYiAqcERDQiA9IChzdHJ1Y3QgZGMzOTBfZGNiKikgY21kLT5kZXZpY2UtPmhvc3RkYXRhOwotCi0Jc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBjbWQsICJEQzM5MDogQWJvcnQgY29tbWFuZFxuIik7Ci0KLQkvKiBhYm9ydCgpIGlzIHRvbyBzdHVwaWQgZm9yIGFscmVhZHkgc2VudCBjb21tYW5kcyBhdCB0aGUgbW9tZW50LiAKLQkgKiBJZiBpdCdzIGNhbGxlZCB3ZSBhcmUgaW4gdHJvdWJsZSBhbnl3YXksIHNvIGxldCdzIGR1bXAgc29tZSBpbmZvIAotCSAqIGludG8gdGhlIHN5c2xvZyBhdCBsZWFzdC4gKEtHLCA5OC8wOC8yMCw5OS8wNi8yMCkgKi8KLQlkYzM5MF9kdW1waW5mbyhwQUNCLCBwRENCLCBOVUxMKTsKLQotCXBEQ0ItPkRDQkZsYWcgfD0gQUJPUlRfREVWXzsKLQlwcmludGsoS0VSTl9JTkZPICJEQzM5MDogQWJvcnRlZC5cbiIpOwotCi0JcmV0dXJuIEZBSUxFRDsKLX0KLQotCi1zdGF0aWMgdm9pZCBkYzM5MF9SZXNldERldlBhcmFtKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICkKLXsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiICpwRENCLCAqcGRjYjsKLQotICAgIHBEQ0IgPSBwQUNCLT5wTGlua0RDQjsKLSAgICBpZiAoISBwRENCKSByZXR1cm47Ci0gICAgcGRjYiA9IHBEQ0I7Ci0gICAgZG8KLSAgICB7Ci0JcERDQi0+U3luY01vZGUgJj0gflNZTkNfTkVHT19ET05FOwotCXBEQ0ItPlN5bmNQZXJpb2QgPSAwOwotCXBEQ0ItPlN5bmNPZmZzZXQgPSAwOwotCXBEQ0ItPlRhZ01hc2sgPSAwOwotCXBEQ0ItPkN0cmxSMyA9IEZBU1RfQ0xLOwotCXBEQ0ItPkN0cmxSNCAmPSBORUdBVEVfUkVRQUNLREFUQSB8IENUUkw0X1JFU0VSVkVEIHwgTkVHQVRFX1JFUUFDSzsKLQlwRENCLT5DdHJsUjQgfD0gcEFDQi0+Z2xpdGNoX2NmZzsKLQlwRENCID0gcERDQi0+cE5leHREQ0I7Ci0gICAgfQotICAgIHdoaWxlKCBwZGNiICE9IHBEQ0IgKTsKLSAgICBwQUNCLT5BQ0JGbGFnICY9IH4oUkVTRVRfREVWIHwgUkVTRVRfRE9ORSB8IFJFU0VUX0RFVEVDVCk7Ci0KLX0KLQotc3RhdGljIGludCBEQzM5MF9idXNfcmVzZXQgKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLQlzdHJ1Y3QgZGMzOTBfYWNiKiAgICBwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0JdTggICBidmFsOwotCi0Jc3Bpbl9sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotCWJ2YWwgPSBEQzM5MF9yZWFkOChDdHJsUmVnMSkgfCBESVNfSU5UX09OX1NDU0lfUlNUOwotCURDMzkwX3dyaXRlOChDdHJsUmVnMSwgYnZhbCk7CS8qIGRpc2FibGUgSVJRIG9uIGJ1cyByZXNldCAqLwotCi0JcEFDQi0+QUNCRmxhZyB8PSBSRVNFVF9ERVY7Ci0JZGMzOTBfUmVzZXRTQ1NJQnVzKHBBQ0IpOwotCi0JZGMzOTBfUmVzZXREZXZQYXJhbShwQUNCKTsKLQltZGVsYXkoMSk7Ci0JcEFDQi0+bGFzdF9yZXNldCA9IGppZmZpZXMgKyAzKkhaLzIKLQkJKyBIWiAqIGRjMzkwX2VlcHJvbUJ1ZltwQUNCLT5BZGFwdGVySW5kZXhdW0VFX0RFTEFZXTsKLQotCURDMzkwX3dyaXRlOChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0JREMzOTBfcmVhZDgoSU5UX1N0YXR1cyk7CQkvKiBSZXNldCBQZW5kaW5nIElOVCAqLwotCi0JZGMzOTBfRG9pbmdTUkJfRG9uZShwQUNCLCBjbWQpOwotCi0JcEFDQi0+cEFjdGl2ZURDQiA9IE5VTEw7Ci0JcEFDQi0+QUNCRmxhZyA9IDA7Ci0KLQlidmFsID0gREMzOTBfcmVhZDgoQ3RybFJlZzEpICYgfkRJU19JTlRfT05fU0NTSV9SU1Q7Ci0JREMzOTBfd3JpdGU4KEN0cmxSZWcxLCBidmFsKTsJLyogcmUtZW5hYmxlIGludGVycnVwdCAqLwotCi0Jc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCi0JcmV0dXJuIFNVQ0NFU1M7Ci19Ci0KLS8qKgotICogZGMzOTBfc2xhdmVfYWxsb2MgLSBDYWxsZWQgYnkgdGhlIHNjc2kgbWlkIGxheWVyIHRvIHRlbGwgdXMgYWJvdXQgYSBuZXcKLSAqIHNjc2kgZGV2aWNlIHRoYXQgd2UgbmVlZCB0byBkZWFsIHdpdGguCi0gKgotICogQHNjc2lfZGV2aWNlOiBUaGUgbmV3IHNjc2kgZGV2aWNlIHRoYXQgd2UgbmVlZCB0byBoYW5kbGUuCi0gKi8KLXN0YXRpYyBpbnQgZGMzOTBfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZSkKLXsKLQlzdHJ1Y3QgZGMzOTBfYWNiICpwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IqKSBzY3NpX2RldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX2RjYiAqcERDQiwgKnBEQ0IyID0gTlVMTDsKLQl1aW50IGlkID0gc2NzaV9kZXZpY2UtPmlkOwotCXVpbnQgbHVuID0gc2NzaV9kZXZpY2UtPmx1bjsKLQotCXBEQ0IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGMzOTBfZGNiKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwRENCKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmICghcEFDQi0+RENCQ250KyspIHsKLQkJcEFDQi0+cExpbmtEQ0IgPSBwRENCOwotCQlwQUNCLT5wRENCUnVuUm9iaW4gPSBwRENCOwotCX0gZWxzZSB7Ci0JCXBBQ0ItPnBMYXN0RENCLT5wTmV4dERDQiA9IHBEQ0I7Ci0JfQotICAgCi0JcERDQi0+cE5leHREQ0IgPSBwQUNCLT5wTGlua0RDQjsKLQlwQUNCLT5wTGFzdERDQiA9IHBEQ0I7Ci0KLQlwRENCLT5wRENCQUNCID0gcEFDQjsKLQlwRENCLT5UYXJnZXRJRCA9IGlkOwotCXBEQ0ItPlRhcmdldExVTiA9IGx1bjsKLQotCS8qCi0JICogU29tZSB2YWx1ZXMgYXJlIGZvciBhbGwgTFVOczogQ29weSB0aGVtIAotCSAqIEluIGEgY2xlYW4gd2F5OiBXZSB3b3VsZCBoYXZlIGFuIG93biBzdHJ1Y3R1cmUgZm9yIGEgU0NTSS1JRCAKLQkgKi8KLQlpZiAobHVuICYmIChwRENCMiA9IGRjMzkwX2ZpbmREQ0IocEFDQiwgaWQsIDApKSkgewotCQlwRENCLT5EZXZNb2RlID0gcERDQjItPkRldk1vZGU7Ci0JCXBEQ0ItPlN5bmNNb2RlID0gcERDQjItPlN5bmNNb2RlICYgU1lOQ19ORUdPX0RPTkU7Ci0JCXBEQ0ItPlN5bmNQZXJpb2QgPSBwRENCMi0+U3luY1BlcmlvZDsKLQkJcERDQi0+U3luY09mZnNldCA9IHBEQ0IyLT5TeW5jT2Zmc2V0OwotCQlwRENCLT5OZWdvUGVyaW9kID0gcERDQjItPk5lZ29QZXJpb2Q7Ci0gICAgICAKLQkJcERDQi0+Q3RybFIzID0gcERDQjItPkN0cmxSMzsKLQkJcERDQi0+Q3RybFI0ID0gcERDQjItPkN0cmxSNDsKLQl9IGVsc2UgewotCQl1OCBpbmRleCA9IHBBQ0ItPkFkYXB0ZXJJbmRleDsKLQkJUEVFcHJvbSBwcm9tID0gKFBFRXByb20pICZkYzM5MF9lZXByb21CdWZbaW5kZXhdW2lkIDw8IDJdOwotCi0JCXBEQ0ItPkRldk1vZGUgPSBwcm9tLT5FRV9NT0RFMTsKLQkJcERDQi0+TmVnb1BlcmlvZCA9Ci0JCQkoZGMzOTBfY2xvY2tfcGVyaW9kMVtwcm9tLT5FRV9TUEVFRF0gKiAyNSkgPj4gMjsKLQkJcERDQi0+Q3RybFIzID0gRkFTVF9DTEs7Ci0JCXBEQ0ItPkN0cmxSNCA9IHBBQ0ItPmdsaXRjaF9jZmcgfCBDVFJMNF9SRVNFUlZFRDsKLQkJaWYgKGRjMzkwX2VlcHJvbUJ1ZltpbmRleF1bRUVfTU9ERTJdICYgQUNUSVZFX05FR0FUSU9OKQotCQkJcERDQi0+Q3RybFI0IHw9IE5FR0FURV9SRVFBQ0tEQVRBIHwgTkVHQVRFX1JFUUFDSzsKLQl9Ci0KLQlpZiAocERDQi0+RGV2TW9kZSAmIFNZTkNfTkVHT18pCi0JCXBEQ0ItPlN5bmNNb2RlIHw9IFNZTkNfRU5BQkxFOwotCWVsc2UgewotCQlwRENCLT5TeW5jTW9kZSA9IDA7Ci0JCXBEQ0ItPlN5bmNPZmZzZXQgJj0gfjB4MGY7Ci0JfQotCi0JcERDQi0+Q3RybFIxID0gcEFDQi0+cFNjc2lIb3N0LT50aGlzX2lkOwotCWlmIChwRENCLT5EZXZNb2RlICYgUEFSSVRZX0NIS18pCi0JCXBEQ0ItPkN0cmxSMSB8PSBQQVJJVFlfRVJSX1JFUE87Ci0KLQlwQUNCLT5zY2FuX2RldmljZXMgPSAxOwotCXNjc2lfZGV2aWNlLT5ob3N0ZGF0YSA9IHBEQ0I7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZGMzOTBfc2xhdmVfZGVzdHJveSAtIENhbGxlZCBieSB0aGUgc2NzaSBtaWQgbGF5ZXIgdG8gdGVsbCB1cyBhYm91dCBhCi0gKiBkZXZpY2UgdGhhdCBpcyBnb2luZyBhd2F5LgotICoKLSAqIEBzY3NpX2RldmljZTogVGhlIHNjc2kgZGV2aWNlIHRoYXQgd2UgbmVlZCB0byByZW1vdmUuCi0gKi8KLXN0YXRpYyB2b2lkIGRjMzkwX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZSkKLXsKLQlzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IqKSBzY3NpX2RldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX2RjYiogcERDQiA9IChzdHJ1Y3QgZGMzOTBfZGNiKikgc2NzaV9kZXZpY2UtPmhvc3RkYXRhOwotCXN0cnVjdCBkYzM5MF9kY2IqIHBQcmV2RENCID0gcEFDQi0+cExpbmtEQ0I7Ci0KLQlwQUNCLT5zY2FuX2RldmljZXMgPSAwOwotCi0JQlVHX09OKHBEQ0ItPkdvaW5nU1JCQ250ID4gMSk7Ci0JCi0JaWYgKHBEQ0IgPT0gcEFDQi0+cExpbmtEQ0IpIHsKLQkJaWYgKHBBQ0ItPnBMYXN0RENCID09IHBEQ0IpIHsKLQkJCXBEQ0ItPnBOZXh0RENCID0gTlVMTDsKLQkJCXBBQ0ItPnBMYXN0RENCID0gTlVMTDsKLQkJfQotCQlwQUNCLT5wTGlua0RDQiA9IHBEQ0ItPnBOZXh0RENCOwotCX0gZWxzZSB7Ci0JCXdoaWxlIChwUHJldkRDQi0+cE5leHREQ0IgIT0gcERDQikKLQkJCXBQcmV2RENCID0gcFByZXZEQ0ItPnBOZXh0RENCOwotCQlwUHJldkRDQi0+cE5leHREQ0IgPSBwRENCLT5wTmV4dERDQjsKLQkJaWYgKHBEQ0IgPT0gcEFDQi0+cExhc3REQ0IpCi0JCQlwQUNCLT5wTGFzdERDQiA9IHBQcmV2RENCOwotCX0KLQotCWlmIChwRENCID09IHBBQ0ItPnBBY3RpdmVEQ0IpCi0JCXBBQ0ItPnBBY3RpdmVEQ0IgPSBOVUxMOwotCWlmIChwRENCID09IHBBQ0ItPnBMaW5rRENCKQotCQlwQUNCLT5wTGlua0RDQiA9IHBEQ0ItPnBOZXh0RENCOwotCWlmIChwRENCID09IHBBQ0ItPnBEQ0JSdW5Sb2JpbikKLQkJcEFDQi0+cERDQlJ1blJvYmluID0gcERDQi0+cE5leHREQ0I7Ci0Ja2ZyZWUocERDQik7IAotCQotCXBBQ0ItPkRDQkNudC0tOwotfQotCi1zdGF0aWMgaW50IGRjMzkwX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCi17Ci0Jc3RydWN0IGRjMzkwX2FjYiAqYWNiID0gKHN0cnVjdCBkYzM5MF9hY2IgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgZGMzOTBfZGNiICpkY2IgPSAoc3RydWN0IGRjMzkwX2RjYiAqKXNkZXYtPmhvc3RkYXRhOwotCi0JYWNiLT5zY2FuX2RldmljZXMgPSAwOwotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkICYmIChkY2ItPkRldk1vZGUgJiBUQUdfUVVFVUVJTkdfKSkgewotCQlkY2ItPlN5bmNNb2RlIHw9IEVOX1RBR19RVUVVRUlORzsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgYWNiLT5UYWdNYXhOdW0pOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLnByb2NfbmFtZQkJPSAidG1zY3NpbSIsIAotCS5uYW1lCQkJPSBEQzM5MF9CQU5ORVIgIiBWIiBEQzM5MF9WRVJTSU9OLAotCS5zbGF2ZV9hbGxvYwkJPSBkYzM5MF9zbGF2ZV9hbGxvYywKLQkuc2xhdmVfY29uZmlndXJlCT0gZGMzOTBfc2xhdmVfY29uZmlndXJlLAotCS5zbGF2ZV9kZXN0cm95CQk9IGRjMzkwX3NsYXZlX2Rlc3Ryb3ksCi0JLnF1ZXVlY29tbWFuZAkJPSBEQzM5MF9xdWV1ZWNvbW1hbmQsCi0JLmVoX2Fib3J0X2hhbmRsZXIJPSBEQzM5MF9hYm9ydCwKLQkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIJPSBEQzM5MF9idXNfcmVzZXQsCi0JLmNhbl9xdWV1ZQkJPSAxLAotCS50aGlzX2lkCQk9IDcsCi0JLnNnX3RhYmxlc2l6ZQkJPSBTR19BTEwsCi0JLmNtZF9wZXJfbHVuCQk9IDEsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAotCS5tYXhfc2VjdG9ycwkJPSAweDQwMDAsIC8qIDhNaUIgPSAxNiAqIDEwMjQgKiA1MTIgKi8KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnVuY3Rpb25zIGZvciBhY2Nlc3MgdG8gREMzOTAgRUVQUk9NCi0gKiBhbmQgc29tZSB0byBlbXVsYXRlIGl0Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGRjMzkwX2VlcHJvbV9wcmVwYXJlX3JlYWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNtZCkKLXsKLQl1OCBjYXJyeUZsYWcgPSAxLCBqID0gMHg4MCwgYnZhbDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKLQkJaWYgKGNhcnJ5RmxhZykgewotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDB4NDApOwotCQkJYnZhbCA9IDB4YzA7Ci0JCX0gZWxzZQotCQkJYnZhbCA9IDB4ODA7Ci0KLQkJdWRlbGF5KDE2MCk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCBidmFsKTsKLQkJdWRlbGF5KDE2MCk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAwKTsKLQkJdWRlbGF5KDE2MCk7Ci0KLQkJY2FycnlGbGFnID0gKGNtZCAmIGopID8gMSA6IDA7Ci0JCWogPj49IDE7Ci0JfQotfQotCi1zdGF0aWMgdTE2IGRjMzkwX2VlcHJvbV9nZXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpbnQgaTsKLQl1MTYgd3ZhbCA9IDA7Ci0JdTggYnZhbDsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCXd2YWwgPDw9IDE7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDB4ODApOwotCQl1ZGVsYXkoMTYwKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDB4NDApOwotCQl1ZGVsYXkoMTYwKTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHgwMCwgJmJ2YWwpOwotCi0JCWlmIChidmFsID09IDB4MjIpCi0JCQl3dmFsIHw9IDE7Ci0JfQotCi0JcmV0dXJuIHd2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIGRjMzkwX3JlYWRfZWVwcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgKnB0cikKLXsKLQl1OCBjbWQgPSBFRVBST01fUkVBRCwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAweDQwOyBpKyspIHsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4YzAsIDApOwotCQl1ZGVsYXkoMTYwKTsKLQotCQlkYzM5MF9lZXByb21fcHJlcGFyZV9yZWFkKHBkZXYsIGNtZCsrKTsKLQkJKnB0cisrID0gZGMzOTBfZWVwcm9tX2dldF9kYXRhKHBkZXYpOwotCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAwKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDApOwotCQl1ZGVsYXkoMTYwKTsKLQl9Ci19Ci0KLS8qIE92ZXJyaWRlIEVFcHJvbSB2YWx1ZXMgd2l0aCBleHBsaWNpdGx5IHNldCB2YWx1ZXMgKi8KLXN0YXRpYyB2b2lkIGRjMzkwX2VlcHJvbV9vdmVycmlkZSh1OCBpbmRleCkKLXsKLQl1OCAqcHRyID0gKHU4ICopIGRjMzkwX2VlcHJvbUJ1ZltpbmRleF0sIGlkOwotCi0JLyogQWRhcHRlciBTZXR0aW5ncyAqLwotCWlmICh0bXNjc2ltWzBdICE9IC0yKQotCQlwdHJbRUVfQURBUFRfU0NTSV9JRF0gPSAodTgpdG1zY3NpbVswXTsJLyogQWRhcHRlciBJRCAqLwotCWlmICh0bXNjc2ltWzNdICE9IC0yKQotCQlwdHJbRUVfTU9ERTJdID0gKHU4KXRtc2NzaW1bM107Ci0JaWYgKHRtc2NzaW1bNV0gIT0gLTIpCi0JCXB0cltFRV9ERUxBWV0gPSB0bXNjc2ltWzVdOwkJLyogUmVzZXQgZGVsYXkgKi8KLQlpZiAodG1zY3NpbVs0XSAhPSAtMikKLQkJcHRyW0VFX1RBR19DTURfTlVNXSA9ICh1OCl0bXNjc2ltWzRdOwkvKiBUYWdnZWQgQ21kcyAqLwotCi0JLyogRGV2aWNlIFNldHRpbmdzICovCi0JZm9yIChpZCA9IDA7IGlkIDwgTUFYX1NDU0lfSUQ7IGlkKyspIHsKLQkJaWYgKHRtc2NzaW1bMl0gIT0gLTIpCi0JCQlwdHJbaWQgPDwgMl0gPSAodTgpdG1zY3NpbVsyXTsJCS8qIEVFX01PREUxICovCi0JCWlmICh0bXNjc2ltWzFdICE9IC0yKQotCQkJcHRyWyhpZCA8PCAyKSArIDFdID0gKHU4KXRtc2NzaW1bMV07CS8qIEVFX1NwZWVkICovCi0JfQotfQotCi1zdGF0aWMgaW50IHRtc2NzaW1fZGVmW10gPSB7Ci0JNywKLQkwIC8qIDEwTUh6ICovLAotCVBBUklUWV9DSEtfIHwgU0VORF9TVEFSVF8gfCBFTl9ESVNDT05ORUNUXyB8IFNZTkNfTkVHT18gfCBUQUdfUVVFVUVJTkdfLAotCU1PUkUyX0RSViB8IEdSRUFURVJfMUcgfCBSU1RfU0NTSV9CVVMgfCBBQ1RJVkVfTkVHQVRJT04gfCBMVU5fQ0hFQ0ssCi0JMyAvKiAxNiBUYWdzIHBlciBMVU4gKi8sCi0JMSAvKiBzIGRlbGF5IGFmdGVyIFJlc2V0ICovLAotfTsKLQotLyogQ29weSBkZWZhdWx0cyBvdmVyIHNldCB2YWx1ZXMgd2hlcmUgbWlzc2luZyAqLwotc3RhdGljIHZvaWQgZGMzOTBfZmlsbF93aXRoX2RlZmF1bHRzICh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQlpZiAodG1zY3NpbVtpXSA8IDAgfHwgdG1zY3NpbVtpXSA+IDI1NSkKLQkJCXRtc2NzaW1baV0gPSB0bXNjc2ltX2RlZltpXTsKLQl9Ci0KLQkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKHRtc2NzaW1bMF0gPiA3KQotCQl0bXNjc2ltWzBdID0gNzsKLQlpZiAodG1zY3NpbVsxXSA+IDcpCi0JCXRtc2NzaW1bMV0gPSA0OwotCWlmICh0bXNjc2ltWzRdID4gNSkKLQkJdG1zY3NpbVs0XSA9IDQ7Ci0JaWYgKHRtc2NzaW1bNV0gPiAxODApCi0JCXRtc2NzaW1bNV0gPSAxODA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRjMzkwX2NoZWNrX2VlcHJvbShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggaW5kZXgpCi17Ci0JdTggaW50ZXJwZFtdID0gezEsIDMsIDUsIDEwLCAxNiwgMzAsIDYwLCAxMjB9OwotCXU4IEVFYnVmWzEyOF07Ci0JdTE2ICpwdHIgPSAodTE2ICopRUVidWYsIHd2YWwgPSAwOwotCWludCBpOwotCi0JZGMzOTBfcmVhZF9lZXByb20ocGRldiwgcHRyKTsKLQltZW1jcHkoZGMzOTBfZWVwcm9tQnVmW2luZGV4XSwgRUVidWYsIEVFX0FEQVBUX1NDU0lfSUQpOwotCW1lbWNweSgmZGMzOTBfZWVwcm9tQnVmW2luZGV4XVtFRV9BREFQVF9TQ1NJX0lEXSwgCi0JICAgICAgICZFRWJ1ZltSRUFMX0VFX0FEQVBUX1NDU0lfSURdLCBFRV9MRU4gLSBFRV9BREFQVF9TQ1NJX0lEKTsKLQotCWRjMzkwX2VlcHJvbUJ1ZltpbmRleF1bRUVfREVMQVldID0gaW50ZXJwZFtkYzM5MF9lZXByb21CdWZbaW5kZXhdW0VFX0RFTEFZXV07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMHg0MDsgaSsrLCBwdHIrKykKLQkJd3ZhbCArPSAqcHRyOwotCi0JLyogbm8gVGVrcmFtIEVFcHJvbSBmb3VuZCAqLwotCWlmICh3dmFsICE9IDB4MTIzNCkgewotCQlpbnQgc3BlZWQ7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiREMzOTBfaW5pdDogTm8gRUVQUk9NIGZvdW5kISBUcnlpbmcgZGVmYXVsdCBzZXR0aW5ncyAuLi5cbiIpOwotCi0JCS8qCi0JCSAqIFhYWChoY2gpOiBib2d1cywgYmVjYXVzZSB3ZSBtaWdodCBoYXZlIHRla3JhbSBhbmQKLQkJICogICAgICAgICAgIG5vbi10ZWtyYW0gaGJhcyBpbiBhIHNpbmdsZSBtYWNoaW5lLgotCQkgKi8KLQkJZGMzOTBfZmlsbF93aXRoX2RlZmF1bHRzKCk7Ci0KLQkJc3BlZWQgPSBkYzM5MF9jbG9ja19zcGVlZFt0bXNjc2ltWzFdXTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IFVzZWQgZGVmYXVsdHM6IEFkYXB0SUQ9JWksIFNwZWVkSWR4PSVpICglaS4laSBNSHopLCAiCi0JCSAgICAgICAiRGV2TW9kZT0weCUwMngsIEFkYXB0TW9kZT0weCUwMngsIFRhZ2dlZENtbmRzPSVpICglaSksIERlbGF5UmVzZXQ9JWlzXG4iLCAKLQkJICAgICAgIHRtc2NzaW1bMF0sIHRtc2NzaW1bMV0sIHNwZWVkIC8gMTAsIHNwZWVkICUgMTAsCi0JCSAgICAgICAodTgpdG1zY3NpbVsyXSwgKHU4KXRtc2NzaW1bM10sIHRtc2NzaW1bNF0sIDIgPDwgKHRtc2NzaW1bNF0pLCB0bXNjc2ltWzVdKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRjMzkwX2luaXRfaHcoc3RydWN0IGRjMzkwX2FjYiAqcEFDQiwgdTggaW5kZXgpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwQUNCLT5wU2NzaUhvc3Q7Ci0JdTggZHN0YXRlOwotCi0JLyogRGlzYWJsZSBTQ1NJIGJ1cyByZXNldCBpbnRlcnJ1cHQgKi8KLQlEQzM5MF93cml0ZTgoQ3RybFJlZzEsIERJU19JTlRfT05fU0NTSV9SU1QgfCBzaG9zdC0+dGhpc19pZCk7Ci0KLQlpZiAocEFDQi0+R21vZGUyICYgUlNUX1NDU0lfQlVTKSB7Ci0JCWRjMzkwX1Jlc2V0U0NTSUJ1cyhwQUNCKTsKLQkJdWRlbGF5KDEwMDApOwotCQlwQUNCLT5sYXN0X3Jlc2V0ID0gamlmZmllcyArIEhaLzIgKwotCQkJSFogKiBkYzM5MF9lZXByb21CdWZbcEFDQi0+QWRhcHRlckluZGV4XVtFRV9ERUxBWV07Ci0JfQotCi0JcEFDQi0+QUNCRmxhZyA9IDA7Ci0KLQkvKiBSZXNldCBQZW5kaW5nIElOVCAqLwotCURDMzkwX3JlYWQ4KElOVF9TdGF0dXMpOwotCQotCS8qIDI1MG1zIHNlbGVjdGlvbiB0aW1lb3V0ICovCi0JREMzOTBfd3JpdGU4KFNjc2lfVGltZU91dCwgU0VMX1RJTUVPVVQpOwotCQotCS8qIENvbnZlcnNpb24gZmFjdG9yID0gMCAsIDQwTUh6IGNsb2NrICovCi0JREMzOTBfd3JpdGU4KENsa19GYWN0b3IsIENMS19GUkVRXzQwTUhaKTsKLQkKLQkvKiBOT1AgY21kIC0gY2xlYXIgY29tbWFuZCByZWdpc3RlciAqLwotCURDMzkwX3dyaXRlOChTY3NpQ21kLCBOT1BfQ01EKTsKLQkKLQkvKiBFbmFibGUgRmVhdHVyZSBhbmQgU0NTSS0yICovCi0JREMzOTBfd3JpdGU4KEN0cmxSZWcyLCBFTl9GRUFUVVJFK0VOX1NDU0kyX0NNRCk7Ci0JCi0JLyogRmFzdCBjbG9jayAqLwotCURDMzkwX3dyaXRlOChDdHJsUmVnMywgRkFTVF9DTEspOwotCi0JLyogTmVnYXRpb24gKi8KLQlEQzM5MF93cml0ZTgoQ3RybFJlZzQsIHBBQ0ItPmdsaXRjaF9jZmcgfCAvKiBnbGl0Y2ggZWF0ZXIgKi8KLQkJKGRjMzkwX2VlcHJvbUJ1ZltpbmRleF1bRUVfTU9ERTJdICYgQUNUSVZFX05FR0FUSU9OKSA/Ci0JCSBORUdBVEVfUkVRQUNLREFUQSA6IDApOwotCQotCS8qIENsZWFyIFRyYW5zZmVyIENvdW50IEhpZ2g6IElEICovCi0JREMzOTBfd3JpdGU4KEN0Y1JlZ19IaWdoLCAwKTsKLQlEQzM5MF93cml0ZTgoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLQlEQzM5MF93cml0ZTgoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotCURDMzkwX3dyaXRlMzIoRE1BX1Njc2lCdXNDdHJsLCBFTl9JTlRfT05fUENJX0FCT1JUKTsKLQotCWRzdGF0ZSA9IERDMzkwX3JlYWQ4KERNQV9TdGF0dXMpOwotCURDMzkwX3dyaXRlOChETUFfU3RhdHVzLCBkc3RhdGUpOwotfQotCi1zdGF0aWMgaW50IGRjMzkwX3Byb2JlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBkYzM5MF9hY2IgKnBBQ0I7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7Ci0JdW5zaWduZWQgbG9uZyBpb19wb3J0OwotCWludCBlcnJvciA9IC1FTk9ERVYsIGk7Ci0KLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCWdvdG8gb3V0OwotCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQllcnJvciA9IC1FTk9NRU07Ci0JaWYgKGRpc2FibGVfY2x1c3RlcmluZykKLQkJZHJpdmVyX3RlbXBsYXRlLnVzZV9jbHVzdGVyaW5nID0gRElTQUJMRV9DTFVTVEVSSU5HOwotCXNob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZkcml2ZXJfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgZGMzOTBfYWNiKSk7Ci0JaWYgKCFzaG9zdCkKLQkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7Ci0KLQlwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IgKilzaG9zdC0+aG9zdGRhdGE7Ci0JbWVtc2V0KHBBQ0IsIDAsIHNpemVvZihzdHJ1Y3QgZGMzOTBfYWNiKSk7Ci0KLQlkYzM5MF9jaGVja19lZXByb20ocGRldiwgZGMzOTBfYWRhcHRlckNudCk7Ci0JZGMzOTBfZWVwcm9tX292ZXJyaWRlKGRjMzkwX2FkYXB0ZXJDbnQpOwotCi0JaW9fcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQotCXNob3N0LT50aGlzX2lkID0gZGMzOTBfZWVwcm9tQnVmW2RjMzkwX2FkYXB0ZXJDbnRdW0VFX0FEQVBUX1NDU0lfSURdOwotCXNob3N0LT5pb19wb3J0ID0gaW9fcG9ydDsKLQlzaG9zdC0+bl9pb19wb3J0ID0gMHg4MDsKLQlzaG9zdC0+aXJxID0gcGRldi0+aXJxOwotCXNob3N0LT5iYXNlID0gaW9fcG9ydDsKLQlzaG9zdC0+dW5pcXVlX2lkID0gaW9fcG9ydDsKLQotCXBBQ0ItPmxhc3RfcmVzZXQgPSBqaWZmaWVzOwotCXBBQ0ItPnBTY3NpSG9zdCA9IHNob3N0OwotCXBBQ0ItPklPUG9ydEJhc2UgPSAodTE2KSBpb19wb3J0OwotCXBBQ0ItPklSUUxldmVsID0gcGRldi0+aXJxOwotCQotCXNob3N0LT5tYXhfaWQgPSA4OwotCi0JaWYgKHNob3N0LT5tYXhfaWQgLSAxID09Ci0JICAgIGRjMzkwX2VlcHJvbUJ1ZltkYzM5MF9hZGFwdGVyQ250XVtFRV9BREFQVF9TQ1NJX0lEXSkKLQkJc2hvc3QtPm1heF9pZC0tOwotCi0JaWYgKGRjMzkwX2VlcHJvbUJ1ZltkYzM5MF9hZGFwdGVyQ250XVtFRV9NT0RFMl0gJiBMVU5fQ0hFQ0spCi0JCXNob3N0LT5tYXhfbHVuID0gODsKLQllbHNlCi0JCXNob3N0LT5tYXhfbHVuID0gMTsKLQotCXBBQ0ItPnBGcmVlU1JCID0gcEFDQi0+U1JCX2FycmF5OwotCXBBQ0ItPlNSQkNvdW50ID0gTUFYX1NSQl9DTlQ7Ci0JcEFDQi0+QWRhcHRlckluZGV4ID0gZGMzOTBfYWRhcHRlckNudDsKLQlwQUNCLT5UYWdNYXhOdW0gPQotCQkyIDw8IGRjMzkwX2VlcHJvbUJ1ZltkYzM5MF9hZGFwdGVyQ250XVtFRV9UQUdfQ01EX05VTV07Ci0JcEFDQi0+R21vZGUyID0gZGMzOTBfZWVwcm9tQnVmW2RjMzkwX2FkYXB0ZXJDbnRdW0VFX01PREUyXTsKLQotCWZvciAoaSA9IDA7IGkgPCBwQUNCLT5TUkJDb3VudC0xOyBpKyspCi0JCXBBQ0ItPlNSQl9hcnJheVtpXS5wTmV4dFNSQiA9ICZwQUNCLT5TUkJfYXJyYXlbaSsxXTsKLQlwQUNCLT5TUkJfYXJyYXlbcEFDQi0+U1JCQ291bnQtMV0ucE5leHRTUkIgPSBOVUxMOwotCXBBQ0ItPnBUbXBTUkIgPSAmcEFDQi0+VG1wU1JCOwotCi0JcEFDQi0+c2VsX3RpbWVvdXQgPSBTRUxfVElNRU9VVDsKLQlwQUNCLT5nbGl0Y2hfY2ZnID0gRUFURVJfMjVOUzsKLQlwQUNCLT5wZGV2ID0gcGRldjsKLQotCWlmICghcmVxdWVzdF9yZWdpb24oaW9fcG9ydCwgc2hvc3QtPm5faW9fcG9ydCwgInRtc2NzaW0iKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkRDMzkwOiByZWdpc3RlciBJTyBwb3J0cyBlcnJvciFcbiIpOwotCQlnb3RvIG91dF9ob3N0X3B1dDsKLQl9Ci0KLQkvKiBSZXNldCBQZW5kaW5nIElOVCAqLwotCURDMzkwX3JlYWQ4XyhJTlRfU3RhdHVzLCBpb19wb3J0KTsKLQotCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGRvX0RDMzkwX0ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkJInRtc2NzaW0iLCBwQUNCKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkRDMzkwOiByZWdpc3RlciBJUlEgZXJyb3IhXG4iKTsKLQkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247Ci0JfQotCi0JZGMzOTBfaW5pdF9odyhwQUNCLCBkYzM5MF9hZGFwdGVyQ250KTsKLQkKLQlkYzM5MF9hZGFwdGVyQ250Kys7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgc2hvc3QpOwotCi0JZXJyb3IgPSBzY3NpX2FkZF9ob3N0KHNob3N0LCAmcGRldi0+ZGV2KTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2ZyZWVfaXJxOwotCXNjc2lfc2Nhbl9ob3N0KHNob3N0KTsKLQlyZXR1cm4gMDsKLQotIG91dF9mcmVlX2lycToKLQlmcmVlX2lycShwZGV2LT5pcnEsIHBBQ0IpOwotIG91dF9yZWxlYXNlX3JlZ2lvbjoKLQlyZWxlYXNlX3JlZ2lvbihpb19wb3J0LCBzaG9zdC0+bl9pb19wb3J0KTsKLSBvdXRfaG9zdF9wdXQ6Ci0Jc2NzaV9ob3N0X3B1dChzaG9zdCk7Ci0gb3V0X2Rpc2FibGVfZGV2aWNlOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLSBvdXQ6Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGRjMzkwX3JlbW92ZV9vbmUgLSBDYWxsZWQgdG8gcmVtb3ZlIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyLgotICoKLSAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIHJlbW92ZS4KLSAqLwotc3RhdGljIHZvaWQgZGMzOTBfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwotCXN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IgPSAoc3RydWN0IGRjMzkwX2FjYiopIHNjc2lfaG9zdC0+aG9zdGRhdGE7Ci0JdTggYnZhbDsKLQotCXNjc2lfcmVtb3ZlX2hvc3Qoc2NzaV9ob3N0KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHNjc2lfaG9zdC0+aG9zdF9sb2NrLCBpZmxhZ3MpOwotCXBBQ0ItPkFDQkZsYWcgPSBSRVNFVF9ERVY7Ci0JYnZhbCA9IERDMzkwX3JlYWQ4KEN0cmxSZWcxKSB8IERJU19JTlRfT05fU0NTSV9SU1Q7Ci0JREMzOTBfd3JpdGU4IChDdHJsUmVnMSwgYnZhbCk7CS8qIGRpc2FibGUgaW50ZXJydXB0ICovCi0JaWYgKHBBQ0ItPkdtb2RlMiAmIFJTVF9TQ1NJX0JVUykKLQkJZGMzOTBfUmVzZXRTQ1NJQnVzKHBBQ0IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NzaV9ob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7Ci0KLQlmcmVlX2lycShzY3NpX2hvc3QtPmlycSwgcEFDQik7Ci0JcmVsZWFzZV9yZWdpb24oc2NzaV9ob3N0LT5pb19wb3J0LCBzY3NpX2hvc3QtPm5faW9fcG9ydCk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKLQlzY3NpX2hvc3RfcHV0KHNjc2lfaG9zdCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0bXNjc2ltX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRDUzQzk3NCwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0bXNjc2ltX3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZGMzOTBfZHJpdmVyID0gewotCS5uYW1lICAgICAgICAgICA9ICJ0bXNjc2ltIiwKLQkuaWRfdGFibGUgICAgICAgPSB0bXNjc2ltX3BjaV90YmwsCi0JLnByb2JlICAgICAgICAgID0gZGMzOTBfcHJvYmVfb25lLAotCS5yZW1vdmUgICAgICAgICA9IGRjMzkwX3JlbW92ZV9vbmUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBkYzM5MF9tb2R1bGVfaW5pdCh2b2lkKQotewotCWlmICghZGlzYWJsZV9jbHVzdGVyaW5nKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBjbHVzdGVyaW5nIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQuIElmIHlvdSBnZXQgcHJvYmxlbXMgbG9hZFxuIik7Ci0JCXByaW50ayhLRVJOX0lORk8gIiAgICAgICB3aXRoIFwiZGlzYWJsZV9jbHVzdGVyaW5nPTFcIiBhbmQgcmVwb3J0IHRvIG1haW50YWluZXJzXG4iKTsKLQl9Ci0KLQlpZiAodG1zY3NpbVswXSA9PSAtMSB8fCB0bXNjc2ltWzBdID4gMTUpIHsKLQkJdG1zY3NpbVswXSA9IDc7Ci0JCXRtc2NzaW1bMV0gPSA0OwotCQl0bXNjc2ltWzJdID0gUEFSSVRZX0NIS18gfCBUQUdfUVVFVUVJTkdfOwotCQl0bXNjc2ltWzNdID0gTU9SRTJfRFJWIHwgR1JFQVRFUl8xRyB8IFJTVF9TQ1NJX0JVUyB8IEFDVElWRV9ORUdBVElPTjsKLQkJdG1zY3NpbVs0XSA9IDI7Ci0JCXRtc2NzaW1bNV0gPSAxMDsKLQkJcHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBVc2luZyBzYWZlIHNldHRpbmdzLlxuIik7Ci0JfQotCi0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRjMzkwX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBkYzM5MF9tb2R1bGVfZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZGMzOTBfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoZGMzOTBfbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQoZGMzOTBfbW9kdWxlX2V4aXQpOwotCi0jaWZuZGVmIE1PRFVMRQotc3RhdGljIGludCBfX2luaXQgZGMzOTBfc2V0dXAgKGNoYXIgKnN0cikKLXsJCi0JaW50IGludHNbOF0saSwgaW07Ci0KLQlnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOwotCWltID0gaW50c1swXTsKLQotCWlmIChpbSA+IDYpIHsKLQkJcHJpbnRrIChLRVJOX05PVElDRSAiREMzOTA6IGlnbm9yZSBleHRyYSBwYXJhbXMhXG4iKTsKLQkJaW0gPSA2OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBpbTsgaSsrKQotCQl0bXNjc2ltW2ldID0gaW50c1tpKzFdOwotCS8qIGRjMzkwX2NoZWNrcGFyYW1zICgpOyAqLwotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJ0bXNjc2ltPSIsIGRjMzkwX3NldHVwKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Rtc2NzaW0uaCBiL2RyaXZlcnMvc2NzaS90bXNjc2ltLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMWJiNGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL3Rtc2NzaW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDU1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLTsqCUZpbGUgTmFtZSA6IFRNU0NTSU0uSAkJCQkJICAgICAgICoKLTsqCQkgICAgVEVLUkFNIERDLTM5MChUKSBQQ0kgU0NTSSBCdXMgTWFzdGVyIEhvc3QgQWRhcHRlciAgKgotOyoJCSAgICBEZXZpY2UgRHJpdmVyCQkJCSAgICAgICAqCi07KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAkSWQ6IHRtc2NzaW0uaCx2IDIuMTUuMi4zIDIwMDAvMTEvMTcgMjA6NTI6MjcgZ2FybG9mZiBFeHAgJCAqLwotCi0jaWZuZGVmIF9UTVNDU0lNX0gKLSNkZWZpbmUgX1RNU0NTSU1fSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2RlZmluZSBTQ1NJX0lSUV9OT05FIDI1NQotCi0jZGVmaW5lIE1BWF9BREFQVEVSX05VTSAJNAotI2RlZmluZSBNQVhfU0dfTElTVF9CVUYgCTE2CS8qIE5vdCB1c2VkICovCi0jZGVmaW5lIE1BWF9TQ1NJX0lECQk4Ci0jZGVmaW5lIE1BWF9TUkJfQ05UCQk1MAkvKiBNYXggbnVtYmVyIG9mIHN0YXJ0ZWQgY29tbWFuZHMgKi8KLQotI2RlZmluZSBTRUxfVElNRU9VVAkJMTUzCS8qIDI1MCBtcyBzZWxlY3Rpb24gdGltZW91dCAoQCA0MCBNSHopICovCi0KLS8qCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTsgU0NTSSBSZXF1ZXN0IEJsb2NrCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi1zdHJ1Y3QgZGMzOTBfc3JiCi17Ci0vL3U4CQlDbWRCbG9ja1sxMl07Ci0KLXN0cnVjdCBkYzM5MF9zcmIJKnBOZXh0U1JCOwotc3RydWN0IGRjMzkwX2RjYgkqcFNSQkRDQjsKLXN0cnVjdCBzY3NpX2NtbmQJKnBjbWQ7Ci1zdHJ1Y3Qgc2NhdHRlcmxpc3QJKnBTZWdtZW50TGlzdDsKLQotc3RydWN0IHNjYXR0ZXJsaXN0IFNlZ21lbnR4OwkvKiBtYWtlIGEgb25lIGVudHJ5IG9mIFMvRyBsaXN0IHRhYmxlICovCi0KLXVuc2lnbmVkIGxvbmcJU0dCdXNBZGRyOwkvKjthIHNlZ21lbnQgc3RhcnRpbmcgYWRkcmVzcyBhcyBzZWVuIGJ5IEFNNTNDOTc0QQotCQkJCSAgaW4gQ1BVIGVuZGlhbm5lc3MuIFdlJ3JlIG9ubHkgZ2V0dGluZyAzMi1iaXQgYnVzCi0JCQkJICBhZGRyZXNzZXMgYnkgZGVmYXVsdCAqLwotdW5zaWduZWQgbG9uZwlTR1RvQmVYZmVyTGVuOwkvKjsgdG8gYmUgeGZlciBsZW5ndGggKi8KLXVuc2lnbmVkIGxvbmcJVG90YWxYZmVycmVkTGVuOwotdW5zaWduZWQgbG9uZwlTYXZlZFRvdFhMZW47Ci11bnNpZ25lZCBsb25nCVNhdmVkX1B0cjsKLXUzMgkJU1JCU3RhdGU7Ci0KLXU4CQlTUkJTdGF0dXM7Ci11OAkJU1JCRmxhZzsJLyo7IGIwLUF1dG9SZXFTZW5zZSxiNi1SZWFkLGI3LXdyaXRlICovCi0JCQkJLyo7IGI0LXNldHRpbWVvdXQsYjUtUmVzaWR1YWwgdmFsaWQgKi8KLXU4CQlBZGFwdFN0YXR1czsKLXU4CQlUYXJnZXRTdGF0dXM7Ci0KLXU4CQlTY3NpUGhhc2U7Ci1zOAkJVGFnTnVtYmVyOwotdTgJCVNHSW5kZXg7Ci11OAkJU0djb3VudDsKLQotdTgJCU1zZ0NudDsKLXU4CQlFbmRNZXNzYWdlOwotCi11OAkJTXNnSW5CdWZbNl07Ci11OAkJTXNnT3V0QnVmWzZdOwotCi0vL3U4CQlJT1JCRmxhZzsJLyo7ODFoLVJlc2V0LCAyLXJldHJ5ICovCi19OwotCi0KLS8qCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTsgRGV2aWNlIENvbnRyb2wgQmxvY2sKLTstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLXN0cnVjdCBkYzM5MF9kY2IKLXsKLXN0cnVjdCBkYzM5MF9kY2IJKnBOZXh0RENCOwotc3RydWN0IGRjMzkwX2FjYgkqcERDQkFDQjsKLQotLyogUXVldWVkIFNSQnMgKi8KLXN0cnVjdCBkYzM5MF9zcmIJKnBHb2luZ1NSQjsKLXN0cnVjdCBkYzM5MF9zcmIJKnBHb2luZ0xhc3Q7Ci1zdHJ1Y3QgZGMzOTBfc3JiCSpwQWN0aXZlU1JCOwotdTgJCUdvaW5nU1JCQ250OwotCi11MzIJCVRhZ01hc2s7Ci0KLXU4CQlUYXJnZXRJRDsJLyo7IFNDU0kgVGFyZ2V0IElEICAoU0NTSSBPbmx5KSAqLwotdTgJCVRhcmdldExVTjsJLyo7IFNDU0kgTG9nLiAgVW5pdCAoU0NTSSBPbmx5KSAqLwotdTgJCURldk1vZGU7Ci11OAkJRENCRmxhZzsKLQotdTgJCUN0cmxSMTsKLXU4CQlDdHJsUjM7Ci11OAkJQ3RybFI0OwotCi11OAkJU3luY01vZGU7CS8qOyAwOmFzeW5jIG1vZGUgKi8KLXU4CQlOZWdvUGVyaW9kOwkvKjtmb3IgbmVnby4gKi8KLXU4CQlTeW5jUGVyaW9kOwkvKjtmb3IgcmVnLiAqLwotdTgJCVN5bmNPZmZzZXQ7CS8qO2ZvciByZWcuIGFuZCBuZWdvLihsb3cgbmliYmxlKSAqLwotfTsKLQotCi0vKgotOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi07IEFkYXB0ZXIgQ29udHJvbCBCbG9jawotOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotc3RydWN0IGRjMzkwX2FjYgotewotc3RydWN0IFNjc2lfSG9zdCAqcFNjc2lIb3N0OwotdTE2CQlJT1BvcnRCYXNlOwotdTgJCUlSUUxldmVsOwotdTgJCXN0YXR1czsKLQotdTgJCVNSQkNvdW50OwotdTgJCUFkYXB0ZXJJbmRleDsJLyo7IG50aCBBZGFwdGVyIHRoaXMgZHJpdmVyICovCi11OAkJRENCQ250OwotCi11OAkJVGFnTWF4TnVtOwotdTgJCUFDQkZsYWc7Ci11OAkJR21vZGUyOwotdTgJCXNjYW5fZGV2aWNlczsKLQotc3RydWN0IGRjMzkwX2RjYgkqcExpbmtEQ0I7Ci1zdHJ1Y3QgZGMzOTBfZGNiCSpwTGFzdERDQjsKLXN0cnVjdCBkYzM5MF9kY2IJKnBEQ0JSdW5Sb2JpbjsKLQotc3RydWN0IGRjMzkwX2RjYgkqcEFjdGl2ZURDQjsKLXN0cnVjdCBkYzM5MF9zcmIJKnBGcmVlU1JCOwotc3RydWN0IGRjMzkwX3NyYgkqcFRtcFNSQjsKLQotdTgJCW1zZ2luMTIzWzRdOwotdTgJCUNvbm5lY3RlZDsKLXU4CQlwYWQ7Ci0KLSNpZiBkZWZpbmVkKFVTRV9TUElOTE9DS1MpICYmIFVTRV9TUElOTE9DS1MgPiAxICYmIChkZWZpbmVkKENPTkZJR19TTVApIHx8IERFQlVHX1NQSU5MT0NLUyA+IDApCi1zcGlubG9ja190CWxvY2s7Ci0jZW5kaWYKLXU4CQlzZWxfdGltZW91dDsKLXU4CQlnbGl0Y2hfY2ZnOwotCi11OAkJTXNnTGVuOwotdTgJCUlnbm9yZV9JUlE7CS8qIE5vdCB1c2VkICovCi0KLXN0cnVjdCBwY2lfZGV2CSpwZGV2OwotCi11bnNpZ25lZCBsb25nICAgbGFzdF9yZXNldDsKLXVuc2lnbmVkIGxvbmcJQ21kczsKLXUzMgkJU2VsTG9zdDsKLXUzMgkJU2VsQ29ubjsKLXUzMgkJQ21kSW5ROwotdTMyCQlDbWRPdXRPZlNSQjsKLQotc3RydWN0IGRjMzkwX3NyYglUbXBTUkI7Ci1zdHJ1Y3QgZGMzOTBfc3JiCVNSQl9hcnJheVtNQVhfU1JCX0NOVF07IAkvKiA1MCBTUkJzICovCi19OwotCi0KLS8qOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi0jZGVmaW5lIEJJVDMxCTB4ODAwMDAwMDAKLSNkZWZpbmUgQklUMzAJMHg0MDAwMDAwMAotI2RlZmluZSBCSVQyOQkweDIwMDAwMDAwCi0jZGVmaW5lIEJJVDI4CTB4MTAwMDAwMDAKLSNkZWZpbmUgQklUMjcJMHgwODAwMDAwMAotI2RlZmluZSBCSVQyNgkweDA0MDAwMDAwCi0jZGVmaW5lIEJJVDI1CTB4MDIwMDAwMDAKLSNkZWZpbmUgQklUMjQJMHgwMTAwMDAwMAotI2RlZmluZSBCSVQyMwkweDAwODAwMDAwCi0jZGVmaW5lIEJJVDIyCTB4MDA0MDAwMDAKLSNkZWZpbmUgQklUMjEJMHgwMDIwMDAwMAotI2RlZmluZSBCSVQyMAkweDAwMTAwMDAwCi0jZGVmaW5lIEJJVDE5CTB4MDAwODAwMDAKLSNkZWZpbmUgQklUMTgJMHgwMDA0MDAwMAotI2RlZmluZSBCSVQxNwkweDAwMDIwMDAwCi0jZGVmaW5lIEJJVDE2CTB4MDAwMTAwMDAKLSNkZWZpbmUgQklUMTUJMHgwMDAwODAwMAotI2RlZmluZSBCSVQxNAkweDAwMDA0MDAwCi0jZGVmaW5lIEJJVDEzCTB4MDAwMDIwMDAKLSNkZWZpbmUgQklUMTIJMHgwMDAwMTAwMAotI2RlZmluZSBCSVQxMQkweDAwMDAwODAwCi0jZGVmaW5lIEJJVDEwCTB4MDAwMDA0MDAKLSNkZWZpbmUgQklUOQkweDAwMDAwMjAwCi0jZGVmaW5lIEJJVDgJMHgwMDAwMDEwMAotI2RlZmluZSBCSVQ3CTB4MDAwMDAwODAKLSNkZWZpbmUgQklUNgkweDAwMDAwMDQwCi0jZGVmaW5lIEJJVDUJMHgwMDAwMDAyMAotI2RlZmluZSBCSVQ0CTB4MDAwMDAwMTAKLSNkZWZpbmUgQklUMwkweDAwMDAwMDA4Ci0jZGVmaW5lIEJJVDIJMHgwMDAwMDAwNAotI2RlZmluZSBCSVQxCTB4MDAwMDAwMDIKLSNkZWZpbmUgQklUMAkweDAwMDAwMDAxCi0KLS8qOy0tLVVuaXRDdHJsRmxhZyAqLwotI2RlZmluZSBVTklUX0FMTE9DQVRFRAlCSVQwCi0jZGVmaW5lIFVOSVRfSU5GT19DSEFOR0VEIEJJVDEKLSNkZWZpbmUgRk9STUFUSU5HX01FRElBIEJJVDIKLSNkZWZpbmUgVU5JVF9SRVRSWQlCSVQzCi0KLS8qOy0tLVVuaXRGbGFncyAqLwotI2RlZmluZSBEQVNEX1NVUFBPUlQJQklUMAotI2RlZmluZSBTQ1NJX1NVUFBPUlQJQklUMQotI2RlZmluZSBBU1BJX1NVUFBPUlQJQklUMgotCi0vKjstLS0tU1JCU3RhdGUgbWFjaGluZSBkZWZpbml0aW9uICovCi0jZGVmaW5lIFNSQl9GUkVFCTAKLSNkZWZpbmUgU1JCX1dBSVQJQklUMAotI2RlZmluZSBTUkJfUkVBRFkJQklUMQotI2RlZmluZSBTUkJfTVNHT1VUCUJJVDIJLyo7YXJiaXRyYXRpb24rbXNnX291dCAxc3QgYnl0ZSovCi0jZGVmaW5lIFNSQl9NU0dJTglCSVQzCi0jZGVmaW5lIFNSQl9NU0dJTl9NVUxUSSBCSVQ0Ci0jZGVmaW5lIFNSQl9DT01NQU5ECUJJVDUKLSNkZWZpbmUgU1JCX1NUQVJUXwlCSVQ2CS8qO2FyYml0cmF0aW9uK21zZ19vdXQrY29tbWFuZF9vdXQqLwotI2RlZmluZSBTUkJfRElTQ09OTkVDVAlCSVQ3Ci0jZGVmaW5lIFNSQl9EQVRBX1hGRVIJQklUOAotI2RlZmluZSBTUkJfWEZFUlBBRAlCSVQ5Ci0jZGVmaW5lIFNSQl9TVEFUVVMJQklUMTAKLSNkZWZpbmUgU1JCX0NPTVBMRVRFRAlCSVQxMQotI2RlZmluZSBTUkJfQUJPUlRfU0VOVAlCSVQxMgotI2RlZmluZSBET19TWU5DX05FR08JQklUMTMKLSNkZWZpbmUgU1JCX1VORVhQRUNUX1JFU0VMIEJJVDE0Ci0KLS8qOy0tLVNSQnN0YXR1cyAqLwotI2RlZmluZSBTUkJfT0sJCUJJVDAKLSNkZWZpbmUgQUJPUlRJT04JQklUMQotI2RlZmluZSBPVkVSX1JVTglCSVQyCi0jZGVmaW5lIFVOREVSX1JVTglCSVQzCi0jZGVmaW5lIFBBUklUWV9FUlJPUglCSVQ0Ci0jZGVmaW5lIFNSQl9FUlJPUglCSVQ1Ci0KLS8qOy0tLUFDQkZsYWcgKi8KLSNkZWZpbmUgUkVTRVRfREVWCUJJVDAKLSNkZWZpbmUgUkVTRVRfREVURUNUCUJJVDEKLSNkZWZpbmUgUkVTRVRfRE9ORQlCSVQyCi0KLS8qOy0tLURDQkZsYWcgKi8KLSNkZWZpbmUgQUJPUlRfREVWXwlCSVQwCi0KLS8qOy0tLVNSQkZsYWcgKi8KLSNkZWZpbmUgREFUQU9VVCAJQklUNwotI2RlZmluZSBEQVRBSU4JCUJJVDYKLSNkZWZpbmUgUkVTSURVQUxfVkFMSUQJQklUNQotI2RlZmluZSBFTkFCTEVfVElNRVIJQklUNAotI2RlZmluZSBSRVNFVF9ERVYwCUJJVDIKLSNkZWZpbmUgQUJPUlRfREVWCUJJVDEKLSNkZWZpbmUgQVVUT19SRVFTRU5TRQlCSVQwCi0KLS8qOy0tLUFkYXB0ZXIgc3RhdHVzICovCi0jZGVmaW5lIEhfU1RBVFVTX0dPT0QJIDAKLSNkZWZpbmUgSF9TRUxfVElNRU9VVAkgMHgxMQotI2RlZmluZSBIX09WRVJfVU5ERVJfUlVOIDB4MTIKLSNkZWZpbmUgSF9VTkVYUF9CVVNfRlJFRSAweDEzCi0jZGVmaW5lIEhfVEFSR0VUX1BIQVNFX0YgMHgxNAotI2RlZmluZSBIX0lOVkFMSURfQ0NCX09QIDB4MTYKLSNkZWZpbmUgSF9MSU5LX0NDQl9CQUQJIDB4MTcKLSNkZWZpbmUgSF9CQURfVEFSR0VUX0RJUiAweDE4Ci0jZGVmaW5lIEhfRFVQTElDQVRFX0NDQiAgMHgxOQotI2RlZmluZSBIX0JBRF9DQ0JfT1JfU0cgIDB4MUEKLSNkZWZpbmUgSF9BQk9SVCAJIDB4MEZGCi0KLS8qIGNtZC0+cmVzdWx0ICovCi0jZGVmaW5lIFJFU19UQVJHRVQJCTB4MDAwMDAwRkYJLyogVGFyZ2V0IFN0YXRlICovCi0jZGVmaW5lIFJFU19UQVJHRVRfTE5YCQlTVEFUVVNfTUFTSwkvKiBPbmx5IG9mZmljaWFsIC4uLiAqLwotI2RlZmluZSBSRVNfRU5ETVNHCQkweDAwMDBGRjAwCS8qIEVuZCBNZXNzYWdlICovCi0jZGVmaW5lIFJFU19ESUQJCQkweDAwRkYwMDAwCS8qIERJRF8gY29kZXMgKi8KLSNkZWZpbmUgUkVTX0RSVgkJCTB4RkYwMDAwMDAJLyogRFJJVkVSXyBjb2RlcyAqLwotCi0jZGVmaW5lIE1LX1JFUyhkcnYsZGlkLG1zZyx0Z3QpICgoaW50KShkcnYpPDwyNCB8IChpbnQpKGRpZCk8PDE2IHwgKGludCkobXNnKTw8OCB8IChpbnQpKHRndCkpCi0jZGVmaW5lIE1LX1JFU19MTlgoZHJ2LGRpZCxtc2csdGd0KSAoKGludCkoZHJ2KTw8MjQgfCAoaW50KShkaWQpPDwxNiB8IChpbnQpKG1zZyk8PDggfCAoaW50KSh0Z3QpKQotCi0jZGVmaW5lIFNFVF9SRVNfVEFSR0VUKHdobywgdGd0KSBkbyB7IHdobyAmPSB+UkVTX1RBUkdFVDsgd2hvIHw9IChpbnQpKHRndCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFNFVF9SRVNfVEFSR0VUX0xOWCh3aG8sIHRndCkgZG8geyB3aG8gJj0gflJFU19UQVJHRVRfTE5YOyB3aG8gfD0gKGludCkodGd0KSA8PCAxOyB9IHdoaWxlICgwKQotI2RlZmluZSBTRVRfUkVTX01TRyh3aG8sIG1zZykgZG8geyB3aG8gJj0gflJFU19FTkRNU0c7IHdobyB8PSAoaW50KShtc2cpIDw8IDg7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFNFVF9SRVNfRElEKHdobywgZGlkKSBkbyB7IHdobyAmPSB+UkVTX0RJRDsgd2hvIHw9IChpbnQpKGRpZCkgPDwgMTY7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFNFVF9SRVNfRFJWKHdobywgZHJ2KSBkbyB7IHdobyAmPSB+UkVTX0RSVjsgd2hvIHw9IChpbnQpKGRydikgPDwgMjQ7IH0gd2hpbGUgKDApCi0KLS8qOy0tLVN5bmNfTW9kZSAqLwotI2RlZmluZSBTWU5DX0RJU0FCTEUJMAotI2RlZmluZSBTWU5DX0VOQUJMRQlCSVQwCi0jZGVmaW5lIFNZTkNfTkVHT19ET05FCUJJVDEKLSNkZWZpbmUgV0lERV9FTkFCTEUJQklUMgkvKiBOb3QgdXNlZCA7LSkgKi8KLSNkZWZpbmUgV0lERV9ORUdPX0RPTkUJQklUMwkvKiBOb3QgdXNlZCA7LSkgKi8KLSNkZWZpbmUgRU5fVEFHX1FVRVVFSU5HCUJJVDQKLSNkZWZpbmUgRU5fQVROX1NUT1AJQklUNQotCi0jZGVmaW5lIFNZTkNfTkVHT19PRkZTRVQgMTUKLQotLyo7LS0tU0NTSSBidXMgcGhhc2UqLwotI2RlZmluZSBTQ1NJX0RBVEFfT1VUCTAKLSNkZWZpbmUgU0NTSV9EQVRBX0lOCTEKLSNkZWZpbmUgU0NTSV9DT01NQU5ECTIKLSNkZWZpbmUgU0NTSV9TVEFUVVNfCTMKLSNkZWZpbmUgU0NTSV9OT1AwCTQKLSNkZWZpbmUgU0NTSV9OT1AxCTUKLSNkZWZpbmUgU0NTSV9NU0dfT1VUCTYKLSNkZWZpbmUgU0NTSV9NU0dfSU4JNwotCi0vKjstLS0tU0NTSSBNU0cgQllURSovIC8qIHNlZSBzY3NpL3Njc2kuaCAqLyAvKiBPbmUgaXMgbWlzc2luZyAhICovCi0jZGVmaW5lIEFCT1JUX1RBRwkweDBkCi0KLS8qCi0gKglTSVNDIHF1ZXJ5IHF1ZXVlCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlkbWFfYWRkcl90CQlzYXZlZF9kbWFfaGFuZGxlOwotfSBkYzM5MF9jbWRfc2NwX3Q7Ci0KLS8qCi07PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotOyBFRVBST00gYnl0ZSBvZmZzZXQKLTs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdHlwZWRlZiAgc3RydWN0ICBfRUVwcm9tCi17Ci11OAlFRV9NT0RFMTsKLXU4CUVFX1NQRUVEOwotdTgJeHgxOwotdTgJeHgyOwotfSBFRXByb20sICpQRUVwcm9tOwotCi0jZGVmaW5lIFJFQUxfRUVfQURBUFRfU0NTSV9JRCA2NAotI2RlZmluZSBSRUFMX0VFX01PREUyCTY1Ci0jZGVmaW5lIFJFQUxfRUVfREVMQVkJNjYKLSNkZWZpbmUgUkVBTF9FRV9UQUdfQ01EX05VTQk2NwotCi0jZGVmaW5lIEVFX0FEQVBUX1NDU0lfSUQgMzIKLSNkZWZpbmUgRUVfTU9ERTIJMzMKLSNkZWZpbmUgRUVfREVMQVkJMzQKLSNkZWZpbmUgRUVfVEFHX0NNRF9OVU0JMzUKLQotI2RlZmluZSBFRV9MRU4JCTQwCi0KLS8qOyBFRV9NT0RFMSBiaXRzIGRlZmluaXRpb24qLwotI2RlZmluZSBQQVJJVFlfQ0hLXwlCSVQwCi0jZGVmaW5lIFNZTkNfTkVHT18JQklUMQotI2RlZmluZSBFTl9ESVNDT05ORUNUXwlCSVQyCi0jZGVmaW5lIFNFTkRfU1RBUlRfCUJJVDMKLSNkZWZpbmUgVEFHX1FVRVVFSU5HXwlCSVQ0Ci0KLS8qOyBFRV9NT0RFMiBiaXRzIGRlZmluaXRpb24qLwotI2RlZmluZSBNT1JFMl9EUlYJQklUMAotI2RlZmluZSBHUkVBVEVSXzFHCUJJVDEKLSNkZWZpbmUgUlNUX1NDU0lfQlVTCUJJVDIKLSNkZWZpbmUgQUNUSVZFX05FR0FUSU9OIEJJVDMKLSNkZWZpbmUgTk9fU0VFSyAJQklUNAotI2RlZmluZSBMVU5fQ0hFQ0sJQklUNQotCi0jZGVmaW5lIEVOQUJMRV9DRQkxCi0jZGVmaW5lIERJU0FCTEVfQ0UJMAotI2RlZmluZSBFRVBST01fUkVBRAkweDgwCi0KLS8qCi07PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotOwlBTUQgNTNDOTc0IFJlZ2lzdGVycyBiaXQgRGVmaW5pdGlvbgotOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi0vKgotOz09PT09PT09PT09PT09PT09PT09Ci07IFNDU0kgUmVnaXN0ZXIKLTs9PT09PT09PT09PT09PT09PT09PQotKi8KLQotLyo7IENvbW1hbmQgUmVnLigrMENIKSAocncpICovCi0jZGVmaW5lIERNQV9DT01NQU5ECQlCSVQ3Ci0jZGVmaW5lIE5PUF9DTUQgCQkwCi0jZGVmaW5lIENMRUFSX0ZJRk9fQ01ECQkxCi0jZGVmaW5lIFJTVF9ERVZJQ0VfQ01ECQkyCi0jZGVmaW5lIFJTVF9TQ1NJX0JVU19DTUQJMwotCi0jZGVmaW5lIElORk9fWEZFUl9DTUQJCTB4MTAKLSNkZWZpbmUgSU5JVElBVE9SX0NNRF9DTVBMVEUJMHgxMQotI2RlZmluZSBNU0dfQUNDRVBURURfQ01ECTB4MTIKLSNkZWZpbmUgWEZFUl9QQURfQllURQkJMHgxOAotI2RlZmluZSBTRVRfQVROX0NNRAkJMHgxQQotI2RlZmluZSBSRVNFVF9BVE5fQ01ECQkweDFCCi0KLSNkZWZpbmUgU0VMX1dPX0FUTgkJMHg0MQkvKiBjdXJyZW50bHkgbm90IHVzZWQgKi8KLSNkZWZpbmUgU0VMX1dfQVROCQkweDQyCi0jZGVmaW5lIFNFTF9XX0FUTl9TVE9QCQkweDQzCi0jZGVmaW5lIFNFTF9XX0FUTjMJCTB4NDYKLSNkZWZpbmUgRU5fU0VMX1JFU0VMCQkweDQ0Ci0jZGVmaW5lIERJU19TRUxfUkVTRUwJCTB4NDUJLyogY3VycmVudGx5IG5vdCB1c2VkICovCi0jZGVmaW5lIFJFU0VMCQkJMHg0MAkvKiAiICovCi0jZGVmaW5lIFJFU0VMX0FUTjMJCTB4NDcJLyogIiAqLwotCi0jZGVmaW5lIERBVEFfWEZFUl9DTUQJCUlORk9fWEZFUl9DTUQKLQotCi0vKjsgU0NTSSBTdGF0dXMgUmVnLigrMTBIKSAocikgKi8KLSNkZWZpbmUgSU5URVJSVVBUCQlCSVQ3Ci0jZGVmaW5lIElMTEVHQUxfT1BfRVJSCQlCSVQ2Ci0jZGVmaW5lIFBBUklUWV9FUlIJCUJJVDUKLSNkZWZpbmUgQ09VTlRfMl9aRVJPCQlCSVQ0Ci0jZGVmaW5lIEdST1VQX0NPREVfVkFMSUQJQklUMwotI2RlZmluZSBTQ1NJX1BIQVNFX01BU0sgCShCSVQyK0JJVDErQklUMCkgCi0vKiBCSVQyOiBNU0cgcGhhc2U7IEJJVDE6IEMvRCBwaHlzZTsgQklUMDogSS9PIHBoYXNlICovCi0KLS8qOyBJbnRlcnJ1cHQgU3RhdHVzIFJlZy4oKzE0SCkgKHIpICovCi0jZGVmaW5lIFNDU0lfUkVTRVQJCUJJVDcKLSNkZWZpbmUgSU5WQUxJRF9DTUQJCUJJVDYKLSNkZWZpbmUgRElTQ09OTkVDVEVECQlCSVQ1Ci0jZGVmaW5lIFNFUlZJQ0VfUkVRVUVTVCAJQklUNAotI2RlZmluZSBTVUNDRVNTRlVMX09QCQlCSVQzCi0jZGVmaW5lIFJFU0VMRUNURUQJCUJJVDIKLSNkZWZpbmUgU0VMX0FUVEVOVElPTgkJQklUMQotI2RlZmluZSBTRUxFQ1RFRAkJQklUMAotCi0vKjsgSW50ZXJuYWwgU3RhdGUgUmVnLigrMThIKSAocikgKi8KLSNkZWZpbmUgU1lOQ19PRkZTRVRfRkxBRwlCSVQzCi0jZGVmaW5lIElOVFJOX1NUQVRFX01BU0sJKEJJVDIrQklUMStCSVQwKQotLyogMHgwNDogU2VsLiBzdWNjZXNzZnVsICh3L28gc3RvcCksIDB4MDE6IFNlbC4gc3VjY2Vzc2Z1bCAody8gc3RvcCkgKi8KLQotLyo7IENsb2NrIEZhY3RvciBSZWcuKCsyNEgpICh3KSAqLwotI2RlZmluZSBDTEtfRlJFUV80ME1IWgkJMAotI2RlZmluZSBDTEtfRlJFUV8zNU1IWgkJKEJJVDIrQklUMStCSVQwKQotI2RlZmluZSBDTEtfRlJFUV8zME1IWgkJKEJJVDIrQklUMSkKLSNkZWZpbmUgQ0xLX0ZSRVFfMjVNSFoJCShCSVQyK0JJVDApCi0jZGVmaW5lIENMS19GUkVRXzIwTUhaCQlCSVQyCi0jZGVmaW5lIENMS19GUkVRXzE1TUhaCQkoQklUMStCSVQwKQotI2RlZmluZSBDTEtfRlJFUV8xME1IWgkJQklUMQotCi0vKjsgQ29udHJvbCBSZWcuIDEoKzIwSCkgKHJ3KSAqLwotI2RlZmluZSBFWFRFTkRFRF9USU1JTkcgCUJJVDcKLSNkZWZpbmUgRElTX0lOVF9PTl9TQ1NJX1JTVAlCSVQ2Ci0jZGVmaW5lIFBBUklUWV9FUlJfUkVQTyAJQklUNAotI2RlZmluZSBTQ1NJX0lEX09OX0JVUwkJKEJJVDIrQklUMStCSVQwKSAvKiBob3N0IGFkYXB0ZXIgSUQgKi8KLQotLyo7IENvbnRyb2wgUmVnLiAyKCsyQ0gpIChydykgKi8KLSNkZWZpbmUgRU5fRkVBVFVSRQkJQklUNgotI2RlZmluZSBFTl9TQ1NJMl9DTUQJCUJJVDMKLQotLyo7IENvbnRyb2wgUmVnLiAzKCszMEgpIChydykgKi8KLSNkZWZpbmUgSURfTVNHX0NIRUNLCQlCSVQ3Ci0jZGVmaW5lIEVOX1FUQUdfTVNHCQlCSVQ2Ci0jZGVmaW5lIEVOX0dSUDJfQ01ECQlCSVQ1Ci0jZGVmaW5lIEZBU1RfU0NTSQkJQklUNAkvKiA7MTBNQi9TRUMgKi8KLSNkZWZpbmUgRkFTVF9DTEsJCUJJVDMJLyogOzI1IC0gNDAgTUhaICovCi0KLS8qOyBDb250cm9sIFJlZy4gNCgrMzRIKSAocncpICovCi0jZGVmaW5lIEVBVEVSXzEyTlMJCTAKLSNkZWZpbmUgRUFURVJfMjVOUwkJQklUNwotI2RlZmluZSBFQVRFUl8zNU5TCQlCSVQ2Ci0jZGVmaW5lIEVBVEVSXzBOUwkJKEJJVDcrQklUNikKLSNkZWZpbmUgUkVEVUNFRF9QT1dFUgkJQklUNQotI2RlZmluZSBDVFJMNF9SRVNFUlZFRAkJQklUNAkvKiBtdXN0IGJlIDEgYWNjLiB0byBBTTUzQzk3NC5jICovCi0jZGVmaW5lIE5FR0FURV9SRVFBQ0tEQVRBCUJJVDIKLSNkZWZpbmUgTkVHQVRFX1JFUUFDSwkJQklUMwotCi0jZGVmaW5lIEdMSVRDSF9UT19OUyh4KSAoKCh+eD4+NiAmIDIpID4+IDEpIHwgKCh4Pj42ICYgMSkgPDwgMSBeICh4Pj42ICYgMikpKQotI2RlZmluZSBOU19UT19HTElUQ0goeSkgKCgofnk8PDcpIHwgfigoeTw8NikgXiAoKHk8PDUgJiAxPDw2KSB8IH4weDQwKSkpICYgMHhjMCkKLQotLyoKLTs9PT09PT09PT09PT09PT09PT09PQotOyBETUEgUmVnaXN0ZXIKLTs9PT09PT09PT09PT09PT09PT09PQotKi8KLS8qOyBETUEgQ29tbWFuZCBSZWcuKCs0MEgpIChydykgKi8KLSNkZWZpbmUgUkVBRF9ESVJFQ1RJT04JCUJJVDcKLSNkZWZpbmUgV1JJVEVfRElSRUNUSU9OIAkwCi0jZGVmaW5lIEVOX0RNQV9JTlQJCUJJVDYKLSNkZWZpbmUgRU5fUEFHRV9JTlQJCUJJVDUJLyogcGFnZSB0cmFuc2ZlciBpbnRlcnJ1cHQgZW5hYmxlICovCi0jZGVmaW5lIE1BUF9UT19NREwJCUJJVDQKLSNkZWZpbmUgRElBR05PU1RJQwkJQklUMgotI2RlZmluZSBETUFfSURMRV9DTUQJCTAKLSNkZWZpbmUgRE1BX0JMQVNUX0NNRAkJQklUMAotI2RlZmluZSBETUFfQUJPUlRfQ01ECQlCSVQxCi0jZGVmaW5lIERNQV9TVEFSVF9DTUQJCShCSVQxK0JJVDApCi0KLS8qOyBETUEgU3RhdHVzIFJlZy4oKzU0SCkgKHIpICovCi0jZGVmaW5lIFBDSV9NU19BQk9SVAkJQklUNgotI2RlZmluZSBCTEFTVF9DT01QTEVURQkJQklUNQotI2RlZmluZSBTQ1NJX0lOVEVSUlVQVAkJQklUNAotI2RlZmluZSBETUFfWEZFUl9ET05FCQlCSVQzCi0jZGVmaW5lIERNQV9YRkVSX0FCT1JUCQlCSVQyCi0jZGVmaW5lIERNQV9YRkVSX0VSUk9SCQlCSVQxCi0jZGVmaW5lIFBPV0VSX0RPV04JCUJJVDAKLQotLyo7IERNQSBTQ1NJIEJ1cyBhbmQgQ3RybC4oKzcwSCkgKi8KLSNkZWZpbmUgRU5fSU5UX09OX1BDSV9BQk9SVAlCSVQyNQotI2RlZmluZSBXUlRfRVJBU0VfRE1BX1NUQVQJQklUMjQKLSNkZWZpbmUgUFdfRE9XTl9DVFJMCQlCSVQyMQotI2RlZmluZSBTQ1NJX0JVU1kJCUJJVDIwCi0jZGVmaW5lIFNDTEsJCQlCSVQxOQotI2RlZmluZSBTQ0FNCQkJQklUMTgKLSNkZWZpbmUgU0NTSV9MSU5FUwkJMHgwMDAzZmZmZgotCi0vKgotOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTsgU0NTSSBDaGlwIHJlZ2lzdGVyIGFkZHJlc3Mgb2Zmc2V0Ci07PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotO1JlZ2lzdGVycyBhcmUgcncgdW5sZXNzIGRlY2xhcmVkIG90aGVyd2lzZSAKLSovCi0jZGVmaW5lIEN0Y1JlZ19Mb3cJMHgwMAkvKiByCWN1cnIuIHRyYW5zZmVyIGNvdW50ICovCi0jZGVmaW5lIEN0Y1JlZ19NaWQJMHgwNAkvKiByICovCi0jZGVmaW5lIEN0Y1JlZ19IaWdoCTB4MzgJLyogciAqLwotI2RlZmluZSBTY3NpRmlmbwkweDA4Ci0jZGVmaW5lIFNjc2lDbWQgCTB4MEMKLSNkZWZpbmUgU2NzaV9TdGF0dXMJMHgxMAkvKiByICovCi0jZGVmaW5lIElOVF9TdGF0dXMJMHgxNAkvKiByICovCi0jZGVmaW5lIFN5bmNfUGVyaW9kCTB4MTgJLyogdyAqLwotI2RlZmluZSBTeW5jX09mZnNldAkweDFDCS8qIHcgKi8KLSNkZWZpbmUgQ2xrX0ZhY3RvcgkweDI0CS8qIHcgKi8KLSNkZWZpbmUgQ3RybFJlZzEJMHgyMAkKLSNkZWZpbmUgQ3RybFJlZzIJMHgyQwotI2RlZmluZSBDdHJsUmVnMwkweDMwCi0jZGVmaW5lIEN0cmxSZWc0CTB4MzQKLSNkZWZpbmUgRE1BX0NtZCAJMHg0MAotI2RlZmluZSBETUFfWGZlckNudAkweDQ0CS8qIHJ3CXN0YXJ0aW5nIHRyYW5zZmVyIGNvdW50ICgzMiBiaXQpICovCi0jZGVmaW5lIERNQV9YZmVyQWRkcgkweDQ4CS8qIHJ3CXN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3MgKDMyIGJpdCkgKi8KLSNkZWZpbmUgRE1BX1drX0J5dGVDbnRyIDB4NEMJLyogcgl3b3JraW5nIGJ5dGUgY291bnRlciAqLwotI2RlZmluZSBETUFfV2tfQWRkckNudHIgMHg1MAkvKiByCXdvcmtpbmcgYWRkcmVzcyBjb3VudGVyICovCi0jZGVmaW5lIERNQV9TdGF0dXMJMHg1NAkvKiByICovCi0jZGVmaW5lIERNQV9NRExfQWRkcgkweDU4CS8qIHJ3CXN0YXJ0aW5nIE1ETCBhZGRyZXNzICovCi0jZGVmaW5lIERNQV9Xa19NRExfQ250ciAweDVDCS8qIHIJd29ya2luZyBNREwgY291bnRlciAqLwotI2RlZmluZSBETUFfU2NzaUJ1c0N0cmwgMHg3MAkvKiBydwlTQ1NJIEJ1cywgUENJL0RNQSBDdHJsICovCi0KLSNkZWZpbmUgU3RjUmVnX0xvdwlDdGNSZWdfTG93CS8qIHcJc3RhcnQgdHJhbnNmZXIgY291bnQgKi8KLSNkZWZpbmUgU3RjUmVnX01pZAlDdGNSZWdfTWlkCS8qIHcgKi8KLSNkZWZpbmUgU3RjUmVnX0hpZ2gJQ3RjUmVnX0hpZ2gJLyogdyAqLwotI2RlZmluZSBTY3NpX0Rlc3RfSUQJU2NzaV9TdGF0dXMJLyogdyAqLwotI2RlZmluZSBTY3NpX1RpbWVPdXQJSU5UX1N0YXR1cwkvKiB3ICovCi0jZGVmaW5lIEludGVybl9TdGF0ZQlTeW5jX1BlcmlvZAkvKiByICovCi0jZGVmaW5lIEN1cnJlbnRfRmlmbwlTeW5jX09mZnNldAkvKiByCUN1cnIuIEZJRk8gLyBpbnQuIHN0YXRlICovCi0KLQotI2RlZmluZSBEQzM5MF9yZWFkOChhZGRyZXNzKQkJCVwKLQkoaW5iIChwQUNCLT5JT1BvcnRCYXNlICsgKGFkZHJlc3MpKSkKLQotI2RlZmluZSBEQzM5MF9yZWFkOF8oYWRkcmVzcywgYmFzZSkJCVwKLQkoaW5iICgodTE2KShiYXNlKSArIChhZGRyZXNzKSkpCi0KLSNkZWZpbmUgREMzOTBfcmVhZDE2KGFkZHJlc3MpCQkJXAotCShpbncgKHBBQ0ItPklPUG9ydEJhc2UgKyAoYWRkcmVzcykpKQotCi0jZGVmaW5lIERDMzkwX3JlYWQzMihhZGRyZXNzKQkJCVwKLQkoaW5sIChwQUNCLT5JT1BvcnRCYXNlICsgKGFkZHJlc3MpKSkKLQotI2RlZmluZSBEQzM5MF93cml0ZTgoYWRkcmVzcyx2YWx1ZSkJCVwKLQlvdXRiICgodmFsdWUpLCBwQUNCLT5JT1BvcnRCYXNlICsgKGFkZHJlc3MpKQotCi0jZGVmaW5lIERDMzkwX3dyaXRlOF8oYWRkcmVzcyx2YWx1ZSxiYXNlKQlcCi0Jb3V0YiAoKHZhbHVlKSwgKHUxNikoYmFzZSkgKyAoYWRkcmVzcykpCi0KLSNkZWZpbmUgREMzOTBfd3JpdGUxNihhZGRyZXNzLHZhbHVlKQkJXAotCW91dHcgKCh2YWx1ZSksIHBBQ0ItPklPUG9ydEJhc2UgKyAoYWRkcmVzcykpCi0KLSNkZWZpbmUgREMzOTBfd3JpdGUzMihhZGRyZXNzLHZhbHVlKQkJXAotCW91dGwgKCh2YWx1ZSksIHBBQ0ItPklPUG9ydEJhc2UgKyAoYWRkcmVzcykpCi0KLQotI2VuZGlmIC8qIF9UTVNDU0lNX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCmluZGV4IGQ4ZGNmMzYuLjE0ZWI1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMKKysrIGIvZHJpdmVycy9zY3NpL3UxNC0zNGYuYwpAQCAtNjk2LDI1ICs2OTYsMjUgQEAKICAgIGlmIChUTERFVihkZXYtPnR5cGUpICYmIGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkKIAogICAgICAgaWYgKHRhZ19tb2RlID09IFRBR19TSU1QTEUpIHsKLSAgICAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgTVNHX1NJTVBMRV9UQUcsIHRxZCk7CisgICAgICAgICBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHRxZCk7CiAgICAgICAgICB0YWdfc3VmZml4ID0gIiwgc2ltcGxlIHRhZ3MiOwogICAgICAgICAgfQogICAgICAgZWxzZSBpZiAodGFnX21vZGUgPT0gVEFHX09SREVSRUQpIHsKLSAgICAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgTVNHX09SREVSRURfVEFHLCB0cWQpOworICAgICAgICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB0cWQpOwogICAgICAgICAgdGFnX3N1ZmZpeCA9ICIsIG9yZGVyZWQgdGFncyI7CiAgICAgICAgICB9CiAgICAgICBlbHNlIHsKLSAgICAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgMCwgdHFkKTsKKyAgICAgICAgIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldiwgdHFkKTsKICAgICAgICAgIHRhZ19zdWZmaXggPSAiLCBubyB0YWdzIjsKICAgICAgICAgIH0KIAogICAgZWxzZSBpZiAoVExERVYoZGV2LT50eXBlKSAmJiBsaW5rZWRfY29tbSkgewotICAgICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB0cWQpOworICAgICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB0cWQpOwogICAgICAgdGFnX3N1ZmZpeCA9ICIsIHVudGFnZ2VkIjsKICAgICAgIH0KIAogICAgZWxzZSB7Ci0gICAgICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXYsIDAsIHV0cWQpOworICAgICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB1dHFkKTsKICAgICAgIHRhZ19zdWZmaXggPSAiIjsKICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QtcGx0ZnJtLmMgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC1wbHRmcm0uYwppbmRleCA4YWRmMDY3Li4xYzM0NjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC1wbHRmcm0uYworKysgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC1wbHRmcm0uYwpAQCAtMTAyLDcgKzEwMiw2IEBACiAJY2xrZnJlcSA9IGRldm1fa3phbGxvYyhkZXYsIHN6ICogc2l6ZW9mKCpjbGtmcmVxKSwKIAkJCUdGUF9LRVJORUwpOwogCWlmICghY2xrZnJlcSkgewotCQlkZXZfZXJyKGRldiwgIiVzOiBubyBtZW1vcnlcbiIsICJmcmVxLXRhYmxlLWh6Iik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTExMiwxOSArMTExLDE5IEBACiAJaWYgKHJldCAmJiAocmV0ICE9IC1FSU5WQUwpKSB7CiAJCWRldl9lcnIoZGV2LCAiJXM6IGVycm9yIHJlYWRpbmcgYXJyYXkgJWRcbiIsCiAJCQkJImZyZXEtdGFibGUtaHoiLCByZXQpOwotCQlnb3RvIGZyZWVfY2xrZnJlcTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3o7IGkgKz0gMikgewogCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChucCwKIAkJCQkiY2xvY2stbmFtZXMiLCBpLzIsIChjb25zdCBjaGFyICoqKSZuYW1lKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gZnJlZV9jbGtmcmVxOworCQkJZ290byBvdXQ7CiAKIAkJY2xraSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2xraSksIEdGUF9LRVJORUwpOwogCQlpZiAoIWNsa2kpIHsKIAkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGZyZWVfY2xrZnJlcTsKKwkJCWdvdG8gb3V0OwogCQl9CiAKIAkJY2xraS0+bWluX2ZyZXEgPSBjbGtmcmVxW2ldOwpAQCAtMTM0LDggKzEzMyw2IEBACiAJCQkJY2xraS0+bWluX2ZyZXEsIGNsa2ktPm1heF9mcmVxLCBjbGtpLT5uYW1lKTsKIAkJbGlzdF9hZGRfdGFpbCgmY2xraS0+bGlzdCwgJmhiYS0+Y2xrX2xpc3RfaGVhZCk7CiAJfQotZnJlZV9jbGtmcmVxOgotCWtmcmVlKGNsa2ZyZXEpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xNjIsMTAgKzE1OSw4IEBACiAJfQogCiAJdnJlZyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqdnJlZyksIEdGUF9LRVJORUwpOwotCWlmICghdnJlZykgewotCQlkZXZfZXJyKGRldiwgIk5vIG1lbW9yeSBmb3IgJXMgcmVndWxhdG9yXG4iLCBuYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICghdnJlZykKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAl2cmVnLT5uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuYyBiL2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmMKaW5kZXggNDk3YzM4YS4uMmU0NjE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuYworKysgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jCkBAIC03NDQsNiArNzQ0LDggQEAKIAlpZiAoIXVmc2hjZF9pc19jbGtnYXRpbmdfYWxsb3dlZChoYmEpKQogCQlyZXR1cm47CiAJZGV2aWNlX3JlbW92ZV9maWxlKGhiYS0+ZGV2LCAmaGJhLT5jbGtfZ2F0aW5nLmRlbGF5X2F0dHIpOworCWNhbmNlbF93b3JrX3N5bmMoJmhiYS0+Y2xrX2dhdGluZy51bmdhdGVfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZoYmEtPmNsa19nYXRpbmcuZ2F0ZV93b3JrKTsKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBob3N0IGxvY2sgYWNxdWlyZWQgKi8KQEAgLTIyNDYsNiArMjI0OCwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKKyAvKioKKyAqIHVmc2hjZF9pbml0X3B3cl9pbmZvIC0gc2V0dGluZyB0aGUgUE9SIChwb3dlciBvbiByZXNldCkKKyAqIHZhbHVlcyBpbiBoYmEgcG93ZXIgaW5mbworICogQGhiYTogcGVyLWFkYXB0ZXIgaW5zdGFuY2UKKyAqLworc3RhdGljIHZvaWQgdWZzaGNkX2luaXRfcHdyX2luZm8oc3RydWN0IHVmc19oYmEgKmhiYSkKK3sKKwloYmEtPnB3cl9pbmZvLmdlYXJfcnggPSBVRlNfUFdNX0cxOworCWhiYS0+cHdyX2luZm8uZ2Vhcl90eCA9IFVGU19QV01fRzE7CisJaGJhLT5wd3JfaW5mby5sYW5lX3J4ID0gMTsKKwloYmEtPnB3cl9pbmZvLmxhbmVfdHggPSAxOworCWhiYS0+cHdyX2luZm8ucHdyX3J4ID0gU0xPV0FVVE9fTU9ERTsKKwloYmEtPnB3cl9pbmZvLnB3cl90eCA9IFNMT1dBVVRPX01PREU7CisJaGJhLT5wd3JfaW5mby5oc19yYXRlID0gMDsKK30KKwogLyoqCiAgKiB1ZnNoY2RfZ2V0X21heF9wd3JfbW9kZSAtIHJlYWRzIHRoZSBtYXggcG93ZXIgbW9kZSBuZWdvdGlhdGVkIHdpdGggZGV2aWNlCiAgKiBAaGJhOiBwZXItYWRhcHRlciBpbnN0YW5jZQpAQCAtMjY5NSw3ICsyNzEzLDcgQEAKIAogCWRldl9kYmcoaGJhLT5kZXYsICIlczogYWN0aXZhdGUgdGNxIHdpdGggcXVldWUgZGVwdGggJWRcbiIsCiAJCQlfX2Z1bmNfXywgbHVuX3FkZXB0aCk7Ci0Jc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgbHVuX3FkZXB0aCk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgbHVuX3FkZXB0aCk7CiB9CiAKIC8qCkBAIC0yNzY1LDExICsyNzgzLDkgQEAKIAlzdHJ1Y3QgdWZzX2hiYSAqaGJhOwogCiAJaGJhID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKIAogCS8qIE1vZGUgc2Vuc2UoNikgaXMgbm90IHN1cHBvcnRlZCBieSBVRlMsIHNvIHVzZSBNb2RlIHNlbnNlKDEwKSAqLwogCXNkZXYtPnVzZV8xMF9mb3JfbXMgPSAxOwotCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIE1TR19TSU1QTEVfVEFHKTsKIAogCS8qIGFsbG93IFNDU0kgbGF5ZXIgdG8gcmVzdGFydCB0aGUgZGV2aWNlIGluIGNhc2Ugb2YgZXJyb3JzICovCiAJc2Rldi0+YWxsb3dfcmVzdGFydCA9IDE7CkBAIC0yNzg5LDM0ICsyODA1LDE2IEBACiAgKiB1ZnNoY2RfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gY2hhbmdlIHF1ZXVlIGRlcHRoCiAgKiBAc2RldjogcG9pbnRlciB0byBTQ1NJIGRldmljZQogICogQGRlcHRoOiByZXF1aXJlZCBkZXB0aCB0byBzZXQKLSAqIEByZWFzb246IHJlYXNvbiBmb3IgY2hhbmdpbmcgdGhlIGRlcHRoCiAgKgotICogQ2hhbmdlIHF1ZXVlIGRlcHRoIGFjY29yZGluZyB0byB0aGUgcmVhc29uIGFuZCBtYWtlIHN1cmUKLSAqIHRoZSBtYXguIGxpbWl0cyBhcmUgbm90IGNyb3NzZWQuCisgKiBDaGFuZ2UgcXVldWUgZGVwdGggYW5kIG1ha2Ugc3VyZSB0aGUgbWF4LiBsaW1pdHMgYXJlIG5vdCBjcm9zc2VkLgogICovCi1zdGF0aWMgaW50IHVmc2hjZF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQlpbnQgZGVwdGgsIGludCByZWFzb24pCitzdGF0aWMgaW50IHVmc2hjZF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCiB7CiAJc3RydWN0IHVmc19oYmEgKmhiYSA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7CiAKIAlpZiAoZGVwdGggPiBoYmEtPm51dHJzKQogCQlkZXB0aCA9IGhiYS0+bnV0cnM7Ci0KLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6Ci0JCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJCWRlcHRoID0gMTsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9RRlVMTDoKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIGRlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiBkZXB0aDsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgZGVwdGgpOwogfQogCiAvKioKQEAgLTI4NDIsMTAgKzI4NDAsMTQgQEAKIAlzdHJ1Y3QgdWZzX2hiYSAqaGJhOwogCiAJaGJhID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKLQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIGhiYS0+bnV0cnMpOwogCS8qIERyb3AgdGhlIHJlZmVyZW5jZSBhcyBpdCB3b24ndCBiZSBuZWVkZWQgYW55bW9yZSAqLwotCWlmICh1ZnNoY2Rfc2NzaV90b191cGl1X2x1bihzZGV2LT5sdW4pID09IFVGU19VUElVX1VGU19ERVZJQ0VfV0xVTikKKwlpZiAodWZzaGNkX3Njc2lfdG9fdXBpdV9sdW4oc2Rldi0+bHVuKSA9PSBVRlNfVVBJVV9VRlNfREVWSUNFX1dMVU4pIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZShoYmEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQloYmEtPnNkZXZfdWZzX2RldmljZSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwl9CiB9CiAKIC8qKgpAQCAtNDA2Miw2ICs0MDY0LDggQEAKIHN0YXRpYyBpbnQgdWZzaGNkX3Njc2lfYWRkX3dsdXMoc3RydWN0IHVmc19oYmEgKmhiYSkKIHsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXZfcnBtYjsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXZfYm9vdDsKIAogCWhiYS0+c2Rldl91ZnNfZGV2aWNlID0gX19zY3NpX2FkZF9kZXZpY2UoaGJhLT5ob3N0LCAwLCAwLAogCQl1ZnNoY2RfdXBpdV93bHVuX3RvX3Njc2lfd2x1bihVRlNfVVBJVV9VRlNfREVWSUNFX1dMVU4pLCBOVUxMKTsKQEAgLTQwNzAsMjYgKzQwNzQsMjcgQEAKIAkJaGJhLT5zZGV2X3Vmc19kZXZpY2UgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CisJc2NzaV9kZXZpY2VfcHV0KGhiYS0+c2Rldl91ZnNfZGV2aWNlKTsKIAotCWhiYS0+c2Rldl9ib290ID0gX19zY3NpX2FkZF9kZXZpY2UoaGJhLT5ob3N0LCAwLCAwLAorCXNkZXZfYm9vdCA9IF9fc2NzaV9hZGRfZGV2aWNlKGhiYS0+aG9zdCwgMCwgMCwKIAkJdWZzaGNkX3VwaXVfd2x1bl90b19zY3NpX3dsdW4oVUZTX1VQSVVfQk9PVF9XTFVOKSwgTlVMTCk7Ci0JaWYgKElTX0VSUihoYmEtPnNkZXZfYm9vdCkpIHsKLQkJcmV0ID0gUFRSX0VSUihoYmEtPnNkZXZfYm9vdCk7Ci0JCWhiYS0+c2Rldl9ib290ID0gTlVMTDsKKwlpZiAoSVNfRVJSKHNkZXZfYm9vdCkpIHsKKwkJcmV0ID0gUFRSX0VSUihzZGV2X2Jvb3QpOwogCQlnb3RvIHJlbW92ZV9zZGV2X3Vmc19kZXZpY2U7CiAJfQorCXNjc2lfZGV2aWNlX3B1dChzZGV2X2Jvb3QpOwogCi0JaGJhLT5zZGV2X3JwbWIgPSBfX3Njc2lfYWRkX2RldmljZShoYmEtPmhvc3QsIDAsIDAsCisJc2Rldl9ycG1iID0gX19zY3NpX2FkZF9kZXZpY2UoaGJhLT5ob3N0LCAwLCAwLAogCQl1ZnNoY2RfdXBpdV93bHVuX3RvX3Njc2lfd2x1bihVRlNfVVBJVV9SUE1CX1dMVU4pLCBOVUxMKTsKLQlpZiAoSVNfRVJSKGhiYS0+c2Rldl9ycG1iKSkgewotCQlyZXQgPSBQVFJfRVJSKGhiYS0+c2Rldl9ycG1iKTsKLQkJaGJhLT5zZGV2X3JwbWIgPSBOVUxMOworCWlmIChJU19FUlIoc2Rldl9ycG1iKSkgeworCQlyZXQgPSBQVFJfRVJSKHNkZXZfcnBtYik7CiAJCWdvdG8gcmVtb3ZlX3NkZXZfYm9vdDsKIAl9CisJc2NzaV9kZXZpY2VfcHV0KHNkZXZfcnBtYik7CiAJZ290byBvdXQ7CiAKIHJlbW92ZV9zZGV2X2Jvb3Q6Ci0Jc2NzaV9yZW1vdmVfZGV2aWNlKGhiYS0+c2Rldl9ib290KTsKKwlzY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldl9ib290KTsKIHJlbW92ZV9zZGV2X3Vmc19kZXZpY2U6CiAJc2NzaV9yZW1vdmVfZGV2aWNlKGhiYS0+c2Rldl91ZnNfZGV2aWNlKTsKIG91dDoKQEAgLTQwOTcsMzAgKzQxMDIsNiBAQAogfQogCiAvKioKLSAqIHVmc2hjZF9zY3NpX3JlbW92ZV93bHVzIC0gUmVtb3ZlcyB0aGUgVy1MVXMgd2hpY2ggd2VyZSBhZGRlZCBieQotICoJCQkgICAgIHVmc2hjZF9zY3NpX2FkZF93bHVzKCkKLSAqIEBoYmE6IHBlci1hZGFwdGVyIGluc3RhbmNlCi0gKgotICovCi1zdGF0aWMgdm9pZCB1ZnNoY2Rfc2NzaV9yZW1vdmVfd2x1cyhzdHJ1Y3QgdWZzX2hiYSAqaGJhKQotewotCWlmIChoYmEtPnNkZXZfdWZzX2RldmljZSkgewotCQlzY3NpX3JlbW92ZV9kZXZpY2UoaGJhLT5zZGV2X3Vmc19kZXZpY2UpOwotCQloYmEtPnNkZXZfdWZzX2RldmljZSA9IE5VTEw7Ci0JfQotCi0JaWYgKGhiYS0+c2Rldl9ib290KSB7Ci0JCXNjc2lfcmVtb3ZlX2RldmljZShoYmEtPnNkZXZfYm9vdCk7Ci0JCWhiYS0+c2Rldl9ib290ID0gTlVMTDsKLQl9Ci0KLQlpZiAoaGJhLT5zZGV2X3JwbWIpIHsKLQkJc2NzaV9yZW1vdmVfZGV2aWNlKGhiYS0+c2Rldl9ycG1iKTsKLQkJaGJhLT5zZGV2X3JwbWIgPSBOVUxMOwotCX0KLX0KLQotLyoqCiAgKiB1ZnNoY2RfcHJvYmVfaGJhIC0gcHJvYmUgaGJhIHRvIGRldGVjdCBkZXZpY2UgYW5kIGluaXRpYWxpemUKICAqIEBoYmE6IHBlci1hZGFwdGVyIGluc3RhbmNlCiAgKgpAQCAtNDEzNCw2ICs0MTE1LDggQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAorCXVmc2hjZF9pbml0X3B3cl9pbmZvKGhiYSk7CisKIAkvKiBVbmlQcm8gbGluayBpcyBhY3RpdmUgbm93ICovCiAJdWZzaGNkX3NldF9saW5rX2FjdGl2ZShoYmEpOwogCkBAIC00MjM1LDYgKzQyMTgsOCBAQAogCS5jbWRfcGVyX2x1bgkJPSBVRlNIQ0RfQ01EX1BFUl9MVU4sCiAJLmNhbl9xdWV1ZQkJPSBVRlNIQ0RfQ0FOX1FVRVVFLAogCS5tYXhfaG9zdF9ibG9ja2VkCT0gMSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBpbnQgdWZzaGNkX2NvbmZpZ192cmVnX2xvYWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdWZzX3ZyZWcgKnZyZWcsCkBAIC00MjY0LDEyICs0MjQ5LDE4IEBACiBzdGF0aWMgaW5saW5lIGludCB1ZnNoY2RfY29uZmlnX3ZyZWdfbHBtKHN0cnVjdCB1ZnNfaGJhICpoYmEsCiAJCQkJCSBzdHJ1Y3QgdWZzX3ZyZWcgKnZyZWcpCiB7CisJaWYgKCF2cmVnKQorCQlyZXR1cm4gMDsKKwogCXJldHVybiB1ZnNoY2RfY29uZmlnX3ZyZWdfbG9hZChoYmEtPmRldiwgdnJlZywgVUZTX1ZSRUdfTFBNX0xPQURfVUEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB1ZnNoY2RfY29uZmlnX3ZyZWdfaHBtKHN0cnVjdCB1ZnNfaGJhICpoYmEsCiAJCQkJCSBzdHJ1Y3QgdWZzX3ZyZWcgKnZyZWcpCiB7CisJaWYgKCF2cmVnKQorCQlyZXR1cm4gMDsKKwogCXJldHVybiB1ZnNoY2RfY29uZmlnX3ZyZWdfbG9hZChoYmEtPmRldiwgdnJlZywgdnJlZy0+bWF4X3VBKTsKIH0KIApAQCAtNDQ3MSw3ICs0NDYyLDcgQEAKIAkJCWlmICghSVNfRVJSX09SX05VTEwoY2xraS0+Y2xrKSAmJiBjbGtpLT5lbmFibGVkKQogCQkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGtpLT5jbGspOwogCQl9Ci0JfSBlbHNlIGlmICghcmV0ICYmIG9uKSB7CisJfSBlbHNlIGlmIChvbikgewogCQlzcGluX2xvY2tfaXJxc2F2ZShoYmEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQloYmEtPmNsa19nYXRpbmcuc3RhdGUgPSBDTEtTX09OOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC00Njc1LDExICs0NjY2LDI1IEBACiB7CiAJdW5zaWduZWQgY2hhciBjbWRbNl0gPSB7IFNUQVJUX1NUT1AgfTsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZHAgPSBoYmEtPnNkZXZfdWZzX2RldmljZTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlpZiAoIXNkcCB8fCAhc2NzaV9kZXZpY2Vfb25saW5lKHNkcCkpCi0JCXJldHVybiAtRU5PREVWOworCXNwaW5fbG9ja19pcnFzYXZlKGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJc2RwID0gaGJhLT5zZGV2X3Vmc19kZXZpY2U7CisJaWYgKHNkcCkgeworCQlyZXQgPSBzY3NpX2RldmljZV9nZXQoc2RwKTsKKwkJaWYgKCFyZXQgJiYgIXNjc2lfZGV2aWNlX29ubGluZShzZHApKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJc2NzaV9kZXZpY2VfcHV0KHNkcCk7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSAtRU5PREVWOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyoKIAkgKiBJZiBzY3NpIGNvbW1hbmRzIGZhaWwsIHRoZSBzY3NpIG1pZC1sYXllciBzY2hlZHVsZXMgc2NzaSBlcnJvci0KQEAgLTQ3MDcsMTcgKzQ3MTIsMTggQEAKIAkJCQkgICAgIFNUQVJUX1NUT1BfVElNRU9VVCwgMCwgTlVMTCwgUkVRX1BNKTsKIAlpZiAocmV0KSB7CiAJCXNkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgc2RwLAotCQkJICAiU1RBUlRfU1RPUCBmYWlsZWQgZm9yIHBvd2VyIG1vZGU6ICVkXG4iLCBwd3JfbW9kZSk7Ci0JCXNjc2lfc2hvd19yZXN1bHQocmV0KTsKKwkJCSAgICAiU1RBUlRfU1RPUCBmYWlsZWQgZm9yIHBvd2VyIG1vZGU6ICVkLCByZXN1bHQgJXhcbiIsCisJCQkgICAgcHdyX21vZGUsIHJldCk7CiAJCWlmIChkcml2ZXJfYnl0ZShyZXQpICYgRFJJVkVSX1NFTlNFKSB7Ci0JCQlzY3NpX3Nob3dfc2Vuc2VfaGRyKCZzc2hkcik7Ci0JCQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzc2hkci5hc2MsIHNzaGRyLmFzY3EpOworCQkJc2NzaV9zaG93X3NlbnNlX2hkcihzZHAsIE5VTEwsICZzc2hkcik7CisJCQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzZHAsIE5VTEwsIHNzaGRyLmFzYywgc3NoZHIuYXNjcSk7CiAJCX0KIAl9CiAKIAlpZiAoIXJldCkKIAkJaGJhLT5jdXJyX2Rldl9wd3JfbW9kZSA9IHB3cl9tb2RlOwogb3V0OgorCXNjc2lfZGV2aWNlX3B1dChzZHApOwogCWhiYS0+aG9zdC0+ZWhfbm9yZXN1bWUgPSAwOwogCXJldHVybiByZXQ7CiB9CkBAIC01MDg3LDcgKzUwOTMsNyBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKCFoYmEgfHwgIWhiYS0+aXNfcG93ZXJlZCkKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCiAJaWYgKHBtX3J1bnRpbWVfc3VzcGVuZGVkKGhiYS0+ZGV2KSkgewogCQlpZiAoaGJhLT5ycG1fbHZsID09IGhiYS0+c3BtX2x2bCkKQEAgLTUyMzEsNyArNTIzNyw2IEBACiB2b2lkIHVmc2hjZF9yZW1vdmUoc3RydWN0IHVmc19oYmEgKmhiYSkKIHsKIAlzY3NpX3JlbW92ZV9ob3N0KGhiYS0+aG9zdCk7Ci0JdWZzaGNkX3Njc2lfcmVtb3ZlX3dsdXMoaGJhKTsKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAl1ZnNoY2RfZGlzYWJsZV9pbnRyKGhiYSwgaGJhLT5pbnRyX21hc2spOwogCXVmc2hjZF9oYmFfc3RvcChoYmEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuaCBiL2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmgKaW5kZXggNThlY2RmZi4uNGE1NzRhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuaAorKysgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5oCkBAIC0zOTIsOCArMzkyLDYgQEAKIAkgKiAiVUZTIGRldmljZSIgVy1MVS4KIAkgKi8KIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXZfdWZzX2RldmljZTsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXZfcnBtYjsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXZfYm9vdDsKIAogCWVudW0gdWZzX2Rldl9wd3JfbW9kZSBjdXJyX2Rldl9wd3JfbW9kZTsKIAllbnVtIHVpY19saW5rX3N0YXRlIHVpY19saW5rX3N0YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3ZpcnRpb19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvdmlydGlvX3Njc2kuYwppbmRleCBiODM4NDZmLi4yMmU3MDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdmlydGlvX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvdmlydGlvX3Njc2kuYwpAQCAtNTYxLDYgKzU2MSwxNSBAQAogCXJldHVybiB2aXJ0c2NzaV9xdWV1ZWNvbW1hbmQodnNjc2ksICZ2c2NzaS0+cmVxX3Zxc1swXSwgc2MpOwogfQogCitzdGF0aWMgc3RydWN0IHZpcnRpb19zY3NpX3ZxICp2aXJ0c2NzaV9waWNrX3ZxX21xKHN0cnVjdCB2aXJ0aW9fc2NzaSAqdnNjc2ksCisJCQkJCQkgIHN0cnVjdCBzY3NpX2NtbmQgKnNjKQoreworCXUzMiB0YWcgPSBibGtfbXFfdW5pcXVlX3RhZyhzYy0+cmVxdWVzdCk7CisJdTE2IGh3cSA9IGJsa19tcV91bmlxdWVfdGFnX3RvX2h3cSh0YWcpOworCisJcmV0dXJuICZ2c2NzaS0+cmVxX3Zxc1tod3FdOworfQorCiBzdGF0aWMgc3RydWN0IHZpcnRpb19zY3NpX3ZxICp2aXJ0c2NzaV9waWNrX3ZxKHN0cnVjdCB2aXJ0aW9fc2NzaSAqdnNjc2ksCiAJCQkJCSAgICAgICBzdHJ1Y3QgdmlydGlvX3Njc2lfdGFyZ2V0X3N0YXRlICp0Z3QpCiB7CkBAIC02MDQsNyArNjEzLDEyIEBACiAJc3RydWN0IHZpcnRpb19zY3NpICp2c2NzaSA9IHNob3N0X3ByaXYoc2gpOwogCXN0cnVjdCB2aXJ0aW9fc2NzaV90YXJnZXRfc3RhdGUgKnRndCA9CiAJCQkJc2NzaV90YXJnZXQoc2MtPmRldmljZSktPmhvc3RkYXRhOwotCXN0cnVjdCB2aXJ0aW9fc2NzaV92cSAqcmVxX3ZxID0gdmlydHNjc2lfcGlja192cSh2c2NzaSwgdGd0KTsKKwlzdHJ1Y3QgdmlydGlvX3Njc2lfdnEgKnJlcV92cTsKKworCWlmIChzaG9zdF91c2VfYmxrX21xKHNoKSkKKwkJcmVxX3ZxID0gdmlydHNjc2lfcGlja192cV9tcSh2c2NzaSwgc2MpOworCWVsc2UKKwkJcmVxX3ZxID0gdmlydHNjc2lfcGlja192cSh2c2NzaSwgdGd0KTsKIAogCXJldHVybiB2aXJ0c2NzaV9xdWV1ZWNvbW1hbmQodnNjc2ksIHJlcV92cSwgc2MpOwogfQpAQCAtNjY4LDMwICs2ODIsMTMgQEAKICAqIHZpcnRzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpIC0gQ2hhbmdlIGEgdmlydHNjc2kgdGFyZ2V0J3MgcXVldWUgZGVwdGgKICAqIEBzZGV2OglWaXJ0c2NzaSB0YXJnZXQgd2hvc2UgcXVldWUgZGVwdGggdG8gY2hhbmdlCiAgKiBAcWRlcHRoOglOZXcgcXVldWUgZGVwdGgKLSAqIEByZWFzb246CVJlYXNvbiBmb3IgdGhlIHF1ZXVlIGRlcHRoIGNoYW5nZS4KICAqLwotc3RhdGljIGludCB2aXJ0c2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJCSAgICAgICBpbnQgcWRlcHRoLAotCQkJCSAgICAgICBpbnQgcmVhc29uKQorc3RhdGljIGludCB2aXJ0c2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKIAlpbnQgbWF4X2RlcHRoID0gc2hvc3QtPmNtZF9wZXJfbHVuOwogCi0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX1FGVUxMOiAvKiBEcm9wIHFkZXB0aCBpbiByZXNwb25zZSB0byBCVVNZIHN0YXRlICovCi0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpOwotCQlicmVhazsKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6IC8qIFJhaXNlIHFkZXB0aCBhZnRlciBCVVNZIHN0YXRlIHJlc29sdmVkICovCi0JY2FzZSBTQ1NJX1FERVBUSF9ERUZBVUxUOiAvKiBNYW51YWwgY2hhbmdlIHZpYSBzeXNmcyAqLwotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LAotCQkJCQlzY3NpX2dldF90YWdfdHlwZShzZGV2KSwKLQkJCQkJbWluKG1heF9kZXB0aCwgcWRlcHRoKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIG1pbihtYXhfZGVwdGgsIHFkZXB0aCkpOwogfQogCiBzdGF0aWMgaW50IHZpcnRzY3NpX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKQpAQCAtNzU4LDYgKzc1NSw3IEBACiAJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnRhcmdldF9hbGxvYyA9IHZpcnRzY3NpX3RhcmdldF9hbGxvYywKIAkudGFyZ2V0X2Rlc3Ryb3kgPSB2aXJ0c2NzaV90YXJnZXRfZGVzdHJveSwKKwkudHJhY2tfcXVldWVfZGVwdGggPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgdmlydHNjc2lfaG9zdF90ZW1wbGF0ZV9tdWx0aSA9IHsKQEAgLTc3Niw2ICs3NzQsNyBAQAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS50YXJnZXRfYWxsb2MgPSB2aXJ0c2NzaV90YXJnZXRfYWxsb2MsCiAJLnRhcmdldF9kZXN0cm95ID0gdmlydHNjc2lfdGFyZ2V0X2Rlc3Ryb3ksCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKICNkZWZpbmUgdmlydHNjc2lfY29uZmlnX2dldCh2ZGV2LCBmbGQpIFwKQEAgLTk4Myw2ICs5ODIsNyBAQAogCXNob3N0LT5tYXhfaWQgPSBudW1fdGFyZ2V0czsKIAlzaG9zdC0+bWF4X2NoYW5uZWwgPSAwOwogCXNob3N0LT5tYXhfY21kX2xlbiA9IFZJUlRJT19TQ1NJX0NEQl9TSVpFOworCXNob3N0LT5ucl9od19xdWV1ZXMgPSBudW1fcXVldWVzOwogCiAJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fU0NTSV9GX1QxMF9QSSkpIHsKIAkJaG9zdF9wcm90ID0gU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT04gfCBTSE9TVF9ESUZfVFlQRTJfUFJPVEVDVElPTiB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jIGIvZHJpdmVycy9zY3NpL3Ztd19wdnNjc2kuYwppbmRleCA1OThmNjVlLi4wZjEzM2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMKQEAgLTUwNCwzMyArNTA0LDExIEBACiAJfQogfQogCi1zdGF0aWMgaW50IHB2c2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJCSAgICAgaW50IHFkZXB0aCwKLQkJCQkgICAgIGludCByZWFzb24pCitzdGF0aWMgaW50IHB2c2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQogewotCWludCBtYXhfZGVwdGg7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwotCi0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQkvKgotCQkgKiBXZSBzdXBwb3J0IG9ubHkgY2hhbmdpbmcgZGVmYXVsdC4KLQkJICovCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCW1heF9kZXB0aCA9IHNob3N0LT5jYW5fcXVldWU7CiAJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQltYXhfZGVwdGggPSAxOwotCWlmIChxZGVwdGggPiBtYXhfZGVwdGgpCi0JCXFkZXB0aCA9IG1heF9kZXB0aDsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgcWRlcHRoKTsKLQotCWlmIChzZGV2LT5pbnF1aXJ5X2xlbiA+IDcpCi0JCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCSAgICAicWRlcHRoKCVkKSwgdGFnZ2VkKCVkKSwgc2ltcGxlKCVkKSwgb3JkZXJlZCglZCksIHNjc2lfbGV2ZWwoJWQpLCBjbWRfcXVlKCVkKVxuIiwKLQkJCSAgICBzZGV2LT5xdWV1ZV9kZXB0aCwgc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCwKLQkJCSAgICBzZGV2LT5zaW1wbGVfdGFncywgc2Rldi0+b3JkZXJlZF90YWdzLAotCQkJICAgIHNkZXYtPnNjc2lfbGV2ZWwsIChzZGV2LT5pbnF1aXJ5WzddICYgMikgPj4gMSk7Ci0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOworCQlxZGVwdGggPSAxOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiAvKgpAQCAtNzIzLDEwICs3MDEsNiBAQAogCW1lbWNweShlLT5jZGIsIGNtZC0+Y21uZCwgZS0+Y2RiTGVuKTsKIAogCWUtPnRhZyA9IFNJTVBMRV9RVUVVRV9UQUc7Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgJiYKLQkgICAgKGNtZC0+dGFnID09IEhFQURfT0ZfUVVFVUVfVEFHIHx8Ci0JICAgICBjbWQtPnRhZyA9PSBPUkRFUkVEX1FVRVVFX1RBRykpCi0JCWUtPnRhZyA9IGNtZC0+dGFnOwogCiAJaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQogCQllLT5mbGFncyA9IFBWU0NTSV9GTEFHX0NNRF9ESVJfVE9IT1NUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkNzAwMC5jIGIvZHJpdmVycy9zY3NpL3dkNzAwMC5jCmluZGV4IDMyNjc0MjMuLmY5NGQ3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS93ZDcwMDAuYworKysgYi9kcml2ZXJzL3Njc2kvd2Q3MDAwLmMKQEAgLTE2NTMsNyArMTY1Myw2IEBACiAJLmNhbl9xdWV1ZQkJPSBXRDcwMDBfUSwKIAkudGhpc19pZAkJPSA3LAogCS5zZ190YWJsZXNpemUJCT0gV0Q3MDAwX1NHLAotCS5jbWRfcGVyX2x1bgkJPSAxLAogCS51bmNoZWNrZWRfaXNhX2RtYQk9IDEsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS93ZDcxOXguYyBiL2RyaXZlcnMvc2NzaS93ZDcxOXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzAyNjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3dkNzE5eC5jCkBAIC0wLDAgKzEsOTk2IEBACisvKgorICogRHJpdmVyIGZvciBXZXN0ZXJuIERpZ2l0YWwgV0Q3MTkzLCBXRDcxOTcgYW5kIFdENzI5NiBTQ1NJIGNhcmRzCisgKiBDb3B5cmlnaHQgMjAxMyBPbmRyZWogWmFyeQorICoKKyAqIE9yaWdpbmFsIGRyaXZlciBieQorICogQWFyb24gRGV3ZWxsIDxkZXdlbGxAd29vZHMubmV0PgorICogR2FlcnRpIDxKdWVyZ2VuLkdhZXJ0bmVyQG1ib3guc2kudW5pLWhhbm5vdmVyLmRlPgorICoKKyAqIEhXIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGluIGJvb2s6CisgKgorICogU1BJREVSIENvbW1hbmQgUHJvdG9jb2wKKyAqIGJ5IENoYW5kcnUgTS4gU2lwcHkKKyAqIFNDU0kgU3RvcmFnZSBQcm9kdWN0cyAoTUNQKQorICogV2VzdGVybiBEaWdpdGFsIENvcnBvcmF0aW9uCisgKiAwOS0xNS05NQorICoKKyAqIGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMDcwNzE3MTc1MjU0L2h0dHA6Ly9zdW4xLnJyem4udW5pLWhhbm5vdmVyLmRlL2dhZXJ0bmVyLmp1ZXJnZW4vd2Q3MTl4L0xpbnV4L0RvY3UvU3BpZGVyLworICovCisKKy8qCisgKiBEcml2ZXIgd29ya2Zsb3c6CisgKiAxLiBTQ1NJIGNvbW1hbmQgaXMgdHJhbnNmb3JtZWQgdG8gU0NCIChTcGlkZXIgQ29udHJvbCBCbG9jaykgYnkgdGhlCisgKiAgICBxdWV1ZWNvbW1hbmQgZnVuY3Rpb24uCisgKiAyLiBUaGUgYWRkcmVzcyBvZiB0aGUgU0NCIGlzIHN0b3JlZCBpbiBhIGxpc3QgdG8gYmUgYWJsZSB0byBhY2Nlc3MgaXQsIGlmCisgKiAgICBzb21ldGhpbmcgZ29lcyB3cm9uZy4KKyAqIDMuIFRoZSBhZGRyZXNzIG9mIHRoZSBTQ0IgaXMgd3JpdHRlbiB0byB0aGUgQ29udHJvbGxlciwgd2hpY2ggbG9hZHMgdGhlIFNDQgorICogICAgdmlhIEJNLURNQSBhbmQgcHJvY2Vzc2VzIGl0LgorICogNC4gQWZ0ZXIgaXQgaGFzIGZpbmlzaGVkLCBpdCBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0LCBhbmQgc2V0cyByZWdpc3RlcnMuCisgKgorICogZmxhd3M6CisgKiAgLSBhYm9ydC9yZXNldCBmdW5jdGlvbnMKKyAqCisgKiBUb0RvOgorICogIC0gdGFnZ2VkIHF1ZXVlaW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9lZXByb21fOTNjeDYuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgIndkNzE5eC5oIgorCisvKiBsb3ctbGV2ZWwgcmVnaXN0ZXIgYWNjZXNzICovCitzdGF0aWMgaW5saW5lIHU4IHdkNzE5eF9yZWFkYihzdHJ1Y3Qgd2Q3MTl4ICp3ZCwgdTggcmVnKQoreworCXJldHVybiBpb3JlYWQ4KHdkLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgd2Q3MTl4X3JlYWRsKHN0cnVjdCB3ZDcxOXggKndkLCB1OCByZWcpCit7CisJcmV0dXJuIGlvcmVhZDMyKHdkLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdkNzE5eF93cml0ZWIoc3RydWN0IHdkNzE5eCAqd2QsIHU4IHJlZywgdTggdmFsKQoreworCWlvd3JpdGU4KHZhbCwgd2QtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2Q3MTl4X3dyaXRldyhzdHJ1Y3Qgd2Q3MTl4ICp3ZCwgdTggcmVnLCB1MTYgdmFsKQoreworCWlvd3JpdGUxNih2YWwsIHdkLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdkNzE5eF93cml0ZWwoc3RydWN0IHdkNzE5eCAqd2QsIHU4IHJlZywgdTMyIHZhbCkKK3sKKwlpb3dyaXRlMzIodmFsLCB3ZC0+YmFzZSArIHJlZyk7Cit9CisKKy8qIHdhaXQgdW50aWwgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgaXMgcmVhZHkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdkNzE5eF93YWl0X3JlYWR5KHN0cnVjdCB3ZDcxOXggKndkKQoreworCWludCBpID0gMDsKKworCWRvIHsKKwkJaWYgKHdkNzE5eF9yZWFkYih3ZCwgV0Q3MTlYX0FNUl9DT01NQU5EKSA9PSBXRDcxOVhfQ01EX1JFQURZKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlIChpKysgPCBXRDcxOVhfV0FJVF9GT1JfQ01EX1JFQURZKTsKKworCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJjb21tYW5kIHJlZ2lzdGVyIGlzIG5vdCByZWFkeTogMHglMDJ4XG4iLAorCQl3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9BTVJfQ09NTUFORCkpOworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKKy8qIHBvbGwgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB1bnRpbCBjb21tYW5kIGZpbmlzaGVzICovCitzdGF0aWMgaW5saW5lIGludCB3ZDcxOXhfd2FpdF9kb25lKHN0cnVjdCB3ZDcxOXggKndkLCBpbnQgdGltZW91dCkKK3sKKwl1OCBzdGF0dXM7CisKKwl3aGlsZSAodGltZW91dCA+IDApIHsKKwkJc3RhdHVzID0gd2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfQU1SX0lOVF9TVEFUVVMpOworCQlpZiAoc3RhdHVzKQorCQkJYnJlYWs7CisJCXRpbWVvdXQtLTsKKwkJdWRlbGF5KDEpOworCX0KKworCWlmICh0aW1lb3V0IDw9IDApIHsKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgImRpcmVjdCBjb21tYW5kIHRpbWVkIG91dFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmIChzdGF0dXMgIT0gV0Q3MTlYX0lOVF9OT0VSUk9SUykgeworCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiZGlyZWN0IGNvbW1hbmQgZmFpbGVkLCBzdGF0dXMgMHglMDJ4LCBTVUUgMHglMDJ4XG4iLAorCQkJc3RhdHVzLCB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9BTVJfU0NCX0VSUk9SKSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdkNzE5eF9kaXJlY3RfY21kKHN0cnVjdCB3ZDcxOXggKndkLCB1OCBvcGNvZGUsIHU4IGRldiwgdTggbHVuLAorCQkJICAgICB1OCB0YWcsIGRtYV9hZGRyX3QgZGF0YSwgaW50IHRpbWVvdXQpCit7CisJaW50IHJldCA9IDA7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIChhbGxvdyBjb21tYW5kIHJlZ2lzdGVyIHRvIGNsZWFyKSAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfSU5UX1NUQVRVUywgV0Q3MTlYX0lOVF9OT05FKTsKKworCS8qIFdhaXQgZm9yIHRoZSBDb21tYW5kIHJlZ2lzdGVyIHRvIGJlY29tZSBmcmVlICovCisJaWYgKHdkNzE5eF93YWl0X3JlYWR5KHdkKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkvKiBtYWtlIHN1cmUgd2UgZ2V0IE5PIGludGVycnVwdHMgKi8KKwlkZXYgfD0gV0Q3MTlYX0RJU0FCTEVfSU5UOworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfQ01EX1BBUkFNLCBkZXYpOworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfQ01EX1BBUkFNXzIsIGx1bik7CisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DTURfUEFSQU1fMywgdGFnKTsKKwlpZiAoZGF0YSkKKwkJd2Q3MTl4X3dyaXRlbCh3ZCwgV0Q3MTlYX0FNUl9TQ0JfSU4sIGRhdGEpOworCisJLyogY2xlYXIgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBhZ2FpbiAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfSU5UX1NUQVRVUywgV0Q3MTlYX0lOVF9OT05FKTsKKworCS8qIE5vdywgd3JpdGUgdGhlIGNvbW1hbmQgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQsIG9wY29kZSk7CisKKwlpZiAodGltZW91dCkJLyogd2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KKwkJcmV0ID0gd2Q3MTl4X3dhaXRfZG9uZSh3ZCwgdGltZW91dCk7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIChjbGVhbiB1cCkgKi8KKwlpZiAob3Bjb2RlICE9IFdENzE5WF9DTURfUkVBRF9GSVJNVkVSKQorCQl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0lOVF9TVEFUVVMsIFdENzE5WF9JTlRfTk9ORSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3ZDcxOXhfZGVzdHJveShzdHJ1Y3Qgd2Q3MTl4ICp3ZCkKK3sKKwlzdHJ1Y3Qgd2Q3MTl4X3NjYiAqc2NiOworCisJLyogc3RvcCB0aGUgUklTQyAqLworCWlmICh3ZDcxOXhfZGlyZWN0X2NtZCh3ZCwgV0Q3MTlYX0NNRF9TTEVFUCwgMCwgMCwgMCwgMCwKKwkJCSAgICAgIFdENzE5WF9XQUlUX0ZPUl9SSVNDKSkKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJSSVNDIHNsZWVwIGNvbW1hbmQgZmFpbGVkXG4iKTsKKwkvKiBkaXNhYmxlIFJJU0MgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX01PREVfU0VMRUNULCAwKTsKKworCS8qIGZyZWUgYWxsIFNDQnMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjYiwgJndkLT5hY3RpdmVfc2NicywgbGlzdCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudCh3ZC0+cGRldiwgc2l6ZW9mKHN0cnVjdCB3ZDcxOXhfc2NiKSwgc2NiLAorCQkJCSAgICBzY2ItPnBoeXMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NiLCAmd2QtPmZyZWVfc2NicywgbGlzdCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudCh3ZC0+cGRldiwgc2l6ZW9mKHN0cnVjdCB3ZDcxOXhfc2NiKSwgc2NiLAorCQkJCSAgICBzY2ItPnBoeXMpOworCS8qIGZyZWUgaW50ZXJuYWwgYnVmZmVycyAqLworCXBjaV9mcmVlX2NvbnNpc3RlbnQod2QtPnBkZXYsIHdkLT5md19zaXplLCB3ZC0+ZndfdmlydCwgd2QtPmZ3X3BoeXMpOworCXdkLT5md192aXJ0ID0gTlVMTDsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHdkLT5wZGV2LCBXRDcxOVhfSEFTSF9UQUJMRV9TSVpFLCB3ZC0+aGFzaF92aXJ0LAorCQkJICAgIHdkLT5oYXNoX3BoeXMpOworCXdkLT5oYXNoX3ZpcnQgPSBOVUxMOworCXBjaV9mcmVlX2NvbnNpc3RlbnQod2QtPnBkZXYsIHNpemVvZihzdHJ1Y3Qgd2Q3MTl4X2hvc3RfcGFyYW0pLAorCQkJICAgIHdkLT5wYXJhbXMsIHdkLT5wYXJhbXNfcGh5cyk7CisJd2QtPnBhcmFtcyA9IE5VTEw7CisJZnJlZV9pcnEod2QtPnBkZXYtPmlycSwgd2QpOworfQorCisvKiBmaW5pc2ggYSBTQ1NJIGNvbW1hbmQsIG1hcmsgU0NCIChpZiBhbnkpIGFzIGZyZWUsIHVubWFwIGJ1ZmZlcnMgKi8KK3N0YXRpYyB2b2lkIHdkNzE5eF9maW5pc2hfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHJlc3VsdCkKK3sKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOworCXN0cnVjdCB3ZDcxOXhfc2NiICpzY2IgPSAoc3RydWN0IHdkNzE5eF9zY2IgKikgY21kLT5ob3N0X3NjcmliYmxlOworCisJaWYgKHNjYikgeworCQlsaXN0X21vdmUoJnNjYi0+bGlzdCwgJndkLT5mcmVlX3NjYnMpOworCQlkbWFfdW5tYXBfc2luZ2xlKCZ3ZC0+cGRldi0+ZGV2LCBjbWQtPlNDcC5kbWFfaGFuZGxlLAorCQkJCSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJCXNjc2lfZG1hX3VubWFwKGNtZCk7CisJfQorCWNtZC0+cmVzdWx0ID0gcmVzdWx0IDw8IDE2OworCWNtZC0+c2NzaV9kb25lKGNtZCk7Cit9CisKKy8qIEJ1aWxkIGEgU0NCIGFuZCBzZW5kIGl0IHRvIHRoZSBjYXJkICovCitzdGF0aWMgaW50IHdkNzE5eF9xdWV1ZWNvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2gsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlpbnQgaSwgY291bnRfc2c7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgd2Q3MTl4X3NjYiAqc2NiOworCXN0cnVjdCB3ZDcxOXggKndkID0gc2hvc3RfcHJpdihzaCk7CisJZG1hX2FkZHJfdCBwaHlzOworCisJY21kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKKworCS8qIGdldCBhIGZyZWUgU0NCIC0gZWl0aGVyIGZyb20gZXhpc3Rpbmcgb25lcyBvciBhbGxvY2F0ZSBhIG5ldyBvbmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCXNjYiA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmd2QtPmZyZWVfc2Nicywgc3RydWN0IHdkNzE5eF9zY2IsIGxpc3QpOworCWlmIChzY2IpIHsKKwkJbGlzdF9kZWwoJnNjYi0+bGlzdCk7CisJCXBoeXMgPSBzY2ItPnBoeXM7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlzY2IgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh3ZC0+cGRldiwgc2l6ZW9mKHN0cnVjdCB3ZDcxOXhfc2NiKSwKKwkJCQkJICAgJnBoeXMpOworCQlzcGluX2xvY2tfaXJxc2F2ZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlpZiAoIXNjYikgeworCQkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBTQ0JcbiIpOworCQkJd2Q3MTl4X2ZpbmlzaF9jbWQoY21kLCBESURfRVJST1IpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJbWVtc2V0KHNjYiwgMCwgc2l6ZW9mKHN0cnVjdCB3ZDcxOXhfc2NiKSk7CisJbGlzdF9hZGQoJnNjYi0+bGlzdCwgJndkLT5hY3RpdmVfc2Nicyk7CisKKwlzY2ItPnBoeXMgPSBwaHlzOworCXNjYi0+Y21kID0gY21kOworCWNtZC0+aG9zdF9zY3JpYmJsZSA9IChjaGFyICopIHNjYjsKKworCXNjYi0+Q0RCX3RhZyA9IDA7CS8qIFRhZ2dlZCBxdWV1ZWluZyBub3Qgc3VwcG9ydGVkIHlldCAqLworCXNjYi0+ZGV2aWQgPSBjbWQtPmRldmljZS0+aWQ7CisJc2NiLT5sdW4gPSBjbWQtPmRldmljZS0+bHVuOworCisJLyogY29weSB0aGUgY29tbWFuZCAqLworCW1lbWNweShzY2ItPkNEQiwgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOworCisJLyogbWFwIHNlbnNlIGJ1ZmZlciAqLworCXNjYi0+c2Vuc2VfYnVmX2xlbmd0aCA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKKwljbWQtPlNDcC5kbWFfaGFuZGxlID0gZG1hX21hcF9zaW5nbGUoJndkLT5wZGV2LT5kZXYsIGNtZC0+c2Vuc2VfYnVmZmVyLAorCQkJU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCXNjYi0+c2Vuc2VfYnVmID0gY3B1X3RvX2xlMzIoY21kLT5TQ3AuZG1hX2hhbmRsZSk7CisKKwkvKiByZXF1ZXN0IGF1dG9zZW5zZSAqLworCXNjYi0+U0NCX29wdGlvbnMgfD0gV0Q3MTlYX1NDQl9GTEFHU19BVVRPX1JFUVVFU1RfU0VOU0U7CisKKwkvKiBjaGVjayBkaXJlY3Rpb24gKi8KKwlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQlzY2ItPlNDQl9vcHRpb25zIHw9IFdENzE5WF9TQ0JfRkxBR1NfQ0hFQ0tfRElSRUNUSU9OCisJCQkJIHwgIFdENzE5WF9TQ0JfRkxBR1NfUENJX1RPX1NDU0k7CisJZWxzZSBpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCXNjYi0+U0NCX29wdGlvbnMgfD0gV0Q3MTlYX1NDQl9GTEFHU19DSEVDS19ESVJFQ1RJT047CisKKwkvKiBTY2F0aGVyL2dhdGhlciAqLworCWNvdW50X3NnID0gc2NzaV9kbWFfbWFwKGNtZCk7CisJaWYgKGNvdW50X3NnIDwgMCkgeworCQl3ZDcxOXhfZmluaXNoX2NtZChjbWQsIERJRF9FUlJPUik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCUJVR19PTihjb3VudF9zZyA+IFdENzE5WF9TRyk7CisKKwlpZiAoY291bnRfc2cpIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCQlzY2ItPmRhdGFfbGVuZ3RoID0gY3B1X3RvX2xlMzIoY291bnRfc2cgKgorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB3ZDcxOXhfc2dsaXN0KSk7CisJCXNjYi0+ZGF0YV9wID0gY3B1X3RvX2xlMzIoc2NiLT5waHlzICsKKwkJCQkJICBvZmZzZXRvZihzdHJ1Y3Qgd2Q3MTl4X3NjYiwgc2dfbGlzdCkpOworCisJCXNjc2lfZm9yX2VhY2hfc2coY21kLCBzZywgY291bnRfc2csIGkpIHsKKwkJCXNjYi0+c2dfbGlzdFtpXS5wdHIgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJc2NiLT5zZ19saXN0W2ldLmxlbmd0aCA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4oc2cpKTsKKwkJfQorCQlzY2ItPlNDQl9vcHRpb25zIHw9IFdENzE5WF9TQ0JfRkxBR1NfRE9fU0NBVFRFUl9HQVRIRVI7CisJfSBlbHNlIHsgLyogemVybyBsZW5ndGggKi8KKwkJc2NiLT5kYXRhX2xlbmd0aCA9IDA7CisJCXNjYi0+ZGF0YV9wID0gMDsKKwl9CisKKwkvKiBjaGVjayBpZiB0aGUgQ29tbWFuZCByZWdpc3RlciBpcyBmcmVlICovCisJaWYgKHdkNzE5eF9yZWFkYih3ZCwgV0Q3MTlYX0FNUl9DT01NQU5EKSAhPSBXRDcxOVhfQ01EX1JFQURZKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJfQorCisJLyogd3JpdGUgcG9pbnRlciB0byB0aGUgQU1SICovCisJd2Q3MTl4X3dyaXRlbCh3ZCwgV0Q3MTlYX0FNUl9TQ0JfSU4sIHNjYi0+cGh5cyk7CisJLyogc2VuZCBTQ0Igb3Bjb2RlICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DT01NQU5ELCBXRDcxOVhfQ01EX1BST0NFU1NfU0NCKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdkNzE5eF9jaGlwX2luaXQoc3RydWN0IHdkNzE5eCAqd2QpCit7CisJaW50IGksIHJldDsKKwl1MzIgcmlzY19pbml0WzNdOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfd2NzLCAqZndfcmlzYzsKKwljb25zdCBjaGFyIGZ3bmFtZV93Y3NbXSA9ICJ3ZDcxOXgtd2NzLmJpbiI7CisJY29uc3QgY2hhciBmd25hbWVfcmlzY1tdID0gIndkNzE5eC1yaXNjLmJpbiI7CisKKwltZW1zZXQod2QtPmhhc2hfdmlydCwgMCwgV0Q3MTlYX0hBU0hfVEFCTEVfU0laRSk7CisKKwkvKiBXQ1MgKHNlcXVlbmNlcikgZmlybXdhcmUgKi8KKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd193Y3MsIGZ3bmFtZV93Y3MsICZ3ZC0+cGRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJVbmFibGUgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcbiIsCisJCQlmd25hbWVfd2NzLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBSSVNDIGZpcm13YXJlICovCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndfcmlzYywgZnduYW1lX3Jpc2MsICZ3ZC0+cGRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJVbmFibGUgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcbiIsCisJCQlmd25hbWVfcmlzYywgcmV0KTsKKwkJcmVsZWFzZV9maXJtd2FyZShmd193Y3MpOworCQlyZXR1cm4gcmV0OworCX0KKwl3ZC0+Zndfc2l6ZSA9IEFMSUdOKGZ3X3djcy0+c2l6ZSwgNCkgKyBmd19yaXNjLT5zaXplOworCisJaWYgKCF3ZC0+ZndfdmlydCkKKwkJd2QtPmZ3X3ZpcnQgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh3ZC0+cGRldiwgd2QtPmZ3X3NpemUsCisJCQkJCQkgICAmd2QtPmZ3X3BoeXMpOworCWlmICghd2QtPmZ3X3ZpcnQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byB3ZDcxOXhfaW5pdF9lbmQ7CisJfQorCisJLyogbWFrZSBhIGZyZXNoIGNvcHkgb2YgV0NTIGFuZCBSSVNDIGNvZGUgKi8KKwltZW1jcHkod2QtPmZ3X3ZpcnQsIGZ3X3djcy0+ZGF0YSwgZndfd2NzLT5zaXplKTsKKwltZW1jcHkod2QtPmZ3X3ZpcnQgKyBBTElHTihmd193Y3MtPnNpemUsIDQpLCBmd19yaXNjLT5kYXRhLAorCQlmd19yaXNjLT5zaXplKTsKKworCS8qIFJlc2V0IHRoZSBTcGlkZXIgQ2hpcCBhbmQgYWRhcHRlciBpdHNlbGYgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX1BPUlRfUkVTRVQsIFdENzE5WF9QQ0lfUkVTRVQpOworCXVkZWxheShXRDcxOVhfV0FJVF9GT1JfUklTQyk7CisJLyogQ2xlYXIgUElPIG1vZGUgYml0cyBzZXQgYnkgQklPUyAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfQ01EX1BBUkFNLCAwKTsKKwkvKiBlbnN1cmUgUklTQyBpcyBub3QgcnVubmluZyAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9QQ0lfTU9ERV9TRUxFQ1QsIDApOworCS8qIGVuc3VyZSBjb21tYW5kIHBvcnQgaXMgcmVhZHkgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQsIDApOworCWlmICh3ZDcxOXhfd2FpdF9yZWFkeSh3ZCkpIHsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byB3ZDcxOXhfaW5pdF9lbmQ7CisJfQorCisJLyogVHJhbnNmZXIgdGhlIGZpcnN0IDJLIHdvcmRzIG9mIFJJU0MgY29kZSB0byBraWNrIHN0YXJ0IHRoZSB1UCAqLworCXJpc2NfaW5pdFswXSA9IHdkLT5md19waHlzOwkJCQkvKiBXQ1MgRlcgKi8KKwlyaXNjX2luaXRbMV0gPSB3ZC0+ZndfcGh5cyArIEFMSUdOKGZ3X3djcy0+c2l6ZSwgNCk7CS8qIFJJU0MgRlcgKi8KKwlyaXNjX2luaXRbMl0gPSB3ZC0+aGFzaF9waHlzOwkJCQkvKiBoYXNoIHRhYmxlICovCisKKwkvKiBjbGVhciBETUEgc3RhdHVzICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX1BDSV9DSEFOTkVMMl8zU1RBVFVTLCAwKTsKKworCS8qIGFkZHJlc3MgdG8gcmVhZCBmaXJtd2FyZSBmcm9tICovCisJd2Q3MTl4X3dyaXRlbCh3ZCwgV0Q3MTlYX1BDSV9FWFRFUk5BTF9BRERSLCByaXNjX2luaXRbMV0pOworCS8qIGJhc2UgYWRkcmVzcyB0byB3cml0ZSBmaXJtd2FyZSB0byAob24gY2FyZCkgKi8KKwl3ZDcxOXhfd3JpdGV3KHdkLCBXRDcxOVhfUENJX0lOVEVSTkFMX0FERFIsIFdENzE5WF9QUkFNX0JBU0VfQUREUik7CisJLyogc2l6ZTogZmlyc3QgMksgd29yZHMgKi8KKwl3ZDcxOXhfd3JpdGV3KHdkLCBXRDcxOVhfUENJX0RNQV9UUkFOU0ZFUl9TSVpFLCAyMDQ4ICogMik7CisJLyogc3RhcnQgRE1BICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX1BDSV9DSEFOTkVMMl8zQ01ELCBXRDcxOVhfU1RBUlRfQ0hBTk5FTDJfM0RNQSk7CisKKwkvKiB3YWl0IGZvciBETUEgdG8gY29tcGxldGUgKi8KKwlpID0gV0Q3MTlYX1dBSVRfRk9SX1JJU0M7CisJd2hpbGUgKGktLSA+IDApIHsKKwkJdTggc3RhdHVzID0gd2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfUENJX0NIQU5ORUwyXzNTVEFUVVMpOworCQlpZiAoc3RhdHVzID09IFdENzE5WF9TVEFSVF9DSEFOTkVMMl8zRE9ORSkKKwkJCWJyZWFrOworCQlpZiAoc3RhdHVzID09IFdENzE5WF9TVEFSVF9DSEFOTkVMMl8zQUJPUlQpIHsKKwkJCWRldl93YXJuKCZ3ZC0+cGRldi0+ZGV2LCAiUklTQyBib290c3RyYXAgZmFpbGVkOiBETUEgYWJvcnRlZFxuIik7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byB3ZDcxOXhfaW5pdF9lbmQ7CisJCX0KKwkJdWRlbGF5KDEpOworCX0KKwlpZiAoaSA8IDEpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJSSVNDIGJvb3RzdHJhcCBmYWlsZWQ6IERNQSB0aW1lb3V0XG4iKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byB3ZDcxOXhfaW5pdF9lbmQ7CisJfQorCisJLyogZmlybXdhcmUgaXMgbG9hZGVkLCBub3cgaW5pdGlhbGl6ZSBhbmQgd2FrZSB1cCB0aGUgUklTQyAqLworCS8qIHdyaXRlIFJJU0MgaW5pdGlhbGl6YXRpb24gbG9uZyB3b3JkcyB0byBTcGlkZXIgKi8KKwl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfQU1SX1NDQl9JTiwgcmlzY19pbml0WzBdKTsKKwl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfQU1SX1NDQl9JTiArIDQsIHJpc2NfaW5pdFsxXSk7CisJd2Q3MTl4X3dyaXRlbCh3ZCwgV0Q3MTlYX0FNUl9TQ0JfSU4gKyA4LCByaXNjX2luaXRbMl0pOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGR1cmluZyBpbml0aWFsaXphdGlvbiBvZiBSSVNDICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DTURfUEFSQU0sIFdENzE5WF9ESVNBQkxFX0lOVCk7CisKKwkvKiBpc3N1ZSBJTklUSUFMSVpFIFJJU0MgY29tYW5kICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DT01NQU5ELCBXRDcxOVhfQ01EX0lOSVRfUklTQyk7CisJLyogZW5hYmxlIGFkdmFuY2VkIG1vZGUgKHdha2UgdXAgUklTQykgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX01PREVfU0VMRUNULCBXRDcxOVhfRU5BQkxFX0FEVkFOQ0VfTU9ERSk7CisJdWRlbGF5KFdENzE5WF9XQUlUX0ZPUl9SSVNDKTsKKworCXJldCA9IHdkNzE5eF93YWl0X2RvbmUod2QsIFdENzE5WF9XQUlUX0ZPUl9SSVNDKTsKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9JTlRfU1RBVFVTLCBXRDcxOVhfSU5UX05PTkUpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSSVNDXG4iKTsKKwkJZ290byB3ZDcxOXhfaW5pdF9lbmQ7CisJfQorCS8qIFJJU0MgaXMgdXAgYW5kIHJ1bm5pbmcgKi8KKworCS8qIFJlYWQgRlcgdmVyc2lvbiBmcm9tIFJJU0MgKi8KKwlyZXQgPSB3ZDcxOXhfZGlyZWN0X2NtZCh3ZCwgV0Q3MTlYX0NNRF9SRUFEX0ZJUk1WRVIsIDAsIDAsIDAsIDAsCisJCQkJV0Q3MTlYX1dBSVRfRk9SX1JJU0MpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJVbmFibGUgdG8gcmVhZCBmaXJtd2FyZSB2ZXJzaW9uXG4iKTsKKwkJZ290byB3ZDcxOXhfaW5pdF9lbmQ7CisJfQorCWRldl9pbmZvKCZ3ZC0+cGRldi0+ZGV2LCAiUklTQyBpbml0aWFsaXplZCB3aXRoIGZpcm13YXJlIHZlcnNpb24gJS4yeC4lLjJ4XG4iLAorCQkJd2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfQU1SX1NDQl9PVVQgKyAxKSwKKwkJCXdkNzE5eF9yZWFkYih3ZCwgV0Q3MTlYX0FNUl9TQ0JfT1VUKSk7CisKKwkvKiBSRVNFVCBTQ1NJIGJ1cyAqLworCXJldCA9IHdkNzE5eF9kaXJlY3RfY21kKHdkLCBXRDcxOVhfQ01EX0JVU1JFU0VULCAwLCAwLCAwLCAwLAorCQkJCVdENzE5WF9XQUlUX0ZPUl9TQ1NJX1JFU0VUKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKCZ3ZC0+cGRldi0+ZGV2LCAiU0NTSSBidXMgcmVzZXQgZmFpbGVkXG4iKTsKKwkJZ290byB3ZDcxOXhfaW5pdF9lbmQ7CisJfQorCisJLyogdXNlIEhvc3RQYXJhbWV0ZXIgc3RydWN0dXJlIHRvIHNldCBTcGlkZXIncyBIb3N0IFBhcmFtZXRlciBCbG9jayAqLworCXJldCA9IHdkNzE5eF9kaXJlY3RfY21kKHdkLCBXRDcxOVhfQ01EX1NFVF9QQVJBTSwgMCwKKwkJCQlzaXplb2Yoc3RydWN0IHdkNzE5eF9ob3N0X3BhcmFtKSwgMCwKKwkJCQl3ZC0+cGFyYW1zX3BoeXMsIFdENzE5WF9XQUlUX0ZPUl9SSVNDKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKCZ3ZC0+cGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBIT1NUIFBBUkFNRVRFUlNcbiIpOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiBpbml0aWF0ZSBTQ0FNIChkb2VzIG5vdGhpbmcgaWYgZGlzYWJsZWQgaW4gQklPUykgKi8KKwkvKiBidWc/OiB3ZSBzaG91bGQgcGFzcyBhIG1hc2sgb2Ygc3RhdGljIElEcyB3aGljaCB3ZSBkb24ndCBoYXZlICovCisJcmV0ID0gd2Q3MTl4X2RpcmVjdF9jbWQod2QsIFdENzE5WF9DTURfSU5JVF9TQ0FNLCAwLCAwLCAwLCAwLAorCQkJCVdENzE5WF9XQUlUX0ZPUl9TQ1NJX1JFU0VUKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKCZ3ZC0+cGRldi0+ZGV2LCAiU0NBTSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiBjbGVhciBBTVJfQklPU19TSEFSRV9JTlQgcmVnaXN0ZXIgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0JJT1NfU0hBUkVfSU5ULCAwKTsKKword2Q3MTl4X2luaXRfZW5kOgorCXJlbGVhc2VfZmlybXdhcmUoZndfd2NzKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X3Jpc2MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3ZDcxOXhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCWludCBhY3Rpb24sIHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB3ZDcxOXhfc2NiICpzY2IgPSAoc3RydWN0IHdkNzE5eF9zY2IgKiljbWQtPmhvc3Rfc2NyaWJibGU7CisJc3RydWN0IHdkNzE5eCAqd2QgPSBzaG9zdF9wcml2KGNtZC0+ZGV2aWNlLT5ob3N0KTsKKworCWRldl9pbmZvKCZ3ZC0+cGRldi0+ZGV2LCAiYWJvcnQgY29tbWFuZCwgdGFnOiAleFxuIiwgY21kLT50YWcpOworCisJYWN0aW9uID0gLypjbWQtPnRhZyA/IFdENzE5WF9DTURfQUJPUlRfVEFHIDogKi9XRDcxOVhfQ01EX0FCT1JUOworCisJc3Bpbl9sb2NrX2lycXNhdmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlyZXN1bHQgPSB3ZDcxOXhfZGlyZWN0X2NtZCh3ZCwgYWN0aW9uLCBjbWQtPmRldmljZS0+aWQsCisJCQkJICAgY21kLT5kZXZpY2UtPmx1biwgY21kLT50YWcsIHNjYi0+cGh5cywgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmIChyZXN1bHQpCisJCXJldHVybiBGQUlMRUQ7CisKKwlyZXR1cm4gU1VDQ0VTUzsKK30KKworc3RhdGljIGludCB3ZDcxOXhfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB1OCBvcGNvZGUsIHU4IGRldmljZSkKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHdkNzE5eCAqd2QgPSBzaG9zdF9wcml2KGNtZC0+ZGV2aWNlLT5ob3N0KTsKKworCWRldl9pbmZvKCZ3ZC0+cGRldi0+ZGV2LCAiJXMgcmVzZXQgcmVxdWVzdGVkXG4iLAorCQkgKG9wY29kZSA9PSBXRDcxOVhfQ01EX0JVU1JFU0VUKSA/ICJidXMiIDogImRldmljZSIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlyZXN1bHQgPSB3ZDcxOXhfZGlyZWN0X2NtZCh3ZCwgb3Bjb2RlLCBkZXZpY2UsIDAsIDAsIDAsCisJCQkJICAgV0Q3MTlYX1dBSVRfRk9SX1NDU0lfUkVTRVQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gRkFJTEVEOworCisJcmV0dXJuIFNVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2Rldl9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJcmV0dXJuIHdkNzE5eF9yZXNldChjbWQsIFdENzE5WF9DTURfUkVTRVQsIGNtZC0+ZGV2aWNlLT5pZCk7Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJcmV0dXJuIHdkNzE5eF9yZXNldChjbWQsIFdENzE5WF9DTURfQlVTUkVTRVQsIDApOworfQorCitzdGF0aWMgaW50IHdkNzE5eF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOworCXN0cnVjdCB3ZDcxOXhfc2NiICpzY2IsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCisJZGV2X2luZm8oJndkLT5wZGV2LT5kZXYsICJob3N0IHJlc2V0IHJlcXVlc3RlZFxuIik7CisJc3Bpbl9sb2NrX2lycXNhdmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkvKiBUcnkgdG8gcmVpbml0IHRoZSBSSVNDICovCisJaWYgKHdkNzE5eF9jaGlwX2luaXQod2QpID09IDApCisJCXJlc3VsdCA9IFNVQ0NFU1M7CisJZWxzZQorCQlyZXN1bHQgPSBGQUlMRUQ7CisKKwkvKiBmbHVzaCBhbGwgU0NCcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzY2IsIHRtcCwgJndkLT5hY3RpdmVfc2NicywgbGlzdCkgeworCQlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXBfY21kID0gc2NiLT5jbWQ7CisJCXdkNzE5eF9maW5pc2hfY21kKHRtcF9jbWQsIHJlc3VsdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCQkgICAgc2VjdG9yX3QgY2FwYWNpdHksIGludCBnZW9tW10pCit7CisJaWYgKGNhcGFjaXR5ID49IDB4MjAwMDAwKSB7CisJCWdlb21bMF0gPSAyNTU7CS8qIGhlYWRzICovCisJCWdlb21bMV0gPSA2MzsJLyogc2VjdG9ycyAqLworCX0gZWxzZSB7CisJCWdlb21bMF0gPSA2NDsJLyogaGVhZHMgKi8KKwkJZ2VvbVsxXSA9IDMyOwkvKiBzZWN0b3JzICovCisJfQorCWdlb21bMl0gPSBzZWN0b3JfZGl2KGNhcGFjaXR5LCBnZW9tWzBdICogZ2VvbVsxXSk7CS8qIGN5bGluZGVycyAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qIHByb2Nlc3MgYSBTQ0ItY29tcGxldGlvbiBpbnRlcnJ1cHQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3ZDcxOXhfaW50ZXJydXB0X1NDQihzdHJ1Y3Qgd2Q3MTl4ICp3ZCwKKwkJCQkJdW5pb24gd2Q3MTl4X3JlZ3MgcmVncywKKwkJCQkJc3RydWN0IHdkNzE5eF9zY2IgKnNjYikKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CisJaW50IHJlc3VsdDsKKworCS8qIG5vdyBoYXZlIHRvIGZpbmQgcmVzdWx0IGZyb20gY2FyZCAqLworCXN3aXRjaCAocmVncy5ieXRlcy5TVUUpIHsKKwljYXNlIFdENzE5WF9TVUVfTk9FUlJPUlM6CisJCXJlc3VsdCA9IERJRF9PSzsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX1JFSkVDVEVEOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiY29tbWFuZCByZWplY3RlZFxuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX1NDQlFGVUxMOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiU0NCIHF1ZXVlIGlzIGZ1bGxcbiIpOworCQlyZXN1bHQgPSBESURfRVJST1I7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9URVJNOgorCQlkZXZfZGJnKCZ3ZC0+cGRldi0+ZGV2LCAiU0NCIHRlcm1pbmF0ZWQgYnkgZGlyZWN0IGNvbW1hbmRcbiIpOworCQlyZXN1bHQgPSBESURfQUJPUlQ7CS8qIG9yIERJRF9SRVNFVD8gKi8KKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX0NIQU4xQUJPUlQ6CisJY2FzZSBXRDcxOVhfU1VFX0NIQU4yM0FCT1JUOgorCQlyZXN1bHQgPSBESURfQUJPUlQ7CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJETUEgYWJvcnRcbiIpOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfQ0hBTjFQQVI6CisJY2FzZSBXRDcxOVhfU1VFX0NIQU4yM1BBUjoKKwkJcmVzdWx0ID0gRElEX1BBUklUWTsKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgIkRNQSBwYXJpdHkgZXJyb3JcbiIpOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfVElNRU9VVDoKKwkJcmVzdWx0ID0gRElEX1RJTUVfT1VUOworCQlkZXZfZGJnKCZ3ZC0+cGRldi0+ZGV2LCAic2VsZWN0aW9uIHRpbWVvdXRcbiIpOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfUkVTRVQ6CisJCWRldl9kYmcoJndkLT5wZGV2LT5kZXYsICJidXMgcmVzZXQgb2NjdXJlZFxuIik7CisJCXJlc3VsdCA9IERJRF9SRVNFVDsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX0JVU0VSUk9SOgorCQlkZXZfZGJnKCZ3ZC0+cGRldi0+ZGV2LCAiU0NTSSBidXMgZXJyb3JcbiIpOworCQlyZXN1bHQgPSBESURfRVJST1I7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9XUk9OR1dBWToKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgIndyb25nIGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uXG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfQkFEUEhBU0U6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJpbnZhbGlkIFNDU0kgcGhhc2VcbiIpOworCQlyZXN1bHQgPSBESURfRVJST1I7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9UT09MT05HOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAicmVjb3JkIHRvbyBsb25nXG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfQlVTRlJFRToKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgInVuZXhwZWN0ZWQgYnVzIGZyZWVcbiIpOworCQlyZXN1bHQgPSBESURfTk9fQ09OTkVDVDsgLyogb3IgRElEX0VSUk9SID8/PyovCisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9BUlNET05FOgorCQlkZXZfZGJnKCZ3ZC0+cGRldi0+ZGV2LCAiYXV0byByZXF1ZXN0IHNlbnNlXG4iKTsKKwkJaWYgKHJlZ3MuYnl0ZXMuU0NTSSA9PSAwKQorCQkJcmVzdWx0ID0gRElEX09LOworCQllbHNlCisJCQlyZXN1bHQgPSBESURfUEFSSVRZOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfSUdOT1JFRDoKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgInRhcmdldCBpZCAlZCBpZ25vcmVkIGNvbW1hbmRcbiIsCisJCQlzY2ItPmNtZC0+ZGV2aWNlLT5pZCk7CisJCXJlc3VsdCA9IERJRF9OT19DT05ORUNUOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfV1JPTkdUQUdTOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAicmV2ZXJzZWQgdGFnc1xuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX0JBRFRBR1M6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJ0YWcgdHlwZSBub3Qgc3VwcG9ydGVkIGJ5IHRhcmdldFxuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX05PU0NBTUlEOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAibm8gU0NBTSBzb2Z0IElEIGF2YWlsYWJsZVxuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJ1bmtub3duIFNVRSBlcnJvciBjb2RlOiAweCV4XG4iLAorCQkJIHJlZ3MuYnl0ZXMuU1VFKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwl9CisJY21kID0gc2NiLT5jbWQ7CisKKwl3ZDcxOXhfZmluaXNoX2NtZChjbWQsIHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3ZDcxOXhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IGRldl9pZDsKKwl1bmlvbiB3ZDcxOXhfcmVncyByZWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIFNDQl9vdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCS8qIHJlYWQgU0NCIHBvaW50ZXIgYmFjayBmcm9tIGNhcmQgKi8KKwlTQ0Jfb3V0ID0gd2Q3MTl4X3JlYWRsKHdkLCBXRDcxOVhfQU1SX1NDQl9PVVQpOworCS8qIHJlYWQgYWxsIHN0YXR1cyBpbmZvIGF0IG9uY2UgKi8KKwlyZWdzLmFsbCA9IGNwdV90b19sZTMyKHdkNzE5eF9yZWFkbCh3ZCwgV0Q3MTlYX0FNUl9PUF9DT0RFKSk7CisKKwlzd2l0Y2ggKHJlZ3MuYnl0ZXMuSU5UKSB7CisJY2FzZSBXRDcxOVhfSU5UX05PTkU6CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIElSUV9OT05FOworCWNhc2UgV0Q3MTlYX0lOVF9MSU5LTk9TVEFUVVM6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJsaW5rZWQgY29tbWFuZCBjb21wbGV0ZWQgd2l0aCBubyBzdGF0dXNcbiIpOworCQlicmVhazsKKwljYXNlIFdENzE5WF9JTlRfQkFESU5UOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAidW5zb2xpY2l0ZWQgaW50ZXJydXB0XG4iKTsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfSU5UX05PRVJST1JTOgorCWNhc2UgV0Q3MTlYX0lOVF9MSU5LTk9FUlJPUlM6CisJY2FzZSBXRDcxOVhfSU5UX0VSUk9SU0xPR0dFRDoKKwljYXNlIFdENzE5WF9JTlRfU1BJREVSRkFJTEVEOgorCQkvKiB3YXMgdGhlIGNtZCBjb21wbGV0ZWQgYSBkaXJlY3Qgb3IgU0NCIGNvbW1hbmQ/ICovCisJCWlmIChyZWdzLmJ5dGVzLk9QQyA9PSBXRDcxOVhfQ01EX1BST0NFU1NfU0NCKSB7CisJCQlzdHJ1Y3Qgd2Q3MTl4X3NjYiAqc2NiOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzY2IsICZ3ZC0+YWN0aXZlX3NjYnMsIGxpc3QpCisJCQkJaWYgKFNDQl9vdXQgPT0gc2NiLT5waHlzKQorCQkJCQlicmVhazsKKwkJCWlmIChTQ0Jfb3V0ID09IHNjYi0+cGh5cykKKwkJCQl3ZDcxOXhfaW50ZXJydXB0X1NDQih3ZCwgcmVncywgc2NiKTsKKwkJCWVsc2UKKwkJCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiY2FyZCByZXR1cm5lZCBpbnZhbGlkIFNDQiBwb2ludGVyXG4iKTsKKwkJfSBlbHNlCisJCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgImRpcmVjdCBjb21tYW5kIDB4JXggY29tcGxldGVkXG4iLAorCQkJCSByZWdzLmJ5dGVzLk9QQyk7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX0lOVF9QSU9SRUFEWToKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgImNhcmQgaW5kaWNhdGVzIFBJTyBkYXRhIHJlYWR5IGJ1dCB3ZSBuZXZlciB1c2UgUElPXG4iKTsKKwkJLyogaW50ZXJydXB0IHdpbGwgbm90IGJlIGNsZWFyZWQgdW50aWwgYWxsIGRhdGEgaXMgcmVhZCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAidW5rbm93biBpbnRlcnJ1cHQgcmVhc29uOiAlZFxuIiwKKwkJCXJlZ3MuYnl0ZXMuSU5UKTsKKworCX0KKwkvKiBjbGVhciBpbnRlcnJ1cHQgc28gYW5vdGhlciBjYW4gaGFwcGVuICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9JTlRfU1RBVFVTLCBXRDcxOVhfSU5UX05PTkUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUod2QtPnNoLT5ob3N0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgd2Q3MTl4X2VlcHJvbV9yZWdfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCit7CisJc3RydWN0IHdkNzE5eCAqd2QgPSBlZXByb20tPmRhdGE7CisJdTggcmVnID0gd2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfUENJX0dQSU9fREFUQSk7CisKKwllZXByb20tPnJlZ19kYXRhX291dCA9IHJlZyAmIFdENzE5WF9FRV9ETzsKK30KKworc3RhdGljIHZvaWQgd2Q3MTl4X2VlcHJvbV9yZWdfd3JpdGUoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tKQoreworCXN0cnVjdCB3ZDcxOXggKndkID0gZWVwcm9tLT5kYXRhOworCXU4IHJlZyA9IDA7CisKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9pbikKKwkJcmVnIHw9IFdENzE5WF9FRV9ESTsKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9jbG9jaykKKwkJcmVnIHw9IFdENzE5WF9FRV9DTEs7CisJaWYgKGVlcHJvbS0+cmVnX2NoaXBfc2VsZWN0KQorCQlyZWcgfD0gV0Q3MTlYX0VFX0NTOworCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX1BDSV9HUElPX0RBVEEsIHJlZyk7Cit9CisKKy8qIHJlYWQgY29uZmlnIGZyb20gRUVQUk9NIHNvIGl0IGNhbiBiZSBkb3dubG9hZGVkIGJ5IHRoZSBSSVNDIG9uIChyZS0paW5pdCAqLworc3RhdGljIHZvaWQgd2Q3MTl4X3JlYWRfZWVwcm9tKHN0cnVjdCB3ZDcxOXggKndkKQoreworCXN0cnVjdCBlZXByb21fOTNjeDYgZWVwcm9tOworCXU4IGdwaW87CisJc3RydWN0IHdkNzE5eF9lZXByb21faGVhZGVyIGhlYWRlcjsKKworCWVlcHJvbS5kYXRhID0gd2Q7CisJZWVwcm9tLnJlZ2lzdGVyX3JlYWQgPSB3ZDcxOXhfZWVwcm9tX3JlZ19yZWFkOworCWVlcHJvbS5yZWdpc3Rlcl93cml0ZSA9IHdkNzE5eF9lZXByb21fcmVnX3dyaXRlOworCWVlcHJvbS53aWR0aCA9IFBDSV9FRVBST01fV0lEVEhfOTNDNDY7CisKKwkvKiBzZXQgYWxsIG91dHB1dHMgdG8gbG93ICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX1BDSV9HUElPX0RBVEEsIDApOworCS8qIGNvbmZpZ3VyZSBHUElPIHBpbnMgKi8KKwlncGlvID0gd2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfUENJX0dQSU9fQ09OVFJPTCk7CisJLyogR1BJTyBvdXRwdXRzICovCisJZ3BpbyAmPSAofihXRDcxOVhfRUVfQ0xLIHwgV0Q3MTlYX0VFX0RJIHwgV0Q3MTlYX0VFX0NTKSk7CisJLyogR1BJTyBpbnB1dCAqLworCWdwaW8gfD0gV0Q3MTlYX0VFX0RPOworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9QQ0lfR1BJT19DT05UUk9MLCBncGlvKTsKKworCS8qIHJlYWQgRUVQUk9NIGhlYWRlciAqLworCWVlcHJvbV85M2N4Nl9tdWx0aXJlYWRiKCZlZXByb20sIDAsICh1OCAqKSZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKKworCWlmIChoZWFkZXIuc2lnMSA9PSAnVycgJiYgaGVhZGVyLnNpZzIgPT0gJ0QnKQorCQllZXByb21fOTNjeDZfbXVsdGlyZWFkYigmZWVwcm9tLCBoZWFkZXIuY2ZnX29mZnNldCwKKwkJCQkJKHU4ICopd2QtPnBhcmFtcywKKwkJCQkJc2l6ZW9mKHN0cnVjdCB3ZDcxOXhfaG9zdF9wYXJhbSkpOworCWVsc2UgeyAvKiBkZWZhdWx0IEVFUFJPTSB2YWx1ZXMgKi8KKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJFRVBST00gc2lnbmF0dXJlIGlzIGludmFsaWQgKDB4JTAyeCAweCUwMngpLCB1c2luZyBkZWZhdWx0IHZhbHVlc1xuIiwKKwkJCSBoZWFkZXIuc2lnMSwgaGVhZGVyLnNpZzIpOworCQl3ZC0+cGFyYW1zLT5jaF8xX3RoCT0gMHgxMDsJLyogMTYgRFdzID0gNjQgQiAqLworCQl3ZC0+cGFyYW1zLT5zY3NpX2NvbmYJPSAweDRjOwkvKiA0OG1hLCBzcHVlLCBwYXJpdHkgY2hlY2sgKi8KKwkJd2QtPnBhcmFtcy0+b3duX3Njc2lfaWQJPSAweDA3OwkvKiBJRCA3LCBTQ0FNIGRpc2FibGVkICovCisJCXdkLT5wYXJhbXMtPnNlbF90aW1lb3V0ID0gMHg0ZDsJLyogMjUwIG1zICovCisJCXdkLT5wYXJhbXMtPnNsZWVwX3RpbWVyCT0gMHgwMTsKKwkJd2QtPnBhcmFtcy0+Y2RiX3NpemUJPSBjcHVfdG9fbGUxNigweDU1NTUpOwkvKiBhbGwgNiBCICovCisJCXdkLT5wYXJhbXMtPnNjc2lfcGFkCT0gMHgxYjsKKwkJaWYgKHdkLT50eXBlID09IFdENzE5WF9UWVBFXzcxOTMpIC8qIG5hcnJvdyBjYXJkIC0gZGlzYWJsZSAqLworCQkJd2QtPnBhcmFtcy0+d2lkZSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApOworCQllbHNlCS8qIGluaXRpYXRlICYgcmVzcG9uZCB0byBXSURFIG1lc3NhZ2VzICovCisJCQl3ZC0+cGFyYW1zLT53aWRlID0gY3B1X3RvX2xlMzIoMHhmZmZmZmZmZik7CisJCXdkLT5wYXJhbXMtPnN5bmMJPSBjcHVfdG9fbGUzMigweGZmZmZmZmZmKTsKKwkJd2QtPnBhcmFtcy0+c29mdF9tYXNrCT0gMHgwMDsJLyogYWxsIGRpc2FibGVkICovCisJCXdkLT5wYXJhbXMtPnVuc29sX21hc2sJPSAweDAwOwkvKiBhbGwgZGlzYWJsZWQgKi8KKwl9CisJLyogZGlzYWJsZSBUQUdHRUQgbWVzc2FnZXMgKi8KKwl3ZC0+cGFyYW1zLT50YWdfZW4gPSBjcHVfdG9fbGUxNigweDAwMDApOworfQorCisvKiBSZWFkIGNhcmQgdHlwZSBmcm9tIEdQSU8gYml0cyAxIGFuZCAzICovCitzdGF0aWMgZW51bSB3ZDcxOXhfY2FyZF90eXBlIHdkNzE5eF9kZXRlY3RfdHlwZShzdHJ1Y3Qgd2Q3MTl4ICp3ZCkKK3sKKwl1OCBjYXJkID0gd2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfUENJX0dQSU9fQ09OVFJPTCk7CisKKwljYXJkIHw9IFdENzE5WF9HUElPX0lEX0JJVFM7CisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX1BDSV9HUElPX0NPTlRST0wsIGNhcmQpOworCWNhcmQgPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9QQ0lfR1BJT19EQVRBKSAmIFdENzE5WF9HUElPX0lEX0JJVFM7CisJc3dpdGNoIChjYXJkKSB7CisJY2FzZSAweDA4OgorCQlyZXR1cm4gV0Q3MTlYX1RZUEVfNzE5MzsKKwljYXNlIDB4MDI6CisJCXJldHVybiBXRDcxOVhfVFlQRV83MTk3OworCWNhc2UgMHgwMDoKKwkJcmV0dXJuIFdENzE5WF9UWVBFXzcyOTY7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJ1bmtub3duIGNhcmQgdHlwZSAweCV4XG4iLCBjYXJkKTsKKwkJcmV0dXJuIFdENzE5WF9UWVBFX1VOS05PV047CisJfQorfQorCitzdGF0aWMgaW50IHdkNzE5eF9ib2FyZF9mb3VuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCkKK3sKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IHNob3N0X3ByaXYoc2gpOworCWNoYXIgKmNhcmRfdHlwZXNbXSA9IHsgIlVua25vd24gY2FyZCIsICJXRDcxOTMiLCAiV0Q3MTk3IiwgIldENzI5NiIgfTsKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJndkLT5hY3RpdmVfc2Nicyk7CisJSU5JVF9MSVNUX0hFQUQoJndkLT5mcmVlX3NjYnMpOworCisJc2gtPmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQod2QtPnBkZXYsIDApOworCisJd2QtPnR5cGUgPSB3ZDcxOXhfZGV0ZWN0X3R5cGUod2QpOworCisJd2QtPnNoID0gc2g7CisJc2gtPmlycSA9IHdkLT5wZGV2LT5pcnE7CisJd2QtPmZ3X3ZpcnQgPSBOVUxMOworCisJLyogbWVtb3J5IGFyZWEgZm9yIGhvc3QgKEVFUFJPTSkgcGFyYW1ldGVycyAqLworCXdkLT5wYXJhbXMgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh3ZC0+cGRldiwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHdkNzE5eF9ob3N0X3BhcmFtKSwKKwkJCQkJICAmd2QtPnBhcmFtc19waHlzKTsKKwlpZiAoIXdkLT5wYXJhbXMpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgcGFyYW1ldGVyIGJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIG1lbW9yeSBhcmVhIGZvciB0aGUgUklTQyBmb3IgaGFzaCB0YWJsZSBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cyAqLworCXdkLT5oYXNoX3ZpcnQgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh3ZC0+cGRldiwgV0Q3MTlYX0hBU0hfVEFCTEVfU0laRSwKKwkJCQkJICAgICAmd2QtPmhhc2hfcGh5cyk7CisJaWYgKCF3ZC0+aGFzaF92aXJ0KSB7CisJCWRldl93YXJuKCZ3ZC0+cGRldi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIGhhc2ggYnVmZmVyXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2ZyZWVfcGFyYW1zOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHdkLT5wZGV2LT5pcnEsIHdkNzE5eF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJICAid2Q3MTl4Iiwgd2QpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJ1bmFibGUgdG8gYXNzaWduIElSUSAlZFxuIiwKKwkJCSB3ZC0+cGRldi0+aXJxKTsKKwkJZ290byBmYWlsX2ZyZWVfaGFzaDsKKwl9CisKKwkvKiByZWFkIHBhcmFtZXRlcnMgZnJvbSBFRVBST00gKi8KKwl3ZDcxOXhfcmVhZF9lZXByb20od2QpOworCisJcmV0ID0gd2Q3MTl4X2NoaXBfaW5pdCh3ZCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX2ZyZWVfaXJxOworCisJc2gtPnRoaXNfaWQgPSB3ZC0+cGFyYW1zLT5vd25fc2NzaV9pZCAmIFdENzE5WF9FRV9TQ1NJX0lEX01BU0s7CisKKwlkZXZfaW5mbygmd2QtPnBkZXYtPmRldiwgIiVzIGF0IEkvTyAweCVseCwgSVJRICV1LCBTQ1NJIElEICVkXG4iLAorCQkgY2FyZF90eXBlc1t3ZC0+dHlwZV0sIHNoLT5iYXNlLCBzaC0+aXJxLCBzaC0+dGhpc19pZCk7CisKKwlyZXR1cm4gMDsKKworZmFpbF9mcmVlX2lycToKKwlmcmVlX2lycSh3ZC0+cGRldi0+aXJxLCB3ZCk7CitmYWlsX2ZyZWVfaGFzaDoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHdkLT5wZGV2LCBXRDcxOVhfSEFTSF9UQUJMRV9TSVpFLCB3ZC0+aGFzaF92aXJ0LAorCQkJICAgIHdkLT5oYXNoX3BoeXMpOworZmFpbF9mcmVlX3BhcmFtczoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHdkLT5wZGV2LCBzaXplb2Yoc3RydWN0IHdkNzE5eF9ob3N0X3BhcmFtKSwKKwkJCSAgICB3ZC0+cGFyYW1zLCB3ZC0+cGFyYW1zX3BoeXMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgd2Q3MTl4X3RlbXBsYXRlID0geworCS5uYW1lCQkJCT0gIldlc3Rlcm4gRGlnaXRhbCA3MTl4IiwKKwkucXVldWVjb21tYW5kCQkJPSB3ZDcxOXhfcXVldWVjb21tYW5kLAorCS5laF9hYm9ydF9oYW5kbGVyCQk9IHdkNzE5eF9hYm9ydCwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSB3ZDcxOXhfZGV2X3Jlc2V0LAorCS5laF9idXNfcmVzZXRfaGFuZGxlcgkJPSB3ZDcxOXhfYnVzX3Jlc2V0LAorCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJCT0gd2Q3MTl4X2hvc3RfcmVzZXQsCisJLmJpb3NfcGFyYW0JCQk9IHdkNzE5eF9iaW9zcGFyYW0sCisJLnByb2NfbmFtZQkJCT0gIndkNzE5eCIsCisJLmNhbl9xdWV1ZQkJCT0gMjU1LAorCS50aGlzX2lkCQkJPSA3LAorCS5zZ190YWJsZXNpemUJCQk9IFdENzE5WF9TRywKKwkuY21kX3Blcl9sdW4JCQk9IFdENzE5WF9DTURfUEVSX0xVTiwKKwkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAorfTsKKworc3RhdGljIGludCB3ZDcxOXhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBTY3NpX0hvc3QgKnNoOworCXN0cnVjdCB3ZDcxOXggKndkOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlVuYWJsZSB0byBzZXQgMzItYml0IERNQSBtYXNrXG4iKTsKKwkJZ290byBkaXNhYmxlX2RldmljZTsKKwl9CisKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJ3ZDcxOXgiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRpc2FibGVfZGV2aWNlOworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJZXJyID0gLUVOT0RFVjsKKwlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSA9PSAwKQorCQlnb3RvIHJlbGVhc2VfcmVnaW9uOworCisJZXJyID0gLUVOT01FTTsKKwlzaCA9IHNjc2lfaG9zdF9hbGxvYygmd2Q3MTl4X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IHdkNzE5eCkpOworCWlmICghc2gpCisJCWdvdG8gcmVsZWFzZV9yZWdpb247CisKKwl3ZCA9IHNob3N0X3ByaXYoc2gpOworCXdkLT5iYXNlID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCWlmICghd2QtPmJhc2UpCisJCWdvdG8gZnJlZV9ob3N0OworCXdkLT5wZGV2ID0gcGRldjsKKworCWVyciA9IHdkNzE5eF9ib2FyZF9mb3VuZChzaCk7CisJaWYgKGVycikKKwkJZ290byB1bm1hcDsKKworCWVyciA9IHNjc2lfYWRkX2hvc3Qoc2gsICZ3ZC0+cGRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGRlc3Ryb3k7CisKKwlzY3NpX3NjYW5faG9zdChzaCk7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgc2gpOworCXJldHVybiAwOworCitkZXN0cm95OgorCXdkNzE5eF9kZXN0cm95KHdkKTsKK3VubWFwOgorCXBjaV9pb3VubWFwKHBkZXYsIHdkLT5iYXNlKTsKK2ZyZWVfaG9zdDoKKwlzY3NpX2hvc3RfcHV0KHNoKTsKK3JlbGVhc2VfcmVnaW9uOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitkaXNhYmxlX2RldmljZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitmYWlsOgorCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQgd2Q3MTl4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHdkNzE5eCAqd2QgPSBzaG9zdF9wcml2KHNoKTsKKworCXNjc2lfcmVtb3ZlX2hvc3Qoc2gpOworCXdkNzE5eF9kZXN0cm95KHdkKTsKKwlwY2lfaW91bm1hcChwZGV2LCB3ZC0+YmFzZSk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlzY3NpX2hvc3RfcHV0KHNoKTsKK30KKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHdkNzE5eF9wY2lfdGFibGUpID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1dELCAweDMyOTYpIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB3ZDcxOXhfcGNpX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHdkNzE5eF9wY2lfZHJpdmVyID0geworCS5uYW1lID0JCSJ3ZDcxOXgiLAorCS5pZF90YWJsZSA9CXdkNzE5eF9wY2lfdGFibGUsCisJLnByb2JlID0Jd2Q3MTl4X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0Jd2Q3MTl4X3BjaV9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3ZDcxOXhfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ3ZDcxOXhfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3ZDcxOXhfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmd2Q3MTl4X3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3ZDcxOXhfaW5pdCk7Cittb2R1bGVfZXhpdCh3ZDcxOXhfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiV2VzdGVybiBEaWdpdGFsIFdENzE5My83MTk3LzcyOTYgU0NTSSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk9uZHJlaiBaYXJ5LCBBYXJvbiBEZXdlbGwsIEp1ZXJnZW4gR2FlcnRuZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRSgid2Q3MTl4LXdjcy5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgid2Q3MTl4LXJpc2MuYmluIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvd2Q3MTl4LmggYi9kcml2ZXJzL3Njc2kvd2Q3MTl4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1ZTMwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS93ZDcxOXguaApAQCAtMCwwICsxLDI0OSBAQAorI2lmbmRlZiBfV0Q3MTlYX0hfCisjZGVmaW5lIF9XRDcxOVhfSF8KKworI2RlZmluZSBXRDcxOVhfU0cgMjU1CQkvKiBTY2F0dGVyL2dhdGhlciBzaXplICovCisjZGVmaW5lIFdENzE5WF9DTURfUEVSX0xVTiAxCS8qIFdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxpbmtlZCBjb21tYW5kcywgYnV0CisJCQkJICogdGhpcyBpcyAxIGZvciBub3cgdG8gYmUgc2FmZS4gKi8KKworc3RydWN0IHdkNzE5eF9zZ2xpc3QgeworCV9fbGUzMiBwdHI7CisJX19sZTMyIGxlbmd0aDsKK30gX19wYWNrZWQ7CisKK2VudW0gd2Q3MTl4X2NhcmRfdHlwZSB7CisJV0Q3MTlYX1RZUEVfVU5LTk9XTiA9IDAsCisJV0Q3MTlYX1RZUEVfNzE5MywKKwlXRDcxOVhfVFlQRV83MTk3LAorCVdENzE5WF9UWVBFXzcyOTYsCit9OworCit1bmlvbiB3ZDcxOXhfcmVncyB7CisJX19sZTMyIGFsbDsJLyogQWxsIFN0YXR1cyBhdCBvbmNlICovCisJc3RydWN0IHsKKwkJdTggT1BDOwkJLyogT3Bjb2RlIHJlZ2lzdGVyICovCisJCXU4IFNDU0k7CS8qIFNDU0kgRXJyb3JzICovCisJCXU4IFNVRTsJCS8qIFNwaWRlciB1bmlxdWUgRXJyb3JzICovCisJCXU4IElOVDsJCS8qIEludGVycnVwdCBTdGF0dXMgKi8KKwl9IGJ5dGVzOworfTsKKworLyogU3BpZGVyIENvbW1hbmQgQmxvY2sgKFNDQikgKi8KK3N0cnVjdCB3ZDcxOXhfc2NiIHsKKwlfX2xlMzIgSW50X1NDQjsJLyogMDAtMDMgSW50ZXJuYWwgU0NCIGxpbmsgcG9pbnRlciAobXVzdCBiZSBjbGVhcmVkKSAqLworCXU4IFNDQl9vcGNvZGU7CS8qIDA0IFNDQiBDb21tYW5kIG9wY29kZSAqLworCXU4IENEQl90YWc7CS8qIDA1IFNDU0kgVGFnIGJ5dGUgZm9yIENEQiBxdWV1ZXMgKDAgaWYgdW50YWdnZWQpICovCisJdTggbHVuOwkJLyogMDYgU0NTSSBMVU4gKi8KKwl1OCBkZXZpZDsJLyogMDcgU0NTSSBEZXZpY2UgSUQgKi8KKwl1OCBDREJbMTZdOwkvKiAwOC0yMyBTQ1NJIENEQiAoMTYgYnl0ZXMgYXMgZGVmaW5lZCBieSBBTlNJIHNwZWMuICovCisJX19sZTMyIGRhdGFfcDsJLyogMjQtMjcgRGF0YSB0cmFuc2ZlciBhZGRyZXNzIChvciBTRyBsaXN0IGFkZHJlc3MpICovCisJX19sZTMyIGRhdGFfbGVuZ3RoOyAvKiAyOC0zMSBEYXRhIHRyYW5zZmVyIExlbmd0aCAob3IgU0cgbGlzdCBsZW5ndGgpICovCisJX19sZTMyIENEQl9saW5rOyAgICAvKiAzMi0zNSBTQ1NJIENEQiBMaW5rIFB0ciAqLworCV9fbGUzMiBzZW5zZV9idWY7ICAgLyogMzYtMzkgQXV0byByZXF1ZXN0IHNlbnNlIGJ1ZmZlciBhZGRyZXNzICovCisJdTggc2Vuc2VfYnVmX2xlbmd0aDsvKiA0MCBBdXRvIHJlcXVlc3Qgc2Vuc2UgdHJhbnNmZXIgbGVuZ3RoICovCisJdTggcmVzZXJ2ZWQ7CS8qIDQxIHJlc2VydmVkICovCisJdTggU0NCX29wdGlvbnM7CS8qIDQyIFNDQi1vcHRpb25zICovCisJdTggU0NCX3RhZ19tc2c7CS8qIDQzIFRhZ2dlZCBtZXNzYWdlcyBvcHRpb25zICovCisJLyogTm90IGZpbGxlZCBpbiBieSBob3N0ICovCisJX19sZTMyIHJlcV9wdHI7CS8qIDQ0LTQ3IFB0ciB0byBIb3N0IFJlcXVlc3QgcmV0dXJuZWQgb24gaW50ZXJydXB0ICovCisJdTggaG9zdF9vcGNvZGU7CS8qIDQ4IEhvc3QgQ29tbWFuZCBPcGNvZGUgKHNhbWUgYXMgQU1SXzAwKSAqLworCXU4IHNjc2lfc3RhdDsJLyogNDkgU0NTSSBTdGF0dXMgcmV0dXJuZWQgKi8KKwl1OCByZXRfZXJyb3I7CS8qIDUwIFNQSURFUiBVbmlxdWUgRXJyb3IgQ29kZSByZXR1cm5lZCAoU1VFKSAqLworCXU4IGludF9zdGF0OwkvKiA1MSBNZXNzYWdlIHU4IC8gSW50ZXJydXB0IFN0YXR1cyBieXRlIHJldHVybmVkICovCisJX19sZTMyIHRyYW5zZmVycmVkOyAvKiA1Mi01NSBCeXRlcyBUcmFuc2ZlcnJlZCAqLworCXU4IGxhc3RfdHJhbnNbM107ICAvKiA1Ni01OCBCeXRlcyBUcmFuc2ZlcnJlZCBpbiBsYXN0IHNlc3Npb24gKi8KKwl1OCBsZW5ndGg7CS8qIDU5IFNDU0kgTWVzc2FnZXMgTGVuZ3RoICgxLTgpICovCisJdTggc3luY19vZmZzZXQ7CS8qIDYwIFN5bmNocm9ub3VzIG9mZnNldCAqLworCXU4IHN5bmNfcmF0ZTsJLyogNjEgU3luY2hyb25vdXMgcmF0ZSAqLworCXU4IGZsYWdzWzJdOwkvKiA2Mi02MyBTQ0Igc3BlY2lmaWMgZmxhZ3MgKGxvY2FsIHRvIGVhY2ggdGhyZWFkKSAqLworCS8qIGV2ZXJ5dGhpbmcgYmVsb3cgaXMgZm9yIGRyaXZlciB1c2UgKG5vdCB1c2VkIGJ5IGNhcmQpICovCisJZG1hX2FkZHJfdCBwaHlzOwkvKiBidXMgYWRkcmVzcyBvZiB0aGUgU0NCICovCisJc3RydWN0IHNjc2lfY21uZCAqY21kOwkvKiBhIGNvcHkgb2YgdGhlIHBvaW50ZXIgd2Ugd2VyZSBwYXNzZWQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHdkNzE5eF9zZ2xpc3Qgc2dfbGlzdFtXRDcxOVhfU0ddIF9fYWxpZ25lZCg4KTsgLyogU0cgbGlzdCAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHdkNzE5eCB7CisJc3RydWN0IFNjc2lfSG9zdCAqc2g7CS8qIHBvaW50ZXIgdG8gaG9zdCBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJZW51bSB3ZDcxOXhfY2FyZF90eXBlIHR5cGU7IC8qIHR5cGUgb2YgY2FyZCAqLworCXZvaWQgKmZ3X3ZpcnQ7CQkvKiBmaXJtd2FyZSBidWZmZXIgQ1BVIGFkZHJlc3MgKi8KKwlkbWFfYWRkcl90IGZ3X3BoeXM7CS8qIGZpcm13YXJlIGJ1ZmZlciBidXMgYWRkcmVzcyAqLworCXNpemVfdCBmd19zaXplOwkJLyogZmlybXdhcmUgYnVmZmVyIHNpemUgKi8KKwlzdHJ1Y3Qgd2Q3MTl4X2hvc3RfcGFyYW0gKnBhcmFtczsgLyogaG9zdCBwYXJhbWV0ZXJzIChFRVBST00pICovCisJZG1hX2FkZHJfdCBwYXJhbXNfcGh5czsgLyogaG9zdCBwYXJhbWV0ZXJzIGJ1cyBhZGRyZXNzICovCisJdm9pZCAqaGFzaF92aXJ0OwkvKiBoYXNoIHRhYmxlIENQVSBhZGRyZXNzICovCisJZG1hX2FkZHJfdCBoYXNoX3BoeXM7CS8qIGhhc2ggdGFibGUgYnVzIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9zY2JzOworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9zY2JzOworfTsKKworLyogdGltZW91dCBkZWxheXMgaW4gbWljcm9zZWNzICovCisjZGVmaW5lIFdENzE5WF9XQUlUX0ZPUl9DTURfUkVBRFkJNTAwCisjZGVmaW5lIFdENzE5WF9XQUlUX0ZPUl9SSVNDCQkyMDAwCisjZGVmaW5lIFdENzE5WF9XQUlUX0ZPUl9TQ1NJX1JFU0VUCTMwMDAwMDAKKworLyogQWxsIGNvbW1hbmRzIGV4Y2VwdCAweDAwIGdlbmVyYXRlIGFuIGludGVycnVwdCAqLworI2RlZmluZSBXRDcxOVhfQ01EX1JFQURZCTB4MDAgLyogQ29tbWFuZCByZWdpc3RlciByZWFkeSAob3Igbm9vcCkgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9JTklUX1JJU0MJMHgwMSAvKiBJbml0aWFsaXplIFJJU0MgKi8KKy8qIDB4MDIgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9CVVNSRVNFVAkweDAzIC8qIEFzc2VydCBTQ1NJIGJ1cyByZXNldCAqLworI2RlZmluZSBXRDcxOVhfQ01EX1JFQURfRklSTVZFUgkweDA0IC8qIFJlYWQgdGhlIEZpcm13YXJlIFJldmlzaW9uICovCisjZGVmaW5lIFdENzE5WF9DTURfRUNIT19CWVRFUwkweDA1IC8qIEVjaG8gY29tbWFuZCBieXRlcyAoRFcpICovCisvKiAweDA2IGlzIHJlc2VydmVkICovCisvKiAweDA3IGlzIHJlc2VydmVkICovCisjZGVmaW5lIFdENzE5WF9DTURfR0VUX1BBUkFNCTB4MDggLyogR2V0IHByb2dyYW1tYWJsZSBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFdENzE5WF9DTURfU0VUX1BBUkFNCTB4MDkgLyogU2V0IHByb2dyYW1tYWJsZSBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFdENzE5WF9DTURfU0xFRVAJMHgwYSAvKiBQdXQgU1BJREVSIHRvIHNsZWVwICovCisjZGVmaW5lIFdENzE5WF9DTURfUkVBRF9JTklUCTB4MGIgLyogUmVhZCBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFdENzE5WF9DTURfUkVTVE9SRV9JTklUCTB4MGMgLyogUmVzdG9yZSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzICovCisvKiAweDBkIGlzIHJlc2VydmVkICovCisvKiAweDBlIGlzIHJlc2VydmVkICovCisvKiAweDBmIGlzIHJlc2VydmVkICovCisjZGVmaW5lIFdENzE5WF9DTURfQUJPUlRfVEFHCTB4MTAgLyogU2VuZCBBYm9ydCB0YWcgbWVzc2FnZSB0byB0YXJnZXQgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9BQk9SVAkweDExIC8qIFNlbmQgQWJvcnQgbWVzc2FnZSB0byB0YXJnZXQgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9SRVNFVAkweDEyIC8qIFNlbmQgUmVzZXQgbWVzc2FnZSB0byB0YXJnZXQgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9JTklUX1NDQU0JMHgxMyAvKiBJbml0aWF0ZSBTQ0FNICovCisjZGVmaW5lIFdENzE5WF9DTURfR0VUX1NZTkMJMHgxNCAvKiBHZXQgc3luY2hyb25vdXMgcmF0ZXMgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9TRVRfU1lOQwkweDE1IC8qIFNldCBzeW5jaHJvbm91cyByYXRlcyAqLworI2RlZmluZSBXRDcxOVhfQ01EX0dFVF9XSURUSAkweDE2IC8qIEdldCBTQ1NJIGJ1cyB3aWR0aCAqLworI2RlZmluZSBXRDcxOVhfQ01EX1NFVF9XSURUSAkweDE3IC8qIFNldCBTQ1NJIGJ1cyB3aWR0aCAqLworI2RlZmluZSBXRDcxOVhfQ01EX0dFVF9UQUdTCTB4MTggLyogR2V0IHRhZyBmbGFncyAqLworI2RlZmluZSBXRDcxOVhfQ01EX1NFVF9UQUdTCTB4MTkgLyogU2V0IHRhZyBmbGFncyAqLworI2RlZmluZSBXRDcxOVhfQ01EX0dFVF9QQVJBTTIJMHgxYSAvKiBHZXQgcHJvZ3JhbW1hYmxlIHBhcmFtcyAoZm9ybWF0IDIpICovCisjZGVmaW5lIFdENzE5WF9DTURfU0VUX1BBUkFNMgkweDFiIC8qIFNldCBwcm9ncmFtbWFibGUgcGFyYW1zIChmb3JtYXQgMikgKi8KKy8qIENvbW1hbmRzIHdpdGggcmVxdWVzdCBwb2ludGVycyAobWFpbGJveCkgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9QUk9DRVNTX1NDQgkweDgwIC8qIFByb2Nlc3MgU0NTSSBDb250cm9sIEJsb2NrIChTQ0IpICovCisvKiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGVkIG9uIGFjY2VwdGFuY2Ugb2YgU0NCIHBvaW50ZXIgKi8KKworLyogaW50ZXJydXB0IHN0YXR1cyBkZWZpbmVzICovCisjZGVmaW5lIFdENzE5WF9JTlRfTk9ORQkJMHgwMCAvKiBObyBpbnRlcnJ1cHQgcGVuZGluZyAqLworI2RlZmluZSBXRDcxOVhfSU5UX05PRVJST1JTCTB4MDEgLyogQ29tbWFuZCBjb21wbGV0ZWQgd2l0aCBubyBlcnJvcnMgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9MSU5LTk9FUlJPUlMJMHgwMiAvKiBsaW5rIGNtZCBjb21wbGV0ZWQgd2l0aCBubyBlcnJvcnMgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9MSU5LTk9TVEFUVVMJMHgwMyAvKiBsaW5rIGNtZCBjb21wbGV0ZWQgd2l0aCBubyBmbGFnIHNldCAqLworI2RlZmluZSBXRDcxOVhfSU5UX0VSUk9SU0xPR0dFRAkweDA0IC8qIGNtZCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMgbG9nZ2VkICovCisjZGVmaW5lIFdENzE5WF9JTlRfU1BJREVSRkFJTEVECTB4MDUgLyogY21kIGZhaWxlZCB3aXRob3V0IHZhbGlkIFNDU0kgc3RhdHVzICovCisjZGVmaW5lIFdENzE5WF9JTlRfQkFESU5UCTB4ODAgLyogdW5zb2xpY2l0ZWQgaW50ZXJydXB0ICovCisjZGVmaW5lIFdENzE5WF9JTlRfUElPUkVBRFkJMHhmMCAvKiBkYXRhIHJlYWR5IGZvciBQSU8gb3V0cHV0ICovCisKKy8qIFNwaWRlciBVbmlxdWUgRXJyb3IgQ29kZXMgKFNVRSkgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9OT0VSUk9SUwkweDAwIC8qIE5vIGVycm9ycyBkZXRlY3RlZCBieSBTUElERVIgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9SRUpFQ1RFRAkweDAxIC8qIENvbW1hbmQgUmVqZWN0ZWQgKGJhZCBvcGNvZGUvcGFyYW0pICovCisjZGVmaW5lIFdENzE5WF9TVUVfU0NCUUZVTEwJMHgwMiAvKiBTQ0IgcXVldWUgZnVsbCAqLworLyogMHgwMyBpcyByZXNlcnZlZCAqLworI2RlZmluZSBXRDcxOVhfU1VFX1RFUk0JCTB4MDQgLyogSG9zdCB0ZXJtaW5hdGVkIFNDQiB2aWEgcHJpbWF0aXZlIGNtZCAqLworI2RlZmluZSBXRDcxOVhfU1VFX0NIQU4xUEFSCTB4MDUgLyogUENJIENoYW5uZWwgMSBwYXJpdHkgZXJyb3Igb2NjdXJyZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9DSEFOMUFCT1JUCTB4MDYgLyogUENJIENoYW5uZWwgMSBzeXN0ZW0gYWJvcnQgb2NjdXJyZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9DSEFOMjNQQVIJMHgwNyAvKiBQQ0kgQ2hhbm5lbCAyLzMgcGFyaXR5IGVycm9yIG9jY3VycmVkICovCisjZGVmaW5lIFdENzE5WF9TVUVfQ0hBTjIzQUJPUlQJMHgwOCAvKiBQQ0kgQ2hhbm5lbCAyLzMgc3lzdGVtIGFib3J0IG9jY3VycmVkICovCisjZGVmaW5lIFdENzE5WF9TVUVfVElNRU9VVAkweDEwIC8qIFNlbGVjdGlvbi9yZXNlbGVjdGlvbiB0aW1lb3V0ICovCisjZGVmaW5lIFdENzE5WF9TVUVfUkVTRVQJMHgxMSAvKiBTQ1NJIGJ1cyByZXNldCBvY2N1cnJlZCAqLworI2RlZmluZSBXRDcxOVhfU1VFX0JVU0VSUk9SCTB4MTIgLyogU0NTSSBidXMgZXJyb3IgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9XUk9OR1dBWQkweDEzIC8qIFdyb25nIGRhdGEgdHJhbnNmZXIgZGlyIHNldCBieSB0YXJnZXQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9CQURQSEFTRQkweDE0IC8qIFNDU0kgcGhhc2UgaWxsZWdhbCBvciB1bmV4cGVjdGVkICovCisjZGVmaW5lIFdENzE5WF9TVUVfVE9PTE9ORwkweDE1IC8qIHRhcmdldCByZXF1ZXN0ZWQgdG9vIG11Y2ggZGF0YSAqLworI2RlZmluZSBXRDcxOVhfU1VFX0JVU0ZSRUUJMHgxNiAvKiBVbmV4cGVjdGVkIFNDU0kgYnVzIGZyZWUgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9BUlNET05FCTB4MTcgLyogQXV0byByZXF1ZXN0IHNlbnNlIGV4ZWN1dGVkICovCisjZGVmaW5lIFdENzE5WF9TVUVfSUdOT1JFRAkweDE4IC8qIFNDU0kgbWVzc2FnZSB3YXMgaWdub3JlZCBieSB0YXJnZXQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9XUk9OR1RBR1MJMHgxOSAvKiBUYWdnZWQgU0NCICYgdGFncyBvZmYgKG9yIHZpY2UgdmVyc2EpICovCisjZGVmaW5lIFdENzE5WF9TVUVfQkFEVEFHUwkweDFhIC8qIFdyb25nIHRhZyBtZXNzYWdlIHR5cGUgZm9yIHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfU1VFX05PU0NBTUlECTB4MWIgLyogTm8gU0NBTSBzb2Z0IElEIGF2YWlsYWJsZSAqLworCisvKiBjb2RlIHNpemVzICovCisjZGVmaW5lCVdENzE5WF9IQVNIX1RBQkxFX1NJWkUJNDA5NgorCisvKiBBZHZhbmNlZCBNb2RlIFJlZ2lzdGVycyAqLworLyogUmVncyAweDAwLi4weDFmIGFyZSBmb3IgQWR2YW5jZWQgTW9kZSBvZiB0aGUgY2FyZCAoUklTQyBpcyBydW5uaW5nKS4gKi8KKyNkZWZpbmUgV0Q3MTlYX0FNUl9DT01NQU5ECQkweDAwCisjZGVmaW5lIFdENzE5WF9BTVJfQ01EX1BBUkFNCQkweDAxCisjZGVmaW5lIFdENzE5WF9BTVJfQ01EX1BBUkFNXzIJCTB4MDIKKyNkZWZpbmUgV0Q3MTlYX0FNUl9DTURfUEFSQU1fMwkJMHgwMworI2RlZmluZSBXRDcxOVhfQU1SX1NDQl9JTgkJMHgwNAorCisjZGVmaW5lIFdENzE5WF9BTVJfQklPU19TSEFSRV9JTlQJMHgwZgorCisjZGVmaW5lIFdENzE5WF9BTVJfU0NCX09VVAkJMHgxOAorI2RlZmluZSBXRDcxOVhfQU1SX09QX0NPREUJCTB4MWMKKyNkZWZpbmUgV0Q3MTlYX0FNUl9TQ1NJX1NUQVRVUwkJMHgxZAorI2RlZmluZSBXRDcxOVhfQU1SX1NDQl9FUlJPUgkJMHgxZQorI2RlZmluZSBXRDcxOVhfQU1SX0lOVF9TVEFUVVMJCTB4MWYKKworI2RlZmluZSBXRDcxOVhfRElTQUJMRV9JTlQJMHg4MAorCisvKiBTQ0IgZmxhZ3MgKi8KKyNkZWZpbmUgV0Q3MTlYX1NDQl9GTEFHU19DSEVDS19ESVJFQ1RJT04JMHgwMQorI2RlZmluZSBXRDcxOVhfU0NCX0ZMQUdTX1BDSV9UT19TQ1NJCQkweDAyCisjZGVmaW5lIFdENzE5WF9TQ0JfRkxBR1NfQVVUT19SRVFVRVNUX1NFTlNFCTB4MTAKKyNkZWZpbmUgV0Q3MTlYX1NDQl9GTEFHU19ET19TQ0FUVEVSX0dBVEhFUgkweDIwCisjZGVmaW5lIFdENzE5WF9TQ0JfRkxBR1NfTk9fRElTQ09OTkVDVAkJMHg0MAorCisvKiBQQ0kgUmVnaXN0ZXJzIHVzZWQgZm9yIHJlc2V0LCBpbml0aWFsIGNvZGUgZG93bmxvYWQgKi8KKy8qIFJlZ3MgMHgyMC4uMHgzZiBhcmUgZm9yIE5vcm1hbCAoRE9TKSBtb2RlIChSSVNDIGlzIGFzbGVlcCkuICovCisjZGVmaW5lIFdENzE5WF9QQ0lfR1BJT19DT05UUk9MCQkweDNDCisjZGVmaW5lIFdENzE5WF9QQ0lfR1BJT19EQVRBCQkweDNECisjZGVmaW5lIFdENzE5WF9QQ0lfUE9SVF9SRVNFVAkJMHgzRQorI2RlZmluZSBXRDcxOVhfUENJX01PREVfU0VMRUNUCQkweDNGCisKKyNkZWZpbmUgV0Q3MTlYX1BDSV9FWFRFUk5BTF9BRERSCTB4NjAKKyNkZWZpbmUgV0Q3MTlYX1BDSV9JTlRFUk5BTF9BRERSCTB4NjQKKyNkZWZpbmUgV0Q3MTlYX1BDSV9ETUFfVFJBTlNGRVJfU0laRQkweDY2CisjZGVmaW5lIFdENzE5WF9QQ0lfQ0hBTk5FTDJfM0NNRAkweDY4CisjZGVmaW5lIFdENzE5WF9QQ0lfQ0hBTk5FTDJfM1NUQVRVUwkweDY5CisKKyNkZWZpbmUgV0Q3MTlYX0dQSU9fSURfQklUUwkJMHgwYQorI2RlZmluZSBXRDcxOVhfUFJBTV9CQVNFX0FERFIJCTB4MDAKKworLyogY29kZXMgd3JpdHRlbiB0byBvciByZWFkIGZyb20gdGhlIGNhcmQgKi8KKyNkZWZpbmUgV0Q3MTlYX1BDSV9SRVNFVAkJIDB4MDEKKyNkZWZpbmUgV0Q3MTlYX0VOQUJMRV9BRFZBTkNFX01PREUJIDB4MDEKKworI2RlZmluZSBXRDcxOVhfU1RBUlRfQ0hBTk5FTDJfM0RNQQkgMHgxNworI2RlZmluZSBXRDcxOVhfU1RBUlRfQ0hBTk5FTDJfM0RPTkUJIDB4MDEKKyNkZWZpbmUgV0Q3MTlYX1NUQVJUX0NIQU5ORUwyXzNBQk9SVAkgMHgyMAorCisvKiAzM0MyOTYgR1BJTyBiaXRzIGZvciBFRVBST00gcGlucyAqLworI2RlZmluZSBXRDcxOVhfRUVfREkJKDEgPDwgMSkKKyNkZWZpbmUgV0Q3MTlYX0VFX0NTCSgxIDw8IDIpCisjZGVmaW5lIFdENzE5WF9FRV9DTEsJKDEgPDwgMykKKyNkZWZpbmUgV0Q3MTlYX0VFX0RPCSgxIDw8IDQpCisKKy8qIEVFUFJPTSBjb250ZW50cyAqLworc3RydWN0IHdkNzE5eF9lZXByb21faGVhZGVyIHsKKwl1OCBzaWcxOworCXU4IHNpZzI7CisJdTggdmVyc2lvbjsKKwl1OCBjaGVja3N1bTsKKwl1OCBjZmdfb2Zmc2V0OworCXU4IGNmZ19zaXplOworCXU4IHNldHVwX29mZnNldDsKKwl1OCBzZXR1cF9zaXplOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBXRDcxOVhfRUVfU0lHMQkJMAorI2RlZmluZSBXRDcxOVhfRUVfU0lHMgkJMQorI2RlZmluZSBXRDcxOVhfRUVfVkVSU0lPTgkyCisjZGVmaW5lIFdENzE5WF9FRV9DSEVDS1NVTQkzCisjZGVmaW5lIFdENzE5WF9FRV9DRkdfT0ZGU0VUCTQKKyNkZWZpbmUgV0Q3MTlYX0VFX0NGR19TSVpFCTUKKyNkZWZpbmUgV0Q3MTlYX0VFX1NFVFVQX09GRlNFVAk2CisjZGVmaW5lIFdENzE5WF9FRV9TRVRVUF9TSVpFCTcKKworI2RlZmluZSBXRDcxOVhfRUVfU0NTSV9JRF9NQVNLCTB4ZgorCisvKiBTUElERVIgSG9zdCBQYXJhbWV0ZXJzIEJsb2NrICg9RUVQUk9NIGNvbmZpZ3VyYXRpb24gYmxvY2spICovCitzdHJ1Y3Qgd2Q3MTl4X2hvc3RfcGFyYW0geworCXU4IGNoXzFfdGg7CS8qIEZJRk8gdGhyZXNob2xkICovCisJdTggc2NzaV9jb25mOwkvKiBTQ1NJIGNvbmZpZ3VyYXRpb24gKi8KKwl1OCBvd25fc2NzaV9pZDsJLyogY29udHJvbGxlciBTQ1NJIElEICovCisJdTggc2VsX3RpbWVvdXQ7CS8qIHNlbGVjdGlvbiB0aW1lb3V0Ki8KKwl1OCBzbGVlcF90aW1lcjsJLyogc2VlcCB0aW1lciAqLworCV9fbGUxNiBjZGJfc2l6ZTsvKiBDREIgc2l6ZSBncm91cHMgKi8KKwlfX2xlMTYgdGFnX2VuOwkvKiBUYWcgbXNnIGVuYWJsZXMgKElEIDAtMTUpICovCisJdTggc2NzaV9wYWQ7CS8qIFNDU0kgcGFkIGNvbnRyb2wgKi8KKwlfX2xlMzIgd2lkZTsJLyogV0lERSBtc2cgb3B0aW9ucyAoSUQgMC0xNSkgKi8KKwlfX2xlMzIgc3luYzsJLyogU1lOQyBtc2cgb3B0aW9ucyAoSUQgMC0xNSkgKi8KKwl1OCBzb2Z0X21hc2s7CS8qIHNvZnQgZXJyb3IgbWFzayAqLworCXU4IHVuc29sX21hc2s7CS8qIHVuc29saWNpdGVkIGVycm9yIG1hc2sgKi8KK30gX19wYWNrZWQ7CisKKyNlbmRpZiAvKiBfV0Q3MTlYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9rbmF2X3Ftc3MuaCBiL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zcy5oCmluZGV4IGJjOWRjYzguLjUxZGEyMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zcy5oCisrKyBiL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zcy5oCkBAIC0zNDgsMTUgKzM0OCwxNSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVnaW9uLCAma2Rldi0+cmVnaW9ucywgbGlzdCkKIAogI2RlZmluZSBmaXJzdF9yZWdpb24oa2RldikJCQkJCVwKLQlsaXN0X2ZpcnN0X2VudHJ5KCZrZGV2LT5yZWdpb25zLCBcCi0JCQlzdHJ1Y3Qga25hdl9yZWdpb24sIGxpc3QpCisJbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZrZGV2LT5yZWdpb25zLCBcCisJCQkJIHN0cnVjdCBrbmF2X3JlZ2lvbiwgbGlzdCkKIAogI2RlZmluZSBmb3JfZWFjaF9xdWV1ZV9yYW5nZShrZGV2LCByYW5nZSkJCQlcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyYW5nZSwgJmtkZXYtPnF1ZXVlX3JhbmdlcywgbGlzdCkKIAogI2RlZmluZSBmaXJzdF9xdWV1ZV9yYW5nZShrZGV2KQkJCQkJXAotCWxpc3RfZmlyc3RfZW50cnkoJmtkZXYtPnF1ZXVlX3JhbmdlcywgXAotCQkJc3RydWN0IGtuYXZfcmFuZ2VfaW5mbywgbGlzdCkKKwlsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmtkZXYtPnF1ZXVlX3JhbmdlcywgXAorCQkJCSBzdHJ1Y3Qga25hdl9yYW5nZV9pbmZvLCBsaXN0KQogCiAjZGVmaW5lIGZvcl9lYWNoX3Bvb2woa2RldiwgcG9vbCkJCQkJXAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9vbCwgJmtkZXYtPnBvb2xzLCBsaXN0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkva25hdl9xbXNzX3F1ZXVlLmMgYi9kcml2ZXJzL3NvYy90aS9rbmF2X3Ftc3NfcXVldWUuYwppbmRleCAwYTJjODYzLi45YjhkZDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy90aS9rbmF2X3Ftc3NfcXVldWUuYworKysgYi9kcml2ZXJzL3NvYy90aS9rbmF2X3Ftc3NfcXVldWUuYwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJCWRldl9lcnIoa2Rldi0+ZGV2LCAib3V0IG9mIGRlc2NzIGluIHJlZ2lvbiglZCkgZm9yIHBvb2woJXMpXG4iLAogCQkJcmVnaW9uX2lkLCBuYW1lKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX3VubG9jazsKIAl9CiAKIAkvKiBSZWdpb24gbWFpbnRhaW5zIGEgc29ydGVkIChieSByZWdpb24gb2Zmc2V0KSBsaXN0IG9mIHBvb2xzCkBAIC04MTUsMTUgKzgxNSwxNiBAQAogCQlkZXZfZXJyKGtkZXYtPmRldiwgInBvb2woJXMpIGNyZWF0ZSBmYWlsZWQ6IGZyYWdtZW50ZWQgZGVzYyBwb29sIGluIHJlZ2lvbiglZClcbiIsCiAJCQluYW1lLCByZWdpb25faWQpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfdW5sb2NrOwogCX0KIAogCW11dGV4X3VubG9jaygma25hdl9kZXZfbG9jayk7CiAJa2Rlc2NfZmlsbF9wb29sKHBvb2wpOwogCXJldHVybiBwb29sOwogCi1lcnI6CitlcnJfdW5sb2NrOgogCW11dGV4X3VubG9jaygma25hdl9kZXZfbG9jayk7CitlcnI6CiAJa2ZyZWUocG9vbC0+bmFtZSk7CiAJZGV2bV9rZnJlZShrZGV2LT5kZXYsIHBvb2wpOwogCXJldHVybiBFUlJfUFRSKHJldCk7CkBAIC0xMzA1LDE0ICsxMzA2LDE0IEBACiBzdGF0aWMgdm9pZCBrbmF2X3F1ZXVlX2ZyZWVfcmVnaW9ucyhzdHJ1Y3Qga25hdl9kZXZpY2UgKmtkZXYpCiB7CiAJc3RydWN0IGtuYXZfcmVnaW9uICpyZWdpb247Ci0Jc3RydWN0IGtuYXZfcG9vbCAqcG9vbDsKKwlzdHJ1Y3Qga25hdl9wb29sICpwb29sLCAqdG1wOwogCXVuc2lnbmVkIHNpemU7CiAKIAlmb3IgKDs7KSB7CiAJCXJlZ2lvbiA9IGZpcnN0X3JlZ2lvbihrZGV2KTsKIAkJaWYgKCFyZWdpb24pCiAJCQlicmVhazsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwb29sLCAmcmVnaW9uLT5wb29scywgcmVnaW9uX2luc3QpCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb29sLCB0bXAsICZyZWdpb24tPnBvb2xzLCByZWdpb25faW5zdCkKIAkJCWtuYXZfcG9vbF9kZXN0cm95KHBvb2wpOwogCiAJCXNpemUgPSByZWdpb24tPnZpcnRfZW5kIC0gcmVnaW9uLT52aXJ0X3N0YXJ0OwpAQCAtMTYzOSw3ICsxNjQwLDcgQEAKIAlzaXplID0gKDEgPDwga2Rldi0+aW5zdF9zaGlmdCkgKiBrZGV2LT5udW1fcXVldWVzX2luX3VzZTsKIAlrZGV2LT5pbnN0YW5jZXMgPSBkZXZtX2t6YWxsb2Moa2Rldi0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWtkZXYtPmluc3RhbmNlcykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvcl9lYWNoX3F1ZXVlX3JhbmdlKGtkZXYsIHJhbmdlKSB7CiAJCWlmIChyYW5nZS0+b3BzICYmIHJhbmdlLT5vcHMtPmluaXRfcmFuZ2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy92ZXJzYXRpbGUvS2NvbmZpZyBiL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9LY29uZmlnCmluZGV4IGJmNWVlOWMuLmE5MjhhN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9LY29uZmlnCkBAIC0xLDYgKzEsMTUgQEAKICMKICMgQVJNIFZlcnNhdGlsZSBTb0MgZHJpdmVycwogIworY29uZmlnIFNPQ19JTlRFR1JBVE9SX0NNCisJYm9vbCAiU29DIGJ1cyBkZXZpY2UgZm9yIHRoZSBBUk0gSW50ZWdyYXRvciBwbGF0Zm9ybSBjb3JlIG1vZHVsZXMiCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IKKwlzZWxlY3QgU09DX0JVUworCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFNvQyBidXMgb24gdGhlIEFSTSBJbnRlZ3JhdG9yIHBsYXRmb3JtCisJICBjb3JlIG1vZHVsZXMgcHJvdmlkaW5nIHNvbWUgc3lzZnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFTSUMKKwkgIHZhcmlhbnQuCisKIGNvbmZpZyBTT0NfUkVBTFZJRVcKIAlib29sICJTb0MgYnVzIGRldmljZSBmb3IgdGhlIEFSTSBSZWFsVmlldyBwbGF0Zm9ybXMiCiAJZGVwZW5kcyBvbiBBUkNIX1JFQUxWSUVXCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy92ZXJzYXRpbGUvTWFrZWZpbGUgYi9kcml2ZXJzL3NvYy92ZXJzYXRpbGUvTWFrZWZpbGUKaW5kZXggYWQ1NDc0My4uY2Y2MTJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdmVyc2F0aWxlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9NYWtlZmlsZQpAQCAtMSArMSwyIEBACitvYmotJChDT05GSUdfU09DX0lOVEVHUkFUT1JfQ00pCSs9IHNvYy1pbnRlZ3JhdG9yLm8KIG9iai0kKENPTkZJR19TT0NfUkVBTFZJRVcpCSs9IHNvYy1yZWFsdmlldy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy92ZXJzYXRpbGUvc29jLWludGVncmF0b3IuYyBiL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9zb2MtaW50ZWdyYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZDdkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy92ZXJzYXRpbGUvc29jLWludGVncmF0b3IuYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTHRkLgorICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfSURfT0ZGU0VUCTB4MDAKKworc3RhdGljIHUzMiBpbnRlZ3JhdG9yX2NvcmVpZDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW50ZWdyYXRvcl9jbV9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNvcmUtbW9kdWxlLWludGVncmF0b3IiLCB9LAorCXsgfQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmludGVncmF0b3JfYXJjaF9zdHIodTMyIGlkKQoreworCXN3aXRjaCAoKGlkID4+IDE2KSAmIDB4ZmYpIHsKKwljYXNlIDB4MDA6CisJCXJldHVybiAiQVNCIGxpdHRsZS1lbmRpYW4iOworCWNhc2UgMHgwMToKKwkJcmV0dXJuICJBSEIgbGl0dGxlLWVuZGlhbiI7CisJY2FzZSAweDAzOgorCQlyZXR1cm4gIkFIQi1MaXRlIHN5c3RlbSBidXMsIGJpLWVuZGlhbiI7CisJY2FzZSAweDA0OgorCQlyZXR1cm4gIkFIQiI7CisJY2FzZSAweDA4OgorCQlyZXR1cm4gIkFIQiBzeXN0ZW0gYnVzLCBBU0IgcHJvY2Vzc29yIGJ1cyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVbmtub3duIjsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICppbnRlZ3JhdG9yX2ZwZ2Ffc3RyKHUzMiBpZCkKK3sKKwlzd2l0Y2ggKChpZCA+PiAxMikgJiAweGYpIHsKKwljYXNlIDB4MDE6CisJCXJldHVybiAiWEM0MDYyIjsKKwljYXNlIDB4MDI6CisJCXJldHVybiAiWEM0MDg1IjsKKwljYXNlIDB4MDM6CisJCXJldHVybiAiWFZDNjAwIjsKKwljYXNlIDB4MDQ6CisJCXJldHVybiAiRVBNNzI1NkFFIChBbHRlcmEgUExEKSI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVbmtub3duIjsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGludGVncmF0b3JfZ2V0X21hbmYoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJTAyeFxuIiwgaW50ZWdyYXRvcl9jb3JlaWQgPj4gMjQpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50ZWdyYXRvcl9tYW5mX2F0dHIgPQorCV9fQVRUUihtYW51ZmFjdHVyZXIsICBTX0lSVUdPLCBpbnRlZ3JhdG9yX2dldF9tYW5mLCAgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IGludGVncmF0b3JfZ2V0X2FyY2goc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGludGVncmF0b3JfYXJjaF9zdHIoaW50ZWdyYXRvcl9jb3JlaWQpKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGludGVncmF0b3JfYXJjaF9hdHRyID0KKwlfX0FUVFIoYXJjaCwgIFNfSVJVR08sIGludGVncmF0b3JfZ2V0X2FyY2gsICBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgaW50ZWdyYXRvcl9nZXRfZnBnYShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaW50ZWdyYXRvcl9mcGdhX3N0cihpbnRlZ3JhdG9yX2NvcmVpZCkpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50ZWdyYXRvcl9mcGdhX2F0dHIgPQorCV9fQVRUUihmcGdhLCAgU19JUlVHTywgaW50ZWdyYXRvcl9nZXRfZnBnYSwgIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBpbnRlZ3JhdG9yX2dldF9idWlsZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwMnhcbiIsIChpbnRlZ3JhdG9yX2NvcmVpZCA+PiA0KSAmIDB4RkYpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50ZWdyYXRvcl9idWlsZF9hdHRyID0KKwlfX0FUVFIoYnVpbGQsICBTX0lSVUdPLCBpbnRlZ3JhdG9yX2dldF9idWlsZCwgIE5VTEwpOworCitzdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JhdG9yX3NvY19pbml0KHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCByZWdtYXAgKnN5c2Nvbl9yZWdtYXA7CisJc3RydWN0IHNvY19kZXZpY2UgKnNvY19kZXY7CisJc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlICpzb2NfZGV2X2F0dHI7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgaW50ZWdyYXRvcl9jbV9tYXRjaCk7CisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzeXNjb25fcmVnbWFwID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKG5wKTsKKwlpZiAoSVNfRVJSKHN5c2Nvbl9yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihzeXNjb25fcmVnbWFwKTsKKworCXJldCA9IHJlZ21hcF9yZWFkKHN5c2Nvbl9yZWdtYXAsIElOVEVHUkFUT1JfSERSX0lEX09GRlNFVCwKKwkJCSAgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaW50ZWdyYXRvcl9jb3JlaWQgPSB2YWw7CisKKwlzb2NfZGV2X2F0dHIgPSBremFsbG9jKHNpemVvZigqc29jX2Rldl9hdHRyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NfZGV2X2F0dHIpCisJCXJldHVybiAtRU5PTUVNOworCisJc29jX2Rldl9hdHRyLT5zb2NfaWQgPSAiSW50ZWdyYXRvciI7CisJc29jX2Rldl9hdHRyLT5tYWNoaW5lID0gIkludGVncmF0b3IiOworCXNvY19kZXZfYXR0ci0+ZmFtaWx5ID0gIlZlcnNhdGlsZSI7CisJc29jX2RldiA9IHNvY19kZXZpY2VfcmVnaXN0ZXIoc29jX2Rldl9hdHRyKTsKKwlpZiAoSVNfRVJSKHNvY19kZXYpKSB7CisJCWtmcmVlKHNvY19kZXZfYXR0cik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXYgPSBzb2NfZGV2aWNlX3RvX2RldmljZShzb2NfZGV2KTsKKworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZpbnRlZ3JhdG9yX21hbmZfYXR0cik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmludGVncmF0b3JfYXJjaF9hdHRyKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmaW50ZWdyYXRvcl9mcGdhX2F0dHIpOworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZpbnRlZ3JhdG9yX2J1aWxkX2F0dHIpOworCisJZGV2X2luZm8oZGV2LCAiRGV0ZWN0ZWQgQVJNIGNvcmUgbW9kdWxlOlxuIik7CisJZGV2X2luZm8oZGV2LCAiICAgIE1hbnVmYWN0dXJlcjogJTAyeFxuIiwgKHZhbCA+PiAyNCkpOworCWRldl9pbmZvKGRldiwgIiAgICBBcmNoaXRlY3R1cmU6ICVzXG4iLCBpbnRlZ3JhdG9yX2FyY2hfc3RyKHZhbCkpOworCWRldl9pbmZvKGRldiwgIiAgICBGUEdBOiAlc1xuIiwgaW50ZWdyYXRvcl9mcGdhX3N0cih2YWwpKTsKKwlkZXZfaW5mbyhkZXYsICIgICAgQnVpbGQ6ICUwMnhcbiIsICh2YWwgPj4gNCkgJiAweEZGKTsKKwlkZXZfaW5mbyhkZXYsICIgICAgUmV2OiAlY1xuIiwgKCdBJyArICh2YWwgJiAweDAzKSkpOworCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoaW50ZWdyYXRvcl9zb2NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy92ZXJzYXRpbGUvc29jLXJlYWx2aWV3LmMgYi9kcml2ZXJzL3NvYy92ZXJzYXRpbGUvc29jLXJlYWx2aWV3LmMKaW5kZXggY2VhOGVhMy4uMWEwN2JmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdmVyc2F0aWxlL3NvYy1yZWFsdmlldy5jCisrKyBiL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9zb2MtcmVhbHZpZXcuYwpAQCAtMjYsNiArMjYsNyBAQAogCXsgLmNvbXBhdGlibGUgPSAiYXJtLHJlYWx2aWV3LXBiMTFtcC1zb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiYXJtLHJlYWx2aWV3LXBiYTgtc29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYngtc29jIiwgfSwKKwl7IH0KIH07CiAKIHN0YXRpYyB1MzIgcmVhbHZpZXdfY29yZWlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWR3LmMgYi9kcml2ZXJzL3NwaS9zcGktZHcuYwppbmRleCA3MmUxMmJhLi5kMGQ1NTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZHcuYworKysgYi9kcml2ZXJzL3NwaS9zcGktZHcuYwpAQCAtMzc2LDkgKzM3Niw2IEBACiAJY2hpcCA9IGR3cy0+Y3VyX2NoaXA7CiAJc3BpID0gbWVzc2FnZS0+c3BpOwogCi0JaWYgKHVubGlrZWx5KCFjaGlwLT5jbGtfZGl2KSkKLQkJY2hpcC0+Y2xrX2RpdiA9IGR3cy0+bWF4X2ZyZXEgLyBjaGlwLT5zcGVlZF9oejsKLQogCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBFUlJPUl9TVEFURSkgewogCQltZXNzYWdlLT5zdGF0dXMgPSAtRUlPOwogCQlnb3RvIGVhcmx5X2V4aXQ7CkBAIC00MTksNyArNDE2LDcgQEAKIAlpZiAodHJhbnNmZXItPnNwZWVkX2h6KSB7CiAJCXNwZWVkID0gY2hpcC0+c3BlZWRfaHo7CiAKLQkJaWYgKHRyYW5zZmVyLT5zcGVlZF9oeiAhPSBzcGVlZCkgeworCQlpZiAoKHRyYW5zZmVyLT5zcGVlZF9oeiAhPSBzcGVlZCkgfHwgKCFjaGlwLT5jbGtfZGl2KSkgewogCQkJc3BlZWQgPSB0cmFuc2Zlci0+c3BlZWRfaHo7CiAKIAkJCS8qIGNsa19kaXYgZG9lc24ndCBzdXBwb3J0IG9kZCBudW1iZXIgKi8KQEAgLTU4MSw3ICs1NzgsNiBAQAogCQlkZXZfZXJyKCZzcGktPmRldiwgIk5vIG1heCBzcGVlZCBIWiBwYXJhbWV0ZXJcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY2hpcC0+c3BlZWRfaHogPSBzcGktPm1heF9zcGVlZF9oejsKIAogCWNoaXAtPnRtb2RlID0gMDsgLyogVHggJiBSeCAqLwogCS8qIERlZmF1bHQgU1BJIG1vZGUgaXMgU0NQT0wgPSAwLCBTQ1BIID0gMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWZzbC1kc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWRzcGkuYwppbmRleCA0NDgyMTYwLi44MzFjZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZnNsLWRzcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWRzcGkuYwpAQCAtNDYsNyArNDYsNyBAQAogCiAjZGVmaW5lIFNQSV9UQ1IJCQkweDA4CiAKLSNkZWZpbmUgU1BJX0NUQVIoeCkJCSgweDBjICsgKHggKiA0KSkKKyNkZWZpbmUgU1BJX0NUQVIoeCkJCSgweDBjICsgKCgoeCkgJiAweDMpICogNCkpCiAjZGVmaW5lIFNQSV9DVEFSX0ZNU1ooeCkJKCgoeCkgJiAweDAwMDAwMDBmKSA8PCAyNykKICNkZWZpbmUgU1BJX0NUQVJfQ1BPTCh4KQkoKHgpIDw8IDI2KQogI2RlZmluZSBTUElfQ1RBUl9DUEhBKHgpCSgoeCkgPDwgMjUpCkBAIC03MCw3ICs3MCw3IEBACiAKICNkZWZpbmUgU1BJX1BVU0hSCQkweDM0CiAjZGVmaW5lIFNQSV9QVVNIUl9DT05UCQkoMSA8PCAzMSkKLSNkZWZpbmUgU1BJX1BVU0hSX0NUQVMoeCkJKCgoeCkgJiAweDAwMDAwMDA3KSA8PCAyOCkKKyNkZWZpbmUgU1BJX1BVU0hSX0NUQVMoeCkJKCgoeCkgJiAweDAwMDAwMDAzKSA8PCAyOCkKICNkZWZpbmUgU1BJX1BVU0hSX0VPUQkJKDEgPDwgMjcpCiAjZGVmaW5lIFNQSV9QVVNIUl9DVENOVAkoMSA8PCAyNikKICNkZWZpbmUgU1BJX1BVU0hSX1BDUyh4KQkoKCgxIDw8IHgpICYgMHgwMDAwMDAzZikgPDwgMTYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LmMgYi9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LmMKaW5kZXggZDhhMTA1Zi4uOWU5ZTBmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguYwpAQCAtMTI3NCw3ICsxMjc0LDkgQEAKIAlpZiAoc3RhdHVzICE9IDApCiAJCXJldHVybiBzdGF0dXM7CiAJd3JpdGVfU1NDUjAoMCwgZHJ2X2RhdGEtPmlvYWRkcik7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNzcC0+Y2xrKTsKKworCWlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNzcC0+Y2xrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTI4OCw3ICsxMjkwLDggQEAKIAlweGEyeHhfc3BpX2RtYV9yZXN1bWUoZHJ2X2RhdGEpOwogCiAJLyogRW5hYmxlIHRoZSBTU1AgY2xvY2sgKi8KLQljbGtfcHJlcGFyZV9lbmFibGUoc3NwLT5jbGspOworCWlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKHNzcC0+Y2xrKTsKIAogCS8qIFJlc3RvcmUgTFBTUyBwcml2YXRlIHJlZ2lzdGVyIGJpdHMgKi8KIAlscHNzX3NzcF9zZXR1cChkcnZfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktc2lyZi5jIGIvZHJpdmVycy9zcGkvc3BpLXNpcmYuYwppbmRleCAzOWUyYzBhLi5mNjNkZTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktc2lyZi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1zaXJmLmMKQEAgLTU2Miw5ICs1NjIsOSBAQAogCiAJc3NwaS0+d29yZF93aWR0aCA9IERJVl9ST1VORF9VUChiaXRzX3Blcl93b3JkLCA4KTsKIAl0eGZpZm9fY3RybCA9IFNJUkZTT0NfU1BJX0ZJRk9fVEhEKFNJUkZTT0NfU1BJX0ZJRk9fU0laRSAvIDIpIHwKLQkJCQkJICAgc3NwaS0+d29yZF93aWR0aDsKKwkJCQkJICAgKHNzcGktPndvcmRfd2lkdGggPj4gMSk7CiAJcnhmaWZvX2N0cmwgPSBTSVJGU09DX1NQSV9GSUZPX1RIRChTSVJGU09DX1NQSV9GSUZPX1NJWkUgLyAyKSB8Ci0JCQkJCSAgIHNzcGktPndvcmRfd2lkdGg7CisJCQkJCSAgIChzc3BpLT53b3JkX3dpZHRoID4+IDEpOwogCiAJaWYgKCEoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpKQogCQlyZWd2YWwgfD0gU0lSRlNPQ19TUElfQ1NfSURMRV9TVEFUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGkuYwppbmRleCBlYmNiMzNkLi41MGYyMGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGkuYwpAQCAtNjE1LDEzICs2MTUsMTMgQEAKIAkJCQlzZ19mcmVlX3RhYmxlKHNndCk7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9Ci0JCQlzZ19idWYgPSBwYWdlX2FkZHJlc3Modm1fcGFnZSkgKwotCQkJCSgoc2l6ZV90KWJ1ZiAmIH5QQUdFX01BU0spOworCQkJc2dfc2V0X3BhZ2UoJnNndC0+c2dsW2ldLCB2bV9wYWdlLAorCQkJCSAgICBtaW4sIG9mZnNldF9pbl9wYWdlKGJ1ZikpOwogCQl9IGVsc2UgewogCQkJc2dfYnVmID0gYnVmOworCQkJc2dfc2V0X2J1Zigmc2d0LT5zZ2xbaV0sIHNnX2J1ZiwgbWluKTsKIAkJfQogCi0JCXNnX3NldF9idWYoJnNndC0+c2dsW2ldLCBzZ19idWYsIG1pbik7CiAKIAkJYnVmICs9IG1pbjsKIAkJbGVuIC09IG1pbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvaXNsMjkwMjguYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvaXNsMjkwMjguYwppbmRleCA2MDE0NjI1Li5lOTY5MTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L2lzbDI5MDI4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9pc2wyOTAyOC5jCkBAIC01MzcsNyArNTM3LDggQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBpc2wyOTAyOF9pZCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlzbDI5MDI4X29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJpc2lsLGlzbDI5MDI4IiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImlzbCxpc2wyOTAyOCIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpc2lsLGlzbDI5MDI4IiwgfSwvKiBkZXByZWNhdGVkLCBkb24ndCB1c2UgKi8KIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaXNsMjkwMjhfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU4LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTguaAppbmRleCAwNzMxODIwLi5lOGM5OGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTguaApAQCAtMTE5LDcgKzExOSw2IEBACiAJdTgJCQkqdHg7CiAJdTgJCQkqcng7CiAJc3RydWN0IG11dGV4CQlidWZfbG9jazsKLQljb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqYWRlNzc1OF9yaW5nX2NoYW5uZWxzOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIJcmluZ194ZmVyWzRdOwogCXN0cnVjdCBzcGlfbWVzc2FnZQlyaW5nX21zZzsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU4X2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OF9jb3JlLmMKaW5kZXggYWJjNjAwNi4uZmIzNzNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU4X2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NThfY29yZS5jCkBAIC02MzQsOSArNjM0LDYgQEAKIAkJLnR5cGUgPSBJSU9fVk9MVEFHRSwKIAkJLmluZGV4ZWQgPSAxLAogCQkuY2hhbm5lbCA9IDAsCi0JCS5leHRlbmRfbmFtZSA9ICJyYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKIAkJLmFkZHJlc3MgPSBBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0EsIEFENzc1OF9WT0xUQUdFKSwKIAkJLnNjYW5faW5kZXggPSAwLAogCQkuc2Nhbl90eXBlID0gewpAQCAtNjQ4LDkgKzY0NSw2IEBACiAJCS50eXBlID0gSUlPX0NVUlJFTlQsCiAJCS5pbmRleGVkID0gMSwKIAkJLmNoYW5uZWwgPSAwLAotCQkuZXh0ZW5kX25hbWUgPSAicmF3IiwKLQkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCi0JCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSksCiAJCS5hZGRyZXNzID0gQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9BLCBBRDc3NThfQ1VSUkVOVCksCiAJCS5zY2FuX2luZGV4ID0gMSwKIAkJLnNjYW5fdHlwZSA9IHsKQEAgLTY2Miw5ICs2NTYsNyBAQAogCQkudHlwZSA9IElJT19QT1dFUiwKIAkJLmluZGV4ZWQgPSAxLAogCQkuY2hhbm5lbCA9IDAsCi0JCS5leHRlbmRfbmFtZSA9ICJhcHBhcmVudF9yYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKKwkJLmV4dGVuZF9uYW1lID0gImFwcGFyZW50IiwKIAkJLmFkZHJlc3MgPSBBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0EsIEFENzc1OF9BUFBfUFdSKSwKIAkJLnNjYW5faW5kZXggPSAyLAogCQkuc2Nhbl90eXBlID0gewpAQCAtNjc2LDkgKzY2OCw3IEBACiAJCS50eXBlID0gSUlPX1BPV0VSLAogCQkuaW5kZXhlZCA9IDEsCiAJCS5jaGFubmVsID0gMCwKLQkJLmV4dGVuZF9uYW1lID0gImFjdGl2ZV9yYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKKwkJLmV4dGVuZF9uYW1lID0gImFjdGl2ZSIsCiAJCS5hZGRyZXNzID0gQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9BLCBBRDc3NThfQUNUX1BXUiksCiAJCS5zY2FuX2luZGV4ID0gMywKIAkJLnNjYW5fdHlwZSA9IHsKQEAgLTY5MCw5ICs2ODAsNyBAQAogCQkudHlwZSA9IElJT19QT1dFUiwKIAkJLmluZGV4ZWQgPSAxLAogCQkuY2hhbm5lbCA9IDAsCi0JCS5leHRlbmRfbmFtZSA9ICJyZWFjdGl2ZV9yYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKKwkJLmV4dGVuZF9uYW1lID0gInJlYWN0aXZlIiwKIAkJLmFkZHJlc3MgPSBBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0EsIEFENzc1OF9SRUFDVF9QV1IpLAogCQkuc2Nhbl9pbmRleCA9IDQsCiAJCS5zY2FuX3R5cGUgPSB7CkBAIC03MDQsOSArNjkyLDYgQEAKIAkJLnR5cGUgPSBJSU9fVk9MVEFHRSwKIAkJLmluZGV4ZWQgPSAxLAogCQkuY2hhbm5lbCA9IDEsCi0JCS5leHRlbmRfbmFtZSA9ICJyYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKIAkJLmFkZHJlc3MgPSBBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0IsIEFENzc1OF9WT0xUQUdFKSwKIAkJLnNjYW5faW5kZXggPSA1LAogCQkuc2Nhbl90eXBlID0gewpAQCAtNzE4LDkgKzcwMyw2IEBACiAJCS50eXBlID0gSUlPX0NVUlJFTlQsCiAJCS5pbmRleGVkID0gMSwKIAkJLmNoYW5uZWwgPSAxLAotCQkuZXh0ZW5kX25hbWUgPSAicmF3IiwKLQkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCi0JCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSksCiAJCS5hZGRyZXNzID0gQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9CLCBBRDc3NThfQ1VSUkVOVCksCiAJCS5zY2FuX2luZGV4ID0gNiwKIAkJLnNjYW5fdHlwZSA9IHsKQEAgLTczMiw5ICs3MTQsNyBAQAogCQkudHlwZSA9IElJT19QT1dFUiwKIAkJLmluZGV4ZWQgPSAxLAogCQkuY2hhbm5lbCA9IDEsCi0JCS5leHRlbmRfbmFtZSA9ICJhcHBhcmVudF9yYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKKwkJLmV4dGVuZF9uYW1lID0gImFwcGFyZW50IiwKIAkJLmFkZHJlc3MgPSBBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0IsIEFENzc1OF9BUFBfUFdSKSwKIAkJLnNjYW5faW5kZXggPSA3LAogCQkuc2Nhbl90eXBlID0gewpAQCAtNzQ2LDkgKzcyNiw3IEBACiAJCS50eXBlID0gSUlPX1BPV0VSLAogCQkuaW5kZXhlZCA9IDEsCiAJCS5jaGFubmVsID0gMSwKLQkJLmV4dGVuZF9uYW1lID0gImFjdGl2ZV9yYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKKwkJLmV4dGVuZF9uYW1lID0gImFjdGl2ZSIsCiAJCS5hZGRyZXNzID0gQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9CLCBBRDc3NThfQUNUX1BXUiksCiAJCS5zY2FuX2luZGV4ID0gOCwKIAkJLnNjYW5fdHlwZSA9IHsKQEAgLTc2MCw5ICs3MzgsNyBAQAogCQkudHlwZSA9IElJT19QT1dFUiwKIAkJLmluZGV4ZWQgPSAxLAogCQkuY2hhbm5lbCA9IDEsCi0JCS5leHRlbmRfbmFtZSA9ICJyZWFjdGl2ZV9yYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKKwkJLmV4dGVuZF9uYW1lID0gInJlYWN0aXZlIiwKIAkJLmFkZHJlc3MgPSBBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0IsIEFENzc1OF9SRUFDVF9QV1IpLAogCQkuc2Nhbl9pbmRleCA9IDksCiAJCS5zY2FuX3R5cGUgPSB7CkBAIC03NzQsOSArNzUwLDYgQEAKIAkJLnR5cGUgPSBJSU9fVk9MVEFHRSwKIAkJLmluZGV4ZWQgPSAxLAogCQkuY2hhbm5lbCA9IDIsCi0JCS5leHRlbmRfbmFtZSA9ICJyYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKIAkJLmFkZHJlc3MgPSBBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0MsIEFENzc1OF9WT0xUQUdFKSwKIAkJLnNjYW5faW5kZXggPSAxMCwKIAkJLnNjYW5fdHlwZSA9IHsKQEAgLTc4OCw5ICs3NjEsNiBAQAogCQkudHlwZSA9IElJT19DVVJSRU5ULAogCQkuaW5kZXhlZCA9IDEsCiAJCS5jaGFubmVsID0gMiwKLQkJLmV4dGVuZF9uYW1lID0gInJhdyIsCi0JCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19SQVcpLAotCQkuaW5mb19tYXNrX3NoYXJlZF9ieV90eXBlID0gQklUKElJT19DSEFOX0lORk9fU0NBTEUpLAogCQkuYWRkcmVzcyA9IEFENzc1OF9XVChBRDc3NThfUEhBU0VfQywgQUQ3NzU4X0NVUlJFTlQpLAogCQkuc2Nhbl9pbmRleCA9IDExLAogCQkuc2Nhbl90eXBlID0gewpAQCAtODAyLDkgKzc3Miw3IEBACiAJCS50eXBlID0gSUlPX1BPV0VSLAogCQkuaW5kZXhlZCA9IDEsCiAJCS5jaGFubmVsID0gMiwKLQkJLmV4dGVuZF9uYW1lID0gImFwcGFyZW50X3JhdyIsCi0JCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19SQVcpLAotCQkuaW5mb19tYXNrX3NoYXJlZF9ieV90eXBlID0gQklUKElJT19DSEFOX0lORk9fU0NBTEUpLAorCQkuZXh0ZW5kX25hbWUgPSAiYXBwYXJlbnQiLAogCQkuYWRkcmVzcyA9IEFENzc1OF9XVChBRDc3NThfUEhBU0VfQywgQUQ3NzU4X0FQUF9QV1IpLAogCQkuc2Nhbl9pbmRleCA9IDEyLAogCQkuc2Nhbl90eXBlID0gewpAQCAtODE2LDkgKzc4NCw3IEBACiAJCS50eXBlID0gSUlPX1BPV0VSLAogCQkuaW5kZXhlZCA9IDEsCiAJCS5jaGFubmVsID0gMiwKLQkJLmV4dGVuZF9uYW1lID0gImFjdGl2ZV9yYXciLAotCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKLQkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwKKwkJLmV4dGVuZF9uYW1lID0gImFjdGl2ZSIsCiAJCS5hZGRyZXNzID0gQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9DLCBBRDc3NThfQUNUX1BXUiksCiAJCS5zY2FuX2luZGV4ID0gMTMsCiAJCS5zY2FuX3R5cGUgPSB7CkBAIC04MzAsOSArNzk2LDcgQEAKIAkJLnR5cGUgPSBJSU9fUE9XRVIsCiAJCS5pbmRleGVkID0gMSwKIAkJLmNoYW5uZWwgPSAyLAotCQkuZXh0ZW5kX25hbWUgPSAicmVhY3RpdmVfcmF3IiwKLQkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCi0JCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSksCisJCS5leHRlbmRfbmFtZSA9ICJyZWFjdGl2ZSIsCiAJCS5hZGRyZXNzID0gQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9DLCBBRDc3NThfUkVBQ1RfUFdSKSwKIAkJLnNjYW5faW5kZXggPSAxNCwKIAkJLnNjYW5fdHlwZSA9IHsKQEAgLTg3MywxMyArODM3LDE0IEBACiAJCWdvdG8gZXJyb3JfZnJlZV9yeDsKIAl9CiAJc3QtPnVzID0gc3BpOwotCXN0LT5hZGU3NzU4X3JpbmdfY2hhbm5lbHMgPSAmYWRlNzc1OF9jaGFubmVsc1swXTsKIAltdXRleF9pbml0KCZzdC0+YnVmX2xvY2spOwogCiAJaW5kaW9fZGV2LT5uYW1lID0gc3BpLT5kZXYuZHJpdmVyLT5uYW1lOwogCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKIAlpbmRpb19kZXYtPmluZm8gPSAmYWRlNzc1OF9pbmZvOwogCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKKwlpbmRpb19kZXYtPmNoYW5uZWxzID0gYWRlNzc1OF9jaGFubmVsczsKKwlpbmRpb19kZXYtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUoYWRlNzc1OF9jaGFubmVscyk7CiAKIAlyZXQgPSBhZGU3NzU4X2NvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NThfcmluZy5jCmluZGV4IGMwYWNjZjguLjZlOTAwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU4X3JpbmcuYwpAQCAtODUsMTcgKzg1LDE2IEBACiAgKiovCiBzdGF0aWMgaW50IGFkZTc3NThfcmluZ19wcmVlbmFibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCXVuc2lnbmVkIGNoYW5uZWw7CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShpbmRpb19kZXYtPmFjdGl2ZV9zY2FuX21hc2ssIGluZGlvX2Rldi0+bWFza2xlbmd0aCkpCisJaWYgKGJpdG1hcF9lbXB0eShpbmRpb19kZXYtPmFjdGl2ZV9zY2FuX21hc2ssIGluZGlvX2Rldi0+bWFza2xlbmd0aCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2hhbm5lbCA9IGZpbmRfZmlyc3RfYml0KGluZGlvX2Rldi0+YWN0aXZlX3NjYW5fbWFzaywKIAkJCQkgaW5kaW9fZGV2LT5tYXNrbGVuZ3RoKTsKIAogCWFkZTc3NThfd3JpdGVfd2F2ZWZvcm1fdHlwZSgmaW5kaW9fZGV2LT5kZXYsCi0JCXN0LT5hZGU3NzU4X3JpbmdfY2hhbm5lbHNbY2hhbm5lbF0uYWRkcmVzcyk7CisJCWluZGlvX2Rldi0+Y2hhbm5lbHNbY2hhbm5lbF0uYWRkcmVzcyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfY21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X2NtZC5jCmluZGV4IDk5MzVlNjYuLmVkZGVmOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfY21kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19jbWQuYwpAQCAtMjc1LDExICsyNzUsMTEgQEAKIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUpCiAJCXJ0d19scHNfY3RybF93a19jbWQocGFkYXB0ZXIsIExQU19DVFJMX1NDQU4sIDEpOwogCi0JcGgyYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0tFUk5FTCk7CisJcGgyYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBoMmMgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwogCi0JcHN1cnZleVBhcmEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2l0ZXN1cnZleV9wYXJtKSwgR0ZQX0tFUk5FTCk7CisJcHN1cnZleVBhcmEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2l0ZXN1cnZleV9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBzdXJ2ZXlQYXJhID09IE5VTEwpIHsKIAkJa2ZyZWUocGgyYyk7CiAJCXJldHVybiBfRkFJTDsKQEAgLTQwNSw3ICs0MDUsNyBAQAogCWVsc2UKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2NtZF9jXywgX2Rydl9ub3RpY2VfLCAoIitKb2luIGNtZDogU1NpZCA9WyVzXVxuIiwgcG1sbWVwcml2LT5hc3NvY19zc2lkLlNzaWQpKTsKIAotCXBjbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9LRVJORUwpOworCXBjbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmIChwY21kID09IE5VTEwpIHsKIAkJcmVzID0gX0ZBSUw7CiAJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9jbWRfY18sIF9kcnZfZXJyXywgKCJydHdfam9pbmJzc19jbWQ6IG1lbW9yeSBhbGxvY2F0ZSBmb3IgY21kX29iaiBmYWlsISEhXG4iKSk7CkBAIC03NTUsMTMgKzc1NSwxMyBAQAogCXU4CXJlcyA9IF9TVUNDRVNTOwogCiAKLQlwaDJjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfS0VSTkVMKTsKKwlwaDJjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGgyYyA9PSBOVUxMKSB7CiAJCXJlcyA9IF9GQUlMOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcGRydmV4dHJhX2NtZF9wYXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtKSwgR0ZQX0tFUk5FTCk7CisJcGRydmV4dHJhX2NtZF9wYXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBkcnZleHRyYV9jbWRfcGFybSA9PSBOVUxMKSB7CiAJCWtmcmVlKHBoMmMpOwogCQlyZXMgPSBfRkFJTDsKQEAgLTk2NywxMyArOTY3LDEzIEBACiAJdTgJcmVzID0gX1NVQ0NFU1M7CiAKIAlpZiAoZW5xdWV1ZSkgewotCQlwaDJjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfS0VSTkVMKTsKKwkJcGgyYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChwaDJjID09IE5VTEwpIHsKIAkJCXJlcyA9IF9GQUlMOwogCQkJZ290byBleGl0OwogCQl9CiAKLQkJcGRydmV4dHJhX2NtZF9wYXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtKSwgR0ZQX0tFUk5FTCk7CisJCXBkcnZleHRyYV9jbWRfcGFybSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcnZleHRyYV9jbWRfcGFybSksIEdGUF9BVE9NSUMpOwogCQlpZiAocGRydmV4dHJhX2NtZF9wYXJtID09IE5VTEwpIHsKIAkJCWtmcmVlKHBoMmMpOwogCQkJcmVzID0gX0ZBSUw7CkBAIC0xMDEwLDEzICsxMDEwLDEzIEBACiAKIAl1OAlyZXMgPSBfU1VDQ0VTUzsKIAotCXBoMmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9LRVJORUwpOworCXBoMmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmIChwaDJjID09IE5VTEwpIHsKIAkJcmVzID0gX0ZBSUw7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlwZHJ2ZXh0cmFfY21kX3Bhcm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJ2ZXh0cmFfY21kX3Bhcm0pLCBHRlBfS0VSTkVMKTsKKwlwZHJ2ZXh0cmFfY21kX3Bhcm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJ2ZXh0cmFfY21kX3Bhcm0pLCBHRlBfQVRPTUlDKTsKIAlpZiAocGRydmV4dHJhX2NtZF9wYXJtID09IE5VTEwpIHsKIAkJa2ZyZWUocGgyYyk7CiAJCXJlcyA9IF9GQUlMOwpAQCAtMTA4OCwxMyArMTA4OCwxMyBAQAogCiAJdTgJcmVzID0gX1NVQ0NFU1M7CiAKLQlwcHNjbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9LRVJORUwpOworCXBwc2NtZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBwc2NtZCA9PSBOVUxMKSB7CiAJCXJlcyA9IF9GQUlMOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcGRydmV4dHJhX2NtZF9wYXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtKSwgR0ZQX0tFUk5FTCk7CisJcGRydmV4dHJhX2NtZF9wYXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBkcnZleHRyYV9jbWRfcGFybSA9PSBOVUxMKSB7CiAJCWtmcmVlKHBwc2NtZCk7CiAJCXJlcyA9IF9GQUlMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19tbG1lX2V4dC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19tbG1lX2V4dC5jCmluZGV4IDViYTUwOTkuLjcwYjFiYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfbWxtZV9leHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X21sbWVfZXh0LmMKQEAgLTQyNDEsMTIgKzQyNDEsMTIgQEAKIAlwY21kcHJpdiA9ICZwYWRhcHRlci0+Y21kcHJpdjsKIAogCi0JcGNtZF9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9LRVJORUwpOworCXBjbWRfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGNtZF9vYmogPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJY21kc3ogPSAoc2l6ZW9mKHN0cnVjdCBzdXJ2ZXlfZXZlbnQpICsgc2l6ZW9mKHN0cnVjdCBDMkhFdmVudF9IZWFkZXIpKTsKLQlwZXZ0Y21kID0ga3phbGxvYyhjbWRzeiwgR0ZQX0tFUk5FTCk7CisJcGV2dGNtZCA9IGt6YWxsb2MoY21kc3osIEdGUF9BVE9NSUMpOwogCWlmIChwZXZ0Y21kID09IE5VTEwpIHsKIAkJa2ZyZWUocGNtZF9vYmopOwogCQlyZXR1cm47CkBAIC00MzM5LDEyICs0MzM5LDEyIEBACiAJc3RydWN0IG1sbWVfZXh0X2luZm8JKnBtbG1laW5mbyA9ICYocG1sbWVleHQtPm1sbWV4dF9pbmZvKTsKIAlzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwogCi0JcGNtZF9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9LRVJORUwpOworCXBjbWRfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGNtZF9vYmogPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJY21kc3ogPSAoc2l6ZW9mKHN0cnVjdCBqb2luYnNzX2V2ZW50KSArIHNpemVvZihzdHJ1Y3QgQzJIRXZlbnRfSGVhZGVyKSk7Ci0JcGV2dGNtZCA9IGt6YWxsb2MoY21kc3osIEdGUF9LRVJORUwpOworCXBldnRjbWQgPSBremFsbG9jKGNtZHN6LCBHRlBfQVRPTUlDKTsKIAlpZiAocGV2dGNtZCA9PSBOVUxMKSB7CiAJCWtmcmVlKHBjbWRfb2JqKTsKIAkJcmV0dXJuOwpAQCAtNDg1NCwxMSArNDg1NCwxMSBAQAogCQkJcG1sbWVleHQtPnNjYW5fYWJvcnQgPSBmYWxzZTsvKiByZXNldCAqLwogCQl9CiAKLQkJcGgyYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0tFUk5FTCk7CisJCXBoMmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCQlpZiAocGgyYyA9PSBOVUxMKQogCQkJZ290byBleGl0X3N1cnZleV90aW1lcl9oZGw7CiAKLQkJcHN1cnZleVBhcmEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2l0ZXN1cnZleV9wYXJtKSwgR0ZQX0tFUk5FTCk7CisJCXBzdXJ2ZXlQYXJhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNpdGVzdXJ2ZXlfcGFybSksIEdGUF9BVE9NSUMpOwogCQlpZiAocHN1cnZleVBhcmEgPT0gTlVMTCkgewogCQkJa2ZyZWUocGgyYyk7CiAJCQlnb3RvIGV4aXRfc3VydmV5X3RpbWVyX2hkbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfd2xhbl91dGlsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X3dsYW5fdXRpbC5jCmluZGV4IDMzY2NiYmIuLmQzMDAzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfd2xhbl91dGlsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d193bGFuX3V0aWwuYwpAQCAtOTM1LDcgKzkzNSw3IEBACiAJCXJldHVybiB0cnVlOwogCX0KIAotCWJzc2lkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdsYW5fYnNzaWRfZXgpLCBHRlBfS0VSTkVMKTsKKwlic3NpZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4KSwgR0ZQX0FUT01JQyk7CiAKIAlzdWJ0eXBlID0gR2V0RnJhbWVTdWJUeXBlKHBmcmFtZSkgPj4gNDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAvdXNiX2ludGYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL3VzYl9pbnRmLmMKaW5kZXggNDA3YTMxOC4uMmY4NzE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAvdXNiX2ludGYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L29zX2RlcC91c2JfaW50Zi5jCkBAIC00Nyw2ICs0Nyw3IEBACiAJe1VTQl9ERVZJQ0UoMHgwN2I4LCAweDgxNzkpfSwgLyogQWJvY29tIC0gQWJvY29tICovCiAJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDMzMEYpfSwgLyogRExpbmsgRFdBLTEyNSBSRVYgRDEgKi8KIAl7VVNCX0RFVklDRSgweDIwMDEsIDB4MzMxMCl9LCAvKiBEbGluayBEV0EtMTIzIFJFViBEMSAqLworCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzMzExKX0sIC8qIERMaW5rIEdPLVVTQi1OMTUwIFJFViBCMSAqLwogCXtVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDc2KX0sIC8qIFNpdGVjb20gTjE1MCB2MiAqLwogCXt9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0LmMgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYwppbmRleCBiMTllNDMyLi43M2U1OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYworKysgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYwpAQCAtMzQ5MSw3ICszNDkxLDcgQEAKIAkJCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIlRhcmdldEFkZHJlc3M9IgogCQkJCQkiJXM6JWh1LCVodSIsCiAJCQkJCWluYWRkcl9hbnkgPyBjb25uLT5sb2NhbF9pcCA6IG5wLT5ucF9pcCwKLQkJCQkJaW5hZGRyX2FueSA/IGNvbm4tPmxvY2FsX3BvcnQgOiBucC0+bnBfcG9ydCwKKwkJCQkJbnAtPm5wX3BvcnQsCiAJCQkJCXRwZy0+dHBndCk7CiAJCQkJbGVuICs9IDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L2xvb3BiYWNrL3RjbV9sb29wLmMgYi9kcml2ZXJzL3RhcmdldC9sb29wYmFjay90Y21fbG9vcC5jCmluZGV4IGFiM2FiMjcuLjRkMWI3MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L2xvb3BiYWNrL3RjbV9sb29wLmMKKysrIGIvZHJpdmVycy90YXJnZXQvbG9vcGJhY2svdGNtX2xvb3AuYwpAQCAtMTEwLDU4ICsxMTAsNiBAQAogICovCiBzdHJ1Y3QgZGV2aWNlICp0Y21fbG9vcF9wcmltYXJ5OwogCi0vKgotICogQ29waWVkIGZyb20gZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jOmZjX2NoYW5nZV9xdWV1ZV9kZXB0aCgpIGFuZAotICogZHJpdmVycy9zY3NpL2xpYmlzY3NpLmM6aXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKCkKLSAqLwotc3RhdGljIGludCB0Y21fbG9vcF9jaGFuZ2VfcXVldWVfZGVwdGgoCi0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCWludCBkZXB0aCwKLQlpbnQgcmVhc29uKQotewotCXN3aXRjaCAocmVhc29uKSB7Ci0JY2FzZSBTQ1NJX1FERVBUSF9ERUZBVUxUOgotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgZGVwdGgpOwotCQlicmVhazsKLQljYXNlIFNDU0lfUURFUFRIX1FGVUxMOgotCQlzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgZGVwdGgpOwotCQlicmVhazsKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCi1zdGF0aWMgaW50IHRjbV9sb29wX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZykKLXsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWcpOwotCi0JCWlmICh0YWcpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQl0YWcgPSAwOwotCi0JcmV0dXJuIHRhZzsKLX0KLQotLyoKLSAqIExvY2F0ZSB0aGUgU0FNIFRhc2sgQXR0ciBmcm9tIHN0cnVjdCBzY3NpX2NtbmQgKgotICovCi1zdGF0aWMgaW50IHRjbV9sb29wX3NhbV9hdHRyKHN0cnVjdCBzY3NpX2NtbmQgKnNjLCBpbnQgdGFnKQotewotCWlmIChzYy0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkICYmCi0JICAgIHNjLT5kZXZpY2UtPm9yZGVyZWRfdGFncyAmJiB0YWcgPj0gMCkKLQkJcmV0dXJuIE1TR19PUkRFUkVEX1RBRzsKLQotCXJldHVybiBNU0dfU0lNUExFX1RBRzsKLX0KLQogc3RhdGljIHZvaWQgdGNtX2xvb3Bfc3VibWlzc2lvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdGNtX2xvb3BfY21kICp0bF9jbWQgPQpAQCAtMjIwLDcgKzE2OCw3IEBACiAKIAlyYyA9IHRhcmdldF9zdWJtaXRfY21kX21hcF9zZ2xzKHNlX2NtZCwgdGxfbmV4dXMtPnNlX3Nlc3MsIHNjLT5jbW5kLAogCQkJJnRsX2NtZC0+dGxfc2Vuc2VfYnVmWzBdLCB0bF9jbWQtPnNjLT5kZXZpY2UtPmx1biwKLQkJCXRyYW5zZmVyX2xlbmd0aCwgdGNtX2xvb3Bfc2FtX2F0dHIoc2MsIHRsX2NtZC0+c2NfY21kX3RhZyksCisJCQl0cmFuc2Zlcl9sZW5ndGgsIE1TR19TSU1QTEVfVEFHLAogCQkJc2MtPnNjX2RhdGFfZGlyZWN0aW9uLCAwLAogCQkJc2NzaV9zZ2xpc3Qoc2MpLCBzY3NpX3NnX2NvdW50KHNjKSwKIAkJCXNnbF9iaWRpLCBzZ2xfYmlkaV9jb3VudCwKQEAgLTQzMSwyNyArMzc5LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGNtX2xvb3Bfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2QpCi17Ci0JaWYgKHNkLT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfYWN0aXZhdGVfdGNxKHNkLCBzZC0+cXVldWVfZGVwdGgpOwotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZCwgTVNHX1NJTVBMRV9UQUcsCi0JCQkJCXNkLT5ob3N0LT5jbWRfcGVyX2x1bik7Ci0JfSBlbHNlIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2QsIDAsCi0JCQkJCXNkLT5ob3N0LT5jbWRfcGVyX2x1bik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHRjbV9sb29wX2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkuc2hvd19pbmZvCQk9IHRjbV9sb29wX3Nob3dfaW5mbywKIAkucHJvY19uYW1lCQk9ICJ0Y21fbG9vcGJhY2siLAogCS5uYW1lCQkJPSAiVENNX0xvb3BiYWNrIiwKIAkucXVldWVjb21tYW5kCQk9IHRjbV9sb29wX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gdGNtX2xvb3BfY2hhbmdlX3F1ZXVlX2RlcHRoLAotCS5jaGFuZ2VfcXVldWVfdHlwZQk9IHRjbV9sb29wX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlLAogCS5laF9hYm9ydF9oYW5kbGVyID0gdGNtX2xvb3BfYWJvcnRfdGFzaywKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSB0Y21fbG9vcF9kZXZpY2VfcmVzZXQsCiAJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyID0gdGNtX2xvb3BfdGFyZ2V0X3Jlc2V0LApAQCAtNDYyLDggKzM5Niw5IEBACiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS5zbGF2ZV9hbGxvYwkJPSB0Y21fbG9vcF9zbGF2ZV9hbGxvYywKLQkuc2xhdmVfY29uZmlndXJlCT0gdGNtX2xvb3Bfc2xhdmVfY29uZmlndXJlLAogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RhdGljIGludCB0Y21fbG9vcF9kcml2ZXJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfYWx1YS5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfYWx1YS5jCmluZGV4IGZiODc3ODAuLjc1Y2JkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMKQEAgLTU3Niw3ICs1NzYsNyBAQAogCWNhc2UgU0VORF9ESUFHTk9TVElDOgogCWNhc2UgUkVBRF9DQVBBQ0lUWToKIAkJcmV0dXJuIDA7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlzd2l0Y2ggKGNkYlsxXSAmIDB4MWYpIHsKIAkJY2FzZSBTQUlfUkVBRF9DQVBBQ0lUWV8xNjoKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMKaW5kZXggOGM2MGExYS4uNGMyNjFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jCkBAIC00NTksNyArNDU5LDcgQEAKIAljYXNlIEFDQ0VTU19DT05UUk9MX09VVDoKIAljYXNlIElOUVVJUlk6CiAJY2FzZSBMT0dfU0VOU0U6Ci0JY2FzZSBSRUFEX01FRElBX1NFUklBTF9OVU1CRVI6CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xMjoKIAljYXNlIFJFUE9SVF9MVU5TOgogCWNhc2UgUkVRVUVTVF9TRU5TRToKIAljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9JTjoKQEAgLTI3MzgsNyArMjczOCw4IEBACiAJc3RydWN0IHQxMF9wcl9yZWdpc3RyYXRpb24gKnByX3JlZywgKnByX3JlZ190bXAsICpwcl9yZWdfbiwgKnByX3Jlc19ob2xkZXI7CiAJc3RydWN0IHQxMF9yZXNlcnZhdGlvbiAqcHJfdG1wbCA9ICZkZXYtPnQxMF9wcjsKIAl1MzIgcHJfcmVzX21hcHBlZF9sdW4gPSAwOwotCWludCBhbGxfcmVnID0gMCwgY2FsbGluZ19pdF9uZXh1cyA9IDAsIHJlbGVhc2VkX3JlZ3MgPSAwOworCWludCBhbGxfcmVnID0gMCwgY2FsbGluZ19pdF9uZXh1cyA9IDA7CisJYm9vbCBzYV9yZXNfa2V5X3VubWF0Y2hlZCA9IHNhX3Jlc19rZXkgIT0gMDsKIAlpbnQgcHJoX3R5cGUgPSAwLCBwcmhfc2NvcGUgPSAwOwogCiAJaWYgKCFzZV9zZXNzKQpAQCAtMjgxMyw2ICsyODE0LDcgQEAKIAkJCWlmICghYWxsX3JlZykgewogCQkJCWlmIChwcl9yZWctPnByX3Jlc19rZXkgIT0gc2FfcmVzX2tleSkKIAkJCQkJY29udGludWU7CisJCQkJc2FfcmVzX2tleV91bm1hdGNoZWQgPSBmYWxzZTsKIAogCQkJCWNhbGxpbmdfaXRfbmV4dXMgPSAocHJfcmVnX24gPT0gcHJfcmVnKSA/IDEgOiAwOwogCQkJCXByX3JlZ19uYWNsID0gcHJfcmVnLT5wcl9yZWdfbmFjbDsKQEAgLTI4MjAsNyArMjgyMiw2IEBACiAJCQkJX19jb3JlX3Njc2kzX2ZyZWVfcmVnaXN0cmF0aW9uKGRldiwgcHJfcmVnLAogCQkJCQkocHJlZW1wdF90eXBlID09IFBSRUVNUFRfQU5EX0FCT1JUKSA/ICZwcmVlbXB0X2FuZF9hYm9ydF9saXN0IDoKIAkJCQkJCU5VTEwsIGNhbGxpbmdfaXRfbmV4dXMpOwotCQkJCXJlbGVhc2VkX3JlZ3MrKzsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkgKiBDYXNlIGZvciBhbnkgZXhpc3RpbmcgYWxsIHJlZ2lzdHJhbnRzIHR5cGUKQEAgLTI4MzgsNiArMjgzOSw3IEBACiAJCQkJaWYgKChzYV9yZXNfa2V5KSAmJgogCQkJCSAgICAgKHByX3JlZy0+cHJfcmVzX2tleSAhPSBzYV9yZXNfa2V5KSkKIAkJCQkJY29udGludWU7CisJCQkJc2FfcmVzX2tleV91bm1hdGNoZWQgPSBmYWxzZTsKIAogCQkJCWNhbGxpbmdfaXRfbmV4dXMgPSAocHJfcmVnX24gPT0gcHJfcmVnKSA/IDEgOiAwOwogCQkJCWlmIChjYWxsaW5nX2l0X25leHVzKQpAQCAtMjg0OCw3ICsyODUwLDYgQEAKIAkJCQlfX2NvcmVfc2NzaTNfZnJlZV9yZWdpc3RyYXRpb24oZGV2LCBwcl9yZWcsCiAJCQkJCShwcmVlbXB0X3R5cGUgPT0gUFJFRU1QVF9BTkRfQUJPUlQpID8gJnByZWVtcHRfYW5kX2Fib3J0X2xpc3QgOgogCQkJCQkJTlVMTCwgMCk7Ci0JCQkJcmVsZWFzZWRfcmVncysrOwogCQkJfQogCQkJaWYgKCFjYWxsaW5nX2l0X25leHVzKQogCQkJCWNvcmVfc2NzaTNfdWFfYWxsb2NhdGUocHJfcmVnX25hY2wsCkBAIC0yODYzLDcgKzI4NjQsNyBAQAogCQkgKiByZWdpc3RlcmVkIHJlc2VydmF0aW9uIGtleSwgdGhlbiB0aGUgZGV2aWNlIHNlcnZlciBzaGFsbAogCQkgKiBjb21wbGV0ZSB0aGUgY29tbWFuZCB3aXRoIFJFU0VSVkFUSU9OIENPTkZMSUNUIHN0YXR1cy4KIAkJICovCi0JCWlmICghcmVsZWFzZWRfcmVncykgeworCQlpZiAoc2FfcmVzX2tleV91bm1hdGNoZWQpIHsKIAkJCXNwaW5fdW5sb2NrKCZkZXYtPmRldl9yZXNlcnZhdGlvbl9sb2NrKTsKIAkJCWNvcmVfc2NzaTNfcHV0X3ByX3JlZyhwcl9yZWdfbik7CiAJCQlyZXR1cm4gVENNX1JFU0VSVkFUSU9OX0NPTkZMSUNUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc2JjLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zYmMuYwppbmRleCBlYmU2MmFmLi44ZDE3MWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zYmMuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zYmMuYwpAQCAtODUyLDcgKzg1Miw3IEBACiAJCXNpemUgPSBSRUFEX0NBUF9MRU47CiAJCWNtZC0+ZXhlY3V0ZV9jbWQgPSBzYmNfZW11bGF0ZV9yZWFkY2FwYWNpdHk7CiAJCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAkJc3dpdGNoIChjbWQtPnRfdGFza19jZGJbMV0gJiAweDFmKSB7CiAJCWNhc2UgU0FJX1JFQURfQ0FQQUNJVFlfMTY6CiAJCQljbWQtPmV4ZWN1dGVfY21kID0gc2JjX2VtdWxhdGVfcmVhZGNhcGFjaXR5XzE2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYwppbmRleCA5ZWEwZDVmLi5iZTg3N2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYwpAQCAtMjI5Miw3ICsyMjkyLDcgQEAKIAkgKiBhbmQgbGV0IGl0IGNhbGwgYmFjayBvbmNlIHRoZSB3cml0ZSBidWZmZXJzIGFyZSByZWFkeS4KIAkgKi8KIAl0YXJnZXRfYWRkX3RvX3N0YXRlX2xpc3QoY21kKTsKLQlpZiAoY21kLT5kYXRhX2RpcmVjdGlvbiAhPSBETUFfVE9fREVWSUNFKSB7CisJaWYgKGNtZC0+ZGF0YV9kaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSB8fCBjbWQtPmRhdGFfbGVuZ3RoID09IDApIHsKIAkJdGFyZ2V0X2V4ZWN1dGVfY21kKGNtZCk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9jcHVfY29vbGluZy5jIGIvZHJpdmVycy90aGVybWFsL2NwdV9jb29saW5nLmMKaW5kZXggMWFiMDAxOC4uYWQwOWU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2NwdV9jb29saW5nLmMKKysrIGIvZHJpdmVycy90aGVybWFsL2NwdV9jb29saW5nLmMKQEAgLTUwLDE1ICs1MCwxNCBAQAogCXVuc2lnbmVkIGludCBjcHVmcmVxX3N0YXRlOwogCXVuc2lnbmVkIGludCBjcHVmcmVxX3ZhbDsKIAlzdHJ1Y3QgY3B1bWFzayBhbGxvd2VkX2NwdXM7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogfTsKIHN0YXRpYyBERUZJTkVfSURSKGNwdWZyZXFfaWRyKTsKIHN0YXRpYyBERUZJTkVfTVVURVgoY29vbGluZ19jcHVmcmVxX2xvY2spOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNwdWZyZXFfZGV2X2NvdW50OwogCi0vKiBub3RpZnlfdGFibGUgcGFzc2VzIHZhbHVlIHRvIHRoZSBDUFVGUkVRX0FESlVTVCBjYWxsYmFjayBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgTk9USUZZX0lOVkFMSUQgTlVMTAotc3RhdGljIHN0cnVjdCBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlICpub3RpZnlfZGV2aWNlOworc3RhdGljIExJU1RfSEVBRChjcHVmcmVxX2Rldl9saXN0KTsKIAogLyoqCiAgKiBnZXRfaWRyIC0gZnVuY3Rpb24gdG8gZ2V0IGEgdW5pcXVlIGlkLgpAQCAtMjg3LDE1ICsyODYsMTIgQEAKIAogCWNwdWZyZXFfZGV2aWNlLT5jcHVmcmVxX3N0YXRlID0gY29vbGluZ19zdGF0ZTsKIAljcHVmcmVxX2RldmljZS0+Y3B1ZnJlcV92YWwgPSBjbGlwX2ZyZXE7Ci0Jbm90aWZ5X2RldmljZSA9IGNwdWZyZXFfZGV2aWNlOwogCiAJZm9yX2VhY2hfY3B1KGNwdWlkLCBtYXNrKSB7CiAJCWlmIChpc19jcHVmcmVxX3ZhbGlkKGNwdWlkKSkKIAkJCWNwdWZyZXFfdXBkYXRlX3BvbGljeShjcHVpZCk7CiAJfQogCi0Jbm90aWZ5X2RldmljZSA9IE5PVElGWV9JTlZBTElEOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxNiwyMSArMzEyLDI4IEBACiB7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgbWF4X2ZyZXEgPSAwOworCXN0cnVjdCBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlICpjcHVmcmVxX2RldjsKIAotCWlmIChldmVudCAhPSBDUFVGUkVRX0FESlVTVCB8fCBub3RpZnlfZGV2aWNlID09IE5PVElGWV9JTlZBTElEKQorCWlmIChldmVudCAhPSBDUFVGUkVRX0FESlVTVCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoY3B1bWFza190ZXN0X2NwdShwb2xpY3ktPmNwdSwgJm5vdGlmeV9kZXZpY2UtPmFsbG93ZWRfY3B1cykpCi0JCW1heF9mcmVxID0gbm90aWZ5X2RldmljZS0+Y3B1ZnJlcV92YWw7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKwltdXRleF9sb2NrKCZjb29saW5nX2NwdWZyZXFfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcHVmcmVxX2RldiwgJmNwdWZyZXFfZGV2X2xpc3QsIG5vZGUpIHsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHBvbGljeS0+Y3B1LAorCQkJCQkmY3B1ZnJlcV9kZXYtPmFsbG93ZWRfY3B1cykpCisJCQljb250aW51ZTsKIAotCS8qIE5ldmVyIGV4Y2VlZCB1c2VyX3BvbGljeS5tYXggKi8KLQlpZiAobWF4X2ZyZXEgPiBwb2xpY3ktPnVzZXJfcG9saWN5Lm1heCkKLQkJbWF4X2ZyZXEgPSBwb2xpY3ktPnVzZXJfcG9saWN5Lm1heDsKKwkJaWYgKCFjcHVmcmVxX2Rldi0+Y3B1ZnJlcV92YWwpCisJCQljcHVmcmVxX2Rldi0+Y3B1ZnJlcV92YWwgPSBnZXRfY3B1X2ZyZXF1ZW5jeSgKKwkJCQkJY3B1bWFza19hbnkoJmNwdWZyZXFfZGV2LT5hbGxvd2VkX2NwdXMpLAorCQkJCQljcHVmcmVxX2Rldi0+Y3B1ZnJlcV9zdGF0ZSk7CiAKLQlpZiAocG9saWN5LT5tYXggIT0gbWF4X2ZyZXEpCi0JCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAwLCBtYXhfZnJlcSk7CisJCW1heF9mcmVxID0gY3B1ZnJlcV9kZXYtPmNwdWZyZXFfdmFsOworCisJCWlmIChwb2xpY3ktPm1heCAhPSBtYXhfZnJlcSkKKwkJCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAwLCBtYXhfZnJlcSk7CisJfQorCW11dGV4X3VubG9jaygmY29vbGluZ19jcHVmcmVxX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODYsNiArNDg5LDcgQEAKIAkJY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmdGhlcm1hbF9jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAogCQkJCQkgIENQVUZSRVFfUE9MSUNZX05PVElGSUVSKTsKIAljcHVmcmVxX2Rldl9jb3VudCsrOworCWxpc3RfYWRkKCZjcHVmcmVxX2Rldi0+bm9kZSwgJmNwdWZyZXFfZGV2X2xpc3QpOwogCiAJbXV0ZXhfdW5sb2NrKCZjb29saW5nX2NwdWZyZXFfbG9jayk7CiAKQEAgLTU0OSw2ICs1NTMsNyBAQAogCiAJY3B1ZnJlcV9kZXYgPSBjZGV2LT5kZXZkYXRhOwogCW11dGV4X2xvY2soJmNvb2xpbmdfY3B1ZnJlcV9sb2NrKTsKKwlsaXN0X2RlbCgmY3B1ZnJlcV9kZXYtPm5vZGUpOwogCWNwdWZyZXFfZGV2X2NvdW50LS07CiAKIAkvKiBVbnJlZ2lzdGVyIHRoZSBub3RpZmllciBmb3IgdGhlIGxhc3QgY3B1ZnJlcSBjb29saW5nIGRldmljZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2lteF90aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYwppbmRleCA0NjFiZjNkLi41YTFmMTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYwpAQCAtNDU5LDYgKzQ1OSwxMCBAQAogCWludCBtZWFzdXJlX2ZyZXE7CiAJaW50IHJldDsKIAorCWlmICghY3B1ZnJlcV9nZXRfY3VycmVudF9kcml2ZXIoKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBjcHVmcmVxIGRyaXZlciEiKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQogCWRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTUyMSw2ICs1MjUsMzAgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlkYXRhLT50aGVybWFsX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRhdGEtPnRoZXJtYWxfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRhdGEtPnRoZXJtYWxfY2xrKTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gZ2V0IHRoZXJtYWwgY2xrOiAlZFxuIiwgcmV0KTsKKwkJY3B1ZnJlcV9jb29saW5nX3VucmVnaXN0ZXIoZGF0YS0+Y2Rldik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBUaGVybWFsIHNlbnNvciBuZWVkcyBjbGsgb24gdG8gZ2V0IGNvcnJlY3QgdmFsdWUsIG5vcm1hbGx5CisJICogd2Ugc2hvdWxkIGVuYWJsZSBpdHMgY2xrIGJlZm9yZSB0YWtpbmcgbWVhc3VyZW1lbnQgYW5kIGRpc2FibGUKKwkgKiBjbGsgYWZ0ZXIgbWVhc3VyZW1lbnQgaXMgZG9uZSwgYnV0IGlmIGFsYXJtIGZ1bmN0aW9uIGlzIGVuYWJsZWQsCisJICogaGFyZHdhcmUgd2lsbCBhdXRvIG1lYXN1cmUgdGhlIHRlbXBlcmF0dXJlIHBlcmlvZGljYWxseSwgc28gd2UKKwkgKiBuZWVkIHRvIGtlZXAgdGhlIGNsayBhbHdheXMgb24gZm9yIGFsYXJtIGZ1bmN0aW9uLgorCSAqLworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkYXRhLT50aGVybWFsX2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHRoZXJtYWwgY2xrOiAlZFxuIiwgcmV0KTsKKwkJY3B1ZnJlcV9jb29saW5nX3VucmVnaXN0ZXIoZGF0YS0+Y2Rldik7CisJCXJldHVybiByZXQ7CisJfQorCiAJZGF0YS0+dHogPSB0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKCJpbXhfdGhlcm1hbF96b25lIiwKIAkJCQkJCUlNWF9UUklQX05VTSwKIAkJCQkJCUJJVChJTVhfVFJJUF9QQVNTSVZFKSwgZGF0YSwKQEAgLTUzMSwyNiArNTU5LDExIEBACiAJCXJldCA9IFBUUl9FUlIoZGF0YS0+dHopOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiZmFpbGVkIHRvIHJlZ2lzdGVyIHRoZXJtYWwgem9uZSBkZXZpY2UgJWRcbiIsIHJldCk7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT50aGVybWFsX2Nsayk7CiAJCWNwdWZyZXFfY29vbGluZ191bnJlZ2lzdGVyKGRhdGEtPmNkZXYpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWRhdGEtPnRoZXJtYWxfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwotCWlmIChJU19FUlIoZGF0YS0+dGhlcm1hbF9jbGspKSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHRoZXJtYWwgY2xrIVxuIik7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGhlcm1hbCBzZW5zb3IgbmVlZHMgY2xrIG9uIHRvIGdldCBjb3JyZWN0IHZhbHVlLCBub3JtYWxseQotCQkgKiB3ZSBzaG91bGQgZW5hYmxlIGl0cyBjbGsgYmVmb3JlIHRha2luZyBtZWFzdXJlbWVudCBhbmQgZGlzYWJsZQotCQkgKiBjbGsgYWZ0ZXIgbWVhc3VyZW1lbnQgaXMgZG9uZSwgYnV0IGlmIGFsYXJtIGZ1bmN0aW9uIGlzIGVuYWJsZWQsCi0JCSAqIGhhcmR3YXJlIHdpbGwgYXV0byBtZWFzdXJlIHRoZSB0ZW1wZXJhdHVyZSBwZXJpb2RpY2FsbHksIHNvIHdlCi0JCSAqIG5lZWQgdG8ga2VlcCB0aGUgY2xrIGFsd2F5cyBvbiBmb3IgYWxhcm0gZnVuY3Rpb24uCi0JCSAqLwotCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGF0YS0+dGhlcm1hbF9jbGspOwotCQlpZiAocmV0KQotCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgdGhlcm1hbCBjbGs6ICVkXG4iLCByZXQpOwotCX0KLQogCS8qIEVuYWJsZSBtZWFzdXJlbWVudHMgYXQgfiAxMCBIeiAqLwogCXJlZ21hcF93cml0ZShtYXAsIFRFTVBTRU5TRTEgKyBSRUdfQ0xSLCBURU1QU0VOU0UxX01FQVNVUkVfRlJFUSk7CiAJbWVhc3VyZV9mcmVxID0gRElWX1JPVU5EX1VQKDMyNzY4LCAxMCk7IC8qIDEwIEh6ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2ludDM0MDNfdGhlcm1hbC5jIGIvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAzX3RoZXJtYWwuYwppbmRleCBkMjBkYmE5Li42ZTlmYjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2ludDM0MDNfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvaW50MzQwM190aGVybWFsLmMKQEAgLTkyLDcgKzkyLDEzIEBACiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gLUVJTzsKIAotCSp0ZW1wID0gREVDSV9LRUxWSU5fVE9fTUlMTElfQ0VMU0lVUyhoeXN0LCBLRUxWSU5fT0ZGU0VUKTsKKwkvKgorCSAqIFRoZXJtYWwgaHlzdGVyZXNpcyByZXByZXNlbnRzIGEgdGVtcGVyYXR1cmUgZGlmZmVyZW5jZS4KKwkgKiBLZWx2aW4gYW5kIENlbHNpdXMgaGF2ZSBzYW1lIGRlZ3JlZSBzaXplLiBTbyB0aGUKKwkgKiBjb252ZXJzaW9uIGhlcmUgYmV0d2VlbiB0ZW50aHMgb2YgZGVncmVlIEtlbHZpbiB1bml0CisJICogYW5kIE1pbGxpLUNlbHNpdXMgdW5pdCBpcyBqdXN0IHRvIG11bHRpcGx5IDEwMC4KKwkgKi8KKwkqdGVtcCA9IGh5c3QgKiAxMDA7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9vZi10aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvb2YtdGhlcm1hbC5jCmluZGV4IGY4ZWI2MjUuLjYyMTQzYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9vZi10aGVybWFsLmMKKysrIGIvZHJpdmVycy90aGVybWFsL29mLXRoZXJtYWwuYwpAQCAtMzg3LDE1ICszODcsMTggQEAKIAkJCQlpbnQgKCpnZXRfdHJlbmQpKHZvaWQgKiwgbG9uZyAqKSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqY2hpbGQsICpzZW5zb3JfbnA7CisJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6ZCA9IEVSUl9QVFIoLUVOT0RFVik7CiAKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJ0aGVybWFsLXpvbmVzIik7CiAJaWYgKCFucCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiAKLQlpZiAoIWRldiB8fCAhZGV2LT5vZl9ub2RlKQorCWlmICghZGV2IHx8ICFkZXYtPm9mX25vZGUpIHsKKwkJb2Zfbm9kZV9wdXQobnApOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CiAKLQlzZW5zb3JfbnAgPSBkZXYtPm9mX25vZGU7CisJc2Vuc29yX25wID0gb2Zfbm9kZV9nZXQoZGV2LT5vZl9ub2RlKTsKIAogCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7CiAJCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3Mgc2Vuc29yX3NwZWNzOwpAQCAtNDIyLDE2ICs0MjUsMjEgQEAKIAkJfQogCiAJCWlmIChzZW5zb3Jfc3BlY3MubnAgPT0gc2Vuc29yX25wICYmIGlkID09IHNlbnNvcl9pZCkgewotCQkJb2Zfbm9kZV9wdXQobnApOwotCQkJcmV0dXJuIHRoZXJtYWxfem9uZV9vZl9hZGRfc2Vuc29yKGNoaWxkLCBzZW5zb3JfbnAsCi0JCQkJCQkJICBkYXRhLAotCQkJCQkJCSAgZ2V0X3RlbXAsCi0JCQkJCQkJICBnZXRfdHJlbmQpOworCQkJdHpkID0gdGhlcm1hbF96b25lX29mX2FkZF9zZW5zb3IoY2hpbGQsIHNlbnNvcl9ucCwKKwkJCQkJCQkgZGF0YSwKKwkJCQkJCQkgZ2V0X3RlbXAsCisJCQkJCQkJIGdldF90cmVuZCk7CisJCQlvZl9ub2RlX3B1dChzZW5zb3Jfc3BlY3MubnApOworCQkJb2Zfbm9kZV9wdXQoY2hpbGQpOworCQkJZ290byBleGl0OwogCQl9CisJCW9mX25vZGVfcHV0KHNlbnNvcl9zcGVjcy5ucCk7CiAJfQorZXhpdDoKKwlvZl9ub2RlX3B1dChzZW5zb3JfbnApOwogCW9mX25vZGVfcHV0KG5wKTsKIAotCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCXJldHVybiB0emQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyKTsKIApAQCAtNjIzLDYgKzYzMSw3IEBACiAKIAkvKiBSZXF1aXJlZCBmb3IgY29vbGluZyBtYXAgbWF0Y2hpbmcgKi8KIAl0cmlwLT5ucCA9IG5wOworCW9mX25vZGVfZ2V0KG5wKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzMwLDkgKzczOSwxNCBAQAogCXJldHVybiB0ejsKIAogZnJlZV90YnBzOgorCWZvciAoaSA9IDA7IGkgPCB0ei0+bnVtX3RicHM7IGkrKykKKwkJb2Zfbm9kZV9wdXQodHotPnRicHNbaV0uY29vbGluZ19kZXZpY2UpOwogCWtmcmVlKHR6LT50YnBzKTsKIGZyZWVfdHJpcHM6CisJZm9yIChpID0gMDsgaSA8IHR6LT5udHJpcHM7IGkrKykKKwkJb2Zfbm9kZV9wdXQodHotPnRyaXBzW2ldLm5wKTsKIAlrZnJlZSh0ei0+dHJpcHMpOworCW9mX25vZGVfcHV0KGdjaGlsZCk7CiBmcmVlX3R6OgogCWtmcmVlKHR6KTsKIAlvZl9ub2RlX3B1dChjaGlsZCk7CkBAIC03NDIsNyArNzU2LDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvZl90aGVybWFsX2ZyZWVfem9uZShzdHJ1Y3QgX190aGVybWFsX3pvbmUgKnR6KQogeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHR6LT5udW1fdGJwczsgaSsrKQorCQlvZl9ub2RlX3B1dCh0ei0+dGJwc1tpXS5jb29saW5nX2RldmljZSk7CiAJa2ZyZWUodHotPnRicHMpOworCWZvciAoaSA9IDA7IGkgPCB0ei0+bnRyaXBzOyBpKyspCisJCW9mX25vZGVfcHV0KHR6LT50cmlwc1tpXS5ucCk7CiAJa2ZyZWUodHotPnRyaXBzKTsKIAlrZnJlZSh0eik7CiB9CkBAIC04MTQsMTAgKzgzNCwxMyBAQAogCQkJLyogYXR0ZW1wdGluZyB0byBidWlsZCByZW1haW5pbmcgem9uZXMgc3RpbGwgKi8KIAkJfQogCX0KKwlvZl9ub2RlX3B1dChucCk7CiAKIAlyZXR1cm4gMDsKIAogZXhpdF9mcmVlOgorCW9mX25vZGVfcHV0KGNoaWxkKTsKKwlvZl9ub2RlX3B1dChucCk7CiAJb2ZfdGhlcm1hbF9mcmVlX3pvbmUodHopOwogCiAJLyogbm8gbWVtb3J5IGF2YWlsYWJsZSwgc28gZnJlZSB3aGF0IHdlIGhhdmUgYnVpbHQgKi8KQEAgLTg1OSw0ICs4ODIsNSBAQAogCQlrZnJlZSh6b25lLT5vcHMpOwogCQlvZl90aGVybWFsX2ZyZWVfem9uZSh6b25lLT5kZXZkYXRhKTsKIAl9CisJb2Zfbm9kZV9wdXQobnApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RoZXJtYWxfY29tbW9uLmMgYi9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdGhlcm1hbF9jb21tb24uYwppbmRleCAzZjVhZDI1Li5iNmJlNTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdGhlcm1hbF9jb21tb24uYworKysgYi9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdGhlcm1hbF9jb21tb24uYwpAQCAtNDE3LDEzICs0MTcsMTAgQEAKIAogCXRoX3pvbmUgPSBzZW5zb3JfY29uZi0+cHpvbmVfZGF0YTsKIAotCWlmICh0aF96b25lLT50aGVybV9kZXYpCi0JCXRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3Rlcih0aF96b25lLT50aGVybV9kZXYpOworCXRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3Rlcih0aF96b25lLT50aGVybV9kZXYpOwogCi0JZm9yIChpID0gMDsgaSA8IHRoX3pvbmUtPmNvb2xfZGV2X3NpemU7IGkrKykgewotCQlpZiAodGhfem9uZS0+Y29vbF9kZXZbaV0pCi0JCQljcHVmcmVxX2Nvb2xpbmdfdW5yZWdpc3Rlcih0aF96b25lLT5jb29sX2RldltpXSk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCB0aF96b25lLT5jb29sX2Rldl9zaXplOyArK2kpCisJCWNwdWZyZXFfY29vbGluZ191bnJlZ2lzdGVyKHRoX3pvbmUtPmNvb2xfZGV2W2ldKTsKIAogCWRldl9pbmZvKHNlbnNvcl9jb25mLT5kZXYsCiAJCSJFeHlub3M6IEtlcm5lbCBUaGVybWFsIG1hbmFnZW1lbnQgdW5yZWdpc3RlcmVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190aGVybWFsX2NvbW1vbi5oIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RoZXJtYWxfY29tbW9uLmgKaW5kZXggM2ViMmVkOS4uMTU4ZjVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RoZXJtYWxfY29tbW9uLmgKKysrIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RoZXJtYWxfY29tbW9uLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgU0VOU09SX05BTUVfTEVOCTE2CiAjZGVmaW5lIE1BWF9UUklQX0NPVU5UCTgKICNkZWZpbmUgTUFYX0NPT0xJTkdfREVWSUNFIDQKLSNkZWZpbmUgTUFYX1RIUkVTSE9MRF9MRVZTIDUKKyNkZWZpbmUgTUFYX1RSSU1JTkZPX0NUUkxfUkVHCTIKIAogI2RlZmluZSBBQ1RJVkVfSU5URVJWQUwgNTAwCiAjZGVmaW5lIElETEVfSU5URVJWQUwgMTAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuYyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuYwppbmRleCBhY2JmZjE0Li40OWMwOTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdG11LmMKKysrIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdS5jCkBAIC03NywxNiArNzcsNiBAQAogCXN0cnVjdCBleHlub3NfdG11X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CiAJaW50IHRlbXBfY29kZTsKIAotCWlmIChwZGF0YS0+Y2FsX21vZGUgPT0gSFdfTU9ERSkKLQkJcmV0dXJuIHRlbXA7Ci0KLQlpZiAoZGF0YS0+c29jID09IFNPQ19BUkNIX0VYWU5PUzQyMTApCi0JCS8qIHRlbXAgc2hvdWxkIHJhbmdlIGJldHdlZW4gMjUgYW5kIDEyNSAqLwotCQlpZiAodGVtcCA8IDI1IHx8IHRlbXAgPiAxMjUpIHsKLQkJCXRlbXBfY29kZSA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCiAJc3dpdGNoIChwZGF0YS0+Y2FsX3R5cGUpIHsKIAljYXNlIFRZUEVfVFdPX1BPSU5UX1RSSU1NSU5HOgogCQl0ZW1wX2NvZGUgPSAodGVtcCAtIHBkYXRhLT5maXJzdF9wb2ludF90cmltKSAqCkBAIC0xMDEsNyArOTEsNyBAQAogCQl0ZW1wX2NvZGUgPSB0ZW1wICsgcGRhdGEtPmRlZmF1bHRfdGVtcF9vZmZzZXQ7CiAJCWJyZWFrOwogCX0KLW91dDoKKwogCXJldHVybiB0ZW1wX2NvZGU7CiB9CiAKQEAgLTExNCwxNiArMTA0LDYgQEAKIAlzdHJ1Y3QgZXh5bm9zX3RtdV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRhdGEtPnBkYXRhOwogCWludCB0ZW1wOwogCi0JaWYgKHBkYXRhLT5jYWxfbW9kZSA9PSBIV19NT0RFKQotCQlyZXR1cm4gdGVtcF9jb2RlOwotCi0JaWYgKGRhdGEtPnNvYyA9PSBTT0NfQVJDSF9FWFlOT1M0MjEwKQotCQkvKiB0ZW1wX2NvZGUgc2hvdWxkIHJhbmdlIGJldHdlZW4gNzUgYW5kIDE3NSAqLwotCQlpZiAodGVtcF9jb2RlIDwgNzUgfHwgdGVtcF9jb2RlID4gMTc1KSB7Ci0JCQl0ZW1wID0gLUVOT0RBVEE7Ci0JCQlnb3RvIG91dDsKLQkJfQotCiAJc3dpdGNoIChwZGF0YS0+Y2FsX3R5cGUpIHsKIAljYXNlIFRZUEVfVFdPX1BPSU5UX1RSSU1NSU5HOgogCQl0ZW1wID0gKHRlbXBfY29kZSAtIGRhdGEtPnRlbXBfZXJyb3IxKSAqCkBAIC0xMzgsMTggKzExOCwzNSBAQAogCQl0ZW1wID0gdGVtcF9jb2RlIC0gcGRhdGEtPmRlZmF1bHRfdGVtcF9vZmZzZXQ7CiAJCWJyZWFrOwogCX0KLW91dDoKKwogCXJldHVybiB0ZW1wOwogfQogCitzdGF0aWMgdm9pZCBleHlub3NfdG11X2NsZWFyX2lycXMoc3RydWN0IGV4eW5vc190bXVfZGF0YSAqZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgZXh5bm9zX3RtdV9yZWdpc3RlcnMgKnJlZyA9IGRhdGEtPnBkYXRhLT5yZWdpc3RlcnM7CisJdW5zaWduZWQgaW50IHZhbF9pcnE7CisKKwl2YWxfaXJxID0gcmVhZGwoZGF0YS0+YmFzZSArIHJlZy0+dG11X2ludHN0YXQpOworCS8qCisJICogQ2xlYXIgdGhlIGludGVycnVwdHMuICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIGZvcgorCSAqIEV4eW5vczMyNTAsIEV4eW5vczQ0MTIsIEV4eW5vczUyNTAgYW5kIEV4eW5vczUyNjAgaW5jb3JyZWN0bHkKKwkgKiBzdGF0ZXMgdGhhdCBJTlRDTEVBUiByZWdpc3RlciBoYXMgYSBkaWZmZXJlbnQgcGxhY2luZyBvZiBiaXRzCisJICogcmVzcG9uc2libGUgZm9yIEZBTEwgSVJRcyB0aGFuIElOVFNUQVQgcmVnaXN0ZXIuICBFeHlub3M1NDIwCisJICogYW5kIEV4eW5vczU0NDAgZG9jdW1lbnRhdGlvbiBpcyBjb3JyZWN0IChFeHlub3M0MjEwIGRvZXNuJ3QKKwkgKiBzdXBwb3J0IEZBTEwgSVJRcyBhdCBhbGwpLgorCSAqLworCXdyaXRlbCh2YWxfaXJxLCBkYXRhLT5iYXNlICsgcmVnLT50bXVfaW50Y2xlYXIpOworfQorCiBzdGF0aWMgaW50IGV4eW5vc190bXVfaW5pdGlhbGl6ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBleHlub3NfdG11X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZXh5bm9zX3RtdV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRhdGEtPnBkYXRhOwogCWNvbnN0IHN0cnVjdCBleHlub3NfdG11X3JlZ2lzdGVycyAqcmVnID0gcGRhdGEtPnJlZ2lzdGVyczsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzLCB0cmltX2luZm8gPSAwLCBjb247CisJdW5zaWduZWQgaW50IHN0YXR1cywgdHJpbV9pbmZvID0gMCwgY29uLCBjdHJsOwogCXVuc2lnbmVkIGludCByaXNpbmdfdGhyZXNob2xkID0gMCwgZmFsbGluZ190aHJlc2hvbGQgPSAwOwotCWludCByZXQgPSAwLCB0aHJlc2hvbGRfY29kZSwgaSwgdHJpZ2dlcl9sZXZzID0gMDsKKwlpbnQgcmV0ID0gMCwgdGhyZXNob2xkX2NvZGUsIGk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAljbGtfZW5hYmxlKGRhdGEtPmNsayk7CkBAIC0xNjQsMTEgKzE2MSwxNyBAQAogCQl9CiAJfQogCi0JaWYgKFRNVV9TVVBQT1JUUyhwZGF0YSwgVFJJTV9SRUxPQUQpKQotCQlfX3Jhd193cml0ZWwoMSwgZGF0YS0+YmFzZSArIHJlZy0+dHJpbWluZm9fY3RybCk7Ci0KLQlpZiAocGRhdGEtPmNhbF9tb2RlID09IEhXX01PREUpCi0JCWdvdG8gc2tpcF9jYWxpYl9kYXRhOworCWlmIChUTVVfU1VQUE9SVFMocGRhdGEsIFRSSU1fUkVMT0FEKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcmVnLT50cmltaW5mb19jdHJsX2NvdW50OyBpKyspIHsKKwkJCWlmIChwZGF0YS0+dHJpbWluZm9fcmVsb2FkW2ldKSB7CisJCQkJY3RybCA9IHJlYWRsKGRhdGEtPmJhc2UgKworCQkJCQkJcmVnLT50cmltaW5mb19jdHJsW2ldKTsKKwkJCQljdHJsIHw9IHBkYXRhLT50cmltaW5mb19yZWxvYWRbaV07CisJCQkJd3JpdGVsKGN0cmwsIGRhdGEtPmJhc2UgKworCQkJCQkJcmVnLT50cmltaW5mb19jdHJsW2ldKTsKKwkJCX0KKwkJfQorCX0KIAogCS8qIFNhdmUgdHJpbW1pbmcgaW5mbyBpbiBvcmRlciB0byBwZXJmb3JtIGNhbGlicmF0aW9uICovCiAJaWYgKGRhdGEtPnNvYyA9PSBTT0NfQVJDSF9FWFlOT1M1NDQwKSB7CkBAIC0xOTcsNyArMjAwLDcgQEAKIAkJCXRyaW1faW5mbyA9IHJlYWRsKGRhdGEtPmJhc2UgKyByZWctPnRyaW1pbmZvX2RhdGEpOwogCX0KIAlkYXRhLT50ZW1wX2Vycm9yMSA9IHRyaW1faW5mbyAmIEVYWU5PU19UTVVfVEVNUF9NQVNLOwotCWRhdGEtPnRlbXBfZXJyb3IyID0gKCh0cmltX2luZm8gPj4gcmVnLT50cmltaW5mb184NV9zaGlmdCkgJgorCWRhdGEtPnRlbXBfZXJyb3IyID0gKCh0cmltX2luZm8gPj4gRVhZTk9TX1RSSU1JTkZPXzg1X1NISUZUKSAmCiAJCQkJRVhZTk9TX1RNVV9URU1QX01BU0spOwogCiAJaWYgKCFkYXRhLT50ZW1wX2Vycm9yMSB8fApAQCAtMjA3LDY3ICsyMTAsMzMgQEAKIAogCWlmICghZGF0YS0+dGVtcF9lcnJvcjIpCiAJCWRhdGEtPnRlbXBfZXJyb3IyID0KLQkJCShwZGF0YS0+ZWZ1c2VfdmFsdWUgPj4gcmVnLT50cmltaW5mb184NV9zaGlmdCkgJgorCQkJKHBkYXRhLT5lZnVzZV92YWx1ZSA+PiBFWFlOT1NfVFJJTUlORk9fODVfU0hJRlQpICYKIAkJCUVYWU5PU19UTVVfVEVNUF9NQVNLOwogCi1za2lwX2NhbGliX2RhdGE6Ci0JaWYgKHBkYXRhLT5tYXhfdHJpZ2dlcl9sZXZlbCA+IE1BWF9USFJFU0hPTERfTEVWUykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIG1heCB0cmlnZ2VyIGxldmVsXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5tYXhfdHJpZ2dlcl9sZXZlbDsgaSsrKSB7Ci0JCWlmICghcGRhdGEtPnRyaWdnZXJfbGV2ZWxzW2ldKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChwZGF0YS0+dHJpZ2dlcl90eXBlW2ldID09IEhXX1RSSVApICYmCi0JCSghcGRhdGEtPnRyaWdnZXJfbGV2ZWxzW3BkYXRhLT5tYXhfdHJpZ2dlcl9sZXZlbCAtIDFdKSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBodyB0cmlnZ2VyIGxldmVsXG4iKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIENvdW50IHRyaWdnZXIgbGV2ZWxzIGV4Y2VwdCB0aGUgSFcgdHJpcCovCi0JCWlmICghKHBkYXRhLT50cmlnZ2VyX3R5cGVbaV0gPT0gSFdfVFJJUCkpCi0JCQl0cmlnZ2VyX2xldnMrKzsKLQl9Ci0KIAlyaXNpbmdfdGhyZXNob2xkID0gcmVhZGwoZGF0YS0+YmFzZSArIHJlZy0+dGhyZXNob2xkX3RoMCk7CiAKIAlpZiAoZGF0YS0+c29jID09IFNPQ19BUkNIX0VYWU5PUzQyMTApIHsKIAkJLyogV3JpdGUgdGVtcGVyYXR1cmUgY29kZSBmb3IgdGhyZXNob2xkICovCiAJCXRocmVzaG9sZF9jb2RlID0gdGVtcF90b19jb2RlKGRhdGEsIHBkYXRhLT50aHJlc2hvbGQpOwotCQlpZiAodGhyZXNob2xkX2NvZGUgPCAwKSB7Ci0JCQlyZXQgPSB0aHJlc2hvbGRfY29kZTsKLQkJCWdvdG8gb3V0OwotCQl9CiAJCXdyaXRlYih0aHJlc2hvbGRfY29kZSwKIAkJCWRhdGEtPmJhc2UgKyByZWctPnRocmVzaG9sZF90ZW1wKTsKLQkJZm9yIChpID0gMDsgaSA8IHRyaWdnZXJfbGV2czsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5vbl9od190cmlnZ2VyX2xldmVsczsgaSsrKQogCQkJd3JpdGViKHBkYXRhLT50cmlnZ2VyX2xldmVsc1tpXSwgZGF0YS0+YmFzZSArCiAJCQlyZWctPnRocmVzaG9sZF90aDAgKyBpICogc2l6ZW9mKHJlZy0+dGhyZXNob2xkX3RoMCkpOwogCi0JCXdyaXRlbChyZWctPmludGNscl9yaXNlX21hc2ssIGRhdGEtPmJhc2UgKyByZWctPnRtdV9pbnRjbGVhcik7CisJCWV4eW5vc190bXVfY2xlYXJfaXJxcyhkYXRhKTsKIAl9IGVsc2UgewogCQkvKiBXcml0ZSB0ZW1wZXJhdHVyZSBjb2RlIGZvciByaXNpbmcgYW5kIGZhbGxpbmcgdGhyZXNob2xkICovCi0JCWZvciAoaSA9IDA7Ci0JCWkgPCB0cmlnZ2VyX2xldnMgJiYgaSA8IEVYWU5PU19NQVhfVFJJR0dFUl9QRVJfUkVHOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5ub25faHdfdHJpZ2dlcl9sZXZlbHM7IGkrKykgewogCQkJdGhyZXNob2xkX2NvZGUgPSB0ZW1wX3RvX2NvZGUoZGF0YSwKIAkJCQkJCXBkYXRhLT50cmlnZ2VyX2xldmVsc1tpXSk7Ci0JCQlpZiAodGhyZXNob2xkX2NvZGUgPCAwKSB7Ci0JCQkJcmV0ID0gdGhyZXNob2xkX2NvZGU7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9CiAJCQlyaXNpbmdfdGhyZXNob2xkICY9IH4oMHhmZiA8PCA4ICogaSk7CiAJCQlyaXNpbmdfdGhyZXNob2xkIHw9IHRocmVzaG9sZF9jb2RlIDw8IDggKiBpOwogCQkJaWYgKHBkYXRhLT50aHJlc2hvbGRfZmFsbGluZykgewogCQkJCXRocmVzaG9sZF9jb2RlID0gdGVtcF90b19jb2RlKGRhdGEsCiAJCQkJCQlwZGF0YS0+dHJpZ2dlcl9sZXZlbHNbaV0gLQogCQkJCQkJcGRhdGEtPnRocmVzaG9sZF9mYWxsaW5nKTsKLQkJCQlpZiAodGhyZXNob2xkX2NvZGUgPiAwKQotCQkJCQlmYWxsaW5nX3RocmVzaG9sZCB8PQotCQkJCQkJdGhyZXNob2xkX2NvZGUgPDwgOCAqIGk7CisJCQkJZmFsbGluZ190aHJlc2hvbGQgfD0gdGhyZXNob2xkX2NvZGUgPDwgOCAqIGk7CiAJCQl9CiAJCX0KIApAQCAtMjc2LDkgKzI0NSw3IEBACiAJCXdyaXRlbChmYWxsaW5nX3RocmVzaG9sZCwKIAkJCQlkYXRhLT5iYXNlICsgcmVnLT50aHJlc2hvbGRfdGgxKTsKIAotCQl3cml0ZWwoKHJlZy0+aW50Y2xyX3Jpc2VfbWFzayA8PCByZWctPmludGNscl9yaXNlX3NoaWZ0KSB8Ci0JCQkocmVnLT5pbnRjbHJfZmFsbF9tYXNrIDw8IHJlZy0+aW50Y2xyX2ZhbGxfc2hpZnQpLAotCQkJCWRhdGEtPmJhc2UgKyByZWctPnRtdV9pbnRjbGVhcik7CisJCWV4eW5vc190bXVfY2xlYXJfaXJxcyhkYXRhKTsKIAogCQkvKiBpZiBsYXN0IHRocmVzaG9sZCBsaW1pdCBpcyBhbHNvIHByZXNlbnQgKi8KIAkJaSA9IHBkYXRhLT5tYXhfdHJpZ2dlcl9sZXZlbCAtIDE7CkBAIC0yODYsMTAgKzI1Myw2IEBACiAJCQkJKHBkYXRhLT50cmlnZ2VyX3R5cGVbaV0gPT0gSFdfVFJJUCkpIHsKIAkJCXRocmVzaG9sZF9jb2RlID0gdGVtcF90b19jb2RlKGRhdGEsCiAJCQkJCQlwZGF0YS0+dHJpZ2dlcl9sZXZlbHNbaV0pOwotCQkJaWYgKHRocmVzaG9sZF9jb2RlIDwgMCkgewotCQkJCXJldCA9IHRocmVzaG9sZF9jb2RlOwotCQkJCWdvdG8gb3V0OwotCQkJfQogCQkJaWYgKGkgPT0gRVhZTk9TX01BWF9UUklHR0VSX1BFUl9SRUcgLSAxKSB7CiAJCQkJLyogMS00IGxldmVsIHRvIGJlIGFzc2lnbmVkIGluIHRoMCByZWcgKi8KIAkJCQlyaXNpbmdfdGhyZXNob2xkICY9IH4oMHhmZiA8PCA4ICogaSk7CkBAIC0zMjUsNyArMjg4LDcgQEAKIAlzdHJ1Y3QgZXh5bm9zX3RtdV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGV4eW5vc190bXVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkYXRhLT5wZGF0YTsKIAljb25zdCBzdHJ1Y3QgZXh5bm9zX3RtdV9yZWdpc3RlcnMgKnJlZyA9IHBkYXRhLT5yZWdpc3RlcnM7Ci0JdW5zaWduZWQgaW50IGNvbiwgaW50ZXJydXB0X2VuLCBjYWxfdmFsOworCXVuc2lnbmVkIGludCBjb24sIGludGVycnVwdF9lbjsKIAogCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCWNsa19lbmFibGUoZGF0YS0+Y2xrKTsKQEAgLTMzNSwxNSArMjk4LDExIEBACiAJaWYgKHBkYXRhLT50ZXN0X211eCkKIAkJY29uIHw9IChwZGF0YS0+dGVzdF9tdXggPDwgcmVnLT50ZXN0X211eF9hZGRyX3NoaWZ0KTsKIAotCWlmIChwZGF0YS0+cmVmZXJlbmNlX3ZvbHRhZ2UpIHsKLQkJY29uICY9IH4ocmVnLT5idWZfdnJlZl9zZWxfbWFzayA8PCByZWctPmJ1Zl92cmVmX3NlbF9zaGlmdCk7Ci0JCWNvbiB8PSBwZGF0YS0+cmVmZXJlbmNlX3ZvbHRhZ2UgPDwgcmVnLT5idWZfdnJlZl9zZWxfc2hpZnQ7Ci0JfQorCWNvbiAmPSB+KEVYWU5PU19UTVVfUkVGX1ZPTFRBR0VfTUFTSyA8PCBFWFlOT1NfVE1VX1JFRl9WT0xUQUdFX1NISUZUKTsKKwljb24gfD0gcGRhdGEtPnJlZmVyZW5jZV92b2x0YWdlIDw8IEVYWU5PU19UTVVfUkVGX1ZPTFRBR0VfU0hJRlQ7CiAKLQlpZiAocGRhdGEtPmdhaW4pIHsKLQkJY29uICY9IH4ocmVnLT5idWZfc2xvcGVfc2VsX21hc2sgPDwgcmVnLT5idWZfc2xvcGVfc2VsX3NoaWZ0KTsKLQkJY29uIHw9IChwZGF0YS0+Z2FpbiA8PCByZWctPmJ1Zl9zbG9wZV9zZWxfc2hpZnQpOwotCX0KKwljb24gJj0gfihFWFlOT1NfVE1VX0JVRl9TTE9QRV9TRUxfTUFTSyA8PCBFWFlOT1NfVE1VX0JVRl9TTE9QRV9TRUxfU0hJRlQpOworCWNvbiB8PSAocGRhdGEtPmdhaW4gPDwgRVhZTk9TX1RNVV9CVUZfU0xPUEVfU0VMX1NISUZUKTsKIAogCWlmIChwZGF0YS0+bm9pc2VfY2FuY2VsX21vZGUpIHsKIAkJY29uICY9IH4ocmVnLT50aGVybV90cmlwX21vZGVfbWFzayA8PApAQCAtMzUxLDI5ICszMTAsOCBAQAogCQljb24gfD0gKHBkYXRhLT5ub2lzZV9jYW5jZWxfbW9kZSA8PCByZWctPnRoZXJtX3RyaXBfbW9kZV9zaGlmdCk7CiAJfQogCi0JaWYgKHBkYXRhLT5jYWxfbW9kZSA9PSBIV19NT0RFKSB7Ci0JCWNvbiAmPSB+KHJlZy0+Y2FsaWJfbW9kZV9tYXNrIDw8IHJlZy0+Y2FsaWJfbW9kZV9zaGlmdCk7Ci0JCWNhbF92YWwgPSAwOwotCQlzd2l0Y2ggKHBkYXRhLT5jYWxfdHlwZSkgewotCQljYXNlIFRZUEVfVFdPX1BPSU5UX1RSSU1NSU5HOgotCQkJY2FsX3ZhbCA9IDM7Ci0JCQlicmVhazsKLQkJY2FzZSBUWVBFX09ORV9QT0lOVF9UUklNTUlOR184NToKLQkJCWNhbF92YWwgPSAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFlQRV9PTkVfUE9JTlRfVFJJTU1JTkdfMjU6Ci0JCQljYWxfdmFsID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIFRZUEVfTk9ORToKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBjYWxpYnJhdGlvbiB0eXBlLCB1c2luZyBub25lXG4iKTsKLQkJfQotCQljb24gfD0gY2FsX3ZhbCA8PCByZWctPmNhbGliX21vZGVfc2hpZnQ7Ci0JfQotCiAJaWYgKG9uKSB7Ci0JCWNvbiB8PSAoMSA8PCByZWctPmNvcmVfZW5fc2hpZnQpOworCQljb24gfD0gKDEgPDwgRVhZTk9TX1RNVV9DT1JFX0VOX1NISUZUKTsKIAkJaW50ZXJydXB0X2VuID0KIAkJCXBkYXRhLT50cmlnZ2VyX2VuYWJsZVszXSA8PCByZWctPmludGVuX3Jpc2UzX3NoaWZ0IHwKIAkJCXBkYXRhLT50cmlnZ2VyX2VuYWJsZVsyXSA8PCByZWctPmludGVuX3Jpc2UyX3NoaWZ0IHwKQEAgLTM4Myw3ICszMjEsNyBAQAogCQkJaW50ZXJydXB0X2VuIHw9CiAJCQkJaW50ZXJydXB0X2VuIDw8IHJlZy0+aW50ZW5fZmFsbDBfc2hpZnQ7CiAJfSBlbHNlIHsKLQkJY29uICY9IH4oMSA8PCByZWctPmNvcmVfZW5fc2hpZnQpOworCQljb24gJj0gfigxIDw8IEVYWU5PU19UTVVfQ09SRV9FTl9TSElGVCk7CiAJCWludGVycnVwdF9lbiA9IDA7IC8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KIAl9CiAJd3JpdGVsKGludGVycnVwdF9lbiwgZGF0YS0+YmFzZSArIHJlZy0+dG11X2ludGVuKTsKQEAgLTQwNCw4ICszNDIsMTYgQEAKIAljbGtfZW5hYmxlKGRhdGEtPmNsayk7CiAKIAl0ZW1wX2NvZGUgPSByZWFkYihkYXRhLT5iYXNlICsgcmVnLT50bXVfY3VyX3RlbXApOwotCXRlbXAgPSBjb2RlX3RvX3RlbXAoZGF0YSwgdGVtcF9jb2RlKTsKIAorCWlmIChkYXRhLT5zb2MgPT0gU09DX0FSQ0hfRVhZTk9TNDIxMCkKKwkJLyogdGVtcF9jb2RlIHNob3VsZCByYW5nZSBiZXR3ZWVuIDc1IGFuZCAxNzUgKi8KKwkJaWYgKHRlbXBfY29kZSA8IDc1IHx8IHRlbXBfY29kZSA+IDE3NSkgeworCQkJdGVtcCA9IC1FTk9EQVRBOworCQkJZ290byBvdXQ7CisJCX0KKworCXRlbXAgPSBjb2RlX3RvX3RlbXAoZGF0YSwgdGVtcF9jb2RlKTsKK291dDoKIAljbGtfZGlzYWJsZShkYXRhLT5jbGspOwogCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAKQEAgLTQ2NSw3ICs0MTEsNyBAQAogCQkJc3RydWN0IGV4eW5vc190bXVfZGF0YSwgaXJxX3dvcmspOwogCXN0cnVjdCBleHlub3NfdG11X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CiAJY29uc3Qgc3RydWN0IGV4eW5vc190bXVfcmVnaXN0ZXJzICpyZWcgPSBwZGF0YS0+cmVnaXN0ZXJzOwotCXVuc2lnbmVkIGludCB2YWxfaXJxLCB2YWxfdHlwZTsKKwl1bnNpZ25lZCBpbnQgdmFsX3R5cGU7CiAKIAlpZiAoIUlTX0VSUihkYXRhLT5jbGtfc2VjKSkKIAkJY2xrX2VuYWJsZShkYXRhLT5jbGtfc2VjKTsKQEAgLTQ4Myw5ICs0MjksNyBAQAogCWNsa19lbmFibGUoZGF0YS0+Y2xrKTsKIAogCS8qIFRPRE86IHRha2UgYWN0aW9uIGJhc2VkIG9uIHBhcnRpY3VsYXIgaW50ZXJydXB0ICovCi0JdmFsX2lycSA9IHJlYWRsKGRhdGEtPmJhc2UgKyByZWctPnRtdV9pbnRzdGF0KTsKLQkvKiBjbGVhciB0aGUgaW50ZXJydXB0cyAqLwotCXdyaXRlbCh2YWxfaXJxLCBkYXRhLT5iYXNlICsgcmVnLT50bXVfaW50Y2xlYXIpOworCWV4eW5vc190bXVfY2xlYXJfaXJxcyhkYXRhKTsKIAogCWNsa19kaXNhYmxlKGRhdGEtPmNsayk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuaCBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuaAppbmRleCAxYjRhNjQ0Li5jNThjNzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdG11LmgKKysrIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdS5oCkBAIC0zNCwxMSArMzQsNiBAQAogCVRZUEVfTk9ORSwKIH07CiAKLWVudW0gY2FsaWJyYXRpb25fbW9kZSB7Ci0JU1dfTU9ERSwKLQlIV19NT0RFLAotfTsKLQogZW51bSBzb2NfdHlwZSB7CiAJU09DX0FSQ0hfRVhZTk9TMzI1MCA9IDEsCiAJU09DX0FSQ0hfRVhZTk9TNDIxMCwKQEAgLTgyLDQ2ICs3NywxOSBAQAogICogYml0ZmllbGRzLiBUaGUgcmVnaXN0ZXIgdmFsaWRpdHksIG9mZnNldHMgYW5kIGJpdGZpZWxkIHZhbHVlcyBtYXkgdmFyeQogICogc2xpZ2h0bHkgYWNyb3NzIGRpZmZlcmVudCBleHlub3MgU09DJ3MuCiAgKiBAdHJpbWluZm9fZGF0YTogcmVnaXN0ZXIgY29udGFpbmluZyAyIHBvbnQgdHJpbW1pbmcgZGF0YQotICogQHRyaW1pbmZvXzI1X3NoaWZ0OiBzaGlmdCBiaXQgb2YgdGhlIDI1IEMgdHJpbSB2YWx1ZSBpbiB0cmltaW5mb19kYXRhIHJlZy4KLSAqIEB0cmltaW5mb184NV9zaGlmdDogc2hpZnQgYml0IG9mIHRoZSA4NSBDIHRyaW0gdmFsdWUgaW4gdHJpbWluZm9fZGF0YSByZWcuCiAgKiBAdHJpbWluZm9fY3RybDogdHJpbSBpbmZvIGNvbnRyb2xsZXIgcmVnaXN0ZXIuCi0gKiBAdHJpbWluZm9fcmVsb2FkX3NoaWZ0OiBzaGlmdCBvZiB0cmltaW5mbyByZWxvYWQgZW5hYmxlIGJpdCBpbiB0cmltaW5mb19jdHJsCi0JcmVnLgorICogQHRyaW1pbmZvX2N0cmxfY291bnQ6IHRoZSBudW1iZXIgb2YgdHJpbSBpbmZvIGNvbnRyb2xsZXIgcmVnaXN0ZXIuCiAgKiBAdG11X2N0cmw6IFRNVSBtYWluIGNvbnRyb2xsZXIgcmVnaXN0ZXIuCiAgKiBAdGVzdF9tdXhfYWRkcl9zaGlmdDogc2hpZnQgYml0cyBvZiB0ZXN0IG11eCBhZGRyZXNzLgotICogQGJ1Zl92cmVmX3NlbF9zaGlmdDogc2hpZnQgYml0cyBvZiByZWZlcmVuY2Ugdm9sdGFnZSBpbiB0bXVfY3RybCByZWdpc3Rlci4KLSAqIEBidWZfdnJlZl9zZWxfbWFzazogbWFzayBiaXRzIG9mIHJlZmVyZW5jZSB2b2x0YWdlIGluIHRtdV9jdHJsIHJlZ2lzdGVyLgogICogQHRoZXJtX3RyaXBfbW9kZV9zaGlmdDogc2hpZnQgYml0cyBvZiB0cmlwcGluZyBtb2RlIGluIHRtdV9jdHJsIHJlZ2lzdGVyLgogICogQHRoZXJtX3RyaXBfbW9kZV9tYXNrOiBtYXNrIGJpdHMgb2YgdHJpcHBpbmcgbW9kZSBpbiB0bXVfY3RybCByZWdpc3Rlci4KICAqIEB0aGVybV90cmlwX2VuX3NoaWZ0OiBzaGlmdCBiaXRzIG9mIHRyaXBwaW5nIGVuYWJsZSBpbiB0bXVfY3RybCByZWdpc3Rlci4KLSAqIEBidWZfc2xvcGVfc2VsX3NoaWZ0OiBzaGlmdCBiaXRzIG9mIGFtcGxpZmllciBnYWluIHZhbHVlIGluIHRtdV9jdHJsCi0JcmVnaXN0ZXIuCi0gKiBAYnVmX3Nsb3BlX3NlbF9tYXNrOiBtYXNrIGJpdHMgb2YgYW1wbGlmaWVyIGdhaW4gdmFsdWUgaW4gdG11X2N0cmwgcmVnaXN0ZXIuCi0gKiBAY2FsaWJfbW9kZV9zaGlmdDogc2hpZnQgYml0cyBvZiBjYWxpYnJhdGlvbiBtb2RlIHZhbHVlIGluIHRtdV9jdHJsCi0JcmVnaXN0ZXIuCi0gKiBAY2FsaWJfbW9kZV9tYXNrOiBtYXNrIGJpdHMgb2YgY2FsaWJyYXRpb24gbW9kZSB2YWx1ZSBpbiB0bXVfY3RybAotCXJlZ2lzdGVyLgotICogQHRoZXJtX3RyaXBfdHFfZW5fc2hpZnQ6IHNoaWZ0IGJpdHMgb2YgdGhlcm1hbCB0cmlwIGVuYWJsZSBieSBUUSBwaW4gaW4KLQl0bXVfY3RybCByZWdpc3Rlci4KLSAqIEBjb3JlX2VuX3NoaWZ0OiBzaGlmdCBiaXRzIG9mIFRNVSBjb3JlIGVuYWJsZSBiaXQgaW4gdG11X2N0cmwgcmVnaXN0ZXIuCiAgKiBAdG11X3N0YXR1czogcmVnaXN0ZXIgZHJlc2NyaWJpbmcgdGhlIFRNVSBzdGF0dXMuCiAgKiBAdG11X2N1cl90ZW1wOiByZWdpc3RlciBjb250YWluaW5nIHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIG9mIHRoZSBUTVUuCi0gKiBAdG11X2N1cl90ZW1wX3NoaWZ0OiBzaGlmdCBiaXRzIG9mIGN1cnJlbnQgdGVtcCB2YWx1ZSBpbiB0bXVfY3VyX3RlbXAKLQlyZWdpc3Rlci4KICAqIEB0aHJlc2hvbGRfdGVtcDogcmVnaXN0ZXIgY29udGFpbmluZyB0aGUgYmFzZSB0aHJlc2hvbGQgbGV2ZWwuCiAgKiBAdGhyZXNob2xkX3RoMDogUmVnaXN0ZXIgY29udGFpbmluZyBmaXJzdCBzZXQgb2YgcmlzaW5nIGxldmVscy4KLSAqIEB0aHJlc2hvbGRfdGgwX2wwX3NoaWZ0OiBzaGlmdCBiaXRzIG9mIGxldmVsMCB0aHJlc2hvbGQgdGVtcGVyYXR1cmUuCi0gKiBAdGhyZXNob2xkX3RoMF9sMV9zaGlmdDogc2hpZnQgYml0cyBvZiBsZXZlbDEgdGhyZXNob2xkIHRlbXBlcmF0dXJlLgotICogQHRocmVzaG9sZF90aDBfbDJfc2hpZnQ6IHNoaWZ0IGJpdHMgb2YgbGV2ZWwyIHRocmVzaG9sZCB0ZW1wZXJhdHVyZS4KLSAqIEB0aHJlc2hvbGRfdGgwX2wzX3NoaWZ0OiBzaGlmdCBiaXRzIG9mIGxldmVsMyB0aHJlc2hvbGQgdGVtcGVyYXR1cmUuCiAgKiBAdGhyZXNob2xkX3RoMTogUmVnaXN0ZXIgY29udGFpbmluZyBzZWNvbmQgc2V0IG9mIHJpc2luZyBsZXZlbHMuCi0gKiBAdGhyZXNob2xkX3RoMV9sMF9zaGlmdDogc2hpZnQgYml0cyBvZiBsZXZlbDAgdGhyZXNob2xkIHRlbXBlcmF0dXJlLgotICogQHRocmVzaG9sZF90aDFfbDFfc2hpZnQ6IHNoaWZ0IGJpdHMgb2YgbGV2ZWwxIHRocmVzaG9sZCB0ZW1wZXJhdHVyZS4KLSAqIEB0aHJlc2hvbGRfdGgxX2wyX3NoaWZ0OiBzaGlmdCBiaXRzIG9mIGxldmVsMiB0aHJlc2hvbGQgdGVtcGVyYXR1cmUuCi0gKiBAdGhyZXNob2xkX3RoMV9sM19zaGlmdDogc2hpZnQgYml0cyBvZiBsZXZlbDMgdGhyZXNob2xkIHRlbXBlcmF0dXJlLgogICogQHRocmVzaG9sZF90aDI6IFJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhpcmQgc2V0IG9mIHJpc2luZyBsZXZlbHMuCi0gKiBAdGhyZXNob2xkX3RoMl9sMF9zaGlmdDogc2hpZnQgYml0cyBvZiBsZXZlbDAgdGhyZXNob2xkIHRlbXBlcmF0dXJlLgotICogQHRocmVzaG9sZF90aDM6IFJlZ2lzdGVyIGNvbnRhaW5pbmcgZm91cnRoIHNldCBvZiByaXNpbmcgbGV2ZWxzLgogICogQHRocmVzaG9sZF90aDNfbDBfc2hpZnQ6IHNoaWZ0IGJpdHMgb2YgbGV2ZWwwIHRocmVzaG9sZCB0ZW1wZXJhdHVyZS4KICAqIEB0bXVfaW50ZW46IHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVudCB0aHJlc2hvbGQgaW50ZXJydXB0CiAJZW5hYmxlIGJpdHMuCkBAIC0xMzAsNjggKzk4LDM1IEBACiAgKiBAaW50ZW5fcmlzZTJfc2hpZnQ6IHNoaWZ0IGJpdHMgb2YgcmlzaW5nIDIgaW50ZXJydXB0IGJpdHMuCiAgKiBAaW50ZW5fcmlzZTNfc2hpZnQ6IHNoaWZ0IGJpdHMgb2YgcmlzaW5nIDMgaW50ZXJydXB0IGJpdHMuCiAgKiBAaW50ZW5fZmFsbDBfc2hpZnQ6IHNoaWZ0IGJpdHMgb2YgZmFsbGluZyAwIGludGVycnVwdCBiaXRzLgotICogQGludGVuX2ZhbGwxX3NoaWZ0OiBzaGlmdCBiaXRzIG9mIGZhbGxpbmcgMSBpbnRlcnJ1cHQgYml0cy4KLSAqIEBpbnRlbl9mYWxsMl9zaGlmdDogc2hpZnQgYml0cyBvZiBmYWxsaW5nIDIgaW50ZXJydXB0IGJpdHMuCi0gKiBAaW50ZW5fZmFsbDNfc2hpZnQ6IHNoaWZ0IGJpdHMgb2YgZmFsbGluZyAzIGludGVycnVwdCBiaXRzLgogICogQHRtdV9pbnRzdGF0OiBSZWdpc3RlciBjb250YWluaW5nIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHZhbHVlcy4KICAqIEB0bXVfaW50Y2xlYXI6IFJlZ2lzdGVyIGZvciBjbGVhcmluZyB0aGUgcmFpc2VkIGludGVycnVwdCBzdGF0dXMuCi0gKiBAaW50Y2xyX2ZhbGxfc2hpZnQ6IHNoaWZ0IGJpdHMgZm9yIGludGVycnVwdCBjbGVhciBmYWxsIDAKLSAqIEBpbnRjbHJfcmlzZV9zaGlmdDogc2hpZnQgYml0cyBvZiBhbGwgcmlzaW5nIGludGVycnVwdCBiaXRzLgotICogQGludGNscl9yaXNlX21hc2s6IG1hc2sgYml0cyBvZiBhbGwgcmlzaW5nIGludGVycnVwdCBiaXRzLgotICogQGludGNscl9mYWxsX21hc2s6IG1hc2sgYml0cyBvZiBhbGwgcmlzaW5nIGludGVycnVwdCBiaXRzLgogICogQGVtdWxfY29uOiBUTVUgZW11bGF0aW9uIGNvbnRyb2xsZXIgcmVnaXN0ZXIuCiAgKiBAZW11bF90ZW1wX3NoaWZ0OiBzaGlmdCBiaXRzIG9mIGVtdWxhdGlvbiB0ZW1wZXJhdHVyZS4KICAqIEBlbXVsX3RpbWVfc2hpZnQ6IHNoaWZ0IGJpdHMgb2YgZW11bGF0aW9uIHRpbWUuCi0gKiBAZW11bF90aW1lX21hc2s6IG1hc2sgYml0cyBvZiBlbXVsYXRpb24gdGltZS4KICAqIEB0bXVfaXJxc3RhdHVzOiByZWdpc3RlciB0byBmaW5kIHdoaWNoIFRNVSBnZW5lcmF0ZWQgaW50ZXJydXB0cy4KICAqIEB0bXVfcG1pbjogcmVnaXN0ZXIgdG8gZ2V0L3NldCB0aGUgUG1pbiB2YWx1ZS4KICAqLwogc3RydWN0IGV4eW5vc190bXVfcmVnaXN0ZXJzIHsKIAl1MzIJdHJpbWluZm9fZGF0YTsKLQl1MzIJdHJpbWluZm9fMjVfc2hpZnQ7Ci0JdTMyCXRyaW1pbmZvXzg1X3NoaWZ0OwogCi0JdTMyCXRyaW1pbmZvX2N0cmw7Ci0JdTMyCXRyaW1pbmZvX2N0cmwxOwotCXUzMgl0cmltaW5mb19yZWxvYWRfc2hpZnQ7CisJdTMyCXRyaW1pbmZvX2N0cmxbTUFYX1RSSU1JTkZPX0NUUkxfUkVHXTsKKwl1MzIJdHJpbWluZm9fY3RybF9jb3VudDsKIAogCXUzMgl0bXVfY3RybDsKIAl1MzIgICAgIHRlc3RfbXV4X2FkZHJfc2hpZnQ7Ci0JdTMyCWJ1Zl92cmVmX3NlbF9zaGlmdDsKLQl1MzIJYnVmX3ZyZWZfc2VsX21hc2s7CiAJdTMyCXRoZXJtX3RyaXBfbW9kZV9zaGlmdDsKIAl1MzIJdGhlcm1fdHJpcF9tb2RlX21hc2s7CiAJdTMyCXRoZXJtX3RyaXBfZW5fc2hpZnQ7Ci0JdTMyCWJ1Zl9zbG9wZV9zZWxfc2hpZnQ7Ci0JdTMyCWJ1Zl9zbG9wZV9zZWxfbWFzazsKLQl1MzIJY2FsaWJfbW9kZV9zaGlmdDsKLQl1MzIJY2FsaWJfbW9kZV9tYXNrOwotCXUzMgl0aGVybV90cmlwX3RxX2VuX3NoaWZ0OwotCXUzMgljb3JlX2VuX3NoaWZ0OwogCiAJdTMyCXRtdV9zdGF0dXM7CiAKIAl1MzIJdG11X2N1cl90ZW1wOwotCXUzMgl0bXVfY3VyX3RlbXBfc2hpZnQ7CiAKIAl1MzIJdGhyZXNob2xkX3RlbXA7CiAKIAl1MzIJdGhyZXNob2xkX3RoMDsKLQl1MzIJdGhyZXNob2xkX3RoMF9sMF9zaGlmdDsKLQl1MzIJdGhyZXNob2xkX3RoMF9sMV9zaGlmdDsKLQl1MzIJdGhyZXNob2xkX3RoMF9sMl9zaGlmdDsKLQl1MzIJdGhyZXNob2xkX3RoMF9sM19zaGlmdDsKLQogCXUzMgl0aHJlc2hvbGRfdGgxOwotCXUzMgl0aHJlc2hvbGRfdGgxX2wwX3NoaWZ0OwotCXUzMgl0aHJlc2hvbGRfdGgxX2wxX3NoaWZ0OwotCXUzMgl0aHJlc2hvbGRfdGgxX2wyX3NoaWZ0OwotCXUzMgl0aHJlc2hvbGRfdGgxX2wzX3NoaWZ0OwotCiAJdTMyCXRocmVzaG9sZF90aDI7Ci0JdTMyCXRocmVzaG9sZF90aDJfbDBfc2hpZnQ7Ci0KLQl1MzIJdGhyZXNob2xkX3RoMzsKIAl1MzIJdGhyZXNob2xkX3RoM19sMF9zaGlmdDsKIAogCXUzMgl0bXVfaW50ZW47CkBAIC0yMDAsMjIgKzEzNSwxNCBAQAogCXUzMglpbnRlbl9yaXNlMl9zaGlmdDsKIAl1MzIJaW50ZW5fcmlzZTNfc2hpZnQ7CiAJdTMyCWludGVuX2ZhbGwwX3NoaWZ0OwotCXUzMglpbnRlbl9mYWxsMV9zaGlmdDsKLQl1MzIJaW50ZW5fZmFsbDJfc2hpZnQ7Ci0JdTMyCWludGVuX2ZhbGwzX3NoaWZ0OwogCiAJdTMyCXRtdV9pbnRzdGF0OwogCiAJdTMyCXRtdV9pbnRjbGVhcjsKLQl1MzIJaW50Y2xyX2ZhbGxfc2hpZnQ7Ci0JdTMyCWludGNscl9yaXNlX3NoaWZ0OwotCXUzMglpbnRjbHJfZmFsbF9tYXNrOwotCXUzMglpbnRjbHJfcmlzZV9tYXNrOwogCiAJdTMyCWVtdWxfY29uOwogCXUzMgllbXVsX3RlbXBfc2hpZnQ7CiAJdTMyCWVtdWxfdGltZV9zaGlmdDsKLQl1MzIJZW11bF90aW1lX21hc2s7CiAKIAl1MzIJdG11X2lycXN0YXR1czsKIAl1MzIJdG11X3BtaW47CkBAIC0yNTAsMTEgKzE3NywxMiBAQAogICoJMSA9IGVuYWJsZSB0cmlnZ2VyX2xldmVsW10gaW50ZXJydXB0LAogICoJMCA9IGRpc2FibGUgdHJpZ2dlcl9sZXZlbFtdIGludGVycnVwdAogICogQG1heF90cmlnZ2VyX2xldmVsOiBtYXggdHJpZ2dlciBsZXZlbCBzdXBwb3J0ZWQgYnkgdGhlIFRNVQorICogQG5vbl9od190cmlnZ2VyX2xldmVsczogbnVtYmVyIG9mIGRlZmluZWQgbm9uLWhhcmR3YXJlIHRyaWdnZXIgbGV2ZWxzCiAgKiBAZ2FpbjogZ2FpbiBvZiBhbXBsaWZpZXIgaW4gdGhlIHBvc2l0aXZlLVRDIGdlbmVyYXRvciBibG9jawotICoJMCA8PSBnYWluIDw9IDE1CisgKgkwIDwgZ2FpbiA8PSAxNQogICogQHJlZmVyZW5jZV92b2x0YWdlOiByZWZlcmVuY2Ugdm9sdGFnZSBvZiBhbXBsaWZpZXIKICAqCWluIHRoZSBwb3NpdGl2ZS1UQyBnZW5lcmF0b3IgYmxvY2sKLSAqCTAgPD0gcmVmZXJlbmNlX3ZvbHRhZ2UgPD0gMzEKKyAqCTAgPCByZWZlcmVuY2Vfdm9sdGFnZSA8PSAzMQogICogQG5vaXNlX2NhbmNlbF9tb2RlOiBub2lzZSBjYW5jZWxsYXRpb24gbW9kZQogICoJMDAwLCAxMDAsIDEwMSwgMTEwIGFuZCAxMTEgY2FuIGJlIGRpZmZlcmVudCBtb2RlcwogICogQHR5cGU6IGRldGVybWluZXMgdGhlIHR5cGUgb2YgU09DCkBAIC0yNjUsOCArMTkzLDggQEAKICAqIEBzZWNvbmRfcG9pbnRfdHJpbTogdGVtcCB2YWx1ZSBvZiB0aGUgc2Vjb25kIHBvaW50IHRyaW1taW5nCiAgKiBAZGVmYXVsdF90ZW1wX29mZnNldDogZGVmYXVsdCB0ZW1wZXJhdHVyZSBvZmZzZXQgaW4gY2FzZSBvZiBubyB0cmltbWluZwogICogQHRlc3RfbXV4OyBpbmZvcm1hdGlvbiBpZiBTb0Mgc3VwcG9ydHMgdGVzdCBNVVgKKyAqIEB0cmltaW5mb19yZWxvYWQ6IHJlbG9hZCB2YWx1ZSB0byByZWFkIFRSSU1JTkZPIHJlZ2lzdGVyCiAgKiBAY2FsX3R5cGU6IGNhbGlicmF0aW9uIHR5cGUgZm9yIHRlbXBlcmF0dXJlCi0gKiBAY2FsX21vZGU6IGNhbGlicmF0aW9uIG1vZGUgZm9yIHRlbXBlcmF0dXJlCiAgKiBAZnJlcV9jbGlwX3RhYmxlOiBUYWJsZSByZXByZXNlbnRpbmcgZnJlcXVlbmN5IHJlZHVjdGlvbiBwZXJjZW50YWdlLgogICogQGZyZXFfdGFiX2NvdW50OiBDb3VudCBvZiB0aGUgYWJvdmUgdGFibGUgYXMgZnJlcXVlbmN5IHJlZHVjdGlvbiBtYXkKICAqCWFwcGxpY2FibGUgdG8gb25seSBzb21lIG9mIHRoZSB0cmlnZ2VyIGxldmVscy4KQEAgLTI4NCw2ICsyMTIsNyBAQAogCWVudW0gdHJpZ2dlcl90eXBlIHRyaWdnZXJfdHlwZVtNQVhfVFJJUF9DT1VOVF07CiAJYm9vbCB0cmlnZ2VyX2VuYWJsZVtNQVhfVFJJUF9DT1VOVF07CiAJdTggbWF4X3RyaWdnZXJfbGV2ZWw7CisJdTggbm9uX2h3X3RyaWdnZXJfbGV2ZWxzOwogCXU4IGdhaW47CiAJdTggcmVmZXJlbmNlX3ZvbHRhZ2U7CiAJdTggbm9pc2VfY2FuY2VsX21vZGU7CkBAIC0yOTUsOSArMjI0LDkgQEAKIAl1OCBzZWNvbmRfcG9pbnRfdHJpbTsKIAl1OCBkZWZhdWx0X3RlbXBfb2Zmc2V0OwogCXU4IHRlc3RfbXV4OworCXU4IHRyaW1pbmZvX3JlbG9hZFtNQVhfVFJJTUlORk9fQ1RSTF9SRUddOwogCiAJZW51bSBjYWxpYnJhdGlvbl90eXBlIGNhbF90eXBlOwotCWVudW0gY2FsaWJyYXRpb25fbW9kZSBjYWxfbW9kZTsKIAllbnVtIHNvY190eXBlIHR5cGU7CiAJc3RydWN0IGZyZXFfY2xpcF90YWJsZSBmcmVxX3RhYls0XTsKIAl1bnNpZ25lZCBpbnQgZnJlcV90YWJfY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdG11X2RhdGEuYyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXVfZGF0YS5jCmluZGV4IGFhOGUwZGUuLjE3MjRmNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXVfZGF0YS5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXVfZGF0YS5jCkBAIC0yNywxNCArMjcsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9FWFlOT1M0MjEwKQogc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfdG11X3JlZ2lzdGVycyBleHlub3M0MjEwX3RtdV9yZWdpc3RlcnMgPSB7CiAJLnRyaW1pbmZvX2RhdGEgPSBFWFlOT1NfVE1VX1JFR19UUklNSU5GTywKLQkudHJpbWluZm9fMjVfc2hpZnQgPSBFWFlOT1NfVFJJTUlORk9fMjVfU0hJRlQsCi0JLnRyaW1pbmZvXzg1X3NoaWZ0ID0gRVhZTk9TX1RSSU1JTkZPXzg1X1NISUZULAogCS50bXVfY3RybCA9IEVYWU5PU19UTVVfUkVHX0NPTlRST0wsCi0JLmJ1Zl92cmVmX3NlbF9zaGlmdCA9IEVYWU5PU19UTVVfUkVGX1ZPTFRBR0VfU0hJRlQsCi0JLmJ1Zl92cmVmX3NlbF9tYXNrID0gRVhZTk9TX1RNVV9SRUZfVk9MVEFHRV9NQVNLLAotCS5idWZfc2xvcGVfc2VsX3NoaWZ0ID0gRVhZTk9TX1RNVV9CVUZfU0xPUEVfU0VMX1NISUZULAotCS5idWZfc2xvcGVfc2VsX21hc2sgPSBFWFlOT1NfVE1VX0JVRl9TTE9QRV9TRUxfTUFTSywKLQkuY29yZV9lbl9zaGlmdCA9IEVYWU5PU19UTVVfQ09SRV9FTl9TSElGVCwKIAkudG11X3N0YXR1cyA9IEVYWU5PU19UTVVfUkVHX1NUQVRVUywKIAkudG11X2N1cl90ZW1wID0gRVhZTk9TX1RNVV9SRUdfQ1VSUkVOVF9URU1QLAogCS50aHJlc2hvbGRfdGVtcCA9IEVYWU5PUzQyMTBfVE1VX1JFR19USFJFU0hPTERfVEVNUCwKQEAgLTQ2LDcgKzM5LDYgQEAKIAkuaW50ZW5fcmlzZTNfc2hpZnQgPSBFWFlOT1NfVE1VX0lOVEVOX1JJU0UzX1NISUZULAogCS50bXVfaW50c3RhdCA9IEVYWU5PU19UTVVfUkVHX0lOVFNUQVQsCiAJLnRtdV9pbnRjbGVhciA9IEVYWU5PU19UTVVfUkVHX0lOVENMRUFSLAotCS5pbnRjbHJfcmlzZV9tYXNrID0gRVhZTk9TNDIxMF9UTVVfVFJJR19MRVZFTF9NQVNLLAogfTsKIAogc3RydWN0IGV4eW5vc190bXVfaW5pdF9kYXRhIGNvbnN0IGV4eW5vczQyMTBfZGVmYXVsdF90bXVfZGF0YSA9IHsKQEAgLTY0LDYgKzU2LDcgQEAKIAkJLnRyaWdnZXJfdHlwZVsxXSA9IFRIUk9UVExFX0FDVElWRSwKIAkJLnRyaWdnZXJfdHlwZVsyXSA9IFNXX1RSSVAsCiAJCS5tYXhfdHJpZ2dlcl9sZXZlbCA9IDQsCisJCS5ub25faHdfdHJpZ2dlcl9sZXZlbHMgPSAzLAogCQkuZ2FpbiA9IDE1LAogCQkucmVmZXJlbmNlX3ZvbHRhZ2UgPSA3LAogCQkuY2FsX3R5cGUgPSBUWVBFX09ORV9QT0lOVF9UUklNTUlORywKQEAgLTkzLDE4ICs4NiwxNCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NPQ19FWFlOT1MzMjUwKQogc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfdG11X3JlZ2lzdGVycyBleHlub3MzMjUwX3RtdV9yZWdpc3RlcnMgPSB7CiAJLnRyaW1pbmZvX2RhdGEgPSBFWFlOT1NfVE1VX1JFR19UUklNSU5GTywKLQkudHJpbWluZm9fMjVfc2hpZnQgPSBFWFlOT1NfVFJJTUlORk9fMjVfU0hJRlQsCi0JLnRyaW1pbmZvXzg1X3NoaWZ0ID0gRVhZTk9TX1RSSU1JTkZPXzg1X1NISUZULAorCS50cmltaW5mb19jdHJsWzBdID0gRVhZTk9TX1RNVV9UUklNSU5GT19DT04xLAorCS50cmltaW5mb19jdHJsWzFdID0gRVhZTk9TX1RNVV9UUklNSU5GT19DT04yLAorCS50cmltaW5mb19jdHJsX2NvdW50ID0gMiwKIAkudG11X2N0cmwgPSBFWFlOT1NfVE1VX1JFR19DT05UUk9MLAogCS50ZXN0X211eF9hZGRyX3NoaWZ0ID0gRVhZTk9TNDQxMl9NVVhfQUREUl9TSElGVCwKLQkuYnVmX3ZyZWZfc2VsX3NoaWZ0ID0gRVhZTk9TX1RNVV9SRUZfVk9MVEFHRV9TSElGVCwKLQkuYnVmX3ZyZWZfc2VsX21hc2sgPSBFWFlOT1NfVE1VX1JFRl9WT0xUQUdFX01BU0ssCiAJLnRoZXJtX3RyaXBfbW9kZV9zaGlmdCA9IEVYWU5PU19UTVVfVFJJUF9NT0RFX1NISUZULAogCS50aGVybV90cmlwX21vZGVfbWFzayA9IEVYWU5PU19UTVVfVFJJUF9NT0RFX01BU0ssCiAJLnRoZXJtX3RyaXBfZW5fc2hpZnQgPSBFWFlOT1NfVE1VX1RIRVJNX1RSSVBfRU5fU0hJRlQsCi0JLmJ1Zl9zbG9wZV9zZWxfc2hpZnQgPSBFWFlOT1NfVE1VX0JVRl9TTE9QRV9TRUxfU0hJRlQsCi0JLmJ1Zl9zbG9wZV9zZWxfbWFzayA9IEVYWU5PU19UTVVfQlVGX1NMT1BFX1NFTF9NQVNLLAotCS5jb3JlX2VuX3NoaWZ0ID0gRVhZTk9TX1RNVV9DT1JFX0VOX1NISUZULAogCS50bXVfc3RhdHVzID0gRVhZTk9TX1RNVV9SRUdfU1RBVFVTLAogCS50bXVfY3VyX3RlbXAgPSBFWFlOT1NfVE1VX1JFR19DVVJSRU5UX1RFTVAsCiAJLnRocmVzaG9sZF90aDAgPSBFWFlOT1NfVEhEX1RFTVBfUklTRSwKQEAgLTExNiwxNCArMTA1LDkgQEAKIAkuaW50ZW5fZmFsbDBfc2hpZnQgPSBFWFlOT1NfVE1VX0lOVEVOX0ZBTEwwX1NISUZULAogCS50bXVfaW50c3RhdCA9IEVYWU5PU19UTVVfUkVHX0lOVFNUQVQsCiAJLnRtdV9pbnRjbGVhciA9IEVYWU5PU19UTVVfUkVHX0lOVENMRUFSLAotCS5pbnRjbHJfZmFsbF9zaGlmdCA9IEVYWU5PU19UTVVfQ0xFQVJfRkFMTF9JTlRfU0hJRlQsCi0JLmludGNscl9yaXNlX3NoaWZ0ID0gRVhZTk9TX1RNVV9SSVNFX0lOVF9TSElGVCwKLQkuaW50Y2xyX3Jpc2VfbWFzayA9IEVYWU5PU19UTVVfUklTRV9JTlRfTUFTSywKLQkuaW50Y2xyX2ZhbGxfbWFzayA9IEVYWU5PU19UTVVfRkFMTF9JTlRfTUFTSywKIAkuZW11bF9jb24gPSBFWFlOT1NfRU1VTF9DT04sCiAJLmVtdWxfdGVtcF9zaGlmdCA9IEVYWU5PU19FTVVMX0RBVEFfU0hJRlQsCiAJLmVtdWxfdGltZV9zaGlmdCA9IEVYWU5PU19FTVVMX1RJTUVfU0hJRlQsCi0JLmVtdWxfdGltZV9tYXNrID0gRVhZTk9TX0VNVUxfVElNRV9NQVNLLAogfTsKIAogI2RlZmluZSBFWFlOT1MzMjUwX1RNVV9EQVRBIFwKQEAgLTE0MSw2ICsxMjUsNyBAQAogCS50cmlnZ2VyX3R5cGVbMl0gPSBTV19UUklQLCBcCiAJLnRyaWdnZXJfdHlwZVszXSA9IEhXX1RSSVAsIFwKIAkubWF4X3RyaWdnZXJfbGV2ZWwgPSA0LCBcCisJLm5vbl9od190cmlnZ2VyX2xldmVscyA9IDMsIFwKIAkuZ2FpbiA9IDgsIFwKIAkucmVmZXJlbmNlX3ZvbHRhZ2UgPSAxNiwgXAogCS5ub2lzZV9jYW5jZWxfbW9kZSA9IDQsIFwKQEAgLTE2MCw4ICsxNDUsMTAgQEAKIAkJLnRlbXBfbGV2ZWwgPSA5NSwgXAogCX0sIFwKIAkuZnJlcV90YWJfY291bnQgPSAyLCBcCisJLnRyaW1pbmZvX3JlbG9hZFswXSA9IEVYWU5PU19UUklNSU5GT19SRUxPQURfRU5BQkxFLCBcCisJLnRyaW1pbmZvX3JlbG9hZFsxXSA9IEVYWU5PU19UUklNSU5GT19SRUxPQURfRU5BQkxFLCBcCiAJLnJlZ2lzdGVycyA9ICZleHlub3MzMjUwX3RtdV9yZWdpc3RlcnMsIFwKLQkuZmVhdHVyZXMgPSAoVE1VX1NVUFBPUlRfRU1VTEFUSU9OIHwgXAorCS5mZWF0dXJlcyA9IChUTVVfU1VQUE9SVF9FTVVMQVRJT04gfCBUTVVfU1VQUE9SVF9UUklNX1JFTE9BRCB8IFwKIAkJCVRNVV9TVVBQT1JUX0ZBTExJTkdfVFJJUCB8IFRNVV9TVVBQT1JUX1JFQURZX1NUQVRVUyB8IFwKIAkJCVRNVV9TVVBQT1JUX0VNVUxfVElNRSkKICNlbmRpZgpAQCAtMTgyLDIwICsxNjksMTMgQEAKICNpZiBkZWZpbmVkKENPTkZJR19TT0NfRVhZTk9TNDQxMikgfHwgZGVmaW5lZChDT05GSUdfU09DX0VYWU5PUzUyNTApCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc190bXVfcmVnaXN0ZXJzIGV4eW5vczQ0MTJfdG11X3JlZ2lzdGVycyA9IHsKIAkudHJpbWluZm9fZGF0YSA9IEVYWU5PU19UTVVfUkVHX1RSSU1JTkZPLAotCS50cmltaW5mb18yNV9zaGlmdCA9IEVYWU5PU19UUklNSU5GT18yNV9TSElGVCwKLQkudHJpbWluZm9fODVfc2hpZnQgPSBFWFlOT1NfVFJJTUlORk9fODVfU0hJRlQsCi0JLnRyaW1pbmZvX2N0cmwgPSBFWFlOT1NfVE1VX1RSSU1JTkZPX0NPTiwKLQkudHJpbWluZm9fcmVsb2FkX3NoaWZ0ID0gRVhZTk9TX1RSSU1JTkZPX1JFTE9BRF9TSElGVCwKKwkudHJpbWluZm9fY3RybFswXSA9IEVYWU5PU19UTVVfVFJJTUlORk9fQ09OMiwKKwkudHJpbWluZm9fY3RybF9jb3VudCA9IDEsCiAJLnRtdV9jdHJsID0gRVhZTk9TX1RNVV9SRUdfQ09OVFJPTCwKIAkudGVzdF9tdXhfYWRkcl9zaGlmdCA9IEVYWU5PUzQ0MTJfTVVYX0FERFJfU0hJRlQsCi0JLmJ1Zl92cmVmX3NlbF9zaGlmdCA9IEVYWU5PU19UTVVfUkVGX1ZPTFRBR0VfU0hJRlQsCi0JLmJ1Zl92cmVmX3NlbF9tYXNrID0gRVhZTk9TX1RNVV9SRUZfVk9MVEFHRV9NQVNLLAogCS50aGVybV90cmlwX21vZGVfc2hpZnQgPSBFWFlOT1NfVE1VX1RSSVBfTU9ERV9TSElGVCwKIAkudGhlcm1fdHJpcF9tb2RlX21hc2sgPSBFWFlOT1NfVE1VX1RSSVBfTU9ERV9NQVNLLAogCS50aGVybV90cmlwX2VuX3NoaWZ0ID0gRVhZTk9TX1RNVV9USEVSTV9UUklQX0VOX1NISUZULAotCS5idWZfc2xvcGVfc2VsX3NoaWZ0ID0gRVhZTk9TX1RNVV9CVUZfU0xPUEVfU0VMX1NISUZULAotCS5idWZfc2xvcGVfc2VsX21hc2sgPSBFWFlOT1NfVE1VX0JVRl9TTE9QRV9TRUxfTUFTSywKLQkuY29yZV9lbl9zaGlmdCA9IEVYWU5PU19UTVVfQ09SRV9FTl9TSElGVCwKIAkudG11X3N0YXR1cyA9IEVYWU5PU19UTVVfUkVHX1NUQVRVUywKIAkudG11X2N1cl90ZW1wID0gRVhZTk9TX1RNVV9SRUdfQ1VSUkVOVF9URU1QLAogCS50aHJlc2hvbGRfdGgwID0gRVhZTk9TX1RIRF9URU1QX1JJU0UsCkBAIC0yMDgsMTQgKzE4OCw5IEBACiAJLmludGVuX2ZhbGwwX3NoaWZ0ID0gRVhZTk9TX1RNVV9JTlRFTl9GQUxMMF9TSElGVCwKIAkudG11X2ludHN0YXQgPSBFWFlOT1NfVE1VX1JFR19JTlRTVEFULAogCS50bXVfaW50Y2xlYXIgPSBFWFlOT1NfVE1VX1JFR19JTlRDTEVBUiwKLQkuaW50Y2xyX2ZhbGxfc2hpZnQgPSBFWFlOT1NfVE1VX0NMRUFSX0ZBTExfSU5UX1NISUZULAotCS5pbnRjbHJfcmlzZV9zaGlmdCA9IEVYWU5PU19UTVVfUklTRV9JTlRfU0hJRlQsCi0JLmludGNscl9yaXNlX21hc2sgPSBFWFlOT1NfVE1VX1JJU0VfSU5UX01BU0ssCi0JLmludGNscl9mYWxsX21hc2sgPSBFWFlOT1NfVE1VX0ZBTExfSU5UX01BU0ssCiAJLmVtdWxfY29uID0gRVhZTk9TX0VNVUxfQ09OLAogCS5lbXVsX3RlbXBfc2hpZnQgPSBFWFlOT1NfRU1VTF9EQVRBX1NISUZULAogCS5lbXVsX3RpbWVfc2hpZnQgPSBFWFlOT1NfRU1VTF9USU1FX1NISUZULAotCS5lbXVsX3RpbWVfbWFzayA9IEVYWU5PU19FTVVMX1RJTUVfTUFTSywKIH07CiAKICNkZWZpbmUgRVhZTk9TNDQxMl9UTVVfREFUQSBcCkBAIC0yMzMsNiArMjA4LDcgQEAKIAkudHJpZ2dlcl90eXBlWzJdID0gU1dfVFJJUCwgXAogCS50cmlnZ2VyX3R5cGVbM10gPSBIV19UUklQLCBcCiAJLm1heF90cmlnZ2VyX2xldmVsID0gNCwgXAorCS5ub25faHdfdHJpZ2dlcl9sZXZlbHMgPSAzLCBcCiAJLmdhaW4gPSA4LCBcCiAJLnJlZmVyZW5jZV92b2x0YWdlID0gMTYsIFwKIAkubm9pc2VfY2FuY2VsX21vZGUgPSA0LCBcCkBAIC0yNTIsNiArMjI4LDcgQEAKIAkJLnRlbXBfbGV2ZWwgPSA5NSwgXAogCX0sIFwKIAkuZnJlcV90YWJfY291bnQgPSAyLCBcCisJLnRyaW1pbmZvX3JlbG9hZFswXSA9IEVYWU5PU19UUklNSU5GT19SRUxPQURfRU5BQkxFLCBcCiAJLnJlZ2lzdGVycyA9ICZleHlub3M0NDEyX3RtdV9yZWdpc3RlcnMsIFwKIAkuZmVhdHVyZXMgPSAoVE1VX1NVUFBPUlRfRU1VTEFUSU9OIHwgVE1VX1NVUFBPUlRfVFJJTV9SRUxPQUQgfCBcCiAJCQlUTVVfU1VQUE9SVF9GQUxMSU5HX1RSSVAgfCBUTVVfU1VQUE9SVF9SRUFEWV9TVEFUVVMgfCBcCkBAIC0yODYsMTggKzI2MywxMCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NPQ19FWFlOT1M1MjYwKQogc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfdG11X3JlZ2lzdGVycyBleHlub3M1MjYwX3RtdV9yZWdpc3RlcnMgPSB7CiAJLnRyaW1pbmZvX2RhdGEgPSBFWFlOT1NfVE1VX1JFR19UUklNSU5GTywKLQkudHJpbWluZm9fMjVfc2hpZnQgPSBFWFlOT1NfVFJJTUlORk9fMjVfU0hJRlQsCi0JLnRyaW1pbmZvXzg1X3NoaWZ0ID0gRVhZTk9TX1RSSU1JTkZPXzg1X1NISUZULAogCS50bXVfY3RybCA9IEVYWU5PU19UTVVfUkVHX0NPTlRST0wsCi0JLnRtdV9jdHJsID0gRVhZTk9TX1RNVV9SRUdfQ09OVFJPTDEsCi0JLmJ1Zl92cmVmX3NlbF9zaGlmdCA9IEVYWU5PU19UTVVfUkVGX1ZPTFRBR0VfU0hJRlQsCi0JLmJ1Zl92cmVmX3NlbF9tYXNrID0gRVhZTk9TX1RNVV9SRUZfVk9MVEFHRV9NQVNLLAogCS50aGVybV90cmlwX21vZGVfc2hpZnQgPSBFWFlOT1NfVE1VX1RSSVBfTU9ERV9TSElGVCwKIAkudGhlcm1fdHJpcF9tb2RlX21hc2sgPSBFWFlOT1NfVE1VX1RSSVBfTU9ERV9NQVNLLAogCS50aGVybV90cmlwX2VuX3NoaWZ0ID0gRVhZTk9TX1RNVV9USEVSTV9UUklQX0VOX1NISUZULAotCS5idWZfc2xvcGVfc2VsX3NoaWZ0ID0gRVhZTk9TX1RNVV9CVUZfU0xPUEVfU0VMX1NISUZULAotCS5idWZfc2xvcGVfc2VsX21hc2sgPSBFWFlOT1NfVE1VX0JVRl9TTE9QRV9TRUxfTUFTSywKLQkuY29yZV9lbl9zaGlmdCA9IEVYWU5PU19UTVVfQ09SRV9FTl9TSElGVCwKIAkudG11X3N0YXR1cyA9IEVYWU5PU19UTVVfUkVHX1NUQVRVUywKIAkudG11X2N1cl90ZW1wID0gRVhZTk9TX1RNVV9SRUdfQ1VSUkVOVF9URU1QLAogCS50aHJlc2hvbGRfdGgwID0gRVhZTk9TX1RIRF9URU1QX1JJU0UsCkBAIC0zMTAsMTQgKzI3OSw5IEBACiAJLmludGVuX2ZhbGwwX3NoaWZ0ID0gRVhZTk9TX1RNVV9JTlRFTl9GQUxMMF9TSElGVCwKIAkudG11X2ludHN0YXQgPSBFWFlOT1M1MjYwX1RNVV9SRUdfSU5UU1RBVCwKIAkudG11X2ludGNsZWFyID0gRVhZTk9TNTI2MF9UTVVfUkVHX0lOVENMRUFSLAotCS5pbnRjbHJfZmFsbF9zaGlmdCA9IEVYWU5PUzU0MjBfVE1VX0NMRUFSX0ZBTExfSU5UX1NISUZULAotCS5pbnRjbHJfcmlzZV9zaGlmdCA9IEVYWU5PU19UTVVfUklTRV9JTlRfU0hJRlQsCi0JLmludGNscl9yaXNlX21hc2sgPSBFWFlOT1M1MjYwX1RNVV9SSVNFX0lOVF9NQVNLLAotCS5pbnRjbHJfZmFsbF9tYXNrID0gRVhZTk9TNTI2MF9UTVVfRkFMTF9JTlRfTUFTSywKIAkuZW11bF9jb24gPSBFWFlOT1M1MjYwX0VNVUxfQ09OLAogCS5lbXVsX3RlbXBfc2hpZnQgPSBFWFlOT1NfRU1VTF9EQVRBX1NISUZULAogCS5lbXVsX3RpbWVfc2hpZnQgPSBFWFlOT1NfRU1VTF9USU1FX1NISUZULAotCS5lbXVsX3RpbWVfbWFzayA9IEVYWU5PU19FTVVMX1RJTUVfTUFTSywKIH07CiAKICNkZWZpbmUgX19FWFlOT1M1MjYwX1RNVV9EQVRBCVwKQEAgLTMzNSw2ICsyOTksNyBAQAogCS50cmlnZ2VyX3R5cGVbMl0gPSBTV19UUklQLCBcCiAJLnRyaWdnZXJfdHlwZVszXSA9IEhXX1RSSVAsIFwKIAkubWF4X3RyaWdnZXJfbGV2ZWwgPSA0LCBcCisJLm5vbl9od190cmlnZ2VyX2xldmVscyA9IDMsIFwKIAkuZ2FpbiA9IDgsIFwKIAkucmVmZXJlbmNlX3ZvbHRhZ2UgPSAxNiwgXAogCS5ub2lzZV9jYW5jZWxfbW9kZSA9IDQsIFwKQEAgLTM1OSw5ICszMjQsOCBAQAogI2RlZmluZSBFWFlOT1M1MjYwX1RNVV9EQVRBIFwKIAlfX0VYWU5PUzUyNjBfVE1VX0RBVEEgXAogCS50eXBlID0gU09DX0FSQ0hfRVhZTk9TNTI2MCwgXAotCS5mZWF0dXJlcyA9IChUTVVfU1VQUE9SVF9FTVVMQVRJT04gfCBUTVVfU1VQUE9SVF9UUklNX1JFTE9BRCB8IFwKLQkJCVRNVV9TVVBQT1JUX0ZBTExJTkdfVFJJUCB8IFRNVV9TVVBQT1JUX1JFQURZX1NUQVRVUyB8IFwKLQkJCVRNVV9TVVBQT1JUX0VNVUxfVElNRSkKKwkuZmVhdHVyZXMgPSAoVE1VX1NVUFBPUlRfRU1VTEFUSU9OIHwgVE1VX1NVUFBPUlRfRkFMTElOR19UUklQIHwgXAorCQkJVE1VX1NVUFBPUlRfUkVBRFlfU1RBVFVTIHwgVE1VX1NVUFBPUlRfRU1VTF9USU1FKQogCiBzdHJ1Y3QgZXh5bm9zX3RtdV9pbml0X2RhdGEgY29uc3QgZXh5bm9zNTI2MF9kZWZhdWx0X3RtdV9kYXRhID0gewogCS50bXVfZGF0YSA9IHsKQEAgLTM3OCwxNyArMzQyLDEwIEBACiAjaWYgZGVmaW5lZChDT05GSUdfU09DX0VYWU5PUzU0MjApCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc190bXVfcmVnaXN0ZXJzIGV4eW5vczU0MjBfdG11X3JlZ2lzdGVycyA9IHsKIAkudHJpbWluZm9fZGF0YSA9IEVYWU5PU19UTVVfUkVHX1RSSU1JTkZPLAotCS50cmltaW5mb18yNV9zaGlmdCA9IEVYWU5PU19UUklNSU5GT18yNV9TSElGVCwKLQkudHJpbWluZm9fODVfc2hpZnQgPSBFWFlOT1NfVFJJTUlORk9fODVfU0hJRlQsCiAJLnRtdV9jdHJsID0gRVhZTk9TX1RNVV9SRUdfQ09OVFJPTCwKLQkuYnVmX3ZyZWZfc2VsX3NoaWZ0ID0gRVhZTk9TX1RNVV9SRUZfVk9MVEFHRV9TSElGVCwKLQkuYnVmX3ZyZWZfc2VsX21hc2sgPSBFWFlOT1NfVE1VX1JFRl9WT0xUQUdFX01BU0ssCiAJLnRoZXJtX3RyaXBfbW9kZV9zaGlmdCA9IEVYWU5PU19UTVVfVFJJUF9NT0RFX1NISUZULAogCS50aGVybV90cmlwX21vZGVfbWFzayA9IEVYWU5PU19UTVVfVFJJUF9NT0RFX01BU0ssCiAJLnRoZXJtX3RyaXBfZW5fc2hpZnQgPSBFWFlOT1NfVE1VX1RIRVJNX1RSSVBfRU5fU0hJRlQsCi0JLmJ1Zl9zbG9wZV9zZWxfc2hpZnQgPSBFWFlOT1NfVE1VX0JVRl9TTE9QRV9TRUxfU0hJRlQsCi0JLmJ1Zl9zbG9wZV9zZWxfbWFzayA9IEVYWU5PU19UTVVfQlVGX1NMT1BFX1NFTF9NQVNLLAotCS5jb3JlX2VuX3NoaWZ0ID0gRVhZTk9TX1RNVV9DT1JFX0VOX1NISUZULAogCS50bXVfc3RhdHVzID0gRVhZTk9TX1RNVV9SRUdfU1RBVFVTLAogCS50bXVfY3VyX3RlbXAgPSBFWFlOT1NfVE1VX1JFR19DVVJSRU5UX1RFTVAsCiAJLnRocmVzaG9sZF90aDAgPSBFWFlOT1NfVEhEX1RFTVBfUklTRSwKQEAgLTQwMiwxNCArMzU5LDkgQEAKIAkuaW50ZW5fZmFsbDBfc2hpZnQgPSBFWFlOT1NfVE1VX0lOVEVOX0ZBTEwwX1NISUZULAogCS50bXVfaW50c3RhdCA9IEVYWU5PU19UTVVfUkVHX0lOVFNUQVQsCiAJLnRtdV9pbnRjbGVhciA9IEVYWU5PU19UTVVfUkVHX0lOVENMRUFSLAotCS5pbnRjbHJfZmFsbF9zaGlmdCA9IEVYWU5PUzU0MjBfVE1VX0NMRUFSX0ZBTExfSU5UX1NISUZULAotCS5pbnRjbHJfcmlzZV9zaGlmdCA9IEVYWU5PU19UTVVfUklTRV9JTlRfU0hJRlQsCi0JLmludGNscl9yaXNlX21hc2sgPSBFWFlOT1NfVE1VX1JJU0VfSU5UX01BU0ssCi0JLmludGNscl9mYWxsX21hc2sgPSBFWFlOT1NfVE1VX0ZBTExfSU5UX01BU0ssCiAJLmVtdWxfY29uID0gRVhZTk9TX0VNVUxfQ09OLAogCS5lbXVsX3RlbXBfc2hpZnQgPSBFWFlOT1NfRU1VTF9EQVRBX1NISUZULAogCS5lbXVsX3RpbWVfc2hpZnQgPSBFWFlOT1NfRU1VTF9USU1FX1NISUZULAotCS5lbXVsX3RpbWVfbWFzayA9IEVYWU5PU19FTVVMX1RJTUVfTUFTSywKIH07CiAKICNkZWZpbmUgX19FWFlOT1M1NDIwX1RNVV9EQVRBCVwKQEAgLTQyNyw2ICszNzksNyBAQAogCS50cmlnZ2VyX3R5cGVbMl0gPSBTV19UUklQLCBcCiAJLnRyaWdnZXJfdHlwZVszXSA9IEhXX1RSSVAsIFwKIAkubWF4X3RyaWdnZXJfbGV2ZWwgPSA0LCBcCisJLm5vbl9od190cmlnZ2VyX2xldmVscyA9IDMsIFwKIAkuZ2FpbiA9IDgsIFwKIAkucmVmZXJlbmNlX3ZvbHRhZ2UgPSAxNiwgXAogCS5ub2lzZV9jYW5jZWxfbW9kZSA9IDQsIFwKQEAgLTQ1MSwxNiArNDA0LDE1IEBACiAjZGVmaW5lIEVYWU5PUzU0MjBfVE1VX0RBVEEgXAogCV9fRVhZTk9TNTQyMF9UTVVfREFUQSBcCiAJLnR5cGUgPSBTT0NfQVJDSF9FWFlOT1M1MjUwLCBcCi0JLmZlYXR1cmVzID0gKFRNVV9TVVBQT1JUX0VNVUxBVElPTiB8IFRNVV9TVVBQT1JUX1RSSU1fUkVMT0FEIHwgXAotCQkJVE1VX1NVUFBPUlRfRkFMTElOR19UUklQIHwgVE1VX1NVUFBPUlRfUkVBRFlfU1RBVFVTIHwgXAotCQkJVE1VX1NVUFBPUlRfRU1VTF9USU1FKQorCS5mZWF0dXJlcyA9IChUTVVfU1VQUE9SVF9FTVVMQVRJT04gfCBUTVVfU1VQUE9SVF9GQUxMSU5HX1RSSVAgfCBcCisJCQlUTVVfU1VQUE9SVF9SRUFEWV9TVEFUVVMgfCBUTVVfU1VQUE9SVF9FTVVMX1RJTUUpCiAKICNkZWZpbmUgRVhZTk9TNTQyMF9UTVVfREFUQV9TSEFSRUQgXAogCV9fRVhZTk9TNTQyMF9UTVVfREFUQSBcCiAJLnR5cGUgPSBTT0NfQVJDSF9FWFlOT1M1NDIwX1RSSU1JTkZPLCBcCi0JLmZlYXR1cmVzID0gKFRNVV9TVVBQT1JUX0VNVUxBVElPTiB8IFRNVV9TVVBQT1JUX1RSSU1fUkVMT0FEIHwgXAotCQkJVE1VX1NVUFBPUlRfRkFMTElOR19UUklQIHwgVE1VX1NVUFBPUlRfUkVBRFlfU1RBVFVTIHwgXAotCQkJVE1VX1NVUFBPUlRfRU1VTF9USU1FIHwgVE1VX1NVUFBPUlRfQUREUkVTU19NVUxUSVBMRSkKKwkuZmVhdHVyZXMgPSAoVE1VX1NVUFBPUlRfRU1VTEFUSU9OIHwgVE1VX1NVUFBPUlRfRkFMTElOR19UUklQIHwgXAorCQkJVE1VX1NVUFBPUlRfUkVBRFlfU1RBVFVTIHwgVE1VX1NVUFBPUlRfRU1VTF9USU1FIHwgXAorCQkJVE1VX1NVUFBPUlRfQUREUkVTU19NVUxUSVBMRSkKIAogc3RydWN0IGV4eW5vc190bXVfaW5pdF9kYXRhIGNvbnN0IGV4eW5vczU0MjBfZGVmYXVsdF90bXVfZGF0YSA9IHsKIAkudG11X2RhdGEgPSB7CkBAIC00NzcsMTkgKzQyOSwxMCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NPQ19FWFlOT1M1NDQwKQogc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfdG11X3JlZ2lzdGVycyBleHlub3M1NDQwX3RtdV9yZWdpc3RlcnMgPSB7CiAJLnRyaW1pbmZvX2RhdGEgPSBFWFlOT1M1NDQwX1RNVV9TMF83X1RSSU0sCi0JLnRyaW1pbmZvXzI1X3NoaWZ0ID0gRVhZTk9TX1RSSU1JTkZPXzI1X1NISUZULAotCS50cmltaW5mb184NV9zaGlmdCA9IEVYWU5PU19UUklNSU5GT184NV9TSElGVCwKIAkudG11X2N0cmwgPSBFWFlOT1M1NDQwX1RNVV9TMF83X0NUUkwsCi0JLmJ1Zl92cmVmX3NlbF9zaGlmdCA9IEVYWU5PU19UTVVfUkVGX1ZPTFRBR0VfU0hJRlQsCi0JLmJ1Zl92cmVmX3NlbF9tYXNrID0gRVhZTk9TX1RNVV9SRUZfVk9MVEFHRV9NQVNLLAogCS50aGVybV90cmlwX21vZGVfc2hpZnQgPSBFWFlOT1NfVE1VX1RSSVBfTU9ERV9TSElGVCwKIAkudGhlcm1fdHJpcF9tb2RlX21hc2sgPSBFWFlOT1NfVE1VX1RSSVBfTU9ERV9NQVNLLAogCS50aGVybV90cmlwX2VuX3NoaWZ0ID0gRVhZTk9TX1RNVV9USEVSTV9UUklQX0VOX1NISUZULAotCS5idWZfc2xvcGVfc2VsX3NoaWZ0ID0gRVhZTk9TX1RNVV9CVUZfU0xPUEVfU0VMX1NISUZULAotCS5idWZfc2xvcGVfc2VsX21hc2sgPSBFWFlOT1NfVE1VX0JVRl9TTE9QRV9TRUxfTUFTSywKLQkuY2FsaWJfbW9kZV9zaGlmdCA9IEVYWU5PU19UTVVfQ0FMSUJfTU9ERV9TSElGVCwKLQkuY2FsaWJfbW9kZV9tYXNrID0gRVhZTk9TX1RNVV9DQUxJQl9NT0RFX01BU0ssCi0JLmNvcmVfZW5fc2hpZnQgPSBFWFlOT1NfVE1VX0NPUkVfRU5fU0hJRlQsCiAJLnRtdV9zdGF0dXMgPSBFWFlOT1M1NDQwX1RNVV9TMF83X1NUQVRVUywKIAkudG11X2N1cl90ZW1wID0gRVhZTk9TNTQ0MF9UTVVfUzBfN19URU1QLAogCS50aHJlc2hvbGRfdGgwID0gRVhZTk9TNTQ0MF9UTVVfUzBfN19USDAsCkBAIC01MDQsMTAgKzQ0Nyw2IEBACiAJLmludGVuX2ZhbGwwX3NoaWZ0ID0gRVhZTk9TNTQ0MF9UTVVfSU5URU5fRkFMTDBfU0hJRlQsCiAJLnRtdV9pbnRzdGF0ID0gRVhZTk9TNTQ0MF9UTVVfUzBfN19JUlEsCiAJLnRtdV9pbnRjbGVhciA9IEVYWU5PUzU0NDBfVE1VX1MwXzdfSVJRLAotCS5pbnRjbHJfZmFsbF9zaGlmdCA9IEVYWU5PUzU0NDBfVE1VX0NMRUFSX0ZBTExfSU5UX1NISUZULAotCS5pbnRjbHJfcmlzZV9zaGlmdCA9IEVYWU5PUzU0NDBfVE1VX1JJU0VfSU5UX1NISUZULAotCS5pbnRjbHJfcmlzZV9tYXNrID0gRVhZTk9TNTQ0MF9UTVVfUklTRV9JTlRfTUFTSywKLQkuaW50Y2xyX2ZhbGxfbWFzayA9IEVYWU5PUzU0NDBfVE1VX0ZBTExfSU5UX01BU0ssCiAJLnRtdV9pcnFzdGF0dXMgPSBFWFlOT1M1NDQwX1RNVV9JUlFfU1RBVFVTLAogCS5lbXVsX2NvbiA9IEVYWU5PUzU0NDBfVE1VX1MwXzdfREVCVUcsCiAJLmVtdWxfdGVtcF9zaGlmdCA9IEVYWU5PU19FTVVMX0RBVEFfU0hJRlQsCkBAIC01MjEsMTEgKzQ2MCwxMSBAQAogCS50cmlnZ2VyX3R5cGVbMF0gPSBTV19UUklQLCBcCiAJLnRyaWdnZXJfdHlwZVs0XSA9IEhXX1RSSVAsIFwKIAkubWF4X3RyaWdnZXJfbGV2ZWwgPSA1LCBcCisJLm5vbl9od190cmlnZ2VyX2xldmVscyA9IDEsIFwKIAkuZ2FpbiA9IDUsIFwKIAkucmVmZXJlbmNlX3ZvbHRhZ2UgPSAxNiwgXAogCS5ub2lzZV9jYW5jZWxfbW9kZSA9IDQsIFwKIAkuY2FsX3R5cGUgPSBUWVBFX09ORV9QT0lOVF9UUklNTUlORywgXAotCS5jYWxfbW9kZSA9IDAsIFwKIAkuZWZ1c2VfdmFsdWUgPSAweDViMmQsIFwKIAkubWluX2VmdXNlX3ZhbHVlID0gMTYsIFwKIAkubWF4X2VmdXNlX3ZhbHVlID0gNzYsIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXVfZGF0YS5oIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdV9kYXRhLmgKaW5kZXggZjA5NzllNS4uNjNkZTU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdV9kYXRhLmgKKysrIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdV9kYXRhLmgKQEAgLTM5LDU1ICszOSwzMSBAQAogI2RlZmluZSBFWFlOT1NfVE1VX0JVRl9TTE9QRV9TRUxfU0hJRlQJOAogI2RlZmluZSBFWFlOT1NfVE1VX0NPUkVfRU5fU0hJRlQJMAogCisvKiBFeHlub3MzMjUwIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBFWFlOT1NfVE1VX1RSSU1JTkZPX0NPTjEJMHgxMAorCiAvKiBFeHlub3M0MjEwIHNwZWNpZmljIHJlZ2lzdGVycyAqLwogI2RlZmluZSBFWFlOT1M0MjEwX1RNVV9SRUdfVEhSRVNIT0xEX1RFTVAJMHg0NAogI2RlZmluZSBFWFlOT1M0MjEwX1RNVV9SRUdfVFJJR19MRVZFTDAJMHg1MAotI2RlZmluZSBFWFlOT1M0MjEwX1RNVV9SRUdfVFJJR19MRVZFTDEJMHg1NAotI2RlZmluZSBFWFlOT1M0MjEwX1RNVV9SRUdfVFJJR19MRVZFTDIJMHg1OAotI2RlZmluZSBFWFlOT1M0MjEwX1RNVV9SRUdfVFJJR19MRVZFTDMJMHg1QwotI2RlZmluZSBFWFlOT1M0MjEwX1RNVV9SRUdfUEFTVF9URU1QMAkweDYwCi0jZGVmaW5lIEVYWU5PUzQyMTBfVE1VX1JFR19QQVNUX1RFTVAxCTB4NjQKLSNkZWZpbmUgRVhZTk9TNDIxMF9UTVVfUkVHX1BBU1RfVEVNUDIJMHg2OAotI2RlZmluZSBFWFlOT1M0MjEwX1RNVV9SRUdfUEFTVF9URU1QMwkweDZDCiAKLSNkZWZpbmUgRVhZTk9TNDIxMF9UTVVfVFJJR19MRVZFTDBfTUFTSwkweDEKLSNkZWZpbmUgRVhZTk9TNDIxMF9UTVVfVFJJR19MRVZFTDFfTUFTSwkweDEwCi0jZGVmaW5lIEVYWU5PUzQyMTBfVE1VX1RSSUdfTEVWRUwyX01BU0sJMHgxMDAKLSNkZWZpbmUgRVhZTk9TNDIxMF9UTVVfVFJJR19MRVZFTDNfTUFTSwkweDEwMDAKLSNkZWZpbmUgRVhZTk9TNDIxMF9UTVVfVFJJR19MRVZFTF9NQVNLCTB4MTExMQotI2RlZmluZSBFWFlOT1M0MjEwX1RNVV9JTlRDTEVBUl9WQUwJMHgxMTExCi0KLS8qIEV4eW5vczUyNTAgYW5kIEV4eW5vczQ0MTIgc3BlY2lmaWMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEVYWU5PU19UTVVfVFJJTUlORk9fQ09OCTB4MTQKKy8qIEV4eW5vczUyNTAsIEV4eW5vczQ0MTIsIEV4eW5vczMyNTAgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIEVYWU5PU19UTVVfVFJJTUlORk9fQ09OMgkweDE0CiAjZGVmaW5lIEVYWU5PU19USERfVEVNUF9SSVNFCQkweDUwCiAjZGVmaW5lIEVYWU5PU19USERfVEVNUF9GQUxMCQkweDU0CiAjZGVmaW5lIEVYWU5PU19FTVVMX0NPTgkJMHg4MAogCi0jZGVmaW5lIEVYWU5PU19UUklNSU5GT19SRUxPQURfU0hJRlQJMQorI2RlZmluZSBFWFlOT1NfVFJJTUlORk9fUkVMT0FEX0VOQUJMRQkxCiAjZGVmaW5lIEVYWU5PU19UUklNSU5GT18yNV9TSElGVAkwCiAjZGVmaW5lIEVYWU5PU19UUklNSU5GT184NV9TSElGVAk4Ci0jZGVmaW5lIEVYWU5PU19UTVVfUklTRV9JTlRfTUFTSwkweDExMQotI2RlZmluZSBFWFlOT1NfVE1VX1JJU0VfSU5UX1NISUZUCTAKLSNkZWZpbmUgRVhZTk9TX1RNVV9GQUxMX0lOVF9NQVNLCTB4MTExCi0jZGVmaW5lIEVYWU5PU19UTVVfQ0xFQVJfUklTRV9JTlQJMHgxMTEKLSNkZWZpbmUgRVhZTk9TX1RNVV9DTEVBUl9GQUxMX0lOVAkoMHgxMTEgPDwgMTIpCi0jZGVmaW5lIEVYWU5PU19UTVVfQ0xFQVJfRkFMTF9JTlRfU0hJRlQJMTIKLSNkZWZpbmUgRVhZTk9TNTQyMF9UTVVfQ0xFQVJfRkFMTF9JTlRfU0hJRlQJMTYKLSNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfQ0xFQVJfRkFMTF9JTlRfU0hJRlQJNAogI2RlZmluZSBFWFlOT1NfVE1VX1RSSVBfTU9ERV9TSElGVAkxMwogI2RlZmluZSBFWFlOT1NfVE1VX1RSSVBfTU9ERV9NQVNLCTB4NwogI2RlZmluZSBFWFlOT1NfVE1VX1RIRVJNX1RSSVBfRU5fU0hJRlQJMTIKLSNkZWZpbmUgRVhZTk9TX1RNVV9DQUxJQl9NT0RFX1NISUZUCTQKLSNkZWZpbmUgRVhZTk9TX1RNVV9DQUxJQl9NT0RFX01BU0sJMHgzCiAKICNkZWZpbmUgRVhZTk9TX1RNVV9JTlRFTl9SSVNFMF9TSElGVAkwCiAjZGVmaW5lIEVYWU5PU19UTVVfSU5URU5fUklTRTFfU0hJRlQJNAogI2RlZmluZSBFWFlOT1NfVE1VX0lOVEVOX1JJU0UyX1NISUZUCTgKICNkZWZpbmUgRVhZTk9TX1RNVV9JTlRFTl9SSVNFM19TSElGVAkxMgogI2RlZmluZSBFWFlOT1NfVE1VX0lOVEVOX0ZBTEwwX1NISUZUCTE2Ci0jZGVmaW5lIEVYWU5PU19UTVVfSU5URU5fRkFMTDFfU0hJRlQJMjAKLSNkZWZpbmUgRVhZTk9TX1RNVV9JTlRFTl9GQUxMMl9TSElGVAkyNAotI2RlZmluZSBFWFlOT1NfVE1VX0lOVEVOX0ZBTEwzX1NISUZUCTI4CiAKICNkZWZpbmUgRVhZTk9TX0VNVUxfVElNRQkweDU3RjAKICNkZWZpbmUgRVhZTk9TX0VNVUxfVElNRV9NQVNLCTB4ZmZmZgpAQCAtOTksMTQgKzc1LDkgQEAKICNkZWZpbmUgRVhZTk9TX01BWF9UUklHR0VSX1BFUl9SRUcJNAogCiAvKiBFeHlub3M1MjYwIHNwZWNpZmljICovCi0jZGVmaW5lIEVYWU5PU19UTVVfUkVHX0NPTlRST0wxCQkJMHgyNAogI2RlZmluZSBFWFlOT1M1MjYwX1RNVV9SRUdfSU5URU4JCTB4QzAKICNkZWZpbmUgRVhZTk9TNTI2MF9UTVVfUkVHX0lOVFNUQVQJCTB4QzQKICNkZWZpbmUgRVhZTk9TNTI2MF9UTVVfUkVHX0lOVENMRUFSCQkweEM4Ci0jZGVmaW5lIEVYWU5PUzUyNjBfVE1VX0NMRUFSX1JJU0VfSU5UCQkweDExMTEKLSNkZWZpbmUgRVhZTk9TNTI2MF9UTVVfQ0xFQVJfRkFMTF9JTlQJCSgweDExMTEgPDwgMTYpCi0jZGVmaW5lIEVYWU5PUzUyNjBfVE1VX1JJU0VfSU5UX01BU0sJCTB4MTExMQotI2RlZmluZSBFWFlOT1M1MjYwX1RNVV9GQUxMX0lOVF9NQVNLCQkweDExMTEKICNkZWZpbmUgRVhZTk9TNTI2MF9FTVVMX0NPTgkJCTB4MTAwCiAKIC8qIEV4eW5vczQ0MTIgc3BlY2lmaWMgKi8KQEAgLTEyMiwyOSArOTMsMTcgQEAKICNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfUzBfN19USDAJCQkweDExMAogI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9TMF83X1RIMQkJCTB4MTMwCiAjZGVmaW5lIEVYWU5PUzU0NDBfVE1VX1MwXzdfVEgyCQkJMHgxNTAKLSNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfUzBfN19FVlRFTgkJMHgxRjAKICNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfUzBfN19JUlFFTgkJMHgyMTAKICNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfUzBfN19JUlEJCQkweDIzMAogLyogZXh5bm9zNTQ0MCBjb21tb24gcmVnaXN0ZXJzICovCiAjZGVmaW5lIEVYWU5PUzU0NDBfVE1VX0lSUV9TVEFUVVMJCTB4MDAwCiAjZGVmaW5lIEVYWU5PUzU0NDBfVE1VX1BNSU4JCQkweDAwNAotI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9URU1QCQkJMHgwMDgKIAotI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9SSVNFX0lOVF9NQVNLCQkweGYKLSNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfUklTRV9JTlRfU0hJRlQJCTAKLSNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfRkFMTF9JTlRfTUFTSwkJMHhmCiAjZGVmaW5lIEVYWU5PUzU0NDBfVE1VX0lOVEVOX1JJU0UwX1NISUZUCTAKICNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfSU5URU5fUklTRTFfU0hJRlQJMQogI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9JTlRFTl9SSVNFMl9TSElGVAkyCiAjZGVmaW5lIEVYWU5PUzU0NDBfVE1VX0lOVEVOX1JJU0UzX1NISUZUCTMKICNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfSU5URU5fRkFMTDBfU0hJRlQJNAotI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9JTlRFTl9GQUxMMV9TSElGVAk1Ci0jZGVmaW5lIEVYWU5PUzU0NDBfVE1VX0lOVEVOX0ZBTEwyX1NISUZUCTYKLSNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfSU5URU5fRkFMTDNfU0hJRlQJNwotI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9USF9SSVNFMF9TSElGVAkJMAotI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9USF9SSVNFMV9TSElGVAkJOAotI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9USF9SSVNFMl9TSElGVAkJMTYKLSNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfVEhfUklTRTNfU0hJRlQJCTI0CiAjZGVmaW5lIEVYWU5PUzU0NDBfVE1VX1RIX1JJU0U0X1NISUZUCQkyNAogI2RlZmluZSBFWFlOT1M1NDQwX0VGVVNFX1NXQVBfT0ZGU0VUCQk4CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9zdC9zdF90aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvc3Qvc3RfdGhlcm1hbC5jCmluZGV4IDkwMTYzYjMuLmQxZWM1ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9zdC9zdF90aGVybWFsLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3N0L3N0X3RoZXJtYWwuYwpAQCAtMjc1LDYgKzI3NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdF90aGVybWFsX3VucmVnaXN0ZXIpOwogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IHN0X3RoZXJtYWxfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwpAQCAtMzA1LDYgKzMwNiw4IEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgorCiBTSU1QTEVfREVWX1BNX09QUyhzdF90aGVybWFsX3BtX29wcywgc3RfdGhlcm1hbF9zdXNwZW5kLCBzdF90aGVybWFsX3Jlc3VtZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChzdF90aGVybWFsX3BtX29wcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuYyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuYwppbmRleCA5YmYxMGFhLi40M2I5MDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9jb3JlLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfY29yZS5jCkBAIC0xNTc1LDggKzE1NzUsNyBAQAogCiAJdGhlcm1hbF96b25lX2RldmljZV91cGRhdGUodHopOwogCi0JaWYgKCFyZXN1bHQpCi0JCXJldHVybiB0ejsKKwlyZXR1cm4gdHo7CiAKIHVucmVnaXN0ZXI6CiAJcmVsZWFzZV9pZHIoJnRoZXJtYWxfdHpfaWRyLCAmdGhlcm1hbF9pZHJfbG9jaywgdHotPmlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fdHR5LmMgYi9kcml2ZXJzL3R0eS9uX3R0eS5jCmluZGV4IDg5YzRjZWUuLjI2ZjA5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fdHR5LmMKKysrIGIvZHJpdmVycy90dHkvbl90dHkuYwpAQCAtMjEyMyw3ICsyMTIzLDcgQEAKIHsKIAlzdHJ1Y3Qgbl90dHlfZGF0YSAqbGRhdGEgPSB0dHktPmRpc2NfZGF0YTsKIAl1bnNpZ25lZCBjaGFyIF9fdXNlciAqYiA9IGJ1ZjsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCWludCBjOwogCWludCBtaW5pbXVtLCB0aW1lOwogCXNzaXplX3QgcmV0dmFsID0gMDsKQEAgLTIxODYsMTAgKzIxODYsNiBAQAogCQkJbnItLTsKIAkJCWJyZWFrOwogCQl9Ci0JCS8qIFRoaXMgc3RhdGVtZW50IG11c3QgYmUgZmlyc3QgYmVmb3JlIGNoZWNraW5nIGZvciBpbnB1dAotCQkgICBzbyB0aGF0IGFueSBpbnRlcnJ1cHQgd2lsbCBzZXQgdGhlIHN0YXRlIGJhY2sgdG8KLQkJICAgVEFTS19SVU5OSU5HLiAqLwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCWlmICgoKG1pbmltdW0gLSAoYiAtIGJ1ZikpIDwgbGRhdGEtPm1pbmltdW1fdG9fd2FrZSkgJiYKIAkJICAgICgobWluaW11bSAtIChiIC0gYnVmKSkgPj0gMSkpCkBAIC0yMjIwLDEzICsyMjE2LDEzIEBACiAJCQkJbl90dHlfc2V0X3Jvb20odHR5KTsKIAkJCQl1cF9yZWFkKCZ0dHktPnRlcm1pb3NfcndzZW0pOwogCi0JCQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCQkJdGltZW91dCA9IHdhaXRfd29rZW4oJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSwKKwkJCQkJCSAgICAgdGltZW91dCk7CiAKIAkJCQlkb3duX3JlYWQoJnR0eS0+dGVybWlvc19yd3NlbSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJCS8qIERlYWwgd2l0aCBwYWNrZXQgbW9kZS4gKi8KIAkJaWYgKHBhY2tldCAmJiBiID09IGJ1ZikgewpAQCAtMjI3Myw3ICsyMjY5LDYgQEAKIAogCW11dGV4X3VubG9jaygmbGRhdGEtPmF0b21pY19yZWFkX2xvY2spOwogCi0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCWlmIChiIC0gYnVmKQogCQlyZXR2YWwgPSBiIC0gYnVmOwogCkBAIC0yMzA2LDcgKzIzMDEsNyBAQAogCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbnIpCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqYiA9IGJ1ZjsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCWludCBjOwogCXNzaXplX3QgcmV0dmFsID0gMDsKIApAQCAtMjMyNCw3ICsyMzE5LDYgQEAKIAogCWFkZF93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKIAl3aGlsZSAoMSkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwpAQCAtMjM3OCwxMiArMjM3MiwxMSBAQAogCQl9CiAJCXVwX3JlYWQoJnR0eS0+dGVybWlvc19yd3NlbSk7CiAKLQkJc2NoZWR1bGUoKTsKKwkJd2FpdF93b2tlbigmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAKIAkJZG93bl9yZWFkKCZ0dHktPnRlcm1pb3NfcndzZW0pOwogCX0KIGJyZWFrX291dDoKLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOwogCWlmIChiIC0gYnVmICE9IG5yICYmIHR0eS0+ZmFzeW5jKQogCQlzZXRfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKTsKQEAgLTI0MTMsMTIgKzI0MDYsMTcgQEAKIAogCXBvbGxfd2FpdChmaWxlLCAmdHR5LT5yZWFkX3dhaXQsIHdhaXQpOwogCXBvbGxfd2FpdChmaWxlLCAmdHR5LT53cml0ZV93YWl0LCB3YWl0KTsKLQlpZiAoaW5wdXRfYXZhaWxhYmxlX3AodHR5LCAxKSkKLQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCWlmICh0dHktPnBhY2tldCAmJiB0dHktPmxpbmstPmN0cmxfc3RhdHVzKQotCQltYXNrIHw9IFBPTExQUkkgfCBQT0xMSU4gfCBQT0xMUkROT1JNOwogCWlmICh0ZXN0X2JpdChUVFlfT1RIRVJfQ0xPU0VELCAmdHR5LT5mbGFncykpCiAJCW1hc2sgfD0gUE9MTEhVUDsKKwlpZiAoaW5wdXRfYXZhaWxhYmxlX3AodHR5LCAxKSkKKwkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCWVsc2UgaWYgKG1hc2sgJiBQT0xMSFVQKSB7CisJCXR0eV9mbHVzaF90b19sZGlzYyh0dHkpOworCQlpZiAoaW5wdXRfYXZhaWxhYmxlX3AodHR5LCAxKSkKKwkJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisJaWYgKHR0eS0+cGFja2V0ICYmIHR0eS0+bGluay0+Y3RybF9zdGF0dXMpCisJCW1hc2sgfD0gUE9MTFBSSSB8IFBPTExJTiB8IFBPTExSRE5PUk07CiAJaWYgKHR0eV9odW5nX3VwX3AoZmlsZSkpCiAJCW1hc2sgfD0gUE9MTEhVUDsKIAlpZiAoIShtYXNrICYgKFBPTExIVVAgfCBQT0xMSU4gfCBQT0xMUkROT1JNKSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfbXRrLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX210ay5jCmluZGV4IDhmMzdkNTcuLmRlN2FhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfbXRrLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9tdGsuYwpAQCAtODEsNyArODEsNyBAQAogCQkvKiBTZXQgdG8gaGlnaGVzdCBiYXVkcmF0ZSBzdXBwb3J0ZWQgKi8KIAkJaWYgKGJhdWQgPj0gMTE1MjAwMCkKIAkJCWJhdWQgPSA5MjE2MDA7Ci0JCXF1b3QgPSBESVZfUk9VTkRfQ0xPU0VTVChwb3J0LT51YXJ0Y2xrLCAyNTYgKiBiYXVkKTsKKwkJcXVvdCA9IChwb3J0LT51YXJ0Y2xrIC8gKDI1NiAqIGJhdWQpKSArIDE7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKaW5kZXggNjQ5Yjc4NC4uOThmOGJjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKQEAgLTI0OSwxNCArMjQ5LDE0IEBACiAKIGNvbmZpZyBTRVJJQUxfU0FNU1VOR19VQVJUU180CiAJYm9vbAotCWRlcGVuZHMgb24gUExBVF9TQU1TVU5HCisJZGVwZW5kcyBvbiBTRVJJQUxfU0FNU1VORwogCWRlZmF1bHQgeSBpZiAhKENQVV9TM0MyNDEwIHx8IENQVV9TM0MyNDEyIHx8IENQVV9TM0MyNDQwIHx8IENQVV9TM0MyNDQyKQogCWhlbHAKIAkgIEludGVybmFsIG5vZGUgZm9yIHRoZSBjb21tb24gY2FzZSBvZiA0IFNhbXN1bmcgY29tcGF0aWJsZSBVQVJUcwogCiBjb25maWcgU0VSSUFMX1NBTVNVTkdfVUFSVFMKIAlpbnQKLQlkZXBlbmRzIG9uIFBMQVRfU0FNU1VORworCWRlcGVuZHMgb24gU0VSSUFMX1NBTVNVTkcKIAlkZWZhdWx0IDQgaWYgU0VSSUFMX1NBTVNVTkdfVUFSVFNfNCB8fCBDUFVfUzNDMjQxNgogCWRlZmF1bHQgMwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9vZl9zZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9vZl9zZXJpYWwuYwppbmRleCA4YmMyNTYzLi5iZjM1NTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvb2Zfc2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShvZmRldi0+ZGV2Lm9mX25vZGUsICJ1c2VkLWJ5LXJ0YXMiLCBOVUxMKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yNDAsMzIgKzI0MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fU0xFRVAKLXN0YXRpYyBpbnQgb2Zfc2VyaWFsX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBvZl9zZXJpYWxfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0Jc2VyaWFsODI1MF9zdXNwZW5kX3BvcnQoaW5mby0+bGluZSk7Ci0JaWYgKGluZm8tPmNsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGluZm8tPmNsayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvZl9zZXJpYWxfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb2Zfc2VyaWFsX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmIChpbmZvLT5jbGspCi0JCWNsa19wcmVwYXJlX2VuYWJsZShpbmZvLT5jbGspOwotCi0Jc2VyaWFsODI1MF9yZXN1bWVfcG9ydChpbmZvLT5saW5lKTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmCi1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMob2Zfc2VyaWFsX3BtX29wcywgb2Zfc2VyaWFsX3N1c3BlbmQsIG9mX3NlcmlhbF9yZXN1bWUpOwotCiAvKgogICogQSBmZXcgY29tbW9uIHR5cGVzLCBhZGQgbW9yZSBhcyBuZWVkZWQuCiAgKi8KQEAgLTI5Nyw3ICsyNzEsNiBAQAogCQkubmFtZSA9ICJvZl9zZXJpYWwiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9mX21hdGNoX3RhYmxlID0gb2ZfcGxhdGZvcm1fc2VyaWFsX3RhYmxlLAotCQkucG0gPSAmb2Zfc2VyaWFsX3BtX29wcywKIAl9LAogCS5wcm9iZSA9IG9mX3BsYXRmb3JtX3NlcmlhbF9wcm9iZSwKIAkucmVtb3ZlID0gb2ZfcGxhdGZvcm1fc2VyaWFsX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKaW5kZXggZGYzYThjNy4uZWFlYjlhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCQkgKiBUaGUgc3BkX2hpLCBzcGRfdmhpLCBzcGRfc2hpLCBzcGRfd2FycCBrbHVkZ2UuLi4KIAkJICogRGllISBEaWUhIERpZSEKIAkJICovCi0JCWlmIChiYXVkID09IDM4NDAwKQorCQlpZiAodHJ5ID09IDAgJiYgYmF1ZCA9PSAzODQwMCkKIAkJCWJhdWQgPSBhbHRiYXVkOwogCiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfaW8uYyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jCmluZGV4IDE2YTJjMDIuLjA1MDhhMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9pby5jCisrKyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jCkBAIC0xNzA5LDYgKzE3MDksOCBAQAogCWludAlwdHlfbWFzdGVyLCB0dHlfY2xvc2luZywgb190dHlfY2xvc2luZywgZG9fc2xlZXA7CiAJaW50CWlkeDsKIAljaGFyCWJ1Zls2NF07CisJbG9uZwl0aW1lb3V0ID0gMDsKKwlpbnQJb25jZSA9IDE7CiAKIAlpZiAodHR5X3BhcmFub2lhX2NoZWNrKHR0eSwgaW5vZGUsIF9fZnVuY19fKSkKIAkJcmV0dXJuIDA7CkBAIC0xNzg5LDExICsxNzkxLDE4IEBACiAJCWlmICghZG9fc2xlZXApCiAJCQlicmVhazsKIAotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXM6IHJlYWQvd3JpdGUgd2FpdCBxdWV1ZSBhY3RpdmUhXG4iLAotCQkJCV9fZnVuY19fLCB0dHlfbmFtZSh0dHksIGJ1ZikpOworCQlpZiAob25jZSkgeworCQkJb25jZSA9IDA7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXM6IHJlYWQvd3JpdGUgd2FpdCBxdWV1ZSBhY3RpdmUhXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCB0dHlfbmFtZSh0dHksIGJ1ZikpOworCQl9CiAJCXR0eV91bmxvY2tfcGFpcih0dHksIG9fdHR5KTsKIAkJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwotCQlzY2hlZHVsZSgpOworCQlzY2hlZHVsZV90aW1lb3V0X2tpbGxhYmxlKHRpbWVvdXQpOworCQlpZiAodGltZW91dCA8IDEyMCAqIEhaKQorCQkJdGltZW91dCA9IDIgKiB0aW1lb3V0ICsgMTsKKwkJZWxzZQorCQkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC9jb25zb2xlbWFwLmMgYi9kcml2ZXJzL3R0eS92dC9jb25zb2xlbWFwLmMKaW5kZXggNjEwYjcyMC4uNTliMjVlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvY29uc29sZW1hcC5jCisrKyBiL2RyaXZlcnMvdHR5L3Z0L2NvbnNvbGVtYXAuYwpAQCAtNTM5LDYgKzUzOSwxMiBAQAogCiAJLyogU2F2ZSBvcmlnaW5hbCB2Y191bmlwYWdkaXJfbG9jIGluIGNhc2Ugd2UgYWxsb2NhdGUgYSBuZXcgb25lICovCiAJcCA9ICp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jOworCisJaWYgKCFwKSB7CisJCWVyciA9IC1FSU5WQUw7CisKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAkKIAlpZiAocC0+cmVmY291bnQgPiAxKSB7CiAJCWludCBqLCBrOwpAQCAtNjIzLDYgKzYyOSw3IEBACiAJCXNldF9pbnZlcnNlX3RyYW5zbCh2YywgcCwgaSk7IC8qIFVwZGF0ZSBpbnZlcnNlIHRyYW5zbGF0aW9ucyAqLwogCXNldF9pbnZlcnNlX3RyYW5zX3VuaWNvZGUodmMsIHApOwogCitvdXRfdW5sb2NrOgogCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCBlOTM0ZTE5Li4wNzdkNThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC02MCw2ICs2MCw5IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoYWNtX3RhYmxlX2xvY2spOwogCitzdGF0aWMgdm9pZCBhY21fdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zX29sZCk7CisKIC8qCiAgKiBhY21fdGFibGUgYWNjZXNzb3JzCiAgKi8KQEAgLTE0NSw4ICsxNDgsMTUgQEAKIC8qIGRldmljZXMgYXJlbid0IHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlc2UgcmVxdWVzdHMuCiAgKiB0aGUgY2RjIGFjbSBkZXNjcmlwdG9yIHRlbGxzIHdoZXRoZXIgdGhleSBkby4uLgogICovCi0jZGVmaW5lIGFjbV9zZXRfY29udHJvbChhY20sIGNvbnRyb2wpIFwKLQlhY21fY3RybF9tc2coYWNtLCBVU0JfQ0RDX1JFUV9TRVRfQ09OVFJPTF9MSU5FX1NUQVRFLCBjb250cm9sLCBOVUxMLCAwKQorc3RhdGljIGlubGluZSBpbnQgYWNtX3NldF9jb250cm9sKHN0cnVjdCBhY20gKmFjbSwgaW50IGNvbnRyb2wpCit7CisJaWYgKGFjbS0+cXVpcmtzICYgUVVJUktfQ09OVFJPTF9MSU5FX1NUQVRFKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gYWNtX2N0cmxfbXNnKGFjbSwgVVNCX0NEQ19SRVFfU0VUX0NPTlRST0xfTElORV9TVEFURSwKKwkJCWNvbnRyb2wsIE5VTEwsIDApOworfQorCiAjZGVmaW5lIGFjbV9zZXRfbGluZShhY20sIGxpbmUpIFwKIAlhY21fY3RybF9tc2coYWNtLCBVU0JfQ0RDX1JFUV9TRVRfTElORV9DT0RJTkcsIDAsIGxpbmUsIHNpemVvZiAqKGxpbmUpKQogI2RlZmluZSBhY21fc2VuZF9icmVhayhhY20sIG1zKSBcCkBAIC01NTQsNiArNTY0LDggQEAKIAkJZ290byBlcnJvcl9zdWJtaXRfdXJiOwogCX0KIAorCWFjbV90dHlfc2V0X3Rlcm1pb3ModHR5LCBOVUxMKTsKKwogCS8qCiAJICogVW50aHJvdHRsZSBkZXZpY2UgaW4gY2FzZSB0aGUgVFRZIHdhcyBjbG9zZWQgd2hpbGUgdGhyb3R0bGVkLgogCSAqLwpAQCAtOTgwLDExICs5OTIsMTIgQEAKIAkvKiBGSVhNRTogTmVlZHMgdG8gY2xlYXIgdW5zdXBwb3J0ZWQgYml0cyBpbiB0aGUgdGVybWlvcyAqLwogCWFjbS0+Y2xvY2FsID0gKCh0ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSAhPSAwKTsKIAotCWlmICghbmV3bGluZS5kd0RURVJhdGUpIHsKKwlpZiAoQ19CQVVEKHR0eSkgPT0gQjApIHsKIAkJbmV3bGluZS5kd0RURVJhdGUgPSBhY20tPmxpbmUuZHdEVEVSYXRlOwogCQluZXdjdHJsICY9IH5BQ01fQ1RSTF9EVFI7Ci0JfSBlbHNlCisJfSBlbHNlIGlmICh0ZXJtaW9zX29sZCAmJiAodGVybWlvc19vbGQtPmNfY2ZsYWcgJiBDQkFVRCkgPT0gQjApIHsKIAkJbmV3Y3RybCB8PSAgQUNNX0NUUkxfRFRSOworCX0KIAogCWlmIChuZXdjdHJsICE9IGFjbS0+Y3RybG91dCkKIAkJYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gbmV3Y3RybCk7CkBAIC0xMzE0LDYgKzEzMjcsNyBAQAogCXR0eV9wb3J0X2luaXQoJmFjbS0+cG9ydCk7CiAJYWNtLT5wb3J0Lm9wcyA9ICZhY21fcG9ydF9vcHM7CiAJaW5pdF91c2JfYW5jaG9yKCZhY20tPmRlbGF5ZWQpOworCWFjbS0+cXVpcmtzID0gcXVpcmtzOwogCiAJYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KHVzYl9kZXYsIGN0cmxzaXplLCBHRlBfS0VSTkVMLCAmYWNtLT5jdHJsX2RtYSk7CiAJaWYgKCFidWYpIHsKQEAgLTE2ODEsNiArMTY5NSw5IEBACiAJeyBVU0JfREVWSUNFKDB4MDU3MiwgMHgxMzI4KSwgLyogU2hpcm8gLyBBenRlY2ggVVNCIE1PREVNIFVNLTMxMDAgKi8KIAkuZHJpdmVyX2luZm8gPSBOT19VTklPTl9OT1JNQUwsIC8qIGhhcyBubyB1bmlvbiBkZXNjcmlwdG9yICovCiAJfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMGRmLCAweDAwMDEpLCAvKiBTaW10ZWMgRWxlY3Ryb25pY3MgRW50cm9weSBLZXkgKi8KKwkuZHJpdmVyX2luZm8gPSBRVUlSS19DT05UUk9MX0xJTkVfU1RBVEUsIH0sCisJeyBVU0JfREVWSUNFKDB4MjE4NCwgMHgwMDFjKSB9LAkvKiBHVyBJbnN0ZWsgQUZHLTIyMjUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgyMmI4LCAweDY0MjUpLCAvKiBNb3Rvcm9sYSBNT1RPTUFHWCBwaG9uZXMgKi8KIAl9LAogCS8qIE1vdG9yb2xhIEgyNCBIU1BBIG1vZHVsZTogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaCBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaAppbmRleCBmYzc1NjUxLi5kMzI1MWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCkBAIC0xMjEsNiArMTIxLDcgQEAKIAl1bnNpZ25lZCBpbnQgdGhyb3R0bGVfcmVxOjE7CQkJLyogdGhyb3R0bGUgcmVxdWVzdGVkICovCiAJdTggYkludGVydmFsOwogCXN0cnVjdCB1c2JfYW5jaG9yIGRlbGF5ZWQ7CQkJLyogd3JpdGVzIHF1ZXVlZCBmb3IgYSBkZXZpY2UgYWJvdXQgdG8gYmUgd29rZW4gKi8KKwl1bnNpZ25lZCBsb25nIHF1aXJrczsKIH07CiAKICNkZWZpbmUgQ0RDX0RBVEFfSU5URVJGQUNFX1RZUEUJMHgwYQpAQCAtMTMyLDMgKzEzMyw0IEBACiAjZGVmaW5lIE5PVF9BX01PREVNCQkJQklUKDMpCiAjZGVmaW5lIE5PX0RBVEFfSU5URVJGQUNFCQlCSVQoNCkKICNkZWZpbmUgSUdOT1JFX0RFVklDRQkJCUJJVCg1KQorI2RlZmluZSBRVUlSS19DT05UUk9MX0xJTkVfU1RBVEUJQklUKDYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCBiODRmYjE0Li5hNmVmYjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTIwNjAsNiArMjA2MCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9TVVBFUikKIAkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRldi0+c3RhdGUgPCBVU0JfU1RBVEVfQ09ORklHVVJFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2VwczsgaSsrKSB7CiAJCS8qIFN0cmVhbXMgb25seSBhcHBseSB0byBidWxrIGVuZHBvaW50cy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDExZTgwYWMuLmI2NDlmZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtNDQ2OCw5ICs0NDY4LDYgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWw7CiAKLQlpZiAoaGNkLT51c2JfcGh5ICYmICFoZGV2LT5wYXJlbnQpCi0JCXVzYl9waHlfbm90aWZ5X2Nvbm5lY3QoaGNkLT51c2JfcGh5LCB1ZGV2LT5zcGVlZCk7Ci0KIAkvKgogCSAqIFNvbWUgc3VwZXJzcGVlZCBkZXZpY2VzIGhhdmUgZmluaXNoZWQgdGhlIGxpbmsgdHJhaW5pbmcgcHJvY2VzcwogCSAqIGFuZCBhdHRhY2hlZCB0byBhIHN1cGVyc3BlZWQgaHViIHBvcnQsIGJ1dCB0aGUgZGV2aWNlIGRlc2NyaXB0b3IKQEAgLTQ2MjcsOCArNDYyNCw3IEBACiAKIAkvKiBEaXNjb25uZWN0IGFueSBleGlzdGluZyBkZXZpY2VzIHVuZGVyIHRoaXMgcG9ydCAqLwogCWlmICh1ZGV2KSB7Ci0JCWlmIChoY2QtPnVzYl9waHkgJiYgIWhkZXYtPnBhcmVudCAmJgotCQkJCSEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikpCisJCWlmIChoY2QtPnVzYl9waHkgJiYgIWhkZXYtPnBhcmVudCkKIAkJCXVzYl9waHlfbm90aWZ5X2Rpc2Nvbm5lY3QoaGNkLT51c2JfcGh5LCB1ZGV2LT5zcGVlZCk7CiAJCXVzYl9kaXNjb25uZWN0KCZwb3J0X2Rldi0+Y2hpbGQpOwogCX0KQEAgLTQ3ODMsNiArNDc3OSwxMCBAQAogCQkJCXBvcnRfZGV2LT5jaGlsZCA9IE5VTEw7CiAJCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZ1c2JfcG9ydF9wZWVyX211dGV4KTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGhjZC0+dXNiX3BoeSAmJiAhaGRldi0+cGFyZW50KQorCQkJCQl1c2JfcGh5X25vdGlmeV9jb25uZWN0KGhjZC0+dXNiX3BoeSwKKwkJCQkJCQl1ZGV2LT5zcGVlZCk7CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKaW5kZXggNWFlODgzZC4uOTZmYWZlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCkBAIC00NCw2ICs0NCw5IEBACiAJLyogQ3JlYXRpdmUgU0IgQXVkaWd5IDIgTlggKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDFlLCAweDMwMjApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKKwkvKiBNaWNyb3NvZnQgV2lyZWxlc3MgTGFzZXIgTW91c2UgNjAwMCBSZWNlaXZlciAqLworCXsgVVNCX0RFVklDRSgweDA0NWUsIDB4MDBlMSksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19SRVNFVF9SRVNVTUUgfSwKKwogCS8qIE1pY3Jvc29mdCBMaWZlQ2FtLVZYNzAwIHYyLjAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDVlLCAweDA3NzApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKQEAgLTk3LDYgKzEwMCwxMiBAQAogCXsgVVNCX0RFVklDRSgweDA0ZjMsIDB4MDA4OSksIC5kcml2ZXJfaW5mbyA9CiAJCQlVU0JfUVVJUktfREVWSUNFX1FVQUxJRklFUiB9LAogCisJeyBVU0JfREVWSUNFKDB4MDRmMywgMHgwMDliKSwgLmRyaXZlcl9pbmZvID0KKwkJCVVTQl9RVUlSS19ERVZJQ0VfUVVBTElGSUVSIH0sCisKKwl7IFVTQl9ERVZJQ0UoMHgwNGYzLCAweDAxNmYpLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0RFVklDRV9RVUFMSUZJRVIgfSwKKwogCS8qIFJvbGFuZCBTQy04ODIwICovCiAJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDA3KSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jIGIvZHJpdmVycy91c2IvZHdjMi9nYWRnZXQuYwppbmRleCBlZWU4NzA5Li44YjVjMDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL2R3YzIvZ2FkZ2V0LmMKQEAgLTIzMjcsNyArMjMyNyw3IEBACiAKIAkJdTMyIHVzYl9zdGF0dXMgPSByZWFkbChoc290Zy0+cmVncyArIEdPVEdDVEwpOwogCi0JCWRldl9pbmZvKGhzb3RnLT5kZXYsICIlczogVVNCUnN0XG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBVU0JSc3RcbiIsIF9fZnVuY19fKTsKIAkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiR05QVFhTVFM9JTA4eFxuIiwKIAkJCXJlYWRsKGhzb3RnLT5yZWdzICsgR05QVFhTVFMpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9lcDAuYyBiL2RyaXZlcnMvdXNiL2R3YzMvZXAwLmMKaW5kZXggNzExYjIzMC4uZGYzOGU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMy9lcDAuYworKysgYi9kcml2ZXJzL3VzYi9kd2MzL2VwMC5jCkBAIC03OTEsNiArNzkxLDEwIEBACiAKIAl0cmIgPSBkd2MtPmVwMF90cmI7CiAKKwlyID0gbmV4dF9yZXF1ZXN0KCZlcDAtPnJlcXVlc3RfbGlzdCk7CisJaWYgKCFyKQorCQlyZXR1cm47CisKIAlzdGF0dXMgPSBEV0MzX1RSQl9TSVpFX1RSQlNUUyh0cmItPnNpemUpOwogCWlmIChzdGF0dXMgPT0gRFdDM19UUkJTVFNfU0VUVVBfUEVORElORykgewogCQlkd2MzX3RyYWNlKHRyYWNlX2R3YzNfZXAwLCAiU2V0dXAgUGVuZGluZyByZWNlaXZlZCIpOwpAQCAtODAxLDEwICs4MDUsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JciA9IG5leHRfcmVxdWVzdCgmZXAwLT5yZXF1ZXN0X2xpc3QpOwotCWlmICghcikKLQkJcmV0dXJuOwotCiAJdXIgPSAmci0+cmVxdWVzdDsKIAogCWxlbmd0aCA9IHRyYi0+c2l6ZSAmIERXQzNfVFJCX1NJWkVfTUFTSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvdGNtX3VzYl9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvdGNtX3VzYl9nYWRnZXQuYwppbmRleCA2Y2RiN2E1Li4wMjRmNTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3RjbV91c2JfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS90Y21fdXNiX2dhZGdldC5jCkBAIC05MTIsNyArOTEyLDcgQEAKIAljYXNlIElOUVVJUlk6CiAJY2FzZSBNT0RFX1NFTlNFOgogCWNhc2UgTU9ERV9TRU5TRV8xMDoKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAJY2FzZSBNQUlOVEVOQU5DRV9JTjoKIAljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9JTjoKIAljYXNlIFNFQ1VSSVRZX1BST1RPQ09MX0lOOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCmluZGV4IGE4YTMwYjEuLmEzY2ExMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKQEAgLTIzNCw3ICsyMzQsNyBAQAogCiBjb25maWcgVVNCX0VIQ0lfRVhZTk9TCiAgICAgICAgdHJpc3RhdGUgIkVIQ0kgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTNVAvRVhZTk9TIFNvQyBTZXJpZXMiCi0gICAgICAgZGVwZW5kcyBvbiBQTEFUX1M1UCB8fCBBUkNIX0VYWU5PUworICAgICAgIGRlcGVuZHMgb24gQVJDSF9TNVBWMjEwIHx8IEFSQ0hfRVhZTk9TCiAgICAgICAgaGVscAogCUVuYWJsZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBFeHlub3MgU09DJ3Mgb24tY2hpcCBFSENJIGNvbnRyb2xsZXIuCiAKQEAgLTU1MCw3ICs1NTAsNyBAQAogCiBjb25maWcgVVNCX09IQ0lfRVhZTk9TCiAJdHJpc3RhdGUgIk9IQ0kgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTNVAvRVhZTk9TIFNvQyBTZXJpZXMiCi0JZGVwZW5kcyBvbiBQTEFUX1M1UCB8fCBBUkNIX0VYWU5PUworCWRlcGVuZHMgb24gQVJDSF9TNVBWMjEwIHx8IEFSQ0hfRVhZTk9TCiAJaGVscAogCSBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgRXh5bm9zIFNPQydzIG9uLWNoaXAgT0hDSSBjb250cm9sbGVyLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jIGIvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYwppbmRleCBkMGQ4ZmFkLi4xZGIwNjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKQEAgLTYwNyw3ICs2MDcsNyBAQAogCXdhLT53YV9kZXNjciA9IHdhX2Rlc2NyID0gKHN0cnVjdCB1c2Jfd2FfZGVzY3JpcHRvciAqKSBoZHI7CiAJaWYgKGxlMTZfdG9fY3B1KHdhX2Rlc2NyLT5iY2RXQVZlcnNpb24pID4gMHgwMTAwKQogCQlkZXZfd2FybihkZXYsICJXaXJlIEFkYXB0ZXIgdiVkLiVkIG5ld2VyIHRoYW4gZ3Jva2VkIHYxLjBcbiIsCi0JCQkgbGUxNl90b19jcHUod2FfZGVzY3ItPmJjZFdBVmVyc2lvbikgJiAweGZmMDAgPj4gOCwKKwkJCSAobGUxNl90b19jcHUod2FfZGVzY3ItPmJjZFdBVmVyc2lvbikgJiAweGZmMDApID4+IDgsCiAJCQkgbGUxNl90b19jcHUod2FfZGVzY3ItPmJjZFdBVmVyc2lvbikgJiAweDAwZmYpOwogCXJlc3VsdCA9IDA7CiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwppbmRleCA2OTYxNjBkLi4zODhjZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCkBAIC0yMiw3ICsyMiw2IEBACiAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlICJ4aGNpLmgiCkBAIC0xMTQ5LDkgKzExNDgsNyBAQAogCQkgKiBpbmNsdWRpbmcgdGhlIFVTQiAzLjAgcm9vdGh1YiwgYnV0IG9ubHkgaWYgQ09ORklHX1BNX1JVTlRJTUUKIAkJICogaXMgZW5hYmxlZCwgc28gYWxzbyBlbmFibGUgcmVtb3RlIHdha2UgaGVyZS4KIAkJICovCi0JCWlmIChoY2QtPnNlbGYucm9vdF9odWItPmRvX3JlbW90ZV93YWtldXAKLQkJCQkmJiBkZXZpY2VfbWF5X3dha2V1cChoY2QtPnNlbGYuY29udHJvbGxlcikpIHsKLQorCQlpZiAoaGNkLT5zZWxmLnJvb3RfaHViLT5kb19yZW1vdGVfd2FrZXVwKSB7CiAJCQlpZiAodDEgJiBQT1JUX0NPTk5FQ1QpIHsKIAkJCQl0MiB8PSBQT1JUX1dLT0NfRSB8IFBPUlRfV0tESVNDX0U7CiAJCQkJdDIgJj0gflBPUlRfV0tDT05OX0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKaW5kZXggMjgwZGRlOS4uMTQyYjYwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwpAQCAtMTI4LDIwICsxMjgsNiBAQAogCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9BVk9JRF9CRUk7CiAJfQogCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCAmJgotCSAgICAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfTFlOWFBPSU5UX1hIQ0kgfHwKLQkgICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0xZTlhQT0lOVF9MUF9YSENJKSkgewotCQkvKiBXb3JrYXJvdW5kIGZvciBvY2Nhc2lvbmFsIHNwdXJpb3VzIHdha2V1cHMgZnJvbSBTNSAob3IKLQkJICogYW55IG90aGVyIHNsZWVwKSBvbiBIYXN3ZWxsIG1hY2hpbmVzIHdpdGggTFBUIGFuZCBMUFQtTFAKLQkJICogd2l0aCB0aGUgbmV3IEludGVsIEJJT1MKLQkJICovCi0JCS8qIExpbWl0IHRoZSBxdWlyayB0byBvbmx5IGtub3duIHZlbmRvcnMsIGFzIHRoaXMgdHJpZ2dlcnMKLQkJICogeWV0IGFub3RoZXIgQklPUyBidWcgb24gc29tZSBvdGhlciBtYWNoaW5lcwotCQkgKiBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTcxCi0JCSAqLwotCQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0hQKQotCQkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfU1BVUklPVVNfV0FLRVVQOwotCX0KLQlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwgJiYKIAkJcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfTFlOWFBPSU5UX0xQX1hIQ0kpIHsKIAkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfU1BVUklPVVNfUkVCT09UOwogCX0KQEAgLTE2Miw2ICsxNDgsMTAgQEAKIAkJCXBkZXYtPmRldmljZSA9PSAweDM0MzIpCiAJCXhoY2ktPnF1aXJrcyB8PSBYSENJX0JST0tFTl9TVFJFQU1TOwogCisJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FTTUVESUEgJiYKKwkJCXBkZXYtPmRldmljZSA9PSAweDEwNDIpCisJCXhoY2ktPnF1aXJrcyB8PSBYSENJX0JST0tFTl9TVFJFQU1TOworCiAJaWYgKHhoY2ktPnF1aXJrcyAmIFhIQ0lfUkVTRVRfT05fUkVTVU1FKQogCQl4aGNpX2RiZ190cmFjZSh4aGNpLCB0cmFjZV94aGNpX2RiZ19xdWlya3MsCiAJCQkJIlFVSVJLOiBSZXNldHRpbmcgb24gcmVzdW1lIik7CkBAIC0yOTEsNyArMjgxLDcgQEAKIAlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9DT01QX01PREVfUVVJUkspCiAJCXBkZXYtPm5vX2QzY29sZCA9IHRydWU7CiAKLQlyZXR1cm4geGhjaV9zdXNwZW5kKHhoY2kpOworCXJldHVybiB4aGNpX3N1c3BlbmQoeGhjaSwgZG9fd2FrZXVwKTsKIH0KIAogc3RhdGljIGludCB4aGNpX3BjaV9yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgYm9vbCBoaWJlcm5hdGVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBsYXQuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wbGF0LmMKaW5kZXggM2Q3OGIwYy4uNjQ2MzAwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBsYXQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGxhdC5jCkBAIC0yMDQsNyArMjA0LDE1IEBACiAJc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB4aGNpX2hjZAkqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CiAKLQlyZXR1cm4geGhjaV9zdXNwZW5kKHhoY2kpOworCS8qCisJICogeGhjaV9zdXNwZW5kKCkgbmVlZHMgYGRvX3dha2V1cGAgdG8ga25vdyB3aGV0aGVyIGhvc3QgaXMgYWxsb3dlZAorCSAqIHRvIGRvIHdha2V1cCBkdXJpbmcgc3VzcGVuZC4gU2luY2UgeGhjaV9wbGF0X3N1c3BlbmQgaXMgY3VycmVudGx5CisJICogb25seSBkZXNpZ25lZCBmb3Igc3lzdGVtIHN1c3BlbmQsIGRldmljZV9tYXlfd2FrZXVwKCkgaXMgZW5vdWdoCisJICogdG8gZGVydGVybWluZSB3aGV0aGVyIGhvc3QgaXMgYWxsb3dlZCB0byBkbyB3YWtldXAuIE5lZWQgdG8KKwkgKiByZWNvbnNpZGVyIHRoaXMgd2hlbiB4aGNpX3BsYXRfc3VzcGVuZCBlbmxhcmdlcyBpdHMgc2NvcGUsIGUuZy4sCisJICogYWxzbyBhcHBsaWVzIHRvIHJ1bnRpbWUgc3VzcGVuZC4KKwkgKi8KKwlyZXR1cm4geGhjaV9zdXNwZW5kKHhoY2ksIGRldmljZV9tYXlfd2FrZXVwKGRldikpOwogfQogCiBzdGF0aWMgaW50IHhoY2lfcGxhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggYmM2ZmNiYy4uMDY0MzNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC0xMDY3LDkgKzEwNjcsOCBAQAogCQkJCWZhbHNlKTsKIAkJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKIAl9IGVsc2UgewotCQkvKiBDbGVhciBvdXIgaW50ZXJuYWwgaGFsdGVkIHN0YXRlIGFuZCByZXN0YXJ0IHRoZSByaW5nKHMpICovCisJCS8qIENsZWFyIG91ciBpbnRlcm5hbCBoYWx0ZWQgc3RhdGUgKi8KIAkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XS5lcF9zdGF0ZSAmPSB+RVBfSEFMVEVEOwotCQlyaW5nX2Rvb3JiZWxsX2Zvcl9hY3RpdmVfcmluZ3MoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgpOwogCX0KIH0KIApAQCAtMTgyMywyMiArMTgyMiwxMyBAQAogCQllcC0+c3RvcHBlZF90ZCA9IHRkOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlpZiAodHJiX2NvbXBfY29kZSA9PSBDT01QX1NUQUxMKSB7Ci0JCQkvKiBUaGUgdHJhbnNmZXIgaXMgY29tcGxldGVkIGZyb20gdGhlIGRyaXZlcidzCi0JCQkgKiBwZXJzcGVjdGl2ZSwgYnV0IHdlIG5lZWQgdG8gaXNzdWUgYSBzZXQgZGVxdWV1ZQotCQkJICogY29tbWFuZCBmb3IgdGhpcyBzdGFsbGVkIGVuZHBvaW50IHRvIG1vdmUgdGhlIGRlcXVldWUKLQkJCSAqIHBvaW50ZXIgcGFzdCB0aGUgVEQuICBXZSBjYW4ndCBkbyB0aGF0IGhlcmUgYmVjYXVzZQotCQkJICogdGhlIGhhbHQgY29uZGl0aW9uIG11c3QgYmUgY2xlYXJlZCBmaXJzdC4gIExldCB0aGUKLQkJCSAqIFVTQiBjbGFzcyBkcml2ZXIgY2xlYXIgdGhlIHN0YWxsIGxhdGVyLgotCQkJICovCi0JCQllcC0+c3RvcHBlZF90ZCA9IHRkOwotCQkJZXAtPnN0b3BwZWRfc3RyZWFtID0gZXBfcmluZy0+c3RyZWFtX2lkOwotCQl9IGVsc2UgaWYgKHhoY2lfcmVxdWlyZXNfbWFudWFsX2hhbHRfY2xlYW51cCh4aGNpLAotCQkJCQllcF9jdHgsIHRyYl9jb21wX2NvZGUpKSB7Ci0JCQkvKiBPdGhlciB0eXBlcyBvZiBlcnJvcnMgaGFsdCB0aGUgZW5kcG9pbnQsIGJ1dCB0aGUKLQkJCSAqIGNsYXNzIGRyaXZlciBkb2Vzbid0IGNhbGwgdXNiX3Jlc2V0X2VuZHBvaW50KCkgdW5sZXNzCi0JCQkgKiB0aGUgZXJyb3IgaXMgLUVQSVBFLiAgQ2xlYXIgdGhlIGhhbHRlZCBzdGF0dXMgaW4gdGhlCi0JCQkgKiB4SENJIGhhcmR3YXJlIG1hbnVhbGx5LgorCQlpZiAodHJiX2NvbXBfY29kZSA9PSBDT01QX1NUQUxMIHx8CisJCSAgICB4aGNpX3JlcXVpcmVzX21hbnVhbF9oYWx0X2NsZWFudXAoeGhjaSwgZXBfY3R4LAorCQkJCQkJICAgICAgdHJiX2NvbXBfY29kZSkpIHsKKwkJCS8qIElzc3VlIGEgcmVzZXQgZW5kcG9pbnQgY29tbWFuZCB0byBjbGVhciB0aGUgaG9zdCBzaWRlCisJCQkgKiBoYWx0LCBmb2xsb3dlZCBieSBhIHNldCBkZXF1ZXVlIGNvbW1hbmQgdG8gbW92ZSB0aGUKKwkJCSAqIGRlcXVldWUgcG9pbnRlciBwYXN0IHRoZSBURC4KKwkJCSAqIFRoZSBjbGFzcyBkcml2ZXIgY2xlYXJzIHRoZSBkZXZpY2Ugc2lkZSBoYWx0IGxhdGVyLgogCQkJICovCiAJCQl4aGNpX2NsZWFudXBfaGFsdGVkX2VuZHBvaW50KHhoY2ksCiAJCQkJCXNsb3RfaWQsIGVwX2luZGV4LCBlcF9yaW5nLT5zdHJlYW1faWQsCkBAIC0xOTU4LDkgKzE5NDgsNyBAQAogCQllbHNlCiAJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKIAotCQl4aGNpX2NsZWFudXBfaGFsdGVkX2VuZHBvaW50KHhoY2ksCi0JCQlzbG90X2lkLCBlcF9pbmRleCwgMCwgdGQsIGV2ZW50X3RyYik7Ci0JCXJldHVybiBmaW5pc2hfdGQoeGhjaSwgdGQsIGV2ZW50X3RyYiwgZXZlbnQsIGVwLCBzdGF0dXMsIHRydWUpOworCQlyZXR1cm4gZmluaXNoX3RkKHhoY2ksIHRkLCBldmVudF90cmIsIGV2ZW50LCBlcCwgc3RhdHVzLCBmYWxzZSk7CiAJfQogCS8qCiAJICogRGlkIHdlIHRyYW5zZmVyIGFueSBkYXRhLCBkZXNwaXRlIHRoZSBlcnJvcnMgdGhhdCBtaWdodCBoYXZlCkBAIC0yNTE5LDE3ICsyNTA3LDggQEAKIAkJaWYgKHJldCkgewogCQkJdXJiID0gdGQtPnVyYjsKIAkJCXVyYl9wcml2ID0gdXJiLT5oY3ByaXY7Ci0JCQkvKiBMZWF2ZSB0aGUgVEQgYXJvdW5kIGZvciB0aGUgcmVzZXQgZW5kcG9pbnQgZnVuY3Rpb24KLQkJCSAqIHRvIHVzZShidXQgb25seSBpZiBpdCdzIG5vdCBhIGNvbnRyb2wgZW5kcG9pbnQsCi0JCQkgKiBzaW5jZSB3ZSBhbHJlYWR5IHF1ZXVlZCB0aGUgU2V0IFRSIGRlcXVldWUgcG9pbnRlcgotCQkJICogY29tbWFuZCBmb3Igc3RhbGxlZCBjb250cm9sIGVuZHBvaW50cykuCi0JCQkgKi8KLQkJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZ1cmItPmVwLT5kZXNjKSB8fAotCQkJCSh0cmJfY29tcF9jb2RlICE9IENPTVBfU1RBTEwgJiYKLQkJCQkJdHJiX2NvbXBfY29kZSAhPSBDT01QX0JBQkJMRSkpCi0JCQkJeGhjaV91cmJfZnJlZV9wcml2KHhoY2ksIHVyYl9wcml2KTsKLQkJCWVsc2UKLQkJCQlrZnJlZSh1cmJfcHJpdik7CisKKwkJCXhoY2lfdXJiX2ZyZWVfcHJpdih4aGNpLCB1cmJfcHJpdik7CiAKIAkJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGJ1c190b19oY2QodXJiLT5kZXYtPmJ1cyksIHVyYik7CiAJCQlpZiAoKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKaW5kZXggMmE1ZDQ1Yi4uMDMzYjQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKQEAgLTM1LDYgKzM1LDggQEAKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiU2FyYWggU2hhcnAiCiAjZGVmaW5lIERSSVZFUl9ERVNDICInZVh0ZW5zaWJsZScgSG9zdCBDb250cm9sbGVyICh4SEMpIERyaXZlciIKIAorI2RlZmluZQlQT1JUX1dBS0VfQklUUwkoUE9SVF9XS09DX0UgfCBQT1JUX1dLRElTQ19FIHwgUE9SVF9XS0NPTk5fRSkKKwogLyogU29tZSAwLjk1IGhhcmR3YXJlIGNhbid0IGhhbmRsZSB0aGUgY2hhaW4gYml0IG9uIGEgTGluayBUUkIgYmVpbmcgY2xlYXJlZCAqLwogc3RhdGljIGludCBsaW5rX3F1aXJrOwogbW9kdWxlX3BhcmFtKGxpbmtfcXVpcmssIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwpAQCAtODUxLDEzICs4NTMsNDcgQEAKIAl4aGNpX3NldF9jbWRfcmluZ19kZXEoeGhjaSk7CiB9CiAKK3N0YXRpYyB2b2lkIHhoY2lfZGlzYWJsZV9wb3J0X3dha2Vfb25fYml0cyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCit7CisJaW50IHBvcnRfaW5kZXg7CisJX19sZTMyIF9faW9tZW0gKipwb3J0X2FycmF5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHQxLCB0MjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisKKwkvKiBkaXNibGUgdXNiMyBwb3J0cyBXYWtlIGJpdHMqLworCXBvcnRfaW5kZXggPSB4aGNpLT5udW1fdXNiM19wb3J0czsKKwlwb3J0X2FycmF5ID0geGhjaS0+dXNiM19wb3J0czsKKwl3aGlsZSAocG9ydF9pbmRleC0tKSB7CisJCXQxID0gcmVhZGwocG9ydF9hcnJheVtwb3J0X2luZGV4XSk7CisJCXQxID0geGhjaV9wb3J0X3N0YXRlX3RvX25ldXRyYWwodDEpOworCQl0MiA9IHQxICYgflBPUlRfV0FLRV9CSVRTOworCQlpZiAodDEgIT0gdDIpCisJCQl3cml0ZWwodDIsIHBvcnRfYXJyYXlbcG9ydF9pbmRleF0pOworCX0KKworCS8qIGRpc2JsZSB1c2IyIHBvcnRzIFdha2UgYml0cyovCisJcG9ydF9pbmRleCA9IHhoY2ktPm51bV91c2IyX3BvcnRzOworCXBvcnRfYXJyYXkgPSB4aGNpLT51c2IyX3BvcnRzOworCXdoaWxlIChwb3J0X2luZGV4LS0pIHsKKwkJdDEgPSByZWFkbChwb3J0X2FycmF5W3BvcnRfaW5kZXhdKTsKKwkJdDEgPSB4aGNpX3BvcnRfc3RhdGVfdG9fbmV1dHJhbCh0MSk7CisJCXQyID0gdDEgJiB+UE9SVF9XQUtFX0JJVFM7CisJCWlmICh0MSAhPSB0MikKKwkJCXdyaXRlbCh0MiwgcG9ydF9hcnJheVtwb3J0X2luZGV4XSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworfQorCiAvKgogICogU3RvcCBIQyAobm90IGJ1cy1zcGVjaWZpYykKICAqCiAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBtYWNoaW5lIHRyYW5zaXRpb24gaW50byBTMy9TNCBtb2RlLgogICoKICAqLwotaW50IHhoY2lfc3VzcGVuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCitpbnQgeGhjaV9zdXNwZW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgYm9vbCBkb193YWtldXApCiB7CiAJaW50CQkJcmMgPSAwOwogCXVuc2lnbmVkIGludAkJZGVsYXkgPSBYSENJX01BWF9IQUxUX1VTRUM7CkBAIC04NjgsNiArOTA0LDEwIEBACiAJCQl4aGNpLT5zaGFyZWRfaGNkLT5zdGF0ZSAhPSBIQ19TVEFURV9TVVNQRU5ERUQpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogQ2xlYXIgcm9vdCBwb3J0IHdha2Ugb24gYml0cyBpZiB3YWtldXAgbm90IGFsbG93ZWQuICovCisJaWYgKCFkb193YWtldXApCisJCXhoY2lfZGlzYWJsZV9wb3J0X3dha2Vfb25fYml0cyh4aGNpKTsKKwogCS8qIERvbid0IHBvbGwgdGhlIHJvb3RodWJzIG9uIGJ1cyBzdXNwZW5kLiAqLwogCXhoY2lfZGJnKHhoY2ksICIlczogc3RvcHBpbmcgcG9ydCBwb2xsaW5nLlxuIiwgX19mdW5jX18pOwogCWNsZWFyX2JpdChIQ0RfRkxBR19QT0xMX1JILCAmaGNkLT5mbGFncyk7CkBAIC0yOTEyLDY4ICsyOTUyLDMzIEBACiAJfQogfQogCi0vKiBEZWFsIHdpdGggc3RhbGxlZCBlbmRwb2ludHMuICBUaGUgY29yZSBzaG91bGQgaGF2ZSBzZW50IHRoZSBjb250cm9sIG1lc3NhZ2UKLSAqIHRvIGNsZWFyIHRoZSBoYWx0IGNvbmRpdGlvbi4gIEhvd2V2ZXIsIHdlIG5lZWQgdG8gbWFrZSB0aGUgeEhDSSBoYXJkd2FyZQotICogcmVzZXQgaXRzIHNlcXVlbmNlIG51bWJlciwgc2luY2UgYSBkZXZpY2Ugd2lsbCBleHBlY3QgYSBzZXF1ZW5jZSBudW1iZXIgb2YKLSAqIHplcm8gYWZ0ZXIgdGhlIGhhbHQgY29uZGl0aW9uIGlzIGNsZWFyZWQuCisvKiBDYWxsZWQgd2hlbiBjbGVhcmluZyBoYWx0ZWQgZGV2aWNlLiBUaGUgY29yZSBzaG91bGQgaGF2ZSBzZW50IHRoZSBjb250cm9sCisgKiBtZXNzYWdlIHRvIGNsZWFyIHRoZSBkZXZpY2UgaGFsdCBjb25kaXRpb24uIFRoZSBob3N0IHNpZGUgb2YgdGhlIGhhbHQgc2hvdWxkCisgKiBhbHJlYWR5IGJlIGNsZWFyZWQgd2l0aCBhIHJlc2V0IGVuZHBvaW50IGNvbW1hbmQgaXNzdWVkIHdoZW4gdGhlIFNUQUxMIHR4CisgKiBldmVudCB3YXMgcmVjZWl2ZWQuCisgKgogICogQ29udGV4dDogaW5faW50ZXJydXB0CiAgKi8KKwogdm9pZCB4aGNpX2VuZHBvaW50X3Jlc2V0KHN0cnVjdCB1c2JfaGNkICpoY2QsCiAJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCiB7CiAJc3RydWN0IHhoY2lfaGNkICp4aGNpOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXVuc2lnbmVkIGludCBlcF9pbmRleDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0Jc3RydWN0IHhoY2lfdmlydF9lcCAqdmlydF9lcDsKLQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kOwogCiAJeGhjaSA9IGhjZF90b194aGNpKGhjZCk7Ci0JdWRldiA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKSBlcC0+aGNwcml2OwotCS8qIENhbGxlZCB3aXRoIGEgcm9vdCBodWIgZW5kcG9pbnQgKG9yIGFuIGVuZHBvaW50IHRoYXQgd2Fzbid0IGFkZGVkCi0JICogd2l0aCB4aGNpX2FkZF9lbmRwb2ludCgpCi0JICovCi0JaWYgKCFlcC0+aGNwcml2KQotCQlyZXR1cm47Ci0JZXBfaW5kZXggPSB4aGNpX2dldF9lbmRwb2ludF9pbmRleCgmZXAtPmRlc2MpOwotCXZpcnRfZXAgPSAmeGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXS0+ZXBzW2VwX2luZGV4XTsKLQlpZiAoIXZpcnRfZXAtPnN0b3BwZWRfdGQpIHsKLQkJeGhjaV9kYmdfdHJhY2UoeGhjaSwgdHJhY2VfeGhjaV9kYmdfcmVzZXRfZXAsCi0JCQkiRW5kcG9pbnQgMHgleCBub3QgaGFsdGVkLCByZWZ1c2luZyB0byByZXNldC4iLAotCQkJZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJmVwLT5kZXNjKSkgewotCQl4aGNpX2RiZ190cmFjZSh4aGNpLCB0cmFjZV94aGNpX2RiZ19yZXNldF9lcCwKLQkJCQkiQ29udHJvbCBlbmRwb2ludCBzdGFsbCBhbHJlYWR5IGhhbmRsZWQuIik7Ci0JCXJldHVybjsKLQl9CiAKLQljb21tYW5kID0geGhjaV9hbGxvY19jb21tYW5kKHhoY2ksIGZhbHNlLCBmYWxzZSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFjb21tYW5kKQotCQlyZXR1cm47Ci0KLQl4aGNpX2RiZ190cmFjZSh4aGNpLCB0cmFjZV94aGNpX2RiZ19yZXNldF9lcCwKLQkJCSJRdWV1ZWluZyByZXNldCBlbmRwb2ludCBjb21tYW5kIik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKLQlyZXQgPSB4aGNpX3F1ZXVlX3Jlc2V0X2VwKHhoY2ksIGNvbW1hbmQsIHVkZXYtPnNsb3RfaWQsIGVwX2luZGV4KTsKIAkvKgotCSAqIENhbid0IGNoYW5nZSB0aGUgcmluZyBkZXF1ZXVlIHBvaW50ZXIgdW50aWwgaXQncyB0cmFuc2l0aW9uZWQgdG8gdGhlCi0JICogc3RvcHBlZCBzdGF0ZSwgd2hpY2ggaXMgb25seSB1cG9uIGEgc3VjY2Vzc2Z1bCByZXNldCBlbmRwb2ludAotCSAqIGNvbW1hbmQuICBCZXR0ZXIgaG9wZSB0aGF0IGxhc3QgY29tbWFuZCB3b3JrZWQhCisJICogV2UgbWlnaHQgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGNvbmZpZyBlcCBjbWQgaW4geGhjaSA0LjguMSBub3RlOgorCSAqIFRoZSBSZXNldCBFbmRwb2ludCBDb21tYW5kIG1heSBvbmx5IGJlIGlzc3VlZCB0byBlbmRwb2ludHMgaW4gdGhlCisJICogSGFsdGVkIHN0YXRlLiBJZiBzb2Z0d2FyZSB3aXNoZXMgcmVzZXQgdGhlIERhdGEgVG9nZ2xlIG9yIFNlcXVlbmNlCisJICogTnVtYmVyIG9mIGFuIGVuZHBvaW50IHRoYXQgaXNuJ3QgaW4gdGhlIEhhbHRlZCBzdGF0ZSwgdGhlbiBzb2Z0d2FyZQorCSAqIG1heSBpc3N1ZSBhIENvbmZpZ3VyZSBFbmRwb2ludCBDb21tYW5kIHdpdGggdGhlIERyb3AgYW5kIEFkZCBiaXRzIHNldAorCSAqIGZvciB0aGUgdGFyZ2V0IGVuZHBvaW50LiB0aGF0IGlzIGluIHRoZSBTdG9wcGVkIHN0YXRlLgogCSAqLwotCWlmICghcmV0KSB7Ci0JCXhoY2lfY2xlYW51cF9zdGFsbGVkX3JpbmcoeGhjaSwgdWRldiwgZXBfaW5kZXgpOwotCQlrZnJlZSh2aXJ0X2VwLT5zdG9wcGVkX3RkKTsKLQkJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKLQl9Ci0JdmlydF9lcC0+c3RvcHBlZF90ZCA9IE5VTEw7Ci0JdmlydF9lcC0+c3RvcHBlZF9zdHJlYW0gPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAotCWlmIChyZXQpCi0JCXhoY2lfd2Fybih4aGNpLCAiRklYTUUgYWxsb2NhdGUgYSBuZXcgcmluZyBzZWdtZW50XG4iKTsKKwkvKiBGb3Igbm93IGp1c3QgcHJpbnQgZGVidWcgdG8gZm9sbG93IHRoZSBzaXR1YXRpb24gKi8KKwl4aGNpX2RiZyh4aGNpLCAiRW5kcG9pbnQgMHgleCBlcCByZXNldCBjYWxsYmFjayBjYWxsZWRcbiIsCisJCSBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKIH0KIAogc3RhdGljIGludCB4aGNpX2NoZWNrX3N0cmVhbXNfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCBkZjc2ZDY0Li5kNzQ1NzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtMTc0Niw3ICsxNzQ2LDcgQEAKIHZvaWQgeGhjaV9pbml0X2RyaXZlcihzdHJ1Y3QgaGNfZHJpdmVyICpkcnYsIGludCAoKnNldHVwX2ZuKShzdHJ1Y3QgdXNiX2hjZCAqKSk7CiAKICNpZmRlZglDT05GSUdfUE0KLWludCB4aGNpX3N1c3BlbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKK2ludCB4aGNpX3N1c3BlbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBib29sIGRvX3dha2V1cCk7CiBpbnQgeGhjaV9yZXN1bWUoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBib29sIGhpYmVybmF0ZWQpOwogI2Vsc2UKICNkZWZpbmUJeGhjaV9zdXNwZW5kCU5VTEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwppbmRleCBjZmQwMDlkLi42YzRlYjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC0xMjAsNiArMTIwLDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg1RjgpIH0sIC8qIFZpcnRlbmlvIFByZW9uMzIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg2NjQpIH0sIC8qIEFDLVNlcnZpY2VzIENBTi1JRiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODY2NSkgfSwgLyogQUMtU2VydmljZXMgT0JELUlGICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4ODc1KSB9LCAvKiBDRUwgTWVzaENvbm5lY3QgVVNCIFN0aWNrICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4OEE0KSB9LCAvKiBNTUIgTmV0d29ya3MgWmlnQmVlIFVTQiBEZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg4QTUpIH0sIC8qIFBsYW5ldCBJbm5vdmF0aW9uIEluZ2VuaSBaaWdCZWUgVVNCIERldmljZSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODk0NikgfSwgLyogS2V0cmEgTjEgV2lyZWxlc3MgSW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IDBkYWQ4Y2UuLjFlYmIzNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC00NzAsNiArNDcwLDM5IEBACiAJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRkRfUElEKSB9LAogCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUZFX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFGRl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzQ3MDFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzAwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMwMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMDJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzAzX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMwNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMDVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzA2X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMwN19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMDhfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzA5X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMwQV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMEJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzBDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMwRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMEVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzBGX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMxMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMTFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzEyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMxM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMTRfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzE1X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMxNl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMTdfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzE4X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMxOV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMUFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzFCX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMxQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzkzMURfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV85MzFFX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfOTMxRl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BFUkxFX1VMVFJBUE9SVF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BJRUdST1VQX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVE5DX1hfUElEKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCmluZGV4IDY3ODZiNzAuLmU1MjQwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTkyNiw4ICs5MjYsOCBAQAogI2RlZmluZSBCQVlFUl9DT05UT1VSX0NBQkxFX1BJRCAgICAgICAgMHg2MDAxCiAKIC8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgRlRESSBSYW5nZQotICogQW55dGhpbmcgaW4gdGhpcyByYW5nZSB3aWxsIHVzZSBhbiBGVDIzMlJMLgorICogTWF0cml4IE9yYml0YWwgSW50ZWxsaWdlbnQgVVNCIGRpc3BsYXlzLgorICogaHR0cDovL3d3dy5tYXRyaXhvcmJpdGFsLmNvbQogICovCiAjZGVmaW5lIE1UWE9SQl9WSUQJCQkweDFCM0QKICNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMF9QSUQJMHgwMTAwCkBAIC0xMTg2LDggKzExODYsMzkgQEAKICNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRF9QSUQJMHgwMUZECiAjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkVfUElECTB4MDFGRQogI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZGX1BJRAkweDAxRkYKLQotCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzQ3MDFfUElECTB4NDcwMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzAwX1BJRAkweDkzMDAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMwMV9QSUQJMHg5MzAxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMDJfUElECTB4OTMwMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzAzX1BJRAkweDkzMDMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMwNF9QSUQJMHg5MzA0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMDVfUElECTB4OTMwNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzA2X1BJRAkweDkzMDYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMwN19QSUQJMHg5MzA3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMDhfUElECTB4OTMwOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzA5X1BJRAkweDkzMDkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMwQV9QSUQJMHg5MzBBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMEJfUElECTB4OTMwQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzBDX1BJRAkweDkzMEMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMwRF9QSUQJMHg5MzBECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMEVfUElECTB4OTMwRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzBGX1BJRAkweDkzMEYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMxMF9QSUQJMHg5MzEwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMTFfUElECTB4OTMxMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzEyX1BJRAkweDkzMTIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMxM19QSUQJMHg5MzEzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMTRfUElECTB4OTMxNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzE1X1BJRAkweDkzMTUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMxNl9QSUQJMHg5MzE2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMTdfUElECTB4OTMxNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzE4X1BJRAkweDkzMTgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMxOV9QSUQJMHg5MzE5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMUFfUElECTB4OTMxQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzFCX1BJRAkweDkzMUIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMxQ19QSUQJMHg5MzFDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzkzMURfUElECTB4OTMxRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV85MzFFX1BJRAkweDkzMUUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfOTMxRl9QSUQJMHg5MzFGCiAKIC8qCiAgKiBUaGUgTW9iaWxpdHkgTGFiIChUTUwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCA5M2NiN2NlLi4wNzdjNzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTMxMSwyNCArMzExLDMwIEBACiAJCWlmICgoZGF0YVswXSAmIDB4ODApID09IDApIHsKIAkJCS8qIG5vIGVycm9ycyBvbiBpbmRpdmlkdWFsIGJ5dGVzLCBvbmx5CiAJCQkgICBwb3NzaWJsZSBvdmVycnVuIGVyciAqLwotCQkJaWYgKGRhdGFbMF0gJiBSWEVSUk9SX09WRVJSVU4pCi0JCQkJZXJyID0gVFRZX09WRVJSVU47Ci0JCQllbHNlCi0JCQkJZXJyID0gMDsKKwkJCWlmIChkYXRhWzBdICYgUlhFUlJPUl9PVkVSUlVOKSB7CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoJnBvcnQtPnBvcnQsIDAsCisJCQkJCQkJCVRUWV9PVkVSUlVOKTsKKwkJCX0KIAkJCWZvciAoaSA9IDE7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpCi0JCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoJnBvcnQtPnBvcnQsIGRhdGFbaV0sIGVycik7CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoJnBvcnQtPnBvcnQsIGRhdGFbaV0sCisJCQkJCQkJCVRUWV9OT1JNQUwpOwogCQl9IGVsc2UgewogCQkJLyogc29tZSBieXRlcyBoYWQgZXJyb3JzLCBldmVyeSBieXRlIGhhcyBzdGF0dXMgKi8KIAkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gUlggZXJyb3IhISEhXG4iLCBfX2Z1bmNfXyk7CiAJCQlmb3IgKGkgPSAwOyBpICsgMSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSArPSAyKSB7Ci0JCQkJaW50IHN0YXQgPSBkYXRhW2ldLCBmbGFnID0gMDsKLQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfT1ZFUlJVTikKLQkJCQkJZmxhZyB8PSBUVFlfT1ZFUlJVTjsKLQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfRlJBTUlORykKLQkJCQkJZmxhZyB8PSBUVFlfRlJBTUU7Ci0JCQkJaWYgKHN0YXQgJiBSWEVSUk9SX1BBUklUWSkKLQkJCQkJZmxhZyB8PSBUVFlfUEFSSVRZOworCQkJCWludCBzdGF0ID0gZGF0YVtpXTsKKwkJCQlpbnQgZmxhZyA9IFRUWV9OT1JNQUw7CisKKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfT1ZFUlJVTikgeworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigmcG9ydC0+cG9ydCwgMCwKKwkJCQkJCQkJVFRZX09WRVJSVU4pOworCQkJCX0KIAkJCQkvKiBYWFggc2hvdWxkIGhhbmRsZSBicmVhayAoMHgxMCkgKi8KKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfUEFSSVRZKQorCQkJCQlmbGFnID0gVFRZX1BBUklUWTsKKwkJCQllbHNlIGlmIChzdGF0ICYgUlhFUlJPUl9GUkFNSU5HKQorCQkJCQlmbGFnID0gVFRZX0ZSQU1FOworCiAJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoJnBvcnQtPnBvcnQsIGRhdGFbaSsxXSwKIAkJCQkJCWZsYWcpOwogCQkJfQpAQCAtNjQ5LDE0ICs2NTUsMTkgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIHNvbWUgYnl0ZXMgaGFkIGVycm9ycywgZXZlcnkgYnl0ZSBoYXMgc3RhdHVzICovCiAJCQlmb3IgKGkgPSAwOyBpICsgMSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSArPSAyKSB7Ci0JCQkJaW50IHN0YXQgPSBkYXRhW2ldLCBmbGFnID0gMDsKLQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfT1ZFUlJVTikKLQkJCQkJZmxhZyB8PSBUVFlfT1ZFUlJVTjsKLQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfRlJBTUlORykKLQkJCQkJZmxhZyB8PSBUVFlfRlJBTUU7Ci0JCQkJaWYgKHN0YXQgJiBSWEVSUk9SX1BBUklUWSkKLQkJCQkJZmxhZyB8PSBUVFlfUEFSSVRZOworCQkJCWludCBzdGF0ID0gZGF0YVtpXTsKKwkJCQlpbnQgZmxhZyA9IFRUWV9OT1JNQUw7CisKKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfT1ZFUlJVTikgeworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigmcG9ydC0+cG9ydCwgMCwKKwkJCQkJCQkJVFRZX09WRVJSVU4pOworCQkJCX0KIAkJCQkvKiBYWFggc2hvdWxkIGhhbmRsZSBicmVhayAoMHgxMCkgKi8KKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfUEFSSVRZKQorCQkJCQlmbGFnID0gVFRZX1BBUklUWTsKKwkJCQllbHNlIGlmIChzdGF0ICYgUlhFUlJPUl9GUkFNSU5HKQorCQkJCQlmbGFnID0gVFRZX0ZSQU1FOworCiAJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoJnBvcnQtPnBvcnQsIGRhdGFbaSsxXSwKIAkJCQkJCWZsYWcpOwogCQkJfQpAQCAtNzEzLDE1ICs3MjQsMTkgQEAKIAkJCSAqLwogCQkJZm9yICh4ID0gMDsgeCArIDEgPCBsZW4gJiYKIAkJCQkgICAgaSArIDEgPCB1cmItPmFjdHVhbF9sZW5ndGg7IHggKz0gMikgewotCQkJCWludCBzdGF0ID0gZGF0YVtpXSwgZmxhZyA9IDA7CisJCQkJaW50IHN0YXQgPSBkYXRhW2ldOworCQkJCWludCBmbGFnID0gVFRZX05PUk1BTDsKIAotCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9PVkVSUlVOKQotCQkJCQlmbGFnIHw9IFRUWV9PVkVSUlVOOwotCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9GUkFNSU5HKQotCQkJCQlmbGFnIHw9IFRUWV9GUkFNRTsKLQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfUEFSSVRZKQotCQkJCQlmbGFnIHw9IFRUWV9QQVJJVFk7CisJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX09WRVJSVU4pIHsKKwkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoJnBvcnQtPnBvcnQsIDAsCisJCQkJCQkJCVRUWV9PVkVSUlVOKTsKKwkJCQl9CiAJCQkJLyogWFhYIHNob3VsZCBoYW5kbGUgYnJlYWsgKDB4MTApICovCisJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX1BBUklUWSkKKwkJCQkJZmxhZyA9IFRUWV9QQVJJVFk7CisJCQkJZWxzZSBpZiAoc3RhdCAmIFJYRVJST1JfRlJBTUlORykKKwkJCQkJZmxhZyA9IFRUWV9GUkFNRTsKKwogCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKCZwb3J0LT5wb3J0LCBkYXRhW2krMV0sCiAJCQkJCQkgICAgIGZsYWcpOwogCQkJCWkgKz0gMjsKQEAgLTc3MywyNSArNzg4LDMxIEBACiAJCQlpZiAoKGRhdGFbMF0gJiAweDgwKSA9PSAwKSB7CiAJCQkJLyogbm8gZXJyb3JzIG9uIGluZGl2aWR1YWwgYnl0ZXMsIG9ubHkKIAkJCQkgICBwb3NzaWJsZSBvdmVycnVuIGVyciovCi0JCQkJaWYgKGRhdGFbMF0gJiBSWEVSUk9SX09WRVJSVU4pCi0JCQkJCWVyciA9IFRUWV9PVkVSUlVOOwotCQkJCWVsc2UKLQkJCQkJZXJyID0gMDsKKwkJCQlpZiAoZGF0YVswXSAmIFJYRVJST1JfT1ZFUlJVTikgeworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigmcG9ydC0+cG9ydCwgMCwKKwkJCQkJCQkJVFRZX09WRVJSVU4pOworCQkJCX0KIAkJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKQogCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigmcG9ydC0+cG9ydCwKLQkJCQkJCQlkYXRhW2ldLCBlcnIpOworCQkJCQkJCWRhdGFbaV0sIFRUWV9OT1JNQUwpOwogCQkJfSAgZWxzZSB7CiAJCQkvKiBzb21lIGJ5dGVzIGhhZCBlcnJvcnMsIGV2ZXJ5IGJ5dGUgaGFzIHN0YXR1cyAqLwogCQkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gUlggZXJyb3IhISEhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZm9yIChpID0gMDsgaSArIDEgPCB1cmItPmFjdHVhbF9sZW5ndGg7IGkgKz0gMikgewotCQkJCQlpbnQgc3RhdCA9IGRhdGFbaV0sIGZsYWcgPSAwOwotCQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfT1ZFUlJVTikKLQkJCQkJCWZsYWcgfD0gVFRZX09WRVJSVU47Ci0JCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9GUkFNSU5HKQotCQkJCQkJZmxhZyB8PSBUVFlfRlJBTUU7Ci0JCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9QQVJJVFkpCi0JCQkJCQlmbGFnIHw9IFRUWV9QQVJJVFk7CisJCQkJCWludCBzdGF0ID0gZGF0YVtpXTsKKwkJCQkJaW50IGZsYWcgPSBUVFlfTk9STUFMOworCisJCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9PVkVSUlVOKSB7CisJCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigKKwkJCQkJCQkJJnBvcnQtPnBvcnQsIDAsCisJCQkJCQkJCVRUWV9PVkVSUlVOKTsKKwkJCQkJfQogCQkJCQkvKiBYWFggc2hvdWxkIGhhbmRsZSBicmVhayAoMHgxMCkgKi8KKwkJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX1BBUklUWSkKKwkJCQkJCWZsYWcgPSBUVFlfUEFSSVRZOworCQkJCQllbHNlIGlmIChzdGF0ICYgUlhFUlJPUl9GUkFNSU5HKQorCQkJCQkJZmxhZyA9IFRUWV9GUkFNRTsKKwogCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigmcG9ydC0+cG9ydCwKIAkJCQkJCQlkYXRhW2krMV0sIGZsYWcpOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwppbmRleCAzZDJiZDY1Li4wMmM0MjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCkBAIC0zMzUsNyArMzM1LDggQEAKIAkJCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuZ3RoOwogCiAJCQlwcml2LT5jdXJfcG9zID0gcHJpdi0+Y3VyX3BvcyArIGxlbmd0aDsKLQkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiLCBHRlBfTk9JTyk7CisJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYiwKKwkJCQkJR0ZQX0FUT01JQyk7CiAJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIFNlbmQgd3JpdGUgVVJCIHJldHVybnM6ICVpXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAkJCXRvZG8gPSBwcml2LT5maWxsZWQgLSBwcml2LT5jdXJfcG9zOwogCkBAIC0zNTAsNyArMzUxLDcgQEAKIAkJaWYgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEIHx8CiAJCQlwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkgewogCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwKLQkJCQkJCQkJR0ZQX05PSU8pOworCQkJCQlHRlBfQVRPTUlDKTsKIAkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gU2VuZCByZWFkIFVSQiByZXR1cm5zOiAlaVxuIiwgX19mdW5jX18sIHJlc3VsdCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwppbmRleCA0ODU2ZmI3Li40YjdiZmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCiAJLyogVGhlIGNvbm5lY3RlZCBkZXZpY2VzIGRvIG5vdCBoYXZlIGEgYnVsayB3cml0ZSBlbmRwb2ludCwKIAkgKiB0byB0cmFuc21pdCBkYXRhIHRvIGRlIGJhcmNvZGUgZGV2aWNlIHRoZSBjb250cm9sIGVuZHBvaW50IGlzIHVzZWQgKi8KLQlkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfTk9JTyk7CisJZHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFkcikgewogCQljb3VudCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3Jfbm9fZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3N1MTAwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3N1MTAwLmMKaW5kZXggYTdmZTY2NC4uNzBhMDk4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NzdTEwMC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zc3UxMDAuYwpAQCAtNDkwLDEwICs0OTAsOSBAQAogCQkJaWYgKCp0dHlfZmxhZyA9PSBUVFlfTk9STUFMKQogCQkJCSp0dHlfZmxhZyA9IFRUWV9GUkFNRTsKIAkJfQotCQlpZiAobHNyICYgVUFSVF9MU1JfT0UpeworCQlpZiAobHNyICYgVUFSVF9MU1JfT0UpIHsKIAkJCXBvcnQtPmljb3VudC5vdmVycnVuKys7Ci0JCQlpZiAoKnR0eV9mbGFnID09IFRUWV9OT1JNQUwpCi0JCQkJKnR0eV9mbGFnID0gVFRZX09WRVJSVU47CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigmcG9ydC0+cG9ydCwgMCwgVFRZX09WRVJSVU4pOwogCQl9CiAJfQogCkBAIC01MTEsMTIgKzUxMCw4IEBACiAJaWYgKChsZW4gPj0gNCkgJiYKIAkgICAgKHBhY2tldFswXSA9PSAweDFiKSAmJiAocGFja2V0WzFdID09IDB4MWIpICYmCiAJICAgICgocGFja2V0WzJdID09IDB4MDApIHx8IChwYWNrZXRbMl0gPT0gMHgwMSkpKSB7Ci0JCWlmIChwYWNrZXRbMl0gPT0gMHgwMCkgeworCQlpZiAocGFja2V0WzJdID09IDB4MDApCiAJCQlzc3UxMDBfdXBkYXRlX2xzcihwb3J0LCBwYWNrZXRbM10sICZmbGFnKTsKLQkJCWlmIChmbGFnID09IFRUWV9PVkVSUlVOKQotCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKCZwb3J0LT5wb3J0LCAwLAotCQkJCQkJVFRZX09WRVJSVU4pOwotCQl9CiAJCWlmIChwYWNrZXRbMl0gPT0gMHgwMSkKIAkJCXNzdTEwMF91cGRhdGVfbXNyKHBvcnQsIHBhY2tldFszXSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYwppbmRleCBlMDhmNjQ3Li42NmE2ODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5jCkBAIC0xNjQsMTAgKzE2NCwxMCBAQAogCQkJIHVuc2lnbmVkIGNoYXIgYXNjLAogCQkJIHVuc2lnbmVkIGNoYXIgYXNjcSkKIHsKLQljb25zdCBjaGFyICp3aGF0LCAqa2V5c3RyOworCWNvbnN0IGNoYXIgKndoYXQsICprZXlzdHIsICpmbXQ7CiAKIAlrZXlzdHIgPSBzY3NpX3NlbnNlX2tleV9zdHJpbmcoa2V5KTsKLQl3aGF0ID0gc2NzaV9leHRkX3NlbnNlX2Zvcm1hdChhc2MsIGFzY3EpOworCXdoYXQgPSBzY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KGFzYywgYXNjcSwgJmZtdCk7CiAKIAlpZiAoa2V5c3RyID09IE5VTEwpCiAJCWtleXN0ciA9ICIoVW5rbm93biBLZXkpIjsKQEAgLTE3NSw4ICsxNzUsMTAgQEAKIAkJd2hhdCA9ICIodW5rbm93biBBU0MvQVNDUSkiOwogCiAJdXNiX3N0b3JfZGJnKHVzLCAiJXM6ICIsIGtleXN0cik7Ci0JVVNfREVCVUdQWCh3aGF0LCBhc2NxKTsKLQlVU19ERUJVR1BYKCJcbiIpOworCWlmIChmbXQpCisJCVVTX0RFQlVHUFgoIiVzICglcyV4KVxuIiwgd2hhdCwgZm10LCBhc2NxKTsKKwllbHNlCisJCVVTX0RFQlVHUFgoIiVzXG4iLCB3aGF0KTsKIH0KIAogaW50IHVzYl9zdG9yX2RiZyhjb25zdCBzdHJ1Y3QgdXNfZGF0YSAqdXMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMKaW5kZXggNGJjMmZjOS4uNzNmMTI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCkBAIC01Miw3ICs1Miw3IEBACiAJdXMtPmlvYnVmWzBdID0gMHgxOwogCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCiAJCQkweDBDLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfVkVORE9SLAotCQkJMHgwMSwgMHgwLCB1cy0+aW9idWYsIDB4MSwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCQkJMHgwMSwgMHgwLCB1cy0+aW9idWYsIDB4MSwgNSAqIEhaKTsKIAl1c2Jfc3Rvcl9kYmcodXMsICItLSByZXN1bHQgaXMgJWRcbiIsIHJlc3VsdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCiAJCQkJICAgICAgVVNCX1JFUV9TRVRfRkVBVFVSRSwKIAkJCQkgICAgICBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkJICAgICAgMHgwMSwgMHgwLCBOVUxMLCAweDAsIDEwMDApOworCQkJCSAgICAgIDB4MDEsIDB4MCwgTlVMTCwgMHgwLCAxICogSFopOwogCXVzYl9zdG9yX2RiZyh1cywgIkh1YXdlaSBtb2RlIHNldCByZXN1bHQgaXMgJWRcbiIsIHJlc3VsdCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3JlYWx0ZWtfY3IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcmVhbHRla19jci5jCmluZGV4IDg1OTFkODkuLjI3ZTRhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcmVhbHRla19jci5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcmVhbHRla19jci5jCkBAIC02MjYsNiArNjI2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBjb25maWdfYXV0b2RlbGlua19iZWZvcmVfcG93ZXJfZG93bihzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwID0gKHN0cnVjdCBydHM1MXhfY2hpcCAqKSh1cy0+ZXh0cmEpOwpAQCAtNzE2LDYgKzcxNyw3IEBACiAJCX0KIAl9CiB9CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19SRUFMVEVLX0FVVE9QTQogc3RhdGljIHZvaWQgZnc1ODk1X3NldF9tbWNfd3Aoc3RydWN0IHVzX2RhdGEgKnVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggMjJjN2Q0My4uYjFkODE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC0xMTE4LDYgKzExMTgsMzEgQEAKIAkJICovCiAJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9MT05HKQogCQkJZmFrZV9zZW5zZSA9IDE7CisKKwkJLyoKKwkJICogU29tZXRpbWVzIGEgZGV2aWNlIHdpbGwgbWlzdGFrZW5seSBza2lwIHRoZSBkYXRhIHBoYXNlCisJCSAqIGFuZCBnbyBkaXJlY3RseSB0byB0aGUgc3RhdHVzIHBoYXNlIHdpdGhvdXQgc2VuZGluZyBhCisJCSAqIHplcm8tbGVuZ3RoIHBhY2tldC4gIElmIHdlIGdldCBhIDEzLWJ5dGUgcmVzcG9uc2UgaGVyZSwKKwkJICogY2hlY2sgd2hldGhlciBpdCByZWFsbHkgaXMgYSBDU1cuCisJCSAqLworCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU0hPUlQgJiYKKwkJCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSAmJgorCQkJCXRyYW5zZmVyX2xlbmd0aCAtIHNjc2lfZ2V0X3Jlc2lkKHNyYikgPT0KKwkJCQkJVVNfQlVMS19DU19XUkFQX0xFTikgeworCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IE5VTEw7CisJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKworCQkJaWYgKHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZigodW5zaWduZWQgY2hhciAqKSBiY3MsCisJCQkJCVVTX0JVTEtfQ1NfV1JBUF9MRU4sIHNyYiwgJnNnLAorCQkJCQkmb2Zmc2V0LCBGUk9NX1hGRVJfQlVGKSA9PQorCQkJCQkJVVNfQlVMS19DU19XUkFQX0xFTiAmJgorCQkJCQliY3MtPlNpZ25hdHVyZSA9PQorCQkJCQkJY3B1X3RvX2xlMzIoVVNfQlVMS19DU19TSUdOKSkgeworCQkJCXVzYl9zdG9yX2RiZyh1cywgIkRldmljZSBza2lwcGVkIGRhdGEgcGhhc2VcbiIpOworCQkJCXNjc2lfc2V0X3Jlc2lkKHNyYiwgdHJhbnNmZXJfbGVuZ3RoKTsKKwkJCQlnb3RvIHNraXBwZWRfZGF0YV9waGFzZTsKKwkJCX0KKwkJfQogCX0KIAogCS8qIFNlZSBmbG93IGNoYXJ0IG9uIHBnIDE1IG9mIHRoZSBCdWxrIE9ubHkgVHJhbnNwb3J0IHNwZWMgZm9yCkBAIC0xMTUzLDYgKzExNzgsNyBAQAogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCisgc2tpcHBlZF9kYXRhX3BoYXNlOgogCS8qIGNoZWNrIGJ1bGsgc3RhdHVzICovCiAJcmVzaWR1ZSA9IGxlMzJfdG9fY3B1KGJjcy0+UmVzaWR1ZSk7CiAJdXNiX3N0b3JfZGJnKHVzLCAiQnVsayBTdGF0dXMgUyAweCV4IFQgMHgleCBSICV1IFN0YXQgMHgleFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jCmluZGV4IDg5YjI0MzQuLjQwNDdlZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiB7CiAJaW50IHRhZzsKIAotCWlmIChibGtfcnFfdGFnZ2VkKGNtbmQtPnJlcXVlc3QpKQorCWlmIChjbW5kLT5mbGFncyAmIFNDTURfVEFHR0VEKQogCQl0YWcgPSBjbW5kLT5yZXF1ZXN0LT50YWcgKyAyOwogCWVsc2UKIAkJdGFnID0gMTsKQEAgLTc5OSw4ICs3OTksNyBAQAogCWlmIChkZXZpbmZvLT5mbGFncyAmIFVTX0ZMX05PX1JFUE9SVF9PUENPREVTKQogCQlzZGV2LT5ub19yZXBvcnRfb3Bjb2RlcyA9IDE7CiAKLQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfT1JERVJFRF9UQUcpOwotCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIGRldmluZm8tPnFkZXB0aCAtIDIpOworCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRldmluZm8tPnFkZXB0aCAtIDIpOwogCXJldHVybiAwOwogfQogCkBAIC04MTcsNyArODE2LDYgQEAKIAkuc2dfdGFibGVzaXplID0gU0dfTk9ORSwKIAkuY21kX3Blcl9sdW4gPSAxLAkvKiB1bnRpbCB3ZSBvdmVycmlkZSBpdCAqLwogCS5za2lwX3NldHRsZV9kZWxheSA9IDEsCi0JLm9yZGVyZWRfdGFnID0gMSwKIAogCS8qCiAJICogVGhlIHVhcyBkcml2ZXJzIGV4cGVjdHMgdGFncyBub3QgdG8gYmUgYmlnZ2VyIHRoYW4gdGhlIG1heGltdW0KQEAgLTgyNSw2ICs4MjMsNyBAQAogCSAqIGFsbG9jYXRvci4KIAkgKi8KIAkuZGlzYWJsZV9ibGtfbXEgPSB0cnVlLAorCS51c2VfYmxrX3RhZ3MgPSAxLAogfTsKIAogI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdWFzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdWFzLmgKaW5kZXggODUxMWI1NC4uMThhMjgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3Vhcy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91YXMuaApAQCAtNTQsNiArNTQsMjAgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9fQVRBXzFYKSwKIAorLyogUmVwb3J0ZWQtYnk6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+ICovCitVTlVTVUFMX0RFVigweDBiYzIsIDB4MzMyMCwgMHgwMDAwLCAweDk5OTksCisJCSJTZWFnYXRlIiwKKwkJIkV4cGFuc2lvbiBEZXNrIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfTk9fQVRBXzFYKSwKKworLyogUmVwb3J0ZWQtYnk6IEJvZ2RhbiBNaWhhbGNlYSA8Ym9nZGFuLm1paGFsY2VhQGluZmltLnJvPiAqLworVU5VU1VBTF9ERVYoMHgwYmMyLCAweGEwMDMsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2VhZ2F0ZSIsCisJCSJCYWNrdXAgUGx1cyIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX0FUQV8xWCksCisKIC8qIGh0dHBzOi8vYmJzLmFyY2hsaW51eC5vcmcvdmlld3RvcGljLnBocD9pZD0xODMxOTAgKi8KIFVOVVNVQUxfREVWKDB4MGJjMiwgMHhhYjIwLCAweDAwMDAsIDB4OTk5OSwKIAkJIlNlYWdhdGUiLApAQCAtNjEsNiArNzUsMTMgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9fQVRBXzFYKSwKIAorLyogaHR0cHM6Ly9iYnMuYXJjaGxpbnV4Lm9yZy92aWV3dG9waWMucGhwP2lkPTE4MzE5MCAqLworVU5VU1VBTF9ERVYoMHgwYmMyLCAweGFiMjEsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2VhZ2F0ZSIsCisJCSJCYWNrdXArIEJLIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfTk9fQVRBXzFYKSwKKwogLyogUmVwb3J0ZWQtYnk6IENsYXVkaW8gQml6emFycmkgPGNsYXVkaW8uYml6emFycmlAZ21haWwuY29tPiAqLwogVU5VU1VBTF9ERVYoMHgxNTJkLCAweDA1NjcsIDB4MDAwMCwgMHg5OTk5LAogCQkiSk1pY3JvbiIsCkBAIC03NSwzICs5NiwxNyBAQAogCQkiQVNNMTA1MSIsCiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9VQVMpLAorCisvKiBSZXBvcnRlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4gKi8KK1VOVVNVQUxfREVWKDB4MjEwOSwgMHgwNzExLCAweDAwMDAsIDB4OTk5OSwKKwkJIlZJQSIsCisJCSJWTDcxMSIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX0FUQV8xWCksCisKKy8qIFJlcG9ydGVkLWJ5OiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPiAqLworVU5VU1VBTF9ERVYoMHg0OTcxLCAweDEwMTIsIDB4MDAwMCwgMHg5OTk5LAorCQkiSGl0YWNoaSIsCisJCSJFeHRlcm5hbCBIREQiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfVUFTKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfaW50cnMuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfaW50cnMuYwppbmRleCA1NTMyMTJmLi5lOGQ2OTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2ludHJzLmMKKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9pbnRycy5jCkBAIC01NjAsNyArNTYwLDcgQEAKIAkJc3RydWN0IG1zaV9tc2cgbXNnOwogCiAJCWdldF9jYWNoZWRfbXNpX21zZyhpcnEsICZtc2cpOwotCQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAJfQogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB2ZmlvX21zaWhhbmRsZXIsIDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCmluZGV4IDY5OTA2Y2EuLmExN2YxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCkBAIC0xMzEyLDYgKzEzMTIsNyBAQAogdmhvc3Rfc2NzaV9zZXRfZW5kcG9pbnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLAogCQkJc3RydWN0IHZob3N0X3Njc2lfdGFyZ2V0ICp0KQogeworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZzsKIAlzdHJ1Y3QgdGNtX3Zob3N0X3Rwb3J0ICp0dl90cG9ydDsKIAlzdHJ1Y3QgdGNtX3Zob3N0X3RwZyAqdHBnOwogCXN0cnVjdCB0Y21fdmhvc3RfdHBnICoqdnNfdHBnOwpAQCAtMTM1OSw2ICsxMzYwLDIxIEBACiAJCQkJcmV0ID0gLUVFWElTVDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KKwkJCS8qCisJCQkgKiBJbiBvcmRlciB0byBlbnN1cmUgaW5kaXZpZHVhbCB2aG9zdC1zY3NpIGNvbmZpZ2ZzCisJCQkgKiBncm91cHMgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgaW4gdXNlIGJ5IHZob3N0IGlvY3RsLAorCQkJICogZ28gYWhlYWQgYW5kIHRha2UgYW4gZXhwbGljaXQgc2VfdHBnLT50cGdfZ3JvdXAuY2dfaXRlbQorCQkJICogZGVwZW5kZW5jeSBub3cuCisJCQkgKi8KKwkJCXNlX3RwZyA9ICZ0cGctPnNlX3RwZzsKKwkJCXJldCA9IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHNlX3RwZy0+c2VfdHBnX3Rmby0+dGZfc3Vic3lzLAorCQkJCQkJICAgJnNlX3RwZy0+dHBnX2dyb3VwLmNnX2l0ZW0pOworCQkJaWYgKHJldCkgeworCQkJCXByX3dhcm4oImNvbmZpZ2ZzX2RlcGVuZF9pdGVtKCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJCQlrZnJlZSh2c190cGcpOworCQkJCW11dGV4X3VubG9jaygmdHBnLT50dl90cGdfbXV0ZXgpOworCQkJCWdvdG8gb3V0OworCQkJfQogCQkJdHBnLT50dl90cGdfdmhvc3RfY291bnQrKzsKIAkJCXRwZy0+dmhvc3Rfc2NzaSA9IHZzOwogCQkJdnNfdHBnW3RwZy0+dHBvcnRfdHBndF0gPSB0cGc7CkBAIC0xNDAxLDYgKzE0MTcsNyBAQAogdmhvc3Rfc2NzaV9jbGVhcl9lbmRwb2ludChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsCiAJCQkgIHN0cnVjdCB2aG9zdF9zY3NpX3RhcmdldCAqdCkKIHsKKwlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGc7CiAJc3RydWN0IHRjbV92aG9zdF90cG9ydCAqdHZfdHBvcnQ7CiAJc3RydWN0IHRjbV92aG9zdF90cGcgKnRwZzsKIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsKQEAgLTE0NDksNiArMTQ2NiwxMyBAQAogCQl2cy0+dnNfdHBnW3RhcmdldF0gPSBOVUxMOwogCQltYXRjaCA9IHRydWU7CiAJCW11dGV4X3VubG9jaygmdHBnLT50dl90cGdfbXV0ZXgpOworCQkvKgorCQkgKiBSZWxlYXNlIHNlX3RwZy0+dHBnX2dyb3VwLmNnX2l0ZW0gY29uZmlnZnMgZGVwZW5kZW5jeSBub3cKKwkJICogdG8gYWxsb3cgdmhvc3Qtc2NzaSBXV1BOIHNlX3RwZy0+dHBnX2dyb3VwIHNodXRkb3duIHRvIG9jY3VyLgorCQkgKi8KKwkJc2VfdHBnID0gJnRwZy0+c2VfdHBnOworCQljb25maWdmc191bmRlcGVuZF9pdGVtKHNlX3RwZy0+c2VfdHBnX3Rmby0+dGZfc3Vic3lzLAorCQkJCSAgICAgICAmc2VfdHBnLT50cGdfZ3JvdXAuY2dfaXRlbSk7CiAJfQogCWlmIChtYXRjaCkgewogCQlmb3IgKGkgPSAwOyBpIDwgVkhPU1RfU0NTSV9NQVhfVlE7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggOGQwMzkyNC4uZWZiMDkwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC0xNjgsNyArMTY4LDYgQEAKIGNvbmZpZyBCQUNLTElHSFRfQVRNRUxfTENEQwogCWJvb2wgIkF0bWVsIExDREMgQ29udHJhc3QtYXMtQmFja2xpZ2h0IGNvbnRyb2wiCiAJZGVwZW5kcyBvbiBGQl9BVE1FTAotCWRlZmF1bHQgeSBpZiBNQUNIX0FUOTFTQU05MjYxRUsgfHwgTUFDSF9BVDkxU0FNOUcxMEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSwogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgYSBiYWNrbGlnaHQgY29udHJvbCBpbnRlcm5hbCB0byB0aGUgQXRtZWwgTENEQwogCSAgZHJpdmVyLiAgSWYgdGhlIExDRCAiY29udHJhc3QgY29udHJvbCIgb24geW91ciBib2FyZCBpcyB3aXJlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnIGIvZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnCmluZGV4IGM3YmY2MDYuLmM3OGJmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcKQEAgLTk5OSwyMyArOTk5LDYgQEAKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFUOTEvQVQzMiBMQ0QgQ29udHJvbGxlci4KIAotY29uZmlnIEZCX0lOVFNSQU0KLQlib29sICJGcmFtZSBCdWZmZXIgaW4gaW50ZXJuYWwgU1JBTSIKLQlkZXBlbmRzIG9uIEZCX0FUTUVMICYmIEFSQ0hfQVQ5MVNBTTkyNjEKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBtYXAgRnJhbWUgQnVmZmVyIGluIGludGVybmFsIFNSQU0uIFNheSBOIGlmIHlvdSB3YW50Ci0JICB0byBsZXQgZnJhbWUgYnVmZmVyIGluIGV4dGVybmFsIFNEUkFNLgotCi1jb25maWcgRkJfQVRNRUxfU1ROCi0JYm9vbCAiVXNlIGEgU1ROIGRpc3BsYXkgd2l0aCBBVDkxL0FUMzIgTENEIENvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBGQl9BVE1FTCAmJiAoTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTlHMTBFSykKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgU1ROIExDRCBkaXNwbGF5IHRvIHRoZSBBVDkxL0FUMzIgTENECi0JICBDb250cm9sbGVyLiBTYXkgTiBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVEZULgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgRkJfTlZJRElBCiAJdHJpc3RhdGUgIm5WaWRpYSBGcmFtZWJ1ZmZlciBTdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2diZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2diZWZiLmMKaW5kZXggNGFhNTZiYS4uNmQ5ZWYzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvZ2JlZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2diZWZiLmMKQEAgLTU0LDcgKzU0LDggQEAKICNlbmRpZgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4NgotI2RlZmluZSBwZ3Byb3RfZmIoX3Byb3QpICgoX3Byb3QpIHwgX1BBR0VfUENEKQorI2RlZmluZSBwZ3Byb3RfZmIoX3Byb3QpICgoKF9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLKSB8CVwKKwkJCSAgY2FjaGVtb2RlMnByb3R2YWwoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUykpCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvdmVybWlsaW9uL3Zlcm1pbGlvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi92ZXJtaWxpb24vdmVybWlsaW9uLmMKaW5kZXggNWY5MzBhZS4uNmI3MGQ3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi92ZXJtaWxpb24vdmVybWlsaW9uLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi92ZXJtaWxpb24vdmVybWlsaW9uLmMKQEAgLTEwMDMsMTMgKzEwMDMsMTUgQEAKIAlzdHJ1Y3Qgdm1sX2luZm8gKnZpbmZvID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB2bWxfaW5mbywgaW5mbyk7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHByb3Q7CiAKIAlyZXQgPSB2bWxmYl92cmFtX29mZnNldCh2aW5mbywgb2Zmc2V0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX1BDRDsKLQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmPSB+X1BBR0VfUFdUOworCXByb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLOworCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpID0KKwkJcHJvdCB8IGNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpOwogCiAJcmV0dXJuIHZtX2lvbWFwX21lbW9yeSh2bWEsIHZpbmZvLT52cmFtX3N0YXJ0LAogCQkJdmluZm8tPnZyYW1fY29udGlnX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwppbmRleCA5OTAwZThlLi4wMzMyMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwpAQCAtNzIsMTEgKzcyLDE4IEBACiBzdGF0aWMgaW50IG9tYXBfaGRxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogc3RhdGljIGludCBvbWFwX2hkcV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9tYXBfaGRxX2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDMtMXciIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvbWFwX2hkcV9kdF9pZHMpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2hkcV9kcml2ZXIgPSB7CiAJLnByb2JlID0Jb21hcF9oZHFfcHJvYmUsCiAJLnJlbW92ZSA9CW9tYXBfaGRxX3JlbW92ZSwKIAkuZHJpdmVyID0JewogCQkubmFtZSA9CSJvbWFwX2hkcSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9tYXBfaGRxX2R0X2lkcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IGQwMTA3ZDQuLjA4ZjQxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTE1NCwxNCArMTU0LDE0IEBACiAKIGNvbmZpZyBBVDkxUk05MjAwX1dBVENIRE9HCiAJdHJpc3RhdGUgIkFUOTFSTTkyMDAgd2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKKwlkZXBlbmRzIG9uIFNPQ19BVDkxUk05MjAwCiAJaGVscAogCSAgV2F0Y2hkb2cgdGltZXIgZW1iZWRkZWQgaW50byBBVDkxUk05MjAwIGNoaXBzLiBUaGlzIHdpbGwgcmVib290IHlvdXIKIAkgIHN5c3RlbSB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuCiAKIGNvbmZpZyBBVDkxU0FNOVhfV0FUQ0hET0cKIAl0cmlzdGF0ZSAiQVQ5MVNBTTlYIC8gQVQ5MUNBUDkgd2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVJNOTIwMAorCWRlcGVuZHMgb24gQVJDSF9BVDkxCiAJc2VsZWN0IFdBVENIRE9HX0NPUkUKIAloZWxwCiAJICBXYXRjaGRvZyB0aW1lciBlbWJlZGRlZCBpbnRvIEFUOTFTQU05WCBhbmQgQVQ5MUNBUDkgY2hpcHMuIFRoaXMgd2lsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb25fd2R0LmMKaW5kZXggMDBkMDc0MS4uOGNiMWZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29yaW9uX3dkdC5jCkBAIC0xMTQsNiArMTE0LDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXJtYWRhMzc1X3dkdF9jbG9ja19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJICAgIHN0cnVjdCBvcmlvbl93YXRjaGRvZyAqZGV2KQoreworCWludCByZXQ7CisKKwlkZXYtPmNsayA9IG9mX2Nsa19nZXRfYnlfbmFtZShwZGV2LT5kZXYub2Zfbm9kZSwgImZpeGVkIik7CisJaWYgKCFJU19FUlIoZGV2LT5jbGspKSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCWNsa19wdXQoZGV2LT5jbGspOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWF0b21pY19pb19tb2RpZnkoZGV2LT5yZWcgKyBUSU1FUl9DVFJMLAorCQkJCVdEVF9BWFBfRklYRURfRU5BQkxFX0JJVCwKKwkJCQlXRFRfQVhQX0ZJWEVEX0VOQUJMRV9CSVQpOworCQlkZXYtPmNsa19yYXRlID0gY2xrX2dldF9yYXRlKGRldi0+Y2xrKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBNYW5kYXRvcnkgZmFsbGJhY2sgZm9yIHByb3BlciBkZXZpY2V0cmVlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwlkZXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkZXYtPmNsaykpCisJCXJldHVybiBQVFJfRVJSKGRldi0+Y2xrKTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsayk7CisJaWYgKHJldCkgeworCQljbGtfcHV0KGRldi0+Y2xrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhdG9taWNfaW9fbW9kaWZ5KGRldi0+cmVnICsgVElNRVJfQ1RSTCwKKwkJCVdEVF9BMzcwX1JBVElPX01BU0soV0RUX0EzNzBfUkFUSU9fU0hJRlQpLAorCQkJV0RUX0EzNzBfUkFUSU9fTUFTSyhXRFRfQTM3MF9SQVRJT19TSElGVCkpOworCWRldi0+Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZGV2LT5jbGspIC8gV0RUX0EzNzBfUkFUSU87CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhcm1hZGF4cF93ZHRfY2xvY2tfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCSAgIHN0cnVjdCBvcmlvbl93YXRjaGRvZyAqZGV2KQogewpAQCAtMzk0LDcgKzQzNCw3IEBACiAJLnJzdG91dF9tYXNrX2JpdCA9IEJJVCgxMCksCiAJLndkdF9lbmFibGVfYml0ID0gQklUKDgpLAogCS53ZHRfY291bnRlcl9vZmZzZXQgPSAweDM0LAotCS5jbG9ja19pbml0ID0gYXJtYWRhMzcwX3dkdF9jbG9ja19pbml0LAorCS5jbG9ja19pbml0ID0gYXJtYWRhMzc1X3dkdF9jbG9ja19pbml0LAogCS5lbmFibGVkID0gYXJtYWRhMzc1X2VuYWJsZWQsCiAJLnN0YXJ0ID0gYXJtYWRhMzc1X3N0YXJ0LAogCS5zdG9wID0gYXJtYWRhMzc1X3N0b3AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKaW5kZXggODUzMmMzZS4uMTYyNmRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHMzYzI0MTBfd2R0X3ZhcmlhbnQgZHJ2X2RhdGFfZXh5bm9zNyA9IHsKIAkuZGlzYWJsZV9yZWcgPSBFWFlOT1M1X1dEVF9ESVNBQkxFX1JFR19PRkZTRVQsCiAJLm1hc2tfcmVzZXRfcmVnID0gRVhZTk9TNV9XRFRfTUFTS19SRVNFVF9SRUdfT0ZGU0VULAotCS5tYXNrX2JpdCA9IDAsCisJLm1hc2tfYml0ID0gMjMsCiAJLnJzdF9zdGF0X3JlZyA9IEVYWU5PUzVfUlNUX1NUQVRfUkVHX09GRlNFVCwKIAkucnN0X3N0YXRfYml0ID0gMjMsCS8qIEE1NyBXRFRSRVNFVCAqLwogCS5xdWlya3MgPSBRVUlSS19IQVNfUE1VX0NPTkZJRyB8IFFVSVJLX0hBU19SU1RfU1RBVCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2VmaS5jIGIvZHJpdmVycy94ZW4vZWZpLmMKaW5kZXggMWY4NTBjOS4uZjc0NWRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZWZpLmMKKysrIGIvZHJpdmVycy94ZW4vZWZpLmMKQEAgLTI5NCw2ICsyOTQsNyBAQAogCS5hY3BpICAgICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5hY3BpMjAgICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5zbWJpb3MgICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAorCS5zbWJpb3MzICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5zYWxfc3lzdGFiICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5ib290X2luZm8gICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5oY2RwICAgICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuLXNjc2liYWNrLmMgYi9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYwppbmRleCAzZTMyMTQ2Li41MDYxMGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYworKysgYi9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYwpAQCAtMjc0LDEwICsyNzQsNiBAQAogCSAgICAgICB0cGctPnRwb3J0LT50cG9ydF9uYW1lLCBwZW5kaW5nX3JlcS0+djJwLT5sdW4sCiAJICAgICAgIHBlbmRpbmdfcmVxLT5jbW5kWzBdLCBzdGF0dXNfYnl0ZShlcnJvcnMpLCBtc2dfYnl0ZShlcnJvcnMpLAogCSAgICAgICBob3N0X2J5dGUoZXJyb3JzKSwgZHJpdmVyX2J5dGUoZXJyb3JzKSk7Ci0KLQlpZiAoQ0hFQ0tfQ09ORElUSU9OICYgc3RhdHVzX2J5dGUoZXJyb3JzKSkKLQkJX19zY3NpX3ByaW50X3NlbnNlKCJ4ZW4tcHZzY3NpIiwgc2Vuc2VfYnVmZmVyLAotCQkJCSAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNjc2liYWNrX2Zhc3RfZmx1c2hfYXJlYShzdHJ1Y3QgdnNjc2lia19wZW5kICpyZXEpCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IDM0YTFiOWRlLi5kYTBiYmI0IDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtMTA0LDcgKzEwNCw3IEBACiBvYmotJChDT05GSUdfQVVUT0ZTNF9GUykJKz0gYXV0b2ZzNC8KIG9iai0kKENPTkZJR19BREZTX0ZTKQkJKz0gYWRmcy8KIG9iai0kKENPTkZJR19GVVNFX0ZTKQkJKz0gZnVzZS8KLW9iai0kKENPTkZJR19PVkVSTEFZRlNfRlMpCSs9IG92ZXJsYXlmcy8KK29iai0kKENPTkZJR19PVkVSTEFZX0ZTKQkrPSBvdmVybGF5ZnMvCiBvYmotJChDT05GSUdfVURGX0ZTKQkJKz0gdWRmLwogb2JqLSQoQ09ORklHX1NVTl9PUEVOUFJPTUZTKQkrPSBvcGVucHJvbWZzLwogb2JqLSQoQ09ORklHX09NRlNfRlMpCQkrPSBvbWZzLwpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCA4NGE3NTEwLi4xNGI5MzE1IDEwMDY0NAotLS0gYS9mcy9haW8uYworKysgYi9mcy9haW8uYwpAQCAtMTY1LDYgKzE2NSwxNSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWlvX3JpbmdfZm9wczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFpb19jdHhfYW9wczsKIAorLyogQmFja2luZyBkZXYgaW5mbyBmb3IgYWlvIGZzLgorICogLW5vIGRpcnR5IHBhZ2UgYWNjb3VudGluZyBvciB3cml0ZWJhY2sgaGFwcGVucworICovCitzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gYWlvX2ZzX2JhY2tpbmdfZGV2X2luZm8gPSB7CisJLm5hbWUgICAgICAgICAgID0gImFpb2ZzIiwKKwkuc3RhdGUgICAgICAgICAgPSAwLAorCS5jYXBhYmlsaXRpZXMgICA9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLIHwgQkRJX0NBUF9NQVBfQ09QWSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqYWlvX3ByaXZhdGVfZmlsZShzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvZmZfdCBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgcXN0ciB0aGlzID0gUVNUUl9JTklUKCJbYWlvXSIsIDUpOwpAQCAtMTc2LDYgKzE4NSw3IEBACiAKIAlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZhaW9fY3R4X2FvcHM7CiAJaW5vZGUtPmlfbWFwcGluZy0+cHJpdmF0ZV9kYXRhID0gY3R4OworCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmYWlvX2ZzX2JhY2tpbmdfZGV2X2luZm87CiAJaW5vZGUtPmlfc2l6ZSA9IFBBR0VfU0laRSAqIG5yX3BhZ2VzOwogCiAJcGF0aC5kZW50cnkgPSBkX2FsbG9jX3BzZXVkbyhhaW9fbW50LT5tbnRfc2IsICZ0aGlzKTsKQEAgLTIyMCw2ICsyMzAsOSBAQAogCWlmIChJU19FUlIoYWlvX21udCkpCiAJCXBhbmljKCJGYWlsZWQgdG8gY3JlYXRlIGFpbyBmcyBtb3VudC4iKTsKIAorCWlmIChiZGlfaW5pdCgmYWlvX2ZzX2JhY2tpbmdfZGV2X2luZm8pKQorCQlwYW5pYygiRmFpbGVkIHRvIGluaXQgYWlvIGZzIGJhY2tpbmcgZGV2IGluZm8uIik7CisKIAlraW9jYl9jYWNoZXAgPSBLTUVNX0NBQ0hFKGtpb2NiLCBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQyk7CiAJa2lvY3R4X2NhY2hlcCA9IEtNRU1fQ0FDSEUoa2lvY3R4LFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDKTsKIApAQCAtMjgxLDExICsyOTQsNiBAQAogCS5tbWFwID0gYWlvX3JpbmdfbW1hcCwKIH07CiAKLXN0YXRpYyBpbnQgYWlvX3NldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKQotewotCXJldHVybiAwOwotfQotCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTUlHUkFUSU9OKQogc3RhdGljIGludCBhaW9fbWlncmF0ZXBhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBwYWdlICpuZXcsCiAJCQlzdHJ1Y3QgcGFnZSAqb2xkLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKQpAQCAtMzU3LDcgKzM2NSw3IEBACiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWlvX2N0eF9hb3BzID0gewotCS5zZXRfcGFnZV9kaXJ0eSA9IGFpb19zZXRfcGFnZV9kaXJ0eSwKKwkuc2V0X3BhZ2VfZGlydHkgPSBfX3NldF9wYWdlX2RpcnR5X25vX3dyaXRlYmFjaywKICNpZiBJU19FTkFCTEVEKENPTkZJR19NSUdSQVRJT04pCiAJLm1pZ3JhdGVwYWdlCT0gYWlvX21pZ3JhdGVwYWdlLAogI2VuZGlmCkBAIC00MTIsNyArNDIwLDYgQEAKIAkJcHJfZGVidWcoInBpZCglZCkgcGFnZVslZF0tPmNvdW50PSVkXG4iLAogCQkJIGN1cnJlbnQtPnBpZCwgaSwgcGFnZV9jb3VudChwYWdlKSk7CiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJU2V0UGFnZURpcnR5KHBhZ2UpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAogCQljdHgtPnJpbmdfcGFnZXNbaV0gPSBwYWdlOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY29tcHJlc3Npb24uYyBiL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMKaW5kZXggZDMyMjBkMy4uZGNkOWJlMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY29tcHJlc3Npb24uYworKysgYi9mcy9idHJmcy9jb21wcmVzc2lvbi5jCkBAIC0xMDExLDggKzEwMTEsNiBAQAogCQlieXRlcyA9IG1pbihieXRlcywgd29ya2luZ19ieXRlcyk7CiAJCWthZGRyID0ga21hcF9hdG9taWMocGFnZV9vdXQpOwogCQltZW1jcHkoa2FkZHIgKyAqcGdfb2Zmc2V0LCBidWYgKyBidWZfb2Zmc2V0LCBieXRlcyk7Ci0JCWlmICgqcGdfaW5kZXggPT0gKHZjbnQgLSAxKSAmJiAqcGdfb2Zmc2V0ID09IDApCi0JCQltZW1zZXQoa2FkZHIgKyBieXRlcywgMCwgUEFHRV9DQUNIRV9TSVpFIC0gYnl0ZXMpOwogCQlrdW5tYXBfYXRvbWljKGthZGRyKTsKIAkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9vdXQpOwogCkBAIC0xMDU0LDMgKzEwNTIsMzQgQEAKIAogCXJldHVybiAxOwogfQorCisvKgorICogV2hlbiB1bmNvbXByZXNzaW5nIGRhdGEsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGFuZCB6ZXJvIGFueSBwYXJ0cyBvZgorICogdGhlIGJpb3ZlYyB0aGF0IHdlcmUgbm90IGZpbGxlZCBpbiBieSB0aGUgZGVjb21wcmVzc2lvbiBjb2RlLiAgcGdfaW5kZXgKKyAqIGFuZCBwZ19vZmZzZXQgaW5kaWNhdGUgdGhlIGxhc3QgcGFnZSBhbmQgdGhlIGxhc3Qgb2Zmc2V0IG9mIHRoYXQgcGFnZQorICogdGhhdCBoYXZlIGJlZW4gZmlsbGVkIGluLiAgVGhpcyB3aWxsIHplcm8gZXZlcnl0aGluZyByZW1haW5pbmcgaW4gdGhlCisgKiBiaW92ZWMuCisgKi8KK3ZvaWQgYnRyZnNfY2xlYXJfYmlvdmVjX2VuZChzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgaW50IHZjbnQsCisJCQkJICAgdW5zaWduZWQgbG9uZyBwZ19pbmRleCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHBnX29mZnNldCkKK3sKKwl3aGlsZSAocGdfaW5kZXggPCB2Y250KSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gYnZlY1twZ19pbmRleF0uYnZfcGFnZTsKKwkJdW5zaWduZWQgbG9uZyBvZmYgPSBidmVjW3BnX2luZGV4XS5idl9vZmZzZXQ7CisJCXVuc2lnbmVkIGxvbmcgbGVuID0gYnZlY1twZ19pbmRleF0uYnZfbGVuOworCisJCWlmIChwZ19vZmZzZXQgPCBvZmYpCisJCQlwZ19vZmZzZXQgPSBvZmY7CisJCWlmIChwZ19vZmZzZXQgPCBvZmYgKyBsZW4pIHsKKwkJCXVuc2lnbmVkIGxvbmcgYnl0ZXMgPSBvZmYgKyBsZW4gLSBwZ19vZmZzZXQ7CisJCQljaGFyICprYWRkcjsKKworCQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlKTsKKwkJCW1lbXNldChrYWRkciArIHBnX29mZnNldCwgMCwgYnl0ZXMpOworCQkJa3VubWFwX2F0b21pYyhrYWRkcik7CisJCX0KKwkJcGdfaW5kZXgrKzsKKwkJcGdfb2Zmc2V0ID0gMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9jb21wcmVzc2lvbi5oIGIvZnMvYnRyZnMvY29tcHJlc3Npb24uaAppbmRleCAwYzgwM2I0Li5kMTgxZjcwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jb21wcmVzc2lvbi5oCisrKyBiL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmgKQEAgLTQ1LDcgKzQ1LDkgQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogaW50IGJ0cmZzX3N1Ym1pdF9jb21wcmVzc2VkX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJpbyAqYmlvLAogCQkJCSBpbnQgbWlycm9yX251bSwgdW5zaWduZWQgbG9uZyBiaW9fZmxhZ3MpOwotCit2b2lkIGJ0cmZzX2NsZWFyX2Jpb3ZlY19lbmQoc3RydWN0IGJpb192ZWMgKmJ2ZWMsIGludCB2Y250LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGdfaW5kZXgsCisJCQkJICAgdW5zaWduZWQgbG9uZyBwZ19vZmZzZXQpOwogc3RydWN0IGJ0cmZzX2NvbXByZXNzX29wIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICooKmFsbG9jX3dvcmtzcGFjZSkodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmMgYi9mcy9idHJmcy9jdHJlZS5jCmluZGV4IDE5YmM2MTYuLjE1MDgyMmUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmMKKysrIGIvZnMvYnRyZnMvY3RyZWUuYwpAQCAtODAsMTMgKzgwLDYgQEAKIHsKIAlpbnQgaTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCi0JLyogbG9ja2RlcCByZWFsbHkgY2FyZXMgdGhhdCB3ZSB0YWtlIGFsbCBvZiB0aGVzZSBzcGlubG9ja3MKLQkgKiBpbiB0aGUgcmlnaHQgb3JkZXIuICBJZiBhbnkgb2YgdGhlIGxvY2tzIGluIHRoZSBwYXRoIGFyZSBub3QKLQkgKiBjdXJyZW50bHkgYmxvY2tpbmcsIGl0IGlzIGdvaW5nIHRvIGNvbXBsYWluLiAgU28sIG1ha2UgcmVhbGx5Ci0JICogcmVhbGx5IHN1cmUgYnkgZm9yY2luZyB0aGUgcGF0aCB0byBibG9ja2luZyBiZWZvcmUgd2UgY2xlYXIKLQkgKiB0aGUgcGF0aCBibG9ja2luZy4KLQkgKi8KIAlpZiAoaGVsZCkgewogCQlidHJmc19zZXRfbG9ja19ibG9ja2luZ19ydyhoZWxkLCBoZWxkX3J3KTsKIAkJaWYgKGhlbGRfcncgPT0gQlRSRlNfV1JJVEVfTE9DSykKQEAgLTk1LDcgKzg4LDYgQEAKIAkJCWhlbGRfcncgPSBCVFJGU19SRUFEX0xPQ0tfQkxPQ0tJTkc7CiAJfQogCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOwotI2VuZGlmCiAKIAlmb3IgKGkgPSBCVFJGU19NQVhfTEVWRUwgLSAxOyBpID49IDA7IGktLSkgewogCQlpZiAocC0+bm9kZXNbaV0gJiYgcC0+bG9ja3NbaV0pIHsKQEAgLTEwNywxMCArOTksOCBAQAogCQl9CiAJfQogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIAlpZiAoaGVsZCkKIAkJYnRyZnNfY2xlYXJfbG9ja19ibG9ja2luZ19ydyhoZWxkLCBoZWxkX3J3KTsKLSNlbmRpZgogfQogCiAvKiB0aGlzIGFsc28gcmVsZWFzZXMgdGhlIHBhdGggKi8KQEAgLTI4OTMsNyArMjg4Myw3IEBACiAJCQkJCX0KIAkJCQkJcC0+bG9ja3NbbGV2ZWxdID0gQlRSRlNfV1JJVEVfTE9DSzsKIAkJCQl9IGVsc2UgewotCQkJCQllcnIgPSBidHJmc190cnlfdHJlZV9yZWFkX2xvY2soYik7CisJCQkJCWVyciA9IGJ0cmZzX3RyZWVfcmVhZF9sb2NrX2F0b21pYyhiKTsKIAkJCQkJaWYgKCFlcnIpIHsKIAkJCQkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOwogCQkJCQkJYnRyZnNfdHJlZV9yZWFkX2xvY2soYik7CkBAIC0zMDI1LDcgKzMwMTUsNyBAQAogCQkJfQogCiAJCQlsZXZlbCA9IGJ0cmZzX2hlYWRlcl9sZXZlbChiKTsKLQkJCWVyciA9IGJ0cmZzX3RyeV90cmVlX3JlYWRfbG9jayhiKTsKKwkJCWVyciA9IGJ0cmZzX3RyZWVfcmVhZF9sb2NrX2F0b21pYyhiKTsKIAkJCWlmICghZXJyKSB7CiAJCQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocCk7CiAJCQkJYnRyZnNfdHJlZV9yZWFkX2xvY2soYik7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLWl0ZW0uYyBiL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCmluZGV4IDc4M2E5NDMuLjg0YTJkMTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCkBAIC00MTMsNyArNDEzLDcgQEAKIAlyZXQgPSAwOwogZmFpbDoKIAl3aGlsZSAocmV0IDwgMCAmJiAhbGlzdF9lbXB0eSgmdG1wbGlzdCkpIHsKLQkJc3VtcyA9IGxpc3RfZW50cnkoJnRtcGxpc3QsIHN0cnVjdCBidHJmc19vcmRlcmVkX3N1bSwgbGlzdCk7CisJCXN1bXMgPSBsaXN0X2VudHJ5KHRtcGxpc3QubmV4dCwgc3RydWN0IGJ0cmZzX29yZGVyZWRfc3VtLCBsaXN0KTsKIAkJbGlzdF9kZWwoJnN1bXMtPmxpc3QpOwogCQlrZnJlZShzdW1zKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9sb2NraW5nLmMgYi9mcy9idHJmcy9sb2NraW5nLmMKaW5kZXggNTY2NWQyMS4uZjgyMjllZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvbG9ja2luZy5jCisrKyBiL2ZzL2J0cmZzL2xvY2tpbmcuYwpAQCAtMTI4LDYgKzEyOCwyNiBAQAogfQogCiAvKgorICogdGFrZSBhIHNwaW5uaW5nIHJlYWQgbG9jay4KKyAqIHJldHVybnMgMSBpZiB3ZSBnZXQgdGhlIHJlYWQgbG9jayBhbmQgMCBpZiB3ZSBkb24ndAorICogdGhpcyB3b24ndCB3YWl0IGZvciBibG9ja2luZyB3cml0ZXJzCisgKi8KK2ludCBidHJmc190cmVlX3JlYWRfbG9ja19hdG9taWMoc3RydWN0IGV4dGVudF9idWZmZXIgKmViKQoreworCWlmIChhdG9taWNfcmVhZCgmZWItPmJsb2NraW5nX3dyaXRlcnMpKQorCQlyZXR1cm4gMDsKKworCXJlYWRfbG9jaygmZWItPmxvY2spOworCWlmIChhdG9taWNfcmVhZCgmZWItPmJsb2NraW5nX3dyaXRlcnMpKSB7CisJCXJlYWRfdW5sb2NrKCZlYi0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwlhdG9taWNfaW5jKCZlYi0+cmVhZF9sb2Nrcyk7CisJYXRvbWljX2luYygmZWItPnNwaW5uaW5nX3JlYWRlcnMpOworCXJldHVybiAxOworfQorCisvKgogICogcmV0dXJucyAxIGlmIHdlIGdldCB0aGUgcmVhZCBsb2NrIGFuZCAwIGlmIHdlIGRvbid0CiAgKiB0aGlzIHdvbid0IHdhaXQgZm9yIGJsb2NraW5nIHdyaXRlcnMKICAqLwpAQCAtMTU4LDkgKzE3OCw3IEBACiAJICAgIGF0b21pY19yZWFkKCZlYi0+YmxvY2tpbmdfcmVhZGVycykpCiAJCXJldHVybiAwOwogCi0JaWYgKCF3cml0ZV90cnlsb2NrKCZlYi0+bG9jaykpCi0JCXJldHVybiAwOwotCisJd3JpdGVfbG9jaygmZWItPmxvY2spOwogCWlmIChhdG9taWNfcmVhZCgmZWItPmJsb2NraW5nX3dyaXRlcnMpIHx8CiAJICAgIGF0b21pY19yZWFkKCZlYi0+YmxvY2tpbmdfcmVhZGVycykpIHsKIAkJd3JpdGVfdW5sb2NrKCZlYi0+bG9jayk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9sb2NraW5nLmggYi9mcy9idHJmcy9sb2NraW5nLmgKaW5kZXggYjgxZTBlOS4uYzQ0YTlkNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvbG9ja2luZy5oCisrKyBiL2ZzL2J0cmZzL2xvY2tpbmcuaApAQCAtMzUsNiArMzUsOCBAQAogdm9pZCBidHJmc19hc3NlcnRfdHJlZV9sb2NrZWQoc3RydWN0IGV4dGVudF9idWZmZXIgKmViKTsKIGludCBidHJmc190cnlfdHJlZV9yZWFkX2xvY2soc3RydWN0IGV4dGVudF9idWZmZXIgKmViKTsKIGludCBidHJmc190cnlfdHJlZV93cml0ZV9sb2NrKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7CitpbnQgYnRyZnNfdHJlZV9yZWFkX2xvY2tfYXRvbWljKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7CisKIAogc3RhdGljIGlubGluZSB2b2lkIGJ0cmZzX3RyZWVfdW5sb2NrX3J3KHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwgaW50IHJ3KQogewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvbHpvLmMgYi9mcy9idHJmcy9sem8uYwppbmRleCA3ODI4NWYzLi42MTc1NTNjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9sem8uYworKysgYi9mcy9idHJmcy9sem8uYwpAQCAtMzczLDYgKzM3Myw4IEBACiAJfQogZG9uZToKIAlrdW5tYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleF0pOworCWlmICghcmV0KQorCQlidHJmc19jbGVhcl9iaW92ZWNfZW5kKGJ2ZWMsIHZjbnQsIHBhZ2Vfb3V0X2luZGV4LCBwZ19vZmZzZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQxMCwxMCArNDEyLDIzIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qCisJICogdGhlIGNhbGxlciBpcyBhbHJlYWR5IGNoZWNraW5nIGFnYWluc3QgUEFHRV9TSVpFLCBidXQgbGV0cworCSAqIG1vdmUgdGhpcyBjaGVjayBjbG9zZXIgdG8gdGhlIG1lbWNweS9tZW1zZXQKKwkgKi8KKwlkZXN0bGVuID0gbWluX3QodW5zaWduZWQgbG9uZywgZGVzdGxlbiwgUEFHRV9TSVpFKTsKIAlieXRlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGRlc3RsZW4sIG91dF9sZW4gLSBzdGFydF9ieXRlKTsKIAogCWthZGRyID0ga21hcF9hdG9taWMoZGVzdF9wYWdlKTsKIAltZW1jcHkoa2FkZHIsIHdvcmtzcGFjZS0+YnVmICsgc3RhcnRfYnl0ZSwgYnl0ZXMpOworCisJLyoKKwkgKiBidHJmc19nZXRibG9jayBpcyBkb2luZyBhIHplcm8gb24gdGhlIHRhaWwgb2YgdGhlIHBhZ2UgdG9vLAorCSAqIGJ1dCB0aGlzIHdpbGwgY292ZXIgYW55dGhpbmcgbWlzc2luZyBmcm9tIHRoZSBkZWNvbXByZXNzZWQKKwkgKiBkYXRhLgorCSAqLworCWlmIChieXRlcyA8IGRlc3RsZW4pCisJCW1lbXNldChrYWRkcitieXRlcywgMCwgZGVzdGxlbi1ieXRlcyk7CiAJa3VubWFwX2F0b21pYyhrYWRkcik7CiBvdXQ6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3psaWIuYyBiL2ZzL2J0cmZzL3psaWIuYwppbmRleCA3NTlmYTRlLi5mYjIyZmQ4IDEwMDY0NAotLS0gYS9mcy9idHJmcy96bGliLmMKKysrIGIvZnMvYnRyZnMvemxpYi5jCkBAIC0yOTksNiArMjk5LDggQEAKIAl6bGliX2luZmxhdGVFbmQoJndvcmtzcGFjZS0+c3RybSk7CiAJaWYgKGRhdGFfaW4pCiAJCWt1bm1hcChwYWdlc19pbltwYWdlX2luX2luZGV4XSk7CisJaWYgKCFyZXQpCisJCWJ0cmZzX2NsZWFyX2Jpb3ZlY19lbmQoYnZlYywgdmNudCwgcGFnZV9vdXRfaW5kZXgsIHBnX29mZnNldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzEwLDEwICszMTIsMTQgQEAKIAlzdHJ1Y3Qgd29ya3NwYWNlICp3b3Jrc3BhY2UgPSBsaXN0X2VudHJ5KHdzLCBzdHJ1Y3Qgd29ya3NwYWNlLCBsaXN0KTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgd2JpdHMgPSBNQVhfV0JJVFM7Ci0JdW5zaWduZWQgbG9uZyBieXRlc19sZWZ0ID0gZGVzdGxlbjsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX2xlZnQ7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9vdXQgPSAwOworCXVuc2lnbmVkIGxvbmcgcGdfb2Zmc2V0ID0gMDsKIAljaGFyICprYWRkcjsKIAorCWRlc3RsZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBkZXN0bGVuLCBQQUdFX1NJWkUpOworCWJ5dGVzX2xlZnQgPSBkZXN0bGVuOworCiAJd29ya3NwYWNlLT5zdHJtLm5leHRfaW4gPSBkYXRhX2luOwogCXdvcmtzcGFjZS0+c3RybS5hdmFpbF9pbiA9IHNyY2xlbjsKIAl3b3Jrc3BhY2UtPnN0cm0udG90YWxfaW4gPSAwOwpAQCAtMzQxLDcgKzM0Nyw2IEBACiAJCXVuc2lnbmVkIGxvbmcgYnVmX3N0YXJ0OwogCQl1bnNpZ25lZCBsb25nIGJ1Zl9vZmZzZXQ7CiAJCXVuc2lnbmVkIGxvbmcgYnl0ZXM7Ci0JCXVuc2lnbmVkIGxvbmcgcGdfb2Zmc2V0ID0gMDsKIAogCQlyZXQgPSB6bGliX2luZmxhdGUoJndvcmtzcGFjZS0+c3RybSwgWl9OT19GTFVTSCk7CiAJCWlmIChyZXQgIT0gWl9PSyAmJiByZXQgIT0gWl9TVFJFQU1fRU5EKQpAQCAtMzg0LDYgKzM4OSwxNyBAQAogCQlyZXQgPSAwOwogCiAJemxpYl9pbmZsYXRlRW5kKCZ3b3Jrc3BhY2UtPnN0cm0pOworCisJLyoKKwkgKiB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB6bGliIHJldHVybmVkIGZld2VyIGJ5dGVzIHRoYW4gd2UKKwkgKiBleHBlY3RlZC4gIGJ0cmZzX2dldF9ibG9jayBpcyByZXNwb25zaWJsZSBmb3IgemVyb2luZyBmcm9tIHRoZQorCSAqIGVuZCBvZiB0aGUgaW5saW5lIGV4dGVudCAoZGVzdGxlbikgdG8gdGhlIGVuZCBvZiB0aGUgcGFnZQorCSAqLworCWlmIChwZ19vZmZzZXQgPCBkZXN0bGVuKSB7CisJCWthZGRyID0ga21hcF9hdG9taWMoZGVzdF9wYWdlKTsKKwkJbWVtc2V0KGthZGRyICsgcGdfb2Zmc2V0LCAwLCBkZXN0bGVuIC0gcGdfb2Zmc2V0KTsKKwkJa3VubWFwX2F0b21pYyhrYWRkcik7CisJfQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY2Fwcy5jIGIvZnMvY2VwaC9jYXBzLmMKaW5kZXggNjU5ZjJlYS4uY2VmY2E2NiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jYXBzLmMKKysrIGIvZnMvY2VwaC9jYXBzLmMKQEAgLTI2MzgsNyArMjYzOCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQ0VQSF9DQVBfQklUUzsgaSsrKQogCQlpZiAoKGRpcnR5ICYgKDEgPDwgaSkpICYmCi0JCSAgICBmbHVzaF90aWQgPT0gY2ktPmlfY2FwX2ZsdXNoX3RpZFtpXSkKKwkJICAgICh1MTYpZmx1c2hfdGlkID09IGNpLT5pX2NhcF9mbHVzaF90aWRbaV0pCiAJCQljbGVhbmVkIHw9IDEgPDwgaTsKIAogCWRvdXQoImhhbmRsZV9jYXBfZmx1c2hfYWNrIGlub2RlICVwIG1kcyVkIHNlcSAlZCBvbiAlcyBjbGVhbmVkICVzLCIKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggM2ZmZWY3Zi4uNWJjNzJiMCAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTc3OCw2ICs3NzgsNyBAQAogCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gbG9ja19wYXJlbnQoZGVudHJ5KTsKIAkJCWlmIChsaWtlbHkoIWRlbnRyeS0+ZF9sb2NrcmVmLmNvdW50KSkgewogCQkJCV9fZGVudHJ5X2tpbGwoZGVudHJ5KTsKKwkJCQlkcHV0KHBhcmVudCk7CiAJCQkJZ290byByZXN0YXJ0OwogCQkJfQogCQkJaWYgKHBhcmVudCkKZGlmZiAtLWdpdCBhL2ZzL2VmaXZhcmZzL3N1cGVyLmMgYi9mcy9lZml2YXJmcy9zdXBlci5jCmluZGV4IDBhNDg4ODYuLjZkYWQxMTcgMTAwNjQ0Ci0tLSBhL2ZzL2VmaXZhcmZzL3N1cGVyLmMKKysrIGIvZnMvZWZpdmFyZnMvc3VwZXIuYwpAQCAtMjM2LDYgKzIzNiw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBlZml2YXJmc190eXBlID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgICAgPSAiZWZpdmFyZnMiLAogCS5tb3VudCAgID0gZWZpdmFyZnNfbW91bnQsCiAJLmtpbGxfc2IgPSBlZml2YXJmc19raWxsX3NiLApAQCAtMjQ0LDE3ICsyNDUsMjMgQEAKIHN0YXRpYyBfX2luaXQgaW50IGVmaXZhcmZzX2luaXQodm9pZCkKIHsKIAlpZiAoIWVmaV9lbmFibGVkKEVGSV9SVU5USU1FX1NFUlZJQ0VTKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFlZml2YXJzX2tvYmplY3QoKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PREVWOwogCiAJcmV0dXJuIHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmVmaXZhcmZzX3R5cGUpOwogfQogCitzdGF0aWMgX19leGl0IHZvaWQgZWZpdmFyZnNfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZWZpdmFyZnNfdHlwZSk7Cit9CisKIE1PRFVMRV9BVVRIT1IoIk1hdHRoZXcgR2FycmV0dCwgSmVyZW15IEtlcnIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRUZJIFZhcmlhYmxlIEZpbGVzeXN0ZW0iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19GUygiZWZpdmFyZnMiKTsKIAogbW9kdWxlX2luaXQoZWZpdmFyZnNfaW5pdCk7Cittb2R1bGVfZXhpdChlZml2YXJmc19leGl0KTsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCA3MzAyYjc1Li4wMWFlYmUzIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0yNzcsNiArMjc3LDcgQEAKIAkJZ290byBlcnI7CiAKIAltbS0+c3RhY2tfdm0gPSBtbS0+dG90YWxfdm0gPSAxOworCWFyY2hfYnBybV9tbV9pbml0KG1tLCB2bWEpOwogCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCWJwcm0tPnAgPSB2bWEtPnZtX2VuZCAtIHNpemVvZih2b2lkICopOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX3ZmYXQuYyBiL2ZzL2ZhdC9uYW1laV92ZmF0LmMKaW5kZXggNmRmOGQzZC4uYjhiOTJjMiAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuYworKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jCkBAIC03MzYsNyArNzM2LDEyIEBACiAJfQogCiAJYWxpYXMgPSBkX2ZpbmRfYWxpYXMoaW5vZGUpOwotCWlmIChhbGlhcyAmJiAhdmZhdF9kX2Fub25fZGlzY29ubihhbGlhcykpIHsKKwkvKgorCSAqIENoZWNraW5nICJhbGlhcy0+ZF9wYXJlbnQgPT0gZGVudHJ5LT5kX3BhcmVudCIgdG8gbWFrZSBzdXJlCisJICogRlMgaXMgbm90IGNvcnJ1cHRlZCAoZXNwZWNpYWxseSBkb3VibGUgbGlua2VkIGRpcikuCisJICovCisJaWYgKGFsaWFzICYmIGFsaWFzLT5kX3BhcmVudCA9PSBkZW50cnktPmRfcGFyZW50ICYmCisJICAgICF2ZmF0X2RfYW5vbl9kaXNjb25uKGFsaWFzKSkgewogCQkvKgogCQkgKiBUaGlzIGlub2RlIGhhcyBub24gYW5vbnltb3VzLURDQUNIRV9ESVNDT05ORUNURUQKIAkJICogZGVudHJ5LiBUaGlzIG1lYW5zLCB0aGUgdXNlciBkaWQgLT5sb29rdXAoKSBieSBhbgpAQCAtNzU1LDEyICs3NjAsOSBAQAogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZNU0RPU19TQihzYiktPnNfbG9jayk7Ci0JZGVudHJ5LT5kX3RpbWUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX3ZlcnNpb247Ci0JZGVudHJ5ID0gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7Ci0JaWYgKGRlbnRyeSkKLQkJZGVudHJ5LT5kX3RpbWUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX3ZlcnNpb247Ci0JcmV0dXJuIGRlbnRyeTsKLQorCWlmICghaW5vZGUpCisJCWRlbnRyeS0+ZF90aW1lID0gZGlyLT5pX3ZlcnNpb247CisJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOwogZXJyb3I6CiAJbXV0ZXhfdW5sb2NrKCZNU0RPU19TQihzYiktPnNfbG9jayk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKQEAgLTc5Myw3ICs3OTUsNiBAQAogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHRzOwogCS8qIHRpbWVzdGFtcCBpcyBhbHJlYWR5IHdyaXR0ZW4sIHNvIG1hcmtfaW5vZGVfZGlydHkoKSBpcyB1bm5lZWRlZC4gKi8KIAotCWRlbnRyeS0+ZF90aW1lID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZS0+aV92ZXJzaW9uOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZNU0RPU19TQihzYiktPnNfbG9jayk7CkBAIC04MjQsNiArODI1LDcgQEAKIAljbGVhcl9ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJZmF0X2RldGFjaChpbm9kZSk7CisJZGVudHJ5LT5kX3RpbWUgPSBkaXItPmlfdmVyc2lvbjsKIG91dDoKIAltdXRleF91bmxvY2soJk1TRE9TX1NCKHNiKS0+c19sb2NrKTsKIApAQCAtODQ5LDYgKzg1MSw3IEBACiAJY2xlYXJfbmxpbmsoaW5vZGUpOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCWZhdF9kZXRhY2goaW5vZGUpOworCWRlbnRyeS0+ZF90aW1lID0gZGlyLT5pX3ZlcnNpb247CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZNU0RPU19TQihzYiktPnNfbG9jayk7CiAKQEAgLTg4OSw3ICs4OTIsNiBAQAogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHRzOwogCS8qIHRpbWVzdGFtcCBpcyBhbHJlYWR5IHdyaXR0ZW4sIHNvIG1hcmtfaW5vZGVfZGlydHkoKSBpcyB1bm5lZWRlZC4gKi8KIAotCWRlbnRyeS0+ZF90aW1lID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZS0+aV92ZXJzaW9uOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAKIAltdXRleF91bmxvY2soJk1TRE9TX1NCKHNiKS0+c19sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jCmluZGV4IGZlODM5YjkuLmQ2N2ExNmYgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lub2RlLmMKKysrIGIvZnMvaXNvZnMvaW5vZGUuYwpAQCAtMTc0LDI3ICsxNzQsNiBAQAogICogQ29tcHV0ZSB0aGUgaGFzaCBmb3IgdGhlIGlzb2ZzIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgZGVudHJ5LgogICovCiBzdGF0aWMgaW50Ci1pc29mc19oYXNoX2NvbW1vbihzdHJ1Y3QgcXN0ciAqcXN0ciwgaW50IG1zKQotewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IGxlbjsKLQotCWxlbiA9IHFzdHItPmxlbjsKLQluYW1lID0gcXN0ci0+bmFtZTsKLQlpZiAobXMpIHsKLQkJd2hpbGUgKGxlbiAmJiBuYW1lW2xlbi0xXSA9PSAnLicpCi0JCQlsZW4tLTsKLQl9Ci0KLQlxc3RyLT5oYXNoID0gZnVsbF9uYW1lX2hhc2gobmFtZSwgbGVuKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogQ29tcHV0ZSB0aGUgaGFzaCBmb3IgdGhlIGlzb2ZzIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgZGVudHJ5LgotICovCi1zdGF0aWMgaW50CiBpc29mc19oYXNoaV9jb21tb24oc3RydWN0IHFzdHIgKnFzdHIsIGludCBtcykKIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMjYzLDYgKzI0MiwyNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0pPTElFVAorLyoKKyAqIENvbXB1dGUgdGhlIGhhc2ggZm9yIHRoZSBpc29mcyBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlbnRyeS4KKyAqLworc3RhdGljIGludAoraXNvZnNfaGFzaF9jb21tb24oc3RydWN0IHFzdHIgKnFzdHIsIGludCBtcykKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWludCBsZW47CisKKwlsZW4gPSBxc3RyLT5sZW47CisJbmFtZSA9IHFzdHItPm5hbWU7CisJaWYgKG1zKSB7CisJCXdoaWxlIChsZW4gJiYgbmFtZVtsZW4tMV0gPT0gJy4nKQorCQkJbGVuLS07CisJfQorCisJcXN0ci0+aGFzaCA9IGZ1bGxfbmFtZV9oYXNoKG5hbWUsIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogaXNvZnNfaGFzaF9tcyhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICpxc3RyKQogewpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBlNGRjNzQ3Li4xZGY5NGZhIDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtMTg1MywxMyArMTg1MywxMiBAQAogCQkJCWpvdXJuYWwtPmpfY2hrc3VtX2RyaXZlciA9IE5VTEw7CiAJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCX0KIAotCQkvKiBQcmVjb21wdXRlIGNoZWNrc3VtIHNlZWQgZm9yIGFsbCBtZXRhZGF0YSAqLwotCQlpZiAoamJkMl9qb3VybmFsX2hhc19jc3VtX3Yyb3IzKGpvdXJuYWwpKQorCQkJLyogUHJlY29tcHV0ZSBjaGVja3N1bSBzZWVkIGZvciBhbGwgbWV0YWRhdGEgKi8KIAkJCWpvdXJuYWwtPmpfY3N1bV9zZWVkID0gamJkMl9jaGtzdW0oam91cm5hbCwgfjAsCiAJCQkJCQkJICAgc2ItPnNfdXVpZCwKIAkJCQkJCQkgICBzaXplb2Yoc2ItPnNfdXVpZCkpOworCQl9CiAJfQogCiAJLyogSWYgZW5hYmxpbmcgdjEgY2hlY2tzdW1zLCBkb3duZ3JhZGUgc3VwZXJibG9jayAqLwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjbG9jay5jIGIvZnMvbG9ja2Qvc3ZjbG9jay5jCmluZGV4IDEzZGI5NWYuLjU2NTk4NzQgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y2xvY2suYworKysgYi9mcy9sb2NrZC9zdmNsb2NrLmMKQEAgLTUzLDcgKzUzLDcgQEAKIHN0YXRpYyBMSVNUX0hFQUQobmxtX2Jsb2NrZWQpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhubG1fYmxvY2tlZF9sb2NrKTsKIAotI2lmZGVmIExPQ0tEX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogc3RhdGljIGNvbnN0IGNoYXIgKm5sbWRiZ19jb29raWUyYShjb25zdCBzdHJ1Y3QgbmxtX2Nvb2tpZSAqY29va2llKQogewogCS8qCmRpZmYgLS1naXQgYS9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYyBiL2ZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dC5jCmluZGV4IDUyMjhmMjAuLjc3ZmVjNmEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dC5jCisrKyBiL2ZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dC5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIAlsb2ZmX3Qgb2Zmc2V0ID0gaGVhZGVyLT5hcmdzLm9mZnNldDsKIAlzaXplX3QgY291bnQgPSBoZWFkZXItPmFyZ3MuY291bnQ7CiAJc3RydWN0IHBhZ2UgKipwYWdlcyA9IGhlYWRlci0+YXJncy5wYWdlczsKLQlpbnQgcGdfaW5kZXggPSBwZ19pbmRleCA9IGhlYWRlci0+YXJncy5wZ2Jhc2UgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlpbnQgcGdfaW5kZXggPSBoZWFkZXItPmFyZ3MucGdiYXNlID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJdW5zaWduZWQgaW50IHBnX2xlbjsKIAlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAlpbnQgaTsKQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAJLyogT3B0aW1pemUgY29tbW9uIGNhc2UgdGhhdCB3cml0ZXMgZnJvbSAwIHRvIGVuZCBvZiBmaWxlICovCiAJZW5kID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9DQUNIRV9TSVpFKTsKLQlpZiAoZW5kICE9IE5GU19JKGlub2RlKS0+bnBhZ2VzKSB7CisJaWYgKGVuZCAhPSBpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzKSB7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJZW5kID0gcGFnZV9jYWNoZV9uZXh0X2hvbGUobWFwcGluZywgaWR4ICsgMSwgVUxPTkdfTUFYKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvYmxvY2tsYXlvdXQvcnBjX3BpcGVmcy5jIGIvZnMvbmZzL2Jsb2NrbGF5b3V0L3JwY19waXBlZnMuYwppbmRleCBlOTY2YzAyLi5hY2JmOWNhIDEwMDY0NAotLS0gYS9mcy9uZnMvYmxvY2tsYXlvdXQvcnBjX3BpcGVmcy5jCisrKyBiL2ZzL25mcy9ibG9ja2xheW91dC9ycGNfcGlwZWZzLmMKQEAgLTY1LDE3ICs2NSwxOCBAQAogCiAJZHByaW50aygiJXMgQ1JFQVRJTkcgUElQRUZTIE1FU1NBR0VcbiIsIF9fZnVuY19fKTsKIAorCW11dGV4X2xvY2soJm5uLT5ibF9tdXRleCk7CiAJYmxfcGlwZV9tc2cuYmxfd3EgPSAmbm4tPmJsX3dxOwogCiAJYi0+c2ltcGxlLmxlbiArPSA0OwkvKiBzaW5nbGUgdm9sdW1lICovCiAJaWYgKGItPnNpbXBsZS5sZW4gPiBQQUdFX1NJWkUpCi0JCXJldHVybiAtRUlPOworCQlnb3RvIG91dF91bmxvY2s7CiAKIAltZW1zZXQobXNnLCAwLCBzaXplb2YoKm1zZykpOwogCW1zZy0+bGVuID0gc2l6ZW9mKCpibF9tc2cpICsgYi0+c2ltcGxlLmxlbjsKIAltc2ctPmRhdGEgPSBremFsbG9jKG1zZy0+bGVuLCBnZnBfbWFzayk7CiAJaWYgKCFtc2ctPmRhdGEpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX2RhdGE7CiAKIAlibF9tc2cgPSBtc2ctPmRhdGE7CiAJYmxfbXNnLT50eXBlID0gQkxfREVWSUNFX01PVU5ULApAQCAtODcsNyArODgsNyBAQAogCXJjID0gcnBjX3F1ZXVlX3VwY2FsbChubi0+YmxfZGV2aWNlX3BpcGUsIG1zZyk7CiAJaWYgKHJjIDwgMCkgewogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmbm4tPmJsX3dxLCAmd3EpOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9kYXRhOwogCX0KIAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKQEAgLTk3LDEyICs5OCwxNCBAQAogCWlmIChyZXBseS0+c3RhdHVzICE9IEJMX0RFVklDRV9SRVFVRVNUX1BST0MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgZmFpbGVkIHRvIGRlY29kZSBkZXZpY2U6ICVkXG4iLAogCQkJX19mdW5jX18sIHJlcGx5LT5zdGF0dXMpOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9kYXRhOwogCX0KIAogCWRldiA9IE1LREVWKHJlcGx5LT5tYWpvciwgcmVwbHktPm1pbm9yKTsKLW91dDoKK291dF9mcmVlX2RhdGE6CiAJa2ZyZWUobXNnLT5kYXRhKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZubi0+YmxfbXV0ZXgpOwogCXJldHVybiBkZXY7CiB9CiAKQEAgLTIzMiw2ICsyMzUsNyBAQAogCXN0cnVjdCBuZnNfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzX25ldF9pZCk7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCisJbXV0ZXhfaW5pdCgmbm4tPmJsX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZubi0+Ymxfd3EpOwogCW5uLT5ibF9kZXZpY2VfcGlwZSA9IHJwY19ta3BpcGVfZGF0YSgmYmxfdXBjYWxsX29wcywgMCk7CiAJaWYgKElTX0VSUihubi0+YmxfZGV2aWNlX3BpcGUpKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKaW5kZXggNzM0NjZiOS4uZTM2YTlkNyAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYworKysgYi9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCkBAIC00OSw3ICs0OSw3IEBACiAJCWdvdG8gb3V0X2lwdXQ7CiAJcmVzLT5zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCXJlcy0+Y2hhbmdlX2F0dHIgPSBkZWxlZ2F0aW9uLT5jaGFuZ2VfYXR0cjsKLQlpZiAobmZzaS0+bnBhZ2VzICE9IDApCisJaWYgKG5mc2ktPm5yZXF1ZXN0cyAhPSAwKQogCQlyZXMtPmNoYW5nZV9hdHRyKys7CiAJcmVzLT5jdGltZSA9IGlub2RlLT5pX2N0aW1lOwogCXJlcy0+bXRpbWUgPSBpbm9kZS0+aV9tdGltZTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCmluZGV4IDU4NTNmNTMuLjdmM2Y2MDYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uYwpAQCAtMTI1LDYgKzEyNSw4IEBACiAJCQljb250aW51ZTsKIAkJaWYgKCF0ZXN0X2JpdChORlNfREVMRUdBVEVEX1NUQVRFLCAmc3RhdGUtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOworCQlpZiAoIW5mczRfdmFsaWRfb3Blbl9zdGF0ZWlkKHN0YXRlKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoIW5mczRfc3RhdGVpZF9tYXRjaCgmc3RhdGUtPnN0YXRlaWQsIHN0YXRlaWQpKQogCQkJY29udGludWU7CiAJCWdldF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7CkBAIC0xOTMsNyArMTk1LDExIEBACiB7CiAJaW50IHJlcyA9IDA7CiAKLQlyZXMgPSBuZnM0X3Byb2NfZGVsZWdyZXR1cm4oaW5vZGUsIGRlbGVnYXRpb24tPmNyZWQsICZkZWxlZ2F0aW9uLT5zdGF0ZWlkLCBpc3N5bmMpOworCWlmICghdGVzdF9iaXQoTkZTX0RFTEVHQVRJT05fUkVWT0tFRCwgJmRlbGVnYXRpb24tPmZsYWdzKSkKKwkJcmVzID0gbmZzNF9wcm9jX2RlbGVncmV0dXJuKGlub2RlLAorCQkJCWRlbGVnYXRpb24tPmNyZWQsCisJCQkJJmRlbGVnYXRpb24tPnN0YXRlaWQsCisJCQkJaXNzeW5jKTsKIAluZnNfZnJlZV9kZWxlZ2F0aW9uKGRlbGVnYXRpb24pOwogCXJldHVybiByZXM7CiB9CkBAIC0zODAsMTEgKzM4NiwxMyBAQAogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBORlNfU0VSVkVSKGlub2RlKS0+bmZzX2NsaWVudDsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAlpZiAoZGVsZWdhdGlvbiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAlkbyB7CisJCWlmICh0ZXN0X2JpdChORlNfREVMRUdBVElPTl9SRVZPS0VELCAmZGVsZWdhdGlvbi0+ZmxhZ3MpKQorCQkJYnJlYWs7CiAJCWVyciA9IG5mc19kZWxlZ2F0aW9uX2NsYWltX29wZW5zKGlub2RlLCAmZGVsZWdhdGlvbi0+c3RhdGVpZCk7CiAJCWlmICghaXNzeW5jIHx8IGVyciAhPSAtRUFHQUlOKQogCQkJYnJlYWs7CkBAIC02MDUsMTAgKzYxMywyMyBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCitzdGF0aWMgdm9pZCBuZnNfcmV2b2tlX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb247CisJcmN1X3JlYWRfbG9jaygpOworCWRlbGVnYXRpb24gPSByY3VfZGVyZWZlcmVuY2UoTkZTX0koaW5vZGUpLT5kZWxlZ2F0aW9uKTsKKwlpZiAoZGVsZWdhdGlvbiAhPSBOVUxMKSB7CisJCXNldF9iaXQoTkZTX0RFTEVHQVRJT05fUkVWT0tFRCwgJmRlbGVnYXRpb24tPmZsYWdzKTsKKwkJbmZzX21hcmtfcmV0dXJuX2RlbGVnYXRpb24oTkZTX1NFUlZFUihpbm9kZSksIGRlbGVnYXRpb24pOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKwogdm9pZCBuZnNfcmVtb3ZlX2JhZF9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwogCisJbmZzX3Jldm9rZV9kZWxlZ2F0aW9uKGlub2RlKTsKIAlkZWxlZ2F0aW9uID0gbmZzX2lub2RlX2RldGFjaF9kZWxlZ2F0aW9uKGlub2RlKTsKIAlpZiAoZGVsZWdhdGlvbikgewogCQluZnNfaW5vZGVfZmluZF9zdGF0ZV9hbmRfcmVjb3Zlcihpbm9kZSwgJmRlbGVnYXRpb24tPnN0YXRlaWQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uaCBiL2ZzL25mcy9kZWxlZ2F0aW9uLmgKaW5kZXggNWMxY2NlMy4uZTNjMjBhMyAxMDA2NDQKLS0tIGEvZnMvbmZzL2RlbGVnYXRpb24uaAorKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5oCkBAIC0zMSw2ICszMSw3IEBACiAJTkZTX0RFTEVHQVRJT05fUkVUVVJOX0lGX0NMT1NFRCwKIAlORlNfREVMRUdBVElPTl9SRUZFUkVOQ0VELAogCU5GU19ERUxFR0FUSU9OX1JFVFVSTklORywKKwlORlNfREVMRUdBVElPTl9SRVZPS0VELAogfTsKIAogaW50IG5mc19pbm9kZV9zZXRfZGVsZWdhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsIHN0cnVjdCBuZnNfb3BlbnJlcyAqcmVzKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCAwNmU4Y2ZjLi42ZTYyMTU1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xNTI3LDYgKzE1MjcsNyBAQAogCQljYXNlIC1FTk9FTlQ6CiAJCQlkX2Ryb3AoZGVudHJ5KTsKIAkJCWRfYWRkKGRlbnRyeSwgTlVMTCk7CisJCQluZnNfc2V0X3ZlcmlmaWVyKGRlbnRyeSwgbmZzX3NhdmVfY2hhbmdlX2F0dHJpYnV0ZShkaXIpKTsKIAkJCWJyZWFrOwogCQljYXNlIC1FSVNESVI6CiAJCWNhc2UgLUVOT1RESVI6CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggMjBjZmZjOC4uMTBiZjA3MiAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtMjY2LDYgKzI2Niw3IEBACiB7CiAJc3RydWN0IG5mc19kaXJlY3RfcmVxICpkcmVxID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBuZnNfZGlyZWN0X3JlcSwga3JlZik7CiAKKwluZnNfZnJlZV9wbmZzX2RzX2NpbmZvKCZkcmVxLT5kc19jaW5mbyk7CiAJaWYgKGRyZXEtPmxfY3R4ICE9IE5VTEwpCiAJCW5mc19wdXRfbG9ja19jb250ZXh0KGRyZXEtPmxfY3R4KTsKIAlpZiAoZHJlcS0+Y3R4ICE9IE5VTEwpCmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0LmMgYi9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0LmMKaW5kZXggNDZmYWIxY2IuLjdhZmI1MmYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlbGF5b3V0L2ZpbGVsYXlvdXQuYworKysgYi9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0LmMKQEAgLTE0NSw5ICsxNDUsNiBAQAogCWNhc2UgLU5GUzRFUlJfREVMRUdfUkVWT0tFRDoKIAljYXNlIC1ORlM0RVJSX0FETUlOX1JFVk9LRUQ6CiAJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKLQkJaWYgKHN0YXRlID09IE5VTEwpCi0JCQlicmVhazsKLQkJbmZzX3JlbW92ZV9iYWRfZGVsZWdhdGlvbihzdGF0ZS0+aW5vZGUpOwogCWNhc2UgLU5GUzRFUlJfT1BFTk1PREU6CiAJCWlmIChzdGF0ZSA9PSBOVUxMKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0ZGV2LmMgYi9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0ZGV2LmMKaW5kZXggOWJiODA2YS4uYmZlY2FjNyAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dGRldi5jCisrKyBiL2ZzL25mcy9maWxlbGF5b3V0L2ZpbGVsYXlvdXRkZXYuYwpAQCAtMjA0LDggKzIwNCw3IEBACiAJaWZkZWJ1ZyhGQUNJTElUWSkKIAkJcHJpbnRfZHMoZHMpOwogCi0JaWYgKGRzLT5kc19jbHApCi0JCW5mc19wdXRfY2xpZW50KGRzLT5kc19jbHApOworCW5mc19wdXRfY2xpZW50KGRzLT5kc19jbHApOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcy0+ZHNfYWRkcnMpKSB7CiAJCWRhID0gbGlzdF9maXJzdF9lbnRyeSgmZHMtPmRzX2FkZHJzLApkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZzY2FjaGUuYyBiL2ZzL25mcy9mc2NhY2hlLmMKaW5kZXggM2VmMDFmMC4uZDYzYmVhOCAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZzY2FjaGUuYworKysgYi9mcy9uZnMvZnNjYWNoZS5jCkBAIC0yNjksOCArMjY5LDggQEAKIAkJaWYgKCFmc2NhY2hlX21heWJlX3JlbGVhc2VfcGFnZShjb29raWUsIHBhZ2UsIGdmcCkpCiAJCQlyZXR1cm4gMDsKIAotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMocGFnZS0+bWFwcGluZy0+aG9zdCwKLQkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhwYWdlLT5tYXBwaW5nLT5ob3N0LAorCQkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVEKTsKIAl9CiAKIAlyZXR1cm4gMTsKQEAgLTI5Myw4ICsyOTMsOCBAQAogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlmc2NhY2hlX3VuY2FjaGVfcGFnZShjb29raWUsIHBhZ2UpOwotCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhwYWdlLT5tYXBwaW5nLT5ob3N0LAotCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfVU5DQUNIRUQsIDEpOworCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhwYWdlLT5tYXBwaW5nLT5ob3N0LAorCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfVU5DQUNIRUQpOwogfQogCiAvKgpAQCAtMzQzLDE5ICszNDMsMTkgQEAKIAljYXNlIDA6IC8qIHJlYWQgQklPIHN1Ym1pdHRlZCAocGFnZSBpbiBmc2NhY2hlKSAqLwogCQlkZnByaW50ayhGU0NBQ0hFLAogCQkJICJORlM6ICAgIHJlYWRwYWdlX2Zyb21fZnNjYWNoZTogQklPIHN1Ym1pdHRlZFxuIik7Ci0JCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9PSywgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9PSyk7CiAJCXJldHVybiByZXQ7CiAKIAljYXNlIC1FTk9CVUZTOiAvKiBpbm9kZSBub3QgaW4gY2FjaGUgKi8KIAljYXNlIC1FTk9EQVRBOiAvKiBwYWdlIG5vdCBpbiBjYWNoZSAqLwotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCwgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9GQUlMKTsKIAkJZGZwcmludGsoRlNDQUNIRSwKIAkJCSAiTkZTOiAgICByZWFkcGFnZV9mcm9tX2ZzY2FjaGUgJWRcbiIsIHJldCk7CiAJCXJldHVybiAxOwogCiAJZGVmYXVsdDoKIAkJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogICAgcmVhZHBhZ2VfZnJvbV9mc2NhY2hlICVkXG4iLCByZXQpOwotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCwgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9GQUlMKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQyOSwxMSArNDI5LDExIEBACiAKIAlpZiAocmV0ICE9IDApIHsKIAkJZnNjYWNoZV91bmNhY2hlX3BhZ2UobmZzX2lfZnNjYWNoZShpbm9kZSksIHBhZ2UpOwotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsCi0JCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfV1JJVFRFTl9GQUlMLCAxKTsKLQkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwKKwkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19XUklUVEVOX0ZBSUwpOworCQluZnNfaW5jX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVEKTsKIAl9IGVsc2UgewotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsCi0JCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfV1JJVFRFTl9PSywgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwKKwkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19XUklUVEVOX09LKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IDYzODhhNTkuLjRiZmZlNjMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC0xOTIsNiArMTkyLDcgQEAKIAluZnNfemFwX2NhY2hlc19sb2NrZWQoaW5vZGUpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG5mc196YXBfY2FjaGVzKTsKIAogdm9pZCBuZnNfemFwX21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7CkBAIC02MjYsNyArNjI3LDcgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCBuZWVkX2F0aW1lID0gTkZTX0koaW5vZGUpLT5jYWNoZV92YWxpZGl0eSAmIE5GU19JTk9fSU5WQUxJRF9BVElNRTsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJdHJhY2VfbmZzX2dldGF0dHJfZW50ZXIoaW5vZGUpOwogCS8qIEZsdXNoIG91dCB3cml0ZXMgdG8gdGhlIHNlcnZlciBpbiBvcmRlciB0byB1cGRhdGUgYy9tdGltZS4gICovCkBAIC0xMTQ5LDcgKzExNTAsNyBAQAogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFU0laRSkKIAkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKQogCQkJJiYgaV9zaXplX3JlYWQoaW5vZGUpID09IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+cHJlX3NpemUpCi0JCQkmJiBuZnNpLT5ucGFnZXMgPT0gMCkgeworCQkJJiYgbmZzaS0+bnJlcXVlc3RzID09IDApIHsKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpKTsKIAkJcmV0IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOwogCX0KQEAgLTExOTIsNyArMTE5Myw3IEBACiAJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NJWkUpIHsKIAkJY3VyX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAJCW5ld19pc2l6ZSA9IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSk7Ci0JCWlmIChjdXJfc2l6ZSAhPSBuZXdfaXNpemUgJiYgbmZzaS0+bnBhZ2VzID09IDApCisJCWlmIChjdXJfc2l6ZSAhPSBuZXdfaXNpemUgJiYgbmZzaS0+bnJlcXVlc3RzID09IDApCiAJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOwogCX0KIApAQCAtMTYxOSw3ICsxNjIwLDcgQEAKIAkJaWYgKG5ld19pc2l6ZSAhPSBjdXJfaXNpemUpIHsKIAkJCS8qIERvIHdlIHBlcmhhcHMgaGF2ZSBhbnkgb3V0c3RhbmRpbmcgd3JpdGVzLCBvciBoYXMKIAkJCSAqIHRoZSBmaWxlIGdyb3duIGJleW9uZCBvdXIgbGFzdCB3cml0ZT8gKi8KLQkJCWlmICgobmZzaS0+bnBhZ2VzID09IDApIHx8IG5ld19pc2l6ZSA+IGN1cl9pc2l6ZSkgeworCQkJaWYgKChuZnNpLT5ucmVxdWVzdHMgPT0gMCkgfHwgbmV3X2lzaXplID4gY3VyX2lzaXplKSB7CiAJCQkJaV9zaXplX3dyaXRlKGlub2RlLCBuZXdfaXNpemUpOwogCQkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0RBVEE7CiAJCQkJaW52YWxpZCAmPSB+TkZTX0lOT19SRVZBTF9QQUdFQ0FDSEU7CkBAIC0xNzg0LDcgKzE3ODUsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZuZnNpLT5hY2Nlc3NfY2FjaGVfZW50cnlfbHJ1KTsKIAlJTklUX0xJU1RfSEVBRCgmbmZzaS0+YWNjZXNzX2NhY2hlX2lub2RlX2xydSk7CiAJSU5JVF9MSVNUX0hFQUQoJm5mc2ktPmNvbW1pdF9pbmZvLmxpc3QpOwotCW5mc2ktPm5wYWdlcyA9IDA7CisJbmZzaS0+bnJlcXVlc3RzID0gMDsKIAluZnNpLT5jb21taXRfaW5mby5uY29tbWl0ID0gMDsKIAlhdG9taWNfc2V0KCZuZnNpLT5jb21taXRfaW5mby5ycGNzX291dCwgMCk7CiAJYXRvbWljX3NldCgmbmZzaS0+c2lsbHlfY291bnQsIDEpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lvc3RhdC5oIGIvZnMvbmZzL2lvc3RhdC5oCmluZGV4IGM1ODMyNDguLjBjYjgwNmYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pb3N0YXQuaAorKysgYi9mcy9uZnMvaW9zdGF0LmgKQEAgLTU1LDYgKzU1LDExIEBACiB7CiAJdGhpc19jcHVfYWRkKE5GU19TRVJWRVIoaW5vZGUpLT5pb19zdGF0cy0+ZnNjYWNoZVtzdGF0XSwgYWRkZW5kKTsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfaW5jX2ZzY2FjaGVfc3RhdHMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIGVudW0gbmZzX3N0YXRfZnNjYWNoZWNvdW50ZXJzIHN0YXQpCit7CisJdGhpc19jcHVfaW5jKE5GU19TRVJWRVIoaW5vZGUpLT5pb19zdGF0cy0+ZnNjYWNoZVtzdGF0XSk7Cit9CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzX2lvc3RhdHMgX19wZXJjcHUgKm5mc19hbGxvY19pb3N0YXRzKHZvaWQpCmRpZmYgLS1naXQgYS9mcy9uZnMvbmV0bnMuaCBiL2ZzL25mcy9uZXRucy5oCmluZGV4IGVmMjIxZmIuLmYwZTA2ZTQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZXRucy5oCisrKyBiL2ZzL25mcy9uZXRucy5oCkBAIC0xOSw2ICsxOSw3IEBACiAJc3RydWN0IHJwY19waXBlICpibF9kZXZpY2VfcGlwZTsKIAlzdHJ1Y3QgYmxfZGV2X21zZyBibF9tb3VudF9yZXBseTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBibF93cTsKKwlzdHJ1Y3QgbXV0ZXggYmxfbXV0ZXg7CiAJc3RydWN0IGxpc3RfaGVhZCBuZnNfY2xpZW50X2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBuZnNfdm9sdW1lX2xpc3Q7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczQyLmggYi9mcy9uZnMvbmZzNDIuaAppbmRleCBkMTAzMzNhLi43YWZiODk0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNDIuaAorKysgYi9mcy9uZnMvbmZzNDIuaApAQCAtNiw2ICs2LDggQEAKICNkZWZpbmUgX19MSU5VWF9GU19ORlNfTkZTNF8yX0gKIAogLyogbmZzNC4ycHJvYy5jICovCitpbnQgbmZzNDJfcHJvY19hbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGxvZmZfdCk7CitpbnQgbmZzNDJfcHJvY19kZWFsbG9jYXRlKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgbG9mZl90KTsKIGxvZmZfdCBuZnM0Ml9wcm9jX2xsc2VlayhzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7CiAKIC8qIG5mczQuMnhkci5oICovCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNDJwcm9jLmMgYi9mcy9uZnMvbmZzNDJwcm9jLmMKaW5kZXggMDg4NmYxZC4uY2IxNzA3MiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczQycHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0MnByb2MuYwpAQCAtMzIsNiArMzIsODEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IF9uZnM0Ml9wcm9jX2ZhbGxvY2F0ZShzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZywgc3RydWN0IGZpbGUgKmZpbGVwLAorCQkJCSBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlzdHJ1Y3QgbmZzNDJfZmFsbG9jX2FyZ3MgYXJncyA9IHsKKwkJLmZhbGxvY19maAk9IE5GU19GSChpbm9kZSksCisJCS5mYWxsb2Nfb2Zmc2V0CT0gb2Zmc2V0LAorCQkuZmFsbG9jX2xlbmd0aAk9IGxlbiwKKwl9OworCXN0cnVjdCBuZnM0Ml9mYWxsb2NfcmVzIHJlczsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihpbm9kZSk7CisJaW50IHN0YXR1czsKKworCW1zZy0+cnBjX2FyZ3AgPSAmYXJnczsKKwltc2ctPnJwY19yZXNwID0gJnJlczsKKworCXN0YXR1cyA9IG5mczQyX3NldF9yd19zdGF0ZWlkKCZhcmdzLmZhbGxvY19zdGF0ZWlkLCBmaWxlcCwgRk1PREVfV1JJVEUpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gbmZzNF9jYWxsX3N5bmMoc2VydmVyLT5jbGllbnQsIHNlcnZlciwgbXNnLAorCQkJICAgICAgJmFyZ3Muc2VxX2FyZ3MsICZyZXMuc2VxX3JlcywgMCk7Cit9CisKK3N0YXRpYyBpbnQgbmZzNDJfcHJvY19mYWxsb2NhdGUoc3RydWN0IHJwY19tZXNzYWdlICptc2csIHN0cnVjdCBmaWxlICpmaWxlcCwKKwkJCQlsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGZpbGVfaW5vZGUoZmlsZXApKTsKKwlzdHJ1Y3QgbmZzNF9leGNlcHRpb24gZXhjZXB0aW9uID0geyB9OworCWludCBlcnI7CisKKwlkbyB7CisJCWVyciA9IF9uZnM0Ml9wcm9jX2ZhbGxvY2F0ZShtc2csIGZpbGVwLCBvZmZzZXQsIGxlbik7CisJCWlmIChlcnIgPT0gLUVOT1RTVVBQKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQllcnIgPSBuZnM0X2hhbmRsZV9leGNlcHRpb24oc2VydmVyLCBlcnIsICZleGNlcHRpb24pOworCX0gd2hpbGUgKGV4Y2VwdGlvbi5yZXRyeSk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbmZzNDJfcHJvY19hbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pCit7CisJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKKwkJLnJwY19wcm9jID0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX0FMTE9DQVRFXSwKKwl9OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlpbnQgZXJyOworCisJaWYgKCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfQUxMT0NBVEUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnIgPSBuZnM0Ml9wcm9jX2ZhbGxvY2F0ZSgmbXNnLCBmaWxlcCwgb2Zmc2V0LCBsZW4pOworCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCisJCU5GU19TRVJWRVIoaW5vZGUpLT5jYXBzICY9IH5ORlNfQ0FQX0FMTE9DQVRFOworCXJldHVybiBlcnI7Cit9CisKK2ludCBuZnM0Ml9wcm9jX2RlYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGVwLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7CisJCS5ycGNfcHJvYyA9ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9ERUFMTE9DQVRFXSwKKwl9OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlpbnQgZXJyOworCisJaWYgKCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfREVBTExPQ0FURSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVyciA9IG5mczQyX3Byb2NfZmFsbG9jYXRlKCZtc2csIGZpbGVwLCBvZmZzZXQsIGxlbik7CisJaWYgKGVyciA9PSAtRU9QTk9UU1VQUCkKKwkJTkZTX1NFUlZFUihpbm9kZSktPmNhcHMgJj0gfk5GU19DQVBfREVBTExPQ0FURTsKKwlyZXR1cm4gZXJyOworfQorCiBsb2ZmX3QgbmZzNDJfcHJvY19sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGVwLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKQEAgLTUwLDcgKzEyNSw3IEBACiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOwogCWludCBzdGF0dXM7CiAKLQlpZiAoIShzZXJ2ZXItPmNhcHMgJiBORlNfQ0FQX1NFRUspKQorCWlmICghbmZzX3NlcnZlcl9jYXBhYmxlKGlub2RlLCBORlNfQ0FQX1NFRUspKQogCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJc3RhdHVzID0gbmZzNDJfc2V0X3J3X3N0YXRlaWQoJmFyZ3Muc2Ffc3RhdGVpZCwgZmlsZXAsIEZNT0RFX1JFQUQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczQyeGRyLmMgYi9mcy9uZnMvbmZzNDJ4ZHIuYwppbmRleCBjOTA0NjliLi4wMzhhN2UxNSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczQyeGRyLmMKKysrIGIvZnMvbmZzL25mczQyeGRyLmMKQEAgLTQsNiArNCwxNSBAQAogI2lmbmRlZiBfX0xJTlVYX0ZTX05GU19ORlM0XzJYRFJfSAogI2RlZmluZSBfX0xJTlVYX0ZTX05GU19ORlM0XzJYRFJfSAogCisjZGVmaW5lIGVuY29kZV9mYWxsb2NhdGVfbWF4c3oJCShlbmNvZGVfc3RhdGVpZF9tYXhzeiArIFwKKwkJCQkJIDIgLyogb2Zmc2V0ICovICsgXAorCQkJCQkgMiAvKiBsZW5ndGggKi8pCisjZGVmaW5lIGVuY29kZV9hbGxvY2F0ZV9tYXhzegkJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfZmFsbG9jYXRlX21heHN6KQorI2RlZmluZSBkZWNvZGVfYWxsb2NhdGVfbWF4c3oJCShvcF9kZWNvZGVfaGRyX21heHN6KQorI2RlZmluZSBlbmNvZGVfZGVhbGxvY2F0ZV9tYXhzegkJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfZmFsbG9jYXRlX21heHN6KQorI2RlZmluZSBkZWNvZGVfZGVhbGxvY2F0ZV9tYXhzegkJKG9wX2RlY29kZV9oZHJfbWF4c3opCiAjZGVmaW5lIGVuY29kZV9zZWVrX21heHN6CQkob3BfZW5jb2RlX2hkcl9tYXhzeiArIFwKIAkJCQkJIGVuY29kZV9zdGF0ZWlkX21heHN6ICsgXAogCQkJCQkgMiAvKiBvZmZzZXQgKi8gKyBcCkBAIC0xNCw2ICsyMywxOCBAQAogCQkJCQkgMiAvKiBvZmZzZXQgKi8gKyBcCiAJCQkJCSAyIC8qIGxlbmd0aCAqLykKIAorI2RlZmluZSBORlM0X2VuY19hbGxvY2F0ZV9zegkJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfYWxsb2NhdGVfbWF4c3opCisjZGVmaW5lIE5GUzRfZGVjX2FsbG9jYXRlX3N6CQkoY29tcG91bmRfZGVjb2RlX2hkcl9tYXhzeiArIFwKKwkJCQkJIGRlY29kZV9wdXRmaF9tYXhzeiArIFwKKwkJCQkJIGRlY29kZV9hbGxvY2F0ZV9tYXhzeikKKyNkZWZpbmUgTkZTNF9lbmNfZGVhbGxvY2F0ZV9zegkJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfZGVhbGxvY2F0ZV9tYXhzeikKKyNkZWZpbmUgTkZTNF9kZWNfZGVhbGxvY2F0ZV9zegkJKGNvbXBvdW5kX2RlY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBkZWNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJCSBkZWNvZGVfZGVhbGxvY2F0ZV9tYXhzeikKICNkZWZpbmUgTkZTNF9lbmNfc2Vla19zegkJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJCSBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCiAJCQkJCSBlbmNvZGVfc2Vla19tYXhzeikKQEAgLTIyLDYgKzQzLDMwIEBACiAJCQkJCSBkZWNvZGVfc2Vla19tYXhzeikKIAogCitzdGF0aWMgdm9pZCBlbmNvZGVfZmFsbG9jYXRlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyAqYXJncykKK3sKKwllbmNvZGVfbmZzNF9zdGF0ZWlkKHhkciwgJmFyZ3MtPmZhbGxvY19zdGF0ZWlkKTsKKwllbmNvZGVfdWludDY0KHhkciwgYXJncy0+ZmFsbG9jX29mZnNldCk7CisJZW5jb2RlX3VpbnQ2NCh4ZHIsIGFyZ3MtPmZhbGxvY19sZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVfYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICBzdHJ1Y3QgbmZzNDJfZmFsbG9jX2FyZ3MgKmFyZ3MsCisJCQkgICAgc3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQoreworCWVuY29kZV9vcF9oZHIoeGRyLCBPUF9BTExPQ0FURSwgZGVjb2RlX2FsbG9jYXRlX21heHN6LCBoZHIpOworCWVuY29kZV9mYWxsb2NhdGUoeGRyLCBhcmdzKTsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlX2RlYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyAqYXJncywKKwkJCSAgICAgIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKK3sKKwllbmNvZGVfb3BfaGRyKHhkciwgT1BfREVBTExPQ0FURSwgZGVjb2RlX2RlYWxsb2NhdGVfbWF4c3osIGhkcik7CisJZW5jb2RlX2ZhbGxvY2F0ZSh4ZHIsIGFyZ3MpOworfQorCiBzdGF0aWMgdm9pZCBlbmNvZGVfc2VlayhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJc3RydWN0IG5mczQyX3NlZWtfYXJncyAqYXJncywKIAkJCXN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKQEAgLTMzLDYgKzc4LDQyIEBACiB9CiAKIC8qCisgKiBFbmNvZGUgQUxMT0NBVEUgcmVxdWVzdAorICovCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgc3RydWN0IG5mczQyX2ZhbGxvY19hcmdzICphcmdzKQoreworCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0geworCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCisJfTsKKworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmFsbG9jX2ZoLCAmaGRyKTsKKwllbmNvZGVfYWxsb2NhdGUoeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfbm9wcygmaGRyKTsKK30KKworLyoKKyAqIEVuY29kZSBERUFMTE9DQVRFIHJlcXVlc3QKKyAqLworc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2RlYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKKwkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAorCX07CisKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZhbGxvY19maCwgJmhkcik7CisJZW5jb2RlX2RlYWxsb2NhdGUoeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfbm9wcygmaGRyKTsKK30KKworLyoKICAqIEVuY29kZSBTRUVLIHJlcXVlc3QKICAqLwogc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX3NlZWsoc3RydWN0IHJwY19ycXN0ICpyZXEsCkBAIC01MCw2ICsxMzEsMTYgQEAKIAllbmNvZGVfbm9wcygmaGRyKTsKIH0KIAorc3RhdGljIGludCBkZWNvZGVfYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczQyX2ZhbGxvY19yZXMgKnJlcykKK3sKKwlyZXR1cm4gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0FMTE9DQVRFKTsKK30KKworc3RhdGljIGludCBkZWNvZGVfZGVhbGxvY2F0ZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzNDJfZmFsbG9jX3JlcyAqcmVzKQoreworCXJldHVybiBkZWNvZGVfb3BfaGRyKHhkciwgT1BfREVBTExPQ0FURSk7Cit9CisKIHN0YXRpYyBpbnQgZGVjb2RlX3NlZWsoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczQyX3NlZWtfcmVzICpyZXMpCiB7CiAJaW50IHN0YXR1czsKQEAgLTczLDYgKzE2NCw1NCBAQAogfQogCiAvKgorICogRGVjb2RlIEFMTE9DQVRFIHJlcXVlc3QKKyAqLworc3RhdGljIGludCBuZnM0X3hkcl9kZWNfYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJCQkgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgc3RydWN0IG5mczQyX2ZhbGxvY19yZXMgKnJlcykKK3sKKwlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gb3V0OworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfYWxsb2NhdGUoeGRyLCByZXMpOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBEZWNvZGUgREVBTExPQ0FURSByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2RlYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfcmVzICpyZXMpCit7CisJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXQ7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXQ7CisJc3RhdHVzID0gZGVjb2RlX2RlYWxsb2NhdGUoeGRyLCByZXMpOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCiAgKiBEZWNvZGUgU0VFSyByZXF1ZXN0CiAgKi8KIHN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3NlZWsoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0X2ZzLmggYi9mcy9uZnMvbmZzNF9mcy5oCmluZGV4IGJlNmNhYzMuLmEwODE3ODcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0X2ZzLmgKKysrIGIvZnMvbmZzL25mczRfZnMuaApAQCAtMjI2LDYgKzIyNiw3IEBACiAJCQkJY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb25zICpsb2NhdGlvbnMpOwogCiAvKiBuZnM0cHJvYy5jICovCitleHRlcm4gaW50IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3QgbmZzX3NlcnZlciAqLCBpbnQsIHN0cnVjdCBuZnM0X2V4Y2VwdGlvbiAqKTsKIGV4dGVybiBpbnQgbmZzNF9jYWxsX3N5bmMoc3RydWN0IHJwY19jbG50ICosIHN0cnVjdCBuZnNfc2VydmVyICosCiAJCQkgIHN0cnVjdCBycGNfbWVzc2FnZSAqLCBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICosCiAJCQkgIHN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRjbGllbnQuYyBiL2ZzL25mcy9uZnM0Y2xpZW50LmMKaW5kZXggZmZkYjI4ZC4uMDMzMTEyNSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRjbGllbnQuYworKysgYi9mcy9uZnMvbmZzNGNsaWVudC5jCkBAIC0yNDEsMjggKzI0MSwyNSBAQAogICovCiBzdGF0aWMgaW50IG5mczRfaW5pdF9jYWxsYmFjayhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogeworCXN0cnVjdCBycGNfeHBydCAqeHBydDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoY2xwLT5ycGNfb3BzLT52ZXJzaW9uID09IDQpIHsKLQkJc3RydWN0IHJwY194cHJ0ICp4cHJ0OworCXhwcnQgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGNscC0+Y2xfcnBjY2xpZW50LT5jbF94cHJ0KTsKIAotCQl4cHJ0ID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhjbHAtPmNsX3JwY2NsaWVudC0+Y2xfeHBydCk7Ci0KLQkJaWYgKG5mczRfaGFzX3Nlc3Npb24oY2xwKSkgewotCQkJZXJyb3IgPSB4cHJ0X3NldHVwX2JhY2tjaGFubmVsKHhwcnQsCi0JCQkJCQlORlM0MV9CQ19NSU5fQ0FMTEJBQ0tTKTsKLQkJCWlmIChlcnJvciA8IDApCi0JCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0KLQkJZXJyb3IgPSBuZnNfY2FsbGJhY2tfdXAoY2xwLT5jbF9tdm9wcy0+bWlub3JfdmVyc2lvbiwgeHBydCk7Ci0JCWlmIChlcnJvciA8IDApIHsKLQkJCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc3RhcnQgY2FsbGJhY2suIEVycm9yID0gJWRcbiIsCi0JCQkJX19mdW5jX18sIGVycm9yKTsKKwlpZiAobmZzNF9oYXNfc2Vzc2lvbihjbHApKSB7CisJCWVycm9yID0geHBydF9zZXR1cF9iYWNrY2hhbm5lbCh4cHJ0LCBORlM0MV9CQ19NSU5fQ0FMTEJBQ0tTKTsKKwkJaWYgKGVycm9yIDwgMCkKIAkJCXJldHVybiBlcnJvcjsKLQkJfQotCQlfX3NldF9iaXQoTkZTX0NTX0NBTExCQUNLLCAmY2xwLT5jbF9yZXNfc3RhdGUpOwogCX0KKworCWVycm9yID0gbmZzX2NhbGxiYWNrX3VwKGNscC0+Y2xfbXZvcHMtPm1pbm9yX3ZlcnNpb24sIHhwcnQpOworCWlmIChlcnJvciA8IDApIHsKKwkJZHByaW50aygiJXM6IGZhaWxlZCB0byBzdGFydCBjYWxsYmFjay4gRXJyb3IgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJX19zZXRfYml0KE5GU19DU19DQUxMQkFDSywgJmNscC0+Y2xfcmVzX3N0YXRlKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00OTgsOCArNDk1LDcgQEAKIAkJCWF0b21pY19pbmMoJnBvcy0+Y2xfY291bnQpOwogCQkJc3Bpbl91bmxvY2soJm5uLT5uZnNfY2xpZW50X2xvY2spOwogCi0JCQlpZiAocHJldikKLQkJCQluZnNfcHV0X2NsaWVudChwcmV2KTsKKwkJCW5mc19wdXRfY2xpZW50KHByZXYpOwogCQkJcHJldiA9IHBvczsKIAogCQkJc3RhdHVzID0gbmZzX3dhaXRfY2xpZW50X2luaXRfY29tcGxldGUocG9zKTsKQEAgLTUxNyw4ICs1MTMsNyBAQAogCQlhdG9taWNfaW5jKCZwb3MtPmNsX2NvdW50KTsKIAkJc3Bpbl91bmxvY2soJm5uLT5uZnNfY2xpZW50X2xvY2spOwogCi0JCWlmIChwcmV2KQotCQkJbmZzX3B1dF9jbGllbnQocHJldik7CisJCW5mc19wdXRfY2xpZW50KHByZXYpOwogCQlwcmV2ID0gcG9zOwogCiAJCXN0YXR1cyA9IG5mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKHBvcywgJmNsaWQsIGNyZWQpOwpAQCAtNTQ5LDggKzU0NCw3IEBACiAKIAkvKiBObyBtYXRjaCBmb3VuZC4gVGhlIHNlcnZlciBsb3N0IG91ciBjbGllbnRpZCAqLwogb3V0OgotCWlmIChwcmV2KQotCQluZnNfcHV0X2NsaWVudChwcmV2KTsKKwluZnNfcHV0X2NsaWVudChwcmV2KTsKIAlkcHJpbnRrKCJORlM6IDwtLSAlcyBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTY0MSw4ICs2MzUsNyBAQAogCQkJYXRvbWljX2luYygmcG9zLT5jbF9jb3VudCk7CiAJCQlzcGluX3VubG9jaygmbm4tPm5mc19jbGllbnRfbG9jayk7CiAKLQkJCWlmIChwcmV2KQotCQkJCW5mc19wdXRfY2xpZW50KHByZXYpOworCQkJbmZzX3B1dF9jbGllbnQocHJldik7CiAJCQlwcmV2ID0gcG9zOwogCiAJCQlzdGF0dXMgPSBuZnNfd2FpdF9jbGllbnRfaW5pdF9jb21wbGV0ZShwb3MpOwpAQCAtNjc1LDggKzY2OCw3IEBACiAJLyogTm8gbWF0Y2hpbmcgbmZzX2NsaWVudCBmb3VuZC4gKi8KIAlzcGluX3VubG9jaygmbm4tPm5mc19jbGllbnRfbG9jayk7CiAJZHByaW50aygiTkZTOiA8LS0gJXMgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwotCWlmIChwcmV2KQotCQluZnNfcHV0X2NsaWVudChwcmV2KTsKKwluZnNfcHV0X2NsaWVudChwcmV2KTsKIAlyZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmCS8qIENPTkZJR19ORlNfVjRfMSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRmaWxlLmMgYi9mcy9uZnMvbmZzNGZpbGUuYwppbmRleCBjNTFmYjRkLi44YjQ2Mzg5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGUuYworKysgYi9mcy9uZnMvbmZzNGZpbGUuYwpAQCAtMyw2ICszLDggQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkyICBSaWNrIFNsYWRrZXkKICAqLworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJmc2NhY2hlLmgiCkBAIC0xMzQsNiArMTM2LDMyIEBACiAJCXJldHVybiBuZnNfZmlsZV9sbHNlZWsoZmlsZXAsIG9mZnNldCwgd2hlbmNlKTsKIAl9CiB9CisKK3N0YXRpYyBsb25nIG5mczQyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlsb25nIHJldDsKKworCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKChtb2RlICE9IDApICYmIChtb2RlICE9IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUpKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0ID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlpZiAobW9kZSAmIEZBTExPQ19GTF9QVU5DSF9IT0xFKQorCQlyZXQgPSBuZnM0Ml9wcm9jX2RlYWxsb2NhdGUoZmlsZXAsIG9mZnNldCwgbGVuKTsKKwllbHNlCisJCXJldCA9IG5mczQyX3Byb2NfYWxsb2NhdGUoZmlsZXAsIG9mZnNldCwgbGVuKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCW5mc196YXBfY2FjaGVzKGlub2RlKTsKKwlyZXR1cm4gcmV0OworfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMiAqLwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mczRfZmlsZV9vcGVyYXRpb25zID0gewpAQCAtMTU1LDYgKzE4Myw5IEBACiAJLmZsb2NrCQk9IG5mc19mbG9jaywKIAkuc3BsaWNlX3JlYWQJPSBuZnNfZmlsZV9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKKyNpZmRlZiBDT05GSUdfTkZTX1Y0XzIKKwkuZmFsbG9jYXRlCT0gbmZzNDJfZmFsbG9jYXRlLAorI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMiAqLwogCS5jaGVja19mbGFncwk9IG5mc19jaGVja19mbGFncywKIAkuc2V0bGVhc2UJPSBzaW1wbGVfbm9zZXRsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IDQwNWJkOTUuLmU3ZjhkNWYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC0xNTgsOCArMTU4LDYgQEAKIAkJcmV0dXJuIC1FQUNDRVM7CiAJY2FzZSAtTkZTNEVSUl9NSU5PUl9WRVJTX01JU01BVENIOgogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKLQljYXNlIC1ORlM0RVJSX0FDQ0VTUzoKLQkJcmV0dXJuIC1FQUNDRVM7CiAJY2FzZSAtTkZTNEVSUl9GSUxFX09QRU46CiAJCXJldHVybiAtRUJVU1k7CiAJZGVmYXVsdDoKQEAgLTM0NCw3ICszNDIsNyBAQAogLyogVGhpcyBpcyB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSBmb3IgcHJvY2Vzc2VzIHRoYXQgYXJlIGFsbG93ZWQKICAqIHRvIHNsZWVwLgogICovCi1zdGF0aWMgaW50IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBpbnQgZXJyb3Jjb2RlLCBzdHJ1Y3QgbmZzNF9leGNlcHRpb24gKmV4Y2VwdGlvbikKK2ludCBuZnM0X2hhbmRsZV9leGNlcHRpb24oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgaW50IGVycm9yY29kZSwgc3RydWN0IG5mczRfZXhjZXB0aW9uICpleGNlcHRpb24pCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUgPSBleGNlcHRpb24tPnN0YXRlOwpAQCAtMzcwLDExICszNjgsNiBAQAogCQljYXNlIC1ORlM0RVJSX0RFTEVHX1JFVk9LRUQ6CiAJCWNhc2UgLU5GUzRFUlJfQURNSU5fUkVWT0tFRDoKIAkJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKLQkJCWlmIChpbm9kZSAhPSBOVUxMICYmIG5mczRfaGF2ZV9kZWxlZ2F0aW9uKGlub2RlLCBGTU9ERV9SRUFEKSkgewotCQkJCW5mc19yZW1vdmVfYmFkX2RlbGVnYXRpb24oaW5vZGUpOwotCQkJCWV4Y2VwdGlvbi0+cmV0cnkgPSAxOwotCQkJCWJyZWFrOwotCQkJfQogCQkJaWYgKHN0YXRlID09IE5VTEwpCiAJCQkJYnJlYWs7CiAJCQlyZXQgPSBuZnM0X3NjaGVkdWxlX3N0YXRlaWRfcmVjb3Zlcnkoc2VydmVyLCBzdGF0ZSk7CkBAIC0xNjU0LDcgKzE2NDcsNyBAQAogCQkJbmZzX2lub2RlX2ZpbmRfc3RhdGVfYW5kX3JlY292ZXIoc3RhdGUtPmlub2RlLAogCQkJCQlzdGF0ZWlkKTsKIAkJCW5mczRfc2NoZWR1bGVfc3RhdGVpZF9yZWNvdmVyeShzZXJ2ZXIsIHN0YXRlKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCWNhc2UgLU5GUzRFUlJfREVMQVk6CiAJCWNhc2UgLU5GUzRFUlJfR1JBQ0U6CiAJCQlzZXRfYml0KE5GU19ERUxFR0FURURfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpOwpAQCAtMjEwOSw0NiArMjEwMiw2MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIG5mc19maW5pc2hfY2xlYXJfZGVsZWdhdGlvbl9zdGF0ZWlkKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSkKK3sKKwluZnNfcmVtb3ZlX2JhZF9kZWxlZ2F0aW9uKHN0YXRlLT5pbm9kZSk7CisJd3JpdGVfc2VxbG9jaygmc3RhdGUtPnNlcWxvY2spOworCW5mczRfc3RhdGVpZF9jb3B5KCZzdGF0ZS0+c3RhdGVpZCwgJnN0YXRlLT5vcGVuX3N0YXRlaWQpOworCXdyaXRlX3NlcXVubG9jaygmc3RhdGUtPnNlcWxvY2spOworCWNsZWFyX2JpdChORlNfREVMRUdBVEVEX1NUQVRFLCAmc3RhdGUtPmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbmZzNDBfY2xlYXJfZGVsZWdhdGlvbl9zdGF0ZWlkKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAocmN1X2FjY2Vzc19wb2ludGVyKE5GU19JKHN0YXRlLT5pbm9kZSktPmRlbGVnYXRpb24pICE9IE5VTEwpCisJCW5mc19maW5pc2hfY2xlYXJfZGVsZWdhdGlvbl9zdGF0ZWlkKHN0YXRlKTsKK30KKworc3RhdGljIGludCBuZnM0MF9vcGVuX2V4cGlyZWQoc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKnNwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCit7CisJLyogTkZTdjQuMCBkb2Vzbid0IGFsbG93IGZvciBkZWxlZ2F0aW9uIHJlY292ZXJ5IG9uIG9wZW4gZXhwaXJlICovCisJbmZzNDBfY2xlYXJfZGVsZWdhdGlvbl9zdGF0ZWlkKHN0YXRlKTsKKwlyZXR1cm4gbmZzNF9vcGVuX2V4cGlyZWQoc3AsIHN0YXRlKTsKK30KKwogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQotc3RhdGljIHZvaWQgbmZzNDFfY2xlYXJfZGVsZWdhdGlvbl9zdGF0ZWlkKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSkKK3N0YXRpYyB2b2lkIG5mczQxX2NoZWNrX2RlbGVnYXRpb25fc3RhdGVpZChzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoc3RhdGUtPmlub2RlKTsKLQluZnM0X3N0YXRlaWQgKnN0YXRlaWQgPSAmc3RhdGUtPnN0YXRlaWQ7CisJbmZzNF9zdGF0ZWlkIHN0YXRlaWQ7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwotCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IC1ORlM0RVJSX0JBRF9TVEFURUlEOwotCi0JLyogSWYgYSBzdGF0ZSByZXNldCBoYXMgYmVlbiBkb25lLCB0ZXN0X3N0YXRlaWQgaXMgdW5uZWVkZWQgKi8KLQlpZiAodGVzdF9iaXQoTkZTX0RFTEVHQVRFRF9TVEFURSwgJnN0YXRlLT5mbGFncykgPT0gMCkKLQkJcmV0dXJuOworCXN0cnVjdCBycGNfY3JlZCAqY3JlZDsKKwlpbnQgc3RhdHVzOwogCiAJLyogR2V0IHRoZSBkZWxlZ2F0aW9uIGNyZWRlbnRpYWwgZm9yIHVzZSBieSB0ZXN0L2ZyZWVfc3RhdGVpZCAqLwogCXJjdV9yZWFkX2xvY2soKTsKIAlkZWxlZ2F0aW9uID0gcmN1X2RlcmVmZXJlbmNlKE5GU19JKHN0YXRlLT5pbm9kZSktPmRlbGVnYXRpb24pOwotCWlmIChkZWxlZ2F0aW9uICE9IE5VTEwgJiYKLQkgICAgbmZzNF9zdGF0ZWlkX21hdGNoKCZkZWxlZ2F0aW9uLT5zdGF0ZWlkLCBzdGF0ZWlkKSkgewotCQljcmVkID0gZ2V0X3JwY2NyZWQoZGVsZWdhdGlvbi0+Y3JlZCk7CisJaWYgKGRlbGVnYXRpb24gPT0gTlVMTCkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJc3RhdHVzID0gbmZzNDFfdGVzdF9zdGF0ZWlkKHNlcnZlciwgc3RhdGVpZCwgY3JlZCk7Ci0JCXRyYWNlX25mczRfdGVzdF9kZWxlZ2F0aW9uX3N0YXRlaWQoc3RhdGUsIE5VTEwsIHN0YXR1cyk7Ci0JfSBlbHNlCi0JCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJbmZzNF9zdGF0ZWlkX2NvcHkoJnN0YXRlaWQsICZkZWxlZ2F0aW9uLT5zdGF0ZWlkKTsKKwljcmVkID0gZ2V0X3JwY2NyZWQoZGVsZWdhdGlvbi0+Y3JlZCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJc3RhdHVzID0gbmZzNDFfdGVzdF9zdGF0ZWlkKHNlcnZlciwgJnN0YXRlaWQsIGNyZWQpOworCXRyYWNlX25mczRfdGVzdF9kZWxlZ2F0aW9uX3N0YXRlaWQoc3RhdGUsIE5VTEwsIHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICE9IE5GU19PSykgewogCQkvKiBGcmVlIHRoZSBzdGF0ZWlkIHVubGVzcyB0aGUgc2VydmVyIGV4cGxpY2l0bHkKIAkJICogaW5mb3JtcyB1cyB0aGUgc3RhdGVpZCBpcyB1bnJlY29nbml6ZWQuICovCiAJCWlmIChzdGF0dXMgIT0gLU5GUzRFUlJfQkFEX1NUQVRFSUQpCi0JCQluZnM0MV9mcmVlX3N0YXRlaWQoc2VydmVyLCBzdGF0ZWlkLCBjcmVkKTsKLQkJbmZzX3JlbW92ZV9iYWRfZGVsZWdhdGlvbihzdGF0ZS0+aW5vZGUpOwotCi0JCXdyaXRlX3NlcWxvY2soJnN0YXRlLT5zZXFsb2NrKTsKLQkJbmZzNF9zdGF0ZWlkX2NvcHkoJnN0YXRlLT5zdGF0ZWlkLCAmc3RhdGUtPm9wZW5fc3RhdGVpZCk7Ci0JCXdyaXRlX3NlcXVubG9jaygmc3RhdGUtPnNlcWxvY2spOwotCQljbGVhcl9iaXQoTkZTX0RFTEVHQVRFRF9TVEFURSwgJnN0YXRlLT5mbGFncyk7CisJCQluZnM0MV9mcmVlX3N0YXRlaWQoc2VydmVyLCAmc3RhdGVpZCwgY3JlZCk7CisJCW5mc19maW5pc2hfY2xlYXJfZGVsZWdhdGlvbl9zdGF0ZWlkKHN0YXRlKTsKIAl9CiAKLQlpZiAoY3JlZCAhPSBOVUxMKQotCQlwdXRfcnBjY3JlZChjcmVkKTsKKwlwdXRfcnBjY3JlZChjcmVkKTsKIH0KIAogLyoqCkBAIC0yMTkyLDcgKzIxOTksNyBAQAogewogCWludCBzdGF0dXM7CiAKLQluZnM0MV9jbGVhcl9kZWxlZ2F0aW9uX3N0YXRlaWQoc3RhdGUpOworCW5mczQxX2NoZWNrX2RlbGVnYXRpb25fc3RhdGVpZChzdGF0ZSk7CiAJc3RhdHVzID0gbmZzNDFfY2hlY2tfb3Blbl9zdGF0ZWlkKHN0YXRlKTsKIAlpZiAoc3RhdHVzICE9IE5GU19PSykKIAkJc3RhdHVzID0gbmZzNF9vcGVuX2V4cGlyZWQoc3AsIHN0YXRlKTsKQEAgLTIyMzEsMTkgKzIyMzgsOCBAQAogCXNlcSA9IHJhd19zZXFjb3VudF9iZWdpbigmc3AtPnNvX3JlY2xhaW1fc2VxY291bnQpOwogCiAJcmV0ID0gX25mczRfcHJvY19vcGVuKG9wZW5kYXRhKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJaWYgKHJldCA9PSAtRU5PRU5UKSB7Ci0JCQlkZW50cnkgPSBvcGVuZGF0YS0+ZGVudHJ5OwotCQkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKLQkJCQlkX2RlbGV0ZShkZW50cnkpOwotCQkJZWxzZSBpZiAoZF91bmhhc2hlZChkZW50cnkpKQotCQkJCWRfYWRkKGRlbnRyeSwgTlVMTCk7Ci0KLQkJCW5mc19zZXRfdmVyaWZpZXIoZGVudHJ5LAotCQkJCQkgbmZzX3NhdmVfY2hhbmdlX2F0dHJpYnV0ZShvcGVuZGF0YS0+ZGlyLT5kX2lub2RlKSk7Ci0JCX0KKwlpZiAocmV0ICE9IDApCiAJCWdvdG8gb3V0OwotCX0KIAogCXN0YXRlID0gbmZzNF9vcGVuZGF0YV90b19uZnM0X3N0YXRlKG9wZW5kYXRhKTsKIAlyZXQgPSBQVFJfRVJSKHN0YXRlKTsKQEAgLTQ4NDEsOSArNDgzNyw2IEBACiAJCWNhc2UgLU5GUzRFUlJfREVMRUdfUkVWT0tFRDoKIAkJY2FzZSAtTkZTNEVSUl9BRE1JTl9SRVZPS0VEOgogCQljYXNlIC1ORlM0RVJSX0JBRF9TVEFURUlEOgotCQkJaWYgKHN0YXRlID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0JCQluZnNfcmVtb3ZlX2JhZF9kZWxlZ2F0aW9uKHN0YXRlLT5pbm9kZSk7CiAJCWNhc2UgLU5GUzRFUlJfT1BFTk1PREU6CiAJCQlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJCQlicmVhazsKQEAgLTc3MDksNiArNzcwMiw5IEBACiAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAorCS8qIG5mczRfbGF5b3V0Z2V0X3JlbGVhc2UgY2FsbHMgcG5mc19wdXRfbGF5b3V0X2hkciAqLworCXBuZnNfZ2V0X2xheW91dF9oZHIoTkZTX0koaW5vZGUpLT5sYXlvdXQpOworCiAJbGdwLT5hcmdzLmxheW91dC5wYWdlcyA9IG5mczRfYWxsb2NfcGFnZXMobWF4X3BhZ2VzLCBnZnBfZmxhZ3MpOwogCWlmICghbGdwLT5hcmdzLmxheW91dC5wYWdlcykgewogCQluZnM0X2xheW91dGdldF9yZWxlYXNlKGxncCk7CkBAIC03NzIxLDkgKzc3MTcsNiBAQAogCWxncC0+cmVzLnNlcV9yZXMuc3Jfc2xvdCA9IE5VTEw7CiAJbmZzNF9pbml0X3NlcXVlbmNlKCZsZ3AtPmFyZ3Muc2VxX2FyZ3MsICZsZ3AtPnJlcy5zZXFfcmVzLCAwKTsKIAotCS8qIG5mczRfbGF5b3V0Z2V0X3JlbGVhc2UgY2FsbHMgcG5mc19wdXRfbGF5b3V0X2hkciAqLwotCXBuZnNfZ2V0X2xheW91dF9oZHIoTkZTX0koaW5vZGUpLT5sYXlvdXQpOwotCiAJdGFzayA9IHJwY19ydW5fdGFzaygmdGFza19zZXR1cF9kYXRhKTsKIAlpZiAoSVNfRVJSKHRhc2spKQogCQlyZXR1cm4gRVJSX0NBU1QodGFzayk7CkBAIC04MzQxLDcgKzgzMzQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyBuZnM0MF9ub2dyYWNlX3JlY292ZXJ5X29wcyA9IHsKIAkub3duZXJfZmxhZ19iaXQgPSBORlNfT1dORVJfUkVDTEFJTV9OT0dSQUNFLAogCS5zdGF0ZV9mbGFnX2JpdAk9IE5GU19TVEFURV9SRUNMQUlNX05PR1JBQ0UsCi0JLnJlY292ZXJfb3Blbgk9IG5mczRfb3Blbl9leHBpcmVkLAorCS5yZWNvdmVyX29wZW4JPSBuZnM0MF9vcGVuX2V4cGlyZWQsCiAJLnJlY292ZXJfbG9jawk9IG5mczRfbG9ja19leHBpcmVkLAogCS5lc3RhYmxpc2hfY2xpZCA9IG5mczRfaW5pdF9jbGllbnRpZCwKIH07CkBAIC04NDA4LDggKzg0MDEsNyBAQAogCQl8IE5GU19DQVBfQ0hBTkdFX0FUVFIKIAkJfCBORlNfQ0FQX1BPU0lYX0xPQ0sKIAkJfCBORlNfQ0FQX1NUQVRFSURfTkZTVjQxCi0JCXwgTkZTX0NBUF9BVE9NSUNfT1BFTl9WMQotCQl8IE5GU19DQVBfU0VFSywKKwkJfCBORlNfQ0FQX0FUT01JQ19PUEVOX1YxLAogCS5pbml0X2NsaWVudCA9IG5mczQxX2luaXRfY2xpZW50LAogCS5zaHV0ZG93bl9jbGllbnQgPSBuZnM0MV9zaHV0ZG93bl9jbGllbnQsCiAJLm1hdGNoX3N0YXRlaWQgPSBuZnM0MV9tYXRjaF9zdGF0ZWlkLApAQCAtODQzMSw3ICs4NDIzLDEwIEBACiAJCXwgTkZTX0NBUF9DSEFOR0VfQVRUUgogCQl8IE5GU19DQVBfUE9TSVhfTE9DSwogCQl8IE5GU19DQVBfU1RBVEVJRF9ORlNWNDEKLQkJfCBORlNfQ0FQX0FUT01JQ19PUEVOX1YxLAorCQl8IE5GU19DQVBfQVRPTUlDX09QRU5fVjEKKwkJfCBORlNfQ0FQX0FMTE9DQVRFCisJCXwgTkZTX0NBUF9ERUFMTE9DQVRFCisJCXwgTkZTX0NBUF9TRUVLLAogCS5pbml0X2NsaWVudCA9IG5mczQxX2luaXRfY2xpZW50LAogCS5zaHV0ZG93bl9jbGllbnQgPSBuZnM0MV9zaHV0ZG93bl9jbGllbnQsCiAJLm1hdGNoX3N0YXRlaWQgPSBuZnM0MV9tYXRjaF9zdGF0ZWlkLApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczR4ZHIuYyBiL2ZzL25mcy9uZnM0eGRyLmMKaW5kZXggMjA2YzA4YS4uY2I0Mzc2YiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczR4ZHIuYworKysgYi9mcy9uZnMvbmZzNHhkci5jCkBAIC0xNDEsMTMgKzE0MSwxNSBAQAogCQkJCVhEUl9RVUFETEVOKE5GUzRfVkVSSUZJRVJfU0laRSkgKyBcCiAJCQkJWERSX1FVQURMRU4oTkZTNF9TRVRDTElFTlRJRF9OQU1FTEVOKSArIFwKIAkJCQkxIC8qIHNjX3Byb2cgKi8gKyBcCi0JCQkJWERSX1FVQURMRU4oUlBDQklORF9NQVhORVRJRExFTikgKyBcCi0JCQkJWERSX1FVQURMRU4oUlBDQklORF9NQVhVQUREUkxFTikgKyBcCisJCQkJMSArIFhEUl9RVUFETEVOKFJQQ0JJTkRfTUFYTkVUSURMRU4pICsgXAorCQkJCTEgKyBYRFJfUVVBRExFTihSUENCSU5EX01BWFVBRERSTEVOKSArIFwKIAkJCQkxKSAvKiBzY19jYl9pZGVudCAqLwogI2RlZmluZSBkZWNvZGVfc2V0Y2xpZW50aWRfbWF4c3ogXAogCQkJCShvcF9kZWNvZGVfaGRyX21heHN6ICsgXAotCQkJCTIgKyBcCi0JCQkJMTAyNCkgLyogbGFyZ2UgdmFsdWUgZm9yIENMSURfSU5VU0UgKi8KKwkJCQkyIC8qIGNsaWVudGlkICovICsgXAorCQkJCVhEUl9RVUFETEVOKE5GUzRfVkVSSUZJRVJfU0laRSkgKyBcCisJCQkJMSArIFhEUl9RVUFETEVOKFJQQ0JJTkRfTUFYTkVUSURMRU4pICsgXAorCQkJCTEgKyBYRFJfUVVBRExFTihSUENCSU5EX01BWFVBRERSTEVOKSkKICNkZWZpbmUgZW5jb2RlX3NldGNsaWVudGlkX2NvbmZpcm1fbWF4c3ogXAogCQkJCShvcF9lbmNvZGVfaGRyX21heHN6ICsgXAogCQkJCTMgKyAoTkZTNF9WRVJJRklFUl9TSVpFID4+IDIpKQpAQCAtNzM5NCw2ICs3Mzk2LDggQEAKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KICNpZmRlZiBDT05GSUdfTkZTX1Y0XzIKIAlQUk9DKFNFRUssCQllbmNfc2VlaywJCWRlY19zZWVrKSwKKwlQUk9DKEFMTE9DQVRFLAkJZW5jX2FsbG9jYXRlLAkJZGVjX2FsbG9jYXRlKSwKKwlQUk9DKERFQUxMT0NBVEUsCWVuY19kZWFsbG9jYXRlLAkJZGVjX2RlYWxsb2NhdGUpLAogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMiAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL3BhZ2VsaXN0LmMgYi9mcy9uZnMvcGFnZWxpc3QuYwppbmRleCBlZDBkYjYxLi4yYjVlNzY5IDEwMDY0NAotLS0gYS9mcy9uZnMvcGFnZWxpc3QuYworKysgYi9mcy9uZnMvcGFnZWxpc3QuYwpAQCAtMjU4LDYgKzI1OCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIG5mc19wYWdlX2dyb3VwX2luaXQoc3RydWN0IG5mc19wYWdlICpyZXEsIHN0cnVjdCBuZnNfcGFnZSAqcHJldikKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCVdBUk5fT05fT05DRShwcmV2ID09IHJlcSk7CiAKIAlpZiAoIXByZXYpIHsKQEAgLTI3NiwxMiArMjc3LDE2IEBACiAJCSAqIG5mc19wYWdlX2dyb3VwX2Rlc3Ryb3kgaXMgY2FsbGVkICovCiAJCWtyZWZfZ2V0KCZyZXEtPndiX2hlYWQtPndiX2tyZWYpOwogCi0JCS8qIGdyYWIgZXh0cmEgcmVmIGlmIGhlYWQgcmVxdWVzdCBoYXMgZXh0cmEgcmVmIGZyb20KLQkJICogdGhlIHdyaXRlL2NvbW1pdCBwYXRoIHRvIGhhbmRsZSBoYW5kb2ZmIGJldHdlZW4gd3JpdGUKLQkJICogYW5kIGNvbW1pdCBsaXN0cyAqLworCQkvKiBncmFiIGV4dHJhIHJlZiBhbmQgYnVtcCB0aGUgcmVxdWVzdCBjb3VudCBpZiBoZWFkIHJlcXVlc3QKKwkJICogaGFzIGV4dHJhIHJlZiBmcm9tIHRoZSB3cml0ZS9jb21taXQgcGF0aCB0byBoYW5kbGUgaGFuZG9mZgorCQkgKiBiZXR3ZWVuIHdyaXRlIGFuZCBjb21taXQgbGlzdHMuICovCiAJCWlmICh0ZXN0X2JpdChQR19JTk9ERV9SRUYsICZwcmV2LT53Yl9oZWFkLT53Yl9mbGFncykpIHsKKwkJCWlub2RlID0gcGFnZV9maWxlX21hcHBpbmcocmVxLT53Yl9wYWdlKS0+aG9zdDsKIAkJCXNldF9iaXQoUEdfSU5PREVfUkVGLCAmcmVxLT53Yl9mbGFncyk7CiAJCQlrcmVmX2dldCgmcmVxLT53Yl9rcmVmKTsKKwkJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCQlORlNfSShpbm9kZSktPm5yZXF1ZXN0cysrOworCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3JlYWQuYyBiL2ZzL25mcy9yZWFkLmMKaW5kZXggYmVmZjI3Ni4uYzkxYTQ3OSAxMDA2NDQKLS0tIGEvZnMvbmZzL3JlYWQuYworKysgYi9mcy9uZnMvcmVhZC5jCkBAIC0yNjksNyArMjY5LDcgQEAKIAlkcHJpbnRrKCJORlM6IG5mc19yZWFkcGFnZSAoJXAgJWxkQCVsdSlcbiIsCiAJCXBhZ2UsIFBBR0VfQ0FDSEVfU0laRSwgcGFnZV9maWxlX2luZGV4KHBhZ2UpKTsKIAluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfVkZTUkVBRFBBR0UpOwotCW5mc19hZGRfc3RhdHMoaW5vZGUsIE5GU0lPU19SRUFEUEFHRVMsIDEpOworCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19SRUFEUEFHRVMpOwogCiAJLyoKIAkgKiBUcnkgdG8gZmx1c2ggYW55IHBlbmRpbmcgd3JpdGVzIHRvIHRoZSBmaWxlLi4KZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggMTI0OTM4NC4uYWYzYWY2OCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTU3NSw3ICs1NzUsNyBAQAogCWludCByZXQ7CiAKIAluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfVkZTV1JJVEVQQUdFKTsKLQluZnNfYWRkX3N0YXRzKGlub2RlLCBORlNJT1NfV1JJVEVQQUdFUywgMSk7CisJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX1dSSVRFUEFHRVMpOwogCiAJbmZzX3BhZ2Vpb19jb25kX2NvbXBsZXRlKHBnaW8sIHBhZ2VfZmlsZV9pbmRleChwYWdlKSk7CiAJcmV0ID0gbmZzX3BhZ2VfYXN5bmNfZmx1c2gocGdpbywgcGFnZSwgd2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKTsKQEAgLTY3MCw3ICs2NzAsOCBAQAogCW5mc19sb2NrX3JlcXVlc3QocmVxKTsKIAogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JaWYgKCFuZnNpLT5ucGFnZXMgJiYgTkZTX1BST1RPKGlub2RlKS0+aGF2ZV9kZWxlZ2F0aW9uKGlub2RlLCBGTU9ERV9XUklURSkpCisJaWYgKCFuZnNpLT5ucmVxdWVzdHMgJiYKKwkgICAgTkZTX1BST1RPKGlub2RlKS0+aGF2ZV9kZWxlZ2F0aW9uKGlub2RlLCBGTU9ERV9XUklURSkpCiAJCWlub2RlLT5pX3ZlcnNpb24rKzsKIAkvKgogCSAqIFN3YXAtc3BhY2Ugc2hvdWxkIG5vdCBnZXQgdHJ1bmNhdGVkLiBIZW5jZSBubyBuZWVkIHRvIHBsdWcgdGhlIHJhY2UKQEAgLTY4MSw5ICs2ODIsMTEgQEAKIAkJU2V0UGFnZVByaXZhdGUocmVxLT53Yl9wYWdlKTsKIAkJc2V0X3BhZ2VfcHJpdmF0ZShyZXEtPndiX3BhZ2UsICh1bnNpZ25lZCBsb25nKXJlcSk7CiAJfQotCW5mc2ktPm5wYWdlcysrOworCW5mc2ktPm5yZXF1ZXN0cysrOwogCS8qIHRoaXMgYSBoZWFkIHJlcXVlc3QgZm9yIGEgcGFnZSBncm91cCAtIG1hcmsgaXQgYXMgaGF2aW5nIGFuCi0JICogZXh0cmEgcmVmZXJlbmNlIHNvIHN1YiBncm91cHMgY2FuIGZvbGxvdyBzdWl0ICovCisJICogZXh0cmEgcmVmZXJlbmNlIHNvIHN1YiBncm91cHMgY2FuIGZvbGxvdyBzdWl0LgorCSAqIFRoaXMgZmxhZyBhbHNvIGluZm9ybXMgcGdpbyBsYXllciB3aGVuIHRvIGJ1bXAgbnJlcXVlc3RzIHdoZW4KKwkgKiBhZGRpbmcgc3VicmVxdWVzdHMuICovCiAJV0FSTl9PTih0ZXN0X2FuZF9zZXRfYml0KFBHX0lOT0RFX1JFRiwgJnJlcS0+d2JfZmxhZ3MpKTsKIAlrcmVmX2dldCgmcmVxLT53Yl9rcmVmKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CkBAIC03MDksMTQgKzcxMiwxNiBAQAogCQkJd2FrZV91cF9wYWdlKGhlYWQtPndiX3BhZ2UsIFBHX3ByaXZhdGUpOwogCQkJY2xlYXJfYml0KFBHX01BUFBFRCwgJmhlYWQtPndiX2ZsYWdzKTsKIAkJfQotCQluZnNpLT5ucGFnZXMtLTsKKwkJbmZzaS0+bnJlcXVlc3RzLS07CisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQluZnNpLT5ucmVxdWVzdHMtLTsKIAkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCX0KIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfSU5PREVfUkVGLCAmcmVxLT53Yl9mbGFncykpCiAJCW5mc19yZWxlYXNlX3JlcXVlc3QocmVxKTsKLQllbHNlCi0JCVdBUk5fT05fT05DRSgxKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE3MzcsNyArMTc0Miw3IEBACiAJCS8qIERvbid0IGNvbW1pdCB5ZXQgaWYgdGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmbHVzaCBhbmQgdGhlcmUKIAkJICogYXJlIGEgbG90IG9mIG91dHN0YW5kaW5nIHdyaXRlcyBmb3IgdGhpcyBtYXBwaW5nLgogCQkgKi8KLQkJaWYgKG5mc2ktPmNvbW1pdF9pbmZvLm5jb21taXQgPD0gKG5mc2ktPm5wYWdlcyA+PiAxKSkKKwkJaWYgKG5mc2ktPmNvbW1pdF9pbmZvLm5jb21taXQgPD0gKG5mc2ktPm5yZXF1ZXN0cyA+PiAxKSkKIAkJCWdvdG8gb3V0X21hcmtfZGlydHk7CiAKIAkJLyogZG9uJ3Qgd2FpdCBmb3IgdGhlIENPTU1JVCByZXNwb25zZSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKaW5kZXggZWQyYjExNS4uN2NiZGYxYiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYworKysgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCkBAIC03NzQsOCArNzc0LDEyIEBACiB7CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmNscC0+Y2xfY2Jfc2xvdF9idXN5KSAhPSAwKSB7CiAJCXJwY19zbGVlcF9vbigmY2xwLT5jbF9jYl93YWl0cSwgdGFzaywgTlVMTCk7Ci0JCWRwcmludGsoIiVzIHNsb3QgaXMgYnVzeVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gZmFsc2U7CisJCS8qIFJhY2UgYnJlYWtlciAqLworCQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmY2xwLT5jbF9jYl9zbG90X2J1c3kpICE9IDApIHsKKwkJCWRwcmludGsoIiVzIHNsb3QgaXMgYnVzeVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJwY193YWtlX3VwX3F1ZXVlZF90YXNrKCZjbHAtPmNsX2NiX3dhaXRxLCB0YXNrKTsKIAl9CiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2QuaCBiL2ZzL25mc2QvbmZzZC5oCmluZGV4IDc0N2YzYjk1Li4zM2E0NmE4IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2QuaAorKysgYi9mcy9uZnNkL25mc2QuaApAQCAtMzM1LDEyICszMzUsMTUgQEAKIAkoTkZTRDRfU1VQUE9SVEVEX0FUVFJTX1dPUkQyIHwgRkFUVFI0X1dPUkQyX1NVUFBBVFRSX0VYQ0xDUkVBVCkKIAogI2lmZGVmIENPTkZJR19ORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMCi0jZGVmaW5lIE5GU0Q0XzJfU1VQUE9SVEVEX0FUVFJTX1dPUkQyIFwKLQkoTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDIgfCBGQVRUUjRfV09SRDJfU0VDVVJJVFlfTEFCRUwpCisjZGVmaW5lIE5GU0Q0XzJfU0VDVVJJVFlfQVRUUlMJCUZBVFRSNF9XT1JEMl9TRUNVUklUWV9MQUJFTAogI2Vsc2UKLSNkZWZpbmUgTkZTRDRfMl9TVVBQT1JURURfQVRUUlNfV09SRDIgMAorI2RlZmluZSBORlNENF8yX1NFQ1VSSVRZX0FUVFJTCQkwCiAjZW5kaWYKIAorI2RlZmluZSBORlNENF8yX1NVUFBPUlRFRF9BVFRSU19XT1JEMiBcCisJKE5GU0Q0XzFfU1VQUE9SVEVEX0FUVFJTX1dPUkQyIHwgXAorCU5GU0Q0XzJfU0VDVVJJVFlfQVRUUlMpCisKIHN0YXRpYyBpbmxpbmUgdTMyIG5mc2Rfc3VwcGF0dHJzMCh1MzIgbWlub3J2ZXJzaW9uKQogewogCXJldHVybiBtaW5vcnZlcnNpb24gPyBORlNENF8xX1NVUFBPUlRFRF9BVFRSU19XT1JEMApkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zzbm90aWZ5LmMgYi9mcy9ub3RpZnkvZnNub3RpZnkuYwppbmRleCA5ZDNlOWM1Li44OTMyNmFjIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZnNub3RpZnkuYworKysgYi9mcy9ub3RpZnkvZnNub3RpZnkuYwpAQCAtMjI5LDggKzIyOSwxNiBAQAogCQkJCQkgICAgICAmZnNub3RpZnlfbWFya19zcmN1KTsKIAl9CiAKKwkvKgorCSAqIFdlIG5lZWQgdG8gbWVyZ2UgaW5vZGUgJiB2ZnNtb3VudCBtYXJrIGxpc3RzIHNvIHRoYXQgaW5vZGUgbWFyaworCSAqIGlnbm9yZSBtYXNrcyBhcmUgcHJvcGVybHkgcmVmbGVjdGVkIGZvciBtb3VudCBtYXJrIG5vdGlmaWNhdGlvbnMuCisJICogVGhhdCdzIHdoeSB0aGlzIHRyYXZlcnNhbCBpcyBzbyBjb21wbGljYXRlZC4uLgorCSAqLwogCXdoaWxlIChpbm9kZV9ub2RlIHx8IHZmc21vdW50X25vZGUpIHsKLQkJaW5vZGVfZ3JvdXAgPSB2ZnNtb3VudF9ncm91cCA9IE5VTEw7CisJCWlub2RlX2dyb3VwID0gTlVMTDsKKwkJaW5vZGVfbWFyayA9IE5VTEw7CisJCXZmc21vdW50X2dyb3VwID0gTlVMTDsKKwkJdmZzbW91bnRfbWFyayA9IE5VTEw7CiAKIAkJaWYgKGlub2RlX25vZGUpIHsKIAkJCWlub2RlX21hcmsgPSBobGlzdF9lbnRyeShzcmN1X2RlcmVmZXJlbmNlKGlub2RlX25vZGUsICZmc25vdGlmeV9tYXJrX3NyY3UpLApAQCAtMjQ0LDIxICsyNTIsMTkgQEAKIAkJCXZmc21vdW50X2dyb3VwID0gdmZzbW91bnRfbWFyay0+Z3JvdXA7CiAJCX0KIAotCQlpZiAoaW5vZGVfZ3JvdXAgPiB2ZnNtb3VudF9ncm91cCkgewotCQkJLyogaGFuZGxlIGlub2RlICovCi0JCQlyZXQgPSBzZW5kX3RvX2dyb3VwKHRvX3RlbGwsIGlub2RlX21hcmssIE5VTEwsIG1hc2ssCi0JCQkJCSAgICBkYXRhLCBkYXRhX2lzLCBjb29raWUsIGZpbGVfbmFtZSk7Ci0JCQkvKiB3ZSBkaWRuJ3QgdXNlIHRoZSB2ZnNtb3VudF9tYXJrICovCi0JCQl2ZnNtb3VudF9ncm91cCA9IE5VTEw7Ci0JCX0gZWxzZSBpZiAodmZzbW91bnRfZ3JvdXAgPiBpbm9kZV9ncm91cCkgewotCQkJcmV0ID0gc2VuZF90b19ncm91cCh0b190ZWxsLCBOVUxMLCB2ZnNtb3VudF9tYXJrLCBtYXNrLAotCQkJCQkgICAgZGF0YSwgZGF0YV9pcywgY29va2llLCBmaWxlX25hbWUpOwotCQkJaW5vZGVfZ3JvdXAgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJcmV0ID0gc2VuZF90b19ncm91cCh0b190ZWxsLCBpbm9kZV9tYXJrLCB2ZnNtb3VudF9tYXJrLAotCQkJCQkgICAgbWFzaywgZGF0YSwgZGF0YV9pcywgY29va2llLAotCQkJCQkgICAgZmlsZV9uYW1lKTsKKwkJaWYgKGlub2RlX2dyb3VwICYmIHZmc21vdW50X2dyb3VwKSB7CisJCQlpbnQgY21wID0gZnNub3RpZnlfY29tcGFyZV9ncm91cHMoaW5vZGVfZ3JvdXAsCisJCQkJCQkJICB2ZnNtb3VudF9ncm91cCk7CisJCQlpZiAoY21wID4gMCkgeworCQkJCWlub2RlX2dyb3VwID0gTlVMTDsKKwkJCQlpbm9kZV9tYXJrID0gTlVMTDsKKwkJCX0gZWxzZSBpZiAoY21wIDwgMCkgeworCQkJCXZmc21vdW50X2dyb3VwID0gTlVMTDsKKwkJCQl2ZnNtb3VudF9tYXJrID0gTlVMTDsKKwkJCX0KIAkJfQorCQlyZXQgPSBzZW5kX3RvX2dyb3VwKHRvX3RlbGwsIGlub2RlX21hcmssIHZmc21vdW50X21hcmssIG1hc2ssCisJCQkJICAgIGRhdGEsIGRhdGFfaXMsIGNvb2tpZSwgZmlsZV9uYW1lKTsKIAogCQlpZiAocmV0ICYmIChtYXNrICYgQUxMX0ZTTk9USUZZX1BFUk1fRVZFTlRTKSkKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zzbm90aWZ5LmggYi9mcy9ub3RpZnkvZnNub3RpZnkuaAppbmRleCA5YzA4OThjLi4zYjY4YjBhIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZnNub3RpZnkuaAorKysgYi9mcy9ub3RpZnkvZnNub3RpZnkuaApAQCAtMTIsNiArMTIsMTAgQEAKIC8qIHByb3RlY3RzIHJlYWRzIG9mIGlub2RlIGFuZCB2ZnNtb3VudCBtYXJrcyBsaXN0ICovCiBleHRlcm4gc3RydWN0IHNyY3Vfc3RydWN0IGZzbm90aWZ5X21hcmtfc3JjdTsKIAorLyogY29tcGFyZSB0d28gZ3JvdXBzIGZvciBzb3J0aW5nIG9mIG1hcmtzIGxpc3RzICovCitleHRlcm4gaW50IGZzbm90aWZ5X2NvbXBhcmVfZ3JvdXBzKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqYSwKKwkJCQkgICBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmIpOworCiBleHRlcm4gdm9pZCBmc25vdGlmeV9zZXRfaW5vZGVfbWFya19tYXNrX2xvY2tlZChzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZnNuX21hcmssCiAJCQkJCQlfX3UzMiBtYXNrKTsKIC8qIGFkZCBhIG1hcmsgdG8gYW4gaW5vZGUgKi8KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMgYi9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCmluZGV4IGU4NDk3MTQuLmRmYmY1NDQgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKKysrIGIvZnMvbm90aWZ5L2lub2RlX21hcmsuYwpAQCAtMTk0LDYgKzE5NCw3IEBACiB7CiAJc3RydWN0IGZzbm90aWZ5X21hcmsgKmxtYXJrLCAqbGFzdCA9IE5VTEw7CiAJaW50IHJldCA9IDA7CisJaW50IGNtcDsKIAogCW1hcmstPmZsYWdzIHw9IEZTTk9USUZZX01BUktfRkxBR19JTk9ERTsKIApAQCAtMjE5LDExICsyMjAsOCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlpZiAobWFyay0+Z3JvdXAtPnByaW9yaXR5IDwgbG1hcmstPmdyb3VwLT5wcmlvcml0eSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgobWFyay0+Z3JvdXAtPnByaW9yaXR5ID09IGxtYXJrLT5ncm91cC0+cHJpb3JpdHkpICYmCi0JCSAgICAobWFyay0+Z3JvdXAgPCBsbWFyay0+Z3JvdXApKQorCQljbXAgPSBmc25vdGlmeV9jb21wYXJlX2dyb3VwcyhsbWFyay0+Z3JvdXAsIG1hcmstPmdyb3VwKTsKKwkJaWYgKGNtcCA8IDApCiAJCQljb250aW51ZTsKIAogCQlobGlzdF9hZGRfYmVmb3JlX3JjdSgmbWFyay0+aS5pX2xpc3QsICZsbWFyay0+aS5pX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwppbmRleCBkYWY3NjY1Li4yODNhYTMxIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYworKysgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwpAQCAtMjI3LDE0ICsyMjcsMTMgQEAKIAlzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmtldmVudDsKIAljaGFyIF9fdXNlciAqc3RhcnQ7CiAJaW50IHJldDsKLQlERUZJTkVfV0FJVCh3YWl0KTsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCiAJc3RhcnQgPSBidWY7CiAJZ3JvdXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKKwlhZGRfd2FpdF9xdWV1ZSgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQpOwogCXdoaWxlICgxKSB7Ci0JCXByZXBhcmVfdG9fd2FpdCgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KIAkJbXV0ZXhfbG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CiAJCWtldmVudCA9IGdldF9vbmVfZXZlbnQoZ3JvdXAsIGNvdW50KTsKIAkJbXV0ZXhfdW5sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKQEAgLTI2NCwxMCArMjYzLDEwIEBACiAJCWlmIChzdGFydCAhPSBidWYpCiAJCQlicmVhazsKIAotCQlzY2hlZHVsZSgpOworCQl3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAl9CisJcmVtb3ZlX3dhaXRfcXVldWUoJmdyb3VwLT5ub3RpZmljYXRpb25fd2FpdHEsICZ3YWl0KTsKIAotCWZpbmlzaF93YWl0KCZncm91cC0+bm90aWZpY2F0aW9uX3dhaXRxLCAmd2FpdCk7CiAJaWYgKHN0YXJ0ICE9IGJ1ZiAmJiByZXQgIT0gLUVGQVVMVCkKIAkJcmV0ID0gYnVmIC0gc3RhcnQ7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9tYXJrLmMgYi9mcy9ub3RpZnkvbWFyay5jCmluZGV4IGQ5MGRlYWEuLjM0YzM4ZmEgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9tYXJrLmMKKysrIGIvZnMvbm90aWZ5L21hcmsuYwpAQCAtMjEwLDYgKzIxMCw0MiBAQAogfQogCiAvKgorICogU29ydGluZyBmdW5jdGlvbiBmb3IgbGlzdHMgb2YgZnNub3RpZnkgbWFya3MuCisgKgorICogRmFub3RpZnkgc3VwcG9ydHMgZGlmZmVyZW50IG5vdGlmaWNhdGlvbiBjbGFzc2VzIChyZWZsZWN0ZWQgYXMgcHJpb3JpdHkgb2YKKyAqIG5vdGlmaWNhdGlvbiBncm91cCkuIEV2ZW50cyBzaGFsbCBiZSBwYXNzZWQgdG8gbm90aWZpY2F0aW9uIGdyb3VwcyBpbgorICogZGVjcmVhc2luZyBwcmlvcml0eSBvcmRlci4gVG8gYWNoaWV2ZSB0aGlzIG1hcmtzIGluIG5vdGlmaWNhdGlvbiBsaXN0cyBmb3IKKyAqIGlub2RlcyBhbmQgdmZzbW91bnRzIGFyZSBzb3J0ZWQgc28gdGhhdCBwcmlvcml0aWVzIG9mIGNvcnJlc3BvbmRpbmcgZ3JvdXBzCisgKiBhcmUgZGVzY2VuZGluZy4KKyAqCisgKiBGdXJ0aGVybW9yZSBjb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSBpZ25vcmUgbWFzayByZXF1aXJlcyBwcm9jZXNzaW5nIGlub2RlCisgKiBhbmQgdmZzbW91bnQgbWFya3Mgb2YgZWFjaCBncm91cCB0b2dldGhlci4gVXNpbmcgdGhlIGdyb3VwIGFkZHJlc3MgYXMKKyAqIGZ1cnRoZXIgc29ydCBjcml0ZXJpb24gcHJvdmlkZXMgYSB1bmlxdWUgc29ydGluZyBvcmRlciBhbmQgdGh1cyB3ZSBjYW4KKyAqIG1lcmdlIGlub2RlIGFuZCB2ZnNtb3VudCBsaXN0cyBvZiBtYXJrcyBpbiBsaW5lYXIgdGltZSBhbmQgZmluZCBncm91cHMKKyAqIHByZXNlbnQgaW4gYm90aCBsaXN0cy4KKyAqCisgKiBBIHJldHVybiB2YWx1ZSBvZiAxIHNpZ25pZmllcyB0aGF0IGIgaGFzIHByaW9yaXR5IG92ZXIgYS4KKyAqIEEgcmV0dXJuIHZhbHVlIG9mIDAgc2lnbmlmaWVzIHRoYXQgdGhlIHR3byBtYXJrcyBoYXZlIHRvIGJlIGhhbmRsZWQgdG9nZXRoZXIuCisgKiBBIHJldHVybiB2YWx1ZSBvZiAtMSBzaWduaWZpZXMgdGhhdCBhIGhhcyBwcmlvcml0eSBvdmVyIGIuCisgKi8KK2ludCBmc25vdGlmeV9jb21wYXJlX2dyb3VwcyhzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmEsIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqYikKK3sKKwlpZiAoYSA9PSBiKQorCQlyZXR1cm4gMDsKKwlpZiAoIWEpCisJCXJldHVybiAxOworCWlmICghYikKKwkJcmV0dXJuIC0xOworCWlmIChhLT5wcmlvcml0eSA8IGItPnByaW9yaXR5KQorCQlyZXR1cm4gMTsKKwlpZiAoYS0+cHJpb3JpdHkgPiBiLT5wcmlvcml0eSkKKwkJcmV0dXJuIC0xOworCWlmIChhIDwgYikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIC0xOworfQorCisvKgogICogQXR0YWNoIGFuIGluaXRpYWxpemVkIG1hcmsgdG8gYSBnaXZlbiBncm91cCBhbmQgZnMgb2JqZWN0LgogICogVGhlc2UgbWFya3MgbWF5IGJlIHVzZWQgZm9yIHRoZSBmc25vdGlmeSBiYWNrZW5kIHRvIGRldGVybWluZSB3aGljaAogICogZXZlbnQgdHlwZXMgc2hvdWxkIGJlIGRlbGl2ZXJlZCB0byB3aGljaCBncm91cC4KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS92ZnNtb3VudF9tYXJrLmMgYi9mcy9ub3RpZnkvdmZzbW91bnRfbWFyay5jCmluZGV4IGFjODUxZTguLmZhZWZhNzIgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS92ZnNtb3VudF9tYXJrLmMKKysrIGIvZnMvbm90aWZ5L3Zmc21vdW50X21hcmsuYwpAQCAtMTUzLDYgKzE1Myw3IEBACiAJc3RydWN0IG1vdW50ICptID0gcmVhbF9tb3VudChtbnQpOwogCXN0cnVjdCBmc25vdGlmeV9tYXJrICpsbWFyaywgKmxhc3QgPSBOVUxMOwogCWludCByZXQgPSAwOworCWludCBjbXA7CiAKIAltYXJrLT5mbGFncyB8PSBGU05PVElGWV9NQVJLX0ZMQUdfVkZTTU9VTlQ7CiAKQEAgLTE3OCwxMSArMTc5LDggQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYgKG1hcmstPmdyb3VwLT5wcmlvcml0eSA8IGxtYXJrLT5ncm91cC0+cHJpb3JpdHkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKG1hcmstPmdyb3VwLT5wcmlvcml0eSA9PSBsbWFyay0+Z3JvdXAtPnByaW9yaXR5KSAmJgotCQkgICAgKG1hcmstPmdyb3VwIDwgbG1hcmstPmdyb3VwKSkKKwkJY21wID0gZnNub3RpZnlfY29tcGFyZV9ncm91cHMobG1hcmstPmdyb3VwLCBtYXJrLT5ncm91cCk7CisJCWlmIChjbXAgPCAwKQogCQkJY29udGludWU7CiAKIAkJaGxpc3RfYWRkX2JlZm9yZV9yY3UoJm1hcmstPm0ubV9saXN0LCAmbG1hcmstPm0ubV9saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCmluZGV4IDk3ZGUwZmIuLmE5NjA0NDAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwpAQCAtOTI1LDcgKzkyNSw3IEBACiAJCQkgICAgICBzaXplX3QgdmVjbGVuLCBzaXplX3QgdG90YWwpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsubXNnX2ZsYWdzID0gMCx9OwogCiAJaWYgKHNvY2sgPT0gTlVMTCkgewogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL0tjb25maWcgYi9mcy9vdmVybGF5ZnMvS2NvbmZpZwppbmRleCBlNjAxMjU5Li4zNDM1NTgxIDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvS2NvbmZpZworKysgYi9mcy9vdmVybGF5ZnMvS2NvbmZpZwpAQCAtMSw0ICsxLDQgQEAKLWNvbmZpZyBPVkVSTEFZRlNfRlMKK2NvbmZpZyBPVkVSTEFZX0ZTCiAJdHJpc3RhdGUgIk92ZXJsYXkgZmlsZXN5c3RlbSBzdXBwb3J0IgogCWhlbHAKIAkgIEFuIG92ZXJsYXkgZmlsZXN5c3RlbSBjb21iaW5lcyB0d28gZmlsZXN5c3RlbXMgLSBhbiAndXBwZXInIGZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9NYWtlZmlsZSBiL2ZzL292ZXJsYXlmcy9NYWtlZmlsZQppbmRleCA4ZjkxODg5Li45MDBkYWVkIDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvTWFrZWZpbGUKKysrIGIvZnMvb3ZlcmxheWZzL01ha2VmaWxlCkBAIC0yLDYgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIG92ZXJsYXkgZmlsZXN5c3RlbS4KICMKIAotb2JqLSQoQ09ORklHX09WRVJMQVlGU19GUykgKz0gb3ZlcmxheWZzLm8KK29iai0kKENPTkZJR19PVkVSTEFZX0ZTKSArPSBvdmVybGF5Lm8KIAotb3ZlcmxheWZzLW9ianMgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIHJlYWRkaXIubyBjb3B5X3VwLm8KK292ZXJsYXktb2JqcyA6PSBzdXBlci5vIGlub2RlLm8gZGlyLm8gcmVhZGRpci5vIGNvcHlfdXAubwpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL2Rpci5jIGIvZnMvb3ZlcmxheWZzL2Rpci5jCmluZGV4IDE1Y2Q5MWEuLjhmZmM0YjkgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9kaXIuYworKysgYi9mcy9vdmVybGF5ZnMvZGlyLmMKQEAgLTI4NCw4ICsyODQsNyBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvdmxfY2hlY2tfZW1wdHlfYW5kX2NsZWFyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJCWVudW0gb3ZsX3BhdGhfdHlwZSB0eXBlKQorc3RhdGljIHN0cnVjdCBkZW50cnkgKm92bF9jaGVja19lbXB0eV9hbmRfY2xlYXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWludCBlcnI7CiAJc3RydWN0IGRlbnRyeSAqcmV0ID0gTlVMTDsKQEAgLTI5NCw4ICsyOTMsMTcgQEAKIAllcnIgPSBvdmxfY2hlY2tfZW1wdHlfZGlyKGRlbnRyeSwgJmxpc3QpOwogCWlmIChlcnIpCiAJCXJldCA9IEVSUl9QVFIoZXJyKTsKLQllbHNlIGlmICh0eXBlID09IE9WTF9QQVRIX01FUkdFKQotCQlyZXQgPSBvdmxfY2xlYXJfZW1wdHkoZGVudHJ5LCAmbGlzdCk7CisJZWxzZSB7CisJCS8qCisJCSAqIElmIG5vIHVwcGVyZGVudHJ5IHRoZW4gc2tpcCBjbGVhcmluZyB3aGl0ZW91dHMuCisJCSAqCisJCSAqIENhbiByYWNlIHdpdGggY29weS11cCwgc2luY2Ugd2UgZG9uJ3QgaG9sZCB0aGUgdXBwZXJkaXIKKwkJICogbXV0ZXguICBEb2Vzbid0IG1hdHRlciwgc2luY2UgY29weS11cCBjYW4ndCBjcmVhdGUgYQorCQkgKiBub24tZW1wdHkgZGlyZWN0b3J5IGZyb20gYW4gZW1wdHkgb25lLgorCQkgKi8KKwkJaWYgKG92bF9kZW50cnlfdXBwZXIoZGVudHJ5KSkKKwkJCXJldCA9IG92bF9jbGVhcl9lbXB0eShkZW50cnksICZsaXN0KTsKKwl9CiAKIAlvdmxfY2FjaGVfZnJlZSgmbGlzdCk7CiAKQEAgLTQ4Nyw4ICs0OTUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgb3ZsX3JlbW92ZV9hbmRfd2hpdGVvdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCSAgIGVudW0gb3ZsX3BhdGhfdHlwZSB0eXBlLCBib29sIGlzX2RpcikKK3N0YXRpYyBpbnQgb3ZsX3JlbW92ZV9hbmRfd2hpdGVvdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBib29sIGlzX2RpcikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICp3b3JrZGlyID0gb3ZsX3dvcmtkaXIoZGVudHJ5KTsKIAlzdHJ1Y3QgaW5vZGUgKndkaXIgPSB3b3JrZGlyLT5kX2lub2RlOwpAQCAtNTAwLDcgKzUwNyw3IEBACiAJaW50IGVycjsKIAogCWlmIChpc19kaXIpIHsKLQkJb3BhcXVlZGlyID0gb3ZsX2NoZWNrX2VtcHR5X2FuZF9jbGVhcihkZW50cnksIHR5cGUpOworCQlvcGFxdWVkaXIgPSBvdmxfY2hlY2tfZW1wdHlfYW5kX2NsZWFyKGRlbnRyeSk7CiAJCWVyciA9IFBUUl9FUlIob3BhcXVlZGlyKTsKIAkJaWYgKElTX0VSUihvcGFxdWVkaXIpKQogCQkJZ290byBvdXQ7CkBAIC01MTUsOSArNTIyLDEwIEBACiAJaWYgKElTX0VSUih3aGl0ZW91dCkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWlmICh0eXBlID09IE9WTF9QQVRIX0xPV0VSKSB7CisJdXBwZXIgPSBvdmxfZGVudHJ5X3VwcGVyKGRlbnRyeSk7CisJaWYgKCF1cHBlcikgewogCQl1cHBlciA9IGxvb2t1cF9vbmVfbGVuKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHVwcGVyZGlyLAotCQkJCQkgICBkZW50cnktPmRfbmFtZS5sZW4pOworCQkJCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4pOwogCQllcnIgPSBQVFJfRVJSKHVwcGVyKTsKIAkJaWYgKElTX0VSUih1cHBlcikpCiAJCQlnb3RvIGtpbGxfd2hpdGVvdXQ7CkBAIC01MjksNyArNTM3LDYgQEAKIAl9IGVsc2UgewogCQlpbnQgZmxhZ3MgPSAwOwogCi0JCXVwcGVyID0gb3ZsX2RlbnRyeV91cHBlcihkZW50cnkpOwogCQlpZiAob3BhcXVlZGlyKQogCQkJdXBwZXIgPSBvcGFxdWVkaXI7CiAJCWVyciA9IC1FU1RBTEU7CkBAIC02NDgsNyArNjU1LDcgQEAKIAkJY2FwX3JhaXNlKG92ZXJyaWRlX2NyZWQtPmNhcF9lZmZlY3RpdmUsIENBUF9DSE9XTik7CiAJCW9sZF9jcmVkID0gb3ZlcnJpZGVfY3JlZHMob3ZlcnJpZGVfY3JlZCk7CiAKLQkJZXJyID0gb3ZsX3JlbW92ZV9hbmRfd2hpdGVvdXQoZGVudHJ5LCB0eXBlLCBpc19kaXIpOworCQllcnIgPSBvdmxfcmVtb3ZlX2FuZF93aGl0ZW91dChkZW50cnksIGlzX2Rpcik7CiAKIAkJcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKIAkJcHV0X2NyZWQob3ZlcnJpZGVfY3JlZCk7CkBAIC03ODEsNyArNzg4LDcgQEAKIAl9CiAKIAlpZiAob3ZlcndyaXRlICYmIChuZXdfdHlwZSA9PSBPVkxfUEFUSF9MT1dFUiB8fCBuZXdfdHlwZSA9PSBPVkxfUEFUSF9NRVJHRSkgJiYgbmV3X2lzX2RpcikgewotCQlvcGFxdWVkaXIgPSBvdmxfY2hlY2tfZW1wdHlfYW5kX2NsZWFyKG5ldywgbmV3X3R5cGUpOworCQlvcGFxdWVkaXIgPSBvdmxfY2hlY2tfZW1wdHlfYW5kX2NsZWFyKG5ldyk7CiAJCWVyciA9IFBUUl9FUlIob3BhcXVlZGlyKTsKIAkJaWYgKElTX0VSUihvcGFxdWVkaXIpKSB7CiAJCQlvcGFxdWVkaXIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL2lub2RlLmMgYi9mcy9vdmVybGF5ZnMvaW5vZGUuYwppbmRleCBhZjJkMThjLi4wN2Q3NGIyIDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvaW5vZGUuYworKysgYi9mcy9vdmVybGF5ZnMvaW5vZGUuYwpAQCAtMjM1LDI2ICsyMzUsMzYgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgYm9vbCBvdmxfbmVlZF94YXR0cl9maWx0ZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCSAgZW51bSBvdmxfcGF0aF90eXBlIHR5cGUpCit7CisJcmV0dXJuIHR5cGUgPT0gT1ZMX1BBVEhfVVBQRVIgJiYgU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSk7Cit9CisKIHNzaXplX3Qgb3ZsX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCiB7Ci0JaWYgKG92bF9wYXRoX3R5cGUoZGVudHJ5LT5kX3BhcmVudCkgPT0gT1ZMX1BBVEhfTUVSR0UgJiYKLQkgICAgb3ZsX2lzX3ByaXZhdGVfeGF0dHIobmFtZSkpCisJc3RydWN0IHBhdGggcmVhbHBhdGg7CisJZW51bSBvdmxfcGF0aF90eXBlIHR5cGUgPSBvdmxfcGF0aF9yZWFsKGRlbnRyeSwgJnJlYWxwYXRoKTsKKworCWlmIChvdmxfbmVlZF94YXR0cl9maWx0ZXIoZGVudHJ5LCB0eXBlKSAmJiBvdmxfaXNfcHJpdmF0ZV94YXR0cihuYW1lKSkKIAkJcmV0dXJuIC1FTk9EQVRBOwogCi0JcmV0dXJuIHZmc19nZXR4YXR0cihvdmxfZGVudHJ5X3JlYWwoZGVudHJ5KSwgbmFtZSwgdmFsdWUsIHNpemUpOworCXJldHVybiB2ZnNfZ2V0eGF0dHIocmVhbHBhdGguZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSk7CiB9CiAKIHNzaXplX3Qgb3ZsX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsIHNpemVfdCBzaXplKQogeworCXN0cnVjdCBwYXRoIHJlYWxwYXRoOworCWVudW0gb3ZsX3BhdGhfdHlwZSB0eXBlID0gb3ZsX3BhdGhfcmVhbChkZW50cnksICZyZWFscGF0aCk7CiAJc3NpemVfdCByZXM7CiAJaW50IG9mZjsKIAotCXJlcyA9IHZmc19saXN0eGF0dHIob3ZsX2RlbnRyeV9yZWFsKGRlbnRyeSksIGxpc3QsIHNpemUpOworCXJlcyA9IHZmc19saXN0eGF0dHIocmVhbHBhdGguZGVudHJ5LCBsaXN0LCBzaXplKTsKIAlpZiAocmVzIDw9IDAgfHwgc2l6ZSA9PSAwKQogCQlyZXR1cm4gcmVzOwogCi0JaWYgKG92bF9wYXRoX3R5cGUoZGVudHJ5LT5kX3BhcmVudCkgIT0gT1ZMX1BBVEhfTUVSR0UpCisJaWYgKCFvdmxfbmVlZF94YXR0cl9maWx0ZXIoZGVudHJ5LCB0eXBlKSkKIAkJcmV0dXJuIHJlczsKIAogCS8qIGZpbHRlciBvdXQgcHJpdmF0ZSB4YXR0cnMgKi8KQEAgLTI3OSwxNyArMjg5LDE2IEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgcGF0aCByZWFscGF0aDsKLQllbnVtIG92bF9wYXRoX3R5cGUgdHlwZTsKKwllbnVtIG92bF9wYXRoX3R5cGUgdHlwZSA9IG92bF9wYXRoX3JlYWwoZGVudHJ5LCAmcmVhbHBhdGgpOwogCiAJZXJyID0gb3ZsX3dhbnRfd3JpdGUoZGVudHJ5KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWlmIChvdmxfcGF0aF90eXBlKGRlbnRyeS0+ZF9wYXJlbnQpID09IE9WTF9QQVRIX01FUkdFICYmCi0JICAgIG92bF9pc19wcml2YXRlX3hhdHRyKG5hbWUpKQorCWVyciA9IC1FTk9EQVRBOworCWlmIChvdmxfbmVlZF94YXR0cl9maWx0ZXIoZGVudHJ5LCB0eXBlKSAmJiBvdmxfaXNfcHJpdmF0ZV94YXR0cihuYW1lKSkKIAkJZ290byBvdXRfZHJvcF93cml0ZTsKIAotCXR5cGUgPSBvdmxfcGF0aF9yZWFsKGRlbnRyeSwgJnJlYWxwYXRoKTsKIAlpZiAodHlwZSA9PSBPVkxfUEFUSF9MT1dFUikgewogCQllcnIgPSB2ZnNfZ2V0eGF0dHIocmVhbHBhdGguZGVudHJ5LCBuYW1lLCBOVUxMLCAwKTsKIAkJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcmVhZGRpci5jIGIvZnMvb3ZlcmxheWZzL3JlYWRkaXIuYwppbmRleCA0ZTlkN2MxLi5hYjFlM2RjIDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvcmVhZGRpci5jCisrKyBiL2ZzL292ZXJsYXlmcy9yZWFkZGlyLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogewogCXN0cnVjdCBvdmxfZGlyX2NhY2hlICpjYWNoZSA9IG9kLT5jYWNoZTsKIAotCWxpc3RfZGVsKCZvZC0+Y3Vyc29yLmxfbm9kZSk7CisJbGlzdF9kZWxfaW5pdCgmb2QtPmN1cnNvci5sX25vZGUpOwogCVdBUk5fT04oY2FjaGUtPnJlZmNvdW50IDw9IDApOwogCWNhY2hlLT5yZWZjb3VudC0tOwogCWlmICghY2FjaGUtPnJlZmNvdW50KSB7CkBAIC0yNzQsMTEgKzI3NCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBvdmxfZGlyX3JlYWRfbWVyZ2VkKHN0cnVjdCBwYXRoICp1cHBlcnBhdGgsCi0JCQkJICAgICAgc3RydWN0IHBhdGggKmxvd2VycGF0aCwKLQkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorc3RhdGljIGludCBvdmxfZGlyX3JlYWRfbWVyZ2VkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKIAlpbnQgZXJyOworCXN0cnVjdCBwYXRoIGxvd2VycGF0aDsKKwlzdHJ1Y3QgcGF0aCB1cHBlcnBhdGg7CiAJc3RydWN0IG92bF9yZWFkZGlyX2RhdGEgcmRkID0gewogCQkuY3R4LmFjdG9yID0gb3ZsX2ZpbGxfbWVyZ2UsCiAJCS5saXN0ID0gbGlzdCwKQEAgLTI4NiwyNSArMjg2LDI4IEBACiAJCS5pc19tZXJnZSA9IGZhbHNlLAogCX07CiAKLQlpZiAodXBwZXJwYXRoLT5kZW50cnkpIHsKLQkJZXJyID0gb3ZsX2Rpcl9yZWFkKHVwcGVycGF0aCwgJnJkZCk7CisJb3ZsX3BhdGhfbG93ZXIoZGVudHJ5LCAmbG93ZXJwYXRoKTsKKwlvdmxfcGF0aF91cHBlcihkZW50cnksICZ1cHBlcnBhdGgpOworCisJaWYgKHVwcGVycGF0aC5kZW50cnkpIHsKKwkJZXJyID0gb3ZsX2Rpcl9yZWFkKCZ1cHBlcnBhdGgsICZyZGQpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKLQkJaWYgKGxvd2VycGF0aC0+ZGVudHJ5KSB7Ci0JCQllcnIgPSBvdmxfZGlyX21hcmtfd2hpdGVvdXRzKHVwcGVycGF0aC0+ZGVudHJ5LCAmcmRkKTsKKwkJaWYgKGxvd2VycGF0aC5kZW50cnkpIHsKKwkJCWVyciA9IG92bF9kaXJfbWFya193aGl0ZW91dHModXBwZXJwYXRoLmRlbnRyeSwgJnJkZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0OwogCQl9CiAJfQotCWlmIChsb3dlcnBhdGgtPmRlbnRyeSkgeworCWlmIChsb3dlcnBhdGguZGVudHJ5KSB7CiAJCS8qCiAJCSAqIEluc2VydCBsb3dlcnBhdGggZW50cmllcyBiZWZvcmUgdXBwZXJwYXRoIG9uZXMsIHRoaXMgYWxsb3dzCiAJCSAqIG9mZnNldHMgdG8gYmUgcmVhc29uYWJseSBjb25zdGFudAogCQkgKi8KIAkJbGlzdF9hZGQoJnJkZC5taWRkbGUsIHJkZC5saXN0KTsKIAkJcmRkLmlzX21lcmdlID0gdHJ1ZTsKLQkJZXJyID0gb3ZsX2Rpcl9yZWFkKGxvd2VycGF0aCwgJnJkZCk7CisJCWVyciA9IG92bF9kaXJfcmVhZCgmbG93ZXJwYXRoLCAmcmRkKTsKIAkJbGlzdF9kZWwoJnJkZC5taWRkbGUpOwogCX0KIG91dDoKQEAgLTMyOSw4ICszMzIsNiBAQAogc3RhdGljIHN0cnVjdCBvdmxfZGlyX2NhY2hlICpvdmxfY2FjaGVfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlpbnQgcmVzOwotCXN0cnVjdCBwYXRoIGxvd2VycGF0aDsKLQlzdHJ1Y3QgcGF0aCB1cHBlcnBhdGg7CiAJc3RydWN0IG92bF9kaXJfY2FjaGUgKmNhY2hlOwogCiAJY2FjaGUgPSBvdmxfZGlyX2NhY2hlKGRlbnRyeSk7CkBAIC0zNDcsMTAgKzM0OCw3IEBACiAJY2FjaGUtPnJlZmNvdW50ID0gMTsKIAlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPmVudHJpZXMpOwogCi0Jb3ZsX3BhdGhfbG93ZXIoZGVudHJ5LCAmbG93ZXJwYXRoKTsKLQlvdmxfcGF0aF91cHBlcihkZW50cnksICZ1cHBlcnBhdGgpOwotCi0JcmVzID0gb3ZsX2Rpcl9yZWFkX21lcmdlZCgmdXBwZXJwYXRoLCAmbG93ZXJwYXRoLCAmY2FjaGUtPmVudHJpZXMpOworCXJlcyA9IG92bF9kaXJfcmVhZF9tZXJnZWQoZGVudHJ5LCAmY2FjaGUtPmVudHJpZXMpOwogCWlmIChyZXMpIHsKIAkJb3ZsX2NhY2hlX2ZyZWUoJmNhY2hlLT5lbnRyaWVzKTsKIAkJa2ZyZWUoY2FjaGUpOwpAQCAtNDUyLDEwICs0NTAsMTAgQEAKIAkvKgogCSAqIE5lZWQgdG8gY2hlY2sgaWYgd2Ugc3RhcnRlZCBvdXQgYmVpbmcgYSBsb3dlciBkaXIsIGJ1dCBnb3QgY29waWVkIHVwCiAJICovCi0JaWYgKCFvZC0+aXNfdXBwZXIgJiYgb3ZsX3BhdGhfdHlwZShkZW50cnkpID09IE9WTF9QQVRIX01FUkdFKSB7CisJaWYgKCFvZC0+aXNfdXBwZXIgJiYgb3ZsX3BhdGhfdHlwZShkZW50cnkpICE9IE9WTF9QQVRIX0xPV0VSKSB7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCi0JCXJlYWxmaWxlID1sb2NrbGVzc19kZXJlZmVyZW5jZShvZC0+dXBwZXJmaWxlKTsKKwkJcmVhbGZpbGUgPSBsb2NrbGVzc19kZXJlZmVyZW5jZShvZC0+dXBwZXJmaWxlKTsKIAkJaWYgKCFyZWFsZmlsZSkgewogCQkJc3RydWN0IHBhdGggdXBwZXJwYXRoOwogCkBAIC01MzgsMTQgKzUzNiw5IEBACiBpbnQgb3ZsX2NoZWNrX2VtcHR5X2RpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcGF0aCBsb3dlcnBhdGg7Ci0Jc3RydWN0IHBhdGggdXBwZXJwYXRoOwogCXN0cnVjdCBvdmxfY2FjaGVfZW50cnkgKnA7CiAKLQlvdmxfcGF0aF91cHBlcihkZW50cnksICZ1cHBlcnBhdGgpOwotCW92bF9wYXRoX2xvd2VyKGRlbnRyeSwgJmxvd2VycGF0aCk7Ci0KLQllcnIgPSBvdmxfZGlyX3JlYWRfbWVyZ2VkKCZ1cHBlcnBhdGgsICZsb3dlcnBhdGgsIGxpc3QpOworCWVyciA9IG92bF9kaXJfcmVhZF9tZXJnZWQoZGVudHJ5LCBsaXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvc3VwZXIuYyBiL2ZzL292ZXJsYXlmcy9zdXBlci5jCmluZGV4IDA4YjcwNGMuLmYxNmQzMTggMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9zdXBlci5jCisrKyBiL2ZzL292ZXJsYXlmcy9zdXBlci5jCkBAIC0yNCw3ICsyNCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk92ZXJsYXkgZmlsZXN5c3RlbSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lIE9WRVJMQVlGU19TVVBFUl9NQUdJQyAweDc5NGM3NjRmCisjZGVmaW5lIE9WRVJMQVlGU19TVVBFUl9NQUdJQyAweDc5NGM3NjMwCiAKIHN0cnVjdCBvdmxfY29uZmlnIHsKIAljaGFyICpsb3dlcmRpcjsKQEAgLTg0LDEyICs4NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvdmxfdXBwZXJkZW50cnlfZGVyZWZlcmVuY2Uoc3RydWN0IG92bF9lbnRyeSAqb2UpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqdXBwZXJkZW50cnkgPSBBQ0NFU1NfT05DRShvZS0+X191cHBlcmRlbnRyeSk7Ci0JLyoKLQkgKiBNYWtlIHN1cmUgdG8gb3JkZXIgcmVhZHMgdG8gdXBwZXJkZW50cnkgd3J0IG92bF9kZW50cnlfdXBkYXRlKCkKLQkgKi8KLQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKLQlyZXR1cm4gdXBwZXJkZW50cnk7CisJcmV0dXJuIGxvY2tsZXNzX2RlcmVmZXJlbmNlKG9lLT5fX3VwcGVyZGVudHJ5KTsKIH0KIAogdm9pZCBvdmxfcGF0aF91cHBlcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBwYXRoICpwYXRoKQpAQCAtNDYyLDExICs0NTcsMzQgQEAKIAl7T1BUX0VSUiwJCQlOVUxMfQogfTsKIAorc3RhdGljIGNoYXIgKm92bF9uZXh0X29wdChjaGFyICoqcykKK3sKKwljaGFyICpzYmVnaW4gPSAqczsKKwljaGFyICpwOworCisJaWYgKHNiZWdpbiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAocCA9IHNiZWdpbjsgKnA7IHArKykgeworCQlpZiAoKnAgPT0gJ1xcJykgeworCQkJcCsrOworCQkJaWYgKCEqcCkKKwkJCQlicmVhazsKKwkJfSBlbHNlIGlmICgqcCA9PSAnLCcpIHsKKwkJCSpwID0gJ1wwJzsKKwkJCSpzID0gcCArIDE7CisJCQlyZXR1cm4gc2JlZ2luOworCQl9CisJfQorCSpzID0gTlVMTDsKKwlyZXR1cm4gc2JlZ2luOworfQorCiBzdGF0aWMgaW50IG92bF9wYXJzZV9vcHQoY2hhciAqb3B0LCBzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKQogewogCWNoYXIgKnA7CiAKLQl3aGlsZSAoKHAgPSBzdHJzZXAoJm9wdCwgIiwiKSkgIT0gTlVMTCkgeworCXdoaWxlICgocCA9IG92bF9uZXh0X29wdCgmb3B0KSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CiAJCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKIApAQCAtNTU0LDE1ICs1NzIsMzQgQEAKIAlnb3RvIG91dF91bmxvY2s7CiB9CiAKK3N0YXRpYyB2b2lkIG92bF91bmVzY2FwZShjaGFyICpzKQoreworCWNoYXIgKmQgPSBzOworCisJZm9yICg7OyBzKyssIGQrKykgeworCQlpZiAoKnMgPT0gJ1xcJykKKwkJCXMrKzsKKwkJKmQgPSAqczsKKwkJaWYgKCEqcykKKwkJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBvdmxfbW91bnRfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwYXRoICpwYXRoKQogewogCWludCBlcnI7CisJY2hhciAqdG1wID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKIAotCWVyciA9IGtlcm5fcGF0aChuYW1lLCBMT09LVVBfRk9MTE9XLCBwYXRoKTsKKwlpZiAoIXRtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvdmxfdW5lc2NhcGUodG1wKTsKKwllcnIgPSBrZXJuX3BhdGgodG1wLCBMT09LVVBfRk9MTE9XLCBwYXRoKTsKIAlpZiAoZXJyKSB7Ci0JCXByX2Vycigib3ZlcmxheWZzOiBmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnOiAlaVxuIiwgbmFtZSwgZXJyKTsKKwkJcHJfZXJyKCJvdmVybGF5ZnM6IGZhaWxlZCB0byByZXNvbHZlICclcyc6ICVpXG4iLCB0bXAsIGVycik7CiAJCWVyciA9IC1FSU5WQUw7CiAJfQorCWtmcmVlKHRtcCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzc2LDExICs4MTMsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG92bF9mc190eXBlID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAib3ZlcmxheWZzIiwKKwkubmFtZQkJPSAib3ZlcmxheSIsCiAJLm1vdW50CQk9IG92bF9tb3VudCwKIAkua2lsbF9zYgk9IGtpbGxfYW5vbl9zdXBlciwKIH07Ci1NT0RVTEVfQUxJQVNfRlMoIm92ZXJsYXlmcyIpOworTU9EVUxFX0FMSUFTX0ZTKCJvdmVybGF5Iik7CiAKIHN0YXRpYyBpbnQgX19pbml0IG92bF9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmMKaW5kZXggNGUwMzg4Yy4uZjY3MzRjNiAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCisrKyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtNTUyLDYgKzU1Miw5IEBACiAJCVtpbG9nMihWTV9HUk9XU0RPV04pXQk9ICJnZCIsCiAJCVtpbG9nMihWTV9QRk5NQVApXQk9ICJwZiIsCiAJCVtpbG9nMihWTV9ERU5ZV1JJVEUpXQk9ICJkdyIsCisjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9NUFgKKwkJW2lsb2cyKFZNX01QWCldCQk9ICJtcCIsCisjZW5kaWYKIAkJW2lsb2cyKFZNX0xPQ0tFRCldCT0gImxvIiwKIAkJW2lsb2cyKFZNX0lPKV0JCT0gImlvIiwKIAkJW2lsb2cyKFZNX1NFUV9SRUFEKV0JPSAic3IiLApkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL2lub2RlLmMgYi9mcy9wc3RvcmUvaW5vZGUuYwppbmRleCBmYWZiN2EwLi41MDQxNjYwIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvaW5vZGUuYworKysgYi9mcy9wc3RvcmUvaW5vZGUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNsb2cuaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKQEAgLTEyMCw2ICsxMjEsMTggQEAKIAkuc2hvdwk9IHBzdG9yZV9mdHJhY2Vfc2VxX3Nob3csCiB9OwogCitzdGF0aWMgaW50IHBzdG9yZV9jaGVja19zeXNsb2dfcGVybWlzc2lvbnMoc3RydWN0IHBzdG9yZV9wcml2YXRlICpwcykKK3sKKwlzd2l0Y2ggKHBzLT50eXBlKSB7CisJY2FzZSBQU1RPUkVfVFlQRV9ETUVTRzoKKwljYXNlIFBTVE9SRV9UWVBFX0NPTlNPTEU6CisJCXJldHVybiBjaGVja19zeXNsb2dfcGVybWlzc2lvbnMoU1lTTE9HX0FDVElPTl9SRUFEX0FMTCwKKwkJCVNZU0xPR19GUk9NX1JFQURFUik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCiBzdGF0aWMgc3NpemVfdCBwc3RvcmVfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewpAQCAtMTM4LDYgKzE1MSwxMCBAQAogCWludCBlcnI7CiAJY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zICpzb3BzID0gTlVMTDsKIAorCWVyciA9IHBzdG9yZV9jaGVja19zeXNsb2dfcGVybWlzc2lvbnMocHMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAlpZiAocHMtPnR5cGUgPT0gUFNUT1JFX1RZUEVfRlRSQUNFKQogCQlzb3BzID0gJnBzdG9yZV9mdHJhY2Vfc2VxX29wczsKIApAQCAtMTc0LDYgKzE5MSwxMSBAQAogc3RhdGljIGludCBwc3RvcmVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IHBzdG9yZV9wcml2YXRlICpwID0gZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CisJaW50IGVycjsKKworCWVyciA9IHBzdG9yZV9jaGVja19zeXNsb2dfcGVybWlzc2lvbnMocCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWlmIChwLT5wc2ktPmVyYXNlKQogCQlwLT5wc2ktPmVyYXNlKHAtPnR5cGUsIHAtPmlkLCBwLT5jb3VudCwKZGlmZiAtLWdpdCBhL2ZzL3BzdG9yZS9yYW0uYyBiL2ZzL3BzdG9yZS9yYW0uYwppbmRleCAzYjU3NDQzLi5lYzg4MWIzIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvcmFtLmMKKysrIGIvZnMvcHN0b3JlL3JhbS5jCkBAIC0xMzUsMjUgKzEzNSwyNyBAQAogCXJldHVybiBwcno7CiB9CiAKLXN0YXRpYyB2b2lkIHJhbW9vcHNfcmVhZF9rbXNnX2hkcihjaGFyICpidWZmZXIsIHN0cnVjdCB0aW1lc3BlYyAqdGltZSwKK3N0YXRpYyBpbnQgcmFtb29wc19yZWFkX2ttc2dfaGRyKGNoYXIgKmJ1ZmZlciwgc3RydWN0IHRpbWVzcGVjICp0aW1lLAogCQkJCSAgYm9vbCAqY29tcHJlc3NlZCkKIHsKIAljaGFyIGRhdGFfdHlwZTsKKwlpbnQgaGVhZGVyX2xlbmd0aCA9IDA7CiAKLQlpZiAoc3NjYW5mKGJ1ZmZlciwgUkFNT09QU19LRVJOTVNHX0hEUiAiJWx1LiVsdS0lY1xuIiwKLQkJCSZ0aW1lLT50dl9zZWMsICZ0aW1lLT50dl9uc2VjLCAmZGF0YV90eXBlKSA9PSAzKSB7CisJaWYgKHNzY2FuZihidWZmZXIsIFJBTU9PUFNfS0VSTk1TR19IRFIgIiVsdS4lbHUtJWNcbiVuIiwgJnRpbWUtPnR2X3NlYywKKwkJCSZ0aW1lLT50dl9uc2VjLCAmZGF0YV90eXBlLCAmaGVhZGVyX2xlbmd0aCkgPT0gMykgewogCQlpZiAoZGF0YV90eXBlID09ICdDJykKIAkJCSpjb21wcmVzc2VkID0gdHJ1ZTsKIAkJZWxzZQogCQkJKmNvbXByZXNzZWQgPSBmYWxzZTsKLQl9IGVsc2UgaWYgKHNzY2FuZihidWZmZXIsIFJBTU9PUFNfS0VSTk1TR19IRFIgIiVsdS4lbHVcbiIsCi0JCQkmdGltZS0+dHZfc2VjLCAmdGltZS0+dHZfbnNlYykgPT0gMikgeworCX0gZWxzZSBpZiAoc3NjYW5mKGJ1ZmZlciwgUkFNT09QU19LRVJOTVNHX0hEUiAiJWx1LiVsdVxuJW4iLAorCQkJJnRpbWUtPnR2X3NlYywgJnRpbWUtPnR2X25zZWMsICZoZWFkZXJfbGVuZ3RoKSA9PSAyKSB7CiAJCQkqY29tcHJlc3NlZCA9IGZhbHNlOwogCX0gZWxzZSB7CiAJCXRpbWUtPnR2X3NlYyA9IDA7CiAJCXRpbWUtPnR2X25zZWMgPSAwOwogCQkqY29tcHJlc3NlZCA9IGZhbHNlOwogCX0KKwlyZXR1cm4gaGVhZGVyX2xlbmd0aDsKIH0KIAogc3RhdGljIHNzaXplX3QgcmFtb29wc19wc3RvcmVfcmVhZCh1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLApAQCAtMTY1LDYgKzE2Nyw3IEBACiAJc3NpemVfdCBlY2Nfbm90aWNlX3NpemU7CiAJc3RydWN0IHJhbW9vcHNfY29udGV4dCAqY3h0ID0gcHNpLT5kYXRhOwogCXN0cnVjdCBwZXJzaXN0ZW50X3JhbV96b25lICpwcno7CisJaW50IGhlYWRlcl9sZW5ndGg7CiAKIAlwcnogPSByYW1vb3BzX2dldF9uZXh0X3ByeihjeHQtPnByenMsICZjeHQtPmR1bXBfcmVhZF9jbnQsCiAJCQkJICAgY3h0LT5tYXhfZHVtcF9jbnQsIGlkLCB0eXBlLApAQCAtMTc4LDcgKzE4MSwxMyBAQAogCWlmICghcHJ6KQogCQlyZXR1cm4gMDsKIAorCWlmICghcGVyc2lzdGVudF9yYW1fb2xkKHByeikpCisJCXJldHVybiAwOworCiAJc2l6ZSA9IHBlcnNpc3RlbnRfcmFtX29sZF9zaXplKHByeik7CisJaGVhZGVyX2xlbmd0aCA9IHJhbW9vcHNfcmVhZF9rbXNnX2hkcihwZXJzaXN0ZW50X3JhbV9vbGQocHJ6KSwgdGltZSwKKwkJCWNvbXByZXNzZWQpOworCXNpemUgLT0gaGVhZGVyX2xlbmd0aDsKIAogCS8qIEVDQyBjb3JyZWN0aW9uIG5vdGljZSAqLwogCWVjY19ub3RpY2Vfc2l6ZSA9IHBlcnNpc3RlbnRfcmFtX2VjY19zdHJpbmcocHJ6LCBOVUxMLCAwKTsKQEAgLTE4Nyw4ICsxOTYsNyBAQAogCWlmICgqYnVmID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KCpidWYsIHBlcnNpc3RlbnRfcmFtX29sZChwcnopLCBzaXplKTsKLQlyYW1vb3BzX3JlYWRfa21zZ19oZHIoKmJ1ZiwgdGltZSwgY29tcHJlc3NlZCk7CisJbWVtY3B5KCpidWYsIChjaGFyICopcGVyc2lzdGVudF9yYW1fb2xkKHByeikgKyBoZWFkZXJfbGVuZ3RoLCBzaXplKTsKIAlwZXJzaXN0ZW50X3JhbV9lY2Nfc3RyaW5nKHByeiwgKmJ1ZiArIHNpemUsIGVjY19ub3RpY2Vfc2l6ZSArIDEpOwogCiAJcmV0dXJuIHNpemUgKyBlY2Nfbm90aWNlX3NpemU7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuYwppbmRleCA5MmU4Zjk5Li4yODEwMDI2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmMKQEAgLTEzMzgsNyArMTMzOCwxMCBAQAogCWdvdG8gb3V0OwogfQogCi0KKy8qCisgKiBQcmVhbGxvY2F0ZSBhbmQgemVybyBhIHJhbmdlIG9mIGEgZmlsZS4gVGhpcyBtZWNoYW5pc20gaGFzIHRoZSBhbGxvY2F0aW9uCisgKiBzZW1hbnRpY3Mgb2YgZmFsbG9jYXRlIGFuZCBpbiBhZGRpdGlvbiBjb252ZXJ0cyBkYXRhIGluIHRoZSByYW5nZSB0byB6ZXJvZXMuCisgKi8KIGludAogeGZzX3plcm9fZmlsZV9zcGFjZSgKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKQEAgLTEzNDYsNjUgKzEzNDksMzAgQEAKIAl4ZnNfb2ZmX3QJCWxlbikKIHsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwotCXVpbnQJCQlncmFudWxhcml0eTsKLQl4ZnNfb2ZmX3QJCXN0YXJ0X2JvdW5kYXJ5OwotCXhmc19vZmZfdAkJZW5kX2JvdW5kYXJ5OworCXVpbnQJCQlibGtzaXplOwogCWludAkJCWVycm9yOwogCiAJdHJhY2VfeGZzX3plcm9fZmlsZV9zcGFjZShpcCk7CiAKLQlncmFudWxhcml0eSA9IG1heF90KHVpbnQsIDEgPDwgbXAtPm1fc2Iuc2JfYmxvY2tsb2csIFBBR0VfQ0FDSEVfU0laRSk7CisJYmxrc2l6ZSA9IDEgPDwgbXAtPm1fc2Iuc2JfYmxvY2tsb2c7CiAKIAkvKgotCSAqIFJvdW5kIHRoZSByYW5nZSBvZiBleHRlbnRzIHdlIGFyZSBnb2luZyB0byBjb252ZXJ0IGlud2FyZHMuICBJZiB0aGUKLQkgKiBvZmZzZXQgaXMgYWxpZ25lZCwgdGhlbiBpdCBkb2Vzbid0IGdldCBjaGFuZ2VkIHNvIHdlIHplcm8gZnJvbSB0aGUKLQkgKiBzdGFydCBvZiB0aGUgYmxvY2sgb2Zmc2V0IHBvaW50cyB0by4KKwkgKiBQdW5jaCBhIGhvbGUgYW5kIHByZWFsbG9jIHRoZSByYW5nZS4gV2UgdXNlIGhvbGUgcHVuY2ggcmF0aGVyIHRoYW4KKwkgKiB1bndyaXR0ZW4gZXh0ZW50IGNvbnZlcnNpb24gZm9yIHR3byByZWFzb25zOgorCSAqCisJICogMS4pIEhvbGUgcHVuY2ggaGFuZGxlcyBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgZm9yIHVzLgorCSAqCisJICogMi4pIElmIHByZWFsbG9jIHJldHVybnMgRU5PU1BDLCB0aGUgZmlsZSByYW5nZSBpcyBzdGlsbCB6ZXJvLXZhbHVlZAorCSAqIGJ5IHZpcnR1ZSBvZiB0aGUgaG9sZSBwdW5jaC4KIAkgKi8KLQlzdGFydF9ib3VuZGFyeSA9IHJvdW5kX3VwKG9mZnNldCwgZ3JhbnVsYXJpdHkpOwotCWVuZF9ib3VuZGFyeSA9IHJvdW5kX2Rvd24ob2Zmc2V0ICsgbGVuLCBncmFudWxhcml0eSk7CisJZXJyb3IgPSB4ZnNfZnJlZV9maWxlX3NwYWNlKGlwLCBvZmZzZXQsIGxlbik7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKIAotCUFTU0VSVChzdGFydF9ib3VuZGFyeSA+PSBvZmZzZXQpOwotCUFTU0VSVChlbmRfYm91bmRhcnkgPD0gb2Zmc2V0ICsgbGVuKTsKLQotCWlmIChzdGFydF9ib3VuZGFyeSA8IGVuZF9ib3VuZGFyeSAtIDEpIHsKLQkJLyoKLQkJICogV3JpdGViYWNrIHRoZSByYW5nZSB0byBlbnN1cmUgYW55IGlub2RlIHNpemUgdXBkYXRlcyBkdWUgdG8KLQkJICogYXBwZW5kaW5nIHdyaXRlcyBtYWtlIGl0IHRvIGRpc2sgKG90aGVyd2lzZSB3ZSBjb3VsZCBqdXN0Ci0JCSAqIHB1bmNoIG91dCB0aGUgZGVsYWxsb2MgYmxvY2tzKS4KLQkJICovCi0JCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShWRlNfSShpcCktPmlfbWFwcGluZywKLQkJCQlzdGFydF9ib3VuZGFyeSwgZW5kX2JvdW5kYXJ5IC0gMSk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0OwotCQl0cnVuY2F0ZV9wYWdlY2FjaGVfcmFuZ2UoVkZTX0koaXApLCBzdGFydF9ib3VuZGFyeSwKLQkJCQkJIGVuZF9ib3VuZGFyeSAtIDEpOwotCi0JCS8qIGNvbnZlcnQgdGhlIGJsb2NrcyAqLwotCQllcnJvciA9IHhmc19hbGxvY19maWxlX3NwYWNlKGlwLCBzdGFydF9ib3VuZGFyeSwKLQkJCQkJZW5kX2JvdW5kYXJ5IC0gc3RhcnRfYm91bmRhcnkgLSAxLAotCQkJCQlYRlNfQk1BUElfUFJFQUxMT0MgfCBYRlNfQk1BUElfQ09OVkVSVCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0OwotCi0JCS8qIFdlJ3ZlIGhhbmRsZWQgdGhlIGludGVyaW9yIG9mIHRoZSByYW5nZSwgbm93IGZvciB0aGUgZWRnZXMgKi8KLQkJaWYgKHN0YXJ0X2JvdW5kYXJ5ICE9IG9mZnNldCkgewotCQkJZXJyb3IgPSB4ZnNfaW96ZXJvKGlwLCBvZmZzZXQsIHN0YXJ0X2JvdW5kYXJ5IC0gb2Zmc2V0KTsKLQkJCWlmIChlcnJvcikKLQkJCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmIChlbmRfYm91bmRhcnkgIT0gb2Zmc2V0ICsgbGVuKQotCQkJZXJyb3IgPSB4ZnNfaW96ZXJvKGlwLCBlbmRfYm91bmRhcnksCi0JCQkJCSAgIG9mZnNldCArIGxlbiAtIGVuZF9ib3VuZGFyeSk7Ci0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBJdCdzIGVpdGhlciBhIHN1Yi1ncmFudWxhcml0eSByYW5nZSBvciB0aGUgcmFuZ2Ugc3Bhbm5lZCBsaWVzCi0JCSAqIHBhcnRpYWxseSBhY3Jvc3MgdHdvIGFkamFjZW50IGJsb2Nrcy4KLQkJICovCi0JCWVycm9yID0geGZzX2lvemVybyhpcCwgb2Zmc2V0LCBsZW4pOwotCX0KLQorCWVycm9yID0geGZzX2FsbG9jX2ZpbGVfc3BhY2UoaXAsIHJvdW5kX2Rvd24ob2Zmc2V0LCBibGtzaXplKSwKKwkJCQkgICAgIHJvdW5kX3VwKG9mZnNldCArIGxlbiwgYmxrc2l6ZSkgLQorCQkJCSAgICAgcm91bmRfZG93bihvZmZzZXQsIGJsa3NpemUpLAorCQkJCSAgICAgWEZTX0JNQVBJX1BSRUFMTE9DKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IGYxZGViOTYuLjg5NDkyNGEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtMjM2LDggKzIzNiwxMCBAQAogCVhGU19XQU5UX0NPUlJVUFRFRF9SRVRVUk4oc3RhdCA9PSAxKTsKIAogCS8qIENoZWNrIGlmIHRoZSByZWNvcmQgY29udGFpbnMgdGhlIGlub2RlIGluIHJlcXVlc3QgKi8KLQlpZiAoaXJlYy0+aXJfc3RhcnRpbm8gKyBYRlNfSU5PREVTX1BFUl9DSFVOSyA8PSBhZ2lubykKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGlyZWMtPmlyX3N0YXJ0aW5vICsgWEZTX0lOT0RFU19QRVJfQ0hVTksgPD0gYWdpbm8pIHsKKwkJKmljb3VudCA9IDA7CisJCXJldHVybiAwOworCX0KIAogCWlkeCA9IGFnaW5vIC0gaXJlYy0+aXJfc3RhcnRpbm8gKyAxOwogCWlmIChpZHggPCBYRlNfSU5PREVTX1BFUl9DSFVOSyAmJgpAQCAtMjYyLDc1ICsyNjQsNzYgQEAKIAogI2RlZmluZSBYRlNfQlVMS1NUQVRfVUJMRUZUKHVibGVmdCkJKCh1YmxlZnQpID49IHN0YXRzdHJ1Y3Rfc2l6ZSkKIAorc3RydWN0IHhmc19idWxrc3RhdF9hZ2ljaHVuayB7CisJY2hhcgkJX191c2VyICoqYWNfdWJ1ZmZlcjsvKiBwb2ludGVyIGludG8gdXNlcidzIGJ1ZmZlciAqLworCWludAkJYWNfdWJsZWZ0OwkvKiBieXRlcyBsZWZ0IGluIHVzZXIncyBidWZmZXIgKi8KKwlpbnQJCWFjX3ViZWxlbTsJLyogc3BhY2VzIHVzZWQgaW4gdXNlcidzIGJ1ZmZlciAqLworfTsKKwogLyoKICAqIFByb2Nlc3MgaW5vZGVzIGluIGNodW5rIHdpdGggYSBwb2ludGVyIHRvIGEgZm9ybWF0dGVyIGZ1bmN0aW9uCiAgKiB0aGF0IHdpbGwgaWdldCB0aGUgaW5vZGUgYW5kIGZpbGwgaW4gdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZS4KICAqLwotaW50CitzdGF0aWMgaW50CiB4ZnNfYnVsa3N0YXRfYWdfaWNodW5rKAogCXN0cnVjdCB4ZnNfbW91bnQJCSptcCwKIAl4ZnNfYWdudW1iZXJfdAkJCWFnbm8sCiAJc3RydWN0IHhmc19pbm9idF9yZWNfaW5jb3JlCSppcmJwLAogCWJ1bGtzdGF0X29uZV9wZgkJCWZvcm1hdHRlciwKIAlzaXplX3QJCQkJc3RhdHN0cnVjdF9zaXplLAotCXN0cnVjdCB4ZnNfYnVsa3N0YXRfYWdpY2h1bmsJKmFjcCkKKwlzdHJ1Y3QgeGZzX2J1bGtzdGF0X2FnaWNodW5rCSphY3AsCisJeGZzX2FnaW5vX3QJCQkqbGFzdF9hZ2lubykKIHsKLQl4ZnNfaW5vX3QJCQlsYXN0aW5vID0gYWNwLT5hY19sYXN0aW5vOwogCWNoYXIJCQkJX191c2VyICoqdWJ1ZnAgPSBhY3AtPmFjX3VidWZmZXI7Ci0JaW50CQkJCXVibGVmdCA9IGFjcC0+YWNfdWJsZWZ0OwotCWludAkJCQl1YmVsZW0gPSBhY3AtPmFjX3ViZWxlbTsKLQlpbnQJCQkJY2h1bmtpZHgsIGNsdXN0aWR4OworCWludAkJCQljaHVua2lkeDsKIAlpbnQJCQkJZXJyb3IgPSAwOwotCXhmc19hZ2lub190CQkJYWdpbm87CisJeGZzX2FnaW5vX3QJCQlhZ2lubyA9IGlyYnAtPmlyX3N0YXJ0aW5vOwogCi0JZm9yIChhZ2lubyA9IGlyYnAtPmlyX3N0YXJ0aW5vLCBjaHVua2lkeCA9IGNsdXN0aWR4ID0gMDsKLQkgICAgIFhGU19CVUxLU1RBVF9VQkxFRlQodWJsZWZ0KSAmJgotCSAgICAgaXJicC0+aXJfZnJlZWNvdW50IDwgWEZTX0lOT0RFU19QRVJfQ0hVTks7Ci0JICAgICBjaHVua2lkeCsrLCBjbHVzdGlkeCsrLCBhZ2lubysrKSB7Ci0JCWludAkJZm10ZXJyb3I7CS8qIGJ1bGtzdGF0IGZvcm1hdHRlciByZXN1bHQgKi8KKwlmb3IgKGNodW5raWR4ID0gMDsgY2h1bmtpZHggPCBYRlNfSU5PREVTX1BFUl9DSFVOSzsKKwkgICAgIGNodW5raWR4KyssIGFnaW5vKyspIHsKKwkJaW50CQlmbXRlcnJvcjsKIAkJaW50CQl1YnVzZWQ7Ci0JCXhmc19pbm9fdAlpbm8gPSBYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ25vLCBhZ2lubyk7CiAKLQkJQVNTRVJUKGNodW5raWR4IDwgWEZTX0lOT0RFU19QRVJfQ0hVTkspOworCQkvKiBpbm9kZSB3b24ndCBmaXQgaW4gYnVmZmVyLCB3ZSBhcmUgZG9uZSAqLworCQlpZiAoYWNwLT5hY191YmxlZnQgPCBzdGF0c3RydWN0X3NpemUpCisJCQlicmVhazsKIAogCQkvKiBTa2lwIGlmIHRoaXMgaW5vZGUgaXMgZnJlZSAqLwotCQlpZiAoWEZTX0lOT0JUX01BU0soY2h1bmtpZHgpICYgaXJicC0+aXJfZnJlZSkgewotCQkJbGFzdGlubyA9IGlubzsKKwkJaWYgKFhGU19JTk9CVF9NQVNLKGNodW5raWR4KSAmIGlyYnAtPmlyX2ZyZWUpCiAJCQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0JCSAqIENvdW50IHVzZWQgaW5vZGVzIGFzIGZyZWUgc28gd2UgY2FuIHRlbGwgd2hlbiB0aGUKLQkJICogY2h1bmsgaXMgdXNlZCB1cC4KLQkJICovCi0JCWlyYnAtPmlyX2ZyZWVjb3VudCsrOwogCiAJCS8qIEdldCB0aGUgaW5vZGUgYW5kIGZpbGwgaW4gYSBzaW5nbGUgYnVmZmVyICovCiAJCXVidXNlZCA9IHN0YXRzdHJ1Y3Rfc2l6ZTsKLQkJZXJyb3IgPSBmb3JtYXR0ZXIobXAsIGlubywgKnVidWZwLCB1YmxlZnQsICZ1YnVzZWQsICZmbXRlcnJvcik7Ci0JCWlmIChmbXRlcnJvciA9PSBCVUxLU1RBVF9SVl9OT1RISU5HKSB7Ci0JCQlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gLUVOT0VOVCAmJiBlcnJvciAhPSAtRUlOVkFMKSB7Ci0JCQkJdWJsZWZ0ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWxhc3Rpbm8gPSBpbm87Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoZm10ZXJyb3IgPT0gQlVMS1NUQVRfUlZfR0lWRVVQKSB7Ci0JCQl1YmxlZnQgPSAwOworCQllcnJvciA9IGZvcm1hdHRlcihtcCwgWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdubywgYWdpbm8pLAorCQkJCSAgKnVidWZwLCBhY3AtPmFjX3VibGVmdCwgJnVidXNlZCwgJmZtdGVycm9yKTsKKworCQlpZiAoZm10ZXJyb3IgPT0gQlVMS1NUQVRfUlZfR0lWRVVQIHx8CisJCSAgICAoZXJyb3IgJiYgZXJyb3IgIT0gLUVOT0VOVCAmJiBlcnJvciAhPSAtRUlOVkFMKSkgeworCQkJYWNwLT5hY191YmxlZnQgPSAwOwogCQkJQVNTRVJUKGVycm9yKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmICgqdWJ1ZnApCi0JCQkqdWJ1ZnAgKz0gdWJ1c2VkOwotCQl1YmxlZnQgLT0gdWJ1c2VkOwotCQl1YmVsZW0rKzsKLQkJbGFzdGlubyA9IGlubzsKKworCQkvKiBiZSBjYXJlZnVsIG5vdCB0byBsZWFrIGVycm9yIGlmIGF0IGVuZCBvZiBjaHVuayAqLworCQlpZiAoZm10ZXJyb3IgPT0gQlVMS1NUQVRfUlZfTk9USElORyB8fCBlcnJvcikgeworCQkJZXJyb3IgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQkqdWJ1ZnAgKz0gdWJ1c2VkOworCQlhY3AtPmFjX3VibGVmdCAtPSB1YnVzZWQ7CisJCWFjcC0+YWNfdWJlbGVtKys7CiAJfQogCi0JYWNwLT5hY19sYXN0aW5vID0gbGFzdGlubzsKLQlhY3AtPmFjX3VibGVmdCA9IHVibGVmdDsKLQlhY3AtPmFjX3ViZWxlbSA9IHViZWxlbTsKKwkvKgorCSAqIFBvc3QtdXBkYXRlICpsYXN0X2FnaW5vLiBBdCB0aGlzIHBvaW50LCBhZ2lubyB3aWxsIGFsd2F5cyBwb2ludCBvbmUKKwkgKiBpbm9kZSBwYXN0IHRoZSBsYXN0IGlub2RlIHdlIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuIEhlbmNlIHdlCisJICogc3Vic3RyYWN0IHRoYXQgaW5vZGUgd2hlbiBzZXR0aW5nIHRoZSAqbGFzdF9hZ2lubyBjdXJzb3Igc28gdGhhdCB3ZQorCSAqIHJldHVybiB0aGUgY29ycmVjdCBjb29raWUgdG8gdXNlcnNwYWNlLiBPbiB0aGUgbmV4dCBidWxrc3RhdCBjYWxsLAorCSAqIHRoZSBpbm9kZSB1bmRlciB0aGUgbGFzdGlubyBjb29raWUgd2lsbCBiZSBza2lwcGVkIGFzIHdlIGhhdmUgYWxyZWFkeQorCSAqIHByb2Nlc3NlZCBpdCBoZXJlLgorCSAqLworCSpsYXN0X2FnaW5vID0gYWdpbm8gLSAxOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMzUzLDQ1ICszNTYsMzMgQEAKIAl4ZnNfYWdpbm9fdAkJYWdpbm87CS8qIGlub2RlICMgaW4gYWxsb2NhdGlvbiBncm91cCAqLwogCXhmc19hZ251bWJlcl90CQlhZ25vOwkvKiBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciAqLwogCXhmc19idHJlZV9jdXJfdAkJKmN1cjsJLyogYnRyZWUgY3Vyc29yIGZvciBpYWxsb2MgYnRyZWUgKi8KLQlpbnQJCQllbmRfb2ZfYWc7IC8qIHNldCBpZiB3ZSd2ZSBzZWVuIHRoZSBhZyBlbmQgKi8KLQlpbnQJCQllcnJvcjsJLyogZXJyb3IgY29kZSAqLwotCWludCAgICAgICAgICAgICAgICAgICAgIGZtdGVycm9yOy8qIGJ1bGtzdGF0IGZvcm1hdHRlciByZXN1bHQgKi8KLQlpbnQJCQlpOwkvKiBsb29wIGluZGV4ICovCi0JaW50CQkJaWNvdW50OwkvKiBjb3VudCBvZiBpbm9kZXMgZ29vZCBpbiBpcmJ1ZiAqLwogCXNpemVfdAkJCWlyYnNpemU7IC8qIHNpemUgb2YgaXJlYyBidWZmZXIgaW4gYnl0ZXMgKi8KLQl4ZnNfaW5vX3QJCWlubzsJLyogaW5vZGUgbnVtYmVyIChmaWxlc3lzdGVtKSAqLwotCXhmc19pbm9idF9yZWNfaW5jb3JlX3QJKmlyYnA7CS8qIGN1cnJlbnQgaXJlYyBidWZmZXIgcG9pbnRlciAqLwogCXhmc19pbm9idF9yZWNfaW5jb3JlX3QJKmlyYnVmOwkvKiBzdGFydCBvZiBpcmVjIGJ1ZmZlciAqLwotCXhmc19pbm9idF9yZWNfaW5jb3JlX3QJKmlyYnVmZW5kOyAvKiBlbmQgb2YgZ29vZCBpcmVjIGJ1ZmZlciBlbnRyaWVzICovCi0JeGZzX2lub190CQlsYXN0aW5vOyAvKiBsYXN0IGlub2RlIG51bWJlciByZXR1cm5lZCAqLwogCWludAkJCW5pcmJ1ZjsJLyogc2l6ZSBvZiBpcmJ1ZiAqLwotCWludAkJCXJ2YWw7CS8qIHJldHVybiB2YWx1ZSBlcnJvciBjb2RlICovCi0JaW50CQkJdG1wOwkvKiByZXN1bHQgdmFsdWUgZnJvbSBidHJlZSBjYWxscyAqLwogCWludAkJCXViY291bnQ7IC8qIHNpemUgb2YgdXNlcidzIGJ1ZmZlciAqLwotCWludAkJCXVibGVmdDsJLyogYnl0ZXMgbGVmdCBpbiB1c2VyJ3MgYnVmZmVyICovCi0JY2hhcgkJCV9fdXNlciAqdWJ1ZnA7CS8qIHBvaW50ZXIgaW50byB1c2VyJ3MgYnVmZmVyICovCi0JaW50CQkJdWJlbGVtOwkvKiBzcGFjZXMgdXNlZCBpbiB1c2VyJ3MgYnVmZmVyICovCisJc3RydWN0IHhmc19idWxrc3RhdF9hZ2ljaHVuayBhYzsKKwlpbnQJCQllcnJvciA9IDA7CiAKIAkvKgogCSAqIEdldCB0aGUgbGFzdCBpbm9kZSB2YWx1ZSwgc2VlIGlmIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KIAkgKi8KLQlpbm8gPSAoeGZzX2lub190KSpsYXN0aW5vcDsKLQlsYXN0aW5vID0gaW5vOwotCWFnbm8gPSBYRlNfSU5PX1RPX0FHTk8obXAsIGlubyk7Ci0JYWdpbm8gPSBYRlNfSU5PX1RPX0FHSU5PKG1wLCBpbm8pOworCWFnbm8gPSBYRlNfSU5PX1RPX0FHTk8obXAsICpsYXN0aW5vcCk7CisJYWdpbm8gPSBYRlNfSU5PX1RPX0FHSU5PKG1wLCAqbGFzdGlub3ApOwogCWlmIChhZ25vID49IG1wLT5tX3NiLnNiX2FnY291bnQgfHwKLQkgICAgaW5vICE9IFhGU19BR0lOT19UT19JTk8obXAsIGFnbm8sIGFnaW5vKSkgeworCSAgICAqbGFzdGlub3AgIT0gWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdubywgYWdpbm8pKSB7CiAJCSpkb25lID0gMTsKIAkJKnViY291bnRwID0gMDsKIAkJcmV0dXJuIDA7CiAJfQogCiAJdWJjb3VudCA9ICp1YmNvdW50cDsgLyogc3RhdHN0cnVjdCdzICovCi0JdWJsZWZ0ID0gdWJjb3VudCAqIHN0YXRzdHJ1Y3Rfc2l6ZTsgLyogYnl0ZXMgKi8KLQkqdWJjb3VudHAgPSB1YmVsZW0gPSAwOworCWFjLmFjX3VidWZmZXIgPSAmdWJ1ZmZlcjsKKwlhYy5hY191YmxlZnQgPSB1YmNvdW50ICogc3RhdHN0cnVjdF9zaXplOyAvKiBieXRlcyAqLzsKKwlhYy5hY191YmVsZW0gPSAwOworCisJKnViY291bnRwID0gMDsKIAkqZG9uZSA9IDA7Ci0JZm10ZXJyb3IgPSAwOwotCXVidWZwID0gdWJ1ZmZlcjsKKwogCWlyYnVmID0ga21lbV96YWxsb2NfZ3JlZWR5KCZpcmJzaXplLCBQQUdFX1NJWkUsIFBBR0VfU0laRSAqIDQpOwogCWlmICghaXJidWYpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNDAyLDkgKzM5MywxMyBAQAogCSAqIExvb3Agb3ZlciB0aGUgYWxsb2NhdGlvbiBncm91cHMsIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3QKIAkgKiBpbm9kZSByZXR1cm5lZDsgMCBtZWFucyBzdGFydCBvZiB0aGUgYWxsb2NhdGlvbiBncm91cC4KIAkgKi8KLQlydmFsID0gMDsKLQl3aGlsZSAoWEZTX0JVTEtTVEFUX1VCTEVGVCh1YmxlZnQpICYmIGFnbm8gPCBtcC0+bV9zYi5zYl9hZ2NvdW50KSB7Ci0JCWNvbmRfcmVzY2hlZCgpOworCXdoaWxlIChhZ25vIDwgbXAtPm1fc2Iuc2JfYWdjb3VudCkgeworCQlzdHJ1Y3QgeGZzX2lub2J0X3JlY19pbmNvcmUJKmlyYnAgPSBpcmJ1ZjsKKwkJc3RydWN0IHhmc19pbm9idF9yZWNfaW5jb3JlCSppcmJ1ZmVuZCA9IGlyYnVmICsgbmlyYnVmOworCQlib29sCQkJCWVuZF9vZl9hZyA9IGZhbHNlOworCQlpbnQJCQkJaWNvdW50ID0gMDsKKwkJaW50CQkJCXN0YXQ7CisKIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCBOVUxMLCBhZ25vLCAmYWdicCk7CiAJCWlmIChlcnJvcikKIAkJCWJyZWFrOwpAQCAtNDE0LDEwICs0MDksNiBAQAogCQkgKi8KIAkJY3VyID0geGZzX2lub2J0X2luaXRfY3Vyc29yKG1wLCBOVUxMLCBhZ2JwLCBhZ25vLAogCQkJCQkgICAgWEZTX0JUTlVNX0lOTyk7Ci0JCWlyYnAgPSBpcmJ1ZjsKLQkJaXJidWZlbmQgPSBpcmJ1ZiArIG5pcmJ1ZjsKLQkJZW5kX29mX2FnID0gMDsKLQkJaWNvdW50ID0gMDsKIAkJaWYgKGFnaW5vID4gMCkgewogCQkJLyoKIAkJCSAqIEluIHRoZSBtaWRkbGUgb2YgYW4gYWxsb2NhdGlvbiBncm91cCwgd2UgbmVlZCB0byBnZXQKQEAgLTQyNywyMiArNDE4LDIzIEBACiAKIAkJCWVycm9yID0geGZzX2J1bGtzdGF0X2dyYWJfaWNodW5rKGN1ciwgYWdpbm8sICZpY291bnQsICZyKTsKIAkJCWlmIChlcnJvcikKLQkJCQlicmVhazsKKwkJCQlnb3RvIGRlbF9jdXJzb3I7CiAJCQlpZiAoaWNvdW50KSB7CiAJCQkJaXJicC0+aXJfc3RhcnRpbm8gPSByLmlyX3N0YXJ0aW5vOwogCQkJCWlyYnAtPmlyX2ZyZWVjb3VudCA9IHIuaXJfZnJlZWNvdW50OwogCQkJCWlyYnAtPmlyX2ZyZWUgPSByLmlyX2ZyZWU7CiAJCQkJaXJicCsrOwotCQkJCWFnaW5vID0gci5pcl9zdGFydGlubyArIFhGU19JTk9ERVNfUEVSX0NIVU5LOwogCQkJfQogCQkJLyogSW5jcmVtZW50IHRvIHRoZSBuZXh0IHJlY29yZCAqLwotCQkJZXJyb3IgPSB4ZnNfYnRyZWVfaW5jcmVtZW50KGN1ciwgMCwgJnRtcCk7CisJCQllcnJvciA9IHhmc19idHJlZV9pbmNyZW1lbnQoY3VyLCAwLCAmc3RhdCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBTdGFydCBvZiBhZy4gIExvb2t1cCB0aGUgZmlyc3QgaW5vZGUgY2h1bmsgKi8KLQkJCWVycm9yID0geGZzX2lub2J0X2xvb2t1cChjdXIsIDAsIFhGU19MT09LVVBfR0UsICZ0bXApOworCQkJZXJyb3IgPSB4ZnNfaW5vYnRfbG9va3VwKGN1ciwgMCwgWEZTX0xPT0tVUF9HRSwgJnN0YXQpOwogCQl9Ci0JCWlmIChlcnJvcikKLQkJCWJyZWFrOworCQlpZiAoZXJyb3IgfHwgc3RhdCA9PSAwKSB7CisJCQllbmRfb2ZfYWcgPSB0cnVlOworCQkJZ290byBkZWxfY3Vyc29yOworCQl9CiAKIAkJLyoKIAkJICogTG9vcCB0aHJvdWdoIGlub2RlIGJ0cmVlIHJlY29yZHMgaW4gdGhpcyBhZywKQEAgLTQ1MSwxMCArNDQzLDEwIEBACiAJCXdoaWxlIChpcmJwIDwgaXJidWZlbmQgJiYgaWNvdW50IDwgdWJjb3VudCkgewogCQkJc3RydWN0IHhmc19pbm9idF9yZWNfaW5jb3JlCXI7CiAKLQkJCWVycm9yID0geGZzX2lub2J0X2dldF9yZWMoY3VyLCAmciwgJmkpOwotCQkJaWYgKGVycm9yIHx8IGkgPT0gMCkgewotCQkJCWVuZF9vZl9hZyA9IDE7Ci0JCQkJYnJlYWs7CisJCQllcnJvciA9IHhmc19pbm9idF9nZXRfcmVjKGN1ciwgJnIsICZzdGF0KTsKKwkJCWlmIChlcnJvciB8fCBzdGF0ID09IDApIHsKKwkJCQllbmRfb2ZfYWcgPSB0cnVlOworCQkJCWdvdG8gZGVsX2N1cnNvcjsKIAkJCX0KIAogCQkJLyoKQEAgLTQ2OSw3NyArNDYxLDc5IEBACiAJCQkJaXJicCsrOwogCQkJCWljb3VudCArPSBYRlNfSU5PREVTX1BFUl9DSFVOSyAtIHIuaXJfZnJlZWNvdW50OwogCQkJfQotCQkJLyoKLQkJCSAqIFNldCBhZ2lubyB0byBhZnRlciB0aGlzIGNodW5rIGFuZCBidW1wIHRoZSBjdXJzb3IuCi0JCQkgKi8KLQkJCWFnaW5vID0gci5pcl9zdGFydGlubyArIFhGU19JTk9ERVNfUEVSX0NIVU5LOwotCQkJZXJyb3IgPSB4ZnNfYnRyZWVfaW5jcmVtZW50KGN1ciwgMCwgJnRtcCk7CisJCQllcnJvciA9IHhmc19idHJlZV9pbmNyZW1lbnQoY3VyLCAwLCAmc3RhdCk7CisJCQlpZiAoZXJyb3IgfHwgc3RhdCA9PSAwKSB7CisJCQkJZW5kX29mX2FnID0gdHJ1ZTsKKwkJCQlnb3RvIGRlbF9jdXJzb3I7CisJCQl9CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJfQorCiAJCS8qCi0JCSAqIERyb3AgdGhlIGJ0cmVlIGJ1ZmZlcnMgYW5kIHRoZSBhZ2kgYnVmZmVyLgotCQkgKiBXZSBjYW4ndCBob2xkIGFueSBvZiB0aGUgbG9ja3MgdGhlc2UgcmVwcmVzZW50Ci0JCSAqIHdoZW4gY2FsbGluZyBpZ2V0LgorCQkgKiBEcm9wIHRoZSBidHJlZSBidWZmZXJzIGFuZCB0aGUgYWdpIGJ1ZmZlciBhcyB3ZSBjYW4ndCBob2xkIGFueQorCQkgKiBvZiB0aGUgbG9ja3MgdGhlc2UgcmVwcmVzZW50IHdoZW4gY2FsbGluZyBpZ2V0LiBJZiB0aGVyZSBpcyBhCisJCSAqIHBlbmRpbmcgZXJyb3IsIHRoZW4gd2UgYXJlIGRvbmUuCiAJCSAqLworZGVsX2N1cnNvcjoKIAkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7CiAJCXhmc19idWZfcmVsc2UoYWdicCk7CisJCWlmIChlcnJvcikKKwkJCWJyZWFrOwogCQkvKgotCQkgKiBOb3cgZm9ybWF0IGFsbCB0aGUgZ29vZCBpbm9kZXMgaW50byB0aGUgdXNlcidzIGJ1ZmZlci4KKwkJICogTm93IGZvcm1hdCBhbGwgdGhlIGdvb2QgaW5vZGVzIGludG8gdGhlIHVzZXIncyBidWZmZXIuIFRoZQorCQkgKiBjYWxsIHRvIHhmc19idWxrc3RhdF9hZ19pY2h1bmsoKSBzZXRzIHVwIHRoZSBhZ2lubyBwb2ludGVyCisJCSAqIGZvciB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbi4KIAkJICovCiAJCWlyYnVmZW5kID0gaXJicDsKIAkJZm9yIChpcmJwID0gaXJidWY7Ci0JCSAgICAgaXJicCA8IGlyYnVmZW5kICYmIFhGU19CVUxLU1RBVF9VQkxFRlQodWJsZWZ0KTsgaXJicCsrKSB7Ci0JCQlzdHJ1Y3QgeGZzX2J1bGtzdGF0X2FnaWNodW5rIGFjOwotCi0JCQlhYy5hY19sYXN0aW5vID0gbGFzdGlubzsKLQkJCWFjLmFjX3VidWZmZXIgPSAmdWJ1ZmZlcjsKLQkJCWFjLmFjX3VibGVmdCA9IHVibGVmdDsKLQkJCWFjLmFjX3ViZWxlbSA9IHViZWxlbTsKKwkJICAgICBpcmJwIDwgaXJidWZlbmQgJiYgYWMuYWNfdWJsZWZ0ID49IHN0YXRzdHJ1Y3Rfc2l6ZTsKKwkJICAgICBpcmJwKyspIHsKIAkJCWVycm9yID0geGZzX2J1bGtzdGF0X2FnX2ljaHVuayhtcCwgYWdubywgaXJicCwKLQkJCQkJZm9ybWF0dGVyLCBzdGF0c3RydWN0X3NpemUsICZhYyk7CisJCQkJCWZvcm1hdHRlciwgc3RhdHN0cnVjdF9zaXplLCAmYWMsCisJCQkJCSZhZ2lubyk7CiAJCQlpZiAoZXJyb3IpCi0JCQkJcnZhbCA9IGVycm9yOwotCi0JCQlsYXN0aW5vID0gYWMuYWNfbGFzdGlubzsKLQkJCXVibGVmdCA9IGFjLmFjX3VibGVmdDsKLQkJCXViZWxlbSA9IGFjLmFjX3ViZWxlbTsKKwkJCQlicmVhazsKIAogCQkJY29uZF9yZXNjaGVkKCk7CiAJCX0KKwogCQkvKgotCQkgKiBTZXQgdXAgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgorCQkgKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIHNwYWNlIG9yIGhhZCBhIGZvcm1hdHRpbmcgZXJyb3IsIHdlCisJCSAqIGFyZSBub3cgZG9uZQogCQkgKi8KLQkJaWYgKFhGU19CVUxLU1RBVF9VQkxFRlQodWJsZWZ0KSkgewotCQkJaWYgKGVuZF9vZl9hZykgewotCQkJCWFnbm8rKzsKLQkJCQlhZ2lubyA9IDA7Ci0JCQl9IGVsc2UKLQkJCQlhZ2lubyA9IFhGU19JTk9fVE9fQUdJTk8obXAsIGxhc3Rpbm8pOwotCQl9IGVsc2UKKwkJaWYgKGFjLmFjX3VibGVmdCA8IHN0YXRzdHJ1Y3Rfc2l6ZSB8fCBlcnJvcikKIAkJCWJyZWFrOworCisJCWlmIChlbmRfb2ZfYWcpIHsKKwkJCWFnbm8rKzsKKwkJCWFnaW5vID0gMDsKKwkJfQogCX0KIAkvKgogCSAqIERvbmUsIHdlJ3JlIGVpdGhlciBvdXQgb2YgZmlsZXN5c3RlbSBvciBzcGFjZSB0byBwdXQgdGhlIGRhdGEuCiAJICovCiAJa21lbV9mcmVlKGlyYnVmKTsKLQkqdWJjb3VudHAgPSB1YmVsZW07Ci0JLyoKLQkgKiBGb3VuZCBzb21lIGlub2RlcywgcmV0dXJuIHRoZW0gbm93IGFuZCByZXR1cm4gdGhlIGVycm9yIG5leHQgdGltZS4KLQkgKi8KLQlpZiAodWJlbGVtKQotCQlydmFsID0gMDsKLQlpZiAoYWdubyA+PSBtcC0+bV9zYi5zYl9hZ2NvdW50KSB7Ci0JCS8qCi0JCSAqIElmIHdlIHJhbiBvdXQgb2YgZmlsZXN5c3RlbSwgbWFyayBsYXN0aW5vIGFzIG9mZgotCQkgKiB0aGUgZW5kIG9mIHRoZSBmaWxlc3lzdGVtLCBzbyB0aGUgbmV4dCBjYWxsCi0JCSAqIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LgotCQkgKi8KLQkJKmxhc3Rpbm9wID0gKHhmc19pbm9fdClYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ25vLCAwKTsKLQkJKmRvbmUgPSAxOwotCX0gZWxzZQotCQkqbGFzdGlub3AgPSAoeGZzX2lub190KWxhc3Rpbm87CisJKnViY291bnRwID0gYWMuYWNfdWJlbGVtOwogCi0JcmV0dXJuIHJ2YWw7CisJLyoKKwkgKiBXZSBmb3VuZCBzb21lIGlub2Rlcywgc28gY2xlYXIgdGhlIGVycm9yIHN0YXR1cyBhbmQgcmV0dXJuIHRoZW0uCisJICogVGhlIGxhc3Rpbm8gcG9pbnRlciB3aWxsIHBvaW50IGRpcmVjdGx5IGF0IHRoZSBpbm9kZSB0aGF0IHRyaWdnZXJlZAorCSAqIGFueSBlcnJvciB0aGF0IG9jY3VycmVkLCBzbyBvbiB0aGUgbmV4dCBjYWxsIHRoZSBlcnJvciB3aWxsIGJlCisJICogdHJpZ2dlcmVkIGFnYWluIGFuZCBwcm9wYWdhdGVkIHRvIHVzZXJzcGFjZSBhcyB0aGVyZSB3aWxsIGJlIG5vCisJICogZm9ybWF0dGVkIGlub2RlcyBpbiB0aGUgYnVmZmVyLgorCSAqLworCWlmIChhYy5hY191YmVsZW0pCisJCWVycm9yID0gMDsKKworCS8qCisJICogSWYgd2UgcmFuIG91dCBvZiBmaWxlc3lzdGVtLCBsYXN0aW5vIHdpbGwgcG9pbnQgb2ZmIHRoZSBlbmQgb2YKKwkgKiB0aGUgZmlsZXN5c3RlbSBzbyB0aGUgbmV4dCBjYWxsIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LgorCSAqLworCSpsYXN0aW5vcCA9IFhGU19BR0lOT19UT19JTk8obXAsIGFnbm8sIGFnaW5vKTsKKwlpZiAoYWdubyA+PSBtcC0+bV9zYi5zYl9hZ2NvdW50KQorCQkqZG9uZSA9IDE7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pdGFibGUuaCBiL2ZzL3hmcy94ZnNfaXRhYmxlLmgKaW5kZXggYWFlZDA4MC4uNmVhOGIzOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pdGFibGUuaAorKysgYi9mcy94ZnMveGZzX2l0YWJsZS5oCkBAIC0zMCwyMiArMzAsNiBAQAogCQkJICAgICAgIGludAkJKnVidXNlZCwKIAkJCSAgICAgICBpbnQJCSpzdGF0KTsKIAotc3RydWN0IHhmc19idWxrc3RhdF9hZ2ljaHVuayB7Ci0JeGZzX2lub190CWFjX2xhc3Rpbm87CS8qIGxhc3QgaW5vZGUgcmV0dXJuZWQgKi8KLQljaGFyCQlfX3VzZXIgKiphY191YnVmZmVyOy8qIHBvaW50ZXIgaW50byB1c2VyJ3MgYnVmZmVyICovCi0JaW50CQlhY191YmxlZnQ7CS8qIGJ5dGVzIGxlZnQgaW4gdXNlcidzIGJ1ZmZlciAqLwotCWludAkJYWNfdWJlbGVtOwkvKiBzcGFjZXMgdXNlZCBpbiB1c2VyJ3MgYnVmZmVyICovCi19OwotCi1pbnQKLXhmc19idWxrc3RhdF9hZ19pY2h1bmsoCi0Jc3RydWN0IHhmc19tb3VudAkJKm1wLAotCXhmc19hZ251bWJlcl90CQkJYWdubywKLQlzdHJ1Y3QgeGZzX2lub2J0X3JlY19pbmNvcmUJKmlyYnAsCi0JYnVsa3N0YXRfb25lX3BmCQkJZm9ybWF0dGVyLAotCXNpemVfdAkJCQlzdGF0c3RydWN0X3NpemUsCi0Jc3RydWN0IHhmc19idWxrc3RhdF9hZ2ljaHVuawkqYWNwKTsKLQogLyoKICAqIFZhbHVlcyBmb3Igc3RhdCByZXR1cm4gdmFsdWUuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZnV0ZXguaAppbmRleCAwMWYyMjdlLi5iNTliNWE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mdXRleC5oCkBAIC01LDYgKzUsMTE5IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogCisjaWZuZGVmIENPTkZJR19TTVAKKy8qCisgKiBUaGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIG9ubHkgZm9yIHVuaXByb2Nlc3NvciBtYWNoaW5lcy4KKyAqIEZvciBVUCwgaXQncyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBwYWdlZmF1bHRfZGlzYWJsZSgpIGFsc28gZGlzYWJsZXMKKyAqIHByZWVtcHRpb24gdG8gZW5zdXJlIG11dHVhbCBleGNsdXNpb24uCisgKgorICovCisKKy8qKgorICogZnV0ZXhfYXRvbWljX29wX2ludXNlcigpIC0gQXRvbWljIGFyaXRobWV0aWMgb3BlcmF0aW9uIHdpdGggY29uc3RhbnQKKyAqCQkJICBhcmd1bWVudCBhbmQgY29tcGFyaXNvbiBvZiB0aGUgcHJldmlvdXMKKyAqCQkJICBmdXRleCB2YWx1ZSB3aXRoIGFub3RoZXIgY29uc3RhbnQuCisgKgorICogQGVuY29kZWRfb3A6CWVuY29kZWQgb3BlcmF0aW9uIHRvIGV4ZWN1dGUKKyAqIEB1YWRkcjoJcG9pbnRlciB0byB1c2VyIHNwYWNlIGFkZHJlc3MKKyAqCisgKiBSZXR1cm46CisgKiAwIC0gT24gc3VjY2VzcworICogPDAgLSBPbiBlcnJvcgorICovCitzdGF0aWMgaW5saW5lIGludAorZnV0ZXhfYXRvbWljX29wX2ludXNlcihpbnQgZW5jb2RlZF9vcCwgdTMyIF9fdXNlciAqdWFkZHIpCit7CisJaW50IG9wID0gKGVuY29kZWRfb3AgPj4gMjgpICYgNzsKKwlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CisJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CisJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKKwlpbnQgb2xkdmFsLCByZXQ7CisJdTMyIHRtcDsKKworCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKKwkJb3BhcmcgPSAxIDw8IG9wYXJnOworCisJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKworCXJldCA9IC1FRkFVTFQ7CisJaWYgKHVubGlrZWx5KGdldF91c2VyKG9sZHZhbCwgdWFkZHIpICE9IDApKQorCQlnb3RvIG91dF9wYWdlZmF1bHRfZW5hYmxlOworCisJcmV0ID0gMDsKKwl0bXAgPSBvbGR2YWw7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBGVVRFWF9PUF9TRVQ6CisJCXRtcCA9IG9wYXJnOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX0FERDoKKwkJdG1wICs9IG9wYXJnOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX09SOgorCQl0bXAgfD0gb3Bhcmc7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfQU5ETjoKKwkJdG1wICY9IH5vcGFyZzsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9YT1I6CisJCXRtcCBePSBvcGFyZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwl9CisKKwlpZiAocmV0ID09IDAgJiYgdW5saWtlbHkocHV0X3VzZXIodG1wLCB1YWRkcikgIT0gMCkpCisJCXJldCA9IC1FRkFVTFQ7CisKK291dF9wYWdlZmF1bHRfZW5hYmxlOgorCXBhZ2VmYXVsdF9lbmFibGUoKTsKKworCWlmIChyZXQgPT0gMCkgeworCQlzd2l0Y2ggKGNtcCkgeworCQljYXNlIEZVVEVYX09QX0NNUF9FUTogcmV0ID0gKG9sZHZhbCA9PSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTkU6IHJldCA9IChvbGR2YWwgIT0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0xUOiByZXQgPSAob2xkdmFsIDwgY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0dFOiByZXQgPSAob2xkdmFsID49IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9MRTogcmV0ID0gKG9sZHZhbCA8PSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfR1Q6IHJldCA9IChvbGR2YWwgPiBjbXBhcmcpOyBicmVhazsKKwkJZGVmYXVsdDogcmV0ID0gLUVOT1NZUzsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKCkgLSBDb21wYXJlIGFuZCBleGNoYW5nZSB0aGUgY29udGVudCBvZiB0aGUKKyAqCQkJCXVhZGRyIHdpdGggbmV3dmFsIGlmIHRoZSBjdXJyZW50IHZhbHVlIGlzCisgKgkJCQlvbGR2YWwuCisgKiBAdXZhbDoJcG9pbnRlciB0byBzdG9yZSBjb250ZW50IG9mIEB1YWRkcgorICogQHVhZGRyOglwb2ludGVyIHRvIHVzZXIgc3BhY2UgYWRkcmVzcworICogQG9sZHZhbDoJb2xkIHZhbHVlCisgKiBAbmV3dmFsOgluZXcgdmFsdWUgdG8gc3RvcmUgdG8gQHVhZGRyCisgKgorICogUmV0dXJuOgorICogMCAtIE9uIHN1Y2Nlc3MKKyAqIDwwIC0gT24gZXJyb3IKKyAqLworc3RhdGljIGlubGluZSBpbnQKK2Z1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKHUzMiAqdXZhbCwgdTMyIF9fdXNlciAqdWFkZHIsCisJCQkgICAgICB1MzIgb2xkdmFsLCB1MzIgbmV3dmFsKQoreworCXUzMiB2YWw7CisKKwlpZiAodW5saWtlbHkoZ2V0X3VzZXIodmFsLCB1YWRkcikgIT0gMCkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHZhbCA9PSBvbGR2YWwgJiYgdW5saWtlbHkocHV0X3VzZXIobmV3dmFsLCB1YWRkcikgIT0gMCkpCisJCXJldHVybiAtRUZBVUxUOworCisJKnV2YWwgPSB2YWw7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50CiBmdXRleF9hdG9taWNfb3BfaW51c2VyIChpbnQgZW5jb2RlZF9vcCwgdTMyIF9fdXNlciAqdWFkZHIpCiB7CkBAIC01NCw0ICsxNjcsNSBAQAogCXJldHVybiAtRU5PU1lTOwogfQogCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2lvLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lvLmgKaW5kZXggYjhmZGM1Ny4uOWRiMDQyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW8uaApAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBfX0FTTV9HRU5FUklDX0lPX0gKIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+IC8qIEkvTyBpcyBhbGwgZG9uZSB0aHJvdWdoIG1lbW9yeSBhY2Nlc3NlcyAqLworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPiAvKiBmb3IgbWVtc2V0KCkgYW5kIG1lbWNweSgpICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCkBAIC0yNCwyNjAgKzI1LDY5MSBAQAogI2RlZmluZSBtbWlvd2IoKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogcmVhZFgvd3JpdGVYKCkgYXJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSBtYXBwZWQgZGV2aWNlcy4gT24gc29tZQotICogYXJjaGl0ZWN0dXJlcyB0aGUgbWVtb3J5IG1hcHBlZCBJTyBzdHVmZiBuZWVkcyB0byBiZSBhY2Nlc3NlZAotICogZGlmZmVyZW50bHkuIE9uIHRoZSBzaW1wbGUgYXJjaGl0ZWN0dXJlcywgd2UganVzdCByZWFkL3dyaXRlIHRoZQotICogbWVtb3J5IGxvY2F0aW9uIGRpcmVjdGx5LgorICogX19yYXdfe3JlYWQsd3JpdGV9e2IsdyxsLHF9KCkgYWNjZXNzIG1lbW9yeSBpbiBuYXRpdmUgZW5kaWFubmVzcy4KKyAqCisgKiBPbiBzb21lIGFyY2hpdGVjdHVyZXMgbWVtb3J5IG1hcHBlZCBJTyBuZWVkcyB0byBiZSBhY2Nlc3NlZCBkaWZmZXJlbnRseS4KKyAqIE9uIHRoZSBzaW1wbGUgYXJjaGl0ZWN0dXJlcywgd2UganVzdCByZWFkL3dyaXRlIHRoZSBtZW1vcnkgbG9jYXRpb24KKyAqIGRpcmVjdGx5LgogICovCisKICNpZm5kZWYgX19yYXdfcmVhZGIKKyNkZWZpbmUgX19yYXdfcmVhZGIgX19yYXdfcmVhZGIKIHN0YXRpYyBpbmxpbmUgdTggX19yYXdfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiAqKGNvbnN0IHZvbGF0aWxlIHU4IF9fZm9yY2UgKikgYWRkcjsKKwlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1OCBfX2ZvcmNlICopYWRkcjsKIH0KICNlbmRpZgogCiAjaWZuZGVmIF9fcmF3X3JlYWR3CisjZGVmaW5lIF9fcmF3X3JlYWR3IF9fcmF3X3JlYWR3CiBzdGF0aWMgaW5saW5lIHUxNiBfX3Jhd19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdTE2IF9fZm9yY2UgKikgYWRkcjsKKwlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1MTYgX19mb3JjZSAqKWFkZHI7CiB9CiAjZW5kaWYKIAogI2lmbmRlZiBfX3Jhd19yZWFkbAorI2RlZmluZSBfX3Jhd19yZWFkbCBfX3Jhd19yZWFkbAogc3RhdGljIGlubGluZSB1MzIgX19yYXdfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiAqKGNvbnN0IHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopIGFkZHI7CisJcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdTMyIF9fZm9yY2UgKilhZGRyOwogfQogI2VuZGlmCiAKLSNkZWZpbmUgcmVhZGIgX19yYXdfcmVhZGIKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgX19yYXdfcmVhZHEKKyNkZWZpbmUgX19yYXdfcmVhZHEgX19yYXdfcmVhZHEKK3N0YXRpYyBpbmxpbmUgdTY0IF9fcmF3X3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1NjQgX19mb3JjZSAqKWFkZHI7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAorI2lmbmRlZiBfX3Jhd193cml0ZWIKKyNkZWZpbmUgX19yYXdfd3JpdGViIF9fcmF3X3dyaXRlYgorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1OCB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdTggX19mb3JjZSAqKWFkZHIgPSB2YWx1ZTsKK30KKyNlbmRpZgorCisjaWZuZGVmIF9fcmF3X3dyaXRldworI2RlZmluZSBfX3Jhd193cml0ZXcgX19yYXdfd3JpdGV3CitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHUxNiB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdTE2IF9fZm9yY2UgKilhZGRyID0gdmFsdWU7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX3Jhd193cml0ZWwKKyNkZWZpbmUgX19yYXdfd3JpdGVsIF9fcmF3X3dyaXRlbAorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlbCh1MzIgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopYWRkciA9IHZhbHVlOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgX19yYXdfd3JpdGVxCisjZGVmaW5lIF9fcmF3X3dyaXRlcSBfX3Jhd193cml0ZXEKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXEodTY0IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKWFkZHIgPSB2YWx1ZTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCisvKgorICoge3JlYWQsd3JpdGV9e2IsdyxsLHF9KCkgYWNjZXNzIGxpdHRsZSBlbmRpYW4gbWVtb3J5IGFuZCByZXR1cm4gcmVzdWx0IGluCisgKiBuYXRpdmUgZW5kaWFubmVzcy4KKyAqLworCisjaWZuZGVmIHJlYWRiCisjZGVmaW5lIHJlYWRiIHJlYWRiCitzdGF0aWMgaW5saW5lIHU4IHJlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiByZWFkdwogI2RlZmluZSByZWFkdyByZWFkdwogc3RhdGljIGlubGluZSB1MTYgcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXJldHVybiBfX2xlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KGFkZHIpKTsKIH0KKyNlbmRpZgogCisjaWZuZGVmIHJlYWRsCiAjZGVmaW5lIHJlYWRsIHJlYWRsCiBzdGF0aWMgaW5saW5lIHUzMiByZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJcmV0dXJuIF9fbGUzMl90b19jcHUoX19yYXdfcmVhZGwoYWRkcikpOwogfQotCi0jaWZuZGVmIF9fcmF3X3dyaXRlYgotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JKih2b2xhdGlsZSB1OCBfX2ZvcmNlICopIGFkZHIgPSBiOwotfQogI2VuZGlmCiAKLSNpZm5kZWYgX19yYXdfd3JpdGV3Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHUxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JKih2b2xhdGlsZSB1MTYgX19mb3JjZSAqKSBhZGRyID0gYjsKLX0KLSNlbmRpZgotCi0jaWZuZGVmIF9fcmF3X3dyaXRlbAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlbCh1MzIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCSoodm9sYXRpbGUgdTMyIF9fZm9yY2UgKikgYWRkciA9IGI7Ci19Ci0jZW5kaWYKLQotI2RlZmluZSB3cml0ZWIgX19yYXdfd3JpdGViCi0jZGVmaW5lIHdyaXRldyhiLGFkZHIpIF9fcmF3X3dyaXRldyhfX2NwdV90b19sZTE2KGIpLGFkZHIpCi0jZGVmaW5lIHdyaXRlbChiLGFkZHIpIF9fcmF3X3dyaXRlbChfX2NwdV90b19sZTMyKGIpLGFkZHIpCi0KICNpZmRlZiBDT05GSUdfNjRCSVQKLSNpZm5kZWYgX19yYXdfcmVhZHEKLXN0YXRpYyBpbmxpbmUgdTY0IF9fcmF3X3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1NjQgX19mb3JjZSAqKSBhZGRyOwotfQotI2VuZGlmCi0KKyNpZm5kZWYgcmVhZHEKICNkZWZpbmUgcmVhZHEgcmVhZHEKIHN0YXRpYyBpbmxpbmUgdTY0IHJlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gX19sZTY0X3RvX2NwdShfX3Jhd19yZWFkcShhZGRyKSk7CiB9Ci0KLSNpZm5kZWYgX19yYXdfd3JpdGVxCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVxKHU2NCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKSBhZGRyID0gYjsKLX0KICNlbmRpZgotCi0jZGVmaW5lIHdyaXRlcShiLCBhZGRyKSBfX3Jhd193cml0ZXEoX19jcHVfdG9fbGU2NChiKSwgYWRkcikKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAotI2lmbmRlZiBQQ0lfSU9CQVNFCi0jZGVmaW5lIFBDSV9JT0JBU0UgKCh2b2lkIF9faW9tZW0gKikgMCkKKyNpZm5kZWYgd3JpdGViCisjZGVmaW5lIHdyaXRlYiB3cml0ZWIKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWIodTggdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZWIodmFsdWUsIGFkZHIpOworfQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgd3JpdGV3CisjZGVmaW5lIHdyaXRldyB3cml0ZXcKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXcodTE2IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGV3KGNwdV90b19sZTE2KHZhbHVlKSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiB3cml0ZWwKKyNkZWZpbmUgd3JpdGVsIHdyaXRlbAorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlbCh1MzIgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZWwoX19jcHVfdG9fbGUzMih2YWx1ZSksIGFkZHIpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgd3JpdGVxCisjZGVmaW5lIHdyaXRlcSB3cml0ZXEKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXEodTY0IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGVxKF9fY3B1X3RvX2xlNjQodmFsdWUpLCBhZGRyKTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCiAvKgotICogdHJhZGl0aW9uYWwgaW5wdXQvb3V0cHV0IGZ1bmN0aW9ucworICoge3JlYWQsd3JpdGV9e2IsdyxsLHF9X3JlbGF4ZWQoKSBhcmUgbGlrZSB0aGUgcmVndWxhciB2ZXJzaW9uLCBidXQKKyAqIGFyZSBub3QgZ3VhcmFudGVlZCB0byBwcm92aWRlIG9yZGVyaW5nIGFnYWluc3Qgc3BpbmxvY2tzIG9yIG1lbW9yeQorICogYWNjZXNzZXMuCiAgKi8KKyNpZm5kZWYgcmVhZGJfcmVsYXhlZAorI2RlZmluZSByZWFkYl9yZWxheGVkIHJlYWRiCisjZW5kaWYKIAotc3RhdGljIGlubGluZSB1OCBpbmIodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiByZWFkYihhZGRyICsgUENJX0lPQkFTRSk7Ci19CisjaWZuZGVmIHJlYWR3X3JlbGF4ZWQKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZCByZWFkdworI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdTE2IGludyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIHJlYWR3KGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KKyNpZm5kZWYgcmVhZGxfcmVsYXhlZAorI2RlZmluZSByZWFkbF9yZWxheGVkIHJlYWRsCisjZW5kaWYKIAotc3RhdGljIGlubGluZSB1MzIgaW5sKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gcmVhZGwoYWRkciArIFBDSV9JT0JBU0UpOwotfQorI2lmbmRlZiByZWFkcV9yZWxheGVkCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQgcmVhZHEKKyNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0Yih1OCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jd3JpdGViKGIsIGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KKyNpZm5kZWYgd3JpdGViX3JlbGF4ZWQKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQgd3JpdGViCisjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIG91dHcodTE2IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl3cml0ZXcoYiwgYWRkciArIFBDSV9JT0JBU0UpOwotfQorI2lmbmRlZiB3cml0ZXdfcmVsYXhlZAorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKKyNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXdyaXRlbChiLCBhZGRyICsgUENJX0lPQkFTRSk7Ci19CisjaWZuZGVmIHdyaXRlbF9yZWxheGVkCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkIHdyaXRlbAorI2VuZGlmCiAKLSNkZWZpbmUgaW5iX3AoYWRkcikJaW5iKGFkZHIpCi0jZGVmaW5lIGlud19wKGFkZHIpCWludyhhZGRyKQotI2RlZmluZSBpbmxfcChhZGRyKQlpbmwoYWRkcikKLSNkZWZpbmUgb3V0Yl9wKHgsIGFkZHIpCW91dGIoKHgpLCAoYWRkcikpCi0jZGVmaW5lIG91dHdfcCh4LCBhZGRyKQlvdXR3KCh4KSwgKGFkZHIpKQotI2RlZmluZSBvdXRsX3AoeCwgYWRkcikJb3V0bCgoeCksIChhZGRyKSkKKyNpZm5kZWYgd3JpdGVxX3JlbGF4ZWQKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQgd3JpdGVxCisjZW5kaWYKIAotI2lmbmRlZiBpbnNiCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQorLyoKKyAqIHtyZWFkLHdyaXRlfXN7Yix3LGwscX0oKSByZXBlYXRlZGx5IGFjY2VzcyB0aGUgc2FtZSBtZW1vcnkgYWRkcmVzcyBpbgorICogbmF0aXZlIGVuZGlhbm5lc3MgaW4gOC0sIDE2LSwgMzItIG9yIDY0LWJpdCBjaHVua3MgKEBjb3VudCB0aW1lcykuCisgKi8KKyNpZm5kZWYgcmVhZHNiCisjZGVmaW5lIHJlYWRzYiByZWFkc2IKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc2IoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJdTggKmJ1ZiA9IGJ1ZmZlcjsKKwogCQlkbyB7Ci0JCQl1OCB4ID0gX19yYXdfcmVhZGIoYWRkciArIFBDSV9JT0JBU0UpOworCQkJdTggeCA9IF9fcmF3X3JlYWRiKGFkZHIpOwogCQkJKmJ1ZisrID0geDsKIAkJfSB3aGlsZSAoLS1jb3VudCk7CiAJfQogfQogI2VuZGlmCiAKLSNpZm5kZWYgaW5zdwotc3RhdGljIGlubGluZSB2b2lkIGluc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKKyNpZm5kZWYgcmVhZHN3CisjZGVmaW5lIHJlYWRzdyByZWFkc3cKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc3coY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJdTE2ICpidWYgPSBidWZmZXI7CisKIAkJZG8gewotCQkJdTE2IHggPSBfX3Jhd19yZWFkdyhhZGRyICsgUENJX0lPQkFTRSk7CisJCQl1MTYgeCA9IF9fcmF3X3JlYWR3KGFkZHIpOwogCQkJKmJ1ZisrID0geDsKIAkJfSB3aGlsZSAoLS1jb3VudCk7CiAJfQogfQogI2VuZGlmCiAKLSNpZm5kZWYgaW5zbAotc3RhdGljIGlubGluZSB2b2lkIGluc2wodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKKyNpZm5kZWYgcmVhZHNsCisjZGVmaW5lIHJlYWRzbCByZWFkc2wKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc2woY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJdTMyICpidWYgPSBidWZmZXI7CisKIAkJZG8gewotCQkJdTMyIHggPSBfX3Jhd19yZWFkbChhZGRyICsgUENJX0lPQkFTRSk7CisJCQl1MzIgeCA9IF9fcmF3X3JlYWRsKGFkZHIpOwogCQkJKmJ1ZisrID0geDsKIAkJfSB3aGlsZSAoLS1jb3VudCk7CiAJfQogfQogI2VuZGlmCiAKLSNpZm5kZWYgb3V0c2IKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzYih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQorI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiByZWFkc3EKKyNkZWZpbmUgcmVhZHNxIHJlYWRzcQorc3RhdGljIGlubGluZSB2b2lkIHJlYWRzcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmJ1ZmZlciwKKwkJCSAgdW5zaWduZWQgaW50IGNvdW50KQoreworCWlmIChjb3VudCkgeworCQl1NjQgKmJ1ZiA9IGJ1ZmZlcjsKKworCQlkbyB7CisJCQl1NjQgeCA9IF9fcmF3X3JlYWRxKGFkZHIpOworCQkJKmJ1ZisrID0geDsKKwkJfSB3aGlsZSAoLS1jb3VudCk7CisJfQorfQorI2VuZGlmCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCisKKyNpZm5kZWYgd3JpdGVzYgorI2RlZmluZSB3cml0ZXNiIHdyaXRlc2IKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXNiKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQogewogCWlmIChjb3VudCkgewogCQljb25zdCB1OCAqYnVmID0gYnVmZmVyOworCiAJCWRvIHsKLQkJCV9fcmF3X3dyaXRlYigqYnVmKyssIGFkZHIgKyBQQ0lfSU9CQVNFKTsKKwkJCV9fcmF3X3dyaXRlYigqYnVmKyssIGFkZHIpOwogCQl9IHdoaWxlICgtLWNvdW50KTsKIAl9CiB9CiAjZW5kaWYKIAotI2lmbmRlZiBvdXRzdwotc3RhdGljIGlubGluZSB2b2lkIG91dHN3KHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCisjaWZuZGVmIHdyaXRlc3cKKyNkZWZpbmUgd3JpdGVzdyB3cml0ZXN3CitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzdyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJY29uc3QgdTE2ICpidWYgPSBidWZmZXI7CisKIAkJZG8gewotCQkJX19yYXdfd3JpdGV3KCpidWYrKywgYWRkciArIFBDSV9JT0JBU0UpOworCQkJX19yYXdfd3JpdGV3KCpidWYrKywgYWRkcik7CiAJCX0gd2hpbGUgKC0tY291bnQpOwogCX0KIH0KICNlbmRpZgogCi0jaWZuZGVmIG91dHNsCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0c2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKKyNpZm5kZWYgd3JpdGVzbAorI2RlZmluZSB3cml0ZXNsIHdyaXRlc2wKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXNsKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQogewogCWlmIChjb3VudCkgewogCQljb25zdCB1MzIgKmJ1ZiA9IGJ1ZmZlcjsKKwogCQlkbyB7Ci0JCQlfX3Jhd193cml0ZWwoKmJ1ZisrLCBhZGRyICsgUENJX0lPQkFTRSk7CisJCQlfX3Jhd193cml0ZWwoKmJ1ZisrLCBhZGRyKTsKIAkJfSB3aGlsZSAoLS1jb3VudCk7CiAJfQogfQogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSU9NQVAKLSNkZWZpbmUgaW9yZWFkOChhZGRyKQkJcmVhZGIoYWRkcikKLSNkZWZpbmUgaW9yZWFkMTYoYWRkcikJCXJlYWR3KGFkZHIpCi0jZGVmaW5lIGlvcmVhZDE2YmUoYWRkcikJX19iZTE2X3RvX2NwdShfX3Jhd19yZWFkdyhhZGRyKSkKLSNkZWZpbmUgaW9yZWFkMzIoYWRkcikJCXJlYWRsKGFkZHIpCi0jZGVmaW5lIGlvcmVhZDMyYmUoYWRkcikJX19iZTMyX3RvX2NwdShfX3Jhd19yZWFkbChhZGRyKSkKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgd3JpdGVzcQorI2RlZmluZSB3cml0ZXNxIHdyaXRlc3EKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXNxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQoreworCWlmIChjb3VudCkgeworCQljb25zdCB1NjQgKmJ1ZiA9IGJ1ZmZlcjsKIAotI2RlZmluZSBpb3dyaXRlOCh2LCBhZGRyKQl3cml0ZWIoKHYpLCAoYWRkcikpCi0jZGVmaW5lIGlvd3JpdGUxNih2LCBhZGRyKQl3cml0ZXcoKHYpLCAoYWRkcikpCi0jZGVmaW5lIGlvd3JpdGUxNmJlKHYsIGFkZHIpCV9fcmF3X3dyaXRldyhfX2NwdV90b19iZTE2KHYpLCBhZGRyKQotI2RlZmluZSBpb3dyaXRlMzIodiwgYWRkcikJd3JpdGVsKCh2KSwgKGFkZHIpKQotI2RlZmluZSBpb3dyaXRlMzJiZSh2LCBhZGRyKQlfX3Jhd193cml0ZWwoX19jcHVfdG9fYmUzMih2KSwgYWRkcikKKwkJZG8geworCQkJX19yYXdfd3JpdGVxKCpidWYrKywgYWRkcik7CisJCX0gd2hpbGUgKC0tY291bnQpOworCX0KK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCi0jZGVmaW5lIGlvcmVhZDhfcmVwKHAsIGRzdCwgY291bnQpIFwKLQlpbnNiKCh1bnNpZ25lZCBsb25nKSAocCksIChkc3QpLCAoY291bnQpKQotI2RlZmluZSBpb3JlYWQxNl9yZXAocCwgZHN0LCBjb3VudCkgXAotCWluc3coKHVuc2lnbmVkIGxvbmcpIChwKSwgKGRzdCksIChjb3VudCkpCi0jZGVmaW5lIGlvcmVhZDMyX3JlcChwLCBkc3QsIGNvdW50KSBcCi0JaW5zbCgodW5zaWduZWQgbG9uZykgKHApLCAoZHN0KSwgKGNvdW50KSkKLQotI2RlZmluZSBpb3dyaXRlOF9yZXAocCwgc3JjLCBjb3VudCkgXAotCW91dHNiKCh1bnNpZ25lZCBsb25nKSAocCksIChzcmMpLCAoY291bnQpKQotI2RlZmluZSBpb3dyaXRlMTZfcmVwKHAsIHNyYywgY291bnQpIFwKLQlvdXRzdygodW5zaWduZWQgbG9uZykgKHApLCAoc3JjKSwgKGNvdW50KSkKLSNkZWZpbmUgaW93cml0ZTMyX3JlcChwLCBzcmMsIGNvdW50KSBcCi0Jb3V0c2woKHVuc2lnbmVkIGxvbmcpIChwKSwgKHNyYyksIChjb3VudCkpCi0jZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSU9NQVAgKi8KKyNpZm5kZWYgUENJX0lPQkFTRQorI2RlZmluZSBQQ0lfSU9CQVNFICgodm9pZCBfX2lvbWVtICopMCkKKyNlbmRpZgogCiAjaWZuZGVmIElPX1NQQUNFX0xJTUlUCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgogI2VuZGlmCiAKKy8qCisgKiB7aW4sb3V0fXtiLHcsbH0oKSBhY2Nlc3MgbGl0dGxlIGVuZGlhbiBJL08uIHtpbixvdXR9e2IsdyxsfV9wKCkgY2FuIGJlCisgKiBpbXBsZW1lbnRlZCBvbiBoYXJkd2FyZSB0aGF0IG5lZWRzIGFuIGFkZGl0aW9uYWwgZGVsYXkgZm9yIEkvTyBhY2Nlc3NlcyB0bworICogdGFrZSBlZmZlY3QuCisgKi8KKworI2lmbmRlZiBpbmIKKyNkZWZpbmUgaW5iIGluYgorc3RhdGljIGlubGluZSB1OCBpbmIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiByZWFkYihQQ0lfSU9CQVNFICsgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbncKKyNkZWZpbmUgaW53IGludworc3RhdGljIGlubGluZSB1MTYgaW53KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gcmVhZHcoUENJX0lPQkFTRSArIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW5sCisjZGVmaW5lIGlubCBpbmwKK3N0YXRpYyBpbmxpbmUgdTMyIGlubCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHJlYWRsKFBDSV9JT0JBU0UgKyBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dGIKKyNkZWZpbmUgb3V0YiBvdXRiCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0Yih1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXdyaXRlYih2YWx1ZSwgUENJX0lPQkFTRSArIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0dworI2RlZmluZSBvdXR3IG91dHcKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXR3KHUxNiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXdyaXRldyh2YWx1ZSwgUENJX0lPQkFTRSArIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0bAorI2RlZmluZSBvdXRsIG91dGwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRsKHUzMiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXdyaXRlbCh2YWx1ZSwgUENJX0lPQkFTRSArIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW5iX3AKKyNkZWZpbmUgaW5iX3AgaW5iX3AKK3N0YXRpYyBpbmxpbmUgdTggaW5iX3AodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBpbmIoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbndfcAorI2RlZmluZSBpbndfcCBpbndfcAorc3RhdGljIGlubGluZSB1MTYgaW53X3AodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBpbncoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbmxfcAorI2RlZmluZSBpbmxfcCBpbmxfcAorc3RhdGljIGlubGluZSB1MzIgaW5sX3AodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBpbmwoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRiX3AKKyNkZWZpbmUgb3V0Yl9wIG91dGJfcAorc3RhdGljIGlubGluZSB2b2lkIG91dGJfcCh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCW91dGIodmFsdWUsIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0d19wCisjZGVmaW5lIG91dHdfcCBvdXR3X3AKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXR3X3AodTE2IHZhbHVlLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJb3V0dyh2YWx1ZSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRsX3AKKyNkZWZpbmUgb3V0bF9wIG91dGxfcAorc3RhdGljIGlubGluZSB2b2lkIG91dGxfcCh1MzIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlvdXRsKHZhbHVlLCBhZGRyKTsKK30KKyNlbmRpZgorCisvKgorICoge2luLG91dH1ze2IsdyxsfXssX3B9KCkgYXJlIHZhcmlhbnRzIG9mIHRoZSBhYm92ZSB0aGF0IHJlcGVhdGVkbHkgYWNjZXNzIGEKKyAqIHNpbmdsZSBJL08gcG9ydCBtdWx0aXBsZSB0aW1lcy4KKyAqLworCisjaWZuZGVmIGluc2IKKyNkZWZpbmUgaW5zYiBpbnNiCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXJlYWRzYihQQ0lfSU9CQVNFICsgYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbnN3CisjZGVmaW5lIGluc3cgaW5zdworc3RhdGljIGlubGluZSB2b2lkIGluc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlyZWFkc3coUENJX0lPQkFTRSArIGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW5zbAorI2RlZmluZSBpbnNsIGluc2wKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJcmVhZHNsKFBDSV9JT0JBU0UgKyBhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHNiCisjZGVmaW5lIG91dHNiIG91dHNiCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c2IodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkgdW5zaWduZWQgaW50IGNvdW50KQoreworCXdyaXRlc2IoUENJX0lPQkFTRSArIGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0c3cKKyNkZWZpbmUgb3V0c3cgb3V0c3cKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRzdyh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJd3JpdGVzdyhQQ0lfSU9CQVNFICsgYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRzbAorI2RlZmluZSBvdXRzbCBvdXRzbAorc3RhdGljIGlubGluZSB2b2lkIG91dHNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl3cml0ZXNsKFBDSV9JT0JBU0UgKyBhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGluc2JfcAorI2RlZmluZSBpbnNiX3AgaW5zYl9wCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zYl9wKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJaW5zYihhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGluc3dfcAorI2RlZmluZSBpbnN3X3AgaW5zd19wCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zd19wKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGluc2xfcAorI2RlZmluZSBpbnNsX3AgaW5zbF9wCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbF9wKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJaW5zbChhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHNiX3AKKyNkZWZpbmUgb3V0c2JfcCBvdXRzYl9wCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c2JfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlvdXRzYihhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHN3X3AKKyNkZWZpbmUgb3V0c3dfcCBvdXRzd19wCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c3dfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlvdXRzdyhhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHNsX3AKKyNkZWZpbmUgb3V0c2xfcCBvdXRzbF9wCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c2xfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlvdXRzbChhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCisjaWZuZGVmIGlvcmVhZDgKKyNkZWZpbmUgaW9yZWFkOCBpb3JlYWQ4CitzdGF0aWMgaW5saW5lIHU4IGlvcmVhZDgoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiByZWFkYihhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvcmVhZDE2CisjZGVmaW5lIGlvcmVhZDE2IGlvcmVhZDE2CitzdGF0aWMgaW5saW5lIHUxNiBpb3JlYWQxNihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIHJlYWR3KGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW9yZWFkMzIKKyNkZWZpbmUgaW9yZWFkMzIgaW9yZWFkMzIKK3N0YXRpYyBpbmxpbmUgdTMyIGlvcmVhZDMyKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGwoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlOAorI2RlZmluZSBpb3dyaXRlOCBpb3dyaXRlOAorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGU4KHU4IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGViKHZhbHVlLCBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvd3JpdGUxNgorI2RlZmluZSBpb3dyaXRlMTYgaW93cml0ZTE2CitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZTE2KHUxNiB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRldyh2YWx1ZSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlMzIKKyNkZWZpbmUgaW93cml0ZTMyIGlvd3JpdGUzMgorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUzMih1MzIgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWwodmFsdWUsIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW9yZWFkMTZiZQorI2RlZmluZSBpb3JlYWQxNmJlIGlvcmVhZDE2YmUKK3N0YXRpYyBpbmxpbmUgdTE2IGlvcmVhZDE2YmUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBfX2JlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KGFkZHIpKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvcmVhZDMyYmUKKyNkZWZpbmUgaW9yZWFkMzJiZSBpb3JlYWQzMmJlCitzdGF0aWMgaW5saW5lIHUzMiBpb3JlYWQzMmJlKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gX19iZTMyX3RvX2NwdShfX3Jhd19yZWFkbChhZGRyKSk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlMTZiZQorI2RlZmluZSBpb3dyaXRlMTZiZSBpb3dyaXRlMTZiZQorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUxNmJlKHUxNiB2YWx1ZSwgdm9pZCB2b2xhdGlsZSBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRldyhfX2NwdV90b19iZTE2KHZhbHVlKSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlMzJiZQorI2RlZmluZSBpb3dyaXRlMzJiZSBpb3dyaXRlMzJiZQorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUzMmJlKHUzMiB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRlbChfX2NwdV90b19iZTMyKHZhbHVlKSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3JlYWQ4X3JlcAorI2RlZmluZSBpb3JlYWQ4X3JlcCBpb3JlYWQ4X3JlcAorc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDhfcmVwKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmZmVyLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlyZWFkc2IoYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3JlYWQxNl9yZXAKKyNkZWZpbmUgaW9yZWFkMTZfcmVwIGlvcmVhZDE2X3JlcAorc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDE2X3JlcChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsCisJCQkJdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJcmVhZHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW9yZWFkMzJfcmVwCisjZGVmaW5lIGlvcmVhZDMyX3JlcCBpb3JlYWQzMl9yZXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQzMl9yZXAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLAorCQkJCXZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXJlYWRzbChhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvd3JpdGU4X3JlcAorI2RlZmluZSBpb3dyaXRlOF9yZXAgaW93cml0ZThfcmVwCitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZThfcmVwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKwkJCQljb25zdCB2b2lkICpidWZmZXIsCisJCQkJdW5zaWduZWQgaW50IGNvdW50KQoreworCXdyaXRlc2IoYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlMTZfcmVwCisjZGVmaW5lIGlvd3JpdGUxNl9yZXAgaW93cml0ZTE2X3JlcAorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUxNl9yZXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLAorCQkJCSBjb25zdCB2b2lkICpidWZmZXIsCisJCQkJIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl3cml0ZXN3KGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW93cml0ZTMyX3JlcAorI2RlZmluZSBpb3dyaXRlMzJfcmVwIGlvd3JpdGUzMl9yZXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMzJfcmVwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKwkJCQkgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCSB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX0lPTUFQICovCisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jZGVmaW5lIF9faW9fdmlydCh4KSAoKHZvaWQgX19mb3JjZSAqKSAoeCkpCisjZGVmaW5lIF9faW9fdmlydCh4KSAoKHZvaWQgX19mb3JjZSAqKSh4KSkKIAogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19JT01BUAogc3RydWN0IHBjaV9kZXY7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXgpOwogCiAjaWZuZGVmIHBjaV9pb3VubWFwCisjZGVmaW5lIHBjaV9pb3VubWFwIHBjaV9pb3VubWFwCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICpwKQogewogfQpAQCAtMjg5LDExICs3MjEsMTUgQEAKICAqIFRoZXNlIGFyZSBwcmV0dHkgdHJpdmlhbAogICovCiAjaWZuZGVmIHZpcnRfdG9fcGh5cworI2RlZmluZSB2aXJ0X3RvX3BoeXMgdmlydF90b19waHlzCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCiB7CiAJcmV0dXJuIF9fcGEoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcyk7CiB9CisjZW5kaWYKIAorI2lmbmRlZiBwaHlzX3RvX3ZpcnQKKyNkZWZpbmUgcGh5c190b192aXJ0IHBoeXNfdG9fdmlydAogc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXJldHVybiBfX3ZhKGFkZHJlc3MpOwpAQCAtMzA2LDM3ICs3NDIsNjUgQEAKICAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgZm9yIHRoZSBuby1NTVUgY2FzZSBvbmx5Li4uIGlmIHlvdSBoYXZlIGFuIE1NVQogICogeW91J2xsIG5lZWQgdG8gcHJvdmlkZSB5b3VyIG93biBkZWZpbml0aW9ucy4KICAqLwotI2lmbmRlZiBDT05GSUdfTU1VCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcChwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSopICh1bnNpZ25lZCBsb25nKW9mZnNldDsKLX0KIAotI2RlZmluZSBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJaW9yZW1hcChvZmZzZXQsIHNpemUpCisjaWZuZGVmIENPTkZJR19NTVUKKyNpZm5kZWYgaW9yZW1hcAorI2RlZmluZSBpb3JlbWFwIGlvcmVtYXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHBoeXNfYWRkcl90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZylvZmZzZXQ7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX2lvcmVtYXAKKyNkZWZpbmUgX19pb3JlbWFwIF9faW9yZW1hcAorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKl9faW9yZW1hcChwaHlzX2FkZHJfdCBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIGlvcmVtYXAob2Zmc2V0LCBzaXplKTsKK30KKyNlbmRpZgogCiAjaWZuZGVmIGlvcmVtYXBfbm9jYWNoZQotI2RlZmluZSBpb3JlbWFwX25vY2FjaGUgaW9yZW1hcAorI2RlZmluZSBpb3JlbWFwX25vY2FjaGUgaW9yZW1hcF9ub2NhY2hlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHBoeXNfYWRkcl90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGlvcmVtYXAob2Zmc2V0LCBzaXplKTsKK30KICNlbmRpZgogCiAjaWZuZGVmIGlvcmVtYXBfd2MKLSNkZWZpbmUgaW9yZW1hcF93YyBpb3JlbWFwX25vY2FjaGUKKyNkZWZpbmUgaW9yZW1hcF93YyBpb3JlbWFwX3djCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcF93YyhwaHlzX2FkZHJfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKK30KICNlbmRpZgogCisjaWZuZGVmIGlvdW5tYXAKKyNkZWZpbmUgaW91bm1hcCBpb3VubWFwCiBzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiB9CisjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKICNpZmRlZiBDT05GSUdfSEFTX0lPUE9SVF9NQVAKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSU9NQVAKKyNpZm5kZWYgaW9wb3J0X21hcAorI2RlZmluZSBpb3BvcnRfbWFwIGlvcG9ydF9tYXAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKQogewogCXJldHVybiBQQ0lfSU9CQVNFICsgKHBvcnQgJiBJT19TUEFDRV9MSU1JVCk7CiB9CisjZW5kaWYKIAorI2lmbmRlZiBpb3BvcnRfdW5tYXAKKyNkZWZpbmUgaW9wb3J0X3VubWFwIGlvcG9ydF91bm1hcAogc3RhdGljIGlubGluZSB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKnApCiB7CiB9CisjZW5kaWYKICNlbHNlIC8qIENPTkZJR19HRU5FUklDX0lPTUFQICovCiBleHRlcm4gdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKTsKIGV4dGVybiB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKnApOwpAQCAtMzQ0LDM1ICs4MDgsNjggQEAKICNlbmRpZiAvKiBDT05GSUdfSEFTX0lPUE9SVF9NQVAgKi8KIAogI2lmbmRlZiB4bGF0ZV9kZXZfa21lbV9wdHIKLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyIHhsYXRlX2Rldl9rbWVtX3B0cgorc3RhdGljIGlubGluZSB2b2lkICp4bGF0ZV9kZXZfa21lbV9wdHIodm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gYWRkcjsKK30KICNlbmRpZgorCiAjaWZuZGVmIHhsYXRlX2Rldl9tZW1fcHRyCi0jZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIgeGxhdGVfZGV2X21lbV9wdHIKK3N0YXRpYyBpbmxpbmUgdm9pZCAqeGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgYWRkcikKK3sKKwlyZXR1cm4gX192YShhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIHVueGxhdGVfZGV2X21lbV9wdHIKKyNkZWZpbmUgdW54bGF0ZV9kZXZfbWVtX3B0ciB1bnhsYXRlX2Rldl9tZW1fcHRyCitzdGF0aWMgaW5saW5lIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBwaHlzLCB2b2lkICphZGRyKQoreworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVklSVF9UT19CVVMKICNpZm5kZWYgdmlydF90b19idXMKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2J1cyh2b2xhdGlsZSB2b2lkICphZGRyZXNzKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fYnVzKHZvaWQgKmFkZHJlc3MpCiB7Ci0JcmV0dXJuICgodW5zaWduZWQgbG9uZykgYWRkcmVzcyk7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWFkZHJlc3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqYnVzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXJldHVybiAodm9pZCAqKSBhZGRyZXNzOworCXJldHVybiAodm9pZCAqKWFkZHJlc3M7CiB9CiAjZW5kaWYKICNlbmRpZgogCiAjaWZuZGVmIG1lbXNldF9pbwotI2RlZmluZSBtZW1zZXRfaW8oYSwgYiwgYykJbWVtc2V0KF9faW9fdmlydChhKSwgKGIpLCAoYykpCisjZGVmaW5lIG1lbXNldF9pbyBtZW1zZXRfaW8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBpbnQgdmFsdWUsCisJCQkgICAgIHNpemVfdCBzaXplKQoreworCW1lbXNldChfX2lvX3ZpcnQoYWRkciksIHZhbHVlLCBzaXplKTsKK30KICNlbmRpZgogCiAjaWZuZGVmIG1lbWNweV9mcm9taW8KLSNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLCBiLCBjKQltZW1jcHkoKGEpLCBfX2lvX3ZpcnQoYiksIChjKSkKKyNkZWZpbmUgbWVtY3B5X2Zyb21pbyBtZW1jcHlfZnJvbWlvCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICpidWZmZXIsCisJCQkJIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKwkJCQkgc2l6ZV90IHNpemUpCit7CisJbWVtY3B5KGJ1ZmZlciwgX19pb192aXJ0KGFkZHIpLCBzaXplKTsKK30KICNlbmRpZgorCiAjaWZuZGVmIG1lbWNweV90b2lvCi0jZGVmaW5lIG1lbWNweV90b2lvKGEsIGIsIGMpCW1lbWNweShfX2lvX3ZpcnQoYSksIChiKSwgKGMpKQorI2RlZmluZSBtZW1jcHlfdG9pbyBtZW1jcHlfdG9pbworc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJICAgICAgIHNpemVfdCBzaXplKQoreworCW1lbWNweShfX2lvX3ZpcnQoYWRkciksIGJ1ZmZlciwgc2l6ZSk7Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1faG9va3MuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1faG9va3MuaAppbmRleCA2N2RlYTgxLi44NjZhYTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21tX2hvb2tzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tbV9ob29rcy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIERlZmluZSBnZW5lcmljIG5vLW9wIGhvb2tzIGZvciBhcmNoX2R1cF9tbWFwIGFuZCBhcmNoX2V4aXRfbW1hcCwgdG8KLSAqIGJlIGluY2x1ZGVkIGluIGFzbS1GT08vbW11X2NvbnRleHQuaCBmb3IgYW55IGFyY2ggRk9PIHdoaWNoIGRvZXNuJ3QKLSAqIG5lZWQgdG8gaG9vayB0aGVzZS4KKyAqIERlZmluZSBnZW5lcmljIG5vLW9wIGhvb2tzIGZvciBhcmNoX2R1cF9tbWFwLCBhcmNoX2V4aXRfbW1hcAorICogYW5kIGFyY2hfdW5tYXAgdG8gYmUgaW5jbHVkZWQgaW4gYXNtLUZPTy9tbXVfY29udGV4dC5oIGZvciBhbnkKKyAqIGFyY2ggRk9PIHdoaWNoIGRvZXNuJ3QgbmVlZCB0byBob29rIHRoZXNlLgogICovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19NTV9IT09LU19ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19NTV9IT09LU19ICkBAIC0xNSw0ICsxNSwxNSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2Jwcm1fbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworfQorCiAjZW5kaWYJLyogX0FTTV9HRU5FUklDX01NX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXNpLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21zaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzU4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21zaS5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX19BU01fR0VORVJJQ19NU0lfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX01TSV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZuZGVmIE5VTV9NU0lfQUxMT0NfU0NSQVRDSFBBRF9SRUdTCisjIGRlZmluZSBOVU1fTVNJX0FMTE9DX1NDUkFUQ0hQQURfUkVHUwkyCisjZW5kaWYKKworc3RydWN0IG1zaV9kZXNjOworCisvKioKKyAqIHN0cnVjdCBtc2lfYWxsb2NfaW5mbyAtIERlZmF1bHQgc3RydWN0dXJlIGZvciBNU0kgaW50ZXJydXB0IGFsbG9jYXRpb24uCisgKiBAZGVzYzoJUG9pbnRlciB0byBtc2kgZGVzY3JpcHRvcgorICogQGh3aXJxOglBc3NvY2lhdGVkIGh3IGludGVycnVwdCBudW1iZXIgaW4gdGhlIGRvbWFpbgorICogQHNjcmF0Y2hwYWQ6CVN0b3JhZ2UgZm9yIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHNjcmF0Y2ggZGF0YQorICoKKyAqIEFyY2hpdGVjdHVyZXMgY2FuIHByb3ZpZGUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIGJ5IG5vdCBpbmNsdWRpbmcKKyAqIGFzbS1nZW5lcmljL21zaS5oIGludG8gdGhlaXIgYXJjaCBzcGVjaWZpYyBoZWFkZXIgZmlsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbXNpX2FsbG9jX2luZm8geworCXN0cnVjdCBtc2lfZGVzYwkJCSpkZXNjOworCWlycV9od19udW1iZXJfdAkJCWh3aXJxOworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZwkJdWw7CisJCXZvaWQJCQkqcHRyOworCX0gc2NyYXRjaHBhZFtOVU1fTVNJX0FMTE9DX1NDUkFUQ0hQQURfUkVHU107Cit9IG1zaV9hbGxvY19pbmZvX3Q7CisKKyNkZWZpbmUgR0VORVJJQ19NU0lfRE9NQUlOX09QUwkJMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcHJlZW1wdC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wcmVlbXB0LmgKaW5kZXggMWNkM2Y1ZC4uZWI2ZjllNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wcmVlbXB0LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wcmVlbXB0LmgKQEAgLTIzLDkgKzIzLDYgQEAKIC8qCiAgKiBtdXN0IGJlIG1hY3JvcyB0byBhdm9pZCBoZWFkZXIgcmVjdXJzaW9uIGhlbGwKICAqLwotI2RlZmluZSB0YXNrX3ByZWVtcHRfY291bnQocCkgXAotCSh0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ICYgflBSRUVNUFRfTkVFRF9SRVNDSEVEKQotCiAjZGVmaW5lIGluaXRfdGFza19wcmVlbXB0X2NvdW50KHApIGRvIHsgXAogCXRhc2tfdGhyZWFkX2luZm8ocCktPnByZWVtcHRfY291bnQgPSBQUkVFTVBUX0RJU0FCTEVEOyBcCiB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWNjb21wLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY2NvbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmExZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWNjb21wLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWdlbmVyaWMvc2VjY29tcC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMaW1pdGVkCisgKiBBdXRob3I6IEFLQVNISSBUYWthaGlybyA8dGFrYWhpcm8uYWthc2hpQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfU0VDQ09NUF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19TRUNDT01QX0gKKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NUEFUKSAmJiAhZGVmaW5lZChfX05SX3NlY2NvbXBfcmVhZF8zMikKKyNkZWZpbmUgX19OUl9zZWNjb21wX3JlYWRfMzIJCV9fTlJfcmVhZAorI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGVfMzIJCV9fTlJfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIJCV9fTlJfZXhpdAorI2RlZmluZSBfX05SX3NlY2NvbXBfc2lncmV0dXJuXzMyCV9fTlJfcnRfc2lncmV0dXJuCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAmJiAhIGFscmVhZHkgZGVmaW5lZCAqLworCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkCQlfX05SX3JlYWQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3dyaXRlCQlfX05SX3dyaXRlCisjZGVmaW5lIF9fTlJfc2VjY29tcF9leGl0CQlfX05SX2V4aXQKKyNpZm5kZWYgX19OUl9zZWNjb21wX3NpZ3JldHVybgorI2RlZmluZSBfX05SX3NlY2NvbXBfc2lncmV0dXJuCQlfX05SX3J0X3NpZ3JldHVybgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfU0VDQ09NUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAppbmRleCA1NjcyZDdlLi4wODg0ODA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKQEAgLTk2LDEwICs5Niw5IEBACiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nCQlzdGFydDsKIAl1bnNpZ25lZCBsb25nCQllbmQ7Ci0JdW5zaWduZWQgaW50CQluZWVkX2ZsdXNoIDogMSwJLyogRGlkIGZyZWUgUFRFcyAqLwogCS8qIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIG9wZXJhdGlvbiB0byBjbGVhcgogCSAqIGEgZnVsbCBtbSBhbmQgY2FuIG1ha2Ugc29tZSBvcHRpbWl6YXRpb25zICovCi0JCQkJZnVsbG1tIDogMSwKKwl1bnNpZ25lZCBpbnQJCWZ1bGxtbSA6IDEsCiAJLyogd2UgaGF2ZSBwZXJmb3JtZWQgYW4gb3BlcmF0aW9uIHdoaWNoCiAJICogcmVxdWlyZXMgYSBjb21wbGV0ZSBmbHVzaCBvZiB0aGUgdGxiICovCiAJCQkJbmVlZF9mbHVzaF9hbGwgOiAxOwpAQCAtMTI4LDE2ICsxMjcsNTQgQEAKIAkJdGxiX2ZsdXNoX21tdSh0bGIpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfYWRqdXN0X3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXRsYi0+c3RhcnQgPSBtaW4odGxiLT5zdGFydCwgYWRkcmVzcyk7CisJdGxiLT5lbmQgPSBtYXgodGxiLT5lbmQsIGFkZHJlc3MgKyBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVzZXRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKwl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOworCXRsYi0+ZW5kID0gMDsKK30KKworLyoKKyAqIEluIHRoZSBjYXNlIG9mIHRsYiB2bWEgaGFuZGxpbmcsIHdlIGNhbiBvcHRpbWlzZSB0aGVzZSBhd2F5IGluIHRoZQorICogY2FzZSB3aGVyZSB3ZSdyZSBkb2luZyBhIGZ1bGwgTU0gZmx1c2guICBXaGVuIHdlJ3JlIGRvaW5nIGEgbXVubWFwLAorICogdGhlIHZtYXMgYXJlIGFkanVzdGVkIHRvIG9ubHkgY292ZXIgdGhlIHJlZ2lvbiB0byBiZSB0b3JuIGRvd24uCisgKi8KKyNpZm5kZWYgdGxiX3N0YXJ0X3ZtYQorI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBfX3RsYl9lbmRfdm1hKHRsYiwgdm1hKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoIXRsYi0+ZnVsbG1tICYmIHRsYi0+ZW5kKSB7CQkJXAorCQkJdGxiX2ZsdXNoKHRsYik7CQkJCVwKKwkJCV9fdGxiX3Jlc2V0X3JhbmdlKHRsYik7CQkJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNpZm5kZWYgdGxiX2VuZF92bWEKKyNkZWZpbmUgdGxiX2VuZF92bWEJX190bGJfZW5kX3ZtYQorI2VuZGlmCisKKyNpZm5kZWYgX190bGJfcmVtb3ZlX3RsYl9lbnRyeQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKIC8qKgogICogdGxiX3JlbW92ZV90bGJfZW50cnkgLSByZW1lbWJlciBhIHB0ZSB1bm1hcHBpbmcgZm9yIGxhdGVyIHRsYiBpbnZhbGlkYXRpb24uCiAgKgotICogUmVjb3JkIHRoZSBmYWN0IHRoYXQgcHRlJ3Mgd2VyZSByZWFsbHkgdW1hcHBlZCBpbiAtPm5lZWRfZmx1c2gsIHNvIHdlIGNhbgotICogbGF0ZXIgb3B0aW1pc2UgYXdheSB0aGUgdGxiIGludmFsaWRhdGUuICAgVGhpcyBoZWxwcyB3aGVuIHVzZXJzcGFjZSBpcwotICogdW5tYXBwaW5nIGFscmVhZHktdW5tYXBwZWQgcGFnZXMsIHdoaWNoIGhhcHBlbnMgcXVpdGUgYSBsb3QuCisgKiBSZWNvcmQgdGhlIGZhY3QgdGhhdCBwdGUncyB3ZXJlIHJlYWxseSB1bm1hcHBlZCBieSB1cGRhdGluZyB0aGUgcmFuZ2UsCisgKiBzbyB3ZSBjYW4gbGF0ZXIgb3B0aW1pc2UgYXdheSB0aGUgdGxiIGludmFsaWRhdGUuICAgVGhpcyBoZWxwcyB3aGVuCisgKiB1c2Vyc3BhY2UgaXMgdW5tYXBwaW5nIGFscmVhZHktdW5tYXBwZWQgcGFnZXMsIHdoaWNoIGhhcHBlbnMgcXVpdGUgYSBsb3QuCiAgKi8KICNkZWZpbmUgdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGVwLCBhZGRyZXNzKQkJXAogCWRvIHsJCQkJCQkJXAotCQl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJCV9fdGxiX2FkanVzdF9yYW5nZSh0bGIsIGFkZHJlc3MpOwkJXAogCQlfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcyk7CVwKIAl9IHdoaWxlICgwKQogCkBAIC0xNTEsMjcgKzE4OCwyNyBAQAogCiAjZGVmaW5lIHRsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeSh0bGIsIHBtZHAsIGFkZHJlc3MpCQlcCiAJZG8gewkJCQkJCQlcCi0JCXRsYi0+bmVlZF9mbHVzaCA9IDE7CQkJCVwKKwkJX190bGJfYWRqdXN0X3JhbmdlKHRsYiwgYWRkcmVzcyk7CQlcCiAJCV9fdGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHRsYiwgcG1kcCwgYWRkcmVzcyk7CVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIHB0ZV9mcmVlX3RsYih0bGIsIHB0ZXAsIGFkZHJlc3MpCQkJXAogCWRvIHsJCQkJCQkJXAotCQl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJCV9fdGxiX2FkanVzdF9yYW5nZSh0bGIsIGFkZHJlc3MpOwkJXAogCQlfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZXAsIGFkZHJlc3MpOwkJXAogCX0gd2hpbGUgKDApCiAKICNpZm5kZWYgX19BUkNIX0hBU180TEVWRUxfSEFDSwogI2RlZmluZSBwdWRfZnJlZV90bGIodGxiLCBwdWRwLCBhZGRyZXNzKQkJCVwKIAlkbyB7CQkJCQkJCVwKLQkJdGxiLT5uZWVkX2ZsdXNoID0gMTsJCQkJXAorCQlfX3RsYl9hZGp1c3RfcmFuZ2UodGxiLCBhZGRyZXNzKTsJCVwKIAkJX19wdWRfZnJlZV90bGIodGxiLCBwdWRwLCBhZGRyZXNzKTsJCVwKIAl9IHdoaWxlICgwKQogI2VuZGlmCiAKICNkZWZpbmUgcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCwgYWRkcmVzcykJCQlcCiAJZG8gewkJCQkJCQlcCi0JCXRsYi0+bmVlZF9mbHVzaCA9IDE7CQkJCVwKKwkJX190bGJfYWRqdXN0X3JhbmdlKHRsYiwgYWRkcmVzcyk7CQlcCiAJCV9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCwgYWRkcmVzcyk7CQlcCiAJfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9hcm0vdXg1MDBfcG1fZG9tYWlucy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9hcm0vdXg1MDBfcG1fZG9tYWlucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OGE2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2FybS91eDUwMF9wbV9kb21haW5zLmgKQEAgLTAsMCArMSwxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTHRkLgorICoKKyAqIEF1dGhvcjogVWxmIEhhbnNzb24gPHVsZi5oYW5zc29uQGxpbmFyby5vcmc+CisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqLworI2lmbmRlZiBfRFRfQklORElOR1NfQVJNX1VYNTAwX1BNX0RPTUFJTlNfSAorI2RlZmluZSBfRFRfQklORElOR1NfQVJNX1VYNTAwX1BNX0RPTUFJTlNfSAorCisjZGVmaW5lIERPTUFJTl9WQVBFCQkwCisKKy8qIE51bWJlciBvZiBQTSBkb21haW5zLiAqLworI2RlZmluZSBOUl9ET01BSU5TCQkoRE9NQUlOX1ZBUEUgKyAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svaW14NS1jbG9jay5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9pbXg1LWNsb2NrLmgKaW5kZXggNWYyNjY3ZWMuLmY0Yjc0NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svaW14NS1jbG9jay5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svaW14NS1jbG9jay5oCkBAIC0xOTgsNiArMTk4LDkgQEAKICNkZWZpbmUgSU1YNV9DTEtfT0NSQU0JCQkxODYKICNkZWZpbmUgSU1YNV9DTEtfU0FIQVJBX0lQR19HQVRFCTE4NwogI2RlZmluZSBJTVg1X0NMS19TQVRBX1JFRgkJMTg4Ci0jZGVmaW5lIElNWDVfQ0xLX0VORAkJCTE4OQorI2RlZmluZSBJTVg1X0NMS19TVEVQX1NFTAkJMTg5CisjZGVmaW5lIElNWDVfQ0xLX0NQVV9QT0RGX1NFTAkJMTkwCisjZGVmaW5lIElNWDVfQ0xLX0FSTQkJCTE5MQorI2RlZmluZSBJTVg1X0NMS19FTkQJCQkxOTIKIAogI2VuZGlmIC8qIF9fRFRfQklORElOR1NfQ0xPQ0tfSU1YNV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3Fjb20sbW1jYy1hcHE4MDg0LmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3Fjb20sbW1jYy1hcHE4MDg0LmgKaW5kZXggYTkyOWY4Ni4uZDcyYjViMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9xY29tLG1tY2MtYXBxODA4NC5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcWNvbSxtbWNjLWFwcTgwODQuaApAQCAtNjAsNyArNjAsNyBAQAogI2RlZmluZSBFU0MxX0NMS19TUkMJCQk0MwogI2RlZmluZSBIRE1JX0NMS19TUkMJCQk0NAogI2RlZmluZSBWU1lOQ19DTEtfU1JDCQkJNDUKLSNkZWZpbmUgUkJDUFJfQ0xLX1NSQwkJCTQ2CisjZGVmaW5lIE1NU1NfUkJDUFJfQ0xLX1NSQwkJNDYKICNkZWZpbmUgUkJCTVRJTUVSX0NMS19TUkMJCTQ3CiAjZGVmaW5lIE1BUExFX0NMS19TUkMJCQk0OAogI2RlZmluZSBWRFBfQ0xLX1NSQwkJCTQ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3NDAtY2xvY2suaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc0MC1jbG9jay5oCmluZGV4IGY2YjRiMGYuLjQ3NjEzNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc0MC1jbG9jay5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc0MC1jbG9jay5oCkBAIC00MCw2ICs0MCw3IEBACiAKIC8qIE1TVFAyICovCiAjZGVmaW5lIFI4QTc3NDBfQ0xLX1NDSUZBNgkzMAorI2RlZmluZSBSOEE3NzQwX0NMS19JTlRDQQkyOQogI2RlZmluZSBSOEE3NzQwX0NMS19TQ0lGQTcJMjIKICNkZWZpbmUgUjhBNzc0MF9DTEtfRE1BQzEJMTgKICNkZWZpbmUgUjhBNzc0MF9DTEtfRE1BQzIJMTcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5MC1jbG9jay5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkwLWNsb2NrLmgKaW5kZXggOGVhN2FiMC4uYzI3YjNiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkwLWNsb2NrLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkwLWNsb2NrLmgKQEAgLTI2LDggKzI2LDE4IEBACiAjZGVmaW5lIFI4QTc3OTBfQ0xLX01TSU9GMAkJMAogCiAvKiBNU1RQMSAqLwotI2RlZmluZSBSOEE3NzkwX0NMS19KUFUJCTYKKyNkZWZpbmUgUjhBNzc5MF9DTEtfVkNQMQkJMAorI2RlZmluZSBSOEE3NzkwX0NMS19WQ1AwCQkxCisjZGVmaW5lIFI4QTc3OTBfQ0xLX1ZQQzEJCTIKKyNkZWZpbmUgUjhBNzc5MF9DTEtfVlBDMAkJMworI2RlZmluZSBSOEE3NzkwX0NMS19KUFUJCQk2CisjZGVmaW5lIFI4QTc3OTBfQ0xLX1NTUDEJCTkKICNkZWZpbmUgUjhBNzc5MF9DTEtfVE1VMQkJMTEKKyNkZWZpbmUgUjhBNzc5MF9DTEtfM0RHCQkJMTIKKyNkZWZpbmUgUjhBNzc5MF9DTEtfMkRETUFDCQkxNQorI2RlZmluZSBSOEE3NzkwX0NMS19GRFAxXzIJCTE3CisjZGVmaW5lIFI4QTc3OTBfQ0xLX0ZEUDFfMQkJMTgKKyNkZWZpbmUgUjhBNzc5MF9DTEtfRkRQMV8wCQkxOQogI2RlZmluZSBSOEE3NzkwX0NMS19UTVUzCQkyMQogI2RlZmluZSBSOEE3NzkwX0NMS19UTVUyCQkyMgogI2RlZmluZSBSOEE3NzkwX0NMS19DTVQwCQkyNApAQCAtNjgsNiArNzgsOCBAQAogI2RlZmluZSBSOEE3NzkwX0NMS19VU0JETUFDMQkJMzEKIAogLyogTVNUUDUgKi8KKyNkZWZpbmUgUjhBNzc5MF9DTEtfQVVESU9fRE1BQzEJCTEKKyNkZWZpbmUgUjhBNzc5MF9DTEtfQVVESU9fRE1BQzAJCTIKICNkZWZpbmUgUjhBNzc5MF9DTEtfVEhFUk1BTAkJMjIKICNkZWZpbmUgUjhBNzc5MF9DTEtfUFdNCQkJMjMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkxLWNsb2NrLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTEtY2xvY2suaAppbmRleCA1OGMzZjQ5Li4zZWEyYmJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTEtY2xvY2suaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTEtY2xvY2suaApAQCAtMjUsOCArMjUsMTUgQEAKICNkZWZpbmUgUjhBNzc5MV9DTEtfTVNJT0YwCQkwCiAKIC8qIE1TVFAxICovCi0jZGVmaW5lIFI4QTc3OTFfQ0xLX0pQVQkJNgorI2RlZmluZSBSOEE3NzkxX0NMS19WQ1AwCQkxCisjZGVmaW5lIFI4QTc3OTFfQ0xLX1ZQQzAJCTMKKyNkZWZpbmUgUjhBNzc5MV9DTEtfSlBVCQkJNgorI2RlZmluZSBSOEE3NzkxX0NMS19TU1AxCQk5CiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1RNVTEJCTExCisjZGVmaW5lIFI4QTc3OTFfQ0xLXzNERwkJCTEyCisjZGVmaW5lIFI4QTc3OTFfQ0xLXzJERE1BQwkJMTUKKyNkZWZpbmUgUjhBNzc5MV9DTEtfRkRQMV8xCQkxOAorI2RlZmluZSBSOEE3NzkxX0NMS19GRFAxXzAJCTE5CiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1RNVTMJCTIxCiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1RNVTIJCTIyCiAjZGVmaW5lIFI4QTc3OTFfQ0xLX0NNVDAJCTI0CkBAIC02Miw2ICs2OSw4IEBACiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1VTQkRNQUMxCQkzMQogCiAvKiBNU1RQNSAqLworI2RlZmluZSBSOEE3NzkxX0NMS19BVURJT19ETUFDMQkJMQorI2RlZmluZSBSOEE3NzkxX0NMS19BVURJT19ETUFDMAkJMgogI2RlZmluZSBSOEE3NzkxX0NMS19USEVSTUFMCQkyMgogI2RlZmluZSBSOEE3NzkxX0NMS19QV00JCQkyMwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTQtY2xvY2suaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5NC1jbG9jay5oCmluZGV4IDlhYzEwNDMuLmFhOWMyODZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTQtY2xvY2suaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTQtY2xvY2suaApAQCAtMjYsMTEgKzI2LDE4IEBACiAjZGVmaW5lIFI4QTc3OTRfQ0xLX01TSU9GMAkJMAogCiAvKiBNU1RQMSAqLworI2RlZmluZSBSOEE3Nzk0X0NMS19WQ1AwCQkxCisjZGVmaW5lIFI4QTc3OTRfQ0xLX1ZQQzAJCTMKICNkZWZpbmUgUjhBNzc5NF9DTEtfVE1VMQkJMTEKKyNkZWZpbmUgUjhBNzc5NF9DTEtfM0RHCQkJMTIKKyNkZWZpbmUgUjhBNzc5NF9DTEtfMkRETUFDCQkxNQorI2RlZmluZSBSOEE3Nzk0X0NMS19GRFAxXzAJCTE5CiAjZGVmaW5lIFI4QTc3OTRfQ0xLX1RNVTMJCTIxCiAjZGVmaW5lIFI4QTc3OTRfQ0xLX1RNVTIJCTIyCiAjZGVmaW5lIFI4QTc3OTRfQ0xLX0NNVDAJCTI0CiAjZGVmaW5lIFI4QTc3OTRfQ0xLX1RNVTAJCTI1CisjZGVmaW5lIFI4QTc3OTRfQ0xLX1ZTUDFfRFUwCQkyOAorI2RlZmluZSBSOEE3Nzk0X0NMS19WU1AxX1MJCTMxCiAKIC8qIE1TVFAyICovCiAjZGVmaW5lIFI4QTc3OTRfQ0xLX1NDSUZBMgkJMgpAQCAtNjEsNiArNjgsOCBAQAogI2RlZmluZSBSOEE3Nzk0X0NMS19TQ0lGMAkJMjEKIAogLyogTVNUUDggKi8KKyNkZWZpbmUgUjhBNzc5NF9DTEtfVklOMQkJMTAKKyNkZWZpbmUgUjhBNzc5NF9DTEtfVklOMAkJMTEKICNkZWZpbmUgUjhBNzc5NF9DTEtfRVRIRVIJCTEzCiAKIC8qIE1TVFA5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MDctY2xrcy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDA3LWNsa3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYyYjcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDA3LWNsa3MuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogVGhpcyBoZWFkZXIgcHJvdmlkZXMgY29uc3RhbnRzIGNsayBpbmRleCBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqIFNUaUg0MDcgU29DLgorICovCisjaWZuZGVmIF9EVF9CSU5ESU5HU19DTEtfU1RJSDQwNworI2RlZmluZSBfRFRfQklORElOR1NfQ0xLX1NUSUg0MDcKKworLyogQ0xPQ0tHRU4gQzAgKi8KKyNkZWZpbmUgQ0xLX0lDTl9HUFUJCTAKKyNkZWZpbmUgQ0xLX0ZETUEJCTEKKyNkZWZpbmUgQ0xLX05BTkQJCTIKKyNkZWZpbmUgQ0xLX0hWQQkJCTMKKyNkZWZpbmUgQ0xLX1BST0NfU1RGRQkJNAorI2RlZmluZSBDTEtfUFJPQ19UUAkJNQorI2RlZmluZSBDTEtfUlhfSUNOX0RNVQkJNgorI2RlZmluZSBDTEtfUlhfSUNOX0RJU1BfMAk2CisjZGVmaW5lIENMS19SWF9JQ05fRElTUF8xCTYKKyNkZWZpbmUgQ0xLX1JYX0lDTl9IVkEJCTcKKyNkZWZpbmUgQ0xLX1JYX0lDTl9UUwkJNworI2RlZmluZSBDTEtfSUNOX0NQVQkJOAorI2RlZmluZSBDTEtfVFhfSUNOX0RNVQkJOQorI2RlZmluZSBDTEtfVFhfSUNOX0hWQQkJOQorI2RlZmluZSBDTEtfVFhfSUNOX1RTCQk5CisjZGVmaW5lIENMS19JQ05fQ09NUE8JCTkKKyNkZWZpbmUgQ0xLX01NQ18wCQkxMAorI2RlZmluZSBDTEtfTU1DXzEJCTExCisjZGVmaW5lIENMS19KUEVHREVDCQkxMgorI2RlZmluZSBDTEtfSUNOX1JFRwkJMTMKKyNkZWZpbmUgQ0xLX1RSQUNFX0E5CQkxMworI2RlZmluZSBDTEtfUFRJX1NUTQkJMTMKKyNkZWZpbmUgQ0xLX0VYVDJGX0E5CQkxMworI2RlZmluZSBDTEtfSUNfQkRJU1BfMAkJMTQKKyNkZWZpbmUgQ0xLX0lDX0JESVNQXzEJCTE1CisjZGVmaW5lIENMS19QUF9ETVUJCTE2CisjZGVmaW5lIENMS19WSURfRE1VCQkxNworI2RlZmluZSBDTEtfRFNTX0xQQwkJMTgKKyNkZWZpbmUgQ0xLX1NUMjMxX0FVRF8wCQkxOQorI2RlZmluZSBDTEtfU1QyMzFfR1BfMAkJMTkKKyNkZWZpbmUgQ0xLX1NUMjMxX0dQXzEJCTIwCisjZGVmaW5lIENMS19TVDIzMV9ETVUJCTIxCisjZGVmaW5lIENMS19JQ05fTE1JCQkyMgorI2RlZmluZSBDTEtfVFhfSUNOX0RJU1BfMAkyMworI2RlZmluZSBDTEtfVFhfSUNOX0RJU1BfMQkyMworI2RlZmluZSBDTEtfSUNOX1NCQwkJMjQKKyNkZWZpbmUgQ0xLX1NURkVfRlJDMgkJMjUKKyNkZWZpbmUgQ0xLX0VUSF9QSFkJCTI2CisjZGVmaW5lIENMS19FVEhfUkVGX1BIWUNMSwkyNworI2RlZmluZSBDTEtfRkxBU0hfUFJPTUlQCTI4CisjZGVmaW5lIENMS19NQUlOX0RJU1AJCTI5CisjZGVmaW5lIENMS19BVVhfRElTUAkJMzAKKyNkZWZpbmUgQ0xLX0NPTVBPX0RWUAkJMzEKKworLyogQ0xPQ0tHRU4gRDAgKi8KKyNkZWZpbmUgQ0xLX1BDTV8wCQkwCisjZGVmaW5lIENMS19QQ01fMQkJMQorI2RlZmluZSBDTEtfUENNXzIJCTIKKyNkZWZpbmUgQ0xLX1NQRElGRgkJMworCisvKiBDTE9DS0dFTiBEMiAqLworI2RlZmluZSBDTEtfUElYX01BSU5fRElTUAkwCisjZGVmaW5lIENMS19QSVhfUElQCQkxCisjZGVmaW5lIENMS19QSVhfR0RQMQkJMgorI2RlZmluZSBDTEtfUElYX0dEUDIJCTMKKyNkZWZpbmUgQ0xLX1BJWF9HRFAzCQk0CisjZGVmaW5lIENMS19QSVhfR0RQNAkJNQorI2RlZmluZSBDTEtfUElYX0FVWF9ESVNQCTYKKyNkZWZpbmUgQ0xLX0RFTkMJCTcKKyNkZWZpbmUgQ0xLX1BJWF9IRERBQwkJOAorI2RlZmluZSBDTEtfSEREQUMJCTkKKyNkZWZpbmUgQ0xLX1NEREFDCQkxMAorI2RlZmluZSBDTEtfUElYX0RWTwkJMTEKKyNkZWZpbmUgQ0xLX0RWTwkJCTEyCisjZGVmaW5lIENMS19QSVhfSERNSQkJMTMKKyNkZWZpbmUgQ0xLX1RNRFNfSERNSQkJMTQKKyNkZWZpbmUgQ0xLX1JFRl9IRE1JUEhZCQkxNQorCisvKiBDTE9DS0dFTiBEMyAqLworI2RlZmluZSBDTEtfU1RGRV9GUkMxCQkwCisjZGVmaW5lIENMS19UU09VVF8wCQkxCisjZGVmaW5lIENMS19UU09VVF8xCQkyCisjZGVmaW5lIENMS19NQ0hJCQkzCisjZGVmaW5lIENMS19WU0VOU19DT01QTwkJNAorI2RlZmluZSBDTEtfRlJDMV9SRU1PVEUJCTUKKyNkZWZpbmUgQ0xLX0xQQ18wCQk2CisjZGVmaW5lIENMS19MUENfMQkJNworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MTAtY2xrcy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDEwLWNsa3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk3YTRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDEwLWNsa3MuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogVGhpcyBoZWFkZXIgcHJvdmlkZXMgY29uc3RhbnRzIGNsayBpbmRleCBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqIFNUaUg0MTAgU29DLgorICovCisjaWZuZGVmIF9EVF9CSU5ESU5HU19DTEtfU1RJSDQxMAorI2RlZmluZSBfRFRfQklORElOR1NfQ0xLX1NUSUg0MTAKKworI2luY2x1ZGUgInN0aWg0MDctY2xrcy5oIgorCisvKiBTVGlINDEwIGludHJvZHVjZXMgbmV3IGNsb2NrIG91dHB1dHMgY29tcGFyZWQgdG8gU1RpSDQwNyAqLworCisvKiBDTE9DS0dFTiBDMCAqLworI2RlZmluZSBDTEtfVFhfSUNOX0hBREVTCTMyCisjZGVmaW5lIENMS19SWF9JQ05fSEFERVMJMzMKKyNkZWZpbmUgQ0xLX0lDTl9SRUdfMTYJCTM0CisjZGVmaW5lIENMS19QUF9IQURFUwkJMzUKKyNkZWZpbmUgQ0xLX0NMVVNUX0hBREVTCQkzNgorI2RlZmluZSBDTEtfSFdQRV9IQURFUwkJMzcKKyNkZWZpbmUgQ0xLX0ZDX0hBREVTCQkzOAorCisvKiBDTE9DS0dFTiBEMCAqLworI2RlZmluZSBDTEtfUENNUjEwX01BU1RFUgk0CisjZGVmaW5lIENMS19VU0IyX1BIWQkJNQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmExMTQtY2FyLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMTE0LWNhci5oCmluZGV4IGZjMTI2MjEuLjUzNGMwM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmExMTQtY2FyLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTExNC1jYXIuaApAQCAtNDksNyArNDksNyBAQAogI2RlZmluZSBURUdSQTExNF9DTEtfSTJTMCAzMAogLyogMzEgKi8KIAotLyogMzIgKi8KKyNkZWZpbmUgVEVHUkExMTRfQ0xLX01DIDMyCiAvKiAzMyAqLwogI2RlZmluZSBURUdSQTExNF9DTEtfQVBCRE1BIDM0CiAvKiAzNSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTEyNC1jYXIuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmExMjQtY2FyLmgKaW5kZXggNmJhYzYzNy4uYWY5YmM5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTEyNC1jYXIuaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMTI0LWNhci5oCkBAIC00OCw3ICs0OCw3IEBACiAjZGVmaW5lIFRFR1JBMTI0X0NMS19JMlMwIDMwCiAvKiAzMSAqLwogCi0vKiAzMiAqLworI2RlZmluZSBURUdSQTEyNF9DTEtfTUMgMzIKIC8qIDMzICovCiAjZGVmaW5lIFRFR1JBMTI0X0NMS19BUEJETUEgMzQKIC8qIDM1ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMjAtY2FyLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMjAtY2FyLmgKaW5kZXggOTQwNjIwNy4uMDQ1MDBiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTIwLWNhci5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmEyMC1jYXIuaApAQCAtNDksNyArNDksNyBAQAogLyogMzAgKi8KICNkZWZpbmUgVEVHUkEyMF9DTEtfQ0FDSEUyIDMxCiAKLSNkZWZpbmUgVEVHUkEyMF9DTEtfTUVNIDMyCisjZGVmaW5lIFRFR1JBMjBfQ0xLX01DIDMyCiAjZGVmaW5lIFRFR1JBMjBfQ0xLX0FIQkRNQSAzMwogI2RlZmluZSBURUdSQTIwX0NMS19BUEJETUEgMzQKIC8qIDM1ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLmgKaW5kZXggZDZiNTZiMi4uODAxYzBhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay92ZjYxMC1jbG9jay5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdmY2MTAtY2xvY2suaApAQCAtMjEsMjQgKzIxLDI0IEBACiAjZGVmaW5lIFZGNjEwX0NMS19GQVNLX0NMS19TRUwJCTgKICNkZWZpbmUgVkY2MTBfQ0xLX0FVRElPX0VYVAkJOQogI2RlZmluZSBWRjYxMF9DTEtfRU5FVF9FWFQJCTEwCi0jZGVmaW5lIFZGNjEwX0NMS19QTEwxX01BSU4JCTExCisjZGVmaW5lIFZGNjEwX0NMS19QTEwxX1NZUwkJMTEKICNkZWZpbmUgVkY2MTBfQ0xLX1BMTDFfUEZEMQkJMTIKICNkZWZpbmUgVkY2MTBfQ0xLX1BMTDFfUEZEMgkJMTMKICNkZWZpbmUgVkY2MTBfQ0xLX1BMTDFfUEZEMwkJMTQKICNkZWZpbmUgVkY2MTBfQ0xLX1BMTDFfUEZENAkJMTUKLSNkZWZpbmUgVkY2MTBfQ0xLX1BMTDJfTUFJTgkJMTYKKyNkZWZpbmUgVkY2MTBfQ0xLX1BMTDJfQlVTCQkxNgogI2RlZmluZSBWRjYxMF9DTEtfUExMMl9QRkQxCQkxNwogI2RlZmluZSBWRjYxMF9DTEtfUExMMl9QRkQyCQkxOAogI2RlZmluZSBWRjYxMF9DTEtfUExMMl9QRkQzCQkxOQogI2RlZmluZSBWRjYxMF9DTEtfUExMMl9QRkQ0CQkyMAotI2RlZmluZSBWRjYxMF9DTEtfUExMM19NQUlOCQkyMQorI2RlZmluZSBWRjYxMF9DTEtfUExMM19VU0JfT1RHCQkyMQogI2RlZmluZSBWRjYxMF9DTEtfUExMM19QRkQxCQkyMgogI2RlZmluZSBWRjYxMF9DTEtfUExMM19QRkQyCQkyMwogI2RlZmluZSBWRjYxMF9DTEtfUExMM19QRkQzCQkyNAogI2RlZmluZSBWRjYxMF9DTEtfUExMM19QRkQ0CQkyNQotI2RlZmluZSBWRjYxMF9DTEtfUExMNF9NQUlOCQkyNgotI2RlZmluZSBWRjYxMF9DTEtfUExMNV9NQUlOCQkyNwotI2RlZmluZSBWRjYxMF9DTEtfUExMNl9NQUlOCQkyOAorI2RlZmluZSBWRjYxMF9DTEtfUExMNF9BVURJTwkJMjYKKyNkZWZpbmUgVkY2MTBfQ0xLX1BMTDVfRU5FVAkJMjcKKyNkZWZpbmUgVkY2MTBfQ0xLX1BMTDZfVklERU8JCTI4CiAjZGVmaW5lIFZGNjEwX0NMS19QTEwzX01BSU5fRElWCQkyOQogI2RlZmluZSBWRjYxMF9DTEtfUExMNF9NQUlOX0RJVgkJMzAKICNkZWZpbmUgVkY2MTBfQ0xLX1BMTDZfTUFJTl9ESVYJCTMxCkBAIC0xNjYsOSArMTY2LDMyIEBACiAjZGVmaW5lIFZGNjEwX0NMS19ETUFNVVgzCQkxNTMKICNkZWZpbmUgVkY2MTBfQ0xLX0ZMRVhDQU4wX0VOCQkxNTQKICNkZWZpbmUgVkY2MTBfQ0xLX0ZMRVhDQU4xX0VOCQkxNTUKLSNkZWZpbmUgVkY2MTBfQ0xLX1BMTDdfTUFJTgkJMTU2CisjZGVmaW5lIFZGNjEwX0NMS19QTEw3X1VTQl9IT1NUCQkxNTYKICNkZWZpbmUgVkY2MTBfQ0xLX1VTQlBIWTAJCTE1NwogI2RlZmluZSBWRjYxMF9DTEtfVVNCUEhZMQkJMTU4Ci0jZGVmaW5lIFZGNjEwX0NMS19FTkQJCQkxNTkKKyNkZWZpbmUgVkY2MTBfQ0xLX0xWRFMxX0lOCQkxNTkKKyNkZWZpbmUgVkY2MTBfQ0xLX0FOQUNMSzEJCTE2MAorI2RlZmluZSBWRjYxMF9DTEtfUExMMV9CWVBBU1NfU1JDCTE2MQorI2RlZmluZSBWRjYxMF9DTEtfUExMMl9CWVBBU1NfU1JDCTE2MgorI2RlZmluZSBWRjYxMF9DTEtfUExMM19CWVBBU1NfU1JDCTE2MworI2RlZmluZSBWRjYxMF9DTEtfUExMNF9CWVBBU1NfU1JDCTE2NAorI2RlZmluZSBWRjYxMF9DTEtfUExMNV9CWVBBU1NfU1JDCTE2NQorI2RlZmluZSBWRjYxMF9DTEtfUExMNl9CWVBBU1NfU1JDCTE2NgorI2RlZmluZSBWRjYxMF9DTEtfUExMN19CWVBBU1NfU1JDCTE2NworI2RlZmluZSBWRjYxMF9DTEtfUExMMQkJCTE2OAorI2RlZmluZSBWRjYxMF9DTEtfUExMMgkJCTE2OQorI2RlZmluZSBWRjYxMF9DTEtfUExMMwkJCTE3MAorI2RlZmluZSBWRjYxMF9DTEtfUExMNAkJCTE3MQorI2RlZmluZSBWRjYxMF9DTEtfUExMNQkJCTE3MgorI2RlZmluZSBWRjYxMF9DTEtfUExMNgkJCTE3MworI2RlZmluZSBWRjYxMF9DTEtfUExMNwkJCTE3NAorI2RlZmluZSBWRjYxMF9QTEwxX0JZUEFTUwkJMTc1CisjZGVmaW5lIFZGNjEwX1BMTDJfQllQQVNTCQkxNzYKKyNkZWZpbmUgVkY2MTBfUExMM19CWVBBU1MJCTE3NworI2RlZmluZSBWRjYxMF9QTEw0X0JZUEFTUwkJMTc4CisjZGVmaW5lIFZGNjEwX1BMTDVfQllQQVNTCQkxNzkKKyNkZWZpbmUgVkY2MTBfUExMNl9CWVBBU1MJCTE4MAorI2RlZmluZSBWRjYxMF9QTEw3X0JZUEFTUwkJMTgxCisjZGVmaW5lIFZGNjEwX0NMS19FTkQJCQkxODIKIAogI2VuZGlmIC8qIF9fRFRfQklORElOR1NfQ0xPQ0tfVkY2MTBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMTQtbWMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbWVtb3J5L3RlZ3JhMTE0LW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0ODk4NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbWVtb3J5L3RlZ3JhMTE0LW1jLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkExMTRfTUNfSAorI2RlZmluZSBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkExMTRfTUNfSAorCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfUFRDCTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9EQwkxCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfRENCCTIKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9FUFAJMworI2RlZmluZSBURUdSQV9TV0dST1VQX0cyCTQKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9BVlBDCTUKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9OVgk2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSERBCTcKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9IQwk4CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVNFTkMJOQorI2RlZmluZSBURUdSQV9TV0dST1VQX1BQQ1MJMTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9WREUJMTEKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9NUENPUkVMUAkxMgorI2RlZmluZSBURUdSQV9TV0dST1VQX01QQ09SRQkxMworI2RlZmluZSBURUdSQV9TV0dST1VQX1ZJCTE0CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSVNQCTE1CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfWFVTQl9IT1NUCTE2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfWFVTQl9ERVYJMTcKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9FTVVDSUYJMTgKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9UU0VDCTE5CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMjQtbWMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbWVtb3J5L3RlZ3JhMTI0LW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4ZWU3OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbWVtb3J5L3RlZ3JhMTI0LW1jLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkExMjRfTUNfSAorI2RlZmluZSBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkExMjRfTUNfSAorCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfUFRDCTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9EQwkxCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfRENCCTIKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9BRkkJMworI2RlZmluZSBURUdSQV9TV0dST1VQX0FWUEMJNAorI2RlZmluZSBURUdSQV9TV0dST1VQX0hEQQk1CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSEMJNgorI2RlZmluZSBURUdSQV9TV0dST1VQX01TRU5DCTcKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9QUENTCTgKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9TQVRBCTkKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9WREUJMTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9NUENPUkVMUAkxMQorI2RlZmluZSBURUdSQV9TV0dST1VQX01QQ09SRQkxMgorI2RlZmluZSBURUdSQV9TV0dST1VQX0lTUDIJMTMKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9YVVNCX0hPU1QJMTQKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9YVVNCX0RFVgkxNQorI2RlZmluZSBURUdSQV9TV0dST1VQX0lTUDJCCTE2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfVFNFQwkxNworI2RlZmluZSBURUdSQV9TV0dST1VQX0E5QVZQCTE4CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfR1BVCTE5CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfU0RNTUMxQQkyMAorI2RlZmluZSBURUdSQV9TV0dST1VQX1NETU1DMkEJMjEKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9TRE1NQzNBCTIyCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfU0RNTUM0QQkyMworI2RlZmluZSBURUdSQV9TV0dST1VQX1ZJQwkyNAorI2RlZmluZSBURUdSQV9TV0dST1VQX1ZJCTI1CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmEzMC1tYy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmEzMC1tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMmJlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTMwLW1jLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkEzMF9NQ19ICisjZGVmaW5lIERUX0JJTkRJTkdTX01FTU9SWV9URUdSQTMwX01DX0gKKworI2RlZmluZSBURUdSQV9TV0dST1VQX1BUQwkwCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfREMJMQorI2RlZmluZSBURUdSQV9TV0dST1VQX0RDQgkyCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfRVBQCTMKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9HMgk0CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVBFCTUKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9WSQk2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfQUZJCTcKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9BVlBDCTgKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9OVgk5CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTlYyCTEwCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSERBCTExCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSEMJMTIKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9QUENTCTEzCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfU0FUQQkxNAorI2RlZmluZSBURUdSQV9TV0dST1VQX1ZERQkxNQorI2RlZmluZSBURUdSQV9TV0dST1VQX01QQ09SRUxQCTE2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVBDT1JFCTE3CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSVNQCTE4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9waW5jdHJsL2RyYS5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9waW5jdHJsL2RyYS5oCmluZGV4IDNkMzM3OTQuLjc0NDhlZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvcGluY3RybC9kcmEuaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3BpbmN0cmwvZHJhLmgKQEAgLTQwLDggKzQwLDggQEAKIAogLyogQWN0aXZlIHBpbiBzdGF0ZXMgKi8KICNkZWZpbmUgUElOX09VVFBVVAkJKDAgfCBQVUxMX0RJUykKLSNkZWZpbmUgUElOX09VVFBVVF9QVUxMVVAJKFBJTl9PVVRQVVQgfCBQVUxMX0VOQSB8IFBVTExfVVApCi0jZGVmaW5lIFBJTl9PVVRQVVRfUFVMTERPV04JKFBJTl9PVVRQVVQgfCBQVUxMX0VOQSkKKyNkZWZpbmUgUElOX09VVFBVVF9QVUxMVVAJKFBVTExfVVApCisjZGVmaW5lIFBJTl9PVVRQVVRfUFVMTERPV04JKDApCiAjZGVmaW5lIFBJTl9JTlBVVAkJKElOUFVUX0VOIHwgUFVMTF9ESVMpCiAjZGVmaW5lIFBJTl9JTlBVVF9TTEVXCQkoSU5QVVRfRU4gfCBTTEVXQ09OVFJPTCkKICNkZWZpbmUgUElOX0lOUFVUX1BVTExVUAkoUFVMTF9FTkEgfCBJTlBVVF9FTiB8IFBVTExfVVApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL3JlZ3VsYXRvci9tYXhpbSxtYXg3NzgwMi5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZWd1bGF0b3IvbWF4aW0sbWF4Nzc4MDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjI4NjMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZWd1bGF0b3IvbWF4aW0sbWF4Nzc4MDIuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEdvb2dsZSwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBEZXZpY2UgVHJlZSBiaW5kaW5nIGNvbnN0YW50cyBmb3IgdGhlIE1heGltIDc3ODAyIFBNSUMgcmVndWxhdG9ycworICovCisKKyNpZm5kZWYgX0RUX0JJTkRJTkdTX1JFR1VMQVRPUl9NQVhJTV9NQVg3NzgwMl9ICisjZGVmaW5lIF9EVF9CSU5ESU5HU19SRUdVTEFUT1JfTUFYSU1fTUFYNzc4MDJfSAorCisvKiBSZWd1bGF0b3Igb3BlcmF0aW5nIG1vZGVzICovCisjZGVmaW5lIE1BWDc3ODAyX09QTU9ERV9MUAkxCisjZGVmaW5lIE1BWDc3ODAyX09QTU9ERV9OT1JNQUwJMworCisjZW5kaWYgLyogX0RUX0JJTkRJTkdTX1JFR1VMQVRPUl9NQVhJTV9NQVg3NzgwMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQwNy1yZXNldHMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvcmVzZXQtY29udHJvbGxlci9zdGloNDA3LXJlc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZDQzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQwNy1yZXNldHMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogVGhpcyBoZWFkZXIgcHJvdmlkZXMgY29uc3RhbnRzIGZvciB0aGUgcmVzZXQgY29udHJvbGxlcgorICogYmFzZWQgcGVyaXBoZXJhbCBwb3dlcmRvd24gcmVxdWVzdHMgb24gdGhlIFNUTWljcm9lbGVjdHJvbmljcworICogU1RpSDQwNyBTb0MuCisgKi8KKyNpZm5kZWYgX0RUX0JJTkRJTkdTX1JFU0VUX0NPTlRST0xMRVJfU1RJSDQwNworI2RlZmluZSBfRFRfQklORElOR1NfUkVTRVRfQ09OVFJPTExFUl9TVElINDA3CisKKy8qIFBvd2VyZG93biByZXF1ZXN0cyBjb250cm9sIDAgKi8KKyNkZWZpbmUgU1RJSDQwN19FTUlTU19QT1dFUkRPV04JCTAKKyNkZWZpbmUgU1RJSDQwN19OQU5EX1BPV0VSRE9XTgkJMQorCisvKiBTeW5wIEdNQUMgUG93ZXJEb3duICovCisjZGVmaW5lIFNUSUg0MDdfRVRIMV9QT1dFUkRPV04JCTIKKworLyogUG93ZXJkb3duIHJlcXVlc3RzIGNvbnRyb2wgMSAqLworI2RlZmluZSBTVElINDA3X1VTQjNfUE9XRVJET1dOCQkzCisjZGVmaW5lIFNUSUg0MDdfVVNCMl9QT1JUMV9QT1dFUkRPV04JNAorI2RlZmluZSBTVElINDA3X1VTQjJfUE9SVDBfUE9XRVJET1dOCTUKKyNkZWZpbmUgU1RJSDQwN19QQ0lFMV9QT1dFUkRPV04JCTYKKyNkZWZpbmUgU1RJSDQwN19QQ0lFMF9QT1dFUkRPV04JCTcKKyNkZWZpbmUgU1RJSDQwN19TQVRBMV9QT1dFUkRPV04JCTgKKyNkZWZpbmUgU1RJSDQwN19TQVRBMF9QT1dFUkRPV04JCTkKKworLyogUmVzZXQgZGVmaW5lcyAqLworI2RlZmluZSBTVElINDA3X0VUSDFfU09GVFJFU0VUCQkwCisjZGVmaW5lIFNUSUg0MDdfTU1DMV9TT0ZUUkVTRVQJCTEKKyNkZWZpbmUgU1RJSDQwN19QSUNPUEhZX1NPRlRSRVNFVAkyCisjZGVmaW5lIFNUSUg0MDdfSVJCX1NPRlRSRVNFVAkJMworI2RlZmluZSBTVElINDA3X1BDSUUwX1NPRlRSRVNFVAkJNAorI2RlZmluZSBTVElINDA3X1BDSUUxX1NPRlRSRVNFVAkJNQorI2RlZmluZSBTVElINDA3X1NBVEEwX1NPRlRSRVNFVAkJNgorI2RlZmluZSBTVElINDA3X1NBVEExX1NPRlRSRVNFVAkJNworI2RlZmluZSBTVElINDA3X01JUEhZMF9TT0ZUUkVTRVQJOAorI2RlZmluZSBTVElINDA3X01JUEhZMV9TT0ZUUkVTRVQJOQorI2RlZmluZSBTVElINDA3X01JUEhZMl9TT0ZUUkVTRVQJMTAKKyNkZWZpbmUgU1RJSDQwN19TQVRBMF9QV1JfU09GVFJFU0VUCTExCisjZGVmaW5lIFNUSUg0MDdfU0FUQTFfUFdSX1NPRlRSRVNFVAkxMgorI2RlZmluZSBTVElINDA3X0RFTFRBX1NPRlRSRVNFVAkJMTMKKyNkZWZpbmUgU1RJSDQwN19CTElUVEVSX1NPRlRSRVNFVAkxNAorI2RlZmluZSBTVElINDA3X0hEVFZPVVRfU09GVFJFU0VUCTE1CisjZGVmaW5lIFNUSUg0MDdfSERRVkRQX1NPRlRSRVNFVAkxNgorI2RlZmluZSBTVElINDA3X1ZEUF9BVVhfU09GVFJFU0VUCTE3CisjZGVmaW5lIFNUSUg0MDdfQ09NUE9fU09GVFJFU0VUCQkxOAorI2RlZmluZSBTVElINDA3X0hETUlfVFhfUEhZX1NPRlRSRVNFVAkxOQorI2RlZmluZSBTVElINDA3X0pQRUdfREVDX1NPRlRSRVNFVAkyMAorI2RlZmluZSBTVElINDA3X1ZQOF9ERUNfU09GVFJFU0VUCTIxCisjZGVmaW5lIFNUSUg0MDdfR1BVX1NPRlRSRVNFVAkJMjIKKyNkZWZpbmUgU1RJSDQwN19IVkFfU09GVFJFU0VUCQkyMworI2RlZmluZSBTVElINDA3X0VSQU1fSFZBX1NPRlRSRVNFVAkyNAorI2RlZmluZSBTVElINDA3X0xQTV9TT0ZUUkVTRVQJCTI1CisjZGVmaW5lIFNUSUg0MDdfS0VZU0NBTl9TT0ZUUkVTRVQJMjYKKyNkZWZpbmUgU1RJSDQwN19VU0IyX1BPUlQwX1NPRlRSRVNFVAkyNworI2RlZmluZSBTVElINDA3X1VTQjJfUE9SVDFfU09GVFJFU0VUCTI4CisKKy8qIFBpY29waHkgcmVzZXQgZGVmaW5lcyAqLworI2RlZmluZSBTVElINDA3X1BJQ09QSFkwX1JFU0VUCQkwCisjZGVmaW5lIFNUSUg0MDdfUElDT1BIWTFfUkVTRVQJCTEKKyNkZWZpbmUgU1RJSDQwN19QSUNPUEhZMl9SRVNFVAkJMgorCisjZW5kaWYgLyogX0RUX0JJTkRJTkdTX1JFU0VUX0NPTlRST0xMRVJfU1RJSDQwNyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1lbC1tY2kuaCBiL2luY2x1ZGUvbGludXgvYXRtZWwtbWNpLmgKaW5kZXggOTFiNzdmOC4uOTE3Nzk0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1lbC1tY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWVsLW1jaS5oCkBAIC0xMSw2ICsxMSw3IEBACiAgKiBAZGV0ZWN0X3BpbjogR1BJTyBwaW4gd2lyZWQgdG8gdGhlIGNhcmQgZGV0ZWN0IHN3aXRjaAogICogQHdwX3BpbjogR1BJTyBwaW4gd2lyZWQgdG8gdGhlIHdyaXRlIHByb3RlY3Qgc2Vuc29yCiAgKiBAZGV0ZWN0X2lzX2FjdGl2ZV9oaWdoOiBUaGUgc3RhdGUgb2YgdGhlIGRldGVjdCBwaW4gd2hlbiBpdCBpcyBhY3RpdmUKKyAqIEBub25fcmVtb3ZhYmxlOiBUaGUgc2xvdCBpcyBub3QgcmVtb3ZhYmxlLCBvbmx5IGRldGVjdCBvbmNlCiAgKgogICogSWYgYSBnaXZlbiBzbG90IGlzIG5vdCBwcmVzZW50IG9uIHRoZSBib2FyZCwgQGJ1c193aWR0aCBzaG91bGQgYmUKICAqIHNldCB0byAwLiBUaGUgb3RoZXIgZmllbGRzIGFyZSBpZ25vcmVkIGluIHRoaXMgY2FzZS4KQEAgLTI2LDYgKzI3LDcgQEAKIAlpbnQJCQlkZXRlY3RfcGluOwogCWludAkJCXdwX3BpbjsKIAlib29sCQkJZGV0ZWN0X2lzX2FjdGl2ZV9oaWdoOworCWJvb2wJCQlub25fcmVtb3ZhYmxlOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaAppbmRleCBiZTVmZDM4Li41ZDg1OGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTE4LDggKzE4LDExIEBACiAgKiBwb3NpdGlvbiBAaC4gRm9yIGV4YW1wbGUKICAqIEdFTk1BU0tfVUxMKDM5LCAyMSkgZ2l2ZXMgdXMgdGhlIDY0Yml0IHZlY3RvciAweDAwMDAwMGZmZmZlMDAwMDAuCiAgKi8KLSNkZWZpbmUgR0VOTUFTSyhoLCBsKQkJKCgoVTMyX0MoMSkgPDwgKChoKSAtIChsKSArIDEpKSAtIDEpIDw8IChsKSkKLSNkZWZpbmUgR0VOTUFTS19VTEwoaCwgbCkJKCgoVTY0X0MoMSkgPDwgKChoKSAtIChsKSArIDEpKSAtIDEpIDw8IChsKSkKKyNkZWZpbmUgR0VOTUFTSyhoLCBsKSBcCisJKCgofjBVTCkgPDwgKGwpKSAmICh+MFVMID4+IChCSVRTX1BFUl9MT05HIC0gMSAtIChoKSkpKQorCisjZGVmaW5lIEdFTk1BU0tfVUxMKGgsIGwpIFwKKwkoKCh+MFVMTCkgPDwgKGwpKSAmICh+MFVMTCA+PiAoQklUU19QRVJfTE9OR19MT05HIC0gMSAtIChoKSkpKQogCiBleHRlcm4gdW5zaWduZWQgaW50IF9fc3dfaHdlaWdodDgodW5zaWduZWQgaW50IHcpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX3N3X2h3ZWlnaHQxNih1bnNpZ25lZCBpbnQgdyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oIGIvaW5jbHVkZS9saW51eC9ibGstbXEuaAppbmRleCBjOWJlMTU4Li4xNWY3MDM0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGstbXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oCkBAIC0xNjcsNiArMTY3LDIzIEBACiAJCWdmcF90IGdmcCwgYm9vbCByZXNlcnZlZCk7CiBzdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX3RhZ190b19ycShzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIHVuc2lnbmVkIGludCB0YWcpOwogCitlbnVtIHsKKwlCTEtfTVFfVU5JUVVFX1RBR19CSVRTID0gMTYsCisJQkxLX01RX1VOSVFVRV9UQUdfTUFTSyA9ICgxIDw8IEJMS19NUV9VTklRVUVfVEFHX0JJVFMpIC0gMSwKK307CisKK3UzMiBibGtfbXFfdW5pcXVlX3RhZyhzdHJ1Y3QgcmVxdWVzdCAqcnEpOworCitzdGF0aWMgaW5saW5lIHUxNiBibGtfbXFfdW5pcXVlX3RhZ190b19od3EodTMyIHVuaXF1ZV90YWcpCit7CisJcmV0dXJuIHVuaXF1ZV90YWcgPj4gQkxLX01RX1VOSVFVRV9UQUdfQklUUzsKK30KKworc3RhdGljIGlubGluZSB1MTYgYmxrX21xX3VuaXF1ZV90YWdfdG9fdGFnKHUzMiB1bmlxdWVfdGFnKQoreworCXJldHVybiB1bmlxdWVfdGFnICYgQkxLX01RX1VOSVFVRV9UQUdfTUFTSzsKK30KKwogc3RydWN0IGJsa19tcV9od19jdHggKmJsa19tcV9tYXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgY29uc3QgaW50IGN0eF9pbmRleCk7CiBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqYmxrX21xX2FsbG9jX3NpbmdsZV9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKiwgdW5zaWduZWQgaW50LCBpbnQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCBhYWMwZjllLi42ZDc2YjhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTExMzYsNyArMTEzNiw2IEBACiAvKgogICogdGFnIHN0dWZmCiAgKi8KLSNkZWZpbmUgYmxrX3JxX3RhZ2dlZChycSkJCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfUVVFVUVEKQogZXh0ZXJuIGludCBibGtfcXVldWVfc3RhcnRfdGFnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogZXh0ZXJuIHN0cnVjdCByZXF1ZXN0ICpibGtfcXVldWVfZmluZF90YWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9lbmRfdGFnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290bWVtLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAppbmRleCA0ZTJiZDRjLi4wOTk1YzJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaApAQCAtNDYsNiArNDYsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9ib290bWVtKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBtZW1lbmQpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBmcmVlX2FsbF9ib290bWVtKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzKHBnX2RhdGFfdCAqcGdkYXQpOwogZXh0ZXJuIHZvaWQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZCk7CiAKIGV4dGVybiB2b2lkIGZyZWVfYm9vdG1lbV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaCBiL2luY2x1ZGUvbGludXgvY2FuL2Rldi5oCmluZGV4IDY5OTJhZmMuLmIzN2VhOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FuL2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FuL2Rldi5oCkBAIC05OSw2ICs5OSwxMiBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY2FuX2lzX2NhbmZkX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCS8qIHRoZSBDQU4gc3BlY2lmaWMgdHlwZSBvZiBza2IgaXMgaWRlbnRpZmllZCBieSBpdHMgZGF0YSBsZW5ndGggKi8KKwlyZXR1cm4gc2tiLT5sZW4gPT0gQ0FORkRfTVRVOworfQorCiAvKiBnZXQgZGF0YSBsZW5ndGggZnJvbSBjYW5fZGxjIHdpdGggc2FuaXRpemVkIGNhbl9kbGMgKi8KIHU4IGNhbl9kbGMybGVuKHU4IGNhbl9kbGMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsay1wcm92aWRlci5oIGIvaW5jbHVkZS9saW51eC9jbGstcHJvdmlkZXIuaAppbmRleCBiZTIxYWYxLi4yODM5YzYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsay1wcm92aWRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xrLXByb3ZpZGVyLmgKQEAgLTM1Miw3ICszNTIsNiBAQAogI2RlZmluZSBDTEtfRElWSURFUl9SRUFEX09OTFkJCUJJVCg1KQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa19vcHMgY2xrX2RpdmlkZXJfb3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGNsa19kaXZpZGVyX3JvX29wczsKIHN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl9kaXZpZGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCXZvaWQgX19pb21lbSAqcmVnLCB1OCBzaGlmdCwgdTggd2lkdGgsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsay90aS5oIGIvaW5jbHVkZS9saW51eC9jbGsvdGkuaAppbmRleCBmNzVhY2JmLi43NGU1MzQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsay90aS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xrL3RpLmgKQEAgLTI1NCwxMyArMjU0LDI2IEBACiB2b2lkIG9tYXAyX2luaXRfY2xrX2h3X29tYXBfY2xvY2tzKHN0cnVjdCBjbGsgKmNsayk7CiBpbnQgb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodyk7CiB2b2lkIG9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KTsKK2ludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdTggaW5kZXgpOwogaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCQkJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpOworaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZV9hbmRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsCisJCQkJCSAgIHU4IGluZGV4KTsKK2xvbmcgb21hcDNfbm9uY29yZV9kcGxsX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmJlc3RfcGFyZW50X3JhdGUsCisJCQkJICAgICAgIHN0cnVjdCBjbGsgKipiZXN0X3BhcmVudF9jbGspOwogdW5zaWduZWQgbG9uZyBvbWFwNF9kcGxsX3JlZ200eGVuX3JlY2FsYyhzdHJ1Y3QgY2xrX2h3ICpodywKIAkJCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpOwogbG9uZyBvbWFwNF9kcGxsX3JlZ200eGVuX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnBhcmVudF9yYXRlKTsKK2xvbmcgb21hcDRfZHBsbF9yZWdtNHhlbl9kZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCQl1bnNpZ25lZCBsb25nICpiZXN0X3BhcmVudF9yYXRlLAorCQkJCQlzdHJ1Y3QgY2xrICoqYmVzdF9wYXJlbnRfY2xrKTsKIHU4IG9tYXAyX2luaXRfZHBsbF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcpOwogdW5zaWduZWQgbG9uZyBvbWFwM19kcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7CiBsb25nIG9tYXAyX2RwbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSwKQEAgLTI3OCw2ICsyOTEsOCBAQAogdm9pZCBvbWFwMl9jbGtfZW5hYmxlX2luaXRfY2xvY2tzKGNvbnN0IGNoYXIgKipjbGtfbmFtZXMsIHU4IG51bV9jbG9ja3MpOwogaW50IG9tYXAzX2RwbGw0X3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLAogCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpOworaW50IG9tYXAzX2RwbGw0X3NldF9yYXRlX2FuZF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwgdTggaW5kZXgpOwogaW50IG9tYXAyX2RmbHRfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodyk7CiB2b2lkIG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpOwogaW50IG9tYXAyX2RmbHRfY2xrX2lzX2VuYWJsZWQoc3RydWN0IGNsa19odyAqaHcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbWEuaCBiL2luY2x1ZGUvbGludXgvY21hLmgKaW5kZXggMDQzMGVkMC4uYTkzNDM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbWEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NtYS5oCkBAIC0xOCwxMiArMTgsMTIgQEAKIGV4dGVybiBwaHlzX2FkZHJfdCBjbWFfZ2V0X2Jhc2Uoc3RydWN0IGNtYSAqY21hKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNtYV9nZXRfc2l6ZShzdHJ1Y3QgY21hICpjbWEpOwogCi1leHRlcm4gaW50IF9faW5pdCBjbWFfZGVjbGFyZV9jb250aWd1b3VzKHBoeXNfYWRkcl90IHNpemUsCi0JCQlwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBsaW1pdCwKK2V4dGVybiBpbnQgX19pbml0IGNtYV9kZWNsYXJlX2NvbnRpZ3VvdXMocGh5c19hZGRyX3QgYmFzZSwKKwkJCXBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGxpbWl0LAogCQkJcGh5c19hZGRyX3QgYWxpZ25tZW50LCB1bnNpZ25lZCBpbnQgb3JkZXJfcGVyX2JpdCwKIAkJCWJvb2wgZml4ZWQsIHN0cnVjdCBjbWEgKipyZXNfY21hKTsKLWV4dGVybiBpbnQgY21hX2luaXRfcmVzZXJ2ZWRfbWVtKHBoeXNfYWRkcl90IHNpemUsCi0JCQkJCXBoeXNfYWRkcl90IGJhc2UsIGludCBvcmRlcl9wZXJfYml0LAorZXh0ZXJuIGludCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwKKwkJCQkJcGh5c19hZGRyX3Qgc2l6ZSwgaW50IG9yZGVyX3Blcl9iaXQsCiAJCQkJCXN0cnVjdCBjbWEgKipyZXNfY21hKTsKIGV4dGVybiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jKHN0cnVjdCBjbWEgKmNtYSwgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgYWxpZ24pOwogZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIGludCBjb3VudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IGUxNzA3ZGUuLmNhNmQyYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC02NCw2ICs2NCw3IEBACiAJCQkJICAgIHVuaW9uIG1hcF9pbmZvICptYXBfY29udGV4dCk7CiAKIHR5cGVkZWYgdm9pZCAoKmRtX3ByZXN1c3BlbmRfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSk7Cit0eXBlZGVmIHZvaWQgKCpkbV9wcmVzdXNwZW5kX3VuZG9fZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSk7CiB0eXBlZGVmIHZvaWQgKCpkbV9wb3N0c3VzcGVuZF9mbikgKHN0cnVjdCBkbV90YXJnZXQgKnRpKTsKIHR5cGVkZWYgaW50ICgqZG1fcHJlcmVzdW1lX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGkpOwogdHlwZWRlZiB2b2lkICgqZG1fcmVzdW1lX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGkpOwpAQCAtMTQ1LDYgKzE0Niw3IEBACiAJZG1fZW5kaW9fZm4gZW5kX2lvOwogCWRtX3JlcXVlc3RfZW5kaW9fZm4gcnFfZW5kX2lvOwogCWRtX3ByZXN1c3BlbmRfZm4gcHJlc3VzcGVuZDsKKwlkbV9wcmVzdXNwZW5kX3VuZG9fZm4gcHJlc3VzcGVuZF91bmRvOwogCWRtX3Bvc3RzdXNwZW5kX2ZuIHBvc3RzdXNwZW5kOwogCWRtX3ByZXJlc3VtZV9mbiBwcmVyZXN1bWU7CiAJZG1fcmVzdW1lX2ZuIHJlc3VtZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmgKaW5kZXggZTFlNjhkYS4uZGEzYjcyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmgKKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmgKQEAgLTE5NCw3ICsxOTQsOCBAQAogICogQE1FTV9ERFIzOgkJRERSMyBSQU0KICAqIEBNRU1fUkREUjM6CQlSZWdpc3RlcmVkIEREUjMgUkFNCiAgKgkJCVRoaXMgaXMgYSB2YXJpYW50IG9mIHRoZSBERFIzIG1lbW9yaWVzLgotICogQE1FTV9ERFI0OgkJRERSNCBSQU0KKyAqIEBNRU1fTFJERFIzCQlMb2FkLVJlZHVjZWQgRERSMyBtZW1vcnkuCisgKiBATUVNX0REUjQ6CQlVbmJ1ZmZlcmVkIEREUjQgUkFNCiAgKiBATUVNX1JERFI0OgkJUmVnaXN0ZXJlZCBERFI0IFJBTQogICoJCQlUaGlzIGlzIGEgdmFyaWFudCBvZiB0aGUgRERSNCBtZW1vcmllcy4KICAqLwpAQCAtMjE2LDYgKzIxNyw3IEBACiAJTUVNX1hEUiwKIAlNRU1fRERSMywKIAlNRU1fUkREUjMsCisJTUVNX0xSRERSMywKIAlNRU1fRERSNCwKIAlNRU1fUkREUjQsCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZXByb21fOTNjeDYuaCBiL2luY2x1ZGUvbGludXgvZWVwcm9tXzkzY3g2LmgKaW5kZXggZTUwZjk4Yi4uZWIwYjE5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZXByb21fOTNjeDYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VlcHJvbV85M2N4Ni5oCkBAIC03NSw2ICs3NSwxMCBAQAogCWNvbnN0IHU4IHdvcmQsIHUxNiAqZGF0YSk7CiBleHRlcm4gdm9pZCBlZXByb21fOTNjeDZfbXVsdGlyZWFkKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSwKIAljb25zdCB1OCB3b3JkLCBfX2xlMTYgKmRhdGEsIGNvbnN0IHUxNiB3b3Jkcyk7CitleHRlcm4gdm9pZCBlZXByb21fOTNjeDZfcmVhZGIoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tLAorCWNvbnN0IHU4IGJ5dGUsIHU4ICpkYXRhKTsKK2V4dGVybiB2b2lkIGVlcHJvbV85M2N4Nl9tdWx0aXJlYWRiKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSwKKwljb25zdCB1OCBieXRlLCB1OCAqZGF0YSwgY29uc3QgdTE2IGJ5dGVzKTsKIAogZXh0ZXJuIHZvaWQgZWVwcm9tXzkzY3g2X3dyZW4oc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tLCBib29sIGVuYWJsZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IDA5NDlmOWMuLjAyMzhkNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtNTQ3LDYgKzU0Nyw5IEBACiAjZGVmaW5lIFNNQklPU19UQUJMRV9HVUlEICAgIFwKICAgICBFRklfR1VJRCggIDB4ZWI5ZDJkMzEsIDB4MmQ4OCwgMHgxMWQzLCAweDlhLCAweDE2LCAweDAsIDB4OTAsIDB4MjcsIDB4M2YsIDB4YzEsIDB4NGQgKQogCisjZGVmaW5lIFNNQklPUzNfVEFCTEVfR1VJRCAgICBcCisgICAgRUZJX0dVSUQoICAweGYyZmQxNTQ0LCAweDk3OTQsIDB4NGEyYywgMHg5OSwgMHgyZSwgMHhlNSwgMHhiYiwgMHhjZiwgMHgyMCwgMHhlMywgMHg5NCApCisKICNkZWZpbmUgU0FMX1NZU1RFTV9UQUJMRV9HVUlEICAgIFwKICAgICBFRklfR1VJRCggIDB4ZWI5ZDJkMzIsIDB4MmQ4OCwgMHgxMWQzLCAweDlhLCAweDE2LCAweDAsIDB4OTAsIDB4MjcsIDB4M2YsIDB4YzEsIDB4NGQgKQogCkBAIC04MTAsNyArODEzLDggQEAKIAl1bnNpZ25lZCBsb25nIG1wczsJCS8qIE1QUyB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcgYWNwaTsJCS8qIEFDUEkgdGFibGUgIChJQTY0IGV4dCAwLjcxKSAqLwogCXVuc2lnbmVkIGxvbmcgYWNwaTIwOwkJLyogQUNQSSB0YWJsZSAgKEFDUEkgMi4wKSAqLwotCXVuc2lnbmVkIGxvbmcgc21iaW9zOwkJLyogU00gQklPUyB0YWJsZSAqLworCXVuc2lnbmVkIGxvbmcgc21iaW9zOwkJLyogU01CSU9TIHRhYmxlICgzMiBiaXQgZW50cnkgcG9pbnQpICovCisJdW5zaWduZWQgbG9uZyBzbWJpb3MzOwkJLyogU01CSU9TIHRhYmxlICg2NCBiaXQgZW50cnkgcG9pbnQpICovCiAJdW5zaWduZWQgbG9uZyBzYWxfc3lzdGFiOwkvKiBTQUwgc3lzdGVtIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZyBib290X2luZm87CS8qIGJvb3QgaW5mbyB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcgaGNkcDsJCS8qIEhDRFAgdGFibGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKaW5kZXggN2ZkODFiOC4uNmI3ZmQ5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKQEAgLTI0NiwxNSArMjQ2LDYgQEAKICAqIGRlZmluZWQgaW4gPGxpbnV4L3dhaXQuaD4KICAqLwogCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXpla2lsbGFibGUod3EsIGNvbmRpdGlvbikJCQlcCi0oewkJCQkJCQkJCVwKLQlpbnQgX19yZXR2YWw7CQkJCQkJCVwKLQlmcmVlemVyX2RvX25vdF9jb3VudCgpOwkJCQkJCVwKLQlfX3JldHZhbCA9IHdhaXRfZXZlbnRfa2lsbGFibGUod3EsIChjb25kaXRpb24pKTsJCVwKLQlmcmVlemVyX2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsOwkJCQkJCQlcCi19KQotCiAvKiBETyBOT1QgQUREIEFOWSBORVcgQ0FMTEVSUyBPRiBUSElTIEZVTkNUSU9OICovCiAjZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXpla2lsbGFibGVfdW5zYWZlKHdxLCBjb25kaXRpb24pCQkJXAogKHsJCQkJCQkJCQlcCkBAIC0yNjUsMzUgKzI1Niw2IEBACiAJX19yZXR2YWw7CQkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGUod3EsIGNvbmRpdGlvbikJCQkJXAotKHsJCQkJCQkJCQlcCi0JaW50IF9fcmV0dmFsOwkJCQkJCQlcCi0JZnJlZXplcl9kb19ub3RfY291bnQoKTsJCQkJCQlcCi0JX19yZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUod3EsIChjb25kaXRpb24pKTsJCVwKLQlmcmVlemVyX2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsOwkJCQkJCQlcCi19KQotCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJCVwKLSh7CQkJCQkJCQkJXAotCWxvbmcgX19yZXR2YWwgPSB0aW1lb3V0OwkJCQkJXAotCWZyZWV6ZXJfZG9fbm90X2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsCShjb25kaXRpb24pLAlcCi0JCQkJX19yZXR2YWwpOwkJCQlcCi0JZnJlZXplcl9jb3VudCgpOwkJCQkJCVwKLQlfX3JldHZhbDsJCQkJCQkJXAotfSkKLQotI2RlZmluZSB3YWl0X2V2ZW50X2ZyZWV6YWJsZV9leGNsdXNpdmUod3EsIGNvbmRpdGlvbikJCQlcCi0oewkJCQkJCQkJCVwKLQlpbnQgX19yZXR2YWw7CQkJCQkJCVwKLQlmcmVlemVyX2RvX25vdF9jb3VudCgpOwkJCQkJCVwKLQlfX3JldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUod3EsIGNvbmRpdGlvbik7CVwKLQlmcmVlemVyX2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsOwkJCQkJCQlcCi19KQotCi0KICNlbHNlIC8qICFDT05GSUdfRlJFRVpFUiAqLwogc3RhdGljIGlubGluZSBib29sIGZyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgZnJlZXppbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMzMxLDE4ICsyOTMsNiBAQAogI2RlZmluZSBmcmVlemFibGVfc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKGV4cGlyZXMsIGRlbHRhLCBtb2RlKQlcCiAJc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKGV4cGlyZXMsIGRlbHRhLCBtb2RlKQogCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlKHdxLCBjb25kaXRpb24pCQkJCVwKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHdxLCBjb25kaXRpb24pCi0KLSNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQotCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKQkJCVwKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKQotCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXpla2lsbGFibGUod3EsIGNvbmRpdGlvbikJCVwKLQkJd2FpdF9ldmVudF9raWxsYWJsZSh3cSwgY29uZGl0aW9uKQotCiAjZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXpla2lsbGFibGVfdW5zYWZlKHdxLCBjb25kaXRpb24pCQkJXAogCQl3YWl0X2V2ZW50X2tpbGxhYmxlKHdxLCBjb25kaXRpb24pCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3BtYnVzLmggYi9pbmNsdWRlL2xpbnV4L2kyYy9wbWJ1cy5oCmluZGV4IDY5MjgwZGIuLmVlM2MyYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL3BtYnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvcG1idXMuaApAQCAtNDAsNiArNDAsMTAgQEAKIAogc3RydWN0IHBtYnVzX3BsYXRmb3JtX2RhdGEgewogCXUzMiBmbGFnczsJCS8qIERldmljZSBzcGVjaWZpYyBmbGFncyAqLworCisJLyogcmVndWxhdG9yIHN1cHBvcnQgKi8KKwlpbnQgbnVtX3JlZ3VsYXRvcnM7CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKnJlZ19pbml0X2RhdGE7CiB9OwogCiAjZW5kaWYgLyogX1BNQlVTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lpby9ldmVudHMuaCBiL2luY2x1ZGUvbGludXgvaWlvL2V2ZW50cy5oCmluZGV4IDhiYmQ3YmMuLjAzZmEzMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWlvL2V2ZW50cy5oCisrKyBiL2luY2x1ZGUvbGludXgvaWlvL2V2ZW50cy5oCkBAIC03Miw3ICs3Miw3IEBACiAKICNkZWZpbmUgSUlPX0VWRU5UX0NPREVfRVhUUkFDVF9UWVBFKG1hc2spICgobWFzayA+PiA1NikgJiAweEZGKQogCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0VYVFJBQ1RfRElSKG1hc2spICgobWFzayA+PiA0OCkgJiAweENGKQorI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX0RJUihtYXNrKSAoKG1hc2sgPj4gNDgpICYgMHg3RikKIAogI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX0NIQU5fVFlQRShtYXNrKSAoKG1hc2sgPj4gMzIpICYgMHhGRikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCAwMDY4NzA4Li4wYTIxZmJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtMjQyLDcgKzI0Miw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBfX2JlMzIgaW5ldF9tYWtlX21hc2soaW50IGxvZ21hc2spCiB7CiAJaWYgKGxvZ21hc2spCi0JCXJldHVybiBodG9ubCh+KCgxPDwoMzItbG9nbWFzaykpLTEpKTsKKwkJcmV0dXJuIGh0b25sKH4oKDFVPDwoMzItbG9nbWFzaykpLTEpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggNzdmYzQzZi4uMzAzN2ZjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC0xMDIsNyArMTAyLDcgQEAKICNkZWZpbmUgSU5JVF9JRFMKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKyNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UKICNkZWZpbmUgSU5JVF9UQVNLX1JDVV9UUkVFX1BSRUVNUFQoKQkJCQkJXAogCS5yY3VfYmxvY2tlZF9ub2RlID0gTlVMTCwKICNlbHNlCkBAIC0xNjYsNiArMTY2LDE1IEBACiAjIGRlZmluZSBJTklUX1JUX01VVEVYRVModHNrKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKKyMgZGVmaW5lIElOSVRfTlVNQV9CQUxBTkNJTkcodHNrKQkJCQkJXAorCS5udW1hX3ByZWZlcnJlZF9uaWQgPSAtMSwJCQkJCVwKKwkubnVtYV9ncm91cCA9IE5VTEwsCQkJCQkJXAorCS5udW1hX2ZhdWx0cyA9IE5VTEwsCisjZWxzZQorIyBkZWZpbmUgSU5JVF9OVU1BX0JBTEFOQ0lORyh0c2spCisjZW5kaWYKKwogLyoKICAqICBJTklUX1RBU0sgaXMgdXNlZCB0byBzZXQgdXAgdGhlIGZpcnN0IHRhc2sgdGFibGUsIHRvdWNoIGF0CiAgKiB5b3VyIG93biByaXNrIS4gQmFzZT0wLCBsaW1pdD0weDFmZmZmZiAoPTJNQikKQEAgLTIzNyw2ICsyNDYsNyBAQAogCUlOSVRfQ1BVU0VUX1NFUSh0c2spCQkJCQkJXAogCUlOSVRfUlRfTVVURVhFUyh0c2spCQkJCQkJXAogCUlOSVRfVlRJTUUodHNrKQkJCQkJCQlcCisJSU5JVF9OVU1BX0JBTEFOQ0lORyh0c2spCQkJCQlcCiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pb21tdS5oCmluZGV4IGU2YTdjOWYuLmIyOWE1OTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvbW11LmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvaW9tbXUuaD4KIAogI2RlZmluZSBJT01NVV9SRUFECSgxIDw8IDApCkBAIC05Nyw2ICs5OCw4IEBACiAgKiBAZGV0YWNoX2RldjogZGV0YWNoIGRldmljZSBmcm9tIGFuIGlvbW11IGRvbWFpbgogICogQG1hcDogbWFwIGEgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByZWdpb24gdG8gYW4gaW9tbXUgZG9tYWluCiAgKiBAdW5tYXA6IHVubWFwIGEgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByZWdpb24gZnJvbSBhbiBpb21tdSBkb21haW4KKyAqIEBtYXBfc2c6IG1hcCBhIHNjYXR0ZXItZ2F0aGVyIGxpc3Qgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBjaHVua3MKKyAqIHRvIGFuIGlvbW11IGRvbWFpbgogICogQGlvdmFfdG9fcGh5czogdHJhbnNsYXRlIGlvdmEgdG8gcGh5c2ljYWwgYWRkcmVzcwogICogQGFkZF9kZXZpY2U6IGFkZCBkZXZpY2UgdG8gaW9tbXUgZ3JvdXBpbmcKICAqIEByZW1vdmVfZGV2aWNlOiByZW1vdmUgZGV2aWNlIGZyb20gaW9tbXUgZ3JvdXBpbmcKQEAgLTExNCw2ICsxMTcsOCBAQAogCQkgICBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBwcm90KTsKIAlzaXplX3QgKCp1bm1hcCkoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCiAJCSAgICAgc2l6ZV90IHNpemUpOworCXNpemVfdCAoKm1hcF9zZykoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCisJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5lbnRzLCBpbnQgcHJvdCk7CiAJcGh5c19hZGRyX3QgKCppb3ZhX3RvX3BoeXMpKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgZG1hX2FkZHJfdCBpb3ZhKTsKIAlpbnQgKCphZGRfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCXZvaWQgKCpyZW1vdmVfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtMTU2LDYgKzE2MSw5IEBACiAJCSAgICAgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLCBpbnQgcHJvdCk7CiBleHRlcm4gc2l6ZV90IGlvbW11X3VubWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAogCQkgICAgICAgc2l6ZV90IHNpemUpOworZXh0ZXJuIHNpemVfdCBkZWZhdWx0X2lvbW11X21hcF9zZyhzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLHVuc2lnbmVkIGludCBuZW50cywKKwkJCQlpbnQgcHJvdCk7CiBleHRlcm4gcGh5c19hZGRyX3QgaW9tbXVfaW92YV90b19waHlzKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgZG1hX2FkZHJfdCBpb3ZhKTsKIGV4dGVybiB2b2lkIGlvbW11X3NldF9mYXVsdF9oYW5kbGVyKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKIAkJCWlvbW11X2ZhdWx0X2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICp0b2tlbik7CkBAIC0yNDEsNiArMjQ5LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGlubGluZSBzaXplX3QgaW9tbXVfbWFwX3NnKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgaW92YSwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgIHVuc2lnbmVkIGludCBuZW50cywgaW50IHByb3QpCit7CisJcmV0dXJuIGRvbWFpbi0+b3BzLT5tYXBfc2coZG9tYWluLCBpb3ZhLCBzZywgbmVudHMsIHByb3QpOworfQorCiAjZWxzZSAvKiBDT05GSUdfSU9NTVVfQVBJICovCiAKIHN0cnVjdCBpb21tdV9vcHMge307CkBAIC0yOTMsNiArMzA4LDEzIEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGlvbW11X21hcF9zZyhzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkJICB1bnNpZ25lZCBsb25nIGlvdmEsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICB1bnNpZ25lZCBpbnQgbmVudHMsIGludCBwcm90KQoreworCXJldHVybiAtRU5PREVWOworfQorCiBzdGF0aWMgaW5saW5lIGludCBpb21tdV9kb21haW5fd2luZG93X2VuYWJsZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJCQkJCSAgICAgdTMyIHduZF9uciwgcGh5c19hZGRyX3QgcGFkZHIsCiAJCQkJCSAgICAgdTY0IHNpemUsIGludCBwcm90KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggMDNmNDhkOS4uZDA5ZWM3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC0xNSwxMSArMTUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFoYW5kbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxbnIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpAQCAtMjcsMTEgKzI5LDcgQEAKIAogc3RydWN0IHNlcV9maWxlOwogc3RydWN0IG1vZHVsZTsKLXN0cnVjdCBpcnFfZGVzYzsKLXN0cnVjdCBpcnFfZGF0YTsKLXR5cGVkZWYJdm9pZCAoKmlycV9mbG93X2hhbmRsZXJfdCkodW5zaWduZWQgaW50IGlycSwKLQkJCQkJICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7Ci10eXBlZGVmCXZvaWQgKCppcnFfcHJlZmxvd19oYW5kbGVyX3QpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitzdHJ1Y3QgbXNpX21zZzsKIAogLyoKICAqIElSUSBsaW5lIHN0YXR1cy4KQEAgLTExMywxMCArMTExLDE0IEBACiAgKgogICogSVJRX1NFVF9NQVNLX09LCS0gT0ssIGNvcmUgdXBkYXRlcyBpcnFfZGF0YS5hZmZpbml0eQogICogSVJRX1NFVF9NQVNLX05PQ1BZCS0gT0ssIGNoaXAgZGlkIHVwZGF0ZSBpcnFfZGF0YS5hZmZpbml0eQorICogSVJRX1NFVF9NQVNLX09LX0RPTkUJLSBTYW1lIGFzIElSUV9TRVRfTUFTS19PSyBmb3IgY29yZS4gU3BlY2lhbCBjb2RlIHRvCisgKgkJCSAgc3VwcG9ydCBzdGFja2VkIGlycWNoaXBzLCB3aGljaCBpbmRpY2F0ZXMgc2tpcHBpbmcKKyAqCQkJICBhbGwgZGVzY2VuZGVudCBpcnFjaGlwcy4KICAqLwogZW51bSB7CiAJSVJRX1NFVF9NQVNLX09LID0gMCwKIAlJUlFfU0VUX01BU0tfT0tfTk9DT1BZLAorCUlSUV9TRVRfTUFTS19PS19ET05FLAogfTsKIAogc3RydWN0IG1zaV9kZXNjOwpAQCAtMTMzLDYgKzEzNSw4IEBACiAgKiBAY2hpcDoJCWxvdyBsZXZlbCBpbnRlcnJ1cHQgaGFyZHdhcmUgYWNjZXNzCiAgKiBAZG9tYWluOgkJSW50ZXJydXB0IHRyYW5zbGF0aW9uIGRvbWFpbjsgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcKICAqCQkJYmV0d2VlbiBod2lycSBudW1iZXIgYW5kIGxpbnV4IGlycSBudW1iZXIuCisgKiBAcGFyZW50X2RhdGE6CXBvaW50ZXIgdG8gcGFyZW50IHN0cnVjdCBpcnFfZGF0YSB0byBzdXBwb3J0IGhpZXJhcmNoeQorICoJCQlpcnFfZG9tYWluCiAgKiBAaGFuZGxlcl9kYXRhOglwZXItSVJRIGRhdGEgZm9yIHRoZSBpcnFfY2hpcCBtZXRob2RzCiAgKiBAY2hpcF9kYXRhOgkJcGxhdGZvcm0tc3BlY2lmaWMgcGVyLWNoaXAgcHJpdmF0ZSBkYXRhIGZvciB0aGUgY2hpcAogICoJCQltZXRob2RzLCB0byBhbGxvdyBzaGFyZWQgY2hpcCBpbXBsZW1lbnRhdGlvbnMKQEAgLTE1MSw2ICsxNTUsOSBAQAogCXVuc2lnbmVkIGludAkJc3RhdGVfdXNlX2FjY2Vzc29yczsKIAlzdHJ1Y3QgaXJxX2NoaXAJCSpjaGlwOwogCXN0cnVjdCBpcnFfZG9tYWluCSpkb21haW47CisjaWZkZWYJQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZCisJc3RydWN0IGlycV9kYXRhCQkqcGFyZW50X2RhdGE7CisjZW5kaWYKIAl2b2lkCQkJKmhhbmRsZXJfZGF0YTsKIAl2b2lkCQkJKmNoaXBfZGF0YTsKIAlzdHJ1Y3QgbXNpX2Rlc2MJCSptc2lfZGVzYzsKQEAgLTMxNSw2ICszMjIsOCBAQAogICoJCQkJYW55IG90aGVyIGNhbGxiYWNrIHJlbGF0ZWQgdG8gdGhpcyBpcnEKICAqIEBpcnFfcmVsZWFzZV9yZXNvdXJjZXM6CW9wdGlvbmFsIHRvIHJlbGVhc2UgcmVzb3VyY2VzIGFjcXVpcmVkIHdpdGgKICAqCQkJCWlycV9yZXF1ZXN0X3Jlc291cmNlcworICogQGlycV9jb21wb3NlX21zaV9tc2c6CW9wdGlvbmFsIHRvIGNvbXBvc2UgbWVzc2FnZSBjb250ZW50IGZvciBNU0kKKyAqIEBpcnFfd3JpdGVfbXNpX21zZzoJb3B0aW9uYWwgdG8gd3JpdGUgbWVzc2FnZSBjb250ZW50IGZvciBNU0kKICAqIEBmbGFnczoJCWNoaXAgc3BlY2lmaWMgZmxhZ3MKICAqLwogc3RydWN0IGlycV9jaGlwIHsKQEAgLTM1MSw2ICszNjAsOSBAQAogCWludAkJKCppcnFfcmVxdWVzdF9yZXNvdXJjZXMpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CiAJdm9pZAkJKCppcnFfcmVsZWFzZV9yZXNvdXJjZXMpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CiAKKwl2b2lkCQkoKmlycV9jb21wb3NlX21zaV9tc2cpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CisJdm9pZAkJKCppcnFfd3JpdGVfbXNpX21zZykoc3RydWN0IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKKwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiB9OwogCkBAIC00MzgsNiArNDUwLDE4IEBACiBleHRlcm4gdm9pZCBoYW5kbGVfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogZXh0ZXJuIHZvaWQgaGFuZGxlX25lc3RlZF9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKK2V4dGVybiBpbnQgaXJxX2NoaXBfY29tcG9zZV9tc2lfbXNnKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CisjaWZkZWYJQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZCitleHRlcm4gdm9pZCBpcnFfY2hpcF9hY2tfcGFyZW50KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitleHRlcm4gaW50IGlycV9jaGlwX3JldHJpZ2dlcl9oaWVyYXJjaHkoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKK2V4dGVybiB2b2lkIGlycV9jaGlwX21hc2tfcGFyZW50KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitleHRlcm4gdm9pZCBpcnFfY2hpcF91bm1hc2tfcGFyZW50KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitleHRlcm4gdm9pZCBpcnFfY2hpcF9lb2lfcGFyZW50KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitleHRlcm4gaW50IGlycV9jaGlwX3NldF9hZmZpbml0eV9wYXJlbnQoc3RydWN0IGlycV9kYXRhICpkYXRhLAorCQkJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCwKKwkJCQkJYm9vbCBmb3JjZSk7CisjZW5kaWYKKwogLyogSGFuZGxpbmcgb2YgdW5oYW5kbGVkIGFuZCBzcHVyaW91cyBpbnRlcnJ1cHRzOiAqLwogZXh0ZXJuIHZvaWQgbm90ZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAogCQkJICAgaXJxcmV0dXJuX3QgYWN0aW9uX3JldCk7CkBAIC02MzksMTMgKzY2Myw2IEBACiB2b2lkIGlycV9pbml0X2Rlc2ModW5zaWduZWQgaW50IGlycSk7CiAjZW5kaWYKIAotI2lmbmRlZiBpcnFfcmVnX3dyaXRlbAotIyBkZWZpbmUgaXJxX3JlZ193cml0ZWwodmFsLCBhZGRyKQl3cml0ZWwodmFsLCBhZGRyKQotI2VuZGlmCi0jaWZuZGVmIGlycV9yZWdfcmVhZGwKLSMgZGVmaW5lIGlycV9yZWdfcmVhZGwoYWRkcikJCXJlYWRsKGFkZHIpCi0jZW5kaWYKLQogLyoqCiAgKiBzdHJ1Y3QgaXJxX2NoaXBfcmVncyAtIHJlZ2lzdGVyIG9mZnNldHMgZm9yIHN0cnVjdCBpcnFfZ2NpCiAgKiBAZW5hYmxlOglFbmFibGUgcmVnaXN0ZXIgb2Zmc2V0IHRvIHJlZ19iYXNlCkBAIC02OTIsNiArNzA5LDggQEAKICAqIHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljIC0gR2VuZXJpYyBpcnEgY2hpcCBkYXRhIHN0cnVjdHVyZQogICogQGxvY2s6CQlMb2NrIHRvIHByb3RlY3QgcmVnaXN0ZXIgYW5kIGNhY2hlIGRhdGEgYWNjZXNzCiAgKiBAcmVnX2Jhc2U6CQlSZWdpc3RlciBiYXNlIGFkZHJlc3MgKHZpcnR1YWwpCisgKiBAcmVnX3JlYWRsOgkJQWx0ZXJuYXRlIEkvTyBhY2Nlc3NvciAoZGVmYXVsdHMgdG8gcmVhZGwgaWYgTlVMTCkKKyAqIEByZWdfd3JpdGVsOgkJQWx0ZXJuYXRlIEkvTyBhY2Nlc3NvciAoZGVmYXVsdHMgdG8gd3JpdGVsIGlmIE5VTEwpCiAgKiBAaXJxX2Jhc2U6CQlJbnRlcnJ1cHQgYmFzZSBuciBmb3IgdGhpcyBjaGlwCiAgKiBAaXJxX2NudDoJCU51bWJlciBvZiBpbnRlcnJ1cHRzIGhhbmRsZWQgYnkgdGhpcyBjaGlwCiAgKiBAbWFza19jYWNoZToJCUNhY2hlZCBtYXNrIHJlZ2lzdGVyIHNoYXJlZCBiZXR3ZWVuIGFsbCBjaGlwIHR5cGVzCkBAIC03MTYsNiArNzM1LDggQEAKIHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljIHsKIAlyYXdfc3BpbmxvY2tfdAkJbG9jazsKIAl2b2lkIF9faW9tZW0JCSpyZWdfYmFzZTsKKwl1MzIJCQkoKnJlZ19yZWFkbCkodm9pZCBfX2lvbWVtICphZGRyKTsKKwl2b2lkCQkJKCpyZWdfd3JpdGVsKSh1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpOwogCXVuc2lnbmVkIGludAkJaXJxX2Jhc2U7CiAJdW5zaWduZWQgaW50CQlpcnFfY250OwogCXUzMgkJCW1hc2tfY2FjaGU7CkBAIC03NDAsMTIgKzc2MSwxNCBAQAogICoJCQkJdGhlIHBhcmVudCBpcnEuIFVzdWFsbHkgR1BJTyBpbXBsZW1lbnRhdGlvbnMKICAqIEBJUlFfR0NfTUFTS19DQUNIRV9QRVJfVFlQRToJTWFzayBjYWNoZSBpcyBjaGlwIHR5cGUgcHJpdmF0ZQogICogQElSUV9HQ19OT19NQVNLOgkJRG8gbm90IGNhbGN1bGF0ZSBpcnFfZGF0YS0+bWFzaworICogQElSUV9HQ19CRV9JTzoJCVVzZSBiaWctZW5kaWFuIHJlZ2lzdGVyIGFjY2Vzc2VzIChkZWZhdWx0OiBMRSkKICAqLwogZW51bSBpcnFfZ2NfZmxhZ3MgewogCUlSUV9HQ19JTklUX01BU0tfQ0FDSEUJCT0gMSA8PCAwLAogCUlSUV9HQ19JTklUX05FU1RFRF9MT0NLCQk9IDEgPDwgMSwKIAlJUlFfR0NfTUFTS19DQUNIRV9QRVJfVFlQRQk9IDEgPDwgMiwKIAlJUlFfR0NfTk9fTUFTSwkJCT0gMSA8PCAzLAorCUlSUV9HQ19CRV9JTwkJCT0gMSA8PCA0LAogfTsKIAogLyoKQEAgLTgyMSw0ICs4NDQsMjIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZ2NfdW5sb2NrKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYykgeyB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGlycV9yZWdfd3JpdGVsKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywKKwkJCQkgIHUzMiB2YWwsIGludCByZWdfb2Zmc2V0KQoreworCWlmIChnYy0+cmVnX3dyaXRlbCkKKwkJZ2MtPnJlZ193cml0ZWwodmFsLCBnYy0+cmVnX2Jhc2UgKyByZWdfb2Zmc2V0KTsKKwllbHNlCisJCXdyaXRlbCh2YWwsIGdjLT5yZWdfYmFzZSArIHJlZ19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBpcnFfcmVnX3JlYWRsKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywKKwkJCQlpbnQgcmVnX29mZnNldCkKK3sKKwlpZiAoZ2MtPnJlZ19yZWFkbCkKKwkJcmV0dXJuIGdjLT5yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgcmVnX29mZnNldCk7CisJZWxzZQorCQlyZXR1cm4gcmVhZGwoZ2MtPnJlZ19iYXNlICsgcmVnX29mZnNldCk7Cit9CisKICNlbmRpZiAvKiBfTElOVVhfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxZG9tYWluLmggYi9pbmNsdWRlL2xpbnV4L2lycWRvbWFpbi5oCmluZGV4IGIwZjlkMTYuLjY3NmQ3MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxZG9tYWluLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFkb21haW4uaApAQCAtMzMsMTEgKzMzLDE0IEBACiAjZGVmaW5lIF9MSU5VWF9JUlFET01BSU5fSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFoYW5kbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmFkaXgtdHJlZS5oPgogCiBzdHJ1Y3QgZGV2aWNlX25vZGU7CiBzdHJ1Y3QgaXJxX2RvbWFpbjsKIHN0cnVjdCBvZl9kZXZpY2VfaWQ7CitzdHJ1Y3QgaXJxX2NoaXA7CitzdHJ1Y3QgaXJxX2RhdGE7CiAKIC8qIE51bWJlciBvZiBpcnFzIHJlc2VydmVkIGZvciBhIGxlZ2FjeSBpc2EgY29udHJvbGxlciAqLwogI2RlZmluZSBOVU1fSVNBX0lOVEVSUlVQVFMJMTYKQEAgLTY0LDYgKzY3LDE2IEBACiAJaW50ICgqeGxhdGUpKHN0cnVjdCBpcnFfZG9tYWluICpkLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJCSAgICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJICAgICB1bnNpZ25lZCBsb25nICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X3R5cGUpOworCisjaWZkZWYJQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZCisJLyogZXh0ZW5kZWQgVjIgaW50ZXJmYWNlcyB0byBzdXBwb3J0IGhpZXJhcmNoeSBpcnFfZG9tYWlucyAqLworCWludCAoKmFsbG9jKShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50IHZpcnEsCisJCSAgICAgdW5zaWduZWQgaW50IG5yX2lycXMsIHZvaWQgKmFyZyk7CisJdm9pZCAoKmZyZWUpKHN0cnVjdCBpcnFfZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJICAgICB1bnNpZ25lZCBpbnQgbnJfaXJxcyk7CisJdm9pZCAoKmFjdGl2YXRlKShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSk7CisJdm9pZCAoKmRlYWN0aXZhdGUpKHN0cnVjdCBpcnFfZG9tYWluICpkLCBzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhKTsKKyNlbmRpZgogfTsKIAogZXh0ZXJuIHN0cnVjdCBpcnFfZG9tYWluX29wcyBpcnFfZ2VuZXJpY19jaGlwX29wczsKQEAgLTc3LDYgKzkwLDcgQEAKICAqIEBvcHM6IHBvaW50ZXIgdG8gaXJxX2RvbWFpbiBtZXRob2RzCiAgKiBAaG9zdF9kYXRhOiBwcml2YXRlIGRhdGEgcG9pbnRlciBmb3IgdXNlIGJ5IG93bmVyLiAgTm90IHRvdWNoZWQgYnkgaXJxX2RvbWFpbgogICogICAgICAgICAgICAgY29yZSBjb2RlLgorICogQGZsYWdzOiBob3N0IHBlciBpcnFfZG9tYWluIGZsYWdzCiAgKgogICogT3B0aW9uYWwgZWxlbWVudHMKICAqIEBvZl9ub2RlOiBQb2ludGVyIHRvIGRldmljZSB0cmVlIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXJxX2RvbWFpbi4gVXNlZApAQCAtODQsNiArOTgsNyBAQAogICogQGdjOiBQb2ludGVyIHRvIGEgbGlzdCBvZiBnZW5lcmljIGNoaXBzLiBUaGVyZSBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IKICAqICAgICAgc2V0dGluZyB1cCBvbmUgb3IgbW9yZSBnZW5lcmljIGNoaXBzIGZvciBpbnRlcnJ1cHQgY29udHJvbGxlcnMKICAqICAgICAgZHJpdmVycyB1c2luZyB0aGUgZ2VuZXJpYyBjaGlwIGxpYnJhcnkgd2hpY2ggdXNlcyB0aGlzIHBvaW50ZXIuCisgKiBAcGFyZW50OiBQb2ludGVyIHRvIHBhcmVudCBpcnFfZG9tYWluIHRvIHN1cHBvcnQgaGllcmFyY2h5IGlycV9kb21haW5zCiAgKgogICogUmV2bWFwIGRhdGEsIHVzZWQgaW50ZXJuYWxseSBieSBpcnFfZG9tYWluCiAgKiBAcmV2bWFwX2RpcmVjdF9tYXhfaXJxOiBUaGUgbGFyZ2VzdCBod2lycSB0aGF0IGNhbiBiZSBzZXQgZm9yIGNvbnRyb2xsZXJzIHRoYXQKQEAgLTk3LDEwICsxMTIsMTQgQEAKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzOwogCXZvaWQgKmhvc3RfZGF0YTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKIAkvKiBPcHRpb25hbCBkYXRhICovCiAJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOwogCXN0cnVjdCBpcnFfZG9tYWluX2NoaXBfZ2VuZXJpYyAqZ2M7CisjaWZkZWYJQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZCisJc3RydWN0IGlycV9kb21haW4gKnBhcmVudDsKKyNlbmRpZgogCiAJLyogcmV2ZXJzZSBtYXAgZGF0YS4gVGhlIGxpbmVhciBtYXAgZ2V0cyBhcHBlbmRlZCB0byB0aGUgaXJxX2RvbWFpbiAqLwogCWlycV9od19udW1iZXJfdCBod2lycV9tYXg7CkBAIC0xMTAsNiArMTI5LDIyIEBACiAJdW5zaWduZWQgaW50IGxpbmVhcl9yZXZtYXBbXTsKIH07CiAKKy8qIElycSBkb21haW4gZmxhZ3MgKi8KK2VudW0geworCS8qIElycSBkb21haW4gaXMgaGllcmFyY2hpY2FsICovCisJSVJRX0RPTUFJTl9GTEFHX0hJRVJBUkNIWQk9ICgxIDw8IDApLAorCisJLyogQ29yZSBjYWxscyBhbGxvYy9mcmVlIHJlY3Vyc2l2ZSB0aHJvdWdoIHRoZSBkb21haW4gaGllcmFyY2h5LiAqLworCUlSUV9ET01BSU5fRkxBR19BVVRPX1JFQ1VSU0lWRQk9ICgxIDw8IDEpLAorCisJLyoKKwkgKiBGbGFncyBzdGFydGluZyBmcm9tIElSUV9ET01BSU5fRkxBR19OT05DT1JFIGFyZSByZXNlcnZlZAorCSAqIGZvciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBwdXJwb3NlcyBhbmQgaWdub3JlZCBieSB0aGUKKwkgKiBjb3JlIGNvZGUuCisJICovCisJSVJRX0RPTUFJTl9GTEFHX05PTkNPUkUJCT0gKDEgPDwgMTYpLAorfTsKKwogI2lmZGVmIENPTkZJR19JUlFfRE9NQUlOCiBzdHJ1Y3QgaXJxX2RvbWFpbiAqX19pcnFfZG9tYWluX2FkZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsIGludCBzaXplLAogCQkJCSAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnFfbWF4LCBpbnQgZGlyZWN0X21heCwKQEAgLTIyMCw4ICsyNTUsNzQgQEAKIAkJCWNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCiAJCQlpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfdHlwZSk7CiAKKy8qIFYyIGludGVyZmFjZXMgdG8gc3VwcG9ydCBoaWVyYXJjaHkgSVJRIGRvbWFpbnMuICovCitleHRlcm4gc3RydWN0IGlycV9kYXRhICppcnFfZG9tYWluX2dldF9pcnFfZGF0YShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQkJdW5zaWduZWQgaW50IHZpcnEpOworI2lmZGVmCUNPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWQorZXh0ZXJuIHN0cnVjdCBpcnFfZG9tYWluICppcnFfZG9tYWluX2FkZF9oaWVyYXJjaHkoc3RydWN0IGlycV9kb21haW4gKnBhcmVudCwKKwkJCXVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNpemUsCisJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQljb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgKm9wcywgdm9pZCAqaG9zdF9kYXRhKTsKK2V4dGVybiBpbnQgX19pcnFfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgaW50IGlycV9iYXNlLAorCQkJCSAgIHVuc2lnbmVkIGludCBucl9pcnFzLCBpbnQgbm9kZSwgdm9pZCAqYXJnLAorCQkJCSAgIGJvb2wgcmVhbGxvYyk7CitleHRlcm4gdm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxcyh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMpOworZXh0ZXJuIHZvaWQgaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSk7CitleHRlcm4gdm9pZCBpcnFfZG9tYWluX2RlYWN0aXZhdGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpOworCitzdGF0aWMgaW5saW5lIGludCBpcnFfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCXVuc2lnbmVkIGludCBucl9pcnFzLCBpbnQgbm9kZSwgdm9pZCAqYXJnKQoreworCXJldHVybiBfX2lycV9kb21haW5fYWxsb2NfaXJxcyhkb21haW4sIC0xLCBucl9pcnFzLCBub2RlLCBhcmcsIGZhbHNlKTsKK30KKworZXh0ZXJuIGludCBpcnFfZG9tYWluX3NldF9od2lycV9hbmRfY2hpcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQkgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJCSBpcnFfaHdfbnVtYmVyX3QgaHdpcnEsCisJCQkJCSBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAsCisJCQkJCSB2b2lkICpjaGlwX2RhdGEpOworZXh0ZXJuIHZvaWQgaXJxX2RvbWFpbl9zZXRfaW5mbyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCQlpcnFfaHdfbnVtYmVyX3QgaHdpcnEsIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCwKKwkJCQl2b2lkICpjaGlwX2RhdGEsIGlycV9mbG93X2hhbmRsZXJfdCBoYW5kbGVyLAorCQkJCXZvaWQgKmhhbmRsZXJfZGF0YSwgY29uc3QgY2hhciAqaGFuZGxlcl9uYW1lKTsKK2V4dGVybiB2b2lkIGlycV9kb21haW5fcmVzZXRfaXJxX2RhdGEoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSk7CitleHRlcm4gdm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc19jb21tb24oc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJdW5zaWduZWQgaW50IHZpcnEsCisJCQkJCXVuc2lnbmVkIGludCBucl9pcnFzKTsKK2V4dGVybiB2b2lkIGlycV9kb21haW5fZnJlZV9pcnFzX3RvcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBucl9pcnFzKTsKKworZXh0ZXJuIGludCBpcnFfZG9tYWluX2FsbG9jX2lycXNfcGFyZW50KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJCXVuc2lnbmVkIGludCBpcnFfYmFzZSwKKwkJCQkJdW5zaWduZWQgaW50IG5yX2lycXMsIHZvaWQgKmFyZyk7CisKK2V4dGVybiB2b2lkIGlycV9kb21haW5fZnJlZV9pcnFzX3BhcmVudChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQl1bnNpZ25lZCBpbnQgaXJxX2Jhc2UsCisJCQkJCXVuc2lnbmVkIGludCBucl9pcnFzKTsKKworc3RhdGljIGlubGluZSBib29sIGlycV9kb21haW5faXNfaGllcmFyY2h5KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4pCit7CisJcmV0dXJuIGRvbWFpbi0+ZmxhZ3MgJiBJUlFfRE9NQUlOX0ZMQUdfSElFUkFSQ0hZOworfQorI2Vsc2UJLyogQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZG9tYWluX2RlYWN0aXZhdGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkgeyB9CitzdGF0aWMgaW5saW5lIGludCBpcnFfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCXVuc2lnbmVkIGludCBucl9pcnFzLCBpbnQgbm9kZSwgdm9pZCAqYXJnKQoreworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlycV9kb21haW5faXNfaGllcmFyY2h5KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4pCit7CisJcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCS8qIENPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWSAqLworCiAjZWxzZSAvKiBDT05GSUdfSVJRX0RPTUFJTiAqLwogc3RhdGljIGlubGluZSB2b2lkIGlycV9kaXNwb3NlX21hcHBpbmcodW5zaWduZWQgaW50IHZpcnEpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGlycV9kb21haW5fYWN0aXZhdGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2RvbWFpbl9kZWFjdGl2YXRlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpIHsgfQogI2VuZGlmIC8qICFDT05GSUdfSVJRX0RPTUFJTiAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0lSUURPTUFJTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycWhhbmRsZXIuaCBiL2luY2x1ZGUvbGludXgvaXJxaGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDU0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lycWhhbmRsZXIuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9MSU5VWF9JUlFIQU5ETEVSX0gKKyNkZWZpbmUgX0xJTlVYX0lSUUhBTkRMRVJfSAorCisvKgorICogSW50ZXJydXB0IGZsb3cgaGFuZGxlciB0eXBlZGVmcyBhcmUgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyCisgKiBpbmNsdWRlIGRlcGVuZGVuY2llcy4KKyAqLworCitzdHJ1Y3QgaXJxX2Rlc2M7CitzdHJ1Y3QgaXJxX2RhdGE7Cit0eXBlZGVmCXZvaWQgKCppcnFfZmxvd19oYW5kbGVyX3QpKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7Cit0eXBlZGVmCXZvaWQgKCppcnFfcHJlZmxvd19oYW5kbGVyX3QpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggM2Q3NzBmNTUuLjQ0NmQ3NmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTYyLDYgKzE2Miw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVAKKyAgdm9pZCBfX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KTsKICAgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpOwogLyoqCiAgKiBtaWdodF9zbGVlcCAtIGFubm90YXRpb24gZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbiBzbGVlcApAQCAtMTc1LDEwICsxNzYsMTQgQEAKICAqLwogIyBkZWZpbmUgbWlnaHRfc2xlZXAoKSBcCiAJZG8geyBfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgMCk7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHNjaGVkX2Fubm90YXRlX3NsZWVwKCkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpCiAjZWxzZQorICBzdGF0aWMgaW5saW5lIHZvaWQgX19fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgaW50IHByZWVtcHRfb2Zmc2V0KSB7IH0KICAgc3RhdGljIGlubGluZSB2b2lkIF9fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCiAJCQkJICAgaW50IHByZWVtcHRfb2Zmc2V0KSB7IH0KICMgZGVmaW5lIG1pZ2h0X3NsZWVwKCkgZG8geyBtaWdodF9yZXNjaGVkKCk7IH0gd2hpbGUgKDApCisjIGRlZmluZSBzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZGVmaW5lIG1pZ2h0X3NsZWVwX2lmKGNvbmQpIGRvIHsgaWYgKGNvbmQpIG1pZ2h0X3NsZWVwKCk7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggODQyMmI0ZS4uYjkzNzZjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtNzcsMTEgKzc3LDYgQEAKIAlyZXR1cm4ga3N0YXRfY3B1KGNwdSkuaXJxc19zdW07CiB9CiAKLS8qCi0gKiBMb2NrL3VubG9jayB0aGUgY3VycmVudCBydW5xdWV1ZSAtIHRvIGV4dHJhY3QgdGFzayBzdGF0aXN0aWNzOgotICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHRhc2tfZGVsdGFfZXhlYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci0KIGV4dGVybiB2b2lkIGFjY291bnRfdXNlcl90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjcHV0aW1lX3QsIGNwdXRpbWVfdCk7CiBleHRlcm4gdm9pZCBhY2NvdW50X3N5c3RlbV90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQsIGNwdXRpbWVfdCwgY3B1dGltZV90KTsKIGV4dGVybiB2b2lkIGFjY291bnRfc3RlYWxfdGltZShjcHV0aW1lX3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IGVhNTNiMDQuLmE2MDU5YmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTcwMyw3ICs3MDMsNyBAQAogaW50IGt2bV9jcHVfaGFzX3BlbmRpbmdfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3ZjcHVfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi1ib29sIGt2bV9pc19tbWlvX3BmbihwZm5fdCBwZm4pOworYm9vbCBrdm1faXNfcmVzZXJ2ZWRfcGZuKHBmbl90IHBmbik7CiAKIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciB7CiAJc3RydWN0IGhsaXN0X25vZGUgbGluazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGJkNWZlZmUuLmJmYmM4MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMTE5MSw5ICsxMTkxLDkgQEAKIGV4dGVybiBpbnQgYXRhX3Njc2lfc2xhdmVfY29uZmlnKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiBleHRlcm4gdm9pZCBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiBleHRlcm4gaW50IGF0YV9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkJICAgICAgIGludCBxdWV1ZV9kZXB0aCwgaW50IHJlYXNvbik7CisJCQkJICAgICAgIGludCBxdWV1ZV9kZXB0aCk7CiBleHRlcm4gaW50IF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkJICAgIGludCBxdWV1ZV9kZXB0aCwgaW50IHJlYXNvbik7CisJCQkJICAgIGludCBxdWV1ZV9kZXB0aCk7CiBleHRlcm4gc3RydWN0IGF0YV9kZXZpY2UgKmF0YV9kZXZfcGFpcihzdHJ1Y3QgYXRhX2RldmljZSAqYWRldik7CiBleHRlcm4gaW50IGF0YV9kb19zZXRfbW9kZShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHN0cnVjdCBhdGFfZGV2aWNlICoqcl9mYWlsZWRfZGV2KTsKIGV4dGVybiB2b2lkIGF0YV9zY3NpX3BvcnRfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvZGVidWcuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvZGVidWcuaAppbmRleCAyNTdkMzc3Li4wY2E4MTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC9kZWJ1Zy5oCkBAIC0xNywxMiArMTcsOCBAQAogICogRW5hYmxlIGxvY2tkIGRlYnVnZ2luZy4KICAqIFJlcXVpcmVzIFJQQ19ERUJVRy4KICAqLwotI2lmZGVmIFJQQ19ERUJVRwotIyBkZWZpbmUgTE9DS0RfREVCVUcJCTEKLSNlbmRpZgotCiAjdW5kZWYgaWZkZWJ1ZwotI2lmIGRlZmluZWQoUlBDX0RFQlVHKSAmJiBkZWZpbmVkKExPQ0tEX0RFQlVHKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIGlmZGVidWcoZmxhZykJCWlmICh1bmxpa2VseShubG1fZGVidWcgJiBOTE1EQkdfIyNmbGFnKSkKICNlbHNlCiAjIGRlZmluZSBpZmRlYnVnKGZsYWcpCQlpZiAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWJ1cy5oIGIvaW5jbHVkZS9saW51eC9tYnVzLmgKaW5kZXggNTUwYzg4Zi4uNjExYjY5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYnVzLmgKQEAgLTYxLDYgKzYxLDcgQEAKIH0KICNlbmRpZgogCitpbnQgbXZlYnVfbWJ1c19zYXZlX2NwdV90YXJnZXQodTMyICpzdG9yZV9hZGRyKTsKIHZvaWQgbXZlYnVfbWJ1c19nZXRfcGNpZV9tZW1fYXBlcnR1cmUoc3RydWN0IHJlc291cmNlICpyZXMpOwogdm9pZCBtdmVidV9tYnVzX2dldF9wY2llX2lvX2FwZXJ0dXJlKHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIGludCBtdmVidV9tYnVzX2FkZF93aW5kb3dfcmVtYXBfYnlfaWQodW5zaWduZWQgaW50IHRhcmdldCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2FieDUwMC9hYjg1MDAtc3lzY3RybC5oIGIvaW5jbHVkZS9saW51eC9tZmQvYWJ4NTAwL2FiODUwMC1zeXNjdHJsLmgKaW5kZXggYWRiYTg5ZC4uNjg5MzEyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvYWJ4NTAwL2FiODUwMC1zeXNjdHJsLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvYWJ4NTAwL2FiODUwMC1zeXNjdHJsLmgKQEAgLTEyLDcgKzEyLDYgQEAKIAogaW50IGFiODUwMF9zeXNjdHJsX3JlYWQodTE2IHJlZywgdTggKnZhbHVlKTsKIGludCBhYjg1MDBfc3lzY3RybF93cml0ZSh1MTYgcmVnLCB1OCBtYXNrLCB1OCB2YWx1ZSk7Ci12b2lkIGFiODUwMF9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKTsKIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvYXJpem9uYS9yZWdpc3RlcnMuaCBiL2luY2x1ZGUvbGludXgvbWZkL2FyaXpvbmEvcmVnaXN0ZXJzLmgKaW5kZXggYzBiMDc1Zi4uYWFjYzEwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvYXJpem9uYS9yZWdpc3RlcnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9hcml6b25hL3JlZ2lzdGVycy5oCkBAIC0xMjUsNiArMTI1LDggQEAKICNkZWZpbmUgQVJJWk9OQV9NSUNfQklBU19DVFJMXzEgICAgICAgICAgICAgICAgICAweDIxOAogI2RlZmluZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMiAgICAgICAgICAgICAgICAgIDB4MjE5CiAjZGVmaW5lIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8zICAgICAgICAgICAgICAgICAgMHgyMUEKKyNkZWZpbmUgQVJJWk9OQV9IUF9DVFJMXzFMICAgICAgICAgICAgICAgICAgICAgICAweDIyNQorI2RlZmluZSBBUklaT05BX0hQX0NUUkxfMVIgICAgICAgICAgICAgICAgICAgICAgIDB4MjI2CiAjZGVmaW5lIEFSSVpPTkFfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzEgICAgICAgICAgMHgyOTMKICNkZWZpbmUgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzEgICAgICAgICAgICAgICAweDI5QgogI2RlZmluZSBBUklaT05BX0hFQURQSE9ORV9ERVRFQ1RfMiAgICAgICAgICAgICAgIDB4MjlDCkBAIC0yNzksOCArMjgxLDE2IEBACiAjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzIgICAgICAgICAgICAgICAgMHg1NDgKICNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMyAgICAgICAgICAgICAgICAweDU0OQogI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF80ICAgICAgICAgICAgICAgIDB4NTRBCisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzUgICAgICAgICAgICAgICAgMHg1NEIKKyNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfNiAgICAgICAgICAgICAgICAweDU0QworI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF83ICAgICAgICAgICAgICAgIDB4NTRECisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzggICAgICAgICAgICAgICAgMHg1NEUKICNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTEgICAgICAgICAgICAgICAweDU1MQogI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xMiAgICAgICAgICAgICAgIDB4NTUyCisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzEzICAgICAgICAgICAgICAgMHg1NTMKKyNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTQgICAgICAgICAgICAgICAweDU1NAorI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xNSAgICAgICAgICAgICAgIDB4NTU1CisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzE2ICAgICAgICAgICAgICAgMHg1NTYKICNkZWZpbmUgQVJJWk9OQV9BSUYyX1RYX0VOQUJMRVMgICAgICAgICAgICAgICAgICAweDU1OQogI2RlZmluZSBBUklaT05BX0FJRjJfUlhfRU5BQkxFUyAgICAgICAgICAgICAgICAgIDB4NTVBCiAjZGVmaW5lIEFSSVpPTkFfQUlGMl9GT1JDRV9XUklURSAgICAgICAgICAgICAgICAgMHg1NUIKQEAgLTIyNDUsNiArMjI1NSw0NiBAQAogI2RlZmluZSBBUklaT05BX01JQ0IzX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjNfRU5BICovCiAKIC8qCisgKiBSNTQ5ICgweDIyNSkgLSBIUCBDdHJsIDFMCisgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFMICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFJNVl9TSFJUX0hQMUwgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFMX01BU0sgICAgICAgICAgICAgICAweDQwMDAgIC8qIFJNVl9TSFJUX0hQMUwgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFMX1NISUZUICAgICAgICAgICAgICAgICAgMTQgIC8qIFJNVl9TSFJUX0hQMUwgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFJNVl9TSFJUX0hQMUwgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFMX0ZMV1IgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQMUxfRkxXUiAqLworI2RlZmluZSBBUklaT05BX0hQMUxfRkxXUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFAxTF9GTFdSICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9GTFdSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBIUDFMX0ZMV1IgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFMX0ZMV1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQMUxfRkxXUiAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVEkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFAxTF9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVElfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFAxTF9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVElfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxTF9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVElfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxTF9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVE8gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFAxTF9TSFJUTyAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVE9fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFAxTF9TSFJUTyAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFAxTF9TSFJUTyAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxTF9TSFJUTyAqLworCisvKgorICogUjU1MCAoMHgyMjYpIC0gSFAgQ3RybCAxUgorICovCisjZGVmaW5lIEFSSVpPTkFfUk1WX1NIUlRfSFAxUiAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBSTVZfU0hSVF9IUDFSICovCisjZGVmaW5lIEFSSVpPTkFfUk1WX1NIUlRfSFAxUl9NQVNLICAgICAgICAgICAgICAgMHg0MDAwICAvKiBSTVZfU0hSVF9IUDFSICovCisjZGVmaW5lIEFSSVpPTkFfUk1WX1NIUlRfSFAxUl9TSElGVCAgICAgICAgICAgICAgICAgIDE0ICAvKiBSTVZfU0hSVF9IUDFSICovCisjZGVmaW5lIEFSSVpPTkFfUk1WX1NIUlRfSFAxUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBSTVZfU0hSVF9IUDFSICovCisjZGVmaW5lIEFSSVpPTkFfSFAxUl9GTFdSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUDFSX0ZMV1IgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX0ZMV1JfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQMVJfRkxXUiAqLworI2RlZmluZSBBUklaT05BX0hQMVJfRkxXUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSFAxUl9GTFdSICovCisjZGVmaW5lIEFSSVpPTkFfSFAxUl9GTFdSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUDFSX0ZMV1IgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRJICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQMVJfU0hSVEkgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRJX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQMVJfU0hSVEkgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRJX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQMVJfU0hSVEkgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQMVJfU0hSVEkgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRPICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQMVJfU0hSVE8gKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRPX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQMVJfU0hSVE8gKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRPX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQMVJfU0hSVE8gKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQMVJfU0hSVE8gKi8KKworLyoKICAqIFI2NTkgKDB4MjkzKSAtIEFjY2Vzc29yeSBEZXRlY3QgTW9kZSAxCiAgKi8KICNkZWZpbmUgQVJJWk9OQV9BQ0NERVRfU1JDICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFDQ0RFVF9TUkMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2F0bWVsLWhsY2RjLmggYi9pbmNsdWRlL2xpbnV4L21mZC9hdG1lbC1obGNkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzlhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9hdG1lbC1obGNkYy5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBFbGVjdHJvbnMKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBdG1lbAorICoKKyAqIEF1dGhvcjogQm9yaXMgQlJFWklMTE9OIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9ITENEQ19ICisjZGVmaW5lIF9fTElOVVhfTUZEX0hMQ0RDX0gKKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NGRyhpKQkJKChpKSAqIDB4NCkKKyNkZWZpbmUgQVRNRUxfSExDRENfU0lHX0NGRwkJTENEQ0ZHKDUpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0hTUE9MCQlCSVQoMCkKKyNkZWZpbmUgQVRNRUxfSExDRENfVlNQT0wJCUJJVCgxKQorI2RlZmluZSBBVE1FTF9ITENEQ19WU1BETFlTCQlCSVQoMikKKyNkZWZpbmUgQVRNRUxfSExDRENfVlNQRExZRQkJQklUKDMpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0RJU1BQT0wJCUJJVCg0KQorI2RlZmluZSBBVE1FTF9ITENEQ19ESVRIRVIJCUJJVCg2KQorI2RlZmluZSBBVE1FTF9ITENEQ19ESVNQRExZCQlCSVQoNykKKyNkZWZpbmUgQVRNRUxfSExDRENfTU9ERV9NQVNLCQlHRU5NQVNLKDksIDgpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX1BQCQkJQklUKDEwKQorI2RlZmluZSBBVE1FTF9ITENEQ19WU1BTVQkJQklUKDEyKQorI2RlZmluZSBBVE1FTF9ITENEQ19WU1BITwkJQklUKDEzKQorI2RlZmluZSBBVE1FTF9ITENEQ19HVUFSRFRJTUVfTUFTSwlHRU5NQVNLKDIwLCAxNikKKworI2RlZmluZSBBVE1FTF9ITENEQ19FTgkJCTB4MjAKKyNkZWZpbmUgQVRNRUxfSExDRENfRElTCQkJMHgyNAorI2RlZmluZSBBVE1FTF9ITENEQ19TUgkJCTB4MjgKKyNkZWZpbmUgQVRNRUxfSExDRENfSUVSCQkJMHgyYworI2RlZmluZSBBVE1FTF9ITENEQ19JRFIJCQkweDMwCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0lNUgkJCTB4MzQKKyNkZWZpbmUgQVRNRUxfSExDRENfSVNSCQkJMHgzOAorCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NMS1BPTAkJQklUKDApCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NMS1NFTAkJQklUKDIpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NMS1BXTVNFTAkJQklUKDMpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NHRElTKGkpCQlCSVQoOCArIChpKSkKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0xLRElWX1NIRlQJCTE2CisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NMS0RJVl9NQVNLCQlHRU5NQVNLKDIzLCAxNikKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0xLRElWKGRpdikJCSgoZGl2IC0gMikgPDwgQVRNRUxfSExDRENfQ0xLRElWX1NIRlQpCisKKyNkZWZpbmUgQVRNRUxfSExDRENfUElYRUxfQ0xLCQlCSVQoMCkKKyNkZWZpbmUgQVRNRUxfSExDRENfU1lOQwkJQklUKDEpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0RJU1AJCUJJVCgyKQorI2RlZmluZSBBVE1FTF9ITENEQ19QV00JCQlCSVQoMykKKyNkZWZpbmUgQVRNRUxfSExDRENfU0lQCQkJQklUKDQpCisKKyNkZWZpbmUgQVRNRUxfSExDRENfU09GCQkJQklUKDApCisjZGVmaW5lIEFUTUVMX0hMQ0RDX1NZTkNESVMJCUJJVCgxKQorI2RlZmluZSBBVE1FTF9ITENEQ19GSUZPRVJSCQlCSVQoNCkKKyNkZWZpbmUgQVRNRUxfSExDRENfTEFZRVJfU1RBVFVTKHgpCUJJVCgoeCkgKyA4KQorCisvKioKKyAqIFN0cnVjdHVyZSBzaGFyZWQgYnkgdGhlIE1GRCBkZXZpY2UgYW5kIGl0cyBzdWJkZXZpY2VzLgorICoKKyAqIEByZWdtYXA6IHJlZ2lzdGVyIG1hcCB1c2VkIHRvIGFjY2VzcyBITENEQyBJUCByZWdpc3RlcnMKKyAqIEBwZXJpcGhfY2xrOiB0aGUgaGxjZGMgcGVyaXBoZXJhbCBjbG9jaworICogQHN5c19jbGs6IHRoZSBobGNkYyBzeXN0ZW0gY2xvY2sKKyAqIEBzbG93X2NsazogdGhlIHN5c3RlbSBzbG93IGNsaworICogQGlycTogdGhlIGhsY2RjIGlycQorICovCitzdHJ1Y3QgYXRtZWxfaGxjZGMgeworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgY2xrICpwZXJpcGhfY2xrOworCXN0cnVjdCBjbGsgKnN5c19jbGs7CisJc3RydWN0IGNsayAqc2xvd19jbGs7CisJaW50IGlycTsKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX01GRF9ITENEQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9heHAyMHguaCBiL2luY2x1ZGUvbGludXgvbWZkL2F4cDIweC5oCmluZGV4IGQwZTMxYTIuLjgxNTg5ZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL2F4cDIweC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2F4cDIweC5oCkBAIC0xNCw2ICsxNCw4IEBACiBlbnVtIHsKIAlBWFAyMDJfSUQgPSAwLAogCUFYUDIwOV9JRCwKKwlBWFAyODhfSUQsCisJTlJfQVhQMjBYX1ZBUklBTlRTLAogfTsKIAogI2RlZmluZSBBWFAyMFhfREFUQUNBQ0hFKG0pCQkoMHgwNCArIChtKSkKQEAgLTQ5LDExICs1MSwxMyBAQAogI2RlZmluZSBBWFAyMFhfSVJRM19FTgkJCTB4NDIKICNkZWZpbmUgQVhQMjBYX0lSUTRfRU4JCQkweDQzCiAjZGVmaW5lIEFYUDIwWF9JUlE1X0VOCQkJMHg0NAorI2RlZmluZSBBWFAyMFhfSVJRNl9FTgkJCTB4NDUKICNkZWZpbmUgQVhQMjBYX0lSUTFfU1RBVEUJCTB4NDgKICNkZWZpbmUgQVhQMjBYX0lSUTJfU1RBVEUJCTB4NDkKICNkZWZpbmUgQVhQMjBYX0lSUTNfU1RBVEUJCTB4NGEKICNkZWZpbmUgQVhQMjBYX0lSUTRfU1RBVEUJCTB4NGIKICNkZWZpbmUgQVhQMjBYX0lSUTVfU1RBVEUJCTB4NGMKKyNkZWZpbmUgQVhQMjBYX0lSUTZfU1RBVEUJCTB4NGQKIAogLyogQURDICovCiAjZGVmaW5lIEFYUDIwWF9BQ0lOX1ZfQURDX0gJCTB4NTYKQEAgLTExNiw2ICsxMjAsMTUgQEAKICNkZWZpbmUgQVhQMjBYX0NDX0NUUkwJCQkweGI4CiAjZGVmaW5lIEFYUDIwWF9GR19SRVMJCQkweGI5CiAKKy8qIEFYUDI4OCBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVhQMjg4X1BNSUNfQURDX0ggICAgICAgICAgICAgICAweDU2CisjZGVmaW5lIEFYUDI4OF9QTUlDX0FEQ19MICAgICAgICAgICAgICAgMHg1NworI2RlZmluZSBBWFAyODhfQURDX1RTX1BJTl9DVFJMICAgICAgICAgIDB4ODQKKworI2RlZmluZSBBWFAyODhfUE1JQ19BRENfRU4gICAgICAgICAgICAgIDB4ODQKKyNkZWZpbmUgQVhQMjg4X0ZHX1RVTkU1CQkJMHhlZAorCisKIC8qIFJlZ3VsYXRvcnMgSURzICovCiBlbnVtIHsKIAlBWFAyMFhfTERPMSA9IDAsCkBAIC0xNjksMTIgKzE4Miw1OCBAQAogCUFYUDIwWF9JUlFfR1BJTzBfSU5QVVQsCiB9OwogCitlbnVtIGF4cDI4OF9pcnFzIHsKKwlBWFAyODhfSVJRX1ZCVVNfRkFMTCAgICAgPSAyLAorCUFYUDI4OF9JUlFfVkJVU19SSVNFLAorCUFYUDI4OF9JUlFfT1YsCisJQVhQMjg4X0lSUV9GQUxMSU5HX0FMVCwKKwlBWFAyODhfSVJRX1JJU0lOR19BTFQsCisJQVhQMjg4X0lSUV9PVl9BTFQsCisJQVhQMjg4X0lSUV9ET05FICAgICAgICAgID0gMTAsCisJQVhQMjg4X0lSUV9DSEFSR0lORywKKwlBWFAyODhfSVJRX1NBRkVfUVVJVCwKKwlBWFAyODhfSVJRX1NBRkVfRU5URVIsCisJQVhQMjg4X0lSUV9BQlNFTlQsCisJQVhQMjg4X0lSUV9BUFBFTkQsCisJQVhQMjg4X0lSUV9RV0JUVSwKKwlBWFAyODhfSVJRX1dCVFUsCisJQVhQMjg4X0lSUV9RV0JUTywKKwlBWFAyODhfSVJRX1dCVE8sCisJQVhQMjg4X0lSUV9RQ0JUVSwKKwlBWFAyODhfSVJRX0NCVFUsCisJQVhQMjg4X0lSUV9RQ0JUTywKKwlBWFAyODhfSVJRX0NCVE8sCisJQVhQMjg4X0lSUV9XTDIsCisJQVhQMjg4X0lSUV9XTDEsCisJQVhQMjg4X0lSUV9HUEFEQywKKwlBWFAyODhfSVJRX09UICAgICAgICAgICAgPSAzMSwKKwlBWFAyODhfSVJRX0dQSU8wLAorCUFYUDI4OF9JUlFfR1BJTzEsCisJQVhQMjg4X0lSUV9QT0tPLAorCUFYUDI4OF9JUlFfUE9LTCwKKwlBWFAyODhfSVJRX1BPS1MsCisJQVhQMjg4X0lSUV9QT0tOLAorCUFYUDI4OF9JUlFfUE9LUCwKKwlBWFAyODhfSVJRX1RJTUVSLAorCUFYUDI4OF9JUlFfTVZfQ0hORywKKwlBWFAyODhfSVJRX0JDX1VTQl9DSE5HLAorfTsKKworI2RlZmluZSBBWFAyODhfVFNfQURDX0gJCTB4NTgKKyNkZWZpbmUgQVhQMjg4X1RTX0FEQ19MCQkweDU5CisjZGVmaW5lIEFYUDI4OF9HUF9BRENfSAkJMHg1YQorI2RlZmluZSBBWFAyODhfR1BfQURDX0wJCTB4NWIKKwogc3RydWN0IGF4cDIweF9kZXYgewogCXN0cnVjdCBkZXZpY2UJCQkqZGV2OwogCXN0cnVjdCBpMmNfY2xpZW50CQkqaTJjX2NsaWVudDsKIAlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKIAlzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwX2RhdGEJKnJlZ21hcF9pcnFjOwogCWxvbmcJCQkJdmFyaWFudDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yX2NlbGxzOworCXN0cnVjdCBtZmRfY2VsbCAgICAgICAgICAgICAgICAgKmNlbGxzOworCWNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnCSpyZWdtYXBfY2ZnOworCWNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAJKnJlZ21hcF9pcnFfY2hpcDsKIH07CiAKICNlbmRpZiAvKiBfX0xJTlVYX01GRF9BWFAyMFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oCmluZGV4IDczZTE3MDkuLmE3NmJjMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9jb3JlLmgKQEAgLTExMSw2ICsxMTEsMTMgQEAKIAkJCSAgIHN0cnVjdCByZXNvdXJjZSAqbWVtX2Jhc2UsCiAJCQkgICBpbnQgaXJxX2Jhc2UsIHN0cnVjdCBpcnFfZG9tYWluICppcnFfZG9tYWluKTsKIAorc3RhdGljIGlubGluZSBpbnQgbWZkX2FkZF9ob3RwbHVnX2RldmljZXMoc3RydWN0IGRldmljZSAqcGFyZW50LAorCQljb25zdCBzdHJ1Y3QgbWZkX2NlbGwgKmNlbGxzLCBpbnQgbl9kZXZzKQoreworCXJldHVybiBtZmRfYWRkX2RldmljZXMocGFyZW50LCBQTEFURk9STV9ERVZJRF9BVVRPLCBjZWxscywgbl9kZXZzLAorCQkJTlVMTCwgMCwgTlVMTCk7Cit9CisKIGV4dGVybiB2b2lkIG1mZF9yZW1vdmVfZGV2aWNlcyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2RsbjIuaCBiL2luY2x1ZGUvbGludXgvbWZkL2RsbjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDRiMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvZGxuMi5oCkBAIC0wLDAgKzEsMTAzIEBACisjaWZuZGVmIF9fTElOVVhfVVNCX0RMTjJfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9ETE4yX0gKKworI2RlZmluZSBETE4yX0NNRChjbWQsIGlkKQkJKChjbWQpIHwgKChpZCkgPDwgOCkpCisKK3N0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEgeworCXUxNiBoYW5kbGU7CQkvKiBzdWItZHJpdmVyIGhhbmRsZSAoaW50ZXJuYWxseSB1c2VkIG9ubHkpICovCisJdTggcG9ydDsJCS8qIEkyQy9TUEkgcG9ydCAqLworfTsKKworLyoqCisgKiBkbG4yX2V2ZW50X2NiX3QgLSBldmVudCBjYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmUKKyAqCisgKiBAcGRldiAtIHRoZSBzdWItZGV2aWNlIHRoYXQgcmVnaXN0ZXJlZCB0aGlzIGNhbGxiYWNrCisgKiBAZWNobyAtIHRoZSBlY2hvIGhlYWRlciBmaWVsZCByZWNlaXZlZCBpbiB0aGUgbWVzc2FnZQorICogQGRhdGEgLSB0aGUgZGF0YSBwYXlsb2FkCisgKiBAbGVuICAtIHRoZSBkYXRhIHBheWxvYWQgbGVuZ3RoCisgKgorICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCBhbmQgdGhlIGRhdGEgcGF5bG9hZCBpcworICogb25seSB2YWxpZCBkdXJpbmcgdGhlIGNhbGwuIElmIHRoZSB1c2VyIG5lZWRzIGxhdGVyIGFjY2VzcyBvZiB0aGUgZGF0YSwgaXQKKyAqIG11c3QgY29weSBpdC4KKyAqLworCit0eXBlZGVmIHZvaWQgKCpkbG4yX2V2ZW50X2NiX3QpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBlY2hvLAorCQkJCWNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pOworCisvKioKKyAqIGRsMm5fcmVnaXN0ZXJfZXZlbnRfY2IgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbiBldmVudAorICoKKyAqIEBwZGV2IC0gdGhlIHN1Yi1kZXZpY2UgdGhhdCByZWdpc3RlcnMgdGhlIGNhbGxiYWNrCisgKiBAZXZlbnQgLSB0aGUgZXZlbnQgZm9yIHdoaWNoIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sKKyAqIEBldmVudF9jYiAtIHRoZSBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEByZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGluIGNhc2Ugb2YgZXJyb3IKKyAqLworaW50IGRsbjJfcmVnaXN0ZXJfZXZlbnRfY2Ioc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGV2ZW50LAorCQkJICAgZGxuMl9ldmVudF9jYl90IGV2ZW50X2NiKTsKKworLyoqCisgKiBkbG4yX3VucmVnaXN0ZXJfZXZlbnRfY2IgLSB1bnJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYW4gZXZlbnQKKyAqCisgKiBAcGRldiAtIHRoZSBzdWItZGV2aWNlIHRoYXQgcmVnaXN0ZXJlZCB0aGUgY2FsbGJhY2sKKyAqIEBldmVudCAtIHRoZSBldmVudCBmb3Igd2hpY2ggdG8gcmVnaXN0ZXIgYSBjYWxsYmFjaworICovCit2b2lkIGRsbjJfdW5yZWdpc3Rlcl9ldmVudF9jYihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1MTYgZXZlbnQpOworCisvKioKKyAqIGRsbjJfdHJhbnNmZXIgLSBpc3N1ZSBhIERMTjIgY29tbWFuZCBhbmQgd2FpdCBmb3IgYSByZXNwb25zZSBhbmQgdGhlCisgKiBhc3NvY2lhdGVkIGRhdGEKKyAqCisgKiBAcGRldiAtIHRoZSBzdWItZGV2aWNlIHdoaWNoIGlzIGlzc3VpbmcgdGhpcyB0cmFuc2ZlcgorICogQGNtZCAtIHRoZSBjb21tYW5kIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZQorICogQG9idWYgLSB0aGUgYnVmZmVyIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZTsgaXQgY2FuIGJlIE5VTEwgaWYgdGhlIHVzZXIKKyAqCWRvZXNuJ3QgbmVlZCB0byB0cmFuc21pdCBkYXRhIHdpdGggdGhpcyBjb21tYW5kCisgKiBAb2J1Zl9sZW4gLSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZQorICogQGlidWYgLSBhbnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3BvbnNlIHdpbGwgYmUgY29waWVkIGhlcmU7IGl0IGNhbiBiZQorICoJTlVMTCBpZiB0aGUgdXNlciBkb2Vzbid0IG5lZWQgdGhlIHJlc3BvbnNlIGRhdGEKKyAqIEBpYnVmX2xlbiAtIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gdGhlIGlucHV0IGJ1ZmZlciBzaXplOyBpdCB3aWxsIGJlIG1vZGlmaWVkCisgKgl0byBpbmRpY2F0ZSB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXJyZWQ7CisgKgorICogQHJldHVybiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZXJyb3JzCisgKi8KK2ludCBkbG4yX3RyYW5zZmVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBjbWQsCisJCSAgY29uc3Qgdm9pZCAqb2J1ZiwgdW5zaWduZWQgb2J1Zl9sZW4sCisJCSAgdm9pZCAqaWJ1ZiwgdW5zaWduZWQgKmlidWZfbGVuKTsKKworLyoqCisgKiBkbG4yX3RyYW5zZmVyX3J4IC0gdmFyaWFudCBvZiBAZGxuMl90cmFuc2ZlcigpIHdoZXJlIFRYIGJ1ZmZlciBpcyBub3QgbmVlZGVkCisgKgorICogQHBkZXYgLSB0aGUgc3ViLWRldmljZSB3aGljaCBpcyBpc3N1aW5nIHRoaXMgdHJhbnNmZXIKKyAqIEBjbWQgLSB0aGUgY29tbWFuZCB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2UKKyAqIEBpYnVmIC0gYW55IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNwb25zZSB3aWxsIGJlIGNvcGllZCBoZXJlOyBpdCBjYW4gYmUKKyAqCU5VTEwgaWYgdGhlIHVzZXIgZG9lc24ndCBuZWVkIHRoZSByZXNwb25zZSBkYXRhCisgKiBAaWJ1Zl9sZW4gLSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHRoZSBpbnB1dCBidWZmZXIgc2l6ZTsgaXQgd2lsbCBiZSBtb2RpZmllZAorICoJdG8gaW5kaWNhdGUgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVycmVkOworICoKKyAqIEByZXR1cm4gMCBmb3Igc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgZm9yIGVycm9ycworICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGRsbjJfdHJhbnNmZXJfcngoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGNtZCwKKwkJCQkgICB2b2lkICppYnVmLCB1bnNpZ25lZCAqaWJ1Zl9sZW4pCit7CisJcmV0dXJuIGRsbjJfdHJhbnNmZXIocGRldiwgY21kLCBOVUxMLCAwLCBpYnVmLCBpYnVmX2xlbik7Cit9CisKKy8qKgorICogZGxuMl90cmFuc2Zlcl90eCAtIHZhcmlhbnQgb2YgQGRsbjJfdHJhbnNmZXIoKSB3aGVyZSBSWCBidWZmZXIgaXMgbm90IG5lZWRlZAorICoKKyAqIEBwZGV2IC0gdGhlIHN1Yi1kZXZpY2Ugd2hpY2ggaXMgaXNzdWluZyB0aGlzIHRyYW5zZmVyCisgKiBAY21kIC0gdGhlIGNvbW1hbmQgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlCisgKiBAb2J1ZiAtIHRoZSBidWZmZXIgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlOyBpdCBjYW4gYmUgTlVMTCBpZiB0aGUKKyAqCXVzZXIgZG9lc24ndCBuZWVkIHRvIHRyYW5zbWl0IGRhdGEgd2l0aCB0aGlzIGNvbW1hbmQKKyAqIEBvYnVmX2xlbiAtIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlCisgKgorICogQHJldHVybiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZXJyb3JzCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRsbjJfdHJhbnNmZXJfdHgoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGNtZCwKKwkJCQkgICBjb25zdCB2b2lkICpvYnVmLCB1bnNpZ25lZCBvYnVmX2xlbikKK3sKKwlyZXR1cm4gZGxuMl90cmFuc2ZlcihwZGV2LCBjbWQsIG9idWYsIG9idWZfbGVuLCBOVUxMLCBOVUxMKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY4Ni5oIGIvaW5jbHVkZS9saW51eC9tZmQvbWF4Nzc2ODYuaAppbmRleCA3ZTZkYzRiLi41NTNmN2QwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY4Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL21heDc3Njg2LmgKQEAgLTEzMSwxMyArMTMxLDYgQEAKIAlNQVg3NzY4Nl9PUE1PREVfU1RBTkRCWSwKIH07CiAKLWVudW0gbWF4Nzc4MDJfb3Btb2RlIHsKLQlNQVg3NzgwMl9PUE1PREVfT0ZGLAotCU1BWDc3ODAyX09QTU9ERV9TVEFOREJZLAotCU1BWDc3ODAyX09QTU9ERV9MUCwKLQlNQVg3NzgwMl9PUE1PREVfTk9STUFMLAotfTsKLQogc3RydWN0IG1heDc3Njg2X29wbW9kZV9kYXRhIHsKIAlpbnQgaWQ7CiAJaW50IG1vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY5My1wcml2YXRlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY5My1wcml2YXRlLmgKaW5kZXggZmMxN2Q1Ni4uMDhkYWUwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvbWF4Nzc2OTMtcHJpdmF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL21heDc3NjkzLXByaXZhdGUuaApAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKLSNkZWZpbmUgTUFYNzc2OTNfTlVNX0lSUV9NVUlDX1JFR1MJMwogI2RlZmluZSBNQVg3NzY5M19SRUdfSU5WQUxJRAkJKDB4ZmYpCiAKIC8qIFNsYXZlIGFkZHIgPSAweENDOiBQTUlDLCBDaGFyZ2VyLCBGbGFzaCBMRUQgKi8KQEAgLTMzMCw2ICszMjksMTMgQEAKIAlNQVg3NzY5M19JUlFfR1JPVVBfTlIsCiB9OwogCisjZGVmaW5lIFNSQ19JUlFfQ0hBUkdFUgkJCUJJVCgwKQorI2RlZmluZSBTUkNfSVJRX1RPUAkJCUJJVCgxKQorI2RlZmluZSBTUkNfSVJRX0ZMQVNICQkJQklUKDIpCisjZGVmaW5lIFNSQ19JUlFfTVVJQwkJCUJJVCgzKQorI2RlZmluZSBTUkNfSVJRX0FMTAkJCShTUkNfSVJRX0NIQVJHRVIgfCBTUkNfSVJRX1RPUCBcCisJCQkJCQl8IFNSQ19JUlFfRkxBU0ggfCBTUkNfSVJRX01VSUMpCisKICNkZWZpbmUgTEVEX0lSUV9GTEVEMl9PUEVOCQlCSVQoMCkKICNkZWZpbmUgTEVEX0lSUV9GTEVEMl9TSE9SVAkJQklUKDEpCiAjZGVmaW5lIExFRF9JUlFfRkxFRDFfT1BFTgkJQklUKDIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9ydHN4X3BjaS5oIGIvaW5jbHVkZS9saW51eC9tZmQvcnRzeF9wY2kuaAppbmRleCA3NDM0NmQ1Li4wYzEyNjI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9ydHN4X3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3J0c3hfcGNpLmgKQEAgLTU1OCw2ICs1NTgsNyBAQAogI2RlZmluZSBTRF9TQU1QTEVfUE9JTlRfQ1RMCQkweEZEQTcKICNkZWZpbmUgU0RfUFVTSF9QT0lOVF9DVEwJCTB4RkRBOAogI2RlZmluZSBTRF9DTUQwCQkJCTB4RkRBOQorI2RlZmluZSAgIFNEX0NNRF9TVEFSVAkJCTB4NDAKICNkZWZpbmUgU0RfQ01EMQkJCQkweEZEQUEKICNkZWZpbmUgU0RfQ01EMgkJCQkweEZEQUIKICNkZWZpbmUgU0RfQ01EMwkJCQkweEZEQUMKQEAgLTcwNyw2ICs3MDgsMTQgQEAKICNkZWZpbmUgUE1fQ1RSTDEJCQkweEZGNDQKICNkZWZpbmUgUE1fQ1RSTDIJCQkweEZGNDUKICNkZWZpbmUgUE1fQ1RSTDMJCQkweEZGNDYKKyNkZWZpbmUgICBTRElPX1NFTkRfUE1FX0VOCQkweDgwCisjZGVmaW5lICAgRk9SQ0VfUkNfTU9ERV9PTgkJMHg0MAorI2RlZmluZSAgIEZPUkNFX1JYNTBfTElOS19PTgkJMHgyMAorI2RlZmluZSAgIEQzX0RFTElOS19NT0RFX0VOCQkweDEwCisjZGVmaW5lICAgVVNFX1BFU1JUQl9DVExfREVMSU5LCQkweDA4CisjZGVmaW5lICAgREVMQVlfUElOX1dBS0UJCTB4MDQKKyNkZWZpbmUgICBSRVNFVF9QSU5fV0FLRQkJMHgwMgorI2RlZmluZSAgIFBNX1dBS0VfRU4JCQkweDAxCiAjZGVmaW5lIFBNX0NUUkw0CQkJMHhGRjQ3CiAKIC8qIE1lbW9yeSBtYXBwaW5nICovCkBAIC03NTIsNiArNzYxLDE0IEBACiAjZGVmaW5lIFBIWV9EVU1fUkVHCQkJMHgxRgogCiAjZGVmaW5lIExDVExSCQkJCTB4ODAKKyNkZWZpbmUgICBMQ1RMUl9FWFRfU1lOQwkJMHg4MAorI2RlZmluZSAgIExDVExSX0NPTU1PTl9DTE9DS19DRkcJMHg0MAorI2RlZmluZSAgIExDVExSX1JFVFJBSU5fTElOSwkJMHgyMAorI2RlZmluZSAgIExDVExSX0xJTktfRElTQUJMRQkJMHgxMAorI2RlZmluZSAgIExDVExSX1JDQgkJCTB4MDgKKyNkZWZpbmUgICBMQ1RMUl9SRVNFUlZFRAkJMHgwNAorI2RlZmluZSAgIExDVExSX0FTUE1fQ1RMX01BU0sJCTB4MDMKKwogI2RlZmluZSBQQ1JfU0VUVElOR19SRUcxCQkweDcyNAogI2RlZmluZSBQQ1JfU0VUVElOR19SRUcyCQkweDgxNAogI2RlZmluZSBQQ1JfU0VUVElOR19SRUczCQkweDc0NwpAQCAtOTY3LDQgKzk4NCwyNCBAQAogCXJldHVybiAodTggKikocGNyLT5ob3N0X2NtZHNfcHRyKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcnRzeF9wY2lfdXBkYXRlX2NmZ19ieXRlKHN0cnVjdCBydHN4X3BjciAqcGNyLCBpbnQgYWRkciwKKwkJdTggbWFzaywgdTggYXBwZW5kKQoreworCWludCBlcnI7CisJdTggdmFsOworCisJZXJyID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGNyLT5wY2ksIGFkZHIsICZ2YWwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJldHVybiBwY2lfd3JpdGVfY29uZmlnX2J5dGUocGNyLT5wY2ksIGFkZHIsICh2YWwgJiBtYXNrKSB8IGFwcGVuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydHN4X3BjaV93cml0ZV9iZTMyKHN0cnVjdCBydHN4X3BjciAqcGNyLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCByZWcsICAgICAweEZGLCB2YWwgPj4gMjQpOworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCByZWcgKyAxLCAweEZGLCB2YWwgPj4gMTYpOworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCByZWcgKyAyLCAweEZGLCB2YWwgPj4gOCk7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIHJlZyArIDMsIDB4RkYsIHZhbCk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvc2Ftc3VuZy9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL2NvcmUuaAppbmRleCAxODI1ZWRhLi4zZmRiN2NmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc2Ftc3VuZy9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvc2Ftc3VuZy9jb3JlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgTUlOXzgwMF9NVgkJODAwMDAwCiAjZGVmaW5lIE1JTl83NTBfTVYJCTc1MDAwMAogI2RlZmluZSBNSU5fNjAwX01WCQk2MDAwMDAKKyNkZWZpbmUgTUlOXzUwMF9NVgkJNTAwMDAwCiAKIC8qIE1hY3JvcyB0byByZXByZXNlbnQgc3RlcHMgZm9yIExETy9CVUNLICovCiAjZGVmaW5lIFNURVBfNTBfTVYJCTUwMDAwCkBAIC00MSw2ICs0Miw3IEBACiAJUzVNODc2N1gsCiAJUzJNUEEwMSwKIAlTMk1QUzExWCwKKwlTMk1QUzEzWCwKIAlTMk1QUzE0WCwKIAlTMk1QVTAyLAogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oIGIvaW5jbHVkZS9saW51eC9tZmQvc2Ftc3VuZy9zMm1wczEzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1ZGRhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogczJtcHMxMy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKyAqICAgICAgICAgICAgICBodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX1MyTVBTMTNfSAorI2RlZmluZSBfX0xJTlVYX01GRF9TMk1QUzEzX0gKKworLyogUzJNUFMxMyByZWdpc3RlcnMgKi8KK2VudW0gczJtcHMxM19yZWcgeworCVMyTVBTMTNfUkVHX0lELAorCVMyTVBTMTNfUkVHX0lOVDEsCisJUzJNUFMxM19SRUdfSU5UMiwKKwlTMk1QUzEzX1JFR19JTlQzLAorCVMyTVBTMTNfUkVHX0lOVDFNLAorCVMyTVBTMTNfUkVHX0lOVDJNLAorCVMyTVBTMTNfUkVHX0lOVDNNLAorCVMyTVBTMTNfUkVHX1NUMSwKKwlTMk1QUzEzX1JFR19TVDIsCisJUzJNUFMxM19SRUdfUFdST05TUkMsCisJUzJNUFMxM19SRUdfT0ZGU1JDLAorCVMyTVBTMTNfUkVHX0JVX0NIRywKKwlTMk1QUzEzX1JFR19SVENDVFJMLAorCVMyTVBTMTNfUkVHX0NUUkwxLAorCVMyTVBTMTNfUkVHX0NUUkwyLAorCVMyTVBTMTNfUkVHX1JTVkQxLAorCVMyTVBTMTNfUkVHX1JTVkQyLAorCVMyTVBTMTNfUkVHX1JTVkQzLAorCVMyTVBTMTNfUkVHX1JTVkQ0LAorCVMyTVBTMTNfUkVHX1JTVkQ1LAorCVMyTVBTMTNfUkVHX1JTVkQ2LAorCVMyTVBTMTNfUkVHX0NUUkwzLAorCVMyTVBTMTNfUkVHX1JTVkQ3LAorCVMyTVBTMTNfUkVHX1JTVkQ4LAorCVMyTVBTMTNfUkVHX1dSU1RCSSwKKwlTMk1QUzEzX1JFR19CMUNUUkwsCisJUzJNUFMxM19SRUdfQjFPVVQsCisJUzJNUFMxM19SRUdfQjJDVFJMLAorCVMyTVBTMTNfUkVHX0IyT1VULAorCVMyTVBTMTNfUkVHX0IzQ1RSTCwKKwlTMk1QUzEzX1JFR19CM09VVCwKKwlTMk1QUzEzX1JFR19CNENUUkwsCisJUzJNUFMxM19SRUdfQjRPVVQsCisJUzJNUFMxM19SRUdfQjVDVFJMLAorCVMyTVBTMTNfUkVHX0I1T1VULAorCVMyTVBTMTNfUkVHX0I2Q1RSTCwKKwlTMk1QUzEzX1JFR19CNk9VVCwKKwlTMk1QUzEzX1JFR19CN0NUUkwsCisJUzJNUFMxM19SRUdfQjdPVVQsCisJUzJNUFMxM19SRUdfQjhDVFJMLAorCVMyTVBTMTNfUkVHX0I4T1VULAorCVMyTVBTMTNfUkVHX0I5Q1RSTCwKKwlTMk1QUzEzX1JFR19COU9VVCwKKwlTMk1QUzEzX1JFR19CMTBDVFJMLAorCVMyTVBTMTNfUkVHX0IxME9VVCwKKwlTMk1QUzEzX1JFR19CQjFDVFJMLAorCVMyTVBTMTNfUkVHX0JCMU9VVCwKKwlTMk1QUzEzX1JFR19CVUNLX1JBTVAxLAorCVMyTVBTMTNfUkVHX0JVQ0tfUkFNUDIsCisJUzJNUFMxM19SRUdfTERPX0RWUzEsCisJUzJNUFMxM19SRUdfTERPX0RWUzIsCisJUzJNUFMxM19SRUdfTERPX0RWUzMsCisJUzJNUFMxM19SRUdfQjZPVVQyLAorCVMyTVBTMTNfUkVHX0wxQ1RSTCwKKwlTMk1QUzEzX1JFR19MMkNUUkwsCisJUzJNUFMxM19SRUdfTDNDVFJMLAorCVMyTVBTMTNfUkVHX0w0Q1RSTCwKKwlTMk1QUzEzX1JFR19MNUNUUkwsCisJUzJNUFMxM19SRUdfTDZDVFJMLAorCVMyTVBTMTNfUkVHX0w3Q1RSTCwKKwlTMk1QUzEzX1JFR19MOENUUkwsCisJUzJNUFMxM19SRUdfTDlDVFJMLAorCVMyTVBTMTNfUkVHX0wxMENUUkwsCisJUzJNUFMxM19SRUdfTDExQ1RSTCwKKwlTMk1QUzEzX1JFR19MMTJDVFJMLAorCVMyTVBTMTNfUkVHX0wxM0NUUkwsCisJUzJNUFMxM19SRUdfTDE0Q1RSTCwKKwlTMk1QUzEzX1JFR19MMTVDVFJMLAorCVMyTVBTMTNfUkVHX0wxNkNUUkwsCisJUzJNUFMxM19SRUdfTDE3Q1RSTCwKKwlTMk1QUzEzX1JFR19MMThDVFJMLAorCVMyTVBTMTNfUkVHX0wxOUNUUkwsCisJUzJNUFMxM19SRUdfTDIwQ1RSTCwKKwlTMk1QUzEzX1JFR19MMjFDVFJMLAorCVMyTVBTMTNfUkVHX0wyMkNUUkwsCisJUzJNUFMxM19SRUdfTDIzQ1RSTCwKKwlTMk1QUzEzX1JFR19MMjRDVFJMLAorCVMyTVBTMTNfUkVHX0wyNUNUUkwsCisJUzJNUFMxM19SRUdfTDI2Q1RSTCwKKwlTMk1QUzEzX1JFR19MMjdDVFJMLAorCVMyTVBTMTNfUkVHX0wyOENUUkwsCisJUzJNUFMxM19SRUdfTDMwQ1RSTCwKKwlTMk1QUzEzX1JFR19MMzFDVFJMLAorCVMyTVBTMTNfUkVHX0wzMkNUUkwsCisJUzJNUFMxM19SRUdfTDMzQ1RSTCwKKwlTMk1QUzEzX1JFR19MMzRDVFJMLAorCVMyTVBTMTNfUkVHX0wzNUNUUkwsCisJUzJNUFMxM19SRUdfTDM2Q1RSTCwKKwlTMk1QUzEzX1JFR19MMzdDVFJMLAorCVMyTVBTMTNfUkVHX0wzOENUUkwsCisJUzJNUFMxM19SRUdfTDM5Q1RSTCwKKwlTMk1QUzEzX1JFR19MNDBDVFJMLAorCVMyTVBTMTNfUkVHX0xET0RTQ0gxLAorCVMyTVBTMTNfUkVHX0xET0RTQ0gyLAorCVMyTVBTMTNfUkVHX0xET0RTQ0gzLAorCVMyTVBTMTNfUkVHX0xET0RTQ0g0LAorCVMyTVBTMTNfUkVHX0xET0RTQ0g1LAorfTsKKworLyogIHJlZ3VsYXRvciBpZHMgKi8KK2VudW0gczJtcHMxM19yZWd1bGF0b3JzIHsKKwlTMk1QUzEzX0xETzEsCisJUzJNUFMxM19MRE8yLAorCVMyTVBTMTNfTERPMywKKwlTMk1QUzEzX0xETzQsCisJUzJNUFMxM19MRE81LAorCVMyTVBTMTNfTERPNiwKKwlTMk1QUzEzX0xETzcsCisJUzJNUFMxM19MRE84LAorCVMyTVBTMTNfTERPOSwKKwlTMk1QUzEzX0xETzEwLAorCVMyTVBTMTNfTERPMTEsCisJUzJNUFMxM19MRE8xMiwKKwlTMk1QUzEzX0xETzEzLAorCVMyTVBTMTNfTERPMTQsCisJUzJNUFMxM19MRE8xNSwKKwlTMk1QUzEzX0xETzE2LAorCVMyTVBTMTNfTERPMTcsCisJUzJNUFMxM19MRE8xOCwKKwlTMk1QUzEzX0xETzE5LAorCVMyTVBTMTNfTERPMjAsCisJUzJNUFMxM19MRE8yMSwKKwlTMk1QUzEzX0xETzIyLAorCVMyTVBTMTNfTERPMjMsCisJUzJNUFMxM19MRE8yNCwKKwlTMk1QUzEzX0xETzI1LAorCVMyTVBTMTNfTERPMjYsCisJUzJNUFMxM19MRE8yNywKKwlTMk1QUzEzX0xETzI4LAorCVMyTVBTMTNfTERPMjksCisJUzJNUFMxM19MRE8zMCwKKwlTMk1QUzEzX0xETzMxLAorCVMyTVBTMTNfTERPMzIsCisJUzJNUFMxM19MRE8zMywKKwlTMk1QUzEzX0xETzM0LAorCVMyTVBTMTNfTERPMzUsCisJUzJNUFMxM19MRE8zNiwKKwlTMk1QUzEzX0xETzM3LAorCVMyTVBTMTNfTERPMzgsCisJUzJNUFMxM19MRE8zOSwKKwlTMk1QUzEzX0xETzQwLAorCVMyTVBTMTNfQlVDSzEsCisJUzJNUFMxM19CVUNLMiwKKwlTMk1QUzEzX0JVQ0szLAorCVMyTVBTMTNfQlVDSzQsCisJUzJNUFMxM19CVUNLNSwKKwlTMk1QUzEzX0JVQ0s2LAorCVMyTVBTMTNfQlVDSzcsCisJUzJNUFMxM19CVUNLOCwKKwlTMk1QUzEzX0JVQ0s5LAorCVMyTVBTMTNfQlVDSzEwLAorCisJUzJNUFMxM19SRUdVTEFUT1JfTUFYLAorfTsKKworLyoKKyAqIERlZmF1bHQgcmFtcCBkZWxheSBpbiB1di91cy4gRGF0YXNoZWV0IHNheXMgdGhhdCByYW1wIGRlbGF5IGNhbiBiZQorICogY29udHJvbGxlZCBob3dldmVyIGl0IGRvZXMgbm90IHNwZWNpZnkgd2hpY2ggcmVnaXN0ZXIgaXMgdXNlZCBmb3IgdGhhdC4KKyAqIExldCdzIGFzc3VtZSB0aGF0IGRlZmF1bHQgdmFsdWUgd2lsbCBiZSBzZXQuCisgKi8KKyNkZWZpbmUgUzJNUFMxM19CVUNLX1JBTVBfREVMQVkJCTEyNTAwCisKKyNlbmRpZiAvKiAgX19MSU5VWF9NRkRfUzJNUFMxM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24vaW14NnEtaW9tdXhjLWdwci5oIGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaAppbmRleCBmZjQ0Mzc0Li5jODc3Y2FkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24vaW14NnEtaW9tdXhjLWdwci5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi9pbXg2cS1pb211eGMtZ3ByLmgKQEAgLTM5NSw0ICszOTUsNDMgQEAKICNkZWZpbmUgSU1YNlNMX0dQUjFfRkVDX0NMT0NLX01VWDFfU0VMX01BU0sgICAgKDB4MyA8PCAxNykKICNkZWZpbmUgSU1YNlNMX0dQUjFfRkVDX0NMT0NLX01VWDJfU0VMX01BU0sgICAgKDB4MSA8PCAxNCkKIAorLyogRm9yIGlteDZzeCBpb211eCBncHIgcmVnaXN0ZXIgZmllbGQgZGVmaW5lICovCisjZGVmaW5lIElNWDZTWF9HUFIxX1ZERUNfU1dfUlNUX01BU0sJCQkoMHgxIDw8IDIwKQorI2RlZmluZSBJTVg2U1hfR1BSMV9WREVDX1NXX1JTVF9SRVNFVAkJCSgweDEgPDwgMjApCisjZGVmaW5lIElNWDZTWF9HUFIxX1ZERUNfU1dfUlNUX1JFTEVBU0UJCQkoMHgwIDw8IDIwKQorI2RlZmluZSBJTVg2U1hfR1BSMV9WQURDX1NXX1JTVF9NQVNLCQkJKDB4MSA8PCAxOSkKKyNkZWZpbmUgSU1YNlNYX0dQUjFfVkFEQ19TV19SU1RfUkVTRVQJCQkoMHgxIDw8IDE5KQorI2RlZmluZSBJTVg2U1hfR1BSMV9WQURDX1NXX1JTVF9SRUxFQVNFCQkJKDB4MCA8PCAxOSkKKyNkZWZpbmUgSU1YNlNYX0dQUjFfRkVDX0NMT0NLX01VWF9TRUxfTUFTSwkJKDB4MyA8PCAxMykKKyNkZWZpbmUgSU1YNlNYX0dQUjFfRkVDX0NMT0NLX1BBRF9ESVJfTUFTSwkJKDB4MyA8PCAxNykKKyNkZWZpbmUgSU1YNlNYX0dQUjFfRkVDX0NMT0NLX01VWF9TRUxfRVhUCQkoMHgzIDw8IDEzKQorCisjZGVmaW5lIElNWDZTWF9HUFI0X0ZFQ19FTkVUMV9TVE9QX1JFUQkJCSgweDEgPDwgMykKKyNkZWZpbmUgSU1YNlNYX0dQUjRfRkVDX0VORVQyX1NUT1BfUkVRCQkJKDB4MSA8PCA0KQorCisjZGVmaW5lIElNWDZTWF9HUFI1X0RJU1BfTVVYX0xEQl9DVFJMX01BU0sJCSgweDEgPDwgMykKKyNkZWZpbmUgSU1YNlNYX0dQUjVfRElTUF9NVVhfTERCX0NUUkxfTENESUYxCQkoMHgwIDw8IDMpCisjZGVmaW5lIElNWDZTWF9HUFI1X0RJU1BfTVVYX0xEQl9DVFJMX0xDRElGMgkJKDB4MSA8PCAzKQorCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTJfTVVYX0NUUkxfTUFTSwkJCSgweDMgPDwgMjcpCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTJfTVVYX0NUUkxfRVhUX1BJTgkJKDB4MCA8PCAyNykKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMl9NVVhfQ1RSTF9DVkQJCQkoMHgxIDw8IDI3KQorI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kyX01VWF9DVFJMX1ZEQUNfVE9fQ1NJCQkoMHgyIDw8IDI3KQorI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kyX01VWF9DVFJMX0dORAkJCSgweDMgPDwgMjcpCisjZGVmaW5lIElNWDZTWF9HUFI1X1ZBRENfVE9fQ1NJX0NBUFRVUkVfRU5fTUFTSwkJKDB4MSA8PCAyNikKKyNkZWZpbmUgSU1YNlNYX0dQUjVfVkFEQ19UT19DU0lfQ0FQVFVSRV9FTl9FTkFCTEUJKDB4MSA8PCAyNikKKyNkZWZpbmUgSU1YNlNYX0dQUjVfVkFEQ19UT19DU0lfQ0FQVFVSRV9FTl9ESVNBQkxFCSgweDAgPDwgMjYpCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTFfTVVYX0NUUkxfTUFTSwkJCSgweDMgPDwgNCkKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMV9NVVhfQ1RSTF9FWFRfUElOCQkoMHgwIDw8IDQpCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTFfTVVYX0NUUkxfQ1ZECQkJKDB4MSA8PCA0KQorI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kxX01VWF9DVFJMX1ZEQUNfVE9fQ1NJCQkoMHgyIDw8IDQpCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTFfTVVYX0NUUkxfR05ECQkJKDB4MyA8PCA0KQorCisjZGVmaW5lIElNWDZTWF9HUFI1X0RJU1BfTVVYX0RDSUMyX0xDRElGMgkJKDB4MCA8PCAyKQorI2RlZmluZSBJTVg2U1hfR1BSNV9ESVNQX01VWF9EQ0lDMl9MVkRTCQkJKDB4MSA8PCAyKQorI2RlZmluZSBJTVg2U1hfR1BSNV9ESVNQX01VWF9EQ0lDMl9NQVNLCQkJKDB4MSA8PCAyKQorI2RlZmluZSBJTVg2U1hfR1BSNV9ESVNQX01VWF9EQ0lDMV9MQ0RJRjEJCSgweDAgPDwgMSkKKyNkZWZpbmUgSU1YNlNYX0dQUjVfRElTUF9NVVhfRENJQzFfTFZEUwkJCSgweDEgPDwgMSkKKyNkZWZpbmUgSU1YNlNYX0dQUjVfRElTUF9NVVhfRENJQzFfTUFTSwkJCSgweDEgPDwgMSkKKwogI2VuZGlmIC8qIF9fTElOVVhfSU1YNlFfSU9NVVhDX0dQUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODl4LmggYi9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODl4LmgKaW5kZXggZTYwODhjMi4uZTFjMTJkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdGMzNTg5eC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RjMzU4OXguaApAQCAtMTY0LDEzICsxNjQsMTAgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgdGMzNTg5eF9ncGlvX3BsYXRmb3JtX2RhdGEgLSBUQzM1ODl4IEdQSU8gcGxhdGZvcm0gZGF0YQotICogQGdwaW9fYmFzZTogZmlyc3QgZ3BpbyBudW1iZXIgYXNzaWduZWQgdG8gVEMzNTg5eC4gIEEgbWF4aW11bSBvZgotICoJICAgICAgICVUQzM1ODl4X05SX0dQSU9TIEdQSU9zIHdpbGwgYmUgYWxsb2NhdGVkLgogICogQHNldHVwOiBjYWxsYmFjayBmb3IgYm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KICAqIEByZW1vdmU6IGNhbGxiYWNrIGZvciBib2FyZC1zcGVjaWZpYyB0ZWFyZG93bgogICovCiBzdHJ1Y3QgdGMzNTg5eF9ncGlvX3BsYXRmb3JtX2RhdGEgewotCWludCBncGlvX2Jhc2U7CiAJdm9pZCAoKnNldHVwKShzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCwgdW5zaWduZWQgZ3Bpb19iYXNlKTsKIAl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCwgdW5zaWduZWQgZ3Bpb19iYXNlKTsKIH07CkBAIC0xNzgsMTggKzE3NSwxMyBAQAogLyoqCiAgKiBzdHJ1Y3QgdGMzNTg5eF9wbGF0Zm9ybV9kYXRhIC0gVEMzNTg5eCBwbGF0Zm9ybSBkYXRhCiAgKiBAYmxvY2s6IGJpdG1hc2sgb2YgYmxvY2tzIHRvIGVuYWJsZSAodXNlIFRDMzU4OXhfQkxPQ0tfKikKLSAqIEBpcnFfYmFzZTogYmFzZSBJUlEgbnVtYmVyLiAgJVRDMzU4OXhfTlJfSVJRUyBpcnFzIHdpbGwgYmUgdXNlZC4KICAqIEBncGlvOiBHUElPLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEKICAqIEBrZXlwYWQ6IGtleXBhZC1zcGVjaWZpYyBwbGF0Zm9ybSBkYXRhCiAgKi8KIHN0cnVjdCB0YzM1ODl4X3BsYXRmb3JtX2RhdGEgewogCXVuc2lnbmVkIGludCBibG9jazsKLQlpbnQgaXJxX2Jhc2U7CiAJc3RydWN0IHRjMzU4OXhfZ3Bpb19wbGF0Zm9ybV9kYXRhICpncGlvOwogCWNvbnN0IHN0cnVjdCB0YzM1ODl4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICprZXlwYWQ7CiB9OwogCi0jZGVmaW5lIFRDMzU4OXhfTlJfR1BJT1MJMjQKLSNkZWZpbmUgVEMzNTg5eF9OUl9JUlFTCQlUQzM1ODl4X0lOVF9HUElPKFRDMzU4OXhfTlJfR1BJT1MpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGI0NjQ2MTEuLmY3NjA2ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEyOCw2ICsxMjgsNyBAQAogI2RlZmluZSBWTV9IVUdFVExCCTB4MDA0MDAwMDAJLyogSHVnZSBUTEIgUGFnZSBWTSAqLwogI2RlZmluZSBWTV9OT05MSU5FQVIJMHgwMDgwMDAwMAkvKiBJcyBub24tbGluZWFyIChyZW1hcF9maWxlX3BhZ2VzKSAqLwogI2RlZmluZSBWTV9BUkNIXzEJMHgwMTAwMDAwMAkvKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZyAqLworI2RlZmluZSBWTV9BUkNIXzIJMHgwMjAwMDAwMAogI2RlZmluZSBWTV9ET05URFVNUAkweDA0MDAwMDAwCS8qIERvIG5vdCBpbmNsdWRlIGluIHRoZSBjb3JlIGR1bXAgKi8KIAogI2lmZGVmIENPTkZJR19NRU1fU09GVF9ESVJUWQpAQCAtMTU1LDYgKzE1NiwxMSBAQAogIyBkZWZpbmUgVk1fTUFQUEVEX0NPUFkJVk1fQVJDSF8xCS8qIFQgaWYgbWFwcGVkIGNvcHkgb2YgZGF0YSAobm9tbXUgbW1hcCkgKi8KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KQorLyogTVBYIHNwZWNpZmljIGJvdW5kcyB0YWJsZSBvciBib3VuZHMgZGlyZWN0b3J5ICovCisjIGRlZmluZSBWTV9NUFgJCVZNX0FSQ0hfMgorI2VuZGlmCisKICNpZm5kZWYgVk1fR1JPV1NVUAogIyBkZWZpbmUgVk1fR1JPV1NVUAlWTV9OT05FCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCA2ZTBiMjg2Li4wMDRlOWQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC00NTQsNiArNDU0LDEwIEBACiAJYm9vbCB0bGJfZmx1c2hfcGVuZGluZzsKICNlbmRpZgogCXN0cnVjdCB1cHJvYmVzX3N0YXRlIHVwcm9iZXNfc3RhdGU7CisjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9NUFgKKwkvKiBhZGRyZXNzIG9mIHRoZSBib3VuZHMgZGlyZWN0b3J5ICovCisJdm9pZCBfX3VzZXIgKmJkX2FkZHI7CisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbV9pbml0X2NwdW1hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKaW5kZXggYjA2OTJkMi4uNGQ2OWMwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaApAQCAtODgsNiArODgsOSBAQAogCXVuc2lnbmVkIGludCAgICAgICAgICAgIGRhdGFfdGFnX3VuaXRfc2l6ZTsgICAgIC8qIERBVEEgVEFHIFVOSVQgc2l6ZSAqLwogCXVuc2lnbmVkIGludAkJYm9vdF9yb19sb2NrOwkJLyogcm8gbG9jayBzdXBwb3J0ICovCiAJYm9vbAkJCWJvb3Rfcm9fbG9ja2FibGU7CisJYm9vbAkJCWZmdV9jYXBhYmxlOwkvKiBGaXJtd2FyZSB1cGdyYWRlIHN1cHBvcnQgKi8KKyNkZWZpbmUgTU1DX0ZJUk1XQVJFX0xFTiA4CisJdTgJCQlmd3JldltNTUNfRklSTVdBUkVfTEVOXTsgIC8qIEZXIHZlcnNpb24gKi8KIAl1OAkJCXJhd19leGNlcHRpb25fc3RhdHVzOwkvKiA1NCAqLwogCXU4CQkJcmF3X3BhcnRpdGlvbl9zdXBwb3J0OwkvKiAxNjAgKi8KIAl1OAkJCXJhd19ycG1iX3NpemVfbXVsdDsJLyogMTY4ICovCkBAIC01MDksMjQgKzUxMiw4IEBACiAKICNkZWZpbmUgbW1jX2Rldl90b19jYXJkKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbW1jX2NhcmQsIGRldikKIAotI2RlZmluZSBtbWNfbGlzdF90b19jYXJkKGwpCWNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgbW1jX2NhcmQsIG5vZGUpCi0jZGVmaW5lIG1tY19nZXRfZHJ2ZGF0YShjKQlkZXZfZ2V0X2RydmRhdGEoJihjKS0+ZGV2KQotI2RlZmluZSBtbWNfc2V0X2RydmRhdGEoYyxkKQlkZXZfc2V0X2RydmRhdGEoJihjKS0+ZGV2LCBkKQotCi0vKgotICogTU1DIGRldmljZSBkcml2ZXIgKGUuZy4sIEZsYXNoIGNhcmQsIEkvTyBjYXJkLi4uKQotICovCi1zdHJ1Y3QgbW1jX2RyaXZlciB7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgZHJ2OwotCWludCAoKnByb2JlKShzdHJ1Y3QgbW1jX2NhcmQgKik7Ci0Jdm9pZCAoKnJlbW92ZSkoc3RydWN0IG1tY19jYXJkICopOwotCWludCAoKnN1c3BlbmQpKHN0cnVjdCBtbWNfY2FyZCAqKTsKLQlpbnQgKCpyZXN1bWUpKHN0cnVjdCBtbWNfY2FyZCAqKTsKLQl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBtbWNfY2FyZCAqKTsKLX07Ci0KLWV4dGVybiBpbnQgbW1jX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbW1jX2RyaXZlciAqKTsKLWV4dGVybiB2b2lkIG1tY191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbW1jX2RyaXZlciAqKTsKK2V4dGVybiBpbnQgbW1jX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqKTsKK2V4dGVybiB2b2lkIG1tY191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqKTsKIAogZXh0ZXJuIHZvaWQgbW1jX2ZpeHVwX2RldmljZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBtbWNfZml4dXAgKnRhYmxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaAppbmRleCBmMjA2ZTI5Li5jYjJiMDQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oCkBAIC0xNTQsNyArMTU0LDggQEAKIGV4dGVybiBpbnQgX19tbWNfc3dpdGNoKHN0cnVjdCBtbWNfY2FyZCAqLCB1OCwgdTgsIHU4LCB1bnNpZ25lZCBpbnQsIGJvb2wsCiAJCQlib29sLCBib29sKTsKIGV4dGVybiBpbnQgbW1jX3N3aXRjaChzdHJ1Y3QgbW1jX2NhcmQgKiwgdTgsIHU4LCB1OCwgdW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgbW1jX3NlbmRfZXh0X2NzZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHU4ICpleHRfY3NkKTsKK2V4dGVybiBpbnQgbW1jX3NlbmRfdHVuaW5nKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CitleHRlcm4gaW50IG1tY19nZXRfZXh0X2NzZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHU4ICoqbmV3X2V4dF9jc2QpOwogCiAjZGVmaW5lIE1NQ19FUkFTRV9BUkcJCTB4MDAwMDAwMDAKICNkZWZpbmUgTU1DX1NFQ1VSRV9FUkFTRV9BUkcJMHg4MDAwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9kd19tbWMuaAppbmRleCAwMDEzNjY5Li40MmI3MjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9kd19tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9kd19tbWMuaApAQCAtNTQsNiArNTQsNyBAQAogICoJdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MuCiAgKiBAdXNlX2RtYTogV2hldGhlciBETUEgY2hhbm5lbCBpcyBpbml0aWFsaXplZCBvciBub3QuCiAgKiBAdXNpbmdfZG1hOiBXaGV0aGVyIERNQSBpcyBpbiB1c2UgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyLgorICogQGRtYV82NGJpdF9hZGRyZXNzOiBXaGV0aGVyIERNQSBzdXBwb3J0cyA2NC1iaXQgYWRkcmVzcyBtb2RlIG9yIG5vdC4KICAqIEBzZ19kbWE6IEJ1cyBhZGRyZXNzIG9mIERNQSBidWZmZXIuCiAgKiBAc2dfY3B1OiBWaXJ0dWFsIGFkZHJlc3Mgb2YgRE1BIGJ1ZmZlci4KICAqIEBkbWFfb3BzOiBQb2ludGVyIHRvIHBsYXRmb3JtLXNwZWNpZmljIERNQSBjYWxsYmFja3MuCkBAIC05Niw2ICs5Nyw3IEBACiAgKiBAcXVpcmtzOiBTZXQgb2YgcXVpcmtzIHRoYXQgYXBwbHkgdG8gc3BlY2lmaWMgdmVyc2lvbnMgb2YgdGhlIElQLgogICogQGlycV9mbGFnczogVGhlIGZsYWdzIHRvIGJlIHBhc3NlZCB0byByZXF1ZXN0X2lycS4KICAqIEBpcnE6IFRoZSBpcnEgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIHJlcXVlc3RfaXJxLgorICogQHNkaW9faWQwOiBOdW1iZXIgb2Ygc2xvdDAgaW4gdGhlIFNESU8gaW50ZXJydXB0IHJlZ2lzdGVycy4KICAqCiAgKiBMb2NraW5nCiAgKiA9PT09PT09CkBAIC0xMzUsMTEgKzEzNywxMSBAQAogCXN0cnVjdCBtbWNfY29tbWFuZAlzdG9wX2Fib3J0OwogCXVuc2lnbmVkIGludAkJcHJldl9ibGtzejsKIAl1bnNpZ25lZCBjaGFyCQl0aW1pbmc7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKmNhcmRfd29ya3F1ZXVlOwogCiAJLyogRE1BIGludGVyZmFjZSBtZW1iZXJzKi8KIAlpbnQJCQl1c2VfZG1hOwogCWludAkJCXVzaW5nX2RtYTsKKwlpbnQJCQlkbWFfNjRiaXRfYWRkcmVzczsKIAogCWRtYV9hZGRyX3QJCXNnX2RtYTsKIAl2b2lkCQkJKnNnX2NwdTsKQEAgLTE1NCw3ICsxNTYsNiBAQAogCXUzMgkJCXN0b3BfY21kcjsKIAl1MzIJCQlkaXJfc3RhdHVzOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0YXNrbGV0OwotCXN0cnVjdCB3b3JrX3N0cnVjdAljYXJkX3dvcms7CiAJdW5zaWduZWQgbG9uZwkJcGVuZGluZ19ldmVudHM7CiAJdW5zaWduZWQgbG9uZwkJY29tcGxldGVkX2V2ZW50czsKIAllbnVtIGR3X21jaV9zdGF0ZQlzdGF0ZTsKQEAgLTE5Myw2ICsxOTQsOCBAQAogCWJvb2wJCQl2cW1tY19lbmFibGVkOwogCXVuc2lnbmVkIGxvbmcJCWlycV9mbGFnczsgLyogSVJRIGZsYWdzICovCiAJaW50CQkJaXJxOworCisJaW50CQkJc2Rpb19pZDA7CiB9OwogCiAvKiBETUEgb3BzIGZvciBJbnRlcm5hbC9FeHRlcm5hbCBETUFDIGludGVyZmFjZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCmluZGV4IGRmMGMxNTMuLjlmMzIyNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKQEAgLTI4OSw2ICsyODksNyBAQAogI2RlZmluZSBNTUNfQ0FQMl9IUzQwMF8xXzJWCSgxIDw8IDE2KQkvKiBDYW4gc3VwcG9ydCBIUzQwMCAxLjJWICovCiAjZGVmaW5lIE1NQ19DQVAyX0hTNDAwCQkoTU1DX0NBUDJfSFM0MDBfMV84ViB8IFwKIAkJCQkgTU1DX0NBUDJfSFM0MDBfMV8yVikKKyNkZWZpbmUgTU1DX0NBUDJfSFNYMDBfMV8yVgkoTU1DX0NBUDJfSFMyMDBfMV8yVl9TRFIgfCBNTUNfQ0FQMl9IUzQwMF8xXzJWKQogI2RlZmluZSBNTUNfQ0FQMl9TRElPX0lSUV9OT1RIUkVBRCAoMSA8PCAxNykKIAogCW1tY19wbV9mbGFnX3QJCXBtX2NhcHM7CS8qIHN1cHBvcnRlZCBwbSBmZWF0dXJlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAppbmRleCAxY2QwMGIzLi40OWFkN2E5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaApAQCAtMjk2LDYgKzI5Niw3IEBACiAjZGVmaW5lIEVYVF9DU0RfU0FOSVRJWkVfU1RBUlQJCTE2NSAgICAgLyogVyAqLwogI2RlZmluZSBFWFRfQ1NEX1dSX1JFTF9QQVJBTQkJMTY2CS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfUlBNQl9NVUxUCQkxNjgJLyogUk8gKi8KKyNkZWZpbmUgRVhUX0NTRF9GV19DT05GSUcJCTE2OQkvKiBSL1cgKi8KICNkZWZpbmUgRVhUX0NTRF9CT09UX1dQCQkJMTczCS8qIFIvVyAqLwogI2RlZmluZSBFWFRfQ1NEX0VSQVNFX0dST1VQX0RFRgkJMTc1CS8qIFIvVyAqLwogI2RlZmluZSBFWFRfQ1NEX1BBUlRfQ09ORklHCQkxNzkJLyogUi9XICovCkBAIC0zMzIsNiArMzMzLDggQEAKICNkZWZpbmUgRVhUX0NTRF9HRU5FUklDX0NNRDZfVElNRQkyNDgJLyogUk8gKi8KICNkZWZpbmUgRVhUX0NTRF9DQUNIRV9TSVpFCQkyNDkJLyogUk8sIDQgYnl0ZXMgKi8KICNkZWZpbmUgRVhUX0NTRF9QV1JfQ0xfRERSXzIwMF8zNjAJMjUzCS8qIFJPICovCisjZGVmaW5lIEVYVF9DU0RfRklSTVdBUkVfVkVSU0lPTgkyNTQJLyogUk8sIDggYnl0ZXMgKi8KKyNkZWZpbmUgRVhUX0NTRF9TVVBQT1JURURfTU9ERQkJNDkzCS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfVEFHX1VOSVRfU0laRQkJNDk4CS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfREFUQV9UQUdfU1VQUE9SVAk0OTkJLyogUk8gKi8KICNkZWZpbmUgRVhUX0NTRF9NQVhfUEFDS0VEX1dSSVRFUwk1MDAJLyogUk8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NkaGNpLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oCmluZGV4IGRiYTc5M2UuLjM3NWFmODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NkaGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2RoY2kuaApAQCAtMTAwLDYgKzEwMCwxMiBAQAogI2RlZmluZSBTREhDSV9RVUlSSzJfQlJPS0VOX0REUjUwCQkJKDE8PDcpCiAvKiBTdG9wIGNvbW1hbmQgKENNRDEyKSBjYW4gc2V0IFRyYW5zZmVyIENvbXBsZXRlIHdoZW4gbm90IHVzaW5nIE1NQ19SU1BfQlVTWSAqLwogI2RlZmluZSBTREhDSV9RVUlSSzJfU1RPUF9XSVRIX1RDCQkJKDE8PDgpCisvKiBDb250cm9sbGVyIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IERNQSAqLworI2RlZmluZSBTREhDSV9RVUlSSzJfQlJPS0VOXzY0X0JJVF9ETUEJCQkoMTw8OSkKKy8qIG5lZWQgY2xlYXIgdHJhbnNmZXIgbW9kZSByZWdpc3RlciBiZWZvcmUgc2VuZCBjbWQgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUksyX0NMRUFSX1RSQU5TRkVSTU9ERV9SRUdfQkVGT1JFX0NNRAkoMTw8MTApCisvKiBDYXBhYmlsaXR5IHJlZ2lzdGVyIGJpdC02MyBpbmRpY2F0ZXMgSFM0MDAgc3VwcG9ydCAqLworI2RlZmluZSBTREhDSV9RVUlSSzJfQ0FQU19CSVQ2M19GT1JfSFM0MDAJCSgxPDwxMSkKIAogCWludCBpcnE7CQkvKiBEZXZpY2UgSVJRICovCiAJdm9pZCBfX2lvbWVtICppb2FkZHI7CS8qIE1hcHBlZCBhZGRyZXNzICovCkBAIC0xMzAsNiArMTM2LDcgQEAKICNkZWZpbmUgU0RIQ0lfU0RJT19JUlFfRU5BQkxFRAkoMTw8OSkJLyogU0RJTyBpcnEgZW5hYmxlZCAqLwogI2RlZmluZSBTREhDSV9TRFIxMDRfTkVFRFNfVFVOSU5HICgxPDwxMCkJLyogU0RSMTA0L0hTMjAwIG5lZWRzIHR1bmluZyAqLwogI2RlZmluZSBTREhDSV9VU0lOR19SRVRVTklOR19USU1FUiAoMTw8MTEpCS8qIEhvc3QgaXMgdXNpbmcgYSByZXR1bmluZyB0aW1lciBmb3IgdGhlIGNhcmQgKi8KKyNkZWZpbmUgU0RIQ0lfVVNFXzY0X0JJVF9ETUEJKDE8PDEyKQkvKiBVc2UgNjQtYml0IERNQSAqLwogCiAJdW5zaWduZWQgaW50IHZlcnNpb247CS8qIFNESENJIHNwZWMuIHZlcnNpb24gKi8KIApAQCAtMTU1LDEyICsxNjIsMTkgQEAKIAogCWludCBzZ19jb3VudDsJCS8qIE1hcHBlZCBzZyBlbnRyaWVzICovCiAKLQl1OCAqYWRtYV9kZXNjOwkJLyogQURNQSBkZXNjcmlwdG9yIHRhYmxlICovCi0JdTggKmFsaWduX2J1ZmZlcjsJLyogQm91bmNlIGJ1ZmZlciAqLworCXZvaWQgKmFkbWFfdGFibGU7CS8qIEFETUEgZGVzY3JpcHRvciB0YWJsZSAqLworCXZvaWQgKmFsaWduX2J1ZmZlcjsJLyogQm91bmNlIGJ1ZmZlciAqLworCisJc2l6ZV90IGFkbWFfdGFibGVfc3o7CS8qIEFETUEgZGVzY3JpcHRvciB0YWJsZSBzaXplICovCisJc2l6ZV90IGFsaWduX2J1ZmZlcl9zejsJLyogQm91bmNlIGJ1ZmZlciBzaXplICovCiAKIAlkbWFfYWRkcl90IGFkbWFfYWRkcjsJLyogTWFwcGVkIEFETUEgZGVzY3IuIHRhYmxlICovCiAJZG1hX2FkZHJfdCBhbGlnbl9hZGRyOwkvKiBNYXBwZWQgYm91bmNlIGJ1ZmZlciAqLwogCisJdW5zaWduZWQgaW50IGRlc2Nfc3o7CS8qIEFETUEgZGVzY3JpcHRvciBzaXplICovCisJdW5zaWduZWQgaW50IGFsaWduX3N6OwkvKiBBRE1BIGFsaWdubWVudCAqLworCXVuc2lnbmVkIGludCBhbGlnbl9tYXNrOwkvKiBBRE1BIGFsaWdubWVudCBtYXNrICovCisKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZmluaXNoX3Rhc2tsZXQ7CS8qIFRhc2tsZXQgc3RydWN0dXJlcyAqLwogCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CS8qIFRpbWVyIGZvciB0aW1lb3V0cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaAppbmRleCA1MGYwYmM5Li5hYWIwMzJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaApAQCAtODQsOCArODQsNiBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRydjsKIH07CiAKLSNkZWZpbmUgdG9fc2Rpb19kcml2ZXIoZCkJY29udGFpbmVyX29mKGQsIHN0cnVjdCBzZGlvX2RyaXZlciwgZHJ2KQotCiAvKioKICAqIFNESU9fREVWSUNFIC0gbWFjcm8gdXNlZCB0byBkZXNjcmliZSBhIHNwZWNpZmljIFNESU8gZGV2aWNlCiAgKiBAdmVuZDogdGhlIDE2IGJpdCBtYW51ZmFjdHVyZXIgY29kZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggNDhiZjEyZS4uZmZlNjZlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC00MzEsNiArNDMxLDE1IEBACiAJICovCiAJaW50CQkJbnJfbWlncmF0ZV9yZXNlcnZlX2Jsb2NrOwogCisjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT04KKwkvKgorCSAqIE51bWJlciBvZiBpc29sYXRlZCBwYWdlYmxvY2suIEl0IGlzIHVzZWQgdG8gc29sdmUgaW5jb3JyZWN0CisJICogZnJlZXBhZ2UgY291bnRpbmcgcHJvYmxlbSBkdWUgdG8gcmFjeSByZXRyaWV2aW5nIG1pZ3JhdGV0eXBlCisJICogb2YgcGFnZWJsb2NrLiBQcm90ZWN0ZWQgYnkgem9uZS0+bG9jay4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlucl9pc29sYXRlX3BhZ2VibG9jazsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiAJLyogc2VlIHNwYW5uZWQvcHJlc2VudF9wYWdlcyBmb3IgbW9yZSBkZXNjcmlwdGlvbiAqLwogCXNlcWxvY2tfdAkJc3Bhbl9zZXFsb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2kuaCBiL2luY2x1ZGUvbGludXgvbXNpLmgKaW5kZXggNDRmNDc0Ni4uOGFjNGE2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tc2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L21zaS5oCkBAIC0xMCwxNyArMTAsMTIgQEAKIAl1MzIJZGF0YTsJCS8qIDE2IGJpdHMgb2YgbXNpIG1lc3NhZ2UgZGF0YSAqLwogfTsKIAorZXh0ZXJuIGludCBwY2lfbXNpX2lnbm9yZV9tYXNrOwogLyogSGVscGVyIGZ1bmN0aW9ucyAqLwogc3RydWN0IGlycV9kYXRhOwogc3RydWN0IG1zaV9kZXNjOwotdm9pZCBtYXNrX21zaV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKLXZvaWQgdW5tYXNrX21zaV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKLXZvaWQgX19yZWFkX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CiB2b2lkIF9fZ2V0X2NhY2hlZF9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpOwotdm9pZCBfX3dyaXRlX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7Ci12b2lkIHJlYWRfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKIHZvaWQgZ2V0X2NhY2hlZF9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOwotdm9pZCB3cml0ZV9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogCiBzdHJ1Y3QgbXNpX2Rlc2MgewogCXN0cnVjdCB7CkBAIC00OCw2ICs0Myw1MiBAQAogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIH07CiAKKy8qIEhlbHBlcnMgdG8gaGlkZSBzdHJ1Y3QgbXNpX2Rlc2MgaW1wbGVtZW50YXRpb24gZGV0YWlscyAqLworI2RlZmluZSBtc2lfZGVzY190b19kZXYoZGVzYykJCSgmKGRlc2MpLT5kZXYuZGV2KQorI2RlZmluZSBkZXZfdG9fbXNpX2xpc3QoZGV2KQkJKCZ0b19wY2lfZGV2KChkZXYpKS0+bXNpX2xpc3QpCisjZGVmaW5lIGZpcnN0X21zaV9lbnRyeShkZXYpCQlcCisJbGlzdF9maXJzdF9lbnRyeShkZXZfdG9fbXNpX2xpc3QoKGRldikpLCBzdHJ1Y3QgbXNpX2Rlc2MsIGxpc3QpCisjZGVmaW5lIGZvcl9lYWNoX21zaV9lbnRyeShkZXNjLCBkZXYpCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KChkZXNjKSwgZGV2X3RvX21zaV9saXN0KChkZXYpKSwgbGlzdCkKKworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisjZGVmaW5lIGZpcnN0X3BjaV9tc2lfZW50cnkocGRldikJZmlyc3RfbXNpX2VudHJ5KCYocGRldiktPmRldikKKyNkZWZpbmUgZm9yX2VhY2hfcGNpX21zaV9lbnRyeShkZXNjLCBwZGV2KQlcCisJZm9yX2VhY2hfbXNpX2VudHJ5KChkZXNjKSwgJihwZGV2KS0+ZGV2KQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICptc2lfZGVzY190b19wY2lfZGV2KHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKK3sKKwlyZXR1cm4gZGVzYy0+ZGV2OworfQorI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCisKK3ZvaWQgX19wY2lfcmVhZF9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpOwordm9pZCBfX3BjaV93cml0ZV9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpOwordm9pZCBwY2lfd3JpdGVfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKKwordTMyIF9fcGNpX21zaXhfZGVzY19tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBmbGFnKTsKK3UzMiBfX3BjaV9tc2lfZGVzY19tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZyk7Cit2b2lkIHBjaV9tc2lfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKK3ZvaWQgcGNpX21zaV91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CisKKy8qIENvbnZlcnNpb24gaGVscGVycy4gU2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgbWVyZ2luZyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCV9fcGNpX3dyaXRlX21zaV9tc2coZW50cnksIG1zZyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfbXNpX21zZyhpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgbXNnKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXNrX21zaV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXBjaV9tc2lfbWFza19pcnEoZGF0YSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXNrX21zaV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXBjaV9tc2lfdW5tYXNrX2lycShkYXRhKTsKK30KKwogLyoKICAqIFRoZSBhcmNoIGhvb2tzIHRvIHNldHVwIHVwIG1zaSBpcnFzLiBUaG9zZSBmdW5jdGlvbnMgYXJlCiAgKiBpbXBsZW1lbnRlZCBhcyB3ZWFrIHN5bWJvbHMgc28gdGhhdCB0aGV5IC9jYW4vIGJlIG92ZXJyaWRlbiBieQpAQCAtNjEsMTggKzEwMiwxNDIgQEAKIAogdm9pZCBkZWZhdWx0X3RlYXJkb3duX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBkZWZhdWx0X3Jlc3RvcmVfbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldik7Ci11MzIgZGVmYXVsdF9tc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpOwotdTMyIGRlZmF1bHRfbXNpeF9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBmbGFnKTsKIAotc3RydWN0IG1zaV9jaGlwIHsKK3N0cnVjdCBtc2lfY29udHJvbGxlciB7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisjaWZkZWYgQ09ORklHX0dFTkVSSUNfTVNJX0lSUV9ET01BSU4KKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworI2VuZGlmCiAKLQlpbnQgKCpzZXR1cF9pcnEpKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKmRldiwKKwlpbnQgKCpzZXR1cF9pcnEpKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCSBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpOwotCXZvaWQgKCp0ZWFyZG93bl9pcnEpKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGlycSk7CisJdm9pZCAoKnRlYXJkb3duX2lycSkoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxKTsKIH07CiAKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19NU0lfSVJRX0RPTUFJTgorCisjaW5jbHVkZSA8bGludXgvaXJxaGFuZGxlci5oPgorI2luY2x1ZGUgPGFzbS9tc2kuaD4KKworc3RydWN0IGlycV9kb21haW47CitzdHJ1Y3QgaXJxX2NoaXA7CitzdHJ1Y3QgZGV2aWNlX25vZGU7CitzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvOworCisvKioKKyAqIHN0cnVjdCBtc2lfZG9tYWluX29wcyAtIE1TSSBpbnRlcnJ1cHQgZG9tYWluIGNhbGxiYWNrcworICogQGdldF9od2lycToJCVJldHJpZXZlIHRoZSByZXN1bHRpbmcgaHcgaXJxIG51bWJlcgorICogQG1zaV9pbml0OgkJRG9tYWluIHNwZWNpZmljIGluaXQgZnVuY3Rpb24gZm9yIE1TSSBpbnRlcnJ1cHRzCisgKiBAbXNpX2ZyZWU6CQlEb21haW4gc3BlY2lmaWMgZnVuY3Rpb24gdG8gZnJlZSBhIE1TSSBpbnRlcnJ1cHRzCisgKiBAbXNpX2NoZWNrOgkJQ2FsbGJhY2sgZm9yIHZlcmlmaWNhdGlvbiBvZiB0aGUgZG9tYWluL2luZm8vZGV2IGRhdGEKKyAqIEBtc2lfcHJlcGFyZToJUHJlcGFyZSB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgaW50ZXJydXB0cyBpbiB0aGUgZG9tYWluCisgKiBAbXNpX2ZpbmlzaDoJCU9wdGlvbmFsIGNhbGxiYWNsIHRvIGZpbmFsaXplIHRoZSBhbGxvY2F0aW9uCisgKiBAc2V0X2Rlc2M6CQlTZXQgdGhlIG1zaSBkZXNjcmlwdG9yIGZvciBhbiBpbnRlcnJ1cHQKKyAqIEBoYW5kbGVfZXJyb3I6CU9wdGlvbmFsIGVycm9yIGhhbmRsZXIgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMKKyAqCisgKiBAZ2V0X2h3aXJxLCBAbXNpX2luaXQgYW5kIEBtc2lfZnJlZSBhcmUgY2FsbGJhY2tzIHVzZWQgYnkKKyAqIG1zaV9jcmVhdGVfaXJxX2RvbWFpbigpIGFuZCByZWxhdGVkIGludGVyZmFjZXMKKyAqCisgKiBAbXNpX2NoZWNrLCBAbXNpX3ByZXBhcmUsIEBtc2lfZmluaXNoLCBAc2V0X2Rlc2MgYW5kIEBoYW5kbGVfZXJyb3IKKyAqIGFyZSBjYWxsYmFja3MgdXNlZCBieSBtc2lfaXJxX2RvbWFpbl9hbGxvY19pcnFzKCkgYW5kIHJlbGF0ZWQKKyAqIGludGVyZmFjZXMgd2hpY2ggYXJlIGJhc2VkIG9uIG1zaV9kZXNjLgorICovCitzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgeworCWlycV9od19udW1iZXJfdAkoKmdldF9od2lycSkoc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkgICAgIG1zaV9hbGxvY19pbmZvX3QgKmFyZyk7CisJaW50CQkoKm1zaV9pbml0KShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgdmlycSwgaXJxX2h3X251bWJlcl90IGh3aXJxLAorCQkJCSAgICBtc2lfYWxsb2NfaW5mb190ICphcmcpOworCXZvaWQJCSgqbXNpX2ZyZWUpKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJICAgIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sCisJCQkJICAgIHVuc2lnbmVkIGludCB2aXJxKTsKKwlpbnQJCSgqbXNpX2NoZWNrKShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50CQkoKm1zaV9wcmVwYXJlKShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBudmVjLAorCQkJCSAgICAgICBtc2lfYWxsb2NfaW5mb190ICphcmcpOworCXZvaWQJCSgqbXNpX2ZpbmlzaCkobXNpX2FsbG9jX2luZm9fdCAqYXJnLCBpbnQgcmV0dmFsKTsKKwl2b2lkCQkoKnNldF9kZXNjKShtc2lfYWxsb2NfaW5mb190ICphcmcsCisJCQkJICAgIHN0cnVjdCBtc2lfZGVzYyAqZGVzYyk7CisJaW50CQkoKmhhbmRsZV9lcnJvcikoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJc3RydWN0IG1zaV9kZXNjICpkZXNjLCBpbnQgZXJyb3IpOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvIC0gTVNJIGludGVycnVwdCBkb21haW4gZGF0YQorICogQGZsYWdzOgkJRmxhZ3MgdG8gZGVjcmliZSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzCisgKiBAb3BzOgkJVGhlIGNhbGxiYWNrIGRhdGEgc3RydWN0dXJlCisgKiBAY2hpcDoJCU9wdGlvbmFsOiBhc3NvY2lhdGVkIGludGVycnVwdCBjaGlwCisgKiBAY2hpcF9kYXRhOgkJT3B0aW9uYWw6IGFzc29jaWF0ZWQgaW50ZXJydXB0IGNoaXAgZGF0YQorICogQGhhbmRsZXI6CQlPcHRpb25hbDogYXNzb2NpYXRlZCBpbnRlcnJ1cHQgZmxvdyBoYW5kbGVyCisgKiBAaGFuZGxlcl9kYXRhOglPcHRpb25hbDogYXNzb2NpYXRlZCBpbnRlcnJ1cHQgZmxvdyBoYW5kbGVyIGRhdGEKKyAqIEBoYW5kbGVyX25hbWU6CU9wdGlvbmFsOiBhc3NvY2lhdGVkIGludGVycnVwdCBmbG93IGhhbmRsZXIgbmFtZQorICogQGRhdGE6CQlPcHRpb25hbDogZG9tYWluIHNwZWNpZmljIGRhdGEKKyAqLworc3RydWN0IG1zaV9kb21haW5faW5mbyB7CisJdTMyCQkJZmxhZ3M7CisJc3RydWN0IG1zaV9kb21haW5fb3BzCSpvcHM7CisJc3RydWN0IGlycV9jaGlwCQkqY2hpcDsKKwl2b2lkCQkJKmNoaXBfZGF0YTsKKwlpcnFfZmxvd19oYW5kbGVyX3QJaGFuZGxlcjsKKwl2b2lkCQkJKmhhbmRsZXJfZGF0YTsKKwljb25zdCBjaGFyCQkqaGFuZGxlcl9uYW1lOworCXZvaWQJCQkqZGF0YTsKK307CisKKy8qIEZsYWdzIGZvciBtc2lfZG9tYWluX2luZm8gKi8KK2VudW0geworCS8qCisJICogSW5pdCBub24gaW1wbGVtZW50ZWQgb3BzIGNhbGxiYWNrcyB3aXRoIGRlZmF1bHQgTVNJIGRvbWFpbgorCSAqIGNhbGxiYWNrcy4KKwkgKi8KKwlNU0lfRkxBR19VU0VfREVGX0RPTV9PUFMJPSAoMSA8PCAwKSwKKwkvKgorCSAqIEluaXQgbm9uIGltcGxlbWVudGVkIGNoaXAgY2FsbGJhY2tzIHdpdGggZGVmYXVsdCBNU0kgY2hpcAorCSAqIGNhbGxiYWNrcy4KKwkgKi8KKwlNU0lfRkxBR19VU0VfREVGX0NISVBfT1BTCT0gKDEgPDwgMSksCisJLyogQnVpbGQgaWRlbnRpdHkgbWFwIGJldHdlZW4gaHdpcnEgYW5kIGlycSAqLworCU1TSV9GTEFHX0lERU5USVRZX01BUAkJPSAoMSA8PCAyKSwKKwkvKiBTdXBwb3J0IG11bHRpcGxlIFBDSSBNU0kgaW50ZXJydXB0cyAqLworCU1TSV9GTEFHX01VTFRJX1BDSV9NU0kJCT0gKDEgPDwgMyksCisJLyogU3VwcG9ydCBQQ0kgTVNJWCBpbnRlcnJ1cHRzICovCisJTVNJX0ZMQUdfUENJX01TSVgJCT0gKDEgPDwgNCksCit9OworCitpbnQgbXNpX2RvbWFpbl9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCSAgICBib29sIGZvcmNlKTsKKworc3RydWN0IGlycV9kb21haW4gKm1zaV9jcmVhdGVfaXJxX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCisJCQkJCSBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCQkgc3RydWN0IGlycV9kb21haW4gKnBhcmVudCk7CitpbnQgbXNpX2RvbWFpbl9hbGxvY19pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgaW50IG52ZWMpOwordm9pZCBtc2lfZG9tYWluX2ZyZWVfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RydWN0IG1zaV9kb21haW5faW5mbyAqbXNpX2dldF9kb21haW5faW5mbyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKTsKKworI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX01TSV9JUlFfRE9NQUlOICovCisKKyNpZmRlZiBDT05GSUdfUENJX01TSV9JUlFfRE9NQUlOCit2b2lkIHBjaV9tc2lfZG9tYWluX3dyaXRlX21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKK3N0cnVjdCBpcnFfZG9tYWluICpwY2lfbXNpX2NyZWF0ZV9pcnFfZG9tYWluKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCQkgICAgIHN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQpOworaW50IHBjaV9tc2lfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCSAgICAgIGludCBudmVjLCBpbnQgdHlwZSk7Cit2b2lkIHBjaV9tc2lfZG9tYWluX2ZyZWVfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3N0cnVjdCBpcnFfZG9tYWluICpwY2lfbXNpX2NyZWF0ZV9kZWZhdWx0X2lycV9kb21haW4oc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywgc3RydWN0IGlycV9kb21haW4gKnBhcmVudCk7CisKK2lycV9od19udW1iZXJfdCBwY2lfbXNpX2RvbWFpbl9jYWxjX2h3aXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgc3RydWN0IG1zaV9kZXNjICpkZXNjKTsKK2ludCBwY2lfbXNpX2RvbWFpbl9jaGVja19jYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCSAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywgc3RydWN0IGRldmljZSAqZGV2KTsKKyNlbmRpZiAvKiBDT05GSUdfUENJX01TSV9JUlFfRE9NQUlOICovCisKICNlbmRpZiAvKiBMSU5VWF9NU0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnM0LmggYi9pbmNsdWRlL2xpbnV4L25mczQuaAppbmRleCAzNTZhY2MyLi4wMjJiNzYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mczQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mczQuaApAQCAtNDkwLDYgKzQ5MCw4IEBACiAKIAkvKiBuZnM0MiAqLwogCU5GU1BST0M0X0NMTlRfU0VFSywKKwlORlNQUk9DNF9DTE5UX0FMTE9DQVRFLAorCU5GU1BST0M0X0NMTlRfREVBTExPQ0FURSwKIH07CiAKIC8qIG5mczQxIHR5cGVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCBjNzJkMWFkLi42ZDYyN2I5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTE2Myw3ICsxNjMsNyBAQAogCSAqLwogCV9fYmUzMgkJCWNvb2tpZXZlcmZbMl07CiAKLQl1bnNpZ25lZCBsb25nCQlucGFnZXM7CisJdW5zaWduZWQgbG9uZwkJbnJlcXVlc3RzOwogCXN0cnVjdCBuZnNfbWRzX2NvbW1pdF9pbmZvIGNvbW1pdF9pbmZvOwogCiAJLyogT3BlbiBjb250ZXh0cyBmb3Igc2hhcmVkIG1tYXAgd3JpdGVzICovCkBAIC01MjAsNyArNTIwLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBuZnNfaGF2ZV93cml0ZWJhY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JcmV0dXJuIE5GU19JKGlub2RlKS0+bnBhZ2VzICE9IDA7CisJcmV0dXJuIE5GU19JKGlub2RlKS0+bnJlcXVlc3RzICE9IDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAppbmRleCBhMzJiYTBkLi4xZTM3ZmJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKQEAgLTIzMSw1ICsyMzEsNyBAQAogI2RlZmluZSBORlNfQ0FQX0FUT01JQ19PUEVOX1YxCSgxVSA8PCAxNykKICNkZWZpbmUgTkZTX0NBUF9TRUNVUklUWV9MQUJFTAkoMVUgPDwgMTgpCiAjZGVmaW5lIE5GU19DQVBfU0VFSwkJKDFVIDw8IDE5KQorI2RlZmluZSBORlNfQ0FQX0FMTE9DQVRFCSgxVSA8PCAyMCkKKyNkZWZpbmUgTkZTX0NBUF9ERUFMTE9DQVRFCSgxVSA8PCAyMSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaCBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCmluZGV4IDk4Mzg3NmYuLjQ2N2M4NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCkBAIC0xMjI0LDE0ICsxMjI0LDM5IEBACiAJdW5zaWduZWQgaW50CQkJc3RhdHVzOwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkCituZnNfZnJlZV9wbmZzX2RzX2NpbmZvKHN0cnVjdCBwbmZzX2RzX2NvbW1pdF9pbmZvICpjaW5mbykKK3sKKwlrZnJlZShjaW5mby0+YnVja2V0cyk7Cit9CisKICNlbHNlCiAKIHN0cnVjdCBwbmZzX2RzX2NvbW1pdF9pbmZvIHsKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorbmZzX2ZyZWVfcG5mc19kc19jaW5mbyhzdHJ1Y3QgcG5mc19kc19jb21taXRfaW5mbyAqY2luZm8pCit7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAogI2lmZGVmIENPTkZJR19ORlNfVjRfMgorc3RydWN0IG5mczQyX2ZhbGxvY19hcmdzIHsKKwlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzCXNlcV9hcmdzOworCisJc3RydWN0IG5mc19maAkJCSpmYWxsb2NfZmg7CisJbmZzNF9zdGF0ZWlkCQkJIGZhbGxvY19zdGF0ZWlkOworCXU2NAkJCQkgZmFsbG9jX29mZnNldDsKKwl1NjQJCQkJIGZhbGxvY19sZW5ndGg7Cit9OworCitzdHJ1Y3QgbmZzNDJfZmFsbG9jX3JlcyB7CisJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzCXNlcV9yZXM7CisJdW5zaWduZWQgaW50CQkJc3RhdHVzOworfTsKKwogc3RydWN0IG5mczQyX3NlZWtfYXJncyB7CiAJc3RydWN0IG5mczRfc2VxdWVuY2VfYXJncwlzZXFfYXJnczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZi5oIGIvaW5jbHVkZS9saW51eC9vZi5oCmluZGV4IDY1NDVlN2EuLmM1NWI1MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2YuaAorKysgYi9pbmNsdWRlL2xpbnV4L29mLmgKQEAgLTI2NywxNCArMjY3LDEyIEBACiBleHRlcm4gaW50IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJICAgY29uc3QgY2hhciAqcHJvcG5hbWUsCiAJCQkJICAgY29uc3QgY2hhciAqKm91dF9zdHJpbmcpOwotZXh0ZXJuIGludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCQkgY29uc3QgY2hhciAqcHJvcG5hbWUsCi0JCQkJCSBpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKipvdXRwdXQpOwogZXh0ZXJuIGludCBvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgICAgY29uc3QgY2hhciAqcHJvcG5hbWUsCiAJCQkJICAgIGNvbnN0IGNoYXIgKnN0cmluZyk7Ci1leHRlcm4gaW50IG9mX3Byb3BlcnR5X2NvdW50X3N0cmluZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lKTsKK2V4dGVybiBpbnQgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaGVscGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCQkgICAgICBjb25zdCBjaGFyICoqb3V0X3N0cnMsIHNpemVfdCBzeiwgaW50IGluZGV4KTsKIGV4dGVybiBpbnQgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsCiAJCQkJICAgY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSk7CkBAIC00ODYsMTUgKzQ4NCw5IEBACiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJCQljb25zdCBjaGFyICpwcm9wbmFtZSwgaW50IGluZGV4LAotCQkJCQkJY29uc3QgY2hhciAqKm91dF9zdHJpbmcpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG9mX3Byb3BlcnR5X2NvdW50X3N0cmluZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lKQorc3RhdGljIGlubGluZSBpbnQgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaGVscGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQkgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCQkJCQkgY29uc3QgY2hhciAqKm91dF9zdHJzLCBzaXplX3Qgc3osIGludCBpbmRleCkKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KQEAgLTY2OCw2ICs2NjAsNzAgQEAKIH0KIAogLyoqCisgKiBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheSgpIC0gUmVhZCBhbiBhcnJheSBvZiBzdHJpbmdzIGZyb20gYSBtdWx0aXBsZQorICogc3RyaW5ncyBwcm9wZXJ0eS4KKyAqIEBucDoJCWRldmljZSBub2RlIGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRvIGJlIHJlYWQuCisgKiBAcHJvcG5hbWU6CW5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNlYXJjaGVkLgorICogQG91dF9zdHJzOglvdXRwdXQgYXJyYXkgb2Ygc3RyaW5nIHBvaW50ZXJzLgorICogQHN6OgkJbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIHRvIHJlYWQuCisgKgorICogU2VhcmNoIGZvciBhIHByb3BlcnR5IGluIGEgZGV2aWNlIHRyZWUgbm9kZSBhbmQgcmV0cmlldmUgYSBsaXN0IG9mCisgKiB0ZXJtaW5hdGVkIHN0cmluZyB2YWx1ZXMgKHBvaW50ZXIgdG8gZGF0YSwgbm90IGEgY29weSkgaW4gdGhhdCBwcm9wZXJ0eS4KKyAqCisgKiBJZiBAb3V0X3N0cnMgaXMgTlVMTCwgdGhlIG51bWJlciBvZiBzdHJpbmdzIGluIHRoZSBwcm9wZXJ0eSBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfYXJyYXkoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJCWNvbnN0IGNoYXIgKnByb3BuYW1lLCBjb25zdCBjaGFyICoqb3V0X3N0cnMsCisJCQkJCQlzaXplX3Qgc3opCit7CisJcmV0dXJuIG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2hlbHBlcihucCwgcHJvcG5hbWUsIG91dF9zdHJzLCBzeiwgMCk7Cit9CisKKy8qKgorICogb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncygpIC0gRmluZCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBmcm9tIGEKKyAqIG11bHRpcGxlIHN0cmluZ3MgcHJvcGVydHkuCisgKiBAbnA6CQlkZXZpY2Ugbm9kZSBmcm9tIHdoaWNoIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyB0byBiZSByZWFkLgorICogQHByb3BuYW1lOgluYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSBzZWFyY2hlZC4KKyAqCisgKiBTZWFyY2ggZm9yIGEgcHJvcGVydHkgaW4gYSBkZXZpY2UgdHJlZSBub2RlIGFuZCByZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIG51bGwKKyAqIHRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW4gaW4gaXQuIFJldHVybnMgdGhlIG51bWJlciBvZiBzdHJpbmdzIG9uCisgKiBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdCwgLUVOT0RBVEEgaWYgcHJvcGVydHkKKyAqIGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwgYW5kIC1FSUxTRVEgaWYgdGhlIHN0cmluZyBpcyBub3QgbnVsbC10ZXJtaW5hdGVkCisgKiB3aXRoaW4gdGhlIGxlbmd0aCBvZiB0aGUgcHJvcGVydHkgZGF0YS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgICAgY29uc3QgY2hhciAqcHJvcG5hbWUpCit7CisJcmV0dXJuIG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2hlbHBlcihucCwgcHJvcG5hbWUsIE5VTEwsIDAsIDApOworfQorCisvKioKKyAqIG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KCkgLSBGaW5kIGFuZCByZWFkIGEgc3RyaW5nIGZyb20gYSBtdWx0aXBsZQorICogc3RyaW5ncyBwcm9wZXJ0eS4KKyAqIEBucDoJCWRldmljZSBub2RlIGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRvIGJlIHJlYWQuCisgKiBAcHJvcG5hbWU6CW5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNlYXJjaGVkLgorICogQGluZGV4OglpbmRleCBvZiB0aGUgc3RyaW5nIGluIHRoZSBsaXN0IG9mIHN0cmluZ3MKKyAqIEBvdXRfc3RyaW5nOglwb2ludGVyIHRvIG51bGwgdGVybWluYXRlZCByZXR1cm4gc3RyaW5nLCBtb2RpZmllZCBvbmx5IGlmCisgKgkJcmV0dXJuIHZhbHVlIGlzIDAuCisgKgorICogU2VhcmNoIGZvciBhIHByb3BlcnR5IGluIGEgZGV2aWNlIHRyZWUgbm9kZSBhbmQgcmV0cmlldmUgYSBudWxsCisgKiB0ZXJtaW5hdGVkIHN0cmluZyB2YWx1ZSAocG9pbnRlciB0byBkYXRhLCBub3QgYSBjb3B5KSBpbiB0aGUgbGlzdCBvZiBzdHJpbmdzCisgKiBjb250YWluZWQgaW4gdGhhdCBwcm9wZXJ0eS4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdCwgLUVOT0RBVEEgaWYKKyAqIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwgYW5kIC1FSUxTRVEgaWYgdGhlIHN0cmluZyBpcyBub3QKKyAqIG51bGwtdGVybWluYXRlZCB3aXRoaW4gdGhlIGxlbmd0aCBvZiB0aGUgcHJvcGVydHkgZGF0YS4KKyAqCisgKiBUaGUgb3V0X3N0cmluZyBwb2ludGVyIGlzIG1vZGlmaWVkIG9ubHkgaWYgYSB2YWxpZCBzdHJpbmcgY2FuIGJlIGRlY29kZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQljb25zdCBjaGFyICpwcm9wbmFtZSwKKwkJCQkJCWludCBpbmRleCwgY29uc3QgY2hhciAqKm91dHB1dCkKK3sKKwlpbnQgcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19oZWxwZXIobnAsIHByb3BuYW1lLCBvdXRwdXQsIDEsIGluZGV4KTsKKwlyZXR1cm4gcmMgPCAwID8gcmMgOiAwOworfQorCisvKioKICAqIG9mX3Byb3BlcnR5X3JlYWRfYm9vbCAtIEZpbmRmcm9tIGEgcHJvcGVydHkKICAqIEBucDoJCWRldmljZSBub2RlIGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRvIGJlIHJlYWQuCiAgKiBAcHJvcG5hbWU6CW5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNlYXJjaGVkLgpAQCAtODY2LDQgKzkyMiwxNSBAQAogLyogQ09ORklHX09GX1JFU09MVkUgYXBpICovCiBleHRlcm4gaW50IG9mX3Jlc29sdmVfcGhhbmRsZXMoc3RydWN0IGRldmljZV9ub2RlICp0cmVlKTsKIAorLyoqCisgKiBvZl9kZXZpY2VfaXNfc3lzdGVtX3Bvd2VyX2NvbnRyb2xsZXIgLSBUZWxscyBpZiBzeXN0ZW0tcG93ZXItY29udHJvbGxlciBpcyBmb3VuZCBmb3IgZGV2aWNlX25vZGUKKyAqIEBucDogUG9pbnRlciB0byB0aGUgZ2l2ZW4gZGV2aWNlX25vZGUKKyAqCisgKiByZXR1cm4gdHJ1ZSBpZiBwcmVzZW50IGZhbHNlIG90aGVyd2lzZQorICovCitzdGF0aWMgaW5saW5lIGJvb2wgb2ZfZGV2aWNlX2lzX3N5c3RlbV9wb3dlcl9jb250cm9sbGVyKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJcmV0dXJuIG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgInN5c3RlbS1wb3dlci1jb250cm9sbGVyIik7Cit9CisKICNlbmRpZiAvKiBfTElOVVhfT0ZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9wY2kuaCBiL2luY2x1ZGUvbGludXgvb2ZfcGNpLmgKaW5kZXggMWZkMjA3ZS4uY2UwZTVhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX3BjaS5oCkBAIC01OSwxMyArNTksMTMgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfT0YpICYmIGRlZmluZWQoQ09ORklHX1BDSV9NU0kpCi1pbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApOwotdm9pZCBvZl9wY2lfbXNpX2NoaXBfcmVtb3ZlKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCk7Ci1zdHJ1Y3QgbXNpX2NoaXAgKm9mX3BjaV9maW5kX21zaV9jaGlwX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKTsKK2ludCBvZl9wY2lfbXNpX2NoaXBfYWRkKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCk7Cit2b2lkIG9mX3BjaV9tc2lfY2hpcF9yZW1vdmUoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKTsKK3N0cnVjdCBtc2lfY29udHJvbGxlciAqb2ZfcGNpX2ZpbmRfbXNpX2NoaXBfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG9mX3BjaV9tc2lfY2hpcF9hZGQoc3RydWN0IG1zaV9jaGlwICpjaGlwKSB7IHJldHVybiAtRUlOVkFMOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgb2ZfcGNpX21zaV9jaGlwX3JlbW92ZShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApIHsgfQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbXNpX2NoaXAgKgorc3RhdGljIGlubGluZSBpbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApIHsgcmV0dXJuIC1FSU5WQUw7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBvZl9wY2lfbXNpX2NoaXBfcmVtb3ZlKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCkgeyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBtc2lfY29udHJvbGxlciAqCiBvZl9wY2lfZmluZF9tc2lfY2hpcF9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkgeyByZXR1cm4gTlVMTDsgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb21hcC1ncG1jLmggYi9pbmNsdWRlL2xpbnV4L29tYXAtZ3BtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDgwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L29tYXAtZ3BtYy5oCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogIE9NQVAgR1BNQyAoR2VuZXJhbCBQdXJwb3NlIE1lbW9yeSBDb250cm9sbGVyKSBkZWZpbmVzCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLyogTWF4aW11bSBOdW1iZXIgb2YgQ2hpcCBTZWxlY3RzICovCisjZGVmaW5lIEdQTUNfQ1NfTlVNCQk4CisKKyNkZWZpbmUgR1BNQ19DT05GSUdfV1AJCTB4MDAwMDAwMDUKKworI2RlZmluZSBHUE1DX0lSUV9GSUZPRVZFTlRFTkFCTEUJMHgwMQorI2RlZmluZSBHUE1DX0lSUV9DT1VOVF9FVkVOVAkJMHgwMgorCisjZGVmaW5lIEdQTUNfQlVSU1RfNAkJCTQJLyogNCB3b3JkIGJ1cnN0ICovCisjZGVmaW5lIEdQTUNfQlVSU1RfOAkJCTgJLyogOCB3b3JkIGJ1cnN0ICovCisjZGVmaW5lIEdQTUNfQlVSU1RfMTYJCQkxNgkvKiAxNiB3b3JkIGJ1cnN0ICovCisjZGVmaW5lIEdQTUNfREVWV0lEVEhfOEJJVAkJMQkvKiA4LWJpdCBkZXZpY2Ugd2lkdGggKi8KKyNkZWZpbmUgR1BNQ19ERVZXSURUSF8xNkJJVAkJMgkvKiAxNi1iaXQgZGV2aWNlIHdpZHRoICovCisjZGVmaW5lIEdQTUNfTVVYX0FBRAkJCTEJLyogQWRkci1BZGRyLURhdGEgbXVsdGlwbGV4ICovCisjZGVmaW5lIEdQTUNfTVVYX0FECQkJMgkvKiBBZGRyLURhdGEgbXVsdGlwbGV4ICovCisKKy8qIGJvb2wgdHlwZSB0aW1lIHNldHRpbmdzICovCitzdHJ1Y3QgZ3BtY19ib29sX3RpbWluZ3MgeworCWJvb2wgY3ljbGUyY3ljbGVkaWZmY3NlbjsKKwlib29sIGN5Y2xlMmN5Y2xlc2FtZWNzZW47CisJYm9vbCB3ZV9leHRyYV9kZWxheTsKKwlib29sIG9lX2V4dHJhX2RlbGF5OworCWJvb2wgYWR2X2V4dHJhX2RlbGF5OworCWJvb2wgY3NfZXh0cmFfZGVsYXk7CisJYm9vbCB0aW1lX3BhcmFfZ3JhbnVsYXJpdHk7Cit9OworCisvKgorICogTm90ZSB0aGF0IGFsbCB2YWx1ZXMgaW4gdGhpcyBzdHJ1Y3QgYXJlIGluIG5hbm9zZWNvbmRzIGV4Y2VwdCBzeW5jX2NsaworICogKHdoaWNoIGlzIGluIHBpY29zZWNvbmRzKSwgd2hpbGUgdGhlIHJlZ2lzdGVyIHZhbHVlcyBhcmUgaW4gZ3BtY19mY2sgY3ljbGVzLgorICovCitzdHJ1Y3QgZ3BtY190aW1pbmdzIHsKKwkvKiBNaW5pbXVtIGNsb2NrIHBlcmlvZCBmb3Igc3luY2hyb25vdXMgbW9kZSAoaW4gcGljb3NlY29uZHMpICovCisJdTMyIHN5bmNfY2xrOworCisJLyogQ2hpcC1zZWxlY3Qgc2lnbmFsIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NTX0NPTkZJRzIgKi8KKwl1MzIgY3Nfb247CQkvKiBBc3NlcnRpb24gdGltZSAqLworCXUzMiBjc19yZF9vZmY7CQkvKiBSZWFkIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKwl1MzIgY3Nfd3Jfb2ZmOwkJLyogV3JpdGUgZGVhc3NlcnRpb24gdGltZSAqLworCisJLyogQURWIHNpZ25hbCB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DT05GSUczICovCisJdTMyIGFkdl9vbjsJCS8qIEFzc2VydGlvbiB0aW1lICovCisJdTMyIGFkdl9yZF9vZmY7CQkvKiBSZWFkIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKwl1MzIgYWR2X3dyX29mZjsJCS8qIFdyaXRlIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKworCS8qIFdFIHNpZ25hbHMgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ09ORklHNCAqLworCXUzMiB3ZV9vbjsJCS8qIFdFIGFzc2VydGlvbiB0aW1lICovCisJdTMyIHdlX29mZjsJCS8qIFdFIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKworCS8qIE9FIHNpZ25hbHMgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ09ORklHNCAqLworCXUzMiBvZV9vbjsJCS8qIE9FIGFzc2VydGlvbiB0aW1lICovCisJdTMyIG9lX29mZjsJCS8qIE9FIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKworCS8qIEFjY2VzcyB0aW1lIGFuZCBjeWNsZSB0aW1lIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzUgKi8KKwl1MzIgcGFnZV9idXJzdF9hY2Nlc3M7CS8qIE11bHRpcGxlIGFjY2VzcyB3b3JkIGRlbGF5ICovCisJdTMyIGFjY2VzczsJCS8qIFN0YXJ0LWN5Y2xlIHRvIGZpcnN0IGRhdGEgdmFsaWQgZGVsYXkgKi8KKwl1MzIgcmRfY3ljbGU7CQkvKiBUb3RhbCByZWFkIGN5Y2xlIHRpbWUgKi8KKwl1MzIgd3JfY3ljbGU7CQkvKiBUb3RhbCB3cml0ZSBjeWNsZSB0aW1lICovCisKKwl1MzIgYnVzX3R1cm5hcm91bmQ7CisJdTMyIGN5Y2xlMmN5Y2xlX2RlbGF5OworCisJdTMyIHdhaXRfbW9uaXRvcmluZzsKKwl1MzIgY2xrX2FjdGl2YXRpb247CisKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IG9uIE9NQVAzNDMwICovCisJdTMyIHdyX2FjY2VzczsJCS8qIFdSQUNDRVNTVElNRSAqLworCXUzMiB3cl9kYXRhX211eF9idXM7CS8qIFdSREFUQU9OQURNVVhCVVMgKi8KKworCXN0cnVjdCBncG1jX2Jvb2xfdGltaW5ncyBib29sX3RpbWluZ3M7Cit9OworCisvKiBEZXZpY2UgdGltaW5ncyBpbiBwaWNvc2Vjb25kcyAqLworc3RydWN0IGdwbWNfZGV2aWNlX3RpbWluZ3MgeworCXUzMiB0X2NlYXN1OwkvKiBhZGRyZXNzIHNldHVwIHRvIENTIHZhbGlkICovCisJdTMyIHRfYXZkYXN1OwkvKiBhZGRyZXNzIHNldHVwIHRvIEFEViB2YWxpZCAqLworCS8qIFhYWDogdHJ5IHRvIGNvbWJpbmUgdF9hdmRwX3IgJiB0X2F2ZHBfdy4gSXNzdWUgaXMKKwkgKiBvZiB0dXNiIHVzaW5nIHRoZXNlIHRpbWluZ3MgZXZlbiBmb3Igc3luYyB3aGlsc3QKKwkgKiBpZGVhbGx5IGZvciBhZHZfcmQvKHdyKV9vZmYgaXQgc2hvdWxkIGhhdmUgY29uc2lkZXJlZAorCSAqIHRfYXZkaCBpbnN0ZWFkLiBUaGlzIGluZGlyZWN0bHkgbmVjZXNzaXRhdGVzIHIvdworCSAqIHZhcmlhdGlvbnMgb2YgdF9hdmRwIGFzIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgb25lCisJICogc3luYyAmIG90aGVyIGFzeW5jCisJICovCisJdTMyIHRfYXZkcF9yOwkvKiBBRFYgbG93IHRpbWUgKHdoYXQgYWJvdXQgdF9jZXIgPykgKi8KKwl1MzIgdF9hdmRwX3c7CisJdTMyIHRfYWF2ZGg7CS8qIGFkZHJlc3MgaG9sZCB0aW1lICovCisJdTMyIHRfb2Vhc3U7CS8qIGFkZHJlc3Mgc2V0dXAgdG8gT0UgdmFsaWQgKi8KKwl1MzIgdF9hYTsJLyogYWNjZXNzIHRpbWUgZnJvbSBBRFYgYXNzZXJ0aW9uICovCisJdTMyIHRfaWFhOwkvKiBpbml0aWFsIGFjY2VzcyB0aW1lICovCisJdTMyIHRfb2U7CS8qIGFjY2VzcyB0aW1lIGZyb20gT0UgYXNzZXJ0aW9uICovCisJdTMyIHRfY2U7CS8qIGFjY2VzcyB0aW1lIGZyb20gQ1MgYXNlcnRpb24gKi8KKwl1MzIgdF9yZF9jeWNsZTsJLyogcmVhZCBjeWNsZSB0aW1lICovCisJdTMyIHRfY2V6X3I7CS8qIHJlYWQgQ1MgZGVhc3NlcnRpb24gdG8gaGlnaCBaICovCisJdTMyIHRfY2V6X3c7CS8qIHdyaXRlIENTIGRlYXNzZXJ0aW9uIHRvIGhpZ2ggWiAqLworCXUzMiB0X29lejsJLyogT0UgZGVhc3NlcnRpb24gdG8gaGlnaCBaICovCisJdTMyIHRfd2Vhc3U7CS8qIGFkZHJlc3Mgc2V0dXAgdG8gV0UgdmFsaWQgKi8KKwl1MzIgdF93cGw7CS8qIHdyaXRlIGFzc2VydGlvbiB0aW1lICovCisJdTMyIHRfd3BoOwkvKiB3cml0ZSBkZWFzc2VydGlvbiB0aW1lICovCisJdTMyIHRfd3JfY3ljbGU7CS8qIHdyaXRlIGN5Y2xlIHRpbWUgKi8KKworCXUzMiBjbGs7CisJdTMyIHRfYmFjYzsJLyogYnVyc3QgYWNjZXNzIHZhbGlkIGNsb2NrIHRvIG91dHB1dCBkZWxheSAqLworCXUzMiB0X2NlczsJLyogQ1Mgc2V0dXAgdGltZSB0byBjbGsgKi8KKwl1MzIgdF9hdmRzOwkvKiBBRFYgc2V0dXAgdGltZSB0byBjbGsgKi8KKwl1MzIgdF9hdmRoOwkvKiBBRFYgaG9sZCB0aW1lIGZyb20gY2xrICovCisJdTMyIHRfYWNoOwkvKiBhZGRyZXNzIGhvbGQgdGltZSBmcm9tIGNsayAqLworCXUzMiB0X3JkeW87CS8qIGNsayB0byByZWFkeSB2YWxpZCAqLworCisJdTMyIHRfY2VfcmR5ejsJLyogWFhYOiBkZXNjcmlwdGlvbiA/LCBvciB1c2UgdF9jZXogaW5zdGVhZCAqLworCXUzMiB0X2NlX2F2ZDsJLyogQ1Mgb24gdG8gQURWIG9uIGRlbGF5ICovCisKKwkvKiBYWFg6IGNoZWNrIHRoZSBwb3NzaWJpbGl0eSBvZiBjb21iaW5pbmcKKwkgKiBjeWNfYWF2aGRfb2UgJiBjeWNfYWF2ZGhfd2UKKwkgKi8KKwl1OCBjeWNfYWF2ZGhfb2U7LyogcmVhZCBhZGRyZXNzIGhvbGQgdGltZSBpbiBjeWNsZXMgKi8KKwl1OCBjeWNfYWF2ZGhfd2U7Lyogd3JpdGUgYWRkcmVzcyBob2xkIHRpbWUgaW4gY3ljbGVzICovCisJdTggY3ljX29lOwkvKiBhY2Nlc3MgdGltZSBmcm9tIE9FIGFzc2VydGlvbiBpbiBjeWNsZXMgKi8KKwl1OCBjeWNfd3BsOwkvKiB3cml0ZSBkZWFzc2VydGlvbiB0aW1lIGluIGN5Y2xlcyAqLworCXUzMiBjeWNfaWFhOwkvKiBpbml0aWFsIGFjY2VzcyB0aW1lIGluIGN5Y2xlcyAqLworCisJLyogZXh0cmEgZGVsYXlzICovCisJYm9vbCBjZV94ZGVsYXk7CisJYm9vbCBhdmRfeGRlbGF5OworCWJvb2wgb2VfeGRlbGF5OworCWJvb2wgd2VfeGRlbGF5OworfTsKKworc3RydWN0IGdwbWNfc2V0dGluZ3MgeworCWJvb2wgYnVyc3Rfd3JhcDsJLyogZW5hYmxlcyB3cmFwIGJ1cnN0aW5nICovCisJYm9vbCBidXJzdF9yZWFkOwkvKiBlbmFibGVzIHJlYWQgcGFnZS9idXJzdCBtb2RlICovCisJYm9vbCBidXJzdF93cml0ZTsJLyogZW5hYmxlcyB3cml0ZSBwYWdlL2J1cnN0IG1vZGUgKi8KKwlib29sIGRldmljZV9uYW5kOwkvKiBkZXZpY2UgaXMgTkFORCAqLworCWJvb2wgc3luY19yZWFkOwkJLyogZW5hYmxlcyBzeW5jaHJvbm91cyByZWFkcyAqLworCWJvb2wgc3luY193cml0ZTsJLyogZW5hYmxlcyBzeW5jaHJvbm91cyB3cml0ZXMgKi8KKwlib29sIHdhaXRfb25fcmVhZDsJLyogbW9uaXRvciB3YWl0IG9uIHJlYWRzICovCisJYm9vbCB3YWl0X29uX3dyaXRlOwkvKiBtb25pdG9yIHdhaXQgb24gd3JpdGVzICovCisJdTMyIGJ1cnN0X2xlbjsJCS8qIHBhZ2UvYnVyc3QgbGVuZ3RoICovCisJdTMyIGRldmljZV93aWR0aDsJLyogZGV2aWNlIGJ1cyB3aWR0aCAoOCBvciAxNiBiaXQpICovCisJdTMyIG11eF9hZGRfZGF0YTsJLyogbXVsdGlwbGV4IGFkZHJlc3MgJiBkYXRhICovCisJdTMyIHdhaXRfcGluOwkJLyogd2FpdC1waW4gdG8gYmUgdXNlZCAqLworfTsKKworZXh0ZXJuIGludCBncG1jX2NhbGNfdGltaW5ncyhzdHJ1Y3QgZ3BtY190aW1pbmdzICpncG1jX3QsCisJCQkgICAgIHN0cnVjdCBncG1jX3NldHRpbmdzICpncG1jX3MsCisJCQkgICAgIHN0cnVjdCBncG1jX2RldmljZV90aW1pbmdzICpkZXZfdCk7CisKK3N0cnVjdCBncG1jX25hbmRfcmVnczsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKKworZXh0ZXJuIHZvaWQgZ3BtY191cGRhdGVfbmFuZF9yZWcoc3RydWN0IGdwbWNfbmFuZF9yZWdzICpyZWcsIGludCBjcyk7CitleHRlcm4gaW50IGdwbWNfZ2V0X2NsaWVudF9pcnEodW5zaWduZWQgaXJxX2NvbmZpZyk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ3BtY190aWNrc190b19ucyh1bnNpZ25lZCBpbnQgdGlja3MpOworCitleHRlcm4gdm9pZCBncG1jX2NzX3dyaXRlX3JlZyhpbnQgY3MsIGludCBpZHgsIHUzMiB2YWwpOworZXh0ZXJuIGludCBncG1jX2NhbGNfZGl2aWRlcih1bnNpZ25lZCBpbnQgc3luY19jbGspOworZXh0ZXJuIGludCBncG1jX2NzX3NldF90aW1pbmdzKGludCBjcywgY29uc3Qgc3RydWN0IGdwbWNfdGltaW5ncyAqdCk7CitleHRlcm4gaW50IGdwbWNfY3NfcHJvZ3JhbV9zZXR0aW5ncyhpbnQgY3MsIHN0cnVjdCBncG1jX3NldHRpbmdzICpwKTsKK2V4dGVybiBpbnQgZ3BtY19jc19yZXF1ZXN0KGludCBjcywgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICpiYXNlKTsKK2V4dGVybiB2b2lkIGdwbWNfY3NfZnJlZShpbnQgY3MpOworZXh0ZXJuIGludCBncG1jX2NvbmZpZ3VyZShpbnQgY21kLCBpbnQgd3ZhbCk7CitleHRlcm4gdm9pZCBncG1jX3JlYWRfc2V0dGluZ3NfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkgIHN0cnVjdCBncG1jX3NldHRpbmdzICpwKTsKKworZXh0ZXJuIHZvaWQgb21hcDNfZ3BtY19zYXZlX2NvbnRleHQodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwM19ncG1jX3Jlc3RvcmVfY29udGV4dCh2b2lkKTsKKworc3RydWN0IGdwbWNfdGltaW5nczsKK3N0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YTsKK3N0cnVjdCBvbWFwX29uZW5hbmRfcGxhdGZvcm1fZGF0YTsKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX01URF9OQU5EX09NQVAyKQorZXh0ZXJuIGludCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmQsCisJCQkgIHN0cnVjdCBncG1jX3RpbWluZ3MgKmdwbWNfdCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZ3BtY19uYW5kX2luaXQoc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhICpkLAorCQkJCSBzdHJ1Y3QgZ3BtY190aW1pbmdzICpncG1jX3QpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKQorZXh0ZXJuIHZvaWQgZ3BtY19vbmVuYW5kX2luaXQoc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpkKTsKKyNlbHNlCisjZGVmaW5lIGJvYXJkX29uZW5hbmRfZGF0YQlOVUxMCitzdGF0aWMgaW5saW5lIHZvaWQgZ3BtY19vbmVuYW5kX2luaXQoc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpkKQoreworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgKaW5kZXggM2ZmZjhlNy4uMmRjMWUxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaApAQCAtMiw2ICsyLDEwIEBACiAjZGVmaW5lIF9fTElOVVhfUEFHRUlTT0xBVElPTl9ICiAKICNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTgorc3RhdGljIGlubGluZSBib29sIGhhc19pc29sYXRlX3BhZ2VibG9jayhzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlyZXR1cm4gem9uZS0+bnJfaXNvbGF0ZV9wYWdlYmxvY2s7Cit9CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbWlncmF0ZV9pc29sYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSkgPT0gTUlHUkFURV9JU09MQVRFOwpAQCAtMTEsNiArMTUsMTAgQEAKIAlyZXR1cm4gbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9JU09MQVRFOwogfQogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNfaXNvbGF0ZV9wYWdlYmxvY2soc3RydWN0IHpvbmUgKnpvbmUpCit7CisJcmV0dXJuIGZhbHNlOworfQogc3RhdGljIGlubGluZSBib29sIGlzX21pZ3JhdGVfaXNvbGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaCBiL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAppbmRleCA2NGRhY2I3Li4yNGM3NzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCkBAIC00MSw4ICs0MSwxMyBAQAogCiAJaWYgKHBjaV9pc19yb290X2J1cyhwYnVzKSkKIAkJZGV2ID0gcGJ1cy0+YnJpZGdlOwotCWVsc2UKKwllbHNlIHsKKwkJLyogSWYgcGJ1cyBpcyBhIHZpcnR1YWwgYnVzLCB0aGVyZSBpcyBubyBicmlkZ2UgdG8gaXQgKi8KKwkJaWYgKCFwYnVzLT5zZWxmKQorCQkJcmV0dXJuIE5VTEw7CisKIAkJZGV2ID0gJnBidXMtPnNlbGYtPmRldjsKKwl9CiAKIAlyZXR1cm4gQUNQSV9IQU5ETEUoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDViZThkYjQuLmE1MjNjZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMzMxLDYgKzMzMSw3IEBACiAJdW5zaWduZWQgaW50CWlzX2FkZGVkOjE7CiAJdW5zaWduZWQgaW50CWlzX2J1c21hc3RlcjoxOyAvKiBkZXZpY2UgaXMgYnVzbWFzdGVyICovCiAJdW5zaWduZWQgaW50CW5vX21zaToxOwkvKiBkZXZpY2UgbWF5IG5vdCB1c2UgbXNpICovCisJdW5zaWduZWQgaW50CW5vXzY0Yml0X21zaToxOyAvKiBkZXZpY2UgbWF5IG9ubHkgdXNlIDMyLWJpdCBNU0lzICovCiAJdW5zaWduZWQgaW50CWJsb2NrX2NmZ19hY2Nlc3M6MTsJLyogY29uZmlnIHNwYWNlIGFjY2VzcyBpcyBibG9ja2VkICovCiAJdW5zaWduZWQgaW50CWJyb2tlbl9wYXJpdHlfc3RhdHVzOjE7CS8qIERldmljZSBnZW5lcmF0ZXMgZmFsc2UgcG9zaXRpdmUgcGFyaXR5ICovCiAJdW5zaWduZWQgaW50CWlycV9yZXJvdXRlX3ZhcmlhbnQ6MjsJLyogZGV2aWNlIG5lZWRzIElSUSByZXJvdXRpbmcgdmFyaWFudCAqLwpAQCAtNDQ5LDcgKzQ1MCw3IEBACiAJc3RydWN0IHJlc291cmNlIGJ1c25fcmVzOwkvKiBidXMgbnVtYmVycyByb3V0ZWQgdG8gdGhpcyBidXMgKi8KIAogCXN0cnVjdCBwY2lfb3BzCSpvcHM7CQkvKiBjb25maWd1cmF0aW9uIGFjY2VzcyBmdW5jdGlvbnMgKi8KLQlzdHJ1Y3QgbXNpX2NoaXAJKm1zaTsJCS8qIE1TSSBjb250cm9sbGVyICovCisJc3RydWN0IG1zaV9jb250cm9sbGVyICptc2k7CS8qIE1TSSBjb250cm9sbGVyICovCiAJdm9pZAkJKnN5c2RhdGE7CS8qIGhvb2sgZm9yIHN5cy1zcGVjaWZpYyBleHRlbnNpb24gKi8KIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NkaXI7CS8qIGRpcmVjdG9yeSBlbnRyeSBpbiAvcHJvYy9idXMvcGNpICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggMWZhOTlhMy4uOTdmYjlmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTUyMiw2ICs1MjIsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTEwSF9GMwkweDE0MDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjMgMHgxNDFkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0Y0IDB4MTQxZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GMyAweDE1NzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjQgMHgxNTc0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMAkweDE2MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YxCTB4MTYwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjIJMHgxNjAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS1yZWZjb3VudC5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHUtcmVmY291bnQuaAppbmRleCBkNWM4OWUwLi41MWNlNjBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS1yZWZjb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LXJlZmNvdW50LmgKQEAgLTEzMyw3ICsxMzMsMTMgQEAKIAkvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHBlcmNwdV9yZWZfcmVpbml0KCkgKi8KIAlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKIAotCWlmICh1bmxpa2VseShwZXJjcHVfcHRyICYgX19QRVJDUFVfUkVGX0FUT01JQykpCisJLyoKKwkgKiBUaGVvcmV0aWNhbGx5LCB0aGUgZm9sbG93aW5nIGNvdWxkIHRlc3QganVzdCBBVE9NSUM7IGhvd2V2ZXIsCisJICogdGhlbiB3ZSdkIGhhdmUgdG8gbWFzayBvZmYgREVBRCBzZXBhcmF0ZWx5IGFzIERFQUQgbWF5IGJlCisJICogdmlzaWJsZSB3aXRob3V0IEFUT01JQyBpZiB3ZSByYWNlIHdpdGggcGVyY3B1X3JlZl9raWxsKCkuICBERUFECisJICogaW1wbGllcyBBVE9NSUMgYW55d2F5LiAgVGVzdCB0aGVtIHRvZ2V0aGVyLgorCSAqLworCWlmICh1bmxpa2VseShwZXJjcHVfcHRyICYgX19QRVJDUFVfUkVGX0FUT01JQ19ERUFEKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJKnBlcmNwdV9jb3VudHAgPSAodW5zaWduZWQgbG9uZyBfX3BlcmNwdSAqKXBlcmNwdV9wdHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDg5M2EwZDAuLjQ4NmU4NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC03OSw3ICs3OSw3IEBACiAJc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5CWVudHJpZXNbMF07CiB9OwogCi1zdHJ1Y3QgcGVyZl9yZWdzX3VzZXIgeworc3RydWN0IHBlcmZfcmVncyB7CiAJX191NjQJCWFiaTsKIAlzdHJ1Y3QgcHRfcmVncwkqcmVnczsKIH07CkBAIC01ODAsMzQgKzU4MCw0MCBAQAogCiAKIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIHsKLQl1NjQJCQkJdHlwZTsKKwkvKgorCSAqIEZpZWxkcyBzZXQgYnkgcGVyZl9zYW1wbGVfZGF0YV9pbml0KCksIGdyb3VwIHNvIGFzIHRvCisJICogbWluaW1pemUgdGhlIGNhY2hlbGluZXMgdG91Y2hlZC4KKwkgKi8KKwl1NjQJCQkJYWRkcjsKKwlzdHJ1Y3QgcGVyZl9yYXdfcmVjb3JkCQkqcmF3OworCXN0cnVjdCBwZXJmX2JyYW5jaF9zdGFjawkqYnJfc3RhY2s7CisJdTY0CQkJCXBlcmlvZDsKKwl1NjQJCQkJd2VpZ2h0OworCXU2NAkJCQl0eG47CisJdW5pb24gIHBlcmZfbWVtX2RhdGFfc3JjCWRhdGFfc3JjOwogCisJLyoKKwkgKiBUaGUgb3RoZXIgZmllbGRzLCBvcHRpb25hbGx5IHtzZXQsdXNlZH0gYnkKKwkgKiBwZXJmX3twcmVwYXJlLG91dHB1dH1fc2FtcGxlKCkuCisJICovCisJdTY0CQkJCXR5cGU7CiAJdTY0CQkJCWlwOwogCXN0cnVjdCB7CiAJCXUzMglwaWQ7CiAJCXUzMgl0aWQ7CiAJfQkJCQl0aWRfZW50cnk7CiAJdTY0CQkJCXRpbWU7Ci0JdTY0CQkJCWFkZHI7CiAJdTY0CQkJCWlkOwogCXU2NAkJCQlzdHJlYW1faWQ7CiAJc3RydWN0IHsKIAkJdTMyCWNwdTsKIAkJdTMyCXJlc2VydmVkOwogCX0JCQkJY3B1X2VudHJ5OwotCXU2NAkJCQlwZXJpb2Q7Ci0JdW5pb24gIHBlcmZfbWVtX2RhdGFfc3JjCWRhdGFfc3JjOwogCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeQkqY2FsbGNoYWluOwotCXN0cnVjdCBwZXJmX3Jhd19yZWNvcmQJCSpyYXc7Ci0Jc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrCSpicl9zdGFjazsKLQlzdHJ1Y3QgcGVyZl9yZWdzX3VzZXIJCXJlZ3NfdXNlcjsKKwlzdHJ1Y3QgcGVyZl9yZWdzCQlyZWdzX3VzZXI7CisJc3RydWN0IHBlcmZfcmVncwkJcmVnc19pbnRyOwogCXU2NAkJCQlzdGFja191c2VyX3NpemU7Ci0JdTY0CQkJCXdlaWdodDsKLQkvKgotCSAqIFRyYW5zYWN0aW9uIGZsYWdzIGZvciBhYm9ydCBldmVudHM6Ci0JICovCi0JdTY0CQkJCXR4bjsKLX07Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyogZGVmYXVsdCB2YWx1ZSBmb3IgZGF0YSBzb3VyY2UgKi8KICNkZWZpbmUgUEVSRl9NRU1fTkEgKFBFUkZfTUVNX1MoT1AsIE5BKSAgIHxcCkBAIC02MjQsOSArNjMwLDYgQEAKIAlkYXRhLT5yYXcgID0gTlVMTDsKIAlkYXRhLT5icl9zdGFjayA9IE5VTEw7CiAJZGF0YS0+cGVyaW9kID0gcGVyaW9kOwotCWRhdGEtPnJlZ3NfdXNlci5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FOwotCWRhdGEtPnJlZ3NfdXNlci5yZWdzID0gTlVMTDsKLQlkYXRhLT5zdGFja191c2VyX3NpemUgPSAwOwogCWRhdGEtPndlaWdodCA9IDA7CiAJZGF0YS0+ZGF0YV9zcmMudmFsID0gUEVSRl9NRU1fTkE7CiAJZGF0YS0+dHhuID0gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YmJjZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBNTUMgZGVmaW5pdGlvbnMgZm9yIE9NQVAyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIuZmxhZ3MgcG9zc2liaWxpdGllcworICoKKyAqIE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUOiBTb21lIEhTTU1DIGNvbnRyb2xsZXIgaW5zdGFuY2VzIGNhbgorICogICAgb3BlcmF0ZSB3aXRoIGVpdGhlciAxLjhWZGMgb3IgMy4wVmRjIGNhcmQgdm9sdGFnZXM7IHRoaXMgZmxhZworICogICAgc2hvdWxkIGJlIHNldCBpZiB0aGlzIGlzIHRoZSBjYXNlLiAgU2VlIGZvciBleGFtcGxlIFNlY3Rpb24gMjIuNS4zCisgKiAgICAiTU1DL1NEL1NESU8xIEJ1cyBWb2x0YWdlIFNlbGVjdGlvbiIgb2YgdGhlIE9NQVAzNHh4IE11bHRpbWVkaWEKKyAqICAgIERldmljZSBTaWxpY29uIFJldmlzaW9uIDMuMS54IFJldmlzaW9uIFpSIChKdWx5IDIwMTEpIChTV1BVMjIzUikuCisgKgorICogT01BUF9IU01NQ19CUk9LRU5fTVVMVElCTE9DS19SRUFEOiBNdWx0aXBsZS1ibG9jayByZWFkIHRyYW5zZmVycworICogICAgZG9uJ3Qgd29yayBjb3JyZWN0bHkgb24gc29tZSBNTUMgY29udHJvbGxlciBpbnN0YW5jZXMgb24gc29tZQorICogICAgT01BUDMgU29DczsgdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgaWYgdGhpcyBpcyB0aGUgY2FzZS4gIFNlZQorICogICAgZm9yIGV4YW1wbGUgQWR2aXNvcnkgMi4xLjEuMTI4ICJNTUM6IE11bHRpcGxlIEJsb2NrIFJlYWQKKyAqICAgIE9wZXJhdGlvbiBJc3N1ZSIgaW4gX09NQVAzNTMwLzM1MjUvMzUxNS8zNTAzIFNpbGljb24gRXJyYXRhXworICogICAgUmV2aXNpb24gRiAoT2N0b2JlciAyMDEwKSAoU1BSWjI3OEYpLgorICovCisjZGVmaW5lIE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUCQlCSVQoMCkKKyNkZWZpbmUgT01BUF9IU01NQ19CUk9LRU5fTVVMVElCTE9DS19SRUFECUJJVCgxKQorI2RlZmluZSBPTUFQX0hTTU1DX1NXQUtFVVBfTUlTU0lORwkJQklUKDIpCisKK3N0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIHsKKwl1OCBmbGFnczsKK307CisKK3N0cnVjdCBtbWNfY2FyZDsKKworc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSB7CisJLyogYmFjay1saW5rIHRvIGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCS8qIHNldCBpZiB5b3VyIGJvYXJkIGhhcyBjb21wb25lbnRzIG9yIHdpcmluZyB0aGF0IGxpbWl0cyB0aGUKKwkgKiBtYXhpbXVtIGZyZXF1ZW5jeSBvbiB0aGUgTU1DIGJ1cyAqLworCXVuc2lnbmVkIGludCBtYXhfZnJlcTsKKworCS8qIEludGVncmF0aW5nIGF0dHJpYnV0ZXMgZnJvbSB0aGUgb21hcF9od21vZCBsYXllciAqLworCXU4IGNvbnRyb2xsZXJfZmxhZ3M7CisKKwkvKiBSZWdpc3RlciBvZmZzZXQgZGV2aWF0aW9uICovCisJdTE2IHJlZ19vZmZzZXQ7CisKKwkvKgorCSAqIDQvOCB3aXJlcyBhbmQgYW55IGFkZGl0aW9uYWwgaG9zdCBjYXBhYmlsaXRpZXMKKwkgKiBuZWVkIHRvIE9SJ2QgYWxsIGNhcGFiaWxpdGllcyAocmVmLiBsaW51eC9tbWMvaG9zdC5oKQorCSAqLworCXUzMiBjYXBzOwkvKiBVc2VkIGZvciB0aGUgTU1DIGRyaXZlciBvbiAyNDMwIGFuZCBsYXRlciAqLworCXUzMiBwbV9jYXBzOwkvKiBQTSBjYXBhYmlsaXRpZXMgb2YgdGhlIG1tYyAqLworCisJLyogc3dpdGNoIHBpbiBjYW4gYmUgZm9yIGNhcmQgZGV0ZWN0IChkZWZhdWx0KSBvciBjYXJkIGNvdmVyICovCisJdW5zaWduZWQgY292ZXI6MTsKKworCS8qIHVzZSB0aGUgaW50ZXJuYWwgY2xvY2sgKi8KKwl1bnNpZ25lZCBpbnRlcm5hbF9jbG9jazoxOworCisJLyogbm9ucmVtb3ZhYmxlIGUuZy4gZU1NQyAqLworCXVuc2lnbmVkIG5vbnJlbW92YWJsZToxOworCisJLyogZU1NQyBkb2VzIG5vdCBoYW5kbGUgcG93ZXIgb2ZmIHdoZW4gbm90IGluIHNsZWVwIHN0YXRlICovCisJdW5zaWduZWQgbm9fcmVndWxhdG9yX29mZl9pbml0OjE7CisKKwkvKiB3ZSBjYW4gcHV0IHRoZSBmZWF0dXJlcyBhYm92ZSBpbnRvIHRoaXMgdmFyaWFibGUgKi8KKyNkZWZpbmUgSFNNTUNfSEFTX1BCSUFTCQkoMSA8PCAwKQorI2RlZmluZSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVAkoMSA8PCAxKQorI2RlZmluZSBIU01NQ19IQVNfSFNQRV9TVVBQT1JUCSgxIDw8IDIpCisJdW5zaWduZWQgZmVhdHVyZXM7CisKKwlpbnQgc3dpdGNoX3BpbjsJCQkvKiBncGlvIChjYXJkIGRldGVjdCkgKi8KKwlpbnQgZ3Bpb193cDsJCQkvKiBncGlvICh3cml0ZSBwcm90ZWN0KSAqLworCisJaW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CisJdm9pZCAoKnJlbXV4KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbik7CisJLyogQ2FsbCBiYWNrIGJlZm9yZSBlbmFibGluZyAvIGRpc2FibGluZyByZWd1bGF0b3JzICovCisJdm9pZCAoKmJlZm9yZV9zZXRfcmVnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CisJLyogQ2FsbCBiYWNrIGFmdGVyIGVuYWJsaW5nIC8gZGlzYWJsaW5nIHJlZ3VsYXRvcnMgKi8KKwl2b2lkICgqYWZ0ZXJfc2V0X3JlZykoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpOworCS8qIGlmIHdlIGhhdmUgc3BlY2lhbCBjYXJkLCBpbml0IGl0IHVzaW5nIHRoaXMgY2FsbGJhY2sgKi8KKwl2b2lkICgqaW5pdF9jYXJkKShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworCisJY29uc3QgY2hhciAqbmFtZTsKKwl1MzIgb2NyX21hc2s7Cit9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1hdG1lbC1tY2kuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tbWMtYXRtZWwtbWNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5YTJkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tbWMtYXRtZWwtbWNpLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfX01NQ19BVE1FTF9NQ0lfSAorI2RlZmluZSBfX01NQ19BVE1FTF9NQ0lfSAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtYXRtZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1kdy5oPgorCisvKioKKyAqIHN0cnVjdCBtY2lfZG1hX2RhdGEgLSBETUEgZGF0YSBmb3IgTUNJIGludGVyZmFjZQorICovCitzdHJ1Y3QgbWNpX2RtYV9kYXRhIHsKKyNpZmRlZiBDT05GSUdfQVJNCisJc3RydWN0IGF0X2RtYV9zbGF2ZSAgICAgc2RhdGE7CisjZWxzZQorCXN0cnVjdCBkd19kbWFfc2xhdmUgICAgIHNkYXRhOworI2VuZGlmCit9OworCisvKiBhY2Nlc3NvciBtYWNyb3MgKi8KKyNkZWZpbmUJc2xhdmVfZGF0YV9wdHIocykJKCYocyktPnNkYXRhKQorI2RlZmluZSBmaW5kX3NsYXZlX2RldihzKQkoKHMpLT5zZGF0YS5kbWFfZGV2KQorCisjZW5kaWYgLyogX19NTUNfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tbWMtb21hcC5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmgKaW5kZXggNTFlNzBjZi4uNWMxODhmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmgKQEAgLTEwLDMyICsxMCw4IEBACiAKICNkZWZpbmUgT01BUF9NTUNfTUFYX1NMT1RTCTIKIAotLyoKLSAqIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ci5mbGFncyBwb3NzaWJpbGl0aWVzCi0gKgotICogT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQ6IFNvbWUgSFNNTUMgY29udHJvbGxlciBpbnN0YW5jZXMgY2FuCi0gKiAgICBvcGVyYXRlIHdpdGggZWl0aGVyIDEuOFZkYyBvciAzLjBWZGMgY2FyZCB2b2x0YWdlczsgdGhpcyBmbGFnCi0gKiAgICBzaG91bGQgYmUgc2V0IGlmIHRoaXMgaXMgdGhlIGNhc2UuICBTZWUgZm9yIGV4YW1wbGUgU2VjdGlvbiAyMi41LjMKLSAqICAgICJNTUMvU0QvU0RJTzEgQnVzIFZvbHRhZ2UgU2VsZWN0aW9uIiBvZiB0aGUgT01BUDM0eHggTXVsdGltZWRpYQotICogICAgRGV2aWNlIFNpbGljb24gUmV2aXNpb24gMy4xLnggUmV2aXNpb24gWlIgKEp1bHkgMjAxMSkgKFNXUFUyMjNSKS4KLSAqCi0gKiBPTUFQX0hTTU1DX0JST0tFTl9NVUxUSUJMT0NLX1JFQUQ6IE11bHRpcGxlLWJsb2NrIHJlYWQgdHJhbnNmZXJzCi0gKiAgICBkb24ndCB3b3JrIGNvcnJlY3RseSBvbiBzb21lIE1NQyBjb250cm9sbGVyIGluc3RhbmNlcyBvbiBzb21lCi0gKiAgICBPTUFQMyBTb0NzOyB0aGlzIGZsYWcgc2hvdWxkIGJlIHNldCBpZiB0aGlzIGlzIHRoZSBjYXNlLiAgU2VlCi0gKiAgICBmb3IgZXhhbXBsZSBBZHZpc29yeSAyLjEuMS4xMjggIk1NQzogTXVsdGlwbGUgQmxvY2sgUmVhZAotICogICAgT3BlcmF0aW9uIElzc3VlIiBpbiBfT01BUDM1MzAvMzUyNS8zNTE1LzM1MDMgU2lsaWNvbiBFcnJhdGFfCi0gKiAgICBSZXZpc2lvbiBGIChPY3RvYmVyIDIwMTApIChTUFJaMjc4RikuCi0gKi8KLSNkZWZpbmUgT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQJCUJJVCgwKQotI2RlZmluZSBPTUFQX0hTTU1DX0JST0tFTl9NVUxUSUJMT0NLX1JFQUQJQklUKDEpCi0jZGVmaW5lIE9NQVBfSFNNTUNfU1dBS0VVUF9NSVNTSU5HCQlCSVQoMikKLQogc3RydWN0IG1tY19jYXJkOwogCi1zdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgewotCXU4IGZsYWdzOwotfTsKLQogc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgewogCS8qIGJhY2stbGluayB0byBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0xMDYsOSArODIsNiBAQAogCQl1bnNpZ25lZCB2Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXA6MTsKIAogCQkvKiB3ZSBjYW4gcHV0IHRoZSBmZWF0dXJlcyBhYm92ZSBpbnRvIHRoaXMgdmFyaWFibGUgKi8KLSNkZWZpbmUgSFNNTUNfSEFTX1BCSUFTCQkoMSA8PCAwKQotI2RlZmluZSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVAkoMSA8PCAxKQotI2RlZmluZSBIU01NQ19IQVNfSFNQRV9TVVBQT1JUCSgxIDw8IDIpCiAjZGVmaW5lIE1NQ19PTUFQN1hYCQkoMSA8PCAzKQogI2RlZmluZSBNTUNfT01BUDE1WFgJCSgxIDw8IDQpCiAjZGVmaW5lIE1NQ19PTUFQMTZYWAkJKDEgPDwgNSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9weGFfc2RoY2kuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9weGFfc2RoY2kuaAppbmRleCAyN2QzMTU2Li45ZTIwYzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvcHhhX3NkaGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3B4YV9zZGhjaS5oCkBAIC01NSw5ICs1NSw0IEBACiAJdW5zaWduZWQgaW50CXF1aXJrczI7CiAJdW5zaWduZWQgaW50CXBtX2NhcHM7CiB9OwotCi1zdHJ1Y3Qgc2RoY2lfcHhhIHsKLQl1OAljbGtfZW5hYmxlOwotCXU4CXBvd2VyX21vZGU7Ci19OwogI2VuZGlmIC8qIF9QWEFfU0RIQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9zZXJpYWwtb21hcC5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NlcmlhbC1vbWFwLmgKaW5kZXggYzg2MGMxYi4uZDA5Mjc1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NlcmlhbC1vbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NlcmlhbC1vbWFwLmgKQEAgLTM4LDkgKzM4LDYgQEAKIAl1bnNpZ25lZCBpbnQJCWRtYV9yeF90aW1lb3V0OwogCXVuc2lnbmVkIGludAkJYXV0b3N1c3BlbmRfdGltZW91dDsKIAl1bnNpZ25lZCBpbnQJCWRtYV9yeF9wb2xsX3JhdGU7Ci0JaW50CQkJRFRSX2dwaW87Ci0JaW50CQkJRFRSX2ludmVydGVkOwotCWludAkJCURUUl9wcmVzZW50OwogCiAJaW50ICgqZ2V0X2NvbnRleHRfbG9zc19jb3VudCkoc3RydWN0IGRldmljZSAqKTsKIAl2b2lkICgqZW5hYmxlX3dha2V1cCkoc3RydWN0IGRldmljZSAqLCBib29sKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmggYi9pbmNsdWRlL2xpbnV4L3BtX2RvbWFpbi5oCmluZGV4IDczZTkzOGIuLjJlMGUwNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9kb21haW4uaApAQCAtNzIsOCArNzIsMTAgQEAKIAlib29sIG1heF9vZmZfdGltZV9jaGFuZ2VkOwogCWJvb2wgY2FjaGVkX3Bvd2VyX2Rvd25fb2s7CiAJc3RydWN0IGdwZF9jcHVpZGxlX2RhdGEgKmNwdWlkbGVfZGF0YTsKLQl2b2lkICgqYXR0YWNoX2Rldikoc3RydWN0IGRldmljZSAqZGV2KTsKLQl2b2lkICgqZGV0YWNoX2Rldikoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgKCphdHRhY2hfZGV2KShzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmRvbWFpbiwKKwkJCSAgc3RydWN0IGRldmljZSAqZGV2KTsKKwl2b2lkICgqZGV0YWNoX2Rldikoc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpkb21haW4sCisJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXYpOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKnBkX3RvX2dlbnBkKHN0cnVjdCBkZXZfcG1fZG9tYWluICpwZCkKQEAgLTEwNCw3ICsxMDYsNyBAQAogCXN0cnVjdCBub3RpZmllcl9ibG9jayBuYjsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAl1bnNpZ25lZCBpbnQgcmVmY291bnQ7Ci0JYm9vbCBuZWVkX3Jlc3RvcmU7CisJaW50IG5lZWRfcmVzdG9yZTsKIH07CiAKICNpZmRlZiBDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvd2VyL2NoYXJnZXItbWFuYWdlci5oIGIvaW5jbHVkZS9saW51eC9wb3dlci9jaGFyZ2VyLW1hbmFnZXIuaAppbmRleCAwN2U3OTQ1Li5lOTdmYzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvd2VyL2NoYXJnZXItbWFuYWdlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcG93ZXIvY2hhcmdlci1tYW5hZ2VyLmgKQEAgLTI1Myw5ICsyNTMsNiBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgY2hhcmdlcl9kZXNjICpkZXNjOwogCi0Jc3RydWN0IHBvd2VyX3N1cHBseSAqZnVlbF9nYXVnZTsKLQlzdHJ1Y3QgcG93ZXJfc3VwcGx5ICoqY2hhcmdlcl9zdGF0OwotCiAjaWZkZWYgQ09ORklHX1RIRVJNQUwKIAlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHpkX2JhdHQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmggYi9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oCmluZGV4IDNlZDA0OTYuLjA5NmRiY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaApAQCAtMjAwLDYgKzIwMCwxMiBAQAogCXZvaWQgKCpleHRlcm5hbF9wb3dlcl9jaGFuZ2VkKShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwogCXZvaWQgKCpzZXRfY2hhcmdlZCkoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KTsKIAorCS8qCisJICogU2V0IGlmIHRoZXJtYWwgem9uZSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgZm9yIHRoaXMgcG93ZXIgc3VwcGx5LgorCSAqIEZvciBleGFtcGxlIGZvciB2aXJ0dWFsIHN1cHBsaWVzIGZvcndhcmRpbmcgY2FsbHMgdG8gYWN0dWFsCisJICogc2Vuc29ycyBvciBvdGhlciBzdXBwbGllcy4KKwkgKi8KKwlib29sIG5vX3RoZXJtYWw7CiAJLyogRm9yIEFQTSBlbXVsYXRpb24sIHRoaW5rIGxlZ2FjeSB1c2Vyc3BhY2UuICovCiAJaW50IHVzZV9mb3JfYXBtOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggNTNmZjFhNy4uZWQ0ZjU5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtNTcsNyArNTcsNyBAQAogCUlOVkFMSURfUkNVX0ZMQVZPUgogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKQorI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19QUkVFTVBUX1JDVSkKIHZvaWQgcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShlbnVtIHJjdXRvcnR1cmVfdHlwZSB0ZXN0X3R5cGUsIGludCAqZmxhZ3MsCiAJCQkgICAgdW5zaWduZWQgbG9uZyAqZ3BudW0sIHVuc2lnbmVkIGxvbmcgKmNvbXBsZXRlZCk7CiB2b2lkIHJjdXRvcnR1cmVfcmVjb3JkX3Rlc3RfdHJhbnNpdGlvbih2b2lkKTsKQEAgLTI2MCw3ICsyNjAsNyBAQAogdm9pZCByY3VfaW5pdCh2b2lkKTsKIHZvaWQgcmN1X3NjaGVkX3FzKHZvaWQpOwogdm9pZCByY3VfYmhfcXModm9pZCk7Ci12b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpOwordm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCB1c2VyKTsKIHN0cnVjdCBub3RpZmllcl9ibG9jazsKIHZvaWQgcmN1X2lkbGVfZW50ZXIodm9pZCk7CiB2b2lkIHJjdV9pZGxlX2V4aXQodm9pZCk7CkBAIC0zNDgsOCArMzQ4LDggQEAKICAqLwogI2RlZmluZSBjb25kX3Jlc2NoZWRfcmN1X3FzKCkgXAogZG8geyBcCi0JcmN1X25vdGVfdm9sdW50YXJ5X2NvbnRleHRfc3dpdGNoKGN1cnJlbnQpOyBcCi0JY29uZF9yZXNjaGVkKCk7IFwKKwlpZiAoIWNvbmRfcmVzY2hlZCgpKSBcCisJCXJjdV9ub3RlX3ZvbHVudGFyeV9jb250ZXh0X3N3aXRjaChjdXJyZW50KTsgXAogfSB3aGlsZSAoMCkKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MpIHx8IGRlZmluZWQoQ09ORklHX1JDVV9UUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfU01QKQpAQCAtMzY1LDcgKzM2NSw3IEBACiAJCQkgICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKTsKIHZvaWQgd2FpdF9yY3VfZ3AoY2FsbF9yY3VfZnVuY190IGNyZik7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkKKyNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpCiAjaW5jbHVkZSA8bGludXgvcmN1dHJlZS5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfVElOWV9SQ1UpCiAjaW5jbHVkZSA8bGludXgvcmN1dGlueS5oPgpAQCAtODY3LDcgKzg2Nyw3IEBACiAgKgogICogSW4gbm9uLXByZWVtcHRpYmxlIFJDVSBpbXBsZW1lbnRhdGlvbnMgKFRSRUVfUkNVIGFuZCBUSU5ZX1JDVSksCiAgKiBpdCBpcyBpbGxlZ2FsIHRvIGJsb2NrIHdoaWxlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KLSAqIEluIHByZWVtcHRpYmxlIFJDVSBpbXBsZW1lbnRhdGlvbnMgKFRSRUVfUFJFRU1QVF9SQ1UpIGluIENPTkZJR19QUkVFTVBUCisgKiBJbiBwcmVlbXB0aWJsZSBSQ1UgaW1wbGVtZW50YXRpb25zIChQUkVFTVBUX1JDVSkgaW4gQ09ORklHX1BSRUVNUFQKICAqIGtlcm5lbCBidWlsZHMsIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgbWF5IGJlIHByZWVtcHRlZCwKICAqIGJ1dCBleHBsaWNpdCBibG9ja2luZyBpcyBpbGxlZ2FsLiAgRmluYWxseSwgaW4gcHJlZW1wdGlibGUgUkNVCiAgKiBpbXBsZW1lbnRhdGlvbnMgaW4gcmVhbC10aW1lICh3aXRoIC1ydCBwYXRjaHNldCkga2VybmVsIGJ1aWxkcywgUkNVCkBAIC05MDIsNyArOTAyLDkgQEAKICAqIFVuZm9ydHVuYXRlbHksIHRoaXMgZnVuY3Rpb24gYWNxdWlyZXMgdGhlIHNjaGVkdWxlcidzIHJ1bnF1ZXVlIGFuZAogICogcHJpb3JpdHktaW5oZXJpdGFuY2Ugc3BpbmxvY2tzLiAgVGhpcyBtZWFucyB0aGF0IGRlYWRsb2NrIGNvdWxkIHJlc3VsdAogICogaWYgdGhlIGNhbGxlciBvZiByY3VfcmVhZF91bmxvY2soKSBhbHJlYWR5IGhvbGRzIG9uZSBvZiB0aGVzZSBsb2NrcyBvcgotICogYW55IGxvY2sgdGhhdCBpcyBldmVyIGFjcXVpcmVkIHdoaWxlIGhvbGRpbmcgdGhlbS4KKyAqIGFueSBsb2NrIHRoYXQgaXMgZXZlciBhY3F1aXJlZCB3aGlsZSBob2xkaW5nIHRoZW07IG9yIGFueSBsb2NrIHdoaWNoCisgKiBjYW4gYmUgdGFrZW4gZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBiZWNhdXNlIHJjdV9ib29zdCgpLT5ydF9tdXRleF9sb2NrKCkKKyAqIGRvZXMgbm90IGRpc2FibGUgaXJxcyB3aGlsZSB0YWtpbmcgLT53YWl0X2xvY2suCiAgKgogICogVGhhdCBzYWlkLCBSQ1UgcmVhZGVycyBhcmUgbmV2ZXIgcHJpb3JpdHkgYm9vc3RlZCB1bmxlc3MgdGhleSB3ZXJlCiAgKiBwcmVlbXB0ZWQuICBUaGVyZWZvcmUsIG9uZSB3YXkgdG8gYXZvaWQgZGVhZGxvY2sgaXMgdG8gbWFrZSBzdXJlCkBAIC0xMDYyLDYgKzEwNjQsNyBAQAogICovCiAjZGVmaW5lIFJDVV9JTklUX1BPSU5URVIocCwgdikgXAogCWRvIHsgXAorCQlyY3VfZGVyZWZlcmVuY2Vfc3BhcnNlKHAsIF9fcmN1KTsgXAogCQlwID0gUkNVX0lOSVRJQUxJWkVSKHYpOyBcCiAJfSB3aGlsZSAoMCkKIApAQCAtMTExOCw3ICsxMTIxLDcgQEAKIAlfX2tmcmVlX3JjdSgmKChwdHIpLT5yY3VfaGVhZCksIG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCByY3VfaGVhZCkpCiAKICNpZiBkZWZpbmVkKENPTkZJR19USU5ZX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfUkNVX05PQ0JfQ1BVX0FMTCkKLXN0YXRpYyBpbmxpbmUgaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSwgdW5zaWduZWQgbG9uZyAqZGVsdGFfamlmZmllcykKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9uZWVkc19jcHUodW5zaWduZWQgbG9uZyAqZGVsdGFfamlmZmllcykKIHsKIAkqZGVsdGFfamlmZmllcyA9IFVMT05HX01BWDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKaW5kZXggMzhjYzViMS4uMGU1MzY2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKQEAgLTc4LDcgKzc4LDcgQEAKIAljYWxsX3JjdShoZWFkLCBmdW5jKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X25vdGVfY29udGV4dF9zd2l0Y2godm9pZCkKIHsKIAlyY3Vfc2NoZWRfcXMoKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggM2UyZjVkNC4uNTI5NTM3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTMwLDkgKzMwLDkgQEAKICNpZm5kZWYgX19MSU5VWF9SQ1VUUkVFX0gKICNkZWZpbmUgX19MSU5VWF9SQ1VUUkVFX0gKIAotdm9pZCByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KTsKK3ZvaWQgcmN1X25vdGVfY29udGV4dF9zd2l0Y2godm9pZCk7CiAjaWZuZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMCi1pbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1LCB1bnNpZ25lZCBsb25nICpkZWx0YV9qaWZmaWVzKTsKK2ludCByY3VfbmVlZHNfY3B1KHVuc2lnbmVkIGxvbmcgKmRlbHRhX2ppZmZpZXMpOwogI2VuZGlmIC8qICNpZm5kZWYgQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwgKi8KIHZvaWQgcmN1X2NwdV9zdGFsbF9yZXNldCh2b2lkKTsKIApAQCAtNDMsNyArNDMsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3ZpcnRfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KQogewotCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKGNwdSk7CisJcmN1X25vdGVfY29udGV4dF9zd2l0Y2goKTsKIH0KIAogdm9pZCBzeW5jaHJvbml6ZV9yY3VfYmgodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ21hcC5oIGIvaW5jbHVkZS9saW51eC9yZWdtYXAuaAppbmRleCBjNWVkODNmLi40NDE5Yjk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ21hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVnbWFwLmgKQEAgLTI3LDYgKzI3LDcgQEAKIHN0cnVjdCByZWdtYXA7CiBzdHJ1Y3QgcmVnbWFwX3JhbmdlX2NmZzsKIHN0cnVjdCByZWdtYXBfZmllbGQ7CitzdHJ1Y3Qgc25kX2FjOTc7CiAKIC8qIEFuIGVudW0gb2YgYWxsIHRoZSBzdXBwb3J0ZWQgY2FjaGUgdHlwZXMgKi8KIGVudW0gcmVnY2FjaGVfdHlwZSB7CkBAIC0zNDAsNiArMzQxLDggQEAKIHN0cnVjdCByZWdtYXAgKnJlZ21hcF9pbml0X21taW9fY2xrKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY2xrX2lkLAogCQkJCSAgICB2b2lkIF9faW9tZW0gKnJlZ3MsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpOworc3RydWN0IHJlZ21hcCAqcmVnbWFwX2luaXRfYWM5NyhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZyk7CiAKIHN0cnVjdCByZWdtYXAgKmRldm1fcmVnbWFwX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCWNvbnN0IHN0cnVjdCByZWdtYXBfYnVzICpidXMsCkBAIC0zNTYsNiArMzU5LDEwIEBACiBzdHJ1Y3QgcmVnbWFwICpkZXZtX3JlZ21hcF9pbml0X21taW9fY2xrKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY2xrX2lkLAogCQkJCQkgdm9pZCBfX2lvbWVtICpyZWdzLAogCQkJCQkgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZyk7CitzdHJ1Y3QgcmVnbWFwICpkZXZtX3JlZ21hcF9pbml0X2FjOTcoc3RydWN0IHNuZF9hYzk3ICphYzk3LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZyk7CisKK2Jvb2wgcmVnbWFwX2FjOTdfZGVmYXVsdF92b2xhdGlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpOwogCiAvKioKICAqIHJlZ21hcF9pbml0X21taW8oKTogSW5pdGlhbGlzZSByZWdpc3RlciBtYXAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCmluZGV4IGY1NDBiMTQuLmQxN2UxZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaApAQCAtMTAxLDYgKzEwMSw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBEYXRhIHBhc3NlZCBpcyAic3RydWN0IHByZV92b2x0YWdlX2NoYW5nZV9kYXRhIgogICogQUJPUlRfVk9MVEFHRV9DSEFOR0UgUmVndWxhdG9yIHZvbHRhZ2UgY2hhbmdlIGZhaWxlZCBmb3Igc29tZSByZWFzb24uCiAgKiAgICAgICAgICAgICAgICAgICAgICBEYXRhIHBhc3NlZCBpcyBvbGQgdm9sdGFnZSBjYXN0IHRvICh2b2lkICopLgorICogUFJFX0RJU0FCTEUgICAgUmVndWxhdG9yIGlzIGFib3V0IHRvIGJlIGRpc2FibGVkCisgKiBBQk9SVF9ESVNBQkxFICBSZWd1bGF0b3IgZGlzYWJsZSBmYWlsZWQgZm9yIHNvbWUgcmVhc29uCiAgKgogICogTk9URTogVGhlc2UgZXZlbnRzIGNhbiBiZSBPUidlZCB0b2dldGhlciB3aGVuIHBhc3NlZCBpbnRvIGhhbmRsZXIuCiAgKi8KQEAgLTExNSw2ICsxMTcsOCBAQAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfRElTQUJMRSAJCTB4ODAKICNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX1BSRV9WT0xUQUdFX0NIQU5HRQkweDEwMAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfQUJPUlRfVk9MVEFHRV9DSEFOR0UJMHgyMDAKKyNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX1BSRV9ESVNBQkxFCQkweDQwMAorI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfQUJPUlRfRElTQUJMRQkJMHg4MDAKIAogLyoqCiAgKiBzdHJ1Y3QgcHJlX3ZvbHRhZ2VfY2hhbmdlX2RhdGEgLSBEYXRhIHNlbnQgd2l0aCBQUkVfVk9MVEFHRV9DSEFOR0UgZXZlbnQKQEAgLTI4NCw3ICsyODgsNyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVndWxhdG9yICpfX211c3RfY2hlY2sKIHJlZ3VsYXRvcl9nZXRfZXhjbHVzaXZlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ3VsYXRvciAqX19tdXN0X2NoZWNrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCmluZGV4IGZjMGVlMGMuLjVmMWU5Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCkBAIC0yNDMsNiArMjQzLDggQEAKICAqCiAgKiBAZW5hYmxlX3RpbWU6IFRpbWUgdGFrZW4gZm9yIGluaXRpYWwgZW5hYmxlIG9mIHJlZ3VsYXRvciAoaW4gdVMpLgogICogQG9mZl9vbl9kZWxheTogZ3VhcmQgdGltZSAoaW4gdVMpLCBiZWZvcmUgcmUtZW5hYmxpbmcgYSByZWd1bGF0b3IKKyAqCisgKiBAb2ZfbWFwX21vZGU6IE1hcHMgYSBoYXJkd2FyZSBtb2RlIGRlZmluZWQgaW4gYSBEZXZpY2VUcmVlIHRvIGEgc3RhbmRhcmQgbW9kZQogICovCiBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgewogCWNvbnN0IGNoYXIgKm5hbWU7CkBAIC0yODUsNiArMjg3LDggQEAKIAl1bnNpZ25lZCBpbnQgZW5hYmxlX3RpbWU7CiAKIAl1bnNpZ25lZCBpbnQgb2ZmX29uX2RlbGF5OworCisJdW5zaWduZWQgaW50ICgqb2ZfbWFwX21vZGUpKHVuc2lnbmVkIGludCBtb2RlKTsKIH07CiAKIC8qKgpAQCAtMzAxLDYgKzMwNSw5IEBACiAgKiAgICAgICAgICAgTlVMTCkuCiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gdXNlIGZvciBjb3JlIHJlZ21hcCBoZWxwZXJzIGlmIGRldl9nZXRfcmVndWxhdG9yKCkgaXMKICAqICAgICAgICAgIGluc3VmZmljaWVudC4KKyAqIEBlbmFfZ3Bpb19pbml0aWFsaXplZDogR1BJTyBjb250cm9sbGluZyByZWd1bGF0b3IgZW5hYmxlIHdhcyBwcm9wZXJseQorICogICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplZCwgbWVhbmluZyB0aGF0ID49IDAgaXMgYSB2YWxpZCBncGlvCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgYW5kIDwgMCBpcyBhIG5vbiBleGlzdGVudCBncGlvLgogICogQGVuYV9ncGlvOiBHUElPIGNvbnRyb2xsaW5nIHJlZ3VsYXRvciBlbmFibGUuCiAgKiBAZW5hX2dwaW9faW52ZXJ0OiBTZW5zZSBmb3IgR1BJTyBlbmFibGUgY29udHJvbC4KICAqIEBlbmFfZ3Bpb19mbGFnczogRmxhZ3MgdG8gdXNlIHdoZW4gY2FsbGluZyBncGlvX3JlcXVlc3Rfb25lKCkKQEAgLTMxMiw2ICszMTksNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAKKwlib29sIGVuYV9ncGlvX2luaXRpYWxpemVkOwogCWludCBlbmFfZ3BpbzsKIAl1bnNpZ25lZCBpbnQgZW5hX2dwaW9faW52ZXJ0OjE7CiAJdW5zaWduZWQgaW50IGVuYV9ncGlvX2ZsYWdzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuaAppbmRleCBmOTIxNzk2Li43NjM5NTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuaApAQCAtNiwyNCArNiwyOSBAQAogI2lmbmRlZiBfX0xJTlVYX09GX1JFR19ICiAjZGVmaW5lIF9fTElOVVhfT0ZfUkVHX0gKIAorc3RydWN0IHJlZ3VsYXRvcl9kZXNjOworCiBzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXZvaWQgKmRyaXZlcl9kYXRhOwogCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CiAJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOworCWNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYzsKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19PRikKIGV4dGVybiBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQogCSpvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CisJCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKTsKIGV4dGVybiBpbnQgb2ZfcmVndWxhdG9yX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogCQkJICAgICAgc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCAqbWF0Y2hlcywKIAkJCSAgICAgIHVuc2lnbmVkIGludCBudW1fbWF0Y2hlcyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQogCSpvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKKwkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jlc2V0LWNvbnRyb2xsZXIuaCBiL2luY2x1ZGUvbGludXgvcmVzZXQtY29udHJvbGxlci5oCmluZGV4IDQxYTQ2OTVmLi5jZTZiOTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jlc2V0LWNvbnRyb2xsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc2V0LWNvbnRyb2xsZXIuaApAQCAtMTIsMTEgKzEyLDEzIEBACiAgKiAgICAgICAgIHRoaW5ncyB0byByZXNldCB0aGUgZGV2aWNlCiAgKiBAYXNzZXJ0OiBtYW51YWxseSBhc3NlcnQgdGhlIHJlc2V0IGxpbmUsIGlmIHN1cHBvcnRlZAogICogQGRlYXNzZXJ0OiBtYW51YWxseSBkZWFzc2VydCB0aGUgcmVzZXQgbGluZSwgaWYgc3VwcG9ydGVkCisgKiBAc3RhdHVzOiByZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgcmVzZXQgbGluZSwgaWYgc3VwcG9ydGVkCiAgKi8KIHN0cnVjdCByZXNldF9jb250cm9sX29wcyB7CiAJaW50ICgqcmVzZXQpKHN0cnVjdCByZXNldF9jb250cm9sbGVyX2RldiAqcmNkZXYsIHVuc2lnbmVkIGxvbmcgaWQpOwogCWludCAoKmFzc2VydCkoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwgdW5zaWduZWQgbG9uZyBpZCk7CiAJaW50ICgqZGVhc3NlcnQpKHN0cnVjdCByZXNldF9jb250cm9sbGVyX2RldiAqcmNkZXYsIHVuc2lnbmVkIGxvbmcgaWQpOworCWludCAoKnN0YXR1cykoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwgdW5zaWduZWQgbG9uZyBpZCk7CiB9OwogCiBzdHJ1Y3QgbW9kdWxlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNldC5oIGIvaW5jbHVkZS9saW51eC9yZXNldC5oCmluZGV4IDM0OWYxNTAuLmRhNTYwMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc2V0LmgKQEAgLTEwLDYgKzEwLDcgQEAKIGludCByZXNldF9jb250cm9sX3Jlc2V0KHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKTsKIGludCByZXNldF9jb250cm9sX2Fzc2VydChzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0Yyk7CiBpbnQgcmVzZXRfY29udHJvbF9kZWFzc2VydChzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0Yyk7CitpbnQgcmVzZXRfY29udHJvbF9zdGF0dXMoc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGMpOwogCiBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcmVzZXRfY29udHJvbF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCk7CiB2b2lkIHJlc2V0X2NvbnRyb2xfcHV0KHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKTsKQEAgLTU3LDYgKzU4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJlc2V0X2NvbnRyb2xfc3RhdHVzKHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKQoreworCVdBUk5fT04oMSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9jb250cm9sX3B1dChzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0YykKIHsKIAlXQVJOX09OKDEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oIGIvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oCmluZGV4IDQ5YTRkNmYuLmUyYzEzY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgKQEAgLTk3LDcgKzk3LDcgQEAKIAlfX3JpbmdfYnVmZmVyX2FsbG9jKChzaXplKSwgKGZsYWdzKSwgJl9fa2V5KTsJXAogfSkKIAotaW50IHJpbmdfYnVmZmVyX3dhaXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOworaW50IHJpbmdfYnVmZmVyX3dhaXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUsIGJvb2wgZnVsbCk7CiBpbnQgcmluZ19idWZmZXJfcG9sbF93YWl0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LAogCQkJICBzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqcG9sbF90YWJsZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCmluZGV4IGMyYzI4OTcuLjZkNmJlMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydGMuaApAQCAtMTksMTEgKzE5LDI4IEBACiBleHRlcm4gaW50IHJ0Y19tb250aF9kYXlzKHVuc2lnbmVkIGludCBtb250aCwgdW5zaWduZWQgaW50IHllYXIpOwogZXh0ZXJuIGludCBydGNfeWVhcl9kYXlzKHVuc2lnbmVkIGludCBkYXksIHVuc2lnbmVkIGludCBtb250aCwgdW5zaWduZWQgaW50IHllYXIpOwogZXh0ZXJuIGludCBydGNfdmFsaWRfdG0oc3RydWN0IHJ0Y190aW1lICp0bSk7Ci1leHRlcm4gaW50IHJ0Y190bV90b190aW1lKHN0cnVjdCBydGNfdGltZSAqdG0sIHVuc2lnbmVkIGxvbmcgKnRpbWUpOwotZXh0ZXJuIHZvaWQgcnRjX3RpbWVfdG9fdG0odW5zaWduZWQgbG9uZyB0aW1lLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKK2V4dGVybiB0aW1lNjRfdCBydGNfdG1fdG9fdGltZTY0KHN0cnVjdCBydGNfdGltZSAqdG0pOworZXh0ZXJuIHZvaWQgcnRjX3RpbWU2NF90b190bSh0aW1lNjRfdCB0aW1lLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKIGt0aW1lX3QgcnRjX3RtX3RvX2t0aW1lKHN0cnVjdCBydGNfdGltZSB0bSk7CiBzdHJ1Y3QgcnRjX3RpbWUgcnRjX2t0aW1lX3RvX3RtKGt0aW1lX3Qga3QpOwogCisvKioKKyAqIERlcHJlY2F0ZWQuIFVzZSBydGNfdGltZTY0X3RvX3RtKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBydGNfdGltZV90b190bSh1bnNpZ25lZCBsb25nIHRpbWUsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJcnRjX3RpbWU2NF90b190bSh0aW1lLCB0bSk7Cit9CisKKy8qKgorICogRGVwcmVjYXRlZC4gVXNlIHJ0Y190bV90b190aW1lNjQoKS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcnRjX3RtX3RvX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSwgdW5zaWduZWQgbG9uZyAqdGltZSkKK3sKKwkqdGltZSA9IHJ0Y190bV90b190aW1lNjQodG0pOworCisJcmV0dXJuIDA7Cit9CiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDVlMzQ0YmIuLjU1ZjVlZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTI0Myw2ICsyNDMsNDMgQEAKIAkJCQkoKHRhc2stPnN0YXRlICYgVEFTS19VTklOVEVSUlVQVElCTEUpICE9IDAgJiYgXAogCQkJCSAodGFzay0+ZmxhZ3MgJiBQRl9GUk9aRU4pID09IDApCiAKKyNpZmRlZiBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQCisKKyNkZWZpbmUgX19zZXRfdGFza19zdGF0ZSh0c2ssIHN0YXRlX3ZhbHVlKQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJKHRzayktPnRhc2tfc3RhdGVfY2hhbmdlID0gX1RISVNfSVBfOwkJXAorCQkodHNrKS0+c3RhdGUgPSAoc3RhdGVfdmFsdWUpOwkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfdGFza19zdGF0ZSh0c2ssIHN0YXRlX3ZhbHVlKQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJKHRzayktPnRhc2tfc3RhdGVfY2hhbmdlID0gX1RISVNfSVBfOwkJXAorCQlzZXRfbWIoKHRzayktPnN0YXRlLCAoc3RhdGVfdmFsdWUpKTsJCVwKKwl9IHdoaWxlICgwKQorCisvKgorICogc2V0X2N1cnJlbnRfc3RhdGUoKSBpbmNsdWRlcyBhIGJhcnJpZXIgc28gdGhhdCB0aGUgd3JpdGUgb2YgY3VycmVudC0+c3RhdGUKKyAqIGlzIGNvcnJlY3RseSBzZXJpYWxpc2VkIHdydCB0aGUgY2FsbGVyJ3Mgc3Vic2VxdWVudCB0ZXN0IG9mIHdoZXRoZXIgdG8KKyAqIGFjdHVhbGx5IHNsZWVwOgorICoKKyAqCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKyAqCWlmIChkb19pX25lZWRfdG9fc2xlZXAoKSkKKyAqCQlzY2hlZHVsZSgpOworICoKKyAqIElmIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCBzdWNoIHNlcmlhbGlzYXRpb24gdGhlbiB1c2UgX19zZXRfY3VycmVudF9zdGF0ZSgpCisgKi8KKyNkZWZpbmUgX19zZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCQlcCisJZG8gewkJCQkJCQlcCisJCWN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlID0gX1RISVNfSVBfOwkJXAorCQljdXJyZW50LT5zdGF0ZSA9IChzdGF0ZV92YWx1ZSk7CQkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIHNldF9jdXJyZW50X3N0YXRlKHN0YXRlX3ZhbHVlKQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlID0gX1RISVNfSVBfOwkJXAorCQlzZXRfbWIoY3VycmVudC0+c3RhdGUsIChzdGF0ZV92YWx1ZSkpOwkJXAorCX0gd2hpbGUgKDApCisKKyNlbHNlCisKICNkZWZpbmUgX19zZXRfdGFza19zdGF0ZSh0c2ssIHN0YXRlX3ZhbHVlKQkJXAogCWRvIHsgKHRzayktPnN0YXRlID0gKHN0YXRlX3ZhbHVlKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkJCVwKQEAgLTI1OSwxMSArMjk2LDEzIEBACiAgKgogICogSWYgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHN1Y2ggc2VyaWFsaXNhdGlvbiB0aGVuIHVzZSBfX3NldF9jdXJyZW50X3N0YXRlKCkKICAqLwotI2RlZmluZSBfX3NldF9jdXJyZW50X3N0YXRlKHN0YXRlX3ZhbHVlKQkJCVwKKyNkZWZpbmUgX19zZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCVwKIAlkbyB7IGN1cnJlbnQtPnN0YXRlID0gKHN0YXRlX3ZhbHVlKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGVfdmFsdWUpCQlcCisjZGVmaW5lIHNldF9jdXJyZW50X3N0YXRlKHN0YXRlX3ZhbHVlKQkJCVwKIAlzZXRfbWIoY3VycmVudC0+c3RhdGUsIChzdGF0ZV92YWx1ZSkpCiAKKyNlbmRpZgorCiAvKiBUYXNrIGNvbW1hbmQgbmFtZSBsZW5ndGggKi8KICNkZWZpbmUgVEFTS19DT01NX0xFTiAxNgogCkBAIC0xMjc4LDkgKzEzMTcsOSBAQAogCXVuaW9uIHJjdV9zcGVjaWFsIHJjdV9yZWFkX3VubG9ja19zcGVjaWFsOwogCXN0cnVjdCBsaXN0X2hlYWQgcmN1X25vZGVfZW50cnk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVSAqLwotI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVCiAJc3RydWN0IHJjdV9ub2RlICpyY3VfYmxvY2tlZF9ub2RlOwotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UgKi8KICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVCiAJdW5zaWduZWQgbG9uZyByY3VfdGFza3NfbnZjc3c7CiAJYm9vbCByY3VfdGFza3NfaG9sZG91dDsKQEAgLTE1NTgsMjggKzE1OTcsMjMgQEAKIAlzdHJ1Y3QgbnVtYV9ncm91cCAqbnVtYV9ncm91cDsKIAogCS8qCi0JICogRXhwb25lbnRpYWwgZGVjYXlpbmcgYXZlcmFnZSBvZiBmYXVsdHMgb24gYSBwZXItbm9kZSBiYXNpcy4KLQkgKiBTY2hlZHVsaW5nIHBsYWNlbWVudCBkZWNpc2lvbnMgYXJlIG1hZGUgYmFzZWQgb24gdGhlIHRoZXNlIGNvdW50cy4KLQkgKiBUaGUgdmFsdWVzIHJlbWFpbiBzdGF0aWMgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIFBURSBzY2FuCisJICogbnVtYV9mYXVsdHMgaXMgYW4gYXJyYXkgc3BsaXQgaW50byBmb3VyIHJlZ2lvbnM6CisJICogZmF1bHRzX21lbW9yeSwgZmF1bHRzX2NwdSwgZmF1bHRzX21lbW9yeV9idWZmZXIsIGZhdWx0c19jcHVfYnVmZmVyCisJICogaW4gdGhpcyBwcmVjaXNlIG9yZGVyLgorCSAqCisJICogZmF1bHRzX21lbW9yeTogRXhwb25lbnRpYWwgZGVjYXlpbmcgYXZlcmFnZSBvZiBmYXVsdHMgb24gYSBwZXItbm9kZQorCSAqIGJhc2lzLiBTY2hlZHVsaW5nIHBsYWNlbWVudCBkZWNpc2lvbnMgYXJlIG1hZGUgYmFzZWQgb24gdGhlc2UKKwkgKiBjb3VudHMuIFRoZSB2YWx1ZXMgcmVtYWluIHN0YXRpYyBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgUFRFIHNjYW4uCisJICogZmF1bHRzX2NwdTogVHJhY2sgdGhlIG5vZGVzIHRoZSBwcm9jZXNzIHdhcyBydW5uaW5nIG9uIHdoZW4gYSBOVU1BCisJICogaGludGluZyBmYXVsdCB3YXMgaW5jdXJyZWQuCisJICogZmF1bHRzX21lbW9yeV9idWZmZXIgYW5kIGZhdWx0c19jcHVfYnVmZmVyOiBSZWNvcmQgZmF1bHRzIHBlciBub2RlCisJICogZHVyaW5nIHRoZSBjdXJyZW50IHNjYW4gd2luZG93LiBXaGVuIHRoZSBzY2FuIGNvbXBsZXRlcywgdGhlIGNvdW50cworCSAqIGluIGZhdWx0c19tZW1vcnkgYW5kIGZhdWx0c19jcHUgZGVjYXkgYW5kIHRoZXNlIHZhbHVlcyBhcmUgY29waWVkLgogCSAqLwotCXVuc2lnbmVkIGxvbmcgKm51bWFfZmF1bHRzX21lbW9yeTsKKwl1bnNpZ25lZCBsb25nICpudW1hX2ZhdWx0czsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX251bWFfZmF1bHRzOwogCiAJLyoKLQkgKiBudW1hX2ZhdWx0c19idWZmZXIgcmVjb3JkcyBmYXVsdHMgcGVyIG5vZGUgZHVyaW5nIHRoZSBjdXJyZW50Ci0JICogc2NhbiB3aW5kb3cuIFdoZW4gdGhlIHNjYW4gY29tcGxldGVzLCB0aGUgY291bnRzIGluCi0JICogbnVtYV9mYXVsdHNfbWVtb3J5IGRlY2F5IGFuZCB0aGVzZSB2YWx1ZXMgYXJlIGNvcGllZC4KLQkgKi8KLQl1bnNpZ25lZCBsb25nICpudW1hX2ZhdWx0c19idWZmZXJfbWVtb3J5OwotCi0JLyoKLQkgKiBUcmFjayB0aGUgbm9kZXMgdGhlIHByb2Nlc3Mgd2FzIHJ1bm5pbmcgb24gd2hlbiBhIE5VTUEgaGludGluZwotCSAqIGZhdWx0IHdhcyBpbmN1cnJlZC4KLQkgKi8KLQl1bnNpZ25lZCBsb25nICpudW1hX2ZhdWx0c19jcHU7Ci0JdW5zaWduZWQgbG9uZyAqbnVtYV9mYXVsdHNfYnVmZmVyX2NwdTsKLQotCS8qCiAJICogbnVtYV9mYXVsdHNfbG9jYWxpdHkgdHJhY2tzIGlmIGZhdWx0cyByZWNvcmRlZCBkdXJpbmcgdGhlIGxhc3QKIAkgKiBzY2FuIHdpbmRvdyB3ZXJlIHJlbW90ZS9sb2NhbC4gVGhlIHRhc2sgc2NhbiBwZXJpb2QgaXMgYWRhcHRlZAogCSAqIGJhc2VkIG9uIHRoZSBsb2NhbGl0eSBvZiB0aGUgZmF1bHRzIHdpdGggZGlmZmVyZW50IHdlaWdodHMKQEAgLTE2NjEsNiArMTY5NSw5IEBACiAJdW5zaWduZWQgaW50CXNlcXVlbnRpYWxfaW87CiAJdW5zaWduZWQgaW50CXNlcXVlbnRpYWxfaW9fYXZnOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUAorCXVuc2lnbmVkIGxvbmcJdGFza19zdGF0ZV9jaGFuZ2U7CisjZW5kaWYKIH07CiAKIC8qIEZ1dHVyZS1zYWZlIGFjY2Vzc29yIGZvciBzdHJ1Y3QgdGFza19zdHJ1Y3QncyBjcHVzX2FsbG93ZWQuICovCkBAIC0yMDUyLDYgKzIwODksMTAgQEAKIAl0YXNrLT5mbGFncyB8PSBvcmlnX2ZsYWdzICYgZmxhZ3M7CiB9CiAKK2V4dGVybiBpbnQgY3B1c2V0X2NwdW1hc2tfY2FuX3Nocmluayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3VyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnRyaWFsKTsKK2V4dGVybiBpbnQgdGFza19jYW5fYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjc19jcHVzX2FsbG93ZWQpOwogI2lmZGVmIENPTkZJR19TTVAKIGV4dGVybiB2b2lkIGRvX3NldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzayk7CkBAIC0yNzYwLDcgKzI4MDEsNyBAQAogZXh0ZXJuIGludCBfY29uZF9yZXNjaGVkKHZvaWQpOwogCiAjZGVmaW5lIGNvbmRfcmVzY2hlZCgpICh7CQkJXAotCV9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCAwKTsJXAorCV9fX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgMCk7CVwKIAlfY29uZF9yZXNjaGVkKCk7CQkJXAogfSkKIApAQCAtMjc3MywxNCArMjgxNCwxNCBAQAogI2VuZGlmCiAKICNkZWZpbmUgY29uZF9yZXNjaGVkX2xvY2sobG9jaykgKHsJCQkJXAotCV9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCBQUkVFTVBUX0xPQ0tfT0ZGU0VUKTsJXAorCV9fX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgUFJFRU1QVF9MT0NLX09GRlNFVCk7XAogCV9fY29uZF9yZXNjaGVkX2xvY2sobG9jayk7CQkJCVwKIH0pCiAKIGV4dGVybiBpbnQgX19jb25kX3Jlc2NoZWRfc29mdGlycSh2b2lkKTsKIAogI2RlZmluZSBjb25kX3Jlc2NoZWRfc29mdGlycSgpICh7CQkJCQlcCi0JX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18sIFNPRlRJUlFfRElTQUJMRV9PRkZTRVQpOwlcCisJX19fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCBTT0ZUSVJRX0RJU0FCTEVfT0ZGU0VUKTsJXAogCV9fY29uZF9yZXNjaGVkX3NvZnRpcnEoKTsJCQkJCVwKIH0pCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCmluZGV4IGVjNTM4ZmMyLi5iYjliODM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTI1Niw3ICsyNTYsNyBAQAogI2RlZmluZSBNU0dfRU9GICAgICAgICAgTVNHX0ZJTgogCiAjZGVmaW5lIE1TR19GQVNUT1BFTgkweDIwMDAwMDAwCS8qIFNlbmQgZGF0YSBpbiBUQ1AgU1lOICovCi0jZGVmaW5lIE1TR19DTVNHX0NMT0VYRUMgMHg0MDAwMDAwMAkvKiBTZXQgY2xvc2Vfb25fZXhpdCBmb3IgZmlsZQorI2RlZmluZSBNU0dfQ01TR19DTE9FWEVDIDB4NDAwMDAwMDAJLyogU2V0IGNsb3NlX29uX2V4ZWMgZm9yIGZpbGUKIAkJCQkJICAgZGVzY3JpcHRvciByZWNlaXZlZCB0aHJvdWdoCiAJCQkJCSAgIFNDTV9SSUdIVFMgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKaW5kZXggOGUwMzAwNy4uYTdjYmI1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaApAQCAtNTMsNyArNTMsNyBAQAogCXN0cnVjdCByY3VfaGVhZAkJY3JfcmN1OwogCXN0cnVjdCBycGNfYXV0aCAqCWNyX2F1dGg7CiAJY29uc3Qgc3RydWN0IHJwY19jcmVkb3BzICpjcl9vcHM7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCXVuc2lnbmVkIGxvbmcJCWNyX21hZ2ljOwkvKiAweDBmNGFhNGYwICovCiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nCQljcl9leHBpcmU7CS8qIHdoZW4gdG8gZ2MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAppbmRleCA3MDczNmI5Li5kODZhY2M2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCkBAIC02Myw2ICs2Myw5IEBACiAJc3RydWN0IHJwY19ydHQJCWNsX3J0dF9kZWZhdWx0OwogCXN0cnVjdCBycGNfdGltZW91dAljbF90aW1lb3V0X2RlZmF1bHQ7CiAJY29uc3Qgc3RydWN0IHJwY19wcm9ncmFtICpjbF9wcm9ncmFtOworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKKwlzdHJ1Y3QgZGVudHJ5CQkqY2xfZGVidWdmczsJLyogZGVidWdmcyBkaXJlY3RvcnkgKi8KKyNlbmRpZgogfTsKIAogLyoKQEAgLTE3Niw1ICsxNzksNiBAQAogY29uc3QgY2hhcgkqcnBjX3BlZXJhZGRyMnN0cihzdHJ1Y3QgcnBjX2NsbnQgKiwgZW51bSBycGNfZGlzcGxheV9mb3JtYXRfdCk7CiBpbnQJCXJwY19sb2NhbGFkZHIoc3RydWN0IHJwY19jbG50ICosIHN0cnVjdCBzb2NrYWRkciAqLCBzaXplX3QpOwogCitjb25zdCBjaGFyICpycGNfcHJvY19uYW1lKGNvbnN0IHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfQ0xOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvZGVidWcuaAppbmRleCA5Mzg1YmQ3Li5jNTdkOGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKQEAgLTEwLDIyICsxMCwxMCBAQAogCiAjaW5jbHVkZSA8dWFwaS9saW51eC9zdW5ycGMvZGVidWcuaD4KIAotCi0vKgotICogRW5hYmxlIFJQQyBkZWJ1Z2dpbmcvcHJvZmlsaW5nLgotICovCi0jaWZkZWYgQ09ORklHX1NVTlJQQ19ERUJVRwotI2RlZmluZSAgUlBDX0RFQlVHCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLSNkZWZpbmUgUlBDX1RSQUNFUE9JTlRTCi0jZW5kaWYKLS8qICNkZWZpbmUgIFJQQ19QUk9GSUxFICovCi0KIC8qCiAgKiBEZWJ1Z2dpbmcgbWFjcm9zIGV0YwogICovCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogZXh0ZXJuIHVuc2lnbmVkIGludAkJcnBjX2RlYnVnOwogZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzX2RlYnVnOwogZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzZF9kZWJ1ZzsKQEAgLTM2LDcgKzI0LDcgQEAKICNkZWZpbmUgZHByaW50a19yY3UoYXJncy4uLikJZGZwcmludGtfcmN1KEZBQ0lMSVRZLCAjIyBhcmdzKQogCiAjdW5kZWYgaWZkZWJ1ZwotI2lmZGVmIFJQQ19ERUJVRwkJCQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIGlmZGVidWcoZmFjKQkJaWYgKHVubGlrZWx5KHJwY19kZWJ1ZyAmIFJQQ0RCR18jI2ZhYykpCiAKICMgZGVmaW5lIGRmcHJpbnRrKGZhYywgYXJncy4uLikJXApAQCAtNjUsOSArNTMsNTUgQEAKIC8qCiAgKiBTeXNjdGwgaW50ZXJmYWNlIGZvciBSUEMgZGVidWdnaW5nCiAgKi8KLSNpZmRlZiBSUENfREVCVUcKKworc3RydWN0IHJwY19jbG50Oworc3RydWN0IHJwY194cHJ0OworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogdm9pZAkJcnBjX3JlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKIHZvaWQJCXJwY191bnJlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKK2ludAkJc3VucnBjX2RlYnVnZnNfaW5pdCh2b2lkKTsKK3ZvaWQJCXN1bnJwY19kZWJ1Z2ZzX2V4aXQodm9pZCk7CitpbnQJCXJwY19jbG50X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHJwY19jbG50ICopOwordm9pZAkJcnBjX2NsbnRfZGVidWdmc191bnJlZ2lzdGVyKHN0cnVjdCBycGNfY2xudCAqKTsKK2ludAkJcnBjX3hwcnRfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcnBjX3hwcnQgKik7Cit2b2lkCQlycGNfeHBydF9kZWJ1Z2ZzX3VucmVnaXN0ZXIoc3RydWN0IHJwY194cHJ0ICopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50CitzdW5ycGNfZGVidWdmc19pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc3VucnBjX2RlYnVnZnNfZXhpdCh2b2lkKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JwY19jbG50X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHJwY19jbG50ICpjbG50KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3JwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludAorcnBjX3hwcnRfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcnBjX3hwcnRfZGVidWdmc191bnJlZ2lzdGVyKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3sKKwlyZXR1cm47Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaAppbmRleCAxNTY1YmJlLi5lZWNiNWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tZXRyaWNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvbWV0cmljcy5oCkBAIC0yNywxMCArMjcsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjZGVmaW5lIFJQQ19JT1NUQVRTX1ZFUlMJIjEuMCIKIAogc3RydWN0IHJwY19pb3N0YXRzIHsKKwlzcGlubG9ja190CQlvbV9sb2NrOworCiAJLyoKIAkgKiBUaGVzZSBjb3VudGVycyBnaXZlIGFuIGlkZWEgYWJvdXQgaG93IG1hbnkgcmVxdWVzdAogCSAqIHRyYW5zbWlzc2lvbnMgYXJlIHJlcXVpcmVkLCBvbiBhdmVyYWdlLCB0byBjb21wbGV0ZSB0aGF0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAppbmRleCAxYTg5NTk5Li41ZjFlNmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKQEAgLTc5LDcgKzc5LDcgQEAKIAl1bnNpZ25lZCBzaG9ydAkJdGtfZmxhZ3M7CS8qIG1pc2MgZmxhZ3MgKi8KIAl1bnNpZ25lZCBzaG9ydAkJdGtfdGltZW91dHM7CS8qIG1haiB0aW1lb3V0cyAqLwogCi0jaWYgZGVmaW5lZChSUENfREVCVUcpIHx8IGRlZmluZWQoUlBDX1RSQUNFUE9JTlRTKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykgfHwgSVNfRU5BQkxFRChDT05GSUdfVFJBQ0VQT0lOVFMpCiAJdW5zaWduZWQgc2hvcnQJCXRrX3BpZDsJCS8qIGRlYnVnZ2luZyBhaWQgKi8KICNlbmRpZgogCXVuc2lnbmVkIGNoYXIJCXRrX3ByaW9yaXR5IDogMiwvKiBUYXNrIHByaW9yaXR5ICovCkBAIC0xODcsNyArMTg3LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQlucjsJCQkvKiAjIHRhc2tzIHJlbWFpbmluZyBmb3IgY29va2llICovCiAJdW5zaWduZWQgc2hvcnQJCXFsZW47CQkJLyogdG90YWwgIyB0YXNrcyB3YWl0aW5nIGluIHF1ZXVlICovCiAJc3RydWN0IHJwY190aW1lcgl0aW1lcl9saXN0OwotI2lmIGRlZmluZWQoUlBDX0RFQlVHKSB8fCBkZWZpbmVkKFJQQ19UUkFDRVBPSU5UUykKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpIHx8IElTX0VOQUJMRUQoQ09ORklHX1RSQUNFUE9JTlRTKQogCWNvbnN0IGNoYXIgKgkJbmFtZTsKICNlbmRpZgogfTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogaW50CQlycGNpb2RfdXAodm9pZCk7CiB2b2lkCQlycGNpb2RfZG93bih2b2lkKTsKIGludAkJX19ycGNfd2FpdF9mb3JfY29tcGxldGlvbl90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzaywgd2FpdF9iaXRfYWN0aW9uX2YgKik7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogc3RydWN0IG5ldDsKIHZvaWQJCXJwY19zaG93X3Rhc2tzKHN0cnVjdCBuZXQgKik7CiAjZW5kaWYKQEAgLTI1MSw3ICsyNTEsNyBAQAogCXJldHVybiBfX3JwY193YWl0X2Zvcl9jb21wbGV0aW9uX3Rhc2sodGFzaywgTlVMTCk7CiB9CiAKLSNpZiBkZWZpbmVkKFJQQ19ERUJVRykgfHwgZGVmaW5lZCAoUlBDX1RSQUNFUE9JTlRTKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykgfHwgSVNfRU5BQkxFRChDT05GSUdfVFJBQ0VQT0lOVFMpCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKiBycGNfcW5hbWUoY29uc3Qgc3RydWN0IHJwY193YWl0X3F1ZXVlICpxKQogewogCXJldHVybiAoKHEgJiYgcS0+bmFtZSkgPyBxLT5uYW1lIDogInVua25vd24iKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAppbmRleCBjZjM5MWVlLi45ZDI3YWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCkBAIC0yMzksNiArMjM5LDkgQEAKIAlzdHJ1Y3QgbmV0CQkqeHBydF9uZXQ7CiAJY29uc3QgY2hhcgkJKnNlcnZlcm5hbWU7CiAJY29uc3QgY2hhcgkJKmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9NQVhdOworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmczsJCS8qIGRlYnVnZnMgZGlyZWN0b3J5ICovCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0c29jay5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHNvY2suaAppbmRleCAxYWQzNmNjLi43NTkxNzg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0c29jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRzb2NrLmgKQEAgLTE3LDYgKzE3LDY1IEBACiAjZGVmaW5lIFJQQ19ERUZfTUlOX1JFU1ZQT1JUCSg2NjVVKQogI2RlZmluZSBSUENfREVGX01BWF9SRVNWUE9SVAkoMTAyM1UpCiAKK3N0cnVjdCBzb2NrX3hwcnQgeworCXN0cnVjdCBycGNfeHBydAkJeHBydDsKKworCS8qCisJICogTmV0d29yayBsYXllcgorCSAqLworCXN0cnVjdCBzb2NrZXQgKgkJc29jazsKKwlzdHJ1Y3Qgc29jayAqCQlpbmV0OworCisJLyoKKwkgKiBTdGF0ZSBvZiBUQ1AgcmVwbHkgcmVjZWl2ZQorCSAqLworCV9fYmUzMgkJCXRjcF9mcmFnaGRyLAorCQkJCXRjcF94aWQsCisJCQkJdGNwX2NhbGxkaXI7CisKKwl1MzIJCQl0Y3Bfb2Zmc2V0LAorCQkJCXRjcF9yZWNsZW47CisKKwl1bnNpZ25lZCBsb25nCQl0Y3BfY29waWVkLAorCQkJCXRjcF9mbGFnczsKKworCS8qCisJICogQ29ubmVjdGlvbiBvZiB0cmFuc3BvcnRzCisJICovCisJc3RydWN0IGRlbGF5ZWRfd29yawljb25uZWN0X3dvcmtlcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQlzcmNhZGRyOworCXVuc2lnbmVkIHNob3J0CQlzcmNwb3J0OworCisJLyoKKwkgKiBVRFAgc29ja2V0IGJ1ZmZlciBzaXplIHBhcmFtZXRlcnMKKwkgKi8KKwlzaXplX3QJCQlyY3ZzaXplLAorCQkJCXNuZHNpemU7CisKKwkvKgorCSAqIFNhdmVkIHNvY2tldCBjYWxsYmFjayBhZGRyZXNzZXMKKwkgKi8KKwl2b2lkCQkJKCpvbGRfZGF0YV9yZWFkeSkoc3RydWN0IHNvY2sgKik7CisJdm9pZAkJCSgqb2xkX3N0YXRlX2NoYW5nZSkoc3RydWN0IHNvY2sgKik7CisJdm9pZAkJCSgqb2xkX3dyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqKTsKKwl2b2lkCQkJKCpvbGRfZXJyb3JfcmVwb3J0KShzdHJ1Y3Qgc29jayAqKTsKK307CisKKy8qCisgKiBUQ1AgcmVjZWl2ZSBzdGF0ZSBmbGFncworICovCisjZGVmaW5lIFRDUF9SQ1ZfTEFTVF9GUkFHCSgxVUwgPDwgMCkKKyNkZWZpbmUgVENQX1JDVl9DT1BZX0ZSQUdIRFIJKDFVTCA8PCAxKQorI2RlZmluZSBUQ1BfUkNWX0NPUFlfWElECSgxVUwgPDwgMikKKyNkZWZpbmUgVENQX1JDVl9DT1BZX0RBVEEJKDFVTCA8PCAzKQorI2RlZmluZSBUQ1BfUkNWX1JFQURfQ0FMTERJUgkoMVVMIDw8IDQpCisjZGVmaW5lIFRDUF9SQ1ZfQ09QWV9DQUxMRElSCSgxVUwgPDwgNSkKKworLyoKKyAqIFRDUCBSUEMgZmxhZ3MKKyAqLworI2RlZmluZSBUQ1BfUlBDX1JFUExZCQkoMVVMIDw8IDYpCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX1hQUlRTT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzbG9nLmggYi9pbmNsdWRlL2xpbnV4L3N5c2xvZy5oCmluZGV4IDk4YTMxNTMuLjRiN2I4NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzbG9nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNsb2cuaApAQCAtNDksNCArNDksMTMgQEAKIAogaW50IGRvX3N5c2xvZyhpbnQgdHlwZSwgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGNvdW50LCBib29sIGZyb21fZmlsZSk7CiAKKyNpZmRlZiBDT05GSUdfUFJJTlRLCitpbnQgY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKGludCB0eXBlLCBib29sIGZyb21fZmlsZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogX0xJTlVYX1NZU0xPR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IDhjNDJjZjguLjIwM2MyYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC0zOSw5ICszOSwyMCBAQAogCXJldHVybiBsaHMtPnR2X3VzZWMgLSByaHMtPnR2X3VzZWM7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1rdGltZShjb25zdCB1bnNpZ25lZCBpbnQgeWVhciwgY29uc3QgdW5zaWduZWQgaW50IG1vbiwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGF5LCBjb25zdCB1bnNpZ25lZCBpbnQgaG91ciwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWluLCBjb25zdCB1bnNpZ25lZCBpbnQgc2VjKTsKK2V4dGVybiB0aW1lNjRfdCBta3RpbWU2NChjb25zdCB1bnNpZ25lZCBpbnQgeWVhciwgY29uc3QgdW5zaWduZWQgaW50IG1vbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGludCBkYXksIGNvbnN0IHVuc2lnbmVkIGludCBob3VyLAorCQkJY29uc3QgdW5zaWduZWQgaW50IG1pbiwgY29uc3QgdW5zaWduZWQgaW50IHNlYyk7CisKKy8qKgorICogRGVwcmVjYXRlZC4gVXNlIG1rdGltZTY0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBta3RpbWUoY29uc3QgdW5zaWduZWQgaW50IHllYXIsCisJCQljb25zdCB1bnNpZ25lZCBpbnQgbW9uLCBjb25zdCB1bnNpZ25lZCBpbnQgZGF5LAorCQkJY29uc3QgdW5zaWduZWQgaW50IGhvdXIsIGNvbnN0IHVuc2lnbmVkIGludCBtaW4sCisJCQljb25zdCB1bnNpZ25lZCBpbnQgc2VjKQoreworCXJldHVybiBta3RpbWU2NCh5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMpOworfQogCiBleHRlcm4gdm9pZCBzZXRfbm9ybWFsaXplZF90aW1lc3BlYyhzdHJ1Y3QgdGltZXNwZWMgKnRzLCB0aW1lX3Qgc2VjLCBzNjQgbnNlYyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZWtlZXBlcl9pbnRlcm5hbC5oIGIvaW5jbHVkZS9saW51eC90aW1la2VlcGVyX2ludGVybmFsLmgKaW5kZXggOTU2NDBkYy4uMDVhZjlhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1la2VlcGVyX2ludGVybmFsLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1la2VlcGVyX2ludGVybmFsLmgKQEAgLTQyLDYgKzQyLDcgQEAKICAqIHN0cnVjdCB0aW1la2VlcGVyIC0gU3RydWN0dXJlIGhvbGRpbmcgaW50ZXJuYWwgdGltZWtlZXBpbmcgdmFsdWVzLgogICogQHRrcjoJCVRoZSByZWFkb3V0IGJhc2Ugc3RydWN0dXJlCiAgKiBAeHRpbWVfc2VjOgkJQ3VycmVudCBDTE9DS19SRUFMVElNRSB0aW1lIGluIHNlY29uZHMKKyAqIEBrdGltZV9zZWM6CQlDdXJyZW50IENMT0NLX01PTk9UT05JQyB0aW1lIGluIHNlY29uZHMKICAqIEB3YWxsX3RvX21vbm90b25pYzoJQ0xPQ0tfUkVBTFRJTUUgdG8gQ0xPQ0tfTU9OT1RPTklDIG9mZnNldAogICogQG9mZnNfcmVhbDoJCU9mZnNldCBjbG9jayBtb25vdG9uaWMgLT4gY2xvY2sgcmVhbHRpbWUKICAqIEBvZmZzX2Jvb3Q6CQlPZmZzZXQgY2xvY2sgbW9ub3RvbmljIC0+IGNsb2NrIGJvb3R0aW1lCkBAIC03Nyw2ICs3OCw3IEBACiBzdHJ1Y3QgdGltZWtlZXBlciB7CiAJc3RydWN0IHRrX3JlYWRfYmFzZQl0a3I7CiAJdTY0CQkJeHRpbWVfc2VjOworCXVuc2lnbmVkIGxvbmcJCWt0aW1lX3NlYzsKIAlzdHJ1Y3QgdGltZXNwZWM2NAl3YWxsX3RvX21vbm90b25pYzsKIAlrdGltZV90CQkJb2Zmc19yZWFsOwogCWt0aW1lX3QJCQlvZmZzX2Jvb3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVrZWVwaW5nLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVrZWVwaW5nLmgKaW5kZXggMWNhYTZiMC4uOWI2M2QxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1la2VlcGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZWtlZXBpbmcuaApAQCAtMTAsNyArMTAsNyBAQAogICogR2V0IGFuZCBzZXQgdGltZW9mZGF5CiAgKi8KIGV4dGVybiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOwotZXh0ZXJuIGludCBkb19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0dik7CitleHRlcm4gaW50IGRvX3NldHRpbWVvZmRheTY0KGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7CiBleHRlcm4gaW50IGRvX3N5c19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0diwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKIApAQCAtMjUsMTQgKzI1LDI0IEBACiAvKgogICogdGltZXNwZWMgYmFzZWQgaW50ZXJmYWNlcwogICovCi1zdHJ1Y3QgdGltZXNwZWMgZ2V0X21vbm90b25pY19jb2Fyc2Uodm9pZCk7Ci1leHRlcm4gdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cyk7CitzdHJ1Y3QgdGltZXNwZWM2NCBnZXRfbW9ub3RvbmljX2NvYXJzZTY0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ2V0cmF3bW9ub3RvbmljNjQoc3RydWN0IHRpbWVzcGVjNjQgKnRzKTsKIGV4dGVybiB2b2lkIGt0aW1lX2dldF90czY0KHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7CitleHRlcm4gdGltZTY0X3Qga3RpbWVfZ2V0X3NlY29uZHModm9pZCk7CitleHRlcm4gdGltZTY0X3Qga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcyh2b2lkKTsKIAogZXh0ZXJuIGludCBfX2dldG5zdGltZW9mZGF5NjQoc3RydWN0IHRpbWVzcGVjNjQgKnR2KTsKIGV4dGVybiB2b2lkIGdldG5zdGltZW9mZGF5NjQoc3RydWN0IHRpbWVzcGVjNjQgKnR2KTsKIAogI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKy8qKgorICogRGVwcmVjYXRlZC4gVXNlIGRvX3NldHRpbWVvZmRheTY0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvX3NldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCXJldHVybiBkb19zZXR0aW1lb2ZkYXk2NCh0cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IF9fZ2V0bnN0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0cykKIHsKIAlyZXR1cm4gX19nZXRuc3RpbWVvZmRheTY0KHRzKTsKQEAgLTUzLDcgKzYzLDI3IEBACiAJZ2V0bnN0aW1lb2ZkYXk2NCh0cyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlnZXRyYXdtb25vdG9uaWM2NCh0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbWVzcGVjIGdldF9tb25vdG9uaWNfY29hcnNlKHZvaWQpCit7CisJcmV0dXJuIGdldF9tb25vdG9uaWNfY29hcnNlNjQoKTsKK30KICNlbHNlCisvKioKKyAqIERlcHJlY2F0ZWQuIFVzZSBkb19zZXR0aW1lb2ZkYXk2NCgpLgorICovCitzdGF0aWMgaW5saW5lIGludCBkb19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OworCisJdHM2NCA9IHRpbWVzcGVjX3RvX3RpbWVzcGVjNjQoKnRzKTsKKwlyZXR1cm4gZG9fc2V0dGltZW9mZGF5NjQoJnRzNjQpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBfX2dldG5zdGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CiAJc3RydWN0IHRpbWVzcGVjNjQgdHM2NDsKQEAgLTg2LDYgKzExNiwxOSBAQAogCWdldG5zdGltZW9mZGF5NjQoJnRzNjQpOwogCSp0cyA9IHRpbWVzcGVjNjRfdG9fdGltZXNwZWModHM2NCk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OworCisJZ2V0cmF3bW9ub3RvbmljNjQoJnRzNjQpOworCSp0cyA9IHRpbWVzcGVjNjRfdG9fdGltZXNwZWModHM2NCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbWVzcGVjIGdldF9tb25vdG9uaWNfY29hcnNlKHZvaWQpCit7CisJcmV0dXJuIHRpbWVzcGVjNjRfdG9fdGltZXNwZWMoZ2V0X21vbm90b25pY19jb2Fyc2U2NCgpKTsKK30KICNlbmRpZgogCiBleHRlcm4gdm9pZCBnZXRib290dGltZShzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKQEAgLTE4Miw3ICsyMjUsNyBAQAogLyoKICAqIFJUQyBzcGVjaWZpYwogICovCi1leHRlcm4gdm9pZCB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEpOworZXh0ZXJuIHZvaWQgdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZTY0KHN0cnVjdCB0aW1lc3BlYzY0ICpkZWx0YSk7CiAKIC8qCiAgKiBQUFMgYWNjZXNzb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmV4cHJlc3MuaCBiL2luY2x1ZGUvbGludXgvdmV4cHJlc3MuaAppbmRleCBhNGM5NTQ3Li5mOGU3NmUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZleHByZXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC92ZXhwcmVzcy5oCkBAIC0xNSw4ICsxNSw2IEBACiAjZGVmaW5lIF9MSU5VWF9WRVhQUkVTU19ICiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KIAogI2RlZmluZSBWRVhQUkVTU19TSVRFX01CCQkwCkBAIC0yNCwxMyArMjIsNiBAQAogI2RlZmluZSBWRVhQUkVTU19TSVRFX0RCMgkJMgogI2RlZmluZSBWRVhQUkVTU19TSVRFX01BU1RFUgkJMHhmCiAKLSNkZWZpbmUgVkVYUFJFU1NfUkVTX0ZVTkMoX3NpdGUsIF9mdW5jKQlcCi17CQkJCQlcCi0JLnN0YXJ0ID0gKF9zaXRlKSwJCVwKLQkuZW5kID0gKF9mdW5jKSwJCQlcCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9CVVMsCVwKLX0KLQogLyogQ29uZmlnIGluZnJhc3RydWN0dXJlICovCiAKIHZvaWQgdmV4cHJlc3NfY29uZmlnX3NldF9tYXN0ZXIodTMyIHNpdGUpOwpAQCAtNTgsMTYgKzQ5LDYgQEAKIAogLyogUGxhdGZvcm0gY29udHJvbCAqLwogCi11bnNpZ25lZCBpbnQgdmV4cHJlc3NfZ2V0X21jaV9jYXJkaW4oc3RydWN0IGRldmljZSAqZGV2KTsKLXUzMiB2ZXhwcmVzc19nZXRfcHJvY2lkKGludCBzaXRlKTsKLXZvaWQgKnZleHByZXNzX2dldF8yNG1oel9jbG9ja19iYXNlKHZvaWQpOwogdm9pZCB2ZXhwcmVzc19mbGFnc19zZXQodTMyIGRhdGEpOwogCi12b2lkIHZleHByZXNzX3N5c3JlZ19lYXJseV9pbml0KHZvaWQgX19pb21lbSAqYmFzZSk7Ci1pbnQgdmV4cHJlc3Nfc3lzY2ZnX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLQotLyogQ2xvY2tzICovCi0KLXZvaWQgdmV4cHJlc3NfY2xrX2luaXQodm9pZCBfX2lvbWVtICpzcDgxMF9iYXNlKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dhaXQuaCBiL2luY2x1ZGUvbGludXgvd2FpdC5oCmluZGV4IGU0YThlYjkuLjIyMzJlZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2FpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvd2FpdC5oCkBAIC0xMyw5ICsxMywxMiBAQAogdHlwZWRlZiBpbnQgKCp3YWl0X3F1ZXVlX2Z1bmNfdCkod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgZmxhZ3MsIHZvaWQgKmtleSk7CiBpbnQgZGVmYXVsdF93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IGZsYWdzLCB2b2lkICprZXkpOwogCisvKiBfX3dhaXRfcXVldWU6OmZsYWdzICovCisjZGVmaW5lIFdRX0ZMQUdfRVhDTFVTSVZFCTB4MDEKKyNkZWZpbmUgV1FfRkxBR19XT0tFTgkJMHgwMgorCiBzdHJ1Y3QgX193YWl0X3F1ZXVlIHsKIAl1bnNpZ25lZCBpbnQJCWZsYWdzOwotI2RlZmluZSBXUV9GTEFHX0VYQ0xVU0lWRQkweDAxCiAJdm9pZAkJCSpwcml2YXRlOwogCXdhaXRfcXVldWVfZnVuY190CWZ1bmM7CiAJc3RydWN0IGxpc3RfaGVhZAl0YXNrX2xpc3Q7CkBAIC0yNTgsMTEgKzI2MSwzNyBAQAogICovCiAjZGVmaW5lIHdhaXRfZXZlbnQod3EsIGNvbmRpdGlvbikJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmIChjb25kaXRpb24pCQkJCQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKIAlfX3dhaXRfZXZlbnQod3EsIGNvbmRpdGlvbik7CQkJCQlcCiB9IHdoaWxlICgwKQogCisjZGVmaW5lIF9fd2FpdF9ldmVudF9mcmVlemFibGUod3EsIGNvbmRpdGlvbikJCQkJXAorCV9fX3dhaXRfZXZlbnQod3EsIGNvbmRpdGlvbiwgVEFTS19JTlRFUlJVUFRJQkxFLCAwLCAwLAkJXAorCQkJICAgIHNjaGVkdWxlKCk7IHRyeV90b19mcmVlemUoKSkKKworLyoqCisgKiB3YWl0X2V2ZW50IC0gc2xlZXAgKG9yIGZyZWV6ZSkgdW50aWwgYSBjb25kaXRpb24gZ2V0cyB0cnVlCisgKiBAd3E6IHRoZSB3YWl0cXVldWUgdG8gd2FpdCBvbgorICogQGNvbmRpdGlvbjogYSBDIGV4cHJlc3Npb24gZm9yIHRoZSBldmVudCB0byB3YWl0IGZvcgorICoKKyAqIFRoZSBwcm9jZXNzIGlzIHB1dCB0byBzbGVlcCAoVEFTS19JTlRFUlJVUFRJQkxFIC0tIHNvIGFzIG5vdCB0byBjb250cmlidXRlCisgKiB0byBzeXN0ZW0gbG9hZCkgdW50aWwgdGhlIEBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuIFRoZQorICogQGNvbmRpdGlvbiBpcyBjaGVja2VkIGVhY2ggdGltZSB0aGUgd2FpdHF1ZXVlIEB3cSBpcyB3b2tlbiB1cC4KKyAqCisgKiB3YWtlX3VwKCkgaGFzIHRvIGJlIGNhbGxlZCBhZnRlciBjaGFuZ2luZyBhbnkgdmFyaWFibGUgdGhhdCBjb3VsZAorICogY2hhbmdlIHRoZSByZXN1bHQgb2YgdGhlIHdhaXQgY29uZGl0aW9uLgorICovCisjZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlKHdxLCBjb25kaXRpb24pCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldCA9IDA7CQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCisJCV9fcmV0ID0gX193YWl0X2V2ZW50X2ZyZWV6YWJsZSh3cSwgY29uZGl0aW9uKTsJCVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKICNkZWZpbmUgX193YWl0X2V2ZW50X3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJCQlcCiAJX19fd2FpdF9ldmVudCh3cSwgX19fd2FpdF9jb25kX3RpbWVvdXQoY29uZGl0aW9uKSwJCVwKIAkJICAgICAgVEFTS19VTklOVEVSUlVQVElCTEUsIDAsIHRpbWVvdXQsCQkJXApAQCAtMjkwLDExICszMTksMzAgQEAKICNkZWZpbmUgd2FpdF9ldmVudF90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCQkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX3JldCA9IHRpbWVvdXQ7CQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoIV9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbikpCQkJCVwKIAkJX19yZXQgPSBfX3dhaXRfZXZlbnRfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KTsJXAogCV9fcmV0OwkJCQkJCQkJXAogfSkKIAorI2RlZmluZSBfX3dhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJCVwKKwlfX193YWl0X2V2ZW50KHdxLCBfX193YWl0X2NvbmRfdGltZW91dChjb25kaXRpb24pLAkJXAorCQkgICAgICBUQVNLX0lOVEVSUlVQVElCTEUsIDAsIHRpbWVvdXQsCQkJXAorCQkgICAgICBfX3JldCA9IHNjaGVkdWxlX3RpbWVvdXQoX19yZXQpOyB0cnlfdG9fZnJlZXplKCkpCisKKy8qCisgKiBsaWtlIHdhaXRfZXZlbnRfdGltZW91dCgpIC0tIGV4Y2VwdCBpdCB1c2VzIFRBU0tfSU5URVJSVVBUSUJMRSB0byBhdm9pZAorICogaW5jcmVhc2luZyBsb2FkIGFuZCBpcyBmcmVlemFibGUuCisgKi8KKyNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX3JldCA9IHRpbWVvdXQ7CQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlpZiAoIV9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbikpCQkJCVwKKwkJX19yZXQgPSBfX3dhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCk7CVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKICNkZWZpbmUgX193YWl0X2V2ZW50X2NtZCh3cSwgY29uZGl0aW9uLCBjbWQxLCBjbWQyKQkJCVwKIAkodm9pZClfX193YWl0X2V2ZW50KHdxLCBjb25kaXRpb24sIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCAwLCAwLAlcCiAJCQkgICAgY21kMTsgc2NoZWR1bGUoKTsgY21kMikKQEAgLTMxNSw2ICszNjMsNyBAQAogICovCiAjZGVmaW5lIHdhaXRfZXZlbnRfY21kKHdxLCBjb25kaXRpb24sIGNtZDEsIGNtZDIpCQkJXAogZG8gewkJCQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJaWYgKGNvbmRpdGlvbikJCQkJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCV9fd2FpdF9ldmVudF9jbWQod3EsIGNvbmRpdGlvbiwgY21kMSwgY21kMik7CQkJXApAQCAtMzQyLDYgKzM5MSw3IEBACiAjZGVmaW5lIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh3cSwgY29uZGl0aW9uKQkJCQlcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmICghKGNvbmRpdGlvbikpCQkJCQkJXAogCQlfX3JldCA9IF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHdxLCBjb25kaXRpb24pOwlcCiAJX19yZXQ7CQkJCQkJCQlcCkBAIC0zNzUsNiArNDI1LDcgQEAKICNkZWZpbmUgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX3JldCA9IHRpbWVvdXQ7CQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoIV9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbikpCQkJCVwKIAkJX19yZXQgPSBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLAkJXAogCQkJCQkJY29uZGl0aW9uLCB0aW1lb3V0KTsJXApAQCAtNDI1LDYgKzQ3Niw3IEBACiAjZGVmaW5lIHdhaXRfZXZlbnRfaHJ0aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCQkJXAogKHsJCQkJCQkJCQlcCiAJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKIAkJX19yZXQgPSBfX3dhaXRfZXZlbnRfaHJ0aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQsCVwKIAkJCQkJICAgICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsJXApAQCAtNDUwLDYgKzUwMiw3IEBACiAjZGVmaW5lIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9ocnRpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX3JldCA9IDA7CQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCiAJCV9fcmV0ID0gX193YWl0X2V2ZW50X2hydGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0LAlcCiAJCQkJCSAgICAgICBUQVNLX0lOVEVSUlVQVElCTEUpOwlcCkBAIC00NjMsMTIgKzUxNiwyNyBAQAogI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKHdxLCBjb25kaXRpb24pCQlcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmICghKGNvbmRpdGlvbikpCQkJCQkJXAogCQlfX3JldCA9IF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKTtcCiAJX19yZXQ7CQkJCQkJCQlcCiB9KQogCiAKKyNkZWZpbmUgX193YWl0X2V2ZW50X2ZyZWV6YWJsZV9leGNsdXNpdmUod3EsIGNvbmRpdGlvbikJCQlcCisJX19fd2FpdF9ldmVudCh3cSwgY29uZGl0aW9uLCBUQVNLX0lOVEVSUlVQVElCTEUsIDEsIDAsCQlcCisJCQlzY2hlZHVsZSgpOyB0cnlfdG9fZnJlZXplKCkpCisKKyNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfZXhjbHVzaXZlKHdxLCBjb25kaXRpb24pCQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKKwkJX19yZXQgPSBfX3dhaXRfZXZlbnRfZnJlZXphYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKTtcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCisKICNkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja2VkKHdxLCBjb25kaXRpb24sIGV4Y2x1c2l2ZSwgaXJxKSBcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCkBAIC02MzcsNiArNzA1LDcgQEAKICNkZWZpbmUgd2FpdF9ldmVudF9raWxsYWJsZSh3cSwgY29uZGl0aW9uKQkJCQlcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmICghKGNvbmRpdGlvbikpCQkJCQkJXAogCQlfX3JldCA9IF9fd2FpdF9ldmVudF9raWxsYWJsZSh3cSwgY29uZGl0aW9uKTsJCVwKIAlfX3JldDsJCQkJCQkJCVwKQEAgLTgzMCw2ICs4OTksOCBAQAogbG9uZyBwcmVwYXJlX3RvX3dhaXRfZXZlbnQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqd2FpdCwgaW50IHN0YXRlKTsKIHZvaWQgZmluaXNoX3dhaXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqd2FpdCk7CiB2b2lkIGFib3J0X2V4Y2x1c2l2ZV93YWl0KHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIGludCBtb2RlLCB2b2lkICprZXkpOworbG9uZyB3YWl0X3dva2VuKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgbG9uZyB0aW1lb3V0KTsKK2ludCB3b2tlbl93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSk7CiBpbnQgYXV0b3JlbW92ZV93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSk7CiBpbnQgd2FrZV9iaXRfZnVuY3Rpb24od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KTsKIApAQCAtODg2LDYgKzk1Nyw3IEBACiBzdGF0aWMgaW5saW5lIGludAogd2FpdF9vbl9iaXQodm9pZCAqd29yZCwgaW50IGJpdCwgdW5zaWduZWQgbW9kZSkKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmICghdGVzdF9iaXQoYml0LCB3b3JkKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIG91dF9vZl9saW5lX3dhaXRfb25fYml0KHdvcmQsIGJpdCwKQEAgLTkxMCw2ICs5ODIsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIHdhaXRfb25fYml0X2lvKHZvaWQgKndvcmQsIGludCBiaXQsIHVuc2lnbmVkIG1vZGUpCiB7CisJbWlnaHRfc2xlZXAoKTsKIAlpZiAoIXRlc3RfYml0KGJpdCwgd29yZCkpCiAJCXJldHVybiAwOwogCXJldHVybiBvdXRfb2ZfbGluZV93YWl0X29uX2JpdCh3b3JkLCBiaXQsCkBAIC05MzYsNiArMTAwOSw3IEBACiBzdGF0aWMgaW5saW5lIGludAogd2FpdF9vbl9iaXRfYWN0aW9uKHZvaWQgKndvcmQsIGludCBiaXQsIHdhaXRfYml0X2FjdGlvbl9mICphY3Rpb24sIHVuc2lnbmVkIG1vZGUpCiB7CisJbWlnaHRfc2xlZXAoKTsKIAlpZiAoIXRlc3RfYml0KGJpdCwgd29yZCkpCiAJCXJldHVybiAwOwogCXJldHVybiBvdXRfb2ZfbGluZV93YWl0X29uX2JpdCh3b3JkLCBiaXQsIGFjdGlvbiwgbW9kZSk7CkBAIC05NjMsNiArMTAzNyw3IEBACiBzdGF0aWMgaW5saW5lIGludAogd2FpdF9vbl9iaXRfbG9jayh2b2lkICp3b3JkLCBpbnQgYml0LCB1bnNpZ25lZCBtb2RlKQogeworCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGJpdCwgd29yZCkpCiAJCXJldHVybiAwOwogCXJldHVybiBvdXRfb2ZfbGluZV93YWl0X29uX2JpdF9sb2NrKHdvcmQsIGJpdCwgYml0X3dhaXQsIG1vZGUpOwpAQCAtOTg2LDYgKzEwNjEsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIHdhaXRfb25fYml0X2xvY2tfaW8odm9pZCAqd29yZCwgaW50IGJpdCwgdW5zaWduZWQgbW9kZSkKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChiaXQsIHdvcmQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXRfbG9jayh3b3JkLCBiaXQsIGJpdF93YWl0X2lvLCBtb2RlKTsKQEAgLTEwMTEsNiArMTA4Nyw3IEBACiBzdGF0aWMgaW5saW5lIGludAogd2FpdF9vbl9iaXRfbG9ja19hY3Rpb24odm9pZCAqd29yZCwgaW50IGJpdCwgd2FpdF9iaXRfYWN0aW9uX2YgKmFjdGlvbiwgdW5zaWduZWQgbW9kZSkKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChiaXQsIHdvcmQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXRfbG9jayh3b3JkLCBiaXQsIGFjdGlvbiwgbW9kZSk7CkBAIC0xMDI5LDYgKzExMDYsNyBAQAogc3RhdGljIGlubGluZQogaW50IHdhaXRfb25fYXRvbWljX3QoYXRvbWljX3QgKnZhbCwgaW50ICgqYWN0aW9uKShhdG9taWNfdCAqKSwgdW5zaWduZWQgbW9kZSkKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmIChhdG9taWNfcmVhZCh2YWwpID09IDApCiAJCXJldHVybiAwOwogCXJldHVybiBvdXRfb2ZfbGluZV93YWl0X29uX2F0b21pY190KHZhbCwgYWN0aW9uLCBtb2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKaW5kZXggZDlmYTY4Zi4uMmEyNWRlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKQEAgLTM0LDcgKzM0LDYgQEAKICAqIEBsaXN0OiB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBjdXJyZW50bHkgYXZhaWxhYmxlIHRyYW5zcG9ydHMKICAqIEBuYW1lOiB0aGUgaHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGUgdHJhbnNwb3J0CiAgKiBAbWF4c2l6ZTogdHJhbnNwb3J0IHByb3ZpZGVkIG1heGltdW0gcGFja2V0IHNpemUKLSAqIEBwcmVmOiBQcmVmZXJlbmNlcyBvZiB0aGlzIHRyYW5zcG9ydAogICogQGRlZjogc2V0IGlmIHRoaXMgdHJhbnNwb3J0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBkZWZhdWx0CiAgKiBAY3JlYXRlOiBtZW1iZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gb24gdGhpcyB0cmFuc3BvcnQKICAqIEBjbG9zZTogbWVtYmVyIGZ1bmN0aW9uIHRvIGRpc2NhcmQgYSBjb25uZWN0aW9uIG9uIHRoaXMgdHJhbnNwb3J0CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2NvbW1vbi5oIGIvaW5jbHVkZS9uZXQvaW5ldF9jb21tb24uaAppbmRleCBmZTc5OTRjLi5iMjgyOGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfY29tbW9uLmgKQEAgLTM3LDYgKzM3LDggQEAKIGludCBpbmV0X2N0bF9zb2NrX2NyZWF0ZShzdHJ1Y3Qgc29jayAqKnNrLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksCiAJCQkgdW5zaWduZWQgc2hvcnQgdHlwZSwgdW5zaWduZWQgY2hhciBwcm90b2NvbCwKIAkJCSBzdHJ1Y3QgbmV0ICpuZXQpOworaW50IGluZXRfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbiwKKwkJICAgIGludCAqYWRkcl9sZW4pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9jdGxfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrICpzaykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaAppbmRleCA4NDVjNTk2Li4zYWU5NjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCkBAIC0zOTYsMTQgKzM5NiwxMiBAQAogLyoqCiAgKglzdHJ1Y3QgbmZ0X3RyYW5zIC0gbmZfdGFibGVzIG9iamVjdCB1cGRhdGUgaW4gdHJhbnNhY3Rpb24KICAqCi0gKglAcmN1X2hlYWQ6IHJjdSBoZWFkIHRvIGRlZmVyIHJlbGVhc2Ugb2YgdHJhbnNhY3Rpb24gZGF0YQogICoJQGxpc3Q6IHVzZWQgaW50ZXJuYWxseQogICoJQG1zZ190eXBlOiBtZXNzYWdlIHR5cGUKICAqCUBjdHg6IHRyYW5zYWN0aW9uIGNvbnRleHQKICAqCUBkYXRhOiBpbnRlcm5hbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSB0cmFuc2FjdGlvbgogICovCiBzdHJ1Y3QgbmZ0X3RyYW5zIHsKLQlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3VfaGVhZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwogCWludAkJCQltc2dfdHlwZTsKIAlzdHJ1Y3QgbmZ0X2N0eAkJCWN0eDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCA3ZGIzZGIxLi5lNmYyMzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC04OTcsNiArODk3LDcgQEAKIAkJaWYgKCFfX3JjKSB7CQkJCQkJXAogCQkJKihfX3RpbWVvKSA9IHNjaGVkdWxlX3RpbWVvdXQoKihfX3RpbWVvKSk7CVwKIAkJfQkJCQkJCQlcCisJCXNjaGVkX2Fubm90YXRlX3NsZWVwKCk7CQkJCQkJXAogCQlsb2NrX3NvY2soX19zayk7CQkJCQlcCiAJCV9fcmMgPSBfX2NvbmRpdGlvbjsJCQkJCVwKIAkJX19yYzsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oIGIvaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oCmluZGV4IGE0Nzc5MGIuLjJhNTBhNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3VkcF90dW5uZWwuaAorKysgYi9pbmNsdWRlL25ldC91ZHBfdHVubmVsLmgKQEAgLTEwMCw2ICsxMDAsMTUgQEAKIAlyZXR1cm4gaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgdWRwX2NzdW0sIHR5cGUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3R1bm5lbF9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKQoreworCXN0cnVjdCB1ZHBoZHIgKnVoOworCisJdWggPSAoc3RydWN0IHVkcGhkciAqKShza2ItPmRhdGEgKyBuaG9mZiAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSB8PSB1aC0+Y2hlY2sgPworCQkJCVNLQl9HU09fVURQX1RVTk5FTF9DU1VNIDogU0tCX0dTT19VRFBfVFVOTkVMOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3R1bm5lbF9lbmNhcF9lbmFibGUoc3RydWN0IHNvY2tldCAqc29jaykKIHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdnhsYW4uaCBiL2luY2x1ZGUvbmV0L3Z4bGFuLmgKaW5kZXggZDVmNTlmMy4uNTdjY2NkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdnhsYW4uaAorKysgYi9pbmNsdWRlL25ldC92eGxhbi5oCkBAIC04LDYgKzgsMTIgQEAKICNkZWZpbmUgVk5JX0hBU0hfQklUUwkxMAogI2RlZmluZSBWTklfSEFTSF9TSVpFCSgxPDxWTklfSEFTSF9CSVRTKQogCisvKiBWWExBTiBwcm90b2NvbCBoZWFkZXIgKi8KK3N0cnVjdCB2eGxhbmhkciB7CisJX19iZTMyIHZ4X2ZsYWdzOworCV9fYmUzMiB2eF92bmk7Cit9OworCiBzdHJ1Y3QgdnhsYW5fc29jazsKIHR5cGVkZWYgdm9pZCAodnhsYW5fcmN2X3QpKHN0cnVjdCB2eGxhbl9zb2NrICp2aCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGtleSk7CiAKQEAgLTQ1LDYgKzUxLDE4IEBACiAJCSAgIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIF9fdTggdG9zLCBfX3U4IHR0bCwgX19iZTE2IGRmLAogCQkgICBfX2JlMTYgc3JjX3BvcnQsIF9fYmUxNiBkc3RfcG9ydCwgX19iZTMyIHZuaSwgYm9vbCB4bmV0KTsKIAorc3RhdGljIGlubGluZSBib29sIHZ4bGFuX2dzb19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICgoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIFNLQl9HU09fVURQX1RVTk5FTCkgJiYKKwkgICAgKHNrYi0+aW5uZXJfcHJvdG9jb2xfdHlwZSAhPSBFTkNBUF9UWVBFX0VUSEVSIHx8CisJICAgICBza2ItPmlubmVyX3Byb3RvY29sICE9IGh0b25zKEVUSF9QX1RFQikgfHwKKwkgICAgIChza2JfaW5uZXJfbWFjX2hlYWRlcihza2IpIC0gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAhPQorCSAgICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIHNpemVvZihzdHJ1Y3QgdnhsYW5oZHIpKSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiAvKiBJUCBoZWFkZXIgKyBVRFAgKyBWWExBTiArIEV0aGVybmV0IGhlYWRlciAqLwogI2RlZmluZSBWWExBTl9IRUFEUk9PTSAoMjAgKyA4ICsgOCArIDE0KQogLyogSVB2NiBoZWFkZXIgKyBVRFAgKyBWWExBTiArIEV0aGVybmV0IGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmZjLmggYi9pbmNsdWRlL3Njc2kvbGliZmMuaAppbmRleCA1MmJlYWRmLi45M2QxNGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliZmMuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliZmMuaApAQCAtMTEwNSw4ICsxMTA1LDYgQEAKIGludCBmY19laF9kZXZpY2VfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKIGludCBmY19laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiBpbnQgZmNfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICopOwotaW50IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbik7Ci1pbnQgZmNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCB0YWdfdHlwZSk7CiAKIC8qCiAgKiBFTFMvQ1QgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDcyOGM5YWQuLjRkMWM0NmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0zNzgsOCArMzc4LDYgQEAKIC8qCiAgKiBzY3NpIGhvc3QgdGVtcGxhdGUKICAqLwotZXh0ZXJuIGludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgsCi0JCQkJICAgIGludCByZWFzb24pOwogZXh0ZXJuIGludCBpc2NzaV9laF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CiBleHRlcm4gaW50IGlzY3NpX2VoX3JlY292ZXJfdGFyZ2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKIGV4dGVybiBpbnQgaXNjc2lfZWhfc2Vzc2lvbl9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGlic2FzLmggYi9pbmNsdWRlL3Njc2kvbGlic2FzLmgKaW5kZXggZWY3ODcyYy4uODMyZGNjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYnNhcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJzYXMuaApAQCAtMzY1LDEyICszNjUsNiBAQAogc3RydWN0IHNjc2lfY29yZSB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAKLQlzdHJ1Y3QgbXV0ZXgJICB0YXNrX3F1ZXVlX2ZsdXNoOwotCXNwaW5sb2NrX3QgICAgICAgIHRhc2tfcXVldWVfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkICB0YXNrX3F1ZXVlOwotCWludCAgICAgICAgICAgICAgIHRhc2tfcXVldWVfc2l6ZTsKLQotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcXVldWVfdGhyZWFkOwogfTsKIAogc3RydWN0IHNhc19oYV9ldmVudCB7CkBAIC00MjIsOSArNDE2LDYgQEAKIAlzdHJ1Y3QgYXNkX3Nhc19wb3J0ICoqc2FzX3BvcnQ7IC8qIGFycmF5IG9mIHZhbGlkIHBvaW50ZXJzLCBtdXN0IGJlIHNldCAqLwogCWludCAgICAgICAgICAgICBudW1fcGh5czsgLyogbXVzdCBiZSBzZXQsIGd0IDAsIHN0YXRpYyAqLwogCi0JLyogVGhlIGNsYXNzIGNhbGxzIHRoaXMgdG8gc2VuZCBhIHRhc2sgZm9yIGV4ZWN1dGlvbi4gKi8KLQlpbnQgbGxkZF9tYXhfZXhlY3V0ZV9udW07Ci0JaW50IGxsZGRfcXVldWVfc2l6ZTsKIAlpbnQgc3RyaWN0X3dpZGVfcG9ydHM7IC8qIGJvdGggc2FzX2FkZHIgYW5kIGF0dGFjaGVkX3Nhc19hZGRyIG11c3QgbWF0Y2gKIAkJCQkqIHRoZWlyIHNpYmxpbmdzIHdoZW4gZm9ybWluZyB3aWRlIHBvcnRzICovCiAKQEAgLTYxMiw3ICs2MDMsNiBAQAogCiBzdHJ1Y3Qgc2FzX3Rhc2sgewogCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgIGxpc3Q7CiAKIAlzcGlubG9ja190ICAgdGFza19zdGF0ZV9sb2NrOwogCXVuc2lnbmVkICAgICB0YXNrX3N0YXRlX2ZsYWdzOwpAQCAtNjY1LDggKzY1NSw3IEBACiAJaW50ICAoKmxsZGRfZGV2X2ZvdW5kKShzdHJ1Y3QgZG9tYWluX2RldmljZSAqKTsKIAl2b2lkICgqbGxkZF9kZXZfZ29uZSkoc3RydWN0IGRvbWFpbl9kZXZpY2UgKik7CiAKLQlpbnQgKCpsbGRkX2V4ZWN1dGVfdGFzaykoc3RydWN0IHNhc190YXNrICosIGludCBudW0sCi0JCQkJIGdmcF90IGdmcF9mbGFncyk7CisJaW50ICgqbGxkZF9leGVjdXRlX3Rhc2spKHN0cnVjdCBzYXNfdGFzayAqLCBnZnBfdCBnZnBfZmxhZ3MpOwogCiAJLyogVGFzayBNYW5hZ2VtZW50IEZ1bmN0aW9ucy4gTXVzdCBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuICovCiAJaW50ICgqbGxkZF9hYm9ydF90YXNrKShzdHJ1Y3Qgc2FzX3Rhc2sgKik7CkBAIC03MDAsMTIgKzY4OSwxMCBAQAogaW50IHNhc19zZXRfcGh5X3NwZWVkKHN0cnVjdCBzYXNfcGh5ICpwaHksCiAJCSAgICAgIHN0cnVjdCBzYXNfcGh5X2xpbmtyYXRlcyAqcmF0ZXMpOwogaW50IHNhc19waHlfcmVzZXQoc3RydWN0IHNhc19waHkgKnBoeSwgaW50IGhhcmRfcmVzZXQpOwotaW50IHNhc19xdWV1ZV91cChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spOwogZXh0ZXJuIGludCBzYXNfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKiAsc3RydWN0IHNjc2lfY21uZCAqKTsKIGV4dGVybiBpbnQgc2FzX3RhcmdldF9hbGxvYyhzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CiBleHRlcm4gaW50IHNhc19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICopOwotZXh0ZXJuIGludCBzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQgbmV3X2RlcHRoLAotCQkJCSAgaW50IHJlYXNvbik7CitleHRlcm4gaW50IHNhc19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCBuZXdfZGVwdGgpOwogZXh0ZXJuIGludCBzYXNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCBxdCk7CiBleHRlcm4gaW50IHNhc19iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqLAogCQkJICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAppbmRleCBkMTcxNzhlLi44YTdmOGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTEyOCw4ICsxMjgsMTAgQEAKICNkZWZpbmUgTU9WRV9NRURJVU0gICAgICAgICAgIDB4YTUKICNkZWZpbmUgRVhDSEFOR0VfTUVESVVNICAgICAgIDB4YTYKICNkZWZpbmUgUkVBRF8xMiAgICAgICAgICAgICAgIDB4YTgKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzEyIDB4YTkKICNkZWZpbmUgV1JJVEVfMTIgICAgICAgICAgICAgIDB4YWEKLSNkZWZpbmUgUkVBRF9NRURJQV9TRVJJQUxfTlVNQkVSIDB4YWIKKyNkZWZpbmUgUkVBRF9NRURJQV9TRVJJQUxfTlVNQkVSIDB4YWIgLyogT2Jzb2xldGUgd2l0aCBTUEMtMiAqLworI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTl8xMiAgMHhhYgogI2RlZmluZSBXUklURV9WRVJJRllfMTIgICAgICAgMHhhZQogI2RlZmluZSBWRVJJRllfMTIJICAgICAgMHhhZgogI2RlZmluZSBTRUFSQ0hfSElHSF8xMiAgICAgICAgMHhiMApAQCAtMTUxLDcgKzE1Myw5IEBACiAjZGVmaW5lIFZFUklGWV8xNgkgICAgICAweDhmCiAjZGVmaW5lIFNZTkNIUk9OSVpFX0NBQ0hFXzE2ICAweDkxCiAjZGVmaW5lIFdSSVRFX1NBTUVfMTYJICAgICAgMHg5MwotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTiAgICAgMHg5ZQorI2RlZmluZSBTRVJWSUNFX0FDVElPTl9CSURJUkVDVElPTkFMIDB4OWQKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU5fMTYgIDB4OWUKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzE2IDB4OWYKIC8qIHZhbHVlcyBmb3Igc2VydmljZSBhY3Rpb24gaW4gKi8KICNkZWZpbmUJU0FJX1JFQURfQ0FQQUNJVFlfMTYgIDB4MTAKICNkZWZpbmUgU0FJX0dFVF9MQkFfU1RBVFVTICAgIDB4MTIKQEAgLTE2NSw4ICsxNjksOCBAQAogI2RlZmluZSBNSV9SRVBPUlRfQUxJQVNFUyAgICAgMHgwYgogI2RlZmluZSBNSV9SRVBPUlRfU1VQUE9SVEVEX09QRVJBVElPTl9DT0RFUyAweDBjCiAjZGVmaW5lIE1JX1JFUE9SVF9TVVBQT1JURURfVEFTS19NQU5BR0VNRU5UX0ZVTkNUSU9OUyAweDBkCi0jZGVmaW5lIE1JX1JFUE9SVF9QUklPUklUWSAgIDB4MGUKLSNkZWZpbmUgTUlfUkVQT1JUX1RJTUVTVEFNUCAgMHgwZgorI2RlZmluZSBNSV9SRVBPUlRfUFJJT1JJVFkgICAgMHgwZQorI2RlZmluZSBNSV9SRVBPUlRfVElNRVNUQU1QICAgMHgwZgogI2RlZmluZSBNSV9NQU5BR0VNRU5UX1BST1RPQ09MX0lOIDB4MTAKIC8qIHZhbHVlIGZvciBNSV9SRVBPUlRfVEFSR0VUX1BHUyBleHQgaGVhZGVyICovCiAjZGVmaW5lIE1JX0VYVF9IRFJfUEFSQU1fRk1UICAweDIwCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKaW5kZXggNTIyYTVmMjcuLjlmYzFhZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKQEAgLTUzLDYgKzUzLDkgQEAKIAl2b2xhdGlsZSBpbnQgcGhhc2U7CiB9OwogCisvKiBmb3Igc2NtZC0+ZmxhZ3MgKi8KKyNkZWZpbmUgU0NNRF9UQUdHRUQJCSgxIDw8IDApCisKIHN0cnVjdCBzY3NpX2NtbmQgewogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgIC8qIHNjc2lfY21uZCBwYXJ0aWNpcGF0ZXMgaW4gcXVldWUgbGlzdHMgKi8KQEAgLTEzMiw2ICsxMzUsNyBAQAogCQkJCQkgKiB0byBiZSBhdCBhbiBhZGRyZXNzIDwgMTZNYikuICovCiAKIAlpbnQgcmVzdWx0OwkJLyogU3RhdHVzIGNvZGUgZnJvbSBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlpbnQgZmxhZ3M7CQkvKiBDb21tYW5kIGZsYWdzICovCiAKIAl1bnNpZ25lZCBjaGFyIHRhZzsJLyogU0NTSS1JSSBxdWV1ZWQgY29tbWFuZCB0YWcgKi8KIH07CkBAIC0xNTksNyArMTYzLDcgQEAKIAkJCQkgc2l6ZV90ICpvZmZzZXQsIHNpemVfdCAqbGVuKTsKIGV4dGVybiB2b2lkIHNjc2lfa3VubWFwX2F0b21pY19zZyh2b2lkICp2aXJ0KTsKIAotZXh0ZXJuIGludCBzY3NpX2luaXRfaW8oc3RydWN0IHNjc2lfY21uZCAqY21kLCBnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gaW50IHNjc2lfaW5pdF9pbyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogCiBleHRlcm4gaW50IHNjc2lfZG1hX21hcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogZXh0ZXJuIHZvaWQgc2NzaV9kbWFfdW5tYXAoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RiZy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKaW5kZXggZTg5ODQ0Yy4uNzk4Mjc5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKQEAgLTIsMjMgKzIsMjcgQEAKICNkZWZpbmUgX1NDU0lfU0NTSV9EQkdfSAogCiBzdHJ1Y3Qgc2NzaV9jbW5kOworc3RydWN0IHNjc2lfZGV2aWNlOwogc3RydWN0IHNjc2lfc2Vuc2VfaGRyOwogCiBleHRlcm4gdm9pZCBzY3NpX3ByaW50X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqKTsKLWV4dGVybiB2b2lkIF9fc2NzaV9wcmludF9jb21tYW5kKHVuc2lnbmVkIGNoYXIgKik7Ci1leHRlcm4gdm9pZCBzY3NpX3Nob3dfZXh0ZF9zZW5zZSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKTsKLWV4dGVybiB2b2lkIHNjc2lfc2hvd19zZW5zZV9oZHIoc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOwotZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zZW5zZV9oZHIoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7Ci1leHRlcm4gdm9pZCBzY3NpX2NtZF9wcmludF9zZW5zZV9oZHIoc3RydWN0IHNjc2lfY21uZCAqLCBjb25zdCBjaGFyICosCi0JCQkJICAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7Ci1leHRlcm4gdm9pZCBzY3NpX3ByaW50X3NlbnNlKGNoYXIgKiwgc3RydWN0IHNjc2lfY21uZCAqKTsKLWV4dGVybiB2b2lkIF9fc2NzaV9wcmludF9zZW5zZShjb25zdCBjaGFyICpuYW1lLAorZXh0ZXJuIHZvaWQgX19zY3NpX3ByaW50X2NvbW1hbmQoY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgc2NzaV9zaG93X2V4dGRfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9pZCBzY3NpX3Nob3dfc2Vuc2VfaGRyKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqLCBjb25zdCBjaGFyICosCisJCQkJY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOworZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zZW5zZV9oZHIoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOworZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICopOworZXh0ZXJuIHZvaWQgX19zY3NpX3ByaW50X3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqLCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwKIAkJCSAgICAgICBpbnQgc2Vuc2VfbGVuKTsKLWV4dGVybiB2b2lkIHNjc2lfc2hvd19yZXN1bHQoaW50KTsKLWV4dGVybiB2b2lkIHNjc2lfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1leHRlcm4gdm9pZCBzY3NpX3ByaW50X3N0YXR1cyh1bnNpZ25lZCBjaGFyKTsKK2V4dGVybiB2b2lkIHNjc2lfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2NtbmQgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfaG9zdGJ5dGVfc3RyaW5nKGludCk7CitleHRlcm4gY29uc3QgY2hhciAqc2NzaV9kcml2ZXJieXRlX3N0cmluZyhpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfbWxyZXR1cm5fc3RyaW5nKGludCk7CiBleHRlcm4gY29uc3QgY2hhciAqc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHVuc2lnbmVkIGNoYXIpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQodW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CitleHRlcm4gY29uc3QgY2hhciAqc2NzaV9leHRkX3NlbnNlX2Zvcm1hdCh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyLAorCQkJCQkgIGNvbnN0IGNoYXIgKiopOwogCiAjZW5kaWYgLyogX1NDU0lfU0NTSV9EQkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCAyN2VjZWU3Li42MzY0ZTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMTQxLDcgKzE0MSw2IEBACiAJdW5zaWduZWQgcHByOjE7CQkvKiBEZXZpY2Ugc3VwcG9ydHMgUFBSIG1lc3NhZ2VzICovCiAJdW5zaWduZWQgdGFnZ2VkX3N1cHBvcnRlZDoxOwkvKiBTdXBwb3J0cyBTQ1NJLUlJIHRhZ2dlZCBxdWV1aW5nICovCiAJdW5zaWduZWQgc2ltcGxlX3RhZ3M6MTsJLyogc2ltcGxlIHF1ZXVlIHRhZyBtZXNzYWdlcyBhcmUgZW5hYmxlZCAqLwotCXVuc2lnbmVkIG9yZGVyZWRfdGFnczoxOy8qIG9yZGVyZWQgcXVldWUgdGFnIG1lc3NhZ2VzIGFyZSBlbmFibGVkICovCiAJdW5zaWduZWQgd2FzX3Jlc2V0OjE7CS8qIFRoZXJlIHdhcyBhIGJ1cyByZXNldCBvbiB0aGUgYnVzIGZvciAKIAkJCQkgKiB0aGlzIGRldmljZSAqLwogCXVuc2lnbmVkIGV4cGVjdGluZ19jY191YToxOyAvKiBFeHBlY3RpbmcgYSBDSEVDS19DT05ESVRJT04vVU5JVF9BVFROCkBAIC0yMDEsMTEgKzIwMCw2IEBACiAJdW5zaWduZWQgbG9uZwkJc2Rldl9kYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZih1bnNpZ25lZCBsb25nKSkpKTsKIAotc3RydWN0IHNjc2lfZGhfZGV2bGlzdCB7Ci0JY2hhciAqdmVuZG9yOwotCWNoYXIgKm1vZGVsOwotfTsKLQogdHlwZWRlZiB2b2lkICgqYWN0aXZhdGVfY29tcGxldGUpKHZvaWQgKiwgaW50KTsKIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyIHsKIAkvKiBVc2VkIGJ5IHRoZSBpbmZyYXN0cnVjdHVyZSAqLwpAQCAtMjE0LDkgKzIwOCw4IEBACiAJLyogRmlsbGVkIGJ5IHRoZSBoYXJkd2FyZSBoYW5kbGVyICovCiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCAqZGV2bGlzdDsKIAlpbnQgKCpjaGVja19zZW5zZSkoc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqKTsKLQlpbnQgKCphdHRhY2gpKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICooKmF0dGFjaCkoc3RydWN0IHNjc2lfZGV2aWNlICopOwogCXZvaWQgKCpkZXRhY2gpKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKIAlpbnQgKCphY3RpdmF0ZSkoc3RydWN0IHNjc2lfZGV2aWNlICosIGFjdGl2YXRlX2NvbXBsZXRlLCB2b2lkICopOwogCWludCAoKnByZXBfZm4pKHN0cnVjdCBzY3NpX2RldmljZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKQEAgLTIyOCw3ICsyMjEsNiBAQAogCXN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyICpzY3NpX2RoOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwotCWNoYXIgYnVmWzBdOwogfTsKIAogI2RlZmluZQl0b19zY3NpX2RldmljZShkKQlcCkBAIC0yNDQsNiArMjM2LDE1IEBACiAjZGVmaW5lIHNkZXZfZGJnKHNkZXYsIGZtdCwgYS4uLikgXAogCWRldl9kYmcoJihzZGV2KS0+c2Rldl9nZW5kZXYsIGZtdCwgIyNhKQogCisvKgorICogbGlrZSBzY21kX3ByaW50aywgYnV0IHRoZSBkZXZpY2UgbmFtZSBpcyBwYXNzZWQgaW4KKyAqIGFzIGEgc3RyaW5nIHBvaW50ZXIKKyAqLworI2RlZmluZSBzZGV2X3ByZWZpeF9wcmludGsobCwgc2RldiwgcCwgZm10LCBhLi4uKQkJCVwKKwkocCkgPwkJCQkJCQkJXAorCXNkZXZfcHJpbnRrKGwsIHNkZXYsICJbJXNdICIgZm10LCBwLCAjI2EpIDoJCQlcCisJc2Rldl9wcmludGsobCwgc2RldiwgZm10LCAjI2EpCisKICNkZWZpbmUgc2NtZF9wcmludGsocHJlZml4LCBzY21kLCBmbXQsIGEuLi4pCQkJCVwKICAgICAgICAgKHNjbWQpLT5yZXF1ZXN0LT5ycV9kaXNrID8JCQkJCVwKIAlzZGV2X3ByaW50ayhwcmVmaXgsIChzY21kKS0+ZGV2aWNlLCAiWyVzXSAiIGZtdCwJCVwKQEAgLTM3OSw3ICszODAsNyBAQAogI2RlZmluZSBfX3Nob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgXAogCWxpc3RfZm9yX2VhY2hfZW50cnkoKHNkZXYpLCAmKChzaG9zdCktPl9fZGV2aWNlcyksIHNpYmxpbmdzKQogCi1leHRlcm4gdm9pZCBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50LCBpbnQpOworZXh0ZXJuIGludCBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKIGV4dGVybiBpbnQgc2NzaV90cmFja19xdWV1ZV9mdWxsKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQpOwogCiBleHRlcm4gaW50IHNjc2lfc2V0X21lZGl1bV9yZW1vdmFsKHN0cnVjdCBzY3NpX2RldmljZSAqLCBjaGFyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RyaXZlci5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZHJpdmVyLmgKaW5kZXggYzJiNzU5OC4uODkxYTY1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZHJpdmVyLmgKQEAgLTksNyArOSw2IEBACiBzdHJ1Y3Qgc2NzaV9kZXZpY2U7CiAKIHN0cnVjdCBzY3NpX2RyaXZlciB7Ci0Jc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWdlbmRydjsKIAogCXZvaWQgKCpyZXNjYW4pKHN0cnVjdCBkZXZpY2UgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9laC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZWguaAppbmRleCAwNmE4NzkwLi4xZTE0MjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9laC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2VoLmgKQEAgLTI3LDEwICsyNywxMCBAQAogCXU4IGFkZGl0aW9uYWxfbGVuZ3RoOwkvKiBhbHdheXMgMCBmb3IgZml4ZWQgc2Vuc2UgZm9ybWF0ICovCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBzY3NpX3NlbnNlX3ZhbGlkKHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCitzdGF0aWMgaW5saW5lIGJvb2wgc2NzaV9zZW5zZV92YWxpZChjb25zdCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQogewogCWlmICghc3NoZHIpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gKHNzaGRyLT5yZXNwb25zZV9jb2RlICYgMHg3MCkgPT0gMHg3MDsKIH0KQEAgLTQyLDEyICs0MiwxMiBAQAogZXh0ZXJuIHZvaWQgc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KHN0cnVjdCBTY3NpX0hvc3QgKiwgaW50KTsKIGV4dGVybiB2b2lkIHNjc2lfcmVwb3J0X2RldmljZV9yZXNldChzdHJ1Y3QgU2NzaV9Ib3N0ICosIGludCwgaW50KTsKIGV4dGVybiBpbnQgc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKLWV4dGVybiBpbnQgc2NzaV9ub3JtYWxpemVfc2Vuc2UoY29uc3QgdTggKnNlbnNlX2J1ZmZlciwgaW50IHNiX2xlbiwKLQkJc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcik7Ci1leHRlcm4gaW50IHNjc2lfY29tbWFuZF9ub3JtYWxpemVfc2Vuc2Uoc3RydWN0IHNjc2lfY21uZCAqY21kLAotCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKTsKK2V4dGVybiBib29sIHNjc2lfbm9ybWFsaXplX3NlbnNlKGNvbnN0IHU4ICpzZW5zZV9idWZmZXIsIGludCBzYl9sZW4sCisJCQkJIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpOworZXh0ZXJuIGJvb2wgc2NzaV9jb21tYW5kX25vcm1hbGl6ZV9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCisJCQkJCSBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKTsKIAotc3RhdGljIGlubGluZSBpbnQgc2NzaV9zZW5zZV9pc19kZWZlcnJlZChzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorc3RhdGljIGlubGluZSBib29sIHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKIHsKIAlyZXR1cm4gKChzc2hkci0+cmVzcG9uc2VfY29kZSA+PSAweDcwKSAmJiAoc3NoZHItPnJlc3BvbnNlX2NvZGUgJiAxKSk7CiB9CkBAIC02MCwxNSArNjAsNyBAQAogCiBleHRlcm4gdm9pZCBzY3NpX2J1aWxkX3NlbnNlX2J1ZmZlcihpbnQgZGVzYywgdTggKmJ1ZiwgdTgga2V5LCB1OCBhc2MsIHU4IGFzY3EpOwogCi0vKgotICogUmVzZXQgcmVxdWVzdCBmcm9tIGV4dGVybmFsIHNvdXJjZQotICovCi0jZGVmaW5lIFNDU0lfVFJZX1JFU0VUX0RFVklDRQkxCi0jZGVmaW5lIFNDU0lfVFJZX1JFU0VUX0JVUwkyCi0jZGVmaW5lIFNDU0lfVFJZX1JFU0VUX0hPU1QJMwotI2RlZmluZSBTQ1NJX1RSWV9SRVNFVF9UQVJHRVQJNAotCi1leHRlcm4gaW50IHNjc2lfcmVzZXRfcHJvdmlkZXIoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCk7CitleHRlcm4gaW50IHNjc2lfaW9jdGxfcmVzZXQoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCBfX3VzZXIgKik7CiAKIHN0cnVjdCBzY3NpX2VoX3NhdmUgewogCS8qIHNhdmVkIHN0YXRlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggNWUzNjI0OC4uYzhhNDYyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtNDYsMTIgKzQ2LDYgQEAKICNkZWZpbmUgRElTQUJMRV9DTFVTVEVSSU5HIDAKICNkZWZpbmUgRU5BQkxFX0NMVVNURVJJTkcgMQogCi1lbnVtIHsKLQlTQ1NJX1FERVBUSF9ERUZBVUxULAkvKiBkZWZhdWx0IHJlcXVlc3RlZCBjaGFuZ2UsIGUuZy4gZnJvbSBzeXNmcyAqLwotCVNDU0lfUURFUFRIX1FGVUxMLAkvKiBzY3NpLW1sIHJlcXVlc3RlZCBkdWUgdG8gcXVldWUgZnVsbCAqLwotCVNDU0lfUURFUFRIX1JBTVBfVVAsCS8qIHNjc2ktbWwgcmVxdWVzdGVkIGR1ZSB0byB0aHJlc2hvbGQgZXZlbnQgKi8KLX07Ci0KIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgewogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMTk1LDcgKzE4OSw3IEBACiAJICogVGhpbmdzIGN1cnJlbnRseSByZWNvbW1lbmRlZCB0byBiZSBoYW5kbGVkIGF0IHRoaXMgdGltZSBpbmNsdWRlOgogCSAqCiAJICogMS4gIFNldHRpbmcgdGhlIGRldmljZSBxdWV1ZSBkZXB0aC4gIFByb3BlciBzZXR0aW5nIG9mIHRoaXMgaXMKLQkgKiAgICAgZGVzY3JpYmVkIGluIHRoZSBjb21tZW50cyBmb3Igc2NzaV9hZGp1c3RfcXVldWVfZGVwdGguCisJICogICAgIGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudHMgZm9yIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLgogCSAqIDIuICBEZXRlcm1pbmluZyBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZSB2YXJpb3VzIHN5bmNocm9ub3VzCiAJICogICAgIG5lZ290aWF0aW9uIHByb3RvY29scy4gIFRoZSBkZXZpY2Ugc3RydWN0IHdpbGwgYWxyZWFkeSBoYXZlCiAJICogICAgIHJlc3BvbmRlZCB0byBJTlFVSVJZIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUgc3RhbmRhcmQgaXRlbXMKQEAgLTI4MSw3ICsyNzUsNyBAQAogCSAqCiAJICogU3RhdHVzOiBPUFRJT05BTAogCSAqLwotCWludCAoKiBjaGFuZ2VfcXVldWVfZGVwdGgpKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQsIGludCk7CisJaW50ICgqIGNoYW5nZV9xdWV1ZV9kZXB0aCkoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCk7CiAKIAkvKgogCSAqIEZpbGwgaW4gdGhpcyBmdW5jdGlvbiB0byBhbGxvdyB0aGUgY2hhbmdpbmcgb2YgdGFnIHR5cGVzCkBAIC00MjIsNiArNDE2LDE2IEBACiAJdW5zaWduZWQgY2hhciBwcmVzZW50OwogCiAJLyoKKwkgKiBMZXQgdGhlIGJsb2NrIGxheWVyIGFzc2lnbnMgdGFncyB0byBhbGwgY29tbWFuZHMuCisJICovCisJdW5zaWduZWQgdXNlX2Jsa190YWdzOjE7CisKKwkvKgorCSAqIFRyYWNrIFFVRVVFX0ZVTEwgZXZlbnRzIGFuZCByZWR1Y2UgcXVldWUgZGVwdGggb24gZGVtYW5kLgorCSAqLworCXVuc2lnbmVkIHRyYWNrX3F1ZXVlX2RlcHRoOjE7CisKKwkvKgogCSAqIFRoaXMgc3BlY2lmaWVzIHRoZSBtb2RlIHRoYXQgYSBMTEQgc3VwcG9ydHMuCiAJICovCiAJdW5zaWduZWQgc3VwcG9ydGVkX21vZGU6MjsKQEAgLTQ1MSwxMSArNDU1LDYgQEAKIAkgKi8KIAl1bnNpZ25lZCBza2lwX3NldHRsZV9kZWxheToxOwogCi0JLyoKLQkgKiBUcnVlIGlmIHdlIGFyZSB1c2luZyBvcmRlcmVkIHdyaXRlIHN1cHBvcnQuCi0JICovCi0JdW5zaWduZWQgb3JkZXJlZF90YWc6MTsKLQogCS8qIFRydWUgaWYgdGhlIGNvbnRyb2xsZXIgZG9lcyBub3Qgc3VwcG9ydCBXUklURSBTQU1FICovCiAJdW5zaWduZWQgbm9fd3JpdGVfc2FtZToxOwogCkBAIC02MzgsNiArNjM3LDE0IEBACiAJc2hvcnQgdW5zaWduZWQgaW50IHNnX3Byb3RfdGFibGVzaXplOwogCXVuc2lnbmVkIGludCBtYXhfc2VjdG9yczsKIAl1bnNpZ25lZCBsb25nIGRtYV9ib3VuZGFyeTsKKwkvKgorCSAqIEluIHNjc2ktbXEgbW9kZSwgdGhlIG51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgc3VwcG9ydGVkIGJ5IHRoZSBMTEQuCisJICoKKwkgKiBOb3RlOiBpdCBpcyBhc3N1bWVkIHRoYXQgZWFjaCBoYXJkd2FyZSBxdWV1ZSBoYXMgYSBxdWV1ZSBkZXB0aCBvZgorCSAqIGNhbl9xdWV1ZS4gSW4gb3RoZXIgd29yZHMsIHRoZSB0b3RhbCBxdWV1ZSBkZXB0aCBwZXIgaG9zdAorCSAqIGlzIG5yX2h3X3F1ZXVlcyAqIGNhbl9xdWV1ZS4KKwkgKi8KKwl1bnNpZ25lZCBucl9od19xdWV1ZXM7CiAJLyogCiAJICogVXNlZCB0byBhc3NpZ24gc2VyaWFsIG51bWJlcnMgdG8gdGhlIGNtZHMuCiAJICogUHJvdGVjdGVkIGJ5IHRoZSBob3N0IGxvY2suCkBAIC02NDcsNyArNjU0LDYgQEAKIAl1bnNpZ25lZCBhY3RpdmVfbW9kZToyOwogCXVuc2lnbmVkIHVuY2hlY2tlZF9pc2FfZG1hOjE7CiAJdW5zaWduZWQgdXNlX2NsdXN0ZXJpbmc6MTsKLQl1bnNpZ25lZCB1c2VfYmxrX3RjcToxOwogCiAJLyoKIAkgKiBIb3N0IGhhcyByZXF1ZXN0ZWQgdGhhdCBubyBmdXJ0aGVyIHJlcXVlc3RzIGNvbWUgdGhyb3VnaCBmb3IgdGhlCkBAIC02NjIsMTEgKzY2OCw2IEBACiAJICovCiAJdW5zaWduZWQgcmV2ZXJzZV9vcmRlcmluZzoxOwogCi0JLyoKLQkgKiBPcmRlcmVkIHdyaXRlIHN1cHBvcnQKLQkgKi8KLQl1bnNpZ25lZCBvcmRlcmVkX3RhZzoxOwotCiAJLyogVGFzayBtZ210IGZ1bmN0aW9uIGluIHByb2dyZXNzICovCiAJdW5zaWduZWQgdG1mX2luX3Byb2dyZXNzOjE7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9pb2N0bC5oCmluZGV4IGI5MDA2ODQuLjhkMTlkMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaApAQCAtNDAsOSArNDAsOSBAQAogCXVuc2lnbmVkIGNoYXIgaG9zdF93d25bOF07IC8vIGluY2x1ZGUgTlVMTCB0ZXJtLgogfSBTY3NpX0ZDVGFyZ0FkZHJlc3M7CiAKK2ludCBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAorCQlpbnQgY21kLCBib29sIG5kZWxheSk7CiBleHRlcm4gaW50IHNjc2lfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCwgdm9pZCBfX3VzZXIgKik7Ci1leHRlcm4gaW50IHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGNtZCwKLQkJCQkgICB2b2lkIF9fdXNlciAqYXJnLCBpbnQgbmRlbGF5KTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfU0NTSV9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90Y3EuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCmluZGV4IDU2ZWQ4NDMuLmZlNGE3MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCkBAIC0xNiwyMCArMTYsMTYgQEAKIAogI2lmZGVmIENPTkZJR19CTE9DSwogCitpbnQgc2NzaV9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSk7CisKIC8qKgogICogc2NzaV9nZXRfdGFnX3R5cGUgLSBnZXQgdGhlIHR5cGUgb2YgdGFnIHRoZSBkZXZpY2Ugc3VwcG9ydHMKICAqIEBzZGV2Ogl0aGUgc2NzaSBkZXZpY2UKLSAqCi0gKiBOb3RlczoKLSAqCUlmIHRoZSBkcml2ZSBvbmx5IHN1cHBvcnRzIHNpbXBsZSB0YWdzLCByZXR1cm5zIE1TR19TSU1QTEVfVEFHCi0gKglpZiBpdCBzdXBwb3J0cyBhbGwgdGFnIHR5cGVzLCByZXR1cm5zIE1TR19PUkRFUkVEX1RBRy4KICAqLwogc3RhdGljIGlubGluZSBpbnQgc2NzaV9nZXRfdGFnX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKIAkJcmV0dXJuIDA7Ci0JaWYgKHNkZXYtPm9yZGVyZWRfdGFncykKLQkJcmV0dXJuIE1TR19PUkRFUkVEX1RBRzsKIAlpZiAoc2Rldi0+c2ltcGxlX3RhZ3MpCiAJCXJldHVybiBNU0dfU0lNUExFX1RBRzsKIAlyZXR1cm4gMDsKQEAgLTM5LDkwICszNSwzMyBAQAogewogCXN3aXRjaCAodGFnKSB7CiAJY2FzZSBNU0dfT1JERVJFRF9UQUc6Ci0JCXNkZXYtPm9yZGVyZWRfdGFncyA9IDE7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgTVNHX1NJTVBMRV9UQUc6CiAJCXNkZXYtPnNpbXBsZV90YWdzID0gMTsKIAkJYnJlYWs7CiAJY2FzZSAwOgogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAwOwogCQlzZGV2LT5zaW1wbGVfdGFncyA9IDA7CiAJCWJyZWFrOwogCX0KIH0KLS8qKgotICogc2NzaV9hY3RpdmF0ZV90Y3EgLSB0dXJuIG9uIHRhZyBjb21tYW5kIHF1ZXVlaW5nCi0gKiBAU0RwbnQ6CWRldmljZSB0byB0dXJuIG9uIFRDUSBmb3IKLSAqIEBkZXB0aDoJcXVldWUgZGVwdGgKLSAqCi0gKiBOb3RlczoKLSAqCUV2ZW50dWFsbHksIEkgaG9wZSBkZXB0aCB3b3VsZCBiZSB0aGUgbWF4aW11bSBkZXB0aAotICoJdGhlIGRldmljZSBjb3VsZCBjb3BlIHdpdGggYW5kIHRoZSByZWFsIHF1ZXVlIGRlcHRoCi0gKgl3b3VsZCBiZSBhZGp1c3RhYmxlIGZyb20gMCB0byBkZXB0aC4KLSAqKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2FjdGl2YXRlX3RjcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKLXsKLQlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCXJldHVybjsKLQotCWlmIChzaG9zdF91c2VfYmxrX21xKHNkZXYtPmhvc3QpKQotCQlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX1FVRVVFRCwgc2Rldi0+cmVxdWVzdF9xdWV1ZSk7Ci0JZWxzZSBpZiAoIWJsa19xdWV1ZV90YWdnZWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSkpCi0JCWJsa19xdWV1ZV9pbml0X3RhZ3Moc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZGVwdGgsCi0JCQkJICAgIHNkZXYtPmhvc3QtPmJxdCk7Ci0KLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgZGVwdGgpOwotfQotCi0vKioKLSAqIHNjc2lfZGVhY3RpdmF0ZV90Y3EgLSB0dXJuIG9mZiB0YWcgY29tbWFuZCBxdWV1ZWluZwotICogQFNEcG50OglkZXZpY2UgdG8gdHVybiBvZmYgVENRIGZvcgotICoqLwotc3RhdGljIGlubGluZSB2b2lkIHNjc2lfZGVhY3RpdmF0ZV90Y3Eoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCi17Ci0JaWYgKGJsa19xdWV1ZV90YWdnZWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSkpCi0JCWJsa19xdWV1ZV9mcmVlX3RhZ3Moc2Rldi0+cmVxdWVzdF9xdWV1ZSk7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgZGVwdGgpOwotfQotCi0vKioKLSAqIHNjc2lfcG9wdWxhdGVfdGFnX21zZyAtIHBsYWNlIGEgdGFnIG1lc3NhZ2UgaW4gYSBidWZmZXIKLSAqIEBTQ3BudDoJcG9pbnRlciB0byB0aGUgU2NzaV9DbW5kIGZvciB0aGUgdGFnCi0gKiBAbXNnOglwb2ludGVyIHRvIHRoZSBhcmVhIHRvIHBsYWNlIHRoZSB0YWcKLSAqCi0gKiBOb3RlczoKLSAqCWRlc2lnbmVkIHRvIGNyZWF0ZSB0aGUgY29ycmVjdCB0eXBlIG9mIHRhZyBtZXNzYWdlIGZvciB0aGUgCi0gKglwYXJ0aWN1bGFyIHJlcXVlc3QuICBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB0YWcgbWVzc2FnZS4KLSAqCU1heSByZXR1cm4gMCBpZiBUQ1EgaXMgZGlzYWJsZWQgZm9yIHRoaXMgZGV2aWNlLgotICoqLwotc3RhdGljIGlubGluZSBpbnQgc2NzaV9wb3B1bGF0ZV90YWdfbXNnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgY2hhciAqbXNnKQotewotICAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gY21kLT5yZXF1ZXN0OwotCi0gICAgICAgIGlmIChibGtfcnFfdGFnZ2VkKHJlcSkpIHsKLQkJKm1zZysrID0gTVNHX1NJTVBMRV9UQUc7Ci0gICAgICAgIAkqbXNnKysgPSByZXEtPnRhZzsKLSAgICAgICAgCXJldHVybiAyOwotCX0KLQotCXJldHVybiAwOwotfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfbXFfZmluZF90YWcoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCi0JCXVuc2lnbmVkIGludCBod19jdHgsIGludCB0YWcpCisJCQkJCQkgaW50IHVuaXF1ZV90YWcpCiB7Ci0Jc3RydWN0IHJlcXVlc3QgKnJlcTsKKwl1MTYgaHdxID0gYmxrX21xX3VuaXF1ZV90YWdfdG9faHdxKHVuaXF1ZV90YWcpOworCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBOVUxMOwogCi0JcmVxID0gYmxrX21xX3RhZ190b19ycShzaG9zdC0+dGFnX3NldC50YWdzW2h3X2N0eF0sIHRhZyk7CisJaWYgKGh3cSA8IHNob3N0LT50YWdfc2V0Lm5yX2h3X3F1ZXVlcykKKwkJcmVxID0gYmxrX21xX3RhZ190b19ycShzaG9zdC0+dGFnX3NldC50YWdzW2h3cV0sCisJCQkJICAgICAgIGJsa19tcV91bmlxdWVfdGFnX3RvX3RhZyh1bmlxdWVfdGFnKSk7CiAJcmV0dXJuIHJlcSA/IChzdHJ1Y3Qgc2NzaV9jbW5kICopcmVxLT5zcGVjaWFsIDogTlVMTDsKIH0KIAogLyoqCiAgKiBzY3NpX2ZpbmRfdGFnIC0gZmluZCBhIHRhZ2dlZCBjb21tYW5kIGJ5IGRldmljZQogICogQFNEcG50Oglwb2ludGVyIHRvIHRoZSBTY1NJIGRldmljZQotICogQHRhZzoJdGhlIHRhZyBudW1iZXIKKyAqIEB0YWc6CXRhZyBnZW5lcmF0ZWQgYnkgYmxrX21xX3VuaXF1ZV90YWcoKQogICoKICAqIE5vdGVzOgogICoJT25seSB3b3JrcyB3aXRoIHRhZ3MgYWxsb2NhdGVkIGJ5IHRoZSBnZW5lcmljIGJsayBsYXllci4KQEAgLTEzMyw5ICs3Miw5IEBACiAKICAgICAgICAgaWYgKHRhZyAhPSBTQ1NJX05PX1RBRykgewogCQlpZiAoc2hvc3RfdXNlX2Jsa19tcShzZGV2LT5ob3N0KSkKLQkJCXJldHVybiBzY3NpX21xX2ZpbmRfdGFnKHNkZXYtPmhvc3QsIDAsIHRhZyk7CisJCQlyZXR1cm4gc2NzaV9tcV9maW5kX3RhZyhzZGV2LT5ob3N0LCB0YWcpOwogCi0gICAgICAgIAlyZXEgPSBibGtfcXVldWVfZmluZF90YWcoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgdGFnKTsKKwkJcmVxID0gYmxrX3F1ZXVlX2ZpbmRfdGFnKHNkZXYtPnJlcXVlc3RfcXVldWUsIHRhZyk7CiAJICAgICAgICByZXR1cm4gcmVxID8gKHN0cnVjdCBzY3NpX2NtbmQgKilyZXEtPnNwZWNpYWwgOiBOVUxMOwogCX0KIApAQCAtMTc0LDcgKzExMyw3IEBACiAvKioKICAqIHNjc2lfaG9zdF9maW5kX3RhZyAtIGZpbmQgdGhlIHRhZ2dlZCBjb21tYW5kIGJ5IGhvc3QKICAqIEBzaG9zdDoJcG9pbnRlciB0byBzY3NpX2hvc3QKLSAqIEB0YWc6CXRhZyBvZiB0aGUgc2NzaV9jbW5kCisgKiBAdGFnOgl0YWcgZ2VuZXJhdGVkIGJ5IGJsa19tcV91bmlxdWVfdGFnKCkKICAqCiAgKiBOb3RlczoKICAqCU9ubHkgd29ya3Mgd2l0aCB0YWdzIGFsbG9jYXRlZCBieSB0aGUgZ2VuZXJpYyBibGsgbGF5ZXIuCkBAIC0xODYsNyArMTI1LDcgQEAKIAogCWlmICh0YWcgIT0gU0NTSV9OT19UQUcpIHsKIAkJaWYgKHNob3N0X3VzZV9ibGtfbXEoc2hvc3QpKQotCQkJcmV0dXJuIHNjc2lfbXFfZmluZF90YWcoc2hvc3QsIDAsIHRhZyk7CisJCQlyZXR1cm4gc2NzaV9tcV9maW5kX3RhZyhzaG9zdCwgdGFnKTsKIAkJcmVxID0gYmxrX21hcF9xdWV1ZV9maW5kX3RhZyhzaG9zdC0+YnF0LCB0YWcpOwogCQlyZXR1cm4gcmVxID8gKHN0cnVjdCBzY3NpX2NtbmQgKilyZXEtPnNwZWNpYWwgOiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaAppbmRleCA3NDk3YTM4Li5hNGZhNTJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oCkBAIC0xNTcsNSArMTU3LDYgQEAKIGludCBzcGlfcG9wdWxhdGVfc3luY19tc2codW5zaWduZWQgY2hhciAqbXNnLCBpbnQgcGVyaW9kLCBpbnQgb2Zmc2V0KTsKIGludCBzcGlfcG9wdWxhdGVfcHByX21zZyh1bnNpZ25lZCBjaGFyICptc2csIGludCBwZXJpb2QsIGludCBvZmZzZXQsIGludCB3aWR0aCwKIAkJaW50IG9wdGlvbnMpOworaW50IHNwaV9wb3B1bGF0ZV90YWdfbXNnKHVuc2lnbmVkIGNoYXIgKm1zZywgc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIAogI2VuZGlmIC8qIFNDU0lfVFJBTlNQT1JUX1NQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2cuaCBiL2luY2x1ZGUvc2NzaS9zZy5oCmluZGV4IDc1MGU1ZGIuLjNhZmVjNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zZy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zZy5oCkBAIC0xNjQsMTIgKzE2NCwxNSBAQAogCiAvKiBSZXR1cm5zIC1FQlVTWSBpZiBvY2N1cGllZC4gM3JkIGFyZ3VtZW50IHBvaW50ZXIgdG8gaW50IChzZWUgbmV4dCkgKi8KICNkZWZpbmUgU0dfU0NTSV9SRVNFVCAweDIyODQKLS8qIEFzc29jaWF0ZWQgdmFsdWVzIHRoYXQgY2FuIGJlIGdpdmVuIHRvIFNHX1NDU0lfUkVTRVQgZm9sbG93ICovCisvKiBBc3NvY2lhdGVkIHZhbHVlcyB0aGF0IGNhbiBiZSBnaXZlbiB0byBTR19TQ1NJX1JFU0VUIGZvbGxvdy4KKyAqIFNHX1NDU0lfUkVTRVRfTk9fRVNDQUxBVEUgbWF5IGJlIE9SLWVkIHRvIHRoZSBfREVWSUNFLCBfVEFSR0VULCBfQlVTCisgKiBvciBfSE9TVCByZXNldCB2YWx1ZSBzbyBvbmx5IHRoYXQgYWN0aW9uIGlzIGF0dGVtcHRlZC4gKi8KICNkZWZpbmUJCVNHX1NDU0lfUkVTRVRfTk9USElORwkwCiAjZGVmaW5lCQlTR19TQ1NJX1JFU0VUX0RFVklDRQkxCiAjZGVmaW5lCQlTR19TQ1NJX1JFU0VUX0JVUwkyCiAjZGVmaW5lCQlTR19TQ1NJX1JFU0VUX0hPU1QJMwogI2RlZmluZQkJU0dfU0NTSV9SRVNFVF9UQVJHRVQJNAorI2RlZmluZQkJU0dfU0NTSV9SRVNFVF9OT19FU0NBTEFURQkweDEwMAogCiAvKiBzeW5jaHJvbm91cyBTQ1NJIGNvbW1hbmQgaW9jdGwsIChvbmx5IGluIHZlcnNpb24gMyBpbnRlcmZhY2UpICovCiAjZGVmaW5lIFNHX0lPIDB4MjI4NSAgIC8qIHNpbWlsYXIgZWZmZWN0IGFzIHdyaXRlKCkgZm9sbG93ZWQgYnkgcmVhZCgpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFybTkyMDBfc2RyYW1jLmggYi9pbmNsdWRlL3NvYy9hdDkxL2F0OTFybTkyMDBfc2RyYW1jLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXJtOTIwMF9zZHJhbWMuaApyZW5hbWUgdG8gaW5jbHVkZS9zb2MvYXQ5MS9hdDkxcm05MjAwX3NkcmFtYy5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05X2RkcnNkci5oIGIvaW5jbHVkZS9zb2MvYXQ5MS9hdDkxc2FtOV9kZHJzZHIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOV9kZHJzZHIuaApyZW5hbWUgdG8gaW5jbHVkZS9zb2MvYXQ5MS9hdDkxc2FtOV9kZHJzZHIuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOV9zZHJhbWMuaCBiL2luY2x1ZGUvc29jL2F0OTEvYXQ5MXNhbTlfc2RyYW1jLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTlfc2RyYW1jLmgKcmVuYW1lIHRvIGluY2x1ZGUvc29jL2F0OTEvYXQ5MXNhbTlfc2RyYW1jLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc29jL3RlZ3JhL21jLmggYi9pbmNsdWRlL3NvYy90ZWdyYS9tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGViOGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvYy90ZWdyYS9tYy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1NPQ19URUdSQV9NQ19IX18KKyNkZWZpbmUgX19TT0NfVEVHUkFfTUNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgY2xrOworc3RydWN0IGRldmljZTsKK3N0cnVjdCBwYWdlOworCitzdHJ1Y3QgdGVncmFfc21tdV9lbmFibGUgeworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgaW50IGJpdDsKK307CisKKy8qIGxhdGVuY3kgYWxsb3dhbmNlICovCitzdHJ1Y3QgdGVncmFfbWNfbGEgeworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgaW50IHNoaWZ0OworCXVuc2lnbmVkIGludCBtYXNrOworCXVuc2lnbmVkIGludCBkZWY7Cit9OworCitzdHJ1Y3QgdGVncmFfbWNfY2xpZW50IHsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgc3dncm91cDsKKworCXVuc2lnbmVkIGludCBmaWZvX3NpemU7CisKKwlzdHJ1Y3QgdGVncmFfc21tdV9lbmFibGUgc21tdTsKKwlzdHJ1Y3QgdGVncmFfbWNfbGEgbGE7Cit9OworCitzdHJ1Y3QgdGVncmFfc21tdV9zd2dyb3VwIHsKKwl1bnNpZ25lZCBpbnQgc3dncm91cDsKKwl1bnNpZ25lZCBpbnQgcmVnOworfTsKKworc3RydWN0IHRlZ3JhX3NtbXVfb3BzIHsKKwl2b2lkICgqZmx1c2hfZGNhY2hlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgICAgIHNpemVfdCBzaXplKTsKK307CisKK3N0cnVjdCB0ZWdyYV9zbW11X3NvYyB7CisJY29uc3Qgc3RydWN0IHRlZ3JhX21jX2NsaWVudCAqY2xpZW50czsKKwl1bnNpZ25lZCBpbnQgbnVtX2NsaWVudHM7CisKKwljb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zd2dyb3VwICpzd2dyb3VwczsKKwl1bnNpZ25lZCBpbnQgbnVtX3N3Z3JvdXBzOworCisJYm9vbCBzdXBwb3J0c19yb3VuZF9yb2Jpbl9hcmJpdHJhdGlvbjsKKwlib29sIHN1cHBvcnRzX3JlcXVlc3RfbGltaXQ7CisKKwl1bnNpZ25lZCBpbnQgbnVtX2FzaWRzOworCisJY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfb3BzICpvcHM7Cit9OworCitzdHJ1Y3QgdGVncmFfbWM7CitzdHJ1Y3QgdGVncmFfc21tdTsKKworI2lmZGVmIENPTkZJR19URUdSQV9JT01NVV9TTU1VCitzdHJ1Y3QgdGVncmFfc21tdSAqdGVncmFfc21tdV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3NvYyAqc29jLAorCQkJCSAgICBzdHJ1Y3QgdGVncmFfbWMgKm1jKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0ZWdyYV9zbW11ICoKK3RlZ3JhX3NtbXVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zb2MgKnNvYywKKwkJIHN0cnVjdCB0ZWdyYV9tYyAqbWMpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworc3RydWN0IHRlZ3JhX21jX3NvYyB7CisJY29uc3Qgc3RydWN0IHRlZ3JhX21jX2NsaWVudCAqY2xpZW50czsKKwl1bnNpZ25lZCBpbnQgbnVtX2NsaWVudHM7CisKKwljb25zdCB1bnNpZ25lZCBpbnQgKmVtZW1fcmVnczsKKwl1bnNpZ25lZCBpbnQgbnVtX2VtZW1fcmVnczsKKworCXVuc2lnbmVkIGludCBudW1fYWRkcmVzc19iaXRzOworCXVuc2lnbmVkIGludCBhdG9tX3NpemU7CisKKwljb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zb2MgKnNtbXU7Cit9OworCitzdHJ1Y3QgdGVncmFfbWMgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdGVncmFfc21tdSAqc21tdTsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGNsayAqY2xrOworCWludCBpcnE7CisKKwljb25zdCBzdHJ1Y3QgdGVncmFfbWNfc29jICpzb2M7CisJdW5zaWduZWQgbG9uZyB0aWNrOworfTsKKworI2VuZGlmIC8qIF9fU09DX1RFR1JBX01DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggZTg2MjQ5Ny4uOGJiMDBhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC0xODQsNiArMTg0LDggQEAKICNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9EU0RfVTgJCV9TTkRSVl9QQ01fRk1UQklUKERTRF9VOCkKICNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9EU0RfVTE2X0xFCV9TTkRSVl9QQ01fRk1UQklUKERTRF9VMTZfTEUpCiAjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfRFNEX1UzMl9MRQlfU05EUlZfUENNX0ZNVEJJVChEU0RfVTMyX0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0RTRF9VMTZfQkUJX1NORFJWX1BDTV9GTVRCSVQoRFNEX1UxNl9CRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9EU0RfVTMyX0JFCV9TTkRSVl9QQ01fRk1UQklUKERTRF9VMzJfQkUpCiAKICNpZmRlZiBTTkRSVl9MSVRUTEVfRU5ESUFOCiAjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzE2CQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZHBjbS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZHBjbS5oCmluZGV4IDI4ODNhN2EuLjk4ZjJhZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRwY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kcGNtLmgKQEAgLTEwMiw2ICsxMDIsOCBAQAogCS8qIHN0YXRlIGFuZCB1cGRhdGUgKi8KIAllbnVtIHNuZF9zb2NfZHBjbV91cGRhdGUgcnVudGltZV91cGRhdGU7CiAJZW51bSBzbmRfc29jX2RwY21fc3RhdGUgc3RhdGU7CisKKwlpbnQgdHJpZ2dlcl9wZW5kaW5nOyAvKiB0cmlnZ2VyIGNtZCArIDEgaWYgcGVuZGluZywgMCBpZiBub3QgKi8KIH07CiAKIC8qIGNhbiB0aGlzIEJFIHN0b3AgYW5kIGZyZWUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmgKaW5kZXggZTMzNWU3ZC4uYzc4ZTg4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmgKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2lmZGVmIENPTkZJR19SQ1VfVFJBQ0UKIAotI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKQorI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19QUkVFTVBUX1JDVSkKIAogLyoKICAqIFRyYWNlcG9pbnQgZm9yIGdyYWNlLXBlcmlvZCBldmVudHMuICBUYWtlcyBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUKQEAgLTM0NSw3ICszNDUsNyBAQAogCQkgIF9fZW50cnktPmNwdSwgX19lbnRyeS0+cXNldmVudCkKICk7CiAKLSNlbmRpZiAvKiAjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpICovCisjZW5kaWYgLyogI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19QUkVFTVBUX1JDVSkgKi8KIAogLyoKICAqIFRyYWNlcG9pbnQgZm9yIGR5bnRpY2staWRsZSBlbnRyeS9leGl0IGV2ZW50cy4gIFRoZXNlIHRha2UgYSBzdHJpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oCmluZGV4IDBhNjhkNWEuLjMwZmVkYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaApAQCAtOTcsMTYgKzk3LDE5IEBACiAJbG9uZyBzdGF0ZSA9IHAtPnN0YXRlOwogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKKyNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKKwlCVUdfT04ocCAhPSBjdXJyZW50KTsKKyNlbmRpZiAvKiBDT05GSUdfU0NIRURfREVCVUcgKi8KIAkvKgogCSAqIEZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgYSBwcmVlbXB0ZWQgdGFzayBpcyBhIHJ1bm5pbmcgdGFzay4KIAkgKi8KLQlpZiAodGFza19wcmVlbXB0X2NvdW50KHApICYgUFJFRU1QVF9BQ1RJVkUpCisJaWYgKHByZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfQUNUSVZFKQogCQlzdGF0ZSA9IFRBU0tfUlVOTklORyB8IFRBU0tfU1RBVEVfTUFYOwotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BSRUVNUFQgKi8KIAogCXJldHVybiBzdGF0ZTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIENSRUFURV9UUkFDRV9QT0lOVFMgKi8KIAogLyoKICAqIFRyYWNlcG9pbnQgZm9yIHRhc2sgc3dpdGNoZXMsIHBlcmZvcm1lZCBieSB0aGUgc2NoZWR1bGVyOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NzaS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NzaS5oCmluZGV4IGRiNmM5MzUuLjA3OWJkMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Njc2kuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY3NpLmgKQEAgLTk0LDcgKzk0LDcgQEAKIAkJc2NzaV9vcGNvZGVfbmFtZShXUklURV8xNiksCQkJXAogCQlzY3NpX29wY29kZV9uYW1lKFZFUklGWV8xNiksCQkJXAogCQlzY3NpX29wY29kZV9uYW1lKFdSSVRFX1NBTUVfMTYpLAkJXAotCQlzY3NpX29wY29kZV9uYW1lKFNFUlZJQ0VfQUNUSU9OX0lOKSwJCVwKKwkJc2NzaV9vcGNvZGVfbmFtZShTRVJWSUNFX0FDVElPTl9JTl8xNiksCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoU0FJX1JFQURfQ0FQQUNJVFlfMTYpLAkJXAogCQlzY3NpX29wY29kZV9uYW1lKFNBSV9HRVRfTEJBX1NUQVRVUyksCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoTUlfUkVQT1JUX1RBUkdFVF9QR1MpLAkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc3VucnBjLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zdW5ycGMuaAppbmRleCAxZmVmM2U2Li4xNzFjYTRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zdW5ycGMuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zdW5ycGMuaApAQCAtNiw2ICs2LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94cHJ0c29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgpAQCAtMzA2LDYgKzMwOCwxNjQgQEAKIERFRklORV9SUENfU09DS0VUX0VWRU5UKHJwY19zb2NrZXRfY2xvc2UpOwogREVGSU5FX1JQQ19TT0NLRVRfRVZFTlQocnBjX3NvY2tldF9zaHV0ZG93bik7CiAKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MocnBjX3hwcnRfZXZlbnQsCisJVFBfUFJPVE8oc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBfX2JlMzIgeGlkLCBpbnQgc3RhdHVzKSwKKworCVRQX0FSR1MoeHBydCwgeGlkLCBzdGF0dXMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChfX2JlMzIsIHhpZCkKKwkJX19maWVsZChpbnQsIHN0YXR1cykKKwkJX19zdHJpbmcoYWRkciwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FERFJdKQorCQlfX3N0cmluZyhwb3J0LCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0pCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT54aWQgPSB4aWQ7CisJCV9fZW50cnktPnN0YXR1cyA9IHN0YXR1czsKKwkJX19hc3NpZ25fc3RyKGFkZHIsIHhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSk7CisJCV9fYXNzaWduX3N0cihwb3J0LCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0pOworCSksCisKKwlUUF9wcmludGsoInBlZXI9WyVzXTolcyB4aWQ9MHgleCBzdGF0dXM9JWQiLCBfX2dldF9zdHIoYWRkciksCisJCQlfX2dldF9zdHIocG9ydCksIGJlMzJfdG9fY3B1KF9fZW50cnktPnhpZCksCisJCQlfX2VudHJ5LT5zdGF0dXMpCispOworCitERUZJTkVfRVZFTlQocnBjX3hwcnRfZXZlbnQsIHhwcnRfbG9va3VwX3Jxc3QsCisJVFBfUFJPVE8oc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBfX2JlMzIgeGlkLCBpbnQgc3RhdHVzKSwKKwlUUF9BUkdTKHhwcnQsIHhpZCwgc3RhdHVzKSk7CisKK0RFRklORV9FVkVOVChycGNfeHBydF9ldmVudCwgeHBydF90cmFuc21pdCwKKwlUUF9QUk9UTyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIF9fYmUzMiB4aWQsIGludCBzdGF0dXMpLAorCVRQX0FSR1MoeHBydCwgeGlkLCBzdGF0dXMpKTsKKworREVGSU5FX0VWRU5UKHJwY194cHJ0X2V2ZW50LCB4cHJ0X2NvbXBsZXRlX3Jxc3QsCisJVFBfUFJPVE8oc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBfX2JlMzIgeGlkLCBpbnQgc3RhdHVzKSwKKwlUUF9BUkdTKHhwcnQsIHhpZCwgc3RhdHVzKSk7CisKK1RSQUNFX0VWRU5UKHhzX3RjcF9kYXRhX3JlYWR5LAorCVRQX1BST1RPKHN0cnVjdCBycGNfeHBydCAqeHBydCwgaW50IGVyciwgdW5zaWduZWQgaW50IHRvdGFsKSwKKworCVRQX0FSR1MoeHBydCwgZXJyLCB0b3RhbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGludCwgZXJyKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgdG90YWwpCisJCV9fc3RyaW5nKGFkZHIsIHhwcnQgPyB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0gOgorCQkJCSIobnVsbCkiKQorCQlfX3N0cmluZyhwb3J0LCB4cHJ0ID8geHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdIDoKKwkJCQkiKG51bGwpIikKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmVyciA9IGVycjsKKwkJX19lbnRyeS0+dG90YWwgPSB0b3RhbDsKKwkJX19hc3NpZ25fc3RyKGFkZHIsIHhwcnQgPworCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FERFJdIDogIihudWxsKSIpOworCQlfX2Fzc2lnbl9zdHIocG9ydCwgeHBydCA/CisJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0gOiAiKG51bGwpIik7CisJKSwKKworCVRQX3ByaW50aygicGVlcj1bJXNdOiVzIGVycj0lZCB0b3RhbD0ldSIsIF9fZ2V0X3N0cihhZGRyKSwKKwkJCV9fZ2V0X3N0cihwb3J0KSwgX19lbnRyeS0+ZXJyLCBfX2VudHJ5LT50b3RhbCkKKyk7CisKKyNkZWZpbmUgcnBjX3Nob3dfc29ja194cHJ0X2ZsYWdzKGZsYWdzKSBcCisJX19wcmludF9mbGFncyhmbGFncywgInwiLCBcCisJCXsgVENQX1JDVl9MQVNUX0ZSQUcsICJUQ1BfUkNWX0xBU1RfRlJBRyIgfSwgXAorCQl7IFRDUF9SQ1ZfQ09QWV9GUkFHSERSLCAiVENQX1JDVl9DT1BZX0ZSQUdIRFIiIH0sIFwKKwkJeyBUQ1BfUkNWX0NPUFlfWElELCAiVENQX1JDVl9DT1BZX1hJRCIgfSwgXAorCQl7IFRDUF9SQ1ZfQ09QWV9EQVRBLCAiVENQX1JDVl9DT1BZX0RBVEEiIH0sIFwKKwkJeyBUQ1BfUkNWX1JFQURfQ0FMTERJUiwgIlRDUF9SQ1ZfUkVBRF9DQUxMRElSIiB9LCBcCisJCXsgVENQX1JDVl9DT1BZX0NBTExESVIsICJUQ1BfUkNWX0NPUFlfQ0FMTERJUiIgfSwgXAorCQl7IFRDUF9SUENfUkVQTFksICJUQ1BfUlBDX1JFUExZIiB9KQorCitUUkFDRV9FVkVOVCh4c190Y3BfZGF0YV9yZWN2LAorCVRQX1BST1RPKHN0cnVjdCBzb2NrX3hwcnQgKnhzKSwKKworCVRQX0FSR1MoeHMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcoYWRkciwgeHMtPnhwcnQuYWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FERFJdKQorCQlfX3N0cmluZyhwb3J0LCB4cy0+eHBydC5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0pCisJCV9fZmllbGQoX19iZTMyLCB4aWQpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgZmxhZ3MpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgY29waWVkKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgcmVjbGVuKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG9mZnNldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fYXNzaWduX3N0cihhZGRyLCB4cy0+eHBydC5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0pOworCQlfX2Fzc2lnbl9zdHIocG9ydCwgeHMtPnhwcnQuYWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdKTsKKwkJX19lbnRyeS0+eGlkID0geHMtPnRjcF94aWQ7CisJCV9fZW50cnktPmZsYWdzID0geHMtPnRjcF9mbGFnczsKKwkJX19lbnRyeS0+Y29waWVkID0geHMtPnRjcF9jb3BpZWQ7CisJCV9fZW50cnktPnJlY2xlbiA9IHhzLT50Y3BfcmVjbGVuOworCQlfX2VudHJ5LT5vZmZzZXQgPSB4cy0+dGNwX29mZnNldDsKKwkpLAorCisJVFBfcHJpbnRrKCJwZWVyPVslc106JXMgeGlkPTB4JXggZmxhZ3M9JXMgY29waWVkPSVsdSByZWNsZW49JXUgb2Zmc2V0PSVsdSIsCisJCQlfX2dldF9zdHIoYWRkciksIF9fZ2V0X3N0cihwb3J0KSwgYmUzMl90b19jcHUoX19lbnRyeS0+eGlkKSwKKwkJCXJwY19zaG93X3NvY2tfeHBydF9mbGFncyhfX2VudHJ5LT5mbGFncyksCisJCQlfX2VudHJ5LT5jb3BpZWQsIF9fZW50cnktPnJlY2xlbiwgX19lbnRyeS0+b2Zmc2V0KQorKTsKKworVFJBQ0VfRVZFTlQoc3ZjX3JlY3YsCisJVFBfUFJPVE8oc3RydWN0IHN2Y19ycXN0ICpycXN0LCBpbnQgc3RhdHVzKSwKKworCVRQX0FSR1MocnFzdCwgc3RhdHVzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoc3RydWN0IHNvY2thZGRyICosIGFkZHIpCisJCV9fZmllbGQoX19iZTMyLCB4aWQpCisJCV9fZmllbGQoaW50LCBzdGF0dXMpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZycXN0LT5ycV9hZGRyOworCQlfX2VudHJ5LT54aWQgPSBzdGF0dXMgPiAwID8gcnFzdC0+cnFfeGlkIDogMDsKKwkJX19lbnRyeS0+c3RhdHVzID0gc3RhdHVzOworCSksCisKKwlUUF9wcmludGsoImFkZHI9JXBJU2NwIHhpZD0weCV4IHN0YXR1cz0lZCIsIF9fZW50cnktPmFkZHIsCisJCQliZTMyX3RvX2NwdShfX2VudHJ5LT54aWQpLCBfX2VudHJ5LT5zdGF0dXMpCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKHN2Y19ycXN0X3N0YXR1cywKKworCVRQX1BST1RPKHN0cnVjdCBzdmNfcnFzdCAqcnFzdCwgaW50IHN0YXR1cyksCisKKwlUUF9BUkdTKHJxc3QsIHN0YXR1cyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBzb2NrYWRkciAqLCBhZGRyKQorCQlfX2ZpZWxkKF9fYmUzMiwgeGlkKQorCQlfX2ZpZWxkKGludCwgZHJvcG1lKQorCQlfX2ZpZWxkKGludCwgc3RhdHVzKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcnFzdC0+cnFfYWRkcjsKKwkJX19lbnRyeS0+eGlkID0gcnFzdC0+cnFfeGlkOworCQlfX2VudHJ5LT5kcm9wbWUgPSAoaW50KXJxc3QtPnJxX2Ryb3BtZTsKKwkJX19lbnRyeS0+c3RhdHVzID0gc3RhdHVzOworCSksCisKKwlUUF9wcmludGsoImFkZHI9JXBJU2NwIHJxX3hpZD0weCV4IGRyb3BtZT0lZCBzdGF0dXM9JWQiLAorCQlfX2VudHJ5LT5hZGRyLCBiZTMyX3RvX2NwdShfX2VudHJ5LT54aWQpLCBfX2VudHJ5LT5kcm9wbWUsCisJCV9fZW50cnktPnN0YXR1cykKKyk7CisKK0RFRklORV9FVkVOVChzdmNfcnFzdF9zdGF0dXMsIHN2Y19wcm9jZXNzLAorCVRQX1BST1RPKHN0cnVjdCBzdmNfcnFzdCAqcnFzdCwgaW50IHN0YXR1cyksCisJVFBfQVJHUyhycXN0LCBzdGF0dXMpKTsKKworREVGSU5FX0VWRU5UKHN2Y19ycXN0X3N0YXR1cywgc3ZjX3NlbmQsCisJVFBfUFJPVE8oc3RydWN0IHN2Y19ycXN0ICpycXN0LCBpbnQgc3RhdHVzKSwKKwlUUF9BUkdTKHJxc3QsIHN0YXR1cykpOworCiAjZW5kaWYgLyogX1RSQUNFX1NVTlJQQ19IICovCiAKICNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RhcmdldC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdGFyZ2V0LmgKaW5kZXggZGE5Y2MwZi4uNDU0MDM0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGFyZ2V0LmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdGFyZ2V0LmgKQEAgLTk2LDcgKzk2LDcgQEAKIAkJc2NzaV9vcGNvZGVfbmFtZShXUklURV8xNiksCQkJXAogCQlzY3NpX29wY29kZV9uYW1lKFZFUklGWV8xNiksCQkJXAogCQlzY3NpX29wY29kZV9uYW1lKFdSSVRFX1NBTUVfMTYpLAkJXAotCQlzY3NpX29wY29kZV9uYW1lKFNFUlZJQ0VfQUNUSU9OX0lOKSwJCVwKKwkJc2NzaV9vcGNvZGVfbmFtZShTRVJWSUNFX0FDVElPTl9JTl8xNiksCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoU0FJX1JFQURfQ0FQQUNJVFlfMTYpLAkJXAogCQlzY3NpX29wY29kZV9uYW1lKFNBSV9HRVRfTEJBX1NUQVRVUyksCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoTUlfUkVQT1JUX1RBUkdFVF9QR1MpLAkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NpZ2luZm8uaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKaW5kZXggYmE1YmU3Zi4uMWUzNTUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc2lnaW5mby5oCkBAIC05MSw2ICs5MSwxMCBAQAogCQkJaW50IF90cmFwbm87CS8qIFRSQVAgIyB3aGljaCBjYXVzZWQgdGhlIHNpZ25hbCAqLwogI2VuZGlmCiAJCQlzaG9ydCBfYWRkcl9sc2I7IC8qIExTQiBvZiB0aGUgcmVwb3J0ZWQgYWRkcmVzcyAqLworCQkJc3RydWN0IHsKKwkJCQl2b2lkIF9fdXNlciAqX2xvd2VyOworCQkJCXZvaWQgX191c2VyICpfdXBwZXI7CisJCQl9IF9hZGRyX2JuZDsKIAkJfSBfc2lnZmF1bHQ7CiAKIAkJLyogU0lHUE9MTCAqLwpAQCAtMTMxLDYgKzEzNSw4IEBACiAjZGVmaW5lIHNpX3RyYXBubwlfc2lmaWVsZHMuX3NpZ2ZhdWx0Ll90cmFwbm8KICNlbmRpZgogI2RlZmluZSBzaV9hZGRyX2xzYglfc2lmaWVsZHMuX3NpZ2ZhdWx0Ll9hZGRyX2xzYgorI2RlZmluZSBzaV9sb3dlcglfc2lmaWVsZHMuX3NpZ2ZhdWx0Ll9hZGRyX2JuZC5fbG93ZXIKKyNkZWZpbmUgc2lfdXBwZXIJX3NpZmllbGRzLl9zaWdmYXVsdC5fYWRkcl9ibmQuX3VwcGVyCiAjZGVmaW5lIHNpX2JhbmQJCV9zaWZpZWxkcy5fc2lncG9sbC5fYmFuZAogI2RlZmluZSBzaV9mZAkJX3NpZmllbGRzLl9zaWdwb2xsLl9mZAogI2lmZGVmIF9fQVJDSF9TSUdTWVMKQEAgLTE5OSw3ICsyMDUsOCBAQAogICovCiAjZGVmaW5lIFNFR1ZfTUFQRVJSCShfX1NJX0ZBVUxUfDEpCS8qIGFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QgKi8KICNkZWZpbmUgU0VHVl9BQ0NFUlIJKF9fU0lfRkFVTFR8MikJLyogaW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdCAqLwotI2RlZmluZSBOU0lHU0VHVgkyCisjZGVmaW5lIFNFR1ZfQk5ERVJSCShfX1NJX0ZBVUxUfDMpICAvKiBmYWlsZWQgYWRkcmVzcyBib3VuZCBjaGVja3MgKi8KKyNkZWZpbmUgTlNJR1NFR1YJMwogCiAvKgogICogU0lHQlVTIHNpX2NvZGVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkIGIvaW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZAppbmRleCBiNzAyMzdlLi44NTIzZjliIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQKQEAgLTEyNSw2ICsxMjUsNyBAQAogaGVhZGVyLXkgKz0gZmlyZXdpcmUtY2Rldi5oCiBoZWFkZXIteSArPSBmaXJld2lyZS1jb25zdGFudHMuaAogaGVhZGVyLXkgKz0gZmxhdC5oCitoZWFkZXIteSArPSBmb3UuaAogaGVhZGVyLXkgKz0gZnMuaAogaGVhZGVyLXkgKz0gZnNsX2h5cGVydmlzb3IuaAogaGVhZGVyLXkgKz0gZnVzZS5oCkBAIC0xNDEsNiArMTQyLDcgQEAKIGhlYWRlci15ICs9IGhpZGRldi5oCiBoZWFkZXIteSArPSBoaWRyYXcuaAogaGVhZGVyLXkgKz0gaHBldC5oCitoZWFkZXIteSArPSBoc3JfbmV0bGluay5oCiBoZWFkZXIteSArPSBoeXBlcnYuaAogaGVhZGVyLXkgKz0gaHlzZG5faWYuaAogaGVhZGVyLXkgKz0gaTJjLWRldi5oCkBAIC0yNTEsNiArMjUzLDcgQEAKIGhlYWRlci15ICs9IG1pbml4X2ZzLmgKIGhlYWRlci15ICs9IG1tYW4uaAogaGVhZGVyLXkgKz0gbW10aW1lci5oCitoZWFkZXIteSArPSBtcGxzLmgKIGhlYWRlci15ICs9IG1xdWV1ZS5oCiBoZWFkZXIteSArPSBtcm91dGUuaAogaGVhZGVyLXkgKz0gbXJvdXRlNi5oCkBAIC00MjQsNiArNDI3LDcgQEAKIGhlYWRlci15ICs9IHZpcnRpb19wY2kuaAogaGVhZGVyLXkgKz0gdmlydGlvX3JpbmcuaAogaGVhZGVyLXkgKz0gdmlydGlvX3JuZy5oCitoZWFkZXIteSArPSB2bV9zb2NrZXRzLmgKIGhlYWRlci15ICs9IHZ0LmgKIGhlYWRlci15ICs9IHdhaXQuaAogaGVhZGVyLXkgKz0gd2Fucm91dGVyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9kbS1pb2N0bC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2RtLWlvY3RsLmgKaW5kZXggMzMxNWFiMi4uYTU3MGQ3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2RtLWlvY3RsLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTI2Nyw5ICsyNjcsOSBAQAogI2RlZmluZSBETV9ERVZfU0VUX0dFT01FVFJZCV9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU0VUX0dFT01FVFJZX0NNRCwgc3RydWN0IGRtX2lvY3RsKQogCiAjZGVmaW5lIERNX1ZFUlNJT05fTUFKT1IJNAotI2RlZmluZSBETV9WRVJTSU9OX01JTk9SCTI4CisjZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IJMjkKICNkZWZpbmUgRE1fVkVSU0lPTl9QQVRDSExFVkVMCTAKLSNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDE0LTA5LTE3KSIKKyNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDE0LTEwLTI4KSIKIAogLyogU3RhdHVzIGJpdHMgKi8KICNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRwkoMSA8PCAwKSAvKiBJbi9PdXQgKi8KQEAgLTM1Miw0ICszNTIsOSBAQAogICovCiAjZGVmaW5lIERNX0RFRkVSUkVEX1JFTU9WRQkJKDEgPDwgMTcpIC8qIEluL091dCAqLwogCisvKgorICogSWYgc2V0LCB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZCBpbnRlcm5hbGx5LgorICovCisjZGVmaW5lIERNX0lOVEVSTkFMX1NVU1BFTkRfRkxBRwkoMSA8PCAxOCkgLyogT3V0ICovCisKICNlbmRpZgkJCQkvKiBfTElOVVhfRE1fSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi1lbS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi1lbS5oCmluZGV4IGFhOTBiYzkuLmFlOTlmNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9lbGYtZW0uaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZWxmLWVtLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNkZWZpbmUgRU1fTU4xMDMwMAk4OQkvKiBQYW5hc29uaWMvTUVJIE1OMTAzMDAsIEFNMzMgKi8KICNkZWZpbmUgRU1fT1BFTlJJU0MgICAgIDkyICAgICAvKiBPcGVuUklTQyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCiAjZGVmaW5lIEVNX0JMQUNLRklOICAgICAxMDYgICAgIC8qIEFESSBCbGFja2ZpbiBQcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fQUxURVJBX05JT1MyCTExMwkvKiBBbHRlcmEgTmlvcyBJSSBzb2Z0LWNvcmUgcHJvY2Vzc29yICovCiAjZGVmaW5lIEVNX1RJX0M2MDAwCTE0MAkvKiBUSSBDNlggRFNQcyAqLwogI2RlZmluZSBFTV9BQVJDSDY0CTE4MwkvKiBBUk0gNjQgYml0ICovCiAjZGVmaW5lIEVNX0ZSVgkJMHg1NDQxCS8qIEZ1aml0c3UgRlItViAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi5oCmluZGV4IGVhOWJmMjUuLjcxZTFkMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9lbGYuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZWxmLmgKQEAgLTM5Nyw2ICszOTcsNyBAQAogI2RlZmluZSBOVF9BUk1fVExTCTB4NDAxCQkvKiBBUk0gVExTIHJlZ2lzdGVyICovCiAjZGVmaW5lIE5UX0FSTV9IV19CUkVBSwkweDQwMgkJLyogQVJNIGhhcmR3YXJlIGJyZWFrcG9pbnQgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5UX0FSTV9IV19XQVRDSAkweDQwMwkJLyogQVJNIGhhcmR3YXJlIHdhdGNocG9pbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5UX0FSTV9TWVNURU1fQ0FMTAkweDQwNAkvKiBBUk0gc3lzdGVtIGNhbGwgbnVtYmVyICovCiAjZGVmaW5lIE5UX01FVEFHX0NCVUYJMHg1MDAJCS8qIE1ldGFnIGNhdGNoIGJ1ZmZlciByZWdpc3RlcnMgKi8KICNkZWZpbmUgTlRfTUVUQUdfUlBJUEUJMHg1MDEJCS8qIE1ldGFnIHJlYWQgcGlwZWxpbmUgc3RhdGUgKi8KICNkZWZpbmUgTlRfTUVUQUdfVExTCTB4NTAyCQkvKiBNZXRhZyBUTFMgcG9pbnRlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2JyaWRnZS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2JyaWRnZS5oCmluZGV4IDM5ZjYyMWEuLmRhMTdlNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9icmlkZ2UuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYnJpZGdlLmgKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KIAogI2RlZmluZSBTWVNGU19CUklER0VfQVRUUgkiYnJpZGdlIgogI2RlZmluZSBTWVNGU19CUklER0VfRkRCCSJicmZvcndhcmQiCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmZzZC9kZWJ1Zy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25mc2QvZGVidWcuaAppbmRleCBhNmY0NTNjLi4xZmRjOTViIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmZzZC9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZnNkL2RlYnVnLmgKQEAgLTE1LDcgKzE1LDcgQEAKICAqIEVuYWJsZSBkZWJ1Z2dpbmcgZm9yIG5mc2QuCiAgKiBSZXF1aXJlcyBSUENfREVCVUcuCiAgKi8KLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBORlNEX0RFQlVHCQkxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggOWQ4NDU0MC4uOWI3OWFiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oCkBAIC0xMzcsOCArMTM3LDkgQEAKIAlQRVJGX1NBTVBMRV9EQVRBX1NSQwkJCT0gMVUgPDwgMTUsCiAJUEVSRl9TQU1QTEVfSURFTlRJRklFUgkJCT0gMVUgPDwgMTYsCiAJUEVSRl9TQU1QTEVfVFJBTlNBQ1RJT04JCQk9IDFVIDw8IDE3LAorCVBFUkZfU0FNUExFX1JFR1NfSU5UUgkJCT0gMVUgPDwgMTgsCiAKLQlQRVJGX1NBTVBMRV9NQVggPSAxVSA8PCAxOCwJCS8qIG5vbi1BQkkgKi8KKwlQRVJGX1NBTVBMRV9NQVggPSAxVSA8PCAxOSwJCS8qIG5vbi1BQkkgKi8KIH07CiAKIC8qCkBAIC0yMzgsNiArMjM5LDcgQEAKICNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMgk4MAkvKiBhZGQ6IGJyYW5jaF9zYW1wbGVfdHlwZSAqLwogI2RlZmluZSBQRVJGX0FUVFJfU0laRV9WRVIzCTk2CS8qIGFkZDogc2FtcGxlX3JlZ3NfdXNlciAqLwogCQkJCQkvKiBhZGQ6IHNhbXBsZV9zdGFja191c2VyICovCisjZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjQJMTA0CS8qIGFkZDogc2FtcGxlX3JlZ3NfaW50ciAqLwogCiAvKgogICogSGFyZHdhcmUgZXZlbnRfaWQgdG8gbW9uaXRvciB2aWEgYSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGV2ZW50OgpAQCAtMzM0LDYgKzMzNiwxNSBAQAogCiAJLyogQWxpZ24gdG8gdTY0LiAqLwogCV9fdTMyCV9fcmVzZXJ2ZWRfMjsKKwkvKgorCSAqIERlZmluZXMgc2V0IG9mIHJlZ3MgdG8gZHVtcCBmb3IgZWFjaCBzYW1wbGUKKwkgKiBzdGF0ZSBjYXB0dXJlZCBvbjoKKwkgKiAgLSBwcmVjaXNlID0gMDogUE1VIGludGVycnVwdAorCSAqICAtIHByZWNpc2UgPiAwOiBzYW1wbGVkIGluc3RydWN0aW9uCisJICoKKwkgKiBTZWUgYXNtL3BlcmZfcmVncy5oIGZvciBkZXRhaWxzLgorCSAqLworCV9fdTY0CXNhbXBsZV9yZWdzX2ludHI7CiB9OwogCiAjZGVmaW5lIHBlcmZfZmxhZ3MoYXR0cikJKCooJihhdHRyKS0+cmVhZF9mb3JtYXQgKyAxKSkKQEAgLTY4Niw2ICs2OTcsOCBAQAogCSAqCXsgdTY0CQkJd2VpZ2h0OyAgIH0gJiYgUEVSRl9TQU1QTEVfV0VJR0hUCiAJICoJeyB1NjQJCQlkYXRhX3NyYzsgfSAmJiBQRVJGX1NBTVBMRV9EQVRBX1NSQwogCSAqCXsgdTY0CQkJdHJhbnNhY3Rpb247IH0gJiYgUEVSRl9TQU1QTEVfVFJBTlNBQ1RJT04KKwkgKgl7IHU2NAkJCWFiaTsgIyBlbnVtIHBlcmZfc2FtcGxlX3JlZ3NfYWJpCisJICoJICB1NjQJCQlyZWdzW3dlaWdodChtYXNrKV07IH0gJiYgUEVSRl9TQU1QTEVfUkVHU19JTlRSCiAJICogfTsKIAkgKi8KIAlQRVJGX1JFQ09SRF9TQU1QTEUJCQk9IDksCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oCmluZGV4IDUxM2RmNzUuLjg5ZjYzNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oCkBAIC0xNzksNCArMTc5LDEwIEBACiAjZGVmaW5lIFBSX1NFVF9USFBfRElTQUJMRQk0MQogI2RlZmluZSBQUl9HRVRfVEhQX0RJU0FCTEUJNDIKIAorLyoKKyAqIFRlbGwgdGhlIGtlcm5lbCB0byBzdGFydC9zdG9wIGhlbHBpbmcgdXNlcnNwYWNlIG1hbmFnZSBib3VuZHMgdGFibGVzLgorICovCisjZGVmaW5lIFBSX01QWF9FTkFCTEVfTUFOQUdFTUVOVCAgNDMKKyNkZWZpbmUgUFJfTVBYX0RJU0FCTEVfTUFOQUdFTUVOVCA0NAorCiAjZW5kaWYgLyogX0xJTlVYX1BSQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3NjaGVkLmgKaW5kZXggYjkzMmJlOS4uY2M4OWRkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3NjaGVkLmgKQEAgLTIzLDggKzIzLDggQEAKICNkZWZpbmUgQ0xPTkVfQ0hJTERfU0VUVElECTB4MDEwMDAwMDAJLyogc2V0IHRoZSBUSUQgaW4gdGhlIGNoaWxkICovCiAvKiAweDAyMDAwMDAwIHdhcyBwcmV2aW91c2x5IHRoZSB1bnVzZWQgQ0xPTkVfU1RPUFBFRCAoU3RhcnQgaW4gc3RvcHBlZCBzdGF0ZSkKICAgIGFuZCBpcyBub3cgYXZhaWxhYmxlIGZvciByZS11c2UuICovCi0jZGVmaW5lIENMT05FX05FV1VUUwkJMHgwNDAwMDAwMAkvKiBOZXcgdXRzbmFtZSBncm91cD8gKi8KLSNkZWZpbmUgQ0xPTkVfTkVXSVBDCQkweDA4MDAwMDAwCS8qIE5ldyBpcGNzICovCisjZGVmaW5lIENMT05FX05FV1VUUwkJMHgwNDAwMDAwMAkvKiBOZXcgdXRzbmFtZSBuYW1lc3BhY2UgKi8KKyNkZWZpbmUgQ0xPTkVfTkVXSVBDCQkweDA4MDAwMDAwCS8qIE5ldyBpcGMgbmFtZXNwYWNlICovCiAjZGVmaW5lIENMT05FX05FV1VTRVIJCTB4MTAwMDAwMDAJLyogTmV3IHVzZXIgbmFtZXNwYWNlICovCiAjZGVmaW5lIENMT05FX05FV1BJRAkJMHgyMDAwMDAwMAkvKiBOZXcgcGlkIG5hbWVzcGFjZSAqLwogI2RlZmluZSBDTE9ORV9ORVdORVQJCTB4NDAwMDAwMDAJLyogTmV3IG5ldHdvcmsgbmFtZXNwYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvc291bmQvYXNvdW5kLmggYi9pbmNsdWRlL3VhcGkvc291bmQvYXNvdW5kLmgKaW5kZXggNmVlNTg2Ny4uOTQxZDMyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL3NvdW5kL2Fzb3VuZC5oCisrKyBiL2luY2x1ZGUvdWFwaS9zb3VuZC9hc291bmQuaApAQCAtMjIwLDcgKzIyMCw5IEBACiAjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfRFNEX1U4CQkoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDgpIC8qIERTRCwgMS1ieXRlIHNhbXBsZXMgRFNEICh4OCkgKi8KICNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9EU0RfVTE2X0xFCSgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0OSkgLyogRFNELCAyLWJ5dGUgc2FtcGxlcyBEU0QgKHgxNiksIGxpdHRsZSBlbmRpYW4gKi8KICNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9EU0RfVTMyX0xFCSgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA1MCkgLyogRFNELCA0LWJ5dGUgc2FtcGxlcyBEU0QgKHgzMiksIGxpdHRsZSBlbmRpYW4gKi8KLSNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9MQVNUCQlTTkRSVl9QQ01fRk9STUFUX0RTRF9VMzJfTEUKKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9EU0RfVTE2X0JFCSgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA1MSkgLyogRFNELCAyLWJ5dGUgc2FtcGxlcyBEU0QgKHgxNiksIGJpZyBlbmRpYW4gKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9EU0RfVTMyX0JFCSgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA1MikgLyogRFNELCA0LWJ5dGUgc2FtcGxlcyBEU0QgKHgzMiksIGJpZyBlbmRpYW4gKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9MQVNUCQlTTkRSVl9QQ01fRk9STUFUX0RTRF9VMzJfQkUKIAogI2lmZGVmIFNORFJWX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9TMTYJCVNORFJWX1BDTV9GT1JNQVRfUzE2X0xFCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggMjA4MWE0ZC4uOTAzNTA1ZSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJICB0aG91c2FuZHMgb2YgQ1BVcy4gIEl0IGFsc28gc2NhbGVzIGRvd24gbmljZWx5IHRvCiAJICBzbWFsbGVyIHN5c3RlbXMuCiAKLWNvbmZpZyBUUkVFX1BSRUVNUFRfUkNVCitjb25maWcgUFJFRU1QVF9SQ1UKIAlib29sICJQcmVlbXB0aWJsZSB0cmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UiCiAJZGVwZW5kcyBvbiBQUkVFTVBUCiAJc2VsZWN0IElSUV9XT1JLCkBAIC01MDEsMTIgKzUwMSw2IEBACiAKIGVuZGNob2ljZQogCi1jb25maWcgUFJFRU1QVF9SQ1UKLQlkZWZfYm9vbCBUUkVFX1BSRUVNUFRfUkNVCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBwcmVlbXB0aWJsZS1SQ1UgY29kZSB0aGF0IGlzIGNvbW1vbiBiZXR3ZWVuCi0JICBUUkVFX1BSRUVNUFRfUkNVIGFuZCwgaW4gdGhlIG9sZCBkYXlzLCBUSU5ZX1BSRUVNUFRfUkNVLgotCiBjb25maWcgVEFTS1NfUkNVCiAJYm9vbCAiVGFza19iYXNlZCBSQ1UgaW1wbGVtZW50YXRpb24gdXNpbmcgdm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoIgogCWRlZmF1bHQgbgpAQCAtNTE4LDcgKzUxMiw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgUkNVX1NUQUxMX0NPTU1PTgotCWRlZl9ib29sICggVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVSB8fCBSQ1VfVFJBQ0UgKQorCWRlZl9ib29sICggVFJFRV9SQ1UgfHwgUFJFRU1QVF9SQ1UgfHwgUkNVX1RSQUNFICkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIFJDVSBDUFUgc3RhbGwgY29kZSB0aGF0IGlzIGNvbW1vbiBiZXR3ZWVuCiAJICB0aGUgVElOWSBhbmQgVFJFRSB2YXJpYW50cyBvZiBSQ1UuICBUaGUgcHVycG9zZSBpcyB0byBhbGxvdwpAQCAtNTc2LDcgKzU3MCw3IEBACiAJaW50ICJUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlIgogCXJhbmdlIDIgNjQgaWYgNjRCSVQKIAlyYW5nZSAyIDMyIGlmICE2NEJJVAotCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQorCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgUFJFRU1QVF9SQ1UKIAlkZWZhdWx0IDY0IGlmIDY0QklUCiAJZGVmYXVsdCAzMiBpZiAhNjRCSVQKIAloZWxwCkBAIC01OTYsNyArNTkwLDcgQEAKIAlpbnQgIlRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBsZWFmLWxldmVsIGZhbm91dCB2YWx1ZSIKIAlyYW5nZSAyIFJDVV9GQU5PVVQgaWYgNjRCSVQKIAlyYW5nZSAyIFJDVV9GQU5PVVQgaWYgITY0QklUCi0JZGVwZW5kcyBvbiBUUkVFX1JDVSB8fCBUUkVFX1BSRUVNUFRfUkNVCisJZGVwZW5kcyBvbiBUUkVFX1JDVSB8fCBQUkVFTVBUX1JDVQogCWRlZmF1bHQgMTYKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBjb250cm9scyB0aGUgbGVhZi1sZXZlbCBmYW5vdXQgb2YgaGllcmFyY2hpY2FsCkBAIC02MjEsNyArNjE1LDcgQEAKIAogY29uZmlnIFJDVV9GQU5PVVRfRVhBQ1QKIAlib29sICJEaXNhYmxlIHRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBhdXRvLWJhbGFuY2luZyIKLQlkZXBlbmRzIG9uIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UKKwlkZXBlbmRzIG9uIFRSRUVfUkNVIHx8IFBSRUVNUFRfUkNVCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZm9yY2VzIHVzZSBvZiB0aGUgZXhhY3QgUkNVX0ZBTk9VVCB2YWx1ZSBzcGVjaWZpZWQsCkBAIC02NTIsMTEgKzY0NiwxMSBAQAogCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKIGNvbmZpZyBUUkVFX1JDVV9UUkFDRQotCWRlZl9ib29sIFJDVV9UUkFDRSAmJiAoIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UgKQorCWRlZl9ib29sIFJDVV9UUkFDRSAmJiAoIFRSRUVfUkNVIHx8IFBSRUVNUFRfUkNVICkKIAlzZWxlY3QgREVCVUdfRlMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwcm92aWRlcyB0cmFjaW5nIGZvciB0aGUgVFJFRV9SQ1UgYW5kCi0JICBUUkVFX1BSRUVNUFRfUkNVIGltcGxlbWVudGF0aW9ucywgcGVybWl0dGluZyBNYWtlZmlsZSB0bworCSAgUFJFRU1QVF9SQ1UgaW1wbGVtZW50YXRpb25zLCBwZXJtaXR0aW5nIE1ha2VmaWxlIHRvCiAJICB0cml2aWFsbHkgc2VsZWN0IGtlcm5lbC9yY3V0cmVlX3RyYWNlLmMuCiAKIGNvbmZpZyBSQ1VfQk9PU1QKQEAgLTY3MiwzMCArNjY2LDMxIEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgd29ya2luZyB3aXRoIHJlYWwtdGltZSBhcHBzIG9yIGhlYXZ5IGxvYWRzCiAJICBTYXkgTiBoZXJlIGlmIHlvdSBhcmUgdW5zdXJlLgogCi1jb25maWcgUkNVX0JPT1NUX1BSSU8KLQlpbnQgIlJlYWwtdGltZSBwcmlvcml0eSB0byBib29zdCBSQ1UgcmVhZGVycyB0byIKK2NvbmZpZyBSQ1VfS1RIUkVBRF9QUklPCisJaW50ICJSZWFsLXRpbWUgcHJpb3JpdHkgdG8gdXNlIGZvciBSQ1Ugd29ya2VyIHRocmVhZHMiCiAJcmFuZ2UgMSA5OQogCWRlcGVuZHMgb24gUkNVX0JPT1NUCiAJZGVmYXVsdCAxCiAJaGVscAotCSAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSByZWFsLXRpbWUgcHJpb3JpdHkgdG8gd2hpY2ggbG9uZy10ZXJtCi0JICBwcmVlbXB0ZWQgUkNVIHJlYWRlcnMgYXJlIHRvIGJlIGJvb3N0ZWQuICBJZiB5b3UgYXJlIHdvcmtpbmcKLQkgIHdpdGggYSByZWFsLXRpbWUgYXBwbGljYXRpb24gdGhhdCBoYXMgb25lIG9yIG1vcmUgQ1BVLWJvdW5kCi0JICB0aHJlYWRzIHJ1bm5pbmcgYXQgYSByZWFsLXRpbWUgcHJpb3JpdHkgbGV2ZWwsIHlvdSBzaG91bGQgc2V0Ci0JICBSQ1VfQk9PU1RfUFJJTyB0byBhIHByaW9yaXR5IGhpZ2hlciB0aGVuIHRoZSBoaWdoZXN0LXByaW9yaXR5Ci0JICByZWFsLXRpbWUgQ1BVLWJvdW5kIHRocmVhZC4gIFRoZSBkZWZhdWx0IFJDVV9CT09TVF9QUklPIHZhbHVlCi0JICBvZiAxIGlzIGFwcHJvcHJpYXRlIGluIHRoZSBjb21tb24gY2FzZSwgd2hpY2ggaXMgcmVhbC10aW1lCisJICBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIFNDSEVEX0ZJRk8gcHJpb3JpdHkgdmFsdWUgdGhhdCB3aWxsIGJlCisJICBhc3NpZ25lZCB0byB0aGUgcmN1Yy9uIGFuZCByY3ViL24gdGhyZWFkcyBhbmQgaXMgYWxzbyB0aGUgdmFsdWUKKwkgIHVzZWQgZm9yIFJDVV9CT09TVCAoaWYgZW5hYmxlZCkuIElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGEKKwkgIHJlYWwtdGltZSBhcHBsaWNhdGlvbiB0aGF0IGhhcyBvbmUgb3IgbW9yZSBDUFUtYm91bmQgdGhyZWFkcworCSAgcnVubmluZyBhdCBhIHJlYWwtdGltZSBwcmlvcml0eSBsZXZlbCwgeW91IHNob3VsZCBzZXQKKwkgIFJDVV9LVEhSRUFEX1BSSU8gdG8gYSBwcmlvcml0eSBoaWdoZXIgdGhhbiB0aGUgaGlnaGVzdC1wcmlvcml0eQorCSAgcmVhbC10aW1lIENQVS1ib3VuZCBhcHBsaWNhdGlvbiB0aHJlYWQuICBUaGUgZGVmYXVsdCBSQ1VfS1RIUkVBRF9QUklPCisJICB2YWx1ZSBvZiAxIGlzIGFwcHJvcHJpYXRlIGluIHRoZSBjb21tb24gY2FzZSwgd2hpY2ggaXMgcmVhbC10aW1lCiAJICBhcHBsaWNhdGlvbnMgdGhhdCBkbyBub3QgaGF2ZSBhbnkgQ1BVLWJvdW5kIHRocmVhZHMuCiAKIAkgIFNvbWUgcmVhbC10aW1lIGFwcGxpY2F0aW9ucyBtaWdodCBub3QgaGF2ZSBhIHNpbmdsZSByZWFsLXRpbWUKIAkgIHRocmVhZCB0aGF0IHNhdHVyYXRlcyBhIGdpdmVuIENQVSwgYnV0IGluc3RlYWQgbWlnaHQgaGF2ZQogCSAgbXVsdGlwbGUgcmVhbC10aW1lIHRocmVhZHMgdGhhdCwgdGFrZW4gdG9nZXRoZXIsIGZ1bGx5IHV0aWxpemUKLQkgIHRoYXQgQ1BVLiAgSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHNldCBSQ1VfQk9PU1RfUFJJTyB0bworCSAgdGhhdCBDUFUuICBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgc2V0IFJDVV9LVEhSRUFEX1BSSU8gdG8KIAkgIGEgcHJpb3JpdHkgaGlnaGVyIHRoYW4gdGhlIGxvd2VzdC1wcmlvcml0eSB0aHJlYWQgdGhhdCBpcwogCSAgY29uc3BpcmluZyB0byBwcmV2ZW50IHRoZSBDUFUgZnJvbSBydW5uaW5nIGFueSBub24tcmVhbC10aW1lCiAJICB0YXNrcy4gIEZvciBleGFtcGxlLCBpZiBvbmUgdGhyZWFkIGF0IHByaW9yaXR5IDEwIGFuZCBhbm90aGVyCiAJICB0aHJlYWQgYXQgcHJpb3JpdHkgNSBhcmUgYmV0d2VlbiB0aGVtc2VsdmVzIGZ1bGx5IGNvbnN1bWluZwotCSAgdGhlIENQVSB0aW1lIG9uIGEgZ2l2ZW4gQ1BVLCB0aGVuIFJDVV9CT09TVF9QUklPIHNob3VsZCBiZQorCSAgdGhlIENQVSB0aW1lIG9uIGEgZ2l2ZW4gQ1BVLCB0aGVuIFJDVV9LVEhSRUFEX1BSSU8gc2hvdWxkIGJlCiAJICBzZXQgdG8gcHJpb3JpdHkgNiBvciBoaWdoZXIuCiAKIAkgIFNwZWNpZnkgdGhlIHJlYWwtdGltZSBwcmlvcml0eSwgb3IgdGFrZSB0aGUgZGVmYXVsdCBpZiB1bnN1cmUuCkBAIC03MTUsNyArNzEwLDcgQEAKIAogY29uZmlnIFJDVV9OT0NCX0NQVQogCWJvb2wgIk9mZmxvYWQgUkNVIGNhbGxiYWNrIHByb2Nlc3NpbmcgZnJvbSBib290LXNlbGVjdGVkIENQVXMiCi0JZGVwZW5kcyBvbiBUUkVFX1JDVSB8fCBUUkVFX1BSRUVNUFRfUkNVCisJZGVwZW5kcyBvbiBUUkVFX1JDVSB8fCBQUkVFTVBUX1JDVQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFVzZSB0aGlzIG9wdGlvbiB0byByZWR1Y2UgT1Mgaml0dGVyIGZvciBhZ2dyZXNzaXZlIEhQQyBvcgpAQCAtNzM5LDYgKzczNCw3IEBACiBjaG9pY2UKIAlwcm9tcHQgIkJ1aWxkLWZvcmNlZCBuby1DQnMgQ1BVcyIKIAlkZWZhdWx0IFJDVV9OT0NCX0NQVV9OT05FCisJZGVwZW5kcyBvbiBSQ1VfTk9DQl9DUFUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhbGxvd3Mgbm8tQ0JzIENQVXMgKHdob3NlIFJDVSBjYWxsYmFja3MgYXJlIGludm9rZWQKIAkgIGZyb20ga3RocmVhZHMgcmF0aGVyIHRoYW4gZnJvbSBzb2Z0aXJxIGNvbnRleHQpIHRvIGJlIHNwZWNpZmllZApAQCAtNzQ3LDcgKzc0Myw2IEBACiAKIGNvbmZpZyBSQ1VfTk9DQl9DUFVfTk9ORQogCWJvb2wgIk5vIGJ1aWxkX2ZvcmNlZCBuby1DQnMgQ1BVcyIKLQlkZXBlbmRzIG9uIFJDVV9OT0NCX0NQVQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGRvZXMgbm90IGZvcmNlIGFueSBvZiB0aGUgQ1BVcyB0byBiZSBuby1DQnMgQ1BVcy4KIAkgIE9ubHkgQ1BVcyBkZXNpZ25hdGVkIGJ5IHRoZSByY3Vfbm9jYnM9IGJvb3QgcGFyYW1ldGVyIHdpbGwgYmUKQEAgLTc2MSw3ICs3NTYsNiBAQAogCiBjb25maWcgUkNVX05PQ0JfQ1BVX1pFUk8KIAlib29sICJDUFUgMCBpcyBhIGJ1aWxkX2ZvcmNlZCBuby1DQnMgQ1BVIgotCWRlcGVuZHMgb24gUkNVX05PQ0JfQ1BVCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZm9yY2VzIENQVSAwIHRvIGJlIGEgbm8tQ0JzIENQVSwgc28gdGhhdCBpdHMgUkNVCiAJICBjYWxsYmFja3MgYXJlIGludm9rZWQgYnkgYSBwZXItQ1BVIGt0aHJlYWQgd2hvc2UgbmFtZSBiZWdpbnMKQEAgLTc3Niw3ICs3NzAsNiBAQAogCiBjb25maWcgUkNVX05PQ0JfQ1BVX0FMTAogCWJvb2wgIkFsbCBDUFVzIGFyZSBidWlsZF9mb3JjZWQgbm8tQ0JzIENQVXMiCi0JZGVwZW5kcyBvbiBSQ1VfTk9DQl9DUFUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBmb3JjZXMgYWxsIENQVXMgdG8gYmUgbm8tQ0JzIENQVXMuICBUaGUgcmN1X25vY2JzPQogCSAgYm9vdCBwYXJhbWV0ZXIgd2lsbCBiZSBpZ25vcmVkLiAgQWxsIENQVXMnIFJDVSBjYWxsYmFja3Mgd2lsbApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA4MDBhMGRhLi4zMjFkMGNlIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJCQkJICBzdGF0aWNfY29tbWFuZF9saW5lLCBfX3N0YXJ0X19fcGFyYW0sCiAJCQkJICBfX3N0b3BfX19wYXJhbSAtIF9fc3RhcnRfX19wYXJhbSwKIAkJCQkgIC0xLCAtMSwgJnVua25vd25fYm9vdG9wdGlvbik7Ci0JaWYgKGFmdGVyX2Rhc2hlcykKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKGFmdGVyX2Rhc2hlcykpCiAJCXBhcnNlX2FyZ3MoIlNldHRpbmcgaW5pdCBhcmdzIiwgYWZ0ZXJfZGFzaGVzLCBOVUxMLCAwLCAtMSwgLTEsCiAJCQkgICBzZXRfaW5pdF9hcmcpOwogCmRpZmYgLS1naXQgYS9pcGMvc2VtLmMgYi9pcGMvc2VtLmMKaW5kZXggNDU0ZjZjNi4uNTNjMzMxMCAxMDA2NDQKLS0tIGEvaXBjL3NlbS5jCisrKyBiL2lwYy9zZW0uYwpAQCAtNTA3LDEzICs1MDcsNiBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWlkID0gaXBjX2FkZGlkKCZzZW1faWRzKG5zKSwgJnNtYS0+c2VtX3Blcm0sIG5zLT5zY19zZW1tbmkpOwotCWlmIChpZCA8IDApIHsKLQkJaXBjX3JjdV9wdXRyZWYoc21hLCBzZW1fcmN1X2ZyZWUpOwotCQlyZXR1cm4gaWQ7Ci0JfQotCW5zLT51c2VkX3NlbXMgKz0gbnNlbXM7Ci0KIAlzbWEtPnNlbV9iYXNlID0gKHN0cnVjdCBzZW0gKikgJnNtYVsxXTsKIAogCWZvciAoaSA9IDA7IGkgPCBuc2VtczsgaSsrKSB7CkBAIC01MjgsNiArNTIxLDE0IEBACiAJSU5JVF9MSVNUX0hFQUQoJnNtYS0+bGlzdF9pZCk7CiAJc21hLT5zZW1fbnNlbXMgPSBuc2VtczsKIAlzbWEtPnNlbV9jdGltZSA9IGdldF9zZWNvbmRzKCk7CisKKwlpZCA9IGlwY19hZGRpZCgmc2VtX2lkcyhucyksICZzbWEtPnNlbV9wZXJtLCBucy0+c2Nfc2VtbW5pKTsKKwlpZiAoaWQgPCAwKSB7CisJCWlwY19yY3VfcHV0cmVmKHNtYSwgc2VtX3JjdV9mcmVlKTsKKwkJcmV0dXJuIGlkOworCX0KKwlucy0+dXNlZF9zZW1zICs9IG5zZW1zOworCiAJc2VtX3VubG9jayhzbWEsIC0xKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCA4MDk4M2RmLi4xZjM3ZjE1MSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTQ5OSw3ICs0OTksNiBAQAogCXNldF9mcmVlemFibGUoKTsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAogCQlmbHVzaF9ob2xkX3F1ZXVlKCk7CiAKQEAgLTUxNCwxNiArNTEzLDggQEAKIAkJCQlhdWRpdF9wcmludGtfc2tiKHNrYik7CiAJCQljb250aW51ZTsKIAkJfQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlhZGRfd2FpdF9xdWV1ZSgma2F1ZGl0ZF93YWl0LCAmd2FpdCk7CiAKLQkJaWYgKCFza2JfcXVldWVfbGVuKCZhdWRpdF9za2JfcXVldWUpKSB7Ci0JCQl0cnlfdG9fZnJlZXplKCk7Ci0JCQlzY2hlZHVsZSgpOwotCQl9Ci0KLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQlyZW1vdmVfd2FpdF9xdWV1ZSgma2F1ZGl0ZF93YWl0LCAmd2FpdCk7CisJCXdhaXRfZXZlbnRfZnJlZXphYmxlKGthdWRpdGRfd2FpdCwgc2tiX3F1ZXVlX2xlbigmYXVkaXRfc2tiX3F1ZXVlKSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzM5LDcgKzczMCw3IEBACiAKIAlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9GRUFUVVJFX0NIQU5HRSk7CiAJYXVkaXRfbG9nX3Rhc2tfaW5mbyhhYiwgY3VycmVudCk7Ci0JYXVkaXRfbG9nX2Zvcm1hdChhYiwgImZlYXR1cmU9JXMgb2xkPSV1IG5ldz0ldSBvbGRfbG9jaz0ldSBuZXdfbG9jaz0ldSByZXM9JWQiLAorCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgZmVhdHVyZT0lcyBvbGQ9JXUgbmV3PSV1IG9sZF9sb2NrPSV1IG5ld19sb2NrPSV1IHJlcz0lZCIsCiAJCQkgYXVkaXRfZmVhdHVyZV9uYW1lc1t3aGljaF0sICEhb2xkX2ZlYXR1cmUsICEhbmV3X2ZlYXR1cmUsCiAJCQkgISFvbGRfbG9jaywgISFuZXdfbG9jaywgcmVzKTsKIAlhdWRpdF9sb2dfZW5kKGFiKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdF90cmVlLmMgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCmluZGV4IGUyNDJlM2EuLjgwZjI5ZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdF90cmVlLmMKKysrIGIva2VybmVsL2F1ZGl0X3RyZWUuYwpAQCAtMTU0LDYgKzE1NCw3IEBACiAJCWNodW5rLT5vd25lcnNbaV0uaW5kZXggPSBpOwogCX0KIAlmc25vdGlmeV9pbml0X21hcmsoJmNodW5rLT5tYXJrLCBhdWRpdF90cmVlX2Rlc3Ryb3lfd2F0Y2gpOworCWNodW5rLT5tYXJrLm1hc2sgPSBGU19JTl9JR05PUkVEOwogCXJldHVybiBjaHVuazsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDkwYTNkMDEuLjVkMjIwMjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTg2LDYgKzg2LDE2IEBACiAjZGVmaW5lIGNwdWhwX2xvY2tfYWNxdWlyZSgpICAgICAgbG9ja19tYXBfYWNxdWlyZSgmY3B1X2hvdHBsdWcuZGVwX21hcCkKICNkZWZpbmUgY3B1aHBfbG9ja19yZWxlYXNlKCkgICAgICBsb2NrX21hcF9yZWxlYXNlKCZjcHVfaG90cGx1Zy5kZXBfbWFwKQogCitzdGF0aWMgdm9pZCBhcHBseV9wdXRzX3BlbmRpbmcoaW50IG1heCkKK3sKKwlpbnQgZGVsdGE7CisKKwlpZiAoYXRvbWljX3JlYWQoJmNwdV9ob3RwbHVnLnB1dHNfcGVuZGluZykgPj0gbWF4KSB7CisJCWRlbHRhID0gYXRvbWljX3hjaGcoJmNwdV9ob3RwbHVnLnB1dHNfcGVuZGluZywgMCk7CisJCWNwdV9ob3RwbHVnLnJlZmNvdW50IC09IGRlbHRhOworCX0KK30KKwogdm9pZCBnZXRfb25saW5lX2NwdXModm9pZCkKIHsKIAltaWdodF9zbGVlcCgpOwpAQCAtOTMsNiArMTAzLDcgQEAKIAkJcmV0dXJuOwogCWNwdWhwX2xvY2tfYWNxdWlyZV9yZWFkKCk7CiAJbXV0ZXhfbG9jaygmY3B1X2hvdHBsdWcubG9jayk7CisJYXBwbHlfcHV0c19wZW5kaW5nKDY1NTM2KTsKIAljcHVfaG90cGx1Zy5yZWZjb3VudCsrOwogCW11dGV4X3VubG9jaygmY3B1X2hvdHBsdWcubG9jayk7CiB9CkBAIC0xMDUsNiArMTE2LDcgQEAKIAlpZiAoIW11dGV4X3RyeWxvY2soJmNwdV9ob3RwbHVnLmxvY2spKQogCQlyZXR1cm4gZmFsc2U7CiAJY3B1aHBfbG9ja19hY3F1aXJlX3RyeXJlYWQoKTsKKwlhcHBseV9wdXRzX3BlbmRpbmcoNjU1MzYpOwogCWNwdV9ob3RwbHVnLnJlZmNvdW50Kys7CiAJbXV0ZXhfdW5sb2NrKCZjcHVfaG90cGx1Zy5sb2NrKTsKIAlyZXR1cm4gdHJ1ZTsKQEAgLTE2MSwxMiArMTczLDcgQEAKIAljcHVocF9sb2NrX2FjcXVpcmUoKTsKIAlmb3IgKDs7KSB7CiAJCW11dGV4X2xvY2soJmNwdV9ob3RwbHVnLmxvY2spOwotCQlpZiAoYXRvbWljX3JlYWQoJmNwdV9ob3RwbHVnLnB1dHNfcGVuZGluZykpIHsKLQkJCWludCBkZWx0YTsKLQotCQkJZGVsdGEgPSBhdG9taWNfeGNoZygmY3B1X2hvdHBsdWcucHV0c19wZW5kaW5nLCAwKTsKLQkJCWNwdV9ob3RwbHVnLnJlZmNvdW50IC09IGRlbHRhOwotCQl9CisJCWFwcGx5X3B1dHNfcGVuZGluZygxKTsKIAkJaWYgKGxpa2VseSghY3B1X2hvdHBsdWcucmVmY291bnQpKQogCQkJYnJlYWs7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdXNldC5jIGIva2VybmVsL2NwdXNldC5jCmluZGV4IDFmMTA3YzcuLjcyM2NmYzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHVzZXQuYworKysgYi9rZXJuZWwvY3B1c2V0LmMKQEAgLTUwNiw2ICs1MDYsMTYgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAorCS8qCisJICogV2UgY2FuJ3Qgc2hyaW5rIGlmIHdlIHdvbid0IGhhdmUgZW5vdWdoIHJvb20gZm9yIFNDSEVEX0RFQURMSU5FCisJICogdGFza3MuCisJICovCisJcmV0ID0gLUVCVVNZOworCWlmIChpc19jcHVfZXhjbHVzaXZlKGN1cikgJiYKKwkgICAgIWNwdXNldF9jcHVtYXNrX2Nhbl9zaHJpbmsoY3VyLT5jcHVzX2FsbG93ZWQsCisJCQkJICAgICAgIHRyaWFsLT5jcHVzX2FsbG93ZWQpKQorCQlnb3RvIG91dDsKKwogCXJldCA9IDA7CiBvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xNDI5LDE3ICsxNDM5LDggQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgdHNldCkgewotCQkvKgotCQkgKiBLdGhyZWFkcyB3aGljaCBkaXNhbGxvdyBzZXRhZmZpbml0eSBzaG91bGRuJ3QgYmUgbW92ZWQKLQkJICogdG8gYSBuZXcgY3B1c2V0OyB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGVpciBjcHUKLQkJICogYWZmaW5pdHkgYW5kIGlzb2xhdGluZyBzdWNoIHRocmVhZHMgYnkgdGhlaXIgc2V0IG9mCi0JCSAqIGFsbG93ZWQgbm9kZXMgaXMgdW5uZWNlc3NhcnkuICBUaHVzLCBjcHVzZXRzIGFyZSBub3QKLQkJICogYXBwbGljYWJsZSBmb3Igc3VjaCB0aHJlYWRzLiAgVGhpcyBwcmV2ZW50cyBjaGVja2luZyBmb3IKLQkJICogc3VjY2VzcyBvZiBzZXRfY3B1c19hbGxvd2VkX3B0cigpIG9uIGFsbCBhdHRhY2hlZCB0YXNrcwotCQkgKiBiZWZvcmUgY3B1c19hbGxvd2VkIG1heSBiZSBjaGFuZ2VkLgotCQkgKi8KLQkJcmV0ID0gLUVJTlZBTDsKLQkJaWYgKHRhc2stPmZsYWdzICYgUEZfTk9fU0VUQUZGSU5JVFkpCisJCXJldCA9IHRhc2tfY2FuX2F0dGFjaCh0YXNrLCBjcy0+Y3B1c19hbGxvd2VkKTsKKwkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJcmV0ID0gc2VjdXJpdHlfdGFza19zZXRzY2hlZHVsZXIodGFzayk7CiAJCWlmIChyZXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IDJiMDJjOWYuLjNlMTlkM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCisrKyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC0xNTYyLDggKzE1NjIsMTAgQEAKIAogCWlmICghdGFzaykgewogCQkvKgotCQkgKiBQZXIgY3B1IGV2ZW50cyBhcmUgcmVtb3ZlZCB2aWEgYW4gc21wIGNhbGwgYW5kCi0JCSAqIHRoZSByZW1vdmFsIGlzIGFsd2F5cyBzdWNjZXNzZnVsLgorCQkgKiBQZXIgY3B1IGV2ZW50cyBhcmUgcmVtb3ZlZCB2aWEgYW4gc21wIGNhbGwuIFRoZSByZW1vdmFsIGNhbgorCQkgKiBmYWlsIGlmIHRoZSBDUFUgaXMgY3VycmVudGx5IG9mZmxpbmUsIGJ1dCBpbiB0aGF0IGNhc2Ugd2UKKwkJICogYWxyZWFkeSBjYWxsZWQgX19wZXJmX3JlbW92ZV9mcm9tX2NvbnRleHQgZnJvbQorCQkgKiBwZXJmX2V2ZW50X2V4aXRfY3B1LgogCQkgKi8KIAkJY3B1X2Z1bmN0aW9uX2NhbGwoZXZlbnQtPmNwdSwgX19wZXJmX3JlbW92ZV9mcm9tX2NvbnRleHQsICZyZSk7CiAJCXJldHVybjsKQEAgLTQ0NTgsNyArNDQ2MCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBwZXJmX3NhbXBsZV9yZWdzX3VzZXIoc3RydWN0IHBlcmZfcmVnc191c2VyICpyZWdzX3VzZXIsCitzdGF0aWMgdm9pZCBwZXJmX3NhbXBsZV9yZWdzX3VzZXIoc3RydWN0IHBlcmZfcmVncyAqcmVnc191c2VyLAogCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaWYgKCF1c2VyX21vZGUocmVncykpIHsKQEAgLTQ0NjksMTEgKzQ0NzEsMjIgQEAKIAl9CiAKIAlpZiAocmVncykgewotCQlyZWdzX3VzZXItPnJlZ3MgPSByZWdzOwogCQlyZWdzX3VzZXItPmFiaSAgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7CisJCXJlZ3NfdXNlci0+cmVncyA9IHJlZ3M7CisJfSBlbHNlIHsKKwkJcmVnc191c2VyLT5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FOworCQlyZWdzX3VzZXItPnJlZ3MgPSBOVUxMOwogCX0KIH0KIAorc3RhdGljIHZvaWQgcGVyZl9zYW1wbGVfcmVnc19pbnRyKHN0cnVjdCBwZXJmX3JlZ3MgKnJlZ3NfaW50ciwKKwkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ3NfaW50ci0+cmVncyA9IHJlZ3M7CisJcmVnc19pbnRyLT5hYmkgID0gcGVyZl9yZWdfYWJpKGN1cnJlbnQpOworfQorCisKIC8qCiAgKiBHZXQgcmVtYWluaW5nIHRhc2sgc2l6ZSBmcm9tIHVzZXIgc3RhY2sgcG9pbnRlci4KICAqCkBAIC00ODU1LDYgKzQ4NjgsMjMgQEAKIAlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9UUkFOU0FDVElPTikKIAkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+dHhuKTsKIAorCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikgeworCQl1NjQgYWJpID0gZGF0YS0+cmVnc19pbnRyLmFiaTsKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIG5vIHJlZ3MgdG8gZHVtcCwgbm90aWNlIGl0IHRocm91Z2gKKwkJICogZmlyc3QgdTY0IGJlaW5nIHplcm8gKFBFUkZfU0FNUExFX1JFR1NfQUJJX05PTkUpLgorCQkgKi8KKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgYWJpKTsKKworCQlpZiAoYWJpKSB7CisJCQl1NjQgbWFzayA9IGV2ZW50LT5hdHRyLnNhbXBsZV9yZWdzX2ludHI7CisKKwkJCXBlcmZfb3V0cHV0X3NhbXBsZV9yZWdzKGhhbmRsZSwKKwkJCQkJCWRhdGEtPnJlZ3NfaW50ci5yZWdzLAorCQkJCQkJbWFzayk7CisJCX0KKwl9CisKIAlpZiAoIWV2ZW50LT5hdHRyLndhdGVybWFyaykgewogCQlpbnQgd2FrZXVwX2V2ZW50cyA9IGV2ZW50LT5hdHRyLndha2V1cF9ldmVudHM7CiAKQEAgLTQ5MjAsMTIgKzQ5NTAsMTMgQEAKIAkJaGVhZGVyLT5zaXplICs9IHNpemU7CiAJfQogCisJaWYgKHNhbXBsZV90eXBlICYgKFBFUkZfU0FNUExFX1JFR1NfVVNFUiB8IFBFUkZfU0FNUExFX1NUQUNLX1VTRVIpKQorCQlwZXJmX3NhbXBsZV9yZWdzX3VzZXIoJmRhdGEtPnJlZ3NfdXNlciwgcmVncyk7CisKIAlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX1VTRVIpIHsKIAkJLyogcmVncyBkdW1wIEFCSSBpbmZvICovCiAJCWludCBzaXplID0gc2l6ZW9mKHU2NCk7CiAKLQkJcGVyZl9zYW1wbGVfcmVnc191c2VyKCZkYXRhLT5yZWdzX3VzZXIsIHJlZ3MpOwotCiAJCWlmIChkYXRhLT5yZWdzX3VzZXIucmVncykgewogCQkJdTY0IG1hc2sgPSBldmVudC0+YXR0ci5zYW1wbGVfcmVnc191c2VyOwogCQkJc2l6ZSArPSBod2VpZ2h0NjQobWFzaykgKiBzaXplb2YodTY0KTsKQEAgLTQ5NDEsMTUgKzQ5NzIsMTEgQEAKIAkJICogaW4gY2FzZSBuZXcgc2FtcGxlIHR5cGUgaXMgYWRkZWQsIGJlY2F1c2Ugd2UgY291bGQgZWF0CiAJCSAqIHVwIHRoZSByZXN0IG9mIHRoZSBzYW1wbGUgc2l6ZS4KIAkJICovCi0JCXN0cnVjdCBwZXJmX3JlZ3NfdXNlciAqdXJlZ3MgPSAmZGF0YS0+cmVnc191c2VyOwogCQl1MTYgc3RhY2tfc2l6ZSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9zdGFja191c2VyOwogCQl1MTYgc2l6ZSA9IHNpemVvZih1NjQpOwogCi0JCWlmICghdXJlZ3MtPmFiaSkKLQkJCXBlcmZfc2FtcGxlX3JlZ3NfdXNlcih1cmVncywgcmVncyk7Ci0KIAkJc3RhY2tfc2l6ZSA9IHBlcmZfc2FtcGxlX3VzdGFja19zaXplKHN0YWNrX3NpemUsIGhlYWRlci0+c2l6ZSwKLQkJCQkJCSAgICAgdXJlZ3MtPnJlZ3MpOworCQkJCQkJICAgICBkYXRhLT5yZWdzX3VzZXIucmVncyk7CiAKIAkJLyoKIAkJICogSWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGR1bXAsIGFkZCBzcGFjZSBmb3IgdGhlIGR1bXAKQEAgLTQ5NjIsNiArNDk4OSwyMSBAQAogCQlkYXRhLT5zdGFja191c2VyX3NpemUgPSBzdGFja19zaXplOwogCQloZWFkZXItPnNpemUgKz0gc2l6ZTsKIAl9CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpIHsKKwkJLyogcmVncyBkdW1wIEFCSSBpbmZvICovCisJCWludCBzaXplID0gc2l6ZW9mKHU2NCk7CisKKwkJcGVyZl9zYW1wbGVfcmVnc19pbnRyKCZkYXRhLT5yZWdzX2ludHIsIHJlZ3MpOworCisJCWlmIChkYXRhLT5yZWdzX2ludHIucmVncykgeworCQkJdTY0IG1hc2sgPSBldmVudC0+YXR0ci5zYW1wbGVfcmVnc19pbnRyOworCisJCQlzaXplICs9IGh3ZWlnaHQ2NChtYXNrKSAqIHNpemVvZih1NjQpOworCQl9CisKKwkJaGVhZGVyLT5zaXplICs9IHNpemU7CisJfQogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCkBAIC03MTQ5LDYgKzcxOTEsOCBAQAogCQkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKKwlpZiAoYXR0ci0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpCisJCXJldCA9IHBlcmZfcmVnX3ZhbGlkYXRlKGF0dHItPnNhbXBsZV9yZWdzX2ludHIpOwogb3V0OgogCXJldHVybiByZXQ7CiAKQEAgLTgxMTcsNyArODE2MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fcGVyZl9ldmVudF9leGl0X2NvbnRleHQodm9pZCAqX19pbmZvKQogewotCXN0cnVjdCByZW1vdmVfZXZlbnQgcmUgPSB7IC5kZXRhY2hfZ3JvdXAgPSBmYWxzZSB9OworCXN0cnVjdCByZW1vdmVfZXZlbnQgcmUgPSB7IC5kZXRhY2hfZ3JvdXAgPSB0cnVlIH07CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gX19pbmZvOwogCiAJcGVyZl9wbXVfcm90YXRlX3N0b3AoY3R4LT5wbXUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy91cHJvYmVzLmMgYi9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYwppbmRleCAxZDBhZjhhLi5lZDhmMmNkIDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYworKysgYi9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYwpAQCAtMTY0MCw3ICsxNjQwLDYgQEAKIAkJaWYgKF9fZmF0YWxfc2lnbmFsX3BlbmRpbmcodCkgfHwgYXJjaF91cHJvYmVfeG9sX3dhc190cmFwcGVkKHQpKSB7CiAJCQl1dGFzay0+c3RhdGUgPSBVVEFTS19TU1RFUF9UUkFQUEVEOwogCQkJc2V0X3Rza190aHJlYWRfZmxhZyh0LCBUSUZfVVBST0JFKTsKLQkJCXNldF90c2tfdGhyZWFkX2ZsYWcodCwgVElGX05PVElGWV9SRVNVTUUpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA1ZDMwMDE5Li4yMzJjNGJjIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTk5Nyw2ICs5OTcsOCBAQAogCiAJCWdldF90YXNrX3N0cnVjdChwKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpOworCiAJCWlmICgoZXhpdF9jb2RlICYgMHg3ZikgPT0gMCkgewogCQkJd2h5ID0gQ0xEX0VYSVRFRDsKIAkJCXN0YXR1cyA9IGV4aXRfY29kZSA+PiA4OwpAQCAtMTA3OSw2ICsxMDgxLDcgQEAKIAkgKiB0aHJlYWQgY2FuIHJlYXAgaXQgYmVjYXVzZSB3ZSBpdHMgc3RhdGUgPT0gREVBRC9UUkFDRS4KIAkgKi8KIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJc2NoZWRfYW5ub3RhdGVfc2xlZXAoKTsKIAogCXJldHZhbCA9IHdvLT53b19ydXNhZ2UKIAkJPyBnZXRydXNhZ2UocCwgUlVTQUdFX0JPVEgsIHdvLT53b19ydXNhZ2UpIDogMDsKQEAgLTEyMTAsNiArMTIxMyw3IEBACiAJcGlkID0gdGFza19waWRfdm5yKHApOwogCXdoeSA9IHB0cmFjZSA/IENMRF9UUkFQUEVEIDogQ0xEX1NUT1BQRUQ7CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXNjaGVkX2Fubm90YXRlX3NsZWVwKCk7CiAKIAlpZiAodW5saWtlbHkod28tPndvX2ZsYWdzICYgV05PV0FJVCkpCiAJCXJldHVybiB3YWl0X25vcmVhcF9jb3B5b3V0KHdvLCBwLCBwaWQsIHVpZCwgd2h5LCBleGl0X2NvZGUpOwpAQCAtMTI3Miw2ICsxMjc2LDcgQEAKIAlwaWQgPSB0YXNrX3BpZF92bnIocCk7CiAJZ2V0X3Rhc2tfc3RydWN0KHApOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpOwogCiAJaWYgKCF3by0+d29faW5mbykgewogCQlyZXR2YWwgPSB3by0+d29fcnVzYWdlCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCA5YjdkNzQ2Li45Y2E4NDE4IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTEwMjIsMTEgKzEwMjIsMTQgQEAKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2lnaGFuZC0+Y291bnQpKSB7CiAJCXNpZ25hbGZkX2NsZWFudXAoc2lnaGFuZCk7CisJCS8qCisJCSAqIHNpZ2hhbmRfY2FjaGVwIGlzIFNMQUJfREVTVFJPWV9CWV9SQ1Ugc28gd2UgY2FuIGZyZWUgaXQKKwkJICogd2l0aG91dCBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzZWUgX19sb2NrX3Rhc2tfc2lnaGFuZCgpLgorCQkgKi8KIAkJa21lbV9jYWNoZV9mcmVlKHNpZ2hhbmRfY2FjaGVwLCBzaWdoYW5kKTsKIAl9CiB9CiAKLQogLyoKICAqIEluaXRpYWxpemUgUE9TSVggdGltZXIgaGFuZGxpbmcgZm9yIGEgdGhyZWFkIGdyb3VwLgogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL0tjb25maWcgYi9rZXJuZWwvaXJxL0tjb25maWcKaW5kZXggMjI1MDg2Yi4uOWE3NmUzYiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9LY29uZmlnCisrKyBiL2tlcm5lbC9pcnEvS2NvbmZpZwpAQCAtNTUsNiArNTUsMjEgQEAKIGNvbmZpZyBJUlFfRE9NQUlOCiAJYm9vbAogCisjIFN1cHBvcnQgZm9yIGhpZXJhcmNoaWNhbCBpcnEgZG9tYWlucworY29uZmlnIElSUV9ET01BSU5fSElFUkFSQ0hZCisJYm9vbAorCXNlbGVjdCBJUlFfRE9NQUlOCisKKyMgR2VuZXJpYyBNU0kgaW50ZXJydXB0IHN1cHBvcnQKK2NvbmZpZyBHRU5FUklDX01TSV9JUlEKKwlib29sCisKKyMgR2VuZXJpYyBNU0kgaGllcmFyY2hpY2FsIGludGVycnVwdCBkb21haW4gc3VwcG9ydAorY29uZmlnIEdFTkVSSUNfTVNJX0lSUV9ET01BSU4KKwlib29sCisJc2VsZWN0IElSUV9ET01BSU5fSElFUkFSQ0hZCisJc2VsZWN0IEdFTkVSSUNfTVNJX0lSUQorCiBjb25maWcgSEFORExFX0RPTUFJTl9JUlEKIAlib29sCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvTWFrZWZpbGUgYi9rZXJuZWwvaXJxL01ha2VmaWxlCmluZGV4IGZmZjE3MzguLmQxMjEyMzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvTWFrZWZpbGUKKysrIGIva2VybmVsL2lycS9NYWtlZmlsZQpAQCAtNiwzICs2LDQgQEAKIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIG9iai0kKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSArPSBtaWdyYXRpb24ubwogb2JqLSQoQ09ORklHX1BNX1NMRUVQKSArPSBwbS5vCitvYmotJChDT05GSUdfR0VORVJJQ19NU0lfSVJRKSArPSBtc2kubwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCBlNTIwMmYwLi42ZjFjN2E1IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CiAKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvaXJxLmg+CiAKQEAgLTE3OCw2ICsxNzksNyBAQAogCWlycV9zdGF0ZV9jbHJfZGlzYWJsZWQoZGVzYyk7CiAJZGVzYy0+ZGVwdGggPSAwOwogCisJaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoJmRlc2MtPmlycV9kYXRhKTsKIAlpZiAoZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX3N0YXJ0dXApIHsKIAkJcmV0ID0gZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX3N0YXJ0dXAoJmRlc2MtPmlycV9kYXRhKTsKIAkJaXJxX3N0YXRlX2Nscl9tYXNrZWQoZGVzYyk7CkBAIC0xOTksNiArMjAxLDcgQEAKIAkJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2Rpc2FibGUoJmRlc2MtPmlycV9kYXRhKTsKIAllbHNlCiAJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CisJaXJxX2RvbWFpbl9kZWFjdGl2YXRlX2lycSgmZGVzYy0+aXJxX2RhdGEpOwogCWlycV9zdGF0ZV9zZXRfbWFza2VkKGRlc2MpOwogfQogCkBAIC03MjgsNyArNzMxLDMwIEBACiAJaWYgKCFoYW5kbGUpIHsKIAkJaGFuZGxlID0gaGFuZGxlX2JhZF9pcnE7CiAJfSBlbHNlIHsKLQkJaWYgKFdBUk5fT04oZGVzYy0+aXJxX2RhdGEuY2hpcCA9PSAmbm9faXJxX2NoaXApKQorCQlzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhID0gJmRlc2MtPmlycV9kYXRhOworI2lmZGVmIENPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWQorCQkvKgorCQkgKiBXaXRoIGhpZXJhcmNoaWNhbCBkb21haW5zIHdlIG1pZ2h0IHJ1biBpbnRvIGEKKwkJICogc2l0dWF0aW9uIHdoZXJlIHRoZSBvdXRlcm1vc3QgY2hpcCBpcyBub3QgeWV0IHNldAorCQkgKiB1cCwgYnV0IHRoZSBpbm5lciBjaGlwcyBhcmUgdGhlcmUuICBJbnN0ZWFkIG9mCisJCSAqIGJhaWxpbmcgd2UgaW5zdGFsbCB0aGUgaGFuZGxlciwgYnV0IG9idmlvdXNseSB3ZQorCQkgKiBjYW5ub3QgZW5hYmxlL3N0YXJ0dXAgdGhlIGludGVycnVwdCBhdCB0aGlzIHBvaW50LgorCQkgKi8KKwkJd2hpbGUgKGlycV9kYXRhKSB7CisJCQlpZiAoaXJxX2RhdGEtPmNoaXAgIT0gJm5vX2lycV9jaGlwKQorCQkJCWJyZWFrOworCQkJLyoKKwkJCSAqIEJhaWwgb3V0IGlmIHRoZSBvdXRlciBjaGlwIGlzIG5vdCBzZXQgdXAKKwkJCSAqIGFuZCB0aGUgaW50ZXJycnVwdCBzdXBwb3NlZCB0byBiZSBzdGFydGVkCisJCQkgKiByaWdodCBhd2F5LgorCQkJICovCisJCQlpZiAoV0FSTl9PTihpc19jaGFpbmVkKSkKKwkJCQlnb3RvIG91dDsKKwkJCS8qIFRyeSB0aGUgcGFyZW50ICovCisJCQlpcnFfZGF0YSA9IGlycV9kYXRhLT5wYXJlbnRfZGF0YTsKKwkJfQorI2VuZGlmCisJCWlmIChXQVJOX09OKCFpcnFfZGF0YSB8fCBpcnFfZGF0YS0+Y2hpcCA9PSAmbm9faXJxX2NoaXApKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC04NDcsMyArODczLDEwNSBAQAogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KIH0KKworI2lmZGVmCUNPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWQorLyoqCisgKiBpcnFfY2hpcF9hY2tfcGFyZW50IC0gQWNrbm93bGVkZ2UgdGhlIHBhcmVudCBpbnRlcnJ1cHQKKyAqIEBkYXRhOglQb2ludGVyIHRvIGludGVycnVwdCBzcGVjaWZpYyBkYXRhCisgKi8KK3ZvaWQgaXJxX2NoaXBfYWNrX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhOworCWRhdGEtPmNoaXAtPmlycV9hY2soZGF0YSk7Cit9CisKKy8qKgorICogaXJxX2NoaXBfbWFza19wYXJlbnQgLSBNYXNrIHRoZSBwYXJlbnQgaW50ZXJydXB0CisgKiBAZGF0YToJUG9pbnRlciB0byBpbnRlcnJ1cHQgc3BlY2lmaWMgZGF0YQorICovCit2b2lkIGlycV9jaGlwX21hc2tfcGFyZW50KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlkYXRhID0gZGF0YS0+cGFyZW50X2RhdGE7CisJZGF0YS0+Y2hpcC0+aXJxX21hc2soZGF0YSk7Cit9CisKKy8qKgorICogaXJxX2NoaXBfdW5tYXNrX3BhcmVudCAtIFVubWFzayB0aGUgcGFyZW50IGludGVycnVwdAorICogQGRhdGE6CVBvaW50ZXIgdG8gaW50ZXJydXB0IHNwZWNpZmljIGRhdGEKKyAqLwordm9pZCBpcnFfY2hpcF91bm1hc2tfcGFyZW50KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlkYXRhID0gZGF0YS0+cGFyZW50X2RhdGE7CisJZGF0YS0+Y2hpcC0+aXJxX3VubWFzayhkYXRhKTsKK30KKworLyoqCisgKiBpcnFfY2hpcF9lb2lfcGFyZW50IC0gSW52b2tlIEVPSSBvbiB0aGUgcGFyZW50IGludGVycnVwdAorICogQGRhdGE6CVBvaW50ZXIgdG8gaW50ZXJydXB0IHNwZWNpZmljIGRhdGEKKyAqLwordm9pZCBpcnFfY2hpcF9lb2lfcGFyZW50KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlkYXRhID0gZGF0YS0+cGFyZW50X2RhdGE7CisJZGF0YS0+Y2hpcC0+aXJxX2VvaShkYXRhKTsKK30KKworLyoqCisgKiBpcnFfY2hpcF9zZXRfYWZmaW5pdHlfcGFyZW50IC0gU2V0IGFmZmluaXR5IG9uIHRoZSBwYXJlbnQgaW50ZXJydXB0CisgKiBAZGF0YToJUG9pbnRlciB0byBpbnRlcnJ1cHQgc3BlY2lmaWMgZGF0YQorICogQGRlc3Q6CVRoZSBhZmZpbml0eSBtYXNrIHRvIHNldAorICogQGZvcmNlOglGbGFnIHRvIGVuZm9yY2Ugc2V0dGluZyAoZGlzYWJsZSBvbmxpbmUgY2hlY2tzKQorICoKKyAqIENvbmRpdGluYWwsIGFzIHRoZSB1bmRlcmx5aW5nIHBhcmVudCBjaGlwIG1pZ2h0IG5vdCBpbXBsZW1lbnQgaXQuCisgKi8KK2ludCBpcnFfY2hpcF9zZXRfYWZmaW5pdHlfcGFyZW50KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwKKwkJCQkgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QsIGJvb2wgZm9yY2UpCit7CisJZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhOworCWlmIChkYXRhLT5jaGlwLT5pcnFfc2V0X2FmZmluaXR5KQorCQlyZXR1cm4gZGF0YS0+Y2hpcC0+aXJxX3NldF9hZmZpbml0eShkYXRhLCBkZXN0LCBmb3JjZSk7CisKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoqCisgKiBpcnFfY2hpcF9yZXRyaWdnZXJfaGllcmFyY2h5IC0gUmV0cmlnZ2VyIGFuIGludGVycnVwdCBpbiBoYXJkd2FyZQorICogQGRhdGE6CVBvaW50ZXIgdG8gaW50ZXJydXB0IHNwZWNpZmljIGRhdGEKKyAqCisgKiBJdGVyYXRlIHRocm91Z2ggdGhlIGRvbWFpbiBoaWVyYXJjaHkgb2YgdGhlIGludGVycnVwdCBhbmQgY2hlY2sKKyAqIHdoZXRoZXIgYSBodyByZXRyaWdnZXIgZnVuY3Rpb24gZXhpc3RzLiBJZiB5ZXMsIGludm9rZSBpdC4KKyAqLworaW50IGlycV9jaGlwX3JldHJpZ2dlcl9oaWVyYXJjaHkoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWZvciAoZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhOyBkYXRhOyBkYXRhID0gZGF0YS0+cGFyZW50X2RhdGEpCisJCWlmIChkYXRhLT5jaGlwICYmIGRhdGEtPmNoaXAtPmlycV9yZXRyaWdnZXIpCisJCQlyZXR1cm4gZGF0YS0+Y2hpcC0+aXJxX3JldHJpZ2dlcihkYXRhKTsKKworCXJldHVybiAtRU5PU1lTOworfQorI2VuZGlmCisKKy8qKgorICogaXJxX2NoaXBfY29tcG9zZV9tc2lfbXNnIC0gQ29tcG9uc2UgbXNpIG1lc3NhZ2UgZm9yIGEgaXJxIGNoaXAKKyAqIEBkYXRhOglQb2ludGVyIHRvIGludGVycnVwdCBzcGVjaWZpYyBkYXRhCisgKiBAbXNnOglQb2ludGVyIHRvIHRoZSBNU0kgbWVzc2FnZQorICoKKyAqIEZvciBoaWVyYXJjaGljYWwgZG9tYWlucyB3ZSBmaW5kIHRoZSBmaXJzdCBjaGlwIGluIHRoZSBoaWVyYXJjaHkKKyAqIHdoaWNoIGltcGxlbWVudHMgdGhlIGlycV9jb21wb3NlX21zaV9tc2cgY2FsbGJhY2suIEZvciBub24KKyAqIGhpZXJhcmNoaWNhbCB3ZSB1c2UgdGhlIHRvcCBsZXZlbCBjaGlwLgorICovCitpbnQgaXJxX2NoaXBfY29tcG9zZV9tc2lfbXNnKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKnBvcyA9IE5VTEw7CisKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKwlmb3IgKDsgZGF0YTsgZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhKQorI2VuZGlmCisJCWlmIChkYXRhLT5jaGlwICYmIGRhdGEtPmNoaXAtPmlycV9jb21wb3NlX21zaV9tc2cpCisJCQlwb3MgPSBkYXRhOworCWlmICghcG9zKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXBvcy0+Y2hpcC0+aXJxX2NvbXBvc2VfbXNpX21zZyhwb3MsIG1zZyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvZ2VuZXJpYy1jaGlwLmMgYi9rZXJuZWwvaXJxL2dlbmVyaWMtY2hpcC5jCmluZGV4IGNmODBlN2IuLjYxMDI0ZTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvZ2VuZXJpYy1jaGlwLmMKKysrIGIva2VybmVsL2lycS9nZW5lcmljLWNoaXAuYwpAQCAtMzksNyArMzksNyBAQAogCXUzMiBtYXNrID0gZC0+bWFzazsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChtYXNrLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5kaXNhYmxlKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgbWFzaywgY3QtPnJlZ3MuZGlzYWJsZSk7CiAJKmN0LT5tYXNrX2NhY2hlICY9IH5tYXNrOwogCWlycV9nY191bmxvY2soZ2MpOwogfQpAQCAtNTksNyArNTksNyBAQAogCiAJaXJxX2djX2xvY2soZ2MpOwogCSpjdC0+bWFza19jYWNoZSB8PSBtYXNrOwotCWlycV9yZWdfd3JpdGVsKCpjdC0+bWFza19jYWNoZSwgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MubWFzayk7CisJaXJxX3JlZ193cml0ZWwoZ2MsICpjdC0+bWFza19jYWNoZSwgY3QtPnJlZ3MubWFzayk7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfZ2NfbWFza19zZXRfYml0KTsKQEAgLTc5LDcgKzc5LDcgQEAKIAogCWlycV9nY19sb2NrKGdjKTsKIAkqY3QtPm1hc2tfY2FjaGUgJj0gfm1hc2s7Ci0JaXJxX3JlZ193cml0ZWwoKmN0LT5tYXNrX2NhY2hlLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5tYXNrKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgKmN0LT5tYXNrX2NhY2hlLCBjdC0+cmVncy5tYXNrKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlycV9nY19tYXNrX2Nscl9iaXQpOwpAQCAtOTgsNyArOTgsNyBAQAogCXUzMiBtYXNrID0gZC0+bWFzazsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChtYXNrLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5lbmFibGUpOworCWlycV9yZWdfd3JpdGVsKGdjLCBtYXNrLCBjdC0+cmVncy5lbmFibGUpOwogCSpjdC0+bWFza19jYWNoZSB8PSBtYXNrOwogCWlycV9nY191bmxvY2soZ2MpOwogfQpAQCAtMTE0LDcgKzExNCw3IEBACiAJdTMyIG1hc2sgPSBkLT5tYXNrOwogCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLmFjayk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIG1hc2ssIGN0LT5yZWdzLmFjayk7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfZ2NfYWNrX3NldF9iaXQpOwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJdTMyIG1hc2sgPSB+ZC0+bWFzazsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChtYXNrLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5hY2spOworCWlycV9yZWdfd3JpdGVsKGdjLCBtYXNrLCBjdC0+cmVncy5hY2spOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogCkBAIC0xNDUsOCArMTQ1LDggQEAKIAl1MzIgbWFzayA9IGQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MubWFzayk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuYWNrKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgbWFzaywgY3QtPnJlZ3MubWFzayk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIG1hc2ssIGN0LT5yZWdzLmFjayk7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXUzMiBtYXNrID0gZC0+bWFzazsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChtYXNrLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5lb2kpOworCWlycV9yZWdfd3JpdGVsKGdjLCBtYXNrLCBjdC0+cmVncy5lb2kpOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogCkBAIC0xOTEsNiArMTkxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1MzIgaXJxX3JlYWRsX2JlKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gaW9yZWFkMzJiZShhZGRyKTsKK30KKworc3RhdGljIHZvaWQgaXJxX3dyaXRlbF9iZSh1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW93cml0ZTMyYmUodmFsLCBhZGRyKTsKK30KKwogc3RhdGljIHZvaWQKIGlycV9pbml0X2dlbmVyaWNfY2hpcChzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgIGludCBudW1fY3QsIHVuc2lnbmVkIGludCBpcnFfYmFzZSwKQEAgLTI0NSw3ICsyNTUsNyBAQAogCQl9CiAJCWN0W2ldLm1hc2tfY2FjaGUgPSBtc2twdHI7CiAJCWlmIChmbGFncyAmIElSUV9HQ19JTklUX01BU0tfQ0FDSEUpCi0JCQkqbXNrcHRyID0gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBtc2tyZWcpOworCQkJKm1za3B0ciA9IGlycV9yZWdfcmVhZGwoZ2MsIG1za3JlZyk7CiAJfQogfQogCkBAIC0zMDAsNyArMzEwLDEzIEBACiAJCWRnYy0+Z2NbaV0gPSBnYyA9IHRtcDsKIAkJaXJxX2luaXRfZ2VuZXJpY19jaGlwKGdjLCBuYW1lLCBudW1fY3QsIGkgKiBpcnFzX3Blcl9jaGlwLAogCQkJCSAgICAgIE5VTEwsIGhhbmRsZXIpOworCiAJCWdjLT5kb21haW4gPSBkOworCQlpZiAoZ2NmbGFncyAmIElSUV9HQ19CRV9JTykgeworCQkJZ2MtPnJlZ19yZWFkbCA9ICZpcnFfcmVhZGxfYmU7CisJCQlnYy0+cmVnX3dyaXRlbCA9ICZpcnFfd3JpdGVsX2JlOworCQl9CisKIAkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZnY19sb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkX3RhaWwoJmdjLT5saXN0LCAmZ2NfbGlzdCk7CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZnY19sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2lycWRvbWFpbi5jIGIva2VybmVsL2lycS9pcnFkb21haW4uYwppbmRleCA2NTM0ZmY2Li43ZmFjMzExIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2lycWRvbWFpbi5jCisrKyBiL2tlcm5lbC9pcnEvaXJxZG9tYWluLmMKQEAgLTIzLDYgKzIzLDEwIEBACiBzdGF0aWMgREVGSU5FX01VVEVYKHJldm1hcF90cmVlc19tdXRleCk7CiBzdGF0aWMgc3RydWN0IGlycV9kb21haW4gKmlycV9kZWZhdWx0X2RvbWFpbjsKIAorc3RhdGljIGludCBpcnFfZG9tYWluX2FsbG9jX2Rlc2NzKGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcywKKwkJCQkgIGlycV9od19udW1iZXJfdCBod2lycSwgaW50IG5vZGUpOworc3RhdGljIHZvaWQgaXJxX2RvbWFpbl9jaGVja19oaWVyYXJjaHkoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbik7CisKIC8qKgogICogX19pcnFfZG9tYWluX2FkZCgpIC0gQWxsb2NhdGUgYSBuZXcgaXJxX2RvbWFpbiBkYXRhIHN0cnVjdHVyZQogICogQG9mX25vZGU6IG9wdGlvbmFsIGRldmljZS10cmVlIG5vZGUgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyCkBAIC0zMCw3ICszNCw3IEBACiAgKiBAaHdpcnFfbWF4OiBNYXhpbXVtIG51bWJlciBvZiBpbnRlcnJ1cHRzIHN1cHBvcnRlZCBieSBjb250cm9sbGVyCiAgKiBAZGlyZWN0X21heDogTWF4aW11bSB2YWx1ZSBvZiBkaXJlY3QgbWFwczsgVXNlIH4wIGZvciBubyBsaW1pdDsgMCBmb3Igbm8KICAqICAgICAgICAgICAgICBkaXJlY3QgbWFwcGluZwotICogQG9wczogbWFwL3VubWFwIGRvbWFpbiBjYWxsYmFja3MKKyAqIEBvcHM6IGRvbWFpbiBjYWxsYmFja3MKICAqIEBob3N0X2RhdGE6IENvbnRyb2xsZXIgcHJpdmF0ZSBkYXRhIHBvaW50ZXIKICAqCiAgKiBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemUgYW5kIGlycV9kb21haW4gc3RydWN0dXJlLgpAQCAtNTYsNiArNjAsNyBAQAogCWRvbWFpbi0+aHdpcnFfbWF4ID0gaHdpcnFfbWF4OwogCWRvbWFpbi0+cmV2bWFwX3NpemUgPSBzaXplOwogCWRvbWFpbi0+cmV2bWFwX2RpcmVjdF9tYXhfaXJxID0gZGlyZWN0X21heDsKKwlpcnFfZG9tYWluX2NoZWNrX2hpZXJhcmNoeShkb21haW4pOwogCiAJbXV0ZXhfbG9jaygmaXJxX2RvbWFpbl9tdXRleCk7CiAJbGlzdF9hZGQoJmRvbWFpbi0+bGluaywgJmlycV9kb21haW5fbGlzdCk7CkBAIC0xMDksNyArMTE0LDcgQEAKICAqIEBmaXJzdF9pcnE6IGZpcnN0IG51bWJlciBvZiBpcnEgYmxvY2sgYXNzaWduZWQgdG8gdGhlIGRvbWFpbiwKICAqCXBhc3MgemVybyB0byBhc3NpZ24gaXJxcyBvbi10aGUtZmx5LiBJZiBmaXJzdF9pcnEgaXMgbm9uLXplcm8sIHRoZW4KICAqCXByZS1tYXAgYWxsIG9mIHRoZSBpcnFzIGluIHRoZSBkb21haW4gdG8gdmlycXMgc3RhcnRpbmcgYXQgZmlyc3RfaXJxLgotICogQG9wczogbWFwL3VubWFwIGRvbWFpbiBjYWxsYmFja3MKKyAqIEBvcHM6IGRvbWFpbiBjYWxsYmFja3MKICAqIEBob3N0X2RhdGE6IENvbnRyb2xsZXIgcHJpdmF0ZSBkYXRhIHBvaW50ZXIKICAqCiAgKiBBbGxvY2F0ZXMgYW4gaXJxX2RvbWFpbiwgYW5kIG9wdGlvbmFsbHkgaWYgZmlyc3RfaXJxIGlzIHBvc2l0aXZlIHRoZW4gYWxzbwpAQCAtMTc0LDEwICsxNzksOCBAQAogCiAJZG9tYWluID0gX19pcnFfZG9tYWluX2FkZChvZl9ub2RlLCBmaXJzdF9od2lycSArIHNpemUsCiAJCQkJICBmaXJzdF9od2lycSArIHNpemUsIDAsIG9wcywgaG9zdF9kYXRhKTsKLQlpZiAoIWRvbWFpbikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpcnFfZG9tYWluX2Fzc29jaWF0ZV9tYW55KGRvbWFpbiwgZmlyc3RfaXJxLCBmaXJzdF9od2lycSwgc2l6ZSk7CisJaWYgKGRvbWFpbikKKwkJaXJxX2RvbWFpbl9hc3NvY2lhdGVfbWFueShkb21haW4sIGZpcnN0X2lycSwgZmlyc3RfaHdpcnEsIHNpemUpOwogCiAJcmV0dXJuIGRvbWFpbjsKIH0KQEAgLTM4OCw3ICszOTEsNiBAQAogdW5zaWduZWQgaW50IGlycV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAogCQkJCWlycV9od19udW1iZXJfdCBod2lycSkKIHsKLQl1bnNpZ25lZCBpbnQgaGludDsKIAlpbnQgdmlycTsKIAogCXByX2RlYnVnKCJpcnFfY3JlYXRlX21hcHBpbmcoMHglcCwgMHglbHgpXG4iLCBkb21haW4sIGh3aXJxKTsKQEAgLTQxMCwxMiArNDEyLDggQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBhIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlciAqLwotCWhpbnQgPSBod2lycSAlIG5yX2lycXM7Ci0JaWYgKGhpbnQgPT0gMCkKLQkJaGludCsrOwotCXZpcnEgPSBpcnFfYWxsb2NfZGVzY19mcm9tKGhpbnQsIG9mX25vZGVfdG9fbmlkKGRvbWFpbi0+b2Zfbm9kZSkpOwotCWlmICh2aXJxIDw9IDApCi0JCXZpcnEgPSBpcnFfYWxsb2NfZGVzY19mcm9tKDEsIG9mX25vZGVfdG9fbmlkKGRvbWFpbi0+b2Zfbm9kZSkpOworCXZpcnEgPSBpcnFfZG9tYWluX2FsbG9jX2Rlc2NzKC0xLCAxLCBod2lycSwKKwkJCQkgICAgICBvZl9ub2RlX3RvX25pZChkb21haW4tPm9mX25vZGUpKTsKIAlpZiAodmlycSA8PSAwKSB7CiAJCXByX2RlYnVnKCItPiB2aXJxIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC00NzEsNyArNDY5LDcgQEAKIAlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwogCWlycV9od19udW1iZXJfdCBod2lycTsKIAl1bnNpZ25lZCBpbnQgdHlwZSA9IElSUV9UWVBFX05PTkU7Ci0JdW5zaWduZWQgaW50IHZpcnE7CisJaW50IHZpcnE7CiAKIAlkb21haW4gPSBpcnFfZGF0YS0+bnAgPyBpcnFfZmluZF9ob3N0KGlycV9kYXRhLT5ucCkgOiBpcnFfZGVmYXVsdF9kb21haW47CiAJaWYgKCFkb21haW4pIHsKQEAgLTQ4OSwxMCArNDg3LDI0IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBDcmVhdGUgbWFwcGluZyAqLwotCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoZG9tYWluLCBod2lycSk7Ci0JaWYgKCF2aXJxKQotCQlyZXR1cm4gdmlycTsKKwlpZiAoaXJxX2RvbWFpbl9pc19oaWVyYXJjaHkoZG9tYWluKSkgeworCQkvKgorCQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGNvbmZpZ3VyZWQgdGhpcyBpbnRlcnJ1cHQsCisJCSAqIGRvbid0IGRvIGl0IGFnYWluLCBvciBoZWxsIHdpbGwgYnJlYWsgbG9vc2UuCisJCSAqLworCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhkb21haW4sIGh3aXJxKTsKKwkJaWYgKHZpcnEpCisJCQlyZXR1cm4gdmlycTsKKworCQl2aXJxID0gaXJxX2RvbWFpbl9hbGxvY19pcnFzKGRvbWFpbiwgMSwgTlVNQV9OT19OT0RFLCBpcnFfZGF0YSk7CisJCWlmICh2aXJxIDw9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKiBDcmVhdGUgbWFwcGluZyAqLworCQl2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKGRvbWFpbiwgaHdpcnEpOworCQlpZiAoIXZpcnEpCisJCQlyZXR1cm4gdmlycTsKKwl9CiAKIAkvKiBTZXQgdHlwZSBpZiBzcGVjaWZpZWQgYW5kIGRpZmZlcmVudCB0aGFuIHRoZSBjdXJyZW50IG9uZSAqLwogCWlmICh0eXBlICE9IElSUV9UWVBFX05PTkUgJiYKQEAgLTU0MCw4ICs1NTIsOCBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChod2lycSA8IGRvbWFpbi0+cmV2bWFwX2RpcmVjdF9tYXhfaXJxKSB7Ci0JCWRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKGh3aXJxKTsKLQkJaWYgKGRhdGEgJiYgKGRhdGEtPmRvbWFpbiA9PSBkb21haW4pICYmIChkYXRhLT5od2lycSA9PSBod2lycSkpCisJCWRhdGEgPSBpcnFfZG9tYWluX2dldF9pcnFfZGF0YShkb21haW4sIGh3aXJxKTsKKwkJaWYgKGRhdGEgJiYgZGF0YS0+aHdpcnEgPT0gaHdpcnEpCiAJCQlyZXR1cm4gaHdpcnE7CiAJfQogCkBAIC03MDksMyArNzIxLDUxOCBAQAogCS54bGF0ZSA9IGlycV9kb21haW5feGxhdGVfb25ldHdvY2VsbCwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfZG9tYWluX3NpbXBsZV9vcHMpOworCitzdGF0aWMgaW50IGlycV9kb21haW5fYWxsb2NfZGVzY3MoaW50IHZpcnEsIHVuc2lnbmVkIGludCBjbnQsCisJCQkJICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEsIGludCBub2RlKQoreworCXVuc2lnbmVkIGludCBoaW50OworCisJaWYgKHZpcnEgPj0gMCkgeworCQl2aXJxID0gaXJxX2FsbG9jX2Rlc2NzKHZpcnEsIHZpcnEsIGNudCwgbm9kZSk7CisJfSBlbHNlIHsKKwkJaGludCA9IGh3aXJxICUgbnJfaXJxczsKKwkJaWYgKGhpbnQgPT0gMCkKKwkJCWhpbnQrKzsKKwkJdmlycSA9IGlycV9hbGxvY19kZXNjc19mcm9tKGhpbnQsIGNudCwgbm9kZSk7CisJCWlmICh2aXJxIDw9IDAgJiYgaGludCA+IDEpCisJCQl2aXJxID0gaXJxX2FsbG9jX2Rlc2NzX2Zyb20oMSwgY250LCBub2RlKTsKKwl9CisKKwlyZXR1cm4gdmlycTsKK30KKworI2lmZGVmCUNPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWQorLyoqCisgKiBpcnFfZG9tYWluX2FkZF9oaWVyYXJjaHkgLSBBZGQgYSBpcnFkb21haW4gaW50byB0aGUgaGllcmFyY2h5CisgKiBAcGFyZW50OglQYXJlbnQgaXJxIGRvbWFpbiB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbmV3IGRvbWFpbgorICogQGZsYWdzOglJcnEgZG9tYWluIGZsYWdzIGFzc29jaWF0ZWQgdG8gdGhlIGRvbWFpbgorICogQHNpemU6CVNpemUgb2YgdGhlIGRvbWFpbi4gU2VlIGJlbG93CisgKiBAbm9kZToJT3B0aW9uYWwgZGV2aWNlLXRyZWUgbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEBvcHM6CVBvaW50ZXIgdG8gdGhlIGludGVycnVwdCBkb21haW4gY2FsbGJhY2tzCisgKiBAaG9zdF9kYXRhOglDb250cm9sbGVyIHByaXZhdGUgZGF0YSBwb2ludGVyCisgKgorICogSWYgQHNpemUgaXMgMCBhIHRyZWUgZG9tYWluIGlzIGNyZWF0ZWQsIG90aGVyd2lzZSBhIGxpbmVhciBkb21haW4uCisgKgorICogSWYgc3VjY2Vzc2Z1bCB0aGUgcGFyZW50IGlzIGFzc29jaWF0ZWQgdG8gdGhlIG5ldyBkb21haW4gYW5kIHRoZQorICogZG9tYWluIGZsYWdzIGFyZSBzZXQuCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gSVJRIGRvbWFpbiwgb3IgTlVMTCBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgaXJxX2RvbWFpbiAqaXJxX2RvbWFpbl9hZGRfaGllcmFyY2h5KHN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzLAorCQkJCQkgICAgdm9pZCAqaG9zdF9kYXRhKQoreworCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CisKKwlpZiAoc2l6ZSkKKwkJZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKG5vZGUsIHNpemUsIG9wcywgaG9zdF9kYXRhKTsKKwllbHNlCisJCWRvbWFpbiA9IGlycV9kb21haW5fYWRkX3RyZWUobm9kZSwgb3BzLCBob3N0X2RhdGEpOworCWlmIChkb21haW4pIHsKKwkJZG9tYWluLT5wYXJlbnQgPSBwYXJlbnQ7CisJCWRvbWFpbi0+ZmxhZ3MgfD0gZmxhZ3M7CisJfQorCisJcmV0dXJuIGRvbWFpbjsKK30KKworc3RhdGljIHZvaWQgaXJxX2RvbWFpbl9pbnNlcnRfaXJxKGludCB2aXJxKQoreworCXN0cnVjdCBpcnFfZGF0YSAqZGF0YTsKKworCWZvciAoZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEodmlycSk7IGRhdGE7IGRhdGEgPSBkYXRhLT5wYXJlbnRfZGF0YSkgeworCQlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluID0gZGF0YS0+ZG9tYWluOworCQlpcnFfaHdfbnVtYmVyX3QgaHdpcnEgPSBkYXRhLT5od2lycTsKKworCQlpZiAoaHdpcnEgPCBkb21haW4tPnJldm1hcF9zaXplKSB7CisJCQlkb21haW4tPmxpbmVhcl9yZXZtYXBbaHdpcnFdID0gdmlycTsKKwkJfSBlbHNlIHsKKwkJCW11dGV4X2xvY2soJnJldm1hcF90cmVlc19tdXRleCk7CisJCQlyYWRpeF90cmVlX2luc2VydCgmZG9tYWluLT5yZXZtYXBfdHJlZSwgaHdpcnEsIGRhdGEpOworCQkJbXV0ZXhfdW5sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOworCQl9CisKKwkJLyogSWYgbm90IGFscmVhZHkgYXNzaWduZWQsIGdpdmUgdGhlIGRvbWFpbiB0aGUgY2hpcCdzIG5hbWUgKi8KKwkJaWYgKCFkb21haW4tPm5hbWUgJiYgZGF0YS0+Y2hpcCkKKwkJCWRvbWFpbi0+bmFtZSA9IGRhdGEtPmNoaXAtPm5hbWU7CisJfQorCisJaXJxX2NsZWFyX3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTk9SRVFVRVNUKTsKK30KKworc3RhdGljIHZvaWQgaXJxX2RvbWFpbl9yZW1vdmVfaXJxKGludCB2aXJxKQoreworCXN0cnVjdCBpcnFfZGF0YSAqZGF0YTsKKworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKHZpcnEsIElSUV9OT1JFUVVFU1QpOworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCBOVUxMLCBOVUxMKTsKKwlzeW5jaHJvbml6ZV9pcnEodmlycSk7CisJc21wX21iKCk7CisKKwlmb3IgKGRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKHZpcnEpOyBkYXRhOyBkYXRhID0gZGF0YS0+cGFyZW50X2RhdGEpIHsKKwkJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiA9IGRhdGEtPmRvbWFpbjsKKwkJaXJxX2h3X251bWJlcl90IGh3aXJxID0gZGF0YS0+aHdpcnE7CisKKwkJaWYgKGh3aXJxIDwgZG9tYWluLT5yZXZtYXBfc2l6ZSkgeworCQkJZG9tYWluLT5saW5lYXJfcmV2bWFwW2h3aXJxXSA9IDA7CisJCX0gZWxzZSB7CisJCQltdXRleF9sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOworCQkJcmFkaXhfdHJlZV9kZWxldGUoJmRvbWFpbi0+cmV2bWFwX3RyZWUsIGh3aXJxKTsKKwkJCW11dGV4X3VubG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RvbWFpbl9pbnNlcnRfaXJxX2RhdGEoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJCSAgIHN0cnVjdCBpcnFfZGF0YSAqY2hpbGQpCit7CisJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YTsKKworCWlycV9kYXRhID0ga3phbGxvY19ub2RlKHNpemVvZigqaXJxX2RhdGEpLCBHRlBfS0VSTkVMLCBjaGlsZC0+bm9kZSk7CisJaWYgKGlycV9kYXRhKSB7CisJCWNoaWxkLT5wYXJlbnRfZGF0YSA9IGlycV9kYXRhOworCQlpcnFfZGF0YS0+aXJxID0gY2hpbGQtPmlycTsKKwkJaXJxX2RhdGEtPm5vZGUgPSBjaGlsZC0+bm9kZTsKKwkJaXJxX2RhdGEtPmRvbWFpbiA9IGRvbWFpbjsKKwl9CisKKwlyZXR1cm4gaXJxX2RhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9kb21haW5fZnJlZV9pcnFfZGF0YSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMpCit7CisJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSwgKnRtcDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJaXJxX2RhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKHZpcnEgKyBpKTsKKwkJdG1wID0gaXJxX2RhdGEtPnBhcmVudF9kYXRhOworCQlpcnFfZGF0YS0+cGFyZW50X2RhdGEgPSBOVUxMOworCQlpcnFfZGF0YS0+ZG9tYWluID0gTlVMTDsKKworCQl3aGlsZSAodG1wKSB7CisJCQlpcnFfZGF0YSA9IHRtcDsKKwkJCXRtcCA9IHRtcC0+cGFyZW50X2RhdGE7CisJCQlrZnJlZShpcnFfZGF0YSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgaXJxX2RvbWFpbl9hbGxvY19pcnFfZGF0YShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBucl9pcnFzKQoreworCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGE7CisJc3RydWN0IGlycV9kb21haW4gKnBhcmVudDsKKwlpbnQgaTsKKworCS8qIFRoZSBvdXRlcm1vc3QgaXJxX2RhdGEgaXMgZW1iZWRkZWQgaW4gc3RydWN0IGlycV9kZXNjICovCisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykgeworCQlpcnFfZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEodmlycSArIGkpOworCQlpcnFfZGF0YS0+ZG9tYWluID0gZG9tYWluOworCisJCWZvciAocGFyZW50ID0gZG9tYWluLT5wYXJlbnQ7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnQpIHsKKwkJCWlycV9kYXRhID0gaXJxX2RvbWFpbl9pbnNlcnRfaXJxX2RhdGEocGFyZW50LCBpcnFfZGF0YSk7CisJCQlpZiAoIWlycV9kYXRhKSB7CisJCQkJaXJxX2RvbWFpbl9mcmVlX2lycV9kYXRhKHZpcnEsIGkgKyAxKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlycV9kb21haW5fZ2V0X2lycV9kYXRhIC0gR2V0IGlycV9kYXRhIGFzc29jaWF0ZWQgd2l0aCBAdmlycSBhbmQgQGRvbWFpbgorICogQGRvbWFpbjoJZG9tYWluIHRvIG1hdGNoCisgKiBAdmlycToJSVJRIG51bWJlciB0byBnZXQgaXJxX2RhdGEKKyAqLworc3RydWN0IGlycV9kYXRhICppcnFfZG9tYWluX2dldF9pcnFfZGF0YShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQkgdW5zaWduZWQgaW50IHZpcnEpCit7CisJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YTsKKworCWZvciAoaXJxX2RhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKHZpcnEpOyBpcnFfZGF0YTsKKwkgICAgIGlycV9kYXRhID0gaXJxX2RhdGEtPnBhcmVudF9kYXRhKQorCQlpZiAoaXJxX2RhdGEtPmRvbWFpbiA9PSBkb21haW4pCisJCQlyZXR1cm4gaXJxX2RhdGE7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX3NldF9od2lycV9hbmRfY2hpcCAtIFNldCBod2lycSBhbmQgaXJxY2hpcCBvZiBAdmlycSBhdCBAZG9tYWluCisgKiBAZG9tYWluOglJbnRlcnJ1cHQgZG9tYWluIHRvIG1hdGNoCisgKiBAdmlycToJSVJRIG51bWJlcgorICogQGh3aXJxOglUaGUgaHdpcnEgbnVtYmVyCisgKiBAY2hpcDoJVGhlIGFzc29jaWF0ZWQgaW50ZXJydXB0IGNoaXAKKyAqIEBjaGlwX2RhdGE6CVRoZSBhc3NvY2lhdGVkIGNoaXAgZGF0YQorICovCitpbnQgaXJxX2RvbWFpbl9zZXRfaHdpcnFfYW5kX2NoaXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEsIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCwKKwkJCQkgIHZvaWQgKmNoaXBfZGF0YSkKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhID0gaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoZG9tYWluLCB2aXJxKTsKKworCWlmICghaXJxX2RhdGEpCisJCXJldHVybiAtRU5PRU5UOworCisJaXJxX2RhdGEtPmh3aXJxID0gaHdpcnE7CisJaXJxX2RhdGEtPmNoaXAgPSBjaGlwID8gY2hpcCA6ICZub19pcnFfY2hpcDsKKwlpcnFfZGF0YS0+Y2hpcF9kYXRhID0gY2hpcF9kYXRhOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9zZXRfaW5mbyAtIFNldCB0aGUgY29tcGxldGUgZGF0YSBmb3IgYSBAdmlycSBpbiBAZG9tYWluCisgKiBAZG9tYWluOgkJSW50ZXJydXB0IGRvbWFpbiB0byBtYXRjaAorICogQHZpcnE6CQlJUlEgbnVtYmVyCisgKiBAaHdpcnE6CQlUaGUgaGFyZHdhcmUgaW50ZXJydXB0IG51bWJlcgorICogQGNoaXA6CQlUaGUgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgY2hpcAorICogQGNoaXBfZGF0YToJCVRoZSBhc3NvY2lhdGVkIGludGVycnVwdCBjaGlwIGRhdGEKKyAqIEBoYW5kbGVyOgkJVGhlIGludGVycnVwdCBmbG93IGhhbmRsZXIKKyAqIEBoYW5kbGVyX2RhdGE6CVRoZSBpbnRlcnJ1cHQgZmxvdyBoYW5kbGVyIGRhdGEKKyAqIEBoYW5kbGVyX25hbWU6CVRoZSBpbnRlcnJ1cHQgaGFuZGxlciBuYW1lCisgKi8KK3ZvaWQgaXJxX2RvbWFpbl9zZXRfaW5mbyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSBpcnFfaHdfbnVtYmVyX3QgaHdpcnEsIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCwKKwkJCSB2b2lkICpjaGlwX2RhdGEsIGlycV9mbG93X2hhbmRsZXJfdCBoYW5kbGVyLAorCQkJIHZvaWQgKmhhbmRsZXJfZGF0YSwgY29uc3QgY2hhciAqaGFuZGxlcl9uYW1lKQoreworCWlycV9kb21haW5fc2V0X2h3aXJxX2FuZF9jaGlwKGRvbWFpbiwgdmlycSwgaHdpcnEsIGNoaXAsIGNoaXBfZGF0YSk7CisJX19pcnFfc2V0X2hhbmRsZXIodmlycSwgaGFuZGxlciwgMCwgaGFuZGxlcl9uYW1lKTsKKwlpcnFfc2V0X2hhbmRsZXJfZGF0YSh2aXJxLCBoYW5kbGVyX2RhdGEpOworfQorCisvKioKKyAqIGlycV9kb21haW5fcmVzZXRfaXJxX2RhdGEgLSBDbGVhciBod2lycSwgY2hpcCBhbmQgY2hpcF9kYXRhIGluIEBpcnFfZGF0YQorICogQGlycV9kYXRhOglUaGUgcG9pbnRlciB0byBpcnFfZGF0YQorICovCit2b2lkIGlycV9kb21haW5fcmVzZXRfaXJxX2RhdGEoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSkKK3sKKwlpcnFfZGF0YS0+aHdpcnEgPSAwOworCWlycV9kYXRhLT5jaGlwID0gJm5vX2lycV9jaGlwOworCWlycV9kYXRhLT5jaGlwX2RhdGEgPSBOVUxMOworfQorCisvKioKKyAqIGlycV9kb21haW5fZnJlZV9pcnFzX2NvbW1vbiAtIENsZWFyIGlycV9kYXRhIGFuZCBmcmVlIHRoZSBwYXJlbnQKKyAqIEBkb21haW46CUludGVycnVwdCBkb21haW4gdG8gbWF0Y2gKKyAqIEB2aXJxOglJUlEgbnVtYmVyIHRvIHN0YXJ0IHdpdGgKKyAqIEBucl9pcnFzOglUaGUgbnVtYmVyIG9mIGlycXMgdG8gZnJlZQorICovCit2b2lkIGlycV9kb21haW5fZnJlZV9pcnFzX2NvbW1vbihzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCQkgdW5zaWduZWQgaW50IG5yX2lycXMpCit7CisJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJaXJxX2RhdGEgPSBpcnFfZG9tYWluX2dldF9pcnFfZGF0YShkb21haW4sIHZpcnEgKyBpKTsKKwkJaWYgKGlycV9kYXRhKQorCQkJaXJxX2RvbWFpbl9yZXNldF9pcnFfZGF0YShpcnFfZGF0YSk7CisJfQorCWlycV9kb21haW5fZnJlZV9pcnFzX3BhcmVudChkb21haW4sIHZpcnEsIG5yX2lycXMpOworfQorCisvKioKKyAqIGlycV9kb21haW5fZnJlZV9pcnFzX3RvcCAtIENsZWFyIGhhbmRsZXIgYW5kIGhhbmRsZXIgZGF0YSwgY2xlYXIgaXJxZGF0YSBhbmQgZnJlZSBwYXJlbnQKKyAqIEBkb21haW46CUludGVycnVwdCBkb21haW4gdG8gbWF0Y2gKKyAqIEB2aXJxOglJUlEgbnVtYmVyIHRvIHN0YXJ0IHdpdGgKKyAqIEBucl9pcnFzOglUaGUgbnVtYmVyIG9mIGlycXMgdG8gZnJlZQorICovCit2b2lkIGlycV9kb21haW5fZnJlZV9pcnFzX3RvcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBucl9pcnFzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykgeworCQlpcnFfc2V0X2hhbmRsZXJfZGF0YSh2aXJxICsgaSwgTlVMTCk7CisJCWlycV9zZXRfaGFuZGxlcih2aXJxICsgaSwgTlVMTCk7CisJfQorCWlycV9kb21haW5fZnJlZV9pcnFzX2NvbW1vbihkb21haW4sIHZpcnEsIG5yX2lycXMpOworfQorCitzdGF0aWMgYm9vbCBpcnFfZG9tYWluX2lzX2F1dG9fcmVjdXJzaXZlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4pCit7CisJcmV0dXJuIGRvbWFpbi0+ZmxhZ3MgJiBJUlFfRE9NQUlOX0ZMQUdfQVVUT19SRUNVUlNJVkU7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9kb21haW5fZnJlZV9pcnFzX3JlY3Vyc2l2ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgaXJxX2Jhc2UsCisJCQkJCSAgIHVuc2lnbmVkIGludCBucl9pcnFzKQoreworCWRvbWFpbi0+b3BzLT5mcmVlKGRvbWFpbiwgaXJxX2Jhc2UsIG5yX2lycXMpOworCWlmIChpcnFfZG9tYWluX2lzX2F1dG9fcmVjdXJzaXZlKGRvbWFpbikpIHsKKwkJQlVHX09OKCFkb21haW4tPnBhcmVudCk7CisJCWlycV9kb21haW5fZnJlZV9pcnFzX3JlY3Vyc2l2ZShkb21haW4tPnBhcmVudCwgaXJxX2Jhc2UsCisJCQkJCSAgICAgICBucl9pcnFzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXJxX2RvbWFpbl9hbGxvY19pcnFzX3JlY3Vyc2l2ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgaXJxX2Jhc2UsCisJCQkJCSAgIHVuc2lnbmVkIGludCBucl9pcnFzLCB2b2lkICphcmcpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGlycV9kb21haW4gKnBhcmVudCA9IGRvbWFpbi0+cGFyZW50OworCWJvb2wgcmVjdXJzaXZlID0gaXJxX2RvbWFpbl9pc19hdXRvX3JlY3Vyc2l2ZShkb21haW4pOworCisJQlVHX09OKHJlY3Vyc2l2ZSAmJiAhcGFyZW50KTsKKwlpZiAocmVjdXJzaXZlKQorCQlyZXQgPSBpcnFfZG9tYWluX2FsbG9jX2lycXNfcmVjdXJzaXZlKHBhcmVudCwgaXJxX2Jhc2UsCisJCQkJCQkgICAgICBucl9pcnFzLCBhcmcpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gZG9tYWluLT5vcHMtPmFsbG9jKGRvbWFpbiwgaXJxX2Jhc2UsIG5yX2lycXMsIGFyZyk7CisJaWYgKHJldCA8IDAgJiYgcmVjdXJzaXZlKQorCQlpcnFfZG9tYWluX2ZyZWVfaXJxc19yZWN1cnNpdmUocGFyZW50LCBpcnFfYmFzZSwgbnJfaXJxcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIF9faXJxX2RvbWFpbl9hbGxvY19pcnFzIC0gQWxsb2NhdGUgSVJRcyBmcm9tIGRvbWFpbgorICogQGRvbWFpbjoJZG9tYWluIHRvIGFsbG9jYXRlIGZyb20KKyAqIEBpcnFfYmFzZToJYWxsb2NhdGUgc3BlY2lmaWVkIElSUSBudWJtZXIgaWYgaXJxX2Jhc2UgPj0gMAorICogQG5yX2lycXM6CW51bWJlciBvZiBJUlFzIHRvIGFsbG9jYXRlCisgKiBAbm9kZToJTlVNQSBub2RlIGlkIGZvciBtZW1vcnkgYWxsb2NhdGlvbgorICogQGFyZzoJZG9tYWluIHNwZWNpZmljIGFyZ3VtZW50CisgKiBAcmVhbGxvYzoJSVJRIGRlc2NyaXB0b3JzIGhhdmUgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCBpZiB0cnVlCisgKgorICogQWxsb2NhdGUgSVJRIG51bWJlcnMgYW5kIGluaXRpYWxpemVkIGFsbCBkYXRhIHN0cnVjdHVyZXMgdG8gc3VwcG9ydAorICogaGllcmFyY2h5IElSUSBkb21haW5zLgorICogUGFyYW1ldGVyIEByZWFsbG9jIGlzIG1haW5seSB0byBzdXBwb3J0IGxlZ2FjeSBJUlFzLgorICogUmV0dXJucyBlcnJvciBjb2RlIG9yIGFsbG9jYXRlZCBJUlEgbnVtYmVyCisgKgorICogVGhlIHdob2xlIHByb2Nlc3MgdG8gc2V0dXAgYW4gSVJRIGhhcyBiZWVuIHNwbGl0IGludG8gdHdvIHN0ZXBzLgorICogVGhlIGZpcnN0IHN0ZXAsIF9faXJxX2RvbWFpbl9hbGxvY19pcnFzKCksIGlzIHRvIGFsbG9jYXRlIElSUQorICogZGVzY3JpcHRvciBhbmQgcmVxdWlyZWQgaGFyZHdhcmUgcmVzb3VyY2VzLiBUaGUgc2Vjb25kIHN0ZXAsCisgKiBpcnFfZG9tYWluX2FjdGl2YXRlX2lycSgpLCBpcyB0byBwcm9ncmFtIGhhcmR3YXJlcyB3aXRoIHByZWFsbG9jYXRlZAorICogcmVzb3VyY2VzLiBJbiB0aGlzIHdheSwgaXQncyBlYXNpZXIgdG8gcm9sbGJhY2sgd2hlbiBmYWlsaW5nIHRvCisgKiBhbGxvY2F0ZSByZXNvdXJjZXMuCisgKi8KK2ludCBfX2lycV9kb21haW5fYWxsb2NfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBpbnQgaXJxX2Jhc2UsCisJCQkgICAgdW5zaWduZWQgaW50IG5yX2lycXMsIGludCBub2RlLCB2b2lkICphcmcsCisJCQkgICAgYm9vbCByZWFsbG9jKQoreworCWludCBpLCByZXQsIHZpcnE7CisKKwlpZiAoZG9tYWluID09IE5VTEwpIHsKKwkJZG9tYWluID0gaXJxX2RlZmF1bHRfZG9tYWluOworCQlpZiAoV0FSTighZG9tYWluLCAiZG9tYWluIGlzIE5VTEw7IGNhbm5vdCBhbGxvY2F0ZSBJUlFcbiIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFkb21haW4tPm9wcy0+YWxsb2MpIHsKKwkJcHJfZGVidWcoImRvbWFpbi0+b3BzLT5hbGxvYygpIGlzIE5VTExcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlpZiAocmVhbGxvYyAmJiBpcnFfYmFzZSA+PSAwKSB7CisJCXZpcnEgPSBpcnFfYmFzZTsKKwl9IGVsc2UgeworCQl2aXJxID0gaXJxX2RvbWFpbl9hbGxvY19kZXNjcyhpcnFfYmFzZSwgbnJfaXJxcywgMCwgbm9kZSk7CisJCWlmICh2aXJxIDwgMCkgeworCQkJcHJfZGVidWcoImNhbm5vdCBhbGxvY2F0ZSBJUlEoYmFzZSAlZCwgY291bnQgJWQpXG4iLAorCQkJCSBpcnFfYmFzZSwgbnJfaXJxcyk7CisJCQlyZXR1cm4gdmlycTsKKwkJfQorCX0KKworCWlmIChpcnFfZG9tYWluX2FsbG9jX2lycV9kYXRhKGRvbWFpbiwgdmlycSwgbnJfaXJxcykpIHsKKwkJcHJfZGVidWcoImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIElSUSVkXG4iLCB2aXJxKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9kZXNjOworCX0KKworCW11dGV4X2xvY2soJmlycV9kb21haW5fbXV0ZXgpOworCXJldCA9IGlycV9kb21haW5fYWxsb2NfaXJxc19yZWN1cnNpdmUoZG9tYWluLCB2aXJxLCBucl9pcnFzLCBhcmcpOworCWlmIChyZXQgPCAwKSB7CisJCW11dGV4X3VubG9jaygmaXJxX2RvbWFpbl9tdXRleCk7CisJCWdvdG8gb3V0X2ZyZWVfaXJxX2RhdGE7CisJfQorCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspCisJCWlycV9kb21haW5faW5zZXJ0X2lycSh2aXJxICsgaSk7CisJbXV0ZXhfdW5sb2NrKCZpcnFfZG9tYWluX211dGV4KTsKKworCXJldHVybiB2aXJxOworCitvdXRfZnJlZV9pcnFfZGF0YToKKwlpcnFfZG9tYWluX2ZyZWVfaXJxX2RhdGEodmlycSwgbnJfaXJxcyk7CitvdXRfZnJlZV9kZXNjOgorCWlycV9mcmVlX2Rlc2NzKHZpcnEsIG5yX2lycXMpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9mcmVlX2lycXMgLSBGcmVlIElSUSBudW1iZXIgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzCisgKiBAdmlycToJYmFzZSBJUlEgbnVtYmVyCisgKiBAbnJfaXJxczoJbnVtYmVyIG9mIElSUXMgdG8gZnJlZQorICovCit2b2lkIGlycV9kb21haW5fZnJlZV9pcnFzKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKHZpcnEpOworCWludCBpOworCisJaWYgKFdBUk4oIWRhdGEgfHwgIWRhdGEtPmRvbWFpbiB8fCAhZGF0YS0+ZG9tYWluLT5vcHMtPmZyZWUsCisJCSAiTlVMTCBwb2ludGVyLCBjYW5ub3QgZnJlZSBpcnFcbiIpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZpcnFfZG9tYWluX211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKQorCQlpcnFfZG9tYWluX3JlbW92ZV9pcnEodmlycSArIGkpOworCWlycV9kb21haW5fZnJlZV9pcnFzX3JlY3Vyc2l2ZShkYXRhLT5kb21haW4sIHZpcnEsIG5yX2lycXMpOworCW11dGV4X3VubG9jaygmaXJxX2RvbWFpbl9tdXRleCk7CisKKwlpcnFfZG9tYWluX2ZyZWVfaXJxX2RhdGEodmlycSwgbnJfaXJxcyk7CisJaXJxX2ZyZWVfZGVzY3ModmlycSwgbnJfaXJxcyk7Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9hbGxvY19pcnFzX3BhcmVudCAtIEFsbG9jYXRlIGludGVycnVwdHMgZnJvbSBwYXJlbnQgZG9tYWluCisgKiBAaXJxX2Jhc2U6CUJhc2UgSVJRIG51bWJlcgorICogQG5yX2lycXM6CU51bWJlciBvZiBJUlFzIHRvIGFsbG9jYXRlCisgKiBAYXJnOglBbGxvY2F0aW9uIGRhdGEgKGFyY2gvZG9tYWluIHNwZWNpZmljKQorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGRvbWFpbiBoYXMgYmVlbiBzZXR1cCByZWN1cnNpdmUuIElmIG5vdCBhbGxvY2F0ZQorICogdGhyb3VnaCB0aGUgcGFyZW50IGRvbWFpbi4KKyAqLworaW50IGlycV9kb21haW5fYWxsb2NfaXJxc19wYXJlbnQoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgdW5zaWduZWQgaW50IGlycV9iYXNlLCB1bnNpZ25lZCBpbnQgbnJfaXJxcywKKwkJCQkgdm9pZCAqYXJnKQoreworCS8qIGlycV9kb21haW5fYWxsb2NfaXJxc19yZWN1cnNpdmUoKSBoYXMgY2FsbGVkIHBhcmVudCdzIGFsbG9jKCkgKi8KKwlpZiAoaXJxX2RvbWFpbl9pc19hdXRvX3JlY3Vyc2l2ZShkb21haW4pKQorCQlyZXR1cm4gMDsKKworCWRvbWFpbiA9IGRvbWFpbi0+cGFyZW50OworCWlmIChkb21haW4pCisJCXJldHVybiBpcnFfZG9tYWluX2FsbG9jX2lycXNfcmVjdXJzaXZlKGRvbWFpbiwgaXJxX2Jhc2UsCisJCQkJCQkgICAgICAgbnJfaXJxcywgYXJnKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX2ZyZWVfaXJxc19wYXJlbnQgLSBGcmVlIGludGVycnVwdHMgZnJvbSBwYXJlbnQgZG9tYWluCisgKiBAaXJxX2Jhc2U6CUJhc2UgSVJRIG51bWJlcgorICogQG5yX2lycXM6CU51bWJlciBvZiBJUlFzIHRvIGZyZWUKKyAqCisgKiBDaGVjayB3aGV0aGVyIHRoZSBkb21haW4gaGFzIGJlZW4gc2V0dXAgcmVjdXJzaXZlLiBJZiBub3QgZnJlZQorICogdGhyb3VnaCB0aGUgcGFyZW50IGRvbWFpbi4KKyAqLwordm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc19wYXJlbnQoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgdW5zaWduZWQgaW50IGlycV9iYXNlLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwkvKiBpcnFfZG9tYWluX2ZyZWVfaXJxc19yZWN1cnNpdmUoKSB3aWxsIGNhbGwgcGFyZW50J3MgZnJlZSAqLworCWlmICghaXJxX2RvbWFpbl9pc19hdXRvX3JlY3Vyc2l2ZShkb21haW4pICYmIGRvbWFpbi0+cGFyZW50KQorCQlpcnFfZG9tYWluX2ZyZWVfaXJxc19yZWN1cnNpdmUoZG9tYWluLT5wYXJlbnQsIGlycV9iYXNlLAorCQkJCQkgICAgICAgbnJfaXJxcyk7Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEgLSBDYWxsIGRvbWFpbl9vcHMtPmFjdGl2YXRlIHJlY3Vyc2l2ZWx5IHRvIGFjdGl2YXRlCisgKgkJCSAgICAgaW50ZXJydXB0CisgKiBAaXJxX2RhdGE6CW91dGVybW9zdCBpcnFfZGF0YSBhc3NvY2lhdGVkIHdpdGggaW50ZXJydXB0CisgKgorICogVGhpcyBpcyB0aGUgc2Vjb25kIHN0ZXAgdG8gY2FsbCBkb21haW5fb3BzLT5hY3RpdmF0ZSB0byBwcm9ncmFtIGludGVycnVwdAorICogY29udHJvbGxlcnMsIHNvIHRoZSBpbnRlcnJ1cHQgY291bGQgYWN0dWFsbHkgZ2V0IGRlbGl2ZXJlZC4KKyAqLwordm9pZCBpcnFfZG9tYWluX2FjdGl2YXRlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhKQoreworCWlmIChpcnFfZGF0YSAmJiBpcnFfZGF0YS0+ZG9tYWluKSB7CisJCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW4gPSBpcnFfZGF0YS0+ZG9tYWluOworCisJCWlmIChpcnFfZGF0YS0+cGFyZW50X2RhdGEpCisJCQlpcnFfZG9tYWluX2FjdGl2YXRlX2lycShpcnFfZGF0YS0+cGFyZW50X2RhdGEpOworCQlpZiAoZG9tYWluLT5vcHMtPmFjdGl2YXRlKQorCQkJZG9tYWluLT5vcHMtPmFjdGl2YXRlKGRvbWFpbiwgaXJxX2RhdGEpOworCX0KK30KKworLyoqCisgKiBpcnFfZG9tYWluX2RlYWN0aXZhdGVfaXJxIC0gQ2FsbCBkb21haW5fb3BzLT5kZWFjdGl2YXRlIHJlY3Vyc2l2ZWx5IHRvCisgKgkJCSAgICAgICBkZWFjdGl2YXRlIGludGVycnVwdAorICogQGlycV9kYXRhOiBvdXRlcm1vc3QgaXJxX2RhdGEgYXNzb2NpYXRlZCB3aXRoIGludGVycnVwdAorICoKKyAqIEl0IGNhbGxzIGRvbWFpbl9vcHMtPmRlYWN0aXZhdGUgdG8gcHJvZ3JhbSBpbnRlcnJ1cHQgY29udHJvbGxlcnMgdG8gZGlzYWJsZQorICogaW50ZXJydXB0IGRlbGl2ZXJ5LgorICovCit2b2lkIGlycV9kb21haW5fZGVhY3RpdmF0ZV9pcnEoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSkKK3sKKwlpZiAoaXJxX2RhdGEgJiYgaXJxX2RhdGEtPmRvbWFpbikgeworCQlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluID0gaXJxX2RhdGEtPmRvbWFpbjsKKworCQlpZiAoZG9tYWluLT5vcHMtPmRlYWN0aXZhdGUpCisJCQlkb21haW4tPm9wcy0+ZGVhY3RpdmF0ZShkb21haW4sIGlycV9kYXRhKTsKKwkJaWYgKGlycV9kYXRhLT5wYXJlbnRfZGF0YSkKKwkJCWlycV9kb21haW5fZGVhY3RpdmF0ZV9pcnEoaXJxX2RhdGEtPnBhcmVudF9kYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlycV9kb21haW5fY2hlY2tfaGllcmFyY2h5KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4pCit7CisJLyogSGllcmFyY2h5IGlycV9kb21haW5zIG11c3QgaW1wbGVtZW50IGNhbGxiYWNrIGFsbG9jKCkgKi8KKwlpZiAoZG9tYWluLT5vcHMtPmFsbG9jKQorCQlkb21haW4tPmZsYWdzIHw9IElSUV9ET01BSU5fRkxBR19ISUVSQVJDSFk7Cit9CisjZWxzZQkvKiBDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkgKi8KKy8qKgorICogaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEgLSBHZXQgaXJxX2RhdGEgYXNzb2NpYXRlZCB3aXRoIEB2aXJxIGFuZCBAZG9tYWluCisgKiBAZG9tYWluOglkb21haW4gdG8gbWF0Y2gKKyAqIEB2aXJxOglJUlEgbnVtYmVyIHRvIGdldCBpcnFfZGF0YQorICovCitzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kb21haW5fZ2V0X2lycV9kYXRhKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJCSB1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhID0gaXJxX2dldF9pcnFfZGF0YSh2aXJxKTsKKworCXJldHVybiAoaXJxX2RhdGEgJiYgaXJxX2RhdGEtPmRvbWFpbiA9PSBkb21haW4pID8gaXJxX2RhdGEgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpcnFfZG9tYWluX2NoZWNrX2hpZXJhcmNoeShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKQoreworfQorI2VuZGlmCS8qIENPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggMGE5MTA0Yi4uODA2OTIzNyAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC0xODMsNiArMTgzLDcgQEAKIAlyZXQgPSBjaGlwLT5pcnFfc2V0X2FmZmluaXR5KGRhdGEsIG1hc2ssIGZvcmNlKTsKIAlzd2l0Y2ggKHJldCkgewogCWNhc2UgSVJRX1NFVF9NQVNLX09LOgorCWNhc2UgSVJRX1NFVF9NQVNLX09LX0RPTkU6CiAJCWNwdW1hc2tfY29weShkYXRhLT5hZmZpbml0eSwgbWFzayk7CiAJY2FzZSBJUlFfU0VUX01BU0tfT0tfTk9DT1BZOgogCQlpcnFfc2V0X3RocmVhZF9hZmZpbml0eShkZXNjKTsKQEAgLTYwMCw2ICs2MDEsNyBAQAogCiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIElSUV9TRVRfTUFTS19PSzoKKwljYXNlIElSUV9TRVRfTUFTS19PS19ET05FOgogCQlpcnFkX2NsZWFyKCZkZXNjLT5pcnFfZGF0YSwgSVJRRF9UUklHR0VSX01BU0spOwogCQlpcnFkX3NldCgmZGVzYy0+aXJxX2RhdGEsIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tc2kuYyBiL2tlcm5lbC9pcnEvbXNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxODE2MwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9pcnEvbXNpLmMKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiBsaW51eC9rZXJuZWwvaXJxL21zaS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnAuCisgKiBBdXRob3I6IEppYW5nIExpdSA8amlhbmcubGl1QGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvbW1vbiBjb2RlIHRvIHN1cHBvcnQgTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0IGZvcgorICogUENJIGNvbXBhdGlibGUgYW5kIG5vbiBQQ0kgY29tcGF0aWJsZSBkZXZpY2VzLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKworLyogVGVtcGFyb3J5IHNvbHV0aW9uIGZvciBidWlsZGluZywgd2lsbCBiZSByZW1vdmVkIGxhdGVyICovCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKK3ZvaWQgX19nZXRfY2FjaGVkX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwkqbXNnID0gZW50cnktPm1zZzsKK30KKwordm9pZCBnZXRfY2FjaGVkX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gaXJxX2dldF9tc2lfZGVzYyhpcnEpOworCisJX19nZXRfY2FjaGVkX21zaV9tc2coZW50cnksIG1zZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZXRfY2FjaGVkX21zaV9tc2cpOworCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfTVNJX0lSUV9ET01BSU4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY2hpcF93cml0ZV9tc2lfbXNnKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwKKwkJCQkJICBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCWRhdGEtPmNoaXAtPmlycV93cml0ZV9tc2lfbXNnKGRhdGEsIG1zZyk7Cit9CisKKy8qKgorICogbXNpX2RvbWFpbl9zZXRfYWZmaW5pdHkgLSBHZW5lcmljIGFmZmluaXR5IHNldHRlciBmdW5jdGlvbiBmb3IgTVNJIGRvbWFpbnMKKyAqIEBpcnFfZGF0YToJVGhlIGlycSBkYXRhIGFzc29jaWF0ZWQgdG8gdGhlIGludGVycnVwdAorICogQG1hc2s6CVRoZSBhZmZpbml0eSBtYXNrIHRvIHNldAorICogQGZvcmNlOglGbGFnIHRvIGVuZm9yY2Ugc2V0dGluZyAoZGlzYWJsZSBvbmxpbmUgY2hlY2tzKQorICoKKyAqIEludGVuZGVkIHRvIGJlIHVzZWQgYnkgTVNJIGludGVycnVwdCBjb250cm9sbGVycyB3aGljaCBhcmUKKyAqIGltcGxlbWVudGVkIHdpdGggaGllcmFyY2hpY2FsIGRvbWFpbnMuCisgKi8KK2ludCBtc2lfZG9tYWluX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhLAorCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBib29sIGZvcmNlKQoreworCXN0cnVjdCBpcnFfZGF0YSAqcGFyZW50ID0gaXJxX2RhdGEtPnBhcmVudF9kYXRhOworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKwlpbnQgcmV0OworCisJcmV0ID0gcGFyZW50LT5jaGlwLT5pcnFfc2V0X2FmZmluaXR5KHBhcmVudCwgbWFzaywgZm9yY2UpOworCWlmIChyZXQgPj0gMCAmJiByZXQgIT0gSVJRX1NFVF9NQVNLX09LX0RPTkUpIHsKKwkJQlVHX09OKGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyhpcnFfZGF0YSwgJm1zZykpOworCQlpcnFfY2hpcF93cml0ZV9tc2lfbXNnKGlycV9kYXRhLCAmbXNnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtc2lfZG9tYWluX2FjdGl2YXRlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSkKK3sKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisKKwlCVUdfT04oaXJxX2NoaXBfY29tcG9zZV9tc2lfbXNnKGlycV9kYXRhLCAmbXNnKSk7CisJaXJxX2NoaXBfd3JpdGVfbXNpX21zZyhpcnFfZGF0YSwgJm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIG1zaV9kb21haW5fZGVhY3RpdmF0ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSkKK3sKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCWlycV9jaGlwX3dyaXRlX21zaV9tc2coaXJxX2RhdGEsICZtc2cpOworfQorCitzdGF0aWMgaW50IG1zaV9kb21haW5fYWxsb2Moc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgICAgdW5zaWduZWQgaW50IG5yX2lycXMsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvID0gZG9tYWluLT5ob3N0X2RhdGE7CisJc3RydWN0IG1zaV9kb21haW5fb3BzICpvcHMgPSBpbmZvLT5vcHM7CisJaXJxX2h3X251bWJlcl90IGh3aXJxID0gb3BzLT5nZXRfaHdpcnEoaW5mbywgYXJnKTsKKwlpbnQgaSwgcmV0OworCisJaWYgKGlycV9maW5kX21hcHBpbmcoZG9tYWluLCBod2lycSkgPiAwKQorCQlyZXR1cm4gLUVFWElTVDsKKworCXJldCA9IGlycV9kb21haW5fYWxsb2NfaXJxc19wYXJlbnQoZG9tYWluLCB2aXJxLCBucl9pcnFzLCBhcmcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykgeworCQlyZXQgPSBvcHMtPm1zaV9pbml0KGRvbWFpbiwgaW5mbywgdmlycSArIGksIGh3aXJxICsgaSwgYXJnKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmIChvcHMtPm1zaV9mcmVlKSB7CisJCQkJZm9yIChpLS07IGkgPiAwOyBpLS0pCisJCQkJCW9wcy0+bXNpX2ZyZWUoZG9tYWluLCBpbmZvLCB2aXJxICsgaSk7CisJCQl9CisJCQlpcnFfZG9tYWluX2ZyZWVfaXJxc190b3AoZG9tYWluLCB2aXJxLCBucl9pcnFzKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXNpX2RvbWFpbl9mcmVlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgIHVuc2lnbmVkIGludCBucl9pcnFzKQoreworCXN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8gPSBkb21haW4tPmhvc3RfZGF0YTsKKwlpbnQgaTsKKworCWlmIChpbmZvLT5vcHMtPm1zaV9mcmVlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspCisJCQlpbmZvLT5vcHMtPm1zaV9mcmVlKGRvbWFpbiwgaW5mbywgdmlycSArIGkpOworCX0KKwlpcnFfZG9tYWluX2ZyZWVfaXJxc190b3AoZG9tYWluLCB2aXJxLCBucl9pcnFzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluX29wcyBtc2lfZG9tYWluX29wcyA9IHsKKwkuYWxsb2MJCT0gbXNpX2RvbWFpbl9hbGxvYywKKwkuZnJlZQkJPSBtc2lfZG9tYWluX2ZyZWUsCisJLmFjdGl2YXRlCT0gbXNpX2RvbWFpbl9hY3RpdmF0ZSwKKwkuZGVhY3RpdmF0ZQk9IG1zaV9kb21haW5fZGVhY3RpdmF0ZSwKK307CisKKyNpZmRlZiBHRU5FUklDX01TSV9ET01BSU5fT1BTCitzdGF0aWMgaXJxX2h3X251bWJlcl90IG1zaV9kb21haW5fb3BzX2dldF9od2lycShzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCQkJbXNpX2FsbG9jX2luZm9fdCAqYXJnKQoreworCXJldHVybiBhcmctPmh3aXJxOworfQorCitzdGF0aWMgaW50IG1zaV9kb21haW5fb3BzX3ByZXBhcmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgaW50IG52ZWMsIG1zaV9hbGxvY19pbmZvX3QgKmFyZykKK3sKKwltZW1zZXQoYXJnLCAwLCBzaXplb2YoKmFyZykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtc2lfZG9tYWluX29wc19zZXRfZGVzYyhtc2lfYWxsb2NfaW5mb190ICphcmcsCisJCQkJICAgIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKK3sKKwlhcmctPmRlc2MgPSBkZXNjOworfQorI2Vsc2UKKyNkZWZpbmUgbXNpX2RvbWFpbl9vcHNfZ2V0X2h3aXJxCU5VTEwKKyNkZWZpbmUgbXNpX2RvbWFpbl9vcHNfcHJlcGFyZQkJTlVMTAorI2RlZmluZSBtc2lfZG9tYWluX29wc19zZXRfZGVzYwkJTlVMTAorI2VuZGlmIC8qICFHRU5FUklDX01TSV9ET01BSU5fT1BTICovCisKK3N0YXRpYyBpbnQgbXNpX2RvbWFpbl9vcHNfaW5pdChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJICAgICAgIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZpcnEsIGlycV9od19udW1iZXJfdCBod2lycSwKKwkJCSAgICAgICBtc2lfYWxsb2NfaW5mb190ICphcmcpCit7CisJaXJxX2RvbWFpbl9zZXRfaHdpcnFfYW5kX2NoaXAoZG9tYWluLCB2aXJxLCBod2lycSwgaW5mby0+Y2hpcCwKKwkJCQkgICAgICBpbmZvLT5jaGlwX2RhdGEpOworCWlmIChpbmZvLT5oYW5kbGVyICYmIGluZm8tPmhhbmRsZXJfbmFtZSkgeworCQlfX2lycV9zZXRfaGFuZGxlcih2aXJxLCBpbmZvLT5oYW5kbGVyLCAwLCBpbmZvLT5oYW5kbGVyX25hbWUpOworCQlpZiAoaW5mby0+aGFuZGxlcl9kYXRhKQorCQkJaXJxX3NldF9oYW5kbGVyX2RhdGEodmlycSwgaW5mby0+aGFuZGxlcl9kYXRhKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNpX2RvbWFpbl9vcHNfY2hlY2soc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQlzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtc2lfZG9tYWluX29wcyBtc2lfZG9tYWluX29wc19kZWZhdWx0ID0geworCS5nZXRfaHdpcnEJPSBtc2lfZG9tYWluX29wc19nZXRfaHdpcnEsCisJLm1zaV9pbml0CT0gbXNpX2RvbWFpbl9vcHNfaW5pdCwKKwkubXNpX2NoZWNrCT0gbXNpX2RvbWFpbl9vcHNfY2hlY2ssCisJLm1zaV9wcmVwYXJlCT0gbXNpX2RvbWFpbl9vcHNfcHJlcGFyZSwKKwkuc2V0X2Rlc2MJPSBtc2lfZG9tYWluX29wc19zZXRfZGVzYywKK307CisKK3N0YXRpYyB2b2lkIG1zaV9kb21haW5fdXBkYXRlX2RvbV9vcHMoc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgKm9wcyA9IGluZm8tPm9wczsKKworCWlmIChvcHMgPT0gTlVMTCkgeworCQlpbmZvLT5vcHMgPSAmbXNpX2RvbWFpbl9vcHNfZGVmYXVsdDsKKwkJcmV0dXJuOworCX0KKworCWlmIChvcHMtPmdldF9od2lycSA9PSBOVUxMKQorCQlvcHMtPmdldF9od2lycSA9IG1zaV9kb21haW5fb3BzX2RlZmF1bHQuZ2V0X2h3aXJxOworCWlmIChvcHMtPm1zaV9pbml0ID09IE5VTEwpCisJCW9wcy0+bXNpX2luaXQgPSBtc2lfZG9tYWluX29wc19kZWZhdWx0Lm1zaV9pbml0OworCWlmIChvcHMtPm1zaV9jaGVjayA9PSBOVUxMKQorCQlvcHMtPm1zaV9jaGVjayA9IG1zaV9kb21haW5fb3BzX2RlZmF1bHQubXNpX2NoZWNrOworCWlmIChvcHMtPm1zaV9wcmVwYXJlID09IE5VTEwpCisJCW9wcy0+bXNpX3ByZXBhcmUgPSBtc2lfZG9tYWluX29wc19kZWZhdWx0Lm1zaV9wcmVwYXJlOworCWlmIChvcHMtPnNldF9kZXNjID09IE5VTEwpCisJCW9wcy0+c2V0X2Rlc2MgPSBtc2lfZG9tYWluX29wc19kZWZhdWx0LnNldF9kZXNjOworfQorCitzdGF0aWMgdm9pZCBtc2lfZG9tYWluX3VwZGF0ZV9jaGlwX29wcyhzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvKQoreworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CisKKwlCVUdfT04oIWNoaXApOworCWlmICghY2hpcC0+aXJxX21hc2spCisJCWNoaXAtPmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycTsKKwlpZiAoIWNoaXAtPmlycV91bm1hc2spCisJCWNoaXAtPmlycV91bm1hc2sgPSBwY2lfbXNpX3VubWFza19pcnE7CisJaWYgKCFjaGlwLT5pcnFfc2V0X2FmZmluaXR5KQorCQljaGlwLT5pcnFfc2V0X2FmZmluaXR5ID0gbXNpX2RvbWFpbl9zZXRfYWZmaW5pdHk7Cit9CisKKy8qKgorICogbXNpX2NyZWF0ZV9pcnFfZG9tYWluIC0gQ3JlYXRlIGEgTVNJIGludGVycnVwdCBkb21haW4KKyAqIEBvZl9ub2RlOglPcHRpb25hbCBkZXZpY2UtdHJlZSBub2RlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICogQGluZm86CU1TSSBkb21haW4gaW5mbworICogQHBhcmVudDoJUGFyZW50IGlycSBkb21haW4KKyAqLworc3RydWN0IGlycV9kb21haW4gKm1zaV9jcmVhdGVfaXJxX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCQkgc3RydWN0IGlycV9kb21haW4gKnBhcmVudCkKK3sKKwlpZiAoaW5mby0+ZmxhZ3MgJiBNU0lfRkxBR19VU0VfREVGX0RPTV9PUFMpCisJCW1zaV9kb21haW5fdXBkYXRlX2RvbV9vcHMoaW5mbyk7CisJaWYgKGluZm8tPmZsYWdzICYgTVNJX0ZMQUdfVVNFX0RFRl9DSElQX09QUykKKwkJbXNpX2RvbWFpbl91cGRhdGVfY2hpcF9vcHMoaW5mbyk7CisKKwlyZXR1cm4gaXJxX2RvbWFpbl9hZGRfaGllcmFyY2h5KHBhcmVudCwgMCwgMCwgbm9kZSwgJm1zaV9kb21haW5fb3BzLAorCQkJCQlpbmZvKTsKK30KKworLyoqCisgKiBtc2lfZG9tYWluX2FsbG9jX2lycXMgLSBBbGxvY2F0ZSBpbnRlcnJ1cHRzIGZyb20gYSBNU0kgaW50ZXJydXB0IGRvbWFpbgorICogQGRvbWFpbjoJVGhlIGRvbWFpbiB0byBhbGxvY2F0ZSBmcm9tCisgKiBAZGV2OglQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3Qgb2YgdGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIGludGVycnVwdHMKKyAqCQlhcmUgYWxsb2NhdGVkCisgKiBAbnZlYzoJVGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIHRvIGFsbG9jYXRlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZS4KKyAqLworaW50IG1zaV9kb21haW5fYWxsb2NfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIGludCBudmVjKQoreworCXN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8gPSBkb21haW4tPmhvc3RfZGF0YTsKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgKm9wcyA9IGluZm8tPm9wczsKKwltc2lfYWxsb2NfaW5mb190IGFyZzsKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2M7CisJaW50IGksIHJldCwgdmlycSA9IC0xOworCisJcmV0ID0gb3BzLT5tc2lfY2hlY2soZG9tYWluLCBpbmZvLCBkZXYpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gb3BzLT5tc2lfcHJlcGFyZShkb21haW4sIGRldiwgbnZlYywgJmFyZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvcl9lYWNoX21zaV9lbnRyeShkZXNjLCBkZXYpIHsKKwkJb3BzLT5zZXRfZGVzYygmYXJnLCBkZXNjKTsKKwkJaWYgKGluZm8tPmZsYWdzICYgTVNJX0ZMQUdfSURFTlRJVFlfTUFQKQorCQkJdmlycSA9IChpbnQpb3BzLT5nZXRfaHdpcnEoaW5mbywgJmFyZyk7CisJCWVsc2UKKwkJCXZpcnEgPSAtMTsKKworCQl2aXJxID0gX19pcnFfZG9tYWluX2FsbG9jX2lycXMoZG9tYWluLCB2aXJxLCBkZXNjLT5udmVjX3VzZWQsCisJCQkJCSAgICAgICBkZXZfdG9fbm9kZShkZXYpLCAmYXJnLCBmYWxzZSk7CisJCWlmICh2aXJxIDwgMCkgeworCQkJcmV0ID0gLUVOT1NQQzsKKwkJCWlmIChvcHMtPmhhbmRsZV9lcnJvcikKKwkJCQlyZXQgPSBvcHMtPmhhbmRsZV9lcnJvcihkb21haW4sIGRlc2MsIHJldCk7CisJCQlpZiAob3BzLT5tc2lfZmluaXNoKQorCQkJCW9wcy0+bXNpX2ZpbmlzaCgmYXJnLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5udmVjX3VzZWQ7IGkrKykKKwkJCWlycV9zZXRfbXNpX2Rlc2Nfb2ZmKHZpcnEsIGksIGRlc2MpOworCX0KKworCWlmIChvcHMtPm1zaV9maW5pc2gpCisJCW9wcy0+bXNpX2ZpbmlzaCgmYXJnLCAwKTsKKworCWZvcl9lYWNoX21zaV9lbnRyeShkZXNjLCBkZXYpIHsKKwkJaWYgKGRlc2MtPm52ZWNfdXNlZCA9PSAxKQorCQkJZGV2X2RiZyhkZXYsICJpcnEgJWQgZm9yIE1TSVxuIiwgdmlycSk7CisJCWVsc2UKKwkJCWRldl9kYmcoZGV2LCAiaXJxIFslZC0lZF0gZm9yIE1TSVxuIiwKKwkJCQl2aXJxLCB2aXJxICsgZGVzYy0+bnZlY191c2VkIC0gMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbXNpX2RvbWFpbl9mcmVlX2lycXMgLSBGcmVlIGludGVycnVwdHMgZnJvbSBhIE1TSSBpbnRlcnJ1cHQgQGRvbWFpbiBhc3NvY2lhdGVkIHRwIEBkZXYKKyAqIEBkb21haW46CVRoZSBkb21haW4gdG8gbWFuYWdpbmcgdGhlIGludGVycnVwdHMKKyAqIEBkZXY6CVBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdCBvZiB0aGUgZGV2aWNlIGZvciB3aGljaCB0aGUgaW50ZXJydXB0cworICoJCWFyZSBmcmVlCisgKi8KK3ZvaWQgbXNpX2RvbWFpbl9mcmVlX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtc2lfZGVzYyAqZGVzYzsKKworCWZvcl9lYWNoX21zaV9lbnRyeShkZXNjLCBkZXYpIHsKKwkJaXJxX2RvbWFpbl9mcmVlX2lycXMoZGVzYy0+aXJxLCBkZXNjLT5udmVjX3VzZWQpOworCQlkZXNjLT5pcnEgPSAwOworCX0KK30KKworLyoqCisgKiBtc2lfZ2V0X2RvbWFpbl9pbmZvIC0gR2V0IHRoZSBNU0kgaW50ZXJydXB0IGRvbWFpbiBpbmZvIGZvciBAZG9tYWluCisgKiBAZG9tYWluOglUaGUgaW50ZXJydXB0IGRvbWFpbiB0byByZXRyaWV2ZSBkYXRhIGZyb20KKyAqCisgKiBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBtc2lfZG9tYWluX2luZm8gc3RvcmVkIGluCisgKiBAZG9tYWluLT5ob3N0X2RhdGEuCisgKi8KK3N0cnVjdCBtc2lfZG9tYWluX2luZm8gKm1zaV9nZXRfZG9tYWluX2luZm8oc3RydWN0IGlycV9kb21haW4gKmRvbWFpbikKK3sKKwlyZXR1cm4gKHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKilkb21haW4tPmhvc3RfZGF0YTsKK30KKworI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX01TSV9JUlFfRE9NQUlOICovCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9tdXRleC5jIGIva2VybmVsL2xvY2tpbmcvbXV0ZXguYwppbmRleCBkYWRiZjg4Li40NTQxOTUxIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9tdXRleC5jCisrKyBiL2tlcm5lbC9sb2NraW5nL211dGV4LmMKQEAgLTM3OCw4ICszNzgsMTQgQEAKIAkgKiByZXNjaGVkdWxlIG5vdywgYmVmb3JlIHdlIHRyeS1sb2NrIHRoZSBtdXRleC4gVGhpcyBhdm9pZHMgZ2V0dGluZwogCSAqIHNjaGVkdWxlZCBvdXQgcmlnaHQgYWZ0ZXIgd2Ugb2J0YWluZWQgdGhlIG11dGV4LgogCSAqLwotCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwlpZiAobmVlZF9yZXNjaGVkKCkpIHsKKwkJLyoKKwkJICogV2UgX3Nob3VsZF8gaGF2ZSBUQVNLX1JVTk5JTkcgaGVyZSwgYnV0IGp1c3QgaW4gY2FzZQorCQkgKiB3ZSBkbyBub3QsIG1ha2UgaXQgc28sIG90aGVyd2lzZSB3ZSBtaWdodCBnZXQgc3R1Y2suCisJCSAqLworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCXNjaGVkdWxlX3ByZWVtcHRfZGlzYWJsZWQoKTsKKwl9CiAKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggODhjZWMxZC4uZTUyYTg3MyAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMzA5Nyw2ICszMDk3LDMyIEBACiB9CiAKIC8qCisgKiBDYW4ndCB1c2Ugd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCkgYmVjYXVzZSBvdXIgY29uZGl0aW9uCisgKiAnZmluaXNoZWRfbG9hZGluZygpJyBjb250YWlucyBhIGJsb2NraW5nIHByaW1pdGl2ZSBpdHNlbGYgKG11dGV4X2xvY2spLgorICovCitzdGF0aWMgaW50IHdhaXRfZmluaXNoZWRfbG9hZGluZyhzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJREVGSU5FX1dBSVRfRlVOQyh3YWl0LCB3b2tlbl93YWtlX2Z1bmN0aW9uKTsKKwlpbnQgcmV0ID0gMDsKKworCWFkZF93YWl0X3F1ZXVlKCZtb2R1bGVfd3EsICZ3YWl0KTsKKwlmb3IgKDs7KSB7CisJCWlmIChmaW5pc2hlZF9sb2FkaW5nKG1vZC0+bmFtZSkpCisJCQlicmVhazsKKworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9CisKKwkJd2FpdF93b2tlbigmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7CisJfQorCXJlbW92ZV93YWl0X3F1ZXVlKCZtb2R1bGVfd3EsICZ3YWl0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCiAgKiBXZSB0cnkgdG8gcGxhY2UgaXQgaW4gdGhlIGxpc3Qgbm93IHRvIG1ha2Ugc3VyZSBpdCdzIHVuaXF1ZSBiZWZvcmUKICAqIHdlIGRlZGljYXRlIHRvbyBtYW55IHJlc291cmNlcy4gIEluIHBhcnRpY3VsYXIsIHRlbXBvcmFyeSBwZXJjcHUKICAqIG1lbW9yeSBleGhhdXN0aW9uLgpAQCAtMzExNiw4ICszMTQyLDggQEAKIAkJICAgIHx8IG9sZC0+c3RhdGUgPT0gTU9EVUxFX1NUQVRFX1VORk9STUVEKSB7CiAJCQkvKiBXYWl0IGluIGNhc2UgaXQgZmFpbHMgdG8gbG9hZC4gKi8KIAkJCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKLQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShtb2R1bGVfd3EsCi0JCQkJCSAgICAgICBmaW5pc2hlZF9sb2FkaW5nKG1vZC0+bmFtZSkpOworCisJCQllcnIgPSB3YWl0X2ZpbmlzaGVkX2xvYWRpbmcobW9kKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXRfdW5sb2NrZWQ7CiAJCQlnb3RvIGFnYWluOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCBkMDlkYzVjLi5jZjgwNjcyIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMjQ0LDYgKzI0NCw3IEBACiAgKiAgJ0knIC0gV29ya2luZyBhcm91bmQgc2V2ZXJlIGZpcm13YXJlIGJ1Zy4KICAqICAnTycgLSBPdXQtb2YtdHJlZSBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLgogICogICdFJyAtIFVuc2lnbmVkIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQuCisgKiAgJ0wnIC0gQSBzb2Z0IGxvY2t1cCBoYXMgcHJldmlvdXNseSBvY2N1cnJlZC4KICAqCiAgKglUaGUgc3RyaW5nIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGNhbGwgdG8gcHJpbnRfdGFpbnRlZCgpLgogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jIGIva2VybmVsL3Bvd2VyL3N1c3BlbmQuYwppbmRleCA0Y2E5YTMzLi5jMzQ3ZTNjIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCisrKyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiBzdGF0aWMgaW50IHBsYXRmb3JtX3N1c3BlbmRfcHJlcGFyZV9sYXRlKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gc3RhdGUgPT0gUE1fU1VTUEVORF9GUkVFWkUgJiYgZnJlZXplX29wcy0+cHJlcGFyZSA/CisJcmV0dXJuIHN0YXRlID09IFBNX1NVU1BFTkRfRlJFRVpFICYmIGZyZWV6ZV9vcHMgJiYgZnJlZXplX29wcy0+cHJlcGFyZSA/CiAJCWZyZWV6ZV9vcHMtPnByZXBhcmUoKSA6IDA7CiB9CiAKQEAgLTE2NCw3ICsxNjQsNyBAQAogCiBzdGF0aWMgdm9pZCBwbGF0Zm9ybV9yZXN1bWVfZWFybHkoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogewotCWlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX0ZSRUVaRSAmJiBmcmVlemVfb3BzLT5yZXN0b3JlKQorCWlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX0ZSRUVaRSAmJiBmcmVlemVfb3BzICYmIGZyZWV6ZV9vcHMtPnJlc3RvcmUpCiAJCWZyZWV6ZV9vcHMtPnJlc3RvcmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay9wcmludGsuYyBiL2tlcm5lbC9wcmludGsvcHJpbnRrLmMKaW5kZXggY2VkMmI4NC4uYzg3NTVlNyAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrL3ByaW50ay5jCkBAIC00ODAsNyArNDgwLDcgQEAKIAkgICAgICAgdHlwZSAhPSBTWVNMT0dfQUNUSU9OX1NJWkVfQlVGRkVSOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyhpbnQgdHlwZSwgYm9vbCBmcm9tX2ZpbGUpCitpbnQgY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKIHsKIAkvKgogCSAqIElmIHRoaXMgaXMgZnJvbSAvcHJvYy9rbXNnIGFuZCB3ZSd2ZSBhbHJlYWR5IG9wZW5lZCBpdCwgdGhlbiB3ZSd2ZQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9NYWtlZmlsZSBiL2tlcm5lbC9yY3UvTWFrZWZpbGUKaW5kZXggODA3Y2NmYi4uZTZmYWU1MCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9NYWtlZmlsZQorKysgYi9rZXJuZWwvcmN1L01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogb2JqLXkgKz0gdXBkYXRlLm8gc3JjdS5vCiBvYmotJChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgKz0gcmN1dG9ydHVyZS5vCiBvYmotJChDT05GSUdfVFJFRV9SQ1UpICs9IHRyZWUubwotb2JqLSQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpICs9IHRyZWUubworb2JqLSQoQ09ORklHX1BSRUVNUFRfUkNVKSArPSB0cmVlLm8KIG9iai0kKENPTkZJR19UUkVFX1JDVV9UUkFDRSkgKz0gdHJlZV90cmFjZS5vCiBvYmotJChDT05GSUdfVElOWV9SQ1UpICs9IHRpbnkubwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmgKaW5kZXggZmYxYTZkZS4uMDdiYjAyZSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9yY3UuaAorKysgYi9rZXJuZWwvcmN1L3JjdS5oCkBAIC0xMzUsNCArMTM1LDYgQEAKICAqLwogI2RlZmluZSBUUFMoeCkgIHRyYWNlcG9pbnRfc3RyaW5nKHgpCiAKK3ZvaWQgcmN1X2Vhcmx5X2Jvb3RfdGVzdHModm9pZCk7CisKICNlbmRpZiAvKiBfX0xJTlVYX1JDVV9IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCmluZGV4IDI0MGZhOTAuLjRkNTU5YmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCkBAIC04MTIsNiArODEyLDcgQEAKIAkJY3VyX29wcy0+Y2JfYmFycmllcigpOwogCQlzdHV0dGVyX3dhaXQoInJjdV90b3J0dXJlX2NiZmxvb2QiKTsKIAl9IHdoaWxlICghdG9ydHVyZV9tdXN0X3N0b3AoKSk7CisJdmZyZWUocmhwKTsKIAl0b3J0dXJlX2t0aHJlYWRfc3RvcHBpbmcoInJjdV90b3J0dXJlX2NiZmxvb2QiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmMKaW5kZXggYzA2MjNmYy4uMGRiNTY0OSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90aW55LmMKKysrIGIva2VybmVsL3JjdS90aW55LmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICogYmUgY2FsbGVkIGZyb20gaGFyZGlycSBjb250ZXh0LiAgSXQgaXMgbm9ybWFsbHkgY2FsbGVkIGZyb20gdGhlCiAgKiBzY2hlZHVsaW5nLWNsb2NrIGludGVycnVwdC4KICAqLwotdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKQordm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCB1c2VyKQogewogCVJDVV9UUkFDRShjaGVja19jcHVfc3RhbGxzKCkpOwogCWlmICh1c2VyIHx8IHJjdV9pc19jcHVfcnJ1cHRfZnJvbV9pZGxlKCkpCkBAIC0zODAsNyArMzgwLDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1X2JoKTsKIAotdm9pZCByY3VfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKIHsKIAlvcGVuX3NvZnRpcnEoUkNVX1NPRlRJUlEsIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyk7CisKKwlyY3VfZWFybHlfYm9vdF90ZXN0cygpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuYwppbmRleCA5ODE1NDQ3Li43NjgwZmMyIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuYworKysgYi9rZXJuZWwvcmN1L3RyZWUuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJLm5hbWUgPSBSQ1VfU1RBVEVfTkFNRShzbmFtZSksIFwKIAkuYWJiciA9IHNhYmJyLCBcCiB9OyBcCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHNuYW1lIyNfZGF0YSkKK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCByY3VfZGF0YSwgc25hbWUjI19kYXRhKQogCiBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X3NjaGVkLCAncycsIGNhbGxfcmN1X3NjaGVkKTsKIFJDVV9TVEFURV9JTklUSUFMSVpFUihyY3VfYmgsICdiJywgY2FsbF9yY3VfYmgpOwpAQCAtMTUyLDE5ICsxNTIsNiBAQAogICovCiBzdGF0aWMgaW50IHJjdV9zY2hlZHVsZXJfZnVsbHlfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CiAKLSNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCi0KLS8qCi0gKiBDb250cm9sIHZhcmlhYmxlcyBmb3IgcGVyLUNQVSBhbmQgcGVyLXJjdV9ub2RlIGt0aHJlYWRzLiAgVGhlc2UKLSAqIGhhbmRsZSBhbGwgZmxhdm9ycyBvZiBSQ1UuCi0gKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgcmN1X2NwdV9rdGhyZWFkX3Rhc2spOwotREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCByY3VfY3B1X2t0aHJlYWRfc3RhdHVzKTsKLURFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgcmN1X2NwdV9rdGhyZWFkX2xvb3BzKTsKLURFRklORV9QRVJfQ1BVKGNoYXIsIHJjdV9jcHVfaGFzX3dvcmspOwotCi0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KLQogc3RhdGljIHZvaWQgcmN1X2Jvb3N0X2t0aHJlYWRfc2V0YWZmaW5pdHkoc3RydWN0IHJjdV9ub2RlICpybnAsIGludCBvdXRnb2luZ2NwdSk7CiBzdGF0aWMgdm9pZCBpbnZva2VfcmN1X2NvcmUodm9pZCk7CiBzdGF0aWMgdm9pZCBpbnZva2VfcmN1X2NhbGxiYWNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKQEAgLTI4NiwxMSArMjczLDExIEBACiAgKiBhbmQgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcHJlZW1wdGlibGUgUkNVLgogICogVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgcHJlZW1wdGlvbi4KICAqLwotdm9pZCByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KQordm9pZCByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCh2b2lkKQogewogCXRyYWNlX3JjdV91dGlsaXphdGlvbihUUFMoIlN0YXJ0IGNvbnRleHQgc3dpdGNoIikpOwogCXJjdV9zY2hlZF9xcygpOwotCXJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goY3B1KTsKKwlyY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKCk7CiAJaWYgKHVubGlrZWx5KHJhd19jcHVfcmVhZChyY3Vfc2NoZWRfcXNfbWFzaykpKQogCQlyY3VfbW9tZW50YXJ5X2R5bnRpY2tfaWRsZSgpOwogCXRyYWNlX3JjdV91dGlsaXphdGlvbihUUFMoIkVuZCBjb250ZXh0IHN3aXRjaCIpKTsKQEAgLTMyNSw3ICszMTIsNyBAQAogCQkJCSAgdW5zaWduZWQgbG9uZyAqbWF4aiksCiAJCQkgYm9vbCAqaXNpZGxlLCB1bnNpZ25lZCBsb25nICptYXhqKTsKIHN0YXRpYyB2b2lkIGZvcmNlX3F1aWVzY2VudF9zdGF0ZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwotc3RhdGljIGludCByY3VfcGVuZGluZyhpbnQgY3B1KTsKK3N0YXRpYyBpbnQgcmN1X3BlbmRpbmcodm9pZCk7CiAKIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1Utc2NoZWQgYmF0Y2hlcyBwcm9jZXNzZWQgdGh1cyBmYXIgZm9yIGRlYnVnICYgc3RhdHMuCkBAIC01MTAsMTEgKzQ5NywxMSBAQAogICogd2UgcmVhbGx5IGhhdmUgZW50ZXJlZCBpZGxlLCBhbmQgbXVzdCBkbyB0aGUgYXBwcm9wcmlhdGUgYWNjb3VudGluZy4KICAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGRpc2FibGVkIGludGVycnVwdHMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9lcXNfZW50ZXJfY29tbW9uKHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGxvbmcgbG9uZyBvbGR2YWwsCi0JCQkJYm9vbCB1c2VyKQorc3RhdGljIHZvaWQgcmN1X2Vxc19lbnRlcl9jb21tb24obG9uZyBsb25nIG9sZHZhbCwgYm9vbCB1c2VyKQogewogCXN0cnVjdCByY3Vfc3RhdGUgKnJzcDsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKKwlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gdGhpc19jcHVfcHRyKCZyY3VfZHludGlja3MpOwogCiAJdHJhY2VfcmN1X2R5bnRpY2soVFBTKCJTdGFydCIpLCBvbGR2YWwsIHJkdHAtPmR5bnRpY2tzX25lc3RpbmcpOwogCWlmICghdXNlciAmJiAhaXNfaWRsZV90YXNrKGN1cnJlbnQpKSB7CkBAIC01MzEsNyArNTE4LDcgQEAKIAkJcmRwID0gdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKIAkJZG9fbm9jYl9kZWZlcnJlZF93YWtldXAocmRwKTsKIAl9Ci0JcmN1X3ByZXBhcmVfZm9yX2lkbGUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyY3VfcHJlcGFyZV9mb3JfaWRsZSgpOwogCS8qIENQVXMgc2VlaW5nIGF0b21pY19pbmMoKSBtdXN0IHNlZSBwcmlvciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KIAlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsgIC8qIFNlZSBhYm92ZS4gKi8KIAlhdG9taWNfaW5jKCZyZHRwLT5keW50aWNrcyk7CkBAIC01NjUsNyArNTUyLDcgQEAKIAlXQVJOX09OX09OQ0UoKG9sZHZhbCAmIERZTlRJQ0tfVEFTS19ORVNUX01BU0spID09IDApOwogCWlmICgob2xkdmFsICYgRFlOVElDS19UQVNLX05FU1RfTUFTSykgPT0gRFlOVElDS19UQVNLX05FU1RfVkFMVUUpIHsKIAkJcmR0cC0+ZHludGlja3NfbmVzdGluZyA9IDA7Ci0JCXJjdV9lcXNfZW50ZXJfY29tbW9uKHJkdHAsIG9sZHZhbCwgdXNlcik7CisJCXJjdV9lcXNfZW50ZXJfY29tbW9uKG9sZHZhbCwgdXNlcik7CiAJfSBlbHNlIHsKIAkJcmR0cC0+ZHludGlja3NfbmVzdGluZyAtPSBEWU5USUNLX1RBU0tfTkVTVF9WQUxVRTsKIAl9CkBAIC01ODksNyArNTc2LDcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlyY3VfZXFzX2VudGVyKGZhbHNlKTsKLQlyY3Vfc3lzaWRsZV9lbnRlcih0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyksIDApOworCXJjdV9zeXNpZGxlX2VudGVyKDApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9pZGxlX2VudGVyKTsKQEAgLTYzOSw4ICs2MjYsOCBAQAogCWlmIChyZHRwLT5keW50aWNrc19uZXN0aW5nKQogCQl0cmFjZV9yY3VfZHludGljayhUUFMoIi0tPSIpLCBvbGR2YWwsIHJkdHAtPmR5bnRpY2tzX25lc3RpbmcpOwogCWVsc2UKLQkJcmN1X2Vxc19lbnRlcl9jb21tb24ocmR0cCwgb2xkdmFsLCB0cnVlKTsKLQlyY3Vfc3lzaWRsZV9lbnRlcihyZHRwLCAxKTsKKwkJcmN1X2Vxc19lbnRlcl9jb21tb24ob2xkdmFsLCB0cnVlKTsKKwlyY3Vfc3lzaWRsZV9lbnRlcigxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTY1MSwxNiArNjM4LDE3IEBACiAgKiB3ZSByZWFsbHkgaGF2ZSBleGl0ZWQgaWRsZSwgYW5kIG11c3QgZG8gdGhlIGFwcHJvcHJpYXRlIGFjY291bnRpbmcuCiAgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzLgogICovCi1zdGF0aWMgdm9pZCByY3VfZXFzX2V4aXRfY29tbW9uKHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGxvbmcgbG9uZyBvbGR2YWwsCi0JCQkgICAgICAgaW50IHVzZXIpCitzdGF0aWMgdm9pZCByY3VfZXFzX2V4aXRfY29tbW9uKGxvbmcgbG9uZyBvbGR2YWwsIGludCB1c2VyKQogeworCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSB0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyk7CisKIAlyY3VfZHludGlja3NfdGFza19leGl0KCk7CiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7ICAvKiBGb3JjZSBvcmRlcmluZyB3L3ByZXZpb3VzIHNvam91cm4uICovCiAJYXRvbWljX2luYygmcmR0cC0+ZHludGlja3MpOwogCS8qIENQVXMgc2VlaW5nIGF0b21pY19pbmMoKSBtdXN0IHNlZSBsYXRlciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KIAlzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAgLyogU2VlIGFib3ZlLiAqLwogCVdBUk5fT05fT05DRSghKGF0b21pY19yZWFkKCZyZHRwLT5keW50aWNrcykgJiAweDEpKTsKLQlyY3VfY2xlYW51cF9hZnRlcl9pZGxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZSgpOwogCXRyYWNlX3JjdV9keW50aWNrKFRQUygiRW5kIiksIG9sZHZhbCwgcmR0cC0+ZHludGlja3NfbmVzdGluZyk7CiAJaWYgKCF1c2VyICYmICFpc19pZGxlX3Rhc2soY3VycmVudCkpIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICppZGxlIF9fbWF5YmVfdW51c2VkID0KQEAgLTY5MSw3ICs2NzksNyBAQAogCQlyZHRwLT5keW50aWNrc19uZXN0aW5nICs9IERZTlRJQ0tfVEFTS19ORVNUX1ZBTFVFOwogCX0gZWxzZSB7CiAJCXJkdHAtPmR5bnRpY2tzX25lc3RpbmcgPSBEWU5USUNLX1RBU0tfRVhJVF9JRExFOwotCQlyY3VfZXFzX2V4aXRfY29tbW9uKHJkdHAsIG9sZHZhbCwgdXNlcik7CisJCXJjdV9lcXNfZXhpdF9jb21tb24ob2xkdmFsLCB1c2VyKTsKIAl9CiB9CiAKQEAgLTcxMiw3ICs3MDAsNyBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXJjdV9lcXNfZXhpdChmYWxzZSk7Ci0JcmN1X3N5c2lkbGVfZXhpdCh0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyksIDApOworCXJjdV9zeXNpZGxlX2V4aXQoMCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2lkbGVfZXhpdCk7CkBAIC03NjMsOCArNzUxLDggQEAKIAlpZiAob2xkdmFsKQogCQl0cmFjZV9yY3VfZHludGljayhUUFMoIisrPSIpLCBvbGR2YWwsIHJkdHAtPmR5bnRpY2tzX25lc3RpbmcpOwogCWVsc2UKLQkJcmN1X2Vxc19leGl0X2NvbW1vbihyZHRwLCBvbGR2YWwsIHRydWUpOwotCXJjdV9zeXNpZGxlX2V4aXQocmR0cCwgMSk7CisJCXJjdV9lcXNfZXhpdF9jb21tb24ob2xkdmFsLCB0cnVlKTsKKwlyY3Vfc3lzaWRsZV9leGl0KDEpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMjM4Nyw3ICsyMzc1LDcgQEAKICAqIGludm9rZWQgZnJvbSB0aGUgc2NoZWR1bGluZy1jbG9jayBpbnRlcnJ1cHQuICBJZiByY3VfcGVuZGluZyByZXR1cm5zCiAgKiBmYWxzZSwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gaW52b2tpbmcgcmN1X2NoZWNrX2NhbGxiYWNrcygpLgogICovCi12b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpCit2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IHVzZXIpCiB7CiAJdHJhY2VfcmN1X3V0aWxpemF0aW9uKFRQUygiU3RhcnQgc2NoZWR1bGVyLXRpY2siKSk7CiAJaW5jcmVtZW50X2NwdV9zdGFsbF90aWNrcygpOwpAQCAtMjQxOSw4ICsyNDA3LDggQEAKIAogCQlyY3VfYmhfcXMoKTsKIAl9Ci0JcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGNwdSk7Ci0JaWYgKHJjdV9wZW5kaW5nKGNwdSkpCisJcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKCk7CisJaWYgKHJjdV9wZW5kaW5nKCkpCiAJCWludm9rZV9yY3VfY29yZSgpOwogCWlmICh1c2VyKQogCQlyY3Vfbm90ZV92b2x1bnRhcnlfY29udGV4dF9zd2l0Y2goY3VycmVudCk7CkBAIC0yOTYzLDYgKzI5NTEsOSBAQAogICovCiB2b2lkIHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCh2b2lkKQogeworCWNwdW1hc2tfdmFyX3QgY207CisJYm9vbCBjbWEgPSBmYWxzZTsKKwlpbnQgY3B1OwogCWxvbmcgZmlyc3RzbmFwLCBzLCBzbmFwOwogCWludCB0cnljb3VudCA9IDA7CiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwID0gJnJjdV9zY2hlZF9zdGF0ZTsKQEAgLTI5OTcsMTEgKzI5ODgsMjYgQEAKIAl9CiAJV0FSTl9PTl9PTkNFKGNwdV9pc19vZmZsaW5lKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpKTsKIAorCS8qIE9mZmxpbmUgQ1BVcywgaWRsZSBDUFVzLCBhbmQgYW55IENQVSB3ZSBydW4gb24gYXJlIHF1aWVzY2VudC4gKi8KKwljbWEgPSB6YWxsb2NfY3B1bWFza192YXIoJmNtLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21hKSB7CisJCWNwdW1hc2tfY29weShjbSwgY3B1X29ubGluZV9tYXNrKTsKKwkJY3B1bWFza19jbGVhcl9jcHUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgY20pOworCQlmb3JfZWFjaF9jcHUoY3B1LCBjbSkgeworCQkJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9ICZwZXJfY3B1KHJjdV9keW50aWNrcywgY3B1KTsKKworCQkJaWYgKCEoYXRvbWljX2FkZF9yZXR1cm4oMCwgJnJkdHAtPmR5bnRpY2tzKSAmIDB4MSkpCisJCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBjbSk7CisJCX0KKwkJaWYgKGNwdW1hc2tfd2VpZ2h0KGNtKSA9PSAwKQorCQkJZ290byBhbGxfY3B1c19pZGxlOworCX0KKwogCS8qCiAJICogRWFjaCBwYXNzIHRocm91Z2ggdGhlIGZvbGxvd2luZyBsb29wIGF0dGVtcHRzIHRvIGZvcmNlIGEKIAkgKiBjb250ZXh0IHN3aXRjaCBvbiBlYWNoIENQVS4KIAkgKi8KLQl3aGlsZSAodHJ5X3N0b3BfY3B1cyhjcHVfb25saW5lX21hc2ssCisJd2hpbGUgKHRyeV9zdG9wX2NwdXMoY21hID8gY20gOiBjcHVfb25saW5lX21hc2ssCiAJCQkgICAgIHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZF9jcHVfc3RvcCwKIAkJCSAgICAgTlVMTCkgPT0gLUVBR0FJTikgewogCQlwdXRfb25saW5lX2NwdXMoKTsKQEAgLTMwMTMsNiArMzAxOSw3IEBACiAJCQkvKiBlbnN1cmUgdGVzdCBoYXBwZW5zIGJlZm9yZSBjYWxsZXIga2ZyZWUgKi8KIAkJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyAvKiBeXl4gKi8KIAkJCWF0b21pY19sb25nX2luYygmcnNwLT5leHBlZGl0ZWRfd29ya2RvbmUxKTsKKwkJCWZyZWVfY3B1bWFza192YXIoY20pOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTMwMjIsNiArMzAyOSw3IEBACiAJCX0gZWxzZSB7CiAJCQl3YWl0X3JjdV9ncChjYWxsX3JjdV9zY2hlZCk7CiAJCQlhdG9taWNfbG9uZ19pbmMoJnJzcC0+ZXhwZWRpdGVkX25vcm1hbCk7CisJCQlmcmVlX2NwdW1hc2tfdmFyKGNtKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0zMDMxLDYgKzMwMzksNyBAQAogCQkJLyogZW5zdXJlIHRlc3QgaGFwcGVucyBiZWZvcmUgY2FsbGVyIGtmcmVlICovCiAJCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsgLyogXl5eICovCiAJCQlhdG9taWNfbG9uZ19pbmMoJnJzcC0+ZXhwZWRpdGVkX3dvcmtkb25lMik7CisJCQlmcmVlX2NwdW1hc2tfdmFyKGNtKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0zMDQ1LDYgKzMwNTQsNyBAQAogCQkJLyogQ1BVIGhvdHBsdWcgb3BlcmF0aW9uIGluIGZsaWdodCwgdXNlIG5vcm1hbCBHUC4gKi8KIAkJCXdhaXRfcmN1X2dwKGNhbGxfcmN1X3NjaGVkKTsKIAkJCWF0b21pY19sb25nX2luYygmcnNwLT5leHBlZGl0ZWRfbm9ybWFsKTsKKwkJCWZyZWVfY3B1bWFza192YXIoY20pOwogCQkJcmV0dXJuOwogCQl9CiAJCXNuYXAgPSBhdG9taWNfbG9uZ19yZWFkKCZyc3AtPmV4cGVkaXRlZF9zdGFydCk7CkBAIC0zMDUyLDYgKzMwNjIsOSBAQAogCX0KIAlhdG9taWNfbG9uZ19pbmMoJnJzcC0+ZXhwZWRpdGVkX3N0b3BwZWRjcHVzKTsKIAorYWxsX2NwdXNfaWRsZToKKwlmcmVlX2NwdW1hc2tfdmFyKGNtKTsKKwogCS8qCiAJICogRXZlcnlvbmUgdXAgdG8gb3VyIG1vc3QgcmVjZW50IGZldGNoIGlzIGNvdmVyZWQgYnkgb3VyIGdyYWNlCiAJICogcGVyaW9kLiAgVXBkYXRlIHRoZSBjb3VudGVyLCBidXQgb25seSBpZiBvdXIgd29yayBpcyBzdGlsbApAQCAtMzE0MywxMiArMzE1NiwxMiBAQAogICogYnkgdGhlIGN1cnJlbnQgQ1BVLCByZXR1cm5pbmcgMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUKICAqIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0gYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgogICovCi1zdGF0aWMgaW50IHJjdV9wZW5kaW5nKGludCBjcHUpCitzdGF0aWMgaW50IHJjdV9wZW5kaW5nKHZvaWQpCiB7CiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwOwogCiAJZm9yX2VhY2hfcmN1X2ZsYXZvcihyc3ApCi0JCWlmIChfX3JjdV9wZW5kaW5nKHJzcCwgcGVyX2NwdV9wdHIocnNwLT5yZGEsIGNwdSkpKQorCQlpZiAoX19yY3VfcGVuZGluZyhyc3AsIHRoaXNfY3B1X3B0cihyc3AtPnJkYSkpKQogCQkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTU4LDcgKzMxNzEsNyBAQAogICogbm9uLU5VTEwsIHN0b3JlIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciBhbGwgY2FsbGJhY2tzIGFyZSBsYXp5LgogICogKElmIHRoZXJlIGFyZSBubyBjYWxsYmFja3MsIGFsbCBvZiB0aGVtIGFyZSBkZWVtZWQgdG8gYmUgbGF6eS4pCiAgKi8KLXN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgcmN1X2NwdV9oYXNfY2FsbGJhY2tzKGludCBjcHUsIGJvb2wgKmFsbF9sYXp5KQorc3RhdGljIGludCBfX21heWJlX3VudXNlZCByY3VfY3B1X2hhc19jYWxsYmFja3MoYm9vbCAqYWxsX2xhenkpCiB7CiAJYm9vbCBhbCA9IHRydWU7CiAJYm9vbCBoYyA9IGZhbHNlOwpAQCAtMzE2Niw3ICszMTc5LDcgQEAKIAlzdHJ1Y3QgcmN1X3N0YXRlICpyc3A7CiAKIAlmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkgewotCQlyZHAgPSBwZXJfY3B1X3B0cihyc3AtPnJkYSwgY3B1KTsKKwkJcmRwID0gdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKIAkJaWYgKCFyZHAtPm54dGxpc3QpCiAJCQljb250aW51ZTsKIAkJaGMgPSB0cnVlOwpAQCAtMzQ4NSw4ICszNDk4LDEwIEBACiAJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgotCQlmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkKKwkJZm9yX2VhY2hfcmN1X2ZsYXZvcihyc3ApIHsKIAkJCXJjdV9jbGVhbnVwX2RlYWRfY3B1KGNwdSwgcnNwKTsKKwkJCWRvX25vY2JfZGVmZXJyZWRfd2FrZXVwKHBlcl9jcHVfcHRyKHJzcC0+cmRhLCBjcHUpKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTM3NjYsNiArMzc4MSw4IEBACiAJcG1fbm90aWZpZXIocmN1X3BtX25vdGlmeSwgMCk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiAJCXJjdV9jcHVfbm90aWZ5KE5VTEwsIENQVV9VUF9QUkVQQVJFLCAodm9pZCAqKShsb25nKWNwdSk7CisKKwlyY3VfZWFybHlfYm9vdF90ZXN0cygpOwogfQogCiAjaW5jbHVkZSAidHJlZV9wbHVnaW4uaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmgKaW5kZXggYmJkYzQ1ZC4uOGU3YjE4NCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmgKKysrIGIva2VybmVsL3JjdS90cmVlLmgKQEAgLTEzOSw3ICsxMzksNyBAQAogCXVuc2lnbmVkIGxvbmcgZXhwbWFzazsJLyogR3JvdXBzIHRoYXQgaGF2ZSAtPmJsa2RfdGFza3MgKi8KIAkJCQkvKiAgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGRyYWluIHRvIGFsbG93IHRoZSAqLwogCQkJCS8qICBjdXJyZW50IGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgdG8gKi8KLQkJCQkvKiAgY29tcGxldGUgKG9ubHkgZm9yIFRSRUVfUFJFRU1QVF9SQ1UpLiAqLworCQkJCS8qICBjb21wbGV0ZSAob25seSBmb3IgUFJFRU1QVF9SQ1UpLiAqLwogCXVuc2lnbmVkIGxvbmcgcXNtYXNraW5pdDsKIAkJCQkvKiBQZXItR1AgaW5pdGlhbCB2YWx1ZSBmb3IgcXNtYXNrICYgZXhwbWFzay4gKi8KIAl1bnNpZ25lZCBsb25nIGdycG1hc2s7CS8qIE1hc2sgdG8gYXBwbHkgdG8gcGFyZW50IHFzbWFzay4gKi8KQEAgLTUzMCwxMCArNTMwLDEwIEBACiBleHRlcm4gc3RydWN0IHJjdV9zdGF0ZSByY3VfYmhfc3RhdGU7CiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfYmhfZGF0YSk7CiAKLSNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVQogZXh0ZXJuIHN0cnVjdCByY3Vfc3RhdGUgcmN1X3ByZWVtcHRfc3RhdGU7CiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfcHJlZW1wdF9kYXRhKTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVICovCiAKICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCiBERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgaW50LCByY3VfY3B1X2t0aHJlYWRfc3RhdHVzKTsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHJjdXRyZWVfcGx1Z2luLmggKi8KIHN0YXRpYyB2b2lkIHJjdV9ib290dXBfYW5ub3VuY2Uodm9pZCk7CiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSk7CitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKHZvaWQpOwogc3RhdGljIGludCByY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyB2b2lkIHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoc3RydWN0IHJjdV9ub2RlICpybnAsCkBAIC01NjEsMTIgKzU2MSwxMiBAQAogCQkJCSAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCiAJCQkJICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKHZvaWQpOwogdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpOwotI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKQorI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19QUkVFTVBUX1JDVSkKIHN0YXRpYyB2b2lkIHJjdV9yZXBvcnRfZXhwX3JucChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAogCQkJICAgICAgIGJvb2wgd2FrZSk7Ci0jZW5kaWYgLyogI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKSAqLworI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpICovCiBzdGF0aWMgdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpOwogc3RhdGljIHZvaWQgcmN1X2luaXRpYXRlX2Jvb3N0KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2Jvb3N0X3N0YXJ0X2dwKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKQEAgLTU3OSw4ICs1NzksOCBAQAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcmN1X3NwYXduX2Jvb3N0X2t0aHJlYWRzKHZvaWQpOwogc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfa3RocmVhZHMoaW50IGNwdSk7Ci1zdGF0aWMgdm9pZCByY3VfY2xlYW51cF9hZnRlcl9pZGxlKGludCBjcHUpOwotc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfZm9yX2lkbGUoaW50IGNwdSk7CitzdGF0aWMgdm9pZCByY3VfY2xlYW51cF9hZnRlcl9pZGxlKHZvaWQpOworc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfZm9yX2lkbGUodm9pZCk7CiBzdGF0aWMgdm9pZCByY3VfaWRsZV9jb3VudF9jYWxsYmFja3NfcG9zdGVkKHZvaWQpOwogc3RhdGljIHZvaWQgcHJpbnRfY3B1X3N0YWxsX2luZm9fYmVnaW4odm9pZCk7CiBzdGF0aWMgdm9pZCBwcmludF9jcHVfc3RhbGxfaW5mbyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGludCBjcHUpOwpAQCAtNjA2LDggKzYwNiw4IEBACiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFUgKi8KIHN0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIHJjdV9raWNrX25vaHpfY3B1KGludCBjcHUpOwogc3RhdGljIGJvb2wgaW5pdF9ub2NiX2NhbGxiYWNrX2xpc3Qoc3RydWN0IHJjdV9kYXRhICpyZHApOwotc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZW50ZXIoc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCwgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGludCBpcnEpOworc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZW50ZXIoaW50IGlycSk7CitzdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KGludCBpcnEpOwogc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfY2hlY2tfY3B1KHN0cnVjdCByY3VfZGF0YSAqcmRwLCBib29sICppc2lkbGUsCiAJCQkJICB1bnNpZ25lZCBsb25nICptYXhqKTsKIHN0YXRpYyBib29sIGlzX3N5c2lkbGVfcmN1X3N0YXRlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1L3RyZWVfcGx1Z2luLmgKaW5kZXggYzFkN2YyNy4uM2VjODVjYiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3UvdHJlZV9wbHVnaW4uaApAQCAtMzAsMTQgKzMwLDI0IEBACiAjaW5jbHVkZSA8bGludXgvc21wYm9vdC5oPgogI2luY2x1ZGUgIi4uL3RpbWUvdGljay1pbnRlcm5hbC5oIgogCi0jZGVmaW5lIFJDVV9LVEhSRUFEX1BSSU8gMQotCiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCiAjaW5jbHVkZSAiLi4vbG9ja2luZy9ydG11dGV4X2NvbW1vbi5oIgotI2RlZmluZSBSQ1VfQk9PU1RfUFJJTyBDT05GSUdfUkNVX0JPT1NUX1BSSU8KLSNlbHNlCi0jZGVmaW5lIFJDVV9CT09TVF9QUklPIFJDVV9LVEhSRUFEX1BSSU8KLSNlbmRpZgorCisvKiByY3VjL3JjdWIga3RocmVhZCByZWFsdGltZSBwcmlvcml0eSAqLworc3RhdGljIGludCBrdGhyZWFkX3ByaW8gPSBDT05GSUdfUkNVX0tUSFJFQURfUFJJTzsKK21vZHVsZV9wYXJhbShrdGhyZWFkX3ByaW8sIGludCwgMDY0NCk7CisKKy8qCisgKiBDb250cm9sIHZhcmlhYmxlcyBmb3IgcGVyLUNQVSBhbmQgcGVyLXJjdV9ub2RlIGt0aHJlYWRzLiAgVGhlc2UKKyAqIGhhbmRsZSBhbGwgZmxhdm9ycyBvZiBSQ1UuCisgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgcmN1X2NwdV9rdGhyZWFkX3Rhc2spOworREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCByY3VfY3B1X2t0aHJlYWRfc3RhdHVzKTsKK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgcmN1X2NwdV9rdGhyZWFkX2xvb3BzKTsKK0RFRklORV9QRVJfQ1BVKGNoYXIsIHJjdV9jcHVfaGFzX3dvcmspOworCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KIAogI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFUKIHN0YXRpYyBjcHVtYXNrX3Zhcl90IHJjdV9ub2NiX21hc2s7IC8qIENQVXMgdG8gaGF2ZSBjYWxsYmFja3Mgb2ZmbG9hZGVkLiAqLwpAQCAtNzIsOSArODIsNiBAQAogI2lmZGVmIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUX1JVTk5BQkxFCiAJcHJfaW5mbygiXHRSQ1UgdG9ydHVyZSB0ZXN0aW5nIHN0YXJ0cyBkdXJpbmcgYm9vdC5cbiIpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkgJiYgIWRlZmluZWQoQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRSkKLQlwcl9pbmZvKCJcdER1bXAgc3RhY2tzIG9mIHRhc2tzIGJsb2NraW5nIFJDVS1wcmVlbXB0IEdQLlxuIik7Ci0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8pCiAJcHJfaW5mbygiXHRBZGRpdGlvbmFsIHBlci1DUFUgaW5mbyBwcmludGVkIHdpdGggc3RhbGxzLlxuIik7CiAjZW5kaWYKQEAgLTg1LDkgKzkyLDEyIEBACiAJCXByX2luZm8oIlx0Qm9vdC10aW1lIGFkanVzdG1lbnQgb2YgbGVhZiBmYW5vdXQgdG8gJWQuXG4iLCByY3VfZmFub3V0X2xlYWYpOwogCWlmIChucl9jcHVfaWRzICE9IE5SX0NQVVMpCiAJCXByX2luZm8oIlx0UkNVIHJlc3RyaWN0aW5nIENQVXMgZnJvbSBOUl9DUFVTPSVkIHRvIG5yX2NwdV9pZHM9JWQuXG4iLCBOUl9DUFVTLCBucl9jcHVfaWRzKTsKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisJcHJfaW5mbygiXHRSQ1Uga3RocmVhZCBwcmlvcml0eTogJWQuXG4iLCBrdGhyZWFkX3ByaW8pOworI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVQogCiBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X3ByZWVtcHQsICdwJywgY2FsbF9yY3UpOwogc3RhdGljIHN0cnVjdCByY3Vfc3RhdGUgKnJjdV9zdGF0ZV9wID0gJnJjdV9wcmVlbXB0X3N0YXRlOwpAQCAtMTU2LDcgKzE2Niw3IEBACiAgKgogICogQ2FsbGVyIG11c3QgZGlzYWJsZSBwcmVlbXB0aW9uLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gY3VycmVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTY3LDcgKzE3Nyw3IEBACiAJICAgICF0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbC5iLmJsb2NrZWQpIHsKIAogCQkvKiBQb3NzaWJseSBibG9ja2luZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICovCi0JCXJkcCA9IHBlcl9jcHVfcHRyKHJjdV9wcmVlbXB0X3N0YXRlLnJkYSwgY3B1KTsKKwkJcmRwID0gdGhpc19jcHVfcHRyKHJjdV9wcmVlbXB0X3N0YXRlLnJkYSk7CiAJCXJucCA9IHJkcC0+bXlub2RlOwogCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7CkBAIC00MTUsOCArNDI1LDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFCi0KIC8qCiAgKiBEdW1wIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBhbGwgdGFza3MgYmxvY2tpbmcgdGhlIGN1cnJlbnQgUkNVCiAgKiBncmFjZSBwZXJpb2Qgb24gdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuCkBAIC00NTEsMTQgKzQ1OSw2IEBACiAJCXJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbF9ybnAocm5wKTsKIH0KIAotI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UgKi8KLQotc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKLXsKLX0KLQotI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFICovCi0KICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPCiAKIHN0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsX2JlZ2luKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQpAQCAtNjIxLDcgKzYyMSw3IEBACiAgKgogICogQ2FsbGVyIG11c3QgZGlzYWJsZSBoYXJkIGlycXMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gY3VycmVudDsKIApAQCAtNjMwLDggKzYzMCw4IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyA+IDAgJiYKLQkgICAgcGVyX2NwdShyY3VfcHJlZW1wdF9kYXRhLCBjcHUpLnFzX3BlbmRpbmcgJiYKLQkgICAgIXBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KS5wYXNzZWRfcXVpZXNjZSkKKwkgICAgX190aGlzX2NwdV9yZWFkKHJjdV9wcmVlbXB0X2RhdGEucXNfcGVuZGluZykgJiYKKwkgICAgIV9fdGhpc19jcHVfcmVhZChyY3VfcHJlZW1wdF9kYXRhLnBhc3NlZF9xdWllc2NlKSkKIAkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwuYi5uZWVkX3FzID0gdHJ1ZTsKIH0KIApAQCAtOTE5LDcgKzkxOSw3IEBACiAJX19yY3VfcmVhZF91bmxvY2soKTsKIH0KIAotI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVICovCiAKIHN0YXRpYyBzdHJ1Y3QgcmN1X3N0YXRlICpyY3Vfc3RhdGVfcCA9ICZyY3Vfc2NoZWRfc3RhdGU7CiAKQEAgLTk0NSw3ICs5NDUsNyBAQAogICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCiAgKiBDUFVzIGJlaW5nIGluIHF1aWVzY2VudCBzdGF0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2godm9pZCkKIHsKIH0KIApAQCAtMTAxNyw3ICsxMDE3LDcgQEAKICAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IGNhbGxiYWNrcwogICogdG8gY2hlY2suCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKHZvaWQpCiB7CiB9CiAKQEAgLTEwNzAsNyArMTA3MCw3IEBACiB7CiB9CiAKLSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVICovCiAKICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCiAKQEAgLTEzMjYsNyArMTMyNiw3IEBACiAJc21wX21iX19hZnRlcl91bmxvY2tfbG9jaygpOwogCXJucC0+Ym9vc3Rfa3RocmVhZF90YXNrID0gdDsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0Jc3Auc2NoZWRfcHJpb3JpdHkgPSBSQ1VfQk9PU1RfUFJJTzsKKwlzcC5zY2hlZF9wcmlvcml0eSA9IGt0aHJlYWRfcHJpbzsKIAlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayh0LCBTQ0hFRF9GSUZPLCAmc3ApOwogCXdha2VfdXBfcHJvY2Vzcyh0KTsgLyogZ2V0IHRvIFRBU0tfSU5URVJSVVBUSUJMRSBxdWlja2x5LiAqLwogCXJldHVybiAwOwpAQCAtMTM0Myw3ICsxMzQzLDcgQEAKIHsKIAlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7CiAKLQlzcC5zY2hlZF9wcmlvcml0eSA9IFJDVV9LVEhSRUFEX1BSSU87CisJc3Auc2NoZWRfcHJpb3JpdHkgPSBrdGhyZWFkX3ByaW87CiAJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2soY3VycmVudCwgU0NIRURfRklGTywgJnNwKTsKIH0KIApAQCAtMTUxMiwxMCArMTUxMiwxMCBAQAogICogYW55IGZsYXZvciBvZiBSQ1UuCiAgKi8KICNpZm5kZWYgQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwKLWludCByY3VfbmVlZHNfY3B1KGludCBjcHUsIHVuc2lnbmVkIGxvbmcgKmRlbHRhX2ppZmZpZXMpCitpbnQgcmN1X25lZWRzX2NwdSh1bnNpZ25lZCBsb25nICpkZWx0YV9qaWZmaWVzKQogewogCSpkZWx0YV9qaWZmaWVzID0gVUxPTkdfTUFYOwotCXJldHVybiByY3VfY3B1X2hhc19jYWxsYmFja3MoY3B1LCBOVUxMKTsKKwlyZXR1cm4gcmN1X2NwdV9oYXNfY2FsbGJhY2tzKE5VTEwpOwogfQogI2VuZGlmIC8qICNpZm5kZWYgQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwgKi8KIApAQCAtMTUyMyw3ICsxNTIzLDcgQEAKICAqIEJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgUkNVX0ZBU1RfTk9fSFosIGRvbid0IGJvdGhlciBjbGVhbmluZyB1cAogICogYWZ0ZXIgaXQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9jbGVhbnVwX2FmdGVyX2lkbGUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9jbGVhbnVwX2FmdGVyX2lkbGUodm9pZCkKIHsKIH0KIApAQCAtMTUzMSw3ICsxNTMxLDcgQEAKICAqIERvIHRoZSBpZGxlLWVudHJ5IGdyYWNlLXBlcmlvZCB3b3JrLCB3aGljaCwgYmVjYXVzZSBDT05GSUdfUkNVX0ZBU1RfTk9fSFo9biwKICAqIGlzIG5vdGhpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVwYXJlX2Zvcl9pZGxlKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlcGFyZV9mb3JfaWRsZSh2b2lkKQogewogfQogCkBAIC0xNjI0LDE1ICsxNjI0LDE1IEBACiAgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzLgogICovCiAjaWZuZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMCi1pbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1LCB1bnNpZ25lZCBsb25nICpkaikKK2ludCByY3VfbmVlZHNfY3B1KHVuc2lnbmVkIGxvbmcgKmRqKQogewotCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSAmcGVyX2NwdShyY3VfZHludGlja3MsIGNwdSk7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9IHRoaXNfY3B1X3B0cigmcmN1X2R5bnRpY2tzKTsKIAogCS8qIFNuYXBzaG90IHRvIGRldGVjdCBsYXRlciBwb3N0aW5nIG9mIG5vbi1sYXp5IGNhbGxiYWNrLiAqLwogCXJkdHAtPm5vbmxhenlfcG9zdGVkX3NuYXAgPSByZHRwLT5ub25sYXp5X3Bvc3RlZDsKIAogCS8qIElmIG5vIGNhbGxiYWNrcywgUkNVIGRvZXNuJ3QgbmVlZCB0aGUgQ1BVLiAqLwotCWlmICghcmN1X2NwdV9oYXNfY2FsbGJhY2tzKGNwdSwgJnJkdHAtPmFsbF9sYXp5KSkgeworCWlmICghcmN1X2NwdV9oYXNfY2FsbGJhY2tzKCZyZHRwLT5hbGxfbGF6eSkpIHsKIAkJKmRqID0gVUxPTkdfTUFYOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNjY2LDEyICsxNjY2LDEyIEBACiAgKgogICogVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgaW50ZXJydXB0cy4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfZm9yX2lkbGUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9wcmVwYXJlX2Zvcl9pZGxlKHZvaWQpCiB7CiAjaWZuZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMCiAJYm9vbCBuZWVkd2FrZTsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKLQlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gJnBlcl9jcHUocmN1X2R5bnRpY2tzLCBjcHUpOworCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSB0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyk7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwOwogCWludCB0bmU7CkBAIC0xNjc5LDcgKzE2NzksNyBAQAogCS8qIEhhbmRsZSBub2h6IGVuYWJsZW1lbnQgc3dpdGNoZXMgY29uc2VydmF0aXZlbHkuICovCiAJdG5lID0gQUNDRVNTX09OQ0UodGlja19ub2h6X2FjdGl2ZSk7CiAJaWYgKHRuZSAhPSByZHRwLT50aWNrX25vaHpfZW5hYmxlZF9zbmFwKSB7Ci0JCWlmIChyY3VfY3B1X2hhc19jYWxsYmFja3MoY3B1LCBOVUxMKSkKKwkJaWYgKHJjdV9jcHVfaGFzX2NhbGxiYWNrcyhOVUxMKSkKIAkJCWludm9rZV9yY3VfY29yZSgpOyAvKiBmb3JjZSBub2h6IHRvIHNlZSB1cGRhdGUuICovCiAJCXJkdHAtPnRpY2tfbm9oel9lbmFibGVkX3NuYXAgPSB0bmU7CiAJCXJldHVybjsKQEAgLTE2ODgsNyArMTY4OCw3IEBACiAJCXJldHVybjsKIAogCS8qIElmIHRoaXMgaXMgYSBuby1DQnMgQ1BVLCBubyBjYWxsYmFja3MsIGp1c3QgcmV0dXJuLiAqLwotCWlmIChyY3VfaXNfbm9jYl9jcHUoY3B1KSkKKwlpZiAocmN1X2lzX25vY2JfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0xNzEyLDcgKzE3MTIsNyBAQAogCQlyZXR1cm47CiAJcmR0cC0+bGFzdF9hY2NlbGVyYXRlID0gamlmZmllczsKIAlmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkgewotCQlyZHAgPSBwZXJfY3B1X3B0cihyc3AtPnJkYSwgY3B1KTsKKwkJcmRwID0gdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKIAkJaWYgKCEqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdKQogCQkJY29udGludWU7CiAJCXJucCA9IHJkcC0+bXlub2RlOwpAQCAtMTczMSwxMCArMTczMSwxMCBAQAogICogYW55IGdyYWNlIHBlcmlvZHMgdGhhdCBlbGFwc2VkIHdoaWxlIHRoZSBDUFUgd2FzIGlkbGUsIGFuZCBpZiBhbnkKICAqIGNhbGxiYWNrcyBhcmUgbm93IHJlYWR5IHRvIGludm9rZSwgaW5pdGlhdGUgaW52b2NhdGlvbi4KICAqLwotc3RhdGljIHZvaWQgcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZShpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZSh2b2lkKQogewogI2lmbmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVX0FMTAotCWlmIChyY3VfaXNfbm9jYl9jcHUoY3B1KSkKKwlpZiAocmN1X2lzX25vY2JfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkpCiAJCXJldHVybjsKIAlpZiAocmN1X3RyeV9hZHZhbmNlX2FsbF9jYnMoKSkKIAkJaW52b2tlX3JjdV9jb3JlKCk7CkBAIC0yNTczLDkgKzI1NzMsMTMgQEAKIAkJCXJkcC0+bm9jYl9sZWFkZXIgPSByZHBfc3Bhd247CiAJCQlpZiAocmRwX2xhc3QgJiYgcmRwICE9IHJkcF9zcGF3bikKIAkJCQlyZHBfbGFzdC0+bm9jYl9uZXh0X2ZvbGxvd2VyID0gcmRwOwotCQkJcmRwX2xhc3QgPSByZHA7Ci0JCQlyZHAgPSByZHAtPm5vY2JfbmV4dF9mb2xsb3dlcjsKLQkJCXJkcF9sYXN0LT5ub2NiX25leHRfZm9sbG93ZXIgPSBOVUxMOworCQkJaWYgKHJkcCA9PSByZHBfc3Bhd24pIHsKKwkJCQlyZHAgPSByZHAtPm5vY2JfbmV4dF9mb2xsb3dlcjsKKwkJCX0gZWxzZSB7CisJCQkJcmRwX2xhc3QgPSByZHA7CisJCQkJcmRwID0gcmRwLT5ub2NiX25leHRfZm9sbG93ZXI7CisJCQkJcmRwX2xhc3QtPm5vY2JfbmV4dF9mb2xsb3dlciA9IE5VTEw7CisJCQl9CiAJCX0gd2hpbGUgKHJkcCk7CiAJCXJkcF9zcGF3bi0+bm9jYl9uZXh0X2ZvbGxvd2VyID0gcmRwX29sZF9sZWFkZXI7CiAJfQpAQCAtMjc2MSw5ICsyNzY1LDEwIEBACiAgKiB0byBkZXRlY3QgZnVsbC1zeXN0ZW0gaWRsZSBzdGF0ZXMsIG5vdCBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhbmQgZ3JhY2UKICAqIHBlcmlvZHMuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzLgogICovCi1zdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9lbnRlcihzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwLCBpbnQgaXJxKQorc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZW50ZXIoaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGo7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9IHRoaXNfY3B1X3B0cigmcmN1X2R5bnRpY2tzKTsKIAogCS8qIElmIHRoZXJlIGFyZSBubyBub2h6X2Z1bGw9IENQVXMsIG5vIG5lZWQgdG8gdHJhY2sgdGhpcy4gKi8KIAlpZiAoIXRpY2tfbm9oel9mdWxsX2VuYWJsZWQoKSkKQEAgLTI4MzIsOCArMjgzNywxMCBAQAogICogdXNlcm1vZGUgZXhlY3V0aW9uIGRvZXMgLW5vdC0gY291bnQgYXMgaWRsZSBoZXJlISAgVGhlIGNhbGxlciBtdXN0CiAgKiBoYXZlIGRpc2FibGVkIGludGVycnVwdHMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2V4aXQoc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCwgaW50IGlycSkKK3N0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2V4aXQoaW50IGlycSkKIHsKKwlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gdGhpc19jcHVfcHRyKCZyY3VfZHludGlja3MpOworCiAJLyogSWYgdGhlcmUgYXJlIG5vIG5vaHpfZnVsbD0gQ1BVcywgbm8gbmVlZCB0byB0cmFjayB0aGlzLiAqLwogCWlmICghdGlja19ub2h6X2Z1bGxfZW5hYmxlZCgpKQogCQlyZXR1cm47CkBAIC0zMTI3LDExICszMTM0LDExIEBACiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfTk9fSFpfRlVMTF9TWVNJRExFICovCiAKLXN0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2VudGVyKHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGludCBpcnEpCitzdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9lbnRlcihpbnQgaXJxKQogewogfQogCi1zdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGludCBpcnEpCitzdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KGludCBpcnEpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdXBkYXRlLmMgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jCmluZGV4IDNlZjhiYTUuLmUwZDMxYTM0NSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS91cGRhdGUuYworKysgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jCkBAIC0zMDYsNyArMzA2LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdWhlYWRfZGVidWdfZGVzY3IpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1JDVV9UUkFDRSkKKyNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1JDVV9UUkFDRSkKIHZvaWQgZG9fdHJhY2VfcmN1X3RvcnR1cmVfcmVhZChjb25zdCBjaGFyICpyY3V0b3J0dXJlbmFtZSwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzZWNzLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY19vbGQsIHVuc2lnbmVkIGxvbmcgYykKQEAgLTUzMSw3ICs1MzEsOCBAQAogCXN0cnVjdCByY3VfaGVhZCAqbmV4dDsKIAlMSVNUX0hFQUQocmN1X3Rhc2tzX2hvbGRvdXRzKTsKIAotCS8qIEZJWE1FOiBBZGQgaG91c2VrZWVwaW5nIGFmZmluaXR5LiAqLworCS8qIFJ1biBvbiBob3VzZWtlZXBpbmcgQ1BVcyBieSBkZWZhdWx0LiAgU3lzYWRtIGNhbiBtb3ZlIGlmIGRlc2lyZWQuICovCisJaG91c2VrZWVwaW5nX2FmZmluZShjdXJyZW50KTsKIAogCS8qCiAJICogRWFjaCBwYXNzIHRocm91Z2ggdGhlIGZvbGxvd2luZyBsb29wIG1ha2VzIG9uZSBjaGVjayBmb3IKQEAgLTY5MCwzICs2OTEsODcgQEAKIH0KIAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVICovCisKKyNpZmRlZiBDT05GSUdfUFJPVkVfUkNVCisKKy8qCisgKiBFYXJseSBib290IHNlbGYgdGVzdCBwYXJhbWV0ZXJzLCBvbmUgZm9yIGVhY2ggZmxhdm9yCisgKi8KK3N0YXRpYyBib29sIHJjdV9zZWxmX3Rlc3Q7CitzdGF0aWMgYm9vbCByY3Vfc2VsZl90ZXN0X2JoOworc3RhdGljIGJvb2wgcmN1X3NlbGZfdGVzdF9zY2hlZDsKKworbW9kdWxlX3BhcmFtKHJjdV9zZWxmX3Rlc3QsIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtKHJjdV9zZWxmX3Rlc3RfYmgsIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtKHJjdV9zZWxmX3Rlc3Rfc2NoZWQsIGJvb2wsIDA0NDQpOworCitzdGF0aWMgaW50IHJjdV9zZWxmX3Rlc3RfY291bnRlcjsKKworc3RhdGljIHZvaWQgdGVzdF9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKnIpCit7CisJcmN1X3NlbGZfdGVzdF9jb3VudGVyKys7CisJcHJfaW5mbygiUkNVIHRlc3QgY2FsbGJhY2sgZXhlY3V0ZWQgJWRcbiIsIHJjdV9zZWxmX3Rlc3RfY291bnRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGVhcmx5X2Jvb3RfdGVzdF9jYWxsX3JjdSh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgcmN1X2hlYWQgaGVhZDsKKworCWNhbGxfcmN1KCZoZWFkLCB0ZXN0X2NhbGxiYWNrKTsKK30KKworc3RhdGljIHZvaWQgZWFybHlfYm9vdF90ZXN0X2NhbGxfcmN1X2JoKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCByY3VfaGVhZCBoZWFkOworCisJY2FsbF9yY3VfYmgoJmhlYWQsIHRlc3RfY2FsbGJhY2spOworfQorCitzdGF0aWMgdm9pZCBlYXJseV9ib290X3Rlc3RfY2FsbF9yY3Vfc2NoZWQodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHJjdV9oZWFkIGhlYWQ7CisKKwljYWxsX3JjdV9zY2hlZCgmaGVhZCwgdGVzdF9jYWxsYmFjayk7Cit9CisKK3ZvaWQgcmN1X2Vhcmx5X2Jvb3RfdGVzdHModm9pZCkKK3sKKwlwcl9pbmZvKCJSdW5uaW5nIFJDVSBzZWxmIHRlc3RzXG4iKTsKKworCWlmIChyY3Vfc2VsZl90ZXN0KQorCQllYXJseV9ib290X3Rlc3RfY2FsbF9yY3UoKTsKKwlpZiAocmN1X3NlbGZfdGVzdF9iaCkKKwkJZWFybHlfYm9vdF90ZXN0X2NhbGxfcmN1X2JoKCk7CisJaWYgKHJjdV9zZWxmX3Rlc3Rfc2NoZWQpCisJCWVhcmx5X2Jvb3RfdGVzdF9jYWxsX3JjdV9zY2hlZCgpOworfQorCitzdGF0aWMgaW50IHJjdV92ZXJpZnlfZWFybHlfYm9vdF90ZXN0cyh2b2lkKQoreworCWludCByZXQgPSAwOworCWludCBlYXJseV9ib290X3Rlc3RfY291bnRlciA9IDA7CisKKwlpZiAocmN1X3NlbGZfdGVzdCkgeworCQllYXJseV9ib290X3Rlc3RfY291bnRlcisrOworCQlyY3VfYmFycmllcigpOworCX0KKwlpZiAocmN1X3NlbGZfdGVzdF9iaCkgeworCQllYXJseV9ib290X3Rlc3RfY291bnRlcisrOworCQlyY3VfYmFycmllcl9iaCgpOworCX0KKwlpZiAocmN1X3NlbGZfdGVzdF9zY2hlZCkgeworCQllYXJseV9ib290X3Rlc3RfY291bnRlcisrOworCQlyY3VfYmFycmllcl9zY2hlZCgpOworCX0KKworCWlmIChyY3Vfc2VsZl90ZXN0X2NvdW50ZXIgIT0gZWFybHlfYm9vdF90ZXN0X2NvdW50ZXIpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0ID0gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KK2xhdGVfaW5pdGNhbGwocmN1X3ZlcmlmeV9lYXJseV9ib290X3Rlc3RzKTsKKyNlbHNlCit2b2lkIHJjdV9lYXJseV9ib290X3Rlc3RzKHZvaWQpIHt9CisjZW5kaWYgLyogQ09ORklHX1BST1ZFX1JDVSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvbXBsZXRpb24uYyBiL2tlcm5lbC9zY2hlZC9jb21wbGV0aW9uLmMKaW5kZXggYTYzZjRkYy4uNjA3Zjg1MiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NvbXBsZXRpb24uYworKysgYi9rZXJuZWwvc2NoZWQvY29tcGxldGlvbi5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAqCiAgKiBUaGlzIHdhaXRzIHRvIGJlIHNpZ25hbGVkIGZvciBjb21wbGV0aW9uIG9mIGEgc3BlY2lmaWMgdGFzay4gSXQgaXMgTk9UCiAgKiBpbnRlcnJ1cHRpYmxlIGFuZCB0aGVyZSBpcyBubyB0aW1lb3V0LiBUaGUgY2FsbGVyIGlzIGFjY291bnRlZCBhcyB3YWl0aW5nCi0gKiBmb3IgSU8uCisgKiBmb3IgSU8gKHdoaWNoIHRyYWRpdGlvbmFsbHkgbWVhbnMgYmxraW8gb25seSkuCiAgKi8KIHZvaWQgX19zY2hlZCB3YWl0X2Zvcl9jb21wbGV0aW9uX2lvKHN0cnVjdCBjb21wbGV0aW9uICp4KQogewpAQCAtMTYzLDcgKzE2Myw4IEBACiAgKgogICogVGhpcyB3YWl0cyBmb3IgZWl0aGVyIGEgY29tcGxldGlvbiBvZiBhIHNwZWNpZmljIHRhc2sgdG8gYmUgc2lnbmFsZWQgb3IgZm9yIGEKICAqIHNwZWNpZmllZCB0aW1lb3V0IHRvIGV4cGlyZS4gVGhlIHRpbWVvdXQgaXMgaW4gamlmZmllcy4gSXQgaXMgbm90Ci0gKiBpbnRlcnJ1cHRpYmxlLiBUaGUgY2FsbGVyIGlzIGFjY291bnRlZCBhcyB3YWl0aW5nIGZvciBJTy4KKyAqIGludGVycnVwdGlibGUuIFRoZSBjYWxsZXIgaXMgYWNjb3VudGVkIGFzIHdhaXRpbmcgZm9yIElPICh3aGljaCB0cmFkaXRpb25hbGx5CisgKiBtZWFucyBibGtpbyBvbmx5KS4KICAqCiAgKiBSZXR1cm46IDAgaWYgdGltZWQgb3V0LCBhbmQgcG9zaXRpdmUgKGF0IGxlYXN0IDEsIG9yIG51bWJlciBvZiBqaWZmaWVzIGxlZnQKICAqIHRpbGwgdGltZW91dCkgaWYgY29tcGxldGVkLgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKaW5kZXggMjQwMTU3Yy4uYmIzOThjMCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuYworKysgYi9rZXJuZWwvc2NoZWQvY29yZS5jCkBAIC0xMDA4LDYgKzEwMDgsOSBAQAogCXJldHVybiBjcHVfY3Vycih0YXNrX2NwdShwKSkgPT0gcDsKIH0KIAorLyoKKyAqIENhbiBkcm9wIHJxLT5sb2NrIGJlY2F1c2UgZnJvbSBzY2hlZF9jbGFzczo6c3dpdGNoZWRfZnJvbSgpIG1ldGhvZHMgZHJvcCBpdC4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2NsYXNzX2NoYW5nZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3MsCiAJCQkJICAgICAgIGludCBvbGRwcmlvKQpAQCAtMTAxNSw2ICsxMDE4LDcgQEAKIAlpZiAocHJldl9jbGFzcyAhPSBwLT5zY2hlZF9jbGFzcykgewogCQlpZiAocHJldl9jbGFzcy0+c3dpdGNoZWRfZnJvbSkKIAkJCXByZXZfY2xhc3MtPnN3aXRjaGVkX2Zyb20ocnEsIHApOworCQkvKiBQb3NzYmxlIHJxLT5sb2NrICdob2xlJy4gICovCiAJCXAtPnNjaGVkX2NsYXNzLT5zd2l0Y2hlZF90byhycSwgcCk7CiAJfSBlbHNlIGlmIChvbGRwcmlvICE9IHAtPnByaW8gfHwgZGxfdGFzayhwKSkKIAkJcC0+c2NoZWRfY2xhc3MtPnByaW9fY2hhbmdlZChycSwgcCwgb2xkcHJpbyk7CkBAIC0xMDU0LDcgKzEwNTgsNyBAQAogCSAqIHR0d3UoKSB3aWxsIHNvcnQgb3V0IHRoZSBwbGFjZW1lbnQuCiAJICovCiAJV0FSTl9PTl9PTkNFKHAtPnN0YXRlICE9IFRBU0tfUlVOTklORyAmJiBwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyAmJgotCQkJISh0YXNrX3ByZWVtcHRfY291bnQocCkgJiBQUkVFTVBUX0FDVElWRSkpOworCQkJIXAtPm9uX3JxKTsKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCiAJLyoKQEAgLTE0MDcsNyArMTQxMSw4IEBACiBzdGF0aWMgaW5saW5lCiBpbnQgc2VsZWN0X3Rhc2tfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1LCBpbnQgc2RfZmxhZ3MsIGludCB3YWtlX2ZsYWdzKQogewotCWNwdSA9IHAtPnNjaGVkX2NsYXNzLT5zZWxlY3RfdGFza19ycShwLCBjcHUsIHNkX2ZsYWdzLCB3YWtlX2ZsYWdzKTsKKwlpZiAocC0+bnJfY3B1c19hbGxvd2VkID4gMSkKKwkJY3B1ID0gcC0+c2NoZWRfY2xhc3MtPnNlbGVjdF90YXNrX3JxKHAsIGNwdSwgc2RfZmxhZ3MsIHdha2VfZmxhZ3MpOwogCiAJLyoKIAkgKiBJbiBvcmRlciBub3QgdG8gY2FsbCBzZXRfdGFza19jcHUoKSBvbiBhIGJsb2NraW5nIHRhc2sgd2UgbmVlZApAQCAtMTYyMyw4ICsxNjI4LDEwIEBACiAJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWlzX2lkbGVfdGFzayhycS0+Y3VycikpCi0JCXJldHVybjsKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlpZiAoIWlzX2lkbGVfdGFzayhyY3VfZGVyZWZlcmVuY2UocnEtPmN1cnIpKSkKKwkJZ290byBvdXQ7CiAKIAlpZiAoc2V0X25yX2lmX3BvbGxpbmcocnEtPmlkbGUpKSB7CiAJCXRyYWNlX3NjaGVkX3dha2VfaWRsZV93aXRob3V0X2lwaShjcHUpOwpAQCAtMTYzNSw2ICsxNjQyLDkgQEAKIAkJLyogRWxzZSBjcHUgaXMgbm90IGluIGlkbGUsIGRvIG5vdGhpbmcgaGVyZSAqLwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAl9CisKK291dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogYm9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KQpAQCAtMTg1MywxMiArMTg2MywxMCBAQAogCXAtPm51bWFfc2Nhbl9zZXEgPSBwLT5tbSA/IHAtPm1tLT5udW1hX3NjYW5fc2VxIDogMDsKIAlwLT5udW1hX3NjYW5fcGVyaW9kID0gc3lzY3RsX251bWFfYmFsYW5jaW5nX3NjYW5fZGVsYXk7CiAJcC0+bnVtYV93b3JrLm5leHQgPSAmcC0+bnVtYV93b3JrOwotCXAtPm51bWFfZmF1bHRzX21lbW9yeSA9IE5VTEw7Ci0JcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeSA9IE5VTEw7CisJcC0+bnVtYV9mYXVsdHMgPSBOVUxMOwogCXAtPmxhc3RfdGFza19udW1hX3BsYWNlbWVudCA9IDA7CiAJcC0+bGFzdF9zdW1fZXhlY19ydW50aW1lID0gMDsKIAotCUlOSVRfTElTVF9IRUFEKCZwLT5udW1hX2VudHJ5KTsKIAlwLT5udW1hX2dyb3VwID0gTlVMTDsKICNlbmRpZiAvKiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi8KIH0KQEAgLTIwMzQsMjUgKzIwNDIsNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUKLXZvaWQgX19kbF9jbGVhcihzdHJ1Y3QgZGxfYncgKmRsX2IsIHU2NCB0c2tfYncpCi17Ci0JZGxfYi0+dG90YWxfYncgLT0gdHNrX2J3OwotfQotCi1zdGF0aWMgaW5saW5lCi12b2lkIF9fZGxfYWRkKHN0cnVjdCBkbF9idyAqZGxfYiwgdTY0IHRza19idykKLXsKLQlkbF9iLT50b3RhbF9idyArPSB0c2tfYnc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLWJvb2wgX19kbF9vdmVyZmxvdyhzdHJ1Y3QgZGxfYncgKmRsX2IsIGludCBjcHVzLCB1NjQgb2xkX2J3LCB1NjQgbmV3X2J3KQotewotCXJldHVybiBkbF9iLT5idyAhPSAtMSAmJgotCSAgICAgICBkbF9iLT5idyAqIGNwdXMgPCBkbF9iLT50b3RhbF9idyAtIG9sZF9idyArIG5ld19idzsKLX0KLQogLyoKICAqIFdlIG11c3QgYmUgc3VyZSB0aGF0IGFjY2VwdGluZyBhIG5ldyB0YXNrIChvciBhbGxvd2luZyBjaGFuZ2luZyB0aGUKICAqIHBhcmFtZXRlcnMgb2YgYW4gZXhpc3Rpbmcgb25lKSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGJhbmR3aWR0aApAQCAtMjIyMCw3ICsyMjA5LDYgQEAKIAogLyoqCiAgKiBmaW5pc2hfdGFza19zd2l0Y2ggLSBjbGVhbiB1cCBhZnRlciBhIHRhc2stc3dpdGNoCi0gKiBAcnE6IHJ1bnF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0YXNrLXN3aXRjaAogICogQHByZXY6IHRoZSB0aHJlYWQgd2UganVzdCBzd2l0Y2hlZCBhd2F5IGZyb20uCiAgKgogICogZmluaXNoX3Rhc2tfc3dpdGNoIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBjb250ZXh0IHN3aXRjaCwgcGFpcmVkCkBAIC0yMjMyLDEwICsyMjIwLDE2IEBACiAgKiBzbywgd2UgZmluaXNoIHRoYXQgaGVyZSBvdXRzaWRlIG9mIHRoZSBydW5xdWV1ZSBsb2NrLiAoRG9pbmcgaXQKICAqIHdpdGggdGhlIGxvY2sgaGVsZCBjYW4gY2F1c2UgZGVhZGxvY2tzOyBzZWUgc2NoZWR1bGUoKSBmb3IKICAqIGRldGFpbHMuKQorICoKKyAqIFRoZSBjb250ZXh0IHN3aXRjaCBoYXZlIGZsaXBwZWQgdGhlIHN0YWNrIGZyb20gdW5kZXIgdXMgYW5kIHJlc3RvcmVkIHRoZQorICogbG9jYWwgdmFyaWFibGVzIHdoaWNoIHdlcmUgc2F2ZWQgd2hlbiB0aGlzIHRhc2sgY2FsbGVkIHNjaGVkdWxlKCkgaW4gdGhlCisgKiBwYXN0LiBwcmV2ID09IGN1cnJlbnQgaXMgc3RpbGwgY29ycmVjdCBidXQgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGlzX3JxCisgKiBiZWNhdXNlIHByZXYgbWF5IGhhdmUgbW92ZWQgdG8gYW5vdGhlciBDUFUuCiAgKi8KLXN0YXRpYyB2b2lkIGZpbmlzaF90YXNrX3N3aXRjaChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCitzdGF0aWMgc3RydWN0IHJxICpmaW5pc2hfdGFza19zd2l0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogCV9fcmVsZWFzZXMocnEtPmxvY2spCiB7CisJc3RydWN0IHJxICpycSA9IHRoaXNfcnEoKTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJxLT5wcmV2X21tOwogCWxvbmcgcHJldl9zdGF0ZTsKIApAQCAtMjI3NSw2ICsyMjY5LDcgQEAKIAl9CiAKIAl0aWNrX25vaHpfdGFza19zd2l0Y2goY3VycmVudCk7CisJcmV0dXJuIHJxOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMjMwOSwyNSArMjMwNCwyMiBAQAogYXNtbGlua2FnZSBfX3Zpc2libGUgdm9pZCBzY2hlZHVsZV90YWlsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIAlfX3JlbGVhc2VzKHJxLT5sb2NrKQogewotCXN0cnVjdCBycSAqcnEgPSB0aGlzX3JxKCk7CisJc3RydWN0IHJxICpycTsKIAotCWZpbmlzaF90YXNrX3N3aXRjaChycSwgcHJldik7Ci0KLQkvKgotCSAqIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IHJxIGJlaW5nIGludmFsaWRhdGVkIGJ5IHRoZQotCSAqIHRhc2tfc3dpdGNoPwotCSAqLworCS8qIGZpbmlzaF90YXNrX3N3aXRjaCgpIGRyb3BzIHJxLT5sb2NrIGFuZCBlbmFibGVzIHByZWVtdGlvbiAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCXJxID0gZmluaXNoX3Rhc2tfc3dpdGNoKHByZXYpOwogCXBvc3Rfc2NoZWR1bGUocnEpOworCXByZWVtcHRfZW5hYmxlKCk7CiAKIAlpZiAoY3VycmVudC0+c2V0X2NoaWxkX3RpZCkKIAkJcHV0X3VzZXIodGFza19waWRfdm5yKGN1cnJlbnQpLCBjdXJyZW50LT5zZXRfY2hpbGRfdGlkKTsKIH0KIAogLyoKLSAqIGNvbnRleHRfc3dpdGNoIC0gc3dpdGNoIHRvIHRoZSBuZXcgTU0gYW5kIHRoZSBuZXcKLSAqIHRocmVhZCdzIHJlZ2lzdGVyIHN0YXRlLgorICogY29udGV4dF9zd2l0Y2ggLSBzd2l0Y2ggdG8gdGhlIG5ldyBNTSBhbmQgdGhlIG5ldyB0aHJlYWQncyByZWdpc3RlciBzdGF0ZS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqCiBjb250ZXh0X3N3aXRjaChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKQEAgLTIzNjYsMTQgKzIzNTgsOSBAQAogCWNvbnRleHRfdHJhY2tpbmdfdGFza19zd2l0Y2gocHJldiwgbmV4dCk7CiAJLyogSGVyZSB3ZSBqdXN0IHN3aXRjaCB0aGUgcmVnaXN0ZXIgc3RhdGUgYW5kIHRoZSBzdGFjay4gKi8KIAlzd2l0Y2hfdG8ocHJldiwgbmV4dCwgcHJldik7Ci0KIAliYXJyaWVyKCk7Ci0JLyoKLQkgKiB0aGlzX3JxIG11c3QgYmUgZXZhbHVhdGVkIGFnYWluIGJlY2F1c2UgcHJldiBtYXkgaGF2ZSBtb3ZlZAotCSAqIENQVXMgc2luY2UgaXQgY2FsbGVkIHNjaGVkdWxlKCksIHRodXMgdGhlICdycScgb24gaXRzIHN0YWNrCi0JICogZnJhbWUgd2lsbCBiZSBpbnZhbGlkLgotCSAqLwotCWZpbmlzaF90YXNrX3N3aXRjaCh0aGlzX3JxKCksIHByZXYpOworCisJcmV0dXJuIGZpbmlzaF90YXNrX3N3aXRjaChwcmV2KTsKIH0KIAogLyoKQEAgLTI0NzUsNDQgKzI0NjIsNiBAQAogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGtlcm5lbF9jcHVzdGF0KTsKIAogLyoKLSAqIFJldHVybiBhbnkgbnMgb24gdGhlIHNjaGVkX2Nsb2NrIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gYWNjb3VudGVkIGluCi0gKiBAcCBpbiBjYXNlIHRoYXQgdGFzayBpcyBjdXJyZW50bHkgcnVubmluZy4KLSAqCi0gKiBDYWxsZWQgd2l0aCB0YXNrX3JxX2xvY2soKSBoZWxkIG9uIEBycS4KLSAqLwotc3RhdGljIHU2NCBkb190YXNrX2RlbHRhX2V4ZWMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJxKQotewotCXU2NCBucyA9IDA7Ci0KLQkvKgotCSAqIE11c3QgYmUgLT5jdXJyIF9hbmRfIC0+b25fcnEuICBJZiBkZXF1ZXVlZCwgd2Ugd291bGQKLQkgKiBwcm9qZWN0IGN5Y2xlcyB0aGF0IG1heSBuZXZlciBiZSBhY2NvdW50ZWQgdG8gdGhpcwotCSAqIHRocmVhZCwgYnJlYWtpbmcgY2xvY2tfZ2V0dGltZSgpLgotCSAqLwotCWlmICh0YXNrX2N1cnJlbnQocnEsIHApICYmIHRhc2tfb25fcnFfcXVldWVkKHApKSB7Ci0JCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0JCW5zID0gcnFfY2xvY2tfdGFzayhycSkgLSBwLT5zZS5leGVjX3N0YXJ0OwotCQlpZiAoKHM2NClucyA8IDApCi0JCQlucyA9IDA7Ci0JfQotCi0JcmV0dXJuIG5zOwotfQotCi11bnNpZ25lZCBsb25nIGxvbmcgdGFza19kZWx0YV9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBycSAqcnE7Ci0JdTY0IG5zID0gMDsKLQotCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7Ci0JbnMgPSBkb190YXNrX2RlbHRhX2V4ZWMocCwgcnEpOwotCXRhc2tfcnFfdW5sb2NrKHJxLCBwLCAmZmxhZ3MpOwotCi0JcmV0dXJuIG5zOwotfQotCi0vKgogICogUmV0dXJuIGFjY291bnRlZCBydW50aW1lIGZvciB0aGUgdGFzay4KICAqIEluIGNhc2UgdGhlIHRhc2sgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHJldHVybiB0aGUgcnVudGltZSBwbHVzIGN1cnJlbnQncwogICogcGVuZGluZyBydW50aW1lIHRoYXQgaGF2ZSBub3QgYmVlbiBhY2NvdW50ZWQgeWV0LgpAQCAtMjUyMSw3ICsyNDcwLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBycSAqcnE7Ci0JdTY0IG5zID0gMDsKKwl1NjQgbnM7CiAKICNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQogCS8qCkBAIC0yNTQwLDcgKzI0ODksMTYgQEAKICNlbmRpZgogCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKLQlucyA9IHAtPnNlLnN1bV9leGVjX3J1bnRpbWUgKyBkb190YXNrX2RlbHRhX2V4ZWMocCwgcnEpOworCS8qCisJICogTXVzdCBiZSAtPmN1cnIgX2FuZF8gLT5vbl9ycS4gIElmIGRlcXVldWVkLCB3ZSB3b3VsZAorCSAqIHByb2plY3QgY3ljbGVzIHRoYXQgbWF5IG5ldmVyIGJlIGFjY291bnRlZCB0byB0aGlzCisJICogdGhyZWFkLCBicmVha2luZyBjbG9ja19nZXR0aW1lKCkuCisJICovCisJaWYgKHRhc2tfY3VycmVudChycSwgcCkgJiYgdGFza19vbl9ycV9xdWV1ZWQocCkpIHsKKwkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKKwkJcC0+c2NoZWRfY2xhc3MtPnVwZGF0ZV9jdXJyKHJxKTsKKwl9CisJbnMgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCXRhc2tfcnFfdW5sb2NrKHJxLCBwLCAmZmxhZ3MpOwogCiAJcmV0dXJuIG5zOwpAQCAtMjgwMiw3ICsyNzYwLDcgQEAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJcnEgPSBjcHVfcnEoY3B1KTsKLQlyY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChjcHUpOworCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKCk7CiAJcHJldiA9IHJxLT5jdXJyOwogCiAJc2NoZWR1bGVfZGVidWcocHJldik7CkBAIC0yODU1LDE1ICsyODEzLDggQEAKIAkJcnEtPmN1cnIgPSBuZXh0OwogCQkrKypzd2l0Y2hfY291bnQ7CiAKLQkJY29udGV4dF9zd2l0Y2gocnEsIHByZXYsIG5leHQpOyAvKiB1bmxvY2tzIHRoZSBycSAqLwotCQkvKgotCQkgKiBUaGUgY29udGV4dCBzd2l0Y2ggaGF2ZSBmbGlwcGVkIHRoZSBzdGFjayBmcm9tIHVuZGVyIHVzCi0JCSAqIGFuZCByZXN0b3JlZCB0aGUgbG9jYWwgdmFyaWFibGVzIHdoaWNoIHdlcmUgc2F2ZWQgd2hlbgotCQkgKiB0aGlzIHRhc2sgY2FsbGVkIHNjaGVkdWxlKCkgaW4gdGhlIHBhc3QuIHByZXYgPT0gY3VycmVudAotCQkgKiBpcyBzdGlsbCBjb3JyZWN0LCBidXQgaXQgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIgY3B1L3JxLgotCQkgKi8KLQkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlycSA9IGNwdV9ycShjcHUpOworCQlycSA9IGNvbnRleHRfc3dpdGNoKHJxLCBwcmV2LCBuZXh0KTsgLyogdW5sb2NrcyB0aGUgcnEgKi8KKwkJY3B1ID0gY3B1X29mKHJxKTsKIAl9IGVsc2UKIAkJcmF3X3NwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwogCkBAIC0yOTAzLDEwICsyODU0LDE0IEBACiAJICogb3Igd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHJlbW90ZWx5IGJ1dCB0aGUgSVBJIGhhcyBub3QgeWV0IGFycml2ZWQsCiAJICogd2UgaGF2ZW4ndCB5ZXQgZXhpdGVkIHRoZSBSQ1UgaWRsZSBtb2RlLiBEbyBpdCBoZXJlIG1hbnVhbGx5IHVudGlsCiAJICogd2UgZmluZCBhIGJldHRlciBzb2x1dGlvbi4KKwkgKgorCSAqIE5COiBUaGVyZSBhcmUgYnVnZ3kgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiAgSWRlYWxseSB3ZQorCSAqIHNob3VsZCB3YXJuIGlmIHByZXZfc3RhdGUgIT0gSU5fVVNFUiwgYnV0IHRoYXQgd2lsbCB0cmlnZ2VyCisJICogdG9vIGZyZXF1ZW50bHkgdG8gbWFrZSBzZW5zZSB5ZXQuCiAJICovCi0JdXNlcl9leGl0KCk7CisJZW51bSBjdHhfc3RhdGUgcHJldl9zdGF0ZSA9IGV4Y2VwdGlvbl9lbnRlcigpOwogCXNjaGVkdWxlKCk7Ci0JdXNlcl9lbnRlcigpOworCWV4Y2VwdGlvbl9leGl0KHByZXZfc3RhdGUpOwogfQogI2VuZGlmCiAKQEAgLTQ2NzgsNiArNDYzMyw4MSBAQAogI2VuZGlmCiB9CiAKK2ludCBjcHVzZXRfY3B1bWFza19jYW5fc2hyaW5rKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjdXIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdHJpYWwpCit7CisJaW50IHJldCA9IDEsIHRyaWFsX2NwdXM7CisJc3RydWN0IGRsX2J3ICpjdXJfZGxfYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmN1X3JlYWRfbG9ja19zY2hlZCgpOworCWN1cl9kbF9iID0gZGxfYndfb2YoY3B1bWFza19hbnkoY3VyKSk7CisJdHJpYWxfY3B1cyA9IGNwdW1hc2tfd2VpZ2h0KHRyaWFsKTsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY3VyX2RsX2ItPmxvY2ssIGZsYWdzKTsKKwlpZiAoY3VyX2RsX2ItPmJ3ICE9IC0xICYmCisJICAgIGN1cl9kbF9iLT5idyAqIHRyaWFsX2NwdXMgPCBjdXJfZGxfYi0+dG90YWxfYncpCisJCXJldCA9IDA7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cl9kbF9iLT5sb2NrLCBmbGFncyk7CisJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdGFza19jYW5fYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjc19jcHVzX2FsbG93ZWQpCit7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIEt0aHJlYWRzIHdoaWNoIGRpc2FsbG93IHNldGFmZmluaXR5IHNob3VsZG4ndCBiZSBtb3ZlZAorCSAqIHRvIGEgbmV3IGNwdXNldDsgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlaXIgY3B1CisJICogYWZmaW5pdHkgYW5kIGlzb2xhdGluZyBzdWNoIHRocmVhZHMgYnkgdGhlaXIgc2V0IG9mCisJICogYWxsb3dlZCBub2RlcyBpcyB1bm5lY2Vzc2FyeS4gIFRodXMsIGNwdXNldHMgYXJlIG5vdAorCSAqIGFwcGxpY2FibGUgZm9yIHN1Y2ggdGhyZWFkcy4gIFRoaXMgcHJldmVudHMgY2hlY2tpbmcgZm9yCisJICogc3VjY2VzcyBvZiBzZXRfY3B1c19hbGxvd2VkX3B0cigpIG9uIGFsbCBhdHRhY2hlZCB0YXNrcworCSAqIGJlZm9yZSBjcHVzX2FsbG93ZWQgbWF5IGJlIGNoYW5nZWQuCisJICovCisJaWYgKHAtPmZsYWdzICYgUEZfTk9fU0VUQUZGSU5JVFkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChkbF90YXNrKHApICYmICFjcHVtYXNrX2ludGVyc2VjdHModGFza19ycShwKS0+cmQtPnNwYW4sCisJCQkJCSAgICAgIGNzX2NwdXNfYWxsb3dlZCkpIHsKKwkJdW5zaWduZWQgaW50IGRlc3RfY3B1ID0gY3B1bWFza19hbnlfYW5kKGNwdV9hY3RpdmVfbWFzaywKKwkJCQkJCQljc19jcHVzX2FsbG93ZWQpOworCQlzdHJ1Y3QgZGxfYncgKmRsX2I7CisJCWJvb2wgb3ZlcmZsb3c7CisJCWludCBjcHVzOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKKwkJZGxfYiA9IGRsX2J3X29mKGRlc3RfY3B1KTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkbF9iLT5sb2NrLCBmbGFncyk7CisJCWNwdXMgPSBkbF9id19jcHVzKGRlc3RfY3B1KTsKKwkJb3ZlcmZsb3cgPSBfX2RsX292ZXJmbG93KGRsX2IsIGNwdXMsIDAsIHAtPmRsLmRsX2J3KTsKKwkJaWYgKG92ZXJmbG93KQorCQkJcmV0ID0gLUVCVVNZOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBXZSByZXNlcnZlIHNwYWNlIGZvciB0aGlzIHRhc2sgaW4gdGhlIGRlc3RpbmF0aW9uCisJCQkgKiByb290X2RvbWFpbiwgYXMgd2UgY2FuJ3QgZmFpbCBhZnRlciB0aGlzIHBvaW50LgorCQkJICogV2Ugd2lsbCBmcmVlIHJlc291cmNlcyBpbiB0aGUgc291cmNlIHJvb3RfZG9tYWluCisJCQkgKiBsYXRlciBvbiAoc2VlIHNldF9jcHVzX2FsbG93ZWRfZGwoKSkuCisJCQkgKi8KKwkJCV9fZGxfYWRkKGRsX2IsIHAtPmRsLmRsX2J3KTsKKwkJfQorCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGxfYi0+bG9jaywgZmxhZ3MpOworCQlyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTsKKworCX0KKyNlbmRpZgorb3V0OgorCXJldHVybiByZXQ7Cit9CisKICNpZmRlZiBDT05GSUdfU01QCiAvKgogICogbW92ZV9xdWV1ZWRfdGFzayAtIG1vdmUgYSBxdWV1ZWQgdGFzayB0byBuZXcgcnEuCkBAIC02MTI4LDcgKzYxNTgsOSBAQAogCiAjaWZkZWYgQ09ORklHX05VTUEKIHN0YXRpYyBpbnQgc2NoZWRfZG9tYWluc19udW1hX2xldmVsczsKK2VudW0gbnVtYV90b3BvbG9neV90eXBlIHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZTsKIHN0YXRpYyBpbnQgKnNjaGVkX2RvbWFpbnNfbnVtYV9kaXN0YW5jZTsKK2ludCBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsKIHN0YXRpYyBzdHJ1Y3QgY3B1bWFzayAqKipzY2hlZF9kb21haW5zX251bWFfbWFza3M7CiBzdGF0aWMgaW50IHNjaGVkX2RvbWFpbnNfY3Vycl9sZXZlbDsKICNlbmRpZgpAQCAtNjMwMCw3ICs2MzMyLDcgQEAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJcbiIpOwogfQogCi1zdGF0aWMgYm9vbCBmaW5kX251bWFfZGlzdGFuY2UoaW50IGRpc3RhbmNlKQorYm9vbCBmaW5kX251bWFfZGlzdGFuY2UoaW50IGRpc3RhbmNlKQogewogCWludCBpOwogCkBAIC02MzE1LDYgKzYzNDcsNTYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBBIHN5c3RlbSBjYW4gaGF2ZSB0aHJlZSB0eXBlcyBvZiBOVU1BIHRvcG9sb2d5OgorICogTlVNQV9ESVJFQ1Q6IGFsbCBub2RlcyBhcmUgZGlyZWN0bHkgY29ubmVjdGVkLCBvciBub3QgYSBOVU1BIHN5c3RlbQorICogTlVNQV9HTFVFTEVTU19NRVNIOiBzb21lIG5vZGVzIHJlYWNoYWJsZSB0aHJvdWdoIGludGVybWVkaWFyeSBub2RlcworICogTlVNQV9CQUNLUExBTkU6IG5vZGVzIGNhbiByZWFjaCBvdGhlciBub2RlcyB0aHJvdWdoIGEgYmFja3BsYW5lCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGdsdWVsZXNzIG1lc2ggdG9wb2xvZ3kgYW5kIGEgYmFja3BsYW5lCisgKiB0b3BvbG9neSBsaWVzIGluIHdoZXRoZXIgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIG5vdCBkaXJlY3RseQorICogY29ubmVjdGVkIG5vZGVzIGdvZXMgdGhyb3VnaCBpbnRlcm1lZGlhcnkgbm9kZXMgKHdoZXJlIHByb2dyYW1zCisgKiBjb3VsZCBydW4pLCBvciB0aHJvdWdoIGJhY2twbGFuZSBjb250cm9sbGVycy4gVGhpcyBhZmZlY3RzCisgKiBwbGFjZW1lbnQgb2YgcHJvZ3JhbXMuCisgKgorICogVGhlIHR5cGUgb2YgdG9wb2xvZ3kgY2FuIGJlIGRpc2Nlcm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6CisgKiAtIElmIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gYW55IG5vZGVzIGlzIDEgaG9wLCB0aGUgc3lzdGVtCisgKiAgIGlzIGRpcmVjdGx5IGNvbm5lY3RlZC4KKyAqIC0gSWYgZm9yIHR3byBub2RlcyBBIGFuZCBCLCBsb2NhdGVkIE4gPiAxIGhvcHMgYXdheSBmcm9tIGVhY2ggb3RoZXIsCisgKiAgIHRoZXJlIGlzIGFuIGludGVybWVkaWFyeSBub2RlIEMsIHdoaWNoIGlzIDwgTiBob3BzIGF3YXkgZnJvbSBib3RoCisgKiAgIG5vZGVzIEEgYW5kIEIsIHRoZSBzeXN0ZW0gaXMgYSBnbHVlbGVzcyBtZXNoLgorICovCitzdGF0aWMgdm9pZCBpbml0X251bWFfdG9wb2xvZ3lfdHlwZSh2b2lkKQoreworCWludCBhLCBiLCBjLCBuOworCisJbiA9IHNjaGVkX21heF9udW1hX2Rpc3RhbmNlOworCisJaWYgKG4gPD0gMSkKKwkJc2NoZWRfbnVtYV90b3BvbG9neV90eXBlID0gTlVNQV9ESVJFQ1Q7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShhKSB7CisJCWZvcl9lYWNoX29ubGluZV9ub2RlKGIpIHsKKwkJCS8qIEZpbmQgdHdvIG5vZGVzIGZ1cnRoZXN0IHJlbW92ZWQgZnJvbSBlYWNoIG90aGVyLiAqLworCQkJaWYgKG5vZGVfZGlzdGFuY2UoYSwgYikgPCBuKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBJcyB0aGVyZSBhbiBpbnRlcm1lZGlhcnkgbm9kZSBiZXR3ZWVuIGEgYW5kIGI/ICovCisJCQlmb3JfZWFjaF9vbmxpbmVfbm9kZShjKSB7CisJCQkJaWYgKG5vZGVfZGlzdGFuY2UoYSwgYykgPCBuICYmCisJCQkJICAgIG5vZGVfZGlzdGFuY2UoYiwgYykgPCBuKSB7CisJCQkJCXNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9CisJCQkJCQkJTlVNQV9HTFVFTEVTU19NRVNIOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCisJCQlzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPSBOVU1BX0JBQ0tQTEFORTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgc2NoZWRfaW5pdF9udW1hKHZvaWQpCiB7CiAJaW50IG5leHRfZGlzdGFuY2UsIGN1cnJfZGlzdGFuY2UgPSBub2RlX2Rpc3RhbmNlKDAsIDApOwpAQCAtNjM2OCw2ICs2NDUwLDEwIEBACiAJCWlmICghc2NoZWRfZGVidWcoKSkKIAkJCWJyZWFrOwogCX0KKworCWlmICghbGV2ZWwpCisJCXJldHVybjsKKwogCS8qCiAJICogJ2xldmVsJyBjb250YWlucyB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBkaXN0YW5jZXMsIGV4Y2x1ZGluZyB0aGUKIAkgKiBpZGVudGl0eSBkaXN0YW5jZSBub2RlX2Rpc3RhbmNlKGksaSkuCkBAIC02NDQ3LDYgKzY1MzMsOSBAQAogCXNjaGVkX2RvbWFpbl90b3BvbG9neSA9IHRsOwogCiAJc2NoZWRfZG9tYWluc19udW1hX2xldmVscyA9IGxldmVsOworCXNjaGVkX21heF9udW1hX2Rpc3RhbmNlID0gc2NoZWRfZG9tYWluc19udW1hX2Rpc3RhbmNlW2xldmVsIC0gMV07CisKKwlpbml0X251bWFfdG9wb2xvZ3lfdHlwZSgpOwogfQogCiBzdGF0aWMgdm9pZCBzY2hlZF9kb21haW5zX251bWFfbWFza3Nfc2V0KGludCBjcHUpCkBAIC03MTk5LDYgKzcyODgsMjUgQEAKIAogdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpCiB7CisJLyoKKwkgKiBCbG9ja2luZyBwcmltaXRpdmVzIHdpbGwgc2V0IChhbmQgdGhlcmVmb3JlIGRlc3Ryb3kpIGN1cnJlbnQtPnN0YXRlLAorCSAqIHNpbmNlIHdlIHdpbGwgZXhpdCB3aXRoIFRBU0tfUlVOTklORyBtYWtlIHN1cmUgd2UgZW50ZXIgd2l0aCBpdCwKKwkgKiBvdGhlcndpc2Ugd2Ugd2lsbCBkZXN0cm95IHN0YXRlLgorCSAqLworCWlmIChXQVJOX09OQ0UoY3VycmVudC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HLAorCQkJImRvIG5vdCBjYWxsIGJsb2NraW5nIG9wcyB3aGVuICFUQVNLX1JVTk5JTkc7ICIKKwkJCSJzdGF0ZT0lbHggc2V0IGF0IFs8JXA+XSAlcFNcbiIsCisJCQljdXJyZW50LT5zdGF0ZSwKKwkJCSh2b2lkICopY3VycmVudC0+dGFza19zdGF0ZV9jaGFuZ2UsCisJCQkodm9pZCAqKWN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlKSkKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJX19fbWlnaHRfc2xlZXAoZmlsZSwgbGluZSwgcHJlZW1wdF9vZmZzZXQpOworfQorRVhQT1JUX1NZTUJPTChfX21pZ2h0X3NsZWVwKTsKKwordm9pZCBfX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KQorewogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZfamlmZnk7CS8qIHJhdGVsaW1pdGluZyAqLwogCiAJcmN1X3NsZWVwX2NoZWNrKCk7IC8qIFdBUk5fT05fT05DRSgpIGJ5IGRlZmF1bHQsIG5vIHJhdGUgbGltaXQgcmVxZC4gKi8KQEAgLTcyMzAsNyArNzMzOCw3IEBACiAjZW5kaWYKIAlkdW1wX3N0YWNrKCk7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fbWlnaHRfc2xlZXApOworRVhQT1JUX1NZTUJPTChfX19taWdodF9zbGVlcCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQpAQCAtNzQ0NCw4ICs3NTUyLDEyIEBACiAJaWYgKHVubGlrZWx5KHJ1bm5pbmcpKQogCQlwdXRfcHJldl90YXNrKHJxLCB0c2spOwogCi0JdGcgPSBjb250YWluZXJfb2YodGFza19jc3NfY2hlY2sodHNrLCBjcHVfY2dycF9pZCwKLQkJCQlsb2NrZGVwX2lzX2hlbGQoJnRzay0+c2lnaGFuZC0+c2lnbG9jaykpLAorCS8qCisJICogQWxsIGNhbGxlcnMgYXJlIHN5bmNocm9uaXplZCBieSB0YXNrX3JxX2xvY2soKTsgd2UgZG8gbm90IHVzZSBSQ1UKKwkgKiB3aGljaCBpcyBwb2ludGxlc3MgaGVyZS4gVGh1cywgd2UgcGFzcyAidHJ1ZSIgdG8gdGFza19jc3NfY2hlY2soKQorCSAqIHRvIHByZXZlbnQgbG9ja2RlcCB3YXJuaW5ncy4KKwkgKi8KKwl0ZyA9IGNvbnRhaW5lcl9vZih0YXNrX2Nzc19jaGVjayh0c2ssIGNwdV9jZ3JwX2lkLCB0cnVlKSwKIAkJCSAgc3RydWN0IHRhc2tfZ3JvdXAsIGNzcyk7CiAJdGcgPSBhdXRvZ3JvdXBfdGFza19ncm91cCh0c2ssIHRnKTsKIAl0c2stPnNjaGVkX3Rhc2tfZ3JvdXAgPSB0ZzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5oIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmgKaW5kZXggNTM4Yzk3OS4uMDIwMDM5YiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmgKKysrIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmgKQEAgLTI1LDkgKzI1LDYgQEAKIHZvaWQgY3B1ZGxfc2V0KHN0cnVjdCBjcHVkbCAqY3AsIGludCBjcHUsIHU2NCBkbCwgaW50IGlzX3ZhbGlkKTsKIGludCBjcHVkbF9pbml0KHN0cnVjdCBjcHVkbCAqY3ApOwogdm9pZCBjcHVkbF9jbGVhbnVwKHN0cnVjdCBjcHVkbCAqY3ApOwotI2Vsc2UKLSNkZWZpbmUgY3B1ZGxfc2V0KGNwLCBjcHUsIGRsKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGNwdWRsX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0NQVURMX0ggKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVwcmkuaCBiL2tlcm5lbC9zY2hlZC9jcHVwcmkuaAppbmRleCA2YjAzMzM0Li42M2NiYjljIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY3B1cHJpLmgKKysrIGIva2VybmVsL3NjaGVkL2NwdXByaS5oCkBAIC0yNiw5ICsyNiw2IEBACiB2b2lkIGNwdXByaV9zZXQoc3RydWN0IGNwdXByaSAqY3AsIGludCBjcHUsIGludCBwcmkpOwogaW50IGNwdXByaV9pbml0KHN0cnVjdCBjcHVwcmkgKmNwKTsKIHZvaWQgY3B1cHJpX2NsZWFudXAoc3RydWN0IGNwdXByaSAqY3ApOwotI2Vsc2UKLSNkZWZpbmUgY3B1cHJpX3NldChjcCwgY3B1LCBwcmkpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgY3B1cHJpX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9DUFVQUklfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYWRsaW5lLmMgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwppbmRleCA1Mjg1MzMyLi5lNWRiOGM2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYworKysgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwpAQCAtNTYzLDExICs1NjMsNiBAQAogewogCXN0cnVjdCBocnRpbWVyICp0aW1lciA9ICZkbF9zZS0+ZGxfdGltZXI7CiAKLQlpZiAoaHJ0aW1lcl9hY3RpdmUodGltZXIpKSB7Ci0JCWhydGltZXJfdHJ5X3RvX2NhbmNlbCh0aW1lcik7Ci0JCXJldHVybjsKLQl9Ci0KIAlocnRpbWVyX2luaXQodGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CiAJdGltZXItPmZ1bmN0aW9uID0gZGxfdGFza190aW1lcjsKIH0KQEAgLTYzMyw3ICs2MjgsNyBAQAogCiAJc2NoZWRfcnRfYXZnX3VwZGF0ZShycSwgZGVsdGFfZXhlYyk7CiAKLQlkbF9zZS0+cnVudGltZSAtPSBkZWx0YV9leGVjOworCWRsX3NlLT5ydW50aW1lIC09IGRsX3NlLT5kbF95aWVsZGVkID8gMCA6IGRlbHRhX2V4ZWM7CiAJaWYgKGRsX3J1bnRpbWVfZXhjZWVkZWQocnEsIGRsX3NlKSkgewogCQlfX2RlcXVldWVfdGFza19kbChycSwgY3VyciwgMCk7CiAJCWlmIChsaWtlbHkoc3RhcnRfZGxfdGltZXIoZGxfc2UsIGN1cnItPmRsLmRsX2Jvb3N0ZWQpKSkKQEAgLTkzMyw3ICs5MjgsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycjsKIAlzdHJ1Y3QgcnEgKnJxOwogCi0JaWYgKHNkX2ZsYWcgIT0gU0RfQkFMQU5DRV9XQUtFICYmIHNkX2ZsYWcgIT0gU0RfQkFMQU5DRV9GT1JLKQorCWlmIChzZF9mbGFnICE9IFNEX0JBTEFOQ0VfV0FLRSkKIAkJZ290byBvdXQ7CiAKIAlycSA9IGNwdV9ycShjcHUpOwpAQCAtMTAxOCw2ICsxMDEzLDEwIEBACiB7CiAJaHJ0aWNrX3N0YXJ0KHJxLCBwLT5kbC5ydW50aW1lKTsKIH0KKyNlbHNlIC8qICFDT05GSUdfU0NIRURfSFJUSUNLICovCitzdGF0aWMgdm9pZCBzdGFydF9ocnRpY2tfZGwoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworfQogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpwaWNrX25leHRfZGxfZW50aXR5KHN0cnVjdCBycSAqcnEsCkBAIC0xMDcxLDEwICsxMDcwLDggQEAKIAkvKiBSdW5uaW5nIHRhc2sgd2lsbCBuZXZlciBiZSBwdXNoZWQuICovCiAgICAgICAgZGVxdWV1ZV9wdXNoYWJsZV9kbF90YXNrKHJxLCBwKTsKIAotI2lmZGVmIENPTkZJR19TQ0hFRF9IUlRJQ0sKIAlpZiAoaHJ0aWNrX2VuYWJsZWQocnEpKQogCQlzdGFydF9ocnRpY2tfZGwocnEsIHApOwotI2VuZGlmCiAKIAlzZXRfcG9zdF9zY2hlZHVsZShycSk7CiAKQEAgLTEwOTMsMTAgKzEwOTAsOCBAQAogewogCXVwZGF0ZV9jdXJyX2RsKHJxKTsKIAotI2lmZGVmIENPTkZJR19TQ0hFRF9IUlRJQ0sKIAlpZiAoaHJ0aWNrX2VuYWJsZWQocnEpICYmIHF1ZXVlZCAmJiBwLT5kbC5ydW50aW1lID4gMCkKIAkJc3RhcnRfaHJ0aWNrX2RsKHJxLCBwKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB0YXNrX2ZvcmtfZGwoc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMTMzMyw2ICsxMzI4LDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfdGFzazsKIAlzdHJ1Y3QgcnEgKmxhdGVyX3JxOworCWludCByZXQgPSAwOwogCiAJaWYgKCFycS0+ZGwub3ZlcmxvYWRlZCkKIAkJcmV0dXJuIDA7CkBAIC0xMzc4LDcgKzEzNzQsNiBAQAogCQkJICogVGhlIHRhc2sgaXMgc3RpbGwgdGhlcmUuIFdlIGRvbid0IHRyeQogCQkJICogYWdhaW4sIHNvbWUgb3RoZXIgY3B1IHdpbGwgcHVsbCBpdCB3aGVuIHJlYWR5LgogCQkJICovCi0JCQlkZXF1ZXVlX3B1c2hhYmxlX2RsX3Rhc2socnEsIG5leHRfdGFzayk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0xMzk0LDYgKzEzODksNyBAQAogCWRlYWN0aXZhdGVfdGFzayhycSwgbmV4dF90YXNrLCAwKTsKIAlzZXRfdGFza19jcHUobmV4dF90YXNrLCBsYXRlcl9ycS0+Y3B1KTsKIAlhY3RpdmF0ZV90YXNrKGxhdGVyX3JxLCBuZXh0X3Rhc2ssIDApOworCXJldCA9IDE7CiAKIAlyZXNjaGVkX2N1cnIobGF0ZXJfcnEpOwogCkBAIC0xNDAyLDcgKzEzOTgsNyBAQAogb3V0OgogCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcHVzaF9kbF90YXNrcyhzdHJ1Y3QgcnEgKnJxKQpAQCAtMTUwOCw3ICsxNTA0LDcgQEAKIAkgICAgcC0+bnJfY3B1c19hbGxvd2VkID4gMSAmJgogCSAgICBkbF90YXNrKHJxLT5jdXJyKSAmJgogCSAgICAocnEtPmN1cnItPm5yX2NwdXNfYWxsb3dlZCA8IDIgfHwKLQkgICAgIGRsX2VudGl0eV9wcmVlbXB0KCZycS0+Y3Vyci0+ZGwsICZwLT5kbCkpKSB7CisJICAgICAhZGxfZW50aXR5X3ByZWVtcHQoJnAtPmRsLCAmcnEtPmN1cnItPmRsKSkpIHsKIAkJcHVzaF9kbF90YXNrcyhycSk7CiAJfQogfQpAQCAtMTUxNywxMCArMTUxMywzMyBAQAogCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzaykKIHsKIAlzdHJ1Y3QgcnEgKnJxOworCXN0cnVjdCByb290X2RvbWFpbiAqc3JjX3JkOwogCWludCB3ZWlnaHQ7CiAKIAlCVUdfT04oIWRsX3Rhc2socCkpOwogCisJcnEgPSB0YXNrX3JxKHApOworCXNyY19yZCA9IHJxLT5yZDsKKwkvKgorCSAqIE1pZ3JhdGluZyBhIFNDSEVEX0RFQURMSU5FIHRhc2sgYmV0d2VlbiBleGNsdXNpdmUKKwkgKiBjcHVzZXRzIChkaWZmZXJlbnQgcm9vdF9kb21haW5zKSBlbnRhaWxzIGEgYmFuZHdpZHRoCisJICogdXBkYXRlLiBXZSBhbHJlYWR5IG1hZGUgc3BhY2UgZm9yIHVzIGluIHRoZSBkZXN0aW5hdGlvbgorCSAqIGRvbWFpbiAoc2VlIGNwdXNldF9jYW5fYXR0YWNoKCkpLgorCSAqLworCWlmICghY3B1bWFza19pbnRlcnNlY3RzKHNyY19yZC0+c3BhbiwgbmV3X21hc2spKSB7CisJCXN0cnVjdCBkbF9idyAqc3JjX2RsX2I7CisKKwkJc3JjX2RsX2IgPSBkbF9id19vZihjcHVfb2YocnEpKTsKKwkJLyoKKwkJICogV2Ugbm93IGZyZWUgcmVzb3VyY2VzIG9mIHRoZSByb290X2RvbWFpbiB3ZSBhcmUgbWlncmF0aW5nCisJCSAqIG9mZi4gSW4gdGhlIHdvcnN0IGNhc2UsIHNjaGVkX3NldGF0dHIoKSBtYXkgdGVtcG9yYXJ5IGZhaWwKKwkJICogdW50aWwgd2UgY29tcGxldGUgdGhlIHVwZGF0ZS4KKwkJICovCisJCXJhd19zcGluX2xvY2soJnNyY19kbF9iLT5sb2NrKTsKKwkJX19kbF9jbGVhcihzcmNfZGxfYiwgcC0+ZGwuZGxfYncpOworCQlyYXdfc3Bpbl91bmxvY2soJnNyY19kbF9iLT5sb2NrKTsKKwl9CisKIAkvKgogCSAqIFVwZGF0ZSBvbmx5IGlmIHRoZSB0YXNrIGlzIGFjdHVhbGx5IHJ1bm5pbmcgKGkuZS4sCiAJICogaXQgaXMgb24gdGhlIHJxIEFORCBpdCBpcyBub3QgdGhyb3R0bGVkKS4KQEAgLTE1MzcsOCArMTU1Niw2IEBACiAJaWYgKChwLT5ucl9jcHVzX2FsbG93ZWQgPiAxKSA9PSAod2VpZ2h0ID4gMSkpCiAJCXJldHVybjsKIAotCXJxID0gdGFza19ycShwKTsKLQogCS8qCiAJICogVGhlIHByb2Nlc3MgdXNlZCB0byBiZSBhYmxlIHRvIG1pZ3JhdGUgT1IgaXQgY2FuIG5vdyBtaWdyYXRlCiAJICovCkBAIC0xNTg2LDIyICsxNjAzLDQ4IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKy8qCisgKiAgRW5zdXJlIHAncyBkbF90aW1lciBpcyBjYW5jZWxsZWQuIE1heSBkcm9wIHJxLT5sb2NrIGZvciBhIHdoaWxlLgorICovCitzdGF0aWMgdm9pZCBjYW5jZWxfZGxfdGltZXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBocnRpbWVyICpkbF90aW1lciA9ICZwLT5kbC5kbF90aW1lcjsKKworCS8qIE5vYm9keSB3aWxsIGNoYW5nZSB0YXNrJ3MgY2xhc3MgaWYgcGlfbG9jayBpcyBoZWxkICovCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcC0+cGlfbG9jayk7CisKKwlpZiAoaHJ0aW1lcl9hY3RpdmUoZGxfdGltZXIpKSB7CisJCWludCByZXQgPSBocnRpbWVyX3RyeV90b19jYW5jZWwoZGxfdGltZXIpOworCisJCWlmICh1bmxpa2VseShyZXQgPT0gLTEpKSB7CisJCQkvKgorCQkJICogTm90ZSwgcCBtYXkgbWlncmF0ZSBPUiBuZXcgZGVhZGxpbmUgdGFza3MKKwkJCSAqIG1heSBhcHBlYXIgaW4gcnEgd2hlbiB3ZSBhcmUgdW5sb2NraW5nIGl0LgorCQkJICogQSBjYWxsZXIgb2YgdXMgbXVzdCBiZSBmaW5lIHdpdGggdGhhdC4KKwkJCSAqLworCQkJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCQlocnRpbWVyX2NhbmNlbChkbF90aW1lcik7CisJCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIHN3aXRjaGVkX2Zyb21fZGwoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCWlmIChocnRpbWVyX2FjdGl2ZSgmcC0+ZGwuZGxfdGltZXIpICYmICFkbF9wb2xpY3kocC0+cG9saWN5KSkKLQkJaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZwLT5kbC5kbF90aW1lcik7CisJY2FuY2VsX2RsX3RpbWVyKHJxLCBwKTsKIAogCV9fZGxfY2xlYXJfcGFyYW1zKHApOwogCi0jaWZkZWYgQ09ORklHX1NNUAogCS8qCiAJICogU2luY2UgdGhpcyBtaWdodCBiZSB0aGUgb25seSAtZGVhZGxpbmUgdGFzayBvbiB0aGUgcnEsCiAJICogdGhpcyBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gdHJ5IHRvIHB1bGwgc29tZSBvdGhlciBvbmUKIAkgKiBmcm9tIGFuIG92ZXJsb2FkZWQgY3B1LCBpZiBhbnkuCiAJICovCi0JaWYgKCFycS0+ZGwuZGxfbnJfcnVubmluZykKLQkJcHVsbF9kbF90YXNrKHJxKTsKLSNlbmRpZgorCWlmICghdGFza19vbl9ycV9xdWV1ZWQocCkgfHwgcnEtPmRsLmRsX25yX3J1bm5pbmcpCisJCXJldHVybjsKKworCWlmIChwdWxsX2RsX3Rhc2socnEpKQorCQlyZXNjaGVkX2N1cnIocnEpOwogfQogCiAvKgpAQCAtMTYyMiw3ICsxNjY1LDggQEAKIAogCWlmICh0YXNrX29uX3JxX3F1ZXVlZChwKSAmJiBycS0+Y3VyciAhPSBwKSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCQlpZiAocnEtPmRsLm92ZXJsb2FkZWQgJiYgcHVzaF9kbF90YXNrKHJxKSAmJiBycSAhPSB0YXNrX3JxKHApKQorCQlpZiAocC0+bnJfY3B1c19hbGxvd2VkID4gMSAmJiBycS0+ZGwub3ZlcmxvYWRlZCAmJgorCQkJcHVzaF9kbF90YXNrKHJxKSAmJiBycSAhPSB0YXNrX3JxKHApKQogCQkJLyogT25seSByZXNjaGVkdWxlIGlmIHB1c2hpbmcgZmFpbGVkICovCiAJCQljaGVja19yZXNjaGVkID0gMDsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCkBAIC0xNzAxLDQgKzE3NDUsMTUgQEAKIAkucHJpb19jaGFuZ2VkICAgICAgICAgICA9IHByaW9fY2hhbmdlZF9kbCwKIAkuc3dpdGNoZWRfZnJvbQkJPSBzd2l0Y2hlZF9mcm9tX2RsLAogCS5zd2l0Y2hlZF90bwkJPSBzd2l0Y2hlZF90b19kbCwKKworCS51cGRhdGVfY3VycgkJPSB1cGRhdGVfY3Vycl9kbCwKIH07CisKKyNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKK2V4dGVybiB2b2lkIHByaW50X2RsX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGRsX3JxICpkbF9ycSk7CisKK3ZvaWQgcHJpbnRfZGxfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KQoreworCXByaW50X2RsX3JxKG0sIGNwdSwgJmNwdV9ycShjcHUpLT5kbCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NDSEVEX0RFQlVHICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jCmluZGV4IGNlMzM3ODAuLjkyY2M1MjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jCkBAIC0yNjEsNiArMjYxLDEyIEBACiAjdW5kZWYgUAogfQogCit2b2lkIHByaW50X2RsX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGRsX3JxICpkbF9ycSkKK3sKKwlTRVFfcHJpbnRmKG0sICJcbmRsX3JxWyVkXTpcbiIsIGNwdSk7CisJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsZFxuIiwgImRsX25yX3J1bm5pbmciLCBkbF9ycS0+ZGxfbnJfcnVubmluZyk7Cit9CisKIGV4dGVybiBfX3JlYWRfbW9zdGx5IGludCBzY2hlZF9jbG9ja19ydW5uaW5nOwogCiBzdGF0aWMgdm9pZCBwcmludF9jcHUoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KQpAQCAtMzI5LDYgKzMzNSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkX2RlYnVnX2xvY2ssIGZsYWdzKTsKIAlwcmludF9jZnNfc3RhdHMobSwgY3B1KTsKIAlwcmludF9ydF9zdGF0cyhtLCBjcHUpOworCXByaW50X2RsX3N0YXRzKG0sIGNwdSk7CiAKIAlwcmludF9ycShtLCBycSwgY3B1KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZF9kZWJ1Z19sb2NrLCBmbGFncyk7CkBAIC01MjgsOCArNTM1LDggQEAKIAkJCXVuc2lnbmVkIGxvbmcgbnJfZmF1bHRzID0gLTE7CiAJCQlpbnQgY3B1X2N1cnJlbnQsIGhvbWVfbm9kZTsKIAotCQkJaWYgKHAtPm51bWFfZmF1bHRzX21lbW9yeSkKLQkJCQlucl9mYXVsdHMgPSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbMipub2RlICsgaV07CisJCQlpZiAocC0+bnVtYV9mYXVsdHMpCisJCQkJbnJfZmF1bHRzID0gcC0+bnVtYV9mYXVsdHNbMipub2RlICsgaV07CiAKIAkJCWNwdV9jdXJyZW50ID0gIWkgPyAodGFza19ub2RlKHApID09IG5vZGUpIDoKIAkJCQkocG9sICYmIG5vZGVfaXNzZXQobm9kZSwgcG9sLT52Lm5vZGVzKSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCAzNGJhYTYwLi5kZjJjZGY3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTcyNiw2ICs3MjYsMTEgQEAKIAlhY2NvdW50X2Nmc19ycV9ydW50aW1lKGNmc19ycSwgZGVsdGFfZXhlYyk7CiB9CiAKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyX2ZhaXIoc3RydWN0IHJxICpycSkKK3sKKwl1cGRhdGVfY3VycihjZnNfcnFfb2YoJnJxLT5jdXJyLT5zZSkpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQKIHVwZGF0ZV9zdGF0c193YWl0X3N0YXJ0KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCiB7CkBAIC04NjgsNyArODczLDYgQEAKIAlzcGlubG9ja190IGxvY2s7IC8qIG5yX3Rhc2tzLCB0YXNrcyAqLwogCWludCBucl90YXNrczsKIAlwaWRfdCBnaWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0YXNrX2xpc3Q7CiAKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCW5vZGVtYXNrX3QgYWN0aXZlX25vZGVzOwpAQCAtODk2LDE4ICs5MDAsMjQgQEAKIAlyZXR1cm4gcC0+bnVtYV9ncm91cCA/IHAtPm51bWFfZ3JvdXAtPmdpZCA6IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHRhc2tfZmF1bHRzX2lkeChpbnQgbmlkLCBpbnQgcHJpdikKKy8qCisgKiBUaGUgYXZlcmFnZWQgc3RhdGlzdGljcywgc2hhcmVkICYgcHJpdmF0ZSwgbWVtb3J5ICYgY3B1LAorICogb2NjdXB5IHRoZSBmaXJzdCBoYWxmIG9mIHRoZSBhcnJheS4gVGhlIHNlY29uZCBoYWxmIG9mIHRoZQorICogYXJyYXkgaXMgZm9yIGN1cnJlbnQgY291bnRlcnMsIHdoaWNoIGFyZSBhdmVyYWdlZCBpbnRvIHRoZQorICogZmlyc3Qgc2V0IGJ5IHRhc2tfbnVtYV9wbGFjZW1lbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfZmF1bHRzX2lkeChlbnVtIG51bWFfZmF1bHRzX3N0YXRzIHMsIGludCBuaWQsIGludCBwcml2KQogewotCXJldHVybiBOUl9OVU1BX0hJTlRfRkFVTFRfVFlQRVMgKiBuaWQgKyBwcml2OworCXJldHVybiBOUl9OVU1BX0hJTlRfRkFVTFRfVFlQRVMgKiAocyAqIG5yX25vZGVfaWRzICsgbmlkKSArIHByaXY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0YXNrX2ZhdWx0cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpCiB7Ci0JaWYgKCFwLT5udW1hX2ZhdWx0c19tZW1vcnkpCisJaWYgKCFwLT5udW1hX2ZhdWx0cykKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcC0+bnVtYV9mYXVsdHNfbWVtb3J5W3Rhc2tfZmF1bHRzX2lkeChuaWQsIDApXSArCi0JCXAtPm51bWFfZmF1bHRzX21lbW9yeVt0YXNrX2ZhdWx0c19pZHgobmlkLCAxKV07CisJcmV0dXJuIHAtPm51bWFfZmF1bHRzW3Rhc2tfZmF1bHRzX2lkeChOVU1BX01FTSwgbmlkLCAwKV0gKworCQlwLT5udW1hX2ZhdWx0c1t0YXNrX2ZhdWx0c19pZHgoTlVNQV9NRU0sIG5pZCwgMSldOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ3JvdXBfZmF1bHRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZCkKQEAgLTkxNSwxNCArOTI1LDc5IEBACiAJaWYgKCFwLT5udW1hX2dyb3VwKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBwLT5udW1hX2dyb3VwLT5mYXVsdHNbdGFza19mYXVsdHNfaWR4KG5pZCwgMCldICsKLQkJcC0+bnVtYV9ncm91cC0+ZmF1bHRzW3Rhc2tfZmF1bHRzX2lkeChuaWQsIDEpXTsKKwlyZXR1cm4gcC0+bnVtYV9ncm91cC0+ZmF1bHRzW3Rhc2tfZmF1bHRzX2lkeChOVU1BX01FTSwgbmlkLCAwKV0gKworCQlwLT5udW1hX2dyb3VwLT5mYXVsdHNbdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNLCBuaWQsIDEpXTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdyb3VwX2ZhdWx0c19jcHUoc3RydWN0IG51bWFfZ3JvdXAgKmdyb3VwLCBpbnQgbmlkKQogewotCXJldHVybiBncm91cC0+ZmF1bHRzX2NwdVt0YXNrX2ZhdWx0c19pZHgobmlkLCAwKV0gKwotCQlncm91cC0+ZmF1bHRzX2NwdVt0YXNrX2ZhdWx0c19pZHgobmlkLCAxKV07CisJcmV0dXJuIGdyb3VwLT5mYXVsdHNfY3B1W3Rhc2tfZmF1bHRzX2lkeChOVU1BX01FTSwgbmlkLCAwKV0gKworCQlncm91cC0+ZmF1bHRzX2NwdVt0YXNrX2ZhdWx0c19pZHgoTlVNQV9NRU0sIG5pZCwgMSldOworfQorCisvKiBIYW5kbGUgcGxhY2VtZW50IG9uIHN5c3RlbXMgd2hlcmUgbm90IGFsbCBub2RlcyBhcmUgZGlyZWN0bHkgY29ubmVjdGVkLiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NvcmVfbmVhcmJ5X25vZGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZCwKKwkJCQkJaW50IG1heGRpc3QsIGJvb2wgdGFzaykKK3sKKwl1bnNpZ25lZCBsb25nIHNjb3JlID0gMDsKKwlpbnQgbm9kZTsKKworCS8qCisJICogQWxsIG5vZGVzIGFyZSBkaXJlY3RseSBjb25uZWN0ZWQsIGFuZCB0aGUgc2FtZSBkaXN0YW5jZQorCSAqIGZyb20gZWFjaCBvdGhlci4gTm8gbmVlZCBmb3IgZmFuY3kgcGxhY2VtZW50IGFsZ29yaXRobXMuCisJICovCisJaWYgKHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9PSBOVU1BX0RJUkVDVCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoaXMgY29kZSBpcyBjYWxsZWQgZm9yIGVhY2ggbm9kZSwgaW50cm9kdWNpbmcgTl4yIGNvbXBsZXhpdHksCisJICogd2hpY2ggc2hvdWxkIGJlIG9rIGdpdmVuIHRoZSBudW1iZXIgb2Ygbm9kZXMgcmFyZWx5IGV4Y2VlZHMgOC4KKwkgKi8KKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCXVuc2lnbmVkIGxvbmcgZmF1bHRzOworCQlpbnQgZGlzdCA9IG5vZGVfZGlzdGFuY2UobmlkLCBub2RlKTsKKworCQkvKgorCQkgKiBUaGUgZnVydGhlc3QgYXdheSBub2RlcyBpbiB0aGUgc3lzdGVtIGFyZSBub3QgaW50ZXJlc3RpbmcKKwkJICogZm9yIHBsYWNlbWVudDsgbmlkIHdhcyBhbHJlYWR5IGNvdW50ZWQuCisJCSAqLworCQlpZiAoZGlzdCA9PSBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZSB8fCBub2RlID09IG5pZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE9uIHN5c3RlbXMgd2l0aCBhIGJhY2twbGFuZSBOVU1BIHRvcG9sb2d5LCBjb21wYXJlIGdyb3VwcworCQkgKiBvZiBub2RlcywgYW5kIG1vdmUgdGFza3MgdG93YXJkcyB0aGUgZ3JvdXAgd2l0aCB0aGUgbW9zdAorCQkgKiBtZW1vcnkgYWNjZXNzZXMuIFdoZW4gY29tcGFyaW5nIHR3byBub2RlcyBhdCBkaXN0YW5jZQorCQkgKiAiaG9wbGltaXQiLCBvbmx5IG5vZGVzIGNsb3NlciBieSB0aGFuICJob3BsaW1pdCIgYXJlIHBhcnQKKwkJICogb2YgZWFjaCBncm91cC4gU2tpcCBvdGhlciBub2Rlcy4KKwkJICovCisJCWlmIChzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPT0gTlVNQV9CQUNLUExBTkUgJiYKKwkJCQkJZGlzdCA+IG1heGRpc3QpCisJCQljb250aW51ZTsKKworCQkvKiBBZGQgdXAgdGhlIGZhdWx0cyBmcm9tIG5lYXJieSBub2Rlcy4gKi8KKwkJaWYgKHRhc2spCisJCQlmYXVsdHMgPSB0YXNrX2ZhdWx0cyhwLCBub2RlKTsKKwkJZWxzZQorCQkJZmF1bHRzID0gZ3JvdXBfZmF1bHRzKHAsIG5vZGUpOworCisJCS8qCisJCSAqIE9uIHN5c3RlbXMgd2l0aCBhIGdsdWVsZXNzIG1lc2ggTlVNQSB0b3BvbG9neSwgdGhlcmUgYXJlCisJCSAqIG5vIGZpeGVkICJncm91cHMgb2Ygbm9kZXMiLiBJbnN0ZWFkLCBub2RlcyB0aGF0IGFyZSBub3QKKwkJICogZGlyZWN0bHkgY29ubmVjdGVkIGJvdW5jZSB0cmFmZmljIHRocm91Z2ggaW50ZXJtZWRpYXRlCisJCSAqIG5vZGVzOyBhIG51bWFfZ3JvdXAgY2FuIG9jY3VweSBhbnkgc2V0IG9mIG5vZGVzLgorCQkgKiBUaGUgZnVydGhlciBhd2F5IGEgbm9kZSBpcywgdGhlIGxlc3MgdGhlIGZhdWx0cyBjb3VudC4KKwkJICogVGhpcyBzZWVtcyB0byByZXN1bHQgaW4gZ29vZCB0YXNrIHBsYWNlbWVudC4KKwkJICovCisJCWlmIChzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPT0gTlVNQV9HTFVFTEVTU19NRVNIKSB7CisJCQlmYXVsdHMgKj0gKHNjaGVkX21heF9udW1hX2Rpc3RhbmNlIC0gZGlzdCk7CisJCQlmYXVsdHMgLz0gKHNjaGVkX21heF9udW1hX2Rpc3RhbmNlIC0gTE9DQUxfRElTVEFOQ0UpOworCQl9CisKKwkJc2NvcmUgKz0gZmF1bHRzOworCX0KKworCXJldHVybiBzY29yZTsKIH0KIAogLyoKQEAgLTkzMSwxMSArMTAwNiwxMiBAQAogICogbGFyZ2VyIG11bHRpcGxpZXIsIGluIG9yZGVyIHRvIGdyb3VwIHRhc2tzIHRvZ2V0aGVyIHRoYXQgYXJlIGFsbW9zdAogICogZXZlbmx5IHNwcmVhZCBvdXQgYmV0d2VlbiBudW1hIG5vZGVzLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFza193ZWlnaHQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRhc2tfd2VpZ2h0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZCwKKwkJCQkJaW50IGRpc3QpCiB7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbF9mYXVsdHM7CisJdW5zaWduZWQgbG9uZyBmYXVsdHMsIHRvdGFsX2ZhdWx0czsKIAotCWlmICghcC0+bnVtYV9mYXVsdHNfbWVtb3J5KQorCWlmICghcC0+bnVtYV9mYXVsdHMpCiAJCXJldHVybiAwOwogCiAJdG90YWxfZmF1bHRzID0gcC0+dG90YWxfbnVtYV9mYXVsdHM7CkBAIC05NDMsMTUgKzEwMTksMjkgQEAKIAlpZiAoIXRvdGFsX2ZhdWx0cykKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gMTAwMCAqIHRhc2tfZmF1bHRzKHAsIG5pZCkgLyB0b3RhbF9mYXVsdHM7CisJZmF1bHRzID0gdGFza19mYXVsdHMocCwgbmlkKTsKKwlmYXVsdHMgKz0gc2NvcmVfbmVhcmJ5X25vZGVzKHAsIG5pZCwgZGlzdCwgdHJ1ZSk7CisKKwlyZXR1cm4gMTAwMCAqIGZhdWx0cyAvIHRvdGFsX2ZhdWx0czsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdyb3VwX3dlaWdodChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ3JvdXBfd2VpZ2h0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZCwKKwkJCQkJIGludCBkaXN0KQogewotCWlmICghcC0+bnVtYV9ncm91cCB8fCAhcC0+bnVtYV9ncm91cC0+dG90YWxfZmF1bHRzKQorCXVuc2lnbmVkIGxvbmcgZmF1bHRzLCB0b3RhbF9mYXVsdHM7CisKKwlpZiAoIXAtPm51bWFfZ3JvdXApCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIDEwMDAgKiBncm91cF9mYXVsdHMocCwgbmlkKSAvIHAtPm51bWFfZ3JvdXAtPnRvdGFsX2ZhdWx0czsKKwl0b3RhbF9mYXVsdHMgPSBwLT5udW1hX2dyb3VwLT50b3RhbF9mYXVsdHM7CisKKwlpZiAoIXRvdGFsX2ZhdWx0cykKKwkJcmV0dXJuIDA7CisKKwlmYXVsdHMgPSBncm91cF9mYXVsdHMocCwgbmlkKTsKKwlmYXVsdHMgKz0gc2NvcmVfbmVhcmJ5X25vZGVzKHAsIG5pZCwgZGlzdCwgZmFsc2UpOworCisJcmV0dXJuIDEwMDAgKiBmYXVsdHMgLyB0b3RhbF9mYXVsdHM7CiB9CiAKIGJvb2wgc2hvdWxkX251bWFfbWlncmF0ZV9tZW1vcnkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcGFnZSAqIHBhZ2UsCkBAIC0xMDg0LDYgKzExNzQsNyBAQAogCXN0cnVjdCBudW1hX3N0YXRzIHNyY19zdGF0cywgZHN0X3N0YXRzOwogCiAJaW50IGltYmFsYW5jZV9wY3Q7CisJaW50IGRpc3Q7CiAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJlc3RfdGFzazsKIAlsb25nIGJlc3RfaW1wOwpAQCAtMTE2Myw2ICsxMjU0LDcgQEAKIAlsb25nIGxvYWQ7CiAJbG9uZyBpbXAgPSBlbnYtPnAtPm51bWFfZ3JvdXAgPyBncm91cGltcCA6IHRhc2tpbXA7CiAJbG9uZyBtb3ZlaW1wID0gaW1wOworCWludCBkaXN0ID0gZW52LT5kaXN0OwogCiAJcmN1X3JlYWRfbG9jaygpOwogCkBAIC0xMTgwLDYgKzEyNzIsMTMgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkc3RfcnEtPmxvY2spOwogCiAJLyoKKwkgKiBCZWNhdXNlIHdlIGhhdmUgcHJlZW1wdGlvbiBlbmFibGVkIHdlIGNhbiBnZXQgbWlncmF0ZWQgYXJvdW5kIGFuZAorCSAqIGVuZCB0cnkgc2VsZWN0aW5nIG91cnNlbHZlcyAoY3VycmVudCA9PSBlbnYtPnApIGFzIGEgc3dhcCBjYW5kaWRhdGUuCisJICovCisJaWYgKGN1ciA9PSBlbnYtPnApCisJCWdvdG8gdW5sb2NrOworCisJLyoKIAkgKiAiaW1wIiBpcyB0aGUgZmF1bHQgZGlmZmVyZW50aWFsIGZvciB0aGUgc291cmNlIHRhc2sgYmV0d2VlbiB0aGUKIAkgKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5vZGUuIENhbGN1bGF0ZSB0aGUgdG90YWwgZGlmZmVyZW50aWFsIGZvcgogCSAqIHRoZSBzb3VyY2UgdGFzayBhbmQgcG90ZW50aWFsIGRlc3RpbmF0aW9uIHRhc2suIFRoZSBtb3JlIG5lZ2F0aXZlCkBAIC0xMTk2LDggKzEyOTUsOCBAQAogCQkgKiBpbiBhbnkgZ3JvdXAgdGhlbiBsb29rIG9ubHkgYXQgdGFzayB3ZWlnaHRzLgogCQkgKi8KIAkJaWYgKGN1ci0+bnVtYV9ncm91cCA9PSBlbnYtPnAtPm51bWFfZ3JvdXApIHsKLQkJCWltcCA9IHRhc2tpbXAgKyB0YXNrX3dlaWdodChjdXIsIGVudi0+c3JjX25pZCkgLQotCQkJICAgICAgdGFza193ZWlnaHQoY3VyLCBlbnYtPmRzdF9uaWQpOworCQkJaW1wID0gdGFza2ltcCArIHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5zcmNfbmlkLCBkaXN0KSAtCisJCQkgICAgICB0YXNrX3dlaWdodChjdXIsIGVudi0+ZHN0X25pZCwgZGlzdCk7CiAJCQkvKgogCQkJICogQWRkIHNvbWUgaHlzdGVyZXNpcyB0byBwcmV2ZW50IHN3YXBwaW5nIHRoZQogCQkJICogdGFza3Mgd2l0aGluIGEgZ3JvdXAgb3ZlciB0aW55IGRpZmZlcmVuY2VzLgpAQCAtMTIxMSwxMSArMTMxMCwxMSBAQAogCQkJICogaW5zdGVhZC4KIAkJCSAqLwogCQkJaWYgKGN1ci0+bnVtYV9ncm91cCkKLQkJCQlpbXAgKz0gZ3JvdXBfd2VpZ2h0KGN1ciwgZW52LT5zcmNfbmlkKSAtCi0JCQkJICAgICAgIGdyb3VwX3dlaWdodChjdXIsIGVudi0+ZHN0X25pZCk7CisJCQkJaW1wICs9IGdyb3VwX3dlaWdodChjdXIsIGVudi0+c3JjX25pZCwgZGlzdCkgLQorCQkJCSAgICAgICBncm91cF93ZWlnaHQoY3VyLCBlbnYtPmRzdF9uaWQsIGRpc3QpOwogCQkJZWxzZQotCQkJCWltcCArPSB0YXNrX3dlaWdodChjdXIsIGVudi0+c3JjX25pZCkgLQotCQkJCSAgICAgICB0YXNrX3dlaWdodChjdXIsIGVudi0+ZHN0X25pZCk7CisJCQkJaW1wICs9IHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5zcmNfbmlkLCBkaXN0KSAtCisJCQkJICAgICAgIHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5kc3RfbmlkLCBkaXN0KTsKIAkJfQogCX0KIApAQCAtMTMxNCw3ICsxNDEzLDcgQEAKIAl9OwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogCXVuc2lnbmVkIGxvbmcgdGFza3dlaWdodCwgZ3JvdXB3ZWlnaHQ7Ci0JaW50IG5pZCwgcmV0OworCWludCBuaWQsIHJldCwgZGlzdDsKIAlsb25nIHRhc2tpbXAsIGdyb3VwaW1wOwogCiAJLyoKQEAgLTEzNDIsMjkgKzE0NDEsNDUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdGFza3dlaWdodCA9IHRhc2tfd2VpZ2h0KHAsIGVudi5zcmNfbmlkKTsKLQlncm91cHdlaWdodCA9IGdyb3VwX3dlaWdodChwLCBlbnYuc3JjX25pZCk7Ci0JdXBkYXRlX251bWFfc3RhdHMoJmVudi5zcmNfc3RhdHMsIGVudi5zcmNfbmlkKTsKIAllbnYuZHN0X25pZCA9IHAtPm51bWFfcHJlZmVycmVkX25pZDsKLQl0YXNraW1wID0gdGFza193ZWlnaHQocCwgZW52LmRzdF9uaWQpIC0gdGFza3dlaWdodDsKLQlncm91cGltcCA9IGdyb3VwX3dlaWdodChwLCBlbnYuZHN0X25pZCkgLSBncm91cHdlaWdodDsKKwlkaXN0ID0gZW52LmRpc3QgPSBub2RlX2Rpc3RhbmNlKGVudi5zcmNfbmlkLCBlbnYuZHN0X25pZCk7CisJdGFza3dlaWdodCA9IHRhc2tfd2VpZ2h0KHAsIGVudi5zcmNfbmlkLCBkaXN0KTsKKwlncm91cHdlaWdodCA9IGdyb3VwX3dlaWdodChwLCBlbnYuc3JjX25pZCwgZGlzdCk7CisJdXBkYXRlX251bWFfc3RhdHMoJmVudi5zcmNfc3RhdHMsIGVudi5zcmNfbmlkKTsKKwl0YXNraW1wID0gdGFza193ZWlnaHQocCwgZW52LmRzdF9uaWQsIGRpc3QpIC0gdGFza3dlaWdodDsKKwlncm91cGltcCA9IGdyb3VwX3dlaWdodChwLCBlbnYuZHN0X25pZCwgZGlzdCkgLSBncm91cHdlaWdodDsKIAl1cGRhdGVfbnVtYV9zdGF0cygmZW52LmRzdF9zdGF0cywgZW52LmRzdF9uaWQpOwogCiAJLyogVHJ5IHRvIGZpbmQgYSBzcG90IG9uIHRoZSBwcmVmZXJyZWQgbmlkLiAqLwogCXRhc2tfbnVtYV9maW5kX2NwdSgmZW52LCB0YXNraW1wLCBncm91cGltcCk7CiAKLQkvKiBObyBzcGFjZSBhdmFpbGFibGUgb24gdGhlIHByZWZlcnJlZCBuaWQuIExvb2sgZWxzZXdoZXJlLiAqLwotCWlmIChlbnYuYmVzdF9jcHUgPT0gLTEpIHsKKwkvKgorCSAqIExvb2sgYXQgb3RoZXIgbm9kZXMgaW4gdGhlc2UgY2FzZXM6CisJICogLSB0aGVyZSBpcyBubyBzcGFjZSBhdmFpbGFibGUgb24gdGhlIHByZWZlcnJlZF9uaWQKKwkgKiAtIHRoZSB0YXNrIGlzIHBhcnQgb2YgYSBudW1hX2dyb3VwIHRoYXQgaXMgaW50ZXJsZWF2ZWQgYWNyb3NzCisJICogICBtdWx0aXBsZSBOVU1BIG5vZGVzOyBpbiBvcmRlciB0byBiZXR0ZXIgY29uc29saWRhdGUgdGhlIGdyb3VwLAorCSAqICAgd2UgbmVlZCB0byBjaGVjayBvdGhlciBsb2NhdGlvbnMuCisJICovCisJaWYgKGVudi5iZXN0X2NwdSA9PSAtMSB8fCAocC0+bnVtYV9ncm91cCAmJgorCQkJbm9kZXNfd2VpZ2h0KHAtPm51bWFfZ3JvdXAtPmFjdGl2ZV9ub2RlcykgPiAxKSkgewogCQlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKIAkJCWlmIChuaWQgPT0gZW52LnNyY19uaWQgfHwgbmlkID09IHAtPm51bWFfcHJlZmVycmVkX25pZCkKIAkJCQljb250aW51ZTsKIAorCQkJZGlzdCA9IG5vZGVfZGlzdGFuY2UoZW52LnNyY19uaWQsIGVudi5kc3RfbmlkKTsKKwkJCWlmIChzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPT0gTlVNQV9CQUNLUExBTkUgJiYKKwkJCQkJCWRpc3QgIT0gZW52LmRpc3QpIHsKKwkJCQl0YXNrd2VpZ2h0ID0gdGFza193ZWlnaHQocCwgZW52LnNyY19uaWQsIGRpc3QpOworCQkJCWdyb3Vwd2VpZ2h0ID0gZ3JvdXBfd2VpZ2h0KHAsIGVudi5zcmNfbmlkLCBkaXN0KTsKKwkJCX0KKwogCQkJLyogT25seSBjb25zaWRlciBub2RlcyB3aGVyZSBib3RoIHRhc2sgYW5kIGdyb3VwcyBiZW5lZml0ICovCi0JCQl0YXNraW1wID0gdGFza193ZWlnaHQocCwgbmlkKSAtIHRhc2t3ZWlnaHQ7Ci0JCQlncm91cGltcCA9IGdyb3VwX3dlaWdodChwLCBuaWQpIC0gZ3JvdXB3ZWlnaHQ7CisJCQl0YXNraW1wID0gdGFza193ZWlnaHQocCwgbmlkLCBkaXN0KSAtIHRhc2t3ZWlnaHQ7CisJCQlncm91cGltcCA9IGdyb3VwX3dlaWdodChwLCBuaWQsIGRpc3QpIC0gZ3JvdXB3ZWlnaHQ7CiAJCQlpZiAodGFza2ltcCA8IDAgJiYgZ3JvdXBpbXAgPCAwKQogCQkJCWNvbnRpbnVlOwogCisJCQllbnYuZGlzdCA9IGRpc3Q7CiAJCQllbnYuZHN0X25pZCA9IG5pZDsKIAkJCXVwZGF0ZV9udW1hX3N0YXRzKCZlbnYuZHN0X3N0YXRzLCBlbnYuZHN0X25pZCk7CiAJCQl0YXNrX251bWFfZmluZF9jcHUoJmVudiwgdGFza2ltcCwgZ3JvdXBpbXApOwpAQCAtMTQxOSw3ICsxNTM0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGludGVydmFsID0gSFo7CiAKIAkvKiBUaGlzIHRhc2sgaGFzIG5vIE5VTUEgZmF1bHQgc3RhdGlzdGljcyB5ZXQgKi8KLQlpZiAodW5saWtlbHkocC0+bnVtYV9wcmVmZXJyZWRfbmlkID09IC0xIHx8ICFwLT5udW1hX2ZhdWx0c19tZW1vcnkpKQorCWlmICh1bmxpa2VseShwLT5udW1hX3ByZWZlcnJlZF9uaWQgPT0gLTEgfHwgIXAtPm51bWFfZmF1bHRzKSkKIAkJcmV0dXJuOwogCiAJLyogUGVyaW9kaWNhbGx5IHJldHJ5IG1pZ3JhdGluZyB0aGUgdGFzayB0byB0aGUgcHJlZmVycmVkIG5vZGUgKi8KQEAgLTE1NjgsNiArMTY4Myw5MiBAQAogCXJldHVybiBkZWx0YTsKIH0KIAorLyoKKyAqIERldGVybWluZSB0aGUgcHJlZmVycmVkIG5pZCBmb3IgYSB0YXNrIGluIGEgbnVtYV9ncm91cC4gVGhpcyBuZWVkcyB0bworICogYmUgZG9uZSBpbiBhIHdheSB0aGF0IHByb2R1Y2VzIGNvbnNpc3RlbnQgcmVzdWx0cyB3aXRoIGdyb3VwX3dlaWdodCwKKyAqIG90aGVyd2lzZSB3b3JrbG9hZHMgbWlnaHQgbm90IGNvbnZlcmdlLgorICovCitzdGF0aWMgaW50IHByZWZlcnJlZF9ncm91cF9uaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKQoreworCW5vZGVtYXNrX3Qgbm9kZXM7CisJaW50IGRpc3Q7CisKKwkvKiBEaXJlY3QgY29ubmVjdGlvbnMgYmV0d2VlbiBhbGwgTlVNQSBub2Rlcy4gKi8KKwlpZiAoc2NoZWRfbnVtYV90b3BvbG9neV90eXBlID09IE5VTUFfRElSRUNUKQorCQlyZXR1cm4gbmlkOworCisJLyoKKwkgKiBPbiBhIHN5c3RlbSB3aXRoIGdsdWVsZXNzIG1lc2ggTlVNQSB0b3BvbG9neSwgZ3JvdXBfd2VpZ2h0CisJICogc2NvcmVzIG5vZGVzIGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIE5VTUEgaGludGluZyBmYXVsdHMgb24KKwkgKiBib3RoIHRoZSBub2RlIGl0c2VsZiwgYW5kIG9uIG5lYXJieSBub2Rlcy4KKwkgKi8KKwlpZiAoc2NoZWRfbnVtYV90b3BvbG9neV90eXBlID09IE5VTUFfR0xVRUxFU1NfTUVTSCkgeworCQl1bnNpZ25lZCBsb25nIHNjb3JlLCBtYXhfc2NvcmUgPSAwOworCQlpbnQgbm9kZSwgbWF4X25vZGUgPSBuaWQ7CisKKwkJZGlzdCA9IHNjaGVkX21heF9udW1hX2Rpc3RhbmNlOworCisJCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKKwkJCXNjb3JlID0gZ3JvdXBfd2VpZ2h0KHAsIG5vZGUsIGRpc3QpOworCQkJaWYgKHNjb3JlID4gbWF4X3Njb3JlKSB7CisJCQkJbWF4X3Njb3JlID0gc2NvcmU7CisJCQkJbWF4X25vZGUgPSBub2RlOworCQkJfQorCQl9CisJCXJldHVybiBtYXhfbm9kZTsKKwl9CisKKwkvKgorCSAqIEZpbmRpbmcgdGhlIHByZWZlcnJlZCBuaWQgaW4gYSBzeXN0ZW0gd2l0aCBOVU1BIGJhY2twbGFuZQorCSAqIGludGVyY29ubmVjdCB0b3BvbG9neSBpcyBtb3JlIGludm9sdmVkLiBUaGUgZ29hbCBpcyB0byBsb2NhdGUKKwkgKiB0YXNrcyBmcm9tIG51bWFfZ3JvdXBzIG5lYXIgZWFjaCBvdGhlciBpbiB0aGUgc3lzdGVtLCBhbmQKKwkgKiB1bnRhbmdsZSB3b3JrbG9hZHMgZnJvbSBkaWZmZXJlbnQgc2lkZXMgb2YgdGhlIHN5c3RlbS4gVGhpcyByZXF1aXJlcworCSAqIHNlYXJjaGluZyBkb3duIHRoZSBoaWVyYXJjaHkgb2Ygbm9kZSBncm91cHMsIHJlY3Vyc2l2ZWx5IHNlYXJjaGluZworCSAqIGluc2lkZSB0aGUgaGlnaGVzdCBzY29yaW5nIGdyb3VwIG9mIG5vZGVzLiBUaGUgbm9kZW1hc2sgdHJpY2tzCisJICoga2VlcCB0aGUgY29tcGxleGl0eSBvZiB0aGUgc2VhcmNoIGRvd24uCisJICovCisJbm9kZXMgPSBub2RlX29ubGluZV9tYXA7CisJZm9yIChkaXN0ID0gc2NoZWRfbWF4X251bWFfZGlzdGFuY2U7IGRpc3QgPiBMT0NBTF9ESVNUQU5DRTsgZGlzdC0tKSB7CisJCXVuc2lnbmVkIGxvbmcgbWF4X2ZhdWx0cyA9IDA7CisJCW5vZGVtYXNrX3QgbWF4X2dyb3VwOworCQlpbnQgYSwgYjsKKworCQkvKiBBcmUgdGhlcmUgbm9kZXMgYXQgdGhpcyBkaXN0YW5jZSBmcm9tIGVhY2ggb3RoZXI/ICovCisJCWlmICghZmluZF9udW1hX2Rpc3RhbmNlKGRpc3QpKQorCQkJY29udGludWU7CisKKwkJZm9yX2VhY2hfbm9kZV9tYXNrKGEsIG5vZGVzKSB7CisJCQl1bnNpZ25lZCBsb25nIGZhdWx0cyA9IDA7CisJCQlub2RlbWFza190IHRoaXNfZ3JvdXA7CisJCQlub2Rlc19jbGVhcih0aGlzX2dyb3VwKTsKKworCQkJLyogU3VtIGdyb3VwJ3MgTlVNQSBmYXVsdHM7IGluY2x1ZGVzIGE9PWIgY2FzZS4gKi8KKwkJCWZvcl9lYWNoX25vZGVfbWFzayhiLCBub2RlcykgeworCQkJCWlmIChub2RlX2Rpc3RhbmNlKGEsIGIpIDwgZGlzdCkgeworCQkJCQlmYXVsdHMgKz0gZ3JvdXBfZmF1bHRzKHAsIGIpOworCQkJCQlub2RlX3NldChiLCB0aGlzX2dyb3VwKTsKKwkJCQkJbm9kZV9jbGVhcihiLCBub2Rlcyk7CisJCQkJfQorCQkJfQorCisJCQkvKiBSZW1lbWJlciB0aGUgdG9wIGdyb3VwLiAqLworCQkJaWYgKGZhdWx0cyA+IG1heF9mYXVsdHMpIHsKKwkJCQltYXhfZmF1bHRzID0gZmF1bHRzOworCQkJCW1heF9ncm91cCA9IHRoaXNfZ3JvdXA7CisJCQkJLyoKKwkJCQkgKiBzdWJ0bGU6IGF0IHRoZSBzbWFsbGVzdCBkaXN0YW5jZSB0aGVyZSBpcworCQkJCSAqIGp1c3Qgb25lIG5vZGUgbGVmdCBpbiBlYWNoICJncm91cCIsIHRoZQorCQkJCSAqIHdpbm5lciBpcyB0aGUgcHJlZmVycmVkIG5pZC4KKwkJCQkgKi8KKwkJCQluaWQgPSBhOworCQkJfQorCQl9CisJCS8qIE5leHQgcm91bmQsIGV2YWx1YXRlIHRoZSBub2RlcyB3aXRoaW4gbWF4X2dyb3VwLiAqLworCQlub2RlcyA9IG1heF9ncm91cDsKKwl9CisJcmV0dXJuIG5pZDsKK30KKwogc3RhdGljIHZvaWQgdGFza19udW1hX3BsYWNlbWVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaW50IHNlcSwgbmlkLCBtYXhfbmlkID0gLTEsIG1heF9ncm91cF9uaWQgPSAtMTsKQEAgLTE1OTUsMTggKzE3OTYsMjMgQEAKIAogCS8qIEZpbmQgdGhlIG5vZGUgd2l0aCB0aGUgaGlnaGVzdCBudW1iZXIgb2YgZmF1bHRzICovCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CisJCS8qIEtlZXAgdHJhY2sgb2YgdGhlIG9mZnNldHMgaW4gbnVtYV9mYXVsdHMgYXJyYXkgKi8KKwkJaW50IG1lbV9pZHgsIG1lbWJ1Zl9pZHgsIGNwdV9pZHgsIGNwdWJ1Zl9pZHg7CiAJCXVuc2lnbmVkIGxvbmcgZmF1bHRzID0gMCwgZ3JvdXBfZmF1bHRzID0gMDsKLQkJaW50IHByaXYsIGk7CisJCWludCBwcml2OwogCiAJCWZvciAocHJpdiA9IDA7IHByaXYgPCBOUl9OVU1BX0hJTlRfRkFVTFRfVFlQRVM7IHByaXYrKykgewogCQkJbG9uZyBkaWZmLCBmX2RpZmYsIGZfd2VpZ2h0OwogCi0JCQlpID0gdGFza19mYXVsdHNfaWR4KG5pZCwgcHJpdik7CisJCQltZW1faWR4ID0gdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNLCBuaWQsIHByaXYpOworCQkJbWVtYnVmX2lkeCA9IHRhc2tfZmF1bHRzX2lkeChOVU1BX01FTUJVRiwgbmlkLCBwcml2KTsKKwkJCWNwdV9pZHggPSB0YXNrX2ZhdWx0c19pZHgoTlVNQV9DUFUsIG5pZCwgcHJpdik7CisJCQljcHVidWZfaWR4ID0gdGFza19mYXVsdHNfaWR4KE5VTUFfQ1BVQlVGLCBuaWQsIHByaXYpOwogCiAJCQkvKiBEZWNheSBleGlzdGluZyB3aW5kb3csIGNvcHkgZmF1bHRzIHNpbmNlIGxhc3Qgc2NhbiAqLwotCQkJZGlmZiA9IHAtPm51bWFfZmF1bHRzX2J1ZmZlcl9tZW1vcnlbaV0gLSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbaV0gLyAyOwotCQkJZmF1bHRfdHlwZXNbcHJpdl0gKz0gcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeVtpXTsKLQkJCXAtPm51bWFfZmF1bHRzX2J1ZmZlcl9tZW1vcnlbaV0gPSAwOworCQkJZGlmZiA9IHAtPm51bWFfZmF1bHRzW21lbWJ1Zl9pZHhdIC0gcC0+bnVtYV9mYXVsdHNbbWVtX2lkeF0gLyAyOworCQkJZmF1bHRfdHlwZXNbcHJpdl0gKz0gcC0+bnVtYV9mYXVsdHNbbWVtYnVmX2lkeF07CisJCQlwLT5udW1hX2ZhdWx0c1ttZW1idWZfaWR4XSA9IDA7CiAKIAkJCS8qCiAJCQkgKiBOb3JtYWxpemUgdGhlIGZhdWx0c19mcm9tLCBzbyBhbGwgdGFza3MgaW4gYSBncm91cApAQCAtMTYxNiwyMSArMTgyMiwyNyBAQAogCQkJICogZmF1bHRzIGFyZSBsZXNzIGltcG9ydGFudC4KIAkJCSAqLwogCQkJZl93ZWlnaHQgPSBkaXY2NF91NjQocnVudGltZSA8PCAxNiwgcGVyaW9kICsgMSk7Ci0JCQlmX3dlaWdodCA9IChmX3dlaWdodCAqIHAtPm51bWFfZmF1bHRzX2J1ZmZlcl9jcHVbaV0pIC8KKwkJCWZfd2VpZ2h0ID0gKGZfd2VpZ2h0ICogcC0+bnVtYV9mYXVsdHNbY3B1YnVmX2lkeF0pIC8KIAkJCQkgICAodG90YWxfZmF1bHRzICsgMSk7Ci0JCQlmX2RpZmYgPSBmX3dlaWdodCAtIHAtPm51bWFfZmF1bHRzX2NwdVtpXSAvIDI7Ci0JCQlwLT5udW1hX2ZhdWx0c19idWZmZXJfY3B1W2ldID0gMDsKKwkJCWZfZGlmZiA9IGZfd2VpZ2h0IC0gcC0+bnVtYV9mYXVsdHNbY3B1X2lkeF0gLyAyOworCQkJcC0+bnVtYV9mYXVsdHNbY3B1YnVmX2lkeF0gPSAwOwogCi0JCQlwLT5udW1hX2ZhdWx0c19tZW1vcnlbaV0gKz0gZGlmZjsKLQkJCXAtPm51bWFfZmF1bHRzX2NwdVtpXSArPSBmX2RpZmY7Ci0JCQlmYXVsdHMgKz0gcC0+bnVtYV9mYXVsdHNfbWVtb3J5W2ldOworCQkJcC0+bnVtYV9mYXVsdHNbbWVtX2lkeF0gKz0gZGlmZjsKKwkJCXAtPm51bWFfZmF1bHRzW2NwdV9pZHhdICs9IGZfZGlmZjsKKwkJCWZhdWx0cyArPSBwLT5udW1hX2ZhdWx0c1ttZW1faWR4XTsKIAkJCXAtPnRvdGFsX251bWFfZmF1bHRzICs9IGRpZmY7CiAJCQlpZiAocC0+bnVtYV9ncm91cCkgewotCQkJCS8qIHNhZmUgYmVjYXVzZSB3ZSBjYW4gb25seSBjaGFuZ2Ugb3VyIG93biBncm91cCAqLwotCQkJCXAtPm51bWFfZ3JvdXAtPmZhdWx0c1tpXSArPSBkaWZmOwotCQkJCXAtPm51bWFfZ3JvdXAtPmZhdWx0c19jcHVbaV0gKz0gZl9kaWZmOworCQkJCS8qCisJCQkJICogc2FmZSBiZWNhdXNlIHdlIGNhbiBvbmx5IGNoYW5nZSBvdXIgb3duIGdyb3VwCisJCQkJICoKKwkJCQkgKiBtZW1faWR4IHJlcHJlc2VudHMgdGhlIG9mZnNldCBmb3IgYSBnaXZlbgorCQkJCSAqIG5pZCBhbmQgcHJpdiBpbiBhIHNwZWNpZmljIHJlZ2lvbiBiZWNhdXNlIGl0CisJCQkJICogaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbnVtYV9mYXVsdHMgYXJyYXkuCisJCQkJICovCisJCQkJcC0+bnVtYV9ncm91cC0+ZmF1bHRzW21lbV9pZHhdICs9IGRpZmY7CisJCQkJcC0+bnVtYV9ncm91cC0+ZmF1bHRzX2NwdVttZW1faWR4XSArPSBmX2RpZmY7CiAJCQkJcC0+bnVtYV9ncm91cC0+dG90YWxfZmF1bHRzICs9IGRpZmY7Ci0JCQkJZ3JvdXBfZmF1bHRzICs9IHAtPm51bWFfZ3JvdXAtPmZhdWx0c1tpXTsKKwkJCQlncm91cF9mYXVsdHMgKz0gcC0+bnVtYV9ncm91cC0+ZmF1bHRzW21lbV9pZHhdOwogCQkJfQogCQl9CiAKQEAgLTE2NTAsNyArMTg2Miw3IEBACiAJaWYgKHAtPm51bWFfZ3JvdXApIHsKIAkJdXBkYXRlX251bWFfYWN0aXZlX25vZGVfbWFzayhwLT5udW1hX2dyb3VwKTsKIAkJc3Bpbl91bmxvY2tfaXJxKGdyb3VwX2xvY2spOwotCQltYXhfbmlkID0gbWF4X2dyb3VwX25pZDsKKwkJbWF4X25pZCA9IHByZWZlcnJlZF9ncm91cF9uaWQocCwgbWF4X2dyb3VwX25pZCk7CiAJfQogCiAJaWYgKG1heF9mYXVsdHMpIHsKQEAgLTE2OTMsNyArMTkwNSw2IEBACiAKIAkJYXRvbWljX3NldCgmZ3JwLT5yZWZjb3VudCwgMSk7CiAJCXNwaW5fbG9ja19pbml0KCZncnAtPmxvY2spOwotCQlJTklUX0xJU1RfSEVBRCgmZ3JwLT50YXNrX2xpc3QpOwogCQlncnAtPmdpZCA9IHAtPnBpZDsKIAkJLyogU2Vjb25kIGhhbGYgb2YgdGhlIGFycmF5IHRyYWNrcyBuaWRzIHdoZXJlIGZhdWx0cyBoYXBwZW4gKi8KIAkJZ3JwLT5mYXVsdHNfY3B1ID0gZ3JwLT5mYXVsdHMgKyBOUl9OVU1BX0hJTlRfRkFVTFRfVFlQRVMgKgpAQCAtMTcwMiwxMSArMTkxMywxMCBAQAogCQlub2RlX3NldCh0YXNrX25vZGUoY3VycmVudCksIGdycC0+YWN0aXZlX25vZGVzKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTlJfTlVNQV9ISU5UX0ZBVUxUX1NUQVRTICogbnJfbm9kZV9pZHM7IGkrKykKLQkJCWdycC0+ZmF1bHRzW2ldID0gcC0+bnVtYV9mYXVsdHNfbWVtb3J5W2ldOworCQkJZ3JwLT5mYXVsdHNbaV0gPSBwLT5udW1hX2ZhdWx0c1tpXTsKIAogCQlncnAtPnRvdGFsX2ZhdWx0cyA9IHAtPnRvdGFsX251bWFfZmF1bHRzOwogCi0JCWxpc3RfYWRkKCZwLT5udW1hX2VudHJ5LCAmZ3JwLT50YXNrX2xpc3QpOwogCQlncnAtPm5yX3Rhc2tzKys7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihwLT5udW1hX2dyb3VwLCBncnApOwogCX0KQEAgLTE3NjEsMTMgKzE5NzEsMTIgQEAKIAlkb3VibGVfbG9ja19pcnEoJm15X2dycC0+bG9jaywgJmdycC0+bG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfTlVNQV9ISU5UX0ZBVUxUX1NUQVRTICogbnJfbm9kZV9pZHM7IGkrKykgewotCQlteV9ncnAtPmZhdWx0c1tpXSAtPSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbaV07Ci0JCWdycC0+ZmF1bHRzW2ldICs9IHAtPm51bWFfZmF1bHRzX21lbW9yeVtpXTsKKwkJbXlfZ3JwLT5mYXVsdHNbaV0gLT0gcC0+bnVtYV9mYXVsdHNbaV07CisJCWdycC0+ZmF1bHRzW2ldICs9IHAtPm51bWFfZmF1bHRzW2ldOwogCX0KIAlteV9ncnAtPnRvdGFsX2ZhdWx0cyAtPSBwLT50b3RhbF9udW1hX2ZhdWx0czsKIAlncnAtPnRvdGFsX2ZhdWx0cyArPSBwLT50b3RhbF9udW1hX2ZhdWx0czsKIAotCWxpc3RfbW92ZSgmcC0+bnVtYV9lbnRyeSwgJmdycC0+dGFza19saXN0KTsKIAlteV9ncnAtPm5yX3Rhc2tzLS07CiAJZ3JwLT5ucl90YXNrcysrOwogCkBAIC0xNzg3LDI3ICsxOTk2LDIzIEBACiB2b2lkIHRhc2tfbnVtYV9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3QgbnVtYV9ncm91cCAqZ3JwID0gcC0+bnVtYV9ncm91cDsKLQl2b2lkICpudW1hX2ZhdWx0cyA9IHAtPm51bWFfZmF1bHRzX21lbW9yeTsKKwl2b2lkICpudW1hX2ZhdWx0cyA9IHAtPm51bWFfZmF1bHRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKIAlpZiAoZ3JwKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZncnAtPmxvY2ssIGZsYWdzKTsKIAkJZm9yIChpID0gMDsgaSA8IE5SX05VTUFfSElOVF9GQVVMVF9TVEFUUyAqIG5yX25vZGVfaWRzOyBpKyspCi0JCQlncnAtPmZhdWx0c1tpXSAtPSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbaV07CisJCQlncnAtPmZhdWx0c1tpXSAtPSBwLT5udW1hX2ZhdWx0c1tpXTsKIAkJZ3JwLT50b3RhbF9mYXVsdHMgLT0gcC0+dG90YWxfbnVtYV9mYXVsdHM7CiAKLQkJbGlzdF9kZWwoJnAtPm51bWFfZW50cnkpOwogCQlncnAtPm5yX3Rhc2tzLS07CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdycC0+bG9jaywgZmxhZ3MpOwogCQlSQ1VfSU5JVF9QT0lOVEVSKHAtPm51bWFfZ3JvdXAsIE5VTEwpOwogCQlwdXRfbnVtYV9ncm91cChncnApOwogCX0KIAotCXAtPm51bWFfZmF1bHRzX21lbW9yeSA9IE5VTEw7Ci0JcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeSA9IE5VTEw7Ci0JcC0+bnVtYV9mYXVsdHNfY3B1PSBOVUxMOwotCXAtPm51bWFfZmF1bHRzX2J1ZmZlcl9jcHUgPSBOVUxMOworCXAtPm51bWFfZmF1bHRzID0gTlVMTDsKIAlrZnJlZShudW1hX2ZhdWx0cyk7CiB9CiAKQEAgLTE4MzAsMjQgKzIwMzUsMTQgQEAKIAkJcmV0dXJuOwogCiAJLyogQWxsb2NhdGUgYnVmZmVyIHRvIHRyYWNrIGZhdWx0cyBvbiBhIHBlci1ub2RlIGJhc2lzICovCi0JaWYgKHVubGlrZWx5KCFwLT5udW1hX2ZhdWx0c19tZW1vcnkpKSB7Ci0JCWludCBzaXplID0gc2l6ZW9mKCpwLT5udW1hX2ZhdWx0c19tZW1vcnkpICoKKwlpZiAodW5saWtlbHkoIXAtPm51bWFfZmF1bHRzKSkgeworCQlpbnQgc2l6ZSA9IHNpemVvZigqcC0+bnVtYV9mYXVsdHMpICoKIAkJCSAgIE5SX05VTUFfSElOVF9GQVVMVF9CVUNLRVRTICogbnJfbm9kZV9pZHM7CiAKLQkJcC0+bnVtYV9mYXVsdHNfbWVtb3J5ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMfF9fR0ZQX05PV0FSTik7Ci0JCWlmICghcC0+bnVtYV9mYXVsdHNfbWVtb3J5KQorCQlwLT5udW1hX2ZhdWx0cyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk4pOworCQlpZiAoIXAtPm51bWFfZmF1bHRzKQogCQkJcmV0dXJuOwogCi0JCUJVR19PTihwLT5udW1hX2ZhdWx0c19idWZmZXJfbWVtb3J5KTsKLQkJLyoKLQkJICogVGhlIGF2ZXJhZ2VkIHN0YXRpc3RpY3MsIHNoYXJlZCAmIHByaXZhdGUsIG1lbW9yeSAmIGNwdSwKLQkJICogb2NjdXB5IHRoZSBmaXJzdCBoYWxmIG9mIHRoZSBhcnJheS4gVGhlIHNlY29uZCBoYWxmIG9mIHRoZQotCQkgKiBhcnJheSBpcyBmb3IgY3VycmVudCBjb3VudGVycywgd2hpY2ggYXJlIGF2ZXJhZ2VkIGludG8gdGhlCi0JCSAqIGZpcnN0IHNldCBieSB0YXNrX251bWFfcGxhY2VtZW50LgotCQkgKi8KLQkJcC0+bnVtYV9mYXVsdHNfY3B1ID0gcC0+bnVtYV9mYXVsdHNfbWVtb3J5ICsgKDIgKiBucl9ub2RlX2lkcyk7Ci0JCXAtPm51bWFfZmF1bHRzX2J1ZmZlcl9tZW1vcnkgPSBwLT5udW1hX2ZhdWx0c19tZW1vcnkgKyAoNCAqIG5yX25vZGVfaWRzKTsKLQkJcC0+bnVtYV9mYXVsdHNfYnVmZmVyX2NwdSA9IHAtPm51bWFfZmF1bHRzX21lbW9yeSArICg2ICogbnJfbm9kZV9pZHMpOwogCQlwLT50b3RhbF9udW1hX2ZhdWx0cyA9IDA7CiAJCW1lbXNldChwLT5udW1hX2ZhdWx0c19sb2NhbGl0eSwgMCwgc2l6ZW9mKHAtPm51bWFfZmF1bHRzX2xvY2FsaXR5KSk7CiAJfQpAQCAtMTg4Nyw4ICsyMDgyLDggQEAKIAlpZiAobWlncmF0ZWQpCiAJCXAtPm51bWFfcGFnZXNfbWlncmF0ZWQgKz0gcGFnZXM7CiAKLQlwLT5udW1hX2ZhdWx0c19idWZmZXJfbWVtb3J5W3Rhc2tfZmF1bHRzX2lkeChtZW1fbm9kZSwgcHJpdildICs9IHBhZ2VzOwotCXAtPm51bWFfZmF1bHRzX2J1ZmZlcl9jcHVbdGFza19mYXVsdHNfaWR4KGNwdV9ub2RlLCBwcml2KV0gKz0gcGFnZXM7CisJcC0+bnVtYV9mYXVsdHNbdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNQlVGLCBtZW1fbm9kZSwgcHJpdildICs9IHBhZ2VzOworCXAtPm51bWFfZmF1bHRzW3Rhc2tfZmF1bHRzX2lkeChOVU1BX0NQVUJVRiwgY3B1X25vZGUsIHByaXYpXSArPSBwYWdlczsKIAlwLT5udW1hX2ZhdWx0c19sb2NhbGl0eVtsb2NhbF0gKz0gcGFnZXM7CiB9CiAKQEAgLTQ0NTcsNyArNDY1Miw3IEBACiAJCQkJbGF0ZXN0X2lkbGVfdGltZXN0YW1wID0gcnEtPmlkbGVfc3RhbXA7CiAJCQkJc2hhbGxvd2VzdF9pZGxlX2NwdSA9IGk7CiAJCQl9Ci0JCX0gZWxzZSB7CisJCX0gZWxzZSBpZiAoc2hhbGxvd2VzdF9pZGxlX2NwdSA9PSAtMSkgewogCQkJbG9hZCA9IHdlaWdodGVkX2NwdWxvYWQoaSk7CiAJCQlpZiAobG9hZCA8IG1pbl9sb2FkIHx8IChsb2FkID09IG1pbl9sb2FkICYmIGkgPT0gdGhpc19jcHUpKSB7CiAJCQkJbWluX2xvYWQgPSBsb2FkOwpAQCAtNDUzNSw5ICs0NzMwLDYgQEAKIAlpbnQgd2FudF9hZmZpbmUgPSAwOwogCWludCBzeW5jID0gd2FrZV9mbGFncyAmIFdGX1NZTkM7CiAKLQlpZiAocC0+bnJfY3B1c19hbGxvd2VkID09IDEpCi0JCXJldHVybiBwcmV2X2NwdTsKLQogCWlmIChzZF9mbGFnICYgU0RfQkFMQU5DRV9XQUtFKQogCQl3YW50X2FmZmluZSA9IGNwdW1hc2tfdGVzdF9jcHUoY3B1LCB0c2tfY3B1c19hbGxvd2VkKHApKTsKIApAQCAtNTE3Nyw3ICs1MzY5LDcgQEAKIAlzdHJ1Y3QgbnVtYV9ncm91cCAqbnVtYV9ncm91cCA9IHJjdV9kZXJlZmVyZW5jZShwLT5udW1hX2dyb3VwKTsKIAlpbnQgc3JjX25pZCwgZHN0X25pZDsKIAotCWlmICghc2NoZWRfZmVhdChOVU1BX0ZBVk9VUl9ISUdIRVIpIHx8ICFwLT5udW1hX2ZhdWx0c19tZW1vcnkgfHwKKwlpZiAoIXNjaGVkX2ZlYXQoTlVNQV9GQVZPVVJfSElHSEVSKSB8fCAhcC0+bnVtYV9mYXVsdHMgfHwKIAkgICAgIShlbnYtPnNkLT5mbGFncyAmIFNEX05VTUEpKSB7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC01MjE2LDcgKzU0MDgsNyBAQAogCWlmICghc2NoZWRfZmVhdChOVU1BKSB8fCAhc2NoZWRfZmVhdChOVU1BX1JFU0lTVF9MT1dFUikpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmICghcC0+bnVtYV9mYXVsdHNfbWVtb3J5IHx8ICEoZW52LT5zZC0+ZmxhZ3MgJiBTRF9OVU1BKSkKKwlpZiAoIXAtPm51bWFfZmF1bHRzIHx8ICEoZW52LT5zZC0+ZmxhZ3MgJiBTRF9OVU1BKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJc3JjX25pZCA9IGNwdV90b19ub2RlKGVudi0+c3JjX2NwdSk7CkBAIC02MTYwLDggKzYzNTIsMTAgQEAKIAkJICogd2l0aCBhIGxhcmdlIHdlaWdodCB0YXNrIG91dHdlaWdocyB0aGUgdGFza3Mgb24gdGhlIHN5c3RlbSkuCiAJCSAqLwogCQlpZiAocHJlZmVyX3NpYmxpbmcgJiYgc2RzLT5sb2NhbCAmJgotCQkgICAgc2RzLT5sb2NhbF9zdGF0Lmdyb3VwX2hhc19mcmVlX2NhcGFjaXR5KQorCQkgICAgc2RzLT5sb2NhbF9zdGF0Lmdyb3VwX2hhc19mcmVlX2NhcGFjaXR5KSB7CiAJCQlzZ3MtPmdyb3VwX2NhcGFjaXR5X2ZhY3RvciA9IG1pbihzZ3MtPmdyb3VwX2NhcGFjaXR5X2ZhY3RvciwgMVUpOworCQkJc2dzLT5ncm91cF90eXBlID0gZ3JvdXBfY2xhc3NpZnkoc2csIHNncyk7CisJCX0KIAogCQlpZiAodXBkYXRlX3NkX3BpY2tfYnVzaWVzdChlbnYsIHNkcywgc2csIHNncykpIHsKIAkJCXNkcy0+YnVzaWVzdCA9IHNnOwpAQCAtNzk0OSw2ICs4MTQzLDggQEAKIAogCS5nZXRfcnJfaW50ZXJ2YWwJPSBnZXRfcnJfaW50ZXJ2YWxfZmFpciwKIAorCS51cGRhdGVfY3VycgkJPSB1cGRhdGVfY3Vycl9mYWlyLAorCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAkudGFza19tb3ZlX2dyb3VwCT0gdGFza19tb3ZlX2dyb3VwX2ZhaXIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9pZGxlX3Rhc2suYyBiL2tlcm5lbC9zY2hlZC9pZGxlX3Rhc2suYwppbmRleCA2N2FkNGU3Li5jNjVkYWM4IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvaWRsZV90YXNrLmMKKysrIGIva2VybmVsL3NjaGVkL2lkbGVfdGFzay5jCkBAIC03NSw2ICs3NSwxMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9pZGxlKHN0cnVjdCBycSAqcnEpCit7Cit9CisKIC8qCiAgKiBTaW1wbGUsIHNwZWNpYWwgc2NoZWR1bGluZyBjbGFzcyBmb3IgdGhlIHBlci1DUFUgaWRsZSB0YXNrczoKICAqLwpAQCAtMTAxLDQgKzEwNSw1IEBACiAKIAkucHJpb19jaGFuZ2VkCQk9IHByaW9fY2hhbmdlZF9pZGxlLAogCS5zd2l0Y2hlZF90bwkJPSBzd2l0Y2hlZF90b19pZGxlLAorCS51cGRhdGVfY3VycgkJPSB1cGRhdGVfY3Vycl9pZGxlLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9ydC5jIGIva2VybmVsL3NjaGVkL3J0LmMKaW5kZXggZDAyNGU2Yy4uZWUxNWY1YSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3J0LmMKKysrIGIva2VybmVsL3NjaGVkL3J0LmMKQEAgLTEzMDEsOSArMTMwMSw2IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyOwogCXN0cnVjdCBycSAqcnE7CiAKLQlpZiAocC0+bnJfY3B1c19hbGxvd2VkID09IDEpCi0JCWdvdG8gb3V0OwotCiAJLyogRm9yIGFueXRoaW5nIGJ1dCB3YWtlIHVwcywganVzdCByZXR1cm4gdGhlIHRhc2tfY3B1ICovCiAJaWYgKHNkX2ZsYWcgIT0gU0RfQkFMQU5DRV9XQUtFICYmIHNkX2ZsYWcgIT0gU0RfQkFMQU5DRV9GT1JLKQogCQlnb3RvIG91dDsKQEAgLTEzNTEsMTYgKzEzNDgsMjIgQEAKIAogc3RhdGljIHZvaWQgY2hlY2tfcHJlZW1wdF9lcXVhbF9wcmlvKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlpZiAocnEtPmN1cnItPm5yX2NwdXNfYWxsb3dlZCA9PSAxKQorCS8qCisJICogQ3VycmVudCBjYW4ndCBiZSBtaWdyYXRlZCwgdXNlbGVzcyB0byByZXNjaGVkdWxlLAorCSAqIGxldCdzIGhvcGUgcCBjYW4gbW92ZSBvdXQuCisJICovCisJaWYgKHJxLT5jdXJyLT5ucl9jcHVzX2FsbG93ZWQgPT0gMSB8fAorCSAgICAhY3B1cHJpX2ZpbmQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3VyciwgTlVMTCkpCiAJCXJldHVybjsKIAorCS8qCisJICogcCBpcyBtaWdyYXRhYmxlLCBzbyBsZXQncyBub3Qgc2NoZWR1bGUgaXQgYW5kCisJICogc2VlIGlmIGl0IGlzIHB1c2hlZCBvciBwdWxsZWQgc29tZXdoZXJlIGVsc2UuCisJICovCiAJaWYgKHAtPm5yX2NwdXNfYWxsb3dlZCAhPSAxCiAJICAgICYmIGNwdXByaV9maW5kKCZycS0+cmQtPmNwdXByaSwgcCwgTlVMTCkpCiAJCXJldHVybjsKIAotCWlmICghY3B1cHJpX2ZpbmQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3VyciwgTlVMTCkpCi0JCXJldHVybjsKLQogCS8qCiAJICogVGhlcmUgYXBwZWFycyB0byBiZSBvdGhlciBjcHVzIHRoYXQgY2FuIGFjY2VwdAogCSAqIGN1cnJlbnQgYW5kIG5vbmUgdG8gcnVuICdwJywgc28gbGV0cyByZXNjaGVkdWxlCkBAIC0yMTI4LDYgKzIxMzEsOCBAQAogCiAJLnByaW9fY2hhbmdlZAkJPSBwcmlvX2NoYW5nZWRfcnQsCiAJLnN3aXRjaGVkX3RvCQk9IHN3aXRjaGVkX3RvX3J0LAorCisJLnVwZGF0ZV9jdXJyCQk9IHVwZGF0ZV9jdXJyX3J0LAogfTsKIAogI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaAppbmRleCAyNDE1NmM4NC4uOWEyYTQ1YyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmgKKysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmgKQEAgLTE3Niw2ICsxNzYsMjUgQEAKIAl1NjQgYncsIHRvdGFsX2J3OwogfTsKIAorc3RhdGljIGlubGluZQordm9pZCBfX2RsX2NsZWFyKHN0cnVjdCBkbF9idyAqZGxfYiwgdTY0IHRza19idykKK3sKKwlkbF9iLT50b3RhbF9idyAtPSB0c2tfYnc7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgX19kbF9hZGQoc3RydWN0IGRsX2J3ICpkbF9iLCB1NjQgdHNrX2J3KQoreworCWRsX2ItPnRvdGFsX2J3ICs9IHRza19idzsKK30KKworc3RhdGljIGlubGluZQorYm9vbCBfX2RsX292ZXJmbG93KHN0cnVjdCBkbF9idyAqZGxfYiwgaW50IGNwdXMsIHU2NCBvbGRfYncsIHU2NCBuZXdfYncpCit7CisJcmV0dXJuIGRsX2ItPmJ3ICE9IC0xICYmCisJICAgICAgIGRsX2ItPmJ3ICogY3B1cyA8IGRsX2ItPnRvdGFsX2J3IC0gb2xkX2J3ICsgbmV3X2J3OworfQorCiBleHRlcm4gc3RydWN0IG11dGV4IHNjaGVkX2RvbWFpbnNfbXV0ZXg7CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECkBAIC02NzgsNyArNjk3LDI1IEBACiAJcmV0dXJuIHJxLT5jbG9ja190YXNrOwogfQogCisjaWZkZWYgQ09ORklHX05VTUEKK2VudW0gbnVtYV90b3BvbG9neV90eXBlIHsKKwlOVU1BX0RJUkVDVCwKKwlOVU1BX0dMVUVMRVNTX01FU0gsCisJTlVNQV9CQUNLUExBTkUsCit9OworZXh0ZXJuIGVudW0gbnVtYV90b3BvbG9neV90eXBlIHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZTsKK2V4dGVybiBpbnQgc2NoZWRfbWF4X251bWFfZGlzdGFuY2U7CitleHRlcm4gYm9vbCBmaW5kX251bWFfZGlzdGFuY2UoaW50IGRpc3RhbmNlKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCisvKiBUaGUgcmVnaW9ucyBpbiBudW1hX2ZhdWx0cyBhcnJheSBmcm9tIHRhc2tfc3RydWN0ICovCitlbnVtIG51bWFfZmF1bHRzX3N0YXRzIHsKKwlOVU1BX01FTSA9IDAsCisJTlVNQV9DUFUsCisJTlVNQV9NRU1CVUYsCisJTlVNQV9DUFVCVUYKK307CiBleHRlcm4gdm9pZCBzY2hlZF9zZXRudW1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5vZGUpOwogZXh0ZXJuIGludCBtaWdyYXRlX3Rhc2tfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KTsKIGV4dGVybiBpbnQgbWlncmF0ZV9zd2FwKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CkBAIC0xMTI3LDYgKzExNjQsMTEgQEAKIAl2b2lkICgqdGFza19mb3JrKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIAl2b2lkICgqdGFza19kZWFkKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIAorCS8qCisJICogVGhlIHN3aXRjaGVkX2Zyb20oKSBjYWxsIGlzIGFsbG93ZWQgdG8gZHJvcCBycS0+bG9jaywgdGhlcmVmb3JlIHdlCisJICogY2Fubm90IGFzc3VtZSB0aGUgc3dpdGNoZWRfZnJvbS9zd2l0Y2hlZF90byBwYWlyIGlzIHNlcmxpYXplZCBieQorCSAqIHJxLT5sb2NrLiBUaGV5IGFyZSBob3dldmVyIHNlcmlhbGl6ZWQgYnkgcC0+cGlfbG9jay4KKwkgKi8KIAl2b2lkICgqc3dpdGNoZWRfZnJvbSkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAl2b2lkICgqc3dpdGNoZWRfdG8pIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAJdm9pZCAoKnByaW9fY2hhbmdlZCkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLApAQCAtMTEzNSw2ICsxMTc3LDggQEAKIAl1bnNpZ25lZCBpbnQgKCpnZXRfcnJfaW50ZXJ2YWwpIChzdHJ1Y3QgcnEgKnJxLAogCQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAorCXZvaWQgKCp1cGRhdGVfY3VycikgKHN0cnVjdCBycSAqcnEpOworCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAl2b2lkICgqdGFza19tb3ZlX2dyb3VwKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgb25fcnEpOwogI2VuZGlmCkBAIC0xNTAyLDYgKzE1NDYsNyBAQAogZXh0ZXJuIHN0cnVjdCBzY2hlZF9lbnRpdHkgKl9fcGlja19sYXN0X2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpOwogZXh0ZXJuIHZvaWQgcHJpbnRfY2ZzX3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSk7CiBleHRlcm4gdm9pZCBwcmludF9ydF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcHJpbnRfZGxfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KTsKIAogZXh0ZXJuIHZvaWQgaW5pdF9jZnNfcnEoc3RydWN0IGNmc19ycSAqY2ZzX3JxKTsKIGV4dGVybiB2b2lkIGluaXRfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSwgc3RydWN0IHJxICpycSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc3RvcF90YXNrLmMgYi9rZXJuZWwvc2NoZWQvc3RvcF90YXNrLmMKaW5kZXggNjc0MjZlNS4uNzlmZmVjNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3N0b3BfdGFzay5jCisrKyBiL2tlcm5lbC9zY2hlZC9zdG9wX3Rhc2suYwpAQCAtMTAyLDYgKzEwMiwxMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9zdG9wKHN0cnVjdCBycSAqcnEpCit7Cit9CisKIC8qCiAgKiBTaW1wbGUsIHNwZWNpYWwgc2NoZWR1bGluZyBjbGFzcyBmb3IgdGhlIHBlci1DUFUgc3RvcCB0YXNrczoKICAqLwpAQCAtMTI4LDQgKzEzMiw1IEBACiAKIAkucHJpb19jaGFuZ2VkCQk9IHByaW9fY2hhbmdlZF9zdG9wLAogCS5zd2l0Y2hlZF90bwkJPSBzd2l0Y2hlZF90b19zdG9wLAorCS51cGRhdGVfY3VycgkJPSB1cGRhdGVfY3Vycl9zdG9wLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC93YWl0LmMgYi9rZXJuZWwvc2NoZWQvd2FpdC5jCmluZGV4IDVhNjI5MTUuLjg1MjE0M2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC93YWl0LmMKKysrIGIva2VybmVsL3NjaGVkL3dhaXQuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiB2b2lkIF9faW5pdF93YWl0cXVldWVfaGVhZCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiB7CkBAIC0yOTcsNiArMjk4LDcxIEBACiB9CiBFWFBPUlRfU1lNQk9MKGF1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbik7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rdGhyZWFkX3Nob3VsZF9zdG9wKHZvaWQpCit7CisJcmV0dXJuIChjdXJyZW50LT5mbGFncyAmIFBGX0tUSFJFQUQpICYmIGt0aHJlYWRfc2hvdWxkX3N0b3AoKTsKK30KKworLyoKKyAqIERFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jKTsKKyAqCisgKiBhZGRfd2FpdF9xdWV1ZSgmd3EsICZ3YWl0KTsKKyAqIGZvciAoOzspIHsKKyAqICAgICBpZiAoY29uZGl0aW9uKQorICogICAgICAgICBicmVhazsKKyAqCisgKiAgICAgcC0+c3RhdGUgPSBtb2RlOwkJCQljb25kaXRpb24gPSB0cnVlOworICogICAgIHNtcF9tYigpOyAvLyBBCQkJCXNtcF93bWIoKTsgLy8gQworICogICAgIGlmICghd2FpdC0+ZmxhZ3MgJiBXUV9GTEFHX1dPS0VOKQl3YWl0LT5mbGFncyB8PSBXUV9GTEFHX1dPS0VOOworICogICAgICAgICBzY2hlZHVsZSgpCQkJCXRyeV90b193YWtlX3VwKCk7CisgKiAgICAgcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQkgICAgfn5+fn5+fn5+fn5+fn5+fn5+CisgKiAgICAgd2FpdC0+ZmxhZ3MgJj0gfldRX0ZMQUdfV09LRU47CQljb25kaXRpb24gPSB0cnVlOworICogICAgIHNtcF9tYigpIC8vIEIJCQkJc21wX3dtYigpOyAvLyBDCisgKgkJCQkJCXdhaXQtPmZsYWdzIHw9IFdRX0ZMQUdfV09LRU47CisgKiB9CisgKiByZW1vdmVfd2FpdF9xdWV1ZSgmd3EsICZ3YWl0KTsKKyAqCisgKi8KK2xvbmcgd2FpdF93b2tlbih3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGxvbmcgdGltZW91dCkKK3sKKwlzZXRfY3VycmVudF9zdGF0ZShtb2RlKTsgLyogQSAqLworCS8qCisJICogVGhlIGFib3ZlIGltcGxpZXMgYW4gc21wX21iKCksIHdoaWNoIG1hdGNoZXMgd2l0aCB0aGUgc21wX3dtYigpIGZyb20KKwkgKiB3b2tlbl93YWtlX2Z1bmN0aW9uKCkgc3VjaCB0aGF0IGlmIHdlIG9ic2VydmUgV1FfRkxBR19XT0tFTiB3ZSBtdXN0CisJICogYWxzbyBvYnNlcnZlIGFsbCBzdGF0ZSBiZWZvcmUgdGhlIHdha2V1cC4KKwkgKi8KKwlpZiAoISh3YWl0LT5mbGFncyAmIFdRX0ZMQUdfV09LRU4pICYmICFpc19rdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCS8qCisJICogVGhlIGJlbG93IGltcGxpZXMgYW4gc21wX21iKCksIGl0IHRvbyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgZnJvbQorCSAqIHdva2VuX3dha2VfZnVuY3Rpb24oKSBzdWNoIHRoYXQgd2UgbXVzdCBlaXRoZXIgb2JzZXJ2ZSB0aGUgd2FpdAorCSAqIGNvbmRpdGlvbiBiZWluZyB0cnVlIF9PUl8gV1FfRkxBR19XT0tFTiBzdWNoIHRoYXQgd2Ugd2lsbCBub3QgbWlzcworCSAqIGFuIGV2ZW50LgorCSAqLworCXNldF9tYih3YWl0LT5mbGFncywgd2FpdC0+ZmxhZ3MgJiB+V1FfRkxBR19XT0tFTik7IC8qIEIgKi8KKworCXJldHVybiB0aW1lb3V0OworfQorRVhQT1JUX1NZTUJPTCh3YWl0X3dva2VuKTsKKworaW50IHdva2VuX3dha2VfZnVuY3Rpb24od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KQoreworCS8qCisJICogQWx0aG91Z2ggdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdW5kZXIgd2FpdHF1ZXVlIGxvY2ssIExPQ0sKKwkgKiBkb2Vzbid0IGltcGx5IHdyaXRlIGJhcnJpZXIgYW5kIHRoZSB1c2VycyBleHBlY3RzIHdyaXRlCisJICogYmFycmllciBzZW1hbnRpY3Mgb24gd2FrZXVwIGZ1bmN0aW9ucy4gIFRoZSBmb2xsb3dpbmcKKwkgKiBzbXBfd21iKCkgaXMgZXF1aXZhbGVudCB0byBzbXBfd21iKCkgaW4gdHJ5X3RvX3dha2VfdXAoKQorCSAqIGFuZCBpcyBwYWlyZWQgd2l0aCBzZXRfbWIoKSBpbiB3YWl0X3dva2VuKCkuCisJICovCisJc21wX3dtYigpOyAvKiBDICovCisJd2FpdC0+ZmxhZ3MgfD0gV1FfRkxBR19XT0tFTjsKKworCXJldHVybiBkZWZhdWx0X3dha2VfZnVuY3Rpb24od2FpdCwgbW9kZSwgc3luYywga2V5KTsKK30KK0VYUE9SVF9TWU1CT0wod29rZW5fd2FrZV9mdW5jdGlvbik7CisKIGludCB3YWtlX2JpdF9mdW5jdGlvbih3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHdhaXRfYml0X2tleSAqa2V5ID0gYXJnOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDhmMDg3NmYuLjE2YTMwNTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTEyNzUsNyArMTI3NSwxNyBAQAogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoKmZsYWdzKTsKIAkJCWJyZWFrOwogCQl9Ci0KKwkJLyoKKwkJICogVGhpcyBzaWdoYW5kIGNhbiBiZSBhbHJlYWR5IGZyZWVkIGFuZCBldmVuIHJldXNlZCwgYnV0CisJCSAqIHdlIHJlbHkgb24gU0xBQl9ERVNUUk9ZX0JZX1JDVSBhbmQgc2lnaGFuZF9jdG9yKCkgd2hpY2gKKwkJICogaW5pdGlhbGl6ZXMgLT5zaWdsb2NrOiB0aGlzIHNsYWIgY2FuJ3QgZ28gYXdheSwgaXQgaGFzCisJCSAqIHRoZSBzYW1lIG9iamVjdCB0eXBlLCAtPnNpZ2xvY2sgY2FuJ3QgYmUgcmVpbml0aWFsaXplZC4KKwkJICoKKwkJICogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0c2stPnNpZ2hhbmQgaXMgc3RpbGwgdGhlIHNhbWUKKwkJICogYWZ0ZXIgd2UgdGFrZSB0aGUgbG9jaywgd2UgY2FuIHJhY2Ugd2l0aCBkZV90aHJlYWQoKSBvcgorCQkgKiBfX2V4aXRfc2lnbmFsKCkuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgbmV4dCBpdGVyYXRpb24KKwkJICogbXVzdCBzZWUgLT5zaWdoYW5kID09IE5VTEwuCisJCSAqLwogCQlzcGluX2xvY2soJnNpZ2hhbmQtPnNpZ2xvY2spOwogCQlpZiAobGlrZWx5KHNpZ2hhbmQgPT0gdHNrLT5zaWdoYW5kKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xMzMxLDIzICsxMzQxLDIxIEBACiAJaW50IGVycm9yID0gLUVTUkNIOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAotCXJjdV9yZWFkX2xvY2soKTsKLXJldHJ5OgotCXAgPSBwaWRfdGFzayhwaWQsIFBJRFRZUEVfUElEKTsKLQlpZiAocCkgewotCQllcnJvciA9IGdyb3VwX3NlbmRfc2lnX2luZm8oc2lnLCBpbmZvLCBwKTsKLQkJaWYgKHVubGlrZWx5KGVycm9yID09IC1FU1JDSCkpCi0JCQkvKgotCQkJICogVGhlIHRhc2sgd2FzIHVuaGFzaGVkIGluIGJldHdlZW4sIHRyeSBhZ2Fpbi4KLQkJCSAqIElmIGl0IGlzIGRlYWQsIHBpZF90YXNrKCkgd2lsbCByZXR1cm4gTlVMTCwKLQkJCSAqIGlmIHdlIHJhY2Ugd2l0aCBkZV90aHJlYWQoKSBpdCB3aWxsIGZpbmQgdGhlCi0JCQkgKiBuZXcgbGVhZGVyLgotCQkJICovCi0JCQlnb3RvIHJldHJ5OwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwlmb3IgKDs7KSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJcCA9IHBpZF90YXNrKHBpZCwgUElEVFlQRV9QSUQpOworCQlpZiAocCkKKwkJCWVycm9yID0gZ3JvdXBfc2VuZF9zaWdfaW5mbyhzaWcsIGluZm8sIHApOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJaWYgKGxpa2VseSghcCB8fCBlcnJvciAhPSAtRVNSQ0gpKQorCQkJcmV0dXJuIGVycm9yOwogCi0JcmV0dXJuIGVycm9yOworCQkvKgorCQkgKiBUaGUgdGFzayB3YXMgdW5oYXNoZWQgaW4gYmV0d2VlbiwgdHJ5IGFnYWluLiAgSWYgaXQKKwkJICogaXMgZGVhZCwgcGlkX3Rhc2soKSB3aWxsIHJldHVybiBOVUxMLCBpZiB3ZSByYWNlIHdpdGgKKwkJICogZGVfdGhyZWFkKCkgaXQgd2lsbCBmaW5kIHRoZSBuZXcgbGVhZGVyLgorCQkgKi8KKwl9CiB9CiAKIGludCBraWxsX3Byb2NfaW5mbyhpbnQgc2lnLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgcGlkX3QgcGlkKQpAQCAtMjc0OCw2ICsyNzU2LDEwIEBACiAJCWlmIChmcm9tLT5zaV9jb2RlID09IEJVU19NQ0VFUlJfQVIgfHwgZnJvbS0+c2lfY29kZSA9PSBCVVNfTUNFRVJSX0FPKQogCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfYWRkcl9sc2IsICZ0by0+c2lfYWRkcl9sc2IpOwogI2VuZGlmCisjaWZkZWYgU0VHVl9CTkRFUlIKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfbG93ZXIsICZ0by0+c2lfbG93ZXIpOworCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV91cHBlciwgJnRvLT5zaV91cHBlcik7CisjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSBfX1NJX0NITEQ6CiAJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3BpZCwgJnRvLT5zaV9waWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NtcGJvb3QuYyBiL2tlcm5lbC9zbXBib290LmMKaW5kZXggZWI4OWUxOC4uZjAzMmZiNSAxMDA2NDQKLS0tIGEva2VybmVsL3NtcGJvb3QuYworKysgYi9rZXJuZWwvc21wYm9vdC5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJaWYgKGh0LT5jbGVhbnVwKQogCQkJCWh0LT5jbGVhbnVwKHRkLT5jcHUsIGNwdV9vbmxpbmUodGQtPmNwdSkpOwpAQCAtMTM2LDI2ICsxMzYsMjcgQEAKIAkJLyogQ2hlY2sgZm9yIHN0YXRlIGNoYW5nZSBzZXR1cCAqLwogCQlzd2l0Y2ggKHRkLT5zdGF0dXMpIHsKIAkJY2FzZSBIUF9USFJFQURfTk9ORToKKwkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJCXByZWVtcHRfZW5hYmxlKCk7CiAJCQlpZiAoaHQtPnNldHVwKQogCQkJCWh0LT5zZXR1cCh0ZC0+Y3B1KTsKIAkJCXRkLT5zdGF0dXMgPSBIUF9USFJFQURfQUNUSVZFOwotCQkJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JCQlicmVhazsKKwkJCWNvbnRpbnVlOworCiAJCWNhc2UgSFBfVEhSRUFEX1BBUktFRDoKKwkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJCXByZWVtcHRfZW5hYmxlKCk7CiAJCQlpZiAoaHQtPnVucGFyaykKIAkJCQlodC0+dW5wYXJrKHRkLT5jcHUpOwogCQkJdGQtPnN0YXR1cyA9IEhQX1RIUkVBRF9BQ1RJVkU7Ci0JCQlwcmVlbXB0X2Rpc2FibGUoKTsKLQkJCWJyZWFrOworCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAoIWh0LT50aHJlYWRfc2hvdWxkX3J1bih0ZC0+Y3B1KSkgewotCQkJcHJlZW1wdF9lbmFibGUoKTsKKwkJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJCXNjaGVkdWxlKCk7CiAJCX0gZWxzZSB7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQkJcHJlZW1wdF9lbmFibGUoKTsKIAkJCWh0LT50aHJlYWRfZm4odGQtPmNwdSk7CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDA2OTlhZGQuLjUwMWJhYTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNjU2LDcgKzY1Niw3IEBACiAJCSAqIGluIHRoZSB0YXNrIHN0YWNrIGhlcmUuCiAJCSAqLwogCQlfX2RvX3NvZnRpcnEoKTsKLQkJcmN1X25vdGVfY29udGV4dF9zd2l0Y2goY3B1KTsKKwkJcmN1X25vdGVfY29udGV4dF9zd2l0Y2goKTsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQljb25kX3Jlc2NoZWQoKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDFlYWEyZjAuLmE4YzlmNWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTkxLDYgKzkxLDEyIEBACiAjaWZuZGVmIFNFVF9UU0NfQ1RMCiAjIGRlZmluZSBTRVRfVFNDX0NUTChhKQkJKC1FSU5WQUwpCiAjZW5kaWYKKyNpZm5kZWYgTVBYX0VOQUJMRV9NQU5BR0VNRU5UCisjIGRlZmluZSBNUFhfRU5BQkxFX01BTkFHRU1FTlQoYSkJKC1FSU5WQUwpCisjZW5kaWYKKyNpZm5kZWYgTVBYX0RJU0FCTEVfTUFOQUdFTUVOVAorIyBkZWZpbmUgTVBYX0RJU0FCTEVfTUFOQUdFTUVOVChhKQkoLUVJTlZBTCkKKyNlbmRpZgogCiAvKgogICogdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtLXdpZGUgb3ZlcmZsb3cgVUlEIGFuZCBHSUQgYXJlIGRlZmluZWQsIGZvcgpAQCAtMjIwMyw2ICsyMjA5LDEyIEBACiAJCQltZS0+bW0tPmRlZl9mbGFncyAmPSB+Vk1fTk9IVUdFUEFHRTsKIAkJdXBfd3JpdGUoJm1lLT5tbS0+bW1hcF9zZW0pOwogCQlicmVhazsKKwljYXNlIFBSX01QWF9FTkFCTEVfTUFOQUdFTUVOVDoKKwkJZXJyb3IgPSBNUFhfRU5BQkxFX01BTkFHRU1FTlQobWUpOworCQlicmVhazsKKwljYXNlIFBSX01QWF9ESVNBQkxFX01BTkFHRU1FTlQ6CisJCWVycm9yID0gTVBYX0RJU0FCTEVfTUFOQUdFTUVOVChtZSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVycm9yID0gLUVJTlZBTDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9NYWtlZmlsZSBiL2tlcm5lbC90aW1lL01ha2VmaWxlCmluZGV4IDczNDc0MjYuLmY2MjJjZjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL01ha2VmaWxlCisrKyBiL2tlcm5lbC90aW1lL01ha2VmaWxlCkBAIC0xMyw3ICsxMyw3IEBACiBvYmotJChDT05GSUdfVElDS19PTkVTSE9UKQkJCSs9IHRpY2stc2NoZWQubwogb2JqLSQoQ09ORklHX1RJTUVSX1NUQVRTKQkJCSs9IHRpbWVyX3N0YXRzLm8KIG9iai0kKENPTkZJR19ERUJVR19GUykJCQkJKz0gdGltZWtlZXBpbmdfZGVidWcubwotb2JqLSQoQ09ORklHX1RFU1RfVURFTEFZKQkJCSs9IHVkZWxheV90ZXN0Lm8KK29iai0kKENPTkZJR19URVNUX1VERUxBWSkJCQkrPSB0ZXN0X3VkZWxheS5vCiAKICQob2JqKS90aW1lLm86ICQob2JqKS90aW1lY29uc3QuaAogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9wb3NpeC1jcHUtdGltZXJzLmMgYi9rZXJuZWwvdGltZS9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggNDkyYjk4Ni4uYTE2YjY3OCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtNTUzLDcgKzU1Myw3IEBACiAJCSpzYW1wbGUgPSBjcHV0aW1lX3RvX2V4cGlyZXMoY3B1dGltZS51dGltZSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6Ci0JCSpzYW1wbGUgPSBjcHV0aW1lLnN1bV9leGVjX3J1bnRpbWUgKyB0YXNrX2RlbHRhX2V4ZWMocCk7CisJCSpzYW1wbGUgPSBjcHV0aW1lLnN1bV9leGVjX3J1bnRpbWU7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3VkZWxheV90ZXN0LmMgYi9rZXJuZWwvdGltZS90ZXN0X3VkZWxheS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBrZXJuZWwvdGltZS91ZGVsYXlfdGVzdC5jCnJlbmFtZSB0byBrZXJuZWwvdGltZS90ZXN0X3VkZWxheS5jCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggN2I1NzQxZi4uMWY0MzU2MCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtNTg1LDcgKzU4NSw3IEBACiAJCWxhc3RfamlmZmllcyA9IGppZmZpZXM7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmamlmZmllc19sb2NrLCBzZXEpKTsKIAotCWlmIChyY3VfbmVlZHNfY3B1KGNwdSwgJnJjdV9kZWx0YV9qaWZmaWVzKSB8fAorCWlmIChyY3VfbmVlZHNfY3B1KCZyY3VfZGVsdGFfamlmZmllcykgfHwKIAkgICAgYXJjaF9uZWVkc19jcHUoKSB8fCBpcnFfd29ya19uZWVkc19jcHUoKSkgewogCQluZXh0X2ppZmZpZXMgPSBsYXN0X2ppZmZpZXMgKyAxOwogCQlkZWx0YV9qaWZmaWVzID0gMTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWUuYyBiL2tlcm5lbC90aW1lL3RpbWUuYwppbmRleCBhOWFlMjBmLi42NTAxNWZmIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lLmMKKysrIGIva2VybmVsL3RpbWUvdGltZS5jCkBAIC0zMDQsNyArMzA0LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0wodGltZXNwZWNfdHJ1bmMpOwogCi0vKiBDb252ZXJ0cyBHcmVnb3JpYW4gZGF0ZSB0byBzZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDEgMDA6MDA6MDAuCisvKgorICogbWt0aW1lNjQgLSBDb252ZXJ0cyBkYXRlIHRvIHNlY29uZHMuCisgKiBDb252ZXJ0cyBHcmVnb3JpYW4gZGF0ZSB0byBzZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDEgMDA6MDA6MDAuCiAgKiBBc3N1bWVzIGlucHV0IGluIG5vcm1hbCBkYXRlIGZvcm1hdCwgaS5lLiAxOTgwLTEyLTMxIDIzOjU5OjU5CiAgKiA9PiB5ZWFyPTE5ODAsIG1vbj0xMiwgZGF5PTMxLCBob3VyPTIzLCBtaW49NTksIHNlYz01OS4KICAqCkBAIC0zMTQsMTUgKzMxNiwxMCBAQAogICogLXllYXIvMTAwK3llYXIvNDAwIHRlcm1zLCBhbmQgYWRkIDEwLl0KICAqCiAgKiBUaGlzIGFsZ29yaXRobSB3YXMgZmlyc3QgcHVibGlzaGVkIGJ5IEdhdXNzIChJIHRoaW5rKS4KLSAqCi0gKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIHdpbGwgb3ZlcmZsb3cgb24gMjEwNi0wMi0wNyAwNjoyODoxNiBvbgotICogbWFjaGluZXMgd2hlcmUgbG9uZyBpcyAzMi1iaXQhIChIb3dldmVyLCBhcyB0aW1lX3QgaXMgc2lnbmVkLCB3ZQotICogd2lsbCBhbHJlYWR5IGdldCBwcm9ibGVtcyBhdCBvdGhlciBwbGFjZXMgb24gMjAzOC0wMS0xOSAwMzoxNDowOCkKICAqLwotdW5zaWduZWQgbG9uZwotbWt0aW1lKGNvbnN0IHVuc2lnbmVkIGludCB5ZWFyMCwgY29uc3QgdW5zaWduZWQgaW50IG1vbjAsCi0gICAgICAgY29uc3QgdW5zaWduZWQgaW50IGRheSwgY29uc3QgdW5zaWduZWQgaW50IGhvdXIsCi0gICAgICAgY29uc3QgdW5zaWduZWQgaW50IG1pbiwgY29uc3QgdW5zaWduZWQgaW50IHNlYykKK3RpbWU2NF90IG1rdGltZTY0KGNvbnN0IHVuc2lnbmVkIGludCB5ZWFyMCwgY29uc3QgdW5zaWduZWQgaW50IG1vbjAsCisJCWNvbnN0IHVuc2lnbmVkIGludCBkYXksIGNvbnN0IHVuc2lnbmVkIGludCBob3VyLAorCQljb25zdCB1bnNpZ25lZCBpbnQgbWluLCBjb25zdCB1bnNpZ25lZCBpbnQgc2VjKQogewogCXVuc2lnbmVkIGludCBtb24gPSBtb24wLCB5ZWFyID0geWVhcjA7CiAKQEAgLTMzMiwxNSArMzI5LDE0IEBACiAJCXllYXIgLT0gMTsKIAl9CiAKLQlyZXR1cm4gKCgoKHVuc2lnbmVkIGxvbmcpCisJcmV0dXJuICgoKCh0aW1lNjRfdCkKIAkJICAoeWVhci80IC0geWVhci8xMDAgKyB5ZWFyLzQwMCArIDM2Nyptb24vMTIgKyBkYXkpICsKIAkJICB5ZWFyKjM2NSAtIDcxOTQ5OQogCSAgICApKjI0ICsgaG91ciAvKiBub3cgaGF2ZSBob3VycyAqLwogCSAgKSo2MCArIG1pbiAvKiBub3cgaGF2ZSBtaW51dGVzICovCiAJKSo2MCArIHNlYzsgLyogZmluYWxseSBzZWNvbmRzICovCiB9Ci0KLUVYUE9SVF9TWU1CT0wobWt0aW1lKTsKK0VYUE9SVF9TWU1CT0wobWt0aW1lNjQpOwogCiAvKioKICAqIHNldF9ub3JtYWxpemVkX3RpbWVzcGVjIC0gc2V0IHRpbWVzcGVjIHNlYyBhbmQgbnNlYyBwYXJ0cyBhbmQgbm9ybWFsaXplCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwppbmRleCBlYzE3OTFmLi42YTkzMTg1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKQEAgLTQxNyw3ICs0MTcsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdGtfdXBkYXRlX2t0aW1lX2RhdGEoc3RydWN0IHRpbWVrZWVwZXIgKnRrKQogewotCXM2NCBuc2VjOworCXU2NCBzZWNvbmRzOworCXUzMiBuc2VjOwogCiAJLyoKIAkgKiBUaGUgeHRpbWUgYmFzZWQgbW9ub3RvbmljIHJlYWRvdXQgaXM6CkBAIC00MjYsMTMgKzQyNywyMiBAQAogCSAqCW5zZWMgPSBiYXNlX21vbm8gKyBub3coKTsKIAkgKiA9PT4gYmFzZV9tb25vID0gKHh0aW1lX3NlYyArIHd0bV9zZWMpICogMWU5ICsgd3RtX25zZWMKIAkgKi8KLQluc2VjID0gKHM2NCkodGstPnh0aW1lX3NlYyArIHRrLT53YWxsX3RvX21vbm90b25pYy50dl9zZWMpOwotCW5zZWMgKj0gTlNFQ19QRVJfU0VDOwotCW5zZWMgKz0gdGstPndhbGxfdG9fbW9ub3RvbmljLnR2X25zZWM7Ci0JdGstPnRrci5iYXNlX21vbm8gPSBuc190b19rdGltZShuc2VjKTsKKwlzZWNvbmRzID0gKHU2NCkodGstPnh0aW1lX3NlYyArIHRrLT53YWxsX3RvX21vbm90b25pYy50dl9zZWMpOworCW5zZWMgPSAodTMyKSB0ay0+d2FsbF90b19tb25vdG9uaWMudHZfbnNlYzsKKwl0ay0+dGtyLmJhc2VfbW9ubyA9IG5zX3RvX2t0aW1lKHNlY29uZHMgKiBOU0VDX1BFUl9TRUMgKyBuc2VjKTsKIAogCS8qIFVwZGF0ZSB0aGUgbW9ub3RvbmljIHJhdyBiYXNlICovCiAJdGstPmJhc2VfcmF3ID0gdGltZXNwZWM2NF90b19rdGltZSh0ay0+cmF3X3RpbWUpOworCisJLyoKKwkgKiBUaGUgc3VtIG9mIHRoZSBuYW5vc2Vjb25kcyBwb3J0aW9ucyBvZiB4dGltZSBhbmQKKwkgKiB3YWxsX3RvX21vbm90b25pYyBjYW4gYmUgZ3JlYXRlci9lcXVhbCBvbmUgc2Vjb25kLiBUYWtlCisJICogdGhpcyBpbnRvIGFjY291bnQgYmVmb3JlIHVwZGF0aW5nIHRrLT5rdGltZV9zZWMuCisJICovCisJbnNlYyArPSAodTMyKSh0ay0+dGtyLnh0aW1lX25zZWMgPj4gdGstPnRrci5zaGlmdCk7CisJaWYgKG5zZWMgPj0gTlNFQ19QRVJfU0VDKQorCQlzZWNvbmRzKys7CisJdGstPmt0aW1lX3NlYyA9IHNlY29uZHM7CiB9CiAKIC8qIG11c3QgaG9sZCB0aW1la2VlcGVyX2xvY2sgKi8KQEAgLTUxOSw5ICs1MjksOSBAQAogCiAvKioKICAqIGdldG5zdGltZW9mZGF5NjQgLSBSZXR1cm5zIHRoZSB0aW1lIG9mIGRheSBpbiBhIHRpbWVzcGVjNjQuCi0gKiBAdHM6CQlwb2ludGVyIHRvIHRoZSB0aW1lc3BlYyB0byBiZSBzZXQKKyAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjNjQgdG8gYmUgc2V0CiAgKgotICogUmV0dXJucyB0aGUgdGltZSBvZiBkYXkgaW4gYSB0aW1lc3BlYyAoV0FSTiBpZiBzdXNwZW5kZWQpLgorICogUmV0dXJucyB0aGUgdGltZSBvZiBkYXkgaW4gYSB0aW1lc3BlYzY0IChXQVJOIGlmIHN1c3BlbmRlZCkuCiAgKi8KIHZvaWQgZ2V0bnN0aW1lb2ZkYXk2NChzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7CkBAIC02MjMsNyArNjMzLDcgQEAKICAqCiAgKiBUaGUgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbW9ub3RvbmljIGNsb2NrIGZyb20gdGhlIHJlYWx0aW1lCiAgKiBjbG9jayBhbmQgdGhlIHdhbGxfdG9fbW9ub3RvbmljIG9mZnNldCBhbmQgc3RvcmVzIHRoZSByZXN1bHQKLSAqIGluIG5vcm1hbGl6ZWQgdGltZXNwZWMgZm9ybWF0IGluIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5IEB0cy4KKyAqIGluIG5vcm1hbGl6ZWQgdGltZXNwZWM2NCBmb3JtYXQgaW4gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgQHRzLgogICovCiB2b2lkIGt0aW1lX2dldF90czY0KHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKQEAgLTY0OCw2ICs2NTgsNTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt0aW1lX2dldF90czY0KTsKIAorLyoqCisgKiBrdGltZV9nZXRfc2Vjb25kcyAtIEdldCB0aGUgc2Vjb25kcyBwb3J0aW9uIG9mIENMT0NLX01PTk9UT05JQworICoKKyAqIFJldHVybnMgdGhlIHNlY29uZHMgcG9ydGlvbiBvZiBDTE9DS19NT05PVE9OSUMgd2l0aCBhIHNpbmdsZSBub24KKyAqIHNlcmlhbGl6ZWQgcmVhZC4gdGstPmt0aW1lX3NlYyBpcyBvZiB0eXBlICd1bnNpZ25lZCBsb25nJyBzbyB0aGlzCisgKiB3b3JrcyBvbiBib3RoIDMyIGFuZCA2NCBiaXQgc3lzdGVtcy4gT24gMzIgYml0IHN5c3RlbXMgdGhlIHJlYWRvdXQKKyAqIGNvdmVycyB+MTM2IHllYXJzIG9mIHVwdGltZSB3aGljaCBzaG91bGQgYmUgZW5vdWdoIHRvIHByZXZlbnQKKyAqIHByZW1hdHVyZSB3cmFwIGFyb3VuZHMuCisgKi8KK3RpbWU2NF90IGt0aW1lX2dldF9zZWNvbmRzKHZvaWQpCit7CisJc3RydWN0IHRpbWVrZWVwZXIgKnRrID0gJnRrX2NvcmUudGltZWtlZXBlcjsKKworCVdBUk5fT04odGltZWtlZXBpbmdfc3VzcGVuZGVkKTsKKwlyZXR1cm4gdGstPmt0aW1lX3NlYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt0aW1lX2dldF9zZWNvbmRzKTsKKworLyoqCisgKiBrdGltZV9nZXRfcmVhbF9zZWNvbmRzIC0gR2V0IHRoZSBzZWNvbmRzIHBvcnRpb24gb2YgQ0xPQ0tfUkVBTFRJTUUKKyAqCisgKiBSZXR1cm5zIHRoZSB3YWxsIGNsb2NrIHNlY29uZHMgc2luY2UgMTk3MC4gVGhpcyByZXBsYWNlcyB0aGUKKyAqIGdldF9zZWNvbmRzKCkgaW50ZXJmYWNlIHdoaWNoIGlzIG5vdCB5MjAzOCBzYWZlIG9uIDMyYml0IHN5c3RlbXMuCisgKgorICogRm9yIDY0Yml0IHN5c3RlbXMgdGhlIGZhc3QgYWNjZXNzIHRvIHRrLT54dGltZV9zZWMgaXMgcHJlc2VydmVkLiBPbgorICogMzJiaXQgc3lzdGVtcyB0aGUgYWNjZXNzIG11c3QgYmUgcHJvdGVjdGVkIHdpdGggdGhlIHNlcXVlbmNlCisgKiBjb3VudGVyIHRvIHByb3ZpZGUgImF0b21pYyIgYWNjZXNzIHRvIHRoZSA2NGJpdCB0ay0+eHRpbWVfc2VjCisgKiB2YWx1ZS4KKyAqLwordGltZTY0X3Qga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcyh2b2lkKQoreworCXN0cnVjdCB0aW1la2VlcGVyICp0ayA9ICZ0a19jb3JlLnRpbWVrZWVwZXI7CisJdGltZTY0X3Qgc2Vjb25kczsKKwl1bnNpZ25lZCBpbnQgc2VxOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkKKwkJcmV0dXJuIHRrLT54dGltZV9zZWM7CisKKwlkbyB7CisJCXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oJnRrX2NvcmUuc2VxKTsKKwkJc2Vjb25kcyA9IHRrLT54dGltZV9zZWM7CisKKwl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZ0a19jb3JlLnNlcSwgc2VxKSk7CisKKwlyZXR1cm4gc2Vjb25kczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt0aW1lX2dldF9yZWFsX3NlY29uZHMpOworCiAjaWZkZWYgQ09ORklHX05UUF9QUFMKIAogLyoqCkBAIC03MDMsMTggKzc2MSwxOCBAQAogRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOwogCiAvKioKLSAqIGRvX3NldHRpbWVvZmRheSAtIFNldHMgdGhlIHRpbWUgb2YgZGF5Ci0gKiBAdHY6CQlwb2ludGVyIHRvIHRoZSB0aW1lc3BlYyB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBuZXcgdGltZQorICogZG9fc2V0dGltZW9mZGF5NjQgLSBTZXRzIHRoZSB0aW1lIG9mIGRheS4KKyAqIEB0czogICAgIHBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjNjQgdmFyaWFibGUgY29udGFpbmluZyB0aGUgbmV3IHRpbWUKICAqCiAgKiBTZXRzIHRoZSB0aW1lIG9mIGRheSB0byB0aGUgbmV3IHRpbWUgYW5kIHVwZGF0ZSBOVFAgYW5kIG5vdGlmeSBocnRpbWVycwogICovCi1pbnQgZG9fc2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHYpCitpbnQgZG9fc2V0dGltZW9mZGF5NjQoY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewogCXN0cnVjdCB0aW1la2VlcGVyICp0ayA9ICZ0a19jb3JlLnRpbWVrZWVwZXI7Ci0Jc3RydWN0IHRpbWVzcGVjNjQgdHNfZGVsdGEsIHh0LCB0bXA7CisJc3RydWN0IHRpbWVzcGVjNjQgdHNfZGVsdGEsIHh0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIXRpbWVzcGVjX3ZhbGlkX3N0cmljdCh0dikpCisJaWYgKCF0aW1lc3BlYzY0X3ZhbGlkX3N0cmljdCh0cykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1la2VlcGVyX2xvY2ssIGZsYWdzKTsKQEAgLTcyMywxMyArNzgxLDEyIEBACiAJdGltZWtlZXBpbmdfZm9yd2FyZF9ub3codGspOwogCiAJeHQgPSB0a194dGltZSh0ayk7Ci0JdHNfZGVsdGEudHZfc2VjID0gdHYtPnR2X3NlYyAtIHh0LnR2X3NlYzsKLQl0c19kZWx0YS50dl9uc2VjID0gdHYtPnR2X25zZWMgLSB4dC50dl9uc2VjOworCXRzX2RlbHRhLnR2X3NlYyA9IHRzLT50dl9zZWMgLSB4dC50dl9zZWM7CisJdHNfZGVsdGEudHZfbnNlYyA9IHRzLT50dl9uc2VjIC0geHQudHZfbnNlYzsKIAogCXRrX3NldF93YWxsX3RvX21vbm8odGssIHRpbWVzcGVjNjRfc3ViKHRrLT53YWxsX3RvX21vbm90b25pYywgdHNfZGVsdGEpKTsKIAotCXRtcCA9IHRpbWVzcGVjX3RvX3RpbWVzcGVjNjQoKnR2KTsKLQl0a19zZXRfeHRpbWUodGssICZ0bXApOworCXRrX3NldF94dGltZSh0aywgdHMpOwogCiAJdGltZWtlZXBpbmdfdXBkYXRlKHRrLCBUS19DTEVBUl9OVFAgfCBUS19NSVJST1IgfCBUS19DTE9DS19XQVNfU0VUKTsKIApAQCAtNzQxLDcgKzc5OCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKK0VYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5NjQpOwogCiAvKioKICAqIHRpbWVrZWVwaW5nX2luamVjdF9vZmZzZXQgLSBBZGRzIG9yIHN1YnRyYWN0cyBmcm9tIHRoZSBjdXJyZW50IHRpbWUuCkBAIC04OTUsMTIgKzk1MiwxMiBAQAogfQogCiAvKioKLSAqIGdldHJhd21vbm90b25pYyAtIFJldHVybnMgdGhlIHJhdyBtb25vdG9uaWMgdGltZSBpbiBhIHRpbWVzcGVjCi0gKiBAdHM6CQlwb2ludGVyIHRvIHRoZSB0aW1lc3BlYyB0byBiZSBzZXQKKyAqIGdldHJhd21vbm90b25pYzY0IC0gUmV0dXJucyB0aGUgcmF3IG1vbm90b25pYyB0aW1lIGluIGEgdGltZXNwZWMKKyAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjNjQgdG8gYmUgc2V0CiAgKgogICogUmV0dXJucyB0aGUgcmF3IG1vbm90b25pYyB0aW1lIChjb21wbGV0ZWx5IHVuLW1vZGlmaWVkIGJ5IG50cCkKICAqLwotdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cykKK3ZvaWQgZ2V0cmF3bW9ub3RvbmljNjQoc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewogCXN0cnVjdCB0aW1la2VlcGVyICp0ayA9ICZ0a19jb3JlLnRpbWVrZWVwZXI7CiAJc3RydWN0IHRpbWVzcGVjNjQgdHM2NDsKQEAgLTkxNSw5ICs5NzIsMTAgQEAKIAl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZ0a19jb3JlLnNlcSwgc2VxKSk7CiAKIAl0aW1lc3BlYzY0X2FkZF9ucygmdHM2NCwgbnNlY3MpOwotCSp0cyA9IHRpbWVzcGVjNjRfdG9fdGltZXNwZWModHM2NCk7CisJKnRzID0gdHM2NDsKIH0KLUVYUE9SVF9TWU1CT0woZ2V0cmF3bW9ub3RvbmljKTsKK0VYUE9SVF9TWU1CT0woZ2V0cmF3bW9ub3RvbmljNjQpOworCiAKIC8qKgogICogdGltZWtlZXBpbmdfdmFsaWRfZm9yX2hyZXMgLSBDaGVjayBpZiB0aW1la2VlcGluZyBpcyBzdWl0YWJsZSBmb3IgaHJlcwpAQCAtMTA2OCw4ICsxMTI2LDggQEAKIH0KIAogLyoqCi0gKiB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lIC0gQWRkcyBzdXNwZW5kIGludGVydmFsIHRvIHRpbWVla2VlcGluZyB2YWx1ZXMKLSAqIEBkZWx0YTogcG9pbnRlciB0byBhIHRpbWVzcGVjIGRlbHRhIHZhbHVlCisgKiB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lNjQgLSBBZGRzIHN1c3BlbmQgaW50ZXJ2YWwgdG8gdGltZWVrZWVwaW5nIHZhbHVlcworICogQGRlbHRhOiBwb2ludGVyIHRvIGEgdGltZXNwZWM2NCBkZWx0YSB2YWx1ZQogICoKICAqIFRoaXMgaG9vayBpcyBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGNhbm5vdCBzdXBwb3J0IHJlYWRfcGVyc2lzdGVudF9jbG9jawogICogYmVjYXVzZSB0aGVpciBSVEMvcGVyc2lzdGVudCBjbG9jayBpcyBvbmx5IGFjY2Vzc2libGUgd2hlbiBpcnFzIGFyZSBlbmFibGVkLgpAQCAtMTA3NywxMCArMTEzNSw5IEBACiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSBydGNfcmVzdW1lKCksIGFuZCBhbGxvd3MKICAqIGEgc3VzcGVuZCBvZmZzZXQgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgdGltZWtlZXBpbmcgdmFsdWVzLgogICovCi12b2lkIHRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUoc3RydWN0IHRpbWVzcGVjICpkZWx0YSkKK3ZvaWQgdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZTY0KHN0cnVjdCB0aW1lc3BlYzY0ICpkZWx0YSkKIHsKIAlzdHJ1Y3QgdGltZWtlZXBlciAqdGsgPSAmdGtfY29yZS50aW1la2VlcGVyOwotCXN0cnVjdCB0aW1lc3BlYzY0IHRtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKQEAgLTEwOTUsOCArMTE1Miw3IEBACiAKIAl0aW1la2VlcGluZ19mb3J3YXJkX25vdyh0ayk7CiAKLQl0bXAgPSB0aW1lc3BlY190b190aW1lc3BlYzY0KCpkZWx0YSk7Ci0JX190aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lKHRrLCAmdG1wKTsKKwlfX3RpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUodGssIGRlbHRhKTsKIAogCXRpbWVrZWVwaW5nX3VwZGF0ZSh0aywgVEtfQ0xFQVJfTlRQIHwgVEtfTUlSUk9SIHwgVEtfQ0xPQ0tfV0FTX1NFVCk7CiAKQEAgLTEzMzIsNiArMTM4OCwxMiBAQAogCSAqCiAJICogWFhYIC0gVE9ETzogRG9jIG50cF9lcnJvciBjYWxjdWxhdGlvbi4KIAkgKi8KKwlpZiAoKG11bHRfYWRqID4gMCkgJiYgKHRrLT50a3IubXVsdCArIG11bHRfYWRqIDwgbXVsdF9hZGopKSB7CisJCS8qIE5UUCBhZGp1c3RtZW50IGNhdXNlZCBjbG9ja3NvdXJjZSBtdWx0IG92ZXJmbG93ICovCisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KKwogCXRrLT50a3IubXVsdCArPSBtdWx0X2FkajsKIAl0ay0+eHRpbWVfaW50ZXJ2YWwgKz0gaW50ZXJ2YWw7CiAJdGstPnRrci54dGltZV9uc2VjIC09IG9mZnNldDsKQEAgLTEzOTcsNyArMTQ1OSw4IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KHRrLT50a3IuY2xvY2stPm1heGFkaiAmJgotCQkodGstPnRrci5tdWx0ID4gdGstPnRrci5jbG9jay0+bXVsdCArIHRrLT50a3IuY2xvY2stPm1heGFkaikpKSB7CisJCShhYnModGstPnRrci5tdWx0IC0gdGstPnRrci5jbG9jay0+bXVsdCkKKwkJCT4gdGstPnRrci5jbG9jay0+bWF4YWRqKSkpIHsKIAkJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HCiAJCQkiQWRqdXN0aW5nICVzIG1vcmUgdGhhbiAxMSUlICglbGQgdnMgJWxkKVxuIiwKIAkJCXRrLT50a3IuY2xvY2stPm5hbWUsIChsb25nKXRrLT50a3IubXVsdCwKQEAgLTE2NDYsNyArMTcwOSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGN1cnJlbnRfa2VybmVsX3RpbWUpOwogCi1zdHJ1Y3QgdGltZXNwZWMgZ2V0X21vbm90b25pY19jb2Fyc2Uodm9pZCkKK3N0cnVjdCB0aW1lc3BlYzY0IGdldF9tb25vdG9uaWNfY29hcnNlNjQodm9pZCkKIHsKIAlzdHJ1Y3QgdGltZWtlZXBlciAqdGsgPSAmdGtfY29yZS50aW1la2VlcGVyOwogCXN0cnVjdCB0aW1lc3BlYzY0IG5vdywgbW9ubzsKQEAgLTE2NjIsNyArMTcyNSw3IEBACiAJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWM2NCgmbm93LCBub3cudHZfc2VjICsgbW9uby50dl9zZWMsCiAJCQkJbm93LnR2X25zZWMgKyBtb25vLnR2X25zZWMpOwogCi0JcmV0dXJuIHRpbWVzcGVjNjRfdG9fdGltZXNwZWMobm93KTsKKwlyZXR1cm4gbm93OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXIuYyBiL2tlcm5lbC90aW1lL3RpbWVyLmMKaW5kZXggMzI2MGZmZC4uMmQzZjVjNSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXIuYworKysgYi9rZXJuZWwvdGltZS90aW1lci5jCkBAIC0xMzc3LDEyICsxMzc3LDExIEBACiB2b2lkIHVwZGF0ZV9wcm9jZXNzX3RpbWVzKGludCB1c2VyX3RpY2spCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogTm90ZTogdGhpcyB0aW1lciBpcnEgY29udGV4dCBtdXN0IGJlIGFjY291bnRlZCBmb3IgYXMgd2VsbC4gKi8KIAlhY2NvdW50X3Byb2Nlc3NfdGljayhwLCB1c2VyX3RpY2spOwogCXJ1bl9sb2NhbF90aW1lcnMoKTsKLQlyY3VfY2hlY2tfY2FsbGJhY2tzKGNwdSwgdXNlcl90aWNrKTsKKwlyY3VfY2hlY2tfY2FsbGJhY2tzKHVzZXJfdGljayk7CiAjaWZkZWYgQ09ORklHX0lSUV9XT1JLCiAJaWYgKGluX2lycSgpKQogCQlpcnFfd29ya190aWNrKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IDJkNzVjOTQuLmE1NmUwN2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC01MzgsMTYgKzUzOCwxOCBAQAogICogcmluZ19idWZmZXJfd2FpdCAtIHdhaXQgZm9yIGlucHV0IHRvIHRoZSByaW5nIGJ1ZmZlcgogICogQGJ1ZmZlcjogYnVmZmVyIHRvIHdhaXQgb24KICAqIEBjcHU6IHRoZSBjcHUgYnVmZmVyIHRvIHdhaXQgb24KKyAqIEBmdWxsOiB3YWl0IHVudGlsIGEgZnVsbCBwYWdlIGlzIGF2YWlsYWJsZSwgaWYgQGNwdSAhPSBSSU5HX0JVRkZFUl9BTExfQ1BVUwogICoKICAqIElmIEBjcHUgPT0gUklOR19CVUZGRVJfQUxMX0NQVVMgdGhlbiB0aGUgdGFzayB3aWxsIHdha2UgdXAgYXMgc29vbgogICogYXMgZGF0YSBpcyBhZGRlZCB0byBhbnkgb2YgdGhlIEBidWZmZXIncyBjcHUgYnVmZmVycy4gT3RoZXJ3aXNlCiAgKiBpdCB3aWxsIHdhaXQgZm9yIGRhdGEgdG8gYmUgYWRkZWQgdG8gYSBzcGVjaWZpYyBjcHUgYnVmZmVyLgogICovCi1pbnQgcmluZ19idWZmZXJfd2FpdChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK2ludCByaW5nX2J1ZmZlcl93YWl0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LCBib29sIGZ1bGwpCiB7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKnVuaW5pdGlhbGl6ZWRfdmFyKGNwdV9idWZmZXIpOwogCURFRklORV9XQUlUKHdhaXQpOwogCXN0cnVjdCByYl9pcnFfd29yayAqd29yazsKKwlpbnQgcmV0ID0gMDsKIAogCS8qCiAJICogRGVwZW5kaW5nIG9uIHdoYXQgdGhlIGNhbGxlciBpcyB3YWl0aW5nIGZvciwgZWl0aGVyIGFueQpAQCAtNTY0LDM2ICs1NjYsNjEgQEAKIAl9CiAKIAotCXByZXBhcmVfdG9fd2FpdCgmd29yay0+d2FpdGVycywgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJd2hpbGUgKHRydWUpIHsKKwkJcHJlcGFyZV90b193YWl0KCZ3b3JrLT53YWl0ZXJzLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCS8qCi0JICogVGhlIGV2ZW50cyBjYW4gaGFwcGVuIGluIGNyaXRpY2FsIHNlY3Rpb25zIHdoZXJlCi0JICogY2hlY2tpbmcgYSB3b3JrIHF1ZXVlIGNhbiBjYXVzZSBkZWFkbG9ja3MuCi0JICogQWZ0ZXIgYWRkaW5nIGEgdGFzayB0byB0aGUgcXVldWUsIHRoaXMgZmxhZyBpcyBzZXQKLQkgKiBvbmx5IHRvIG5vdGlmeSBldmVudHMgdG8gdHJ5IHRvIHdha2UgdXAgdGhlIHF1ZXVlCi0JICogdXNpbmcgaXJxX3dvcmsuCi0JICoKLQkgKiBXZSBkb24ndCBjbGVhciBpdCBldmVuIGlmIHRoZSBidWZmZXIgaXMgbm8gbG9uZ2VyCi0JICogZW1wdHkuIFRoZSBmbGFnIG9ubHkgY2F1c2VzIHRoZSBuZXh0IGV2ZW50IHRvIHJ1bgotCSAqIGlycV93b3JrIHRvIGRvIHRoZSB3b3JrIHF1ZXVlIHdha2UgdXAuIFRoZSB3b3JzZQotCSAqIHRoYXQgY2FuIGhhcHBlbiBpZiB3ZSByYWNlIHdpdGggIXRyYWNlX2VtcHR5KCkgaXMgdGhhdAotCSAqIGFuIGV2ZW50IHdpbGwgY2F1c2UgYW4gaXJxX3dvcmsgdG8gdHJ5IHRvIHdha2UgdXAKLQkgKiBhbiBlbXB0eSBxdWV1ZS4KLQkgKgotCSAqIFRoZXJlJ3Mgbm8gcmVhc29uIHRvIHByb3RlY3QgdGhpcyBmbGFnIGVpdGhlciwgYXMKLQkgKiB0aGUgd29yayBxdWV1ZSBhbmQgaXJxX3dvcmsgbG9naWMgd2lsbCBkbyB0aGUgbmVjZXNzYXJ5Ci0JICogc3luY2hyb25pemF0aW9uIGZvciB0aGUgd2FrZSB1cHMuIFRoZSBvbmx5IHRoaW5nCi0JICogdGhhdCBpcyBuZWNlc3NhcnkgaXMgdGhhdCB0aGUgd2FrZSB1cCBoYXBwZW5zIGFmdGVyCi0JICogYSB0YXNrIGhhcyBiZWVuIHF1ZXVlZC4gSXQncyBPSyBmb3Igc3B1cmlvdXMgd2FrZSB1cHMuCi0JICovCi0Jd29yay0+d2FpdGVyc19wZW5kaW5nID0gdHJ1ZTsKKwkJLyoKKwkJICogVGhlIGV2ZW50cyBjYW4gaGFwcGVuIGluIGNyaXRpY2FsIHNlY3Rpb25zIHdoZXJlCisJCSAqIGNoZWNraW5nIGEgd29yayBxdWV1ZSBjYW4gY2F1c2UgZGVhZGxvY2tzLgorCQkgKiBBZnRlciBhZGRpbmcgYSB0YXNrIHRvIHRoZSBxdWV1ZSwgdGhpcyBmbGFnIGlzIHNldAorCQkgKiBvbmx5IHRvIG5vdGlmeSBldmVudHMgdG8gdHJ5IHRvIHdha2UgdXAgdGhlIHF1ZXVlCisJCSAqIHVzaW5nIGlycV93b3JrLgorCQkgKgorCQkgKiBXZSBkb24ndCBjbGVhciBpdCBldmVuIGlmIHRoZSBidWZmZXIgaXMgbm8gbG9uZ2VyCisJCSAqIGVtcHR5LiBUaGUgZmxhZyBvbmx5IGNhdXNlcyB0aGUgbmV4dCBldmVudCB0byBydW4KKwkJICogaXJxX3dvcmsgdG8gZG8gdGhlIHdvcmsgcXVldWUgd2FrZSB1cC4gVGhlIHdvcnNlCisJCSAqIHRoYXQgY2FuIGhhcHBlbiBpZiB3ZSByYWNlIHdpdGggIXRyYWNlX2VtcHR5KCkgaXMgdGhhdAorCQkgKiBhbiBldmVudCB3aWxsIGNhdXNlIGFuIGlycV93b3JrIHRvIHRyeSB0byB3YWtlIHVwCisJCSAqIGFuIGVtcHR5IHF1ZXVlLgorCQkgKgorCQkgKiBUaGVyZSdzIG5vIHJlYXNvbiB0byBwcm90ZWN0IHRoaXMgZmxhZyBlaXRoZXIsIGFzCisJCSAqIHRoZSB3b3JrIHF1ZXVlIGFuZCBpcnFfd29yayBsb2dpYyB3aWxsIGRvIHRoZSBuZWNlc3NhcnkKKwkJICogc3luY2hyb25pemF0aW9uIGZvciB0aGUgd2FrZSB1cHMuIFRoZSBvbmx5IHRoaW5nCisJCSAqIHRoYXQgaXMgbmVjZXNzYXJ5IGlzIHRoYXQgdGhlIHdha2UgdXAgaGFwcGVucyBhZnRlcgorCQkgKiBhIHRhc2sgaGFzIGJlZW4gcXVldWVkLiBJdCdzIE9LIGZvciBzcHVyaW91cyB3YWtlIHVwcy4KKwkJICovCisJCXdvcmstPndhaXRlcnNfcGVuZGluZyA9IHRydWU7CiAKLQlpZiAoKGNwdSA9PSBSSU5HX0JVRkZFUl9BTExfQ1BVUyAmJiByaW5nX2J1ZmZlcl9lbXB0eShidWZmZXIpKSB8fAotCSAgICAoY3B1ICE9IFJJTkdfQlVGRkVSX0FMTF9DUFVTICYmIHJpbmdfYnVmZmVyX2VtcHR5X2NwdShidWZmZXIsIGNwdSkpKQorCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IC1FSU5UUjsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNwdSA9PSBSSU5HX0JVRkZFUl9BTExfQ1BVUyAmJiAhcmluZ19idWZmZXJfZW1wdHkoYnVmZmVyKSkKKwkJCWJyZWFrOworCisJCWlmIChjcHUgIT0gUklOR19CVUZGRVJfQUxMX0NQVVMgJiYKKwkJICAgICFyaW5nX2J1ZmZlcl9lbXB0eV9jcHUoYnVmZmVyLCBjcHUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJYm9vbCBwYWdlYnVzeTsKKworCQkJaWYgKCFmdWxsKQorCQkJCWJyZWFrOworCisJCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CisJCQlwYWdlYnVzeSA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CisKKwkJCWlmICghcGFnZWJ1c3kpCisJCQkJYnJlYWs7CisJCX0KKwogCQlzY2hlZHVsZSgpOworCX0KIAogCWZpbmlzaF93YWl0KCZ3b3JrLT53YWl0ZXJzLCAmd2FpdCk7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggOGE1MjgzOS4uOTJmNGE2YyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTEwNzYsMTMgKzEwNzYsMTQgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfVFJBQ0VSX01BWF9UUkFDRSAqLwogCi1zdGF0aWMgaW50IHdhaXRfb25fcGlwZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitzdGF0aWMgaW50IHdhaXRfb25fcGlwZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGJvb2wgZnVsbCkKIHsKIAkvKiBJdGVyYXRvcnMgYXJlIHN0YXRpYywgdGhleSBzaG91bGQgYmUgZmlsbGVkIG9yIGVtcHR5ICovCiAJaWYgKHRyYWNlX2J1ZmZlcl9pdGVyKGl0ZXIsIGl0ZXItPmNwdV9maWxlKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcmluZ19idWZmZXJfd2FpdChpdGVyLT50cmFjZV9idWZmZXItPmJ1ZmZlciwgaXRlci0+Y3B1X2ZpbGUpOworCXJldHVybiByaW5nX2J1ZmZlcl93YWl0KGl0ZXItPnRyYWNlX2J1ZmZlci0+YnVmZmVyLCBpdGVyLT5jcHVfZmlsZSwKKwkJCQlmdWxsKTsKIH0KIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUCkBAIC00NDM0LDE1ICs0NDM1LDEyIEBACiAKIAkJbXV0ZXhfdW5sb2NrKCZpdGVyLT5tdXRleCk7CiAKLQkJcmV0ID0gd2FpdF9vbl9waXBlKGl0ZXIpOworCQlyZXQgPSB3YWl0X29uX3BpcGUoaXRlciwgZmFsc2UpOwogCiAJCW11dGV4X2xvY2soJml0ZXItPm11dGV4KTsKIAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlyZXR1cm4gLUVJTlRSOwogCX0KIAogCXJldHVybiAxOwpAQCAtNTM3MiwxNiArNTM3MCwxMiBAQAogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KIAkJCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7Ci0JCQlyZXQgPSB3YWl0X29uX3BpcGUoaXRlcik7CisJCQlyZXQgPSB3YWl0X29uX3BpcGUoaXRlciwgZmFsc2UpOwogCQkJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJCQlpZiAocmV0KSB7CiAJCQkJc2l6ZSA9IHJldDsKIAkJCQlnb3RvIG91dF91bmxvY2s7CiAJCQl9Ci0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQlzaXplID0gLUVJTlRSOwotCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJCX0KIAkJCWdvdG8gYWdhaW47CiAJCX0KIAkJc2l6ZSA9IDA7CkBAIC01NTAwLDcgKzU0OTQsNyBAQAogCX07CiAJc3RydWN0IGJ1ZmZlcl9yZWYgKnJlZjsKIAlpbnQgZW50cmllcywgc2l6ZSwgaTsKLQlzc2l6ZV90IHJldDsKKwlzc2l6ZV90IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIApAQCAtNTUzOCwxMyArNTUzMiwxNiBAQAogCQlpbnQgcjsKIAogCQlyZWYgPSBremFsbG9jKHNpemVvZigqcmVmKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcmVmKQorCQlpZiAoIXJlZikgeworCQkJcmV0ID0gLUVOT01FTTsKIAkJCWJyZWFrOworCQl9CiAKIAkJcmVmLT5yZWYgPSAxOwogCQlyZWYtPmJ1ZmZlciA9IGl0ZXItPnRyYWNlX2J1ZmZlci0+YnVmZmVyOwogCQlyZWYtPnBhZ2UgPSByaW5nX2J1ZmZlcl9hbGxvY19yZWFkX3BhZ2UocmVmLT5idWZmZXIsIGl0ZXItPmNwdV9maWxlKTsKIAkJaWYgKCFyZWYtPnBhZ2UpIHsKKwkJCXJldCA9IC1FTk9NRU07CiAJCQlrZnJlZShyZWYpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTU1ODIsMTkgKzU1NzksMTkgQEAKIAogCS8qIGRpZCB3ZSByZWFkIGFueXRoaW5nPyAqLwogCWlmICghc3BkLm5yX3BhZ2VzKSB7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwogCQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fCAoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykpIHsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKIAkJfQogCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCQlyZXQgPSB3YWl0X29uX3BpcGUoaXRlcik7CisJCXJldCA9IHdhaXRfb25fcGlwZShpdGVyLCB0cnVlKTsKIAkJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXQgPSAtRUlOVFI7Ci0JCQlnb3RvIG91dDsKLQkJfQorCiAJCWdvdG8gYWdhaW47CiAJfQogCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDRlMzVhNWQuLmQ3ODAzNTEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0xMjM4LDIxICsxMjM4LDkgQEAKIAkgIFJDVSBncmFjZSBwZXJpb2QgcGVyc2lzdHMsIGFkZGl0aW9uYWwgQ1BVIHN0YWxsIHdhcm5pbmdzIGFyZQogCSAgcHJpbnRlZCBhdCBtb3JlIHdpZGVseSBzcGFjZWQgaW50ZXJ2YWxzLgogCi1jb25maWcgUkNVX0NQVV9TVEFMTF9WRVJCT1NFCi0JYm9vbCAiUHJpbnQgYWRkaXRpb25hbCBwZXItdGFzayBpbmZvcm1hdGlvbiBmb3IgUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiIKLQlkZXBlbmRzIG9uIFRSRUVfUFJFRU1QVF9SQ1UKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBjYXVzZXMgUkNVIHRvIHByaW50ayBkZXRhaWxlZCBwZXItdGFzayBpbmZvcm1hdGlvbgotCSAgZm9yIGFueSB0YXNrcyB0aGF0IGFyZSBzdGFsbGluZyB0aGUgY3VycmVudCBSQ1UgZ3JhY2UgcGVyaW9kLgotCi0JICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KLQotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1Y2ggY2hlY2tzLgotCiBjb25maWcgUkNVX0NQVV9TVEFMTF9JTkZPCiAJYm9vbCAiUHJpbnQgYWRkaXRpb25hbCBkaWFnbm9zdGljcyBvbiBSQ1UgQ1BVIHN0YWxsIgotCWRlcGVuZHMgb24gKFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UpICYmIERFQlVHX0tFUk5FTAorCWRlcGVuZHMgb24gKFRSRUVfUkNVIHx8IFBSRUVNUFRfUkNVKSAmJiBERUJVR19LRVJORUwKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBGb3IgZWFjaCBzdGFsbGVkIENQVSB0aGF0IGlzIGF3YXJlIG9mIHRoZSBjdXJyZW50IFJDVSBncmFjZQpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDc1MTJkYzkuLjAyMTFkMmIgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDcgQEAKIGxpYi15IDo9IGN0eXBlLm8gc3RyaW5nLm8gdnNwcmludGYubyBjbWRsaW5lLm8gXAogCSByYnRyZWUubyByYWRpeC10cmVlLm8gZHVtcF9zdGFjay5vIHRpbWVycXVldWUub1wKIAkgaWRyLm8gaW50X3NxcnQubyBleHRhYmxlLm8gXAotCSBzaGExLm8gbWQ1Lm8gaXJxX3JlZ3MubyByZWNpcHJvY2FsX2Rpdi5vIGFyZ3Zfc3BsaXQubyBcCisJIHNoYTEubyBtZDUubyBpcnFfcmVncy5vIGFyZ3Zfc3BsaXQubyBcCiAJIHByb3BvcnRpb25zLm8gZmxleF9wcm9wb3J0aW9ucy5vIHJhdGVsaW1pdC5vIHNob3dfbWVtLm8gXAogCSBpc19zaW5nbGVfdGhyZWFkZWQubyBwbGlzdC5vIGRlY29tcHJlc3MubyBrb2JqZWN0X3VldmVudC5vIFwKIAkgZWFybHljcGlvLm8KQEAgLTI2LDcgKzI2LDcgQEAKIAkgYnVzdF9zcGlubG9ja3MubyBoZXhkdW1wLm8ga2FzcHJpbnRmLm8gYml0bWFwLm8gc2NhdHRlcmxpc3QubyBcCiAJIGdjZC5vIGxjbS5vIGxpc3Rfc29ydC5vIHV1aWQubyBmbGV4X2FycmF5Lm8gaW92ZWMubyBjbHpfY3R6Lm8gXAogCSBic2VhcmNoLm8gZmluZF9sYXN0X2JpdC5vIGZpbmRfbmV4dF9iaXQubyBsbGlzdC5vIG1lbXdlaWdodC5vIGtmaWZvLm8gXAotCSBwZXJjcHUtcmVmY291bnQubyBwZXJjcHVfaWRhLm8gaGFzaC5vIHJoYXNodGFibGUubworCSBwZXJjcHUtcmVmY291bnQubyBwZXJjcHVfaWRhLm8gaGFzaC5vIHJoYXNodGFibGUubyByZWNpcHJvY2FsX2Rpdi5vCiBvYmoteSArPSBzdHJpbmdfaGVscGVycy5vCiBvYmotJChDT05GSUdfVEVTVF9TVFJJTkdfSEVMUEVSUykgKz0gdGVzdC1zdHJpbmdfaGVscGVycy5vCiBvYmoteSArPSBrc3RydG94Lm8KZGlmZiAtLWdpdCBhL2xpYi9nZW5hbGxvYy5jIGIvbGliL2dlbmFsbG9jLmMKaW5kZXggY2NlNGRkNi4uMmU2NWQyMCAxMDA2NDQKLS0tIGEvbGliL2dlbmFsbG9jLmMKKysrIGIvbGliL2dlbmFsbG9jLmMKQEAgLTU5OCw2ICs1OTgsNyBAQAogCiAJcmV0dXJuIHBvb2w7CiB9CitFWFBPUlRfU1lNQk9MKGRldm1fZ2VuX3Bvb2xfY3JlYXRlKTsKIAogLyoqCiAgKiBkZXZfZ2V0X2dlbl9wb29sIC0gT2J0YWluIHRoZSBnZW5fcG9vbCAoaWYgYW55KSBmb3IgYSBkZXZpY2UKZGlmZiAtLWdpdCBhL2xpYi9yaGFzaHRhYmxlLmMgYi9saWIvcmhhc2h0YWJsZS5jCmluZGV4IDA4MWJlM2IuLjYyNGEwYjcgMTAwNjQ0Ci0tLSBhL2xpYi9yaGFzaHRhYmxlLmMKKysrIGIvbGliL3JoYXNodGFibGUuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJaHQtPnNoaWZ0Kys7CiAKIAkvKiBGb3IgZWFjaCBuZXcgYnVja2V0LCBzZWFyY2ggdGhlIGNvcnJlc3BvbmRpbmcgb2xkIGJ1Y2tldAotCSAqIGZvciB0aGUg76yBcnN0IGVudHJ5IHRoYXQgaGFzaGVzIHRvIHRoZSBuZXcgYnVja2V0LCBhbmQKKwkgKiBmb3IgdGhlIGZpcnN0IGVudHJ5IHRoYXQgaGFzaGVzIHRvIHRoZSBuZXcgYnVja2V0LCBhbmQKIAkgKiBsaW5rIHRoZSBuZXcgYnVja2V0IHRvIHRoYXQgZW50cnkuIFNpbmNlIGFsbCB0aGUgZW50cmllcwogCSAqIHdoaWNoIHdpbGwgZW5kIHVwIGluIHRoZSBuZXcgYnVja2V0IGFwcGVhciBpbiB0aGUgc2FtZQogCSAqIG9sZCBidWNrZXQsIHRoaXMgY29uc3RydWN0cyBhbiBlbnRpcmVseSB2YWxpZCBuZXcgaGFzaApAQCAtMjQ4LDggKzI0OCw4IEBACiAJfQogCiAJLyogUHVibGlzaCB0aGUgbmV3IHRhYmxlIHBvaW50ZXIuIExvb2t1cHMgbWF5IG5vdyB0cmF2ZXJzZQotCSAqIHRoZSBuZXcgdGFibGUsIGJ1dCB0aGV5IHdpbGwgbm90IGJlbmXvrIF0IGZyb20gYW55Ci0JICogYWRkaXRpb25hbCBlZu+sgWNpZW5jeSB1bnRpbCBsYXRlciBzdGVwcyB1bnppcCB0aGUgYnVja2V0cy4KKwkgKiB0aGUgbmV3IHRhYmxlLCBidXQgdGhleSB3aWxsIG5vdCBiZW5lZml0IGZyb20gYW55CisJICogYWRkaXRpb25hbCBlZmZpY2llbmN5IHVudGlsIGxhdGVyIHN0ZXBzIHVuemlwIHRoZSBidWNrZXRzLgogCSAqLwogCXJjdV9hc3NpZ25fcG9pbnRlcihodC0+dGJsLCBuZXdfdGJsKTsKIApAQCAtMzA2LDE0ICszMDYsMTQgQEAKIAogCWh0LT5zaGlmdC0tOwogCi0JLyogTGluayBlYWNoIGJ1Y2tldCBpbiB0aGUgbmV3IHRhYmxlIHRvIHRoZSDvrIFyc3QgYnVja2V0CisJLyogTGluayBlYWNoIGJ1Y2tldCBpbiB0aGUgbmV3IHRhYmxlIHRvIHRoZSBmaXJzdCBidWNrZXQKIAkgKiBpbiB0aGUgb2xkIHRhYmxlIHRoYXQgY29udGFpbnMgZW50cmllcyB3aGljaCB3aWxsIGhhc2gKIAkgKiB0byB0aGUgbmV3IGJ1Y2tldC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnRibC0+c2l6ZTsgaSsrKSB7CiAJCW50YmwtPmJ1Y2tldHNbaV0gPSB0YmwtPmJ1Y2tldHNbaV07CiAKLQkJLyogTGluayBlYWNoIGJ1Y2tldCBpbiB0aGUgbmV3IHRhYmxlIHRvIHRoZSDvrIFyc3QgYnVja2V0CisJCS8qIExpbmsgZWFjaCBidWNrZXQgaW4gdGhlIG5ldyB0YWJsZSB0byB0aGUgZmlyc3QgYnVja2V0CiAJCSAqIGluIHRoZSBvbGQgdGFibGUgdGhhdCBjb250YWlucyBlbnRyaWVzIHdoaWNoIHdpbGwgaGFzaAogCQkgKiB0byB0aGUgbmV3IGJ1Y2tldC4KIAkJICovCmRpZmYgLS1naXQgYS9saWIvc2hvd19tZW0uYyBiL2xpYi9zaG93X21lbS5jCmluZGV4IDA5MjI1NzkuLjVlMjU2MjcgMTAwNjQ0Ci0tLSBhL2xpYi9zaG93X21lbS5jCisrKyBiL2xpYi9zaG93X21lbS5jCkBAIC0yOCw3ICsyOCw3IEBACiAJCQkJY29udGludWU7CiAKIAkJCXRvdGFsICs9IHpvbmUtPnByZXNlbnRfcGFnZXM7Ci0JCQlyZXNlcnZlZCA9IHpvbmUtPnByZXNlbnRfcGFnZXMgLSB6b25lLT5tYW5hZ2VkX3BhZ2VzOworCQkJcmVzZXJ2ZWQgKz0gem9uZS0+cHJlc2VudF9wYWdlcyAtIHpvbmUtPm1hbmFnZWRfcGFnZXM7CiAKIAkJCWlmIChpc19oaWdobWVtX2lkeCh6b25laWQpKQogCQkJCWhpZ2htZW0gKz0gem9uZS0+cHJlc2VudF9wYWdlczsKZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCA4YTAwMGNlLi40NzdiZTY5IDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC0yNDMsMTMgKzI0MywxMCBAQAogCiBzdGF0aWMgaW50IHJlc2V0X21hbmFnZWRfcGFnZXNfZG9uZSBfX2luaXRkYXRhOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ19kYXRhX3QgKnBnZGF0KQordm9pZCByZXNldF9ub2RlX21hbmFnZWRfcGFnZXMocGdfZGF0YV90ICpwZ2RhdCkKIHsKIAlzdHJ1Y3Qgem9uZSAqejsKIAotCWlmIChyZXNldF9tYW5hZ2VkX3BhZ2VzX2RvbmUpCi0JCXJldHVybjsKLQogCWZvciAoeiA9IHBnZGF0LT5ub2RlX3pvbmVzOyB6IDwgcGdkYXQtPm5vZGVfem9uZXMgKyBNQVhfTlJfWk9ORVM7IHorKykKIAkJei0+bWFuYWdlZF9wYWdlcyA9IDA7CiB9CkBAIC0yNTgsOCArMjU1LDEyIEBACiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDsKIAorCWlmIChyZXNldF9tYW5hZ2VkX3BhZ2VzX2RvbmUpCisJCXJldHVybjsKKwogCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkKIAkJcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzKHBnZGF0KTsKKwogCXJlc2V0X21hbmFnZWRfcGFnZXNfZG9uZSA9IDE7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2NtYS5jIGIvbW0vY21hLmMKaW5kZXggOTYzYmM0YS4uZmRlNzA2ZSAxMDA2NDQKLS0tIGEvbW0vY21hLmMKKysrIGIvbW0vY21hLmMKQEAgLTEyNCw2ICsxMjQsNyBAQAogCiBlcnI6CiAJa2ZyZWUoY21hLT5iaXRtYXApOworCWNtYS0+Y291bnQgPSAwOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC0yMTcsOSArMjE4LDggQEAKIAlwaHlzX2FkZHJfdCBoaWdobWVtX3N0YXJ0ID0gX19wYShoaWdoX21lbW9yeSk7CiAJaW50IHJldCA9IDA7CiAKLQlwcl9kZWJ1ZygiJXMoc2l6ZSAlbHgsIGJhc2UgJTA4bHgsIGxpbWl0ICUwOGx4IGFsaWdubWVudCAlMDhseClcbiIsCi0JCV9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzaXplLCAodW5zaWduZWQgbG9uZyliYXNlLAotCQkodW5zaWduZWQgbG9uZylsaW1pdCwgKHVuc2lnbmVkIGxvbmcpYWxpZ25tZW50KTsKKwlwcl9kZWJ1ZygiJXMoc2l6ZSAlcGEsIGJhc2UgJXBhLCBsaW1pdCAlcGEgYWxpZ25tZW50ICVwYSlcbiIsCisJCV9fZnVuY19fLCAmc2l6ZSwgJmJhc2UsICZsaW1pdCwgJmFsaWdubWVudCk7CiAKIAlpZiAoY21hX2FyZWFfY291bnQgPT0gQVJSQVlfU0laRShjbWFfYXJlYXMpKSB7CiAJCXByX2VycigiTm90IGVub3VnaCBzbG90cyBmb3IgQ01BIHJlc2VydmVkIHJlZ2lvbnMhXG4iKTsKQEAgLTI0NCw1MiArMjQ0LDcyIEBACiAJc2l6ZSA9IEFMSUdOKHNpemUsIGFsaWdubWVudCk7CiAJbGltaXQgJj0gfihhbGlnbm1lbnQgLSAxKTsKIAorCWlmICghYmFzZSkKKwkJZml4ZWQgPSBmYWxzZTsKKwogCS8qIHNpemUgc2hvdWxkIGJlIGFsaWduZWQgd2l0aCBvcmRlcl9wZXJfYml0ICovCiAJaWYgKCFJU19BTElHTkVEKHNpemUgPj4gUEFHRV9TSElGVCwgMSA8PCBvcmRlcl9wZXJfYml0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgotCSAqIGFkanVzdCBsaW1pdCB0byBhdm9pZCBjcm9zc2luZyBsb3cvaGlnaCBtZW1vcnkgYm91bmRhcnkgZm9yCi0JICogYXV0b21hdGljYWxseSBhbGxvY2F0ZWQgcmVnaW9ucworCSAqIElmIGFsbG9jYXRpbmcgYXQgYSBmaXhlZCBiYXNlIHRoZSByZXF1ZXN0IHJlZ2lvbiBtdXN0IG5vdCBjcm9zcyB0aGUKKwkgKiBsb3cvaGlnaCBtZW1vcnkgYm91bmRhcnkuCiAJICovCi0JaWYgKCgobGltaXQgPT0gMCB8fCBsaW1pdCA+IG1lbWJsb2NrX2VuZCkgJiYKLQkgICAgIChtZW1ibG9ja19lbmQgLSBzaXplIDwgaGlnaG1lbV9zdGFydCAmJgotCSAgICAgIG1lbWJsb2NrX2VuZCA+IGhpZ2htZW1fc3RhcnQpKSB8fAotCSAgICAoIWZpeGVkICYmIGxpbWl0ID4gaGlnaG1lbV9zdGFydCAmJiBsaW1pdCAtIHNpemUgPCBoaWdobWVtX3N0YXJ0KSkgewotCQlsaW1pdCA9IGhpZ2htZW1fc3RhcnQ7Ci0JfQotCi0JaWYgKGZpeGVkICYmIGJhc2UgPCBoaWdobWVtX3N0YXJ0ICYmIGJhc2Urc2l6ZSA+IGhpZ2htZW1fc3RhcnQpIHsKKwlpZiAoZml4ZWQgJiYgYmFzZSA8IGhpZ2htZW1fc3RhcnQgJiYgYmFzZSArIHNpemUgPiBoaWdobWVtX3N0YXJ0KSB7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCXByX2VycigiUmVnaW9uIGF0ICUwOGx4IGRlZmluZWQgb24gbG93L2hpZ2ggbWVtb3J5IGJvdW5kYXJ5ICglMDhseClcbiIsCi0JCQkodW5zaWduZWQgbG9uZyliYXNlLCAodW5zaWduZWQgbG9uZyloaWdobWVtX3N0YXJ0KTsKKwkJcHJfZXJyKCJSZWdpb24gYXQgJXBhIGRlZmluZWQgb24gbG93L2hpZ2ggbWVtb3J5IGJvdW5kYXJ5ICglcGEpXG4iLAorCQkJJmJhc2UsICZoaWdobWVtX3N0YXJ0KTsKIAkJZ290byBlcnI7CiAJfQogCisJLyoKKwkgKiBJZiB0aGUgbGltaXQgaXMgdW5zcGVjaWZpZWQgb3IgYWJvdmUgdGhlIG1lbWJsb2NrIGVuZCwgaXRzIGVmZmVjdGl2ZQorCSAqIHZhbHVlIHdpbGwgYmUgdGhlIG1lbWJsb2NrIGVuZC4gU2V0IGl0IGV4cGxpY2l0bHkgdG8gc2ltcGxpZnkgZnVydGhlcgorCSAqIGNoZWNrcy4KKwkgKi8KKwlpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IG1lbWJsb2NrX2VuZCkKKwkJbGltaXQgPSBtZW1ibG9ja19lbmQ7CisKIAkvKiBSZXNlcnZlIG1lbW9yeSAqLwotCWlmIChiYXNlICYmIGZpeGVkKSB7CisJaWYgKGZpeGVkKSB7CiAJCWlmIChtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkgfHwKIAkJICAgIG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSkgPCAwKSB7CiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIGVycjsKIAkJfQogCX0gZWxzZSB7Ci0JCXBoeXNfYWRkcl90IGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZShzaXplLCBhbGlnbm1lbnQsIGJhc2UsCi0JCQkJCQkJbGltaXQpOwotCQlpZiAoIWFkZHIpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycjsKLQkJfSBlbHNlIHsKLQkJCWJhc2UgPSBhZGRyOworCQlwaHlzX2FkZHJfdCBhZGRyID0gMDsKKworCQkvKgorCQkgKiBBbGwgcGFnZXMgaW4gdGhlIHJlc2VydmVkIGFyZWEgbXVzdCBjb21lIGZyb20gdGhlIHNhbWUgem9uZS4KKwkJICogSWYgdGhlIHJlcXVlc3RlZCByZWdpb24gY3Jvc3NlcyB0aGUgbG93L2hpZ2ggbWVtb3J5IGJvdW5kYXJ5LAorCQkgKiB0cnkgYWxsb2NhdGluZyBmcm9tIGhpZ2ggbWVtb3J5IGZpcnN0IGFuZCBmYWxsIGJhY2sgdG8gbG93CisJCSAqIG1lbW9yeSBpbiBjYXNlIG9mIGZhaWx1cmUuCisJCSAqLworCQlpZiAoYmFzZSA8IGhpZ2htZW1fc3RhcnQgJiYgbGltaXQgPiBoaWdobWVtX3N0YXJ0KSB7CisJCQlhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2Uoc2l6ZSwgYWxpZ25tZW50LAorCQkJCQkJICAgIGhpZ2htZW1fc3RhcnQsIGxpbWl0KTsKKwkJCWxpbWl0ID0gaGlnaG1lbV9zdGFydDsKIAkJfQorCisJCWlmICghYWRkcikgeworCQkJYWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlKHNpemUsIGFsaWdubWVudCwgYmFzZSwKKwkJCQkJCSAgICBsaW1pdCk7CisJCQlpZiAoIWFkZHIpIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisKKwkJYmFzZSA9IGFkZHI7CiAJfQogCiAJcmV0ID0gY21hX2luaXRfcmVzZXJ2ZWRfbWVtKGJhc2UsIHNpemUsIG9yZGVyX3Blcl9iaXQsIHJlc19jbWEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcHJfaW5mbygiUmVzZXJ2ZWQgJWxkIE1pQiBhdCAlMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpc2l6ZSAvIFNaXzFNLAotCQkodW5zaWduZWQgbG9uZyliYXNlKTsKKwlwcl9pbmZvKCJSZXNlcnZlZCAlbGQgTWlCIGF0ICVwYVxuIiwgKHVuc2lnbmVkIGxvbmcpc2l6ZSAvIFNaXzFNLAorCQkmYmFzZSk7CiAJcmV0dXJuIDA7CiAKIGVycjoKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCBlYzc0Y2YwLi5mOTc5MmJhIDEwMDY0NAotLS0gYS9tbS9jb21wYWN0aW9uLmMKKysrIGIvbW0vY29tcGFjdGlvbi5jCkBAIC00NzksNiArNDc5LDE2IEBACiAKIAkJYmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCBlbmRfcGZuKTsKIAorCQkvKgorCQkgKiBwZm4gY291bGQgcGFzcyB0aGUgYmxvY2tfZW5kX3BmbiBpZiBpc29sYXRlZCBmcmVlcGFnZQorCQkgKiBpcyBtb3JlIHRoYW4gcGFnZWJsb2NrIG9yZGVyLiBJbiB0aGlzIGNhc2UsIHdlIGFkanVzdAorCQkgKiBzY2FubmluZyByYW5nZSB0byByaWdodCBvbmUuCisJCSAqLworCQlpZiAocGZuID49IGJsb2NrX2VuZF9wZm4pIHsKKwkJCWJsb2NrX2VuZF9wZm4gPSBBTElHTihwZm4gKyAxLCBwYWdlYmxvY2tfbnJfcGFnZXMpOworCQkJYmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCBlbmRfcGZuKTsKKwkJfQorCiAJCWlmICghcGFnZWJsb2NrX3Bmbl90b19wYWdlKHBmbiwgYmxvY2tfZW5kX3BmbiwgY2MtPnpvbmUpKQogCQkJYnJlYWs7CiAKQEAgLTEwMjksOCArMTAzOSwxMiBAQAogCX0KIAogCWFjY3RfaXNvbGF0ZWQoem9uZSwgY2MpOwotCS8qIFJlY29yZCB3aGVyZSBtaWdyYXRpb24gc2Nhbm5lciB3aWxsIGJlIHJlc3RhcnRlZCAqLwotCWNjLT5taWdyYXRlX3BmbiA9IGxvd19wZm47CisJLyoKKwkgKiBSZWNvcmQgd2hlcmUgbWlncmF0aW9uIHNjYW5uZXIgd2lsbCBiZSByZXN0YXJ0ZWQuIElmIHdlIGVuZCB1cCBpbgorCSAqIHRoZSBzYW1lIHBhZ2VibG9jayBhcyB0aGUgZnJlZSBzY2FubmVyLCBtYWtlIHRoZSBzY2FubmVycyBmdWxseQorCSAqIG1lZXQgc28gdGhhdCBjb21wYWN0X2ZpbmlzaGVkKCkgdGVybWluYXRlcyBjb21wYWN0aW9uLgorCSAqLworCWNjLT5taWdyYXRlX3BmbiA9IChlbmRfcGZuIDw9IGNjLT5mcmVlX3BmbikgPyBsb3dfcGZuIDogY2MtPmZyZWVfcGZuOwogCiAJcmV0dXJuIGNjLT5ucl9taWdyYXRlcGFnZXMgPyBJU09MQVRFX1NVQ0NFU1MgOiBJU09MQVRFX05PTkU7CiB9CmRpZmYgLS1naXQgYS9tbS9mcm9udHN3YXAuYyBiL21tL2Zyb250c3dhcC5jCmluZGV4IGMzMGVlYzUuLmYyYTM1NzEgMTAwNjQ0Ci0tLSBhL21tL2Zyb250c3dhcC5jCisrKyBiL21tL2Zyb250c3dhcC5jCkBAIC0yNDQsOCArMjQ0LDEwIEBACiAJCSAgdGhlIChvbGRlcikgcGFnZSBmcm9tIGZyb250c3dhcAogCQkgKi8KIAkJaW5jX2Zyb250c3dhcF9mYWlsZWRfc3RvcmVzKCk7Ci0JCWlmIChkdXApCisJCWlmIChkdXApIHsKIAkJCV9fZnJvbnRzd2FwX2NsZWFyKHNpcywgb2Zmc2V0KTsKKwkJCWZyb250c3dhcF9vcHMtPmludmFsaWRhdGVfcGFnZSh0eXBlLCBvZmZzZXQpOworCQl9CiAJfQogCWlmIChmcm9udHN3YXBfd3JpdGV0aHJvdWdoX2VuYWJsZWQpCiAJCS8qIHJlcG9ydCBmYWlsdXJlIHNvIHN3YXAgYWxzbyB3cml0ZXMgdG8gc3dhcCBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDgyOTMwNDAuLmE0ZjkwYmEgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKKysrIGIvbW0vaW50ZXJuYWwuaApAQCAtMTA4LDYgKzEwOCwzMSBAQAogLyoKICAqIGluIG1tL3BhZ2VfYWxsb2MuYwogICovCisKKy8qCisgKiBMb2NhdGUgdGhlIHN0cnVjdCBwYWdlIGZvciBib3RoIHRoZSBtYXRjaGluZyBidWRkeSBpbiBvdXIKKyAqIHBhaXIgKGJ1ZGR5MSkgYW5kIHRoZSBjb21iaW5lZCBPKG4rMSkgcGFnZSB0aGV5IGZvcm0gKHBhZ2UpLgorICoKKyAqIDEpIEFueSBidWRkeSBCMSB3aWxsIGhhdmUgYW4gb3JkZXIgTyB0d2luIEIyIHdoaWNoIHNhdGlzZmllcworICogdGhlIGZvbGxvd2luZyBlcXVhdGlvbjoKKyAqICAgICBCMiA9IEIxIF4gKDEgPDwgTykKKyAqIEZvciBleGFtcGxlLCBpZiB0aGUgc3RhcnRpbmcgYnVkZHkgKGJ1ZGR5MikgaXMgIzggaXRzIG9yZGVyCisgKiAxIGJ1ZGR5IGlzICMxMDoKKyAqICAgICBCMiA9IDggXiAoMSA8PCAxKSA9IDggXiAyID0gMTAKKyAqCisgKiAyKSBBbnkgYnVkZHkgQiB3aWxsIGhhdmUgYW4gb3JkZXIgTysxIHBhcmVudCBQIHdoaWNoCisgKiBzYXRpc2ZpZXMgdGhlIGZvbGxvd2luZyBlcXVhdGlvbjoKKyAqICAgICBQID0gQiAmIH4oMSA8PCBPKQorICoKKyAqIEFzc3VtcHRpb246ICpfbWVtX21hcCBpcyBjb250aWd1b3VzIGF0IGxlYXN0IHVwIHRvIE1BWF9PUkRFUgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fZmluZF9idWRkeV9pbmRleCh1bnNpZ25lZCBsb25nIHBhZ2VfaWR4LCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJcmV0dXJuIHBhZ2VfaWR4IF4gKDEgPDwgb3JkZXIpOworfQorCitleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXNfYm9vdG1lbShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKIGV4dGVybiB2b2lkIHByZXBfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvcmRlcik7CiAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCmRpZmYgLS1naXQgYS9tbS9pb3ZfaXRlci5jIGIvbW0vaW92X2l0ZXIuYwppbmRleCBlYWZjZjYwLi5lMzRhM2NiIDEwMDY0NAotLS0gYS9tbS9pb3ZfaXRlci5jCisrKyBiL21tL2lvdl9pdGVyLmMKQEAgLTkxMSw5ICs5MTEsOSBAQAogCWlmIChpLT5ucl9zZWdzID09IDEpCiAJCXJldHVybiBpLT5jb3VudDsKIAllbHNlIGlmIChpLT50eXBlICYgSVRFUl9CVkVDKQotCQlyZXR1cm4gbWluKGktPmNvdW50LCBpLT5pb3YtPmlvdl9sZW4gLSBpLT5pb3Zfb2Zmc2V0KTsKLQllbHNlCiAJCXJldHVybiBtaW4oaS0+Y291bnQsIGktPmJ2ZWMtPmJ2X2xlbiAtIGktPmlvdl9vZmZzZXQpOworCWVsc2UKKwkJcmV0dXJuIG1pbihpLT5jb3VudCwgaS0+aW92LT5pb3ZfbGVuIC0gaS0+aW92X29mZnNldCk7CiB9CiBFWFBPUlRfU1lNQk9MKGlvdl9pdGVyX3NpbmdsZV9zZWdfY291bnQpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA4NjM5ZjZiLi5iODUyYjEwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTg2MCw3ICs4NjAsNiBAQAogCWludCBjb3VudDsKIAogCXJlc3VsdCA9IHBzLT5hY3Rpb24ocCwgcGZuKTsKLQlhY3Rpb25fcmVzdWx0KHBmbiwgcHMtPm1zZywgcmVzdWx0KTsKIAogCWNvdW50ID0gcGFnZV9jb3VudChwKSAtIDE7CiAJaWYgKHBzLT5hY3Rpb24gPT0gbWVfc3dhcGNhY2hlX2RpcnR5ICYmIHJlc3VsdCA9PSBERUxBWUVEKQpAQCAtODcxLDYgKzg3MCw3IEBACiAJCSAgICAgICBwZm4sIHBzLT5tc2csIGNvdW50KTsKIAkJcmVzdWx0ID0gRkFJTEVEOwogCX0KKwlhY3Rpb25fcmVzdWx0KHBmbiwgcHMtPm1zZywgcmVzdWx0KTsKIAogCS8qIENvdWxkIGRvIG1vcmUgY2hlY2tzIGhlcmUgaWYgcGFnZSBsb29rcyBvayAqLwogCS8qCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDNlNTAzODMuLjBiM2Y2YzcgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0yMjAsOSArMjIwLDYgQEAKIAkvKiBJcyBpdCBmcm9tIDAgdG8gfjA/ICovCiAJdGxiLT5mdWxsbW0gICAgID0gIShzdGFydCB8IChlbmQrMSkpOwogCXRsYi0+bmVlZF9mbHVzaF9hbGwgPSAwOwotCXRsYi0+c3RhcnQJPSBzdGFydDsKLQl0bGItPmVuZAk9IGVuZDsKLQl0bGItPm5lZWRfZmx1c2ggPSAwOwogCXRsYi0+bG9jYWwubmV4dCA9IE5VTEw7CiAJdGxiLT5sb2NhbC5uciAgID0gMDsKIAl0bGItPmxvY2FsLm1heCAgPSBBUlJBWV9TSVpFKHRsYi0+X19wYWdlcyk7CkBAIC0yMzIsMTUgKzIyOSwyMCBAQAogI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCiAJdGxiLT5iYXRjaCA9IE5VTEw7CiAjZW5kaWYKKworCV9fdGxiX3Jlc2V0X3JhbmdlKHRsYik7CiB9CiAKIHN0YXRpYyB2b2lkIHRsYl9mbHVzaF9tbXVfdGxib25seShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewotCXRsYi0+bmVlZF9mbHVzaCA9IDA7CisJaWYgKCF0bGItPmVuZCkKKwkJcmV0dXJuOworCiAJdGxiX2ZsdXNoKHRsYik7CiAjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKIAl0bGJfdGFibGVfZmx1c2godGxiKTsKICNlbmRpZgorCV9fdGxiX3Jlc2V0X3JhbmdlKHRsYik7CiB9CiAKIHN0YXRpYyB2b2lkIHRsYl9mbHVzaF9tbXVfZnJlZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQpAQCAtMjU2LDggKzI1OCw2IEBACiAKIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewotCWlmICghdGxiLT5uZWVkX2ZsdXNoKQotCQlyZXR1cm47CiAJdGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7CiAJdGxiX2ZsdXNoX21tdV9mcmVlKHRsYik7CiB9CkBAIC0yOTIsNyArMjkyLDcgQEAKIHsKIAlzdHJ1Y3QgbW11X2dhdGhlcl9iYXRjaCAqYmF0Y2g7CiAKLQlWTV9CVUdfT04oIXRsYi0+bmVlZF9mbHVzaCk7CisJVk1fQlVHX09OKCF0bGItPmVuZCk7CiAKIAliYXRjaCA9IHRsYi0+YWN0aXZlOwogCWJhdGNoLT5wYWdlc1tiYXRjaC0+bnIrK10gPSBwYWdlOwpAQCAtMzU5LDggKzM1OSw2IEBACiB7CiAJc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqKmJhdGNoID0gJnRsYi0+YmF0Y2g7CiAKLQl0bGItPm5lZWRfZmx1c2ggPSAxOwotCiAJLyoKIAkgKiBXaGVuIHRoZXJlJ3MgbGVzcyB0aGVuIHR3byB1c2VycyBvZiB0aGlzIG1tIHRoZXJlIGNhbm5vdCBiZSBhCiAJICogY29uY3VycmVudCBwYWdlLXRhYmxlIHdhbGsuCkBAIC04MTUsMjAgKzgxMywyMCBAQAogCQlpZiAoIXB0ZV9maWxlKHB0ZSkpIHsKIAkJCXN3cF9lbnRyeV90IGVudHJ5ID0gcHRlX3RvX3N3cF9lbnRyeShwdGUpOwogCi0JCQlpZiAoc3dhcF9kdXBsaWNhdGUoZW50cnkpIDwgMCkKLQkJCQlyZXR1cm4gZW50cnkudmFsOworCQkJaWYgKGxpa2VseSghbm9uX3N3YXBfZW50cnkoZW50cnkpKSkgeworCQkJCWlmIChzd2FwX2R1cGxpY2F0ZShlbnRyeSkgPCAwKQorCQkJCQlyZXR1cm4gZW50cnkudmFsOwogCi0JCQkvKiBtYWtlIHN1cmUgZHN0X21tIGlzIG9uIHN3YXBvZmYncyBtbWxpc3QuICovCi0JCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZHN0X21tLT5tbWxpc3QpKSkgewotCQkJCXNwaW5fbG9jaygmbW1saXN0X2xvY2spOwotCQkJCWlmIChsaXN0X2VtcHR5KCZkc3RfbW0tPm1tbGlzdCkpCi0JCQkJCWxpc3RfYWRkKCZkc3RfbW0tPm1tbGlzdCwKLQkJCQkJCSAmc3JjX21tLT5tbWxpc3QpOwotCQkJCXNwaW5fdW5sb2NrKCZtbWxpc3RfbG9jayk7Ci0JCQl9Ci0JCQlpZiAobGlrZWx5KCFub25fc3dhcF9lbnRyeShlbnRyeSkpKQorCQkJCS8qIG1ha2Ugc3VyZSBkc3RfbW0gaXMgb24gc3dhcG9mZidzIG1tbGlzdC4gKi8KKwkJCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZHN0X21tLT5tbWxpc3QpKSkgeworCQkJCQlzcGluX2xvY2soJm1tbGlzdF9sb2NrKTsKKwkJCQkJaWYgKGxpc3RfZW1wdHkoJmRzdF9tbS0+bW1saXN0KSkKKwkJCQkJCWxpc3RfYWRkKCZkc3RfbW0tPm1tbGlzdCwKKwkJCQkJCQkgJnNyY19tbS0+bW1saXN0KTsKKwkJCQkJc3Bpbl91bmxvY2soJm1tbGlzdF9sb2NrKTsKKwkJCQl9CiAJCQkJcnNzW01NX1NXQVBFTlRTXSsrOwotCQkJZWxzZSBpZiAoaXNfbWlncmF0aW9uX2VudHJ5KGVudHJ5KSkgeworCQkJfSBlbHNlIGlmIChpc19taWdyYXRpb25fZW50cnkoZW50cnkpKSB7CiAJCQkJcGFnZSA9IG1pZ3JhdGlvbl9lbnRyeV90b19wYWdlKGVudHJ5KTsKIAogCQkJCWlmIChQYWdlQW5vbihwYWdlKSkKQEAgLTExODYsMjAgKzExODQsOCBAQAogCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCiAJLyogRG8gdGhlIGFjdHVhbCBUTEIgZmx1c2ggYmVmb3JlIGRyb3BwaW5nIHB0bCAqLwotCWlmIChmb3JjZV9mbHVzaCkgewotCQl1bnNpZ25lZCBsb25nIG9sZF9lbmQ7Ci0KLQkJLyoKLQkJICogRmx1c2ggdGhlIFRMQiBqdXN0IGZvciB0aGUgcHJldmlvdXMgc2VnbWVudCwKLQkJICogdGhlbiB1cGRhdGUgdGhlIHJhbmdlIHRvIGJlIHRoZSByZW1haW5pbmcKLQkJICogVExCIHJhbmdlLgotCQkgKi8KLQkJb2xkX2VuZCA9IHRsYi0+ZW5kOwotCQl0bGItPmVuZCA9IGFkZHI7CisJaWYgKGZvcmNlX2ZsdXNoKQogCQl0bGJfZmx1c2hfbW11X3RsYm9ubHkodGxiKTsKLQkJdGxiLT5zdGFydCA9IGFkZHI7Ci0JCXRsYi0+ZW5kID0gb2xkX2VuZDsKLQl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggMjUyZTFkYi4uMWJmNDgwNyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYworKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKQEAgLTEwNjYsNiArMTA2NywxNiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0UgKi8KIAorc3RhdGljIHZvaWQgcmVzZXRfbm9kZV9wcmVzZW50X3BhZ2VzKHBnX2RhdGFfdCAqcGdkYXQpCit7CisJc3RydWN0IHpvbmUgKno7CisKKwlmb3IgKHogPSBwZ2RhdC0+bm9kZV96b25lczsgeiA8IHBnZGF0LT5ub2RlX3pvbmVzICsgTUFYX05SX1pPTkVTOyB6KyspCisJCXotPnByZXNlbnRfcGFnZXMgPSAwOworCisJcGdkYXQtPm5vZGVfcHJlc2VudF9wYWdlcyA9IDA7Cit9CisKIC8qIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIHN0YXRpYyBwZ19kYXRhX3QgX19yZWYgKmhvdGFkZF9uZXdfcGdkYXQoaW50IG5pZCwgdTY0IHN0YXJ0KQogewpAQCAtMTA5Niw2ICsxMTA3LDIxIEBACiAJYnVpbGRfYWxsX3pvbmVsaXN0cyhwZ2RhdCwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZ6b25lbGlzdHNfbXV0ZXgpOwogCisJLyoKKwkgKiB6b25lLT5tYW5hZ2VkX3BhZ2VzIGlzIHNldCB0byBhbiBhcHByb3hpbWF0ZSB2YWx1ZSBpbgorCSAqIGZyZWVfYXJlYV9pbml0X2NvcmUoKSwgd2hpY2ggd2lsbCBjYXVzZQorCSAqIC9zeXMvZGV2aWNlL3N5c3RlbS9ub2RlL25vZGVYL21lbWluZm8gaGFzIHdyb25nIGRhdGEuCisJICogU28gcmVzZXQgaXQgdG8gMCBiZWZvcmUgYW55IG1lbW9yeSBpcyBvbmxpbmVkLgorCSAqLworCXJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ2RhdCk7CisKKwkvKgorCSAqIFdoZW4gbWVtb3J5IGlzIGhvdC1hZGRlZCwgYWxsIHRoZSBtZW1vcnkgaXMgaW4gb2ZmbGluZSBzdGF0ZS4gU28KKwkgKiBjbGVhciBhbGwgem9uZXMnIHByZXNlbnRfcGFnZXMgYmVjYXVzZSB0aGV5IHdpbGwgYmUgdXBkYXRlZCBpbgorCSAqIG9ubGluZV9wYWdlcygpIGFuZCBvZmZsaW5lX3BhZ2VzKCkuCisJICovCisJcmVzZXRfbm9kZV9wcmVzZW50X3BhZ2VzKHBnZGF0KTsKKwogCXJldHVybiBwZ2RhdDsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDg3ZTgyYjMuLmI2YzBhNzcgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTc3Niw4ICs3NzYsMTEgQEAKIAkJICogc2hyaW5raW5nIHZtYSBoYWQsIHRvIGNvdmVyIGFueSBhbm9uIHBhZ2VzIGltcG9ydGVkLgogCQkgKi8KIAkJaWYgKGV4cG9ydGVyICYmIGV4cG9ydGVyLT5hbm9uX3ZtYSAmJiAhaW1wb3J0ZXItPmFub25fdm1hKSB7Ci0JCQlpZiAoYW5vbl92bWFfY2xvbmUoaW1wb3J0ZXIsIGV4cG9ydGVyKSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWludCBlcnJvcjsKKworCQkJZXJyb3IgPSBhbm9uX3ZtYV9jbG9uZShpbXBvcnRlciwgZXhwb3J0ZXIpOworCQkJaWYgKGVycm9yKQorCQkJCXJldHVybiBlcnJvcjsKIAkJCWltcG9ydGVyLT5hbm9uX3ZtYSA9IGV4cG9ydGVyLT5hbm9uX3ZtYTsKIAkJfQogCX0KQEAgLTI0NjksNyArMjQ3Miw4IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV92bWE7CiAKLQlpZiAoYW5vbl92bWFfY2xvbmUobmV3LCB2bWEpKQorCWVyciA9IGFub25fdm1hX2Nsb25lKG5ldywgdm1hKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlX21wb2w7CiAKIAlpZiAobmV3LT52bV9maWxlKQpAQCAtMjU5Nyw2ICsyNjAxLDggQEAKIAlkZXRhY2hfdm1hc190b19iZV91bm1hcHBlZChtbSwgdm1hLCBwcmV2LCBlbmQpOwogCXVubWFwX3JlZ2lvbihtbSwgdm1hLCBwcmV2LCBzdGFydCwgZW5kKTsKIAorCWFyY2hfdW5tYXAobW0sIHZtYSwgc3RhcnQsIGVuZCk7CisKIAkvKiBGaXggdXAgYWxsIG90aGVyIFZNIGluZm9ybWF0aW9uICovCiAJcmVtb3ZlX3ZtYV9saXN0KG1tLCB2bWEpOwogCmRpZmYgLS1naXQgYS9tbS9ub2Jvb3RtZW0uYyBiL21tL25vYm9vdG1lbS5jCmluZGV4IDdjN2FiMzIuLjkwYjUwNDYgMTAwNjQ0Ci0tLSBhL21tL25vYm9vdG1lbS5jCisrKyBiL21tL25vYm9vdG1lbS5jCkBAIC0xNDUsMTIgKzE0NSwxMCBAQAogCiBzdGF0aWMgaW50IHJlc2V0X21hbmFnZWRfcGFnZXNfZG9uZSBfX2luaXRkYXRhOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ19kYXRhX3QgKnBnZGF0KQordm9pZCByZXNldF9ub2RlX21hbmFnZWRfcGFnZXMocGdfZGF0YV90ICpwZ2RhdCkKIHsKIAlzdHJ1Y3Qgem9uZSAqejsKIAotCWlmIChyZXNldF9tYW5hZ2VkX3BhZ2VzX2RvbmUpCi0JCXJldHVybjsKIAlmb3IgKHogPSBwZ2RhdC0+bm9kZV96b25lczsgeiA8IHBnZGF0LT5ub2RlX3pvbmVzICsgTUFYX05SX1pPTkVTOyB6KyspCiAJCXotPm1hbmFnZWRfcGFnZXMgPSAwOwogfQpAQCAtMTU5LDggKzE1NywxMiBAQAogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CiAKKwlpZiAocmVzZXRfbWFuYWdlZF9wYWdlc19kb25lKQorCQlyZXR1cm47CisKIAlmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpCiAJCXJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ2RhdCk7CisKIAlyZXNldF9tYW5hZ2VkX3BhZ2VzX2RvbmUgPSAxOwogfQogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggOWNkMzZiOC4uNjE2YTJjOSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNDY3LDI5ICs0NjcsNiBAQAogfQogCiAvKgotICogTG9jYXRlIHRoZSBzdHJ1Y3QgcGFnZSBmb3IgYm90aCB0aGUgbWF0Y2hpbmcgYnVkZHkgaW4gb3VyCi0gKiBwYWlyIChidWRkeTEpIGFuZCB0aGUgY29tYmluZWQgTyhuKzEpIHBhZ2UgdGhleSBmb3JtIChwYWdlKS4KLSAqCi0gKiAxKSBBbnkgYnVkZHkgQjEgd2lsbCBoYXZlIGFuIG9yZGVyIE8gdHdpbiBCMiB3aGljaCBzYXRpc2ZpZXMKLSAqIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246Ci0gKiAgICAgQjIgPSBCMSBeICgxIDw8IE8pCi0gKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0YXJ0aW5nIGJ1ZGR5IChidWRkeTIpIGlzICM4IGl0cyBvcmRlcgotICogMSBidWRkeSBpcyAjMTA6Ci0gKiAgICAgQjIgPSA4IF4gKDEgPDwgMSkgPSA4IF4gMiA9IDEwCi0gKgotICogMikgQW55IGJ1ZGR5IEIgd2lsbCBoYXZlIGFuIG9yZGVyIE8rMSBwYXJlbnQgUCB3aGljaAotICogc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246Ci0gKiAgICAgUCA9IEIgJiB+KDEgPDwgTykKLSAqCi0gKiBBc3N1bXB0aW9uOiAqX21lbV9tYXAgaXMgY29udGlndW91cyBhdCBsZWFzdCB1cCB0byBNQVhfT1JERVIKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2ZpbmRfYnVkZHlfaW5kZXgodW5zaWduZWQgbG9uZyBwYWdlX2lkeCwgdW5zaWduZWQgaW50IG9yZGVyKQotewotCXJldHVybiBwYWdlX2lkeCBeICgxIDw8IG9yZGVyKTsKLX0KLQotLyoKICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBwYWdlIGlzIGZyZWUgJiYgaXMgdGhlIGJ1ZGR5CiAgKiB3ZSBjYW4gZG8gY29hbGVzY2UgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaWYKICAqIChhKSB0aGUgYnVkZHkgaXMgbm90IGluIGEgaG9sZSAmJgpAQCAtNTY5LDYgKzU0Niw3IEBACiAJdW5zaWduZWQgbG9uZyBjb21iaW5lZF9pZHg7CiAJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihidWRkeV9pZHgpOwogCXN0cnVjdCBwYWdlICpidWRkeTsKKwlpbnQgbWF4X29yZGVyID0gTUFYX09SREVSOwogCiAJVk1fQlVHX09OKCF6b25lX2lzX2luaXRpYWxpemVkKHpvbmUpKTsKIApAQCAtNTc3LDEzICs1NTUsMjQgQEAKIAkJCXJldHVybjsKIAogCVZNX0JVR19PTihtaWdyYXRldHlwZSA9PSAtMSk7CisJaWYgKGlzX21pZ3JhdGVfaXNvbGF0ZShtaWdyYXRldHlwZSkpIHsKKwkJLyoKKwkJICogV2UgcmVzdHJpY3QgbWF4IG9yZGVyIG9mIG1lcmdpbmcgdG8gcHJldmVudCBtZXJnZQorCQkgKiBiZXR3ZWVuIGZyZWVwYWdlcyBvbiBpc29sYXRlIHBhZ2VibG9jayBhbmQgbm9ybWFsCisJCSAqIHBhZ2VibG9jay4gV2l0aG91dCB0aGlzLCBwYWdlYmxvY2sgaXNvbGF0aW9uCisJCSAqIGNvdWxkIGNhdXNlIGluY29ycmVjdCBmcmVlcGFnZSBhY2NvdW50aW5nLgorCQkgKi8KKwkJbWF4X29yZGVyID0gbWluKE1BWF9PUkRFUiwgcGFnZWJsb2NrX29yZGVyICsgMSk7CisJfSBlbHNlIHsKKwkJX19tb2Rfem9uZV9mcmVlcGFnZV9zdGF0ZSh6b25lLCAxIDw8IG9yZGVyLCBtaWdyYXRldHlwZSk7CisJfQogCi0JcGFnZV9pZHggPSBwZm4gJiAoKDEgPDwgTUFYX09SREVSKSAtIDEpOworCXBhZ2VfaWR4ID0gcGZuICYgKCgxIDw8IG1heF9vcmRlcikgLSAxKTsKIAogCVZNX0JVR19PTl9QQUdFKHBhZ2VfaWR4ICYgKCgxIDw8IG9yZGVyKSAtIDEpLCBwYWdlKTsKIAlWTV9CVUdfT05fUEFHRShiYWRfcmFuZ2Uoem9uZSwgcGFnZSksIHBhZ2UpOwogCi0Jd2hpbGUgKG9yZGVyIDwgTUFYX09SREVSLTEpIHsKKwl3aGlsZSAob3JkZXIgPCBtYXhfb3JkZXIgLSAxKSB7CiAJCWJ1ZGR5X2lkeCA9IF9fZmluZF9idWRkeV9pbmRleChwYWdlX2lkeCwgb3JkZXIpOwogCQlidWRkeSA9IHBhZ2UgKyAoYnVkZHlfaWR4IC0gcGFnZV9pZHgpOwogCQlpZiAoIXBhZ2VfaXNfYnVkZHkocGFnZSwgYnVkZHksIG9yZGVyKSkKQEAgLTU5NCw5ICs1ODMsMTEgQEAKIAkJICovCiAJCWlmIChwYWdlX2lzX2d1YXJkKGJ1ZGR5KSkgewogCQkJY2xlYXJfcGFnZV9ndWFyZF9mbGFnKGJ1ZGR5KTsKLQkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7Ci0JCQlfX21vZF96b25lX2ZyZWVwYWdlX3N0YXRlKHpvbmUsIDEgPDwgb3JkZXIsCi0JCQkJCQkgIG1pZ3JhdGV0eXBlKTsKKwkJCXNldF9wYWdlX3ByaXZhdGUoYnVkZHksIDApOworCQkJaWYgKCFpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKSB7CisJCQkJX19tb2Rfem9uZV9mcmVlcGFnZV9zdGF0ZSh6b25lLCAxIDw8IG9yZGVyLAorCQkJCQkJCSAgbWlncmF0ZXR5cGUpOworCQkJfQogCQl9IGVsc2UgewogCQkJbGlzdF9kZWwoJmJ1ZGR5LT5scnUpOwogCQkJem9uZS0+ZnJlZV9hcmVhW29yZGVyXS5ucl9mcmVlLS07CkBAIC03MTUsMTQgKzcwNiwxMiBAQAogCQkJLyogbXVzdCBkZWxldGUgYXMgX19mcmVlX29uZV9wYWdlIGxpc3QgbWFuaXB1bGF0ZXMgKi8KIAkJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCQkJbXQgPSBnZXRfZnJlZXBhZ2VfbWlncmF0ZXR5cGUocGFnZSk7CisJCQlpZiAodW5saWtlbHkoaGFzX2lzb2xhdGVfcGFnZWJsb2NrKHpvbmUpKSkKKwkJCQltdCA9IGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSk7CisKIAkJCS8qIE1JR1JBVEVfTU9WQUJMRSBsaXN0IG1heSBpbmNsdWRlIE1JR1JBVEVfUkVTRVJWRXMgKi8KIAkJCV9fZnJlZV9vbmVfcGFnZShwYWdlLCBwYWdlX3RvX3BmbihwYWdlKSwgem9uZSwgMCwgbXQpOwogCQkJdHJhY2VfbW1fcGFnZV9wY3B1X2RyYWluKHBhZ2UsIDAsIG10KTsKLQkJCWlmIChsaWtlbHkoIWlzX21pZ3JhdGVfaXNvbGF0ZV9wYWdlKHBhZ2UpKSkgewotCQkJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTLCAxKTsKLQkJCQlpZiAoaXNfbWlncmF0ZV9jbWEobXQpKQotCQkJCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9DTUFfUEFHRVMsIDEpOwotCQkJfQogCQl9IHdoaWxlICgtLXRvX2ZyZWUgJiYgLS1iYXRjaF9mcmVlICYmICFsaXN0X2VtcHR5KGxpc3QpKTsKIAl9CiAJc3Bpbl91bmxvY2soJnpvbmUtPmxvY2spOwpAQCAtNzM5LDkgKzcyOCwxMSBAQAogCWlmIChucl9zY2FubmVkKQogCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfUEFHRVNfU0NBTk5FRCwgLW5yX3NjYW5uZWQpOwogCisJaWYgKHVubGlrZWx5KGhhc19pc29sYXRlX3BhZ2VibG9jayh6b25lKSB8fAorCQlpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKSkgeworCQltaWdyYXRldHlwZSA9IGdldF9wZm5ibG9ja19taWdyYXRldHlwZShwYWdlLCBwZm4pOworCX0KIAlfX2ZyZWVfb25lX3BhZ2UocGFnZSwgcGZuLCB6b25lLCBvcmRlciwgbWlncmF0ZXR5cGUpOwotCWlmICh1bmxpa2VseSghaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkpCi0JCV9fbW9kX3pvbmVfZnJlZXBhZ2Vfc3RhdGUoem9uZSwgMSA8PCBvcmRlciwgbWlncmF0ZXR5cGUpOwogCXNwaW5fdW5sb2NrKCZ6b25lLT5sb2NrKTsKIH0KIApAQCAtMTQ4NCw3ICsxNDc1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNwbGl0X3BhZ2UpOwogCi1zdGF0aWMgaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikKK2ludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7CiAJdW5zaWduZWQgbG9uZyB3YXRlcm1hcms7CiAJc3RydWN0IHpvbmUgKnpvbmU7CkBAIC02NDA4LDEzICs2Mzk5LDEyIEBACiAKIAkvKiBNYWtlIHN1cmUgdGhlIHJhbmdlIGlzIHJlYWxseSBpc29sYXRlZC4gKi8KIAlpZiAodGVzdF9wYWdlc19pc29sYXRlZChvdXRlcl9zdGFydCwgZW5kLCBmYWxzZSkpIHsKLQkJcHJfd2FybigiYWxsb2NfY29udGlnX3JhbmdlIHRlc3RfcGFnZXNfaXNvbGF0ZWQoJWx4LCAlbHgpIGZhaWxlZFxuIiwKLQkJICAgICAgIG91dGVyX3N0YXJ0LCBlbmQpOworCQlwcl9pbmZvKCIlczogWyVseCwgJWx4KSBQRk5zIGJ1c3lcbiIsCisJCQlfX2Z1bmNfXywgb3V0ZXJfc3RhcnQsIGVuZCk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBkb25lOwogCX0KIAotCiAJLyogR3JhYiBpc29sYXRlZCBwYWdlcyBmcm9tIGZyZWVsaXN0cy4gKi8KIAlvdXRlcl9lbmQgPSBpc29sYXRlX2ZyZWVwYWdlc19yYW5nZSgmY2MsIG91dGVyX3N0YXJ0LCBlbmQpOwogCWlmICghb3V0ZXJfZW5kKSB7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uYwppbmRleCBkMTQ3M2IyLi5jODc3OGY3IDEwMDY0NAotLS0gYS9tbS9wYWdlX2lzb2xhdGlvbi5jCisrKyBiL21tL3BhZ2VfaXNvbGF0aW9uLmMKQEAgLTYwLDYgKzYwLDcgQEAKIAkJaW50IG1pZ3JhdGV0eXBlID0gZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKTsKIAogCQlzZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7CisJCXpvbmUtPm5yX2lzb2xhdGVfcGFnZWJsb2NrKys7CiAJCW5yX3BhZ2VzID0gbW92ZV9mcmVlcGFnZXNfYmxvY2soem9uZSwgcGFnZSwgTUlHUkFURV9JU09MQVRFKTsKIAogCQlfX21vZF96b25lX2ZyZWVwYWdlX3N0YXRlKHpvbmUsIC1ucl9wYWdlcywgbWlncmF0ZXR5cGUpOwpAQCAtNzUsMTYgKzc2LDU0IEBACiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgbnJfcGFnZXM7CisJc3RydWN0IHBhZ2UgKmlzb2xhdGVkX3BhZ2UgPSBOVUxMOworCXVuc2lnbmVkIGludCBvcmRlcjsKKwl1bnNpZ25lZCBsb25nIHBhZ2VfaWR4LCBidWRkeV9pZHg7CisJc3RydWN0IHBhZ2UgKmJ1ZGR5OwogCiAJem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCWlmIChnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpICE9IE1JR1JBVEVfSVNPTEFURSkKIAkJZ290byBvdXQ7Ci0JbnJfcGFnZXMgPSBtb3ZlX2ZyZWVwYWdlc19ibG9jayh6b25lLCBwYWdlLCBtaWdyYXRldHlwZSk7Ci0JX19tb2Rfem9uZV9mcmVlcGFnZV9zdGF0ZSh6b25lLCBucl9wYWdlcywgbWlncmF0ZXR5cGUpOworCisJLyoKKwkgKiBCZWNhdXNlIGZyZWVwYWdlIHdpdGggbW9yZSB0aGFuIHBhZ2VibG9ja19vcmRlciBvbiBpc29sYXRlZAorCSAqIHBhZ2VibG9jayBpcyByZXN0cmljdGVkIHRvIG1lcmdlIGR1ZSB0byBmcmVlcGFnZSBjb3VudGluZyBwcm9ibGVtLAorCSAqIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgZnJlZSBidWRkeSBwYWdlLgorCSAqIG1vdmVfZnJlZXBhZ2VzX2Jsb2NrKCkgZG9lc24ndCBjYXJlIG9mIG1lcmdlIHNvIHdlIG5lZWQgb3RoZXIKKwkgKiBhcHByb2FjaCBpbiBvcmRlciB0byBtZXJnZSB0aGVtLiBJc29sYXRpb24gYW5kIGZyZWUgd2lsbCBtYWtlCisJICogdGhlc2UgcGFnZXMgdG8gYmUgbWVyZ2VkLgorCSAqLworCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKKwkJb3JkZXIgPSBwYWdlX29yZGVyKHBhZ2UpOworCQlpZiAob3JkZXIgPj0gcGFnZWJsb2NrX29yZGVyKSB7CisJCQlwYWdlX2lkeCA9IHBhZ2VfdG9fcGZuKHBhZ2UpICYgKCgxIDw8IE1BWF9PUkRFUikgLSAxKTsKKwkJCWJ1ZGR5X2lkeCA9IF9fZmluZF9idWRkeV9pbmRleChwYWdlX2lkeCwgb3JkZXIpOworCQkJYnVkZHkgPSBwYWdlICsgKGJ1ZGR5X2lkeCAtIHBhZ2VfaWR4KTsKKworCQkJaWYgKCFpc19taWdyYXRlX2lzb2xhdGVfcGFnZShidWRkeSkpIHsKKwkJCQlfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTsKKwkJCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOworCQkJCWlzb2xhdGVkX3BhZ2UgPSBwYWdlOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSBpc29sYXRlIGZyZWVwYWdlIHdpdGggbW9yZSB0aGFuIHBhZ2VibG9ja19vcmRlciwgdGhlcmUKKwkgKiBzaG91bGQgYmUgbm8gZnJlZXBhZ2UgaW4gdGhlIHJhbmdlLCBzbyB3ZSBjb3VsZCBhdm9pZCBjb3N0bHkKKwkgKiBwYWdlYmxvY2sgc2Nhbm5pbmcgZm9yIGZyZWVwYWdlIG1vdmluZy4KKwkgKi8KKwlpZiAoIWlzb2xhdGVkX3BhZ2UpIHsKKwkJbnJfcGFnZXMgPSBtb3ZlX2ZyZWVwYWdlc19ibG9jayh6b25lLCBwYWdlLCBtaWdyYXRldHlwZSk7CisJCV9fbW9kX3pvbmVfZnJlZXBhZ2Vfc3RhdGUoem9uZSwgbnJfcGFnZXMsIG1pZ3JhdGV0eXBlKTsKKwl9CiAJc2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlLCBtaWdyYXRldHlwZSk7CisJem9uZS0+bnJfaXNvbGF0ZV9wYWdlYmxvY2stLTsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5sb2NrLCBmbGFncyk7CisJaWYgKGlzb2xhdGVkX3BhZ2UpCisJCV9fZnJlZV9wYWdlcyhpc29sYXRlZF9wYWdlLCBvcmRlcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDE5ODg2ZmIuLjNlNGM3MjEgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTI3NCw2ICsyNzQsNyBAQAogewogCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjOwogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7CisJaW50IGVycm9yOwogCiAJLyogRG9uJ3QgYm90aGVyIGlmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgbm8gYW5vbl92bWEgaGVyZS4gKi8KIAlpZiAoIXB2bWEtPmFub25fdm1hKQpAQCAtMjgzLDggKzI4NCw5IEBACiAJICogRmlyc3QsIGF0dGFjaCB0aGUgbmV3IFZNQSB0byB0aGUgcGFyZW50IFZNQSdzIGFub25fdm1hcywKIAkgKiBzbyBybWFwIGNhbiBmaW5kIG5vbi1DT1dlZCBwYWdlcyBpbiBjaGlsZCBwcm9jZXNzZXMuCiAJICovCi0JaWYgKGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSkpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCS8qIFRoZW4gYWRkIG91ciBvd24gYW5vbl92bWEuICovCiAJYW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpOwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IGViMmIyZWEuLmYzNGUwNTMgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTMwNzYsNyArMzA3Niw3IEBACiAJdm9pZCAqb2JqOwogCWludCB4OwogCi0JVk1fQlVHX09OKG5vZGVpZCA+IG51bV9vbmxpbmVfbm9kZXMoKSk7CisJVk1fQlVHX09OKG5vZGVpZCA8IDAgfHwgbm9kZWlkID49IE1BWF9OVU1OT0RFUyk7CiAJbiA9IGdldF9ub2RlKGNhY2hlcCwgbm9kZWlkKTsKIAlCVUdfT04oIW4pOwogCmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uYwppbmRleCA0MDY5NDQyLi5kY2RhYjgxIDEwMDY0NAotLS0gYS9tbS9zbGFiX2NvbW1vbi5jCisrKyBiL21tL3NsYWJfY29tbW9uLmMKQEAgLTI1OSw2ICsyNTksMTAgQEAKIAkJaWYgKHMtPnNpemUgLSBzaXplID49IHNpemVvZih2b2lkICopKQogCQkJY29udGludWU7CiAKKwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX1NMQUIpICYmIGFsaWduICYmCisJCQkoYWxpZ24gPiBzLT5hbGlnbiB8fCBzLT5hbGlnbiAlIGFsaWduKSkKKwkJCWNvbnRpbnVlOworCiAJCXJldHVybiBzOwogCX0KIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IDI2MWVhZjYuLmYxZTRkNjAgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKKysrIGIvbW0vdHJ1bmNhdGUuYwpAQCAtNzE1LDggKzcxNSw5IEBACiAgKiBuZWNlc3NhcnkpIHRvIEBuZXdzaXplLiBJdCB3aWxsIGJlIHR5cGljYWxseSBiZSBjYWxsZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSdzCiAgKiBzZXRhdHRyIGZ1bmN0aW9uIHdoZW4gQVRUUl9TSVpFIGlzIHBhc3NlZCBpbi4KICAqCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlub2RlX211dGV4IGhlbGQgYW5kIGJlZm9yZSBhbGwgZmlsZXN5c3RlbSBzcGVjaWZpYwotICogYmxvY2sgdHJ1bmNhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGEgbG9jayBzZXJpYWxpemluZyB0cnVuY2F0ZXMgYW5kIHdyaXRlcyAoZ2VuZXJhbGx5CisgKiBpX211dGV4IGJ1dCBlLmcuIHhmcyB1c2VzIGEgZGlmZmVyZW50IGxvY2spIGFuZCBiZWZvcmUgYWxsIGZpbGVzeXN0ZW0KKyAqIHNwZWNpZmljIGJsb2NrIHRydW5jYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkLgogICovCiB2b2lkIHRydW5jYXRlX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpCiB7CkBAIC03NTUsNyArNzU2LDYgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlwZ29mZl90IGluZGV4OwogCi0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZpbm9kZS0+aV9tdXRleCkpOwogCVdBUk5fT04odG8gPiBpbm9kZS0+aV9zaXplKTsKIAogCWlmIChmcm9tID49IHRvIHx8IGJzaXplID09IFBBR0VfQ0FDSEVfU0laRSkKZGlmZiAtLWdpdCBhL21tL3ZtcHJlc3N1cmUuYyBiL21tL3ZtcHJlc3N1cmUuYwppbmRleCBkNDA0MmU3Li5jNWFmZDU3IDEwMDY0NAotLS0gYS9tbS92bXByZXNzdXJlLmMKKysrIGIvbW0vdm1wcmVzc3VyZS5jCkBAIC0xNjUsNiArMTY1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHNjYW5uZWQ7CiAJdW5zaWduZWQgbG9uZyByZWNsYWltZWQ7CiAKKwlzcGluX2xvY2soJnZtcHItPnNyX2xvY2spOwogCS8qCiAJICogU2V2ZXJhbCBjb250ZXh0cyBtaWdodCBiZSBjYWxsaW5nIHZtcHJlc3N1cmUoKSwgc28gaXQgaXMKIAkgKiBwb3NzaWJsZSB0aGF0IHRoZSB3b3JrIHdhcyByZXNjaGVkdWxlZCBhZ2FpbiBiZWZvcmUgdGhlIG9sZApAQCAtMTczLDExICsxNzQsMTIgQEAKIAkgKiBoZXJlLiBObyBuZWVkIGZvciBhbnkgbG9ja3MgaGVyZSBzaW5jZSB3ZSBkb24ndCBjYXJlIGlmCiAJICogdm1wci0+cmVjbGFpbWVkIGlzIGluIHN5bmMuCiAJICovCi0JaWYgKCF2bXByLT5zY2FubmVkKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJnZtcHItPnNyX2xvY2spOwogCXNjYW5uZWQgPSB2bXByLT5zY2FubmVkOworCWlmICghc2Nhbm5lZCkgeworCQlzcGluX3VubG9jaygmdm1wci0+c3JfbG9jayk7CisJCXJldHVybjsKKwl9CisKIAlyZWNsYWltZWQgPSB2bXByLT5yZWNsYWltZWQ7CiAJdm1wci0+c2Nhbm5lZCA9IDA7CiAJdm1wci0+cmVjbGFpbWVkID0gMDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwppbmRleCBhZjczYmMzLi40MTBkZDVlIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCkBAIC0xMDEsMTEgKzEwMSwxMSBAQAogI2RlZmluZSBfX2dldF9ycG5fc3RvcF9iaXRzKGxpbmUpICgoKGxpbmUpID4+IDIpICYgMHgxKQogI2RlZmluZSBfX2dldF9ycG5fcGFyaXR5KGxpbmUpICAgICgoKGxpbmUpID4+IDMpICYgMHg3KQogCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmZjb21tX3dxKTsKKwogc3RhdGljIHZvaWQgcmZjb21tX3NjaGVkdWxlKHZvaWQpCiB7Ci0JaWYgKCFyZmNvbW1fdGhyZWFkKQotCQlyZXR1cm47Ci0Jd2FrZV91cF9wcm9jZXNzKHJmY29tbV90aHJlYWQpOworCXdha2VfdXBfYWxsKCZyZmNvbW1fd3EpOwogfQogCiAvKiAtLS0tIFJGQ09NTSBGQ1MgY29tcHV0YXRpb24gLS0tLSAqLwpAQCAtMjA4NiwyNCArMjA4NiwyMiBAQAogCiBzdGF0aWMgaW50IHJmY29tbV9ydW4odm9pZCAqdW51c2VkKQogeworCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CiAJQlRfREJHKCIiKTsKIAogCXNldF91c2VyX25pY2UoY3VycmVudCwgLTEwKTsKIAogCXJmY29tbV9hZGRfbGlzdGVuZXIoQkRBRERSX0FOWSk7CiAKLQl3aGlsZSAoMSkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQlicmVhazsKKwlhZGRfd2FpdF9xdWV1ZSgmcmZjb21tX3dxLCAmd2FpdCk7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAogCQkvKiBQcm9jZXNzIHN0dWZmICovCiAJCXJmY29tbV9wcm9jZXNzX3Nlc3Npb25zKCk7CiAKLQkJc2NoZWR1bGUoKTsKKwkJd2FpdF93b2tlbigmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAJfQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcmZjb21tX3dxLCAmd2FpdCk7CiAKIAlyZmNvbW1fa2lsbF9saXN0ZW5lcigpOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCA2NDhkNzljLi5jNDY1ODc2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTgxMywxMCArODEzLDkgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHBvcnQpIHsKLQkJX19za2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CiAJCXNrYi0+ZGV2ID0gcG9ydC0+ZGV2OwogCQlORl9IT09LKE5GUFJPVE9fQlJJREdFLCBORl9CUl9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kZXYsCi0JCQlkZXZfcXVldWVfeG1pdCk7CisJCQlicl9kZXZfcXVldWVfcHVzaF94bWl0KTsKIAl9IGVsc2UgewogCQlicl9tdWx0aWNhc3Rfc2VsZWN0X293bl9xdWVyaWVyKGJyLCBpcCwgc2tiKTsKIAkJbmV0aWZfcngoc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKaW5kZXggMmZmOTcwNi4uZTVlYzQ3MCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTI4MCw2ICsyODAsNyBAQAogCVtJRkxBX0JSUE9SVF9NT0RFXQk9IHsgLnR5cGUgPSBOTEFfVTggfSwKIAlbSUZMQV9CUlBPUlRfR1VBUkRdCT0geyAudHlwZSA9IE5MQV9VOCB9LAogCVtJRkxBX0JSUE9SVF9QUk9URUNUXQk9IHsgLnR5cGUgPSBOTEFfVTggfSwKKwlbSUZMQV9CUlBPUlRfRkFTVF9MRUFWRV09IHsgLnR5cGUgPSBOTEFfVTggfSwKIAlbSUZMQV9CUlBPUlRfTEVBUk5JTkddCT0geyAudHlwZSA9IE5MQV9VOCB9LAogCVtJRkxBX0JSUE9SVF9VTklDQVNUX0ZMT09EXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKIH07CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfcmVqZWN0X2JyaWRnZS5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9icmlkZ2UuYwppbmRleCA2NTRjOTAxLi40OGRhMmM1IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfcmVqZWN0X2JyaWRnZS5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL25mdF9yZWplY3RfYnJpZGdlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgogI2luY2x1ZGUgIi4uL2JyX3ByaXZhdGUuaCIKIApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvYXV0aF94LmMgYi9uZXQvY2VwaC9hdXRoX3guYwppbmRleCBkZTY2NjJiLi43ZTM4YjcyIDEwMDY0NAotLS0gYS9uZXQvY2VwaC9hdXRoX3guYworKysgYi9uZXQvY2VwaC9hdXRoX3guYwpAQCAtMTQ5LDYgKzE0OSw3IEBACiAJc3RydWN0IGNlcGhfY3J5cHRvX2tleSBvbGRfa2V5OwogCXZvaWQgKnRpY2tldF9idWYgPSBOVUxMOwogCXZvaWQgKnRwLCAqdHBlbmQ7CisJdm9pZCAqKnB0cDsKIAlzdHJ1Y3QgY2VwaF90aW1lc3BlYyBuZXdfdmFsaWRpdHk7CiAJc3RydWN0IGNlcGhfY3J5cHRvX2tleSBuZXdfc2Vzc2lvbl9rZXk7CiAJc3RydWN0IGNlcGhfYnVmZmVyICpuZXdfdGlja2V0X2Jsb2I7CkBAIC0yMDgsMjUgKzIwOSwxOSBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAkJdHAgPSB0aWNrZXRfYnVmOwotCQlkbGVuID0gY2VwaF9kZWNvZGVfMzIoJnRwKTsKKwkJcHRwID0gJnRwOworCQl0cGVuZCA9ICpwdHAgKyBkbGVuOwogCX0gZWxzZSB7CiAJCS8qIHVuZW5jcnlwdGVkICovCi0JCWNlcGhfZGVjb2RlXzMyX3NhZmUocCwgZW5kLCBkbGVuLCBiYWQpOwotCQl0aWNrZXRfYnVmID0ga21hbGxvYyhkbGVuLCBHRlBfTk9GUyk7Ci0JCWlmICghdGlja2V0X2J1ZikgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXRwID0gdGlja2V0X2J1ZjsKLQkJY2VwaF9kZWNvZGVfbmVlZChwLCBlbmQsIGRsZW4sIGJhZCk7Ci0JCWNlcGhfZGVjb2RlX2NvcHkocCwgdGlja2V0X2J1ZiwgZGxlbik7CisJCXB0cCA9IHA7CisJCXRwZW5kID0gZW5kOwogCX0KLQl0cGVuZCA9IHRwICsgZGxlbjsKKwljZXBoX2RlY29kZV8zMl9zYWZlKHB0cCwgdHBlbmQsIGRsZW4sIGJhZCk7CiAJZG91dCgiIHRpY2tldCBibG9iIGlzICVkIGJ5dGVzXG4iLCBkbGVuKTsKLQljZXBoX2RlY29kZV9uZWVkKCZ0cCwgdHBlbmQsIDEgKyBzaXplb2YodTY0KSwgYmFkKTsKLQlibG9iX3N0cnVjdF92ID0gY2VwaF9kZWNvZGVfOCgmdHApOwotCW5ld19zZWNyZXRfaWQgPSBjZXBoX2RlY29kZV82NCgmdHApOwotCXJldCA9IGNlcGhfZGVjb2RlX2J1ZmZlcigmbmV3X3RpY2tldF9ibG9iLCAmdHAsIHRwZW5kKTsKKwljZXBoX2RlY29kZV9uZWVkKHB0cCwgdHBlbmQsIDEgKyBzaXplb2YodTY0KSwgYmFkKTsKKwlibG9iX3N0cnVjdF92ID0gY2VwaF9kZWNvZGVfOChwdHApOworCW5ld19zZWNyZXRfaWQgPSBjZXBoX2RlY29kZV82NChwdHApOworCXJldCA9IGNlcGhfZGVjb2RlX2J1ZmZlcigmbmV3X3RpY2tldF9ibG9iLCBwdHAsIHRwZW5kKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvY3J5cHRvLmMgYi9uZXQvY2VwaC9jcnlwdG8uYwppbmRleCA2MmZjNWU3Li43OTBmZTg5IDEwMDY0NAotLS0gYS9uZXQvY2VwaC9jcnlwdG8uYworKysgYi9uZXQvY2VwaC9jcnlwdG8uYwpAQCAtOTAsMTEgKzkwLDgyIEBACiAKIHN0YXRpYyBjb25zdCB1OCAqYWVzX2l2ID0gKHU4ICopQ0VQSF9BRVNfSVY7CiAKKy8qCisgKiBTaG91bGQgYmUgdXNlZCBmb3IgYnVmZmVycyBhbGxvY2F0ZWQgd2l0aCBjZXBoX2t2bWFsbG9jKCkuCisgKiBDdXJyZW50bHkgdGhlc2UgYXJlIGVuY3J5cHQgb3V0LWJ1ZmZlciAoY2VwaF9idWZmZXIpIGFuZCBkZWNyeXB0CisgKiBpbi1idWZmZXIgKG1zZyBmcm9udCkuCisgKgorICogRGlzcG9zZSBvZiBAc2d0IHdpdGggdGVhcmRvd25fc2d0YWJsZSgpLgorICoKKyAqIEBwcmVhbGxvY19zZyBpcyB0byBhdm9pZCBtZW1vcnkgYWxsb2NhdGlvbiBpbnNpZGUgc2dfYWxsb2NfdGFibGUoKQorICogaW4gY2FzZXMgd2hlcmUgYSBzaW5nbGUgc2cgaXMgc3VmZmljaWVudC4gIE5vIGF0dGVtcHQgdG8gcmVkdWNlIHRoZQorICogbnVtYmVyIG9mIHNncyBieSBzcXVlZXppbmcgcGh5c2ljYWxseSBjb250aWd1b3VzIHBhZ2VzIHRvZ2V0aGVyIGlzCisgKiBtYWRlIHRob3VnaCwgZm9yIHNpbXBsaWNpdHkuCisgKi8KK3N0YXRpYyBpbnQgc2V0dXBfc2d0YWJsZShzdHJ1Y3Qgc2dfdGFibGUgKnNndCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpwcmVhbGxvY19zZywKKwkJCSBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBidWZfbGVuKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJY29uc3QgYm9vbCBpc192bWFsbG9jID0gaXNfdm1hbGxvY19hZGRyKGJ1Zik7CisJdW5zaWduZWQgaW50IG9mZiA9IG9mZnNldF9pbl9wYWdlKGJ1Zik7CisJdW5zaWduZWQgaW50IGNodW5rX2NudCA9IDE7CisJdW5zaWduZWQgaW50IGNodW5rX2xlbiA9IFBBR0VfQUxJR04ob2ZmICsgYnVmX2xlbik7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmIChidWZfbGVuID09IDApIHsKKwkJbWVtc2V0KHNndCwgMCwgc2l6ZW9mKCpzZ3QpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGlzX3ZtYWxsb2MpIHsKKwkJY2h1bmtfY250ID0gY2h1bmtfbGVuID4+IFBBR0VfU0hJRlQ7CisJCWNodW5rX2xlbiA9IFBBR0VfU0laRTsKKwl9CisKKwlpZiAoY2h1bmtfY250ID4gMSkgeworCQlyZXQgPSBzZ19hbGxvY190YWJsZShzZ3QsIGNodW5rX2NudCwgR0ZQX05PRlMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQlXQVJOX09OKGNodW5rX2NudCAhPSAxKTsKKwkJc2dfaW5pdF90YWJsZShwcmVhbGxvY19zZywgMSk7CisJCXNndC0+c2dsID0gcHJlYWxsb2Nfc2c7CisJCXNndC0+bmVudHMgPSBzZ3QtPm9yaWdfbmVudHMgPSAxOworCX0KKworCWZvcl9lYWNoX3NnKHNndC0+c2dsLCBzZywgc2d0LT5vcmlnX25lbnRzLCBpKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQl1bnNpZ25lZCBpbnQgbGVuID0gbWluKGNodW5rX2xlbiAtIG9mZiwgYnVmX2xlbik7CisKKwkJaWYgKGlzX3ZtYWxsb2MpCisJCQlwYWdlID0gdm1hbGxvY190b19wYWdlKGJ1Zik7CisJCWVsc2UKKwkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYnVmKTsKKworCQlzZ19zZXRfcGFnZShzZywgcGFnZSwgbGVuLCBvZmYpOworCisJCW9mZiA9IDA7CisJCWJ1ZiArPSBsZW47CisJCWJ1Zl9sZW4gLT0gbGVuOworCX0KKwlXQVJOX09OKGJ1Zl9sZW4gIT0gMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVhcmRvd25fc2d0YWJsZShzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKK3sKKwlpZiAoc2d0LT5vcmlnX25lbnRzID4gMSkKKwkJc2dfZnJlZV90YWJsZShzZ3QpOworfQorCiBzdGF0aWMgaW50IGNlcGhfYWVzX2VuY3J5cHQoY29uc3Qgdm9pZCAqa2V5LCBpbnQga2V5X2xlbiwKIAkJCSAgICB2b2lkICpkc3QsIHNpemVfdCAqZHN0X2xlbiwKIAkJCSAgICBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzcmNfbGVuKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19pblsyXSwgc2dfb3V0WzFdOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19pblsyXSwgcHJlYWxsb2Nfc2c7CisJc3RydWN0IHNnX3RhYmxlIHNnX291dDsKIAlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtID0gY2VwaF9jcnlwdG9fYWxsb2NfY2lwaGVyKCk7CiAJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7IC50Zm0gPSB0Zm0sIC5mbGFncyA9IDAgfTsKIAlpbnQgcmV0OwpAQCAtMTEwLDE2ICsxODEsMTggQEAKIAogCSpkc3RfbGVuID0gc3JjX2xlbiArIHplcm9fcGFkZGluZzsKIAotCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KCh2b2lkICopdGZtLCBrZXksIGtleV9sZW4pOwogCXNnX2luaXRfdGFibGUoc2dfaW4sIDIpOwogCXNnX3NldF9idWYoJnNnX2luWzBdLCBzcmMsIHNyY19sZW4pOwogCXNnX3NldF9idWYoJnNnX2luWzFdLCBwYWQsIHplcm9fcGFkZGluZyk7Ci0Jc2dfaW5pdF90YWJsZShzZ19vdXQsIDEpOwotCXNnX3NldF9idWYoc2dfb3V0LCBkc3QsICpkc3RfbGVuKTsKKwlyZXQgPSBzZXR1cF9zZ3RhYmxlKCZzZ19vdXQsICZwcmVhbGxvY19zZywgZHN0LCAqZHN0X2xlbik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdGZtOworCisJY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkoKHZvaWQgKil0Zm0sIGtleSwga2V5X2xlbik7CiAJaXYgPSBjcnlwdG9fYmxrY2lwaGVyX2NydCh0Zm0pLT5pdjsKIAlpdnNpemUgPSBjcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSh0Zm0pOwotCiAJbWVtY3B5KGl2LCBhZXNfaXYsIGl2c2l6ZSk7CisKIAkvKgogCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiZW5jIGtleTogIiwgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDEsCiAJCSAgICAgICBrZXksIGtleV9sZW4sIDEpOwpAQCAtMTI4LDE2ICsyMDEsMjIgQEAKIAlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgImVuYyBwYWQ6ICIsIERVTVBfUFJFRklYX05PTkUsIDE2LCAxLAogCQkJcGFkLCB6ZXJvX3BhZGRpbmcsIDEpOwogCSovCi0JcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KCZkZXNjLCBzZ19vdXQsIHNnX2luLAorCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdCgmZGVzYywgc2dfb3V0LnNnbCwgc2dfaW4sCiAJCQkJICAgICBzcmNfbGVuICsgemVyb19wYWRkaW5nKTsKLQljcnlwdG9fZnJlZV9ibGtjaXBoZXIodGZtKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgewogCQlwcl9lcnIoImNlcGhfYWVzX2NyeXB0IGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfc2c7CisJfQogCS8qCiAJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJlbmMgb3V0OiAiLCBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwKIAkJICAgICAgIGRzdCwgKmRzdF9sZW4sIDEpOwogCSovCi0JcmV0dXJuIDA7CisKK291dF9zZzoKKwl0ZWFyZG93bl9zZ3RhYmxlKCZzZ19vdXQpOworb3V0X3RmbToKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIodGZtKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGNlcGhfYWVzX2VuY3J5cHQyKGNvbnN0IHZvaWQgKmtleSwgaW50IGtleV9sZW4sIHZvaWQgKmRzdCwKQEAgLTE0NSw3ICsyMjQsOCBAQAogCQkJICAgICBjb25zdCB2b2lkICpzcmMxLCBzaXplX3Qgc3JjMV9sZW4sCiAJCQkgICAgIGNvbnN0IHZvaWQgKnNyYzIsIHNpemVfdCBzcmMyX2xlbikKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfaW5bM10sIHNnX291dFsxXTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfaW5bM10sIHByZWFsbG9jX3NnOworCXN0cnVjdCBzZ190YWJsZSBzZ19vdXQ7CiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSA9IGNlcGhfY3J5cHRvX2FsbG9jX2NpcGhlcigpOwogCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gdGZtLCAuZmxhZ3MgPSAwIH07CiAJaW50IHJldDsKQEAgLTE2MSwxNyArMjQxLDE5IEBACiAKIAkqZHN0X2xlbiA9IHNyYzFfbGVuICsgc3JjMl9sZW4gKyB6ZXJvX3BhZGRpbmc7CiAKLQljcnlwdG9fYmxrY2lwaGVyX3NldGtleSgodm9pZCAqKXRmbSwga2V5LCBrZXlfbGVuKTsKIAlzZ19pbml0X3RhYmxlKHNnX2luLCAzKTsKIAlzZ19zZXRfYnVmKCZzZ19pblswXSwgc3JjMSwgc3JjMV9sZW4pOwogCXNnX3NldF9idWYoJnNnX2luWzFdLCBzcmMyLCBzcmMyX2xlbik7CiAJc2dfc2V0X2J1Zigmc2dfaW5bMl0sIHBhZCwgemVyb19wYWRkaW5nKTsKLQlzZ19pbml0X3RhYmxlKHNnX291dCwgMSk7Ci0Jc2dfc2V0X2J1ZihzZ19vdXQsIGRzdCwgKmRzdF9sZW4pOworCXJldCA9IHNldHVwX3NndGFibGUoJnNnX291dCwgJnByZWFsbG9jX3NnLCBkc3QsICpkc3RfbGVuKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF90Zm07CisKKwljcnlwdG9fYmxrY2lwaGVyX3NldGtleSgodm9pZCAqKXRmbSwga2V5LCBrZXlfbGVuKTsKIAlpdiA9IGNyeXB0b19ibGtjaXBoZXJfY3J0KHRmbSktPml2OwogCWl2c2l6ZSA9IGNyeXB0b19ibGtjaXBoZXJfaXZzaXplKHRmbSk7Ci0KIAltZW1jcHkoaXYsIGFlc19pdiwgaXZzaXplKTsKKwogCS8qCiAJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJlbmMgIGtleTogIiwgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDEsCiAJCSAgICAgICBrZXksIGtleV9sZW4sIDEpOwpAQCAtMTgyLDIzICsyNjQsMzAgQEAKIAlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgImVuYyAgcGFkOiAiLCBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwKIAkJCXBhZCwgemVyb19wYWRkaW5nLCAxKTsKIAkqLwotCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdCgmZGVzYywgc2dfb3V0LCBzZ19pbiwKKwlyZXQgPSBjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsIHNnX291dC5zZ2wsIHNnX2luLAogCQkJCSAgICAgc3JjMV9sZW4gKyBzcmMyX2xlbiArIHplcm9fcGFkZGluZyk7Ci0JY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHRmbSk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJcHJfZXJyKCJjZXBoX2Flc19jcnlwdDIgZmFpbGVkICVkXG4iLCByZXQpOworCQlnb3RvIG91dF9zZzsKKwl9CiAJLyoKIAlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgImVuYyAgb3V0OiAiLCBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwKIAkJICAgICAgIGRzdCwgKmRzdF9sZW4sIDEpOwogCSovCi0JcmV0dXJuIDA7CisKK291dF9zZzoKKwl0ZWFyZG93bl9zZ3RhYmxlKCZzZ19vdXQpOworb3V0X3RmbToKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIodGZtKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGNlcGhfYWVzX2RlY3J5cHQoY29uc3Qgdm9pZCAqa2V5LCBpbnQga2V5X2xlbiwKIAkJCSAgICB2b2lkICpkc3QsIHNpemVfdCAqZHN0X2xlbiwKIAkJCSAgICBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzcmNfbGVuKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19pblsxXSwgc2dfb3V0WzJdOworCXN0cnVjdCBzZ190YWJsZSBzZ19pbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfb3V0WzJdLCBwcmVhbGxvY19zZzsKIAlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtID0gY2VwaF9jcnlwdG9fYWxsb2NfY2lwaGVyKCk7CiAJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7IC50Zm0gPSB0Zm0gfTsKIAljaGFyIHBhZFsxNl07CkBAIC0yMTAsMTYgKzI5OSwxNiBAQAogCWlmIChJU19FUlIodGZtKSkKIAkJcmV0dXJuIFBUUl9FUlIodGZtKTsKIAotCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KCh2b2lkICopdGZtLCBrZXksIGtleV9sZW4pOwotCXNnX2luaXRfdGFibGUoc2dfaW4sIDEpOwogCXNnX2luaXRfdGFibGUoc2dfb3V0LCAyKTsKLQlzZ19zZXRfYnVmKHNnX2luLCBzcmMsIHNyY19sZW4pOwogCXNnX3NldF9idWYoJnNnX291dFswXSwgZHN0LCAqZHN0X2xlbik7CiAJc2dfc2V0X2J1Zigmc2dfb3V0WzFdLCBwYWQsIHNpemVvZihwYWQpKTsKKwlyZXQgPSBzZXR1cF9zZ3RhYmxlKCZzZ19pbiwgJnByZWFsbG9jX3NnLCBzcmMsIHNyY19sZW4pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3RmbTsKIAorCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KCh2b2lkICopdGZtLCBrZXksIGtleV9sZW4pOwogCWl2ID0gY3J5cHRvX2Jsa2NpcGhlcl9jcnQodGZtKS0+aXY7CiAJaXZzaXplID0gY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUodGZtKTsKLQogCW1lbWNweShpdiwgYWVzX2l2LCBpdnNpemUpOwogCiAJLyoKQEAgLTIyOCwxMiArMzE3LDEwIEBACiAJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJkZWMgIGluOiAiLCBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwKIAkJICAgICAgIHNyYywgc3JjX2xlbiwgMSk7CiAJKi8KLQotCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgc2dfb3V0LCBzZ19pbiwgc3JjX2xlbik7Ci0JY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHRmbSk7CisJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0KCZkZXNjLCBzZ19vdXQsIHNnX2luLnNnbCwgc3JjX2xlbik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJfZXJyKCJjZXBoX2Flc19kZWNyeXB0IGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXRfc2c7CiAJfQogCiAJaWYgKHNyY19sZW4gPD0gKmRzdF9sZW4pCkBAIC0yNTEsNyArMzM4LDEyIEBACiAJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJkZWMgb3V0OiAiLCBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwKIAkJICAgICAgIGRzdCwgKmRzdF9sZW4sIDEpOwogCSovCi0JcmV0dXJuIDA7CisKK291dF9zZzoKKwl0ZWFyZG93bl9zZ3RhYmxlKCZzZ19pbik7CitvdXRfdGZtOgorCWNyeXB0b19mcmVlX2Jsa2NpcGhlcih0Zm0pOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY2VwaF9hZXNfZGVjcnlwdDIoY29uc3Qgdm9pZCAqa2V5LCBpbnQga2V5X2xlbiwKQEAgLTI1OSw3ICszNTEsOCBAQAogCQkJICAgICB2b2lkICpkc3QyLCBzaXplX3QgKmRzdDJfbGVuLAogCQkJICAgICBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzcmNfbGVuKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19pblsxXSwgc2dfb3V0WzNdOworCXN0cnVjdCBzZ190YWJsZSBzZ19pbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfb3V0WzNdLCBwcmVhbGxvY19zZzsKIAlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtID0gY2VwaF9jcnlwdG9fYWxsb2NfY2lwaGVyKCk7CiAJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7IC50Zm0gPSB0Zm0gfTsKIAljaGFyIHBhZFsxNl07CkBAIC0yNzEsMTcgKzM2NCwxNyBAQAogCWlmIChJU19FUlIodGZtKSkKIAkJcmV0dXJuIFBUUl9FUlIodGZtKTsKIAotCXNnX2luaXRfdGFibGUoc2dfaW4sIDEpOwotCXNnX3NldF9idWYoc2dfaW4sIHNyYywgc3JjX2xlbik7CiAJc2dfaW5pdF90YWJsZShzZ19vdXQsIDMpOwogCXNnX3NldF9idWYoJnNnX291dFswXSwgZHN0MSwgKmRzdDFfbGVuKTsKIAlzZ19zZXRfYnVmKCZzZ19vdXRbMV0sIGRzdDIsICpkc3QyX2xlbik7CiAJc2dfc2V0X2J1Zigmc2dfb3V0WzJdLCBwYWQsIHNpemVvZihwYWQpKTsKKwlyZXQgPSBzZXR1cF9zZ3RhYmxlKCZzZ19pbiwgJnByZWFsbG9jX3NnLCBzcmMsIHNyY19sZW4pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3RmbTsKIAogCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KCh2b2lkICopdGZtLCBrZXksIGtleV9sZW4pOwogCWl2ID0gY3J5cHRvX2Jsa2NpcGhlcl9jcnQodGZtKS0+aXY7CiAJaXZzaXplID0gY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUodGZtKTsKLQogCW1lbWNweShpdiwgYWVzX2l2LCBpdnNpemUpOwogCiAJLyoKQEAgLTI5MCwxMiArMzgzLDEwIEBACiAJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJkZWMgICBpbjogIiwgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDEsCiAJCSAgICAgICBzcmMsIHNyY19sZW4sIDEpOwogCSovCi0KLQlyZXQgPSBjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsIHNnX291dCwgc2dfaW4sIHNyY19sZW4pOwotCWNyeXB0b19mcmVlX2Jsa2NpcGhlcih0Zm0pOworCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgc2dfb3V0LCBzZ19pbi5zZ2wsIHNyY19sZW4pOwogCWlmIChyZXQgPCAwKSB7CiAJCXByX2VycigiY2VwaF9hZXNfZGVjcnlwdCBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0X3NnOwogCX0KIAogCWlmIChzcmNfbGVuIDw9ICpkc3QxX2xlbikKQEAgLTMyNSw3ICs0MTYsMTEgQEAKIAkJICAgICAgIGRzdDIsICpkc3QyX2xlbiwgMSk7CiAJKi8KIAotCXJldHVybiAwOworb3V0X3NnOgorCXRlYXJkb3duX3NndGFibGUoJnNnX2luKTsKK291dF90Zm06CisJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHRmbSk7CisJcmV0dXJuIHJldDsKIH0KIAogCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXIuYyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCmluZGV4IDU1OWM5ZjYuLjhkMTY1M2MgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jCisrKyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCkBAIC00ODQsNyArNDg0LDcgQEAKIAkJCSAgICAgICBJUFBST1RPX1RDUCwgJnNvY2spOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0Jc29jay0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9GUzsKKwlzb2NrLT5zay0+c2tfYWxsb2NhdGlvbiA9IEdGUF9OT0ZTIHwgX19HRlBfTUVNQUxMT0M7CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogCWxvY2tkZXBfc2V0X2NsYXNzKCZzb2NrLT5zay0+c2tfbG9jaywgJnNvY2tldF9jbGFzcyk7CkBAIC01MDksNiArNTA5LDkgQEAKIAogCQlyZXR1cm4gcmV0OwogCX0KKworCXNrX3NldF9tZW1hbGxvYyhzb2NrLT5zayk7CisKIAljb24tPnNvY2sgPSBzb2NrOwogCXJldHVybiAwOwogfQpAQCAtMjc2OSw4ICsyNzcyLDExIEBACiB7CiAJc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24sCiAJCQkJCQkgICB3b3JrLndvcmspOworCXVuc2lnbmVkIGxvbmcgcGZsYWdzID0gY3VycmVudC0+ZmxhZ3M7CiAJYm9vbCBmYXVsdDsKIAorCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOworCiAJbXV0ZXhfbG9jaygmY29uLT5tdXRleCk7CiAJd2hpbGUgKHRydWUpIHsKIAkJaW50IHJldDsKQEAgLTI4MjQsNiArMjgzMCw4IEBACiAJCWNvbl9mYXVsdF9maW5pc2goY29uKTsKIAogCWNvbi0+b3BzLT5wdXQoY29uKTsKKworCXRza19yZXN0b3JlX2ZsYWdzKGN1cnJlbnQsIHBmbGFncywgUEZfTUVNQUxMT0MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvb3NkX2NsaWVudC5jIGIvbmV0L2NlcGgvb3NkX2NsaWVudC5jCmluZGV4IGYzZmM1NGUuLjZmMTY0MjggMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL29zZF9jbGllbnQuYworKysgYi9uZXQvY2VwaC9vc2RfY2xpZW50LmMKQEAgLTEwMDcsOCArMTAwNyw4IEBACiBzdGF0aWMgdm9pZCBfX3JlbW92ZV9vc2Qoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywgc3RydWN0IGNlcGhfb3NkICpvc2QpCiB7CiAJZG91dCgiX19yZW1vdmVfb3NkICVwXG4iLCBvc2QpOwotCUJVR19PTighbGlzdF9lbXB0eSgmb3NkLT5vX3JlcXVlc3RzKSk7Ci0JQlVHX09OKCFsaXN0X2VtcHR5KCZvc2QtPm9fbGluZ2VyX3JlcXVlc3RzKSk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmb3NkLT5vX3JlcXVlc3RzKSk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmb3NkLT5vX2xpbmdlcl9yZXF1ZXN0cykpOwogCiAJcmJfZXJhc2UoJm9zZC0+b19ub2RlLCAmb3NkYy0+b3Nkcyk7CiAJbGlzdF9kZWxfaW5pdCgmb3NkLT5vX29zZF9scnUpOwpAQCAtMTI1NCw2ICsxMjU0LDggQEAKIAkJaWYgKGxpc3RfZW1wdHkoJnJlcS0+cl9vc2RfaXRlbSkpCiAJCQlyZXEtPnJfb3NkID0gTlVMTDsKIAl9CisKKwlsaXN0X2RlbF9pbml0KCZyZXEtPnJfcmVxX2xydV9pdGVtKTsgLyogY2FuIGJlIG9uIG5vdGFyZ2V0ICovCiAJY2VwaF9vc2RjX3B1dF9yZXF1ZXN0KHJlcSk7CiB9CiAKQEAgLTEzOTUsNiArMTM5Nyw3IEBACiAJaWYgKHJlcS0+cl9vc2QpIHsKIAkJX19jYW5jZWxfcmVxdWVzdChyZXEpOwogCQlsaXN0X2RlbF9pbml0KCZyZXEtPnJfb3NkX2l0ZW0pOworCQlsaXN0X2RlbF9pbml0KCZyZXEtPnJfbGluZ2VyX29zZF9pdGVtKTsKIAkJcmVxLT5yX29zZCA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDk0NWJiZDAuLjNhY2ZmMDkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC03MjAwLDExICs3MjAwLDEwIEBACiAJICovCiAJc3RydWN0IG5ldCAqbmV0OwogCWJvb2wgdW5yZWdpc3RlcmluZzsKLQlERUZJTkVfV0FJVCh3YWl0KTsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCisJYWRkX3dhaXRfcXVldWUoJm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxLCAmd2FpdCk7CiAJZm9yICg7OykgewotCQlwcmVwYXJlX3RvX3dhaXQoJm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxLCAmd2FpdCwKLQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCXVucmVnaXN0ZXJpbmcgPSBmYWxzZTsKIAkJcnRubF9sb2NrKCk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7CkBAIC03MjE2LDkgKzcyMTUsMTAgQEAKIAkJaWYgKCF1bnJlZ2lzdGVyaW5nKQogCQkJYnJlYWs7CiAJCV9fcnRubF91bmxvY2soKTsKLQkJc2NoZWR1bGUoKTsKKworCQl3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCX0KLQlmaW5pc2hfd2FpdCgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0KTsKIH0KIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCBhNjg4MjY4Li44OGU4ZGUzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMzY1LDExICszNjUsMTAgQEAKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAJYm9vbCB1bnJlZ2lzdGVyaW5nOwotCURFRklORV9XQUlUKHdhaXQpOworCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CiAKKwlhZGRfd2FpdF9xdWV1ZSgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0KTsKIAlmb3IgKDs7KSB7Ci0JCXByZXBhcmVfdG9fd2FpdCgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0LAotCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJdW5yZWdpc3RlcmluZyA9IGZhbHNlOwogCQlydG5sX2xvY2soKTsKIAkJZm9yX2VhY2hfbmV0KG5ldCkgewpAQCAtMzgxLDkgKzM4MCwxMCBAQAogCQlpZiAoIXVucmVnaXN0ZXJpbmcpCiAJCQlicmVhazsKIAkJX19ydG5sX3VubG9jaygpOwotCQlzY2hlZHVsZSgpOworCisJCXdhaXRfd29rZW4oJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAJfQotCWZpbmlzaF93YWl0KCZuZXRkZXZfdW5yZWdpc3RlcmluZ193cSwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZuZXRkZXZfdW5yZWdpc3RlcmluZ193cSwgJndhaXQpOwogfQogCiAvKioKQEAgLTE0OTgsNiArMTQ5OCw3IEBACiAJCQlnb3RvIGVycm91dDsKIAkJfQogCQlpZiAoIW5ldGxpbmtfbnNfY2FwYWJsZShza2IsIG5ldC0+dXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHsKKwkJCXB1dF9uZXQobmV0KTsKIAkJCWVyciA9IC1FUEVSTTsKIAkJCWdvdG8gZXJyb3V0OwogCQl9CkBAIC0yNjg1LDEzICsyNjg2LDIwIEBACiAJaW50IGlkeCA9IDA7CiAJdTMyIHBvcnRpZCA9IE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkOwogCXUzMiBzZXEgPSBjYi0+bmxoLT5ubG1zZ19zZXE7Ci0Jc3RydWN0IG5sYXR0ciAqZXh0ZmlsdDsKIAl1MzIgZmlsdGVyX21hc2sgPSAwOwogCi0JZXh0ZmlsdCA9IG5sbXNnX2ZpbmRfYXR0cihjYi0+bmxoLCBzaXplb2Yoc3RydWN0IGlmaW5mb21zZyksCi0JCQkJICBJRkxBX0VYVF9NQVNLKTsKLQlpZiAoZXh0ZmlsdCkKLQkJZmlsdGVyX21hc2sgPSBubGFfZ2V0X3UzMihleHRmaWx0KTsKKwlpZiAobmxtc2dfbGVuKGNiLT5ubGgpID4gc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpKSB7CisJCXN0cnVjdCBubGF0dHIgKmV4dGZpbHQ7CisKKwkJZXh0ZmlsdCA9IG5sbXNnX2ZpbmRfYXR0cihjYi0+bmxoLCBzaXplb2Yoc3RydWN0IGlmaW5mb21zZyksCisJCQkJCSAgSUZMQV9FWFRfTUFTSyk7CisJCWlmIChleHRmaWx0KSB7CisJCQlpZiAobmxhX2xlbihleHRmaWx0KSA8IHNpemVvZihmaWx0ZXJfbWFzaykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWZpbHRlcl9tYXNrID0gbmxhX2dldF91MzIoZXh0ZmlsdCk7CisJCX0KKwl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfbmV0ZGV2X3JjdShuZXQsIGRldikgewpAQCAtMjc5OCw2ICsyODA2LDkgQEAKIAlpZiAoYnJfc3BlYykgewogCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGJyX3NwZWMsIHJlbSkgewogCQkJaWYgKG5sYV90eXBlKGF0dHIpID09IElGTEFfQlJJREdFX0ZMQUdTKSB7CisJCQkJaWYgKG5sYV9sZW4oYXR0cikgPCBzaXplb2YoZmxhZ3MpKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQkJCWhhdmVfZmxhZ3MgPSB0cnVlOwogCQkJCWZsYWdzID0gbmxhX2dldF91MTYoYXR0cik7CiAJCQkJYnJlYWs7CkBAIC0yODY4LDYgKzI4NzksOSBAQAogCWlmIChicl9zcGVjKSB7CiAJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgYnJfc3BlYywgcmVtKSB7CiAJCQlpZiAobmxhX3R5cGUoYXR0cikgPT0gSUZMQV9CUklER0VfRkxBR1MpIHsKKwkJCQlpZiAobmxhX2xlbihhdHRyKSA8IHNpemVvZihmbGFncykpCisJCQkJCXJldHVybiAtRUlOVkFMOworCiAJCQkJaGF2ZV9mbGFncyA9IHRydWU7CiAJCQkJZmxhZ3MgPSBubGFfZ2V0X3UxNihhdHRyKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYzE2NjE1Yi4uMzJlMzFjMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTU1MiwyMCArNTUyLDEzIEBACiAJY2FzZSBTS0JfRkNMT05FX0NMT05FOgogCQlmY2xvbmVzID0gY29udGFpbmVyX29mKHNrYiwgc3RydWN0IHNrX2J1ZmZfZmNsb25lcywgc2tiMik7CiAKLQkJLyogV2FybmluZyA6IFdlIG11c3QgcGVyZm9ybSB0aGUgYXRvbWljX2RlY19hbmRfdGVzdCgpIGJlZm9yZQotCQkgKiBzZXR0aW5nIHNrYi0+ZmNsb25lIGJhY2sgdG8gU0tCX0ZDTE9ORV9GUkVFLCBvdGhlcndpc2UKLQkJICogc2tiX2Nsb25lKCkgY291bGQgc2V0IGNsb25lX3JlZiB0byAyIGJlZm9yZSBvdXIgZGVjcmVtZW50LgotCQkgKiBBbnl3YXksIGlmIHdlIGFyZSBnb2luZyB0byBmcmVlIHRoZSBzdHJ1Y3R1cmUsIG5vIG5lZWQgdG8KLQkJICogcmV3cml0ZSBza2ItPmZjbG9uZS4KKwkJLyogVGhlIGNsb25lIHBvcnRpb24gaXMgYXZhaWxhYmxlIGZvcgorCQkgKiBmYXN0LWNsb25pbmcgYWdhaW4uCiAJCSAqLwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZmNsb25lcy0+ZmNsb25lX3JlZikpIHsKKwkJc2tiLT5mY2xvbmUgPSBTS0JfRkNMT05FX0ZSRUU7CisKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmZjbG9uZXMtPmZjbG9uZV9yZWYpKQogCQkJa21lbV9jYWNoZV9mcmVlKHNrYnVmZl9mY2xvbmVfY2FjaGUsIGZjbG9uZXMpOwotCQl9IGVsc2UgewotCQkJLyogVGhlIGNsb25lIHBvcnRpb24gaXMgYXZhaWxhYmxlIGZvcgotCQkJICogZmFzdC1jbG9uaW5nIGFnYWluLgotCQkJICovCi0JCQlza2ItPmZjbG9uZSA9IFNLQl9GQ0xPTkVfRlJFRTsKLQkJfQogCQlicmVhazsKIAl9CiB9CkBAIC04ODcsMTEgKzg4MCw3IEBACiAJaWYgKHNrYi0+ZmNsb25lID09IFNLQl9GQ0xPTkVfT1JJRyAmJgogCSAgICBuLT5mY2xvbmUgPT0gU0tCX0ZDTE9ORV9GUkVFKSB7CiAJCW4tPmZjbG9uZSA9IFNLQl9GQ0xPTkVfQ0xPTkU7Ci0JCS8qIEFzIG91ciBmYXN0Y2xvbmUgd2FzIGZyZWUsIGNsb25lX3JlZiBtdXN0IGJlIDEgYXQgdGhpcyBwb2ludC4KLQkJICogV2UgY291bGQgdXNlIGF0b21pY19pbmMoKSBoZXJlLCBidXQgaXQgaXMgZmFzdGVyCi0JCSAqIHRvIHNldCB0aGUgZmluYWwgdmFsdWUuCi0JCSAqLwotCQlhdG9taWNfc2V0KCZmY2xvbmVzLT5mY2xvbmVfcmVmLCAyKTsKKwkJYXRvbWljX2luYygmZmNsb25lcy0+ZmNsb25lX3JlZik7CiAJfSBlbHNlIHsKIAkJaWYgKHNrYl9wZm1lbWFsbG9jKHNrYikpCiAJCQlnZnBfbWFzayB8PSBfX0dGUF9NRU1BTExPQzsKZGlmZiAtLWdpdCBhL25ldC9kY2IvZGNibmwuYyBiL25ldC9kY2IvZGNibmwuYwppbmRleCBjYTExZDI4Li45M2VhODAxIDEwMDY0NAotLS0gYS9uZXQvZGNiL2RjYm5sLmMKKysrIGIvbmV0L2RjYi9kY2JubC5jCkBAIC0xMDgwLDEzICsxMDgwLDEzIEBACiAJaWYgKCFhcHApCiAJCXJldHVybiAtRU1TR1NJWkU7CiAKLQlzcGluX2xvY2soJmRjYl9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmRjYl9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ciwgJmRjYl9hcHBfbGlzdCwgbGlzdCkgewogCQlpZiAoaXRyLT5pZmluZGV4ID09IG5ldGRldi0+aWZpbmRleCkgewogCQkJZXJyID0gbmxhX3B1dChza2IsIERDQl9BVFRSX0lFRUVfQVBQLCBzaXplb2YoaXRyLT5hcHApLAogCQkJCQkgJml0ci0+YXBwKTsKIAkJCWlmIChlcnIpIHsKLQkJCQlzcGluX3VubG9jaygmZGNiX2xvY2spOworCQkJCXNwaW5fdW5sb2NrX2JoKCZkY2JfbG9jayk7CiAJCQkJcmV0dXJuIC1FTVNHU0laRTsKIAkJCX0KIAkJfQpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAllbHNlCiAJCWRjYnggPSAtRU9QTk9UU1VQUDsKIAotCXNwaW5fdW5sb2NrKCZkY2JfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmRjYl9sb2NrKTsKIAlubGFfbmVzdF9lbmQoc2tiLCBhcHApOwogCiAJLyogZ2V0IHBlZXIgaW5mbyBpZiBhdmFpbGFibGUgKi8KQEAgLTEyMzQsNyArMTIzNCw3IEBACiAJfQogCiAJLyogbG9jYWwgYXBwICovCi0Jc3Bpbl9sb2NrKCZkY2JfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZkY2JfbG9jayk7CiAJYXBwID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBEQ0JfQVRUUl9DRUVfQVBQX1RBQkxFKTsKIAlpZiAoIWFwcCkKIAkJZ290byBkY2JfdW5sb2NrOwpAQCAtMTI3MSw3ICsxMjcxLDcgQEAKIAllbHNlCiAJCWRjYnggPSAtRU9QTk9UU1VQUDsKIAotCXNwaW5fdW5sb2NrKCZkY2JfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmRjYl9sb2NrKTsKIAogCS8qIGZlYXR1cmVzIGZsYWdzICovCiAJaWYgKG9wcy0+Z2V0ZmVhdGNmZykgewpAQCAtMTMyNiw3ICsxMzI2LDcgQEAKIAlyZXR1cm4gMDsKIAogZGNiX3VubG9jazoKLQlzcGluX3VubG9jaygmZGNiX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZkY2JfbG9jayk7CiBubGFfcHV0X2ZhaWx1cmU6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE3NjIsMTAgKzE3NjIsMTAgQEAKIAlzdHJ1Y3QgZGNiX2FwcF90eXBlICppdHI7CiAJdTggcHJpbyA9IDA7CiAKLQlzcGluX2xvY2soJmRjYl9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmRjYl9sb2NrKTsKIAlpZiAoKGl0ciA9IGRjYl9hcHBfbG9va3VwKGFwcCwgZGV2LT5pZmluZGV4LCAwKSkpCiAJCXByaW8gPSBpdHItPmFwcC5wcmlvcml0eTsKLQlzcGluX3VubG9jaygmZGNiX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZkY2JfbG9jayk7CiAKIAlyZXR1cm4gcHJpbzsKIH0KQEAgLTE3ODksNyArMTc4OSw3IEBACiAJaWYgKGRldi0+ZGNibmxfb3BzLT5nZXRkY2J4KQogCQlldmVudC5kY2J4ID0gZGV2LT5kY2JubF9vcHMtPmdldGRjYngoZGV2KTsKIAotCXNwaW5fbG9jaygmZGNiX2xvY2spOworCXNwaW5fbG9ja19iaCgmZGNiX2xvY2spOwogCS8qIFNlYXJjaCBmb3IgZXhpc3RpbmcgbWF0Y2ggYW5kIHJlcGxhY2UgKi8KIAlpZiAoKGl0ciA9IGRjYl9hcHBfbG9va3VwKG5ldywgZGV2LT5pZmluZGV4LCAwKSkpIHsKIAkJaWYgKG5ldy0+cHJpb3JpdHkpCkBAIC0xODA0LDcgKzE4MDQsNyBAQAogCWlmIChuZXctPnByaW9yaXR5KQogCQllcnIgPSBkY2JfYXBwX2FkZChuZXcsIGRldi0+aWZpbmRleCk7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmRjYl9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmZGNiX2xvY2spOwogCWlmICghZXJyKQogCQljYWxsX2RjYmV2ZW50X25vdGlmaWVycyhEQ0JfQVBQX0VWRU5ULCAmZXZlbnQpOwogCXJldHVybiBlcnI7CkBAIC0xODIzLDEwICsxODIzLDEwIEBACiAJc3RydWN0IGRjYl9hcHBfdHlwZSAqaXRyOwogCXU4IHByaW8gPSAwOwogCi0Jc3Bpbl9sb2NrKCZkY2JfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZkY2JfbG9jayk7CiAJaWYgKChpdHIgPSBkY2JfYXBwX2xvb2t1cChhcHAsIGRldi0+aWZpbmRleCwgMCkpKQogCQlwcmlvIHw9IDEgPDwgaXRyLT5hcHAucHJpb3JpdHk7Ci0Jc3Bpbl91bmxvY2soJmRjYl9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmZGNiX2xvY2spOwogCiAJcmV0dXJuIHByaW87CiB9CkBAIC0xODUwLDcgKzE4NTAsNyBAQAogCWlmIChkZXYtPmRjYm5sX29wcy0+Z2V0ZGNieCkKIAkJZXZlbnQuZGNieCA9IGRldi0+ZGNibmxfb3BzLT5nZXRkY2J4KGRldik7CiAKLQlzcGluX2xvY2soJmRjYl9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmRjYl9sb2NrKTsKIAkvKiBTZWFyY2ggZm9yIGV4aXN0aW5nIG1hdGNoIGFuZCBhYm9ydCBpZiBmb3VuZCAqLwogCWlmIChkY2JfYXBwX2xvb2t1cChuZXcsIGRldi0+aWZpbmRleCwgbmV3LT5wcmlvcml0eSkpIHsKIAkJZXJyID0gLUVFWElTVDsKQEAgLTE4NTksNyArMTg1OSw3IEBACiAKIAllcnIgPSBkY2JfYXBwX2FkZChuZXcsIGRldi0+aWZpbmRleCk7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmRjYl9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmZGNiX2xvY2spOwogCWlmICghZXJyKQogCQljYWxsX2RjYmV2ZW50X25vdGlmaWVycyhEQ0JfQVBQX0VWRU5ULCAmZXZlbnQpOwogCXJldHVybiBlcnI7CkBAIC0xODgyLDcgKzE4ODIsNyBAQAogCWlmIChkZXYtPmRjYm5sX29wcy0+Z2V0ZGNieCkKIAkJZXZlbnQuZGNieCA9IGRldi0+ZGNibmxfb3BzLT5nZXRkY2J4KGRldik7CiAKLQlzcGluX2xvY2soJmRjYl9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmRjYl9sb2NrKTsKIAkvKiBTZWFyY2ggZm9yIGV4aXN0aW5nIG1hdGNoIGFuZCByZW1vdmUgaXQuICovCiAJaWYgKChpdHIgPSBkY2JfYXBwX2xvb2t1cChkZWwsIGRldi0+aWZpbmRleCwgZGVsLT5wcmlvcml0eSkpKSB7CiAJCWxpc3RfZGVsKCZpdHItPmxpc3QpOwpAQCAtMTg5MCw3ICsxODkwLDcgQEAKIAkJZXJyID0gMDsKIAl9CiAKLQlzcGluX3VubG9jaygmZGNiX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZkY2JfbG9jayk7CiAJaWYgKCFlcnIpCiAJCWNhbGxfZGNiZXZlbnRfbm90aWZpZXJzKERDQl9BUFBfRVZFTlQsICZldmVudCk7CiAJcmV0dXJuIGVycjsKQEAgLTE5MDIsMTIgKzE5MDIsMTIgQEAKIAlzdHJ1Y3QgZGNiX2FwcF90eXBlICphcHA7CiAJc3RydWN0IGRjYl9hcHBfdHlwZSAqdG1wOwogCi0Jc3Bpbl9sb2NrKCZkY2JfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZkY2JfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFwcCwgdG1wLCAmZGNiX2FwcF9saXN0LCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZhcHAtPmxpc3QpOwogCQlrZnJlZShhcHApOwogCX0KLQlzcGluX3VubG9jaygmZGNiX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZkY2JfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGRjYm5sX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9kc2Evc2xhdmUuYyBiL25ldC9kc2Evc2xhdmUuYwppbmRleCA2ZDE4MTc0Li5hYjAzZTAwIDEwMDY0NAotLS0gYS9uZXQvZHNhL3NsYXZlLmMKKysrIGIvbmV0L2RzYS9zbGF2ZS5jCkBAIC00ODksMTEgKzQ4OSwxNCBAQAogCS8qIFdlIGNvdWxkIG5vdCBjb25uZWN0IHRvIGEgZGVzaWduYXRlZCBQSFksIHNvIHVzZSB0aGUgc3dpdGNoIGludGVybmFsCiAJICogTURJTyBidXMgaW5zdGVhZAogCSAqLwotCWlmICghcC0+cGh5KQorCWlmICghcC0+cGh5KSB7CiAJCXAtPnBoeSA9IGRzLT5zbGF2ZV9taWlfYnVzLT5waHlfbWFwW3AtPnBvcnRdOwotCWVsc2UKKwkJcGh5X2Nvbm5lY3RfZGlyZWN0KHNsYXZlX2RldiwgcC0+cGh5LCBkc2Ffc2xhdmVfYWRqdXN0X2xpbmssCisJCQkJICAgcC0+cGh5X2ludGVyZmFjZSk7CisJfSBlbHNlIHsKIAkJcHJfaW5mbygiYXR0YWNoZWQgUEhZIGF0IGFkZHJlc3MgJWQgWyVzXVxuIiwKIAkJCXAtPnBoeS0+YWRkciwgcC0+cGh5LT5kcnYtPm5hbWUpOworCX0KIH0KIAogaW50IGRzYV9zbGF2ZV9zdXNwZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggOGI3ZmU1Yi4uZTY3ZGE0ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtMTM4Niw2ICsxMzg2LDE3IEBACiAJcmV0dXJuIHBwOwogfQogCitpbnQgaW5ldF9yZWN2X2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgKmFkZHJfbGVuKQoreworCWlmIChzay0+c2tfZmFtaWx5ID09IEFGX0lORVQpCisJCXJldHVybiBpcF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbiwgYWRkcl9sZW4pOworI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCisJaWYgKHNrLT5za19mYW1pbHkgPT0gQUZfSU5FVDYpCisJCXJldHVybiBwaW5ndjZfb3BzLmlwdjZfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4sIGFkZHJfbGVuKTsKKyNlbmRpZgorCXJldHVybiAtRUlOVkFMOworfQorCiBzdGF0aWMgaW50IGluZXRfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaG9mZikKIHsKIAlfX2JlMTYgbmV3bGVuID0gaHRvbnMoc2tiLT5sZW4gLSBuaG9mZik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfcnVsZXMuYyBiL25ldC9pcHY0L2ZpYl9ydWxlcy5jCmluZGV4IGYyZTE1NzMuLjhmN2JkNTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9ydWxlcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9ydWxlcy5jCkBAIC02Miw2ICs2MiwxMCBAQAogCWVsc2UKIAkJcmVzLT50Y2xhc3NpZCA9IDA7CiAjZW5kaWYKKworCWlmIChlcnIgPT0gLUVTUkNIKQorCQllcnIgPSAtRU5FVFVOUkVBQ0g7CisKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19maWJfbG9va3VwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZvdS5jIGIvbmV0L2lwdjQvZm91LmMKaW5kZXggMzJlNzg5Mi4uNjA2YzUyMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZm91LmMKKysrIGIvbmV0L2lwdjQvZm91LmMKQEAgLTEzMyw2ICsxMzMsOCBAQAogCWludCBlcnIgPSAtRU5PU1lTOwogCWNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqKm9mZmxvYWRzOwogCisJdWRwX3R1bm5lbF9ncm9fY29tcGxldGUoc2tiLCBuaG9mZik7CisKIAlyY3VfcmVhZF9sb2NrKCk7CiAJb2ZmbG9hZHMgPSBOQVBJX0dST19DQihza2IpLT5pc19pcHY2ID8gaW5ldDZfb2ZmbG9hZHMgOiBpbmV0X29mZmxvYWRzOwogCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShvZmZsb2Fkc1twcm90b10pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZ2VuZXZlLmMgYi9uZXQvaXB2NC9nZW5ldmUuYwppbmRleCAwNjVjZDk0Li5kZWRiMjFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9nZW5ldmUuYworKysgYi9uZXQvaXB2NC9nZW5ldmUuYwpAQCAtMTQ0LDYgKzE0NCw4IEBACiAJZ252aCA9IChzdHJ1Y3QgZ2VuZXZlaGRyICopX19za2JfcHVzaChza2IsIHNpemVvZigqZ252aCkgKyBvcHRfbGVuKTsKIAlnZW5ldmVfYnVpbGRfaGVhZGVyKGdudmgsIHR1bl9mbGFncywgdm5pLCBvcHRfbGVuLCBvcHQpOwogCisJc2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIGh0b25zKEVUSF9QX1RFQikpOworCiAJcmV0dXJuIHVkcF90dW5uZWxfeG1pdF9za2IoZ3MtPnNvY2ssIHJ0LCBza2IsIHNyYywgZHN0LAogCQkJCSAgIHRvcywgdHRsLCBkZiwgc3JjX3BvcnQsIGRzdF9wb3J0LCB4bmV0KTsKIH0KQEAgLTM2NCw2ICszNjYsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGdlbmV2ZV9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWRlc3Ryb3lfd29ya3F1ZXVlKGdlbmV2ZV93cSk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZnZW5ldmVfbmV0X29wcyk7CiB9CiBtb2R1bGVfZXhpdChnZW5ldmVfY2xlYW51cF9tb2R1bGUpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggZmI3MGUzZS4uYmIxNWQwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCisrKyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtMzE4LDkgKzMxOCw3IEBACiAJcmV0dXJuIHNjb3VudDsKIH0KIAotI2RlZmluZSBpZ21wX3NrYl9zaXplKHNrYikgKCoodW5zaWduZWQgaW50ICopKChza2IpLT5jYikpCi0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWdtcHYzX25ld3BhY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNpemUpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlnbXB2M19uZXdwYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBtdHUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKQEAgLTMzMCw2ICszMjgsNyBAQAogCXN0cnVjdCBmbG93aTQgZmw0OwogCWludCBobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTsKIAlpbnQgdGxlbiA9IGRldi0+bmVlZGVkX3RhaWxyb29tOworCXVuc2lnbmVkIGludCBzaXplID0gbXR1OwogCiAJd2hpbGUgKDEpIHsKIAkJc2tiID0gYWxsb2Nfc2tiKHNpemUgKyBobGVuICsgdGxlbiwKQEAgLTM0MSw3ICszNDAsNiBAQAogCQkJcmV0dXJuIE5VTEw7CiAJfQogCXNrYi0+cHJpb3JpdHkgPSBUQ19QUklPX0NPTlRST0w7Ci0JaWdtcF9za2Jfc2l6ZShza2IpID0gc2l6ZTsKIAogCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgJmZsNCwgTlVMTCwgSUdNUFYzX0FMTF9NQ1IsIDAsCiAJCQkJICAgMCwgMCwKQEAgLTM1NCw2ICszNTIsOCBAQAogCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCXNrYi0+ZGV2ID0gZGV2OwogCisJc2tiLT5yZXNlcnZlZF90YWlscm9vbSA9IHNrYl9lbmRfb2Zmc2V0KHNrYikgLQorCQkJCSBtaW4obXR1LCBza2JfZW5kX29mZnNldChza2IpKTsKIAlza2JfcmVzZXJ2ZShza2IsIGhsZW4pOwogCiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CkBAIC00MjMsOCArNDIzLDcgQEAKIAlyZXR1cm4gc2tiOwogfQogCi0jZGVmaW5lIEFWQUlMQUJMRShza2IpICgoc2tiKSA/ICgoc2tiKS0+ZGV2ID8gaWdtcF9za2Jfc2l6ZShza2IpIC0gKHNrYiktPmxlbiA6IFwKLQlza2JfdGFpbHJvb20oc2tiKSkgOiAwKQorI2RlZmluZSBBVkFJTEFCTEUoc2tiKQkoKHNrYikgPyBza2JfYXZhaWxyb29tKHNrYikgOiAwKQogCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFkZF9ncmVjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF9tY19saXN0ICpwbWMsCiAJaW50IHR5cGUsIGludCBnZGVsZXRlZCwgaW50IHNkZWxldGVkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggYzM3M2E5YS4uOWRhZjIxNzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJZm9yIChjbXNnID0gQ01TR19GSVJTVEhEUihtc2cpOyBjbXNnOyBjbXNnID0gQ01TR19OWFRIRFIobXNnLCBjbXNnKSkgewogCQlpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSkKIAkJCXJldHVybiAtRUlOVkFMOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAkJaWYgKGFsbG93X2lwdjYgJiYKIAkJICAgIGNtc2ctPmNtc2dfbGV2ZWwgPT0gU09MX0lQVjYgJiYKIAkJICAgIGNtc2ctPmNtc2dfdHlwZSA9PSBJUFY2X1BLVElORk8pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3Z0aS5jIGIvbmV0L2lwdjQvaXBfdnRpLmMKaW5kZXggM2U4NjEwMS4uMWE3ZTk3OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfdnRpLmMKKysrIGIvbmV0L2lwdjQvaXBfdnRpLmMKQEAgLTUyOCw2ICs1MjgsNyBAQAogCS52YWxpZGF0ZQk9IHZ0aV90dW5uZWxfdmFsaWRhdGUsCiAJLm5ld2xpbmsJPSB2dGlfbmV3bGluaywKIAkuY2hhbmdlbGluawk9IHZ0aV9jaGFuZ2VsaW5rLAorCS5kZWxsaW5rICAgICAgICA9IGlwX3R1bm5lbF9kZWxsaW5rLAogCS5nZXRfc2l6ZQk9IHZ0aV9nZXRfc2l6ZSwKIAkuZmlsbF9pbmZvCT0gdnRpX2ZpbGxfaW5mbywKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X21hc3FfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9tYXNxX2lwdjQuYwppbmRleCBjMTAyM2M0Li42NjVkZTA2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X21hc3FfaXB2NC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZnRfbWFzcV9pcHY0LmMKQEAgLTI0LDYgKzI0LDcgQEAKIAlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlOwogCXVuc2lnbmVkIGludCB2ZXJkaWN0OwogCisJbWVtc2V0KCZyYW5nZSwgMCwgc2l6ZW9mKHJhbmdlKSk7CiAJcmFuZ2UuZmxhZ3MgPSBwcml2LT5mbGFnczsKIAogCXZlcmRpY3QgPSBuZl9uYXRfbWFzcXVlcmFkZV9pcHY0KHBrdC0+c2tiLCBwa3QtPm9wcy0+aG9va251bSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3BpbmcuYyBiL25ldC9pcHY0L3BpbmcuYwppbmRleCA1N2Y3Yzk4Li41ZDc0MGNjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9waW5nLmMKKysrIGIvbmV0L2lwdjQvcGluZy5jCkBAIC0yMTcsNiArMjE3LDggQEAKIAkJCQkJICAgICAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpKQogCQkJCWNvbnRpbnVlOwogI2VuZGlmCisJCX0gZWxzZSB7CisJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmIHNrLT5za19ib3VuZF9kZXZfaWYgIT0gZGlmKQpAQCAtODUzLDE2ICs4NTUsOCBAQAogCWlmIChmbGFncyAmIE1TR19PT0IpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGZsYWdzICYgTVNHX0VSUlFVRVVFKSB7Ci0JCWlmIChmYW1pbHkgPT0gQUZfSU5FVCkgewotCQkJcmV0dXJuIGlwX3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuLCBhZGRyX2xlbik7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKLQkJfSBlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCXJldHVybiBwaW5ndjZfb3BzLmlwdjZfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4sCi0JCQkJCQkJICBhZGRyX2xlbik7Ci0jZW5kaWYKLQkJfQotCX0KKwlpZiAoZmxhZ3MgJiBNU0dfRVJSUVVFVUUpCisJCXJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuLCBhZGRyX2xlbik7CiAKIAlza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIG5vYmxvY2ssICZlcnIpOwogCWlmICghc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAzOWVjMGMzLi4zOGMyYmNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMTU5OCw3ICsxNTk4LDcgQEAKIAl1MzIgdXJnX2hvbGUgPSAwOwogCiAJaWYgKHVubGlrZWx5KGZsYWdzICYgTVNHX0VSUlFVRVVFKSkKLQkJcmV0dXJuIGlwX3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuLCBhZGRyX2xlbik7CisJCXJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuLCBhZGRyX2xlbik7CiAKIAlpZiAoc2tfY2FuX2J1c3lfbG9vcChzaykgJiYgc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkgJiYKIAkgICAgKHNrLT5za19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCBhMTJiNDU1Li5kMTA3ZWUyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtMjMxNSw2ICsyMzE1LDM1IEBACiAKIC8qIFVuZG8gcHJvY2VkdXJlcy4gKi8KIAorLyogV2UgY2FuIGNsZWFyIHJldHJhbnNfc3RhbXAgd2hlbiB0aGVyZSBhcmUgbm8gcmV0cmFuc21pc3Npb25zIGluIHRoZQorICogd2luZG93LiBJdCB3b3VsZCBzZWVtIHRoYXQgaXQgaXMgdHJpdmlhbGx5IGF2YWlsYWJsZSBmb3IgdXMgaW4KKyAqIHRwLT5yZXRyYW5zX291dCwgaG93ZXZlciwgdGhhdCBraW5kIG9mIGFzc3VtcHRpb25zIGRvZXNuJ3QgY29uc2lkZXIKKyAqIHdoYXQgd2lsbCBoYXBwZW4gaWYgZXJyb3JzIG9jY3VyIHdoZW4gc2VuZGluZyByZXRyYW5zbWlzc2lvbiBmb3IgdGhlCisgKiBzZWNvbmQgdGltZS4gLi4uSXQgY291bGQgdGhlIHRoYXQgc3VjaCBzZWdtZW50IGhhcyBvbmx5CisgKiBUQ1BDQl9FVkVSX1JFVFJBTlMgc2V0IGF0IHRoZSBwcmVzZW50IHRpbWUuIEl0IHNlZW1zIHRoYXQgY2hlY2tpbmcKKyAqIHRoZSBoZWFkIHNrYiBpcyBlbm91Z2ggZXhjZXB0IGZvciBzb21lIHJlbmVnaW5nIGNvcm5lciBjYXNlcyB0aGF0CisgKiBhcmUgbm90IHdvcnRoIHRoZSBlZmZvcnQuCisgKgorICogTWFpbiByZWFzb24gZm9yIGFsbCB0aGlzIGNvbXBsZXhpdHkgaXMgdGhlIGZhY3QgdGhhdCBjb25uZWN0aW9uIGR5aW5nCisgKiB0aW1lIG5vdyBkZXBlbmRzIG9uIHRoZSB2YWxpZGl0eSBvZiB0aGUgcmV0cmFuc19zdGFtcCwgaW4gcGFydGljdWxhciwKKyAqIHRoYXQgc3VjY2Vzc2l2ZSByZXRyYW5zbWlzc2lvbnMgb2YgYSBzZWdtZW50IG11c3Qgbm90IGFkdmFuY2UKKyAqIHJldHJhbnNfc3RhbXAgdW5kZXIgYW55IGNvbmRpdGlvbnMuCisgKi8KK3N0YXRpYyBib29sIHRjcF9hbnlfcmV0cmFuc19kb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKHRwLT5yZXRyYW5zX291dCkKKwkJcmV0dXJuIHRydWU7CisKKwlza2IgPSB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7CisJaWYgKHVubGlrZWx5KHNrYiAmJiBUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX0VWRVJfUkVUUkFOUykpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiAjaWYgRkFTVFJFVFJBTlNfREVCVUcgPiAxCiBzdGF0aWMgdm9pZCBEQkdVTkRPKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbXNnKQogewpAQCAtMjQxMCw2ICsyNDM5LDggQEAKIAkJICogaXMgQUNLZWQuIEZvciBSZW5vIGl0IGlzIE1VU1QgdG8gcHJldmVudCBmYWxzZQogCQkgKiBmYXN0IHJldHJhbnNtaXRzIChSRkMyNTgyKS4gU0FDSyBUQ1AgaXMgc2FmZS4gKi8KIAkJdGNwX21vZGVyYXRlX2N3bmQodHApOworCQlpZiAoIXRjcF9hbnlfcmV0cmFuc19kb25lKHNrKSkKKwkJCXRwLT5yZXRyYW5zX3N0YW1wID0gMDsKIAkJcmV0dXJuIHRydWU7CiAJfQogCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9PcGVuKTsKQEAgLTI0MzAsMzUgKzI0NjEsNiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotLyogV2UgY2FuIGNsZWFyIHJldHJhbnNfc3RhbXAgd2hlbiB0aGVyZSBhcmUgbm8gcmV0cmFuc21pc3Npb25zIGluIHRoZQotICogd2luZG93LiBJdCB3b3VsZCBzZWVtIHRoYXQgaXQgaXMgdHJpdmlhbGx5IGF2YWlsYWJsZSBmb3IgdXMgaW4KLSAqIHRwLT5yZXRyYW5zX291dCwgaG93ZXZlciwgdGhhdCBraW5kIG9mIGFzc3VtcHRpb25zIGRvZXNuJ3QgY29uc2lkZXIKLSAqIHdoYXQgd2lsbCBoYXBwZW4gaWYgZXJyb3JzIG9jY3VyIHdoZW4gc2VuZGluZyByZXRyYW5zbWlzc2lvbiBmb3IgdGhlCi0gKiBzZWNvbmQgdGltZS4gLi4uSXQgY291bGQgdGhlIHRoYXQgc3VjaCBzZWdtZW50IGhhcyBvbmx5Ci0gKiBUQ1BDQl9FVkVSX1JFVFJBTlMgc2V0IGF0IHRoZSBwcmVzZW50IHRpbWUuIEl0IHNlZW1zIHRoYXQgY2hlY2tpbmcKLSAqIHRoZSBoZWFkIHNrYiBpcyBlbm91Z2ggZXhjZXB0IGZvciBzb21lIHJlbmVnaW5nIGNvcm5lciBjYXNlcyB0aGF0Ci0gKiBhcmUgbm90IHdvcnRoIHRoZSBlZmZvcnQuCi0gKgotICogTWFpbiByZWFzb24gZm9yIGFsbCB0aGlzIGNvbXBsZXhpdHkgaXMgdGhlIGZhY3QgdGhhdCBjb25uZWN0aW9uIGR5aW5nCi0gKiB0aW1lIG5vdyBkZXBlbmRzIG9uIHRoZSB2YWxpZGl0eSBvZiB0aGUgcmV0cmFuc19zdGFtcCwgaW4gcGFydGljdWxhciwKLSAqIHRoYXQgc3VjY2Vzc2l2ZSByZXRyYW5zbWlzc2lvbnMgb2YgYSBzZWdtZW50IG11c3Qgbm90IGFkdmFuY2UKLSAqIHJldHJhbnNfc3RhbXAgdW5kZXIgYW55IGNvbmRpdGlvbnMuCi0gKi8KLXN0YXRpYyBib29sIHRjcF9hbnlfcmV0cmFuc19kb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKHRwLT5yZXRyYW5zX291dCkKLQkJcmV0dXJuIHRydWU7Ci0KLQlza2IgPSB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7Ci0JaWYgKHVubGlrZWx5KHNrYiAmJiBUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX0VWRVJfUkVUUkFOUykpCi0JCXJldHVybiB0cnVlOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKiBVbmRvIGR1cmluZyBsb3NzIHJlY292ZXJ5IGFmdGVyIHBhcnRpYWwgQUNLIG9yIHVzaW5nIEYtUlRPLiAqLwogc3RhdGljIGJvb2wgdGNwX3RyeV91bmRvX2xvc3Moc3RydWN0IHNvY2sgKnNrLCBib29sIGZydG9fdW5kbykKIHsKQEAgLTUyMjksNyArNTIzMSw3IEBACiAJaWYgKGxlbiA8ICh0aC0+ZG9mZiA8PCAyKSB8fCB0Y3BfY2hlY2tzdW1fY29tcGxldGVfdXNlcihzaywgc2tiKSkKIAkJZ290byBjc3VtX2Vycm9yOwogCi0JaWYgKCF0aC0+YWNrICYmICF0aC0+cnN0KQorCWlmICghdGgtPmFjayAmJiAhdGgtPnJzdCAmJiAhdGgtPnN5bikKIAkJZ290byBkaXNjYXJkOwogCiAJLyoKQEAgLTU2NDgsNyArNTY1MCw3IEBACiAJCQlnb3RvIGRpc2NhcmQ7CiAJfQogCi0JaWYgKCF0aC0+YWNrICYmICF0aC0+cnN0KQorCWlmICghdGgtPmFjayAmJiAhdGgtPnJzdCAmJiAhdGgtPnN5bikKIAkJZ290byBkaXNjYXJkOwogCiAJaWYgKCF0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc2ssIHNrYiwgdGgsIDApKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggOWM3ZDc2Mi4uMTQ3YmUyMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC01OTgsNyArNTk4LDEwIEBACiAJaWYgKHRoLT5yc3QpCiAJCXJldHVybjsKIAotCWlmIChza2JfcnRhYmxlKHNrYiktPnJ0X3R5cGUgIT0gUlROX0xPQ0FMKQorCS8qIElmIHNrIG5vdCBOVUxMLCBpdCBtZWFucyB3ZSBkaWQgYSBzdWNjZXNzZnVsIGxvb2t1cCBhbmQgaW5jb21pbmcKKwkgKiByb3V0ZSBoYWQgdG8gYmUgY29ycmVjdC4gcHJlcXVldWUgbWlnaHQgaGF2ZSBkcm9wcGVkIG91ciBkc3QuCisJICovCisJaWYgKCFzayAmJiBza2JfcnRhYmxlKHNrYiktPnJ0X3R5cGUgIT0gUlROX0xPQ0FMKQogCQlyZXR1cm47CiAKIAkvKiBTd2FwIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZS4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9ncmUuYyBiL25ldC9pcHY2L2lwNl9ncmUuYwppbmRleCAxMmMzYzhlLi4wZTMyZDJlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZ3JlLmMKKysrIGIvbmV0L2lwdjYvaXA2X2dyZS5jCkBAIC01MDIsMTEgKzUwMiwxMSBAQAogCiAJCXNrYi0+cHJvdG9jb2wgPSBncmVfcHJvdG87CiAJCS8qIFdDQ1AgdmVyc2lvbiAxIGFuZCAyIHByb3RvY29sIGRlY29kaW5nLgotCQkgKiAtIENoYW5nZSBwcm90b2NvbCB0byBJUAorCQkgKiAtIENoYW5nZSBwcm90b2NvbCB0byBJUHY2CiAJCSAqIC0gV2hlbiBkZWFsaW5nIHdpdGggV0NDUHYyLCBTa2lwIGV4dHJhIDQgYnl0ZXMgaW4gR1JFIGhlYWRlcgogCQkgKi8KIAkJaWYgKGZsYWdzID09IDAgJiYgZ3JlX3Byb3RvID09IGh0b25zKEVUSF9QX1dDQ1ApKSB7Ci0JCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpOwogCQkJaWYgKCgqKGggKyBvZmZzZXQpICYgMHhGMCkgIT0gMHg0MCkKIAkJCQlvZmZzZXQgKz0gNDsKIAkJfQpAQCAtOTYxLDggKzk2MSw2IEBACiAJZWxzZQogCQlkZXYtPmZsYWdzICY9IH5JRkZfUE9JTlRPUE9JTlQ7CiAKLQlkZXYtPmlmbGluayA9IHAtPmxpbms7Ci0KIAkvKiBQcmVjYWxjdWxhdGUgR1JFIG9wdGlvbnMgbGVuZ3RoICovCiAJaWYgKHQtPnBhcm1zLm9fZmxhZ3MmKEdSRV9DU1VNfEdSRV9LRVl8R1JFX1NFUSkpIHsKIAkJaWYgKHQtPnBhcm1zLm9fZmxhZ3MmR1JFX0NTVU0pCkBAIC0xMjcyLDYgKzEyNzAsNyBAQAogCQl1NjRfc3RhdHNfaW5pdCgmaXA2Z3JlX3R1bm5lbF9zdGF0cy0+c3luY3ApOwogCX0KIAorCWRldi0+aWZsaW5rID0gdHVubmVsLT5wYXJtcy5saW5rOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDgxLDYgKzE0ODAsOCBAQAogCWlmICghZGV2LT50c3RhdHMpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZGV2LT5pZmxpbmsgPSB0dW5uZWwtPnBhcm1zLmxpbms7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X29mZmxvYWQuYyBiL25ldC9pcHY2L2lwNl9vZmZsb2FkLmMKaW5kZXggYTA3MTU2My4uMDFlMTJkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X29mZmxvYWQuYworKysgYi9uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jCkBAIC02OSw3ICs2OSw4IEBACiAJaW50IG5ob2ZmOwogCiAJaWYgKHVubGlrZWx5KHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJgotCQkgICAgIH4oU0tCX0dTT19VRFAgfAorCQkgICAgIH4oU0tCX0dTT19UQ1BWNCB8CisJCSAgICAgICBTS0JfR1NPX1VEUCB8CiAJCSAgICAgICBTS0JfR1NPX0RPREdZIHwKIAkJICAgICAgIFNLQl9HU09fVENQX0VDTiB8CiAJCSAgICAgICBTS0JfR1NPX0dSRSB8CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggOTQwOTg4Ny4uOWNiOTRjZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMjcyLDkgKzI3Miw2IEBACiAJaW50IGVycjsKIAogCXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCWVyciA9IGlwNl90bmxfZGV2X2luaXQoZGV2KTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE0NjIsNiArMTQ1OSw3IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZfdG5sX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CT0gaXA2X3RubF9kZXZfaW5pdCwKIAkubmRvX3VuaW5pdAk9IGlwNl90bmxfZGV2X3VuaW5pdCwKIAkubmRvX3N0YXJ0X3htaXQgPSBpcDZfdG5sX3htaXQsCiAJLm5kb19kb19pb2N0bAk9IGlwNl90bmxfaW9jdGwsCkBAIC0xNTQ2LDE2ICsxNTQ0LDEwIEBACiAJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwNl90bmxfbmV0X2lkKTsKLQlpbnQgZXJyID0gaXA2X3RubF9kZXZfaW5pdF9nZW4oZGV2KTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiAKIAl0LT5wYXJtcy5wcm90byA9IElQUFJPVE9fSVBWNjsKIAlkZXZfaG9sZChkZXYpOwogCi0JaXA2X3RubF9saW5rX2NvbmZpZyh0KTsKLQogCXJjdV9hc3NpZ25fcG9pbnRlcihpcDZuLT50bmxzX3djWzBdLCB0KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl91ZHBfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdWRwX3R1bm5lbC5jCmluZGV4IGIwNGVkNzIuLjhkYjZjOThmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdWRwX3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl91ZHBfdHVubmVsLmMKQEAgLTc5LDE1ICs3OSwxMyBAQAogCXVoLT5zb3VyY2UgPSBzcmNfcG9ydDsKIAogCXVoLT5sZW4gPSBodG9ucyhza2ItPmxlbik7Ci0JdWgtPmNoZWNrID0gMDsKIAogCW1lbXNldCgmKElQQ0Ioc2tiKS0+b3B0KSwgMCwgc2l6ZW9mKElQQ0Ioc2tiKS0+b3B0KSk7CiAJSVBDQihza2IpLT5mbGFncyAmPSB+KElQU0tCX1hGUk1fVFVOTkVMX1NJWkUgfCBJUFNLQl9YRlJNX1RSQU5TRk9STUVECiAJCQkgICAgfCBJUFNLQl9SRVJPVVRFRCk7CiAJc2tiX2RzdF9zZXQoc2tiLCBkc3QpOwogCi0JdWRwNl9zZXRfY3N1bSh1ZHBfZ2V0X25vX2NoZWNrNl90eChzayksIHNrYiwgJmluZXQ2X3NrKHNrKS0+c2FkZHIsCi0JCSAgICAgICZzay0+c2tfdjZfZGFkZHIsIHNrYi0+bGVuKTsKKwl1ZHA2X3NldF9jc3VtKHVkcF9nZXRfbm9fY2hlY2s2X3R4KHNrKSwgc2tiLCBzYWRkciwgZGFkZHIsIHNrYi0+bGVuKTsKIAogCV9fc2tiX3B1c2goc2tiLCBzaXplb2YoKmlwNmgpKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl92dGkuYyBiL25ldC9pcHY2L2lwNl92dGkuYwppbmRleCBkNDQwYmI1Li5iY2RhMTRkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdnRpLmMKKysrIGIvbmV0L2lwdjYvaXA2X3Z0aS5jCkBAIC0xNzIsMTAgKzE3Miw2IEBACiAJc3RydWN0IHZ0aTZfbmV0ICppcDZuID0gbmV0X2dlbmVyaWMobmV0LCB2dGk2X25ldF9pZCk7CiAJaW50IGVycjsKIAotCWVyciA9IHZ0aTZfZGV2X2luaXQoZGV2KTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC03ODMsNiArNzc5LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2dGk2X25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CT0gdnRpNl9kZXZfaW5pdCwKIAkubmRvX3VuaW5pdAk9IHZ0aTZfZGV2X3VuaW5pdCwKIAkubmRvX3N0YXJ0X3htaXQgPSB2dGk2X3RubF94bWl0LAogCS5uZG9fZG9faW9jdGwJPSB2dGk2X2lvY3RsLApAQCAtODUyLDE2ICs4NDksMTAgQEAKIAlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCB2dGk2X25ldCAqaXA2biA9IG5ldF9nZW5lcmljKG5ldCwgdnRpNl9uZXRfaWQpOwotCWludCBlcnIgPSB2dGk2X2Rldl9pbml0X2dlbihkZXYpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKIAogCXQtPnBhcm1zLnByb3RvID0gSVBQUk9UT19JUFY2OwogCWRldl9ob2xkKGRldik7CiAKLQl2dGk2X2xpbmtfY29uZmlnKHQpOwotCiAJcmN1X2Fzc2lnbl9wb2ludGVyKGlwNm4tPnRubHNfd2NbMF0sIHQpOwogCXJldHVybiAwOwogfQpAQCAtOTE0LDYgKzkwNSwxNSBAQAogCXJldHVybiB2dGk2X3RubF9jcmVhdGUyKGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIHZ0aTZfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3QgdnRpNl9uZXQgKmlwNm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHZ0aTZfbmV0X2lkKTsKKworCWlmIChkZXYgIT0gaXA2bi0+ZmJfdG5sX2RldikKKwkJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTsKK30KKwogc3RhdGljIGludCB2dGk2X2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCSAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKIHsKQEAgLTk4OSw2ICs5ODksNyBAQAogCS5zZXR1cAkJPSB2dGk2X2Rldl9zZXR1cCwKIAkudmFsaWRhdGUJPSB2dGk2X3ZhbGlkYXRlLAogCS5uZXdsaW5rCT0gdnRpNl9uZXdsaW5rLAorCS5kZWxsaW5rCT0gdnRpNl9kZWxsaW5rLAogCS5jaGFuZ2VsaW5rCT0gdnRpNl9jaGFuZ2VsaW5rLAogCS5nZXRfc2l6ZQk9IHZ0aTZfZ2V0X3NpemUsCiAJLmZpbGxfaW5mbwk9IHZ0aTZfZmlsbF9pbmZvLApAQCAtMTAyOSw2ICsxMDMwLDcgQEAKIAlpZiAoIWlwNm4tPmZiX3RubF9kZXYpCiAJCWdvdG8gZXJyX2FsbG9jX2RldjsKIAlkZXZfbmV0X3NldChpcDZuLT5mYl90bmxfZGV2LCBuZXQpOworCWlwNm4tPmZiX3RubF9kZXYtPnJ0bmxfbGlua19vcHMgPSAmdnRpNl9saW5rX29wczsKIAogCWVyciA9IHZ0aTZfZmJfdG5sX2Rldl9pbml0KGlwNm4tPmZiX3RubF9kZXYpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggMDE3MWYwOC4uMWEwMWQ3OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYworKysgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC0xNDM5LDYgKzE0MzksMTAgQEAKIAogdm9pZCBpcDZfbXJfY2xlYW51cCh2b2lkKQogeworCXJ0bmxfdW5yZWdpc3RlcihSVE5MX0ZBTUlMWV9JUDZNUiwgUlRNX0dFVFJPVVRFKTsKKyNpZmRlZiBDT05GSUdfSVBWNl9QSU1TTV9WMgorCWluZXQ2X2RlbF9wcm90b2NvbCgmcGltNl9wcm90b2NvbCwgSVBQUk9UT19QSU0pOworI2VuZGlmCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwNl9tcl9ub3RpZmllcik7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcDZtcl9uZXRfb3BzKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuYwppbmRleCA5NjQ4ZGUyLi5lZDJjNGU0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCisrKyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTE1NTAsNyArMTU1MCw3IEBACiAJaGRyLT5kYWRkciA9ICpkYWRkcjsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICptbGRfbmV3cGFjayhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBpbnQgc2l6ZSkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbWxkX25ld3BhY2soc3RydWN0IGluZXQ2X2RldiAqaWRldiwgdW5zaWduZWQgaW50IG10dSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWRldi0+ZGV2OwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKQEAgLTE1NjEsMTMgKzE1NjEsMTMgQEAKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyOwogCWludCBobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTsKIAlpbnQgdGxlbiA9IGRldi0+bmVlZGVkX3RhaWxyb29tOworCXVuc2lnbmVkIGludCBzaXplID0gbXR1ICsgaGxlbiArIHRsZW47CiAJaW50IGVycjsKIAl1OCByYVs4XSA9IHsgSVBQUk9UT19JQ01QVjYsIDAsCiAJCSAgICAgSVBWNl9UTFZfUk9VVEVSQUxFUlQsIDIsIDAsIDAsCiAJCSAgICAgSVBWNl9UTFZfUEFETiwgMCB9OwogCiAJLyogd2UgYXNzdW1lIHNpemUgPiBzaXplb2YocmEpIGhlcmUgKi8KLQlzaXplICs9IGhsZW4gKyB0bGVuOwogCS8qIGxpbWl0IG91ciBhbGxvY2F0aW9ucyB0byBvcmRlci0wIHBhZ2UgKi8KIAlzaXplID0gbWluX3QoaW50LCBzaXplLCBTS0JfTUFYX09SREVSKDAsIDApKTsKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBzaXplLCAxLCAmZXJyKTsKQEAgLTE1NzYsNiArMTU3Niw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJc2tiLT5wcmlvcml0eSA9IFRDX1BSSU9fQ09OVFJPTDsKKwlza2ItPnJlc2VydmVkX3RhaWxyb29tID0gc2tiX2VuZF9vZmZzZXQoc2tiKSAtCisJCQkJIG1pbihtdHUsIHNrYl9lbmRfb2Zmc2V0KHNrYikpOwogCXNrYl9yZXNlcnZlKHNrYiwgaGxlbik7CiAKIAlpZiAoX19pcHY2X2dldF9sbGFkZHIoaWRldiwgJmFkZHJfYnVmLCBJRkFfRl9URU5UQVRJVkUpKSB7CkBAIC0xNjkwLDggKzE2OTIsNyBAQAogCXJldHVybiBza2I7CiB9CiAKLSNkZWZpbmUgQVZBSUxBQkxFKHNrYikgKChza2IpID8gKChza2IpLT5kZXYgPyAoc2tiKS0+ZGV2LT5tdHUgLSAoc2tiKS0+bGVuIDogXAotCXNrYl90YWlscm9vbShza2IpKSA6IDApCisjZGVmaW5lIEFWQUlMQUJMRShza2IpCSgoc2tiKSA/IHNrYl9hdmFpbHJvb20oc2tiKSA6IDApCiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYWRkX2dyZWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlmbWNhZGRyNiAqcG1jLAogCWludCB0eXBlLCBpbnQgZ2RlbGV0ZWQsIGludCBzZGVsZXRlZCwgaW50IGNyc2VuZCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZnRfbWFzcV9pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X21hc3FfaXB2Ni5jCmluZGV4IDhhN2FjNjguLjUyOWMxMTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZnRfbWFzcV9pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9tYXNxX2lwdjYuYwpAQCAtMjUsNiArMjUsNyBAQAogCXN0cnVjdCBuZl9uYXRfcmFuZ2UgcmFuZ2U7CiAJdW5zaWduZWQgaW50IHZlcmRpY3Q7CiAKKwltZW1zZXQoJnJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKIAlyYW5nZS5mbGFncyA9IHByaXYtPmZsYWdzOwogCiAJdmVyZGljdCA9IG5mX25hdF9tYXNxdWVyYWRlX2lwdjYocGt0LT5za2IsICZyYW5nZSwgcGt0LT5vdXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCA1OGU1YjQ3Li5hMjQ1NTdhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTE5NSwxMCArMTk1LDggQEAKIAlzdHJ1Y3Qgc2l0X25ldCAqc2l0biA9IG5ldF9nZW5lcmljKG5ldCwgc2l0X25ldF9pZCk7CiAJaW50IGVycjsKIAotCWVyciA9IGlwaXA2X3R1bm5lbF9pbml0KGRldik7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0OwotCWlwaXA2X3R1bm5lbF9jbG9uZV82cmQoZGV2LCBzaXRuKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgJnQtPnBhcm1zLmlwaC5zYWRkciwgNCk7CisJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmdC0+cGFybXMuaXBoLmRhZGRyLCA0KTsKIAogCWlmICgoX19mb3JjZSB1MTYpdC0+cGFybXMuaV9mbGFncyAmIFNJVF9JU0FUQVApCiAJCWRldi0+cHJpdl9mbGFncyB8PSBJRkZfSVNBVEFQOwpAQCAtMjA3LDcgKzIwNSw4IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCi0Jc3RyY3B5KHQtPnBhcm1zLm5hbWUsIGRldi0+bmFtZSk7CisJaXBpcDZfdHVubmVsX2Nsb25lXzZyZChkZXYsIHNpdG4pOworCiAJZGV2LT5ydG5sX2xpbmtfb3BzID0gJnNpdF9saW5rX29wczsKIAogCWRldl9ob2xkKGRldik7CkBAIC0xMzMwLDYgKzEzMjksNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXA2X25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CT0gaXBpcDZfdHVubmVsX2luaXQsCiAJLm5kb191bmluaXQJPSBpcGlwNl90dW5uZWxfdW5pbml0LAogCS5uZG9fc3RhcnRfeG1pdAk9IHNpdF90dW5uZWxfeG1pdCwKIAkubmRvX2RvX2lvY3RsCT0gaXBpcDZfdHVubmVsX2lvY3RsLApAQCAtMTM3OCw5ICsxMzc4LDcgQEAKIAogCXR1bm5lbC0+ZGV2ID0gZGV2OwogCXR1bm5lbC0+bmV0ID0gZGV2X25ldChkZXYpOwotCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZ0dW5uZWwtPnBhcm1zLmlwaC5zYWRkciwgNCk7Ci0JbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmdHVubmVsLT5wYXJtcy5pcGguZGFkZHIsIDQpOworCXN0cmNweSh0dW5uZWwtPnBhcm1zLm5hbWUsIGRldi0+bmFtZSk7CiAKIAlpcGlwNl90dW5uZWxfYmluZF9kZXYoZGV2KTsKIAlkZXYtPnRzdGF0cyA9IG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzKTsKQEAgLTE0MDUsNyArMTQwMyw2IEBACiAKIAl0dW5uZWwtPmRldiA9IGRldjsKIAl0dW5uZWwtPm5ldCA9IGRldl9uZXQoZGV2KTsKLQlzdHJjcHkodHVubmVsLT5wYXJtcy5uYW1lLCBkZXYtPm5hbWUpOwogCiAJaXBoLT52ZXJzaW9uCQk9IDQ7CiAJaXBoLT5wcm90b2NvbAkJPSBJUFBST1RPX0lQVjY7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCBhY2UyOWI2Li5kYzQ5NWFlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTkwMyw3ICs5MDMsMTAgQEAKIAlpZiAodGgtPnJzdCkKIAkJcmV0dXJuOwogCi0JaWYgKCFpcHY2X3VuaWNhc3RfZGVzdGluYXRpb24oc2tiKSkKKwkvKiBJZiBzayBub3QgTlVMTCwgaXQgbWVhbnMgd2UgZGlkIGEgc3VjY2Vzc2Z1bCBsb29rdXAgYW5kIGluY29taW5nCisJICogcm91dGUgaGFkIHRvIGJlIGNvcnJlY3QuIHByZXF1ZXVlIG1pZ2h0IGhhdmUgZHJvcHBlZCBvdXIgZHN0LgorCSAqLworCWlmICghc2sgJiYgIWlwdjZfdW5pY2FzdF9kZXN0aW5hdGlvbihza2IpKQogCQlyZXR1cm47CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwpkaWZmIC0tZ2l0IGEvbmV0L2lweC9hZl9pcHguYyBiL25ldC9pcHgvYWZfaXB4LmMKaW5kZXggOTE3MjliOC4uMWIwOTVjYSAxMDA2NDQKLS0tIGEvbmV0L2lweC9hZl9pcHguYworKysgYi9uZXQvaXB4L2FmX2lweC5jCkBAIC0xNzY0LDYgKzE3NjQsNyBAQAogCXN0cnVjdCBpcHhoZHIgKmlweCA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgY29waWVkLCByYzsKKwlib29sIGxvY2tlZCA9IHRydWU7CiAKIAlsb2NrX3NvY2soc2spOwogCS8qIHB1dCB0aGUgYXV0b2JpbmRpbmcgaW4gKi8KQEAgLTE3OTAsNiArMTc5MSw4IEBACiAJaWYgKHNvY2tfZmxhZyhzaywgU09DS19aQVBQRUQpKQogCQlnb3RvIG91dDsKIAorCXJlbGVhc2Vfc29jayhzayk7CisJbG9ja2VkID0gZmFsc2U7CiAJc2tiID0gc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzICYgfk1TR19ET05UV0FJVCwKIAkJCQlmbGFncyAmIE1TR19ET05UV0FJVCwgJnJjKTsKIAlpZiAoIXNrYikgewpAQCAtMTgyNiw3ICsxODI5LDggQEAKIG91dF9mcmVlOgogCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOwogb3V0OgotCXJlbGVhc2Vfc29jayhzayk7CisJaWYgKGxvY2tlZCkKKwkJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMgYi9uZXQvbWFjODAyMTEvYWVzX2NjbS5jCmluZGV4IGVjMjQzNzguLjA5ZDljYWEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMKKysrIGIvbmV0L21hYzgwMjExL2Flc19jY20uYwpAQCAtNTMsNiArNTMsOSBAQAogCQlfX2FsaWduZWQoX19hbGlnbm9mX18oc3RydWN0IGFlYWRfcmVxdWVzdCkpOwogCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmFlYWRfcmVxID0gKHZvaWQgKikgYWVhZF9yZXFfZGF0YTsKIAorCWlmIChkYXRhX2xlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1lbXNldChhZWFkX3JlcSwgMCwgc2l6ZW9mKGFlYWRfcmVxX2RhdGEpKTsKIAogCXNnX2luaXRfb25lKCZwdCwgZGF0YSwgZGF0YV9sZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKaW5kZXggNTZiNTM1Ny4uNTA5YmMxNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lic3MuYworKysgYi9uZXQvbWFjODAyMTEvaWJzcy5jCkBAIC04MDUsNyArODA1LDcgQEAKIAogCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CiAJbWVtc2V0KCZjc2FfaWUsIDAsIHNpemVvZihjc2FfaWUpKTsKLQllcnIgPSBpZWVlODAyMTFfcGFyc2VfY2hfc3dpdGNoX2llKHNkYXRhLCBlbGVtcywgYmVhY29uLAorCWVyciA9IGllZWU4MDIxMV9wYXJzZV9jaF9zd2l0Y2hfaWUoc2RhdGEsIGVsZW1zLAogCQkJCQkgICBpZmlic3MtPmNoYW5kZWYuY2hhbi0+YmFuZCwKIAkJCQkJICAgc3RhX2ZsYWdzLCBpZmlic3MtPmJzc2lkLCAmY3NhX2llKTsKIAkvKiBjYW4ndCBzd2l0Y2ggdG8gZGVzdGluYXRpb24gY2hhbm5lbCwgZmFpbCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCBjMmFhZWM0Li44YzY4ZGEzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMTY0Miw3ICsxNjQyLDYgQEAKICAqIGllZWU4MDIxMV9wYXJzZV9jaF9zd2l0Y2hfaWUgLSBwYXJzZXMgY2hhbm5lbCBzd2l0Y2ggSUVzCiAgKiBAc2RhdGE6IHRoZSBzZGF0YSBvZiB0aGUgaW50ZXJmYWNlIHdoaWNoIGhhcyByZWNlaXZlZCB0aGUgZnJhbWUKICAqIEBlbGVtczogcGFyc2VkIDgwMi4xMSBlbGVtZW50cyByZWNlaXZlZCB3aXRoIHRoZSBmcmFtZQotICogQGJlYWNvbjogaW5kaWNhdGVzIGlmIHRoZSBmcmFtZSB3YXMgYSBiZWFjb24gb3IgcHJvYmUgcmVzcG9uc2UKICAqIEBjdXJyZW50X2JhbmQ6IGluZGljYXRlcyB0aGUgY3VycmVudCBiYW5kCiAgKiBAc3RhX2ZsYWdzOiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBvd24gY2FwYWJpbGl0aWVzIGFuZCByZXN0cmljdGlvbnMKICAqCXRvIGRlY2lkZSB3aGljaCBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnRzIGNhbiBiZSBhY2NlcHRlZC4gT25seSB0aGUKQEAgLTE2NTYsNyArMTY1NSw3IEBACiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IgYW5kID4wIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gcGFyc2UuCiAgKi8KIGludCBpZWVlODAyMTFfcGFyc2VfY2hfc3dpdGNoX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsIGJvb2wgYmVhY29uLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCiAJCQkJIGVudW0gaWVlZTgwMjExX2JhbmQgY3VycmVudF9iYW5kLAogCQkJCSB1MzIgc3RhX2ZsYWdzLCB1OCAqYnNzaWQsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfY3NhX2llICpjc2FfaWUpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCBhZjIzNzIyLi42NTNmNWViIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtNzY2LDEwICs3NjYsMTIgQEAKIAlpbnQgaSwgZmx1c2hlZDsKIAlzdHJ1Y3QgcHNfZGF0YSAqcHM7CiAJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWY7CisJYm9vbCBjYW5jZWxfc2NhbjsKIAogCWNsZWFyX2JpdChTREFUQV9TVEFURV9SVU5OSU5HLCAmc2RhdGEtPnN0YXRlKTsKIAotCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIobG9jYWwtPnNjYW5fc2RhdGEpID09IHNkYXRhKQorCWNhbmNlbF9zY2FuID0gcmN1X2FjY2Vzc19wb2ludGVyKGxvY2FsLT5zY2FuX3NkYXRhKSA9PSBzZGF0YTsKKwlpZiAoY2FuY2VsX3NjYW4pCiAJCWllZWU4MDIxMV9zY2FuX2NhbmNlbChsb2NhbCk7CiAKIAkvKgpAQCAtODk4LDYgKzkwMCw4IEBACiAJCWxpc3RfZGVsKCZzZGF0YS0+dS52bGFuLmxpc3QpOwogCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwogCQlSQ1VfSU5JVF9QT0lOVEVSKHNkYXRhLT52aWYuY2hhbmN0eF9jb25mLCBOVUxMKTsKKwkJLyogc2VlIGNvbW1lbnQgaW4gdGhlIGRlZmF1bHQgY2FzZSBiZWxvdyAqLworCQlpZWVlODAyMTFfZnJlZV9rZXlzKHNkYXRhLCB0cnVlKTsKIAkJLyogbm8gbmVlZCB0byB0ZWxsIGRyaXZlciAqLwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CkBAIC05MjMsMTcgKzkyNywxNiBAQAogCQkvKgogCQkgKiBXaGVuIHdlIGdldCBoZXJlLCB0aGUgaW50ZXJmYWNlIGlzIG1hcmtlZCBkb3duLgogCQkgKiBGcmVlIHRoZSByZW1haW5pbmcga2V5cywgaWYgdGhlcmUgYXJlIGFueQotCQkgKiAoc2hvdWxkbid0IGJlLCBleGNlcHQgbWF5YmUgaW4gV0RTIG1vZGU/KQorCQkgKiAod2hpY2ggY2FuIGhhcHBlbiBpbiBBUCBtb2RlIGlmIHVzZXJzcGFjZSBzZXRzCisJCSAqIGtleXMgYmVmb3JlIHRoZSBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nLCBhbmQgbWF5YmUKKwkJICogYWxzbyBpbiBXRFMgbW9kZSkKIAkJICoKIAkJICogRm9yY2UgdGhlIGtleSBmcmVlaW5nIHRvIGFsd2F5cyBzeW5jaHJvbml6ZV9uZXQoKQogCQkgKiB0byB3YWl0IGZvciB0aGUgUlggcGF0aCBpbiBjYXNlIGl0IGlzIHVzaW5nIHRoaXMKLQkJICogaW50ZXJmYWNlIGVucXVldWluZyBmcmFtZXMgKiBhdCB0aGlzIHZlcnkgdGltZSBvbgorCQkgKiBpbnRlcmZhY2UgZW5xdWV1aW5nIGZyYW1lcyBhdCB0aGlzIHZlcnkgdGltZSBvbgogCQkgKiBhbm90aGVyIENQVS4KIAkJICovCiAJCWllZWU4MDIxMV9mcmVlX2tleXMoc2RhdGEsIHRydWUpOwotCi0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCXNrYl9xdWV1ZV9wdXJnZSgmc2RhdGEtPnNrYl9xdWV1ZSk7CiAJfQogCkBAIC05OTEsNiArOTk0LDkgQEAKIAogCWllZWU4MDIxMV9yZWNhbGNfcHMobG9jYWwsIC0xKTsKIAorCWlmIChjYW5jZWxfc2NhbikKKwkJZmx1c2hfZGVsYXllZF93b3JrKCZsb2NhbC0+c2Nhbl93b3JrKTsKKwogCWlmIChsb2NhbC0+b3Blbl9jb3VudCA9PSAwKSB7CiAJCWllZWU4MDIxMV9zdG9wX2RldmljZShsb2NhbCk7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmMgYi9uZXQvbWFjODAyMTEvbWVzaC5jCmluZGV4IGU5Zjk5YzEuLjBjOGIyYTcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2guYwpAQCAtODc0LDcgKzg3NCw3IEBACiAKIAltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOwogCW1lbXNldCgmY3NhX2llLCAwLCBzaXplb2YoY3NhX2llKSk7Ci0JZXJyID0gaWVlZTgwMjExX3BhcnNlX2NoX3N3aXRjaF9pZShzZGF0YSwgZWxlbXMsIGJlYWNvbiwgYmFuZCwKKwllcnIgPSBpZWVlODAyMTFfcGFyc2VfY2hfc3dpdGNoX2llKHNkYXRhLCBlbGVtcywgYmFuZCwKIAkJCQkJICAgc3RhX2ZsYWdzLCBzZGF0YS0+dmlmLmFkZHIsCiAJCQkJCSAgICZjc2FfaWUpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggMmRlODg3MC4uOTNhZjBmMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogCiAJY3VycmVudF9iYW5kID0gY2Jzcy0+Y2hhbm5lbC0+YmFuZDsKIAltZW1zZXQoJmNzYV9pZSwgMCwgc2l6ZW9mKGNzYV9pZSkpOwotCXJlcyA9IGllZWU4MDIxMV9wYXJzZV9jaF9zd2l0Y2hfaWUoc2RhdGEsIGVsZW1zLCBiZWFjb24sIGN1cnJlbnRfYmFuZCwKKwlyZXMgPSBpZWVlODAyMTFfcGFyc2VfY2hfc3dpdGNoX2llKHNkYXRhLCBlbGVtcywgY3VycmVudF9iYW5kLAogCQkJCQkgICBpZm1nZC0+ZmxhZ3MsCiAJCQkJCSAgIGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgJmNzYV9pZSk7CiAJaWYgKHJlcwk8IDApCkBAIC0xMTY4LDcgKzExNjgsOCBAQAogCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPmNoc3dpdGNoX3dvcmspOwogCWVsc2UKIAkJbW9kX3RpbWVyKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIsCi0JCQkgIFRVX1RPX0VYUF9USU1FKGNzYV9pZS5jb3VudCAqIGNic3MtPmJlYWNvbl9pbnRlcnZhbCkpOworCQkJICBUVV9UT19FWFBfVElNRSgoY3NhX2llLmNvdW50IC0gMSkgKgorCQkJCQkgY2Jzcy0+YmVhY29uX2ludGVydmFsKSk7CiB9CiAKIHN0YXRpYyBib29sCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYwppbmRleCBkZjkwY2UyLi40MDhmZDhhYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jCkBAIC0yNTIsMTkgKzI1MiwxNiBAQAogCWN1cl90aHIgPSBtaS0+Z3JvdXBzW2N1cl9ncm91cF0ucmF0ZXNbY3VyX2lkeF0uY3VyX3RwOwogCWN1cl9wcm9iID0gbWktPmdyb3Vwc1tjdXJfZ3JvdXBdLnJhdGVzW2N1cl9pZHhdLnByb2JhYmlsaXR5OwogCi0JdG1wX2dyb3VwID0gdHBfbGlzdFtqIC0gMV0gLyBNQ1NfR1JPVVBfUkFURVM7Ci0JdG1wX2lkeCA9IHRwX2xpc3RbaiAtIDFdICUgTUNTX0dST1VQX1JBVEVTOwotCXRtcF90aHIgPSBtaS0+Z3JvdXBzW3RtcF9ncm91cF0ucmF0ZXNbdG1wX2lkeF0uY3VyX3RwOwotCXRtcF9wcm9iID0gbWktPmdyb3Vwc1t0bXBfZ3JvdXBdLnJhdGVzW3RtcF9pZHhdLnByb2JhYmlsaXR5OwotCi0Jd2hpbGUgKGogPiAwICYmIChjdXJfdGhyID4gdG1wX3RociB8fAotCSAgICAgIChjdXJfdGhyID09IHRtcF90aHIgJiYgY3VyX3Byb2IgPiB0bXBfcHJvYikpKSB7Ci0JCWotLTsKKwlkbyB7CiAJCXRtcF9ncm91cCA9IHRwX2xpc3RbaiAtIDFdIC8gTUNTX0dST1VQX1JBVEVTOwogCQl0bXBfaWR4ID0gdHBfbGlzdFtqIC0gMV0gJSBNQ1NfR1JPVVBfUkFURVM7CiAJCXRtcF90aHIgPSBtaS0+Z3JvdXBzW3RtcF9ncm91cF0ucmF0ZXNbdG1wX2lkeF0uY3VyX3RwOwogCQl0bXBfcHJvYiA9IG1pLT5ncm91cHNbdG1wX2dyb3VwXS5yYXRlc1t0bXBfaWR4XS5wcm9iYWJpbGl0eTsKLQl9CisJCWlmIChjdXJfdGhyIDwgdG1wX3RociB8fAorCQkgICAgKGN1cl90aHIgPT0gdG1wX3RociAmJiBjdXJfcHJvYiA8PSB0bXBfcHJvYikpCisJCQlicmVhazsKKwkJai0tOworCX0gd2hpbGUgKGogPiAwKTsKIAogCWlmIChqIDwgTUFYX1RIUl9SQVRFUyAtIDEpIHsKIAkJbWVtbW92ZSgmdHBfbGlzdFtqICsgMV0sICZ0cF9saXN0W2pdLCAoc2l6ZW9mKCp0cF9saXN0KSAqCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IGIwNGNhNDAuLmEzN2Y5YWYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC0xNjc4LDExICsxNjc4LDE0IEBACiAJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsKIAlmcmFnID0gc2MgJiBJRUVFODAyMTFfU0NUTF9GUkFHOwogCi0JaWYgKGxpa2VseSgoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSAmJiBmcmFnID09IDApIHx8Ci0JCSAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSkgewotCQkvKiBub3QgZnJhZ21lbnRlZCAqLworCWlmIChsaWtlbHkoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSAmJiBmcmFnID09IDApKQorCQlnb3RvIG91dDsKKworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgeworCQlyeC0+bG9jYWwtPmRvdDExTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50Kys7CiAJCWdvdG8gb3V0OwogCX0KKwogCUk4MDJfREVCVUdfSU5DKHJ4LT5sb2NhbC0+cnhfaGFuZGxlcnNfZnJhZ21lbnRzKTsKIAogCWlmIChza2JfbGluZWFyaXplKHJ4LT5za2IpKQpAQCAtMTc3NSwxMCArMTc3OCw3IEBACiAgb3V0OgogCWlmIChyeC0+c3RhKQogCQlyeC0+c3RhLT5yeF9wYWNrZXRzKys7Ci0JaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQotCQlyeC0+bG9jYWwtPmRvdDExTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50Kys7Ci0JZWxzZQotCQlpZWVlODAyMTFfbGVkX3J4KHJ4LT5sb2NhbCk7CisJaWVlZTgwMjExX2xlZF9yeChyeC0+bG9jYWwpOwogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCmluZGV4IDZhYjAwOTAuLmVmZWJhNTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYworKysgYi9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJ3bWUuaCIKIAogaW50IGllZWU4MDIxMV9wYXJzZV9jaF9zd2l0Y2hfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywgYm9vbCBiZWFjb24sCisJCQkJIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKIAkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBjdXJyZW50X2JhbmQsCiAJCQkJIHUzMiBzdGFfZmxhZ3MsIHU4ICpic3NpZCwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9jc2FfaWUgKmNzYV9pZSkKQEAgLTkxLDE5ICs5MSwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoIWJlYWNvbiAmJiBzZWNfY2hhbl9vZmZzKSB7CisJaWYgKHNlY19jaGFuX29mZnMpIHsKIAkJc2Vjb25kYXJ5X2NoYW5uZWxfb2Zmc2V0ID0gc2VjX2NoYW5fb2Zmcy0+c2VjX2NoYW5fb2ZmczsKLQl9IGVsc2UgaWYgKGJlYWNvbiAmJiBodF9vcGVyKSB7Ci0JCXNlY29uZGFyeV9jaGFubmVsX29mZnNldCA9Ci0JCQlodF9vcGVyLT5odF9wYXJhbSAmIElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX09GRlNFVDsKIAl9IGVsc2UgaWYgKCEoc3RhX2ZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFX0hUKSkgewotCQkvKiBJZiBpdCdzIG5vdCBhIGJlYWNvbiwgSFQgaXMgZW5hYmxlZCBhbmQgdGhlIElFIG5vdCBwcmVzZW50LAotCQkgKiBpdCdzIDIwIE1IeiwgODAyLjExLTIwMTIgOC41LjIuNjoKLQkJICoJVGhpcyBlbGVtZW50IFt0aGUgU2Vjb25kYXJ5IENoYW5uZWwgT2Zmc2V0IEVsZW1lbnRdIGlzCi0JCSAqCXByZXNlbnQgd2hlbiBzd2l0Y2hpbmcgdG8gYSA0MCBNSHogY2hhbm5lbC4gSXQgbWF5IGJlCi0JCSAqCXByZXNlbnQgd2hlbiBzd2l0Y2hpbmcgdG8gYSAyMCBNSHogY2hhbm5lbCAoaW4gd2hpY2gKLQkJICoJY2FzZSB0aGUgc2Vjb25kYXJ5IGNoYW5uZWwgb2Zmc2V0IGlzIHNldCB0byBTQ04pLgotCQkgKi8KKwkJLyogSWYgdGhlIHNlY29uZGFyeSBjaGFubmVsIG9mZnNldCBJRSBpcyBub3QgcHJlc2VudCwKKwkJICogd2UgY2FuJ3Qga25vdyB3aGF0J3MgdGhlIHBvc3QtQ1NBIG9mZnNldCwgc28gdGhlCisJCSAqIGJlc3Qgd2UgY2FuIGRvIGlzIHVzZSAyME1Iei4KKwkJKi8KIAkJc2Vjb25kYXJ5X2NoYW5uZWxfb2Zmc2V0ID0gSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfTk9ORTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwppbmRleCA4NmY5ZDc2Li5kMjU5ZGEzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCkBAIC0xODYzLDYgKzE4NjMsMTIgQEAKIAlpZiAoKm9wIDwgSVBfU0VUX09QX1ZFUlNJT04pIHsKIAkJLyogQ2hlY2sgdGhlIHZlcnNpb24gYXQgdGhlIGJlZ2lubmluZyBvZiBvcGVyYXRpb25zICovCiAJCXN0cnVjdCBpcF9zZXRfcmVxX3ZlcnNpb24gKnJlcV92ZXJzaW9uID0gZGF0YTsKKworCQlpZiAoKmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBfc2V0X3JlcV92ZXJzaW9uKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCiAJCWlmIChyZXFfdmVyc2lvbi0+dmVyc2lvbiAhPSBJUFNFVF9QUk9UT0NPTCkgewogCQkJcmV0ID0gLUVQUk9UTzsKIAkJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCmluZGV4IDQzN2EzNjYuLmJkOTBiZjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwpAQCAtODQ2LDYgKzg0Niw4IEBACiAJCW5ld19za2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIG1heF9oZWFkcm9vbSk7CiAJCWlmICghbmV3X3NrYikKIAkJCWdvdG8gZXJyb3I7CisJCWlmIChza2ItPnNrKQorCQkJc2tiX3NldF9vd25lcl93KG5ld19za2IsIHNrYi0+c2spOwogCQljb25zdW1lX3NrYihza2IpOwogCQlza2IgPSBuZXdfc2tiOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggMTFhYjRiMDcuLjY2ZTg0MjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC0zNDg0LDEzICszNDg0LDggQEAKIAl9CiB9CiAKLS8qIFNjaGVkdWxlIG9iamVjdHMgZm9yIHJlbGVhc2UgdmlhIHJjdSB0byBtYWtlIHN1cmUgbm8gcGFja2V0cyBhcmUgYWNjZXNpbmcKLSAqIHJlbW92ZWQgcnVsZXMuCi0gKi8KLXN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfcmVsZWFzZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpydCkKK3N0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfcmVsZWFzZShzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucykKIHsKLQlzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucyA9IGNvbnRhaW5lcl9vZihydCwgc3RydWN0IG5mdF90cmFucywgcmN1X2hlYWQpOwotCiAJc3dpdGNoICh0cmFucy0+bXNnX3R5cGUpIHsKIAljYXNlIE5GVF9NU0dfREVMVEFCTEU6CiAJCW5mX3RhYmxlc190YWJsZV9kZXN0cm95KCZ0cmFucy0+Y3R4KTsKQEAgLTM2MTIsMTAgKzM2MDcsMTEgQEAKIAkJfQogCX0KIAorCXN5bmNocm9uaXplX3JjdSgpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRyYW5zLCBuZXh0LCAmbmV0LT5uZnQuY29tbWl0X2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJnRyYW5zLT5saXN0KTsKLQkJdHJhbnMtPmN0eC5ubGEgPSBOVUxMOwotCQljYWxsX3JjdSgmdHJhbnMtPnJjdV9oZWFkLCBuZl90YWJsZXNfY29tbWl0X3JlbGVhc2VfcmN1KTsKKwkJbmZfdGFibGVzX2NvbW1pdF9yZWxlYXNlKHRyYW5zKTsKIAl9CiAKIAluZl90YWJsZXNfZ2VuX25vdGlmeShuZXQsIHNrYiwgTkZUX01TR19ORVdHRU4pOwpAQCAtMzYyMywxMyArMzYxOSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFNjaGVkdWxlIG9iamVjdHMgZm9yIHJlbGVhc2UgdmlhIHJjdSB0byBtYWtlIHN1cmUgbm8gcGFja2V0cyBhcmUgYWNjZXNpbmcKLSAqIGFib3J0ZWQgcnVsZXMuCi0gKi8KLXN0YXRpYyB2b2lkIG5mX3RhYmxlc19hYm9ydF9yZWxlYXNlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJ0KQorc3RhdGljIHZvaWQgbmZfdGFibGVzX2Fib3J0X3JlbGVhc2Uoc3RydWN0IG5mdF90cmFucyAqdHJhbnMpCiB7Ci0Jc3RydWN0IG5mdF90cmFucyAqdHJhbnMgPSBjb250YWluZXJfb2YocnQsIHN0cnVjdCBuZnRfdHJhbnMsIHJjdV9oZWFkKTsKLQogCXN3aXRjaCAodHJhbnMtPm1zZ190eXBlKSB7CiAJY2FzZSBORlRfTVNHX05FV1RBQkxFOgogCQluZl90YWJsZXNfdGFibGVfZGVzdHJveSgmdHJhbnMtPmN0eCk7CkBAIC0zNzI1LDExICszNzE2LDEyIEBACiAJCX0KIAl9CiAKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHRyYW5zLCBuZXh0LAogCQkJCQkgJm5ldC0+bmZ0LmNvbW1pdF9saXN0LCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZ0cmFucy0+bGlzdCk7Ci0JCXRyYW5zLT5jdHgubmxhID0gTlVMTDsKLQkJY2FsbF9yY3UoJnRyYW5zLT5yY3VfaGVhZCwgbmZfdGFibGVzX2Fib3J0X3JlbGVhc2VfcmN1KTsKKwkJbmZfdGFibGVzX2Fib3J0X3JlbGVhc2UodHJhbnMpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKaW5kZXggNmM1YTkxNS4uMTNjMmUxNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCkBAIC00Nyw2ICs0Nyw4IEBACiAJW05GTkxHUlBfQ09OTlRSQUNLX0VYUF9ORVddCT0gTkZOTF9TVUJTWVNfQ1RORVRMSU5LX0VYUCwKIAlbTkZOTEdSUF9DT05OVFJBQ0tfRVhQX1VQREFURV0JPSBORk5MX1NVQlNZU19DVE5FVExJTktfRVhQLAogCVtORk5MR1JQX0NPTk5UUkFDS19FWFBfREVTVFJPWV0gPSBORk5MX1NVQlNZU19DVE5FVExJTktfRVhQLAorCVtORk5MR1JQX05GVEFCTEVTXQkJPSBORk5MX1NVQlNZU19ORlRBQkxFUywKKwlbTkZOTEdSUF9BQ0NUX1FVT1RBXQkJPSBORk5MX1NVQlNZU19BQ0NULAogfTsKIAogdm9pZCBuZm5sX2xvY2soX191OCBzdWJzeXNfaWQpCkBAIC00NjQsNyArNDY2LDEyIEBACiBzdGF0aWMgaW50IG5mbmV0bGlua19iaW5kKGludCBncm91cCkKIHsKIAljb25zdCBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSAqc3M7Ci0JaW50IHR5cGUgPSBuZm5sX2dyb3VwMnR5cGVbZ3JvdXBdOworCWludCB0eXBlOworCisJaWYgKGdyb3VwIDw9IE5GTkxHUlBfTk9ORSB8fCBncm91cCA+IE5GTkxHUlBfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXR5cGUgPSBuZm5sX2dyb3VwMnR5cGVbZ3JvdXBdOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXNzID0gbmZuZXRsaW5rX2dldF9zdWJzeXModHlwZSk7CkBAIC01MTQsNiArNTIxLDkgQEAKIHsKIAlpbnQgaTsKIAorCWZvciAoaSA9IE5GTkxHUlBfTk9ORSArIDE7IGkgPD0gTkZOTEdSUF9NQVg7IGkrKykKKwkJQlVHX09OKG5mbmxfZ3JvdXAydHlwZVtpXSA9PSBORk5MX1NVQlNZU19OT05FKTsKKwogCWZvciAoaT0wOyBpPE5GTkxfU1VCU1lTX0NPVU5UOyBpKyspCiAJCW11dGV4X2luaXQoJnRhYmxlW2ldLm11dGV4KTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYwppbmRleCA5ZDZkNmY2Li4yNjVlMTkwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYwpAQCAtMjEsNDUgKzIxLDE3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg+CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotICAgICAgIGNvbnN0IGNoYXIJKm5hbWU7Ci0gICAgICAgdTgJCXR5cGU7Ci19IHRhYmxlX3RvX2NoYWludHlwZVtdID0gewotICAgICAgIHsgImZpbHRlciIsICAgICBORlRfQ0hBSU5fVF9ERUZBVUxUIH0sCi0gICAgICAgeyAicmF3IiwgICAgICAgIE5GVF9DSEFJTl9UX0RFRkFVTFQgfSwKLSAgICAgICB7ICJzZWN1cml0eSIsICAgTkZUX0NIQUlOX1RfREVGQVVMVCB9LAotICAgICAgIHsgIm1hbmdsZSIsICAgICBORlRfQ0hBSU5fVF9ST1VURSB9LAotICAgICAgIHsgIm5hdCIsICAgICAgICBORlRfQ0hBSU5fVF9OQVQgfSwKLSAgICAgICB7IH0sCi19OwotCi1zdGF0aWMgaW50IG5mdF9jb21wYXRfdGFibGVfdG9fY2hhaW50eXBlKGNvbnN0IGNoYXIgKnRhYmxlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgdGFibGVfdG9fY2hhaW50eXBlW2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7Ci0JCWlmIChzdHJjbXAodGFibGVfdG9fY2hhaW50eXBlW2ldLm5hbWUsIHRhYmxlKSA9PSAwKQotCQkJcmV0dXJuIHRhYmxlX3RvX2NoYWludHlwZVtpXS50eXBlOwotCX0KLQotCXJldHVybiAtMTsKLX0KLQogc3RhdGljIGludCBuZnRfY29tcGF0X2NoYWluX3ZhbGlkYXRlX2RlcGVuZGVuY3koY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkJCQkJY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4pCiB7Ci0JZW51bSBuZnRfY2hhaW5fdHlwZSB0eXBlOwogCWNvbnN0IHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluOwogCiAJaWYgKCF0YWJsZW5hbWUgfHwgIShjaGFpbi0+ZmxhZ3MgJiBORlRfQkFTRV9DSEFJTikpCiAJCXJldHVybiAwOwogCi0JdHlwZSA9IG5mdF9jb21wYXRfdGFibGVfdG9fY2hhaW50eXBlKHRhYmxlbmFtZSk7Ci0JaWYgKHR5cGUgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWJhc2VjaGFpbiA9IG5mdF9iYXNlX2NoYWluKGNoYWluKTsKLQlpZiAoYmFzZWNoYWluLT50eXBlLT50eXBlICE9IHR5cGUpCisJaWYgKHN0cmNtcCh0YWJsZW5hbWUsICJuYXQiKSA9PSAwICYmCisJICAgIGJhc2VjaGFpbi0+dHlwZS0+dHlwZSAhPSBORlRfQ0hBSU5fVF9OQVQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIDA7CkBAIC0xMTcsNyArODksNyBAQAogCQkJICAgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LCB2b2lkICppbmZvLAogCQkJICAgdW5pb24gbmZ0X2VudHJ5ICplbnRyeSwgdTggcHJvdG8sIGJvb2wgaW52KQogewotCXBhci0+bmV0CT0gJmluaXRfbmV0OworCXBhci0+bmV0CT0gY3R4LT5uZXQ7CiAJcGFyLT50YWJsZQk9IGN0eC0+dGFibGUtPm5hbWU7CiAJc3dpdGNoIChjdHgtPmFmaS0+ZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgpAQCAtMzI0LDcgKzI5Niw3IEBACiAJCQkgIHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKmluZm8sCiAJCQkgIHVuaW9uIG5mdF9lbnRyeSAqZW50cnksIHU4IHByb3RvLCBib29sIGludikKIHsKLQlwYXItPm5ldAk9ICZpbml0X25ldDsKKwlwYXItPm5ldAk9IGN0eC0+bmV0OwogCXBhci0+dGFibGUJPSBjdHgtPnRhYmxlLT5uYW1lOwogCXN3aXRjaCAoY3R4LT5hZmktPmZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKQEAgLTM3NCw3ICszNDYsNyBAQAogCXVuaW9uIG5mdF9lbnRyeSBlID0ge307CiAJaW50IHJldDsKIAotCXJldCA9IG5mdF9jb21wYXRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeShtYXRjaC0+bmFtZSwgY3R4LT5jaGFpbik7CisJcmV0ID0gbmZ0X2NvbXBhdF9jaGFpbl92YWxpZGF0ZV9kZXBlbmRlbmN5KG1hdGNoLT50YWJsZSwgY3R4LT5jaGFpbik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyOwogCkBAIC00NDgsNyArNDIwLDcgQEAKIAkJaWYgKCEoaG9va19tYXNrICYgbWF0Y2gtPmhvb2tzKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXJldCA9IG5mdF9jb21wYXRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeShtYXRjaC0+bmFtZSwKKwkJcmV0ID0gbmZ0X2NvbXBhdF9jaGFpbl92YWxpZGF0ZV9kZXBlbmRlbmN5KG1hdGNoLT50YWJsZSwKIAkJCQkJCQkgICBjdHgtPmNoYWluKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IGYxZGU3MmQuLjAwMDdiODEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTE0NDAsNyArMTQ0MCw3IEBACiAJCXJldHVybjsKIAogCWZvciAodW5kbyA9IDA7IHVuZG8gPCBncm91cDsgdW5kbysrKQotCQlpZiAodGVzdF9iaXQoZ3JvdXAsICZncm91cHMpKQorCQlpZiAodGVzdF9iaXQodW5kbywgJmdyb3VwcykpCiAJCQlubGstPm5ldGxpbmtfdW5iaW5kKHVuZG8pOwogfQogCkBAIC0xNDkyLDcgKzE0OTIsNyBAQAogCQkJbmV0bGlua19pbnNlcnQoc2ssIG5ldCwgbmxhZGRyLT5ubF9waWQpIDoKIAkJCW5ldGxpbmtfYXV0b2JpbmQoc29jayk7CiAJCWlmIChlcnIpIHsKLQkJCW5ldGxpbmtfdW5iaW5kKG5say0+bmdyb3VwcyAtIDEsIGdyb3VwcywgbmxrKTsKKwkJCW5ldGxpbmtfdW5iaW5kKG5say0+bmdyb3VwcywgZ3JvdXBzLCBubGspOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KQEAgLTI1MDksNiArMjUwOSw3IEBACiAJCW5sX3RhYmxlW3VuaXRdLm1vZHVsZSA9IG1vZHVsZTsKIAkJaWYgKGNmZykgewogCQkJbmxfdGFibGVbdW5pdF0uYmluZCA9IGNmZy0+YmluZDsKKwkJCW5sX3RhYmxlW3VuaXRdLnVuYmluZCA9IGNmZy0+dW5iaW5kOwogCQkJbmxfdGFibGVbdW5pdF0uZmxhZ3MgPSBjZmctPmZsYWdzOwogCQkJaWYgKGNmZy0+Y29tcGFyZSkKIAkJCQlubF90YWJsZVt1bml0XS5jb21wYXJlID0gY2ZnLT5jb21wYXJlOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMKaW5kZXggMDA2ODg2ZC4uOGM0MjI5YiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jCkBAIC0yNDYsMTEgKzI0NiwxMSBAQAogewogCWludCB0cmFuc3BvcnRfbGVuID0gc2tiLT5sZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOwogCi0JaWYgKGw0X3Byb3RvID09IElQUFJPVE9fVENQKSB7CisJaWYgKGw0X3Byb3RvID09IE5FWFRIRFJfVENQKSB7CiAJCWlmIChsaWtlbHkodHJhbnNwb3J0X2xlbiA+PSBzaXplb2Yoc3RydWN0IHRjcGhkcikpKQogCQkJaW5ldF9wcm90b19jc3VtX3JlcGxhY2UxNigmdGNwX2hkcihza2IpLT5jaGVjaywgc2tiLAogCQkJCQkJICBhZGRyLCBuZXdfYWRkciwgMSk7Ci0JfSBlbHNlIGlmIChsNF9wcm90byA9PSBJUFBST1RPX1VEUCkgeworCX0gZWxzZSBpZiAobDRfcHJvdG8gPT0gTkVYVEhEUl9VRFApIHsKIAkJaWYgKGxpa2VseSh0cmFuc3BvcnRfbGVuID49IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpIHsKIAkJCXN0cnVjdCB1ZHBoZHIgKnVoID0gdWRwX2hkcihza2IpOwogCkBAIC0yNjEsNiArMjYxLDEwIEBACiAJCQkJCXVoLT5jaGVjayA9IENTVU1fTUFOR0xFRF8wOwogCQkJfQogCQl9CisJfSBlbHNlIGlmIChsNF9wcm90byA9PSBORVhUSERSX0lDTVApIHsKKwkJaWYgKGxpa2VseSh0cmFuc3BvcnRfbGVuID49IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpKSkKKwkJCWluZXRfcHJvdG9fY3N1bV9yZXBsYWNlMTYoJmljbXA2X2hkcihza2IpLT5pY21wNl9ja3N1bSwKKwkJCQkJCSAgc2tiLCBhZGRyLCBuZXdfYWRkciwgMSk7CiAJfQogfQogCkBAIC03MjIsOCArNzI2LDYgQEAKIAogCQljYXNlIE9WU19BQ1RJT05fQVRUUl9TQU1QTEU6CiAJCQllcnIgPSBzYW1wbGUoZHAsIHNrYiwga2V5LCBhKTsKLQkJCWlmICh1bmxpa2VseShlcnIpKSAvKiBza2IgYWxyZWFkeSBmcmVlZC4gKi8KLQkJCQlyZXR1cm4gZXJyOwogCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBlNmQ3MjU1Li5mOWU1NTZiIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMTI2NSw3ICsxMjY1LDcgQEAKIAlyZXR1cm4gbXNnc2l6ZTsKIH0KIAotLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovCisvKiBDYWxsZWQgd2l0aCBvdnNfbXV0ZXguICovCiBzdGF0aWMgaW50IG92c19kcF9jbWRfZmlsbF9pbmZvKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdTMyIHBvcnRpZCwgdTMyIHNlcSwgdTMyIGZsYWdzLCB1OCBjbWQpCiB7CkBAIC0xNTU1LDcgKzE1NTUsNyBAQAogCWlmICghcmVwbHkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmN1X3JlYWRfbG9jaygpOworCW92c19sb2NrKCk7CiAJZHAgPSBsb29rdXBfZGF0YXBhdGgoc29ja19uZXQoc2tiLT5zayksIGluZm8tPnVzZXJoZHIsIGluZm8tPmF0dHJzKTsKIAlpZiAoSVNfRVJSKGRwKSkgewogCQllcnIgPSBQVFJfRVJSKGRwKTsKQEAgLTE1NjQsMTIgKzE1NjQsMTIgQEAKIAllcnIgPSBvdnNfZHBfY21kX2ZpbGxfaW5mbyhkcCwgcmVwbHksIGluZm8tPnNuZF9wb3J0aWQsCiAJCQkJICAgaW5mby0+c25kX3NlcSwgMCwgT1ZTX0RQX0NNRF9ORVcpOwogCUJVR19PTihlcnIgPCAwKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlvdnNfdW5sb2NrKCk7CiAKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShyZXBseSwgaW5mbyk7CiAKIGVycl91bmxvY2tfZnJlZToKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlvdnNfdW5sb2NrKCk7CiAJa2ZyZWVfc2tiKHJlcGx5KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTU4MSw4ICsxNTgxLDggQEAKIAlpbnQgc2tpcCA9IGNiLT5hcmdzWzBdOwogCWludCBpID0gMDsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkcCwgJm92c19uZXQtPmRwcywgbGlzdF9ub2RlKSB7CisJb3ZzX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRwLCAmb3ZzX25ldC0+ZHBzLCBsaXN0X25vZGUpIHsKIAkJaWYgKGkgPj0gc2tpcCAmJgogCQkgICAgb3ZzX2RwX2NtZF9maWxsX2luZm8oZHAsIHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5wb3J0aWQsCiAJCQkJCSBjYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLApAQCAtMTU5MCw3ICsxNTkwLDcgQEAKIAkJCWJyZWFrOwogCQlpKys7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCW92c191bmxvY2soKTsKIAogCWNiLT5hcmdzWzBdID0gaTsKIApkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jCmluZGV4IDkzOWJjYjMuLjA4OWIxOTUgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCWlmIChtYXRjaC0+a2V5LT5ldGgudHlwZSA9PSBodG9ucyhFVEhfUF9BUlApCiAJCQl8fCBtYXRjaC0+a2V5LT5ldGgudHlwZSA9PSBodG9ucyhFVEhfUF9SQVJQKSkgewogCQlrZXlfZXhwZWN0ZWQgfD0gMSA8PCBPVlNfS0VZX0FUVFJfQVJQOwotCQlpZiAobWF0Y2gtPm1hc2sgJiYgKG1hdGNoLT5tYXNrLT5rZXkuZXRoLnR5cGUgPT0gaHRvbnMoMHhmZmZmKSkpCisJCWlmIChtYXRjaC0+bWFzayAmJiAobWF0Y2gtPm1hc2stPmtleS50cC5zcmMgPT0gaHRvbnMoMHhmZikpKQogCQkJbWFza19hbGxvd2VkIHw9IDEgPDwgT1ZTX0tFWV9BVFRSX0FSUDsKIAl9CiAKQEAgLTY4OSw2ICs2ODksMTMgQEAKIAkJCQlpcHY2X2tleS0+aXB2Nl9mcmFnLCBPVlNfRlJBR19UWVBFX01BWCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCisJCWlmICghaXNfbWFzayAmJiBpcHY2X2tleS0+aXB2Nl9sYWJlbCAmIGh0b25sKDB4RkZGMDAwMDApKSB7CisJCQlPVlNfTkxFUlIoIklQdjYgZmxvdyBsYWJlbCAleCBpcyBvdXQgb2YgcmFuZ2UgKG1heD0leCkuXG4iLAorCQkJCSAgbnRvaGwoaXB2Nl9rZXktPmlwdjZfbGFiZWwpLCAoMSA8PCAyMCkgLSAxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKIAkJU1dfRkxPV19LRVlfUFVUKG1hdGNoLCBpcHY2LmxhYmVsLAogCQkJCWlwdjZfa2V5LT5pcHY2X2xhYmVsLCBpc19tYXNrKTsKIAkJU1dfRkxPV19LRVlfUFVUKG1hdGNoLCBpcC5wcm90bywKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IDg3ZDIwZjQuLjA3YzA0YTggMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMzc4LDcgKzM3OCw3IEBACiAJCV9fdW5yZWdpc3Rlcl9wcm90X2hvb2soc2ssIHN5bmMpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fcHVyZSBzdHJ1Y3QgcGFnZSAqcGd2X3RvX3BhZ2Uodm9pZCAqYWRkcikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKiBfX3B1cmUgcGd2X3RvX3BhZ2Uodm9pZCAqYWRkcikKIHsKIAlpZiAoaXNfdm1hbGxvY19hZGRyKGFkZHIpKQogCQlyZXR1cm4gdm1hbGxvY190b19wYWdlKGFkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXV0aC5jIGIvbmV0L3NjdHAvYXV0aC5jCmluZGV4IDBlODUyOTEuLmZiNzk3NmEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2F1dGguYworKysgYi9uZXQvc2N0cC9hdXRoLmMKQEAgLTg2Miw4ICs4NjIsNiBAQAogCQlsaXN0X2FkZCgmY3VyX2tleS0+a2V5X2xpc3QsIHNoX2tleXMpOwogCiAJY3VyX2tleS0+a2V5ID0ga2V5OwotCXNjdHBfYXV0aF9rZXlfaG9sZChrZXkpOwotCiAJcmV0dXJuIDA7CiBub21lbToKIAlpZiAoIXJlcGxhY2UpCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggYWI3MzRiZS4uOWYzMjc0MSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMjYwOSw2ICsyNjA5LDkgQEAKIAkJYWRkcl9wYXJhbSA9IHBhcmFtLnYgKyBzaXplb2Yoc2N0cF9hZGRpcF9wYXJhbV90KTsKIAogCQlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHBhcmFtX3R5cGUyYWYocGFyYW0ucC0+dHlwZSkpOworCQlpZiAoYWYgPT0gTlVMTCkKKwkJCWJyZWFrOworCiAJCWFmLT5mcm9tX2FkZHJfcGFyYW0oJmFkZHIsIGFkZHJfcGFyYW0sCiAJCQkJICAgIGh0b25zKGFzb2MtPnBlZXIucG9ydCksIDApOwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL0tjb25maWcgYi9uZXQvc3VucnBjL0tjb25maWcKaW5kZXggMDc1NGQwZi4uZmI3ODExNyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9LY29uZmlnCisrKyBiL25ldC9zdW5ycGMvS2NvbmZpZwpAQCAtMzUsNiArMzUsNyBAQAogY29uZmlnIFNVTlJQQ19ERUJVRwogCWJvb2wgIlJQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nIgogCWRlcGVuZHMgb24gU1VOUlBDICYmIFNZU0NUTAorCXNlbGVjdCBERUJVR19GUwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBzeXNjdGwtYmFzZWQgZGVidWdnaW5nIGludGVyZmFjZQogCSAgdGhhdCBpcyBiZSB1c2VkIGJ5IHRoZSAncnBjZGVidWcnIHV0aWxpdHkgdG8gdHVybiBvbiBvciBvZmYKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvTWFrZWZpbGUgYi9uZXQvc3VucnBjL01ha2VmaWxlCmluZGV4IGU1YTdhMWMuLjE1ZTZmNmMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvTWFrZWZpbGUKKysrIGIvbmV0L3N1bnJwYy9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQAogCSAgICBhZGRyLm8gcnBjYl9jbG50Lm8gdGltZXIubyB4ZHIubyBcCiAJICAgIHN1bnJwY19zeW1zLm8gY2FjaGUubyBycGNfcGlwZS5vIFwKIAkgICAgc3ZjX3hwcnQubworc3VucnBjLSQoQ09ORklHX1NVTlJQQ19ERUJVRykgKz0gZGVidWdmcy5vCiBzdW5ycGMtJChDT05GSUdfU1VOUlBDX0JBQ0tDSEFOTkVMKSArPSBiYWNrY2hhbm5lbF9ycXN0Lm8gYmNfc3ZjLm8KIHN1bnJwYy0kKENPTkZJR19QUk9DX0ZTKSArPSBzdGF0cy5vCiBzdW5ycGMtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGwubwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoLmMgYi9uZXQvc3VucnBjL2F1dGguYwppbmRleCAzODNlYjkxLi40N2YzOGJlIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGguYworKysgYi9uZXQvc3VucnBjL2F1dGguYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3NfYXBpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfQVVUSAogI2VuZGlmCiAKQEAgLTY0Niw3ICs2NDYsNyBAQAogCWNyZWQtPmNyX2F1dGggPSBhdXRoOwogCWNyZWQtPmNyX29wcyA9IG9wczsKIAljcmVkLT5jcl9leHBpcmUgPSBqaWZmaWVzOwotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAljcmVkLT5jcl9tYWdpYyA9IFJQQ0FVVEhfQ1JFRF9NQUdJQzsKICNlbmRpZgogCWNyZWQtPmNyX3VpZCA9IGFjcmVkLT51aWQ7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ2VuZXJpYy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dlbmVyaWMuYwppbmRleCA2ZjZiODI5Li40MTI0OGIxIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ2VuZXJpYy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nZW5lcmljLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc2NoZWQuaD4KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCBhZmIyOTJjLi5kYWNlMTNkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC02Niw3ICs2Niw3IEBACiAjZGVmaW5lIEdTU19LRVlfRVhQSVJFX1RJTUVPIDI0MAogc3RhdGljIHVuc2lnbmVkIGludCBnc3Nfa2V5X2V4cGlyZV90aW1lbyA9IEdTU19LRVlfRVhQSVJFX1RJTUVPOwogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApAQCAtMTM1Myw2ICsxMzUzLDcgQEAKIAljaGFyICpzdHJpbmcgPSBOVUxMOwogCXN0cnVjdCBnc3NfY3JlZCAqZ3NzX2NyZWQgPSBjb250YWluZXJfb2YoY3JlZCwgc3RydWN0IGdzc19jcmVkLCBnY19iYXNlKTsKIAlzdHJ1Y3QgZ3NzX2NsX2N0eCAqY3R4OworCXVuc2lnbmVkIGludCBsZW47CiAJc3RydWN0IHhkcl9uZXRvYmogKmFjY2VwdG9yOwogCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTM2MCwxNSArMTM2MSwzOSBAQAogCWlmICghY3R4KQogCQlnb3RvIG91dDsKIAotCWFjY2VwdG9yID0gJmN0eC0+Z2NfYWNjZXB0b3I7CisJbGVuID0gY3R4LT5nY19hY2NlcHRvci5sZW47CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKiBubyBwb2ludCBpZiB0aGVyZSdzIG5vIHN0cmluZyAqLwotCWlmICghYWNjZXB0b3ItPmxlbikKLQkJZ290byBvdXQ7Ci0KLQlzdHJpbmcgPSBrbWFsbG9jKGFjY2VwdG9yLT5sZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIE5VTEw7CityZWFsbG9jOgorCXN0cmluZyA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdHJpbmcpCisJCXJldHVybiBOVUxMOworCisJcmN1X3JlYWRfbG9jaygpOworCWN0eCA9IHJjdV9kZXJlZmVyZW5jZShnc3NfY3JlZC0+Z2NfY3R4KTsKKworCS8qIGRpZCB0aGUgY3R4IGRpc2FwcGVhciBvciB3YXMgaXQgcmVwbGFjZWQgYnkgb25lIHdpdGggbm8gYWNjZXB0b3I/ICovCisJaWYgKCFjdHggfHwgIWN0eC0+Z2NfYWNjZXB0b3IubGVuKSB7CisJCWtmcmVlKHN0cmluZyk7CisJCXN0cmluZyA9IE5VTEw7CiAJCWdvdG8gb3V0OworCX0KKworCWFjY2VwdG9yID0gJmN0eC0+Z2NfYWNjZXB0b3I7CisKKwkvKgorCSAqIERpZCB3ZSBmaW5kIGEgbmV3IGFjY2VwdG9yIHRoYXQncyBsb25nZXIgdGhhbiB0aGUgb3JpZ2luYWw/IEFsbG9jYXRlCisJICogYSBsb25nZXIgYnVmZmVyIGFuZCB0cnkgYWdhaW4uCisJICovCisJaWYgKGxlbiA8IGFjY2VwdG9yLT5sZW4pIHsKKwkJbGVuID0gYWNjZXB0b3ItPmxlbjsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCWtmcmVlKHN0cmluZyk7CisJCWdvdG8gcmVhbGxvYzsKKwl9CiAKIAltZW1jcHkoc3RyaW5nLCBhY2NlcHRvci0+ZGF0YSwgYWNjZXB0b3ItPmxlbik7CiAJc3RyaW5nW2FjY2VwdG9yLT5sZW5dID0gJ1wwJzsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2dlbmVyaWNfdG9rZW4uYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2dlbmVyaWNfdG9rZW4uYwppbmRleCBjNTg2ZTkyLi4yNTRkZWZlIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19nZW5lcmljX3Rva2VuLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfZ2VuZXJpY190b2tlbi5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hc24xLmg+CiAKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWSAgICAgICAgUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYwppbmRleCBmNWVkOWY2Li5iNTQwOGU4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZ3NzX2tyYjUuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9rZXlzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2tleXMuYwppbmRleCAyNDU4OWJkLi4yMzRmYThkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2tleXMuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2tleXMuYwpAQCAtNjEsNyArNjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KICNpbmNsdWRlIDxsaW51eC9sY20uaD4KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWSAgICAgICAgUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jCmluZGV4IDBkM2MxNTguLjI4ZGI0NDIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19rcmI1X2VuY3R5cGVzLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VhbC5jCmluZGV4IDQyNzY4ZTUuLjFkNzRkNjUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VhbC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VhbC5jCkBAIC02NCw3ICs2NCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZXFudW0uYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VxbnVtLmMKaW5kZXggNjJhYzkwYy4uMjBkNTVjNyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZXFudW0uYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlcW51bS5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19rcmI1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV91bnNlYWwuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfdW5zZWFsLmMKaW5kZXggNmM5ODFkZC4uZGNmOTUxNSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV91bnNlYWwuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3Vuc2VhbC5jCkBAIC02Miw3ICs2Miw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19rcmI1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3dyYXAuYwppbmRleCA0YjYxNGM2Li5jYTdlOTJhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3dyYXAuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3dyYXAuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jCmluZGV4IDkyZDVhYjkuLjcwNjNkODUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3NfYXBpLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWSAgICAgICAgUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19ycGNfeGRyLmggYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19ycGNfeGRyLmgKaW5kZXggNjg1YTY4OC4uOWQ4OGM2MiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfcnBjX3hkci5oCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3JwY194ZHIuaApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hwcnRzb2NrLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKaW5kZXggYzU0OGFiMi4uZGU4NTZkZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwpAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgImdzc19ycGNfdXBjYWxsLmgiCiAKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9udWxsLmMgYi9uZXQvc3VucnBjL2F1dGhfbnVsbC5jCmluZGV4IDcxMmMxMjMuLmMyYTJiNTggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9udWxsLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX251bGwuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkuY3Jfb3BzCQk9ICZudWxsX2NyZWRvcHMsCiAJLmNyX2NvdW50CT0gQVRPTUlDX0lOSVQoMSksCiAJLmNyX2ZsYWdzCT0gMVVMIDw8IFJQQ0FVVEhfQ1JFRF9VUFRPREFURSwKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAJLmNyX21hZ2ljCT0gUlBDQVVUSF9DUkVEX01BR0lDLAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX3VuaXguYyBiL25ldC9zdW5ycGMvYXV0aF91bml4LmMKaW5kZXggZDVkNjkyMy4uNGZlZGEyZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX3VuaXguYworKysgYi9uZXQvc3VucnBjL2F1dGhfdW5peC5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNkZWZpbmUgVU5YX1dSSVRFU0xBQ0sJCSgyMSArIChVTlhfTUFYTk9ERU5BTUUgPj4gMikpCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2JhY2tjaGFubmVsX3Jxc3QuYyBiL25ldC9zdW5ycGMvYmFja2NoYW5uZWxfcnFzdC5jCmluZGV4IDk3NjFhMGQuLjY1MWY0OWEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYmFja2NoYW5uZWxfcnFzdC5jCisrKyBiL25ldC9zdW5ycGMvYmFja2NoYW5uZWxfcnFzdC5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2JjX3hwcnQuaD4KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICNkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19UUkFOUwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggOWFjZDZjZS4uMDVkYTEyYSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJzdW5ycGMuaCIKICNpbmNsdWRlICJuZXRucy5oIgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19DQUxMCiAjZW5kaWYKIApAQCAtMzA1LDYgKzMwNSwxMCBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqcGlwZWZzX3NiOwogCWludCBlcnI7CiAKKwllcnIgPSBycGNfY2xudF9kZWJ1Z2ZzX3JlZ2lzdGVyKGNsbnQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAlwaXBlZnNfc2IgPSBycGNfZ2V0X3NiX25ldChuZXQpOwogCWlmIChwaXBlZnNfc2IpIHsKIAkJZXJyID0gcnBjX3NldHVwX3BpcGVkaXIocGlwZWZzX3NiLCBjbG50KTsKQEAgLTMzMSw2ICszMzUsNyBAQAogb3V0OgogCWlmIChwaXBlZnNfc2IpCiAJCXJwY19wdXRfc2JfbmV0KG5ldCk7CisJcnBjX2NsbnRfZGVidWdmc191bnJlZ2lzdGVyKGNsbnQpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY3MCw2ICs2NzUsNyBAQAogCiAJcnBjX3VucmVnaXN0ZXJfY2xpZW50KGNsbnQpOwogCV9fcnBjX2NsbnRfcmVtb3ZlX3BpcGVkaXIoY2xudCk7CisJcnBjX2NsbnRfZGVidWdmc191bnJlZ2lzdGVyKGNsbnQpOwogCiAJLyoKIAkgKiBBIG5ldyB0cmFuc3BvcnQgd2FzIGNyZWF0ZWQuICAiY2xudCIgdGhlcmVmb3JlCkBAIC03NzEsNiArNzc3LDcgQEAKIAkJCXJjdV9kZXJlZmVyZW5jZShjbG50LT5jbF94cHJ0KS0+c2VydmVybmFtZSk7CiAJaWYgKGNsbnQtPmNsX3BhcmVudCAhPSBjbG50KQogCQlwYXJlbnQgPSBjbG50LT5jbF9wYXJlbnQ7CisJcnBjX2NsbnRfZGVidWdmc191bnJlZ2lzdGVyKGNsbnQpOwogCXJwY19jbG50X3JlbW92ZV9waXBlZGlyKGNsbnQpOwogCXJwY191bnJlZ2lzdGVyX2NsaWVudChjbG50KTsKIAlycGNfZnJlZV9pb3N0YXRzKGNsbnQtPmNsX21ldHJpY3MpOwpAQCAtMTM5Niw4ICsxNDAzLDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY19yZXN0YXJ0X2NhbGwpOwogCi0jaWZkZWYgUlBDX0RFQlVHCi1zdGF0aWMgY29uc3QgY2hhciAqcnBjX3Byb2NfbmFtZShjb25zdCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQorY29uc3QgY2hhcgorKnJwY19wcm9jX25hbWUoY29uc3Qgc3RydWN0IHJwY190YXNrICp0YXNrKQogewogCWNvbnN0IHN0cnVjdCBycGNfcHJvY2luZm8gKnByb2MgPSB0YXNrLT50a19tc2cucnBjX3Byb2M7CiAKQEAgLTI0MjEsNyArMjQyOSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNfY2FsbF9udWxsKTsKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIHN0YXRpYyB2b2lkIHJwY19zaG93X2hlYWRlcih2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gIi1waWQtIGZsZ3Mgc3RhdHVzIC1jbGllbnQtIC0tcnFzdHAtICIKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvZGVidWdmcy5jIGIvbmV0L3N1bnJwYy9kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxMWYzOQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9zdW5ycGMvZGVidWdmcy5jCkBAIC0wLDAgKzEsMjkyIEBACisvKioKKyAqIGRlYnVnZnMgaW50ZXJmYWNlIGZvciBzdW5ycGMKKyAqCisgKiAoYykgMjAxNCBKZWZmIExheXRvbiA8amxheXRvbkBwcmltYXJ5ZGF0YS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgorI2luY2x1ZGUgIm5ldG5zLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp0b3BkaXI7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqcnBjX2NsbnRfZGlyOworc3RhdGljIHN0cnVjdCBkZW50cnkgKnJwY194cHJ0X2RpcjsKKworc3RydWN0IHJwY19jbG50X2l0ZXIgeworCXN0cnVjdCBycGNfY2xudAkqY2xudDsKKwlsb2ZmX3QJCXBvczsKK307CisKK3N0YXRpYyBpbnQKK3Rhc2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQoreworCXUzMiB4aWQgPSAwOworCXN0cnVjdCBycGNfdGFzayAqdGFzayA9IHY7CisJc3RydWN0IHJwY19jbG50ICpjbG50ID0gdGFzay0+dGtfY2xpZW50OworCWNvbnN0IGNoYXIgKnJwY193YWl0cSA9ICJub25lIjsKKworCWlmIChSUENfSVNfUVVFVUVEKHRhc2spKQorCQlycGNfd2FpdHEgPSBycGNfcW5hbWUodGFzay0+dGtfd2FpdHF1ZXVlKTsKKworCWlmICh0YXNrLT50a19ycXN0cCkKKwkJeGlkID0gYmUzMl90b19jcHUodGFzay0+dGtfcnFzdHAtPnJxX3hpZCk7CisKKwlzZXFfcHJpbnRmKGYsICIlNXUgJTA0eCAlNmQgMHgleCAweCV4ICU4bGQgJXBzICVzdiV1ICVzIGE6JXBzIHE6JXNcbiIsCisJCXRhc2stPnRrX3BpZCwgdGFzay0+dGtfZmxhZ3MsIHRhc2stPnRrX3N0YXR1cywKKwkJY2xudC0+Y2xfY2xpZCwgeGlkLCB0YXNrLT50a190aW1lb3V0LCB0YXNrLT50a19vcHMsCisJCWNsbnQtPmNsX3Byb2dyYW0tPm5hbWUsIGNsbnQtPmNsX3ZlcnMsIHJwY19wcm9jX25hbWUodGFzayksCisJCXRhc2stPnRrX2FjdGlvbiwgcnBjX3dhaXRxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKgordGFza3Nfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBwb3MpCisJX19hY3F1aXJlcygmY2xudC0+Y2xfbG9jaykKK3sKKwlzdHJ1Y3QgcnBjX2NsbnRfaXRlciAqaXRlciA9IGYtPnByaXZhdGU7CisJbG9mZl90IHBvcyA9ICpwcG9zOworCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IGl0ZXItPmNsbnQ7CisJc3RydWN0IHJwY190YXNrICp0YXNrOworCisJaXRlci0+cG9zID0gcG9zICsgMTsKKwlzcGluX2xvY2soJmNsbnQtPmNsX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkodGFzaywgJmNsbnQtPmNsX3Rhc2tzLCB0a190YXNrKQorCQlpZiAocG9zLS0gPT0gMCkKKwkJCXJldHVybiB0YXNrOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqCit0YXNrc19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHJwY19jbG50X2l0ZXIgKml0ZXIgPSBmLT5wcml2YXRlOworCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IGl0ZXItPmNsbnQ7CisJc3RydWN0IHJwY190YXNrICp0YXNrID0gdjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0ID0gdGFzay0+dGtfdGFzay5uZXh0OworCisJKytpdGVyLT5wb3M7CisJKysqcG9zOworCisJLyogSWYgdGhlcmUncyBhbm90aGVyIHRhc2sgb24gbGlzdCwgcmV0dXJuIGl0ICovCisJaWYgKG5leHQgPT0gJmNsbnQtPmNsX3Rhc2tzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgcnBjX3Rhc2ssIHRrX3Rhc2spOworfQorCitzdGF0aWMgdm9pZAordGFza3Nfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCisJX19yZWxlYXNlcygmY2xudC0+Y2xfbG9jaykKK3sKKwlzdHJ1Y3QgcnBjX2NsbnRfaXRlciAqaXRlciA9IGYtPnByaXZhdGU7CisJc3RydWN0IHJwY19jbG50ICpjbG50ID0gaXRlci0+Y2xudDsKKworCXNwaW5fdW5sb2NrKCZjbG50LT5jbF9sb2NrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB0YXNrc19zZXFfb3BlcmF0aW9ucyA9IHsKKwkuc3RhcnQJPSB0YXNrc19zdGFydCwKKwkubmV4dAk9IHRhc2tzX25leHQsCisJLnN0b3AJPSB0YXNrc19zdG9wLAorCS5zaG93CT0gdGFza3Nfc2hvdywKK307CisKK3N0YXRpYyBpbnQgdGFza3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxwLCAmdGFza3Nfc2VxX29wZXJhdGlvbnMsCisJCQkJCXNpemVvZihzdHJ1Y3QgcnBjX2NsbnRfaXRlcikpOworCisJaWYgKCFyZXQpIHsKKwkJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJCXN0cnVjdCBycGNfY2xudF9pdGVyICppdGVyID0gc2VxLT5wcml2YXRlOworCisJCWl0ZXItPmNsbnQgPSBpbm9kZS0+aV9wcml2YXRlOworCisJCWlmICghYXRvbWljX2luY19ub3RfemVybygmaXRlci0+Y2xudC0+Y2xfY291bnQpKSB7CisJCQlzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxwKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cit0YXNrc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBycGNfY2xudF9pdGVyICppdGVyID0gc2VxLT5wcml2YXRlOworCisJcnBjX3JlbGVhc2VfY2xpZW50KGl0ZXItPmNsbnQpOworCXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGFza3NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdGFza3Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHRhc2tzX3JlbGVhc2UsCit9OworCitpbnQKK3JwY19jbG50X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHJwY19jbG50ICpjbG50KQoreworCWludCBsZW4sIGVycjsKKwljaGFyIG5hbWVbMjRdOyAvKiBlbm91Z2ggZm9yICIuLi8uLi9ycGNfeHBydC8gKyA4IGhleCBkaWdpdHMgKyBOVUxMICovCisKKwkvKiBBbHJlYWR5IHJlZ2lzdGVyZWQ/ICovCisJaWYgKGNsbnQtPmNsX2RlYnVnZnMpCisJCXJldHVybiAwOworCisJbGVuID0gc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXgiLCBjbG50LT5jbF9jbGlkKTsKKwlpZiAobGVuID49IHNpemVvZihuYW1lKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBtYWtlIHRoZSBwZXItY2xpZW50IGRpciAqLworCWNsbnQtPmNsX2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcnBjX2NsbnRfZGlyKTsKKwlpZiAoIWNsbnQtPmNsX2RlYnVnZnMpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogbWFrZSB0YXNrcyBmaWxlICovCisJZXJyID0gLUVOT01FTTsKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInRhc2tzIiwgU19JRlJFRyB8IFNfSVJVU1IsIGNsbnQtPmNsX2RlYnVnZnMsCisJCQkJIGNsbnQsICZ0YXNrc19mb3BzKSkKKwkJZ290byBvdXRfZXJyOworCisJZXJyID0gLUVJTlZBTDsKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGVuID0gc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiLi4vLi4vcnBjX3hwcnQvJXMiLAorCQkJcmN1X2RlcmVmZXJlbmNlKGNsbnQtPmNsX3hwcnQpLT5kZWJ1Z2ZzLT5kX25hbWUubmFtZSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJaWYgKGxlbiA+PSBzaXplb2YobmFtZSkpCisJCWdvdG8gb3V0X2VycjsKKworCWVyciA9IC1FTk9NRU07CisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9zeW1saW5rKCJ4cHJ0IiwgY2xudC0+Y2xfZGVidWdmcywgbmFtZSkpCisJCWdvdG8gb3V0X2VycjsKKworCXJldHVybiAwOworb3V0X2VycjoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2xudC0+Y2xfZGVidWdmcyk7CisJY2xudC0+Y2xfZGVidWdmcyA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKwordm9pZAorcnBjX2NsbnRfZGVidWdmc191bnJlZ2lzdGVyKHN0cnVjdCBycGNfY2xudCAqY2xudCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2xudC0+Y2xfZGVidWdmcyk7CisJY2xudC0+Y2xfZGVidWdmcyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3hwcnRfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSBmLT5wcml2YXRlOworCisJc2VxX3ByaW50ZihmLCAibmV0aWQ6ICVzXG4iLCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfTkVUSURdKTsKKwlzZXFfcHJpbnRmKGYsICJhZGRyOiAgJXNcbiIsIHhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSk7CisJc2VxX3ByaW50ZihmLCAicG9ydDogICVzXG4iLCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0pOworCXNlcV9wcmludGYoZiwgInN0YXRlOiAweCVseFxuIiwgeHBydC0+c3RhdGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit4cHJ0X2luZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBycGNfeHBydCAqeHBydCA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwlyZXQgPSBzaW5nbGVfb3BlbihmaWxwLCB4cHJ0X2luZm9fc2hvdywgeHBydCk7CisKKwlpZiAoIXJldCkgeworCQlpZiAoIXhwcnRfZ2V0KHhwcnQpKSB7CisJCQlzaW5nbGVfcmVsZWFzZShpbm9kZSwgZmlscCk7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3hwcnRfaW5mb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBycGNfeHBydCAqeHBydCA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwl4cHJ0X3B1dCh4cHJ0KTsKKwlyZXR1cm4gc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbHApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4cHJ0X2luZm9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0geHBydF9pbmZvX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSB4cHJ0X2luZm9fcmVsZWFzZSwKK307CisKK2ludAorcnBjX3hwcnRfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCit7CisJaW50IGxlbiwgaWQ7CisJc3RhdGljIGF0b21pY190CWN1cl9pZDsKKwljaGFyCQluYW1lWzldOyAvKiA4IGhleCBkaWdpdHMgKyBOVUxMIHRlcm0gKi8KKworCWlkID0gKHVuc2lnbmVkIGludClhdG9taWNfaW5jX3JldHVybigmY3VyX2lkKTsKKworCWxlbiA9IHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiV4IiwgaWQpOworCWlmIChsZW4gPj0gc2l6ZW9mKG5hbWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG1ha2UgdGhlIHBlci1jbGllbnQgZGlyICovCisJeHBydC0+ZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBycGNfeHBydF9kaXIpOworCWlmICgheHBydC0+ZGVidWdmcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBtYWtlIHRhc2tzIGZpbGUgKi8KKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImluZm8iLCBTX0lGUkVHIHwgU19JUlVTUiwgeHBydC0+ZGVidWdmcywKKwkJCQkgeHBydCwgJnhwcnRfaW5mb19mb3BzKSkgeworCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoeHBydC0+ZGVidWdmcyk7CisJCXhwcnQtPmRlYnVnZnMgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorcnBjX3hwcnRfZGVidWdmc191bnJlZ2lzdGVyKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoeHBydC0+ZGVidWdmcyk7CisJeHBydC0+ZGVidWdmcyA9IE5VTEw7Cit9CisKK3ZvaWQgX19leGl0CitzdW5ycGNfZGVidWdmc19leGl0KHZvaWQpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHRvcGRpcik7Cit9CisKK2ludCBfX2luaXQKK3N1bnJwY19kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKKwl0b3BkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN1bnJwYyIsIE5VTEwpOworCWlmICghdG9wZGlyKQorCQlnb3RvIG91dDsKKworCXJwY19jbG50X2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigicnBjX2NsbnQiLCB0b3BkaXIpOworCWlmICghcnBjX2NsbnRfZGlyKQorCQlnb3RvIG91dF9yZW1vdmU7CisKKwlycGNfeHBydF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInJwY194cHJ0IiwgdG9wZGlyKTsKKwlpZiAoIXJwY194cHJ0X2RpcikKKwkJZ290byBvdXRfcmVtb3ZlOworCisJcmV0dXJuIDA7CitvdXRfcmVtb3ZlOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZSh0b3BkaXIpOworCXRvcGRpciA9IE5VTEw7CitvdXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jIGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwppbmRleCAxODkxYTEwLi4wNTIwMjAxIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jCisrKyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogI2luY2x1ZGUgIm5ldG5zLmgiCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0JJTkQKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NjaGVkLmMgYi9uZXQvc3VucnBjL3NjaGVkLmMKaW5kZXggZmUzNDQxYS4uZDIwZjIzMiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zY2hlZC5jCisrKyBiL25ldC9zdW5ycGMvc2NoZWQuYwpAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSAic3VucnBjLmgiCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQkJUlBDREJHX1NDSEVECiAjZW5kaWYKIApAQCAtMjU4LDcgKzI1OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKFJQQ19ERUJVRykgfHwgZGVmaW5lZChSUENfVFJBQ0VQT0lOVFMpCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKSB8fCBJU19FTkFCTEVEKENPTkZJR19UUkFDRVBPSU5UUykKIHN0YXRpYyB2b2lkIHJwY190YXNrX3NldF9kZWJ1Z2luZm8oc3RydWN0IHJwY190YXNrICp0YXNrKQogewogCXN0YXRpYyBhdG9taWNfdCBycGNfcGlkOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdGF0cy5jIGIvbmV0L3N1bnJwYy9zdGF0cy5jCmluZGV4IDU0NTMwNDkuLjk3MTFhMTUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3RhdHMuYworKysgYi9uZXQvc3VucnBjL3N0YXRzLmMKQEAgLTExNiw3ICsxMTYsMTUgQEAKICAqLwogc3RydWN0IHJwY19pb3N0YXRzICpycGNfYWxsb2NfaW9zdGF0cyhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpCiB7Ci0JcmV0dXJuIGtjYWxsb2MoY2xudC0+Y2xfbWF4cHJvYywgc2l6ZW9mKHN0cnVjdCBycGNfaW9zdGF0cyksIEdGUF9LRVJORUwpOworCXN0cnVjdCBycGNfaW9zdGF0cyAqc3RhdHM7CisJaW50IGk7CisKKwlzdGF0cyA9IGtjYWxsb2MoY2xudC0+Y2xfbWF4cHJvYywgc2l6ZW9mKCpzdGF0cyksIEdGUF9LRVJORUwpOworCWlmIChzdGF0cykgeworCQlmb3IgKGkgPSAwOyBpIDwgY2xudC0+Y2xfbWF4cHJvYzsgaSsrKQorCQkJc3Bpbl9sb2NrX2luaXQoJnN0YXRzW2ldLm9tX2xvY2spOworCX0KKwlyZXR1cm4gc3RhdHM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNfYWxsb2NfaW9zdGF0cyk7CiAKQEAgLTEzNSwyMCArMTQzLDIxIEBACiAgKiBycGNfY291bnRfaW9zdGF0cyAtIHRhbGx5IHVwIHBlci10YXNrIHN0YXRzCiAgKiBAdGFzazogY29tcGxldGVkIHJwY190YXNrCiAgKiBAc3RhdHM6IGFycmF5IG9mIHN0YXQgc3RydWN0dXJlcwotICoKLSAqIFJlbGllcyBvbiB0aGUgY2FsbGVyIGZvciBzZXJpYWxpemF0aW9uLgogICovCiB2b2lkIHJwY19jb3VudF9pb3N0YXRzKGNvbnN0IHN0cnVjdCBycGNfdGFzayAqdGFzaywgc3RydWN0IHJwY19pb3N0YXRzICpzdGF0cykKIHsKIAlzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSA9IHRhc2stPnRrX3Jxc3RwOwogCXN0cnVjdCBycGNfaW9zdGF0cyAqb3BfbWV0cmljczsKLQlrdGltZV90IGRlbHRhOworCWt0aW1lX3QgZGVsdGEsIG5vdzsKIAogCWlmICghc3RhdHMgfHwgIXJlcSkKIAkJcmV0dXJuOwogCisJbm93ID0ga3RpbWVfZ2V0KCk7CiAJb3BfbWV0cmljcyA9ICZzdGF0c1t0YXNrLT50a19tc2cucnBjX3Byb2MtPnBfc3RhdGlkeF07CiAKKwlzcGluX2xvY2soJm9wX21ldHJpY3MtPm9tX2xvY2spOworCiAJb3BfbWV0cmljcy0+b21fb3BzKys7CiAJb3BfbWV0cmljcy0+b21fbnRyYW5zICs9IHJlcS0+cnFfbnRyYW5zOwogCW9wX21ldHJpY3MtPm9tX3RpbWVvdXRzICs9IHRhc2stPnRrX3RpbWVvdXRzOwpAQCAtMTYxLDggKzE3MCwxMCBAQAogCiAJb3BfbWV0cmljcy0+b21fcnR0ID0ga3RpbWVfYWRkKG9wX21ldHJpY3MtPm9tX3J0dCwgcmVxLT5ycV9ydHQpOwogCi0JZGVsdGEgPSBrdGltZV9zdWIoa3RpbWVfZ2V0KCksIHRhc2stPnRrX3N0YXJ0KTsKKwlkZWx0YSA9IGt0aW1lX3N1Yihub3csIHRhc2stPnRrX3N0YXJ0KTsKIAlvcF9tZXRyaWNzLT5vbV9leGVjdXRlID0ga3RpbWVfYWRkKG9wX21ldHJpY3MtPm9tX2V4ZWN1dGUsIGRlbHRhKTsKKworCXNwaW5fdW5sb2NrKCZvcF9tZXRyaWNzLT5vbV9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY19jb3VudF9pb3N0YXRzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jIGIvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jCmluZGV4IGNkMzAxMjAuLmUzN2ZiZWQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYworKysgYi9uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMKQEAgLTk3LDEzICs5NywyMCBAQAogCWVyciA9IHJlZ2lzdGVyX3JwY19waXBlZnMoKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDQ7Ci0jaWZkZWYgUlBDX0RFQlVHCisKKwllcnIgPSBzdW5ycGNfZGVidWdmc19pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ1OworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCXJwY19yZWdpc3Rlcl9zeXNjdGwoKTsKICNlbmRpZgogCXN2Y19pbml0X3hwcnRfc29jaygpOwkvKiBzdmMgc29jayB0cmFuc3BvcnQgKi8KIAlpbml0X3NvY2tldF94cHJ0KCk7CS8qIGNsbnQgc29jayB0cmFuc3BvcnQgKi8KIAlyZXR1cm4gMDsKIAorb3V0NToKKwl1bnJlZ2lzdGVyX3JwY19waXBlZnMoKTsKIG91dDQ6CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZzdW5ycGNfbmV0X29wcyk7CiBvdXQzOgpAQCAtMTIwLDEwICsxMjcsMTEgQEAKIAlycGNhdXRoX3JlbW92ZV9tb2R1bGUoKTsKIAljbGVhbnVwX3NvY2tldF94cHJ0KCk7CiAJc3ZjX2NsZWFudXBfeHBydF9zb2NrKCk7CisJc3VucnBjX2RlYnVnZnNfZXhpdCgpOwogCXVucmVnaXN0ZXJfcnBjX3BpcGVmcygpOwogCXJwY19kZXN0cm95X21lbXBvb2woKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnN1bnJwY19uZXRfb3BzKTsKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAJcnBjX3VucmVnaXN0ZXJfc3lzY3RsKCk7CiAjZW5kaWYKIAlyY3VfYmFycmllcigpOyAvKiBXYWl0IGZvciBjb21wbGV0aW9uIG9mIGNhbGxfcmN1KCkncyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmMKaW5kZXggY2E4YTc5NS4uMjc4M2ZkOCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYmNfeHBydC5oPgogCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3N1bnJwYy5oPgorCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfU1ZDRFNQCiAKIHN0YXRpYyB2b2lkIHN2Y191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0KTsKQEAgLTEwNDAsNyArMTA0Miw3IEBACiAvKgogICogZHByaW50ayB0aGUgZ2l2ZW4gZXJyb3Igd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUgY2xpZW50IHRoYXQgY2F1c2VkIGl0LgogICovCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogc3RhdGljIF9fcHJpbnRmKDIsIDMpCiB2b2lkIHN2Y19wcmludGsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CkBAIC0xMzE0LDI0ICsxMzE2LDI1IEBACiAJcnFzdHAtPnJxX3Jlcy50YWlsWzBdLmlvdl9iYXNlID0gTlVMTDsKIAlycXN0cC0+cnFfcmVzLnRhaWxbMF0uaW92X2xlbiA9IDA7CiAKLQlycXN0cC0+cnFfeGlkID0gc3ZjX2dldHUzMihhcmd2KTsKLQogCWRpciAgPSBzdmNfZ2V0bmwoYXJndik7CiAJaWYgKGRpciAhPSAwKSB7CiAJCS8qIGRpcmVjdGlvbiAhPSBDQUxMICovCiAJCXN2Y19wcmludGsocnFzdHAsICJiYWQgZGlyZWN0aW9uICVkLCBkcm9wcGluZyByZXF1ZXN0XG4iLCBkaXIpOwogCQlzZXJ2LT5zdl9zdGF0cy0+cnBjYmFkZm10Kys7Ci0JCXN2Y19kcm9wKHJxc3RwKTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0X2Ryb3A7CiAJfQogCiAJLyogUmV0dXJucyAxIGZvciBzZW5kLCAwIGZvciBkcm9wICovCi0JaWYgKHN2Y19wcm9jZXNzX2NvbW1vbihycXN0cCwgYXJndiwgcmVzdikpCi0JCXJldHVybiBzdmNfc2VuZChycXN0cCk7Ci0JZWxzZSB7Ci0JCXN2Y19kcm9wKHJxc3RwKTsKLQkJcmV0dXJuIDA7CisJaWYgKGxpa2VseShzdmNfcHJvY2Vzc19jb21tb24ocnFzdHAsIGFyZ3YsIHJlc3YpKSkgeworCQlpbnQgcmV0ID0gc3ZjX3NlbmQocnFzdHApOworCisJCXRyYWNlX3N2Y19wcm9jZXNzKHJxc3RwLCByZXQpOworCQlyZXR1cm4gcmV0OwogCX0KK291dF9kcm9wOgorCXRyYWNlX3N2Y19wcm9jZXNzKHJxc3RwLCAwKTsKKwlzdmNfZHJvcChycXN0cCk7CisJcmV0dXJuIDA7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKaW5kZXggYzE3OWNhMi4uYmJiM2IwNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNzb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hwcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvc3VucnBjLmg+CiAKICNkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19TVkNYUFJUCiAKQEAgLTc3MywzNSArNzc0LDQzIEBACiAKIAllcnIgPSBzdmNfYWxsb2NfYXJnKHJxc3RwKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAogCXRyeV90b19mcmVlemUoKTsKIAljb25kX3Jlc2NoZWQoKTsKKwllcnIgPSAtRUlOVFI7CiAJaWYgKHNpZ25hbGxlZCgpIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJcmV0dXJuIC1FSU5UUjsKKwkJZ290byBvdXQ7CiAKIAl4cHJ0ID0gc3ZjX2dldF9uZXh0X3hwcnQocnFzdHAsIHRpbWVvdXQpOwotCWlmIChJU19FUlIoeHBydCkpCi0JCXJldHVybiBQVFJfRVJSKHhwcnQpOworCWlmIChJU19FUlIoeHBydCkpIHsKKwkJZXJyID0gUFRSX0VSUih4cHJ0KTsKKwkJZ290byBvdXQ7CisJfQogCiAJbGVuID0gc3ZjX2hhbmRsZV94cHJ0KHJxc3RwLCB4cHJ0KTsKIAogCS8qIE5vIGRhdGEsIGluY29tcGxldGUgKFRDUCkgcmVhZCwgb3IgYWNjZXB0KCkgKi8KKwllcnIgPSAtRUFHQUlOOwogCWlmIChsZW4gPD0gMCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3JlbGVhc2U7CiAKIAljbGVhcl9iaXQoWFBUX09MRCwgJnhwcnQtPnhwdF9mbGFncyk7CiAKIAlycXN0cC0+cnFfc2VjdXJlID0geHBydC0+eHB0X29wcy0+eHBvX3NlY3VyZV9wb3J0KHJxc3RwKTsKIAlycXN0cC0+cnFfY2hhbmRsZS5kZWZlciA9IHN2Y19kZWZlcjsKKwlycXN0cC0+cnFfeGlkID0gc3ZjX2dldHUzMigmcnFzdHAtPnJxX2FyZy5oZWFkWzBdKTsKIAogCWlmIChzZXJ2LT5zdl9zdGF0cykKIAkJc2Vydi0+c3Zfc3RhdHMtPm5ldGNudCsrOworCXRyYWNlX3N2Y19yZWN2KHJxc3RwLCBsZW4pOwogCXJldHVybiBsZW47Ci1vdXQ6CitvdXRfcmVsZWFzZToKIAlycXN0cC0+cnFfcmVzLmxlbiA9IDA7CiAJc3ZjX3hwcnRfcmVsZWFzZShycXN0cCk7Ci0JcmV0dXJuIC1FQUdBSU47CitvdXQ6CisJdHJhY2Vfc3ZjX3JlY3YocnFzdHAsIGVycik7CisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19yZWN2KTsKIApAQCAtODIxLDEyICs4MzAsMTIgQEAKIGludCBzdmNfc2VuZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogewogCXN0cnVjdCBzdmNfeHBydAkqeHBydDsKLQlpbnQJCWxlbjsKKwlpbnQJCWxlbiA9IC1FRkFVTFQ7CiAJc3RydWN0IHhkcl9idWYJKnhiOwogCiAJeHBydCA9IHJxc3RwLT5ycV94cHJ0OwogCWlmICgheHBydCkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCWdvdG8gb3V0OwogCiAJLyogcmVsZWFzZSB0aGUgcmVjZWl2ZSBza2IgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcGx5ICovCiAJcnFzdHAtPnJxX3hwcnQtPnhwdF9vcHMtPnhwb19yZWxlYXNlX3Jxc3QocnFzdHApOwpAQCAtODQ5LDcgKzg1OCw5IEBACiAJc3ZjX3hwcnRfcmVsZWFzZShycXN0cCk7CiAKIAlpZiAobGVuID09IC1FQ09OTlJFRlVTRUQgfHwgbGVuID09IC1FTk9UQ09OTiB8fCBsZW4gPT0gLUVBR0FJTikKLQkJcmV0dXJuIDA7CisJCWxlbiA9IDA7CitvdXQ6CisJdHJhY2Vfc3ZjX3NlbmQocnFzdHAsIGxlbik7CiAJcmV0dXJuIGxlbjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCAzZjk1OWM2Li5mOWMwNTJkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMTAxOSwxNyArMTAxOSwxMiBAQAogCXhpZCA9ICpwKys7CiAJY2FsbGRpciA9ICpwOwogCi0JaWYgKGJjX3hwcnQpCi0JCXJlcSA9IHhwcnRfbG9va3VwX3Jxc3QoYmNfeHBydCwgeGlkKTsKLQotCWlmICghcmVxKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRQotCQkJIiVzOiBHb3QgdW5yZWNvZ25pemVkIHJlcGx5OiAiCi0JCQkiY2FsbGRpciAweCV4IHhwdF9iY194cHJ0ICVwIHhpZCAlMDh4XG4iLAotCQkJX19mdW5jX18sIG50b2hsKGNhbGxkaXIpLAotCQkJYmNfeHBydCwgbnRvaGwoeGlkKSk7CisJaWYgKCFiY194cHJ0KQogCQlyZXR1cm4gLUVBR0FJTjsKLQl9CisJc3Bpbl9sb2NrX2JoKCZiY194cHJ0LT50cmFuc3BvcnRfbG9jayk7CisJcmVxID0geHBydF9sb29rdXBfcnFzdChiY194cHJ0LCB4aWQpOworCWlmICghcmVxKQorCQlnb3RvIHVubG9ja19ub3Rmb3VuZDsKIAogCW1lbWNweSgmcmVxLT5ycV9wcml2YXRlX2J1ZiwgJnJlcS0+cnFfcmN2X2J1Ziwgc2l6ZW9mKHN0cnVjdCB4ZHJfYnVmKSk7CiAJLyoKQEAgLTEwNDAsMTEgKzEwMzUsMjEgQEAKIAlkc3QgPSAmcmVxLT5ycV9wcml2YXRlX2J1Zi5oZWFkWzBdOwogCXNyYyA9ICZycXN0cC0+cnFfYXJnLmhlYWRbMF07CiAJaWYgKGRzdC0+aW92X2xlbiA8IHNyYy0+aW92X2xlbikKLQkJcmV0dXJuIC1FQUdBSU47IC8qIHdoYXRldmVyOyBqdXN0IGdpdmluZyB1cC4gKi8KKwkJZ290byB1bmxvY2tfZWFnYWluOyAvKiB3aGF0ZXZlcjsganVzdCBnaXZpbmcgdXAuICovCiAJbWVtY3B5KGRzdC0+aW92X2Jhc2UsIHNyYy0+aW92X2Jhc2UsIHNyYy0+aW92X2xlbik7CiAJeHBydF9jb21wbGV0ZV9ycXN0KHJlcS0+cnFfdGFzaywgcnFzdHAtPnJxX2FyZy5sZW4pOwogCXJxc3RwLT5ycV9hcmcubGVuID0gMDsKKwlzcGluX3VubG9ja19iaCgmYmNfeHBydC0+dHJhbnNwb3J0X2xvY2spOwogCXJldHVybiAwOwordW5sb2NrX25vdGZvdW5kOgorCXByaW50ayhLRVJOX05PVElDRQorCQkiJXM6IEdvdCB1bnJlY29nbml6ZWQgcmVwbHk6ICIKKwkJImNhbGxkaXIgMHgleCB4cHRfYmNfeHBydCAlcCB4aWQgJTA4eFxuIiwKKwkJX19mdW5jX18sIG50b2hsKGNhbGxkaXIpLAorCQliY194cHJ0LCBudG9obCh4aWQpKTsKK3VubG9ja19lYWdhaW46CisJc3Bpbl91bmxvY2tfYmgoJmJjX3hwcnQtPnRyYW5zcG9ydF9sb2NrKTsKKwlyZXR1cm4gLUVBR0FJTjsKIH0KIAogc3RhdGljIGludCBjb3B5X3BhZ2VzX3RvX2t2ZWNzKHN0cnVjdCBrdmVjICp2ZWMsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBsZW4pCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N5c2N0bC5jIGIvbmV0L3N1bnJwYy9zeXNjdGwuYwppbmRleCBjOTljNThlLi44ODdmMDE4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N5c2N0bC5jCisrKyBiL25ldC9zdW5ycGMvc3lzY3RsLmMKQEAgLTM3LDcgKzM3LDcgQEAKIHVuc2lnbmVkIGludAlubG1fZGVidWc7CiBFWFBPUlRfU1lNQk9MX0dQTChubG1fZGVidWcpOwogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN1bnJwY190YWJsZV9oZWFkZXI7CiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzdW5ycGNfdGFibGVbXTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMKaW5kZXggNTZlNGUxNS4uZWJiZWZhZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMKQEAgLTQ5LDEzICs0OSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tZXRyaWNzLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2JjX3hwcnQuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zdW5ycGMuaD4KKwogI2luY2x1ZGUgInN1bnJwYy5oIgogCiAvKgogICogTG9jYWwgdmFyaWFibGVzCiAgKi8KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfWFBSVAogI2VuZGlmCiAKQEAgLTc3MiwxMSArNzc0LDE0IEBACiAJc3RydWN0IHJwY19ycXN0ICplbnRyeTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZ4cHJ0LT5yZWN2LCBycV9saXN0KQotCQlpZiAoZW50cnktPnJxX3hpZCA9PSB4aWQpCisJCWlmIChlbnRyeS0+cnFfeGlkID09IHhpZCkgeworCQkJdHJhY2VfeHBydF9sb29rdXBfcnFzdCh4cHJ0LCB4aWQsIDApOwogCQkJcmV0dXJuIGVudHJ5OworCQl9CiAKIAlkcHJpbnRrKCJSUEM6ICAgICAgIHhwcnRfbG9va3VwX3Jxc3QgZGlkIG5vdCBmaW5kIHhpZCAlMDh4XG4iLAogCQkJbnRvaGwoeGlkKSk7CisJdHJhY2VfeHBydF9sb29rdXBfcnFzdCh4cHJ0LCB4aWQsIC1FTk9FTlQpOwogCXhwcnQtPnN0YXQuYmFkX3hpZHMrKzsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTgxMCw2ICs4MTUsNyBAQAogCiAJZHByaW50aygiUlBDOiAlNXUgeGlkICUwOHggY29tcGxldGUgKCVkIGJ5dGVzIHJlY2VpdmVkKVxuIiwKIAkJCXRhc2stPnRrX3BpZCwgbnRvaGwocmVxLT5ycV94aWQpLCBjb3BpZWQpOworCXRyYWNlX3hwcnRfY29tcGxldGVfcnFzdCh4cHJ0LCByZXEtPnJxX3hpZCwgY29waWVkKTsKIAogCXhwcnQtPnN0YXQucmVjdnMrKzsKIAlyZXEtPnJxX3J0dCA9IGt0aW1lX3N1YihrdGltZV9nZXQoKSwgcmVxLT5ycV94dGltZSk7CkBAIC05MjYsNiArOTMyLDcgQEAKIAogCXJlcS0+cnFfeHRpbWUgPSBrdGltZV9nZXQoKTsKIAlzdGF0dXMgPSB4cHJ0LT5vcHMtPnNlbmRfcmVxdWVzdCh0YXNrKTsKKwl0cmFjZV94cHJ0X3RyYW5zbWl0KHhwcnQsIHJlcS0+cnFfeGlkLCBzdGF0dXMpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQl0YXNrLT50a19zdGF0dXMgPSBzdGF0dXM7CiAJCXJldHVybjsKQEAgLTEyOTYsNiArMTMwMyw3IEBACiAgKi8KIHN0cnVjdCBycGNfeHBydCAqeHBydF9jcmVhdGVfdHJhbnNwb3J0KHN0cnVjdCB4cHJ0X2NyZWF0ZSAqYXJncykKIHsKKwlpbnQgZXJyOwogCXN0cnVjdCBycGNfeHBydAkqeHBydDsKIAlzdHJ1Y3QgeHBydF9jbGFzcyAqdDsKIApAQCAtMTMzNiw2ICsxMzQ0LDEyIEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAorCWVyciA9IHJwY194cHJ0X2RlYnVnZnNfcmVnaXN0ZXIoeHBydCk7CisJaWYgKGVycikgeworCQl4cHJ0X2Rlc3Ryb3koeHBydCk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCiAJZHByaW50aygiUlBDOiAgICAgICBjcmVhdGVkIHRyYW5zcG9ydCAlcCB3aXRoICV1IHNsb3RzXG4iLCB4cHJ0LAogCQkJeHBydC0+bWF4X3JlcXMpOwogb3V0OgpAQCAtMTM1Miw2ICsxMzY2LDcgQEAKIAlkcHJpbnRrKCJSUEM6ICAgICAgIGRlc3Ryb3lpbmcgdHJhbnNwb3J0ICVwXG4iLCB4cHJ0KTsKIAlkZWxfdGltZXJfc3luYygmeHBydC0+dGltZXIpOwogCisJcnBjX3hwcnRfZGVidWdmc191bnJlZ2lzdGVyKHhwcnQpOwogCXJwY19kZXN0cm95X3dhaXRfcXVldWUoJnhwcnQtPmJpbmRpbmcpOwogCXJwY19kZXN0cm95X3dhaXRfcXVldWUoJnhwcnQtPnBlbmRpbmcpOwogCXJwY19kZXN0cm95X3dhaXRfcXVldWUoJnhwcnQtPnNlbmRpbmcpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jCmluZGV4IDYxNjZjOTguLmRmMDFkMTIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKQEAgLTQ5LDExICs0OSwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19UUkFOUwogI2VuZGlmCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiBzdGF0aWMgY29uc3QgY2hhciB0cmFuc2ZlcnR5cGVzW11bMTJdID0gewogCSJwdXJlIGlubGluZSIsCS8qIG5vIGNodW5rcyAqLwogCSIgcmVhZCBjaHVuayIsCS8qIHNvbWUgYXJndW1lbnQgdmlhIHJkbWEgcmVhZCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYyBiL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMKaW5kZXggNmE0NjE1ZC4uYmJkNjE1NSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jCkBAIC01NSw3ICs1NSw3IEBACiAKICNpbmNsdWRlICJ4cHJ0X3JkbWEuaCIKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfVFJBTlMKICNlbmRpZgogCkBAIC03Myw5ICs3Myw5IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tYXhfaW5saW5lX3dyaXRlID0gUlBDUkRNQV9ERUZfSU5MSU5FOwogc3RhdGljIHVuc2lnbmVkIGludCB4cHJ0X3JkbWFfaW5saW5lX3dyaXRlX3BhZGRpbmc7CiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tZW1yZWdfc3RyYXRlZ3kgPSBSUENSRE1BX0ZSTVI7Ci0gICAgICAgICAgICAgICAgaW50IHhwcnRfcmRtYV9wYWRfb3B0aW1pemUgPSAwOworCQlpbnQgeHBydF9yZG1hX3BhZF9vcHRpbWl6ZSA9IDE7CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWluX3Nsb3RfdGFibGVfc2l6ZSA9IFJQQ1JETUFfTUlOX1NMT1RfVEFCTEU7CiBzdGF0aWMgdW5zaWduZWQgaW50IG1heF9zbG90X3RhYmxlX3NpemUgPSBSUENSRE1BX01BWF9TTE9UX1RBQkxFOwpAQCAtNTk5LDcgKzU5OSw3IEBACiAKIAlpZiAocmVxLT5ybF9uaW92cyA9PSAwKQogCQlyYyA9IHJwY3JkbWFfbWFyc2hhbF9yZXEocnFzdCk7Ci0JZWxzZSBpZiAocl94cHJ0LT5yeF9pYS5yaV9tZW1yZWdfc3RyYXRlZ3kgPT0gUlBDUkRNQV9GUk1SKQorCWVsc2UgaWYgKHJfeHBydC0+cnhfaWEucmlfbWVtcmVnX3N0cmF0ZWd5ICE9IFJQQ1JETUFfQUxMUEhZU0lDQUwpCiAJCXJjID0gcnBjcmRtYV9tYXJzaGFsX2NodW5rcyhycXN0LCAwKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIGZhaWxlZF9tYXJzaGFsOwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJaW50IHJjOwogCiAJZHByaW50aygiUlBDUkRNQSBNb2R1bGUgUmVtb3ZlZCwgZGVyZWdpc3RlciBSUEMgUkRNQSB0cmFuc3BvcnRcbiIpOwotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAlpZiAoc3VucnBjX3RhYmxlX2hlYWRlcikgewogCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShzdW5ycGNfdGFibGVfaGVhZGVyKTsKIAkJc3VucnBjX3RhYmxlX2hlYWRlciA9IE5VTEw7CkBAIC03MzYsNyArNzM2LDcgQEAKIAlkcHJpbnRrKCJcdFBhZGRpbmcgJWRcblx0TWVtcmVnICVkXG4iLAogCQl4cHJ0X3JkbWFfaW5saW5lX3dyaXRlX3BhZGRpbmcsIHhwcnRfcmRtYV9tZW1yZWdfc3RyYXRlZ3kpOwogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCWlmICghc3VucnBjX3RhYmxlX2hlYWRlcikKIAkJc3VucnBjX3RhYmxlX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShzdW5ycGNfdGFibGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMKaW5kZXggNjFjNDEyOS4uYzk4ZTQwNiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYwpAQCAtNTcsMTEgKzU3LDEyIEBACiAgKiBHbG9iYWxzL01hY3JvcwogICovCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX1RSQU5TCiAjZW5kaWYKIAogc3RhdGljIHZvaWQgcnBjcmRtYV9yZXNldF9mcm1ycyhzdHJ1Y3QgcnBjcmRtYV9pYSAqKTsKK3N0YXRpYyB2b2lkIHJwY3JkbWFfcmVzZXRfZm1ycyhzdHJ1Y3QgcnBjcmRtYV9pYSAqKTsKIAogLyoKICAqIGludGVybmFsIGZ1bmN0aW9ucwpAQCAtMTA1LDEzICsxMDYsNTEgQEAKIAogc3RhdGljIERFQ0xBUkVfVEFTS0xFVChycGNyZG1hX3Rhc2tsZXRfZywgcnBjcmRtYV9ydW5fdGFza2xldCwgMFVMKTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhc3luY19ldmVudFtdID0geworCSJDUSBlcnJvciIsCisJIlFQIGZhdGFsIGVycm9yIiwKKwkiUVAgcmVxdWVzdCBlcnJvciIsCisJIlFQIGFjY2VzcyBlcnJvciIsCisJImNvbW11bmljYXRpb24gZXN0YWJsaXNoZWQiLAorCSJzZW5kIHF1ZXVlIGRyYWluZWQiLAorCSJwYXRoIG1pZ3JhdGlvbiBzdWNjZXNzZnVsIiwKKwkicGF0aCBtaWcgZXJyb3IiLAorCSJkZXZpY2UgZmF0YWwgZXJyb3IiLAorCSJwb3J0IGFjdGl2ZSIsCisJInBvcnQgZXJyb3IiLAorCSJMSUQgY2hhbmdlIiwKKwkiUF9rZXkgY2hhbmdlIiwKKwkiU00gY2hhbmdlIiwKKwkiU1JRIGVycm9yIiwKKwkiU1JRIGxpbWl0IHJlYWNoZWQiLAorCSJsYXN0IFdRRSByZWFjaGVkIiwKKwkiY2xpZW50IHJlcmVnaXN0ZXIiLAorCSJHSUQgY2hhbmdlIiwKK307CisKKyNkZWZpbmUgQVNZTkNfTVNHKHN0YXR1cykJCQkJCVwKKwkoKHN0YXR1cykgPCBBUlJBWV9TSVpFKGFzeW5jX2V2ZW50KSA/CQkJXAorCQlhc3luY19ldmVudFsoc3RhdHVzKV0gOiAidW5rbm93biBhc3luYyBlcnJvciIpCisKK3N0YXRpYyB2b2lkCitycGNyZG1hX3NjaGVkdWxlX3Rhc2tsZXQoc3RydWN0IGxpc3RfaGVhZCAqc2NoZWRfbGlzdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJwY3JkbWFfdGtfbG9ja19nLCBmbGFncyk7CisJbGlzdF9zcGxpY2VfdGFpbChzY2hlZF9saXN0LCAmcnBjcmRtYV90YXNrbGV0c19nKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycGNyZG1hX3RrX2xvY2tfZywgZmxhZ3MpOworCXRhc2tsZXRfc2NoZWR1bGUoJnJwY3JkbWFfdGFza2xldF9nKTsKK30KKwogc3RhdGljIHZvaWQKIHJwY3JkbWFfcXBfYXN5bmNfZXJyb3JfdXBjYWxsKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmNvbnRleHQpCiB7CiAJc3RydWN0IHJwY3JkbWFfZXAgKmVwID0gY29udGV4dDsKIAotCWRwcmludGsoIlJQQzogICAgICAgJXM6IFFQIGVycm9yICVYIG9uIGRldmljZSAlcyBlcCAlcFxuIiwKLQkJX19mdW5jX18sIGV2ZW50LT5ldmVudCwgZXZlbnQtPmRldmljZS0+bmFtZSwgY29udGV4dCk7CisJcHJfZXJyKCJSUEM6ICAgICAgICVzOiAlcyBvbiBkZXZpY2UgJXMgZXAgJXBcbiIsCisJICAgICAgIF9fZnVuY19fLCBBU1lOQ19NU0coZXZlbnQtPmV2ZW50KSwKKwkJZXZlbnQtPmRldmljZS0+bmFtZSwgY29udGV4dCk7CiAJaWYgKGVwLT5yZXBfY29ubmVjdGVkID09IDEpIHsKIAkJZXAtPnJlcF9jb25uZWN0ZWQgPSAtRUlPOwogCQllcC0+cmVwX2Z1bmMoZXApOwpAQCAtMTI0LDggKzE2Myw5IEBACiB7CiAJc3RydWN0IHJwY3JkbWFfZXAgKmVwID0gY29udGV4dDsKIAotCWRwcmludGsoIlJQQzogICAgICAgJXM6IENRIGVycm9yICVYIG9uIGRldmljZSAlcyBlcCAlcFxuIiwKLQkJX19mdW5jX18sIGV2ZW50LT5ldmVudCwgZXZlbnQtPmRldmljZS0+bmFtZSwgY29udGV4dCk7CisJcHJfZXJyKCJSUEM6ICAgICAgICVzOiAlcyBvbiBkZXZpY2UgJXMgZXAgJXBcbiIsCisJICAgICAgIF9fZnVuY19fLCBBU1lOQ19NU0coZXZlbnQtPmV2ZW50KSwKKwkJZXZlbnQtPmRldmljZS0+bmFtZSwgY29udGV4dCk7CiAJaWYgKGVwLT5yZXBfY29ubmVjdGVkID09IDEpIHsKIAkJZXAtPnJlcF9jb25uZWN0ZWQgPSAtRUlPOwogCQllcC0+cmVwX2Z1bmMoZXApOwpAQCAtMjQzLDcgKzI4Myw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBzY2hlZF9saXN0OwogCXN0cnVjdCBpYl93YyAqd2NzOwogCWludCBidWRnZXQsIGNvdW50LCByYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJSU5JVF9MSVNUX0hFQUQoJnNjaGVkX2xpc3QpOwogCWJ1ZGdldCA9IFJQQ1JETUFfV0NfQlVER0VUIC8gUlBDUkRNQV9QT0xMU0laRTsKQEAgLTI2MSwxMCArMzAwLDcgQEAKIAlyYyA9IDA7CiAKIG91dF9zY2hlZHVsZToKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnBjcmRtYV90a19sb2NrX2csIGZsYWdzKTsKLQlsaXN0X3NwbGljZV90YWlsKCZzY2hlZF9saXN0LCAmcnBjcmRtYV90YXNrbGV0c19nKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycGNyZG1hX3RrX2xvY2tfZywgZmxhZ3MpOwotCXRhc2tsZXRfc2NoZWR1bGUoJnJwY3JkbWFfdGFza2xldF9nKTsKKwlycGNyZG1hX3NjaGVkdWxlX3Rhc2tsZXQoJnNjaGVkX2xpc3QpOwogCXJldHVybiByYzsKIH0KIApAQCAtMzA5LDExICszNDUsMTggQEAKIHN0YXRpYyB2b2lkCiBycGNyZG1hX2ZsdXNoX2NxcyhzdHJ1Y3QgcnBjcmRtYV9lcCAqZXApCiB7Ci0JcnBjcmRtYV9yZWN2Y3FfdXBjYWxsKGVwLT5yZXBfYXR0ci5yZWN2X2NxLCBlcCk7Ci0JcnBjcmRtYV9zZW5kY3FfdXBjYWxsKGVwLT5yZXBfYXR0ci5zZW5kX2NxLCBlcCk7CisJc3RydWN0IGliX3djIHdjOworCUxJU1RfSEVBRChzY2hlZF9saXN0KTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGVwLT5yZXBfYXR0ci5yZWN2X2NxLCAxLCAmd2MpID4gMCkKKwkJcnBjcmRtYV9yZWN2Y3FfcHJvY2Vzc193Yygmd2MsICZzY2hlZF9saXN0KTsKKwlpZiAoIWxpc3RfZW1wdHkoJnNjaGVkX2xpc3QpKQorCQlycGNyZG1hX3NjaGVkdWxlX3Rhc2tsZXQoJnNjaGVkX2xpc3QpOworCXdoaWxlIChpYl9wb2xsX2NxKGVwLT5yZXBfYXR0ci5zZW5kX2NxLCAxLCAmd2MpID4gMCkKKwkJcnBjcmRtYV9zZW5kY3FfcHJvY2Vzc193Yygmd2MpOwogfQogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjb25uW10gPSB7CiAJImFkZHJlc3MgcmVzb2x2ZWQiLAogCSJhZGRyZXNzIGVycm9yIiwKQEAgLTM0NCw3ICszODcsNyBAQAogCXN0cnVjdCBycGNyZG1hX3hwcnQgKnhwcnQgPSBpZC0+Y29udGV4dDsKIAlzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEgPSAmeHBydC0+cnhfaWE7CiAJc3RydWN0IHJwY3JkbWFfZXAgKmVwID0gJnhwcnQtPnJ4X2VwOwotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopICZlcC0+cmVwX3JlbW90ZV9hZGRyOwogI2VuZGlmCiAJc3RydWN0IGliX3FwX2F0dHIgYXR0cjsKQEAgLTQwOCw3ICs0NTEsNyBAQAogCQlicmVhazsKIAl9CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAJaWYgKGNvbm5zdGF0ZSA9PSAxKSB7CiAJCWludCBpcmQgPSBhdHRyLm1heF9kZXN0X3JkX2F0b21pYzsKIAkJaW50IHRpcmQgPSBlcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlczsKQEAgLTczMyw3ICs3NzYsOSBAQAogCiAJLyogc2V0IHRyaWdnZXIgZm9yIHJlcXVlc3Rpbmcgc2VuZCBjb21wbGV0aW9uICovCiAJZXAtPnJlcF9jcWluaXQgPSBlcC0+cmVwX2F0dHIuY2FwLm1heF9zZW5kX3dyLzIgLSAxOwotCWlmIChlcC0+cmVwX2NxaW5pdCA8PSAyKQorCWlmIChlcC0+cmVwX2NxaW5pdCA+IFJQQ1JETUFfTUFYX1VOU0lHTkFMRURfU0VORFMpCisJCWVwLT5yZXBfY3Fpbml0ID0gUlBDUkRNQV9NQVhfVU5TSUdOQUxFRF9TRU5EUzsKKwllbHNlIGlmIChlcC0+cmVwX2NxaW5pdCA8PSAyKQogCQllcC0+cmVwX2NxaW5pdCA9IDA7CiAJSU5JVF9DUUNPVU5UKGVwKTsKIAllcC0+cmVwX2lhID0gaWE7CkBAIC04NjYsOCArOTExLDE5IEBACiAJCXJwY3JkbWFfZXBfZGlzY29ubmVjdChlcCwgaWEpOwogCQlycGNyZG1hX2ZsdXNoX2NxcyhlcCk7CiAKLQkJaWYgKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kgPT0gUlBDUkRNQV9GUk1SKQorCQlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKKwkJY2FzZSBSUENSRE1BX0ZSTVI6CiAJCQlycGNyZG1hX3Jlc2V0X2ZybXJzKGlhKTsKKwkJCWJyZWFrOworCQljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6CisJCQlycGNyZG1hX3Jlc2V0X2ZtcnMoaWEpOworCQkJYnJlYWs7CisJCWNhc2UgUlBDUkRNQV9BTExQSFlTSUNBTDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmMgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KIAogCQl4cHJ0ID0gY29udGFpbmVyX29mKGlhLCBzdHJ1Y3QgcnBjcmRtYV94cHJ0LCByeF9pYSk7CiAJCWlkID0gcnBjcmRtYV9jcmVhdGVfaWQoeHBydCwgaWEsCkBAIC0xMjg3LDYgKzEzNDMsMzQgQEAKIAlrZnJlZShidWYtPnJiX3Bvb2wpOwogfQogCisvKiBBZnRlciBhIGRpc2Nvbm5lY3QsIHVubWFwIGFsbCBGTVJzLgorICoKKyAqIFRoaXMgaXMgaW52b2tlZCBvbmx5IGluIHRoZSB0cmFuc3BvcnQgY29ubmVjdCB3b3JrZXIgaW4gb3JkZXIKKyAqIHRvIHNlcmlhbGl6ZSB3aXRoIHJwY3JkbWFfcmVnaXN0ZXJfZm1yX2V4dGVybmFsKCkuCisgKi8KK3N0YXRpYyB2b2lkCitycGNyZG1hX3Jlc2V0X2ZtcnMoc3RydWN0IHJwY3JkbWFfaWEgKmlhKQoreworCXN0cnVjdCBycGNyZG1hX3hwcnQgKnJfeHBydCA9CisJCQkJY29udGFpbmVyX29mKGlhLCBzdHJ1Y3QgcnBjcmRtYV94cHJ0LCByeF9pYSk7CisJc3RydWN0IHJwY3JkbWFfYnVmZmVyICpidWYgPSAmcl94cHJ0LT5yeF9idWY7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCBycGNyZG1hX213ICpyOworCUxJU1RfSEVBRChsKTsKKwlpbnQgcmM7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJmJ1Zi0+cmJfYWxsKSB7CisJCXIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHJwY3JkbWFfbXcsIG13X2FsbCk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJmwpOworCQlsaXN0X2FkZCgmci0+ci5mbXItPmxpc3QsICZsKTsKKwkJcmMgPSBpYl91bm1hcF9mbXIoJmwpOworCQlpZiAocmMpCisJCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBpYl91bm1hcF9mbXIgZmFpbGVkICVpXG4iLAorCQkJCV9fZnVuY19fLCByYyk7CisJfQorfQorCiAvKiBBZnRlciBhIGRpc2Nvbm5lY3QsIGEgZmx1c2hlZCBGQVNUX1JFR19NUiBjYW4gbGVhdmUgYW4gRlJNUiBpbgogICogYW4gdW51c2FibGUgc3RhdGUuIEZpbmQgRlJNUnMgaW4gdGhpcyBzdGF0ZSBhbmQgZGVyZWcgLyByZWcKICAqIGVhY2guICBGUk1ScyB0aGF0IGFyZSBWQUxJRCBhbmQgYXR0YWNoZWQgdG8gYW4gcnBjcmRtYV9yZXEgYXJlCkBAIC0xOTE4LDEwICsyMDAyLDEwIEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKHJjKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiByYzsKIAogCXJldHVybiBuc2VnczsKIH0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmggYi9uZXQvc3VucnBjL3hwcnRyZG1hL3hwcnRfcmRtYS5oCmluZGV4IGFjN2ZjOWEuLmI3OTkwNDEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmgKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaApAQCAtOTcsNiArOTcsMTIgQEAKIAlzdHJ1Y3QgaWJfd2MJCXJlcF9yZWN2X3djc1tSUENSRE1BX1BPTExTSVpFXTsKIH07CiAKKy8qCisgKiBGb3JjZSBhIHNpZ25hbGVkIFNFTkQgV29yayBSZXF1ZXN0IGV2ZXJ5IHNvIG9mdGVuLAorICogaW4gY2FzZSB0aGUgcHJvdmlkZXIgbmVlZHMgdG8gZG8gc29tZSBob3VzZWtlZXBpbmcuCisgKi8KKyNkZWZpbmUgUlBDUkRNQV9NQVhfVU5TSUdOQUxFRF9TRU5EUwkoMzIpCisKICNkZWZpbmUgSU5JVF9DUUNPVU5UKGVwKSBhdG9taWNfc2V0KCYoZXApLT5yZXBfY3Fjb3VudCwgKGVwKS0+cmVwX2NxaW5pdCkKICNkZWZpbmUgREVDUl9DUUNPVU5UKGVwKSBhdG9taWNfc3ViX3JldHVybigxLCAmKGVwKS0+cmVwX2NxY291bnQpCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHNvY2suYyBiL25ldC9zdW5ycGMveHBydHNvY2suYwppbmRleCAzYjMwNWFiLi44N2NlN2U4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCkBAIC03NSw3ICs3NSw3IEBACiAgKiBzb21lb25lIGVsc2UncyBmaWxlIG5hbWVzIQogICovCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWluX3Nsb3RfdGFibGVfc2l6ZSA9IFJQQ19NSU5fU0xPVF9UQUJMRTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3Nsb3RfdGFibGVfc2l6ZSA9IFJQQ19NQVhfU0xPVF9UQUJMRTsKQEAgLTE4Niw3ICsxODYsNyBAQAogICovCiAjZGVmaW5lIFhTX0lETEVfRElTQ19UTwkJKDVVICogNjAgKiBIWikKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgdW5kZWYgIFJQQ19ERUJVR19EQVRBCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX1RSQU5TCiAjZW5kaWYKQEAgLTIxNiw2NSArMjE2LDYgQEAKIH0KICNlbmRpZgogCi1zdHJ1Y3Qgc29ja194cHJ0IHsKLQlzdHJ1Y3QgcnBjX3hwcnQJCXhwcnQ7Ci0KLQkvKgotCSAqIE5ldHdvcmsgbGF5ZXIKLQkgKi8KLQlzdHJ1Y3Qgc29ja2V0ICoJCXNvY2s7Ci0Jc3RydWN0IHNvY2sgKgkJaW5ldDsKLQotCS8qCi0JICogU3RhdGUgb2YgVENQIHJlcGx5IHJlY2VpdmUKLQkgKi8KLQlfX2JlMzIJCQl0Y3BfZnJhZ2hkciwKLQkJCQl0Y3BfeGlkLAotCQkJCXRjcF9jYWxsZGlyOwotCi0JdTMyCQkJdGNwX29mZnNldCwKLQkJCQl0Y3BfcmVjbGVuOwotCi0JdW5zaWduZWQgbG9uZwkJdGNwX2NvcGllZCwKLQkJCQl0Y3BfZmxhZ3M7Ci0KLQkvKgotCSAqIENvbm5lY3Rpb24gb2YgdHJhbnNwb3J0cwotCSAqLwotCXN0cnVjdCBkZWxheWVkX3dvcmsJY29ubmVjdF93b3JrZXI7Ci0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJc3JjYWRkcjsKLQl1bnNpZ25lZCBzaG9ydAkJc3JjcG9ydDsKLQotCS8qCi0JICogVURQIHNvY2tldCBidWZmZXIgc2l6ZSBwYXJhbWV0ZXJzCi0JICovCi0Jc2l6ZV90CQkJcmN2c2l6ZSwKLQkJCQlzbmRzaXplOwotCi0JLyoKLQkgKiBTYXZlZCBzb2NrZXQgY2FsbGJhY2sgYWRkcmVzc2VzCi0JICovCi0Jdm9pZAkJCSgqb2xkX2RhdGFfcmVhZHkpKHN0cnVjdCBzb2NrICopOwotCXZvaWQJCQkoKm9sZF9zdGF0ZV9jaGFuZ2UpKHN0cnVjdCBzb2NrICopOwotCXZvaWQJCQkoKm9sZF93cml0ZV9zcGFjZSkoc3RydWN0IHNvY2sgKik7Ci0Jdm9pZAkJCSgqb2xkX2Vycm9yX3JlcG9ydCkoc3RydWN0IHNvY2sgKik7Ci19OwotCi0vKgotICogVENQIHJlY2VpdmUgc3RhdGUgZmxhZ3MKLSAqLwotI2RlZmluZSBUQ1BfUkNWX0xBU1RfRlJBRwkoMVVMIDw8IDApCi0jZGVmaW5lIFRDUF9SQ1ZfQ09QWV9GUkFHSERSCSgxVUwgPDwgMSkKLSNkZWZpbmUgVENQX1JDVl9DT1BZX1hJRAkoMVVMIDw8IDIpCi0jZGVmaW5lIFRDUF9SQ1ZfQ09QWV9EQVRBCSgxVUwgPDwgMykKLSNkZWZpbmUgVENQX1JDVl9SRUFEX0NBTExESVIJKDFVTCA8PCA0KQotI2RlZmluZSBUQ1BfUkNWX0NPUFlfQ0FMTERJUgkoMVVMIDw8IDUpCi0KLS8qCi0gKiBUQ1AgUlBDIGZsYWdzCi0gKi8KLSNkZWZpbmUgVENQX1JQQ19SRVBMWQkJKDFVTCA8PCA2KQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycGNfeHBydCAqeHBydF9mcm9tX3NvY2soc3RydWN0IHNvY2sgKnNrKQogewogCXJldHVybiAoc3RydWN0IHJwY194cHJ0ICopIHNrLT5za191c2VyX2RhdGE7CkBAIC0xNDE1LDYgKzEzNTYsNyBAQAogCiAJZHByaW50aygiUlBDOiAgICAgICB4c190Y3BfZGF0YV9yZWN2IHN0YXJ0ZWRcbiIpOwogCWRvIHsKKwkJdHJhY2VfeHNfdGNwX2RhdGFfcmVjdih0cmFuc3BvcnQpOwogCQkvKiBSZWFkIGluIGEgbmV3IGZyYWdtZW50IG1hcmtlciBpZiBuZWNlc3NhcnkgKi8KIAkJLyogQ2FuIHdlIGV2ZXIgcmVhbGx5IGV4cGVjdCB0byBnZXQgY29tcGxldGVseSBlbXB0eSBmcmFnbWVudHM/ICovCiAJCWlmICh0cmFuc3BvcnQtPnRjcF9mbGFncyAmIFRDUF9SQ1ZfQ09QWV9GUkFHSERSKSB7CkBAIC0xNDM5LDYgKzEzODEsNyBAQAogCQkvKiBTa2lwIG92ZXIgYW55IHRyYWlsaW5nIGJ5dGVzIG9uIHNob3J0IHJlYWRzICovCiAJCXhzX3RjcF9yZWFkX2Rpc2NhcmQodHJhbnNwb3J0LCAmZGVzYyk7CiAJfSB3aGlsZSAoZGVzYy5jb3VudCk7CisJdHJhY2VfeHNfdGNwX2RhdGFfcmVjdih0cmFuc3BvcnQpOwogCWRwcmludGsoIlJQQzogICAgICAgeHNfdGNwX2RhdGFfcmVjdiBkb25lXG4iKTsKIAlyZXR1cm4gbGVuIC0gZGVzYy5jb3VudDsKIH0KQEAgLTE0NTQsMTIgKzEzOTcsMTUgQEAKIAlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CiAJcmVhZF9kZXNjcmlwdG9yX3QgcmRfZGVzYzsKIAlpbnQgcmVhZDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKIAogCWRwcmludGsoIlJQQzogICAgICAgeHNfdGNwX2RhdGFfcmVhZHkuLi5cbiIpOwogCiAJcmVhZF9sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7Ci0JaWYgKCEoeHBydCA9IHhwcnRfZnJvbV9zb2NrKHNrKSkpCisJaWYgKCEoeHBydCA9IHhwcnRfZnJvbV9zb2NrKHNrKSkpIHsKKwkJcmVhZCA9IDA7CiAJCWdvdG8gb3V0OworCX0KIAkvKiBBbnkgZGF0YSBtZWFucyB3ZSBoYWQgYSB1c2VmdWwgY29udmVyc2F0aW9uLCBzbwogCSAqIHRoZSB3ZSBkb24ndCBuZWVkIHRvIGRlbGF5IHRoZSBuZXh0IHJlY29ubmVjdAogCSAqLwpAQCAtMTQ3MSw4ICsxNDE3LDExIEBACiAJZG8gewogCQlyZF9kZXNjLmNvdW50ID0gNjU1MzY7CiAJCXJlYWQgPSB0Y3BfcmVhZF9zb2NrKHNrLCAmcmRfZGVzYywgeHNfdGNwX2RhdGFfcmVjdik7CisJCWlmIChyZWFkID4gMCkKKwkJCXRvdGFsICs9IHJlYWQ7CiAJfSB3aGlsZSAocmVhZCA+IDApOwogb3V0OgorCXRyYWNlX3hzX3RjcF9kYXRhX3JlYWR5KHhwcnQsIHJlYWQsIHRvdGFsKTsKIAlyZWFkX3VubG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogfQogCkBAIC0zMDQyLDcgKzI5OTEsNyBAQAogICovCiBpbnQgaW5pdF9zb2NrZXRfeHBydCh2b2lkKQogewotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAlpZiAoIXN1bnJwY190YWJsZV9oZWFkZXIpCiAJCXN1bnJwY190YWJsZV9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3VucnBjX3RhYmxlKTsKICNlbmRpZgpAQCAtMzA2MSw3ICszMDEwLDcgQEAKICAqLwogdm9pZCBjbGVhbnVwX3NvY2tldF94cHJ0KHZvaWQpCiB7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCWlmIChzdW5ycGNfdGFibGVfaGVhZGVyKSB7CiAJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN1bnJwY190YWJsZV9oZWFkZXIpOwogCQlzdW5ycGNfdGFibGVfaGVhZGVyID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCmluZGV4IDY1ZTdiMDguLjUzNzRiMWIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKKysrIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQpAQCAtMTc5LDYgKzE3OSwxMiBAQAogIyAkKFEpJChNQUtFKSAkKG1vZGJ1aWx0aW4pPWRpcgogbW9kYnVpbHRpbiA6PSAtZiAkKHNyY3RyZWUpL3NjcmlwdHMvTWFrZWZpbGUubW9kYnVpbHRpbiBvYmoKIAorIyMjCisjIFNob3J0aGFuZCBmb3IgJChRKSQoTUFLRSkgLWYgc2NyaXB0cy9NYWtlZmlsZS5kdGJpbnN0IG9iaj0KKyMgVXNhZ2U6CisjICQoUSkkKE1BS0UpICQoZHRiaW5zdCk9ZGlyCitkdGJpbnN0IDo9IC1mICQoaWYgJChLQlVJTERfU1JDKSwkKHNyY3RyZWUpLylzY3JpcHRzL01ha2VmaWxlLmR0Ymluc3Qgb2JqCisKICMgUHJlZml4IC1JIHdpdGggJChzcmN0cmVlKSBpZiBpdCBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aC4KICMgc2tpcCBpZiAtSSBoYXMgbm8gcGFyYW1ldGVyCiBhZGR0cmVlID0gJChpZiAkKHBhdHN1YnN0IC1JJSwlLCQoMSkpLCBcCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmR0Ymluc3QgYi9zY3JpcHRzL01ha2VmaWxlLmR0Ymluc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA5ZWQ3YQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuZHRiaW5zdApAQCAtMCwwICsxLDUxIEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEluc3RhbGxpbmcgZHRiIGZpbGVzCisjCisjIEluc3RhbGxzIGFsbCBkdGIgZmlsZXMgbGlzdGVkIGluICQoZHRiLXkpIGVpdGhlciBpbiB0aGUKKyMgSU5TVEFMTF9EVEJTX1BBVEggZGlyZWN0b3J5IG9yIHRoZSBkZWZhdWx0IGxvY2F0aW9uOgorIworIyAgICRJTlNUQUxMX1BBVEgvZHRicy8kS0VSTkVMUkVMRUFTRQorIworIyBUcmF2ZXJzZSB0aHJvdWdoIHN1YmRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkKGR0cy1kaXJzKS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3JjIDo9ICQob2JqKQorCitQSE9OWSA6PSBfX2R0YnNfaW5zdGFsbAorX19kdGJzX2luc3RhbGw6CisKK2V4cG9ydCBkdGJpbnN0LXJvb3QgPz0gJChvYmopCisKK2luY2x1ZGUgaW5jbHVkZS9jb25maWcvYXV0by5jb25mCitpbmNsdWRlIHNjcmlwdHMvS2J1aWxkLmluY2x1ZGUKK2luY2x1ZGUgJChzcmN0cmVlKS8kKG9iaikvTWFrZWZpbGUKKworUEhPTlkgKz0gX19kdGJzX2luc3RhbGxfcHJlcAorX19kdGJzX2luc3RhbGxfcHJlcDoKK2lmZXEgKCIkKGR0Ymluc3Qtcm9vdCkiLCAiJChvYmopIikKKwkkKFEpaWYgWyAtZCAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQgXTsgdGhlbiBybSAtcmYgJChJTlNUQUxMX0RUQlNfUEFUSCkub2xkOyBmaQorCSQoUSlpZiBbIC1kICQoSU5TVEFMTF9EVEJTX1BBVEgpIF07IHRoZW4gbXYgJChJTlNUQUxMX0RUQlNfUEFUSCkgJChJTlNUQUxMX0RUQlNfUEFUSCkub2xkOyBmaQorCSQoUSlta2RpciAtcCAkKElOU1RBTExfRFRCU19QQVRIKQorZW5kaWYKKworZHRiaW5zdC1maWxlcwk6PSAkKGR0Yi15KQorZHRiaW5zdC1kaXJzCTo9ICQoZHRzLWRpcnMpCisKKyMgSGVscGVyIHRhcmdldHMgZm9yIEluc3RhbGxpbmcgRFRCcyBpbnRvIHRoZSBib290IGRpcmVjdG9yeQorcXVpZXRfY21kX2R0Yl9pbnN0YWxsID0JSU5TVEFMTCAkPAorICAgICAgY21kX2R0Yl9pbnN0YWxsID0JbWtkaXIgLXAgJCgyKTsgY3AgJDwgJCgyKQorCitpbnN0YWxsLWRpciA9ICQocGF0c3Vic3QgJChkdGJpbnN0LXJvb3QpJSwkKElOU1RBTExfRFRCU19QQVRIKSUsJChvYmopKQorCiskKGR0Ymluc3QtZmlsZXMpICQoZHRiaW5zdC1kaXJzKTogfCBfX2R0YnNfaW5zdGFsbF9wcmVwCisKKyQoZHRiaW5zdC1maWxlcyk6ICUuZHRiOiAkKG9iaikvJS5kdGIKKwkkKGNhbGwgY21kLGR0Yl9pbnN0YWxsLCQoaW5zdGFsbC1kaXIpKQorCiskKGR0Ymluc3QtZGlycyk6CisJJChRKSQoTUFLRSkgJChkdGJpbnN0KT0kKG9iaikvJEAKKworUEhPTlkgKz0gJChkdGJpbnN0LWZpbGVzKSAkKGR0Ymluc3QtZGlycykKK19fZHRic19pbnN0YWxsOiAkKGR0Ymluc3QtZmlsZXMpICQoZHRiaW5zdC1kaXJzKQorCisuUEhPTlk6ICQoUEhPTlkpCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmxpYiBiL3NjcmlwdHMvTWFrZWZpbGUubGliCmluZGV4IDU0YmUxOWEuLjUxMTc1NTIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC0yODMsMTggKzI4Myw2IEBACiAKIGR0Yy10bXAgPSAkKHN1YnN0ICQoY29tbWEpLF8sJChkb3QtdGFyZ2V0KS5kdHMudG1wKQogCi0jIEhlbHBlciB0YXJnZXRzIGZvciBJbnN0YWxsaW5nIERUQnMgaW50byB0aGUgYm9vdCBkaXJlY3RvcnkKLXF1aWV0X2NtZF9kdGJfaW5zdGFsbCA9CUlOU1RBTEwgJDwKLSAgICAgIGNtZF9kdGJfaW5zdGFsbCA9CWNwICQ8ICQoMikKLQotX2R0Ymluc3RfcHJlXzoKLQkkKFEpaWYgWyAtZCAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQgXTsgdGhlbiBybSAtcmYgJChJTlNUQUxMX0RUQlNfUEFUSCkub2xkOyBmaQotCSQoUSlpZiBbIC1kICQoSU5TVEFMTF9EVEJTX1BBVEgpIF07IHRoZW4gbXYgJChJTlNUQUxMX0RUQlNfUEFUSCkgJChJTlNUQUxMX0RUQlNfUEFUSCkub2xkOyBmaQotCSQoUSlta2RpciAtcCAkKElOU1RBTExfRFRCU19QQVRIKQotCi0lLmR0Yl9kdGJpbnN0XzogJChvYmopLyUuZHRiIF9kdGJpbnN0X3ByZV8KLQkkKGNhbGwgY21kLGR0Yl9pbnN0YWxsLCQoSU5TVEFMTF9EVEJTX1BBVEgpKQotCiAjIEJ6aXAyCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmggYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKaW5kZXggYjg5NjBjNC4uMjAwZTM3OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCisrKyBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaApAQCAtMTE3LDYgKzExNyw3IEBACiAjZGVmaW5lIEtFWVJJTkdfU0VBUkNIX05PX1VQREFURV9USU1FCTB4MDAwNAkvKiBEb24ndCB1cGRhdGUgdGltZXMgKi8KICNkZWZpbmUgS0VZUklOR19TRUFSQ0hfTk9fQ0hFQ0tfUEVSTQkweDAwMDgJLyogRG9uJ3QgY2hlY2sgcGVybWlzc2lvbnMgKi8KICNkZWZpbmUgS0VZUklOR19TRUFSQ0hfREVURUNUX1RPT19ERUVQCTB4MDAxMAkvKiBHaXZlIGFuIGVycm9yIG9uIGV4Y2Vzc2l2ZSBkZXB0aCAqLworI2RlZmluZSBLRVlSSU5HX1NFQVJDSF9TS0lQX0VYUElSRUQJMHgwMDIwCS8qIElnbm9yZSBleHBpcmVkIGtleXMgKGludGVudGlvbiB0byByZXBsYWNlKSAqLwogCiAJaW50ICgqaXRlcmF0b3IpKGNvbnN0IHZvaWQgKm9iamVjdCwgdm9pZCAqaXRlcmF0b3JfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IGVmZjg4YTUuLjQ3NDNkNzEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAorI2RlZmluZSBLRVlfTUFYX0RFU0NfU0laRSA0MDk2CisKIHN0YXRpYyBpbnQga2V5X2dldF90eXBlX2Zyb21fdXNlcihjaGFyICp0eXBlLAogCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKl90eXBlLAogCQkJCSAgdW5zaWduZWQgbGVuKQpAQCAtNzgsNyArODAsNyBAQAogCiAJZGVzY3JpcHRpb24gPSBOVUxMOwogCWlmIChfZGVzY3JpcHRpb24pIHsKLQkJZGVzY3JpcHRpb24gPSBzdHJuZHVwX3VzZXIoX2Rlc2NyaXB0aW9uLCBQQUdFX1NJWkUpOworCQlkZXNjcmlwdGlvbiA9IHN0cm5kdXBfdXNlcihfZGVzY3JpcHRpb24sIEtFWV9NQVhfREVTQ19TSVpFKTsKIAkJaWYgKElTX0VSUihkZXNjcmlwdGlvbikpIHsKIAkJCXJldCA9IFBUUl9FUlIoZGVzY3JpcHRpb24pOwogCQkJZ290byBlcnJvcjsKQEAgLTE3Nyw3ICsxNzksNyBAQAogCQlnb3RvIGVycm9yOwogCiAJLyogcHVsbCB0aGUgZGVzY3JpcHRpb24gaW50byBrZXJuZWwgc3BhY2UgKi8KLQlkZXNjcmlwdGlvbiA9IHN0cm5kdXBfdXNlcihfZGVzY3JpcHRpb24sIFBBR0VfU0laRSk7CisJZGVzY3JpcHRpb24gPSBzdHJuZHVwX3VzZXIoX2Rlc2NyaXB0aW9uLCBLRVlfTUFYX0RFU0NfU0laRSk7CiAJaWYgKElTX0VSUihkZXNjcmlwdGlvbikpIHsKIAkJcmV0ID0gUFRSX0VSUihkZXNjcmlwdGlvbik7CiAJCWdvdG8gZXJyb3I7CkBAIC0yODcsNyArMjg5LDcgQEAKIAkvKiBmZXRjaCB0aGUgbmFtZSBmcm9tIHVzZXJzcGFjZSAqLwogCW5hbWUgPSBOVUxMOwogCWlmIChfbmFtZSkgewotCQluYW1lID0gc3RybmR1cF91c2VyKF9uYW1lLCBQQUdFX1NJWkUpOworCQluYW1lID0gc3RybmR1cF91c2VyKF9uYW1lLCBLRVlfTUFYX0RFU0NfU0laRSk7CiAJCWlmIChJU19FUlIobmFtZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIobmFtZSk7CiAJCQlnb3RvIGVycm9yOwpAQCAtNTYyLDggKzU2NCw5IEBACiB7CiAJc3RydWN0IGtleSAqa2V5LCAqaW5zdGtleTsKIAlrZXlfcmVmX3Qga2V5X3JlZjsKLQljaGFyICp0bXBidWY7CisJY2hhciAqaW5mb2J1ZjsKIAlsb25nIHJldDsKKwlpbnQgZGVzY2xlbiwgaW5mb2xlbjsKIAogCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoa2V5aWQsIEtFWV9MT09LVVBfUEFSVElBTCwgS0VZX05FRURfVklFVyk7CiAJaWYgKElTX0VSUihrZXlfcmVmKSkgewpAQCAtNTg2LDM4ICs1ODksMzEgQEAKIAl9CiAKIG9rYXk6Ci0JLyogY2FsY3VsYXRlIGhvdyBtdWNoIGRlc2NyaXB0aW9uIHdlJ3JlIGdvaW5nIHRvIHJldHVybiAqLwotCXJldCA9IC1FTk9NRU07Ci0JdG1wYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghdG1wYnVmKQotCQlnb3RvIGVycm9yMjsKLQogCWtleSA9IGtleV9yZWZfdG9fcHRyKGtleV9yZWYpOworCWRlc2NsZW4gPSBzdHJsZW4oa2V5LT5kZXNjcmlwdGlvbik7CiAKLQlyZXQgPSBzbnByaW50Zih0bXBidWYsIFBBR0VfU0laRSAtIDEsCi0JCSAgICAgICAiJXM7JWQ7JWQ7JTA4eDslcyIsCi0JCSAgICAgICBrZXktPnR5cGUtPm5hbWUsCi0JCSAgICAgICBmcm9tX2t1aWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBrZXktPnVpZCksCi0JCSAgICAgICBmcm9tX2tnaWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBrZXktPmdpZCksCi0JCSAgICAgICBrZXktPnBlcm0sCi0JCSAgICAgICBrZXktPmRlc2NyaXB0aW9uID86ICIiKTsKLQotCS8qIGluY2x1ZGUgYSBOVUwgY2hhciBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhICovCi0JaWYgKHJldCA+IFBBR0VfU0laRSAtIDEpCi0JCXJldCA9IFBBR0VfU0laRSAtIDE7Ci0JdG1wYnVmW3JldF0gPSAwOwotCXJldCsrOworCS8qIGNhbGN1bGF0ZSBob3cgbXVjaCBpbmZvcm1hdGlvbiB3ZSdyZSBnb2luZyB0byByZXR1cm4gKi8KKwlyZXQgPSAtRU5PTUVNOworCWluZm9idWYgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKKwkJCSAgICAiJXM7JWQ7JWQ7JTA4eDsiLAorCQkJICAgIGtleS0+dHlwZS0+bmFtZSwKKwkJCSAgICBmcm9tX2t1aWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBrZXktPnVpZCksCisJCQkgICAgZnJvbV9rZ2lkX211bmdlZChjdXJyZW50X3VzZXJfbnMoKSwga2V5LT5naWQpLAorCQkJICAgIGtleS0+cGVybSk7CisJaWYgKCFpbmZvYnVmKQorCQlnb3RvIGVycm9yMjsKKwlpbmZvbGVuID0gc3RybGVuKGluZm9idWYpOworCXJldCA9IGluZm9sZW4gKyBkZXNjbGVuICsgMTsKIAogCS8qIGNvbnNpZGVyIHJldHVybmluZyB0aGUgZGF0YSAqLwotCWlmIChidWZmZXIgJiYgYnVmbGVuID4gMCkgewotCQlpZiAoYnVmbGVuID4gcmV0KQotCQkJYnVmbGVuID0gcmV0OwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCB0bXBidWYsIGJ1ZmxlbikgIT0gMCkKKwlpZiAoYnVmZmVyICYmIGJ1ZmxlbiA+PSByZXQpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGluZm9idWYsIGluZm9sZW4pICE9IDAgfHwKKwkJICAgIGNvcHlfdG9fdXNlcihidWZmZXIgKyBpbmZvbGVuLCBrZXktPmRlc2NyaXB0aW9uLAorCQkJCSBkZXNjbGVuICsgMSkgIT0gMCkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJfQogCi0Ja2ZyZWUodG1wYnVmKTsKKwlrZnJlZShpbmZvYnVmKTsKIGVycm9yMjoKIAlrZXlfcmVmX3B1dChrZXlfcmVmKTsKIGVycm9yOgpAQCAtNjQ5LDcgKzY0NSw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQlkZXNjcmlwdGlvbiA9IHN0cm5kdXBfdXNlcihfZGVzY3JpcHRpb24sIFBBR0VfU0laRSk7CisJZGVzY3JpcHRpb24gPSBzdHJuZHVwX3VzZXIoX2Rlc2NyaXB0aW9uLCBLRVlfTUFYX0RFU0NfU0laRSk7CiAJaWYgKElTX0VSUihkZXNjcmlwdGlvbikpIHsKIAkJcmV0ID0gUFRSX0VSUihkZXNjcmlwdGlvbik7CiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IDgxNzcwMTAuLmU3MjU0OGIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC01NDYsNyArNTQ2LDggQEAKIAkJfQogCiAJCWlmIChrZXktPmV4cGlyeSAmJiBjdHgtPm5vdy50dl9zZWMgPj0ga2V5LT5leHBpcnkpIHsKLQkJCWN0eC0+cmVzdWx0ID0gRVJSX1BUUigtRUtFWUVYUElSRUQpOworCQkJaWYgKCEoY3R4LT5mbGFncyAmIEtFWVJJTkdfU0VBUkNIX1NLSVBfRVhQSVJFRCkpCisJCQkJY3R4LT5yZXN1bHQgPSBFUlJfUFRSKC1FS0VZRVhQSVJFRCk7CiAJCQlrbGVhdmUoIiA9ICVkIFtleHBpcmVdIiwgY3R4LT5za2lwcGVkX3JldCk7CiAJCQlnb3RvIHNraXBwZWQ7CiAJCX0KQEAgLTYyOCw2ICs2MjksMTAgQEAKIAkgICAgICAgY3R4LT5pbmRleF9rZXkudHlwZS0+bmFtZSwKIAkgICAgICAgY3R4LT5pbmRleF9rZXkuZGVzY3JpcHRpb24pOwogCisjZGVmaW5lIFNUQVRFX0NIRUNLUyAoS0VZUklOR19TRUFSQ0hfTk9fU1RBVEVfQ0hFQ0sgfCBLRVlSSU5HX1NFQVJDSF9ET19TVEFURV9DSEVDSykKKwlCVUdfT04oKGN0eC0+ZmxhZ3MgJiBTVEFURV9DSEVDS1MpID09IDAgfHwKKwkgICAgICAgKGN0eC0+ZmxhZ3MgJiBTVEFURV9DSEVDS1MpID09IFNUQVRFX0NIRUNLUyk7CisKIAlpZiAoY3R4LT5pbmRleF9rZXkuZGVzY3JpcHRpb24pCiAJCWN0eC0+aW5kZXhfa2V5LmRlc2NfbGVuID0gc3RybGVuKGN0eC0+aW5kZXhfa2V5LmRlc2NyaXB0aW9uKTsKIApAQCAtNjM3LDcgKzY0Miw2IEBACiAJaWYgKGN0eC0+bWF0Y2hfZGF0YS5sb29rdXBfdHlwZSA9PSBLRVlSSU5HX1NFQVJDSF9MT09LVVBfSVRFUkFURSB8fAogCSAgICBrZXlyaW5nX2NvbXBhcmVfb2JqZWN0KGtleXJpbmcsICZjdHgtPmluZGV4X2tleSkpIHsKIAkJY3R4LT5za2lwcGVkX3JldCA9IDI7Ci0JCWN0eC0+ZmxhZ3MgfD0gS0VZUklOR19TRUFSQ0hfRE9fU1RBVEVfQ0hFQ0s7CiAJCXN3aXRjaCAoY3R4LT5pdGVyYXRvcihrZXlyaW5nX2tleV90b19wdHIoa2V5cmluZyksIGN0eCkpIHsKIAkJY2FzZSAxOgogCQkJZ290byBmb3VuZDsKQEAgLTY0OSw4ICs2NTMsNiBAQAogCX0KIAogCWN0eC0+c2tpcHBlZF9yZXQgPSAwOwotCWlmIChjdHgtPmZsYWdzICYgS0VZUklOR19TRUFSQ0hfTk9fU1RBVEVfQ0hFQ0spCi0JCWN0eC0+ZmxhZ3MgJj0gfktFWVJJTkdfU0VBUkNIX0RPX1NUQVRFX0NIRUNLOwogCiAJLyogU3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBrZXlyaW5nICovCiBkZXNjZW5kX3RvX2tleXJpbmc6CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKaW5kZXggYmI0MzM3Yy4uMGM3YWVhNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwpAQCAtNTE2LDYgKzUxNiw4IEBACiAJCS5tYXRjaF9kYXRhLmNtcAkJPSBrZXlfZGVmYXVsdF9jbXAsCiAJCS5tYXRjaF9kYXRhLnJhd19kYXRhCT0gZGVzY3JpcHRpb24sCiAJCS5tYXRjaF9kYXRhLmxvb2t1cF90eXBlCT0gS0VZUklOR19TRUFSQ0hfTE9PS1VQX0RJUkVDVCwKKwkJLmZsYWdzCQkJPSAoS0VZUklOR19TRUFSQ0hfRE9fU1RBVEVfQ0hFQ0sgfAorCQkJCQkgICBLRVlSSU5HX1NFQVJDSF9TS0lQX0VYUElSRUQpLAogCX07CiAJc3RydWN0IGtleSAqa2V5OwogCWtleV9yZWZfdCBrZXlfcmVmOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleV9hdXRoLmMgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5X2F1dGguYwppbmRleCA2NjM5ZTJjLi41ZDY3MmY3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5X2F1dGguYworKysgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5X2F1dGguYwpAQCAtMjQ5LDYgKzI0OSw3IEBACiAJCS5tYXRjaF9kYXRhLmNtcAkJPSBrZXlfZGVmYXVsdF9jbXAsCiAJCS5tYXRjaF9kYXRhLnJhd19kYXRhCT0gZGVzY3JpcHRpb24sCiAJCS5tYXRjaF9kYXRhLmxvb2t1cF90eXBlCT0gS0VZUklOR19TRUFSQ0hfTE9PS1VQX0RJUkVDVCwKKwkJLmZsYWdzCQkJPSBLRVlSSU5HX1NFQVJDSF9ET19TVEFURV9DSEVDSywKIAl9OwogCXN0cnVjdCBrZXkgKmF1dGhrZXk7CiAJa2V5X3JlZl90IGF1dGhrZXlfcmVmOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGU2NjMxNDEuLmM2MDNiMjAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTQ3MjUsOSArNDcyNSwxMCBAQAogCWVyciA9IHNlbGludXhfbmxtc2dfbG9va3VwKHNrc2VjLT5zY2xhc3MsIG5saC0+bmxtc2dfdHlwZSwgJnBlcm0pOwogCWlmIChlcnIpIHsKIAkJaWYgKGVyciA9PSAtRUlOVkFMKSB7Ci0JCQlXQVJOX09OQ0UoMSwgInNlbGludXhfbmxtc2dfcGVybTogdW5yZWNvZ25pemVkIG5ldGxpbmsgbWVzc2FnZToiCi0JCQkJICAiIHByb3RvY29sPSVodSBubG1zZ190eXBlPSVodSBzY2xhc3M9JWh1XG4iLAotCQkJCSAgc2stPnNrX3Byb3RvY29sLCBubGgtPm5sbXNnX3R5cGUsIHNrc2VjLT5zY2xhc3MpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJTRUxpbnV4OiB1bnJlY29nbml6ZWQgbmV0bGluayBtZXNzYWdlOiIKKwkJCSAgICAgICAiIHByb3RvY29sPSVodSBubG1zZ190eXBlPSVodSBzY2xhc3M9JWh1XG4iLAorCQkJICAgICAgIHNrLT5za19wcm90b2NvbCwgbmxoLT5ubG1zZ190eXBlLCBza3NlYy0+c2NsYXNzKTsKIAkJCWlmICghc2VsaW51eF9lbmZvcmNpbmcgfHwgc2VjdXJpdHlfZ2V0X2FsbG93X3Vua25vd24oKSkKIAkJCQllcnIgPSAwOwogCQl9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbS5jIGIvc291bmQvY29yZS9wY20uYwppbmRleCA0MmRlZDk5Li5jNmZmOTRhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtLmMKQEAgLTIxNiw2ICsyMTYsOCBAQAogCUZPUk1BVChEU0RfVTgpLAogCUZPUk1BVChEU0RfVTE2X0xFKSwKIAlGT1JNQVQoRFNEX1UzMl9MRSksCisJRk9STUFUKERTRF9VMTZfQkUpLAorCUZPUk1BVChEU0RfVTMyX0JFKSwKIH07CiAKIGNvbnN0IGNoYXIgKnNuZF9wY21fZm9ybWF0X25hbWUoc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9taXNjLmMgYi9zb3VuZC9jb3JlL3BjbV9taXNjLmMKaW5kZXggYWU3YTBmZS4uZWJlODQ0NCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbWlzYy5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX21pc2MuYwpAQCAtMTUyLDYgKzE1MiwxNCBAQAogCQkud2lkdGggPSAzMiwgLnBoeXMgPSAzMiwgLmxlID0gMSwgLnNpZ25kID0gMCwKIAkJLnNpbGVuY2UgPSB7IDB4NjksIDB4NjksIDB4NjksIDB4NjkgfSwKIAl9LAorCVtTTkRSVl9QQ01fRk9STUFUX0RTRF9VMTZfQkVdID0geworCQkud2lkdGggPSAxNiwgLnBoeXMgPSAxNiwgLmxlID0gMCwgLnNpZ25kID0gMCwKKwkJLnNpbGVuY2UgPSB7IDB4NjksIDB4NjkgfSwKKwl9LAorCVtTTkRSVl9QQ01fRk9STUFUX0RTRF9VMzJfQkVdID0geworCQkud2lkdGggPSAzMiwgLnBoeXMgPSAzMiwgLmxlID0gMCwgLnNpZ25kID0gMCwKKwkJLnNpbGVuY2UgPSB7IDB4NjksIDB4NjksIDB4NjksIDB4NjkgfSwKKwl9LAogCS8qIEZJWE1FOiB0aGUgZm9sbG93aW5nIHRocmVlIGZvcm1hdHMgYXJlIG5vdCBkZWZpbmVkIHByb3Blcmx5IHlldCAqLwogCVtTTkRSVl9QQ01fRk9STUFUX01QRUddID0gewogCQkubGUgPSAtMSwgLnNpZ25kID0gLTEsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCA5YWIxZTYzLi40OGI2YzVhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTIxOSw2ICsyMTksNyBAQAogCQkJICJ7SW50ZWwsIExQVF9MUH0sIgogCQkJICJ7SW50ZWwsIFdQVF9MUH0sIgogCQkJICJ7SW50ZWwsIFNQVH0sIgorCQkJICJ7SW50ZWwsIFNQVF9MUH0sIgogCQkJICJ7SW50ZWwsIEhQVH0sIgogCQkJICJ7SW50ZWwsIFBCR30sIgogCQkJICJ7SW50ZWwsIFNDSH0sIgpAQCAtMjk3LDcgKzI5OCw4IEBACiAKIC8qIHF1aXJrcyBmb3IgQVRJL0FNRCBIRE1JICovCiAjZGVmaW5lIEFaWF9EQ0FQU19QUkVTRVRfQVRJX0hETUkgXAotCShBWlhfRENBUFNfTk9fVENTRUwgfCBBWlhfRENBUFNfU1lOQ19XUklURSB8IEFaWF9EQ0FQU19QT1NGSVhfTFBJQikKKwkoQVpYX0RDQVBTX05PX1RDU0VMIHwgQVpYX0RDQVBTX1NZTkNfV1JJVEUgfCBBWlhfRENBUFNfUE9TRklYX0xQSUJ8XAorCSBBWlhfRENBUFNfTk9fTVNJNjQpCiAKIC8qIHF1aXJrcyBmb3IgTnZpZGlhICovCiAjZGVmaW5lIEFaWF9EQ0FQU19QUkVTRVRfTlZJRElBIFwKQEAgLTE0ODUsNiArMTQ4Nyw3IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY2hpcC0+Y2FyZDsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIHNob3J0IGdjYXA7CisJdW5zaWduZWQgaW50IGRtYV9iaXRzID0gNjQ7CiAKICNpZiBCSVRTX1BFUl9MT05HICE9IDY0CiAJLyogRml4IHVwIGJhc2UgYWRkcmVzcyBvbiBVTEkgTTU0NjEgKi8KQEAgLTE1MDgsOSArMTUxMSwxNCBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCWlmIChjaGlwLT5tc2kpCisJaWYgKGNoaXAtPm1zaSkgeworCQlpZiAoY2hpcC0+ZHJpdmVyX2NhcHMgJiBBWlhfRENBUFNfTk9fTVNJNjQpIHsKKwkJCWRldl9kYmcoY2FyZC0+ZGV2LCAiRGlzYWJsaW5nIDY0Yml0IE1TSVxuIik7CisJCQlwY2ktPm5vXzY0Yml0X21zaSA9IHRydWU7CisJCX0KIAkJaWYgKHBjaV9lbmFibGVfbXNpKHBjaSkgPCAwKQogCQkJY2hpcC0+bXNpID0gMDsKKwl9CiAKIAlpZiAoYXp4X2FjcXVpcmVfaXJxKGNoaXAsIDApIDwgMCkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTE1MjEsOSArMTUyOSwxNCBAQAogCWdjYXAgPSBhenhfcmVhZHcoY2hpcCwgR0NBUCk7CiAJZGV2X2RiZyhjYXJkLT5kZXYsICJjaGlwc2V0IGdsb2JhbCBjYXBhYmlsaXRpZXMgPSAweCV4XG4iLCBnY2FwKTsKIAorCS8qIEFNRCBkZXZpY2VzIHN1cHBvcnQgNDAgb3IgNDhiaXQgRE1BLCB0YWtlIHRoZSBzYWZlIG9uZSAqLworCWlmIChjaGlwLT5wY2ktPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCkKKwkJZG1hX2JpdHMgPSA0MDsKKwogCS8qIGRpc2FibGUgU0I2MDAgNjRiaXQgc3VwcG9ydCBmb3Igc2FmZXR5ICovCiAJaWYgKGNoaXAtPnBjaS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVRJKSB7CiAJCXN0cnVjdCBwY2lfZGV2ICpwX3NtYnVzOworCQlkbWFfYml0cyA9IDQwOwogCQlwX3NtYnVzID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BVEksCiAJCQkJCSBQQ0lfREVWSUNFX0lEX0FUSV9TQlgwMF9TTUJVUywKIAkJCQkJIE5VTEwpOwpAQCAtMTU1Myw5ICsxNTY2LDExIEBACiAJfQogCiAJLyogYWxsb3cgNjRiaXQgRE1BIGFkZHJlc3MgaWYgc3VwcG9ydGVkIGJ5IEgvVyAqLwotCWlmICgoZ2NhcCAmIEFaWF9HQ0FQXzY0T0spICYmICFwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BX0JJVF9NQVNLKDY0KSkpCi0JCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV9CSVRfTUFTSyg2NCkpOwotCWVsc2UgeworCWlmICghKGdjYXAgJiBBWlhfR0NBUF82NE9LKSkKKwkJZG1hX2JpdHMgPSAzMjsKKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfQklUX01BU0soZG1hX2JpdHMpKSkgeworCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfQklUX01BU0soZG1hX2JpdHMpKTsKKwl9IGVsc2UgewogCQlwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV9CSVRfTUFTSygzMikpOwogCX0KQEAgLTIwMDQsNiArMjAxOSw5IEBACiAJLyogU3VucmlzZSBQb2ludCAqLwogCXsgUENJX0RFVklDRSgweDgwODYsIDB4YTE3MCksCiAJICAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1BDSCB8IEFaWF9EQ0FQU19JTlRFTF9QQ0ggfSwKKwkvKiBTdW5yaXNlIFBvaW50LUxQICovCisJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHg5ZDcwKSwKKwkgIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfUENIIHwgQVpYX0RDQVBTX0lOVEVMX1BDSCB9LAogCS8qIEhhc3dlbGwgKi8KIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDBhMGMpLAogCSAgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9IRE1JIHwgQVpYX0RDQVBTX0lOVEVMX0hBU1dFTEwgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX3ByaXYuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX3ByaXYuaAppbmRleCA5NDljZDQzLi41MDE2MDE0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9wcml2LmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfcHJpdi5oCkBAIC0xNzEsNiArMTcxLDcgQEAKICNkZWZpbmUgQVpYX0RDQVBTX1BNX1JVTlRJTUUJKDEgPDwgMjYpCS8qIHJ1bnRpbWUgUE0gc3VwcG9ydCAqLwogI2RlZmluZSBBWlhfRENBUFNfSTkxNV9QT1dFUldFTEwgKDEgPDwgMjcpCS8qIEhTVyBpOTE1IHBvd2Vyd2VsbCBzdXBwb3J0ICovCiAjZGVmaW5lIEFaWF9EQ0FQU19DT1JCUlBfU0VMRl9DTEVBUiAoMSA8PCAyOCkJLyogQ09SQlJQIGNsZWFycyBpdHNlbGYgYWZ0ZXIgcmVzZXQgKi8KKyNkZWZpbmUgQVpYX0RDQVBTX05PX01TSTY0ICAgICAgKDEgPDwgMjkpCS8qIFN0aWNrIHRvIDMyLWJpdCBNU0lzICovCiAKIC8qIEhEIEF1ZGlvIGNsYXNzIGNvZGUgKi8KICNkZWZpbmUgUENJX0NMQVNTX01VTFRJTUVESUFfSERfQVVESU8JMHgwNDAzCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggNzFlNGJhZC4uZTllYmM3YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtNDMsNiArNDMsNyBAQAogCXVuc2lnbmVkIGludCBudW1fZWFwZHM7CiAJaGRhX25pZF90IGVhcGRzWzRdOwogCWJvb2wgZHluYW1pY19lYXBkOworCWhkYV9uaWRfdCBtdXRlX2xlZF9lYXBkOwogCiAJdW5zaWduZWQgaW50IHBhcnNlX2ZsYWdzOyAvKiBmbGFnIGZvciBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZjZmcoKSAqLwogCkBAIC0xNjMsNiArMTY0LDE3IEBACiAJY3hfYXV0b190dXJuX2VhcGQoY29kZWMsIHNwZWMtPm51bV9lYXBkcywgc3BlYy0+ZWFwZHMsIGVuYWJsZWQpOwogfQogCisvKiB0dXJuIG9uL29mZiBFQVBEIGFjY29yZGluZyB0byBNYXN0ZXIgc3dpdGNoIChpbnZlcnNlbHkhKSBmb3IgbXV0ZSBMRUQgKi8KK3N0YXRpYyB2b2lkIGN4X2F1dG9fdm1hc3Rlcl9ob29rX211dGVfbGVkKHZvaWQgKnByaXZhdGVfZGF0YSwgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBwcml2YXRlX2RhdGE7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPm11dGVfbGVkX2VhcGQsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCisJCQkgICAgZW5hYmxlZCA/IDB4MDAgOiAweDAyKTsKK30KKwogc3RhdGljIGludCBjeF9hdXRvX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWludCBlcnI7CkBAIC0yMjMsNiArMjM1LDcgQEAKIAlDWFRfRklYVVBfVE9TSElCQV9QMTA1LAogCUNYVF9GSVhVUF9IUF81MzAsCiAJQ1hUX0ZJWFVQX0NBUF9NSVhfQU1QXzUwNDcsCisJQ1hUX0ZJWFVQX01VVEVfTEVEX0VBUEQsCiB9OwogCiAvKiBmb3IgaGRhX2ZpeHVwX3RoaW5rcGFkX2FjcGkoKSAqLwpAQCAtNTU3LDYgKzU3MCwxOCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgY3h0X2ZpeHVwX211dGVfbGVkX2VhcGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBoZGFfZml4dXAgKmZpeCwgaW50IGFjdGlvbikKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKGFjdGlvbiA9PSBIREFfRklYVVBfQUNUX1BSRV9QUk9CRSkgeworCQlzcGVjLT5tdXRlX2xlZF9lYXBkID0gMHgxYjsKKwkJc3BlYy0+ZHluYW1pY19lYXBkID0gMTsKKwkJc3BlYy0+Z2VuLnZtYXN0ZXJfbXV0ZS5ob29rID0gY3hfYXV0b192bWFzdGVyX2hvb2tfbXV0ZV9sZWQ7CisJfQorfQorCiAvKgogICogRml4IG1heCBpbnB1dCBsZXZlbCBvbiBtaXhlciB3aWRnZXQgdG8gMGRCCiAgKiAob3JpZ2luYWxseSBpdCBoYXMgMHgyYiBzdGVwcyB3aXRoIDBkQiBvZmZzZXQgMHgxNCkKQEAgLTcwNSw2ICs3MzAsMTAgQEAKIAkJLnR5cGUgPSBIREFfRklYVVBfRlVOQywKIAkJLnYuZnVuYyA9IGN4dF9maXh1cF9jYXBfbWl4X2FtcF81MDQ3LAogCX0sCisJW0NYVF9GSVhVUF9NVVRFX0xFRF9FQVBEXSA9IHsKKwkJLnR5cGUgPSBIREFfRklYVVBfRlVOQywKKwkJLnYuZnVuYyA9IGN4dF9maXh1cF9tdXRlX2xlZF9lYXBkLAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA0NV9maXh1cHNbXSA9IHsKQEAgLTc2Miw2ICs3OTEsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxY2YsICJMZW5vdm8gVDUyMCIsIENYVF9QSU5DRkdfTEVOT1ZPX1RQNDEwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWRhLCAiTGVub3ZvIFgyMjAiLCBDWFRfUElOQ0ZHX0xFTk9WT19UUDQxMCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFkYiwgIkxlbm92byBYMjIwLXRhYmxldCIsIENYVF9QSU5DRkdfTEVOT1ZPX1RQNDEwKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOGFmLCAiTGVub3ZvIElkZWFQYWQgWjU2MCIsIENYVF9GSVhVUF9NVVRFX0xFRF9FQVBEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOTc1LCAiTGVub3ZvIFUzMDBzIiwgQ1hUX0ZJWFVQX1NURVJFT19ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOTc3LCAiTGVub3ZvIElkZWFQYWQgVTMxMCIsIENYVF9GSVhVUF9TVEVSRU9fRE1JQyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4Mzk3YiwgIkxlbm92byBTMjA1IiwgQ1hUX0ZJWFVQX1NURVJFT19ETUlDKSwKQEAgLTc4MCw2ICs4MTAsNyBAQAogCXsgLmlkID0gQ1hUX1BJTkNGR19MRU1PVEVfQTEwMDQsIC5uYW1lID0gImxlbW90ZS1hMTAwNCIgfSwKIAl7IC5pZCA9IENYVF9QSU5DRkdfTEVNT1RFX0ExMjA1LCAubmFtZSA9ICJsZW1vdGUtYTEyMDUiIH0sCiAJeyAuaWQgPSBDWFRfRklYVVBfT0xQQ19YTywgLm5hbWUgPSAib2xwYy14byIgfSwKKwl7IC5pZCA9IENYVF9GSVhVUF9NVVRFX0xFRF9FQVBELCAubmFtZSA9ICJtdXRlLWxlZC1lYXBkIiB9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IGM5Y2YyNDguLmIxMThhNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0yODgsMjEgKzI4OCw5MSBAQAogCXNuZF9oZGFfamFja191bnNvbF9ldmVudChjb2RlYywgcmVzID4+IDIpOwogfQogCisvKiBDaGFuZ2UgRUFQRCB0byB2ZXJiIGNvbnRyb2wgKi8KK3N0YXRpYyB2b2lkIGFsY19maWxsX2VhcGRfY29lZihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgY29lZjsKKworCWNvZWYgPSBhbGNfZ2V0X2NvZWYwKGNvZGVjKTsKKworCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMGVjMDI2MjoKKwkJYWxjX3VwZGF0ZV9jb2VmX2lkeChjb2RlYywgMHg3LCAwLCAxPDw1KTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjY3OgorCWNhc2UgMHgxMGVjMDI2ODoKKwkJYWxjX3VwZGF0ZV9jb2VmX2lkeChjb2RlYywgMHg3LCAwLCAxPDwxMyk7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDI2OToKKwkJaWYgKChjb2VmICYgMHgwMGYwKSA9PSAweDAwMTApCisJCQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCAweGQsIDAsIDE8PDE0KTsKKwkJaWYgKChjb2VmICYgMHgwMGYwKSA9PSAweDAwMjApCisJCQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCAweDQsIDE8PDE1LCAwKTsKKwkJaWYgKChjb2VmICYgMHgwMGYwKSA9PSAweDAwMzApCisJCQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCAweDEwLCAxPDw5LCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjgwOgorCWNhc2UgMHgxMGVjMDI4NDoKKwljYXNlIDB4MTBlYzAyOTA6CisJY2FzZSAweDEwZWMwMjkyOgorCQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCAweDQsIDE8PDE1LCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjMzOgorCWNhc2UgMHgxMGVjMDI1NToKKwljYXNlIDB4MTBlYzAyODI6CisJY2FzZSAweDEwZWMwMjgzOgorCWNhc2UgMHgxMGVjMDI4NjoKKwljYXNlIDB4MTBlYzAyODg6CisJCWFsY191cGRhdGVfY29lZl9pZHgoY29kZWMsIDB4MTAsIDE8PDksIDApOworCQlicmVhazsKKwljYXNlIDB4MTBlYzAyODU6CisJY2FzZSAweDEwZWMwMjkzOgorCQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCAweGEsIDE8PDEzLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwNjYyOgorCQlpZiAoKGNvZWYgJiAweDAwZjApID09IDB4MDAzMCkKKwkJCWFsY191cGRhdGVfY29lZl9pZHgoY29kZWMsIDB4NCwgMTw8MTAsIDApOyAvKiBFQVBEIEN0cmwgKi8KKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjcyOgorCWNhc2UgMHgxMGVjMDI3MzoKKwljYXNlIDB4MTBlYzA2NjM6CisJY2FzZSAweDEwZWMwNjY1OgorCWNhc2UgMHgxMGVjMDY3MDoKKwljYXNlIDB4MTBlYzA2NzE6CisJY2FzZSAweDEwZWMwNjcyOgorCQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCAweGQsIDAsIDE8PDE0KTsgLyogRUFQRCBDdHJsICovCisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDY2ODoKKwkJYWxjX3VwZGF0ZV9jb2VmX2lkeChjb2RlYywgMHg3LCAzPDwxMywgMCk7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDg2NzoKKwkJYWxjX3VwZGF0ZV9jb2VmX2lkeChjb2RlYywgMHg0LCAxPDwxMCwgMCk7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDg4ODoKKwkJaWYgKChjb2VmICYgMHgwMGYwKSA9PSAweDAwMjAgfHwgKGNvZWYgJiAweDAwZjApID09IDB4MDAzMCkKKwkJCWFsY191cGRhdGVfY29lZl9pZHgoY29kZWMsIDB4NywgMTw8NSwgMCk7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDg5MjoKKwkJYWxjX3VwZGF0ZV9jb2VmX2lkeChjb2RlYywgMHg3LCAxPDw1LCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwODk5OgorCWNhc2UgMHgxMGVjMDkwMDoKKwkJYWxjX3VwZGF0ZV9jb2VmX2lkeChjb2RlYywgMHg3LCAxPDwxLCAwKTsKKwkJYnJlYWs7CisJfQorfQorCiAvKiBhZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGZvciBBTEM4ODggdmFyaWFudHMgKi8KIHN0YXRpYyB2b2lkIGFsYzg4OF9jb2VmX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JaWYgKGFsY19nZXRfY29lZjAoY29kZWMpID09IDB4MjApCi0JCS8qIGFsYzg4OFMtVkMgKi8KLQkJYWxjX3dyaXRlX2NvZWZfaWR4KGNvZGVjLCA3LCAweDgzMCk7Ci0JIGVsc2UKLQkJIC8qIGFsYzg4OC1WQiAqLwotCQlhbGNfd3JpdGVfY29lZl9pZHgoY29kZWMsIDcsIDB4MzAzMCk7Ci19Ci0KLS8qIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gZm9yIEFMQzg4OSB2YXJpYW50cyAqLwotc3RhdGljIHZvaWQgYWxjODg5X2NvZWZfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCA3LCAwLCAweDIwMTApOworCXN3aXRjaCAoYWxjX2dldF9jb2VmMChjb2RlYykgJiAweDAwZjApIHsKKwkvKiBhbGM4ODgtVkEgKi8KKwljYXNlIDB4MDA6CisJLyogYWxjODg4LVZCICovCisJY2FzZSAweDEwOgorCQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCA3LCAwLCAweDIwMzApOyAvKiBUdXJuIEVBUEQgdG8gSGlnaCAqLworCQlicmVhazsKKwl9CiB9CiAKIC8qIHR1cm4gb24vb2ZmIEVBUEQgY29udHJvbCAob25seSBpZiBhdmFpbGFibGUpICovCkBAIC0zNDMsNiArNDEzLDcgQEAKIC8qIGdlbmVyaWMgRUFQRCBpbml0aWFsaXphdGlvbiAqLwogc3RhdGljIHZvaWQgYWxjX2F1dG9faW5pdF9hbXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCB0eXBlKQogeworCWFsY19maWxsX2VhcGRfY29lZihjb2RlYyk7CiAJYWxjX2F1dG9fc2V0dXBfZWFwZChjb2RlYywgdHJ1ZSk7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBBTENfSU5JVF9HUElPMToKQEAgLTM1OSwyNSArNDMwLDE1IEBACiAJCWNhc2UgMHgxMGVjMDI2MDoKIAkJCWFsY191cGRhdGVfY29lZmV4X2lkeChjb2RlYywgMHgxYSwgNywgMCwgMHgyMDEwKTsKIAkJCWJyZWFrOwotCQljYXNlIDB4MTBlYzAyNjI6CiAJCWNhc2UgMHgxMGVjMDg4MDoKIAkJY2FzZSAweDEwZWMwODgyOgogCQljYXNlIDB4MTBlYzA4ODM6CiAJCWNhc2UgMHgxMGVjMDg4NToKLQkJY2FzZSAweDEwZWMwODg3OgotCQkvKmNhc2UgMHgxMGVjMDg4OToqLyAvKiB0aGlzIGNhdXNlcyBhbiBTUERJRiBwcm9ibGVtICovCi0JCWNhc2UgMHgxMGVjMDkwMDoKLQkJCWFsYzg4OV9jb2VmX2luaXQoY29kZWMpOworCQkJYWxjX3VwZGF0ZV9jb2VmX2lkeChjb2RlYywgNywgMCwgMHgyMDMwKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MTBlYzA4ODg6CiAJCQlhbGM4ODhfY29lZl9pbml0KGNvZGVjKTsKIAkJCWJyZWFrOwotI2lmIDAgLyogWFhYOiBUaGlzIG1heSBjYXVzZSB0aGUgc2lsZW50IG91dHB1dCBvbiBzcGVha2VyIG9uIHNvbWUgbWFjaGluZXMgKi8KLQkJY2FzZSAweDEwZWMwMjY3OgotCQljYXNlIDB4MTBlYzAyNjg6Ci0JCQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCA3LCAwLCAweDMwMDApOwotCQkJYnJlYWs7Ci0jZW5kaWYgLyogWFhYICovCiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTcxMCw3ICsxNzcxLDcgQEAKIHsKIAlpZiAoYWN0aW9uICE9IEhEQV9GSVhVUF9BQ1RfSU5JVCkKIAkJcmV0dXJuOwotCWFsYzg4OV9jb2VmX2luaXQoY29kZWMpOworCWFsY191cGRhdGVfY29lZl9pZHgoY29kZWMsIDcsIDAsIDB4MjAzMCk7CiB9CiAKIC8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KQEAgLTMzNTAsNiArMzQxMSwyNyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYWxjMjgwX2ZpeHVwX2hwX2dwaW80KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBoZGFfZml4dXAgKmZpeCwgaW50IGFjdGlvbikKK3sKKwkvKiBMaWtlIGhwX2dwaW9fbWljMV9sZWQsIGJ1dCBhbHNvIG5lZWRzIEdQSU80IGxvdyB0byBlbmFibGUgaGVhZHBob25lIGFtcCAqLworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgZ3Bpb19pbml0W10gPSB7CisJCXsgMHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDE4IH0sCisJCXsgMHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MTggfSwKKwkJe30KKwl9OworCisJaWYgKGFjdGlvbiA9PSBIREFfRklYVVBfQUNUX1BSRV9QUk9CRSkgeworCQlzcGVjLT5nZW4udm1hc3Rlcl9tdXRlLmhvb2sgPSBhbGMyNjlfZml4dXBfaHBfZ3Bpb19tdXRlX2hvb2s7CisJCXNwZWMtPmdlbi5jYXBfc3luY19ob29rID0gYWxjMjY5X2ZpeHVwX2hwX2NhcF9taWNfbXV0ZV9ob29rOworCQlzcGVjLT5ncGlvX2xlZCA9IDA7CisJCXNwZWMtPmNhcF9tdXRlX2xlZF9uaWQgPSAweDE4OworCQlzbmRfaGRhX2FkZF92ZXJicyhjb2RlYywgZ3Bpb19pbml0KTsKKwkJY29kZWMtPnBvd2VyX2ZpbHRlciA9IGxlZF9wb3dlcl9maWx0ZXI7CisJfQorfQorCiBzdGF0aWMgdm9pZCBhbGMyNjlfZml4dXBfaHBfbGluZTFfbWljMV9sZWQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJY29uc3Qgc3RydWN0IGhkYV9maXh1cCAqZml4LCBpbnQgYWN0aW9uKQogewpAQCAtNDIxNyw2ICs0Mjk5LDcgQEAKIAlBTEMyODNfRklYVVBfQlhCVDI4MDdfTUlDLAogCUFMQzI1NV9GSVhVUF9ERUxMX1dNSV9NSUNfTVVURV9MRUQsCiAJQUxDMjgyX0ZJWFVQX0FTUElSRV9WNV9QSU5TLAorCUFMQzI4MF9GSVhVUF9IUF9HUElPNCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2ZpeHVwIGFsYzI2OV9maXh1cHNbXSA9IHsKQEAgLTQ0MzcsNiArNDUyMCw4IEBACiAJW0FMQzI2OV9GSVhVUF9IRUFEU0VUX01PREVdID0gewogCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLAogCQkudi5mdW5jID0gYWxjX2ZpeHVwX2hlYWRzZXRfbW9kZSwKKwkJLmNoYWluZWQgPSB0cnVlLAorCQkuY2hhaW5faWQgPSBBTEMyNTVfRklYVVBfREVMTF9XTUlfTUlDX01VVEVfTEVECiAJfSwKIAlbQUxDMjY5X0ZJWFVQX0hFQURTRVRfTU9ERV9OT19IUF9NSUNdID0gewogCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLApAQCAtNDYyNiw2ICs0NzExLDggQEAKIAlbQUxDMjU1X0ZJWFVQX0hFQURTRVRfTU9ERV0gPSB7CiAJCS50eXBlID0gSERBX0ZJWFVQX0ZVTkMsCiAJCS52LmZ1bmMgPSBhbGNfZml4dXBfaGVhZHNldF9tb2RlX2FsYzI1NSwKKwkJLmNoYWluZWQgPSB0cnVlLAorCQkuY2hhaW5faWQgPSBBTEMyNTVfRklYVVBfREVMTF9XTUlfTUlDX01VVEVfTEVECiAJfSwKIAlbQUxDMjU1X0ZJWFVQX0hFQURTRVRfTU9ERV9OT19IUF9NSUNdID0gewogCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLApAQCAtNDY2MSw4ICs0NzQ4LDYgQEAKIAlbQUxDMjU1X0ZJWFVQX0RFTExfV01JX01JQ19NVVRFX0xFRF0gPSB7CiAJCS50eXBlID0gSERBX0ZJWFVQX0ZVTkMsCiAJCS52LmZ1bmMgPSBhbGNfZml4dXBfZGVsbF93bWksCi0JCS5jaGFpbmVkX2JlZm9yZSA9IHRydWUsCi0JCS5jaGFpbl9pZCA9IEFMQzI1NV9GSVhVUF9ERUxMMV9NSUNfTk9fUFJFU0VOQ0UKIAl9LAogCVtBTEMyODJfRklYVVBfQVNQSVJFX1Y1X1BJTlNdID0gewogCQkudHlwZSA9IEhEQV9GSVhVUF9QSU5TLApAQCAtNDY4MCw3ICs0NzY1LDEwIEBACiAJCQl7IH0sCiAJCX0sCiAJfSwKLQorCVtBTEMyODBfRklYVVBfSFBfR1BJTzRdID0geworCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLAorCQkudi5mdW5jID0gYWxjMjgwX2ZpeHVwX2hwX2dwaW80LAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY5X2ZpeHVwX3RibFtdID0gewpAQCAtNDY5NywxMyArNDc4NSwxMyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA1ZjQsICJEZWxsIiwgQUxDMjY5X0ZJWFVQX0RFTEwxX01JQ19OT19QUkVTRU5DRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDVmNSwgIkRlbGwiLCBBTEMyNjlfRklYVVBfREVMTDFfTUlDX05PX1BSRVNFTkNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNWY2LCAiRGVsbCIsIEFMQzI2OV9GSVhVUF9ERUxMMV9NSUNfTk9fUFJFU0VOQ0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA2MTAsICJEZWxsIiwgQUxDMjU1X0ZJWFVQX0RFTExfV01JX01JQ19NVVRFX0xFRCksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDYxNSwgIkRlbGwgVm9zdHJvIDU0NzAiLCBBTEMyOTBfRklYVVBfU1VCV09PRkVSX0hTSkFDSyksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDYxNiwgIkRlbGwgVm9zdHJvIDU0NzAiLCBBTEMyOTBfRklYVVBfU1VCV09PRkVSX0hTSkFDSyksCi0JU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDYxZiwgIkRlbGwiLCBBTEMyNTVfRklYVVBfREVMTF9XTUlfTUlDX01VVEVfTEVEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNjM4LCAiRGVsbCBJbnNwaXJvbiA1NDM5IiwgQUxDMjkwX0ZJWFVQX01PTk9fU1BFQUtFUlNfSFNKQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNjRhLCAiRGVsbCIsIEFMQzI5M19GSVhVUF9ERUxMMV9NSUNfTk9fUFJFU0VOQ0UpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA2NGIsICJEZWxsIiwgQUxDMjkzX0ZJWFVQX0RFTEwxX01JQ19OT19QUkVTRU5DRSksCisJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDZkOSwgIkRlbGwiLCBBTEMyOTNfRklYVVBfREVMTDFfTUlDX05PX1BSRVNFTkNFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNmRhLCAiRGVsbCIsIEFMQzI5M19GSVhVUF9ERUxMMV9NSUNfTk9fUFJFU0VOQ0UpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDE2NGEsICJEZWxsIiwgQUxDMjkzX0ZJWFVQX0RFTEwxX01JQ19OT19QUkVTRU5DRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MTY0YiwgIkRlbGwiLCBBTEMyOTNfRklYVVBfREVMTDFfTUlDX05PX1BSRVNFTkNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxNTg2LCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfTVVURV9MRURfTUlDMiksCkBAIC00NzI4LDIxICs0ODE2LDE1IEBACiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjJjZiwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX01VVEVfTEVEX01JQzEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyZGMsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9HUElPX01JQzFfTEVEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMmZiLCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfR1BJT19NSUMxX0xFRCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4ODAwNCwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX0dQSU9fTUlDMV9MRUQpLAogCS8qIEFMQzI5MCAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyMWIsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9HUElPX01JQzFfTEVEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjIxLCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfR1BJT19NSUMxX0xFRCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjIyNSwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX0dQSU9fTUlDMV9MRUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyNDYsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9HUElPX01JQzFfTEVEKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjQ3LCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfR1BJT19NSUMxX0xFRCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjI0OCwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX0dQSU9fTUlDMV9MRUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyNDksICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9HUElPX01JQzFfTEVEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjUzLCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfR1BJT19NSUMxX0xFRCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjI1NCwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX0dQSU9fTUlDMV9MRUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyNTUsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9HUElPX01JQzFfTEVEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjU2LCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfR1BJT19NSUMxX0xFRCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjI1NywgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX0dQSU9fTUlDMV9MRUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyNTgsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9HUElPX01JQzFfTEVEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjU5LCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfR1BJT19NSUMxX0xFRCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjI1YSwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX0dQSU9fTUlDMV9MRUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyNjAsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9NVVRFX0xFRF9NSUMxKSwKQEAgLTQ3NTEsNyArNDgzMyw2IEBACiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjI2NSwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX01VVEVfTEVEX01JQzEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyNzIsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9HUElPX01JQzFfTEVEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjczLCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfR1BJT19NSUMxX0xFRCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjI3NywgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX0dQSU9fTUlDMV9MRUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyNzgsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9HUElPX01JQzFfTEVEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjdmLCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfTVVURV9MRURfTUlDMSksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjI4MiwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX01VVEVfTEVEX01JQzEpLApAQCAtNDgwNCw3ICs0ODg1LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMjBlLCAiVGhpbmtwYWQgVDQ0MHAiLCBBTEMyOTJfRklYVVBfVFBUNDQwX0RPQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIyMTAsICJUaGlua3BhZCBUNTQwcCIsIEFMQzI5Ml9GSVhVUF9UUFQ0NDBfRE9DSyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjIxMiwgIlRoaW5rcGFkIFQ0NDAiLCBBTEMyOTJfRklYVVBfVFBUNDQwX0RPQ0spLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIyMTQsICJUaGlua3BhZCIsIEFMQzI2OV9GSVhVUF9MSU1JVF9JTlRfTUlDX0JPT1NUKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMjE0LCAiVGhpbmtwYWQgWDI0MCIsIEFMQzI5Ml9GSVhVUF9UUFQ0NDBfRE9DSyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjIxNSwgIlRoaW5rcGFkIiwgQUxDMjY5X0ZJWFVQX0xJTUlUX0lOVF9NSUNfQk9PU1QpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM5NzgsICJJZGVhUGFkIFk0MTBQIiwgQUxDMjY5X0ZJWFVQX05PX1NIVVRVUCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4NTAxMywgIlRoaW5rcGFkIiwgQUxDMjY5X0ZJWFVQX0xJTUlUX0lOVF9NSUNfQk9PU1QpLApAQCAtNDk4NCw2ICs1MDY1LDE5IEBACiAJCXsweDE3LCAweDQwMDAwMDAwfSwKIAkJezB4MWQsIDB4NDA3MDAwMDF9LAogCQl7MHgyMSwgMHgwMjIxMTA0MH0pLAorCVNORF9IREFfUElOX1FVSVJLKDB4MTBlYzAyODAsIDB4MTAzYywgIkhQIiwgQUxDMjgwX0ZJWFVQX0hQX0dQSU80LAorCQl7MHgxMiwgMHg5MGE2MDEzMH0sCisJCXsweDEzLCAweDQwMDAwMDAwfSwKKwkJezB4MTQsIDB4OTAxNzAxMTB9LAorCQl7MHgxNSwgMHgwNDIxMTAxZn0sCisJCXsweDE2LCAweDQxMTExMWYwfSwKKwkJezB4MTcsIDB4NDExMTExZjB9LAorCQl7MHgxOCwgMHg0MTExMTFmMH0sCisJCXsweDE5LCAweDQxMTExMWYwfSwKKwkJezB4MWEsIDB4MDRhMTEwMjB9LAorCQl7MHgxYiwgMHg0MTExMTFmMH0sCisJCXsweDFkLCAweDQwNzQ4NjA1fSwKKwkJezB4MWUsIDB4NDExMTExZjB9KSwKIAlTTkRfSERBX1BJTl9RVUlSSygweDEwZWMwMjgwLCAweDEwM2MsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9HUElPX01JQzFfTEVELAogCQl7MHgxMiwgMHg5MGE2MDE0MH0sCiAJCXsweDEzLCAweDQwMDAwMDAwfSwKQEAgLTUxOTQsOSArNTI4OCw2IEBACiAJCX0KIAl9CiAKLQkvKiBDbGFzcyBEICovCi0JYWxjX3VwZGF0ZV9jb2VmX2lkeChjb2RlYywgMHhkLCAwLCAxPDwxNCk7Ci0KIAkvKiBIUCAqLwogCWFsY191cGRhdGVfY29lZl9pZHgoY29kZWMsIDB4NCwgMCwgMTw8MTEpOwogfQpAQCAtNTY1MSw2ICs1NzQyLDM1IEBACiAJfQogfQogCitzdGF0aWMgc3RydWN0IGNvZWZfZncgYWxjNjY4X2NvZWZzW10gPSB7CisJV1JJVEVfQ09FRigweDAxLCAweGJlYmUpLCBXUklURV9DT0VGKDB4MDIsIDB4YWFhYSksIFdSSVRFX0NPRUYoMHgwMywgICAgMHgwKSwKKwlXUklURV9DT0VGKDB4MDQsIDB4MDE4MCksIFdSSVRFX0NPRUYoMHgwNiwgICAgMHgwKSwgV1JJVEVfQ09FRigweDA3LCAweDBmODApLAorCVdSSVRFX0NPRUYoMHgwOCwgMHgwMDMxKSwgV1JJVEVfQ09FRigweDBhLCAweDAwNjApLCBXUklURV9DT0VGKDB4MGIsICAgIDB4MCksCisJV1JJVEVfQ09FRigweDBjLCAweDdjZjcpLCBXUklURV9DT0VGKDB4MGQsIDB4MTA4MCksIFdSSVRFX0NPRUYoMHgwZSwgMHg3ZjdmKSwKKwlXUklURV9DT0VGKDB4MGYsIDB4Y2NjYyksIFdSSVRFX0NPRUYoMHgxMCwgMHhkZGNjKSwgV1JJVEVfQ09FRigweDExLCAweDAwMDEpLAorCVdSSVRFX0NPRUYoMHgxMywgICAgMHgwKSwgV1JJVEVfQ09FRigweDE0LCAweDJhYTApLCBXUklURV9DT0VGKDB4MTcsIDB4YTk0MCksCisJV1JJVEVfQ09FRigweDE5LCAgICAweDApLCBXUklURV9DT0VGKDB4MWEsICAgIDB4MCksIFdSSVRFX0NPRUYoMHgxYiwgICAgMHgwKSwKKwlXUklURV9DT0VGKDB4MWMsICAgIDB4MCksIFdSSVRFX0NPRUYoMHgxZCwgICAgMHgwKSwgV1JJVEVfQ09FRigweDFlLCAweDc0MTgpLAorCVdSSVRFX0NPRUYoMHgxZiwgMHgwODA0KSwgV1JJVEVfQ09FRigweDIwLCAweDQyMDApLCBXUklURV9DT0VGKDB4MjEsIDB4MDQ2OCksCisJV1JJVEVfQ09FRigweDIyLCAweDhjY2MpLCBXUklURV9DT0VGKDB4MjMsIDB4MDI1MCksIFdSSVRFX0NPRUYoMHgyNCwgMHg3NDE4KSwKKwlXUklURV9DT0VGKDB4MjcsICAgIDB4MCksIFdSSVRFX0NPRUYoMHgyOCwgMHg4Y2NjKSwgV1JJVEVfQ09FRigweDJhLCAweGZmMDApLAorCVdSSVRFX0NPRUYoMHgyYiwgMHg4MDAwKSwgV1JJVEVfQ09FRigweGE3LCAweGZmMDApLCBXUklURV9DT0VGKDB4YTgsIDB4ODAwMCksCisJV1JJVEVfQ09FRigweGFhLCAweDJlMTcpLCBXUklURV9DT0VGKDB4YWIsIDB4YTBjMCksIFdSSVRFX0NPRUYoMHhhYywgICAgMHgwKSwKKwlXUklURV9DT0VGKDB4YWQsICAgIDB4MCksIFdSSVRFX0NPRUYoMHhhZSwgMHgyYWM2KSwgV1JJVEVfQ09FRigweGFmLCAweGE0ODApLAorCVdSSVRFX0NPRUYoMHhiMCwgICAgMHgwKSwgV1JJVEVfQ09FRigweGIxLCAgICAweDApLCBXUklURV9DT0VGKDB4YjIsICAgIDB4MCksCisJV1JJVEVfQ09FRigweGIzLCAgICAweDApLCBXUklURV9DT0VGKDB4YjQsICAgIDB4MCksIFdSSVRFX0NPRUYoMHhiNSwgMHgxMDQwKSwKKwlXUklURV9DT0VGKDB4YjYsIDB4ZDY5NyksIFdSSVRFX0NPRUYoMHhiNywgMHg5MDJiKSwgV1JJVEVfQ09FRigweGI4LCAweGQ2OTcpLAorCVdSSVRFX0NPRUYoMHhiOSwgMHg5MDJiKSwgV1JJVEVfQ09FRigweGJhLCAweGI4YmEpLCBXUklURV9DT0VGKDB4YmIsIDB4YWFhYiksCisJV1JJVEVfQ09FRigweGJjLCAweGFhYWYpLCBXUklURV9DT0VGKDB4YmQsIDB4NmFhYSksIFdSSVRFX0NPRUYoMHhiZSwgMHgxYzAyKSwKKwlXUklURV9DT0VGKDB4YzAsIDB4MDBmZiksIFdSSVRFX0NPRUYoMHhjMSwgMHgwZmE2KSwKKwl7fQorfTsKKworc3RhdGljIHZvaWQgYWxjNjY4X3Jlc3RvcmVfZGVmYXVsdF92YWx1ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlhbGNfcHJvY2Vzc19jb2VmX2Z3KGNvZGVjLCBhbGM2NjhfY29lZnMpOworfQorCiBlbnVtIHsKIAlBTEM2NjJfRklYVVBfQVNQSVJFLAogCUFMQzY2Ml9GSVhVUF9MRURfR1BJTzEsCkBAIC02MDc3LDI5ICs2MTk3LDYgQEAKIAl7fQogfTsKIAotc3RhdGljIHZvaWQgYWxjNjYyX2ZpbGxfY29lZihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgY29lZjsKLQotCWNvZWYgPSBhbGNfZ2V0X2NvZWYwKGNvZGVjKTsKLQotCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgewotCWNhc2UgMHgxMGVjMDY2MjoKLQkJaWYgKChjb2VmICYgMHgwMGYwKSA9PSAweDAwMzApCi0JCQlhbGNfdXBkYXRlX2NvZWZfaWR4KGNvZGVjLCAweDQsIDE8PDEwLCAwKTsgLyogRUFQRCBDdHJsICovCi0JCWJyZWFrOwotCWNhc2UgMHgxMGVjMDI3MjoKLQljYXNlIDB4MTBlYzAyNzM6Ci0JY2FzZSAweDEwZWMwNjYzOgotCWNhc2UgMHgxMGVjMDY2NToKLQljYXNlIDB4MTBlYzA2NzA6Ci0JY2FzZSAweDEwZWMwNjcxOgotCWNhc2UgMHgxMGVjMDY3MjoKLQkJYWxjX3VwZGF0ZV9jb2VmX2lkeChjb2RlYywgMHhkLCAwLCAxPDwxNCk7IC8qIEVBUEQgQ3RybCAqLwotCQlicmVhazsKLQl9Ci19Ci0KIC8qCiAgKi8KIHN0YXRpYyBpbnQgcGF0Y2hfYWxjNjYyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtNjExOCw4ICs2MjE1LDExIEBACiAKIAlhbGNfZml4X3BsbF9pbml0KGNvZGVjLCAweDIwLCAweDA0LCAxNSk7CiAKLQlzcGVjLT5pbml0X2hvb2sgPSBhbGM2NjJfZmlsbF9jb2VmOwotCWFsYzY2Ml9maWxsX2NvZWYoY29kZWMpOworCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMGVjMDY2ODoKKwkJc3BlYy0+aW5pdF9ob29rID0gYWxjNjY4X3Jlc3RvcmVfZGVmYXVsdF92YWx1ZTsKKwkJYnJlYWs7CisJfQogCiAJc25kX2hkYV9waWNrX2ZpeHVwKGNvZGVjLCBhbGM2NjJfZml4dXBfbW9kZWxzLAogCQkgICAgICAgYWxjNjYyX2ZpeHVwX3RibCwgYWxjNjYyX2ZpeHVwcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNTEtaTJjLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNTEtaTJjLmMKaW5kZXggY2VlNTFhZS4uYzQwNDI4ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jczQybDUxLWkyYy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1MS1pMmMuYwpAQCAtNDYsNiArNDYsNyBAQAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gImNzNDJsNTEiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gY3M0Mmw1MV9vZl9tYXRjaCwKIAl9LAogCS5wcm9iZSA9IGNzNDJsNTFfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSBjczQybDUxX2kyY19yZW1vdmUsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNTEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1MS5jCmluZGV4IDA5NDg4ZDkuLjY2OWMzOGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1MS5jCkBAIC01NTgsMTEgKzU1OCwxMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3M0Mmw1MV9wcm9iZSk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNzNDJsNTFfb2ZfbWF0Y2hbXSA9IHsKK2NvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY3M0Mmw1MV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiY2lycnVzLGNzNDJsNTEiLCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGNzNDJsNTFfb2ZfbWF0Y2gpOworRVhQT1JUX1NZTUJPTF9HUEwoY3M0Mmw1MV9vZl9tYXRjaCk7CisKIE1PRFVMRV9BVVRIT1IoIkFybmF1ZCBQYXRhcmQgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNpcnJ1cyBMb2dpYyBDUzQyTDUxIEFMU0EgU29DIENvZGVjIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jczQybDUxLmggYi9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNTEuaAppbmRleCA4YzU1YmYzLi4wY2E4MDU0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNTEuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNTEuaApAQCAtMjIsNiArMjIsNyBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgY3M0Mmw1MV9yZWdtYXA7CiBpbnQgY3M0Mmw1MV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZWdtYXAgKnJlZ21hcCk7CitleHRlcm4gY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBjczQybDUxX29mX21hdGNoW107CiAKICNkZWZpbmUgQ1M0Mkw1MV9DSElQX0lECQkJMHgxQgogI2RlZmluZSBDUzQyTDUxX0NISVBfUkVWX0EJCTB4MDAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvZXM4MzI4LWkyYy5jIGIvc291bmQvc29jL2NvZGVjcy9lczgzMjgtaTJjLmMKaW5kZXggYWFlNDEwZC4uMmQwNWI1ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9lczgzMjgtaTJjLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9lczgzMjgtaTJjLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlICJlczgzMjguaCIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGVzODMyOF9pZFtdID0gewotCXsgImV2ZXJlc3QsZXM4MzI4IiwgMCB9LAorCXsgImVzODMyOCIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZXM4MzI4X2lkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgwOTAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgwOTAuYwppbmRleCBkNTE5Mjk0Li4xMjI5NTU0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL21heDk4MDkwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9tYXg5ODA5MC5jCkBAIC0xOTQxLDEzICsxOTQxLDEzIEBACiAJICoJCSAweDAyICh3aGVuIG1hc3RlciBjbGsgaXMgMjBNSHogdG8gNDBNSHopLi4KIAkgKgkJIDB4MDMgKHdoZW4gbWFzdGVyIGNsayBpcyA0ME1IeiB0byA2ME1IeikuLgogCSAqLwotCWlmICgoZnJlcSA+PSAxMDAwMDAwMCkgJiYgKGZyZXEgPCAyMDAwMDAwMCkpIHsKKwlpZiAoKGZyZXEgPj0gMTAwMDAwMDApICYmIChmcmVxIDw9IDIwMDAwMDAwKSkgewogCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTBfUkVHX1NZU1RFTV9DTE9DSywKIAkJCU05ODA5MF9QU0NMS19ESVYxKTsKLQl9IGVsc2UgaWYgKChmcmVxID49IDIwMDAwMDAwKSAmJiAoZnJlcSA8IDQwMDAwMDAwKSkgeworCX0gZWxzZSBpZiAoKGZyZXEgPiAyMDAwMDAwMCkgJiYgKGZyZXEgPD0gNDAwMDAwMDApKSB7CiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5MF9SRUdfU1lTVEVNX0NMT0NLLAogCQkJTTk4MDkwX1BTQ0xLX0RJVjIpOwotCX0gZWxzZSBpZiAoKGZyZXEgPj0gNDAwMDAwMDApICYmIChmcmVxIDwgNjAwMDAwMDApKSB7CisJfSBlbHNlIGlmICgoZnJlcSA+IDQwMDAwMDAwKSAmJiAoZnJlcSA8PSA2MDAwMDAwMCkpIHsKIAkJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDkwX1JFR19TWVNURU1fQ0xPQ0ssCiAJCQlNOTgwOTBfUFNDTEtfRElWNCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQ1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY0NS5jCmluZGV4IDNmYjgzYmYuLmQxNjMzMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQ1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NDUuYwpAQCAtMTM5LDYgKzEzOSw3IEBACiAJeyAweDc2LCAweDAwMGEgfSwKIAl7IDB4NzcsIDB4MGMwMCB9LAogCXsgMHg3OCwgMHgwMDAwIH0sCisJeyAweDc5LCAweDAxMjMgfSwKIAl7IDB4ODAsIDB4MDAwMCB9LAogCXsgMHg4MSwgMHgwMDAwIH0sCiAJeyAweDgyLCAweDAwMDAgfSwKQEAgLTMzNCw2ICszMzUsNyBAQAogCWNhc2UgUlQ1NjQ1X0RNSUNfQ1RSTDI6CiAJY2FzZSBSVDU2NDVfVERNX0NUUkxfMToKIAljYXNlIFJUNTY0NV9URE1fQ1RSTF8yOgorCWNhc2UgUlQ1NjQ1X1RETV9DVFJMXzM6CiAJY2FzZSBSVDU2NDVfR0xCX0NMSzoKIAljYXNlIFJUNTY0NV9QTExfQ1RSTDE6CiAJY2FzZSBSVDU2NDVfUExMX0NUUkwyOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDU2NzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjcwLmMKaW5kZXggYmE5ZDliNC4uOWJkOGI0ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9ydDU2NzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY3MC5jCkBAIC0xMDAsMTggKzEwMCwxOCBAQAogCXsgMHg0YywgMHg1MzgwIH0sCiAJeyAweDRmLCAweDAwNzMgfSwKIAl7IDB4NTIsIDB4MDBkMyB9LAotCXsgMHg1MywgMHhmMGYwIH0sCisJeyAweDUzLCAweGYwMDAgfSwKIAl7IDB4NjEsIDB4MDAwMCB9LAogCXsgMHg2MiwgMHgwMDAxIH0sCiAJeyAweDYzLCAweDAwYzMgfSwKIAl7IDB4NjQsIDB4MDAwMCB9LAotCXsgMHg2NSwgMHgwMDAwIH0sCisJeyAweDY1LCAweDAwMDEgfSwKIAl7IDB4NjYsIDB4MDAwMCB9LAogCXsgMHg2ZiwgMHg4MDAwIH0sCiAJeyAweDcwLCAweDgwMDAgfSwKIAl7IDB4NzEsIDB4ODAwMCB9LAogCXsgMHg3MiwgMHg4MDAwIH0sCi0JeyAweDczLCAweDExMTAgfSwKKwl7IDB4NzMsIDB4Nzc3MCB9LAogCXsgMHg3NCwgMHgwZTAwIH0sCiAJeyAweDc1LCAweDE1MDUgfSwKIAl7IDB4NzYsIDB4MDAxNSB9LApAQCAtMTI1LDIxICsxMjUsMjEgQEAKIAl7IDB4ODMsIDB4MDAwMCB9LAogCXsgMHg4NCwgMHgwMDAwIH0sCiAJeyAweDg1LCAweDAwMDAgfSwKLQl7IDB4ODYsIDB4MDAwOCB9LAorCXsgMHg4NiwgMHgwMDA0IH0sCiAJeyAweDg3LCAweDAwMDAgfSwKIAl7IDB4ODgsIDB4MDAwMCB9LAogCXsgMHg4OSwgMHgwMDAwIH0sCiAJeyAweDhhLCAweDAwMDAgfSwKIAl7IDB4OGIsIDB4MDAwMCB9LAotCXsgMHg4YywgMHgwMDA3IH0sCisJeyAweDhjLCAweDAwMDMgfSwKIAl7IDB4OGQsIDB4MDAwMCB9LAogCXsgMHg4ZSwgMHgwMDA0IH0sCiAJeyAweDhmLCAweDExMDAgfSwKIAl7IDB4OTAsIDB4MDY0NiB9LAogCXsgMHg5MSwgMHgwYzA2IH0sCiAJeyAweDkzLCAweDAwMDAgfSwKLQl7IDB4OTQsIDB4MDAwMCB9LAotCXsgMHg5NSwgMHgwMDAwIH0sCisJeyAweDk0LCAweDEyNzAgfSwKKwl7IDB4OTUsIDB4MTAwMCB9LAogCXsgMHg5NywgMHgwMDAwIH0sCiAJeyAweDk4LCAweDAwMDAgfSwKIAl7IDB4OTksIDB4MDAwMCB9LApAQCAtMTUwLDExICsxNTAsMTEgQEAKIAl7IDB4OWUsIDB4MDQwMCB9LAogCXsgMHhhZSwgMHg3MDAwIH0sCiAJeyAweGFmLCAweDAwMDAgfSwKLQl7IDB4YjAsIDB4NjAwMCB9LAorCXsgMHhiMCwgMHg3MDAwIH0sCiAJeyAweGIxLCAweDAwMDAgfSwKIAl7IDB4YjIsIDB4MDAwMCB9LAogCXsgMHhiMywgMHgwMDFmIH0sCi0JeyAweGI0LCAweDIyMDYgfSwKKwl7IDB4YjQsIDB4MjIwYyB9LAogCXsgMHhiNSwgMHgxZjAwIH0sCiAJeyAweGI2LCAweDAwMDAgfSwKIAl7IDB4YjcsIDB4MDAwMCB9LApAQCAtMTcxLDI1ICsxNzEsMjUgQEAKIAl7IDB4Y2YsIDB4MTgxMyB9LAogCXsgMHhkMCwgMHgwNjkwIH0sCiAJeyAweGQxLCAweDFjMTcgfSwKLQl7IDB4ZDMsIDB4YjMyMCB9LAorCXsgMHhkMywgMHhhMjIwIH0sCiAJeyAweGQ0LCAweDAwMDAgfSwKIAl7IDB4ZDYsIDB4MDQwMCB9LAogCXsgMHhkOSwgMHgwODA5IH0sCiAJeyAweGRhLCAweDAwMDAgfSwKIAl7IDB4ZGIsIDB4MDAwMSB9LAogCXsgMHhkYywgMHgwMDQ5IH0sCi0JeyAweGRkLCAweDAwMDkgfSwKKwl7IDB4ZGQsIDB4MDAyNCB9LAogCXsgMHhlNiwgMHg4MDAwIH0sCiAJeyAweGU3LCAweDAwMDAgfSwKLQl7IDB4ZWMsIDB4YjMwMCB9LAorCXsgMHhlYywgMHhhMjAwIH0sCiAJeyAweGVkLCAweDAwMDAgfSwKLQl7IDB4ZWUsIDB4YjMwMCB9LAorCXsgMHhlZSwgMHhhMjAwIH0sCiAJeyAweGVmLCAweDAwMDAgfSwKIAl7IDB4ZjgsIDB4MDAwMCB9LAogCXsgMHhmOSwgMHgwMDAwIH0sCiAJeyAweGZhLCAweDgwMTAgfSwKIAl7IDB4ZmIsIDB4MDAzMyB9LAotCXsgMHhmYywgMHgwMDgwIH0sCisJeyAweGZjLCAweDAxMDAgfSwKIH07CiAKIHN0YXRpYyBib29sIHJ0NTY3MF92b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCkBAIC0xODc3LDYgKzE4NzcsMTAgQEAKIAl7ICJEQUMxIE1JWFIiLCAiREFDMSBTd2l0Y2giLCAiREFDMSBSIE11eCIgfSwKIAl7ICJEQUMxIE1JWFIiLCBOVUxMLCAiREFDIFN0ZXJlbzEgRmlsdGVyIiB9LAogCisJeyAiREFDIFN0ZXJlbzEgRmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCisJeyAiREFDIE1vbm8gTGVmdCBGaWx0ZXIiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKKwl7ICJEQUMgTW9ubyBSaWdodCBGaWx0ZXIiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKKwogCXsgIkRBQyBNSVgiLCBOVUxMLCAiREFDMSBNSVhMIiB9LAogCXsgIkRBQyBNSVgiLCBOVUxMLCAiREFDMSBNSVhSIiB9LAogCkBAIC0xOTI2LDE0ICsxOTMwLDEwIEBACiAKIAl7ICJEQUMgTDEiLCBOVUxMLCAiREFDIEwxIFBvd2VyIiB9LAogCXsgIkRBQyBMMSIsIE5VTEwsICJTdGVyZW8gREFDIE1JWEwiIH0sCi0JeyAiREFDIEwxIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCiAJeyAiREFDIFIxIiwgTlVMTCwgIkRBQyBSMSBQb3dlciIgfSwKIAl7ICJEQUMgUjEiLCBOVUxMLCAiU3RlcmVvIERBQyBNSVhSIiB9LAotCXsgIkRBQyBSMSIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAogCXsgIkRBQyBMMiIsIE5VTEwsICJNb25vIERBQyBNSVhMIiB9LAotCXsgIkRBQyBMMiIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAogCXsgIkRBQyBSMiIsIE5VTEwsICJNb25vIERBQyBNSVhSIiB9LAotCXsgIkRBQyBSMiIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAogCiAJeyAiT1VUIE1JWEwiLCAiQlNUMSBTd2l0Y2giLCAiQlNUMSIgfSwKIAl7ICJPVVQgTUlYTCIsICJJTkwgU3dpdGNoIiwgIklOTCBWT0wiIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmMKaW5kZXggNmJiNzdkNy4uZGFiOWIxNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zZ3RsNTAwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuYwpAQCAtMTI5OSw4ICsxMjk5LDcgQEAKIAogCS8qIGVuYWJsZSBzbWFsbCBwb3AsIGludHJvZHVjZSA0MDBtcyBkZWxheSBpbiB0dXJuaW5nIG9mZiAqLwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNHVEw1MDAwX0NISVBfUkVGX0NUUkwsCi0JCQkJU0dUTDUwMDBfU01BTExfUE9QLAotCQkJCVNHVEw1MDAwX1NNQUxMX1BPUCk7CisJCQkJU0dUTDUwMDBfU01BTExfUE9QLCAxKTsKIAogCS8qIGRpc2FibGUgc2hvcnQgY3V0IGRldGVjdG9yICovCiAJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9TSE9SVF9DVFJMLCAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuaAppbmRleCAyZjhjODg5Li5iZDdhMzQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9zZ3RsNTAwMC5oCkBAIC0yNzUsNyArMjc1LDcgQEAKICNkZWZpbmUgU0dUTDUwMDBfQklBU19DVFJMX01BU0sJCQkweDAwMGUKICNkZWZpbmUgU0dUTDUwMDBfQklBU19DVFJMX1NISUZUCQkxCiAjZGVmaW5lIFNHVEw1MDAwX0JJQVNfQ1RSTF9XSURUSAkJMwotI2RlZmluZSBTR1RMNTAwMF9TTUFMTF9QT1AJCQkweDAwMDEKKyNkZWZpbmUgU0dUTDUwMDBfU01BTExfUE9QCQkJMAogCiAvKgogICogU0dUTDUwMDBfQ0hJUF9NSUNfQ1RSTApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9hZHNwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2Fkc3AuYwppbmRleCBmNDEyYTk5Li42NzEyNDc4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2Fkc3AuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2Fkc3AuYwpAQCAtMTM1NSw2ICsxMzU1LDcgQEAKIAkJCSAgZmlsZSwgYmxvY2tzLCBwb3MgLSBmaXJtd2FyZS0+c2l6ZSk7CiAKIG91dF9mdzoKKwlyZWdtYXBfYXN5bmNfY29tcGxldGUocmVnbWFwKTsKIAlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKIAl3bV9hZHNwX2J1Zl9mcmVlKCZidWZfbGlzdCk7CiBvdXQ6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9hc3JjLmMgYi9zb3VuZC9zb2MvZnNsL2ZzbF9hc3JjLmMKaW5kZXggZWQ4NjZlOS4uOWRlYWJkZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfYXNyYy5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX2FzcmMuYwpAQCAtNjg0LDEyICs2ODQsMzggQEAKIAl9CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmVnX2RlZmF1bHQgZnNsX2FzcmNfcmVnW10gPSB7CisJeyBSRUdfQVNSQ1RSLCAweDAwMDAgfSwgeyBSRUdfQVNSSUVSLCAweDAwMDAgfSwKKwl7IFJFR19BU1JDTkNSLCAweDAwMDAgfSwgeyBSRUdfQVNSQ0ZHLCAweDAwMDAgfSwKKwl7IFJFR19BU1JDU1IsIDB4MDAwMCB9LCB7IFJFR19BU1JDRFIxLCAweDAwMDAgfSwKKwl7IFJFR19BU1JDRFIyLCAweDAwMDAgfSwgeyBSRUdfQVNSU1RSLCAweDAwMDAgfSwKKwl7IFJFR19BU1JSQSwgMHgwMDAwIH0sIHsgUkVHX0FTUlJCLCAweDAwMDAgfSwKKwl7IFJFR19BU1JSQywgMHgwMDAwIH0sIHsgUkVHX0FTUlBNMSwgMHgwMDAwIH0sCisJeyBSRUdfQVNSUE0yLCAweDAwMDAgfSwgeyBSRUdfQVNSUE0zLCAweDAwMDAgfSwKKwl7IFJFR19BU1JQTTQsIDB4MDAwMCB9LCB7IFJFR19BU1JQTTUsIDB4MDAwMCB9LAorCXsgUkVHX0FTUlRGUjEsIDB4MDAwMCB9LCB7IFJFR19BU1JDQ1IsIDB4MDAwMCB9LAorCXsgUkVHX0FTUkRJQSwgMHgwMDAwIH0sIHsgUkVHX0FTUkRPQSwgMHgwMDAwIH0sCisJeyBSRUdfQVNSRElCLCAweDAwMDAgfSwgeyBSRUdfQVNSRE9CLCAweDAwMDAgfSwKKwl7IFJFR19BU1JESUMsIDB4MDAwMCB9LCB7IFJFR19BU1JET0MsIDB4MDAwMCB9LAorCXsgUkVHX0FTUklEUkhBLCAweDAwMDAgfSwgeyBSRUdfQVNSSURSTEEsIDB4MDAwMCB9LAorCXsgUkVHX0FTUklEUkhCLCAweDAwMDAgfSwgeyBSRUdfQVNSSURSTEIsIDB4MDAwMCB9LAorCXsgUkVHX0FTUklEUkhDLCAweDAwMDAgfSwgeyBSRUdfQVNSSURSTEMsIDB4MDAwMCB9LAorCXsgUkVHX0FTUjc2SywgMHgwQTQ3IH0sIHsgUkVHX0FTUjU2SywgMHgwREYzIH0sCisJeyBSRUdfQVNSTUNSQSwgMHgwMDAwIH0sIHsgUkVHX0FTUkZTVEEsIDB4MDAwMCB9LAorCXsgUkVHX0FTUk1DUkIsIDB4MDAwMCB9LCB7IFJFR19BU1JGU1RCLCAweDAwMDAgfSwKKwl7IFJFR19BU1JNQ1JDLCAweDAwMDAgfSwgeyBSRUdfQVNSRlNUQywgMHgwMDAwIH0sCisJeyBSRUdfQVNSTUNSMUEsIDB4MDAwMCB9LCB7IFJFR19BU1JNQ1IxQiwgMHgwMDAwIH0sCisJeyBSRUdfQVNSTUNSMUMsIDB4MDAwMCB9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGZzbF9hc3JjX3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzID0gMzIsCiAJLnJlZ19zdHJpZGUgPSA0LAogCS52YWxfYml0cyA9IDMyLAogCiAJLm1heF9yZWdpc3RlciA9IFJFR19BU1JNQ1IxQywKKwkucmVnX2RlZmF1bHRzID0gZnNsX2FzcmNfcmVnLAorCS5udW1fcmVnX2RlZmF1bHRzID0gQVJSQVlfU0laRShmc2xfYXNyY19yZWcpLAogCS5yZWFkYWJsZV9yZWcgPSBmc2xfYXNyY19yZWFkYWJsZV9yZWcsCiAJLnZvbGF0aWxlX3JlZyA9IGZzbF9hc3JjX3ZvbGF0aWxlX3JlZywKIAkud3JpdGVhYmxlX3JlZyA9IGZzbF9hc3JjX3dyaXRlYWJsZV9yZWcsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfaTJzLmMgYi9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfaTJzLmMKaW5kZXggZjM3M2UzNy4uYzc0YmEzNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX2kycy5jCisrKyBiL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9pMnMuYwpAQCAtMTU0LDggKzE1NCwxMCBAQAogCQkJd2hpbGUgKHZhbCkgewogCQkJCXJlZ21hcF9yZWFkKGkycy0+cmVnbWFwLCBJMlNfQ0xSLCAmdmFsKTsKIAkJCQlyZXRyeS0tOwotCQkJCWlmICghcmV0cnkpCisJCQkJaWYgKCFyZXRyeSkgewogCQkJCQlkZXZfd2FybihpMnMtPmRldiwgImZhaWwgdG8gY2xlYXJcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zbm93LmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbm93LmMKaW5kZXggMGFjZjVkMC4uNzIxMThhNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvc25vdy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3Nub3cuYwpAQCAtMTEwLDYgKzExMCw3IEBACiAJeyAuY29tcGF0aWJsZSA9ICJnb29nbGUsc25vdy1hdWRpby1tYXg5ODA5NSIsIH0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc25vd19vZl9tYXRjaCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNub3dfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKaW5kZXggNjZmZGRlYy4uODhlNWRmNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9mc2kuYwpAQCAtMTcxMSw4ICsxNzExLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBmc2lfcGNtX2hhcmR3YXJlID0gewogCS5pbmZvID0JCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVECXwKIAkJCVNORFJWX1BDTV9JTkZPX01NQVAJCXwKLQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQJfAotCQkJU05EUlZfUENNX0lORk9fUEFVU0UsCisJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAogCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQgKiAxMDI0LAogCS5wZXJpb2RfYnl0ZXNfbWluCT0gMzIsCiAJLnBlcmlvZF9ieXRlc19tYXgJPSA4MTkyLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3JjYXIvY29yZS5jIGIvc291bmQvc29jL3NoL3JjYXIvY29yZS5jCmluZGV4IDE5MjJlYzUuLjcwMDQyMTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9yY2FyL2NvcmUuYworKysgYi9zb3VuZC9zb2Mvc2gvcmNhci9jb3JlLmMKQEAgLTg4Niw4ICs4ODYsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHJzbmRfcGNtX2hhcmR3YXJlID0gewogCS5pbmZvID0JCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVECXwKIAkJCVNORFJWX1BDTV9JTkZPX01NQVAJCXwKLQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQJfAotCQkJU05EUlZfUENNX0lORk9fUEFVU0UsCisJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAogCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQgKiAxMDI0LAogCS5wZXJpb2RfYnl0ZXNfbWluCT0gMzIsCiAJLnBlcmlvZF9ieXRlc19tYXgJPSA4MTkyLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCA0YzhmOGEyLi5iNjBmZjU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtODg0LDcgKzg4NCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb21wb25lbnQsICZjb21wb25lbnRfbGlzdCwgbGlzdCkgewogCQlpZiAoZGxjLT5vZl9ub2RlICYmIGNvbXBvbmVudC0+ZGV2LT5vZl9ub2RlICE9IGRsYy0+b2Zfbm9kZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZGxjLT5uYW1lICYmIHN0cmNtcChkZXZfbmFtZShjb21wb25lbnQtPmRldiksIGRsYy0+bmFtZSkpCisJCWlmIChkbGMtPm5hbWUgJiYgc3RyY21wKGNvbXBvbmVudC0+bmFtZSwgZGxjLT5uYW1lKSkKIAkJCWNvbnRpbnVlOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhaSwgJmNvbXBvbmVudC0+ZGFpX2xpc3QsIGxpc3QpIHsKIAkJCWlmIChkbGMtPmRhaV9uYW1lICYmIHN0cmNtcChkYWktPm5hbWUsIGRsYy0+ZGFpX25hbWUpKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1wY20uYyBiL3NvdW5kL3NvYy9zb2MtcGNtLmMKaW5kZXggMDAyMzExYS4uNTcyNzdkZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1wY20uYworKysgYi9zb3VuZC9zb2Mvc29jLXBjbS5jCkBAIC0xNTIyLDEzICsxNTIyLDM2IEBACiAJCWRwY21faW5pdF9ydW50aW1lX2h3KHJ1bnRpbWUsICZjcHVfZGFpX2Rydi0+Y2FwdHVyZSk7CiB9CiAKK3N0YXRpYyBpbnQgZHBjbV9mZV9kYWlfZG9fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCk7CisKKy8qIFNldCBGRSdzIHJ1bnRpbWVfdXBkYXRlIHN0YXRlOyB0aGUgc3RhdGUgaXMgcHJvdGVjdGVkIHZpYSBQQ00gc3RyZWFtIGxvY2sKKyAqIGZvciBhdm9pZGluZyB0aGUgcmFjZSB3aXRoIHRyaWdnZXIgY2FsbGJhY2suCisgKiBJZiB0aGUgc3RhdGUgaXMgdW5zZXQgYW5kIGEgdHJpZ2dlciBpcyBwZW5kaW5nIHdoaWxlIHRoZSBwcmV2aW91cyBvcGVyYXRpb24sCisgKiBwcm9jZXNzIHRoZSBwZW5kaW5nIHRyaWdnZXIgYWN0aW9uIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkIGRwY21fc2V0X2ZlX3VwZGF0ZV9zdGF0ZShzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqZmUsCisJCQkJICAgICBpbnQgc3RyZWFtLCBlbnVtIHNuZF9zb2NfZHBjbV91cGRhdGUgc3RhdGUpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPQorCQlzbmRfc29jX2RwY21fZ2V0X3N1YnN0cmVhbShmZSwgc3RyZWFtKTsKKworCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHN1YnN0cmVhbSk7CisJaWYgKHN0YXRlID09IFNORF9TT0NfRFBDTV9VUERBVEVfTk8gJiYgZmUtPmRwY21bc3RyZWFtXS50cmlnZ2VyX3BlbmRpbmcpIHsKKwkJZHBjbV9mZV9kYWlfZG9fdHJpZ2dlcihzdWJzdHJlYW0sCisJCQkJICAgICAgIGZlLT5kcGNtW3N0cmVhbV0udHJpZ2dlcl9wZW5kaW5nIC0gMSk7CisJCWZlLT5kcGNtW3N0cmVhbV0udHJpZ2dlcl9wZW5kaW5nID0gMDsKKwl9CisJZmUtPmRwY21bc3RyZWFtXS5ydW50aW1lX3VwZGF0ZSA9IHN0YXRlOworCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKK30KKwogc3RhdGljIGludCBkcGNtX2ZlX2RhaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqZmVfc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpmZSA9IGZlX3N1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBmZV9zdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IHN0cmVhbSA9IGZlX3N1YnN0cmVhbS0+c3RyZWFtLCByZXQgPSAwOwogCi0JZmUtPmRwY21bc3RyZWFtXS5ydW50aW1lX3VwZGF0ZSA9IFNORF9TT0NfRFBDTV9VUERBVEVfRkU7CisJZHBjbV9zZXRfZmVfdXBkYXRlX3N0YXRlKGZlLCBzdHJlYW0sIFNORF9TT0NfRFBDTV9VUERBVEVfRkUpOwogCiAJcmV0ID0gZHBjbV9iZV9kYWlfc3RhcnR1cChmZSwgZmVfc3Vic3RyZWFtLT5zdHJlYW0pOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xNTUwLDEzICsxNTczLDEzIEBACiAJZHBjbV9zZXRfZmVfcnVudGltZShmZV9zdWJzdHJlYW0pOwogCXNuZF9wY21fbGltaXRfaHdfcmF0ZXMocnVudGltZSk7CiAKLQlmZS0+ZHBjbVtzdHJlYW1dLnJ1bnRpbWVfdXBkYXRlID0gU05EX1NPQ19EUENNX1VQREFURV9OTzsKKwlkcGNtX3NldF9mZV91cGRhdGVfc3RhdGUoZmUsIHN0cmVhbSwgU05EX1NPQ19EUENNX1VQREFURV9OTyk7CiAJcmV0dXJuIDA7CiAKIHVud2luZDoKIAlkcGNtX2JlX2RhaV9zdGFydHVwX3Vud2luZChmZSwgZmVfc3Vic3RyZWFtLT5zdHJlYW0pOwogYmVfZXJyOgotCWZlLT5kcGNtW3N0cmVhbV0ucnVudGltZV91cGRhdGUgPSBTTkRfU09DX0RQQ01fVVBEQVRFX05POworCWRwY21fc2V0X2ZlX3VwZGF0ZV9zdGF0ZShmZSwgc3RyZWFtLCBTTkRfU09DX0RQQ01fVVBEQVRFX05PKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjAzLDcgKzE2MjYsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpmZSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCWludCBzdHJlYW0gPSBzdWJzdHJlYW0tPnN0cmVhbTsKIAotCWZlLT5kcGNtW3N0cmVhbV0ucnVudGltZV91cGRhdGUgPSBTTkRfU09DX0RQQ01fVVBEQVRFX0ZFOworCWRwY21fc2V0X2ZlX3VwZGF0ZV9zdGF0ZShmZSwgc3RyZWFtLCBTTkRfU09DX0RQQ01fVVBEQVRFX0ZFKTsKIAogCS8qIHNodXRkb3duIHRoZSBCRXMgKi8KIAlkcGNtX2JlX2RhaV9zaHV0ZG93bihmZSwgc3Vic3RyZWFtLT5zdHJlYW0pOwpAQCAtMTYxNyw3ICsxNjQwLDcgQEAKIAlkcGNtX2RhcG1fc3RyZWFtX2V2ZW50KGZlLCBzdHJlYW0sIFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCk7CiAKIAlmZS0+ZHBjbVtzdHJlYW1dLnN0YXRlID0gU05EX1NPQ19EUENNX1NUQVRFX0NMT1NFOwotCWZlLT5kcGNtW3N0cmVhbV0ucnVudGltZV91cGRhdGUgPSBTTkRfU09DX0RQQ01fVVBEQVRFX05POworCWRwY21fc2V0X2ZlX3VwZGF0ZV9zdGF0ZShmZSwgc3RyZWFtLCBTTkRfU09DX0RQQ01fVVBEQVRFX05PKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY2NSw3ICsxNjg4LDcgQEAKIAlpbnQgZXJyLCBzdHJlYW0gPSBzdWJzdHJlYW0tPnN0cmVhbTsKIAogCW11dGV4X2xvY2tfbmVzdGVkKCZmZS0+Y2FyZC0+bXV0ZXgsIFNORF9TT0NfQ0FSRF9DTEFTU19SVU5USU1FKTsKLQlmZS0+ZHBjbVtzdHJlYW1dLnJ1bnRpbWVfdXBkYXRlID0gU05EX1NPQ19EUENNX1VQREFURV9GRTsKKwlkcGNtX3NldF9mZV91cGRhdGVfc3RhdGUoZmUsIHN0cmVhbSwgU05EX1NPQ19EUENNX1VQREFURV9GRSk7CiAKIAlkZXZfZGJnKGZlLT5kZXYsICJBU29DOiBod19mcmVlIEZFICVzXG4iLCBmZS0+ZGFpX2xpbmstPm5hbWUpOwogCkBAIC0xNjgwLDcgKzE3MDMsNyBAQAogCWVyciA9IGRwY21fYmVfZGFpX2h3X2ZyZWUoZmUsIHN0cmVhbSk7CiAKIAlmZS0+ZHBjbVtzdHJlYW1dLnN0YXRlID0gU05EX1NPQ19EUENNX1NUQVRFX0hXX0ZSRUU7Ci0JZmUtPmRwY21bc3RyZWFtXS5ydW50aW1lX3VwZGF0ZSA9IFNORF9TT0NfRFBDTV9VUERBVEVfTk87CisJZHBjbV9zZXRfZmVfdXBkYXRlX3N0YXRlKGZlLCBzdHJlYW0sIFNORF9TT0NfRFBDTV9VUERBVEVfTk8pOwogCiAJbXV0ZXhfdW5sb2NrKCZmZS0+Y2FyZC0+bXV0ZXgpOwogCXJldHVybiAwOwpAQCAtMTc3Myw3ICsxNzk2LDcgQEAKIAlpbnQgcmV0LCBzdHJlYW0gPSBzdWJzdHJlYW0tPnN0cmVhbTsKIAogCW11dGV4X2xvY2tfbmVzdGVkKCZmZS0+Y2FyZC0+bXV0ZXgsIFNORF9TT0NfQ0FSRF9DTEFTU19SVU5USU1FKTsKLQlmZS0+ZHBjbVtzdHJlYW1dLnJ1bnRpbWVfdXBkYXRlID0gU05EX1NPQ19EUENNX1VQREFURV9GRTsKKwlkcGNtX3NldF9mZV91cGRhdGVfc3RhdGUoZmUsIHN0cmVhbSwgU05EX1NPQ19EUENNX1VQREFURV9GRSk7CiAKIAltZW1jcHkoJmZlLT5kcGNtW3N1YnN0cmVhbS0+c3RyZWFtXS5od19wYXJhbXMsIHBhcmFtcywKIAkJCXNpemVvZihzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpKTsKQEAgLTE3OTYsNyArMTgxOSw3IEBACiAJCWZlLT5kcGNtW3N0cmVhbV0uc3RhdGUgPSBTTkRfU09DX0RQQ01fU1RBVEVfSFdfUEFSQU1TOwogCiBvdXQ6Ci0JZmUtPmRwY21bc3RyZWFtXS5ydW50aW1lX3VwZGF0ZSA9IFNORF9TT0NfRFBDTV9VUERBVEVfTk87CisJZHBjbV9zZXRfZmVfdXBkYXRlX3N0YXRlKGZlLCBzdHJlYW0sIFNORF9TT0NfRFBDTV9VUERBVEVfTk8pOwogCW11dGV4X3VubG9jaygmZmUtPmNhcmQtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTkxMCw3ICsxOTMzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRwY21fYmVfZGFpX3RyaWdnZXIpOwogCi1zdGF0aWMgaW50IGRwY21fZmVfZGFpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCitzdGF0aWMgaW50IGRwY21fZmVfZGFpX2RvX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKmZlID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJaW50IHN0cmVhbSA9IHN1YnN0cmVhbS0+c3RyZWFtLCByZXQ7CkBAIC0xOTg0LDYgKzIwMDcsMjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGRwY21fZmVfZGFpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKmZlID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IHN0cmVhbSA9IHN1YnN0cmVhbS0+c3RyZWFtOworCisJLyogaWYgRkUncyBydW50aW1lX3VwZGF0ZSBpcyBhbHJlYWR5IHNldCwgd2UncmUgaW4gcmFjZTsKKwkgKiBwcm9jZXNzIHRoaXMgdHJpZ2dlciBsYXRlciBhdCBleGl0CisJICovCisJaWYgKGZlLT5kcGNtW3N0cmVhbV0ucnVudGltZV91cGRhdGUgIT0gU05EX1NPQ19EUENNX1VQREFURV9OTykgeworCQlmZS0+ZHBjbVtzdHJlYW1dLnRyaWdnZXJfcGVuZGluZyA9IGNtZCArIDE7CisJCXJldHVybiAwOyAvKiBkZWxheWVkLCBhc3N1bWluZyBpdCdzIHN1Y2Nlc3NmdWwgKi8KKwl9CisKKwkvKiB3ZSdyZSBhbG9uZSwgbGV0J3MgdHJpZ2dlciAqLworCXJldHVybiBkcGNtX2ZlX2RhaV9kb190cmlnZ2VyKHN1YnN0cmVhbSwgY21kKTsKK30KKwogaW50IGRwY21fYmVfZGFpX3ByZXBhcmUoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKmZlLCBpbnQgc3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX2RwY20gKmRwY207CkBAIC0yMDI3LDcgKzIwNjcsNyBAQAogCiAJZGV2X2RiZyhmZS0+ZGV2LCAiQVNvQzogcHJlcGFyZSBGRSAlc1xuIiwgZmUtPmRhaV9saW5rLT5uYW1lKTsKIAotCWZlLT5kcGNtW3N0cmVhbV0ucnVudGltZV91cGRhdGUgPSBTTkRfU09DX0RQQ01fVVBEQVRFX0ZFOworCWRwY21fc2V0X2ZlX3VwZGF0ZV9zdGF0ZShmZSwgc3RyZWFtLCBTTkRfU09DX0RQQ01fVVBEQVRFX0ZFKTsKIAogCS8qIHRoZXJlIGlzIG5vIHBvaW50IHByZXBhcmluZyB0aGlzIEZFIGlmIHRoZXJlIGFyZSBubyBCRXMgKi8KIAlpZiAobGlzdF9lbXB0eSgmZmUtPmRwY21bc3RyZWFtXS5iZV9jbGllbnRzKSkgewpAQCAtMjA1NCw3ICsyMDk0LDcgQEAKIAlmZS0+ZHBjbVtzdHJlYW1dLnN0YXRlID0gU05EX1NPQ19EUENNX1NUQVRFX1BSRVBBUkU7CiAKIG91dDoKLQlmZS0+ZHBjbVtzdHJlYW1dLnJ1bnRpbWVfdXBkYXRlID0gU05EX1NPQ19EUENNX1VQREFURV9OTzsKKwlkcGNtX3NldF9mZV91cGRhdGVfc3RhdGUoZmUsIHN0cmVhbSwgU05EX1NPQ19EUENNX1VQREFURV9OTyk7CiAJbXV0ZXhfdW5sb2NrKCZmZS0+Y2FyZC0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIyMDEsMTEgKzIyNDEsMTEgQEAKIHsKIAlpbnQgcmV0OwogCi0JZmUtPmRwY21bc3RyZWFtXS5ydW50aW1lX3VwZGF0ZSA9IFNORF9TT0NfRFBDTV9VUERBVEVfQkU7CisJZHBjbV9zZXRfZmVfdXBkYXRlX3N0YXRlKGZlLCBzdHJlYW0sIFNORF9TT0NfRFBDTV9VUERBVEVfQkUpOwogCXJldCA9IGRwY21fcnVuX3VwZGF0ZV9zdGFydHVwKGZlLCBzdHJlYW0pOwogCWlmIChyZXQgPCAwKQogCQlkZXZfZXJyKGZlLT5kZXYsICJBU29DOiBmYWlsZWQgdG8gc3RhcnR1cCBzb21lIEJFc1xuIik7Ci0JZmUtPmRwY21bc3RyZWFtXS5ydW50aW1lX3VwZGF0ZSA9IFNORF9TT0NfRFBDTV9VUERBVEVfTk87CisJZHBjbV9zZXRfZmVfdXBkYXRlX3N0YXRlKGZlLCBzdHJlYW0sIFNORF9TT0NfRFBDTV9VUERBVEVfTk8pOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIyMTQsMTEgKzIyNTQsMTEgQEAKIHsKIAlpbnQgcmV0OwogCi0JZmUtPmRwY21bc3RyZWFtXS5ydW50aW1lX3VwZGF0ZSA9IFNORF9TT0NfRFBDTV9VUERBVEVfQkU7CisJZHBjbV9zZXRfZmVfdXBkYXRlX3N0YXRlKGZlLCBzdHJlYW0sIFNORF9TT0NfRFBDTV9VUERBVEVfQkUpOwogCXJldCA9IGRwY21fcnVuX3VwZGF0ZV9zaHV0ZG93bihmZSwgc3RyZWFtKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihmZS0+ZGV2LCAiQVNvQzogZmFpbGVkIHRvIHNodXRkb3duIHNvbWUgQkVzXG4iKTsKLQlmZS0+ZHBjbVtzdHJlYW1dLnJ1bnRpbWVfdXBkYXRlID0gU05EX1NPQ19EUENNX1VQREFURV9OTzsKKwlkcGNtX3NldF9mZV91cGRhdGVfc3RhdGUoZmUsIHN0cmVhbSwgU05EX1NPQ19EUENNX1VQREFURV9OTyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhcmQuYyBiL3NvdW5kL3VzYi9jYXJkLmMKaW5kZXggN2VjZDBlOC4uZjYxZWJiMSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhcmQuYworKysgYi9zb3VuZC91c2IvY2FyZC5jCkBAIC01OTEsMTggKzU5MSwxOSBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCWJvb2wgd2FzX3NodXRkb3duOwogCiAJaWYgKGNoaXAgPT0gKHZvaWQgKiktMUwpCiAJCXJldHVybjsKIAogCWNhcmQgPSBjaGlwLT5jYXJkOwogCWRvd25fd3JpdGUoJmNoaXAtPnNodXRkb3duX3J3c2VtKTsKKwl3YXNfc2h1dGRvd24gPSBjaGlwLT5zaHV0ZG93bjsKIAljaGlwLT5zaHV0ZG93biA9IDE7CiAJdXBfd3JpdGUoJmNoaXAtPnNodXRkb3duX3J3c2VtKTsKIAogCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKLQljaGlwLT5udW1faW50ZXJmYWNlcy0tOwotCWlmIChjaGlwLT5udW1faW50ZXJmYWNlcyA8PSAwKSB7CisJaWYgKCF3YXNfc2h1dGRvd24pIHsKIAkJc3RydWN0IHNuZF91c2JfZW5kcG9pbnQgKmVwOwogCiAJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CkBAIC02MjIsNiArNjIzLDEwIEBACiAJCWxpc3RfZm9yX2VhY2gocCwgJmNoaXAtPm1peGVyX2xpc3QpIHsKIAkJCXNuZF91c2JfbWl4ZXJfZGlzY29ubmVjdChwKTsKIAkJfQorCX0KKworCWNoaXAtPm51bV9pbnRlcmZhY2VzLS07CisJaWYgKGNoaXAtPm51bV9pbnRlcmZhY2VzIDw9IDApIHsKIAkJdXNiX2NoaXBbY2hpcC0+aW5kZXhdID0gTlVMTDsKIAkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWl4ZXIuYyBiL3NvdW5kL3VzYi9taXhlci5jCmluZGV4IDJlNGE5ZGIuLjZlMzU0ZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taXhlci5jCisrKyBiL3NvdW5kL3VzYi9taXhlci5jCkBAIC0yMDMzLDEwICsyMDMzLDExIEBACiAJY3ZhbC0+cmVzID0gMTsKIAljdmFsLT5pbml0aWFsaXplZCA9IDE7CiAKLQlpZiAoZGVzYy0+YkRlc2NyaXB0b3JTdWJ0eXBlID09IFVBQzJfQ0xPQ0tfU0VMRUNUT1IpCi0JCWN2YWwtPmNvbnRyb2wgPSBVQUMyX0NYX0NMT0NLX1NFTEVDVE9SOwotCWVsc2UKKwlpZiAoc3RhdGUtPm1peGVyLT5wcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKQogCQljdmFsLT5jb250cm9sID0gMDsKKwllbHNlIC8qIFVBQ19WRVJTSU9OXzIgKi8KKwkJY3ZhbC0+Y29udHJvbCA9IChkZXNjLT5iRGVzY3JpcHRvclN1YnR5cGUgPT0gVUFDMl9DTE9DS19TRUxFQ1RPUikgPworCQkJVUFDMl9DWF9DTE9DS19TRUxFQ1RPUiA6IFVBQzJfU1VfU0VMRUNUT1I7CiAKIAluYW1lbGlzdCA9IGttYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBkZXNjLT5iTnJJblBpbnMsIEdGUF9LRVJORUwpOwogCWlmICghbmFtZWxpc3QpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuYyBiL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuYwppbmRleCBmMTE5YTQxLi44YzliZjRiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWl4ZXJfcXVpcmtzLmMKKysrIGIvc291bmQvdXNiL21peGVyX3F1aXJrcy5jCkBAIC01OTMsMTAgKzU5MywxMCBAQAogCWlmIChtaXhlci0+Y2hpcC0+c2h1dGRvd24pCiAJCXJldCA9IC1FTk9ERVY7CiAJZWxzZQotCQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgYlJlcXVlc3QsCisJCXJldCA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBiUmVxdWVzdCwKIAkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAogCQkJCSAgMCwgd0luZGV4LAotCQkJCSAgJnRtcCwgc2l6ZW9mKHRtcCksIDEwMDApOworCQkJCSAgJnRtcCwgc2l6ZW9mKHRtcCkpOwogCXVwX3JlYWQoJm1peGVyLT5jaGlwLT5zaHV0ZG93bl9yd3NlbSk7CiAKIAlpZiAocmV0IDwgMCkgewpAQCAtODg1LDYgKzg4NSwxMSBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCitzdGF0aWMgdm9pZCBrY3RsX3ByaXZhdGVfdmFsdWVfZnJlZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsKQoreworCWtmcmVlKCh2b2lkICopa2N0bC0+cHJpdmF0ZV92YWx1ZSk7Cit9CisKIHN0YXRpYyBpbnQgc25kX2Z0dV9jcmVhdGVfZWZmZWN0X3N3aXRjaChzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIsCiAJaW50IHZhbGlkeCwgaW50IGJVbml0SUQpCiB7CkBAIC05MTksNiArOTI0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJa2N0bC0+cHJpdmF0ZV9mcmVlID0ga2N0bF9wcml2YXRlX3ZhbHVlX2ZyZWU7CiAJZXJyID0gc25kX2N0bF9hZGQobWl4ZXItPmNoaXAtPmNhcmQsIGtjdGwpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3F1aXJrcy5jIGIvc291bmQvdXNiL3F1aXJrcy5jCmluZGV4IGQyYWE0NWEuLjYwZGZlMGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9xdWlya3MuYworKysgYi9zb3VuZC91c2IvcXVpcmtzLmMKQEAgLTExNDYsNiArMTE0NiwyMCBAQAogCWlmICgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDIzYmEpICYmCiAJICAgIChyZXF1ZXN0dHlwZSAmIFVTQl9UWVBFX01BU0spID09IFVTQl9UWVBFX0NMQVNTKQogCQltZGVsYXkoMjApOworCisJLyogTWFyYW50ei9EZW5vbiBkZXZpY2VzIHdpdGggVVNCIERBQyBmdW5jdGlvbmFsaXR5IG5lZWQgYSBkZWxheQorCSAqIGFmdGVyIGVhY2ggY2xhc3MgY29tcGxpYW50IHJlcXVlc3QKKwkgKi8KKwlpZiAoKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgxNTRlKSAmJgorCSAgICAocmVxdWVzdHR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9DTEFTUykgeworCisJCXN3aXRjaCAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpIHsKKwkJY2FzZSAweDMwMDU6IC8qIE1hcmFudHogSEQtREFDMSAqLworCQljYXNlIDB4MzAwNjogLyogTWFyYW50eiBTQS0xNFMxICovCisJCQltZGVsYXkoMjApOworCQkJYnJlYWs7CisJCX0KKwl9CiB9CiAKIC8qCkBAIC0xMTc5LDEyICsxMTkzLDEyIEBACiAJLyogaUZpIEF1ZGlvIG1pY3JvL25hbm8gaURTRCAqLwogCWNhc2UgVVNCX0lEKDB4MjBiMSwgMHgzMDA4KToKIAkJaWYgKGZwLT5hbHRzZXR0aW5nID09IDIpCi0JCQlyZXR1cm4gU05EUlZfUENNX0ZNVEJJVF9EU0RfVTMyX0xFOworCQkJcmV0dXJuIFNORFJWX1BDTV9GTVRCSVRfRFNEX1UzMl9CRTsKIAkJYnJlYWs7CiAJLyogRElZSU5ISyBEU0QgRFhEIDM4NGtIeiBVU0IgdG8gSTJTL0RTRCAqLwogCWNhc2UgVVNCX0lEKDB4MjBiMSwgMHgyMDA5KToKIAkJaWYgKGZwLT5hbHRzZXR0aW5nID09IDMpCi0JCQlyZXR1cm4gU05EUlZfUENNX0ZNVEJJVF9EU0RfVTMyX0xFOworCQkJcmV0dXJuIFNORFJWX1BDTV9GTVRCSVRfRFNEX1UzMl9CRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS90b29scy9saWIvdHJhY2VldmVudC9wbHVnaW5fc2NzaS5jIGIvdG9vbHMvbGliL3RyYWNlZXZlbnQvcGx1Z2luX3Njc2kuYwppbmRleCBlZGEzMjZmLi4zNzI3ZGU0IDEwMDY0NAotLS0gYS90b29scy9saWIvdHJhY2VldmVudC9wbHVnaW5fc2NzaS5jCisrKyBiL3Rvb2xzL2xpYi90cmFjZWV2ZW50L3BsdWdpbl9zY3NpLmMKQEAgLTg1LDggKzg1LDkgQEAKICNkZWZpbmUgTU9WRV9NRURJVU0JCQkweGE1CiAjZGVmaW5lIEVYQ0hBTkdFX01FRElVTQkJCTB4YTYKICNkZWZpbmUgUkVBRF8xMgkJCQkweGE4CisjZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX09VVF8xMgkJMHhhOQogI2RlZmluZSBXUklURV8xMgkJCTB4YWEKLSNkZWZpbmUgUkVBRF9NRURJQV9TRVJJQUxfTlVNQkVSCTB4YWIKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU5fMTIJCTB4YWIKICNkZWZpbmUgV1JJVEVfVkVSSUZZXzEyCQkJMHhhZQogI2RlZmluZSBWRVJJRllfMTIJCQkweGFmCiAjZGVmaW5lIFNFQVJDSF9ISUdIXzEyCQkJMHhiMApAQCAtMTA3LDcgKzEwOCw5IEBACiAjZGVmaW5lIFZFUklGWV8xNgkJCTB4OGYKICNkZWZpbmUgU1lOQ0hST05JWkVfQ0FDSEVfMTYJCTB4OTEKICNkZWZpbmUgV1JJVEVfU0FNRV8xNgkJCTB4OTMKLSNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU4JCTB4OWUKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fQklESVJFQ1RJT05BTAkweDlkCisjZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX0lOXzE2CQkweDllCisjZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX09VVF8xNgkJMHg5ZgogLyogdmFsdWVzIGZvciBzZXJ2aWNlIGFjdGlvbiBpbiAqLwogI2RlZmluZQlTQUlfUkVBRF9DQVBBQ0lUWV8xNgkJMHgxMAogI2RlZmluZSBTQUlfR0VUX0xCQV9TVEFUVVMJCTB4MTIKQEAgLTM5Myw3ICszOTYsNyBAQAogCQlyZXR1cm4gc2NzaV90cmFjZV9ydzE2KHAsIGNkYiwgbGVuKTsKIAljYXNlIFVOTUFQOgogCQlyZXR1cm4gc2NzaV90cmFjZV91bm1hcChwLCBjZGIsIGxlbik7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlyZXR1cm4gc2NzaV90cmFjZV9zZXJ2aWNlX2FjdGlvbl9pbihwLCBjZGIsIGxlbik7CiAJY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgogCQlyZXR1cm4gc2NzaV90cmFjZV92YXJsZW4ocCwgY2RiLCBsZW4pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCmluZGV4IDcxNzIyMWUuLjQwMzk5YzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQorKysgYi90b29scy9wZXJmLy5naXRpZ25vcmUKQEAgLTIsNiArMiw4IEBACiBQRVJGLUdVSS1WQVJTCiBQRVJGLVZFUlNJT04tRklMRQogcGVyZgorcGVyZi1yZWFkLXZkc28zMgorcGVyZi1yZWFkLXZkc294MzIKIHBlcmYtaGVscAogcGVyZi1yZWNvcmQKIHBlcmYtcmVwb3J0CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dAppbmRleCAzOThmOGQ1Li5hZjlhNTRlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQKQEAgLTIxNCw2ICsyMTQsMTIgQEAKIEFmdGVyIHN0YXJ0aW5nIHRoZSBwcm9ncmFtLCB3YWl0IG1zZWNzIGJlZm9yZSBtZWFzdXJpbmcuIFRoaXMgaXMgdXNlZnVsIHRvCiBmaWx0ZXIgb3V0IHRoZSBzdGFydHVwIHBoYXNlIG9mIHRoZSBwcm9ncmFtLCB3aGljaCBpcyBvZnRlbiB2ZXJ5IGRpZmZlcmVudC4KIAorLUk6OgorLS1pbnRyLXJlZ3M6OgorQ2FwdHVyZSBtYWNoaW5lIHN0YXRlIChyZWdpc3RlcnMpIGF0IGludGVycnVwdCwgaS5lLiwgb24gY291bnRlciBvdmVyZmxvd3MgZm9yCitlYWNoIHNhbXBsZS4gTGlzdCBvZiBjYXB0dXJlZCByZWdpc3RlcnMgZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBUaGlzIG9wdGlvbgoraXMgb2ZmIGJ5IGRlZmF1bHQuCisKIFNFRSBBTFNPCiAtLS0tLS0tLQogbGlua3BlcmY6cGVyZi1zdGF0WzFdLCBsaW5rcGVyZjpwZXJmLWxpc3RbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CmluZGV4IDA5MjdiZjQuLmRkN2NjY2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dApAQCAtMTU5LDcgKzE1OSw3IEBACiAtLWR1bXAtcmF3LXRyYWNlOjoKICAgICAgICAgRHVtcCByYXcgdHJhY2UgaW4gQVNDSUkuCiAKLS1nIFt0eXBlLG1pblssbGltaXRdLG9yZGVyWyxrZXldXTo6CistZyBbdHlwZSxtaW5bLGxpbWl0XSxvcmRlclssa2V5XVssYnJhbmNoXV06OgogLS1jYWxsLWdyYXBoOjoKICAgICAgICAgRGlzcGxheSBjYWxsIGNoYWlucyB1c2luZyB0eXBlLCBtaW4gcGVyY2VudCB0aHJlc2hvbGQsIG9wdGlvbmFsIHByaW50CiAJbGltaXQgYW5kIG9yZGVyLgpAQCAtMTc3LDYgKzE3NywxMSBAQAogCS0gZnVuY3Rpb246IGNvbXBhcmUgb24gZnVuY3Rpb25zCiAJLSBhZGRyZXNzOiBjb21wYXJlIG9uIGluZGl2aWR1YWwgY29kZSBhZGRyZXNzZXMKIAorCWJyYW5jaCBjYW4gYmU6CisJLSBicmFuY2g6IGluY2x1ZGUgbGFzdCBicmFuY2ggaW5mb3JtYXRpb24gaW4gY2FsbGdyYXBoCisJd2hlbiBhdmFpbGFibGUuIFVzdWFsbHkgbW9yZSBjb252ZW5pZW50IHRvIHVzZSAtLWJyYW5jaC1oaXN0b3J5CisJZm9yIHRoaXMuCisKIAlEZWZhdWx0OiBmcmFjdGFsLDAuNSxjYWxsZWUsZnVuY3Rpb24uCiAKIC0tY2hpbGRyZW46OgpAQCAtMjY2LDYgKzI3MSwxMSBAQAogCWJyYW5jaCBzdGFja3MgYW5kIGl0IHdpbGwgYXV0b21hdGljYWxseSBzd2l0Y2ggdG8gdGhlIGJyYW5jaCB2aWV3IG1vZGUsCiAJdW5sZXNzIC0tbm8tYnJhbmNoLXN0YWNrIGlzIHVzZWQuCiAKKy0tYnJhbmNoLWhpc3Rvcnk6OgorCUFkZCB0aGUgYWRkcmVzc2VzIG9mIHNhbXBsZWQgdGFrZW4gYnJhbmNoZXMgdG8gdGhlIGNhbGxzdGFjay4KKwlUaGlzIGFsbG93cyB0byBleGFtaW5lIHRoZSBwYXRoIHRoZSBwcm9ncmFtIHRvb2sgdG8gZWFjaCBzYW1wbGUuCisJVGhlIGRhdGEgY29sbGVjdGlvbiBtdXN0IGhhdmUgdXNlZCAtYiAob3IgLWopIGFuZCAtZy4KKwogLS1vYmpkdW1wPTxwYXRoPjo6CiAgICAgICAgIFBhdGggdG8gb2JqZHVtcCBiaW5hcnkuCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgppbmRleCAyNjI5MTZmLi40NzhlZmE5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCkBAIC02MCw2ICs2MCwxNSBAQAogIwogIyBEZWZpbmUgTk9fTElCRFdfRFdBUkZfVU5XSU5EIGlmIHlvdSBkbyBub3Qgd2FudCBsaWJkdyBzdXBwb3J0CiAjIGZvciBkd2FyZiBiYWNrdHJhY2UgcG9zdCB1bndpbmQuCisjCisjIERlZmluZSBOT19QRVJGX1JFQURfVkRTTzMyIGlmIHlvdSBkbyBub3Qgd2FudCB0byBidWlsZCBwZXJmLXJlYWQtdmRzbzMyCisjIGZvciByZWFkaW5nIHRoZSAzMi1iaXQgY29tcGF0aWJpbGl0eSBWRFNPIGluIDY0LWJpdCBtb2RlCisjCisjIERlZmluZSBOT19QRVJGX1JFQURfVkRTT1gzMiBpZiB5b3UgZG8gbm90IHdhbnQgdG8gYnVpbGQgcGVyZi1yZWFkLXZkc294MzIKKyMgZm9yIHJlYWRpbmcgdGhlIHgzMiBtb2RlIDMyLWJpdCBjb21wYXRpYmlsaXR5IFZEU08gaW4gNjQtYml0IG1vZGUKKyMKKyMgRGVmaW5lIE5PX1pMSUIgaWYgeW91IGRvIG5vdCB3YW50IHRvIHN1cHBvcnQgY29tcHJlc3NlZCBrZXJuZWwgbW9kdWxlcworCiAKIGlmZXEgKCQoc3JjdHJlZSksKQogc3JjdHJlZSA6PSAkKHBhdHN1YnN0ICUvLCUsJChkaXIgJChzaGVsbCBwd2QpKSkKQEAgLTE3MSwxMSArMTgwLDE2IEBACiAKIFNDUklQVFMgPSAkKHBhdHN1YnN0ICUuc2gsJSwkKFNDUklQVF9TSCkpCiAKLSMKLSMgU2luZ2xlICdwZXJmJyBiaW5hcnkgcmlnaHQgbm93OgotIwogUFJPR1JBTVMgKz0gJChPVVRQVVQpcGVyZgogCitpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU08zMgorUFJPR1JBTVMgKz0gJChPVVRQVVQpcGVyZi1yZWFkLXZkc28zMgorZW5kaWYKKworaWZuZGVmIE5PX1BFUkZfUkVBRF9WRFNPWDMyCitQUk9HUkFNUyArPSAkKE9VVFBVVClwZXJmLXJlYWQtdmRzb3gzMgorZW5kaWYKKwogIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYW5kICdpbnN0YWxsJyB3aWxsIGluc3RhbGwsIGluIHBlcmZleGVjZGlyCiBBTExfUFJPR1JBTVMgPSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCiAKQEAgLTI0NywxMiArMjYxLDE0IEBACiBMSUJfSCArPSB1dGlsL2NhY2hlLmgKIExJQl9IICs9IHV0aWwvY2FsbGNoYWluLmgKIExJQl9IICs9IHV0aWwvYnVpbGQtaWQuaAorTElCX0ggKz0gdXRpbC9kYi1leHBvcnQuaAogTElCX0ggKz0gdXRpbC9kZWJ1Zy5oCiBMSUJfSCArPSB1dGlsL3BtdS5oCiBMSUJfSCArPSB1dGlsL2V2ZW50LmgKIExJQl9IICs9IHV0aWwvZXZzZWwuaAogTElCX0ggKz0gdXRpbC9ldmxpc3QuaAogTElCX0ggKz0gdXRpbC9leGVjX2NtZC5oCitMSUJfSCArPSB1dGlsL2ZpbmQtdmRzby1tYXAuYwogTElCX0ggKz0gdXRpbC9sZXZlbnNodGVpbi5oCiBMSUJfSCArPSB1dGlsL21hY2hpbmUuaAogTElCX0ggKz0gdXRpbC9tYXAuaApAQCAtMzA0LDYgKzMyMCw3IEBACiBMSUJfSCArPSB1aS91aS5oCiBMSUJfSCArPSB1dGlsL2RhdGEuaAogTElCX0ggKz0gdXRpbC9rdm0tc3RhdC5oCitMSUJfSCArPSB1dGlsL3RocmVhZC1zdGFjay5oCiAKIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvYWJzcGF0aC5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2FsaWFzLm8KQEAgLTMxMSw2ICszMjgsNyBAQAogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9idWlsZC1pZC5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2NvbmZpZy5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2N0eXBlLm8KK0xJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvZGItZXhwb3J0Lm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvcG11Lm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvZW52aXJvbm1lbnQubwogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9ldmVudC5vCkBAIC0zODAsNiArMzk4LDcgQEAKIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvZGF0YS5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL3RzYy5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2Nsb2V4ZWMubworTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC90aHJlYWQtc3RhY2subwogCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1aS9zZXR1cC5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1aS9oZWxwbGluZS5vCkBAIC00NzgsOCArNDk3LDYgQEAKIGVuZGlmCiAKIGlmZGVmIE5PX0xJQkVMRgotRVhUTElCUyA6PSAkKGZpbHRlci1vdXQgLWxlbGYsJChFWFRMSUJTKSkKLQogIyBSZW1vdmUgRUxGL0RXQVJGIGRlcGVuZGVudCBjb2RlcwogTElCX09CSlMgOj0gJChmaWx0ZXItb3V0ICQoT1VUUFVUKXV0aWwvc3ltYm9sLWVsZi5vLCQoTElCX09CSlMpKQogTElCX09CSlMgOj0gJChmaWx0ZXItb3V0ICQoT1VUUFVUKXV0aWwvZHdhcmYtYXV4Lm8sJChMSUJfT0JKUykpCkBAIC01NjgsNiArNTg1LDEwIEBACiAgIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9udW1hLm8KIGVuZGlmCiAKK2lmbmRlZiBOT19aTElCCisgIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvemxpYi5vCitlbmRpZgorCiBpZmRlZiBBU0NJSURPQzgKICAgZXhwb3J0IEFTQ0lJRE9DOAogZW5kaWYKQEAgLTczMiw2ICs3NTMsMTYgQEAKICQoT1VUUFVUKXBlcmYtJTogJS5vICQoUEVSRkxJQlMpCiAJJChRVUlFVF9MSU5LKSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKExERkxBR1MpICQoZmlsdGVyICUubywkXikgJChMSUJTKQogCitpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU08zMgorJChPVVRQVVQpcGVyZi1yZWFkLXZkc28zMjogcGVyZi1yZWFkLXZkc28uYyB1dGlsL2ZpbmQtdmRzby1tYXAuYworCSQoUVVJRVRfQ0MpJChDQykgLW0zMiAkKGZpbHRlciAtc3RhdGljLCQoTERGTEFHUykpIC1XYWxsIC1XZXJyb3IgLW8gJEAgcGVyZi1yZWFkLXZkc28uYworZW5kaWYKKworaWZuZGVmIE5PX1BFUkZfUkVBRF9WRFNPWDMyCiskKE9VVFBVVClwZXJmLXJlYWQtdmRzb3gzMjogcGVyZi1yZWFkLXZkc28uYyB1dGlsL2ZpbmQtdmRzby1tYXAuYworCSQoUVVJRVRfQ0MpJChDQykgLW14MzIgJChmaWx0ZXIgLXN0YXRpYywkKExERkxBR1MpKSAtV2FsbCAtV2Vycm9yIC1vICRAIHBlcmYtcmVhZC12ZHNvLmMKK2VuZGlmCisKICQoTElCX09CSlMpICQoQlVJTFRJTl9PQkpTKTogJChMSUJfSCkKICQocGF0c3Vic3QgcGVyZi0lLCUubywkKFBST0dSQU1TKSk6ICQoTElCX0gpICQod2lsZGNhcmQgKi8qLmgpCiAKQEAgLTg3Niw2ICs5MDcsMTQgQEAKIAkJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknOyBcCiAJCSQoSU5TVEFMTCkgJChPVVRQVVQpcGVyZiAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKSc7IFwKIAkJJChMTikgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSkvcGVyZicgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSkvdHJhY2UnCitpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU08zMgorCSQoY2FsbCBRVUlFVF9JTlNUQUxMLCBwZXJmLXJlYWQtdmRzbzMyKSBcCisJCSQoSU5TVEFMTCkgJChPVVRQVVQpcGVyZi1yZWFkLXZkc28zMiAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKSc7CitlbmRpZgoraWZuZGVmIE5PX1BFUkZfUkVBRF9WRFNPWDMyCisJJChjYWxsIFFVSUVUX0lOU1RBTEwsIHBlcmYtcmVhZC12ZHNveDMyKSBcCisJCSQoSU5TVEFMTCkgJChPVVRQVVQpcGVyZi1yZWFkLXZkc294MzIgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknOworZW5kaWYKIAkkKGNhbGwgUVVJRVRfSU5TVEFMTCwgbGliZXhlYykgXAogCQkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCiAJJChjYWxsIFFVSUVUX0lOU1RBTEwsIHBlcmYtYXJjaGl2ZSkgXApAQCAtOTI4LDcgKzk2Nyw3IEBACiAKIGNsZWFuOiAkKExJQlRSQUNFRVZFTlQpLWNsZWFuICQoTElCQVBJS0ZTKS1jbGVhbiBjb25maWctY2xlYW4KIAkkKGNhbGwgUVVJRVRfQ0xFQU4sIGNvcmUtb2JqcykgICQoUk0pICQoTElCX09CSlMpICQoQlVJTFRJTl9PQkpTKSAkKExJQl9GSUxFKSAkKE9VVFBVVClwZXJmLWFyY2hpdmUgJChPVVRQVVQpcGVyZi13aXRoLWtjb3JlICQoT1VUUFVUKXBlcmYubyAkKExBTkdfQklORElOR1MpICQoR1RLX09CSlMpCi0JJChjYWxsIFFVSUVUX0NMRUFOLCBjb3JlLXByb2dzKSAkKFJNKSAkKEFMTF9QUk9HUkFNUykgcGVyZgorCSQoY2FsbCBRVUlFVF9DTEVBTiwgY29yZS1wcm9ncykgJChSTSkgJChBTExfUFJPR1JBTVMpIHBlcmYgcGVyZi1yZWFkLXZkc28zMiBwZXJmLXJlYWQtdmRzb3gzMgogCSQoY2FsbCBRVUlFVF9DTEVBTiwgY29yZS1nZW4pICAgJChSTSkgICouc3BlYyAqLnB5YyAqLnB5byAqLyoucHljICovKi5weW8gJChPVVRQVVQpY29tbW9uLWNtZHMuaCBUQUdTIHRhZ3MgY3Njb3BlKiAkKE9VVFBVVClQRVJGLVZFUlNJT04tRklMRSAkKE9VVFBVVClQRVJGLUNGTEFHUyAkKE9VVFBVVClQRVJGLUZFQVRVUkVTICQoT1VUUFVUKXV0aWwvKi1iaXNvbiogJChPVVRQVVQpdXRpbC8qLWZsZXgqCiAJJChRVUlFVF9TVUJESVIwKURvY3VtZW50YXRpb24gJChRVUlFVF9TVUJESVIxKSBjbGVhbgogCSQocHl0aG9uLWNsZWFuKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYyBiL3Rvb2xzL3BlcmYvYXJjaC9wb3dlcnBjL3V0aWwvc2tpcC1jYWxsY2hhaW4taWR4LmMKaW5kZXggZDczZWY4Yi4uM2JiNTBlYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYworKysgYi90b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAqCQl5ZXQgdXNlZCkKICAqCS0xIGluIGNhc2Ugb2YgZXJyb3JzCiAgKi8KLXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2FkZHIoY29uc3QgY2hhciAqZXhlY19maWxlLCBEd2FyZl9BZGRyIHBjKQorc3RhdGljIGludCBjaGVja19yZXR1cm5fYWRkcihzdHJ1Y3QgZHNvICpkc28sIER3YXJmX0FkZHIgcGMpCiB7CiAJaW50CQlyYyA9IC0xOwogCUR3ZmwJCSpkd2ZsOwpAQCAtMTU2LDE1ICsxNTYsMjcgQEAKIAlEd2FyZl9BZGRyCWVuZCA9IHBjOwogCWJvb2wJCXNpZ25hbHA7CiAKLQlkd2ZsID0gZHdmbF9iZWdpbigmb2ZmbGluZV9jYWxsYmFja3MpOwotCWlmICghZHdmbCkgewotCQlwcl9kZWJ1ZygiZHdmbF9iZWdpbigpIGZhaWxlZDogJXNcbiIsIGR3YXJmX2Vycm1zZygtMSkpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWR3ZmwgPSBkc28tPmR3Zmw7CiAKLQlpZiAoZHdmbF9yZXBvcnRfb2ZmbGluZShkd2ZsLCAiIiwgIGV4ZWNfZmlsZSwgLTEpID09IE5VTEwpIHsKLQkJcHJfZGVidWcoImR3ZmxfcmVwb3J0X29mZmxpbmUoKSBmYWlsZWQgJXNcbiIsIGR3YXJmX2Vycm1zZygtMSkpOwotCQlnb3RvIG91dDsKKwlpZiAoIWR3ZmwpIHsKKwkJZHdmbCA9IGR3ZmxfYmVnaW4oJm9mZmxpbmVfY2FsbGJhY2tzKTsKKwkJaWYgKCFkd2ZsKSB7CisJCQlwcl9kZWJ1ZygiZHdmbF9iZWdpbigpIGZhaWxlZDogJXNcbiIsIGR3YXJmX2Vycm1zZygtMSkpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGR3ZmxfcmVwb3J0X29mZmxpbmUoZHdmbCwgIiIsIGRzby0+bG9uZ19uYW1lLCAtMSkgPT0gTlVMTCkgeworCQkJcHJfZGVidWcoImR3ZmxfcmVwb3J0X29mZmxpbmUoKSBmYWlsZWQgJXNcbiIsCisJCQkJCQlkd2FyZl9lcnJtc2coLTEpKTsKKwkJCS8qCisJCQkgKiBXZSBub3JtYWxseSBjYWNoZSB0aGUgRFdBUkYgZGVidWcgaW5mbyBhbmQgbmV2ZXIKKwkJCSAqIGNhbGwgZHdmbF9lbmQoKS4gQnV0IHRvIHByZXZlbnQgZmQgbGVhaywgZnJlZSBpbgorCQkJICogY2FzZSBvZiBlcnJvci4KKwkJCSAqLworCQkJZHdmbF9lbmQoZHdmbCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlkc28tPmR3ZmwgPSBkd2ZsOwogCX0KIAogCW1vZCA9IGR3ZmxfYWRkcm1vZHVsZShkd2ZsLCBwYyk7CkBAIC0xOTQsNyArMjA2LDYgQEAKIAlyYyA9IGNoZWNrX3JldHVybl9yZWcocmFfcmVnbm8sIGZyYW1lKTsKIAogb3V0OgotCWR3ZmxfZW5kKGR3ZmwpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjIxLDggKzIzMiw3IEBACiAgKglpbmRleDoJb2YgY2FsbGNoYWluIGVudHJ5IHRoYXQgbmVlZHMgdG8gYmUgaWdub3JlZCAoaWYgYW55KQogICoJLTEJaWYgbm8gZW50cnkgbmVlZHMgdG8gYmUgaWdub3JlZCBvciBpbiBjYXNlIG9mIGVycm9ycwogICovCi1pbnQgYXJjaF9za2lwX2NhbGxjaGFpbl9pZHgoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKLQkJCQlzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbikKK2ludCBhcmNoX3NraXBfY2FsbGNoYWluX2lkeChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluKQogewogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXN0cnVjdCBkc28gKmRzbyA9IE5VTEw7CkBAIC0yMzUsNyArMjQ1LDcgQEAKIAogCWlwID0gY2hhaW4tPmlwc1syXTsKIAotCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgbWFjaGluZSwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAorCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAogCQkJTUFQX19GVU5DVElPTiwgaXAsICZhbCk7CiAKIAlpZiAoYWwubWFwKQpAQCAtMjQ2LDcgKzI1Niw3IEBACiAJCXJldHVybiBza2lwX3Nsb3Q7CiAJfQogCi0JcmMgPSBjaGVja19yZXR1cm5fYWRkcihkc28tPmxvbmdfbmFtZSwgaXApOworCXJjID0gY2hlY2tfcmV0dXJuX2FkZHIoZHNvLCBpcCk7CiAKIAlwcl9kZWJ1ZygiRFNPICVzLCBuciAlIiBQUkl4NjQgIiwgaXAgMHglIiBQUkl4NjQgInJjICVkXG4iLAogCQkJCWRzby0+bG9uZ19uYW1lLCBjaGFpbi0+bnIsIGlwLCByYyk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwppbmRleCAyNTExNGM5Li4xY2U0MjVkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKQEAgLTM1Nyw2ICszNTcsNyBAQAogc3RhdGljIHN0cnVjdCBwZXJmX3Rvb2wgdG9vbCA9IHsKIAkuc2FtcGxlCT0gZGlmZl9fcHJvY2Vzc19zYW1wbGVfZXZlbnQsCiAJLm1tYXAJPSBwZXJmX2V2ZW50X19wcm9jZXNzX21tYXAsCisJLm1tYXAyCT0gcGVyZl9ldmVudF9fcHJvY2Vzc19tbWFwMiwKIAkuY29tbQk9IHBlcmZfZXZlbnRfX3Byb2Nlc3NfY29tbSwKIAkuZXhpdAk9IHBlcmZfZXZlbnRfX3Byb2Nlc3NfZXhpdCwKIAkuZm9yawk9IHBlcmZfZXZlbnRfX3Byb2Nlc3NfZm9yaywKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1pbmplY3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1pbmplY3QuYwppbmRleCBkZTk5Y2ExLi44NGRmMmRlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4taW5qZWN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jCkBAIC0yMTcsOCArMjE3LDcgQEAKIAkJZ290byByZXBpcGU7CiAJfQogCi0JdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwKLQkJCSAgICAgIHNhbXBsZS0+aXAsICZhbCk7CisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwgc2FtcGxlLT5pcCwgJmFsKTsKIAogCWlmIChhbC5tYXAgIT0gTlVMTCkgewogCQlpZiAoIWFsLm1hcC0+ZHNvLT5oaXQpIHsKQEAgLTQxMCw2ICs0MDksNyBAQAogCQkJLnRyYWNpbmdfZGF0YQk9IHBlcmZfZXZlbnRfX3JlcGlwZV9vcDJfc3ludGgsCiAJCQkuZmluaXNoZWRfcm91bmQJPSBwZXJmX2V2ZW50X19yZXBpcGVfb3AyX3N5bnRoLAogCQkJLmJ1aWxkX2lkCT0gcGVyZl9ldmVudF9fcmVwaXBlX29wMl9zeW50aCwKKwkJCS5pZF9pbmRleAk9IHBlcmZfZXZlbnRfX3JlcGlwZV9vcDJfc3ludGgsCiAJCX0sCiAJCS5pbnB1dF9uYW1lICA9ICItIiwKIAkJLnNhbXBsZXMgPSBMSVNUX0hFQURfSU5JVChpbmplY3Quc2FtcGxlcyksCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta3ZtLmMgYi90b29scy9wZXJmL2J1aWx0aW4ta3ZtLmMKaW5kZXggYjY1ZWIwNTAuLjNjMGYzZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYworKysgYi90b29scy9wZXJmL2J1aWx0aW4ta3ZtLmMKQEAgLTExMzIsNiArMTEzMiwxMCBAQAogCQkiLW0iLCAiMTAyNCIsCiAJCSItYyIsICIxIiwKIAl9OworCWNvbnN0IGNoYXIgKiBjb25zdCBrdm1fc3RhdF9yZWNvcmRfdXNhZ2VbXSA9IHsKKwkJInBlcmYga3ZtIHN0YXQgcmVjb3JkIFs8b3B0aW9ucz5dIiwKKwkJTlVMTAorCX07CiAJY29uc3QgY2hhciAqIGNvbnN0ICpldmVudHNfdHA7CiAJZXZlbnRzX3RwX3NpemUgPSAwOwogCkBAIC0xMTU5LDYgKzExNjMsMjcgQEAKIAlmb3IgKGogPSAxOyBqIDwgKHVuc2lnbmVkIGludClhcmdjOyBqKyssIGkrKykKIAkJcmVjX2FyZ3ZbaV0gPSBhcmd2W2pdOwogCisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnZScsICJldmVudCIsIFBBUlNFX09QVF9ISURERU4pOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgMCwgImZpbHRlciIsIFBBUlNFX09QVF9ISURERU4pOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ1InLCAicmF3LXNhbXBsZXMiLCBQQVJTRV9PUFRfSElEREVOKTsKKworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ0YnLCAiZnJlcSIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAwLCAiZ3JvdXAiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ2cnLCBOVUxMLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgMCwgImNhbGwtZ3JhcGgiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ2QnLCAiZGF0YSIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnVCcsICJ0aW1lc3RhbXAiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ1AnLCAicGVyaW9kIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICduJywgIm5vLXNhbXBsZXMiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ04nLCAibm8tYnVpbGRpZC1jYWNoZSIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnQicsICJuby1idWlsZGlkIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdHJywgImNncm91cCIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnYicsICJicmFuY2gtYW55IiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdqJywgImJyYW5jaC1maWx0ZXIiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ1cnLCAid2VpZ2h0IiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsIDAsICJ0cmFuc2FjdGlvbiIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisKKwlyZWNvcmRfdXNhZ2UgPSBrdm1fc3RhdF9yZWNvcmRfdXNhZ2U7CiAJcmV0dXJuIGNtZF9yZWNvcmQoaSwgcmVjX2FyZ3YsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IDdhZjI2YWMuLjkyMWJiNjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC01NSw2ICs1NSw3IEBACiAJYm9vbCBzaG93X2Z1bmNzOwogCWJvb2wgbW9kX2V2ZW50czsKIAlib29sIHVwcm9iZXM7CisJYm9vbCBxdWlldDsKIAlpbnQgbmV2ZW50czsKIAlzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCBldmVudHNbTUFYX1BST0JFU107CiAJc3RydWN0IHN0cmxpc3QgKmRlbGxpc3Q7CkBAIC0zMTIsOSArMzEzLDExIEBACiAjZW5kaWYKIAkJTlVMTAogfTsKLQljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAlPUFRfSU5DUigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsCiAJCSAgICAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHBhcnNlZCBhcmd1bWVudHMsIGV0YykiKSwKKwlPUFRfQk9PTEVBTigncScsICJxdWlldCIsICZwYXJhbXMucXVpZXQsCisJCSAgICAiYmUgcXVpZXQgKGRvIG5vdCBzaG93IGFueSBtZXNhZ2VzKSIpLAogCU9QVF9CT09MRUFOKCdsJywgImxpc3QiLCAmcGFyYW1zLmxpc3RfZXZlbnRzLAogCQkgICAgImxpc3QgdXAgY3VycmVudCBwcm9iZSBldmVudHMiKSwKIAlPUFRfQ0FMTEJBQ0soJ2QnLCAiZGVsIiwgTlVMTCwgIltHUk9VUDpdRVZFTlQiLCAiZGVsZXRlIGEgcHJvYmUgZXZlbnQuIiwKQEAgLTM4Miw2ICszODUsMTQgQEAKIAl9OwogCWludCByZXQ7CiAKKwlzZXRfb3B0aW9uX2ZsYWcob3B0aW9ucywgJ2EnLCAiYWRkIiwgUEFSU0VfT1BUX0VYQ0xVU0lWRSk7CisJc2V0X29wdGlvbl9mbGFnKG9wdGlvbnMsICdkJywgImRlbCIsIFBBUlNFX09QVF9FWENMVVNJVkUpOworCXNldF9vcHRpb25fZmxhZyhvcHRpb25zLCAnbCcsICJsaXN0IiwgUEFSU0VfT1BUX0VYQ0xVU0lWRSk7CisjaWZkZWYgSEFWRV9EV0FSRl9TVVBQT1JUCisJc2V0X29wdGlvbl9mbGFnKG9wdGlvbnMsICdMJywgImxpbmUiLCBQQVJTRV9PUFRfRVhDTFVTSVZFKTsKKwlzZXRfb3B0aW9uX2ZsYWcob3B0aW9ucywgJ1YnLCAidmFycyIsIFBBUlNFX09QVF9FWENMVVNJVkUpOworI2VuZGlmCisKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBwcm9iZV91c2FnZSwKIAkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CiAJaWYgKGFyZ2MgPiAwKSB7CkBAIC0zOTYsNiArNDA3LDE0IEBACiAJCX0KIAl9CiAKKwlpZiAocGFyYW1zLnF1aWV0KSB7CisJCWlmICh2ZXJib3NlICE9IDApIHsKKwkJCXByX2VycigiICBFcnJvcjogLXYgYW5kIC1xIGFyZSBleGNsdXNpdmUuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXZlcmJvc2UgPSAtMTsKKwl9CisKIAlpZiAocGFyYW1zLm1heF9wcm9iZV9wb2ludHMgPT0gMCkKIAkJcGFyYW1zLm1heF9wcm9iZV9wb2ludHMgPSBNQVhfUFJPQkVTOwogCkBAIC00MDksMjIgKzQyOCw2IEBACiAJc3ltYm9sX2NvbmYudHJ5X3ZtbGludXhfcGF0aCA9IChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgPT0gTlVMTCk7CiAKIAlpZiAocGFyYW1zLmxpc3RfZXZlbnRzKSB7Ci0JCWlmIChwYXJhbXMubW9kX2V2ZW50cykgewotCQkJcHJfZXJyKCIgIEVycm9yOiBEb24ndCB1c2UgLS1saXN0IHdpdGggLS1hZGQvLS1kZWwuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQkJaWYgKHBhcmFtcy5zaG93X2xpbmVzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLWxpbmUuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQkJaWYgKHBhcmFtcy5zaG93X3ZhcnMpIHsKLQkJCXByX2VycigiIEVycm9yOiBEb24ndCB1c2UgLS1saXN0IHdpdGggLS12YXJzLlxuIik7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwotCQl9Ci0JCWlmIChwYXJhbXMuc2hvd19mdW5jcykgewotCQkJcHJfZXJyKCIgIEVycm9yOiBEb24ndCB1c2UgLS1saXN0IHdpdGggLS1mdW5jcy5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQogCQlpZiAocGFyYW1zLnVwcm9iZXMpIHsKIAkJCXByX3dhcm5pbmcoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLWV4ZWMuXG4iKTsKIAkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CkBAIC00MzUsMTkgKzQzOCw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCWlmIChwYXJhbXMuc2hvd19mdW5jcykgewotCQlpZiAocGFyYW1zLm5ldmVudHMgIT0gMCB8fCBwYXJhbXMuZGVsbGlzdCkgewotCQkJcHJfZXJyKCIgIEVycm9yOiBEb24ndCB1c2UgLS1mdW5jcyB3aXRoIgotCQkJICAgICAgICIgLS1hZGQvLS1kZWwuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQkJaWYgKHBhcmFtcy5zaG93X2xpbmVzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWZ1bmNzIHdpdGggLS1saW5lLlxuIik7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwotCQl9Ci0JCWlmIChwYXJhbXMuc2hvd192YXJzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWZ1bmNzIHdpdGggLS12YXJzLlxuIik7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwotCQl9CiAJCWlmICghcGFyYW1zLmZpbHRlcikKIAkJCXBhcmFtcy5maWx0ZXIgPSBzdHJmaWx0ZXJfX25ldyhERUZBVUxUX0ZVTkNfRklMVEVSLAogCQkJCQkJICAgICAgIE5VTEwpOwpAQCAtNDYyLDE2ICs0NTIsNiBAQAogCiAjaWZkZWYgSEFWRV9EV0FSRl9TVVBQT1JUCiAJaWYgKHBhcmFtcy5zaG93X2xpbmVzKSB7Ci0JCWlmIChwYXJhbXMubW9kX2V2ZW50cykgewotCQkJcHJfZXJyKCIgIEVycm9yOiBEb24ndCB1c2UgLS1saW5lIHdpdGgiCi0JCQkgICAgICAgIiAtLWFkZC8tLWRlbC5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCQlpZiAocGFyYW1zLnNob3dfdmFycykgewotCQkJcHJfZXJyKCIgRXJyb3I6IERvbid0IHVzZSAtLWxpbmUgd2l0aCAtLXZhcnMuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQogCQlyZXQgPSBzaG93X2xpbmVfcmFuZ2UoJnBhcmFtcy5saW5lX3JhbmdlLCBwYXJhbXMudGFyZ2V0LAogCQkJCSAgICAgIHBhcmFtcy51cHJvYmVzKTsKIAkJaWYgKHJldCA8IDApCkBAIC00NzksMTEgKzQ1OSw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCWlmIChwYXJhbXMuc2hvd192YXJzKSB7Ci0JCWlmIChwYXJhbXMubW9kX2V2ZW50cykgewotCQkJcHJfZXJyKCIgIEVycm9yOiBEb24ndCB1c2UgLS12YXJzIHdpdGgiCi0JCQkgICAgICAgIiAtLWFkZC8tLWRlbC5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQogCQlpZiAoIXBhcmFtcy5maWx0ZXIpCiAJCQlwYXJhbXMuZmlsdGVyID0gc3RyZmlsdGVyX19uZXcoREVGQVVMVF9WQVJfRklMVEVSLAogCQkJCQkJICAgICAgIE5VTEwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IDI1ODNhOWIuLjg2NDhjNmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTIwMCw2ICsyMDAsMTcgQEAKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm4gMDsKIAorCS8qCisJICogRHVyaW5nIHRoaXMgcHJvY2VzcywgaXQnbGwgbG9hZCBrZXJuZWwgbWFwIGFuZCByZXBsYWNlIHRoZQorCSAqIGRzby0+bG9uZ19uYW1lIHRvIGEgcmVhbCBwYXRobmFtZSBpdCBmb3VuZC4gIEluIHRoaXMgY2FzZQorCSAqIHdlIHByZWZlciB0aGUgdm1saW51eCBwYXRoIGxpa2UKKwkgKiAgIC9saWIvbW9kdWxlcy8zLjE2LjQvYnVpbGQvdm1saW51eAorCSAqCisJICogcmF0aGVyIHRoYW4gYnVpbGQtaWQgcGF0aCAoaW4gZGVidWcgZGlyZWN0b3J5KS4KKwkgKiAgICRIT01FLy5kZWJ1Zy8uYnVpbGQtaWQvZjAvNmUxN2FhNTBhZGY0ZDAwYjg4OTI1ZTAzNzc1ZGUxMDc2MTE1NTEKKwkgKi8KKwlzeW1ib2xfY29uZi5pZ25vcmVfdm1saW51eF9idWlsZGlkID0gdHJ1ZTsKKwogCXJldHVybiBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgc3RhcnQsCiAJCQkJCSAgICAgIHNpemUgLSBzdGFydCwKIAkJCQkJICAgICAgc2l6ZSwgJmJ1aWxkX2lkX19tYXJrX2Rzb19oaXRfb3BzKTsKQEAgLTY4MCwxMSArNjkxLDEyIEBACiAJcmV0dXJuIHBlcmZfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlY29yZF91c2FnZVtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBfX3JlY29yZF91c2FnZVtdID0gewogCSJwZXJmIHJlY29yZCBbPG9wdGlvbnM+XSBbPGNvbW1hbmQ+XSIsCiAJInBlcmYgcmVjb3JkIFs8b3B0aW9ucz5dIC0tIDxjb21tYW5kPiBbPG9wdGlvbnM+XSIsCiAJTlVMTAogfTsKK2NvbnN0IGNoYXIgKiBjb25zdCAqcmVjb3JkX3VzYWdlID0gX19yZWNvcmRfdXNhZ2U7CiAKIC8qCiAgKiBYWFggSWRlYWxseSB3b3VsZCBiZSBsb2NhbCB0byBjbWRfcmVjb3JkKCkgYW5kIHBhc3NlZCB0byBhIHJlY29yZF9fbmV3CkBAIC03MjUsNyArNzM3LDcgQEAKICAqIHBlcmZfZXZsaXN0X19wcmVwYXJlX3dvcmtsb2FkLCBldGMgaW5zdGVhZCBvZiBmb3JrK2V4ZWMnaW4gJ3BlcmYgcmVjb3JkJywKICAqIHVzaW5nIHBpcGVzLCBldGMuCiAgKi8KLWNvbnN0IHN0cnVjdCBvcHRpb24gcmVjb3JkX29wdGlvbnNbXSA9IHsKK3N0cnVjdCBvcHRpb24gX19yZWNvcmRfb3B0aW9uc1tdID0gewogCU9QVF9DQUxMQkFDSygnZScsICJldmVudCIsICZyZWNvcmQuZXZsaXN0LCAiZXZlbnQiLAogCQkgICAgICJldmVudCBzZWxlY3Rvci4gdXNlICdwZXJmIGxpc3QnIHRvIGxpc3QgYXZhaWxhYmxlIGV2ZW50cyIsCiAJCSAgICAgcGFyc2VfZXZlbnRzX29wdGlvbiksCkBAIC03OTksOSArODExLDEzIEBACiAJCSAgICAic2FtcGxlIHRyYW5zYWN0aW9uIGZsYWdzIChzcGVjaWFsIGV2ZW50cyBvbmx5KSIpLAogCU9QVF9CT09MRUFOKDAsICJwZXItdGhyZWFkIiwgJnJlY29yZC5vcHRzLnRhcmdldC5wZXJfdGhyZWFkLAogCQkgICAgInVzZSBwZXItdGhyZWFkIG1tYXBzIiksCisJT1BUX0JPT0xFQU4oJ0knLCAiaW50ci1yZWdzIiwgJnJlY29yZC5vcHRzLnNhbXBsZV9pbnRyX3JlZ3MsCisJCSAgICAiU2FtcGxlIG1hY2hpbmUgcmVnaXN0ZXJzIG9uIGludGVycnVwdCIpLAogCU9QVF9FTkQoKQogfTsKIAorc3RydWN0IG9wdGlvbiAqcmVjb3JkX29wdGlvbnMgPSBfX3JlY29yZF9vcHRpb25zOworCiBpbnQgY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX21heWJlX3VudXNlZCkKIHsKIAlpbnQgZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCAxNDBhNmNkLi4zOTM2NzYwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0yMjYsOCArMjI2LDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7Ci0JCQl1aV9fZXJyb3IoIlNlbGVjdGVkIC1nIGJ1dCBubyBjYWxsY2hhaW4gZGF0YS4gRGlkICIKLQkJCQkgICAgInlvdSBjYWxsICdwZXJmIHJlY29yZCcgd2l0aG91dCAtZz9cbiIpOworCQkJdWlfX2Vycm9yKCJTZWxlY3RlZCAtZyBvciAtLWJyYW5jaC1oaXN0b3J5IGJ1dCBubyAiCisJCQkJICAiY2FsbGNoYWluIGRhdGEuIERpZFxuIgorCQkJCSAgInlvdSBjYWxsICdwZXJmIHJlY29yZCcgd2l0aG91dCAtZz9cbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfSBlbHNlIGlmICghcmVwLT5kb250X3VzZV9jYWxsY2hhaW5zICYmCkBAIC01NzUsNiArNTc2LDcgQEAKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlib29sIGhhc19icl9zdGFjayA9IGZhbHNlOwogCWludCBicmFuY2hfbW9kZSA9IC0xOworCWJvb2wgYnJhbmNoX2NhbGxfbW9kZSA9IGZhbHNlOwogCWNoYXIgY2FsbGNoYWluX2RlZmF1bHRfb3B0W10gPSAiZnJhY3RhbCwwLjUsY2FsbGVlIjsKIAljb25zdCBjaGFyICogY29uc3QgcmVwb3J0X3VzYWdlW10gPSB7CiAJCSJwZXJmIHJlcG9ydCBbPG9wdGlvbnM+XSIsCkBAIC02MzcsOCArNjM5LDggQEAKIAkJICAgInJlZ2V4IGZpbHRlciB0byBpZGVudGlmeSBwYXJlbnQsIHNlZTogJy0tc29ydCBwYXJlbnQnIiksCiAJT1BUX0JPT0xFQU4oJ3gnLCAiZXhjbHVkZS1vdGhlciIsICZzeW1ib2xfY29uZi5leGNsdWRlX290aGVyLAogCQkgICAgIk9ubHkgZGlzcGxheSBlbnRyaWVzIHdpdGggcGFyZW50LW1hdGNoIiksCi0JT1BUX0NBTExCQUNLX0RFRkFVTFQoJ2cnLCAiY2FsbC1ncmFwaCIsICZyZXBvcnQsICJvdXRwdXRfdHlwZSxtaW5fcGVyY2VudFsscHJpbnRfbGltaXRdLGNhbGxfb3JkZXIiLAotCQkgICAgICJEaXNwbGF5IGNhbGxjaGFpbnMgdXNpbmcgb3V0cHV0X3R5cGUgKGdyYXBoLCBmbGF0LCBmcmFjdGFsLCBvciBub25lKSAsIG1pbiBwZXJjZW50IHRocmVzaG9sZCwgb3B0aW9uYWwgcHJpbnQgbGltaXQsIGNhbGxjaGFpbiBvcmRlciwga2V5IChmdW5jdGlvbiBvciBhZGRyZXNzKS4gIgorCU9QVF9DQUxMQkFDS19ERUZBVUxUKCdnJywgImNhbGwtZ3JhcGgiLCAmcmVwb3J0LCAib3V0cHV0X3R5cGUsbWluX3BlcmNlbnRbLHByaW50X2xpbWl0XSxjYWxsX29yZGVyWyxicmFuY2hdIiwKKwkJICAgICAiRGlzcGxheSBjYWxsY2hhaW5zIHVzaW5nIG91dHB1dF90eXBlIChncmFwaCwgZmxhdCwgZnJhY3RhbCwgb3Igbm9uZSkgLCBtaW4gcGVyY2VudCB0aHJlc2hvbGQsIG9wdGlvbmFsIHByaW50IGxpbWl0LCBjYWxsY2hhaW4gb3JkZXIsIGtleSAoZnVuY3Rpb24gb3IgYWRkcmVzcyksIGFkZCBicmFuY2hlcy4gIgogCQkgICAgICJEZWZhdWx0OiBmcmFjdGFsLDAuNSxjYWxsZWUsZnVuY3Rpb24iLCAmcmVwb3J0X3BhcnNlX2NhbGxjaGFpbl9vcHQsIGNhbGxjaGFpbl9kZWZhdWx0X29wdCksCiAJT1BUX0JPT0xFQU4oMCwgImNoaWxkcmVuIiwgJnN5bWJvbF9jb25mLmN1bXVsYXRlX2NhbGxjaGFpbiwKIAkJICAgICJBY2N1bXVsYXRlIGNhbGxjaGFpbnMgb2YgY2hpbGRyZW4gYW5kIHNob3cgdG90YWwgb3ZlcmhlYWQgYXMgd2VsbCIpLApAQCAtNjg0LDcgKzY4NiwxMCBAQAogCU9QVF9CT09MRUFOKDAsICJncm91cCIsICZzeW1ib2xfY29uZi5ldmVudF9ncm91cCwKIAkJICAgICJTaG93IGV2ZW50IGdyb3VwIGluZm9ybWF0aW9uIHRvZ2V0aGVyIiksCiAJT1BUX0NBTExCQUNLX05PT1BUKCdiJywgImJyYW5jaC1zdGFjayIsICZicmFuY2hfbW9kZSwgIiIsCi0JCSAgICAidXNlIGJyYW5jaCByZWNvcmRzIGZvciBoaXN0b2dyYW0gZmlsbGluZyIsIHBhcnNlX2JyYW5jaF9tb2RlKSwKKwkJICAgICJ1c2UgYnJhbmNoIHJlY29yZHMgZm9yIHBlciBicmFuY2ggaGlzdG9ncmFtIGZpbGxpbmciLAorCQkgICAgcGFyc2VfYnJhbmNoX21vZGUpLAorCU9QVF9CT09MRUFOKDAsICJicmFuY2gtaGlzdG9yeSIsICZicmFuY2hfY2FsbF9tb2RlLAorCQkgICAgImFkZCBsYXN0IGJyYW5jaCByZWNvcmRzIHRvIGNhbGwgaGlzdG9yeSIpLAogCU9QVF9TVFJJTkcoMCwgIm9iamR1bXAiLCAmb2JqZHVtcF9wYXRoLCAicGF0aCIsCiAJCSAgICJvYmpkdW1wIGJpbmFyeSB0byB1c2UgZm9yIGRpc2Fzc2VtYmx5IGFuZCBhbm5vdGF0aW9ucyIpLAogCU9QVF9CT09MRUFOKDAsICJkZW1hbmdsZSIsICZzeW1ib2xfY29uZi5kZW1hbmdsZSwKQEAgLTc0NSwxMCArNzUwLDI0IEBACiAJaGFzX2JyX3N0YWNrID0gcGVyZl9oZWFkZXJfX2hhc19mZWF0KCZzZXNzaW9uLT5oZWFkZXIsCiAJCQkJCSAgICAgSEVBREVSX0JSQU5DSF9TVEFDSyk7CiAKLQlpZiAoKGJyYW5jaF9tb2RlID09IC0xICYmIGhhc19icl9zdGFjaykgfHwgYnJhbmNoX21vZGUgPT0gMSkgeworCS8qCisJICogQnJhbmNoIG1vZGUgaXMgYSB0cmlzdGF0ZToKKwkgKiAtMSBtZWFucyBkZWZhdWx0LCBzbyBkZWNpZGUgYmFzZWQgb24gdGhlIGZpbGUgaGF2aW5nIGJyYW5jaCBkYXRhLgorCSAqIDAvMSBtZWFucyB0aGUgdXNlciBjaG9zZSBhIG1vZGUuCisJICovCisJaWYgKCgoYnJhbmNoX21vZGUgPT0gLTEgJiYgaGFzX2JyX3N0YWNrKSB8fCBicmFuY2hfbW9kZSA9PSAxKSAmJgorCSAgICBicmFuY2hfY2FsbF9tb2RlID09IC0xKSB7CiAJCXNvcnRfX21vZGUgPSBTT1JUX01PREVfX0JSQU5DSDsKIAkJc3ltYm9sX2NvbmYuY3VtdWxhdGVfY2FsbGNoYWluID0gZmFsc2U7CiAJfQorCWlmIChicmFuY2hfY2FsbF9tb2RlKSB7CisJCWNhbGxjaGFpbl9wYXJhbS5rZXkgPSBDQ0tFWV9BRERSRVNTOworCQljYWxsY2hhaW5fcGFyYW0uYnJhbmNoX2NhbGxzdGFjayA9IDE7CisJCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSB0cnVlOworCQljYWxsY2hhaW5fcmVnaXN0ZXJfcGFyYW0oJmNhbGxjaGFpbl9wYXJhbSk7CisJCWlmIChzb3J0X29yZGVyID09IE5VTEwpCisJCQlzb3J0X29yZGVyID0gInNyY2xpbmUsc3ltYm9sLGRzbyI7CisJfQogCiAJaWYgKHJlcG9ydC5tZW1fbW9kZSkgewogCQlpZiAoc29ydF9fbW9kZSA9PSBTT1JUX01PREVfX0JSQU5DSCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCmluZGV4IDk3MDhhMTIuLmNlMzA0ZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKQEAgLTIzLDcgKzIzLDYgQEAKIHN0YXRpYyBib29sCQkJZGVidWdfbW9kZTsKIHN0YXRpYyB1NjQJCQlsYXN0X3RpbWVzdGFtcDsKIHN0YXRpYyB1NjQJCQlucl91bm9yZGVyZWQ7Ci1leHRlcm4gY29uc3Qgc3RydWN0IG9wdGlvbglyZWNvcmRfb3B0aW9uc1tdOwogc3RhdGljIGJvb2wJCQlub19jYWxsY2hhaW47CiBzdGF0aWMgYm9vbAkJCWxhdGVuY3lfZm9ybWF0Owogc3RhdGljIGJvb2wJCQlzeXN0ZW1fd2lkZTsKQEAgLTM3OSw3ICszNzgsNiBAQAogCiBzdGF0aWMgdm9pZCBwcmludF9zYW1wbGVfYWRkcih1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCSAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCi0JCQkgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAogCQkJICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCiAJCQkgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCiB7CkBAIC0zOTAsNyArMzg4LDcgQEAKIAlpZiAoIXNhbXBsZV9hZGRyX2NvcnJlbGF0ZXNfc3ltKGF0dHIpKQogCQlyZXR1cm47CiAKLQlwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZV9hZGRyKGV2ZW50LCBzYW1wbGUsIG1hY2hpbmUsIHRocmVhZCwgJmFsKTsKKwlwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZV9hZGRyKGV2ZW50LCBzYW1wbGUsIHRocmVhZCwgJmFsKTsKIAogCWlmIChQUklOVF9GSUVMRChTWU0pKSB7CiAJCXByaW50ZigiICIpOwpAQCAtNDM4LDcgKzQzNiw3IEBACiAJICAgICgoZXZzZWwtPmF0dHIuc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9BRERSKSAmJgogCSAgICAgIW91dHB1dFthdHRyLT50eXBlXS51c2VyX3NldCkpIHsKIAkJcHJpbnRmKCIgPT4gIik7Ci0JCXByaW50X3NhbXBsZV9hZGRyKGV2ZW50LCBzYW1wbGUsIGFsLT5tYWNoaW5lLCB0aHJlYWQsIGF0dHIpOworCQlwcmludF9zYW1wbGVfYWRkcihldmVudCwgc2FtcGxlLCB0aHJlYWQsIGF0dHIpOwogCX0KIAogCWlmIChwcmludF9zcmNsaW5lX2xhc3QpCkBAIC00NzUsNyArNDczLDcgQEAKIAkJZXZlbnRfZm9ybWF0X19wcmludChldnNlbC0+dHBfZm9ybWF0LCBzYW1wbGUtPmNwdSwKIAkJCQkgICAgc2FtcGxlLT5yYXdfZGF0YSwgc2FtcGxlLT5yYXdfc2l6ZSk7CiAJaWYgKFBSSU5UX0ZJRUxEKEFERFIpKQotCQlwcmludF9zYW1wbGVfYWRkcihldmVudCwgc2FtcGxlLCBhbC0+bWFjaGluZSwgdGhyZWFkLCBhdHRyKTsKKwkJcHJpbnRfc2FtcGxlX2FkZHIoZXZlbnQsIHNhbXBsZSwgdGhyZWFkLCBhdHRyKTsKIAogCWlmIChQUklOVF9GSUVMRChJUCkpIHsKIAkJaWYgKCFzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggMDU1Y2U5Mi4uODkxMDg2MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC0zODgsMjAgKzM4OCwxMDIgQEAKIAkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2l0bGJfY2FjaGVfc3RhdHNbMF0sIGNvdW50WzBdKTsKIH0KIAorc3RhdGljIHZvaWQgemVyb19wZXJfcGtnKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyKQoreworCWlmIChjb3VudGVyLT5wZXJfcGtnX21hc2spCisJCW1lbXNldChjb3VudGVyLT5wZXJfcGtnX21hc2ssIDAsIE1BWF9OUl9DUFVTKTsKK30KKworc3RhdGljIGludCBjaGVja19wZXJfcGtnKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyLCBpbnQgY3B1LCBib29sICpza2lwKQoreworCXVuc2lnbmVkIGxvbmcgKm1hc2sgPSBjb3VudGVyLT5wZXJfcGtnX21hc2s7CisJc3RydWN0IGNwdV9tYXAgKmNwdXMgPSBwZXJmX2V2c2VsX19jcHVzKGNvdW50ZXIpOworCWludCBzOworCisJKnNraXAgPSBmYWxzZTsKKworCWlmICghY291bnRlci0+cGVyX3BrZykKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3B1X21hcF9fZW1wdHkoY3B1cykpCisJCXJldHVybiAwOworCisJaWYgKCFtYXNrKSB7CisJCW1hc2sgPSB6YWxsb2MoTUFYX05SX0NQVVMpOworCQlpZiAoIW1hc2spCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQljb3VudGVyLT5wZXJfcGtnX21hc2sgPSBtYXNrOworCX0KKworCXMgPSBjcHVfbWFwX19nZXRfc29ja2V0KGNwdXMsIGNwdSk7CisJaWYgKHMgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkqc2tpcCA9IHRlc3RfYW5kX3NldF9iaXQocywgbWFzaykgPT0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2NiKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgaW50IGNwdSwgaW50IHRocmVhZCBfX21heWJlX3VudXNlZCwKKwkJICAgc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqY291bnQpCit7CisJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqYWdnciA9ICZldnNlbC0+Y291bnRzLT5hZ2dyOworCXN0YXRpYyBzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzIHplcm87CisJYm9vbCBza2lwID0gZmFsc2U7CisKKwlpZiAoY2hlY2tfcGVyX3BrZyhldnNlbCwgY3B1LCAmc2tpcCkpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBwZXItcGtnIGNvdW50ZXJcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHNraXApCisJCWNvdW50ID0gJnplcm87CisKKwlzd2l0Y2ggKGFnZ3JfbW9kZSkgeworCWNhc2UgQUdHUl9DT1JFOgorCWNhc2UgQUdHUl9TT0NLRVQ6CisJY2FzZSBBR0dSX05PTkU6CisJCWlmICghZXZzZWwtPnNuYXBzaG90KQorCQkJcGVyZl9ldnNlbF9fY29tcHV0ZV9kZWx0YXMoZXZzZWwsIGNwdSwgY291bnQpOworCQlwZXJmX2NvdW50c192YWx1ZXNfX3NjYWxlKGNvdW50LCBzY2FsZSwgTlVMTCk7CisJCWV2c2VsLT5jb3VudHMtPmNwdVtjcHVdID0gKmNvdW50OworCQl1cGRhdGVfc2hhZG93X3N0YXRzKGV2c2VsLCBjb3VudC0+dmFsdWVzKTsKKwkJYnJlYWs7CisJY2FzZSBBR0dSX0dMT0JBTDoKKwkJYWdnci0+dmFsICs9IGNvdW50LT52YWw7CisJCWlmIChzY2FsZSkgeworCQkJYWdnci0+ZW5hICs9IGNvdW50LT5lbmE7CisJCQlhZ2dyLT5ydW4gKz0gY291bnQtPnJ1bjsKKwkJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfY291bnRlcihzdHJ1Y3QgcGVyZl9ldnNlbCAqY291bnRlcik7CisKIC8qCiAgKiBSZWFkIG91dCB0aGUgcmVzdWx0cyBvZiBhIHNpbmdsZSBjb3VudGVyOgogICogYWdncmVnYXRlIGNvdW50cyBhY3Jvc3MgQ1BVcyBpbiBzeXN0ZW0td2lkZSBtb2RlCiAgKi8KIHN0YXRpYyBpbnQgcmVhZF9jb3VudGVyX2FnZ3Ioc3RydWN0IHBlcmZfZXZzZWwgKmNvdW50ZXIpCiB7CisJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqYWdnciA9ICZjb3VudGVyLT5jb3VudHMtPmFnZ3I7CiAJc3RydWN0IHBlcmZfc3RhdCAqcHMgPSBjb3VudGVyLT5wcml2OwogCXU2NCAqY291bnQgPSBjb3VudGVyLT5jb3VudHMtPmFnZ3IudmFsdWVzOwogCWludCBpOwogCi0JaWYgKF9fcGVyZl9ldnNlbF9fcmVhZChjb3VudGVyLCBwZXJmX2V2c2VsX19ucl9jcHVzKGNvdW50ZXIpLAotCQkJICAgICAgIHRocmVhZF9tYXBfX25yKGV2c2VsX2xpc3QtPnRocmVhZHMpLCBzY2FsZSkgPCAwKQorCWFnZ3ItPnZhbCA9IGFnZ3ItPmVuYSA9IGFnZ3ItPnJ1biA9IDA7CisKKwlpZiAocmVhZF9jb3VudGVyKGNvdW50ZXIpKQogCQlyZXR1cm4gLTE7CiAKKwlpZiAoIWNvdW50ZXItPnNuYXBzaG90KQorCQlwZXJmX2V2c2VsX19jb21wdXRlX2RlbHRhcyhjb3VudGVyLCAtMSwgYWdncik7CisJcGVyZl9jb3VudHNfdmFsdWVzX19zY2FsZShhZ2dyLCBzY2FsZSwgJmNvdW50ZXItPmNvdW50cy0+c2NhbGVkKTsKKwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJCXVwZGF0ZV9zdGF0cygmcHMtPnJlc19zdGF0c1tpXSwgY291bnRbaV0pOwogCkBAIC00MjQsMTYgKzUwNiwyMSBAQAogICovCiBzdGF0aWMgaW50IHJlYWRfY291bnRlcihzdHJ1Y3QgcGVyZl9ldnNlbCAqY291bnRlcikKIHsKLQl1NjQgKmNvdW50OwotCWludCBjcHU7CisJaW50IG50aHJlYWRzID0gdGhyZWFkX21hcF9fbnIoZXZzZWxfbGlzdC0+dGhyZWFkcyk7CisJaW50IG5jcHVzID0gcGVyZl9ldnNlbF9fbnJfY3B1cyhjb3VudGVyKTsKKwlpbnQgY3B1LCB0aHJlYWQ7CiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IHBlcmZfZXZzZWxfX25yX2NwdXMoY291bnRlcik7IGNwdSsrKSB7Ci0JCWlmIChfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KGNvdW50ZXIsIGNwdSwgMCwgc2NhbGUpIDwgMCkKLQkJCXJldHVybiAtMTsKKwlpZiAoY291bnRlci0+c3lzdGVtX3dpZGUpCisJCW50aHJlYWRzID0gMTsKIAotCQljb3VudCA9IGNvdW50ZXItPmNvdW50cy0+Y3B1W2NwdV0udmFsdWVzOworCWlmIChjb3VudGVyLT5wZXJfcGtnKQorCQl6ZXJvX3Blcl9wa2coY291bnRlcik7CiAKLQkJdXBkYXRlX3NoYWRvd19zdGF0cyhjb3VudGVyLCBjb3VudCk7CisJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBudGhyZWFkczsgdGhyZWFkKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBuY3B1czsgY3B1KyspIHsKKwkJCWlmIChwZXJmX2V2c2VsX19yZWFkX2NiKGNvdW50ZXIsIGNwdSwgdGhyZWFkLCByZWFkX2NiKSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCAzNWI0MjViLi5mM2JiMWE0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCkBAIC01MjgsNyArNTI4LDcgQEAKIAkJfQogCiAJCXRhbC5maWx0ZXJlZCA9IDA7Ci0JCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKGFsLnRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwKKwkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oYWwudGhyZWFkLCBjcHVtb2RlLAogCQkJCQkgICBNQVBfX0ZVTkNUSU9OLCBpcCwgJnRhbCk7CiAKIAkJaWYgKHRhbC5zeW0pCkBAIC0xOTYzLDcgKzE5NjMsNyBAQAogCQlOVUxMCiAJfTsKIAotCWNvbnN0IHN0cnVjdCBvcHRpb24gcmVjb3JkX29wdGlvbnNbXSA9IHsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIHRpbWVjaGFydF9yZWNvcmRfb3B0aW9uc1tdID0gewogCU9QVF9CT09MRUFOKCdQJywgInBvd2VyLW9ubHkiLCAmdGNoYXJ0LnBvd2VyX29ubHksICJvdXRwdXQgcG93ZXIgZGF0YSBvbmx5IiksCiAJT1BUX0JPT0xFQU4oJ1QnLCAidGFza3Mtb25seSIsICZ0Y2hhcnQudGFza3Nfb25seSwKIAkJICAgICJvdXRwdXQgcHJvY2Vzc2VzIGRhdGEgb25seSIpLApAQCAtMTk3Miw3ICsxOTcyLDcgQEAKIAlPUFRfQk9PTEVBTignZycsICJjYWxsY2hhaW4iLCAmdGNoYXJ0LndpdGhfYmFja3RyYWNlLCAicmVjb3JkIGNhbGxjaGFpbiIpLAogCU9QVF9FTkQoKQogCX07Ci0JY29uc3QgY2hhciAqIGNvbnN0IHJlY29yZF91c2FnZVtdID0geworCWNvbnN0IGNoYXIgKiBjb25zdCB0aW1lY2hhcnRfcmVjb3JkX3VzYWdlW10gPSB7CiAJCSJwZXJmIHRpbWVjaGFydCByZWNvcmQgWzxvcHRpb25zPl0iLAogCQlOVUxMCiAJfTsKQEAgLTE5ODUsNyArMTk4NSw4IEBACiAJfQogCiAJaWYgKGFyZ2MgJiYgIXN0cm5jbXAoYXJndlswXSwgInJlYyIsIDMpKSB7Ci0JCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHJlY29yZF9vcHRpb25zLCByZWNvcmRfdXNhZ2UsCisJCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHRpbWVjaGFydF9yZWNvcmRfb3B0aW9ucywKKwkJCQkgICAgIHRpbWVjaGFydF9yZWNvcmRfdXNhZ2UsCiAJCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAogCQlpZiAodGNoYXJ0LnBvd2VyX29ubHkgJiYgdGNoYXJ0LnRhc2tzX29ubHkpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKaW5kZXggZmIxMjY0NS4uODNhNDgzNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTE4NDYsNyArMTg0Niw3IEBACiAJaWYgKHRyYWNlLT5zdW1tYXJ5X29ubHkpCiAJCXJldHVybiAwOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCB0cmFjZS0+aG9zdCwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwKKwl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sCiAJCQkgICAgICBzYW1wbGUtPmlwLCAmYWwpOwogCiAJdHJhY2VfX2ZwcmludGZfZW50cnlfaGVhZCh0cmFjZSwgdGhyZWFkLCAwLCBzYW1wbGUtPnRpbWUsIHRyYWNlLT5vdXRwdXQpOwpAQCAtMTg1OSwxMSArMTg1OSwxMSBAQAogCiAJZnByaW50Zih0cmFjZS0+b3V0cHV0LCAiXSA9PiAiKTsKIAotCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgdHJhY2UtPmhvc3QsIGNwdW1vZGUsIE1BUF9fVkFSSUFCTEUsCisJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBjcHVtb2RlLCBNQVBfX1ZBUklBQkxFLAogCQkJCSAgIHNhbXBsZS0+YWRkciwgJmFsKTsKIAogCWlmICghYWwubWFwKSB7Ci0JCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgdHJhY2UtPmhvc3QsIGNwdW1vZGUsCisJCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgY3B1bW9kZSwKIAkJCQkJICAgTUFQX19GVU5DVElPTiwgc2FtcGxlLT5hZGRyLCAmYWwpOwogCiAJCWlmIChhbC5tYXApCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCmluZGV4IDU4ZjYwOTEuLjVkNGIwMzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCkBAIC0xNTAsNyArMTUwLDcgQEAKICMgYWRkaW5nIGFzc2VtYmxlciBmaWxlcyBtaXNzaW5nIHRoZSAuR05VLXN0YWNrIGxpbmtlciBub3RlLgogTERGTEFHUyArPSAtV2wsLXosbm9leGVjc3RhY2sKIAotRVhUTElCUyA9IC1sZWxmIC1scHRocmVhZCAtbHJ0IC1sbSAtbGRsCitFWFRMSUJTID0gLWxwdGhyZWFkIC1scnQgLWxtIC1sZGwKIAogaWZuZXEgKCQoT1VUUFVUKSwpCiAgIE9VVFBVVF9GRUFUVVJFUyA9ICQoT1VUUFVUKWNvbmZpZy9mZWF0dXJlLWNoZWNrcy8KQEAgLTIwMCw3ICsyMDAsOCBAQAogCWxpYnVud2luZAkJCVwKIAlzdGFja3Byb3RlY3Rvci1hbGwJCVwKIAl0aW1lcmZkCQkJCVwKLQlsaWJkdy1kd2FyZi11bndpbmQKKwlsaWJkdy1kd2FyZi11bndpbmQJCVwKKwl6bGliCiAKIExJQl9GRUFUVVJFX1RFU1RTID0JCQlcCiAJZHdhcmYJCQkJXApAQCAtMjE0LDcgKzIxNSw4IEBACiAJbGlicHl0aG9uCQkJXAogCWxpYnNsYW5nCQkJXAogCWxpYnVud2luZAkJCVwKLQlsaWJkdy1kd2FyZi11bndpbmQKKwlsaWJkdy1kd2FyZi11bndpbmQJCVwKKwl6bGliCiAKIFZGX0ZFQVRVUkVfVEVTVFMgPQkJCVwKIAliYWNrdHJhY2UJCQlcCkBAIC0yMzAsNyArMjMyLDkgQEAKIAliaW9uaWMJCQkJXAogCWxpYmVydHkJCQkJXAogCWxpYmVydHktegkJCVwKLQljcGx1cy1kZW1hbmdsZQorCWNwbHVzLWRlbWFuZ2xlCQkJXAorCWNvbXBpbGUtMzIJCQlcCisJY29tcGlsZS14MzIKIAogIyBTZXQgRkVBVFVSRV9DSEVDS18oQ3xMRClGTEFHUy1hbGwgZm9yIGFsbCBDT1JFX0ZFQVRVUkVfVEVTVFMgZmVhdHVyZXMuCiAjIElmIGluIHRoZSBmdXR1cmUgd2UgbmVlZCBwZXItZmVhdHVyZSBjaGVja3MvZmxhZ3MgZm9yIGZlYXR1cmVzIG5vdApAQCAtMzUwLDYgKzM1NCw3IEBACiAKIGlmbmRlZiBOT19MSUJFTEYKICAgQ0ZMQUdTICs9IC1ESEFWRV9MSUJFTEZfU1VQUE9SVAorICBFWFRMSUJTICs9IC1sZWxmCiAKICAgaWZlcSAoJChmZWF0dXJlLWxpYmVsZi1tbWFwKSwgMSkKICAgICBDRkxBR1MgKz0gLURIQVZFX0xJQkVMRl9NTUFQX1NVUFBPUlQKQEAgLTM2OSw3ICszNzQsNyBAQAogICAgIGVsc2UKICAgICAgIENGTEFHUyArPSAtREhBVkVfRFdBUkZfU1VQUE9SVCAkKExJQkRXX0NGTEFHUykKICAgICAgIExERkxBR1MgKz0gJChMSUJEV19MREZMQUdTKQotICAgICAgRVhUTElCUyArPSAtbGVsZiAtbGR3CisgICAgICBFWFRMSUJTICs9IC1sZHcKICAgICBlbmRpZiAjIFBFUkZfSEFWRV9EV0FSRl9SRUdTCiAgIGVuZGlmICMgTk9fRFdBUkYKIGVuZGlmICMgTk9fTElCRUxGCkBAIC02MDIsNiArNjA3LDE1IEBACiAgIENGTEFHUyArPSAtREhBVkVfTElCQkZEX1NVUFBPUlQKIGVuZGlmCiAKK2lmbmRlZiBOT19aTElCCisgIGlmZXEgKCQoZmVhdHVyZS16bGliKSwgMSkKKyAgICBDRkxBR1MgKz0gLURIQVZFX1pMSUJfU1VQUE9SVAorICAgIEVYVExJQlMgKz0gLWx6CisgIGVsc2UKKyAgICBOT19aTElCIDo9IDEKKyAgZW5kaWYKK2VuZGlmCisKIGlmbmRlZiBOT19CQUNLVFJBQ0UKICAgaWZlcSAoJChmZWF0dXJlLWJhY2t0cmFjZSksIDEpCiAgICAgQ0ZMQUdTICs9IC1ESEFWRV9CQUNLVFJBQ0VfU1VQUE9SVApAQCAtNjIyLDYgKzYzNiwzMSBAQAogICAgIENGTEFHUyArPSAtREhBVkVfS1ZNX1NUQVRfU1VQUE9SVAogZW5kaWYKIAoraWZlcSAoJHtJU182NF9CSVR9LCAxKQorICBpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU08zMgorICAgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGNvbXBpbGUtMzIpCisgICAgaWZlcSAoJChmZWF0dXJlLWNvbXBpbGUtMzIpLCAxKQorICAgICAgQ0ZMQUdTICs9IC1ESEFWRV9QRVJGX1JFQURfVkRTTzMyCisgICAgZWxzZQorICAgICAgTk9fUEVSRl9SRUFEX1ZEU08zMiA6PSAxCisgICAgZW5kaWYKKyAgZW5kaWYKKyAgaWZuZXEgKCR7SVNfWDg2XzY0fSwgMSkKKyAgICBOT19QRVJGX1JFQURfVkRTT1gzMiA6PSAxCisgIGVuZGlmCisgIGlmbmRlZiBOT19QRVJGX1JFQURfVkRTT1gzMgorICAgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGNvbXBpbGUteDMyKQorICAgIGlmZXEgKCQoZmVhdHVyZS1jb21waWxlLXgzMiksIDEpCisgICAgICBDRkxBR1MgKz0gLURIQVZFX1BFUkZfUkVBRF9WRFNPWDMyCisgICAgZWxzZQorICAgICAgTk9fUEVSRl9SRUFEX1ZEU09YMzIgOj0gMQorICAgIGVuZGlmCisgIGVuZGlmCitlbHNlCisgIE5PX1BFUkZfUkVBRF9WRFNPMzIgOj0gMQorICBOT19QRVJGX1JFQURfVkRTT1gzMiA6PSAxCitlbmRpZgorCiAjIEFtb25nIHRoZSB2YXJpYWJsZXMgYmVsb3csIHRoZXNlOgogIyAgIHBlcmZleGVjZGlyCiAjICAgdGVtcGxhdGVfZGlyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZS5hcmNoIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUuYXJjaAppbmRleCA0YjA2NzE5Li44NTFjZDAxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZS5hcmNoCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlLmFyY2gKQEAgLTIxLDMgKzIxLDExIEBACiAgICAgUkFXX0FSQ0ggOj0geDg2XzY0CiAgIGVuZGlmCiBlbmRpZgorCitpZmVxICgke0lTX1g4Nl82NH0sIDEpCisgIElTXzY0X0JJVCA6PSAxCitlbHNlIGlmZXEgKCQoQVJDSCkseDg2KQorICBJU182NF9CSVQgOj0gMAorZWxzZQorICBJU182NF9CSVQgOj0gJChzaGVsbCBlY2hvIF9fTFA2NF9fIHwgJHtDQ30gJHtDRkxBR1N9IC1FIC14IGMgLSB8IHRhaWwgLW4gMSkKK2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL01ha2VmaWxlCmluZGV4IDcyYWIyOTguLjUzZjE5YjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL01ha2VmaWxlCkBAIC0yNyw3ICsyNywxMCBAQAogCXRlc3QtbGlidW53aW5kLWRlYnVnLWZyYW1lLmJpbglcCiAJdGVzdC1zdGFja3Byb3RlY3Rvci1hbGwuYmluCVwKIAl0ZXN0LXRpbWVyZmQuYmluCQlcCi0JdGVzdC1saWJkdy1kd2FyZi11bndpbmQuYmluCisJdGVzdC1saWJkdy1kd2FyZi11bndpbmQuYmluCVwKKwl0ZXN0LWNvbXBpbGUtMzIuYmluCQlcCisJdGVzdC1jb21waWxlLXgzMi5iaW4JCVwKKwl0ZXN0LXpsaWIuYmluCiAKIENDIDo9ICQoQ1JPU1NfQ09NUElMRSlnY2MgLU1ECiBQS0dfQ09ORklHIDo9ICQoQ1JPU1NfQ09NUElMRSlwa2ctY29uZmlnCkBAIC0zOSw3ICs0Miw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHRlc3QtYWxsLmJpbjoKLQkkKEJVSUxEKSAtV2Vycm9yIC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtTzIgLVdlcnJvciAtRF9GT1JUSUZZX1NPVVJDRT0yIC1sZHcgLWxlbGYgLWxudW1hIC1sZWxmIC1sYXVkaXQgLUkvdXNyL2luY2x1ZGUvc2xhbmcgLWxzbGFuZyAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0aystMi4wIDI+L2Rldi9udWxsKSAkKEZMQUdTX1BFUkxfRU1CRUQpICQoRkxBR1NfUFlUSE9OX0VNQkVEKSAtRFBBQ0tBR0U9JyJwZXJmIicgLWxiZmQgLWxkbAorCSQoQlVJTEQpIC1XZXJyb3IgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1PMiAtV2Vycm9yIC1EX0ZPUlRJRllfU09VUkNFPTIgLWxkdyAtbGVsZiAtbG51bWEgLWxlbGYgLWxhdWRpdCAtSS91c3IvaW5jbHVkZS9zbGFuZyAtbHNsYW5nICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMj4vZGV2L251bGwpICQoRkxBR1NfUEVSTF9FTUJFRCkgJChGTEFHU19QWVRIT05fRU1CRUQpIC1EUEFDS0FHRT0nInBlcmYiJyAtbGJmZCAtbGRsIC1segogCiB0ZXN0LWhlbGxvLmJpbjoKIAkkKEJVSUxEKQpAQCAtMTMxLDYgKzEzNCwxNSBAQAogdGVzdC1zeW5jLWNvbXBhcmUtYW5kLXN3YXAuYmluOgogCSQoQlVJTEQpIC1XZXJyb3IKIAordGVzdC1jb21waWxlLTMyLmJpbjoKKwkkKENDKSAtbTMyIC1vICQoT1VUUFVUKSRAIHRlc3QtY29tcGlsZS5jCisKK3Rlc3QtY29tcGlsZS14MzIuYmluOgorCSQoQ0MpIC1teDMyIC1vICQoT1VUUFVUKSRAIHRlc3QtY29tcGlsZS5jCisKK3Rlc3QtemxpYi5iaW46CisJJChCVUlMRCkgLWx6CisKIC1pbmNsdWRlICouZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LWFsbC5jIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC1hbGwuYwppbmRleCBhN2QwMjJlLi42NTJlMDA5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LWFsbC5jCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtYWxsLmMKQEAgLTkzLDYgKzkzLDEwIEBACiAjIGluY2x1ZGUgInRlc3Qtc3luYy1jb21wYXJlLWFuZC1zd2FwLmMiCiAjdW5kZWYgbWFpbgogCisjZGVmaW5lIG1haW4gbWFpbl90ZXN0X3psaWIKKyMgaW5jbHVkZSAidGVzdC16bGliLmMiCisjdW5kZWYgbWFpbgorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCW1haW5fdGVzdF9saWJweXRob24oKTsKQEAgLTExNiw2ICsxMjAsNyBAQAogCW1haW5fdGVzdF9zdGFja3Byb3RlY3Rvcl9hbGwoKTsKIAltYWluX3Rlc3RfbGliZHdfZHdhcmZfdW53aW5kKCk7CiAJbWFpbl90ZXN0X3N5bmNfY29tcGFyZV9hbmRfc3dhcChhcmdjLCBhcmd2KTsKKwltYWluX3Rlc3RfemxpYigpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LWNvbXBpbGUuYyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtY29tcGlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZGJmNDUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LWNvbXBpbGUuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBtYWluKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LXpsaWIuYyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtemxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMTFmZmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LXpsaWIuYwpAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDx6bGliLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisJel9zdHJlYW0genM7CisKKwlpbmZsYXRlSW5pdCgmenMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLXJlYWQtdmRzby5jIGIvdG9vbHMvcGVyZi9wZXJmLXJlYWQtdmRzby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NGUyNTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3BlcmYtcmVhZC12ZHNvLmMKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgVkRTT19fTUFQX05BTUUgIlt2ZHNvXSIKKworLyoKKyAqIEluY2x1ZGUgZGVmaW5pdGlvbiBvZiBmaW5kX3Zkc29fbWFwKCkgYWxzbyB1c2VkIGluIHV0aWwvdmRzby5jIGZvcgorICogYnVpbGRpbmcgcGVyZi4KKyAqLworI2luY2x1ZGUgInV0aWwvZmluZC12ZHNvLW1hcC5jIgorCitpbnQgbWFpbih2b2lkKQoreworCXZvaWQgKnN0YXJ0LCAqZW5kOworCXNpemVfdCBzaXplLCB3cml0dGVuOworCisJaWYgKGZpbmRfdmRzb19tYXAoJnN0YXJ0LCAmZW5kKSkKKwkJcmV0dXJuIDE7CisKKwlzaXplID0gZW5kIC0gc3RhcnQ7CisKKwl3aGlsZSAoc2l6ZSkgeworCQl3cml0dGVuID0gZndyaXRlKHN0YXJ0LCAxLCBzaXplLCBzdGRvdXQpOworCQlpZiAoIXdyaXR0ZW4pCisJCQlyZXR1cm4gMTsKKwkJc3RhcnQgKz0gd3JpdHRlbjsKKwkJc2l6ZSAtPSB3cml0dGVuOworCX0KKworCWlmIChmZmx1c2goc3Rkb3V0KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5oIGIvdG9vbHMvcGVyZi9wZXJmLmgKaW5kZXggMjIwZDQ0ZS4uMWRhYmI4NSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9wZXJmLmgKKysrIGIvdG9vbHMvcGVyZi9wZXJmLmgKQEAgLTUyLDYgKzUyLDcgQEAKIAlib29sCSAgICAgc2FtcGxlX3dlaWdodDsKIAlib29sCSAgICAgc2FtcGxlX3RpbWU7CiAJYm9vbAkgICAgIHBlcmlvZDsKKwlib29sCSAgICAgc2FtcGxlX2ludHJfcmVnczsKIAl1bnNpZ25lZCBpbnQgZnJlcTsKIAl1bnNpZ25lZCBpbnQgbW1hcF9wYWdlczsKIAl1bnNpZ25lZCBpbnQgdXNlcl9mcmVxOwpAQCAtNjIsNCArNjMsNyBAQAogCXVuc2lnbmVkICAgICBpbml0aWFsX2RlbGF5OwogfTsKIAorc3RydWN0IG9wdGlvbjsKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgKnJlY29yZF91c2FnZTsKK2V4dGVybiBzdHJ1Y3Qgb3B0aW9uICpyZWNvcmRfb3B0aW9uczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZXhwb3J0LXRvLXBvc3RncmVzcWwtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZXhwb3J0LXRvLXBvc3RncmVzcWwtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMWQ2NmUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9leHBvcnQtdG8tcG9zdGdyZXNxbC1yZWNvcmQKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vYmFzaAorCisjCisjIGV4cG9ydCBwZXJmIGRhdGEgdG8gYSBwb3N0Z3Jlc3FsIGRhdGFiYXNlLiBDYW4gY292ZXIKKyMgcGVyZiBpcCBzYW1wbGVzIChleGNsdWRpbmcgdGhlIHRyYWNlcG9pbnRzKS4gTm8gc3BlY2lhbAorIyByZWNvcmQgcmVxdWlyZW1lbnRzLCBqdXN0IHJlY29yZCB3aGF0IHlvdSB3YW50IHRvIGV4cG9ydC4KKyMKK3BlcmYgcmVjb3JkICRACmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9leHBvcnQtdG8tcG9zdGdyZXNxbC1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9leHBvcnQtdG8tcG9zdGdyZXNxbC1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzMzViNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2V4cG9ydC10by1wb3N0Z3Jlc3FsLXJlcG9ydApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogZXhwb3J0IHBlcmYgZGF0YSB0byBhIHBvc3RncmVzcWwgZGF0YWJhc2UKKyMgYXJnczogW2RhdGFiYXNlIG5hbWVdIFtjb2x1bW5zXSBbY2FsbHNdCituX2FyZ3M9MAorZm9yIGkgaW4gIiRAIgorZG8KKyAgICBpZiBleHByIG1hdGNoICIkaSIgIi0iID4gL2Rldi9udWxsIDsgdGhlbgorCWJyZWFrCisgICAgZmkKKyAgICBuX2FyZ3M9JCgoICRuX2FyZ3MgKyAxICkpCitkb25lCitpZiBbICIkbl9hcmdzIiAtZ3QgMyBdIDsgdGhlbgorICAgIGVjaG8gInVzYWdlOiBleHBvcnQtdG8tcG9zdGdyZXNxbC1yZXBvcnQgW2RhdGFiYXNlIG5hbWVdIFtjb2x1bW5zXSBbY2FsbHNdIgorICAgIGV4aXQKK2ZpCitpZiBbICIkbl9hcmdzIiAtZ3QgMiBdIDsgdGhlbgorICAgIGRibmFtZT0kMQorICAgIGNvbHVtbnM9JDIKKyAgICBjYWxscz0kMworICAgIHNoaWZ0IDMKK2VsaWYgWyAiJG5fYXJncyIgLWd0IDEgXSA7IHRoZW4KKyAgICBkYm5hbWU9JDEKKyAgICBjb2x1bW5zPSQyCisgICAgc2hpZnQgMgorZWxpZiBbICIkbl9hcmdzIiAtZ3QgMCBdIDsgdGhlbgorICAgIGRibmFtZT0kMQorICAgIHNoaWZ0CitmaQorcGVyZiBzY3JpcHQgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9weXRob24vZXhwb3J0LXRvLXBvc3RncmVzcWwucHkgJGRibmFtZSAkY29sdW1ucyAkY2FsbHMKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZXhwb3J0LXRvLXBvc3RncmVzcWwucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2V4cG9ydC10by1wb3N0Z3Jlc3FsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZGFmZDgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2V4cG9ydC10by1wb3N0Z3Jlc3FsLnB5CkBAIC0wLDAgKzEsNDQ0IEBACisjIGV4cG9ydC10by1wb3N0Z3Jlc3FsLnB5OiBleHBvcnQgcGVyZiBkYXRhIHRvIGEgcG9zdGdyZXNxbCBkYXRhYmFzZQorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisjIG1vcmUgZGV0YWlscy4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0CitpbXBvcnQgZGF0ZXRpbWUKKworZnJvbSBQeVNpZGUuUXRTcWwgaW1wb3J0ICoKKworIyBOZWVkIHRvIGFjY2VzcyBQb3N0Z3JlU1FMIEMgbGlicmFyeSBkaXJlY3RseSB0byB1c2UgQ09QWSBGUk9NIFNURElOCitmcm9tIGN0eXBlcyBpbXBvcnQgKgorbGlicHEgPSBDRExMKCJsaWJwcS5zby41IikKK1BRY29ubmVjdGRiID0gbGlicHEuUFFjb25uZWN0ZGIKK1BRY29ubmVjdGRiLnJlc3R5cGUgPSBjX3ZvaWRfcAorUFFmaW5pc2ggPSBsaWJwcS5QUWZpbmlzaAorUFFzdGF0dXMgPSBsaWJwcS5QUXN0YXR1cworUFFleGVjID0gbGlicHEuUFFleGVjCitQUWV4ZWMucmVzdHlwZSA9IGNfdm9pZF9wCitQUXJlc3VsdFN0YXR1cyA9IGxpYnBxLlBRcmVzdWx0U3RhdHVzCitQUXB1dENvcHlEYXRhID0gbGlicHEuUFFwdXRDb3B5RGF0YQorUFFwdXRDb3B5RGF0YS5hcmd0eXBlcyA9IFsgY192b2lkX3AsIGNfdm9pZF9wLCBjX2ludCBdCitQUXB1dENvcHlFbmQgPSBsaWJwcS5QUXB1dENvcHlFbmQKK1BRcHV0Q29weUVuZC5hcmd0eXBlcyA9IFsgY192b2lkX3AsIGNfdm9pZF9wIF0KKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCisjIFRoZXNlIHBlcmYgaW1wb3J0cyBhcmUgbm90IHVzZWQgYXQgcHJlc2VudAorI2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCisjZnJvbSBDb3JlIGltcG9ydCAqCisKK3BlcmZfZGJfZXhwb3J0X21vZGUgPSBUcnVlCitwZXJmX2RiX2V4cG9ydF9jYWxscyA9IEZhbHNlCisKK2RlZiB1c2FnZSgpOgorCXByaW50ID4+IHN5cy5zdGRlcnIsICJVc2FnZSBpczogZXhwb3J0LXRvLXBvc3RncmVzcWwucHkgPGRhdGFiYXNlIG5hbWU+IFs8Y29sdW1ucz5dIFs8Y2FsbHM+XSIKKwlwcmludCA+PiBzeXMuc3RkZXJyLCAid2hlcmU6CWNvbHVtbnMJCSdhbGwnIG9yICdicmFuY2hlcyciCisJcHJpbnQgPj4gc3lzLnN0ZGVyciwgIgkJY2FsbHMJCSdjYWxscycgPT4gY3JlYXRlIGNhbGxzIHRhYmxlIgorCXJhaXNlIEV4Y2VwdGlvbigiVG9vIGZldyBhcmd1bWVudHMiKQorCitpZiAobGVuKHN5cy5hcmd2KSA8IDIpOgorCXVzYWdlKCkKKworZGJuYW1lID0gc3lzLmFyZ3ZbMV0KKworaWYgKGxlbihzeXMuYXJndikgPj0gMyk6CisJY29sdW1ucyA9IHN5cy5hcmd2WzJdCitlbHNlOgorCWNvbHVtbnMgPSAiYWxsIgorCitpZiBjb2x1bW5zIG5vdCBpbiAoImFsbCIsICJicmFuY2hlcyIpOgorCXVzYWdlKCkKKworYnJhbmNoZXMgPSAoY29sdW1ucyA9PSAiYnJhbmNoZXMiKQorCitpZiAobGVuKHN5cy5hcmd2KSA+PSA0KToKKwlpZiAoc3lzLmFyZ3ZbM10gPT0gImNhbGxzIik6CisJCXBlcmZfZGJfZXhwb3J0X2NhbGxzID0gVHJ1ZQorCWVsc2U6CisJCXVzYWdlKCkKKworb3V0cHV0X2Rpcl9uYW1lID0gb3MuZ2V0Y3dkKCkgKyAiLyIgKyBkYm5hbWUgKyAiLXBlcmYtZGF0YSIKK29zLm1rZGlyKG91dHB1dF9kaXJfbmFtZSkKKworZGVmIGRvX3F1ZXJ5KHEsIHMpOgorCWlmIChxLmV4ZWNfKHMpKToKKwkJcmV0dXJuCisJcmFpc2UgRXhjZXB0aW9uKCJRdWVyeSBmYWlsZWQ6ICIgKyBxLmxhc3RFcnJvcigpLnRleHQoKSkKKworcHJpbnQgZGF0ZXRpbWUuZGF0ZXRpbWUudG9kYXkoKSwgIkNyZWF0aW5nIGRhdGFiYXNlLi4uIgorCitkYiA9IFFTcWxEYXRhYmFzZS5hZGREYXRhYmFzZSgnUVBTUUwnKQorcXVlcnkgPSBRU3FsUXVlcnkoZGIpCitkYi5zZXREYXRhYmFzZU5hbWUoJ3Bvc3RncmVzJykKK2RiLm9wZW4oKQordHJ5OgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIERBVEFCQVNFICcgKyBkYm5hbWUpCitleGNlcHQ6CisJb3Mucm1kaXIob3V0cHV0X2Rpcl9uYW1lKQorCXJhaXNlCitxdWVyeS5maW5pc2goKQorcXVlcnkuY2xlYXIoKQorZGIuY2xvc2UoKQorCitkYi5zZXREYXRhYmFzZU5hbWUoZGJuYW1lKQorZGIub3BlbigpCisKK3F1ZXJ5ID0gUVNxbFF1ZXJ5KGRiKQorZG9fcXVlcnkocXVlcnksICdTRVQgY2xpZW50X21pbl9tZXNzYWdlcyBUTyBXQVJOSU5HJykKKworZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgc2VsZWN0ZWRfZXZlbnRzICgnCisJCSdpZAkJYmlnaW50CQlOT1QgTlVMTCwnCisJCSduYW1lCQl2YXJjaGFyKDgwKSknKQorZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgbWFjaGluZXMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ3BpZAkJaW50ZWdlciwnCisJCSdyb290X2RpciAJdmFyY2hhcig0MDk2KSknKQorZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgdGhyZWFkcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQknbWFjaGluZV9pZAliaWdpbnQsJworCQkncHJvY2Vzc19pZAliaWdpbnQsJworCQkncGlkCQlpbnRlZ2VyLCcKKwkJJ3RpZAkJaW50ZWdlciknKQorZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgY29tbXMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ2NvbW0JCXZhcmNoYXIoMTYpKScpCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBjb21tX3RocmVhZHMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ2NvbW1faWQJYmlnaW50LCcKKwkJJ3RocmVhZF9pZAliaWdpbnQpJykKK2RvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIGRzb3MgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ21hY2hpbmVfaWQJYmlnaW50LCcKKwkJJ3Nob3J0X25hbWUJdmFyY2hhcigyNTYpLCcKKwkJJ2xvbmdfbmFtZQl2YXJjaGFyKDQwOTYpLCcKKwkJJ2J1aWxkX2lkCXZhcmNoYXIoNjQpKScpCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBzeW1ib2xzICgnCisJCSdpZAkJYmlnaW50CQlOT1QgTlVMTCwnCisJCSdkc29faWQJCWJpZ2ludCwnCisJCSdzeW1fc3RhcnQJYmlnaW50LCcKKwkJJ3N5bV9lbmQJYmlnaW50LCcKKwkJJ2JpbmRpbmcJaW50ZWdlciwnCisJCSduYW1lCQl2YXJjaGFyKDIwNDgpKScpCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBicmFuY2hfdHlwZXMgKCcKKwkJJ2lkCQlpbnRlZ2VyCQlOT1QgTlVMTCwnCisJCSduYW1lCQl2YXJjaGFyKDgwKSknKQorCitpZiBicmFuY2hlczoKKwlkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBzYW1wbGVzICgnCisJCSdpZAkJYmlnaW50CQlOT1QgTlVMTCwnCisJCSdldnNlbF9pZAliaWdpbnQsJworCQknbWFjaGluZV9pZAliaWdpbnQsJworCQkndGhyZWFkX2lkCWJpZ2ludCwnCisJCSdjb21tX2lkCWJpZ2ludCwnCisJCSdkc29faWQJCWJpZ2ludCwnCisJCSdzeW1ib2xfaWQJYmlnaW50LCcKKwkJJ3N5bV9vZmZzZXQJYmlnaW50LCcKKwkJJ2lwCQliaWdpbnQsJworCQkndGltZQkJYmlnaW50LCcKKwkJJ2NwdQkJaW50ZWdlciwnCisJCSd0b19kc29faWQJYmlnaW50LCcKKwkJJ3RvX3N5bWJvbF9pZAliaWdpbnQsJworCQkndG9fc3ltX29mZnNldAliaWdpbnQsJworCQkndG9faXAJCWJpZ2ludCwnCisJCSdicmFuY2hfdHlwZQlpbnRlZ2VyLCcKKwkJJ2luX3R4CQlib29sZWFuKScpCitlbHNlOgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIHNhbXBsZXMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ2V2c2VsX2lkCWJpZ2ludCwnCisJCSdtYWNoaW5lX2lkCWJpZ2ludCwnCisJCSd0aHJlYWRfaWQJYmlnaW50LCcKKwkJJ2NvbW1faWQJYmlnaW50LCcKKwkJJ2Rzb19pZAkJYmlnaW50LCcKKwkJJ3N5bWJvbF9pZAliaWdpbnQsJworCQknc3ltX29mZnNldAliaWdpbnQsJworCQknaXAJCWJpZ2ludCwnCisJCSd0aW1lCQliaWdpbnQsJworCQknY3B1CQlpbnRlZ2VyLCcKKwkJJ3RvX2Rzb19pZAliaWdpbnQsJworCQkndG9fc3ltYm9sX2lkCWJpZ2ludCwnCisJCSd0b19zeW1fb2Zmc2V0CWJpZ2ludCwnCisJCSd0b19pcAkJYmlnaW50LCcKKwkJJ3BlcmlvZAkJYmlnaW50LCcKKwkJJ3dlaWdodAkJYmlnaW50LCcKKwkJJ3RyYW5zYWN0aW9uCWJpZ2ludCwnCisJCSdkYXRhX3NyYwliaWdpbnQsJworCQknYnJhbmNoX3R5cGUJaW50ZWdlciwnCisJCSdpbl90eAkJYm9vbGVhbiknKQorCitpZiBwZXJmX2RiX2V4cG9ydF9jYWxsczoKKwlkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBjYWxsX3BhdGhzICgnCisJCSdpZAkJYmlnaW50CQlOT1QgTlVMTCwnCisJCSdwYXJlbnRfaWQJYmlnaW50LCcKKwkJJ3N5bWJvbF9pZAliaWdpbnQsJworCQknaXAJCWJpZ2ludCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIGNhbGxzICgnCisJCSdpZAkJYmlnaW50CQlOT1QgTlVMTCwnCisJCSd0aHJlYWRfaWQJYmlnaW50LCcKKwkJJ2NvbW1faWQJYmlnaW50LCcKKwkJJ2NhbGxfcGF0aF9pZAliaWdpbnQsJworCQknY2FsbF90aW1lCWJpZ2ludCwnCisJCSdyZXR1cm5fdGltZQliaWdpbnQsJworCQknYnJhbmNoX2NvdW50CWJpZ2ludCwnCisJCSdjYWxsX2lkCWJpZ2ludCwnCisJCSdyZXR1cm5faWQJYmlnaW50LCcKKwkJJ3BhcmVudF9jYWxsX3BhdGhfaWQJYmlnaW50LCcKKwkJJ2ZsYWdzCQlpbnRlZ2VyKScpCisKK2RvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFZJRVcgc2FtcGxlc192aWV3IEFTICcKKwknU0VMRUNUICcKKwkJJ2lkLCcKKwkJJ3RpbWUsJworCQknY3B1LCcKKwkJJyhTRUxFQ1QgcGlkIEZST00gdGhyZWFkcyBXSEVSRSBpZCA9IHRocmVhZF9pZCkgQVMgcGlkLCcKKwkJJyhTRUxFQ1QgdGlkIEZST00gdGhyZWFkcyBXSEVSRSBpZCA9IHRocmVhZF9pZCkgQVMgdGlkLCcKKwkJJyhTRUxFQ1QgY29tbSBGUk9NIGNvbW1zIFdIRVJFIGlkID0gY29tbV9pZCkgQVMgY29tbWFuZCwnCisJCScoU0VMRUNUIG5hbWUgRlJPTSBzZWxlY3RlZF9ldmVudHMgV0hFUkUgaWQgPSBldnNlbF9pZCkgQVMgZXZlbnQsJworCQkndG9faGV4KGlwKSBBUyBpcF9oZXgsJworCQknKFNFTEVDVCBuYW1lIEZST00gc3ltYm9scyBXSEVSRSBpZCA9IHN5bWJvbF9pZCkgQVMgc3ltYm9sLCcKKwkJJ3N5bV9vZmZzZXQsJworCQknKFNFTEVDVCBzaG9ydF9uYW1lIEZST00gZHNvcyBXSEVSRSBpZCA9IGRzb19pZCkgQVMgZHNvX3Nob3J0X25hbWUsJworCQkndG9faGV4KHRvX2lwKSBBUyB0b19pcF9oZXgsJworCQknKFNFTEVDVCBuYW1lIEZST00gc3ltYm9scyBXSEVSRSBpZCA9IHRvX3N5bWJvbF9pZCkgQVMgdG9fc3ltYm9sLCcKKwkJJ3RvX3N5bV9vZmZzZXQsJworCQknKFNFTEVDVCBzaG9ydF9uYW1lIEZST00gZHNvcyBXSEVSRSBpZCA9IHRvX2Rzb19pZCkgQVMgdG9fZHNvX3Nob3J0X25hbWUsJworCQknKFNFTEVDVCBuYW1lIEZST00gYnJhbmNoX3R5cGVzIFdIRVJFIGlkID0gYnJhbmNoX3R5cGUpIEFTIGJyYW5jaF90eXBlX25hbWUsJworCQknaW5fdHgnCisJJyBGUk9NIHNhbXBsZXMnKQorCisKK2ZpbGVfaGVhZGVyID0gc3RydWN0LnBhY2soIiExMXNpaSIsICJQR0NPUFlcblwzNzdcclxuXDAiLCAwLCAwKQorZmlsZV90cmFpbGVyID0gIlwzNzdcMzc3IgorCitkZWYgb3Blbl9vdXRwdXRfZmlsZShmaWxlX25hbWUpOgorCXBhdGhfbmFtZSA9IG91dHB1dF9kaXJfbmFtZSArICIvIiArIGZpbGVfbmFtZQorCWZpbGUgPSBvcGVuKHBhdGhfbmFtZSwgIncrIikKKwlmaWxlLndyaXRlKGZpbGVfaGVhZGVyKQorCXJldHVybiBmaWxlCisKK2RlZiBjbG9zZV9vdXRwdXRfZmlsZShmaWxlKToKKwlmaWxlLndyaXRlKGZpbGVfdHJhaWxlcikKKwlmaWxlLmNsb3NlKCkKKworZGVmIGNvcHlfb3V0cHV0X2ZpbGVfZGlyZWN0KGZpbGUsIHRhYmxlX25hbWUpOgorCWNsb3NlX291dHB1dF9maWxlKGZpbGUpCisJc3FsID0gIkNPUFkgIiArIHRhYmxlX25hbWUgKyAiIEZST00gJyIgKyBmaWxlLm5hbWUgKyAiJyAoRk9STUFUICdiaW5hcnknKSIKKwlkb19xdWVyeShxdWVyeSwgc3FsKQorCisjIFVzZSBDT1BZIEZST00gU1RESU4gYmVjYXVzZSBzZWN1cml0eSBtYXkgcHJldmVudCBwb3N0Z3JlcyBmcm9tIGFjY2Vzc2luZyB0aGUgZmlsZXMgZGlyZWN0bHkKK2RlZiBjb3B5X291dHB1dF9maWxlKGZpbGUsIHRhYmxlX25hbWUpOgorCWNvbm4gPSBQUWNvbm5lY3RkYigiZGJuYW1lID0gIiArIGRibmFtZSkKKwlpZiAoUFFzdGF0dXMoY29ubikpOgorCQlyYWlzZSBFeGNlcHRpb24oIkNPUFkgRlJPTSBTVERJTiBQUWNvbm5lY3RkYiBmYWlsZWQiKQorCWZpbGUud3JpdGUoZmlsZV90cmFpbGVyKQorCWZpbGUuc2VlaygwKQorCXNxbCA9ICJDT1BZICIgKyB0YWJsZV9uYW1lICsgIiBGUk9NIFNURElOIChGT1JNQVQgJ2JpbmFyeScpIgorCXJlcyA9IFBRZXhlYyhjb25uLCBzcWwpCisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gNCk6CisJCXJhaXNlIEV4Y2VwdGlvbigiQ09QWSBGUk9NIFNURElOIFBRZXhlYyBmYWlsZWQiKQorCWRhdGEgPSBmaWxlLnJlYWQoNjU1MzYpCisJd2hpbGUgKGxlbihkYXRhKSk6CisJCXJldCA9IFBRcHV0Q29weURhdGEoY29ubiwgZGF0YSwgbGVuKGRhdGEpKQorCQlpZiAocmV0ICE9IDEpOgorCQkJcmFpc2UgRXhjZXB0aW9uKCJDT1BZIEZST00gU1RESU4gUFFwdXRDb3B5RGF0YSBmYWlsZWQsIGVycm9yICIgKyBzdHIocmV0KSkKKwkJZGF0YSA9IGZpbGUucmVhZCg2NTUzNikKKwlyZXQgPSBQUXB1dENvcHlFbmQoY29ubiwgTm9uZSkKKwlpZiAocmV0ICE9IDEpOgorCQlyYWlzZSBFeGNlcHRpb24oIkNPUFkgRlJPTSBTVERJTiBQUXB1dENvcHlFbmQgZmFpbGVkLCBlcnJvciAiICsgc3RyKHJldCkpCisJUFFmaW5pc2goY29ubikKKworZGVmIHJlbW92ZV9vdXRwdXRfZmlsZShmaWxlKToKKwluYW1lID0gZmlsZS5uYW1lCisJZmlsZS5jbG9zZSgpCisJb3MudW5saW5rKG5hbWUpCisKK2V2c2VsX2ZpbGUJCT0gb3Blbl9vdXRwdXRfZmlsZSgiZXZzZWxfdGFibGUuYmluIikKK21hY2hpbmVfZmlsZQkJPSBvcGVuX291dHB1dF9maWxlKCJtYWNoaW5lX3RhYmxlLmJpbiIpCit0aHJlYWRfZmlsZQkJPSBvcGVuX291dHB1dF9maWxlKCJ0aHJlYWRfdGFibGUuYmluIikKK2NvbW1fZmlsZQkJPSBvcGVuX291dHB1dF9maWxlKCJjb21tX3RhYmxlLmJpbiIpCitjb21tX3RocmVhZF9maWxlCT0gb3Blbl9vdXRwdXRfZmlsZSgiY29tbV90aHJlYWRfdGFibGUuYmluIikKK2Rzb19maWxlCQk9IG9wZW5fb3V0cHV0X2ZpbGUoImRzb190YWJsZS5iaW4iKQorc3ltYm9sX2ZpbGUJCT0gb3Blbl9vdXRwdXRfZmlsZSgic3ltYm9sX3RhYmxlLmJpbiIpCiticmFuY2hfdHlwZV9maWxlCT0gb3Blbl9vdXRwdXRfZmlsZSgiYnJhbmNoX3R5cGVfdGFibGUuYmluIikKK3NhbXBsZV9maWxlCQk9IG9wZW5fb3V0cHV0X2ZpbGUoInNhbXBsZV90YWJsZS5iaW4iKQoraWYgcGVyZl9kYl9leHBvcnRfY2FsbHM6CisJY2FsbF9wYXRoX2ZpbGUJCT0gb3Blbl9vdXRwdXRfZmlsZSgiY2FsbF9wYXRoX3RhYmxlLmJpbiIpCisJY2FsbF9maWxlCQk9IG9wZW5fb3V0cHV0X2ZpbGUoImNhbGxfdGFibGUuYmluIikKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcHJpbnQgZGF0ZXRpbWUuZGF0ZXRpbWUudG9kYXkoKSwgIldyaXRpbmcgdG8gaW50ZXJtZWRpYXRlIGZpbGVzLi4uIgorCSMgaWQgPT0gMCBtZWFucyB1bmtub3duLiAgSXQgaXMgZWFzaWVyIHRvIGNyZWF0ZSByZWNvcmRzIGZvciB0aGVtIHRoYW4gcmVwbGFjZSB0aGUgemVyb2VzIHdpdGggTlVMTHMKKwlldnNlbF90YWJsZSgwLCAidW5rbm93biIpCisJbWFjaGluZV90YWJsZSgwLCAwLCAidW5rbm93biIpCisJdGhyZWFkX3RhYmxlKDAsIDAsIDAsIC0xLCAtMSkKKwljb21tX3RhYmxlKDAsICJ1bmtub3duIikKKwlkc29fdGFibGUoMCwgMCwgInVua25vd24iLCAidW5rbm93biIsICIiKQorCXN5bWJvbF90YWJsZSgwLCAwLCAwLCAwLCAwLCAidW5rbm93biIpCisJc2FtcGxlX3RhYmxlKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApCisJaWYgcGVyZl9kYl9leHBvcnRfY2FsbHM6CisJCWNhbGxfcGF0aF90YWJsZSgwLCAwLCAwLCAwKQorCit1bmhhbmRsZWRfY291bnQgPSAwCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludCBkYXRldGltZS5kYXRldGltZS50b2RheSgpLCAiQ29weWluZyB0byBkYXRhYmFzZS4uLiIKKwljb3B5X291dHB1dF9maWxlKGV2c2VsX2ZpbGUsCQkic2VsZWN0ZWRfZXZlbnRzIikKKwljb3B5X291dHB1dF9maWxlKG1hY2hpbmVfZmlsZSwJCSJtYWNoaW5lcyIpCisJY29weV9vdXRwdXRfZmlsZSh0aHJlYWRfZmlsZSwJCSJ0aHJlYWRzIikKKwljb3B5X291dHB1dF9maWxlKGNvbW1fZmlsZSwJCSJjb21tcyIpCisJY29weV9vdXRwdXRfZmlsZShjb21tX3RocmVhZF9maWxlLAkiY29tbV90aHJlYWRzIikKKwljb3B5X291dHB1dF9maWxlKGRzb19maWxlLAkJImRzb3MiKQorCWNvcHlfb3V0cHV0X2ZpbGUoc3ltYm9sX2ZpbGUsCQkic3ltYm9scyIpCisJY29weV9vdXRwdXRfZmlsZShicmFuY2hfdHlwZV9maWxlLAkiYnJhbmNoX3R5cGVzIikKKwljb3B5X291dHB1dF9maWxlKHNhbXBsZV9maWxlLAkJInNhbXBsZXMiKQorCWlmIHBlcmZfZGJfZXhwb3J0X2NhbGxzOgorCQljb3B5X291dHB1dF9maWxlKGNhbGxfcGF0aF9maWxlLAkiY2FsbF9wYXRocyIpCisJCWNvcHlfb3V0cHV0X2ZpbGUoY2FsbF9maWxlLAkJImNhbGxzIikKKworCXByaW50IGRhdGV0aW1lLmRhdGV0aW1lLnRvZGF5KCksICJSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi4iCisJcmVtb3ZlX291dHB1dF9maWxlKGV2c2VsX2ZpbGUpCisJcmVtb3ZlX291dHB1dF9maWxlKG1hY2hpbmVfZmlsZSkKKwlyZW1vdmVfb3V0cHV0X2ZpbGUodGhyZWFkX2ZpbGUpCisJcmVtb3ZlX291dHB1dF9maWxlKGNvbW1fZmlsZSkKKwlyZW1vdmVfb3V0cHV0X2ZpbGUoY29tbV90aHJlYWRfZmlsZSkKKwlyZW1vdmVfb3V0cHV0X2ZpbGUoZHNvX2ZpbGUpCisJcmVtb3ZlX291dHB1dF9maWxlKHN5bWJvbF9maWxlKQorCXJlbW92ZV9vdXRwdXRfZmlsZShicmFuY2hfdHlwZV9maWxlKQorCXJlbW92ZV9vdXRwdXRfZmlsZShzYW1wbGVfZmlsZSkKKwlpZiBwZXJmX2RiX2V4cG9ydF9jYWxsczoKKwkJcmVtb3ZlX291dHB1dF9maWxlKGNhbGxfcGF0aF9maWxlKQorCQlyZW1vdmVfb3V0cHV0X2ZpbGUoY2FsbF9maWxlKQorCW9zLnJtZGlyKG91dHB1dF9kaXJfbmFtZSkKKwlwcmludCBkYXRldGltZS5kYXRldGltZS50b2RheSgpLCAiQWRkaW5nIHByaW1hcnkga2V5cyIKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIHNlbGVjdGVkX2V2ZW50cyBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBtYWNoaW5lcyAgICAgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgdGhyZWFkcyAgICAgICAgIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNvbW1zICAgICAgICAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBjb21tX3RocmVhZHMgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgZHNvcyAgICAgICAgICAgIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIHN5bWJvbHMgICAgICAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBicmFuY2hfdHlwZXMgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgc2FtcGxlcyAgICAgICAgIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKwlpZiBwZXJmX2RiX2V4cG9ydF9jYWxsczoKKwkJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBjYWxsX3BhdGhzICAgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCQlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNhbGxzICAgICAgICAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisKKwlwcmludCBkYXRldGltZS5kYXRldGltZS50b2RheSgpLCAiQWRkaW5nIGZvcmVpZ24ga2V5cyIKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIHRocmVhZHMgJworCQkJCQknQUREIENPTlNUUkFJTlQgbWFjaGluZWZrICBGT1JFSUdOIEtFWSAobWFjaGluZV9pZCkgICBSRUZFUkVOQ0VTIG1hY2hpbmVzICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBwcm9jZXNzZmsgIEZPUkVJR04gS0VZIChwcm9jZXNzX2lkKSAgIFJFRkVSRU5DRVMgdGhyZWFkcyAgICAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNvbW1fdGhyZWFkcyAnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBjb21tZmsgICAgIEZPUkVJR04gS0VZIChjb21tX2lkKSAgICAgIFJFRkVSRU5DRVMgY29tbXMgICAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHRocmVhZGZrICAgRk9SRUlHTiBLRVkgKHRocmVhZF9pZCkgICAgUkVGRVJFTkNFUyB0aHJlYWRzICAgIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgZHNvcyAnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBtYWNoaW5lZmsgIEZPUkVJR04gS0VZIChtYWNoaW5lX2lkKSAgIFJFRkVSRU5DRVMgbWFjaGluZXMgICAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIHN5bWJvbHMgJworCQkJCQknQUREIENPTlNUUkFJTlQgZHNvZmsgICAgICBGT1JFSUdOIEtFWSAoZHNvX2lkKSAgICAgICBSRUZFUkVOQ0VTIGRzb3MgICAgICAgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBzYW1wbGVzICcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGV2c2VsZmsgICAgRk9SRUlHTiBLRVkgKGV2c2VsX2lkKSAgICAgUkVGRVJFTkNFUyBzZWxlY3RlZF9ldmVudHMgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBtYWNoaW5lZmsgIEZPUkVJR04gS0VZIChtYWNoaW5lX2lkKSAgIFJFRkVSRU5DRVMgbWFjaGluZXMgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHRocmVhZGZrICAgRk9SRUlHTiBLRVkgKHRocmVhZF9pZCkgICAgUkVGRVJFTkNFUyB0aHJlYWRzICAgIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgY29tbWZrICAgICBGT1JFSUdOIEtFWSAoY29tbV9pZCkgICAgICBSRUZFUkVOQ0VTIGNvbW1zICAgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBkc29mayAgICAgIEZPUkVJR04gS0VZIChkc29faWQpICAgICAgIFJFRkVSRU5DRVMgZHNvcyAgICAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHN5bWJvbGZrICAgRk9SRUlHTiBLRVkgKHN5bWJvbF9pZCkgICAgUkVGRVJFTkNFUyBzeW1ib2xzICAgIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgdG9kc29mayAgICBGT1JFSUdOIEtFWSAodG9fZHNvX2lkKSAgICBSRUZFUkVOQ0VTIGRzb3MgICAgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCB0b3N5bWJvbGZrIEZPUkVJR04gS0VZICh0b19zeW1ib2xfaWQpIFJFRkVSRU5DRVMgc3ltYm9scyAgICAoaWQpJykKKwlpZiBwZXJmX2RiX2V4cG9ydF9jYWxsczoKKwkJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBjYWxsX3BhdGhzICcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHBhcmVudGZrICAgIEZPUkVJR04gS0VZIChwYXJlbnRfaWQpICAgIFJFRkVSRU5DRVMgY2FsbF9wYXRocyAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHN5bWJvbGZrICAgIEZPUkVJR04gS0VZIChzeW1ib2xfaWQpICAgIFJFRkVSRU5DRVMgc3ltYm9scyAgICAoaWQpJykKKwkJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBjYWxscyAnCisJCQkJCSdBREQgQ09OU1RSQUlOVCB0aHJlYWRmayAgICBGT1JFSUdOIEtFWSAodGhyZWFkX2lkKSAgICBSRUZFUkVOQ0VTIHRocmVhZHMgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBjb21tZmsgICAgICBGT1JFSUdOIEtFWSAoY29tbV9pZCkgICAgICBSRUZFUkVOQ0VTIGNvbW1zICAgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBjYWxsX3BhdGhmayBGT1JFSUdOIEtFWSAoY2FsbF9wYXRoX2lkKSBSRUZFUkVOQ0VTIGNhbGxfcGF0aHMgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBjYWxsZmsgICAgICBGT1JFSUdOIEtFWSAoY2FsbF9pZCkgICAgICBSRUZFUkVOQ0VTIHNhbXBsZXMgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCByZXR1cm5mayAgICBGT1JFSUdOIEtFWSAocmV0dXJuX2lkKSAgICBSRUZFUkVOQ0VTIHNhbXBsZXMgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBwYXJlbnRfY2FsbF9wYXRoZmsgRk9SRUlHTiBLRVkgKHBhcmVudF9jYWxsX3BhdGhfaWQpIFJFRkVSRU5DRVMgY2FsbF9wYXRocyAoaWQpJykKKwkJZG9fcXVlcnkocXVlcnksICdDUkVBVEUgSU5ERVggcGNwaWRfaWR4IE9OIGNhbGxzIChwYXJlbnRfY2FsbF9wYXRoX2lkKScpCisKKwlpZiAodW5oYW5kbGVkX2NvdW50KToKKwkJcHJpbnQgZGF0ZXRpbWUuZGF0ZXRpbWUudG9kYXkoKSwgIldhcm5pbmc6ICIsIHVuaGFuZGxlZF9jb3VudCwgIiB1bmhhbmRsZWQgZXZlbnRzIgorCXByaW50IGRhdGV0aW1lLmRhdGV0aW1lLnRvZGF5KCksICJEb25lIgorCitkZWYgdHJhY2VfdW5oYW5kbGVkKGV2ZW50X25hbWUsIGNvbnRleHQsIGV2ZW50X2ZpZWxkc19kaWN0KToKKwlnbG9iYWwgdW5oYW5kbGVkX2NvdW50CisJdW5oYW5kbGVkX2NvdW50ICs9IDEKKworZGVmIHNjaGVkX19zY2hlZF9zd2l0Y2goKngpOgorCXBhc3MKKworZGVmIGV2c2VsX3RhYmxlKGV2c2VsX2lkLCBldnNlbF9uYW1lLCAqeCk6CisJbiA9IGxlbihldnNlbF9uYW1lKQorCWZtdCA9ICIhaGlxaSIgKyBzdHIobikgKyAicyIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgMiwgOCwgZXZzZWxfaWQsIG4sIGV2c2VsX25hbWUpCisJZXZzZWxfZmlsZS53cml0ZSh2YWx1ZSkKKworZGVmIG1hY2hpbmVfdGFibGUobWFjaGluZV9pZCwgcGlkLCByb290X2RpciwgKngpOgorCW4gPSBsZW4ocm9vdF9kaXIpCisJZm10ID0gIiFoaXFpaWkiICsgc3RyKG4pICsgInMiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDMsIDgsIG1hY2hpbmVfaWQsIDQsIHBpZCwgbiwgcm9vdF9kaXIpCisJbWFjaGluZV9maWxlLndyaXRlKHZhbHVlKQorCitkZWYgdGhyZWFkX3RhYmxlKHRocmVhZF9pZCwgbWFjaGluZV9pZCwgcHJvY2Vzc19pZCwgcGlkLCB0aWQsICp4KToKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKCIhaGlxaXFpcWlpaWkiLCA1LCA4LCB0aHJlYWRfaWQsIDgsIG1hY2hpbmVfaWQsIDgsIHByb2Nlc3NfaWQsIDQsIHBpZCwgNCwgdGlkKQorCXRocmVhZF9maWxlLndyaXRlKHZhbHVlKQorCitkZWYgY29tbV90YWJsZShjb21tX2lkLCBjb21tX3N0ciwgKngpOgorCW4gPSBsZW4oY29tbV9zdHIpCisJZm10ID0gIiFoaXFpIiArIHN0cihuKSArICJzIgorCXZhbHVlID0gc3RydWN0LnBhY2soZm10LCAyLCA4LCBjb21tX2lkLCBuLCBjb21tX3N0cikKKwljb21tX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiBjb21tX3RocmVhZF90YWJsZShjb21tX3RocmVhZF9pZCwgY29tbV9pZCwgdGhyZWFkX2lkLCAqeCk6CisJZm10ID0gIiFoaXFpcWlxIgorCXZhbHVlID0gc3RydWN0LnBhY2soZm10LCAzLCA4LCBjb21tX3RocmVhZF9pZCwgOCwgY29tbV9pZCwgOCwgdGhyZWFkX2lkKQorCWNvbW1fdGhyZWFkX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiBkc29fdGFibGUoZHNvX2lkLCBtYWNoaW5lX2lkLCBzaG9ydF9uYW1lLCBsb25nX25hbWUsIGJ1aWxkX2lkLCAqeCk6CisJbjEgPSBsZW4oc2hvcnRfbmFtZSkKKwluMiA9IGxlbihsb25nX25hbWUpCisJbjMgPSBsZW4oYnVpbGRfaWQpCisJZm10ID0gIiFoaXFpcWkiICsgc3RyKG4xKSArICJzaSIgICsgc3RyKG4yKSArICJzaSIgKyBzdHIobjMpICsgInMiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDUsIDgsIGRzb19pZCwgOCwgbWFjaGluZV9pZCwgbjEsIHNob3J0X25hbWUsIG4yLCBsb25nX25hbWUsIG4zLCBidWlsZF9pZCkKKwlkc29fZmlsZS53cml0ZSh2YWx1ZSkKKworZGVmIHN5bWJvbF90YWJsZShzeW1ib2xfaWQsIGRzb19pZCwgc3ltX3N0YXJ0LCBzeW1fZW5kLCBiaW5kaW5nLCBzeW1ib2xfbmFtZSwgKngpOgorCW4gPSBsZW4oc3ltYm9sX25hbWUpCisJZm10ID0gIiFoaXFpcWlxaXFpaWkiICsgc3RyKG4pICsgInMiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDYsIDgsIHN5bWJvbF9pZCwgOCwgZHNvX2lkLCA4LCBzeW1fc3RhcnQsIDgsIHN5bV9lbmQsIDQsIGJpbmRpbmcsIG4sIHN5bWJvbF9uYW1lKQorCXN5bWJvbF9maWxlLndyaXRlKHZhbHVlKQorCitkZWYgYnJhbmNoX3R5cGVfdGFibGUoYnJhbmNoX3R5cGUsIG5hbWUsICp4KToKKwluID0gbGVuKG5hbWUpCisJZm10ID0gIiFoaWlpIiArIHN0cihuKSArICJzIgorCXZhbHVlID0gc3RydWN0LnBhY2soZm10LCAyLCA0LCBicmFuY2hfdHlwZSwgbiwgbmFtZSkKKwlicmFuY2hfdHlwZV9maWxlLndyaXRlKHZhbHVlKQorCitkZWYgc2FtcGxlX3RhYmxlKHNhbXBsZV9pZCwgZXZzZWxfaWQsIG1hY2hpbmVfaWQsIHRocmVhZF9pZCwgY29tbV9pZCwgZHNvX2lkLCBzeW1ib2xfaWQsIHN5bV9vZmZzZXQsIGlwLCB0aW1lLCBjcHUsIHRvX2Rzb19pZCwgdG9fc3ltYm9sX2lkLCB0b19zeW1fb2Zmc2V0LCB0b19pcCwgcGVyaW9kLCB3ZWlnaHQsIHRyYW5zYWN0aW9uLCBkYXRhX3NyYywgYnJhbmNoX3R5cGUsIGluX3R4LCAqeCk6CisJaWYgYnJhbmNoZXM6CisJCXZhbHVlID0gc3RydWN0LnBhY2soIiFoaXFpcWlxaXFpcWlxaXFpcWlxaXFpaWlxaXFpcWlxaWlpQiIsIDE3LCA4LCBzYW1wbGVfaWQsIDgsIGV2c2VsX2lkLCA4LCBtYWNoaW5lX2lkLCA4LCB0aHJlYWRfaWQsIDgsIGNvbW1faWQsIDgsIGRzb19pZCwgOCwgc3ltYm9sX2lkLCA4LCBzeW1fb2Zmc2V0LCA4LCBpcCwgOCwgdGltZSwgNCwgY3B1LCA4LCB0b19kc29faWQsIDgsIHRvX3N5bWJvbF9pZCwgOCwgdG9fc3ltX29mZnNldCwgOCwgdG9faXAsIDQsIGJyYW5jaF90eXBlLCAxLCBpbl90eCkKKwllbHNlOgorCQl2YWx1ZSA9IHN0cnVjdC5wYWNrKCIhaGlxaXFpcWlxaXFpcWlxaXFpcWlxaWlpcWlxaXFpcWlxaXFpcWlxaWlpQiIsIDIxLCA4LCBzYW1wbGVfaWQsIDgsIGV2c2VsX2lkLCA4LCBtYWNoaW5lX2lkLCA4LCB0aHJlYWRfaWQsIDgsIGNvbW1faWQsIDgsIGRzb19pZCwgOCwgc3ltYm9sX2lkLCA4LCBzeW1fb2Zmc2V0LCA4LCBpcCwgOCwgdGltZSwgNCwgY3B1LCA4LCB0b19kc29faWQsIDgsIHRvX3N5bWJvbF9pZCwgOCwgdG9fc3ltX29mZnNldCwgOCwgdG9faXAsIDgsIHBlcmlvZCwgOCwgd2VpZ2h0LCA4LCB0cmFuc2FjdGlvbiwgOCwgZGF0YV9zcmMsIDQsIGJyYW5jaF90eXBlLCAxLCBpbl90eCkKKwlzYW1wbGVfZmlsZS53cml0ZSh2YWx1ZSkKKworZGVmIGNhbGxfcGF0aF90YWJsZShjcF9pZCwgcGFyZW50X2lkLCBzeW1ib2xfaWQsIGlwLCAqeCk6CisJZm10ID0gIiFoaXFpcWlxaXEiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDQsIDgsIGNwX2lkLCA4LCBwYXJlbnRfaWQsIDgsIHN5bWJvbF9pZCwgOCwgaXApCisJY2FsbF9wYXRoX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiBjYWxsX3JldHVybl90YWJsZShjcl9pZCwgdGhyZWFkX2lkLCBjb21tX2lkLCBjYWxsX3BhdGhfaWQsIGNhbGxfdGltZSwgcmV0dXJuX3RpbWUsIGJyYW5jaF9jb3VudCwgY2FsbF9pZCwgcmV0dXJuX2lkLCBwYXJlbnRfY2FsbF9wYXRoX2lkLCBmbGFncywgKngpOgorCWZtdCA9ICIhaGlxaXFpcWlxaXFpcWlxaXFpcWlxaWkiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDExLCA4LCBjcl9pZCwgOCwgdGhyZWFkX2lkLCA4LCBjb21tX2lkLCA4LCBjYWxsX3BhdGhfaWQsIDgsIGNhbGxfdGltZSwgOCwgcmV0dXJuX3RpbWUsIDgsIGJyYW5jaF9jb3VudCwgOCwgY2FsbF9pZCwgOCwgcmV0dXJuX2lkLCA4LCBwYXJlbnRfY2FsbF9wYXRoX2lkLCA0LCBmbGFncykKKwljYWxsX2ZpbGUud3JpdGUodmFsdWUpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2J1aWx0aW4tdGVzdC5jIGIvdG9vbHMvcGVyZi90ZXN0cy9idWlsdGluLXRlc3QuYwppbmRleCAxNjJjOTc4Li40YjdkOWFiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2J1aWx0aW4tdGVzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvYnVpbHRpbi10ZXN0LmMKQEAgLTg1LDcgKzg1LDcgQEAKIAkJLmZ1bmMgPSB0ZXN0X19oaXN0c19saW5rLAogCX0sCiAJewotCQkuZGVzYyA9ICJUcnkgJ3VzZSBwZXJmJyBpbiBweXRob24sIGNoZWNraW5nIGxpbmsgcHJvYmxlbXMiLAorCQkuZGVzYyA9ICJUcnkgJ2ltcG9ydCBwZXJmJyBpbiBweXRob24sIGNoZWNraW5nIGxpbmsgcHJvYmxlbXMiLAogCQkuZnVuYyA9IHRlc3RfX3B5dGhvbl91c2UsCiAJfSwKIAl7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2NvZGUtcmVhZGluZy5jIGIvdG9vbHMvcGVyZi90ZXN0cy9jb2RlLXJlYWRpbmcuYwppbmRleCA2N2YyZDYzLi5mNjcxZWMzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2NvZGUtcmVhZGluZy5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvY29kZS1yZWFkaW5nLmMKQEAgLTEzMyw4ICsxMzMsNyBAQAogfQogCiBzdGF0aWMgaW50IHJlYWRfb2JqZWN0X2NvZGUodTY0IGFkZHIsIHNpemVfdCBsZW4sIHU4IGNwdW1vZGUsCi0JCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKLQkJCSAgICBzdHJ1Y3Qgc3RhdGUgKnN0YXRlKQorCQkJICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IHN0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAl1bnNpZ25lZCBjaGFyIGJ1ZjFbQlVGU1pdOwpAQCAtMTQ1LDggKzE0NCw3IEBACiAKIAlwcl9kZWJ1ZygiUmVhZGluZyBvYmplY3QgY29kZSBmb3IgbWVtb3J5IGFkZHJlc3M6ICUjIlBSSXg2NCJcbiIsIGFkZHIpOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwgYWRkciwKLQkJCSAgICAgICZhbCk7CisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwgYWRkciwgJmFsKTsKIAlpZiAoIWFsLm1hcCB8fCAhYWwubWFwLT5kc28pIHsKIAkJcHJfZGVidWcoInRocmVhZF9fZmluZF9hZGRyX21hcCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0xNzAsOCArMTY4LDggQEAKIAkJbGVuID0gYWwubWFwLT5lbmQgLSBhZGRyOwogCiAJLyogUmVhZCB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVyZiAqLwotCXJldF9sZW4gPSBkc29fX2RhdGFfcmVhZF9vZmZzZXQoYWwubWFwLT5kc28sIG1hY2hpbmUsIGFsLmFkZHIsIGJ1ZjEsCi0JCQkJCWxlbik7CisJcmV0X2xlbiA9IGRzb19fZGF0YV9yZWFkX29mZnNldChhbC5tYXAtPmRzbywgdGhyZWFkLT5tZy0+bWFjaGluZSwKKwkJCQkJYWwuYWRkciwgYnVmMSwgbGVuKTsKIAlpZiAocmV0X2xlbiAhPSBsZW4pIHsKIAkJcHJfZGVidWcoImRzb19fZGF0YV9yZWFkX29mZnNldCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0yNjQsOCArMjYyLDcgQEAKIAogCWNwdW1vZGUgPSBldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKIAotCXJldHVybiByZWFkX29iamVjdF9jb2RlKHNhbXBsZS5pcCwgUkVBRExFTiwgY3B1bW9kZSwgdGhyZWFkLCBtYWNoaW5lLAotCQkJCXN0YXRlKTsKKwlyZXR1cm4gcmVhZF9vYmplY3RfY29kZShzYW1wbGUuaXAsIFJFQURMRU4sIGNwdW1vZGUsIHRocmVhZCwgc3RhdGUpOwogfQogCiBzdGF0aWMgaW50IHByb2Nlc3NfZXZlbnQoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9kd2FyZi11bndpbmQuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvZHdhcmYtdW53aW5kLmMKaW5kZXggZmMyNWU1Ny4uYWIyOGNjYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9kd2FyZi11bndpbmQuYworKysgYi90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jCkBAIC01OSw3ICs1OSw3IEBACiB9CiAKIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCi1zdGF0aWMgaW50IHVud2luZF90aHJlYWQoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3N0YXRpYyBpbnQgdW53aW5kX3RocmVhZChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCiB7CiAJc3RydWN0IHBlcmZfc2FtcGxlIHNhbXBsZTsKIAl1bnNpZ25lZCBsb25nIGNudCA9IDA7CkBAIC03Miw3ICs3Miw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IHVud2luZF9fZ2V0X2VudHJpZXModW53aW5kX2VudHJ5LCAmY250LCBtYWNoaW5lLCB0aHJlYWQsCisJZXJyID0gdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnksICZjbnQsIHRocmVhZCwKIAkJCQkgICZzYW1wbGUsIE1BWF9TVEFDSyk7CiAJaWYgKGVycikKIAkJcHJfZGVidWcoInVud2luZCBmYWlsZWRcbiIpOwpAQCAtODksMjEgKzg5LDIxIEBACiB9CiAKIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCi1zdGF0aWMgaW50IGtyYXZhXzMoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3N0YXRpYyBpbnQga3JhdmFfMyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCiB7Ci0JcmV0dXJuIHVud2luZF90aHJlYWQodGhyZWFkLCBtYWNoaW5lKTsKKwlyZXR1cm4gdW53aW5kX3RocmVhZCh0aHJlYWQpOwogfQogCiBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQotc3RhdGljIGludCBrcmF2YV8yKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCitzdGF0aWMgaW50IGtyYXZhXzIoc3RydWN0IHRocmVhZCAqdGhyZWFkKQogewotCXJldHVybiBrcmF2YV8zKHRocmVhZCwgbWFjaGluZSk7CisJcmV0dXJuIGtyYXZhXzModGhyZWFkKTsKIH0KIAogX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKLXN0YXRpYyBpbnQga3JhdmFfMShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQorc3RhdGljIGludCBrcmF2YV8xKHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKIHsKLQlyZXR1cm4ga3JhdmFfMih0aHJlYWQsIG1hY2hpbmUpOworCXJldHVybiBrcmF2YV8yKHRocmVhZCk7CiB9CiAKIGludCB0ZXN0X19kd2FyZl91bndpbmQodm9pZCkKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBrcmF2YV8xKHRocmVhZCwgbWFjaGluZSk7CisJZXJyID0ga3JhdmFfMSh0aHJlYWQpOwogCiAgb3V0OgogCW1hY2hpbmVfX2RlbGV0ZV90aHJlYWRzKG1hY2hpbmUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19maWx0ZXIuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfZmlsdGVyLmMKaW5kZXggNWEzMTc4Ny4uNzRmMjU3YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19maWx0ZXIuYworKysgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jCkBAIC00Myw3ICs0Myw3IEBACiB9OwogCiBzdGF0aWMgaW50IGFkZF9oaXN0X2VudHJpZXMoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsCi0JCQkgICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUgX19tYXliZV91bnVzZWQpCisJCQkgICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCiB7CiAJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOwogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9tbWFwLXRocmVhZC1sb29rdXAuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvbW1hcC10aHJlYWQtbG9va3VwLmMKaW5kZXggNGE0NTZmZS4uMjExM2YxYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9tbWFwLXRocmVhZC1sb29rdXAuYworKysgYi90b29scy9wZXJmL3Rlc3RzL21tYXAtdGhyZWFkLWxvb2t1cC5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAogCQlwcl9kZWJ1ZygibG9va2luZyBmb3IgbWFwICVwXG4iLCB0ZC0+bWFwKTsKIAotCQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLAorCQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLAogCQkJCSAgICAgIFBFUkZfUkVDT1JEX01JU0NfVVNFUiwgTUFQX19GVU5DVElPTiwKIAkJCQkgICAgICAodW5zaWduZWQgbG9uZykgKHRkLT5tYXAgKyAxKSwgJmFsKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9zYW1wbGUtcGFyc2luZy5jIGIvdG9vbHMvcGVyZi90ZXN0cy9zYW1wbGUtcGFyc2luZy5jCmluZGV4IGNhMjkyZjkuLjQ5MDhjNjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvc2FtcGxlLXBhcnNpbmcuYworKysgYi90b29scy9wZXJmL3Rlc3RzL3NhbXBsZS1wYXJzaW5nLmMKQEAgLTEyNiwxNiArMTI2LDI4IEBACiAJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9UUkFOU0FDVElPTikKIAkJQ09NUCh0cmFuc2FjdGlvbik7CiAKKwlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikgeworCQlzaXplX3Qgc3ogPSBod2VpZ2h0X2xvbmcoczEtPmludHJfcmVncy5tYXNrKSAqIHNpemVvZih1NjQpOworCisJCUNPTVAoaW50cl9yZWdzLm1hc2spOworCQlDT01QKGludHJfcmVncy5hYmkpOworCQlpZiAoczEtPmludHJfcmVncy5hYmkgJiYKKwkJICAgICghczEtPmludHJfcmVncy5yZWdzIHx8ICFzMi0+aW50cl9yZWdzLnJlZ3MgfHwKKwkJICAgICBtZW1jbXAoczEtPmludHJfcmVncy5yZWdzLCBzMi0+aW50cl9yZWdzLnJlZ3MsIHN6KSkpIHsKKwkJCXByX2RlYnVnKCJTYW1wbGVzIGRpZmZlciBhdCAnaW50cl9yZWdzJ1xuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBkb190ZXN0KHU2NCBzYW1wbGVfdHlwZSwgdTY0IHNhbXBsZV9yZWdzX3VzZXIsIHU2NCByZWFkX2Zvcm1hdCkKK3N0YXRpYyBpbnQgZG9fdGVzdCh1NjQgc2FtcGxlX3R5cGUsIHU2NCBzYW1wbGVfcmVncywgdTY0IHJlYWRfZm9ybWF0KQogewogCXN0cnVjdCBwZXJmX2V2c2VsIGV2c2VsID0gewogCQkubmVlZHNfc3dhcCA9IGZhbHNlLAogCQkuYXR0ciA9IHsKIAkJCS5zYW1wbGVfdHlwZSA9IHNhbXBsZV90eXBlLAotCQkJLnNhbXBsZV9yZWdzX3VzZXIgPSBzYW1wbGVfcmVnc191c2VyLAogCQkJLnJlYWRfZm9ybWF0ID0gcmVhZF9mb3JtYXQsCiAJCX0sCiAJfTsKQEAgLTE1NCw3ICsxNjYsNyBAQAogCQkvKiAxIGJyYW5jaF9lbnRyeSAqLwogCQkuZGF0YSA9IHsxLCAyMTEsIDIxMiwgMjEzfSwKIAl9OwotCXU2NCB1c2VyX3JlZ3NbNjRdOworCXU2NCByZWdzWzY0XTsKIAljb25zdCB1NjQgcmF3X2RhdGFbXSA9IHsweDEyMzQ1Njc4MGEwYjBjMGRVTEwsIDB4MTEwMjAzMDQwNTA2MDcwOFVMTH07CiAJY29uc3QgdTY0IGRhdGFbXSA9IHsweDIyMTE0NDMzNjY1NTg4NzdVTEwsIDAsIDB4YWFiYmNjZGRlZWZmNDMyMVVMTH07CiAJc3RydWN0IHBlcmZfc2FtcGxlIHNhbXBsZSA9IHsKQEAgLTE3Niw4ICsxODgsOCBAQAogCQkuYnJhbmNoX3N0YWNrCT0gJmJyYW5jaF9zdGFjay5icmFuY2hfc3RhY2ssCiAJCS51c2VyX3JlZ3MJPSB7CiAJCQkuYWJpCT0gUEVSRl9TQU1QTEVfUkVHU19BQklfNjQsCi0JCQkubWFzawk9IHNhbXBsZV9yZWdzX3VzZXIsCi0JCQkucmVncwk9IHVzZXJfcmVncywKKwkJCS5tYXNrCT0gc2FtcGxlX3JlZ3MsCisJCQkucmVncwk9IHJlZ3MsCiAJCX0sCiAJCS51c2VyX3N0YWNrCT0gewogCQkJLnNpemUJPSBzaXplb2YoZGF0YSksCkBAIC0xODcsMTQgKzE5OSwyNSBAQAogCQkJLnRpbWVfZW5hYmxlZCA9IDB4MDMwYTU5ZDY2NGZjYTdkZVVMTCwKIAkJCS50aW1lX3J1bm5pbmcgPSAweDAxMWI2YWU1NTNlYjk4ZWRVTEwsCiAJCX0sCisJCS5pbnRyX3JlZ3MJPSB7CisJCQkuYWJpCT0gUEVSRl9TQU1QTEVfUkVHU19BQklfNjQsCisJCQkubWFzawk9IHNhbXBsZV9yZWdzLAorCQkJLnJlZ3MJPSByZWdzLAorCQl9LAogCX07CiAJc3RydWN0IHNhbXBsZV9yZWFkX3ZhbHVlIHZhbHVlc1tdID0ge3sxLCA1fSwgezksIDN9LCB7MiwgN30sIHs2LCA0fSx9OwogCXN0cnVjdCBwZXJmX3NhbXBsZSBzYW1wbGVfb3V0OwogCXNpemVfdCBpLCBzeiwgYnVmc3o7CiAJaW50IGVyciwgcmV0ID0gLTE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJfcmVncyk7IGkrKykKLQkJKihpICsgKHU4ICopdXNlcl9yZWdzKSA9IGkgJiAweGZlOworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfVVNFUikKKwkJZXZzZWwuYXR0ci5zYW1wbGVfcmVnc191c2VyID0gc2FtcGxlX3JlZ3M7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpCisJCWV2c2VsLmF0dHIuc2FtcGxlX3JlZ3NfaW50ciA9IHNhbXBsZV9yZWdzOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihyZWdzKTsgaSsrKQorCQkqKGkgKyAodTggKilyZWdzKSA9IGkgJiAweGZlOwogCiAJaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfR1JPVVApIHsKIAkJc2FtcGxlLnJlYWQuZ3JvdXAubnIgICAgID0gNDsKQEAgLTI3MSw3ICsyOTQsNyBAQAogewogCWNvbnN0IHU2NCByZltdID0gezQsIDUsIDYsIDcsIDEyLCAxMywgMTQsIDE1fTsKIAl1NjQgc2FtcGxlX3R5cGU7Ci0JdTY0IHNhbXBsZV9yZWdzX3VzZXI7CisJdTY0IHNhbXBsZV9yZWdzOwogCXNpemVfdCBpOwogCWludCBlcnI7CiAKQEAgLTI4MCw3ICszMDMsNyBAQAogCSAqIHdlcmUgYWRkZWQuICBQbGVhc2UgYWN0dWFsbHkgdXBkYXRlIHRoZSB0ZXN0IHJhdGhlciB0aGFuIGp1c3QgY2hhbmdlCiAJICogdGhlIGNvbmRpdGlvbiBiZWxvdy4KIAkgKi8KLQlpZiAoUEVSRl9TQU1QTEVfTUFYID4gUEVSRl9TQU1QTEVfVFJBTlNBQ1RJT04gPDwgMSkgeworCWlmIChQRVJGX1NBTVBMRV9NQVggPiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIgPDwgMSkgewogCQlwcl9kZWJ1Zygic2FtcGxlIGZvcm1hdCBoYXMgY2hhbmdlZCwgc29tZSBuZXcgUEVSRl9TQU1QTEVfIGJpdCB3YXMgaW50cm9kdWNlZCAtIHRlc3QgbmVlZHMgdXBkYXRpbmdcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjk3LDIyICszMjAsMjQgQEAKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CisJCXNhbXBsZV9yZWdzID0gMDsKIAogCQlpZiAoc2FtcGxlX3R5cGUgPT0gUEVSRl9TQU1QTEVfUkVHU19VU0VSKQotCQkJc2FtcGxlX3JlZ3NfdXNlciA9IDB4M2ZmZjsKLQkJZWxzZQotCQkJc2FtcGxlX3JlZ3NfdXNlciA9IDA7CisJCQlzYW1wbGVfcmVncyA9IDB4M2ZmZjsKIAotCQllcnIgPSBkb190ZXN0KHNhbXBsZV90eXBlLCBzYW1wbGVfcmVnc191c2VyLCAwKTsKKwkJaWYgKHNhbXBsZV90eXBlID09IFBFUkZfU0FNUExFX1JFR1NfSU5UUikKKwkJCXNhbXBsZV9yZWdzID0gMHhmZjBmZmY7CisKKwkJZXJyID0gZG9fdGVzdChzYW1wbGVfdHlwZSwgc2FtcGxlX3JlZ3MsIDApOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKIAkvKiBUZXN0IGFsbCBzYW1wbGUgZm9ybWF0IGJpdHMgdG9nZXRoZXIgKi8KIAlzYW1wbGVfdHlwZSA9IFBFUkZfU0FNUExFX01BWCAtIDE7Ci0Jc2FtcGxlX3JlZ3NfdXNlciA9IDB4M2ZmZjsKKwlzYW1wbGVfcmVncyA9IDB4M2ZmZjsgLyogc2hhcmVkIHliIGludHIgYW5kIHVzZXIgcmVncyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJmKTsgaSsrKSB7Ci0JCWVyciA9IGRvX3Rlc3Qoc2FtcGxlX3R5cGUsIHNhbXBsZV9yZWdzX3VzZXIsIHJmW2ldKTsKKwkJZXJyID0gZG9fdGVzdChzYW1wbGVfdHlwZSwgc2FtcGxlX3JlZ3MsIHJmW2ldKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9icm93c2Vycy9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91aS9icm93c2Vycy9hbm5vdGF0ZS5jCmluZGV4IGYwNjk3YTMuLjFlMGEyZmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAlib29sIGhpZGVfc3JjX2NvZGUsCiAJICAgICB1c2Vfb2Zmc2V0LAogCSAgICAganVtcF9hcnJvd3MsCisJICAgICBzaG93X2xpbmVuciwKIAkgICAgIHNob3dfbnJfanVtcHM7CiB9IGFubm90YXRlX2Jyb3dzZXJfX29wdHMgPSB7CiAJLnVzZV9vZmZzZXQJPSB0cnVlLApAQCAtMTI4LDcgKzEyOSwxMSBAQAogCWlmICghKmRsLT5saW5lKQogCQlzbHNtZ193cml0ZV9uc3RyaW5nKCIgIiwgd2lkdGggLSBwY250X3dpZHRoKTsKIAllbHNlIGlmIChkbC0+b2Zmc2V0ID09IC0xKSB7Ci0JCXByaW50ZWQgPSBzY25wcmludGYoYmYsIHNpemVvZihiZiksICIlKnMgICIsCisJCWlmIChkbC0+bGluZV9uciAmJiBhbm5vdGF0ZV9icm93c2VyX19vcHRzLnNob3dfbGluZW5yKQorCQkJcHJpbnRlZCA9IHNjbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIiUtKmQgIiwKKwkJCQkJYWItPmFkZHJfd2lkdGggKyAxLCBkbC0+bGluZV9ucik7CisJCWVsc2UKKwkJCXByaW50ZWQgPSBzY25wcmludGYoYmYsIHNpemVvZihiZiksICIlKnMgICIsCiAJCQkJICAgIGFiLT5hZGRyX3dpZHRoLCAiICIpOwogCQlzbHNtZ193cml0ZV9uc3RyaW5nKGJmLCBwcmludGVkKTsKIAkJc2xzbWdfd3JpdGVfbnN0cmluZyhkbC0+bGluZSwgd2lkdGggLSBwcmludGVkIC0gcGNudF93aWR0aCArIDEpOwpAQCAtNzMzLDYgKzczOCw3IEBACiAJCSJvICAgICAgICAgICAgIFRvZ2dsZSBkaXNhc3NlbWJsZXIgb3V0cHV0L3NpbXBsaWZpZWQgdmlld1xuIgogCQkicyAgICAgICAgICAgICBUb2dnbGUgc291cmNlIGNvZGUgdmlld1xuIgogCQkiLyAgICAgICAgICAgICBTZWFyY2ggc3RyaW5nXG4iCisJCSJrICAgICAgICAgICAgIFRvZ2dsZSBsaW5lIG51bWJlcnNcbiIKIAkJInIgICAgICAgICAgICAgUnVuIGF2YWlsYWJsZSBzY3JpcHRzXG4iCiAJCSI/ICAgICAgICAgICAgIFNlYXJjaCBzdHJpbmcgYmFja3dhcmRzXG4iKTsKIAkJCWNvbnRpbnVlOwpAQCAtNzQxLDYgKzc0NywxMCBAQAogCQkJCXNjcmlwdF9icm93c2UoTlVMTCk7CiAJCQkJY29udGludWU7CiAJCQl9CisJCWNhc2UgJ2snOgorCQkJYW5ub3RhdGVfYnJvd3Nlcl9fb3B0cy5zaG93X2xpbmVuciA9CisJCQkJIWFubm90YXRlX2Jyb3dzZXJfX29wdHMuc2hvd19saW5lbnI7CisJCQlicmVhazsKIAkJY2FzZSAnSCc6CiAJCQluZCA9IGJyb3dzZXItPmN1cnJfaG90OwogCQkJYnJlYWs7CkBAIC05ODQsNiArOTk0LDcgQEAKIH0gYW5ub3RhdGVfX2NvbmZpZ3NbXSA9IHsKIAlBTk5PVEFURV9DRkcoaGlkZV9zcmNfY29kZSksCiAJQU5OT1RBVEVfQ0ZHKGp1bXBfYXJyb3dzKSwKKwlBTk5PVEFURV9DRkcoc2hvd19saW5lbnIpLAogCUFOTk9UQVRFX0NGRyhzaG93X25yX2p1bXBzKSwKIAlBTk5PVEFURV9DRkcodXNlX29mZnNldCksCiB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jIGIvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jCmluZGV4IGNmYjk3NmIuLjUwMmRhZmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvaGlzdHMuYworKysgYi90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMKQEAgLTIyNywxMCArMjI3LDE0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBjYWxsY2hhaW5fbm9kZV9faW5pdF9oYXZlX2NoaWxkcmVuKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqbm9kZSkKK3N0YXRpYyB2b2lkIGNhbGxjaGFpbl9ub2RlX19pbml0X2hhdmVfY2hpbGRyZW4oc3RydWN0IGNhbGxjaGFpbl9ub2RlICpub2RlLAorCQkJCQkgICAgICAgYm9vbCBoYXNfc2libGluZykKIHsKIAlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOwogCisJY2hhaW4gPSBsaXN0X2VudHJ5KG5vZGUtPnZhbC5uZXh0LCBzdHJ1Y3QgY2FsbGNoYWluX2xpc3QsIGxpc3QpOworCWNoYWluLT5tcy5oYXNfY2hpbGRyZW4gPSBoYXNfc2libGluZzsKKwogCWlmICghbGlzdF9lbXB0eSgmbm9kZS0+dmFsKSkgewogCQljaGFpbiA9IGxpc3RfZW50cnkobm9kZS0+dmFsLnByZXYsIHN0cnVjdCBjYWxsY2hhaW5fbGlzdCwgbGlzdCk7CiAJCWNoYWluLT5tcy5oYXNfY2hpbGRyZW4gPSAhUkJfRU1QVFlfUk9PVCgmbm9kZS0+cmJfcm9vdCk7CkBAIC0yNDEsMTEgKzI0NSwxMiBAQAogCiBzdGF0aWMgdm9pZCBjYWxsY2hhaW5fX2luaXRfaGF2ZV9jaGlsZHJlbihzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKIHsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisJc3RydWN0IHJiX25vZGUgKm5kID0gcmJfZmlyc3Qocm9vdCk7CisJYm9vbCBoYXNfc2libGluZyA9IG5kICYmIHJiX25leHQobmQpOwogCiAJZm9yIChuZCA9IHJiX2ZpcnN0KHJvb3QpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5vZGUgPSByYl9lbnRyeShuZCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlKTsKLQkJY2FsbGNoYWluX25vZGVfX2luaXRfaGF2ZV9jaGlsZHJlbihub2RlKTsKKwkJY2FsbGNoYWluX25vZGVfX2luaXRfaGF2ZV9jaGlsZHJlbihub2RlLCBoYXNfc2libGluZyk7CiAJfQogfQogCkBAIC00NjMsMjMgKzQ2OCw2IEBACiAJcmV0dXJuIGtleTsKIH0KIAotc3RhdGljIGNoYXIgKmNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNsLAotCQkJCSAgICAgIGNoYXIgKmJmLCBzaXplX3QgYmZzaXplLCBib29sIHNob3dfZHNvKQotewotCWludCBwcmludGVkOwotCi0JaWYgKGNsLT5tcy5zeW0pCi0JCXByaW50ZWQgPSBzY25wcmludGYoYmYsIGJmc2l6ZSwgIiVzIiwgY2wtPm1zLnN5bS0+bmFtZSk7Ci0JZWxzZQotCQlwcmludGVkID0gc2NucHJpbnRmKGJmLCBiZnNpemUsICIlIyIgUFJJeDY0LCBjbC0+aXApOwotCi0JaWYgKHNob3dfZHNvKQotCQlzY25wcmludGYoYmYgKyBwcmludGVkLCBiZnNpemUgLSBwcmludGVkLCAiICVzIiwKLQkJCSAgY2wtPm1zLm1hcCA/IGNsLT5tcy5tYXAtPmRzby0+c2hvcnRfbmFtZSA6ICJ1bmtub3duIik7Ci0KLQlyZXR1cm4gYmY7Ci19Ci0KIHN0cnVjdCBjYWxsY2hhaW5fcHJpbnRfYXJnIHsKIAkvKiBmb3IgaGlzdHMgYnJvd3NlciAqLwogCW9mZl90CXJvd19vZmZzZXQ7CkBAIC01NTksOCArNTQ3LDExIEBACiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CiAJaW50IGZpcnN0X3JvdyA9IHJvdywgb2Zmc2V0ID0gbGV2ZWwgKiBMRVZFTF9PRkZTRVRfU1RFUDsKIAl1NjQgbmV3X3RvdGFsOworCWJvb2wgbmVlZF9wZXJjZW50OwogCiAJbm9kZSA9IHJiX2ZpcnN0KHJvb3QpOworCW5lZWRfcGVyY2VudCA9ICEhcmJfbmV4dChub2RlKTsKKwogCXdoaWxlIChub2RlKSB7CiAJCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hpbGQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUsIHJiX25vZGUpOwogCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX25leHQobm9kZSk7CkBAIC01NzcsNyArNTY4LDcgQEAKIAogCQkJaWYgKGZpcnN0KQogCQkJCWZpcnN0ID0gZmFsc2U7Ci0JCQllbHNlIGlmIChsZXZlbCA+IDEpCisJCQllbHNlIGlmIChuZWVkX3BlcmNlbnQpCiAJCQkJZXh0cmFfb2Zmc2V0ID0gTEVWRUxfT0ZGU0VUX1NURVA7CiAKIAkJCWZvbGRlZF9zaWduID0gY2FsbGNoYWluX2xpc3RfX2ZvbGRlZChjaGFpbik7CkBAIC01OTAsNyArNTgxLDcgQEAKIAkJCXN0ciA9IGNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShjaGFpbiwgYmYsIHNpemVvZihiZiksCiAJCQkJCQkgICAgICAgYnJvd3Nlci0+c2hvd19kc28pOwogCi0JCQlpZiAod2FzX2ZpcnN0ICYmIGxldmVsID4gMSkgeworCQkJaWYgKHdhc19maXJzdCAmJiBuZWVkX3BlcmNlbnQpIHsKIAkJCQlkb3VibGUgcGVyY2VudCA9IGN1bXVsICogMTAwLjAgLyB0b3RhbDsKIAogCQkJCWlmIChhc3ByaW50ZigmYWxsb2Nfc3RyLCAiJTIuMmYlJSAlcyIsIHBlcmNlbnQsIHN0cikgPCAwKQpAQCAtODA3LDYgKzc5OCwxMyBAQAogCQkJLmlzX2N1cnJlbnRfZW50cnkgPSBjdXJyZW50X2VudHJ5LAogCQl9OwogCisJCWlmIChjYWxsY2hhaW5fcGFyYW0ubW9kZSA9PSBDSEFJTl9HUkFQSF9SRUwpIHsKKwkJCWlmIChzeW1ib2xfY29uZi5jdW11bGF0ZV9jYWxsY2hhaW4pCisJCQkJdG90YWwgPSBlbnRyeS0+c3RhdF9hY2MtPnBlcmlvZDsKKwkJCWVsc2UKKwkJCQl0b3RhbCA9IGVudHJ5LT5zdGF0LnBlcmlvZDsKKwkJfQorCiAJCXByaW50ZWQgKz0gaGlzdF9icm93c2VyX19zaG93X2NhbGxjaGFpbihicm93c2VyLAogCQkJCQkmZW50cnktPnNvcnRlZF9jaGFpbiwgMSwgcm93LCB0b3RhbCwKIAkJCQkJaGlzdF9icm93c2VyX19zaG93X2NhbGxjaGFpbl9lbnRyeSwgJmFyZywKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jCmluZGV4IGZjNjU0ZmIuLjRiMzU4NWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMKKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYwpAQCAtODksMTUgKzg5LDYgQEAKIAkJCQlwZXJmX2d0a19faHBwX2NvbG9yX292ZXJoZWFkX2FjYzsKIH0KIAotc3RhdGljIHZvaWQgY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKHN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2wsCi0JCQkJICAgICBjaGFyICpiZiwgc2l6ZV90IGJmc2l6ZSkKLXsKLQlpZiAoY2wtPm1zLnN5bSkKLQkJc2NucHJpbnRmKGJmLCBiZnNpemUsICIlcyIsIGNsLT5tcy5zeW0tPm5hbWUpOwotCWVsc2UKLQkJc2NucHJpbnRmKGJmLCBiZnNpemUsICIlIyIgUFJJeDY0LCBjbC0+aXApOwotfQotCiBzdGF0aWMgdm9pZCBwZXJmX2d0a19fYWRkX2NhbGxjaGFpbihzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgR3RrVHJlZVN0b3JlICpzdG9yZSwKIAkJCQkgICAgR3RrVHJlZUl0ZXIgKnBhcmVudCwgaW50IGNvbCwgdTY0IHRvdGFsKQogewpAQCAtMTI4LDcgKzExOSw3IEBACiAJCQlzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiU1LjJmJSUiLCBwZXJjZW50KTsKIAkJCWd0a190cmVlX3N0b3JlX3NldChzdG9yZSwgJml0ZXIsIDAsIGJ1ZiwgLTEpOwogCi0JCQljYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoY2hhaW4sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQkJY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKGNoYWluLCBidWYsIHNpemVvZihidWYpLCBmYWxzZSk7CiAJCQlndGtfdHJlZV9zdG9yZV9zZXQoc3RvcmUsICZpdGVyLCBjb2wsIGJ1ZiwgLTEpOwogCiAJCQlpZiAobmVlZF9uZXdfcGFyZW50KSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL3N0ZGlvL2hpc3QuYyBiL3Rvb2xzL3BlcmYvdWkvc3RkaW8vaGlzdC5jCmluZGV4IDE1YjQ1MWEuLmRmY2JjOTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvc3RkaW8vaGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdWkvc3RkaW8vaGlzdC5jCkBAIC00MSw2ICs0MSw3IEBACiB7CiAJaW50IGk7CiAJc2l6ZV90IHJldCA9IDA7CisJY2hhciBiZlsxMDI0XTsKIAogCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfbGVmdF9tYXJnaW4oZnAsIGxlZnRfbWFyZ2luKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGVwdGg7IGkrKykgewpAQCAtNTYsMTEgKzU3LDggQEAKIAkJfSBlbHNlCiAJCQlyZXQgKz0gZnByaW50ZihmcCwgIiVzIiwgIiAgICAgICAgICAiKTsKIAl9Ci0JaWYgKGNoYWluLT5tcy5zeW0pCi0JCXJldCArPSBmcHJpbnRmKGZwLCAiJXNcbiIsIGNoYWluLT5tcy5zeW0tPm5hbWUpOwotCWVsc2UKLQkJcmV0ICs9IGZwcmludGYoZnAsICIweCUwIiBQUkl4NjQgIlxuIiwgY2hhaW4tPmlwKTsKLQorCWZwdXRzKGNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShjaGFpbiwgYmYsIHNpemVvZihiZiksIGZhbHNlKSwgZnApOworCWZwdXRjKCdcbicsIGZwKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjgsNiArMTY2LDcgQEAKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAlpbnQgaSA9IDA7CiAJaW50IHJldCA9IDA7CisJY2hhciBiZlsxMDI0XTsKIAogCS8qCiAJICogSWYgaGF2ZSBvbmUgc2luZ2xlIGNhbGxjaGFpbiByb290LCBkb24ndCBib3RoZXIgcHJpbnRpbmcKQEAgLTE5NiwxMCArMTk1LDggQEAKIAkJCX0gZWxzZQogCQkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfbGVmdF9tYXJnaW4oZnAsIGxlZnRfbWFyZ2luKTsKIAotCQkJaWYgKGNoYWluLT5tcy5zeW0pCi0JCQkJcmV0ICs9IGZwcmludGYoZnAsICIgJXNcbiIsIGNoYWluLT5tcy5zeW0tPm5hbWUpOwotCQkJZWxzZQotCQkJCXJldCArPSBmcHJpbnRmKGZwLCAiICVwXG4iLCAodm9pZCAqKShsb25nKWNoYWluLT5pcCk7CisJCQlyZXQgKz0gZnByaW50ZihmcCwgIiVzXG4iLCBjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoY2hhaW4sIGJmLCBzaXplb2YoYmYpLAorCQkJCQkJCWZhbHNlKSk7CiAKIAkJCWlmICgrK2VudHJpZXNfcHJpbnRlZCA9PSBjYWxsY2hhaW5fcGFyYW0ucHJpbnRfbGltaXQpCiAJCQkJYnJlYWs7CkBAIC0yMTksNiArMjE2LDcgQEAKIHsKIAlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOwogCXNpemVfdCByZXQgPSAwOworCWNoYXIgYmZbMTAyNF07CiAKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAwOwpAQCAtMjI5LDExICsyMjcsOCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZub2RlLT52YWwsIGxpc3QpIHsKIAkJaWYgKGNoYWluLT5pcCA+PSBQRVJGX0NPTlRFWFRfTUFYKQogCQkJY29udGludWU7Ci0JCWlmIChjaGFpbi0+bXMuc3ltKQotCQkJcmV0ICs9IGZwcmludGYoZnAsICIgICAgICAgICAgICAgICAgJXNcbiIsIGNoYWluLT5tcy5zeW0tPm5hbWUpOwotCQllbHNlCi0JCQlyZXQgKz0gZnByaW50ZihmcCwgIiAgICAgICAgICAgICAgICAlcFxuIiwKLQkJCQkJKHZvaWQgKikobG9uZyljaGFpbi0+aXApOworCQlyZXQgKz0gZnByaW50ZihmcCwgIiAgICAgICAgICAgICAgICAlc1xuIiwgY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKGNoYWluLAorCQkJCQliZiwgc2l6ZW9mKGJmKSwgZmFsc2UpKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYwppbmRleCA3ZGFiZGUxLi43OTk5OWNlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYwpAQCAtMTcsMTEgKzE3LDEzIEBACiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJhbm5vdGF0ZS5oIgogI2luY2x1ZGUgImV2c2VsLmgiCisjaW5jbHVkZSA8cmVnZXguaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKIGNvbnN0IGNoYXIgCSpkaXNhc3NlbWJsZXJfc3R5bGU7CiBjb25zdCBjaGFyCSpvYmpkdW1wX3BhdGg7CitzdGF0aWMgcmVnZXhfdAkgZmlsZV9saW5lbm87CiAKIHN0YXRpYyBzdHJ1Y3QgaW5zICppbnNfX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7CiBzdGF0aWMgaW50IGRpc2FzbV9saW5lX19wYXJzZShjaGFyICpsaW5lLCBjaGFyICoqbmFtZXAsIGNoYXIgKipyYXdwKTsKQEAgLTU3MCwxMyArNTcyLDE1IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgc3RydWN0IGRpc2FzbV9saW5lICpkaXNhc21fbGluZV9fbmV3KHM2NCBvZmZzZXQsIGNoYXIgKmxpbmUsIHNpemVfdCBwcml2c2l6ZSkKK3N0YXRpYyBzdHJ1Y3QgZGlzYXNtX2xpbmUgKmRpc2FzbV9saW5lX19uZXcoczY0IG9mZnNldCwgY2hhciAqbGluZSwKKwkJCQkJc2l6ZV90IHByaXZzaXplLCBpbnQgbGluZV9ucikKIHsKIAlzdHJ1Y3QgZGlzYXNtX2xpbmUgKmRsID0gemFsbG9jKHNpemVvZigqZGwpICsgcHJpdnNpemUpOwogCiAJaWYgKGRsICE9IE5VTEwpIHsKIAkJZGwtPm9mZnNldCA9IG9mZnNldDsKIAkJZGwtPmxpbmUgPSBzdHJkdXAobGluZSk7CisJCWRsLT5saW5lX25yID0gbGluZV9ucjsKIAkJaWYgKGRsLT5saW5lID09IE5VTEwpCiAJCQlnb3RvIG91dF9kZWxldGU7CiAKQEAgLTc4OCwxMyArNzkyLDE1IEBACiAgKiBUaGUgb3BzLnJhdyBwYXJ0IHdpbGwgYmUgcGFyc2VkIGZ1cnRoZXIgYWNjb3JkaW5nIHRvIHR5cGUgb2YgdGhlIGluc3RydWN0aW9uLgogICovCiBzdGF0aWMgaW50IHN5bWJvbF9fcGFyc2Vfb2JqZHVtcF9saW5lKHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IG1hcCAqbWFwLAotCQkJCSAgICAgIEZJTEUgKmZpbGUsIHNpemVfdCBwcml2c2l6ZSkKKwkJCQkgICAgICBGSUxFICpmaWxlLCBzaXplX3QgcHJpdnNpemUsCisJCQkJICAgICAgaW50ICpsaW5lX25yKQogewogCXN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyA9IHN5bWJvbF9fYW5ub3RhdGlvbihzeW0pOwogCXN0cnVjdCBkaXNhc21fbGluZSAqZGw7CiAJY2hhciAqbGluZSA9IE5VTEwsICpwYXJzZWRfbGluZSwgKnRtcCwgKnRtcDIsICpjOwogCXNpemVfdCBsaW5lX2xlbjsKIAlzNjQgbGluZV9pcCwgb2Zmc2V0ID0gLTE7CisJcmVnbWF0Y2hfdCBtYXRjaFsyXTsKIAogCWlmIChnZXRsaW5lKCZsaW5lLCAmbGluZV9sZW4sIGZpbGUpIDwgMCkKIAkJcmV0dXJuIC0xOwpAQCAtODEyLDYgKzgxOCwxMiBAQAogCWxpbmVfaXAgPSAtMTsKIAlwYXJzZWRfbGluZSA9IGxpbmU7CiAKKwkvKiAvZmlsZW5hbWU6bGluZW5yID8gU2F2ZSBsaW5lIG51bWJlciBhbmQgaWdub3JlLiAqLworCWlmIChyZWdleGVjKCZmaWxlX2xpbmVubywgbGluZSwgMiwgbWF0Y2gsIDApID09IDApIHsKKwkJKmxpbmVfbnIgPSBhdG9pKGxpbmUgKyBtYXRjaFsxXS5ybV9zbyk7CisJCXJldHVybiAwOworCX0KKwogCS8qCiAJICogU3RyaXAgbGVhZGluZyBzcGFjZXM6CiAJICovCkBAIC04NDIsOCArODU0LDkgQEAKIAkJCXBhcnNlZF9saW5lID0gdG1wMiArIDE7CiAJfQogCi0JZGwgPSBkaXNhc21fbGluZV9fbmV3KG9mZnNldCwgcGFyc2VkX2xpbmUsIHByaXZzaXplKTsKKwlkbCA9IGRpc2FzbV9saW5lX19uZXcob2Zmc2V0LCBwYXJzZWRfbGluZSwgcHJpdnNpemUsICpsaW5lX25yKTsKIAlmcmVlKGxpbmUpOworCSgqbGluZV9ucikrKzsKIAogCWlmIChkbCA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CkBAIC04NjksNiArODgyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIHZvaWQgc3ltYm9sX19pbml0X3JlZ2V4cHIodm9pZCkKK3sKKwlyZWdjb21wKCZmaWxlX2xpbmVubywgIl4vW146XSs6KFswLTldKykiLCBSRUdfRVhURU5ERUQpOworfQorCiBzdGF0aWMgdm9pZCBkZWxldGVfbGFzdF9ub3Aoc3RydWN0IHN5bWJvbCAqc3ltKQogewogCXN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyA9IHN5bWJvbF9fYW5ub3RhdGlvbihzeW0pOwpAQCAtOTA0LDYgKzkyMiw3IEBACiAJY2hhciBzeW1mc19maWxlbmFtZVtQQVRIX01BWF07CiAJc3RydWN0IGtjb3JlX2V4dHJhY3Qga2NlOwogCWJvb2wgZGVsZXRlX2V4dHJhY3QgPSBmYWxzZTsKKwlpbnQgbGluZW5vID0gMDsKIAogCWlmIChmaWxlbmFtZSkKIAkJc3ltYm9sX19qb2luX3N5bWZzKHN5bWZzX2ZpbGVuYW1lLCBmaWxlbmFtZSk7CkBAIC05MTUsNiArOTM0LDggQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWdvdG8gZmFsbGJhY2s7CisJfSBlbHNlIGlmIChkc29fX2lzX2tjb3JlKGRzbykpIHsKKwkJZ290byBmYWxsYmFjazsKIAl9IGVsc2UgaWYgKHJlYWRsaW5rKHN5bWZzX2ZpbGVuYW1lLCBjb21tYW5kLCBzaXplb2YoY29tbWFuZCkpIDwgMCB8fAogCQkgICBzdHJzdHIoY29tbWFuZCwgIltrZXJuZWwua2FsbHN5bXNdIikgfHwKIAkJICAgYWNjZXNzKHN5bWZzX2ZpbGVuYW1lLCBSX09LKSkgewpAQCAtOTgyLDcgKzEwMDMsNyBAQAogCXNucHJpbnRmKGNvbW1hbmQsIHNpemVvZihjb21tYW5kKSwKIAkJICIlcyAlcyVzIC0tc3RhcnQtYWRkcmVzcz0weCUwMTYiIFBSSXg2NAogCQkgIiAtLXN0b3AtYWRkcmVzcz0weCUwMTYiIFBSSXg2NAotCQkgIiAtZCAlcyAlcyAtQyAlcyAyPi9kZXYvbnVsbHxncmVwIC12ICVzfGV4cGFuZCIsCisJCSAiIC1sIC1kICVzICVzIC1DICVzIDI+L2Rldi9udWxsfGdyZXAgLXYgJXN8ZXhwYW5kIiwKIAkJIG9iamR1bXBfcGF0aCA/IG9iamR1bXBfcGF0aCA6ICJvYmpkdW1wIiwKIAkJIGRpc2Fzc2VtYmxlcl9zdHlsZSA/ICItTSAiIDogIiIsCiAJCSBkaXNhc3NlbWJsZXJfc3R5bGUgPyBkaXNhc3NlbWJsZXJfc3R5bGUgOiAiIiwKQEAgLTk5OSw3ICsxMDIwLDggQEAKIAkJZ290byBvdXRfZnJlZV9maWxlbmFtZTsKIAogCXdoaWxlICghZmVvZihmaWxlKSkKLQkJaWYgKHN5bWJvbF9fcGFyc2Vfb2JqZHVtcF9saW5lKHN5bSwgbWFwLCBmaWxlLCBwcml2c2l6ZSkgPCAwKQorCQlpZiAoc3ltYm9sX19wYXJzZV9vYmpkdW1wX2xpbmUoc3ltLCBtYXAsIGZpbGUsIHByaXZzaXplLAorCQkJICAgICZsaW5lbm8pIDwgMCkKIAkJCWJyZWFrOwogCiAJLyoKQEAgLTExNzAsNyArMTE5Miw3IEBACiAJCQlnb3RvIG5leHQ7CiAKIAkJb2Zmc2V0ID0gc3RhcnQgKyBpOwotCQlzcmNfbGluZS0+cGF0aCA9IGdldF9zcmNsaW5lKG1hcC0+ZHNvLCBvZmZzZXQpOworCQlzcmNfbGluZS0+cGF0aCA9IGdldF9zcmNsaW5lKG1hcC0+ZHNvLCBvZmZzZXQsIE5VTEwsIGZhbHNlKTsKIAkJaW5zZXJ0X3NvdXJjZV9saW5lKCZ0bXBfcm9vdCwgc3JjX2xpbmUpOwogCiAJbmV4dDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmgKaW5kZXggMTEyZDZlMi4uMDc4NGE5NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmgKQEAgLTU4LDYgKzU4LDcgQEAKIAljaGFyCQkgICAgKmxpbmU7CiAJY2hhcgkJICAgICpuYW1lOwogCXN0cnVjdCBpbnMJICAgICppbnM7CisJaW50CQkgICAgbGluZV9ucjsKIAlzdHJ1Y3QgaW5zX29wZXJhbmRzIG9wczsKIH07CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMKaW5kZXggYTkwNGE0Yy4uZThkNzllNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMKQEAgLTE1LDYgKzE1LDExIEBACiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJzZXNzaW9uLmgiCiAjaW5jbHVkZSAidG9vbC5oIgorI2luY2x1ZGUgImhlYWRlci5oIgorI2luY2x1ZGUgInZkc28uaCIKKworCitzdGF0aWMgYm9vbCBub19idWlsZGlkX2NhY2hlOwogCiBpbnQgYnVpbGRfaWRfX21hcmtfZHNvX2hpdChzdHJ1Y3QgcGVyZl90b29sICp0b29sIF9fbWF5YmVfdW51c2VkLAogCQkJICAgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCkBAIC0zMyw4ICszOCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAotCQkJICAgICAgc2FtcGxlLT5pcCwgJmFsKTsKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLCBzYW1wbGUtPmlwLCAmYWwpOwogCiAJaWYgKGFsLm1hcCAhPSBOVUxMKQogCQlhbC5tYXAtPmRzby0+aGl0ID0gMTsKQEAgLTEwNiwzICsxMTAsMzQzIEBACiAJCQkgYnVpbGRfaWRfaGV4LCBidWlsZF9pZF9oZXggKyAyKTsKIAlyZXR1cm4gYmY7CiB9CisKKyNkZWZpbmUgZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkJXAorCQlpZiAoIXBvcy0+aGFzX2J1aWxkX2lkKQkJXAorCQkJY29udGludWU7CQlcCisJCWVsc2UKKworc3RhdGljIGludCB3cml0ZV9idWlsZGlkKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgdTggKmJ1aWxkX2lkLAorCQkJIHBpZF90IHBpZCwgdTE2IG1pc2MsIGludCBmZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBidWlsZF9pZF9ldmVudCBiOworCXNpemVfdCBsZW47CisKKwlsZW4gPSBuYW1lX2xlbiArIDE7CisJbGVuID0gUEVSRl9BTElHTihsZW4sIE5BTUVfQUxJR04pOworCisJbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOworCW1lbWNweSgmYi5idWlsZF9pZCwgYnVpbGRfaWQsIEJVSUxEX0lEX1NJWkUpOworCWIucGlkID0gcGlkOworCWIuaGVhZGVyLm1pc2MgPSBtaXNjOworCWIuaGVhZGVyLnNpemUgPSBzaXplb2YoYikgKyBsZW47CisKKwllcnIgPSB3cml0ZW4oZmQsICZiLCBzaXplb2YoYikpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHdyaXRlX3BhZGRlZChmZCwgbmFtZSwgbmFtZV9sZW4gKyAxLCBsZW4pOworfQorCitzdGF0aWMgaW50IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCSAgICAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKKwkJCQkgICAgICAgcGlkX3QgcGlkLCB1MTYgbWlzYywgaW50IGZkKQoreworCWNoYXIgbm1bUEFUSF9NQVhdOworCXN0cnVjdCBkc28gKnBvczsKKworCWRzb3NfX2Zvcl9lYWNoX3dpdGhfYnVpbGRfaWQocG9zLCBoZWFkKSB7CisJCWludCBlcnI7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXNpemVfdCBuYW1lX2xlbjsKKworCQlpZiAoIXBvcy0+aGl0KQorCQkJY29udGludWU7CisKKwkJaWYgKGRzb19faXNfdmRzbyhwb3MpKSB7CisJCQluYW1lID0gcG9zLT5zaG9ydF9uYW1lOworCQkJbmFtZV9sZW4gPSBwb3MtPnNob3J0X25hbWVfbGVuICsgMTsKKwkJfSBlbHNlIGlmIChkc29fX2lzX2tjb3JlKHBvcykpIHsKKwkJCW1hY2hpbmVfX21tYXBfbmFtZShtYWNoaW5lLCBubSwgc2l6ZW9mKG5tKSk7CisJCQluYW1lID0gbm07CisJCQluYW1lX2xlbiA9IHN0cmxlbihubSkgKyAxOworCQl9IGVsc2UgeworCQkJbmFtZSA9IHBvcy0+bG9uZ19uYW1lOworCQkJbmFtZV9sZW4gPSBwb3MtPmxvbmdfbmFtZV9sZW4gKyAxOworCQl9CisKKwkJZXJyID0gd3JpdGVfYnVpbGRpZChuYW1lLCBuYW1lX2xlbiwgcG9zLT5idWlsZF9pZCwKKwkJCQkgICAgcGlkLCBtaXNjLCBmZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY2hpbmVfX3dyaXRlX2J1aWxkaWRfdGFibGUoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGludCBmZCkKK3sKKwlpbnQgZXJyOworCXUxNiBrbWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMLAorCSAgICB1bWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfVVNFUjsKKworCWlmICghbWFjaGluZV9faXNfaG9zdChtYWNoaW5lKSkgeworCQlrbWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfS0VSTkVMOworCQl1bWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfVVNFUjsKKwl9CisKKwllcnIgPSBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIG1hY2hpbmUsCisJCQkJCSAgbWFjaGluZS0+cGlkLCBrbWlzYywgZmQpOworCWlmIChlcnIgPT0gMCkKKwkJZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZtYWNoaW5lLT51c2VyX2Rzb3MuaGVhZCwKKwkJCQkJCSAgbWFjaGluZSwgbWFjaGluZS0+cGlkLCB1bWlzYywKKwkJCQkJCSAgZmQpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBwZXJmX3Nlc3Npb25fX3dyaXRlX2J1aWxkaWRfdGFibGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50IGZkKQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKwlpbnQgZXJyID0gbWFjaGluZV9fd3JpdGVfYnVpbGRpZF90YWJsZSgmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgZmQpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7CisJCWVyciA9IG1hY2hpbmVfX3dyaXRlX2J1aWxkaWRfdGFibGUocG9zLCBmZCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2Rzb3NfX2hpdF9hbGwoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgZHNvICpwb3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkKKwkJcG9zLT5oaXQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjaGluZV9faGl0X2FsbF9kc29zKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCWludCBlcnI7CisKKwllcnIgPSBfX2Rzb3NfX2hpdF9hbGwoJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gX19kc29zX19oaXRfYWxsKCZtYWNoaW5lLT51c2VyX2Rzb3MuaGVhZCk7Cit9CisKK2ludCBkc29zX19oaXRfYWxsKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IHJiX25vZGUgKm5kOworCWludCBlcnI7CisKKwllcnIgPSBtYWNoaW5lX19oaXRfYWxsX2Rzb3MoJnNlc3Npb24tPm1hY2hpbmVzLmhvc3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmb3IgKG5kID0gcmJfZmlyc3QoJnNlc3Npb24tPm1hY2hpbmVzLmd1ZXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJCXN0cnVjdCBtYWNoaW5lICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hY2hpbmUsIHJiX25vZGUpOworCisJCWVyciA9IG1hY2hpbmVfX2hpdF9hbGxfZHNvcyhwb3MpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkaXNhYmxlX2J1aWxkaWRfY2FjaGUodm9pZCkKK3sKKwlub19idWlsZGlkX2NhY2hlID0gdHJ1ZTsKK30KKworaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyLAorCQkJICBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX2thbGxzeW1zLCBib29sIGlzX3Zkc28pCit7CisJY29uc3Qgc2l6ZV90IHNpemUgPSBQQVRIX01BWDsKKwljaGFyICpyZWFsbmFtZSwgKmZpbGVuYW1lID0gemFsbG9jKHNpemUpLAorCSAgICAgKmxpbmtuYW1lID0gemFsbG9jKHNpemUpLCAqdGFyZ2V0bmFtZTsKKwlpbnQgbGVuLCBlcnIgPSAtMTsKKwlib29sIHNsYXNoID0gaXNfa2FsbHN5bXMgfHwgaXNfdmRzbzsKKworCWlmIChpc19rYWxsc3ltcykgeworCQlpZiAoc3ltYm9sX2NvbmYua3B0cl9yZXN0cmljdCkgeworCQkJcHJfZGVidWcoIk5vdCBjYWNoaW5nIGEga3B0cl9yZXN0cmljdCdlZCAvcHJvYy9rYWxsc3ltc1xuIik7CisJCQllcnIgPSAwOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCQlyZWFsbmFtZSA9IChjaGFyICopIG5hbWU7CisJfSBlbHNlCisJCXJlYWxuYW1lID0gcmVhbHBhdGgobmFtZSwgTlVMTCk7CisKKwlpZiAocmVhbG5hbWUgPT0gTlVMTCB8fCBmaWxlbmFtZSA9PSBOVUxMIHx8IGxpbmtuYW1lID09IE5VTEwpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlsZW4gPSBzY25wcmludGYoZmlsZW5hbWUsIHNpemUsICIlcyVzJXMiLAorCQkgICAgICAgZGVidWdkaXIsIHNsYXNoID8gIi8iIDogIiIsCisJCSAgICAgICBpc192ZHNvID8gRFNPX19OQU1FX1ZEU08gOiByZWFsbmFtZSk7CisJaWYgKG1rZGlyX3AoZmlsZW5hbWUsIDA3NTUpKQorCQlnb3RvIG91dF9mcmVlOworCisJc25wcmludGYoZmlsZW5hbWUgKyBsZW4sIHNpemUgLSBsZW4sICIvJXMiLCBzYnVpbGRfaWQpOworCisJaWYgKGFjY2VzcyhmaWxlbmFtZSwgRl9PSykpIHsKKwkJaWYgKGlzX2thbGxzeW1zKSB7CisJCQkgaWYgKGNvcHlmaWxlKCIvcHJvYy9rYWxsc3ltcyIsIGZpbGVuYW1lKSkKKwkJCQlnb3RvIG91dF9mcmVlOworCQl9IGVsc2UgaWYgKGxpbmsocmVhbG5hbWUsIGZpbGVuYW1lKSAmJiBjb3B5ZmlsZShuYW1lLCBmaWxlbmFtZSkpCisJCQlnb3RvIG91dF9mcmVlOworCX0KKworCWxlbiA9IHNjbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzIiwKKwkJICAgICAgIGRlYnVnZGlyLCBzYnVpbGRfaWQpOworCisJaWYgKGFjY2VzcyhsaW5rbmFtZSwgWF9PSykgJiYgbWtkaXJfcChsaW5rbmFtZSwgMDc1NSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlzbnByaW50ZihsaW5rbmFtZSArIGxlbiwgc2l6ZSAtIGxlbiwgIi8lcyIsIHNidWlsZF9pZCArIDIpOworCXRhcmdldG5hbWUgPSBmaWxlbmFtZSArIHN0cmxlbihkZWJ1Z2RpcikgLSA1OworCW1lbWNweSh0YXJnZXRuYW1lLCAiLi4vLi4iLCA1KTsKKworCWlmIChzeW1saW5rKHRhcmdldG5hbWUsIGxpbmtuYW1lKSA9PSAwKQorCQllcnIgPSAwOworb3V0X2ZyZWU6CisJaWYgKCFpc19rYWxsc3ltcykKKwkJZnJlZShyZWFsbmFtZSk7CisJZnJlZShmaWxlbmFtZSk7CisJZnJlZShsaW5rbmFtZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBidWlsZF9pZF9jYWNoZV9fYWRkX2IoY29uc3QgdTggKmJ1aWxkX2lkLCBzaXplX3QgYnVpbGRfaWRfc2l6ZSwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkJIGJvb2wgaXNfa2FsbHN5bXMsIGJvb2wgaXNfdmRzbykKK3sKKwljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIGJ1aWxkX2lkX3NpemUsIHNidWlsZF9pZCk7CisKKwlyZXR1cm4gYnVpbGRfaWRfY2FjaGVfX2FkZF9zKHNidWlsZF9pZCwgZGVidWdkaXIsIG5hbWUsCisJCQkJICAgICBpc19rYWxsc3ltcywgaXNfdmRzbyk7Cit9CisKK2ludCBidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKK3sKKwljb25zdCBzaXplX3Qgc2l6ZSA9IFBBVEhfTUFYOworCWNoYXIgKmZpbGVuYW1lID0gemFsbG9jKHNpemUpLAorCSAgICAgKmxpbmtuYW1lID0gemFsbG9jKHNpemUpOworCWludCBlcnIgPSAtMTsKKworCWlmIChmaWxlbmFtZSA9PSBOVUxMIHx8IGxpbmtuYW1lID09IE5VTEwpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlzbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzLyVzIiwKKwkJIGRlYnVnZGlyLCBzYnVpbGRfaWQsIHNidWlsZF9pZCArIDIpOworCisJaWYgKGFjY2VzcyhsaW5rbmFtZSwgRl9PSykpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAocmVhZGxpbmsobGlua25hbWUsIGZpbGVuYW1lLCBzaXplIC0gMSkgPCAwKQorCQlnb3RvIG91dF9mcmVlOworCisJaWYgKHVubGluayhsaW5rbmFtZSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBsaW5rIGlzIHJlbGF0aXZlLCB3ZSBtdXN0IG1ha2UgaXQgYWJzb2x1dGU6CisJICovCisJc25wcmludGYobGlua25hbWUsIHNpemUsICIlcy8uYnVpbGQtaWQvJS4ycy8lcyIsCisJCSBkZWJ1Z2Rpciwgc2J1aWxkX2lkLCBmaWxlbmFtZSk7CisKKwlpZiAodW5saW5rKGxpbmtuYW1lKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWVyciA9IDA7CitvdXRfZnJlZToKKwlmcmVlKGZpbGVuYW1lKTsKKwlmcmVlKGxpbmtuYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRzb19fY2FjaGVfYnVpbGRfaWQoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpkZWJ1Z2RpcikKK3sKKwlib29sIGlzX2thbGxzeW1zID0gZHNvLT5rZXJuZWwgJiYgZHNvLT5sb25nX25hbWVbMF0gIT0gJy8nOworCWJvb2wgaXNfdmRzbyA9IGRzb19faXNfdmRzbyhkc28pOworCWNvbnN0IGNoYXIgKm5hbWUgPSBkc28tPmxvbmdfbmFtZTsKKwljaGFyIG5tW1BBVEhfTUFYXTsKKworCWlmIChkc29fX2lzX2tjb3JlKGRzbykpIHsKKwkJaXNfa2FsbHN5bXMgPSB0cnVlOworCQltYWNoaW5lX19tbWFwX25hbWUobWFjaGluZSwgbm0sIHNpemVvZihubSkpOworCQluYW1lID0gbm07CisJfQorCXJldHVybiBidWlsZF9pZF9jYWNoZV9fYWRkX2IoZHNvLT5idWlsZF9pZCwgc2l6ZW9mKGRzby0+YnVpbGRfaWQpLCBuYW1lLAorCQkJCSAgICAgZGVidWdkaXIsIGlzX2thbGxzeW1zLCBpc192ZHNvKTsKK30KKworc3RhdGljIGludCBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCSAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKK3sKKwlzdHJ1Y3QgZHNvICpwb3M7CisJaW50IGVyciA9IDA7CisKKwlkc29zX19mb3JfZWFjaF93aXRoX2J1aWxkX2lkKHBvcywgaGVhZCkKKwkJaWYgKGRzb19fY2FjaGVfYnVpbGRfaWQocG9zLCBtYWNoaW5lLCBkZWJ1Z2RpcikpCisJCQllcnIgPSAtMTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWFjaGluZV9fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKK3sKKwlpbnQgcmV0ID0gX19kc29zX19jYWNoZV9idWlsZF9pZHMoJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIG1hY2hpbmUsCisJCQkJCSAgZGVidWdkaXIpOworCXJldCB8PSBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcygmbWFjaGluZS0+dXNlcl9kc29zLmhlYWQsIG1hY2hpbmUsCisJCQkJICAgICAgIGRlYnVnZGlyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcGVyZl9zZXNzaW9uX19jYWNoZV9idWlsZF9pZHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisJaW50IHJldDsKKwljaGFyIGRlYnVnZGlyW1BBVEhfTUFYXTsKKworCWlmIChub19idWlsZGlkX2NhY2hlKQorCQlyZXR1cm4gMDsKKworCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMiLCBidWlsZGlkX2Rpcik7CisKKwlpZiAobWtkaXIoZGVidWdkaXIsIDA3NTUpICE9IDAgJiYgZXJybm8gIT0gRUVYSVNUKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSBtYWNoaW5lX19jYWNoZV9idWlsZF9pZHMoJnNlc3Npb24tPm1hY2hpbmVzLmhvc3QsIGRlYnVnZGlyKTsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7CisJCXJldCB8PSBtYWNoaW5lX19jYWNoZV9idWlsZF9pZHMocG9zLCBkZWJ1Z2Rpcik7CisJfQorCXJldHVybiByZXQgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBib29sIG1hY2hpbmVfX3JlYWRfYnVpbGRfaWRzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBib29sIHdpdGhfaGl0cykKK3sKKwlib29sIHJldDsKKworCXJldCAgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZtYWNoaW5lLT5rZXJuZWxfZHNvcy5oZWFkLCB3aXRoX2hpdHMpOworCXJldCB8PSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZtYWNoaW5lLT51c2VyX2Rzb3MuaGVhZCwgd2l0aF9oaXRzKTsKKwlyZXR1cm4gcmV0OworfQorCitib29sIHBlcmZfc2Vzc2lvbl9fcmVhZF9idWlsZF9pZHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgYm9vbCB3aXRoX2hpdHMpCit7CisJc3RydWN0IHJiX25vZGUgKm5kOworCWJvb2wgcmV0ID0gbWFjaGluZV9fcmVhZF9idWlsZF9pZHMoJnNlc3Npb24tPm1hY2hpbmVzLmhvc3QsIHdpdGhfaGl0cyk7CisKKwlmb3IgKG5kID0gcmJfZmlyc3QoJnNlc3Npb24tPm1hY2hpbmVzLmd1ZXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJCXN0cnVjdCBtYWNoaW5lICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hY2hpbmUsIHJiX25vZGUpOworCQlyZXQgfD0gbWFjaGluZV9fcmVhZF9idWlsZF9pZHMocG9zLCB3aXRoX2hpdHMpOworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oCmluZGV4IGFlMzkyNTYuLjgyMzYzMTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oCkBAIC0xNSw0ICsxNSwxNiBAQAogaW50IGJ1aWxkX2lkX19tYXJrX2Rzb19oaXQoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCwgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAogCQkJICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOworCitpbnQgZHNvc19faGl0X2FsbChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKKworYm9vbCBwZXJmX3Nlc3Npb25fX3JlYWRfYnVpbGRfaWRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIGJvb2wgd2l0aF9oaXRzKTsKK2ludCBwZXJmX3Nlc3Npb25fX3dyaXRlX2J1aWxkaWRfdGFibGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50IGZkKTsKK2ludCBwZXJmX3Nlc3Npb25fX2NhY2hlX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKKworaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyLAorCQkJICBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX2thbGxzeW1zLCBib29sIGlzX3Zkc28pOworaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKTsKK3ZvaWQgZGlzYWJsZV9idWlsZGlkX2NhY2hlKHZvaWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYwppbmRleCBjODRkM2Y4Li5jZjUyNGEzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCkBAIC0xNDksNiArMTQ5LDEwIEBACiAJCWNhbGxjaGFpbl9wYXJhbS5rZXkgPSBDQ0tFWV9BRERSRVNTOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKCFzdHJuY21wKHZhbHVlLCAiYnJhbmNoIiwgc3RybGVuKHZhbHVlKSkpIHsKKwkJY2FsbGNoYWluX3BhcmFtLmJyYW5jaF9jYWxsc3RhY2sgPSAxOworCQlyZXR1cm4gMDsKKwl9CiAJcmV0dXJuIC0xOwogfQogCkBAIC03NTQsOCArNzU4LDggQEAKIAogCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluIHx8IHN5bWJvbF9jb25mLmN1bXVsYXRlX2NhbGxjaGFpbiB8fAogCSAgICBzb3J0X19oYXNfcGFyZW50KSB7Ci0JCXJldHVybiBtYWNoaW5lX19yZXNvbHZlX2NhbGxjaGFpbihhbC0+bWFjaGluZSwgZXZzZWwsIGFsLT50aHJlYWQsCi0JCQkJCQkgIHNhbXBsZSwgcGFyZW50LCBhbCwgbWF4X3N0YWNrKTsKKwkJcmV0dXJuIHRocmVhZF9fcmVzb2x2ZV9jYWxsY2hhaW4oYWwtPnRocmVhZCwgZXZzZWwsIHNhbXBsZSwKKwkJCQkJCSBwYXJlbnQsIGFsLCBtYXhfc3RhY2spOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTgwOCwzICs4MTIsMzIgQEAKIG91dDoKIAlyZXR1cm4gMTsKIH0KKworY2hhciAqY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKHN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2wsCisJCQkgICAgICAgY2hhciAqYmYsIHNpemVfdCBiZnNpemUsIGJvb2wgc2hvd19kc28pCit7CisJaW50IHByaW50ZWQ7CisKKwlpZiAoY2wtPm1zLnN5bSkgeworCQlpZiAoY2FsbGNoYWluX3BhcmFtLmtleSA9PSBDQ0tFWV9BRERSRVNTICYmCisJCSAgICBjbC0+bXMubWFwICYmICFjbC0+c3JjbGluZSkKKwkJCWNsLT5zcmNsaW5lID0gZ2V0X3NyY2xpbmUoY2wtPm1zLm1hcC0+ZHNvLAorCQkJCQkJICBtYXBfX3JpcF8yb2JqZHVtcChjbC0+bXMubWFwLAorCQkJCQkJCQkgICAgY2wtPmlwKSwKKwkJCQkJCSAgY2wtPm1zLnN5bSwgZmFsc2UpOworCQlpZiAoY2wtPnNyY2xpbmUpCisJCQlwcmludGVkID0gc2NucHJpbnRmKGJmLCBiZnNpemUsICIlcyAlcyIsCisJCQkJCWNsLT5tcy5zeW0tPm5hbWUsIGNsLT5zcmNsaW5lKTsKKwkJZWxzZQorCQkJcHJpbnRlZCA9IHNjbnByaW50ZihiZiwgYmZzaXplLCAiJXMiLCBjbC0+bXMuc3ltLT5uYW1lKTsKKwl9IGVsc2UKKwkJcHJpbnRlZCA9IHNjbnByaW50ZihiZiwgYmZzaXplLCAiJSMiIFBSSXg2NCwgY2wtPmlwKTsKKworCWlmIChzaG93X2RzbykKKwkJc2NucHJpbnRmKGJmICsgcHJpbnRlZCwgYmZzaXplIC0gcHJpbnRlZCwgIiAlcyIsCisJCQkgIGNsLT5tcy5tYXAgPworCQkJICBjbC0+bXMubWFwLT5kc28tPnNob3J0X25hbWUgOgorCQkJICAidW5rbm93biIpOworCisJcmV0dXJuIGJmOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCmluZGV4IDk0Y2ZlZmQuLmRiYzA4Y2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaAorKysgYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKQEAgLTYzLDYgKzYzLDcgQEAKIAlzb3J0X2NoYWluX2Z1bmNfdAlzb3J0OwogCWVudW0gY2hhaW5fb3JkZXIJb3JkZXI7CiAJZW51bSBjaGFpbl9rZXkJCWtleTsKKwlib29sCQkJYnJhbmNoX2NhbGxzdGFjazsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgY2FsbGNoYWluX3BhcmFtIGNhbGxjaGFpbl9wYXJhbTsKQEAgLTcwLDYgKzcxLDcgQEAKIHN0cnVjdCBjYWxsY2hhaW5fbGlzdCB7CiAJdTY0CQkJaXA7CiAJc3RydWN0IG1hcF9zeW1ib2wJbXM7CisJY2hhcgkJICAgICAgICpzcmNsaW5lOwogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIH07CiAKQEAgLTE4NCwxNSArMTg2LDE2IEBACiB9CiAKICNpZmRlZiBIQVZFX1NLSVBfQ0FMTENIQUlOX0lEWAotZXh0ZXJuIGludCBhcmNoX3NraXBfY2FsbGNoYWluX2lkeChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKLQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4pOworZXh0ZXJuIGludCBhcmNoX3NraXBfY2FsbGNoYWluX2lkeChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBhcmNoX3NraXBfY2FsbGNoYWluX2lkeChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSBfX21heWJlX3VudXNlZCwKLQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX21heWJlX3VudXNlZCwKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX21heWJlX3VudXNlZCwKIAkJCXN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluIF9fbWF5YmVfdW51c2VkKQogewogCXJldHVybiAtMTsKIH0KICNlbmRpZgogCitjaGFyICpjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjbCwKKwkJCSAgICAgICBjaGFyICpiZiwgc2l6ZV90IGJmc2l6ZSwgYm9vbCBzaG93X2Rzbyk7CisKICNlbmRpZgkvKiBfX1BFUkZfQ0FMTENIQUlOX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jb21tLmggYi90b29scy9wZXJmL3V0aWwvY29tbS5oCmluZGV4IDUxYzEwYWIuLjcxYzljMzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jb21tLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NvbW0uaApAQCAtMTIsNiArMTIsMTAgQEAKIAl1NjQgc3RhcnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWJvb2wgZXhlYzsKKwl1bmlvbiB7IC8qIFRvb2wgc3BlY2lmaWMgYXJlYSAqLworCQl2b2lkCSpwcml2OworCQl1NjQJZGJfaWQ7CisJfTsKIH07CiAKIHZvaWQgY29tbV9fZnJlZShzdHJ1Y3QgY29tbSAqY29tbSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGItZXhwb3J0LmMgYi90b29scy9wZXJmL3V0aWwvZGItZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxZGFlMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kYi1leHBvcnQuYwpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIGRiLWV4cG9ydC5jOiBTdXBwb3J0IGZvciBleHBvcnRpbmcgZGF0YSBzdWl0YWJsZSBmb3IgaW1wb3J0IHRvIGEgZGF0YWJhc2UKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImV2c2VsLmgiCisjaW5jbHVkZSAibWFjaGluZS5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgImNvbW0uaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlICJldmVudC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJ0aHJlYWQtc3RhY2suaCIKKyNpbmNsdWRlICJkYi1leHBvcnQuaCIKKworc3RydWN0IGRlZmVycmVkX2V4cG9ydCB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBjb21tICpjb21tOworfTsKKworc3RhdGljIGludCBkYl9leHBvcnRfX2RlZmVycmVkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSkKK3sKKwlzdHJ1Y3QgZGVmZXJyZWRfZXhwb3J0ICpkZTsKKwlpbnQgZXJyOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkYmUtPmRlZmVycmVkKSkgeworCQlkZSA9IGxpc3RfZW50cnkoZGJlLT5kZWZlcnJlZC5uZXh0LCBzdHJ1Y3QgZGVmZXJyZWRfZXhwb3J0LAorCQkJCW5vZGUpOworCQllcnIgPSBkYmUtPmV4cG9ydF9jb21tKGRiZSwgZGUtPmNvbW0pOworCQlsaXN0X2RlbCgmZGUtPm5vZGUpOworCQlmcmVlKGRlKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRiX2V4cG9ydF9fZnJlZV9kZWZlcnJlZChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUpCit7CisJc3RydWN0IGRlZmVycmVkX2V4cG9ydCAqZGU7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRiZS0+ZGVmZXJyZWQpKSB7CisJCWRlID0gbGlzdF9lbnRyeShkYmUtPmRlZmVycmVkLm5leHQsIHN0cnVjdCBkZWZlcnJlZF9leHBvcnQsCisJCQkJbm9kZSk7CisJCWxpc3RfZGVsKCZkZS0+bm9kZSk7CisJCWZyZWUoZGUpOworCX0KK30KKworc3RhdGljIGludCBkYl9leHBvcnRfX2RlZmVyX2NvbW0oc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY29tbSAqY29tbSkKK3sKKwlzdHJ1Y3QgZGVmZXJyZWRfZXhwb3J0ICpkZTsKKworCWRlID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgZGVmZXJyZWRfZXhwb3J0KSk7CisJaWYgKCFkZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZS0+Y29tbSA9IGNvbW07CisJbGlzdF9hZGRfdGFpbCgmZGUtPm5vZGUsICZkYmUtPmRlZmVycmVkKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGJfZXhwb3J0X19pbml0KHN0cnVjdCBkYl9leHBvcnQgKmRiZSkKK3sKKwltZW1zZXQoZGJlLCAwLCBzaXplb2Yoc3RydWN0IGRiX2V4cG9ydCkpOworCUlOSVRfTElTVF9IRUFEKCZkYmUtPmRlZmVycmVkKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fZmx1c2goc3RydWN0IGRiX2V4cG9ydCAqZGJlKQoreworCXJldHVybiBkYl9leHBvcnRfX2RlZmVycmVkKGRiZSk7Cit9CisKK3ZvaWQgZGJfZXhwb3J0X19leGl0KHN0cnVjdCBkYl9leHBvcnQgKmRiZSkKK3sKKwlkYl9leHBvcnRfX2ZyZWVfZGVmZXJyZWQoZGJlKTsKKwljYWxsX3JldHVybl9wcm9jZXNzb3JfX2ZyZWUoZGJlLT5jcnApOworCWRiZS0+Y3JwID0gTlVMTDsKK30KKworaW50IGRiX2V4cG9ydF9fZXZzZWwoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCit7CisJaWYgKGV2c2VsLT5kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwlldnNlbC0+ZGJfaWQgPSArK2RiZS0+ZXZzZWxfbGFzdF9kYl9pZDsKKworCWlmIChkYmUtPmV4cG9ydF9ldnNlbCkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2V2c2VsKGRiZSwgZXZzZWwpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYl9leHBvcnRfX21hY2hpbmUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlpZiAobWFjaGluZS0+ZGJfaWQpCisJCXJldHVybiAwOworCisJbWFjaGluZS0+ZGJfaWQgPSArK2RiZS0+bWFjaGluZV9sYXN0X2RiX2lkOworCisJaWYgKGRiZS0+ZXhwb3J0X21hY2hpbmUpCisJCXJldHVybiBkYmUtPmV4cG9ydF9tYWNoaW5lKGRiZSwgbWFjaGluZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fdGhyZWFkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkgICAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IGNvbW0gKmNvbW0pCit7CisJdTY0IG1haW5fdGhyZWFkX2RiX2lkID0gMDsKKwlpbnQgZXJyOworCisJaWYgKHRocmVhZC0+ZGJfaWQpCisJCXJldHVybiAwOworCisJdGhyZWFkLT5kYl9pZCA9ICsrZGJlLT50aHJlYWRfbGFzdF9kYl9pZDsKKworCWlmICh0aHJlYWQtPnBpZF8gIT0gLTEpIHsKKwkJc3RydWN0IHRocmVhZCAqbWFpbl90aHJlYWQ7CisKKwkJaWYgKHRocmVhZC0+cGlkXyA9PSB0aHJlYWQtPnRpZCkgeworCQkJbWFpbl90aHJlYWQgPSB0aHJlYWQ7CisJCX0gZWxzZSB7CisJCQltYWluX3RocmVhZCA9IG1hY2hpbmVfX2ZpbmRuZXdfdGhyZWFkKG1hY2hpbmUsCisJCQkJCQkJICAgICAgdGhyZWFkLT5waWRfLAorCQkJCQkJCSAgICAgIHRocmVhZC0+cGlkXyk7CisJCQlpZiAoIW1haW5fdGhyZWFkKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJZXJyID0gZGJfZXhwb3J0X190aHJlYWQoZGJlLCBtYWluX3RocmVhZCwgbWFjaGluZSwKKwkJCQkJCWNvbW0pOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJaWYgKGNvbW0pIHsKKwkJCQllcnIgPSBkYl9leHBvcnRfX2NvbW1fdGhyZWFkKGRiZSwgY29tbSwgdGhyZWFkKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJCW1haW5fdGhyZWFkX2RiX2lkID0gbWFpbl90aHJlYWQtPmRiX2lkOworCX0KKworCWlmIChkYmUtPmV4cG9ydF90aHJlYWQpCisJCXJldHVybiBkYmUtPmV4cG9ydF90aHJlYWQoZGJlLCB0aHJlYWQsIG1haW5fdGhyZWFkX2RiX2lkLAorCQkJCQkgIG1hY2hpbmUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYl9leHBvcnRfX2NvbW0oc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY29tbSAqY29tbSwKKwkJICAgIHN0cnVjdCB0aHJlYWQgKm1haW5fdGhyZWFkKQoreworCWludCBlcnI7CisKKwlpZiAoY29tbS0+ZGJfaWQpCisJCXJldHVybiAwOworCisJY29tbS0+ZGJfaWQgPSArK2RiZS0+Y29tbV9sYXN0X2RiX2lkOworCisJaWYgKGRiZS0+ZXhwb3J0X2NvbW0pIHsKKwkJaWYgKG1haW5fdGhyZWFkLT5jb21tX3NldCkKKwkJCWVyciA9IGRiZS0+ZXhwb3J0X2NvbW0oZGJlLCBjb21tKTsKKwkJZWxzZQorCQkJZXJyID0gZGJfZXhwb3J0X19kZWZlcl9jb21tKGRiZSwgY29tbSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBkYl9leHBvcnRfX2NvbW1fdGhyZWFkKGRiZSwgY29tbSwgbWFpbl90aHJlYWQpOworfQorCitpbnQgZGJfZXhwb3J0X19jb21tX3RocmVhZChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKQoreworCXU2NCBkYl9pZDsKKworCWRiX2lkID0gKytkYmUtPmNvbW1fdGhyZWFkX2xhc3RfZGJfaWQ7CisKKwlpZiAoZGJlLT5leHBvcnRfY29tbV90aHJlYWQpCisJCXJldHVybiBkYmUtPmV4cG9ydF9jb21tX3RocmVhZChkYmUsIGRiX2lkLCBjb21tLCB0aHJlYWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYl9leHBvcnRfX2RzbyhzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBkc28gKmRzbywKKwkJICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCit7CisJaWYgKGRzby0+ZGJfaWQpCisJCXJldHVybiAwOworCisJZHNvLT5kYl9pZCA9ICsrZGJlLT5kc29fbGFzdF9kYl9pZDsKKworCWlmIChkYmUtPmV4cG9ydF9kc28pCisJCXJldHVybiBkYmUtPmV4cG9ydF9kc28oZGJlLCBkc28sIG1hY2hpbmUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYl9leHBvcnRfX3N5bWJvbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBzeW1ib2wgKnN5bSwKKwkJICAgICAgc3RydWN0IGRzbyAqZHNvKQoreworCXU2NCAqc3ltX2RiX2lkID0gc3ltYm9sX19wcml2KHN5bSk7CisKKwlpZiAoKnN5bV9kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwkqc3ltX2RiX2lkID0gKytkYmUtPnN5bWJvbF9sYXN0X2RiX2lkOworCisJaWYgKGRiZS0+ZXhwb3J0X3N5bWJvbCkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X3N5bWJvbChkYmUsIHN5bSwgZHNvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHRocmVhZCAqZ2V0X21haW5fdGhyZWFkKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJaWYgKHRocmVhZC0+cGlkXyA9PSB0aHJlYWQtPnRpZCkKKwkJcmV0dXJuIHRocmVhZDsKKworCWlmICh0aHJlYWQtPnBpZF8gPT0gLTEpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIG1hY2hpbmVfX2ZpbmRfdGhyZWFkKG1hY2hpbmUsIHRocmVhZC0+cGlkXywgdGhyZWFkLT5waWRfKTsKK30KKworc3RhdGljIGludCBkYl9pZHNfZnJvbV9hbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKKwkJCSAgdTY0ICpkc29fZGJfaWQsIHU2NCAqc3ltX2RiX2lkLCB1NjQgKm9mZnNldCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGFsLT5tYXApIHsKKwkJc3RydWN0IGRzbyAqZHNvID0gYWwtPm1hcC0+ZHNvOworCisJCWVyciA9IGRiX2V4cG9ydF9fZHNvKGRiZSwgZHNvLCBhbC0+bWFjaGluZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQkqZHNvX2RiX2lkID0gZHNvLT5kYl9pZDsKKworCQlpZiAoIWFsLT5zeW0pIHsKKwkJCWFsLT5zeW0gPSBzeW1ib2xfX25ldyhhbC0+YWRkciwgMCwgMCwgInVua25vd24iKTsKKwkJCWlmIChhbC0+c3ltKQorCQkJCXN5bWJvbHNfX2luc2VydCgmZHNvLT5zeW1ib2xzW2FsLT5tYXAtPnR5cGVdLAorCQkJCQkJYWwtPnN5bSk7CisJCX0KKworCQlpZiAoYWwtPnN5bSkgeworCQkJdTY0ICpkYl9pZCA9IHN5bWJvbF9fcHJpdihhbC0+c3ltKTsKKworCQkJZXJyID0gZGJfZXhwb3J0X19zeW1ib2woZGJlLCBhbC0+c3ltLCBkc28pOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJKnN5bV9kYl9pZCA9ICpkYl9pZDsKKwkJCSpvZmZzZXQgPSBhbC0+YWRkciAtIGFsLT5zeW0tPnN0YXJ0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYl9leHBvcnRfX2JyYW5jaF90eXBlKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTMyIGJyYW5jaF90eXBlLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoZGJlLT5leHBvcnRfYnJhbmNoX3R5cGUpCisJCXJldHVybiBkYmUtPmV4cG9ydF9icmFuY2hfdHlwZShkYmUsIGJyYW5jaF90eXBlLCBuYW1lKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGJfZXhwb3J0X19zYW1wbGUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKKwkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKKwkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCit7CisJc3RydWN0IGV4cG9ydF9zYW1wbGUgZXMgPSB7CisJCS5ldmVudCA9IGV2ZW50LAorCQkuc2FtcGxlID0gc2FtcGxlLAorCQkuZXZzZWwgPSBldnNlbCwKKwkJLnRocmVhZCA9IHRocmVhZCwKKwkJLmFsID0gYWwsCisJfTsKKwlzdHJ1Y3QgdGhyZWFkICptYWluX3RocmVhZDsKKwlzdHJ1Y3QgY29tbSAqY29tbSA9IE5VTEw7CisJaW50IGVycjsKKworCWVyciA9IGRiX2V4cG9ydF9fZXZzZWwoZGJlLCBldnNlbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGRiX2V4cG9ydF9fbWFjaGluZShkYmUsIGFsLT5tYWNoaW5lKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbWFpbl90aHJlYWQgPSBnZXRfbWFpbl90aHJlYWQoYWwtPm1hY2hpbmUsIHRocmVhZCk7CisJaWYgKG1haW5fdGhyZWFkKQorCQljb21tID0gbWFjaGluZV9fdGhyZWFkX2V4ZWNfY29tbShhbC0+bWFjaGluZSwgbWFpbl90aHJlYWQpOworCisJZXJyID0gZGJfZXhwb3J0X190aHJlYWQoZGJlLCB0aHJlYWQsIGFsLT5tYWNoaW5lLCBjb21tKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGNvbW0pIHsKKwkJZXJyID0gZGJfZXhwb3J0X19jb21tKGRiZSwgY29tbSwgbWFpbl90aHJlYWQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJZXMuY29tbV9kYl9pZCA9IGNvbW0tPmRiX2lkOworCX0KKworCWVzLmRiX2lkID0gKytkYmUtPnNhbXBsZV9sYXN0X2RiX2lkOworCisJZXJyID0gZGJfaWRzX2Zyb21fYWwoZGJlLCBhbCwgJmVzLmRzb19kYl9pZCwgJmVzLnN5bV9kYl9pZCwgJmVzLm9mZnNldCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICgoZXZzZWwtPmF0dHIuc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9BRERSKSAmJgorCSAgICBzYW1wbGVfYWRkcl9jb3JyZWxhdGVzX3N5bSgmZXZzZWwtPmF0dHIpKSB7CisJCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFkZHJfYWw7CisKKwkJcGVyZl9ldmVudF9fcHJlcHJvY2Vzc19zYW1wbGVfYWRkcihldmVudCwgc2FtcGxlLCB0aHJlYWQsICZhZGRyX2FsKTsKKwkJZXJyID0gZGJfaWRzX2Zyb21fYWwoZGJlLCAmYWRkcl9hbCwgJmVzLmFkZHJfZHNvX2RiX2lkLAorCQkJCSAgICAgJmVzLmFkZHJfc3ltX2RiX2lkLCAmZXMuYWRkcl9vZmZzZXQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKGRiZS0+Y3JwKSB7CisJCQllcnIgPSB0aHJlYWRfc3RhY2tfX3Byb2Nlc3ModGhyZWFkLCBjb21tLCBzYW1wbGUsIGFsLAorCQkJCQkJICAgICZhZGRyX2FsLCBlcy5kYl9pZCwKKwkJCQkJCSAgICBkYmUtPmNycCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAoZGJlLT5leHBvcnRfc2FtcGxlKQorCQlyZXR1cm4gZGJlLT5leHBvcnRfc2FtcGxlKGRiZSwgJmVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgYnJhbmNoX3R5cGU7CisJY29uc3QgY2hhciAqbmFtZTsKK30gYnJhbmNoX3R5cGVzW10gPSB7CisJezAsICJubyBicmFuY2gifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19DQUxMLCAiY2FsbCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX1JFVFVSTiwgInJldHVybiJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX0NPTkRJVElPTkFMLCAiY29uZGl0aW9uYWwganVtcCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNILCAidW5jb25kaXRpb25hbCBqdW1wIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfQ0FMTCB8IFBFUkZfSVBfRkxBR19JTlRFUlJVUFQsCisJICJzb2Z0d2FyZSBpbnRlcnJ1cHQifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19SRVRVUk4gfCBQRVJGX0lQX0ZMQUdfSU5URVJSVVBULAorCSAicmV0dXJuIGZyb20gaW50ZXJydXB0In0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfQ0FMTCB8IFBFUkZfSVBfRkxBR19TWVNDQUxMUkVULAorCSAic3lzdGVtIGNhbGwifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19SRVRVUk4gfCBQRVJGX0lQX0ZMQUdfU1lTQ0FMTFJFVCwKKwkgInJldHVybiBmcm9tIHN5c3RlbSBjYWxsIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfQVNZTkMsICJhc3luY2hyb25vdXMgYnJhbmNoIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfQ0FMTCB8IFBFUkZfSVBfRkxBR19BU1lOQyB8CisJIFBFUkZfSVBfRkxBR19JTlRFUlJVUFQsICJoYXJkd2FyZSBpbnRlcnJ1cHQifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19UWF9BQk9SVCwgInRyYW5zYWN0aW9uIGFib3J0In0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfVFJBQ0VfQkVHSU4sICJ0cmFjZSBiZWdpbiJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX1RSQUNFX0VORCwgInRyYWNlIGVuZCJ9LAorCXswLCBOVUxMfQorfTsKKworaW50IGRiX2V4cG9ydF9fYnJhbmNoX3R5cGVzKHN0cnVjdCBkYl9leHBvcnQgKmRiZSkKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGJyYW5jaF90eXBlc1tpXS5uYW1lIDsgaSsrKSB7CisJCWVyciA9IGRiX2V4cG9ydF9fYnJhbmNoX3R5cGUoZGJlLCBicmFuY2hfdHlwZXNbaV0uYnJhbmNoX3R5cGUsCisJCQkJCSAgICAgYnJhbmNoX3R5cGVzW2ldLm5hbWUpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBlcnI7Cit9CisKK2ludCBkYl9leHBvcnRfX2NhbGxfcGF0aChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjYWxsX3BhdGggKmNwKQoreworCWludCBlcnI7CisKKwlpZiAoY3AtPmRiX2lkKQorCQlyZXR1cm4gMDsKKworCWlmIChjcC0+cGFyZW50KSB7CisJCWVyciA9IGRiX2V4cG9ydF9fY2FsbF9wYXRoKGRiZSwgY3AtPnBhcmVudCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWNwLT5kYl9pZCA9ICsrZGJlLT5jYWxsX3BhdGhfbGFzdF9kYl9pZDsKKworCWlmIChkYmUtPmV4cG9ydF9jYWxsX3BhdGgpCisJCXJldHVybiBkYmUtPmV4cG9ydF9jYWxsX3BhdGgoZGJlLCBjcCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fY2FsbF9yZXR1cm4oc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY2FsbF9yZXR1cm4gKmNyKQoreworCWludCBlcnI7CisKKwlpZiAoY3ItPmRiX2lkKQorCQlyZXR1cm4gMDsKKworCWVyciA9IGRiX2V4cG9ydF9fY2FsbF9wYXRoKGRiZSwgY3ItPmNwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJY3ItPmRiX2lkID0gKytkYmUtPmNhbGxfcmV0dXJuX2xhc3RfZGJfaWQ7CisKKwlpZiAoZGJlLT5leHBvcnRfY2FsbF9yZXR1cm4pCisJCXJldHVybiBkYmUtPmV4cG9ydF9jYWxsX3JldHVybihkYmUsIGNyKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RiLWV4cG9ydC5oIGIvdG9vbHMvcGVyZi91dGlsL2RiLWV4cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYmQyMmQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvZGItZXhwb3J0LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBkYi1leHBvcnQuaDogU3VwcG9ydCBmb3IgZXhwb3J0aW5nIGRhdGEgc3VpdGFibGUgZm9yIGltcG9ydCB0byBhIGRhdGFiYXNlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX1BFUkZfREJfRVhQT1JUX0gKKyNkZWZpbmUgX19QRVJGX0RCX0VYUE9SVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworc3RydWN0IHBlcmZfZXZzZWw7CitzdHJ1Y3QgbWFjaGluZTsKK3N0cnVjdCB0aHJlYWQ7CitzdHJ1Y3QgY29tbTsKK3N0cnVjdCBkc287CitzdHJ1Y3QgcGVyZl9zYW1wbGU7CitzdHJ1Y3QgYWRkcl9sb2NhdGlvbjsKK3N0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3I7CitzdHJ1Y3QgY2FsbF9wYXRoOworc3RydWN0IGNhbGxfcmV0dXJuOworCitzdHJ1Y3QgZXhwb3J0X3NhbXBsZSB7CisJdW5pb24gcGVyZl9ldmVudAkqZXZlbnQ7CisJc3RydWN0IHBlcmZfc2FtcGxlCSpzYW1wbGU7CisJc3RydWN0IHBlcmZfZXZzZWwJKmV2c2VsOworCXN0cnVjdCB0aHJlYWQJCSp0aHJlYWQ7CisJc3RydWN0IGFkZHJfbG9jYXRpb24JKmFsOworCXU2NAkJCWRiX2lkOworCXU2NAkJCWNvbW1fZGJfaWQ7CisJdTY0CQkJZHNvX2RiX2lkOworCXU2NAkJCXN5bV9kYl9pZDsKKwl1NjQJCQlvZmZzZXQ7IC8qIGlwIG9mZnNldCBmcm9tIHN5bWJvbCBzdGFydCAqLworCXU2NAkJCWFkZHJfZHNvX2RiX2lkOworCXU2NAkJCWFkZHJfc3ltX2RiX2lkOworCXU2NAkJCWFkZHJfb2Zmc2V0OyAvKiBhZGRyIG9mZnNldCBmcm9tIHN5bWJvbCBzdGFydCAqLworfTsKKworc3RydWN0IGRiX2V4cG9ydCB7CisJaW50ICgqZXhwb3J0X2V2c2VsKShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCk7CisJaW50ICgqZXhwb3J0X21hY2hpbmUpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOworCWludCAoKmV4cG9ydF90aHJlYWQpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJICAgICB1NjQgbWFpbl90aHJlYWRfZGJfaWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKKwlpbnQgKCpleHBvcnRfY29tbSkoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY29tbSAqY29tbSk7CisJaW50ICgqZXhwb3J0X2NvbW1fdGhyZWFkKShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHU2NCBkYl9pZCwKKwkJCQkgIHN0cnVjdCBjb21tICpjb21tLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworCWludCAoKmV4cG9ydF9kc28pKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGRzbyAqZHNvLAorCQkJICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CisJaW50ICgqZXhwb3J0X3N5bWJvbCkoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCQkgICAgIHN0cnVjdCBkc28gKmRzbyk7CisJaW50ICgqZXhwb3J0X2JyYW5jaF90eXBlKShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHUzMiBicmFuY2hfdHlwZSwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpOworCWludCAoKmV4cG9ydF9zYW1wbGUpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGV4cG9ydF9zYW1wbGUgKmVzKTsKKwlpbnQgKCpleHBvcnRfY2FsbF9wYXRoKShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjYWxsX3BhdGggKmNwKTsKKwlpbnQgKCpleHBvcnRfY2FsbF9yZXR1cm4pKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwKKwkJCQkgIHN0cnVjdCBjYWxsX3JldHVybiAqY3IpOworCXN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgKmNycDsKKwl1NjQgZXZzZWxfbGFzdF9kYl9pZDsKKwl1NjQgbWFjaGluZV9sYXN0X2RiX2lkOworCXU2NCB0aHJlYWRfbGFzdF9kYl9pZDsKKwl1NjQgY29tbV9sYXN0X2RiX2lkOworCXU2NCBjb21tX3RocmVhZF9sYXN0X2RiX2lkOworCXU2NCBkc29fbGFzdF9kYl9pZDsKKwl1NjQgc3ltYm9sX2xhc3RfZGJfaWQ7CisJdTY0IHNhbXBsZV9sYXN0X2RiX2lkOworCXU2NCBjYWxsX3BhdGhfbGFzdF9kYl9pZDsKKwl1NjQgY2FsbF9yZXR1cm5fbGFzdF9kYl9pZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkOworfTsKKworaW50IGRiX2V4cG9ydF9faW5pdChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUpOworaW50IGRiX2V4cG9ydF9fZmx1c2goc3RydWN0IGRiX2V4cG9ydCAqZGJlKTsKK3ZvaWQgZGJfZXhwb3J0X19leGl0KHN0cnVjdCBkYl9leHBvcnQgKmRiZSk7CitpbnQgZGJfZXhwb3J0X19ldnNlbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCk7CitpbnQgZGJfZXhwb3J0X19tYWNoaW5lKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOworaW50IGRiX2V4cG9ydF9fdGhyZWFkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkgICAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IGNvbW0gKmNvbW0pOworaW50IGRiX2V4cG9ydF9fY29tbShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tLAorCQkgICAgc3RydWN0IHRocmVhZCAqbWFpbl90aHJlYWQpOworaW50IGRiX2V4cG9ydF9fY29tbV90aHJlYWQoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY29tbSAqY29tbSwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CitpbnQgZGJfZXhwb3J0X19kc28oc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgZHNvICpkc28sCisJCSAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKK2ludCBkYl9leHBvcnRfX3N5bWJvbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBzeW1ib2wgKnN5bSwKKwkJICAgICAgc3RydWN0IGRzbyAqZHNvKTsKK2ludCBkYl9leHBvcnRfX2JyYW5jaF90eXBlKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTMyIGJyYW5jaF90eXBlLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgZGJfZXhwb3J0X19zYW1wbGUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKKwkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKKwkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpOworCitpbnQgZGJfZXhwb3J0X19icmFuY2hfdHlwZXMoc3RydWN0IGRiX2V4cG9ydCAqZGJlKTsKKworaW50IGRiX2V4cG9ydF9fY2FsbF9wYXRoKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGNhbGxfcGF0aCAqY3ApOworaW50IGRiX2V4cG9ydF9fY2FsbF9yZXR1cm4oc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY2FsbF9yZXR1cm4gKmNyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGVidWcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCmluZGV4IGJhMzU3ZjMuLmFkNjBiMmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCkBAIC0xOSwxMyArMTksMTQgQEAKIGludCB2ZXJib3NlOwogYm9vbCBkdW1wX3RyYWNlID0gZmFsc2UsIHF1aWV0ID0gZmFsc2U7CiBpbnQgZGVidWdfb3JkZXJlZF9ldmVudHM7CitzdGF0aWMgaW50IHJlZGlyZWN0X3RvX3N0ZGVycjsKIAogc3RhdGljIGludCBfZXByaW50ZihpbnQgbGV2ZWwsIGludCB2YXIsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogCWludCByZXQgPSAwOwogCiAJaWYgKHZhciA+PSBsZXZlbCkgewotCQlpZiAodXNlX2Jyb3dzZXIgPj0gMSkKKwkJaWYgKHVzZV9icm93c2VyID49IDEgJiYgIXJlZGlyZWN0X3RvX3N0ZGVycikKIAkJCXVpX2hlbHBsaW5lX192c2hvdyhmbXQsIGFyZ3MpOwogCQllbHNlCiAJCQlyZXQgPSB2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXJncyk7CkBAIC0xNDUsNiArMTQ2LDcgQEAKIH0gZGVidWdfdmFyaWFibGVzW10gPSB7CiAJeyAubmFtZSA9ICJ2ZXJib3NlIiwJCS5wdHIgPSAmdmVyYm9zZSB9LAogCXsgLm5hbWUgPSAib3JkZXJlZC1ldmVudHMiLAkucHRyID0gJmRlYnVnX29yZGVyZWRfZXZlbnRzfSwKKwl7IC5uYW1lID0gInN0ZGVyciIsCQkucHRyID0gJnJlZGlyZWN0X3RvX3N0ZGVycn0sCiAJeyAubmFtZSA9IE5VTEwsIH0KIH07CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uYyBiL3Rvb2xzL3BlcmYvdXRpbC9kc28uYwppbmRleCAwMjQ3YWNmLi40NWJlOTQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZHNvLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5jCkBAIC0yMSw4ICsyMSwxMCBAQAogCQlbRFNPX0JJTkFSWV9UWVBFX19CVUlMRElEX0RFQlVHSU5GT10JCT0gJ2InLAogCQlbRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9EU09dCQk9ICdkJywKIAkJW0RTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV0JCT0gJ0snLAorCQlbRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFX0NPTVBdCT0gJ20nLAogCQlbRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LQUxMU1lNU10JCT0gJ2cnLAogCQlbRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFXQkJPSAnRycsCisJCVtEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEVfQ09NUF0JCT0gJ00nLAogCQlbRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9WTUxJTlVYXQkJPSAnVicsCiAJfTsKIApAQCAtMTEyLDExICsxMTQsMTMgQEAKIAkJYnJlYWs7CiAKIAljYXNlIERTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRToKKwljYXNlIERTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRV9DT01QOgogCQlwYXRoX19qb2luMyhmaWxlbmFtZSwgc2l6ZSwgc3ltYm9sX2NvbmYuc3ltZnMsCiAJCQkgICAgcm9vdF9kaXIsIGRzby0+bG9uZ19uYW1lKTsKIAkJYnJlYWs7CiAKIAljYXNlIERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRToKKwljYXNlIERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QOgogCQlfX3N5bWJvbF9fam9pbl9zeW1mcyhmaWxlbmFtZSwgc2l6ZSwgZHNvLT5sb25nX25hbWUpOwogCQlicmVhazsKIApAQCAtMTM3LDYgKzE0MSw3MyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmZtdDsKKwlpbnQgKCpkZWNvbXByZXNzKShjb25zdCBjaGFyICppbnB1dCwgaW50IG91dHB1dCk7Cit9IGNvbXByZXNzaW9uc1tdID0geworI2lmZGVmIEhBVkVfWkxJQl9TVVBQT1JUCisJeyAiZ3oiLCBnemlwX2RlY29tcHJlc3NfdG9fZmlsZSB9LAorI2VuZGlmCisJeyBOVUxMLCBOVUxMIH0sCit9OworCitib29sIGlzX3N1cHBvcnRlZF9jb21wcmVzc2lvbihjb25zdCBjaGFyICpleHQpCit7CisJdW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGNvbXByZXNzaW9uc1tpXS5mbXQ7IGkrKykgeworCQlpZiAoIXN0cmNtcChleHQsIGNvbXByZXNzaW9uc1tpXS5mbXQpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBpc19rbW9kdWxlX2V4dGVuc2lvbihjb25zdCBjaGFyICpleHQpCit7CisJaWYgKHN0cm5jbXAoZXh0LCAia28iLCAyKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGV4dFsyXSA9PSAnXDAnIHx8IChleHRbMl0gPT0gJy4nICYmIGlzX3N1cHBvcnRlZF9jb21wcmVzc2lvbihleHQrMykpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBpc19rZXJuZWxfbW9kdWxlKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBib29sICpjb21wcmVzc2VkKQoreworCWNvbnN0IGNoYXIgKmV4dCA9IHN0cnJjaHIocGF0aG5hbWUsICcuJyk7CisKKwlpZiAoZXh0ID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpc19zdXBwb3J0ZWRfY29tcHJlc3Npb24oZXh0ICsgMSkpIHsKKwkJaWYgKGNvbXByZXNzZWQpCisJCQkqY29tcHJlc3NlZCA9IHRydWU7CisJCWV4dCAtPSAzOworCX0gZWxzZSBpZiAoY29tcHJlc3NlZCkKKwkJKmNvbXByZXNzZWQgPSBmYWxzZTsKKworCXJldHVybiBpc19rbW9kdWxlX2V4dGVuc2lvbihleHQgKyAxKTsKK30KKworYm9vbCBkZWNvbXByZXNzX3RvX2ZpbGUoY29uc3QgY2hhciAqZXh0LCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG91dHB1dF9mZCkKK3sKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgY29tcHJlc3Npb25zW2ldLmZtdDsgaSsrKSB7CisJCWlmICghc3RyY21wKGV4dCwgY29tcHJlc3Npb25zW2ldLmZtdCkpCisJCQlyZXR1cm4gIWNvbXByZXNzaW9uc1tpXS5kZWNvbXByZXNzKGZpbGVuYW1lLAorCQkJCQkJCSAgIG91dHB1dF9mZCk7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBkc29fX25lZWRzX2RlY29tcHJlc3Moc3RydWN0IGRzbyAqZHNvKQoreworCXJldHVybiBkc28tPnN5bXRhYl90eXBlID09IERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QIHx8CisJCWRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVA7Cit9CisKIC8qCiAgKiBHbG9iYWwgbGlzdCBvZiBvcGVuIERTT3MgYW5kIHRoZSBjb3VudGVyLgogICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZHNvLmggYi90b29scy9wZXJmL3V0aWwvZHNvLmgKaW5kZXggYWNiNjUxYS4uMzc4MmM4MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Rzby5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kc28uaApAQCAtMjIsNyArMjIsOSBAQAogCURTT19CSU5BUllfVFlQRV9fQlVJTERJRF9ERUJVR0lORk8sCiAJRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9EU08sCiAJRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFLAorCURTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRV9DT01QLAogCURTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRSwKKwlEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEVfQ09NUCwKIAlEU09fQklOQVJZX1RZUEVfX0tDT1JFLAogCURTT19CSU5BUllfVFlQRV9fR1VFU1RfS0NPUkUsCiAJRFNPX0JJTkFSWV9UWVBFX19PUEVORU1CRURERURfREVCVUdJTkZPLApAQCAtMTI3LDYgKzEyOSw3IEBACiAJY29uc3QgY2hhcgkgKmxvbmdfbmFtZTsKIAl1MTYJCSBsb25nX25hbWVfbGVuOwogCXUxNgkJIHNob3J0X25hbWVfbGVuOworCXZvaWQJCSpkd2ZsOwkJCS8qIERXQVJGIGRlYnVnIGluZm8gKi8KIAogCS8qIGRzbyBkYXRhIGZpbGUgKi8KIAlzdHJ1Y3QgewpAQCAtMTM4LDYgKzE0MSwxMSBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkIG9wZW5fZW50cnk7CiAJfSBkYXRhOwogCisJdW5pb24geyAvKiBUb29sIHNwZWNpZmljIGFyZWEgKi8KKwkJdm9pZAkgKnByaXY7CisJCXU2NAkgZGJfaWQ7CisJfTsKKwogCWNoYXIJCSBuYW1lWzBdOwogfTsKIApAQCAtMTc5LDYgKzE4NywxMSBAQAogY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqZHNvKTsKIGludCBkc29fX3JlYWRfYmluYXJ5X3R5cGVfZmlsZW5hbWUoY29uc3Qgc3RydWN0IGRzbyAqZHNvLCBlbnVtIGRzb19iaW5hcnlfdHlwZSB0eXBlLAogCQkJCSAgIGNoYXIgKnJvb3RfZGlyLCBjaGFyICpmaWxlbmFtZSwgc2l6ZV90IHNpemUpOworYm9vbCBpc19zdXBwb3J0ZWRfY29tcHJlc3Npb24oY29uc3QgY2hhciAqZXh0KTsKK2Jvb2wgaXNfa21vZHVsZV9leHRlbnNpb24oY29uc3QgY2hhciAqZXh0KTsKK2Jvb2wgaXNfa2VybmVsX21vZHVsZShjb25zdCBjaGFyICpwYXRobmFtZSwgYm9vbCAqY29tcHJlc3NlZCk7Citib29sIGRlY29tcHJlc3NfdG9fZmlsZShjb25zdCBjaGFyICpleHQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgb3V0cHV0X2ZkKTsKK2Jvb2wgZHNvX19uZWVkc19kZWNvbXByZXNzKHN0cnVjdCBkc28gKmRzbyk7CiAKIC8qCiAgKiBUaGUgZHNvX19kYXRhXyogZXh0ZXJuYWwgaW50ZXJmYWNlIHByb3ZpZGVzIGZvbGxvd2luZyBmdW5jdGlvbnM6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCmluZGV4IDRhZjZiMjcuLjZjNmQwNDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCkBAIC0yOCw2ICsyOCw3IEBACiAJW1BFUkZfUkVDT1JEX0hFQURFUl9UUkFDSU5HX0RBVEFdCT0gIlRSQUNJTkdfREFUQSIsCiAJW1BFUkZfUkVDT1JEX0hFQURFUl9CVUlMRF9JRF0JCT0gIkJVSUxEX0lEIiwKIAlbUEVSRl9SRUNPUkRfRklOSVNIRURfUk9VTkRdCQk9ICJGSU5JU0hFRF9ST1VORCIsCisJW1BFUkZfUkVDT1JEX0lEX0lOREVYXQkJCT0gIklEX0lOREVYIiwKIH07CiAKIGNvbnN0IGNoYXIgKnBlcmZfZXZlbnRfX25hbWUodW5zaWduZWQgaW50IGlkKQpAQCAtNzMwLDEyICs3MzEsMTIgQEAKIAlyZXR1cm4gbWFjaGluZV9fcHJvY2Vzc19ldmVudChtYWNoaW5lLCBldmVudCwgc2FtcGxlKTsKIH0KIAotdm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9tYXAoc3RydWN0IHRocmVhZCAqdGhyZWFkLAotCQkJICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHU4IGNwdW1vZGUsCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX21hcChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHU4IGNwdW1vZGUsCiAJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKQogewogCXN0cnVjdCBtYXBfZ3JvdXBzICptZyA9IHRocmVhZC0+bWc7CisJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUgPSBtZy0+bWFjaGluZTsKIAlib29sIGxvYWRfbWFwID0gZmFsc2U7CiAKIAlhbC0+bWFjaGluZSA9IG1hY2hpbmU7CkBAIC04MDYsMTQgKzgwNywxNCBAQAogCX0KIH0KIAotdm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAordm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCiAJCQkJdTggY3B1bW9kZSwgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKIAkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCiB7Ci0JdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwgdHlwZSwgYWRkciwgYWwpOworCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsIGNwdW1vZGUsIHR5cGUsIGFkZHIsIGFsKTsKIAlpZiAoYWwtPm1hcCAhPSBOVUxMKQogCQlhbC0+c3ltID0gbWFwX19maW5kX3N5bWJvbChhbC0+bWFwLCBhbC0+YWRkciwKLQkJCQkJICAgbWFjaGluZS0+c3ltYm9sX2ZpbHRlcik7CisJCQkJCSAgIHRocmVhZC0+bWctPm1hY2hpbmUtPnN5bWJvbF9maWx0ZXIpOwogCWVsc2UKIAkJYWwtPnN5bSA9IE5VTEw7CiB9CkBAIC04NDIsOCArODQzLDcgQEAKIAkgICAgbWFjaGluZS0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dID09IE5VTEwpCiAJCW1hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhtYWNoaW5lKTsKIAotCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsIG1hY2hpbmUsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sCi0JCQkgICAgICBzYW1wbGUtPmlwLCBhbCk7CisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwgc2FtcGxlLT5pcCwgYWwpOwogCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogJXNcbiIsCiAJCSAgICBhbC0+bWFwID8gYWwtPm1hcC0+ZHNvLT5sb25nX25hbWUgOgogCQkJYWwtPmxldmVsID09ICdIJyA/ICJbaHlwZXJ2aXNvcl0iIDogIjxub3QgZm91bmQ+Iik7CkBAIC05MDIsMTYgKzkwMiwxNCBAQAogCiB2b2lkIHBlcmZfZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlX2FkZHIodW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAotCQkJCQlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKIAkJCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCiB7CiAJdTggY3B1bW9kZSA9IGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwKLQkJCSAgICAgIHNhbXBsZS0+YWRkciwgYWwpOworCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sIHNhbXBsZS0+YWRkciwgYWwpOwogCWlmICghYWwtPm1hcCkKLQkJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwgTUFQX19WQVJJQUJMRSwKKwkJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgY3B1bW9kZSwgTUFQX19WQVJJQUJMRSwKIAkJCQkgICAgICBzYW1wbGUtPmFkZHIsIGFsKTsKIAogCWFsLT5jcHUgPSBzYW1wbGUtPmNwdTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKaW5kZXggNTY5OWU3ZS4uYzRmZmUyYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKQEAgLTE0Myw2ICsxNDMsMzIgQEAKIAlzdHJ1Y3QgYnJhbmNoX2VudHJ5CWVudHJpZXNbMF07CiB9OwogCitlbnVtIHsKKwlQRVJGX0lQX0ZMQUdfQlJBTkNICQk9IDFVTEwgPDwgMCwKKwlQRVJGX0lQX0ZMQUdfQ0FMTAkJPSAxVUxMIDw8IDEsCisJUEVSRl9JUF9GTEFHX1JFVFVSTgkJPSAxVUxMIDw8IDIsCisJUEVSRl9JUF9GTEFHX0NPTkRJVElPTkFMCT0gMVVMTCA8PCAzLAorCVBFUkZfSVBfRkxBR19TWVNDQUxMUkVUCQk9IDFVTEwgPDwgNCwKKwlQRVJGX0lQX0ZMQUdfQVNZTkMJCT0gMVVMTCA8PCA1LAorCVBFUkZfSVBfRkxBR19JTlRFUlJVUFQJCT0gMVVMTCA8PCA2LAorCVBFUkZfSVBfRkxBR19UWF9BQk9SVAkJPSAxVUxMIDw8IDcsCisJUEVSRl9JUF9GTEFHX1RSQUNFX0JFR0lOCT0gMVVMTCA8PCA4LAorCVBFUkZfSVBfRkxBR19UUkFDRV9FTkQJCT0gMVVMTCA8PCA5LAorCVBFUkZfSVBfRkxBR19JTl9UWAkJPSAxVUxMIDw8IDEwLAorfTsKKworI2RlZmluZSBQRVJGX0JSQU5DSF9NQVNLCQkoXAorCVBFUkZfSVBfRkxBR19CUkFOQ0gJCXxcCisJUEVSRl9JUF9GTEFHX0NBTEwJCXxcCisJUEVSRl9JUF9GTEFHX1JFVFVSTgkJfFwKKwlQRVJGX0lQX0ZMQUdfQ09ORElUSU9OQUwJfFwKKwlQRVJGX0lQX0ZMQUdfU1lTQ0FMTFJFVAkJfFwKKwlQRVJGX0lQX0ZMQUdfQVNZTkMJCXxcCisJUEVSRl9JUF9GTEFHX0lOVEVSUlVQVAkJfFwKKwlQRVJGX0lQX0ZMQUdfVFhfQUJPUlQJCXxcCisJUEVSRl9JUF9GTEFHX1RSQUNFX0JFR0lOCXxcCisJUEVSRl9JUF9GTEFHX1RSQUNFX0VORCkKKwogc3RydWN0IHBlcmZfc2FtcGxlIHsKIAl1NjQgaXA7CiAJdTMyIHBpZCwgdGlkOwpAQCAtMTYyLDYgKzE4OCw3IEBACiAJc3RydWN0IGlwX2NhbGxjaGFpbiAqY2FsbGNoYWluOwogCXN0cnVjdCBicmFuY2hfc3RhY2sgKmJyYW5jaF9zdGFjazsKIAlzdHJ1Y3QgcmVnc19kdW1wICB1c2VyX3JlZ3M7CisJc3RydWN0IHJlZ3NfZHVtcCAgaW50cl9yZWdzOwogCXN0cnVjdCBzdGFja19kdW1wIHVzZXJfc3RhY2s7CiAJc3RydWN0IHNhbXBsZV9yZWFkIHJlYWQ7CiB9OwpAQCAtMTg3LDYgKzIxNCw3IEBACiAJUEVSRl9SRUNPUkRfSEVBREVSX1RSQUNJTkdfREFUQQkJPSA2NiwKIAlQRVJGX1JFQ09SRF9IRUFERVJfQlVJTERfSUQJCT0gNjcsCiAJUEVSRl9SRUNPUkRfRklOSVNIRURfUk9VTkQJCT0gNjgsCisJUEVSRl9SRUNPUkRfSURfSU5ERVgJCQk9IDY5LAogCVBFUkZfUkVDT1JEX0hFQURFUl9NQVgKIH07CiAKQEAgLTIxNCw2ICsyNDIsNyBAQAogCXUzMiBucl9pbnZhbGlkX2NoYWluczsKIAl1MzIgbnJfdW5rbm93bl9pZDsKIAl1MzIgbnJfdW5wcm9jZXNzYWJsZV9zYW1wbGVzOworCXUzMiBucl91bm9yZGVyZWRfZXZlbnRzOwogfTsKIAogc3RydWN0IGF0dHJfZXZlbnQgewpAQCAtMjM5LDYgKzI2OCwxOSBAQAogCXUzMiBzaXplOwogfTsKIAorc3RydWN0IGlkX2luZGV4X2VudHJ5IHsKKwl1NjQgaWQ7CisJdTY0IGlkeDsKKwl1NjQgY3B1OworCXU2NCB0aWQ7Cit9OworCitzdHJ1Y3QgaWRfaW5kZXhfZXZlbnQgeworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7CisJdTY0IG5yOworCXN0cnVjdCBpZF9pbmRleF9lbnRyeSBlbnRyaWVzWzBdOworfTsKKwogdW5pb24gcGVyZl9ldmVudCB7CiAJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKIAlzdHJ1Y3QgbW1hcF9ldmVudAkJbW1hcDsKQEAgLTI1Myw2ICsyOTUsNyBAQAogCXN0cnVjdCBldmVudF90eXBlX2V2ZW50CQlldmVudF90eXBlOwogCXN0cnVjdCB0cmFjaW5nX2RhdGFfZXZlbnQJdHJhY2luZ19kYXRhOwogCXN0cnVjdCBidWlsZF9pZF9ldmVudAkJYnVpbGRfaWQ7CisJc3RydWN0IGlkX2luZGV4X2V2ZW50CQlpZF9pbmRleDsKIH07CiAKIHZvaWQgcGVyZl9ldmVudF9fcHJpbnRfdG90YWxzKHZvaWQpOwpAQCAtMzIyLDcgKzM2NSw2IEBACiBib29sIHNhbXBsZV9hZGRyX2NvcnJlbGF0ZXNfc3ltKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpOwogdm9pZCBwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZV9hZGRyKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJCQlzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKLQkJCQkJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCiAJCQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCmluZGV4IDNjOWU3N2QuLmNmYmUyYjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKQEAgLTQxMyw3ICs0MTMsNyBAQAogCWludCBuZmRzID0gMDsKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2c2VsLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJZXZsaXN0X19mb3JfZWFjaChldmxpc3QsIGV2c2VsKSB7CiAJCWlmIChldnNlbC0+c3lzdGVtX3dpZGUpCiAJCQluZmRzICs9IG5yX2NwdXM7CiAJCWVsc2UKQEAgLTUyNyw2ICs1MjcsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9ldmxpc3RfX3NldF9zaWRfaWR4KHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LAorCQkJCSAgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgaWR4LCBpbnQgY3B1LAorCQkJCSAgICAgaW50IHRocmVhZCkKK3sKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfaWQgKnNpZCA9IFNJRChldnNlbCwgY3B1LCB0aHJlYWQpOworCXNpZC0+aWR4ID0gaWR4OworCWlmIChldmxpc3QtPmNwdXMgJiYgY3B1ID49IDApCisJCXNpZC0+Y3B1ID0gZXZsaXN0LT5jcHVzLT5tYXBbY3B1XTsKKwllbHNlCisJCXNpZC0+Y3B1ID0gLTE7CisJaWYgKCFldnNlbC0+c3lzdGVtX3dpZGUgJiYgZXZsaXN0LT50aHJlYWRzICYmIHRocmVhZCA+PSAwKQorCQlzaWQtPnRpZCA9IGV2bGlzdC0+dGhyZWFkcy0+bWFwW3RocmVhZF07CisJZWxzZQorCQlzaWQtPnRpZCA9IC0xOworfQorCiBzdHJ1Y3QgcGVyZl9zYW1wbGVfaWQgKnBlcmZfZXZsaXN0X19pZDJzaWQoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIHU2NCBpZCkKIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKQEAgLTgwMCwxNCArODE2LDI2IEBACiAJCQlwZXJmX2V2bGlzdF9fbW1hcF9nZXQoZXZsaXN0LCBpZHgpOwogCQl9CiAKLQkJaWYgKF9fcGVyZl9ldmxpc3RfX2FkZF9wb2xsZmQoZXZsaXN0LCBmZCwgaWR4KSA8IDApIHsKKwkJLyoKKwkJICogVGhlIHN5c3RlbV93aWRlIGZsYWcgY2F1c2VzIGEgc2VsZWN0ZWQgZXZlbnQgdG8gYmUgb3BlbmVkCisJCSAqIGFsd2F5cyB3aXRob3V0IGEgcGlkLiAgQ29uc2VxdWVudGx5IGl0IHdpbGwgbmV2ZXIgZ2V0IGEKKwkJICogUE9MTEhVUCwgYnV0IGl0IGlzIHVzZWQgZm9yIHRyYWNraW5nIGluIGNvbWJpbmF0aW9uIHdpdGgKKwkJICogb3RoZXIgZXZlbnRzLCBzbyBpdCBzaG91bGQgbm90IG5lZWQgdG8gYmUgcG9sbGVkIGFueXdheS4KKwkJICogVGhlcmVmb3JlIGRvbid0IGFkZCBpdCBmb3IgcG9sbGluZy4KKwkJICovCisJCWlmICghZXZzZWwtPnN5c3RlbV93aWRlICYmCisJCSAgICBfX3BlcmZfZXZsaXN0X19hZGRfcG9sbGZkKGV2bGlzdCwgZmQsIGlkeCkgPCAwKSB7CiAJCQlwZXJmX2V2bGlzdF9fbW1hcF9wdXQoZXZsaXN0LCBpZHgpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKLQkJaWYgKChldnNlbC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKSAmJgotCQkgICAgcGVyZl9ldmxpc3RfX2lkX2FkZF9mZChldmxpc3QsIGV2c2VsLCBjcHUsIHRocmVhZCwgZmQpIDwgMCkKLQkJCXJldHVybiAtMTsKKwkJaWYgKGV2c2VsLT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpIHsKKwkJCWlmIChwZXJmX2V2bGlzdF9faWRfYWRkX2ZkKGV2bGlzdCwgZXZzZWwsIGNwdSwgdGhyZWFkLAorCQkJCQkJICAgZmQpIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQlwZXJmX2V2bGlzdF9fc2V0X3NpZF9pZHgoZXZsaXN0LCBldnNlbCwgaWR4LCBjcHUsCisJCQkJCQkgdGhyZWFkKTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwppbmRleCAyZjllNjgwLi4xZTkwYzg1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpAQCAtNjU4LDkgKzY1OCwyMiBAQAogCQlhdHRyLT5tbWFwX2RhdGEgPSB0cmFjazsKIAl9CiAKKwkvKgorCSAqIFdlIGRvbid0IGFsbG93IHVzZXIgc3BhY2UgY2FsbGNoYWlucyBmb3IgIGZ1bmN0aW9uIHRyYWNlCisJICogZXZlbnQsIGR1ZSB0byBpc3N1ZXMgd2l0aCBwYWdlIGZhdWx0cyB3aGlsZSB0cmFjaW5nIHBhZ2UKKwkgKiBmYXVsdCBoYW5kbGVyIGFuZCBpdHMgb3ZlcmFsbCB0cmlja2luZXNzIG5hdHVyZS4KKwkgKi8KKwlpZiAocGVyZl9ldnNlbF9faXNfZnVuY3Rpb25fZXZlbnQoZXZzZWwpKQorCQlldnNlbC0+YXR0ci5leGNsdWRlX2NhbGxjaGFpbl91c2VyID0gMTsKKwogCWlmIChjYWxsY2hhaW5fcGFyYW0uZW5hYmxlZCAmJiAhZXZzZWwtPm5vX2F1eF9zYW1wbGVzKQogCQlwZXJmX2V2c2VsX19jb25maWdfY2FsbGdyYXBoKGV2c2VsKTsKIAorCWlmIChvcHRzLT5zYW1wbGVfaW50cl9yZWdzKSB7CisJCWF0dHItPnNhbXBsZV9yZWdzX2ludHIgPSBQRVJGX1JFR1NfTUFTSzsKKwkJcGVyZl9ldnNlbF9fc2V0X3NhbXBsZV9iaXQoZXZzZWwsIFJFR1NfSU5UUik7CisJfQorCiAJaWYgKHRhcmdldF9faGFzX2NwdSgmb3B0cy0+dGFyZ2V0KSkKIAkJcGVyZl9ldnNlbF9fc2V0X3NhbXBsZV9iaXQoZXZzZWwsIENQVSk7CiAKQEAgLTg1Myw4ICs4NjYsNiBAQAogCXBlcmZfZXZzZWxfX2ZyZWVfaWQoZXZzZWwpOwogCWNsb3NlX2Nncm91cChldnNlbC0+Y2dycCk7CiAJemZyZWUoJmV2c2VsLT5ncm91cF9uYW1lKTsKLQlpZiAoZXZzZWwtPnRwX2Zvcm1hdCkKLQkJcGV2ZW50X2ZyZWVfZm9ybWF0KGV2c2VsLT50cF9mb3JtYXQpOwogCXpmcmVlKCZldnNlbC0+bmFtZSk7CiAJcGVyZl9ldnNlbF9fb2JqZWN0LmZpbmkoZXZzZWwpOwogfQpAQCAtODY1LDkgKzg3Niw4IEBACiAJZnJlZShldnNlbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlX2RlbHRhcyhzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCi0JCQkJICBpbnQgY3B1LAotCQkJCSAgc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqY291bnQpCit2b2lkIHBlcmZfZXZzZWxfX2NvbXB1dGVfZGVsdGFzKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgaW50IGNwdSwKKwkJCQlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICpjb3VudCkKIHsKIAlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzIHRtcDsKIApAQCAtODg3LDYgKzg5Nyw0MiBAQAogCWNvdW50LT5ydW4gPSBjb3VudC0+cnVuIC0gdG1wLnJ1bjsKIH0KIAordm9pZCBwZXJmX2NvdW50c192YWx1ZXNfX3NjYWxlKHN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgKmNvdW50LAorCQkJICAgICAgIGJvb2wgc2NhbGUsIHM4ICpwc2NhbGVkKQoreworCXM4IHNjYWxlZCA9IDA7CisKKwlpZiAoc2NhbGUpIHsKKwkJaWYgKGNvdW50LT5ydW4gPT0gMCkgeworCQkJc2NhbGVkID0gLTE7CisJCQljb3VudC0+dmFsID0gMDsKKwkJfSBlbHNlIGlmIChjb3VudC0+cnVuIDwgY291bnQtPmVuYSkgeworCQkJc2NhbGVkID0gMTsKKwkJCWNvdW50LT52YWwgPSAodTY0KSgoZG91YmxlKSBjb3VudC0+dmFsICogY291bnQtPmVuYSAvIGNvdW50LT5ydW4gKyAwLjUpOworCQl9CisJfSBlbHNlCisJCWNvdW50LT5lbmEgPSBjb3VudC0+cnVuID0gMDsKKworCWlmIChwc2NhbGVkKQorCQkqcHNjYWxlZCA9IHNjYWxlZDsKK30KKworaW50IHBlcmZfZXZzZWxfX3JlYWRfY2Ioc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgY3B1LCBpbnQgdGhyZWFkLAorCQkJcGVyZl9ldnNlbF9fcmVhZF9jYl90IGNiKQoreworCXN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgY291bnQ7CisKKwltZW1zZXQoJmNvdW50LCAwLCBzaXplb2YoY291bnQpKTsKKworCWlmIChGRChldnNlbCwgY3B1LCB0aHJlYWQpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmVhZG4oRkQoZXZzZWwsIGNwdSwgdGhyZWFkKSwgJmNvdW50LCBzaXplb2YoY291bnQpKSA8IDApCisJCXJldHVybiAtZXJybm87CisKKwlyZXR1cm4gY2IoZXZzZWwsIGNwdSwgdGhyZWFkLCAmY291bnQpOworfQorCiBpbnQgX19wZXJmX2V2c2VsX19yZWFkX29uX2NwdShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCQkgICAgICBpbnQgY3B1LCBpbnQgdGhyZWFkLCBib29sIHNjYWxlKQogewpAQCAtOTAyLDY5ICs5NDgsMTIgQEAKIAlpZiAocmVhZG4oRkQoZXZzZWwsIGNwdSwgdGhyZWFkKSwgJmNvdW50LCBudiAqIHNpemVvZih1NjQpKSA8IDApCiAJCXJldHVybiAtZXJybm87CiAKLQljb21wdXRlX2RlbHRhcyhldnNlbCwgY3B1LCAmY291bnQpOwotCi0JaWYgKHNjYWxlKSB7Ci0JCWlmIChjb3VudC5ydW4gPT0gMCkKLQkJCWNvdW50LnZhbCA9IDA7Ci0JCWVsc2UgaWYgKGNvdW50LnJ1biA8IGNvdW50LmVuYSkKLQkJCWNvdW50LnZhbCA9ICh1NjQpKChkb3VibGUpY291bnQudmFsICogY291bnQuZW5hIC8gY291bnQucnVuICsgMC41KTsKLQl9IGVsc2UKLQkJY291bnQuZW5hID0gY291bnQucnVuID0gMDsKLQorCXBlcmZfZXZzZWxfX2NvbXB1dGVfZGVsdGFzKGV2c2VsLCBjcHUsICZjb3VudCk7CisJcGVyZl9jb3VudHNfdmFsdWVzX19zY2FsZSgmY291bnQsIHNjYWxlLCBOVUxMKTsKIAlldnNlbC0+Y291bnRzLT5jcHVbY3B1XSA9IGNvdW50OwogCXJldHVybiAwOwogfQogCi1pbnQgX19wZXJmX2V2c2VsX19yZWFkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJICAgICAgIGludCBuY3B1cywgaW50IG50aHJlYWRzLCBib29sIHNjYWxlKQotewotCXNpemVfdCBudiA9IHNjYWxlID8gMyA6IDE7Ci0JaW50IGNwdSwgdGhyZWFkOwotCXN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgKmFnZ3IgPSAmZXZzZWwtPmNvdW50cy0+YWdnciwgY291bnQ7Ci0KLQlpZiAoZXZzZWwtPnN5c3RlbV93aWRlKQotCQludGhyZWFkcyA9IDE7Ci0KLQlhZ2dyLT52YWwgPSBhZ2dyLT5lbmEgPSBhZ2dyLT5ydW4gPSAwOwotCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBuY3B1czsgY3B1KyspIHsKLQkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBudGhyZWFkczsgdGhyZWFkKyspIHsKLQkJCWlmIChGRChldnNlbCwgY3B1LCB0aHJlYWQpIDwgMCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHJlYWRuKEZEKGV2c2VsLCBjcHUsIHRocmVhZCksCi0JCQkJICAmY291bnQsIG52ICogc2l6ZW9mKHU2NCkpIDwgMCkKLQkJCQlyZXR1cm4gLWVycm5vOwotCi0JCQlhZ2dyLT52YWwgKz0gY291bnQudmFsOwotCQkJaWYgKHNjYWxlKSB7Ci0JCQkJYWdnci0+ZW5hICs9IGNvdW50LmVuYTsKLQkJCQlhZ2dyLT5ydW4gKz0gY291bnQucnVuOwotCQkJfQotCQl9Ci0JfQotCi0JY29tcHV0ZV9kZWx0YXMoZXZzZWwsIC0xLCBhZ2dyKTsKLQotCWV2c2VsLT5jb3VudHMtPnNjYWxlZCA9IDA7Ci0JaWYgKHNjYWxlKSB7Ci0JCWlmIChhZ2dyLT5ydW4gPT0gMCkgewotCQkJZXZzZWwtPmNvdW50cy0+c2NhbGVkID0gLTE7Ci0JCQlhZ2dyLT52YWwgPSAwOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlpZiAoYWdnci0+cnVuIDwgYWdnci0+ZW5hKSB7Ci0JCQlldnNlbC0+Y291bnRzLT5zY2FsZWQgPSAxOwotCQkJYWdnci0+dmFsID0gKHU2NCkoKGRvdWJsZSlhZ2dyLT52YWwgKiBhZ2dyLT5lbmEgLyBhZ2dyLT5ydW4gKyAwLjUpOwotCQl9Ci0JfSBlbHNlCi0JCWFnZ3ItPmVuYSA9IGFnZ3ItPnJ1biA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBnZXRfZ3JvdXBfZmQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgY3B1LCBpbnQgdGhyZWFkKQogewogCXN0cnVjdCBwZXJmX2V2c2VsICpsZWFkZXIgPSBldnNlbC0+bGVhZGVyOwpAQCAtMTAzOSw2ICsxMDI4LDcgQEAKIAlyZXQgKz0gUFJJTlRfQVRUUl9YNjQoYnJhbmNoX3NhbXBsZV90eXBlKTsKIAlyZXQgKz0gUFJJTlRfQVRUUl9YNjQoc2FtcGxlX3JlZ3NfdXNlcik7CiAJcmV0ICs9IFBSSU5UX0FUVFJfVTMyKHNhbXBsZV9zdGFja191c2VyKTsKKwlyZXQgKz0gUFJJTlRfQVRUUl9YNjQoc2FtcGxlX3JlZ3NfaW50cik7CiAKIAlyZXQgKz0gZnByaW50ZihmcCwgIiUuNjBzXG4iLCBncmFwaF9kb3R0ZWRfbGluZSk7CiAKQEAgLTE1MzgsNiArMTUyOCwyMyBAQAogCQlhcnJheSsrOwogCX0KIAorCWRhdGEtPmludHJfcmVncy5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FOworCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKSB7CisJCU9WRVJGTE9XX0NIRUNLX3U2NChhcnJheSk7CisJCWRhdGEtPmludHJfcmVncy5hYmkgPSAqYXJyYXk7CisJCWFycmF5Kys7CisKKwkJaWYgKGRhdGEtPmludHJfcmVncy5hYmkgIT0gUEVSRl9TQU1QTEVfUkVHU19BQklfTk9ORSkgeworCQkJdTY0IG1hc2sgPSBldnNlbC0+YXR0ci5zYW1wbGVfcmVnc19pbnRyOworCisJCQlzeiA9IGh3ZWlnaHRfbG9uZyhtYXNrKSAqIHNpemVvZih1NjQpOworCQkJT1ZFUkZMT1dfQ0hFQ0soYXJyYXksIHN6LCBtYXhfc2l6ZSk7CisJCQlkYXRhLT5pbnRyX3JlZ3MubWFzayA9IG1hc2s7CisJCQlkYXRhLT5pbnRyX3JlZ3MucmVncyA9ICh1NjQgKilhcnJheTsKKwkJCWFycmF5ID0gKHZvaWQgKilhcnJheSArIHN6OworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MzMsNiArMTY0MCwxNiBAQAogCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfVFJBTlNBQ1RJT04pCiAJCXJlc3VsdCArPSBzaXplb2YodTY0KTsKIAorCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKSB7CisJCWlmIChzYW1wbGUtPmludHJfcmVncy5hYmkpIHsKKwkJCXJlc3VsdCArPSBzaXplb2YodTY0KTsKKwkJCXN6ID0gaHdlaWdodF9sb25nKHNhbXBsZS0+aW50cl9yZWdzLm1hc2spICogc2l6ZW9mKHU2NCk7CisJCQlyZXN1bHQgKz0gc3o7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgKz0gc2l6ZW9mKHU2NCk7CisJCX0KKwl9CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xODExLDYgKzE4MjgsMTcgQEAKIAkJYXJyYXkrKzsKIAl9CiAKKwlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikgeworCQlpZiAoc2FtcGxlLT5pbnRyX3JlZ3MuYWJpKSB7CisJCQkqYXJyYXkrKyA9IHNhbXBsZS0+aW50cl9yZWdzLmFiaTsKKwkJCXN6ID0gaHdlaWdodF9sb25nKHNhbXBsZS0+aW50cl9yZWdzLm1hc2spICogc2l6ZW9mKHU2NCk7CisJCQltZW1jcHkoYXJyYXksIHNhbXBsZS0+aW50cl9yZWdzLnJlZ3MsIHN6KTsKKwkJCWFycmF5ID0gKHZvaWQgKilhcnJheSArIHN6OworCQl9IGVsc2UgeworCQkJKmFycmF5KysgPSAwOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NDAsNyArMTk2OCw3IEBACiAJCWJpdF9uYW1lKFJFQUQpLCBiaXRfbmFtZShDQUxMQ0hBSU4pLCBiaXRfbmFtZShJRCksIGJpdF9uYW1lKENQVSksCiAJCWJpdF9uYW1lKFBFUklPRCksIGJpdF9uYW1lKFNUUkVBTV9JRCksIGJpdF9uYW1lKFJBVyksCiAJCWJpdF9uYW1lKEJSQU5DSF9TVEFDSyksIGJpdF9uYW1lKFJFR1NfVVNFUiksIGJpdF9uYW1lKFNUQUNLX1VTRVIpLAotCQliaXRfbmFtZShJREVOVElGSUVSKSwKKwkJYml0X25hbWUoSURFTlRJRklFUiksIGJpdF9uYW1lKFJFR1NfSU5UUiksCiAJCXsgLm5hbWUgPSBOVUxMLCB9CiAJfTsKICN1bmRlZiBiaXRfbmFtZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmggYi90b29scy9wZXJmL3V0aWwvZXZzZWwuaAppbmRleCAxNjNjNTYwLi4zODYyMjc0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuaApAQCAtMzYsNiArMzYsOSBAQAogCXN0cnVjdCBobGlzdF9ub2RlIAlub2RlOwogCXU2NAkJIAlpZDsKIAlzdHJ1Y3QgcGVyZl9ldnNlbAkqZXZzZWw7CisJaW50CQkJaWR4OworCWludAkJCWNwdTsKKwlwaWRfdAkJCXRpZDsKIAogCS8qIEhvbGRzIHRvdGFsIElEIHBlcmlvZCB2YWx1ZSBmb3IgUEVSRl9TQU1QTEVfUkVBRCBwcm9jZXNzaW5nLiAqLwogCXU2NAkJCXBlcmlvZDsKQEAgLTU0LDYgKzU3LDcgQEAKICAqIEBpc19wb3M6IHRoZSBwb3NpdGlvbiAoY291bnRpbmcgYmFja3dhcmRzKSBvZiB0aGUgZXZlbnQgaWQgKFBFUkZfU0FNUExFX0lEIG9yCiAgKiAgICAgICAgICBQRVJGX1NBTVBMRV9JREVOVElGSUVSKSBpbiBhIG5vbi1zYW1wbGUgZXZlbnQgaS5lLiBpZiBzYW1wbGVfaWRfYWxsCiAgKiAgICAgICAgICBpcyB1c2VkIHRoZXJlIGlzIGFuIGlkIHNhbXBsZSBhcHBlbmRlZCB0byBub24tc2FtcGxlIGV2ZW50cworICogQHByaXY6ICAgQW5kIHdoYXQgaXMgaW4gaXRzIGNvbnRhaW5pbmcgdW5uYW1lZCB1bmlvbiBhcmUgdG9vbCBzcGVjaWZpYwogICovCiBzdHJ1Y3QgcGVyZl9ldnNlbCB7CiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwpAQCAtNjksMTAgKzczLDEyIEBACiAJY2hhcgkJCSpuYW1lOwogCWRvdWJsZQkJCXNjYWxlOwogCWNvbnN0IGNoYXIJCSp1bml0OworCWJvb2wJCQlzbmFwc2hvdDsKIAlzdHJ1Y3QgZXZlbnRfZm9ybWF0CSp0cF9mb3JtYXQ7CiAJdW5pb24gewogCQl2b2lkCQkqcHJpdjsKIAkJb2ZmX3QJCWlkX29mZnNldDsKKwkJdTY0CQlkYl9pZDsKIAl9OwogCXN0cnVjdCBjZ3JvdXBfc2VsCSpjZ3JwOwogCXZvaWQJCQkqaGFuZGxlcjsKQEAgLTg2LDYgKzkyLDggQEAKIAlib29sCQkJaW1tZWRpYXRlOwogCWJvb2wJCQlzeXN0ZW1fd2lkZTsKIAlib29sCQkJdHJhY2tpbmc7CisJYm9vbAkJCXBlcl9wa2c7CisJdW5zaWduZWQgbG9uZwkJKnBlcl9wa2dfbWFzazsKIAkvKiBwYXJzZSBtb2RpZmllciBoZWxwZXIgKi8KIAlpbnQJCQlleGNsdWRlX0dIOwogCWludAkJCW5yX21lbWJlcnM7CkBAIC0xMDUsNiArMTEzLDEyIEBACiBzdHJ1Y3QgcGVyZl9ldmxpc3Q7CiBzdHJ1Y3QgcmVjb3JkX29wdHM7CiAKK3ZvaWQgcGVyZl9jb3VudHNfdmFsdWVzX19zY2FsZShzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICpjb3VudCwKKwkJCSAgICAgICBib29sIHNjYWxlLCBzOCAqcHNjYWxlZCk7CisKK3ZvaWQgcGVyZl9ldnNlbF9fY29tcHV0ZV9kZWx0YXMoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgY3B1LAorCQkJCXN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgKmNvdW50KTsKKwogaW50IHBlcmZfZXZzZWxfX29iamVjdF9jb25maWcoc2l6ZV90IG9iamVjdF9zaXplLAogCQkJICAgICAgaW50ICgqaW5pdCkoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKSwKIAkJCSAgICAgIHZvaWQgKCpmaW5pKShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpKTsKQEAgLTIyMiw2ICsyMzYsMTMgQEAKIAkgKGEpLT5hdHRyLnR5cGUgPT0gKGIpLT5hdHRyLnR5cGUgJiYJXAogCSAoYSktPmF0dHIuY29uZmlnID09IChiKS0+YXR0ci5jb25maWcpCiAKK3R5cGVkZWYgaW50IChwZXJmX2V2c2VsX19yZWFkX2NiX3QpKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKKwkJCQkgICAgaW50IGNwdSwgaW50IHRocmVhZCwKKwkJCQkgICAgc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqY291bnQpOworCitpbnQgcGVyZl9ldnNlbF9fcmVhZF9jYihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBjcHUsIGludCB0aHJlYWQsCisJCQlwZXJmX2V2c2VsX19yZWFkX2NiX3QgY2IpOworCiBpbnQgX19wZXJmX2V2c2VsX19yZWFkX29uX2NwdShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCQkgICAgICBpbnQgY3B1LCBpbnQgdGhyZWFkLCBib29sIHNjYWxlKTsKIApAQCAtMjUxLDM1ICsyNzIsNiBAQAogCXJldHVybiBfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KGV2c2VsLCBjcHUsIHRocmVhZCwgdHJ1ZSk7CiB9CiAKLWludCBfX3BlcmZfZXZzZWxfX3JlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgbmNwdXMsIGludCBudGhyZWFkcywKLQkJICAgICAgIGJvb2wgc2NhbGUpOwotCi0vKioKLSAqIHBlcmZfZXZzZWxfX3JlYWQgLSBSZWFkIHRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBvbiBhbGwgQ1BVcwotICoKLSAqIEBldnNlbCAtIGV2ZW50IHNlbGVjdG9yIHRvIHJlYWQgdmFsdWUKLSAqIEBuY3B1cyAtIE51bWJlciBvZiBjcHVzIGFmZmVjdGVkLCBmcm9tIHplcm8KLSAqIEBudGhyZWFkcyAtIE51bWJlciBvZiB0aHJlYWRzIGFmZmVjdGVkLCBmcm9tIHplcm8KLSAqLwotc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldnNlbF9fcmVhZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCi0JCQkJICAgIGludCBuY3B1cywgaW50IG50aHJlYWRzKQotewotCXJldHVybiBfX3BlcmZfZXZzZWxfX3JlYWQoZXZzZWwsIG5jcHVzLCBudGhyZWFkcywgZmFsc2UpOwotfQotCi0vKioKLSAqIHBlcmZfZXZzZWxfX3JlYWRfc2NhbGVkIC0gUmVhZCB0aGUgYWdncmVnYXRlIHJlc3VsdHMgb24gYWxsIENQVXMsIHNjYWxlZAotICoKLSAqIEBldnNlbCAtIGV2ZW50IHNlbGVjdG9yIHRvIHJlYWQgdmFsdWUKLSAqIEBuY3B1cyAtIE51bWJlciBvZiBjcHVzIGFmZmVjdGVkLCBmcm9tIHplcm8KLSAqIEBudGhyZWFkcyAtIE51bWJlciBvZiB0aHJlYWRzIGFmZmVjdGVkLCBmcm9tIHplcm8KLSAqLwotc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldnNlbF9fcmVhZF9zY2FsZWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkJCQkgIGludCBuY3B1cywgaW50IG50aHJlYWRzKQotewotCXJldHVybiBfX3BlcmZfZXZzZWxfX3JlYWQoZXZzZWwsIG5jcHVzLCBudGhyZWFkcywgdHJ1ZSk7Ci19Ci0KIGludCBwZXJmX2V2c2VsX19wYXJzZV9zYW1wbGUoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCSAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZmluZC12ZHNvLW1hcC5jIGIvdG9vbHMvcGVyZi91dGlsL2ZpbmQtdmRzby1tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWVmMWNmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2ZpbmQtdmRzby1tYXAuYwpAQCAtMCwwICsxLDMwIEBACitzdGF0aWMgaW50IGZpbmRfdmRzb19tYXAodm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kKQoreworCUZJTEUgKm1hcHM7CisJY2hhciBsaW5lWzEyOF07CisJaW50IGZvdW5kID0gMDsKKworCW1hcHMgPSBmb3BlbigiL3Byb2Mvc2VsZi9tYXBzIiwgInIiKTsKKwlpZiAoIW1hcHMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ2ZHNvOiBjYW5ub3Qgb3BlbiBtYXBzXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXdoaWxlICghZm91bmQgJiYgZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBtYXBzKSkgeworCQlpbnQgbSA9IC0xOworCisJCS8qIFdlIGNhcmUgb25seSBhYm91dCBwcml2YXRlIHIteCBtYXBwaW5ncy4gKi8KKwkJaWYgKDIgIT0gc3NjYW5mKGxpbmUsICIlcC0lcCByLXhwICUqeCAlKng6JSp4ICUqdSAlbiIsCisJCQkJc3RhcnQsIGVuZCwgJm0pKQorCQkJY29udGludWU7CisJCWlmIChtIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RybmNtcCgmbGluZVttXSwgVkRTT19fTUFQX05BTUUsCisJCQkgICAgIHNpemVvZihWRFNPX19NQVBfTkFNRSkgLSAxKSkKKwkJCWZvdW5kID0gMTsKKwl9CisKKwlmY2xvc2UobWFwcyk7CisJcmV0dXJuICFmb3VuZDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCAyNmY1YjJmLi5iMjBlNDBjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC0yNCw4ICsyNCw2IEBACiAjaW5jbHVkZSAiYnVpbGQtaWQuaCIKICNpbmNsdWRlICJkYXRhLmgiCiAKLXN0YXRpYyBib29sIG5vX2J1aWxkaWRfY2FjaGUgPSBmYWxzZTsKLQogc3RhdGljIHUzMiBoZWFkZXJfYXJnYzsKIHN0YXRpYyBjb25zdCBjaGFyICoqaGVhZGVyX2FyZ3Y7CiAKQEAgLTc5LDEwICs3Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgTkFNRV9BTElHTiA2NAotCi1zdGF0aWMgaW50IHdyaXRlX3BhZGRlZChpbnQgZmQsIGNvbnN0IHZvaWQgKmJmLCBzaXplX3QgY291bnQsCi0JCQlzaXplX3QgY291bnRfYWxpZ25lZCkKK2ludCB3cml0ZV9wYWRkZWQoaW50IGZkLCBjb25zdCB2b2lkICpiZiwgc2l6ZV90IGNvdW50LCBzaXplX3QgY291bnRfYWxpZ25lZCkKIHsKIAlzdGF0aWMgY29uc3QgY2hhciB6ZXJvX2J1ZltOQU1FX0FMSUdOXTsKIAlpbnQgZXJyID0gZG9fd3JpdGUoZmQsIGJmLCBjb3VudCk7CkBAIC0xNzEsMzQwICsxNjYsNiBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIGRzb3NfX2Zvcl9lYWNoX3dpdGhfYnVpbGRfaWQocG9zLCBoZWFkKQlcCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpCVwKLQkJaWYgKCFwb3MtPmhhc19idWlsZF9pZCkJCVwKLQkJCWNvbnRpbnVlOwkJXAotCQllbHNlCi0KLXN0YXRpYyBpbnQgd3JpdGVfYnVpbGRpZChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIHU4ICpidWlsZF9pZCwKLQkJCSBwaWRfdCBwaWQsIHUxNiBtaXNjLCBpbnQgZmQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgYnVpbGRfaWRfZXZlbnQgYjsKLQlzaXplX3QgbGVuOwotCi0JbGVuID0gbmFtZV9sZW4gKyAxOwotCWxlbiA9IFBFUkZfQUxJR04obGVuLCBOQU1FX0FMSUdOKTsKLQotCW1lbXNldCgmYiwgMCwgc2l6ZW9mKGIpKTsKLQltZW1jcHkoJmIuYnVpbGRfaWQsIGJ1aWxkX2lkLCBCVUlMRF9JRF9TSVpFKTsKLQliLnBpZCA9IHBpZDsKLQliLmhlYWRlci5taXNjID0gbWlzYzsKLQliLmhlYWRlci5zaXplID0gc2l6ZW9mKGIpICsgbGVuOwotCi0JZXJyID0gZG9fd3JpdGUoZmQsICZiLCBzaXplb2YoYikpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIHdyaXRlX3BhZGRlZChmZCwgbmFtZSwgbmFtZV9sZW4gKyAxLCBsZW4pOwotfQotCi1zdGF0aWMgaW50IF9fZHNvc19faGl0X2FsbChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCXN0cnVjdCBkc28gKnBvczsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQotCQlwb3MtPmhpdCA9IHRydWU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtYWNoaW5lX19oaXRfYWxsX2Rzb3Moc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IF9fZHNvc19faGl0X2FsbCgmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiBfX2Rzb3NfX2hpdF9hbGwoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkKTsKLX0KLQotaW50IGRzb3NfX2hpdF9hbGwoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmQ7Ci0JaW50IGVycjsKLQotCWVyciA9IG1hY2hpbmVfX2hpdF9hbGxfZHNvcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7Ci0KLQkJZXJyID0gbWFjaGluZV9faGl0X2FsbF9kc29zKHBvcyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAotCQkJCSAgICAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKLQkJCQkgICAgICAgcGlkX3QgcGlkLCB1MTYgbWlzYywgaW50IGZkKQotewotCWNoYXIgbm1bUEFUSF9NQVhdOwotCXN0cnVjdCBkc28gKnBvczsKLQotCWRzb3NfX2Zvcl9lYWNoX3dpdGhfYnVpbGRfaWQocG9zLCBoZWFkKSB7Ci0JCWludCBlcnI7Ci0JCWNvbnN0IGNoYXIgKm5hbWU7Ci0JCXNpemVfdCBuYW1lX2xlbjsKLQotCQlpZiAoIXBvcy0+aGl0KQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRzb19faXNfdmRzbyhwb3MpKSB7Ci0JCQluYW1lID0gcG9zLT5zaG9ydF9uYW1lOwotCQkJbmFtZV9sZW4gPSBwb3MtPnNob3J0X25hbWVfbGVuICsgMTsKLQkJfSBlbHNlIGlmIChkc29fX2lzX2tjb3JlKHBvcykpIHsKLQkJCW1hY2hpbmVfX21tYXBfbmFtZShtYWNoaW5lLCBubSwgc2l6ZW9mKG5tKSk7Ci0JCQluYW1lID0gbm07Ci0JCQluYW1lX2xlbiA9IHN0cmxlbihubSkgKyAxOwotCQl9IGVsc2UgewotCQkJbmFtZSA9IHBvcy0+bG9uZ19uYW1lOwotCQkJbmFtZV9sZW4gPSBwb3MtPmxvbmdfbmFtZV9sZW4gKyAxOwotCQl9Ci0KLQkJZXJyID0gd3JpdGVfYnVpbGRpZChuYW1lLCBuYW1lX2xlbiwgcG9zLT5idWlsZF9pZCwKLQkJCQkgICAgcGlkLCBtaXNjLCBmZCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1hY2hpbmVfX3dyaXRlX2J1aWxkaWRfdGFibGUoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGludCBmZCkKLXsKLQlpbnQgZXJyOwotCXUxNiBrbWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMLAotCSAgICB1bWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfVVNFUjsKLQotCWlmICghbWFjaGluZV9faXNfaG9zdChtYWNoaW5lKSkgewotCQlrbWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfS0VSTkVMOwotCQl1bWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfVVNFUjsKLQl9Ci0KLQllcnIgPSBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIG1hY2hpbmUsCi0JCQkJCSAgbWFjaGluZS0+cGlkLCBrbWlzYywgZmQpOwotCWlmIChlcnIgPT0gMCkKLQkJZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZtYWNoaW5lLT51c2VyX2Rzb3MuaGVhZCwKLQkJCQkJCSAgbWFjaGluZSwgbWFjaGluZS0+cGlkLCB1bWlzYywKLQkJCQkJCSAgZmQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlciwgaW50IGZkKQotewotCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBjb250YWluZXJfb2YoaGVhZGVyLAotCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiwgaGVhZGVyKTsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmQ7Ci0JaW50IGVyciA9IG1hY2hpbmVfX3dyaXRlX2J1aWxkaWRfdGFibGUoJnNlc3Npb24tPm1hY2hpbmVzLmhvc3QsIGZkKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlmb3IgKG5kID0gcmJfZmlyc3QoJnNlc3Npb24tPm1hY2hpbmVzLmd1ZXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7Ci0JCXN0cnVjdCBtYWNoaW5lICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hY2hpbmUsIHJiX25vZGUpOwotCQllcnIgPSBtYWNoaW5lX193cml0ZV9idWlsZGlkX3RhYmxlKHBvcywgZmQpOwotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBidWlsZF9pZF9jYWNoZV9fYWRkX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKLQkJCSAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBpc19rYWxsc3ltcywgYm9vbCBpc192ZHNvKQotewotCWNvbnN0IHNpemVfdCBzaXplID0gUEFUSF9NQVg7Ci0JY2hhciAqcmVhbG5hbWUsICpmaWxlbmFtZSA9IHphbGxvYyhzaXplKSwKLQkgICAgICpsaW5rbmFtZSA9IHphbGxvYyhzaXplKSwgKnRhcmdldG5hbWU7Ci0JaW50IGxlbiwgZXJyID0gLTE7Ci0JYm9vbCBzbGFzaCA9IGlzX2thbGxzeW1zIHx8IGlzX3Zkc287Ci0KLQlpZiAoaXNfa2FsbHN5bXMpIHsKLQkJaWYgKHN5bWJvbF9jb25mLmtwdHJfcmVzdHJpY3QpIHsKLQkJCXByX2RlYnVnKCJOb3QgY2FjaGluZyBhIGtwdHJfcmVzdHJpY3QnZWQgL3Byb2Mva2FsbHN5bXNcbiIpOwotCQkJZXJyID0gMDsKLQkJCWdvdG8gb3V0X2ZyZWU7Ci0JCX0KLQkJcmVhbG5hbWUgPSAoY2hhciAqKSBuYW1lOwotCX0gZWxzZQotCQlyZWFsbmFtZSA9IHJlYWxwYXRoKG5hbWUsIE5VTEwpOwotCi0JaWYgKHJlYWxuYW1lID09IE5VTEwgfHwgZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5rbmFtZSA9PSBOVUxMKQotCQlnb3RvIG91dF9mcmVlOwotCi0JbGVuID0gc2NucHJpbnRmKGZpbGVuYW1lLCBzaXplLCAiJXMlcyVzIiwKLQkJICAgICAgIGRlYnVnZGlyLCBzbGFzaCA/ICIvIiA6ICIiLAotCQkgICAgICAgaXNfdmRzbyA/IERTT19fTkFNRV9WRFNPIDogcmVhbG5hbWUpOwotCWlmIChta2Rpcl9wKGZpbGVuYW1lLCAwNzU1KSkKLQkJZ290byBvdXRfZnJlZTsKLQotCXNucHJpbnRmKGZpbGVuYW1lICsgbGVuLCBzaXplIC0gbGVuLCAiLyVzIiwgc2J1aWxkX2lkKTsKLQotCWlmIChhY2Nlc3MoZmlsZW5hbWUsIEZfT0spKSB7Ci0JCWlmIChpc19rYWxsc3ltcykgewotCQkJIGlmIChjb3B5ZmlsZSgiL3Byb2Mva2FsbHN5bXMiLCBmaWxlbmFtZSkpCi0JCQkJZ290byBvdXRfZnJlZTsKLQkJfSBlbHNlIGlmIChsaW5rKHJlYWxuYW1lLCBmaWxlbmFtZSkgJiYgY29weWZpbGUobmFtZSwgZmlsZW5hbWUpKQotCQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KLQlsZW4gPSBzY25wcmludGYobGlua25hbWUsIHNpemUsICIlcy8uYnVpbGQtaWQvJS4ycyIsCi0JCSAgICAgICBkZWJ1Z2Rpciwgc2J1aWxkX2lkKTsKLQotCWlmIChhY2Nlc3MobGlua25hbWUsIFhfT0spICYmIG1rZGlyX3AobGlua25hbWUsIDA3NTUpKQotCQlnb3RvIG91dF9mcmVlOwotCi0Jc25wcmludGYobGlua25hbWUgKyBsZW4sIHNpemUgLSBsZW4sICIvJXMiLCBzYnVpbGRfaWQgKyAyKTsKLQl0YXJnZXRuYW1lID0gZmlsZW5hbWUgKyBzdHJsZW4oZGVidWdkaXIpIC0gNTsKLQltZW1jcHkodGFyZ2V0bmFtZSwgIi4uLy4uIiwgNSk7Ci0KLQlpZiAoc3ltbGluayh0YXJnZXRuYW1lLCBsaW5rbmFtZSkgPT0gMCkKLQkJZXJyID0gMDsKLW91dF9mcmVlOgotCWlmICghaXNfa2FsbHN5bXMpCi0JCWZyZWUocmVhbG5hbWUpOwotCWZyZWUoZmlsZW5hbWUpOwotCWZyZWUobGlua25hbWUpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9iKGNvbnN0IHU4ICpidWlsZF9pZCwgc2l6ZV90IGJ1aWxkX2lkX3NpemUsCi0JCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlYnVnZGlyLAotCQkJCSBib29sIGlzX2thbGxzeW1zLCBib29sIGlzX3Zkc28pCi17Ci0JY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKLQotCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBidWlsZF9pZF9zaXplLCBzYnVpbGRfaWQpOwotCi0JcmV0dXJuIGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhzYnVpbGRfaWQsIGRlYnVnZGlyLCBuYW1lLAotCQkJCSAgICAgaXNfa2FsbHN5bXMsIGlzX3Zkc28pOwotfQotCi1pbnQgYnVpbGRfaWRfY2FjaGVfX3JlbW92ZV9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIpCi17Ci0JY29uc3Qgc2l6ZV90IHNpemUgPSBQQVRIX01BWDsKLQljaGFyICpmaWxlbmFtZSA9IHphbGxvYyhzaXplKSwKLQkgICAgICpsaW5rbmFtZSA9IHphbGxvYyhzaXplKTsKLQlpbnQgZXJyID0gLTE7Ci0KLQlpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5rbmFtZSA9PSBOVUxMKQotCQlnb3RvIG91dF9mcmVlOwotCi0Jc25wcmludGYobGlua25hbWUsIHNpemUsICIlcy8uYnVpbGQtaWQvJS4ycy8lcyIsCi0JCSBkZWJ1Z2Rpciwgc2J1aWxkX2lkLCBzYnVpbGRfaWQgKyAyKTsKLQotCWlmIChhY2Nlc3MobGlua25hbWUsIEZfT0spKQotCQlnb3RvIG91dF9mcmVlOwotCi0JaWYgKHJlYWRsaW5rKGxpbmtuYW1lLCBmaWxlbmFtZSwgc2l6ZSAtIDEpIDwgMCkKLQkJZ290byBvdXRfZnJlZTsKLQotCWlmICh1bmxpbmsobGlua25hbWUpKQotCQlnb3RvIG91dF9mcmVlOwotCi0JLyoKLQkgKiBTaW5jZSB0aGUgbGluayBpcyByZWxhdGl2ZSwgd2UgbXVzdCBtYWtlIGl0IGFic29sdXRlOgotCSAqLwotCXNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAotCQkgZGVidWdkaXIsIHNidWlsZF9pZCwgZmlsZW5hbWUpOwotCi0JaWYgKHVubGluayhsaW5rbmFtZSkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQllcnIgPSAwOwotb3V0X2ZyZWU6Ci0JZnJlZShmaWxlbmFtZSk7Ci0JZnJlZShsaW5rbmFtZSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkc29fX2NhY2hlX2J1aWxkX2lkKHN0cnVjdCBkc28gKmRzbywgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCi0JCQkgICAgICAgY29uc3QgY2hhciAqZGVidWdkaXIpCi17Ci0JYm9vbCBpc19rYWxsc3ltcyA9IGRzby0+a2VybmVsICYmIGRzby0+bG9uZ19uYW1lWzBdICE9ICcvJzsKLQlib29sIGlzX3Zkc28gPSBkc29fX2lzX3Zkc28oZHNvKTsKLQljb25zdCBjaGFyICpuYW1lID0gZHNvLT5sb25nX25hbWU7Ci0JY2hhciBubVtQQVRIX01BWF07Ci0KLQlpZiAoZHNvX19pc19rY29yZShkc28pKSB7Ci0JCWlzX2thbGxzeW1zID0gdHJ1ZTsKLQkJbWFjaGluZV9fbW1hcF9uYW1lKG1hY2hpbmUsIG5tLCBzaXplb2Yobm0pKTsKLQkJbmFtZSA9IG5tOwotCX0KLQlyZXR1cm4gYnVpbGRfaWRfY2FjaGVfX2FkZF9iKGRzby0+YnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSwgbmFtZSwKLQkJCQkgICAgIGRlYnVnZGlyLCBpc19rYWxsc3ltcywgaXNfdmRzbyk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kc29zX19jYWNoZV9idWlsZF9pZHMoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKLQkJCQkgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgY29uc3QgY2hhciAqZGVidWdkaXIpCi17Ci0Jc3RydWN0IGRzbyAqcG9zOwotCWludCBlcnIgPSAwOwotCi0JZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpCi0JCWlmIChkc29fX2NhY2hlX2J1aWxkX2lkKHBvcywgbWFjaGluZSwgZGVidWdkaXIpKQotCQkJZXJyID0gLTE7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG1hY2hpbmVfX2NhY2hlX2J1aWxkX2lkcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgY29uc3QgY2hhciAqZGVidWdkaXIpCi17Ci0JaW50IHJldCA9IF9fZHNvc19fY2FjaGVfYnVpbGRfaWRzKCZtYWNoaW5lLT5rZXJuZWxfZHNvcy5oZWFkLCBtYWNoaW5lLAotCQkJCQkgIGRlYnVnZGlyKTsKLQlyZXQgfD0gX19kc29zX19jYWNoZV9idWlsZF9pZHMoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkLCBtYWNoaW5lLAotCQkJCSAgICAgICBkZWJ1Z2Rpcik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX2NhY2hlX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQotewotCXN0cnVjdCByYl9ub2RlICpuZDsKLQlpbnQgcmV0OwotCWNoYXIgZGVidWdkaXJbUEFUSF9NQVhdOwotCi0Jc25wcmludGYoZGVidWdkaXIsIHNpemVvZihkZWJ1Z2RpciksICIlcyIsIGJ1aWxkaWRfZGlyKTsKLQotCWlmIChta2RpcihkZWJ1Z2RpciwgMDc1NSkgIT0gMCAmJiBlcnJubyAhPSBFRVhJU1QpCi0JCXJldHVybiAtMTsKLQotCXJldCA9IG1hY2hpbmVfX2NhY2hlX2J1aWxkX2lkcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgZGVidWdkaXIpOwotCi0JZm9yIChuZCA9IHJiX2ZpcnN0KCZzZXNzaW9uLT5tYWNoaW5lcy5ndWVzdHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewotCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKLQkJcmV0IHw9IG1hY2hpbmVfX2NhY2hlX2J1aWxkX2lkcyhwb3MsIGRlYnVnZGlyKTsKLQl9Ci0JcmV0dXJuIHJldCA/IC0xIDogMDsKLX0KLQotc3RhdGljIGJvb2wgbWFjaGluZV9fcmVhZF9idWlsZF9pZHMoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGJvb2wgd2l0aF9oaXRzKQotewotCWJvb2wgcmV0OwotCi0JcmV0ICA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIHdpdGhfaGl0cyk7Ci0JcmV0IHw9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkLCB3aXRoX2hpdHMpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBib29sIHBlcmZfc2Vzc2lvbl9fcmVhZF9idWlsZF9pZHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgYm9vbCB3aXRoX2hpdHMpCi17Ci0Jc3RydWN0IHJiX25vZGUgKm5kOwotCWJvb2wgcmV0ID0gbWFjaGluZV9fcmVhZF9idWlsZF9pZHMoJnNlc3Npb24tPm1hY2hpbmVzLmhvc3QsIHdpdGhfaGl0cyk7Ci0KLQlmb3IgKG5kID0gcmJfZmlyc3QoJnNlc3Npb24tPm1hY2hpbmVzLmd1ZXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7Ci0JCXN0cnVjdCBtYWNoaW5lICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hY2hpbmUsIHJiX25vZGUpOwotCQlyZXQgfD0gbWFjaGluZV9fcmVhZF9idWlsZF9pZHMocG9zLCB3aXRoX2hpdHMpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgd3JpdGVfdHJhY2luZ19kYXRhKGludCBmZCwgc3RydWN0IHBlcmZfaGVhZGVyICpoIF9fbWF5YmVfdW51c2VkLAogCQkJICAgIHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQogewpAQCAtNTIzLDEzICsxODQsMTIgQEAKIAlpZiAoIXBlcmZfc2Vzc2lvbl9fcmVhZF9idWlsZF9pZHMoc2Vzc2lvbiwgdHJ1ZSkpCiAJCXJldHVybiAtMTsKIAotCWVyciA9IGRzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoaCwgZmQpOworCWVyciA9IHBlcmZfc2Vzc2lvbl9fd3JpdGVfYnVpbGRpZF90YWJsZShzZXNzaW9uLCBmZCk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJfZGVidWcoImZhaWxlZCB0byB3cml0ZSBidWlsZGlkIHRhYmxlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKCFub19idWlsZGlkX2NhY2hlKQotCQlwZXJmX3Nlc3Npb25fX2NhY2hlX2J1aWxkX2lkcyhzZXNzaW9uKTsKKwlwZXJmX3Nlc3Npb25fX2NhY2hlX2J1aWxkX2lkcyhzZXNzaW9uKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjAxLDggKzI2MSwxMCBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCXJldCA9IC0xOwogCQlnb3RvIGRvbmU7CisJfQogCiAJcyA9IGJ1ZjsKIApAQCAtOTY1LDcgKzYyNyw4IEBACiAJCW4gPSBzc2NhbmYoYnVmLCAiJSpzICUiUFJJdTY0LCAmbWVtKTsKIAkJaWYgKG4gPT0gMSkKIAkJCXJldCA9IGRvX3dyaXRlKGZkLCAmbWVtLCBzaXplb2YobWVtKSk7Ci0JfQorCX0gZWxzZQorCQlyZXQgPSAtMTsKIAlmcmVlKGJ1Zik7CiAJZmNsb3NlKGZwKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTYwMyw3ICsxMjY2LDcgQEAKIAogCQlkc29fX3NldF9idWlsZF9pZChkc28sICZiZXYtPmJ1aWxkX2lkKTsKIAotCQlpZiAoZmlsZW5hbWVbMF0gPT0gJ1snKQorCQlpZiAoIWlzX2tlcm5lbF9tb2R1bGUoZmlsZW5hbWUsIE5VTEwpKQogCQkJZHNvLT5rZXJuZWwgPSBkc29fdHlwZTsKIAogCQlidWlsZF9pZF9fc3ByaW50Zihkc28tPmJ1aWxkX2lkLCBzaXplb2YoZHNvLT5idWlsZF9pZCksCkBAIC0yNDc3LDYgKzIxNDAsNyBAQAogCVsxXSA9IFBFUkZfQVRUUl9TSVpFX1ZFUjEsCiAJWzJdID0gUEVSRl9BVFRSX1NJWkVfVkVSMiwKIAlbM10gPSBQRVJGX0FUVFJfU0laRV9WRVIzLAorCVs0XSA9IFBFUkZfQVRUUl9TSVpFX1ZFUjQsCiAJMCwKIH07CiAKQEAgLTMxMjQsOCArMjc4OCwzIEBACiAJCQkJIHNlc3Npb24pOwogCXJldHVybiAwOwogfQotCi12b2lkIGRpc2FibGVfYnVpbGRpZF9jYWNoZSh2b2lkKQotewotCW5vX2J1aWxkaWRfY2FjaGUgPSB0cnVlOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCmluZGV4IDhmNWNiYWUuLjNiYjkwYWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKQEAgLTEyMiwxMCArMTIyLDYgQEAKIAogaW50IHBlcmZfaGVhZGVyX19mcHJpbnRmX2luZm8oc3RydWN0IHBlcmZfc2Vzc2lvbiAqcywgRklMRSAqZnAsIGJvb2wgZnVsbCk7CiAKLWludCBidWlsZF9pZF9jYWNoZV9fYWRkX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKLQkJCSAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBpc19rYWxsc3ltcywgYm9vbCBpc192ZHNvKTsKLWludCBidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2Rpcik7Ci0KIGludCBwZXJmX2V2ZW50X19zeW50aGVzaXplX2F0dHIoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCwKIAkJCQlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLCB1MzIgaWRzLCB1NjQgKmlkLAogCQkJCXBlcmZfZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzKTsKQEAgLTE1MSw3ICsxNDcsOSBAQAogCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIGJvb2wgaXNfcGVyZl9tYWdpYyh1NjQgbWFnaWMpOwogCi1pbnQgZHNvc19faGl0X2FsbChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKKyNkZWZpbmUgTkFNRV9BTElHTiA2NAorCitpbnQgd3JpdGVfcGFkZGVkKGludCBmZCwgY29uc3Qgdm9pZCAqYmYsIHNpemVfdCBjb3VudCwgc2l6ZV90IGNvdW50X2FsaWduZWQpOwogCiAvKgogICogYXJjaCBzcGVjaWZpYyBjYWxsYmFjawpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0bWFwLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaAppbmRleCAwMWZmZDEyLi40MGJkMjE0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaApAQCAtNDYsNCArNDYsMjEgQEAKIAkJX19iaXRtYXBfb3IoZHN0LCBzcmMxLCBzcmMyLCBuYml0cyk7CiB9CiAKKy8qKgorICogdGVzdF9hbmRfc2V0X2JpdCAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRfTUFTSyhucik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUX1dPUkQobnIpOworCXVuc2lnbmVkIGxvbmcgb2xkOworCisJb2xkID0gKnA7CisJKnAgPSBvbGQgfCBtYXNrOworCisJcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOworfQorCiAjZW5kaWYgLyogX1BFUkZfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggZGFkZmE3ZS4uYzMyOTQxNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTE1LDYgKzE1LDggQEAKICNkZWZpbmUgQklUU19UT19VNjQobnIpICAgICAgICAgRElWX1JPVU5EX1VQKG5yLCBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHU2NCkpCiAjZGVmaW5lIEJJVFNfVE9fVTMyKG5yKSAgICAgICAgIERJVl9ST1VORF9VUChuciwgQklUU19QRVJfQllURSAqIHNpemVvZih1MzIpKQogI2RlZmluZSBCSVRTX1RPX0JZVEVTKG5yKSAgICAgICBESVZfUk9VTkRfVVAobnIsIEJJVFNfUEVSX0JZVEUpCisjZGVmaW5lIEJJVF9XT1JEKG5yKSAgICAgICAgICAgICgobnIpIC8gQklUU19QRVJfTE9ORykKKyNkZWZpbmUgQklUX01BU0sobnIpICAgICAgICAgICAgKDFVTCA8PCAoKG5yKSAlIEJJVFNfUEVSX0xPTkcpKQogCiAjZGVmaW5lIGZvcl9lYWNoX3NldF9iaXQoYml0LCBhZGRyLCBzaXplKSBcCiAJZm9yICgoYml0KSA9IGZpbmRfZmlyc3RfYml0KChhZGRyKSwgKHNpemUpKTsJCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMgYi90b29scy9wZXJmL3V0aWwvbWFjaGluZS5jCmluZGV4IDM0ZmM3YzguLjE1ZGQwYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICNpbmNsdWRlIDxzeW1ib2wva2FsbHN5bXMuaD4KICNpbmNsdWRlICJ1bndpbmQuaCIKKyNpbmNsdWRlICJsaW51eC9oYXNoLmgiCiAKIHN0YXRpYyB2b2lkIGRzb3NfX2luaXQoc3RydWN0IGRzb3MgKmRzb3MpCiB7CkBAIC0yMSw3ICsyMiw3IEBACiAKIGludCBtYWNoaW5lX19pbml0KHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBjb25zdCBjaGFyICpyb290X2RpciwgcGlkX3QgcGlkKQogewotCW1hcF9ncm91cHNfX2luaXQoJm1hY2hpbmUtPmttYXBzKTsKKwltYXBfZ3JvdXBzX19pbml0KCZtYWNoaW5lLT5rbWFwcywgbWFjaGluZSk7CiAJUkJfQ0xFQVJfTk9ERSgmbWFjaGluZS0+cmJfbm9kZSk7CiAJZHNvc19faW5pdCgmbWFjaGluZS0+dXNlcl9kc29zKTsKIAlkc29zX19pbml0KCZtYWNoaW5lLT5rZXJuZWxfZHNvcyk7CkBAIC0zMiw3ICszMyw2IEBACiAKIAltYWNoaW5lLT52ZHNvX2luZm8gPSBOVUxMOwogCi0JbWFjaGluZS0+a21hcHMubWFjaGluZSA9IG1hY2hpbmU7CiAJbWFjaGluZS0+cGlkID0gcGlkOwogCiAJbWFjaGluZS0+c3ltYm9sX2ZpbHRlciA9IE5VTEw7CkBAIC0zMTksNyArMzE5LDcgQEAKIAkJZ290byBvdXRfZXJyOwogCiAJaWYgKCFsZWFkZXItPm1nKQotCQlsZWFkZXItPm1nID0gbWFwX2dyb3Vwc19fbmV3KCk7CisJCWxlYWRlci0+bWcgPSBtYXBfZ3JvdXBzX19uZXcobWFjaGluZSk7CiAKIAlpZiAoIWxlYWRlci0+bWcpCiAJCWdvdG8gb3V0X2VycjsKQEAgLTQ2NSw2ICs0NjUsNyBAQAogewogCXN0cnVjdCBtYXAgKm1hcDsKIAlzdHJ1Y3QgZHNvICpkc28gPSBfX2Rzb3NfX2ZpbmRuZXcoJm1hY2hpbmUtPmtlcm5lbF9kc29zLCBmaWxlbmFtZSk7CisJYm9vbCBjb21wcmVzc2VkOwogCiAJaWYgKGRzbyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTQ3Nyw2ICs0NzgsMTEgQEAKIAkJZHNvLT5zeW10YWJfdHlwZSA9IERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRTsKIAllbHNlCiAJCWRzby0+c3ltdGFiX3R5cGUgPSBEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEU7CisKKwkvKiBfS01PRFVMRV9DT01QIHNob3VsZCBiZSBuZXh0IHRvIF9LTU9EVUxFICovCisJaWYgKGlzX2tlcm5lbF9tb2R1bGUoZmlsZW5hbWUsICZjb21wcmVzc2VkKSAmJiBjb21wcmVzc2VkKQorCQlkc28tPnN5bXRhYl90eXBlKys7CisKIAltYXBfZ3JvdXBzX19pbnNlcnQoJm1hY2hpbmUtPmttYXBzLCBtYXApOwogCXJldHVybiBtYXA7CiB9CkBAIC04NjIsOCArODY4LDE0IEBACiAJCQlzdHJ1Y3QgbWFwICptYXA7CiAJCQljaGFyICpsb25nX25hbWU7CiAKLQkJCWlmIChkb3QgPT0gTlVMTCB8fCBzdHJjbXAoZG90LCAiLmtvIikpCisJCQlpZiAoZG90ID09IE5VTEwpCiAJCQkJY29udGludWU7CisKKwkJCS8qIE9uIHNvbWUgc3lzdGVtLCBtb2R1bGVzIGFyZSBjb21wcmVzc2VkIGxpa2UgLmtvLmd6ICovCisJCQlpZiAoaXNfc3VwcG9ydGVkX2NvbXByZXNzaW9uKGRvdCArIDEpICYmCisJCQkgICAgaXNfa21vZHVsZV9leHRlbnNpb24oZG90IC0gMikpCisJCQkJZG90IC09IDM7CisKIAkJCXNucHJpbnRmKGRzb19uYW1lLCBzaXplb2YoZHNvX25hbWUpLCAiWyUuKnNdIiwKIAkJCQkgKGludCkoZG90IC0gZGVudC0+ZF9uYW1lKSwgZGVudC0+ZF9uYW1lKTsKIApAQCAtMTA0NSw2ICsxMDU3LDExIEBACiAJCQlkb3QgPSBzdHJyY2hyKG5hbWUsICcuJyk7CiAJCQlpZiAoZG90ID09IE5VTEwpCiAJCQkJZ290byBvdXRfcHJvYmxlbTsKKwkJCS8qIE9uIHNvbWUgc3lzdGVtLCBtb2R1bGVzIGFyZSBjb21wcmVzc2VkIGxpa2UgLmtvLmd6ICovCisJCQlpZiAoaXNfc3VwcG9ydGVkX2NvbXByZXNzaW9uKGRvdCArIDEpKQorCQkJCWRvdCAtPSAzOworCQkJaWYgKCFpc19rbW9kdWxlX2V4dGVuc2lvbihkb3QgKyAxKSkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOwogCQkJc25wcmludGYoc2hvcnRfbW9kdWxlX25hbWUsIHNpemVvZihzaG9ydF9tb2R1bGVfbmFtZSksCiAJCQkJCSJbJS4qc10iLCAoaW50KShkb3QgLSBuYW1lKSwgbmFtZSk7CiAJCQlzdHJ4ZnJjaGFyKHNob3J0X21vZHVsZV9uYW1lLCAnLScsICdfJyk7CkBAIC0xMDY5LDggKzEwODYsMjAgQEAKIAkJICogU2hvdWxkIGJlIHRoZXJlIGFscmVhZHksIGZyb20gdGhlIGJ1aWxkLWlkIHRhYmxlIGluCiAJCSAqIHRoZSBoZWFkZXIuCiAJCSAqLwotCQlzdHJ1Y3QgZHNvICprZXJuZWwgPSBfX2Rzb3NfX2ZpbmRuZXcoJm1hY2hpbmUtPmtlcm5lbF9kc29zLAotCQkJCQkJICAgICBrbW1hcF9wcmVmaXgpOworCQlzdHJ1Y3QgZHNvICprZXJuZWwgPSBOVUxMOworCQlzdHJ1Y3QgZHNvICpkc287CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkc28sICZtYWNoaW5lLT5rZXJuZWxfZHNvcy5oZWFkLCBub2RlKSB7CisJCQlpZiAoaXNfa2VybmVsX21vZHVsZShkc28tPmxvbmdfbmFtZSwgTlVMTCkpCisJCQkJY29udGludWU7CisKKwkJCWtlcm5lbCA9IGRzbzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGtlcm5lbCA9PSBOVUxMKQorCQkJa2VybmVsID0gX19kc29zX19maW5kbmV3KCZtYWNoaW5lLT5rZXJuZWxfZHNvcywKKwkJCQkJCSBrbW1hcF9wcmVmaXgpOwogCQlpZiAoa2VybmVsID09IE5VTEwpCiAJCQlnb3RvIG91dF9wcm9ibGVtOwogCkBAIC0xMDc4LDYgKzExMDcsOSBAQAogCQlpZiAoX19tYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMobWFjaGluZSwga2VybmVsKSA8IDApCiAJCQlnb3RvIG91dF9wcm9ibGVtOwogCisJCWlmIChzdHJzdHIoa2VybmVsLT5sb25nX25hbWUsICJ2bWxpbnV4IikpCisJCQlkc29fX3NldF9zaG9ydF9uYW1lKGtlcm5lbCwgIltrZXJuZWwudm1saW51eF0iLCBmYWxzZSk7CisKIAkJbWFjaGluZV9fc2V0X2tlcm5lbF9tbWFwX2xlbihtYWNoaW5lLCBldmVudCk7CiAKIAkJLyoKQEAgLTEyOTAsNyArMTMyMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlwX19yZXNvbHZlX2FtcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorc3RhdGljIHZvaWQgaXBfX3Jlc29sdmVfYW1zKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCSAgICBzdHJ1Y3QgYWRkcl9tYXBfc3ltYm9sICphbXMsCiAJCQkgICAgdTY0IGlwKQogewpAQCAtMTMwNCw3ICsxMzM2LDcgQEAKIAkgKiBUaHVzLCB3ZSBoYXZlIHRvIHRyeSBjb25zZWN1dGl2ZWx5IHVudGlsIHdlIGZpbmQgYSBtYXRjaAogCSAqIG9yIGVsc2UsIHRoZSBzeW1ib2wgaXMgdW5rbm93bgogCSAqLwotCXRocmVhZF9fZmluZF9jcHVtb2RlX2FkZHJfbG9jYXRpb24odGhyZWFkLCBtYWNoaW5lLCBNQVBfX0ZVTkNUSU9OLCBpcCwgJmFsKTsKKwl0aHJlYWRfX2ZpbmRfY3B1bW9kZV9hZGRyX2xvY2F0aW9uKHRocmVhZCwgTUFQX19GVU5DVElPTiwgaXAsICZhbCk7CiAKIAlhbXMtPmFkZHIgPSBpcDsKIAlhbXMtPmFsX2FkZHIgPSBhbC5hZGRyOwpAQCAtMTMxMiwyMyArMTM0NCwyMSBAQAogCWFtcy0+bWFwID0gYWwubWFwOwogfQogCi1zdGF0aWMgdm9pZCBpcF9fcmVzb2x2ZV9kYXRhKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCitzdGF0aWMgdm9pZCBpcF9fcmVzb2x2ZV9kYXRhKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCSAgICAgdTggbSwgc3RydWN0IGFkZHJfbWFwX3N5bWJvbCAqYW1zLCB1NjQgYWRkcikKIHsKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAogCW1lbXNldCgmYWwsIDAsIHNpemVvZihhbCkpOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBtYWNoaW5lLCBtLCBNQVBfX1ZBUklBQkxFLCBhZGRyLAotCQkJCSAgICZhbCk7CisJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBtLCBNQVBfX1ZBUklBQkxFLCBhZGRyLCAmYWwpOwogCWlmIChhbC5tYXAgPT0gTlVMTCkgewogCQkvKgogCQkgKiBzb21lIHNoYXJlZCBkYXRhIHJlZ2lvbnMgaGF2ZSBleGVjdXRlIGJpdCBzZXQgd2hpY2ggcHV0cwogCQkgKiB0aGVpciBtYXBwaW5nIGluIHRoZSBNQVBfX0ZVTkNUSU9OIHR5cGUgYXJyYXkuCiAJCSAqIENoZWNrIHRoZXJlIGFzIGEgZmFsbGJhY2sgb3B0aW9uIGJlZm9yZSBkcm9wcGluZyB0aGUgc2FtcGxlLgogCQkgKi8KLQkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBtYWNoaW5lLCBtLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLAotCQkJCQkgICAmYWwpOworCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG0sIE1BUF9fRlVOQ1RJT04sIGFkZHIsICZhbCk7CiAJfQogCiAJYW1zLT5hZGRyID0gYWRkcjsKQEAgLTEzNDUsMTQgKzEzNzUsNDUgQEAKIAlpZiAoIW1pKQogCQlyZXR1cm4gTlVMTDsKIAotCWlwX19yZXNvbHZlX2FtcyhhbC0+bWFjaGluZSwgYWwtPnRocmVhZCwgJm1pLT5pYWRkciwgc2FtcGxlLT5pcCk7Ci0JaXBfX3Jlc29sdmVfZGF0YShhbC0+bWFjaGluZSwgYWwtPnRocmVhZCwgYWwtPmNwdW1vZGUsCi0JCQkgJm1pLT5kYWRkciwgc2FtcGxlLT5hZGRyKTsKKwlpcF9fcmVzb2x2ZV9hbXMoYWwtPnRocmVhZCwgJm1pLT5pYWRkciwgc2FtcGxlLT5pcCk7CisJaXBfX3Jlc29sdmVfZGF0YShhbC0+dGhyZWFkLCBhbC0+Y3B1bW9kZSwgJm1pLT5kYWRkciwgc2FtcGxlLT5hZGRyKTsKIAltaS0+ZGF0YV9zcmMudmFsID0gc2FtcGxlLT5kYXRhX3NyYzsKIAogCXJldHVybiBtaTsKIH0KIAorc3RhdGljIGludCBhZGRfY2FsbGNoYWluX2lwKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCSAgICBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50LAorCQkJICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICpyb290X2FsLAorCQkJICAgIGludCBjcHVtb2RlLAorCQkJICAgIHU2NCBpcCkKK3sKKwlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKKworCWFsLmZpbHRlcmVkID0gMDsKKwlhbC5zeW0gPSBOVUxMOworCWlmIChjcHVtb2RlID09IC0xKQorCQl0aHJlYWRfX2ZpbmRfY3B1bW9kZV9hZGRyX2xvY2F0aW9uKHRocmVhZCwgTUFQX19GVU5DVElPTiwKKwkJCQkJCSAgIGlwLCAmYWwpOworCWVsc2UKKwkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAorCQkJCSAgIGlwLCAmYWwpOworCWlmIChhbC5zeW0gIT0gTlVMTCkgeworCQlpZiAoc29ydF9faGFzX3BhcmVudCAmJiAhKnBhcmVudCAmJgorCQkgICAgc3ltYm9sX19tYXRjaF9yZWdleChhbC5zeW0sICZwYXJlbnRfcmVnZXgpKQorCQkJKnBhcmVudCA9IGFsLnN5bTsKKwkJZWxzZSBpZiAoaGF2ZV9pZ25vcmVfY2FsbGVlcyAmJiByb290X2FsICYmCisJCSAgc3ltYm9sX19tYXRjaF9yZWdleChhbC5zeW0sICZpZ25vcmVfY2FsbGVlc19yZWdleCkpIHsKKwkJCS8qIFRyZWF0IHRoaXMgc3ltYm9sIGFzIHRoZSByb290LAorCQkJICAgZm9yZ2V0dGluZyBpdHMgY2FsbGVlcy4gKi8KKwkJCSpyb290X2FsID0gYWw7CisJCQljYWxsY2hhaW5fY3Vyc29yX3Jlc2V0KCZjYWxsY2hhaW5fY3Vyc29yKTsKKwkJfQorCX0KKworCXJldHVybiBjYWxsY2hhaW5fY3Vyc29yX2FwcGVuZCgmY2FsbGNoYWluX2N1cnNvciwgYWwuYWRkciwgYWwubWFwLCBhbC5zeW0pOworfQorCiBzdHJ1Y3QgYnJhbmNoX2luZm8gKnNhbXBsZV9fcmVzb2x2ZV9ic3RhY2soc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCiAJCQkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKQEAgLTEzNjQsMTYgKzE0MjUsNTcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYnMtPm5yOyBpKyspIHsKLQkJaXBfX3Jlc29sdmVfYW1zKGFsLT5tYWNoaW5lLCBhbC0+dGhyZWFkLCAmYmlbaV0udG8sIGJzLT5lbnRyaWVzW2ldLnRvKTsKLQkJaXBfX3Jlc29sdmVfYW1zKGFsLT5tYWNoaW5lLCBhbC0+dGhyZWFkLCAmYmlbaV0uZnJvbSwgYnMtPmVudHJpZXNbaV0uZnJvbSk7CisJCWlwX19yZXNvbHZlX2FtcyhhbC0+dGhyZWFkLCAmYmlbaV0udG8sIGJzLT5lbnRyaWVzW2ldLnRvKTsKKwkJaXBfX3Jlc29sdmVfYW1zKGFsLT50aHJlYWQsICZiaVtpXS5mcm9tLCBicy0+ZW50cmllc1tpXS5mcm9tKTsKIAkJYmlbaV0uZmxhZ3MgPSBicy0+ZW50cmllc1tpXS5mbGFnczsKIAl9CiAJcmV0dXJuIGJpOwogfQogCi1zdGF0aWMgaW50IG1hY2hpbmVfX3Jlc29sdmVfY2FsbGNoYWluX3NhbXBsZShzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKLQkJCQkJICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisjZGVmaW5lIENIQVNIU1ogMTI3CisjZGVmaW5lIENIQVNIQklUUyA3CisjZGVmaW5lIE5PX0VOVFJZIDB4ZmYKKworI2RlZmluZSBQRVJGX01BWF9CUkFOQ0hfREVQVEggMTI3CisKKy8qIFJlbW92ZSBsb29wcy4gKi8KK3N0YXRpYyBpbnQgcmVtb3ZlX2xvb3BzKHN0cnVjdCBicmFuY2hfZW50cnkgKmwsIGludCBucikKK3sKKwlpbnQgaSwgaiwgb2ZmOworCXVuc2lnbmVkIGNoYXIgY2hhc2hbQ0hBU0hTWl07CisKKwltZW1zZXQoY2hhc2gsIE5PX0VOVFJZLCBzaXplb2YoY2hhc2gpKTsKKworCUJVR19PTihQRVJGX01BWF9CUkFOQ0hfREVQVEggPiAyNTUpOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJaW50IGggPSBoYXNoXzY0KGxbaV0uZnJvbSwgQ0hBU0hCSVRTKSAlIENIQVNIU1o7CisKKwkJLyogbm8gY29sbGlzaW9uIGhhbmRsaW5nIGZvciBub3cgKi8KKwkJaWYgKGNoYXNoW2hdID09IE5PX0VOVFJZKSB7CisJCQljaGFzaFtoXSA9IGk7CisJCX0gZWxzZSBpZiAobFtjaGFzaFtoXV0uZnJvbSA9PSBsW2ldLmZyb20pIHsKKwkJCWJvb2wgaXNfbG9vcCA9IHRydWU7CisJCQkvKiBjaGVjayBpZiBpdCBpcyBhIHJlYWwgbG9vcCAqLworCQkJb2ZmID0gMDsKKwkJCWZvciAoaiA9IGNoYXNoW2hdOyBqIDwgaSAmJiBpICsgb2ZmIDwgbnI7IGorKywgb2ZmKyspCisJCQkJaWYgKGxbal0uZnJvbSAhPSBsW2kgKyBvZmZdLmZyb20pIHsKKwkJCQkJaXNfbG9vcCA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQlpZiAoaXNfbG9vcCkgeworCQkJCW1lbW1vdmUobCArIGksIGwgKyBpICsgb2ZmLAorCQkJCQkobnIgLSAoaSArIG9mZikpICogc2l6ZW9mKCpsKSk7CisJCQkJbnIgLT0gb2ZmOworCQkJfQorCQl9CisJfQorCXJldHVybiBucjsKK30KKworc3RhdGljIGludCB0aHJlYWRfX3Jlc29sdmVfY2FsbGNoYWluX3NhbXBsZShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCiAJCQkJCSAgICAgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sCisJCQkJCSAgICAgc3RydWN0IGJyYW5jaF9zdGFjayAqYnJhbmNoLAogCQkJCQkgICAgIHN0cnVjdCBzeW1ib2wgKipwYXJlbnQsCiAJCQkJCSAgICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKnJvb3RfYWwsCiAJCQkJCSAgICAgaW50IG1heF9zdGFjaykKQEAgLTEzODMsMjQgKzE0ODUsODMgQEAKIAlpbnQgaTsKIAlpbnQgajsKIAlpbnQgZXJyOwotCWludCBza2lwX2lkeCBfX21heWJlX3VudXNlZDsKLQotCWNhbGxjaGFpbl9jdXJzb3JfcmVzZXQoJmNhbGxjaGFpbl9jdXJzb3IpOwotCi0JaWYgKGNoYWluLT5uciA+IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSB7Ci0JCXByX3dhcm5pbmcoImNvcnJ1cHRlZCBjYWxsY2hhaW4uIHNraXBwaW5nLi4uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWludCBza2lwX2lkeCA9IC0xOworCWludCBmaXJzdF9jYWxsID0gMDsKIAogCS8qCiAJICogQmFzZWQgb24gRFdBUkYgZGVidWcgaW5mb3JtYXRpb24sIHNvbWUgYXJjaGl0ZWN0dXJlcyBza2lwCiAJICogYSBjYWxsY2hhaW4gZW50cnkgc2F2ZWQgYnkgdGhlIGtlcm5lbC4KIAkgKi8KLQlza2lwX2lkeCA9IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KG1hY2hpbmUsIHRocmVhZCwgY2hhaW4pOworCWlmIChjaGFpbi0+bnIgPCBQRVJGX01BWF9TVEFDS19ERVBUSCkKKwkJc2tpcF9pZHggPSBhcmNoX3NraXBfY2FsbGNoYWluX2lkeCh0aHJlYWQsIGNoYWluKTsKIAotCWZvciAoaSA9IDA7IGkgPCBjaGFpbl9ucjsgaSsrKSB7CisJY2FsbGNoYWluX2N1cnNvcl9yZXNldCgmY2FsbGNoYWluX2N1cnNvcik7CisKKwkvKgorCSAqIEFkZCBicmFuY2hlcyB0byBjYWxsIHN0YWNrIGZvciBlYXNpZXIgYnJvd3NpbmcuIFRoaXMgZ2l2ZXMKKwkgKiBtb3JlIGNvbnRleHQgZm9yIGEgc2FtcGxlIHRoYW4ganVzdCB0aGUgY2FsbGVycy4KKwkgKgorCSAqIFRoaXMgdXNlcyBpbmRpdmlkdWFsIGhpc3RvZ3JhbXMgb2YgcGF0aHMgY29tcGFyZWQgdG8gdGhlCisJICogYWdncmVnYXRlZCBoaXN0b2dyYW1zIHRoZSBub3JtYWwgTEJSIG1vZGUgdXNlcy4KKwkgKgorCSAqIExpbWl0YXRpb25zIGZvciBub3c6CisJICogLSBObyBleHRyYSBmaWx0ZXJzCisJICogLSBObyBhbm5vdGF0aW9ucyAoc2hvdWxkIGFubm90YXRlIHNvbWVob3cpCisJICovCisKKwlpZiAoYnJhbmNoICYmIGNhbGxjaGFpbl9wYXJhbS5icmFuY2hfY2FsbHN0YWNrKSB7CisJCWludCBuciA9IG1pbihtYXhfc3RhY2ssIChpbnQpYnJhbmNoLT5ucik7CisJCXN0cnVjdCBicmFuY2hfZW50cnkgYmVbbnJdOworCisJCWlmIChicmFuY2gtPm5yID4gUEVSRl9NQVhfQlJBTkNIX0RFUFRIKSB7CisJCQlwcl93YXJuaW5nKCJjb3JydXB0ZWQgYnJhbmNoIGNoYWluLiBza2lwcGluZy4uLlxuIik7CisJCQlnb3RvIGNoZWNrX2NhbGxzOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJCWlmIChjYWxsY2hhaW5fcGFyYW0ub3JkZXIgPT0gT1JERVJfQ0FMTEVFKSB7CisJCQkJYmVbaV0gPSBicmFuY2gtPmVudHJpZXNbaV07CisJCQkJLyoKKwkJCQkgKiBDaGVjayBmb3Igb3ZlcmxhcCBpbnRvIHRoZSBjYWxsY2hhaW4uCisJCQkJICogVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uZSBvZmYgY29tcGFyZWQgdG8KKwkJCQkgKiB0aGUgYnJhbmNoIGVudHJ5LiBUbyBhZGp1c3QgZm9yIHRoaXMKKwkJCQkgKiBhc3N1bWUgdGhlIGNhbGxpbmcgaW5zdHJ1Y3Rpb24gaXMgbm90IGxvbmdlcgorCQkJCSAqIHRoYW4gOCBieXRlcy4KKwkJCQkgKi8KKwkJCQlpZiAoaSA9PSBza2lwX2lkeCB8fAorCQkJCSAgICBjaGFpbi0+aXBzW2ZpcnN0X2NhbGxdID49IFBFUkZfQ09OVEVYVF9NQVgpCisJCQkJCWZpcnN0X2NhbGwrKzsKKwkJCQllbHNlIGlmIChiZVtpXS5mcm9tIDwgY2hhaW4tPmlwc1tmaXJzdF9jYWxsXSAmJgorCQkJCSAgICBiZVtpXS5mcm9tID49IGNoYWluLT5pcHNbZmlyc3RfY2FsbF0gLSA4KQorCQkJCQlmaXJzdF9jYWxsKys7CisJCQl9IGVsc2UKKwkJCQliZVtpXSA9IGJyYW5jaC0+ZW50cmllc1ticmFuY2gtPm5yIC0gaSAtIDFdOworCQl9CisKKwkJbnIgPSByZW1vdmVfbG9vcHMoYmUsIG5yKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkJZXJyID0gYWRkX2NhbGxjaGFpbl9pcCh0aHJlYWQsIHBhcmVudCwgcm9vdF9hbCwKKwkJCQkJICAgICAgIC0xLCBiZVtpXS50byk7CisJCQlpZiAoIWVycikKKwkJCQllcnIgPSBhZGRfY2FsbGNoYWluX2lwKHRocmVhZCwgcGFyZW50LCByb290X2FsLAorCQkJCQkJICAgICAgIC0xLCBiZVtpXS5mcm9tKTsKKwkJCWlmIChlcnIgPT0gLUVJTlZBTCkKKwkJCQlicmVhazsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCQljaGFpbl9uciAtPSBucjsKKwl9CisKK2NoZWNrX2NhbGxzOgorCWlmIChjaGFpbi0+bnIgPiBQRVJGX01BWF9TVEFDS19ERVBUSCkgeworCQlwcl93YXJuaW5nKCJjb3JydXB0ZWQgY2FsbGNoYWluLiBza2lwcGluZy4uLlxuIik7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IGZpcnN0X2NhbGw7IGkgPCBjaGFpbl9ucjsgaSsrKSB7CiAJCXU2NCBpcDsKLQkJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAKIAkJaWYgKGNhbGxjaGFpbl9wYXJhbS5vcmRlciA9PSBPUkRFUl9DQUxMRUUpCiAJCQlqID0gaTsKQEAgLTE0MzcsMjQgKzE1OTgsMTAgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJYWwuZmlsdGVyZWQgPSAwOwotCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG1hY2hpbmUsIGNwdW1vZGUsCi0JCQkJCSAgIE1BUF9fRlVOQ1RJT04sIGlwLCAmYWwpOwotCQlpZiAoYWwuc3ltICE9IE5VTEwpIHsKLQkJCWlmIChzb3J0X19oYXNfcGFyZW50ICYmICEqcGFyZW50ICYmCi0JCQkgICAgc3ltYm9sX19tYXRjaF9yZWdleChhbC5zeW0sICZwYXJlbnRfcmVnZXgpKQotCQkJCSpwYXJlbnQgPSBhbC5zeW07Ci0JCQllbHNlIGlmIChoYXZlX2lnbm9yZV9jYWxsZWVzICYmIHJvb3RfYWwgJiYKLQkJCSAgc3ltYm9sX19tYXRjaF9yZWdleChhbC5zeW0sICZpZ25vcmVfY2FsbGVlc19yZWdleCkpIHsKLQkJCQkvKiBUcmVhdCB0aGlzIHN5bWJvbCBhcyB0aGUgcm9vdCwKLQkJCQkgICBmb3JnZXR0aW5nIGl0cyBjYWxsZWVzLiAqLwotCQkJCSpyb290X2FsID0gYWw7Ci0JCQkJY2FsbGNoYWluX2N1cnNvcl9yZXNldCgmY2FsbGNoYWluX2N1cnNvcik7Ci0JCQl9Ci0JCX0KLQotCQllcnIgPSBjYWxsY2hhaW5fY3Vyc29yX2FwcGVuZCgmY2FsbGNoYWluX2N1cnNvciwKLQkJCQkJICAgICAgaXAsIGFsLm1hcCwgYWwuc3ltKTsKKwkJZXJyID0gYWRkX2NhbGxjaGFpbl9pcCh0aHJlYWQsIHBhcmVudCwgcm9vdF9hbCwKKwkJCQkgICAgICAgY3B1bW9kZSwgaXApOworCQlpZiAoZXJyID09IC1FSU5WQUwpCisJCQlicmVhazsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTQ2OSwxOSArMTYxNiwxNiBAQAogCQkJCSAgICAgICBlbnRyeS0+bWFwLCBlbnRyeS0+c3ltKTsKIH0KIAotaW50IG1hY2hpbmVfX3Jlc29sdmVfY2FsbGNoYWluKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJICAgICAgIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCSAgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCi0JCQkgICAgICAgc3RydWN0IHN5bWJvbCAqKnBhcmVudCwKLQkJCSAgICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqcm9vdF9hbCwKLQkJCSAgICAgICBpbnQgbWF4X3N0YWNrKQoraW50IHRocmVhZF9fcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJICAgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkgICAgICBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50LAorCQkJICAgICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKnJvb3RfYWwsCisJCQkgICAgICBpbnQgbWF4X3N0YWNrKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBtYWNoaW5lX19yZXNvbHZlX2NhbGxjaGFpbl9zYW1wbGUobWFjaGluZSwgdGhyZWFkLAotCQkJCQkJc2FtcGxlLT5jYWxsY2hhaW4sIHBhcmVudCwKLQkJCQkJCXJvb3RfYWwsIG1heF9zdGFjayk7CisJaW50IHJldCA9IHRocmVhZF9fcmVzb2x2ZV9jYWxsY2hhaW5fc2FtcGxlKHRocmVhZCwgc2FtcGxlLT5jYWxsY2hhaW4sCisJCQkJCQkgICBzYW1wbGUtPmJyYW5jaF9zdGFjaywKKwkJCQkJCSAgIHBhcmVudCwgcm9vdF9hbCwgbWF4X3N0YWNrKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNDk1LDcgKzE2MzksNyBAQAogCSAgICAoIXNhbXBsZS0+dXNlcl9zdGFjay5zaXplKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnksICZjYWxsY2hhaW5fY3Vyc29yLCBtYWNoaW5lLAorCXJldHVybiB1bndpbmRfX2dldF9lbnRyaWVzKHVud2luZF9lbnRyeSwgJmNhbGxjaGFpbl9jdXJzb3IsCiAJCQkJICAgdGhyZWFkLCBzYW1wbGUsIG1heF9zdGFjayk7CiAKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmggYi90b29scy9wZXJmL3V0aWwvbWFjaGluZS5oCmluZGV4IDJiNjUxYTcuLmU4Yjc3NzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuaApAQCAtNDAsNiArNDAsMTAgQEAKIAl1NjQJCSAga2VybmVsX3N0YXJ0OwogCXN5bWJvbF9maWx0ZXJfdAkgIHN5bWJvbF9maWx0ZXI7CiAJcGlkX3QJCSAgKmN1cnJlbnRfdGlkOworCXVuaW9uIHsgLyogVG9vbCBzcGVjaWZpYyBhcmVhICovCisJCXZvaWQJICAqcHJpdjsKKwkJdTY0CSAgZGJfaWQ7CisJfTsKIH07CiAKIHN0YXRpYyBpbmxpbmUKQEAgLTEyMiwxMyArMTI2LDEyIEBACiAJCQkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CiBzdHJ1Y3QgbWVtX2luZm8gKnNhbXBsZV9fcmVzb2x2ZV9tZW0oc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCiAJCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpOwotaW50IG1hY2hpbmVfX3Jlc29sdmVfY2FsbGNoYWluKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJICAgICAgIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCSAgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCi0JCQkgICAgICAgc3RydWN0IHN5bWJvbCAqKnBhcmVudCwKLQkJCSAgICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqcm9vdF9hbCwKLQkJCSAgICAgICBpbnQgbWF4X3N0YWNrKTsKK2ludCB0aHJlYWRfX3Jlc29sdmVfY2FsbGNoYWluKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCSAgICAgIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKKwkJCSAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAorCQkJICAgICAgc3RydWN0IHN5bWJvbCAqKnBhcmVudCwKKwkJCSAgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICpyb290X2FsLAorCQkJICAgICAgaW50IG1heF9zdGFjayk7CiAKIC8qCiAgKiBEZWZhdWx0IGd1ZXN0IGtlcm5lbCBpcyBkZWZpbmVkIGJ5IHBhcmFtZXRlciAtLWd1ZXN0a2FsbHN5bXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwppbmRleCAyMTM3YzQ1Li42MmNhOWYyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAogCWlmIChtYXAgJiYgbWFwLT5kc28pIHsKIAkJc3JjbGluZSA9IGdldF9zcmNsaW5lKG1hcC0+ZHNvLAotCQkJCSAgICAgIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgYWRkcikpOworCQkJCSAgICAgIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgYWRkciksIE5VTEwsIHRydWUpOwogCQlpZiAoc3JjbGluZSAhPSBTUkNMSU5FX1VOS05PV04pCiAJCQlyZXQgPSBmcHJpbnRmKGZwLCAiJXMlcyIsIHByZWZpeCwgc3JjbGluZSk7CiAJCWZyZWVfc3JjbGluZShzcmNsaW5lKTsKQEAgLTQxMywxNCArNDEzLDE0IEBACiAJcmV0dXJuIGlwICsgbWFwLT5yZWxvYzsKIH0KIAotdm9pZCBtYXBfZ3JvdXBzX19pbml0KHN0cnVjdCBtYXBfZ3JvdXBzICptZykKK3ZvaWQgbWFwX2dyb3Vwc19faW5pdChzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpIHsKIAkJbWctPm1hcHNbaV0gPSBSQl9ST09UOwogCQlJTklUX0xJU1RfSEVBRCgmbWctPnJlbW92ZWRfbWFwc1tpXSk7CiAJfQotCW1nLT5tYWNoaW5lID0gTlVMTDsKKwltZy0+bWFjaGluZSA9IG1hY2hpbmU7CiAJbWctPnJlZmNudCA9IDE7CiB9CiAKQEAgLTQ3MSwxMiArNDcxLDEyIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0cnVjdCBtYXBfZ3JvdXBzICptYXBfZ3JvdXBzX19uZXcodm9pZCkKK3N0cnVjdCBtYXBfZ3JvdXBzICptYXBfZ3JvdXBzX19uZXcoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCiB7CiAJc3RydWN0IG1hcF9ncm91cHMgKm1nID0gbWFsbG9jKHNpemVvZigqbWcpKTsKIAogCWlmIChtZyAhPSBOVUxMKQotCQltYXBfZ3JvdXBzX19pbml0KG1nKTsKKwkJbWFwX2dyb3Vwc19faW5pdChtZywgbWFjaGluZSk7CiAKIAlyZXR1cm4gbWc7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbWFwLmggYi90b29scy9wZXJmL3V0aWwvbWFwLmgKaW5kZXggMmY4Mzk1NC4uNjk1MWE5ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaApAQCAtNjQsNyArNjQsNyBAQAogCWludAkJIHJlZmNudDsKIH07CiAKLXN0cnVjdCBtYXBfZ3JvdXBzICptYXBfZ3JvdXBzX19uZXcodm9pZCk7CitzdHJ1Y3QgbWFwX2dyb3VwcyAqbWFwX2dyb3Vwc19fbmV3KHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKIHZvaWQgbWFwX2dyb3Vwc19fZGVsZXRlKHN0cnVjdCBtYXBfZ3JvdXBzICptZyk7CiBib29sIG1hcF9ncm91cHNfX2VtcHR5KHN0cnVjdCBtYXBfZ3JvdXBzICptZyk7CiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogc3RydWN0IG1hcCAqbWFwc19fZmluZChzdHJ1Y3QgcmJfcm9vdCAqbWFwcywgdTY0IGFkZHIpOwogc3RydWN0IG1hcCAqbWFwc19fZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKm1hcHMpOwogc3RydWN0IG1hcCAqbWFwc19fbmV4dChzdHJ1Y3QgbWFwICptYXApOwotdm9pZCBtYXBfZ3JvdXBzX19pbml0KHN0cnVjdCBtYXBfZ3JvdXBzICptZyk7Cit2b2lkIG1hcF9ncm91cHNfX2luaXQoc3RydWN0IG1hcF9ncm91cHMgKm1nLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CiB2b2lkIG1hcF9ncm91cHNfX2V4aXQoc3RydWN0IG1hcF9ncm91cHMgKm1nKTsKIGludCBtYXBfZ3JvdXBzX19jbG9uZShzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcsCiAJCSAgICAgIHN0cnVjdCBtYXBfZ3JvdXBzICpwYXJlbnQsIGVudW0gbWFwX3R5cGUgdHlwZSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKaW5kZXggYzY1OWEzYy4uNzdiNDNmZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwpAQCAtNjgxLDYgKzY4MSw4IEBACiAJaWYgKGV2c2VsKSB7CiAJCWV2c2VsLT51bml0ID0gaW5mby51bml0OwogCQlldnNlbC0+c2NhbGUgPSBpbmZvLnNjYWxlOworCQlldnNlbC0+cGVyX3BrZyA9IGluZm8ucGVyX3BrZzsKKwkJZXZzZWwtPnNuYXBzaG90ID0gaW5mby5zbmFwc2hvdDsKIAl9CiAKIAlyZXR1cm4gZXZzZWwgPyAwIDogLUVOT01FTTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMgYi90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5jCmluZGV4IGJmNDgwOTIuLmY2MmRlZTdiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMKQEAgLTQyLDcgKzQyLDI2IEBACiAJCXJldHVybiBvcHRlcnJvcihvcHQsICJ0YWtlcyBubyB2YWx1ZSIsIGZsYWdzKTsKIAlpZiAodW5zZXQgJiYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9ORUcpKQogCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAiaXNuJ3QgYXZhaWxhYmxlIiwgZmxhZ3MpOworCWlmIChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX0RJU0FCTEVEKQorCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAiaXMgbm90IHVzYWJsZSIsIGZsYWdzKTsKIAorCWlmIChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX0VYQ0xVU0lWRSkgeworCQlpZiAocC0+ZXhjbF9vcHQpIHsKKwkJCWNoYXIgbXNnWzEyOF07CisKKwkJCWlmICgoKGZsYWdzICYgT1BUX1NIT1JUKSAmJiBwLT5leGNsX29wdC0+c2hvcnRfbmFtZSkgfHwKKwkJCSAgICBwLT5leGNsX29wdC0+bG9uZ19uYW1lID09IE5VTEwpIHsKKwkJCQlzY25wcmludGYobXNnLCBzaXplb2YobXNnKSwgImNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoIGAlYyciLAorCQkJCQkgIHAtPmV4Y2xfb3B0LT5zaG9ydF9uYW1lKTsKKwkJCX0gZWxzZSB7CisJCQkJc2NucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiwKKwkJCQkJICBwLT5leGNsX29wdC0+bG9uZ19uYW1lKTsKKwkJCX0KKwkJCW9wdGVycm9yKG9wdCwgbXNnLCBmbGFncyk7CisJCQlyZXR1cm4gLTM7CisJCX0KKwkJcC0+ZXhjbF9vcHQgPSBvcHQ7CisJfQogCWlmICghKGZsYWdzICYgT1BUX1NIT1JUKSAmJiBwLT5vcHQpIHsKIAkJc3dpdGNoIChvcHQtPnR5cGUpIHsKIAkJY2FzZSBPUFRJT05fQ0FMTEJBQ0s6CkBAIC0zNDMsMTMgKzM2MiwxNCBAQAogCQkgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10pCiB7CiAJaW50IGludGVybmFsX2hlbHAgPSAhKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUCk7CisJaW50IGV4Y2xfc2hvcnRfb3B0ID0gMTsKKwljb25zdCBjaGFyICphcmc7CiAKIAkvKiB3ZSBtdXN0IHJlc2V0IC0+b3B0LCB1bmtub3duIHNob3J0IG9wdGlvbiBsZWF2ZSBpdCBkYW5nbGluZyAqLwogCWN0eC0+b3B0ID0gTlVMTDsKIAogCWZvciAoOyBjdHgtPmFyZ2M7IGN0eC0+YXJnYy0tLCBjdHgtPmFyZ3YrKykgewotCQljb25zdCBjaGFyICphcmcgPSBjdHgtPmFyZ3ZbMF07Ci0KKwkJYXJnID0gY3R4LT5hcmd2WzBdOwogCQlpZiAoKmFyZyAhPSAnLScgfHwgIWFyZ1sxXSkgewogCQkJaWYgKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKQogCQkJCWJyZWFrOwpAQCAtMzU4LDE5ICszNzgsMjEgQEAKIAkJfQogCiAJCWlmIChhcmdbMV0gIT0gJy0nKSB7Ci0JCQljdHgtPm9wdCA9IGFyZyArIDE7CisJCQljdHgtPm9wdCA9ICsrYXJnOwogCQkJaWYgKGludGVybmFsX2hlbHAgJiYgKmN0eC0+b3B0ID09ICdoJykKIAkJCQlyZXR1cm4gdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKHVzYWdlc3RyLCBvcHRpb25zLCAwKTsKIAkJCXN3aXRjaCAocGFyc2Vfc2hvcnRfb3B0KGN0eCwgb3B0aW9ucykpIHsKIAkJCWNhc2UgLTE6Ci0JCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UodXNhZ2VzdHIsIG9wdGlvbnMsIGFyZyArIDEsIDEpOworCQkJCXJldHVybiBwYXJzZV9vcHRpb25zX3VzYWdlKHVzYWdlc3RyLCBvcHRpb25zLCBhcmcsIDEpOwogCQkJY2FzZSAtMjoKIAkJCQlnb3RvIHVua25vd247CisJCQljYXNlIC0zOgorCQkJCWdvdG8gZXhjbHVzaXZlOwogCQkJZGVmYXVsdDoKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjdHgtPm9wdCkKLQkJCQljaGVja190eXBvcyhhcmcgKyAxLCBvcHRpb25zKTsKKwkJCQljaGVja190eXBvcyhhcmcsIG9wdGlvbnMpOwogCQkJd2hpbGUgKGN0eC0+b3B0KSB7CiAJCQkJaWYgKGludGVybmFsX2hlbHAgJiYgKmN0eC0+b3B0ID09ICdoJykKIAkJCQkJcmV0dXJuIHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbCh1c2FnZXN0ciwgb3B0aW9ucywgMCk7CkBAIC0zODcsNiArNDA5LDggQEAKIAkJCQkJY3R4LT5hcmd2WzBdID0gc3RyZHVwKGN0eC0+b3B0IC0gMSk7CiAJCQkJCSooY2hhciAqKWN0eC0+YXJndlswXSA9ICctJzsKIAkJCQkJZ290byB1bmtub3duOworCQkJCWNhc2UgLTM6CisJCQkJCWdvdG8gZXhjbHVzaXZlOwogCQkJCWRlZmF1bHQ6CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTQwMiwxOSArNDI2LDIzIEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChpbnRlcm5hbF9oZWxwICYmICFzdHJjbXAoYXJnICsgMiwgImhlbHAtYWxsIikpCisJCWFyZyArPSAyOworCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAhc3RyY21wKGFyZywgImhlbHAtYWxsIikpCiAJCQlyZXR1cm4gdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKHVzYWdlc3RyLCBvcHRpb25zLCAxKTsKLQkJaWYgKGludGVybmFsX2hlbHAgJiYgIXN0cmNtcChhcmcgKyAyLCAiaGVscCIpKQorCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAhc3RyY21wKGFyZywgImhlbHAiKSkKIAkJCXJldHVybiB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwodXNhZ2VzdHIsIG9wdGlvbnMsIDApOwotCQlpZiAoIXN0cmNtcChhcmcgKyAyLCAibGlzdC1vcHRzIikpCisJCWlmICghc3RyY21wKGFyZywgImxpc3Qtb3B0cyIpKQogCQkJcmV0dXJuIFBBUlNFX09QVF9MSVNUX09QVFM7Ci0JCWlmICghc3RyY21wKGFyZyArIDIsICJsaXN0LWNtZHMiKSkKKwkJaWYgKCFzdHJjbXAoYXJnLCAibGlzdC1jbWRzIikpCiAJCQlyZXR1cm4gUEFSU0VfT1BUX0xJU1RfU1VCQ01EUzsKLQkJc3dpdGNoIChwYXJzZV9sb25nX29wdChjdHgsIGFyZyArIDIsIG9wdGlvbnMpKSB7CisJCXN3aXRjaCAocGFyc2VfbG9uZ19vcHQoY3R4LCBhcmcsIG9wdGlvbnMpKSB7CiAJCWNhc2UgLTE6Ci0JCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZSh1c2FnZXN0ciwgb3B0aW9ucywgYXJnICsgMiwgMCk7CisJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZSh1c2FnZXN0ciwgb3B0aW9ucywgYXJnLCAwKTsKIAkJY2FzZSAtMjoKIAkJCWdvdG8gdW5rbm93bjsKKwkJY2FzZSAtMzoKKwkJCWV4Y2xfc2hvcnRfb3B0ID0gMDsKKwkJCWdvdG8gZXhjbHVzaXZlOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KQEAgLTQyNiw2ICs0NTQsMTcgQEAKIAkJY3R4LT5vcHQgPSBOVUxMOwogCX0KIAlyZXR1cm4gUEFSU0VfT1BUX0RPTkU7CisKK2V4Y2x1c2l2ZToKKwlwYXJzZV9vcHRpb25zX3VzYWdlKHVzYWdlc3RyLCBvcHRpb25zLCBhcmcsIGV4Y2xfc2hvcnRfb3B0KTsKKwlpZiAoKGV4Y2xfc2hvcnRfb3B0ICYmIGN0eC0+ZXhjbF9vcHQtPnNob3J0X25hbWUpIHx8CisJICAgIGN0eC0+ZXhjbF9vcHQtPmxvbmdfbmFtZSA9PSBOVUxMKSB7CisJCWNoYXIgb3B0ID0gY3R4LT5leGNsX29wdC0+c2hvcnRfbmFtZTsKKwkJcGFyc2Vfb3B0aW9uc191c2FnZShOVUxMLCBvcHRpb25zLCAmb3B0LCAxKTsKKwl9IGVsc2UgeworCQlwYXJzZV9vcHRpb25zX3VzYWdlKE5VTEwsIG9wdGlvbnMsIGN0eC0+ZXhjbF9vcHQtPmxvbmdfbmFtZSwgMCk7CisJfQorCXJldHVybiBQQVJTRV9PUFRfSEVMUDsKIH0KIAogaW50IHBhcnNlX29wdGlvbnNfZW5kKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCkKQEAgLTUwOSw2ICs1NDgsOCBAQAogCX0KIAlpZiAoIWZ1bGwgJiYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX0hJRERFTikpCiAJCXJldHVybjsKKwlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfRElTQUJMRUQpCisJCXJldHVybjsKIAogCXBvcyA9IGZwcmludGYoc3RkZXJyLCAiICAgICIpOwogCWlmIChvcHRzLT5zaG9ydF9uYW1lKQpAQCAtNjc5LDMgKzcyMCwxNiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKwordm9pZCBzZXRfb3B0aW9uX2ZsYWcoc3RydWN0IG9wdGlvbiAqb3B0cywgaW50IHNob3J0b3B0LCBjb25zdCBjaGFyICpsb25nb3B0LAorCQkgICAgIGludCBmbGFnKQoreworCWZvciAoOyBvcHRzLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdHMrKykgeworCQlpZiAoKHNob3J0b3B0ICYmIG9wdHMtPnNob3J0X25hbWUgPT0gc2hvcnRvcHQpIHx8CisJCSAgICAob3B0cy0+bG9uZ19uYW1lICYmIGxvbmdvcHQgJiYKKwkJICAgICAhc3RyY21wKG9wdHMtPmxvbmdfbmFtZSwgbG9uZ29wdCkpKSB7CisJCQlvcHRzLT5mbGFncyB8PSBmbGFnOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5oIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaAppbmRleCBiNTliYTg1Li45N2IxNTNmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmgKQEAgLTM4LDYgKzM4LDggQEAKIAlQQVJTRV9PUFRfTk9ORUcgICA9IDQsCiAJUEFSU0VfT1BUX0hJRERFTiAgPSA4LAogCVBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQgPSAxNiwKKwlQQVJTRV9PUFRfRElTQUJMRUQgPSAzMiwKKwlQQVJTRV9PUFRfRVhDTFVTSVZFID0gNjQsCiB9OwogCiBzdHJ1Y3Qgb3B0aW9uOwpAQCAtMTczLDYgKzE3NSw3IEBACiAJY29uc3QgY2hhciAqKm91dDsKIAlpbnQgYXJnYywgY3BpZHg7CiAJY29uc3QgY2hhciAqb3B0OworCWNvbnN0IHN0cnVjdCBvcHRpb24gKmV4Y2xfb3B0OwogCWludCBmbGFnczsKIH07CiAKQEAgLTIxMSw0ICsyMTQsNSBAQAogCiBleHRlcm4gY29uc3QgY2hhciAqcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpmaWxlKTsKIAordm9pZCBzZXRfb3B0aW9uX2ZsYWcoc3RydWN0IG9wdGlvbiAqb3B0cywgaW50IHNvcHQsIGNvbnN0IGNoYXIgKmxvcHQsIGludCBmbGFnKTsKICNlbmRpZiAvKiBfX1BFUkZfUEFSU0VfT1BUSU9OU19IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcG11LmMgYi90b29scy9wZXJmL3V0aWwvcG11LmMKaW5kZXggZTI0M2FkOS4uNWM5YzQ5NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BtdS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wbXUuYwpAQCAtMTYzLDYgKzE2Myw0MSBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIGludAorcGVyZl9wbXVfX3BhcnNlX3Blcl9wa2coc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhcywgY2hhciAqZGlyLCBjaGFyICpuYW1lKQoreworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJaW50IGZkOworCisJc25wcmludGYocGF0aCwgUEFUSF9NQVgsICIlcy8lcy5wZXItcGtnIiwgZGlyLCBuYW1lKTsKKworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwljbG9zZShmZCk7CisKKwlhbGlhcy0+cGVyX3BrZyA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9wbXVfX3BhcnNlX3NuYXBzaG90KHN0cnVjdCBwZXJmX3BtdV9hbGlhcyAqYWxpYXMsCisJCQkJICAgIGNoYXIgKmRpciwgY2hhciAqbmFtZSkKK3sKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCWludCBmZDsKKworCXNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCAiJXMvJXMuc25hcHNob3QiLCBkaXIsIG5hbWUpOworCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAtMTsKKworCWFsaWFzLT5zbmFwc2hvdCA9IHRydWU7CisJY2xvc2UoZmQpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBlcmZfcG11X19uZXdfYWxpYXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY2hhciAqZGlyLCBjaGFyICpuYW1lLCBGSUxFICpmaWxlKQogewogCXN0cnVjdCBwZXJmX3BtdV9hbGlhcyAqYWxpYXM7CkBAIC0xODEsNiArMjE2LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmYWxpYXMtPnRlcm1zKTsKIAlhbGlhcy0+c2NhbGUgPSAxLjA7CiAJYWxpYXMtPnVuaXRbMF0gPSAnXDAnOworCWFsaWFzLT5wZXJfcGtnID0gZmFsc2U7CiAKIAlyZXQgPSBwYXJzZV9ldmVudHNfdGVybXMoJmFsaWFzLT50ZXJtcywgYnVmKTsKIAlpZiAocmV0KSB7CkBAIC0xOTQsNiArMjMwLDggQEAKIAkgKi8KIAlwZXJmX3BtdV9fcGFyc2VfdW5pdChhbGlhcywgZGlyLCBuYW1lKTsKIAlwZXJmX3BtdV9fcGFyc2Vfc2NhbGUoYWxpYXMsIGRpciwgbmFtZSk7CisJcGVyZl9wbXVfX3BhcnNlX3Blcl9wa2coYWxpYXMsIGRpciwgbmFtZSk7CisJcGVyZl9wbXVfX3BhcnNlX3NuYXBzaG90KGFsaWFzLCBkaXIsIG5hbWUpOwogCiAJbGlzdF9hZGRfdGFpbCgmYWxpYXMtPmxpc3QsIGxpc3QpOwogCkBAIC0yMDksNiArMjQ3LDEwIEBACiAJCXJldHVybiB0cnVlOwogCWlmIChsZW4gPiA2ICYmICFzdHJjbXAobmFtZSArIGxlbiAtIDYsICIuc2NhbGUiKSkKIAkJcmV0dXJuIHRydWU7CisJaWYgKGxlbiA+IDggJiYgIXN0cmNtcChuYW1lICsgbGVuIC0gOCwgIi5wZXItcGtnIikpCisJCXJldHVybiB0cnVlOworCWlmIChsZW4gPiA5ICYmICFzdHJjbXAobmFtZSArIGxlbiAtIDksICIuc25hcHNob3QiKSkKKwkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC02MTcsMjMgKzY1OSwyNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgY2hlY2tfdW5pdF9zY2FsZShzdHJ1Y3QgcGVyZl9wbXVfYWxpYXMgKmFsaWFzLAotCQkJICAgIGNvbnN0IGNoYXIgKip1bml0LCBkb3VibGUgKnNjYWxlKQorc3RhdGljIGludCBjaGVja19pbmZvX2RhdGEoc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhcywKKwkJCSAgIHN0cnVjdCBwZXJmX3BtdV9pbmZvICppbmZvKQogewogCS8qCiAJICogT25seSBvbmUgdGVybSBpbiBldmVudCBkZWZpbml0aW9uIGNhbgotCSAqIGRlZmluZSB1bml0IGFuZCBzY2FsZSwgZmFpbCBpZiB0aGVyZSdzCi0JICogbW9yZSB0aGFuIG9uZS4KKwkgKiBkZWZpbmUgdW5pdCwgc2NhbGUgYW5kIHNuYXBzaG90LCBmYWlsCisJICogaWYgdGhlcmUncyBtb3JlIHRoYW4gb25lLgogCSAqLwotCWlmICgoKnVuaXQgJiYgYWxpYXMtPnVuaXQpIHx8Ci0JICAgICgqc2NhbGUgJiYgYWxpYXMtPnNjYWxlKSkKKwlpZiAoKGluZm8tPnVuaXQgJiYgYWxpYXMtPnVuaXQpIHx8CisJICAgIChpbmZvLT5zY2FsZSAmJiBhbGlhcy0+c2NhbGUpIHx8CisJICAgIChpbmZvLT5zbmFwc2hvdCAmJiBhbGlhcy0+c25hcHNob3QpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhbGlhcy0+dW5pdCkKLQkJKnVuaXQgPSBhbGlhcy0+dW5pdDsKKwkJaW5mby0+dW5pdCA9IGFsaWFzLT51bml0OwogCiAJaWYgKGFsaWFzLT5zY2FsZSkKLQkJKnNjYWxlID0gYWxpYXMtPnNjYWxlOworCQlpbmZvLT5zY2FsZSA9IGFsaWFzLT5zY2FsZTsKKworCWlmIChhbGlhcy0+c25hcHNob3QpCisJCWluZm8tPnNuYXBzaG90ID0gYWxpYXMtPnNuYXBzaG90OwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NDksMTIgKzY5NSwxNSBAQAogCXN0cnVjdCBwZXJmX3BtdV9hbGlhcyAqYWxpYXM7CiAJaW50IHJldDsKIAorCWluZm8tPnBlcl9wa2cgPSBmYWxzZTsKKwogCS8qCiAJICogTWFyayB1bml0IGFuZCBzY2FsZSBhcyBub3Qgc2V0CiAJICogKGRpZmZlcmVudCBmcm9tIGRlZmF1bHQgdmFsdWVzLCBzZWUgYmVsb3cpCiAJICovCi0JaW5mby0+dW5pdCAgID0gTlVMTDsKLQlpbmZvLT5zY2FsZSAgPSAwLjA7CisJaW5mby0+dW5pdCAgICAgPSBOVUxMOworCWluZm8tPnNjYWxlICAgID0gMC4wOworCWluZm8tPnNuYXBzaG90ID0gZmFsc2U7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGVybSwgaCwgaGVhZF90ZXJtcywgbGlzdCkgewogCQlhbGlhcyA9IHBtdV9maW5kX2FsaWFzKHBtdSwgdGVybSk7CkBAIC02NjQsMTAgKzcxMywxMyBAQAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQlyZXQgPSBjaGVja191bml0X3NjYWxlKGFsaWFzLCAmaW5mby0+dW5pdCwgJmluZm8tPnNjYWxlKTsKKwkJcmV0ID0gY2hlY2tfaW5mb19kYXRhKGFsaWFzLCBpbmZvKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKKwkJaWYgKGFsaWFzLT5wZXJfcGtnKQorCQkJaW5mby0+cGVyX3BrZyA9IHRydWU7CisKIAkJbGlzdF9kZWwoJnRlcm0tPmxpc3QpOwogCQlmcmVlKHRlcm0pOwogCX0KQEAgLTc0NywxNSArNzk5LDE4IEBACiAKIAlwbXUgPSBOVUxMOwogCWxlbiA9IDA7Ci0Jd2hpbGUgKChwbXUgPSBwZXJmX3BtdV9fc2NhbihwbXUpKSAhPSBOVUxMKQorCXdoaWxlICgocG11ID0gcGVyZl9wbXVfX3NjYW4ocG11KSkgIT0gTlVMTCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmcG11LT5hbGlhc2VzLCBsaXN0KQogCQkJbGVuKys7Ci0JYWxpYXNlcyA9IG1hbGxvYyhzaXplb2YoY2hhciAqKSAqIGxlbik7CisJCWlmIChwbXUtPnNlbGVjdGFibGUpCisJCQlsZW4rKzsKKwl9CisJYWxpYXNlcyA9IHphbGxvYyhzaXplb2YoY2hhciAqKSAqIGxlbik7CiAJaWYgKCFhbGlhc2VzKQotCQlyZXR1cm47CisJCWdvdG8gb3V0X2Vub21lbTsKIAlwbXUgPSBOVUxMOwogCWogPSAwOwotCXdoaWxlICgocG11ID0gcGVyZl9wbXVfX3NjYW4ocG11KSkgIT0gTlVMTCkKKwl3aGlsZSAoKHBtdSA9IHBlcmZfcG11X19zY2FuKHBtdSkpICE9IE5VTEwpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShhbGlhcywgJnBtdS0+YWxpYXNlcywgbGlzdCkgewogCQkJY2hhciAqbmFtZSA9IGZvcm1hdF9hbGlhcyhidWYsIHNpemVvZihidWYpLCBwbXUsIGFsaWFzKTsKIAkJCWJvb2wgaXNfY3B1ID0gIXN0cmNtcChwbXUtPm5hbWUsICJjcHUiKTsKQEAgLTc2NSwxMyArODIwLDIzIEBACiAJCQkgICAgICAoIWlzX2NwdSAmJiBzdHJnbG9ibWF0Y2goYWxpYXMtPm5hbWUsCiAJCQkJCQkgICAgICAgZXZlbnRfZ2xvYikpKSkKIAkJCQljb250aW51ZTsKLQkJCWFsaWFzZXNbal0gPSBuYW1lOworCiAJCQlpZiAoaXNfY3B1ICYmICFuYW1lX29ubHkpCi0JCQkJYWxpYXNlc1tqXSA9IGZvcm1hdF9hbGlhc19vcihidWYsIHNpemVvZihidWYpLAotCQkJCQkJCSAgICAgIHBtdSwgYWxpYXMpOwotCQkJYWxpYXNlc1tqXSA9IHN0cmR1cChhbGlhc2VzW2pdKTsKKwkJCQluYW1lID0gZm9ybWF0X2FsaWFzX29yKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHBtdSwgYWxpYXMpOworCisJCQlhbGlhc2VzW2pdID0gc3RyZHVwKG5hbWUpOworCQkJaWYgKGFsaWFzZXNbal0gPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9lbm9tZW07CiAJCQlqKys7CiAJCX0KKwkJaWYgKHBtdS0+c2VsZWN0YWJsZSkgeworCQkJY2hhciAqczsKKwkJCWlmIChhc3ByaW50ZigmcywgIiVzLy8iLCBwbXUtPm5hbWUpIDwgMCkKKwkJCQlnb3RvIG91dF9lbm9tZW07CisJCQlhbGlhc2VzW2pdID0gczsKKwkJCWorKzsKKwkJfQorCX0KIAlsZW4gPSBqOwogCXFzb3J0KGFsaWFzZXMsIGxlbiwgc2l6ZW9mKGNoYXIgKiksIGNtcF9zdHJpbmcpOwogCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykgewpAQCAtNzgwLDEyICs4NDUsMjAgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXByaW50ZigiICAlLTUwcyBbS2VybmVsIFBNVSBldmVudF1cbiIsIGFsaWFzZXNbal0pOwotCQl6ZnJlZSgmYWxpYXNlc1tqXSk7CiAJCXByaW50ZWQrKzsKIAl9CiAJaWYgKHByaW50ZWQpCiAJCXByaW50ZigiXG4iKTsKLQlmcmVlKGFsaWFzZXMpOworb3V0X2ZyZWU6CisJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorCQl6ZnJlZSgmYWxpYXNlc1tqXSk7CisJemZyZWUoJmFsaWFzZXMpOworCXJldHVybjsKKworb3V0X2Vub21lbToKKwlwcmludGYoIkZBVEFMOiBub3QgZW5vdWdoIG1lbW9yeSB0byBwcmludCBQTVUgZXZlbnRzXG4iKTsKKwlpZiAoYWxpYXNlcykKKwkJZ290byBvdXRfZnJlZTsKIH0KIAogYm9vbCBwbXVfaGF2ZV9ldmVudChjb25zdCBjaGFyICpwbmFtZSwgY29uc3QgY2hhciAqbmFtZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wbXUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wbXUuaAppbmRleCBmZTlkZmJlLi42YjEyNDlmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcG11LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BtdS5oCkBAIC0xOCw2ICsxOCw3IEBACiBzdHJ1Y3QgcGVyZl9wbXUgewogCWNoYXIgKm5hbWU7CiAJX191MzIgdHlwZTsKKwlib29sIHNlbGVjdGFibGU7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqZGVmYXVsdF9jb25maWc7CiAJc3RydWN0IGNwdV9tYXAgKmNwdXM7CiAJc3RydWN0IGxpc3RfaGVhZCBmb3JtYXQ7ICAvKiBIRUFEIHN0cnVjdCBwZXJmX3BtdV9mb3JtYXQgLT4gbGlzdCAqLwpAQCAtMjgsNiArMjksOCBAQAogc3RydWN0IHBlcmZfcG11X2luZm8gewogCWNvbnN0IGNoYXIgKnVuaXQ7CiAJZG91YmxlIHNjYWxlOworCWJvb2wgcGVyX3BrZzsKKwlib29sIHNuYXBzaG90OwogfTsKIAogI2RlZmluZSBVTklUX01BWF9MRU4JMzEgLyogbWF4IGxlbmd0aCBmb3IgZXZlbnQgdW5pdCBuYW1lICovCkBAIC0zOCw2ICs0MSw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAgLyogRUxFTSAqLwogCWNoYXIgdW5pdFtVTklUX01BWF9MRU4rMV07CiAJZG91YmxlIHNjYWxlOworCWJvb2wgcGVyX3BrZzsKKwlib29sIHNuYXBzaG90OwogfTsKIAogc3RydWN0IHBlcmZfcG11ICpwZXJmX3BtdV9fZmluZChjb25zdCBjaGFyICpuYW1lKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKaW5kZXggYzE1MGNhNC4uMjhlYjE0MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKQEAgLTE5MTAsMjEgKzE5MTAsMjEgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXByaW50ZigiICAlLTIwcyAob24gJXMiLCBidWYsIHBsYWNlKTsKKwlwcl9pbmZvKCIgICUtMjBzIChvbiAlcyIsIGJ1ZiwgcGxhY2UpOwogCWlmIChtb2R1bGUpCi0JCXByaW50ZigiIGluICVzIiwgbW9kdWxlKTsKKwkJcHJfaW5mbygiIGluICVzIiwgbW9kdWxlKTsKIAogCWlmIChwZXYtPm5hcmdzID4gMCkgewotCQlwcmludGYoIiB3aXRoIik7CisJCXByX2luZm8oIiB3aXRoIik7CiAJCWZvciAoaSA9IDA7IGkgPCBwZXYtPm5hcmdzOyBpKyspIHsKIAkJCXJldCA9IHN5bnRoZXNpemVfcGVyZl9wcm9iZV9hcmcoJnBldi0+YXJnc1tpXSwKIAkJCQkJCQlidWYsIDEyOCk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKLQkJCXByaW50ZigiICVzIiwgYnVmKTsKKwkJCXByX2luZm8oIiAlcyIsIGJ1Zik7CiAJCX0KIAl9Ci0JcHJpbnRmKCIpXG4iKTsKKwlwcl9pbmZvKCIpXG4iKTsKIAlmcmVlKHBsYWNlKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjEyNCw3ICsyMTI0LDcgQEAKIAl9CiAKIAlyZXQgPSAwOwotCXByaW50ZigiQWRkZWQgbmV3IGV2ZW50JXNcbiIsIChudGV2cyA+IDEpID8gInM6IiA6ICI6Iik7CisJcHJfaW5mbygiQWRkZWQgbmV3IGV2ZW50JXNcbiIsIChudGV2cyA+IDEpID8gInM6IiA6ICI6Iik7CiAJZm9yIChpID0gMDsgaSA8IG50ZXZzOyBpKyspIHsKIAkJdGV2ID0gJnRldnNbaV07CiAJCWlmIChwZXYtPmV2ZW50KQpAQCAtMjE3OSw4ICsyMTc5LDggQEAKIAogCWlmIChyZXQgPj0gMCkgewogCQkvKiBTaG93IGhvdyB0byB1c2UgdGhlIGV2ZW50LiAqLwotCQlwcmludGYoIlxuWW91IGNhbiBub3cgdXNlIGl0IGluIGFsbCBwZXJmIHRvb2xzLCBzdWNoIGFzOlxuXG4iKTsKLQkJcHJpbnRmKCJcdHBlcmYgcmVjb3JkIC1lICVzOiVzIC1hUiBzbGVlcCAxXG5cbiIsIHRldi0+Z3JvdXAsCisJCXByX2luZm8oIlxuWW91IGNhbiBub3cgdXNlIGl0IGluIGFsbCBwZXJmIHRvb2xzLCBzdWNoIGFzOlxuXG4iKTsKKwkJcHJfaW5mbygiXHRwZXJmIHJlY29yZCAtZSAlczolcyAtYVIgc2xlZXAgMVxuXG4iLCB0ZXYtPmdyb3VwLAogCQkJIHRldi0+ZXZlbnQpOwogCX0KIApAQCAtMjQ0NCw3ICsyNDQ0LDcgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlwcmludGYoIlJlbW92ZWQgZXZlbnQ6ICVzXG4iLCBlbnQtPnMpOworCXByX2luZm8oIlJlbW92ZWQgZXZlbnQ6ICVzXG4iLCBlbnQtPnMpOwogCXJldHVybiAwOwogZXJyb3I6CiAJcHJfd2FybmluZygiRmFpbGVkIHRvIGRlbGV0ZSBldmVudDogJXNcbiIsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYwppbmRleCAwYTAxYmFjLi4yMmViYzQ2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAKICNpbmNsdWRlICIuLi91dGlsLmgiCiAjaW5jbHVkZSA8RVhURVJOLmg+CkBAIC01Nyw3ICs1OCw3IEBACiAjZGVmaW5lIEZUUkFDRV9NQVhfRVZFTlQJCQkJXAogCSgoMSA8PCAoc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDgpKSAtIDEpCiAKLXN0cnVjdCBldmVudF9mb3JtYXQgKmV2ZW50c1tGVFJBQ0VfTUFYX0VWRU5UXTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChldmVudHNfZGVmaW5lZCwgRlRSQUNFX01BWF9FVkVOVCk7CiAKIGV4dGVybiBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OwogCkBAIC0yMzgsMzUgKzIzOSwxNSBAQAogCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+bmV4dCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGV2ZW50X2Zvcm1hdCAqZmluZF9jYWNoZV9ldmVudChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCi17Ci0Jc3RhdGljIGNoYXIgZXZfbmFtZVsyNTZdOwotCXN0cnVjdCBldmVudF9mb3JtYXQgKmV2ZW50OwotCWludCB0eXBlID0gZXZzZWwtPmF0dHIuY29uZmlnOwotCi0JaWYgKGV2ZW50c1t0eXBlXSkKLQkJcmV0dXJuIGV2ZW50c1t0eXBlXTsKLQotCWV2ZW50c1t0eXBlXSA9IGV2ZW50ID0gZXZzZWwtPnRwX2Zvcm1hdDsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm4gTlVMTDsKLQotCXNwcmludGYoZXZfbmFtZSwgIiVzOjolcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKLQotCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBldmVudC0+cHJpbnRfZm10LmFyZ3MpOwotCi0JcmV0dXJuIGV2ZW50OwotfQotCiBzdGF0aWMgdm9pZCBwZXJsX3Byb2Nlc3NfdHJhY2Vwb2ludChzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKIAkJCQkgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAogCQkJCSAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCiB7CisJc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnQgPSBldnNlbC0+dHBfZm9ybWF0OwogCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkOwogCXN0YXRpYyBjaGFyIGhhbmRsZXJbMjU2XTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwogCXVuc2lnbmVkIGxvbmcgcywgbnM7Ci0Jc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnQ7CiAJaW50IHBpZDsKIAlpbnQgY3B1ID0gc2FtcGxlLT5jcHU7CiAJdm9pZCAqZGF0YSA9IHNhbXBsZS0+cmF3X2RhdGE7CkBAIC0yNzgsNyArMjU5LDYgQEAKIAlpZiAoZXZzZWwtPmF0dHIudHlwZSAhPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVCkKIAkJcmV0dXJuOwogCi0JZXZlbnQgPSBmaW5kX2NhY2hlX2V2ZW50KGV2c2VsKTsKIAlpZiAoIWV2ZW50KQogCQlkaWUoInVnISBubyBldmVudCBmb3VuZCBmb3IgdHlwZSAlIiBQUkl1NjQsICh1NjQpZXZzZWwtPmF0dHIuY29uZmlnKTsKIApAQCAtMjg2LDYgKzI2Niw5IEBACiAKIAlzcHJpbnRmKGhhbmRsZXIsICIlczo6JXMiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CiAKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoZXZlbnQtPmlkLCBldmVudHNfZGVmaW5lZCkpCisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBoYW5kbGVyLCBldmVudC0+cHJpbnRfZm10LmFyZ3MpOworCiAJcyA9IG5zZWNzIC8gTlNFQ1NfUEVSX1NFQzsKIAlucyA9IG5zZWNzIC0gcyAqIE5TRUNTX1BFUl9TRUM7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwppbmRleCA0OTZmMjFjLi5kODA4YTMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jCkBAIC0yNCw3ICsyNCw5IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2luY2x1ZGUgIi4uLy4uL3BlcmYuaCIKICNpbmNsdWRlICIuLi9kZWJ1Zy5oIgpAQCAtMzMsNiArMzUsMTAgQEAKICNpbmNsdWRlICIuLi91dGlsLmgiCiAjaW5jbHVkZSAiLi4vZXZlbnQuaCIKICNpbmNsdWRlICIuLi90aHJlYWQuaCIKKyNpbmNsdWRlICIuLi9jb21tLmgiCisjaW5jbHVkZSAiLi4vbWFjaGluZS5oIgorI2luY2x1ZGUgIi4uL2RiLWV4cG9ydC5oIgorI2luY2x1ZGUgIi4uL3RocmVhZC1zdGFjay5oIgogI2luY2x1ZGUgIi4uL3RyYWNlLWV2ZW50LmgiCiAjaW5jbHVkZSAiLi4vbWFjaGluZS5oIgogCkBAIC00MSw3ICs0Nyw3IEBACiAjZGVmaW5lIEZUUkFDRV9NQVhfRVZFTlQJCQkJXAogCSgoMSA8PCAoc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDgpKSAtIDEpCiAKLXN0cnVjdCBldmVudF9mb3JtYXQgKmV2ZW50c1tGVFJBQ0VfTUFYX0VWRU5UXTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChldmVudHNfZGVmaW5lZCwgRlRSQUNFX01BWF9FVkVOVCk7CiAKICNkZWZpbmUgTUFYX0ZJRUxEUwk2NAogI2RlZmluZSBOX0NPTU1PTl9GSUVMRFMJNwpAQCAtNTMsNiArNTksMjQgQEAKIAogc3RhdGljIFB5T2JqZWN0ICptYWluX21vZHVsZSwgKm1haW5fZGljdDsKIAorc3RydWN0IHRhYmxlcyB7CisJc3RydWN0IGRiX2V4cG9ydAlkYmU7CisJUHlPYmplY3QJCSpldnNlbF9oYW5kbGVyOworCVB5T2JqZWN0CQkqbWFjaGluZV9oYW5kbGVyOworCVB5T2JqZWN0CQkqdGhyZWFkX2hhbmRsZXI7CisJUHlPYmplY3QJCSpjb21tX2hhbmRsZXI7CisJUHlPYmplY3QJCSpjb21tX3RocmVhZF9oYW5kbGVyOworCVB5T2JqZWN0CQkqZHNvX2hhbmRsZXI7CisJUHlPYmplY3QJCSpzeW1ib2xfaGFuZGxlcjsKKwlQeU9iamVjdAkJKmJyYW5jaF90eXBlX2hhbmRsZXI7CisJUHlPYmplY3QJCSpzYW1wbGVfaGFuZGxlcjsKKwlQeU9iamVjdAkJKmNhbGxfcGF0aF9oYW5kbGVyOworCVB5T2JqZWN0CQkqY2FsbF9yZXR1cm5faGFuZGxlcjsKKwlib29sCQkJZGJfZXhwb3J0X21vZGU7Cit9OworCitzdGF0aWMgc3RydWN0IHRhYmxlcyB0YWJsZXNfZ2xvYmFsOworCiBzdGF0aWMgdm9pZCBoYW5kbGVyX2NhbGxfZGllKGNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSkgTk9SRVRVUk47CiBzdGF0aWMgdm9pZCBoYW5kbGVyX2NhbGxfZGllKGNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSkKIHsKQEAgLTIzMiwzMSArMjU2LDYgQEAKIAkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPm5leHQpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBldmVudF9mb3JtYXQgKmZpbmRfY2FjaGVfZXZlbnQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQotewotCXN0YXRpYyBjaGFyIGV2X25hbWVbMjU2XTsKLQlzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudDsKLQlpbnQgdHlwZSA9IGV2c2VsLT5hdHRyLmNvbmZpZzsKLQotCS8qCi0gCSAqIFhYWDogRG8gd2UgcmVhbGx5IG5lZWQgdG8gY2FjaGUgdGhpcyBzaW5jZSBub3cgd2UgaGF2ZSBldnNlbC0+dHBfZm9ybWF0Ci0gCSAqIGNhY2hlZCBhbHJlYWR5PyBOZWVkIHRvIHJlLXJlYWQgdGhpcyAiY2FjaGUiIHJvdXRpbmUgdGhhdCBhcyB3ZWxsIGNhbGxzCi0gCSAqIGRlZmluZV9ldmVudF9zeW1ib2xzKCkgOi1cCi0gCSAqLwotCWlmIChldmVudHNbdHlwZV0pCi0JCXJldHVybiBldmVudHNbdHlwZV07Ci0KLQlldmVudHNbdHlwZV0gPSBldmVudCA9IGV2c2VsLT50cF9mb3JtYXQ7Ci0JaWYgKCFldmVudCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzcHJpbnRmKGV2X25hbWUsICIlc19fJXMiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7Ci0KLQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgZXZlbnQtPnByaW50X2ZtdC5hcmdzKTsKLQotCXJldHVybiBldmVudDsKLX0KLQogc3RhdGljIFB5T2JqZWN0ICpnZXRfZmllbGRfbnVtZXJpY19lbnRyeShzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudCwKIAkJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQsIHZvaWQgKmRhdGEpCiB7CkBAIC0zMTIsOSArMzExLDkgQEAKIAlpZiAoIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gfHwgIXNhbXBsZS0+Y2FsbGNoYWluKQogCQlnb3RvIGV4aXQ7CiAKLQlpZiAobWFjaGluZV9fcmVzb2x2ZV9jYWxsY2hhaW4oYWwtPm1hY2hpbmUsIGV2c2VsLCBhbC0+dGhyZWFkLAotCQkJCQkgICBzYW1wbGUsIE5VTEwsIE5VTEwsCi0JCQkJCSAgIFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAhPSAwKSB7CisJaWYgKHRocmVhZF9fcmVzb2x2ZV9jYWxsY2hhaW4oYWwtPnRocmVhZCwgZXZzZWwsCisJCQkJICAgICAgc2FtcGxlLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgIFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAhPSAwKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIHJlc29sdmUgY2FsbGNoYWluLiBTa2lwcGluZ1xuIik7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0zODAsMTIgKzM3OSwxMiBAQAogCQkJCSAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCQkgICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCiB7CisJc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnQgPSBldnNlbC0+dHBfZm9ybWF0OwogCVB5T2JqZWN0ICpoYW5kbGVyLCAqY29udGV4dCwgKnQsICpvYmosICpjYWxsY2hhaW47CiAJUHlPYmplY3QgKmRpY3QgPSBOVUxMOwogCXN0YXRpYyBjaGFyIGhhbmRsZXJfbmFtZVsyNTZdOwogCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkOwogCXVuc2lnbmVkIGxvbmcgcywgbnM7Ci0Jc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnQ7CiAJdW5zaWduZWQgbiA9IDA7CiAJaW50IHBpZDsKIAlpbnQgY3B1ID0gc2FtcGxlLT5jcHU7CkBAIC0zOTcsNyArMzk2LDYgQEAKIAlpZiAoIXQpCiAJCVB5X0ZhdGFsRXJyb3IoImNvdWxkbid0IGNyZWF0ZSBQeXRob24gdHVwbGUiKTsKIAotCWV2ZW50ID0gZmluZF9jYWNoZV9ldmVudChldnNlbCk7CiAJaWYgKCFldmVudCkKIAkJZGllKCJ1ZyEgbm8gZXZlbnQgZm91bmQgZm9yIHR5cGUgJWQiLCAoaW50KWV2c2VsLT5hdHRyLmNvbmZpZyk7CiAKQEAgLTQwNSw2ICs0MDMsOSBAQAogCiAJc3ByaW50ZihoYW5kbGVyX25hbWUsICIlc19fJXMiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CiAKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoZXZlbnQtPmlkLCBldmVudHNfZGVmaW5lZCkpCisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBoYW5kbGVyX25hbWUsIGV2ZW50LT5wcmludF9mbXQuYXJncyk7CisKIAloYW5kbGVyID0gZ2V0X2hhbmRsZXIoaGFuZGxlcl9uYW1lKTsKIAlpZiAoIWhhbmRsZXIpIHsKIAkJZGljdCA9IFB5RGljdF9OZXcoKTsKQEAgLTQ3NSw2ICs0NzYsMjg5IEBACiAJUHlfREVDUkVGKHQpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKnR1cGxlX25ldyh1bnNpZ25lZCBpbnQgc3opCit7CisJUHlPYmplY3QgKnQ7CisKKwl0ID0gUHlUdXBsZV9OZXcoc3opOworCWlmICghdCkKKwkJUHlfRmF0YWxFcnJvcigiY291bGRuJ3QgY3JlYXRlIFB5dGhvbiB0dXBsZSIpOworCXJldHVybiB0OworfQorCitzdGF0aWMgaW50IHR1cGxlX3NldF91NjQoUHlPYmplY3QgKnQsIHVuc2lnbmVkIGludCBwb3MsIHU2NCB2YWwpCit7CisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCXJldHVybiBQeVR1cGxlX1NldEl0ZW0odCwgcG9zLCBQeUludF9Gcm9tTG9uZyh2YWwpKTsKKyNlbmRpZgorI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKKwlyZXR1cm4gUHlUdXBsZV9TZXRJdGVtKHQsIHBvcywgUHlMb25nX0Zyb21Mb25nTG9uZyh2YWwpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHR1cGxlX3NldF9zMzIoUHlPYmplY3QgKnQsIHVuc2lnbmVkIGludCBwb3MsIHMzMiB2YWwpCit7CisJcmV0dXJuIFB5VHVwbGVfU2V0SXRlbSh0LCBwb3MsIFB5SW50X0Zyb21Mb25nKHZhbCkpOworfQorCitzdGF0aWMgaW50IHR1cGxlX3NldF9zdHJpbmcoUHlPYmplY3QgKnQsIHVuc2lnbmVkIGludCBwb3MsIGNvbnN0IGNoYXIgKnMpCit7CisJcmV0dXJuIFB5VHVwbGVfU2V0SXRlbSh0LCBwb3MsIFB5U3RyaW5nX0Zyb21TdHJpbmcocykpOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9leHBvcnRfZXZzZWwoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwlQeU9iamVjdCAqdDsKKworCXQgPSB0dXBsZV9uZXcoMik7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIGV2c2VsLT5kYl9pZCk7CisJdHVwbGVfc2V0X3N0cmluZyh0LCAxLCBwZXJmX2V2c2VsX19uYW1lKGV2c2VsKSk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPmV2c2VsX2hhbmRsZXIsIHQsICJldnNlbF90YWJsZSIpOworCisJUHlfREVDUkVGKHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9tYWNoaW5lKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwKKwkJCQkgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwlQeU9iamVjdCAqdDsKKworCXQgPSB0dXBsZV9uZXcoMyk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIG1hY2hpbmUtPmRiX2lkKTsKKwl0dXBsZV9zZXRfczMyKHQsIDEsIG1hY2hpbmUtPnBpZCk7CisJdHVwbGVfc2V0X3N0cmluZyh0LCAyLCBtYWNoaW5lLT5yb290X2RpciA/IG1hY2hpbmUtPnJvb3RfZGlyIDogIiIpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5tYWNoaW5lX2hhbmRsZXIsIHQsICJtYWNoaW5lX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X3RocmVhZChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQl1NjQgbWFpbl90aHJlYWRfZGJfaWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9IGNvbnRhaW5lcl9vZihkYmUsIHN0cnVjdCB0YWJsZXMsIGRiZSk7CisJUHlPYmplY3QgKnQ7CisKKwl0ID0gdHVwbGVfbmV3KDUpOworCisJdHVwbGVfc2V0X3U2NCh0LCAwLCB0aHJlYWQtPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDEsIG1hY2hpbmUtPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDIsIG1haW5fdGhyZWFkX2RiX2lkKTsKKwl0dXBsZV9zZXRfczMyKHQsIDMsIHRocmVhZC0+cGlkXyk7CisJdHVwbGVfc2V0X3MzMih0LCA0LCB0aHJlYWQtPnRpZCk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPnRocmVhZF9oYW5kbGVyLCB0LCAidGhyZWFkX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X2NvbW0oc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY29tbSAqY29tbSkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygyKTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgY29tbS0+ZGJfaWQpOworCXR1cGxlX3NldF9zdHJpbmcodCwgMSwgY29tbV9fc3RyKGNvbW0pKTsKKworCWNhbGxfb2JqZWN0KHRhYmxlcy0+Y29tbV9oYW5kbGVyLCB0LCAiY29tbV90YWJsZSIpOworCisJUHlfREVDUkVGKHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9jb21tX3RocmVhZChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHU2NCBkYl9pZCwKKwkJCQkgICAgIHN0cnVjdCBjb21tICpjb21tLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwlQeU9iamVjdCAqdDsKKworCXQgPSB0dXBsZV9uZXcoMyk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIGRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDEsIGNvbW0tPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDIsIHRocmVhZC0+ZGJfaWQpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5jb21tX3RocmVhZF9oYW5kbGVyLCB0LCAiY29tbV90aHJlYWRfdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9leHBvcnRfZHNvKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGRzbyAqZHNvLAorCQkJICAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisJUHlPYmplY3QgKnQ7CisKKwlidWlsZF9pZF9fc3ByaW50Zihkc28tPmJ1aWxkX2lkLCBzaXplb2YoZHNvLT5idWlsZF9pZCksIHNidWlsZF9pZCk7CisKKwl0ID0gdHVwbGVfbmV3KDUpOworCisJdHVwbGVfc2V0X3U2NCh0LCAwLCBkc28tPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDEsIG1hY2hpbmUtPmRiX2lkKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDIsIGRzby0+c2hvcnRfbmFtZSk7CisJdHVwbGVfc2V0X3N0cmluZyh0LCAzLCBkc28tPmxvbmdfbmFtZSk7CisJdHVwbGVfc2V0X3N0cmluZyh0LCA0LCBzYnVpbGRfaWQpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5kc29faGFuZGxlciwgdCwgImRzb190YWJsZSIpOworCisJUHlfREVDUkVGKHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9zeW1ib2woc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCQkJc3RydWN0IGRzbyAqZHNvKQoreworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9IGNvbnRhaW5lcl9vZihkYmUsIHN0cnVjdCB0YWJsZXMsIGRiZSk7CisJdTY0ICpzeW1fZGJfaWQgPSBzeW1ib2xfX3ByaXYoc3ltKTsKKwlQeU9iamVjdCAqdDsKKworCXQgPSB0dXBsZV9uZXcoNik7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsICpzeW1fZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMSwgZHNvLT5kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAyLCBzeW0tPnN0YXJ0KTsKKwl0dXBsZV9zZXRfdTY0KHQsIDMsIHN5bS0+ZW5kKTsKKwl0dXBsZV9zZXRfczMyKHQsIDQsIHN5bS0+YmluZGluZyk7CisJdHVwbGVfc2V0X3N0cmluZyh0LCA1LCBzeW0tPm5hbWUpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5zeW1ib2xfaGFuZGxlciwgdCwgInN5bWJvbF90YWJsZSIpOworCisJUHlfREVDUkVGKHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9icmFuY2hfdHlwZShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHUzMiBicmFuY2hfdHlwZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwlQeU9iamVjdCAqdDsKKworCXQgPSB0dXBsZV9uZXcoMik7CisKKwl0dXBsZV9zZXRfczMyKHQsIDAsIGJyYW5jaF90eXBlKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDEsIG5hbWUpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5icmFuY2hfdHlwZV9oYW5kbGVyLCB0LCAiYnJhbmNoX3R5cGVfdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9leHBvcnRfc2FtcGxlKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwKKwkJCQlzdHJ1Y3QgZXhwb3J0X3NhbXBsZSAqZXMpCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwlQeU9iamVjdCAqdDsKKworCXQgPSB0dXBsZV9uZXcoMjEpOworCisJdHVwbGVfc2V0X3U2NCh0LCAwLCBlcy0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMSwgZXMtPmV2c2VsLT5kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAyLCBlcy0+YWwtPm1hY2hpbmUtPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDMsIGVzLT50aHJlYWQtPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDQsIGVzLT5jb21tX2RiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDUsIGVzLT5kc29fZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgNiwgZXMtPnN5bV9kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCA3LCBlcy0+b2Zmc2V0KTsKKwl0dXBsZV9zZXRfdTY0KHQsIDgsIGVzLT5zYW1wbGUtPmlwKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDksIGVzLT5zYW1wbGUtPnRpbWUpOworCXR1cGxlX3NldF9zMzIodCwgMTAsIGVzLT5zYW1wbGUtPmNwdSk7CisJdHVwbGVfc2V0X3U2NCh0LCAxMSwgZXMtPmFkZHJfZHNvX2RiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDEyLCBlcy0+YWRkcl9zeW1fZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMTMsIGVzLT5hZGRyX29mZnNldCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxNCwgZXMtPnNhbXBsZS0+YWRkcik7CisJdHVwbGVfc2V0X3U2NCh0LCAxNSwgZXMtPnNhbXBsZS0+cGVyaW9kKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDE2LCBlcy0+c2FtcGxlLT53ZWlnaHQpOworCXR1cGxlX3NldF91NjQodCwgMTcsIGVzLT5zYW1wbGUtPnRyYW5zYWN0aW9uKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDE4LCBlcy0+c2FtcGxlLT5kYXRhX3NyYyk7CisJdHVwbGVfc2V0X3MzMih0LCAxOSwgZXMtPnNhbXBsZS0+ZmxhZ3MgJiBQRVJGX0JSQU5DSF9NQVNLKTsKKwl0dXBsZV9zZXRfczMyKHQsIDIwLCAhIShlcy0+c2FtcGxlLT5mbGFncyAmIFBFUkZfSVBfRkxBR19JTl9UWCkpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5zYW1wbGVfaGFuZGxlciwgdCwgInNhbXBsZV90YWJsZSIpOworCisJUHlfREVDUkVGKHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9jYWxsX3BhdGgoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY2FsbF9wYXRoICpjcCkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCXU2NCBwYXJlbnRfZGJfaWQsIHN5bV9kYl9pZDsKKworCXBhcmVudF9kYl9pZCA9IGNwLT5wYXJlbnQgPyBjcC0+cGFyZW50LT5kYl9pZCA6IDA7CisJc3ltX2RiX2lkID0gY3AtPnN5bSA/ICoodTY0ICopc3ltYm9sX19wcml2KGNwLT5zeW0pIDogMDsKKworCXQgPSB0dXBsZV9uZXcoNCk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIGNwLT5kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxLCBwYXJlbnRfZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMiwgc3ltX2RiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDMsIGNwLT5pcCk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPmNhbGxfcGF0aF9oYW5kbGVyLCB0LCAiY2FsbF9wYXRoX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X2NhbGxfcmV0dXJuKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwKKwkJCQkgICAgIHN0cnVjdCBjYWxsX3JldHVybiAqY3IpCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwl1NjQgY29tbV9kYl9pZCA9IGNyLT5jb21tID8gY3ItPmNvbW0tPmRiX2lkIDogMDsKKwlQeU9iamVjdCAqdDsKKworCXQgPSB0dXBsZV9uZXcoMTEpOworCisJdHVwbGVfc2V0X3U2NCh0LCAwLCBjci0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMSwgY3ItPnRocmVhZC0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMiwgY29tbV9kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAzLCBjci0+Y3AtPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDQsIGNyLT5jYWxsX3RpbWUpOworCXR1cGxlX3NldF91NjQodCwgNSwgY3ItPnJldHVybl90aW1lKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDYsIGNyLT5icmFuY2hfY291bnQpOworCXR1cGxlX3NldF91NjQodCwgNywgY3ItPmNhbGxfcmVmKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDgsIGNyLT5yZXR1cm5fcmVmKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDksIGNyLT5jcC0+cGFyZW50LT5kYl9pZCk7CisJdHVwbGVfc2V0X3MzMih0LCAxMCwgY3ItPmZsYWdzKTsKKworCWNhbGxfb2JqZWN0KHRhYmxlcy0+Y2FsbF9yZXR1cm5faGFuZGxlciwgdCwgImNhbGxfcmV0dXJuX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fcHJvY2Vzc19jYWxsX3JldHVybihzdHJ1Y3QgY2FsbF9yZXR1cm4gKmNyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkYl9leHBvcnQgKmRiZSA9IGRhdGE7CisKKwlyZXR1cm4gZGJfZXhwb3J0X19jYWxsX3JldHVybihkYmUsIGNyKTsKK30KKwogc3RhdGljIHZvaWQgcHl0aG9uX3Byb2Nlc3NfZ2VuZXJhbF9ldmVudChzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKIAkJCQkJIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKIAkJCQkJIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKQEAgLTU1MSwxOSArODM1LDI1IEBACiAJUHlfREVDUkVGKHQpOwogfQogCi1zdGF0aWMgdm9pZCBweXRob25fcHJvY2Vzc19ldmVudCh1bmlvbiBwZXJmX2V2ZW50ICpldmVudCBfX21heWJlX3VudXNlZCwKK3N0YXRpYyB2b2lkIHB5dGhvbl9wcm9jZXNzX2V2ZW50KHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJCSBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKIAkJCQkgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAogCQkJCSBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCiAJCQkJIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSAmdGFibGVzX2dsb2JhbDsKKwogCXN3aXRjaCAoZXZzZWwtPmF0dHIudHlwZSkgewogCWNhc2UgUEVSRl9UWVBFX1RSQUNFUE9JTlQ6CiAJCXB5dGhvbl9wcm9jZXNzX3RyYWNlcG9pbnQoc2FtcGxlLCBldnNlbCwgdGhyZWFkLCBhbCk7CiAJCWJyZWFrOwogCS8qIFJlc2VydmUgZm9yIGZ1dHVyZSBwcm9jZXNzX2h3L3N3L3JhdyBBUElzICovCiAJZGVmYXVsdDoKLQkJcHl0aG9uX3Byb2Nlc3NfZ2VuZXJhbF9ldmVudChzYW1wbGUsIGV2c2VsLCB0aHJlYWQsIGFsKTsKKwkJaWYgKHRhYmxlcy0+ZGJfZXhwb3J0X21vZGUpCisJCQlkYl9leHBvcnRfX3NhbXBsZSgmdGFibGVzLT5kYmUsIGV2ZW50LCBzYW1wbGUsIGV2c2VsLAorCQkJCQkgIHRocmVhZCwgYWwpOworCQllbHNlCisJCQlweXRob25fcHJvY2Vzc19nZW5lcmFsX2V2ZW50KHNhbXBsZSwgZXZzZWwsIHRocmVhZCwgYWwpOwogCX0KIH0KIApAQCAtNTg5LDExICs4NzksNzkgQEAKIAlyZXR1cm4gLTE7CiB9CiAKKyNkZWZpbmUgU0VUX1RBQkxFX0hBTkRMRVJfKG5hbWUsIGhhbmRsZXJfbmFtZSwgdGFibGVfbmFtZSkgZG8gewkJXAorCXRhYmxlcy0+aGFuZGxlcl9uYW1lID0gZ2V0X2hhbmRsZXIoI3RhYmxlX25hbWUpOwkJXAorCWlmICh0YWJsZXMtPmhhbmRsZXJfbmFtZSkJCQkJCVwKKwkJdGFibGVzLT5kYmUuZXhwb3J0XyAjIyBuYW1lID0gcHl0aG9uX2V4cG9ydF8gIyMgbmFtZTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTRVRfVEFCTEVfSEFORExFUihuYW1lKSBcCisJU0VUX1RBQkxFX0hBTkRMRVJfKG5hbWUsIG5hbWUgIyMgX2hhbmRsZXIsIG5hbWUgIyMgX3RhYmxlKQorCitzdGF0aWMgdm9pZCBzZXRfdGFibGVfaGFuZGxlcnMoc3RydWN0IHRhYmxlcyAqdGFibGVzKQoreworCWNvbnN0IGNoYXIgKnBlcmZfZGJfZXhwb3J0X21vZGUgPSAicGVyZl9kYl9leHBvcnRfbW9kZSI7CisJY29uc3QgY2hhciAqcGVyZl9kYl9leHBvcnRfY2FsbHMgPSAicGVyZl9kYl9leHBvcnRfY2FsbHMiOworCVB5T2JqZWN0ICpkYl9leHBvcnRfbW9kZSwgKmRiX2V4cG9ydF9jYWxsczsKKwlib29sIGV4cG9ydF9jYWxscyA9IGZhbHNlOworCWludCByZXQ7CisKKwltZW1zZXQodGFibGVzLCAwLCBzaXplb2Yoc3RydWN0IHRhYmxlcykpOworCWlmIChkYl9leHBvcnRfX2luaXQoJnRhYmxlcy0+ZGJlKSkKKwkJUHlfRmF0YWxFcnJvcigiZmFpbGVkIHRvIGluaXRpYWxpemUgZXhwb3J0Iik7CisKKwlkYl9leHBvcnRfbW9kZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgcGVyZl9kYl9leHBvcnRfbW9kZSk7CisJaWYgKCFkYl9leHBvcnRfbW9kZSkKKwkJcmV0dXJuOworCisJcmV0ID0gUHlPYmplY3RfSXNUcnVlKGRiX2V4cG9ydF9tb2RlKTsKKwlpZiAocmV0ID09IC0xKQorCQloYW5kbGVyX2NhbGxfZGllKHBlcmZfZGJfZXhwb3J0X21vZGUpOworCWlmICghcmV0KQorCQlyZXR1cm47CisKKwl0YWJsZXMtPmRiZS5jcnAgPSBOVUxMOworCWRiX2V4cG9ydF9jYWxscyA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgcGVyZl9kYl9leHBvcnRfY2FsbHMpOworCWlmIChkYl9leHBvcnRfY2FsbHMpIHsKKwkJcmV0ID0gUHlPYmplY3RfSXNUcnVlKGRiX2V4cG9ydF9jYWxscyk7CisJCWlmIChyZXQgPT0gLTEpCisJCQloYW5kbGVyX2NhbGxfZGllKHBlcmZfZGJfZXhwb3J0X2NhbGxzKTsKKwkJZXhwb3J0X2NhbGxzID0gISFyZXQ7CisJfQorCisJaWYgKGV4cG9ydF9jYWxscykgeworCQl0YWJsZXMtPmRiZS5jcnAgPQorCQkJY2FsbF9yZXR1cm5fcHJvY2Vzc29yX19uZXcocHl0aG9uX3Byb2Nlc3NfY2FsbF9yZXR1cm4sCisJCQkJCQkgICAmdGFibGVzLT5kYmUpOworCQlpZiAoIXRhYmxlcy0+ZGJlLmNycCkKKwkJCVB5X0ZhdGFsRXJyb3IoImZhaWxlZCB0byBjcmVhdGUgY2FsbHMgcHJvY2Vzc29yIik7CisJfQorCisJdGFibGVzLT5kYl9leHBvcnRfbW9kZSA9IHRydWU7CisJLyoKKwkgKiBSZXNlcnZlIHBlciBzeW1ib2wgc3BhY2UgZm9yIHN5bWJvbC0+ZGJfaWQgdmlhIHN5bWJvbF9fcHJpdigpCisJICovCisJc3ltYm9sX2NvbmYucHJpdl9zaXplID0gc2l6ZW9mKHU2NCk7CisKKwlTRVRfVEFCTEVfSEFORExFUihldnNlbCk7CisJU0VUX1RBQkxFX0hBTkRMRVIobWFjaGluZSk7CisJU0VUX1RBQkxFX0hBTkRMRVIodGhyZWFkKTsKKwlTRVRfVEFCTEVfSEFORExFUihjb21tKTsKKwlTRVRfVEFCTEVfSEFORExFUihjb21tX3RocmVhZCk7CisJU0VUX1RBQkxFX0hBTkRMRVIoZHNvKTsKKwlTRVRfVEFCTEVfSEFORExFUihzeW1ib2wpOworCVNFVF9UQUJMRV9IQU5ETEVSKGJyYW5jaF90eXBlKTsKKwlTRVRfVEFCTEVfSEFORExFUihzYW1wbGUpOworCVNFVF9UQUJMRV9IQU5ETEVSKGNhbGxfcGF0aCk7CisJU0VUX1RBQkxFX0hBTkRMRVIoY2FsbF9yZXR1cm4pOworfQorCiAvKgogICogU3RhcnQgdHJhY2Ugc2NyaXB0CiAgKi8KIHN0YXRpYyBpbnQgcHl0aG9uX3N0YXJ0X3NjcmlwdChjb25zdCBjaGFyICpzY3JpcHQsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSAmdGFibGVzX2dsb2JhbDsKIAljb25zdCBjaGFyICoqY29tbWFuZF9saW5lOwogCWNoYXIgYnVmW1BBVEhfTUFYXTsKIAlpbnQgaSwgZXJyID0gMDsKQEAgLTYzMiw2ICs5OTAsMTQgQEAKIAogCWZyZWUoY29tbWFuZF9saW5lKTsKIAorCXNldF90YWJsZV9oYW5kbGVycyh0YWJsZXMpOworCisJaWYgKHRhYmxlcy0+ZGJfZXhwb3J0X21vZGUpIHsKKwkJZXJyID0gZGJfZXhwb3J0X19icmFuY2hfdHlwZXMoJnRhYmxlcy0+ZGJlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3I7CisJfQorCiAJcmV0dXJuIGVycjsKIGVycm9yOgogCVB5X0ZpbmFsaXplKCk7CkBAIC02NDIsNyArMTAwOCw5IEBACiAKIHN0YXRpYyBpbnQgcHl0aG9uX2ZsdXNoX3NjcmlwdCh2b2lkKQogewotCXJldHVybiAwOworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9ICZ0YWJsZXNfZ2xvYmFsOworCisJcmV0dXJuIGRiX2V4cG9ydF9fZmx1c2goJnRhYmxlcy0+ZGJlKTsKIH0KIAogLyoKQEAgLTY1MCw4ICsxMDE4LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgcHl0aG9uX3N0b3Bfc2NyaXB0KHZvaWQpCiB7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gJnRhYmxlc19nbG9iYWw7CisKIAl0cnlfY2FsbF9vYmplY3QoInRyYWNlX2VuZCIsIE5VTEwpOwogCisJZGJfZXhwb3J0X19leGl0KCZ0YWJsZXMtPmRiZSk7CisKIAlQeV9YREVDUkVGKG1haW5fZGljdCk7CiAJUHlfWERFQ1JFRihtYWluX21vZHVsZSk7CiAJUHlfRmluYWxpemUoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IDY3MDJhYzIuLjVmMGUwNWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtMjI4LDYgKzIyOCwxNSBAQAogCQkJCSAgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAorc3RhdGljIGludCBwcm9jZXNzX2lkX2luZGV4X3N0dWIoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCBfX21heWJlX3VudXNlZCwKKwkJCQkgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQgX19tYXliZV91bnVzZWQsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnBlcmZfc2Vzc2lvbgorCQkJCSBfX21heWJlX3VudXNlZCkKK3sKKwlkdW1wX3ByaW50ZigiOiB1bmhhbmRsZWQhXG4iKTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBwZXJmX3Rvb2xfX2ZpbGxfZGVmYXVsdHMoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCkKIHsKIAlpZiAodG9vbC0+c2FtcGxlID09IE5VTEwpCkBAIC0yNjIsNiArMjcxLDggQEAKIAkJZWxzZQogCQkJdG9vbC0+ZmluaXNoZWRfcm91bmQgPSBwcm9jZXNzX2ZpbmlzaGVkX3JvdW5kX3N0dWI7CiAJfQorCWlmICh0b29sLT5pZF9pbmRleCA9PSBOVUxMKQorCQl0b29sLT5pZF9pbmRleCA9IHByb2Nlc3NfaWRfaW5kZXhfc3R1YjsKIH0KICAKIHN0YXRpYyB2b2lkIHN3YXBfc2FtcGxlX2lkX2FsbCh1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKQEAgLTQ2MCw2ICs0NzEsNyBAQAogCVtQRVJGX1JFQ09SRF9IRUFERVJfRVZFTlRfVFlQRV0JICA9IHBlcmZfZXZlbnRfX2V2ZW50X3R5cGVfc3dhcCwKIAlbUEVSRl9SRUNPUkRfSEVBREVSX1RSQUNJTkdfREFUQV0gPSBwZXJmX2V2ZW50X190cmFjaW5nX2RhdGFfc3dhcCwKIAlbUEVSRl9SRUNPUkRfSEVBREVSX0JVSUxEX0lEXQkgID0gTlVMTCwKKwlbUEVSRl9SRUNPUkRfSURfSU5ERVhdCQkgID0gcGVyZl9ldmVudF9fYWxsNjRfc3dhcCwKIAlbUEVSRl9SRUNPUkRfSEVBREVSX01BWF0JICA9IE5VTEwsCiB9OwogCkBAIC01MjEsMTUgKzUzMywxMSBAQAogCQlyZXR1cm4gLUVUSU1FOwogCiAJaWYgKHRpbWVzdGFtcCA8IG9lLT5sYXN0X2ZsdXNoKSB7Ci0JCVdBUk5fT05DRSgxLCAiVGltZXN0YW1wIGJlbG93IGxhc3QgdGltZXNsaWNlIGZsdXNoXG4iKTsKLQotCQlwcl9vZV90aW1lKHRpbWVzdGFtcCwgICAgICAib3V0IG9mIG9yZGVyIGV2ZW50Iik7CisJCXByX29lX3RpbWUodGltZXN0YW1wLCAgICAgICJvdXQgb2Ygb3JkZXIgZXZlbnRcbiIpOwogCQlwcl9vZV90aW1lKG9lLT5sYXN0X2ZsdXNoLCAibGFzdCBmbHVzaCwgbGFzdF9mbHVzaF90eXBlICVkXG4iLAogCQkJICAgb2UtPmxhc3RfZmx1c2hfdHlwZSk7CiAKLQkJLyogV2UgY291bGQgZ2V0IG91dCBvZiBvcmRlciBtZXNzYWdlcyBhZnRlciBmb3JjZWQgZmx1c2guICovCi0JCWlmIChvZS0+bGFzdF9mbHVzaF90eXBlICE9IE9FX0ZMVVNIX19IQUxGKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCXMtPnN0YXRzLm5yX3Vub3JkZXJlZF9ldmVudHMrKzsKIAl9CiAKIAluZXcgPSBvcmRlcmVkX2V2ZW50c19fbmV3KG9lLCB0aW1lc3RhbXAsIGV2ZW50KTsKQEAgLTU4MCwxNSArNTg4LDQ2IEBACiAJfQogfQogCitzdGF0aWMgY29uc3QgY2hhciAqcmVnc19hYmlbXSA9IHsKKwlbUEVSRl9TQU1QTEVfUkVHU19BQklfTk9ORV0gPSAibm9uZSIsCisJW1BFUkZfU0FNUExFX1JFR1NfQUJJXzMyXSA9ICIzMi1iaXQiLAorCVtQRVJGX1NBTVBMRV9SRUdTX0FCSV82NF0gPSAiNjQtYml0IiwKK307CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcmVnc19kdW1wX2FiaShzdHJ1Y3QgcmVnc19kdW1wICpkKQoreworCWlmIChkLT5hYmkgPiBQRVJGX1NBTVBMRV9SRUdTX0FCSV82NCkKKwkJcmV0dXJuICJ1bmtub3duIjsKKworCXJldHVybiByZWdzX2FiaVtkLT5hYmldOworfQorCitzdGF0aWMgdm9pZCByZWdzX19wcmludGYoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IHJlZ3NfZHVtcCAqcmVncykKK3sKKwl1NjQgbWFzayA9IHJlZ3MtPm1hc2s7CisKKwlwcmludGYoIi4uLiAlcyByZWdzOiBtYXNrIDB4JSIgUFJJeDY0ICIgQUJJICVzXG4iLAorCSAgICAgICB0eXBlLAorCSAgICAgICBtYXNrLAorCSAgICAgICByZWdzX2R1bXBfYWJpKHJlZ3MpKTsKKworCXJlZ3NfZHVtcF9fcHJpbnRmKG1hc2ssIHJlZ3MtPnJlZ3MpOworfQorCiBzdGF0aWMgdm9pZCByZWdzX3VzZXJfX3ByaW50ZihzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSkKIHsKIAlzdHJ1Y3QgcmVnc19kdW1wICp1c2VyX3JlZ3MgPSAmc2FtcGxlLT51c2VyX3JlZ3M7CiAKLQlpZiAodXNlcl9yZWdzLT5yZWdzKSB7Ci0JCXU2NCBtYXNrID0gdXNlcl9yZWdzLT5tYXNrOwotCQlwcmludGYoIi4uLiB1c2VyIHJlZ3M6IG1hc2sgMHglIiBQUkl4NjQgIlxuIiwgbWFzayk7Ci0JCXJlZ3NfZHVtcF9fcHJpbnRmKG1hc2ssIHVzZXJfcmVncy0+cmVncyk7Ci0JfQorCWlmICh1c2VyX3JlZ3MtPnJlZ3MpCisJCXJlZ3NfX3ByaW50ZigidXNlciIsIHVzZXJfcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ3NfaW50cl9fcHJpbnRmKHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlKQoreworCXN0cnVjdCByZWdzX2R1bXAgKmludHJfcmVncyA9ICZzYW1wbGUtPmludHJfcmVnczsKKworCWlmIChpbnRyX3JlZ3MtPnJlZ3MpCisJCXJlZ3NfX3ByaW50ZigiaW50ciIsIGludHJfcmVncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YWNrX3VzZXJfX3ByaW50ZihzdHJ1Y3Qgc3RhY2tfZHVtcCAqZHVtcCkKQEAgLTY4Nyw2ICs3MjYsOSBAQAogCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfVVNFUikKIAkJcmVnc191c2VyX19wcmludGYoc2FtcGxlKTsKIAorCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikKKwkJcmVnc19pbnRyX19wcmludGYoc2FtcGxlKTsKKwogCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUQUNLX1VTRVIpCiAJCXN0YWNrX3VzZXJfX3ByaW50Zigmc2FtcGxlLT51c2VyX3N0YWNrKTsKIApAQCAtODg4LDExICs5MzAsMjYgQEAKIAkJcmV0dXJuIHRvb2wtPmJ1aWxkX2lkKHRvb2wsIGV2ZW50LCBzZXNzaW9uKTsKIAljYXNlIFBFUkZfUkVDT1JEX0ZJTklTSEVEX1JPVU5EOgogCQlyZXR1cm4gdG9vbC0+ZmluaXNoZWRfcm91bmQodG9vbCwgZXZlbnQsIHNlc3Npb24pOworCWNhc2UgUEVSRl9SRUNPUkRfSURfSU5ERVg6CisJCXJldHVybiB0b29sLT5pZF9pbmRleCh0b29sLCBldmVudCwgc2Vzc2lvbik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQogCitpbnQgcGVyZl9zZXNzaW9uX19kZWxpdmVyX3N5bnRoX2V2ZW50KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgICAgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkJICAgICAgc3RydWN0IHBlcmZfdG9vbCAqdG9vbCkKK3sKKwlldmVudHNfc3RhdHNfX2luYygmc2Vzc2lvbi0+c3RhdHMsIGV2ZW50LT5oZWFkZXIudHlwZSk7CisKKwlpZiAoZXZlbnQtPmhlYWRlci50eXBlID49IFBFUkZfUkVDT1JEX1VTRVJfVFlQRV9TVEFSVCkKKwkJcmV0dXJuIHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc191c2VyX2V2ZW50KHNlc3Npb24sIGV2ZW50LCB0b29sLCAwKTsKKworCXJldHVybiBwZXJmX3Nlc3Npb25fX2RlbGl2ZXJfZXZlbnQoc2Vzc2lvbiwgZXZlbnQsIHNhbXBsZSwgdG9vbCwgMCk7Cit9CisKIHN0YXRpYyB2b2lkIGV2ZW50X3N3YXAodW5pb24gcGVyZl9ldmVudCAqZXZlbnQsIGJvb2wgc2FtcGxlX2lkX2FsbCkKIHsKIAlwZXJmX2V2ZW50X19zd2FwX29wIHN3YXA7CkBAIC0xMDU3LDYgKzExMTQsOSBAQAogCQkJICAgICJEbyB5b3UgaGF2ZSBhIEtWTSBndWVzdCBydW5uaW5nIGFuZCBub3QgdXNpbmcgJ3BlcmYga3ZtJz9cbiIsCiAJCQkgICAgc2Vzc2lvbi0+c3RhdHMubnJfdW5wcm9jZXNzYWJsZV9zYW1wbGVzKTsKIAl9CisKKwlpZiAoc2Vzc2lvbi0+c3RhdHMubnJfdW5vcmRlcmVkX2V2ZW50cyAhPSAwKQorCQl1aV9fd2FybmluZygiJXUgb3V0IG9mIG9yZGVyIGV2ZW50cyByZWNvcmRlZC5cbiIsIHNlc3Npb24tPnN0YXRzLm5yX3Vub3JkZXJlZF9ldmVudHMpOwogfQogCiB2b2xhdGlsZSBpbnQgc2Vzc2lvbl9kb25lOwpAQCAtMTQxNyw5ICsxNDc3LDkgQEAKIAlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiAmJiBzYW1wbGUtPmNhbGxjaGFpbikgewogCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBub2RlX2FsOwogCi0JCWlmIChtYWNoaW5lX19yZXNvbHZlX2NhbGxjaGFpbihhbC0+bWFjaGluZSwgZXZzZWwsIGFsLT50aHJlYWQsCi0JCQkJCSAgICAgICBzYW1wbGUsIE5VTEwsIE5VTEwsCi0JCQkJCSAgICAgICBQRVJGX01BWF9TVEFDS19ERVBUSCkgIT0gMCkgeworCQlpZiAodGhyZWFkX19yZXNvbHZlX2NhbGxjaGFpbihhbC0+dGhyZWFkLCBldnNlbCwKKwkJCQkJICAgICAgc2FtcGxlLCBOVUxMLCBOVUxMLAorCQkJCQkgICAgICBQRVJGX01BWF9TVEFDS19ERVBUSCkgIT0gMCkgewogCQkJaWYgKHZlcmJvc2UpCiAJCQkJZXJyb3IoIkZhaWxlZCB0byByZXNvbHZlIGNhbGxjaGFpbi4gU2tpcHBpbmdcbiIpOwogCQkJcmV0dXJuOwpAQCAtMTU5NCwzICsxNjU0LDExMSBAQAogb3V0OgogCXJldHVybiBlcnI7CiB9CisKK2ludCBwZXJmX2V2ZW50X19wcm9jZXNzX2lkX2luZGV4KHN0cnVjdCBwZXJmX3Rvb2wgKnRvb2wgX19tYXliZV91bnVzZWQsCisJCQkJIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0ID0gc2Vzc2lvbi0+ZXZsaXN0OworCXN0cnVjdCBpZF9pbmRleF9ldmVudCAqaWUgPSAmZXZlbnQtPmlkX2luZGV4OworCXNpemVfdCBpLCBuciwgbWF4X25yOworCisJbWF4X25yID0gKGllLT5oZWFkZXIuc2l6ZSAtIHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZXZlbnQpKSAvCisJCSBzaXplb2Yoc3RydWN0IGlkX2luZGV4X2VudHJ5KTsKKwluciA9IGllLT5ucjsKKwlpZiAobnIgPiBtYXhfbnIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGR1bXBfdHJhY2UpCisJCWZwcmludGYoc3Rkb3V0LCAiIG5yOiAlenVcbiIsIG5yKTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXN0cnVjdCBpZF9pbmRleF9lbnRyeSAqZSA9ICZpZS0+ZW50cmllc1tpXTsKKwkJc3RydWN0IHBlcmZfc2FtcGxlX2lkICpzaWQ7CisKKwkJaWYgKGR1bXBfdHJhY2UpIHsKKwkJCWZwcmludGYoc3Rkb3V0LAkiIC4uLiBpZDogJSJQUkl1NjQsIGUtPmlkKTsKKwkJCWZwcmludGYoc3Rkb3V0LAkiICBpZHg6ICUiUFJJdTY0LCBlLT5pZHgpOworCQkJZnByaW50ZihzdGRvdXQsCSIgIGNwdTogJSJQUklkNjQsIGUtPmNwdSk7CisJCQlmcHJpbnRmKHN0ZG91dCwJIiAgdGlkOiAlIlBSSWQ2NCJcbiIsIGUtPnRpZCk7CisJCX0KKworCQlzaWQgPSBwZXJmX2V2bGlzdF9faWQyc2lkKGV2bGlzdCwgZS0+aWQpOworCQlpZiAoIXNpZCkKKwkJCXJldHVybiAtRU5PRU5UOworCQlzaWQtPmlkeCA9IGUtPmlkeDsKKwkJc2lkLT5jcHUgPSBlLT5jcHU7CisJCXNpZC0+dGlkID0gZS0+dGlkOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfaWRfaW5kZXgoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCwKKwkJCQkgICAgcGVyZl9ldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJICAgIHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LAorCQkJCSAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwl1bmlvbiBwZXJmX2V2ZW50ICpldjsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CisJc2l6ZV90IG5yID0gMCwgaSA9IDAsIHN6LCBtYXhfbnIsIG47CisJaW50IGVycjsKKworCXByX2RlYnVnMigiU3ludGhlc2l6aW5nIGlkIGluZGV4XG4iKTsKKworCW1heF9uciA9IChVSU5UMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpZF9pbmRleF9ldmVudCkpIC8KKwkJIHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZW50cnkpOworCisJZXZsaXN0X19mb3JfZWFjaChldmxpc3QsIGV2c2VsKQorCQluciArPSBldnNlbC0+aWRzOworCisJbiA9IG5yID4gbWF4X25yID8gbWF4X25yIDogbnI7CisJc3ogPSBzaXplb2Yoc3RydWN0IGlkX2luZGV4X2V2ZW50KSArIG4gKiBzaXplb2Yoc3RydWN0IGlkX2luZGV4X2VudHJ5KTsKKwlldiA9IHphbGxvYyhzeik7CisJaWYgKCFldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlldi0+aWRfaW5kZXguaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9JRF9JTkRFWDsKKwlldi0+aWRfaW5kZXguaGVhZGVyLnNpemUgPSBzejsKKwlldi0+aWRfaW5kZXgubnIgPSBuOworCisJZXZsaXN0X19mb3JfZWFjaChldmxpc3QsIGV2c2VsKSB7CisJCXUzMiBqOworCisJCWZvciAoaiA9IDA7IGogPCBldnNlbC0+aWRzOyBqKyspIHsKKwkJCXN0cnVjdCBpZF9pbmRleF9lbnRyeSAqZTsKKwkJCXN0cnVjdCBwZXJmX3NhbXBsZV9pZCAqc2lkOworCisJCQlpZiAoaSA+PSBuKSB7CisJCQkJZXJyID0gcHJvY2Vzcyh0b29sLCBldiwgTlVMTCwgbWFjaGluZSk7CisJCQkJaWYgKGVycikKKwkJCQkJZ290byBvdXRfZXJyOworCQkJCW5yIC09IG47CisJCQkJaSA9IDA7CisJCQl9CisKKwkJCWUgPSAmZXYtPmlkX2luZGV4LmVudHJpZXNbaSsrXTsKKworCQkJZS0+aWQgPSBldnNlbC0+aWRbal07CisKKwkJCXNpZCA9IHBlcmZfZXZsaXN0X19pZDJzaWQoZXZsaXN0LCBlLT5pZCk7CisJCQlpZiAoIXNpZCkgeworCQkJCWZyZWUoZXYpOworCQkJCXJldHVybiAtRU5PRU5UOworCQkJfQorCisJCQllLT5pZHggPSBzaWQtPmlkeDsKKwkJCWUtPmNwdSA9IHNpZC0+Y3B1OworCQkJZS0+dGlkID0gc2lkLT50aWQ7CisJCX0KKwl9CisKKwlzeiA9IHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZXZlbnQpICsgbnIgKiBzaXplb2Yoc3RydWN0IGlkX2luZGV4X2VudHJ5KTsKKwlldi0+aWRfaW5kZXguaGVhZGVyLnNpemUgPSBzejsKKwlldi0+aWRfaW5kZXgubnIgPSBucjsKKworCWVyciA9IHByb2Nlc3ModG9vbCwgZXYsIE5VTEwsIG1hY2hpbmUpOworb3V0X2VycjoKKwlmcmVlKGV2KTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAppbmRleCBhNGJlODUxLi5kYzI2ZWJmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKQEAgLTEyNiw0ICsxMjYsMTkgQEAKIGV4dGVybiB2b2xhdGlsZSBpbnQgc2Vzc2lvbl9kb25lOwogCiAjZGVmaW5lIHNlc3Npb25fZG9uZSgpCUFDQ0VTU19PTkNFKHNlc3Npb25fZG9uZSkKKworaW50IHBlcmZfc2Vzc2lvbl9fZGVsaXZlcl9zeW50aF9ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCSAgICAgIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCSAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAorCQkJCSAgICAgIHN0cnVjdCBwZXJmX3Rvb2wgKnRvb2wpOworCitpbnQgcGVyZl9ldmVudF9fcHJvY2Vzc19pZF9pbmRleChzdHJ1Y3QgcGVyZl90b29sICp0b29sLAorCQkJCSB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CisKK2ludCBwZXJmX2V2ZW50X19zeW50aGVzaXplX2lkX2luZGV4KHN0cnVjdCBwZXJmX3Rvb2wgKnRvb2wsCisJCQkJICAgIHBlcmZfZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAorCQkJCSAgICBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwKKwkJCQkgICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOworCiAjZW5kaWYgLyogX19QRVJGX1NFU1NJT05fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKaW5kZXggOTQwMjg4NS4uOTEzOWRkYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuYworKysgYi90b29scy9wZXJmL3V0aWwvc29ydC5jCkBAIC0yOTEsNyArMjkxLDggQEAKIAkJZWxzZSB7CiAJCQlzdHJ1Y3QgbWFwICptYXAgPSBsZWZ0LT5tcy5tYXA7CiAJCQlsZWZ0LT5zcmNsaW5lID0gZ2V0X3NyY2xpbmUobWFwLT5kc28sCi0JCQkJCSAgICBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIGxlZnQtPmlwKSk7CisJCQkJCSAgIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgbGVmdC0+aXApLAorCQkJCQkJICAgIGxlZnQtPm1zLnN5bSwgdHJ1ZSk7CiAJCX0KIAl9CiAJaWYgKCFyaWdodC0+c3JjbGluZSkgewpAQCAtMzAwLDcgKzMwMSw4IEBACiAJCWVsc2UgewogCQkJc3RydWN0IG1hcCAqbWFwID0gcmlnaHQtPm1zLm1hcDsKIAkJCXJpZ2h0LT5zcmNsaW5lID0gZ2V0X3NyY2xpbmUobWFwLT5kc28sCi0JCQkJCSAgICBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHJpZ2h0LT5pcCkpOworCQkJCQkgICAgIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgcmlnaHQtPmlwKSwKKwkJCQkJCSAgICAgcmlnaHQtPm1zLnN5bSwgdHJ1ZSk7CiAJCX0KIAl9CiAJcmV0dXJuIHN0cmNtcChyaWdodC0+c3JjbGluZSwgbGVmdC0+c3JjbGluZSk7CkBAIC0zMDksNyArMzExLDcgQEAKIHN0YXRpYyBpbnQgaGlzdF9lbnRyeV9fc3JjbGluZV9zbnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIGNoYXIgKmJmLAogCQkJCQlzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IHdpZHRoKQogewotCXJldHVybiByZXBzZXBfc25wcmludGYoYmYsIHNpemUsICIlKi4qLXMiLCB3aWR0aCwgd2lkdGgsIGhlLT5zcmNsaW5lKTsKKwlyZXR1cm4gcmVwc2VwX3NucHJpbnRmKGJmLCBzaXplLCAiJS0qLipzIiwgd2lkdGgsIHdpZHRoLCBoZS0+c3JjbGluZSk7CiB9CiAKIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfc3JjbGluZSA9IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zcmNsaW5lLmMgYi90b29scy9wZXJmL3V0aWwvc3JjbGluZS5jCmluZGV4IGYzZTRiYzUuLmU3M2I2YTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zcmNsaW5lLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NyY2xpbmUuYwpAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKICNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCiAKKyNpbmNsdWRlICJzeW1ib2wuaCIKKwogI2lmZGVmIEhBVkVfTElCQkZEX1NVUFBPUlQKIAogLyoKQEAgLTI1MCw3ICsyNTIsOCBAQAogICovCiAjZGVmaW5lIEEyTF9GQUlMX0xJTUlUIDEyMwogCi1jaGFyICpnZXRfc3JjbGluZShzdHJ1Y3QgZHNvICpkc28sIHVuc2lnbmVkIGxvbmcgYWRkcikKK2NoYXIgKmdldF9zcmNsaW5lKHN0cnVjdCBkc28gKmRzbywgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCSAgYm9vbCBzaG93X3N5bSkKIHsKIAljaGFyICpmaWxlID0gTlVMTDsKIAl1bnNpZ25lZCBsaW5lID0gMDsKQEAgLTI1OCw3ICsyNjEsNyBAQAogCWNvbnN0IGNoYXIgKmRzb19uYW1lOwogCiAJaWYgKCFkc28tPmhhc19zcmNsaW5lKQotCQlyZXR1cm4gU1JDTElORV9VTktOT1dOOworCQlnb3RvIG91dDsKIAogCWlmIChkc28tPnN5bXNyY19maWxlbmFtZSkKIAkJZHNvX25hbWUgPSBkc28tPnN5bXNyY19maWxlbmFtZTsKQEAgLTI3NCw3ICsyNzcsNyBAQAogCWlmICghYWRkcjJsaW5lKGRzb19uYW1lLCBhZGRyLCAmZmlsZSwgJmxpbmUsIGRzbykpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGFzcHJpbnRmKCZzcmNsaW5lLCAiJXM6JXUiLCBmaWxlLCBsaW5lKSA8IDApIHsKKwlpZiAoYXNwcmludGYoJnNyY2xpbmUsICIlczoldSIsIGJhc2VuYW1lKGZpbGUpLCBsaW5lKSA8IDApIHsKIAkJZnJlZShmaWxlKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjg5LDcgKzI5MiwxMyBAQAogCQlkc28tPmhhc19zcmNsaW5lID0gMDsKIAkJZHNvX19mcmVlX2EybChkc28pOwogCX0KLQlyZXR1cm4gU1JDTElORV9VTktOT1dOOworCWlmIChzeW0pIHsKKwkJaWYgKGFzcHJpbnRmKCZzcmNsaW5lLCAiJXMrJWxkIiwgc2hvd19zeW0gPyBzeW0tPm5hbWUgOiAiIiwKKwkJCQkJYWRkciAtIHN5bS0+c3RhcnQpIDwgMCkKKwkJCXJldHVybiBTUkNMSU5FX1VOS05PV047CisJfSBlbHNlIGlmIChhc3ByaW50Zigmc3JjbGluZSwgIiVzWyVseF0iLCBkc28tPnNob3J0X25hbWUsIGFkZHIpIDwgMCkKKwkJcmV0dXJuIFNSQ0xJTkVfVU5LTk9XTjsKKwlyZXR1cm4gc3JjbGluZTsKIH0KIAogdm9pZCBmcmVlX3NyY2xpbmUoY2hhciAqc3JjbGluZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jCmluZGV4IDFlMjNhNWIuLjA2ZmNkMWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1lbGYuYwpAQCAtMTEsNiArMTEsMjcgQEAKICNpbmNsdWRlIDxzeW1ib2wva2FsbHN5bXMuaD4KICNpbmNsdWRlICJkZWJ1Zy5oIgogCisjaWZkZWYgSEFWRV9DUExVU19ERU1BTkdMRV9TVVBQT1JUCitleHRlcm4gY2hhciAqY3BsdXNfZGVtYW5nbGUoY29uc3QgY2hhciAqLCBpbnQpOworCitzdGF0aWMgaW5saW5lIGNoYXIgKmJmZF9kZW1hbmdsZSh2b2lkIF9fbWF5YmVfdW51c2VkICp2LCBjb25zdCBjaGFyICpjLCBpbnQgaSkKK3sKKwlyZXR1cm4gY3BsdXNfZGVtYW5nbGUoYywgaSk7Cit9CisjZWxzZQorI2lmZGVmIE5PX0RFTUFOR0xFCitzdGF0aWMgaW5saW5lIGNoYXIgKmJmZF9kZW1hbmdsZSh2b2lkIF9fbWF5YmVfdW51c2VkICp2LAorCQkJCSBjb25zdCBjaGFyIF9fbWF5YmVfdW51c2VkICpjLAorCQkJCSBpbnQgX19tYXliZV91bnVzZWQgaSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbHNlCisjZGVmaW5lIFBBQ0tBR0UgJ3BlcmYnCisjaW5jbHVkZSA8YmZkLmg+CisjZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIEhBVkVfRUxGX0dFVFBIRFJOVU1fU1VQUE9SVAogc3RhdGljIGludCBlbGZfZ2V0cGhkcm51bShFbGYgKmVsZiwgc2l6ZV90ICpkc3QpCiB7CkBAIC01NDYsNiArNTY3LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZGVjb21wcmVzc19rbW9kdWxlKHN0cnVjdCBkc28gKmRzbywgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgIGVudW0gZHNvX2JpbmFyeV90eXBlIHR5cGUpCit7CisJaW50IGZkOworCWNvbnN0IGNoYXIgKmV4dCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKwljaGFyIHRtcGJ1ZltdID0gIi90bXAvcGVyZi1rbW9kLVhYWFhYWCI7CisKKwlpZiAoKHR5cGUgIT0gRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFX0NPTVAgJiYKKwkgICAgIHR5cGUgIT0gRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVApIHx8CisJICAgIHR5cGUgIT0gZHNvLT5zeW10YWJfdHlwZSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFleHQgfHwgIWlzX3N1cHBvcnRlZF9jb21wcmVzc2lvbihleHQgKyAxKSkKKwkJcmV0dXJuIC0xOworCisJZmQgPSBta3N0ZW1wKHRtcGJ1Zik7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFkZWNvbXByZXNzX3RvX2ZpbGUoZXh0ICsgMSwgbmFtZSwgZmQpKSB7CisJCWNsb3NlKGZkKTsKKwkJZmQgPSAtMTsKKwl9CisKKwl1bmxpbmsodG1wYnVmKTsKKworCXJldHVybiBmZDsKK30KKwogYm9vbCBzeW1zcmNfX3Bvc3NpYmx5X3J1bnRpbWUoc3RydWN0IHN5bXNyYyAqc3MpCiB7CiAJcmV0dXJuIHNzLT5keW5zeW0gfHwgc3MtPm9wZHNlYzsKQEAgLTU3MSw3ICs2MjEsMTEgQEAKIAlFbGYgKmVsZjsKIAlpbnQgZmQ7CiAKLQlmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkpOworCWlmIChkc29fX25lZWRzX2RlY29tcHJlc3MoZHNvKSkKKwkJZmQgPSBkZWNvbXByZXNzX2ttb2R1bGUoZHNvLCBuYW1lLCB0eXBlKTsKKwllbHNlCisJCWZkID0gb3BlbihuYW1lLCBPX1JET05MWSk7CisKIAlpZiAoZmQgPCAwKQogCQlyZXR1cm4gLTE7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wtbWluaW1hbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1taW5pbWFsLmMKaW5kZXggYzk1NDFmZS4uZmE1ODVjNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1taW5pbWFsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1taW5pbWFsLmMKQEAgLTM0MSw3ICszNDEsNiBAQAogCiAJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHNzLT5uYW1lLCBidWlsZF9pZCwgQlVJTERfSURfU0laRSkgPiAwKSB7CiAJCWRzb19fc2V0X2J1aWxkX2lkKGRzbywgYnVpbGRfaWQpOwotCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggMDc4MzMxMS4uYzI0YzViOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtNTEsNyArNTEsOSBAQAogCURTT19CSU5BUllfVFlQRV9fQlVJTERJRF9ERUJVR0lORk8sCiAJRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9EU08sCiAJRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFLAorCURTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRV9DT01QLAogCURTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRSwKKwlEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEVfQ09NUCwKIAlEU09fQklOQVJZX1RZUEVfX09QRU5FTUJFRERFRF9ERUJVR0lORk8sCiAJRFNPX0JJTkFSWV9UWVBFX19OT1RfRk9VTkQsCiB9OwpAQCAtMTMwMCw3ICsxMzAyLDkgQEAKIAkJcmV0dXJuIGRzby0+a2VybmVsID09IERTT19UWVBFX0dVRVNUX0tFUk5FTDsKIAogCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFOgorCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVA6CiAJY2FzZSBEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEU6CisJY2FzZSBEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEVfQ09NUDoKIAkJLyoKIAkJICoga2VybmVsIG1vZHVsZXMga25vdyB0aGVpciBzeW10YWIgdHlwZSAtIGl0J3Mgc2V0IHdoZW4KIAkJICogY3JlYXRpbmcgYSBtb2R1bGUgZHNvIGluIG1hY2hpbmVfX25ld19tb2R1bGUoKS4KQEAgLTEzNjgsNyArMTM3Miw5IEBACiAJCXJldHVybiAtMTsKIAogCWttb2QgPSBkc28tPnN5bXRhYl90eXBlID09IERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRSB8fAotCQlkc28tPnN5bXRhYl90eXBlID09IERTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRTsKKwkJZHNvLT5zeW10YWJfdHlwZSA9PSBEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEVfQ09NUCB8fAorCQlkc28tPnN5bXRhYl90eXBlID09IERTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRSB8fAorCQlkc28tPnN5bXRhYl90eXBlID09IERTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRV9DT01QOwogCiAJLyoKIAkgKiBJdGVyYXRlIG92ZXIgY2FuZGlkYXRlIGRlYnVnIGltYWdlcy4KQEAgLTE1MDUsMTIgKzE1MTEsMTAgQEAKIAkJCSAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IGksIGVyciA9IDA7Ci0JY2hhciAqZmlsZW5hbWU7CisJY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogCi0JcHJfZGVidWcoIkxvb2tpbmcgYXQgdGhlIHZtbGludXhfcGF0aCAoJWQgZW50cmllcyBsb25nKVxuIiwKLQkJIHZtbGludXhfcGF0aF9fbnJfZW50cmllcyArIDEpOwotCi0JZmlsZW5hbWUgPSBkc29fX2J1aWxkX2lkX2ZpbGVuYW1lKGRzbywgTlVMTCwgMCk7CisJaWYgKCFzeW1ib2xfY29uZi5pZ25vcmVfdm1saW51eF9idWlsZGlkKQorCQlmaWxlbmFtZSA9IGRzb19fYnVpbGRfaWRfZmlsZW5hbWUoZHNvLCBOVUxMLCAwKTsKIAlpZiAoZmlsZW5hbWUgIT0gTlVMTCkgewogCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChkc28sIG1hcCwgZmlsZW5hbWUsIHRydWUsIGZpbHRlcik7CiAJCWlmIChlcnIgPiAwKQpAQCAtMTUxOCw2ICsxNTIyLDkgQEAKIAkJZnJlZShmaWxlbmFtZSk7CiAJfQogCisJcHJfZGVidWcoIkxvb2tpbmcgYXQgdGhlIHZtbGludXhfcGF0aCAoJWQgZW50cmllcyBsb25nKVxuIiwKKwkJIHZtbGludXhfcGF0aF9fbnJfZW50cmllcyArIDEpOworCiAJZm9yIChpID0gMDsgaSA8IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsgKytpKSB7CiAJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KGRzbywgbWFwLCB2bWxpbnV4X3BhdGhbaV0sIGZhbHNlLCBmaWx0ZXIpOwogCQlpZiAoZXJyID4gMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAppbmRleCBlYjJjMTliLi45ZDYwMmU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCkBAIC0yMywyNyArMjMsNiBAQAogCiAjaW5jbHVkZSAiZHNvLmgiCiAKLSNpZmRlZiBIQVZFX0NQTFVTX0RFTUFOR0xFX1NVUFBPUlQKLWV4dGVybiBjaGFyICpjcGx1c19kZW1hbmdsZShjb25zdCBjaGFyICosIGludCk7Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqYmZkX2RlbWFuZ2xlKHZvaWQgX19tYXliZV91bnVzZWQgKnYsIGNvbnN0IGNoYXIgKmMsIGludCBpKQotewotCXJldHVybiBjcGx1c19kZW1hbmdsZShjLCBpKTsKLX0KLSNlbHNlCi0jaWZkZWYgTk9fREVNQU5HTEUKLXN0YXRpYyBpbmxpbmUgY2hhciAqYmZkX2RlbWFuZ2xlKHZvaWQgX19tYXliZV91bnVzZWQgKnYsCi0JCQkJIGNvbnN0IGNoYXIgX19tYXliZV91bnVzZWQgKmMsCi0JCQkJIGludCBfX21heWJlX3VudXNlZCBpKQotewotCXJldHVybiBOVUxMOwotfQotI2Vsc2UKLSNkZWZpbmUgUEFDS0FHRSAncGVyZicKLSNpbmNsdWRlIDxiZmQuaD4KLSNlbmRpZgotI2VuZGlmCi0KIC8qCiAgKiBsaWJlbGYgMC44LnggYW5kIGVhcmxpZXIgZG8gbm90IHN1cHBvcnQgRUxGX0NfUkVBRF9NTUFQOwogICogZm9yIG5ld2VyIHZlcnNpb25zIHdlIGNhbiB1c2UgbW1hcCB0byByZWR1Y2UgbWVtb3J5IHVzYWdlOgpAQCAtMTA1LDYgKzg0LDcgQEAKIAl1bnNpZ25lZCBzaG9ydAlucl9ldmVudHM7CiAJYm9vbAkJdHJ5X3ZtbGludXhfcGF0aCwKIAkJCWlnbm9yZV92bWxpbnV4LAorCQkJaWdub3JlX3ZtbGludXhfYnVpbGRpZCwKIAkJCXNob3dfa2VybmVsX3BhdGgsCiAJCQl1c2VfbW9kdWxlcywKIAkJCXNvcnRfYnlfbmFtZSwKQEAgLTEyMiw3ICsxMDIsOCBAQAogCQkJZGVtYW5nbGUsCiAJCQlkZW1hbmdsZV9rZXJuZWwsCiAJCQlmaWx0ZXJfcmVsYXRpdmUsCi0JCQlzaG93X2hpc3RfaGVhZGVyczsKKwkJCXNob3dfaGlzdF9oZWFkZXJzLAorCQkJYnJhbmNoX2NhbGxzdGFjazsKIAljb25zdCBjaGFyCSp2bWxpbnV4X25hbWUsCiAJCQkqa2FsbHN5bXNfbmFtZSwKIAkJCSpzb3VyY2VfcHJlZml4LApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC1zdGFjay5jIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC1zdGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZDU5YTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLXN0YWNrLmMKQEAgLTAsMCArMSw3NDcgQEAKKy8qCisgKiB0aHJlYWQtc3RhY2suYzogU3ludGhlc2l6ZSBhIHRocmVhZCdzIHN0YWNrIHVzaW5nIGNhbGwgLyByZXR1cm4gZXZlbnRzCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlICJ0aHJlYWQuaCIKKyNpbmNsdWRlICJldmVudC5oIgorI2luY2x1ZGUgIm1hY2hpbmUuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlICJjb21tLmgiCisjaW5jbHVkZSAidGhyZWFkLXN0YWNrLmgiCisKKyNkZWZpbmUgQ0FMTF9QQVRIX0JMT0NLX1NISUZUIDgKKyNkZWZpbmUgQ0FMTF9QQVRIX0JMT0NLX1NJWkUgKDEgPDwgQ0FMTF9QQVRIX0JMT0NLX1NISUZUKQorI2RlZmluZSBDQUxMX1BBVEhfQkxPQ0tfTUFTSyAoQ0FMTF9QQVRIX0JMT0NLX1NJWkUgLSAxKQorCitzdHJ1Y3QgY2FsbF9wYXRoX2Jsb2NrIHsKKwlzdHJ1Y3QgY2FsbF9wYXRoIGNwW0NBTExfUEFUSF9CTE9DS19TSVpFXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBjYWxsX3BhdGhfcm9vdCAtIHJvb3Qgb2YgYWxsIGNhbGwgcGF0aHMuCisgKiBAY2FsbF9wYXRoOiByb290IGNhbGwgcGF0aAorICogQGJsb2NrczogbGlzdCBvZiBibG9ja3MgdG8gc3RvcmUgY2FsbCBwYXRocworICogQG5leHQ6IG5leHQgZnJlZSBzcGFjZQorICogQHN6OiBudW1iZXIgb2Ygc3BhY2VzCisgKi8KK3N0cnVjdCBjYWxsX3BhdGhfcm9vdCB7CisJc3RydWN0IGNhbGxfcGF0aCBjYWxsX3BhdGg7CisJc3RydWN0IGxpc3RfaGVhZCBibG9ja3M7CisJc2l6ZV90IG5leHQ7CisJc2l6ZV90IHN6OworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yIC0gcHJvdmlkZXMgYSBjYWxsLWJhY2sgdG8gY29uc3VtZSBjYWxsLXJldHVybgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICogQGNwcjogY2FsbCBwYXRoIHJvb3QKKyAqIEBwcm9jZXNzOiBjYWxsLWJhY2sgdGhhdCBhY2NlcHRzIGNhbGwvcmV0dXJuIGluZm9ybWF0aW9uCisgKiBAZGF0YTogYW5vbnltb3VzIGRhdGEgZm9yIGNhbGwtYmFjaworICovCitzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yIHsKKwlzdHJ1Y3QgY2FsbF9wYXRoX3Jvb3QgKmNwcjsKKwlpbnQgKCpwcm9jZXNzKShzdHJ1Y3QgY2FsbF9yZXR1cm4gKmNyLCB2b2lkICpkYXRhKTsKKwl2b2lkICpkYXRhOworfTsKKworI2RlZmluZSBTVEFDS19HUk9XVEggMjA0OAorCisvKioKKyAqIHN0cnVjdCB0aHJlYWRfc3RhY2tfZW50cnkgLSB0aHJlYWQgc3RhY2sgZW50cnkuCisgKiBAcmV0X2FkZHI6IHJldHVybiBhZGRyZXNzCisgKiBAdGltZXN0YW1wOiB0aW1lc3RhbXAgKGlmIGtub3duKQorICogQHJlZjogZXh0ZXJuYWwgcmVmZXJlbmNlIChlLmcuIGRiX2lkIG9mIHNhbXBsZSkKKyAqIEBicmFuY2hfY291bnQ6IHRoZSBicmFuY2ggY291bnQgd2hlbiB0aGUgZW50cnkgd2FzIGNyZWF0ZWQKKyAqIEBjcDogY2FsbCBwYXRoCisgKiBAbm9fY2FsbDogYSAnY2FsbCcgd2FzIG5vdCBzZWVuCisgKi8KK3N0cnVjdCB0aHJlYWRfc3RhY2tfZW50cnkgeworCXU2NCByZXRfYWRkcjsKKwl1NjQgdGltZXN0YW1wOworCXU2NCByZWY7CisJdTY0IGJyYW5jaF9jb3VudDsKKwlzdHJ1Y3QgY2FsbF9wYXRoICpjcDsKKwlib29sIG5vX2NhbGw7Cit9OworCisvKioKKyAqIHN0cnVjdCB0aHJlYWRfc3RhY2sgLSB0aHJlYWQgc3RhY2sgY29uc3RydWN0ZWQgZnJvbSAnY2FsbCcgYW5kICdyZXR1cm4nCisgKiAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoIHNhbXBsZXMuCisgKiBAc3RhY2s6IGFycmF5IHRoYXQgaG9sZHMgdGhlIHN0YWNrCisgKiBAY250OiBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc3RhY2sKKyAqIEBzejogY3VycmVudCBtYXhpbXVtIHN0YWNrIHNpemUKKyAqIEB0cmFjZV9ucjogY3VycmVudCB0cmFjZSBudW1iZXIKKyAqIEBicmFuY2hfY291bnQ6IHJ1bm5pbmcgYnJhbmNoIGNvdW50CisgKiBAa2VybmVsX3N0YXJ0OiBrZXJuZWwgc3RhcnQgYWRkcmVzcworICogQGxhc3RfdGltZTogbGFzdCB0aW1lc3RhbXAKKyAqIEBjcnA6IGNhbGwvcmV0dXJuIHByb2Nlc3NvcgorICogQGNvbW06IGN1cnJlbnQgY29tbQorICovCitzdHJ1Y3QgdGhyZWFkX3N0YWNrIHsKKwlzdHJ1Y3QgdGhyZWFkX3N0YWNrX2VudHJ5ICpzdGFjazsKKwlzaXplX3QgY250OworCXNpemVfdCBzejsKKwl1NjQgdHJhY2VfbnI7CisJdTY0IGJyYW5jaF9jb3VudDsKKwl1NjQga2VybmVsX3N0YXJ0OworCXU2NCBsYXN0X3RpbWU7CisJc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwOworCXN0cnVjdCBjb21tICpjb21tOworfTsKKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX2dyb3coc3RydWN0IHRocmVhZF9zdGFjayAqdHMpCit7CisJc3RydWN0IHRocmVhZF9zdGFja19lbnRyeSAqbmV3X3N0YWNrOworCXNpemVfdCBzeiwgbmV3X3N6OworCisJbmV3X3N6ID0gdHMtPnN6ICsgU1RBQ0tfR1JPV1RIOworCXN6ID0gbmV3X3N6ICogc2l6ZW9mKHN0cnVjdCB0aHJlYWRfc3RhY2tfZW50cnkpOworCisJbmV3X3N0YWNrID0gcmVhbGxvYyh0cy0+c3RhY2ssIHN6KTsKKwlpZiAoIW5ld19zdGFjaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cy0+c3RhY2sgPSBuZXdfc3RhY2s7CisJdHMtPnN6ID0gbmV3X3N6OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0aHJlYWRfc3RhY2tfX25ldyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCQkJCSAgICAgIHN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgKmNycCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0czsKKworCXRzID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgdGhyZWFkX3N0YWNrKSk7CisJaWYgKCF0cykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodGhyZWFkX3N0YWNrX19ncm93KHRzKSkgeworCQlmcmVlKHRzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHRocmVhZC0+bWcgJiYgdGhyZWFkLT5tZy0+bWFjaGluZSkKKwkJdHMtPmtlcm5lbF9zdGFydCA9IG1hY2hpbmVfX2tlcm5lbF9zdGFydCh0aHJlYWQtPm1nLT5tYWNoaW5lKTsKKwllbHNlCisJCXRzLT5rZXJuZWxfc3RhcnQgPSAxVUxMIDw8IDYzOworCXRzLT5jcnAgPSBjcnA7CisKKwlyZXR1cm4gdHM7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkX3N0YWNrX19wdXNoKHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzLCB1NjQgcmV0X2FkZHIpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAodHMtPmNudCA9PSB0cy0+c3opIHsKKwkJZXJyID0gdGhyZWFkX3N0YWNrX19ncm93KHRzKTsKKwkJaWYgKGVycikgeworCQkJcHJfd2FybmluZygiT3V0IG9mIG1lbW9yeTogZGlzY2FyZGluZyB0aHJlYWQgc3RhY2tcbiIpOworCQkJdHMtPmNudCA9IDA7CisJCX0KKwl9CisKKwl0cy0+c3RhY2tbdHMtPmNudCsrXS5yZXRfYWRkciA9IHJldF9hZGRyOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX19wb3Aoc3RydWN0IHRocmVhZF9zdGFjayAqdHMsIHU2NCByZXRfYWRkcikKK3sKKwlzaXplX3QgaTsKKworCS8qCisJICogSW4gc29tZSBjYXNlcyB0aGVyZSBtYXkgYmUgZnVuY3Rpb25zIHdoaWNoIGFyZSBub3Qgc2VlbiB0byByZXR1cm4uCisJICogRm9yIGV4YW1wbGUgd2hlbiBzZXRqbXAgLyBsb25nam1wIGhhcyBiZWVuIHVzZWQuICBPciB0aGUgcGVyZiBjb250ZXh0CisJICogc3dpdGNoIGluIHRoZSBrZXJuZWwgd2hpY2ggZG9lc24ndCBzdG9wIGFuZCBzdGFydCB0cmFjaW5nIGluIGV4YWN0bHkKKwkgKiB0aGUgc2FtZSBjb2RlIHBhdGguICBXaGVuIHRoYXQgaGFwcGVucyB0aGUgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZQorCSAqIGZ1cnRoZXIgZG93biB0aGUgc3RhY2suICBJZiB0aGUgcmV0dXJuIGFkZHJlc3MgaXMgbm90IGZvdW5kIGF0IGFsbCwKKwkgKiB3ZSBhc3N1bWUgdGhlIG9wcG9zaXRlIChpLmUuIHRoaXMgaXMgYSByZXR1cm4gZm9yIGEgY2FsbCB0aGF0IHdhc24ndAorCSAqIHNlZW4gZm9yIHNvbWUgcmVhc29uKSBhbmQgbGVhdmUgdGhlIHN0YWNrIGFsb25lLgorCSAqLworCWZvciAoaSA9IHRzLT5jbnQ7IGk7ICkgeworCQlpZiAodHMtPnN0YWNrWy0taV0ucmV0X2FkZHIgPT0gcmV0X2FkZHIpIHsKKwkJCXRzLT5jbnQgPSBpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgYm9vbCB0aHJlYWRfc3RhY2tfX2luX2tlcm5lbChzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cykKK3sKKwlpZiAoIXRzLT5jbnQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cy0+c3RhY2tbdHMtPmNudCAtIDFdLmNwLT5pbl9rZXJuZWw7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkX3N0YWNrX19jYWxsX3JldHVybihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCQkJICAgICBzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywgc2l6ZV90IGlkeCwKKwkJCQkgICAgIHU2NCB0aW1lc3RhbXAsIHU2NCByZWYsIGJvb2wgbm9fcmV0dXJuKQoreworCXN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgKmNycCA9IHRzLT5jcnA7CisJc3RydWN0IHRocmVhZF9zdGFja19lbnRyeSAqdHNlOworCXN0cnVjdCBjYWxsX3JldHVybiBjciA9IHsKKwkJLnRocmVhZCA9IHRocmVhZCwKKwkJLmNvbW0gPSB0cy0+Y29tbSwKKwkJLmRiX2lkID0gMCwKKwl9OworCisJdHNlID0gJnRzLT5zdGFja1tpZHhdOworCWNyLmNwID0gdHNlLT5jcDsKKwljci5jYWxsX3RpbWUgPSB0c2UtPnRpbWVzdGFtcDsKKwljci5yZXR1cm5fdGltZSA9IHRpbWVzdGFtcDsKKwljci5icmFuY2hfY291bnQgPSB0cy0+YnJhbmNoX2NvdW50IC0gdHNlLT5icmFuY2hfY291bnQ7CisJY3IuY2FsbF9yZWYgPSB0c2UtPnJlZjsKKwljci5yZXR1cm5fcmVmID0gcmVmOworCWlmICh0c2UtPm5vX2NhbGwpCisJCWNyLmZsYWdzIHw9IENBTExfUkVUVVJOX05PX0NBTEw7CisJaWYgKG5vX3JldHVybikKKwkJY3IuZmxhZ3MgfD0gQ0FMTF9SRVRVUk5fTk9fUkVUVVJOOworCisJcmV0dXJuIGNycC0+cHJvY2VzcygmY3IsIGNycC0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkX3N0YWNrX19mbHVzaChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzKQoreworCXN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgKmNycCA9IHRzLT5jcnA7CisJaW50IGVycjsKKworCWlmICghY3JwKSB7CisJCXRzLT5jbnQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAodHMtPmNudCkgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIC0tdHMtPmNudCwKKwkJCQkJCXRzLT5sYXN0X3RpbWUsIDAsIHRydWUpOworCQlpZiAoZXJyKSB7CisJCQlwcl9lcnIoIkVycm9yIGZsdXNoaW5nIHRocmVhZCBzdGFjayFcbiIpOworCQkJdHMtPmNudCA9IDA7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCB0aHJlYWRfc3RhY2tfX2V2ZW50KHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgdTMyIGZsYWdzLCB1NjQgZnJvbV9pcCwKKwkJCXU2NCB0b19pcCwgdTE2IGluc25fbGVuLCB1NjQgdHJhY2VfbnIpCit7CisJaWYgKCF0aHJlYWQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCF0aHJlYWQtPnRzKSB7CisJCXRocmVhZC0+dHMgPSB0aHJlYWRfc3RhY2tfX25ldyh0aHJlYWQsIE5VTEwpOworCQlpZiAoIXRocmVhZC0+dHMpIHsKKwkJCXByX3dhcm5pbmcoIk91dCBvZiBtZW1vcnk6IG5vIHRocmVhZCBzdGFja1xuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl0aHJlYWQtPnRzLT50cmFjZV9uciA9IHRyYWNlX25yOworCX0KKworCS8qCisJICogV2hlbiB0aGUgdHJhY2UgaXMgZGlzY29udGludW91cywgdGhlIHRyYWNlX25yIGNoYW5nZXMuICBJbiB0aGF0IGNhc2UKKwkgKiB0aGUgc3RhY2sgbWlnaHQgYmUgY29tcGxldGVseSBpbnZhbGlkLiAgQmV0dGVyIHRvIHJlcG9ydCBub3RoaW5nIHRoYW4KKwkgKiB0byByZXBvcnQgc29tZXRoaW5nIG1pc2xlYWRpbmcsIHNvIGZsdXNoIHRoZSBzdGFjay4KKwkgKi8KKwlpZiAodHJhY2VfbnIgIT0gdGhyZWFkLT50cy0+dHJhY2VfbnIpIHsKKwkJaWYgKHRocmVhZC0+dHMtPnRyYWNlX25yKQorCQkJdGhyZWFkX3N0YWNrX19mbHVzaCh0aHJlYWQsIHRocmVhZC0+dHMpOworCQl0aHJlYWQtPnRzLT50cmFjZV9uciA9IHRyYWNlX25yOworCX0KKworCS8qIFN0b3AgaGVyZSBpZiB0aHJlYWRfc3RhY2tfX3Byb2Nlc3MoKSBpcyBpbiB1c2UgKi8KKwlpZiAodGhyZWFkLT50cy0+Y3JwKQorCQlyZXR1cm4gMDsKKworCWlmIChmbGFncyAmIFBFUkZfSVBfRkxBR19DQUxMKSB7CisJCXU2NCByZXRfYWRkcjsKKworCQlpZiAoIXRvX2lwKQorCQkJcmV0dXJuIDA7CisJCXJldF9hZGRyID0gZnJvbV9pcCArIGluc25fbGVuOworCQlpZiAocmV0X2FkZHIgPT0gdG9faXApCisJCQlyZXR1cm4gMDsgLyogWmVyby1sZW5ndGggY2FsbHMgYXJlIGV4Y2x1ZGVkICovCisJCXJldHVybiB0aHJlYWRfc3RhY2tfX3B1c2godGhyZWFkLT50cywgcmV0X2FkZHIpOworCX0gZWxzZSBpZiAoZmxhZ3MgJiBQRVJGX0lQX0ZMQUdfUkVUVVJOKSB7CisJCWlmICghZnJvbV9pcCkKKwkJCXJldHVybiAwOworCQl0aHJlYWRfc3RhY2tfX3BvcCh0aHJlYWQtPnRzLCB0b19pcCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdGhyZWFkX3N0YWNrX19zZXRfdHJhY2VfbnIoc3RydWN0IHRocmVhZCAqdGhyZWFkLCB1NjQgdHJhY2VfbnIpCit7CisJaWYgKCF0aHJlYWQgfHwgIXRocmVhZC0+dHMpCisJCXJldHVybjsKKworCWlmICh0cmFjZV9uciAhPSB0aHJlYWQtPnRzLT50cmFjZV9ucikgeworCQlpZiAodGhyZWFkLT50cy0+dHJhY2VfbnIpCisJCQl0aHJlYWRfc3RhY2tfX2ZsdXNoKHRocmVhZCwgdGhyZWFkLT50cyk7CisJCXRocmVhZC0+dHMtPnRyYWNlX25yID0gdHJhY2VfbnI7CisJfQorfQorCit2b2lkIHRocmVhZF9zdGFja19fZnJlZShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJaWYgKHRocmVhZC0+dHMpIHsKKwkJdGhyZWFkX3N0YWNrX19mbHVzaCh0aHJlYWQsIHRocmVhZC0+dHMpOworCQl6ZnJlZSgmdGhyZWFkLT50cy0+c3RhY2spOworCQl6ZnJlZSgmdGhyZWFkLT50cyk7CisJfQorfQorCit2b2lkIHRocmVhZF9zdGFja19fc2FtcGxlKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sCisJCQkgIHNpemVfdCBzeiwgdTY0IGlwKQoreworCXNpemVfdCBpOworCisJaWYgKCF0aHJlYWQgfHwgIXRocmVhZC0+dHMpCisJCWNoYWluLT5uciA9IDE7CisJZWxzZQorCQljaGFpbi0+bnIgPSBtaW4oc3osIHRocmVhZC0+dHMtPmNudCArIDEpOworCisJY2hhaW4tPmlwc1swXSA9IGlwOworCisJZm9yIChpID0gMTsgaSA8IGNoYWluLT5ucjsgaSsrKQorCQljaGFpbi0+aXBzW2ldID0gdGhyZWFkLT50cy0+c3RhY2tbdGhyZWFkLT50cy0+Y250IC0gaV0ucmV0X2FkZHI7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxfcGF0aF9faW5pdChzdHJ1Y3QgY2FsbF9wYXRoICpjcCwgc3RydWN0IGNhbGxfcGF0aCAqcGFyZW50LAorCQkJICAgIHN0cnVjdCBzeW1ib2wgKnN5bSwgdTY0IGlwLCBib29sIGluX2tlcm5lbCkKK3sKKwljcC0+cGFyZW50ID0gcGFyZW50OworCWNwLT5zeW0gPSBzeW07CisJY3AtPmlwID0gc3ltID8gMCA6IGlwOworCWNwLT5kYl9pZCA9IDA7CisJY3AtPmluX2tlcm5lbCA9IGluX2tlcm5lbDsKKwlSQl9DTEVBUl9OT0RFKCZjcC0+cmJfbm9kZSk7CisJY3AtPmNoaWxkcmVuID0gUkJfUk9PVDsKK30KKworc3RhdGljIHN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY2FsbF9wYXRoX3Jvb3RfX25ldyh2b2lkKQoreworCXN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByOworCisJY3ByID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgY2FsbF9wYXRoX3Jvb3QpKTsKKwlpZiAoIWNwcikKKwkJcmV0dXJuIE5VTEw7CisJY2FsbF9wYXRoX19pbml0KCZjcHItPmNhbGxfcGF0aCwgTlVMTCwgTlVMTCwgMCwgZmFsc2UpOworCUlOSVRfTElTVF9IRUFEKCZjcHItPmJsb2Nrcyk7CisJcmV0dXJuIGNwcjsKK30KKworc3RhdGljIHZvaWQgY2FsbF9wYXRoX3Jvb3RfX2ZyZWUoc3RydWN0IGNhbGxfcGF0aF9yb290ICpjcHIpCit7CisJc3RydWN0IGNhbGxfcGF0aF9ibG9jayAqcG9zLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZjcHItPmJsb2Nrcywgbm9kZSkgeworCQlsaXN0X2RlbCgmcG9zLT5ub2RlKTsKKwkJZnJlZShwb3MpOworCX0KKwlmcmVlKGNwcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FsbF9wYXRoICpjYWxsX3BhdGhfX25ldyhzdHJ1Y3QgY2FsbF9wYXRoX3Jvb3QgKmNwciwKKwkJCQkJc3RydWN0IGNhbGxfcGF0aCAqcGFyZW50LAorCQkJCQlzdHJ1Y3Qgc3ltYm9sICpzeW0sIHU2NCBpcCwKKwkJCQkJYm9vbCBpbl9rZXJuZWwpCit7CisJc3RydWN0IGNhbGxfcGF0aF9ibG9jayAqY3BiOworCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCXNpemVfdCBuOworCisJaWYgKGNwci0+bmV4dCA8IGNwci0+c3opIHsKKwkJY3BiID0gbGlzdF9sYXN0X2VudHJ5KCZjcHItPmJsb2Nrcywgc3RydWN0IGNhbGxfcGF0aF9ibG9jaywKKwkJCQkgICAgICBub2RlKTsKKwl9IGVsc2UgeworCQljcGIgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjYWxsX3BhdGhfYmxvY2spKTsKKwkJaWYgKCFjcGIpCisJCQlyZXR1cm4gTlVMTDsKKwkJbGlzdF9hZGRfdGFpbCgmY3BiLT5ub2RlLCAmY3ByLT5ibG9ja3MpOworCQljcHItPnN6ICs9IENBTExfUEFUSF9CTE9DS19TSVpFOworCX0KKworCW4gPSBjcHItPm5leHQrKyAmIENBTExfUEFUSF9CTE9DS19NQVNLOworCWNwID0gJmNwYi0+Y3Bbbl07CisKKwljYWxsX3BhdGhfX2luaXQoY3AsIHBhcmVudCwgc3ltLCBpcCwgaW5fa2VybmVsKTsKKworCXJldHVybiBjcDsKK30KKworc3RhdGljIHN0cnVjdCBjYWxsX3BhdGggKmNhbGxfcGF0aF9fZmluZG5ldyhzdHJ1Y3QgY2FsbF9wYXRoX3Jvb3QgKmNwciwKKwkJCQkJICAgIHN0cnVjdCBjYWxsX3BhdGggKnBhcmVudCwKKwkJCQkJICAgIHN0cnVjdCBzeW1ib2wgKnN5bSwgdTY0IGlwLCB1NjQga3MpCit7CisJc3RydWN0IHJiX25vZGUgKipwOworCXN0cnVjdCByYl9ub2RlICpub2RlX3BhcmVudCA9IE5VTEw7CisJc3RydWN0IGNhbGxfcGF0aCAqY3A7CisJYm9vbCBpbl9rZXJuZWwgPSBpcCA+PSBrczsKKworCWlmIChzeW0pCisJCWlwID0gMDsKKworCWlmICghcGFyZW50KQorCQlyZXR1cm4gY2FsbF9wYXRoX19uZXcoY3ByLCBwYXJlbnQsIHN5bSwgaXAsIGluX2tlcm5lbCk7CisKKwlwID0gJnBhcmVudC0+Y2hpbGRyZW4ucmJfbm9kZTsKKwl3aGlsZSAoKnAgIT0gTlVMTCkgeworCQlub2RlX3BhcmVudCA9ICpwOworCQljcCA9IHJiX2VudHJ5KG5vZGVfcGFyZW50LCBzdHJ1Y3QgY2FsbF9wYXRoLCByYl9ub2RlKTsKKworCQlpZiAoY3AtPnN5bSA9PSBzeW0gJiYgY3AtPmlwID09IGlwKQorCQkJcmV0dXJuIGNwOworCisJCWlmIChzeW0gPCBjcC0+c3ltIHx8IChzeW0gPT0gY3AtPnN5bSAmJiBpcCA8IGNwLT5pcCkpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJfQorCisJY3AgPSBjYWxsX3BhdGhfX25ldyhjcHIsIHBhcmVudCwgc3ltLCBpcCwgaW5fa2VybmVsKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gTlVMTDsKKworCXJiX2xpbmtfbm9kZSgmY3AtPnJiX25vZGUsIG5vZGVfcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJmNwLT5yYl9ub2RlLCAmcGFyZW50LT5jaGlsZHJlbik7CisKKwlyZXR1cm4gY3A7Cit9CisKK3N0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgKgorY2FsbF9yZXR1cm5fcHJvY2Vzc29yX19uZXcoaW50ICgqcHJvY2Vzcykoc3RydWN0IGNhbGxfcmV0dXJuICpjciwgdm9pZCAqZGF0YSksCisJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgKmNycDsKKworCWNycCA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvcikpOworCWlmICghY3JwKQorCQlyZXR1cm4gTlVMTDsKKwljcnAtPmNwciA9IGNhbGxfcGF0aF9yb290X19uZXcoKTsKKwlpZiAoIWNycC0+Y3ByKQorCQlnb3RvIG91dF9mcmVlOworCWNycC0+cHJvY2VzcyA9IHByb2Nlc3M7CisJY3JwLT5kYXRhID0gZGF0YTsKKwlyZXR1cm4gY3JwOworCitvdXRfZnJlZToKKwlmcmVlKGNycCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgY2FsbF9yZXR1cm5fcHJvY2Vzc29yX19mcmVlKHN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgKmNycCkKK3sKKwlpZiAoY3JwKSB7CisJCWNhbGxfcGF0aF9yb290X19mcmVlKGNycC0+Y3ByKTsKKwkJZnJlZShjcnApOworCX0KK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX3B1c2hfY3Aoc3RydWN0IHRocmVhZF9zdGFjayAqdHMsIHU2NCByZXRfYWRkciwKKwkJCQkgdTY0IHRpbWVzdGFtcCwgdTY0IHJlZiwgc3RydWN0IGNhbGxfcGF0aCAqY3AsCisJCQkJIGJvb2wgbm9fY2FsbCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0YWNrX2VudHJ5ICp0c2U7CisJaW50IGVycjsKKworCWlmICh0cy0+Y250ID09IHRzLT5zeikgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX2dyb3codHMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwl0c2UgPSAmdHMtPnN0YWNrW3RzLT5jbnQrK107CisJdHNlLT5yZXRfYWRkciA9IHJldF9hZGRyOworCXRzZS0+dGltZXN0YW1wID0gdGltZXN0YW1wOworCXRzZS0+cmVmID0gcmVmOworCXRzZS0+YnJhbmNoX2NvdW50ID0gdHMtPmJyYW5jaF9jb3VudDsKKwl0c2UtPmNwID0gY3A7CisJdHNlLT5ub19jYWxsID0gbm9fY2FsbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fcG9wX2NwKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IHRocmVhZF9zdGFjayAqdHMsCisJCQkJdTY0IHJldF9hZGRyLCB1NjQgdGltZXN0YW1wLCB1NjQgcmVmLAorCQkJCXN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlpbnQgZXJyOworCisJaWYgKCF0cy0+Y250KQorCQlyZXR1cm4gMTsKKworCWlmICh0cy0+Y250ID09IDEpIHsKKwkJc3RydWN0IHRocmVhZF9zdGFja19lbnRyeSAqdHNlID0gJnRzLT5zdGFja1swXTsKKworCQlpZiAodHNlLT5jcC0+c3ltID09IHN5bSkKKwkJCXJldHVybiB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIC0tdHMtPmNudCwKKwkJCQkJCQkgdGltZXN0YW1wLCByZWYsIGZhbHNlKTsKKwl9CisKKwlpZiAodHMtPnN0YWNrW3RzLT5jbnQgLSAxXS5yZXRfYWRkciA9PSByZXRfYWRkcikgeworCQlyZXR1cm4gdGhyZWFkX3N0YWNrX19jYWxsX3JldHVybih0aHJlYWQsIHRzLCAtLXRzLT5jbnQsCisJCQkJCQkgdGltZXN0YW1wLCByZWYsIGZhbHNlKTsKKwl9IGVsc2UgeworCQlzaXplX3QgaSA9IHRzLT5jbnQgLSAxOworCisJCXdoaWxlIChpLS0pIHsKKwkJCWlmICh0cy0+c3RhY2tbaV0ucmV0X2FkZHIgIT0gcmV0X2FkZHIpCisJCQkJY29udGludWU7CisJCQlpICs9IDE7CisJCQl3aGlsZSAodHMtPmNudCA+IGkpIHsKKwkJCQllcnIgPSB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsCisJCQkJCQkJCS0tdHMtPmNudCwKKwkJCQkJCQkJdGltZXN0YW1wLCByZWYsCisJCQkJCQkJCXRydWUpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQlyZXR1cm4gdGhyZWFkX3N0YWNrX19jYWxsX3JldHVybih0aHJlYWQsIHRzLCAtLXRzLT5jbnQsCisJCQkJCQkJIHRpbWVzdGFtcCwgcmVmLCBmYWxzZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX2JvdHRvbShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzLAorCQkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAorCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICpmcm9tX2FsLAorCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICp0b19hbCwgdTY0IHJlZikKK3sKKwlzdHJ1Y3QgY2FsbF9wYXRoX3Jvb3QgKmNwciA9IHRzLT5jcnAtPmNwcjsKKwlzdHJ1Y3QgY2FsbF9wYXRoICpjcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJdTY0IGlwOworCisJaWYgKHNhbXBsZS0+aXApIHsKKwkJaXAgPSBzYW1wbGUtPmlwOworCQlzeW0gPSBmcm9tX2FsLT5zeW07CisJfSBlbHNlIGlmIChzYW1wbGUtPmFkZHIpIHsKKwkJaXAgPSBzYW1wbGUtPmFkZHI7CisJCXN5bSA9IHRvX2FsLT5zeW07CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorCisJY3AgPSBjYWxsX3BhdGhfX2ZpbmRuZXcoY3ByLCAmY3ByLT5jYWxsX3BhdGgsIHN5bSwgaXAsCisJCQkJdHMtPmtlcm5lbF9zdGFydCk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gdGhyZWFkX3N0YWNrX19wdXNoX2NwKHRocmVhZC0+dHMsIGlwLCBzYW1wbGUtPnRpbWUsIHJlZiwgY3AsCisJCQkJICAgICB0cnVlKTsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX25vX2NhbGxfcmV0dXJuKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQkJc3RydWN0IHRocmVhZF9zdGFjayAqdHMsCisJCQkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAorCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqZnJvbV9hbCwKKwkJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKnRvX2FsLCB1NjQgcmVmKQoreworCXN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByID0gdHMtPmNycC0+Y3ByOworCXN0cnVjdCBjYWxsX3BhdGggKmNwLCAqcGFyZW50OworCXU2NCBrcyA9IHRzLT5rZXJuZWxfc3RhcnQ7CisJaW50IGVycjsKKworCWlmIChzYW1wbGUtPmlwID49IGtzICYmIHNhbXBsZS0+YWRkciA8IGtzKSB7CisJCS8qIFJldHVybiB0byB1c2Vyc3BhY2UsIHNvIHBvcCBhbGwga2VybmVsIGFkZHJlc3NlcyAqLworCQl3aGlsZSAodGhyZWFkX3N0YWNrX19pbl9rZXJuZWwodHMpKSB7CisJCQllcnIgPSB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIC0tdHMtPmNudCwKKwkJCQkJCQlzYW1wbGUtPnRpbWUsIHJlZiwKKwkJCQkJCQl0cnVlKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCS8qIElmIHRoZSBzdGFjayBpcyBlbXB0eSwgcHVzaCB0aGUgdXNlcnNwYWNlIGFkZHJlc3MgKi8KKwkJaWYgKCF0cy0+Y250KSB7CisJCQljcCA9IGNhbGxfcGF0aF9fZmluZG5ldyhjcHIsICZjcHItPmNhbGxfcGF0aCwKKwkJCQkJCXRvX2FsLT5zeW0sIHNhbXBsZS0+YWRkciwKKwkJCQkJCXRzLT5rZXJuZWxfc3RhcnQpOworCQkJaWYgKCFjcCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldHVybiB0aHJlYWRfc3RhY2tfX3B1c2hfY3AodHMsIDAsIHNhbXBsZS0+dGltZSwgcmVmLAorCQkJCQkJICAgICBjcCwgdHJ1ZSk7CisJCX0KKwl9IGVsc2UgaWYgKHRocmVhZF9zdGFja19faW5fa2VybmVsKHRzKSAmJiBzYW1wbGUtPmlwIDwga3MpIHsKKwkJLyogUmV0dXJuIHRvIHVzZXJzcGFjZSwgc28gcG9wIGFsbCBrZXJuZWwgYWRkcmVzc2VzICovCisJCXdoaWxlICh0aHJlYWRfc3RhY2tfX2luX2tlcm5lbCh0cykpIHsKKwkJCWVyciA9IHRocmVhZF9zdGFja19fY2FsbF9yZXR1cm4odGhyZWFkLCB0cywgLS10cy0+Y250LAorCQkJCQkJCXNhbXBsZS0+dGltZSwgcmVmLAorCQkJCQkJCXRydWUpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKHRzLT5jbnQpCisJCXBhcmVudCA9IHRzLT5zdGFja1t0cy0+Y250IC0gMV0uY3A7CisJZWxzZQorCQlwYXJlbnQgPSAmY3ByLT5jYWxsX3BhdGg7CisKKwkvKiBUaGlzICdyZXR1cm4nIGhhZCBubyAnY2FsbCcsIHNvIHB1c2ggYW5kIHBvcCB0b3Agb2Ygc3RhY2sgKi8KKwljcCA9IGNhbGxfcGF0aF9fZmluZG5ldyhjcHIsIHBhcmVudCwgZnJvbV9hbC0+c3ltLCBzYW1wbGUtPmlwLAorCQkJCXRzLT5rZXJuZWxfc3RhcnQpOworCWlmICghY3ApCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gdGhyZWFkX3N0YWNrX19wdXNoX2NwKHRzLCBzYW1wbGUtPmFkZHIsIHNhbXBsZS0+dGltZSwgcmVmLCBjcCwKKwkJCQkgICAgdHJ1ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiB0aHJlYWRfc3RhY2tfX3BvcF9jcCh0aHJlYWQsIHRzLCBzYW1wbGUtPmFkZHIsIHNhbXBsZS0+dGltZSwgcmVmLAorCQkJCSAgICB0b19hbC0+c3ltKTsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX3RyYWNlX2JlZ2luKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQkgICAgIHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzLCB1NjQgdGltZXN0YW1wLAorCQkJCSAgICAgdTY0IHJlZikKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0YWNrX2VudHJ5ICp0c2U7CisJaW50IGVycjsKKworCWlmICghdHMtPmNudCkKKwkJcmV0dXJuIDA7CisKKwkvKiBQb3AgdHJhY2UgZW5kICovCisJdHNlID0gJnRzLT5zdGFja1t0cy0+Y250IC0gMV07CisJaWYgKHRzZS0+Y3AtPnN5bSA9PSBOVUxMICYmIHRzZS0+Y3AtPmlwID09IDApIHsKKwkJZXJyID0gdGhyZWFkX3N0YWNrX19jYWxsX3JldHVybih0aHJlYWQsIHRzLCAtLXRzLT5jbnQsCisJCQkJCQl0aW1lc3RhbXAsIHJlZiwgZmFsc2UpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX3RyYWNlX2VuZChzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywKKwkJCQkgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwgdTY0IHJlZikKK3sKKwlzdHJ1Y3QgY2FsbF9wYXRoX3Jvb3QgKmNwciA9IHRzLT5jcnAtPmNwcjsKKwlzdHJ1Y3QgY2FsbF9wYXRoICpjcDsKKwl1NjQgcmV0X2FkZHI7CisKKwkvKiBObyBwb2ludCBoYXZpbmcgJ3RyYWNlIGVuZCcgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgKi8KKwlpZiAoIXRzLT5jbnQgfHwgKHRzLT5jbnQgPT0gMSAmJiB0cy0+c3RhY2tbMF0ucmVmID09IHJlZikpCisJCXJldHVybiAwOworCisJY3AgPSBjYWxsX3BhdGhfX2ZpbmRuZXcoY3ByLCB0cy0+c3RhY2tbdHMtPmNudCAtIDFdLmNwLCBOVUxMLCAwLAorCQkJCXRzLT5rZXJuZWxfc3RhcnQpOworCWlmICghY3ApCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0X2FkZHIgPSBzYW1wbGUtPmlwICsgc2FtcGxlLT5pbnNuX2xlbjsKKworCXJldHVybiB0aHJlYWRfc3RhY2tfX3B1c2hfY3AodHMsIHJldF9hZGRyLCBzYW1wbGUtPnRpbWUsIHJlZiwgY3AsCisJCQkJICAgICBmYWxzZSk7Cit9CisKK2ludCB0aHJlYWRfc3RhY2tfX3Byb2Nlc3Moc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgY29tbSAqY29tbSwKKwkJCSAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICpmcm9tX2FsLAorCQkJICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqdG9fYWwsIHU2NCByZWYsCisJCQkgIHN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgKmNycCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cyA9IHRocmVhZC0+dHM7CisJaW50IGVyciA9IDA7CisKKwlpZiAodHMpIHsKKwkJaWYgKCF0cy0+Y3JwKSB7CisJCQkvKiBTdXBlcnNlZGUgdGhyZWFkX3N0YWNrX19ldmVudCgpICovCisJCQl0aHJlYWRfc3RhY2tfX2ZyZWUodGhyZWFkKTsKKwkJCXRocmVhZC0+dHMgPSB0aHJlYWRfc3RhY2tfX25ldyh0aHJlYWQsIGNycCk7CisJCQlpZiAoIXRocmVhZC0+dHMpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl0cyA9IHRocmVhZC0+dHM7CisJCQl0cy0+Y29tbSA9IGNvbW07CisJCX0KKwl9IGVsc2UgeworCQl0aHJlYWQtPnRzID0gdGhyZWFkX3N0YWNrX19uZXcodGhyZWFkLCBjcnApOworCQlpZiAoIXRocmVhZC0+dHMpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJdHMgPSB0aHJlYWQtPnRzOworCQl0cy0+Y29tbSA9IGNvbW07CisJfQorCisJLyogRmx1c2ggc3RhY2sgb24gZXhlYyAqLworCWlmICh0cy0+Y29tbSAhPSBjb21tICYmIHRocmVhZC0+cGlkXyA9PSB0aHJlYWQtPnRpZCkgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX2ZsdXNoKHRocmVhZCwgdHMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJdHMtPmNvbW0gPSBjb21tOworCX0KKworCS8qIElmIHRoZSBzdGFjayBpcyBlbXB0eSwgcHV0IHRoZSBjdXJyZW50IHN5bWJvbCBvbiB0aGUgc3RhY2sgKi8KKwlpZiAoIXRzLT5jbnQpIHsKKwkJZXJyID0gdGhyZWFkX3N0YWNrX19ib3R0b20odGhyZWFkLCB0cywgc2FtcGxlLCBmcm9tX2FsLCB0b19hbCwKKwkJCQkJICAgcmVmKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJdHMtPmJyYW5jaF9jb3VudCArPSAxOworCXRzLT5sYXN0X3RpbWUgPSBzYW1wbGUtPnRpbWU7CisKKwlpZiAoc2FtcGxlLT5mbGFncyAmIFBFUkZfSVBfRkxBR19DQUxMKSB7CisJCXN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByID0gdHMtPmNycC0+Y3ByOworCQlzdHJ1Y3QgY2FsbF9wYXRoICpjcDsKKwkJdTY0IHJldF9hZGRyOworCisJCWlmICghc2FtcGxlLT5pcCB8fCAhc2FtcGxlLT5hZGRyKQorCQkJcmV0dXJuIDA7CisKKwkJcmV0X2FkZHIgPSBzYW1wbGUtPmlwICsgc2FtcGxlLT5pbnNuX2xlbjsKKwkJaWYgKHJldF9hZGRyID09IHNhbXBsZS0+YWRkcikKKwkJCXJldHVybiAwOyAvKiBaZXJvLWxlbmd0aCBjYWxscyBhcmUgZXhjbHVkZWQgKi8KKworCQljcCA9IGNhbGxfcGF0aF9fZmluZG5ldyhjcHIsIHRzLT5zdGFja1t0cy0+Y250IC0gMV0uY3AsCisJCQkJCXRvX2FsLT5zeW0sIHNhbXBsZS0+YWRkciwKKwkJCQkJdHMtPmtlcm5lbF9zdGFydCk7CisJCWlmICghY3ApCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gdGhyZWFkX3N0YWNrX19wdXNoX2NwKHRzLCByZXRfYWRkciwgc2FtcGxlLT50aW1lLCByZWYsCisJCQkJCSAgICBjcCwgZmFsc2UpOworCX0gZWxzZSBpZiAoc2FtcGxlLT5mbGFncyAmIFBFUkZfSVBfRkxBR19SRVRVUk4pIHsKKwkJaWYgKCFzYW1wbGUtPmlwIHx8ICFzYW1wbGUtPmFkZHIpCisJCQlyZXR1cm4gMDsKKworCQllcnIgPSB0aHJlYWRfc3RhY2tfX3BvcF9jcCh0aHJlYWQsIHRzLCBzYW1wbGUtPmFkZHIsCisJCQkJCSAgIHNhbXBsZS0+dGltZSwgcmVmLCBmcm9tX2FsLT5zeW0pOworCQlpZiAoZXJyKSB7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJZXJyID0gdGhyZWFkX3N0YWNrX19ub19jYWxsX3JldHVybih0aHJlYWQsIHRzLCBzYW1wbGUsCisJCQkJCQkJICAgZnJvbV9hbCwgdG9fYWwsIHJlZik7CisJCX0KKwl9IGVsc2UgaWYgKHNhbXBsZS0+ZmxhZ3MgJiBQRVJGX0lQX0ZMQUdfVFJBQ0VfQkVHSU4pIHsKKwkJZXJyID0gdGhyZWFkX3N0YWNrX190cmFjZV9iZWdpbih0aHJlYWQsIHRzLCBzYW1wbGUtPnRpbWUsIHJlZik7CisJfSBlbHNlIGlmIChzYW1wbGUtPmZsYWdzICYgUEVSRl9JUF9GTEFHX1RSQUNFX0VORCkgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX3RyYWNlX2VuZCh0cywgc2FtcGxlLCByZWYpOworCX0KKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLXN0YWNrLmggYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLXN0YWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0M2JiZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQtc3RhY2suaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIHRocmVhZC1zdGFjay5oOiBTeW50aGVzaXplIGEgdGhyZWFkJ3Mgc3RhY2sgdXNpbmcgY2FsbCAvIHJldHVybiBldmVudHMKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fUEVSRl9USFJFQURfU1RBQ0tfSAorI2RlZmluZSBfX1BFUkZfVEhSRUFEX1NUQUNLX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKworc3RydWN0IHRocmVhZDsKK3N0cnVjdCBjb21tOworc3RydWN0IGlwX2NhbGxjaGFpbjsKK3N0cnVjdCBzeW1ib2w7CitzdHJ1Y3QgZHNvOworc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvcjsKK3N0cnVjdCBjb21tOworc3RydWN0IHBlcmZfc2FtcGxlOworc3RydWN0IGFkZHJfbG9jYXRpb247CisKKy8qCisgKiBDYWxsL1JldHVybiBmbGFncy4KKyAqCisgKiBDQUxMX1JFVFVSTl9OT19DQUxMOiAncmV0dXJuJyBidXQgbm8gbWF0Y2hpbmcgJ2NhbGwnCisgKiBDQUxMX1JFVFVSTl9OT19SRVRVUk46ICdjYWxsJyBidXQgbm8gbWF0Y2hpbmcgJ3JldHVybicKKyAqLworZW51bSB7CisJQ0FMTF9SRVRVUk5fTk9fQ0FMTAk9IDEgPDwgMCwKKwlDQUxMX1JFVFVSTl9OT19SRVRVUk4JPSAxIDw8IDEsCit9OworCisvKioKKyAqIHN0cnVjdCBjYWxsX3JldHVybiAtIHBhaXJlZCBjYWxsL3JldHVybiBpbmZvcm1hdGlvbi4KKyAqIEB0aHJlYWQ6IHRocmVhZCBpbiB3aGljaCBjYWxsL3JldHVybiBvY2N1cnJlZAorICogQGNvbW06IGNvbW0gaW4gd2hpY2ggY2FsbC9yZXR1cm4gb2NjdXJyZWQKKyAqIEBjcDogY2FsbCBwYXRoCisgKiBAY2FsbF90aW1lOiB0aW1lc3RhbXAgb2YgY2FsbCAoaWYga25vd24pCisgKiBAcmV0dXJuX3RpbWU6IHRpbWVzdGFtcCBvZiByZXR1cm4gKGlmIGtub3duKQorICogQGJyYW5jaF9jb3VudDogbnVtYmVyIG9mIGJyYW5jaGVzIHNlZW4gYmV0d2VlbiBjYWxsIGFuZCByZXR1cm4KKyAqIEBjYWxsX3JlZjogZXh0ZXJuYWwgcmVmZXJlbmNlIHRvICdjYWxsJyBzYW1wbGUgKGUuZy4gZGJfaWQpCisgKiBAcmV0dXJuX3JlZjogIGV4dGVybmFsIHJlZmVyZW5jZSB0byAncmV0dXJuJyBzYW1wbGUgKGUuZy4gZGJfaWQpCisgKiBAZGJfaWQ6IGlkIHVzZWQgZm9yIGRiLWV4cG9ydAorICogQGZsYWdzOiBDYWxsL1JldHVybiBmbGFncworICovCitzdHJ1Y3QgY2FsbF9yZXR1cm4geworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKwlzdHJ1Y3QgY29tbSAqY29tbTsKKwlzdHJ1Y3QgY2FsbF9wYXRoICpjcDsKKwl1NjQgY2FsbF90aW1lOworCXU2NCByZXR1cm5fdGltZTsKKwl1NjQgYnJhbmNoX2NvdW50OworCXU2NCBjYWxsX3JlZjsKKwl1NjQgcmV0dXJuX3JlZjsKKwl1NjQgZGJfaWQ7CisJdTMyIGZsYWdzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2FsbF9wYXRoIC0gbm9kZSBpbiBsaXN0IG9mIGNhbGxzIGxlYWRpbmcgdG8gYSBmdW5jdGlvbiBjYWxsLgorICogQHBhcmVudDogY2FsbCBwYXRoIHRvIHRoZSBwYXJlbnQgZnVuY3Rpb24gY2FsbAorICogQHN5bTogc3ltYm9sIG9mIGZ1bmN0aW9uIGNhbGxlZAorICogQGlwOiBvbmx5IGlmIHN5bSBpcyBudWxsLCB0aGUgaXAgb2YgdGhlIGZ1bmN0aW9uCisgKiBAZGJfaWQ6IGlkIHVzZWQgZm9yIGRiLWV4cG9ydAorICogQGluX2tlcm5lbDogd2hldGhlciBmdW5jdGlvbiBpcyBhIGluIHRoZSBrZXJuZWwKKyAqIEByYl9ub2RlOiBub2RlIGluIHBhcmVudCdzIHRyZWUgb2YgY2FsbGVkIGZ1bmN0aW9ucworICogQGNoaWxkcmVuOiB0cmVlIG9mIGNhbGwgcGF0aHMgb2YgZnVuY3Rpb25zIGNhbGxlZAorICoKKyAqIEluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNhbGxfcmV0dXJuIHN0cnVjdHVyZSwgdGhlIGNhbGxfcGF0aCBzdHJ1Y3R1cmUKKyAqIGRlZmluZXMgYSBjb250ZXh0LXNlbnNpdHZlIGNhbGwtZ3JhcGguCisgKi8KK3N0cnVjdCBjYWxsX3BhdGggeworCXN0cnVjdCBjYWxsX3BhdGggKnBhcmVudDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJdTY0IGlwOworCXU2NCBkYl9pZDsKKwlib29sIGluX2tlcm5lbDsKKwlzdHJ1Y3QgcmJfbm9kZSByYl9ub2RlOworCXN0cnVjdCByYl9yb290IGNoaWxkcmVuOworfTsKKworaW50IHRocmVhZF9zdGFja19fZXZlbnQoc3RydWN0IHRocmVhZCAqdGhyZWFkLCB1MzIgZmxhZ3MsIHU2NCBmcm9tX2lwLAorCQkJdTY0IHRvX2lwLCB1MTYgaW5zbl9sZW4sIHU2NCB0cmFjZV9ucik7Cit2b2lkIHRocmVhZF9zdGFja19fc2V0X3RyYWNlX25yKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgdTY0IHRyYWNlX25yKTsKK3ZvaWQgdGhyZWFkX3N0YWNrX19zYW1wbGUoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwKKwkJCSAgc2l6ZV90IHN6LCB1NjQgaXApOwordm9pZCB0aHJlYWRfc3RhY2tfX2ZyZWUoc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqCitjYWxsX3JldHVybl9wcm9jZXNzb3JfX25ldyhpbnQgKCpwcm9jZXNzKShzdHJ1Y3QgY2FsbF9yZXR1cm4gKmNyLCB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmRhdGEpOwordm9pZCBjYWxsX3JldHVybl9wcm9jZXNzb3JfX2ZyZWUoc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwKTsKK2ludCB0aHJlYWRfc3RhY2tfX3Byb2Nlc3Moc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgY29tbSAqY29tbSwKKwkJCSAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICpmcm9tX2FsLAorCQkJICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqdG9fYWwsIHU2NCByZWYsCisJCQkgIHN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgKmNycCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCmluZGV4IGM0MTQxMTcuLjllYmM4YjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAic2Vzc2lvbi5oIgogI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInRocmVhZC1zdGFjay5oIgogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW0uaCIKQEAgLTE1LDcgKzE2LDcgQEAKIAlwaWRfdCBwaWQgPSB0aHJlYWQtPnBpZF87CiAKIAlpZiAocGlkID09IHRocmVhZC0+dGlkIHx8IHBpZCA9PSAtMSkgewotCQl0aHJlYWQtPm1nID0gbWFwX2dyb3Vwc19fbmV3KCk7CisJCXRocmVhZC0+bWcgPSBtYXBfZ3JvdXBzX19uZXcobWFjaGluZSk7CiAJfSBlbHNlIHsKIAkJbGVhZGVyID0gbWFjaGluZV9fZmluZG5ld190aHJlYWQobWFjaGluZSwgcGlkLCBwaWQpOwogCQlpZiAobGVhZGVyKQpAQCAtNjYsNiArNjcsOCBAQAogewogCXN0cnVjdCBjb21tICpjb21tLCAqdG1wOwogCisJdGhyZWFkX3N0YWNrX19mcmVlKHRocmVhZCk7CisKIAlpZiAodGhyZWFkLT5tZykgewogCQltYXBfZ3JvdXBzX19wdXQodGhyZWFkLT5tZyk7CiAJCXRocmVhZC0+bWcgPSBOVUxMOwpAQCAtMTAwLDE1ICsxMDMsMTQgQEAKIAlyZXR1cm4gbGFzdDsKIH0KIAotLyogQ0hFQ0tNRTogdGltZSBzaG91bGQgYWx3YXlzIGJlIDAgaWYgZXZlbnQgYXJlbid0IG9yZGVyZWQgKi8KIGludCBfX3RocmVhZF9fc2V0X2NvbW0oc3RydWN0IHRocmVhZCAqdGhyZWFkLCBjb25zdCBjaGFyICpzdHIsIHU2NCB0aW1lc3RhbXAsCiAJCSAgICAgICBib29sIGV4ZWMpCiB7CiAJc3RydWN0IGNvbW0gKm5ldywgKmN1cnIgPSB0aHJlYWRfX2NvbW0odGhyZWFkKTsKIAlpbnQgZXJyOwogCi0JLyogT3ZlcnJpZGUgbGF0ZXN0IGVudHJ5IGlmIGl0IGhhZCBubyBzcGVjaWZpYyB0aW1lIGNvdmVyYWdlICovCi0JaWYgKCFjdXJyLT5zdGFydCAmJiAhY3Vyci0+ZXhlYykgeworCS8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IDp0aWQgZW50cnkgKi8KKwlpZiAoIXRocmVhZC0+Y29tbV9zZXQpIHsKIAkJZXJyID0gY29tbV9fb3ZlcnJpZGUoY3Vyciwgc3RyLCB0aW1lc3RhbXAsIGV4ZWMpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTE5OCw3ICsyMDAsNiBAQAogfQogCiB2b2lkIHRocmVhZF9fZmluZF9jcHVtb2RlX2FkZHJfbG9jYXRpb24oc3RydWN0IHRocmVhZCAqdGhyZWFkLAotCQkJCQlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKIAkJCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKIAkJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKQogewpAQCAtMjExLDggKzIxMiw3IEBACiAJfTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNwdW1vZGVzKTsgaSsrKSB7Ci0JCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZXNbaV0sIHR5cGUsCi0JCQkJCSAgIGFkZHIsIGFsKTsKKwkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBjcHVtb2Rlc1tpXSwgdHlwZSwgYWRkciwgYWwpOwogCQlpZiAoYWwtPm1hcCkKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAppbmRleCA4Yzc1ZmE3Li4xNjBmZDA2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgPHN0cmxpc3QuaD4KIAorc3RydWN0IHRocmVhZF9zdGFjazsKKwogc3RydWN0IHRocmVhZCB7CiAJdW5pb24gewogCQlzdHJ1Y3QgcmJfbm9kZQkgcmJfbm9kZTsKQEAgLTIzLDggKzI1LDEwIEBACiAJYm9vbAkJCWRlYWQ7IC8qIGlmIHNldCB0aHJlYWQgaGFzIGV4aXRlZCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJY29tbV9saXN0OwogCWludAkJCWNvbW1fbGVuOworCXU2NAkJCWRiX2lkOwogCiAJdm9pZAkJCSpwcml2OworCXN0cnVjdCB0aHJlYWRfc3RhY2sJKnRzOwogfTsKIAogc3RydWN0IG1hY2hpbmU7CkBAIC01NCwxNiArNTgsMTUgQEAKIGludCB0aHJlYWRfX2Zvcmsoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgdGhyZWFkICpwYXJlbnQsIHU2NCB0aW1lc3RhbXApOwogc2l6ZV90IHRocmVhZF9fZnByaW50ZihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIEZJTEUgKmZwKTsKIAotdm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9tYXAoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbWFwKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCSAgIHU4IGNwdW1vZGUsIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpOwogCi12b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCQl1OCBjcHVtb2RlLCBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CiAKIHZvaWQgdGhyZWFkX19maW5kX2NwdW1vZGVfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCi0JCQkJCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAogCQkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdG9vbC5oIGIvdG9vbHMvcGVyZi91dGlsL3Rvb2wuaAppbmRleCBmMTE2MzY5Li5iYjI3MDhiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdG9vbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90b29sLmgKQEAgLTM5LDcgKzM5LDggQEAKIAlldmVudF9hdHRyX29wCWF0dHI7CiAJZXZlbnRfb3AyCXRyYWNpbmdfZGF0YTsKIAlldmVudF9vcDIJZmluaXNoZWRfcm91bmQsCi0JCQlidWlsZF9pZDsKKwkJCWJ1aWxkX2lkLAorCQkJaWRfaW5kZXg7CiAJYm9vbAkJb3JkZXJlZF9ldmVudHM7CiAJYm9vbAkJb3JkZXJpbmdfcmVxdWlyZXNfdGltZXN0YW1wczsKIH07CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYmR3LmMgYi90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYmR3LmMKaW5kZXggNzQxOTc2OC4uMmRjZmU5YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJkdy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGliZHcuYwpAQCAtMjYsNyArMjYsNyBAQAogCUR3ZmxfTW9kdWxlICptb2Q7CiAJc3RydWN0IGRzbyAqZHNvID0gTlVMTDsKIAotCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHVpLT50aHJlYWQsIHVpLT5tYWNoaW5lLAorCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHVpLT50aHJlYWQsCiAJCQkJICAgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAogCQkJCSAgIE1BUF9fRlVOQ1RJT04sIGlwLCBhbCk7CiAKQEAgLTg5LDcgKzg5LDcgQEAKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAlzc2l6ZV90IHNpemU7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodWktPnRocmVhZCwgdWktPm1hY2hpbmUsIFBFUkZfUkVDT1JEX01JU0NfVVNFUiwKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodWktPnRocmVhZCwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAogCQkJICAgICAgTUFQX19GVU5DVElPTiwgYWRkciwgJmFsKTsKIAlpZiAoIWFsLm1hcCkgewogCQlwcl9kZWJ1ZygidW53aW5kOiBubyBtYXAgZm9yICVseFxuIiwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CkBAIC0xNjQsMTQgKzE2NCwxNCBAQAogfQogCiBpbnQgdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnlfY2JfdCBjYiwgdm9pZCAqYXJnLAotCQkJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqZGF0YSwKIAkJCWludCBtYXhfc3RhY2spCiB7CiAJc3RydWN0IHVud2luZF9pbmZvIHVpID0gewogCQkuc2FtcGxlCQk9IGRhdGEsCiAJCS50aHJlYWQJCT0gdGhyZWFkLAotCQkubWFjaGluZQk9IG1hY2hpbmUsCisJCS5tYWNoaW5lCT0gdGhyZWFkLT5tZy0+bWFjaGluZSwKIAkJLmNiCQk9IGNiLAogCQkuYXJnCQk9IGFyZywKIAkJLm1heF9zdGFjawk9IG1heF9zdGFjaywKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGlidW53aW5kLmMgYi90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYnVud2luZC5jCmluZGV4IDRkNDVjMGQuLjM3MTIxOWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGlidW53aW5kLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodWktPnRocmVhZCwgdWktPm1hY2hpbmUsIFBFUkZfUkVDT1JEX01JU0NfVVNFUiwKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodWktPnRocmVhZCwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAogCQkJICAgICAgTUFQX19GVU5DVElPTiwgaXAsICZhbCk7CiAJcmV0dXJuIGFsLm1hcDsKIH0KQEAgLTM3NCw3ICszNzQsNyBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXNzaXplX3Qgc2l6ZTsKIAotCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCB1aS0+bWFjaGluZSwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAorCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCiAJCQkgICAgICBNQVBfX0ZVTkNUSU9OLCBhZGRyLCAmYWwpOwogCWlmICghYWwubWFwKSB7CiAJCXByX2RlYnVnKCJ1bndpbmQ6IG5vIG1hcCBmb3IgJWx4XG4iLCAodW5zaWduZWQgbG9uZylhZGRyKTsKQEAgLTQ3NiwxNCArNDc2LDEzIEBACiAJcHJfZGVidWcoInVud2luZDogcHV0X3Vud2luZF9pbmZvIGNhbGxlZFxuIik7CiB9CiAKLXN0YXRpYyBpbnQgZW50cnkodTY0IGlwLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorc3RhdGljIGludCBlbnRyeSh1NjQgaXAsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJIHVud2luZF9lbnRyeV9jYl90IGNiLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHVud2luZF9lbnRyeSBlOwogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBtYWNoaW5lLAotCQkJCSAgIFBFUkZfUkVDT1JEX01JU0NfVVNFUiwKKwl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIFBFUkZfUkVDT1JEX01JU0NfVVNFUiwKIAkJCQkgICBNQVBfX0ZVTkNUSU9OLCBpcCwgJmFsKTsKIAogCWUuaXAgPSBpcDsKQEAgLTU4NiwyMSArNTg1LDIxIEBACiAJCXVud193b3JkX3QgaXA7CiAKIAkJdW53X2dldF9yZWcoJmMsIFVOV19SRUdfSVAsICZpcCk7Ci0JCXJldCA9IGlwID8gZW50cnkoaXAsIHVpLT50aHJlYWQsIHVpLT5tYWNoaW5lLCBjYiwgYXJnKSA6IDA7CisJCXJldCA9IGlwID8gZW50cnkoaXAsIHVpLT50aHJlYWQsIGNiLCBhcmcpIDogMDsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnlfY2JfdCBjYiwgdm9pZCAqYXJnLAotCQkJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqZGF0YSwgaW50IG1heF9zdGFjaykKIHsKIAl1NjQgaXA7CiAJc3RydWN0IHVud2luZF9pbmZvIHVpID0gewogCQkuc2FtcGxlICAgICAgID0gZGF0YSwKIAkJLnRocmVhZCAgICAgICA9IHRocmVhZCwKLQkJLm1hY2hpbmUgICAgICA9IG1hY2hpbmUsCisJCS5tYWNoaW5lICAgICAgPSB0aHJlYWQtPm1nLT5tYWNoaW5lLAogCX07CiAJaW50IHJldDsKIApAQCAtNjExLDcgKzYxMCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGVudHJ5KGlwLCB0aHJlYWQsIG1hY2hpbmUsIGNiLCBhcmcpOworCXJldCA9IGVudHJ5KGlwLCB0aHJlYWQsIGNiLCBhcmcpOwogCWlmIChyZXQpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdW53aW5kLmggYi90b29scy9wZXJmL3V0aWwvdW53aW5kLmgKaW5kZXggZjUwYjczNy4uMTI3OTBjZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQuaApAQCAtMTYsNyArMTYsNiBAQAogCiAjaWZkZWYgSEFWRV9EV0FSRl9VTldJTkRfU1VQUE9SVAogaW50IHVud2luZF9fZ2V0X2VudHJpZXModW53aW5kX2VudHJ5X2NiX3QgY2IsIHZvaWQgKmFyZywKLQkJCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAogCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJc3RydWN0IHBlcmZfc2FtcGxlICpkYXRhLCBpbnQgbWF4X3N0YWNrKTsKIC8qIGxpYnVud2luZCBzcGVjaWZpYyAqLwpAQCAtMzgsNyArMzcsNiBAQAogc3RhdGljIGlubGluZSBpbnQKIHVud2luZF9fZ2V0X2VudHJpZXModW53aW5kX2VudHJ5X2NiX3QgY2IgX19tYXliZV91bnVzZWQsCiAJCSAgICB2b2lkICphcmcgX19tYXliZV91bnVzZWQsCi0JCSAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSBfX21heWJlX3VudXNlZCwKIAkJICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX21heWJlX3VudXNlZCwKIAkJICAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqZGF0YSBfX21heWJlX3VudXNlZCwKIAkJICAgIGludCBtYXhfc3RhY2sgX19tYXliZV91bnVzZWQpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdXRpbC5oIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaAppbmRleCA4MGJmZGFhLi40MTliZWUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdXRpbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKQEAgLTE1NCw3ICsxNTQsNiBAQAogCiBleHRlcm4gaW50IHByZWZpeGNtcChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gdm9pZCBzZXRfYnVpbGRpZF9kaXIodm9pZCk7Ci1leHRlcm4gdm9pZCBkaXNhYmxlX2J1aWxkaWRfY2FjaGUodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc2tpcF9wcmVmaXgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CkBAIC0zMzgsOCArMzM3LDEwIEBACiB9CiAKIHN0cnVjdCBkc287CitzdHJ1Y3Qgc3ltYm9sOwogCi1jaGFyICpnZXRfc3JjbGluZShzdHJ1Y3QgZHNvICpkc28sIHVuc2lnbmVkIGxvbmcgYWRkcik7CitjaGFyICpnZXRfc3JjbGluZShzdHJ1Y3QgZHNvICpkc28sIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkgIGJvb2wgc2hvd19zeW0pOwogdm9pZCBmcmVlX3NyY2xpbmUoY2hhciAqc3JjbGluZSk7CiAKIGludCBmaWxlbmFtZV9fcmVhZF9pbnQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCAqdmFsdWUpOwpAQCAtMzUxLDQgKzM1Miw5IEBACiAKIGNvbnN0IGNoYXIgKmdldF9maWxlbmFtZV9mb3JfcGVyZl9rdm0odm9pZCk7CiBib29sIGZpbmRfcHJvY2Vzcyhjb25zdCBjaGFyICpuYW1lKTsKKworI2lmZGVmIEhBVkVfWkxJQl9TVVBQT1JUCitpbnQgZ3ppcF9kZWNvbXByZXNzX3RvX2ZpbGUoY29uc3QgY2hhciAqaW5wdXQsIGludCBvdXRwdXRfZmQpOworI2VuZGlmCisKICNlbmRpZiAvKiBHSVRfQ09NUEFUX1VUSUxfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Zkc28uYyBiL3Rvb2xzL3BlcmYvdXRpbC92ZHNvLmMKaW5kZXggYWRjYTY5My4uNWM3ZGQ3OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Zkc28uYworKysgYi90b29scy9wZXJmL3V0aWwvdmRzby5jCkBAIC0xMiw5ICsxMiwxNiBAQAogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJzeW1ib2wuaCIKICNpbmNsdWRlICJtYWNoaW5lLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCiAjaW5jbHVkZSAibGludXgvc3RyaW5nLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAorLyoKKyAqIEluY2x1ZGUgZGVmaW5pdGlvbiBvZiBmaW5kX3Zkc29fbWFwKCkgYWxzbyB1c2VkIGluIHBlcmYtcmVhZC12ZHNvLmMgZm9yCisgKiBidWlsZGluZyBwZXJmLXJlYWQtdmRzbzMyIGFuZCBwZXJmLXJlYWQtdmRzb3gzMi4KKyAqLworI2luY2x1ZGUgImZpbmQtdmRzby1tYXAuYyIKKwogI2RlZmluZSBWRFNPX19URU1QX0ZJTEVfTkFNRSAiL3RtcC9wZXJmLXZkc28uc28tWFhYWFhYIgogCiBzdHJ1Y3QgdmRzb19maWxlIHsKQEAgLTIyLDEwICsyOSwxNSBAQAogCWJvb2wgZXJyb3I7CiAJY2hhciB0ZW1wX2ZpbGVfbmFtZVtzaXplb2YoVkRTT19fVEVNUF9GSUxFX05BTUUpXTsKIAljb25zdCBjaGFyICpkc29fbmFtZTsKKwljb25zdCBjaGFyICpyZWFkX3Byb2c7CiB9OwogCiBzdHJ1Y3QgdmRzb19pbmZvIHsKIAlzdHJ1Y3QgdmRzb19maWxlIHZkc287CisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCXN0cnVjdCB2ZHNvX2ZpbGUgdmRzbzMyOworCXN0cnVjdCB2ZHNvX2ZpbGUgdmRzb3gzMjsKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCB2ZHNvX2luZm8gKnZkc29faW5mb19fbmV3KHZvaWQpCkBAIC0zNSw0MiArNDcsMjMgQEAKIAkJCS50ZW1wX2ZpbGVfbmFtZSA9IFZEU09fX1RFTVBfRklMRV9OQU1FLAogCQkJLmRzb19uYW1lID0gRFNPX19OQU1FX1ZEU08sCiAJCX0sCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCQkudmRzbzMyICA9IHsKKwkJCS50ZW1wX2ZpbGVfbmFtZSA9IFZEU09fX1RFTVBfRklMRV9OQU1FLAorCQkJLmRzb19uYW1lID0gRFNPX19OQU1FX1ZEU08zMiwKKwkJCS5yZWFkX3Byb2cgPSAicGVyZi1yZWFkLXZkc28zMiIsCisJCX0sCisJCS52ZHNveDMyICA9IHsKKwkJCS50ZW1wX2ZpbGVfbmFtZSA9IFZEU09fX1RFTVBfRklMRV9OQU1FLAorCQkJLmRzb19uYW1lID0gRFNPX19OQU1FX1ZEU09YMzIsCisJCQkucmVhZF9wcm9nID0gInBlcmYtcmVhZC12ZHNveDMyIiwKKwkJfSwKKyNlbmRpZgogCX07CiAKIAlyZXR1cm4gbWVtZHVwKCZ2ZHNvX2luZm9faW5pdCwgc2l6ZW9mKHZkc29faW5mb19pbml0KSk7CiB9CiAKLXN0YXRpYyBpbnQgZmluZF92ZHNvX21hcCh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQpCi17Ci0JRklMRSAqbWFwczsKLQljaGFyIGxpbmVbMTI4XTsKLQlpbnQgZm91bmQgPSAwOwotCi0JbWFwcyA9IGZvcGVuKCIvcHJvYy9zZWxmL21hcHMiLCAiciIpOwotCWlmICghbWFwcykgewotCQlwcl9lcnIoInZkc286IGNhbm5vdCBvcGVuIG1hcHNcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jd2hpbGUgKCFmb3VuZCAmJiBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIG1hcHMpKSB7Ci0JCWludCBtID0gLTE7Ci0KLQkJLyogV2UgY2FyZSBvbmx5IGFib3V0IHByaXZhdGUgci14IG1hcHBpbmdzLiAqLwotCQlpZiAoMiAhPSBzc2NhbmYobGluZSwgIiVwLSVwIHIteHAgJSp4ICUqeDolKnggJSp1ICVuIiwKLQkJCQlzdGFydCwgZW5kLCAmbSkpCi0JCQljb250aW51ZTsKLQkJaWYgKG0gPCAwKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFzdHJuY21wKCZsaW5lW21dLCBWRFNPX19NQVBfTkFNRSwKLQkJCSAgICAgc2l6ZW9mKFZEU09fX01BUF9OQU1FKSAtIDEpKQotCQkJZm91bmQgPSAxOwotCX0KLQotCWZjbG9zZShtYXBzKTsKLQlyZXR1cm4gIWZvdW5kOwotfQotCiBzdGF0aWMgY2hhciAqZ2V0X2ZpbGUoc3RydWN0IHZkc29fZmlsZSAqdmRzb19maWxlKQogewogCWNoYXIgKnZkc28gPSBOVUxMOwpAQCAtMTE3LDYgKzExMCwxMiBAQAogCiAJaWYgKHZkc29faW5mby0+dmRzby5mb3VuZCkKIAkJdW5saW5rKHZkc29faW5mby0+dmRzby50ZW1wX2ZpbGVfbmFtZSk7CisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCWlmICh2ZHNvX2luZm8tPnZkc28zMi5mb3VuZCkKKwkJdW5saW5rKHZkc29faW5mby0+dmRzbzMyLnRlbXBfZmlsZV9uYW1lKTsKKwlpZiAodmRzb19pbmZvLT52ZHNveDMyLmZvdW5kKQorCQl1bmxpbmsodmRzb19pbmZvLT52ZHNveDMyLnRlbXBfZmlsZV9uYW1lKTsKKyNlbmRpZgogCiAJemZyZWUoJm1hY2hpbmUtPnZkc29faW5mbyk7CiB9CkBAIC0xMzUsNiArMTM0LDE1MyBAQAogCXJldHVybiBkc287CiB9CiAKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisKK3N0YXRpYyBlbnVtIGRzb190eXBlIG1hY2hpbmVfX3RocmVhZF9kc29fdHlwZShzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKKwkJCQkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKQoreworCWVudW0gZHNvX3R5cGUgZHNvX3R5cGUgPSBEU09fX1RZUEVfVU5LTk9XTjsKKwlzdHJ1Y3QgbWFwICptYXA7CisJc3RydWN0IGRzbyAqZHNvOworCisJbWFwID0gbWFwX2dyb3Vwc19fZmlyc3QodGhyZWFkLT5tZywgTUFQX19GVU5DVElPTik7CisJZm9yICg7IG1hcCA7IG1hcCA9IG1hcF9ncm91cHNfX25leHQobWFwKSkgeworCQlkc28gPSBtYXAtPmRzbzsKKwkJaWYgKCFkc28gfHwgZHNvLT5sb25nX25hbWVbMF0gIT0gJy8nKQorCQkJY29udGludWU7CisJCWRzb190eXBlID0gZHNvX190eXBlKGRzbywgbWFjaGluZSk7CisJCWlmIChkc29fdHlwZSAhPSBEU09fX1RZUEVfVU5LTk9XTikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBkc29fdHlwZTsKK30KKworc3RhdGljIGludCB2ZHNvX19kb19jb3B5X2NvbXBhdChGSUxFICpmLCBpbnQgZmQpCit7CisJY2hhciBidWZbNDA5Nl07CisJc2l6ZV90IGNvdW50OworCisJd2hpbGUgKDEpIHsKKwkJY291bnQgPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBmKTsKKwkJaWYgKGZlcnJvcihmKSkKKwkJCXJldHVybiAtZXJybm87CisJCWlmIChmZW9mKGYpKQorCQkJYnJlYWs7CisJCWlmIChjb3VudCAmJiB3cml0ZW4oZmQsIGJ1ZiwgY291bnQpICE9IChzc2l6ZV90KWNvdW50KQorCQkJcmV0dXJuIC1lcnJubzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZHNvX19jb3B5X2NvbXBhdChjb25zdCBjaGFyICpwcm9nLCBpbnQgZmQpCit7CisJRklMRSAqZjsKKwlpbnQgZXJyOworCisJZiA9IHBvcGVuKHByb2csICJyIik7CisJaWYgKCFmKQorCQlyZXR1cm4gLWVycm5vOworCisJZXJyID0gdmRzb19fZG9fY29weV9jb21wYXQoZiwgZmQpOworCisJaWYgKHBjbG9zZShmKSA9PSAtMSkKKwkJcmV0dXJuIC1lcnJubzsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdmRzb19fY3JlYXRlX2NvbXBhdF9maWxlKGNvbnN0IGNoYXIgKnByb2csIGNoYXIgKnRlbXBfbmFtZSkKK3sKKwlpbnQgZmQsIGVycjsKKworCWZkID0gbWtzdGVtcCh0ZW1wX25hbWUpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtZXJybm87CisKKwllcnIgPSB2ZHNvX19jb3B5X2NvbXBhdChwcm9nLCBmZCk7CisKKwlpZiAoY2xvc2UoZmQpID09IC0xKQorCQlyZXR1cm4gLWVycm5vOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnZkc29fX2dldF9jb21wYXRfZmlsZShzdHJ1Y3QgdmRzb19maWxlICp2ZHNvX2ZpbGUpCit7CisJaW50IGVycjsKKworCWlmICh2ZHNvX2ZpbGUtPmZvdW5kKQorCQlyZXR1cm4gdmRzb19maWxlLT50ZW1wX2ZpbGVfbmFtZTsKKworCWlmICh2ZHNvX2ZpbGUtPmVycm9yKQorCQlyZXR1cm4gTlVMTDsKKworCWVyciA9IHZkc29fX2NyZWF0ZV9jb21wYXRfZmlsZSh2ZHNvX2ZpbGUtPnJlYWRfcHJvZywKKwkJCQkgICAgICAgdmRzb19maWxlLT50ZW1wX2ZpbGVfbmFtZSk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIiVzIGZhaWxlZCwgZXJyb3IgJWRcbiIsIHZkc29fZmlsZS0+cmVhZF9wcm9nLCBlcnIpOworCQl2ZHNvX2ZpbGUtPmVycm9yID0gdHJ1ZTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdmRzb19maWxlLT5mb3VuZCA9IHRydWU7CisKKwlyZXR1cm4gdmRzb19maWxlLT50ZW1wX2ZpbGVfbmFtZTsKK30KKworc3RhdGljIHN0cnVjdCBkc28gKnZkc29fX2ZpbmRuZXdfY29tcGF0KHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorCQkJCQlzdHJ1Y3QgdmRzb19maWxlICp2ZHNvX2ZpbGUpCit7CisJY29uc3QgY2hhciAqZmlsZV9uYW1lOworCXN0cnVjdCBkc28gKmRzbzsKKworCWRzbyA9IGRzb3NfX2ZpbmQoJm1hY2hpbmUtPnVzZXJfZHNvcywgdmRzb19maWxlLT5kc29fbmFtZSwgdHJ1ZSk7CisJaWYgKGRzbykKKwkJcmV0dXJuIGRzbzsKKworCWZpbGVfbmFtZSA9IHZkc29fX2dldF9jb21wYXRfZmlsZSh2ZHNvX2ZpbGUpOworCWlmICghZmlsZV9uYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiB2ZHNvX19uZXcobWFjaGluZSwgdmRzb19maWxlLT5kc29fbmFtZSwgZmlsZV9uYW1lKTsKK30KKworc3RhdGljIGludCB2ZHNvX19kc29fZmluZG5ld19jb21wYXQoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCisJCQkJICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQkgICAgc3RydWN0IHZkc29faW5mbyAqdmRzb19pbmZvLAorCQkJCSAgICBzdHJ1Y3QgZHNvICoqZHNvKQoreworCWVudW0gZHNvX3R5cGUgZHNvX3R5cGU7CisKKwlkc29fdHlwZSA9IG1hY2hpbmVfX3RocmVhZF9kc29fdHlwZShtYWNoaW5lLCB0aHJlYWQpOworCisjaWZuZGVmIEhBVkVfUEVSRl9SRUFEX1ZEU08zMgorCWlmIChkc29fdHlwZSA9PSBEU09fX1RZUEVfMzJCSVQpCisJCXJldHVybiAwOworI2VuZGlmCisjaWZuZGVmIEhBVkVfUEVSRl9SRUFEX1ZEU09YMzIKKwlpZiAoZHNvX3R5cGUgPT0gRFNPX19UWVBFX1gzMkJJVCkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworCXN3aXRjaCAoZHNvX3R5cGUpIHsKKwljYXNlIERTT19fVFlQRV8zMkJJVDoKKwkJKmRzbyA9IHZkc29fX2ZpbmRuZXdfY29tcGF0KG1hY2hpbmUsICZ2ZHNvX2luZm8tPnZkc28zMik7CisJCXJldHVybiAxOworCWNhc2UgRFNPX19UWVBFX1gzMkJJVDoKKwkJKmRzbyA9IHZkc29fX2ZpbmRuZXdfY29tcGF0KG1hY2hpbmUsICZ2ZHNvX2luZm8tPnZkc294MzIpOworCQlyZXR1cm4gMTsKKwljYXNlIERTT19fVFlQRV9VTktOT1dOOgorCWNhc2UgRFNPX19UWVBFXzY0QklUOgorCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworI2VuZGlmCisKIHN0cnVjdCBkc28gKnZkc29fX2Rzb19maW5kbmV3KHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAogCQkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fbWF5YmVfdW51c2VkKQogewpAQCAtMTQ4LDYgKzI5NCwxMSBAQAogCWlmICghdmRzb19pbmZvKQogCQlyZXR1cm4gTlVMTDsKIAorI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKwlpZiAodmRzb19fZHNvX2ZpbmRuZXdfY29tcGF0KG1hY2hpbmUsIHRocmVhZCwgdmRzb19pbmZvLCAmZHNvKSkKKwkJcmV0dXJuIGRzbzsKKyNlbmRpZgorCiAJZHNvID0gZHNvc19fZmluZCgmbWFjaGluZS0+dXNlcl9kc29zLCBEU09fX05BTUVfVkRTTywgdHJ1ZSk7CiAJaWYgKCFkc28pIHsKIAkJY2hhciAqZmlsZTsKQEAgLTE2NCw1ICszMTUsNyBAQAogCiBib29sIGRzb19faXNfdmRzbyhzdHJ1Y3QgZHNvICpkc28pCiB7Ci0JcmV0dXJuICFzdHJjbXAoZHNvLT5zaG9ydF9uYW1lLCBEU09fX05BTUVfVkRTTyk7CisJcmV0dXJuICFzdHJjbXAoZHNvLT5zaG9ydF9uYW1lLCBEU09fX05BTUVfVkRTTykgfHwKKwkgICAgICAgIXN0cmNtcChkc28tPnNob3J0X25hbWUsIERTT19fTkFNRV9WRFNPMzIpIHx8CisJICAgICAgICFzdHJjbXAoZHNvLT5zaG9ydF9uYW1lLCBEU09fX05BTUVfVkRTT1gzMik7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdmRzby5oIGIvdG9vbHMvcGVyZi91dGlsL3Zkc28uaAppbmRleCBhZjlkNjkyLi5kOTdkYTE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdmRzby5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC92ZHNvLmgKQEAgLTcsNyArNyw5IEBACiAKICNkZWZpbmUgVkRTT19fTUFQX05BTUUgIlt2ZHNvXSIKIAotI2RlZmluZSBEU09fX05BTUVfVkRTTyAiW3Zkc29dIgorI2RlZmluZSBEU09fX05BTUVfVkRTTyAgICAiW3Zkc29dIgorI2RlZmluZSBEU09fX05BTUVfVkRTTzMyICAiW3Zkc28zMl0iCisjZGVmaW5lIERTT19fTkFNRV9WRFNPWDMyICJbdmRzb3gzMl0iCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc192ZHNvX21hcChjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC96bGliLmMgYi90b29scy9wZXJmL3V0aWwvemxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NWE0NDkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvemxpYi5jCkBAIC0wLDAgKzEsNzggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDx6bGliLmg+CisKKyNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisKKworI2RlZmluZSBDSFVOS19TSVpFICAxNjM4NAorCitpbnQgZ3ppcF9kZWNvbXByZXNzX3RvX2ZpbGUoY29uc3QgY2hhciAqaW5wdXQsIGludCBvdXRwdXRfZmQpCit7CisJaW50IHJldCA9IFpfU1RSRUFNX0VSUk9SOworCWludCBpbnB1dF9mZDsKKwl2b2lkICpwdHI7CisJaW50IGxlbjsKKwlzdHJ1Y3Qgc3RhdCBzdGJ1ZjsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltDSFVOS19TSVpFXTsKKwl6X3N0cmVhbSB6cyA9IHsKKwkJLnphbGxvYwkJPSBaX05VTEwsCisJCS56ZnJlZQkJPSBaX05VTEwsCisJCS5vcGFxdWUJCT0gWl9OVUxMLAorCQkuYXZhaWxfaW4JPSAwLAorCQkubmV4dF9pbgk9IFpfTlVMTCwKKwl9OworCisJaW5wdXRfZmQgPSBvcGVuKGlucHV0LCBPX1JET05MWSk7CisJaWYgKGlucHV0X2ZkIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGZzdGF0KGlucHV0X2ZkLCAmc3RidWYpIDwgMCkKKwkJZ290byBvdXRfY2xvc2U7CisKKwlwdHIgPSBtbWFwKE5VTEwsIHN0YnVmLnN0X3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGlucHV0X2ZkLCAwKTsKKwlpZiAocHRyID09IE1BUF9GQUlMRUQpCisJCWdvdG8gb3V0X2Nsb3NlOworCisJaWYgKGluZmxhdGVJbml0MigmenMsIDE2ICsgTUFYX1dCSVRTKSAhPSBaX09LKQorCQlnb3RvIG91dF91bm1hcDsKKworCXpzLm5leHRfaW4gPSBwdHI7CisJenMuYXZhaWxfaW4gPSBzdGJ1Zi5zdF9zaXplOworCisJZG8geworCQl6cy5uZXh0X291dCA9IGJ1ZjsKKwkJenMuYXZhaWxfb3V0ID0gQ0hVTktfU0laRTsKKworCQlyZXQgPSBpbmZsYXRlKCZ6cywgWl9OT19GTFVTSCk7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgWl9ORUVEX0RJQ1Q6CisJCQlyZXQgPSBaX0RBVEFfRVJST1I7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBaX0RBVEFfRVJST1I6CisJCWNhc2UgWl9NRU1fRVJST1I6CisJCQlnb3RvIG91dDsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJbGVuID0gQ0hVTktfU0laRSAtIHpzLmF2YWlsX291dDsKKwkJaWYgKHdyaXRlbihvdXRwdXRfZmQsIGJ1ZiwgbGVuKSAhPSBsZW4pIHsKKwkJCXJldCA9IFpfREFUQV9FUlJPUjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwl9IHdoaWxlIChyZXQgIT0gWl9TVFJFQU1fRU5EKTsKKworb3V0OgorCWluZmxhdGVFbmQoJnpzKTsKK291dF91bm1hcDoKKwltdW5tYXAocHRyLCBzdGJ1Zi5zdF9zaXplKTsKK291dF9jbG9zZToKKwljbG9zZShpbnB1dF9mZCk7CisKKwlyZXR1cm4gcmV0ID09IFpfU1RSRUFNX0VORCA/IDAgOiAtMTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS9mdHJhY2V0ZXN0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL2Z0cmFjZXRlc3QKaW5kZXggYThmODFjNy4uNTE1MjQ3NiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL2Z0cmFjZXRlc3QKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL2Z0cmFjZXRlc3QKQEAgLTgyLDcgKzgyLDcgQEAKIH0KIAogIyBQYXJhbWV0ZXJzCi1ERUJVR0ZTX0RJUj1gZ3JlcCBkZWJ1Z2ZzIC9wcm9jL21vdW50cyB8IGN1dCAtZjIgLWQnICdgCitERUJVR0ZTX0RJUj1gZ3JlcCBkZWJ1Z2ZzIC9wcm9jL21vdW50cyB8IGN1dCAtZjIgLWQnICcgfCBoZWFkIC0xYAogVFJBQ0lOR19ESVI9JERFQlVHRlNfRElSL3RyYWNpbmcKIFRPUF9ESVI9YGFic2RpciAkMGAKIFRFU1RfRElSPSRUT1BfRElSL3Rlc3QuZApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Bzb2NrX2Zhbm91dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Bzb2NrX2Zhbm91dC5jCmluZGV4IDU3YjljMmIuLjZmNjczMzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wc29ja19mYW5vdXQuYworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcHNvY2tfZmFub3V0LmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCXN0cnVjdCB0cGFja2V0Ml9oZHIgKmhlYWRlciA9IHJpbmc7CiAJaW50IGNvdW50ID0gMDsKIAotCXdoaWxlIChoZWFkZXItPnRwX3N0YXR1cyAmIFRQX1NUQVRVU19VU0VSICYmIGNvdW50IDwgUklOR19OVU1fRlJBTUVTKSB7CisJd2hpbGUgKGNvdW50IDwgUklOR19OVU1fRlJBTUVTICYmIGhlYWRlci0+dHBfc3RhdHVzICYgVFBfU1RBVFVTX1VTRVIpIHsKIAkJY291bnQrKzsKIAkJaGVhZGVyID0gcmluZyArIChjb3VudCAqIGdldHBhZ2VzaXplKCkpOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS10ZXN0LTEtcnVuLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXRlc3QtMS1ydW4uc2gKaW5kZXggZjZiMmI0Ny4uOGNhOWYyMSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXRlc3QtMS1ydW4uc2gKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXRlc3QtMS1ydW4uc2gKQEAgLTQ1LDcgKzQ1LDcgQEAKIHRvdWNoICRUCiAKIC4gJEtWTS9iaW4vZnVuY3Rpb25zLnNoCi0uICRLVlBBVEgvdmVyX2Z1bmN0aW9ucy5zaAorLiAkQ09ORklHRlJBRy92ZXJfZnVuY3Rpb25zLnNoCiAKIGNvbmZpZ190ZW1wbGF0ZT0kezF9CiBjb25maWdfZGlyPWBlY2hvICRjb25maWdfdGVtcGxhdGUgfCBzZWQgLWUgJ3MsL1teL10qJCwsJ2AKQEAgLTE2OCw4ICsxNjgsOCBAQAogCXRvdWNoICRyZXNkaXIvYnVpbGRvbmx5CiAJZXhpdCAwCiBmaQotZWNobyAkUUVNVSAkcWVtdV9hcmdzIC1tIDUxMiAta2VybmVsICRidWlsZGRpci8kQk9PVF9JTUFHRSAtYXBwZW5kIFwiJHFlbXVfYXBwZW5kICRib290X2FyZ3NcIiA+ICRyZXNkaXIvcWVtdS1jbWQKLSggJFFFTVUgJHFlbXVfYXJncyAtbSA1MTIgLWtlcm5lbCAkYnVpbGRkaXIvJEJPT1RfSU1BR0UgLWFwcGVuZCAiJHFlbXVfYXBwZW5kICRib290X2FyZ3MiOyBlY2hvICQ/ID4gJHJlc2Rpci9xZW11LXJldHZhbCApICYKK2VjaG8gJFFFTVUgJHFlbXVfYXJncyAtbSA1MTIgLWtlcm5lbCAkcmVzZGlyL2J6SW1hZ2UgLWFwcGVuZCBcIiRxZW11X2FwcGVuZCAkYm9vdF9hcmdzXCIgPiAkcmVzZGlyL3FlbXUtY21kCisoICRRRU1VICRxZW11X2FyZ3MgLW0gNTEyIC1rZXJuZWwgJHJlc2Rpci9iekltYWdlIC1hcHBlbmQgIiRxZW11X2FwcGVuZCAkYm9vdF9hcmdzIjsgZWNobyAkPyA+ICRyZXNkaXIvcWVtdS1yZXR2YWwgKSAmCiBxZW11X3BpZD0kIQogY29tbWFuZGNvbXBsZXRlZD0wCiBlY2hvIE1vbml0b3JpbmcgcWVtdSBqb2IgYXQgcGlkICRxZW11X3BpZApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLnNoCmluZGV4IGU1MjdkYzkuLjM2OGQ2NGEgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0uc2gKQEAgLTQ3LDcgKzQ3LDYgQEAKIGNvbmZpZ3M9IiIKIGNwdXM9MAogZHM9YGRhdGUgKyVZLiVtLiVkLSVIOiVNOiVTYAota3ZlcnNpb249IiIKIAogLiBmdW5jdGlvbnMuc2gKIApAQCAtNjQsNyArNjMsNiBAQAogCWVjaG8gIiAgICAgICAtLWR1cmF0aW9uIG1pbnV0ZXMiCiAJZWNobyAiICAgICAgIC0taW50ZXJhY3RpdmUiCiAJZWNobyAiICAgICAgIC0ta21ha2UtYXJnIGtlcm5lbC1tYWtlLWFyZ3VtZW50cyIKLQllY2hvICIgICAgICAgLS1rdmVyc2lvbiB2Ti5OTiIKIAllY2hvICIgICAgICAgLS1tYWMgbm46bm46bm46bm46bm46bm4iCiAJZWNobyAiICAgICAgIC0tbm8taW5pdHJkIgogCWVjaG8gIiAgICAgICAtLXFlbXUtYXJncyBxZW11LXN5c3RlbS0uLi4iCkBAIC0xMjgsMTEgKzEyNiw2IEBACiAJCVRPUlRVUkVfS01BS0VfQVJHPSIkMiIKIAkJc2hpZnQKIAkJOzsKLQktLWt2ZXJzaW9uKQotCQljaGVja2FyZyAtLWt2ZXJzaW9uICIoa2VybmVsIHZlcnNpb24pIiAkIyAiJDIiICdedlswLTkuXSokJyAnXmVycm9yJwotCQlrdmVyc2lvbj0kMgotCQlzaGlmdAotCQk7OwogCS0tbWFjKQogCQljaGVja2FyZyAtLW1hYyAiKE1BQyBhZGRyZXNzKSIgJCMgIiQyIiAnXlwoWzAtOWEtZkEtRl1cezJcfTpcKVx7NVx9WzAtOWEtZkEtRl1cezJcfSQnIGVycm9yCiAJCVRPUlRVUkVfUUVNVV9NQUM9JDIKQEAgLTE3MCwxMSArMTYzLDEwIEBACiBkb25lCiAKIENPTkZJR0ZSQUc9JHtLVk19L2NvbmZpZ3MvJHtUT1JUVVJFX1NVSVRFfTsgZXhwb3J0IENPTkZJR0ZSQUcKLUtWUEFUSD0ke0NPTkZJR0ZSQUd9LyRrdmVyc2lvbjsgZXhwb3J0IEtWUEFUSAogCiBpZiB0ZXN0IC16ICIkY29uZmlncyIKIHRoZW4KLQljb25maWdzPSJgY2F0ICRDT05GSUdGUkFHLyRrdmVyc2lvbi9DRkxJU1RgIgorCWNvbmZpZ3M9ImBjYXQgJENPTkZJR0ZSQUcvQ0ZMSVNUYCIKIGZpCiAKIGlmIHRlc3QgLXogIiRyZXNkaXIiCkBAIC0xODYsMTAgKzE3OCwxMCBAQAogdG91Y2ggJFQvY2ZnY3B1CiBmb3IgQ0YgaW4gJGNvbmZpZ3MKIGRvCi0JaWYgdGVzdCAtZiAiJENPTkZJR0ZSQUcvJGt2ZXJzaW9uLyRDRiIKKwlpZiB0ZXN0IC1mICIkQ09ORklHRlJBRy8kQ0YiCiAJdGhlbgotCQljcHVfY291bnQ9YGNvbmZpZ05SX0NQVVMuc2ggJENPTkZJR0ZSQUcvJGt2ZXJzaW9uLyRDRmAKLQkJY3B1X2NvdW50PWBjb25maWdmcmFnX2Jvb3RfY3B1cyAiJFRPUlRVUkVfQk9PVEFSR1MiICIkQ09ORklHRlJBRy8ka3ZlcnNpb24vJENGIiAiJGNwdV9jb3VudCJgCisJCWNwdV9jb3VudD1gY29uZmlnTlJfQ1BVUy5zaCAkQ09ORklHRlJBRy8kQ0ZgCisJCWNwdV9jb3VudD1gY29uZmlnZnJhZ19ib290X2NwdXMgIiRUT1JUVVJFX0JPT1RBUkdTIiAiJENPTkZJR0ZSQUcvJENGIiAiJGNwdV9jb3VudCJgCiAJCWVjaG8gJENGICRjcHVfY291bnQgPj4gJFQvY2ZnY3B1CiAJZWxzZQogCQllY2hvICJUaGUgLS1jb25maWdzIGZpbGUgJENGIGRvZXMgbm90IGV4aXN0LCB0ZXJtaW5hdGluZy4iCkBAIC0yNTIsNyArMjQ0LDYgQEAKIGNhdCA8PCBfX19FT0ZfX18gPiAkVC9zY3JpcHQKIENPTkZJR0ZSQUc9IiRDT05GSUdGUkFHIjsgZXhwb3J0IENPTkZJR0ZSQUcKIEtWTT0iJEtWTSI7IGV4cG9ydCBLVk0KLUtWUEFUSD0iJEtWUEFUSCI7IGV4cG9ydCBLVlBBVEgKIFBBVEg9IiRQQVRIIjsgZXhwb3J0IFBBVEgKIFRPUlRVUkVfQk9PVF9JTUFHRT0iJFRPUlRVUkVfQk9PVF9JTUFHRSI7IGV4cG9ydCBUT1JUVVJFX0JPT1RfSU1BR0UKIFRPUlRVUkVfQlVJTERPTkxZPSIkVE9SVFVSRV9CVUlMRE9OTFkiOyBleHBvcnQgVE9SVFVSRV9CVUlMRE9OTFkKQEAgLTI4NSw3ICsyNzYsNyBAQAogZmkKIF9fX0VPRl9fXwogYXdrIDwgJFQvY2ZnY3B1LnBhY2sgXAotCS12IENPTkZJR0RJUj0iJENPTkZJR0ZSQUcvJGt2ZXJzaW9uLyIgXAorCS12IENPTkZJR0RJUj0iJENPTkZJR0ZSQUcvIiBcCiAJLXYgS1ZNPSIkS1ZNIiBcCiAJLXYgbmNwdXM9JGNwdXMgXAogCS12IHJkPSRyZXNkaXIvJGRzLyBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RJTlkwMiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyCmluZGV4IGY0ZmVhZWUuLjM2ZTQxZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyCkBAIC03LDYgKzcsOCBAQAogQ09ORklHX05PX0haX0lETEU9bgogQ09ORklHX05PX0haX0ZVTEw9bgogQ09ORklHX1JDVV9UUkFDRT15CitDT05GSUdfUFJPVkVfTE9DS0lORz15CitDT05GSUdfUFJPVkVfUkNVPXkKIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPW4KIENPTkZJR19QUkVFTVBUX0NPVU5UPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyLmJvb3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RJTlkwMi5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDgwMjcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RJTlkwMi5ib290CkBAIC0wLDAgKzEsMiBAQAorcmN1cGRhdGUucmN1X3NlbGZfdGVzdD0xCityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0X2JoPTEKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTAxIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDEKaW5kZXggMzhlMzg5NS4uZjhhMTBhNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDEKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDEKQEAgLTIsNyArMiw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPW4KIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCiBDT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQorI0NIRUNLI0NPTkZJR19QUkVFTVBUX1JDVT15CiBDT05GSUdfSFpfUEVSSU9ESUM9bgogQ09ORklHX05PX0haX0lETEU9eQogQ09ORklHX05PX0haX0ZVTEw9bgpAQCAtMTQsNiArMTQsNSBAQAogQ09ORklHX1JDVV9OT0NCX0NQVV9aRVJPPXkKIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfUkNVX0JPT1NUPW4KIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTAyIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDIKaW5kZXggZWExMTliYS4uNjI5MTIyZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDIKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDIKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPW4KIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCiBDT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQorI0NIRUNLI0NPTkZJR19QUkVFTVBUX1JDVT15CiBDT05GSUdfSFpfUEVSSU9ESUM9bgogQ09ORklHX05PX0haX0lETEU9eQogQ09ORklHX05PX0haX0ZVTEw9bgpAQCAtMTksNiArMTksNSBAQAogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQogQ09ORklHX1BST1ZFX0xPQ0tJTkc9bgogQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz1uCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFPXkKIENPTkZJR19SQ1VfQk9PU1Q9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDItVCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTAyLVQKaW5kZXggMTljZjk0OC4uYTI1ZGU0NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDItVAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMi1UCkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT1uCiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgogQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKKyNDSEVDSyNDT05GSUdfUFJFRU1QVF9SQ1U9eQogQ09ORklHX0haX1BFUklPRElDPW4KIENPTkZJR19OT19IWl9JRExFPXkKIENPTkZJR19OT19IWl9GVUxMPW4KQEAgLTE5LDYgKzE5LDUgQEAKIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKIENPTkZJR19QUk9WRV9MT0NLSU5HPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT15CiBDT05GSUdfUkNVX0JPT1NUPW4KIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTAzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDMKaW5kZXggZjQ1NjdmYi4uNTNmMjRlMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDMKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDMKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPW4KIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCiBDT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQorI0NIRUNLI0NPTkZJR19QUkVFTVBUX1JDVT15CiBDT05GSUdfSFpfUEVSSU9ESUM9eQogQ09ORklHX05PX0haX0lETEU9bgogQ09ORklHX05PX0haX0ZVTEw9bgpAQCAtMTUsNyArMTUsNiBAQAogQ09ORklHX1JDVV9OT0NCX0NQVT1uCiBDT05GSUdfREVCVUdfTE9DS19BTExPQz1uCiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPW4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9bgogQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgorQ09ORklHX1JDVV9LVEhSRUFEX1BSSU89MgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNAppbmRleCAwYTI2MmZiLi4wZjg0ZGIzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNApAQCAtMTksNSArMTksNCBAQAogQ09ORklHX1JDVV9OT0NCX0NQVT1uCiBDT05GSUdfREVCVUdfTE9DS19BTExPQz1uCiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNQppbmRleCAzYTA2Yjk3Li4yMTJlM2JmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNQpAQCAtMTksNSArMTksNCBAQAogQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQogQ09ORklHX1BST1ZFX1JDVT15CiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPW4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDUuYm9vdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA1LmJvb3QKaW5kZXggM2I0MmI4Yi4uMTViM2UxYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDUuYm9vdAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNS5ib290CkBAIC0xICsxLDIgQEAKIHJjdXRvcnR1cmUudG9ydHVyZV90eXBlPXNjaGVkCityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0X3NjaGVkPTEKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA2IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDYKaW5kZXggOGYwODRjYy4uN2VlZTYzYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDYKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDYKQEAgLTIwLDUgKzIwLDQgQEAKIENPTkZJR19QUk9WRV9MT0NLSU5HPXkKIENPTkZJR19QUk9WRV9SQ1U9eQogQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz1uCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFPW4KIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA2LmJvb3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNi5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOWEwM2EKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNi5ib290CkBAIC0wLDAgKzEsMyBAQAorcmN1cGRhdGUucmN1X3NlbGZfdGVzdD0xCityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0X2JoPTEKK3JjdXBkYXRlLnJjdV9zZWxmX3Rlc3Rfc2NoZWQ9MQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNwppbmRleCA4ZjEwMTc2Li45MmE5N2ZhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNwpAQCAtMTksNSArMTksNCBAQAogQ09ORklHX1JDVV9OT0NCX0NQVT1uCiBDT05GSUdfREVCVUdfTE9DS19BTExPQz1uCiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOAppbmRleCA2OWEyZTI1Li41ODEyMDI3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOApAQCAtMyw3ICszLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9bgogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KIENPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15CisjQ0hFQ0sjQ09ORklHX1BSRUVNUFRfUkNVPXkKIENPTkZJR19IWl9QRVJJT0RJQz1uCiBDT05GSUdfTk9fSFpfSURMRT15CiBDT05GSUdfTk9fSFpfRlVMTD1uCkBAIC0xOCw3ICsxOCw4IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVPXkKIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMPXkKIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KK0NPTkZJR19QUk9WRV9MT0NLSU5HPXkKK0NPTkZJR19QUk9WRV9SQ1U9eQogQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz1uCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFPW4KIENPTkZJR19SQ1VfQk9PU1Q9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDgtVCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4LVQKaW5kZXggYTBmMzJmYi4uM2VhZWNjYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDgtVAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC1UCkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT1uCiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgogQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKKyNDSEVDSyNDT05GSUdfUFJFRU1QVF9SQ1U9eQogQ09ORklHX0haX1BFUklPRElDPW4KIENPTkZJR19OT19IWl9JRExFPXkKIENPTkZJR19OT19IWl9GVUxMPW4KQEAgLTE5LDYgKzE5LDUgQEAKIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMPXkKIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfUkNVX0JPT1NUPW4KIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4LmJvb3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC5ib290CmluZGV4IDNiNDJiOGIuLjI1NjFkYWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4LmJvb3QKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDguYm9vdApAQCAtMSArMSwzIEBACiByY3V0b3J0dXJlLnRvcnR1cmVfdHlwZT1zY2hlZAorcmN1cGRhdGUucmN1X3NlbGZfdGVzdD0xCityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0X3NjaGVkPTEKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDkKaW5kZXggYjdhNjJhNS4uNjA3NmIzNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDkKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDkKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPW4KIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCiBDT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQorI0NIRUNLI0NPTkZJR19QUkVFTVBUX1JDVT15CiBDT05GSUdfSFpfUEVSSU9ESUM9bgogQ09ORklHX05PX0haX0lETEU9eQogQ09ORklHX05PX0haX0ZVTEw9bgpAQCAtMTQsNiArMTQsNSBAQAogQ09ORklHX1JDVV9OT0NCX0NQVT1uCiBDT05GSUdfREVCVUdfTE9DS19BTExPQz1uCiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPW4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9bgogQ09ORklHX1JDVV9CT09TVD1uCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvQ0ZMSVNUIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL0NGTElTVApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgyMjM5NC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvQ0ZMSVNUCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotUDEtUy1ULU5ILVNELVNNUC1IUAotUDItMi10LW5oLXNkLVNNUC1ocAotUDMtMy1ULW5oLVNELVNNUC1ocAotUDQtQS10LU5ILXNkLVNNUC1IUAotUDUtVS1ULU5ILXNkLVNNUC1ocAotTjEtUy1ULU5ILVNELVNNUC1IUAotTjItMi10LW5oLXNkLVNNUC1ocAotTjMtMy1ULW5oLVNELVNNUC1ocAotTjQtQS10LU5ILXNkLVNNUC1IUAotTjUtVS1ULU5ILXNkLVNNUC1ocAotUFQxLW5oCi1QVDItTkgKLU5UMS1uaAotTlQzLU5ICmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjEtUy1ULU5ILVNELVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMS1TLVQtTkgtU0QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2VmODczLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMS1TLVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD04Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL04yLTItdC1uaC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjItMi10LW5oLXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlNDE4NS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjItMi10LW5oLXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjMtMy1ULW5oLVNELVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzEwMGY2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL040LUEtdC1OSC1zZC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU2YjQ0NS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9ONS1VLVQtTkgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL041LVUtVC1OSC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZDkyNGYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL041LVUtVC1OSC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTlQxLW5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjNmMzEyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj1uCi0jCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTlQzLU5IIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL05UMy1OSApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZkMDIzNS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTlQzLU5ICisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI0NIRUNLI0NPTkZJR19USU5ZX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDEtUy1ULU5ILVNELVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QMS1TLVQtTkgtU0QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0MDJkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QMS1TLVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QMi0yLXQtbmgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AyLTItdC1uaC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2I2NjcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AyLTItdC1uaC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTQKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDMtMy1ULW5oLVNELVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDM1ZTE0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1A0LUEtdC1OSC1zZC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NjZjZhOS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDUtVS1ULU5ILXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QNS1VLVQtTkgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVjMDA4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QNS1VLVQtTkgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX09CSkVDVFM9eQotQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUFQxLW5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzM2MWMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9bgotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QVDItTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUFQyLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGFiZmMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QVDItTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC92ZXJfZnVuY3Rpb25zLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL3Zlcl9mdW5jdGlvbnMuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhY2UzN2EuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL3Zlcl9mdW5jdGlvbnMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIS9iaW4vYmFzaAotIwotIyBLZXJuZWwtdmVyc2lvbi1kZXBlbmRlbnQgc2hlbGwgZnVuY3Rpb25zIGZvciB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0cy4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgeW91IGNhbiBhY2Nlc3MgaXQgb25saW5lIGF0Ci0jIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWwuCi0jCi0jIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDEzCi0jCi0jIEF1dGhvcnM6IFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgotCi0jIHBlcl92ZXJzaW9uX2Jvb3RfcGFyYW1zIGJvb3RwYXJhbS1zdHJpbmcgY29uZmlnLWZpbGUgc2Vjb25kcwotIwotIyBBZGRzIHBlci12ZXJzaW9uIHRvcnR1cmUtbW9kdWxlIHBhcmFtZXRlcnMgdG8ga2VybmVscyBzdXBwb3J0aW5nIHRoZW0uCi0jIFdoaWNoIG9sZCBrZXJuZWxzIGRvIG5vdC4KLXBlcl92ZXJzaW9uX2Jvb3RfcGFyYW1zICgpIHsKLQllY2hvCXJjdXRvcnR1cmUuc3RhdF9pbnRlcnZhbD0xNSBcCi0JCXJjdXRvcnR1cmUuc2h1dGRvd25fc2Vjcz0kMyBcCi0JCXJjdXRvcnR1cmUucmN1dG9ydHVyZV9ydW5uYWJsZT0xIFwKLQkJcmN1dG9ydHVyZS50ZXN0X25vX2lkbGVfaHo9MSBcCi0JCXJjdXRvcnR1cmUudmVyYm9zZT0xCi19CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL0NGTElTVCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvQ0ZMSVNUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTRjYmM2Ni4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL0NGTElTVAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLXN5c2lkbGVZLjIwMTMuMDYuMTlhCi1zeXNpZGxlTi4yMDEzLjA2LjE5YQotUDEtUy1ULU5ILVNELVNNUC1IUAotUDItMi10LW5oLXNkLVNNUC1ocAotUDMtMy1ULW5oLVNELVNNUC1ocAotUDQtQS10LU5ILXNkLVNNUC1IUAotUDUtVS1ULU5ILXNkLVNNUC1ocAotUDYtLS10LW5oLVNELXNtcC1ocAotTjEtUy1ULU5ILVNELVNNUC1IUAotTjItMi10LW5oLXNkLVNNUC1ocAotTjMtMy1ULW5oLVNELVNNUC1ocAotTjQtQS10LU5ILXNkLVNNUC1IUAotTjUtVS1ULU5ILXNkLVNNUC1ocAotUFQxLW5oCi1QVDItTkgKLU5UMS1uaAotTlQzLU5ICmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL04xLVMtVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL04xLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MWUxMWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OMS1TLVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0ZBU1RfTk9fSFo9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9OAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjItMi10LW5oLXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjItMi10LW5oLXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlNDE4NS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL04yLTItdC1uaC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTQKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzEwMGY2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjMtMy1ULW5oLVNELVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU2YjQ0NS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL040LUEtdC1OSC1zZC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL041LVUtVC1OSC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL041LVUtVC1OSC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZDkyNGYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONS1VLVQtTkgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9eQotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL042LS0tdC1uaC1TRC1zbXAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL042LS0tdC1uaC1TRC1zbXAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjY2MzNmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONi0tLXQtbmgtU0Qtc21wLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfTlJfQ1BVUz0xCi1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjctNC1ULU5ILVNELVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjctNC1ULU5ILVNELVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y2NDBjZi4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL043LTQtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz0xNgotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9OT05FPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFVfWkVSTz1uCi1DT05GSUdfUkNVX05PQ0JfQ1BVX0FMTD1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OOC0yLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OOC0yLVQtTkgtU0QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODVkYTJkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjgtMi1ULU5ILVNELVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTE0Ci1DT05GSUdfTlJfQ1BVUz0xNgotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9eQotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL05UMS1uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTlQxLW5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjNmMzEyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTlQxLW5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI0NIRUNLI0NPTkZJR19USU5ZX1JDVT15Ci1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9bgotIwotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OVDMtTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL05UMy1OSApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZkMDIzNS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL05UMy1OSAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNDSEVDSyNDT05GSUdfVElOWV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj15Ci0jCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMS1TLVQtTkgtU0QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjQ3YzQ0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDEtUy1ULU5ILVNELVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1JDVV9GQVNUX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9OAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMi0yLXQtbmgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjNiNjY3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDItMi10LW5oLXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDMtMy1ULW5oLVNELVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDMtMy1ULW5oLVNELVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAzNWUxNC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1AzLTMtVC1uaC1TRC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A0LUEtdC1OSC1zZC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A0LUEtdC1OSC1zZC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjY2Y2YTkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNC1BLXQtTkgtc2QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDUtVS1ULU5ILXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU1YzAwOC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A1LVUtVC1OSC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9eQotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfT0JKRUNUUz15Ci1DT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNi0tLXQtbmgtU0Qtc21wLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNi0tLXQtbmgtU0Qtc21wLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGM5MTc1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDYtLS10LW5oLVNELXNtcC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9bgotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2E4YzViLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MgotQ09ORklHX05SX0NQVVM9MTYKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFVfTk9ORT1uCi1DT05GSUdfUkNVX05PQ0JfQ1BVX1pFUk89bgotQ09ORklHX1JDVV9OT0NCX0NQVV9BTEw9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX09CSkVDVFM9eQotQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX1NMVUI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1IUC1hbGwgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtSFAtYWxsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWVjZWJjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1IUC1hbGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTE2Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVX05PTkU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9aRVJPPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFVfQUxMPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19TTFVCPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtSFAtbm9uZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1IUC1ub25lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWVjZWJjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1IUC1ub25lCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz0xNgotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9OT05FPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFVfWkVSTz1uCi1DT05GSUdfUkNVX05PQ0JfQ1BVX0FMTD1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfT0JKRUNUUz15Ci1DT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfU0xVQj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODhiYzcwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MgotQ09ORklHX05SX0NQVVM9MTYKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfUkNVX05PQ0JfQ1BVPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFVfTk9ORT1uCi1DT05GSUdfUkNVX05PQ0JfQ1BVX1pFUk89eQotQ09ORklHX1JDVV9OT0NCX0NQVV9BTEw9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX09CSkVDVFM9eQotQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX1NMVUI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUFQxLW5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMzYxYzMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9bgotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUFQyLU5IIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QVDItTkgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YWJmYzMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QVDItTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9DRkxJU1QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvQ0ZMSVNUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODIyMzk0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9DRkxJU1QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1QMS1TLVQtTkgtU0QtU01QLUhQCi1QMi0yLXQtbmgtc2QtU01QLWhwCi1QMy0zLVQtbmgtU0QtU01QLWhwCi1QNC1BLXQtTkgtc2QtU01QLUhQCi1QNS1VLVQtTkgtc2QtU01QLWhwCi1OMS1TLVQtTkgtU0QtU01QLUhQCi1OMi0yLXQtbmgtc2QtU01QLWhwCi1OMy0zLVQtbmgtU0QtU01QLWhwCi1ONC1BLXQtTkgtc2QtU01QLUhQCi1ONS1VLVQtTkgtc2QtU01QLWhwCi1QVDEtbmgKLVBUMi1OSAotTlQxLW5oCi1OVDMtTkgKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL04xLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MWUxMWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL04xLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfRkFTVF9OT19IWj15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD04Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL04yLTItdC1uaC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjItMi10LW5oLXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlNDE4NS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjItMi10LW5oLXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjMtMy1ULW5oLVNELVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzEwMGY2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL040LUEtdC1OSC1zZC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU2YjQ0NS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9ONS1VLVQtTkgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL041LVUtVC1OSC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZDkyNGYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL041LVUtVC1OSC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTlQxLW5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjNmMzEyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj1uCi0jCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTlQzLU5IIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL05UMy1OSApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZkMDIzNS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTlQzLU5ICisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI0NIRUNLI0NPTkZJR19USU5ZX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDEtUy1ULU5ILVNELVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMS1TLVQtTkgtU0QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjQ3YzQ0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMS1TLVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfUkNVX0ZBU1RfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD04Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDItMi10LW5oLXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjNiNjY3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1AzLTMtVC1uaC1TRC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDMtMy1ULW5oLVNELVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAzNWUxNC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDMtMy1ULW5oLVNELVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QNC1BLXQtTkgtc2QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1A0LUEtdC1OSC1zZC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjY2Y2YTkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1A0LUEtdC1OSC1zZC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1A1LVUtVC1OSC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU1YzAwOC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUFQxLW5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1BUMS1uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMzNjFjMy4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUFQxLW5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotQ09ORklHX1RJTllfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPW4KLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUFQyLU5IIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1BUMi1OSApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhYmZjMy4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUFQyLU5ICisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1RJTllfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj15Ci0jCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvdmVyX2Z1bmN0aW9ucy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy92ZXJfZnVuY3Rpb25zLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWU1NTY5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy92ZXJfZnVuY3Rpb25zLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyEvYmluL2Jhc2gKLSMKLSMgS2VybmVsLXZlcnNpb24tZGVwZW5kZW50IHNoZWxsIGZ1bmN0aW9ucyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHNjcmlwdHMuCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHlvdSBjYW4gYWNjZXNzIGl0IG9ubGluZSBhdAotIyBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sLgotIwotIyBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAxMwotIwotIyBBdXRob3JzOiBQYXVsIEUuIE1jS2VubmV5IDxwYXVsbWNrQGxpbnV4LnZuZXQuaWJtLmNvbT4KLQotIyByY3V0b3J0dXJlX3BhcmFtX29ub2ZmIGJvb3RwYXJhbS1zdHJpbmcgY29uZmlnLWZpbGUKLSMKLSMgQWRkcyBvbm9mZiByY3V0b3J0dXJlIG1vZHVsZSBwYXJhbWV0ZXJzIHRvIGtlcm5lbHMgaGF2aW5nIGl0LgotcmN1dG9ydHVyZV9wYXJhbV9vbm9mZiAoKSB7Ci0JaWYgISBib290cGFyYW1faG90cGx1Z19jcHUgIiQxIiAmJiBjb25maWdmcmFnX2hvdHBsdWdfY3B1ICIkMiIKLQl0aGVuCi0JCWVjaG8gQ1BVLWhvdHBsdWcga2VybmVsLCBhZGRpbmcgcmN1dG9ydHVyZSBvbm9mZi4gMT4mMgotCQllY2hvIHJjdXRvcnR1cmUub25vZmZfaW50ZXJ2YWw9MyByY3V0b3J0dXJlLm9ub2ZmX2hvbGRvZmY9MzAKLQlmaQotfQotCi0jIHBlcl92ZXJzaW9uX2Jvb3RfcGFyYW1zIGJvb3RwYXJhbS1zdHJpbmcgY29uZmlnLWZpbGUgc2Vjb25kcwotIwotIyBBZGRzIHBlci12ZXJzaW9uIHRvcnR1cmUtbW9kdWxlIHBhcmFtZXRlcnMgdG8ga2VybmVscyBzdXBwb3J0aW5nIHRoZW0uCi1wZXJfdmVyc2lvbl9ib290X3BhcmFtcyAoKSB7Ci0JZWNobyAkMSBgcmN1dG9ydHVyZV9wYXJhbV9vbm9mZiAiJDEiICIkMiJgIFwKLQkJcmN1dG9ydHVyZS5zdGF0X2ludGVydmFsPTE1IFwKLQkJcmN1dG9ydHVyZS5zaHV0ZG93bl9zZWNzPSQzIFwKLQkJcmN1dG9ydHVyZS5yY3V0b3J0dXJlX3J1bm5hYmxlPTEgXAotCQlyY3V0b3J0dXJlLnRlc3Rfbm9faWRsZV9oej0xIFwKLQkJcmN1dG9ydHVyZS52ZXJib3NlPTEKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9DRkxJU1QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvQ0ZMSVNUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODIyMzk0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9DRkxJU1QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1QMS1TLVQtTkgtU0QtU01QLUhQCi1QMi0yLXQtbmgtc2QtU01QLWhwCi1QMy0zLVQtbmgtU0QtU01QLWhwCi1QNC1BLXQtTkgtc2QtU01QLUhQCi1QNS1VLVQtTkgtc2QtU01QLWhwCi1OMS1TLVQtTkgtU0QtU01QLUhQCi1OMi0yLXQtbmgtc2QtU01QLWhwCi1OMy0zLVQtbmgtU0QtU01QLWhwCi1ONC1BLXQtTkgtc2QtU01QLUhQCi1ONS1VLVQtTkgtc2QtU01QLWhwCi1QVDEtbmgKLVBUMi1OSAotTlQxLW5oCi1OVDMtTkgKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L04xLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MWUxMWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L04xLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfRkFTVF9OT19IWj15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD04Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L04yLTItdC1uaC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjItMi10LW5oLXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlNDE4NS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjItMi10LW5oLXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjMtMy1ULW5oLVNELVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzEwMGY2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L040LUEtdC1OSC1zZC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU2YjQ0NS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9ONS1VLVQtTkgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L041LVUtVC1OSC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZDkyNGYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L041LVUtVC1OSC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTlQxLW5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjNmMzEyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj1uCi0jCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTlQzLU5IIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L05UMy1OSApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZkMDIzNS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTlQzLU5ICisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI0NIRUNLI0NPTkZJR19USU5ZX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDEtUy1ULU5ILVNELVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMS1TLVQtTkgtU0QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjQ3YzQ0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMS1TLVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfUkNVX0ZBU1RfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD04Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDItMi10LW5oLXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjNiNjY3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1AzLTMtVC1uaC1TRC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDMtMy1ULW5oLVNELVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAzNWUxNC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDMtMy1ULW5oLVNELVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QNC1BLXQtTkgtc2QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1A0LUEtdC1OSC1zZC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjY2Y2YTkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1A0LUEtdC1OSC1zZC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1A1LVUtVC1OSC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU1YzAwOC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUFQxLW5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1BUMS1uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMzNjFjMy4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUFQxLW5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotQ09ORklHX1RJTllfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPW4KLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUFQyLU5IIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1BUMi1OSApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhYmZjMy4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUFQyLU5ICisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1RJTllfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj15Ci0jCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvdmVyX2Z1bmN0aW9ucy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS92ZXJfZnVuY3Rpb25zLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTc3ZDhkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS92ZXJfZnVuY3Rpb25zLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotIyEvYmluL2Jhc2gKLSMKLSMgS2VybmVsLXZlcnNpb24tZGVwZW5kZW50IHNoZWxsIGZ1bmN0aW9ucyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHNjcmlwdHMuCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHlvdSBjYW4gYWNjZXNzIGl0IG9ubGluZSBhdAotIyBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sLgotIwotIyBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAxMwotIwotIyBBdXRob3JzOiBQYXVsIEUuIE1jS2VubmV5IDxwYXVsbWNrQGxpbnV4LnZuZXQuaWJtLmNvbT4KLQotIyByY3V0b3J0dXJlX3BhcmFtX25fYmFycmllcl9jYnMgYm9vdHBhcmFtLXN0cmluZwotIwotIyBBZGRzIG5fYmFycmllcl9jYnMgcmN1dG9ydHVyZSBtb2R1bGUgcGFyYW1ldGVyIHRvIGtlcm5lbHMgaGF2aW5nIGl0LgotcmN1dG9ydHVyZV9wYXJhbV9uX2JhcnJpZXJfY2JzICgpIHsKLQlpZiBlY2hvICQxIHwgZ3JlcCAtcSAicmN1dG9ydHVyZVwubl9iYXJyaWVyX2NicyIKLQl0aGVuCi0JCToKLQllbHNlCi0JCWVjaG8gcmN1dG9ydHVyZS5uX2JhcnJpZXJfY2JzPTQKLQlmaQotfQotCi0jIHJjdXRvcnR1cmVfcGFyYW1fb25vZmYgYm9vdHBhcmFtLXN0cmluZyBjb25maWctZmlsZQotIwotIyBBZGRzIG9ub2ZmIHJjdXRvcnR1cmUgbW9kdWxlIHBhcmFtZXRlcnMgdG8ga2VybmVscyBoYXZpbmcgaXQuCi1yY3V0b3J0dXJlX3BhcmFtX29ub2ZmICgpIHsKLQlpZiAhIGJvb3RwYXJhbV9ob3RwbHVnX2NwdSAiJDEiICYmIGNvbmZpZ2ZyYWdfaG90cGx1Z19jcHUgIiQyIgotCXRoZW4KLQkJZWNobyBDUFUtaG90cGx1ZyBrZXJuZWwsIGFkZGluZyByY3V0b3J0dXJlIG9ub2ZmLiAxPiYyCi0JCWVjaG8gcmN1dG9ydHVyZS5vbm9mZl9pbnRlcnZhbD0zIHJjdXRvcnR1cmUub25vZmZfaG9sZG9mZj0zMAotCWZpCi19Ci0KLSMgcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgYm9vdHBhcmFtLXN0cmluZyBjb25maWctZmlsZSBzZWNvbmRzCi0jCi0jIEFkZHMgcGVyLXZlcnNpb24gdG9ydHVyZS1tb2R1bGUgcGFyYW1ldGVycyB0byBrZXJuZWxzIHN1cHBvcnRpbmcgdGhlbS4KLXBlcl92ZXJzaW9uX2Jvb3RfcGFyYW1zICgpIHsKLQllY2hvICQxIGByY3V0b3J0dXJlX3BhcmFtX29ub2ZmICIkMSIgIiQyImAgXAotCQlgcmN1dG9ydHVyZV9wYXJhbV9uX2JhcnJpZXJfY2JzICIkMSJgIFwKLQkJcmN1dG9ydHVyZS5zdGF0X2ludGVydmFsPTE1IFwKLQkJcmN1dG9ydHVyZS5zaHV0ZG93bl9zZWNzPSQzIFwKLQkJcmN1dG9ydHVyZS5yY3V0b3J0dXJlX3J1bm5hYmxlPTEgXAotCQlyY3V0b3J0dXJlLnRlc3Rfbm9faWRsZV9oej0xIFwKLQkJcmN1dG9ydHVyZS52ZXJib3NlPTEKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvZG9jL1RJTllfUkNVLnR4dCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvZG9jL1RJTllfUkNVLnR4dAppbmRleCAyOGRiNjdiLi45ZWYzM2E3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2RvYy9USU5ZX1JDVS50eHQKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVElOWV9SQ1UudHh0CkBAIC0zNCw3ICszNCw3IEBACiBDT05GSUdfUFJFRU1QVF9SQ1UKIENPTkZJR19TTVAKIENPTkZJR19USU5ZX1JDVQotQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKK0NPTkZJR19QUkVFTVBUX1JDVQogQ09ORklHX1RSRUVfUkNVCiAKIAlBbGwgZm9yY2VkIGJ5IENPTkZJR19USU5ZX1JDVS4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvZG9jL1RSRUVfUkNVLWtjb25maWcudHh0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVFJFRV9SQ1Uta2NvbmZpZy50eHQKaW5kZXggM2U1ODhkYi4uZWMwM2M4OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVFJFRV9SQ1Uta2NvbmZpZy50eHQKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVFJFRV9SQ1Uta2NvbmZpZy50eHQKQEAgLTEsNSArMSw1IEBACiBUaGlzIGRvY3VtZW50IGdpdmVzIGEgYnJpZWYgcmF0aW9uYWxlIGZvciB0aGUgVFJFRV9SQ1UtcmVsYXRlZCB0ZXN0Ci1jYXNlcywgYSBncm91cCB0aGF0IGluY2x1ZGVzIFRSRUVfUFJFRU1QVF9SQ1UuCitjYXNlcywgYSBncm91cCB0aGF0IGluY2x1ZGVzIFBSRUVNUFRfUkNVLgogCiAKIEtjb25maWcgUGFyYW1ldGVyczoKQEAgLTE0LDEwICsxNCw5IEBACiBDT05GSUdfUFJFRU1QVCAtLSBEbyBoYWxmLiAgKEZpcnN0IHRocmVlIGFuZCAjOC4pCiBDT05GSUdfUFJPVkVfTE9DS0lORyAtLSBEbyBhbGwgYnV0IHR3bywgY292ZXJpbmcgQ09ORklHX1BST1ZFX1JDVSBhbmQgbm90LgogQ09ORklHX1BST1ZFX1JDVSAtLSBEbyBhbGwgYnV0IG9uZSB1bmRlciBDT05GSUdfUFJPVkVfTE9DS0lORy4KLUNPTkZJR19SQ1VfQk9PU1QgLS0gb25lIG9mIFRSRUVfUFJFRU1QVF9SQ1UuCi1DT05GSUdfUkNVX0JPT1NUX1BSSU8gLS0gc2V0IHRvIDIgZm9yIF9CT09TVCB0ZXN0aW5nLgotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTyAtLSBkbyBvbmUgd2l0aCBhbmQgd2l0aG91dCBfVkVSQk9TRS4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UgLS0gZG8gb25lIHdpdGggYW5kIHdpdGhvdXQgX0lORk8uCitDT05GSUdfUkNVX0JPT1NUIC0tIG9uZSBvZiBQUkVFTVBUX1JDVS4KK0NPTkZJR19SQ1VfS1RIUkVBRF9QUklPIC0tIHNldCB0byAyIGZvciBfQk9PU1QgdGVzdGluZy4KK0NPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8gLS0gRG8gb25lLgogQ09ORklHX1JDVV9GQU5PVVQgLS0gQ292ZXIgaGllcmFyY2h5IGFzIGN1cnJlbnRseSwgYnV0IG92ZXJsYXAgd2l0aCBvdGhlcnMuCiBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCAtLSBEbyBvbmUuCiBDT05GSUdfUkNVX0ZBTk9VVF9MRUFGIC0tIERvIG9uZSBub24tZGVmYXVsdC4KQEAgLTI3LDcgKzI2LDcgQEAKIENPTkZJR19SQ1VfTk9DQl9DUFVfTk9ORSAtLSBEbyBvbmUuCiBDT05GSUdfUkNVX05PQ0JfQ1BVX1pFUk8gLS0gRG8gb25lLgogQ09ORklHX1JDVV9UUkFDRSAtLSBEbyBoYWxmLgotQ09ORklHX1NNUCAtLSBOZWVkIG9uZSAhU01QIGZvciBUUkVFX1BSRUVNUFRfUkNVLgorQ09ORklHX1NNUCAtLSBOZWVkIG9uZSAhU01QIGZvciBQUkVFTVBUX1JDVS4KIFJDVS1iaDogRG8gb25lIHdpdGggUFJFRU1QVCBhbmQgb25lIHdpdGggIVBSRUVNUFQuCiBSQ1Utc2NoZWQ6IERvIG9uZSB3aXRoIFBSRUVNUFQgYnV0IG5vdCBCT09TVC4KIApAQCAtNzcsNyArNzYsNyBAQAogCiBDT05GSUdfUkNVX1NUQUxMX0NPTU1PTgogCi0JSW1wbGllZCBieSBUUkVFX1JDVSBhbmQgVFJFRV9QUkVFTVBUX1JDVS4KKwlJbXBsaWVkIGJ5IFRSRUVfUkNVIGFuZCBQUkVFTVBUX1JDVS4KIAogQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QKIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUX1JVTk5BQkxFCkBAIC04OCw3ICs4Nyw3IEBACiAKIAlSZWR1bmRhbnQgd2l0aCBDT05GSUdfTk9fSFpfRlVMTC4KIAotQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKK0NPTkZJR19QUkVFTVBUX1JDVQogQ09ORklHX1RSRUVfUkNVCiAKIAlUaGVzZSBhcmUgY29udHJvbGxlZCBieSBDT05GSUdfUFJFRU1QVC4KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2FybS92Z2ljLmMgYi92aXJ0L2t2bS9hcm0vdmdpYy5jCmluZGV4IDNhYWNhNDkuLmFhY2RiNTkgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2FybS92Z2ljLmMKKysrIGIvdmlydC9rdm0vYXJtL3ZnaWMuYwpAQCAtMTkzMyw3ICsxOTMzLDcgQEAKIAogaW50IGt2bV92Z2ljX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaW50IGksIHZjcHVfbG9ja19pZHggPSAtMSwgcmV0ID0gMDsKKwlpbnQgaSwgdmNwdV9sb2NrX2lkeCA9IC0xLCByZXQ7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCiAJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKQEAgLTE5NDgsNiArMTk0OCw3IEBACiAJICogdmNwdS0+bXV0ZXguICBCeSBncmFiYmluZyB0aGUgdmNwdS0+bXV0ZXggb2YgYWxsIFZDUFVzIHdlIGVuc3VyZQogCSAqIHRoYXQgbm8gb3RoZXIgVkNQVXMgYXJlIHJ1biB3aGlsZSB3ZSBjcmVhdGUgdGhlIHZnaWMuCiAJICovCisJcmV0ID0gLUVCVVNZOwogCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewogCQlpZiAoIW11dGV4X3RyeWxvY2soJnZjcHUtPm11dGV4KSkKIAkJCWdvdG8gb3V0X3VubG9jazsKQEAgLTE5NTUsMTEgKzE5NTYsMTAgQEAKIAl9CiAKIAlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsKLQkJaWYgKHZjcHUtPmFyY2guaGFzX3J1bl9vbmNlKSB7Ci0JCQlyZXQgPSAtRUJVU1k7CisJCWlmICh2Y3B1LT5hcmNoLmhhc19ydW5fb25jZSkKIAkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQogCX0KKwlyZXQgPSAwOwogCiAJc3Bpbl9sb2NrX2luaXQoJmt2bS0+YXJjaC52Z2ljLmxvY2spOwogCWt2bS0+YXJjaC52Z2ljLmluX2tlcm5lbCA9IHRydWU7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCAyNWZmYWM5Li4zY2VlN2IxIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTEwNywxMCArMTA3LDEwIEBACiAKIHN0YXRpYyBib29sIGxhcmdlcGFnZXNfZW5hYmxlZCA9IHRydWU7CiAKLWJvb2wga3ZtX2lzX21taW9fcGZuKHBmbl90IHBmbikKK2Jvb2wga3ZtX2lzX3Jlc2VydmVkX3BmbihwZm5fdCBwZm4pCiB7CiAJaWYgKHBmbl92YWxpZChwZm4pKQotCQlyZXR1cm4gIWlzX3plcm9fcGZuKHBmbikgJiYgUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpOworCQlyZXR1cm4gUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMzIxLDcgKzEzMjEsNyBAQAogCWVsc2UgaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOTUFQKSkgewogCQlwZm4gPSAoKGFkZHIgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKSArCiAJCQl2bWEtPnZtX3Bnb2ZmOwotCQlCVUdfT04oIWt2bV9pc19tbWlvX3BmbihwZm4pKTsKKwkJQlVHX09OKCFrdm1faXNfcmVzZXJ2ZWRfcGZuKHBmbikpOwogCX0gZWxzZSB7CiAJCWlmIChhc3luYyAmJiB2bWFfaXNfdmFsaWQodm1hLCB3cml0ZV9mYXVsdCkpCiAJCQkqYXN5bmMgPSB0cnVlOwpAQCAtMTQyNyw3ICsxNDI3LDcgQEAKIAlpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pKQogCQlyZXR1cm4gS1ZNX0VSUl9QVFJfQkFEX1BBR0U7CiAKLQlpZiAoa3ZtX2lzX21taW9fcGZuKHBmbikpIHsKKwlpZiAoa3ZtX2lzX3Jlc2VydmVkX3BmbihwZm4pKSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybiBLVk1fRVJSX1BUUl9CQURfUEFHRTsKIAl9CkBAIC0xNDU2LDcgKzE0NTYsNyBAQAogCiB2b2lkIGt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm5fdCBwZm4pCiB7Ci0JaWYgKCFpc19lcnJvcl9ub3Nsb3RfcGZuKHBmbikgJiYgIWt2bV9pc19tbWlvX3BmbihwZm4pKQorCWlmICghaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pICYmICFrdm1faXNfcmVzZXJ2ZWRfcGZuKHBmbikpCiAJCXB1dF9wYWdlKHBmbl90b19wYWdlKHBmbikpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKTsKQEAgLTE0NzcsNyArMTQ3Nyw3IEBACiAKIHZvaWQga3ZtX3NldF9wZm5fZGlydHkocGZuX3QgcGZuKQogewotCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpIHsKKwlpZiAoIWt2bV9pc19yZXNlcnZlZF9wZm4ocGZuKSkgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAJCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpKQogCQkJU2V0UGFnZURpcnR5KHBhZ2UpOwpAQCAtMTQ4NywxNCArMTQ4NywxNCBAQAogCiB2b2lkIGt2bV9zZXRfcGZuX2FjY2Vzc2VkKHBmbl90IHBmbikKIHsKLQlpZiAoIWt2bV9pc19tbWlvX3BmbihwZm4pKQorCWlmICgha3ZtX2lzX3Jlc2VydmVkX3BmbihwZm4pKQogCQltYXJrX3BhZ2VfYWNjZXNzZWQocGZuX3RvX3BhZ2UocGZuKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fc2V0X3Bmbl9hY2Nlc3NlZCk7CiAKIHZvaWQga3ZtX2dldF9wZm4ocGZuX3QgcGZuKQogewotCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpCisJaWYgKCFrdm1faXNfcmVzZXJ2ZWRfcGZuKHBmbikpCiAJCWdldF9wYWdlKHBmbl90b19wYWdlKHBmbikpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9wZm4pOwo=